best-email-builder 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/README.md +41 -4
  3. package/dist/ai-server.js +114 -1
  4. package/dist/ai-server.js.map +1 -1
  5. package/dist/ai.js +504 -169
  6. package/dist/ai.js.map +1 -1
  7. package/dist/builder.js +4 -4
  8. package/dist/{chunk-5W4TUUPD.js → chunk-3RPWH5PC.js} +3 -3
  9. package/dist/{chunk-QPAZLCPO.js → chunk-C6WHIBGH.js} +2 -2
  10. package/dist/{chunk-QPAZLCPO.js.map → chunk-C6WHIBGH.js.map} +1 -1
  11. package/dist/{chunk-NZIQF7IW.js → chunk-CTZ56YJG.js} +192 -23
  12. package/dist/chunk-CTZ56YJG.js.map +1 -0
  13. package/dist/{chunk-NC2YDZSP.js → chunk-QH5OI43L.js} +4 -4
  14. package/dist/{chunk-JU3OUO6X.js → chunk-QRUMXCGW.js} +2 -2
  15. package/dist/{chunk-XEFBPP5Y.js → chunk-UMVBT7NW.js} +3 -3
  16. package/dist/index.js +5 -5
  17. package/dist/library.js +4 -4
  18. package/dist/server.js +4 -4
  19. package/dist/server.js.map +1 -1
  20. package/dist/styles.css +1 -1
  21. package/dist/types/ai/ConnectAi.d.ts +2 -1
  22. package/dist/types/ai/ModelPicker.d.ts +34 -0
  23. package/dist/types/ai/agent.d.ts +31 -0
  24. package/dist/types/ai/agentEndpoint.d.ts +69 -0
  25. package/dist/types/ai/claude.d.ts +2 -1
  26. package/dist/types/ai/draft.d.ts +10 -4
  27. package/dist/types/ai/generator.d.ts +10 -4
  28. package/dist/types/ai/index.d.ts +2 -1
  29. package/dist/types/ai/keys.d.ts +14 -1
  30. package/dist/types/ai/providers.d.ts +48 -5
  31. package/dist/types/ai/rewrite.d.ts +2 -1
  32. package/dist/types/ai/server.d.ts +3 -1
  33. package/dist/types/ai/subjects.d.ts +2 -1
  34. package/dist/types/core/constants.d.ts +1 -1
  35. package/dist/types/engine/NativeAdapter.d.ts +1 -1
  36. package/dist/types/server/handler.d.ts +3 -0
  37. package/package.json +1 -1
  38. package/dist/chunk-NZIQF7IW.js.map +0 -1
  39. /package/dist/{chunk-5W4TUUPD.js.map → chunk-3RPWH5PC.js.map} +0 -0
  40. /package/dist/{chunk-NC2YDZSP.js.map → chunk-QH5OI43L.js.map} +0 -0
  41. /package/dist/{chunk-JU3OUO6X.js.map → chunk-QRUMXCGW.js.map} +0 -0
  42. /package/dist/{chunk-XEFBPP5Y.js.map → chunk-UMVBT7NW.js.map} +0 -0
package/dist/styles.css CHANGED
@@ -1,2 +1,2 @@
1
1
  /*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
2
- @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-pan-x:initial;--tw-pan-y:initial;--tw-pinch-zoom:initial;--tw-space-y-reverse:0;--tw-divide-x-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-outline-style:solid;--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-blur:0;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-blur:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0}}}@layer theme{:root,:host{--eb-font-sans:var(--eb-font-sans);--eb-font-mono:var(--eb-font-mono);--eb-color-black:#000;--eb-color-white:#fff;--eb-spacing:.25rem;--eb-container-sm:24rem;--eb-container-md:28rem;--eb-container-lg:32rem;--eb-container-xl:36rem;--eb-container-2xl:42rem;--eb-container-4xl:56rem;--eb-text-xs:.75rem;--eb-text-xs--line-height:calc(1 / .75);--eb-text-sm:.875rem;--eb-text-sm--line-height:calc(1.25 / .875);--eb-text-base:1rem;--eb-text-base--line-height:calc(1.5 / 1);--eb-text-lg:1.125rem;--eb-text-lg--line-height:calc(1.75 / 1.125);--eb-font-weight-normal:400;--eb-font-weight-medium:500;--eb-font-weight-semibold:600;--eb-font-weight-bold:700;--eb-leading-tight:1.25;--eb-leading-snug:1.375;--eb-leading-relaxed:1.625;--eb-radius-xs:.125rem;--eb-ease-in-out:cubic-bezier(.4, 0, .2, 1);--eb-animate-spin:spin 1s linear infinite;--eb-animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--eb-default-transition-duration:.15s;--eb-default-transition-timing-function:cubic-bezier(.4, 0, .2, 1)}}@layer base{:where(.eb-root,.eb-scope),:where(.eb-root,.eb-scope) *,:where(.eb-root,.eb-scope) :before,:where(.eb-root,.eb-scope) :after{box-sizing:border-box;border:0 solid var(--eb-border);margin:0;padding:0}:where(.eb-root,.eb-scope){font-family:var(--eb-font-sans);-webkit-font-smoothing:antialiased;line-height:1.5}:where(.eb-root,.eb-scope) :where(button,input,select,textarea){font:inherit;color:inherit;letter-spacing:inherit;background-color:#0000}:where(.eb-root,.eb-scope) :where(button,[role=button]){cursor:pointer}:where(.eb-root,.eb-scope) :where(button:disabled){cursor:default}:where(.eb-root,.eb-scope) :where(h1,h2,h3,h4,h5,h6){font-size:inherit;font-weight:inherit}:where(.eb-root,.eb-scope) :where(ol,ul){list-style:none}:where(.eb-root,.eb-scope) :where(img,svg,video,canvas,iframe){vertical-align:middle;display:block}:where(.eb-root,.eb-scope) :where(){opacity:1}:where(.eb-root,.eb-scope) :where(code,kbd,pre){font-family:var(--eb-font-mono)}}@layer components;@layer utilities{.eb\:pointer-events-auto{pointer-events:auto}.eb\:pointer-events-none{pointer-events:none}.eb\:invisible{visibility:hidden}.eb\:sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.eb\:absolute{position:absolute}.eb\:fixed{position:fixed}.eb\:relative{position:relative}.eb\:sticky{position:sticky}.eb\:inset-0{inset:0}.eb\:inset-y-0{inset-block:0}.eb\:top-0{top:0}.eb\:top-1\/2{top:50%}.eb\:top-4{top:calc(var(--eb-spacing) * 4)}.eb\:top-\[50\%\]{top:50%}.eb\:right-0{right:0}.eb\:right-1{right:var(--eb-spacing)}.eb\:right-2{right:calc(var(--eb-spacing) * 2)}.eb\:right-3{right:calc(var(--eb-spacing) * 3)}.eb\:right-4{right:calc(var(--eb-spacing) * 4)}.eb\:bottom-3{bottom:calc(var(--eb-spacing) * 3)}.eb\:left-0{left:0}.eb\:left-1\/2{left:50%}.eb\:left-2\.5{left:calc(var(--eb-spacing) * 2.5)}.eb\:left-4{left:calc(var(--eb-spacing) * 4)}.eb\:left-\[50\%\]{left:50%}.eb\:z-10{z-index:10}.eb\:z-20{z-index:20}.eb\:z-40{z-index:40}.eb\:z-50{z-index:50}.eb\:m-0{margin:0}.eb\:m-auto{margin:auto}.eb\:-mx-1{margin-inline:calc(var(--eb-spacing) * -1)}.eb\:mx-auto{margin-inline:auto}.eb\:my-1{margin-block:var(--eb-spacing)}.eb\:mt-0\.5{margin-top:calc(var(--eb-spacing) * .5)}.eb\:mt-1{margin-top:var(--eb-spacing)}.eb\:mt-2{margin-top:calc(var(--eb-spacing) * 2)}.eb\:mt-px{margin-top:1px}.eb\:mr-1{margin-right:var(--eb-spacing)}.eb\:mr-auto{margin-right:auto}.eb\:mb-1\.5{margin-bottom:calc(var(--eb-spacing) * 1.5)}.eb\:mb-2{margin-bottom:calc(var(--eb-spacing) * 2)}.eb\:mb-5{margin-bottom:calc(var(--eb-spacing) * 5)}.eb\:ml-1\.5{margin-left:calc(var(--eb-spacing) * 1.5)}.eb\:ml-auto{margin-left:auto}.eb\:block{display:block}.eb\:flex{display:flex}.eb\:grid{display:grid}.eb\:hidden{display:none}.eb\:inline-flex{display:inline-flex}.eb\:field-sizing-content{field-sizing:content}.eb\:size-1\.5{width:calc(var(--eb-spacing) * 1.5);height:calc(var(--eb-spacing) * 1.5)}.eb\:size-2\.5{width:calc(var(--eb-spacing) * 2.5);height:calc(var(--eb-spacing) * 2.5)}.eb\:size-3{width:calc(var(--eb-spacing) * 3);height:calc(var(--eb-spacing) * 3)}.eb\:size-3\.5{width:calc(var(--eb-spacing) * 3.5);height:calc(var(--eb-spacing) * 3.5)}.eb\:size-4{width:calc(var(--eb-spacing) * 4);height:calc(var(--eb-spacing) * 4)}.eb\:size-5{width:calc(var(--eb-spacing) * 5);height:calc(var(--eb-spacing) * 5)}.eb\:size-6{width:calc(var(--eb-spacing) * 6);height:calc(var(--eb-spacing) * 6)}.eb\:size-7{width:calc(var(--eb-spacing) * 7);height:calc(var(--eb-spacing) * 7)}.eb\:size-8{width:calc(var(--eb-spacing) * 8);height:calc(var(--eb-spacing) * 8)}.eb\:size-10{width:calc(var(--eb-spacing) * 10);height:calc(var(--eb-spacing) * 10)}.eb\:size-12{width:calc(var(--eb-spacing) * 12);height:calc(var(--eb-spacing) * 12)}.eb\:h-3\.5{height:calc(var(--eb-spacing) * 3.5)}.eb\:h-5{height:calc(var(--eb-spacing) * 5)}.eb\:h-6{height:calc(var(--eb-spacing) * 6)}.eb\:h-7{height:calc(var(--eb-spacing) * 7)}.eb\:h-8{height:calc(var(--eb-spacing) * 8)}.eb\:h-9{height:calc(var(--eb-spacing) * 9)}.eb\:h-10{height:calc(var(--eb-spacing) * 10)}.eb\:h-11{height:calc(var(--eb-spacing) * 11)}.eb\:h-12{height:calc(var(--eb-spacing) * 12)}.eb\:h-20{height:calc(var(--eb-spacing) * 20)}.eb\:h-\[85vh\]{height:85vh}.eb\:h-\[220px\]{height:220px}.eb\:h-\[560px\]{height:560px}.eb\:h-\[calc\(100\%-1px\)\]{height:calc(100% - 1px)}.eb\:h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.eb\:h-auto{height:auto}.eb\:h-full{height:100%}.eb\:h-px{height:1px}.eb\:max-h-\(--radix-dropdown-menu-content-available-height\){max-height:var(--radix-dropdown-menu-content-available-height)}.eb\:max-h-\(--radix-select-content-available-height\){max-height:var(--radix-select-content-available-height)}.eb\:max-h-10{max-height:calc(var(--eb-spacing) * 10)}.eb\:max-h-\[85vh\]{max-height:85vh}.eb\:max-h-\[320px\]{max-height:320px}.eb\:max-h-\[calc\(100dvh-2rem\)\]{max-height:calc(100dvh - 2rem)}.eb\:max-h-\[min\(440px\,70vh\)\]{max-height:min(440px,70vh)}.eb\:min-h-0{min-height:0}.eb\:min-h-4{min-height:calc(var(--eb-spacing) * 4)}.eb\:min-h-14{min-height:calc(var(--eb-spacing) * 14)}.eb\:min-h-16{min-height:calc(var(--eb-spacing) * 16)}.eb\:min-h-40{min-height:calc(var(--eb-spacing) * 40)}.eb\:w-3\.5{width:calc(var(--eb-spacing) * 3.5)}.eb\:w-5{width:calc(var(--eb-spacing) * 5)}.eb\:w-7{width:calc(var(--eb-spacing) * 7)}.eb\:w-24{width:calc(var(--eb-spacing) * 24)}.eb\:w-32{width:calc(var(--eb-spacing) * 32)}.eb\:w-36{width:calc(var(--eb-spacing) * 36)}.eb\:w-40{width:calc(var(--eb-spacing) * 40)}.eb\:w-64{width:calc(var(--eb-spacing) * 64)}.eb\:w-72{width:calc(var(--eb-spacing) * 72)}.eb\:w-80{width:calc(var(--eb-spacing) * 80)}.eb\:w-\[44px\]{width:44px}.eb\:w-\[min\(340px\,88\%\)\]{width:min(340px,88%)}.eb\:w-fit{width:fit-content}.eb\:w-full{width:100%}.eb\:max-w-20{max-width:calc(var(--eb-spacing) * 20)}.eb\:max-w-\[320px\]{max-width:320px}.eb\:max-w-\[calc\(100\%-1\.5rem\)\]{max-width:calc(100% - 1.5rem)}.eb\:max-w-\[calc\(100\%-2rem\)\]{max-width:calc(100% - 2rem)}.eb\:max-w-full{max-width:100%}.eb\:max-w-sm{max-width:var(--eb-container-sm)}.eb\:min-w-0{min-width:0}.eb\:min-w-\[8rem\]{min-width:8rem}.eb\:min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.eb\:flex-1{flex:1}.eb\:shrink-0{flex-shrink:0}.eb\:origin-\(--radix-dropdown-menu-content-transform-origin\){transform-origin:var(--radix-dropdown-menu-content-transform-origin)}.eb\:origin-\(--radix-popover-content-transform-origin\){transform-origin:var(--radix-popover-content-transform-origin)}.eb\:origin-\(--radix-select-content-transform-origin\){transform-origin:var(--radix-select-content-transform-origin)}.eb\:origin-\(--radix-tooltip-content-transform-origin\){transform-origin:var(--radix-tooltip-content-transform-origin)}.eb\:origin-top{transform-origin:top}.eb\:translate-x-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.eb\:-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.eb\:translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.eb\:animate-in{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.eb\:animate-pulse{animation:var(--eb-animate-pulse)}.eb\:animate-spin{animation:var(--eb-animate-spin)}.eb\:cursor-default{cursor:default}.eb\:cursor-grab{cursor:grab}.eb\:cursor-not-allowed{cursor:not-allowed}.eb\:cursor-pointer{cursor:pointer}.eb\:touch-pan-y{--tw-pan-y:pan-y;touch-action:var(--tw-pan-x,) var(--tw-pan-y,) var(--tw-pinch-zoom,)}.eb\:scroll-my-1{scroll-margin-block:var(--eb-spacing)}.eb\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.eb\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.eb\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.eb\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.eb\:grid-cols-\[110px_minmax\(0\,1fr\)\]{grid-template-columns:110px minmax(0,1fr)}.eb\:grid-cols-\[200px_minmax\(0\,1fr\)\]{grid-template-columns:200px minmax(0,1fr)}.eb\:grid-cols-\[224px_minmax\(0\,1fr\)_296px\]{grid-template-columns:224px minmax(0,1fr) 296px}.eb\:grid-cols-\[260px_minmax\(0\,1fr\)\]{grid-template-columns:260px minmax(0,1fr)}.eb\:grid-cols-\[290px_minmax\(0\,1fr\)_minmax\(0\,1fr\)\]{grid-template-columns:290px minmax(0,1fr) minmax(0,1fr)}.eb\:grid-cols-\[minmax\(0\,1fr\)\]{grid-template-columns:minmax(0,1fr)}.eb\:grid-rows-1{grid-template-rows:repeat(1,minmax(0,1fr))}.eb\:flex-col{flex-direction:column}.eb\:flex-col-reverse{flex-direction:column-reverse}.eb\:flex-row{flex-direction:row}.eb\:flex-wrap{flex-wrap:wrap}.eb\:items-center{align-items:center}.eb\:items-start{align-items:flex-start}.eb\:justify-between{justify-content:space-between}.eb\:justify-center{justify-content:center}.eb\:justify-end{justify-content:flex-end}.eb\:gap-0{gap:0}.eb\:gap-0\.5{gap:calc(var(--eb-spacing) * .5)}.eb\:gap-1{gap:var(--eb-spacing)}.eb\:gap-1\.5{gap:calc(var(--eb-spacing) * 1.5)}.eb\:gap-2{gap:calc(var(--eb-spacing) * 2)}.eb\:gap-3{gap:calc(var(--eb-spacing) * 3)}.eb\:gap-3\.5{gap:calc(var(--eb-spacing) * 3.5)}.eb\:gap-4{gap:calc(var(--eb-spacing) * 4)}.eb\:gap-5{gap:calc(var(--eb-spacing) * 5)}.eb\:gap-6{gap:calc(var(--eb-spacing) * 6)}:where(.eb\:space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--eb-spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--eb-spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.eb\:space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(var(--eb-spacing) * var(--tw-space-y-reverse));margin-block-end:calc(var(--eb-spacing) * calc(1 - var(--tw-space-y-reverse)))}:where(.eb\:space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--eb-spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--eb-spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.eb\:space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--eb-spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--eb-spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.eb\:space-y-2\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--eb-spacing) * 2.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--eb-spacing) * 2.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.eb\:space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--eb-spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--eb-spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.eb\:space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--eb-spacing) * 5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--eb-spacing) * 5) * calc(1 - var(--tw-space-y-reverse)))}.eb\:gap-x-3{column-gap:calc(var(--eb-spacing) * 3)}.eb\:gap-y-1\.5{row-gap:calc(var(--eb-spacing) * 1.5)}.eb\:gap-y-2{row-gap:calc(var(--eb-spacing) * 2)}:where(.eb\:divide-x>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px * var(--tw-divide-x-reverse));border-inline-end-width:calc(1px * calc(1 - var(--tw-divide-x-reverse)))}:where(.eb\:divide-border>:not(:last-child)){border-color:var(--eb-border)}.eb\:self-start{align-self:flex-start}.eb\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.eb\:overflow-auto{overflow:auto}.eb\:overflow-hidden{overflow:hidden}.eb\:overflow-x-auto{overflow-x:auto}.eb\:overflow-x-hidden{overflow-x:hidden}.eb\:overflow-y-auto{overflow-y:auto}.eb\:rounded{border-radius:.25rem}.eb\:rounded-\[3px\]{border-radius:3px}.eb\:rounded-full{border-radius:3.40282e38px}.eb\:rounded-lg2{border-radius:calc(var(--eb-radius) + 2px)}.eb\:rounded-md{border-radius:calc(var(--eb-radius) - 2px)}.eb\:rounded-sm{border-radius:calc(var(--eb-radius) - 4px)}.eb\:rounded-xs{border-radius:var(--eb-radius-xs)}.eb\:border{border-style:var(--tw-border-style);border-width:1px}.eb\:border-0{border-style:var(--tw-border-style);border-width:0}.eb\:border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.eb\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.eb\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.eb\:border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.eb\:border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.eb\:border-dashed{--tw-border-style:dashed;border-style:dashed}.eb\:border-border{border-color:var(--eb-border)}.eb\:border-border-strong{border-color:var(--eb-border-strong)}.eb\:border-destructive\/30{border-color:var(--eb-destructive)}@supports (color:color-mix(in lab, red, red)){.eb\:border-destructive\/30{border-color:color-mix(in oklab, var(--eb-destructive) 30%, transparent)}}.eb\:border-primary,.eb\:border-primary\/50{border-color:var(--eb-primary)}@supports (color:color-mix(in lab, red, red)){.eb\:border-primary\/50{border-color:color-mix(in oklab, var(--eb-primary) 50%, transparent)}}.eb\:border-transparent{border-color:#0000}.eb\:bg-accent{background-color:var(--eb-accent)}.eb\:bg-background{background-color:var(--eb-background)}.eb\:bg-black\/30{background-color:var(--eb-color-black)}@supports (color:color-mix(in lab, red, red)){.eb\:bg-black\/30{background-color:color-mix(in oklab, var(--eb-color-black) 30%, transparent)}}.eb\:bg-black\/50{background-color:var(--eb-color-black)}@supports (color:color-mix(in lab, red, red)){.eb\:bg-black\/50{background-color:color-mix(in oklab, var(--eb-color-black) 50%, transparent)}}.eb\:bg-border{background-color:var(--eb-border)}.eb\:bg-destructive,.eb\:bg-destructive\/10{background-color:var(--eb-destructive)}@supports (color:color-mix(in lab, red, red)){.eb\:bg-destructive\/10{background-color:color-mix(in oklab, var(--eb-destructive) 10%, transparent)}}.eb\:bg-muted{background-color:var(--eb-muted)}.eb\:bg-popover{background-color:var(--eb-popover)}.eb\:bg-primary,.eb\:bg-primary\/5{background-color:var(--eb-primary)}@supports (color:color-mix(in lab, red, red)){.eb\:bg-primary\/5{background-color:color-mix(in oklab, var(--eb-primary) 5%, transparent)}}.eb\:bg-primary\/10{background-color:var(--eb-primary)}@supports (color:color-mix(in lab, red, red)){.eb\:bg-primary\/10{background-color:color-mix(in oklab, var(--eb-primary) 10%, transparent)}}.eb\:bg-secondary{background-color:var(--eb-secondary)}.eb\:bg-success,.eb\:bg-success\/10{background-color:var(--eb-success)}@supports (color:color-mix(in lab, red, red)){.eb\:bg-success\/10{background-color:color-mix(in oklab, var(--eb-success) 10%, transparent)}}.eb\:bg-surface-75{background-color:var(--eb-surface-75)}.eb\:bg-surface-100{background-color:var(--eb-surface-100)}.eb\:bg-surface-200{background-color:var(--eb-surface-200)}.eb\:fill-current{fill:currentColor}.eb\:object-contain{object-fit:contain}.eb\:p-0{padding:0}.eb\:p-0\.5{padding:calc(var(--eb-spacing) * .5)}.eb\:p-1{padding:var(--eb-spacing)}.eb\:p-1\.5{padding:calc(var(--eb-spacing) * 1.5)}.eb\:p-2{padding:calc(var(--eb-spacing) * 2)}.eb\:p-2\.5{padding:calc(var(--eb-spacing) * 2.5)}.eb\:p-3{padding:calc(var(--eb-spacing) * 3)}.eb\:p-4{padding:calc(var(--eb-spacing) * 4)}.eb\:p-6{padding:calc(var(--eb-spacing) * 6)}.eb\:p-\[3px\]{padding:3px}.eb\:px-0{padding-inline:0}.eb\:px-1{padding-inline:var(--eb-spacing)}.eb\:px-1\.5{padding-inline:calc(var(--eb-spacing) * 1.5)}.eb\:px-2{padding-inline:calc(var(--eb-spacing) * 2)}.eb\:px-2\.5{padding-inline:calc(var(--eb-spacing) * 2.5)}.eb\:px-3{padding-inline:calc(var(--eb-spacing) * 3)}.eb\:px-4{padding-inline:calc(var(--eb-spacing) * 4)}.eb\:px-5{padding-inline:calc(var(--eb-spacing) * 5)}.eb\:px-6{padding-inline:calc(var(--eb-spacing) * 6)}.eb\:py-0{padding-block:0}.eb\:py-1{padding-block:var(--eb-spacing)}.eb\:py-1\.5{padding-block:calc(var(--eb-spacing) * 1.5)}.eb\:py-2{padding-block:calc(var(--eb-spacing) * 2)}.eb\:py-2\.5{padding-block:calc(var(--eb-spacing) * 2.5)}.eb\:py-3{padding-block:calc(var(--eb-spacing) * 3)}.eb\:py-3\.5{padding-block:calc(var(--eb-spacing) * 3.5)}.eb\:py-4{padding-block:calc(var(--eb-spacing) * 4)}.eb\:py-5{padding-block:calc(var(--eb-spacing) * 5)}.eb\:py-6{padding-block:calc(var(--eb-spacing) * 6)}.eb\:py-12{padding-block:calc(var(--eb-spacing) * 12)}.eb\:pt-1{padding-top:var(--eb-spacing)}.eb\:pt-2{padding-top:calc(var(--eb-spacing) * 2)}.eb\:pt-2\.5{padding-top:calc(var(--eb-spacing) * 2.5)}.eb\:pt-3{padding-top:calc(var(--eb-spacing) * 3)}.eb\:pt-6{padding-top:calc(var(--eb-spacing) * 6)}.eb\:pr-6{padding-right:calc(var(--eb-spacing) * 6)}.eb\:pr-8{padding-right:calc(var(--eb-spacing) * 8)}.eb\:pr-9{padding-right:calc(var(--eb-spacing) * 9)}.eb\:pr-10{padding-right:calc(var(--eb-spacing) * 10)}.eb\:pr-14{padding-right:calc(var(--eb-spacing) * 14)}.eb\:pr-16{padding-right:calc(var(--eb-spacing) * 16)}.eb\:pb-0\.5{padding-bottom:calc(var(--eb-spacing) * .5)}.eb\:pb-1{padding-bottom:var(--eb-spacing)}.eb\:pb-2{padding-bottom:calc(var(--eb-spacing) * 2)}.eb\:pb-2\.5{padding-bottom:calc(var(--eb-spacing) * 2.5)}.eb\:pb-3{padding-bottom:calc(var(--eb-spacing) * 3)}.eb\:pb-4{padding-bottom:calc(var(--eb-spacing) * 4)}.eb\:pb-5{padding-bottom:calc(var(--eb-spacing) * 5)}.eb\:pb-6{padding-bottom:calc(var(--eb-spacing) * 6)}.eb\:pl-2{padding-left:calc(var(--eb-spacing) * 2)}.eb\:pl-7{padding-left:calc(var(--eb-spacing) * 7)}.eb\:pl-8{padding-left:calc(var(--eb-spacing) * 8)}.eb\:text-center{text-align:center}.eb\:text-left{text-align:left}.eb\:font-mono{font-family:var(--eb-font-mono)}.eb\:text-base{font-size:var(--eb-text-base);line-height:var(--tw-leading,var(--eb-text-base--line-height))}.eb\:text-lg{font-size:var(--eb-text-lg);line-height:var(--tw-leading,var(--eb-text-lg--line-height))}.eb\:text-sm{font-size:var(--eb-text-sm);line-height:var(--tw-leading,var(--eb-text-sm--line-height))}.eb\:text-xs{font-size:var(--eb-text-xs);line-height:var(--tw-leading,var(--eb-text-xs--line-height))}.eb\:text-\[7px\]{font-size:7px}.eb\:text-\[9px\]{font-size:9px}.eb\:text-\[10\.5px\]{font-size:10.5px}.eb\:text-\[10px\]{font-size:10px}.eb\:text-\[11\.5px\]{font-size:11.5px}.eb\:text-\[11px\]{font-size:11px}.eb\:text-\[12\.5px\]{font-size:12.5px}.eb\:text-\[12px\]{font-size:12px}.eb\:text-\[13px\]{font-size:13px}.eb\:text-\[15px\]{font-size:15px}.eb\:leading-none{--tw-leading:1;line-height:1}.eb\:leading-relaxed{--tw-leading:var(--eb-leading-relaxed);line-height:var(--eb-leading-relaxed)}.eb\:leading-snug{--tw-leading:var(--eb-leading-snug);line-height:var(--eb-leading-snug)}.eb\:leading-tight{--tw-leading:var(--eb-leading-tight);line-height:var(--eb-leading-tight)}.eb\:font-bold{--tw-font-weight:var(--eb-font-weight-bold);font-weight:var(--eb-font-weight-bold)}.eb\:font-medium{--tw-font-weight:var(--eb-font-weight-medium);font-weight:var(--eb-font-weight-medium)}.eb\:font-normal{--tw-font-weight:var(--eb-font-weight-normal);font-weight:var(--eb-font-weight-normal)}.eb\:font-semibold{--tw-font-weight:var(--eb-font-weight-semibold);font-weight:var(--eb-font-weight-semibold)}.eb\:tracking-\[0\.14em\]{--tw-tracking:.14em;letter-spacing:.14em}.eb\:text-balance{text-wrap:balance}.eb\:break-words{overflow-wrap:break-word}.eb\:break-all{word-break:break-all}.eb\:whitespace-nowrap{white-space:nowrap}.eb\:text-accent-foreground{color:var(--eb-accent-foreground)}.eb\:text-destructive{color:var(--eb-destructive)}.eb\:text-foreground{color:var(--eb-foreground)}.eb\:text-foreground-lighter{color:var(--eb-foreground-lighter)}.eb\:text-foreground-muted{color:var(--eb-foreground-muted)}.eb\:text-foreground\/60{color:var(--eb-foreground)}@supports (color:color-mix(in lab, red, red)){.eb\:text-foreground\/60{color:color-mix(in oklab, var(--eb-foreground) 60%, transparent)}}.eb\:text-muted-foreground{color:var(--eb-muted-foreground)}.eb\:text-popover-foreground{color:var(--eb-popover-foreground)}.eb\:text-primary{color:var(--eb-primary)}.eb\:text-primary-foreground{color:var(--eb-primary-foreground)}.eb\:text-secondary-foreground{color:var(--eb-secondary-foreground)}.eb\:text-success{color:var(--eb-success)}.eb\:text-warning{color:var(--eb-warning)}.eb\:text-white{color:var(--eb-color-white)}.eb\:uppercase{text-transform:uppercase}.eb\:tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.eb\:underline{text-decoration-line:underline}.eb\:underline-offset-4{text-underline-offset:4px}.eb\:accent-primary{accent-color:var(--eb-primary)}.eb\:opacity-0{opacity:0}.eb\:opacity-50{opacity:.5}.eb\:opacity-70{opacity:.7}.eb\:opacity-90{opacity:.9}.eb\:shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.eb\:shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.eb\:shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.eb\:shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.eb\:ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.eb\:ring-black\/10{--tw-ring-color:var(--eb-color-black)}@supports (color:color-mix(in lab, red, red)){.eb\:ring-black\/10{--tw-ring-color:color-mix(in oklab, var(--eb-color-black) 10%, transparent)}}.eb\:ring-border{--tw-ring-color:var(--eb-border)}.eb\:outline-hidden{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.eb\:outline-hidden{outline-offset:2px;outline:2px solid #0000}}.eb\:drop-shadow-\[0_1px_1px_rgba\(0\,0\,0\,0\.6\)\]{--tw-drop-shadow-size:drop-shadow(0 1px 1px var(--tw-drop-shadow-color,#0009));--tw-drop-shadow:var(--tw-drop-shadow-size);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,)}.eb\:transition-\[color\,box-shadow\]{transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--eb-default-transition-timing-function));transition-duration:var(--tw-duration,var(--eb-default-transition-duration))}.eb\:transition-\[height\]{transition-property:height;transition-timing-function:var(--tw-ease,var(--eb-default-transition-timing-function));transition-duration:var(--tw-duration,var(--eb-default-transition-duration))}.eb\:transition-\[width\,box-shadow\]{transition-property:width,box-shadow;transition-timing-function:var(--tw-ease,var(--eb-default-transition-timing-function));transition-duration:var(--tw-duration,var(--eb-default-transition-duration))}.eb\:transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--eb-default-transition-timing-function));transition-duration:var(--tw-duration,var(--eb-default-transition-duration))}.eb\:transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--eb-default-transition-timing-function));transition-duration:var(--tw-duration,var(--eb-default-transition-duration))}.eb\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--eb-default-transition-timing-function));transition-duration:var(--tw-duration,var(--eb-default-transition-duration))}.eb\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--eb-default-transition-timing-function));transition-duration:var(--tw-duration,var(--eb-default-transition-duration))}.eb\:duration-200{--tw-duration:.2s;transition-duration:.2s}.eb\:duration-\[350ms\]{--tw-duration:.35s;transition-duration:.35s}.eb\:ease-in-out{--tw-ease:var(--eb-ease-in-out);transition-timing-function:var(--eb-ease-in-out)}.eb\:fade-in-0{--tw-enter-opacity:0}.eb\:outline-none{--tw-outline-style:none;outline-style:none}.eb\:select-none{-webkit-user-select:none;user-select:none}.eb\:zoom-in-95{--tw-enter-scale:.95}.eb\:ring-inset{--tw-ring-inset:inset}@media (hover:hover){.eb\:group-hover\/var\:opacity-100:is(:where(.eb\:group\/var):hover *){opacity:1}}.eb\:peer-disabled\:cursor-not-allowed:is(:where(.eb\:peer):disabled~*){cursor:not-allowed}.eb\:peer-disabled\:opacity-50:is(:where(.eb\:peer):disabled~*){opacity:.5}.eb\:selection\:bg-primary ::selection{background-color:var(--eb-primary)}.eb\:selection\:bg-primary::selection{background-color:var(--eb-primary)}.eb\:selection\:text-primary-foreground ::selection{color:var(--eb-primary-foreground)}.eb\:selection\:text-primary-foreground::selection{color:var(--eb-primary-foreground)}.eb\:placeholder\:text-foreground-muted::placeholder{color:var(--eb-foreground-muted)}@media (hover:hover){.eb\:hover\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.eb\:hover\:scale-\[1\.04\]:hover{scale:1.04}.eb\:hover\:border-primary\/50:hover{border-color:var(--eb-primary)}@supports (color:color-mix(in lab, red, red)){.eb\:hover\:border-primary\/50:hover{border-color:color-mix(in oklab, var(--eb-primary) 50%, transparent)}}.eb\:hover\:bg-accent:hover,.eb\:hover\:bg-accent\/60:hover{background-color:var(--eb-accent)}@supports (color:color-mix(in lab, red, red)){.eb\:hover\:bg-accent\/60:hover{background-color:color-mix(in oklab, var(--eb-accent) 60%, transparent)}}.eb\:hover\:bg-background:hover{background-color:var(--eb-background)}.eb\:hover\:bg-destructive\/10:hover{background-color:var(--eb-destructive)}@supports (color:color-mix(in lab, red, red)){.eb\:hover\:bg-destructive\/10:hover{background-color:color-mix(in oklab, var(--eb-destructive) 10%, transparent)}}.eb\:hover\:bg-destructive\/90:hover{background-color:var(--eb-destructive)}@supports (color:color-mix(in lab, red, red)){.eb\:hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab, var(--eb-destructive) 90%, transparent)}}.eb\:hover\:bg-muted:hover{background-color:var(--eb-muted)}.eb\:hover\:bg-primary\/5:hover{background-color:var(--eb-primary)}@supports (color:color-mix(in lab, red, red)){.eb\:hover\:bg-primary\/5:hover{background-color:color-mix(in oklab, var(--eb-primary) 5%, transparent)}}.eb\:hover\:bg-primary\/90:hover{background-color:var(--eb-primary)}@supports (color:color-mix(in lab, red, red)){.eb\:hover\:bg-primary\/90:hover{background-color:color-mix(in oklab, var(--eb-primary) 90%, transparent)}}.eb\:hover\:bg-secondary\/80:hover{background-color:var(--eb-secondary)}@supports (color:color-mix(in lab, red, red)){.eb\:hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab, var(--eb-secondary) 80%, transparent)}}.eb\:hover\:bg-surface-75:hover{background-color:var(--eb-surface-75)}.eb\:hover\:bg-surface-100:hover{background-color:var(--eb-surface-100)}.eb\:hover\:bg-surface-200:hover{background-color:var(--eb-surface-200)}.eb\:hover\:text-accent-foreground:hover{color:var(--eb-accent-foreground)}.eb\:hover\:text-destructive:hover{color:var(--eb-destructive)}.eb\:hover\:text-foreground:hover{color:var(--eb-foreground)}.eb\:hover\:text-warning:hover{color:var(--eb-warning)}.eb\:hover\:underline:hover{text-decoration-line:underline}.eb\:hover\:opacity-100:hover{opacity:1}}.eb\:focus\:bg-accent:focus{background-color:var(--eb-accent)}.eb\:focus\:text-accent-foreground:focus{color:var(--eb-accent-foreground)}.eb\:focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.eb\:focus\:ring-ring:focus{--tw-ring-color:var(--eb-ring)}.eb\:focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.eb\:focus\:outline-hidden:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.eb\:focus\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.eb\:focus-visible\:border-ring:focus-visible{border-color:var(--eb-ring)}.eb\:focus-visible\:opacity-100:focus-visible{opacity:1}.eb\:focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.eb\:focus-visible\:ring-\[3px\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.eb\:focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:var(--eb-destructive)}@supports (color:color-mix(in lab, red, red)){.eb\:focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:color-mix(in oklab, var(--eb-destructive) 20%, transparent)}}.eb\:focus-visible\:ring-ring\/40:focus-visible{--tw-ring-color:var(--eb-ring)}@supports (color:color-mix(in lab, red, red)){.eb\:focus-visible\:ring-ring\/40:focus-visible{--tw-ring-color:color-mix(in oklab, var(--eb-ring) 40%, transparent)}}.eb\:focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:var(--eb-ring)}@supports (color:color-mix(in lab, red, red)){.eb\:focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:color-mix(in oklab, var(--eb-ring) 50%, transparent)}}.eb\:focus-visible\:outline-1:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.eb\:focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.eb\:active\:cursor-grabbing:active{cursor:grabbing}.eb\:disabled\:pointer-events-none:disabled{pointer-events:none}.eb\:disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.eb\:disabled\:opacity-50:disabled{opacity:.5}.eb\:has-\[\>svg\]\:px-1\.5:has(>svg){padding-inline:calc(var(--eb-spacing) * 1.5)}.eb\:has-\[\>svg\]\:px-2\.5:has(>svg){padding-inline:calc(var(--eb-spacing) * 2.5)}.eb\:has-\[\>svg\]\:px-4:has(>svg){padding-inline:calc(var(--eb-spacing) * 4)}.eb\:aria-invalid\:border-destructive[aria-invalid=true]{border-color:var(--eb-destructive)}.eb\:aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:var(--eb-destructive)}@supports (color:color-mix(in lab, red, red)){.eb\:aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--eb-destructive) 20%, transparent)}}.eb\:data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.eb\:data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.eb\:data-\[orientation\=horizontal\]\:h-px[data-orientation=horizontal]{height:1px}.eb\:data-\[orientation\=horizontal\]\:w-full[data-orientation=horizontal]{width:100%}.eb\:data-\[orientation\=vertical\]\:h-full[data-orientation=vertical]{height:100%}.eb\:data-\[orientation\=vertical\]\:w-px[data-orientation=vertical]{width:1px}.eb\:data-\[placeholder\]\:text-foreground-muted[data-placeholder]{color:var(--eb-foreground-muted)}.eb\:data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:var(--eb-spacing);translate:var(--tw-translate-x) var(--tw-translate-y)}.eb\:data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--eb-spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}:is(.eb\:\*\:data-\[slot\=select-value\]\:line-clamp-1>*)[data-slot=select-value]{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}:is(.eb\:\*\:data-\[slot\=select-value\]\:flex>*)[data-slot=select-value]{display:flex}:is(.eb\:\*\:data-\[slot\=select-value\]\:items-center>*)[data-slot=select-value]{align-items:center}:is(.eb\:\*\:data-\[slot\=select-value\]\:gap-2>*)[data-slot=select-value]{gap:calc(var(--eb-spacing) * 2)}.eb\:data-\[state\=active\]\:bg-background[data-state=active]{background-color:var(--eb-background)}.eb\:data-\[state\=active\]\:text-foreground[data-state=active]{color:var(--eb-foreground)}.eb\:data-\[state\=active\]\:shadow-sm[data-state=active]{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.eb\:data-\[state\=closed\]\:animate-out[data-state=closed]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.eb\:data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.eb\:data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.eb\:data-\[state\=open\]\:animate-in[data-state=open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.eb\:data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity:0}.eb\:data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale:.95}@media (prefers-reduced-motion:reduce){.eb\:motion-reduce\:transition-none{transition-property:none}}@media (min-width:40rem){.eb\:sm\:mr-auto{margin-right:auto}.eb\:sm\:max-w-2xl{max-width:var(--eb-container-2xl)}.eb\:sm\:max-w-4xl{max-width:var(--eb-container-4xl)}.eb\:sm\:max-w-\[67\.2rem\]{max-width:67.2rem}.eb\:sm\:max-w-\[440px\]{max-width:440px}.eb\:sm\:max-w-\[460px\]{max-width:460px}.eb\:sm\:max-w-lg{max-width:var(--eb-container-lg)}.eb\:sm\:max-w-md{max-width:var(--eb-container-md)}.eb\:sm\:max-w-xl{max-width:var(--eb-container-xl)}.eb\:sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.eb\:sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.eb\:sm\:grid-cols-\[minmax\(0\,1fr\)_220px\]{grid-template-columns:minmax(0,1fr) 220px}.eb\:sm\:flex-row{flex-direction:row}.eb\:sm\:items-center{align-items:center}.eb\:sm\:justify-end{justify-content:flex-end}}@media (min-width:48rem){.eb\:md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.eb\:md\:grid-cols-\[minmax\(0\,1fr\)_260px\]{grid-template-columns:minmax(0,1fr) 260px}}.eb\:\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.eb\:\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.eb\:\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-3 svg:not([class*=size-]){width:calc(var(--eb-spacing) * 3);height:calc(var(--eb-spacing) * 3)}.eb\:\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:calc(var(--eb-spacing) * 4);height:calc(var(--eb-spacing) * 4)}.eb\:\[\&\:\:-webkit-search-cancel-button\]\:hidden::-webkit-search-cancel-button{display:none}}@property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}:root{--eb-font-sans:ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--eb-font-mono:ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--eb-background:oklch(98% 0 0);--eb-foreground:oklch(28% .04 260.33);--eb-foreground-lighter:oklch(50% .02 264);--eb-foreground-muted:oklch(52% .01 264);--eb-popover:oklch(100% 0 0);--eb-popover-foreground:oklch(28% .04 260.33);--eb-primary:oklch(59% .2 277);--eb-primary-foreground:oklch(96% 0 0);--eb-secondary:oklch(93% .01 261.82);--eb-secondary-foreground:oklch(37% .03 259.73);--eb-muted:oklch(97% 0 0);--eb-muted-foreground:oklch(50% .02 264.41);--eb-accent:oklch(93% .03 273.66);--eb-accent-foreground:oklch(37% .03 259.73);--eb-destructive:oklch(64% .21 25.39);--eb-warning:oklch(75% .18 70);--eb-success:oklch(60% .15 155);--eb-border:oklch(87% .01 261.81);--eb-border-strong:oklch(82% .01 261);--eb-input:oklch(87% .01 261.81);--eb-ring:oklch(59% .2 277);--eb-surface-75:oklch(97% 0 0);--eb-surface-100:oklch(96% 0 0);--eb-surface-200:oklch(94% 0 0);--eb-radius:.5rem}.dark{--eb-background:oklch(24% .008 260);--eb-foreground:oklch(93% .01 256.71);--eb-foreground-lighter:oklch(75% .01 260);--eb-foreground-muted:oklch(65% .01 260);--eb-popover:oklch(28% .009 260);--eb-popover-foreground:oklch(93% .01 256.71);--eb-secondary:oklch(33% .012 260);--eb-secondary-foreground:oklch(87% .01 261.81);--eb-muted:oklch(28% .009 260);--eb-muted-foreground:oklch(70% .01 260);--eb-accent:oklch(33% .03 273);--eb-accent-foreground:oklch(93% .01 256.71);--eb-border:oklch(34% .01 260);--eb-border-strong:oklch(40% .01 260);--eb-input:oklch(34% .01 260);--eb-surface-75:oklch(21% .008 260);--eb-surface-100:oklch(27% .009 260);--eb-surface-200:oklch(31% .01 260)}:is(.eb-root,.eb-scope){--eb-scrollbar-thumb:#9ca3af73;--eb-scrollbar-thumb-hover:#6b7280b3}:is(.eb-root,.eb-scope):where(.dark,.dark *){--eb-scrollbar-thumb:#d4d4d859;--eb-scrollbar-thumb-hover:#e4e4e799}@supports not selector(::-webkit-scrollbar){:is(.eb-root,.eb-scope),:is(.eb-root,.eb-scope) *{scrollbar-width:thin;scrollbar-color:var(--eb-scrollbar-thumb) transparent}}:is(.eb-root,.eb-scope)::-webkit-scrollbar{background:0 0;width:5.6px;height:5.6px}:is(.eb-root,.eb-scope) ::-webkit-scrollbar{background:0 0;width:5.6px;height:5.6px}:is(.eb-root,.eb-scope)::-webkit-scrollbar-button{width:0;height:0;display:none}:is(.eb-root,.eb-scope) ::-webkit-scrollbar-button{width:0;height:0;display:none}:is(.eb-root,.eb-scope)::-webkit-scrollbar-track{box-shadow:none;background:0 0;border:0}:is(.eb-root,.eb-scope) ::-webkit-scrollbar-track{box-shadow:none;background:0 0;border:0}:is(.eb-root,.eb-scope) ::-webkit-scrollbar-track-piece{box-shadow:none;background:0 0;border:0}:is(.eb-root,.eb-scope) ::-webkit-scrollbar-corner{box-shadow:none;background:0 0;border:0}:is(.eb-root,.eb-scope)::-webkit-scrollbar-thumb{background-color:var(--eb-scrollbar-thumb);background-clip:content-box;border:1.4px solid #0000;border-radius:9999px;min-width:2rem;min-height:2rem;transition:background-color .15s}:is(.eb-root,.eb-scope) ::-webkit-scrollbar-thumb{background-color:var(--eb-scrollbar-thumb);background-clip:content-box;border:1.4px solid #0000;border-radius:9999px;min-width:2rem;min-height:2rem;transition:background-color .15s}:is(.eb-root,.eb-scope) ::-webkit-scrollbar-thumb:hover{background-color:var(--eb-scrollbar-thumb-hover)}@media (hover:hover) and (pointer:fine){@supports not selector(::-webkit-scrollbar){:is(.eb-root,.eb-scope),:is(.eb-root,.eb-scope) *{scrollbar-color:transparent transparent}:is(.eb-root,.eb-scope):is(:hover,:focus-visible),:is(.eb-root,.eb-scope) :is(:hover,:focus-visible){scrollbar-color:var(--eb-scrollbar-thumb) transparent}}:is(.eb-root,.eb-scope)::-webkit-scrollbar-thumb{background-color:#0000}:is(.eb-root,.eb-scope) ::-webkit-scrollbar-thumb{background-color:#0000}:is(.eb-root,.eb-scope):is(:hover,:focus-visible)::-webkit-scrollbar-thumb{background-color:var(--eb-scrollbar-thumb)}:is(.eb-root,.eb-scope) :is(:hover,:focus-visible)::-webkit-scrollbar-thumb{background-color:var(--eb-scrollbar-thumb)}:is(.eb-root,.eb-scope) :is(:hover,:focus-visible)::-webkit-scrollbar-thumb:hover{background-color:var(--eb-scrollbar-thumb-hover)}}.eb-checker{background-image:conic-gradient(#d4d4d8 25%, #fff 0 50%, #d4d4d8 0 75%, #fff 0);background-size:10px 10px}.eb-picker .react-colorful{gap:10px;width:100%;height:168px}.eb-picker .react-colorful__saturation{border-bottom:0;border-radius:8px}.eb-picker .react-colorful__hue,.eb-picker .react-colorful__alpha{border-radius:999px;height:12px}.eb-picker .react-colorful__pointer{width:16px;height:16px}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-pan-x{syntax:"*";inherits:false}@property --tw-pan-y{syntax:"*";inherits:false}@property --tw-pinch-zoom{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0));filter:blur(var(--tw-enter-blur,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0));filter:blur(var(--tw-exit-blur,0))}}
2
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-pan-x:initial;--tw-pan-y:initial;--tw-pinch-zoom:initial;--tw-space-y-reverse:0;--tw-divide-x-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-outline-style:solid;--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-blur:0;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-blur:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0}}}@layer theme{:root,:host{--eb-font-sans:var(--eb-font-sans);--eb-font-mono:var(--eb-font-mono);--eb-color-black:#000;--eb-color-white:#fff;--eb-spacing:.25rem;--eb-container-sm:24rem;--eb-container-md:28rem;--eb-container-lg:32rem;--eb-container-xl:36rem;--eb-container-2xl:42rem;--eb-container-4xl:56rem;--eb-text-xs:.75rem;--eb-text-xs--line-height:calc(1 / .75);--eb-text-sm:.875rem;--eb-text-sm--line-height:calc(1.25 / .875);--eb-text-base:1rem;--eb-text-base--line-height:calc(1.5 / 1);--eb-text-lg:1.125rem;--eb-text-lg--line-height:calc(1.75 / 1.125);--eb-font-weight-normal:400;--eb-font-weight-medium:500;--eb-font-weight-semibold:600;--eb-font-weight-bold:700;--eb-leading-tight:1.25;--eb-leading-snug:1.375;--eb-leading-relaxed:1.625;--eb-radius-xs:.125rem;--eb-ease-in-out:cubic-bezier(.4, 0, .2, 1);--eb-animate-spin:spin 1s linear infinite;--eb-animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--eb-default-transition-duration:.15s;--eb-default-transition-timing-function:cubic-bezier(.4, 0, .2, 1)}}@layer base{:where(.eb-root,.eb-scope),:where(.eb-root,.eb-scope) *,:where(.eb-root,.eb-scope) :before,:where(.eb-root,.eb-scope) :after{box-sizing:border-box;border:0 solid var(--eb-border);margin:0;padding:0}:where(.eb-root,.eb-scope){font-family:var(--eb-font-sans);-webkit-font-smoothing:antialiased;line-height:1.5}:where(.eb-root,.eb-scope) :where(button,input,select,textarea){font:inherit;color:inherit;letter-spacing:inherit;background-color:#0000}:where(.eb-root,.eb-scope) :where(button,[role=button]){cursor:pointer}:where(.eb-root,.eb-scope) :where(button:disabled){cursor:default}:where(.eb-root,.eb-scope) :where(h1,h2,h3,h4,h5,h6){font-size:inherit;font-weight:inherit}:where(.eb-root,.eb-scope) :where(ol,ul){list-style:none}:where(.eb-root,.eb-scope) :where(img,svg,video,canvas,iframe){vertical-align:middle;display:block}:where(.eb-root,.eb-scope) :where(){opacity:1}:where(.eb-root,.eb-scope) :where(code,kbd,pre){font-family:var(--eb-font-mono)}}@layer components;@layer utilities{.eb\:pointer-events-auto{pointer-events:auto}.eb\:pointer-events-none{pointer-events:none}.eb\:invisible{visibility:hidden}.eb\:sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.eb\:absolute{position:absolute}.eb\:fixed{position:fixed}.eb\:relative{position:relative}.eb\:sticky{position:sticky}.eb\:inset-0{inset:0}.eb\:inset-y-0{inset-block:0}.eb\:top-0{top:0}.eb\:top-1\/2{top:50%}.eb\:top-4{top:calc(var(--eb-spacing) * 4)}.eb\:top-\[50\%\]{top:50%}.eb\:right-0{right:0}.eb\:right-1{right:var(--eb-spacing)}.eb\:right-2{right:calc(var(--eb-spacing) * 2)}.eb\:right-3{right:calc(var(--eb-spacing) * 3)}.eb\:right-4{right:calc(var(--eb-spacing) * 4)}.eb\:bottom-3{bottom:calc(var(--eb-spacing) * 3)}.eb\:left-0{left:0}.eb\:left-1\/2{left:50%}.eb\:left-2{left:calc(var(--eb-spacing) * 2)}.eb\:left-2\.5{left:calc(var(--eb-spacing) * 2.5)}.eb\:left-4{left:calc(var(--eb-spacing) * 4)}.eb\:left-\[50\%\]{left:50%}.eb\:z-10{z-index:10}.eb\:z-20{z-index:20}.eb\:z-40{z-index:40}.eb\:z-50{z-index:50}.eb\:m-0{margin:0}.eb\:m-auto{margin:auto}.eb\:-mx-1{margin-inline:calc(var(--eb-spacing) * -1)}.eb\:mx-auto{margin-inline:auto}.eb\:my-1{margin-block:var(--eb-spacing)}.eb\:mt-0\.5{margin-top:calc(var(--eb-spacing) * .5)}.eb\:mt-1{margin-top:var(--eb-spacing)}.eb\:mt-2{margin-top:calc(var(--eb-spacing) * 2)}.eb\:mt-px{margin-top:1px}.eb\:mr-1{margin-right:var(--eb-spacing)}.eb\:mr-auto{margin-right:auto}.eb\:mb-1\.5{margin-bottom:calc(var(--eb-spacing) * 1.5)}.eb\:mb-2{margin-bottom:calc(var(--eb-spacing) * 2)}.eb\:mb-5{margin-bottom:calc(var(--eb-spacing) * 5)}.eb\:ml-1\.5{margin-left:calc(var(--eb-spacing) * 1.5)}.eb\:ml-auto{margin-left:auto}.eb\:block{display:block}.eb\:flex{display:flex}.eb\:grid{display:grid}.eb\:hidden{display:none}.eb\:inline-flex{display:inline-flex}.eb\:field-sizing-content{field-sizing:content}.eb\:size-1\.5{width:calc(var(--eb-spacing) * 1.5);height:calc(var(--eb-spacing) * 1.5)}.eb\:size-2\.5{width:calc(var(--eb-spacing) * 2.5);height:calc(var(--eb-spacing) * 2.5)}.eb\:size-3{width:calc(var(--eb-spacing) * 3);height:calc(var(--eb-spacing) * 3)}.eb\:size-3\.5{width:calc(var(--eb-spacing) * 3.5);height:calc(var(--eb-spacing) * 3.5)}.eb\:size-4{width:calc(var(--eb-spacing) * 4);height:calc(var(--eb-spacing) * 4)}.eb\:size-5{width:calc(var(--eb-spacing) * 5);height:calc(var(--eb-spacing) * 5)}.eb\:size-6{width:calc(var(--eb-spacing) * 6);height:calc(var(--eb-spacing) * 6)}.eb\:size-7{width:calc(var(--eb-spacing) * 7);height:calc(var(--eb-spacing) * 7)}.eb\:size-8{width:calc(var(--eb-spacing) * 8);height:calc(var(--eb-spacing) * 8)}.eb\:size-10{width:calc(var(--eb-spacing) * 10);height:calc(var(--eb-spacing) * 10)}.eb\:size-12{width:calc(var(--eb-spacing) * 12);height:calc(var(--eb-spacing) * 12)}.eb\:h-3\.5{height:calc(var(--eb-spacing) * 3.5)}.eb\:h-5{height:calc(var(--eb-spacing) * 5)}.eb\:h-6{height:calc(var(--eb-spacing) * 6)}.eb\:h-7{height:calc(var(--eb-spacing) * 7)}.eb\:h-8{height:calc(var(--eb-spacing) * 8)}.eb\:h-9{height:calc(var(--eb-spacing) * 9)}.eb\:h-10{height:calc(var(--eb-spacing) * 10)}.eb\:h-11{height:calc(var(--eb-spacing) * 11)}.eb\:h-12{height:calc(var(--eb-spacing) * 12)}.eb\:h-20{height:calc(var(--eb-spacing) * 20)}.eb\:h-\[85vh\]{height:85vh}.eb\:h-\[220px\]{height:220px}.eb\:h-\[560px\]{height:560px}.eb\:h-\[calc\(100\%-1px\)\]{height:calc(100% - 1px)}.eb\:h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.eb\:h-auto{height:auto}.eb\:h-full{height:100%}.eb\:h-px{height:1px}.eb\:max-h-\(--radix-dropdown-menu-content-available-height\){max-height:var(--radix-dropdown-menu-content-available-height)}.eb\:max-h-\(--radix-select-content-available-height\){max-height:var(--radix-select-content-available-height)}.eb\:max-h-10{max-height:calc(var(--eb-spacing) * 10)}.eb\:max-h-56{max-height:calc(var(--eb-spacing) * 56)}.eb\:max-h-\[85vh\]{max-height:85vh}.eb\:max-h-\[320px\]{max-height:320px}.eb\:max-h-\[calc\(100dvh-2rem\)\]{max-height:calc(100dvh - 2rem)}.eb\:max-h-\[min\(440px\,70vh\)\]{max-height:min(440px,70vh)}.eb\:min-h-0{min-height:0}.eb\:min-h-4{min-height:calc(var(--eb-spacing) * 4)}.eb\:min-h-14{min-height:calc(var(--eb-spacing) * 14)}.eb\:min-h-16{min-height:calc(var(--eb-spacing) * 16)}.eb\:min-h-40{min-height:calc(var(--eb-spacing) * 40)}.eb\:w-3\.5{width:calc(var(--eb-spacing) * 3.5)}.eb\:w-5{width:calc(var(--eb-spacing) * 5)}.eb\:w-7{width:calc(var(--eb-spacing) * 7)}.eb\:w-24{width:calc(var(--eb-spacing) * 24)}.eb\:w-32{width:calc(var(--eb-spacing) * 32)}.eb\:w-36{width:calc(var(--eb-spacing) * 36)}.eb\:w-40{width:calc(var(--eb-spacing) * 40)}.eb\:w-64{width:calc(var(--eb-spacing) * 64)}.eb\:w-72{width:calc(var(--eb-spacing) * 72)}.eb\:w-80{width:calc(var(--eb-spacing) * 80)}.eb\:w-\[44px\]{width:44px}.eb\:w-\[min\(340px\,88\%\)\]{width:min(340px,88%)}.eb\:w-fit{width:fit-content}.eb\:w-full{width:100%}.eb\:max-w-20{max-width:calc(var(--eb-spacing) * 20)}.eb\:max-w-\[320px\]{max-width:320px}.eb\:max-w-\[calc\(100\%-1\.5rem\)\]{max-width:calc(100% - 1.5rem)}.eb\:max-w-\[calc\(100\%-2rem\)\]{max-width:calc(100% - 2rem)}.eb\:max-w-full{max-width:100%}.eb\:max-w-sm{max-width:var(--eb-container-sm)}.eb\:min-w-0{min-width:0}.eb\:min-w-\[8rem\]{min-width:8rem}.eb\:min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.eb\:flex-1{flex:1}.eb\:shrink-0{flex-shrink:0}.eb\:origin-\(--radix-dropdown-menu-content-transform-origin\){transform-origin:var(--radix-dropdown-menu-content-transform-origin)}.eb\:origin-\(--radix-popover-content-transform-origin\){transform-origin:var(--radix-popover-content-transform-origin)}.eb\:origin-\(--radix-select-content-transform-origin\){transform-origin:var(--radix-select-content-transform-origin)}.eb\:origin-\(--radix-tooltip-content-transform-origin\){transform-origin:var(--radix-tooltip-content-transform-origin)}.eb\:origin-top{transform-origin:top}.eb\:translate-x-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.eb\:-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.eb\:translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.eb\:rotate-180{rotate:180deg}.eb\:animate-in{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.eb\:animate-pulse{animation:var(--eb-animate-pulse)}.eb\:animate-spin{animation:var(--eb-animate-spin)}.eb\:cursor-default{cursor:default}.eb\:cursor-grab{cursor:grab}.eb\:cursor-not-allowed{cursor:not-allowed}.eb\:cursor-pointer{cursor:pointer}.eb\:touch-pan-y{--tw-pan-y:pan-y;touch-action:var(--tw-pan-x,) var(--tw-pan-y,) var(--tw-pinch-zoom,)}.eb\:scroll-my-1{scroll-margin-block:var(--eb-spacing)}.eb\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.eb\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.eb\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.eb\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.eb\:grid-cols-\[110px_minmax\(0\,1fr\)\]{grid-template-columns:110px minmax(0,1fr)}.eb\:grid-cols-\[200px_minmax\(0\,1fr\)\]{grid-template-columns:200px minmax(0,1fr)}.eb\:grid-cols-\[224px_minmax\(0\,1fr\)_296px\]{grid-template-columns:224px minmax(0,1fr) 296px}.eb\:grid-cols-\[260px_minmax\(0\,1fr\)\]{grid-template-columns:260px minmax(0,1fr)}.eb\:grid-cols-\[290px_minmax\(0\,1fr\)_minmax\(0\,1fr\)\]{grid-template-columns:290px minmax(0,1fr) minmax(0,1fr)}.eb\:grid-cols-\[minmax\(0\,1fr\)\]{grid-template-columns:minmax(0,1fr)}.eb\:grid-rows-1{grid-template-rows:repeat(1,minmax(0,1fr))}.eb\:flex-col{flex-direction:column}.eb\:flex-col-reverse{flex-direction:column-reverse}.eb\:flex-row{flex-direction:row}.eb\:flex-wrap{flex-wrap:wrap}.eb\:items-center{align-items:center}.eb\:items-start{align-items:flex-start}.eb\:justify-between{justify-content:space-between}.eb\:justify-center{justify-content:center}.eb\:justify-end{justify-content:flex-end}.eb\:gap-0{gap:0}.eb\:gap-0\.5{gap:calc(var(--eb-spacing) * .5)}.eb\:gap-1{gap:var(--eb-spacing)}.eb\:gap-1\.5{gap:calc(var(--eb-spacing) * 1.5)}.eb\:gap-2{gap:calc(var(--eb-spacing) * 2)}.eb\:gap-3{gap:calc(var(--eb-spacing) * 3)}.eb\:gap-3\.5{gap:calc(var(--eb-spacing) * 3.5)}.eb\:gap-4{gap:calc(var(--eb-spacing) * 4)}.eb\:gap-5{gap:calc(var(--eb-spacing) * 5)}.eb\:gap-6{gap:calc(var(--eb-spacing) * 6)}:where(.eb\:space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--eb-spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--eb-spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.eb\:space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(var(--eb-spacing) * var(--tw-space-y-reverse));margin-block-end:calc(var(--eb-spacing) * calc(1 - var(--tw-space-y-reverse)))}:where(.eb\:space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--eb-spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--eb-spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.eb\:space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--eb-spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--eb-spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.eb\:space-y-2\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--eb-spacing) * 2.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--eb-spacing) * 2.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.eb\:space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--eb-spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--eb-spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.eb\:space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--eb-spacing) * 5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--eb-spacing) * 5) * calc(1 - var(--tw-space-y-reverse)))}.eb\:gap-x-3{column-gap:calc(var(--eb-spacing) * 3)}.eb\:gap-y-1\.5{row-gap:calc(var(--eb-spacing) * 1.5)}.eb\:gap-y-2{row-gap:calc(var(--eb-spacing) * 2)}:where(.eb\:divide-x>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px * var(--tw-divide-x-reverse));border-inline-end-width:calc(1px * calc(1 - var(--tw-divide-x-reverse)))}:where(.eb\:divide-border>:not(:last-child)){border-color:var(--eb-border)}.eb\:self-start{align-self:flex-start}.eb\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.eb\:overflow-auto{overflow:auto}.eb\:overflow-hidden{overflow:hidden}.eb\:overflow-x-auto{overflow-x:auto}.eb\:overflow-x-hidden{overflow-x:hidden}.eb\:overflow-y-auto{overflow-y:auto}.eb\:rounded{border-radius:.25rem}.eb\:rounded-\[3px\]{border-radius:3px}.eb\:rounded-full{border-radius:3.40282e38px}.eb\:rounded-lg2{border-radius:calc(var(--eb-radius) + 2px)}.eb\:rounded-md{border-radius:calc(var(--eb-radius) - 2px)}.eb\:rounded-sm{border-radius:calc(var(--eb-radius) - 4px)}.eb\:rounded-xs{border-radius:var(--eb-radius-xs)}.eb\:border{border-style:var(--tw-border-style);border-width:1px}.eb\:border-0{border-style:var(--tw-border-style);border-width:0}.eb\:border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.eb\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.eb\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.eb\:border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.eb\:border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.eb\:border-dashed{--tw-border-style:dashed;border-style:dashed}.eb\:border-border{border-color:var(--eb-border)}.eb\:border-border-strong{border-color:var(--eb-border-strong)}.eb\:border-destructive\/30{border-color:var(--eb-destructive)}@supports (color:color-mix(in lab, red, red)){.eb\:border-destructive\/30{border-color:color-mix(in oklab, var(--eb-destructive) 30%, transparent)}}.eb\:border-input{border-color:var(--eb-input)}.eb\:border-primary,.eb\:border-primary\/50{border-color:var(--eb-primary)}@supports (color:color-mix(in lab, red, red)){.eb\:border-primary\/50{border-color:color-mix(in oklab, var(--eb-primary) 50%, transparent)}}.eb\:border-ring{border-color:var(--eb-ring)}.eb\:border-success\/40{border-color:var(--eb-success)}@supports (color:color-mix(in lab, red, red)){.eb\:border-success\/40{border-color:color-mix(in oklab, var(--eb-success) 40%, transparent)}}.eb\:border-transparent{border-color:#0000}.eb\:bg-accent{background-color:var(--eb-accent)}.eb\:bg-background{background-color:var(--eb-background)}.eb\:bg-black\/30{background-color:var(--eb-color-black)}@supports (color:color-mix(in lab, red, red)){.eb\:bg-black\/30{background-color:color-mix(in oklab, var(--eb-color-black) 30%, transparent)}}.eb\:bg-black\/50{background-color:var(--eb-color-black)}@supports (color:color-mix(in lab, red, red)){.eb\:bg-black\/50{background-color:color-mix(in oklab, var(--eb-color-black) 50%, transparent)}}.eb\:bg-border{background-color:var(--eb-border)}.eb\:bg-destructive,.eb\:bg-destructive\/10{background-color:var(--eb-destructive)}@supports (color:color-mix(in lab, red, red)){.eb\:bg-destructive\/10{background-color:color-mix(in oklab, var(--eb-destructive) 10%, transparent)}}.eb\:bg-muted{background-color:var(--eb-muted)}.eb\:bg-popover{background-color:var(--eb-popover)}.eb\:bg-primary,.eb\:bg-primary\/5{background-color:var(--eb-primary)}@supports (color:color-mix(in lab, red, red)){.eb\:bg-primary\/5{background-color:color-mix(in oklab, var(--eb-primary) 5%, transparent)}}.eb\:bg-primary\/10{background-color:var(--eb-primary)}@supports (color:color-mix(in lab, red, red)){.eb\:bg-primary\/10{background-color:color-mix(in oklab, var(--eb-primary) 10%, transparent)}}.eb\:bg-secondary{background-color:var(--eb-secondary)}.eb\:bg-success,.eb\:bg-success\/10{background-color:var(--eb-success)}@supports (color:color-mix(in lab, red, red)){.eb\:bg-success\/10{background-color:color-mix(in oklab, var(--eb-success) 10%, transparent)}}.eb\:bg-surface-75{background-color:var(--eb-surface-75)}.eb\:bg-surface-100{background-color:var(--eb-surface-100)}.eb\:bg-surface-200{background-color:var(--eb-surface-200)}.eb\:bg-transparent{background-color:#0000}.eb\:fill-current{fill:currentColor}.eb\:object-contain{object-fit:contain}.eb\:p-0{padding:0}.eb\:p-0\.5{padding:calc(var(--eb-spacing) * .5)}.eb\:p-1{padding:var(--eb-spacing)}.eb\:p-1\.5{padding:calc(var(--eb-spacing) * 1.5)}.eb\:p-2{padding:calc(var(--eb-spacing) * 2)}.eb\:p-2\.5{padding:calc(var(--eb-spacing) * 2.5)}.eb\:p-3{padding:calc(var(--eb-spacing) * 3)}.eb\:p-4{padding:calc(var(--eb-spacing) * 4)}.eb\:p-6{padding:calc(var(--eb-spacing) * 6)}.eb\:p-\[3px\]{padding:3px}.eb\:px-0{padding-inline:0}.eb\:px-1{padding-inline:var(--eb-spacing)}.eb\:px-1\.5{padding-inline:calc(var(--eb-spacing) * 1.5)}.eb\:px-2{padding-inline:calc(var(--eb-spacing) * 2)}.eb\:px-2\.5{padding-inline:calc(var(--eb-spacing) * 2.5)}.eb\:px-3{padding-inline:calc(var(--eb-spacing) * 3)}.eb\:px-4{padding-inline:calc(var(--eb-spacing) * 4)}.eb\:px-5{padding-inline:calc(var(--eb-spacing) * 5)}.eb\:px-6{padding-inline:calc(var(--eb-spacing) * 6)}.eb\:py-0{padding-block:0}.eb\:py-1{padding-block:var(--eb-spacing)}.eb\:py-1\.5{padding-block:calc(var(--eb-spacing) * 1.5)}.eb\:py-2{padding-block:calc(var(--eb-spacing) * 2)}.eb\:py-2\.5{padding-block:calc(var(--eb-spacing) * 2.5)}.eb\:py-3{padding-block:calc(var(--eb-spacing) * 3)}.eb\:py-3\.5{padding-block:calc(var(--eb-spacing) * 3.5)}.eb\:py-4{padding-block:calc(var(--eb-spacing) * 4)}.eb\:py-5{padding-block:calc(var(--eb-spacing) * 5)}.eb\:py-6{padding-block:calc(var(--eb-spacing) * 6)}.eb\:py-12{padding-block:calc(var(--eb-spacing) * 12)}.eb\:py-px{padding-block:1px}.eb\:pt-1{padding-top:var(--eb-spacing)}.eb\:pt-2{padding-top:calc(var(--eb-spacing) * 2)}.eb\:pt-2\.5{padding-top:calc(var(--eb-spacing) * 2.5)}.eb\:pt-3{padding-top:calc(var(--eb-spacing) * 3)}.eb\:pt-6{padding-top:calc(var(--eb-spacing) * 6)}.eb\:pr-2{padding-right:calc(var(--eb-spacing) * 2)}.eb\:pr-6{padding-right:calc(var(--eb-spacing) * 6)}.eb\:pr-8{padding-right:calc(var(--eb-spacing) * 8)}.eb\:pr-9{padding-right:calc(var(--eb-spacing) * 9)}.eb\:pr-10{padding-right:calc(var(--eb-spacing) * 10)}.eb\:pr-14{padding-right:calc(var(--eb-spacing) * 14)}.eb\:pr-16{padding-right:calc(var(--eb-spacing) * 16)}.eb\:pb-0\.5{padding-bottom:calc(var(--eb-spacing) * .5)}.eb\:pb-1{padding-bottom:var(--eb-spacing)}.eb\:pb-2{padding-bottom:calc(var(--eb-spacing) * 2)}.eb\:pb-2\.5{padding-bottom:calc(var(--eb-spacing) * 2.5)}.eb\:pb-3{padding-bottom:calc(var(--eb-spacing) * 3)}.eb\:pb-4{padding-bottom:calc(var(--eb-spacing) * 4)}.eb\:pb-5{padding-bottom:calc(var(--eb-spacing) * 5)}.eb\:pb-6{padding-bottom:calc(var(--eb-spacing) * 6)}.eb\:pl-2{padding-left:calc(var(--eb-spacing) * 2)}.eb\:pl-7{padding-left:calc(var(--eb-spacing) * 7)}.eb\:pl-8{padding-left:calc(var(--eb-spacing) * 8)}.eb\:text-center{text-align:center}.eb\:text-left{text-align:left}.eb\:font-mono{font-family:var(--eb-font-mono)}.eb\:text-base{font-size:var(--eb-text-base);line-height:var(--tw-leading,var(--eb-text-base--line-height))}.eb\:text-lg{font-size:var(--eb-text-lg);line-height:var(--tw-leading,var(--eb-text-lg--line-height))}.eb\:text-sm{font-size:var(--eb-text-sm);line-height:var(--tw-leading,var(--eb-text-sm--line-height))}.eb\:text-xs{font-size:var(--eb-text-xs);line-height:var(--tw-leading,var(--eb-text-xs--line-height))}.eb\:text-\[7px\]{font-size:7px}.eb\:text-\[9px\]{font-size:9px}.eb\:text-\[10\.5px\]{font-size:10.5px}.eb\:text-\[10px\]{font-size:10px}.eb\:text-\[11\.5px\]{font-size:11.5px}.eb\:text-\[11px\]{font-size:11px}.eb\:text-\[12\.5px\]{font-size:12.5px}.eb\:text-\[12px\]{font-size:12px}.eb\:text-\[13px\]{font-size:13px}.eb\:text-\[15px\]{font-size:15px}.eb\:leading-none{--tw-leading:1;line-height:1}.eb\:leading-relaxed{--tw-leading:var(--eb-leading-relaxed);line-height:var(--eb-leading-relaxed)}.eb\:leading-snug{--tw-leading:var(--eb-leading-snug);line-height:var(--eb-leading-snug)}.eb\:leading-tight{--tw-leading:var(--eb-leading-tight);line-height:var(--eb-leading-tight)}.eb\:font-bold{--tw-font-weight:var(--eb-font-weight-bold);font-weight:var(--eb-font-weight-bold)}.eb\:font-medium{--tw-font-weight:var(--eb-font-weight-medium);font-weight:var(--eb-font-weight-medium)}.eb\:font-normal{--tw-font-weight:var(--eb-font-weight-normal);font-weight:var(--eb-font-weight-normal)}.eb\:font-semibold{--tw-font-weight:var(--eb-font-weight-semibold);font-weight:var(--eb-font-weight-semibold)}.eb\:tracking-\[0\.14em\]{--tw-tracking:.14em;letter-spacing:.14em}.eb\:text-balance{text-wrap:balance}.eb\:break-words{overflow-wrap:break-word}.eb\:break-all{word-break:break-all}.eb\:whitespace-nowrap{white-space:nowrap}.eb\:text-accent-foreground{color:var(--eb-accent-foreground)}.eb\:text-destructive{color:var(--eb-destructive)}.eb\:text-foreground{color:var(--eb-foreground)}.eb\:text-foreground-lighter{color:var(--eb-foreground-lighter)}.eb\:text-foreground-muted{color:var(--eb-foreground-muted)}.eb\:text-foreground\/60{color:var(--eb-foreground)}@supports (color:color-mix(in lab, red, red)){.eb\:text-foreground\/60{color:color-mix(in oklab, var(--eb-foreground) 60%, transparent)}}.eb\:text-muted-foreground{color:var(--eb-muted-foreground)}.eb\:text-popover-foreground{color:var(--eb-popover-foreground)}.eb\:text-primary{color:var(--eb-primary)}.eb\:text-primary-foreground{color:var(--eb-primary-foreground)}.eb\:text-secondary-foreground{color:var(--eb-secondary-foreground)}.eb\:text-success{color:var(--eb-success)}.eb\:text-warning{color:var(--eb-warning)}.eb\:text-white{color:var(--eb-color-white)}.eb\:uppercase{text-transform:uppercase}.eb\:tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.eb\:underline{text-decoration-line:underline}.eb\:underline-offset-4{text-underline-offset:4px}.eb\:accent-primary{accent-color:var(--eb-primary)}.eb\:opacity-0{opacity:0}.eb\:opacity-50{opacity:.5}.eb\:opacity-70{opacity:.7}.eb\:opacity-90{opacity:.9}.eb\:shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.eb\:shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.eb\:shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.eb\:shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.eb\:ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.eb\:ring-black\/10{--tw-ring-color:var(--eb-color-black)}@supports (color:color-mix(in lab, red, red)){.eb\:ring-black\/10{--tw-ring-color:color-mix(in oklab, var(--eb-color-black) 10%, transparent)}}.eb\:ring-border{--tw-ring-color:var(--eb-border)}.eb\:outline-hidden{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.eb\:outline-hidden{outline-offset:2px;outline:2px solid #0000}}.eb\:drop-shadow-\[0_1px_1px_rgba\(0\,0\,0\,0\.6\)\]{--tw-drop-shadow-size:drop-shadow(0 1px 1px var(--tw-drop-shadow-color,#0009));--tw-drop-shadow:var(--tw-drop-shadow-size);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,)}.eb\:transition-\[color\,box-shadow\]{transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--eb-default-transition-timing-function));transition-duration:var(--tw-duration,var(--eb-default-transition-duration))}.eb\:transition-\[height\]{transition-property:height;transition-timing-function:var(--tw-ease,var(--eb-default-transition-timing-function));transition-duration:var(--tw-duration,var(--eb-default-transition-duration))}.eb\:transition-\[width\,box-shadow\]{transition-property:width,box-shadow;transition-timing-function:var(--tw-ease,var(--eb-default-transition-timing-function));transition-duration:var(--tw-duration,var(--eb-default-transition-duration))}.eb\:transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--eb-default-transition-timing-function));transition-duration:var(--tw-duration,var(--eb-default-transition-duration))}.eb\:transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--eb-default-transition-timing-function));transition-duration:var(--tw-duration,var(--eb-default-transition-duration))}.eb\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--eb-default-transition-timing-function));transition-duration:var(--tw-duration,var(--eb-default-transition-duration))}.eb\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--eb-default-transition-timing-function));transition-duration:var(--tw-duration,var(--eb-default-transition-duration))}.eb\:duration-200{--tw-duration:.2s;transition-duration:.2s}.eb\:duration-\[350ms\]{--tw-duration:.35s;transition-duration:.35s}.eb\:ease-in-out{--tw-ease:var(--eb-ease-in-out);transition-timing-function:var(--eb-ease-in-out)}.eb\:fade-in-0{--tw-enter-opacity:0}.eb\:outline-none{--tw-outline-style:none;outline-style:none}.eb\:select-none{-webkit-user-select:none;user-select:none}.eb\:zoom-in-95{--tw-enter-scale:.95}.eb\:ring-inset{--tw-ring-inset:inset}@media (hover:hover){.eb\:group-hover\/var\:opacity-100:is(:where(.eb\:group\/var):hover *){opacity:1}}.eb\:peer-disabled\:cursor-not-allowed:is(:where(.eb\:peer):disabled~*){cursor:not-allowed}.eb\:peer-disabled\:opacity-50:is(:where(.eb\:peer):disabled~*){opacity:.5}.eb\:selection\:bg-primary ::selection{background-color:var(--eb-primary)}.eb\:selection\:bg-primary::selection{background-color:var(--eb-primary)}.eb\:selection\:text-primary-foreground ::selection{color:var(--eb-primary-foreground)}.eb\:selection\:text-primary-foreground::selection{color:var(--eb-primary-foreground)}.eb\:placeholder\:text-foreground-muted::placeholder{color:var(--eb-foreground-muted)}@media (hover:hover){.eb\:hover\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.eb\:hover\:scale-\[1\.04\]:hover{scale:1.04}.eb\:hover\:border-primary\/50:hover{border-color:var(--eb-primary)}@supports (color:color-mix(in lab, red, red)){.eb\:hover\:border-primary\/50:hover{border-color:color-mix(in oklab, var(--eb-primary) 50%, transparent)}}.eb\:hover\:bg-accent:hover,.eb\:hover\:bg-accent\/60:hover{background-color:var(--eb-accent)}@supports (color:color-mix(in lab, red, red)){.eb\:hover\:bg-accent\/60:hover{background-color:color-mix(in oklab, var(--eb-accent) 60%, transparent)}}.eb\:hover\:bg-background:hover{background-color:var(--eb-background)}.eb\:hover\:bg-destructive\/10:hover{background-color:var(--eb-destructive)}@supports (color:color-mix(in lab, red, red)){.eb\:hover\:bg-destructive\/10:hover{background-color:color-mix(in oklab, var(--eb-destructive) 10%, transparent)}}.eb\:hover\:bg-destructive\/90:hover{background-color:var(--eb-destructive)}@supports (color:color-mix(in lab, red, red)){.eb\:hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab, var(--eb-destructive) 90%, transparent)}}.eb\:hover\:bg-muted:hover{background-color:var(--eb-muted)}.eb\:hover\:bg-primary\/5:hover{background-color:var(--eb-primary)}@supports (color:color-mix(in lab, red, red)){.eb\:hover\:bg-primary\/5:hover{background-color:color-mix(in oklab, var(--eb-primary) 5%, transparent)}}.eb\:hover\:bg-primary\/90:hover{background-color:var(--eb-primary)}@supports (color:color-mix(in lab, red, red)){.eb\:hover\:bg-primary\/90:hover{background-color:color-mix(in oklab, var(--eb-primary) 90%, transparent)}}.eb\:hover\:bg-secondary\/80:hover{background-color:var(--eb-secondary)}@supports (color:color-mix(in lab, red, red)){.eb\:hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab, var(--eb-secondary) 80%, transparent)}}.eb\:hover\:bg-surface-75:hover{background-color:var(--eb-surface-75)}.eb\:hover\:bg-surface-100:hover{background-color:var(--eb-surface-100)}.eb\:hover\:bg-surface-200:hover{background-color:var(--eb-surface-200)}.eb\:hover\:text-accent-foreground:hover{color:var(--eb-accent-foreground)}.eb\:hover\:text-destructive:hover{color:var(--eb-destructive)}.eb\:hover\:text-foreground:hover{color:var(--eb-foreground)}.eb\:hover\:text-warning:hover{color:var(--eb-warning)}.eb\:hover\:underline:hover{text-decoration-line:underline}.eb\:hover\:opacity-100:hover{opacity:1}}.eb\:focus\:bg-accent:focus{background-color:var(--eb-accent)}.eb\:focus\:text-accent-foreground:focus{color:var(--eb-accent-foreground)}.eb\:focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.eb\:focus\:ring-ring:focus{--tw-ring-color:var(--eb-ring)}.eb\:focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.eb\:focus\:outline-hidden:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.eb\:focus\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.eb\:focus-visible\:border-ring:focus-visible{border-color:var(--eb-ring)}.eb\:focus-visible\:opacity-100:focus-visible{opacity:1}.eb\:focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.eb\:focus-visible\:ring-\[3px\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.eb\:focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:var(--eb-destructive)}@supports (color:color-mix(in lab, red, red)){.eb\:focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:color-mix(in oklab, var(--eb-destructive) 20%, transparent)}}.eb\:focus-visible\:ring-ring\/40:focus-visible{--tw-ring-color:var(--eb-ring)}@supports (color:color-mix(in lab, red, red)){.eb\:focus-visible\:ring-ring\/40:focus-visible{--tw-ring-color:color-mix(in oklab, var(--eb-ring) 40%, transparent)}}.eb\:focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:var(--eb-ring)}@supports (color:color-mix(in lab, red, red)){.eb\:focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:color-mix(in oklab, var(--eb-ring) 50%, transparent)}}.eb\:focus-visible\:outline-1:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.eb\:focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.eb\:active\:cursor-grabbing:active{cursor:grabbing}.eb\:disabled\:pointer-events-none:disabled{pointer-events:none}.eb\:disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.eb\:disabled\:opacity-50:disabled{opacity:.5}.eb\:has-\[\>svg\]\:px-1\.5:has(>svg){padding-inline:calc(var(--eb-spacing) * 1.5)}.eb\:has-\[\>svg\]\:px-2\.5:has(>svg){padding-inline:calc(var(--eb-spacing) * 2.5)}.eb\:has-\[\>svg\]\:px-4:has(>svg){padding-inline:calc(var(--eb-spacing) * 4)}.eb\:aria-invalid\:border-destructive[aria-invalid=true]{border-color:var(--eb-destructive)}.eb\:aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:var(--eb-destructive)}@supports (color:color-mix(in lab, red, red)){.eb\:aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--eb-destructive) 20%, transparent)}}.eb\:data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.eb\:data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.eb\:data-\[orientation\=horizontal\]\:h-px[data-orientation=horizontal]{height:1px}.eb\:data-\[orientation\=horizontal\]\:w-full[data-orientation=horizontal]{width:100%}.eb\:data-\[orientation\=vertical\]\:h-full[data-orientation=vertical]{height:100%}.eb\:data-\[orientation\=vertical\]\:w-px[data-orientation=vertical]{width:1px}.eb\:data-\[placeholder\]\:text-foreground-muted[data-placeholder]{color:var(--eb-foreground-muted)}.eb\:data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:var(--eb-spacing);translate:var(--tw-translate-x) var(--tw-translate-y)}.eb\:data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--eb-spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}:is(.eb\:\*\:data-\[slot\=select-value\]\:line-clamp-1>*)[data-slot=select-value]{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}:is(.eb\:\*\:data-\[slot\=select-value\]\:flex>*)[data-slot=select-value]{display:flex}:is(.eb\:\*\:data-\[slot\=select-value\]\:items-center>*)[data-slot=select-value]{align-items:center}:is(.eb\:\*\:data-\[slot\=select-value\]\:gap-2>*)[data-slot=select-value]{gap:calc(var(--eb-spacing) * 2)}.eb\:data-\[state\=active\]\:bg-background[data-state=active]{background-color:var(--eb-background)}.eb\:data-\[state\=active\]\:text-foreground[data-state=active]{color:var(--eb-foreground)}.eb\:data-\[state\=active\]\:shadow-sm[data-state=active]{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.eb\:data-\[state\=closed\]\:animate-out[data-state=closed]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.eb\:data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.eb\:data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.eb\:data-\[state\=open\]\:animate-in[data-state=open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.eb\:data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity:0}.eb\:data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale:.95}@media (prefers-reduced-motion:reduce){.eb\:motion-reduce\:transition-none{transition-property:none}}@media (min-width:40rem){.eb\:sm\:mr-auto{margin-right:auto}.eb\:sm\:max-w-2xl{max-width:var(--eb-container-2xl)}.eb\:sm\:max-w-4xl{max-width:var(--eb-container-4xl)}.eb\:sm\:max-w-\[67\.2rem\]{max-width:67.2rem}.eb\:sm\:max-w-\[440px\]{max-width:440px}.eb\:sm\:max-w-\[460px\]{max-width:460px}.eb\:sm\:max-w-lg{max-width:var(--eb-container-lg)}.eb\:sm\:max-w-md{max-width:var(--eb-container-md)}.eb\:sm\:max-w-xl{max-width:var(--eb-container-xl)}.eb\:sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.eb\:sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.eb\:sm\:grid-cols-\[minmax\(0\,1fr\)_220px\]{grid-template-columns:minmax(0,1fr) 220px}.eb\:sm\:flex-row{flex-direction:row}.eb\:sm\:items-center{align-items:center}.eb\:sm\:justify-end{justify-content:flex-end}}@media (min-width:48rem){.eb\:md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.eb\:md\:grid-cols-\[minmax\(0\,1fr\)_260px\]{grid-template-columns:minmax(0,1fr) 260px}}.eb\:\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.eb\:\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.eb\:\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-3 svg:not([class*=size-]){width:calc(var(--eb-spacing) * 3);height:calc(var(--eb-spacing) * 3)}.eb\:\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:calc(var(--eb-spacing) * 4);height:calc(var(--eb-spacing) * 4)}.eb\:\[\&\:\:-webkit-search-cancel-button\]\:hidden::-webkit-search-cancel-button{display:none}}@property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}:root{--eb-font-sans:ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--eb-font-mono:ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--eb-background:oklch(98% 0 0);--eb-foreground:oklch(28% .04 260.33);--eb-foreground-lighter:oklch(50% .02 264);--eb-foreground-muted:oklch(52% .01 264);--eb-popover:oklch(100% 0 0);--eb-popover-foreground:oklch(28% .04 260.33);--eb-primary:oklch(59% .2 277);--eb-primary-foreground:oklch(96% 0 0);--eb-secondary:oklch(93% .01 261.82);--eb-secondary-foreground:oklch(37% .03 259.73);--eb-muted:oklch(97% 0 0);--eb-muted-foreground:oklch(50% .02 264.41);--eb-accent:oklch(93% .03 273.66);--eb-accent-foreground:oklch(37% .03 259.73);--eb-destructive:oklch(64% .21 25.39);--eb-warning:oklch(75% .18 70);--eb-success:oklch(60% .15 155);--eb-border:oklch(87% .01 261.81);--eb-border-strong:oklch(82% .01 261);--eb-input:oklch(87% .01 261.81);--eb-ring:oklch(59% .2 277);--eb-surface-75:oklch(97% 0 0);--eb-surface-100:oklch(96% 0 0);--eb-surface-200:oklch(94% 0 0);--eb-radius:.5rem}.dark{--eb-background:oklch(24% .008 260);--eb-foreground:oklch(93% .01 256.71);--eb-foreground-lighter:oklch(75% .01 260);--eb-foreground-muted:oklch(65% .01 260);--eb-popover:oklch(28% .009 260);--eb-popover-foreground:oklch(93% .01 256.71);--eb-secondary:oklch(33% .012 260);--eb-secondary-foreground:oklch(87% .01 261.81);--eb-muted:oklch(28% .009 260);--eb-muted-foreground:oklch(70% .01 260);--eb-accent:oklch(33% .03 273);--eb-accent-foreground:oklch(93% .01 256.71);--eb-border:oklch(34% .01 260);--eb-border-strong:oklch(40% .01 260);--eb-input:oklch(34% .01 260);--eb-surface-75:oklch(21% .008 260);--eb-surface-100:oklch(27% .009 260);--eb-surface-200:oklch(31% .01 260)}:is(.eb-root,.eb-scope){--eb-scrollbar-thumb:#9ca3af73;--eb-scrollbar-thumb-hover:#6b7280b3}:is(.eb-root,.eb-scope):where(.dark,.dark *){--eb-scrollbar-thumb:#d4d4d859;--eb-scrollbar-thumb-hover:#e4e4e799}@supports not selector(::-webkit-scrollbar){:is(.eb-root,.eb-scope),:is(.eb-root,.eb-scope) *{scrollbar-width:thin;scrollbar-color:var(--eb-scrollbar-thumb) transparent}}:is(.eb-root,.eb-scope)::-webkit-scrollbar{background:0 0;width:5.6px;height:5.6px}:is(.eb-root,.eb-scope) ::-webkit-scrollbar{background:0 0;width:5.6px;height:5.6px}:is(.eb-root,.eb-scope)::-webkit-scrollbar-button{width:0;height:0;display:none}:is(.eb-root,.eb-scope) ::-webkit-scrollbar-button{width:0;height:0;display:none}:is(.eb-root,.eb-scope)::-webkit-scrollbar-track{box-shadow:none;background:0 0;border:0}:is(.eb-root,.eb-scope) ::-webkit-scrollbar-track{box-shadow:none;background:0 0;border:0}:is(.eb-root,.eb-scope) ::-webkit-scrollbar-track-piece{box-shadow:none;background:0 0;border:0}:is(.eb-root,.eb-scope) ::-webkit-scrollbar-corner{box-shadow:none;background:0 0;border:0}:is(.eb-root,.eb-scope)::-webkit-scrollbar-thumb{background-color:var(--eb-scrollbar-thumb);background-clip:content-box;border:1.4px solid #0000;border-radius:9999px;min-width:2rem;min-height:2rem;transition:background-color .15s}:is(.eb-root,.eb-scope) ::-webkit-scrollbar-thumb{background-color:var(--eb-scrollbar-thumb);background-clip:content-box;border:1.4px solid #0000;border-radius:9999px;min-width:2rem;min-height:2rem;transition:background-color .15s}:is(.eb-root,.eb-scope) ::-webkit-scrollbar-thumb:hover{background-color:var(--eb-scrollbar-thumb-hover)}@media (hover:hover) and (pointer:fine){@supports not selector(::-webkit-scrollbar){:is(.eb-root,.eb-scope),:is(.eb-root,.eb-scope) *{scrollbar-color:transparent transparent}:is(.eb-root,.eb-scope):is(:hover,:focus-visible),:is(.eb-root,.eb-scope) :is(:hover,:focus-visible){scrollbar-color:var(--eb-scrollbar-thumb) transparent}}:is(.eb-root,.eb-scope)::-webkit-scrollbar-thumb{background-color:#0000}:is(.eb-root,.eb-scope) ::-webkit-scrollbar-thumb{background-color:#0000}:is(.eb-root,.eb-scope):is(:hover,:focus-visible)::-webkit-scrollbar-thumb{background-color:var(--eb-scrollbar-thumb)}:is(.eb-root,.eb-scope) :is(:hover,:focus-visible)::-webkit-scrollbar-thumb{background-color:var(--eb-scrollbar-thumb)}:is(.eb-root,.eb-scope) :is(:hover,:focus-visible)::-webkit-scrollbar-thumb:hover{background-color:var(--eb-scrollbar-thumb-hover)}}.eb-checker{background-image:conic-gradient(#d4d4d8 25%, #fff 0 50%, #d4d4d8 0 75%, #fff 0);background-size:10px 10px}.eb-picker .react-colorful{gap:10px;width:100%;height:168px}.eb-picker .react-colorful__saturation{border-bottom:0;border-radius:8px}.eb-picker .react-colorful__hue,.eb-picker .react-colorful__alpha{border-radius:999px;height:12px}.eb-picker .react-colorful__pointer{width:16px;height:16px}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-pan-x{syntax:"*";inherits:false}@property --tw-pan-y{syntax:"*";inherits:false}@property --tw-pinch-zoom{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0));filter:blur(var(--tw-enter-blur,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0));filter:blur(var(--tw-exit-blur,0))}}
@@ -9,7 +9,8 @@
9
9
  *
10
10
  * Given several providers (`createAi({ provider: [...] })`), the user chooses
11
11
  * one at the top; a provider whose key this browser already keeps needs no
12
- * new one.
12
+ * new one. Under the key, the model: the provider's own, or another of its
13
+ * list (ModelPicker.jsx).
13
14
  */
14
15
  export default function ConnectAi({ aiKey }: {
15
16
  aiKey: any;
@@ -0,0 +1,34 @@
1
+ /**
2
+ * MODEL — the model of the provider chosen, in the Connect dialog: a field
3
+ * that opens the provider's list of models in place (not over the dialog, so
4
+ * the list scrolls like the rest of it).
5
+ *
6
+ * The list comes from the provider with the key (OpenRouter's needs none):
7
+ * the default model first, then the free ones, then the newest. Type to
8
+ * filter, ↑/↓ to move, Enter to choose, Esc to close. An id the list does not
9
+ * have can be used as it is ("Use “…”"); without the list, the default model
10
+ * still works.
11
+ *
12
+ * @param {{
13
+ * aiKey: import('./keys.js').AiKey,
14
+ * provider: import('./keys.js').ProviderChoice,
15
+ * apiKey: string,
16
+ * delay?: number,
17
+ * value: string,
18
+ * onChange: (model: string) => void,
19
+ * open: boolean,
20
+ * onOpenChange: (open: boolean) => void,
21
+ * }} props
22
+ * `apiKey`: the key the list is asked with ('' when there is none yet);
23
+ * `delay`: how long to wait after it changes (a key being pasted).
24
+ */
25
+ export default function ModelPicker({ aiKey, provider, apiKey, delay, value, onChange, open, onOpenChange }: {
26
+ aiKey: import("./keys.js").AiKey;
27
+ provider: import("./keys.js").ProviderChoice;
28
+ apiKey: string;
29
+ delay?: number;
30
+ value: string;
31
+ onChange: (model: string) => void;
32
+ open: boolean;
33
+ onOpenChange: (open: boolean) => void;
34
+ }): import("react").JSX.Element;
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @param {{
3
+ * url: string,
4
+ * headers?: AgentHeaders,
5
+ * fetch?: typeof fetch,
6
+ * timeout?: number,
7
+ * name?: string,
8
+ * }} options
9
+ * `headers`: added to each request — or a function of `{ task, user }` that
10
+ * gives them (a token signed for that user). `timeout`: the longest wait
11
+ * for one answer, in ms (3 minutes; 0 for none). `name`: the agent's, in
12
+ * the details of its errors.
13
+ * @returns {import('./generator.js').EmailModel & {url: string}}
14
+ */
15
+ export function agentEmailModel(options: {
16
+ url: string;
17
+ headers?: AgentHeaders;
18
+ fetch?: typeof fetch;
19
+ timeout?: number;
20
+ name?: string;
21
+ }): import("./generator.js").EmailModel & {
22
+ url: string;
23
+ };
24
+ export const AGENT_PROTOCOL: "best-email-builder/agent@1";
25
+ /** The errors an agent can name; any other is read from the status. */
26
+ export const AGENT_ERROR_CODES: readonly string[];
27
+ export type AgentCallContext = {
28
+ task: "generate" | "rewrite" | "subjects";
29
+ user?: any;
30
+ };
31
+ export type AgentHeaders = Record<string, string> | ((context: AgentCallContext) => Record<string, string> | Promise<Record<string, string>>);
@@ -0,0 +1,69 @@
1
+ /**
2
+ * @param {{
3
+ * complete: (task: AgentTask) => Promise<string | object> | string | object,
4
+ * onError?: (error: unknown, request: Request) => void,
5
+ * }} options
6
+ * `complete`: your agent. It answers with the text of its model, or with
7
+ * the answer as an object. To fail with a reason the builder explains, throw
8
+ * an error whose `code` is one of AGENT_ERROR_CODES ('REFUSED',
9
+ * 'MODEL_BUSY'…); any other error is logged with `onError` and answered as
10
+ * MODEL_ERROR, its message kept out of the response.
11
+ * @returns {(request: Request) => Promise<Response>}
12
+ */
13
+ export function createAgentEndpoint({ complete, onError }?: {
14
+ complete: (task: AgentTask) => Promise<string | object> | string | object;
15
+ onError?: (error: unknown, request: Request) => void;
16
+ }): (request: Request) => Promise<Response>;
17
+ /**
18
+ * Tries an agent with the builder's own checks: one email written, one text
19
+ * rewritten, subject ideas — in turn, each as the builder would ask it (with
20
+ * its repair turn). Three to six calls to the agent.
21
+ * @param {{
22
+ * url: string,
23
+ * headers?: import('./agent.js').AgentHeaders,
24
+ * user?: any,
25
+ * fetch?: typeof fetch,
26
+ * timeout?: number,
27
+ * compile?: (mjml: string) => Promise<{warnings?: {message: string}[]}>,
28
+ * language?: string,
29
+ * }} options
30
+ * `user`: what `headers` gets, as the handler's `authorize` would give it.
31
+ * `compile`: `compileMjml` (best-email-builder/server), for MJML's own
32
+ * warnings as on the server.
33
+ * @returns {Promise<{ok: boolean, results: {task: string, ok: boolean, ms: number, attempts?: number, sample?: unknown, code?: string, error?: string}[]}>}
34
+ */
35
+ export function checkAgent({ url, headers, user, fetch: fetchImpl, timeout, compile, language }: {
36
+ url: string;
37
+ headers?: import("./agent.js").AgentHeaders;
38
+ user?: any;
39
+ fetch?: typeof fetch;
40
+ timeout?: number;
41
+ compile?: (mjml: string) => Promise<{
42
+ warnings?: {
43
+ message: string;
44
+ }[];
45
+ }>;
46
+ language?: string;
47
+ }): Promise<{
48
+ ok: boolean;
49
+ results: {
50
+ task: string;
51
+ ok: boolean;
52
+ ms: number;
53
+ attempts?: number;
54
+ sample?: unknown;
55
+ code?: string;
56
+ error?: string;
57
+ }[];
58
+ }>;
59
+ export type AgentTask = {
60
+ task: "generate" | "rewrite" | "subjects";
61
+ system: string;
62
+ messages: {
63
+ role: "user" | "assistant";
64
+ content: string;
65
+ }[];
66
+ schema: object;
67
+ request: Request;
68
+ signal: AbortSignal;
69
+ };
@@ -29,7 +29,8 @@ export function claudeEmailModel({ client, model, effort, rewriteEffort, maxToke
29
29
  * },
30
30
  * })
31
31
  *
32
- * The other options are claudeEmailModel's (`model`, `effort`…).
32
+ * The other options are claudeEmailModel's (`model`, `effort`…). The user can
33
+ * choose another of the models their key opens, in the Connect dialog.
33
34
  *
34
35
  * @param {{client: (apiKey: string) => any} & ClaudeOptions} options
35
36
  * @returns {import('./providers.js').AiProvider}
@@ -137,24 +137,30 @@ export namespace GENERATION_ERRORS {
137
137
  let message_12: string;
138
138
  export { message_12 as message };
139
139
  }
140
- namespace MODEL_CREDITS {
140
+ namespace MODEL_UNAVAILABLE {
141
141
  let status_13: number;
142
142
  export { status_13 as status };
143
143
  let message_13: string;
144
144
  export { message_13 as message };
145
145
  }
146
- namespace MODEL_BUSY {
146
+ namespace MODEL_CREDITS {
147
147
  let status_14: number;
148
148
  export { status_14 as status };
149
149
  let message_14: string;
150
150
  export { message_14 as message };
151
151
  }
152
- namespace MODEL_ERROR {
152
+ namespace MODEL_BUSY {
153
153
  let status_15: number;
154
154
  export { status_15 as status };
155
155
  let message_15: string;
156
156
  export { message_15 as message };
157
157
  }
158
+ namespace MODEL_ERROR {
159
+ let status_16: number;
160
+ export { status_16 as status };
161
+ let message_16: string;
162
+ export { message_16 as message };
163
+ }
158
164
  }
159
165
  export class EmailGenerationError extends Error {
160
166
  /**
@@ -162,7 +168,7 @@ export class EmailGenerationError extends Error {
162
168
  * @param {string} [detail] what went wrong, for logs and for the model
163
169
  */
164
170
  constructor(code: keyof typeof GENERATION_ERRORS, detail?: string);
165
- code: "NOTHING_TO_GENERATE" | "REFUSED" | "TRUNCATED" | "INVALID_ANSWER" | "INVALID_OUTPUT" | "NOTHING_TO_REWRITE" | "REWRITE_REFUSED" | "REWRITE_UNUSABLE" | "NOTHING_TO_SUGGEST" | "SUBJECTS_REFUSED" | "SUBJECTS_UNUSABLE" | "KEY_MISSING" | "KEY_REFUSED" | "MODEL_CREDITS" | "MODEL_BUSY" | "MODEL_ERROR";
171
+ code: "NOTHING_TO_GENERATE" | "REFUSED" | "TRUNCATED" | "INVALID_ANSWER" | "INVALID_OUTPUT" | "NOTHING_TO_REWRITE" | "REWRITE_REFUSED" | "REWRITE_UNUSABLE" | "NOTHING_TO_SUGGEST" | "SUBJECTS_REFUSED" | "SUBJECTS_UNUSABLE" | "KEY_MISSING" | "KEY_REFUSED" | "MODEL_UNAVAILABLE" | "MODEL_CREDITS" | "MODEL_BUSY" | "MODEL_ERROR";
166
172
  status: number;
167
173
  detail: string;
168
174
  }
@@ -40,17 +40,20 @@ export function createEmailGenerator({ model, maxAttempts, compile }?: {
40
40
  }[];
41
41
  }>;
42
42
  }): {
43
- generate: (input: GenerateInput, { signal }?: {
43
+ generate: (input: GenerateInput, { signal, user }?: {
44
44
  signal?: AbortSignal;
45
+ user?: any;
45
46
  }) => Promise<GeneratedEmail>;
46
47
  rewrite: (input: import("./rewrite.js").RewriteInput, options?: {
47
48
  signal?: AbortSignal;
49
+ user?: any;
48
50
  }) => Promise<{
49
51
  text: string;
50
52
  attempts: number;
51
53
  }>;
52
54
  suggestSubjects: (input: import("./subjects.js").SubjectsInput, options?: {
53
55
  signal?: AbortSignal;
56
+ user?: any;
54
57
  }) => Promise<{
55
58
  subjects: string[];
56
59
  attempts: number;
@@ -59,9 +62,10 @@ export function createEmailGenerator({ model, maxAttempts, compile }?: {
59
62
  };
60
63
  /**
61
64
  * @typedef {{role: 'user'|'assistant', content: string}} ModelMessage
62
- * @typedef {(request: {system: string, messages: ModelMessage[], schema: object, signal?: AbortSignal, task?: 'generate'|'rewrite'|'subjects'}) => Promise<string>} EmailModel
65
+ * @typedef {(request: {system: string, messages: ModelMessage[], schema: object, signal?: AbortSignal, task?: 'generate'|'rewrite'|'subjects', user?: any}) => Promise<string>} EmailModel
63
66
  * `task`: a whole email, one text rewritten or subject ideas (lighter jobs:
64
- * a model may answer them with less effort).
67
+ * a model may answer them with less effort). `user`: on the server, the one
68
+ * the handler's `authorize` returned (agent.js forwards who asks).
65
69
  *
66
70
  * @typedef {{
67
71
  * purpose?: string|null,
@@ -84,7 +88,8 @@ export type ModelMessage = {
84
88
  };
85
89
  /**
86
90
  * `task`: a whole email, one text rewritten or subject ideas (lighter jobs:
87
- * a model may answer them with less effort).
91
+ * a model may answer them with less effort). `user`: on the server, the one
92
+ * the handler's `authorize` returned (agent.js forwards who asks).
88
93
  */
89
94
  export type EmailModel = (request: {
90
95
  system: string;
@@ -92,6 +97,7 @@ export type EmailModel = (request: {
92
97
  schema: object;
93
98
  signal?: AbortSignal;
94
99
  task?: "generate" | "rewrite" | "subjects";
100
+ user?: any;
95
101
  }) => Promise<string>;
96
102
  /**
97
103
  * `brand`: the colors and font the email is written in (features/brand).
@@ -6,4 +6,5 @@ export { EMAIL_PURPOSES, PURPOSE_CATEGORIES } from "./purposes.js";
6
6
  export { REWRITE_ACTIONS, REWRITE_LANGUAGES } from "./rewrite.js";
7
7
  export { EmailGenerationError, GENERATION_ERRORS } from "./draft.js";
8
8
  export { claudeEmailModel, claudeProvider, DEFAULT_CLAUDE_MODEL } from "./claude.js";
9
- export { AI_PROVIDERS, failureCode, providerEmailModel, resolveProvider } from "./providers.js";
9
+ export { AI_PROVIDERS, failureCode, listProviderModels, providerEmailModel, resolveProvider } from "./providers.js";
10
+ export { agentEmailModel, AGENT_PROTOCOL, AGENT_ERROR_CODES } from "./agent.js";
@@ -1,9 +1,13 @@
1
1
  /**
2
2
  * @param {AiProvider | AiProvider[]} providerOrList one provider, or those the user chooses from
3
+ * @param {{fetch?: typeof fetch}} [options] the fetch that lists the models
3
4
  * @returns {AiKey}
4
5
  */
5
- export function createKeyStore(providerOrList: AiProvider | AiProvider[]): AiKey;
6
+ export function createKeyStore(providerOrList: AiProvider | AiProvider[], { fetch: fetchImpl }?: {
7
+ fetch?: typeof fetch;
8
+ }): AiKey;
6
9
  export type AiProvider = import("./providers.js").AiProvider;
10
+ export type ModelChoice = import("./providers.js").ModelChoice;
7
11
  export type ProviderChoice = Readonly<{
8
12
  id: string;
9
13
  name: string;
@@ -11,10 +15,13 @@ export type ProviderChoice = Readonly<{
11
15
  keyUrl: string | null;
12
16
  keyHint: string;
13
17
  free: string | null;
18
+ publicModels: boolean;
14
19
  }>;
15
20
  /**
16
21
  * `state`, `answer` and `refuse` serve the Connect dialog and the module:
17
22
  * whether the user is being asked, whether the last key was refused.
23
+ * `listModels`: with the key given, else the one kept (none is needed for
24
+ * a provider whose list is public, OpenRouter's).
18
25
  */
19
26
  export type AiKey = {
20
27
  provider: ProviderChoice;
@@ -24,6 +31,12 @@ export type AiKey = {
24
31
  forget: () => void;
25
32
  request: () => Promise<string>;
26
33
  choose: (id: string) => void;
34
+ model: (id?: string) => string;
35
+ chooseModel: (model: string, id?: string) => void;
36
+ listModels: (id?: string, options?: {
37
+ apiKey?: string;
38
+ signal?: AbortSignal;
39
+ }) => Promise<ModelChoice[]>;
27
40
  subscribe: (listener: () => void) => () => void;
28
41
  state: () => Readonly<{
29
42
  asking: boolean;
@@ -4,14 +4,33 @@
4
4
  * @returns {AiProvider}
5
5
  */
6
6
  export function resolveProvider(provider: string | Partial<AiProvider>): AiProvider;
7
+ /**
8
+ * The models a provider offers for writing, from its list of models (the
9
+ * `/models` of an OpenAI-compatible API — OpenRouter's needs no key — or the
10
+ * provider's own `listModels`): the default first, then the free ones, then
11
+ * the newest. Embeddings, speech, pictures and video are left out. Its
12
+ * failures are the errors of `providerEmailModel` (`KEY_REFUSED`…).
13
+ *
14
+ * listProviderModels({ provider: 'gemini', apiKey })
15
+ *
16
+ * @param {{provider?: string|Partial<AiProvider>, apiKey?: string, fetch?: typeof fetch, signal?: AbortSignal}} [options]
17
+ * @returns {Promise<ModelChoice[]>}
18
+ */
19
+ export function listProviderModels(options?: {
20
+ provider?: string | Partial<AiProvider>;
21
+ apiKey?: string;
22
+ fetch?: typeof fetch;
23
+ signal?: AbortSignal;
24
+ }): Promise<ModelChoice[]>;
7
25
  /**
8
26
  * The error code of a failed request, from its status and the provider's
9
- * message: the refusals above, the money (402, a quota, a credit balance too
10
- * low — Anthropic says it with a 400, OpenAI with a 429), busy, or an error.
27
+ * message: the refusals above, a model that is not there, the money (402, a
28
+ * quota, a credit balance too low — Anthropic says it with a 400, OpenAI with
29
+ * a 429), busy, or an error.
11
30
  * @param {number} status @param {string} message
12
- * @returns {'KEY_REFUSED'|'REFUSED'|'MODEL_CREDITS'|'MODEL_BUSY'|'MODEL_ERROR'}
31
+ * @returns {'KEY_REFUSED'|'REFUSED'|'MODEL_UNAVAILABLE'|'MODEL_CREDITS'|'MODEL_BUSY'|'MODEL_ERROR'}
13
32
  */
14
- export function failureCode(status: number, message: string): "KEY_REFUSED" | "REFUSED" | "MODEL_CREDITS" | "MODEL_BUSY" | "MODEL_ERROR";
33
+ export function failureCode(status: number, message: string): "KEY_REFUSED" | "REFUSED" | "MODEL_UNAVAILABLE" | "MODEL_CREDITS" | "MODEL_BUSY" | "MODEL_ERROR";
15
34
  /**
16
35
  * @param {{
17
36
  * provider?: string|Partial<AiProvider>,
@@ -57,6 +76,7 @@ export const AI_PROVIDERS: Readonly<{
57
76
  ollama: AiProvider;
58
77
  'openai-compatible': AiProvider;
59
78
  }>;
79
+ export function answerInstruction(schema: object): string;
60
80
  export type AnswerFormat = "json_schema" | "json_object" | "text";
61
81
  /**
62
82
  * `model`: the default (null: to be given); `keyUrl`: where a user gets a
@@ -66,7 +86,8 @@ export type AnswerFormat = "json_schema" | "json_object" | "text";
66
86
  * `maxTokens`: that limit (an email is about 6 000 tokens, more for a model
67
87
  * that reasons first); `body`: fields of its own added to each request;
68
88
  * `createModel`: a provider that is not an OpenAI-compatible API makes its
69
- * own model from the user's key (`claudeProvider` does).
89
+ * own model from the user's key (`claudeProvider` does), and `listModels`
90
+ * lists its models; `publicModels`: its list of models needs no key.
70
91
  */
71
92
  export type AiProvider = {
72
93
  id: string;
@@ -82,8 +103,30 @@ export type AiProvider = {
82
103
  keyless?: boolean;
83
104
  headers?: Record<string, string>;
84
105
  body?: Record<string, unknown>;
106
+ publicModels?: boolean;
85
107
  createModel?: (options: {
86
108
  apiKey: () => string | Promise<string>;
87
109
  fetch?: typeof fetch;
110
+ model?: string;
88
111
  }) => import("./generator.js").EmailModel;
112
+ listModels?: (options: {
113
+ apiKey: string;
114
+ fetch?: typeof fetch;
115
+ signal?: AbortSignal;
116
+ }) => Promise<ModelEntry[]>;
117
+ };
118
+ export type ModelEntry = {
119
+ id: string;
120
+ name?: string;
121
+ free?: boolean;
122
+ created?: number;
89
123
  };
124
+ /**
125
+ * A model a provider offers: the id requests name it by, the name it shows,
126
+ * whether it costs nothing (known for OpenRouter only).
127
+ */
128
+ export type ModelChoice = Readonly<{
129
+ id: string;
130
+ name: string;
131
+ free: boolean;
132
+ }>;
@@ -33,13 +33,14 @@ export function parseRewrite(answer: string): string;
33
33
  export function reviewRewrite(original: string, rewritten: string, format: "html" | "plain"): string[];
34
34
  /**
35
35
  * @param {{model: import('./generator.js').EmailModel, maxAttempts?: number}} options
36
- * @returns {(input: RewriteInput, options?: {signal?: AbortSignal}) => Promise<{text: string, attempts: number}>}
36
+ * @returns {(input: RewriteInput, options?: {signal?: AbortSignal, user?: any}) => Promise<{text: string, attempts: number}>}
37
37
  */
38
38
  export function createRewriter({ model, maxAttempts }: {
39
39
  model: import("./generator.js").EmailModel;
40
40
  maxAttempts?: number;
41
41
  }): (input: RewriteInput, options?: {
42
42
  signal?: AbortSignal;
43
+ user?: any;
43
44
  }) => Promise<{
44
45
  text: string;
45
46
  attempts: number;