@pagelines/sdk 1.0.682 → 1.0.683

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 (100) hide show
  1. package/dist/AgentProvider.js +701 -0
  2. package/dist/AgentProvider.js.map +1 -0
  3. package/dist/AgentWidgetInline.js +44 -32
  4. package/dist/AgentWidgetInline.js.map +1 -1
  5. package/dist/AgentWidgetModal.js +75 -64
  6. package/dist/AgentWidgetModal.js.map +1 -1
  7. package/dist/AgentWrap.js +5180 -0
  8. package/dist/AgentWrap.js.map +1 -0
  9. package/dist/FModal.js +165 -0
  10. package/dist/FModal.js.map +1 -0
  11. package/dist/agent/ui/AgentChat.vue.d.ts +3 -4
  12. package/dist/agent/ui/AgentInputEmail.vue.d.ts +3 -2
  13. package/dist/agent/ui/AgentInputOneTimeCode.vue.d.ts +3 -4
  14. package/dist/agent/ui/AgentModal.vue.d.ts +2 -1
  15. package/dist/agent/ui/AgentProvider.vue.d.ts +2 -1
  16. package/dist/agent/ui/AgentSidebarClose.vue.d.ts +3 -2
  17. package/dist/agent/ui/AgentToolActivityGroup.vue.d.ts +2 -1
  18. package/dist/agent/ui/AgentWidget.vue.d.ts +3 -2
  19. package/dist/agent/ui/AgentWrap.vue.d.ts +14 -29
  20. package/dist/agent/ui/ChatRichText.vue.d.ts +2 -1
  21. package/dist/agent/ui/ChatScroller.vue.d.ts +8 -18
  22. package/dist/agent/ui/ChatVisualBlock.vue.d.ts +2 -3
  23. package/dist/agent/ui/ElAgentAbout.vue.d.ts +2 -1
  24. package/dist/agent/ui/ElAgentButton.vue.d.ts +7 -11
  25. package/dist/agent/ui/ElAgentChat.vue.d.ts +2 -53
  26. package/dist/agent/ui/ElAgentChatPreview.vue.d.ts +2 -1
  27. package/dist/agent/ui/ElAgentHeader.vue.d.ts +2 -1
  28. package/dist/agent/ui/ElAgentModeSidebar.vue.d.ts +2 -1
  29. package/dist/agent/ui/ElAgentSidebar.vue.d.ts +2 -1
  30. package/dist/agent/ui/ElAuthGate.vue.d.ts +2 -1
  31. package/dist/agent/ui/ElAuthPanel.vue.d.ts +2 -1
  32. package/dist/agent/ui/ElCreateAgent.vue.d.ts +3 -2
  33. package/dist/agent/ui/ElModeHeader.vue.d.ts +2 -1
  34. package/dist/agent/ui/ElProvisioningStatus.vue.d.ts +3 -2
  35. package/dist/agent/ui/ElSidebar.vue.d.ts +9 -12
  36. package/dist/agent/ui/ElTrialGate.vue.d.ts +2 -1
  37. package/dist/agent.js +157 -186
  38. package/dist/agent.js.map +1 -1
  39. package/dist/constants.js +80 -0
  40. package/dist/constants.js.map +1 -0
  41. package/dist/contract.js +6284 -0
  42. package/dist/contract.js.map +1 -0
  43. package/dist/demo.js +242 -259
  44. package/dist/demo.js.map +1 -1
  45. package/dist/rolldown-runtime.js +14 -0
  46. package/dist/sdk.css +2 -1
  47. package/dist/sdk.js +4 -14
  48. package/dist/sdkClient.js +775 -867
  49. package/dist/sdkClient.js.map +1 -1
  50. package/dist/ui/EffectTransitionList.vue.d.ts +7 -11
  51. package/dist/ui/FClose.vue.d.ts +3 -2
  52. package/dist/ui/FModal.vue.d.ts +7 -5
  53. package/dist/ui/FSpinner.vue.d.ts +3 -2
  54. package/dist/useWidgetState.js +21 -0
  55. package/dist/useWidgetState.js.map +1 -0
  56. package/dist/widget/ui/AgentWidgetInline.vue.d.ts +2 -1
  57. package/dist/widget/ui/AgentWidgetModal.vue.d.ts +2 -1
  58. package/dist/widget/ui/AgentWidgetOnboard.vue.d.ts +2 -1
  59. package/dist/widget/ui/AgentWidgetPopup.vue.d.ts +3 -2
  60. package/dist/widget.js +717 -7
  61. package/dist/widget.js.map +1 -1
  62. package/package.json +25 -25
  63. package/dist/AgentProvider.vue_vue_type_script_setup_true_lang.js +0 -842
  64. package/dist/AgentProvider.vue_vue_type_script_setup_true_lang.js.map +0 -1
  65. package/dist/AgentWidgetOnboard.js +0 -5
  66. package/dist/AgentWidgetOnboard.js.map +0 -1
  67. package/dist/AgentWrap.vue_vue_type_script_setup_true_lang.js +0 -4952
  68. package/dist/AgentWrap.vue_vue_type_script_setup_true_lang.js.map +0 -1
  69. package/dist/FModal.vue_vue_type_script_setup_true_lang.js +0 -181
  70. package/dist/FModal.vue_vue_type_script_setup_true_lang.js.map +0 -1
  71. package/dist/agent/test/AgentController.test.d.ts +0 -1
  72. package/dist/agent/test/AgentToolActivityGroup.client.test.d.ts +0 -1
  73. package/dist/agent/test/ChatRichText.client.test.d.ts +0 -1
  74. package/dist/agent/test/ChatVisualBlock.client.test.d.ts +0 -1
  75. package/dist/agent/test/ElAgentChat.client.test.d.ts +0 -1
  76. package/dist/agent/test/ElAgentChatPreview.client.test.d.ts +0 -1
  77. package/dist/agent/test/VoiceRecorderController.unit.test.d.ts +0 -1
  78. package/dist/agent/test/auth-inputs.test.d.ts +0 -1
  79. package/dist/agent/test/chat-visual-format.unit.test.d.ts +0 -1
  80. package/dist/agent/test/utils.test.d.ts +0 -1
  81. package/dist/agent/test/webhook.test.d.ts +0 -1
  82. package/dist/contract/regenerate.d.ts +0 -2
  83. package/dist/contract/test/build.unit.test.d.ts +0 -1
  84. package/dist/contract/test/conversation-wire-shapes.unit.test.d.ts +0 -14
  85. package/dist/contract/test/snapshot.unit.test.d.ts +0 -1
  86. package/dist/index.js +0 -871
  87. package/dist/index.js.map +0 -1
  88. package/dist/sdk.js.map +0 -1
  89. package/dist/socialPlatforms.js +0 -82
  90. package/dist/socialPlatforms.js.map +0 -1
  91. package/dist/test/agent-client.test.d.ts +0 -4
  92. package/dist/test/api.test.d.ts +0 -1
  93. package/dist/test/billing-client.test.d.ts +0 -4
  94. package/dist/test/build.test.d.ts +0 -1
  95. package/dist/test/chat-authenticated.test.d.ts +0 -1
  96. package/dist/test/chat-issue-presentation.test.d.ts +0 -1
  97. package/dist/test/derive-mode.test.d.ts +0 -1
  98. package/dist/test/sdk-token-capture.test.d.ts +0 -13
  99. package/dist/vite.config.sdk.d.ts +0 -2
  100. package/dist/vitest.config.d.ts +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"widget.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
1
+ {"version":3,"file":"widget.js","names":[],"sources":["../input.css","../home/runner/work/pagelines-app/pagelines-app/node_modules/.pnpm/tailwindcss@4.3.3/node_modules/tailwindcss/index.css","../home/runner/work/pagelines-app/pagelines-app/packages/sdk/agent/ui/styles.css?inline","../agent/ui/ElAuthPanel.vue","../agent/ui/ElAuthPanel.vue","../agent/ui/ElCreateAgent.vue","../agent/ui/ElCreateAgent.vue","../agent/ui/ElProvisioningStatus.vue","../agent/ui/ElProvisioningStatus.vue","../agent/ui/ElTrialGate.vue","../agent/ui/ElTrialGate.vue","../widget/ui/AgentWidgetOnboard.vue","../widget/ui/AgentWidgetOnboard.vue","../widget/ui/AgentWidgetPopup.vue","../widget/ui/AgentWidgetPopup.vue","../widget/PLWidget.ts","../widget/composables/usePLWidget.ts"],"sourcesContent":["/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n@layer properties;\n@layer theme, base, components, utilities;\n@layer theme {\n :root, :host {\n --font-sans: system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\n --font-mono: \"DM Mono\", \"SF Mono\", SFMono-Regular, Consolas, \"Liberation Mono\", Menlo,\n Courier, monospace;\n --color-red-300: oklch(80.8% 0.114 19.571);\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-amber-500: oklch(76.9% 0.188 70.08);\n --color-green-300: oklch(87.1% 0.15 154.449);\n --color-green-400: oklch(79.2% 0.209 151.711);\n --color-green-500: oklch(72.3% 0.219 149.579);\n --color-green-600: oklch(62.7% 0.194 149.214);\n --color-emerald-500: oklch(69.6% 0.17 162.48);\n --color-slate-200: oklch(92.9% 0.013 255.508);\n --color-slate-950: oklch(12.9% 0.042 264.695);\n --color-black: #000;\n --color-white: #fff;\n --spacing: 0.25rem;\n --breakpoint-md: 48rem;\n --container-xs: 20rem;\n --container-sm: 24rem;\n --container-md: 28rem;\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-xl: 1.25rem;\n --text-xl--line-height: calc(1.75 / 1.25);\n --text-2xl: 1.5rem;\n --text-2xl--line-height: calc(2 / 1.5);\n --text-3xl: 1.875rem;\n --text-3xl--line-height: calc(2.25 / 1.875);\n --font-weight-light: 300;\n --font-weight-medium: 500;\n --font-weight-semibold: 600;\n --tracking-wide: 0.025em;\n --tracking-widest: 0.1em;\n --leading-tight: 1.25;\n --leading-snug: 1.375;\n --leading-relaxed: 1.625;\n --radius-lg: 0.5rem;\n --radius-xl: 0.75rem;\n --radius-2xl: 1rem;\n --radius-3xl: 1.5rem;\n --ease-in: cubic-bezier(0.4, 0, 1, 1);\n --ease-out: cubic-bezier(0, 0, 0.2, 1);\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 --blur-sm: 8px;\n --blur-lg: 16px;\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 --color-theme-0: var(--theme-0, #ffffff);\n --color-theme-25: var(--theme-25, #f8fafc);\n --color-theme-50: var(--theme-50, #f3f4f6);\n --color-theme-100: var(--theme-100, #e5e7eb);\n --color-theme-200: var(--theme-200, #d1d5db);\n --color-theme-300: var(--theme-300, #9ca3af);\n --color-theme-400: var(--theme-400, #6b7280);\n --color-theme-500: var(--theme-500, #4b5563);\n --color-theme-600: var(--theme-600, #374151);\n --color-theme-700: var(--theme-700, #1f2a44);\n --color-theme-800: var(--theme-800, #111827);\n --color-theme-900: var(--theme-900, #0c0a13);\n --color-theme-950: var(--theme-950, #030712);\n --color-primary-300: var(--primary-300, #60a5fa);\n --color-primary-400: var(--primary-400, #3b82f6);\n --color-primary-500: var(--primary-500, #2563eb);\n --color-primary-600: var(--primary-600, #1d4ed8);\n }\n}\n@layer base {\n *, ::after, ::before, ::backdrop, ::file-selector-button {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n border: 0 solid;\n }\n html, :host {\n line-height: 1.5;\n -webkit-text-size-adjust: 100%;\n tab-size: 4;\n font-family: var(--default-font-family, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", Arial, 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, h2, h3, h4, h5, 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, strong {\n font-weight: bolder;\n }\n code, kbd, samp, 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, 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:where(:not(iframe)) {\n outline: auto;\n }\n progress {\n vertical-align: baseline;\n }\n summary {\n display: list-item;\n }\n ol, ul, menu {\n list-style: none;\n }\n img, svg, video, canvas, audio, iframe, embed, object {\n display: block;\n vertical-align: middle;\n }\n img, video {\n max-width: 100%;\n height: auto;\n }\n button, input, select, optgroup, textarea, ::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, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-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, input:where([type=\"button\"], [type=\"reset\"], [type=\"submit\"]), ::file-selector-button {\n appearance: button;\n }\n ::-webkit-inner-spin-button, ::-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 .\\@container\\/agent {\n container-type: inline-size;\n container-name: agent;\n }\n .\\@container\\/chat {\n container-type: inline-size;\n container-name: chat;\n }\n .\\@container\\/chat-preview {\n container-type: inline-size;\n container-name: chat-preview;\n }\n .\\@container {\n container-type: inline-size;\n }\n .pointer-events-auto {\n pointer-events: auto;\n }\n .pointer-events-none {\n pointer-events: none;\n }\n .collapse {\n visibility: collapse;\n }\n .invisible {\n visibility: hidden;\n }\n .visible {\n visibility: visible;\n }\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n border-width: 0;\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: 0px;\n }\n .-top-1\\.5 {\n top: calc(var(--spacing) * -1.5);\n }\n .top-0 {\n top: 0px;\n }\n .top-0\\.5 {\n top: calc(var(--spacing) * 0.5);\n }\n .top-1 {\n top: var(--spacing);\n }\n .top-1\\.5 {\n top: calc(var(--spacing) * 1.5);\n }\n .top-1\\/2 {\n top: calc(1 / 2 * 100%);\n }\n .top-4 {\n top: calc(var(--spacing) * 4);\n }\n .top-6 {\n top: calc(var(--spacing) * 6);\n }\n .top-\\[5\\%\\] {\n top: 5%;\n }\n .top-\\[85\\%\\] {\n top: 85%;\n }\n .-right-1\\.5 {\n right: calc(var(--spacing) * -1.5);\n }\n .-right-16 {\n right: calc(var(--spacing) * -16);\n }\n .right-0 {\n right: 0px;\n }\n .right-0\\.5 {\n right: calc(var(--spacing) * 0.5);\n }\n .right-1 {\n right: var(--spacing);\n }\n .right-1\\.5 {\n right: calc(var(--spacing) * 1.5);\n }\n .right-4 {\n right: calc(var(--spacing) * 4);\n }\n .right-6 {\n right: calc(var(--spacing) * 6);\n }\n .right-\\[5\\%\\] {\n right: 5%;\n }\n .bottom-0 {\n bottom: 0px;\n }\n .bottom-4 {\n bottom: calc(var(--spacing) * 4);\n }\n .bottom-6 {\n bottom: calc(var(--spacing) * 6);\n }\n .-left-16 {\n left: calc(var(--spacing) * -16);\n }\n .left-0 {\n left: 0px;\n }\n .left-1\\/2 {\n left: calc(1 / 2 * 100%);\n }\n .left-4 {\n left: calc(var(--spacing) * 4);\n }\n .left-6 {\n left: calc(var(--spacing) * 6);\n }\n .left-\\[13px\\] {\n left: 13px;\n }\n .left-\\[85\\%\\] {\n left: 85%;\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-30 {\n z-index: 30;\n }\n .z-40 {\n z-index: 40;\n }\n .z-50 {\n z-index: 50;\n }\n .z-\\[999999\\] {\n z-index: 999999;\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-auto {\n margin-inline: auto;\n }\n .my-2 {\n margin-block: calc(var(--spacing) * 2);\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: var(--spacing);\n }\n .mt-2 {\n margin-top: calc(var(--spacing) * 2);\n }\n .mt-2\\.5 {\n margin-top: calc(var(--spacing) * 2.5);\n }\n .mt-3 {\n margin-top: calc(var(--spacing) * 3);\n }\n .mt-5 {\n margin-top: calc(var(--spacing) * 5);\n }\n .mt-\\[-\\.07em\\] {\n margin-top: -.07em;\n }\n .-mr-1 {\n margin-right: calc(var(--spacing) * -1);\n }\n .mb-1 {\n margin-bottom: var(--spacing);\n }\n .mb-2 {\n margin-bottom: calc(var(--spacing) * 2);\n }\n .mb-2\\.5 {\n margin-bottom: calc(var(--spacing) * 2.5);\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 .mb-8 {\n margin-bottom: calc(var(--spacing) * 8);\n }\n .mb-10 {\n margin-bottom: calc(var(--spacing) * 10);\n }\n .mb-12 {\n margin-bottom: calc(var(--spacing) * 12);\n }\n .-ml-2 {\n margin-left: calc(var(--spacing) * -2);\n }\n .ml-1\\.5 {\n margin-left: calc(var(--spacing) * 1.5);\n }\n .i-heroicons-calendar {\n display: inline-block;\n width: 1em;\n height: 1em;\n background-color: currentColor;\n -webkit-mask-image: var(--svg);\n mask-image: var(--svg);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n --svg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6.75 3v2.25M17.25 3v2.25M3 18.75V7.5a2.25 2.25 0 0 1 2.25-2.25h13.5A2.25 2.25 0 0 1 21 7.5v11.25m-18 0A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75m-18 0v-7.5A2.25 2.25 0 0 1 5.25 9h13.5A2.25 2.25 0 0 1 21 11.25v7.5'/%3E%3C/svg%3E\");\n }\n .i-heroicons-chat-bubble-left-right {\n display: inline-block;\n width: 1em;\n height: 1em;\n background-color: currentColor;\n -webkit-mask-image: var(--svg);\n mask-image: var(--svg);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n --svg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M20.25 8.511c.884.284 1.5 1.128 1.5 2.097v4.286c0 1.136-.847 2.1-1.98 2.193q-.51.041-1.02.072v3.091l-3-3q-2.031 0-4.02-.163a2.1 2.1 0 0 1-.825-.242m9.345-8.334a2 2 0 0 0-.476-.095a48.6 48.6 0 0 0-8.048 0c-1.131.094-1.976 1.057-1.976 2.192v4.286c0 .837.46 1.58 1.155 1.951m9.345-8.334V6.637c0-1.621-1.152-3.026-2.76-3.235A48.5 48.5 0 0 0 11.25 3c-2.115 0-4.198.137-6.24.402c-1.608.209-2.76 1.614-2.76 3.235v6.226c0 1.621 1.152 3.026 2.76 3.235q.865.113 1.74.194V21l4.155-4.155'/%3E%3C/svg%3E\");\n }\n .i-heroicons-cloud-arrow-down {\n display: inline-block;\n width: 1em;\n height: 1em;\n background-color: currentColor;\n -webkit-mask-image: var(--svg);\n mask-image: var(--svg);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n --svg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M12 9.75v6.75m0 0l-3-3m3 3l3-3m-8.25 6a4.5 4.5 0 0 1-1.41-8.775a5.25 5.25 0 0 1 10.233-2.33a3 3 0 0 1 3.758 3.848A3.752 3.752 0 0 1 18 19.5z'/%3E%3C/svg%3E\");\n }\n .i-heroicons-envelope {\n display: inline-block;\n width: 1em;\n height: 1em;\n background-color: currentColor;\n -webkit-mask-image: var(--svg);\n mask-image: var(--svg);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n --svg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M21.75 6.75v10.5a2.25 2.25 0 0 1-2.25 2.25h-15a2.25 2.25 0 0 1-2.25-2.25V6.75m19.5 0A2.25 2.25 0 0 0 19.5 4.5h-15a2.25 2.25 0 0 0-2.25 2.25m19.5 0v.243a2.25 2.25 0 0 1-1.07 1.916l-7.5 4.615a2.25 2.25 0 0 1-2.36 0L3.32 8.91a2.25 2.25 0 0 1-1.07-1.916V6.75'/%3E%3C/svg%3E\");\n }\n .i-heroicons-phone {\n display: inline-block;\n width: 1em;\n height: 1em;\n background-color: currentColor;\n -webkit-mask-image: var(--svg);\n mask-image: var(--svg);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n --svg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M2.25 6.75c0 8.284 6.716 15 15 15h2.25a2.25 2.25 0 0 0 2.25-2.25v-1.372c0-.516-.351-.966-.852-1.091l-4.423-1.106c-.44-.11-.902.055-1.173.417l-.97 1.293c-.282.376-.769.542-1.21.38a12.04 12.04 0 0 1-7.143-7.143c-.162-.441.004-.928.38-1.21l1.293-.97c.363-.271.527-.734.417-1.173L6.963 3.102a1.125 1.125 0 0 0-1.091-.852H4.5A2.25 2.25 0 0 0 2.25 4.5z'/%3E%3C/svg%3E\");\n }\n .i-heroicons-question-mark-circle {\n display: inline-block;\n width: 1em;\n height: 1em;\n background-color: currentColor;\n -webkit-mask-image: var(--svg);\n mask-image: var(--svg);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n --svg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M9.879 7.519c1.172-1.025 3.071-1.025 4.243 0c1.171 1.025 1.171 2.687 0 3.712q-.308.268-.67.442c-.746.361-1.452.999-1.452 1.827v.75M21 12a9 9 0 1 1-18 0a9 9 0 0 1 18 0m-9 5.25h.008v.008H12z'/%3E%3C/svg%3E\");\n }\n .i-heroicons-sparkles {\n display: inline-block;\n width: 1em;\n height: 1em;\n background-color: currentColor;\n -webkit-mask-image: var(--svg);\n mask-image: var(--svg);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n --svg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M9.813 15.904L9 18.75l-.813-2.846a4.5 4.5 0 0 0-3.09-3.09L2.25 12l2.846-.813a4.5 4.5 0 0 0 3.09-3.09L9 5.25l.813 2.846a4.5 4.5 0 0 0 3.09 3.09L15.75 12l-2.846.813a4.5 4.5 0 0 0-3.09 3.09m8.445-7.188L18 9.75l-.259-1.035a3.38 3.38 0 0 0-2.455-2.456L14.25 6l1.036-.259a3.38 3.38 0 0 0 2.455-2.456L18 2.25l.259 1.035a3.38 3.38 0 0 0 2.456 2.456L21.75 6l-1.035.259a3.38 3.38 0 0 0-2.456 2.456m-1.365 11.852L16.5 21.75l-.394-1.183a2.25 2.25 0 0 0-1.423-1.423L13.5 18.75l1.183-.394a2.25 2.25 0 0 0 1.423-1.423l.394-1.183l.394 1.183a2.25 2.25 0 0 0 1.423 1.423l1.183.394l-1.183.394a2.25 2.25 0 0 0-1.423 1.423'/%3E%3C/svg%3E\");\n }\n .i-simple-icons-facebook {\n display: inline-block;\n width: 1em;\n height: 1em;\n background-color: currentColor;\n -webkit-mask-image: var(--svg);\n mask-image: var(--svg);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n --svg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='M9.101 23.691v-7.98H6.627v-3.667h2.474v-1.58c0-4.085 1.848-5.978 5.858-5.978c.401 0 .955.042 1.468.103a9 9 0 0 1 1.141.195v3.325a9 9 0 0 0-.653-.036a27 27 0 0 0-.733-.009c-.707 0-1.259.096-1.675.309a1.7 1.7 0 0 0-.679.622c-.258.42-.374.995-.374 1.752v1.297h3.919l-.386 2.103l-.287 1.564h-3.246v8.245C19.396 23.238 24 18.179 24 12.044c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.628 3.874 10.35 9.101 11.647'/%3E%3C/svg%3E\");\n }\n .i-simple-icons-instagram {\n display: inline-block;\n width: 1em;\n height: 1em;\n background-color: currentColor;\n -webkit-mask-image: var(--svg);\n mask-image: var(--svg);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n --svg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='M7.03.084c-1.277.06-2.149.264-2.91.563a5.9 5.9 0 0 0-2.124 1.388a5.9 5.9 0 0 0-1.38 2.127C.321 4.926.12 5.8.064 7.076s-.069 1.688-.063 4.947s.021 3.667.083 4.947c.061 1.277.264 2.149.563 2.911c.308.789.72 1.457 1.388 2.123a5.9 5.9 0 0 0 2.129 1.38c.763.295 1.636.496 2.913.552c1.278.056 1.689.069 4.947.063s3.668-.021 4.947-.082c1.28-.06 2.147-.265 2.91-.563a5.9 5.9 0 0 0 2.123-1.388a5.9 5.9 0 0 0 1.38-2.129c.295-.763.496-1.636.551-2.912c.056-1.28.07-1.69.063-4.948c-.006-3.258-.02-3.667-.081-4.947c-.06-1.28-.264-2.148-.564-2.911a5.9 5.9 0 0 0-1.387-2.123a5.9 5.9 0 0 0-2.128-1.38c-.764-.294-1.636-.496-2.914-.55C15.647.009 15.236-.006 11.977 0S8.31.021 7.03.084m.14 21.693c-1.17-.05-1.805-.245-2.228-.408a3.7 3.7 0 0 1-1.382-.895a3.7 3.7 0 0 1-.9-1.378c-.165-.423-.363-1.058-.417-2.228c-.06-1.264-.072-1.644-.08-4.848c-.006-3.204.006-3.583.061-4.848c.05-1.169.246-1.805.408-2.228c.216-.561.477-.96.895-1.382a3.7 3.7 0 0 1 1.379-.9c.423-.165 1.057-.361 2.227-.417c1.265-.06 1.644-.072 4.848-.08c3.203-.006 3.583.006 4.85.062c1.168.05 1.804.244 2.227.408c.56.216.96.475 1.382.895s.681.817.9 1.378c.165.422.362 1.056.417 2.227c.06 1.265.074 1.645.08 4.848c.005 3.203-.006 3.583-.061 4.848c-.051 1.17-.245 1.805-.408 2.23c-.216.56-.477.96-.896 1.38a3.7 3.7 0 0 1-1.378.9c-.422.165-1.058.362-2.226.418c-1.266.06-1.645.072-4.85.079s-3.582-.006-4.848-.06m9.783-16.192a1.44 1.44 0 1 0 1.437-1.442a1.44 1.44 0 0 0-1.437 1.442M5.839 12.012a6.161 6.161 0 1 0 12.323-.024a6.162 6.162 0 0 0-12.323.024M8 12.008A4 4 0 1 1 12.008 16A4 4 0 0 1 8 12.008'/%3E%3C/svg%3E\");\n }\n .i-simple-icons-linkedin {\n display: inline-block;\n width: 1em;\n height: 1em;\n background-color: currentColor;\n -webkit-mask-image: var(--svg);\n mask-image: var(--svg);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n --svg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037c-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85c3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.06 2.06 0 0 1-2.063-2.065a2.064 2.064 0 1 1 2.063 2.065m1.782 13.019H3.555V9h3.564zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0z'/%3E%3C/svg%3E\");\n }\n .i-simple-icons-threads {\n display: inline-block;\n width: 1em;\n height: 1em;\n background-color: currentColor;\n -webkit-mask-image: var(--svg);\n mask-image: var(--svg);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n --svg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='M12.186 24h-.007c-3.581-.024-6.334-1.205-8.184-3.509C2.35 18.44 1.5 15.586 1.472 12.01v-.017c.03-3.579.879-6.43 2.525-8.482C5.845 1.205 8.6.024 12.18 0h.014c2.746.02 5.043.725 6.826 2.098c1.677 1.29 2.858 3.13 3.509 5.467l-2.04.569c-1.104-3.96-3.898-5.984-8.304-6.015c-2.91.022-5.11.936-6.54 2.717C4.307 6.504 3.616 8.914 3.589 12c.027 3.086.718 5.496 2.057 7.164c1.43 1.783 3.631 2.698 6.54 2.717c2.623-.02 4.358-.631 5.8-2.045c1.647-1.613 1.618-3.593 1.09-4.798c-.31-.71-.873-1.3-1.634-1.75c-.192 1.352-.622 2.446-1.284 3.272c-.886 1.102-2.14 1.704-3.73 1.79c-1.202.065-2.361-.218-3.259-.801c-1.063-.689-1.685-1.74-1.752-2.964c-.065-1.19.408-2.285 1.33-3.082c.88-.76 2.119-1.207 3.583-1.291a14 14 0 0 1 3.02.142c-.126-.742-.375-1.332-.75-1.757c-.513-.586-1.308-.883-2.359-.89h-.029c-.844 0-1.992.232-2.721 1.32l-1.757-1.18c.98-1.454 2.568-2.256 4.478-2.256h.044c3.194.02 5.097 1.975 5.287 5.388q.163.07.321.142c1.49.7 2.58 1.761 3.154 3.07c.797 1.82.871 4.79-1.548 7.158c-1.85 1.81-4.094 2.628-7.277 2.65Zm1.003-11.69q-.362 0-.739.021c-1.836.103-2.98.946-2.916 2.143c.067 1.256 1.452 1.839 2.784 1.767c1.224-.065 2.818-.543 3.086-3.71a10.5 10.5 0 0 0-2.215-.221'/%3E%3C/svg%3E\");\n }\n .i-simple-icons-tiktok {\n display: inline-block;\n width: 1em;\n height: 1em;\n background-color: currentColor;\n -webkit-mask-image: var(--svg);\n mask-image: var(--svg);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n --svg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='M12.525.02c1.31-.02 2.61-.01 3.91-.02c.08 1.53.63 3.09 1.75 4.17c1.12 1.11 2.7 1.62 4.24 1.79v4.03c-1.44-.05-2.89-.35-4.2-.97c-.57-.26-1.1-.59-1.62-.93c-.01 2.92.01 5.84-.02 8.75c-.08 1.4-.54 2.79-1.35 3.94c-1.31 1.92-3.58 3.17-5.91 3.21c-1.43.08-2.86-.31-4.08-1.03c-2.02-1.19-3.44-3.37-3.65-5.71c-.02-.5-.03-1-.01-1.49c.18-1.9 1.12-3.72 2.58-4.96c1.66-1.44 3.98-2.13 6.15-1.72c.02 1.48-.04 2.96-.04 4.44c-.99-.32-2.15-.23-3.02.37c-.63.41-1.11 1.04-1.36 1.75c-.21.51-.15 1.07-.14 1.61c.24 1.64 1.82 3.02 3.5 2.87c1.12-.01 2.19-.66 2.77-1.61c.19-.33.4-.67.41-1.06c.1-1.79.06-3.57.07-5.36c.01-4.03-.01-8.05.02-12.07'/%3E%3C/svg%3E\");\n }\n .i-simple-icons-x {\n display: inline-block;\n width: 1em;\n height: 1em;\n background-color: currentColor;\n -webkit-mask-image: var(--svg);\n mask-image: var(--svg);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n --svg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='M14.234 10.162L22.977 0h-2.072l-7.591 8.824L7.251 0H.258l9.168 13.343L.258 24H2.33l8.016-9.318L16.749 24h6.993zm-2.837 3.299l-.929-1.329L3.076 1.56h3.182l5.965 8.532l.929 1.329l7.754 11.09h-3.182z'/%3E%3C/svg%3E\");\n }\n .i-svg-spinners-3-dots-bounce {\n display: inline-block;\n width: 1em;\n height: 1em;\n background-color: currentColor;\n -webkit-mask-image: var(--svg);\n mask-image: var(--svg);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n --svg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Ccircle cx='4' cy='12' r='3' fill='black'%3E%3Canimate id='SVGKiXXedfO' attributeName='cy' begin='0;SVGgLulOGrw.end+0.25s' calcMode='spline' dur='0.6s' keySplines='.33,.66,.66,1;.33,0,.66,.33' values='12;6;12'/%3E%3C/circle%3E%3Ccircle cx='12' cy='12' r='3' fill='black'%3E%3Canimate attributeName='cy' begin='SVGKiXXedfO.begin+0.1s' calcMode='spline' dur='0.6s' keySplines='.33,.66,.66,1;.33,0,.66,.33' values='12;6;12'/%3E%3C/circle%3E%3Ccircle cx='20' cy='12' r='3' fill='black'%3E%3Canimate id='SVGgLulOGrw' attributeName='cy' begin='SVGKiXXedfO.begin+0.2s' calcMode='spline' dur='0.6s' keySplines='.33,.66,.66,1;.33,0,.66,.33' values='12;6;12'/%3E%3C/circle%3E%3C/svg%3E\");\n }\n .i-svg-spinners-90-ring-with-bg {\n display: inline-block;\n width: 1em;\n height: 1em;\n background-color: currentColor;\n -webkit-mask-image: var(--svg);\n mask-image: var(--svg);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n --svg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,19a8,8,0,1,1,8-8A8,8,0,0,1,12,20Z' opacity='.25'/%3E%3Cpath fill='black' d='M10.14,1.16a11,11,0,0,0-9,8.92A1.59,1.59,0,0,0,2.46,12,1.52,1.52,0,0,0,4.11,10.7a8,8,0,0,1,6.66-6.61A1.42,1.42,0,0,0,12,2.69h0A1.57,1.57,0,0,0,10.14,1.16Z'%3E%3CanimateTransform attributeName='transform' dur='0.75s' repeatCount='indefinite' type='rotate' values='0 12 12;360 12 12'/%3E%3C/path%3E%3C/svg%3E\");\n }\n .i-svg-spinners-ring-resize {\n display: inline-block;\n width: 1em;\n height: 1em;\n background-color: currentColor;\n -webkit-mask-image: var(--svg);\n mask-image: var(--svg);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n --svg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg stroke='black'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-linecap='round' stroke-width='3'%3E%3Canimate attributeName='stroke-dasharray' calcMode='spline' dur='1.5s' keySplines='0.42,0,0.58,1;0.42,0,0.58,1;0.42,0,0.58,1' keyTimes='0;0.475;0.95;1' repeatCount='indefinite' values='0 150;42 150;42 150;42 150'/%3E%3Canimate attributeName='stroke-dashoffset' calcMode='spline' dur='1.5s' keySplines='0.42,0,0.58,1;0.42,0,0.58,1;0.42,0,0.58,1' keyTimes='0;0.475;0.95;1' repeatCount='indefinite' values='0;-16;-59;-59'/%3E%3C/circle%3E%3CanimateTransform attributeName='transform' dur='2s' repeatCount='indefinite' type='rotate' values='0 12 12;360 12 12'/%3E%3C/g%3E%3C/svg%3E\");\n }\n .i-tabler-alert-circle {\n display: inline-block;\n width: 1em;\n height: 1em;\n background-color: currentColor;\n -webkit-mask-image: var(--svg);\n mask-image: var(--svg);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n --svg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M3 12a9 9 0 1 0 18 0a9 9 0 0 0-18 0m9-4v4m0 4h.01'/%3E%3C/svg%3E\");\n }\n .i-tabler-arrow-right {\n display: inline-block;\n width: 1em;\n height: 1em;\n background-color: currentColor;\n -webkit-mask-image: var(--svg);\n mask-image: var(--svg);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n --svg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M5 12h14m-6 6l6-6m-6-6l6 6'/%3E%3C/svg%3E\");\n }\n .i-tabler-arrow-up {\n display: inline-block;\n width: 1em;\n height: 1em;\n background-color: currentColor;\n -webkit-mask-image: var(--svg);\n mask-image: var(--svg);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n --svg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M12 5v14m6-8l-6-6m-6 6l6-6'/%3E%3C/svg%3E\");\n }\n .i-tabler-brand-github {\n display: inline-block;\n width: 1em;\n height: 1em;\n background-color: currentColor;\n -webkit-mask-image: var(--svg);\n mask-image: var(--svg);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n --svg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M9 19c-4.3 1.4-4.3-2.5-6-3m12 5v-3.5c0-1 .1-1.4-.5-2c2.8-.3 5.5-1.4 5.5-6a4.6 4.6 0 0 0-1.3-3.2a4.2 4.2 0 0 0-.1-3.2s-1.1-.3-3.5 1.3a12.3 12.3 0 0 0-6.2 0C6.5 2.8 5.4 3.1 5.4 3.1a4.2 4.2 0 0 0-.1 3.2A4.6 4.6 0 0 0 4 9.5c0 4.6 2.7 5.7 5.5 6c-.6.6-.6 1.2-.5 2V21'/%3E%3C/svg%3E\");\n }\n .i-tabler-brand-youtube {\n display: inline-block;\n width: 1em;\n height: 1em;\n background-color: currentColor;\n -webkit-mask-image: var(--svg);\n mask-image: var(--svg);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n --svg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Cpath d='M2 8a4 4 0 0 1 4-4h12a4 4 0 0 1 4 4v8a4 4 0 0 1-4 4H6a4 4 0 0 1-4-4z'/%3E%3Cpath d='m10 9l5 3l-5 3z'/%3E%3C/g%3E%3C/svg%3E\");\n }\n .i-tabler-calendar {\n display: inline-block;\n width: 1em;\n height: 1em;\n background-color: currentColor;\n -webkit-mask-image: var(--svg);\n mask-image: var(--svg);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n --svg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 7a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2zm12-4v4M8 3v4m-4 4h16m-9 4h1m0 0v3'/%3E%3C/svg%3E\");\n }\n .i-tabler-check {\n display: inline-block;\n width: 1em;\n height: 1em;\n background-color: currentColor;\n -webkit-mask-image: var(--svg);\n mask-image: var(--svg);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n --svg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m5 12l5 5L20 7'/%3E%3C/svg%3E\");\n }\n .i-tabler-chevron-down {\n display: inline-block;\n width: 1em;\n height: 1em;\n background-color: currentColor;\n -webkit-mask-image: var(--svg);\n mask-image: var(--svg);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n --svg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m6 9l6 6l6-6'/%3E%3C/svg%3E\");\n }\n .i-tabler-chevron-right {\n display: inline-block;\n width: 1em;\n height: 1em;\n background-color: currentColor;\n -webkit-mask-image: var(--svg);\n mask-image: var(--svg);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n --svg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m9 6l6 6l-6 6'/%3E%3C/svg%3E\");\n }\n .i-tabler-circle-check {\n display: inline-block;\n width: 1em;\n height: 1em;\n background-color: currentColor;\n -webkit-mask-image: var(--svg);\n mask-image: var(--svg);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n --svg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Cpath d='M3 12a9 9 0 1 0 18 0a9 9 0 1 0-18 0'/%3E%3Cpath d='m9 12l2 2l4-4'/%3E%3C/g%3E%3C/svg%3E\");\n }\n .i-tabler-file {\n display: inline-block;\n width: 1em;\n height: 1em;\n background-color: currentColor;\n -webkit-mask-image: var(--svg);\n mask-image: var(--svg);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n --svg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Cpath d='M14 3v4a1 1 0 0 0 1 1h4'/%3E%3Cpath d='M17 21H7a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h7l5 5v11a2 2 0 0 1-2 2'/%3E%3C/g%3E%3C/svg%3E\");\n }\n .i-tabler-globe {\n display: inline-block;\n width: 1em;\n height: 1em;\n background-color: currentColor;\n -webkit-mask-image: var(--svg);\n mask-image: var(--svg);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n --svg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Cpath d='M7 9a4 4 0 1 0 8 0a4 4 0 0 0-8 0'/%3E%3Cpath d='M5.75 15A8.015 8.015 0 1 0 15 2m-4 15v4m-4 0h8'/%3E%3C/g%3E%3C/svg%3E\");\n }\n .i-tabler-info-circle {\n display: inline-block;\n width: 1em;\n height: 1em;\n background-color: currentColor;\n -webkit-mask-image: var(--svg);\n mask-image: var(--svg);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n --svg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Cpath d='M3 12a9 9 0 1 0 18 0a9 9 0 0 0-18 0m9-3h.01'/%3E%3Cpath d='M11 12h1v4h1'/%3E%3C/g%3E%3C/svg%3E\");\n }\n .i-tabler-loader-2 {\n display: inline-block;\n width: 1em;\n height: 1em;\n background-color: currentColor;\n -webkit-mask-image: var(--svg);\n mask-image: var(--svg);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n --svg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M12 3a9 9 0 1 0 9 9'/%3E%3C/svg%3E\");\n }\n .i-tabler-lock {\n display: inline-block;\n width: 1em;\n height: 1em;\n background-color: currentColor;\n -webkit-mask-image: var(--svg);\n mask-image: var(--svg);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n --svg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Cpath d='M5 13a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v6a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2z'/%3E%3Cpath d='M11 16a1 1 0 1 0 2 0a1 1 0 0 0-2 0m-3-5V7a4 4 0 1 1 8 0v4'/%3E%3C/g%3E%3C/svg%3E\");\n }\n .i-tabler-logout {\n display: inline-block;\n width: 1em;\n height: 1em;\n background-color: currentColor;\n -webkit-mask-image: var(--svg);\n mask-image: var(--svg);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n --svg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Cpath d='M14 8V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h7a2 2 0 0 0 2-2v-2'/%3E%3Cpath d='M9 12h12l-3-3m0 6l3-3'/%3E%3C/g%3E%3C/svg%3E\");\n }\n .i-tabler-mail {\n display: inline-block;\n width: 1em;\n height: 1em;\n background-color: currentColor;\n -webkit-mask-image: var(--svg);\n mask-image: var(--svg);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n --svg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Cpath d='M3 7a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'/%3E%3Cpath d='m3 7l9 6l9-6'/%3E%3C/g%3E%3C/svg%3E\");\n }\n .i-tabler-menu {\n display: inline-block;\n width: 1em;\n height: 1em;\n background-color: currentColor;\n -webkit-mask-image: var(--svg);\n mask-image: var(--svg);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n --svg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h16M4 16h16'/%3E%3C/svg%3E\");\n }\n .i-tabler-message-circle {\n display: inline-block;\n width: 1em;\n height: 1em;\n background-color: currentColor;\n -webkit-mask-image: var(--svg);\n mask-image: var(--svg);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n --svg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m3 20l1.3-3.9C1.976 12.663 2.874 8.228 6.4 5.726c3.526-2.501 8.59-2.296 11.845.48c3.255 2.777 3.695 7.266 1.029 10.501S11.659 20.922 7.7 19z'/%3E%3C/svg%3E\");\n }\n .i-tabler-microphone {\n display: inline-block;\n width: 1em;\n height: 1em;\n background-color: currentColor;\n -webkit-mask-image: var(--svg);\n mask-image: var(--svg);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n --svg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Cpath d='M9 5a3 3 0 0 1 3-3a3 3 0 0 1 3 3v5a3 3 0 0 1-3 3a3 3 0 0 1-3-3z'/%3E%3Cpath d='M5 10a7 7 0 0 0 14 0M8 21h8m-4-4v4'/%3E%3C/g%3E%3C/svg%3E\");\n }\n .i-tabler-microphone-filled {\n display: inline-block;\n width: 1em;\n height: 1em;\n background-color: currentColor;\n -webkit-mask-image: var(--svg);\n mask-image: var(--svg);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n --svg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='M19 9a1 1 0 0 1 1 1a8 8 0 0 1-6.999 7.938L13 20h3a1 1 0 0 1 0 2H8a1 1 0 0 1 0-2h3v-2.062A8 8 0 0 1 4 10a1 1 0 1 1 2 0a6 6 0 0 0 12 0a1 1 0 0 1 1-1m-7-8a4 4 0 0 1 4 4v5a4 4 0 1 1-8 0V5a4 4 0 0 1 4-4'/%3E%3C/svg%3E\");\n }\n .i-tabler-phone {\n display: inline-block;\n width: 1em;\n height: 1em;\n background-color: currentColor;\n -webkit-mask-image: var(--svg);\n mask-image: var(--svg);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n --svg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M5 4h4l2 5l-2.5 1.5a11 11 0 0 0 5 5L15 13l5 2v4a2 2 0 0 1-2 2A16 16 0 0 1 3 6a2 2 0 0 1 2-2'/%3E%3C/svg%3E\");\n }\n .i-tabler-player-stop-filled {\n display: inline-block;\n width: 1em;\n height: 1em;\n background-color: currentColor;\n -webkit-mask-image: var(--svg);\n mask-image: var(--svg);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n --svg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='M17 4H7a3 3 0 0 0-3 3v10a3 3 0 0 0 3 3h10a3 3 0 0 0 3-3V7a3 3 0 0 0-3-3'/%3E%3C/svg%3E\");\n }\n .i-tabler-plus {\n display: inline-block;\n width: 1em;\n height: 1em;\n background-color: currentColor;\n -webkit-mask-image: var(--svg);\n mask-image: var(--svg);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n --svg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M12 5v14m-7-7h14'/%3E%3C/svg%3E\");\n }\n .i-tabler-share {\n display: inline-block;\n width: 1em;\n height: 1em;\n background-color: currentColor;\n -webkit-mask-image: var(--svg);\n mask-image: var(--svg);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n --svg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M3 12a3 3 0 1 0 6 0a3 3 0 1 0-6 0m12-6a3 3 0 1 0 6 0a3 3 0 1 0-6 0m0 12a3 3 0 1 0 6 0a3 3 0 1 0-6 0m-6.3-7.3l6.6-3.4m-6.6 6l6.6 3.4'/%3E%3C/svg%3E\");\n }\n .i-tabler-sparkles {\n display: inline-block;\n width: 1em;\n height: 1em;\n background-color: currentColor;\n -webkit-mask-image: var(--svg);\n mask-image: var(--svg);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n --svg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M16 18a2 2 0 0 1 2 2a2 2 0 0 1 2-2a2 2 0 0 1-2-2a2 2 0 0 1-2 2m0-12a2 2 0 0 1 2 2a2 2 0 0 1 2-2a2 2 0 0 1-2-2a2 2 0 0 1-2 2M9 18a6 6 0 0 1 6-6a6 6 0 0 1-6-6a6 6 0 0 1-6 6a6 6 0 0 1 6 6'/%3E%3C/svg%3E\");\n }\n .i-tabler-tool {\n display: inline-block;\n width: 1em;\n height: 1em;\n background-color: currentColor;\n -webkit-mask-image: var(--svg);\n mask-image: var(--svg);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n --svg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M7 10h3V7L6.5 3.5a6 6 0 0 1 8 8l6 6a2 2 0 0 1-3 3l-6-6a6 6 0 0 1-8-8z'/%3E%3C/svg%3E\");\n }\n .i-tabler-user {\n display: inline-block;\n width: 1em;\n height: 1em;\n background-color: currentColor;\n -webkit-mask-image: var(--svg);\n mask-image: var(--svg);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n --svg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M8 7a4 4 0 1 0 8 0a4 4 0 0 0-8 0M6 21v-2a4 4 0 0 1 4-4h4a4 4 0 0 1 4 4v2'/%3E%3C/svg%3E\");\n }\n .i-tabler-user-circle {\n display: inline-block;\n width: 1em;\n height: 1em;\n background-color: currentColor;\n -webkit-mask-image: var(--svg);\n mask-image: var(--svg);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n --svg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Cpath d='M3 12a9 9 0 1 0 18 0a9 9 0 1 0-18 0'/%3E%3Cpath d='M9 10a3 3 0 1 0 6 0a3 3 0 1 0-6 0m-2.832 8.849A4 4 0 0 1 10 16h4a4 4 0 0 1 3.834 2.855'/%3E%3C/g%3E%3C/svg%3E\");\n }\n .i-tabler-user-square-rounded {\n display: inline-block;\n width: 1em;\n height: 1em;\n background-color: currentColor;\n -webkit-mask-image: var(--svg);\n mask-image: var(--svg);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n --svg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Cpath d='M12 13a3 3 0 1 0 0-6a3 3 0 0 0 0 6'/%3E%3Cpath d='M12 3c7.2 0 9 1.8 9 9s-1.8 9-9 9s-9-1.8-9-9s1.8-9 9-9'/%3E%3Cpath d='M6 20.05V20a4 4 0 0 1 4-4h4a4 4 0 0 1 4 4v.05'/%3E%3C/g%3E%3C/svg%3E\");\n }\n .i-tabler-users {\n display: inline-block;\n width: 1em;\n height: 1em;\n background-color: currentColor;\n -webkit-mask-image: var(--svg);\n mask-image: var(--svg);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n --svg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M5 7a4 4 0 1 0 8 0a4 4 0 1 0-8 0M3 21v-2a4 4 0 0 1 4-4h4a4 4 0 0 1 4 4v2m1-17.87a4 4 0 0 1 0 7.75M21 21v-2a4 4 0 0 0-3-3.85'/%3E%3C/svg%3E\");\n }\n .i-tabler-world {\n display: inline-block;\n width: 1em;\n height: 1em;\n background-color: currentColor;\n -webkit-mask-image: var(--svg);\n mask-image: var(--svg);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n --svg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Cpath d='M3 12a9 9 0 1 0 18 0a9 9 0 0 0-18 0m.6-3h16.8M3.6 15h16.8'/%3E%3Cpath d='M11.5 3a17 17 0 0 0 0 18m1-18a17 17 0 0 1 0 18'/%3E%3C/g%3E%3C/svg%3E\");\n }\n .i-tabler-x {\n display: inline-block;\n width: 1em;\n height: 1em;\n background-color: currentColor;\n -webkit-mask-image: var(--svg);\n mask-image: var(--svg);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n --svg: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M18 6L6 18M6 6l12 12'/%3E%3C/svg%3E\");\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 .block {\n display: block;\n }\n .flex {\n display: flex;\n }\n .grid {\n display: grid;\n }\n .hidden {\n display: none;\n }\n .inline {\n display: inline;\n }\n .inline-flex {\n display: inline-flex;\n }\n .table {\n display: table;\n }\n .size-2 {\n width: calc(var(--spacing) * 2);\n height: calc(var(--spacing) * 2);\n }\n .size-2\\.5 {\n width: calc(var(--spacing) * 2.5);\n height: calc(var(--spacing) * 2.5);\n }\n .size-3 {\n width: calc(var(--spacing) * 3);\n height: calc(var(--spacing) * 3);\n }\n .size-3\\.5 {\n width: calc(var(--spacing) * 3.5);\n height: calc(var(--spacing) * 3.5);\n }\n .size-4 {\n width: calc(var(--spacing) * 4);\n height: calc(var(--spacing) * 4);\n }\n .size-5 {\n width: calc(var(--spacing) * 5);\n height: calc(var(--spacing) * 5);\n }\n .size-6 {\n width: calc(var(--spacing) * 6);\n height: calc(var(--spacing) * 6);\n }\n .size-7 {\n width: calc(var(--spacing) * 7);\n height: calc(var(--spacing) * 7);\n }\n .size-8 {\n width: calc(var(--spacing) * 8);\n height: calc(var(--spacing) * 8);\n }\n .size-10 {\n width: calc(var(--spacing) * 10);\n height: calc(var(--spacing) * 10);\n }\n .size-12 {\n width: calc(var(--spacing) * 12);\n height: calc(var(--spacing) * 12);\n }\n .size-14 {\n width: calc(var(--spacing) * 14);\n height: calc(var(--spacing) * 14);\n }\n .size-16 {\n width: calc(var(--spacing) * 16);\n height: calc(var(--spacing) * 16);\n }\n .size-20 {\n width: calc(var(--spacing) * 20);\n height: calc(var(--spacing) * 20);\n }\n .size-\\[1\\.1em\\] {\n width: 1.1em;\n height: 1.1em;\n }\n .size-\\[9px\\] {\n width: 9px;\n height: 9px;\n }\n .size-\\[13px\\] {\n width: 13px;\n height: 13px;\n }\n .size-\\[17px\\] {\n width: 17px;\n height: 17px;\n }\n .size-\\[18\\%\\] {\n width: 18%;\n height: 18%;\n }\n .size-\\[18px\\] {\n width: 18px;\n height: 18px;\n }\n .size-\\[70\\%\\] {\n width: 70%;\n height: 70%;\n }\n .size-full {\n width: 100%;\n height: 100%;\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-4 {\n height: calc(var(--spacing) * 4);\n }\n .h-10 {\n height: calc(var(--spacing) * 10);\n }\n .h-14 {\n height: calc(var(--spacing) * 14);\n }\n .h-16 {\n height: calc(var(--spacing) * 16);\n }\n .h-20 {\n height: calc(var(--spacing) * 20);\n }\n .h-\\[17px\\] {\n height: 17px;\n }\n .h-\\[28px\\] {\n height: 28px;\n }\n .h-\\[60px\\] {\n height: 60px;\n }\n .h-\\[80px\\] {\n height: 80px;\n }\n .h-\\[80vh\\] {\n height: 80vh;\n }\n .h-\\[600px\\] {\n height: 600px;\n }\n .h-\\[min\\(600px\\,calc\\(100vh-4rem\\)\\)\\] {\n height: min(600px, calc(100vh - 4rem));\n }\n .h-auto {\n height: auto;\n }\n .h-dvh {\n height: 100dvh;\n }\n .h-full {\n height: 100%;\n }\n .h-px {\n height: 1px;\n }\n .max-h-48 {\n max-height: calc(var(--spacing) * 48);\n }\n .max-h-\\[calc\\(100vh-48px\\)\\] {\n max-height: calc(100vh - 48px);\n }\n .min-h-0 {\n min-height: 0px;\n }\n .min-h-2\\.5 {\n min-height: calc(var(--spacing) * 2.5);\n }\n .min-h-11 {\n min-height: calc(var(--spacing) * 11);\n }\n .min-h-\\[20px\\] {\n min-height: 20px;\n }\n .min-h-full {\n min-height: 100%;\n }\n .w-0 {\n width: 0px;\n }\n .w-4 {\n width: calc(var(--spacing) * 4);\n }\n .w-5 {\n width: calc(var(--spacing) * 5);\n }\n .w-16 {\n width: calc(var(--spacing) * 16);\n }\n .w-20 {\n width: calc(var(--spacing) * 20);\n }\n .w-96 {\n width: calc(var(--spacing) * 96);\n }\n .w-\\[3px\\] {\n width: 3px;\n }\n .w-\\[28px\\] {\n width: 28px;\n }\n .w-\\[60px\\] {\n width: 60px;\n }\n .w-\\[80\\%\\] {\n width: 80%;\n }\n .w-\\[80px\\] {\n width: 80px;\n }\n .w-\\[min\\(400px\\,calc\\(100vw-2rem\\)\\)\\] {\n width: min(400px, calc(100vw - 2rem));\n }\n .w-full {\n width: 100%;\n }\n .w-px {\n width: 1px;\n }\n .max-w-4xl {\n max-width: var(--container-4xl);\n }\n .max-w-20 {\n max-width: calc(var(--spacing) * 20);\n }\n .max-w-\\[85\\%\\] {\n max-width: 85%;\n }\n .max-w-\\[88\\%\\] {\n max-width: 88%;\n }\n .max-w-\\[240px\\] {\n max-width: 240px;\n }\n .max-w-\\[255px\\] {\n max-width: 255px;\n }\n .max-w-\\[260px\\] {\n max-width: 260px;\n }\n .max-w-\\[280px\\] {\n max-width: 280px;\n }\n .max-w-\\[300px\\] {\n max-width: 300px;\n }\n .max-w-\\[720px\\] {\n max-width: 720px;\n }\n .max-w-\\[calc\\(100vw-48px\\)\\] {\n max-width: calc(100vw - 48px);\n }\n .max-w-\\[min\\(78\\%\\,30rem\\)\\] {\n max-width: min(78%, 30rem);\n }\n .max-w-full {\n max-width: 100%;\n }\n .max-w-md {\n max-width: var(--container-md);\n }\n .max-w-screen-md {\n max-width: var(--breakpoint-md);\n }\n .max-w-sm {\n max-width: var(--container-sm);\n }\n .max-w-xs {\n max-width: var(--container-xs);\n }\n .min-w-0 {\n min-width: 0px;\n }\n .min-w-2\\.5 {\n min-width: calc(var(--spacing) * 2.5);\n }\n .flex-1 {\n flex: 1;\n }\n .flex-shrink-0 {\n flex-shrink: 0;\n }\n .shrink-0 {\n flex-shrink: 0;\n }\n .flex-grow-0 {\n flex-grow: 0;\n }\n .grow {\n flex-grow: 1;\n }\n .basis-0 {\n flex-basis: 0px;\n }\n .origin-center {\n transform-origin: center;\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-x-4 {\n --tw-translate-x: calc(var(--spacing) * -4);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .-translate-x-\\[30px\\] {\n --tw-translate-x: calc(30px * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .-translate-x-full {\n --tw-translate-x: -100%;\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .translate-x-0 {\n --tw-translate-x: 0px;\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .translate-x-4 {\n --tw-translate-x: calc(var(--spacing) * 4);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .translate-x-full {\n --tw-translate-x: 100%;\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-\\[30px\\] {\n --tw-translate-y: calc(30px * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .translate-y-0 {\n --tw-translate-y: 0px;\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .translate-y-2 {\n --tw-translate-y: calc(var(--spacing) * 2);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .translate-y-\\[30px\\] {\n --tw-translate-y: 30px;\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .translate-y-full {\n --tw-translate-y: 100%;\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .scale-0 {\n --tw-scale-x: 0%;\n --tw-scale-y: 0%;\n --tw-scale-z: 0%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n .scale-75 {\n --tw-scale-x: 75%;\n --tw-scale-y: 75%;\n --tw-scale-z: 75%;\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-45 {\n rotate: calc(45deg * -1);\n }\n .rotate-0 {\n rotate: 0deg;\n }\n .rotate-45 {\n rotate: 45deg;\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 .transform-gpu {\n transform: translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);\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-default {\n cursor: default;\n }\n .cursor-not-allowed {\n cursor: not-allowed;\n }\n .cursor-pointer {\n cursor: pointer;\n }\n .cursor-text {\n cursor: text;\n }\n .resize {\n resize: both;\n }\n .\\[scrollbar-width\\:none\\] {\n scrollbar-width: none;\n }\n .grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n .flex-col {\n flex-direction: column;\n }\n .flex-row {\n flex-direction: row;\n }\n .flex-wrap {\n flex-wrap: wrap;\n }\n .place-items-center {\n place-items: center;\n }\n .items-baseline {\n align-items: baseline;\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-end {\n justify-content: flex-end;\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: var(--spacing);\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-2\\.5 {\n gap: calc(var(--spacing) * 2.5);\n }\n .gap-3 {\n gap: calc(var(--spacing) * 3);\n }\n .gap-4 {\n gap: calc(var(--spacing) * 4);\n }\n .gap-7 {\n gap: calc(var(--spacing) * 7);\n }\n :where(.space-y-1 > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(var(--spacing) * var(--tw-space-y-reverse));\n margin-block-end: calc(var(--spacing) * calc(1 - var(--tw-space-y-reverse)));\n }\n :where(.space-y-2 > :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 :where(.space-y-3 > :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 :where(.space-y-4 > :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 :where(.space-y-6 > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)));\n }\n :where(.space-y-12 > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 12) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 12) * calc(1 - var(--tw-space-y-reverse)));\n }\n .gap-x-2 {\n column-gap: calc(var(--spacing) * 2);\n }\n .gap-x-2\\.5 {\n column-gap: calc(var(--spacing) * 2.5);\n }\n .gap-x-4 {\n column-gap: calc(var(--spacing) * 4);\n }\n .gap-y-1\\.5 {\n row-gap: calc(var(--spacing) * 1.5);\n }\n .self-stretch {\n align-self: stretch;\n }\n .truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .overflow-hidden {\n overflow: hidden;\n }\n .overflow-scroll {\n overflow: scroll;\n }\n .overflow-visible {\n overflow: visible;\n }\n .overflow-x-auto {\n overflow-x: auto;\n }\n .overflow-x-hidden {\n overflow-x: hidden;\n }\n .overflow-y-auto {\n overflow-y: auto;\n }\n .overscroll-contain {\n overscroll-behavior: contain;\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-\\[5px\\] {\n border-radius: 5px;\n }\n .rounded-\\[20px\\] {\n border-radius: 20px;\n }\n .rounded-full {\n border-radius: calc(infinity * 1px);\n }\n .rounded-lg {\n border-radius: var(--radius-lg);\n }\n .rounded-xl {\n border-radius: var(--radius-xl);\n }\n .rounded-br-\\[4px\\] {\n border-bottom-right-radius: 4px;\n }\n .rounded-bl-\\[4px\\] {\n border-bottom-left-radius: 4px;\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-4 {\n border-style: var(--tw-border-style);\n border-width: 4px;\n }\n .border-\\[1\\.5px\\] {\n border-style: var(--tw-border-style);\n border-width: 1.5px;\n }\n .border-t {\n border-top-style: var(--tw-border-style);\n border-top-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 {\n border-left-style: var(--tw-border-style);\n border-left-width: 1px;\n }\n .border-dashed {\n --tw-border-style: dashed;\n border-style: dashed;\n }\n .border-black\\/10 {\n border-color: color-mix(in srgb, #000 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-black) 10%, transparent);\n }\n }\n .border-green-400 {\n border-color: var(--color-green-400);\n }\n .border-primary-400 {\n border-color: var(--color-primary-400);\n }\n .border-primary-500\\/40 {\n border-color: var(--color-primary-500);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-primary-500) 40%, transparent);\n }\n }\n .border-red-400 {\n border-color: var(--color-red-400);\n }\n .border-slate-200 {\n border-color: var(--color-slate-200);\n }\n .border-theme-100 {\n border-color: var(--color-theme-100);\n }\n .border-theme-200 {\n border-color: var(--color-theme-200);\n }\n .border-theme-300 {\n border-color: var(--color-theme-300);\n }\n .border-transparent {\n border-color: transparent;\n }\n .border-white {\n border-color: var(--color-white);\n }\n .border-white\\/0 {\n border-color: color-mix(in srgb, #fff 0%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-white) 0%, transparent);\n }\n }\n .border-white\\/10 {\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 .border-white\\/20 {\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 .border-white\\/25 {\n border-color: color-mix(in srgb, #fff 25%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-white) 25%, transparent);\n }\n }\n .border-t-primary-500 {\n border-top-color: var(--color-primary-500);\n }\n .border-t-theme-900 {\n border-top-color: var(--color-theme-900);\n }\n .border-t-white {\n border-top-color: var(--color-white);\n }\n .bg-amber-500 {\n background-color: var(--color-amber-500);\n }\n .bg-black\\/30 {\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 .bg-black\\/50 {\n background-color: color-mix(in srgb, #000 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 50%, transparent);\n }\n }\n .bg-emerald-500 {\n background-color: var(--color-emerald-500);\n }\n .bg-green-500 {\n background-color: var(--color-green-500);\n }\n .bg-green-600 {\n background-color: var(--color-green-600);\n }\n .bg-primary-500 {\n background-color: var(--color-primary-500);\n }\n .bg-primary-500\\/20 {\n background-color: var(--color-primary-500);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-primary-500) 20%, transparent);\n }\n }\n .bg-primary-600 {\n background-color: var(--color-primary-600);\n }\n .bg-red-500 {\n background-color: var(--color-red-500);\n }\n .bg-red-500\\/20 {\n background-color: color-mix(in srgb, oklch(63.7% 0.237 25.331) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-red-500) 20%, transparent);\n }\n }\n .bg-red-600 {\n background-color: var(--color-red-600);\n }\n .bg-slate-950 {\n background-color: var(--color-slate-950);\n }\n .bg-theme-0 {\n background-color: var(--color-theme-0);\n }\n .bg-theme-25 {\n background-color: var(--color-theme-25);\n }\n .bg-theme-50 {\n background-color: var(--color-theme-50);\n }\n .bg-theme-100 {\n background-color: var(--color-theme-100);\n }\n .bg-theme-200 {\n background-color: var(--color-theme-200);\n }\n .bg-theme-300 {\n background-color: var(--color-theme-300);\n }\n .bg-theme-400 {\n background-color: var(--color-theme-400);\n }\n .bg-theme-500 {\n background-color: var(--color-theme-500);\n }\n .bg-theme-800 {\n background-color: var(--color-theme-800);\n }\n .bg-theme-800\\/60 {\n background-color: var(--color-theme-800);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-theme-800) 60%, transparent);\n }\n }\n .bg-theme-900 {\n background-color: var(--color-theme-900);\n }\n .bg-transparent {\n background-color: transparent;\n }\n .bg-white {\n background-color: var(--color-white);\n }\n .bg-white\\/5 {\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 .bg-white\\/10 {\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 .bg-white\\/15 {\n background-color: color-mix(in srgb, #fff 15%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 15%, transparent);\n }\n }\n .bg-white\\/55 {\n background-color: color-mix(in srgb, #fff 55%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 55%, transparent);\n }\n }\n .bg-white\\/\\[0\\.08\\] {\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 .bg-gradient-to-br {\n --tw-gradient-position: to bottom right in oklab;\n background-image: linear-gradient(var(--tw-gradient-stops));\n }\n .bg-gradient-to-r {\n --tw-gradient-position: to right in oklab;\n background-image: linear-gradient(var(--tw-gradient-stops));\n }\n .bg-gradient-to-t {\n --tw-gradient-position: to top in oklab;\n background-image: linear-gradient(var(--tw-gradient-stops));\n }\n .from-black\\/70 {\n --tw-gradient-from: color-mix(in srgb, #000 70%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-from: color-mix(in oklab, var(--color-black) 70%, 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 .from-black\\/80 {\n --tw-gradient-from: color-mix(in srgb, #000 80%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-from: color-mix(in oklab, var(--color-black) 80%, 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 .from-black\\/90 {\n --tw-gradient-from: color-mix(in srgb, #000 90%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-from: color-mix(in oklab, var(--color-black) 90%, 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 .from-theme-0\\/90 {\n --tw-gradient-from: var(--color-theme-0);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-from: color-mix(in oklab, var(--color-theme-0) 90%, 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 .from-theme-800 {\n --tw-gradient-from: var(--color-theme-800);\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 .from-transparent {\n --tw-gradient-from: transparent;\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 .via-black\\/5 {\n --tw-gradient-via: color-mix(in srgb, #000 5%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-via: color-mix(in oklab, var(--color-black) 5%, transparent);\n }\n --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-via-stops);\n }\n .via-black\\/10 {\n --tw-gradient-via: color-mix(in srgb, #000 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-via: color-mix(in oklab, var(--color-black) 10%, transparent);\n }\n --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-via-stops);\n }\n .via-black\\/50 {\n --tw-gradient-via: color-mix(in srgb, #000 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-via: color-mix(in oklab, var(--color-black) 50%, transparent);\n }\n --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-via-stops);\n }\n .via-black\\/60 {\n --tw-gradient-via: color-mix(in srgb, #000 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-via: color-mix(in oklab, var(--color-black) 60%, transparent);\n }\n --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-via-stops);\n }\n .via-black\\/90 {\n --tw-gradient-via: color-mix(in srgb, #000 90%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-via: color-mix(in oklab, var(--color-black) 90%, transparent);\n }\n --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-via-stops);\n }\n .via-theme-0\\/55 {\n --tw-gradient-via: var(--color-theme-0);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-via: color-mix(in oklab, var(--color-theme-0) 55%, transparent);\n }\n --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-via-stops);\n }\n .via-white\\/5 {\n --tw-gradient-via: color-mix(in srgb, #fff 5%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-via: color-mix(in oklab, var(--color-white) 5%, transparent);\n }\n --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-via-stops);\n }\n .to-black\\/40 {\n --tw-gradient-to: color-mix(in srgb, #000 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-to: color-mix(in oklab, var(--color-black) 40%, 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 .to-black\\/80 {\n --tw-gradient-to: color-mix(in srgb, #000 80%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-to: color-mix(in oklab, var(--color-black) 80%, 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 .to-black\\/100 {\n --tw-gradient-to: var(--color-black);\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-theme-950 {\n --tw-gradient-to: var(--color-theme-950);\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-transparent {\n --tw-gradient-to: transparent;\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 .bg-cover {\n background-size: cover;\n }\n .bg-center {\n background-position: center;\n }\n .bg-no-repeat {\n background-repeat: no-repeat;\n }\n .object-cover {\n object-fit: cover;\n }\n .p-0 {\n padding: 0px;\n }\n .p-2 {\n padding: calc(var(--spacing) * 2);\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-24 {\n padding: calc(var(--spacing) * 24);\n }\n .px-1 {\n padding-inline: var(--spacing);\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-3\\.5 {\n padding-inline: calc(var(--spacing) * 3.5);\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 .px-8 {\n padding-inline: calc(var(--spacing) * 8);\n }\n .px-9 {\n padding-inline: calc(var(--spacing) * 9);\n }\n .py-0\\.5 {\n padding-block: calc(var(--spacing) * 0.5);\n }\n .py-1 {\n padding-block: var(--spacing);\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-3\\.5 {\n padding-block: calc(var(--spacing) * 3.5);\n }\n .py-4 {\n padding-block: calc(var(--spacing) * 4);\n }\n .py-5 {\n padding-block: calc(var(--spacing) * 5);\n }\n .py-6 {\n padding-block: calc(var(--spacing) * 6);\n }\n .py-16 {\n padding-block: calc(var(--spacing) * 16);\n }\n .pt-0\\.5 {\n padding-top: calc(var(--spacing) * 0.5);\n }\n .pt-2\\.5 {\n padding-top: calc(var(--spacing) * 2.5);\n }\n .pt-3 {\n padding-top: calc(var(--spacing) * 3);\n }\n .pt-4 {\n padding-top: calc(var(--spacing) * 4);\n }\n .pt-6 {\n padding-top: calc(var(--spacing) * 6);\n }\n .pt-8 {\n padding-top: calc(var(--spacing) * 8);\n }\n .pt-12 {\n padding-top: calc(var(--spacing) * 12);\n }\n .pr-3 {\n padding-right: calc(var(--spacing) * 3);\n }\n .pb-1 {\n padding-bottom: var(--spacing);\n }\n .pb-2 {\n padding-bottom: calc(var(--spacing) * 2);\n }\n .pb-2\\.5 {\n padding-bottom: calc(var(--spacing) * 2.5);\n }\n .pb-3\\.5 {\n padding-bottom: calc(var(--spacing) * 3.5);\n }\n .pb-4 {\n padding-bottom: calc(var(--spacing) * 4);\n }\n .pb-8 {\n padding-bottom: calc(var(--spacing) * 8);\n }\n .pb-12 {\n padding-bottom: calc(var(--spacing) * 12);\n }\n .pb-\\[112px\\] {\n padding-bottom: 112px;\n }\n .pb-\\[120px\\] {\n padding-bottom: 120px;\n }\n .pl-1 {\n padding-left: var(--spacing);\n }\n .pl-2 {\n padding-left: calc(var(--spacing) * 2);\n }\n .pl-\\[22px\\] {\n padding-left: 22px;\n }\n .pl-\\[30px\\] {\n padding-left: 30px;\n }\n .text-center {\n text-align: center;\n }\n .text-left {\n text-align: left;\n }\n .font-mono {\n font-family: var(--font-mono);\n }\n .text-2xl {\n font-size: var(--text-2xl);\n line-height: var(--tw-leading, var(--text-2xl--line-height));\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-xl {\n font-size: var(--text-xl);\n line-height: var(--tw-leading, var(--text-xl--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-\\[10\\.5px\\] {\n font-size: 10.5px;\n }\n .text-\\[10px\\] {\n font-size: 10px;\n }\n .text-\\[11\\.5px\\] {\n font-size: 11.5px;\n }\n .text-\\[11px\\] {\n font-size: 11px;\n }\n .text-\\[12\\.5px\\] {\n font-size: 12.5px;\n }\n .text-\\[12px\\] {\n font-size: 12px;\n }\n .text-\\[13px\\] {\n font-size: 13px;\n }\n .text-\\[14px\\] {\n font-size: 14px;\n }\n .text-\\[15px\\] {\n font-size: 15px;\n }\n .leading-none {\n --tw-leading: 1;\n line-height: 1;\n }\n .leading-relaxed {\n --tw-leading: var(--leading-relaxed);\n line-height: var(--leading-relaxed);\n }\n .leading-snug {\n --tw-leading: var(--leading-snug);\n line-height: var(--leading-snug);\n }\n .leading-tight {\n --tw-leading: var(--leading-tight);\n line-height: var(--leading-tight);\n }\n .font-light {\n --tw-font-weight: var(--font-weight-light);\n font-weight: var(--font-weight-light);\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-\\[0\\.35em\\] {\n --tw-tracking: 0.35em;\n letter-spacing: 0.35em;\n }\n .tracking-wide {\n --tw-tracking: var(--tracking-wide);\n letter-spacing: var(--tracking-wide);\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 .text-green-500 {\n color: var(--color-green-500);\n }\n .text-green-600 {\n color: var(--color-green-600);\n }\n .text-primary-300 {\n color: var(--color-primary-300);\n }\n .text-primary-400 {\n color: var(--color-primary-400);\n }\n .text-primary-600 {\n color: var(--color-primary-600);\n }\n .text-red-400 {\n color: var(--color-red-400);\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-slate-950 {\n color: var(--color-slate-950);\n }\n .text-theme-0 {\n color: var(--color-theme-0);\n }\n .text-theme-300 {\n color: var(--color-theme-300);\n }\n .text-theme-400 {\n color: var(--color-theme-400);\n }\n .text-theme-500 {\n color: var(--color-theme-500);\n }\n .text-theme-600 {\n color: var(--color-theme-600);\n }\n .text-theme-700 {\n color: var(--color-theme-700);\n }\n .text-theme-800 {\n color: var(--color-theme-800);\n }\n .text-theme-900 {\n color: var(--color-theme-900);\n }\n .text-theme-950 {\n color: var(--color-theme-950);\n }\n .text-white {\n color: var(--color-white);\n }\n .text-white\\/30 {\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 .text-white\\/40 {\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 .text-white\\/45 {\n color: color-mix(in srgb, #fff 45%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 45%, transparent);\n }\n }\n .text-white\\/50 {\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 .text-white\\/55 {\n color: color-mix(in srgb, #fff 55%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 55%, transparent);\n }\n }\n .text-white\\/60 {\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 .text-white\\/70 {\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 .text-white\\/80 {\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 .text-white\\/85 {\n color: color-mix(in srgb, #fff 85%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 85%, transparent);\n }\n }\n .text-white\\/90 {\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 .text-white\\/95 {\n color: color-mix(in srgb, #fff 95%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-white) 95%, transparent);\n }\n }\n .uppercase {\n text-transform: uppercase;\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 .underline {\n text-decoration-line: underline;\n }\n .underline-offset-2 {\n text-underline-offset: 2px;\n }\n .placeholder-theme-300::placeholder {\n color: var(--color-theme-300);\n }\n .placeholder-theme-400::placeholder {\n color: var(--color-theme-400);\n }\n .placeholder-theme-500::placeholder {\n color: var(--color-theme-500);\n }\n .placeholder-white\\/50::placeholder {\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 .opacity-0 {\n opacity: 0%;\n }\n .opacity-50 {\n opacity: 50%;\n }\n .opacity-60 {\n opacity: 60%;\n }\n .opacity-70 {\n opacity: 70%;\n }\n .opacity-100 {\n opacity: 100%;\n }\n .shadow {\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: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-2xl {\n --tw-shadow: 0 25px 50px -12px var(--tw-shadow-color, rgb(0 0 0 / 0.25));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-\\[0_1px_2px_rgba\\(5\\,15\\,25\\,0\\.14\\)\\] {\n --tw-shadow: 0 1px 2px var(--tw-shadow-color, rgba(5,15,25,0.14));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-\\[0_2px_16px_rgba\\(15\\,23\\,42\\,0\\.10\\)\\] {\n --tw-shadow: 0 2px 16px var(--tw-shadow-color, rgba(15,23,42,0.10));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-\\[0_8px_32px_-4px_rgba\\(0\\,0\\,0\\,0\\.15\\)\\] {\n --tw-shadow: 0 8px 32px -4px var(--tw-shadow-color, rgba(0,0,0,0.15));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-\\[0_24px_80px_-12px_rgba\\(0\\,0\\,0\\,0\\.2\\)\\,0_8px_24px_-8px_rgba\\(0\\,0\\,0\\,0\\.08\\)\\] {\n --tw-shadow: 0 24px 80px -12px var(--tw-shadow-color, rgba(0,0,0,0.2)), 0 8px 24px -8px var(--tw-shadow-color, rgba(0,0,0,0.08));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), 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: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), 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: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), 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: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), 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: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), 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: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), 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: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .ring-black\\/5 {\n --tw-ring-color: color-mix(in srgb, #000 5%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--color-black) 5%, transparent);\n }\n }\n .ring-black\\/\\[0\\.06\\] {\n --tw-ring-color: color-mix(in srgb, #000 6%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--color-black) 6%, transparent);\n }\n }\n .ring-theme-300 {\n --tw-ring-color: var(--color-theme-300);\n }\n .ring-white {\n --tw-ring-color: var(--color-white);\n }\n .ring-white\\/10 {\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 .ring-white\\/15 {\n --tw-ring-color: color-mix(in srgb, #fff 15%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--color-white) 15%, transparent);\n }\n }\n .ring-white\\/25 {\n --tw-ring-color: color-mix(in srgb, #fff 25%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--color-white) 25%, transparent);\n }\n }\n .blur {\n --tw-blur: blur(8px);\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-lg {\n --tw-backdrop-blur: blur(var(--blur-lg));\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 {\n transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, content-visibility, overlay, pointer-events;\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\\,transform\\] {\n transition-property: opacity,transform;\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-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: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --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-transform {\n transition-property: transform, translate, scale, 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-150 {\n --tw-duration: 150ms;\n transition-duration: 150ms;\n }\n .duration-200 {\n --tw-duration: 200ms;\n transition-duration: 200ms;\n }\n .duration-250 {\n --tw-duration: 250ms;\n transition-duration: 250ms;\n }\n .duration-300 {\n --tw-duration: 300ms;\n transition-duration: 300ms;\n }\n .duration-400 {\n --tw-duration: 400ms;\n transition-duration: 400ms;\n }\n .duration-500 {\n --tw-duration: 500ms;\n transition-duration: 500ms;\n }\n .duration-1000 {\n --tw-duration: 1000ms;\n transition-duration: 1000ms;\n }\n .duration-\\[400ms\\] {\n --tw-duration: 400ms;\n transition-duration: 400ms;\n }\n .ease-\\[cubic-bezier\\(0\\.25\\,1\\,0\\.33\\,1\\)\\] {\n --tw-ease: cubic-bezier(0.25,1,0.33,1);\n transition-timing-function: cubic-bezier(0.25,1,0.33,1);\n }\n .ease-\\[cubic-bezier\\(0\\.52\\,0\\.01\\,0\\.16\\,1\\)\\] {\n --tw-ease: cubic-bezier(0.52,0.01,0.16,1);\n transition-timing-function: cubic-bezier(0.52,0.01,0.16,1);\n }\n .ease-in {\n --tw-ease: var(--ease-in);\n transition-timing-function: var(--ease-in);\n }\n .ease-in-out {\n --tw-ease: var(--ease-in-out);\n transition-timing-function: var(--ease-in-out);\n }\n .ease-out {\n --tw-ease: var(--ease-out);\n transition-timing-function: var(--ease-out);\n }\n .will-change-transform {\n will-change: transform;\n }\n .\\[-ms-overflow-style\\:none\\] {\n -ms-overflow-style: none;\n }\n .\\[animation-duration\\:3s\\] {\n animation-duration: 3s;\n }\n .\\[overflow-anchor\\:none\\] {\n overflow-anchor: none;\n }\n @media (hover: hover) {\n .group-hover\\:scale-100:is(:where(.group):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 .group-hover\\:scale-110:is(:where(.group):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 .group-hover\\:text-white:is(:where(.group):hover *) {\n color: var(--color-white);\n }\n .group-hover\\:opacity-40:is(:where(.group):hover *) {\n opacity: 40%;\n }\n .hover\\:translate-y-\\[-1px\\]:hover {\n --tw-translate-y: -1px;\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .hover\\:scale-105: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 .hover\\:scale-110: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 .hover\\:rotate-90:hover {\n rotate: 90deg;\n }\n .hover\\:border-green-300:hover {\n border-color: var(--color-green-300);\n }\n .hover\\:border-primary-300:hover {\n border-color: var(--color-primary-300);\n }\n .hover\\:border-red-300:hover {\n border-color: var(--color-red-300);\n }\n .hover\\:border-theme-200:hover {\n border-color: var(--color-theme-200);\n }\n .hover\\:border-theme-300:hover {\n border-color: var(--color-theme-300);\n }\n .hover\\:border-white\\/10:hover {\n border-color: color-mix(in srgb, #fff 10%, transparent);\n }\n @supports (color: color-mix(in lab, red, red)) {\n .hover\\:border-white\\/10:hover {\n border-color: color-mix(in oklab, var(--color-white) 10%, transparent);\n }\n }\n .hover\\:border-white\\/40:hover {\n border-color: color-mix(in srgb, #fff 40%, transparent);\n }\n @supports (color: color-mix(in lab, red, red)) {\n .hover\\:border-white\\/40:hover {\n border-color: color-mix(in oklab, var(--color-white) 40%, transparent);\n }\n }\n .hover\\:bg-green-500:hover {\n background-color: var(--color-green-500);\n }\n .hover\\:bg-primary-500:hover {\n background-color: var(--color-primary-500);\n }\n .hover\\:bg-red-500:hover {\n background-color: var(--color-red-500);\n }\n .hover\\:bg-theme-25:hover {\n background-color: var(--color-theme-25);\n }\n .hover\\:bg-theme-50:hover {\n background-color: var(--color-theme-50);\n }\n .hover\\:bg-theme-100:hover {\n background-color: var(--color-theme-100);\n }\n .hover\\:bg-theme-200:hover {\n background-color: var(--color-theme-200);\n }\n .hover\\:bg-theme-800:hover {\n background-color: var(--color-theme-800);\n }\n .hover\\:bg-white\\/5:hover {\n background-color: color-mix(in srgb, #fff 5%, transparent);\n }\n @supports (color: color-mix(in lab, red, red)) {\n .hover\\:bg-white\\/5:hover {\n background-color: color-mix(in oklab, var(--color-white) 5%, transparent);\n }\n }\n .hover\\:bg-white\\/10:hover {\n background-color: color-mix(in srgb, #fff 10%, transparent);\n }\n @supports (color: color-mix(in lab, red, red)) {\n .hover\\:bg-white\\/10:hover {\n background-color: color-mix(in oklab, var(--color-white) 10%, transparent);\n }\n }\n .hover\\:bg-white\\/20:hover {\n background-color: color-mix(in srgb, #fff 20%, transparent);\n }\n @supports (color: color-mix(in lab, red, red)) {\n .hover\\:bg-white\\/20:hover {\n background-color: color-mix(in oklab, var(--color-white) 20%, transparent);\n }\n }\n .hover\\:text-primary-600:hover {\n color: var(--color-primary-600);\n }\n .hover\\:text-theme-400:hover {\n color: var(--color-theme-400);\n }\n .hover\\:text-theme-500:hover {\n color: var(--color-theme-500);\n }\n .hover\\:text-theme-600:hover {\n color: var(--color-theme-600);\n }\n .hover\\:text-theme-700:hover {\n color: var(--color-theme-700);\n }\n .hover\\:text-white:hover {\n color: var(--color-white);\n }\n .hover\\:text-white\\/70:hover {\n color: color-mix(in srgb, #fff 70%, transparent);\n }\n @supports (color: color-mix(in lab, red, red)) {\n .hover\\:text-white\\/70:hover {\n color: color-mix(in oklab, var(--color-white) 70%, transparent);\n }\n }\n .hover\\:text-white\\/80:hover {\n color: color-mix(in srgb, #fff 80%, transparent);\n }\n @supports (color: color-mix(in lab, red, red)) {\n .hover\\:text-white\\/80:hover {\n color: color-mix(in oklab, var(--color-white) 80%, transparent);\n }\n }\n .hover\\:opacity-70:hover {\n opacity: 70%;\n }\n .hover\\:shadow-2xl:hover {\n --tw-shadow: 0 25px 50px -12px var(--tw-shadow-color, rgb(0 0 0 / 0.25));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .hover\\:ring-theme-300:hover {\n --tw-ring-color: var(--color-theme-300);\n }\n .hover\\:ring-white\\/25:hover {\n --tw-ring-color: color-mix(in srgb, #fff 25%, transparent);\n }\n @supports (color: color-mix(in lab, red, red)) {\n .hover\\:ring-white\\/25:hover {\n --tw-ring-color: color-mix(in oklab, var(--color-white) 25%, transparent);\n }\n }\n .hover\\:brightness-110:hover {\n --tw-brightness: brightness(110%);\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 }\n .focus\\:border-primary-400:focus {\n border-color: var(--color-primary-400);\n }\n .focus\\:outline-none:focus {\n --tw-outline-style: none;\n outline-style: none;\n }\n .focus-visible\\:ring-2:focus-visible {\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: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .focus-visible\\:ring-theme-900:focus-visible {\n --tw-ring-color: var(--color-theme-900);\n }\n .focus-visible\\:ring-white:focus-visible {\n --tw-ring-color: var(--color-white);\n }\n .focus-visible\\:ring-offset-2:focus-visible {\n --tw-ring-offset-width: 2px;\n --tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n }\n .focus-visible\\:outline-none:focus-visible {\n --tw-outline-style: none;\n outline-style: none;\n }\n .active\\:-translate-y-0\\.5:active {\n --tw-translate-y: calc(var(--spacing) * -0.5);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .active\\:scale-90:active {\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 .active\\:scale-95: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 .active\\:scale-\\[0\\.98\\]:active {\n scale: 0.98;\n }\n .active\\:scale-\\[1\\.06\\]:active {\n scale: 1.06;\n }\n .active\\:bg-theme-800\\/80:active {\n background-color: var(--color-theme-800);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-theme-800) 80%, transparent);\n }\n }\n .active\\:opacity-80:active {\n opacity: 80%;\n }\n .active\\:duration-100:active {\n --tw-duration: 100ms;\n transition-duration: 100ms;\n }\n .disabled\\:cursor-default:disabled {\n cursor: default;\n }\n .disabled\\:cursor-not-allowed:disabled {\n cursor: not-allowed;\n }\n .disabled\\:opacity-50:disabled {\n opacity: 50%;\n }\n @media (prefers-reduced-motion: reduce) {\n .motion-reduce\\:animate-none {\n animation: none;\n }\n }\n @media (width >= 40rem) {\n .sm\\:top-6 {\n top: calc(var(--spacing) * 6);\n }\n .sm\\:right-6 {\n right: calc(var(--spacing) * 6);\n }\n .sm\\:bottom-6 {\n bottom: calc(var(--spacing) * 6);\n }\n .sm\\:left-6 {\n left: calc(var(--spacing) * 6);\n }\n .sm\\:size-16 {\n width: calc(var(--spacing) * 16);\n height: calc(var(--spacing) * 16);\n }\n .sm\\:h-24 {\n height: calc(var(--spacing) * 24);\n }\n .sm\\:w-24 {\n width: calc(var(--spacing) * 24);\n }\n .sm\\:text-2xl {\n font-size: var(--text-2xl);\n line-height: var(--tw-leading, var(--text-2xl--line-height));\n }\n .sm\\:text-base {\n font-size: var(--text-base);\n line-height: var(--tw-leading, var(--text-base--line-height));\n }\n }\n @media (width >= 48rem) {\n .md\\:h-\\[600px\\] {\n height: 600px;\n }\n }\n @container agent (width >= 480px) {\n .\\@\\[480px\\]\\/agent\\:px-6 {\n padding-inline: calc(var(--spacing) * 6);\n }\n }\n @container chat (width >= 24rem) {\n .\\@sm\\/chat\\:size-24 {\n width: calc(var(--spacing) * 24);\n height: calc(var(--spacing) * 24);\n }\n }\n @container chat-preview (width >= 24rem) {\n .\\@sm\\/chat-preview\\:max-w-\\[78\\%\\] {\n max-width: 78%;\n }\n }\n @container chat (width >= 24rem) {\n .\\@sm\\/chat\\:max-w-\\[320px\\] {\n max-width: 320px;\n }\n .\\@sm\\/chat\\:text-lg {\n font-size: var(--text-lg);\n line-height: var(--tw-leading, var(--text-lg--line-height));\n }\n .\\@sm\\/chat\\:text-sm {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n .\\@sm\\/chat\\:text-\\[11px\\] {\n font-size: 11px;\n }\n .\\@sm\\/chat\\:text-\\[15px\\] {\n font-size: 15px;\n }\n .\\@sm\\/chat\\:leading-relaxed {\n --tw-leading: var(--leading-relaxed);\n line-height: var(--leading-relaxed);\n }\n }\n @media (prefers-color-scheme: dark) {\n .dark\\:bg-theme-600\\/90 {\n background-color: var(--color-theme-600);\n }\n @supports (color: color-mix(in lab, red, red)) {\n .dark\\:bg-theme-600\\/90 {\n background-color: color-mix(in oklab, var(--color-theme-600) 90%, transparent);\n }\n }\n }\n .\\[\\&\\:\\:-webkit-scrollbar\\]\\:hidden::-webkit-scrollbar {\n display: none;\n }\n}\n.chat-msg-prose :first-child {\n margin-top: 0;\n}\n.chat-msg-prose :last-child {\n margin-bottom: 0;\n}\n.chat-msg-prose strong {\n font-weight: 600;\n}\n.chat-msg-prose em {\n font-style: italic;\n}\n.chat-msg-prose a {\n color: var(--color-primary-500);\n text-decoration: underline;\n text-underline-offset: 3px;\n text-decoration-color: var(--color-primary-500);\n @supports (color: color-mix(in lab, red, red)) {\n text-decoration-color: color-mix(in oklch, var(--color-primary-500) 40%, transparent);\n }\n font-weight: 500;\n transition: text-decoration-color 0.15s ease;\n &:hover {\n text-decoration-color: var(--color-primary-500);\n }\n}\n.chat-msg-prose.chat-msg-prose-invert a {\n color: #fff;\n text-decoration-color: rgba(255, 255, 255, 0.45);\n &:hover {\n text-decoration-color: #fff;\n }\n}\n.chat-msg-prose.chat-msg-prose-invert pre, .chat-msg-prose.chat-msg-prose-invert table {\n background: rgba(255, 255, 255, 0.08);\n border-color: rgba(255, 255, 255, 0.18);\n}\n.chat-msg-prose.chat-msg-prose-invert td {\n border-top-color: rgba(255, 255, 255, 0.12);\n}\n.chat-msg-prose.chat-msg-prose-invert :not(pre) > code {\n background: rgba(255, 255, 255, 0.14);\n}\n.chat-msg-prose.chat-msg-prose-invert hr {\n border-top-color: rgba(255, 255, 255, 0.22);\n}\n.chat-msg-prose p {\n margin: 1em 0;\n line-height: 1.6;\n}\n.chat-msg-prose h1 {\n font-size: 1.25em;\n font-weight: 600;\n margin: 1.1em 0 0.5em;\n line-height: 1.3;\n}\n.chat-msg-prose h2 {\n font-size: 1.15em;\n font-weight: 600;\n margin: 1.1em 0 0.45em;\n line-height: 1.3;\n}\n.chat-msg-prose h3 {\n font-size: 1.05em;\n font-weight: 600;\n margin: 1em 0 0.4em;\n line-height: 1.35;\n}\n.chat-msg-prose h4, .chat-msg-prose h5, .chat-msg-prose h6 {\n font-size: 1em;\n font-weight: 600;\n margin: 0.9em 0 0.35em;\n line-height: 1.4;\n}\n.chat-msg-prose ul, .chat-msg-prose ol {\n margin: 0.7em 0 0.9em;\n padding-left: 1.4em;\n line-height: 1.55;\n}\n.chat-msg-prose ul {\n list-style-type: disc;\n}\n.chat-msg-prose ol {\n list-style-type: decimal;\n}\n.chat-msg-prose li {\n margin-bottom: 0.35em;\n & p {\n margin: 0;\n }\n &::marker {\n color: currentColor;\n opacity: 0.4;\n }\n}\n.chat-msg-prose pre {\n margin: 1.4em 0;\n padding: 0.85em 1em;\n border-radius: 0.625rem;\n overflow-x: auto;\n background: var(--color-theme-25);\n border: 1px solid var(--color-theme-200);\n @supports (color: color-mix(in lab, red, red)) {\n border: 1px solid color-mix(in oklch, var(--color-theme-200) 70%, transparent);\n }\n font-size: 0.82em;\n line-height: 1.5;\n font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace;\n & code {\n padding: 0;\n background: transparent;\n font-size: inherit;\n font-family: inherit;\n }\n}\n.chat-msg-prose :not(pre) > code {\n padding: 0.15em 0.4em;\n border-radius: 0.3rem;\n font-size: 0.85em;\n background: var(--color-theme-200);\n @supports (color: color-mix(in lab, red, red)) {\n background: color-mix(in oklch, var(--color-theme-200) 45%, transparent);\n }\n font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace;\n}\n.chat-msg-prose blockquote {\n margin: 1.3em 0;\n padding: 0 0 0 1.1em;\n font-style: italic;\n opacity: 0.8;\n & p {\n margin: 0.15em 0;\n }\n}\n.chat-msg-prose table {\n width: 100%;\n margin: 1.4em 0;\n border-collapse: separate;\n border-spacing: 0;\n border: 1px solid var(--color-theme-200);\n @supports (color: color-mix(in lab, red, red)) {\n border: 1px solid color-mix(in oklch, var(--color-theme-200) 70%, transparent);\n }\n border-radius: 0.625rem;\n overflow: hidden;\n font-size: 0.9em;\n line-height: 1.45;\n}\n.chat-msg-prose th, .chat-msg-prose td {\n text-align: left;\n padding: 0.65em 0.8em;\n}\n.chat-msg-prose th {\n font-weight: 600;\n}\n.chat-msg-prose td {\n border-top: 1px solid var(--color-theme-200);\n @supports (color: color-mix(in lab, red, red)) {\n border-top: 1px solid color-mix(in oklch, var(--color-theme-200) 45%, transparent);\n }\n color: currentColor;\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklch, currentColor 75%, transparent);\n }\n}\n.chat-msg-prose td:first-child {\n color: inherit;\n}\n.chat-msg-prose [align='center'] {\n text-align: center;\n}\n.chat-msg-prose [align='right'] {\n text-align: right;\n}\n.chat-msg-prose [align='left'] {\n text-align: left;\n}\n.chat-msg-prose hr {\n border: none;\n border-top: 1px solid var(--color-theme-200);\n @supports (color: color-mix(in lab, red, red)) {\n border-top: 1px solid color-mix(in oklch, var(--color-theme-200) 42%, transparent);\n }\n margin: 1.2em 0;\n}\n.chat-msg-prose img {\n max-width: 100%;\n height: auto;\n border-radius: 0.5rem;\n margin: 0.6em 0;\n}\n.chat-msg-prose p + p {\n margin-top: 0.65em;\n}\n.chat-msg-prose p + ul, .chat-msg-prose p + ol {\n margin-top: 0.4em;\n}\n.chat-msg-prose h1 + p, .chat-msg-prose h2 + p, .chat-msg-prose h3 + p {\n margin-top: 0.2em;\n}\n@property --tw-translate-x {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-translate-y {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-translate-z {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-scale-x {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-scale-y {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-scale-z {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-rotate-x {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-rotate-y {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-rotate-z {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-skew-x {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-skew-y {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-space-y-reverse {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-border-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\n}\n@property --tw-gradient-position {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-gradient-from {\n syntax: \"<color>\";\n inherits: false;\n initial-value: #0000;\n}\n@property --tw-gradient-via {\n syntax: \"<color>\";\n inherits: false;\n initial-value: #0000;\n}\n@property --tw-gradient-to {\n syntax: \"<color>\";\n inherits: false;\n initial-value: #0000;\n}\n@property --tw-gradient-stops {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-gradient-via-stops {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-gradient-from-position {\n syntax: \"<length-percentage>\";\n inherits: false;\n initial-value: 0%;\n}\n@property --tw-gradient-via-position {\n syntax: \"<length-percentage>\";\n inherits: false;\n initial-value: 50%;\n}\n@property --tw-gradient-to-position {\n syntax: \"<length-percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-leading {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-font-weight {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-tracking {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ordinal {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-slashed-zero {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-numeric-figure {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-numeric-spacing {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-numeric-fraction {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-shadow-alpha {\n syntax: \"<percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-inset-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-inset-shadow-alpha {\n syntax: \"<percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-ring-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ring-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-ring-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-inset-ring-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-ring-inset {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ring-offset-width {\n syntax: \"<length>\";\n inherits: false;\n initial-value: 0px;\n}\n@property --tw-ring-offset-color {\n syntax: \"*\";\n inherits: false;\n initial-value: #fff;\n}\n@property --tw-ring-offset-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-blur {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-brightness {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-contrast {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-grayscale {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-hue-rotate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-invert {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-opacity {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-saturate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-sepia {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-drop-shadow {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-drop-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-drop-shadow-alpha {\n syntax: \"<percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-drop-shadow-size {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-blur {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-brightness {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-contrast {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-grayscale {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-hue-rotate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-invert {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-opacity {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-saturate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-sepia {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-duration {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ease {\n syntax: \"*\";\n inherits: false;\n}\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@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 *, ::before, ::after, ::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-space-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","@layer theme, base, components, utilities;\n\n@layer theme {\n @theme default {\n --font-sans:\n -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\",\n \"Noto Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\",\n \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --font-serif: ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif;\n --font-mono:\n ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\",\n \"Courier New\", monospace;\n\n --color-red-50: oklch(97.1% 0.013 17.38);\n --color-red-100: oklch(93.6% 0.032 17.717);\n --color-red-200: oklch(88.5% 0.062 18.334);\n --color-red-300: oklch(80.8% 0.114 19.571);\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-red-700: oklch(50.5% 0.213 27.518);\n --color-red-800: oklch(44.4% 0.177 26.899);\n --color-red-900: oklch(39.6% 0.141 25.723);\n --color-red-950: oklch(25.8% 0.092 26.042);\n\n --color-orange-50: oklch(98% 0.016 73.684);\n --color-orange-100: oklch(95.4% 0.038 75.164);\n --color-orange-200: oklch(90.1% 0.076 70.697);\n --color-orange-300: oklch(83.7% 0.128 66.29);\n --color-orange-400: oklch(75% 0.183 55.934);\n --color-orange-500: oklch(70.5% 0.213 47.604);\n --color-orange-600: oklch(64.6% 0.222 41.116);\n --color-orange-700: oklch(55.3% 0.195 38.402);\n --color-orange-800: oklch(47% 0.157 37.304);\n --color-orange-900: oklch(40.8% 0.123 38.172);\n --color-orange-950: oklch(26.6% 0.079 36.259);\n\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\n --color-yellow-50: oklch(98.7% 0.026 102.212);\n --color-yellow-100: oklch(97.3% 0.071 103.193);\n --color-yellow-200: oklch(94.5% 0.129 101.54);\n --color-yellow-300: oklch(90.5% 0.182 98.111);\n --color-yellow-400: oklch(85.2% 0.199 91.936);\n --color-yellow-500: oklch(79.5% 0.184 86.047);\n --color-yellow-600: oklch(68.1% 0.162 75.834);\n --color-yellow-700: oklch(55.4% 0.135 66.442);\n --color-yellow-800: oklch(47.6% 0.114 61.907);\n --color-yellow-900: oklch(42.1% 0.095 57.708);\n --color-yellow-950: oklch(28.6% 0.066 53.813);\n\n --color-lime-50: oklch(98.6% 0.031 120.757);\n --color-lime-100: oklch(96.7% 0.067 122.328);\n --color-lime-200: oklch(93.8% 0.127 124.321);\n --color-lime-300: oklch(89.7% 0.196 126.665);\n --color-lime-400: oklch(84.1% 0.238 128.85);\n --color-lime-500: oklch(76.8% 0.233 130.85);\n --color-lime-600: oklch(64.8% 0.2 131.684);\n --color-lime-700: oklch(53.2% 0.157 131.589);\n --color-lime-800: oklch(45.3% 0.124 130.933);\n --color-lime-900: oklch(40.5% 0.101 131.063);\n --color-lime-950: oklch(27.4% 0.072 132.109);\n\n --color-green-50: oklch(98.2% 0.018 155.826);\n --color-green-100: oklch(96.2% 0.044 156.743);\n --color-green-200: oklch(92.5% 0.084 155.995);\n --color-green-300: oklch(87.1% 0.15 154.449);\n --color-green-400: oklch(79.2% 0.209 151.711);\n --color-green-500: oklch(72.3% 0.219 149.579);\n --color-green-600: oklch(62.7% 0.194 149.214);\n --color-green-700: oklch(52.7% 0.154 150.069);\n --color-green-800: oklch(44.8% 0.119 151.328);\n --color-green-900: oklch(39.3% 0.095 152.535);\n --color-green-950: oklch(26.6% 0.065 152.934);\n\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\n --color-teal-50: oklch(98.4% 0.014 180.72);\n --color-teal-100: oklch(95.3% 0.051 180.801);\n --color-teal-200: oklch(91% 0.096 180.426);\n --color-teal-300: oklch(85.5% 0.138 181.071);\n --color-teal-400: oklch(77.7% 0.152 181.912);\n --color-teal-500: oklch(70.4% 0.14 182.503);\n --color-teal-600: oklch(60% 0.118 184.704);\n --color-teal-700: oklch(51.1% 0.096 186.391);\n --color-teal-800: oklch(43.7% 0.078 188.216);\n --color-teal-900: oklch(38.6% 0.063 188.416);\n --color-teal-950: oklch(27.7% 0.046 192.524);\n\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-500: oklch(71.5% 0.143 215.221);\n --color-cyan-600: oklch(60.9% 0.126 221.723);\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\n --color-sky-50: oklch(97.7% 0.013 236.62);\n --color-sky-100: oklch(95.1% 0.026 236.824);\n --color-sky-200: oklch(90.1% 0.058 230.902);\n --color-sky-300: oklch(82.8% 0.111 230.318);\n --color-sky-400: oklch(74.6% 0.16 232.661);\n --color-sky-500: oklch(68.5% 0.169 237.323);\n --color-sky-600: oklch(58.8% 0.158 241.966);\n --color-sky-700: oklch(50% 0.134 242.749);\n --color-sky-800: oklch(44.3% 0.11 240.79);\n --color-sky-900: oklch(39.1% 0.09 240.876);\n --color-sky-950: oklch(29.3% 0.066 243.157);\n\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\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\n --color-violet-50: oklch(96.9% 0.016 293.756);\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-300: oklch(81.1% 0.111 293.571);\n --color-violet-400: oklch(70.2% 0.183 293.541);\n --color-violet-500: oklch(60.6% 0.25 292.717);\n --color-violet-600: oklch(54.1% 0.281 293.009);\n --color-violet-700: oklch(49.1% 0.27 292.581);\n --color-violet-800: oklch(43.2% 0.232 292.759);\n --color-violet-900: oklch(38% 0.189 293.745);\n --color-violet-950: oklch(28.3% 0.141 291.089);\n\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-500: oklch(62.7% 0.265 303.9);\n --color-purple-600: oklch(55.8% 0.288 302.321);\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\n --color-fuchsia-50: oklch(97.7% 0.017 320.058);\n --color-fuchsia-100: oklch(95.2% 0.037 318.852);\n --color-fuchsia-200: oklch(90.3% 0.076 319.62);\n --color-fuchsia-300: oklch(83.3% 0.145 321.434);\n --color-fuchsia-400: oklch(74% 0.238 322.16);\n --color-fuchsia-500: oklch(66.7% 0.295 322.15);\n --color-fuchsia-600: oklch(59.1% 0.293 322.896);\n --color-fuchsia-700: oklch(51.8% 0.253 323.949);\n --color-fuchsia-800: oklch(45.2% 0.211 324.591);\n --color-fuchsia-900: oklch(40.1% 0.17 325.612);\n --color-fuchsia-950: oklch(29.3% 0.136 325.661);\n\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-500: oklch(65.6% 0.241 354.308);\n --color-pink-600: oklch(59.2% 0.249 0.584);\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\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-300: oklch(81% 0.117 11.638);\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-rose-700: oklch(51.4% 0.222 16.935);\n --color-rose-800: oklch(45.5% 0.188 13.697);\n --color-rose-900: oklch(41% 0.159 10.272);\n --color-rose-950: oklch(27.1% 0.105 12.094);\n\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\n --color-gray-50: oklch(98.5% 0.002 247.839);\n --color-gray-100: oklch(96.7% 0.003 264.542);\n --color-gray-200: oklch(92.8% 0.006 264.531);\n --color-gray-300: oklch(87.2% 0.01 258.338);\n --color-gray-400: oklch(70.7% 0.022 261.325);\n --color-gray-500: oklch(55.1% 0.027 264.364);\n --color-gray-600: oklch(44.6% 0.03 256.802);\n --color-gray-700: oklch(37.3% 0.034 259.733);\n --color-gray-800: oklch(27.8% 0.033 256.848);\n --color-gray-900: oklch(21% 0.034 264.665);\n --color-gray-950: oklch(13% 0.028 261.692);\n\n --color-zinc-50: oklch(98.5% 0 none);\n --color-zinc-100: oklch(96.7% 0.001 286.375);\n --color-zinc-200: oklch(92% 0.004 286.32);\n --color-zinc-300: oklch(87.1% 0.006 286.286);\n --color-zinc-400: oklch(70.5% 0.015 286.067);\n --color-zinc-500: oklch(55.2% 0.016 285.938);\n --color-zinc-600: oklch(44.2% 0.017 285.786);\n --color-zinc-700: oklch(37% 0.013 285.805);\n --color-zinc-800: oklch(27.4% 0.006 286.033);\n --color-zinc-900: oklch(21% 0.006 285.885);\n --color-zinc-950: oklch(14.1% 0.005 285.823);\n\n --color-neutral-50: oklch(98.5% 0 none);\n --color-neutral-100: oklch(97% 0 none);\n --color-neutral-200: oklch(92.2% 0 none);\n --color-neutral-300: oklch(87% 0 none);\n --color-neutral-400: oklch(70.8% 0 none);\n --color-neutral-500: oklch(55.6% 0 none);\n --color-neutral-600: oklch(43.9% 0 none);\n --color-neutral-700: oklch(37.1% 0 none);\n --color-neutral-800: oklch(26.9% 0 none);\n --color-neutral-900: oklch(20.5% 0 none);\n --color-neutral-950: oklch(14.5% 0 none);\n\n --color-stone-50: oklch(98.5% 0.001 106.423);\n --color-stone-100: oklch(97% 0.001 106.424);\n --color-stone-200: oklch(92.3% 0.003 48.717);\n --color-stone-300: oklch(86.9% 0.005 56.366);\n --color-stone-400: oklch(70.9% 0.01 56.259);\n --color-stone-500: oklch(55.3% 0.013 58.071);\n --color-stone-600: oklch(44.4% 0.011 73.639);\n --color-stone-700: oklch(37.4% 0.01 67.558);\n --color-stone-800: oklch(26.8% 0.007 34.298);\n --color-stone-900: oklch(21.6% 0.006 56.043);\n --color-stone-950: oklch(14.7% 0.004 49.25);\n\n --color-mauve-50: oklch(98.5% 0 none);\n --color-mauve-100: oklch(96% 0.003 325.6);\n --color-mauve-200: oklch(92.2% 0.005 325.62);\n --color-mauve-300: oklch(86.5% 0.012 325.68);\n --color-mauve-400: oklch(71.1% 0.019 323.02);\n --color-mauve-500: oklch(54.2% 0.034 322.5);\n --color-mauve-600: oklch(43.5% 0.029 321.78);\n --color-mauve-700: oklch(36.4% 0.029 323.89);\n --color-mauve-800: oklch(26.3% 0.024 320.12);\n --color-mauve-900: oklch(21.2% 0.019 322.12);\n --color-mauve-950: oklch(14.5% 0.008 326);\n\n --color-olive-50: oklch(98.8% 0.003 106.5);\n --color-olive-100: oklch(96.6% 0.005 106.5);\n --color-olive-200: oklch(93% 0.007 106.5);\n --color-olive-300: oklch(88% 0.011 106.6);\n --color-olive-400: oklch(73.7% 0.021 106.9);\n --color-olive-500: oklch(58% 0.031 107.3);\n --color-olive-600: oklch(46.6% 0.025 107.3);\n --color-olive-700: oklch(39.4% 0.023 107.4);\n --color-olive-800: oklch(28.6% 0.016 107.4);\n --color-olive-900: oklch(22.8% 0.013 107.4);\n --color-olive-950: oklch(15.3% 0.006 107.1);\n\n --color-mist-50: oklch(98.7% 0.002 197.1);\n --color-mist-100: oklch(96.3% 0.002 197.1);\n --color-mist-200: oklch(92.5% 0.005 214.3);\n --color-mist-300: oklch(87.2% 0.007 219.6);\n --color-mist-400: oklch(72.3% 0.014 214.4);\n --color-mist-500: oklch(56% 0.021 213.5);\n --color-mist-600: oklch(45% 0.017 213.2);\n --color-mist-700: oklch(37.8% 0.015 216);\n --color-mist-800: oklch(27.5% 0.011 216.9);\n --color-mist-900: oklch(21.8% 0.008 223.9);\n --color-mist-950: oklch(14.8% 0.004 228.8);\n\n --color-taupe-50: oklch(98.6% 0.002 67.8);\n --color-taupe-100: oklch(96% 0.002 17.2);\n --color-taupe-200: oklch(92.2% 0.005 34.3);\n --color-taupe-300: oklch(86.8% 0.007 39.5);\n --color-taupe-400: oklch(71.4% 0.014 41.2);\n --color-taupe-500: oklch(54.7% 0.021 43.1);\n --color-taupe-600: oklch(43.8% 0.017 39.3);\n --color-taupe-700: oklch(36.7% 0.016 35.7);\n --color-taupe-800: oklch(26.8% 0.011 36.5);\n --color-taupe-900: oklch(21.4% 0.009 43.1);\n --color-taupe-950: oklch(14.7% 0.004 49.3);\n\n --color-black: #000;\n --color-white: #fff;\n\n --spacing: 0.25rem;\n\n --breakpoint-sm: 40rem;\n --breakpoint-md: 48rem;\n --breakpoint-lg: 64rem;\n --breakpoint-xl: 80rem;\n --breakpoint-2xl: 96rem;\n\n --container-3xs: 16rem;\n --container-2xs: 18rem;\n --container-xs: 20rem;\n --container-sm: 24rem;\n --container-md: 28rem;\n --container-lg: 32rem;\n --container-xl: 36rem;\n --container-2xl: 42rem;\n --container-3xl: 48rem;\n --container-4xl: 56rem;\n --container-5xl: 64rem;\n --container-6xl: 72rem;\n --container-7xl: 80rem;\n\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-xl: 1.25rem;\n --text-xl--line-height: calc(1.75 / 1.25);\n --text-2xl: 1.5rem;\n --text-2xl--line-height: calc(2 / 1.5);\n --text-3xl: 1.875rem;\n --text-3xl--line-height: calc(2.25 / 1.875);\n --text-4xl: 2.25rem;\n --text-4xl--line-height: calc(2.5 / 2.25);\n --text-5xl: 3rem;\n --text-5xl--line-height: 1;\n --text-6xl: 3.75rem;\n --text-6xl--line-height: 1;\n --text-7xl: 4.5rem;\n --text-7xl--line-height: 1;\n --text-8xl: 6rem;\n --text-8xl--line-height: 1;\n --text-9xl: 8rem;\n --text-9xl--line-height: 1;\n\n --font-weight-thin: 100;\n --font-weight-extralight: 200;\n --font-weight-light: 300;\n --font-weight-normal: 400;\n --font-weight-medium: 500;\n --font-weight-semibold: 600;\n --font-weight-bold: 700;\n --font-weight-extrabold: 800;\n --font-weight-black: 900;\n\n --tracking-tighter: -0.05em;\n --tracking-tight: -0.025em;\n --tracking-normal: 0em;\n --tracking-wide: 0.025em;\n --tracking-wider: 0.05em;\n --tracking-widest: 0.1em;\n\n --leading-tight: 1.25;\n --leading-snug: 1.375;\n --leading-normal: 1.5;\n --leading-relaxed: 1.625;\n --leading-loose: 2;\n\n --radius-xs: 0.125rem;\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 --radius-4xl: 2rem;\n\n --shadow-2xs: 0 1px rgb(0 0 0 / 0.05);\n --shadow-xs: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n --shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n --shadow-md:\n 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\n --shadow-lg:\n 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n --shadow-xl:\n 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\n --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);\n\n --inset-shadow-2xs: inset 0 1px rgb(0 0 0 / 0.05);\n --inset-shadow-xs: inset 0 1px 1px rgb(0 0 0 / 0.05);\n --inset-shadow-sm: inset 0 2px 4px rgb(0 0 0 / 0.05);\n\n --drop-shadow-xs: 0 1px 1px rgb(0 0 0 / 0.05);\n --drop-shadow-sm: 0 1px 2px rgb(0 0 0 / 0.15);\n --drop-shadow-md: 0 3px 3px rgb(0 0 0 / 0.12);\n --drop-shadow-lg: 0 4px 4px rgb(0 0 0 / 0.15);\n --drop-shadow-xl: 0 9px 7px rgb(0 0 0 / 0.1);\n --drop-shadow-2xl: 0 25px 25px rgb(0 0 0 / 0.15);\n\n --text-shadow-2xs: 0px 1px 0px rgb(0 0 0 / 0.15);\n --text-shadow-xs: 0px 1px 1px rgb(0 0 0 / 0.2);\n --text-shadow-sm:\n 0px 1px 0px rgb(0 0 0 / 0.075), 0px 1px 1px rgb(0 0 0 / 0.075),\n 0px 2px 2px rgb(0 0 0 / 0.075);\n --text-shadow-md:\n 0px 1px 1px rgb(0 0 0 / 0.1), 0px 1px 2px rgb(0 0 0 / 0.1),\n 0px 2px 4px rgb(0 0 0 / 0.1);\n --text-shadow-lg:\n 0px 1px 2px rgb(0 0 0 / 0.1), 0px 3px 2px rgb(0 0 0 / 0.1),\n 0px 4px 8px rgb(0 0 0 / 0.1);\n\n --ease-in: cubic-bezier(0.4, 0, 1, 1);\n --ease-out: cubic-bezier(0, 0, 0.2, 1);\n --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);\n\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\n @keyframes spin {\n to {\n transform: rotate(360deg);\n }\n }\n\n @keyframes ping {\n 75%,\n 100% {\n transform: scale(2);\n opacity: 0;\n }\n }\n\n @keyframes pulse {\n 50% {\n opacity: 0.5;\n }\n }\n\n @keyframes bounce {\n 0%,\n 100% {\n transform: translateY(-25%);\n animation-timing-function: cubic-bezier(0.8, 0, 1, 1);\n }\n\n 50% {\n transform: none;\n animation-timing-function: cubic-bezier(0, 0, 0.2, 1);\n }\n }\n\n --blur-xs: 4px;\n --blur-sm: 8px;\n --blur-md: 12px;\n --blur-lg: 16px;\n --blur-xl: 24px;\n --blur-2xl: 40px;\n --blur-3xl: 64px;\n\n --perspective-dramatic: 100px;\n --perspective-near: 300px;\n --perspective-normal: 500px;\n --perspective-midrange: 800px;\n --perspective-distant: 1200px;\n\n --aspect-video: 16 / 9;\n\n --default-transition-duration: 150ms;\n --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n --default-font-family: --theme(--font-sans, initial);\n --default-font-feature-settings: --theme(\n --font-sans--font-feature-settings,\n initial\n );\n --default-font-variation-settings: --theme(\n --font-sans--font-variation-settings,\n initial\n );\n --default-mono-font-family: --theme(--font-mono, initial);\n --default-mono-font-feature-settings: --theme(\n --font-mono--font-feature-settings,\n initial\n );\n --default-mono-font-variation-settings: --theme(\n --font-mono--font-variation-settings,\n initial\n );\n }\n\n /* Deprecated */\n @theme default inline reference {\n --blur: 8px;\n --shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n --shadow-inner: inset 0 2px 4px 0 rgb(0 0 0 / 0.05);\n --drop-shadow: 0 1px 2px rgb(0 0 0 / 0.1), 0 1px 1px rgb(0 0 0 / 0.06);\n --radius: 0.25rem;\n --max-width-prose: 65ch;\n }\n}\n\n@layer base {\n /*\n 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n 2. Remove default margins and padding\n 3. Reset all borders.\n*/\n\n *,\n ::after,\n ::before,\n ::backdrop,\n ::file-selector-button {\n box-sizing: border-box; /* 1 */\n margin: 0; /* 2 */\n padding: 0; /* 2 */\n border: 0 solid; /* 3 */\n }\n\n /*\n 1. Use a consistent sensible line-height in all browsers.\n 2. Prevent adjustments of font size after orientation changes in iOS.\n 3. Use a more readable tab size.\n 4. Use the user's configured `sans` font-family by default.\n 5. Use the user's configured `sans` font-feature-settings by default.\n 6. Use the user's configured `sans` font-variation-settings by default.\n 7. Disable tap highlights on iOS.\n*/\n\n html,\n :host {\n line-height: 1.5; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n tab-size: 4; /* 3 */\n font-family: --theme(\n --default-font-family,\n -apple-system,\n BlinkMacSystemFont,\n \"Segoe UI\",\n Roboto,\n \"Helvetica Neue\",\n \"Noto Sans\",\n Arial,\n sans-serif,\n \"Apple Color Emoji\",\n \"Segoe UI Emoji\",\n \"Segoe UI Symbol\",\n \"Noto Color Emoji\"\n ); /* 4 */\n font-feature-settings: --theme(\n --default-font-feature-settings,\n normal\n ); /* 5 */\n font-variation-settings: --theme(\n --default-font-variation-settings,\n normal\n ); /* 6 */\n -webkit-tap-highlight-color: transparent; /* 7 */\n }\n\n /*\n 1. Add the correct height in Firefox.\n 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n 3. Reset the default border style to a 1px solid border.\n*/\n\n hr {\n height: 0; /* 1 */\n color: inherit; /* 2 */\n border-top-width: 1px; /* 3 */\n }\n\n /*\n Add the correct text decoration in Chrome, Edge, and Safari.\n*/\n\n abbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n }\n\n /*\n Remove the default font size and weight for headings.\n*/\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n font-size: inherit;\n font-weight: inherit;\n }\n\n /*\n Reset links to optimize for opt-in styling instead of opt-out.\n*/\n\n a {\n color: inherit;\n -webkit-text-decoration: inherit;\n text-decoration: inherit;\n }\n\n /*\n Add the correct font weight in Edge and Safari.\n*/\n\n b,\n strong {\n font-weight: bolder;\n }\n\n /*\n 1. Use the user's configured `mono` font-family by default.\n 2. Use the user's configured `mono` font-feature-settings by default.\n 3. Use the user's configured `mono` font-variation-settings by default.\n 4. Correct the odd `em` font sizing in all browsers.\n*/\n\n code,\n kbd,\n samp,\n pre {\n font-family: --theme(\n --default-mono-font-family,\n ui-monospace,\n SFMono-Regular,\n Menlo,\n Monaco,\n Consolas,\n \"Liberation Mono\",\n \"Courier New\",\n monospace\n ); /* 1 */\n font-feature-settings: --theme(\n --default-mono-font-feature-settings,\n normal\n ); /* 2 */\n font-variation-settings: --theme(\n --default-mono-font-variation-settings,\n normal\n ); /* 3 */\n font-size: 1em; /* 4 */\n }\n\n /*\n Add the correct font size in all browsers.\n*/\n\n small {\n font-size: 80%;\n }\n\n /*\n Prevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\n\n sub,\n sup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n }\n\n sub {\n bottom: -0.25em;\n }\n\n sup {\n top: -0.5em;\n }\n\n /*\n 1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n 2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n 3. Remove gaps between table borders by default.\n*/\n\n table {\n text-indent: 0; /* 1 */\n border-color: inherit; /* 2 */\n border-collapse: collapse; /* 3 */\n }\n\n /*\n Use the modern Firefox focus style for all focusable elements.\n*/\n\n :-moz-focusring:where(:not(iframe)) {\n outline: auto;\n }\n\n /*\n Add the correct vertical alignment in Chrome and Firefox.\n*/\n\n progress {\n vertical-align: baseline;\n }\n\n /*\n Add the correct display in Chrome and Safari.\n*/\n\n summary {\n display: list-item;\n }\n\n /*\n Make lists unstyled by default.\n*/\n\n ol,\n ul,\n menu {\n list-style: none;\n }\n\n /*\n 1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n 2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\n img,\n svg,\n video,\n canvas,\n audio,\n iframe,\n embed,\n object {\n display: block; /* 1 */\n vertical-align: middle; /* 2 */\n }\n\n /*\n Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\n img,\n video {\n max-width: 100%;\n height: auto;\n }\n\n /*\n 1. Inherit font styles in all browsers.\n 2. Remove border radius in all browsers.\n 3. Remove background color in all browsers.\n 4. Ensure consistent opacity for disabled states in all browsers.\n*/\n\n button,\n input,\n select,\n optgroup,\n textarea,\n ::file-selector-button {\n font: inherit; /* 1 */\n font-feature-settings: inherit; /* 1 */\n font-variation-settings: inherit; /* 1 */\n letter-spacing: inherit; /* 1 */\n color: inherit; /* 1 */\n border-radius: 0; /* 2 */\n background-color: transparent; /* 3 */\n opacity: 1; /* 4 */\n }\n\n /*\n Restore default font weight.\n*/\n\n :where(select:is([multiple], [size])) optgroup {\n font-weight: bolder;\n }\n\n /*\n Restore indentation.\n*/\n\n :where(select:is([multiple], [size])) optgroup option {\n padding-inline-start: 20px;\n }\n\n /*\n Restore space after button.\n*/\n\n ::file-selector-button {\n margin-inline-end: 4px;\n }\n\n /*\n Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n*/\n\n ::placeholder {\n opacity: 1;\n }\n\n /*\n Set the default placeholder color to a semi-transparent version of the current text color in browsers that do not\n crash when using `color-mix(…)` with `currentcolor`. (https://github.com/tailwindlabs/tailwindcss/issues/17194)\n*/\n\n @supports (not (-webkit-appearance: -apple-pay-button)) /* Not Safari */ or\n (contain-intrinsic-size: 1px) /* Safari 17+ */ {\n ::placeholder {\n color: color-mix(in oklab, currentcolor 50%, transparent);\n }\n }\n\n /*\n Prevent resizing textareas horizontally by default.\n*/\n\n textarea {\n resize: vertical;\n }\n\n /*\n Remove the inner padding in Chrome and Safari on macOS.\n*/\n\n ::-webkit-search-decoration {\n -webkit-appearance: none;\n }\n\n /*\n 1. Ensure date/time inputs have the same height when empty in iOS Safari.\n 2. Ensure text alignment can be changed on date/time inputs in iOS Safari.\n*/\n\n ::-webkit-date-and-time-value {\n min-height: 1lh; /* 1 */\n text-align: inherit; /* 2 */\n }\n\n /*\n Prevent height from changing on date/time inputs in macOS Safari when the input is set to `display: block`.\n*/\n\n ::-webkit-datetime-edit {\n display: inline-flex;\n }\n\n /*\n Remove excess padding from pseudo-elements in date/time inputs to ensure consistent height across browsers.\n*/\n\n ::-webkit-datetime-edit-fields-wrapper {\n padding: 0;\n }\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\n /*\n Center dropdown marker shown on inputs with paired `<datalist>`s in Chrome. (https://github.com/tailwindlabs/tailwindcss/issues/18499)\n*/\n\n ::-webkit-calendar-picker-indicator {\n line-height: 1;\n }\n\n /*\n Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n :-moz-ui-invalid {\n box-shadow: none;\n }\n\n /*\n Correct the inability to style the border radius in iOS Safari.\n*/\n\n button,\n input:where([type=\"button\"], [type=\"reset\"], [type=\"submit\"]),\n ::file-selector-button {\n appearance: button;\n }\n\n /*\n Correct the cursor style of increment and decrement buttons in Safari.\n*/\n\n ::-webkit-inner-spin-button,\n ::-webkit-outer-spin-button {\n height: auto;\n }\n\n /*\n Make elements with the HTML hidden attribute stay hidden by default.\n*/\n\n [hidden]:where(:not([hidden=\"until-found\"])) {\n display: none !important;\n }\n}\n\n@layer utilities {\n @tailwind utilities;\n}\n","@import \"tailwindcss\";\n@source \"./**/*.{vue,ts}\";\n@plugin '../../../../src/styles/tailwind-icons';\n\n@theme {\n --font-sans:\n system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\n --font-serif: \"New York\", Georgia, Cambria, \"Times New Roman\", Times, serif;\n --font-mono:\n \"DM Mono\", \"SF Mono\", SFMono-Regular, Consolas, \"Liberation Mono\", Menlo,\n Courier, monospace;\n\n --color-theme-0: var(--theme-0, #ffffff);\n --color-theme-25: var(--theme-25, #f8fafc);\n --color-theme-50: var(--theme-50, #f3f4f6);\n --color-theme-100: var(--theme-100, #e5e7eb);\n --color-theme-200: var(--theme-200, #d1d5db);\n --color-theme-300: var(--theme-300, #9ca3af);\n --color-theme-400: var(--theme-400, #6b7280);\n --color-theme-500: var(--theme-500, #4b5563);\n --color-theme-600: var(--theme-600, #374151);\n --color-theme-700: var(--theme-700, #1f2a44);\n --color-theme-800: var(--theme-800, #111827);\n --color-theme-900: var(--theme-900, #0c0a13);\n --color-theme-950: var(--theme-950, #030712);\n --color-theme-975: var(--theme-975, #02060f);\n --color-theme-1000: var(--theme-1000, #000000);\n\n --color-primary-0: var(--primary-0, #ffffff);\n --color-primary-25: var(--primary-25, #eff6ff);\n --color-primary-50: var(--primary-50, #dbeafe);\n --color-primary-100: var(--primary-100, #bfdbfe);\n --color-primary-200: var(--primary-200, #93c5fd);\n --color-primary-300: var(--primary-300, #60a5fa);\n --color-primary-400: var(--primary-400, #3b82f6);\n --color-primary-500: var(--primary-500, #2563eb);\n --color-primary-600: var(--primary-600, #1d4ed8);\n --color-primary-700: var(--primary-700, #1e40af);\n --color-primary-800: var(--primary-800, #1e3a8a);\n --color-primary-900: var(--primary-900, #172554);\n --color-primary-950: var(--primary-950, #0c1838);\n --color-primary-975: var(--primary-975, #070e22);\n --color-primary-1000: var(--primary-1000, #000000);\n}\n\n/* Prose formatting for chat messages (rendered markdown) */\n.chat-msg-prose {\n & :first-child { margin-top: 0; }\n & :last-child { margin-bottom: 0; }\n\n /* Inline */\n & strong { font-weight: 600; }\n & em { font-style: italic; }\n & a {\n color: var(--color-primary-500);\n text-decoration: underline;\n text-underline-offset: 3px;\n text-decoration-color: color-mix(in oklch, var(--color-primary-500) 40%, transparent);\n font-weight: 500;\n transition: text-decoration-color 0.15s ease;\n &:hover {\n text-decoration-color: var(--color-primary-500);\n }\n }\n\n /* Links on colored/dark backgrounds — override primary color to stay legible */\n &.chat-msg-prose-invert a {\n color: #fff;\n text-decoration-color: rgba(255, 255, 255, 0.45);\n &:hover { text-decoration-color: #fff; }\n }\n\n /* Data surfaces on the dark outgoing bubble — theme tints would read as\n near-white blocks, so use white-alpha fills instead. */\n &.chat-msg-prose-invert {\n & pre, & table { background: rgba(255, 255, 255, 0.08); border-color: rgba(255, 255, 255, 0.18); }\n & td { border-top-color: rgba(255, 255, 255, 0.12); }\n & :not(pre) > code { background: rgba(255, 255, 255, 0.14); }\n & hr { border-top-color: rgba(255, 255, 255, 0.22); }\n }\n\n /* Block text — generous paragraph rhythm. On the bubble-less assistant\n canvas, whitespace is the only separator between thoughts, so paragraphs\n get a near-full-line gap and comfortable leading for readability. */\n & p { margin: 1em 0; line-height: 1.6; }\n\n /* Headings — generous space above so sections read as sections on the\n bubble-less canvas. */\n & h1 { font-size: 1.25em; font-weight: 600; margin: 1.1em 0 0.5em; line-height: 1.3; }\n & h2 { font-size: 1.15em; font-weight: 600; margin: 1.1em 0 0.45em; line-height: 1.3; }\n & h3 { font-size: 1.05em; font-weight: 600; margin: 1em 0 0.4em; line-height: 1.35; }\n & h4, & h5, & h6 { font-size: 1em; font-weight: 600; margin: 0.9em 0 0.35em; line-height: 1.4; }\n\n /* Lists */\n & ul, & ol { margin: 0.7em 0 0.9em; padding-left: 1.4em; line-height: 1.55; }\n & ul { list-style-type: disc; }\n & ol { list-style-type: decimal; }\n & li {\n margin-bottom: 0.35em;\n & p { margin: 0; }\n &::marker { color: currentColor; opacity: 0.4; }\n }\n\n /* Code — soft grouped panel (mirrors the iOS code block). Same generous\n margin as tables: embedded objects need clear separation from prose. */\n & pre {\n margin: 1.4em 0;\n padding: 0.85em 1em;\n border-radius: 0.625rem;\n overflow-x: auto;\n background: var(--color-theme-25);\n border: 1px solid color-mix(in oklch, var(--color-theme-200) 70%, transparent);\n font-size: 0.82em;\n line-height: 1.5;\n font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace;\n & code { padding: 0; background: transparent; font-size: inherit; font-family: inherit; }\n }\n & :not(pre) > code {\n padding: 0.15em 0.4em;\n border-radius: 0.3rem;\n font-size: 0.85em;\n background: color-mix(in oklch, var(--color-theme-200) 45%, transparent);\n font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace;\n }\n\n /* Blockquotes */\n /* Blockquotes — editorial: italic + indent carries \"quotation/aside\"\n without the heavy left bar. */\n & blockquote {\n margin: 1.3em 0;\n padding: 0 0 0 1.1em;\n font-style: italic;\n opacity: 0.8;\n & p { margin: 0.15em 0; }\n }\n\n /* Tables — grouped data card (mirrors the iOS table block). Generous\n vertical margin: on the bubble-less canvas the surrounding prose needs\n clear separation from the embedded object. */\n & table {\n width: 100%;\n margin: 1.4em 0;\n border-collapse: separate;\n border-spacing: 0;\n border: 1px solid color-mix(in oklch, var(--color-theme-200) 70%, transparent);\n border-radius: 0.625rem;\n overflow: hidden;\n font-size: 0.9em;\n line-height: 1.45;\n }\n & th, & td { text-align: left; padding: 0.65em 0.8em; }\n & th { font-weight: 600; }\n & td { border-top: 1px solid color-mix(in oklch, var(--color-theme-200) 45%, transparent); color: color-mix(in oklch, currentColor 75%, transparent); }\n & td:first-child { color: inherit; }\n & [align='center'] { text-align: center; }\n & [align='right'] { text-align: right; }\n & [align='left'] { text-align: left; }\n\n /* Media */\n & hr { border: none; border-top: 1px solid color-mix(in oklch, var(--color-theme-200) 42%, transparent); margin: 1.2em 0; }\n & img { max-width: 100%; height: auto; border-radius: 0.5rem; margin: 0.6em 0; }\n\n /* Adjacent element spacing */\n & p + p { margin-top: 0.65em; }\n & p + ul, & p + ol { margin-top: 0.4em; }\n & h1 + p, & h2 + p, & h3 + p { margin-top: 0.2em; }\n}\n","<script setup lang=\"ts\">\nimport type { PageLinesSDK } from '../../sdkClient'\nimport { ref } from 'vue'\nimport ElAgentButton from './ElAgentButton.vue'\nimport AgentInputEmail from './AgentInputEmail.vue'\nimport AgentInputOneTimeCode from './AgentInputOneTimeCode.vue'\n\nconst { sdk } = defineProps<{ sdk: PageLinesSDK }>()\n\nconst showEmail = ref(false)\nconst emailStep = ref<'email' | 'code'>('email')\nconst form = ref({ email: '', code: '' })\nconst isSubmitting = ref(false)\n\nfunction signInWithGoogle() {\n sdk.error.value = null\n sdk.auth.loginWithGoogle({\n onError: (error) => {\n sdk.error.value = error\n },\n })\n}\n\nasync function sendCode() {\n if (isSubmitting.value) return\n isSubmitting.value = true\n sdk.error.value = null\n try {\n const success = await sdk.auth.requestAuthCode({ email: form.value.email })\n if (success) emailStep.value = 'code'\n }\n finally {\n isSubmitting.value = false\n }\n}\n\nasync function verifyCode() {\n if (isSubmitting.value) return\n isSubmitting.value = true\n sdk.error.value = null\n try {\n await sdk.auth.loginWithCode({ email: form.value.email, code: form.value.code })\n }\n finally {\n isSubmitting.value = false\n }\n}\n</script>\n\n<template>\n <div data-test=\"auth-panel\" class=\"flex flex-col justify-end h-full px-5 pb-8 pt-6\">\n <!-- Top area — conversational prompt -->\n <div class=\"flex-1 flex flex-col justify-center\">\n <div class=\"space-y-3 mb-10\">\n <h3 class=\"text-2xl font-light text-theme-900 leading-snug\">\n Your AI assistant,<br />ready in two minutes.\n </h3>\n <p class=\"text-sm text-theme-400 leading-relaxed max-w-[260px]\">\n Sign in to create and deploy a personal AI that works for you.\n </p>\n </div>\n\n <p\n v-if=\"sdk.error.value\"\n class=\"text-xs text-red-500 mb-4\"\n >\n {{ sdk.error.value }}\n </p>\n </div>\n\n <!-- Bottom area — actions -->\n <div class=\"space-y-3\">\n <!-- Google button -->\n <button\n data-test=\"google-auth-btn\"\n class=\"w-full flex items-center justify-center gap-3 px-5 py-3.5 rounded-xl border border-theme-200 bg-theme-0 text-theme-800 font-medium text-sm transition-all duration-150 hover:border-theme-300 hover:bg-theme-25 active:scale-[0.98] cursor-pointer\"\n @click=\"signInWithGoogle\"\n >\n <svg class=\"size-[18px]\" viewBox=\"0 0 24 24\">\n <path d=\"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92a5.06 5.06 0 0 1-2.2 3.32v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.1z\" fill=\"#4285F4\" />\n <path d=\"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z\" fill=\"#34A853\" />\n <path d=\"M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z\" fill=\"#FBBC05\" />\n <path d=\"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z\" fill=\"#EA4335\" />\n </svg>\n Continue with Google\n </button>\n\n <!-- Divider -->\n <div class=\"flex items-center gap-3 py-1\">\n <div class=\"flex-1 h-px bg-theme-100\" />\n <span class=\"text-[11px] text-theme-300 uppercase tracking-widest\">or</span>\n <div class=\"flex-1 h-px bg-theme-100\" />\n </div>\n\n <!-- Email flow -->\n <div v-if=\"!showEmail\">\n <button\n data-test=\"email-auth-link\"\n class=\"w-full px-5 py-3 rounded-xl border border-theme-100 text-sm text-theme-500 transition-all duration-150 hover:border-theme-200 hover:text-theme-700 cursor-pointer\"\n @click=\"showEmail = true\"\n >\n Use email instead\n </button>\n </div>\n\n <!-- Email input step -->\n <div v-if=\"showEmail && emailStep === 'email'\" class=\"space-y-3\">\n <AgentInputEmail\n v-model=\"form.email\"\n data-test=\"auth-email-input\"\n @keyup.enter=\"sendCode\"\n />\n <ElAgentButton\n data-test=\"auth-send-code\"\n theme=\"dark\"\n size=\"md\"\n class=\"w-full\"\n :loading=\"isSubmitting\"\n :disabled=\"!form.email || isSubmitting\"\n @click=\"sendCode\"\n >\n Send verification code\n </ElAgentButton>\n </div>\n\n <!-- Code verification step -->\n <div v-if=\"showEmail && emailStep === 'code'\" class=\"space-y-3\">\n <p class=\"text-xs text-theme-400\">\n Code sent to {{ form.email }}\n </p>\n <AgentInputOneTimeCode\n v-model=\"form.code\"\n :length=\"6\"\n :focus-first=\"true\"\n data-test=\"auth-code-input\"\n @auto-submit=\"verifyCode\"\n />\n <ElAgentButton\n data-test=\"auth-verify-code\"\n theme=\"dark\"\n size=\"md\"\n class=\"w-full\"\n :loading=\"isSubmitting\"\n :disabled=\"form.code.length !== 6 || isSubmitting\"\n @click=\"verifyCode\"\n >\n Verify\n </ElAgentButton>\n <button\n class=\"w-full text-xs text-theme-300 hover:text-theme-500 transition-colors py-1 cursor-pointer\"\n @click=\"emailStep = 'email'\"\n >\n Use a different email\n </button>\n </div>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { PageLinesSDK } from '../../sdkClient'\nimport { ref } from 'vue'\nimport ElAgentButton from './ElAgentButton.vue'\nimport AgentInputEmail from './AgentInputEmail.vue'\nimport AgentInputOneTimeCode from './AgentInputOneTimeCode.vue'\n\nconst { sdk } = defineProps<{ sdk: PageLinesSDK }>()\n\nconst showEmail = ref(false)\nconst emailStep = ref<'email' | 'code'>('email')\nconst form = ref({ email: '', code: '' })\nconst isSubmitting = ref(false)\n\nfunction signInWithGoogle() {\n sdk.error.value = null\n sdk.auth.loginWithGoogle({\n onError: (error) => {\n sdk.error.value = error\n },\n })\n}\n\nasync function sendCode() {\n if (isSubmitting.value) return\n isSubmitting.value = true\n sdk.error.value = null\n try {\n const success = await sdk.auth.requestAuthCode({ email: form.value.email })\n if (success) emailStep.value = 'code'\n }\n finally {\n isSubmitting.value = false\n }\n}\n\nasync function verifyCode() {\n if (isSubmitting.value) return\n isSubmitting.value = true\n sdk.error.value = null\n try {\n await sdk.auth.loginWithCode({ email: form.value.email, code: form.value.code })\n }\n finally {\n isSubmitting.value = false\n }\n}\n</script>\n\n<template>\n <div data-test=\"auth-panel\" class=\"flex flex-col justify-end h-full px-5 pb-8 pt-6\">\n <!-- Top area — conversational prompt -->\n <div class=\"flex-1 flex flex-col justify-center\">\n <div class=\"space-y-3 mb-10\">\n <h3 class=\"text-2xl font-light text-theme-900 leading-snug\">\n Your AI assistant,<br />ready in two minutes.\n </h3>\n <p class=\"text-sm text-theme-400 leading-relaxed max-w-[260px]\">\n Sign in to create and deploy a personal AI that works for you.\n </p>\n </div>\n\n <p\n v-if=\"sdk.error.value\"\n class=\"text-xs text-red-500 mb-4\"\n >\n {{ sdk.error.value }}\n </p>\n </div>\n\n <!-- Bottom area — actions -->\n <div class=\"space-y-3\">\n <!-- Google button -->\n <button\n data-test=\"google-auth-btn\"\n class=\"w-full flex items-center justify-center gap-3 px-5 py-3.5 rounded-xl border border-theme-200 bg-theme-0 text-theme-800 font-medium text-sm transition-all duration-150 hover:border-theme-300 hover:bg-theme-25 active:scale-[0.98] cursor-pointer\"\n @click=\"signInWithGoogle\"\n >\n <svg class=\"size-[18px]\" viewBox=\"0 0 24 24\">\n <path d=\"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92a5.06 5.06 0 0 1-2.2 3.32v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.1z\" fill=\"#4285F4\" />\n <path d=\"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z\" fill=\"#34A853\" />\n <path d=\"M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z\" fill=\"#FBBC05\" />\n <path d=\"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z\" fill=\"#EA4335\" />\n </svg>\n Continue with Google\n </button>\n\n <!-- Divider -->\n <div class=\"flex items-center gap-3 py-1\">\n <div class=\"flex-1 h-px bg-theme-100\" />\n <span class=\"text-[11px] text-theme-300 uppercase tracking-widest\">or</span>\n <div class=\"flex-1 h-px bg-theme-100\" />\n </div>\n\n <!-- Email flow -->\n <div v-if=\"!showEmail\">\n <button\n data-test=\"email-auth-link\"\n class=\"w-full px-5 py-3 rounded-xl border border-theme-100 text-sm text-theme-500 transition-all duration-150 hover:border-theme-200 hover:text-theme-700 cursor-pointer\"\n @click=\"showEmail = true\"\n >\n Use email instead\n </button>\n </div>\n\n <!-- Email input step -->\n <div v-if=\"showEmail && emailStep === 'email'\" class=\"space-y-3\">\n <AgentInputEmail\n v-model=\"form.email\"\n data-test=\"auth-email-input\"\n @keyup.enter=\"sendCode\"\n />\n <ElAgentButton\n data-test=\"auth-send-code\"\n theme=\"dark\"\n size=\"md\"\n class=\"w-full\"\n :loading=\"isSubmitting\"\n :disabled=\"!form.email || isSubmitting\"\n @click=\"sendCode\"\n >\n Send verification code\n </ElAgentButton>\n </div>\n\n <!-- Code verification step -->\n <div v-if=\"showEmail && emailStep === 'code'\" class=\"space-y-3\">\n <p class=\"text-xs text-theme-400\">\n Code sent to {{ form.email }}\n </p>\n <AgentInputOneTimeCode\n v-model=\"form.code\"\n :length=\"6\"\n :focus-first=\"true\"\n data-test=\"auth-code-input\"\n @auto-submit=\"verifyCode\"\n />\n <ElAgentButton\n data-test=\"auth-verify-code\"\n theme=\"dark\"\n size=\"md\"\n class=\"w-full\"\n :loading=\"isSubmitting\"\n :disabled=\"form.code.length !== 6 || isSubmitting\"\n @click=\"verifyCode\"\n >\n Verify\n </ElAgentButton>\n <button\n class=\"w-full text-xs text-theme-300 hover:text-theme-500 transition-colors py-1 cursor-pointer\"\n @click=\"emailStep = 'email'\"\n >\n Use a different email\n </button>\n </div>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { AgentConfig } from '@pagelines/core'\nimport type { PageLinesSDK } from '../../sdkClient'\nimport { ref } from 'vue'\n\nconst { sdk } = defineProps<{ sdk: PageLinesSDK }>()\nconst emit = defineEmits<{ created: [agent: AgentConfig] }>()\n\nconst name = ref('')\nconst isSubmitting = ref(false)\nconst error = ref<string | null>(null)\n\nasync function createAgent() {\n if (isSubmitting.value || !name.value.trim()) return\n isSubmitting.value = true\n error.value = null\n\n try {\n const agent = await sdk.agent.create({ name: name.value.trim() })\n emit('created', agent)\n }\n catch (err) {\n error.value = err instanceof Error ? err.message : 'Failed to create agent'\n }\n finally {\n isSubmitting.value = false\n }\n}\n</script>\n\n<template>\n <div data-test=\"create-panel\" class=\"flex flex-col justify-end h-full px-5 pb-8 pt-6\">\n <div class=\"flex-1 flex flex-col justify-center\">\n <div class=\"space-y-3 mb-10\">\n <h3 class=\"text-2xl font-light text-theme-900 leading-snug\">\n What should we call<br />your assistant?\n </h3>\n <p class=\"text-sm text-theme-400 leading-relaxed max-w-[260px]\">\n Pick a name. You can change it later.\n </p>\n </div>\n\n <p v-if=\"error\" class=\"text-xs text-red-500 mb-4\">\n {{ error }}\n </p>\n </div>\n\n <div class=\"space-y-3\">\n <input\n v-model=\"name\"\n data-test=\"agent-name-input\"\n type=\"text\"\n placeholder=\"e.g. Alex, Casey, Jordan\"\n class=\"w-full px-4 py-3 text-theme-900 placeholder-theme-300 bg-theme-0 border border-theme-200 rounded-xl focus:outline-none focus:border-primary-400 transition-colors\"\n style=\"font-size: 16px\"\n @keyup.enter=\"createAgent\"\n />\n\n <button\n data-test=\"agent-create-btn\"\n class=\"w-full px-5 py-3.5 rounded-xl bg-primary-600 text-white text-sm font-medium transition-all duration-150 hover:bg-primary-500 active:scale-[0.98] disabled:opacity-50 disabled:cursor-not-allowed cursor-pointer\"\n :disabled=\"!name.trim() || isSubmitting\"\n @click=\"createAgent\"\n >\n {{ isSubmitting ? 'Creating...' : 'Create assistant' }}\n </button>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { AgentConfig } from '@pagelines/core'\nimport type { PageLinesSDK } from '../../sdkClient'\nimport { ref } from 'vue'\n\nconst { sdk } = defineProps<{ sdk: PageLinesSDK }>()\nconst emit = defineEmits<{ created: [agent: AgentConfig] }>()\n\nconst name = ref('')\nconst isSubmitting = ref(false)\nconst error = ref<string | null>(null)\n\nasync function createAgent() {\n if (isSubmitting.value || !name.value.trim()) return\n isSubmitting.value = true\n error.value = null\n\n try {\n const agent = await sdk.agent.create({ name: name.value.trim() })\n emit('created', agent)\n }\n catch (err) {\n error.value = err instanceof Error ? err.message : 'Failed to create agent'\n }\n finally {\n isSubmitting.value = false\n }\n}\n</script>\n\n<template>\n <div data-test=\"create-panel\" class=\"flex flex-col justify-end h-full px-5 pb-8 pt-6\">\n <div class=\"flex-1 flex flex-col justify-center\">\n <div class=\"space-y-3 mb-10\">\n <h3 class=\"text-2xl font-light text-theme-900 leading-snug\">\n What should we call<br />your assistant?\n </h3>\n <p class=\"text-sm text-theme-400 leading-relaxed max-w-[260px]\">\n Pick a name. You can change it later.\n </p>\n </div>\n\n <p v-if=\"error\" class=\"text-xs text-red-500 mb-4\">\n {{ error }}\n </p>\n </div>\n\n <div class=\"space-y-3\">\n <input\n v-model=\"name\"\n data-test=\"agent-name-input\"\n type=\"text\"\n placeholder=\"e.g. Alex, Casey, Jordan\"\n class=\"w-full px-4 py-3 text-theme-900 placeholder-theme-300 bg-theme-0 border border-theme-200 rounded-xl focus:outline-none focus:border-primary-400 transition-colors\"\n style=\"font-size: 16px\"\n @keyup.enter=\"createAgent\"\n />\n\n <button\n data-test=\"agent-create-btn\"\n class=\"w-full px-5 py-3.5 rounded-xl bg-primary-600 text-white text-sm font-medium transition-all duration-150 hover:bg-primary-500 active:scale-[0.98] disabled:opacity-50 disabled:cursor-not-allowed cursor-pointer\"\n :disabled=\"!name.trim() || isSubmitting\"\n @click=\"createAgent\"\n >\n {{ isSubmitting ? 'Creating...' : 'Create assistant' }}\n </button>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { PageLinesSDK } from '../../sdkClient'\nimport { onMounted, ref } from 'vue'\n\nconst props = defineProps<{\n sdk: PageLinesSDK\n agentId: string\n}>()\n\nconst emit = defineEmits<{\n ready: []\n error: [message: string]\n}>()\n\nconst statusMessage = ref('Setting up your assistant…')\nconst hasError = ref(false)\nconst errorMessage = ref('')\n\n// Map the canonical `lifecycle` value → user-facing copy. The SDK emits the\n// server's lifecycle verbatim (per AgentClient.waitUntilReady) so the message\n// reflects actual state instead of a rotating set of decorative strings.\n// Unknown states fall back to a sensible default.\nconst STATUS_COPY: Record<string, string> = {\n starting: 'Starting your assistant…',\n running: 'Ready!',\n stopped: 'Setting up your assistant…',\n}\n\nasync function startPolling() {\n hasError.value = false\n errorMessage.value = ''\n\n try {\n await props.sdk.agent.waitUntilReady({\n agentId: props.agentId,\n onStatus: (lifecycle) => {\n statusMessage.value = STATUS_COPY[lifecycle] ?? 'Setting up your assistant…'\n },\n })\n emit('ready')\n } catch (err) {\n hasError.value = true\n errorMessage.value = err instanceof Error ? err.message : 'Something went wrong'\n emit('error', errorMessage.value)\n }\n}\n\nonMounted(() => {\n startPolling()\n})\n</script>\n\n<template>\n <div data-test=\"provisioning-panel\" class=\"flex flex-col items-center justify-center h-full p-6\">\n <div class=\"w-full max-w-xs space-y-6 text-center\">\n <template v-if=\"!hasError\">\n <div class=\"flex justify-center\">\n <div class=\"animate-spin rounded-full size-6 border-2 border-theme-200 border-t-primary-500\" />\n </div>\n <p class=\"text-sm text-theme-500\">\n {{ statusMessage }}\n </p>\n </template>\n\n <template v-else>\n <p class=\"text-sm text-red-500\">\n {{ errorMessage }}\n </p>\n <button\n data-test=\"provision-retry-btn\"\n class=\"px-6 py-2.5 rounded-lg bg-primary-600 text-white text-sm font-medium hover:bg-primary-500 transition-colors cursor-pointer\"\n @click=\"startPolling\"\n >\n Try again\n </button>\n </template>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { PageLinesSDK } from '../../sdkClient'\nimport { onMounted, ref } from 'vue'\n\nconst props = defineProps<{\n sdk: PageLinesSDK\n agentId: string\n}>()\n\nconst emit = defineEmits<{\n ready: []\n error: [message: string]\n}>()\n\nconst statusMessage = ref('Setting up your assistant…')\nconst hasError = ref(false)\nconst errorMessage = ref('')\n\n// Map the canonical `lifecycle` value → user-facing copy. The SDK emits the\n// server's lifecycle verbatim (per AgentClient.waitUntilReady) so the message\n// reflects actual state instead of a rotating set of decorative strings.\n// Unknown states fall back to a sensible default.\nconst STATUS_COPY: Record<string, string> = {\n starting: 'Starting your assistant…',\n running: 'Ready!',\n stopped: 'Setting up your assistant…',\n}\n\nasync function startPolling() {\n hasError.value = false\n errorMessage.value = ''\n\n try {\n await props.sdk.agent.waitUntilReady({\n agentId: props.agentId,\n onStatus: (lifecycle) => {\n statusMessage.value = STATUS_COPY[lifecycle] ?? 'Setting up your assistant…'\n },\n })\n emit('ready')\n } catch (err) {\n hasError.value = true\n errorMessage.value = err instanceof Error ? err.message : 'Something went wrong'\n emit('error', errorMessage.value)\n }\n}\n\nonMounted(() => {\n startPolling()\n})\n</script>\n\n<template>\n <div data-test=\"provisioning-panel\" class=\"flex flex-col items-center justify-center h-full p-6\">\n <div class=\"w-full max-w-xs space-y-6 text-center\">\n <template v-if=\"!hasError\">\n <div class=\"flex justify-center\">\n <div class=\"animate-spin rounded-full size-6 border-2 border-theme-200 border-t-primary-500\" />\n </div>\n <p class=\"text-sm text-theme-500\">\n {{ statusMessage }}\n </p>\n </template>\n\n <template v-else>\n <p class=\"text-sm text-red-500\">\n {{ errorMessage }}\n </p>\n <button\n data-test=\"provision-retry-btn\"\n class=\"px-6 py-2.5 rounded-lg bg-primary-600 text-white text-sm font-medium hover:bg-primary-500 transition-colors cursor-pointer\"\n @click=\"startPolling\"\n >\n Try again\n </button>\n </template>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { PageLinesSDK } from '../../sdkClient'\nimport { ref } from 'vue'\n\nconst { sdk } = defineProps<{ sdk: PageLinesSDK }>()\n\nconst isRedirecting = ref(false)\nconst error = ref<string | null>(null)\n\nasync function startTrial() {\n if (isRedirecting.value) return\n isRedirecting.value = true\n error.value = null\n\n try {\n await sdk.billing.startTrial({ returnUrl: window.location.href })\n }\n catch (err) {\n error.value = err instanceof Error ? err.message : 'Failed to start trial'\n isRedirecting.value = false\n }\n}\n</script>\n\n<template>\n <div data-test=\"trial-gate\" class=\"flex flex-col justify-end h-full px-5 pb-8 pt-6\">\n <div class=\"flex-1 flex flex-col justify-center\">\n <div class=\"space-y-3 mb-8\">\n <h3 class=\"text-2xl font-light text-theme-900 leading-snug\">\n 10 days on us\n </h3>\n <p class=\"text-sm text-theme-400 leading-relaxed max-w-[280px]\">\n Add a payment method and get your assistant working in minutes.\n </p>\n </div>\n\n <ul class=\"space-y-3 mb-8 text-sm text-theme-600\">\n <li class=\"flex items-center gap-2.5\">\n <svg class=\"w-4 h-4 text-primary-600 shrink-0\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M3 8.5L6.5 12L13 4\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n Always-on personal assistant\n </li>\n <li class=\"flex items-center gap-2.5\">\n <svg class=\"w-4 h-4 text-primary-600 shrink-0\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M3 8.5L6.5 12L13 4\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n SMS, email, and chat channels\n </li>\n <li class=\"flex items-center gap-2.5\">\n <svg class=\"w-4 h-4 text-primary-600 shrink-0\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M3 8.5L6.5 12L13 4\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n Calendar, tasks, and productivity tools\n </li>\n </ul>\n\n <p v-if=\"error\" class=\"text-xs text-red-500 mb-4\">\n {{ error }}\n </p>\n </div>\n\n <button\n data-test=\"trial-start-btn\"\n class=\"w-full px-5 py-3.5 rounded-full bg-theme-900 text-white text-sm font-semibold transition-colors duration-150 hover:bg-theme-800 active:scale-[0.98] disabled:opacity-50 disabled:cursor-not-allowed cursor-pointer\"\n :disabled=\"isRedirecting\"\n @click=\"startTrial\"\n >\n {{ isRedirecting ? 'Redirecting...' : 'Add payment method' }}\n </button>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { PageLinesSDK } from '../../sdkClient'\nimport { ref } from 'vue'\n\nconst { sdk } = defineProps<{ sdk: PageLinesSDK }>()\n\nconst isRedirecting = ref(false)\nconst error = ref<string | null>(null)\n\nasync function startTrial() {\n if (isRedirecting.value) return\n isRedirecting.value = true\n error.value = null\n\n try {\n await sdk.billing.startTrial({ returnUrl: window.location.href })\n }\n catch (err) {\n error.value = err instanceof Error ? err.message : 'Failed to start trial'\n isRedirecting.value = false\n }\n}\n</script>\n\n<template>\n <div data-test=\"trial-gate\" class=\"flex flex-col justify-end h-full px-5 pb-8 pt-6\">\n <div class=\"flex-1 flex flex-col justify-center\">\n <div class=\"space-y-3 mb-8\">\n <h3 class=\"text-2xl font-light text-theme-900 leading-snug\">\n 10 days on us\n </h3>\n <p class=\"text-sm text-theme-400 leading-relaxed max-w-[280px]\">\n Add a payment method and get your assistant working in minutes.\n </p>\n </div>\n\n <ul class=\"space-y-3 mb-8 text-sm text-theme-600\">\n <li class=\"flex items-center gap-2.5\">\n <svg class=\"w-4 h-4 text-primary-600 shrink-0\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M3 8.5L6.5 12L13 4\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n Always-on personal assistant\n </li>\n <li class=\"flex items-center gap-2.5\">\n <svg class=\"w-4 h-4 text-primary-600 shrink-0\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M3 8.5L6.5 12L13 4\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n SMS, email, and chat channels\n </li>\n <li class=\"flex items-center gap-2.5\">\n <svg class=\"w-4 h-4 text-primary-600 shrink-0\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M3 8.5L6.5 12L13 4\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n Calendar, tasks, and productivity tools\n </li>\n </ul>\n\n <p v-if=\"error\" class=\"text-xs text-red-500 mb-4\">\n {{ error }}\n </p>\n </div>\n\n <button\n data-test=\"trial-start-btn\"\n class=\"w-full px-5 py-3.5 rounded-full bg-theme-900 text-white text-sm font-semibold transition-colors duration-150 hover:bg-theme-800 active:scale-[0.98] disabled:opacity-50 disabled:cursor-not-allowed cursor-pointer\"\n :disabled=\"isRedirecting\"\n @click=\"startTrial\"\n >\n {{ isRedirecting ? 'Redirecting...' : 'Add payment method' }}\n </button>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { AgentConfig } from '@pagelines/core'\nimport type { PageLinesSDK } from '../../sdkClient'\nimport { computed, onMounted, ref, shallowRef, watch } from 'vue'\nimport { Agent } from '../../agent/schema'\nimport { AgentChatController } from '../../agent/AgentController'\nimport { resolveApiBase } from '../../api'\nimport { PageLinesSDK as PageLinesSDKClass } from '../../sdkClient'\nimport ElAgentChat from '../../agent/ui/ElAgentChat.vue'\nimport ElAuthPanel from '../../agent/ui/ElAuthPanel.vue'\nimport ElCreateAgent from '../../agent/ui/ElCreateAgent.vue'\nimport ElProvisioningStatus from '../../agent/ui/ElProvisioningStatus.vue'\nimport ElTrialGate from '../../agent/ui/ElTrialGate.vue'\n\nconst props = defineProps<{\n sdk?: PageLinesSDK\n onClose?: () => void\n}>()\n\n// SDK singleton\nconst sdk = props.sdk || PageLinesSDKClass.getInstance({\n isDev: typeof window !== 'undefined'\n ? window.location.hostname === 'localhost' || window.location.hostname.includes('127.0.0.1')\n : false,\n})\n\n// Local state\nconst createdAgent = shallowRef<AgentConfig | undefined>()\nconst botReady = ref(false)\nconst provisionError = ref<string | undefined>()\n// True when user just created an agent in this session (needs provisioning gate)\nconst isNewAgent = ref(false)\nconst billingChecked = ref(false)\nconst hasBilling = ref(false)\n// Track billing-probe failure separately from the success/no-billing axes —\n// we route to a distinct error state with a retry CTA. Fail-fast on the\n// billing path: a flaky probe used to flip `hasBilling = true` and silently\n// drop unbilled users into chat. Now we tell them, give them a retry, and\n// keep the access decision honest.\nconst billingProbeError = ref(false)\n\nasync function probeBilling() {\n if (!sdk.token.value)\n return\n billingProbeError.value = false\n try {\n const status = await sdk.billing.getStatus()\n hasBilling.value = status.hasActiveBilling\n } catch (err) {\n console.warn('AgentWidgetOnboard: getStatus rejected', err)\n billingProbeError.value = true\n hasBilling.value = false\n }\n}\n\nonMounted(async () => {\n try {\n // Detect Stripe return — ?session_id= in URL after checkout redirect\n const params = new URLSearchParams(window.location.search)\n const sessionId = params.get('session_id')\n if (sessionId) {\n const url = new URL(window.location.href)\n url.searchParams.delete('session_id')\n url.searchParams.delete('billing_modal')\n window.history.replaceState({}, '', url.toString())\n await sdk.billing.confirmCheckout({ sessionId })\n }\n\n if (sdk.token.value) {\n await probeBilling()\n }\n } catch (err) {\n console.error('AgentWidgetOnboard: onMounted (Stripe checkout return + billing probe) failed', err)\n } finally {\n billingChecked.value = true\n }\n})\n\n// Derive current agent from SDK state or local creation\nconst agent = computed(() => {\n if (createdAgent.value) return createdAgent.value\n const user = sdk.activeUser.value\n if (!user?.agents?.length) return undefined\n const primaryId = user.primaryAgentId\n return user.agents.find(a => a.agentId === primaryId) || user.agents[0]\n})\n\n// Agent wrapper for AgentChat — stable ref, only created once per agent\nconst agentInstance = shallowRef<Agent | undefined>()\nconst chatControllerRef = shallowRef<AgentChatController | undefined>()\n\n// Create Agent + Controller only when agentId changes (not on every reactivity tick)\nwatch(() => agent.value?.agentId, (agentId) => {\n if (!agentId || !agent.value) {\n agentInstance.value = undefined\n chatControllerRef.value = undefined\n return\n }\n\n const agentObj = new Agent({ config: agent.value })\n agentInstance.value = agentObj\n\n chatControllerRef.value = new AgentChatController({\n sdk,\n agent: agentObj,\n chatStreamFn: async (args) => {\n await sdk.chat.chatStreamAuthenticated({\n agentId: agentId!,\n message: args.message,\n attachments: args.attachments,\n conversationId: args.conversationId,\n history: args.history,\n onDelta: args.onDelta,\n onDone: args.onDone,\n onError: args.onError,\n onStatus: args.onStatus,\n onToolActivity: args.onToolActivity,\n onWorkingEnd: args.onWorkingEnd,\n })\n },\n })\n}, { immediate: true })\n\n// Derive mode from state\n// Key insight: existing agents go straight to chat. The message path never\n// wakes a stopped assistant — a non-running one surfaces a system explainer,\n// and activation is the owner's action. Only newly created agents go through\n// the provisioning gate.\nconst mode = computed<'auth' | 'billing' | 'billing-unreachable' | 'create' | 'provisioning' | 'error' | 'chat'>(() => {\n if (!sdk.token.value) return 'auth'\n if (billingChecked.value && billingProbeError.value) return 'billing-unreachable'\n if (billingChecked.value && !hasBilling.value) return 'billing'\n if (!agent.value) return 'create'\n // Only gate on provisioning for agents created in this session\n if (isNewAgent.value) {\n if (provisionError.value) return 'error'\n if (!botReady.value) return 'provisioning'\n }\n return 'chat'\n})\n\nwatch(() => sdk.token.value, async (token) => {\n if (!token || billingChecked.value)\n return\n await probeBilling()\n billingChecked.value = true\n})\n\nasync function retryBillingProbe() {\n await probeBilling()\n}\n\n// Dashboard URL\nconst dashboardUrl = computed(() => {\n const base = resolveApiBase(sdk.apiBase, sdk.isDev)\n return `${base}/dashboard`\n})\n\n// Event handlers\nfunction onAgentCreated(agentConfig: AgentConfig) {\n createdAgent.value = agentConfig\n provisionError.value = undefined\n botReady.value = false\n isNewAgent.value = true\n}\n\nfunction onProvisionReady() {\n botReady.value = true\n}\n\nfunction onProvisionError(msg: string) {\n provisionError.value = msg\n}\n\nfunction onRetry() {\n provisionError.value = undefined\n botReady.value = false\n}\n\n// No initial status check needed for existing agents —\n// AgentChat's auto-wake handles starting stopped bots.\n// Provisioning gate only applies to newly created agents (isNewAgent).\n</script>\n\n<template>\n <div\n class=\"size-full flex flex-col bg-theme-0\"\n data-test=\"onboard-widget\"\n :data-test-state=\"mode\"\n >\n <!-- Header -->\n <div class=\"flex items-center justify-between px-4 py-3 border-b border-theme-100\">\n <span class=\"text-sm font-medium text-theme-800\">\n {{ agent?.name || 'PageLines' }}\n </span>\n <button\n v-if=\"props.onClose\"\n class=\"text-theme-400 hover:text-theme-600 transition-colors cursor-pointer\"\n @click=\"props.onClose?.()\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"size-5\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\" d=\"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z\" clip-rule=\"evenodd\" />\n </svg>\n </button>\n </div>\n\n <!-- Content area -->\n <div class=\"flex-1 overflow-hidden\">\n <ElAuthPanel v-if=\"mode === 'auth'\" :sdk=\"sdk\" />\n <ElTrialGate v-if=\"mode === 'billing'\" :sdk=\"sdk\" />\n\n <!-- Billing probe failed (network blip, 5xx, timeout). We deliberately\n don't fall through to chat — that was the silent fail-open bug.\n User retries; if it succeeds we route to chat or trial-gate normally. -->\n <div v-if=\"mode === 'billing-unreachable'\" class=\"flex flex-col items-center justify-center h-full p-6\">\n <div class=\"w-full max-w-xs space-y-6 text-center\">\n <p class=\"text-[15px] font-semibold text-theme-900\">\n We can't reach billing right now\n </p>\n <button\n data-test=\"billing-unreachable-retry\"\n class=\"px-6 py-2.5 rounded-full bg-theme-900 text-white text-sm font-semibold hover:bg-theme-800 transition-colors cursor-pointer\"\n @click=\"retryBillingProbe\"\n >\n Try again\n </button>\n </div>\n </div>\n\n <ElCreateAgent v-if=\"mode === 'create'\" :sdk=\"sdk\" @created=\"onAgentCreated\" />\n <ElProvisioningStatus\n v-if=\"mode === 'provisioning' && agent\"\n :sdk=\"sdk\"\n :agent-id=\"agent.agentId || ''\"\n @ready=\"onProvisionReady\"\n @error=\"onProvisionError\"\n />\n <ElAgentChat\n v-if=\"mode === 'chat' && agentInstance && chatControllerRef\"\n :chat-controller=\"chatControllerRef\"\n :agent=\"agentInstance\"\n variant=\"light\"\n class=\"size-full\"\n />\n\n <!-- Error recovery -->\n <div v-if=\"mode === 'error'\" class=\"flex flex-col items-center justify-center h-full p-6\">\n <div class=\"w-full max-w-xs space-y-6 text-center\">\n <p class=\"text-sm text-red-500\">\n {{ provisionError }}\n </p>\n <button\n class=\"px-6 py-2.5 rounded-lg bg-primary-600 text-white text-sm font-medium hover:bg-primary-500 transition-colors cursor-pointer\"\n @click=\"onRetry\"\n >\n Try again\n </button>\n </div>\n </div>\n </div>\n\n <!-- Dashboard CTA (chat mode) -->\n <div v-if=\"mode === 'chat'\" class=\"border-t border-theme-100 px-4 py-2 text-center\">\n <a\n :href=\"dashboardUrl\"\n target=\"_blank\"\n class=\"text-xs text-theme-400 hover:text-primary-600 transition-colors\"\n >\n Go to Dashboard &rarr;\n </a>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { AgentConfig } from '@pagelines/core'\nimport type { PageLinesSDK } from '../../sdkClient'\nimport { computed, onMounted, ref, shallowRef, watch } from 'vue'\nimport { Agent } from '../../agent/schema'\nimport { AgentChatController } from '../../agent/AgentController'\nimport { resolveApiBase } from '../../api'\nimport { PageLinesSDK as PageLinesSDKClass } from '../../sdkClient'\nimport ElAgentChat from '../../agent/ui/ElAgentChat.vue'\nimport ElAuthPanel from '../../agent/ui/ElAuthPanel.vue'\nimport ElCreateAgent from '../../agent/ui/ElCreateAgent.vue'\nimport ElProvisioningStatus from '../../agent/ui/ElProvisioningStatus.vue'\nimport ElTrialGate from '../../agent/ui/ElTrialGate.vue'\n\nconst props = defineProps<{\n sdk?: PageLinesSDK\n onClose?: () => void\n}>()\n\n// SDK singleton\nconst sdk = props.sdk || PageLinesSDKClass.getInstance({\n isDev: typeof window !== 'undefined'\n ? window.location.hostname === 'localhost' || window.location.hostname.includes('127.0.0.1')\n : false,\n})\n\n// Local state\nconst createdAgent = shallowRef<AgentConfig | undefined>()\nconst botReady = ref(false)\nconst provisionError = ref<string | undefined>()\n// True when user just created an agent in this session (needs provisioning gate)\nconst isNewAgent = ref(false)\nconst billingChecked = ref(false)\nconst hasBilling = ref(false)\n// Track billing-probe failure separately from the success/no-billing axes —\n// we route to a distinct error state with a retry CTA. Fail-fast on the\n// billing path: a flaky probe used to flip `hasBilling = true` and silently\n// drop unbilled users into chat. Now we tell them, give them a retry, and\n// keep the access decision honest.\nconst billingProbeError = ref(false)\n\nasync function probeBilling() {\n if (!sdk.token.value)\n return\n billingProbeError.value = false\n try {\n const status = await sdk.billing.getStatus()\n hasBilling.value = status.hasActiveBilling\n } catch (err) {\n console.warn('AgentWidgetOnboard: getStatus rejected', err)\n billingProbeError.value = true\n hasBilling.value = false\n }\n}\n\nonMounted(async () => {\n try {\n // Detect Stripe return — ?session_id= in URL after checkout redirect\n const params = new URLSearchParams(window.location.search)\n const sessionId = params.get('session_id')\n if (sessionId) {\n const url = new URL(window.location.href)\n url.searchParams.delete('session_id')\n url.searchParams.delete('billing_modal')\n window.history.replaceState({}, '', url.toString())\n await sdk.billing.confirmCheckout({ sessionId })\n }\n\n if (sdk.token.value) {\n await probeBilling()\n }\n } catch (err) {\n console.error('AgentWidgetOnboard: onMounted (Stripe checkout return + billing probe) failed', err)\n } finally {\n billingChecked.value = true\n }\n})\n\n// Derive current agent from SDK state or local creation\nconst agent = computed(() => {\n if (createdAgent.value) return createdAgent.value\n const user = sdk.activeUser.value\n if (!user?.agents?.length) return undefined\n const primaryId = user.primaryAgentId\n return user.agents.find(a => a.agentId === primaryId) || user.agents[0]\n})\n\n// Agent wrapper for AgentChat — stable ref, only created once per agent\nconst agentInstance = shallowRef<Agent | undefined>()\nconst chatControllerRef = shallowRef<AgentChatController | undefined>()\n\n// Create Agent + Controller only when agentId changes (not on every reactivity tick)\nwatch(() => agent.value?.agentId, (agentId) => {\n if (!agentId || !agent.value) {\n agentInstance.value = undefined\n chatControllerRef.value = undefined\n return\n }\n\n const agentObj = new Agent({ config: agent.value })\n agentInstance.value = agentObj\n\n chatControllerRef.value = new AgentChatController({\n sdk,\n agent: agentObj,\n chatStreamFn: async (args) => {\n await sdk.chat.chatStreamAuthenticated({\n agentId: agentId!,\n message: args.message,\n attachments: args.attachments,\n conversationId: args.conversationId,\n history: args.history,\n onDelta: args.onDelta,\n onDone: args.onDone,\n onError: args.onError,\n onStatus: args.onStatus,\n onToolActivity: args.onToolActivity,\n onWorkingEnd: args.onWorkingEnd,\n })\n },\n })\n}, { immediate: true })\n\n// Derive mode from state\n// Key insight: existing agents go straight to chat. The message path never\n// wakes a stopped assistant — a non-running one surfaces a system explainer,\n// and activation is the owner's action. Only newly created agents go through\n// the provisioning gate.\nconst mode = computed<'auth' | 'billing' | 'billing-unreachable' | 'create' | 'provisioning' | 'error' | 'chat'>(() => {\n if (!sdk.token.value) return 'auth'\n if (billingChecked.value && billingProbeError.value) return 'billing-unreachable'\n if (billingChecked.value && !hasBilling.value) return 'billing'\n if (!agent.value) return 'create'\n // Only gate on provisioning for agents created in this session\n if (isNewAgent.value) {\n if (provisionError.value) return 'error'\n if (!botReady.value) return 'provisioning'\n }\n return 'chat'\n})\n\nwatch(() => sdk.token.value, async (token) => {\n if (!token || billingChecked.value)\n return\n await probeBilling()\n billingChecked.value = true\n})\n\nasync function retryBillingProbe() {\n await probeBilling()\n}\n\n// Dashboard URL\nconst dashboardUrl = computed(() => {\n const base = resolveApiBase(sdk.apiBase, sdk.isDev)\n return `${base}/dashboard`\n})\n\n// Event handlers\nfunction onAgentCreated(agentConfig: AgentConfig) {\n createdAgent.value = agentConfig\n provisionError.value = undefined\n botReady.value = false\n isNewAgent.value = true\n}\n\nfunction onProvisionReady() {\n botReady.value = true\n}\n\nfunction onProvisionError(msg: string) {\n provisionError.value = msg\n}\n\nfunction onRetry() {\n provisionError.value = undefined\n botReady.value = false\n}\n\n// No initial status check needed for existing agents —\n// AgentChat's auto-wake handles starting stopped bots.\n// Provisioning gate only applies to newly created agents (isNewAgent).\n</script>\n\n<template>\n <div\n class=\"size-full flex flex-col bg-theme-0\"\n data-test=\"onboard-widget\"\n :data-test-state=\"mode\"\n >\n <!-- Header -->\n <div class=\"flex items-center justify-between px-4 py-3 border-b border-theme-100\">\n <span class=\"text-sm font-medium text-theme-800\">\n {{ agent?.name || 'PageLines' }}\n </span>\n <button\n v-if=\"props.onClose\"\n class=\"text-theme-400 hover:text-theme-600 transition-colors cursor-pointer\"\n @click=\"props.onClose?.()\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"size-5\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\" d=\"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z\" clip-rule=\"evenodd\" />\n </svg>\n </button>\n </div>\n\n <!-- Content area -->\n <div class=\"flex-1 overflow-hidden\">\n <ElAuthPanel v-if=\"mode === 'auth'\" :sdk=\"sdk\" />\n <ElTrialGate v-if=\"mode === 'billing'\" :sdk=\"sdk\" />\n\n <!-- Billing probe failed (network blip, 5xx, timeout). We deliberately\n don't fall through to chat — that was the silent fail-open bug.\n User retries; if it succeeds we route to chat or trial-gate normally. -->\n <div v-if=\"mode === 'billing-unreachable'\" class=\"flex flex-col items-center justify-center h-full p-6\">\n <div class=\"w-full max-w-xs space-y-6 text-center\">\n <p class=\"text-[15px] font-semibold text-theme-900\">\n We can't reach billing right now\n </p>\n <button\n data-test=\"billing-unreachable-retry\"\n class=\"px-6 py-2.5 rounded-full bg-theme-900 text-white text-sm font-semibold hover:bg-theme-800 transition-colors cursor-pointer\"\n @click=\"retryBillingProbe\"\n >\n Try again\n </button>\n </div>\n </div>\n\n <ElCreateAgent v-if=\"mode === 'create'\" :sdk=\"sdk\" @created=\"onAgentCreated\" />\n <ElProvisioningStatus\n v-if=\"mode === 'provisioning' && agent\"\n :sdk=\"sdk\"\n :agent-id=\"agent.agentId || ''\"\n @ready=\"onProvisionReady\"\n @error=\"onProvisionError\"\n />\n <ElAgentChat\n v-if=\"mode === 'chat' && agentInstance && chatControllerRef\"\n :chat-controller=\"chatControllerRef\"\n :agent=\"agentInstance\"\n variant=\"light\"\n class=\"size-full\"\n />\n\n <!-- Error recovery -->\n <div v-if=\"mode === 'error'\" class=\"flex flex-col items-center justify-center h-full p-6\">\n <div class=\"w-full max-w-xs space-y-6 text-center\">\n <p class=\"text-sm text-red-500\">\n {{ provisionError }}\n </p>\n <button\n class=\"px-6 py-2.5 rounded-lg bg-primary-600 text-white text-sm font-medium hover:bg-primary-500 transition-colors cursor-pointer\"\n @click=\"onRetry\"\n >\n Try again\n </button>\n </div>\n </div>\n </div>\n\n <!-- Dashboard CTA (chat mode) -->\n <div v-if=\"mode === 'chat'\" class=\"border-t border-theme-100 px-4 py-2 text-center\">\n <a\n :href=\"dashboardUrl\"\n target=\"_blank\"\n class=\"text-xs text-theme-400 hover:text-primary-600 transition-colors\"\n >\n Go to Dashboard &rarr;\n </a>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { AgentChatController } from '../../agent/AgentController'\nimport type { PageLinesSDK } from '../../sdkClient'\nimport type { AgentConfig } from '../../agent/schema'\nimport type { Agent } from '../../agent/schema'\nimport { computed, ref, shallowRef, watch } from 'vue'\nimport { getAgentAvatarUrl } from '../../agent/utils'\nimport { AgentChatController as Controller } from '../../agent/AgentController'\nimport AgentWrap from '../../agent/ui/AgentWrap.vue'\nimport ElAgentChat from '../../agent/ui/ElAgentChat.vue'\nimport { useWidgetState } from '../composables/useWidgetState'\n\nconst props = defineProps<{\n sdk?: PageLinesSDK\n handle?: string\n agent?: AgentConfig\n context?: string\n firstMessage?: string\n position?: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left'\n chatController?: AgentChatController\n}>()\n\nconst isOpen = ref(false)\nconst hasOpened = ref(false)\nconst internalController = shallowRef<AgentChatController>()\n\nconst { currentAgent, currentContext, currentFirstMessage, update } = useWidgetState(props)\n\nconst positionClasses = computed(() => {\n const map = {\n 'bottom-left': 'bottom-4 left-4 sm:bottom-6 sm:left-6',\n 'top-right': 'top-4 right-4 sm:top-6 sm:right-6',\n 'top-left': 'top-4 left-4 sm:top-6 sm:left-6',\n 'bottom-right': 'bottom-4 right-4 sm:bottom-6 sm:right-6',\n }\n return map[props.position || 'bottom-right']\n})\n\nconst transformOrigin = computed(() => {\n const map = {\n 'bottom-left': 'bottom left',\n 'top-right': 'top right',\n 'top-left': 'top left',\n 'bottom-right': 'bottom right',\n }\n return map[props.position || 'bottom-right']\n})\n\n// Anchor bubble to the transform-origin corner so it doesn't stretch during expansion\nconst bubbleAnchor = computed(() => {\n const map = {\n 'bottom-left': 'bottom-0 left-0',\n 'top-right': 'top-0 right-0',\n 'top-left': 'top-0 left-0',\n 'bottom-right': 'bottom-0 right-0',\n }\n return map[props.position || 'bottom-right']\n})\n\nfunction initController(agent: Agent, sdk: PageLinesSDK) {\n if (props.chatController || internalController.value) return\n\n internalController.value = new Controller({\n sdk,\n agent: agent.toConfig(),\n context: currentContext.value,\n firstMessage: currentFirstMessage.value,\n })\n}\n\n// Lazy connection: start conversation on first open\nwatch(isOpen, async (open) => {\n if (!open || hasOpened.value) return\n hasOpened.value = true\n const ctrl = props.chatController || internalController.value\n if (!ctrl) return\n try {\n await ctrl.startTextConversation()\n } catch (err) {\n console.error('AgentWidgetPopup: startTextConversation failed', err)\n }\n})\n\nfunction toggle() {\n isOpen.value = !isOpen.value\n}\n\nfunction open() {\n isOpen.value = true\n}\n\nfunction close() {\n isOpen.value = false\n}\n\ndefineExpose({ toggle, open, close, update })\n</script>\n\n<template>\n <AgentWrap\n v-slot=\"{ agent, sdk: resolvedSdk }\"\n :sdk=\"sdk\"\n :handle=\"handle\"\n :agent=\"currentAgent\"\n :context=\"currentContext\"\n :first-message=\"currentFirstMessage\"\n >\n <div\n v-if=\"agent\"\n :ref=\"() => initController(agent, resolvedSdk)\"\n class=\"fixed z-[999999] pointer-events-auto\"\n :class=\"positionClasses\"\n >\n <!-- Widget container: animates size/radius/shadow -->\n <div\n class=\"widget-container transform-gpu overflow-hidden\"\n :class=\"isOpen\n ? 'w-[min(400px,calc(100vw-2rem))] h-[min(600px,calc(100vh-4rem))] shadow-[0_24px_80px_-12px_rgba(0,0,0,0.2),0_8px_24px_-8px_rgba(0,0,0,0.08)]'\n : 'w-16 h-16 shadow-[0_8px_32px_-4px_rgba(0,0,0,0.15)] cursor-pointer'\"\n :style=\"{ 'border-radius': isOpen ? '16px' : '32px', 'transform-origin': transformOrigin }\"\n @click=\"!isOpen ? toggle() : undefined\"\n >\n <!-- Bubble (cross-fade: fixed 64px so it doesn't stretch during container expansion) -->\n <div\n class=\"absolute size-16 transition-opacity duration-200\"\n :class=\"[bubbleAnchor, isOpen ? 'opacity-0 pointer-events-none' : 'opacity-100']\"\n >\n <div class=\"relative size-16 rounded-full overflow-hidden\">\n <img\n :src=\"getAgentAvatarUrl(agent.toConfig())\"\n :alt=\"`${agent.name.value} agent`\"\n class=\"h-full w-full object-cover pointer-events-none\"\n width=\"64\"\n height=\"64\"\n />\n <div class=\"absolute inset-0 pointer-events-none bg-gradient-to-br from-transparent via-black/10 to-black/40 opacity-60\" />\n </div>\n </div>\n\n <!-- Panel (cross-fade: always in DOM) -->\n <div\n class=\"absolute inset-0 flex flex-col bg-white transition-opacity duration-250\"\n :class=\"isOpen ? 'opacity-100' : 'opacity-0 pointer-events-none'\"\n >\n <!-- Header -->\n <div class=\"flex items-center shrink-0 border-b border-theme-100 px-4 py-3\">\n <div class=\"flex items-center gap-3 flex-1 min-w-0\">\n <img\n :src=\"agent.avatarUrl.value\"\n :alt=\"agent.name.value\"\n class=\"size-8 rounded-full object-cover shrink-0\"\n />\n <div class=\"min-w-0\">\n <div class=\"text-sm font-medium text-theme-900 truncate\">{{ agent.displayName.value }}</div>\n <div class=\"text-[11px]\" :class=\"agent.desiredStatus.value === 'active' ? 'text-green-500' : 'text-theme-400'\">\n {{ agent.desiredStatus.value === 'active' ? 'Online' : 'Offline' }}\n </div>\n </div>\n </div>\n <button\n class=\"cursor-pointer flex items-center justify-center p-2 -mr-1 rounded-xl text-theme-400 hover:text-theme-600 hover:bg-theme-50 transition-colors\"\n @click.stop=\"close\"\n >\n <i class=\"size-5 i-tabler-x\" />\n </button>\n </div>\n\n <!-- Chat -->\n <div class=\"flex-1 overflow-hidden\">\n <ElAgentChat\n v-if=\"hasOpened\"\n :chat-controller=\"chatController || internalController\"\n :agent=\"agent\"\n variant=\"light\"\n setup-hint=\"\"\n empty-state-message=\"Send a message to get started\"\n />\n </div>\n\n <!-- Footer -->\n <div class=\"shrink-0 flex items-center justify-center border-t border-theme-100 py-1.5\">\n <a\n href=\"https://www.pagelines.com\"\n target=\"_blank\"\n rel=\"noopener\"\n class=\"text-[10px] text-theme-300 hover:text-theme-400 transition-colors\"\n >\n Learning Agent&trade; by PageLines\n </a>\n </div>\n </div>\n </div>\n\n <!-- Online indicator (outside overflow-hidden so ping isn't clipped) -->\n <div\n v-if=\"agent.desiredStatus.value === 'active'\"\n class=\"absolute top-[5%] right-[5%] transition-opacity duration-200 pointer-events-none\"\n :class=\"isOpen ? 'opacity-0' : 'opacity-100'\"\n >\n <div class=\"size-3 bg-green-500 rounded-full ring-2 ring-white absolute animate-ping\" style=\"animation-duration: 5s;\" />\n <div class=\"size-3 bg-green-500 rounded-full ring-2 ring-white\" />\n </div>\n </div>\n </AgentWrap>\n</template>\n\n<style scoped>\n.widget-container {\n transition: width 0.4s cubic-bezier(0.32, 0.72, 0, 1),\n height 0.4s cubic-bezier(0.32, 0.72, 0, 1),\n border-radius 0.4s cubic-bezier(0.32, 0.72, 0, 1),\n box-shadow 0.4s cubic-bezier(0.32, 0.72, 0, 1);\n}\n</style>\n","<script setup lang=\"ts\">\nimport type { AgentChatController } from '../../agent/AgentController'\nimport type { PageLinesSDK } from '../../sdkClient'\nimport type { AgentConfig } from '../../agent/schema'\nimport type { Agent } from '../../agent/schema'\nimport { computed, ref, shallowRef, watch } from 'vue'\nimport { getAgentAvatarUrl } from '../../agent/utils'\nimport { AgentChatController as Controller } from '../../agent/AgentController'\nimport AgentWrap from '../../agent/ui/AgentWrap.vue'\nimport ElAgentChat from '../../agent/ui/ElAgentChat.vue'\nimport { useWidgetState } from '../composables/useWidgetState'\n\nconst props = defineProps<{\n sdk?: PageLinesSDK\n handle?: string\n agent?: AgentConfig\n context?: string\n firstMessage?: string\n position?: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left'\n chatController?: AgentChatController\n}>()\n\nconst isOpen = ref(false)\nconst hasOpened = ref(false)\nconst internalController = shallowRef<AgentChatController>()\n\nconst { currentAgent, currentContext, currentFirstMessage, update } = useWidgetState(props)\n\nconst positionClasses = computed(() => {\n const map = {\n 'bottom-left': 'bottom-4 left-4 sm:bottom-6 sm:left-6',\n 'top-right': 'top-4 right-4 sm:top-6 sm:right-6',\n 'top-left': 'top-4 left-4 sm:top-6 sm:left-6',\n 'bottom-right': 'bottom-4 right-4 sm:bottom-6 sm:right-6',\n }\n return map[props.position || 'bottom-right']\n})\n\nconst transformOrigin = computed(() => {\n const map = {\n 'bottom-left': 'bottom left',\n 'top-right': 'top right',\n 'top-left': 'top left',\n 'bottom-right': 'bottom right',\n }\n return map[props.position || 'bottom-right']\n})\n\n// Anchor bubble to the transform-origin corner so it doesn't stretch during expansion\nconst bubbleAnchor = computed(() => {\n const map = {\n 'bottom-left': 'bottom-0 left-0',\n 'top-right': 'top-0 right-0',\n 'top-left': 'top-0 left-0',\n 'bottom-right': 'bottom-0 right-0',\n }\n return map[props.position || 'bottom-right']\n})\n\nfunction initController(agent: Agent, sdk: PageLinesSDK) {\n if (props.chatController || internalController.value) return\n\n internalController.value = new Controller({\n sdk,\n agent: agent.toConfig(),\n context: currentContext.value,\n firstMessage: currentFirstMessage.value,\n })\n}\n\n// Lazy connection: start conversation on first open\nwatch(isOpen, async (open) => {\n if (!open || hasOpened.value) return\n hasOpened.value = true\n const ctrl = props.chatController || internalController.value\n if (!ctrl) return\n try {\n await ctrl.startTextConversation()\n } catch (err) {\n console.error('AgentWidgetPopup: startTextConversation failed', err)\n }\n})\n\nfunction toggle() {\n isOpen.value = !isOpen.value\n}\n\nfunction open() {\n isOpen.value = true\n}\n\nfunction close() {\n isOpen.value = false\n}\n\ndefineExpose({ toggle, open, close, update })\n</script>\n\n<template>\n <AgentWrap\n v-slot=\"{ agent, sdk: resolvedSdk }\"\n :sdk=\"sdk\"\n :handle=\"handle\"\n :agent=\"currentAgent\"\n :context=\"currentContext\"\n :first-message=\"currentFirstMessage\"\n >\n <div\n v-if=\"agent\"\n :ref=\"() => initController(agent, resolvedSdk)\"\n class=\"fixed z-[999999] pointer-events-auto\"\n :class=\"positionClasses\"\n >\n <!-- Widget container: animates size/radius/shadow -->\n <div\n class=\"widget-container transform-gpu overflow-hidden\"\n :class=\"isOpen\n ? 'w-[min(400px,calc(100vw-2rem))] h-[min(600px,calc(100vh-4rem))] shadow-[0_24px_80px_-12px_rgba(0,0,0,0.2),0_8px_24px_-8px_rgba(0,0,0,0.08)]'\n : 'w-16 h-16 shadow-[0_8px_32px_-4px_rgba(0,0,0,0.15)] cursor-pointer'\"\n :style=\"{ 'border-radius': isOpen ? '16px' : '32px', 'transform-origin': transformOrigin }\"\n @click=\"!isOpen ? toggle() : undefined\"\n >\n <!-- Bubble (cross-fade: fixed 64px so it doesn't stretch during container expansion) -->\n <div\n class=\"absolute size-16 transition-opacity duration-200\"\n :class=\"[bubbleAnchor, isOpen ? 'opacity-0 pointer-events-none' : 'opacity-100']\"\n >\n <div class=\"relative size-16 rounded-full overflow-hidden\">\n <img\n :src=\"getAgentAvatarUrl(agent.toConfig())\"\n :alt=\"`${agent.name.value} agent`\"\n class=\"h-full w-full object-cover pointer-events-none\"\n width=\"64\"\n height=\"64\"\n />\n <div class=\"absolute inset-0 pointer-events-none bg-gradient-to-br from-transparent via-black/10 to-black/40 opacity-60\" />\n </div>\n </div>\n\n <!-- Panel (cross-fade: always in DOM) -->\n <div\n class=\"absolute inset-0 flex flex-col bg-white transition-opacity duration-250\"\n :class=\"isOpen ? 'opacity-100' : 'opacity-0 pointer-events-none'\"\n >\n <!-- Header -->\n <div class=\"flex items-center shrink-0 border-b border-theme-100 px-4 py-3\">\n <div class=\"flex items-center gap-3 flex-1 min-w-0\">\n <img\n :src=\"agent.avatarUrl.value\"\n :alt=\"agent.name.value\"\n class=\"size-8 rounded-full object-cover shrink-0\"\n />\n <div class=\"min-w-0\">\n <div class=\"text-sm font-medium text-theme-900 truncate\">{{ agent.displayName.value }}</div>\n <div class=\"text-[11px]\" :class=\"agent.desiredStatus.value === 'active' ? 'text-green-500' : 'text-theme-400'\">\n {{ agent.desiredStatus.value === 'active' ? 'Online' : 'Offline' }}\n </div>\n </div>\n </div>\n <button\n class=\"cursor-pointer flex items-center justify-center p-2 -mr-1 rounded-xl text-theme-400 hover:text-theme-600 hover:bg-theme-50 transition-colors\"\n @click.stop=\"close\"\n >\n <i class=\"size-5 i-tabler-x\" />\n </button>\n </div>\n\n <!-- Chat -->\n <div class=\"flex-1 overflow-hidden\">\n <ElAgentChat\n v-if=\"hasOpened\"\n :chat-controller=\"chatController || internalController\"\n :agent=\"agent\"\n variant=\"light\"\n setup-hint=\"\"\n empty-state-message=\"Send a message to get started\"\n />\n </div>\n\n <!-- Footer -->\n <div class=\"shrink-0 flex items-center justify-center border-t border-theme-100 py-1.5\">\n <a\n href=\"https://www.pagelines.com\"\n target=\"_blank\"\n rel=\"noopener\"\n class=\"text-[10px] text-theme-300 hover:text-theme-400 transition-colors\"\n >\n Learning Agent&trade; by PageLines\n </a>\n </div>\n </div>\n </div>\n\n <!-- Online indicator (outside overflow-hidden so ping isn't clipped) -->\n <div\n v-if=\"agent.desiredStatus.value === 'active'\"\n class=\"absolute top-[5%] right-[5%] transition-opacity duration-200 pointer-events-none\"\n :class=\"isOpen ? 'opacity-0' : 'opacity-100'\"\n >\n <div class=\"size-3 bg-green-500 rounded-full ring-2 ring-white absolute animate-ping\" style=\"animation-duration: 5s;\" />\n <div class=\"size-3 bg-green-500 rounded-full ring-2 ring-white\" />\n </div>\n </div>\n </AgentWrap>\n</template>\n\n<style scoped>\n.widget-container {\n transition: width 0.4s cubic-bezier(0.32, 0.72, 0, 1),\n height 0.4s cubic-bezier(0.32, 0.72, 0, 1),\n border-radius 0.4s cubic-bezier(0.32, 0.72, 0, 1),\n box-shadow 0.4s cubic-bezier(0.32, 0.72, 0, 1);\n}\n</style>\n","import type { AgentConfig } from '@pagelines/core'\nimport type { App, ComponentPublicInstance } from 'vue'\nimport type { AgentChatController } from '../agent/AgentController'\nimport { createLogger } from '@pagelines/core'\nimport { createApp } from 'vue'\nimport sdkCSS from '../agent/ui/styles.css?inline'\nimport { PageLinesSDK } from '../sdkClient'\nimport AgentWidgetOnboard from './ui/AgentWidgetOnboard.vue'\nimport AgentWidgetPopup from './ui/AgentWidgetPopup.vue'\n\nexport type WidgetMode = 'inline' | 'button' | 'popup' | 'modal' | 'onboard'\nexport type ButtonIconPreset = 'phone' | 'calendar' | 'question' | 'message' | 'sparkles'\n\nexport interface WidgetConfig {\n el?: HTMLElement // Optional for modal/button modes (creates and appends to body for modal)\n mode: WidgetMode\n handle?: string\n agent?: AgentConfig\n context?: string\n firstMessage?: string\n buttonText?: string // Custom button text with template vars: {name}, {title}, {handle}, {orgName}\n buttonIcon?: ButtonIconPreset // Icon preset: phone | calendar | question | message | sparkles\n position?: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left' // Popup mode only\n chatOnly?: boolean // Skip full agent interface, show chat directly (for embedded chatbots)\n chatController?: AgentChatController // Optional external chat controller\n apiBase?: string\n onClose?: () => void // Callback when widget is closed (modal/popup/button modes)\n}\n\nexport interface WidgetUpdate {\n agent?: AgentConfig\n context?: string\n firstMessage?: string\n buttonText?: string\n buttonIcon?: ButtonIconPreset\n}\n\ntype WidgetInstance = {\n toggle?: () => void\n open?: () => void\n close?: () => void\n update?: (config: WidgetUpdate) => void\n} & ComponentPublicInstance\n\nconst logger = createLogger('PLWidget')\n\nexport class PLWidget {\n private app: App | null = null\n private shadowRoot: ShadowRoot | null = null\n private widgetInstance: WidgetInstance | null = null\n private config: WidgetConfig\n private sdk: PageLinesSDK\n private container: HTMLElement | null = null\n private static modalInstances = new Map<string, PLWidget>()\n\n static create(config: WidgetConfig): PLWidget {\n return new PLWidget(config)\n }\n\n /**\n * Auto-collect page context from the current document.\n * Returns a concise summary string the agent can use to understand\n * where the visitor is on the site.\n */\n static collectPageContext(): string {\n if (typeof window === 'undefined' || typeof document === 'undefined')\n return ''\n\n const parts: string[] = []\n\n const url = window.location.href\n if (url)\n parts.push(`Page URL: ${url}`)\n\n const title = document.title\n if (title)\n parts.push(`Page title: ${title}`)\n\n const metaDesc = document.querySelector('meta[name=\"description\"]')?.getAttribute('content')\n if (metaDesc)\n parts.push(`Page description: ${metaDesc}`)\n\n const ogTitle = document.querySelector('meta[property=\"og:title\"]')?.getAttribute('content')\n if (ogTitle && ogTitle !== title)\n parts.push(`OG title: ${ogTitle}`)\n\n const referrer = document.referrer\n if (referrer)\n parts.push(`Referrer: ${referrer}`)\n\n const path = window.location.pathname\n if (path && path !== '/')\n parts.push(`Path: ${path}`)\n\n return parts.join('\\n')\n }\n\n constructor(config: WidgetConfig) {\n // Auto-collect page context and merge with any manual context\n const autoContext = PLWidget.collectPageContext()\n const manualContext = config.context || ''\n const mergedContext = [autoContext, manualContext].filter(Boolean).join('\\n\\n')\n\n this.config = {\n ...config,\n context: mergedContext || undefined,\n }\n\n // Validate required config\n if (!config.mode)\n throw new Error('PLWidget: mode is required')\n if (!config.handle && !config.agent && config.mode !== 'onboard')\n throw new Error('PLWidget: either handle or agent is required')\n\n // For non-modal/button/onboard modes, el is required\n if (config.mode !== 'modal' && config.mode !== 'button' && config.mode !== 'onboard' && !config.el)\n throw new Error(`PLWidget: el (HTMLElement) is required for ${config.mode} mode`)\n\n // For modal/onboard mode, handle singleton pattern\n if (config.mode === 'modal' || config.mode === 'onboard') {\n const instanceKey = config.handle || config.agent?.agentId || 'default'\n const existing = PLWidget.modalInstances.get(instanceKey)\n if (existing) {\n logger.warn(`Destroying existing modal widget for: ${instanceKey}`)\n existing.destroy()\n }\n PLWidget.modalInstances.set(instanceKey, this)\n }\n\n // Create SDK instance (singleton)\n const isDev = typeof window !== 'undefined'\n ? window.location.hostname === 'localhost' || window.location.hostname.includes('127.0.0.1')\n : false\n\n this.sdk = PageLinesSDK.getInstance({\n isDev,\n ...(config.apiBase && { apiBase: config.apiBase }),\n })\n\n logger.info(`Initializing ${config.mode} mode for @${config.handle || config.agent?.handle} (isDev: ${isDev})`)\n\n this.init().catch((error) => {\n logger.error('PLWidget init failed', { error })\n })\n }\n\n private async init() {\n // Button mode doesn't need shadow DOM - just set up click handler\n if (this.config.mode === 'button') {\n await this.mountMode(this.config.el!)\n return\n }\n\n // For modal/onboard mode, create container and append to body\n if (this.config.mode === 'modal' || this.config.mode === 'onboard') {\n this.container = document.createElement('div')\n this.container.id = `pagelines-modal-${this.config.handle || this.config.agent?.agentId || 'widget'}`\n // Position container to cover viewport for proper modal centering\n this.container.style.cssText = 'position: fixed; inset: 0; z-index: 9999;'\n document.body.appendChild(this.container)\n\n // Create shadow root in modal container\n this.shadowRoot = this.container.attachShadow({ mode: 'open' })\n } else {\n // For other modes, use provided element\n this.shadowRoot = this.config.el!.attachShadow({ mode: 'open' })\n }\n\n // Inject SDK CSS into shadow DOM\n const styleElement = document.createElement('style')\n styleElement.textContent = sdkCSS\n this.shadowRoot.appendChild(styleElement)\n\n // Create mount point\n const mountPoint = document.createElement('div')\n mountPoint.id = 'pagelines-widget-root'\n mountPoint.style.cssText = 'width: 100%; height: 100%;'\n this.shadowRoot.appendChild(mountPoint)\n\n // Import and mount mode-specific component\n await this.mountMode(mountPoint)\n }\n\n private async mountMode(mountPoint: HTMLElement) {\n const { mode } = this.config\n\n if (mode === 'inline') {\n const { default: AgentWidgetInline } = await import('./ui/AgentWidgetInline.vue')\n\n this.app = createApp(AgentWidgetInline, {\n sdk: this.sdk,\n handle: this.config.handle,\n agent: this.config.agent,\n context: this.config.context,\n firstMessage: this.config.firstMessage,\n buttonText: this.config.buttonText,\n buttonIcon: this.config.buttonIcon,\n chatOnly: this.config.chatOnly,\n })\n\n this.widgetInstance = this.app.mount(mountPoint) as WidgetInstance\n } else if (mode === 'button') {\n // Button mode - element is the button itself, no Vue component\n // Just set up click handler to open modal\n if (!this.config.el)\n throw new Error('PLWidget: el is required for button mode')\n\n const buttonEl = this.config.el\n buttonEl.style.cursor = 'pointer'\n\n const handleClick = () => {\n // Create modal widget on click\n PLWidget.create({\n mode: 'modal',\n handle: this.config.handle,\n agent: this.config.agent,\n context: this.config.context,\n firstMessage: this.config.firstMessage,\n buttonText: this.config.buttonText,\n buttonIcon: this.config.buttonIcon,\n chatOnly: this.config.chatOnly,\n onClose: this.config.onClose,\n })\n }\n\n buttonEl.addEventListener('click', handleClick)\n\n // Store cleanup function\n this.destroy = () => {\n buttonEl.removeEventListener('click', handleClick)\n logger.info(`Button mode widget destroyed for handle: ${this.config.handle}`)\n }\n } else if (mode === 'popup') {\n this.app = createApp(AgentWidgetPopup, {\n sdk: this.sdk,\n handle: this.config.handle,\n agent: this.config.agent,\n context: this.config.context,\n firstMessage: this.config.firstMessage,\n buttonText: this.config.buttonText,\n buttonIcon: this.config.buttonIcon,\n position: this.config.position || 'bottom-right',\n chatOnly: this.config.chatOnly,\n chatController: this.config.chatController,\n })\n\n this.widgetInstance = this.app.mount(mountPoint) as WidgetInstance\n } else if (mode === 'modal') {\n const { default: AgentWidgetModal } = await import('./ui/AgentWidgetModal.vue')\n\n this.app = createApp(AgentWidgetModal, {\n sdk: this.sdk,\n handle: this.config.handle,\n agent: this.config.agent,\n context: this.config.context,\n firstMessage: this.config.firstMessage,\n buttonText: this.config.buttonText,\n buttonIcon: this.config.buttonIcon,\n chatOnly: this.config.chatOnly,\n onClose: () => {\n // Call user's onClose callback if provided\n if (this.config.onClose) {\n this.config.onClose()\n }\n // Auto-destroy modal when closed\n this.destroy()\n },\n })\n\n this.widgetInstance = this.app.mount(mountPoint) as WidgetInstance\n } else if (mode === 'onboard') {\n this.app = createApp(AgentWidgetOnboard, {\n sdk: this.sdk,\n onClose: () => {\n if (this.config.onClose) {\n this.config.onClose()\n }\n this.destroy()\n },\n })\n\n this.widgetInstance = this.app.mount(mountPoint) as WidgetInstance\n } else {\n throw new Error('PLWidget: unsupported mode')\n }\n }\n\n /**\n * Update widget with new configuration without re-mounting\n */\n update(updates: WidgetUpdate) {\n if (this.widgetInstance?.update) {\n this.widgetInstance.update(updates)\n logger.info(`Widget updated: ${Object.keys(updates).join(', ')}`)\n } else {\n logger.warn('Widget instance does not support update()')\n }\n }\n\n /**\n * Toggle widget visibility (popup mode only)\n */\n toggle() {\n if (this.widgetInstance?.toggle) {\n this.widgetInstance.toggle()\n } else {\n logger.warn('Widget mode does not support toggle()')\n }\n }\n\n /**\n * Open widget (popup mode only)\n */\n open() {\n if (this.widgetInstance?.open) {\n this.widgetInstance.open()\n } else {\n logger.warn('Widget mode does not support open()')\n }\n }\n\n /**\n * Close widget (popup mode only)\n */\n close() {\n if (this.widgetInstance?.close) {\n this.widgetInstance.close()\n } else {\n logger.warn('Widget mode does not support close()')\n }\n }\n\n /**\n * Destroy widget and cleanup\n */\n destroy() {\n if (this.app) {\n this.app.unmount()\n this.app = null\n }\n\n if (this.shadowRoot) {\n this.shadowRoot.innerHTML = ''\n this.shadowRoot = null\n }\n\n // For modal/onboard mode, remove container from body and remove from singleton map\n if (this.config.mode === 'modal' || this.config.mode === 'onboard') {\n if (this.container) {\n this.container.remove()\n this.container = null\n }\n\n const instanceKey = this.config.handle || this.config.agent?.agentId || 'default'\n PLWidget.modalInstances.delete(instanceKey)\n }\n\n this.widgetInstance = null\n\n logger.info(`Widget destroyed for handle: ${this.config.handle || this.config.agent?.handle}`)\n }\n}\n","import type { MaybeRef } from 'vue'\nimport type { AgentConfig } from '@pagelines/core'\nimport type { WidgetConfig, WidgetUpdate } from '../PLWidget'\nimport { computed, onUnmounted, ref, unref, watch } from 'vue'\nimport { PLWidget } from '../PLWidget'\n\nexport interface UsePLWidgetConfig {\n mode: WidgetConfig['mode']\n handle?: MaybeRef<string | undefined>\n agent?: MaybeRef<AgentConfig | null | undefined>\n context?: MaybeRef<string | undefined>\n firstMessage?: MaybeRef<string | undefined>\n apiBase?: string\n onClose?: () => void\n}\n\n/**\n * Composable for managing PLWidget lifecycle with automatic initialization,\n * reactive updates, and cleanup.\n *\n * Benefits:\n * - Eliminates manual DOM timing coordination (watch + nextTick)\n * - Automatic cleanup on unmount\n * - Reactive prop updates via widget.update()\n * - Prevents double initialization\n * - Clear loading/error states\n *\n * @example\n * ```vue\n * <script setup>\n * const agentRef = ref<Agent | null>(null)\n * const { containerRef, loading, error } = usePLWidget({\n * mode: 'inline',\n * agent: agentRef,\n * context: 'welcome'\n * })\n * </script>\n *\n * <template>\n * <div ref=\"containerRef\" class=\"w-full h-full\" />\n * </template>\n * ```\n */\nexport function usePLWidget(config: UsePLWidgetConfig) {\n const containerRef = ref<HTMLElement | null>(null)\n const widget = ref<InstanceType<typeof PLWidget> | null>(null)\n const loading = ref(true)\n const error = ref<string | null>(null)\n\n // Track if widget has been initialized to prevent double-init\n const initialized = ref(false)\n\n // Computed values for reactive tracking\n const currentHandle = computed(() => unref(config.handle))\n const currentAgent = computed(() => unref(config.agent))\n const currentContext = computed(() => unref(config.context))\n const currentFirstMessage = computed(() => unref(config.firstMessage))\n\n // Check if we have required data for initialization\n const hasRequiredData = computed(() => {\n if (config.mode === 'modal') {\n // Modal doesn't need container\n return !!(currentHandle.value || currentAgent.value)\n }\n // Inline/popup need container + (handle or agent)\n return !!(containerRef.value && (currentHandle.value || currentAgent.value))\n })\n\n // Initialize widget when container and data are ready\n watch([containerRef, currentAgent, currentHandle], async () => {\n // Skip if already initialized or missing required data\n if (initialized.value || !hasRequiredData.value) {\n return\n }\n\n loading.value = true\n error.value = null\n\n try {\n // Wait for next tick to ensure DOM is fully rendered\n await new Promise(resolve => setTimeout(resolve, 0))\n\n const widgetConfig: WidgetConfig = {\n mode: config.mode,\n handle: currentHandle.value,\n agent: currentAgent.value || undefined,\n context: currentContext.value,\n firstMessage: currentFirstMessage.value,\n apiBase: config.apiBase,\n onClose: config.onClose,\n }\n\n // Add container element for non-modal modes\n if (config.mode !== 'modal') {\n widgetConfig.el = containerRef.value!\n }\n\n widget.value = new PLWidget(widgetConfig)\n initialized.value = true\n } catch (err) {\n error.value = err instanceof Error ? err.message : 'Failed to initialize widget'\n console.error('[usePLWidget] Initialization error:', err)\n } finally {\n loading.value = false\n }\n }, { immediate: true })\n\n // Watch for prop changes and update widget reactively\n watch([currentAgent, currentContext, currentFirstMessage], () => {\n if (!widget.value || !initialized.value) {\n return\n }\n\n const updates: WidgetUpdate = {}\n if (currentAgent.value !== undefined) {\n updates.agent = currentAgent.value || undefined\n }\n if (currentContext.value !== undefined) {\n updates.context = currentContext.value\n }\n if (currentFirstMessage.value !== undefined) {\n updates.firstMessage = currentFirstMessage.value\n }\n\n if (Object.keys(updates).length > 0) {\n widget.value.update(updates)\n }\n })\n\n // Cleanup on unmount\n onUnmounted(() => {\n if (widget.value) {\n widget.value.destroy()\n widget.value = null\n }\n initialized.value = false\n })\n\n return {\n containerRef,\n widget,\n loading,\n error,\n }\n}\n"],"x_google_ignoreList":[1],"mappings":"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"}