@pollinations/ui 0.0.1 → 0.1.0-alpha.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 (65) hide show
  1. package/README.md +25 -16
  2. package/dist/{Button-DMJ2K6Gr.d.ts → Button-BvLF_Km2.d.cts} +4 -4
  3. package/dist/{Button-CNzpisJf.d.cts → Button-DQAZzvyQ.d.ts} +4 -4
  4. package/dist/{Chip-BS8ronOu.d.ts → Chip-C5impfYd.d.ts} +2 -2
  5. package/dist/{Chip-DyqWrq0r.d.cts → Chip-SM52sUbZ.d.cts} +2 -2
  6. package/dist/app.css +1 -1
  7. package/dist/auth/index.cjs +78 -71
  8. package/dist/auth/index.cjs.map +1 -1
  9. package/dist/auth/index.d.cts +1 -2
  10. package/dist/auth/index.d.ts +1 -2
  11. package/dist/auth/index.js +78 -71
  12. package/dist/auth/index.js.map +1 -1
  13. package/dist/auth/sdk.cjs +7 -6
  14. package/dist/auth/sdk.cjs.map +1 -1
  15. package/dist/auth/sdk.d.cts +2 -2
  16. package/dist/auth/sdk.d.ts +2 -2
  17. package/dist/auth/sdk.js +7 -6
  18. package/dist/auth/sdk.js.map +1 -1
  19. package/dist/compositions/app-user.cjs +497 -0
  20. package/dist/compositions/app-user.cjs.map +1 -0
  21. package/dist/compositions/app-user.d.cts +18 -0
  22. package/dist/compositions/app-user.d.ts +18 -0
  23. package/dist/compositions/app-user.js +469 -0
  24. package/dist/compositions/app-user.js.map +1 -0
  25. package/dist/index.cjs +1151 -312
  26. package/dist/index.cjs.map +1 -1
  27. package/dist/index.d.cts +146 -13
  28. package/dist/index.d.ts +146 -13
  29. package/dist/index.js +1109 -295
  30. package/dist/index.js.map +1 -1
  31. package/dist/modality/index.cjs +27 -56
  32. package/dist/modality/index.cjs.map +1 -1
  33. package/dist/modality/index.d.cts +13 -32
  34. package/dist/modality/index.d.ts +13 -32
  35. package/dist/modality/index.js +27 -55
  36. package/dist/modality/index.js.map +1 -1
  37. package/dist/models/index.cjs +508 -0
  38. package/dist/models/index.cjs.map +1 -0
  39. package/dist/models/index.d.cts +22 -0
  40. package/dist/models/index.d.ts +22 -0
  41. package/dist/models/index.js +486 -0
  42. package/dist/models/index.js.map +1 -0
  43. package/dist/styles.css +1 -1
  44. package/dist/theme-VMRlhqST.d.cts +9 -0
  45. package/dist/theme-VMRlhqST.d.ts +9 -0
  46. package/dist/wallet/index.cjs +17 -5
  47. package/dist/wallet/index.cjs.map +1 -1
  48. package/dist/wallet/index.d.cts +2 -2
  49. package/dist/wallet/index.d.ts +2 -2
  50. package/dist/wallet/index.js +17 -5
  51. package/dist/wallet/index.js.map +1 -1
  52. package/dist/wallet/sdk.cjs +6 -3
  53. package/dist/wallet/sdk.cjs.map +1 -1
  54. package/dist/wallet/sdk.js +6 -3
  55. package/dist/wallet/sdk.js.map +1 -1
  56. package/package.json +17 -10
  57. package/dist/showcase/index.cjs +0 -2851
  58. package/dist/showcase/index.cjs.map +0 -1
  59. package/dist/showcase/index.d.cts +0 -19
  60. package/dist/showcase/index.d.ts +0 -19
  61. package/dist/showcase/index.js +0 -2839
  62. package/dist/showcase/index.js.map +0 -1
  63. package/dist/theme-DfHMjWB7.d.cts +0 -16
  64. package/dist/theme-DfHMjWB7.d.ts +0 -16
  65. package/dist/wallet.css +0 -73
package/dist/styles.css CHANGED
@@ -1,2 +1,2 @@
1
1
  /*! tailwindcss v4.3.0 | 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-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-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--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}}}@layer theme{:root,:host{--polli-font-serif:ui-serif, Georgia, Cambria, "Times New Roman", Times, serif;--polli-font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--polli-color-red-400:oklch(70.4% .191 22.216);--polli-color-amber-100:oklch(96.2% .059 95.617);--polli-color-amber-200:oklch(92.4% .12 95.746);--polli-color-amber-800:oklch(47.3% .137 46.201);--polli-color-amber-900:oklch(41.4% .112 45.904);--polli-color-green-100:oklch(96.2% .044 156.743);--polli-color-green-200:oklch(92.5% .084 155.995);--polli-color-green-700:oklch(52.7% .154 150.069);--polli-color-green-800:oklch(44.8% .119 151.328);--polli-color-green-900:oklch(39.3% .095 152.535);--polli-color-green-950:oklch(26.6% .065 152.934);--polli-color-emerald-100:oklch(95% .052 163.051);--polli-color-teal-100:oklch(95.3% .051 180.801);--polli-color-teal-200:oklch(91% .096 180.426);--polli-color-teal-800:oklch(43.7% .078 188.216);--polli-color-teal-900:oklch(38.6% .063 188.416);--polli-color-blue-100:oklch(93.2% .032 255.585);--polli-color-blue-200:oklch(88.2% .059 254.128);--polli-color-blue-800:oklch(42.4% .199 265.638);--polli-color-blue-900:oklch(37.9% .146 265.522);--polli-color-violet-100:oklch(94.3% .029 294.588);--polli-color-violet-200:oklch(89.4% .057 293.283);--polli-color-violet-800:oklch(43.2% .232 292.759);--polli-color-violet-900:oklch(38% .189 293.745);--polli-color-pink-100:oklch(94.8% .028 342.258);--polli-color-pink-200:oklch(89.9% .061 343.231);--polli-color-pink-800:oklch(45.9% .187 3.815);--polli-color-pink-900:oklch(40.8% .153 2.432);--polli-color-gray-100:oklch(96.7% .003 264.542);--polli-color-gray-200:oklch(92.8% .006 264.531);--polli-color-gray-300:oklch(87.2% .01 258.338);--polli-color-gray-400:oklch(70.7% .022 261.325);--polli-color-gray-600:oklch(44.6% .03 256.802);--polli-color-gray-700:oklch(37.3% .034 259.733);--polli-color-gray-900:oklch(21% .034 264.665);--polli-color-gray-950:oklch(13% .028 261.692);--polli-color-white:#fff;--polli-spacing:.25rem;--polli-container-md:28rem;--polli-container-xl:36rem;--polli-container-2xl:42rem;--polli-container-3xl:48rem;--polli-text-xs:.75rem;--polli-text-xs--line-height:calc(1 / .75);--polli-text-sm:.875rem;--polli-text-sm--line-height:calc(1.25 / .875);--polli-text-base:16px;--polli-text-base--line-height:calc(1.5 / 1);--polli-text-xl:1.25rem;--polli-text-xl--line-height:calc(1.75 / 1.25);--polli-text-2xl:1.5rem;--polli-text-2xl--line-height:calc(2 / 1.5);--polli-text-3xl:1.875rem;--polli-text-3xl--line-height:calc(2.25 / 1.875);--polli-text-4xl:2.25rem;--polli-text-4xl--line-height:calc(2.5 / 2.25);--polli-font-weight-medium:500;--polli-font-weight-semibold:600;--polli-font-weight-bold:700;--polli-font-weight-black:900;--polli-tracking-tight:-.025em;--polli-tracking-wide:.025em;--polli-leading-tight:1.25;--polli-leading-normal:1.5;--polli-radius-md:.375rem;--polli-radius-lg:.5rem;--polli-radius-xl:.75rem;--polli-radius-2xl:1rem;--polli-ease-out:cubic-bezier(0, 0, .2, 1);--polli-default-transition-duration:.15s;--polli-default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--polli-font-heading:"LCT Mogi", ui-sans-serif, sans-serif;--polli-font-subheading:"Fraunces", ui-serif, serif;--polli-font-body:"Uncut Sans", ui-sans-serif, sans-serif;--polli-font-pixel:"Pixelify Sans", ui-monospace, monospace;--polli-text-micro:10px;--polli-color-surface-white:var(--polli-color-surface-white)}}@layer base,components;@layer utilities{.polli\:pointer-events-none{pointer-events:none}.polli\:invisible{visibility:hidden}.polli\:visible{visibility:visible}.polli\:sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.polli\:absolute{position:absolute}.polli\:fixed{position:fixed}.polli\:relative{position:relative}.polli\:sticky{position:sticky}.polli\:inset-0{inset:calc(var(--polli-spacing) * 0)}.polli\:-top-8{top:calc(var(--polli-spacing) * -8)}.polli\:top-0{top:calc(var(--polli-spacing) * 0)}.polli\:left-1\/2{left:50%}.polli\:z-20{z-index:20}.polli\:z-50{z-index:50}.polli\:z-\[100\]{z-index:100}.polli\:z-\[110\]{z-index:110}.polli\:col-span-full{grid-column:1/-1}.polli\:mx-auto{margin-inline:auto}.polli\:my-auto{margin-block:auto}.polli\:mt-1{margin-top:calc(var(--polli-spacing) * 1)}.polli\:mt-1\.5{margin-top:calc(var(--polli-spacing) * 1.5)}.polli\:mt-2{margin-top:calc(var(--polli-spacing) * 2)}.polli\:mt-5{margin-top:calc(var(--polli-spacing) * 5)}.polli\:mb-1{margin-bottom:calc(var(--polli-spacing) * 1)}.polli\:mb-2{margin-bottom:calc(var(--polli-spacing) * 2)}.polli\:mb-3{margin-bottom:calc(var(--polli-spacing) * 3)}.polli\:ml-1{margin-left:calc(var(--polli-spacing) * 1)}.polli\:box-border{box-sizing:border-box}.polli\:block{display:block}.polli\:contents{display:contents}.polli\:flex{display:flex}.polli\:grid{display:grid}.polli\:inline-block{display:inline-block}.polli\:inline-flex{display:inline-flex}.polli\:aspect-square{aspect-ratio:1}.polli\:h-2{height:calc(var(--polli-spacing) * 2)}.polli\:h-3{height:calc(var(--polli-spacing) * 3)}.polli\:h-3\.5{height:calc(var(--polli-spacing) * 3.5)}.polli\:h-4{height:calc(var(--polli-spacing) * 4)}.polli\:h-5{height:calc(var(--polli-spacing) * 5)}.polli\:h-6{height:calc(var(--polli-spacing) * 6)}.polli\:h-7{height:calc(var(--polli-spacing) * 7)}.polli\:h-8{height:calc(var(--polli-spacing) * 8)}.polli\:h-9{height:calc(var(--polli-spacing) * 9)}.polli\:h-10{height:calc(var(--polli-spacing) * 10)}.polli\:h-12{height:calc(var(--polli-spacing) * 12)}.polli\:h-44{height:calc(var(--polli-spacing) * 44)}.polli\:h-dvh{height:100dvh}.polli\:max-h-64{max-height:calc(var(--polli-spacing) * 64)}.polli\:min-h-0{min-height:calc(var(--polli-spacing) * 0)}.polli\:min-h-8{min-height:calc(var(--polli-spacing) * 8)}.polli\:w-2{width:calc(var(--polli-spacing) * 2)}.polli\:w-3{width:calc(var(--polli-spacing) * 3)}.polli\:w-3\.5{width:calc(var(--polli-spacing) * 3.5)}.polli\:w-4{width:calc(var(--polli-spacing) * 4)}.polli\:w-5{width:calc(var(--polli-spacing) * 5)}.polli\:w-6{width:calc(var(--polli-spacing) * 6)}.polli\:w-8{width:calc(var(--polli-spacing) * 8)}.polli\:w-9{width:calc(var(--polli-spacing) * 9)}.polli\:w-10{width:calc(var(--polli-spacing) * 10)}.polli\:w-12{width:calc(var(--polli-spacing) * 12)}.polli\:w-36{width:calc(var(--polli-spacing) * 36)}.polli\:w-44{width:calc(var(--polli-spacing) * 44)}.polli\:w-56{width:calc(var(--polli-spacing) * 56)}.polli\:w-80{width:calc(var(--polli-spacing) * 80)}.polli\:w-\[304px\]{width:304px}.polli\:w-full{width:100%}.polli\:w-max{width:max-content}.polli\:max-w-2xl{max-width:var(--polli-container-2xl)}.polli\:max-w-3xl{max-width:var(--polli-container-3xl)}.polli\:max-w-\[1220px\]{max-width:1220px}.polli\:max-w-full{max-width:100%}.polli\:max-w-md{max-width:var(--polli-container-md)}.polli\:max-w-xl{max-width:var(--polli-container-xl)}.polli\:min-w-0{min-width:calc(var(--polli-spacing) * 0)}.polli\:min-w-\[140px\]{min-width:140px}.polli\:min-w-\[150px\]{min-width:150px}.polli\:min-w-\[320px\]{min-width:320px}.polli\:flex-1{flex:1}.polli\:flex-shrink-0,.polli\:shrink-0{flex-shrink:0}.polli\:-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.polli\:translate-x-1{--tw-translate-x:calc(var(--polli-spacing) * 1);translate:var(--tw-translate-x) var(--tw-translate-y)}.polli\:translate-x-6{--tw-translate-x:calc(var(--polli-spacing) * 6);translate:var(--tw-translate-x) var(--tw-translate-y)}.polli\:rotate-180{rotate:180deg}.polli\:cursor-help{cursor:help}.polli\:cursor-not-allowed{cursor:not-allowed}.polli\:cursor-pointer{cursor:pointer}.polli\:scroll-mt-24{scroll-margin-top:calc(var(--polli-spacing) * 24)}.polli\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.polli\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.polli\:grid-cols-\[repeat\(auto-fit\,minmax\(150px\,1fr\)\)\]{grid-template-columns:repeat(auto-fit,minmax(150px,1fr))}.polli\:grid-cols-\[repeat\(auto-fit\,minmax\(210px\,1fr\)\)\]{grid-template-columns:repeat(auto-fit,minmax(210px,1fr))}.polli\:grid-cols-\[repeat\(auto-fit\,minmax\(220px\,1fr\)\)\]{grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}.polli\:grid-cols-\[repeat\(auto-fit\,minmax\(230px\,1fr\)\)\]{grid-template-columns:repeat(auto-fit,minmax(230px,1fr))}.polli\:grid-cols-\[repeat\(auto-fit\,minmax\(260px\,1fr\)\)\]{grid-template-columns:repeat(auto-fit,minmax(260px,1fr))}.polli\:flex-col{flex-direction:column}.polli\:flex-wrap{flex-wrap:wrap}.polli\:items-baseline{align-items:baseline}.polli\:items-center{align-items:center}.polli\:items-start{align-items:flex-start}.polli\:justify-between{justify-content:space-between}.polli\:justify-center{justify-content:center}.polli\:justify-end{justify-content:flex-end}.polli\:justify-start{justify-content:flex-start}.polli\:gap-1{gap:calc(var(--polli-spacing) * 1)}.polli\:gap-1\.5{gap:calc(var(--polli-spacing) * 1.5)}.polli\:gap-2{gap:calc(var(--polli-spacing) * 2)}.polli\:gap-3{gap:calc(var(--polli-spacing) * 3)}.polli\:gap-4{gap:calc(var(--polli-spacing) * 4)}.polli\:gap-5{gap:calc(var(--polli-spacing) * 5)}.polli\:gap-8{gap:calc(var(--polli-spacing) * 8)}.polli\:gap-10{gap:calc(var(--polli-spacing) * 10)}.polli\:gap-x-4{column-gap:calc(var(--polli-spacing) * 4)}.polli\:gap-y-1{row-gap:calc(var(--polli-spacing) * 1)}.polli\:self-center{align-self:center}.polli\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.polli\:overflow-auto{overflow:auto}.polli\:overflow-hidden{overflow:hidden}.polli\:overflow-x-auto{overflow-x:auto}.polli\:overflow-x-hidden{overflow-x:hidden}.polli\:overflow-y-auto{overflow-y:auto}.polli\:overflow-y-hidden{overflow-y:hidden}.polli\:rounded{border-radius:.25rem}.polli\:rounded-2xl{border-radius:var(--polli-radius-2xl)}.polli\:rounded-full{border-radius:3.40282e38px}.polli\:rounded-lg{border-radius:var(--polli-radius-lg)}.polli\:rounded-md{border-radius:var(--polli-radius-md)}.polli\:rounded-xl{border-radius:var(--polli-radius-xl)}.polli\:rounded-t-lg{border-top-left-radius:var(--polli-radius-lg);border-top-right-radius:var(--polli-radius-lg)}.polli\:border{border-style:var(--tw-border-style);border-width:1px}.polli\:border-2{border-style:var(--tw-border-style);border-width:2px}.polli\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.polli\:border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.polli\:border-gray-300{border-color:var(--polli-color-gray-300)}.polli\:border-gray-400\/70{border-color:var(--polli-color-gray-400)}@supports (color:color-mix(in lab, red, red)){.polli\:border-gray-400\/70{border-color:color-mix(in oklab, var(--polli-color-gray-400) 70%, transparent)}}.polli\:border-green-950\/10{border-color:var(--polli-color-green-950)}@supports (color:color-mix(in lab, red, red)){.polli\:border-green-950\/10{border-color:color-mix(in oklab, var(--polli-color-green-950) 10%, transparent)}}.polli\:border-intent-danger-border{border-color:var(--polli-color-danger-border)}.polli\:border-red-400{border-color:var(--polli-color-red-400)}.polli\:border-theme-border{border-color:var(--polli-color-border)}.polli\:bg-\[oklch\(0\.88_0\.12_25\)\]{background-color:oklch(88% .12 25)}.polli\:bg-\[oklch\(0\.88_0\.12_158\)\]{background-color:oklch(88% .12 158)}.polli\:bg-\[oklch\(0\.93_0\.06_300\)\]{background-color:oklch(93% .06 300)}.polli\:bg-\[oklch\(0\.935_0\.06_158\)\]{background-color:oklch(93.5% .06 158)}.polli\:bg-amber-200{background-color:var(--polli-color-amber-200)}.polli\:bg-blue-200{background-color:var(--polli-color-blue-200)}.polli\:bg-current{background-color:currentColor}.polli\:bg-emerald-100{background-color:var(--polli-color-emerald-100)}.polli\:bg-gray-100,.polli\:bg-gray-100\/80{background-color:var(--polli-color-gray-100)}@supports (color:color-mix(in lab, red, red)){.polli\:bg-gray-100\/80{background-color:color-mix(in oklab, var(--polli-color-gray-100) 80%, transparent)}}.polli\:bg-gray-200{background-color:var(--polli-color-gray-200)}.polli\:bg-gray-950\/50{background-color:var(--polli-color-gray-950)}@supports (color:color-mix(in lab, red, red)){.polli\:bg-gray-950\/50{background-color:color-mix(in oklab, var(--polli-color-gray-950) 50%, transparent)}}.polli\:bg-green-100{background-color:var(--polli-color-green-100)}.polli\:bg-green-200{background-color:var(--polli-color-green-200)}.polli\:bg-intent-danger-bg-light{background-color:var(--polli-color-danger-bg-light)}.polli\:bg-pink-200{background-color:var(--polli-color-pink-200)}.polli\:bg-surface-white{background-color:var(--polli-color-surface-white)}.polli\:bg-teal-200{background-color:var(--polli-color-teal-200)}.polli\:bg-theme-bg-active{background-color:var(--polli-color-bg-active)}.polli\:bg-theme-bg-hover{background-color:var(--polli-color-bg-hover)}.polli\:bg-theme-bg-pale{background-color:var(--polli-color-bg-pale)}.polli\:bg-theme-bg-subtle{background-color:var(--polli-color-bg-subtle)}.polli\:bg-theme-border{background-color:var(--polli-color-border)}.polli\:bg-theme-text-base{background-color:var(--polli-color-text-base)}.polli\:bg-theme-text-muted{background-color:var(--polli-color-text-muted)}.polli\:bg-theme-text-soft{background-color:var(--polli-color-text-soft)}.polli\:bg-theme-text-strong{background-color:var(--polli-color-text-strong)}.polli\:bg-violet-200{background-color:var(--polli-color-violet-200)}.polli\:bg-white{background-color:var(--polli-color-white)}.polli\:p-2{padding:calc(var(--polli-spacing) * 2)}.polli\:p-3{padding:calc(var(--polli-spacing) * 3)}.polli\:p-4{padding:calc(var(--polli-spacing) * 4)}.polli\:p-6{padding:calc(var(--polli-spacing) * 6)}.polli\:px-2{padding-inline:calc(var(--polli-spacing) * 2)}.polli\:px-2\.5{padding-inline:calc(var(--polli-spacing) * 2.5)}.polli\:px-3{padding-inline:calc(var(--polli-spacing) * 3)}.polli\:px-4{padding-inline:calc(var(--polli-spacing) * 4)}.polli\:px-5{padding-inline:calc(var(--polli-spacing) * 5)}.polli\:px-6{padding-inline:calc(var(--polli-spacing) * 6)}.polli\:px-8{padding-inline:calc(var(--polli-spacing) * 8)}.polli\:py-0\.5{padding-block:calc(var(--polli-spacing) * .5)}.polli\:py-1{padding-block:calc(var(--polli-spacing) * 1)}.polli\:py-1\.5{padding-block:calc(var(--polli-spacing) * 1.5)}.polli\:py-2{padding-block:calc(var(--polli-spacing) * 2)}.polli\:py-3{padding-block:calc(var(--polli-spacing) * 3)}.polli\:py-4{padding-block:calc(var(--polli-spacing) * 4)}.polli\:pt-0\.5{padding-top:calc(var(--polli-spacing) * .5)}.polli\:pt-1{padding-top:calc(var(--polli-spacing) * 1)}.polli\:pt-1\.5{padding-top:calc(var(--polli-spacing) * 1.5)}.polli\:pt-2{padding-top:calc(var(--polli-spacing) * 2)}.polli\:pt-3{padding-top:calc(var(--polli-spacing) * 3)}.polli\:pt-6{padding-top:calc(var(--polli-spacing) * 6)}.polli\:pt-8{padding-top:calc(var(--polli-spacing) * 8)}.polli\:pb-1{padding-bottom:calc(var(--polli-spacing) * 1)}.polli\:pb-2{padding-bottom:calc(var(--polli-spacing) * 2)}.polli\:pb-3{padding-bottom:calc(var(--polli-spacing) * 3)}.polli\:pb-8{padding-bottom:calc(var(--polli-spacing) * 8)}.polli\:pb-10{padding-bottom:calc(var(--polli-spacing) * 10)}.polli\:text-center{text-align:center}.polli\:text-left{text-align:left}.polli\:font-body{font-family:Uncut Sans,ui-sans-serif,sans-serif}.polli\:font-heading{font-family:LCT Mogi,ui-sans-serif,sans-serif}.polli\:font-mono{font-family:var(--polli-font-mono)}.polli\:font-pixel{font-family:Pixelify Sans,ui-monospace,monospace}.polli\:font-serif{font-family:var(--polli-font-serif)}.polli\:font-subheading{font-family:Fraunces,ui-serif,serif}.polli\:text-2xl{font-size:var(--polli-text-2xl);line-height:var(--tw-leading,var(--polli-text-2xl--line-height))}.polli\:text-3xl{font-size:var(--polli-text-3xl);line-height:var(--tw-leading,var(--polli-text-3xl--line-height))}.polli\:text-4xl{font-size:var(--polli-text-4xl);line-height:var(--tw-leading,var(--polli-text-4xl--line-height))}.polli\:text-base{font-size:16px;line-height:var(--tw-leading,var(--polli-text-base--line-height))}.polli\:text-sm{font-size:var(--polli-text-sm);line-height:var(--tw-leading,var(--polli-text-sm--line-height))}.polli\:text-xl{font-size:var(--polli-text-xl);line-height:var(--tw-leading,var(--polli-text-xl--line-height))}.polli\:text-xs{font-size:var(--polli-text-xs);line-height:var(--tw-leading,var(--polli-text-xs--line-height))}.polli\:text-micro{font-size:10px}.polli\:leading-6{--tw-leading:calc(var(--polli-spacing) * 6);line-height:calc(var(--polli-spacing) * 6)}.polli\:leading-none{--tw-leading:1;line-height:1}.polli\:leading-normal{--tw-leading:var(--polli-leading-normal);line-height:var(--polli-leading-normal)}.polli\:leading-tight{--tw-leading:var(--polli-leading-tight);line-height:var(--polli-leading-tight)}.polli\:font-black{--tw-font-weight:var(--polli-font-weight-black);font-weight:var(--polli-font-weight-black)}.polli\:font-bold{--tw-font-weight:var(--polli-font-weight-bold);font-weight:var(--polli-font-weight-bold)}.polli\:font-medium{--tw-font-weight:var(--polli-font-weight-medium);font-weight:var(--polli-font-weight-medium)}.polli\:font-semibold{--tw-font-weight:var(--polli-font-weight-semibold);font-weight:var(--polli-font-weight-semibold)}.polli\:tracking-tight{--tw-tracking:var(--polli-tracking-tight);letter-spacing:var(--polli-tracking-tight)}.polli\:tracking-wide{--tw-tracking:var(--polli-tracking-wide);letter-spacing:var(--polli-tracking-wide)}.polli\:\[overflow-wrap\:anywhere\]{overflow-wrap:anywhere}.polli\:break-words{overflow-wrap:break-word}.polli\:whitespace-nowrap{white-space:nowrap}.polli\:whitespace-pre-line{white-space:pre-line}.polli\:text-\[oklch\(0\.42_0\.18_300\)\]{color:oklch(42% .18 300)}.polli\:text-\[oklch\(0\.46_0\.13_158\)\]{color:oklch(46% .13 158)}.polli\:text-amber-800,.polli\:text-amber-800\/70{color:var(--polli-color-amber-800)}@supports (color:color-mix(in lab, red, red)){.polli\:text-amber-800\/70{color:color-mix(in oklab, var(--polli-color-amber-800) 70%, transparent)}}.polli\:text-amber-900{color:var(--polli-color-amber-900)}.polli\:text-blue-800{color:var(--polli-color-blue-800)}.polli\:text-blue-900{color:var(--polli-color-blue-900)}.polli\:text-gray-300{color:var(--polli-color-gray-300)}.polli\:text-gray-400{color:var(--polli-color-gray-400)}.polli\:text-gray-600{color:var(--polli-color-gray-600)}.polli\:text-gray-700{color:var(--polli-color-gray-700)}.polli\:text-gray-900{color:var(--polli-color-gray-900)}.polli\:text-green-700{color:var(--polli-color-green-700)}.polli\:text-green-800{color:var(--polli-color-green-800)}.polli\:text-green-900{color:var(--polli-color-green-900)}.polli\:text-intent-danger-text{color:var(--polli-color-danger-text)}.polli\:text-pink-800{color:var(--polli-color-pink-800)}.polli\:text-pink-900{color:var(--polli-color-pink-900)}.polli\:text-teal-800{color:var(--polli-color-teal-800)}.polli\:text-teal-900{color:var(--polli-color-teal-900)}.polli\:text-theme-text-base{color:var(--polli-color-text-base)}.polli\:text-theme-text-muted{color:var(--polli-color-text-muted)}.polli\:text-theme-text-soft,.polli\:text-theme-text-soft\/60{color:var(--polli-color-text-soft)}@supports (color:color-mix(in lab, red, red)){.polli\:text-theme-text-soft\/60{color:color-mix(in oklab, var(--polli-color-text-soft) 60%, transparent)}}.polli\:text-theme-text-strong{color:var(--polli-color-text-strong)}.polli\:text-violet-800{color:var(--polli-color-violet-800)}.polli\:text-violet-900{color:var(--polli-color-violet-900)}.polli\:capitalize{text-transform:capitalize}.polli\:uppercase{text-transform:uppercase}.polli\: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,)}.polli\:underline{text-decoration-line:underline}.polli\:decoration-dotted{text-decoration-style:dotted}.polli\:placeholder-green-950::placeholder{color:var(--polli-color-green-950)}.polli\:opacity-0{opacity:0}.polli\:opacity-30{opacity:.3}.polli\:opacity-50{opacity:.5}.polli\:opacity-60{opacity:.6}.polli\:opacity-100{opacity:1}.polli\: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)}.polli\: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)}.polli\: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)}.polli\:ring-theme-border{--tw-ring-color:var(--polli-color-border)}.polli\:backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.polli\:transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--polli-default-transition-timing-function));transition-duration:var(--tw-duration,var(--polli-default-transition-duration))}.polli\:transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--polli-default-transition-timing-function));transition-duration:var(--tw-duration,var(--polli-default-transition-duration))}.polli\: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(--polli-default-transition-timing-function));transition-duration:var(--tw-duration,var(--polli-default-transition-duration))}.polli\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--polli-default-transition-timing-function));transition-duration:var(--tw-duration,var(--polli-default-transition-duration))}.polli\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--polli-default-transition-timing-function));transition-duration:var(--tw-duration,var(--polli-default-transition-duration))}.polli\:duration-150{--tw-duration:.15s;transition-duration:.15s}.polli\:duration-200{--tw-duration:.2s;transition-duration:.2s}.polli\:ease-out{--tw-ease:var(--polli-ease-out);transition-timing-function:var(--polli-ease-out)}.polli\:select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.polli\:group-hover\:opacity-100:is(:where(.polli\:group):hover *){opacity:1}}.polli\:last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.polli\:last\:pb-0:last-child{padding-bottom:calc(var(--polli-spacing) * 0)}@media (hover:hover){.polli\:hover\:bg-\[oklch\(0\.88_0\.075_25\)\]:hover{background-color:oklch(88% .075 25)}.polli\:hover\:bg-amber-100:hover{background-color:var(--polli-color-amber-100)}.polli\:hover\:bg-blue-100:hover{background-color:var(--polli-color-blue-100)}.polli\:hover\:bg-green-100:hover{background-color:var(--polli-color-green-100)}.polli\:hover\:bg-pink-100:hover{background-color:var(--polli-color-pink-100)}.polli\:hover\:bg-teal-100:hover{background-color:var(--polli-color-teal-100)}.polli\:hover\:bg-theme-bg-active:hover{background-color:var(--polli-color-bg-active)}.polli\:hover\:bg-theme-bg-hover:hover{background-color:var(--polli-color-bg-hover)}.polli\:hover\:bg-theme-bg-pale:hover{background-color:var(--polli-color-bg-pale)}.polli\:hover\:bg-theme-bg-subtle:hover{background-color:var(--polli-color-bg-subtle)}.polli\:hover\:bg-transparent:hover{background-color:#0000}.polli\:hover\:bg-violet-100:hover{background-color:var(--polli-color-violet-100)}.polli\:hover\:text-amber-900:hover{color:var(--polli-color-amber-900)}.polli\:hover\:text-blue-900:hover{color:var(--polli-color-blue-900)}.polli\:hover\:text-green-900:hover{color:var(--polli-color-green-900)}.polli\:hover\:text-pink-900:hover{color:var(--polli-color-pink-900)}.polli\:hover\:text-teal-900:hover{color:var(--polli-color-teal-900)}.polli\:hover\:text-theme-text-strong:hover{color:var(--polli-color-text-strong)}.polli\:hover\:text-violet-900:hover{color:var(--polli-color-violet-900)}.polli\:hover\:brightness-105:hover{--tw-brightness:brightness(105%);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,)}.polli\:hover\:filter:hover{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,)}}.polli\:focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.polli\:disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.polli\:disabled\:opacity-50:disabled{opacity:.5}.polli\:disabled\:opacity-60:disabled{opacity:.6}@media (min-width:48rem){.polli\:md\:w-auto{width:auto}.polli\:md\:flex-row{flex-direction:row}.polli\:md\:items-start{align-items:flex-start}.polli\:md\:justify-between{justify-content:space-between}}}@font-face{font-family:LCT Mogi;src:url(./fonts/lct-mogi-a.woff2)format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Fraunces;src:url(./fonts/fraunces-soft-bold.woff2)format("woff2");font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:Uncut Sans;src:url(./fonts/uncut-sans-variable.woff2)format("woff2-variations");font-weight:300 700;font-style:normal;font-display:swap}:root{--polli-font-heading:"LCT Mogi", ui-sans-serif, sans-serif;--polli-font-subheading:"Fraunces", ui-serif, serif;--polli-font-body:"Uncut Sans", ui-sans-serif, sans-serif;--polli-font-pixel:"Pixelify Sans", ui-monospace, monospace;--polli-text-micro:10px;--polli-text-base:16px;--polli-color-surface-white:oklch(100% 0 0/.8)}[data-theme=amber]{--polli-color-text-base:oklch(41.4% .112 45.904);--polli-color-text-strong:oklch(27.9% .077 45.635);--polli-color-text-soft:oklch(55.5% .163 48.998);--polli-color-text-muted:oklch(62% .045 45.904);--polli-color-border:oklch(87.9% .169 91.605);--polli-color-bg-subtle:oklch(98.7% .022 95.277/.7);--polli-color-bg-active:oklch(92.4% .12 95.746);--polli-color-bg-hover:oklch(87.9% .169 91.605);--polli-color-bg-pale:oklch(96.2% .059 95.617);--polli-color-scrollbar-thumb:oklch(82.8% .189 84.429/.7)}[data-theme=blue]{--polli-color-text-base:oklch(37.9% .146 265.522);--polli-color-text-strong:oklch(28.2% .091 267.935);--polli-color-text-soft:oklch(48.8% .243 264.376);--polli-color-text-muted:oklch(62% .058 265.522);--polli-color-border:oklch(80.9% .105 251.813);--polli-color-bg-subtle:oklch(97% .014 254.604/.7);--polli-color-bg-active:oklch(88.2% .059 254.128);--polli-color-bg-hover:oklch(80.9% .105 251.813);--polli-color-bg-pale:oklch(93.2% .032 255.585);--polli-color-scrollbar-thumb:oklch(70.7% .165 254.624/.7)}[data-theme=pink]{--polli-color-text-base:oklch(40.8% .153 2.432);--polli-color-text-strong:oklch(28.4% .109 3.907);--polli-color-text-soft:oklch(52.5% .223 3.958);--polli-color-text-muted:oklch(62% .061 2.432);--polli-color-border:oklch(82.3% .12 346.018);--polli-color-bg-subtle:oklch(97.1% .014 343.198/.7);--polli-color-bg-active:oklch(89.9% .061 343.231);--polli-color-bg-hover:oklch(82.3% .12 346.018);--polli-color-bg-pale:oklch(94.8% .028 342.258);--polli-color-scrollbar-thumb:oklch(71.8% .202 349.761/.7)}[data-theme=teal]{--polli-color-text-base:oklch(38.6% .063 188.416);--polli-color-text-strong:oklch(27.7% .046 192.524);--polli-color-text-soft:oklch(51.1% .096 186.391);--polli-color-text-muted:oklch(62% .025 188.416);--polli-color-border:oklch(85.5% .138 181.071);--polli-color-bg-subtle:oklch(98.4% .014 180.72/.7);--polli-color-bg-active:oklch(91% .096 180.426);--polli-color-bg-hover:oklch(85.5% .138 181.071);--polli-color-bg-pale:oklch(95.3% .051 180.801);--polli-color-scrollbar-thumb:oklch(70.4% .14 182.503/.7)}[data-theme=violet]{--polli-color-text-base:oklch(38% .189 293.745);--polli-color-text-strong:oklch(28.3% .141 291.089);--polli-color-text-soft:oklch(49.1% .27 292.581);--polli-color-text-muted:oklch(62% .076 293.745);--polli-color-border:oklch(81.1% .111 293.571);--polli-color-bg-subtle:oklch(96.9% .016 293.756/.7);--polli-color-bg-active:oklch(89.4% .057 293.283);--polli-color-bg-hover:oklch(81.1% .111 293.571);--polli-color-bg-pale:oklch(94.3% .029 294.588);--polli-color-scrollbar-thumb:oklch(70.2% .183 293.541/.7)}:root,[data-theme=green]{--polli-color-text-base:oklch(39.3% .095 152.535);--polli-color-text-strong:oklch(26.6% .065 152.934);--polli-color-text-soft:oklch(52.7% .154 150.069);--polli-color-text-muted:oklch(62% .038 152.535);--polli-color-border:oklch(87.1% .15 154.449);--polli-color-bg-subtle:oklch(98.2% .018 155.826/.7);--polli-color-bg-active:oklch(92.5% .084 155.995);--polli-color-bg-hover:oklch(87.1% .15 154.449);--polli-color-bg-pale:oklch(96.2% .044 156.743);--polli-color-scrollbar-thumb:oklch(79.2% .209 151.711/.7)}:root{--polli-color-danger-bg-light:oklch(93.5% .045 25);--polli-color-danger-text:oklch(48% .18 25);--polli-color-danger-border:oklch(78% .115 25)}.polli-scrollbar-subtle{scrollbar-width:thin;scrollbar-color:transparent transparent}.polli-scrollbar-subtle::-webkit-scrollbar{width:12px;height:12px}.polli-scrollbar-subtle::-webkit-scrollbar-track{background:0 0}.polli-scrollbar-subtle::-webkit-scrollbar-thumb{background-color:#0000;background-clip:content-box;border:3px solid #0000;border-radius:9999px;transition:background-color .16s}.polli-scrollbar-subtle[data-scrollbar-active=true]{scrollbar-color:var(--polli-color-scrollbar-thumb) transparent}.polli-scrollbar-subtle[data-scrollbar-active=true]::-webkit-scrollbar-thumb{background-color:var(--polli-color-scrollbar-thumb)}.polli-input-number-clean::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.polli-input-number-clean::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.polli-input-number-clean{-moz-appearance:textfield}.polli-slider{--polli-slider-thumb-shadow-fallback:var(--polli-color-text-strong)}@supports (color:color-mix(in lab, red, red)){.polli-slider{--polli-slider-thumb-shadow-fallback:color-mix(in oklab, var(--polli-color-text-strong) 35%, transparent)}}.polli-slider{--polli-slider-progress-value:var(--polli-slider-progress,0%);--polli-slider-fill-value:var(--polli-slider-fill,var(--polli-color-bg-active));--polli-slider-track-value:var(--polli-slider-track,var(--polli-color-bg-pale));--polli-slider-thumb-border-value:var(--polli-slider-thumb-border,var(--polli-color-text-strong));--polli-slider-thumb-shadow-value:var(--polli-slider-thumb-shadow,var(--polli-slider-thumb-shadow-fallback));cursor:grab;appearance:none;background:linear-gradient(to right, var(--polli-slider-fill-value) 0%, var(--polli-slider-fill-value) var(--polli-slider-progress-value), var(--polli-slider-track-value) var(--polli-slider-progress-value), var(--polli-slider-track-value) 100%);border-radius:9999px;outline:none;width:100%;height:.5rem;transition:opacity .15s,filter .15s}.polli-slider:active{cursor:grabbing}.polli-slider:disabled{cursor:not-allowed;opacity:.6}.polli-slider:focus-visible{box-shadow:0 0 0 2px var(--polli-slider-fill-value), 0 0 0 4px var(--polli-color-surface-white)}.polli-slider::-webkit-slider-runnable-track{background:0 0;border-radius:9999px;height:.5rem}.polli-slider::-moz-range-track{background:0 0;border-radius:9999px;height:.5rem}.polli-slider::-webkit-slider-thumb{appearance:none;border:3px solid var(--polli-slider-thumb-border-value);width:22px;height:22px;box-shadow:0 2px 6px var(--polli-slider-thumb-shadow-value);background:#fff;border-radius:9999px;margin-top:-7px;transition:transform .15s}.polli-slider::-moz-range-thumb{border:3px solid var(--polli-slider-thumb-border-value);width:22px;height:22px;box-shadow:0 2px 6px var(--polli-slider-thumb-shadow-value);background:#fff;border-radius:9999px;transition:transform .15s}.polli-slider:hover::-webkit-slider-thumb{transform:scale(1.1)}.polli-slider:active::-webkit-slider-thumb{transform:scale(1.05)}@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-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-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@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}
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-divide-y-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-duration:initial;--tw-ease:initial;--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}}}@layer theme{:root,:host{--polli-font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--polli-color-gray-100:oklch(96.7% .003 264.542);--polli-color-gray-200:oklch(92.8% .006 264.531);--polli-color-gray-300:oklch(87.2% .01 258.338);--polli-color-gray-400:oklch(70.7% .022 261.325);--polli-color-gray-700:oklch(37.3% .034 259.733);--polli-color-gray-800:oklch(27.8% .033 256.848);--polli-color-gray-900:oklch(21% .034 264.665);--polli-color-gray-950:oklch(13% .028 261.692);--polli-color-white:#fff;--polli-spacing:.25rem;--polli-container-md:28rem;--polli-container-xl:36rem;--polli-container-2xl:42rem;--polli-text-xs:.75rem;--polli-text-xs--line-height:calc(1 / .75);--polli-text-sm:.875rem;--polli-text-sm--line-height:calc(1.25 / .875);--polli-text-base:16px;--polli-text-base--line-height:calc(1.5 / 1);--polli-text-xl:1.25rem;--polli-text-xl--line-height:calc(1.75 / 1.25);--polli-text-2xl:1.5rem;--polli-text-2xl--line-height:calc(2 / 1.5);--polli-text-4xl:2.25rem;--polli-text-4xl--line-height:calc(2.5 / 2.25);--polli-font-weight-medium:500;--polli-font-weight-semibold:600;--polli-font-weight-bold:700;--polli-tracking-tight:-.025em;--polli-tracking-wide:.025em;--polli-leading-tight:1.25;--polli-leading-normal:1.5;--polli-leading-relaxed:1.625;--polli-radius-sm:.25rem;--polli-radius-md:.375rem;--polli-radius-lg:.5rem;--polli-radius-xl:.75rem;--polli-radius-2xl:1rem;--polli-ease-out:cubic-bezier(0, 0, .2, 1);--polli-default-transition-duration:.15s;--polli-default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--polli-font-heading:"LCT Mogi", ui-sans-serif, sans-serif;--polli-font-subheading:"Fraunces", ui-serif, serif;--polli-font-body:"Uncut Sans", ui-sans-serif, sans-serif;--polli-font-pixel:"Pixelify Sans", ui-monospace, monospace;--polli-text-micro:10px;--polli-color-surface-white:var(--polli-color-surface-white);--polli-color-paid-pale:var(--polli-color-paid-pale);--polli-color-paid-soft:var(--polli-color-paid-soft);--polli-color-paid-deep:var(--polli-color-paid-deep);--polli-color-tier-pale:var(--polli-color-tier-pale);--polli-color-tier-soft:var(--polli-color-tier-soft);--polli-color-tier-deep:var(--polli-color-tier-deep)}}@layer base,components;@layer utilities{.polli\:pointer-events-none{pointer-events:none}.polli\:invisible{visibility:hidden}.polli\:visible{visibility:visible}.polli\:sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.polli\:absolute{position:absolute}.polli\:fixed{position:fixed}.polli\:relative{position:relative}.polli\:inset-0{inset:calc(var(--polli-spacing) * 0)}.polli\:-top-2{top:calc(var(--polli-spacing) * -2)}.polli\:-top-8{top:calc(var(--polli-spacing) * -8)}.polli\:top-4{top:calc(var(--polli-spacing) * 4)}.polli\:-right-2{right:calc(var(--polli-spacing) * -2)}.polli\:right-4{right:calc(var(--polli-spacing) * 4)}.polli\:left-1\/2{left:50%}.polli\:z-50{z-index:50}.polli\:z-\[100\]{z-index:100}.polli\:z-\[110\]{z-index:110}.polli\:m-0{margin:calc(var(--polli-spacing) * 0)}.polli\:my-4{margin-block:calc(var(--polli-spacing) * 4)}.polli\:my-6{margin-block:calc(var(--polli-spacing) * 6)}.polli\:my-auto{margin-block:auto}.polli\:mt-0{margin-top:calc(var(--polli-spacing) * 0)}.polli\:mt-1{margin-top:calc(var(--polli-spacing) * 1)}.polli\:mt-1\.5{margin-top:calc(var(--polli-spacing) * 1.5)}.polli\:mt-2{margin-top:calc(var(--polli-spacing) * 2)}.polli\:mt-6{margin-top:calc(var(--polli-spacing) * 6)}.polli\:mt-8{margin-top:calc(var(--polli-spacing) * 8)}.polli\:mb-1{margin-bottom:calc(var(--polli-spacing) * 1)}.polli\:mb-2{margin-bottom:calc(var(--polli-spacing) * 2)}.polli\:mb-3{margin-bottom:calc(var(--polli-spacing) * 3)}.polli\:mb-5{margin-bottom:calc(var(--polli-spacing) * 5)}.polli\:ml-1{margin-left:calc(var(--polli-spacing) * 1)}.polli\:box-border{box-sizing:border-box}.polli\:block{display:block}.polli\:contents{display:contents}.polli\:flex{display:flex}.polli\:grid{display:grid}.polli\:inline-block{display:inline-block}.polli\:inline-flex{display:inline-flex}.polli\:aspect-square{aspect-ratio:1}.polli\:h-2{height:calc(var(--polli-spacing) * 2)}.polli\:h-2\.5{height:calc(var(--polli-spacing) * 2.5)}.polli\:h-3{height:calc(var(--polli-spacing) * 3)}.polli\:h-3\.5{height:calc(var(--polli-spacing) * 3.5)}.polli\:h-4{height:calc(var(--polli-spacing) * 4)}.polli\:h-5{height:calc(var(--polli-spacing) * 5)}.polli\:h-6{height:calc(var(--polli-spacing) * 6)}.polli\:h-7{height:calc(var(--polli-spacing) * 7)}.polli\:h-8{height:calc(var(--polli-spacing) * 8)}.polli\:h-9{height:calc(var(--polli-spacing) * 9)}.polli\:h-12{height:calc(var(--polli-spacing) * 12)}.polli\:h-16{height:calc(var(--polli-spacing) * 16)}.polli\:h-dvh{height:100dvh}.polli\:h-full{height:100%}.polli\:max-h-64{max-height:calc(var(--polli-spacing) * 64)}.polli\:min-h-8{min-height:calc(var(--polli-spacing) * 8)}.polli\:min-h-20{min-height:calc(var(--polli-spacing) * 20)}.polli\:w-2{width:calc(var(--polli-spacing) * 2)}.polli\:w-2\.5{width:calc(var(--polli-spacing) * 2.5)}.polli\:w-3{width:calc(var(--polli-spacing) * 3)}.polli\:w-3\.5{width:calc(var(--polli-spacing) * 3.5)}.polli\:w-4{width:calc(var(--polli-spacing) * 4)}.polli\:w-5{width:calc(var(--polli-spacing) * 5)}.polli\:w-6{width:calc(var(--polli-spacing) * 6)}.polli\:w-8{width:calc(var(--polli-spacing) * 8)}.polli\:w-9{width:calc(var(--polli-spacing) * 9)}.polli\:w-12{width:calc(var(--polli-spacing) * 12)}.polli\:w-16{width:calc(var(--polli-spacing) * 16)}.polli\:w-64{width:calc(var(--polli-spacing) * 64)}.polli\:w-\[304px\]{width:304px}.polli\:w-\[min\(24rem\,calc\(100vw-2rem\)\)\]{width:min(24rem,100vw - 2rem)}.polli\:w-full{width:100%}.polli\:w-max{width:max-content}.polli\:max-w-2xl{max-width:var(--polli-container-2xl)}.polli\:max-w-16{max-width:calc(var(--polli-spacing) * 16)}.polli\:max-w-32{max-width:calc(var(--polli-spacing) * 32)}.polli\:max-w-full{max-width:100%}.polli\:max-w-md{max-width:var(--polli-container-md)}.polli\:max-w-xl{max-width:var(--polli-container-xl)}.polli\:min-w-0{min-width:calc(var(--polli-spacing) * 0)}.polli\:min-w-64{min-width:calc(var(--polli-spacing) * 64)}.polli\:min-w-\[140px\]{min-width:140px}.polli\:min-w-\[150px\]{min-width:150px}.polli\:min-w-\[320px\]{min-width:320px}.polli\:flex-1{flex:1}.polli\:flex-shrink-0,.polli\:shrink-0{flex-shrink:0}.polli\:border-collapse{border-collapse:collapse}.polli\:-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.polli\:translate-x-1{--tw-translate-x:calc(var(--polli-spacing) * 1);translate:var(--tw-translate-x) var(--tw-translate-y)}.polli\:translate-x-6{--tw-translate-x:calc(var(--polli-spacing) * 6);translate:var(--tw-translate-x) var(--tw-translate-y)}.polli\:rotate-180{rotate:180deg}.polli\:cursor-help{cursor:help}.polli\:cursor-not-allowed{cursor:not-allowed}.polli\:cursor-pointer{cursor:pointer}.polli\:resize-y{resize:vertical}.polli\:scroll-mt-10{scroll-margin-top:calc(var(--polli-spacing) * 10)}.polli\:list-decimal{list-style-type:decimal}.polli\:list-disc{list-style-type:disc}.polli\:list-none{list-style-type:none}.polli\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.polli\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.polli\:flex-col{flex-direction:column}.polli\:flex-nowrap{flex-wrap:nowrap}.polli\:flex-wrap{flex-wrap:wrap}.polli\:items-center{align-items:center}.polli\:items-start{align-items:flex-start}.polli\:justify-between{justify-content:space-between}.polli\:justify-center{justify-content:center}.polli\:justify-end{justify-content:flex-end}.polli\:justify-start{justify-content:flex-start}.polli\:gap-1{gap:calc(var(--polli-spacing) * 1)}.polli\:gap-1\.5{gap:calc(var(--polli-spacing) * 1.5)}.polli\:gap-2{gap:calc(var(--polli-spacing) * 2)}.polli\:gap-3{gap:calc(var(--polli-spacing) * 3)}.polli\:gap-4{gap:calc(var(--polli-spacing) * 4)}.polli\:gap-5{gap:calc(var(--polli-spacing) * 5)}:where(.polli\:divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.polli\:divide-theme-border\/65>:not(:last-child)){border-color:var(--polli-color-border)}@supports (color:color-mix(in lab, red, red)){:where(.polli\:divide-theme-border\/65>:not(:last-child)){border-color:color-mix(in oklab, var(--polli-color-border) 65%, transparent)}}.polli\:self-center{align-self:center}.polli\:self-start{align-self:flex-start}.polli\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.polli\:overflow-hidden{overflow:hidden}.polli\:overflow-x-auto{overflow-x:auto}.polli\:overflow-x-hidden{overflow-x:hidden}.polli\:overflow-y-auto{overflow-y:auto}.polli\:overflow-y-hidden{overflow-y:hidden}.polli\:rounded{border-radius:.25rem}.polli\:rounded-2xl{border-radius:var(--polli-radius-2xl)}.polli\:rounded-full{border-radius:3.40282e38px}.polli\:rounded-lg{border-radius:var(--polli-radius-lg)}.polli\:rounded-md{border-radius:var(--polli-radius-md)}.polli\:rounded-sm{border-radius:var(--polli-radius-sm)}.polli\:rounded-xl{border-radius:var(--polli-radius-xl)}.polli\:rounded-t-lg{border-top-left-radius:var(--polli-radius-lg);border-top-right-radius:var(--polli-radius-lg)}.polli\:border{border-style:var(--tw-border-style);border-width:1px}.polli\:border-2{border-style:var(--tw-border-style);border-width:2px}.polli\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.polli\:border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.polli\:border-dashed{--tw-border-style:dashed;border-style:dashed}.polli\:border-gray-400\/70{border-color:var(--polli-color-gray-400)}@supports (color:color-mix(in lab, red, red)){.polli\:border-gray-400\/70{border-color:color-mix(in oklab, var(--polli-color-gray-400) 70%, transparent)}}.polli\:border-intent-danger-border{border-color:var(--polli-color-danger-border)}.polli\:border-intent-success-border{border-color:var(--polli-color-success-border)}.polli\:border-intent-warning-border{border-color:var(--polli-color-warning-border)}.polli\:border-theme-border{border-color:var(--polli-color-border)}.polli\:border-transparent{border-color:#0000}.polli\:bg-current{background-color:currentColor}.polli\:bg-gray-100\/80{background-color:var(--polli-color-gray-100)}@supports (color:color-mix(in lab, red, red)){.polli\:bg-gray-100\/80{background-color:color-mix(in oklab, var(--polli-color-gray-100) 80%, transparent)}}.polli\:bg-gray-200{background-color:var(--polli-color-gray-200)}.polli\:bg-gray-950\/50{background-color:var(--polli-color-gray-950)}@supports (color:color-mix(in lab, red, red)){.polli\:bg-gray-950\/50{background-color:color-mix(in oklab, var(--polli-color-gray-950) 50%, transparent)}}.polli\:bg-intent-alpha-bg-light{background-color:var(--polli-color-alpha-bg-light)}.polli\:bg-intent-danger-bg-light,.polli\:bg-intent-danger-bg-light\/65{background-color:var(--polli-color-danger-bg-light)}@supports (color:color-mix(in lab, red, red)){.polli\:bg-intent-danger-bg-light\/65{background-color:color-mix(in oklab, var(--polli-color-danger-bg-light) 65%, transparent)}}.polli\:bg-intent-news-bg-light{background-color:var(--polli-color-news-bg-light)}.polli\:bg-intent-success-bg-light,.polli\:bg-intent-success-bg-light\/55{background-color:var(--polli-color-success-bg-light)}@supports (color:color-mix(in lab, red, red)){.polli\:bg-intent-success-bg-light\/55{background-color:color-mix(in oklab, var(--polli-color-success-bg-light) 55%, transparent)}}.polli\:bg-intent-warning-bg-light,.polli\:bg-intent-warning-bg-light\/65{background-color:var(--polli-color-warning-bg-light)}@supports (color:color-mix(in lab, red, red)){.polli\:bg-intent-warning-bg-light\/65{background-color:color-mix(in oklab, var(--polli-color-warning-bg-light) 65%, transparent)}}.polli\:bg-surface-white{background-color:var(--polli-color-surface-white)}.polli\:bg-theme-bg-active{background-color:var(--polli-color-bg-active)}.polli\:bg-theme-bg-hover{background-color:var(--polli-color-bg-hover)}.polli\:bg-theme-bg-pale{background-color:var(--polli-color-bg-pale)}.polli\:bg-theme-bg-subtle{background-color:var(--polli-color-bg-subtle)}.polli\:bg-transparent{background-color:#0000}.polli\:bg-white,.polli\:bg-white\/80{background-color:var(--polli-color-white)}@supports (color:color-mix(in lab, red, red)){.polli\:bg-white\/80{background-color:color-mix(in oklab, var(--polli-color-white) 80%, transparent)}}.polli\:p-0{padding:calc(var(--polli-spacing) * 0)}.polli\:p-1{padding:calc(var(--polli-spacing) * 1)}.polli\:p-2{padding:calc(var(--polli-spacing) * 2)}.polli\:p-3{padding:calc(var(--polli-spacing) * 3)}.polli\:p-4{padding:calc(var(--polli-spacing) * 4)}.polli\:p-5{padding:calc(var(--polli-spacing) * 5)}.polli\:p-6{padding:calc(var(--polli-spacing) * 6)}.polli\:px-0{padding-inline:calc(var(--polli-spacing) * 0)}.polli\:px-1{padding-inline:calc(var(--polli-spacing) * 1)}.polli\:px-2{padding-inline:calc(var(--polli-spacing) * 2)}.polli\:px-2\.5{padding-inline:calc(var(--polli-spacing) * 2.5)}.polli\:px-3{padding-inline:calc(var(--polli-spacing) * 3)}.polli\:px-4{padding-inline:calc(var(--polli-spacing) * 4)}.polli\:px-6{padding-inline:calc(var(--polli-spacing) * 6)}.polli\:px-8{padding-inline:calc(var(--polli-spacing) * 8)}.polli\:py-0{padding-block:calc(var(--polli-spacing) * 0)}.polli\:py-0\.5{padding-block:calc(var(--polli-spacing) * .5)}.polli\:py-1{padding-block:calc(var(--polli-spacing) * 1)}.polli\:py-1\.5{padding-block:calc(var(--polli-spacing) * 1.5)}.polli\:py-2{padding-block:calc(var(--polli-spacing) * 2)}.polli\:py-3{padding-block:calc(var(--polli-spacing) * 3)}.polli\:py-6{padding-block:calc(var(--polli-spacing) * 6)}.polli\:pt-0\.5{padding-top:calc(var(--polli-spacing) * .5)}.polli\:pt-1\.5{padding-top:calc(var(--polli-spacing) * 1.5)}.polli\:pt-2{padding-top:calc(var(--polli-spacing) * 2)}.polli\:pt-3{padding-top:calc(var(--polli-spacing) * 3)}.polli\:pt-6{padding-top:calc(var(--polli-spacing) * 6)}.polli\:pr-2{padding-right:calc(var(--polli-spacing) * 2)}.polli\:pr-3{padding-right:calc(var(--polli-spacing) * 3)}.polli\:pr-10{padding-right:calc(var(--polli-spacing) * 10)}.polli\:pb-1{padding-bottom:calc(var(--polli-spacing) * 1)}.polli\:pb-2{padding-bottom:calc(var(--polli-spacing) * 2)}.polli\:pb-3{padding-bottom:calc(var(--polli-spacing) * 3)}.polli\:pb-8{padding-bottom:calc(var(--polli-spacing) * 8)}.polli\:pl-1{padding-left:calc(var(--polli-spacing) * 1)}.polli\:pl-4{padding-left:calc(var(--polli-spacing) * 4)}.polli\:pl-5{padding-left:calc(var(--polli-spacing) * 5)}.polli\:pl-6{padding-left:calc(var(--polli-spacing) * 6)}.polli\:text-center{text-align:center}.polli\:text-left{text-align:left}.polli\:text-right{text-align:right}.polli\:align-middle{vertical-align:middle}.polli\:font-body{font-family:Uncut Sans,ui-sans-serif,sans-serif}.polli\:font-heading{font-family:LCT Mogi,ui-sans-serif,sans-serif}.polli\:font-mono{font-family:var(--polli-font-mono)}.polli\:font-pixel{font-family:Pixelify Sans,ui-monospace,monospace}.polli\:font-subheading{font-family:Fraunces,ui-serif,serif}.polli\:text-2xl{font-size:var(--polli-text-2xl);line-height:var(--tw-leading,var(--polli-text-2xl--line-height))}.polli\:text-4xl{font-size:var(--polli-text-4xl);line-height:var(--tw-leading,var(--polli-text-4xl--line-height))}.polli\:text-base{font-size:16px;line-height:var(--tw-leading,var(--polli-text-base--line-height))}.polli\:text-sm{font-size:var(--polli-text-sm);line-height:var(--tw-leading,var(--polli-text-sm--line-height))}.polli\:text-xl{font-size:var(--polli-text-xl);line-height:var(--tw-leading,var(--polli-text-xl--line-height))}.polli\:text-xs{font-size:var(--polli-text-xs);line-height:var(--tw-leading,var(--polli-text-xs--line-height))}.polli\:text-micro{font-size:10px}.polli\:leading-none{--tw-leading:1;line-height:1}.polli\:leading-normal{--tw-leading:var(--polli-leading-normal);line-height:var(--polli-leading-normal)}.polli\:leading-relaxed{--tw-leading:var(--polli-leading-relaxed);line-height:var(--polli-leading-relaxed)}.polli\:leading-tight{--tw-leading:var(--polli-leading-tight);line-height:var(--polli-leading-tight)}.polli\:font-bold{--tw-font-weight:var(--polli-font-weight-bold);font-weight:var(--polli-font-weight-bold)}.polli\:font-medium{--tw-font-weight:var(--polli-font-weight-medium);font-weight:var(--polli-font-weight-medium)}.polli\:font-semibold{--tw-font-weight:var(--polli-font-weight-semibold);font-weight:var(--polli-font-weight-semibold)}.polli\:tracking-tight{--tw-tracking:var(--polli-tracking-tight);letter-spacing:var(--polli-tracking-tight)}.polli\:tracking-wide{--tw-tracking:var(--polli-tracking-wide);letter-spacing:var(--polli-tracking-wide)}.polli\:break-words{overflow-wrap:break-word}.polli\:whitespace-nowrap{white-space:nowrap}.polli\:whitespace-pre-line{white-space:pre-line}.polli\:text-gray-300{color:var(--polli-color-gray-300)}.polli\:text-gray-400{color:var(--polli-color-gray-400)}.polli\:text-gray-700{color:var(--polli-color-gray-700)}.polli\:text-gray-800{color:var(--polli-color-gray-800)}.polli\:text-gray-900{color:var(--polli-color-gray-900)}.polli\:text-gray-950{color:var(--polli-color-gray-950)}.polli\:text-inherit{color:inherit}.polli\:text-intent-alpha-text{color:var(--polli-color-alpha-text)}.polli\:text-intent-danger-text{color:var(--polli-color-danger-text)}.polli\:text-intent-news-text{color:var(--polli-color-news-text)}.polli\:text-intent-success-text{color:var(--polli-color-success-text)}.polli\:text-intent-warning-text{color:var(--polli-color-warning-text)}.polli\:text-theme-text-base{color:var(--polli-color-text-base)}.polli\:text-theme-text-muted{color:var(--polli-color-text-muted)}.polli\:text-theme-text-soft,.polli\:text-theme-text-soft\/60{color:var(--polli-color-text-soft)}@supports (color:color-mix(in lab, red, red)){.polli\:text-theme-text-soft\/60{color:color-mix(in oklab, var(--polli-color-text-soft) 60%, transparent)}}.polli\:text-theme-text-strong{color:var(--polli-color-text-strong)}.polli\:uppercase{text-transform:uppercase}.polli\: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,)}.polli\:no-underline{text-decoration-line:none}.polli\:underline{text-decoration-line:underline}.polli\:decoration-theme-border{-webkit-text-decoration-color:var(--polli-color-border);-webkit-text-decoration-color:var(--polli-color-border);text-decoration-color:var(--polli-color-border)}.polli\:decoration-2{text-decoration-thickness:2px}.polli\:underline-offset-2{text-underline-offset:2px}.polli\:underline-offset-3{text-underline-offset:3px}.polli\:opacity-0{opacity:0}.polli\:opacity-30{opacity:.3}.polli\:opacity-50{opacity:.5}.polli\:opacity-60{opacity:.6}.polli\:opacity-65{opacity:.65}.polli\:opacity-100{opacity:1}.polli\:shadow-\[inset_0_0_0_1px_rgba\(0\,0\,0\,0\.08\)\]{--tw-shadow:inset 0 0 0 1px var(--tw-shadow-color,#00000014);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.polli\: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)}.polli\: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)}.polli\: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)}.polli\:ring-theme-border{--tw-ring-color:var(--polli-color-border)}.polli\:transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--polli-default-transition-timing-function));transition-duration:var(--tw-duration,var(--polli-default-transition-duration))}.polli\:transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--polli-default-transition-timing-function));transition-duration:var(--tw-duration,var(--polli-default-transition-duration))}.polli\: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(--polli-default-transition-timing-function));transition-duration:var(--tw-duration,var(--polli-default-transition-duration))}.polli\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--polli-default-transition-timing-function));transition-duration:var(--tw-duration,var(--polli-default-transition-duration))}.polli\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--polli-default-transition-timing-function));transition-duration:var(--tw-duration,var(--polli-default-transition-duration))}.polli\:duration-150{--tw-duration:.15s;transition-duration:.15s}.polli\:duration-200{--tw-duration:.2s;transition-duration:.2s}.polli\:ease-out{--tw-ease:var(--polli-ease-out);transition-timing-function:var(--polli-ease-out)}.polli\:outline-none{--tw-outline-style:none;outline-style:none}.polli\:select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.polli\:group-hover\:-translate-y-0\.5:is(:where(.polli\:group):hover *){--tw-translate-y:calc(var(--polli-spacing) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y)}.polli\:group-hover\:bg-white\/95:is(:where(.polli\:group):hover *){background-color:var(--polli-color-white)}@supports (color:color-mix(in lab, red, red)){.polli\:group-hover\:bg-white\/95:is(:where(.polli\:group):hover *){background-color:color-mix(in oklab, var(--polli-color-white) 95%, transparent)}}.polli\:group-hover\:opacity-100:is(:where(.polli\:group):hover *){opacity:1}}.polli\:group-focus-visible\:ring-2:is(:where(.polli\:group):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)}.polli\:group-focus-visible\:ring-theme-border:is(:where(.polli\:group):focus-visible *){--tw-ring-color:var(--polli-color-border)}.polli\:marker\:text-theme-text-muted ::marker{color:var(--polli-color-text-muted)}.polli\:marker\:text-theme-text-muted::marker{color:var(--polli-color-text-muted)}.polli\:marker\:text-theme-text-muted ::-webkit-details-marker{color:var(--polli-color-text-muted)}.polli\:marker\:text-theme-text-muted::-webkit-details-marker{color:var(--polli-color-text-muted)}.polli\:last\:mb-0:last-child{margin-bottom:calc(var(--polli-spacing) * 0)}@media (hover:hover){.polli\:hover\:bg-intent-danger-bg-hover:hover{background-color:var(--polli-color-danger-bg-hover)}.polli\:hover\:bg-theme-bg-active:hover{background-color:var(--polli-color-bg-active)}.polli\:hover\:bg-theme-bg-hover:hover{background-color:var(--polli-color-bg-hover)}.polli\:hover\:bg-theme-bg-pale:hover{background-color:var(--polli-color-bg-pale)}.polli\:hover\:bg-theme-bg-subtle:hover{background-color:var(--polli-color-bg-subtle)}.polli\:hover\:bg-transparent:hover{background-color:#0000}.polli\:hover\:bg-white\/60:hover{background-color:var(--polli-color-white)}@supports (color:color-mix(in lab, red, red)){.polli\:hover\:bg-white\/60:hover{background-color:color-mix(in oklab, var(--polli-color-white) 60%, transparent)}}.polli\:hover\:text-gray-950:hover{color:var(--polli-color-gray-950)}.polli\:hover\:text-theme-text-soft:hover{color:var(--polli-color-text-soft)}.polli\:hover\:text-theme-text-strong:hover{color:var(--polli-color-text-strong)}.polli\:hover\:decoration-theme-text-soft:hover{-webkit-text-decoration-color:var(--polli-color-text-soft);-webkit-text-decoration-color:var(--polli-color-text-soft);text-decoration-color:var(--polli-color-text-soft)}.polli\:hover\:brightness-105:hover{--tw-brightness:brightness(105%);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,)}.polli\:hover\:filter:hover{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,)}}.polli\:focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.polli\:focus-visible\:bg-theme-bg-hover:focus-visible{background-color:var(--polli-color-bg-hover)}.polli\:focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.polli\:disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.polli\:disabled\:opacity-50:disabled{opacity:.5}.polli\:disabled\:opacity-60:disabled{opacity:.6}}@font-face{font-family:LCT Mogi;src:url(./fonts/lct-mogi-a.woff2)format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Fraunces;src:url(./fonts/fraunces-soft-bold.woff2)format("woff2");font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:Uncut Sans;src:url(./fonts/uncut-sans-variable.woff2)format("woff2-variations");font-weight:300 700;font-style:normal;font-display:swap}:root{--polli-font-heading:"LCT Mogi", ui-sans-serif, sans-serif;--polli-font-subheading:"Fraunces", ui-serif, serif;--polli-font-body:"Uncut Sans", ui-sans-serif, sans-serif;--polli-font-pixel:"Pixelify Sans", ui-monospace, monospace;--polli-text-micro:10px;--polli-text-base:16px;--polli-color-surface-white:oklch(100% 0 0/.8)}[data-theme=amber]{--polli-color-text-base:oklch(41.4% .112 45.904);--polli-color-text-strong:oklch(27.9% .077 45.635);--polli-color-text-soft:oklch(55.5% .163 48.998);--polli-color-text-muted:oklch(62% .045 45.904);--polli-color-border:oklch(87.9% .169 91.605);--polli-color-bg-subtle:oklch(98.7% .022 95.277/.7);--polli-color-bg-active:oklch(92.4% .12 95.746);--polli-color-bg-hover:oklch(87.9% .169 91.605);--polli-color-bg-pale:oklch(96.2% .059 95.617);--polli-color-scrollbar-thumb:oklch(82.8% .189 84.429/.7)}[data-theme=blue]{--polli-color-text-base:oklch(37.9% .146 265.522);--polli-color-text-strong:oklch(28.2% .091 267.935);--polli-color-text-soft:oklch(48.8% .243 264.376);--polli-color-text-muted:oklch(62% .058 265.522);--polli-color-border:oklch(80.9% .105 251.813);--polli-color-bg-subtle:oklch(97% .014 254.604/.7);--polli-color-bg-active:oklch(88.2% .059 254.128);--polli-color-bg-hover:oklch(80.9% .105 251.813);--polli-color-bg-pale:oklch(93.2% .032 255.585);--polli-color-scrollbar-thumb:oklch(70.7% .165 254.624/.7)}[data-theme=pink]{--polli-color-text-base:oklch(40.8% .153 2.432);--polli-color-text-strong:oklch(28.4% .109 3.907);--polli-color-text-soft:oklch(52.5% .223 3.958);--polli-color-text-muted:oklch(62% .061 2.432);--polli-color-border:oklch(82.3% .12 346.018);--polli-color-bg-subtle:oklch(97.1% .014 343.198/.7);--polli-color-bg-active:oklch(89.9% .061 343.231);--polli-color-bg-hover:oklch(82.3% .12 346.018);--polli-color-bg-pale:oklch(94.8% .028 342.258);--polli-color-scrollbar-thumb:oklch(71.8% .202 349.761/.7)}[data-theme=teal]{--polli-color-text-base:oklch(38.6% .063 188.416);--polli-color-text-strong:oklch(27.7% .046 192.524);--polli-color-text-soft:oklch(51.1% .096 186.391);--polli-color-text-muted:oklch(62% .025 188.416);--polli-color-border:oklch(85.5% .138 181.071);--polli-color-bg-subtle:oklch(98.4% .014 180.72/.7);--polli-color-bg-active:oklch(91% .096 180.426);--polli-color-bg-hover:oklch(85.5% .138 181.071);--polli-color-bg-pale:oklch(95.3% .051 180.801);--polli-color-scrollbar-thumb:oklch(70.4% .14 182.503/.7)}[data-theme=violet]{--polli-color-text-base:oklch(38% .189 293.745);--polli-color-text-strong:oklch(28.3% .141 291.089);--polli-color-text-soft:oklch(49.1% .27 292.581);--polli-color-text-muted:oklch(62% .076 293.745);--polli-color-border:oklch(81.1% .111 293.571);--polli-color-bg-subtle:oklch(96.9% .016 293.756/.7);--polli-color-bg-active:oklch(89.4% .057 293.283);--polli-color-bg-hover:oklch(81.1% .111 293.571);--polli-color-bg-pale:oklch(94.3% .029 294.588);--polli-color-scrollbar-thumb:oklch(70.2% .183 293.541/.7)}:root,[data-theme=green]{--polli-color-text-base:oklch(39.3% .095 152.535);--polli-color-text-strong:oklch(26.6% .065 152.934);--polli-color-text-soft:oklch(52.7% .154 150.069);--polli-color-text-muted:oklch(62% .038 152.535);--polli-color-border:oklch(87.1% .15 154.449);--polli-color-bg-subtle:oklch(98.2% .018 155.826/.7);--polli-color-bg-active:oklch(92.5% .084 155.995);--polli-color-bg-hover:oklch(87.1% .15 154.449);--polli-color-bg-pale:oklch(96.2% .044 156.743);--polli-color-scrollbar-thumb:oklch(79.2% .209 151.711/.7)}:root{--polli-color-danger-bg-light:oklch(93.5% .045 25);--polli-color-danger-bg-hover:oklch(88% .075 25);--polli-color-danger-text:oklch(48% .18 25);--polli-color-danger-border:oklch(78% .115 25);--polli-color-success-bg-light:oklch(94% .055 150);--polli-color-success-text:oklch(38% .12 150);--polli-color-success-border:oklch(78% .13 150);--polli-color-warning-bg-light:oklch(94% .06 75);--polli-color-warning-text:oklch(45% .13 65);--polli-color-warning-border:oklch(82% .14 75);--polli-color-news-bg-light:oklch(93.5% .06 158);--polli-color-news-text:oklch(46% .13 158);--polli-color-alpha-bg-light:oklch(93% .06 300);--polli-color-alpha-text:oklch(42% .18 300);--polli-color-paid-pale:oklch(93% .09 95.746);--polli-color-paid-soft:oklch(85% .16 95.746);--polli-color-paid-deep:#78350f;--polli-color-tier-pale:oklch(93% .06 55);--polli-color-tier-soft:oklch(83% .13 55);--polli-color-tier-deep:#7c3f1e}.polli-wallet-chip-paid{background-color:var(--polli-color-paid-pale);color:var(--polli-color-paid-deep)}.polli-wallet-chip-tier{background-color:var(--polli-color-tier-pale);color:var(--polli-color-tier-deep)}.polli-wallet-panel-paid{background-color:var(--polli-color-paid-pale)}@supports (color:color-mix(in lab, red, red)){.polli-wallet-panel-paid{background-color:color-mix(in oklab, var(--polli-color-paid-pale) 60%, transparent)}}.polli-wallet-panel-paid{color:var(--polli-color-paid-deep)}.polli-wallet-panel-tier{background-color:var(--polli-color-tier-pale)}@supports (color:color-mix(in lab, red, red)){.polli-wallet-panel-tier{background-color:color-mix(in oklab, var(--polli-color-tier-pale) 60%, transparent)}}.polli-wallet-panel-tier{color:var(--polli-color-tier-deep)}.polli-wallet-dot-paid{background-color:var(--polli-color-paid-soft)}.polli-wallet-dot-tier{background-color:var(--polli-color-tier-soft)}.polli-wallet-text-paid{color:var(--polli-color-paid-deep)}.polli-wallet-text-tier{color:var(--polli-color-tier-deep)}.polli-wallet-balance-value{font-size:2.25rem}@media (min-width:640px){.polli-wallet-balance-value{font-size:3rem}}.polli-scrollbar-subtle{scrollbar-width:thin;scrollbar-color:transparent transparent}.polli-scrollbar-subtle::-webkit-scrollbar{width:12px;height:12px}.polli-scrollbar-subtle::-webkit-scrollbar-track{background:0 0}.polli-scrollbar-subtle::-webkit-scrollbar-thumb{background-color:#0000;background-clip:content-box;border:3px solid #0000;border-radius:9999px;transition:background-color .16s}.polli-scrollbar-subtle[data-scrollbar-active=true]{scrollbar-color:var(--polli-color-scrollbar-thumb) transparent}.polli-scrollbar-subtle[data-scrollbar-active=true]::-webkit-scrollbar-thumb{background-color:var(--polli-color-scrollbar-thumb)}.polli-input-number-clean::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.polli-input-number-clean::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.polli-input-number-clean{-moz-appearance:textfield}.polli-input,.polli-textarea{border-color:var(--polli-color-border);box-shadow:none;outline:none}.polli-input:focus,.polli-input:focus-visible,.polli-textarea:focus,.polli-textarea:focus-visible{border-color:var(--polli-color-border);box-shadow:0 0 0 1px var(--polli-color-border);outline:none}.polli-input[data-error=true],.polli-textarea[data-error=true]{border-color:var(--polli-color-danger-border)}.polli-input[data-error=true]:focus,.polli-input[data-error=true]:focus-visible,.polli-textarea[data-error=true]:focus,.polli-textarea[data-error=true]:focus-visible{border-color:var(--polli-color-danger-border);box-shadow:0 0 0 1px var(--polli-color-danger-border)}.polli-textarea,.polli-textarea:focus{--polli-textarea-resizer-color:var(--polli-color-border);scrollbar-color:var(--polli-color-border) transparent}.polli-textarea::-webkit-resizer{background:linear-gradient(135deg, transparent 0 52%, var(--polli-textarea-resizer-color) 52% 58%, transparent 58% 100%), linear-gradient(135deg, transparent 0 66%, var(--polli-textarea-resizer-color) 66% 72%, transparent 72% 100%), linear-gradient(135deg, transparent 0 80%, var(--polli-textarea-resizer-color) 80% 86%, transparent 86% 100%)}.polli-control{outline:none}.polli-control:focus-visible{box-shadow:0 0 0 2px var(--polli-color-border);outline:none}.polli-control[data-intent=danger]:focus-visible{box-shadow:0 0 0 2px var(--polli-color-danger-border)}.polli-slider{--polli-slider-thumb-shadow-fallback:var(--polli-color-text-strong)}@supports (color:color-mix(in lab, red, red)){.polli-slider{--polli-slider-thumb-shadow-fallback:color-mix(in oklab, var(--polli-color-text-strong) 35%, transparent)}}.polli-slider{--polli-slider-progress-value:var(--polli-slider-progress,0%);--polli-slider-fill-value:var(--polli-slider-fill,var(--polli-color-bg-active));--polli-slider-track-value:var(--polli-slider-track,var(--polli-color-bg-pale));--polli-slider-thumb-border-value:var(--polli-slider-thumb-border,var(--polli-color-text-strong));--polli-slider-thumb-shadow-value:var(--polli-slider-thumb-shadow,var(--polli-slider-thumb-shadow-fallback));cursor:grab;appearance:none;background:linear-gradient(to right, var(--polli-slider-fill-value) 0%, var(--polli-slider-fill-value) var(--polli-slider-progress-value), var(--polli-slider-track-value) var(--polli-slider-progress-value), var(--polli-slider-track-value) 100%);border-radius:9999px;outline:none;width:100%;height:.5rem;transition:opacity .15s,filter .15s}.polli-slider:active{cursor:grabbing}.polli-slider:disabled{cursor:not-allowed;opacity:.6}.polli-slider:focus-visible{box-shadow:0 0 0 2px var(--polli-slider-fill-value), 0 0 0 4px var(--polli-color-surface-white)}.polli-slider::-webkit-slider-runnable-track{background:0 0;border-radius:9999px;height:.5rem}.polli-slider::-moz-range-track{background:0 0;border-radius:9999px;height:.5rem}.polli-slider::-webkit-slider-thumb{appearance:none;border:3px solid var(--polli-slider-thumb-border-value);width:22px;height:22px;box-shadow:0 2px 6px var(--polli-slider-thumb-shadow-value);background:#fff;border-radius:9999px;margin-top:-7px;transition:transform .15s}.polli-slider::-moz-range-thumb{border:3px solid var(--polli-slider-thumb-border-value);width:22px;height:22px;box-shadow:0 2px 6px var(--polli-slider-thumb-shadow-value);background:#fff;border-radius:9999px;transition:transform .15s}.polli-slider:hover::-webkit-slider-thumb{transform:scale(1.1)}.polli-slider:active::-webkit-slider-thumb{transform:scale(1.05)}@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-divide-y-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-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@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}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * The six chrome themes exposed by the CSS-var cascade. Apply via
3
+ * `data-theme="<name>"` on any ancestor — primitives and `--polli-*`
4
+ * tokens in that subtree restyle accordingly.
5
+ */
6
+ declare const themes: readonly ["amber", "blue", "pink", "teal", "violet", "green"];
7
+ type ThemeName = (typeof themes)[number];
8
+
9
+ export { type ThemeName as T, themes as t };
@@ -0,0 +1,9 @@
1
+ /**
2
+ * The six chrome themes exposed by the CSS-var cascade. Apply via
3
+ * `data-theme="<name>"` on any ancestor — primitives and `--polli-*`
4
+ * tokens in that subtree restyle accordingly.
5
+ */
6
+ declare const themes: readonly ["amber", "blue", "pink", "teal", "violet", "green"];
7
+ type ThemeName = (typeof themes)[number];
8
+
9
+ export { type ThemeName as T, themes as t };
@@ -46,9 +46,12 @@ var chipSizes = {
46
46
  lg: "polli:px-3 polli:py-1 polli:text-sm"
47
47
  };
48
48
  var intentClasses = {
49
- news: "polli:bg-[oklch(0.935_0.06_158)] polli:text-[oklch(0.46_0.13_158)]",
50
- alpha: "polli:bg-[oklch(0.93_0.06_300)] polli:text-[oklch(0.42_0.18_300)]",
51
- neutral: "polli:border polli:border-gray-400/70 polli:bg-gray-100/80 polli:text-gray-900"
49
+ news: "polli:bg-intent-news-bg-light polli:text-intent-news-text",
50
+ alpha: "polli:bg-intent-alpha-bg-light polli:text-intent-alpha-text",
51
+ neutral: "polli:border polli:border-gray-400/70 polli:bg-gray-100/80 polli:text-gray-900",
52
+ success: "polli:border polli:border-intent-success-border polli:bg-intent-success-bg-light polli:text-intent-success-text",
53
+ warning: "polli:border polli:border-intent-warning-border polli:bg-intent-warning-bg-light polli:text-intent-warning-text",
54
+ danger: "polli:border polli:border-intent-danger-border polli:bg-intent-danger-bg-light polli:text-intent-danger-text"
52
55
  };
53
56
  var Chip = ({
54
57
  theme,
@@ -160,7 +163,16 @@ var WalletBalanceCard = ({
160
163
  children: [
161
164
  /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("span", { className: "polli:flex polli:items-center polli:gap-2", children: [
162
165
  /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(WalletDot, { kind }),
163
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "polli:text-sm polli:font-bold polli:uppercase polli:tracking-wide polli:text-amber-900", children: label }),
166
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
167
+ "span",
168
+ {
169
+ className: cn(
170
+ "polli:text-sm polli:font-bold polli:uppercase polli:tracking-wide",
171
+ walletTextClasses[kind]
172
+ ),
173
+ children: label
174
+ }
175
+ ),
164
176
  info
165
177
  ] }),
166
178
  /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
@@ -173,7 +185,7 @@ var WalletBalanceCard = ({
173
185
  children: value
174
186
  }
175
187
  ),
176
- footer && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "polli:mt-1.5 polli:text-sm polli:font-bold polli:tabular-nums polli:text-green-700", children: footer })
188
+ footer && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "polli:mt-1.5 polli:text-sm polli:font-bold polli:tabular-nums polli:text-intent-success-text", children: footer })
177
189
  ]
178
190
  }
179
191
  );
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/modules/wallet/index.ts","../../src/lib/cn.ts","../../src/primitives/Chip.tsx","../../src/modules/wallet/chips.tsx","../../src/modules/wallet/colors.ts","../../src/modules/wallet/format-pollen.ts","../../src/modules/wallet/wallet-display.tsx"],"sourcesContent":["export { PaidChip, TierChip, type WalletChipProps } from \"./chips.tsx\";\nexport {\n PAID_BALANCE_CHART_COLOR,\n TIER_BALANCE_CHART_COLOR,\n} from \"./colors.ts\";\nexport { formatPollen } from \"./format-pollen.ts\";\nexport {\n WalletBalanceCard,\n type WalletBalanceCardProps,\n WalletDot,\n type WalletDotProps,\n} from \"./wallet-display.tsx\";\n","import { clsx } from \"clsx\";\nimport { extendTailwindMerge } from \"tailwind-merge\";\n\nconst twMerge = extendTailwindMerge({ prefix: \"polli\" });\n\n/** Internal class merge for polli:-prefixed package primitive classes. */\nexport function cn(...inputs: (string | undefined | null | false)[]) {\n return twMerge(clsx(...inputs));\n}\n","import type { ComponentPropsWithoutRef, FC } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport type { ThemeName } from \"../theme.ts\";\n\n/** Semantic chip labels for status and metadata badges. */\ntype ChipIntent = \"news\" | \"alpha\" | \"neutral\";\n\nconst chipSizes = {\n sm: \"polli:px-2 polli:py-0.5 polli:text-xs\",\n md: \"polli:px-2.5 polli:py-0.5 polli:text-sm\",\n lg: \"polli:px-3 polli:py-1 polli:text-sm\",\n} as const;\n\nconst intentClasses: Record<ChipIntent, string> = {\n news: \"polli:bg-[oklch(0.935_0.06_158)] polli:text-[oklch(0.46_0.13_158)]\",\n alpha: \"polli:bg-[oklch(0.93_0.06_300)] polli:text-[oklch(0.42_0.18_300)]\",\n neutral:\n \"polli:border polli:border-gray-400/70 polli:bg-gray-100/80 polli:text-gray-900\",\n};\n\nexport type ChipProps = ComponentPropsWithoutRef<\"span\"> & {\n /** Override the cascade theme for this chip's subtree. */\n theme?: ThemeName;\n /** Semantic intent. Wins over `theme` when set. */\n intent?: ChipIntent;\n size?: keyof typeof chipSizes;\n};\n\n// Static, rectangular colored container. Round shapes are reserved for buttons.\n// Reads `bg-theme-bg-active` / `text-theme-text-strong` from the cascade unless\n// `intent` is set (semantic, theme-independent).\nexport const Chip: FC<ChipProps> = ({\n theme,\n intent,\n size = \"md\",\n className,\n children,\n ...rest\n}) => {\n const intentClass = intent\n ? intentClasses[intent]\n : \"polli:bg-theme-bg-active polli:text-theme-text-strong\";\n return (\n <span\n {...rest}\n data-theme={theme}\n className={cn(\n \"polli:inline-flex polli:shrink-0 polli:items-center polli:gap-1 polli:rounded-lg polli:font-medium polli:leading-normal\",\n chipSizes[size],\n intentClass,\n className,\n )}\n >\n {children}\n </span>\n );\n};\n","import type { FC } from \"react\";\nimport { cn } from \"../../lib/cn.ts\";\nimport { Chip, type ChipProps } from \"../../primitives/Chip.tsx\";\n\nexport type WalletChipProps = Omit<ChipProps, \"intent\">;\n\nexport const PaidChip: FC<WalletChipProps> = ({\n className,\n children,\n ...props\n}) => (\n <Chip {...props} className={cn(\"polli-wallet-chip-paid\", className)}>\n {children}\n </Chip>\n);\n\nexport const TierChip: FC<WalletChipProps> = ({\n className,\n children,\n ...props\n}) => (\n <Chip {...props} className={cn(\"polli-wallet-chip-tier\", className)}>\n {children}\n </Chip>\n);\n","export const PAID_BALANCE_CHART_COLOR = \"var(--polli-color-paid-pale)\";\nexport const TIER_BALANCE_CHART_COLOR = \"var(--polli-color-tier-pale)\";\n","// 5-digit budget for pollen display. Integer takes its space, decimals fill\n// the remainder (capped at 4), floor toward -infinity, trailing zeros stripped.\n// Integers needing >=6 digits switch to compact (K/M/B, 3 sig figs).\n// Decimal point and minus sign do not count toward the budget.\n\nconst BUDGET = 5;\nconst MAX_DECIMALS = 4;\nconst COMPACT_THRESHOLD = 100_000;\n\nfunction floorTo(value: number, decimals: number): number {\n const factor = 10 ** decimals;\n return Math.floor(value * factor) / factor;\n}\n\nfunction formatCompact(value: number): string {\n const abs = Math.abs(value);\n const sign = value < 0 ? \"-\" : \"\";\n const [unit, scale] =\n abs >= 1e9\n ? ([\"B\", 1e9] as const)\n : abs >= 1e6\n ? ([\"M\", 1e6] as const)\n : ([\"K\", 1e3] as const);\n const ratio = abs / scale;\n const intDigits = Math.max(1, Math.floor(Math.log10(ratio)) + 1);\n const decimals = Math.max(0, 3 - intDigits);\n const floored = floorTo(ratio, decimals);\n return `${sign}${Number(floored.toFixed(decimals)).toString()}${unit}`;\n}\n\nexport function formatPollen(value: number): string {\n if (!Number.isFinite(value) || value === 0) return \"0\";\n\n const abs = Math.abs(value);\n\n if (abs >= COMPACT_THRESHOLD) return formatCompact(value);\n\n const intDigits = abs >= 1 ? Math.floor(Math.log10(abs)) + 1 : 1;\n const decimals = Math.min(MAX_DECIMALS, Math.max(0, BUDGET - intDigits));\n const floored = floorTo(value, decimals);\n if (floored === 0) return \"0\";\n return Number(floored.toFixed(decimals)).toString();\n}\n","import type { FC, ReactNode } from \"react\";\nimport { cn } from \"../../lib/cn.ts\";\n\ntype WalletBalanceKind = \"paid\" | \"tier\";\n\nconst walletPanelClasses: Record<WalletBalanceKind, string> = {\n paid: \"polli-wallet-panel-paid\",\n tier: \"polli-wallet-panel-tier\",\n};\n\nconst walletTextClasses: Record<WalletBalanceKind, string> = {\n paid: \"polli-wallet-text-paid\",\n tier: \"polli-wallet-text-tier\",\n};\n\nexport type WalletDotProps = {\n kind: WalletBalanceKind;\n className?: string;\n};\n\nexport const WalletDot: FC<WalletDotProps> = ({ kind, className }) => (\n <span\n className={cn(\n \"polli:h-2 polli:w-2 polli:rounded-full\",\n kind === \"paid\" ? \"polli-wallet-dot-paid\" : \"polli-wallet-dot-tier\",\n className,\n )}\n aria-hidden=\"true\"\n />\n);\n\nexport type WalletBalanceCardProps = {\n kind: WalletBalanceKind;\n label: ReactNode;\n value: ReactNode;\n info?: ReactNode;\n footer?: ReactNode;\n className?: string;\n};\n\nexport const WalletBalanceCard: FC<WalletBalanceCardProps> = ({\n kind,\n label,\n value,\n info,\n footer,\n className,\n}) => (\n <div\n className={cn(\n \"polli:rounded-xl polli:p-4\",\n walletPanelClasses[kind],\n className,\n )}\n >\n <span className=\"polli:flex polli:items-center polli:gap-2\">\n <WalletDot kind={kind} />\n <span className=\"polli:text-sm polli:font-bold polli:uppercase polli:tracking-wide polli:text-amber-900\">\n {label}\n </span>\n {info}\n </span>\n <div\n className={cn(\n \"polli-wallet-balance-value polli:mt-1 polli:font-bold polli:leading-none polli:tracking-tight polli:tabular-nums\",\n walletTextClasses[kind],\n )}\n >\n {value}\n </div>\n {footer && (\n <div className=\"polli:mt-1.5 polli:text-sm polli:font-bold polli:tabular-nums polli:text-green-700\">\n {footer}\n </div>\n )}\n </div>\n);\n"],"mappings":"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","names":["import_jsx_runtime","import_jsx_runtime"]}
1
+ {"version":3,"sources":["../../src/modules/wallet/index.ts","../../src/lib/cn.ts","../../src/primitives/Chip.tsx","../../src/modules/wallet/chips.tsx","../../src/modules/wallet/colors.ts","../../src/modules/wallet/format-pollen.ts","../../src/modules/wallet/wallet-display.tsx"],"sourcesContent":["export { PaidChip, TierChip, type WalletChipProps } from \"./chips.tsx\";\nexport {\n PAID_BALANCE_CHART_COLOR,\n TIER_BALANCE_CHART_COLOR,\n} from \"./colors.ts\";\nexport { formatPollen } from \"./format-pollen.ts\";\nexport {\n WalletBalanceCard,\n type WalletBalanceCardProps,\n WalletDot,\n type WalletDotProps,\n} from \"./wallet-display.tsx\";\n","import { clsx } from \"clsx\";\nimport { extendTailwindMerge } from \"tailwind-merge\";\n\nconst twMerge = extendTailwindMerge({ prefix: \"polli\" });\n\n/** Internal class merge for polli:-prefixed package primitive classes. */\nexport function cn(...inputs: (string | undefined | null | false)[]) {\n return twMerge(clsx(...inputs));\n}\n","import type { ComponentPropsWithoutRef, FC } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport type { ThemeName } from \"../theme.ts\";\n\n/** Semantic chip labels for status and metadata badges. */\ntype ChipIntent =\n | \"news\"\n | \"alpha\"\n | \"neutral\"\n | \"success\"\n | \"warning\"\n | \"danger\";\n\nconst chipSizes = {\n sm: \"polli:px-2 polli:py-0.5 polli:text-xs\",\n md: \"polli:px-2.5 polli:py-0.5 polli:text-sm\",\n lg: \"polli:px-3 polli:py-1 polli:text-sm\",\n} as const;\n\nconst intentClasses: Record<ChipIntent, string> = {\n news: \"polli:bg-intent-news-bg-light polli:text-intent-news-text\",\n alpha: \"polli:bg-intent-alpha-bg-light polli:text-intent-alpha-text\",\n neutral:\n \"polli:border polli:border-gray-400/70 polli:bg-gray-100/80 polli:text-gray-900\",\n success:\n \"polli:border polli:border-intent-success-border polli:bg-intent-success-bg-light polli:text-intent-success-text\",\n warning:\n \"polli:border polli:border-intent-warning-border polli:bg-intent-warning-bg-light polli:text-intent-warning-text\",\n danger: \"polli:border polli:border-intent-danger-border polli:bg-intent-danger-bg-light polli:text-intent-danger-text\",\n};\n\nexport type ChipProps = ComponentPropsWithoutRef<\"span\"> & {\n /** Override the cascade theme for this chip's subtree. */\n theme?: ThemeName;\n /** Semantic intent. Wins over `theme` when set. */\n intent?: ChipIntent;\n size?: keyof typeof chipSizes;\n};\n\n// Static, rectangular colored container. Round shapes are reserved for buttons.\n// Reads `bg-theme-bg-active` / `text-theme-text-strong` from the cascade unless\n// `intent` is set (semantic, theme-independent).\nexport const Chip: FC<ChipProps> = ({\n theme,\n intent,\n size = \"md\",\n className,\n children,\n ...rest\n}) => {\n const intentClass = intent\n ? intentClasses[intent]\n : \"polli:bg-theme-bg-active polli:text-theme-text-strong\";\n return (\n <span\n {...rest}\n data-theme={theme}\n className={cn(\n \"polli:inline-flex polli:shrink-0 polli:items-center polli:gap-1 polli:rounded-lg polli:font-medium polli:leading-normal\",\n chipSizes[size],\n intentClass,\n className,\n )}\n >\n {children}\n </span>\n );\n};\n","import type { FC } from \"react\";\nimport { cn } from \"../../lib/cn.ts\";\nimport { Chip, type ChipProps } from \"../../primitives/Chip.tsx\";\n\nexport type WalletChipProps = Omit<ChipProps, \"intent\">;\n\nexport const PaidChip: FC<WalletChipProps> = ({\n className,\n children,\n ...props\n}) => (\n <Chip {...props} className={cn(\"polli-wallet-chip-paid\", className)}>\n {children}\n </Chip>\n);\n\nexport const TierChip: FC<WalletChipProps> = ({\n className,\n children,\n ...props\n}) => (\n <Chip {...props} className={cn(\"polli-wallet-chip-tier\", className)}>\n {children}\n </Chip>\n);\n","export const PAID_BALANCE_CHART_COLOR = \"var(--polli-color-paid-pale)\";\nexport const TIER_BALANCE_CHART_COLOR = \"var(--polli-color-tier-pale)\";\n","// 5-digit budget for pollen display. Integer takes its space, decimals fill\n// the remainder (capped at 4), floor toward -infinity, trailing zeros stripped.\n// Integers needing >=6 digits switch to compact (K/M/B, 3 sig figs).\n// Decimal point and minus sign do not count toward the budget.\n\nconst BUDGET = 5;\nconst MAX_DECIMALS = 4;\nconst COMPACT_THRESHOLD = 100_000;\n\nfunction floorTo(value: number, decimals: number): number {\n const factor = 10 ** decimals;\n return Math.floor(value * factor) / factor;\n}\n\nfunction formatCompact(value: number): string {\n const abs = Math.abs(value);\n const sign = value < 0 ? \"-\" : \"\";\n const [unit, scale] =\n abs >= 1e9\n ? ([\"B\", 1e9] as const)\n : abs >= 1e6\n ? ([\"M\", 1e6] as const)\n : ([\"K\", 1e3] as const);\n const ratio = abs / scale;\n const intDigits = Math.max(1, Math.floor(Math.log10(ratio)) + 1);\n const decimals = Math.max(0, 3 - intDigits);\n const floored = floorTo(ratio, decimals);\n return `${sign}${Number(floored.toFixed(decimals)).toString()}${unit}`;\n}\n\nexport function formatPollen(value: number): string {\n if (!Number.isFinite(value) || value === 0) return \"0\";\n\n const abs = Math.abs(value);\n\n if (abs >= COMPACT_THRESHOLD) return formatCompact(value);\n\n const intDigits = abs >= 1 ? Math.floor(Math.log10(abs)) + 1 : 1;\n const decimals = Math.min(MAX_DECIMALS, Math.max(0, BUDGET - intDigits));\n const floored = floorTo(value, decimals);\n if (floored === 0) return \"0\";\n return Number(floored.toFixed(decimals)).toString();\n}\n","import type { FC, ReactNode } from \"react\";\nimport { cn } from \"../../lib/cn.ts\";\n\ntype WalletBalanceKind = \"paid\" | \"tier\";\n\nconst walletPanelClasses: Record<WalletBalanceKind, string> = {\n paid: \"polli-wallet-panel-paid\",\n tier: \"polli-wallet-panel-tier\",\n};\n\nconst walletTextClasses: Record<WalletBalanceKind, string> = {\n paid: \"polli-wallet-text-paid\",\n tier: \"polli-wallet-text-tier\",\n};\n\nexport type WalletDotProps = {\n kind: WalletBalanceKind;\n className?: string;\n};\n\nexport const WalletDot: FC<WalletDotProps> = ({ kind, className }) => (\n <span\n className={cn(\n \"polli:h-2 polli:w-2 polli:rounded-full\",\n kind === \"paid\" ? \"polli-wallet-dot-paid\" : \"polli-wallet-dot-tier\",\n className,\n )}\n aria-hidden=\"true\"\n />\n);\n\nexport type WalletBalanceCardProps = {\n kind: WalletBalanceKind;\n label: ReactNode;\n value: ReactNode;\n info?: ReactNode;\n footer?: ReactNode;\n className?: string;\n};\n\nexport const WalletBalanceCard: FC<WalletBalanceCardProps> = ({\n kind,\n label,\n value,\n info,\n footer,\n className,\n}) => (\n <div\n className={cn(\n \"polli:rounded-xl polli:p-4\",\n walletPanelClasses[kind],\n className,\n )}\n >\n <span className=\"polli:flex polli:items-center polli:gap-2\">\n <WalletDot kind={kind} />\n <span\n className={cn(\n \"polli:text-sm polli:font-bold polli:uppercase polli:tracking-wide\",\n walletTextClasses[kind],\n )}\n >\n {label}\n </span>\n {info}\n </span>\n <div\n className={cn(\n \"polli-wallet-balance-value polli:mt-1 polli:font-bold polli:leading-none polli:tracking-tight polli:tabular-nums\",\n walletTextClasses[kind],\n )}\n >\n {value}\n </div>\n {footer && (\n <div className=\"polli:mt-1.5 polli:text-sm polli:font-bold polli:tabular-nums polli:text-intent-success-text\">\n {footer}\n </div>\n )}\n </div>\n);\n"],"mappings":"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","names":["import_jsx_runtime","import_jsx_runtime"]}
@@ -1,6 +1,6 @@
1
1
  import { FC, ReactNode } from 'react';
2
- import { a as ChipProps } from '../Chip-DyqWrq0r.cjs';
3
- import '../theme-DfHMjWB7.cjs';
2
+ import { a as ChipProps } from '../Chip-SM52sUbZ.cjs';
3
+ import '../theme-VMRlhqST.cjs';
4
4
 
5
5
  type WalletChipProps = Omit<ChipProps, "intent">;
6
6
  declare const PaidChip: FC<WalletChipProps>;
@@ -1,6 +1,6 @@
1
1
  import { FC, ReactNode } from 'react';
2
- import { a as ChipProps } from '../Chip-BS8ronOu.js';
3
- import '../theme-DfHMjWB7.js';
2
+ import { a as ChipProps } from '../Chip-C5impfYd.js';
3
+ import '../theme-VMRlhqST.js';
4
4
 
5
5
  type WalletChipProps = Omit<ChipProps, "intent">;
6
6
  declare const PaidChip: FC<WalletChipProps>;
@@ -14,9 +14,12 @@ var chipSizes = {
14
14
  lg: "polli:px-3 polli:py-1 polli:text-sm"
15
15
  };
16
16
  var intentClasses = {
17
- news: "polli:bg-[oklch(0.935_0.06_158)] polli:text-[oklch(0.46_0.13_158)]",
18
- alpha: "polli:bg-[oklch(0.93_0.06_300)] polli:text-[oklch(0.42_0.18_300)]",
19
- neutral: "polli:border polli:border-gray-400/70 polli:bg-gray-100/80 polli:text-gray-900"
17
+ news: "polli:bg-intent-news-bg-light polli:text-intent-news-text",
18
+ alpha: "polli:bg-intent-alpha-bg-light polli:text-intent-alpha-text",
19
+ neutral: "polli:border polli:border-gray-400/70 polli:bg-gray-100/80 polli:text-gray-900",
20
+ success: "polli:border polli:border-intent-success-border polli:bg-intent-success-bg-light polli:text-intent-success-text",
21
+ warning: "polli:border polli:border-intent-warning-border polli:bg-intent-warning-bg-light polli:text-intent-warning-text",
22
+ danger: "polli:border polli:border-intent-danger-border polli:bg-intent-danger-bg-light polli:text-intent-danger-text"
20
23
  };
21
24
  var Chip = ({
22
25
  theme,
@@ -128,7 +131,16 @@ var WalletBalanceCard = ({
128
131
  children: [
129
132
  /* @__PURE__ */ jsxs("span", { className: "polli:flex polli:items-center polli:gap-2", children: [
130
133
  /* @__PURE__ */ jsx3(WalletDot, { kind }),
131
- /* @__PURE__ */ jsx3("span", { className: "polli:text-sm polli:font-bold polli:uppercase polli:tracking-wide polli:text-amber-900", children: label }),
134
+ /* @__PURE__ */ jsx3(
135
+ "span",
136
+ {
137
+ className: cn(
138
+ "polli:text-sm polli:font-bold polli:uppercase polli:tracking-wide",
139
+ walletTextClasses[kind]
140
+ ),
141
+ children: label
142
+ }
143
+ ),
132
144
  info
133
145
  ] }),
134
146
  /* @__PURE__ */ jsx3(
@@ -141,7 +153,7 @@ var WalletBalanceCard = ({
141
153
  children: value
142
154
  }
143
155
  ),
144
- footer && /* @__PURE__ */ jsx3("div", { className: "polli:mt-1.5 polli:text-sm polli:font-bold polli:tabular-nums polli:text-green-700", children: footer })
156
+ footer && /* @__PURE__ */ jsx3("div", { className: "polli:mt-1.5 polli:text-sm polli:font-bold polli:tabular-nums polli:text-intent-success-text", children: footer })
145
157
  ]
146
158
  }
147
159
  );
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/lib/cn.ts","../../src/primitives/Chip.tsx","../../src/modules/wallet/chips.tsx","../../src/modules/wallet/colors.ts","../../src/modules/wallet/format-pollen.ts","../../src/modules/wallet/wallet-display.tsx"],"sourcesContent":["import { clsx } from \"clsx\";\nimport { extendTailwindMerge } from \"tailwind-merge\";\n\nconst twMerge = extendTailwindMerge({ prefix: \"polli\" });\n\n/** Internal class merge for polli:-prefixed package primitive classes. */\nexport function cn(...inputs: (string | undefined | null | false)[]) {\n return twMerge(clsx(...inputs));\n}\n","import type { ComponentPropsWithoutRef, FC } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport type { ThemeName } from \"../theme.ts\";\n\n/** Semantic chip labels for status and metadata badges. */\ntype ChipIntent = \"news\" | \"alpha\" | \"neutral\";\n\nconst chipSizes = {\n sm: \"polli:px-2 polli:py-0.5 polli:text-xs\",\n md: \"polli:px-2.5 polli:py-0.5 polli:text-sm\",\n lg: \"polli:px-3 polli:py-1 polli:text-sm\",\n} as const;\n\nconst intentClasses: Record<ChipIntent, string> = {\n news: \"polli:bg-[oklch(0.935_0.06_158)] polli:text-[oklch(0.46_0.13_158)]\",\n alpha: \"polli:bg-[oklch(0.93_0.06_300)] polli:text-[oklch(0.42_0.18_300)]\",\n neutral:\n \"polli:border polli:border-gray-400/70 polli:bg-gray-100/80 polli:text-gray-900\",\n};\n\nexport type ChipProps = ComponentPropsWithoutRef<\"span\"> & {\n /** Override the cascade theme for this chip's subtree. */\n theme?: ThemeName;\n /** Semantic intent. Wins over `theme` when set. */\n intent?: ChipIntent;\n size?: keyof typeof chipSizes;\n};\n\n// Static, rectangular colored container. Round shapes are reserved for buttons.\n// Reads `bg-theme-bg-active` / `text-theme-text-strong` from the cascade unless\n// `intent` is set (semantic, theme-independent).\nexport const Chip: FC<ChipProps> = ({\n theme,\n intent,\n size = \"md\",\n className,\n children,\n ...rest\n}) => {\n const intentClass = intent\n ? intentClasses[intent]\n : \"polli:bg-theme-bg-active polli:text-theme-text-strong\";\n return (\n <span\n {...rest}\n data-theme={theme}\n className={cn(\n \"polli:inline-flex polli:shrink-0 polli:items-center polli:gap-1 polli:rounded-lg polli:font-medium polli:leading-normal\",\n chipSizes[size],\n intentClass,\n className,\n )}\n >\n {children}\n </span>\n );\n};\n","import type { FC } from \"react\";\nimport { cn } from \"../../lib/cn.ts\";\nimport { Chip, type ChipProps } from \"../../primitives/Chip.tsx\";\n\nexport type WalletChipProps = Omit<ChipProps, \"intent\">;\n\nexport const PaidChip: FC<WalletChipProps> = ({\n className,\n children,\n ...props\n}) => (\n <Chip {...props} className={cn(\"polli-wallet-chip-paid\", className)}>\n {children}\n </Chip>\n);\n\nexport const TierChip: FC<WalletChipProps> = ({\n className,\n children,\n ...props\n}) => (\n <Chip {...props} className={cn(\"polli-wallet-chip-tier\", className)}>\n {children}\n </Chip>\n);\n","export const PAID_BALANCE_CHART_COLOR = \"var(--polli-color-paid-pale)\";\nexport const TIER_BALANCE_CHART_COLOR = \"var(--polli-color-tier-pale)\";\n","// 5-digit budget for pollen display. Integer takes its space, decimals fill\n// the remainder (capped at 4), floor toward -infinity, trailing zeros stripped.\n// Integers needing >=6 digits switch to compact (K/M/B, 3 sig figs).\n// Decimal point and minus sign do not count toward the budget.\n\nconst BUDGET = 5;\nconst MAX_DECIMALS = 4;\nconst COMPACT_THRESHOLD = 100_000;\n\nfunction floorTo(value: number, decimals: number): number {\n const factor = 10 ** decimals;\n return Math.floor(value * factor) / factor;\n}\n\nfunction formatCompact(value: number): string {\n const abs = Math.abs(value);\n const sign = value < 0 ? \"-\" : \"\";\n const [unit, scale] =\n abs >= 1e9\n ? ([\"B\", 1e9] as const)\n : abs >= 1e6\n ? ([\"M\", 1e6] as const)\n : ([\"K\", 1e3] as const);\n const ratio = abs / scale;\n const intDigits = Math.max(1, Math.floor(Math.log10(ratio)) + 1);\n const decimals = Math.max(0, 3 - intDigits);\n const floored = floorTo(ratio, decimals);\n return `${sign}${Number(floored.toFixed(decimals)).toString()}${unit}`;\n}\n\nexport function formatPollen(value: number): string {\n if (!Number.isFinite(value) || value === 0) return \"0\";\n\n const abs = Math.abs(value);\n\n if (abs >= COMPACT_THRESHOLD) return formatCompact(value);\n\n const intDigits = abs >= 1 ? Math.floor(Math.log10(abs)) + 1 : 1;\n const decimals = Math.min(MAX_DECIMALS, Math.max(0, BUDGET - intDigits));\n const floored = floorTo(value, decimals);\n if (floored === 0) return \"0\";\n return Number(floored.toFixed(decimals)).toString();\n}\n","import type { FC, ReactNode } from \"react\";\nimport { cn } from \"../../lib/cn.ts\";\n\ntype WalletBalanceKind = \"paid\" | \"tier\";\n\nconst walletPanelClasses: Record<WalletBalanceKind, string> = {\n paid: \"polli-wallet-panel-paid\",\n tier: \"polli-wallet-panel-tier\",\n};\n\nconst walletTextClasses: Record<WalletBalanceKind, string> = {\n paid: \"polli-wallet-text-paid\",\n tier: \"polli-wallet-text-tier\",\n};\n\nexport type WalletDotProps = {\n kind: WalletBalanceKind;\n className?: string;\n};\n\nexport const WalletDot: FC<WalletDotProps> = ({ kind, className }) => (\n <span\n className={cn(\n \"polli:h-2 polli:w-2 polli:rounded-full\",\n kind === \"paid\" ? \"polli-wallet-dot-paid\" : \"polli-wallet-dot-tier\",\n className,\n )}\n aria-hidden=\"true\"\n />\n);\n\nexport type WalletBalanceCardProps = {\n kind: WalletBalanceKind;\n label: ReactNode;\n value: ReactNode;\n info?: ReactNode;\n footer?: ReactNode;\n className?: string;\n};\n\nexport const WalletBalanceCard: FC<WalletBalanceCardProps> = ({\n kind,\n label,\n value,\n info,\n footer,\n className,\n}) => (\n <div\n className={cn(\n \"polli:rounded-xl polli:p-4\",\n walletPanelClasses[kind],\n className,\n )}\n >\n <span className=\"polli:flex polli:items-center polli:gap-2\">\n <WalletDot kind={kind} />\n <span className=\"polli:text-sm polli:font-bold polli:uppercase polli:tracking-wide polli:text-amber-900\">\n {label}\n </span>\n {info}\n </span>\n <div\n className={cn(\n \"polli-wallet-balance-value polli:mt-1 polli:font-bold polli:leading-none polli:tracking-tight polli:tabular-nums\",\n walletTextClasses[kind],\n )}\n >\n {value}\n </div>\n {footer && (\n <div className=\"polli:mt-1.5 polli:text-sm polli:font-bold polli:tabular-nums polli:text-green-700\">\n {footer}\n </div>\n )}\n </div>\n);\n"],"mappings":"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","names":["jsx","jsx"]}
1
+ {"version":3,"sources":["../../src/lib/cn.ts","../../src/primitives/Chip.tsx","../../src/modules/wallet/chips.tsx","../../src/modules/wallet/colors.ts","../../src/modules/wallet/format-pollen.ts","../../src/modules/wallet/wallet-display.tsx"],"sourcesContent":["import { clsx } from \"clsx\";\nimport { extendTailwindMerge } from \"tailwind-merge\";\n\nconst twMerge = extendTailwindMerge({ prefix: \"polli\" });\n\n/** Internal class merge for polli:-prefixed package primitive classes. */\nexport function cn(...inputs: (string | undefined | null | false)[]) {\n return twMerge(clsx(...inputs));\n}\n","import type { ComponentPropsWithoutRef, FC } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport type { ThemeName } from \"../theme.ts\";\n\n/** Semantic chip labels for status and metadata badges. */\ntype ChipIntent =\n | \"news\"\n | \"alpha\"\n | \"neutral\"\n | \"success\"\n | \"warning\"\n | \"danger\";\n\nconst chipSizes = {\n sm: \"polli:px-2 polli:py-0.5 polli:text-xs\",\n md: \"polli:px-2.5 polli:py-0.5 polli:text-sm\",\n lg: \"polli:px-3 polli:py-1 polli:text-sm\",\n} as const;\n\nconst intentClasses: Record<ChipIntent, string> = {\n news: \"polli:bg-intent-news-bg-light polli:text-intent-news-text\",\n alpha: \"polli:bg-intent-alpha-bg-light polli:text-intent-alpha-text\",\n neutral:\n \"polli:border polli:border-gray-400/70 polli:bg-gray-100/80 polli:text-gray-900\",\n success:\n \"polli:border polli:border-intent-success-border polli:bg-intent-success-bg-light polli:text-intent-success-text\",\n warning:\n \"polli:border polli:border-intent-warning-border polli:bg-intent-warning-bg-light polli:text-intent-warning-text\",\n danger: \"polli:border polli:border-intent-danger-border polli:bg-intent-danger-bg-light polli:text-intent-danger-text\",\n};\n\nexport type ChipProps = ComponentPropsWithoutRef<\"span\"> & {\n /** Override the cascade theme for this chip's subtree. */\n theme?: ThemeName;\n /** Semantic intent. Wins over `theme` when set. */\n intent?: ChipIntent;\n size?: keyof typeof chipSizes;\n};\n\n// Static, rectangular colored container. Round shapes are reserved for buttons.\n// Reads `bg-theme-bg-active` / `text-theme-text-strong` from the cascade unless\n// `intent` is set (semantic, theme-independent).\nexport const Chip: FC<ChipProps> = ({\n theme,\n intent,\n size = \"md\",\n className,\n children,\n ...rest\n}) => {\n const intentClass = intent\n ? intentClasses[intent]\n : \"polli:bg-theme-bg-active polli:text-theme-text-strong\";\n return (\n <span\n {...rest}\n data-theme={theme}\n className={cn(\n \"polli:inline-flex polli:shrink-0 polli:items-center polli:gap-1 polli:rounded-lg polli:font-medium polli:leading-normal\",\n chipSizes[size],\n intentClass,\n className,\n )}\n >\n {children}\n </span>\n );\n};\n","import type { FC } from \"react\";\nimport { cn } from \"../../lib/cn.ts\";\nimport { Chip, type ChipProps } from \"../../primitives/Chip.tsx\";\n\nexport type WalletChipProps = Omit<ChipProps, \"intent\">;\n\nexport const PaidChip: FC<WalletChipProps> = ({\n className,\n children,\n ...props\n}) => (\n <Chip {...props} className={cn(\"polli-wallet-chip-paid\", className)}>\n {children}\n </Chip>\n);\n\nexport const TierChip: FC<WalletChipProps> = ({\n className,\n children,\n ...props\n}) => (\n <Chip {...props} className={cn(\"polli-wallet-chip-tier\", className)}>\n {children}\n </Chip>\n);\n","export const PAID_BALANCE_CHART_COLOR = \"var(--polli-color-paid-pale)\";\nexport const TIER_BALANCE_CHART_COLOR = \"var(--polli-color-tier-pale)\";\n","// 5-digit budget for pollen display. Integer takes its space, decimals fill\n// the remainder (capped at 4), floor toward -infinity, trailing zeros stripped.\n// Integers needing >=6 digits switch to compact (K/M/B, 3 sig figs).\n// Decimal point and minus sign do not count toward the budget.\n\nconst BUDGET = 5;\nconst MAX_DECIMALS = 4;\nconst COMPACT_THRESHOLD = 100_000;\n\nfunction floorTo(value: number, decimals: number): number {\n const factor = 10 ** decimals;\n return Math.floor(value * factor) / factor;\n}\n\nfunction formatCompact(value: number): string {\n const abs = Math.abs(value);\n const sign = value < 0 ? \"-\" : \"\";\n const [unit, scale] =\n abs >= 1e9\n ? ([\"B\", 1e9] as const)\n : abs >= 1e6\n ? ([\"M\", 1e6] as const)\n : ([\"K\", 1e3] as const);\n const ratio = abs / scale;\n const intDigits = Math.max(1, Math.floor(Math.log10(ratio)) + 1);\n const decimals = Math.max(0, 3 - intDigits);\n const floored = floorTo(ratio, decimals);\n return `${sign}${Number(floored.toFixed(decimals)).toString()}${unit}`;\n}\n\nexport function formatPollen(value: number): string {\n if (!Number.isFinite(value) || value === 0) return \"0\";\n\n const abs = Math.abs(value);\n\n if (abs >= COMPACT_THRESHOLD) return formatCompact(value);\n\n const intDigits = abs >= 1 ? Math.floor(Math.log10(abs)) + 1 : 1;\n const decimals = Math.min(MAX_DECIMALS, Math.max(0, BUDGET - intDigits));\n const floored = floorTo(value, decimals);\n if (floored === 0) return \"0\";\n return Number(floored.toFixed(decimals)).toString();\n}\n","import type { FC, ReactNode } from \"react\";\nimport { cn } from \"../../lib/cn.ts\";\n\ntype WalletBalanceKind = \"paid\" | \"tier\";\n\nconst walletPanelClasses: Record<WalletBalanceKind, string> = {\n paid: \"polli-wallet-panel-paid\",\n tier: \"polli-wallet-panel-tier\",\n};\n\nconst walletTextClasses: Record<WalletBalanceKind, string> = {\n paid: \"polli-wallet-text-paid\",\n tier: \"polli-wallet-text-tier\",\n};\n\nexport type WalletDotProps = {\n kind: WalletBalanceKind;\n className?: string;\n};\n\nexport const WalletDot: FC<WalletDotProps> = ({ kind, className }) => (\n <span\n className={cn(\n \"polli:h-2 polli:w-2 polli:rounded-full\",\n kind === \"paid\" ? \"polli-wallet-dot-paid\" : \"polli-wallet-dot-tier\",\n className,\n )}\n aria-hidden=\"true\"\n />\n);\n\nexport type WalletBalanceCardProps = {\n kind: WalletBalanceKind;\n label: ReactNode;\n value: ReactNode;\n info?: ReactNode;\n footer?: ReactNode;\n className?: string;\n};\n\nexport const WalletBalanceCard: FC<WalletBalanceCardProps> = ({\n kind,\n label,\n value,\n info,\n footer,\n className,\n}) => (\n <div\n className={cn(\n \"polli:rounded-xl polli:p-4\",\n walletPanelClasses[kind],\n className,\n )}\n >\n <span className=\"polli:flex polli:items-center polli:gap-2\">\n <WalletDot kind={kind} />\n <span\n className={cn(\n \"polli:text-sm polli:font-bold polli:uppercase polli:tracking-wide\",\n walletTextClasses[kind],\n )}\n >\n {label}\n </span>\n {info}\n </span>\n <div\n className={cn(\n \"polli-wallet-balance-value polli:mt-1 polli:font-bold polli:leading-none polli:tracking-tight polli:tabular-nums\",\n walletTextClasses[kind],\n )}\n >\n {value}\n </div>\n {footer && (\n <div className=\"polli:mt-1.5 polli:text-sm polli:font-bold polli:tabular-nums polli:text-intent-success-text\">\n {footer}\n </div>\n )}\n </div>\n);\n"],"mappings":"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","names":["jsx","jsx"]}
@@ -47,9 +47,12 @@ var chipSizes = {
47
47
  lg: "polli:px-3 polli:py-1 polli:text-sm"
48
48
  };
49
49
  var intentClasses = {
50
- news: "polli:bg-[oklch(0.935_0.06_158)] polli:text-[oklch(0.46_0.13_158)]",
51
- alpha: "polli:bg-[oklch(0.93_0.06_300)] polli:text-[oklch(0.42_0.18_300)]",
52
- neutral: "polli:border polli:border-gray-400/70 polli:bg-gray-100/80 polli:text-gray-900"
50
+ news: "polli:bg-intent-news-bg-light polli:text-intent-news-text",
51
+ alpha: "polli:bg-intent-alpha-bg-light polli:text-intent-alpha-text",
52
+ neutral: "polli:border polli:border-gray-400/70 polli:bg-gray-100/80 polli:text-gray-900",
53
+ success: "polli:border polli:border-intent-success-border polli:bg-intent-success-bg-light polli:text-intent-success-text",
54
+ warning: "polli:border polli:border-intent-warning-border polli:bg-intent-warning-bg-light polli:text-intent-warning-text",
55
+ danger: "polli:border polli:border-intent-danger-border polli:bg-intent-danger-bg-light polli:text-intent-danger-text"
53
56
  };
54
57
  var Chip = ({
55
58
  theme,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/modules/wallet/sdk.ts","../../src/modules/wallet/Balance.tsx","../../src/lib/cn.ts","../../src/primitives/Chip.tsx","../../src/modules/wallet/format-pollen.ts","../../src/modules/wallet/KeyBudget.tsx","../../src/modules/wallet/KeyExpiry.tsx","../../src/modules/wallet/KeyModels.tsx","../../src/modules/wallet/KeyPrefix.tsx"],"sourcesContent":["export { Balance, type BalanceProps } from \"./Balance.tsx\";\nexport { KeyBudget, type KeyBudgetProps } from \"./KeyBudget.tsx\";\nexport { KeyExpiry, type KeyExpiryProps } from \"./KeyExpiry.tsx\";\nexport { KeyModels, type KeyModelsProps } from \"./KeyModels.tsx\";\nexport { KeyPrefix, type KeyPrefixProps } from \"./KeyPrefix.tsx\";\n","import { useAccountBalance, useAuthState } from \"@pollinations/sdk/react\";\nimport { cn } from \"../../lib/cn.ts\";\nimport { Chip } from \"../../primitives/Chip.tsx\";\nimport { formatPollen } from \"./format-pollen.ts\";\n\nexport type BalanceProps = { className?: string };\n\n/** Renders the logged-in user's pollen balance. `null` until loaded. */\nexport function Balance({ className }: BalanceProps = {}) {\n const { isLoggedIn } = useAuthState();\n const { data: balance } = useAccountBalance({ enabled: isLoggedIn });\n if (!isLoggedIn || balance == null) return null;\n return (\n <Chip\n data-polli=\"balance\"\n className={cn(\"polli:tabular-nums\", className)}\n >\n {formatPollen(balance.balance)} pollen\n </Chip>\n );\n}\n","import { clsx } from \"clsx\";\nimport { extendTailwindMerge } from \"tailwind-merge\";\n\nconst twMerge = extendTailwindMerge({ prefix: \"polli\" });\n\n/** Internal class merge for polli:-prefixed package primitive classes. */\nexport function cn(...inputs: (string | undefined | null | false)[]) {\n return twMerge(clsx(...inputs));\n}\n","import type { ComponentPropsWithoutRef, FC } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport type { ThemeName } from \"../theme.ts\";\n\n/** Semantic chip labels for status and metadata badges. */\ntype ChipIntent = \"news\" | \"alpha\" | \"neutral\";\n\nconst chipSizes = {\n sm: \"polli:px-2 polli:py-0.5 polli:text-xs\",\n md: \"polli:px-2.5 polli:py-0.5 polli:text-sm\",\n lg: \"polli:px-3 polli:py-1 polli:text-sm\",\n} as const;\n\nconst intentClasses: Record<ChipIntent, string> = {\n news: \"polli:bg-[oklch(0.935_0.06_158)] polli:text-[oklch(0.46_0.13_158)]\",\n alpha: \"polli:bg-[oklch(0.93_0.06_300)] polli:text-[oklch(0.42_0.18_300)]\",\n neutral:\n \"polli:border polli:border-gray-400/70 polli:bg-gray-100/80 polli:text-gray-900\",\n};\n\nexport type ChipProps = ComponentPropsWithoutRef<\"span\"> & {\n /** Override the cascade theme for this chip's subtree. */\n theme?: ThemeName;\n /** Semantic intent. Wins over `theme` when set. */\n intent?: ChipIntent;\n size?: keyof typeof chipSizes;\n};\n\n// Static, rectangular colored container. Round shapes are reserved for buttons.\n// Reads `bg-theme-bg-active` / `text-theme-text-strong` from the cascade unless\n// `intent` is set (semantic, theme-independent).\nexport const Chip: FC<ChipProps> = ({\n theme,\n intent,\n size = \"md\",\n className,\n children,\n ...rest\n}) => {\n const intentClass = intent\n ? intentClasses[intent]\n : \"polli:bg-theme-bg-active polli:text-theme-text-strong\";\n return (\n <span\n {...rest}\n data-theme={theme}\n className={cn(\n \"polli:inline-flex polli:shrink-0 polli:items-center polli:gap-1 polli:rounded-lg polli:font-medium polli:leading-normal\",\n chipSizes[size],\n intentClass,\n className,\n )}\n >\n {children}\n </span>\n );\n};\n","// 5-digit budget for pollen display. Integer takes its space, decimals fill\n// the remainder (capped at 4), floor toward -infinity, trailing zeros stripped.\n// Integers needing >=6 digits switch to compact (K/M/B, 3 sig figs).\n// Decimal point and minus sign do not count toward the budget.\n\nconst BUDGET = 5;\nconst MAX_DECIMALS = 4;\nconst COMPACT_THRESHOLD = 100_000;\n\nfunction floorTo(value: number, decimals: number): number {\n const factor = 10 ** decimals;\n return Math.floor(value * factor) / factor;\n}\n\nfunction formatCompact(value: number): string {\n const abs = Math.abs(value);\n const sign = value < 0 ? \"-\" : \"\";\n const [unit, scale] =\n abs >= 1e9\n ? ([\"B\", 1e9] as const)\n : abs >= 1e6\n ? ([\"M\", 1e6] as const)\n : ([\"K\", 1e3] as const);\n const ratio = abs / scale;\n const intDigits = Math.max(1, Math.floor(Math.log10(ratio)) + 1);\n const decimals = Math.max(0, 3 - intDigits);\n const floored = floorTo(ratio, decimals);\n return `${sign}${Number(floored.toFixed(decimals)).toString()}${unit}`;\n}\n\nexport function formatPollen(value: number): string {\n if (!Number.isFinite(value) || value === 0) return \"0\";\n\n const abs = Math.abs(value);\n\n if (abs >= COMPACT_THRESHOLD) return formatCompact(value);\n\n const intDigits = abs >= 1 ? Math.floor(Math.log10(abs)) + 1 : 1;\n const decimals = Math.min(MAX_DECIMALS, Math.max(0, BUDGET - intDigits));\n const floored = floorTo(value, decimals);\n if (floored === 0) return \"0\";\n return Number(floored.toFixed(decimals)).toString();\n}\n","import { useAccountKey, useAuthState } from \"@pollinations/sdk/react\";\nimport { cn } from \"../../lib/cn.ts\";\nimport { Chip } from \"../../primitives/Chip.tsx\";\nimport { formatPollen } from \"./format-pollen.ts\";\n\nexport type KeyBudgetProps = { className?: string };\n\n/** Renders the current delegated key's remaining budget. `null` until loaded. */\nexport function KeyBudget({ className }: KeyBudgetProps = {}) {\n const { isLoggedIn } = useAuthState();\n const { data: key } = useAccountKey({ enabled: isLoggedIn });\n const budget = key?.pollenBudget;\n if (!isLoggedIn || budget == null) return null;\n return (\n <Chip\n data-polli=\"key-budget\"\n className={cn(\"polli:tabular-nums\", className)}\n >\n {formatPollen(budget)} pollen\n </Chip>\n );\n}\n","import { useAccountKey, useAuthState } from \"@pollinations/sdk/react\";\nimport { cn } from \"../../lib/cn.ts\";\nimport { Chip } from \"../../primitives/Chip.tsx\";\n\nexport type KeyExpiryProps = { className?: string };\n\n/** Renders the current delegated key's expiry date (YYYY-MM-DD) or `null`. */\nexport function KeyExpiry({ className }: KeyExpiryProps = {}) {\n const { isLoggedIn } = useAuthState();\n const { data: key } = useAccountKey({ enabled: isLoggedIn });\n if (!isLoggedIn || !key?.expiresAt) return null;\n return (\n <Chip\n data-polli=\"key-expiry\"\n className={cn(\"polli:tabular-nums\", className)}\n >\n {key.expiresAt.slice(0, 10)}\n </Chip>\n );\n}\n","import { useAccountKey, useAuthState } from \"@pollinations/sdk/react\";\nimport { Chip } from \"../../primitives/Chip.tsx\";\n\nexport type KeyModelsProps = { className?: string };\n\n/** Renders \"All models\" or \"N models\" for the current key. `null` until loaded. */\nexport function KeyModels({ className }: KeyModelsProps = {}) {\n const { isLoggedIn } = useAuthState();\n const { data: key } = useAccountKey({ enabled: isLoggedIn });\n if (!isLoggedIn || !key) return null;\n const models = key.permissions?.models ?? null;\n const text =\n models === null\n ? \"All models\"\n : `${models.length} model${models.length === 1 ? \"\" : \"s\"}`;\n return (\n <Chip data-polli=\"key-models\" className={className}>\n {text}\n </Chip>\n );\n}\n","import { useAuthState } from \"@pollinations/sdk/react\";\nimport { cn } from \"../../lib/cn.ts\";\nimport { Chip } from \"../../primitives/Chip.tsx\";\n\nexport type KeyPrefixProps = { className?: string };\n\n/** Renders the first 7 chars of the API key followed by bullets. `null` when logged out. */\nexport function KeyPrefix({ className }: KeyPrefixProps = {}) {\n const { apiKey } = useAuthState();\n if (!apiKey) return null;\n return (\n <Chip\n data-polli=\"key-prefix\"\n className={cn(\"polli:font-mono polli:select-none\", className)}\n >\n {apiKey.slice(0, 7)}\n {\"••••••••\"}\n </Chip>\n );\n}\n"],"mappings":"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","names":["import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime"]}
1
+ {"version":3,"sources":["../../src/modules/wallet/sdk.ts","../../src/modules/wallet/Balance.tsx","../../src/lib/cn.ts","../../src/primitives/Chip.tsx","../../src/modules/wallet/format-pollen.ts","../../src/modules/wallet/KeyBudget.tsx","../../src/modules/wallet/KeyExpiry.tsx","../../src/modules/wallet/KeyModels.tsx","../../src/modules/wallet/KeyPrefix.tsx"],"sourcesContent":["export { Balance, type BalanceProps } from \"./Balance.tsx\";\nexport { KeyBudget, type KeyBudgetProps } from \"./KeyBudget.tsx\";\nexport { KeyExpiry, type KeyExpiryProps } from \"./KeyExpiry.tsx\";\nexport { KeyModels, type KeyModelsProps } from \"./KeyModels.tsx\";\nexport { KeyPrefix, type KeyPrefixProps } from \"./KeyPrefix.tsx\";\n","import { useAccountBalance, useAuthState } from \"@pollinations/sdk/react\";\nimport { cn } from \"../../lib/cn.ts\";\nimport { Chip } from \"../../primitives/Chip.tsx\";\nimport { formatPollen } from \"./format-pollen.ts\";\n\nexport type BalanceProps = { className?: string };\n\n/** Renders the logged-in user's pollen balance. `null` until loaded. */\nexport function Balance({ className }: BalanceProps = {}) {\n const { isLoggedIn } = useAuthState();\n const { data: balance } = useAccountBalance({ enabled: isLoggedIn });\n if (!isLoggedIn || balance == null) return null;\n return (\n <Chip\n data-polli=\"balance\"\n className={cn(\"polli:tabular-nums\", className)}\n >\n {formatPollen(balance.balance)} pollen\n </Chip>\n );\n}\n","import { clsx } from \"clsx\";\nimport { extendTailwindMerge } from \"tailwind-merge\";\n\nconst twMerge = extendTailwindMerge({ prefix: \"polli\" });\n\n/** Internal class merge for polli:-prefixed package primitive classes. */\nexport function cn(...inputs: (string | undefined | null | false)[]) {\n return twMerge(clsx(...inputs));\n}\n","import type { ComponentPropsWithoutRef, FC } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport type { ThemeName } from \"../theme.ts\";\n\n/** Semantic chip labels for status and metadata badges. */\ntype ChipIntent =\n | \"news\"\n | \"alpha\"\n | \"neutral\"\n | \"success\"\n | \"warning\"\n | \"danger\";\n\nconst chipSizes = {\n sm: \"polli:px-2 polli:py-0.5 polli:text-xs\",\n md: \"polli:px-2.5 polli:py-0.5 polli:text-sm\",\n lg: \"polli:px-3 polli:py-1 polli:text-sm\",\n} as const;\n\nconst intentClasses: Record<ChipIntent, string> = {\n news: \"polli:bg-intent-news-bg-light polli:text-intent-news-text\",\n alpha: \"polli:bg-intent-alpha-bg-light polli:text-intent-alpha-text\",\n neutral:\n \"polli:border polli:border-gray-400/70 polli:bg-gray-100/80 polli:text-gray-900\",\n success:\n \"polli:border polli:border-intent-success-border polli:bg-intent-success-bg-light polli:text-intent-success-text\",\n warning:\n \"polli:border polli:border-intent-warning-border polli:bg-intent-warning-bg-light polli:text-intent-warning-text\",\n danger: \"polli:border polli:border-intent-danger-border polli:bg-intent-danger-bg-light polli:text-intent-danger-text\",\n};\n\nexport type ChipProps = ComponentPropsWithoutRef<\"span\"> & {\n /** Override the cascade theme for this chip's subtree. */\n theme?: ThemeName;\n /** Semantic intent. Wins over `theme` when set. */\n intent?: ChipIntent;\n size?: keyof typeof chipSizes;\n};\n\n// Static, rectangular colored container. Round shapes are reserved for buttons.\n// Reads `bg-theme-bg-active` / `text-theme-text-strong` from the cascade unless\n// `intent` is set (semantic, theme-independent).\nexport const Chip: FC<ChipProps> = ({\n theme,\n intent,\n size = \"md\",\n className,\n children,\n ...rest\n}) => {\n const intentClass = intent\n ? intentClasses[intent]\n : \"polli:bg-theme-bg-active polli:text-theme-text-strong\";\n return (\n <span\n {...rest}\n data-theme={theme}\n className={cn(\n \"polli:inline-flex polli:shrink-0 polli:items-center polli:gap-1 polli:rounded-lg polli:font-medium polli:leading-normal\",\n chipSizes[size],\n intentClass,\n className,\n )}\n >\n {children}\n </span>\n );\n};\n","// 5-digit budget for pollen display. Integer takes its space, decimals fill\n// the remainder (capped at 4), floor toward -infinity, trailing zeros stripped.\n// Integers needing >=6 digits switch to compact (K/M/B, 3 sig figs).\n// Decimal point and minus sign do not count toward the budget.\n\nconst BUDGET = 5;\nconst MAX_DECIMALS = 4;\nconst COMPACT_THRESHOLD = 100_000;\n\nfunction floorTo(value: number, decimals: number): number {\n const factor = 10 ** decimals;\n return Math.floor(value * factor) / factor;\n}\n\nfunction formatCompact(value: number): string {\n const abs = Math.abs(value);\n const sign = value < 0 ? \"-\" : \"\";\n const [unit, scale] =\n abs >= 1e9\n ? ([\"B\", 1e9] as const)\n : abs >= 1e6\n ? ([\"M\", 1e6] as const)\n : ([\"K\", 1e3] as const);\n const ratio = abs / scale;\n const intDigits = Math.max(1, Math.floor(Math.log10(ratio)) + 1);\n const decimals = Math.max(0, 3 - intDigits);\n const floored = floorTo(ratio, decimals);\n return `${sign}${Number(floored.toFixed(decimals)).toString()}${unit}`;\n}\n\nexport function formatPollen(value: number): string {\n if (!Number.isFinite(value) || value === 0) return \"0\";\n\n const abs = Math.abs(value);\n\n if (abs >= COMPACT_THRESHOLD) return formatCompact(value);\n\n const intDigits = abs >= 1 ? Math.floor(Math.log10(abs)) + 1 : 1;\n const decimals = Math.min(MAX_DECIMALS, Math.max(0, BUDGET - intDigits));\n const floored = floorTo(value, decimals);\n if (floored === 0) return \"0\";\n return Number(floored.toFixed(decimals)).toString();\n}\n","import { useAccountKey, useAuthState } from \"@pollinations/sdk/react\";\nimport { cn } from \"../../lib/cn.ts\";\nimport { Chip } from \"../../primitives/Chip.tsx\";\nimport { formatPollen } from \"./format-pollen.ts\";\n\nexport type KeyBudgetProps = { className?: string };\n\n/** Renders the current delegated key's remaining budget. `null` until loaded. */\nexport function KeyBudget({ className }: KeyBudgetProps = {}) {\n const { isLoggedIn } = useAuthState();\n const { data: key } = useAccountKey({ enabled: isLoggedIn });\n const budget = key?.pollenBudget;\n if (!isLoggedIn || budget == null) return null;\n return (\n <Chip\n data-polli=\"key-budget\"\n className={cn(\"polli:tabular-nums\", className)}\n >\n {formatPollen(budget)} pollen\n </Chip>\n );\n}\n","import { useAccountKey, useAuthState } from \"@pollinations/sdk/react\";\nimport { cn } from \"../../lib/cn.ts\";\nimport { Chip } from \"../../primitives/Chip.tsx\";\n\nexport type KeyExpiryProps = { className?: string };\n\n/** Renders the current delegated key's expiry date (YYYY-MM-DD) or `null`. */\nexport function KeyExpiry({ className }: KeyExpiryProps = {}) {\n const { isLoggedIn } = useAuthState();\n const { data: key } = useAccountKey({ enabled: isLoggedIn });\n if (!isLoggedIn || !key?.expiresAt) return null;\n return (\n <Chip\n data-polli=\"key-expiry\"\n className={cn(\"polli:tabular-nums\", className)}\n >\n {key.expiresAt.slice(0, 10)}\n </Chip>\n );\n}\n","import { useAccountKey, useAuthState } from \"@pollinations/sdk/react\";\nimport { Chip } from \"../../primitives/Chip.tsx\";\n\nexport type KeyModelsProps = { className?: string };\n\n/** Renders \"All models\" or \"N models\" for the current key. `null` until loaded. */\nexport function KeyModels({ className }: KeyModelsProps = {}) {\n const { isLoggedIn } = useAuthState();\n const { data: key } = useAccountKey({ enabled: isLoggedIn });\n if (!isLoggedIn || !key) return null;\n const models = key.permissions?.models ?? null;\n const text =\n models === null\n ? \"All models\"\n : `${models.length} model${models.length === 1 ? \"\" : \"s\"}`;\n return (\n <Chip data-polli=\"key-models\" className={className}>\n {text}\n </Chip>\n );\n}\n","import { useAuthState } from \"@pollinations/sdk/react\";\nimport { cn } from \"../../lib/cn.ts\";\nimport { Chip } from \"../../primitives/Chip.tsx\";\n\nexport type KeyPrefixProps = { className?: string };\n\n/** Renders the first 7 chars of the API key followed by bullets. `null` when logged out. */\nexport function KeyPrefix({ className }: KeyPrefixProps = {}) {\n const { apiKey } = useAuthState();\n if (!apiKey) return null;\n return (\n <Chip\n data-polli=\"key-prefix\"\n className={cn(\"polli:font-mono polli:select-none\", className)}\n >\n {apiKey.slice(0, 7)}\n {\"••••••••\"}\n </Chip>\n );\n}\n"],"mappings":"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","names":["import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime"]}
@@ -17,9 +17,12 @@ var chipSizes = {
17
17
  lg: "polli:px-3 polli:py-1 polli:text-sm"
18
18
  };
19
19
  var intentClasses = {
20
- news: "polli:bg-[oklch(0.935_0.06_158)] polli:text-[oklch(0.46_0.13_158)]",
21
- alpha: "polli:bg-[oklch(0.93_0.06_300)] polli:text-[oklch(0.42_0.18_300)]",
22
- neutral: "polli:border polli:border-gray-400/70 polli:bg-gray-100/80 polli:text-gray-900"
20
+ news: "polli:bg-intent-news-bg-light polli:text-intent-news-text",
21
+ alpha: "polli:bg-intent-alpha-bg-light polli:text-intent-alpha-text",
22
+ neutral: "polli:border polli:border-gray-400/70 polli:bg-gray-100/80 polli:text-gray-900",
23
+ success: "polli:border polli:border-intent-success-border polli:bg-intent-success-bg-light polli:text-intent-success-text",
24
+ warning: "polli:border polli:border-intent-warning-border polli:bg-intent-warning-bg-light polli:text-intent-warning-text",
25
+ danger: "polli:border polli:border-intent-danger-border polli:bg-intent-danger-bg-light polli:text-intent-danger-text"
23
26
  };
24
27
  var Chip = ({
25
28
  theme,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/modules/wallet/Balance.tsx","../../src/lib/cn.ts","../../src/primitives/Chip.tsx","../../src/modules/wallet/format-pollen.ts","../../src/modules/wallet/KeyBudget.tsx","../../src/modules/wallet/KeyExpiry.tsx","../../src/modules/wallet/KeyModels.tsx","../../src/modules/wallet/KeyPrefix.tsx"],"sourcesContent":["import { useAccountBalance, useAuthState } from \"@pollinations/sdk/react\";\nimport { cn } from \"../../lib/cn.ts\";\nimport { Chip } from \"../../primitives/Chip.tsx\";\nimport { formatPollen } from \"./format-pollen.ts\";\n\nexport type BalanceProps = { className?: string };\n\n/** Renders the logged-in user's pollen balance. `null` until loaded. */\nexport function Balance({ className }: BalanceProps = {}) {\n const { isLoggedIn } = useAuthState();\n const { data: balance } = useAccountBalance({ enabled: isLoggedIn });\n if (!isLoggedIn || balance == null) return null;\n return (\n <Chip\n data-polli=\"balance\"\n className={cn(\"polli:tabular-nums\", className)}\n >\n {formatPollen(balance.balance)} pollen\n </Chip>\n );\n}\n","import { clsx } from \"clsx\";\nimport { extendTailwindMerge } from \"tailwind-merge\";\n\nconst twMerge = extendTailwindMerge({ prefix: \"polli\" });\n\n/** Internal class merge for polli:-prefixed package primitive classes. */\nexport function cn(...inputs: (string | undefined | null | false)[]) {\n return twMerge(clsx(...inputs));\n}\n","import type { ComponentPropsWithoutRef, FC } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport type { ThemeName } from \"../theme.ts\";\n\n/** Semantic chip labels for status and metadata badges. */\ntype ChipIntent = \"news\" | \"alpha\" | \"neutral\";\n\nconst chipSizes = {\n sm: \"polli:px-2 polli:py-0.5 polli:text-xs\",\n md: \"polli:px-2.5 polli:py-0.5 polli:text-sm\",\n lg: \"polli:px-3 polli:py-1 polli:text-sm\",\n} as const;\n\nconst intentClasses: Record<ChipIntent, string> = {\n news: \"polli:bg-[oklch(0.935_0.06_158)] polli:text-[oklch(0.46_0.13_158)]\",\n alpha: \"polli:bg-[oklch(0.93_0.06_300)] polli:text-[oklch(0.42_0.18_300)]\",\n neutral:\n \"polli:border polli:border-gray-400/70 polli:bg-gray-100/80 polli:text-gray-900\",\n};\n\nexport type ChipProps = ComponentPropsWithoutRef<\"span\"> & {\n /** Override the cascade theme for this chip's subtree. */\n theme?: ThemeName;\n /** Semantic intent. Wins over `theme` when set. */\n intent?: ChipIntent;\n size?: keyof typeof chipSizes;\n};\n\n// Static, rectangular colored container. Round shapes are reserved for buttons.\n// Reads `bg-theme-bg-active` / `text-theme-text-strong` from the cascade unless\n// `intent` is set (semantic, theme-independent).\nexport const Chip: FC<ChipProps> = ({\n theme,\n intent,\n size = \"md\",\n className,\n children,\n ...rest\n}) => {\n const intentClass = intent\n ? intentClasses[intent]\n : \"polli:bg-theme-bg-active polli:text-theme-text-strong\";\n return (\n <span\n {...rest}\n data-theme={theme}\n className={cn(\n \"polli:inline-flex polli:shrink-0 polli:items-center polli:gap-1 polli:rounded-lg polli:font-medium polli:leading-normal\",\n chipSizes[size],\n intentClass,\n className,\n )}\n >\n {children}\n </span>\n );\n};\n","// 5-digit budget for pollen display. Integer takes its space, decimals fill\n// the remainder (capped at 4), floor toward -infinity, trailing zeros stripped.\n// Integers needing >=6 digits switch to compact (K/M/B, 3 sig figs).\n// Decimal point and minus sign do not count toward the budget.\n\nconst BUDGET = 5;\nconst MAX_DECIMALS = 4;\nconst COMPACT_THRESHOLD = 100_000;\n\nfunction floorTo(value: number, decimals: number): number {\n const factor = 10 ** decimals;\n return Math.floor(value * factor) / factor;\n}\n\nfunction formatCompact(value: number): string {\n const abs = Math.abs(value);\n const sign = value < 0 ? \"-\" : \"\";\n const [unit, scale] =\n abs >= 1e9\n ? ([\"B\", 1e9] as const)\n : abs >= 1e6\n ? ([\"M\", 1e6] as const)\n : ([\"K\", 1e3] as const);\n const ratio = abs / scale;\n const intDigits = Math.max(1, Math.floor(Math.log10(ratio)) + 1);\n const decimals = Math.max(0, 3 - intDigits);\n const floored = floorTo(ratio, decimals);\n return `${sign}${Number(floored.toFixed(decimals)).toString()}${unit}`;\n}\n\nexport function formatPollen(value: number): string {\n if (!Number.isFinite(value) || value === 0) return \"0\";\n\n const abs = Math.abs(value);\n\n if (abs >= COMPACT_THRESHOLD) return formatCompact(value);\n\n const intDigits = abs >= 1 ? Math.floor(Math.log10(abs)) + 1 : 1;\n const decimals = Math.min(MAX_DECIMALS, Math.max(0, BUDGET - intDigits));\n const floored = floorTo(value, decimals);\n if (floored === 0) return \"0\";\n return Number(floored.toFixed(decimals)).toString();\n}\n","import { useAccountKey, useAuthState } from \"@pollinations/sdk/react\";\nimport { cn } from \"../../lib/cn.ts\";\nimport { Chip } from \"../../primitives/Chip.tsx\";\nimport { formatPollen } from \"./format-pollen.ts\";\n\nexport type KeyBudgetProps = { className?: string };\n\n/** Renders the current delegated key's remaining budget. `null` until loaded. */\nexport function KeyBudget({ className }: KeyBudgetProps = {}) {\n const { isLoggedIn } = useAuthState();\n const { data: key } = useAccountKey({ enabled: isLoggedIn });\n const budget = key?.pollenBudget;\n if (!isLoggedIn || budget == null) return null;\n return (\n <Chip\n data-polli=\"key-budget\"\n className={cn(\"polli:tabular-nums\", className)}\n >\n {formatPollen(budget)} pollen\n </Chip>\n );\n}\n","import { useAccountKey, useAuthState } from \"@pollinations/sdk/react\";\nimport { cn } from \"../../lib/cn.ts\";\nimport { Chip } from \"../../primitives/Chip.tsx\";\n\nexport type KeyExpiryProps = { className?: string };\n\n/** Renders the current delegated key's expiry date (YYYY-MM-DD) or `null`. */\nexport function KeyExpiry({ className }: KeyExpiryProps = {}) {\n const { isLoggedIn } = useAuthState();\n const { data: key } = useAccountKey({ enabled: isLoggedIn });\n if (!isLoggedIn || !key?.expiresAt) return null;\n return (\n <Chip\n data-polli=\"key-expiry\"\n className={cn(\"polli:tabular-nums\", className)}\n >\n {key.expiresAt.slice(0, 10)}\n </Chip>\n );\n}\n","import { useAccountKey, useAuthState } from \"@pollinations/sdk/react\";\nimport { Chip } from \"../../primitives/Chip.tsx\";\n\nexport type KeyModelsProps = { className?: string };\n\n/** Renders \"All models\" or \"N models\" for the current key. `null` until loaded. */\nexport function KeyModels({ className }: KeyModelsProps = {}) {\n const { isLoggedIn } = useAuthState();\n const { data: key } = useAccountKey({ enabled: isLoggedIn });\n if (!isLoggedIn || !key) return null;\n const models = key.permissions?.models ?? null;\n const text =\n models === null\n ? \"All models\"\n : `${models.length} model${models.length === 1 ? \"\" : \"s\"}`;\n return (\n <Chip data-polli=\"key-models\" className={className}>\n {text}\n </Chip>\n );\n}\n","import { useAuthState } from \"@pollinations/sdk/react\";\nimport { cn } from \"../../lib/cn.ts\";\nimport { Chip } from \"../../primitives/Chip.tsx\";\n\nexport type KeyPrefixProps = { className?: string };\n\n/** Renders the first 7 chars of the API key followed by bullets. `null` when logged out. */\nexport function KeyPrefix({ className }: KeyPrefixProps = {}) {\n const { apiKey } = useAuthState();\n if (!apiKey) return null;\n return (\n <Chip\n data-polli=\"key-prefix\"\n className={cn(\"polli:font-mono polli:select-none\", className)}\n >\n {apiKey.slice(0, 7)}\n {\"••••••••\"}\n </Chip>\n );\n}\n"],"mappings":"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","names":["useAuthState","jsxs","useAuthState","useAccountKey","useAuthState","jsx","useAuthState","useAccountKey","useAccountKey","useAuthState","jsx","useAuthState","useAccountKey","useAuthState","jsxs","useAuthState"]}
1
+ {"version":3,"sources":["../../src/modules/wallet/Balance.tsx","../../src/lib/cn.ts","../../src/primitives/Chip.tsx","../../src/modules/wallet/format-pollen.ts","../../src/modules/wallet/KeyBudget.tsx","../../src/modules/wallet/KeyExpiry.tsx","../../src/modules/wallet/KeyModels.tsx","../../src/modules/wallet/KeyPrefix.tsx"],"sourcesContent":["import { useAccountBalance, useAuthState } from \"@pollinations/sdk/react\";\nimport { cn } from \"../../lib/cn.ts\";\nimport { Chip } from \"../../primitives/Chip.tsx\";\nimport { formatPollen } from \"./format-pollen.ts\";\n\nexport type BalanceProps = { className?: string };\n\n/** Renders the logged-in user's pollen balance. `null` until loaded. */\nexport function Balance({ className }: BalanceProps = {}) {\n const { isLoggedIn } = useAuthState();\n const { data: balance } = useAccountBalance({ enabled: isLoggedIn });\n if (!isLoggedIn || balance == null) return null;\n return (\n <Chip\n data-polli=\"balance\"\n className={cn(\"polli:tabular-nums\", className)}\n >\n {formatPollen(balance.balance)} pollen\n </Chip>\n );\n}\n","import { clsx } from \"clsx\";\nimport { extendTailwindMerge } from \"tailwind-merge\";\n\nconst twMerge = extendTailwindMerge({ prefix: \"polli\" });\n\n/** Internal class merge for polli:-prefixed package primitive classes. */\nexport function cn(...inputs: (string | undefined | null | false)[]) {\n return twMerge(clsx(...inputs));\n}\n","import type { ComponentPropsWithoutRef, FC } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport type { ThemeName } from \"../theme.ts\";\n\n/** Semantic chip labels for status and metadata badges. */\ntype ChipIntent =\n | \"news\"\n | \"alpha\"\n | \"neutral\"\n | \"success\"\n | \"warning\"\n | \"danger\";\n\nconst chipSizes = {\n sm: \"polli:px-2 polli:py-0.5 polli:text-xs\",\n md: \"polli:px-2.5 polli:py-0.5 polli:text-sm\",\n lg: \"polli:px-3 polli:py-1 polli:text-sm\",\n} as const;\n\nconst intentClasses: Record<ChipIntent, string> = {\n news: \"polli:bg-intent-news-bg-light polli:text-intent-news-text\",\n alpha: \"polli:bg-intent-alpha-bg-light polli:text-intent-alpha-text\",\n neutral:\n \"polli:border polli:border-gray-400/70 polli:bg-gray-100/80 polli:text-gray-900\",\n success:\n \"polli:border polli:border-intent-success-border polli:bg-intent-success-bg-light polli:text-intent-success-text\",\n warning:\n \"polli:border polli:border-intent-warning-border polli:bg-intent-warning-bg-light polli:text-intent-warning-text\",\n danger: \"polli:border polli:border-intent-danger-border polli:bg-intent-danger-bg-light polli:text-intent-danger-text\",\n};\n\nexport type ChipProps = ComponentPropsWithoutRef<\"span\"> & {\n /** Override the cascade theme for this chip's subtree. */\n theme?: ThemeName;\n /** Semantic intent. Wins over `theme` when set. */\n intent?: ChipIntent;\n size?: keyof typeof chipSizes;\n};\n\n// Static, rectangular colored container. Round shapes are reserved for buttons.\n// Reads `bg-theme-bg-active` / `text-theme-text-strong` from the cascade unless\n// `intent` is set (semantic, theme-independent).\nexport const Chip: FC<ChipProps> = ({\n theme,\n intent,\n size = \"md\",\n className,\n children,\n ...rest\n}) => {\n const intentClass = intent\n ? intentClasses[intent]\n : \"polli:bg-theme-bg-active polli:text-theme-text-strong\";\n return (\n <span\n {...rest}\n data-theme={theme}\n className={cn(\n \"polli:inline-flex polli:shrink-0 polli:items-center polli:gap-1 polli:rounded-lg polli:font-medium polli:leading-normal\",\n chipSizes[size],\n intentClass,\n className,\n )}\n >\n {children}\n </span>\n );\n};\n","// 5-digit budget for pollen display. Integer takes its space, decimals fill\n// the remainder (capped at 4), floor toward -infinity, trailing zeros stripped.\n// Integers needing >=6 digits switch to compact (K/M/B, 3 sig figs).\n// Decimal point and minus sign do not count toward the budget.\n\nconst BUDGET = 5;\nconst MAX_DECIMALS = 4;\nconst COMPACT_THRESHOLD = 100_000;\n\nfunction floorTo(value: number, decimals: number): number {\n const factor = 10 ** decimals;\n return Math.floor(value * factor) / factor;\n}\n\nfunction formatCompact(value: number): string {\n const abs = Math.abs(value);\n const sign = value < 0 ? \"-\" : \"\";\n const [unit, scale] =\n abs >= 1e9\n ? ([\"B\", 1e9] as const)\n : abs >= 1e6\n ? ([\"M\", 1e6] as const)\n : ([\"K\", 1e3] as const);\n const ratio = abs / scale;\n const intDigits = Math.max(1, Math.floor(Math.log10(ratio)) + 1);\n const decimals = Math.max(0, 3 - intDigits);\n const floored = floorTo(ratio, decimals);\n return `${sign}${Number(floored.toFixed(decimals)).toString()}${unit}`;\n}\n\nexport function formatPollen(value: number): string {\n if (!Number.isFinite(value) || value === 0) return \"0\";\n\n const abs = Math.abs(value);\n\n if (abs >= COMPACT_THRESHOLD) return formatCompact(value);\n\n const intDigits = abs >= 1 ? Math.floor(Math.log10(abs)) + 1 : 1;\n const decimals = Math.min(MAX_DECIMALS, Math.max(0, BUDGET - intDigits));\n const floored = floorTo(value, decimals);\n if (floored === 0) return \"0\";\n return Number(floored.toFixed(decimals)).toString();\n}\n","import { useAccountKey, useAuthState } from \"@pollinations/sdk/react\";\nimport { cn } from \"../../lib/cn.ts\";\nimport { Chip } from \"../../primitives/Chip.tsx\";\nimport { formatPollen } from \"./format-pollen.ts\";\n\nexport type KeyBudgetProps = { className?: string };\n\n/** Renders the current delegated key's remaining budget. `null` until loaded. */\nexport function KeyBudget({ className }: KeyBudgetProps = {}) {\n const { isLoggedIn } = useAuthState();\n const { data: key } = useAccountKey({ enabled: isLoggedIn });\n const budget = key?.pollenBudget;\n if (!isLoggedIn || budget == null) return null;\n return (\n <Chip\n data-polli=\"key-budget\"\n className={cn(\"polli:tabular-nums\", className)}\n >\n {formatPollen(budget)} pollen\n </Chip>\n );\n}\n","import { useAccountKey, useAuthState } from \"@pollinations/sdk/react\";\nimport { cn } from \"../../lib/cn.ts\";\nimport { Chip } from \"../../primitives/Chip.tsx\";\n\nexport type KeyExpiryProps = { className?: string };\n\n/** Renders the current delegated key's expiry date (YYYY-MM-DD) or `null`. */\nexport function KeyExpiry({ className }: KeyExpiryProps = {}) {\n const { isLoggedIn } = useAuthState();\n const { data: key } = useAccountKey({ enabled: isLoggedIn });\n if (!isLoggedIn || !key?.expiresAt) return null;\n return (\n <Chip\n data-polli=\"key-expiry\"\n className={cn(\"polli:tabular-nums\", className)}\n >\n {key.expiresAt.slice(0, 10)}\n </Chip>\n );\n}\n","import { useAccountKey, useAuthState } from \"@pollinations/sdk/react\";\nimport { Chip } from \"../../primitives/Chip.tsx\";\n\nexport type KeyModelsProps = { className?: string };\n\n/** Renders \"All models\" or \"N models\" for the current key. `null` until loaded. */\nexport function KeyModels({ className }: KeyModelsProps = {}) {\n const { isLoggedIn } = useAuthState();\n const { data: key } = useAccountKey({ enabled: isLoggedIn });\n if (!isLoggedIn || !key) return null;\n const models = key.permissions?.models ?? null;\n const text =\n models === null\n ? \"All models\"\n : `${models.length} model${models.length === 1 ? \"\" : \"s\"}`;\n return (\n <Chip data-polli=\"key-models\" className={className}>\n {text}\n </Chip>\n );\n}\n","import { useAuthState } from \"@pollinations/sdk/react\";\nimport { cn } from \"../../lib/cn.ts\";\nimport { Chip } from \"../../primitives/Chip.tsx\";\n\nexport type KeyPrefixProps = { className?: string };\n\n/** Renders the first 7 chars of the API key followed by bullets. `null` when logged out. */\nexport function KeyPrefix({ className }: KeyPrefixProps = {}) {\n const { apiKey } = useAuthState();\n if (!apiKey) return null;\n return (\n <Chip\n data-polli=\"key-prefix\"\n className={cn(\"polli:font-mono polli:select-none\", className)}\n >\n {apiKey.slice(0, 7)}\n {\"••••••••\"}\n </Chip>\n );\n}\n"],"mappings":"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","names":["useAuthState","jsxs","useAuthState","useAccountKey","useAuthState","jsx","useAuthState","useAccountKey","useAccountKey","useAuthState","jsx","useAuthState","useAccountKey","useAuthState","jsxs","useAuthState"]}