@peerbots/core 1.0.0 → 1.0.1

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.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","#style-inject:#style-inject","../src/styles/index.css","../src/ui/utils.ts","../src/ui/foundations/Typography.tsx","../src/ui/foundations/Icon.tsx","../src/ui/foundations/IconRegistry.tsx","../src/ui/foundations/SocialLinks.tsx","../src/ui/foundations/CodeBlock.tsx","../src/ui/foundations/Anchor.tsx","../src/ui/forms/Button.tsx","../src/ui/forms/Input.tsx","../src/ui/forms/Select.tsx","../src/ui/forms/Slider.tsx","../src/ui/forms/SliderWithNumberField.tsx","../src/ui/forms/NumberField.tsx","../src/ui/forms/Dropdown.tsx","../src/ui/forms/Switch.tsx","../src/ui/feedback/Tooltip.tsx","../src/ui/forms/Label.tsx","../src/ui/forms/TabRadio.tsx","../src/ui/forms/Field.tsx","../src/ui/forms/TextArea.tsx","../src/ui/forms/Checkbox.tsx","../src/ui/forms/PeerbotsColorSelector.tsx","../src/ui/forms/ChipGroup.tsx","../src/ui/layout/Card.tsx","../src/ui/layout/Accordion.tsx","../src/ui/layout/Collapsible.tsx","../src/ui/layout/Separator.tsx","../src/ui/layout/SettingsPanel.tsx","../src/ui/media/Avatar.tsx","../src/ui/media/Dropzone.tsx","../src/ui/media/FileUpload.tsx","../src/ui/feedback/Dialog.tsx","../src/ui/feedback/Popover.tsx","../src/ui/feedback/Skeleton.tsx","../src/ui/feedback/Alert.tsx","../src/ui/feedback/EmptyState.tsx","../src/ui/feedback/Spinner.tsx","../src/ui/patterns/AuthFormUI.tsx","../src/ui/patterns/TabSelection.tsx","../src/ui/patterns/SearchInput.tsx","../src/ui/patterns/CopyButton.tsx","../src/ui/patterns/useClipboard.ts","../src/ui/patterns/Stepper.tsx","../src/helpers/SEO.tsx","../src/charts/DistributionBarChart.tsx","../src/charts/DistributionHistogram.tsx","../src/charts/LineGraph.tsx"],"sourcesContent":["// src/index.ts\nimport \"./styles/index.css\"; // Ensure CSS is bundled\n\nexport * from \"./ui\";\nexport * from \"./helpers/SEO\";\nexport * from \"./charts\";\n","\n export default function styleInject(css, { insertAt } = {}) {\n if (!css || typeof document === 'undefined') return\n \n const head = document.head || document.getElementsByTagName('head')[0]\n const style = document.createElement('style')\n style.type = 'text/css'\n \n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild)\n } else {\n head.appendChild(style)\n }\n } else {\n head.appendChild(style)\n }\n \n if (style.styleSheet) {\n style.styleSheet.cssText = css\n } else {\n style.appendChild(document.createTextNode(css))\n }\n }\n ","import styleInject from '#style-inject';styleInject(\"/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */@layer properties;@layer theme,base,components,utilities;@layer theme{:root,:host{--pb-font-sans: \\\"Avenir\\\", \\\"Nunito\\\", sans-serif;--pb-font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \\\"Liberation Mono\\\", \\\"Courier New\\\", monospace;--pb-color-red-50: oklch(97.1% .013 17.38);--pb-color-red-100: oklch(93.6% .032 17.717);--pb-color-red-200: oklch(88.5% .062 18.334);--pb-color-red-300: oklch(80.8% .114 19.571);--pb-color-red-400: oklch(70.4% .191 22.216);--pb-color-red-500: oklch(63.7% .237 25.331);--pb-color-red-600: oklch(57.7% .245 27.325);--pb-color-red-700: oklch(50.5% .213 27.518);--pb-color-red-800: oklch(44.4% .177 26.899);--pb-color-red-900: oklch(39.6% .141 25.723);--pb-color-red-950: oklch(25.8% .092 26.042);--pb-color-amber-50: oklch(98.7% .022 95.277);--pb-color-amber-100: oklch(96.2% .059 95.617);--pb-color-amber-200: oklch(92.4% .12 95.746);--pb-color-amber-300: oklch(87.9% .169 91.605);--pb-color-amber-400: oklch(82.8% .189 84.429);--pb-color-amber-500: oklch(76.9% .188 70.08);--pb-color-amber-600: oklch(66.6% .179 58.318);--pb-color-amber-800: oklch(47.3% .137 46.201);--pb-color-amber-900: oklch(41.4% .112 45.904);--pb-color-amber-950: oklch(27.9% .077 45.635);--pb-color-yellow-500: oklch(79.5% .184 86.047);--pb-color-green-500: oklch(72.3% .219 149.579);--pb-color-emerald-50: oklch(97.9% .021 166.113);--pb-color-emerald-100: oklch(95% .052 163.051);--pb-color-emerald-200: oklch(90.5% .093 164.15);--pb-color-emerald-500: oklch(69.6% .17 162.48);--pb-color-emerald-600: oklch(59.6% .145 163.225);--pb-color-emerald-700: oklch(50.8% .118 165.612);--pb-color-emerald-800: oklch(43.2% .095 166.913);--pb-color-emerald-900: oklch(37.8% .077 168.94);--pb-color-emerald-950: oklch(26.2% .051 172.552);--pb-color-teal-50: oklch(98.4% .014 180.72);--pb-color-teal-100: oklch(95.3% .051 180.801);--pb-color-teal-200: oklch(91% .096 180.426);--pb-color-teal-500: oklch(70.4% .14 182.503);--pb-color-teal-700: oklch(51.1% .096 186.391);--pb-color-teal-800: oklch(43.7% .078 188.216);--pb-color-teal-900: oklch(38.6% .063 188.416);--pb-color-teal-950: oklch(27.7% .046 192.524);--pb-color-blue-100: oklch(93.2% .032 255.585);--pb-color-blue-200: oklch(88.2% .059 254.128);--pb-color-blue-500: oklch(62.3% .214 259.815);--pb-color-blue-900: oklch(37.9% .146 265.522);--pb-color-indigo-950: oklch(25.7% .09 281.288);--pb-color-purple-100: oklch(94.6% .033 307.174);--pb-color-purple-200: oklch(90.2% .063 306.703);--pb-color-purple-900: oklch(38.1% .176 304.987);--pb-color-rose-100: oklch(94.1% .03 12.58);--pb-color-rose-200: oklch(89.2% .058 10.001);--pb-color-rose-300: oklch(81% .117 11.638);--pb-color-rose-700: oklch(51.4% .222 16.935);--pb-color-rose-800: oklch(45.5% .188 13.697);--pb-color-rose-900: oklch(41% .159 10.272);--pb-color-rose-950: oklch(27.1% .105 12.094);--pb-color-slate-500: oklch(55.4% .046 257.417);--pb-color-slate-600: oklch(44.6% .043 257.281);--pb-color-slate-700: oklch(37.2% .044 257.287);--pb-color-slate-800: oklch(27.9% .041 260.031);--pb-color-slate-900: oklch(20.8% .042 265.755);--pb-color-slate-950: oklch(12.9% .042 264.695);--pb-color-gray-50: oklch(98.5% .002 247.839);--pb-color-gray-100: oklch(96.7% .003 264.542);--pb-color-gray-200: oklch(92.8% .006 264.531);--pb-color-gray-300: oklch(87.2% .01 258.338);--pb-color-gray-400: oklch(70.7% .022 261.325);--pb-color-gray-500: oklch(55.1% .027 264.364);--pb-color-gray-600: oklch(44.6% .03 256.802);--pb-color-gray-700: oklch(37.3% .034 259.733);--pb-color-gray-800: oklch(27.8% .033 256.848);--pb-color-gray-900: oklch(21% .034 264.665);--pb-color-gray-950: oklch(13% .028 261.692);--pb-color-black: #000;--pb-color-white: #fff;--pb-spacing: .25rem;--pb-container-xs: 20rem;--pb-container-sm: 24rem;--pb-container-md: 28rem;--pb-container-lg: 32rem;--pb-container-xl: 36rem;--pb-container-2xl: 42rem;--pb-container-3xl: 48rem;--pb-container-4xl: 56rem;--pb-container-5xl: 64rem;--pb-text-xs: .75rem;--pb-text-xs--line-height: calc(1 / .75);--pb-text-sm: .875rem;--pb-text-sm--line-height: calc(1.25 / .875);--pb-text-base: 1rem;--pb-text-base--line-height: 1.5 ;--pb-text-lg: 1.125rem;--pb-text-lg--line-height: calc(1.75 / 1.125);--pb-text-xl: 1.25rem;--pb-text-xl--line-height: calc(1.75 / 1.25);--pb-text-2xl: 1.5rem;--pb-text-2xl--line-height: calc(2 / 1.5);--pb-text-3xl: 1.875rem;--pb-text-3xl--line-height: 1.2 ;--pb-text-4xl: 2.25rem;--pb-text-4xl--line-height: calc(2.5 / 2.25);--pb-font-weight-normal: 400;--pb-font-weight-medium: 500;--pb-font-weight-semibold: 600;--pb-font-weight-bold: 700;--pb-tracking-tight: -.025em;--pb-tracking-wider: .05em;--pb-leading-tight: 1.25;--pb-leading-snug: 1.375;--pb-leading-normal: 1.5;--pb-leading-relaxed: 1.625;--pb-radius-sm: .25rem;--pb-radius-md: .375rem;--pb-radius-lg: .5rem;--pb-radius-xl: .75rem;--pb-radius-2xl: 1rem;--pb-radius-3xl: 1.5rem;--pb-ease-in-out: cubic-bezier(.4, 0, .2, 1);--pb-animate-spin: spin 1s linear infinite;--pb-animate-pulse: pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--pb-blur-xs: 4px;--pb-blur-xl: 24px;--pb-blur-2xl: 40px;--pb-default-transition-duration: .15s;--pb-default-transition-timing-function: cubic-bezier(.4, 0, .2, 1);--pb-default-font-family: var(--pb-font-sans);--pb-default-mono-font-family: var(--pb-font-mono);--pb-color-primary: #46d9d9;--pb-color-dark-primary: #0f766e;--pb-color-secondary: #e86e8a;--pb-color-accent: #d9e021;--pb-color-accent-two: #4273ff;--pb-color-danger: #e86e8a;--pb-color-light-bg: #d8e7eb;--pb-sidebar-bg: #f9ffff;--pb-color-peerbots-pink: #e96c8a;--pb-color-peerbots-teal: #5fc7cc;--pb-color-peerbots-darkteal: #0f766e;--pb-color-peerbots-darkblue: #2e3a59;--pb-color-peerbots-olive: #82871f;--pb-color-peerbots-dark: #1a1a1a;--pb-color-peerbots-light: #f8f9fa}}@layer base{*,:after,:before,::backdrop,::file-selector-button{box-sizing:border-box;margin:0;padding:0;border:0 solid}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;tab-size:4;font-family:var(--pb-default-font-family, -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", Roboto, \\\"Helvetica Neue\\\", \\\"Noto Sans\\\", Arial, sans-serif, \\\"Apple Color Emoji\\\", \\\"Segoe UI Emoji\\\", \\\"Segoe UI Symbol\\\", \\\"Noto Color Emoji\\\");font-feature-settings:var(--pb-default-font-feature-settings, normal);font-variation-settings:var(--pb-default-font-variation-settings, normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--pb-default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \\\"Liberation Mono\\\", \\\"Courier New\\\", monospace);font-feature-settings:var(--pb-default-mono-font-feature-settings, normal);font-variation-settings:var(--pb-default-mono-font-variation-settings, normal);font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea,::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;border-radius:0;background-color:transparent;opacity:1}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px){::placeholder{color:currentcolor;@supports (color: color-mix(in lab,red,red)){color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]),::file-selector-button{appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer utilities{.pb\\\\:pointer-events-none{pointer-events:none}.pb\\\\:invisible{visibility:hidden}.pb\\\\:visible{visibility:visible}.pb\\\\:sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border-width:0}.pb\\\\:absolute{position:absolute}.pb\\\\:fixed{position:fixed}.pb\\\\:relative{position:relative}.pb\\\\:inset-0{inset:calc(var(--pb-spacing) * 0)}.pb\\\\:inset-y-0{inset-block:calc(var(--pb-spacing) * 0)}.pb\\\\:top-1\\\\/2{top:50%}.pb\\\\:top-3{top:calc(var(--pb-spacing) * 3)}.pb\\\\:top-6{top:calc(var(--pb-spacing) * 6)}.pb\\\\:top-8{top:calc(var(--pb-spacing) * 8)}.pb\\\\:top-\\\\[50\\\\%\\\\]{top:50%}.pb\\\\:right-0{right:calc(var(--pb-spacing) * 0)}.pb\\\\:right-3{right:calc(var(--pb-spacing) * 3)}.pb\\\\:right-6{right:calc(var(--pb-spacing) * 6)}.pb\\\\:-bottom-0{bottom:calc(var(--pb-spacing) * -0)}.pb\\\\:bottom-6{bottom:calc(var(--pb-spacing) * 6)}.pb\\\\:left-0{left:calc(var(--pb-spacing) * 0)}.pb\\\\:left-4{left:calc(var(--pb-spacing) * 4)}.pb\\\\:left-6{left:calc(var(--pb-spacing) * 6)}.pb\\\\:left-\\\\[50\\\\%\\\\]{left:50%}.pb\\\\:z-0{z-index:0}.pb\\\\:z-10{z-index:10}.pb\\\\:z-20{z-index:20}.pb\\\\:z-50{z-index:50}.pb\\\\:m-0{margin:calc(var(--pb-spacing) * 0)}.pb\\\\:m-1{margin:calc(var(--pb-spacing) * 1)}.pb\\\\:-mx-1{margin-inline:calc(var(--pb-spacing) * -1)}.pb\\\\:mx-1{margin-inline:calc(var(--pb-spacing) * 1)}.pb\\\\:mx-2{margin-inline:calc(var(--pb-spacing) * 2)}.pb\\\\:mx-auto{margin-inline:auto}.pb\\\\:my-1{margin-block:calc(var(--pb-spacing) * 1)}.pb\\\\:my-2{margin-block:calc(var(--pb-spacing) * 2)}.pb\\\\:my-4{margin-block:calc(var(--pb-spacing) * 4)}.pb\\\\:my-6{margin-block:calc(var(--pb-spacing) * 6)}.pb\\\\:-mt-6{margin-top:calc(var(--pb-spacing) * -6)}.pb\\\\:mt-0\\\\.5{margin-top:calc(var(--pb-spacing) * .5)}.pb\\\\:mt-1{margin-top:calc(var(--pb-spacing) * 1)}.pb\\\\:mt-2{margin-top:calc(var(--pb-spacing) * 2)}.pb\\\\:mt-3{margin-top:calc(var(--pb-spacing) * 3)}.pb\\\\:mt-4{margin-top:calc(var(--pb-spacing) * 4)}.pb\\\\:mt-6{margin-top:calc(var(--pb-spacing) * 6)}.pb\\\\:-mr-1{margin-right:calc(var(--pb-spacing) * -1)}.pb\\\\:mr-1{margin-right:calc(var(--pb-spacing) * 1)}.pb\\\\:mr-2{margin-right:calc(var(--pb-spacing) * 2)}.pb\\\\:mb-0{margin-bottom:calc(var(--pb-spacing) * 0)}.pb\\\\:mb-1{margin-bottom:calc(var(--pb-spacing) * 1)}.pb\\\\:mb-2{margin-bottom:calc(var(--pb-spacing) * 2)}.pb\\\\:mb-3{margin-bottom:calc(var(--pb-spacing) * 3)}.pb\\\\:mb-4{margin-bottom:calc(var(--pb-spacing) * 4)}.pb\\\\:mb-6{margin-bottom:calc(var(--pb-spacing) * 6)}.pb\\\\:-ml-1{margin-left:calc(var(--pb-spacing) * -1)}.pb\\\\:ml-2{margin-left:calc(var(--pb-spacing) * 2)}.pb\\\\:ml-7{margin-left:calc(var(--pb-spacing) * 7)}.pb\\\\:box-border{box-sizing:border-box}.pb\\\\:block{display:block}.pb\\\\:flex{display:flex}.pb\\\\:grid{display:grid}.pb\\\\:hidden{display:none}.pb\\\\:inline-block{display:inline-block}.pb\\\\:inline-flex{display:inline-flex}.pb\\\\:table-cell{display:table-cell}.pb\\\\:table-row{display:table-row}.pb\\\\:h-0\\\\.5{height:calc(var(--pb-spacing) * .5)}.pb\\\\:h-1\\\\.5{height:calc(var(--pb-spacing) * 1.5)}.pb\\\\:h-3{height:calc(var(--pb-spacing) * 3)}.pb\\\\:h-3\\\\.5{height:calc(var(--pb-spacing) * 3.5)}.pb\\\\:h-4{height:calc(var(--pb-spacing) * 4)}.pb\\\\:h-4\\\\.5{height:calc(var(--pb-spacing) * 4.5)}.pb\\\\:h-5{height:calc(var(--pb-spacing) * 5)}.pb\\\\:h-6{height:calc(var(--pb-spacing) * 6)}.pb\\\\:h-7{height:calc(var(--pb-spacing) * 7)}.pb\\\\:h-8{height:calc(var(--pb-spacing) * 8)}.pb\\\\:h-9{height:calc(var(--pb-spacing) * 9)}.pb\\\\:h-10{height:calc(var(--pb-spacing) * 10)}.pb\\\\:h-12{height:calc(var(--pb-spacing) * 12)}.pb\\\\:h-14{height:calc(var(--pb-spacing) * 14)}.pb\\\\:h-16{height:calc(var(--pb-spacing) * 16)}.pb\\\\:h-28{height:calc(var(--pb-spacing) * 28)}.pb\\\\:h-32{height:calc(var(--pb-spacing) * 32)}.pb\\\\:h-36{height:calc(var(--pb-spacing) * 36)}.pb\\\\:h-56{height:calc(var(--pb-spacing) * 56)}.pb\\\\:h-72{height:calc(var(--pb-spacing) * 72)}.pb\\\\:h-80{height:calc(var(--pb-spacing) * 80)}.pb\\\\:h-\\\\[1px\\\\]{height:1px}.pb\\\\:h-auto{height:auto}.pb\\\\:h-full{height:100%}.pb\\\\:h-px{height:1px}.pb\\\\:max-h-20{max-height:calc(var(--pb-spacing) * 20)}.pb\\\\:max-h-60{max-height:calc(var(--pb-spacing) * 60)}.pb\\\\:min-h-\\\\[36px\\\\]{min-height:36px}.pb\\\\:w-0\\\\.5{width:calc(var(--pb-spacing) * .5)}.pb\\\\:w-1\\\\/2{width:50%}.pb\\\\:w-2\\\\.5{width:calc(var(--pb-spacing) * 2.5)}.pb\\\\:w-2\\\\/3{width:calc(2 / 3 * 100%)}.pb\\\\:w-3{width:calc(var(--pb-spacing) * 3)}.pb\\\\:w-3\\\\.5{width:calc(var(--pb-spacing) * 3.5)}.pb\\\\:w-3\\\\/4{width:75%}.pb\\\\:w-3\\\\/5{width:calc(3 / 5 * 100%)}.pb\\\\:w-4{width:calc(var(--pb-spacing) * 4)}.pb\\\\:w-4\\\\.5{width:calc(var(--pb-spacing) * 4.5)}.pb\\\\:w-4\\\\/5{width:80%}.pb\\\\:w-5{width:calc(var(--pb-spacing) * 5)}.pb\\\\:w-6{width:calc(var(--pb-spacing) * 6)}.pb\\\\:w-7{width:calc(var(--pb-spacing) * 7)}.pb\\\\:w-8{width:calc(var(--pb-spacing) * 8)}.pb\\\\:w-9{width:calc(var(--pb-spacing) * 9)}.pb\\\\:w-10{width:calc(var(--pb-spacing) * 10)}.pb\\\\:w-11{width:calc(var(--pb-spacing) * 11)}.pb\\\\:w-11\\\\/12{width:calc(11 / 12 * 100%)}.pb\\\\:w-12{width:calc(var(--pb-spacing) * 12)}.pb\\\\:w-14{width:calc(var(--pb-spacing) * 14)}.pb\\\\:w-16{width:calc(var(--pb-spacing) * 16)}.pb\\\\:w-20{width:calc(var(--pb-spacing) * 20)}.pb\\\\:w-24{width:calc(var(--pb-spacing) * 24)}.pb\\\\:w-28{width:calc(var(--pb-spacing) * 28)}.pb\\\\:w-32{width:calc(var(--pb-spacing) * 32)}.pb\\\\:w-40{width:calc(var(--pb-spacing) * 40)}.pb\\\\:w-48{width:calc(var(--pb-spacing) * 48)}.pb\\\\:w-56{width:calc(var(--pb-spacing) * 56)}.pb\\\\:w-64{width:calc(var(--pb-spacing) * 64)}.pb\\\\:w-80{width:calc(var(--pb-spacing) * 80)}.pb\\\\:w-96{width:calc(var(--pb-spacing) * 96)}.pb\\\\:w-\\\\[1px\\\\]{width:1px}.pb\\\\:w-\\\\[320px\\\\]{width:320px}.pb\\\\:w-\\\\[380px\\\\]{width:380px}.pb\\\\:w-\\\\[400px\\\\]{width:400px}.pb\\\\:w-\\\\[420px\\\\]{width:420px}.pb\\\\:w-\\\\[460px\\\\]{width:460px}.pb\\\\:w-\\\\[480px\\\\]{width:480px}.pb\\\\:w-\\\\[500px\\\\]{width:500px}.pb\\\\:w-\\\\[520px\\\\]{width:520px}.pb\\\\:w-\\\\[540px\\\\]{width:540px}.pb\\\\:w-\\\\[560px\\\\]{width:560px}.pb\\\\:w-\\\\[600px\\\\]{width:600px}.pb\\\\:w-\\\\[var\\\\(--anchor-width\\\\)\\\\]{width:var(--anchor-width)}.pb\\\\:w-auto{width:auto}.pb\\\\:w-full{width:100%}.pb\\\\:max-w-2xl{max-width:var(--pb-container-2xl)}.pb\\\\:max-w-3xl{max-width:var(--pb-container-3xl)}.pb\\\\:max-w-4xl{max-width:var(--pb-container-4xl)}.pb\\\\:max-w-5xl{max-width:var(--pb-container-5xl)}.pb\\\\:max-w-\\\\[90vw\\\\]{max-width:90vw}.pb\\\\:max-w-\\\\[120px\\\\]{max-width:120px}.pb\\\\:max-w-\\\\[200px\\\\]{max-width:200px}.pb\\\\:max-w-lg{max-width:var(--pb-container-lg)}.pb\\\\:max-w-md{max-width:var(--pb-container-md)}.pb\\\\:max-w-sm{max-width:var(--pb-container-sm)}.pb\\\\:max-w-xl{max-width:var(--pb-container-xl)}.pb\\\\:max-w-xs{max-width:var(--pb-container-xs)}.pb\\\\:min-w-0{min-width:calc(var(--pb-spacing) * 0)}.pb\\\\:min-w-\\\\[8rem\\\\]{min-width:8rem}.pb\\\\:min-w-\\\\[120px\\\\]{min-width:120px}.pb\\\\:min-w-\\\\[240px\\\\]{min-width:240px}.pb\\\\:min-w-\\\\[400px\\\\]{min-width:400px}.pb\\\\:flex-1{flex:1}.pb\\\\:flex-none{flex:none}.pb\\\\:flex-shrink-0,.pb\\\\:shrink-0{flex-shrink:0}.pb\\\\:flex-grow{flex-grow:1}.pb\\\\:translate-x-\\\\[-50\\\\%\\\\]{--tw-translate-x: -50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.pb\\\\:-translate-y-1\\\\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.pb\\\\:translate-y-\\\\[-50\\\\%\\\\]{--tw-translate-y: -50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.pb\\\\:scale-110{--tw-scale-x: 110%;--tw-scale-y: 110%;--tw-scale-z: 110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.pb\\\\:rotate-180{rotate:180deg}.pb\\\\:transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.pb\\\\:animate-pulse{animation:var(--pb-animate-pulse)}.pb\\\\:animate-spin{animation:var(--pb-animate-spin)}.pb\\\\:cursor-crosshair{cursor:crosshair}.pb\\\\:cursor-default{cursor:default}.pb\\\\:cursor-ew-resize{cursor:ew-resize}.pb\\\\:cursor-grab{cursor:grab}.pb\\\\:cursor-help{cursor:help}.pb\\\\:cursor-not-allowed{cursor:not-allowed}.pb\\\\:cursor-pointer{cursor:pointer}.pb\\\\:touch-none{touch-action:none}.pb\\\\:list-none{list-style-type:none}.pb\\\\:appearance-none{appearance:none}.pb\\\\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.pb\\\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.pb\\\\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.pb\\\\:grid-rows-\\\\[0fr\\\\]{grid-template-rows:0fr}.pb\\\\:grid-rows-\\\\[1fr\\\\]{grid-template-rows:1fr}.pb\\\\:flex-col{flex-direction:column}.pb\\\\:flex-row{flex-direction:row}.pb\\\\:flex-wrap{flex-wrap:wrap}.pb\\\\:items-center{align-items:center}.pb\\\\:items-end{align-items:flex-end}.pb\\\\:items-start{align-items:flex-start}.pb\\\\:justify-between{justify-content:space-between}.pb\\\\:justify-center{justify-content:center}.pb\\\\:justify-end{justify-content:flex-end}.pb\\\\:gap-0{gap:calc(var(--pb-spacing) * 0)}.pb\\\\:gap-1{gap:calc(var(--pb-spacing) * 1)}.pb\\\\:gap-1\\\\.5{gap:calc(var(--pb-spacing) * 1.5)}.pb\\\\:gap-2{gap:calc(var(--pb-spacing) * 2)}.pb\\\\:gap-2\\\\.5{gap:calc(var(--pb-spacing) * 2.5)}.pb\\\\:gap-3{gap:calc(var(--pb-spacing) * 3)}.pb\\\\:gap-3\\\\.5{gap:calc(var(--pb-spacing) * 3.5)}.pb\\\\:gap-4{gap:calc(var(--pb-spacing) * 4)}.pb\\\\:gap-6{gap:calc(var(--pb-spacing) * 6)}.pb\\\\:gap-8{gap:calc(var(--pb-spacing) * 8)}.pb\\\\:gap-10{gap:calc(var(--pb-spacing) * 10)}.pb\\\\:gap-12{gap:calc(var(--pb-spacing) * 12)}.pb\\\\:gap-16{gap:calc(var(--pb-spacing) * 16)}.pb\\\\:space-y-1{:where(&>:not(:last-child)){--tw-space-y-reverse: 0;margin-block-start:calc(calc(var(--pb-spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--pb-spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}}.pb\\\\:space-y-1\\\\.5{:where(&>:not(:last-child)){--tw-space-y-reverse: 0;margin-block-start:calc(calc(var(--pb-spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--pb-spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}}.pb\\\\:space-y-2{:where(&>:not(:last-child)){--tw-space-y-reverse: 0;margin-block-start:calc(calc(var(--pb-spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--pb-spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}}.pb\\\\:space-y-2\\\\.5{:where(&>:not(:last-child)){--tw-space-y-reverse: 0;margin-block-start:calc(calc(var(--pb-spacing) * 2.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--pb-spacing) * 2.5) * calc(1 - var(--tw-space-y-reverse)))}}.pb\\\\:space-y-3{:where(&>:not(:last-child)){--tw-space-y-reverse: 0;margin-block-start:calc(calc(var(--pb-spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--pb-spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}}.pb\\\\:space-y-4{:where(&>:not(:last-child)){--tw-space-y-reverse: 0;margin-block-start:calc(calc(var(--pb-spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--pb-spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}}.pb\\\\:space-y-6{:where(&>:not(:last-child)){--tw-space-y-reverse: 0;margin-block-start:calc(calc(var(--pb-spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--pb-spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}}.pb\\\\:space-x-1{:where(&>:not(:last-child)){--tw-space-x-reverse: 0;margin-inline-start:calc(calc(var(--pb-spacing) * 1) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--pb-spacing) * 1) * calc(1 - var(--tw-space-x-reverse)))}}.pb\\\\:space-x-2{:where(&>:not(:last-child)){--tw-space-x-reverse: 0;margin-inline-start:calc(calc(var(--pb-spacing) * 2) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--pb-spacing) * 2) * calc(1 - var(--tw-space-x-reverse)))}}.pb\\\\:space-x-4{:where(&>:not(:last-child)){--tw-space-x-reverse: 0;margin-inline-start:calc(calc(var(--pb-spacing) * 4) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--pb-spacing) * 4) * calc(1 - var(--tw-space-x-reverse)))}}.pb\\\\:self-center{align-self:center}.pb\\\\:self-start{align-self:flex-start}.pb\\\\:truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pb\\\\:overflow-auto{overflow:auto}.pb\\\\:overflow-hidden{overflow:hidden}.pb\\\\:overflow-x-auto{overflow-x:auto}.pb\\\\:rounded{border-radius:.25rem}.pb\\\\:rounded-2xl{border-radius:var(--pb-radius-2xl)}.pb\\\\:rounded-3xl{border-radius:var(--pb-radius-3xl)}.pb\\\\:rounded-full{border-radius:calc(infinity * 1px)}.pb\\\\:rounded-lg{border-radius:var(--pb-radius-lg)}.pb\\\\:rounded-md{border-radius:var(--pb-radius-md)}.pb\\\\:rounded-none{border-radius:0}.pb\\\\:rounded-sm{border-radius:var(--pb-radius-sm)}.pb\\\\:rounded-xl{border-radius:var(--pb-radius-xl)}.pb\\\\:rounded-l-md{border-top-left-radius:var(--pb-radius-md);border-bottom-left-radius:var(--pb-radius-md)}.pb\\\\:rounded-r-md{border-top-right-radius:var(--pb-radius-md);border-bottom-right-radius:var(--pb-radius-md)}.pb\\\\:border{border-style:var(--tw-border-style);border-width:1px}.pb\\\\:border-0{border-style:var(--tw-border-style);border-width:0px}.pb\\\\:border-2{border-style:var(--tw-border-style);border-width:2px}.pb\\\\:border-4{border-style:var(--tw-border-style);border-width:4px}.pb\\\\:border-\\\\[1\\\\.5px\\\\]{border-style:var(--tw-border-style);border-width:1.5px}.pb\\\\:border-\\\\[2\\\\.5px\\\\]{border-style:var(--tw-border-style);border-width:2.5px}.pb\\\\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.pb\\\\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.pb\\\\:border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.pb\\\\:border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.pb\\\\:border-dashed{--tw-border-style: dashed;border-style:dashed}.pb\\\\:border-none{--tw-border-style: none;border-style:none}.pb\\\\:border-amber-200{border-color:var(--pb-color-amber-200)}.pb\\\\:border-amber-400{border-color:var(--pb-color-amber-400)}.pb\\\\:border-amber-600{border-color:var(--pb-color-amber-600)}.pb\\\\:border-black{border-color:var(--pb-color-black)}.pb\\\\:border-black\\\\/5{border-color:var(--pb-color-black);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--pb-color-black) 5%,transparent)}}.pb\\\\:border-blue-200{border-color:var(--pb-color-blue-200)}.pb\\\\:border-emerald-200{border-color:var(--pb-color-emerald-200)}.pb\\\\:border-emerald-500{border-color:var(--pb-color-emerald-500)}.pb\\\\:border-emerald-600{border-color:var(--pb-color-emerald-600)}.pb\\\\:border-gray-100{border-color:var(--pb-color-gray-100)}.pb\\\\:border-gray-200{border-color:var(--pb-color-gray-200)}.pb\\\\:border-gray-200\\\\/80{border-color:var(--pb-color-gray-200);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--pb-color-gray-200) 80%,transparent)}}.pb\\\\:border-gray-300{border-color:var(--pb-color-gray-300)}.pb\\\\:border-gray-400{border-color:var(--pb-color-gray-400)}.pb\\\\:border-gray-500{border-color:var(--pb-color-gray-500)}.pb\\\\:border-gray-700\\\\/50{border-color:var(--pb-color-gray-700);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--pb-color-gray-700) 50%,transparent)}}.pb\\\\:border-gray-800{border-color:var(--pb-color-gray-800)}.pb\\\\:border-gray-800\\\\/80{border-color:var(--pb-color-gray-800);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--pb-color-gray-800) 80%,transparent)}}.pb\\\\:border-peerbots-darkblue{border-color:var(--pb-color-peerbots-darkblue)}.pb\\\\:border-peerbots-darkblue\\\\/40{border-color:var(--pb-color-peerbots-darkblue);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--pb-color-peerbots-darkblue) 40%,transparent)}}.pb\\\\:border-peerbots-darkteal{border-color:var(--pb-color-peerbots-darkteal)}.pb\\\\:border-peerbots-darkteal\\\\/30{border-color:var(--pb-color-peerbots-darkteal);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--pb-color-peerbots-darkteal) 30%,transparent)}}.pb\\\\:border-peerbots-pink{border-color:var(--pb-color-peerbots-pink)}.pb\\\\:border-peerbots-pink\\\\/30{border-color:var(--pb-color-peerbots-pink);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--pb-color-peerbots-pink) 30%,transparent)}}.pb\\\\:border-peerbots-pink\\\\/40{border-color:var(--pb-color-peerbots-pink);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--pb-color-peerbots-pink) 40%,transparent)}}.pb\\\\:border-peerbots-teal{border-color:var(--pb-color-peerbots-teal)}.pb\\\\:border-peerbots-teal\\\\/30{border-color:var(--pb-color-peerbots-teal);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--pb-color-peerbots-teal) 30%,transparent)}}.pb\\\\:border-peerbots-teal\\\\/40{border-color:var(--pb-color-peerbots-teal);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--pb-color-peerbots-teal) 40%,transparent)}}.pb\\\\:border-primary{border-color:var(--pb-color-primary)}.pb\\\\:border-primary\\\\/40{border-color:var(--pb-color-primary);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--pb-color-primary) 40%,transparent)}}.pb\\\\:border-purple-200{border-color:var(--pb-color-purple-200)}.pb\\\\:border-red-200{border-color:var(--pb-color-red-200)}.pb\\\\:border-red-300{border-color:var(--pb-color-red-300)}.pb\\\\:border-red-400{border-color:var(--pb-color-red-400)}.pb\\\\:border-red-500{border-color:var(--pb-color-red-500)}.pb\\\\:border-red-600{border-color:var(--pb-color-red-600)}.pb\\\\:border-rose-200{border-color:var(--pb-color-rose-200)}.pb\\\\:border-rose-300{border-color:var(--pb-color-rose-300)}.pb\\\\:border-rose-700{border-color:var(--pb-color-rose-700)}.pb\\\\:border-slate-700{border-color:var(--pb-color-slate-700)}.pb\\\\:border-teal-200{border-color:var(--pb-color-teal-200)}.pb\\\\:border-teal-500{border-color:var(--pb-color-teal-500)}.pb\\\\:border-teal-700{border-color:var(--pb-color-teal-700)}.pb\\\\:border-transparent{border-color:transparent}.pb\\\\:border-white{border-color:var(--pb-color-white)}.pb\\\\:border-white\\\\/40{border-color:var(--pb-color-white);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--pb-color-white) 40%,transparent)}}.pb\\\\:border-white\\\\/50{border-color:var(--pb-color-white);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--pb-color-white) 50%,transparent)}}.pb\\\\:border-t-transparent{border-top-color:transparent}.pb\\\\:bg-\\\\[\\\\#1e222b\\\\]{background-color:#1e222b}.pb\\\\:bg-\\\\[\\\\#1e222b\\\\]\\\\/90{background-color:color-mix(in oklab,#1e222b 90%,transparent)}.pb\\\\:bg-\\\\[\\\\#161920\\\\]{background-color:#161920}.pb\\\\:bg-amber-50{background-color:var(--pb-color-amber-50)}.pb\\\\:bg-amber-50\\\\/40{background-color:var(--pb-color-amber-50);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-amber-50) 40%,transparent)}}.pb\\\\:bg-amber-100{background-color:var(--pb-color-amber-100)}.pb\\\\:bg-amber-300{background-color:var(--pb-color-amber-300)}.pb\\\\:bg-amber-500{background-color:var(--pb-color-amber-500)}.pb\\\\:bg-black\\\\/10{background-color:var(--pb-color-black);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-black) 10%,transparent)}}.pb\\\\:bg-black\\\\/15{background-color:var(--pb-color-black);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-black) 15%,transparent)}}.pb\\\\:bg-black\\\\/30{background-color:var(--pb-color-black);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-black) 30%,transparent)}}.pb\\\\:bg-black\\\\/40{background-color:var(--pb-color-black);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-black) 40%,transparent)}}.pb\\\\:bg-blue-100{background-color:var(--pb-color-blue-100)}.pb\\\\:bg-dark-primary{background-color:var(--pb-color-dark-primary)}.pb\\\\:bg-emerald-50{background-color:var(--pb-color-emerald-50)}.pb\\\\:bg-emerald-50\\\\/40{background-color:var(--pb-color-emerald-50);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-emerald-50) 40%,transparent)}}.pb\\\\:bg-emerald-50\\\\/60{background-color:var(--pb-color-emerald-50);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-emerald-50) 60%,transparent)}}.pb\\\\:bg-emerald-100{background-color:var(--pb-color-emerald-100)}.pb\\\\:bg-emerald-700{background-color:var(--pb-color-emerald-700)}.pb\\\\:bg-gray-50{background-color:var(--pb-color-gray-50)}.pb\\\\:bg-gray-50\\\\/40{background-color:var(--pb-color-gray-50);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-gray-50) 40%,transparent)}}.pb\\\\:bg-gray-50\\\\/50{background-color:var(--pb-color-gray-50);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-gray-50) 50%,transparent)}}.pb\\\\:bg-gray-50\\\\/70{background-color:var(--pb-color-gray-50);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-gray-50) 70%,transparent)}}.pb\\\\:bg-gray-50\\\\/80{background-color:var(--pb-color-gray-50);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-gray-50) 80%,transparent)}}.pb\\\\:bg-gray-100{background-color:var(--pb-color-gray-100)}.pb\\\\:bg-gray-100\\\\/90{background-color:var(--pb-color-gray-100);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-gray-100) 90%,transparent)}}.pb\\\\:bg-gray-200{background-color:var(--pb-color-gray-200)}.pb\\\\:bg-gray-600{background-color:var(--pb-color-gray-600)}.pb\\\\:bg-gray-800{background-color:var(--pb-color-gray-800)}.pb\\\\:bg-gray-800\\\\/70{background-color:var(--pb-color-gray-800);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-gray-800) 70%,transparent)}}.pb\\\\:bg-gray-800\\\\/80{background-color:var(--pb-color-gray-800);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-gray-800) 80%,transparent)}}.pb\\\\:bg-gray-900{background-color:var(--pb-color-gray-900)}.pb\\\\:bg-green-500\\\\/80{background-color:var(--pb-color-green-500);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-green-500) 80%,transparent)}}.pb\\\\:bg-peerbots-darkblue{background-color:var(--pb-color-peerbots-darkblue)}.pb\\\\:bg-peerbots-darkblue\\\\/10{background-color:var(--pb-color-peerbots-darkblue);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-darkblue) 10%,transparent)}}.pb\\\\:bg-peerbots-darkblue\\\\/15{background-color:var(--pb-color-peerbots-darkblue);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-darkblue) 15%,transparent)}}.pb\\\\:bg-peerbots-darkblue\\\\/20{background-color:var(--pb-color-peerbots-darkblue);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-darkblue) 20%,transparent)}}.pb\\\\:bg-peerbots-darkteal{background-color:var(--pb-color-peerbots-darkteal)}.pb\\\\:bg-peerbots-pink{background-color:var(--pb-color-peerbots-pink)}.pb\\\\:bg-peerbots-pink\\\\/5{background-color:var(--pb-color-peerbots-pink);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-pink) 5%,transparent)}}.pb\\\\:bg-peerbots-pink\\\\/10{background-color:var(--pb-color-peerbots-pink);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-pink) 10%,transparent)}}.pb\\\\:bg-peerbots-pink\\\\/15{background-color:var(--pb-color-peerbots-pink);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-pink) 15%,transparent)}}.pb\\\\:bg-peerbots-pink\\\\/20{background-color:var(--pb-color-peerbots-pink);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-pink) 20%,transparent)}}.pb\\\\:bg-peerbots-teal{background-color:var(--pb-color-peerbots-teal)}.pb\\\\:bg-peerbots-teal\\\\/5{background-color:var(--pb-color-peerbots-teal);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-teal) 5%,transparent)}}.pb\\\\:bg-peerbots-teal\\\\/10{background-color:var(--pb-color-peerbots-teal);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-teal) 10%,transparent)}}.pb\\\\:bg-peerbots-teal\\\\/15{background-color:var(--pb-color-peerbots-teal);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-teal) 15%,transparent)}}.pb\\\\:bg-peerbots-teal\\\\/20{background-color:var(--pb-color-peerbots-teal);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-teal) 20%,transparent)}}.pb\\\\:bg-peerbots-teal\\\\/30{background-color:var(--pb-color-peerbots-teal);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-teal) 30%,transparent)}}.pb\\\\:bg-primary{background-color:var(--pb-color-primary)}.pb\\\\:bg-primary\\\\/5{background-color:var(--pb-color-primary);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-primary) 5%,transparent)}}.pb\\\\:bg-primary\\\\/10{background-color:var(--pb-color-primary);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-primary) 10%,transparent)}}.pb\\\\:bg-primary\\\\/20{background-color:var(--pb-color-primary);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-primary) 20%,transparent)}}.pb\\\\:bg-primary\\\\/30{background-color:var(--pb-color-primary);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-primary) 30%,transparent)}}.pb\\\\:bg-purple-100{background-color:var(--pb-color-purple-100)}.pb\\\\:bg-red-50{background-color:var(--pb-color-red-50)}.pb\\\\:bg-red-50\\\\/40{background-color:var(--pb-color-red-50);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-red-50) 40%,transparent)}}.pb\\\\:bg-red-50\\\\/60{background-color:var(--pb-color-red-50);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-red-50) 60%,transparent)}}.pb\\\\:bg-red-100{background-color:var(--pb-color-red-100)}.pb\\\\:bg-red-500\\\\/80{background-color:var(--pb-color-red-500);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-red-500) 80%,transparent)}}.pb\\\\:bg-red-600{background-color:var(--pb-color-red-600)}.pb\\\\:bg-red-700{background-color:var(--pb-color-red-700)}.pb\\\\:bg-rose-100{background-color:var(--pb-color-rose-100)}.pb\\\\:bg-rose-700{background-color:var(--pb-color-rose-700)}.pb\\\\:bg-rose-800{background-color:var(--pb-color-rose-800)}.pb\\\\:bg-slate-900{background-color:var(--pb-color-slate-900)}.pb\\\\:bg-teal-50{background-color:var(--pb-color-teal-50)}.pb\\\\:bg-teal-50\\\\/40{background-color:var(--pb-color-teal-50);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-teal-50) 40%,transparent)}}.pb\\\\:bg-teal-100{background-color:var(--pb-color-teal-100)}.pb\\\\:bg-teal-700{background-color:var(--pb-color-teal-700)}.pb\\\\:bg-transparent{background-color:transparent}.pb\\\\:bg-white{background-color:var(--pb-color-white)}.pb\\\\:bg-white\\\\/50{background-color:var(--pb-color-white);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-white) 50%,transparent)}}.pb\\\\:bg-white\\\\/80{background-color:var(--pb-color-white);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-white) 80%,transparent)}}.pb\\\\:bg-white\\\\/90{background-color:var(--pb-color-white);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-white) 90%,transparent)}}.pb\\\\:bg-yellow-500\\\\/80{background-color:var(--pb-color-yellow-500);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-yellow-500) 80%,transparent)}}.pb\\\\:bg-gradient-to-br{--tw-gradient-position: to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.pb\\\\:bg-gradient-to-r{--tw-gradient-position: to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.pb\\\\:bg-gradient-to-tr{--tw-gradient-position: to top right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.pb\\\\:from-peerbots-teal{--tw-gradient-from: var(--pb-color-peerbots-teal);--tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.pb\\\\:from-slate-900{--tw-gradient-from: var(--pb-color-slate-900);--tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.pb\\\\:via-indigo-950{--tw-gradient-via: var(--pb-color-indigo-950);--tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-via-stops)}.pb\\\\:via-peerbots-pink{--tw-gradient-via: var(--pb-color-peerbots-pink);--tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-via-stops)}.pb\\\\:via-slate-800{--tw-gradient-via: var(--pb-color-slate-800);--tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-via-stops)}.pb\\\\:to-peerbots-darkblue{--tw-gradient-to: var(--pb-color-peerbots-darkblue);--tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.pb\\\\:to-teal-950{--tw-gradient-to: var(--pb-color-teal-950);--tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.pb\\\\:bg-clip-text{background-clip:text}.pb\\\\:fill-white{fill:var(--pb-color-white)}.pb\\\\:fill-white\\\\/90{fill:var(--pb-color-white);@supports (color: color-mix(in lab,red,red)){fill:color-mix(in oklab,var(--pb-color-white) 90%,transparent)}}.pb\\\\:stroke-gray-100{stroke:var(--pb-color-gray-100)}.pb\\\\:stroke-gray-200{stroke:var(--pb-color-gray-200)}.pb\\\\:stroke-white\\\\/50{stroke:var(--pb-color-white);@supports (color: color-mix(in lab,red,red)){stroke:color-mix(in oklab,var(--pb-color-white) 50%,transparent)}}.pb\\\\:object-contain{object-fit:contain}.pb\\\\:object-cover{object-fit:cover}.pb\\\\:p-0{padding:calc(var(--pb-spacing) * 0)}.pb\\\\:p-0\\\\.5{padding:calc(var(--pb-spacing) * .5)}.pb\\\\:p-1{padding:calc(var(--pb-spacing) * 1)}.pb\\\\:p-1\\\\.5{padding:calc(var(--pb-spacing) * 1.5)}.pb\\\\:p-2{padding:calc(var(--pb-spacing) * 2)}.pb\\\\:p-2\\\\.5{padding:calc(var(--pb-spacing) * 2.5)}.pb\\\\:p-3{padding:calc(var(--pb-spacing) * 3)}.pb\\\\:p-3\\\\.5{padding:calc(var(--pb-spacing) * 3.5)}.pb\\\\:p-4{padding:calc(var(--pb-spacing) * 4)}.pb\\\\:p-4\\\\.5{padding:calc(var(--pb-spacing) * 4.5)}.pb\\\\:p-5{padding:calc(var(--pb-spacing) * 5)}.pb\\\\:p-6{padding:calc(var(--pb-spacing) * 6)}.pb\\\\:p-8{padding:calc(var(--pb-spacing) * 8)}.pb\\\\:p-10{padding:calc(var(--pb-spacing) * 10)}.pb\\\\:p-12{padding:calc(var(--pb-spacing) * 12)}.pb\\\\:px-0\\\\.5{padding-inline:calc(var(--pb-spacing) * .5)}.pb\\\\:px-1{padding-inline:calc(var(--pb-spacing) * 1)}.pb\\\\:px-1\\\\.5{padding-inline:calc(var(--pb-spacing) * 1.5)}.pb\\\\:px-2{padding-inline:calc(var(--pb-spacing) * 2)}.pb\\\\:px-2\\\\.5{padding-inline:calc(var(--pb-spacing) * 2.5)}.pb\\\\:px-3{padding-inline:calc(var(--pb-spacing) * 3)}.pb\\\\:px-3\\\\.5{padding-inline:calc(var(--pb-spacing) * 3.5)}.pb\\\\:px-4{padding-inline:calc(var(--pb-spacing) * 4)}.pb\\\\:px-4\\\\.5{padding-inline:calc(var(--pb-spacing) * 4.5)}.pb\\\\:px-5{padding-inline:calc(var(--pb-spacing) * 5)}.pb\\\\:px-6{padding-inline:calc(var(--pb-spacing) * 6)}.pb\\\\:px-8{padding-inline:calc(var(--pb-spacing) * 8)}.pb\\\\:py-0\\\\.5{padding-block:calc(var(--pb-spacing) * .5)}.pb\\\\:py-1{padding-block:calc(var(--pb-spacing) * 1)}.pb\\\\:py-1\\\\.5{padding-block:calc(var(--pb-spacing) * 1.5)}.pb\\\\:py-2{padding-block:calc(var(--pb-spacing) * 2)}.pb\\\\:py-2\\\\.5{padding-block:calc(var(--pb-spacing) * 2.5)}.pb\\\\:py-3{padding-block:calc(var(--pb-spacing) * 3)}.pb\\\\:py-3\\\\.5{padding-block:calc(var(--pb-spacing) * 3.5)}.pb\\\\:py-4{padding-block:calc(var(--pb-spacing) * 4)}.pb\\\\:pt-0\\\\.5{padding-top:calc(var(--pb-spacing) * .5)}.pb\\\\:pt-2{padding-top:calc(var(--pb-spacing) * 2)}.pb\\\\:pr-2\\\\.5{padding-right:calc(var(--pb-spacing) * 2.5)}.pb\\\\:pr-3{padding-right:calc(var(--pb-spacing) * 3)}.pb\\\\:pr-4{padding-right:calc(var(--pb-spacing) * 4)}.pb\\\\:pr-8{padding-right:calc(var(--pb-spacing) * 8)}.pb\\\\:pr-9{padding-right:calc(var(--pb-spacing) * 9)}.pb\\\\:pr-10{padding-right:calc(var(--pb-spacing) * 10)}.pb\\\\:pb-2{padding-bottom:calc(var(--pb-spacing) * 2)}.pb\\\\:pb-2\\\\.5{padding-bottom:calc(var(--pb-spacing) * 2.5)}.pb\\\\:pb-5{padding-bottom:calc(var(--pb-spacing) * 5)}.pb\\\\:pb-6{padding-bottom:calc(var(--pb-spacing) * 6)}.pb\\\\:pl-1\\\\.5{padding-left:calc(var(--pb-spacing) * 1.5)}.pb\\\\:pl-3{padding-left:calc(var(--pb-spacing) * 3)}.pb\\\\:pl-10{padding-left:calc(var(--pb-spacing) * 10)}.pb\\\\:text-center{text-align:center}.pb\\\\:text-left{text-align:left}.pb\\\\:text-right{text-align:right}.pb\\\\:align-middle{vertical-align:middle}.pb\\\\:font-mono{font-family:var(--pb-font-mono)}.pb\\\\:font-sans{font-family:var(--pb-font-sans)}.pb\\\\:text-2xl{font-size:var(--pb-text-2xl);line-height:var(--tw-leading, var(--pb-text-2xl--line-height))}.pb\\\\:text-3xl{font-size:var(--pb-text-3xl);line-height:var(--tw-leading, var(--pb-text-3xl--line-height))}.pb\\\\:text-4xl{font-size:var(--pb-text-4xl);line-height:var(--tw-leading, var(--pb-text-4xl--line-height))}.pb\\\\:text-base{font-size:var(--pb-text-base);line-height:var(--tw-leading, var(--pb-text-base--line-height))}.pb\\\\:text-lg{font-size:var(--pb-text-lg);line-height:var(--tw-leading, var(--pb-text-lg--line-height))}.pb\\\\:text-sm{font-size:var(--pb-text-sm);line-height:var(--tw-leading, var(--pb-text-sm--line-height))}.pb\\\\:text-xl{font-size:var(--pb-text-xl);line-height:var(--tw-leading, var(--pb-text-xl--line-height))}.pb\\\\:text-xs{font-size:var(--pb-text-xs);line-height:var(--tw-leading, var(--pb-text-xs--line-height))}.pb\\\\:text-\\\\[8px\\\\]{font-size:8px}.pb\\\\:text-\\\\[9px\\\\]{font-size:9px}.pb\\\\:text-\\\\[10px\\\\]{font-size:10px}.pb\\\\:text-\\\\[11px\\\\]{font-size:11px}.pb\\\\:leading-6{--tw-leading: calc(var(--pb-spacing) * 6);line-height:calc(var(--pb-spacing) * 6)}.pb\\\\:leading-none{--tw-leading: 1;line-height:1}.pb\\\\:leading-normal{--tw-leading: var(--pb-leading-normal);line-height:var(--pb-leading-normal)}.pb\\\\:leading-relaxed{--tw-leading: var(--pb-leading-relaxed);line-height:var(--pb-leading-relaxed)}.pb\\\\:leading-snug{--tw-leading: var(--pb-leading-snug);line-height:var(--pb-leading-snug)}.pb\\\\:leading-tight{--tw-leading: var(--pb-leading-tight);line-height:var(--pb-leading-tight)}.pb\\\\:font-bold{--tw-font-weight: var(--pb-font-weight-bold);font-weight:var(--pb-font-weight-bold)}.pb\\\\:font-medium{--tw-font-weight: var(--pb-font-weight-medium);font-weight:var(--pb-font-weight-medium)}.pb\\\\:font-normal{--tw-font-weight: var(--pb-font-weight-normal);font-weight:var(--pb-font-weight-normal)}.pb\\\\:font-semibold{--tw-font-weight: var(--pb-font-weight-semibold);font-weight:var(--pb-font-weight-semibold)}.pb\\\\:tracking-tight{--tw-tracking: var(--pb-tracking-tight);letter-spacing:var(--pb-tracking-tight)}.pb\\\\:tracking-wider{--tw-tracking: var(--pb-tracking-wider);letter-spacing:var(--pb-tracking-wider)}.pb\\\\:whitespace-normal{white-space:normal}.pb\\\\:whitespace-nowrap{white-space:nowrap}.pb\\\\:text-\\\\[\\\\#636814\\\\]{color:#636814}.pb\\\\:text-amber-600{color:var(--pb-color-amber-600)}.pb\\\\:text-amber-800{color:var(--pb-color-amber-800)}.pb\\\\:text-amber-900{color:var(--pb-color-amber-900)}.pb\\\\:text-amber-950{color:var(--pb-color-amber-950)}.pb\\\\:text-black{color:var(--pb-color-black)}.pb\\\\:text-blue-500{color:var(--pb-color-blue-500)}.pb\\\\:text-blue-900{color:var(--pb-color-blue-900)}.pb\\\\:text-current{color:currentcolor}.pb\\\\:text-dark-primary{color:var(--pb-color-dark-primary)}.pb\\\\:text-emerald-600{color:var(--pb-color-emerald-600)}.pb\\\\:text-emerald-700{color:var(--pb-color-emerald-700)}.pb\\\\:text-emerald-800{color:var(--pb-color-emerald-800)}.pb\\\\:text-emerald-900{color:var(--pb-color-emerald-900)}.pb\\\\:text-emerald-950{color:var(--pb-color-emerald-950)}.pb\\\\:text-gray-100{color:var(--pb-color-gray-100)}.pb\\\\:text-gray-200{color:var(--pb-color-gray-200)}.pb\\\\:text-gray-300{color:var(--pb-color-gray-300)}.pb\\\\:text-gray-400{color:var(--pb-color-gray-400)}.pb\\\\:text-gray-500{color:var(--pb-color-gray-500)}.pb\\\\:text-gray-600{color:var(--pb-color-gray-600)}.pb\\\\:text-gray-700{color:var(--pb-color-gray-700)}.pb\\\\:text-gray-800{color:var(--pb-color-gray-800)}.pb\\\\:text-gray-900{color:var(--pb-color-gray-900)}.pb\\\\:text-gray-950{color:var(--pb-color-gray-950)}.pb\\\\:text-green-500{color:var(--pb-color-green-500)}.pb\\\\:text-peerbots-dark{color:var(--pb-color-peerbots-dark)}.pb\\\\:text-peerbots-darkblue{color:var(--pb-color-peerbots-darkblue)}.pb\\\\:text-peerbots-darkteal{color:var(--pb-color-peerbots-darkteal)}.pb\\\\:text-peerbots-pink{color:var(--pb-color-peerbots-pink)}.pb\\\\:text-peerbots-teal{color:var(--pb-color-peerbots-teal)}.pb\\\\:text-primary{color:var(--pb-color-primary)}.pb\\\\:text-purple-900{color:var(--pb-color-purple-900)}.pb\\\\:text-red-400{color:var(--pb-color-red-400)}.pb\\\\:text-red-500{color:var(--pb-color-red-500)}.pb\\\\:text-red-600{color:var(--pb-color-red-600)}.pb\\\\:text-red-700{color:var(--pb-color-red-700)}.pb\\\\:text-red-800{color:var(--pb-color-red-800)}.pb\\\\:text-red-900{color:var(--pb-color-red-900)}.pb\\\\:text-red-950{color:var(--pb-color-red-950)}.pb\\\\:text-rose-800{color:var(--pb-color-rose-800)}.pb\\\\:text-rose-900{color:var(--pb-color-rose-900)}.pb\\\\:text-rose-950{color:var(--pb-color-rose-950)}.pb\\\\:text-slate-500{color:var(--pb-color-slate-500)}.pb\\\\:text-slate-600{color:var(--pb-color-slate-600)}.pb\\\\:text-slate-700{color:var(--pb-color-slate-700)}.pb\\\\:text-slate-950{color:var(--pb-color-slate-950)}.pb\\\\:text-teal-200{color:var(--pb-color-teal-200)}.pb\\\\:text-teal-800{color:var(--pb-color-teal-800)}.pb\\\\:text-teal-900{color:var(--pb-color-teal-900)}.pb\\\\:text-teal-950{color:var(--pb-color-teal-950)}.pb\\\\:text-transparent{color:transparent}.pb\\\\:text-white{color:var(--pb-color-white)}.pb\\\\:text-white\\\\/60{color:var(--pb-color-white);@supports (color: color-mix(in lab,red,red)){color:color-mix(in oklab,var(--pb-color-white) 60%,transparent)}}.pb\\\\:text-white\\\\/80{color:var(--pb-color-white);@supports (color: color-mix(in lab,red,red)){color:color-mix(in oklab,var(--pb-color-white) 80%,transparent)}}.pb\\\\:uppercase{text-transform:uppercase}.pb\\\\:italic{font-style:italic}.pb\\\\:no-underline{text-decoration-line:none}.pb\\\\:underline{text-decoration-line:underline}.pb\\\\:decoration-current{text-decoration-color:currentcolor}.pb\\\\:decoration-dotted{text-decoration-style:dotted}.pb\\\\:underline-offset-4{text-underline-offset:4px}.pb\\\\:opacity-0{opacity:0%}.pb\\\\:opacity-10{opacity:10%}.pb\\\\:opacity-25{opacity:25%}.pb\\\\:opacity-40{opacity:40%}.pb\\\\:opacity-50{opacity:50%}.pb\\\\:opacity-70{opacity:70%}.pb\\\\:opacity-75{opacity:75%}.pb\\\\:opacity-80{opacity:80%}.pb\\\\:opacity-90{opacity:90%}.pb\\\\:opacity-100{opacity:100%}.pb\\\\:shadow{--tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.pb\\\\:shadow-2xl{--tw-shadow: 0 25px 50px -12px var(--tw-shadow-color, rgb(0 0 0 / .25));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.pb\\\\:shadow-lg{--tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.pb\\\\:shadow-md{--tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.pb\\\\:shadow-sm{--tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.pb\\\\:shadow-xl{--tw-shadow: 0 20px 25px -5px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 8px 10px -6px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.pb\\\\:shadow-xs{--tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / .05));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.pb\\\\:ring-0{--tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(0px + 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)}.pb\\\\: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)}.pb\\\\:ring-4{--tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(4px + 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)}.pb\\\\:shadow-peerbots-teal\\\\/10{--tw-shadow-color: var(--pb-color-peerbots-teal);@supports (color: color-mix(in lab,red,red)){--tw-shadow-color: color-mix(in oklab, color-mix(in oklab, var(--pb-color-peerbots-teal) 10%, transparent) var(--tw-shadow-alpha), transparent)}}.pb\\\\:ring-black{--tw-ring-color: var(--pb-color-black)}.pb\\\\:ring-gray-300{--tw-ring-color: var(--pb-color-gray-300)}.pb\\\\:ring-peerbots-darkblue\\\\/20{--tw-ring-color: var(--pb-color-peerbots-darkblue);@supports (color: color-mix(in lab,red,red)){--tw-ring-color: color-mix(in oklab, var(--pb-color-peerbots-darkblue) 20%, transparent)}}.pb\\\\:ring-peerbots-teal\\\\/30{--tw-ring-color: var(--pb-color-peerbots-teal);@supports (color: color-mix(in lab,red,red)){--tw-ring-color: color-mix(in oklab, var(--pb-color-peerbots-teal) 30%, transparent)}}.pb\\\\:ring-primary\\\\/30{--tw-ring-color: var(--pb-color-primary);@supports (color: color-mix(in lab,red,red)){--tw-ring-color: color-mix(in oklab, var(--pb-color-primary) 30%, transparent)}}.pb\\\\:ring-rose-200{--tw-ring-color: var(--pb-color-rose-200)}.pb\\\\:backdrop-blur-2xl{--tw-backdrop-blur: blur(var(--pb-blur-2xl));-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,)}.pb\\\\:backdrop-blur-xl{--tw-backdrop-blur: blur(var(--pb-blur-xl));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.pb\\\\:backdrop-blur-xs{--tw-backdrop-blur: blur(var(--pb-blur-xs));-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,)}.pb\\\\: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(--pb-default-transition-timing-function));transition-duration:var(--tw-duration, var(--pb-default-transition-duration))}.pb\\\\:transition-all{transition-property:all;transition-timing-function:var(--tw-ease, var(--pb-default-transition-timing-function));transition-duration:var(--tw-duration, var(--pb-default-transition-duration))}.pb\\\\: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(--pb-default-transition-timing-function));transition-duration:var(--tw-duration, var(--pb-default-transition-duration))}.pb\\\\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease, var(--pb-default-transition-timing-function));transition-duration:var(--tw-duration, var(--pb-default-transition-duration))}.pb\\\\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease, var(--pb-default-transition-timing-function));transition-duration:var(--tw-duration, var(--pb-default-transition-duration))}.pb\\\\:duration-150{--tw-duration: .15s;transition-duration:.15s}.pb\\\\:duration-200{--tw-duration: .2s;transition-duration:.2s}.pb\\\\:duration-300{--tw-duration: .3s;transition-duration:.3s}.pb\\\\:ease-in-out{--tw-ease: var(--pb-ease-in-out);transition-timing-function:var(--pb-ease-in-out)}.pb\\\\:outline-none{--tw-outline-style: none;outline-style:none}.pb\\\\:select-none{-webkit-user-select:none;user-select:none}.pb\\\\:ring-inset{--tw-ring-inset: inset}.pb\\\\:group-focus-within\\\\:text-gray-800{&:is(:where(.pb\\\\:group):focus-within *){color:var(--pb-color-gray-800)}}.pb\\\\:group-hover\\\\:scale-102{&:is(:where(.pb\\\\:group):hover *){@media(hover:hover){--tw-scale-x: 102%;--tw-scale-y: 102%;--tw-scale-z: 102%;scale:var(--tw-scale-x) var(--tw-scale-y)}}}.pb\\\\:group-hover\\\\:opacity-100{&:is(:where(.pb\\\\:group):hover *){@media(hover:hover){opacity:100%}}}.pb\\\\:placeholder\\\\:text-gray-400{&::placeholder{color:var(--pb-color-gray-400)}}.pb\\\\:focus-within\\\\:ring-2{&:focus-within{--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)}}.pb\\\\:focus-within\\\\:ring-peerbots-teal{&:focus-within{--tw-ring-color: var(--pb-color-peerbots-teal)}}.pb\\\\:focus-within\\\\:ring-primary{&:focus-within{--tw-ring-color: var(--pb-color-primary)}}.pb\\\\:hover\\\\:-translate-y-0\\\\.5{&:hover{@media(hover:hover){--tw-translate-y: calc(var(--pb-spacing) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y)}}}.pb\\\\:hover\\\\:scale-105{&:hover{@media(hover:hover){--tw-scale-x: 105%;--tw-scale-y: 105%;--tw-scale-z: 105%;scale:var(--tw-scale-x) var(--tw-scale-y)}}}.pb\\\\:hover\\\\:scale-110{&:hover{@media(hover:hover){--tw-scale-x: 110%;--tw-scale-y: 110%;--tw-scale-z: 110%;scale:var(--tw-scale-x) var(--tw-scale-y)}}}.pb\\\\:hover\\\\:border-gray-300{&:hover{@media(hover:hover){border-color:var(--pb-color-gray-300)}}}.pb\\\\:hover\\\\:border-gray-400{&:hover{@media(hover:hover){border-color:var(--pb-color-gray-400)}}}.pb\\\\:hover\\\\:border-gray-500{&:hover{@media(hover:hover){border-color:var(--pb-color-gray-500)}}}.pb\\\\:hover\\\\:border-peerbots-darkteal{&:hover{@media(hover:hover){border-color:var(--pb-color-peerbots-darkteal)}}}.pb\\\\:hover\\\\:border-peerbots-teal\\\\/30{&:hover{@media(hover:hover){border-color:var(--pb-color-peerbots-teal);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--pb-color-peerbots-teal) 30%,transparent)}}}}.pb\\\\:hover\\\\:border-primary{&:hover{@media(hover:hover){border-color:var(--pb-color-primary)}}}.pb\\\\:hover\\\\:border-primary\\\\/80{&:hover{@media(hover:hover){border-color:var(--pb-color-primary);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--pb-color-primary) 80%,transparent)}}}}.pb\\\\:hover\\\\:bg-amber-50{&:hover{@media(hover:hover){background-color:var(--pb-color-amber-50)}}}.pb\\\\:hover\\\\:bg-amber-100{&:hover{@media(hover:hover){background-color:var(--pb-color-amber-100)}}}.pb\\\\:hover\\\\:bg-amber-600{&:hover{@media(hover:hover){background-color:var(--pb-color-amber-600)}}}.pb\\\\:hover\\\\:bg-black\\\\/5{&:hover{@media(hover:hover){background-color:var(--pb-color-black);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-black) 5%,transparent)}}}}.pb\\\\:hover\\\\:bg-dark-primary{&:hover{@media(hover:hover){background-color:var(--pb-color-dark-primary)}}}.pb\\\\:hover\\\\:bg-emerald-50{&:hover{@media(hover:hover){background-color:var(--pb-color-emerald-50)}}}.pb\\\\:hover\\\\:bg-emerald-100{&:hover{@media(hover:hover){background-color:var(--pb-color-emerald-100)}}}.pb\\\\:hover\\\\:bg-emerald-800{&:hover{@media(hover:hover){background-color:var(--pb-color-emerald-800)}}}.pb\\\\:hover\\\\:bg-gray-50{&:hover{@media(hover:hover){background-color:var(--pb-color-gray-50)}}}.pb\\\\:hover\\\\:bg-gray-100{&:hover{@media(hover:hover){background-color:var(--pb-color-gray-100)}}}.pb\\\\:hover\\\\:bg-gray-100\\\\/50{&:hover{@media(hover:hover){background-color:var(--pb-color-gray-100);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-gray-100) 50%,transparent)}}}}.pb\\\\:hover\\\\:bg-gray-200{&:hover{@media(hover:hover){background-color:var(--pb-color-gray-200)}}}.pb\\\\:hover\\\\:bg-gray-700{&:hover{@media(hover:hover){background-color:var(--pb-color-gray-700)}}}.pb\\\\:hover\\\\:bg-peerbots-darkblue\\\\/10{&:hover{@media(hover:hover){background-color:var(--pb-color-peerbots-darkblue);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-darkblue) 10%,transparent)}}}}.pb\\\\:hover\\\\:bg-peerbots-darkblue\\\\/25{&:hover{@media(hover:hover){background-color:var(--pb-color-peerbots-darkblue);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-darkblue) 25%,transparent)}}}}.pb\\\\:hover\\\\:bg-peerbots-darkteal{&:hover{@media(hover:hover){background-color:var(--pb-color-peerbots-darkteal)}}}.pb\\\\:hover\\\\:bg-peerbots-pink\\\\/10{&:hover{@media(hover:hover){background-color:var(--pb-color-peerbots-pink);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-pink) 10%,transparent)}}}}.pb\\\\:hover\\\\:bg-peerbots-pink\\\\/30{&:hover{@media(hover:hover){background-color:var(--pb-color-peerbots-pink);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-pink) 30%,transparent)}}}}.pb\\\\:hover\\\\:bg-peerbots-teal\\\\/10{&:hover{@media(hover:hover){background-color:var(--pb-color-peerbots-teal);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-teal) 10%,transparent)}}}}.pb\\\\:hover\\\\:bg-peerbots-teal\\\\/15{&:hover{@media(hover:hover){background-color:var(--pb-color-peerbots-teal);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-teal) 15%,transparent)}}}}.pb\\\\:hover\\\\:bg-peerbots-teal\\\\/30{&:hover{@media(hover:hover){background-color:var(--pb-color-peerbots-teal);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-teal) 30%,transparent)}}}}.pb\\\\:hover\\\\:bg-primary\\\\/5{&:hover{@media(hover:hover){background-color:var(--pb-color-primary);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-primary) 5%,transparent)}}}}.pb\\\\:hover\\\\:bg-primary\\\\/10{&:hover{@media(hover:hover){background-color:var(--pb-color-primary);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-primary) 10%,transparent)}}}}.pb\\\\:hover\\\\:bg-primary\\\\/30{&:hover{@media(hover:hover){background-color:var(--pb-color-primary);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-primary) 30%,transparent)}}}}.pb\\\\:hover\\\\:bg-red-50{&:hover{@media(hover:hover){background-color:var(--pb-color-red-50)}}}.pb\\\\:hover\\\\:bg-red-100{&:hover{@media(hover:hover){background-color:var(--pb-color-red-100)}}}.pb\\\\:hover\\\\:bg-red-700{&:hover{@media(hover:hover){background-color:var(--pb-color-red-700)}}}.pb\\\\:hover\\\\:bg-rose-700{&:hover{@media(hover:hover){background-color:var(--pb-color-rose-700)}}}.pb\\\\:hover\\\\:bg-white{&:hover{@media(hover:hover){background-color:var(--pb-color-white)}}}.pb\\\\:hover\\\\:bg-white\\\\/10{&:hover{@media(hover:hover){background-color:var(--pb-color-white);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-white) 10%,transparent)}}}}.pb\\\\:hover\\\\:text-gray-600{&:hover{@media(hover:hover){color:var(--pb-color-gray-600)}}}.pb\\\\:hover\\\\:text-gray-700{&:hover{@media(hover:hover){color:var(--pb-color-gray-700)}}}.pb\\\\:hover\\\\:text-gray-900{&:hover{@media(hover:hover){color:var(--pb-color-gray-900)}}}.pb\\\\:hover\\\\:text-gray-950{&:hover{@media(hover:hover){color:var(--pb-color-gray-950)}}}.pb\\\\:hover\\\\:text-peerbots-darkteal{&:hover{@media(hover:hover){color:var(--pb-color-peerbots-darkteal)}}}.pb\\\\:hover\\\\:text-peerbots-teal{&:hover{@media(hover:hover){color:var(--pb-color-peerbots-teal)}}}.pb\\\\:hover\\\\:text-red-900{&:hover{@media(hover:hover){color:var(--pb-color-red-900)}}}.pb\\\\:hover\\\\:text-rose-950{&:hover{@media(hover:hover){color:var(--pb-color-rose-950)}}}.pb\\\\:hover\\\\:text-teal-900{&:hover{@media(hover:hover){color:var(--pb-color-teal-900)}}}.pb\\\\:hover\\\\:text-teal-950{&:hover{@media(hover:hover){color:var(--pb-color-teal-950)}}}.pb\\\\:hover\\\\:text-white{&:hover{@media(hover:hover){color:var(--pb-color-white)}}}.pb\\\\:hover\\\\:underline{&:hover{@media(hover:hover){text-decoration-line:underline}}}.pb\\\\:hover\\\\:opacity-10{&:hover{@media(hover:hover){opacity:10%}}}.pb\\\\:hover\\\\:opacity-90{&:hover{@media(hover:hover){opacity:90%}}}.pb\\\\:hover\\\\:opacity-100{&:hover{@media(hover:hover){opacity:100%}}}.pb\\\\:hover\\\\:shadow-lg{&:hover{@media(hover:hover){--tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}}.pb\\\\:focus\\\\:ring-0{&:focus{--tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(0px + 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)}}.pb\\\\:focus\\\\:ring-2{&:focus{--tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.pb\\\\:focus\\\\:ring-primary{&:focus{--tw-ring-color: var(--pb-color-primary)}}.pb\\\\:focus\\\\:ring-offset-2{&:focus{--tw-ring-offset-width: 2px;--tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}}.pb\\\\:focus\\\\:outline-none{&:focus{--tw-outline-style: none;outline-style:none}}.pb\\\\:focus\\\\:ring-inset{&:focus{--tw-ring-inset: inset}}.pb\\\\:focus-visible\\\\:ring-2{&:focus-visible{--tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.pb\\\\:focus-visible\\\\:ring-gray-400{&:focus-visible{--tw-ring-color: var(--pb-color-gray-400)}}.pb\\\\:focus-visible\\\\:ring-peerbots-teal{&:focus-visible{--tw-ring-color: var(--pb-color-peerbots-teal)}}.pb\\\\:focus-visible\\\\:ring-primary{&:focus-visible{--tw-ring-color: var(--pb-color-primary)}}.pb\\\\:focus-visible\\\\:ring-offset-1{&:focus-visible{--tw-ring-offset-width: 1px;--tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}}.pb\\\\:focus-visible\\\\:ring-offset-2{&:focus-visible{--tw-ring-offset-width: 2px;--tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}}.pb\\\\:focus-visible\\\\:outline-none{&:focus-visible{--tw-outline-style: none;outline-style:none}}.pb\\\\:disabled\\\\:cursor-not-allowed{&:disabled{cursor:not-allowed}}.pb\\\\:disabled\\\\:opacity-50{&:disabled{opacity:50%}}.pb\\\\:disabled\\\\:hover\\\\:bg-transparent{&:disabled{&:hover{@media(hover:hover){background-color:transparent}}}}.pb\\\\:disabled\\\\:hover\\\\:text-gray-600{&:disabled{&:hover{@media(hover:hover){color:var(--pb-color-gray-600)}}}}.pb\\\\:data-\\\\[checked\\\\]\\\\:translate-x-5{&[data-checked]{--tw-translate-x: calc(var(--pb-spacing) * 5);translate:var(--tw-translate-x) var(--tw-translate-y)}}.pb\\\\:data-\\\\[checked\\\\]\\\\:bg-primary{&[data-checked]{background-color:var(--pb-color-primary)}}.pb\\\\:data-\\\\[highlighted\\\\]\\\\:bg-gray-100{&[data-highlighted]{background-color:var(--pb-color-gray-100)}}.pb\\\\:data-\\\\[highlighted\\\\]\\\\:text-gray-900{&[data-highlighted]{color:var(--pb-color-gray-900)}}.pb\\\\:data-\\\\[pressed\\\\]\\\\:bg-danger\\\\/20{&[data-pressed]{background-color:var(--pb-color-danger);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-danger) 20%,transparent)}}}.pb\\\\:data-\\\\[pressed\\\\]\\\\:bg-primary\\\\/20{&[data-pressed]{background-color:var(--pb-color-primary);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-primary) 20%,transparent)}}}.pb\\\\:data-\\\\[pressed\\\\]\\\\:bg-white{&[data-pressed]{background-color:var(--pb-color-white)}}.pb\\\\:data-\\\\[pressed\\\\]\\\\:text-gray-900{&[data-pressed]{color:var(--pb-color-gray-900)}}.pb\\\\:data-\\\\[pressed\\\\]\\\\:shadow-sm{&[data-pressed]{--tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.pb\\\\:data-\\\\[pressed\\\\]\\\\:ring-1{&[data-pressed]{--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)}}.pb\\\\:data-\\\\[pressed\\\\]\\\\:ring-danger{&[data-pressed]{--tw-ring-color: var(--pb-color-danger)}}.pb\\\\:data-\\\\[pressed\\\\]\\\\:ring-gray-200{&[data-pressed]{--tw-ring-color: var(--pb-color-gray-200)}}.pb\\\\:data-\\\\[pressed\\\\]\\\\:ring-primary{&[data-pressed]{--tw-ring-color: var(--pb-color-primary)}}.pb\\\\:data-\\\\[state\\\\=checked\\\\]\\\\:border-primary{&[data-state=checked]{border-color:var(--pb-color-primary)}}.pb\\\\:data-\\\\[state\\\\=checked\\\\]\\\\:bg-primary{&[data-state=checked]{background-color:var(--pb-color-primary)}}.pb\\\\:data-\\\\[state\\\\=checked\\\\]\\\\:text-white{&[data-state=checked]{color:var(--pb-color-white)}}.pb\\\\:data-\\\\[unchecked\\\\]\\\\:translate-x-0{&[data-unchecked]{--tw-translate-x: calc(var(--pb-spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}}.pb\\\\:data-\\\\[unchecked\\\\]\\\\:bg-gray-200{&[data-unchecked]{background-color:var(--pb-color-gray-200)}}.pb\\\\:sm\\\\:m-4{@media(width>=40rem){margin:calc(var(--pb-spacing) * 4)}}.pb\\\\:sm\\\\:grid-cols-3{@media(width>=40rem){grid-template-columns:repeat(3,minmax(0,1fr))}}.pb\\\\:sm\\\\:text-sm{@media(width>=40rem){font-size:var(--pb-text-sm);line-height:var(--tw-leading, var(--pb-text-sm--line-height))}}.pb\\\\:sm\\\\:leading-6{@media(width>=40rem){--tw-leading: calc(var(--pb-spacing) * 6);line-height:calc(var(--pb-spacing) * 6)}}.pb\\\\:md\\\\:m-10{@media(width>=48rem){margin:calc(var(--pb-spacing) * 10)}}.pb\\\\:md\\\\:grid-cols-4{@media(width>=48rem){grid-template-columns:repeat(4,minmax(0,1fr))}}}.range-vertical{writing-mode:vertical-lr}.pb-tooltip,.pb-tooltip-slow{visibility:hidden;position:absolute;opacity:0%}.pb-has-tooltip:hover+.pb-tooltip{visibility:visible;z-index:50;opacity:100%;transition-property:opacity;transition-timing-function:var(--tw-ease, var(--pb-default-transition-timing-function));transition-duration:var(--tw-duration, var(--pb-default-transition-duration));transition-delay:.3s;--tw-ease: var(--pb-ease-in-out);transition-timing-function:var(--pb-ease-in-out)}.pb-has-tooltip:hover+.pb-tooltip-slow{visibility:visible;z-index:50;opacity:100%;transition-property:opacity;transition-timing-function:var(--tw-ease, var(--pb-default-transition-timing-function));transition-duration:var(--tw-duration, var(--pb-default-transition-duration));transition-delay:1s;--tw-ease: var(--pb-ease-in-out);transition-timing-function:var(--pb-ease-in-out)}@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-scale-x{syntax: \\\"*\\\"; inherits: false; initial-value: 1;}@property --tw-scale-y{syntax: \\\"*\\\"; inherits: false; initial-value: 1;}@property --tw-scale-z{syntax: \\\"*\\\"; inherits: false; initial-value: 1;}@property --tw-rotate-x{syntax: \\\"*\\\"; inherits: false;}@property --tw-rotate-y{syntax: \\\"*\\\"; inherits: false;}@property --tw-rotate-z{syntax: \\\"*\\\"; inherits: false;}@property --tw-skew-x{syntax: \\\"*\\\"; inherits: false;}@property --tw-skew-y{syntax: \\\"*\\\"; inherits: false;}@property --tw-space-y-reverse{syntax: \\\"*\\\"; inherits: false; initial-value: 0;}@property --tw-space-x-reverse{syntax: \\\"*\\\"; inherits: false; initial-value: 0;}@property --tw-border-style{syntax: \\\"*\\\"; inherits: false; initial-value: solid;}@property --tw-gradient-position{syntax: \\\"*\\\"; inherits: false;}@property --tw-gradient-from{syntax: \\\"<color>\\\"; inherits: false; initial-value: #0000;}@property --tw-gradient-via{syntax: \\\"<color>\\\"; inherits: false; initial-value: #0000;}@property --tw-gradient-to{syntax: \\\"<color>\\\"; inherits: false; initial-value: #0000;}@property --tw-gradient-stops{syntax: \\\"*\\\"; inherits: false;}@property --tw-gradient-via-stops{syntax: \\\"*\\\"; inherits: false;}@property --tw-gradient-from-position{syntax: \\\"<length-percentage>\\\"; inherits: false; initial-value: 0%;}@property --tw-gradient-via-position{syntax: \\\"<length-percentage>\\\"; inherits: false; initial-value: 50%;}@property --tw-gradient-to-position{syntax: \\\"<length-percentage>\\\"; inherits: false; initial-value: 100%;}@property --tw-leading{syntax: \\\"*\\\"; inherits: false;}@property --tw-font-weight{syntax: \\\"*\\\"; inherits: false;}@property --tw-tracking{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: 0px;}@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;}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}@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-scale-x: 1;--tw-scale-y: 1;--tw-scale-z: 1;--tw-rotate-x: initial;--tw-rotate-y: initial;--tw-rotate-z: initial;--tw-skew-x: initial;--tw-skew-y: initial;--tw-space-y-reverse: 0;--tw-space-x-reverse: 0;--tw-border-style: solid;--tw-gradient-position: initial;--tw-gradient-from: #0000;--tw-gradient-via: #0000;--tw-gradient-to: #0000;--tw-gradient-stops: initial;--tw-gradient-via-stops: initial;--tw-gradient-from-position: 0%;--tw-gradient-via-position: 50%;--tw-gradient-to-position: 100%;--tw-leading: initial;--tw-font-weight: initial;--tw-tracking: 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}}}\\n\")","import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import React from \"react\";\nimport { cn } from \"../utils\";\nimport { BrandColor, ComponentColor, ComponentSize } from \"../types\";\n\nconst headingSizes: Record<number, string> = {\n 1: \"pb:text-4xl sm:pb:text-5xl pb:font-bold pb:leading-tight\",\n 2: \"pb:text-3xl sm:pb:text-4xl pb:font-bold pb:leading-snug\",\n 3: \"pb:text-2xl sm:pb:text-3xl pb:font-bold pb:leading-snug\",\n 4: \"pb:text-xl sm:pb:text-2xl pb:font-bold pb:leading-snug\",\n 5: \"pb:text-lg sm:pb:text-xl pb:font-bold\",\n 6: \"pb:text-base sm:pb:text-lg pb:font-bold\",\n};\n\nconst headingColorClasses: Record<string, string> = {\n default: \"\",\n teal: \"pb:text-peerbots-darkteal\",\n pink: \"pb:text-rose-800\",\n primary: \"pb:text-dark-primary\",\n darkteal: \"pb:text-peerbots-darkteal\",\n darkblue: \"pb:text-peerbots-darkblue\",\n olive: \"pb:text-[#636814]\",\n dark: \"pb:text-peerbots-dark\",\n white: \"pb:text-white\",\n gradient:\n \"pb:bg-clip-text pb:text-transparent pb:bg-gradient-to-r pb:from-peerbots-teal pb:via-peerbots-pink pb:to-peerbots-darkblue\",\n};\n\nconst textColorClasses: Record<string, string> = {\n default: \"pb:text-slate-950\",\n neutral: \"pb:text-gray-800\",\n muted: \"pb:text-gray-600\",\n error: \"pb:text-red-700 pb:font-medium\",\n success: \"pb:text-emerald-800 pb:font-medium\",\n teal: \"pb:text-peerbots-darkteal\",\n pink: \"pb:text-rose-800\",\n primary: \"pb:text-dark-primary\",\n darkteal: \"pb:text-peerbots-darkteal\",\n darkblue: \"pb:text-peerbots-darkblue\",\n olive: \"pb:text-[#636814]\",\n dark: \"pb:text-peerbots-dark\",\n white: \"pb:text-white\",\n};\n\nconst textSizeClasses: Record<string, string> = {\n xs: \"pb:text-xs pb:leading-normal\",\n sm: \"pb:text-sm pb:leading-relaxed\",\n md: \"pb:text-base pb:leading-relaxed\",\n lg: \"pb:text-lg pb:leading-relaxed\",\n xl: \"pb:text-xl pb:leading-relaxed\",\n lead: \"pb:text-lg sm:pb:text-xl pb:leading-relaxed pb:text-slate-700\",\n};\n\nconst weightClasses = {\n normal: \"pb:font-normal\",\n medium: \"pb:font-medium\",\n semibold: \"pb:font-semibold\",\n bold: \"pb:font-bold\",\n};\n\nexport interface HeadingProps extends React.HTMLAttributes<HTMLHeadingElement> {\n /** Semantic HTML heading level (h1 - h6) */\n level?: 1 | 2 | 3 | 4 | 5 | 6;\n /** Visual heading scale override (defaults to level) */\n size?: 1 | 2 | 3 | 4 | 5 | 6;\n /** Palette color or gradient text fill */\n color?: BrandColor | \"gradient\" | \"default\";\n /** Legacy variant prop (alias for color) */\n variant?: BrandColor | \"gradient\" | \"default\";\n /** Font weight */\n weight?: \"normal\" | \"medium\" | \"semibold\" | \"bold\";\n children?: React.ReactNode;\n}\n\nexport const Heading = ({\n level = 1,\n size,\n color,\n variant,\n weight,\n className,\n children,\n ...props\n}: HeadingProps) => {\n const visualScale = size !== undefined ? size : level;\n const resolvedColor = color || variant || \"default\";\n\n return React.createElement(\n `h${level}`,\n {\n className: cn(\n headingSizes[visualScale],\n headingColorClasses[resolvedColor] || \"\",\n weight && weightClasses[weight],\n className,\n ),\n ...props,\n },\n children,\n );\n};\n\nexport interface TextProps extends React.HTMLAttributes<HTMLElement> {\n /** HTML rendering tag */\n as?: React.ElementType;\n /** Typography scale */\n size?: ComponentSize | \"lead\";\n /** Text color / intent */\n color?: ComponentColor | \"muted\" | \"error\" | \"success\" | \"default\";\n /** Legacy variant prop for convenience / backward compatibility */\n variant?: \"default\" | \"muted\" | \"small\" | \"large\" | \"lead\" | \"error\" | \"success\";\n /** Font weight */\n weight?: \"normal\" | \"medium\" | \"semibold\" | \"bold\";\n /** Text alignment */\n align?: \"left\" | \"center\" | \"right\";\n children?: React.ReactNode;\n}\n\nexport const Text = ({\n as: Component = \"p\",\n size,\n color,\n variant,\n weight,\n align,\n className,\n children,\n ...props\n}: TextProps) => {\n const resolvedSize =\n size ||\n (variant === \"small\"\n ? \"sm\"\n : variant === \"large\"\n ? \"lg\"\n : variant === \"lead\"\n ? \"lead\"\n : \"md\");\n\n const resolvedColor =\n color ||\n (variant === \"muted\"\n ? \"muted\"\n : variant === \"error\"\n ? \"error\"\n : variant === \"success\"\n ? \"success\"\n : \"default\");\n\n return React.createElement(\n Component,\n {\n className: cn(\n textSizeClasses[resolvedSize] || textSizeClasses.md,\n textColorClasses[resolvedColor] || textColorClasses.default,\n weight && weightClasses[weight],\n align && `pb:text-${align}`,\n className,\n ),\n ...props,\n },\n children,\n );\n};\n","import React from \"react\";\nimport { cn } from \"../utils\";\nimport { IconName, icons } from \"./IconRegistry\";\n\nexport type { IconName };\n\nexport interface IconProps extends React.SVGProps<SVGSVGElement> {\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n name?: IconName;\n}\n\nexport const Icon = React.forwardRef<SVGSVGElement, IconProps>(\n ({ className, size = \"md\", name, children, ...props }, ref) => {\n const sizes = {\n sm: \"pb:w-3 pb:h-3\",\n md: \"pb:w-4 pb:h-4\",\n lg: \"pb:w-6 pb:h-6\",\n xl: \"pb:w-8 pb:h-8\",\n };\n\n const iconContent = name ? icons[name] : children;\n\n return (\n <svg\n ref={ref}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={cn(sizes[size], \"pb:inline-block\", className)}\n {...props}\n >\n {iconContent}\n </svg>\n );\n },\n);\n\nIcon.displayName = \"Icon\";\n","import React from \"react\";\n\n/**\n * Raw path data for icons, useful for non-React contexts (like PixiJS Graphics.svg)\n */\nexport const iconPaths = {\n check: \"M20 6 9 17l-5-5\",\n x: \"M18 6 6 18M6 6l12 12\",\n edit: \"M16.862 4.487l1.687-1.688a1.875 1.875 0 112.652 2.652L6.832 19.82a4.5 4.5 0 01-1.897 1.13l-2.685.8.8-2.685a4.5 4.5 0 011.13-1.897L16.863 4.487zm0 0L19.5 7.125\",\n close: \"M6 18L18 6M6 6l12 12\",\n plus: \"M12 4.5v15m7.5-7.5h-15\",\n arrowDown: \"M19.5 13.5L12 21m0 0l-7.5-7.5M12 21V3\", // Points DOWN\n arrowUp: \"M4.5 10.5L12 3m0 0l7.5 7.5M12 3v18\", // Points UP\n clipboard:\n \"M15.75 17.25v3.375c0 .621-.504 1.125-1.125 1.125h-9.75a1.125 1.125 0 0 1-1.125-1.125V7.875c0-.621.504-1.125 1.125-1.125H6.75a9.06 9.06 0 0 1 1.5.124m7.5 10.376h3.375c.621 0 1.125-.504 1.125-1.125V11.25c0-4.46-3.243-8.161-7.5-8.876a9.06 9.06 0 0 0-1.5-.124H9.375c-.621 0-1.125.504-1.125 1.125v3.5m7.5 10.375H9.375a1.125 1.125 0 0 1-1.125-1.125v-9.25m12 6.625v-1.875a3.375 3.375 0 0 0-3.375-3.375h-1.5a1.125 1.125 0 0 1-1.125-1.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H9.75\",\n cloudArrowUp:\n \"M12 16.5V9.75m0 0 3 3m-3-3-3 3M6.75 19.5a4.5 4.5 0 0 1-1.41-8.775 5.25 5.25 0 0 1 10.233-2.33 3 3 0 0 1 3.758 3.848A3.752 3.752 0 0 1 18 19.5H6.75Z\",\n arrowDownToLine: \"M9 12l3 3m0 0 3-3m-3 3V2.25\",\n folder:\n \"M9 8.25H7.5a2.25 2.25 0 0 0-2.25 2.25v9a2.25 2.25 0 0 0 2.25 2.25h9a2.25 2.25 0 0 0 2.25-2.25v-9a2.25 2.25 0 0 0-2.25-2.25H15m0-3-3-3m0 0-3 3m3-3V15\",\n arrowUpFromLine:\n \"M9 8.25H7.5a2.25 2.25 0 0 0-2.25 2.25v9a2.25 2.25 0 0 0 2.25 2.25h9a2.25 2.25 0 0 0 2.25-2.25v-9a2.25 2.25 0 0 0-2.25-2.25H15m0-3-3-3m0 0-3 3m3-3V15\",\n squares:\n \"M2.25 7.125C2.25 6.504 2.754 6 3.375 6h6c.621 0 1.125.504 1.125 1.125v3.75c0 .621-.504 1.125-1.125 1.125h-6a1.125 1.125 0 0 1-1.125-1.125v-3.75ZM14.25 8.625c0-.621.504-1.125 1.125-1.125h5.25c.621 0 1.125.504 1.125 1.125v8.25c0 .621-.504 1.125-1.125 1.125h-5.25a1.125 1.125 0 0 1-1.125-1.125v-8.25ZM3.75 16.125c0-.621.504-1.125 1.125-1.125h5.25c.621 0 1.125.504 1.125 1.125v2.25c0 .621-.504 1.125-1.125 1.125h-5.25a1.125 1.125 0 0 1-1.125-1.125v-2.25Z\",\n tableCells:\n \"M3.375 19.5h17.25m-17.25 0a1.125 1.125 0 0 1-1.125-1.125M3.375 19.5h7.5c.621 0 1.125-.504 1.125-1.125m-9.75 0V5.625m0 12.75v-1.5c0-.621.504-1.125 1.125-1.125m18.375 2.625V5.625m0 12.75c0 .621-.504 1.125-1.125 1.125m1.125-1.125v-1.5c0-.621-.504-1.125-1.125-1.125m0 3.75h-7.5A1.125 1.125 0 0 1 12 18.375m9.75-12.75c0-.621-.504-1.125-1.125-1.125H3.375c-.621 0-1.125.504-1.125 1.125m19.5 0v1.5c0 .621-.504 1.125-1.125 1.125M2.25 5.625v1.5c0 .621.504 1.125 1.125 1.125m0 0h17.25m-17.25 0h7.5c.621 0 1.125.504 1.125 1.125M3.375 8.25c-.621 0-1.125.504-1.125 1.125v1.5c0 .621.504 1.125 1.125 1.125m17.25-3.75h-7.5c-.621 0-1.125.504-1.125 1.125m8.625-1.125c.621 0 1.125.504 1.125 1.125v1.5c0 .621-.504 1.125-1.125 1.125m-17.25 0h7.5m-7.5 0c-.621 0-1.125.504-1.125 1.125v1.5c0 .621.504 1.125 1.125 1.125M12 10.875v-1.5m0 1.5c0 .621-.504 1.125-1.125 1.125M12 10.875c0 .621.504 1.125 1.125 1.125m-2.25 0c.621 0 1.125.504 1.125 1.125M13.125 12h7.5m-7.5 0c-.621 0-1.125.504-1.125 1.125M20.625 12c.621 0 1.125.504 1.125 1.125v1.5c0 .621-.504 1.125-1.125 1.125m-17.25 0h7.5M12 14.625v-1.5m0 1.5c0 .621-.504 1.125-1.125 1.125M12 14.625c0 .621.504 1.125 1.125 1.125m-2.25 0c.621 0 1.125.504 1.125 1.125m0 1.5v-1.5m0 0c0-.621.504-1.125 1.125-1.125m0 0h7.5\",\n arrowsRightLeft:\n \"M7.5 21 3 16.5m0 0L7.5 12M3 16.5h13.5m0-13.5L21 7.5m0 0L16.5 12M21 7.5H7.5\",\n document:\n \"M9 12h3.75M9 15h3.75M9 18h3.75m3 .75H18a2.25 2.25 0 002.25-2.25V6.108c0-1.135-.845-2.098-1.976-2.192a48.424 48.424 0 00-1.123-.08m-5.801 0c-.065.21-.1.433-.1.664 0 .414.336.75.75.75h4.5a.75.75 0 00.75-.75 2.25 2.25 0 00-.1-.664m-5.8 0A2.251 2.251 0 0113.5 2.25H15c1.012 0 1.867.668 2.15 1.586m-5.8 0c-.376.023-.75.05-1.124.08C9.095 4.01 8.25 4.973 8.25 6.108V8.25m0 0H4.875c-.621 0-1.125.504-1.125 1.125v11.25c0 .621.504 1.125 1.125 1.125h9.75c.621 0 1.125-.504 1.125-1.125V9.375c0-.621-.504-1.125-1.125-1.125H8.25zM6.75 12h.008v.008H6.75V12zm0 3h.008v.008H6.75V15zm0 3h.008v.008H6.75V18z\",\n externalLink:\n \"M13.5 6H5.25A2.25 2.25 0 0 0 3 8.25v10.5A2.25 2.25 0 0 0 5.25 21h10.5A2.25 2.25 0 0 0 18 18.75V10.5m-10.5 6L21 3m0 0h-5.25M21 3v5.25\",\n lock: \"M16.5 10.5V6.75a4.5 4.5 0 1 0-9 0v3.75m-.75 11.25h10.5a2.25 2.25 0 0 0 2.25-2.25v-6.75a2.25 2.25 0 0 0-2.25-2.25H6.75a2.25 2.25 0 0 0-2.25 2.25v6.75a2.25 2.25 0 0 0 2.25 2.25Z\",\n shoppingCart:\n \"M2.25 3h1.386c.51 0 .955.343 1.087.835l.383 1.437M7.5 14.25a3 3 0 00-3 3h15.75m-12.75-3h11.218c1.121-2.3 2.1-4.684 2.924-7.138a60.114 60.114 0 00-16.536-1.84M7.5 14.25L5.106 5.272M6 20.25a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm12.75 0a.75.75 0 11-1.5 0 .75.75 0 011.5 0z\",\n minus: \"M5 12h14\",\n pencilSquare:\n \"M21.731 2.269a2.625 2.625 0 0 0-3.712 0l-1.157 1.157 3.712 3.712 1.157-1.157a2.625 2.625 0 0 0 0-3.712ZM19.513 8.199l-3.712-3.712-8.4 8.4a5.25 5.25 0 0 0-1.32 2.214l-.8 2.685a.75.75 0 0 0 .933.933l2.685-.8a5.25 5.25 0 0 0 2.214-1.32l8.4-8.4Z\",\n pencilSquareContinued:\n \"M5.25 5.25a3 3 0 0 0-3 3v10.5a3 3 0 0 0 3 3h10.5a3 3 0 0 0 3-3V13.5a.75.75 0 0 0-1.5 0v5.25a1.5 1.5 0 0 1-1.5 1.5H5.25a1.5 1.5 0 0 1-1.5-1.5V8.25a1.5 1.5 0 0 1 1.5-1.5h5.25a.75.75 0 0 0 0-1.5H5.25Z\",\n chevronUpSmall: \"M4.5 15.75l7.5-7.5 7.5 7.5\", // Points UP\n chevronDownSmall: \"M19.5 8.25l-7.5 7.5-7.5-7.5\", // Points DOWN\n chevronUpTable: \"M8.25 6.75 12 3m0 0 3.75 3.75M12 3v18\", // Points UP\n chevronDownTable: \"M15.75 17.25 12 21m0 0-3.75-3.75M12 21V3\", // Points DOWN\n speakerWave:\n \"M19.114 5.636a9 9 0 010 12.728M16.463 8.288a5.25 5.25 0 010 7.424M6.75 8.25l4.72-4.72a.75.75 0 011.28.53v15.88a.75.75 0 01-1.28.53l-4.72-4.72H4.51c-.88 0-1.704-.507-1.938-1.354A9.01 9.01 0 012.25 12c0-.83.112-1.633.322-2.396C2.806 8.756 3.63 8.25 4.51 8.25H6.75z\",\n zap: \"m3.75 13.5 10.5-11.25L12 10.5h8.25L9.75 21.75 12 13.5H3.75Z\",\n code: \"M17.25 6.75L22.5 12l-5.25 5.25m-10.5 0L1.5 12l5.25-5.25m7.5-3l-4.5 16.5\",\n questionMarkCircle:\n \"M9.879 7.519c1.171-1.025 3.071-1.025 4.242 0 1.172 1.025 1.172 2.687 0 3.712-.203.179-.43.326-.67.442-.745.361-1.45.999-1.45 1.827v.75M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-9 5.25h.008v.008H12v-.008z\",\n search:\n \"m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607Z\",\n exclamationCircle:\n \"M12 9v3.75m9-.75a9 9 0 1 1-18 0 9 9 0 0 1 18 0Zm-9 3.75h.008v.008H12v-.008Z\",\n exclamationTriangle:\n \"M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126ZM12 15.75h.007v.008H12v-.008Z\",\n checkCircle:\n \"M9 12.75 11.25 15 15 9.75M21 12c0 1.268-.63 2.39-1.593 3.068a3.745 3.745 0 0 1-1.043 3.296 3.745 3.745 0 0 1-3.296 1.043A3.745 3.745 0 0 1 12 21c-1.268 0-2.39-.63-3.068-1.593a3.746 3.746 0 0 1-3.296-1.043 3.745 3.745 0 0 1-1.043-3.296A3.745 3.745 0 0 1 3 12c0-1.268.63-2.39 1.593-3.068a3.745 3.745 0 0 1 1.043-3.296 3.746 3.746 0 0 1 3.296-1.043A3.746 3.746 0 0 1 12 3c1.268 0 2.39.63 3.068 1.593a3.746 3.746 0 0 1 3.296 1.043 3.746 3.746 0 0 1 1.043 3.296A3.745 3.745 0 0 1 21 12Z\",\n megaphone:\n \"M10.34 15.84c-.688-.06-1.386-.09-2.09-.09H7.5a4.5 4.5 0 1 1 0-9h.75c.704 0 1.402-.03 2.09-.09m0 9.18c.253.962.584 1.892.985 2.783.247.55.06 1.21-.463 1.511l-.657.38c-.551.318-1.26.117-1.527-.461a20.845 20.845 0 0 1-1.44-4.282m3.102.069a18.03 18.03 0 0 1-.59-4.59c0-1.586.205-3.124.59-4.59m0 9.18a23.848 23.848 0 0 1 8.835 2.535M10.34 6.66a23.847 23.847 0 0 0 8.835-2.535m0 0A23.74 23.74 0 0 0 18.795 3m.38 1.125a23.91 23.91 0 0 1 1.014 5.395m-1.014 8.855c-.118.38-.245.754-.38 1.125m.38-1.125a23.91 23.91 0 0 0 1.014-5.395m0-3.46c.495.413.811 1.035.811 1.73 0 .695-.316 1.317-.811 1.73m0-3.46a24.347 24.347 0 0 1 0 3.46\",\n xCircle:\n \"m9.75 9.75 4.5 4.5m0-4.5-4.5 4.5M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z\",\n arrowsPointingIn:\n \"M9 9V4.5M9 9H4.5M9 9 3.75 3.75M9 15v4.5M9 15H4.5M9 15l-5.25 5.25M15 9h4.5M15 9V4.5M15 9l5.25-5.25M15 15h4.5M15 15v4.5m0-4.5 5.25 5.25\",\n arrowsPointingOut:\n \"M3.75 3.75v4.5m0-4.5h4.5m-4.5 0L9 9M3.75 20.25v-4.5m0 4.5h4.5m-4.5 0L9 15M20.25 3.75h-4.5m4.5 0v4.5m0-4.5L15 9m5.25 11.25h-4.5m4.5 0v-4.5m0 4.5L15 15\",\n arrowPath:\n \"M19.5 12c0-1.232-.046-2.453-.138-3.662a4.006 4.006 0 0 0-3.7-3.7 48.678 48.678 0 0 0-7.324 0 4.006 4.006 0 0 0-3.7 3.7c-.017.22-.032.441-.046.662M19.5 12l3-3m-3 3-3-3m-12 3c0 1.232.046 2.453.138 3.662a4.006 4.006 0 0 0 3.7 3.7 48.656 48.656 0 0 0 7.324 0 4.006 4.006 0 0 0 3.7-3.7c.017-.22.032-.441.046-.662M4.5 12l3 3m-3-3-3 3\",\n arrowUturnLeft: \"M9 15 3 9m0 0 6-6M3 9h12a6 6 0 0 1 0 12h-3\",\n magnifyingGlassPlus:\n \"m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607ZM10.5 7.5v6m3-3h-6\",\n arrowsUpDown:\n \"M3 7.5 7.5 3m0 0L12 7.5M7.5 3v13.5m13.5 0L16.5 21m0 0L12 16.5m4.5 4.5V7.5\",\n envelope:\n \"M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\",\n lockClosed:\n \"M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z\",\n userCircle:\n \"M17.982 18.725A7.488 7.488 0 0012 15.75a7.488 7.488 0 00-5.982 2.975m11.963 0a9 9 0 10-11.963 0m11.963 0A8.966 8.966 0 0112 21a8.966 8.966 0 01-5.982-2.275M15 9.75a3 3 0 11-6 0 3 3 0 016 0z\",\n arrowRightOnRectangle:\n \"M15.75 9V5.25A2.25 2.25 0 0 0 13.5 3h-6a2.25 2.25 0 0 0-2.25 2.25v13.5A2.25 2.25 0 0 0 7.5 21h6a2.25 2.25 0 0 0 2.25-2.25V15m3 0 3-3m0 0-3-3m3 3H9\",\n chevronRight: \"m8.25 4.5 7.5 7.5-7.5 7.5\",\n arrowDownTray:\n \"M3 16.5v2.25A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75V16.5M16.5 12 12 16.5m0 0L7.5 12m4.5 4.5V3\",\n arrowUpTray:\n \"M3 7.5V5.25A2.25 2.25 0 0 1 5.25 3h13.5A2.25 2.25 0 0 1 21 5.25V7.5m-4.5 4.5L12 7.5m0 0L7.5 12m4.5-4.5v13.5\",\n import:\n \"M9 8.25H7.5a2.25 2.25 0 0 0-2.25 2.25v9a2.25 2.25 0 0 0 2.25 2.25h9a2.25 2.25 0 0 0 2.25-2.25v-9a2.25 2.25 0 0 0-2.25-2.25H15M9 12l3 3m0 0 3-3m-3 3V2.25\",\n export:\n \"M9 8.25H7.5a2.25 2.25 0 0 0-2.25 2.25v9a2.25 2.25 0 0 0 2.25 2.25h9a2.25 2.25 0 0 0 2.25-2.25v-9a2.25 2.25 0 0 0-2.25-2.25H15m0-3-3-3m0 0-3 3m3-3V15\",\n home: \"m2.25 12 8.954-8.955c.44-.439 1.152-.439 1.591 0L21.75 12M4.5 9.75v10.125c0 .621.504 1.125 1.125 1.125H9.75v-4.875c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125V21h4.125c.621 0 1.125-.504 1.125-1.125V9.75M8.25 21h8.25\",\n play: \"M5 3l14 9-14 9V3z\",\n star: \"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z\",\n shield: \"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\",\n chat: \"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\",\n};\n\n/**\n * Icons that are complex React nodes\n */\nexport const complexIcons = {\n eye: (\n <>\n <path d=\"M2.036 12.322a1.012 1.012 0 0 1 0-.639C3.423 7.51 7.36 4.5 12 4.5c4.638 0 8.573 3.007 9.963 7.178.07.207.07.431 0 .639C20.577 16.49 16.64 19.5 12 19.5c-4.638 0-8.573-3.007-9.963-7.178Z\" />\n <path d=\"M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z\" />\n </>\n ),\n google: (\n <g transform=\"matrix(1, 0, 0, 1, 27.009001, -39.238998)\">\n <path\n fill=\"#4285F4\"\n stroke=\"none\"\n d=\"M -3.264 51.509 C -3.264 50.719 -3.334 49.969 -3.454 49.239 L -14.754 49.239 L -14.754 53.749 L -8.284 53.749 C -8.574 55.229 -9.424 56.479 -10.684 57.329 L -10.684 60.329 L -6.824 60.329 C -4.564 58.239 -3.264 55.159 -3.264 51.509 Z\"\n />\n <path\n fill=\"#34A853\"\n stroke=\"none\"\n d=\"M -14.754 63.239 C -11.514 63.239 -8.804 62.159 -6.824 60.329 L -10.684 57.329 C -11.764 58.049 -13.134 58.489 -14.754 58.489 C -17.884 58.489 -20.534 56.379 -21.484 53.529 L -25.464 53.529 L -25.464 56.619 C -23.494 60.539 -19.444 63.239 -14.754 63.239 Z\"\n />\n <path\n fill=\"#FBBC05\"\n stroke=\"none\"\n d=\"M -21.484 53.529 C -21.734 52.809 -21.864 52.039 -21.864 51.239 C -21.864 50.439 -21.724 49.669 -21.484 48.949 L -21.484 45.859 L -25.464 45.859 C -26.284 47.479 -26.754 49.299 -26.754 51.239 C -26.754 53.179 -26.284 54.999 -25.464 56.619 L -21.484 53.529 Z\"\n />\n <path\n fill=\"#EA4335\"\n stroke=\"none\"\n d=\"M -14.754 43.989 C -12.984 43.989 -11.404 44.599 -10.154 45.789 L -6.734 42.369 C -8.804 40.429 -11.514 39.239 -14.754 39.239 C -19.444 39.239 -23.494 41.939 -25.464 45.859 L -21.484 48.949 C -20.534 46.099 -17.884 43.989 -14.754 43.989 Z\"\n />\n </g>\n ),\n face: (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M8 14s1.5 2 4 2 4-2 4-2\" />\n <line x1=\"9\" y1=\"9\" x2=\"9.01\" y2=\"9\" strokeWidth=\"3\" />\n <line x1=\"15\" y1=\"9\" x2=\"15.01\" y2=\"9\" strokeWidth=\"3\" />\n </>\n ),\n mic: (\n <>\n <path d=\"M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z\" />\n <path d=\"M19 10v2a7 7 0 0 1-14 0v-2\" />\n <line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"22\" />\n </>\n ),\n brain: (\n <>\n <path d=\"M9.5 2A2.5 2.5 0 0 1 12 4.5v15a2.5 2.5 0 0 1-4.96.44 2.5 2.5 0 0 1-2.96-3.08 3 3 0 0 1-.34-5.58 2.5 2.5 0 0 1 1.32-4.24 2.5 2.5 0 0 1 4.44-2.04Z\" />\n <path d=\"M14.5 2A2.5 2.5 0 0 0 12 4.5v15a2.5 2.5 0 0 0 4.96.44 2.5 2.5 0 0 0 2.96-3.08 3 3 0 0 0 .34-5.58 2.5 2.5 0 0 0-1.32-4.24 2.5 2.5 0 0 0-4.44-2.04Z\" />\n </>\n ),\n user: (\n <>\n <path d=\"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\" />\n <circle cx=\"12\" cy=\"7\" r=\"4\" />\n </>\n ),\n users: (\n <>\n <path d=\"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2\" />\n <circle cx=\"9\" cy=\"7\" r=\"4\" />\n <path d=\"M22 21v-2a4 4 0 0 0-3-3.87\" />\n <path d=\"M16 3.13a4 4 0 0 1 0 7.75\" />\n </>\n ),\n globe: (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"2\" y1=\"12\" x2=\"22\" y2=\"12\" />\n <path d=\"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z\" />\n </>\n ),\n devices: (\n <>\n <rect width=\"16\" height=\"10\" x=\"2\" y=\"3\" rx=\"2\" />\n <path d=\"M12 17v4\" />\n <path d=\"M8 21h8\" />\n </>\n ),\n volume: (\n <>\n <polygon points=\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\" />\n <path d=\"M15.54 8.46a5 5 0 0 1 0 7.07\" />\n <path d=\"M19.07 4.93a10 10 0 0 1 0 14.14\" />\n </>\n ),\n sliders: (\n <>\n <line x1=\"4\" x2=\"4\" y1=\"21\" y2=\"14\" />\n <line x1=\"4\" x2=\"4\" y1=\"10\" y2=\"3\" />\n <line x1=\"12\" x2=\"12\" y1=\"21\" y2=\"12\" />\n <line x1=\"12\" x2=\"12\" y1=\"8\" y2=\"3\" />\n <line x1=\"20\" x2=\"20\" y1=\"21\" y2=\"16\" />\n <line x1=\"20\" x2=\"20\" y1=\"12\" y2=\"3\" />\n <line x1=\"1\" x2=\"7\" y1=\"14\" y2=\"14\" />\n <line x1=\"9\" x2=\"15\" y1=\"8\" y2=\"8\" />\n <line x1=\"17\" x2=\"23\" y1=\"16\" y2=\"16\" />\n </>\n ),\n joystick: (\n <>\n <circle cx=\"12\" cy=\"7\" r=\"3\" />\n <path d=\"M12 10v7\" />\n <rect width=\"18\" height=\"4\" x=\"3\" y=\"17\" rx=\"2\" />\n </>\n ),\n book: (\n <>\n <path d=\"M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H20v20H6.5a2.5 2.5 0 0 1-2.5-2.5Z\" />\n <path d=\"M6 6h10\" />\n <path d=\"M6 10h10\" />\n </>\n ),\n store: (\n <>\n <path d=\"m2 7 4.41-4.41A2 2 0 0 1 7.83 2h8.34a2 2 0 0 1 1.42.59L22 7\" />\n <path d=\"M4 12v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8\" />\n <path d=\"M15 22v-4a2 2 0 0 0-2-2h-2a2 2 0 0 0-2 2v4\" />\n <path d=\"M2 7h20\" />\n </>\n ),\n award: (\n <>\n <circle cx=\"12\" cy=\"8\" r=\"7\" />\n <polyline points=\"8.21 13.89 7 23 12 20 17 23 15.79 13.88\" />\n </>\n ),\n headset: (\n <>\n <path d=\"M3 18v-6a9 9 0 0 1 18 0v6\" />\n <path d=\"M21 19a2 2 0 0 1-2 2h-1a2 2 0 0 1-2-2v-3a2 2 0 0 1 2-2h3zM3 19a2 2 0 0 0 2 2h1a2 2 0 0 0 2-2v-3a2 2 0 0 0-2-2H3z\" />\n </>\n ),\n layout: (\n <>\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" />\n <path d=\"M3 9h18\" />\n <path d=\"M9 21V9\" />\n </>\n ),\n video: (\n <>\n <polygon points=\"23 7 16 12 23 17 23 7\" />\n <rect width=\"14\" height=\"12\" x=\"1\" y=\"6\" rx=\"2\" />\n </>\n ),\n facebook: (\n <path\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n d=\"M22 12c0-5.523-4.477-10-10-10S2 6.477 2 12c0 4.991 3.657 9.128 8.438 9.878v-6.987h-2.54V12h2.54V9.797c0-2.506 1.492-3.89 3.777-3.89 1.094 0 2.238.195 2.238.195v2.46h-1.26c-1.243 0-1.63.771-1.63 1.562V12h2.773l-.443 2.89h-2.33v6.988C18.343 21.128 22 16.991 22 12z\"\n clipRule=\"evenodd\"\n />\n ),\n instagram: (\n <path\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n d=\"M12.315 2c2.43 0 2.784.013 3.808.06 1.064.049 1.791.218 2.427.465a4.902 4.902 0 011.772 1.153 4.902 4.902 0 011.153 1.772c.247.636.416 1.363.465 2.427.048 1.067.06 1.407.06 4.123v.08c0 2.643-.012 2.987-.06 4.043-.049 1.064-.218 1.791-.465 2.427a4.902 4.902 0 01-1.153 1.772 4.902 4.902 0 01-1.772 1.153c-.636.247-1.363.416-2.427.465-1.067.048-1.407.06-4.123.06h-.08c-2.643 0-2.987-.012-4.043-.06-1.064-.049-1.791-.218-2.427-.465a4.902 4.902 0 01-1.772-1.153 4.902 4.902 0 01-1.153-1.772c-.247-.636-.416-1.363-.465-2.427-.047-1.024-.06-1.379-.06-3.808v-.63c0-2.43.013-2.784.06-3.808.049-1.064.218-1.791.465-2.427a4.902 4.902 0 011.153-1.772A4.902 4.902 0 015.45 2.525c.636-.247 1.363-.416 2.427-.465C8.901 2.013 9.256 2 11.685 2h.63zm-.081 1.802h-.468c-2.456 0-2.784.011-3.807.058-.975.045-1.504.207-1.857.344-.467.182-.8.398-1.15.748-.35.35-.566.683-.748 1.15-.137.353-.3.882-.344 1.857-.047 1.023-.058 1.351-.058 3.807v.468c0 2.456.011 2.784.058 3.807.045.975.207 1.504.344 1.857.182.466.399.8.748 1.15.35.35.683.566 1.15.748.353.137.882.3 1.857.344 1.054.048 1.37.058 4.041.058h.08c2.597 0 2.917-.01 3.96-.058.976-.045 1.505-.207 1.858-.344.466-.182.8-.398 1.15-.748.35-.35.566-.683.748-1.15.137-.353.3-.882.344-1.857.048-1.055.058-1.37.058-4.041v-.08c0-2.597-.01-2.917-.058-3.96-.045-.976-.207-1.505-.344-1.858a3.097 3.097 0 00-.748-1.15 3.098 3.098 0 00-1.15-.748c-.353-.137-.882-.3-1.857-.344-1.023-.047-1.351-.058-3.807-.058zM12 6.865a5.135 5.135 0 110 10.27 5.135 5.135 0 010-10.27zm0 1.802a3.333 3.333 0 100 6.666 3.333 3.333 0 000-6.666zm5.338-3.205a1.2 1.2 0 110 2.4 1.2 1.2 0 010-2.4z\"\n clipRule=\"evenodd\"\n />\n ),\n linkedin: (\n <path\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n d=\"M19 3a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h14m-.5 15.5v-5.3a3.26 3.26 0 0 0-3.26-3.26c-.85 0-1.84.52-2.28 1.3v-1.11h-2.79v8.37h2.79v-4.93c0-.77.62-1.4 1.39-1.4a1.4 1.4 0 0 1 1.4 1.4v4.93h2.75M6.88 8.56a1.68 1.68 0 0 0 1.68-1.68c0-.93-.75-1.69-1.68-1.69a1.69 1.69 0 0 0-1.69 1.69c0 .93.76 1.68 1.69 1.68m1.39 9.94v-8.37H5.5v8.37h2.77z\"\n clipRule=\"evenodd\"\n />\n ),\n twitter: (\n <path\n fill=\"currentColor\"\n d=\"M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z\"\n />\n ),\n youtube: (\n <path\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n d=\"M21.582 6.186a2.806 2.806 0 0 0-1.974-1.986C17.868 3.75 12 3.75 12 3.75s-5.868 0-7.608.45A2.806 2.806 0 0 0 2.418 6.186C2 7.94 2 12 2 12s0 4.06.418 5.814a2.806 2.806 0 0 0 1.974 1.986c1.74.45 7.608.45 7.608.45s5.868 0 7.608-.45a2.806 2.806 0 0 0 1.974-1.986C22 16.06 22 12 22 12s0-4.06-.418-5.814zM9.75 15.568V8.432L15.818 12 9.75 15.568z\"\n clipRule=\"evenodd\"\n />\n ),\n bluesky: (\n <path\n fill=\"currentColor\"\n d=\"M12 10.8c-1.087-2.114-4.046-6.053-6.798-7.995C2.566 1.01 1.5 1.97 1.5 4.5c0 2.054.675 6.643 1.05 7.995.675 2.43 2.7 3.375 4.5 3.375-3.375.9-4.875 3.15-2.7 6.3 3.675 5.325 6.9-2.025 7.65-4.275.75 2.25 3.975 9.6 7.65 4.275 2.175-3.15.675-5.4-2.7-6.3 1.8 0 3.825-.945 4.5-3.375.375-1.352 1.05-5.941 1.05-7.995 0-2.53-1.066-3.49-3.702-1.695C16.046 4.747 13.087 8.686 12 10.8z\"\n />\n ),\n github: (\n <path\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n d=\"M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.53 1.032 1.53 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z\"\n clipRule=\"evenodd\"\n />\n ),\n} as const;\n\nexport type IconName =\n | keyof typeof iconPaths\n | keyof typeof complexIcons\n | \"smile\"\n | \"avatar\"\n | \"voice\"\n | \"audio\"\n | \"speech\"\n | \"expert\"\n | \"profile\"\n | \"world\"\n | \"language\"\n | \"screen\"\n | \"laptop\"\n | \"sound\"\n | \"speaker\"\n | \"tune\"\n | \"adjust\"\n | \"message\"\n | \"team\"\n | \"group\"\n | \"motion\"\n | \"gamepad\"\n | \"curriculum\"\n | \"learning\"\n | \"education\"\n | \"marketplace\"\n | \"security\"\n | \"privacy\"\n | \"badge\"\n | \"certificate\"\n | \"support\"\n | \"help\"\n | \"x-brand\"\n | \"bsky\";\n\nconst iconAliases: Record<string, keyof typeof iconPaths | keyof typeof complexIcons> = {\n smile: \"face\",\n avatar: \"face\",\n voice: \"mic\",\n audio: \"mic\",\n speech: \"mic\",\n expert: \"brain\",\n profile: \"user\",\n world: \"globe\",\n language: \"globe\",\n screen: \"devices\",\n laptop: \"devices\",\n sound: \"volume\",\n speaker: \"volume\",\n tune: \"sliders\",\n adjust: \"sliders\",\n message: \"chat\",\n team: \"users\",\n group: \"users\",\n motion: \"joystick\",\n gamepad: \"joystick\",\n curriculum: \"book\",\n learning: \"book\",\n education: \"book\",\n marketplace: \"store\",\n security: \"shield\",\n privacy: \"shield\",\n badge: \"award\",\n certificate: \"award\",\n support: \"headset\",\n help: \"headset\",\n \"x-brand\": \"twitter\",\n bsky: \"bluesky\",\n};\n\nexport const getIconNode = (name: IconName): React.ReactNode => {\n const resolvedName = (iconAliases[name] || name) as\n | keyof typeof iconPaths\n | keyof typeof complexIcons;\n\n if (resolvedName in complexIcons) {\n return complexIcons[resolvedName as keyof typeof complexIcons];\n }\n if (resolvedName in iconPaths) {\n return <path d={iconPaths[resolvedName as keyof typeof iconPaths]} />;\n }\n return null;\n};\n\nexport const icons: Record<string, React.ReactNode> = new Proxy(\n {},\n {\n get: (_, prop: string) => getIconNode(prop as IconName),\n has: () => true,\n },\n);\n","import React from \"react\";\nimport { cn } from \"../utils\";\nimport { Icon, IconName } from \"./Icon\";\n\nexport interface SocialLinkItem {\n name: string;\n url: string;\n ariaLabel?: string;\n icon?: IconName;\n}\n\nexport const DEFAULT_PEERBOTS_SOCIAL_LINKS: SocialLinkItem[] = [\n {\n name: \"Facebook\",\n url: \"https://www.facebook.com/peerbots\",\n ariaLabel: \"Peerbots on Facebook\",\n icon: \"facebook\",\n },\n {\n name: \"Instagram\",\n url: \"https://www.instagram.com/peerbots\",\n ariaLabel: \"Peerbots on Instagram\",\n icon: \"instagram\",\n },\n {\n name: \"LinkedIn\",\n url: \"https://www.linkedin.com/company/peerbots\",\n ariaLabel: \"Peerbots on LinkedIn\",\n icon: \"linkedin\",\n },\n {\n name: \"Twitter\",\n url: \"https://twitter.com/peerbots\",\n ariaLabel: \"Peerbots on Twitter / X\",\n icon: \"twitter\",\n },\n {\n name: \"YouTube\",\n url: \"https://www.youtube.com/@peerbots\",\n ariaLabel: \"Peerbots on YouTube\",\n icon: \"youtube\",\n },\n {\n name: \"BlueSky\",\n url: \"https://bsky.app/profile/peerbots.bsky.social\",\n ariaLabel: \"Peerbots on BlueSky\",\n icon: \"bluesky\",\n },\n {\n name: \"GitHub\",\n url: \"https://github.com/peerbots\",\n ariaLabel: \"Peerbots on GitHub\",\n icon: \"github\",\n },\n];\n\nexport interface SocialLinksProps {\n className?: string;\n links?: SocialLinkItem[];\n size?: \"sm\" | \"md\" | \"lg\";\n variant?: \"default\" | \"white\" | \"teal\" | \"dark\" | \"muted\";\n}\n\nexport const SocialLinks: React.FC<SocialLinksProps> = ({\n className,\n links = DEFAULT_PEERBOTS_SOCIAL_LINKS,\n size = \"md\",\n variant = \"default\",\n}) => {\n const sizeClasses = {\n sm: \"pb:w-4 pb:h-4\",\n md: \"pb:w-5 pb:h-5\",\n lg: \"pb:w-6 pb:h-6\",\n }[size];\n\n const variantClasses = {\n default:\n \"pb:text-gray-500 pb:hover:text-peerbots-darkteal pb:hover:bg-peerbots-teal/10\",\n white: \"pb:text-white/80 pb:hover:text-white pb:hover:bg-white/10\",\n teal: \"pb:text-peerbots-teal pb:hover:text-peerbots-darkteal pb:hover:bg-peerbots-teal/15\",\n dark: \"pb:text-gray-900 pb:hover:text-peerbots-teal pb:hover:bg-gray-100\",\n muted: \"pb:text-gray-400 pb:hover:text-gray-700 pb:hover:bg-gray-100\",\n }[variant];\n\n const buttonSizeClasses = {\n sm: \"pb:p-1.5 pb:rounded-lg\",\n md: \"pb:p-2 pb:rounded-xl\",\n lg: \"pb:p-2.5 pb:rounded-2xl\",\n }[size];\n\n return (\n <div className={cn(\"pb:flex pb:flex-wrap pb:items-center pb:gap-1.5\", className)}>\n {links.map((link) => {\n const iconName = (link.icon ||\n link.name.toLowerCase().replace(/[^a-z0-9]/g, \"\")) as IconName;\n\n return (\n <a\n key={link.name}\n href={link.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={cn(\n \"pb:inline-flex pb:items-center pb:justify-center pb:transition-all pb:duration-200 pb:cursor-pointer\",\n variantClasses,\n buttonSizeClasses,\n )}\n aria-label={link.ariaLabel || `Visit Peerbots on ${link.name}`}\n title={link.name}\n >\n <Icon name={iconName} className={sizeClasses} />\n </a>\n );\n })}\n </div>\n );\n};\n","import React, { useState } from \"react\";\nimport { cn } from \"../utils\";\nimport { Icon } from \"./Icon\";\n\nexport interface CodeBlockProps {\n /** The code string to display */\n code: string;\n /** Programming language for syntax/badge (e.g. bash, tsx, json) */\n language?: string;\n /** Optional file name displayed in the window header */\n fileName?: string;\n /** Whether to show line numbers */\n showLineNumbers?: boolean;\n /** Style variant: 'default' (clean block) or 'window' (macOS window with colored dots) */\n variant?: \"default\" | \"window\" | \"flat\";\n /** Whether to show the copy button */\n showCopyButton?: boolean;\n className?: string;\n}\n\nexport const CodeBlock: React.FC<CodeBlockProps> = ({\n code = \"\",\n language,\n fileName,\n showLineNumbers = false,\n variant = \"default\",\n showCopyButton = true,\n className,\n}) => {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(code);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch (err) {\n console.error(\"Failed to copy code to clipboard\", err);\n }\n };\n\n const codeLines = code.trim().split(\"\\n\");\n const isWindow = variant === \"window\";\n\n return (\n <div\n className={cn(\n \"pb:relative pb:group pb:rounded-xl pb:overflow-hidden pb:font-mono pb:text-sm pb:transition-all\",\n isWindow\n ? \"pb:shadow-xl pb:border pb:border-gray-800 pb:bg-[#1e222b] pb:text-gray-100\"\n : variant === \"flat\"\n ? \"pb:bg-[#1e222b]/90 pb:text-gray-100\"\n : \"pb:border pb:border-gray-800 pb:bg-[#1e222b] pb:text-gray-100 pb:shadow-md\",\n className,\n )}\n >\n {/* Window Header Bar (Only in window variant) */}\n {isWindow ? (\n <div className=\"pb:flex pb:items-center pb:justify-between pb:px-4 pb:py-3 pb:bg-[#161920] pb:border-b pb:border-gray-800/80\">\n <div className=\"pb:flex pb:items-center pb:gap-2\">\n <span className=\"pb:w-3 pb:h-3 pb:rounded-full pb:bg-red-500/80 pb:inline-block\" />\n <span className=\"pb:w-3 pb:h-3 pb:rounded-full pb:bg-yellow-500/80 pb:inline-block\" />\n <span className=\"pb:w-3 pb:h-3 pb:rounded-full pb:bg-green-500/80 pb:inline-block\" />\n {fileName && (\n <span className=\"pb:ml-2 pb:text-xs pb:text-gray-300 pb:font-sans pb:font-medium\">\n {fileName}\n </span>\n )}\n </div>\n\n <div className=\"pb:flex pb:items-center pb:gap-3\">\n {language && (\n <span className=\"pb:text-xs pb:uppercase pb:font-bold pb:text-gray-200 pb:bg-gray-800/80 pb:px-2.5 pb:py-0.5 pb:rounded-md\">\n {language}\n </span>\n )}\n {showCopyButton && (\n <button\n type=\"button\"\n onClick={handleCopy}\n className=\"pb:flex pb:items-center pb:gap-1.5 pb:px-3 pb:py-1 pb:text-xs pb:font-semibold pb:text-gray-200 pb:hover:text-white pb:bg-gray-800 pb:hover:bg-gray-700 pb:rounded-lg pb:transition-colors pb:cursor-pointer\"\n aria-label=\"Copy code to clipboard\"\n >\n {copied ? (\n <>\n <Icon name=\"check\" className=\"pb:w-3.5 pb:h-3.5 pb:text-peerbots-teal\" />\n <span className=\"pb:text-peerbots-teal\">Copied!</span>\n </>\n ) : (\n <>\n <Icon name=\"clipboard\" className=\"pb:w-3.5 pb:h-3.5\" />\n <span>Copy</span>\n </>\n )}\n </button>\n )}\n </div>\n </div>\n ) : (\n /* Floating Copy & Language badge for default / simple variant */\n (showCopyButton || language) && (\n <div className=\"pb:absolute pb:top-3 pb:right-3 pb:flex pb:items-center pb:gap-2 pb:z-10\">\n {language && (\n <span className=\"pb:text-[11px] pb:uppercase pb:font-bold pb:text-gray-200 pb:bg-gray-800/80 pb:px-2 pb:py-0.5 pb:rounded-md pb:select-none\">\n {language}\n </span>\n )}\n {showCopyButton && (\n <button\n type=\"button\"\n onClick={handleCopy}\n className=\"pb:p-1.5 pb:rounded-md pb:bg-gray-800/70 pb:hover:bg-gray-700 pb:text-gray-300 pb:hover:text-white pb:transition-all pb:duration-150 pb:cursor-pointer pb:border pb:border-gray-700/50\"\n aria-label=\"Copy code to clipboard\"\n title={copied ? \"Copied!\" : \"Copy code\"}\n >\n {copied ? (\n <Icon name=\"check\" className=\"pb:w-4 pb:h-4 pb:text-peerbots-teal\" />\n ) : (\n <Icon name=\"clipboard\" className=\"pb:w-4 pb:h-4\" />\n )}\n </button>\n )}\n </div>\n )\n )}\n\n {/* Code Block Body */}\n <div className=\"pb:p-4 sm:pb:p-5 pb:overflow-x-auto pb:text-sm sm:pb:text-base pb:leading-relaxed\">\n <pre className=\"pb:font-mono pb:m-0\">\n <code>\n {showLineNumbers ? (\n codeLines.map((line, idx) => (\n <div key={idx} className=\"pb:table-row\">\n <span className=\"pb:table-cell pb:pr-4 pb:text-right pb:select-none pb:text-gray-400 pb:text-xs\">\n {idx + 1}\n </span>\n <span className=\"pb:table-cell\">{line}</span>\n </div>\n ))\n ) : (\n code\n )}\n </code>\n </pre>\n </div>\n </div>\n );\n};\n","import * as React from \"react\";\nimport { cn } from \"../utils\";\nimport { ComponentColor } from \"../types\";\n\nexport interface AnchorProps\n extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n /**\n * Palette color or semantic intent.\n * @default \"default\"\n */\n color?: ComponentColor | \"muted\" | \"default\";\n /**\n * Underline text decoration control.\n * @default \"hover\"\n */\n underline?: \"hover\" | \"always\" | \"none\";\n /**\n * Interaction style variant.\n * @default \"default\"\n */\n variant?: \"default\" | \"ghost\";\n /** Polymorphic component wrapper (e.g. react-router Link, Next.js Link) */\n as?: React.ElementType;\n /** Custom render prop */\n render?: (\n props: React.AnchorHTMLAttributes<HTMLAnchorElement>,\n ) => React.ReactElement;\n}\n\nexport type LinkProps = AnchorProps;\n\nconst colorClasses: Record<string, string> = {\n default: \"pb:text-gray-900 pb:hover:text-peerbots-darkteal\",\n neutral: \"pb:text-gray-700 pb:hover:text-gray-950\",\n muted: \"pb:text-gray-600 pb:hover:text-gray-900\",\n teal: \"pb:text-peerbots-darkteal pb:hover:text-teal-950 pb:font-semibold\",\n pink: \"pb:text-rose-800 pb:hover:text-rose-950 pb:font-semibold\",\n primary: \"pb:text-dark-primary pb:hover:text-teal-950 pb:font-semibold\",\n darkteal: \"pb:text-peerbots-darkteal pb:hover:text-teal-950 pb:font-semibold\",\n darkblue: \"pb:text-peerbots-darkblue pb:hover:text-teal-900 pb:font-semibold\",\n danger: \"pb:text-red-700 pb:hover:text-red-900 pb:font-semibold\",\n};\n\nconst underlineClasses = {\n hover: \"pb:hover:underline pb:underline-offset-4 pb:decoration-current\",\n always: \"pb:underline pb:underline-offset-4 pb:decoration-current\",\n none: \"pb:no-underline\",\n};\n\nconst Anchor = React.forwardRef<HTMLAnchorElement, AnchorProps>(\n (\n {\n className,\n href,\n target,\n color = \"default\",\n underline = \"hover\",\n variant = \"default\",\n as: Component = \"a\",\n render,\n children,\n ...props\n },\n ref,\n ) => {\n const commonClass = cn(\n \"pb:transition-colors pb:duration-150 pb:cursor-pointer pb:font-medium pb:inline-flex pb:items-center pb:gap-1\",\n colorClasses[color] || colorClasses.default,\n underlineClasses[underline],\n variant === \"ghost\" && \"pb:px-2 pb:py-1 pb:rounded-lg pb:hover:bg-gray-100\",\n className,\n );\n\n const anchorProps = {\n href,\n target,\n className: commonClass,\n ...props,\n };\n\n if (render) {\n return render(anchorProps);\n }\n\n return (\n <Component ref={ref} {...anchorProps}>\n {children}\n </Component>\n );\n },\n);\n\nAnchor.displayName = \"Anchor\";\n\nexport const Link = Anchor;\nexport { Anchor };\n","import { Button as BaseButton } from \"@base-ui/react\";\nimport React from \"react\";\nimport { cn } from \"../utils\";\nimport {\n ComponentColor,\n FillVariant,\n ComponentSize,\n ComponentRadius,\n} from \"../types\";\n\nexport type ButtonVariant =\n | FillVariant\n | \"primary\"\n | \"secondary\"\n | \"danger\"\n | \"ghostly-danger\"\n | \"marketing-teal\"\n | \"marketing-pink\"\n | \"teal\"\n | \"pink\";\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement | HTMLAnchorElement> {\n /**\n * Visual fill style / treatment or legacy variant.\n * @default \"solid\"\n */\n variant?: ButtonVariant;\n /**\n * Palette color or semantic intent.\n * @default \"primary\"\n */\n color?: ComponentColor;\n /**\n * Button scale / padding.\n * @default \"md\"\n */\n size?: ComponentSize;\n /**\n * Border radius geometry.\n * @default \"md\" (rounded-xl)\n */\n radius?: ComponentRadius;\n /** Loading spinner indicator state */\n isLoading?: boolean;\n /** Icon placed before children */\n leftIcon?: React.ReactNode;\n /** Icon placed after children */\n rightIcon?: React.ReactNode;\n render?: BaseButton.Props[\"render\"];\n nativeButton?: boolean;\n isIconOnly?: boolean;\n href?: string;\n target?: string;\n rel?: string;\n}\n\nconst variantColorMap: Record<FillVariant, Record<string, string>> = {\n solid: {\n primary:\n \"pb:bg-primary pb:text-gray-900 pb:hover:bg-dark-primary pb:hover:text-white pb:shadow-xs pb:font-bold\",\n neutral:\n \"pb:bg-gray-100 pb:text-gray-900 pb:hover:bg-gray-200 pb:border pb:border-gray-300 pb:font-medium\",\n teal: \"pb:bg-peerbots-teal pb:text-gray-900 pb:hover:bg-peerbots-darkteal pb:hover:text-white pb:shadow-md pb:font-bold\",\n pink: \"pb:bg-peerbots-pink pb:text-gray-950 pb:hover:bg-rose-700 pb:hover:text-white pb:shadow-md pb:font-bold\",\n darkblue:\n \"pb:bg-peerbots-darkblue pb:text-white pb:hover:opacity-90 pb:shadow-md pb:font-bold\",\n danger:\n \"pb:bg-red-600 pb:text-white pb:hover:bg-red-700 pb:shadow-xs pb:font-bold\",\n success:\n \"pb:bg-emerald-700 pb:text-white pb:hover:bg-emerald-800 pb:shadow-xs pb:font-bold\",\n warning:\n \"pb:bg-amber-500 pb:text-gray-900 pb:hover:bg-amber-600 pb:shadow-xs pb:font-bold\",\n },\n soft: {\n primary:\n \"pb:bg-primary/20 pb:text-teal-950 pb:hover:bg-primary/30 pb:font-bold\",\n neutral:\n \"pb:bg-gray-100 pb:text-gray-800 pb:hover:bg-gray-200 pb:font-medium\",\n teal: \"pb:bg-peerbots-teal/20 pb:text-teal-950 pb:hover:bg-peerbots-teal/30 pb:font-bold\",\n pink: \"pb:bg-peerbots-pink/20 pb:text-rose-950 pb:hover:bg-peerbots-pink/30 pb:font-bold\",\n darkblue:\n \"pb:bg-peerbots-darkblue/15 pb:text-peerbots-darkblue pb:hover:bg-peerbots-darkblue/25 pb:font-bold\",\n danger:\n \"pb:bg-red-50 pb:text-red-800 pb:hover:bg-red-100 pb:font-bold\",\n success:\n \"pb:bg-emerald-50 pb:text-emerald-800 pb:hover:bg-emerald-100 pb:font-bold\",\n warning:\n \"pb:bg-amber-50 pb:text-amber-900 pb:hover:bg-amber-100 pb:font-bold\",\n },\n outline: {\n primary:\n \"pb:bg-transparent pb:border-2 pb:border-teal-700 pb:text-teal-900 pb:hover:bg-primary/10 pb:font-bold\",\n neutral:\n \"pb:bg-transparent pb:border-2 pb:border-gray-300 pb:text-gray-800 pb:hover:border-gray-400 pb:hover:bg-gray-50 pb:font-medium\",\n teal: \"pb:bg-transparent pb:border-2 pb:border-peerbots-darkteal pb:text-peerbots-darkteal pb:hover:bg-peerbots-teal/10 pb:font-bold\",\n pink: \"pb:bg-transparent pb:border-2 pb:border-rose-700 pb:text-rose-800 pb:hover:bg-peerbots-pink/10 pb:font-bold\",\n darkblue:\n \"pb:bg-transparent pb:border-2 pb:border-peerbots-darkblue pb:text-peerbots-darkblue pb:hover:bg-peerbots-darkblue/10 pb:font-bold\",\n danger:\n \"pb:bg-transparent pb:border-2 pb:border-red-600 pb:text-red-700 pb:hover:bg-red-50 pb:font-bold\",\n success:\n \"pb:bg-transparent pb:border-2 pb:border-emerald-600 pb:text-emerald-700 pb:hover:bg-emerald-50 pb:font-bold\",\n warning:\n \"pb:bg-transparent pb:border-2 pb:border-amber-600 pb:text-amber-900 pb:hover:bg-amber-50 pb:font-bold\",\n },\n ghost: {\n primary:\n \"pb:bg-transparent pb:text-teal-900 pb:hover:bg-primary/10 pb:font-bold\",\n neutral:\n \"pb:bg-transparent pb:text-gray-800 pb:hover:bg-gray-100 pb:hover:text-gray-900 pb:font-medium\",\n teal: \"pb:bg-transparent pb:text-peerbots-darkteal pb:hover:bg-peerbots-teal/10 pb:font-bold\",\n pink: \"pb:bg-transparent pb:text-rose-800 pb:hover:bg-peerbots-pink/10 pb:font-bold\",\n darkblue:\n \"pb:bg-transparent pb:text-peerbots-darkblue pb:hover:bg-peerbots-darkblue/10 pb:font-bold\",\n danger:\n \"pb:bg-transparent pb:text-red-700 pb:hover:bg-red-50 pb:font-bold\",\n success:\n \"pb:bg-transparent pb:text-emerald-700 pb:hover:bg-emerald-50 pb:font-bold\",\n warning:\n \"pb:bg-transparent pb:text-amber-900 pb:hover:bg-amber-50 pb:font-bold\",\n },\n link: {\n primary:\n \"pb:bg-transparent pb:p-0 pb:text-teal-800 pb:hover:underline pb:font-medium\",\n neutral:\n \"pb:bg-transparent pb:p-0 pb:text-gray-700 pb:hover:text-gray-900 pb:hover:underline pb:font-medium\",\n teal: \"pb:bg-transparent pb:p-0 pb:text-peerbots-darkteal pb:hover:underline pb:font-medium\",\n pink: \"pb:bg-transparent pb:p-0 pb:text-rose-800 pb:hover:underline pb:font-medium\",\n darkblue:\n \"pb:bg-transparent pb:p-0 pb:text-peerbots-darkblue pb:hover:underline pb:font-medium\",\n danger:\n \"pb:bg-transparent pb:p-0 pb:text-red-600 pb:hover:underline pb:font-medium\",\n success:\n \"pb:bg-transparent pb:p-0 pb:text-emerald-600 pb:hover:underline pb:font-medium\",\n warning:\n \"pb:bg-transparent pb:p-0 pb:text-amber-600 pb:hover:underline pb:font-medium\",\n },\n};\n\nconst radiusClasses: Record<ComponentRadius, string> = {\n none: \"pb:rounded-none\",\n sm: \"pb:rounded-md\",\n md: \"pb:rounded-xl\",\n lg: \"pb:rounded-2xl\",\n \"2xl\": \"pb:rounded-2xl\",\n pill: \"pb:rounded-full\",\n};\n\nexport const Button = React.forwardRef<\n HTMLButtonElement | HTMLAnchorElement,\n ButtonProps\n>(\n (\n {\n className,\n variant = \"solid\",\n color,\n size = \"md\",\n radius = \"md\",\n isLoading = false,\n leftIcon,\n rightIcon,\n children,\n disabled,\n render,\n nativeButton,\n isIconOnly,\n href,\n target,\n rel,\n ...props\n },\n ref,\n ) => {\n // Resolve legacy variants to orthogonal (FillVariant, ComponentColor, ComponentRadius)\n let resolvedVariant: FillVariant = \"solid\";\n let resolvedColor: ComponentColor = color || \"primary\";\n let resolvedRadius: ComponentRadius = radius;\n\n if (variant === \"secondary\") {\n resolvedVariant = \"solid\";\n resolvedColor = color || \"neutral\";\n } else if (variant === \"danger\") {\n resolvedVariant = \"solid\";\n resolvedColor = color || \"danger\";\n } else if (variant === \"ghostly-danger\") {\n resolvedVariant = \"ghost\";\n resolvedColor = color || \"danger\";\n } else if (variant === \"marketing-teal\" || variant === \"teal\") {\n resolvedVariant = \"solid\";\n resolvedColor = color || \"teal\";\n resolvedRadius = radius === \"md\" ? \"pill\" : radius;\n } else if (variant === \"marketing-pink\" || variant === \"pink\") {\n resolvedVariant = \"solid\";\n resolvedColor = color || \"pink\";\n resolvedRadius = radius === \"md\" ? \"pill\" : radius;\n } else if (\n variant === \"solid\" ||\n variant === \"soft\" ||\n variant === \"outline\" ||\n variant === \"ghost\" ||\n variant === \"link\"\n ) {\n resolvedVariant = variant;\n }\n\n const isActuallyIconOnly =\n isIconOnly || (!children && (!!leftIcon || !!rightIcon));\n\n const sizes: Record<ComponentSize, string> = {\n xs: isActuallyIconOnly\n ? \"pb:p-1 pb:text-xs\"\n : \"pb:px-2.5 pb:py-1 pb:text-xs\",\n sm: isActuallyIconOnly\n ? \"pb:p-1.5 pb:text-xs\"\n : \"pb:px-3.5 pb:py-1.5 pb:text-xs\",\n md: isActuallyIconOnly\n ? \"pb:p-2 pb:text-sm\"\n : \"pb:px-4.5 pb:py-2.5 pb:text-sm\",\n lg: isActuallyIconOnly\n ? \"pb:p-3 pb:text-base\"\n : \"pb:px-6 pb:py-3.5 pb:text-base sm:pb:text-lg\",\n xl: isActuallyIconOnly\n ? \"pb:p-3.5 pb:text-lg\"\n : \"pb:px-8 pb:py-4 pb:text-lg sm:pb:text-xl\",\n };\n\n const variantStyles =\n variantColorMap[resolvedVariant]?.[resolvedColor] ||\n variantColorMap[resolvedVariant]?.primary ||\n variantColorMap.solid.primary;\n\n const commonClasses = cn(\n \"pb:inline-flex pb:items-center pb:justify-center pb:transition-all pb:duration-150 pb:focus:outline-none pb:focus-visible:ring-2 pb:focus-visible:ring-peerbots-teal pb:focus-visible:ring-offset-2 pb:disabled:cursor-not-allowed pb:disabled:opacity-50 pb:cursor-pointer pb:font-medium\",\n radiusClasses[resolvedRadius],\n variantStyles,\n sizes[size],\n className,\n );\n\n const content = (\n <>\n {isLoading && (\n <svg\n className={cn(\n \"pb:animate-spin pb:h-4 pb:w-4\",\n !isActuallyIconOnly && \"pb:mr-2 pb:-ml-1\",\n )}\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n className=\"pb:opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n ></circle>\n <path\n className=\"pb:opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n ></path>\n </svg>\n )}\n {!isLoading && leftIcon && (\n <span\n className={cn(\n \"pb:inline-flex pb:items-center pb:justify-center\",\n !isActuallyIconOnly && \"pb:mr-2 pb:-ml-1\",\n )}\n >\n {leftIcon}\n </span>\n )}\n {children}\n {!isLoading && rightIcon && (\n <span\n className={cn(\n \"pb:inline-flex pb:items-center pb:justify-center\",\n !isActuallyIconOnly && \"pb:ml-2 pb:-mr-1\",\n )}\n >\n {rightIcon}\n </span>\n )}\n </>\n );\n\n if (href) {\n return (\n <a\n href={href}\n target={target}\n rel={rel}\n className={commonClasses}\n ref={ref as React.Ref<HTMLAnchorElement>}\n {...(props as React.AnchorHTMLAttributes<HTMLAnchorElement>)}\n >\n {content}\n </a>\n );\n }\n\n return (\n <BaseButton\n ref={ref as React.Ref<HTMLButtonElement>}\n render={render}\n nativeButton={nativeButton}\n className={commonClasses}\n disabled={disabled || isLoading}\n {...(props as React.ButtonHTMLAttributes<HTMLButtonElement>)}\n >\n {content}\n </BaseButton>\n );\n },\n);\n\nButton.displayName = \"Button\";\n","import { Input as BaseInput } from \"@base-ui/react\";\nimport React from \"react\";\nimport { cn } from \"../utils\";\n\nexport interface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {\n leftIcon?: React.ReactNode;\n rightIcon?: React.ReactNode;\n}\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, leftIcon, rightIcon, id, ...props }, ref) => {\n const inputClasses = cn(\n \"pb:block pb:w-full pb:rounded-md pb:border-0 pb:px-1.5 pb:py-1.5 pb:text-gray-900 pb:shadow-sm pb:ring-1 pb:ring-inset pb:ring-gray-300 pb:placeholder:text-gray-400 pb:focus:ring-2 pb:focus:ring-inset pb:focus:ring-primary pb:sm:text-sm pb:sm:leading-6 pb:bg-primary/10 pb:appearance-none\",\n leftIcon && \"pb:pl-10\",\n rightIcon && \"pb:pr-10\",\n className,\n );\n\n if (!leftIcon && !rightIcon) {\n return (\n <BaseInput ref={ref} id={id} className={inputClasses} {...props} />\n );\n }\n\n return (\n <div className=\"pb:relative\">\n {leftIcon && (\n <div className=\"pb:pointer-events-none pb:absolute pb:inset-y-0 pb:left-0 pb:flex pb:items-center pb:pl-3\">\n <span className=\"pb:text-gray-500 pb:sm:text-sm\">{leftIcon}</span>\n </div>\n )}\n <BaseInput ref={ref} id={id} className={inputClasses} {...props} />\n {rightIcon && (\n <div className=\"pb:pointer-events-none pb:absolute pb:inset-y-0 pb:right-0 pb:flex pb:items-center pb:pr-3\">\n <span className=\"pb:text-gray-500 pb:sm:text-sm\">{rightIcon}</span>\n </div>\n )}\n </div>\n );\n },\n);\n\nInput.displayName = \"Input\";\n","import React from \"react\";\nimport { Select as BaseSelect } from \"@base-ui/react\";\nimport { cn } from \"../utils\";\nimport { Icon } from \"../foundations/Icon\";\n\nexport interface SelectOption {\n label: string;\n value: string | number;\n}\n\nexport interface SelectProps extends React.AriaAttributes {\n options: (string | SelectOption)[];\n value?: string | number;\n defaultValue?: string | number;\n onChange?: (value: string | number | null, event: Event) => void;\n disabled?: boolean;\n placeholder?: string;\n className?: string;\n id?: string;\n onFocus?: React.FocusEventHandler<HTMLButtonElement>;\n}\n\nexport const Select = React.forwardRef<HTMLButtonElement, SelectProps>(\n (\n {\n className,\n options,\n id: propsId,\n value,\n defaultValue,\n onChange,\n disabled,\n placeholder = \"Select...\",\n onFocus,\n \"aria-label\": ariaLabel,\n ...props\n },\n ref,\n ) => {\n const generatedId = React.useId();\n const selectId = propsId || generatedId;\n\n return (\n <div className=\"pb:w-full\">\n <BaseSelect.Root\n value={value === undefined ? null : String(value)}\n defaultValue={\n defaultValue === undefined ? undefined : String(defaultValue)\n }\n onValueChange={(\n val: string | null,\n details?: { event: Event } | null,\n ) => {\n if (onChange) {\n // Base UI Select passes eventDetails as the second argument, which has an 'event' property.\n const event = details?.event || (details as unknown as Event);\n onChange(val, event);\n }\n }}\n disabled={disabled}\n >\n <BaseSelect.Trigger\n ref={ref}\n id={selectId}\n aria-label={ariaLabel || (typeof placeholder === \"string\" ? placeholder : \"Select an option\")}\n className={cn(\n \"pb:flex pb:w-full pb:items-center pb:justify-between pb:rounded-md pb:border-0 pb:py-1.5 pb:pl-3 pb:pr-3 pb:text-gray-900 pb:ring-1 pb:ring-inset pb:ring-gray-300 pb:focus:ring-2 pb:focus:ring-primary pb:sm:text-sm pb:sm:leading-6 pb:bg-primary/10 pb:min-h-[36px]\",\n disabled && \"pb:opacity-50 pb:cursor-not-allowed\",\n className,\n )}\n onFocus={onFocus}\n {...props}\n >\n <BaseSelect.Value placeholder={placeholder} />\n <BaseSelect.Icon>\n <Icon size=\"sm\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"m19.5 8.25-7.5 7.5-7.5-7.5\"\n />\n </Icon>\n </BaseSelect.Icon>\n </BaseSelect.Trigger>\n <BaseSelect.Portal>\n <BaseSelect.Positioner\n sideOffset={4}\n className=\"pb:z-50 pb:w-[var(--anchor-width)]\"\n >\n <BaseSelect.Popup className=\"pb:max-h-60 pb:overflow-auto pb:rounded-md pb:bg-white pb:py-1 pb:text-base pb:shadow-lg pb:ring-1 pb:ring-black pb:ring-opacity-5 focus:pb:outline-none pb:sm:text-sm\">\n {options.map((option, index) => {\n const label =\n typeof option === \"object\" ? option.label : option;\n const value =\n typeof option === \"object\" ? option.value : option;\n return (\n <BaseSelect.Item\n key={`${value}-${index}`}\n value={value}\n className=\"pb:relative pb:cursor-default pb:select-none pb:py-2 pb:pl-3 pb:pr-9 pb:text-gray-900 pb:hover:bg-gray-100 data-[highlighted]:pb:bg-gray-100 data-[selected]:pb:font-semibold\"\n >\n <BaseSelect.ItemText>{label}</BaseSelect.ItemText>\n <BaseSelect.ItemIndicator className=\"pb:absolute pb:inset-y-0 pb:right-0 pb:flex pb:items-center pb:pr-4 pb:text-primary\">\n <Icon size=\"sm\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M4.5 12.75l6 6 9-13.5\"\n />\n </Icon>\n </BaseSelect.ItemIndicator>\n </BaseSelect.Item>\n );\n })}\n </BaseSelect.Popup>\n </BaseSelect.Positioner>\n </BaseSelect.Portal>\n </BaseSelect.Root>\n </div>\n );\n },\n);\n\nSelect.displayName = \"Select\";\n","import React from \"react\";\nimport { Slider as BaseSlider } from \"@base-ui/react\";\nimport { cn } from \"../utils\";\n\nexport interface SliderProps extends React.AriaAttributes {\n min?: number;\n max?: number;\n step?: number;\n value?: number;\n defaultValue?: number;\n disabled?: boolean;\n onChange?: (value: number | number[], event: Event) => void;\n className?: string;\n name?: string;\n icon?: React.ReactNode;\n}\n\nexport const Slider = React.forwardRef<HTMLDivElement, SliderProps>(\n (\n {\n className,\n min = 0,\n max = 100,\n step = 1,\n value,\n defaultValue,\n disabled,\n onChange,\n name,\n icon,\n \"aria-label\": ariaLabel,\n ...props\n },\n ref,\n ) => {\n const handleChange = (val: number | number[], event: Event) => {\n if (onChange) {\n onChange(val, event);\n }\n };\n\n return (\n <div className={cn(\"pb:w-full pb:flex pb:items-center pb:gap-4\", className)}>\n {icon && <div className=\"pb:text-gray-500 pb:shrink-0\">{icon}</div>}\n\n <div className=\"pb:flex-grow pb:flex pb:items-center pb:h-8 pb:min-w-[120px]\">\n <BaseSlider.Root\n ref={ref}\n min={min}\n max={max}\n step={step}\n value={\n value !== undefined\n ? Array.isArray(value)\n ? value\n : [value]\n : undefined\n }\n defaultValue={\n defaultValue !== undefined\n ? Array.isArray(defaultValue)\n ? defaultValue\n : [defaultValue]\n : undefined\n }\n disabled={disabled}\n orientation=\"horizontal\"\n {...props}\n onValueChange={(val, details) => {\n const event =\n (details as { event?: Event })?.event ||\n (window.event as unknown as Event);\n handleChange(val as number | number[], event);\n }}\n className={cn(\n \"pb:relative pb:flex pb:items-center pb:w-full pb:h-full pb:group pb:touch-none pb:select-none\",\n disabled && \"pb:opacity-50 pb:cursor-not-allowed\",\n className,\n )}\n >\n <BaseSlider.Control className=\"pb:flex pb:items-center pb:w-full pb:h-full pb:relative pb:cursor-pointer\">\n <BaseSlider.Track className=\"pb:relative pb:bg-gray-200 pb:rounded-full pb:w-full pb:h-1.5 pb:overflow-hidden pb:transition-colors group-pb:hover:bg-gray-300\">\n <BaseSlider.Indicator className=\"pb:absolute pb:bg-primary pb:rounded-full pb:h-full\" />\n </BaseSlider.Track>\n <BaseSlider.Thumb\n aria-label={ariaLabel || (name ? name : \"Slider\")}\n className=\"pb:z-10 pb:block pb:w-4.5 pb:h-4.5 pb:bg-white pb:shadow-md pb:rounded-full pb:border-2 pb:border-primary focus:pb:outline-none focus:pb:ring-4 focus:pb:ring-primary/20 pb:cursor-grab active:pb:cursor-grabbing pb:hover:scale-110 active:pb:scale-95 pb:transition-transform\"\n />\n </BaseSlider.Control>\n </BaseSlider.Root>\n </div>\n {/* Hidden input to support form submission if needed */}\n {name && <input type=\"hidden\" name={name} value={value} />}\n </div>\n );\n },\n);\n\nSlider.displayName = \"Slider\";\n","import React from \"react\";\nimport { Slider } from \"./Slider\";\nimport { NumberField } from \"./NumberField\";\nimport { cn } from \"../utils\";\n\nexport interface SliderWithNumberFieldProps extends React.AriaAttributes {\n min?: number;\n max?: number;\n step?: number;\n value?: number;\n defaultValue?: number;\n disabled?: boolean;\n onChange?: (value: number, event: Event) => void;\n className?: string;\n inputWidth?: string;\n showButtons?: boolean;\n}\n\nexport const SliderWithNumberField = React.forwardRef<\n HTMLDivElement,\n SliderWithNumberFieldProps\n>(\n (\n {\n className,\n min = 0,\n max = 100,\n step = 1,\n value,\n defaultValue,\n disabled,\n onChange,\n inputWidth,\n showButtons = false,\n \"aria-label\": ariaLabel,\n ...props\n },\n ref,\n ) => {\n const handleChange = (val: number | number[], event: Event) => {\n if (onChange) {\n const newValue = Array.isArray(val) ? val[0] : val;\n onChange(newValue, event);\n }\n };\n\n const defaultWidth = showButtons ? \"pb:w-28\" : \"pb:w-20\";\n const widthClass = inputWidth\n ? inputWidth.startsWith(\"pb:\")\n ? inputWidth\n : `pb:${inputWidth}`\n : defaultWidth;\n\n return (\n <div\n ref={ref}\n className={cn(\n \"pb:flex pb:items-center pb:gap-3 pb:w-full pb:min-w-0\",\n className,\n )}\n {...props}\n >\n <div className=\"pb:flex-1 pb:min-w-0\">\n <Slider\n min={min}\n max={max}\n step={step}\n value={value}\n defaultValue={defaultValue}\n disabled={disabled}\n aria-label={ariaLabel ? `${ariaLabel} slider` : \"Slider value\"}\n onChange={handleChange}\n className=\"pb:w-full\"\n />\n </div>\n <div className={cn(widthClass, \"pb:shrink-0\")}>\n <NumberField\n value={value}\n defaultValue={defaultValue}\n min={min}\n max={max}\n step={step}\n disabled={disabled}\n aria-label={ariaLabel ? `${ariaLabel} input` : \"Numeric input\"}\n onChange={(val, event) => {\n if (val !== null) {\n handleChange(val, event);\n }\n }}\n showButtons={showButtons}\n />\n </div>\n </div>\n );\n },\n);\n\nSliderWithNumberField.displayName = \"SliderWithNumberField\";\n\nexport default SliderWithNumberField;\n","import React from \"react\";\nimport { NumberField as BaseNumberField } from \"@base-ui/react\";\nimport { cn } from \"../utils\";\nimport { Icon } from \"../foundations/Icon\";\n\nexport interface NumberFieldProps extends React.AriaAttributes {\n value?: number | null;\n defaultValue?: number;\n min?: number;\n max?: number;\n step?: number;\n onChange?: (value: number | null, event: Event) => void;\n disabled?: boolean;\n readOnly?: boolean;\n className?: string;\n id?: string;\n placeholder?: string;\n showButtons?: boolean;\n}\n\nexport const NumberField = React.forwardRef<HTMLDivElement, NumberFieldProps>(\n (\n {\n className,\n value,\n defaultValue,\n min,\n max,\n step,\n onChange,\n disabled,\n readOnly,\n id: propsId,\n placeholder,\n showButtons = false,\n \"aria-label\": ariaLabel,\n ...props\n },\n ref,\n ) => {\n return (\n <div className=\"pb:w-full\">\n <BaseNumberField.Root\n ref={ref}\n id={propsId}\n value={value}\n defaultValue={defaultValue}\n min={min}\n max={max}\n step={step}\n onValueChange={(val, details) => {\n if (onChange) {\n const event = details?.event || (details as unknown as Event);\n onChange(val, event);\n }\n }}\n disabled={disabled}\n readOnly={readOnly}\n className={cn(\"pb:flex pb:flex-col pb:gap-1\", className)}\n {...props}\n >\n <BaseNumberField.Group\n className={cn(\n \"pb:group pb:relative pb:flex pb:items-center pb:rounded-md pb:border-0 pb:bg-primary/10 pb:ring-1 pb:ring-inset pb:ring-gray-300 pb:focus-within:ring-2 pb:focus-within:ring-primary pb:shadow-sm\",\n disabled && \"pb:opacity-50 pb:cursor-not-allowed\",\n )}\n >\n {showButtons && (\n <BaseNumberField.Decrement\n aria-label=\"Decrement\"\n className=\"pb:relative pb:z-20 pb:flex pb:items-center pb:justify-center pb:w-8 pb:h-9 pb:text-gray-500 pb:hover:text-gray-700 pb:hover:bg-gray-100/50 pb:rounded-l-md pb:border-r pb:border-gray-300 disabled:pb:opacity-30 pb:cursor-pointer\"\n >\n <Icon size=\"sm\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M19.5 12h-15\"\n />\n </Icon>\n </BaseNumberField.Decrement>\n )}\n\n <BaseNumberField.Input\n placeholder={placeholder}\n aria-label={ariaLabel || (typeof placeholder === \"string\" ? placeholder : \"Number input\")}\n className={cn(\n \"pb:block pb:w-full pb:bg-transparent pb:border-0 pb:px-3 pb:py-1.5 pb:text-gray-900 pb:placeholder:text-gray-400 pb:focus:ring-0 pb:sm:text-sm pb:sm:leading-6 pb:text-center pb:appearance-none pb:relative pb:z-0\",\n !showButtons && \"pb:rounded-md\",\n )}\n />\n\n {showButtons && (\n <BaseNumberField.Increment\n aria-label=\"Increment\"\n className=\"pb:relative pb:z-20 pb:flex pb:items-center pb:justify-center pb:w-8 pb:h-9 pb:text-gray-500 pb:hover:text-gray-700 pb:hover:bg-gray-100/50 pb:rounded-r-md pb:border-l pb:border-gray-300 disabled:pb:opacity-30 pb:cursor-pointer\"\n >\n <Icon size=\"sm\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M12 4.5v15m7.5-7.5h-15\"\n />\n </Icon>\n </BaseNumberField.Increment>\n )}\n\n <BaseNumberField.ScrubArea className=\"pb:absolute pb:inset-0 pb:z-10 pb:cursor-ew-resize pb:opacity-0 pb:hover:opacity-10 pb:transition-opacity pb:bg-primary/5 pb:rounded-md pb:pointer-events-none group-pb:hover:pointer-events-auto\" />\n </BaseNumberField.Group>\n </BaseNumberField.Root>\n </div>\n );\n },\n);\n\nNumberField.displayName = \"NumberField\";\n","import React from \"react\";\nimport { Menu as BaseMenu } from \"@base-ui/react\";\nimport { cn } from \"../utils\";\n\nexport interface DropdownProps {\n trigger: React.ReactNode;\n children: React.ReactNode;\n align?: \"start\" | \"center\" | \"end\";\n className?: string;\n}\n\nexport function Dropdown({\n trigger,\n children,\n align = \"end\",\n className,\n}: DropdownProps) {\n return (\n <BaseMenu.Root>\n {React.isValidElement(trigger) ? (\n <BaseMenu.Trigger render={trigger} />\n ) : (\n <BaseMenu.Trigger>{trigger}</BaseMenu.Trigger>\n )}\n <BaseMenu.Portal>\n <BaseMenu.Positioner align={align} sideOffset={5}>\n <BaseMenu.Popup\n className={cn(\n \"pb:z-50 pb:min-w-[8rem] pb:overflow-hidden pb:rounded-md pb:border pb:bg-white pb:p-1 pb:shadow-md pb:data-[state=open]:animate-in pb:data-[state=closed]:animate-out pb:data-[state=closed]:fade-out-0 pb:data-[state=open]:fade-in-0 pb:data-[state=closed]:zoom-out-95 pb:data-[state=open]:zoom-in-95\",\n className,\n )}\n >\n {children}\n </BaseMenu.Popup>\n </BaseMenu.Positioner>\n </BaseMenu.Portal>\n </BaseMenu.Root>\n );\n}\n\nexport const DropdownItem = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<typeof BaseMenu.Item>\n>(({ className, ...props }, ref) => (\n <BaseMenu.Item\n ref={ref}\n className={cn(\n \"pb:relative pb:flex pb:cursor-default pb:select-none pb:items-center pb:rounded-sm pb:px-2 pb:py-1.5 pb:text-sm pb:outline-none pb:transition-colors pb:data-[highlighted]:bg-gray-100 pb:data-[highlighted]:text-gray-900\",\n className,\n )}\n {...props}\n />\n));\nDropdownItem.displayName = \"DropdownItem\";\n\nexport const DropdownSeparator = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<typeof BaseMenu.Separator>\n>(({ className, ...props }, ref) => (\n <BaseMenu.Separator\n ref={ref}\n className={cn(\"pb:-mx-1 pb:my-1 pb:h-px pb:bg-gray-100\", className)}\n {...props}\n />\n));\nDropdownSeparator.displayName = \"DropdownSeparator\";\n","import React from \"react\";\nimport { Switch as BaseSwitch } from \"@base-ui/react\";\nimport { cn } from \"../utils\";\n\nexport interface SwitchProps extends React.AriaAttributes {\n checked?: boolean;\n defaultChecked?: boolean;\n onChange?: (checked: boolean, event: Event) => void;\n disabled?: boolean;\n className?: string;\n id?: string;\n name?: string;\n}\n\nexport const Switch = React.forwardRef<HTMLButtonElement, SwitchProps>(\n (\n {\n checked,\n defaultChecked,\n onChange,\n disabled,\n className,\n id: externalId,\n ...props\n },\n ref,\n ) => {\n const autoId = React.useId();\n const id = externalId ?? autoId;\n return (\n <div className={cn(\"pb:flex pb:items-center pb:gap-2\", className)}>\n <BaseSwitch.Root\n ref={ref}\n id={id}\n checked={checked}\n defaultChecked={defaultChecked}\n onCheckedChange={(checked, eventDetails) => {\n onChange?.(checked, eventDetails?.event as Event);\n }}\n disabled={disabled}\n className={cn(\n \"pb:relative pb:inline-flex pb:h-6 pb:w-11 pb:flex-shrink-0 pb:cursor-pointer pb:rounded-full pb:border-2 pb:border-transparent pb:transition-colors pb:duration-200 pb:ease-in-out pb:focus:outline-none pb:focus:ring-2 pb:focus:ring-primary pb:focus:ring-offset-2\",\n \"pb:data-[checked]:bg-primary pb:data-[unchecked]:bg-gray-200\",\n disabled && \"pb:opacity-50 pb:cursor-not-allowed\",\n )}\n {...props}\n >\n <BaseSwitch.Thumb\n className={cn(\n \"pb:pointer-events-none pb:inline-block pb:h-5 pb:w-5 pb:transform pb:rounded-full pb:bg-white pb:shadow pb:ring-0 pb:transition pb:duration-200 pb:ease-in-out\",\n \"pb:data-[checked]:translate-x-5 pb:data-[unchecked]:translate-x-0\",\n )}\n />\n </BaseSwitch.Root>\n </div>\n );\n },\n);\n\nSwitch.displayName = \"Switch\";\n","import React from \"react\";\nimport { Tooltip as BaseTooltip } from \"@base-ui/react\";\nimport { cn } from \"../utils\";\nimport { Icon } from \"../foundations/Icon\";\n\nexport interface TooltipProps {\n content: React.ReactNode;\n children: React.ReactNode;\n className?: string;\n delay?: \"normal\" | \"slow\";\n}\n\nexport function Tooltip({\n content,\n children,\n className,\n delay = \"normal\",\n}: TooltipProps) {\n return (\n <BaseTooltip.Provider delay={delay === \"slow\" ? 1000 : 0}>\n <BaseTooltip.Root>\n {React.isValidElement(children) ? (\n <BaseTooltip.Trigger render={children} />\n ) : (\n <BaseTooltip.Trigger>{children}</BaseTooltip.Trigger>\n )}\n <BaseTooltip.Portal>\n <BaseTooltip.Positioner sideOffset={8}>\n <BaseTooltip.Popup\n className={cn(\n \"pb:z-50 pb:rounded pb:shadow-lg pb:bg-white pb:p-2 pb:text-xs pb:text-center pb:whitespace-normal pb:max-w-xs pb:text-gray-900 pb:border pb:border-gray-200\",\n className,\n )}\n >\n {content}\n <BaseTooltip.Arrow className=\"pb:fill-white pb:stroke-gray-200\" />\n </BaseTooltip.Popup>\n </BaseTooltip.Positioner>\n </BaseTooltip.Portal>\n </BaseTooltip.Root>\n </BaseTooltip.Provider>\n );\n}\nexport interface HelperTooltipProps {\n content: React.ReactNode;\n className?: string;\n}\n\nexport function HelperTooltip({ content, className }: HelperTooltipProps) {\n return (\n <Tooltip content={content} className={className}>\n <Icon size=\"md\" className=\"pb:text-gray-500 pb:hover:text-gray-700 pb:cursor-help\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M9.879 7.519c1.171-1.025 3.071-1.025 4.242 0 1.172 1.025 1.172 2.687 0 3.712-.203.179-.43.326-.67.442-.745.361-1.45.999-1.45 1.827v.75M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Zm-9 5.25h.008v.008H12v-.008Z\"\n />\n </Icon>\n </Tooltip>\n );\n}\n","import React from \"react\";\nimport { cn } from \"../utils\";\nimport { HelperTooltip } from \"../feedback/Tooltip\";\n\nexport interface LabelProps extends React.LabelHTMLAttributes<HTMLLabelElement> {\n children: React.ReactNode;\n tooltip?: string;\n className?: string;\n}\n\nexport function Label({ children, tooltip, className, ...props }: LabelProps) {\n return (\n <label\n className={cn(\n \"pb:relative pb:block pb:text-sm pb:font-bold pb:leading-6 pb:text-gray-600 pb:mb-1 pb:group-focus-within:text-gray-800\",\n className,\n )}\n {...props}\n >\n <div className=\"pb:flex pb:items-center pb:gap-1\">\n {children}\n {tooltip && <HelperTooltip content={tooltip} />}\n </div>\n </label>\n );\n}\n","import { ReactNode } from \"react\";\nimport { cn } from \"../utils\";\nimport { Toggle, ToggleGroup } from \"@base-ui/react\";\n\nexport interface TabRadioOption<T extends string> {\n value: T;\n label: ReactNode;\n disabled?: boolean;\n}\n\nexport interface TabRadioProps<T extends string> {\n options: readonly TabRadioOption<T>[];\n value: T | undefined | null;\n onChange: (value: T | undefined) => void;\n className?: string;\n variant?: \"default\" | \"primary\" | \"danger\";\n \"aria-label\"?: string;\n}\n\nconst variantStyles = {\n default:\n \"pb:data-[pressed]:bg-white pb:data-[pressed]:text-gray-900 pb:data-[pressed]:shadow-sm pb:data-[pressed]:ring-1 pb:data-[pressed]:ring-gray-200\",\n primary:\n \"pb:data-[pressed]:bg-primary/20 pb:data-[pressed]:shadow-sm pb:data-[pressed]:ring-1 pb:data-[pressed]:ring-primary\",\n danger:\n \"pb:data-[pressed]:bg-danger/20 pb:data-[pressed]:shadow-sm pb:data-[pressed]:ring-1 pb:data-[pressed]:ring-danger\",\n};\n\nexport function TabRadio<T extends string>({\n options,\n value,\n onChange,\n className,\n variant = \"default\",\n \"aria-label\": ariaLabel,\n}: TabRadioProps<T>) {\n return (\n <ToggleGroup\n value={value ? [value] : []}\n onValueChange={(val) => {\n onChange(val[0] as T | undefined);\n }}\n aria-label={ariaLabel}\n className={cn(\n \"pb:inline-flex pb:p-1 pb:space-x-1 pb:bg-gray-100 pb:rounded-lg pb:border pb:border-gray-200\",\n className,\n )}\n >\n {options.map((option) => {\n return (\n <Toggle\n key={option.value}\n value={option.value}\n disabled={option.disabled}\n className={cn(\n \"pb:relative pb:cursor-pointer pb:px-3 pb:py-1.5 pb:text-sm pb:font-medium pb:rounded-md pb:transition-all pb:flex pb:items-center pb:justify-center pb:outline-none\",\n \"pb:text-gray-600 pb:hover:text-gray-900 pb:hover:bg-gray-200\",\n \"pb:disabled:opacity-50 pb:disabled:cursor-not-allowed pb:disabled:hover:bg-transparent pb:disabled:hover:text-gray-600\",\n variantStyles[variant],\n )}\n >\n {option.label}\n </Toggle>\n );\n })}\n </ToggleGroup>\n );\n}\n","import { Field as BaseField } from \"@base-ui/react\";\nimport React from \"react\";\nimport { cn } from \"../utils\";\nimport { Label } from \"./Label\";\n\nexport interface FieldProps extends BaseField.Root.Props {\n label?: string;\n description?: string;\n error?: string;\n tooltip?: string;\n children: React.ReactNode;\n icon?: React.ReactNode;\n labelPlacement?: \"top\" | \"left\" | \"right\";\n labelWeight?: \"bold\" | \"normal\";\n}\n\n/**\n * A wrapper component that provides a label, description, and error message for form controls.\n * Uses Base UI's Field primitives for accessibility.\n */\nexport const Field = React.forwardRef<HTMLDivElement, FieldProps>(\n (\n {\n label,\n description,\n error,\n tooltip,\n children,\n className,\n icon,\n labelPlacement = \"top\",\n labelWeight = \"bold\",\n ...props\n },\n ref,\n ) => {\n const isHorizontal =\n labelPlacement === \"left\" || labelPlacement === \"right\";\n const labelOnRight = labelPlacement === \"right\";\n\n return (\n <BaseField.Root\n ref={ref}\n className={cn(\n \"pb:flex pb:w-full\",\n isHorizontal ? \"pb:flex-col pb:gap-1\" : \"pb:flex-col pb:gap-1.5\",\n className as string,\n )}\n {...props}\n >\n <div\n className={cn(\n \"pb:flex\",\n isHorizontal ? \"pb:flex-row pb:items-center pb:gap-2\" : \"pb:flex-col pb:gap-1.5\",\n )}\n >\n {labelOnRight && <div className=\"pb:relative\">{children}</div>}\n\n {label && (\n <BaseField.Label\n render={(props) => (\n <Label\n tooltip={tooltip}\n className={cn(\n \"pb:mb-0\",\n labelWeight === \"normal\" && \"pb:font-normal\",\n )}\n {...props}\n >\n <span className=\"pb:flex pb:items-center pb:gap-1\">\n {icon && <span className=\"pb:flex-shrink-0\">{icon}</span>}\n {label}\n </span>\n </Label>\n )}\n />\n )}\n\n {!labelOnRight && <div className=\"pb:relative\">{children}</div>}\n </div>\n\n {description && (\n <BaseField.Description\n className={cn(\n \"pb:text-xs pb:text-gray-500\",\n labelOnRight && \"pb:ml-7\", // Aligns description with label text when child is on left\n )}\n >\n {description}\n </BaseField.Description>\n )}\n\n {error && (\n <BaseField.Error\n className={cn(\n \"pb:text-xs pb:text-red-600 pb:font-medium\",\n labelOnRight && \"pb:ml-7\",\n )}\n >\n {error}\n </BaseField.Error>\n )}\n </BaseField.Root>\n );\n },\n);\n\nField.displayName = \"Field\";\n","import { Input as BaseInput } from \"@base-ui/react\";\nimport React, { ComponentPropsWithoutRef } from \"react\";\nimport { cn } from \"../utils\";\n\nexport type TextAreaProps = React.TextareaHTMLAttributes<HTMLTextAreaElement>;\n\nexport const TextArea = React.forwardRef<HTMLTextAreaElement, TextAreaProps>(\n ({ className, id, ...props }, ref) => {\n return (\n <BaseInput\n render={<textarea />}\n ref={ref as React.Ref<HTMLTextAreaElement>}\n id={id}\n className={cn(\n \"pb:block pb:w-full pb:rounded-md pb:border-0 pb:px-1.5 pb:py-1.5 pb:text-gray-900 pb:ring-1 pb:ring-inset pb:ring-gray-300 pb:placeholder:text-gray-400 pb:focus:ring-2 pb:focus:ring-inset pb:focus:ring-primary pb:sm:text-sm pb:sm:leading-6 pb:bg-primary/10 pb:appearance-none\",\n className,\n )}\n {...(props as ComponentPropsWithoutRef<typeof BaseInput>)}\n />\n );\n },\n);\n\nTextArea.displayName = \"TextArea\";\n","import { Checkbox as BaseCheckbox } from \"@base-ui/react\";\nimport React, { ComponentPropsWithoutRef } from \"react\";\nimport { cn } from \"../utils\";\nimport { Icon } from \"../foundations/Icon\";\n\nexport type CheckboxProps = React.InputHTMLAttributes<HTMLInputElement>;\n\nexport const Checkbox = React.forwardRef<HTMLButtonElement, CheckboxProps>(\n ({ className, id, checked, onChange, ...props }, ref) => {\n return (\n <BaseCheckbox.Root\n ref={ref}\n id={id}\n checked={checked}\n onCheckedChange={(val) => {\n if (onChange) {\n // Mocking a change event since Base UI uses onCheckedChange\n onChange({\n target: { checked: val === true },\n } as React.ChangeEvent<HTMLInputElement>);\n }\n }}\n className={cn(\n \"pb:flex pb:h-5 pb:w-5 pb:shrink-0 pb:items-center pb:justify-center pb:rounded pb:border pb:border-gray-300 pb:bg-white pb:shadow-sm pb:transition-all pb:focus-visible:outline-none pb:focus-visible:ring-2 pb:focus-visible:ring-primary pb:focus-visible:ring-offset-2 pb:disabled:cursor-not-allowed pb:disabled:opacity-50\",\n \"pb:hover:border-primary pb:hover:bg-primary/5\",\n \"pb:data-[state=checked]:bg-primary pb:data-[state=checked]:border-primary pb:data-[state=checked]:text-white\",\n className,\n )}\n {...(props as ComponentPropsWithoutRef<typeof BaseCheckbox.Root>)}\n >\n <BaseCheckbox.Indicator>\n <Icon size=\"sm\" strokeWidth={3} className=\"pb:text-dark-primary\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"m4.5 12.75 6 6 9-13.5\"\n />\n </Icon>\n </BaseCheckbox.Indicator>\n </BaseCheckbox.Root>\n );\n },\n);\n\nCheckbox.displayName = \"Checkbox\";\n","import React from \"react\";\nimport { cn } from \"../utils\";\n\nexport type PeerbotsColor =\n | \"Light Blue\"\n | \"Blue\"\n | \"Green\"\n | \"Red\"\n | \"Purple\"\n | \"Pink\"\n | \"Yellow\"\n | \"Orange\"\n | \"Grey\"\n | \"Black\"\n | \"White\";\n\nexport const PEERBOTS_COLOR_MAP: Record<PeerbotsColor, string> = {\n \"Light Blue\": \"#ABE3FA\",\n Blue: \"#5F94D6\",\n Green: \"#65C77D\",\n Red: \"#E6817E\",\n Purple: \"#9B86F3\",\n Pink: \"#EBA4E4\",\n Yellow: \"#F8EDB1\",\n Orange: \"#E6A575\",\n Grey: \"#CECECE\",\n Black: \"#4D4D4D\",\n White: \"#FDFEFE\",\n};\n\nexport const PEERBOTS_FONT_COLOR_MAP: Record<PeerbotsColor, string> = {\n \"Light Blue\": \"#020307\",\n Blue: \"#020307\",\n Green: \"#020307\",\n Red: \"#020307\",\n Purple: \"#020307\",\n Pink: \"#020307\",\n Yellow: \"#020307\",\n Orange: \"#020307\",\n Grey: \"#020307\",\n Black: \"#FDFEFE\",\n White: \"#020307\",\n};\n\nexport interface PeerbotsColorSelectorProps {\n selectedColor?: PeerbotsColor | string;\n onColorSelect: (color: PeerbotsColor) => void;\n colors?: PeerbotsColor[];\n size?: \"sm\" | \"md\" | \"lg\";\n className?: string;\n ariaLabelPrefix?: string;\n}\n\nexport function PeerbotsColorSelector({\n selectedColor,\n onColorSelect,\n colors = Object.keys(PEERBOTS_COLOR_MAP) as PeerbotsColor[],\n size = \"md\",\n className,\n ariaLabelPrefix = \"Select color\",\n}: PeerbotsColorSelectorProps) {\n const sizeClasses = {\n sm: \"pb:h-6 pb:w-6\",\n md: \"pb:h-8 pb:w-8\",\n lg: \"pb:h-10 pb:w-10\",\n };\n\n return (\n <div\n role=\"radiogroup\"\n aria-label=\"Color selector\"\n className={cn(\n \"pb:inline-flex pb:flex-wrap pb:gap-1 pb:items-center\",\n className,\n )}\n >\n {colors.map((colorName) => {\n const isSelected = selectedColor === colorName;\n return (\n <button\n key={colorName}\n type=\"button\"\n role=\"radio\"\n aria-checked={isSelected}\n aria-label={`${ariaLabelPrefix} ${colorName}`}\n className={cn(\n \"pb:rounded-full pb:cursor-pointer pb:border pb:transition-all pb:duration-150 pb:focus-visible:ring-2 pb:focus-visible:ring-gray-400 pb:focus-visible:outline-none\",\n sizeClasses[size],\n isSelected\n ? \"pb:border-2 pb:border-black pb:scale-110 pb:shadow-sm\"\n : \"pb:border-gray-300 pb:hover:border-gray-500 pb:hover:scale-105\",\n )}\n style={{ background: PEERBOTS_COLOR_MAP[colorName] || colorName }}\n onClick={() => onColorSelect(colorName)}\n />\n );\n })}\n </div>\n );\n}\n","import React, { useState } from \"react\";\nimport { cn } from \"../utils\";\nimport { ComponentColor, ComponentRadius, ComponentSize, FillVariant } from \"../types\";\n\nexport interface ChipOption<T = string> {\n value: T;\n label: React.ReactNode;\n badge?: React.ReactNode;\n disabled?: boolean;\n icon?: React.ReactNode;\n}\n\nexport interface ChipGroupProps<T = string> {\n /** Array of selectable chip options */\n options: ChipOption<T>[];\n /** Controlled single selected value */\n value?: T;\n /** Uncontrolled initial single selected value */\n defaultValue?: T;\n /** Callback fired when single selection changes */\n onChange?: (value: T) => void;\n /** Enable multiple selection mode */\n multiple?: boolean;\n /** Controlled array of selected values (for multi mode) */\n values?: T[];\n /** Uncontrolled initial array of selected values (for multi mode) */\n defaultValues?: T[];\n /** Callback fired when multiple selection changes */\n onMultipleChange?: (values: T[]) => void;\n /** Color theme */\n color?: ComponentColor;\n /** Visual fill style */\n variant?: \"solid\" | \"soft\" | \"outline\";\n /** Size scale */\n size?: ComponentSize;\n /** Border radius scale */\n radius?: ComponentRadius;\n /** Enable horizontal scrollable rail */\n scrollable?: boolean;\n className?: string;\n id?: string;\n name?: string;\n}\n\nconst activeColorStyles: Record<string, Record<string, string>> = {\n solid: {\n primary:\n \"pb:bg-primary pb:text-gray-900 pb:border-primary pb:shadow-sm pb:font-bold\",\n teal: \"pb:bg-peerbots-teal pb:text-gray-900 pb:border-peerbots-teal pb:shadow-sm pb:font-bold\",\n pink: \"pb:bg-rose-700 pb:text-white pb:border-rose-700 pb:shadow-sm pb:font-bold\",\n darkblue:\n \"pb:bg-peerbots-darkblue pb:text-white pb:border-peerbots-darkblue pb:shadow-sm pb:font-bold\",\n neutral:\n \"pb:bg-gray-800 pb:text-white pb:border-gray-800 pb:shadow-sm pb:font-bold\",\n danger: \"pb:bg-red-600 pb:text-white pb:border-red-600 pb:shadow-sm pb:font-bold\",\n },\n soft: {\n primary:\n \"pb:bg-primary/20 pb:text-teal-950 pb:border-primary/40 pb:font-bold\",\n teal: \"pb:bg-peerbots-teal/20 pb:text-teal-950 pb:border-peerbots-teal/40 pb:font-bold\",\n pink: \"pb:bg-peerbots-pink/20 pb:text-rose-950 pb:border-peerbots-pink/40 pb:font-bold\",\n darkblue:\n \"pb:bg-peerbots-darkblue/20 pb:text-peerbots-darkblue pb:border-peerbots-darkblue/40 pb:font-bold\",\n neutral:\n \"pb:bg-gray-200 pb:text-gray-900 pb:border-gray-300 pb:font-bold\",\n danger: \"pb:bg-red-100 pb:text-red-900 pb:border-red-300 pb:font-bold\",\n },\n outline: {\n primary:\n \"pb:bg-primary/10 pb:text-teal-950 pb:border-teal-700 pb:font-bold pb:border-2\",\n teal: \"pb:bg-peerbots-teal/10 pb:text-peerbots-darkteal pb:border-peerbots-darkteal pb:font-bold pb:border-2\",\n pink: \"pb:bg-peerbots-pink/10 pb:text-rose-800 pb:border-rose-700 pb:font-bold pb:border-2\",\n darkblue:\n \"pb:bg-peerbots-darkblue/10 pb:text-peerbots-darkblue pb:border-peerbots-darkblue pb:font-bold pb:border-2\",\n neutral:\n \"pb:bg-gray-100 pb:text-gray-900 pb:border-gray-400 pb:font-bold pb:border-2\",\n danger: \"pb:bg-red-50 pb:text-red-900 pb:border-red-500 pb:font-bold pb:border-2\",\n },\n};\n\nconst inactiveStyles =\n \"pb:bg-white pb:text-gray-700 pb:border-gray-300 pb:hover:border-gray-400 pb:hover:bg-gray-50 pb:hover:text-gray-950\";\n\nconst radiusClasses: Record<ComponentRadius, string> = {\n none: \"pb:rounded-none\",\n sm: \"pb:rounded-md\",\n md: \"pb:rounded-xl\",\n lg: \"pb:rounded-2xl\",\n \"2xl\": \"pb:rounded-2xl\",\n pill: \"pb:rounded-full\",\n};\n\nconst sizeClasses: Record<ComponentSize, { chip: string; text: string; badge: string }> = {\n xs: {\n chip: \"pb:px-2 pb:py-0.5 pb:gap-1\",\n text: \"pb:text-[10px]\",\n badge: \"pb:text-[8px] pb:px-1 pb:py-0.5\",\n },\n sm: {\n chip: \"pb:px-3 pb:py-1 pb:gap-1.5\",\n text: \"pb:text-xs\",\n badge: \"pb:text-[9px] pb:px-1.5 pb:py-0.5\",\n },\n md: {\n chip: \"pb:px-3.5 pb:py-1.5 pb:gap-2\",\n text: \"pb:text-sm\",\n badge: \"pb:text-[10px] pb:px-1.5 pb:py-0.5\",\n },\n lg: {\n chip: \"pb:px-4.5 pb:py-2 pb:gap-2.5\",\n text: \"pb:text-base\",\n badge: \"pb:text-xs pb:px-2 pb:py-0.5\",\n },\n xl: {\n chip: \"pb:px-6 pb:py-2.5 pb:gap-3\",\n text: \"pb:text-lg\",\n badge: \"pb:text-xs pb:px-2.5 pb:py-1\",\n },\n};\n\nexport function ChipGroup<T = string>({\n options,\n value: controlledValue,\n defaultValue,\n onChange,\n multiple = false,\n values: controlledValues,\n defaultValues,\n onMultipleChange,\n color = \"teal\",\n variant = \"soft\",\n size = \"md\",\n radius = \"pill\",\n scrollable = false,\n className,\n id,\n name,\n}: ChipGroupProps<T>) {\n const [internalValue, setInternalValue] = useState<T | undefined>(\n defaultValue !== undefined ? defaultValue : options[0]?.value,\n );\n const [internalValues, setInternalValues] = useState<T[]>(\n defaultValues || [],\n );\n\n const activeValue = controlledValue !== undefined ? controlledValue : internalValue;\n const activeValues = controlledValues !== undefined ? controlledValues : internalValues;\n\n const handleSelect = (optionValue: T, disabled?: boolean) => {\n if (disabled) return;\n\n if (multiple) {\n const exists = activeValues.includes(optionValue);\n const nextValues = exists\n ? activeValues.filter((v) => v !== optionValue)\n : [...activeValues, optionValue];\n\n if (controlledValues === undefined) {\n setInternalValues(nextValues);\n }\n onMultipleChange?.(nextValues);\n } else {\n if (controlledValue === undefined) {\n setInternalValue(optionValue);\n }\n onChange?.(optionValue);\n }\n };\n\n const activeStyle =\n activeColorStyles[variant]?.[color] ||\n activeColorStyles[variant]?.teal ||\n activeColorStyles.soft.teal;\n\n const currentSize = sizeClasses[size] || sizeClasses.md;\n\n return (\n <div\n id={id}\n role={multiple ? \"group\" : \"radiogroup\"}\n aria-label={name}\n className={cn(\n \"pb:flex pb:items-center pb:gap-2 pb:box-border\",\n scrollable\n ? \"pb:overflow-x-auto pb:no-scrollbar pb:py-1 pb:px-0.5\"\n : \"pb:flex-wrap\",\n className,\n )}\n >\n {options.map((option, idx) => {\n const isSelected = multiple\n ? activeValues.includes(option.value)\n : activeValue === option.value;\n\n return (\n <button\n key={idx}\n type=\"button\"\n role={multiple ? \"checkbox\" : \"radio\"}\n aria-checked={isSelected}\n disabled={option.disabled}\n onClick={() => handleSelect(option.value, option.disabled)}\n className={cn(\n \"pb:inline-flex pb:items-center pb:border pb:font-medium pb:transition-all pb:duration-150 pb:cursor-pointer pb:select-none pb:shrink-0 pb:focus:outline-none pb:focus-visible:ring-2 pb:focus-visible:ring-peerbots-teal pb:focus-visible:ring-offset-1\",\n radiusClasses[radius] || radiusClasses.pill,\n currentSize.chip,\n currentSize.text,\n isSelected ? activeStyle : inactiveStyles,\n option.disabled &&\n \"pb:opacity-40 pb:cursor-not-allowed pb:bg-gray-100 pb:text-gray-400 pb:border-gray-200\",\n )}\n >\n {option.icon && (\n <span className=\"pb:shrink-0 pb:flex pb:items-center\">\n {option.icon}\n </span>\n )}\n\n <span>{option.label}</span>\n\n {option.badge && (\n <span\n className={cn(\n \"pb:rounded-full pb:font-bold pb:leading-none pb:tracking-tight\",\n currentSize.badge,\n isSelected\n ? \"pb:bg-black/15 pb:text-current\"\n : \"pb:bg-gray-200 pb:text-gray-800\",\n )}\n >\n {option.badge}\n </span>\n )}\n </button>\n );\n })}\n </div>\n );\n}\n","import React from \"react\";\nimport { cn } from \"../utils\";\nimport { ComponentSize, ComponentRadius, SurfaceVariant } from \"../types\";\n\nexport interface CardProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n /**\n * Surface treatment / fill style.\n * @default \"surface\"\n */\n variant?: SurfaceVariant | \"default\" | \"elevated\";\n /**\n * Background color tinting.\n * @default \"default\"\n */\n color?: \"default\" | \"teal\" | \"pink\";\n /**\n * Card padding scale.\n * @default \"md\"\n */\n padding?: \"none\" | ComponentSize;\n /**\n * Border radius scale.\n * @default \"2xl\"\n */\n radius?: ComponentRadius;\n /** Whether the card shows interactive hover elevation */\n hoverable?: boolean;\n id?: string;\n as?: React.ElementType;\n href?: string;\n target?: string;\n rel?: string;\n}\n\nconst variantStyles: Record<string, string> = {\n surface: \"pb:bg-white pb:border pb:border-gray-200 pb:shadow-md\",\n elevated: \"pb:bg-white pb:border pb:border-gray-200 pb:shadow-md\",\n default: \"pb:bg-white pb:border pb:border-gray-200 pb:shadow-xs\",\n glass:\n \"pb:bg-white/90 pb:backdrop-blur-xl pb:border pb:border-white/40 pb:shadow-xl\",\n flat: \"pb:bg-gray-50/80 pb:border pb:border-gray-200\",\n outline: \"pb:bg-transparent pb:border-2 pb:border-gray-300\",\n};\n\nconst tintStyles: Record<string, string> = {\n default: \"\",\n teal: \"pb:bg-peerbots-teal/5 pb:border pb:border-peerbots-darkteal/30\",\n pink: \"pb:bg-peerbots-pink/5 pb:border pb:border-rose-300\",\n};\n\nconst radiusClasses: Record<ComponentRadius, string> = {\n none: \"pb:rounded-none\",\n sm: \"pb:rounded-md\",\n md: \"pb:rounded-xl\",\n lg: \"pb:rounded-2xl\",\n \"2xl\": \"pb:rounded-2xl\",\n pill: \"pb:rounded-full\",\n};\n\nconst paddingClasses: Record<string, string> = {\n none: \"\",\n xs: \"pb:p-2.5\",\n sm: \"pb:p-4\",\n md: \"pb:p-6 sm:pb:p-8\",\n lg: \"pb:p-8 sm:pb:p-10 md:pb:p-12\",\n xl: \"pb:p-10 sm:pb:p-12 md:pb:p-16\",\n};\n\nexport const Card = React.forwardRef<HTMLElement, CardProps>(\n (\n {\n children,\n className,\n variant = \"surface\",\n color = \"default\",\n padding = \"md\",\n radius = \"2xl\",\n hoverable = true,\n id,\n as: Component = \"div\",\n href,\n target,\n rel,\n ...rest\n },\n ref,\n ) => {\n const baseStyles = \"pb:overflow-hidden pb:transition-all pb:duration-300\";\n\n const hoverStyles = hoverable\n ? \"pb:hover:shadow-lg pb:hover:-translate-y-0.5 pb:hover:border-peerbots-teal/30 pb:focus-within:ring-2 pb:focus-within:ring-peerbots-teal\"\n : \"\";\n\n const isLink = Boolean(href) || Component === \"a\";\n const TargetTag = href ? \"a\" : Component;\n\n return (\n <TargetTag\n id={id}\n href={href}\n target={target}\n rel={rel}\n ref={ref as any}\n className={cn(\n baseStyles,\n radiusClasses[radius] || radiusClasses[\"2xl\"],\n color === \"default\"\n ? variantStyles[variant] || variantStyles.surface\n : tintStyles[color],\n hoverStyles,\n paddingClasses[padding] || paddingClasses.md,\n isLink && \"pb:cursor-pointer pb:block\",\n className,\n )}\n {...(rest as any)}\n >\n {children}\n </TargetTag>\n );\n },\n);\n\nCard.displayName = \"Card\";\n","import React, { useState, useId } from \"react\";\nimport { cn } from \"../utils\";\nimport { Icon } from \"../foundations/Icon\";\nimport { Text } from \"../foundations/Typography\";\n\nexport interface AccordionItem {\n id?: string;\n question?: React.ReactNode;\n title?: React.ReactNode;\n answer?: React.ReactNode;\n content?: React.ReactNode;\n description?: React.ReactNode;\n bodyHtml?: string;\n isOpenDefault?: boolean;\n}\n\nexport interface AccordionProps {\n /** List of accordion items for multi-item list mode */\n items?: AccordionItem[];\n /** Allow multiple items to be opened simultaneously */\n allowMultiple?: boolean;\n /** Visual style variant */\n variant?: \"default\" | \"bordered\" | \"flat\";\n /** Single-item mode: title for the disclosure */\n title?: React.ReactNode;\n /** Single-item mode: content/children for the disclosure */\n children?: React.ReactNode;\n /** Single-item mode: default open state */\n defaultOpen?: boolean;\n /** Controlled open state for single-item mode */\n isOpen?: boolean;\n /** Controlled toggle callback for single-item mode */\n onToggle?: (open: boolean) => void;\n className?: string;\n headerClassName?: string;\n contentClassName?: string;\n}\n\nexport const Accordion: React.FC<AccordionProps> = ({\n items,\n allowMultiple = false,\n variant = \"default\",\n title,\n children,\n defaultOpen = false,\n isOpen: controlledIsOpen,\n onToggle,\n className,\n headerClassName,\n contentClassName,\n}) => {\n const baseId = useId();\n\n // Normalize single-item props vs items array\n const resolvedItems: AccordionItem[] =\n items ||\n (title || children\n ? [\n {\n id: \"single\",\n title,\n content: children,\n isOpenDefault: defaultOpen,\n },\n ]\n : []);\n\n const [openIndices, setOpenIndices] = useState<number[]>(() => {\n const initial: number[] = [];\n resolvedItems.forEach((item, index) => {\n if (item.isOpenDefault || (index === 0 && defaultOpen)) {\n initial.push(index);\n }\n });\n return initial;\n });\n\n const toggleItem = (index: number) => {\n const isCurrentlyOpen =\n controlledIsOpen !== undefined && resolvedItems.length === 1\n ? controlledIsOpen\n : openIndices.includes(index);\n const willBeOpen = !isCurrentlyOpen;\n\n if (onToggle && resolvedItems.length === 1) {\n onToggle(willBeOpen);\n }\n\n if (controlledIsOpen === undefined) {\n if (allowMultiple) {\n setOpenIndices((prev) =>\n prev.includes(index)\n ? prev.filter((i) => i !== index)\n : [...prev, index],\n );\n } else {\n setOpenIndices((prev) => (prev.includes(index) ? [] : [index]));\n }\n }\n };\n\n return (\n <div className={cn(\"pb:w-full pb:space-y-3 pb:box-border\", className)}>\n {resolvedItems.map((item, index) => {\n const isOpen =\n controlledIsOpen !== undefined && resolvedItems.length === 1\n ? controlledIsOpen\n : openIndices.includes(index);\n\n const headingContent =\n item.question || item.title || `Section ${index + 1}`;\n const bodyContent =\n item.content || item.answer || item.description;\n\n const headerId = `${baseId}-header-${index}`;\n const panelId = `${baseId}-panel-${index}`;\n\n return (\n <div\n key={item.id || index}\n className={cn(\n \"pb:w-full pb:rounded-2xl pb:border pb:transition-all pb:duration-300 pb:overflow-hidden pb:box-border\",\n isOpen\n ? \"pb:bg-white pb:border-peerbots-teal/40 pb:shadow-xs\"\n : \"pb:bg-white/80 pb:hover:bg-white pb:border-gray-200/80\",\n variant === \"bordered\" && \"pb:border-2\",\n variant === \"flat\" && \"pb:border-none pb:bg-gray-100\",\n )}\n >\n <div className=\"pb:w-full pb:m-0 pb:p-0\">\n <button\n type=\"button\"\n id={headerId}\n aria-expanded={isOpen}\n aria-controls={panelId}\n onClick={() => toggleItem(index)}\n className={cn(\n \"pb:w-full pb:box-border pb:px-5 pb:py-4 sm:pb:px-6 sm:pb:py-4.5 pb:text-left pb:flex pb:items-center pb:justify-between pb:gap-4 pb:font-bold pb:text-gray-900 pb:hover:text-peerbots-darkteal pb:transition-colors pb:focus:outline-none pb:focus-visible:ring-2 pb:focus-visible:ring-peerbots-teal pb:cursor-pointer\",\n headerClassName,\n )}\n >\n <div className=\"pb:text-base sm:pb:text-lg pb:font-bold pb:leading-snug pb:flex-1 pb:min-w-0\">\n {typeof headingContent === \"string\" ? (\n <span>{headingContent}</span>\n ) : (\n headingContent\n )}\n </div>\n <span\n className={cn(\n \"pb:w-7 pb:h-7 pb:rounded-full pb:flex pb:items-center pb:justify-center pb:flex-shrink-0 pb:transition-transform pb:duration-300 pb:ease-in-out\",\n isOpen\n ? \"pb:bg-peerbots-teal pb:text-white pb:rotate-180\"\n : \"pb:bg-gray-100 pb:text-gray-600\",\n )}\n aria-hidden=\"true\"\n >\n <Icon\n name=\"chevronDownSmall\"\n className=\"pb:w-4 pb:h-4\"\n />\n </span>\n </button>\n </div>\n\n {/* Smooth animated expand / collapse container */}\n <div\n id={panelId}\n role=\"region\"\n aria-labelledby={headerId}\n className={cn(\n \"pb:grid pb:transition-all pb:duration-300 pb:ease-in-out\",\n isOpen\n ? \"pb:grid-rows-[1fr] pb:opacity-100\"\n : \"pb:grid-rows-[0fr] pb:opacity-0\",\n )}\n >\n <div className=\"pb:overflow-hidden\">\n <div\n className={cn(\n \"pb:w-full pb:box-border pb:px-5 pb:pb-5 pb:pt-2 sm:pb:px-6 pb:text-gray-700 pb:leading-relaxed pb:border-t pb:border-gray-100\",\n contentClassName,\n )}\n >\n {item.bodyHtml ? (\n <div\n className=\"pb:text-base pb:leading-relaxed\"\n dangerouslySetInnerHTML={{ __html: item.bodyHtml }}\n />\n ) : typeof bodyContent === \"string\" ? (\n <Text className=\"pb:text-base pb:text-gray-700 pb:leading-relaxed\">\n {bodyContent}\n </Text>\n ) : (\n bodyContent\n )}\n </div>\n </div>\n </div>\n </div>\n );\n })}\n </div>\n );\n};\n","import React, { useState } from \"react\";\nimport { Accordion } from \"./Accordion\";\nimport { ButtonProps } from \"../forms/Button\";\n\nexport interface CollapsibleProps {\n title: React.ReactNode;\n children: React.ReactNode;\n /** The variant of the trigger or panel */\n variant?: ButtonProps[\"variant\"] | \"default\" | \"bordered\" | \"flat\";\n /** The size of the trigger button */\n size?: ButtonProps[\"size\"];\n defaultOpen?: boolean;\n isOpen?: boolean;\n onToggle?: (open: boolean) => void;\n className?: string;\n}\n\nexport function Collapsible({\n title,\n children,\n variant = \"default\",\n defaultOpen = false,\n isOpen: controlledIsOpen,\n onToggle,\n className,\n}: CollapsibleProps) {\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const isOpen = controlledIsOpen !== undefined ? controlledIsOpen : internalOpen;\n\n const handleToggle = (nextOpen: boolean) => {\n if (controlledIsOpen === undefined) {\n setInternalOpen(nextOpen);\n }\n if (onToggle) {\n onToggle(nextOpen);\n }\n };\n\n const accordionVariant =\n variant === \"bordered\" || variant === \"flat\" ? variant : \"default\";\n\n return (\n <Accordion\n variant={accordionVariant}\n title={title}\n isOpen={isOpen}\n onToggle={handleToggle}\n defaultOpen={defaultOpen}\n className={className}\n >\n {children}\n </Accordion>\n );\n}\n","import * as React from \"react\";\nimport { Separator as BaseSeparator } from \"@base-ui/react/separator\";\nimport { cn } from \"../utils\";\n\nexport interface SeparatorProps extends React.ComponentPropsWithoutRef<\n typeof BaseSeparator\n> {\n orientation?: \"horizontal\" | \"vertical\";\n className?: string;\n}\n\nexport const Separator = React.forwardRef<\n React.ElementRef<typeof BaseSeparator>,\n SeparatorProps\n>(({ className, orientation = \"horizontal\", ...props }, ref) => (\n <BaseSeparator\n ref={ref}\n orientation={orientation}\n className={cn(\n \"pb:shrink-0 pb:bg-gray-200\",\n orientation === \"horizontal\" ? \"pb:h-[1px] pb:w-full\" : \"pb:h-full pb:w-[1px]\",\n className,\n )}\n {...props}\n />\n));\n\nSeparator.displayName = BaseSeparator.displayName;\n","import { ReactNode } from \"react\";\nimport { Heading } from \"../foundations/Typography\";\nimport { cn } from \"../utils\";\nimport { Card } from \"./Card\";\nimport { Collapsible } from \"./Collapsible\";\n\nexport interface SettingsPanelProps {\n /** The title of the section */\n title?: ReactNode;\n /** The content of the panel */\n children: ReactNode;\n /** Custom class for the panel wrapper */\n className?: string;\n /** Custom class for the content area */\n contentClassName?: string;\n /** Whether the panel is collapsible */\n collapsible?: boolean;\n /** Default state of the collapsible panel */\n defaultOpen?: boolean;\n /** The heading level for the title */\n headingLevel?: 1 | 2 | 3 | 4 | 5 | 6;\n}\n\n/**\n * A standardized panel for settings sections.\n * Built on top of Card and Collapsible for design system consistency.\n */\nexport function SettingsPanel({\n title,\n children,\n className,\n contentClassName,\n collapsible,\n defaultOpen = true,\n headingLevel = 3,\n}: SettingsPanelProps) {\n const content = (\n <div className={cn(\"pb:flex pb:flex-col pb:gap-3\", contentClassName)}>\n {children}\n </div>\n );\n\n if (collapsible) {\n return (\n <div className={cn(\"pb:w-full pb:mb-3\", className)}>\n <Collapsible\n title={\n typeof title === \"string\" ? (\n <Heading level={headingLevel} className=\"pb:text-gray-800 pb:font-bold\">\n {title}\n </Heading>\n ) : (\n title\n )\n }\n defaultOpen={defaultOpen}\n >\n {content}\n </Collapsible>\n </div>\n );\n }\n\n return (\n <Card\n variant=\"elevated\"\n padding=\"sm\"\n hoverable={false}\n className={cn(\"pb:w-full pb:mb-3 pb:flex pb:flex-col\", className)}\n >\n {title && (\n <div className=\"pb:flex pb:items-center pb:justify-between pb:mb-3 pb:pb-2 pb:border-b pb:border-gray-100 empty:hidden\">\n {typeof title === \"string\" ? (\n <Heading level={headingLevel} className=\"pb:text-gray-800 pb:font-bold\">\n {title}\n </Heading>\n ) : (\n title\n )}\n </div>\n )}\n {content}\n </Card>\n );\n}\n","import React, { useState } from \"react\";\nimport { Icon } from \"../foundations/Icon\";\nimport { cn } from \"../utils\";\n\nexport interface AvatarProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Image source URL. */\n src?: string | null;\n /** Full name of the user, maker, or robot. Used to generate initials and accessible label. */\n name?: string;\n /** Accessible alt text for the avatar image. Defaults to `name` or `\"Avatar\"`. */\n alt?: string;\n /** Size variant. Defaults to `\"md\"`. */\n size?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n /** Shape of the avatar. Defaults to `\"circle\"`. */\n shape?: \"circle\" | \"rounded\";\n /** Custom fallback icon if no image or initials are available. */\n fallbackIcon?: React.ReactNode;\n}\n\nfunction getInitials(name?: string): string {\n if (!name) return \"\";\n const trimmed = name.trim();\n if (!trimmed) return \"\";\n const parts = trimmed.split(/\\s+/);\n if (parts.length === 1) {\n return parts[0].substring(0, 2).toUpperCase();\n }\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n}\n\nconst colorTints = [\n \"pb:bg-teal-100 pb:text-teal-900 pb:border-teal-200\",\n \"pb:bg-blue-100 pb:text-blue-900 pb:border-blue-200\",\n \"pb:bg-purple-100 pb:text-purple-900 pb:border-purple-200\",\n \"pb:bg-amber-100 pb:text-amber-900 pb:border-amber-200\",\n \"pb:bg-rose-100 pb:text-rose-900 pb:border-rose-200\",\n \"pb:bg-emerald-100 pb:text-emerald-900 pb:border-emerald-200\",\n];\n\nfunction getHashColor(name?: string): string {\n if (!name) return colorTints[0];\n let hash = 0;\n for (let i = 0; i < name.length; i++) {\n hash = name.charCodeAt(i) + ((hash << 5) - hash);\n }\n const index = Math.abs(hash) % colorTints.length;\n return colorTints[index];\n}\n\nexport const Avatar = React.forwardRef<HTMLDivElement, AvatarProps>(\n (\n {\n src,\n name,\n alt,\n size = \"md\",\n shape = \"circle\",\n fallbackIcon,\n className,\n ...props\n },\n ref,\n ) => {\n const [imgError, setImgError] = useState(false);\n const initials = getInitials(name);\n const accessibleAlt = alt || name || \"Avatar\";\n\n const sizeStyles = {\n xs: \"pb:w-6 pb:h-6 pb:text-[10px]\",\n sm: \"pb:w-8 pb:h-8 pb:text-xs\",\n md: \"pb:w-10 pb:h-10 pb:text-sm\",\n lg: \"pb:w-12 pb:h-12 pb:text-base\",\n xl: \"pb:w-16 pb:h-16 pb:text-xl\",\n };\n\n const iconSizeStyles = {\n xs: \"pb:w-3.5 pb:h-3.5\",\n sm: \"pb:w-4 pb:h-4\",\n md: \"pb:w-5 pb:h-5\",\n lg: \"pb:w-6 pb:h-6\",\n xl: \"pb:w-8 pb:h-8\",\n };\n\n const shapeStyle = shape === \"circle\" ? \"pb:rounded-full\" : \"pb:rounded-xl\";\n const colorStyle = getHashColor(name);\n\n const hasValidImage = Boolean(src && !imgError);\n\n return (\n <div\n ref={ref}\n role=\"img\"\n aria-label={accessibleAlt}\n className={cn(\n \"pb:relative pb:inline-flex pb:items-center pb:justify-center pb:shrink-0 pb:overflow-hidden pb:border pb:font-bold pb:select-none\",\n sizeStyles[size],\n shapeStyle,\n !hasValidImage && colorStyle,\n className,\n )}\n {...props}\n >\n {hasValidImage ? (\n <img\n src={src!}\n alt={accessibleAlt}\n onError={() => setImgError(true)}\n className=\"pb:w-full pb:h-full pb:object-cover\"\n />\n ) : initials ? (\n <span className=\"pb:tracking-wider\">{initials}</span>\n ) : (\n <span className={cn(\"pb:flex pb:items-center pb:justify-center\", iconSizeStyles[size])}>\n {fallbackIcon || <Icon name=\"userCircle\" className=\"pb:w-full pb:h-full\" />}\n </span>\n )}\n </div>\n );\n },\n);\n\nAvatar.displayName = \"Avatar\";\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { Button } from \"../forms/Button\";\nimport { Icon } from \"../foundations/Icon\";\nimport { cn } from \"../utils\";\n\nexport interface DropzoneProps {\n /** Accepted MIME types or extensions (e.g. `\"image/*\"`, `\"video/*\"`, `\".zip\"`). */\n accept?: string;\n /** Maximum file size allowed in Megabytes (MB). */\n maxSizeMB?: number;\n /** Whether the dropzone is disabled. */\n disabled?: boolean;\n /**\n * Optional controlled URL or data URL of an uploaded file to display in preview mode.\n * If not provided, Dropzone will automatically generate and display a preview for selected images/videos.\n */\n previewUrl?: string | null;\n /** Optional controlled File object. */\n value?: File | null;\n /** Whether to automatically show a preview when an image/video is selected. Default is `true`. */\n showPreview?: boolean;\n /** How to render the preview. Default is `\"auto\"`. */\n previewType?: \"image\" | \"video\" | \"auto\";\n /** Main callout title. Default is `\"Click or drag file to upload\"`. */\n title?: React.ReactNode;\n /** Subtitle or requirement text. Default is `\"Supported formats: PNG, JPG, WEBP, MP4\"`. */\n subtitle?: React.ReactNode;\n /** Custom icon for the dropzone idle state. */\n icon?: React.ReactNode;\n /** Callback fired when a valid file is dropped or selected. */\n onFileSelect?: (file: File) => void;\n /** Callback fired when the active file/preview is cleared. */\n onFileRemove?: () => void;\n /** Callback fired when a file exceeds size limit or validation fails. */\n onError?: (errorMessage: string) => void;\n /** Optional custom CSS classes for the root dropzone container. */\n className?: string;\n id?: string;\n name?: string;\n}\n\nexport const Dropzone = React.forwardRef<HTMLDivElement, DropzoneProps>(\n (\n {\n accept,\n maxSizeMB,\n disabled = false,\n previewUrl: controlledPreviewUrl,\n value,\n showPreview = true,\n previewType = \"auto\",\n title = \"Click or drag file to upload\",\n subtitle,\n icon,\n onFileSelect,\n onFileRemove,\n onError,\n className,\n id,\n name,\n },\n ref,\n ) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const [isDragging, setIsDragging] = useState(false);\n const [internalPreviewUrl, setInternalPreviewUrl] = useState<string | null>(null);\n const [internalPreviewType, setInternalPreviewType] = useState<\"image\" | \"video\">(\"image\");\n const [imageLoadError, setImageLoadError] = useState(false);\n const generatedUrlRef = useRef<string | null>(null);\n\n // Sync value file prop to preview if passed\n useEffect(() => {\n if (value && showPreview) {\n if (generatedUrlRef.current) {\n URL.revokeObjectURL(generatedUrlRef.current);\n }\n const isVid = value.type.startsWith(\"video/\");\n const url = URL.createObjectURL(value);\n generatedUrlRef.current = url;\n setInternalPreviewUrl(url);\n setInternalPreviewType(isVid ? \"video\" : \"image\");\n setImageLoadError(false);\n }\n }, [value, showPreview]);\n\n // Clean up created object URLs on unmount\n useEffect(() => {\n return () => {\n if (generatedUrlRef.current) {\n URL.revokeObjectURL(generatedUrlRef.current);\n }\n };\n }, []);\n\n const activePreviewUrl =\n controlledPreviewUrl !== undefined\n ? controlledPreviewUrl\n : internalPreviewUrl;\n\n const handleFile = (file: File) => {\n if (disabled) return;\n\n if (maxSizeMB) {\n const fileMB = file.size / (1024 * 1024);\n if (fileMB > maxSizeMB) {\n const msg = `File \"${file.name}\" (${fileMB.toFixed(1)} MB) exceeds maximum allowed size of ${maxSizeMB} MB.`;\n onError?.(msg);\n if (inputRef.current) inputRef.current.value = \"\";\n return;\n }\n }\n\n // Generate internal preview if enabled and not strictly controlled\n if (showPreview) {\n const isImg = file.type.startsWith(\"image/\");\n const isVid = file.type.startsWith(\"video/\");\n if (isImg || isVid) {\n if (generatedUrlRef.current) {\n URL.revokeObjectURL(generatedUrlRef.current);\n }\n const url = URL.createObjectURL(file);\n generatedUrlRef.current = url;\n setInternalPreviewUrl(url);\n setInternalPreviewType(isVid ? \"video\" : \"image\");\n setImageLoadError(false);\n }\n }\n\n onFileSelect?.(file);\n };\n\n const handleDragEnter = (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (disabled) return;\n setIsDragging(true);\n };\n\n const handleDragOver = (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (disabled) return;\n setIsDragging(true);\n };\n\n const handleDragLeave = (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(false);\n };\n\n const handleDrop = (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(false);\n if (disabled) return;\n\n const file = e.dataTransfer.files?.[0];\n if (file) {\n handleFile(file);\n }\n };\n\n const handleClick = () => {\n if (disabled) return;\n inputRef.current?.click();\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (file) {\n handleFile(file);\n }\n };\n\n const handleRemove = (e?: React.MouseEvent) => {\n e?.stopPropagation();\n if (generatedUrlRef.current) {\n URL.revokeObjectURL(generatedUrlRef.current);\n generatedUrlRef.current = null;\n }\n setInternalPreviewUrl(null);\n setImageLoadError(false);\n if (inputRef.current) inputRef.current.value = \"\";\n onFileRemove?.();\n };\n\n const isVideo =\n previewType === \"video\" ||\n (previewType === \"auto\" &&\n (internalPreviewType === \"video\" ||\n (activePreviewUrl &&\n (activePreviewUrl.includes(\".mp4\") ||\n activePreviewUrl.includes(\".mov\") ||\n activePreviewUrl.includes(\".webm\") ||\n activePreviewUrl.startsWith(\"data:video/\")))));\n\n const hasPreview = Boolean(showPreview && activePreviewUrl);\n\n return (\n <div\n ref={ref}\n className={cn(\n \"pb:relative pb:w-full pb:rounded-2xl pb:border-2 pb:border-dashed pb:transition-all pb:overflow-hidden\",\n isDragging\n ? \"pb:border-primary pb:bg-primary/10\"\n : \"pb:border-gray-300 pb:hover:border-primary/80 pb:bg-gray-50/70 pb:hover:bg-gray-50\",\n disabled && \"pb:bg-gray-100/90 pb:border-gray-300 pb:cursor-not-allowed pb:hover:border-gray-300\",\n className,\n )}\n onDragEnter={handleDragEnter}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n >\n <input\n ref={inputRef}\n type=\"file\"\n id={id}\n name={name}\n accept={accept}\n disabled={disabled}\n onChange={handleInputChange}\n className=\"pb:hidden\"\n tabIndex={-1}\n />\n\n {/* Dragging Overlay when in preview mode */}\n {isDragging && hasPreview && (\n <div className=\"pb:absolute pb:inset-0 pb:z-20 pb:bg-primary/20 pb:backdrop-blur-xs pb:flex pb:flex-col pb:items-center pb:justify-center pb:gap-2\">\n <div className=\"pb:w-10 pb:h-10 pb:rounded-full pb:bg-primary pb:text-slate-950 pb:flex pb:items-center pb:justify-center pb:shadow-md\">\n <Icon name=\"arrowDownTray\" className=\"pb:w-5 pb:h-5\" />\n </div>\n <p className=\"pb:text-xs pb:font-bold pb:text-gray-900\">Drop file to replace</p>\n </div>\n )}\n\n {hasPreview ? (\n <div className=\"pb:p-4 pb:space-y-3\">\n <div\n onClick={handleClick}\n className=\"pb:relative pb:w-full pb:h-56 pb:overflow-hidden pb:rounded-xl pb:bg-gray-900 pb:flex pb:items-center pb:justify-center pb:cursor-pointer pb:group\"\n title=\"Click to change file\"\n >\n {isVideo ? (\n <video\n src={activePreviewUrl!}\n controls\n className=\"pb:w-full pb:h-full pb:object-contain\"\n />\n ) : imageLoadError ? (\n <div className=\"pb:p-6 pb:text-center pb:text-gray-400 pb:space-y-2\">\n <Icon name=\"xCircle\" className=\"pb:w-8 pb:h-8 pb:mx-auto pb:text-red-400\" />\n <p className=\"pb:text-xs pb:font-medium\">Failed to load image preview</p>\n </div>\n ) : (\n <img\n src={activePreviewUrl!}\n alt=\"File preview\"\n onError={() => setImageLoadError(true)}\n className=\"pb:w-full pb:h-full pb:object-contain pb:group-hover:scale-102 pb:transition-transform\"\n />\n )}\n\n {/* Hover overlay hint */}\n <div className=\"pb:absolute pb:inset-0 pb:bg-black/30 pb:opacity-0 pb:group-hover:opacity-100 pb:transition-opacity pb:flex pb:items-center pb:justify-center pb:pointer-events-none\">\n <span className=\"pb:bg-white/90 pb:text-gray-900 pb:text-xs pb:font-bold pb:px-3 pb:py-1.5 pb:rounded-lg pb:shadow\">\n Click or drag to replace\n </span>\n </div>\n </div>\n\n <div className=\"pb:flex pb:items-center pb:justify-center pb:gap-3\">\n <Button\n type=\"button\"\n color=\"neutral\"\n size=\"sm\"\n onClick={handleClick}\n disabled={disabled}\n leftIcon={<Icon name=\"arrowUpTray\" />}\n >\n Change File\n </Button>\n\n <Button\n type=\"button\"\n variant=\"ghost\"\n color=\"danger\"\n size=\"sm\"\n onClick={handleRemove}\n disabled={disabled}\n leftIcon={<Icon name=\"x\" />}\n >\n Remove\n </Button>\n </div>\n </div>\n ) : (\n <div\n onClick={handleClick}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleClick();\n }\n }}\n className=\"pb:p-8 pb:text-center pb:cursor-pointer pb:focus:outline-none pb:focus:ring-2 pb:focus:ring-primary pb:focus:ring-offset-2 pb:rounded-xl pb:space-y-2.5 pb:flex pb:flex-col pb:items-center pb:justify-center\"\n >\n <div className=\"pb:w-12 pb:h-12 pb:rounded-full pb:bg-primary/20 pb:text-dark-primary pb:flex pb:items-center pb:justify-center\">\n {icon || <Icon name=\"cloudArrowUp\" className=\"pb:w-6 pb:h-6\" />}\n </div>\n\n <div className=\"pb:space-y-1\">\n <p className=\"pb:text-sm pb:font-bold pb:text-gray-900\">{title}</p>\n {subtitle && (\n <p className=\"pb:text-xs pb:text-gray-600\">{subtitle}</p>\n )}\n </div>\n </div>\n )}\n </div>\n );\n },\n);\n\nDropzone.displayName = \"Dropzone\";\n","import React, { useRef, useState } from \"react\";\nimport { Button, ButtonProps } from \"../forms/Button\";\nimport { Icon } from \"../foundations/Icon\";\nimport { cn } from \"../utils\";\n\nexport interface FileUploadProps {\n /** Accepted file types (e.g. `\"image/*\"`, `\".pdf\"`, `\"audio/*\"`). */\n accept?: string;\n /** Whether multiple files can be selected. */\n multiple?: boolean;\n /** Whether the input is disabled. */\n disabled?: boolean;\n /** Maximum allowable file size in bytes. */\n maxSizeBytes?: number;\n /** Text displayed inside the trigger button. Default is `\"Choose File\"`. */\n buttonText?: React.ReactNode;\n /** Button style variant. Default is `\"secondary\"`. */\n buttonVariant?: ButtonProps[\"variant\"];\n /** Button size. Default is `\"md\"`. */\n buttonSize?: ButtonProps[\"size\"];\n /** Icon shown inside the button. Default is `<Icon name=\"arrowUpTray\" />`. */\n buttonIcon?: React.ReactNode;\n /** Text shown when no file has been chosen. Default is `\"No file chosen\"`. */\n placeholder?: string;\n /** Whether to show a clear/remove button when files are selected. Default is `true`. */\n clearable?: boolean;\n /** Controlled file(s) value. */\n value?: File | File[] | null;\n /** Callback fired when file selection changes. */\n onChange?: (files: File | File[] | null) => void;\n /** Callback fired when a file exceeds size limit or validation fails. */\n onError?: (errorMessage: string) => void;\n /** Optional custom CSS classes. */\n className?: string;\n id?: string;\n name?: string;\n}\n\nfunction formatBytes(bytes: number, decimals = 1): string {\n if (bytes === 0) return \"0 Bytes\";\n const k = 1024;\n const dm = decimals < 0 ? 0 : decimals;\n const sizes = [\"Bytes\", \"KB\", \"MB\", \"GB\"];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + \" \" + sizes[i];\n}\n\nexport const FileUpload = React.forwardRef<HTMLDivElement, FileUploadProps>(\n (\n {\n accept,\n multiple = false,\n disabled = false,\n maxSizeBytes,\n buttonText = \"Choose File\",\n buttonVariant = \"secondary\",\n buttonSize = \"md\",\n buttonIcon = <Icon name=\"arrowUpTray\" />,\n placeholder = \"No file chosen\",\n clearable = true,\n value,\n onChange,\n onError,\n className,\n id,\n name,\n },\n ref,\n ) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const [internalFiles, setInternalFiles] = useState<File[]>([]);\n\n const activeFiles = value\n ? Array.isArray(value)\n ? value\n : [value]\n : internalFiles;\n\n const handleButtonClick = () => {\n if (disabled) return;\n inputRef.current?.click();\n };\n\n const handleFileChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const selected = e.target.files ? Array.from(e.target.files) : [];\n if (selected.length === 0) return;\n\n // Validate file sizes\n if (maxSizeBytes) {\n const oversized = selected.find((f) => f.size > maxSizeBytes);\n if (oversized) {\n const msg = `File \"${oversized.name}\" exceeds maximum allowed size of ${formatBytes(maxSizeBytes)}.`;\n onError?.(msg);\n if (inputRef.current) inputRef.current.value = \"\";\n return;\n }\n }\n\n setInternalFiles(selected);\n if (onChange) {\n onChange(multiple ? selected : selected[0] || null);\n }\n };\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n setInternalFiles([]);\n if (inputRef.current) inputRef.current.value = \"\";\n if (onChange) {\n onChange(multiple ? [] : null);\n }\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n \"pb:inline-flex pb:items-center pb:gap-3 pb:w-full pb:max-w-md\",\n disabled && \"pb:cursor-not-allowed\",\n className,\n )}\n >\n <input\n ref={inputRef}\n type=\"file\"\n id={id}\n name={name}\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n onChange={handleFileChange}\n className=\"pb:hidden\"\n tabIndex={-1}\n />\n\n <Button\n type=\"button\"\n variant={buttonVariant}\n size={buttonSize}\n disabled={disabled}\n leftIcon={buttonIcon}\n onClick={handleButtonClick}\n >\n {buttonText}\n </Button>\n\n <div className=\"pb:flex-1 pb:min-w-0 pb:flex pb:items-center pb:justify-between pb:gap-2 pb:py-1 pb:px-2 pb:bg-gray-50 pb:border pb:border-gray-200 pb:rounded-md pb:text-xs\">\n {activeFiles.length > 0 ? (\n <span className=\"pb:font-medium pb:text-gray-800 pb:truncate\">\n {activeFiles.length === 1\n ? `${activeFiles[0].name} (${formatBytes(activeFiles[0].size)})`\n : `${activeFiles.length} files selected`}\n </span>\n ) : (\n <span className=\"pb:text-gray-600 pb:truncate\">{placeholder}</span>\n )}\n\n {clearable && activeFiles.length > 0 && !disabled && (\n <button\n type=\"button\"\n onClick={handleClear}\n className=\"pb:p-0.5 pb:text-gray-400 pb:hover:text-gray-700 pb:rounded pb:hover:bg-gray-200 pb:cursor-pointer pb:transition-colors\"\n title=\"Clear selection\"\n aria-label=\"Clear selected file\"\n >\n <Icon name=\"x\" className=\"pb:w-3.5 pb:h-3.5\" />\n </button>\n )}\n </div>\n </div>\n );\n },\n);\n\nFileUpload.displayName = \"FileUpload\";\n","import React from \"react\";\nimport { Dialog as BaseDialog } from \"@base-ui/react\";\nimport { cn } from \"../utils\";\n\nexport interface DialogProps {\n open?: boolean;\n onOpenChange?: (open: boolean, event?: Event) => void;\n trigger?: React.ReactNode;\n children: React.ReactNode;\n className?: string;\n}\n\nexport function Dialog({\n open,\n onOpenChange,\n trigger,\n children,\n className,\n}: DialogProps) {\n return (\n <BaseDialog.Root\n open={open}\n onOpenChange={(open, eventDetails) => {\n onOpenChange?.(open, eventDetails?.event as Event | undefined);\n }}\n >\n {trigger &&\n (React.isValidElement(trigger) ? (\n <BaseDialog.Trigger render={trigger as React.ReactElement} />\n ) : (\n <BaseDialog.Trigger>{trigger}</BaseDialog.Trigger>\n ))}\n <BaseDialog.Portal>\n <BaseDialog.Backdrop className=\"pb:fixed pb:inset-0 pb:z-50 pb:bg-black/40 pb:transition-all pb:duration-200 data-[state=open]:pb:animate-in data-[state=closed]:pb:animate-out pb:data-[state=closed]:fade-out-0 pb:data-[state=open]:fade-in-0\" />\n <BaseDialog.Popup\n className={cn(\n \"pb:fixed pb:left-[50%] pb:top-[50%] pb:z-50 pb:grid pb:w-auto pb:max-w-[90vw] pb:translate-x-[-50%] pb:translate-y-[-50%] pb:gap-4 pb:border pb:border-gray-100 pb:bg-white pb:p-6 pb:shadow-2xl pb:duration-200 data-[state=open]:pb:animate-in data-[state=closed]:pb:animate-out data-[state=closed]:pb:fade-out-0 data-[state=open]:pb:fade-in-0 data-[state=closed]:pb:zoom-out-95 data-[state=open]:pb:zoom-in-95 data-[state=closed]:pb:slide-out-to-left-1/2 data-[state=closed]:pb:slide-out-to-top-[48%] data-[state=open]:pb:slide-in-from-left-1/2 data-[state=open]:pb:slide-in-from-top-[48%] pb:rounded-2xl\",\n className,\n )}\n >\n {children}\n </BaseDialog.Popup>\n </BaseDialog.Portal>\n </BaseDialog.Root>\n );\n}\n\nexport const DialogTitle = (\n props: React.ComponentProps<typeof BaseDialog.Title>,\n) => <BaseDialog.Title {...props} />;\nexport const DialogDescription = (\n props: React.ComponentProps<typeof BaseDialog.Description>,\n) => <BaseDialog.Description {...props} />;\nexport const DialogClose = (\n props: React.ComponentProps<typeof BaseDialog.Close>,\n) => <BaseDialog.Close {...props} />;\n","import React from \"react\";\nimport { Popover as BasePopover } from \"@base-ui/react\";\nimport { cn } from \"../utils\";\nimport { Icon } from \"../foundations/Icon\";\nimport { SurfaceVariant } from \"../types\";\n\nexport interface PopoverProps {\n /** The element that triggers the popover when clicked */\n trigger: React.ReactNode;\n /** Popover body content */\n children: React.ReactNode;\n /** Optional header title */\n title?: React.ReactNode;\n /** Controlled open state */\n open?: boolean;\n /** Initial open state in uncontrolled mode */\n defaultOpen?: boolean;\n /** Callback fired when open state changes */\n onOpenChange?: (open: boolean) => void;\n /** Side where the popover appears */\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n /** Alignment relative to the trigger */\n align?: \"start\" | \"center\" | \"end\";\n /** Distance from the trigger in pixels */\n sideOffset?: number;\n /** Surface visual variant */\n variant?: SurfaceVariant | \"default\";\n /** Whether to show a close button in the header */\n showCloseButton?: boolean;\n /** Whether to display a pointing arrow */\n showArrow?: boolean;\n className?: string;\n}\n\nconst variantStyles: Record<string, string> = {\n surface: \"pb:bg-white pb:border pb:border-gray-100 pb:shadow-xl\",\n default: \"pb:bg-white pb:border pb:border-gray-100 pb:shadow-xl\",\n glass:\n \"pb:bg-white/90 pb:backdrop-blur-2xl pb:border pb:border-white/50 pb:shadow-2xl\",\n outline: \"pb:bg-white pb:border-2 pb:border-gray-300 pb:shadow-md\",\n flat: \"pb:bg-gray-50 pb:border pb:border-gray-200 pb:shadow-lg\",\n};\n\nexport function Popover({\n trigger,\n children,\n title,\n open,\n defaultOpen,\n onOpenChange,\n side = \"bottom\",\n align = \"center\",\n sideOffset = 8,\n variant = \"surface\",\n showCloseButton = true,\n showArrow = true,\n className,\n}: PopoverProps) {\n return (\n <BasePopover.Root\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={(nextOpen) => {\n onOpenChange?.(nextOpen);\n }}\n >\n {React.isValidElement(trigger) ? (\n <BasePopover.Trigger render={trigger as React.ReactElement} />\n ) : (\n <BasePopover.Trigger>{trigger}</BasePopover.Trigger>\n )}\n\n <BasePopover.Portal>\n <BasePopover.Positioner\n side={side}\n align={align}\n sideOffset={sideOffset}\n >\n <BasePopover.Popup\n className={cn(\n \"pb:z-50 pb:rounded-2xl pb:p-4 pb:min-w-[240px] pb:max-w-sm pb:text-gray-900 pb:transition-all pb:duration-150 data-[state=open]:pb:animate-in data-[state=closed]:pb:animate-out data-[state=closed]:pb:fade-out-0 data-[state=open]:pb:fade-in-0 data-[state=closed]:pb:zoom-out-95 data-[state=open]:pb:zoom-in-95\",\n variantStyles[variant] || variantStyles.surface,\n className,\n )}\n >\n {(title || showCloseButton) && (\n <div className=\"pb:flex pb:items-center pb:justify-between pb:gap-3 pb:border-b pb:border-gray-100 pb:pb-2.5 pb:mb-3\">\n {title ? (\n <div className=\"pb:text-xs pb:font-bold pb:text-gray-900 pb:uppercase pb:tracking-wider\">\n {title}\n </div>\n ) : (\n <div />\n )}\n\n {showCloseButton && (\n <BasePopover.Close\n aria-label=\"Close popover\"\n className=\"pb:p-1 pb:rounded-lg pb:text-gray-400 pb:hover:text-gray-700 pb:hover:bg-gray-100 pb:transition-colors pb:cursor-pointer\"\n >\n <Icon name=\"xCircle\" className=\"pb:w-4 pb:h-4\" />\n </BasePopover.Close>\n )}\n </div>\n )}\n\n <div className=\"pb:text-sm\">{children}</div>\n\n {showArrow && (\n <BasePopover.Arrow\n className={cn(\n variant === \"glass\"\n ? \"pb:fill-white/90 pb:stroke-white/50\"\n : \"pb:fill-white pb:stroke-gray-100\",\n )}\n />\n )}\n </BasePopover.Popup>\n </BasePopover.Positioner>\n </BasePopover.Portal>\n </BasePopover.Root>\n );\n}\n\nexport const PopoverTitle = (\n props: React.ComponentProps<typeof BasePopover.Title>,\n) => <BasePopover.Title {...props} />;\n\nexport const PopoverDescription = (\n props: React.ComponentProps<typeof BasePopover.Description>,\n) => <BasePopover.Description {...props} />;\n\nexport const PopoverClose = (\n props: React.ComponentProps<typeof BasePopover.Close>,\n) => <BasePopover.Close {...props} />;\n","import { HTMLAttributes } from \"react\";\nimport { cn } from \"../utils\";\n\nexport interface SkeletonProps extends HTMLAttributes<HTMLDivElement> {\n className?: string;\n}\n\nexport function Skeleton({ className, ...props }: SkeletonProps) {\n return (\n <div\n className={cn(\"pb:animate-pulse pb:rounded-md pb:bg-gray-200\", className)}\n {...props}\n />\n );\n}\n","import React, { useState } from \"react\";\nimport { Button } from \"../forms/Button\";\nimport { Icon } from \"../foundations/Icon\";\nimport { cn } from \"../utils\";\nimport { ComponentRadius, FillVariant } from \"../types\";\n\nexport type AlertLevel = \"Error\" | \"Warning\" | \"Success\" | \"Info\";\nexport type AlertColor = \"danger\" | \"warning\" | \"success\" | \"info\" | \"neutral\";\n\nexport interface AlertAction {\n name: string;\n callback: () => void;\n}\n\nexport interface AlertUIProps {\n /** Alert semantic color */\n color?: AlertColor;\n /** Legacy level prop for backward compatibility */\n level?: AlertLevel;\n /** Visual style variant */\n variant?: \"soft\" | \"outline\" | \"solid\";\n /** Optional alert title */\n title?: React.ReactNode;\n /** Alert message body */\n message?: React.ReactNode;\n /** Children as alternative to message */\n children?: React.ReactNode;\n /** Optional action button */\n action?: AlertAction;\n /** Callback fired when alert is dismissed */\n onClose?: () => void;\n /** Border radius scale */\n radius?: ComponentRadius;\n className?: string;\n}\n\nconst levelColorMap: Record<AlertLevel, AlertColor> = {\n Error: \"danger\",\n Warning: \"warning\",\n Success: \"success\",\n Info: \"info\",\n};\n\nconst iconMap: Record<AlertColor, { name: any; colorClass: string }> = {\n danger: { name: \"exclamationCircle\", colorClass: \"pb:text-red-700\" },\n warning: { name: \"exclamationTriangle\", colorClass: \"pb:text-amber-800\" },\n success: { name: \"checkCircle\", colorClass: \"pb:text-emerald-800\" },\n info: { name: \"megaphone\", colorClass: \"pb:text-teal-800\" },\n neutral: { name: \"questionMarkCircle\", colorClass: \"pb:text-gray-700\" },\n};\n\nconst variantColorClasses: Record<string, Record<AlertColor, string>> = {\n soft: {\n danger: \"pb:bg-red-50 pb:border-red-200 pb:text-red-900\",\n warning: \"pb:bg-amber-50 pb:border-amber-200 pb:text-amber-900\",\n success: \"pb:bg-emerald-50 pb:border-emerald-200 pb:text-emerald-900\",\n info: \"pb:bg-teal-50 pb:border-teal-200 pb:text-teal-900\",\n neutral: \"pb:bg-gray-50 pb:border-gray-200 pb:text-gray-900\",\n },\n outline: {\n danger: \"pb:bg-red-50/40 pb:border-2 pb:border-red-400 pb:text-red-950\",\n warning: \"pb:bg-amber-50/40 pb:border-2 pb:border-amber-400 pb:text-amber-950\",\n success: \"pb:bg-emerald-50/40 pb:border-2 pb:border-emerald-500 pb:text-emerald-950\",\n info: \"pb:bg-teal-50/40 pb:border-2 pb:border-teal-500 pb:text-teal-950\",\n neutral: \"pb:bg-gray-50/40 pb:border-2 pb:border-gray-300 pb:text-gray-950\",\n },\n solid: {\n danger: \"pb:bg-red-700 pb:border-transparent pb:text-white\",\n warning: \"pb:bg-amber-300 pb:border-transparent pb:text-gray-950 pb:font-medium\",\n success: \"pb:bg-emerald-700 pb:border-transparent pb:text-white\",\n info: \"pb:bg-teal-700 pb:border-transparent pb:text-white\",\n neutral: \"pb:bg-gray-900 pb:border-transparent pb:text-white\",\n },\n};\n\nconst radiusClasses: Record<ComponentRadius, string> = {\n none: \"pb:rounded-none\",\n sm: \"pb:rounded-md\",\n md: \"pb:rounded-xl\",\n lg: \"pb:rounded-2xl\",\n \"2xl\": \"pb:rounded-2xl\",\n pill: \"pb:rounded-full\",\n};\n\nexport function Alert({\n color,\n level,\n variant = \"soft\",\n title,\n message,\n children,\n action,\n onClose,\n radius = \"2xl\",\n className,\n}: AlertUIProps) {\n const [visible, setVisible] = useState(true);\n\n if (!visible) return null;\n\n const resolvedColor: AlertColor =\n color || (level ? levelColorMap[level] : \"info\") || \"info\";\n\n const { name: iconName, colorClass } = iconMap[resolvedColor];\n const colorStyle = variantColorClasses[variant]?.[resolvedColor] || variantColorClasses.soft.info;\n\n const handleDismiss = () => {\n setVisible(false);\n onClose?.();\n };\n\n const body = children || message;\n\n return (\n <div\n role=\"alert\"\n className={cn(\n \"pb:flex pb:w-full pb:items-start pb:gap-3.5 pb:p-4.5 pb:border pb:shadow-xs pb:transition-all pb:duration-200\",\n radiusClasses[radius] || radiusClasses[\"2xl\"],\n colorStyle,\n className,\n )}\n >\n <div className=\"pb:shrink-0 pb:pt-0.5\">\n <Icon\n name={iconName}\n className={cn(\n \"pb:w-5 pb:h-5\",\n variant === \"solid\" ? \"pb:text-current\" : colorClass,\n )}\n />\n </div>\n\n <div className=\"pb:flex-1 pb:min-w-0 pb:text-sm pb:leading-relaxed\">\n {title && (\n <div className=\"pb:font-bold pb:text-base pb:mb-1 pb:leading-snug\">\n {title}\n </div>\n )}\n <div className={cn(title && \"pb:opacity-90\")}>{body}</div>\n </div>\n\n {action && (\n <Button\n size=\"sm\"\n variant={variant === \"solid\" ? \"outline\" : \"solid\"}\n color={resolvedColor === \"danger\" ? \"danger\" : \"neutral\"}\n onClick={() => {\n action.callback();\n handleDismiss();\n }}\n className=\"pb:shrink-0 pb:self-center\"\n >\n {action.name}\n </Button>\n )}\n\n <button\n type=\"button\"\n onClick={handleDismiss}\n aria-label=\"Dismiss alert\"\n className=\"pb:shrink-0 pb:p-1 pb:rounded-lg pb:opacity-70 pb:hover:opacity-100 pb:transition-opacity pb:cursor-pointer pb:self-start pb:-mr-1\"\n >\n <Icon name=\"xCircle\" className=\"pb:w-5 pb:h-5\" />\n </button>\n </div>\n );\n}\n","import React from \"react\";\nimport { Button } from \"../forms/Button\";\nimport { Icon, IconProps } from \"../foundations/Icon\";\nimport { Heading, Text } from \"../foundations/Typography\";\nimport { cn } from \"../utils\";\nimport { ComponentColor, FillVariant } from \"../types\";\n\nexport interface EmptyStateAction {\n label: React.ReactNode;\n onClick?: () => void;\n render?: React.ReactElement;\n variant?: FillVariant;\n color?: ComponentColor;\n icon?: IconProps[\"name\"] | React.ReactNode;\n}\n\nexport interface EmptyStateProps {\n title: React.ReactNode;\n description?: React.ReactNode;\n icon?: IconProps[\"name\"] | React.ReactNode;\n primaryAction?: EmptyStateAction;\n secondaryAction?: EmptyStateAction;\n children?: React.ReactNode;\n className?: string;\n}\n\nexport function EmptyState({\n title,\n description,\n icon,\n primaryAction,\n secondaryAction,\n children,\n className,\n}: EmptyStateProps) {\n const renderIcon = () => {\n if (!icon) return null;\n if (typeof icon === \"string\") {\n return (\n <Icon\n name={icon as IconProps[\"name\"]}\n className=\"pb:w-16 pb:h-16 pb:mx-auto pb:text-gray-400 pb:mb-4\"\n />\n );\n }\n return <div className=\"pb:flex pb:justify-center pb:mb-4\">{icon}</div>;\n };\n\n return (\n <div\n className={cn(\n \"pb:flex pb:flex-col pb:items-center pb:justify-center pb:p-8 pb:text-center pb:rounded-2xl pb:border pb:border-dashed pb:border-gray-200 pb:bg-white/50\",\n className,\n )}\n >\n {renderIcon()}\n\n {typeof title === \"string\" ? (\n <Heading\n level={3}\n className=\"pb:font-bold pb:text-gray-800 pb:mb-2\"\n >\n {title}\n </Heading>\n ) : (\n title\n )}\n\n {description &&\n (typeof description === \"string\" ? (\n <Text\n color=\"muted\"\n className=\"pb:max-w-md pb:mb-6\"\n >\n {description}\n </Text>\n ) : (\n <div className=\"pb:text-gray-600 pb:max-w-md pb:mb-6\">{description}</div>\n ))}\n\n {(primaryAction || secondaryAction) && (\n <div className=\"pb:flex pb:flex-wrap pb:gap-3 pb:justify-center pb:items-center\">\n {primaryAction && (\n <Button\n variant={primaryAction.variant || \"solid\"}\n color={primaryAction.color || \"primary\"}\n onClick={primaryAction.onClick}\n render={primaryAction.render}\n leftIcon={\n typeof primaryAction.icon === \"string\" ? (\n <Icon name={primaryAction.icon as IconProps[\"name\"]} />\n ) : (\n primaryAction.icon\n )\n }\n >\n {primaryAction.label}\n </Button>\n )}\n {secondaryAction && (\n <Button\n variant={secondaryAction.variant || \"solid\"}\n color={secondaryAction.color || \"neutral\"}\n onClick={secondaryAction.onClick}\n render={secondaryAction.render}\n leftIcon={\n typeof secondaryAction.icon === \"string\" ? (\n <Icon name={secondaryAction.icon as IconProps[\"name\"]} />\n ) : (\n secondaryAction.icon\n )\n }\n >\n {secondaryAction.label}\n </Button>\n )}\n </div>\n )}\n\n {children}\n </div>\n );\n}\n","import React from \"react\";\nimport { cn } from \"../utils\";\nimport { BrandColor, ComponentSize } from \"../types\";\n\nexport interface SpinnerProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Size variant of the spinner */\n size?: ComponentSize;\n /** Color theme of the spinner */\n color?: BrandColor | \"primary\" | \"neutral\";\n /** Screen-reader accessible label */\n label?: string;\n}\n\nconst sizeClasses: Record<ComponentSize, string> = {\n xs: \"pb:w-3.5 pb:h-3.5 pb:border-[1.5px]\",\n sm: \"pb:w-5 pb:h-5 pb:border-2\",\n md: \"pb:w-8 pb:h-8 pb:border-[2.5px]\",\n lg: \"pb:w-12 pb:h-12 pb:border-4\",\n xl: \"pb:w-16 pb:h-16 pb:border-4\",\n};\n\nconst colorClasses: Record<string, string> = {\n primary: \"pb:border-primary pb:border-t-transparent\",\n teal: \"pb:border-peerbots-teal pb:border-t-transparent\",\n pink: \"pb:border-peerbots-pink pb:border-t-transparent\",\n darkteal: \"pb:border-peerbots-darkteal pb:border-t-transparent\",\n darkblue: \"pb:border-peerbots-darkblue pb:border-t-transparent\",\n neutral: \"pb:border-gray-500 pb:border-t-transparent\",\n white: \"pb:border-white pb:border-t-transparent\",\n};\n\nexport const Spinner = React.forwardRef<HTMLDivElement, SpinnerProps>(\n (\n {\n size = \"md\",\n color = \"teal\",\n label = \"Loading...\",\n className,\n ...props\n },\n ref,\n ) => {\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-label={label}\n className={cn(\n \"pb:inline-block pb:rounded-full pb:animate-spin pb:shrink-0\",\n sizeClasses[size] || sizeClasses.md,\n colorClasses[color] || colorClasses.teal,\n className,\n )}\n {...props}\n >\n <span className=\"pb:sr-only\">{label}</span>\n </div>\n );\n },\n);\n\nSpinner.displayName = \"Spinner\";\n","import { useFormStatus } from \"react-dom\";\nimport { Button, Input, Heading, Text, Icon, Field } from \"..\";\nimport React from \"react\";\n\nfunction SubmitButton({ label }: { label: string }) {\n const { pending } = useFormStatus();\n return (\n <Button\n type=\"submit\"\n color=\"primary\"\n isLoading={pending}\n disabled={pending}\n >\n {label}\n </Button>\n );\n}\n\nexport type AuthFormMode = \"signing up\" | \"signing in\" | \"resetting password\";\n\nexport interface AuthFormUIProps {\n mode: AuthFormMode;\n onModeChange: (mode: AuthFormMode) => void;\n formAction: (payload: FormData) => void;\n actionState: { error: string; message: string };\n onGoogleSignIn?: () => void;\n title?: React.ReactNode;\n description?: React.ReactNode;\n}\n\nexport function AuthFormUI({\n mode,\n onModeChange,\n formAction,\n actionState,\n onGoogleSignIn,\n title,\n description,\n}: AuthFormUIProps) {\n const defaultTitle =\n mode === \"signing up\"\n ? \"Sign up\"\n : mode === \"signing in\"\n ? \"Sign In\"\n : \"Reset Password\";\n\n return (\n <div className=\"pb:text-left pb:overflow-hidden\">\n <Heading level={2} className=\"pb:text-center pb:mb-2\">\n {title || defaultTitle}\n </Heading>\n\n <form className=\"pb:md:m-10 pb:sm:m-4 pb:space-y-4\" action={formAction}>\n {description && (\n <Text className=\"pb:text-center pb:mb-6\" color=\"muted\">\n {description}\n </Text>\n )}\n\n {mode === \"resetting password\" && (\n <Text className=\"pb:text-center pb:font-bold pb:text-dark-primary\">\n {actionState.message}\n </Text>\n )}\n <Text className=\"pb:text-center\" color=\"error\">\n {actionState.error}\n </Text>\n\n <div className=\"pb:space-y-4\">\n <Field\n id=\"email\"\n label=\"Email\"\n error={\n actionState.error && actionState.error.includes(\"email\")\n ? actionState.error\n : \"\"\n }\n >\n <Input\n name=\"email\"\n type=\"email\"\n required\n placeholder=\"Email\"\n leftIcon={<Icon name=\"envelope\" />}\n />\n </Field>\n\n {mode !== \"resetting password\" && (\n <Field\n id=\"password\"\n label=\"Password\"\n error={\n actionState.error && actionState.error.includes(\"password\")\n ? actionState.error\n : \"\"\n }\n >\n <Input\n name=\"password\"\n type=\"password\"\n required\n placeholder=\"Password\"\n leftIcon={<Icon name=\"lockClosed\" />}\n />\n </Field>\n )}\n </div>\n\n <div className=\"pb:text-center pb:mt-6 pb:space-y-4\">\n {mode === \"signing up\" && <SubmitButton label=\"Sign Up\" />}\n {mode === \"signing in\" && <SubmitButton label=\"Sign In\" />}\n {mode === \"resetting password\" && (\n <SubmitButton label=\"Reset Password\" />\n )}\n\n <div className=\"pb:text-center pb:text-sm pb:text-gray-500\">\n {mode === \"signing up\" && (\n <Text size=\"sm\">\n Already have an account?{\" \"}\n <Button\n variant=\"link\"\n color=\"teal\"\n size=\"sm\"\n onClick={() => onModeChange(\"signing in\")}\n >\n Sign in\n </Button>\n </Text>\n )}\n {mode === \"signing in\" && (\n <div className=\"pb:flex pb:flex-col pb:gap-2\">\n <Text size=\"sm\">\n Forgot your password?{\" \"}\n <Button\n variant=\"link\"\n color=\"teal\"\n size=\"sm\"\n onClick={() => onModeChange(\"resetting password\")}\n >\n Reset password.\n </Button>\n </Text>\n <div className=\"pb:relative\">\n <div className=\"pb:absolute pb:inset-0 pb:flex pb:items-center\">\n <div className=\"pb:w-full pb:border-t pb:border-gray-300\"></div>\n </div>\n <div className=\"pb:relative pb:flex pb:justify-center pb:text-sm\">\n <span className=\"pb:px-2 pb:bg-white pb:text-gray-700\">or</span>\n </div>\n </div>\n <Text size=\"sm\">\n Don&apos;t have an account?{\" \"}\n <Button\n variant=\"link\"\n color=\"teal\"\n size=\"sm\"\n onClick={() => onModeChange(\"signing up\")}\n >\n Sign up\n </Button>\n </Text>\n </div>\n )}\n {mode === \"resetting password\" && (\n <div className=\"pb:flex pb:flex-col pb:gap-2\">\n <Text size=\"sm\">\n Don&apos;t have an account?{\" \"}\n <Button\n variant=\"link\"\n color=\"teal\"\n size=\"sm\"\n onClick={() => onModeChange(\"signing up\")}\n >\n Sign up\n </Button>\n </Text>\n <div className=\"pb:relative\">\n <div className=\"pb:absolute pb:inset-0 pb:flex pb:items-center\">\n <div className=\"pb:w-full pb:border-t pb:border-gray-300\"></div>\n </div>\n <div className=\"pb:relative pb:flex pb:justify-center pb:text-sm\">\n <span className=\"pb:px-2 pb:bg-white pb:text-gray-700\">or</span>\n </div>\n </div>\n <Text size=\"sm\">\n Remembered your password?{\" \"}\n <Button\n variant=\"link\"\n color=\"teal\"\n size=\"sm\"\n onClick={() => onModeChange(\"signing in\")}\n >\n Sign In\n </Button>\n </Text>\n </div>\n )}\n </div>\n </div>\n\n {mode !== \"resetting password\" && onGoogleSignIn && (\n <div className=\"pb:text-center pb:mt-4\">\n <Button\n color=\"neutral\"\n onClick={onGoogleSignIn}\n type=\"button\"\n className=\"pb:w-full pb:flex pb:items-center pb:justify-center pb:gap-2\"\n >\n <Icon name=\"google\" stroke=\"none\" />\n {mode === \"signing up\" && <span>Sign up with Google</span>}\n {mode === \"signing in\" && <span>Sign in with Google</span>}\n </Button>\n </div>\n )}\n </form>\n </div>\n );\n}\n","import { Button, Icon } from \"..\";\nimport React from \"react\";\n\nexport interface TabItem {\n id: string;\n label: string;\n onClose?: () => void;\n onEdit?: () => void;\n}\n\nexport interface TabSelectionProps {\n tabs: TabItem[];\n activeTabId: string | null;\n onTabClick: (id: string) => void;\n onAddClick?: () => void;\n className?: string;\n}\n\nexport function TabSelection({\n tabs,\n activeTabId,\n onTabClick,\n onAddClick,\n className = \"\",\n}: TabSelectionProps) {\n return (\n <div\n className={`pb:overflow-x-auto pb:max-h-20 pb:text-sm pb:whitespace-nowrap ${className}`}\n >\n {tabs.map((tab) => {\n const isActive = tab.id === activeTabId;\n return (\n <div\n key={tab.id}\n className={\n \"pb:inline-block pb:align-middle pb:m-1 pb:px-2 pb:py-2 pb:cursor-pointer pb:rounded-sm \" +\n (isActive\n ? \"pb:font-bold pb:bg-primary/30\"\n : \"pb:font-gray-300 pb:bg-gray-200\")\n }\n onClick={() => onTabClick(tab.id)}\n >\n <span className=\"pb:inline-block pb:align-middle\">{tab.label}</span>\n\n {isActive && (tab.onEdit || tab.onClose) && (\n <span className=\"pb:inline-flex pb:items-center pb:ml-2 pb:align-middle\">\n {tab.onEdit && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n aria-label=\"Edit Tab\"\n onClick={(e) => {\n e.stopPropagation();\n tab.onEdit!();\n }}\n leftIcon={<Icon name=\"edit\" size=\"sm\" />}\n />\n )}\n {tab.onEdit && tab.onClose && (\n <span className=\"pb:opacity-10 pb:align-middle pb:mx-1\">{\" | \"}</span>\n )}\n {tab.onClose && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n aria-label=\"Close Tab\"\n onClick={(e) => {\n e.stopPropagation();\n tab.onClose!();\n }}\n leftIcon={<Icon name=\"close\" size=\"sm\" />}\n />\n )}\n </span>\n )}\n </div>\n );\n })}\n {onAddClick && (\n <Button\n color=\"primary\"\n size=\"sm\"\n aria-label=\"Create New Tab\"\n onClick={onAddClick}\n leftIcon={<Icon name=\"plus\" size=\"sm\" />}\n className=\"pb:m-1 pb:align-middle pb:inline-flex\"\n />\n )}\n </div>\n );\n}\n","import React, { useRef, useImperativeHandle } from \"react\";\nimport { Icon } from \"../foundations/Icon\";\nimport { Input, InputProps } from \"../forms/Input\";\nimport { cn } from \"../utils\";\n\nexport interface SearchInputProps\n extends Omit<InputProps, \"leftIcon\" | \"rightIcon\"> {\n onSearch?: (query: string) => void;\n onClear?: () => void;\n showClearButton?: boolean;\n}\n\nexport const SearchInput = React.forwardRef<HTMLInputElement, SearchInputProps>(\n (\n {\n className,\n value,\n defaultValue,\n onChange,\n onSearch,\n onClear,\n showClearButton = true,\n placeholder = \"Search...\",\n onKeyDown,\n ...props\n },\n ref,\n ) => {\n const internalRef = useRef<HTMLInputElement>(null);\n useImperativeHandle(ref, () => internalRef.current as HTMLInputElement);\n\n const handleClear = () => {\n if (internalRef.current) {\n internalRef.current.value = \"\";\n }\n if (onClear) {\n onClear();\n }\n if (onSearch) {\n onSearch(\"\");\n }\n internalRef.current?.focus();\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\" && onSearch) {\n onSearch(internalRef.current?.value ?? \"\");\n } else if (e.key === \"Escape\") {\n handleClear();\n }\n if (onKeyDown) {\n onKeyDown(e);\n }\n };\n\n const hasValue =\n value !== undefined\n ? String(value).length > 0\n : internalRef.current?.value && internalRef.current.value.length > 0;\n\n return (\n <div className={cn(\"pb:relative pb:w-full\", className)}>\n <Input\n ref={internalRef}\n type=\"text\"\n value={value}\n defaultValue={defaultValue}\n placeholder={placeholder}\n onChange={onChange}\n onKeyDown={handleKeyDown}\n leftIcon={<Icon name=\"search\" className=\"pb:w-4 pb:h-4 pb:text-gray-400\" />}\n className=\"pb:pr-8\"\n {...props}\n />\n {showClearButton && (\n <button\n type=\"button\"\n aria-label=\"Clear search\"\n onClick={handleClear}\n className={cn(\n \"pb:absolute pb:inset-y-0 pb:right-0 pb:flex pb:items-center pb:pr-2.5 pb:text-gray-400 pb:hover:text-gray-600 pb:cursor-pointer pb:transition-opacity pb:duration-150 pb:focus-visible:outline-none pb:focus-visible:ring-2 pb:focus-visible:ring-primary pb:rounded-r-md\",\n hasValue ? \"pb:opacity-100 pb:visible\" : \"pb:opacity-0 pb:invisible\",\n )}\n >\n <Icon name=\"xCircle\" className=\"pb:w-4 pb:h-4\" />\n </button>\n )}\n </div>\n );\n },\n);\n\nSearchInput.displayName = \"SearchInput\";\n","import React from \"react\";\nimport { Button, ButtonProps } from \"../forms/Button\";\nimport { Icon } from \"../foundations/Icon\";\nimport { useClipboard } from \"./useClipboard\";\nimport { cn } from \"../utils\";\n\nexport interface CopyButtonProps extends Omit<ButtonProps, \"onClick\"> {\n /** The text value to copy to the clipboard. */\n value: string;\n /** Label displayed before copying. Default is `\"Copy\"`. Pass `null` or use `isIconOnly` for icon-only. */\n label?: React.ReactNode;\n /** Label displayed after copying. Default is `\"Copied!\"`. */\n successLabel?: React.ReactNode;\n /** Duration in milliseconds for the success state. Default is `2000`. */\n timeout?: number;\n /** Callback fired after successfully copying to clipboard. */\n onCopied?: (value: string) => void;\n /** Callback fired if copying fails. */\n onCopyError?: (error: Error) => void;\n /** Custom icon shown in default state. */\n copyIcon?: React.ReactNode;\n /** Custom icon shown in copied state. */\n successIcon?: React.ReactNode;\n /** Whether to show icons. Default is `true`. */\n showIcon?: boolean;\n}\n\nexport const CopyButton = React.forwardRef<HTMLButtonElement, CopyButtonProps>(\n (\n {\n value,\n label = \"Copy\",\n successLabel = \"Copied!\",\n timeout = 2000,\n onCopied,\n onCopyError,\n copyIcon,\n successIcon,\n showIcon = true,\n variant = \"outline\",\n color = \"neutral\",\n size = \"md\",\n radius = \"md\",\n isIconOnly,\n className,\n ...props\n },\n ref,\n ) => {\n const { copy, copied } = useClipboard({\n timeout,\n onSuccess: onCopied,\n onError: onCopyError,\n });\n\n const currentIcon = copied\n ? successIcon || <Icon name=\"check\" className=\"pb:text-peerbots-teal\" />\n : copyIcon || <Icon name=\"clipboard\" />;\n\n const currentLabel = copied ? successLabel : label;\n\n return (\n <Button\n ref={ref}\n variant={variant}\n color={color}\n size={size}\n radius={radius}\n isIconOnly={isIconOnly}\n onClick={() => copy(value)}\n leftIcon={showIcon ? currentIcon : undefined}\n className={cn(\n \"pb:transition-all pb:duration-150\",\n copied && \"pb:border-peerbots-teal pb:text-peerbots-darkteal\",\n className,\n )}\n aria-live=\"polite\"\n aria-label={\n isIconOnly\n ? typeof currentLabel === \"string\"\n ? currentLabel\n : \"Copy\"\n : undefined\n }\n {...props}\n >\n {isIconOnly ? null : currentLabel}\n </Button>\n );\n },\n);\n\nCopyButton.displayName = \"CopyButton\";\n","import { useState, useCallback, useRef, useEffect } from \"react\";\n\nexport interface UseClipboardOptions {\n /**\n * Duration in milliseconds for the `copied` state to remain `true`.\n * @default 2000\n */\n timeout?: number;\n /** Callback fired after successfully copying to clipboard. */\n onSuccess?: (text: string) => void;\n /** Callback fired if copying fails. */\n onError?: (error: Error) => void;\n}\n\nexport function useClipboard(options: UseClipboardOptions = {}) {\n const { timeout = 2000, onSuccess, onError } = options;\n const [copied, setCopied] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const copy = useCallback(\n async (text: string): Promise<boolean> => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n }\n\n try {\n if (navigator?.clipboard?.writeText) {\n await navigator.clipboard.writeText(text);\n } else {\n // Fallback for non-secure / legacy contexts\n const textarea = document.createElement(\"textarea\");\n textarea.value = text;\n textarea.style.position = \"fixed\";\n textarea.style.opacity = \"0\";\n document.body.appendChild(textarea);\n textarea.focus();\n textarea.select();\n const successful = document.execCommand(\"copy\");\n document.body.removeChild(textarea);\n if (!successful) {\n throw new Error(\"execCommand copy failed\");\n }\n }\n\n setCopied(true);\n setError(null);\n onSuccess?.(text);\n\n timerRef.current = setTimeout(() => {\n setCopied(false);\n }, timeout);\n\n return true;\n } catch (err) {\n const copyError = err instanceof Error ? err : new Error(String(err));\n setError(copyError);\n setCopied(false);\n onError?.(copyError);\n return false;\n }\n },\n [timeout, onSuccess, onError],\n );\n\n useEffect(() => {\n return () => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n }\n };\n }, []);\n\n return { copy, copied, error };\n}\n","import React from \"react\";\nimport { cn } from \"../utils\";\nimport { Icon } from \"../foundations/Icon\";\nimport { ComponentColor, ComponentSize } from \"../types\";\n\nexport type StepStatus = \"complete\" | \"current\" | \"upcoming\" | \"disabled\";\n\nexport interface StepItem {\n id: string;\n title: React.ReactNode;\n description?: React.ReactNode;\n status?: StepStatus;\n icon?: React.ReactNode;\n}\n\nexport interface StepperProps {\n /** Array of sequential steps */\n steps: StepItem[];\n /** Controlled currently active step id */\n activeStepId?: string;\n /** Callback fired when a step is clicked */\n onStepClick?: (stepId: string) => void;\n /** Layout orientation */\n orientation?: \"horizontal\" | \"vertical\" | \"chips\";\n /** Brand color theme */\n color?: ComponentColor;\n /** Size scale */\n size?: ComponentSize;\n className?: string;\n}\n\nconst colorBadgeStyles: Record<string, { current: string; complete: string; line: string }> = {\n teal: {\n current: \"pb:bg-peerbots-teal pb:text-gray-900 pb:ring-4 pb:ring-peerbots-teal/30\",\n complete: \"pb:bg-peerbots-darkteal pb:text-white\",\n line: \"pb:bg-peerbots-darkteal\",\n },\n pink: {\n current: \"pb:bg-rose-700 pb:text-white pb:ring-4 pb:ring-rose-200\",\n complete: \"pb:bg-rose-800 pb:text-white\",\n line: \"pb:bg-rose-700\",\n },\n primary: {\n current: \"pb:bg-primary pb:text-gray-900 pb:ring-4 pb:ring-primary/30\",\n complete: \"pb:bg-dark-primary pb:text-white\",\n line: \"pb:bg-dark-primary\",\n },\n darkblue: {\n current: \"pb:bg-peerbots-darkblue pb:text-white pb:ring-4 pb:ring-peerbots-darkblue/20\",\n complete: \"pb:bg-peerbots-darkblue pb:text-white\",\n line: \"pb:bg-peerbots-darkblue\",\n },\n neutral: {\n current: \"pb:bg-gray-900 pb:text-white pb:ring-4 pb:ring-gray-300\",\n complete: \"pb:bg-gray-800 pb:text-white\",\n line: \"pb:bg-gray-600\",\n },\n};\n\nexport function Stepper({\n steps,\n activeStepId,\n onStepClick,\n orientation = \"horizontal\",\n color = \"teal\",\n size = \"md\",\n className,\n}: StepperProps) {\n const activeIndex = steps.findIndex((s) => s.id === activeStepId);\n const colorStyle = colorBadgeStyles[color] || colorBadgeStyles.teal;\n\n const resolveStatus = (step: StepItem, index: number): StepStatus => {\n if (step.status) return step.status;\n if (activeIndex === -1) return index === 0 ? \"current\" : \"upcoming\";\n if (index < activeIndex) return \"complete\";\n if (index === activeIndex) return \"current\";\n return \"upcoming\";\n };\n\n // 1. \"chips\" compact jump mode (as in Moddy build guide)\n if (orientation === \"chips\") {\n return (\n <ol\n className={cn(\n \"pb:flex pb:flex-row pb:flex-wrap pb:items-center pb:gap-2 pb:list-none pb:p-0 pb:m-0\",\n className,\n )}\n >\n {steps.map((step, idx) => {\n const status = resolveStatus(step, idx);\n const isCurrent = status === \"current\";\n const isComplete = status === \"complete\";\n const isClickable = Boolean(onStepClick) && status !== \"disabled\";\n const stepLabel = typeof step.title === \"string\" ? `Step ${idx + 1}: ${step.title}` : `Step ${idx + 1}`;\n\n return (\n <li key={step.id}>\n <button\n type=\"button\"\n aria-label={stepLabel}\n disabled={!isClickable}\n onClick={() => onStepClick?.(step.id)}\n className={cn(\n \"pb:inline-flex pb:items-center pb:gap-1.5 pb:pl-1.5 pb:pr-3 pb:py-1 pb:rounded-full pb:border pb:transition-all pb:duration-150 pb:text-xs pb:font-bold\",\n isClickable ? \"pb:cursor-pointer\" : \"pb:cursor-default\",\n isCurrent\n ? cn(colorStyle.current, \"pb:shadow-sm\")\n : isComplete\n ? \"pb:bg-gray-100 pb:text-gray-900 pb:border-gray-300 pb:hover:border-peerbots-darkteal\"\n : \"pb:bg-white pb:text-gray-600 pb:border-gray-300 pb:hover:text-gray-900\",\n )}\n >\n <span\n className={cn(\n \"pb:flex pb:items-center pb:justify-center pb:w-4 pb:h-4 pb:rounded-full pb:text-[10px] pb:font-bold\",\n isCurrent\n ? \"pb:bg-black/15 pb:text-current\"\n : isComplete\n ? \"pb:bg-peerbots-darkteal pb:text-white\"\n : \"pb:bg-gray-200 pb:text-gray-700\",\n )}\n >\n {isComplete ? (\n <Icon name=\"check\" className=\"pb:w-2.5 pb:pb:h-2.5\" />\n ) : (\n idx + 1\n )}\n </span>\n <span className=\"pb:uppercase pb:tracking-tight pb:whitespace-nowrap\">\n {step.title}\n </span>\n </button>\n </li>\n );\n })}\n </ol>\n );\n }\n\n // 2. \"vertical\" layout mode\n if (orientation === \"vertical\") {\n return (\n <ol\n className={cn(\n \"pb:flex pb:flex-col pb:gap-0 pb:list-none pb:p-0 pb:m-0\",\n className,\n )}\n >\n {steps.map((step, idx) => {\n const status = resolveStatus(step, idx);\n const isCurrent = status === \"current\";\n const isComplete = status === \"complete\";\n const isLast = idx === steps.length - 1;\n const isClickable = Boolean(onStepClick) && status !== \"disabled\";\n const stepLabel = typeof step.title === \"string\" ? `Step ${idx + 1}: ${step.title}` : `Step ${idx + 1}`;\n\n return (\n <li key={step.id} className=\"pb:relative pb:flex pb:items-start pb:gap-4 pb:pb-6\">\n {!isLast && (\n <div\n className={cn(\n \"pb:absolute pb:left-4 pb:top-8 pb:-bottom-0 pb:w-0.5 pb:bg-gray-200\",\n isComplete && colorStyle.line,\n )}\n />\n )}\n\n <button\n type=\"button\"\n aria-label={stepLabel}\n disabled={!isClickable}\n onClick={() => onStepClick?.(step.id)}\n className={cn(\n \"pb:flex pb:items-center pb:justify-center pb:w-8 pb:h-8 pb:rounded-full pb:font-bold pb:text-xs pb:shrink-0 pb:transition-all pb:duration-200 pb:z-10\",\n isClickable ? \"pb:cursor-pointer\" : \"pb:cursor-default\",\n isCurrent\n ? colorStyle.current\n : isComplete\n ? colorStyle.complete\n : \"pb:bg-gray-100 pb:text-gray-700 pb:border pb:border-gray-300\",\n )}\n >\n {step.icon || (isComplete ? <Icon name=\"check\" className=\"pb:w-4 pb:h-4\" /> : idx + 1)}\n </button>\n\n <div\n onClick={() => isClickable && onStepClick?.(step.id)}\n className={cn(\n \"pb:pt-0.5 pb:flex-1\",\n isClickable && \"pb:cursor-pointer\",\n )}\n >\n <div\n className={cn(\n \"pb:text-sm pb:font-bold\",\n isCurrent\n ? \"pb:text-gray-950\"\n : isComplete\n ? \"pb:text-gray-900\"\n : \"pb:text-gray-600\",\n )}\n >\n {step.title}\n </div>\n {step.description && (\n <div className=\"pb:text-xs pb:text-gray-600 pb:mt-0.5 pb:leading-relaxed\">\n {step.description}\n </div>\n )}\n </div>\n </li>\n );\n })}\n </ol>\n );\n }\n\n // 3. \"horizontal\" rail mode (default)\n return (\n <ol\n className={cn(\n \"pb:flex pb:w-full pb:items-center pb:justify-between pb:gap-0 pb:list-none pb:p-0 pb:m-0\",\n className,\n )}\n >\n {steps.map((step, idx) => {\n const status = resolveStatus(step, idx);\n const isCurrent = status === \"current\";\n const isComplete = status === \"complete\";\n const isLast = idx === steps.length - 1;\n const isClickable = Boolean(onStepClick) && status !== \"disabled\";\n const stepLabel = typeof step.title === \"string\" ? `Step ${idx + 1}: ${step.title}` : `Step ${idx + 1}`;\n\n return (\n <li\n key={step.id}\n className={cn(\n \"pb:flex pb:items-center\",\n isLast ? \"pb:flex-none\" : \"pb:flex-1\",\n )}\n >\n <div className=\"pb:flex pb:flex-col pb:items-center pb:text-center pb:relative\">\n <button\n type=\"button\"\n aria-label={stepLabel}\n disabled={!isClickable}\n onClick={() => onStepClick?.(step.id)}\n className={cn(\n \"pb:flex pb:items-center pb:justify-center pb:w-9 pb:h-9 pb:rounded-full pb:font-bold pb:text-xs pb:transition-all pb:duration-200 pb:z-10\",\n isClickable ? \"pb:cursor-pointer\" : \"pb:cursor-default\",\n isCurrent\n ? colorStyle.current\n : isComplete\n ? colorStyle.complete\n : \"pb:bg-gray-100 pb:text-gray-700 pb:border pb:border-gray-300\",\n )}\n >\n {step.icon || (isComplete ? <Icon name=\"check\" className=\"pb:w-4 pb:h-4\" /> : idx + 1)}\n </button>\n\n <div className=\"pb:mt-2 pb:max-w-[120px]\">\n <div\n className={cn(\n \"pb:text-xs pb:font-bold pb:leading-tight\",\n isCurrent\n ? \"pb:text-gray-950\"\n : isComplete\n ? \"pb:text-gray-900\"\n : \"pb:text-gray-600\",\n )}\n >\n {step.title}\n </div>\n {step.description && (\n <div className=\"pb:text-[10px] pb:text-gray-600 pb:mt-0.5 pb:hidden sm:pb:block truncate\">\n {step.description}\n </div>\n )}\n </div>\n </div>\n\n {!isLast && (\n <div\n className={cn(\n \"pb:flex-1 pb:h-0.5 pb:bg-gray-200 pb:mx-2 pb:transition-colors pb:duration-300 pb:-mt-6\",\n isComplete && colorStyle.line,\n )}\n />\n )}\n </li>\n );\n })}\n </ol>\n );\n}\n","interface SEOProps {\n title: string;\n description?: string;\n image?: string;\n url?: string;\n type?: string;\n}\n\nexport function SEO({\n title,\n description = \"Peerbots platform: social robots for everyone, powered by experts.\",\n image = \"/peerbots-logo.png\", // Default image if one exists, customizable\n url,\n type = \"website\",\n}: SEOProps) {\n const siteTitle = \"Peerbots App\";\n const fullTitle = title === \"Home\" ? siteTitle : `${title} | ${siteTitle}`;\n const currentUrl =\n url || (typeof window !== \"undefined\" ? window.location.href : \"\");\n\n return (\n <>\n <title>{fullTitle}</title>\n <meta name=\"description\" content={description} />\n\n {/* Open Graph */}\n <meta property=\"og:title\" content={fullTitle} />\n <meta property=\"og:description\" content={description} />\n <meta property=\"og:image\" content={image} />\n <meta property=\"og:url\" content={currentUrl} />\n <meta property=\"og:type\" content={type} />\n <meta property=\"og:site_name\" content={siteTitle} />\n\n {/* Twitter Card */}\n <meta name=\"twitter:card\" content=\"summary_large_image\" />\n <meta name=\"twitter:title\" content={fullTitle} />\n <meta name=\"twitter:description\" content={description} />\n <meta name=\"twitter:image\" content={image} />\n </>\n );\n}\n","import {\n VictoryChart,\n VictoryBar,\n VictoryAxis,\n VictoryTooltip,\n VictoryVoronoiContainer,\n VictoryLine,\n VictoryLabel,\n} from \"victory\";\n\nexport interface DistributionBarData {\n label: string;\n count: number;\n items?: string[];\n fill?: string;\n stroke?: string;\n}\n\nexport interface DistributionBarChartProps {\n data: DistributionBarData[];\n alt: string;\n chartWidth?: number;\n chartHeight?: number;\n average?: number;\n referenceLineValue?: number;\n referenceLineLabel?: string;\n label?: string;\n}\n\nexport function DistributionBarChart({\n data,\n alt,\n chartWidth = 600,\n chartHeight = 400,\n average,\n referenceLineValue,\n referenceLineLabel = \"Reference\",\n label,\n}: DistributionBarChartProps) {\n const maxCount = Math.max(...data.map((d) => d.count), 5);\n const labels = data.map((d) => d.label);\n\n if (data.length === 0) return null;\n\n return (\n <div className=\"pb:mb-6\" role=\"region\" aria-label={alt}>\n {label && (\n <span className=\"pb:text-xs pb:uppercase pb:font-bold pb:text-gray-700 pb:block pb:mb-2 pb:px-1\">\n {label}\n </span>\n )}\n <VictoryChart\n width={chartWidth}\n height={chartHeight}\n padding={{ left: 100, right: 50, top: 40, bottom: 60 }}\n containerComponent={\n <VictoryVoronoiContainer\n title={alt}\n desc={alt}\n aria-label={alt}\n />\n }\n >\n <VictoryAxis\n horizontal\n tickValues={labels}\n style={{\n axis: { stroke: \"#cbd5e1\" },\n tickLabels: { fontSize: 18, padding: 5, fill: \"#334155\" },\n }}\n />\n <VictoryAxis\n dependentAxis\n domain={[0, maxCount]}\n tickFormat={(x: number | string) =>\n typeof x === \"number\" ? Math.round(x) : x\n }\n style={{\n axis: { stroke: \"#cbd5e1\" },\n tickLabels: { fontSize: 18, padding: 5, fill: \"#334155\" },\n grid: { stroke: \"#f1f5f9\" },\n }}\n />\n <VictoryBar\n horizontal\n domain={{ x: [0.5, labels.length + 0.5], y: [0, maxCount] }}\n data={data}\n x={\"label\"}\n y={\"count\"}\n labels={({ datum }: { datum?: DistributionBarData }) => {\n if (!datum || datum.count === 0) return \"\";\n if (!datum.items || datum.items.length === 0)\n return `${datum.count}`;\n const displayItems = datum.items.slice(0, 5);\n let labelText = displayItems.join(\"\\n\");\n if (datum.items.length > 5)\n labelText += `\\n...and ${datum.items.length - 5} more`;\n return labelText;\n }}\n labelComponent={\n <VictoryTooltip\n style={{ fontSize: 18 }}\n flyoutStyle={{ fill: \"white\", stroke: \"#cbd5e1\" }}\n pointerLength={5}\n cornerRadius={2}\n constrainToVisibleArea\n />\n }\n style={{\n data: {\n fill: ({ datum }: { datum?: DistributionBarData }) =>\n datum?.fill\n ? datum.fill === \"White\"\n ? \"#f3f4f6\"\n : datum.fill\n : \"#46d9d9\",\n width: 14,\n stroke: ({ datum }: { datum?: DistributionBarData }) =>\n datum?.stroke\n ? datum.stroke\n : datum?.fill === \"White\"\n ? \"#d1d5db\"\n : \"none\",\n strokeWidth: ({ datum }: { datum?: DistributionBarData }) =>\n datum?.stroke || datum?.fill === \"White\" ? 0.5 : 0,\n cursor: \"pointer\",\n },\n }}\n cornerRadius={2}\n />\n {average !== undefined && (\n <VictoryLine\n y={() => average}\n style={{\n data: {\n stroke: \"#9ca3af\",\n strokeWidth: 2,\n strokeDasharray: \"4, 4\",\n },\n }}\n labels={[\"Average\"]}\n labelComponent={\n <VictoryLabel\n y={45}\n style={{ fill: \"#475569\", fontSize: 18, fontWeight: \"bold\" }}\n backgroundStyle={{ fill: \"white\" }}\n backgroundPadding={12}\n />\n }\n />\n )}\n {referenceLineValue !== undefined && (\n <VictoryLine\n y={() => referenceLineValue}\n labels={[referenceLineLabel]}\n labelComponent={\n <VictoryLabel\n y={45}\n style={{ fill: \"#ef4444\", fontSize: 18, fontWeight: \"bold\" }}\n backgroundStyle={{ fill: \"white\" }}\n backgroundPadding={12}\n />\n }\n style={{\n data: {\n stroke: \"#ef4444\",\n strokeWidth: 2,\n strokeDasharray: \"4, 4\",\n },\n }}\n />\n )}\n </VictoryChart>\n </div>\n );\n}\n","import {\n VictoryChart,\n VictoryAxis,\n VictoryLabel,\n VictoryLine,\n VictoryHistogram,\n VictoryTooltip,\n VictoryVoronoiContainer,\n} from \"victory\";\n\nexport interface DistributionHistogramData {\n x: number;\n text: string;\n}\n\nexport interface DistributionHistogramProps {\n data: DistributionHistogramData[];\n alt: string;\n label: string;\n average?: number;\n referenceLineValue?: number;\n referenceLineLabel?: string;\n chartWidth?: number;\n chartHeight?: number;\n}\n\nexport function DistributionHistogram({\n data,\n alt,\n label,\n average,\n referenceLineValue,\n referenceLineLabel = \"Reference\",\n chartWidth = 600,\n chartHeight = 400,\n}: DistributionHistogramProps) {\n if (data.length === 0) return null;\n\n const binSize = 10;\n const maxLength = Math.max(\n ...data.map((r) => r.x),\n referenceLineValue ?? 0,\n binSize,\n );\n const maxX = Math.ceil(maxLength / binSize) * binSize + binSize;\n\n const boundaries = [];\n for (let i = 0; i <= maxX; i += binSize) {\n boundaries.push(i);\n }\n\n const padding = { left: 60, right: 30, top: 20, bottom: 70 };\n\n return (\n <div className=\"pb:mb-6\" role=\"region\" aria-label={alt}>\n {label && (\n <span className=\"pb:text-xs pb:uppercase pb:font-bold pb:text-gray-700 pb:block pb:mb-2 pb:px-1\">\n {label}\n </span>\n )}\n <VictoryChart\n width={chartWidth}\n height={chartHeight}\n padding={padding}\n containerComponent={\n <VictoryVoronoiContainer\n title={alt}\n desc={alt}\n aria-label={alt}\n />\n }\n >\n <VictoryAxis\n label=\"Length\"\n tickValues={boundaries}\n tickFormat={(x: number | string) =>\n typeof x === \"number\" ? Math.round(x) : x\n }\n style={{\n axis: { stroke: \"#cbd5e1\" },\n axisLabel: {\n fontSize: 18,\n padding: 45,\n fill: \"#334155\",\n fontWeight: \"bold\",\n },\n tickLabels: {\n fontSize: 18,\n padding: 5,\n fill: \"#334155\",\n angle: 45,\n textAnchor: \"start\",\n },\n }}\n />\n <VictoryAxis\n dependentAxis\n label=\"Count\"\n tickFormat={(x: number | string) =>\n typeof x === \"number\" ? Math.round(x) : x\n }\n style={{\n axis: { stroke: \"#cbd5e1\" },\n axisLabel: {\n fontSize: 18,\n padding: 40,\n fill: \"#334155\",\n fontWeight: \"bold\",\n },\n tickLabels: {\n fontSize: 18,\n padding: 5,\n fill: \"#334155\",\n },\n grid: { stroke: \"#f1f5f9\" },\n }}\n />\n <VictoryHistogram\n data={data}\n bins={boundaries}\n x=\"x\"\n labels={({\n datum,\n }: {\n datum?: {\n y: number;\n binnedData?: { text: string }[];\n };\n }) => {\n if (!datum || datum.y === 0 || !datum.binnedData) return \"\";\n const items = datum.binnedData.map((d: { text: string }) => d.text);\n const displayItems = items.slice(0, 5);\n let labelText = displayItems.join(\"\\n\");\n if (items.length > 5)\n labelText += `\\n...and ${items.length - 5} more`;\n return labelText;\n }}\n labelComponent={\n <VictoryTooltip\n style={{ fontSize: 18 }}\n flyoutStyle={{ fill: \"white\", stroke: \"#cbd5e1\" }}\n pointerLength={5}\n cornerRadius={2}\n constrainToVisibleArea\n />\n }\n style={{\n data: {\n fill: \"#46d9d9\",\n stroke: \"#fff\",\n strokeWidth: 1,\n cursor: \"pointer\",\n },\n }}\n />\n {average !== undefined && (\n <VictoryLine\n x={() => average}\n style={{\n data: {\n stroke: \"#9ca3af\",\n strokeWidth: 2,\n strokeDasharray: \"4, 4\",\n },\n }}\n labels={[\"Average\"]}\n labelComponent={\n <VictoryLabel\n y={45}\n style={{ fill: \"#475569\", fontSize: 18, fontWeight: \"bold\" }}\n backgroundStyle={{ fill: \"white\" }}\n backgroundPadding={12}\n />\n }\n />\n )}\n {referenceLineValue !== undefined && (\n <VictoryLine\n x={() => referenceLineValue}\n labels={[referenceLineLabel]}\n labelComponent={\n <VictoryLabel\n y={45}\n style={{ fill: \"#ef4444\", fontSize: 18, fontWeight: \"bold\" }}\n backgroundStyle={{ fill: \"white\" }}\n backgroundPadding={12}\n />\n }\n style={{\n data: {\n stroke: \"#ef4444\",\n strokeWidth: 2,\n strokeDasharray: \"4, 4\",\n },\n }}\n />\n )}\n </VictoryChart>\n </div>\n );\n}\n","import React from \"react\";\nimport { cn } from \"../ui/utils\";\n\nexport interface LineGraphPoint {\n x: number;\n y: number;\n}\n\nexport interface LineGraphHighlightPoint extends LineGraphPoint {\n color?: string;\n label?: string;\n}\n\nexport interface LineGraphProps {\n data: LineGraphPoint[];\n highlightPoints?: LineGraphHighlightPoint[];\n minX?: number;\n maxX?: number;\n minY?: number;\n maxY?: number;\n width?: number | string;\n height?: number;\n strokeColor?: string;\n strokeWidth?: number;\n fillColor?: string;\n showGrid?: boolean;\n showAxisLabels?: boolean;\n xUnit?: string;\n padding?: number;\n className?: string;\n}\n\nexport function LineGraph({\n data = [],\n highlightPoints = [],\n minX,\n maxX,\n minY = 0,\n maxY,\n width = \"100%\",\n height = 200,\n strokeColor = \"#3b82f6\",\n strokeWidth = 2,\n fillColor,\n showGrid = true,\n showAxisLabels = true,\n xUnit = \"ms\",\n padding = 24,\n className,\n}: LineGraphProps) {\n const svgWidth = typeof width === \"number\" ? width : 800;\n const svgHeight = height;\n\n const hasData = data && data.length > 0;\n\n const calculatedMinX =\n minX ?? (hasData ? Math.min(...data.map((d) => d.x)) : 0);\n const calculatedMaxX =\n maxX ?? (hasData ? Math.max(...data.map((d) => d.x)) : 1000);\n const xSpan = Math.max(calculatedMaxX - calculatedMinX, 1);\n\n const calculatedMinY =\n minY ?? (hasData ? Math.min(...data.map((d) => d.y)) : 0);\n const calculatedMaxY =\n maxY ?? (hasData ? Math.max(...data.map((d) => d.y)) : 1);\n const ySpan = Math.max(calculatedMaxY - calculatedMinY, 0.001);\n\n const getCanvasX = (x: number) =>\n ((x - calculatedMinX) / xSpan) * (svgWidth - 2 * padding) + padding;\n\n const getCanvasY = (y: number) =>\n svgHeight -\n padding -\n ((y - calculatedMinY) / ySpan) * (svgHeight - 2 * padding);\n\n const pathData = hasData\n ? data\n .map(\n (p, i) =>\n `${i === 0 ? \"M\" : \"L\"} ${getCanvasX(p.x)} ${getCanvasY(p.y)}`,\n )\n .join(\" \")\n : `M ${padding} ${getCanvasY(calculatedMinY)} L ${\n svgWidth - padding\n } ${getCanvasY(calculatedMinY)}`;\n\n const fillPathData =\n hasData && fillColor\n ? `${pathData} L ${getCanvasX(\n data[data.length - 1].x,\n )} ${getCanvasY(calculatedMinY)} L ${getCanvasX(\n data[0].x,\n )} ${getCanvasY(calculatedMinY)} Z`\n : undefined;\n\n return (\n <div className={cn(\"pb:relative pb:w-full pb:overflow-x-auto\", className)}>\n <svg\n viewBox={`0 0 ${svgWidth} ${svgHeight}`}\n className=\"pb:w-full pb:h-auto pb:bg-gray-50 pb:rounded pb:border pb:border-gray-200\"\n style={{ minWidth: typeof width === \"number\" ? `${width}px` : \"300px\" }}\n >\n {/* Grid and Axes */}\n {showGrid && (\n <>\n {/* X-axis */}\n <line\n x1={padding}\n y1={svgHeight - padding}\n x2={svgWidth - padding}\n y2={svgHeight - padding}\n stroke=\"#e5e7eb\"\n strokeWidth=\"1\"\n />\n {/* Y-axis */}\n <line\n x1={padding}\n y1={padding}\n x2={padding}\n y2={svgHeight - padding}\n stroke=\"#e5e7eb\"\n strokeWidth=\"1\"\n />\n {/* Mid Y-grid */}\n <line\n x1={padding}\n y1={getCanvasY((calculatedMinY + calculatedMaxY) / 2)}\n x2={svgWidth - padding}\n y2={getCanvasY((calculatedMinY + calculatedMaxY) / 2)}\n stroke=\"#f3f4f6\"\n strokeWidth=\"1\"\n strokeDasharray=\"4\"\n />\n </>\n )}\n\n {/* Fill Area */}\n {fillPathData && (\n <path d={fillPathData} fill={fillColor} opacity={0.3} />\n )}\n\n {/* Data Path */}\n <path\n d={pathData}\n fill=\"none\"\n stroke={strokeColor}\n strokeWidth={hasData ? strokeWidth : 1}\n strokeLinejoin=\"round\"\n strokeLinecap=\"round\"\n />\n\n {/* Highlight Points */}\n {highlightPoints?.map((p, i) => (\n <circle\n key={i}\n cx={getCanvasX(p.x)}\n cy={getCanvasY(p.y)}\n r=\"3.5\"\n fill={p.color ?? \"#ef4444\"}\n className=\"pb:transition-all pb:duration-150 pb:hover:r-5 pb:cursor-crosshair\"\n >\n {p.label && <title>{p.label}</title>}\n </circle>\n ))}\n\n {/* Axis Labels */}\n {showAxisLabels && (\n <>\n {/* Bottom-left X min */}\n <text\n x={padding}\n y={svgHeight - 6}\n fontSize=\"10\"\n fill=\"#9ca3af\"\n textAnchor=\"start\"\n >\n {calculatedMinX}\n {xUnit}\n </text>\n {/* Bottom-right X max */}\n <text\n x={svgWidth - padding}\n y={svgHeight - 6}\n fontSize=\"10\"\n fill=\"#9ca3af\"\n textAnchor=\"end\"\n >\n {calculatedMaxX}\n {xUnit}\n </text>\n {/* Top-left Y max */}\n <text\n x={6}\n y={padding + 4}\n fontSize=\"10\"\n fill=\"#9ca3af\"\n textAnchor=\"start\"\n >\n {calculatedMaxY.toFixed(1)}\n </text>\n {/* Bottom-left Y min */}\n <text\n x={6}\n y={svgHeight - padding}\n fontSize=\"10\"\n fill=\"#9ca3af\"\n textAnchor=\"start\"\n >\n {calculatedMinY.toFixed(1)}\n </text>\n </>\n )}\n </svg>\n </div>\n );\n}\n"],"mappings":"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ACE,UAAWF,EACTd,GAAgBkB,CAAY,GAAKlB,GAAgB,GACjDD,GAAiBa,CAAa,GAAKb,GAAiB,QACpDQ,GAAUN,GAAcM,CAAM,EAC9BU,GAAS,WAAWA,CAAK,GACzBT,CACF,EACA,GAAGE,CACL,EACAD,CACF,CACF,EClKA,IAAAU,GAAkB,oBCsGd,IAAAC,EAAA,6BAjGSC,GAAY,CACvB,MAAO,kBACP,EAAG,uBACH,KAAM,iKACN,MAAO,uBACP,KAAM,yBACN,UAAW,wCACX,QAAS,qCACT,UACE,wdACF,aACE,sJACF,gBAAiB,8BACjB,OACE,uJACF,gBACE,uJACF,QACE,qcACF,WACE,utCACF,gBACE,6EACF,SACE,+kBACF,aACE,uIACF,KAAM,kLACN,aACE,8QACF,MAAO,WACP,aACE,oPACF,sBACE,wMACF,eAAgB,6BAChB,iBAAkB,8BAClB,eAAgB,wCAChB,iBAAkB,2CAClB,YACE,yQACF,IAAK,8DACL,KAAM,0EACN,mBACE,uMACF,OACE,gFACF,kBACE,8EACF,oBACE,mLACF,YACE,oeACF,UACE,8mBACF,QACE,wEACF,iBACE,wIACF,kBACE,wJACF,UACE,0UACF,eAAgB,6CAChB,oBACE,kGACF,aACE,4EACF,SACE,uGACF,WACE,uGACF,WACE,gMACF,sBACE,qJACF,aAAc,4BACd,cACE,+GACF,YACE,8GACF,OACE,2JACF,OACE,uJACF,KAAM,6OACN,KAAM,oBACN,KAAM,+FACN,OAAQ,8CACR,KAAM,+DACR,EAKaC,GAAe,CAC1B,OACE,oBACE,oBAAC,QAAK,EAAE,2LAA2L,KACnM,OAAC,QAAK,EAAE,sCAAsC,GAChD,EAEF,UACE,QAAC,KAAE,UAAU,4CACX,oBAAC,QACC,KAAK,UACL,OAAO,OACP,EAAE,4OACJ,KACA,OAAC,QACC,KAAK,UACL,OAAO,OACP,EAAE,kQACJ,KACA,OAAC,QACC,KAAK,UACL,OAAO,OACP,EAAE,oQACJ,KACA,OAAC,QACC,KAAK,UACL,OAAO,OACP,EAAE,iPACJ,GACF,EAEF,QACE,oBACE,oBAAC,UAAO,GAAG,KAAK,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","names":["src_exports","__export","Accordion","Alert","Anchor","AuthFormUI","Avatar","Button","Card","Checkbox","ChipGroup","CodeBlock","Collapsible","CopyButton","DEFAULT_PEERBOTS_SOCIAL_LINKS","Dialog","DialogClose","DialogDescription","DialogTitle","DistributionBarChart","DistributionHistogram","Dropdown","DropdownItem","DropdownSeparator","Dropzone","EmptyState","Field","FileUpload","Heading","HelperTooltip","Icon","Input","Label","LineGraph","Link","NumberField","PEERBOTS_COLOR_MAP","PEERBOTS_FONT_COLOR_MAP","PeerbotsColorSelector","Popover","PopoverClose","PopoverDescription","PopoverTitle","SEO","SearchInput","Select","Separator","SettingsPanel","Skeleton","Slider","SliderWithNumberField","SocialLinks","Spinner","Stepper","Switch","TabRadio","TabSelection","Text","TextArea","Tooltip","cn","iconPaths","useClipboard","__toCommonJS","styleInject","css","insertAt","head","style","styleInject","import_clsx","import_tailwind_merge","cn","inputs","import_react","headingSizes","headingColorClasses","textColorClasses","textSizeClasses","weightClasses","Heading","level","size","color","variant","weight","className","children","props","visualScale","resolvedColor","React","cn","Text","Component","align","resolvedSize","import_react","import_jsx_runtime","iconPaths","complexIcons","iconAliases","getIconNode","name","resolvedName","icons","_","prop","import_jsx_runtime","Icon","React","className","size","name","children","props","ref","sizes","iconContent","icons","cn","import_jsx_runtime","DEFAULT_PEERBOTS_SOCIAL_LINKS","SocialLinks","className","links","size","variant","sizeClasses","variantClasses","buttonSizeClasses","cn","link","iconName","Icon","import_react","import_jsx_runtime","CodeBlock","code","language","fileName","showLineNumbers","variant","showCopyButton","className","copied","setCopied","handleCopy","err","codeLines","isWindow","cn","Icon","line","idx","React","import_jsx_runtime","colorClasses","underlineClasses","Anchor","className","href","target","color","underline","variant","Component","render","children","props","ref","commonClass","cn","anchorProps","Link","import_react","import_jsx_runtime","variantColorMap","radiusClasses","Button","React","className","variant","color","size","radius","isLoading","leftIcon","rightIcon","children","disabled","render","nativeButton","isIconOnly","href","target","rel","props","ref","resolvedVariant","resolvedColor","resolvedRadius","isActuallyIconOnly","sizes","variantStyles","commonClasses","cn","content","BaseButton","import_react","import_jsx_runtime","Input","React","className","leftIcon","rightIcon","id","props","ref","inputClasses","cn","BaseInput","import_react","import_jsx_runtime","Select","React","className","options","propsId","value","defaultValue","onChange","disabled","placeholder","onFocus","ariaLabel","props","ref","generatedId","selectId","BaseSelect","val","details","event","cn","Icon","option","index","label","import_react","import_jsx_runtime","Slider","React","className","min","max","step","value","defaultValue","disabled","onChange","name","icon","ariaLabel","props","ref","handleChange","val","event","cn","BaseSlider","details","import_react","import_react","import_jsx_runtime","NumberField","React","className","value","defaultValue","min","max","step","onChange","disabled","readOnly","propsId","placeholder","showButtons","ariaLabel","props","ref","BaseNumberField","val","details","event","cn","Icon","import_jsx_runtime","SliderWithNumberField","React","className","min","max","step","value","defaultValue","disabled","onChange","inputWidth","showButtons","ariaLabel","props","ref","handleChange","val","event","newValue","widthClass","cn","Slider","NumberField","import_react","import_jsx_runtime","Dropdown","trigger","children","align","className","BaseMenu","React","cn","DropdownItem","props","ref","DropdownSeparator","import_react","import_jsx_runtime","Switch","React","checked","defaultChecked","onChange","disabled","className","externalId","props","ref","autoId","id","cn","BaseSwitch","eventDetails","import_react","import_jsx_runtime","Tooltip","content","children","className","delay","BaseTooltip","React","cn","HelperTooltip","Icon","import_jsx_runtime","Label","children","tooltip","className","props","cn","HelperTooltip","import_react","import_jsx_runtime","variantStyles","TabRadio","options","value","onChange","className","variant","ariaLabel","val","cn","option","import_react","import_jsx_runtime","Field","React","label","description","error","tooltip","children","className","icon","labelPlacement","labelWeight","props","ref","isHorizontal","labelOnRight","BaseField","cn","Label","import_react","import_jsx_runtime","TextArea","React","className","id","props","ref","BaseInput","cn","import_react","import_jsx_runtime","Checkbox","React","className","id","checked","onChange","props","ref","BaseCheckbox","val","cn","Icon","import_jsx_runtime","PEERBOTS_COLOR_MAP","PEERBOTS_FONT_COLOR_MAP","PeerbotsColorSelector","selectedColor","onColorSelect","colors","size","className","ariaLabelPrefix","sizeClasses","cn","colorName","isSelected","import_react","import_jsx_runtime","activeColorStyles","inactiveStyles","radiusClasses","sizeClasses","ChipGroup","options","controlledValue","defaultValue","onChange","multiple","controlledValues","defaultValues","onMultipleChange","color","variant","size","radius","scrollable","className","id","name","internalValue","setInternalValue","internalValues","setInternalValues","activeValue","activeValues","handleSelect","optionValue","disabled","nextValues","v","activeStyle","currentSize","cn","option","idx","isSelected","import_react","import_jsx_runtime","variantStyles","tintStyles","radiusClasses","paddingClasses","Card","React","children","className","variant","color","padding","radius","hoverable","id","Component","href","target","rel","rest","ref","baseStyles","hoverStyles","isLink","cn","import_react","import_jsx_runtime","Accordion","items","allowMultiple","variant","title","children","defaultOpen","controlledIsOpen","onToggle","className","headerClassName","contentClassName","baseId","resolvedItems","openIndices","setOpenIndices","initial","item","index","toggleItem","willBeOpen","prev","i","cn","isOpen","headingContent","bodyContent","headerId","panelId","Icon","Text","import_react","import_jsx_runtime","Collapsible","title","children","variant","defaultOpen","controlledIsOpen","onToggle","className","internalOpen","setInternalOpen","Accordion","nextOpen","React","import_separator","import_jsx_runtime","Separator","className","orientation","props","ref","BaseSeparator","cn","import_jsx_runtime","SettingsPanel","title","children","className","contentClassName","collapsible","defaultOpen","headingLevel","content","cn","Collapsible","Heading","Card","import_react","import_jsx_runtime","getInitials","name","trimmed","parts","colorTints","getHashColor","hash","i","index","Avatar","React","src","alt","size","shape","fallbackIcon","className","props","ref","imgError","setImgError","initials","accessibleAlt","sizeStyles","iconSizeStyles","shapeStyle","colorStyle","hasValidImage","cn","Icon","import_react","import_jsx_runtime","Dropzone","React","accept","maxSizeMB","disabled","controlledPreviewUrl","value","showPreview","previewType","title","subtitle","icon","onFileSelect","onFileRemove","onError","className","id","name","ref","inputRef","isDragging","setIsDragging","internalPreviewUrl","setInternalPreviewUrl","internalPreviewType","setInternalPreviewType","imageLoadError","setImageLoadError","generatedUrlRef","isVid","url","activePreviewUrl","handleFile","file","fileMB","msg","isImg","handleDragEnter","e","handleDragOver","handleDragLeave","handleDrop","handleClick","handleInputChange","handleRemove","isVideo","hasPreview","cn","Icon","Button","import_react","import_jsx_runtime","formatBytes","bytes","decimals","k","dm","sizes","i","FileUpload","React","accept","multiple","disabled","maxSizeBytes","buttonText","buttonVariant","buttonSize","buttonIcon","Icon","placeholder","clearable","value","onChange","onError","className","id","name","ref","inputRef","internalFiles","setInternalFiles","activeFiles","handleButtonClick","handleFileChange","e","selected","oversized","f","msg","handleClear","cn","Button","import_react","import_jsx_runtime","Dialog","open","onOpenChange","trigger","children","className","BaseDialog","eventDetails","React","cn","DialogTitle","props","DialogDescription","DialogClose","import_react","import_jsx_runtime","variantStyles","Popover","trigger","children","title","open","defaultOpen","onOpenChange","side","align","sideOffset","variant","showCloseButton","showArrow","className","BasePopover","nextOpen","React","cn","Icon","PopoverTitle","props","PopoverDescription","PopoverClose","import_jsx_runtime","Skeleton","className","props","cn","import_react","import_jsx_runtime","levelColorMap","iconMap","variantColorClasses","radiusClasses","Alert","color","level","variant","title","message","children","action","onClose","radius","className","visible","setVisible","resolvedColor","iconName","colorClass","colorStyle","handleDismiss","body","cn","Icon","Button","import_jsx_runtime","EmptyState","title","description","icon","primaryAction","secondaryAction","children","className","renderIcon","Icon","cn","Heading","Text","Button","import_react","import_jsx_runtime","sizeClasses","colorClasses","Spinner","React","size","color","label","className","props","ref","cn","import_react_dom","import_jsx_runtime","SubmitButton","label","pending","Button","AuthFormUI","mode","onModeChange","formAction","actionState","onGoogleSignIn","title","description","Heading","Text","Field","Input","Icon","import_jsx_runtime","TabSelection","tabs","activeTabId","onTabClick","onAddClick","className","tab","isActive","Button","e","Icon","import_react","import_jsx_runtime","SearchInput","React","className","value","defaultValue","onChange","onSearch","onClear","showClearButton","placeholder","onKeyDown","props","ref","internalRef","handleClear","handleKeyDown","e","hasValue","cn","Input","Icon","import_react","import_react","useClipboard","options","timeout","onSuccess","onError","copied","setCopied","error","setError","timerRef","copy","text","textarea","successful","err","copyError","import_jsx_runtime","CopyButton","React","value","label","successLabel","timeout","onCopied","onCopyError","copyIcon","successIcon","showIcon","variant","color","size","radius","isIconOnly","className","props","ref","copy","copied","useClipboard","currentIcon","Icon","currentLabel","Button","cn","import_jsx_runtime","colorBadgeStyles","Stepper","steps","activeStepId","onStepClick","orientation","color","size","className","activeIndex","s","colorStyle","resolveStatus","step","index","cn","idx","status","isCurrent","isComplete","isClickable","stepLabel","Icon","isLast","import_jsx_runtime","SEO","title","description","image","url","type","siteTitle","fullTitle","currentUrl","import_victory","import_jsx_runtime","DistributionBarChart","data","alt","chartWidth","chartHeight","average","referenceLineValue","referenceLineLabel","label","maxCount","d","labels","x","datum","labelText","import_victory","import_jsx_runtime","DistributionHistogram","data","alt","label","average","referenceLineValue","referenceLineLabel","chartWidth","chartHeight","binSize","maxLength","r","maxX","boundaries","i","x","datum","items","d","labelText","import_jsx_runtime","LineGraph","data","highlightPoints","minX","maxX","minY","maxY","width","height","strokeColor","strokeWidth","fillColor","showGrid","showAxisLabels","xUnit","padding","className","svgWidth","svgHeight","hasData","calculatedMinX","d","calculatedMaxX","xSpan","calculatedMinY","calculatedMaxY","ySpan","getCanvasX","x","getCanvasY","y","pathData","p","i","fillPathData","cn"]}
1
+ {"version":3,"sources":["../src/index.ts","#style-inject:#style-inject","../src/styles/index.css","../src/ui/utils.ts","../src/ui/foundations/Typography.tsx","../src/ui/foundations/Icon.tsx","../src/ui/foundations/IconRegistry.tsx","../src/ui/foundations/SocialLinks.tsx","../src/ui/foundations/CodeBlock.tsx","../src/ui/foundations/Anchor.tsx","../src/ui/forms/Button.tsx","../src/ui/forms/Input.tsx","../src/ui/forms/Select.tsx","../src/ui/forms/Slider.tsx","../src/ui/forms/SliderWithNumberField.tsx","../src/ui/forms/NumberField.tsx","../src/ui/forms/Dropdown.tsx","../src/ui/forms/Switch.tsx","../src/ui/feedback/Tooltip.tsx","../src/ui/forms/Label.tsx","../src/ui/forms/TabRadio.tsx","../src/ui/forms/Field.tsx","../src/ui/forms/TextArea.tsx","../src/ui/forms/Checkbox.tsx","../src/ui/forms/PeerbotsColorSelector.tsx","../src/ui/forms/ChipGroup.tsx","../src/ui/layout/Card.tsx","../src/ui/layout/Accordion.tsx","../src/ui/layout/Collapsible.tsx","../src/ui/layout/Separator.tsx","../src/ui/layout/SettingsPanel.tsx","../src/ui/media/Avatar.tsx","../src/ui/media/Dropzone.tsx","../src/ui/media/FileUpload.tsx","../src/ui/feedback/Dialog.tsx","../src/ui/feedback/Popover.tsx","../src/ui/feedback/Skeleton.tsx","../src/ui/feedback/Alert.tsx","../src/ui/feedback/EmptyState.tsx","../src/ui/feedback/Spinner.tsx","../src/ui/patterns/AuthFormUI.tsx","../src/ui/patterns/TabSelection.tsx","../src/ui/patterns/SearchInput.tsx","../src/ui/patterns/CopyButton.tsx","../src/ui/patterns/useClipboard.ts","../src/ui/patterns/Stepper.tsx","../src/helpers/SEO.tsx","../src/charts/DistributionBarChart.tsx","../src/charts/DistributionHistogram.tsx","../src/charts/LineGraph.tsx"],"sourcesContent":["// src/index.ts\nimport \"./styles/index.css\"; // Ensure CSS is bundled\n\nexport * from \"./ui\";\nexport * from \"./helpers/SEO\";\nexport * from \"./charts\";\n","\n export default function styleInject(css, { insertAt } = {}) {\n if (!css || typeof document === 'undefined') return\n \n const head = document.head || document.getElementsByTagName('head')[0]\n const style = document.createElement('style')\n style.type = 'text/css'\n \n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild)\n } else {\n head.appendChild(style)\n }\n } else {\n head.appendChild(style)\n }\n \n if (style.styleSheet) {\n style.styleSheet.cssText = css\n } else {\n style.appendChild(document.createTextNode(css))\n }\n }\n ","import styleInject from '#style-inject';styleInject(\"/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */@layer properties;@layer theme,base,components,utilities;@layer theme{:root,:host{--pb-font-sans: \\\"Avenir\\\", \\\"Nunito\\\", sans-serif;--pb-font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \\\"Liberation Mono\\\", \\\"Courier New\\\", monospace;--pb-color-red-50: oklch(97.1% .013 17.38);--pb-color-red-100: oklch(93.6% .032 17.717);--pb-color-red-200: oklch(88.5% .062 18.334);--pb-color-red-300: oklch(80.8% .114 19.571);--pb-color-red-400: oklch(70.4% .191 22.216);--pb-color-red-500: oklch(63.7% .237 25.331);--pb-color-red-600: oklch(57.7% .245 27.325);--pb-color-red-700: oklch(50.5% .213 27.518);--pb-color-red-800: oklch(44.4% .177 26.899);--pb-color-red-900: oklch(39.6% .141 25.723);--pb-color-red-950: oklch(25.8% .092 26.042);--pb-color-amber-50: oklch(98.7% .022 95.277);--pb-color-amber-100: oklch(96.2% .059 95.617);--pb-color-amber-200: oklch(92.4% .12 95.746);--pb-color-amber-300: oklch(87.9% .169 91.605);--pb-color-amber-400: oklch(82.8% .189 84.429);--pb-color-amber-500: oklch(76.9% .188 70.08);--pb-color-amber-600: oklch(66.6% .179 58.318);--pb-color-amber-800: oklch(47.3% .137 46.201);--pb-color-amber-900: oklch(41.4% .112 45.904);--pb-color-amber-950: oklch(27.9% .077 45.635);--pb-color-yellow-500: oklch(79.5% .184 86.047);--pb-color-green-500: oklch(72.3% .219 149.579);--pb-color-emerald-50: oklch(97.9% .021 166.113);--pb-color-emerald-100: oklch(95% .052 163.051);--pb-color-emerald-200: oklch(90.5% .093 164.15);--pb-color-emerald-500: oklch(69.6% .17 162.48);--pb-color-emerald-600: oklch(59.6% .145 163.225);--pb-color-emerald-700: oklch(50.8% .118 165.612);--pb-color-emerald-800: oklch(43.2% .095 166.913);--pb-color-emerald-900: oklch(37.8% .077 168.94);--pb-color-emerald-950: oklch(26.2% .051 172.552);--pb-color-teal-50: oklch(98.4% .014 180.72);--pb-color-teal-100: oklch(95.3% .051 180.801);--pb-color-teal-200: oklch(91% .096 180.426);--pb-color-teal-500: oklch(70.4% .14 182.503);--pb-color-teal-700: oklch(51.1% .096 186.391);--pb-color-teal-800: oklch(43.7% .078 188.216);--pb-color-teal-900: oklch(38.6% .063 188.416);--pb-color-teal-950: oklch(27.7% .046 192.524);--pb-color-blue-100: oklch(93.2% .032 255.585);--pb-color-blue-200: oklch(88.2% .059 254.128);--pb-color-blue-500: oklch(62.3% .214 259.815);--pb-color-blue-900: oklch(37.9% .146 265.522);--pb-color-indigo-950: oklch(25.7% .09 281.288);--pb-color-purple-100: oklch(94.6% .033 307.174);--pb-color-purple-200: oklch(90.2% .063 306.703);--pb-color-purple-900: oklch(38.1% .176 304.987);--pb-color-rose-100: oklch(94.1% .03 12.58);--pb-color-rose-200: oklch(89.2% .058 10.001);--pb-color-rose-300: oklch(81% .117 11.638);--pb-color-rose-700: oklch(51.4% .222 16.935);--pb-color-rose-800: oklch(45.5% .188 13.697);--pb-color-rose-900: oklch(41% .159 10.272);--pb-color-rose-950: oklch(27.1% .105 12.094);--pb-color-slate-500: oklch(55.4% .046 257.417);--pb-color-slate-600: oklch(44.6% .043 257.281);--pb-color-slate-700: oklch(37.2% .044 257.287);--pb-color-slate-800: oklch(27.9% .041 260.031);--pb-color-slate-900: oklch(20.8% .042 265.755);--pb-color-slate-950: oklch(12.9% .042 264.695);--pb-color-gray-50: oklch(98.5% .002 247.839);--pb-color-gray-100: oklch(96.7% .003 264.542);--pb-color-gray-200: oklch(92.8% .006 264.531);--pb-color-gray-300: oklch(87.2% .01 258.338);--pb-color-gray-400: oklch(70.7% .022 261.325);--pb-color-gray-500: oklch(55.1% .027 264.364);--pb-color-gray-600: oklch(44.6% .03 256.802);--pb-color-gray-700: oklch(37.3% .034 259.733);--pb-color-gray-800: oklch(27.8% .033 256.848);--pb-color-gray-900: oklch(21% .034 264.665);--pb-color-gray-950: oklch(13% .028 261.692);--pb-color-black: #000;--pb-color-white: #fff;--pb-spacing: .25rem;--pb-container-xs: 20rem;--pb-container-sm: 24rem;--pb-container-md: 28rem;--pb-container-lg: 32rem;--pb-container-xl: 36rem;--pb-container-2xl: 42rem;--pb-container-3xl: 48rem;--pb-container-4xl: 56rem;--pb-container-5xl: 64rem;--pb-text-xs: .75rem;--pb-text-xs--line-height: calc(1 / .75);--pb-text-sm: .875rem;--pb-text-sm--line-height: calc(1.25 / .875);--pb-text-base: 1rem;--pb-text-base--line-height: 1.5 ;--pb-text-lg: 1.125rem;--pb-text-lg--line-height: calc(1.75 / 1.125);--pb-text-xl: 1.25rem;--pb-text-xl--line-height: calc(1.75 / 1.25);--pb-text-2xl: 1.5rem;--pb-text-2xl--line-height: calc(2 / 1.5);--pb-text-3xl: 1.875rem;--pb-text-3xl--line-height: 1.2 ;--pb-text-4xl: 2.25rem;--pb-text-4xl--line-height: calc(2.5 / 2.25);--pb-font-weight-normal: 400;--pb-font-weight-medium: 500;--pb-font-weight-semibold: 600;--pb-font-weight-bold: 700;--pb-tracking-tight: -.025em;--pb-tracking-wider: .05em;--pb-leading-tight: 1.25;--pb-leading-snug: 1.375;--pb-leading-normal: 1.5;--pb-leading-relaxed: 1.625;--pb-radius-sm: .25rem;--pb-radius-md: .375rem;--pb-radius-lg: .5rem;--pb-radius-xl: .75rem;--pb-radius-2xl: 1rem;--pb-radius-3xl: 1.5rem;--pb-ease-in-out: cubic-bezier(.4, 0, .2, 1);--pb-animate-spin: spin 1s linear infinite;--pb-animate-pulse: pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--pb-blur-xs: 4px;--pb-blur-xl: 24px;--pb-blur-2xl: 40px;--pb-default-transition-duration: .15s;--pb-default-transition-timing-function: cubic-bezier(.4, 0, .2, 1);--pb-default-font-family: var(--pb-font-sans);--pb-default-mono-font-family: var(--pb-font-mono);--pb-color-primary: #46d9d9;--pb-color-dark-primary: #0f766e;--pb-color-secondary: #e86e8a;--pb-color-accent: #d9e021;--pb-color-accent-two: #4273ff;--pb-color-danger: #e86e8a;--pb-color-light-bg: #d8e7eb;--pb-sidebar-bg: #f9ffff;--pb-color-peerbots-pink: #e96c8a;--pb-color-peerbots-teal: #5fc7cc;--pb-color-peerbots-darkteal: #0f766e;--pb-color-peerbots-darkblue: #2e3a59;--pb-color-peerbots-olive: #82871f;--pb-color-peerbots-dark: #1a1a1a;--pb-color-peerbots-light: #f8f9fa}}@layer base{*,:after,:before,::backdrop,::file-selector-button{box-sizing:border-box;margin:0;padding:0;border:0 solid}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;tab-size:4;font-family:var(--pb-default-font-family, -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", Roboto, \\\"Helvetica Neue\\\", \\\"Noto Sans\\\", Arial, sans-serif, \\\"Apple Color Emoji\\\", \\\"Segoe UI Emoji\\\", \\\"Segoe UI Symbol\\\", \\\"Noto Color Emoji\\\");font-feature-settings:var(--pb-default-font-feature-settings, normal);font-variation-settings:var(--pb-default-font-variation-settings, normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--pb-default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \\\"Liberation Mono\\\", \\\"Courier New\\\", monospace);font-feature-settings:var(--pb-default-mono-font-feature-settings, normal);font-variation-settings:var(--pb-default-mono-font-variation-settings, normal);font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea,::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;border-radius:0;background-color:transparent;opacity:1}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px){::placeholder{color:currentcolor;@supports (color: color-mix(in lab,red,red)){color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]),::file-selector-button{appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer utilities{.pb\\\\:pointer-events-none{pointer-events:none}.pb\\\\:invisible{visibility:hidden}.pb\\\\:visible{visibility:visible}.pb\\\\:sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border-width:0}.pb\\\\:absolute{position:absolute}.pb\\\\:fixed{position:fixed}.pb\\\\:relative{position:relative}.pb\\\\:inset-0{inset:calc(var(--pb-spacing) * 0)}.pb\\\\:inset-y-0{inset-block:calc(var(--pb-spacing) * 0)}.pb\\\\:top-1\\\\/2{top:50%}.pb\\\\:top-3{top:calc(var(--pb-spacing) * 3)}.pb\\\\:top-6{top:calc(var(--pb-spacing) * 6)}.pb\\\\:top-8{top:calc(var(--pb-spacing) * 8)}.pb\\\\:top-\\\\[50\\\\%\\\\]{top:50%}.pb\\\\:right-0{right:calc(var(--pb-spacing) * 0)}.pb\\\\:right-3{right:calc(var(--pb-spacing) * 3)}.pb\\\\:right-6{right:calc(var(--pb-spacing) * 6)}.pb\\\\:-bottom-0{bottom:calc(var(--pb-spacing) * -0)}.pb\\\\:bottom-6{bottom:calc(var(--pb-spacing) * 6)}.pb\\\\:left-0{left:calc(var(--pb-spacing) * 0)}.pb\\\\:left-4{left:calc(var(--pb-spacing) * 4)}.pb\\\\:left-6{left:calc(var(--pb-spacing) * 6)}.pb\\\\:left-\\\\[50\\\\%\\\\]{left:50%}.pb\\\\:z-0{z-index:0}.pb\\\\:z-10{z-index:10}.pb\\\\:z-20{z-index:20}.pb\\\\:z-50{z-index:50}.pb\\\\:m-0{margin:calc(var(--pb-spacing) * 0)}.pb\\\\:m-1{margin:calc(var(--pb-spacing) * 1)}.pb\\\\:-mx-1{margin-inline:calc(var(--pb-spacing) * -1)}.pb\\\\:mx-1{margin-inline:calc(var(--pb-spacing) * 1)}.pb\\\\:mx-2{margin-inline:calc(var(--pb-spacing) * 2)}.pb\\\\:mx-auto{margin-inline:auto}.pb\\\\:my-1{margin-block:calc(var(--pb-spacing) * 1)}.pb\\\\:my-2{margin-block:calc(var(--pb-spacing) * 2)}.pb\\\\:my-4{margin-block:calc(var(--pb-spacing) * 4)}.pb\\\\:my-6{margin-block:calc(var(--pb-spacing) * 6)}.pb\\\\:-mt-6{margin-top:calc(var(--pb-spacing) * -6)}.pb\\\\:mt-0\\\\.5{margin-top:calc(var(--pb-spacing) * .5)}.pb\\\\:mt-1{margin-top:calc(var(--pb-spacing) * 1)}.pb\\\\:mt-2{margin-top:calc(var(--pb-spacing) * 2)}.pb\\\\:mt-3{margin-top:calc(var(--pb-spacing) * 3)}.pb\\\\:mt-4{margin-top:calc(var(--pb-spacing) * 4)}.pb\\\\:mt-6{margin-top:calc(var(--pb-spacing) * 6)}.pb\\\\:-mr-1{margin-right:calc(var(--pb-spacing) * -1)}.pb\\\\:mr-1{margin-right:calc(var(--pb-spacing) * 1)}.pb\\\\:mr-2{margin-right:calc(var(--pb-spacing) * 2)}.pb\\\\:mb-0{margin-bottom:calc(var(--pb-spacing) * 0)}.pb\\\\:mb-1{margin-bottom:calc(var(--pb-spacing) * 1)}.pb\\\\:mb-2{margin-bottom:calc(var(--pb-spacing) * 2)}.pb\\\\:mb-3{margin-bottom:calc(var(--pb-spacing) * 3)}.pb\\\\:mb-4{margin-bottom:calc(var(--pb-spacing) * 4)}.pb\\\\:mb-6{margin-bottom:calc(var(--pb-spacing) * 6)}.pb\\\\:-ml-1{margin-left:calc(var(--pb-spacing) * -1)}.pb\\\\:ml-2{margin-left:calc(var(--pb-spacing) * 2)}.pb\\\\:ml-7{margin-left:calc(var(--pb-spacing) * 7)}.pb\\\\:box-border{box-sizing:border-box}.pb\\\\:block{display:block}.pb\\\\:flex{display:flex}.pb\\\\:grid{display:grid}.pb\\\\:hidden{display:none}.pb\\\\:inline-block{display:inline-block}.pb\\\\:inline-flex{display:inline-flex}.pb\\\\:table-cell{display:table-cell}.pb\\\\:table-row{display:table-row}.pb\\\\:h-0\\\\.5{height:calc(var(--pb-spacing) * .5)}.pb\\\\:h-1\\\\.5{height:calc(var(--pb-spacing) * 1.5)}.pb\\\\:h-3{height:calc(var(--pb-spacing) * 3)}.pb\\\\:h-3\\\\.5{height:calc(var(--pb-spacing) * 3.5)}.pb\\\\:h-4{height:calc(var(--pb-spacing) * 4)}.pb\\\\:h-4\\\\.5{height:calc(var(--pb-spacing) * 4.5)}.pb\\\\:h-5{height:calc(var(--pb-spacing) * 5)}.pb\\\\:h-6{height:calc(var(--pb-spacing) * 6)}.pb\\\\:h-7{height:calc(var(--pb-spacing) * 7)}.pb\\\\:h-8{height:calc(var(--pb-spacing) * 8)}.pb\\\\:h-9{height:calc(var(--pb-spacing) * 9)}.pb\\\\:h-10{height:calc(var(--pb-spacing) * 10)}.pb\\\\:h-12{height:calc(var(--pb-spacing) * 12)}.pb\\\\:h-14{height:calc(var(--pb-spacing) * 14)}.pb\\\\:h-16{height:calc(var(--pb-spacing) * 16)}.pb\\\\:h-28{height:calc(var(--pb-spacing) * 28)}.pb\\\\:h-32{height:calc(var(--pb-spacing) * 32)}.pb\\\\:h-36{height:calc(var(--pb-spacing) * 36)}.pb\\\\:h-56{height:calc(var(--pb-spacing) * 56)}.pb\\\\:h-72{height:calc(var(--pb-spacing) * 72)}.pb\\\\:h-80{height:calc(var(--pb-spacing) * 80)}.pb\\\\:h-\\\\[1px\\\\]{height:1px}.pb\\\\:h-auto{height:auto}.pb\\\\:h-full{height:100%}.pb\\\\:h-px{height:1px}.pb\\\\:max-h-20{max-height:calc(var(--pb-spacing) * 20)}.pb\\\\:max-h-60{max-height:calc(var(--pb-spacing) * 60)}.pb\\\\:min-h-\\\\[36px\\\\]{min-height:36px}.pb\\\\:w-0\\\\.5{width:calc(var(--pb-spacing) * .5)}.pb\\\\:w-1\\\\/2{width:50%}.pb\\\\:w-2\\\\.5{width:calc(var(--pb-spacing) * 2.5)}.pb\\\\:w-2\\\\/3{width:calc(2 / 3 * 100%)}.pb\\\\:w-3{width:calc(var(--pb-spacing) * 3)}.pb\\\\:w-3\\\\.5{width:calc(var(--pb-spacing) * 3.5)}.pb\\\\:w-3\\\\/4{width:75%}.pb\\\\:w-3\\\\/5{width:calc(3 / 5 * 100%)}.pb\\\\:w-4{width:calc(var(--pb-spacing) * 4)}.pb\\\\:w-4\\\\.5{width:calc(var(--pb-spacing) * 4.5)}.pb\\\\:w-4\\\\/5{width:80%}.pb\\\\:w-5{width:calc(var(--pb-spacing) * 5)}.pb\\\\:w-6{width:calc(var(--pb-spacing) * 6)}.pb\\\\:w-7{width:calc(var(--pb-spacing) * 7)}.pb\\\\:w-8{width:calc(var(--pb-spacing) * 8)}.pb\\\\:w-9{width:calc(var(--pb-spacing) * 9)}.pb\\\\:w-10{width:calc(var(--pb-spacing) * 10)}.pb\\\\:w-11{width:calc(var(--pb-spacing) * 11)}.pb\\\\:w-11\\\\/12{width:calc(11 / 12 * 100%)}.pb\\\\:w-12{width:calc(var(--pb-spacing) * 12)}.pb\\\\:w-14{width:calc(var(--pb-spacing) * 14)}.pb\\\\:w-16{width:calc(var(--pb-spacing) * 16)}.pb\\\\:w-20{width:calc(var(--pb-spacing) * 20)}.pb\\\\:w-24{width:calc(var(--pb-spacing) * 24)}.pb\\\\:w-28{width:calc(var(--pb-spacing) * 28)}.pb\\\\:w-32{width:calc(var(--pb-spacing) * 32)}.pb\\\\:w-40{width:calc(var(--pb-spacing) * 40)}.pb\\\\:w-48{width:calc(var(--pb-spacing) * 48)}.pb\\\\:w-56{width:calc(var(--pb-spacing) * 56)}.pb\\\\:w-64{width:calc(var(--pb-spacing) * 64)}.pb\\\\:w-80{width:calc(var(--pb-spacing) * 80)}.pb\\\\:w-96{width:calc(var(--pb-spacing) * 96)}.pb\\\\:w-\\\\[1px\\\\]{width:1px}.pb\\\\:w-\\\\[320px\\\\]{width:320px}.pb\\\\:w-\\\\[380px\\\\]{width:380px}.pb\\\\:w-\\\\[400px\\\\]{width:400px}.pb\\\\:w-\\\\[420px\\\\]{width:420px}.pb\\\\:w-\\\\[460px\\\\]{width:460px}.pb\\\\:w-\\\\[480px\\\\]{width:480px}.pb\\\\:w-\\\\[500px\\\\]{width:500px}.pb\\\\:w-\\\\[520px\\\\]{width:520px}.pb\\\\:w-\\\\[540px\\\\]{width:540px}.pb\\\\:w-\\\\[560px\\\\]{width:560px}.pb\\\\:w-\\\\[600px\\\\]{width:600px}.pb\\\\:w-\\\\[var\\\\(--anchor-width\\\\)\\\\]{width:var(--anchor-width)}.pb\\\\:w-auto{width:auto}.pb\\\\:w-full{width:100%}.pb\\\\:max-w-2xl{max-width:var(--pb-container-2xl)}.pb\\\\:max-w-3xl{max-width:var(--pb-container-3xl)}.pb\\\\:max-w-4xl{max-width:var(--pb-container-4xl)}.pb\\\\:max-w-5xl{max-width:var(--pb-container-5xl)}.pb\\\\:max-w-\\\\[90vw\\\\]{max-width:90vw}.pb\\\\:max-w-\\\\[120px\\\\]{max-width:120px}.pb\\\\:max-w-\\\\[200px\\\\]{max-width:200px}.pb\\\\:max-w-lg{max-width:var(--pb-container-lg)}.pb\\\\:max-w-md{max-width:var(--pb-container-md)}.pb\\\\:max-w-sm{max-width:var(--pb-container-sm)}.pb\\\\:max-w-xl{max-width:var(--pb-container-xl)}.pb\\\\:max-w-xs{max-width:var(--pb-container-xs)}.pb\\\\:min-w-0{min-width:calc(var(--pb-spacing) * 0)}.pb\\\\:min-w-\\\\[8rem\\\\]{min-width:8rem}.pb\\\\:min-w-\\\\[120px\\\\]{min-width:120px}.pb\\\\:min-w-\\\\[240px\\\\]{min-width:240px}.pb\\\\:min-w-\\\\[400px\\\\]{min-width:400px}.pb\\\\:flex-1{flex:1}.pb\\\\:flex-none{flex:none}.pb\\\\:flex-shrink-0,.pb\\\\:shrink-0{flex-shrink:0}.pb\\\\:flex-grow{flex-grow:1}.pb\\\\:translate-x-\\\\[-50\\\\%\\\\]{--tw-translate-x: -50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.pb\\\\:-translate-y-1\\\\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.pb\\\\:translate-y-\\\\[-50\\\\%\\\\]{--tw-translate-y: -50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.pb\\\\:scale-110{--tw-scale-x: 110%;--tw-scale-y: 110%;--tw-scale-z: 110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.pb\\\\:rotate-180{rotate:180deg}.pb\\\\:transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.pb\\\\:animate-pulse{animation:var(--pb-animate-pulse)}.pb\\\\:animate-spin{animation:var(--pb-animate-spin)}.pb\\\\:cursor-crosshair{cursor:crosshair}.pb\\\\:cursor-default{cursor:default}.pb\\\\:cursor-ew-resize{cursor:ew-resize}.pb\\\\:cursor-grab{cursor:grab}.pb\\\\:cursor-help{cursor:help}.pb\\\\:cursor-not-allowed{cursor:not-allowed}.pb\\\\:cursor-pointer{cursor:pointer}.pb\\\\:touch-none{touch-action:none}.pb\\\\:list-none{list-style-type:none}.pb\\\\:appearance-none{appearance:none}.pb\\\\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.pb\\\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.pb\\\\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.pb\\\\:grid-rows-\\\\[0fr\\\\]{grid-template-rows:0fr}.pb\\\\:grid-rows-\\\\[1fr\\\\]{grid-template-rows:1fr}.pb\\\\:flex-col{flex-direction:column}.pb\\\\:flex-row{flex-direction:row}.pb\\\\:flex-wrap{flex-wrap:wrap}.pb\\\\:items-center{align-items:center}.pb\\\\:items-end{align-items:flex-end}.pb\\\\:items-start{align-items:flex-start}.pb\\\\:justify-between{justify-content:space-between}.pb\\\\:justify-center{justify-content:center}.pb\\\\:justify-end{justify-content:flex-end}.pb\\\\:gap-0{gap:calc(var(--pb-spacing) * 0)}.pb\\\\:gap-1{gap:calc(var(--pb-spacing) * 1)}.pb\\\\:gap-1\\\\.5{gap:calc(var(--pb-spacing) * 1.5)}.pb\\\\:gap-2{gap:calc(var(--pb-spacing) * 2)}.pb\\\\:gap-2\\\\.5{gap:calc(var(--pb-spacing) * 2.5)}.pb\\\\:gap-3{gap:calc(var(--pb-spacing) * 3)}.pb\\\\:gap-3\\\\.5{gap:calc(var(--pb-spacing) * 3.5)}.pb\\\\:gap-4{gap:calc(var(--pb-spacing) * 4)}.pb\\\\:gap-6{gap:calc(var(--pb-spacing) * 6)}.pb\\\\:gap-8{gap:calc(var(--pb-spacing) * 8)}.pb\\\\:gap-10{gap:calc(var(--pb-spacing) * 10)}.pb\\\\:gap-12{gap:calc(var(--pb-spacing) * 12)}.pb\\\\:gap-16{gap:calc(var(--pb-spacing) * 16)}.pb\\\\:space-y-1{:where(&>:not(:last-child)){--tw-space-y-reverse: 0;margin-block-start:calc(calc(var(--pb-spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--pb-spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}}.pb\\\\:space-y-1\\\\.5{:where(&>:not(:last-child)){--tw-space-y-reverse: 0;margin-block-start:calc(calc(var(--pb-spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--pb-spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}}.pb\\\\:space-y-2{:where(&>:not(:last-child)){--tw-space-y-reverse: 0;margin-block-start:calc(calc(var(--pb-spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--pb-spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}}.pb\\\\:space-y-2\\\\.5{:where(&>:not(:last-child)){--tw-space-y-reverse: 0;margin-block-start:calc(calc(var(--pb-spacing) * 2.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--pb-spacing) * 2.5) * calc(1 - var(--tw-space-y-reverse)))}}.pb\\\\:space-y-3{:where(&>:not(:last-child)){--tw-space-y-reverse: 0;margin-block-start:calc(calc(var(--pb-spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--pb-spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}}.pb\\\\:space-y-4{:where(&>:not(:last-child)){--tw-space-y-reverse: 0;margin-block-start:calc(calc(var(--pb-spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--pb-spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}}.pb\\\\:space-y-6{:where(&>:not(:last-child)){--tw-space-y-reverse: 0;margin-block-start:calc(calc(var(--pb-spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--pb-spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}}.pb\\\\:space-x-1{:where(&>:not(:last-child)){--tw-space-x-reverse: 0;margin-inline-start:calc(calc(var(--pb-spacing) * 1) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--pb-spacing) * 1) * calc(1 - var(--tw-space-x-reverse)))}}.pb\\\\:space-x-2{:where(&>:not(:last-child)){--tw-space-x-reverse: 0;margin-inline-start:calc(calc(var(--pb-spacing) * 2) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--pb-spacing) * 2) * calc(1 - var(--tw-space-x-reverse)))}}.pb\\\\:space-x-4{:where(&>:not(:last-child)){--tw-space-x-reverse: 0;margin-inline-start:calc(calc(var(--pb-spacing) * 4) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--pb-spacing) * 4) * calc(1 - var(--tw-space-x-reverse)))}}.pb\\\\:self-center{align-self:center}.pb\\\\:self-start{align-self:flex-start}.pb\\\\:truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pb\\\\:overflow-auto{overflow:auto}.pb\\\\:overflow-hidden{overflow:hidden}.pb\\\\:overflow-x-auto{overflow-x:auto}.pb\\\\:rounded{border-radius:.25rem}.pb\\\\:rounded-2xl{border-radius:var(--pb-radius-2xl)}.pb\\\\:rounded-3xl{border-radius:var(--pb-radius-3xl)}.pb\\\\:rounded-full{border-radius:calc(infinity * 1px)}.pb\\\\:rounded-lg{border-radius:var(--pb-radius-lg)}.pb\\\\:rounded-md{border-radius:var(--pb-radius-md)}.pb\\\\:rounded-none{border-radius:0}.pb\\\\:rounded-sm{border-radius:var(--pb-radius-sm)}.pb\\\\:rounded-xl{border-radius:var(--pb-radius-xl)}.pb\\\\:rounded-l-md{border-top-left-radius:var(--pb-radius-md);border-bottom-left-radius:var(--pb-radius-md)}.pb\\\\:rounded-r-md{border-top-right-radius:var(--pb-radius-md);border-bottom-right-radius:var(--pb-radius-md)}.pb\\\\:border{border-style:var(--tw-border-style);border-width:1px}.pb\\\\:border-0{border-style:var(--tw-border-style);border-width:0px}.pb\\\\:border-2{border-style:var(--tw-border-style);border-width:2px}.pb\\\\:border-4{border-style:var(--tw-border-style);border-width:4px}.pb\\\\:border-\\\\[1\\\\.5px\\\\]{border-style:var(--tw-border-style);border-width:1.5px}.pb\\\\:border-\\\\[2\\\\.5px\\\\]{border-style:var(--tw-border-style);border-width:2.5px}.pb\\\\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.pb\\\\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.pb\\\\:border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.pb\\\\:border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.pb\\\\:border-dashed{--tw-border-style: dashed;border-style:dashed}.pb\\\\:border-none{--tw-border-style: none;border-style:none}.pb\\\\:border-amber-200{border-color:var(--pb-color-amber-200)}.pb\\\\:border-amber-400{border-color:var(--pb-color-amber-400)}.pb\\\\:border-amber-600{border-color:var(--pb-color-amber-600)}.pb\\\\:border-black{border-color:var(--pb-color-black)}.pb\\\\:border-black\\\\/5{border-color:var(--pb-color-black);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--pb-color-black) 5%,transparent)}}.pb\\\\:border-blue-200{border-color:var(--pb-color-blue-200)}.pb\\\\:border-emerald-200{border-color:var(--pb-color-emerald-200)}.pb\\\\:border-emerald-500{border-color:var(--pb-color-emerald-500)}.pb\\\\:border-emerald-600{border-color:var(--pb-color-emerald-600)}.pb\\\\:border-gray-100{border-color:var(--pb-color-gray-100)}.pb\\\\:border-gray-200{border-color:var(--pb-color-gray-200)}.pb\\\\:border-gray-200\\\\/80{border-color:var(--pb-color-gray-200);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--pb-color-gray-200) 80%,transparent)}}.pb\\\\:border-gray-300{border-color:var(--pb-color-gray-300)}.pb\\\\:border-gray-400{border-color:var(--pb-color-gray-400)}.pb\\\\:border-gray-500{border-color:var(--pb-color-gray-500)}.pb\\\\:border-gray-700\\\\/50{border-color:var(--pb-color-gray-700);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--pb-color-gray-700) 50%,transparent)}}.pb\\\\:border-gray-800{border-color:var(--pb-color-gray-800)}.pb\\\\:border-gray-800\\\\/80{border-color:var(--pb-color-gray-800);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--pb-color-gray-800) 80%,transparent)}}.pb\\\\:border-peerbots-darkblue{border-color:var(--pb-color-peerbots-darkblue)}.pb\\\\:border-peerbots-darkblue\\\\/40{border-color:var(--pb-color-peerbots-darkblue);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--pb-color-peerbots-darkblue) 40%,transparent)}}.pb\\\\:border-peerbots-darkteal{border-color:var(--pb-color-peerbots-darkteal)}.pb\\\\:border-peerbots-darkteal\\\\/30{border-color:var(--pb-color-peerbots-darkteal);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--pb-color-peerbots-darkteal) 30%,transparent)}}.pb\\\\:border-peerbots-pink{border-color:var(--pb-color-peerbots-pink)}.pb\\\\:border-peerbots-pink\\\\/30{border-color:var(--pb-color-peerbots-pink);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--pb-color-peerbots-pink) 30%,transparent)}}.pb\\\\:border-peerbots-pink\\\\/40{border-color:var(--pb-color-peerbots-pink);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--pb-color-peerbots-pink) 40%,transparent)}}.pb\\\\:border-peerbots-teal{border-color:var(--pb-color-peerbots-teal)}.pb\\\\:border-peerbots-teal\\\\/30{border-color:var(--pb-color-peerbots-teal);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--pb-color-peerbots-teal) 30%,transparent)}}.pb\\\\:border-peerbots-teal\\\\/40{border-color:var(--pb-color-peerbots-teal);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--pb-color-peerbots-teal) 40%,transparent)}}.pb\\\\:border-primary{border-color:var(--pb-color-primary)}.pb\\\\:border-primary\\\\/40{border-color:var(--pb-color-primary);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--pb-color-primary) 40%,transparent)}}.pb\\\\:border-purple-200{border-color:var(--pb-color-purple-200)}.pb\\\\:border-red-200{border-color:var(--pb-color-red-200)}.pb\\\\:border-red-300{border-color:var(--pb-color-red-300)}.pb\\\\:border-red-400{border-color:var(--pb-color-red-400)}.pb\\\\:border-red-500{border-color:var(--pb-color-red-500)}.pb\\\\:border-red-600{border-color:var(--pb-color-red-600)}.pb\\\\:border-rose-200{border-color:var(--pb-color-rose-200)}.pb\\\\:border-rose-300{border-color:var(--pb-color-rose-300)}.pb\\\\:border-rose-700{border-color:var(--pb-color-rose-700)}.pb\\\\:border-slate-700{border-color:var(--pb-color-slate-700)}.pb\\\\:border-teal-200{border-color:var(--pb-color-teal-200)}.pb\\\\:border-teal-500{border-color:var(--pb-color-teal-500)}.pb\\\\:border-teal-700{border-color:var(--pb-color-teal-700)}.pb\\\\:border-transparent{border-color:transparent}.pb\\\\:border-white{border-color:var(--pb-color-white)}.pb\\\\:border-white\\\\/40{border-color:var(--pb-color-white);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--pb-color-white) 40%,transparent)}}.pb\\\\:border-white\\\\/50{border-color:var(--pb-color-white);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--pb-color-white) 50%,transparent)}}.pb\\\\:border-t-transparent{border-top-color:transparent}.pb\\\\:bg-\\\\[\\\\#1e222b\\\\]{background-color:#1e222b}.pb\\\\:bg-\\\\[\\\\#1e222b\\\\]\\\\/90{background-color:color-mix(in oklab,#1e222b 90%,transparent)}.pb\\\\:bg-\\\\[\\\\#161920\\\\]{background-color:#161920}.pb\\\\:bg-amber-50{background-color:var(--pb-color-amber-50)}.pb\\\\:bg-amber-50\\\\/40{background-color:var(--pb-color-amber-50);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-amber-50) 40%,transparent)}}.pb\\\\:bg-amber-100{background-color:var(--pb-color-amber-100)}.pb\\\\:bg-amber-300{background-color:var(--pb-color-amber-300)}.pb\\\\:bg-amber-500{background-color:var(--pb-color-amber-500)}.pb\\\\:bg-black\\\\/10{background-color:var(--pb-color-black);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-black) 10%,transparent)}}.pb\\\\:bg-black\\\\/15{background-color:var(--pb-color-black);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-black) 15%,transparent)}}.pb\\\\:bg-black\\\\/30{background-color:var(--pb-color-black);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-black) 30%,transparent)}}.pb\\\\:bg-black\\\\/40{background-color:var(--pb-color-black);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-black) 40%,transparent)}}.pb\\\\:bg-blue-100{background-color:var(--pb-color-blue-100)}.pb\\\\:bg-dark-primary{background-color:var(--pb-color-dark-primary)}.pb\\\\:bg-emerald-50{background-color:var(--pb-color-emerald-50)}.pb\\\\:bg-emerald-50\\\\/40{background-color:var(--pb-color-emerald-50);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-emerald-50) 40%,transparent)}}.pb\\\\:bg-emerald-50\\\\/60{background-color:var(--pb-color-emerald-50);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-emerald-50) 60%,transparent)}}.pb\\\\:bg-emerald-100{background-color:var(--pb-color-emerald-100)}.pb\\\\:bg-emerald-700{background-color:var(--pb-color-emerald-700)}.pb\\\\:bg-gray-50{background-color:var(--pb-color-gray-50)}.pb\\\\:bg-gray-50\\\\/40{background-color:var(--pb-color-gray-50);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-gray-50) 40%,transparent)}}.pb\\\\:bg-gray-50\\\\/50{background-color:var(--pb-color-gray-50);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-gray-50) 50%,transparent)}}.pb\\\\:bg-gray-50\\\\/70{background-color:var(--pb-color-gray-50);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-gray-50) 70%,transparent)}}.pb\\\\:bg-gray-50\\\\/80{background-color:var(--pb-color-gray-50);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-gray-50) 80%,transparent)}}.pb\\\\:bg-gray-100{background-color:var(--pb-color-gray-100)}.pb\\\\:bg-gray-100\\\\/90{background-color:var(--pb-color-gray-100);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-gray-100) 90%,transparent)}}.pb\\\\:bg-gray-200{background-color:var(--pb-color-gray-200)}.pb\\\\:bg-gray-600{background-color:var(--pb-color-gray-600)}.pb\\\\:bg-gray-800{background-color:var(--pb-color-gray-800)}.pb\\\\:bg-gray-800\\\\/70{background-color:var(--pb-color-gray-800);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-gray-800) 70%,transparent)}}.pb\\\\:bg-gray-800\\\\/80{background-color:var(--pb-color-gray-800);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-gray-800) 80%,transparent)}}.pb\\\\:bg-gray-900{background-color:var(--pb-color-gray-900)}.pb\\\\:bg-green-500\\\\/80{background-color:var(--pb-color-green-500);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-green-500) 80%,transparent)}}.pb\\\\:bg-peerbots-darkblue{background-color:var(--pb-color-peerbots-darkblue)}.pb\\\\:bg-peerbots-darkblue\\\\/10{background-color:var(--pb-color-peerbots-darkblue);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-darkblue) 10%,transparent)}}.pb\\\\:bg-peerbots-darkblue\\\\/15{background-color:var(--pb-color-peerbots-darkblue);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-darkblue) 15%,transparent)}}.pb\\\\:bg-peerbots-darkblue\\\\/20{background-color:var(--pb-color-peerbots-darkblue);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-darkblue) 20%,transparent)}}.pb\\\\:bg-peerbots-darkteal{background-color:var(--pb-color-peerbots-darkteal)}.pb\\\\:bg-peerbots-pink{background-color:var(--pb-color-peerbots-pink)}.pb\\\\:bg-peerbots-pink\\\\/5{background-color:var(--pb-color-peerbots-pink);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-pink) 5%,transparent)}}.pb\\\\:bg-peerbots-pink\\\\/10{background-color:var(--pb-color-peerbots-pink);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-pink) 10%,transparent)}}.pb\\\\:bg-peerbots-pink\\\\/15{background-color:var(--pb-color-peerbots-pink);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-pink) 15%,transparent)}}.pb\\\\:bg-peerbots-pink\\\\/20{background-color:var(--pb-color-peerbots-pink);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-pink) 20%,transparent)}}.pb\\\\:bg-peerbots-teal{background-color:var(--pb-color-peerbots-teal)}.pb\\\\:bg-peerbots-teal\\\\/5{background-color:var(--pb-color-peerbots-teal);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-teal) 5%,transparent)}}.pb\\\\:bg-peerbots-teal\\\\/10{background-color:var(--pb-color-peerbots-teal);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-teal) 10%,transparent)}}.pb\\\\:bg-peerbots-teal\\\\/15{background-color:var(--pb-color-peerbots-teal);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-teal) 15%,transparent)}}.pb\\\\:bg-peerbots-teal\\\\/20{background-color:var(--pb-color-peerbots-teal);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-teal) 20%,transparent)}}.pb\\\\:bg-peerbots-teal\\\\/30{background-color:var(--pb-color-peerbots-teal);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-teal) 30%,transparent)}}.pb\\\\:bg-primary{background-color:var(--pb-color-primary)}.pb\\\\:bg-primary\\\\/5{background-color:var(--pb-color-primary);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-primary) 5%,transparent)}}.pb\\\\:bg-primary\\\\/10{background-color:var(--pb-color-primary);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-primary) 10%,transparent)}}.pb\\\\:bg-primary\\\\/20{background-color:var(--pb-color-primary);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-primary) 20%,transparent)}}.pb\\\\:bg-primary\\\\/30{background-color:var(--pb-color-primary);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-primary) 30%,transparent)}}.pb\\\\:bg-purple-100{background-color:var(--pb-color-purple-100)}.pb\\\\:bg-red-50{background-color:var(--pb-color-red-50)}.pb\\\\:bg-red-50\\\\/40{background-color:var(--pb-color-red-50);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-red-50) 40%,transparent)}}.pb\\\\:bg-red-50\\\\/60{background-color:var(--pb-color-red-50);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-red-50) 60%,transparent)}}.pb\\\\:bg-red-100{background-color:var(--pb-color-red-100)}.pb\\\\:bg-red-500\\\\/80{background-color:var(--pb-color-red-500);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-red-500) 80%,transparent)}}.pb\\\\:bg-red-600{background-color:var(--pb-color-red-600)}.pb\\\\:bg-red-700{background-color:var(--pb-color-red-700)}.pb\\\\:bg-rose-100{background-color:var(--pb-color-rose-100)}.pb\\\\:bg-rose-700{background-color:var(--pb-color-rose-700)}.pb\\\\:bg-rose-800{background-color:var(--pb-color-rose-800)}.pb\\\\:bg-slate-900{background-color:var(--pb-color-slate-900)}.pb\\\\:bg-teal-50{background-color:var(--pb-color-teal-50)}.pb\\\\:bg-teal-50\\\\/40{background-color:var(--pb-color-teal-50);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-teal-50) 40%,transparent)}}.pb\\\\:bg-teal-100{background-color:var(--pb-color-teal-100)}.pb\\\\:bg-teal-700{background-color:var(--pb-color-teal-700)}.pb\\\\:bg-transparent{background-color:transparent}.pb\\\\:bg-white{background-color:var(--pb-color-white)}.pb\\\\:bg-white\\\\/50{background-color:var(--pb-color-white);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-white) 50%,transparent)}}.pb\\\\:bg-white\\\\/80{background-color:var(--pb-color-white);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-white) 80%,transparent)}}.pb\\\\:bg-white\\\\/90{background-color:var(--pb-color-white);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-white) 90%,transparent)}}.pb\\\\:bg-yellow-500\\\\/80{background-color:var(--pb-color-yellow-500);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-yellow-500) 80%,transparent)}}.pb\\\\:bg-gradient-to-br{--tw-gradient-position: to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.pb\\\\:bg-gradient-to-r{--tw-gradient-position: to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.pb\\\\:bg-gradient-to-tr{--tw-gradient-position: to top right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.pb\\\\:from-peerbots-teal{--tw-gradient-from: var(--pb-color-peerbots-teal);--tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.pb\\\\:from-slate-900{--tw-gradient-from: var(--pb-color-slate-900);--tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.pb\\\\:via-indigo-950{--tw-gradient-via: var(--pb-color-indigo-950);--tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-via-stops)}.pb\\\\:via-peerbots-pink{--tw-gradient-via: var(--pb-color-peerbots-pink);--tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-via-stops)}.pb\\\\:via-slate-800{--tw-gradient-via: var(--pb-color-slate-800);--tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-via-stops)}.pb\\\\:to-peerbots-darkblue{--tw-gradient-to: var(--pb-color-peerbots-darkblue);--tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.pb\\\\:to-teal-950{--tw-gradient-to: var(--pb-color-teal-950);--tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.pb\\\\:bg-clip-text{background-clip:text}.pb\\\\:fill-white{fill:var(--pb-color-white)}.pb\\\\:fill-white\\\\/90{fill:var(--pb-color-white);@supports (color: color-mix(in lab,red,red)){fill:color-mix(in oklab,var(--pb-color-white) 90%,transparent)}}.pb\\\\:stroke-gray-100{stroke:var(--pb-color-gray-100)}.pb\\\\:stroke-gray-200{stroke:var(--pb-color-gray-200)}.pb\\\\:stroke-white\\\\/50{stroke:var(--pb-color-white);@supports (color: color-mix(in lab,red,red)){stroke:color-mix(in oklab,var(--pb-color-white) 50%,transparent)}}.pb\\\\:object-contain{object-fit:contain}.pb\\\\:object-cover{object-fit:cover}.pb\\\\:p-0{padding:calc(var(--pb-spacing) * 0)}.pb\\\\:p-0\\\\.5{padding:calc(var(--pb-spacing) * .5)}.pb\\\\:p-1{padding:calc(var(--pb-spacing) * 1)}.pb\\\\:p-1\\\\.5{padding:calc(var(--pb-spacing) * 1.5)}.pb\\\\:p-2{padding:calc(var(--pb-spacing) * 2)}.pb\\\\:p-2\\\\.5{padding:calc(var(--pb-spacing) * 2.5)}.pb\\\\:p-3{padding:calc(var(--pb-spacing) * 3)}.pb\\\\:p-3\\\\.5{padding:calc(var(--pb-spacing) * 3.5)}.pb\\\\:p-4{padding:calc(var(--pb-spacing) * 4)}.pb\\\\:p-4\\\\.5{padding:calc(var(--pb-spacing) * 4.5)}.pb\\\\:p-5{padding:calc(var(--pb-spacing) * 5)}.pb\\\\:p-6{padding:calc(var(--pb-spacing) * 6)}.pb\\\\:p-8{padding:calc(var(--pb-spacing) * 8)}.pb\\\\:p-10{padding:calc(var(--pb-spacing) * 10)}.pb\\\\:p-12{padding:calc(var(--pb-spacing) * 12)}.pb\\\\:px-0\\\\.5{padding-inline:calc(var(--pb-spacing) * .5)}.pb\\\\:px-1{padding-inline:calc(var(--pb-spacing) * 1)}.pb\\\\:px-1\\\\.5{padding-inline:calc(var(--pb-spacing) * 1.5)}.pb\\\\:px-2{padding-inline:calc(var(--pb-spacing) * 2)}.pb\\\\:px-2\\\\.5{padding-inline:calc(var(--pb-spacing) * 2.5)}.pb\\\\:px-3{padding-inline:calc(var(--pb-spacing) * 3)}.pb\\\\:px-3\\\\.5{padding-inline:calc(var(--pb-spacing) * 3.5)}.pb\\\\:px-4{padding-inline:calc(var(--pb-spacing) * 4)}.pb\\\\:px-4\\\\.5{padding-inline:calc(var(--pb-spacing) * 4.5)}.pb\\\\:px-5{padding-inline:calc(var(--pb-spacing) * 5)}.pb\\\\:px-6{padding-inline:calc(var(--pb-spacing) * 6)}.pb\\\\:px-8{padding-inline:calc(var(--pb-spacing) * 8)}.pb\\\\:py-0\\\\.5{padding-block:calc(var(--pb-spacing) * .5)}.pb\\\\:py-1{padding-block:calc(var(--pb-spacing) * 1)}.pb\\\\:py-1\\\\.5{padding-block:calc(var(--pb-spacing) * 1.5)}.pb\\\\:py-2{padding-block:calc(var(--pb-spacing) * 2)}.pb\\\\:py-2\\\\.5{padding-block:calc(var(--pb-spacing) * 2.5)}.pb\\\\:py-3{padding-block:calc(var(--pb-spacing) * 3)}.pb\\\\:py-3\\\\.5{padding-block:calc(var(--pb-spacing) * 3.5)}.pb\\\\:py-4{padding-block:calc(var(--pb-spacing) * 4)}.pb\\\\:pt-0\\\\.5{padding-top:calc(var(--pb-spacing) * .5)}.pb\\\\:pt-2{padding-top:calc(var(--pb-spacing) * 2)}.pb\\\\:pr-2\\\\.5{padding-right:calc(var(--pb-spacing) * 2.5)}.pb\\\\:pr-3{padding-right:calc(var(--pb-spacing) * 3)}.pb\\\\:pr-4{padding-right:calc(var(--pb-spacing) * 4)}.pb\\\\:pr-8{padding-right:calc(var(--pb-spacing) * 8)}.pb\\\\:pr-9{padding-right:calc(var(--pb-spacing) * 9)}.pb\\\\:pr-10{padding-right:calc(var(--pb-spacing) * 10)}.pb\\\\:pb-2{padding-bottom:calc(var(--pb-spacing) * 2)}.pb\\\\:pb-2\\\\.5{padding-bottom:calc(var(--pb-spacing) * 2.5)}.pb\\\\:pb-5{padding-bottom:calc(var(--pb-spacing) * 5)}.pb\\\\:pb-6{padding-bottom:calc(var(--pb-spacing) * 6)}.pb\\\\:pl-1\\\\.5{padding-left:calc(var(--pb-spacing) * 1.5)}.pb\\\\:pl-3{padding-left:calc(var(--pb-spacing) * 3)}.pb\\\\:pl-10{padding-left:calc(var(--pb-spacing) * 10)}.pb\\\\:text-center{text-align:center}.pb\\\\:text-left{text-align:left}.pb\\\\:text-right{text-align:right}.pb\\\\:align-middle{vertical-align:middle}.pb\\\\:font-mono{font-family:var(--pb-font-mono)}.pb\\\\:font-sans{font-family:var(--pb-font-sans)}.pb\\\\:text-2xl{font-size:var(--pb-text-2xl);line-height:var(--tw-leading, var(--pb-text-2xl--line-height))}.pb\\\\:text-3xl{font-size:var(--pb-text-3xl);line-height:var(--tw-leading, var(--pb-text-3xl--line-height))}.pb\\\\:text-4xl{font-size:var(--pb-text-4xl);line-height:var(--tw-leading, var(--pb-text-4xl--line-height))}.pb\\\\:text-base{font-size:var(--pb-text-base);line-height:var(--tw-leading, var(--pb-text-base--line-height))}.pb\\\\:text-lg{font-size:var(--pb-text-lg);line-height:var(--tw-leading, var(--pb-text-lg--line-height))}.pb\\\\:text-sm{font-size:var(--pb-text-sm);line-height:var(--tw-leading, var(--pb-text-sm--line-height))}.pb\\\\:text-xl{font-size:var(--pb-text-xl);line-height:var(--tw-leading, var(--pb-text-xl--line-height))}.pb\\\\:text-xs{font-size:var(--pb-text-xs);line-height:var(--tw-leading, var(--pb-text-xs--line-height))}.pb\\\\:text-\\\\[8px\\\\]{font-size:8px}.pb\\\\:text-\\\\[9px\\\\]{font-size:9px}.pb\\\\:text-\\\\[10px\\\\]{font-size:10px}.pb\\\\:text-\\\\[11px\\\\]{font-size:11px}.pb\\\\:leading-6{--tw-leading: calc(var(--pb-spacing) * 6);line-height:calc(var(--pb-spacing) * 6)}.pb\\\\:leading-none{--tw-leading: 1;line-height:1}.pb\\\\:leading-normal{--tw-leading: var(--pb-leading-normal);line-height:var(--pb-leading-normal)}.pb\\\\:leading-relaxed{--tw-leading: var(--pb-leading-relaxed);line-height:var(--pb-leading-relaxed)}.pb\\\\:leading-snug{--tw-leading: var(--pb-leading-snug);line-height:var(--pb-leading-snug)}.pb\\\\:leading-tight{--tw-leading: var(--pb-leading-tight);line-height:var(--pb-leading-tight)}.pb\\\\:font-bold{--tw-font-weight: var(--pb-font-weight-bold);font-weight:var(--pb-font-weight-bold)}.pb\\\\:font-medium{--tw-font-weight: var(--pb-font-weight-medium);font-weight:var(--pb-font-weight-medium)}.pb\\\\:font-normal{--tw-font-weight: var(--pb-font-weight-normal);font-weight:var(--pb-font-weight-normal)}.pb\\\\:font-semibold{--tw-font-weight: var(--pb-font-weight-semibold);font-weight:var(--pb-font-weight-semibold)}.pb\\\\:tracking-tight{--tw-tracking: var(--pb-tracking-tight);letter-spacing:var(--pb-tracking-tight)}.pb\\\\:tracking-wider{--tw-tracking: var(--pb-tracking-wider);letter-spacing:var(--pb-tracking-wider)}.pb\\\\:whitespace-normal{white-space:normal}.pb\\\\:whitespace-nowrap{white-space:nowrap}.pb\\\\:text-\\\\[\\\\#636814\\\\]{color:#636814}.pb\\\\:text-amber-600{color:var(--pb-color-amber-600)}.pb\\\\:text-amber-800{color:var(--pb-color-amber-800)}.pb\\\\:text-amber-900{color:var(--pb-color-amber-900)}.pb\\\\:text-amber-950{color:var(--pb-color-amber-950)}.pb\\\\:text-black{color:var(--pb-color-black)}.pb\\\\:text-blue-500{color:var(--pb-color-blue-500)}.pb\\\\:text-blue-900{color:var(--pb-color-blue-900)}.pb\\\\:text-current{color:currentcolor}.pb\\\\:text-dark-primary{color:var(--pb-color-dark-primary)}.pb\\\\:text-emerald-600{color:var(--pb-color-emerald-600)}.pb\\\\:text-emerald-700{color:var(--pb-color-emerald-700)}.pb\\\\:text-emerald-800{color:var(--pb-color-emerald-800)}.pb\\\\:text-emerald-900{color:var(--pb-color-emerald-900)}.pb\\\\:text-emerald-950{color:var(--pb-color-emerald-950)}.pb\\\\:text-gray-100{color:var(--pb-color-gray-100)}.pb\\\\:text-gray-200{color:var(--pb-color-gray-200)}.pb\\\\:text-gray-300{color:var(--pb-color-gray-300)}.pb\\\\:text-gray-400{color:var(--pb-color-gray-400)}.pb\\\\:text-gray-500{color:var(--pb-color-gray-500)}.pb\\\\:text-gray-600{color:var(--pb-color-gray-600)}.pb\\\\:text-gray-700{color:var(--pb-color-gray-700)}.pb\\\\:text-gray-800{color:var(--pb-color-gray-800)}.pb\\\\:text-gray-900{color:var(--pb-color-gray-900)}.pb\\\\:text-gray-950{color:var(--pb-color-gray-950)}.pb\\\\:text-green-500{color:var(--pb-color-green-500)}.pb\\\\:text-peerbots-dark{color:var(--pb-color-peerbots-dark)}.pb\\\\:text-peerbots-darkblue{color:var(--pb-color-peerbots-darkblue)}.pb\\\\:text-peerbots-darkteal{color:var(--pb-color-peerbots-darkteal)}.pb\\\\:text-peerbots-pink{color:var(--pb-color-peerbots-pink)}.pb\\\\:text-peerbots-teal{color:var(--pb-color-peerbots-teal)}.pb\\\\:text-primary{color:var(--pb-color-primary)}.pb\\\\:text-purple-900{color:var(--pb-color-purple-900)}.pb\\\\:text-red-400{color:var(--pb-color-red-400)}.pb\\\\:text-red-500{color:var(--pb-color-red-500)}.pb\\\\:text-red-600{color:var(--pb-color-red-600)}.pb\\\\:text-red-700{color:var(--pb-color-red-700)}.pb\\\\:text-red-800{color:var(--pb-color-red-800)}.pb\\\\:text-red-900{color:var(--pb-color-red-900)}.pb\\\\:text-red-950{color:var(--pb-color-red-950)}.pb\\\\:text-rose-800{color:var(--pb-color-rose-800)}.pb\\\\:text-rose-900{color:var(--pb-color-rose-900)}.pb\\\\:text-rose-950{color:var(--pb-color-rose-950)}.pb\\\\:text-slate-500{color:var(--pb-color-slate-500)}.pb\\\\:text-slate-600{color:var(--pb-color-slate-600)}.pb\\\\:text-slate-700{color:var(--pb-color-slate-700)}.pb\\\\:text-slate-950{color:var(--pb-color-slate-950)}.pb\\\\:text-teal-200{color:var(--pb-color-teal-200)}.pb\\\\:text-teal-800{color:var(--pb-color-teal-800)}.pb\\\\:text-teal-900{color:var(--pb-color-teal-900)}.pb\\\\:text-teal-950{color:var(--pb-color-teal-950)}.pb\\\\:text-transparent{color:transparent}.pb\\\\:text-white{color:var(--pb-color-white)}.pb\\\\:text-white\\\\/60{color:var(--pb-color-white);@supports (color: color-mix(in lab,red,red)){color:color-mix(in oklab,var(--pb-color-white) 60%,transparent)}}.pb\\\\:text-white\\\\/80{color:var(--pb-color-white);@supports (color: color-mix(in lab,red,red)){color:color-mix(in oklab,var(--pb-color-white) 80%,transparent)}}.pb\\\\:uppercase{text-transform:uppercase}.pb\\\\:italic{font-style:italic}.pb\\\\:no-underline{text-decoration-line:none}.pb\\\\:underline{text-decoration-line:underline}.pb\\\\:decoration-current{text-decoration-color:currentcolor}.pb\\\\:decoration-dotted{text-decoration-style:dotted}.pb\\\\:underline-offset-4{text-underline-offset:4px}.pb\\\\:opacity-0{opacity:0%}.pb\\\\:opacity-10{opacity:10%}.pb\\\\:opacity-25{opacity:25%}.pb\\\\:opacity-40{opacity:40%}.pb\\\\:opacity-50{opacity:50%}.pb\\\\:opacity-70{opacity:70%}.pb\\\\:opacity-75{opacity:75%}.pb\\\\:opacity-80{opacity:80%}.pb\\\\:opacity-90{opacity:90%}.pb\\\\:opacity-100{opacity:100%}.pb\\\\:shadow{--tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.pb\\\\:shadow-2xl{--tw-shadow: 0 25px 50px -12px var(--tw-shadow-color, rgb(0 0 0 / .25));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.pb\\\\:shadow-lg{--tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.pb\\\\:shadow-md{--tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.pb\\\\:shadow-sm{--tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.pb\\\\:shadow-xl{--tw-shadow: 0 20px 25px -5px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 8px 10px -6px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.pb\\\\:shadow-xs{--tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / .05));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.pb\\\\:ring-0{--tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(0px + 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)}.pb\\\\: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)}.pb\\\\:ring-4{--tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(4px + 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)}.pb\\\\:shadow-peerbots-teal\\\\/10{--tw-shadow-color: var(--pb-color-peerbots-teal);@supports (color: color-mix(in lab,red,red)){--tw-shadow-color: color-mix(in oklab, color-mix(in oklab, var(--pb-color-peerbots-teal) 10%, transparent) var(--tw-shadow-alpha), transparent)}}.pb\\\\:ring-black{--tw-ring-color: var(--pb-color-black)}.pb\\\\:ring-gray-300{--tw-ring-color: var(--pb-color-gray-300)}.pb\\\\:ring-peerbots-darkblue\\\\/20{--tw-ring-color: var(--pb-color-peerbots-darkblue);@supports (color: color-mix(in lab,red,red)){--tw-ring-color: color-mix(in oklab, var(--pb-color-peerbots-darkblue) 20%, transparent)}}.pb\\\\:ring-peerbots-teal\\\\/30{--tw-ring-color: var(--pb-color-peerbots-teal);@supports (color: color-mix(in lab,red,red)){--tw-ring-color: color-mix(in oklab, var(--pb-color-peerbots-teal) 30%, transparent)}}.pb\\\\:ring-primary\\\\/30{--tw-ring-color: var(--pb-color-primary);@supports (color: color-mix(in lab,red,red)){--tw-ring-color: color-mix(in oklab, var(--pb-color-primary) 30%, transparent)}}.pb\\\\:ring-rose-200{--tw-ring-color: var(--pb-color-rose-200)}.pb\\\\:backdrop-blur-2xl{--tw-backdrop-blur: blur(var(--pb-blur-2xl));-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,)}.pb\\\\:backdrop-blur-xl{--tw-backdrop-blur: blur(var(--pb-blur-xl));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.pb\\\\:backdrop-blur-xs{--tw-backdrop-blur: blur(var(--pb-blur-xs));-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,)}.pb\\\\: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(--pb-default-transition-timing-function));transition-duration:var(--tw-duration, var(--pb-default-transition-duration))}.pb\\\\:transition-all{transition-property:all;transition-timing-function:var(--tw-ease, var(--pb-default-transition-timing-function));transition-duration:var(--tw-duration, var(--pb-default-transition-duration))}.pb\\\\: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(--pb-default-transition-timing-function));transition-duration:var(--tw-duration, var(--pb-default-transition-duration))}.pb\\\\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease, var(--pb-default-transition-timing-function));transition-duration:var(--tw-duration, var(--pb-default-transition-duration))}.pb\\\\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease, var(--pb-default-transition-timing-function));transition-duration:var(--tw-duration, var(--pb-default-transition-duration))}.pb\\\\:duration-150{--tw-duration: .15s;transition-duration:.15s}.pb\\\\:duration-200{--tw-duration: .2s;transition-duration:.2s}.pb\\\\:duration-300{--tw-duration: .3s;transition-duration:.3s}.pb\\\\:ease-in-out{--tw-ease: var(--pb-ease-in-out);transition-timing-function:var(--pb-ease-in-out)}.pb\\\\:outline-none{--tw-outline-style: none;outline-style:none}.pb\\\\:select-none{-webkit-user-select:none;user-select:none}.pb\\\\:ring-inset{--tw-ring-inset: inset}.pb\\\\:group-focus-within\\\\:text-gray-800{&:is(:where(.pb\\\\:group):focus-within *){color:var(--pb-color-gray-800)}}.pb\\\\:group-hover\\\\:scale-102{&:is(:where(.pb\\\\:group):hover *){@media(hover:hover){--tw-scale-x: 102%;--tw-scale-y: 102%;--tw-scale-z: 102%;scale:var(--tw-scale-x) var(--tw-scale-y)}}}.pb\\\\:group-hover\\\\:opacity-100{&:is(:where(.pb\\\\:group):hover *){@media(hover:hover){opacity:100%}}}.pb\\\\:placeholder\\\\:text-gray-400{&::placeholder{color:var(--pb-color-gray-400)}}.pb\\\\:focus-within\\\\:ring-2{&:focus-within{--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)}}.pb\\\\:focus-within\\\\:ring-peerbots-teal{&:focus-within{--tw-ring-color: var(--pb-color-peerbots-teal)}}.pb\\\\:focus-within\\\\:ring-primary{&:focus-within{--tw-ring-color: var(--pb-color-primary)}}.pb\\\\:hover\\\\:-translate-y-0\\\\.5{&:hover{@media(hover:hover){--tw-translate-y: calc(var(--pb-spacing) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y)}}}.pb\\\\:hover\\\\:scale-105{&:hover{@media(hover:hover){--tw-scale-x: 105%;--tw-scale-y: 105%;--tw-scale-z: 105%;scale:var(--tw-scale-x) var(--tw-scale-y)}}}.pb\\\\:hover\\\\:scale-110{&:hover{@media(hover:hover){--tw-scale-x: 110%;--tw-scale-y: 110%;--tw-scale-z: 110%;scale:var(--tw-scale-x) var(--tw-scale-y)}}}.pb\\\\:hover\\\\:border-gray-300{&:hover{@media(hover:hover){border-color:var(--pb-color-gray-300)}}}.pb\\\\:hover\\\\:border-gray-400{&:hover{@media(hover:hover){border-color:var(--pb-color-gray-400)}}}.pb\\\\:hover\\\\:border-gray-500{&:hover{@media(hover:hover){border-color:var(--pb-color-gray-500)}}}.pb\\\\:hover\\\\:border-peerbots-darkteal{&:hover{@media(hover:hover){border-color:var(--pb-color-peerbots-darkteal)}}}.pb\\\\:hover\\\\:border-peerbots-teal\\\\/30{&:hover{@media(hover:hover){border-color:var(--pb-color-peerbots-teal);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--pb-color-peerbots-teal) 30%,transparent)}}}}.pb\\\\:hover\\\\:border-primary{&:hover{@media(hover:hover){border-color:var(--pb-color-primary)}}}.pb\\\\:hover\\\\:border-primary\\\\/80{&:hover{@media(hover:hover){border-color:var(--pb-color-primary);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--pb-color-primary) 80%,transparent)}}}}.pb\\\\:hover\\\\:bg-amber-50{&:hover{@media(hover:hover){background-color:var(--pb-color-amber-50)}}}.pb\\\\:hover\\\\:bg-amber-100{&:hover{@media(hover:hover){background-color:var(--pb-color-amber-100)}}}.pb\\\\:hover\\\\:bg-amber-600{&:hover{@media(hover:hover){background-color:var(--pb-color-amber-600)}}}.pb\\\\:hover\\\\:bg-black\\\\/5{&:hover{@media(hover:hover){background-color:var(--pb-color-black);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-black) 5%,transparent)}}}}.pb\\\\:hover\\\\:bg-dark-primary{&:hover{@media(hover:hover){background-color:var(--pb-color-dark-primary)}}}.pb\\\\:hover\\\\:bg-emerald-50{&:hover{@media(hover:hover){background-color:var(--pb-color-emerald-50)}}}.pb\\\\:hover\\\\:bg-emerald-100{&:hover{@media(hover:hover){background-color:var(--pb-color-emerald-100)}}}.pb\\\\:hover\\\\:bg-emerald-800{&:hover{@media(hover:hover){background-color:var(--pb-color-emerald-800)}}}.pb\\\\:hover\\\\:bg-gray-50{&:hover{@media(hover:hover){background-color:var(--pb-color-gray-50)}}}.pb\\\\:hover\\\\:bg-gray-100{&:hover{@media(hover:hover){background-color:var(--pb-color-gray-100)}}}.pb\\\\:hover\\\\:bg-gray-100\\\\/50{&:hover{@media(hover:hover){background-color:var(--pb-color-gray-100);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-gray-100) 50%,transparent)}}}}.pb\\\\:hover\\\\:bg-gray-200{&:hover{@media(hover:hover){background-color:var(--pb-color-gray-200)}}}.pb\\\\:hover\\\\:bg-gray-700{&:hover{@media(hover:hover){background-color:var(--pb-color-gray-700)}}}.pb\\\\:hover\\\\:bg-peerbots-darkblue\\\\/10{&:hover{@media(hover:hover){background-color:var(--pb-color-peerbots-darkblue);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-darkblue) 10%,transparent)}}}}.pb\\\\:hover\\\\:bg-peerbots-darkblue\\\\/25{&:hover{@media(hover:hover){background-color:var(--pb-color-peerbots-darkblue);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-darkblue) 25%,transparent)}}}}.pb\\\\:hover\\\\:bg-peerbots-darkteal{&:hover{@media(hover:hover){background-color:var(--pb-color-peerbots-darkteal)}}}.pb\\\\:hover\\\\:bg-peerbots-pink\\\\/10{&:hover{@media(hover:hover){background-color:var(--pb-color-peerbots-pink);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-pink) 10%,transparent)}}}}.pb\\\\:hover\\\\:bg-peerbots-pink\\\\/30{&:hover{@media(hover:hover){background-color:var(--pb-color-peerbots-pink);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-pink) 30%,transparent)}}}}.pb\\\\:hover\\\\:bg-peerbots-teal\\\\/10{&:hover{@media(hover:hover){background-color:var(--pb-color-peerbots-teal);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-teal) 10%,transparent)}}}}.pb\\\\:hover\\\\:bg-peerbots-teal\\\\/15{&:hover{@media(hover:hover){background-color:var(--pb-color-peerbots-teal);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-teal) 15%,transparent)}}}}.pb\\\\:hover\\\\:bg-peerbots-teal\\\\/30{&:hover{@media(hover:hover){background-color:var(--pb-color-peerbots-teal);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-teal) 30%,transparent)}}}}.pb\\\\:hover\\\\:bg-primary\\\\/5{&:hover{@media(hover:hover){background-color:var(--pb-color-primary);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-primary) 5%,transparent)}}}}.pb\\\\:hover\\\\:bg-primary\\\\/10{&:hover{@media(hover:hover){background-color:var(--pb-color-primary);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-primary) 10%,transparent)}}}}.pb\\\\:hover\\\\:bg-primary\\\\/30{&:hover{@media(hover:hover){background-color:var(--pb-color-primary);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-primary) 30%,transparent)}}}}.pb\\\\:hover\\\\:bg-red-50{&:hover{@media(hover:hover){background-color:var(--pb-color-red-50)}}}.pb\\\\:hover\\\\:bg-red-100{&:hover{@media(hover:hover){background-color:var(--pb-color-red-100)}}}.pb\\\\:hover\\\\:bg-red-700{&:hover{@media(hover:hover){background-color:var(--pb-color-red-700)}}}.pb\\\\:hover\\\\:bg-rose-700{&:hover{@media(hover:hover){background-color:var(--pb-color-rose-700)}}}.pb\\\\:hover\\\\:bg-white{&:hover{@media(hover:hover){background-color:var(--pb-color-white)}}}.pb\\\\:hover\\\\:bg-white\\\\/10{&:hover{@media(hover:hover){background-color:var(--pb-color-white);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-white) 10%,transparent)}}}}.pb\\\\:hover\\\\:text-gray-600{&:hover{@media(hover:hover){color:var(--pb-color-gray-600)}}}.pb\\\\:hover\\\\:text-gray-700{&:hover{@media(hover:hover){color:var(--pb-color-gray-700)}}}.pb\\\\:hover\\\\:text-gray-900{&:hover{@media(hover:hover){color:var(--pb-color-gray-900)}}}.pb\\\\:hover\\\\:text-gray-950{&:hover{@media(hover:hover){color:var(--pb-color-gray-950)}}}.pb\\\\:hover\\\\:text-peerbots-darkteal{&:hover{@media(hover:hover){color:var(--pb-color-peerbots-darkteal)}}}.pb\\\\:hover\\\\:text-peerbots-teal{&:hover{@media(hover:hover){color:var(--pb-color-peerbots-teal)}}}.pb\\\\:hover\\\\:text-red-900{&:hover{@media(hover:hover){color:var(--pb-color-red-900)}}}.pb\\\\:hover\\\\:text-rose-950{&:hover{@media(hover:hover){color:var(--pb-color-rose-950)}}}.pb\\\\:hover\\\\:text-teal-900{&:hover{@media(hover:hover){color:var(--pb-color-teal-900)}}}.pb\\\\:hover\\\\:text-teal-950{&:hover{@media(hover:hover){color:var(--pb-color-teal-950)}}}.pb\\\\:hover\\\\:text-white{&:hover{@media(hover:hover){color:var(--pb-color-white)}}}.pb\\\\:hover\\\\:underline{&:hover{@media(hover:hover){text-decoration-line:underline}}}.pb\\\\:hover\\\\:opacity-10{&:hover{@media(hover:hover){opacity:10%}}}.pb\\\\:hover\\\\:opacity-90{&:hover{@media(hover:hover){opacity:90%}}}.pb\\\\:hover\\\\:opacity-100{&:hover{@media(hover:hover){opacity:100%}}}.pb\\\\:hover\\\\:shadow-lg{&:hover{@media(hover:hover){--tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}}.pb\\\\:focus\\\\:ring-0{&:focus{--tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(0px + 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)}}.pb\\\\:focus\\\\:ring-2{&:focus{--tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.pb\\\\:focus\\\\:ring-primary{&:focus{--tw-ring-color: var(--pb-color-primary)}}.pb\\\\:focus\\\\:ring-offset-2{&:focus{--tw-ring-offset-width: 2px;--tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}}.pb\\\\:focus\\\\:outline-none{&:focus{--tw-outline-style: none;outline-style:none}}.pb\\\\:focus\\\\:ring-inset{&:focus{--tw-ring-inset: inset}}.pb\\\\:focus-visible\\\\:ring-2{&:focus-visible{--tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.pb\\\\:focus-visible\\\\:ring-gray-400{&:focus-visible{--tw-ring-color: var(--pb-color-gray-400)}}.pb\\\\:focus-visible\\\\:ring-peerbots-teal{&:focus-visible{--tw-ring-color: var(--pb-color-peerbots-teal)}}.pb\\\\:focus-visible\\\\:ring-primary{&:focus-visible{--tw-ring-color: var(--pb-color-primary)}}.pb\\\\:focus-visible\\\\:ring-offset-1{&:focus-visible{--tw-ring-offset-width: 1px;--tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}}.pb\\\\:focus-visible\\\\:ring-offset-2{&:focus-visible{--tw-ring-offset-width: 2px;--tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}}.pb\\\\:focus-visible\\\\:outline-none{&:focus-visible{--tw-outline-style: none;outline-style:none}}.pb\\\\:disabled\\\\:cursor-not-allowed{&:disabled{cursor:not-allowed}}.pb\\\\:disabled\\\\:opacity-50{&:disabled{opacity:50%}}.pb\\\\:disabled\\\\:hover\\\\:bg-transparent{&:disabled{&:hover{@media(hover:hover){background-color:transparent}}}}.pb\\\\:disabled\\\\:hover\\\\:text-gray-600{&:disabled{&:hover{@media(hover:hover){color:var(--pb-color-gray-600)}}}}.pb\\\\:data-\\\\[checked\\\\]\\\\:translate-x-5{&[data-checked]{--tw-translate-x: calc(var(--pb-spacing) * 5);translate:var(--tw-translate-x) var(--tw-translate-y)}}.pb\\\\:data-\\\\[checked\\\\]\\\\:bg-primary{&[data-checked]{background-color:var(--pb-color-primary)}}.pb\\\\:data-\\\\[highlighted\\\\]\\\\:bg-gray-100{&[data-highlighted]{background-color:var(--pb-color-gray-100)}}.pb\\\\:data-\\\\[highlighted\\\\]\\\\:text-gray-900{&[data-highlighted]{color:var(--pb-color-gray-900)}}.pb\\\\:data-\\\\[pressed\\\\]\\\\:bg-danger\\\\/20{&[data-pressed]{background-color:var(--pb-color-danger);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-danger) 20%,transparent)}}}.pb\\\\:data-\\\\[pressed\\\\]\\\\:bg-primary\\\\/20{&[data-pressed]{background-color:var(--pb-color-primary);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-primary) 20%,transparent)}}}.pb\\\\:data-\\\\[pressed\\\\]\\\\:bg-white{&[data-pressed]{background-color:var(--pb-color-white)}}.pb\\\\:data-\\\\[pressed\\\\]\\\\:text-gray-900{&[data-pressed]{color:var(--pb-color-gray-900)}}.pb\\\\:data-\\\\[pressed\\\\]\\\\:shadow-sm{&[data-pressed]{--tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.pb\\\\:data-\\\\[pressed\\\\]\\\\:ring-1{&[data-pressed]{--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)}}.pb\\\\:data-\\\\[pressed\\\\]\\\\:ring-danger{&[data-pressed]{--tw-ring-color: var(--pb-color-danger)}}.pb\\\\:data-\\\\[pressed\\\\]\\\\:ring-gray-200{&[data-pressed]{--tw-ring-color: var(--pb-color-gray-200)}}.pb\\\\:data-\\\\[pressed\\\\]\\\\:ring-primary{&[data-pressed]{--tw-ring-color: var(--pb-color-primary)}}.pb\\\\:data-\\\\[state\\\\=checked\\\\]\\\\:border-primary{&[data-state=checked]{border-color:var(--pb-color-primary)}}.pb\\\\:data-\\\\[state\\\\=checked\\\\]\\\\:bg-primary{&[data-state=checked]{background-color:var(--pb-color-primary)}}.pb\\\\:data-\\\\[state\\\\=checked\\\\]\\\\:text-white{&[data-state=checked]{color:var(--pb-color-white)}}.pb\\\\:data-\\\\[unchecked\\\\]\\\\:translate-x-0{&[data-unchecked]{--tw-translate-x: calc(var(--pb-spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}}.pb\\\\:data-\\\\[unchecked\\\\]\\\\:bg-gray-200{&[data-unchecked]{background-color:var(--pb-color-gray-200)}}.pb\\\\:sm\\\\:m-4{@media(width>=40rem){margin:calc(var(--pb-spacing) * 4)}}.pb\\\\:sm\\\\:grid-cols-3{@media(width>=40rem){grid-template-columns:repeat(3,minmax(0,1fr))}}.pb\\\\:sm\\\\:text-sm{@media(width>=40rem){font-size:var(--pb-text-sm);line-height:var(--tw-leading, var(--pb-text-sm--line-height))}}.pb\\\\:sm\\\\:leading-6{@media(width>=40rem){--tw-leading: calc(var(--pb-spacing) * 6);line-height:calc(var(--pb-spacing) * 6)}}.pb\\\\:md\\\\:m-10{@media(width>=48rem){margin:calc(var(--pb-spacing) * 10)}}.pb\\\\:md\\\\:grid-cols-4{@media(width>=48rem){grid-template-columns:repeat(4,minmax(0,1fr))}}}.range-vertical{writing-mode:vertical-lr}.pb-tooltip,.pb-tooltip-slow{visibility:hidden;position:absolute;opacity:0%}.pb-has-tooltip:hover+.pb-tooltip{visibility:visible;z-index:50;opacity:100%;transition-property:opacity;transition-timing-function:var(--tw-ease, var(--pb-default-transition-timing-function));transition-duration:var(--tw-duration, var(--pb-default-transition-duration));transition-delay:.3s;--tw-ease: var(--pb-ease-in-out);transition-timing-function:var(--pb-ease-in-out)}.pb-has-tooltip:hover+.pb-tooltip-slow{visibility:visible;z-index:50;opacity:100%;transition-property:opacity;transition-timing-function:var(--tw-ease, var(--pb-default-transition-timing-function));transition-duration:var(--tw-duration, var(--pb-default-transition-duration));transition-delay:1s;--tw-ease: var(--pb-ease-in-out);transition-timing-function:var(--pb-ease-in-out)}@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-scale-x{syntax: \\\"*\\\"; inherits: false; initial-value: 1;}@property --tw-scale-y{syntax: \\\"*\\\"; inherits: false; initial-value: 1;}@property --tw-scale-z{syntax: \\\"*\\\"; inherits: false; initial-value: 1;}@property --tw-rotate-x{syntax: \\\"*\\\"; inherits: false;}@property --tw-rotate-y{syntax: \\\"*\\\"; inherits: false;}@property --tw-rotate-z{syntax: \\\"*\\\"; inherits: false;}@property --tw-skew-x{syntax: \\\"*\\\"; inherits: false;}@property --tw-skew-y{syntax: \\\"*\\\"; inherits: false;}@property --tw-space-y-reverse{syntax: \\\"*\\\"; inherits: false; initial-value: 0;}@property --tw-space-x-reverse{syntax: \\\"*\\\"; inherits: false; initial-value: 0;}@property --tw-border-style{syntax: \\\"*\\\"; inherits: false; initial-value: solid;}@property --tw-gradient-position{syntax: \\\"*\\\"; inherits: false;}@property --tw-gradient-from{syntax: \\\"<color>\\\"; inherits: false; initial-value: #0000;}@property --tw-gradient-via{syntax: \\\"<color>\\\"; inherits: false; initial-value: #0000;}@property --tw-gradient-to{syntax: \\\"<color>\\\"; inherits: false; initial-value: #0000;}@property --tw-gradient-stops{syntax: \\\"*\\\"; inherits: false;}@property --tw-gradient-via-stops{syntax: \\\"*\\\"; inherits: false;}@property --tw-gradient-from-position{syntax: \\\"<length-percentage>\\\"; inherits: false; initial-value: 0%;}@property --tw-gradient-via-position{syntax: \\\"<length-percentage>\\\"; inherits: false; initial-value: 50%;}@property --tw-gradient-to-position{syntax: \\\"<length-percentage>\\\"; inherits: false; initial-value: 100%;}@property --tw-leading{syntax: \\\"*\\\"; inherits: false;}@property --tw-font-weight{syntax: \\\"*\\\"; inherits: false;}@property --tw-tracking{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: 0px;}@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;}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}@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-scale-x: 1;--tw-scale-y: 1;--tw-scale-z: 1;--tw-rotate-x: initial;--tw-rotate-y: initial;--tw-rotate-z: initial;--tw-skew-x: initial;--tw-skew-y: initial;--tw-space-y-reverse: 0;--tw-space-x-reverse: 0;--tw-border-style: solid;--tw-gradient-position: initial;--tw-gradient-from: #0000;--tw-gradient-via: #0000;--tw-gradient-to: #0000;--tw-gradient-stops: initial;--tw-gradient-via-stops: initial;--tw-gradient-from-position: 0%;--tw-gradient-via-position: 50%;--tw-gradient-to-position: 100%;--tw-leading: initial;--tw-font-weight: initial;--tw-tracking: 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}}}\\n\")","import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import React from \"react\";\nimport { cn } from \"../utils\";\nimport { BrandColor, ComponentColor, ComponentSize } from \"../types\";\n\nconst headingSizes: Record<number, string> = {\n 1: \"pb:text-4xl sm:pb:text-5xl pb:font-bold pb:leading-tight\",\n 2: \"pb:text-3xl sm:pb:text-4xl pb:font-bold pb:leading-snug\",\n 3: \"pb:text-2xl sm:pb:text-3xl pb:font-bold pb:leading-snug\",\n 4: \"pb:text-xl sm:pb:text-2xl pb:font-bold pb:leading-snug\",\n 5: \"pb:text-lg sm:pb:text-xl pb:font-bold\",\n 6: \"pb:text-base sm:pb:text-lg pb:font-bold\",\n};\n\nconst headingColorClasses: Record<string, string> = {\n default: \"\",\n teal: \"pb:text-peerbots-darkteal\",\n pink: \"pb:text-rose-800\",\n primary: \"pb:text-dark-primary\",\n darkteal: \"pb:text-peerbots-darkteal\",\n darkblue: \"pb:text-peerbots-darkblue\",\n olive: \"pb:text-[#636814]\",\n dark: \"pb:text-peerbots-dark\",\n white: \"pb:text-white\",\n gradient:\n \"pb:bg-clip-text pb:text-transparent pb:bg-gradient-to-r pb:from-peerbots-teal pb:via-peerbots-pink pb:to-peerbots-darkblue\",\n};\n\nconst textColorClasses: Record<string, string> = {\n default: \"pb:text-slate-950\",\n neutral: \"pb:text-gray-800\",\n muted: \"pb:text-gray-600\",\n error: \"pb:text-red-700 pb:font-medium\",\n success: \"pb:text-emerald-800 pb:font-medium\",\n teal: \"pb:text-peerbots-darkteal\",\n pink: \"pb:text-rose-800\",\n primary: \"pb:text-dark-primary\",\n darkteal: \"pb:text-peerbots-darkteal\",\n darkblue: \"pb:text-peerbots-darkblue\",\n olive: \"pb:text-[#636814]\",\n dark: \"pb:text-peerbots-dark\",\n white: \"pb:text-white\",\n};\n\nconst textSizeClasses: Record<string, string> = {\n xs: \"pb:text-xs pb:leading-normal\",\n sm: \"pb:text-sm pb:leading-relaxed\",\n md: \"pb:text-base pb:leading-relaxed\",\n lg: \"pb:text-lg pb:leading-relaxed\",\n xl: \"pb:text-xl pb:leading-relaxed\",\n lead: \"pb:text-lg sm:pb:text-xl pb:leading-relaxed pb:text-slate-700\",\n};\n\nconst weightClasses = {\n normal: \"pb:font-normal\",\n medium: \"pb:font-medium\",\n semibold: \"pb:font-semibold\",\n bold: \"pb:font-bold\",\n};\n\nexport interface HeadingProps extends React.HTMLAttributes<HTMLHeadingElement> {\n /** Semantic HTML heading level (h1 - h6) */\n level?: 1 | 2 | 3 | 4 | 5 | 6;\n /** Visual heading scale override (defaults to level) */\n size?: 1 | 2 | 3 | 4 | 5 | 6;\n /** Palette color or gradient text fill */\n color?: BrandColor | \"gradient\" | \"default\";\n /** Legacy variant prop (alias for color) */\n variant?: BrandColor | \"gradient\" | \"default\";\n /** Font weight */\n weight?: \"normal\" | \"medium\" | \"semibold\" | \"bold\";\n children?: React.ReactNode;\n}\n\nexport const Heading = ({\n level = 1,\n size,\n color,\n variant,\n weight,\n className,\n children,\n ...props\n}: HeadingProps) => {\n const visualScale = size !== undefined ? size : level;\n const resolvedColor = color || variant || \"default\";\n\n return React.createElement(\n `h${level}`,\n {\n className: cn(\n headingSizes[visualScale],\n headingColorClasses[resolvedColor] || \"\",\n weight && weightClasses[weight],\n className,\n ),\n ...props,\n },\n children,\n );\n};\n\nexport interface TextProps extends React.HTMLAttributes<HTMLElement> {\n /** HTML rendering tag */\n as?: React.ElementType;\n /** Typography scale */\n size?: ComponentSize | \"lead\";\n /** Text color / intent */\n color?: ComponentColor | \"muted\" | \"error\" | \"success\" | \"default\";\n /** Legacy variant prop for convenience / backward compatibility */\n variant?: \"default\" | \"muted\" | \"small\" | \"large\" | \"lead\" | \"error\" | \"success\";\n /** Font weight */\n weight?: \"normal\" | \"medium\" | \"semibold\" | \"bold\";\n /** Text alignment */\n align?: \"left\" | \"center\" | \"right\";\n children?: React.ReactNode;\n}\n\nexport const Text = ({\n as: Component = \"p\",\n size,\n color,\n variant,\n weight,\n align,\n className,\n children,\n ...props\n}: TextProps) => {\n const resolvedSize =\n size ||\n (variant === \"small\"\n ? \"sm\"\n : variant === \"large\"\n ? \"lg\"\n : variant === \"lead\"\n ? \"lead\"\n : \"md\");\n\n const resolvedColor =\n color ||\n (variant === \"muted\"\n ? \"muted\"\n : variant === \"error\"\n ? \"error\"\n : variant === \"success\"\n ? \"success\"\n : \"default\");\n\n return React.createElement(\n Component,\n {\n className: cn(\n textSizeClasses[resolvedSize] || textSizeClasses.md,\n textColorClasses[resolvedColor] || textColorClasses.default,\n weight && weightClasses[weight],\n align && `pb:text-${align}`,\n className,\n ),\n ...props,\n },\n children,\n );\n};\n","import React from \"react\";\nimport { cn } from \"../utils\";\nimport { IconName, icons } from \"./IconRegistry\";\n\nexport type { IconName };\n\nexport interface IconProps extends React.SVGProps<SVGSVGElement> {\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n name?: IconName;\n}\n\nexport const Icon = React.forwardRef<SVGSVGElement, IconProps>(\n ({ className, size = \"md\", name, children, ...props }, ref) => {\n const sizes = {\n sm: \"pb:w-3 pb:h-3\",\n md: \"pb:w-4 pb:h-4\",\n lg: \"pb:w-6 pb:h-6\",\n xl: \"pb:w-8 pb:h-8\",\n };\n\n const iconContent = name ? icons[name] : children;\n\n return (\n <svg\n ref={ref}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={cn(sizes[size], \"pb:inline-block\", className)}\n {...props}\n >\n {iconContent}\n </svg>\n );\n },\n);\n\nIcon.displayName = \"Icon\";\n","import React from \"react\";\n\n/**\n * Raw path data for icons, useful for non-React contexts (like PixiJS Graphics.svg)\n */\nexport const iconPaths = {\n check: \"M20 6 9 17l-5-5\",\n x: \"M18 6 6 18M6 6l12 12\",\n edit: \"M16.862 4.487l1.687-1.688a1.875 1.875 0 112.652 2.652L6.832 19.82a4.5 4.5 0 01-1.897 1.13l-2.685.8.8-2.685a4.5 4.5 0 011.13-1.897L16.863 4.487zm0 0L19.5 7.125\",\n close: \"M6 18L18 6M6 6l12 12\",\n plus: \"M12 4.5v15m7.5-7.5h-15\",\n arrowDown: \"M19.5 13.5L12 21m0 0l-7.5-7.5M12 21V3\", // Points DOWN\n arrowUp: \"M4.5 10.5L12 3m0 0l7.5 7.5M12 3v18\", // Points UP\n clipboard:\n \"M15.75 17.25v3.375c0 .621-.504 1.125-1.125 1.125h-9.75a1.125 1.125 0 0 1-1.125-1.125V7.875c0-.621.504-1.125 1.125-1.125H6.75a9.06 9.06 0 0 1 1.5.124m7.5 10.376h3.375c.621 0 1.125-.504 1.125-1.125V11.25c0-4.46-3.243-8.161-7.5-8.876a9.06 9.06 0 0 0-1.5-.124H9.375c-.621 0-1.125.504-1.125 1.125v3.5m7.5 10.375H9.375a1.125 1.125 0 0 1-1.125-1.125v-9.25m12 6.625v-1.875a3.375 3.375 0 0 0-3.375-3.375h-1.5a1.125 1.125 0 0 1-1.125-1.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H9.75\",\n cloudArrowUp:\n \"M12 16.5V9.75m0 0 3 3m-3-3-3 3M6.75 19.5a4.5 4.5 0 0 1-1.41-8.775 5.25 5.25 0 0 1 10.233-2.33 3 3 0 0 1 3.758 3.848A3.752 3.752 0 0 1 18 19.5H6.75Z\",\n arrowDownToLine: \"M9 12l3 3m0 0 3-3m-3 3V2.25\",\n folder:\n \"M9 8.25H7.5a2.25 2.25 0 0 0-2.25 2.25v9a2.25 2.25 0 0 0 2.25 2.25h9a2.25 2.25 0 0 0 2.25-2.25v-9a2.25 2.25 0 0 0-2.25-2.25H15m0-3-3-3m0 0-3 3m3-3V15\",\n arrowUpFromLine:\n \"M9 8.25H7.5a2.25 2.25 0 0 0-2.25 2.25v9a2.25 2.25 0 0 0 2.25 2.25h9a2.25 2.25 0 0 0 2.25-2.25v-9a2.25 2.25 0 0 0-2.25-2.25H15m0-3-3-3m0 0-3 3m3-3V15\",\n squares:\n \"M2.25 7.125C2.25 6.504 2.754 6 3.375 6h6c.621 0 1.125.504 1.125 1.125v3.75c0 .621-.504 1.125-1.125 1.125h-6a1.125 1.125 0 0 1-1.125-1.125v-3.75ZM14.25 8.625c0-.621.504-1.125 1.125-1.125h5.25c.621 0 1.125.504 1.125 1.125v8.25c0 .621-.504 1.125-1.125 1.125h-5.25a1.125 1.125 0 0 1-1.125-1.125v-8.25ZM3.75 16.125c0-.621.504-1.125 1.125-1.125h5.25c.621 0 1.125.504 1.125 1.125v2.25c0 .621-.504 1.125-1.125 1.125h-5.25a1.125 1.125 0 0 1-1.125-1.125v-2.25Z\",\n tableCells:\n \"M3.375 19.5h17.25m-17.25 0a1.125 1.125 0 0 1-1.125-1.125M3.375 19.5h7.5c.621 0 1.125-.504 1.125-1.125m-9.75 0V5.625m0 12.75v-1.5c0-.621.504-1.125 1.125-1.125m18.375 2.625V5.625m0 12.75c0 .621-.504 1.125-1.125 1.125m1.125-1.125v-1.5c0-.621-.504-1.125-1.125-1.125m0 3.75h-7.5A1.125 1.125 0 0 1 12 18.375m9.75-12.75c0-.621-.504-1.125-1.125-1.125H3.375c-.621 0-1.125.504-1.125 1.125m19.5 0v1.5c0 .621-.504 1.125-1.125 1.125M2.25 5.625v1.5c0 .621.504 1.125 1.125 1.125m0 0h17.25m-17.25 0h7.5c.621 0 1.125.504 1.125 1.125M3.375 8.25c-.621 0-1.125.504-1.125 1.125v1.5c0 .621.504 1.125 1.125 1.125m17.25-3.75h-7.5c-.621 0-1.125.504-1.125 1.125m8.625-1.125c.621 0 1.125.504 1.125 1.125v1.5c0 .621-.504 1.125-1.125 1.125m-17.25 0h7.5m-7.5 0c-.621 0-1.125.504-1.125 1.125v1.5c0 .621.504 1.125 1.125 1.125M12 10.875v-1.5m0 1.5c0 .621-.504 1.125-1.125 1.125M12 10.875c0 .621.504 1.125 1.125 1.125m-2.25 0c.621 0 1.125.504 1.125 1.125M13.125 12h7.5m-7.5 0c-.621 0-1.125.504-1.125 1.125M20.625 12c.621 0 1.125.504 1.125 1.125v1.5c0 .621-.504 1.125-1.125 1.125m-17.25 0h7.5M12 14.625v-1.5m0 1.5c0 .621-.504 1.125-1.125 1.125M12 14.625c0 .621.504 1.125 1.125 1.125m-2.25 0c.621 0 1.125.504 1.125 1.125m0 1.5v-1.5m0 0c0-.621.504-1.125 1.125-1.125m0 0h7.5\",\n arrowsRightLeft:\n \"M7.5 21 3 16.5m0 0L7.5 12M3 16.5h13.5m0-13.5L21 7.5m0 0L16.5 12M21 7.5H7.5\",\n document:\n \"M9 12h3.75M9 15h3.75M9 18h3.75m3 .75H18a2.25 2.25 0 002.25-2.25V6.108c0-1.135-.845-2.098-1.976-2.192a48.424 48.424 0 00-1.123-.08m-5.801 0c-.065.21-.1.433-.1.664 0 .414.336.75.75.75h4.5a.75.75 0 00.75-.75 2.25 2.25 0 00-.1-.664m-5.8 0A2.251 2.251 0 0113.5 2.25H15c1.012 0 1.867.668 2.15 1.586m-5.8 0c-.376.023-.75.05-1.124.08C9.095 4.01 8.25 4.973 8.25 6.108V8.25m0 0H4.875c-.621 0-1.125.504-1.125 1.125v11.25c0 .621.504 1.125 1.125 1.125h9.75c.621 0 1.125-.504 1.125-1.125V9.375c0-.621-.504-1.125-1.125-1.125H8.25zM6.75 12h.008v.008H6.75V12zm0 3h.008v.008H6.75V15zm0 3h.008v.008H6.75V18z\",\n externalLink:\n \"M13.5 6H5.25A2.25 2.25 0 0 0 3 8.25v10.5A2.25 2.25 0 0 0 5.25 21h10.5A2.25 2.25 0 0 0 18 18.75V10.5m-10.5 6L21 3m0 0h-5.25M21 3v5.25\",\n lock: \"M16.5 10.5V6.75a4.5 4.5 0 1 0-9 0v3.75m-.75 11.25h10.5a2.25 2.25 0 0 0 2.25-2.25v-6.75a2.25 2.25 0 0 0-2.25-2.25H6.75a2.25 2.25 0 0 0-2.25 2.25v6.75a2.25 2.25 0 0 0 2.25 2.25Z\",\n shoppingCart:\n \"M2.25 3h1.386c.51 0 .955.343 1.087.835l.383 1.437M7.5 14.25a3 3 0 00-3 3h15.75m-12.75-3h11.218c1.121-2.3 2.1-4.684 2.924-7.138a60.114 60.114 0 00-16.536-1.84M7.5 14.25L5.106 5.272M6 20.25a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm12.75 0a.75.75 0 11-1.5 0 .75.75 0 011.5 0z\",\n minus: \"M5 12h14\",\n pencilSquare:\n \"M21.731 2.269a2.625 2.625 0 0 0-3.712 0l-1.157 1.157 3.712 3.712 1.157-1.157a2.625 2.625 0 0 0 0-3.712ZM19.513 8.199l-3.712-3.712-8.4 8.4a5.25 5.25 0 0 0-1.32 2.214l-.8 2.685a.75.75 0 0 0 .933.933l2.685-.8a5.25 5.25 0 0 0 2.214-1.32l8.4-8.4Z\",\n pencilSquareContinued:\n \"M5.25 5.25a3 3 0 0 0-3 3v10.5a3 3 0 0 0 3 3h10.5a3 3 0 0 0 3-3V13.5a.75.75 0 0 0-1.5 0v5.25a1.5 1.5 0 0 1-1.5 1.5H5.25a1.5 1.5 0 0 1-1.5-1.5V8.25a1.5 1.5 0 0 1 1.5-1.5h5.25a.75.75 0 0 0 0-1.5H5.25Z\",\n chevronUpSmall: \"M4.5 15.75l7.5-7.5 7.5 7.5\", // Points UP\n chevronDownSmall: \"M19.5 8.25l-7.5 7.5-7.5-7.5\", // Points DOWN\n chevronUpTable: \"M8.25 6.75 12 3m0 0 3.75 3.75M12 3v18\", // Points UP\n chevronDownTable: \"M15.75 17.25 12 21m0 0-3.75-3.75M12 21V3\", // Points DOWN\n speakerWave:\n \"M19.114 5.636a9 9 0 010 12.728M16.463 8.288a5.25 5.25 0 010 7.424M6.75 8.25l4.72-4.72a.75.75 0 011.28.53v15.88a.75.75 0 01-1.28.53l-4.72-4.72H4.51c-.88 0-1.704-.507-1.938-1.354A9.01 9.01 0 012.25 12c0-.83.112-1.633.322-2.396C2.806 8.756 3.63 8.25 4.51 8.25H6.75z\",\n zap: \"m3.75 13.5 10.5-11.25L12 10.5h8.25L9.75 21.75 12 13.5H3.75Z\",\n code: \"M17.25 6.75L22.5 12l-5.25 5.25m-10.5 0L1.5 12l5.25-5.25m7.5-3l-4.5 16.5\",\n questionMarkCircle:\n \"M9.879 7.519c1.171-1.025 3.071-1.025 4.242 0 1.172 1.025 1.172 2.687 0 3.712-.203.179-.43.326-.67.442-.745.361-1.45.999-1.45 1.827v.75M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-9 5.25h.008v.008H12v-.008z\",\n search:\n \"m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607Z\",\n exclamationCircle:\n \"M12 9v3.75m9-.75a9 9 0 1 1-18 0 9 9 0 0 1 18 0Zm-9 3.75h.008v.008H12v-.008Z\",\n exclamationTriangle:\n \"M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126ZM12 15.75h.007v.008H12v-.008Z\",\n checkCircle:\n \"M9 12.75 11.25 15 15 9.75M21 12c0 1.268-.63 2.39-1.593 3.068a3.745 3.745 0 0 1-1.043 3.296 3.745 3.745 0 0 1-3.296 1.043A3.745 3.745 0 0 1 12 21c-1.268 0-2.39-.63-3.068-1.593a3.746 3.746 0 0 1-3.296-1.043 3.745 3.745 0 0 1-1.043-3.296A3.745 3.745 0 0 1 3 12c0-1.268.63-2.39 1.593-3.068a3.745 3.745 0 0 1 1.043-3.296 3.746 3.746 0 0 1 3.296-1.043A3.746 3.746 0 0 1 12 3c1.268 0 2.39.63 3.068 1.593a3.746 3.746 0 0 1 3.296 1.043 3.746 3.746 0 0 1 1.043 3.296A3.745 3.745 0 0 1 21 12Z\",\n megaphone:\n \"M10.34 15.84c-.688-.06-1.386-.09-2.09-.09H7.5a4.5 4.5 0 1 1 0-9h.75c.704 0 1.402-.03 2.09-.09m0 9.18c.253.962.584 1.892.985 2.783.247.55.06 1.21-.463 1.511l-.657.38c-.551.318-1.26.117-1.527-.461a20.845 20.845 0 0 1-1.44-4.282m3.102.069a18.03 18.03 0 0 1-.59-4.59c0-1.586.205-3.124.59-4.59m0 9.18a23.848 23.848 0 0 1 8.835 2.535M10.34 6.66a23.847 23.847 0 0 0 8.835-2.535m0 0A23.74 23.74 0 0 0 18.795 3m.38 1.125a23.91 23.91 0 0 1 1.014 5.395m-1.014 8.855c-.118.38-.245.754-.38 1.125m.38-1.125a23.91 23.91 0 0 0 1.014-5.395m0-3.46c.495.413.811 1.035.811 1.73 0 .695-.316 1.317-.811 1.73m0-3.46a24.347 24.347 0 0 1 0 3.46\",\n xCircle:\n \"m9.75 9.75 4.5 4.5m0-4.5-4.5 4.5M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z\",\n arrowsPointingIn:\n \"M9 9V4.5M9 9H4.5M9 9 3.75 3.75M9 15v4.5M9 15H4.5M9 15l-5.25 5.25M15 9h4.5M15 9V4.5M15 9l5.25-5.25M15 15h4.5M15 15v4.5m0-4.5 5.25 5.25\",\n arrowsPointingOut:\n \"M3.75 3.75v4.5m0-4.5h4.5m-4.5 0L9 9M3.75 20.25v-4.5m0 4.5h4.5m-4.5 0L9 15M20.25 3.75h-4.5m4.5 0v4.5m0-4.5L15 9m5.25 11.25h-4.5m4.5 0v-4.5m0 4.5L15 15\",\n arrowPath:\n \"M19.5 12c0-1.232-.046-2.453-.138-3.662a4.006 4.006 0 0 0-3.7-3.7 48.678 48.678 0 0 0-7.324 0 4.006 4.006 0 0 0-3.7 3.7c-.017.22-.032.441-.046.662M19.5 12l3-3m-3 3-3-3m-12 3c0 1.232.046 2.453.138 3.662a4.006 4.006 0 0 0 3.7 3.7 48.656 48.656 0 0 0 7.324 0 4.006 4.006 0 0 0 3.7-3.7c.017-.22.032-.441.046-.662M4.5 12l3 3m-3-3-3 3\",\n arrowUturnLeft: \"M9 15 3 9m0 0 6-6M3 9h12a6 6 0 0 1 0 12h-3\",\n magnifyingGlassPlus:\n \"m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607ZM10.5 7.5v6m3-3h-6\",\n arrowsUpDown:\n \"M3 7.5 7.5 3m0 0L12 7.5M7.5 3v13.5m13.5 0L16.5 21m0 0L12 16.5m4.5 4.5V7.5\",\n envelope:\n \"M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\",\n lockClosed:\n \"M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z\",\n userCircle:\n \"M17.982 18.725A7.488 7.488 0 0012 15.75a7.488 7.488 0 00-5.982 2.975m11.963 0a9 9 0 10-11.963 0m11.963 0A8.966 8.966 0 0112 21a8.966 8.966 0 01-5.982-2.275M15 9.75a3 3 0 11-6 0 3 3 0 016 0z\",\n arrowRightOnRectangle:\n \"M15.75 9V5.25A2.25 2.25 0 0 0 13.5 3h-6a2.25 2.25 0 0 0-2.25 2.25v13.5A2.25 2.25 0 0 0 7.5 21h6a2.25 2.25 0 0 0 2.25-2.25V15m3 0 3-3m0 0-3-3m3 3H9\",\n chevronRight: \"m8.25 4.5 7.5 7.5-7.5 7.5\",\n arrowDownTray:\n \"M3 16.5v2.25A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75V16.5M16.5 12 12 16.5m0 0L7.5 12m4.5 4.5V3\",\n arrowUpTray:\n \"M3 7.5V5.25A2.25 2.25 0 0 1 5.25 3h13.5A2.25 2.25 0 0 1 21 5.25V7.5m-4.5 4.5L12 7.5m0 0L7.5 12m4.5-4.5v13.5\",\n import:\n \"M9 8.25H7.5a2.25 2.25 0 0 0-2.25 2.25v9a2.25 2.25 0 0 0 2.25 2.25h9a2.25 2.25 0 0 0 2.25-2.25v-9a2.25 2.25 0 0 0-2.25-2.25H15M9 12l3 3m0 0 3-3m-3 3V2.25\",\n export:\n \"M9 8.25H7.5a2.25 2.25 0 0 0-2.25 2.25v9a2.25 2.25 0 0 0 2.25 2.25h9a2.25 2.25 0 0 0 2.25-2.25v-9a2.25 2.25 0 0 0-2.25-2.25H15m0-3-3-3m0 0-3 3m3-3V15\",\n home: \"m2.25 12 8.954-8.955c.44-.439 1.152-.439 1.591 0L21.75 12M4.5 9.75v10.125c0 .621.504 1.125 1.125 1.125H9.75v-4.875c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125V21h4.125c.621 0 1.125-.504 1.125-1.125V9.75M8.25 21h8.25\",\n play: \"M5 3l14 9-14 9V3z\",\n star: \"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z\",\n shield: \"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\",\n chat: \"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\",\n};\n\n/**\n * Icons that are complex React nodes\n */\nexport const complexIcons = {\n eye: (\n <>\n <path d=\"M2.036 12.322a1.012 1.012 0 0 1 0-.639C3.423 7.51 7.36 4.5 12 4.5c4.638 0 8.573 3.007 9.963 7.178.07.207.07.431 0 .639C20.577 16.49 16.64 19.5 12 19.5c-4.638 0-8.573-3.007-9.963-7.178Z\" />\n <path d=\"M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z\" />\n </>\n ),\n google: (\n <g transform=\"matrix(1, 0, 0, 1, 27.009001, -39.238998)\">\n <path\n fill=\"#4285F4\"\n stroke=\"none\"\n d=\"M -3.264 51.509 C -3.264 50.719 -3.334 49.969 -3.454 49.239 L -14.754 49.239 L -14.754 53.749 L -8.284 53.749 C -8.574 55.229 -9.424 56.479 -10.684 57.329 L -10.684 60.329 L -6.824 60.329 C -4.564 58.239 -3.264 55.159 -3.264 51.509 Z\"\n />\n <path\n fill=\"#34A853\"\n stroke=\"none\"\n d=\"M -14.754 63.239 C -11.514 63.239 -8.804 62.159 -6.824 60.329 L -10.684 57.329 C -11.764 58.049 -13.134 58.489 -14.754 58.489 C -17.884 58.489 -20.534 56.379 -21.484 53.529 L -25.464 53.529 L -25.464 56.619 C -23.494 60.539 -19.444 63.239 -14.754 63.239 Z\"\n />\n <path\n fill=\"#FBBC05\"\n stroke=\"none\"\n d=\"M -21.484 53.529 C -21.734 52.809 -21.864 52.039 -21.864 51.239 C -21.864 50.439 -21.724 49.669 -21.484 48.949 L -21.484 45.859 L -25.464 45.859 C -26.284 47.479 -26.754 49.299 -26.754 51.239 C -26.754 53.179 -26.284 54.999 -25.464 56.619 L -21.484 53.529 Z\"\n />\n <path\n fill=\"#EA4335\"\n stroke=\"none\"\n d=\"M -14.754 43.989 C -12.984 43.989 -11.404 44.599 -10.154 45.789 L -6.734 42.369 C -8.804 40.429 -11.514 39.239 -14.754 39.239 C -19.444 39.239 -23.494 41.939 -25.464 45.859 L -21.484 48.949 C -20.534 46.099 -17.884 43.989 -14.754 43.989 Z\"\n />\n </g>\n ),\n face: (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M8 14s1.5 2 4 2 4-2 4-2\" />\n <line x1=\"9\" y1=\"9\" x2=\"9.01\" y2=\"9\" strokeWidth=\"3\" />\n <line x1=\"15\" y1=\"9\" x2=\"15.01\" y2=\"9\" strokeWidth=\"3\" />\n </>\n ),\n mic: (\n <>\n <path d=\"M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z\" />\n <path d=\"M19 10v2a7 7 0 0 1-14 0v-2\" />\n <line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"22\" />\n </>\n ),\n brain: (\n <>\n <path d=\"M9.5 2A2.5 2.5 0 0 1 12 4.5v15a2.5 2.5 0 0 1-4.96.44 2.5 2.5 0 0 1-2.96-3.08 3 3 0 0 1-.34-5.58 2.5 2.5 0 0 1 1.32-4.24 2.5 2.5 0 0 1 4.44-2.04Z\" />\n <path d=\"M14.5 2A2.5 2.5 0 0 0 12 4.5v15a2.5 2.5 0 0 0 4.96.44 2.5 2.5 0 0 0 2.96-3.08 3 3 0 0 0 .34-5.58 2.5 2.5 0 0 0-1.32-4.24 2.5 2.5 0 0 0-4.44-2.04Z\" />\n </>\n ),\n user: (\n <>\n <path d=\"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\" />\n <circle cx=\"12\" cy=\"7\" r=\"4\" />\n </>\n ),\n users: (\n <>\n <path d=\"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2\" />\n <circle cx=\"9\" cy=\"7\" r=\"4\" />\n <path d=\"M22 21v-2a4 4 0 0 0-3-3.87\" />\n <path d=\"M16 3.13a4 4 0 0 1 0 7.75\" />\n </>\n ),\n globe: (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"2\" y1=\"12\" x2=\"22\" y2=\"12\" />\n <path d=\"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z\" />\n </>\n ),\n devices: (\n <>\n <rect width=\"16\" height=\"10\" x=\"2\" y=\"3\" rx=\"2\" />\n <path d=\"M12 17v4\" />\n <path d=\"M8 21h8\" />\n </>\n ),\n volume: (\n <>\n <polygon points=\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\" />\n <path d=\"M15.54 8.46a5 5 0 0 1 0 7.07\" />\n <path d=\"M19.07 4.93a10 10 0 0 1 0 14.14\" />\n </>\n ),\n sliders: (\n <>\n <line x1=\"4\" x2=\"4\" y1=\"21\" y2=\"14\" />\n <line x1=\"4\" x2=\"4\" y1=\"10\" y2=\"3\" />\n <line x1=\"12\" x2=\"12\" y1=\"21\" y2=\"12\" />\n <line x1=\"12\" x2=\"12\" y1=\"8\" y2=\"3\" />\n <line x1=\"20\" x2=\"20\" y1=\"21\" y2=\"16\" />\n <line x1=\"20\" x2=\"20\" y1=\"12\" y2=\"3\" />\n <line x1=\"1\" x2=\"7\" y1=\"14\" y2=\"14\" />\n <line x1=\"9\" x2=\"15\" y1=\"8\" y2=\"8\" />\n <line x1=\"17\" x2=\"23\" y1=\"16\" y2=\"16\" />\n </>\n ),\n joystick: (\n <>\n <circle cx=\"12\" cy=\"7\" r=\"3\" />\n <path d=\"M12 10v7\" />\n <rect width=\"18\" height=\"4\" x=\"3\" y=\"17\" rx=\"2\" />\n </>\n ),\n book: (\n <>\n <path d=\"M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H20v20H6.5a2.5 2.5 0 0 1-2.5-2.5Z\" />\n <path d=\"M6 6h10\" />\n <path d=\"M6 10h10\" />\n </>\n ),\n store: (\n <>\n <path d=\"m2 7 4.41-4.41A2 2 0 0 1 7.83 2h8.34a2 2 0 0 1 1.42.59L22 7\" />\n <path d=\"M4 12v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8\" />\n <path d=\"M15 22v-4a2 2 0 0 0-2-2h-2a2 2 0 0 0-2 2v4\" />\n <path d=\"M2 7h20\" />\n </>\n ),\n award: (\n <>\n <circle cx=\"12\" cy=\"8\" r=\"7\" />\n <polyline points=\"8.21 13.89 7 23 12 20 17 23 15.79 13.88\" />\n </>\n ),\n headset: (\n <>\n <path d=\"M3 18v-6a9 9 0 0 1 18 0v6\" />\n <path d=\"M21 19a2 2 0 0 1-2 2h-1a2 2 0 0 1-2-2v-3a2 2 0 0 1 2-2h3zM3 19a2 2 0 0 0 2 2h1a2 2 0 0 0 2-2v-3a2 2 0 0 0-2-2H3z\" />\n </>\n ),\n layout: (\n <>\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" />\n <path d=\"M3 9h18\" />\n <path d=\"M9 21V9\" />\n </>\n ),\n video: (\n <>\n <polygon points=\"23 7 16 12 23 17 23 7\" />\n <rect width=\"14\" height=\"12\" x=\"1\" y=\"6\" rx=\"2\" />\n </>\n ),\n facebook: (\n <path\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n d=\"M22 12c0-5.523-4.477-10-10-10S2 6.477 2 12c0 4.991 3.657 9.128 8.438 9.878v-6.987h-2.54V12h2.54V9.797c0-2.506 1.492-3.89 3.777-3.89 1.094 0 2.238.195 2.238.195v2.46h-1.26c-1.243 0-1.63.771-1.63 1.562V12h2.773l-.443 2.89h-2.33v6.988C18.343 21.128 22 16.991 22 12z\"\n clipRule=\"evenodd\"\n />\n ),\n instagram: (\n <path\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n d=\"M12.315 2c2.43 0 2.784.013 3.808.06 1.064.049 1.791.218 2.427.465a4.902 4.902 0 011.772 1.153 4.902 4.902 0 011.153 1.772c.247.636.416 1.363.465 2.427.048 1.067.06 1.407.06 4.123v.08c0 2.643-.012 2.987-.06 4.043-.049 1.064-.218 1.791-.465 2.427a4.902 4.902 0 01-1.153 1.772 4.902 4.902 0 01-1.772 1.153c-.636.247-1.363.416-2.427.465-1.067.048-1.407.06-4.123.06h-.08c-2.643 0-2.987-.012-4.043-.06-1.064-.049-1.791-.218-2.427-.465a4.902 4.902 0 01-1.772-1.153 4.902 4.902 0 01-1.153-1.772c-.247-.636-.416-1.363-.465-2.427-.047-1.024-.06-1.379-.06-3.808v-.63c0-2.43.013-2.784.06-3.808.049-1.064.218-1.791.465-2.427a4.902 4.902 0 011.153-1.772A4.902 4.902 0 015.45 2.525c.636-.247 1.363-.416 2.427-.465C8.901 2.013 9.256 2 11.685 2h.63zm-.081 1.802h-.468c-2.456 0-2.784.011-3.807.058-.975.045-1.504.207-1.857.344-.467.182-.8.398-1.15.748-.35.35-.566.683-.748 1.15-.137.353-.3.882-.344 1.857-.047 1.023-.058 1.351-.058 3.807v.468c0 2.456.011 2.784.058 3.807.045.975.207 1.504.344 1.857.182.466.399.8.748 1.15.35.35.683.566 1.15.748.353.137.882.3 1.857.344 1.054.048 1.37.058 4.041.058h.08c2.597 0 2.917-.01 3.96-.058.976-.045 1.505-.207 1.858-.344.466-.182.8-.398 1.15-.748.35-.35.566-.683.748-1.15.137-.353.3-.882.344-1.857.048-1.055.058-1.37.058-4.041v-.08c0-2.597-.01-2.917-.058-3.96-.045-.976-.207-1.505-.344-1.858a3.097 3.097 0 00-.748-1.15 3.098 3.098 0 00-1.15-.748c-.353-.137-.882-.3-1.857-.344-1.023-.047-1.351-.058-3.807-.058zM12 6.865a5.135 5.135 0 110 10.27 5.135 5.135 0 010-10.27zm0 1.802a3.333 3.333 0 100 6.666 3.333 3.333 0 000-6.666zm5.338-3.205a1.2 1.2 0 110 2.4 1.2 1.2 0 010-2.4z\"\n clipRule=\"evenodd\"\n />\n ),\n linkedin: (\n <path\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n d=\"M19 3a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h14m-.5 15.5v-5.3a3.26 3.26 0 0 0-3.26-3.26c-.85 0-1.84.52-2.28 1.3v-1.11h-2.79v8.37h2.79v-4.93c0-.77.62-1.4 1.39-1.4a1.4 1.4 0 0 1 1.4 1.4v4.93h2.75M6.88 8.56a1.68 1.68 0 0 0 1.68-1.68c0-.93-.75-1.69-1.68-1.69a1.69 1.69 0 0 0-1.69 1.69c0 .93.76 1.68 1.69 1.68m1.39 9.94v-8.37H5.5v8.37h2.77z\"\n clipRule=\"evenodd\"\n />\n ),\n twitter: (\n <path\n fill=\"currentColor\"\n d=\"M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z\"\n />\n ),\n youtube: (\n <path\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n d=\"M21.582 6.186a2.806 2.806 0 0 0-1.974-1.986C17.868 3.75 12 3.75 12 3.75s-5.868 0-7.608.45A2.806 2.806 0 0 0 2.418 6.186C2 7.94 2 12 2 12s0 4.06.418 5.814a2.806 2.806 0 0 0 1.974 1.986c1.74.45 7.608.45 7.608.45s5.868 0 7.608-.45a2.806 2.806 0 0 0 1.974-1.986C22 16.06 22 12 22 12s0-4.06-.418-5.814zM9.75 15.568V8.432L15.818 12 9.75 15.568z\"\n clipRule=\"evenodd\"\n />\n ),\n bluesky: (\n <path\n fill=\"currentColor\"\n d=\"M12 10.8c-1.087-2.114-4.046-6.053-6.798-7.995C2.566 1.01 1.5 1.97 1.5 4.5c0 2.054.675 6.643 1.05 7.995.675 2.43 2.7 3.375 4.5 3.375-3.375.9-4.875 3.15-2.7 6.3 3.675 5.325 6.9-2.025 7.65-4.275.75 2.25 3.975 9.6 7.65 4.275 2.175-3.15.675-5.4-2.7-6.3 1.8 0 3.825-.945 4.5-3.375.375-1.352 1.05-5.941 1.05-7.995 0-2.53-1.066-3.49-3.702-1.695C16.046 4.747 13.087 8.686 12 10.8z\"\n />\n ),\n github: (\n <path\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n d=\"M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.53 1.032 1.53 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z\"\n clipRule=\"evenodd\"\n />\n ),\n} as const;\n\nexport type IconName =\n | keyof typeof iconPaths\n | keyof typeof complexIcons\n | \"smile\"\n | \"avatar\"\n | \"voice\"\n | \"audio\"\n | \"speech\"\n | \"expert\"\n | \"profile\"\n | \"world\"\n | \"language\"\n | \"screen\"\n | \"laptop\"\n | \"sound\"\n | \"speaker\"\n | \"tune\"\n | \"adjust\"\n | \"message\"\n | \"team\"\n | \"group\"\n | \"motion\"\n | \"gamepad\"\n | \"curriculum\"\n | \"learning\"\n | \"education\"\n | \"marketplace\"\n | \"security\"\n | \"privacy\"\n | \"badge\"\n | \"certificate\"\n | \"support\"\n | \"help\"\n | \"x-brand\"\n | \"bsky\";\n\nconst iconAliases: Record<string, keyof typeof iconPaths | keyof typeof complexIcons> = {\n smile: \"face\",\n avatar: \"face\",\n voice: \"mic\",\n audio: \"mic\",\n speech: \"mic\",\n expert: \"brain\",\n profile: \"user\",\n world: \"globe\",\n language: \"globe\",\n screen: \"devices\",\n laptop: \"devices\",\n sound: \"volume\",\n speaker: \"volume\",\n tune: \"sliders\",\n adjust: \"sliders\",\n message: \"chat\",\n team: \"users\",\n group: \"users\",\n motion: \"joystick\",\n gamepad: \"joystick\",\n curriculum: \"book\",\n learning: \"book\",\n education: \"book\",\n marketplace: \"store\",\n security: \"shield\",\n privacy: \"shield\",\n badge: \"award\",\n certificate: \"award\",\n support: \"headset\",\n help: \"headset\",\n \"x-brand\": \"twitter\",\n bsky: \"bluesky\",\n};\n\nexport const getIconNode = (name: IconName): React.ReactNode => {\n const resolvedName = (iconAliases[name] || name) as\n | keyof typeof iconPaths\n | keyof typeof complexIcons;\n\n if (resolvedName in complexIcons) {\n return complexIcons[resolvedName as keyof typeof complexIcons];\n }\n if (resolvedName in iconPaths) {\n return <path d={iconPaths[resolvedName as keyof typeof iconPaths]} />;\n }\n return null;\n};\n\nexport const icons: Record<string, React.ReactNode> = new Proxy(\n {},\n {\n get: (_, prop: string) => getIconNode(prop as IconName),\n has: () => true,\n },\n);\n","import React from \"react\";\nimport { cn } from \"../utils\";\nimport { Icon, IconName } from \"./Icon\";\n\nexport interface SocialLinkItem {\n name: string;\n url: string;\n ariaLabel?: string;\n icon?: IconName;\n}\n\nexport const DEFAULT_PEERBOTS_SOCIAL_LINKS: SocialLinkItem[] = [\n {\n name: \"Facebook\",\n url: \"https://www.facebook.com/peerbots\",\n ariaLabel: \"Peerbots on Facebook\",\n icon: \"facebook\",\n },\n {\n name: \"Instagram\",\n url: \"https://www.instagram.com/peerbots\",\n ariaLabel: \"Peerbots on Instagram\",\n icon: \"instagram\",\n },\n {\n name: \"LinkedIn\",\n url: \"https://www.linkedin.com/company/peerbots\",\n ariaLabel: \"Peerbots on LinkedIn\",\n icon: \"linkedin\",\n },\n {\n name: \"Twitter\",\n url: \"https://twitter.com/peerbots\",\n ariaLabel: \"Peerbots on Twitter / X\",\n icon: \"twitter\",\n },\n {\n name: \"YouTube\",\n url: \"https://www.youtube.com/@peerbots\",\n ariaLabel: \"Peerbots on YouTube\",\n icon: \"youtube\",\n },\n {\n name: \"BlueSky\",\n url: \"https://bsky.app/profile/peerbots.bsky.social\",\n ariaLabel: \"Peerbots on BlueSky\",\n icon: \"bluesky\",\n },\n {\n name: \"GitHub\",\n url: \"https://github.com/peerbots\",\n ariaLabel: \"Peerbots on GitHub\",\n icon: \"github\",\n },\n];\n\nexport interface SocialLinksProps {\n className?: string;\n links?: SocialLinkItem[];\n size?: \"sm\" | \"md\" | \"lg\";\n variant?: \"default\" | \"white\" | \"teal\" | \"dark\" | \"muted\";\n}\n\nexport const SocialLinks: React.FC<SocialLinksProps> = ({\n className,\n links = DEFAULT_PEERBOTS_SOCIAL_LINKS,\n size = \"md\",\n variant = \"default\",\n}) => {\n const sizeClasses = {\n sm: \"pb:w-4 pb:h-4\",\n md: \"pb:w-5 pb:h-5\",\n lg: \"pb:w-6 pb:h-6\",\n }[size];\n\n const variantClasses = {\n default:\n \"pb:text-gray-500 pb:hover:text-peerbots-darkteal pb:hover:bg-peerbots-teal/10\",\n white: \"pb:text-white/80 pb:hover:text-white pb:hover:bg-white/10\",\n teal: \"pb:text-peerbots-teal pb:hover:text-peerbots-darkteal pb:hover:bg-peerbots-teal/15\",\n dark: \"pb:text-gray-900 pb:hover:text-peerbots-teal pb:hover:bg-gray-100\",\n muted: \"pb:text-gray-400 pb:hover:text-gray-700 pb:hover:bg-gray-100\",\n }[variant];\n\n const buttonSizeClasses = {\n sm: \"pb:p-1.5 pb:rounded-lg\",\n md: \"pb:p-2 pb:rounded-xl\",\n lg: \"pb:p-2.5 pb:rounded-2xl\",\n }[size];\n\n return (\n <div className={cn(\"pb:flex pb:flex-wrap pb:items-center pb:gap-1.5\", className)}>\n {links.map((link) => {\n const iconName = (link.icon ||\n link.name.toLowerCase().replace(/[^a-z0-9]/g, \"\")) as IconName;\n\n return (\n <a\n key={link.name}\n href={link.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={cn(\n \"pb:inline-flex pb:items-center pb:justify-center pb:transition-all pb:duration-200 pb:cursor-pointer\",\n variantClasses,\n buttonSizeClasses,\n )}\n aria-label={link.ariaLabel || `Visit Peerbots on ${link.name}`}\n title={link.name}\n >\n <Icon name={iconName} className={sizeClasses} />\n </a>\n );\n })}\n </div>\n );\n};\n","import React, { useState } from \"react\";\nimport { cn } from \"../utils\";\nimport { Icon } from \"./Icon\";\n\nexport interface CodeBlockProps {\n /** The code string to display */\n code: string;\n /** Programming language for syntax/badge (e.g. bash, tsx, json) */\n language?: string;\n /** Optional file name displayed in the window header */\n fileName?: string;\n /** Whether to show line numbers */\n showLineNumbers?: boolean;\n /** Style variant: 'default' (clean block) or 'window' (macOS window with colored dots) */\n variant?: \"default\" | \"window\" | \"flat\";\n /** Whether to show the copy button */\n showCopyButton?: boolean;\n className?: string;\n}\n\nexport const CodeBlock: React.FC<CodeBlockProps> = ({\n code = \"\",\n language,\n fileName,\n showLineNumbers = false,\n variant = \"default\",\n showCopyButton = true,\n className,\n}) => {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(code);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch (err) {\n console.error(\"Failed to copy code to clipboard\", err);\n }\n };\n\n const codeLines = code.trim().split(\"\\n\");\n const isWindow = variant === \"window\";\n\n return (\n <div\n className={cn(\n \"pb:relative pb:group pb:rounded-xl pb:overflow-hidden pb:font-mono pb:text-sm pb:transition-all\",\n isWindow\n ? \"pb:shadow-xl pb:border pb:border-gray-800 pb:bg-[#1e222b] pb:text-gray-100\"\n : variant === \"flat\"\n ? \"pb:bg-[#1e222b]/90 pb:text-gray-100\"\n : \"pb:border pb:border-gray-800 pb:bg-[#1e222b] pb:text-gray-100 pb:shadow-md\",\n className,\n )}\n >\n {/* Window Header Bar (Only in window variant) */}\n {isWindow ? (\n <div className=\"pb:flex pb:items-center pb:justify-between pb:px-4 pb:py-3 pb:bg-[#161920] pb:border-b pb:border-gray-800/80\">\n <div className=\"pb:flex pb:items-center pb:gap-2\">\n <span className=\"pb:w-3 pb:h-3 pb:rounded-full pb:bg-red-500/80 pb:inline-block\" />\n <span className=\"pb:w-3 pb:h-3 pb:rounded-full pb:bg-yellow-500/80 pb:inline-block\" />\n <span className=\"pb:w-3 pb:h-3 pb:rounded-full pb:bg-green-500/80 pb:inline-block\" />\n {fileName && (\n <span className=\"pb:ml-2 pb:text-xs pb:text-gray-300 pb:font-sans pb:font-medium\">\n {fileName}\n </span>\n )}\n </div>\n\n <div className=\"pb:flex pb:items-center pb:gap-3\">\n {language && (\n <span className=\"pb:text-xs pb:uppercase pb:font-bold pb:text-gray-200 pb:bg-gray-800/80 pb:px-2.5 pb:py-0.5 pb:rounded-md\">\n {language}\n </span>\n )}\n {showCopyButton && (\n <button\n type=\"button\"\n onClick={handleCopy}\n className=\"pb:flex pb:items-center pb:gap-1.5 pb:px-3 pb:py-1 pb:text-xs pb:font-semibold pb:text-gray-200 pb:hover:text-white pb:bg-gray-800 pb:hover:bg-gray-700 pb:rounded-lg pb:transition-colors pb:cursor-pointer\"\n aria-label=\"Copy code to clipboard\"\n >\n {copied ? (\n <>\n <Icon name=\"check\" className=\"pb:w-3.5 pb:h-3.5 pb:text-peerbots-teal\" />\n <span className=\"pb:text-peerbots-teal\">Copied!</span>\n </>\n ) : (\n <>\n <Icon name=\"clipboard\" className=\"pb:w-3.5 pb:h-3.5\" />\n <span>Copy</span>\n </>\n )}\n </button>\n )}\n </div>\n </div>\n ) : (\n /* Floating Copy & Language badge for default / simple variant */\n (showCopyButton || language) && (\n <div className=\"pb:absolute pb:top-3 pb:right-3 pb:flex pb:items-center pb:gap-2 pb:z-10\">\n {language && (\n <span className=\"pb:text-[11px] pb:uppercase pb:font-bold pb:text-gray-200 pb:bg-gray-800/80 pb:px-2 pb:py-0.5 pb:rounded-md pb:select-none\">\n {language}\n </span>\n )}\n {showCopyButton && (\n <button\n type=\"button\"\n onClick={handleCopy}\n className=\"pb:p-1.5 pb:rounded-md pb:bg-gray-800/70 pb:hover:bg-gray-700 pb:text-gray-300 pb:hover:text-white pb:transition-all pb:duration-150 pb:cursor-pointer pb:border pb:border-gray-700/50\"\n aria-label=\"Copy code to clipboard\"\n title={copied ? \"Copied!\" : \"Copy code\"}\n >\n {copied ? (\n <Icon name=\"check\" className=\"pb:w-4 pb:h-4 pb:text-peerbots-teal\" />\n ) : (\n <Icon name=\"clipboard\" className=\"pb:w-4 pb:h-4\" />\n )}\n </button>\n )}\n </div>\n )\n )}\n\n {/* Code Block Body */}\n <div className=\"pb:p-4 sm:pb:p-5 pb:overflow-x-auto pb:text-sm sm:pb:text-base pb:leading-relaxed\">\n <pre className=\"pb:font-mono pb:m-0\">\n <code>\n {showLineNumbers ? (\n codeLines.map((line, idx) => (\n <div key={idx} className=\"pb:table-row\">\n <span className=\"pb:table-cell pb:pr-4 pb:text-right pb:select-none pb:text-gray-400 pb:text-xs\">\n {idx + 1}\n </span>\n <span className=\"pb:table-cell\">{line}</span>\n </div>\n ))\n ) : (\n code\n )}\n </code>\n </pre>\n </div>\n </div>\n );\n};\n","import * as React from \"react\";\nimport { cn } from \"../utils\";\nimport { ComponentColor } from \"../types\";\n\nexport interface AnchorProps\n extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n /**\n * Palette color or semantic intent.\n * @default \"default\"\n */\n color?: ComponentColor | \"muted\" | \"default\";\n /**\n * Underline text decoration control.\n * @default \"hover\"\n */\n underline?: \"hover\" | \"always\" | \"none\";\n /**\n * Interaction style variant.\n * @default \"default\"\n */\n variant?: \"default\" | \"ghost\";\n /** Polymorphic component wrapper (e.g. react-router Link, Next.js Link) */\n as?: React.ElementType;\n /** Custom render prop */\n render?: (\n props: React.AnchorHTMLAttributes<HTMLAnchorElement>,\n ) => React.ReactElement;\n}\n\nexport type LinkProps = AnchorProps;\n\nconst colorClasses: Record<string, string> = {\n default: \"pb:text-gray-900 pb:hover:text-peerbots-darkteal\",\n neutral: \"pb:text-gray-700 pb:hover:text-gray-950\",\n muted: \"pb:text-gray-600 pb:hover:text-gray-900\",\n teal: \"pb:text-peerbots-darkteal pb:hover:text-teal-950 pb:font-semibold\",\n pink: \"pb:text-rose-800 pb:hover:text-rose-950 pb:font-semibold\",\n primary: \"pb:text-dark-primary pb:hover:text-teal-950 pb:font-semibold\",\n darkteal: \"pb:text-peerbots-darkteal pb:hover:text-teal-950 pb:font-semibold\",\n darkblue: \"pb:text-peerbots-darkblue pb:hover:text-teal-900 pb:font-semibold\",\n danger: \"pb:text-red-700 pb:hover:text-red-900 pb:font-semibold\",\n};\n\nconst underlineClasses = {\n hover: \"pb:hover:underline pb:underline-offset-4 pb:decoration-current\",\n always: \"pb:underline pb:underline-offset-4 pb:decoration-current\",\n none: \"pb:no-underline\",\n};\n\nconst Anchor = React.forwardRef<HTMLAnchorElement, AnchorProps>(\n (\n {\n className,\n href,\n target,\n color = \"default\",\n underline = \"hover\",\n variant = \"default\",\n as: Component = \"a\",\n render,\n children,\n ...props\n },\n ref,\n ) => {\n const commonClass = cn(\n \"pb:transition-colors pb:duration-150 pb:cursor-pointer pb:font-medium pb:inline-flex pb:items-center pb:gap-1\",\n colorClasses[color] || colorClasses.default,\n underlineClasses[underline],\n variant === \"ghost\" && \"pb:px-2 pb:py-1 pb:rounded-lg pb:hover:bg-gray-100\",\n className,\n );\n\n const anchorProps = {\n href,\n target,\n className: commonClass,\n ...props,\n };\n\n if (render) {\n return render(anchorProps);\n }\n\n return (\n <Component ref={ref} {...anchorProps}>\n {children}\n </Component>\n );\n },\n);\n\nAnchor.displayName = \"Anchor\";\n\nexport const Link = Anchor;\nexport { Anchor };\n","import { Button as BaseButton } from \"@base-ui/react\";\nimport React from \"react\";\nimport { cn } from \"../utils\";\nimport {\n ComponentColor,\n FillVariant,\n ComponentSize,\n ComponentRadius,\n} from \"../types\";\n\nexport type ButtonVariant =\n | FillVariant\n | \"primary\"\n | \"secondary\"\n | \"danger\"\n | \"ghostly-danger\"\n | \"marketing-teal\"\n | \"marketing-pink\"\n | \"teal\"\n | \"pink\";\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement | HTMLAnchorElement> {\n /**\n * Visual fill style / treatment or legacy variant.\n * @default \"solid\"\n */\n variant?: ButtonVariant;\n /**\n * Palette color or semantic intent.\n * @default \"primary\"\n */\n color?: ComponentColor;\n /**\n * Button scale / padding.\n * @default \"md\"\n */\n size?: ComponentSize;\n /**\n * Border radius geometry.\n * @default \"md\" (rounded-xl)\n */\n radius?: ComponentRadius;\n /** Loading spinner indicator state */\n isLoading?: boolean;\n /** Icon placed before children */\n leftIcon?: React.ReactNode;\n /** Icon placed after children */\n rightIcon?: React.ReactNode;\n render?: BaseButton.Props[\"render\"];\n nativeButton?: boolean;\n isIconOnly?: boolean;\n href?: string;\n target?: string;\n rel?: string;\n}\n\nconst variantColorMap: Record<FillVariant, Record<string, string>> = {\n solid: {\n primary:\n \"pb:bg-primary pb:text-gray-900 pb:hover:bg-dark-primary pb:hover:text-white pb:shadow-xs pb:font-bold\",\n neutral:\n \"pb:bg-gray-100 pb:text-gray-900 pb:hover:bg-gray-200 pb:border pb:border-gray-300 pb:font-medium\",\n teal: \"pb:bg-peerbots-teal pb:text-gray-900 pb:hover:bg-peerbots-darkteal pb:hover:text-white pb:shadow-md pb:font-bold\",\n pink: \"pb:bg-peerbots-pink pb:text-gray-950 pb:hover:bg-rose-700 pb:hover:text-white pb:shadow-md pb:font-bold\",\n darkblue:\n \"pb:bg-peerbots-darkblue pb:text-white pb:hover:opacity-90 pb:shadow-md pb:font-bold\",\n danger:\n \"pb:bg-red-600 pb:text-white pb:hover:bg-red-700 pb:shadow-xs pb:font-bold\",\n success:\n \"pb:bg-emerald-700 pb:text-white pb:hover:bg-emerald-800 pb:shadow-xs pb:font-bold\",\n warning:\n \"pb:bg-amber-500 pb:text-gray-900 pb:hover:bg-amber-600 pb:shadow-xs pb:font-bold\",\n },\n soft: {\n primary:\n \"pb:bg-primary/20 pb:text-teal-950 pb:hover:bg-primary/30 pb:font-bold\",\n neutral:\n \"pb:bg-gray-100 pb:text-gray-800 pb:hover:bg-gray-200 pb:font-medium\",\n teal: \"pb:bg-peerbots-teal/20 pb:text-teal-950 pb:hover:bg-peerbots-teal/30 pb:font-bold\",\n pink: \"pb:bg-peerbots-pink/20 pb:text-rose-950 pb:hover:bg-peerbots-pink/30 pb:font-bold\",\n darkblue:\n \"pb:bg-peerbots-darkblue/15 pb:text-peerbots-darkblue pb:hover:bg-peerbots-darkblue/25 pb:font-bold\",\n danger:\n \"pb:bg-red-50 pb:text-red-800 pb:hover:bg-red-100 pb:font-bold\",\n success:\n \"pb:bg-emerald-50 pb:text-emerald-800 pb:hover:bg-emerald-100 pb:font-bold\",\n warning:\n \"pb:bg-amber-50 pb:text-amber-900 pb:hover:bg-amber-100 pb:font-bold\",\n },\n outline: {\n primary:\n \"pb:bg-transparent pb:border-2 pb:border-teal-700 pb:text-teal-900 pb:hover:bg-primary/10 pb:font-bold\",\n neutral:\n \"pb:bg-transparent pb:border-2 pb:border-gray-300 pb:text-gray-800 pb:hover:border-gray-400 pb:hover:bg-gray-50 pb:font-medium\",\n teal: \"pb:bg-transparent pb:border-2 pb:border-peerbots-darkteal pb:text-peerbots-darkteal pb:hover:bg-peerbots-teal/10 pb:font-bold\",\n pink: \"pb:bg-transparent pb:border-2 pb:border-rose-700 pb:text-rose-800 pb:hover:bg-peerbots-pink/10 pb:font-bold\",\n darkblue:\n \"pb:bg-transparent pb:border-2 pb:border-peerbots-darkblue pb:text-peerbots-darkblue pb:hover:bg-peerbots-darkblue/10 pb:font-bold\",\n danger:\n \"pb:bg-transparent pb:border-2 pb:border-red-600 pb:text-red-700 pb:hover:bg-red-50 pb:font-bold\",\n success:\n \"pb:bg-transparent pb:border-2 pb:border-emerald-600 pb:text-emerald-700 pb:hover:bg-emerald-50 pb:font-bold\",\n warning:\n \"pb:bg-transparent pb:border-2 pb:border-amber-600 pb:text-amber-900 pb:hover:bg-amber-50 pb:font-bold\",\n },\n ghost: {\n primary:\n \"pb:bg-transparent pb:text-teal-900 pb:hover:bg-primary/10 pb:font-bold\",\n neutral:\n \"pb:bg-transparent pb:text-gray-800 pb:hover:bg-gray-100 pb:hover:text-gray-900 pb:font-medium\",\n teal: \"pb:bg-transparent pb:text-peerbots-darkteal pb:hover:bg-peerbots-teal/10 pb:font-bold\",\n pink: \"pb:bg-transparent pb:text-rose-800 pb:hover:bg-peerbots-pink/10 pb:font-bold\",\n darkblue:\n \"pb:bg-transparent pb:text-peerbots-darkblue pb:hover:bg-peerbots-darkblue/10 pb:font-bold\",\n danger:\n \"pb:bg-transparent pb:text-red-700 pb:hover:bg-red-50 pb:font-bold\",\n success:\n \"pb:bg-transparent pb:text-emerald-700 pb:hover:bg-emerald-50 pb:font-bold\",\n warning:\n \"pb:bg-transparent pb:text-amber-900 pb:hover:bg-amber-50 pb:font-bold\",\n },\n link: {\n primary:\n \"pb:bg-transparent pb:p-0 pb:text-teal-800 pb:hover:underline pb:font-medium\",\n neutral:\n \"pb:bg-transparent pb:p-0 pb:text-gray-700 pb:hover:text-gray-900 pb:hover:underline pb:font-medium\",\n teal: \"pb:bg-transparent pb:p-0 pb:text-peerbots-darkteal pb:hover:underline pb:font-medium\",\n pink: \"pb:bg-transparent pb:p-0 pb:text-rose-800 pb:hover:underline pb:font-medium\",\n darkblue:\n \"pb:bg-transparent pb:p-0 pb:text-peerbots-darkblue pb:hover:underline pb:font-medium\",\n danger:\n \"pb:bg-transparent pb:p-0 pb:text-red-600 pb:hover:underline pb:font-medium\",\n success:\n \"pb:bg-transparent pb:p-0 pb:text-emerald-600 pb:hover:underline pb:font-medium\",\n warning:\n \"pb:bg-transparent pb:p-0 pb:text-amber-600 pb:hover:underline pb:font-medium\",\n },\n};\n\nconst radiusClasses: Record<ComponentRadius, string> = {\n none: \"pb:rounded-none\",\n sm: \"pb:rounded-md\",\n md: \"pb:rounded-xl\",\n lg: \"pb:rounded-2xl\",\n \"2xl\": \"pb:rounded-2xl\",\n pill: \"pb:rounded-full\",\n};\n\nexport const Button = React.forwardRef<\n HTMLButtonElement | HTMLAnchorElement,\n ButtonProps\n>(\n (\n {\n className,\n variant = \"solid\",\n color,\n size = \"md\",\n radius = \"md\",\n isLoading = false,\n leftIcon,\n rightIcon,\n children,\n disabled,\n render,\n nativeButton,\n isIconOnly,\n href,\n target,\n rel,\n ...props\n },\n ref,\n ) => {\n // Resolve legacy variants to orthogonal (FillVariant, ComponentColor, ComponentRadius)\n let resolvedVariant: FillVariant = \"solid\";\n let resolvedColor: ComponentColor = color || \"primary\";\n let resolvedRadius: ComponentRadius = radius;\n\n if (variant === \"secondary\") {\n resolvedVariant = \"solid\";\n resolvedColor = color || \"neutral\";\n } else if (variant === \"danger\") {\n resolvedVariant = \"solid\";\n resolvedColor = color || \"danger\";\n } else if (variant === \"ghostly-danger\") {\n resolvedVariant = \"ghost\";\n resolvedColor = color || \"danger\";\n } else if (variant === \"marketing-teal\" || variant === \"teal\") {\n resolvedVariant = \"solid\";\n resolvedColor = color || \"teal\";\n resolvedRadius = radius === \"md\" ? \"pill\" : radius;\n } else if (variant === \"marketing-pink\" || variant === \"pink\") {\n resolvedVariant = \"solid\";\n resolvedColor = color || \"pink\";\n resolvedRadius = radius === \"md\" ? \"pill\" : radius;\n } else if (\n variant === \"solid\" ||\n variant === \"soft\" ||\n variant === \"outline\" ||\n variant === \"ghost\" ||\n variant === \"link\"\n ) {\n resolvedVariant = variant;\n }\n\n const isActuallyIconOnly =\n isIconOnly || (!children && (!!leftIcon || !!rightIcon));\n\n const sizes: Record<ComponentSize, string> = {\n xs: isActuallyIconOnly\n ? \"pb:p-1 pb:text-xs\"\n : \"pb:px-2.5 pb:py-1 pb:text-xs\",\n sm: isActuallyIconOnly\n ? \"pb:p-1.5 pb:text-xs\"\n : \"pb:px-3.5 pb:py-1.5 pb:text-xs\",\n md: isActuallyIconOnly\n ? \"pb:p-2 pb:text-sm\"\n : \"pb:px-4.5 pb:py-2.5 pb:text-sm\",\n lg: isActuallyIconOnly\n ? \"pb:p-3 pb:text-base\"\n : \"pb:px-6 pb:py-3.5 pb:text-base sm:pb:text-lg\",\n xl: isActuallyIconOnly\n ? \"pb:p-3.5 pb:text-lg\"\n : \"pb:px-8 pb:py-4 pb:text-lg sm:pb:text-xl\",\n };\n\n const variantStyles =\n variantColorMap[resolvedVariant]?.[resolvedColor] ||\n variantColorMap[resolvedVariant]?.primary ||\n variantColorMap.solid.primary;\n\n const commonClasses = cn(\n \"pb:inline-flex pb:items-center pb:justify-center pb:transition-all pb:duration-150 pb:focus:outline-none pb:focus-visible:ring-2 pb:focus-visible:ring-peerbots-teal pb:focus-visible:ring-offset-2 pb:disabled:cursor-not-allowed pb:disabled:opacity-50 pb:cursor-pointer pb:font-medium\",\n radiusClasses[resolvedRadius],\n variantStyles,\n sizes[size],\n className,\n );\n\n const content = (\n <>\n {isLoading && (\n <svg\n className={cn(\n \"pb:animate-spin pb:h-4 pb:w-4\",\n !isActuallyIconOnly && \"pb:mr-2 pb:-ml-1\",\n )}\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n className=\"pb:opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n ></circle>\n <path\n className=\"pb:opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n ></path>\n </svg>\n )}\n {!isLoading && leftIcon && (\n <span\n className={cn(\n \"pb:inline-flex pb:items-center pb:justify-center\",\n !isActuallyIconOnly && \"pb:mr-2 pb:-ml-1\",\n )}\n >\n {leftIcon}\n </span>\n )}\n {children}\n {!isLoading && rightIcon && (\n <span\n className={cn(\n \"pb:inline-flex pb:items-center pb:justify-center\",\n !isActuallyIconOnly && \"pb:ml-2 pb:-mr-1\",\n )}\n >\n {rightIcon}\n </span>\n )}\n </>\n );\n\n if (href) {\n return (\n <a\n href={href}\n target={target}\n rel={rel}\n className={commonClasses}\n ref={ref as React.Ref<HTMLAnchorElement>}\n {...(props as React.AnchorHTMLAttributes<HTMLAnchorElement>)}\n >\n {content}\n </a>\n );\n }\n\n return (\n <BaseButton\n ref={ref as React.Ref<HTMLButtonElement>}\n render={render}\n nativeButton={nativeButton}\n className={commonClasses}\n disabled={disabled || isLoading}\n {...(props as React.ButtonHTMLAttributes<HTMLButtonElement>)}\n >\n {content}\n </BaseButton>\n );\n },\n);\n\nButton.displayName = \"Button\";\n","import { Input as BaseInput } from \"@base-ui/react\";\nimport React from \"react\";\nimport { cn } from \"../utils\";\n\nexport interface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {\n leftIcon?: React.ReactNode;\n rightIcon?: React.ReactNode;\n}\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, leftIcon, rightIcon, id, ...props }, ref) => {\n const inputClasses = cn(\n \"pb:block pb:w-full pb:rounded-md pb:border-0 pb:px-1.5 pb:py-1.5 pb:text-gray-900 pb:shadow-sm pb:ring-1 pb:ring-inset pb:ring-gray-300 pb:placeholder:text-gray-400 pb:focus:ring-2 pb:focus:ring-inset pb:focus:ring-primary pb:sm:text-sm pb:sm:leading-6 pb:bg-primary/10 pb:appearance-none\",\n leftIcon && \"pb:pl-10\",\n rightIcon && \"pb:pr-10\",\n className,\n );\n\n if (!leftIcon && !rightIcon) {\n return (\n <BaseInput ref={ref} id={id} className={inputClasses} {...props} />\n );\n }\n\n return (\n <div className=\"pb:relative\">\n {leftIcon && (\n <div className=\"pb:pointer-events-none pb:absolute pb:inset-y-0 pb:left-0 pb:flex pb:items-center pb:pl-3\">\n <span className=\"pb:text-gray-500 pb:sm:text-sm\">{leftIcon}</span>\n </div>\n )}\n <BaseInput ref={ref} id={id} className={inputClasses} {...props} />\n {rightIcon && (\n <div className=\"pb:pointer-events-none pb:absolute pb:inset-y-0 pb:right-0 pb:flex pb:items-center pb:pr-3\">\n <span className=\"pb:text-gray-500 pb:sm:text-sm\">{rightIcon}</span>\n </div>\n )}\n </div>\n );\n },\n);\n\nInput.displayName = \"Input\";\n","import React from \"react\";\nimport { Select as BaseSelect } from \"@base-ui/react\";\nimport { cn } from \"../utils\";\nimport { Icon } from \"../foundations/Icon\";\n\nexport interface SelectOption {\n label: string;\n value: string | number;\n}\n\nexport interface SelectProps extends React.AriaAttributes {\n options: (string | SelectOption)[];\n value?: string | number;\n defaultValue?: string | number;\n onChange?: (value: string | number | null, event: Event) => void;\n disabled?: boolean;\n placeholder?: string;\n className?: string;\n id?: string;\n onFocus?: React.FocusEventHandler<HTMLButtonElement>;\n}\n\nexport const Select = React.forwardRef<HTMLButtonElement, SelectProps>(\n (\n {\n className,\n options,\n id: propsId,\n value,\n defaultValue,\n onChange,\n disabled,\n placeholder = \"Select...\",\n onFocus,\n \"aria-label\": ariaLabel,\n ...props\n },\n ref,\n ) => {\n const generatedId = React.useId();\n const selectId = propsId || generatedId;\n\n return (\n <div className=\"pb:w-full\">\n <BaseSelect.Root\n value={value === undefined ? null : String(value)}\n defaultValue={\n defaultValue === undefined ? undefined : String(defaultValue)\n }\n onValueChange={(\n val: string | null,\n details?: { event: Event } | null,\n ) => {\n if (onChange) {\n // Base UI Select passes eventDetails as the second argument, which has an 'event' property.\n const event = details?.event || (details as unknown as Event);\n onChange(val, event);\n }\n }}\n disabled={disabled}\n >\n <BaseSelect.Trigger\n ref={ref}\n id={selectId}\n aria-label={ariaLabel || (typeof placeholder === \"string\" ? placeholder : \"Select an option\")}\n className={cn(\n \"pb:flex pb:w-full pb:items-center pb:justify-between pb:rounded-md pb:border-0 pb:py-1.5 pb:pl-3 pb:pr-3 pb:text-gray-900 pb:ring-1 pb:ring-inset pb:ring-gray-300 pb:focus:ring-2 pb:focus:ring-primary pb:sm:text-sm pb:sm:leading-6 pb:bg-primary/10 pb:min-h-[36px]\",\n disabled && \"pb:opacity-50 pb:cursor-not-allowed\",\n className,\n )}\n onFocus={onFocus}\n {...props}\n >\n <BaseSelect.Value placeholder={placeholder} />\n <BaseSelect.Icon>\n <Icon size=\"sm\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"m19.5 8.25-7.5 7.5-7.5-7.5\"\n />\n </Icon>\n </BaseSelect.Icon>\n </BaseSelect.Trigger>\n <BaseSelect.Portal>\n <BaseSelect.Positioner\n sideOffset={4}\n className=\"pb:z-50 pb:w-[var(--anchor-width)]\"\n >\n <BaseSelect.Popup className=\"pb:max-h-60 pb:overflow-auto pb:rounded-md pb:bg-white pb:py-1 pb:text-base pb:shadow-lg pb:ring-1 pb:ring-black pb:ring-opacity-5 focus:pb:outline-none pb:sm:text-sm\">\n {options.map((option, index) => {\n const label =\n typeof option === \"object\" ? option.label : option;\n const value =\n typeof option === \"object\" ? option.value : option;\n return (\n <BaseSelect.Item\n key={`${value}-${index}`}\n value={value}\n className=\"pb:relative pb:cursor-default pb:select-none pb:py-2 pb:pl-3 pb:pr-9 pb:text-gray-900 pb:hover:bg-gray-100 data-[highlighted]:pb:bg-gray-100 data-[selected]:pb:font-semibold\"\n >\n <BaseSelect.ItemText>{label}</BaseSelect.ItemText>\n <BaseSelect.ItemIndicator className=\"pb:absolute pb:inset-y-0 pb:right-0 pb:flex pb:items-center pb:pr-4 pb:text-primary\">\n <Icon size=\"sm\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M4.5 12.75l6 6 9-13.5\"\n />\n </Icon>\n </BaseSelect.ItemIndicator>\n </BaseSelect.Item>\n );\n })}\n </BaseSelect.Popup>\n </BaseSelect.Positioner>\n </BaseSelect.Portal>\n </BaseSelect.Root>\n </div>\n );\n },\n);\n\nSelect.displayName = \"Select\";\n","import React from \"react\";\nimport { Slider as BaseSlider } from \"@base-ui/react\";\nimport { cn } from \"../utils\";\n\nexport interface SliderProps extends React.AriaAttributes {\n min?: number;\n max?: number;\n step?: number;\n value?: number;\n defaultValue?: number;\n disabled?: boolean;\n onChange?: (value: number | number[], event: Event) => void;\n className?: string;\n name?: string;\n icon?: React.ReactNode;\n id?: string;\n}\n\nexport const Slider = React.forwardRef<HTMLDivElement, SliderProps>(\n (\n {\n className,\n min = 0,\n max = 100,\n step = 1,\n value,\n defaultValue,\n disabled,\n onChange,\n name,\n icon,\n id,\n \"aria-label\": ariaLabel,\n ...props\n },\n ref,\n ) => {\n const handleChange = (val: number | number[], event: Event) => {\n if (onChange) {\n onChange(val, event);\n }\n };\n\n return (\n <div className={cn(\"pb:w-full pb:flex pb:items-center pb:gap-4\", className)}>\n {icon && <div className=\"pb:text-gray-500 pb:shrink-0\">{icon}</div>}\n\n <div className=\"pb:flex-grow pb:flex pb:items-center pb:h-8 pb:min-w-[120px]\">\n <BaseSlider.Root\n ref={ref}\n id={id}\n min={min}\n max={max}\n step={step}\n value={\n value !== undefined\n ? Array.isArray(value)\n ? (value as number[])\n : [value]\n : undefined\n }\n defaultValue={\n defaultValue !== undefined\n ? Array.isArray(defaultValue)\n ? (defaultValue as number[])\n : [defaultValue]\n : undefined\n }\n disabled={disabled}\n orientation=\"horizontal\"\n {...props}\n onValueChange={(val, details) => {\n const event =\n (details as { event?: Event })?.event ||\n (window.event as unknown as Event);\n handleChange(val as number | number[], event);\n }}\n className={cn(\n \"pb:relative pb:flex pb:items-center pb:w-full pb:h-full pb:group pb:touch-none pb:select-none\",\n disabled && \"pb:opacity-50 pb:cursor-not-allowed\",\n className,\n )}\n >\n <BaseSlider.Control className=\"pb:flex pb:items-center pb:w-full pb:h-full pb:relative pb:cursor-pointer\">\n <BaseSlider.Track className=\"pb:relative pb:bg-gray-200 pb:rounded-full pb:w-full pb:h-1.5 pb:overflow-hidden pb:transition-colors group-pb:hover:bg-gray-300\">\n <BaseSlider.Indicator className=\"pb:absolute pb:bg-primary pb:rounded-full pb:h-full\" />\n </BaseSlider.Track>\n <BaseSlider.Thumb\n aria-label={ariaLabel || (name ? name : \"Slider\")}\n className=\"pb:z-10 pb:block pb:w-4.5 pb:h-4.5 pb:bg-white pb:shadow-md pb:rounded-full pb:border-2 pb:border-primary focus:pb:outline-none focus:pb:ring-4 focus:pb:ring-primary/20 pb:cursor-grab active:pb:cursor-grabbing pb:hover:scale-110 active:pb:scale-95 pb:transition-transform\"\n />\n </BaseSlider.Control>\n </BaseSlider.Root>\n </div>\n {/* Hidden input to support form submission if needed */}\n {name && <input type=\"hidden\" name={name} value={value} />}\n </div>\n );\n },\n);\n\nSlider.displayName = \"Slider\";\n","import React from \"react\";\nimport { Slider } from \"./Slider\";\nimport { NumberField } from \"./NumberField\";\nimport { cn } from \"../utils\";\n\nexport interface SliderWithNumberFieldProps extends React.AriaAttributes {\n min?: number;\n max?: number;\n step?: number;\n value?: number;\n defaultValue?: number;\n disabled?: boolean;\n onChange?: (value: number, event: Event) => void;\n className?: string;\n inputWidth?: string;\n showButtons?: boolean;\n id?: string;\n}\n\nexport const SliderWithNumberField = React.forwardRef<\n HTMLDivElement,\n SliderWithNumberFieldProps\n>(\n (\n {\n className,\n min = 0,\n max = 100,\n step = 1,\n value,\n defaultValue,\n disabled,\n onChange,\n inputWidth,\n showButtons = false,\n id,\n \"aria-label\": ariaLabel,\n ...props\n },\n ref,\n ) => {\n const reactId = React.useId();\n const uniqueId = id || reactId;\n const sliderId = `${uniqueId}-slider`;\n const numberId = `${uniqueId}-number`;\n\n const handleChange = (val: number | number[], event: Event) => {\n if (onChange) {\n const newValue = Array.isArray(val) ? val[0] : val;\n onChange(newValue, event);\n }\n };\n\n const defaultWidth = showButtons ? \"pb:w-28\" : \"pb:w-20\";\n const widthClass = inputWidth\n ? inputWidth.startsWith(\"pb:\")\n ? inputWidth\n : `pb:${inputWidth}`\n : defaultWidth;\n\n return (\n <div\n ref={ref}\n className={cn(\n \"pb:flex pb:items-center pb:gap-3 pb:w-full pb:min-w-0\",\n className,\n )}\n {...props}\n >\n <div className=\"pb:flex-1 pb:min-w-0\">\n <Slider\n id={sliderId}\n min={min}\n max={max}\n step={step}\n value={value}\n defaultValue={defaultValue}\n disabled={disabled}\n aria-label={ariaLabel ? `${ariaLabel} slider` : \"Slider value\"}\n onChange={handleChange}\n className=\"pb:w-full\"\n />\n </div>\n <div className={cn(widthClass, \"pb:shrink-0\")}>\n <NumberField\n id={numberId}\n value={value}\n defaultValue={defaultValue}\n min={min}\n max={max}\n step={step}\n disabled={disabled}\n aria-label={ariaLabel ? `${ariaLabel} input` : \"Numeric input\"}\n onChange={(val, event) => {\n if (val !== null) {\n handleChange(val, event);\n }\n }}\n showButtons={showButtons}\n />\n </div>\n </div>\n );\n },\n);\n\nSliderWithNumberField.displayName = \"SliderWithNumberField\";\n\nexport default SliderWithNumberField;\n","import React from \"react\";\nimport { NumberField as BaseNumberField } from \"@base-ui/react\";\nimport { cn } from \"../utils\";\nimport { Icon } from \"../foundations/Icon\";\n\nexport interface NumberFieldProps extends React.AriaAttributes {\n value?: number | null;\n defaultValue?: number;\n min?: number;\n max?: number;\n step?: number;\n onChange?: (value: number | null, event: Event) => void;\n disabled?: boolean;\n readOnly?: boolean;\n className?: string;\n id?: string;\n placeholder?: string;\n showButtons?: boolean;\n}\n\nexport const NumberField = React.forwardRef<HTMLDivElement, NumberFieldProps>(\n (\n {\n className,\n value,\n defaultValue,\n min,\n max,\n step,\n onChange,\n disabled,\n readOnly,\n id: propsId,\n placeholder,\n showButtons = false,\n \"aria-label\": ariaLabel,\n ...props\n },\n ref,\n ) => {\n return (\n <div className=\"pb:w-full\">\n <BaseNumberField.Root\n ref={ref}\n id={propsId}\n value={value}\n defaultValue={defaultValue}\n min={min}\n max={max}\n step={step}\n onValueChange={(val, details) => {\n if (onChange) {\n const event = details?.event || (details as unknown as Event);\n onChange(val, event);\n }\n }}\n disabled={disabled}\n readOnly={readOnly}\n className={cn(\"pb:flex pb:flex-col pb:gap-1\", className)}\n {...props}\n >\n <BaseNumberField.Group\n className={cn(\n \"pb:group pb:relative pb:flex pb:items-center pb:rounded-md pb:border-0 pb:bg-primary/10 pb:ring-1 pb:ring-inset pb:ring-gray-300 pb:focus-within:ring-2 pb:focus-within:ring-primary pb:shadow-sm\",\n disabled && \"pb:opacity-50 pb:cursor-not-allowed\",\n )}\n >\n {showButtons && (\n <BaseNumberField.Decrement\n aria-label=\"Decrement\"\n className=\"pb:relative pb:z-20 pb:flex pb:items-center pb:justify-center pb:w-8 pb:h-9 pb:text-gray-500 pb:hover:text-gray-700 pb:hover:bg-gray-100/50 pb:rounded-l-md pb:border-r pb:border-gray-300 disabled:pb:opacity-30 pb:cursor-pointer\"\n >\n <Icon size=\"sm\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M19.5 12h-15\"\n />\n </Icon>\n </BaseNumberField.Decrement>\n )}\n\n <BaseNumberField.Input\n placeholder={placeholder}\n aria-label={ariaLabel || (typeof placeholder === \"string\" ? placeholder : \"Number input\")}\n className={cn(\n \"pb:block pb:w-full pb:bg-transparent pb:border-0 pb:px-3 pb:py-1.5 pb:text-gray-900 pb:placeholder:text-gray-400 pb:focus:ring-0 pb:sm:text-sm pb:sm:leading-6 pb:text-center pb:appearance-none pb:relative pb:z-0\",\n !showButtons && \"pb:rounded-md\",\n )}\n />\n\n {showButtons && (\n <BaseNumberField.Increment\n aria-label=\"Increment\"\n className=\"pb:relative pb:z-20 pb:flex pb:items-center pb:justify-center pb:w-8 pb:h-9 pb:text-gray-500 pb:hover:text-gray-700 pb:hover:bg-gray-100/50 pb:rounded-r-md pb:border-l pb:border-gray-300 disabled:pb:opacity-30 pb:cursor-pointer\"\n >\n <Icon size=\"sm\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M12 4.5v15m7.5-7.5h-15\"\n />\n </Icon>\n </BaseNumberField.Increment>\n )}\n\n <BaseNumberField.ScrubArea className=\"pb:absolute pb:inset-0 pb:z-10 pb:cursor-ew-resize pb:opacity-0 pb:hover:opacity-10 pb:transition-opacity pb:bg-primary/5 pb:rounded-md pb:pointer-events-none group-pb:hover:pointer-events-auto\" />\n </BaseNumberField.Group>\n </BaseNumberField.Root>\n </div>\n );\n },\n);\n\nNumberField.displayName = \"NumberField\";\n","import React from \"react\";\nimport { Menu as BaseMenu } from \"@base-ui/react\";\nimport { cn } from \"../utils\";\n\nexport interface DropdownProps {\n trigger: React.ReactNode;\n children: React.ReactNode;\n align?: \"start\" | \"center\" | \"end\";\n className?: string;\n}\n\nexport function Dropdown({\n trigger,\n children,\n align = \"end\",\n className,\n}: DropdownProps) {\n return (\n <BaseMenu.Root>\n {React.isValidElement(trigger) ? (\n <BaseMenu.Trigger render={trigger} />\n ) : (\n <BaseMenu.Trigger>{trigger}</BaseMenu.Trigger>\n )}\n <BaseMenu.Portal>\n <BaseMenu.Positioner align={align} sideOffset={5}>\n <BaseMenu.Popup\n className={cn(\n \"pb:z-50 pb:min-w-[8rem] pb:overflow-hidden pb:rounded-md pb:border pb:bg-white pb:p-1 pb:shadow-md pb:data-[state=open]:animate-in pb:data-[state=closed]:animate-out pb:data-[state=closed]:fade-out-0 pb:data-[state=open]:fade-in-0 pb:data-[state=closed]:zoom-out-95 pb:data-[state=open]:zoom-in-95\",\n className,\n )}\n >\n {children}\n </BaseMenu.Popup>\n </BaseMenu.Positioner>\n </BaseMenu.Portal>\n </BaseMenu.Root>\n );\n}\n\nexport const DropdownItem = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<typeof BaseMenu.Item>\n>(({ className, ...props }, ref) => (\n <BaseMenu.Item\n ref={ref}\n className={cn(\n \"pb:relative pb:flex pb:cursor-default pb:select-none pb:items-center pb:rounded-sm pb:px-2 pb:py-1.5 pb:text-sm pb:outline-none pb:transition-colors pb:data-[highlighted]:bg-gray-100 pb:data-[highlighted]:text-gray-900\",\n className,\n )}\n {...props}\n />\n));\nDropdownItem.displayName = \"DropdownItem\";\n\nexport const DropdownSeparator = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<typeof BaseMenu.Separator>\n>(({ className, ...props }, ref) => (\n <BaseMenu.Separator\n ref={ref}\n className={cn(\"pb:-mx-1 pb:my-1 pb:h-px pb:bg-gray-100\", className)}\n {...props}\n />\n));\nDropdownSeparator.displayName = \"DropdownSeparator\";\n","import React from \"react\";\nimport { Switch as BaseSwitch } from \"@base-ui/react\";\nimport { cn } from \"../utils\";\n\nexport interface SwitchProps extends React.AriaAttributes {\n checked?: boolean;\n defaultChecked?: boolean;\n onChange?: (checked: boolean, event: Event) => void;\n disabled?: boolean;\n className?: string;\n id?: string;\n name?: string;\n}\n\nexport const Switch = React.forwardRef<HTMLButtonElement, SwitchProps>(\n (\n {\n checked,\n defaultChecked,\n onChange,\n disabled,\n className,\n id: externalId,\n ...props\n },\n ref,\n ) => {\n const autoId = React.useId();\n const id = externalId ?? autoId;\n return (\n <div className={cn(\"pb:flex pb:items-center pb:gap-2\", className)}>\n <BaseSwitch.Root\n ref={ref}\n id={id}\n checked={checked}\n defaultChecked={defaultChecked}\n onCheckedChange={(checked, eventDetails) => {\n onChange?.(checked, eventDetails?.event as Event);\n }}\n disabled={disabled}\n className={cn(\n \"pb:relative pb:inline-flex pb:h-6 pb:w-11 pb:flex-shrink-0 pb:cursor-pointer pb:rounded-full pb:border-2 pb:border-transparent pb:transition-colors pb:duration-200 pb:ease-in-out pb:focus:outline-none pb:focus:ring-2 pb:focus:ring-primary pb:focus:ring-offset-2\",\n \"pb:data-[checked]:bg-primary pb:data-[unchecked]:bg-gray-200\",\n disabled && \"pb:opacity-50 pb:cursor-not-allowed\",\n )}\n {...props}\n >\n <BaseSwitch.Thumb\n className={cn(\n \"pb:pointer-events-none pb:inline-block pb:h-5 pb:w-5 pb:transform pb:rounded-full pb:bg-white pb:shadow pb:ring-0 pb:transition pb:duration-200 pb:ease-in-out\",\n \"pb:data-[checked]:translate-x-5 pb:data-[unchecked]:translate-x-0\",\n )}\n />\n </BaseSwitch.Root>\n </div>\n );\n },\n);\n\nSwitch.displayName = \"Switch\";\n","import React from \"react\";\nimport { Tooltip as BaseTooltip } from \"@base-ui/react\";\nimport { cn } from \"../utils\";\nimport { Icon } from \"../foundations/Icon\";\n\nexport interface TooltipProps {\n content: React.ReactNode;\n children: React.ReactNode;\n className?: string;\n delay?: \"normal\" | \"slow\";\n}\n\nexport function Tooltip({\n content,\n children,\n className,\n delay = \"normal\",\n}: TooltipProps) {\n return (\n <BaseTooltip.Provider delay={delay === \"slow\" ? 1000 : 0}>\n <BaseTooltip.Root>\n {React.isValidElement(children) ? (\n <BaseTooltip.Trigger render={children} />\n ) : (\n <BaseTooltip.Trigger>{children}</BaseTooltip.Trigger>\n )}\n <BaseTooltip.Portal>\n <BaseTooltip.Positioner sideOffset={8}>\n <BaseTooltip.Popup\n className={cn(\n \"pb:z-50 pb:rounded pb:shadow-lg pb:bg-white pb:p-2 pb:text-xs pb:text-center pb:whitespace-normal pb:max-w-xs pb:text-gray-900 pb:border pb:border-gray-200\",\n className,\n )}\n >\n {content}\n <BaseTooltip.Arrow className=\"pb:fill-white pb:stroke-gray-200\" />\n </BaseTooltip.Popup>\n </BaseTooltip.Positioner>\n </BaseTooltip.Portal>\n </BaseTooltip.Root>\n </BaseTooltip.Provider>\n );\n}\nexport interface HelperTooltipProps {\n content: React.ReactNode;\n className?: string;\n}\n\nexport function HelperTooltip({ content, className }: HelperTooltipProps) {\n return (\n <Tooltip content={content} className={className}>\n <Icon size=\"md\" className=\"pb:text-gray-500 pb:hover:text-gray-700 pb:cursor-help\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M9.879 7.519c1.171-1.025 3.071-1.025 4.242 0 1.172 1.025 1.172 2.687 0 3.712-.203.179-.43.326-.67.442-.745.361-1.45.999-1.45 1.827v.75M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Zm-9 5.25h.008v.008H12v-.008Z\"\n />\n </Icon>\n </Tooltip>\n );\n}\n","import React from \"react\";\nimport { cn } from \"../utils\";\nimport { HelperTooltip } from \"../feedback/Tooltip\";\n\nexport interface LabelProps extends React.LabelHTMLAttributes<HTMLLabelElement> {\n children: React.ReactNode;\n tooltip?: string;\n className?: string;\n}\n\nexport function Label({ children, tooltip, className, ...props }: LabelProps) {\n return (\n <label\n className={cn(\n \"pb:relative pb:block pb:text-sm pb:font-bold pb:leading-6 pb:text-gray-600 pb:mb-1 pb:group-focus-within:text-gray-800\",\n className,\n )}\n {...props}\n >\n <div className=\"pb:flex pb:items-center pb:gap-1\">\n {children}\n {tooltip && <HelperTooltip content={tooltip} />}\n </div>\n </label>\n );\n}\n","import { ReactNode } from \"react\";\nimport { cn } from \"../utils\";\nimport { Toggle, ToggleGroup } from \"@base-ui/react\";\n\nexport interface TabRadioOption<T extends string> {\n value: T;\n label: ReactNode;\n disabled?: boolean;\n}\n\nexport interface TabRadioProps<T extends string> {\n options: readonly TabRadioOption<T>[];\n value: T | undefined | null;\n onChange: (value: T | undefined) => void;\n className?: string;\n variant?: \"default\" | \"primary\" | \"danger\";\n \"aria-label\"?: string;\n}\n\nconst variantStyles = {\n default:\n \"pb:data-[pressed]:bg-white pb:data-[pressed]:text-gray-900 pb:data-[pressed]:shadow-sm pb:data-[pressed]:ring-1 pb:data-[pressed]:ring-gray-200\",\n primary:\n \"pb:data-[pressed]:bg-primary/20 pb:data-[pressed]:shadow-sm pb:data-[pressed]:ring-1 pb:data-[pressed]:ring-primary\",\n danger:\n \"pb:data-[pressed]:bg-danger/20 pb:data-[pressed]:shadow-sm pb:data-[pressed]:ring-1 pb:data-[pressed]:ring-danger\",\n};\n\nexport function TabRadio<T extends string>({\n options,\n value,\n onChange,\n className,\n variant = \"default\",\n \"aria-label\": ariaLabel,\n}: TabRadioProps<T>) {\n return (\n <ToggleGroup\n value={value ? [value] : []}\n onValueChange={(val) => {\n onChange(val[0] as T | undefined);\n }}\n aria-label={ariaLabel}\n className={cn(\n \"pb:inline-flex pb:p-1 pb:space-x-1 pb:bg-gray-100 pb:rounded-lg pb:border pb:border-gray-200\",\n className,\n )}\n >\n {options.map((option) => {\n return (\n <Toggle\n key={option.value}\n value={option.value}\n disabled={option.disabled}\n className={cn(\n \"pb:relative pb:cursor-pointer pb:px-3 pb:py-1.5 pb:text-sm pb:font-medium pb:rounded-md pb:transition-all pb:flex pb:items-center pb:justify-center pb:outline-none\",\n \"pb:text-gray-600 pb:hover:text-gray-900 pb:hover:bg-gray-200\",\n \"pb:disabled:opacity-50 pb:disabled:cursor-not-allowed pb:disabled:hover:bg-transparent pb:disabled:hover:text-gray-600\",\n variantStyles[variant],\n )}\n >\n {option.label}\n </Toggle>\n );\n })}\n </ToggleGroup>\n );\n}\n","import { Field as BaseField } from \"@base-ui/react\";\nimport React from \"react\";\nimport { cn } from \"../utils\";\nimport { Label } from \"./Label\";\n\nexport interface FieldProps extends BaseField.Root.Props {\n label?: string;\n description?: string;\n error?: string;\n tooltip?: string;\n children: React.ReactNode;\n icon?: React.ReactNode;\n labelPlacement?: \"top\" | \"left\" | \"right\";\n labelWeight?: \"bold\" | \"normal\";\n}\n\n/**\n * A wrapper component that provides a label, description, and error message for form controls.\n * Uses Base UI's Field primitives for accessibility.\n */\nexport const Field = React.forwardRef<HTMLDivElement, FieldProps>(\n (\n {\n label,\n description,\n error,\n tooltip,\n children,\n className,\n icon,\n labelPlacement = \"top\",\n labelWeight = \"bold\",\n ...props\n },\n ref,\n ) => {\n const isHorizontal =\n labelPlacement === \"left\" || labelPlacement === \"right\";\n const labelOnRight = labelPlacement === \"right\";\n\n return (\n <BaseField.Root\n ref={ref}\n className={cn(\n \"pb:flex pb:w-full\",\n isHorizontal ? \"pb:flex-col pb:gap-1\" : \"pb:flex-col pb:gap-1.5\",\n className as string,\n )}\n {...props}\n >\n <div\n className={cn(\n \"pb:flex\",\n isHorizontal ? \"pb:flex-row pb:items-center pb:gap-2\" : \"pb:flex-col pb:gap-1.5\",\n )}\n >\n {labelOnRight && <div className=\"pb:relative\">{children}</div>}\n\n {label && (\n <BaseField.Label\n render={(props) => (\n <Label\n tooltip={tooltip}\n className={cn(\n \"pb:mb-0\",\n labelWeight === \"normal\" && \"pb:font-normal\",\n )}\n {...props}\n >\n <span className=\"pb:flex pb:items-center pb:gap-1\">\n {icon && <span className=\"pb:flex-shrink-0\">{icon}</span>}\n {label}\n </span>\n </Label>\n )}\n />\n )}\n\n {!labelOnRight && <div className=\"pb:relative\">{children}</div>}\n </div>\n\n {description && (\n <BaseField.Description\n className={cn(\n \"pb:text-xs pb:text-gray-500\",\n labelOnRight && \"pb:ml-7\", // Aligns description with label text when child is on left\n )}\n >\n {description}\n </BaseField.Description>\n )}\n\n {error && (\n <BaseField.Error\n className={cn(\n \"pb:text-xs pb:text-red-600 pb:font-medium\",\n labelOnRight && \"pb:ml-7\",\n )}\n >\n {error}\n </BaseField.Error>\n )}\n </BaseField.Root>\n );\n },\n);\n\nField.displayName = \"Field\";\n","import { Input as BaseInput } from \"@base-ui/react\";\nimport React, { ComponentPropsWithoutRef } from \"react\";\nimport { cn } from \"../utils\";\n\nexport type TextAreaProps = React.TextareaHTMLAttributes<HTMLTextAreaElement>;\n\nexport const TextArea = React.forwardRef<HTMLTextAreaElement, TextAreaProps>(\n ({ className, id, ...props }, ref) => {\n return (\n <BaseInput\n render={<textarea />}\n ref={ref as React.Ref<HTMLTextAreaElement>}\n id={id}\n className={cn(\n \"pb:block pb:w-full pb:rounded-md pb:border-0 pb:px-1.5 pb:py-1.5 pb:text-gray-900 pb:ring-1 pb:ring-inset pb:ring-gray-300 pb:placeholder:text-gray-400 pb:focus:ring-2 pb:focus:ring-inset pb:focus:ring-primary pb:sm:text-sm pb:sm:leading-6 pb:bg-primary/10 pb:appearance-none\",\n className,\n )}\n {...(props as ComponentPropsWithoutRef<typeof BaseInput>)}\n />\n );\n },\n);\n\nTextArea.displayName = \"TextArea\";\n","import { Checkbox as BaseCheckbox } from \"@base-ui/react\";\nimport React, { ComponentPropsWithoutRef } from \"react\";\nimport { cn } from \"../utils\";\nimport { Icon } from \"../foundations/Icon\";\n\nexport type CheckboxProps = React.InputHTMLAttributes<HTMLInputElement>;\n\nexport const Checkbox = React.forwardRef<HTMLButtonElement, CheckboxProps>(\n ({ className, id, checked, onChange, ...props }, ref) => {\n return (\n <BaseCheckbox.Root\n ref={ref}\n id={id}\n checked={checked}\n onCheckedChange={(val) => {\n if (onChange) {\n // Mocking a change event since Base UI uses onCheckedChange\n onChange({\n target: { checked: val === true },\n } as React.ChangeEvent<HTMLInputElement>);\n }\n }}\n className={cn(\n \"pb:flex pb:h-5 pb:w-5 pb:shrink-0 pb:items-center pb:justify-center pb:rounded pb:border pb:border-gray-300 pb:bg-white pb:shadow-sm pb:transition-all pb:focus-visible:outline-none pb:focus-visible:ring-2 pb:focus-visible:ring-primary pb:focus-visible:ring-offset-2 pb:disabled:cursor-not-allowed pb:disabled:opacity-50\",\n \"pb:hover:border-primary pb:hover:bg-primary/5\",\n \"pb:data-[state=checked]:bg-primary pb:data-[state=checked]:border-primary pb:data-[state=checked]:text-white\",\n className,\n )}\n {...(props as ComponentPropsWithoutRef<typeof BaseCheckbox.Root>)}\n >\n <BaseCheckbox.Indicator>\n <Icon size=\"sm\" strokeWidth={3} className=\"pb:text-dark-primary\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"m4.5 12.75 6 6 9-13.5\"\n />\n </Icon>\n </BaseCheckbox.Indicator>\n </BaseCheckbox.Root>\n );\n },\n);\n\nCheckbox.displayName = \"Checkbox\";\n","import React from \"react\";\nimport { cn } from \"../utils\";\n\nexport type PeerbotsColor =\n | \"Light Blue\"\n | \"Blue\"\n | \"Green\"\n | \"Red\"\n | \"Purple\"\n | \"Pink\"\n | \"Yellow\"\n | \"Orange\"\n | \"Grey\"\n | \"Black\"\n | \"White\";\n\nexport const PEERBOTS_COLOR_MAP: Record<PeerbotsColor, string> = {\n \"Light Blue\": \"#ABE3FA\",\n Blue: \"#5F94D6\",\n Green: \"#65C77D\",\n Red: \"#E6817E\",\n Purple: \"#9B86F3\",\n Pink: \"#EBA4E4\",\n Yellow: \"#F8EDB1\",\n Orange: \"#E6A575\",\n Grey: \"#CECECE\",\n Black: \"#4D4D4D\",\n White: \"#FDFEFE\",\n};\n\nexport const PEERBOTS_FONT_COLOR_MAP: Record<PeerbotsColor, string> = {\n \"Light Blue\": \"#020307\",\n Blue: \"#020307\",\n Green: \"#020307\",\n Red: \"#020307\",\n Purple: \"#020307\",\n Pink: \"#020307\",\n Yellow: \"#020307\",\n Orange: \"#020307\",\n Grey: \"#020307\",\n Black: \"#FDFEFE\",\n White: \"#020307\",\n};\n\nexport interface PeerbotsColorSelectorProps {\n selectedColor?: PeerbotsColor | string;\n onColorSelect: (color: PeerbotsColor) => void;\n colors?: PeerbotsColor[];\n size?: \"sm\" | \"md\" | \"lg\";\n className?: string;\n ariaLabelPrefix?: string;\n}\n\nexport function PeerbotsColorSelector({\n selectedColor,\n onColorSelect,\n colors = Object.keys(PEERBOTS_COLOR_MAP) as PeerbotsColor[],\n size = \"md\",\n className,\n ariaLabelPrefix = \"Select color\",\n}: PeerbotsColorSelectorProps) {\n const sizeClasses = {\n sm: \"pb:h-6 pb:w-6\",\n md: \"pb:h-8 pb:w-8\",\n lg: \"pb:h-10 pb:w-10\",\n };\n\n return (\n <div\n role=\"radiogroup\"\n aria-label=\"Color selector\"\n className={cn(\n \"pb:inline-flex pb:flex-wrap pb:gap-1 pb:items-center\",\n className,\n )}\n >\n {colors.map((colorName) => {\n const isSelected = selectedColor === colorName;\n return (\n <button\n key={colorName}\n type=\"button\"\n role=\"radio\"\n aria-checked={isSelected}\n aria-label={`${ariaLabelPrefix} ${colorName}`}\n className={cn(\n \"pb:rounded-full pb:cursor-pointer pb:border pb:transition-all pb:duration-150 pb:focus-visible:ring-2 pb:focus-visible:ring-gray-400 pb:focus-visible:outline-none\",\n sizeClasses[size],\n isSelected\n ? \"pb:border-2 pb:border-black pb:scale-110 pb:shadow-sm\"\n : \"pb:border-gray-300 pb:hover:border-gray-500 pb:hover:scale-105\",\n )}\n style={{ background: PEERBOTS_COLOR_MAP[colorName] || colorName }}\n onClick={() => onColorSelect(colorName)}\n />\n );\n })}\n </div>\n );\n}\n","import React, { useState } from \"react\";\nimport { cn } from \"../utils\";\nimport { ComponentColor, ComponentRadius, ComponentSize, FillVariant } from \"../types\";\n\nexport interface ChipOption<T = string> {\n value: T;\n label: React.ReactNode;\n badge?: React.ReactNode;\n disabled?: boolean;\n icon?: React.ReactNode;\n}\n\nexport interface ChipGroupProps<T = string> {\n /** Array of selectable chip options */\n options: ChipOption<T>[];\n /** Controlled single selected value */\n value?: T;\n /** Uncontrolled initial single selected value */\n defaultValue?: T;\n /** Callback fired when single selection changes */\n onChange?: (value: T) => void;\n /** Enable multiple selection mode */\n multiple?: boolean;\n /** Controlled array of selected values (for multi mode) */\n values?: T[];\n /** Uncontrolled initial array of selected values (for multi mode) */\n defaultValues?: T[];\n /** Callback fired when multiple selection changes */\n onMultipleChange?: (values: T[]) => void;\n /** Color theme */\n color?: ComponentColor;\n /** Visual fill style */\n variant?: \"solid\" | \"soft\" | \"outline\";\n /** Size scale */\n size?: ComponentSize;\n /** Border radius scale */\n radius?: ComponentRadius;\n /** Enable horizontal scrollable rail */\n scrollable?: boolean;\n className?: string;\n id?: string;\n name?: string;\n}\n\nconst activeColorStyles: Record<string, Record<string, string>> = {\n solid: {\n primary:\n \"pb:bg-primary pb:text-gray-900 pb:border-primary pb:shadow-sm pb:font-bold\",\n teal: \"pb:bg-peerbots-teal pb:text-gray-900 pb:border-peerbots-teal pb:shadow-sm pb:font-bold\",\n pink: \"pb:bg-rose-700 pb:text-white pb:border-rose-700 pb:shadow-sm pb:font-bold\",\n darkblue:\n \"pb:bg-peerbots-darkblue pb:text-white pb:border-peerbots-darkblue pb:shadow-sm pb:font-bold\",\n neutral:\n \"pb:bg-gray-800 pb:text-white pb:border-gray-800 pb:shadow-sm pb:font-bold\",\n danger: \"pb:bg-red-600 pb:text-white pb:border-red-600 pb:shadow-sm pb:font-bold\",\n },\n soft: {\n primary:\n \"pb:bg-primary/20 pb:text-teal-950 pb:border-primary/40 pb:font-bold\",\n teal: \"pb:bg-peerbots-teal/20 pb:text-teal-950 pb:border-peerbots-teal/40 pb:font-bold\",\n pink: \"pb:bg-peerbots-pink/20 pb:text-rose-950 pb:border-peerbots-pink/40 pb:font-bold\",\n darkblue:\n \"pb:bg-peerbots-darkblue/20 pb:text-peerbots-darkblue pb:border-peerbots-darkblue/40 pb:font-bold\",\n neutral:\n \"pb:bg-gray-200 pb:text-gray-900 pb:border-gray-300 pb:font-bold\",\n danger: \"pb:bg-red-100 pb:text-red-900 pb:border-red-300 pb:font-bold\",\n },\n outline: {\n primary:\n \"pb:bg-primary/10 pb:text-teal-950 pb:border-teal-700 pb:font-bold pb:border-2\",\n teal: \"pb:bg-peerbots-teal/10 pb:text-peerbots-darkteal pb:border-peerbots-darkteal pb:font-bold pb:border-2\",\n pink: \"pb:bg-peerbots-pink/10 pb:text-rose-800 pb:border-rose-700 pb:font-bold pb:border-2\",\n darkblue:\n \"pb:bg-peerbots-darkblue/10 pb:text-peerbots-darkblue pb:border-peerbots-darkblue pb:font-bold pb:border-2\",\n neutral:\n \"pb:bg-gray-100 pb:text-gray-900 pb:border-gray-400 pb:font-bold pb:border-2\",\n danger: \"pb:bg-red-50 pb:text-red-900 pb:border-red-500 pb:font-bold pb:border-2\",\n },\n};\n\nconst inactiveStyles =\n \"pb:bg-white pb:text-gray-700 pb:border-gray-300 pb:hover:border-gray-400 pb:hover:bg-gray-50 pb:hover:text-gray-950\";\n\nconst radiusClasses: Record<ComponentRadius, string> = {\n none: \"pb:rounded-none\",\n sm: \"pb:rounded-md\",\n md: \"pb:rounded-xl\",\n lg: \"pb:rounded-2xl\",\n \"2xl\": \"pb:rounded-2xl\",\n pill: \"pb:rounded-full\",\n};\n\nconst sizeClasses: Record<ComponentSize, { chip: string; text: string; badge: string }> = {\n xs: {\n chip: \"pb:px-2 pb:py-0.5 pb:gap-1\",\n text: \"pb:text-[10px]\",\n badge: \"pb:text-[8px] pb:px-1 pb:py-0.5\",\n },\n sm: {\n chip: \"pb:px-3 pb:py-1 pb:gap-1.5\",\n text: \"pb:text-xs\",\n badge: \"pb:text-[9px] pb:px-1.5 pb:py-0.5\",\n },\n md: {\n chip: \"pb:px-3.5 pb:py-1.5 pb:gap-2\",\n text: \"pb:text-sm\",\n badge: \"pb:text-[10px] pb:px-1.5 pb:py-0.5\",\n },\n lg: {\n chip: \"pb:px-4.5 pb:py-2 pb:gap-2.5\",\n text: \"pb:text-base\",\n badge: \"pb:text-xs pb:px-2 pb:py-0.5\",\n },\n xl: {\n chip: \"pb:px-6 pb:py-2.5 pb:gap-3\",\n text: \"pb:text-lg\",\n badge: \"pb:text-xs pb:px-2.5 pb:py-1\",\n },\n};\n\nexport function ChipGroup<T = string>({\n options,\n value: controlledValue,\n defaultValue,\n onChange,\n multiple = false,\n values: controlledValues,\n defaultValues,\n onMultipleChange,\n color = \"teal\",\n variant = \"soft\",\n size = \"md\",\n radius = \"pill\",\n scrollable = false,\n className,\n id,\n name,\n}: ChipGroupProps<T>) {\n const [internalValue, setInternalValue] = useState<T | undefined>(\n defaultValue !== undefined ? defaultValue : options[0]?.value,\n );\n const [internalValues, setInternalValues] = useState<T[]>(\n defaultValues || [],\n );\n\n const activeValue = controlledValue !== undefined ? controlledValue : internalValue;\n const activeValues = controlledValues !== undefined ? controlledValues : internalValues;\n\n const handleSelect = (optionValue: T, disabled?: boolean) => {\n if (disabled) return;\n\n if (multiple) {\n const exists = activeValues.includes(optionValue);\n const nextValues = exists\n ? activeValues.filter((v) => v !== optionValue)\n : [...activeValues, optionValue];\n\n if (controlledValues === undefined) {\n setInternalValues(nextValues);\n }\n onMultipleChange?.(nextValues);\n } else {\n if (controlledValue === undefined) {\n setInternalValue(optionValue);\n }\n onChange?.(optionValue);\n }\n };\n\n const activeStyle =\n activeColorStyles[variant]?.[color] ||\n activeColorStyles[variant]?.teal ||\n activeColorStyles.soft.teal;\n\n const currentSize = sizeClasses[size] || sizeClasses.md;\n\n return (\n <div\n id={id}\n role={multiple ? \"group\" : \"radiogroup\"}\n aria-label={name}\n className={cn(\n \"pb:flex pb:items-center pb:gap-2 pb:box-border\",\n scrollable\n ? \"pb:overflow-x-auto pb:no-scrollbar pb:py-1 pb:px-0.5\"\n : \"pb:flex-wrap\",\n className,\n )}\n >\n {options.map((option, idx) => {\n const isSelected = multiple\n ? activeValues.includes(option.value)\n : activeValue === option.value;\n\n return (\n <button\n key={idx}\n type=\"button\"\n role={multiple ? \"checkbox\" : \"radio\"}\n aria-checked={isSelected}\n disabled={option.disabled}\n onClick={() => handleSelect(option.value, option.disabled)}\n className={cn(\n \"pb:inline-flex pb:items-center pb:border pb:font-medium pb:transition-all pb:duration-150 pb:cursor-pointer pb:select-none pb:shrink-0 pb:focus:outline-none pb:focus-visible:ring-2 pb:focus-visible:ring-peerbots-teal pb:focus-visible:ring-offset-1\",\n radiusClasses[radius] || radiusClasses.pill,\n currentSize.chip,\n currentSize.text,\n isSelected ? activeStyle : inactiveStyles,\n option.disabled &&\n \"pb:opacity-40 pb:cursor-not-allowed pb:bg-gray-100 pb:text-gray-400 pb:border-gray-200\",\n )}\n >\n {option.icon && (\n <span className=\"pb:shrink-0 pb:flex pb:items-center\">\n {option.icon}\n </span>\n )}\n\n <span>{option.label}</span>\n\n {option.badge && (\n <span\n className={cn(\n \"pb:rounded-full pb:font-bold pb:leading-none pb:tracking-tight\",\n currentSize.badge,\n isSelected\n ? \"pb:bg-black/15 pb:text-current\"\n : \"pb:bg-gray-200 pb:text-gray-800\",\n )}\n >\n {option.badge}\n </span>\n )}\n </button>\n );\n })}\n </div>\n );\n}\n","import React from \"react\";\nimport { cn } from \"../utils\";\nimport { ComponentSize, ComponentRadius, SurfaceVariant } from \"../types\";\n\nexport interface CardProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n /**\n * Surface treatment / fill style.\n * @default \"surface\"\n */\n variant?: SurfaceVariant | \"default\" | \"elevated\";\n /**\n * Background color tinting.\n * @default \"default\"\n */\n color?: \"default\" | \"teal\" | \"pink\";\n /**\n * Card padding scale.\n * @default \"md\"\n */\n padding?: \"none\" | ComponentSize;\n /**\n * Border radius scale.\n * @default \"2xl\"\n */\n radius?: ComponentRadius;\n /** Whether the card shows interactive hover elevation */\n hoverable?: boolean;\n id?: string;\n as?: React.ElementType;\n href?: string;\n target?: string;\n rel?: string;\n}\n\nconst variantStyles: Record<string, string> = {\n surface: \"pb:bg-white pb:border pb:border-gray-200 pb:shadow-md\",\n elevated: \"pb:bg-white pb:border pb:border-gray-200 pb:shadow-md\",\n default: \"pb:bg-white pb:border pb:border-gray-200 pb:shadow-xs\",\n glass:\n \"pb:bg-white/90 pb:backdrop-blur-xl pb:border pb:border-white/40 pb:shadow-xl\",\n flat: \"pb:bg-gray-50/80 pb:border pb:border-gray-200\",\n outline: \"pb:bg-transparent pb:border-2 pb:border-gray-300\",\n};\n\nconst tintStyles: Record<string, string> = {\n default: \"\",\n teal: \"pb:bg-peerbots-teal/5 pb:border pb:border-peerbots-darkteal/30\",\n pink: \"pb:bg-peerbots-pink/5 pb:border pb:border-rose-300\",\n};\n\nconst radiusClasses: Record<ComponentRadius, string> = {\n none: \"pb:rounded-none\",\n sm: \"pb:rounded-md\",\n md: \"pb:rounded-xl\",\n lg: \"pb:rounded-2xl\",\n \"2xl\": \"pb:rounded-2xl\",\n pill: \"pb:rounded-full\",\n};\n\nconst paddingClasses: Record<string, string> = {\n none: \"\",\n xs: \"pb:p-2.5\",\n sm: \"pb:p-4\",\n md: \"pb:p-6 sm:pb:p-8\",\n lg: \"pb:p-8 sm:pb:p-10 md:pb:p-12\",\n xl: \"pb:p-10 sm:pb:p-12 md:pb:p-16\",\n};\n\nexport const Card = React.forwardRef<HTMLElement, CardProps>(\n (\n {\n children,\n className,\n variant = \"surface\",\n color = \"default\",\n padding = \"md\",\n radius = \"2xl\",\n hoverable = true,\n id,\n as: Component = \"div\",\n href,\n target,\n rel,\n ...rest\n },\n ref,\n ) => {\n const baseStyles = \"pb:overflow-hidden pb:transition-all pb:duration-300\";\n\n const hoverStyles = hoverable\n ? \"pb:hover:shadow-lg pb:hover:-translate-y-0.5 pb:hover:border-peerbots-teal/30 pb:focus-within:ring-2 pb:focus-within:ring-peerbots-teal\"\n : \"\";\n\n const isLink = Boolean(href) || Component === \"a\";\n const TargetTag = href ? \"a\" : Component;\n\n return (\n <TargetTag\n id={id}\n href={href}\n target={target}\n rel={rel}\n ref={ref as any}\n className={cn(\n baseStyles,\n radiusClasses[radius] || radiusClasses[\"2xl\"],\n color === \"default\"\n ? variantStyles[variant] || variantStyles.surface\n : tintStyles[color],\n hoverStyles,\n paddingClasses[padding] || paddingClasses.md,\n isLink && \"pb:cursor-pointer pb:block\",\n className,\n )}\n {...(rest as any)}\n >\n {children}\n </TargetTag>\n );\n },\n);\n\nCard.displayName = \"Card\";\n","import React, { useState, useId } from \"react\";\nimport { cn } from \"../utils\";\nimport { Icon } from \"../foundations/Icon\";\nimport { Text } from \"../foundations/Typography\";\n\nexport interface AccordionItem {\n id?: string;\n question?: React.ReactNode;\n title?: React.ReactNode;\n answer?: React.ReactNode;\n content?: React.ReactNode;\n description?: React.ReactNode;\n bodyHtml?: string;\n isOpenDefault?: boolean;\n}\n\nexport interface AccordionProps {\n /** List of accordion items for multi-item list mode */\n items?: AccordionItem[];\n /** Allow multiple items to be opened simultaneously */\n allowMultiple?: boolean;\n /** Visual style variant */\n variant?: \"default\" | \"bordered\" | \"flat\";\n /** Single-item mode: title for the disclosure */\n title?: React.ReactNode;\n /** Single-item mode: content/children for the disclosure */\n children?: React.ReactNode;\n /** Single-item mode: default open state */\n defaultOpen?: boolean;\n /** Controlled open state for single-item mode */\n isOpen?: boolean;\n /** Controlled toggle callback for single-item mode */\n onToggle?: (open: boolean) => void;\n className?: string;\n headerClassName?: string;\n contentClassName?: string;\n}\n\nexport const Accordion: React.FC<AccordionProps> = ({\n items,\n allowMultiple = false,\n variant = \"default\",\n title,\n children,\n defaultOpen = false,\n isOpen: controlledIsOpen,\n onToggle,\n className,\n headerClassName,\n contentClassName,\n}) => {\n const baseId = useId();\n\n // Normalize single-item props vs items array\n const resolvedItems: AccordionItem[] =\n items ||\n (title || children\n ? [\n {\n id: \"single\",\n title,\n content: children,\n isOpenDefault: defaultOpen,\n },\n ]\n : []);\n\n const [openIndices, setOpenIndices] = useState<number[]>(() => {\n const initial: number[] = [];\n resolvedItems.forEach((item, index) => {\n if (item.isOpenDefault || (index === 0 && defaultOpen)) {\n initial.push(index);\n }\n });\n return initial;\n });\n\n const toggleItem = (index: number) => {\n const isCurrentlyOpen =\n controlledIsOpen !== undefined && resolvedItems.length === 1\n ? controlledIsOpen\n : openIndices.includes(index);\n const willBeOpen = !isCurrentlyOpen;\n\n if (onToggle && resolvedItems.length === 1) {\n onToggle(willBeOpen);\n }\n\n if (controlledIsOpen === undefined) {\n if (allowMultiple) {\n setOpenIndices((prev) =>\n prev.includes(index)\n ? prev.filter((i) => i !== index)\n : [...prev, index],\n );\n } else {\n setOpenIndices((prev) => (prev.includes(index) ? [] : [index]));\n }\n }\n };\n\n return (\n <div className={cn(\"pb:w-full pb:space-y-3 pb:box-border\", className)}>\n {resolvedItems.map((item, index) => {\n const isOpen =\n controlledIsOpen !== undefined && resolvedItems.length === 1\n ? controlledIsOpen\n : openIndices.includes(index);\n\n const headingContent =\n item.question || item.title || `Section ${index + 1}`;\n const bodyContent =\n item.content || item.answer || item.description;\n\n const headerId = `${baseId}-header-${index}`;\n const panelId = `${baseId}-panel-${index}`;\n\n return (\n <div\n key={item.id || index}\n className={cn(\n \"pb:w-full pb:rounded-2xl pb:border pb:transition-all pb:duration-300 pb:overflow-hidden pb:box-border\",\n isOpen\n ? \"pb:bg-white pb:border-peerbots-teal/40 pb:shadow-xs\"\n : \"pb:bg-white/80 pb:hover:bg-white pb:border-gray-200/80\",\n variant === \"bordered\" && \"pb:border-2\",\n variant === \"flat\" && \"pb:border-none pb:bg-gray-100\",\n )}\n >\n <div className=\"pb:w-full pb:m-0 pb:p-0\">\n <button\n type=\"button\"\n id={headerId}\n aria-expanded={isOpen}\n aria-controls={panelId}\n onClick={() => toggleItem(index)}\n className={cn(\n \"pb:w-full pb:box-border pb:px-5 pb:py-4 sm:pb:px-6 sm:pb:py-4.5 pb:text-left pb:flex pb:items-center pb:justify-between pb:gap-4 pb:font-bold pb:text-gray-900 pb:hover:text-peerbots-darkteal pb:transition-colors pb:focus:outline-none pb:focus-visible:ring-2 pb:focus-visible:ring-peerbots-teal pb:cursor-pointer\",\n headerClassName,\n )}\n >\n <div className=\"pb:text-base sm:pb:text-lg pb:font-bold pb:leading-snug pb:flex-1 pb:min-w-0\">\n {typeof headingContent === \"string\" ? (\n <span>{headingContent}</span>\n ) : (\n headingContent\n )}\n </div>\n <span\n className={cn(\n \"pb:w-7 pb:h-7 pb:rounded-full pb:flex pb:items-center pb:justify-center pb:flex-shrink-0 pb:transition-transform pb:duration-300 pb:ease-in-out\",\n isOpen\n ? \"pb:bg-peerbots-teal pb:text-white pb:rotate-180\"\n : \"pb:bg-gray-100 pb:text-gray-600\",\n )}\n aria-hidden=\"true\"\n >\n <Icon\n name=\"chevronDownSmall\"\n className=\"pb:w-4 pb:h-4\"\n />\n </span>\n </button>\n </div>\n\n {/* Smooth animated expand / collapse container */}\n <div\n id={panelId}\n role=\"region\"\n aria-labelledby={headerId}\n className={cn(\n \"pb:grid pb:transition-all pb:duration-300 pb:ease-in-out\",\n isOpen\n ? \"pb:grid-rows-[1fr] pb:opacity-100\"\n : \"pb:grid-rows-[0fr] pb:opacity-0\",\n )}\n >\n <div className=\"pb:overflow-hidden\">\n <div\n className={cn(\n \"pb:w-full pb:box-border pb:px-5 pb:pb-5 pb:pt-2 sm:pb:px-6 pb:text-gray-700 pb:leading-relaxed pb:border-t pb:border-gray-100\",\n contentClassName,\n )}\n >\n {item.bodyHtml ? (\n <div\n className=\"pb:text-base pb:leading-relaxed\"\n dangerouslySetInnerHTML={{ __html: item.bodyHtml }}\n />\n ) : typeof bodyContent === \"string\" ? (\n <Text className=\"pb:text-base pb:text-gray-700 pb:leading-relaxed\">\n {bodyContent}\n </Text>\n ) : (\n bodyContent\n )}\n </div>\n </div>\n </div>\n </div>\n );\n })}\n </div>\n );\n};\n","import React, { useState } from \"react\";\nimport { Accordion } from \"./Accordion\";\nimport { ButtonProps } from \"../forms/Button\";\n\nexport interface CollapsibleProps {\n title: React.ReactNode;\n children: React.ReactNode;\n /** The variant of the trigger or panel */\n variant?: ButtonProps[\"variant\"] | \"default\" | \"bordered\" | \"flat\";\n /** The size of the trigger button */\n size?: ButtonProps[\"size\"];\n defaultOpen?: boolean;\n isOpen?: boolean;\n onToggle?: (open: boolean) => void;\n className?: string;\n}\n\nexport function Collapsible({\n title,\n children,\n variant = \"default\",\n defaultOpen = false,\n isOpen: controlledIsOpen,\n onToggle,\n className,\n}: CollapsibleProps) {\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const isOpen = controlledIsOpen !== undefined ? controlledIsOpen : internalOpen;\n\n const handleToggle = (nextOpen: boolean) => {\n if (controlledIsOpen === undefined) {\n setInternalOpen(nextOpen);\n }\n if (onToggle) {\n onToggle(nextOpen);\n }\n };\n\n const accordionVariant =\n variant === \"bordered\" || variant === \"flat\" ? variant : \"default\";\n\n return (\n <Accordion\n variant={accordionVariant}\n title={title}\n isOpen={isOpen}\n onToggle={handleToggle}\n defaultOpen={defaultOpen}\n className={className}\n >\n {children}\n </Accordion>\n );\n}\n","import * as React from \"react\";\nimport { Separator as BaseSeparator } from \"@base-ui/react/separator\";\nimport { cn } from \"../utils\";\n\nexport interface SeparatorProps extends React.ComponentPropsWithoutRef<\n typeof BaseSeparator\n> {\n orientation?: \"horizontal\" | \"vertical\";\n className?: string;\n}\n\nexport const Separator = React.forwardRef<\n React.ElementRef<typeof BaseSeparator>,\n SeparatorProps\n>(({ className, orientation = \"horizontal\", ...props }, ref) => (\n <BaseSeparator\n ref={ref}\n orientation={orientation}\n className={cn(\n \"pb:shrink-0 pb:bg-gray-200\",\n orientation === \"horizontal\" ? \"pb:h-[1px] pb:w-full\" : \"pb:h-full pb:w-[1px]\",\n className,\n )}\n {...props}\n />\n));\n\nSeparator.displayName = BaseSeparator.displayName;\n","import { ReactNode } from \"react\";\nimport { Heading } from \"../foundations/Typography\";\nimport { cn } from \"../utils\";\nimport { Card } from \"./Card\";\nimport { Collapsible } from \"./Collapsible\";\n\nexport interface SettingsPanelProps {\n /** The title of the section */\n title?: ReactNode;\n /** The content of the panel */\n children: ReactNode;\n /** Custom class for the panel wrapper */\n className?: string;\n /** Custom class for the content area */\n contentClassName?: string;\n /** Whether the panel is collapsible */\n collapsible?: boolean;\n /** Default state of the collapsible panel */\n defaultOpen?: boolean;\n /** The heading level for the title */\n headingLevel?: 1 | 2 | 3 | 4 | 5 | 6;\n}\n\n/**\n * A standardized panel for settings sections.\n * Built on top of Card and Collapsible for design system consistency.\n */\nexport function SettingsPanel({\n title,\n children,\n className,\n contentClassName,\n collapsible,\n defaultOpen = true,\n headingLevel = 3,\n}: SettingsPanelProps) {\n const content = (\n <div className={cn(\"pb:flex pb:flex-col pb:gap-3\", contentClassName)}>\n {children}\n </div>\n );\n\n if (collapsible) {\n return (\n <div className={cn(\"pb:w-full pb:mb-3\", className)}>\n <Collapsible\n title={\n typeof title === \"string\" ? (\n <Heading level={headingLevel} className=\"pb:text-gray-800 pb:font-bold\">\n {title}\n </Heading>\n ) : (\n title\n )\n }\n defaultOpen={defaultOpen}\n >\n {content}\n </Collapsible>\n </div>\n );\n }\n\n return (\n <Card\n variant=\"elevated\"\n padding=\"sm\"\n hoverable={false}\n className={cn(\"pb:w-full pb:mb-3 pb:flex pb:flex-col\", className)}\n >\n {title && (\n <div className=\"pb:flex pb:items-center pb:justify-between pb:mb-3 pb:pb-2 pb:border-b pb:border-gray-100 empty:hidden\">\n {typeof title === \"string\" ? (\n <Heading level={headingLevel} className=\"pb:text-gray-800 pb:font-bold\">\n {title}\n </Heading>\n ) : (\n title\n )}\n </div>\n )}\n {content}\n </Card>\n );\n}\n","import React, { useState } from \"react\";\nimport { Icon } from \"../foundations/Icon\";\nimport { cn } from \"../utils\";\n\nexport interface AvatarProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Image source URL. */\n src?: string | null;\n /** Full name of the user, maker, or robot. Used to generate initials and accessible label. */\n name?: string;\n /** Accessible alt text for the avatar image. Defaults to `name` or `\"Avatar\"`. */\n alt?: string;\n /** Size variant. Defaults to `\"md\"`. */\n size?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n /** Shape of the avatar. Defaults to `\"circle\"`. */\n shape?: \"circle\" | \"rounded\";\n /** Custom fallback icon if no image or initials are available. */\n fallbackIcon?: React.ReactNode;\n}\n\nfunction getInitials(name?: string): string {\n if (!name) return \"\";\n const trimmed = name.trim();\n if (!trimmed) return \"\";\n const parts = trimmed.split(/\\s+/);\n if (parts.length === 1) {\n return parts[0].substring(0, 2).toUpperCase();\n }\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n}\n\nconst colorTints = [\n \"pb:bg-teal-100 pb:text-teal-900 pb:border-teal-200\",\n \"pb:bg-blue-100 pb:text-blue-900 pb:border-blue-200\",\n \"pb:bg-purple-100 pb:text-purple-900 pb:border-purple-200\",\n \"pb:bg-amber-100 pb:text-amber-900 pb:border-amber-200\",\n \"pb:bg-rose-100 pb:text-rose-900 pb:border-rose-200\",\n \"pb:bg-emerald-100 pb:text-emerald-900 pb:border-emerald-200\",\n];\n\nfunction getHashColor(name?: string): string {\n if (!name) return colorTints[0];\n let hash = 0;\n for (let i = 0; i < name.length; i++) {\n hash = name.charCodeAt(i) + ((hash << 5) - hash);\n }\n const index = Math.abs(hash) % colorTints.length;\n return colorTints[index];\n}\n\nexport const Avatar = React.forwardRef<HTMLDivElement, AvatarProps>(\n (\n {\n src,\n name,\n alt,\n size = \"md\",\n shape = \"circle\",\n fallbackIcon,\n className,\n ...props\n },\n ref,\n ) => {\n const [imgError, setImgError] = useState(false);\n const initials = getInitials(name);\n const accessibleAlt = alt || name || \"Avatar\";\n\n const sizeStyles = {\n xs: \"pb:w-6 pb:h-6 pb:text-[10px]\",\n sm: \"pb:w-8 pb:h-8 pb:text-xs\",\n md: \"pb:w-10 pb:h-10 pb:text-sm\",\n lg: \"pb:w-12 pb:h-12 pb:text-base\",\n xl: \"pb:w-16 pb:h-16 pb:text-xl\",\n };\n\n const iconSizeStyles = {\n xs: \"pb:w-3.5 pb:h-3.5\",\n sm: \"pb:w-4 pb:h-4\",\n md: \"pb:w-5 pb:h-5\",\n lg: \"pb:w-6 pb:h-6\",\n xl: \"pb:w-8 pb:h-8\",\n };\n\n const shapeStyle = shape === \"circle\" ? \"pb:rounded-full\" : \"pb:rounded-xl\";\n const colorStyle = getHashColor(name);\n\n const hasValidImage = Boolean(src && !imgError);\n\n return (\n <div\n ref={ref}\n role=\"img\"\n aria-label={accessibleAlt}\n className={cn(\n \"pb:relative pb:inline-flex pb:items-center pb:justify-center pb:shrink-0 pb:overflow-hidden pb:border pb:font-bold pb:select-none\",\n sizeStyles[size],\n shapeStyle,\n !hasValidImage && colorStyle,\n className,\n )}\n {...props}\n >\n {hasValidImage ? (\n <img\n src={src!}\n alt={accessibleAlt}\n onError={() => setImgError(true)}\n className=\"pb:w-full pb:h-full pb:object-cover\"\n />\n ) : initials ? (\n <span className=\"pb:tracking-wider\">{initials}</span>\n ) : (\n <span className={cn(\"pb:flex pb:items-center pb:justify-center\", iconSizeStyles[size])}>\n {fallbackIcon || <Icon name=\"userCircle\" className=\"pb:w-full pb:h-full\" />}\n </span>\n )}\n </div>\n );\n },\n);\n\nAvatar.displayName = \"Avatar\";\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { Button } from \"../forms/Button\";\nimport { Icon } from \"../foundations/Icon\";\nimport { cn } from \"../utils\";\n\nexport interface DropzoneProps {\n /** Accepted MIME types or extensions (e.g. `\"image/*\"`, `\"video/*\"`, `\".zip\"`). */\n accept?: string;\n /** Maximum file size allowed in Megabytes (MB). */\n maxSizeMB?: number;\n /** Whether the dropzone is disabled. */\n disabled?: boolean;\n /**\n * Optional controlled URL or data URL of an uploaded file to display in preview mode.\n * If not provided, Dropzone will automatically generate and display a preview for selected images/videos.\n */\n previewUrl?: string | null;\n /** Optional controlled File object. */\n value?: File | null;\n /** Whether to automatically show a preview when an image/video is selected. Default is `true`. */\n showPreview?: boolean;\n /** How to render the preview. Default is `\"auto\"`. */\n previewType?: \"image\" | \"video\" | \"auto\";\n /** Main callout title. Default is `\"Click or drag file to upload\"`. */\n title?: React.ReactNode;\n /** Subtitle or requirement text. Default is `\"Supported formats: PNG, JPG, WEBP, MP4\"`. */\n subtitle?: React.ReactNode;\n /** Custom icon for the dropzone idle state. */\n icon?: React.ReactNode;\n /** Callback fired when a valid file is dropped or selected. */\n onFileSelect?: (file: File) => void;\n /** Callback fired when the active file/preview is cleared. */\n onFileRemove?: () => void;\n /** Callback fired when a file exceeds size limit or validation fails. */\n onError?: (errorMessage: string) => void;\n /** Optional custom CSS classes for the root dropzone container. */\n className?: string;\n id?: string;\n name?: string;\n}\n\nexport const Dropzone = React.forwardRef<HTMLDivElement, DropzoneProps>(\n (\n {\n accept,\n maxSizeMB,\n disabled = false,\n previewUrl: controlledPreviewUrl,\n value,\n showPreview = true,\n previewType = \"auto\",\n title = \"Click or drag file to upload\",\n subtitle,\n icon,\n onFileSelect,\n onFileRemove,\n onError,\n className,\n id,\n name,\n },\n ref,\n ) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const [isDragging, setIsDragging] = useState(false);\n const [internalPreviewUrl, setInternalPreviewUrl] = useState<string | null>(null);\n const [internalPreviewType, setInternalPreviewType] = useState<\"image\" | \"video\">(\"image\");\n const [imageLoadError, setImageLoadError] = useState(false);\n const generatedUrlRef = useRef<string | null>(null);\n\n // Sync value file prop to preview if passed\n useEffect(() => {\n if (value && showPreview) {\n if (generatedUrlRef.current) {\n URL.revokeObjectURL(generatedUrlRef.current);\n }\n const isVid = value.type.startsWith(\"video/\");\n const url = URL.createObjectURL(value);\n generatedUrlRef.current = url;\n setInternalPreviewUrl(url);\n setInternalPreviewType(isVid ? \"video\" : \"image\");\n setImageLoadError(false);\n }\n }, [value, showPreview]);\n\n // Clean up created object URLs on unmount\n useEffect(() => {\n return () => {\n if (generatedUrlRef.current) {\n URL.revokeObjectURL(generatedUrlRef.current);\n }\n };\n }, []);\n\n const activePreviewUrl =\n controlledPreviewUrl !== undefined\n ? controlledPreviewUrl\n : internalPreviewUrl;\n\n const handleFile = (file: File) => {\n if (disabled) return;\n\n if (maxSizeMB) {\n const fileMB = file.size / (1024 * 1024);\n if (fileMB > maxSizeMB) {\n const msg = `File \"${file.name}\" (${fileMB.toFixed(1)} MB) exceeds maximum allowed size of ${maxSizeMB} MB.`;\n onError?.(msg);\n if (inputRef.current) inputRef.current.value = \"\";\n return;\n }\n }\n\n // Generate internal preview if enabled and not strictly controlled\n if (showPreview) {\n const isImg = file.type.startsWith(\"image/\");\n const isVid = file.type.startsWith(\"video/\");\n if (isImg || isVid) {\n if (generatedUrlRef.current) {\n URL.revokeObjectURL(generatedUrlRef.current);\n }\n const url = URL.createObjectURL(file);\n generatedUrlRef.current = url;\n setInternalPreviewUrl(url);\n setInternalPreviewType(isVid ? \"video\" : \"image\");\n setImageLoadError(false);\n }\n }\n\n onFileSelect?.(file);\n };\n\n const handleDragEnter = (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (disabled) return;\n setIsDragging(true);\n };\n\n const handleDragOver = (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (disabled) return;\n setIsDragging(true);\n };\n\n const handleDragLeave = (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(false);\n };\n\n const handleDrop = (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(false);\n if (disabled) return;\n\n const file = e.dataTransfer.files?.[0];\n if (file) {\n handleFile(file);\n }\n };\n\n const handleClick = () => {\n if (disabled) return;\n inputRef.current?.click();\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (file) {\n handleFile(file);\n }\n };\n\n const handleRemove = (e?: React.MouseEvent) => {\n e?.stopPropagation();\n if (generatedUrlRef.current) {\n URL.revokeObjectURL(generatedUrlRef.current);\n generatedUrlRef.current = null;\n }\n setInternalPreviewUrl(null);\n setImageLoadError(false);\n if (inputRef.current) inputRef.current.value = \"\";\n onFileRemove?.();\n };\n\n const isVideo =\n previewType === \"video\" ||\n (previewType === \"auto\" &&\n (internalPreviewType === \"video\" ||\n (activePreviewUrl &&\n (activePreviewUrl.includes(\".mp4\") ||\n activePreviewUrl.includes(\".mov\") ||\n activePreviewUrl.includes(\".webm\") ||\n activePreviewUrl.startsWith(\"data:video/\")))));\n\n const hasPreview = Boolean(showPreview && activePreviewUrl);\n\n return (\n <div\n ref={ref}\n className={cn(\n \"pb:relative pb:w-full pb:rounded-2xl pb:border-2 pb:border-dashed pb:transition-all pb:overflow-hidden\",\n isDragging\n ? \"pb:border-primary pb:bg-primary/10\"\n : \"pb:border-gray-300 pb:hover:border-primary/80 pb:bg-gray-50/70 pb:hover:bg-gray-50\",\n disabled && \"pb:bg-gray-100/90 pb:border-gray-300 pb:cursor-not-allowed pb:hover:border-gray-300\",\n className,\n )}\n onDragEnter={handleDragEnter}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n >\n <input\n ref={inputRef}\n type=\"file\"\n id={id}\n name={name}\n accept={accept}\n disabled={disabled}\n onChange={handleInputChange}\n className=\"pb:hidden\"\n tabIndex={-1}\n />\n\n {/* Dragging Overlay when in preview mode */}\n {isDragging && hasPreview && (\n <div className=\"pb:absolute pb:inset-0 pb:z-20 pb:bg-primary/20 pb:backdrop-blur-xs pb:flex pb:flex-col pb:items-center pb:justify-center pb:gap-2\">\n <div className=\"pb:w-10 pb:h-10 pb:rounded-full pb:bg-primary pb:text-slate-950 pb:flex pb:items-center pb:justify-center pb:shadow-md\">\n <Icon name=\"arrowDownTray\" className=\"pb:w-5 pb:h-5\" />\n </div>\n <p className=\"pb:text-xs pb:font-bold pb:text-gray-900\">Drop file to replace</p>\n </div>\n )}\n\n {hasPreview ? (\n <div className=\"pb:p-4 pb:space-y-3\">\n <div\n onClick={handleClick}\n className=\"pb:relative pb:w-full pb:h-56 pb:overflow-hidden pb:rounded-xl pb:bg-gray-900 pb:flex pb:items-center pb:justify-center pb:cursor-pointer pb:group\"\n title=\"Click to change file\"\n >\n {isVideo ? (\n <video\n src={activePreviewUrl!}\n controls\n className=\"pb:w-full pb:h-full pb:object-contain\"\n />\n ) : imageLoadError ? (\n <div className=\"pb:p-6 pb:text-center pb:text-gray-400 pb:space-y-2\">\n <Icon name=\"xCircle\" className=\"pb:w-8 pb:h-8 pb:mx-auto pb:text-red-400\" />\n <p className=\"pb:text-xs pb:font-medium\">Failed to load image preview</p>\n </div>\n ) : (\n <img\n src={activePreviewUrl!}\n alt=\"File preview\"\n onError={() => setImageLoadError(true)}\n className=\"pb:w-full pb:h-full pb:object-contain pb:group-hover:scale-102 pb:transition-transform\"\n />\n )}\n\n {/* Hover overlay hint */}\n <div className=\"pb:absolute pb:inset-0 pb:bg-black/30 pb:opacity-0 pb:group-hover:opacity-100 pb:transition-opacity pb:flex pb:items-center pb:justify-center pb:pointer-events-none\">\n <span className=\"pb:bg-white/90 pb:text-gray-900 pb:text-xs pb:font-bold pb:px-3 pb:py-1.5 pb:rounded-lg pb:shadow\">\n Click or drag to replace\n </span>\n </div>\n </div>\n\n <div className=\"pb:flex pb:items-center pb:justify-center pb:gap-3\">\n <Button\n type=\"button\"\n color=\"neutral\"\n size=\"sm\"\n onClick={handleClick}\n disabled={disabled}\n leftIcon={<Icon name=\"arrowUpTray\" />}\n >\n Change File\n </Button>\n\n <Button\n type=\"button\"\n variant=\"ghost\"\n color=\"danger\"\n size=\"sm\"\n onClick={handleRemove}\n disabled={disabled}\n leftIcon={<Icon name=\"x\" />}\n >\n Remove\n </Button>\n </div>\n </div>\n ) : (\n <div\n onClick={handleClick}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleClick();\n }\n }}\n className=\"pb:p-8 pb:text-center pb:cursor-pointer pb:focus:outline-none pb:focus:ring-2 pb:focus:ring-primary pb:focus:ring-offset-2 pb:rounded-xl pb:space-y-2.5 pb:flex pb:flex-col pb:items-center pb:justify-center\"\n >\n <div className=\"pb:w-12 pb:h-12 pb:rounded-full pb:bg-primary/20 pb:text-dark-primary pb:flex pb:items-center pb:justify-center\">\n {icon || <Icon name=\"cloudArrowUp\" className=\"pb:w-6 pb:h-6\" />}\n </div>\n\n <div className=\"pb:space-y-1\">\n <p className=\"pb:text-sm pb:font-bold pb:text-gray-900\">{title}</p>\n {subtitle && (\n <p className=\"pb:text-xs pb:text-gray-600\">{subtitle}</p>\n )}\n </div>\n </div>\n )}\n </div>\n );\n },\n);\n\nDropzone.displayName = \"Dropzone\";\n","import React, { useRef, useState } from \"react\";\nimport { Button, ButtonProps } from \"../forms/Button\";\nimport { Icon } from \"../foundations/Icon\";\nimport { cn } from \"../utils\";\n\nexport interface FileUploadProps {\n /** Accepted file types (e.g. `\"image/*\"`, `\".pdf\"`, `\"audio/*\"`). */\n accept?: string;\n /** Whether multiple files can be selected. */\n multiple?: boolean;\n /** Whether the input is disabled. */\n disabled?: boolean;\n /** Maximum allowable file size in bytes. */\n maxSizeBytes?: number;\n /** Text displayed inside the trigger button. Default is `\"Choose File\"`. */\n buttonText?: React.ReactNode;\n /** Button style variant. Default is `\"secondary\"`. */\n buttonVariant?: ButtonProps[\"variant\"];\n /** Button size. Default is `\"md\"`. */\n buttonSize?: ButtonProps[\"size\"];\n /** Icon shown inside the button. Default is `<Icon name=\"arrowUpTray\" />`. */\n buttonIcon?: React.ReactNode;\n /** Text shown when no file has been chosen. Default is `\"No file chosen\"`. */\n placeholder?: string;\n /** Whether to show a clear/remove button when files are selected. Default is `true`. */\n clearable?: boolean;\n /** Controlled file(s) value. */\n value?: File | File[] | null;\n /** Callback fired when file selection changes. */\n onChange?: (files: File | File[] | null) => void;\n /** Callback fired when a file exceeds size limit or validation fails. */\n onError?: (errorMessage: string) => void;\n /** Optional custom CSS classes. */\n className?: string;\n id?: string;\n name?: string;\n}\n\nfunction formatBytes(bytes: number, decimals = 1): string {\n if (bytes === 0) return \"0 Bytes\";\n const k = 1024;\n const dm = decimals < 0 ? 0 : decimals;\n const sizes = [\"Bytes\", \"KB\", \"MB\", \"GB\"];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + \" \" + sizes[i];\n}\n\nexport const FileUpload = React.forwardRef<HTMLDivElement, FileUploadProps>(\n (\n {\n accept,\n multiple = false,\n disabled = false,\n maxSizeBytes,\n buttonText = \"Choose File\",\n buttonVariant = \"secondary\",\n buttonSize = \"md\",\n buttonIcon = <Icon name=\"arrowUpTray\" />,\n placeholder = \"No file chosen\",\n clearable = true,\n value,\n onChange,\n onError,\n className,\n id,\n name,\n },\n ref,\n ) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const [internalFiles, setInternalFiles] = useState<File[]>([]);\n\n const activeFiles = value\n ? Array.isArray(value)\n ? value\n : [value]\n : internalFiles;\n\n const handleButtonClick = () => {\n if (disabled) return;\n inputRef.current?.click();\n };\n\n const handleFileChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const selected = e.target.files ? Array.from(e.target.files) : [];\n if (selected.length === 0) return;\n\n // Validate file sizes\n if (maxSizeBytes) {\n const oversized = selected.find((f) => f.size > maxSizeBytes);\n if (oversized) {\n const msg = `File \"${oversized.name}\" exceeds maximum allowed size of ${formatBytes(maxSizeBytes)}.`;\n onError?.(msg);\n if (inputRef.current) inputRef.current.value = \"\";\n return;\n }\n }\n\n setInternalFiles(selected);\n if (onChange) {\n onChange(multiple ? selected : selected[0] || null);\n }\n };\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n setInternalFiles([]);\n if (inputRef.current) inputRef.current.value = \"\";\n if (onChange) {\n onChange(multiple ? [] : null);\n }\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n \"pb:inline-flex pb:items-center pb:gap-3 pb:w-full pb:max-w-md\",\n disabled && \"pb:cursor-not-allowed\",\n className,\n )}\n >\n <input\n ref={inputRef}\n type=\"file\"\n id={id}\n name={name}\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n onChange={handleFileChange}\n className=\"pb:hidden\"\n tabIndex={-1}\n />\n\n <Button\n type=\"button\"\n variant={buttonVariant}\n size={buttonSize}\n disabled={disabled}\n leftIcon={buttonIcon}\n onClick={handleButtonClick}\n >\n {buttonText}\n </Button>\n\n <div className=\"pb:flex-1 pb:min-w-0 pb:flex pb:items-center pb:justify-between pb:gap-2 pb:py-1 pb:px-2 pb:bg-gray-50 pb:border pb:border-gray-200 pb:rounded-md pb:text-xs\">\n {activeFiles.length > 0 ? (\n <span className=\"pb:font-medium pb:text-gray-800 pb:truncate\">\n {activeFiles.length === 1\n ? `${activeFiles[0].name} (${formatBytes(activeFiles[0].size)})`\n : `${activeFiles.length} files selected`}\n </span>\n ) : (\n <span className=\"pb:text-gray-600 pb:truncate\">{placeholder}</span>\n )}\n\n {clearable && activeFiles.length > 0 && !disabled && (\n <button\n type=\"button\"\n onClick={handleClear}\n className=\"pb:p-0.5 pb:text-gray-400 pb:hover:text-gray-700 pb:rounded pb:hover:bg-gray-200 pb:cursor-pointer pb:transition-colors\"\n title=\"Clear selection\"\n aria-label=\"Clear selected file\"\n >\n <Icon name=\"x\" className=\"pb:w-3.5 pb:h-3.5\" />\n </button>\n )}\n </div>\n </div>\n );\n },\n);\n\nFileUpload.displayName = \"FileUpload\";\n","import React from \"react\";\nimport { Dialog as BaseDialog } from \"@base-ui/react\";\nimport { cn } from \"../utils\";\n\nexport interface DialogProps {\n open?: boolean;\n onOpenChange?: (open: boolean, event?: Event) => void;\n trigger?: React.ReactNode;\n children: React.ReactNode;\n className?: string;\n}\n\nexport function Dialog({\n open,\n onOpenChange,\n trigger,\n children,\n className,\n}: DialogProps) {\n return (\n <BaseDialog.Root\n open={open}\n onOpenChange={(open, eventDetails) => {\n onOpenChange?.(open, eventDetails?.event as Event | undefined);\n }}\n >\n {trigger &&\n (React.isValidElement(trigger) ? (\n <BaseDialog.Trigger render={trigger as React.ReactElement} />\n ) : (\n <BaseDialog.Trigger>{trigger}</BaseDialog.Trigger>\n ))}\n <BaseDialog.Portal>\n <BaseDialog.Backdrop className=\"pb:fixed pb:inset-0 pb:z-50 pb:bg-black/40 pb:transition-all pb:duration-200 data-[state=open]:pb:animate-in data-[state=closed]:pb:animate-out pb:data-[state=closed]:fade-out-0 pb:data-[state=open]:fade-in-0\" />\n <BaseDialog.Popup\n className={cn(\n \"pb:fixed pb:left-[50%] pb:top-[50%] pb:z-50 pb:grid pb:w-auto pb:max-w-[90vw] pb:translate-x-[-50%] pb:translate-y-[-50%] pb:gap-4 pb:border pb:border-gray-100 pb:bg-white pb:p-6 pb:shadow-2xl pb:duration-200 data-[state=open]:pb:animate-in data-[state=closed]:pb:animate-out data-[state=closed]:pb:fade-out-0 data-[state=open]:pb:fade-in-0 data-[state=closed]:pb:zoom-out-95 data-[state=open]:pb:zoom-in-95 data-[state=closed]:pb:slide-out-to-left-1/2 data-[state=closed]:pb:slide-out-to-top-[48%] data-[state=open]:pb:slide-in-from-left-1/2 data-[state=open]:pb:slide-in-from-top-[48%] pb:rounded-2xl\",\n className,\n )}\n >\n {children}\n </BaseDialog.Popup>\n </BaseDialog.Portal>\n </BaseDialog.Root>\n );\n}\n\nexport const DialogTitle = (\n props: React.ComponentProps<typeof BaseDialog.Title>,\n) => <BaseDialog.Title {...props} />;\nexport const DialogDescription = (\n props: React.ComponentProps<typeof BaseDialog.Description>,\n) => <BaseDialog.Description {...props} />;\nexport const DialogClose = (\n props: React.ComponentProps<typeof BaseDialog.Close>,\n) => <BaseDialog.Close {...props} />;\n","import React from \"react\";\nimport { Popover as BasePopover } from \"@base-ui/react\";\nimport { cn } from \"../utils\";\nimport { Icon } from \"../foundations/Icon\";\nimport { SurfaceVariant } from \"../types\";\n\nexport interface PopoverProps {\n /** The element that triggers the popover when clicked */\n trigger: React.ReactNode;\n /** Popover body content */\n children: React.ReactNode;\n /** Optional header title */\n title?: React.ReactNode;\n /** Controlled open state */\n open?: boolean;\n /** Initial open state in uncontrolled mode */\n defaultOpen?: boolean;\n /** Callback fired when open state changes */\n onOpenChange?: (open: boolean) => void;\n /** Side where the popover appears */\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n /** Alignment relative to the trigger */\n align?: \"start\" | \"center\" | \"end\";\n /** Distance from the trigger in pixels */\n sideOffset?: number;\n /** Surface visual variant */\n variant?: SurfaceVariant | \"default\";\n /** Whether to show a close button in the header */\n showCloseButton?: boolean;\n /** Whether to display a pointing arrow */\n showArrow?: boolean;\n className?: string;\n}\n\nconst variantStyles: Record<string, string> = {\n surface: \"pb:bg-white pb:border pb:border-gray-100 pb:shadow-xl\",\n default: \"pb:bg-white pb:border pb:border-gray-100 pb:shadow-xl\",\n glass:\n \"pb:bg-white/90 pb:backdrop-blur-2xl pb:border pb:border-white/50 pb:shadow-2xl\",\n outline: \"pb:bg-white pb:border-2 pb:border-gray-300 pb:shadow-md\",\n flat: \"pb:bg-gray-50 pb:border pb:border-gray-200 pb:shadow-lg\",\n};\n\nexport function Popover({\n trigger,\n children,\n title,\n open,\n defaultOpen,\n onOpenChange,\n side = \"bottom\",\n align = \"center\",\n sideOffset = 8,\n variant = \"surface\",\n showCloseButton = true,\n showArrow = true,\n className,\n}: PopoverProps) {\n return (\n <BasePopover.Root\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={(nextOpen) => {\n onOpenChange?.(nextOpen);\n }}\n >\n {React.isValidElement(trigger) ? (\n <BasePopover.Trigger render={trigger as React.ReactElement} />\n ) : (\n <BasePopover.Trigger>{trigger}</BasePopover.Trigger>\n )}\n\n <BasePopover.Portal>\n <BasePopover.Positioner\n side={side}\n align={align}\n sideOffset={sideOffset}\n >\n <BasePopover.Popup\n className={cn(\n \"pb:z-50 pb:rounded-2xl pb:p-4 pb:min-w-[240px] pb:max-w-sm pb:text-gray-900 pb:transition-all pb:duration-150 data-[state=open]:pb:animate-in data-[state=closed]:pb:animate-out data-[state=closed]:pb:fade-out-0 data-[state=open]:pb:fade-in-0 data-[state=closed]:pb:zoom-out-95 data-[state=open]:pb:zoom-in-95\",\n variantStyles[variant] || variantStyles.surface,\n className,\n )}\n >\n {(title || showCloseButton) && (\n <div className=\"pb:flex pb:items-center pb:justify-between pb:gap-3 pb:border-b pb:border-gray-100 pb:pb-2.5 pb:mb-3\">\n {title ? (\n <div className=\"pb:text-xs pb:font-bold pb:text-gray-900 pb:uppercase pb:tracking-wider\">\n {title}\n </div>\n ) : (\n <div />\n )}\n\n {showCloseButton && (\n <BasePopover.Close\n aria-label=\"Close popover\"\n className=\"pb:p-1 pb:rounded-lg pb:text-gray-400 pb:hover:text-gray-700 pb:hover:bg-gray-100 pb:transition-colors pb:cursor-pointer\"\n >\n <Icon name=\"xCircle\" className=\"pb:w-4 pb:h-4\" />\n </BasePopover.Close>\n )}\n </div>\n )}\n\n <div className=\"pb:text-sm\">{children}</div>\n\n {showArrow && (\n <BasePopover.Arrow\n className={cn(\n variant === \"glass\"\n ? \"pb:fill-white/90 pb:stroke-white/50\"\n : \"pb:fill-white pb:stroke-gray-100\",\n )}\n />\n )}\n </BasePopover.Popup>\n </BasePopover.Positioner>\n </BasePopover.Portal>\n </BasePopover.Root>\n );\n}\n\nexport const PopoverTitle = (\n props: React.ComponentProps<typeof BasePopover.Title>,\n) => <BasePopover.Title {...props} />;\n\nexport const PopoverDescription = (\n props: React.ComponentProps<typeof BasePopover.Description>,\n) => <BasePopover.Description {...props} />;\n\nexport const PopoverClose = (\n props: React.ComponentProps<typeof BasePopover.Close>,\n) => <BasePopover.Close {...props} />;\n","import { HTMLAttributes } from \"react\";\nimport { cn } from \"../utils\";\n\nexport interface SkeletonProps extends HTMLAttributes<HTMLDivElement> {\n className?: string;\n}\n\nexport function Skeleton({ className, ...props }: SkeletonProps) {\n return (\n <div\n className={cn(\"pb:animate-pulse pb:rounded-md pb:bg-gray-200\", className)}\n {...props}\n />\n );\n}\n","import React, { useState } from \"react\";\nimport { Button } from \"../forms/Button\";\nimport { Icon } from \"../foundations/Icon\";\nimport { cn } from \"../utils\";\nimport { ComponentRadius, FillVariant } from \"../types\";\n\nexport type AlertLevel = \"Error\" | \"Warning\" | \"Success\" | \"Info\";\nexport type AlertColor = \"danger\" | \"warning\" | \"success\" | \"info\" | \"neutral\";\n\nexport interface AlertAction {\n name: string;\n callback: () => void;\n}\n\nexport interface AlertUIProps {\n /** Alert semantic color */\n color?: AlertColor;\n /** Legacy level prop for backward compatibility */\n level?: AlertLevel;\n /** Visual style variant */\n variant?: \"soft\" | \"outline\" | \"solid\";\n /** Optional alert title */\n title?: React.ReactNode;\n /** Alert message body */\n message?: React.ReactNode;\n /** Children as alternative to message */\n children?: React.ReactNode;\n /** Optional action button */\n action?: AlertAction;\n /** Callback fired when alert is dismissed */\n onClose?: () => void;\n /** Border radius scale */\n radius?: ComponentRadius;\n className?: string;\n}\n\nconst levelColorMap: Record<AlertLevel, AlertColor> = {\n Error: \"danger\",\n Warning: \"warning\",\n Success: \"success\",\n Info: \"info\",\n};\n\nconst iconMap: Record<AlertColor, { name: any; colorClass: string }> = {\n danger: { name: \"exclamationCircle\", colorClass: \"pb:text-red-700\" },\n warning: { name: \"exclamationTriangle\", colorClass: \"pb:text-amber-800\" },\n success: { name: \"checkCircle\", colorClass: \"pb:text-emerald-800\" },\n info: { name: \"megaphone\", colorClass: \"pb:text-teal-800\" },\n neutral: { name: \"questionMarkCircle\", colorClass: \"pb:text-gray-700\" },\n};\n\nconst variantColorClasses: Record<string, Record<AlertColor, string>> = {\n soft: {\n danger: \"pb:bg-red-50 pb:border-red-200 pb:text-red-900\",\n warning: \"pb:bg-amber-50 pb:border-amber-200 pb:text-amber-900\",\n success: \"pb:bg-emerald-50 pb:border-emerald-200 pb:text-emerald-900\",\n info: \"pb:bg-teal-50 pb:border-teal-200 pb:text-teal-900\",\n neutral: \"pb:bg-gray-50 pb:border-gray-200 pb:text-gray-900\",\n },\n outline: {\n danger: \"pb:bg-red-50/40 pb:border-2 pb:border-red-400 pb:text-red-950\",\n warning: \"pb:bg-amber-50/40 pb:border-2 pb:border-amber-400 pb:text-amber-950\",\n success: \"pb:bg-emerald-50/40 pb:border-2 pb:border-emerald-500 pb:text-emerald-950\",\n info: \"pb:bg-teal-50/40 pb:border-2 pb:border-teal-500 pb:text-teal-950\",\n neutral: \"pb:bg-gray-50/40 pb:border-2 pb:border-gray-300 pb:text-gray-950\",\n },\n solid: {\n danger: \"pb:bg-red-700 pb:border-transparent pb:text-white\",\n warning: \"pb:bg-amber-300 pb:border-transparent pb:text-gray-950 pb:font-medium\",\n success: \"pb:bg-emerald-700 pb:border-transparent pb:text-white\",\n info: \"pb:bg-teal-700 pb:border-transparent pb:text-white\",\n neutral: \"pb:bg-gray-900 pb:border-transparent pb:text-white\",\n },\n};\n\nconst radiusClasses: Record<ComponentRadius, string> = {\n none: \"pb:rounded-none\",\n sm: \"pb:rounded-md\",\n md: \"pb:rounded-xl\",\n lg: \"pb:rounded-2xl\",\n \"2xl\": \"pb:rounded-2xl\",\n pill: \"pb:rounded-full\",\n};\n\nexport function Alert({\n color,\n level,\n variant = \"soft\",\n title,\n message,\n children,\n action,\n onClose,\n radius = \"2xl\",\n className,\n}: AlertUIProps) {\n const [visible, setVisible] = useState(true);\n\n if (!visible) return null;\n\n const resolvedColor: AlertColor =\n color || (level ? levelColorMap[level] : \"info\") || \"info\";\n\n const { name: iconName, colorClass } = iconMap[resolvedColor];\n const colorStyle = variantColorClasses[variant]?.[resolvedColor] || variantColorClasses.soft.info;\n\n const handleDismiss = () => {\n setVisible(false);\n onClose?.();\n };\n\n const body = children || message;\n\n return (\n <div\n role=\"alert\"\n className={cn(\n \"pb:flex pb:w-full pb:items-start pb:gap-3.5 pb:p-4.5 pb:border pb:shadow-xs pb:transition-all pb:duration-200\",\n radiusClasses[radius] || radiusClasses[\"2xl\"],\n colorStyle,\n className,\n )}\n >\n <div className=\"pb:shrink-0 pb:pt-0.5\">\n <Icon\n name={iconName}\n className={cn(\n \"pb:w-5 pb:h-5\",\n variant === \"solid\" ? \"pb:text-current\" : colorClass,\n )}\n />\n </div>\n\n <div className=\"pb:flex-1 pb:min-w-0 pb:text-sm pb:leading-relaxed\">\n {title && (\n <div className=\"pb:font-bold pb:text-base pb:mb-1 pb:leading-snug\">\n {title}\n </div>\n )}\n <div className={cn(title && \"pb:opacity-90\")}>{body}</div>\n </div>\n\n {action && (\n <Button\n size=\"sm\"\n variant={variant === \"solid\" ? \"outline\" : \"solid\"}\n color={resolvedColor === \"danger\" ? \"danger\" : \"neutral\"}\n onClick={() => {\n action.callback();\n handleDismiss();\n }}\n className=\"pb:shrink-0 pb:self-center\"\n >\n {action.name}\n </Button>\n )}\n\n <button\n type=\"button\"\n onClick={handleDismiss}\n aria-label=\"Dismiss alert\"\n className=\"pb:shrink-0 pb:p-1 pb:rounded-lg pb:opacity-70 pb:hover:opacity-100 pb:transition-opacity pb:cursor-pointer pb:self-start pb:-mr-1\"\n >\n <Icon name=\"xCircle\" className=\"pb:w-5 pb:h-5\" />\n </button>\n </div>\n );\n}\n","import React from \"react\";\nimport { Button } from \"../forms/Button\";\nimport { Icon, IconProps } from \"../foundations/Icon\";\nimport { Heading, Text } from \"../foundations/Typography\";\nimport { cn } from \"../utils\";\nimport { ComponentColor, FillVariant } from \"../types\";\n\nexport interface EmptyStateAction {\n label: React.ReactNode;\n onClick?: () => void;\n render?: React.ReactElement;\n variant?: FillVariant;\n color?: ComponentColor;\n icon?: IconProps[\"name\"] | React.ReactNode;\n}\n\nexport interface EmptyStateProps {\n title: React.ReactNode;\n description?: React.ReactNode;\n icon?: IconProps[\"name\"] | React.ReactNode;\n primaryAction?: EmptyStateAction;\n secondaryAction?: EmptyStateAction;\n children?: React.ReactNode;\n className?: string;\n}\n\nexport function EmptyState({\n title,\n description,\n icon,\n primaryAction,\n secondaryAction,\n children,\n className,\n}: EmptyStateProps) {\n const renderIcon = () => {\n if (!icon) return null;\n if (typeof icon === \"string\") {\n return (\n <Icon\n name={icon as IconProps[\"name\"]}\n className=\"pb:w-16 pb:h-16 pb:mx-auto pb:text-gray-400 pb:mb-4\"\n />\n );\n }\n return <div className=\"pb:flex pb:justify-center pb:mb-4\">{icon}</div>;\n };\n\n return (\n <div\n className={cn(\n \"pb:flex pb:flex-col pb:items-center pb:justify-center pb:p-8 pb:text-center pb:rounded-2xl pb:border pb:border-dashed pb:border-gray-200 pb:bg-white/50\",\n className,\n )}\n >\n {renderIcon()}\n\n {typeof title === \"string\" ? (\n <Heading\n level={3}\n className=\"pb:font-bold pb:text-gray-800 pb:mb-2\"\n >\n {title}\n </Heading>\n ) : (\n title\n )}\n\n {description &&\n (typeof description === \"string\" ? (\n <Text\n color=\"muted\"\n className=\"pb:max-w-md pb:mb-6\"\n >\n {description}\n </Text>\n ) : (\n <div className=\"pb:text-gray-600 pb:max-w-md pb:mb-6\">{description}</div>\n ))}\n\n {(primaryAction || secondaryAction) && (\n <div className=\"pb:flex pb:flex-wrap pb:gap-3 pb:justify-center pb:items-center\">\n {primaryAction && (\n <Button\n variant={primaryAction.variant || \"solid\"}\n color={primaryAction.color || \"primary\"}\n onClick={primaryAction.onClick}\n render={primaryAction.render}\n leftIcon={\n typeof primaryAction.icon === \"string\" ? (\n <Icon name={primaryAction.icon as IconProps[\"name\"]} />\n ) : (\n primaryAction.icon\n )\n }\n >\n {primaryAction.label}\n </Button>\n )}\n {secondaryAction && (\n <Button\n variant={secondaryAction.variant || \"solid\"}\n color={secondaryAction.color || \"neutral\"}\n onClick={secondaryAction.onClick}\n render={secondaryAction.render}\n leftIcon={\n typeof secondaryAction.icon === \"string\" ? (\n <Icon name={secondaryAction.icon as IconProps[\"name\"]} />\n ) : (\n secondaryAction.icon\n )\n }\n >\n {secondaryAction.label}\n </Button>\n )}\n </div>\n )}\n\n {children}\n </div>\n );\n}\n","import React from \"react\";\nimport { cn } from \"../utils\";\nimport { BrandColor, ComponentSize } from \"../types\";\n\nexport interface SpinnerProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Size variant of the spinner */\n size?: ComponentSize;\n /** Color theme of the spinner */\n color?: BrandColor | \"primary\" | \"neutral\";\n /** Screen-reader accessible label */\n label?: string;\n}\n\nconst sizeClasses: Record<ComponentSize, string> = {\n xs: \"pb:w-3.5 pb:h-3.5 pb:border-[1.5px]\",\n sm: \"pb:w-5 pb:h-5 pb:border-2\",\n md: \"pb:w-8 pb:h-8 pb:border-[2.5px]\",\n lg: \"pb:w-12 pb:h-12 pb:border-4\",\n xl: \"pb:w-16 pb:h-16 pb:border-4\",\n};\n\nconst colorClasses: Record<string, string> = {\n primary: \"pb:border-primary pb:border-t-transparent\",\n teal: \"pb:border-peerbots-teal pb:border-t-transparent\",\n pink: \"pb:border-peerbots-pink pb:border-t-transparent\",\n darkteal: \"pb:border-peerbots-darkteal pb:border-t-transparent\",\n darkblue: \"pb:border-peerbots-darkblue pb:border-t-transparent\",\n neutral: \"pb:border-gray-500 pb:border-t-transparent\",\n white: \"pb:border-white pb:border-t-transparent\",\n};\n\nexport const Spinner = React.forwardRef<HTMLDivElement, SpinnerProps>(\n (\n {\n size = \"md\",\n color = \"teal\",\n label = \"Loading...\",\n className,\n ...props\n },\n ref,\n ) => {\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-label={label}\n className={cn(\n \"pb:inline-block pb:rounded-full pb:animate-spin pb:shrink-0\",\n sizeClasses[size] || sizeClasses.md,\n colorClasses[color] || colorClasses.teal,\n className,\n )}\n {...props}\n >\n <span className=\"pb:sr-only\">{label}</span>\n </div>\n );\n },\n);\n\nSpinner.displayName = \"Spinner\";\n","import { useFormStatus } from \"react-dom\";\nimport { Button, Input, Heading, Text, Icon, Field } from \"..\";\nimport React from \"react\";\n\nfunction SubmitButton({ label }: { label: string }) {\n const { pending } = useFormStatus();\n return (\n <Button\n type=\"submit\"\n color=\"primary\"\n isLoading={pending}\n disabled={pending}\n >\n {label}\n </Button>\n );\n}\n\nexport type AuthFormMode = \"signing up\" | \"signing in\" | \"resetting password\";\n\nexport interface AuthFormUIProps {\n mode: AuthFormMode;\n onModeChange: (mode: AuthFormMode) => void;\n formAction: (payload: FormData) => void;\n actionState: { error: string; message: string };\n onGoogleSignIn?: () => void;\n title?: React.ReactNode;\n description?: React.ReactNode;\n}\n\nexport function AuthFormUI({\n mode,\n onModeChange,\n formAction,\n actionState,\n onGoogleSignIn,\n title,\n description,\n}: AuthFormUIProps) {\n const defaultTitle =\n mode === \"signing up\"\n ? \"Sign up\"\n : mode === \"signing in\"\n ? \"Sign In\"\n : \"Reset Password\";\n\n return (\n <div className=\"pb:text-left pb:overflow-hidden\">\n <Heading level={2} className=\"pb:text-center pb:mb-2\">\n {title || defaultTitle}\n </Heading>\n\n <form className=\"pb:md:m-10 pb:sm:m-4 pb:space-y-4\" action={formAction}>\n {description && (\n <Text className=\"pb:text-center pb:mb-6\" color=\"muted\">\n {description}\n </Text>\n )}\n\n {mode === \"resetting password\" && (\n <Text className=\"pb:text-center pb:font-bold pb:text-dark-primary\">\n {actionState.message}\n </Text>\n )}\n <Text className=\"pb:text-center\" color=\"error\">\n {actionState.error}\n </Text>\n\n <div className=\"pb:space-y-4\">\n <Field\n id=\"email\"\n label=\"Email\"\n error={\n actionState.error && actionState.error.includes(\"email\")\n ? actionState.error\n : \"\"\n }\n >\n <Input\n name=\"email\"\n type=\"email\"\n required\n placeholder=\"Email\"\n leftIcon={<Icon name=\"envelope\" />}\n />\n </Field>\n\n {mode !== \"resetting password\" && (\n <Field\n id=\"password\"\n label=\"Password\"\n error={\n actionState.error && actionState.error.includes(\"password\")\n ? actionState.error\n : \"\"\n }\n >\n <Input\n name=\"password\"\n type=\"password\"\n required\n placeholder=\"Password\"\n leftIcon={<Icon name=\"lockClosed\" />}\n />\n </Field>\n )}\n </div>\n\n <div className=\"pb:text-center pb:mt-6 pb:space-y-4\">\n {mode === \"signing up\" && <SubmitButton label=\"Sign Up\" />}\n {mode === \"signing in\" && <SubmitButton label=\"Sign In\" />}\n {mode === \"resetting password\" && (\n <SubmitButton label=\"Reset Password\" />\n )}\n\n <div className=\"pb:text-center pb:text-sm pb:text-gray-500\">\n {mode === \"signing up\" && (\n <Text size=\"sm\">\n Already have an account?{\" \"}\n <Button\n variant=\"link\"\n color=\"teal\"\n size=\"sm\"\n onClick={() => onModeChange(\"signing in\")}\n >\n Sign in\n </Button>\n </Text>\n )}\n {mode === \"signing in\" && (\n <div className=\"pb:flex pb:flex-col pb:gap-2\">\n <Text size=\"sm\">\n Forgot your password?{\" \"}\n <Button\n variant=\"link\"\n color=\"teal\"\n size=\"sm\"\n onClick={() => onModeChange(\"resetting password\")}\n >\n Reset password.\n </Button>\n </Text>\n <div className=\"pb:relative\">\n <div className=\"pb:absolute pb:inset-0 pb:flex pb:items-center\">\n <div className=\"pb:w-full pb:border-t pb:border-gray-300\"></div>\n </div>\n <div className=\"pb:relative pb:flex pb:justify-center pb:text-sm\">\n <span className=\"pb:px-2 pb:bg-white pb:text-gray-700\">or</span>\n </div>\n </div>\n <Text size=\"sm\">\n Don&apos;t have an account?{\" \"}\n <Button\n variant=\"link\"\n color=\"teal\"\n size=\"sm\"\n onClick={() => onModeChange(\"signing up\")}\n >\n Sign up\n </Button>\n </Text>\n </div>\n )}\n {mode === \"resetting password\" && (\n <div className=\"pb:flex pb:flex-col pb:gap-2\">\n <Text size=\"sm\">\n Don&apos;t have an account?{\" \"}\n <Button\n variant=\"link\"\n color=\"teal\"\n size=\"sm\"\n onClick={() => onModeChange(\"signing up\")}\n >\n Sign up\n </Button>\n </Text>\n <div className=\"pb:relative\">\n <div className=\"pb:absolute pb:inset-0 pb:flex pb:items-center\">\n <div className=\"pb:w-full pb:border-t pb:border-gray-300\"></div>\n </div>\n <div className=\"pb:relative pb:flex pb:justify-center pb:text-sm\">\n <span className=\"pb:px-2 pb:bg-white pb:text-gray-700\">or</span>\n </div>\n </div>\n <Text size=\"sm\">\n Remembered your password?{\" \"}\n <Button\n variant=\"link\"\n color=\"teal\"\n size=\"sm\"\n onClick={() => onModeChange(\"signing in\")}\n >\n Sign In\n </Button>\n </Text>\n </div>\n )}\n </div>\n </div>\n\n {mode !== \"resetting password\" && onGoogleSignIn && (\n <div className=\"pb:text-center pb:mt-4\">\n <Button\n color=\"neutral\"\n onClick={onGoogleSignIn}\n type=\"button\"\n className=\"pb:w-full pb:flex pb:items-center pb:justify-center pb:gap-2\"\n >\n <Icon name=\"google\" stroke=\"none\" />\n {mode === \"signing up\" && <span>Sign up with Google</span>}\n {mode === \"signing in\" && <span>Sign in with Google</span>}\n </Button>\n </div>\n )}\n </form>\n </div>\n );\n}\n","import { Button, Icon } from \"..\";\nimport React from \"react\";\n\nexport interface TabItem {\n id: string;\n label: string;\n onClose?: () => void;\n onEdit?: () => void;\n}\n\nexport interface TabSelectionProps {\n tabs: TabItem[];\n activeTabId: string | null;\n onTabClick: (id: string) => void;\n onAddClick?: () => void;\n className?: string;\n}\n\nexport function TabSelection({\n tabs,\n activeTabId,\n onTabClick,\n onAddClick,\n className = \"\",\n}: TabSelectionProps) {\n return (\n <div\n className={`pb:overflow-x-auto pb:max-h-20 pb:text-sm pb:whitespace-nowrap ${className}`}\n >\n {tabs.map((tab) => {\n const isActive = tab.id === activeTabId;\n return (\n <div\n key={tab.id}\n className={\n \"pb:inline-block pb:align-middle pb:m-1 pb:px-2 pb:py-2 pb:cursor-pointer pb:rounded-sm \" +\n (isActive\n ? \"pb:font-bold pb:bg-primary/30\"\n : \"pb:font-gray-300 pb:bg-gray-200\")\n }\n onClick={() => onTabClick(tab.id)}\n >\n <span className=\"pb:inline-block pb:align-middle\">{tab.label}</span>\n\n {isActive && (tab.onEdit || tab.onClose) && (\n <span className=\"pb:inline-flex pb:items-center pb:ml-2 pb:align-middle\">\n {tab.onEdit && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n aria-label=\"Edit Tab\"\n onClick={(e) => {\n e.stopPropagation();\n tab.onEdit!();\n }}\n leftIcon={<Icon name=\"edit\" size=\"sm\" />}\n />\n )}\n {tab.onEdit && tab.onClose && (\n <span className=\"pb:opacity-10 pb:align-middle pb:mx-1\">{\" | \"}</span>\n )}\n {tab.onClose && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n aria-label=\"Close Tab\"\n onClick={(e) => {\n e.stopPropagation();\n tab.onClose!();\n }}\n leftIcon={<Icon name=\"close\" size=\"sm\" />}\n />\n )}\n </span>\n )}\n </div>\n );\n })}\n {onAddClick && (\n <Button\n color=\"primary\"\n size=\"sm\"\n aria-label=\"Create New Tab\"\n onClick={onAddClick}\n leftIcon={<Icon name=\"plus\" size=\"sm\" />}\n className=\"pb:m-1 pb:align-middle pb:inline-flex\"\n />\n )}\n </div>\n );\n}\n","import React, { useRef, useImperativeHandle } from \"react\";\nimport { Icon } from \"../foundations/Icon\";\nimport { Input, InputProps } from \"../forms/Input\";\nimport { cn } from \"../utils\";\n\nexport interface SearchInputProps\n extends Omit<InputProps, \"leftIcon\" | \"rightIcon\"> {\n onSearch?: (query: string) => void;\n onClear?: () => void;\n showClearButton?: boolean;\n}\n\nexport const SearchInput = React.forwardRef<HTMLInputElement, SearchInputProps>(\n (\n {\n className,\n value,\n defaultValue,\n onChange,\n onSearch,\n onClear,\n showClearButton = true,\n placeholder = \"Search...\",\n onKeyDown,\n ...props\n },\n ref,\n ) => {\n const internalRef = useRef<HTMLInputElement>(null);\n useImperativeHandle(ref, () => internalRef.current as HTMLInputElement);\n\n const handleClear = () => {\n if (internalRef.current) {\n internalRef.current.value = \"\";\n }\n if (onClear) {\n onClear();\n }\n if (onSearch) {\n onSearch(\"\");\n }\n internalRef.current?.focus();\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\" && onSearch) {\n onSearch(internalRef.current?.value ?? \"\");\n } else if (e.key === \"Escape\") {\n handleClear();\n }\n if (onKeyDown) {\n onKeyDown(e);\n }\n };\n\n const hasValue =\n value !== undefined\n ? String(value).length > 0\n : internalRef.current?.value && internalRef.current.value.length > 0;\n\n return (\n <div className={cn(\"pb:relative pb:w-full\", className)}>\n <Input\n ref={internalRef}\n type=\"text\"\n value={value}\n defaultValue={defaultValue}\n placeholder={placeholder}\n onChange={onChange}\n onKeyDown={handleKeyDown}\n leftIcon={<Icon name=\"search\" className=\"pb:w-4 pb:h-4 pb:text-gray-400\" />}\n className=\"pb:pr-8\"\n {...props}\n />\n {showClearButton && (\n <button\n type=\"button\"\n aria-label=\"Clear search\"\n onClick={handleClear}\n className={cn(\n \"pb:absolute pb:inset-y-0 pb:right-0 pb:flex pb:items-center pb:pr-2.5 pb:text-gray-400 pb:hover:text-gray-600 pb:cursor-pointer pb:transition-opacity pb:duration-150 pb:focus-visible:outline-none pb:focus-visible:ring-2 pb:focus-visible:ring-primary pb:rounded-r-md\",\n hasValue ? \"pb:opacity-100 pb:visible\" : \"pb:opacity-0 pb:invisible\",\n )}\n >\n <Icon name=\"xCircle\" className=\"pb:w-4 pb:h-4\" />\n </button>\n )}\n </div>\n );\n },\n);\n\nSearchInput.displayName = \"SearchInput\";\n","import React from \"react\";\nimport { Button, ButtonProps } from \"../forms/Button\";\nimport { Icon } from \"../foundations/Icon\";\nimport { useClipboard } from \"./useClipboard\";\nimport { cn } from \"../utils\";\n\nexport interface CopyButtonProps extends Omit<ButtonProps, \"onClick\"> {\n /** The text value to copy to the clipboard. */\n value: string;\n /** Label displayed before copying. Default is `\"Copy\"`. Pass `null` or use `isIconOnly` for icon-only. */\n label?: React.ReactNode;\n /** Label displayed after copying. Default is `\"Copied!\"`. */\n successLabel?: React.ReactNode;\n /** Duration in milliseconds for the success state. Default is `2000`. */\n timeout?: number;\n /** Callback fired after successfully copying to clipboard. */\n onCopied?: (value: string) => void;\n /** Callback fired if copying fails. */\n onCopyError?: (error: Error) => void;\n /** Custom icon shown in default state. */\n copyIcon?: React.ReactNode;\n /** Custom icon shown in copied state. */\n successIcon?: React.ReactNode;\n /** Whether to show icons. Default is `true`. */\n showIcon?: boolean;\n}\n\nexport const CopyButton = React.forwardRef<HTMLButtonElement, CopyButtonProps>(\n (\n {\n value,\n label = \"Copy\",\n successLabel = \"Copied!\",\n timeout = 2000,\n onCopied,\n onCopyError,\n copyIcon,\n successIcon,\n showIcon = true,\n variant = \"outline\",\n color = \"neutral\",\n size = \"md\",\n radius = \"md\",\n isIconOnly,\n className,\n ...props\n },\n ref,\n ) => {\n const { copy, copied } = useClipboard({\n timeout,\n onSuccess: onCopied,\n onError: onCopyError,\n });\n\n const currentIcon = copied\n ? successIcon || <Icon name=\"check\" className=\"pb:text-peerbots-teal\" />\n : copyIcon || <Icon name=\"clipboard\" />;\n\n const currentLabel = copied ? successLabel : label;\n\n return (\n <Button\n ref={ref}\n variant={variant}\n color={color}\n size={size}\n radius={radius}\n isIconOnly={isIconOnly}\n onClick={() => copy(value)}\n leftIcon={showIcon ? currentIcon : undefined}\n className={cn(\n \"pb:transition-all pb:duration-150\",\n copied && \"pb:border-peerbots-teal pb:text-peerbots-darkteal\",\n className,\n )}\n aria-live=\"polite\"\n aria-label={\n isIconOnly\n ? typeof currentLabel === \"string\"\n ? currentLabel\n : \"Copy\"\n : undefined\n }\n {...props}\n >\n {isIconOnly ? null : currentLabel}\n </Button>\n );\n },\n);\n\nCopyButton.displayName = \"CopyButton\";\n","import { useState, useCallback, useRef, useEffect } from \"react\";\n\nexport interface UseClipboardOptions {\n /**\n * Duration in milliseconds for the `copied` state to remain `true`.\n * @default 2000\n */\n timeout?: number;\n /** Callback fired after successfully copying to clipboard. */\n onSuccess?: (text: string) => void;\n /** Callback fired if copying fails. */\n onError?: (error: Error) => void;\n}\n\nexport function useClipboard(options: UseClipboardOptions = {}) {\n const { timeout = 2000, onSuccess, onError } = options;\n const [copied, setCopied] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const copy = useCallback(\n async (text: string): Promise<boolean> => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n }\n\n try {\n if (navigator?.clipboard?.writeText) {\n await navigator.clipboard.writeText(text);\n } else {\n // Fallback for non-secure / legacy contexts\n const textarea = document.createElement(\"textarea\");\n textarea.value = text;\n textarea.style.position = \"fixed\";\n textarea.style.opacity = \"0\";\n document.body.appendChild(textarea);\n textarea.focus();\n textarea.select();\n const successful = document.execCommand(\"copy\");\n document.body.removeChild(textarea);\n if (!successful) {\n throw new Error(\"execCommand copy failed\");\n }\n }\n\n setCopied(true);\n setError(null);\n onSuccess?.(text);\n\n timerRef.current = setTimeout(() => {\n setCopied(false);\n }, timeout);\n\n return true;\n } catch (err) {\n const copyError = err instanceof Error ? err : new Error(String(err));\n setError(copyError);\n setCopied(false);\n onError?.(copyError);\n return false;\n }\n },\n [timeout, onSuccess, onError],\n );\n\n useEffect(() => {\n return () => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n }\n };\n }, []);\n\n return { copy, copied, error };\n}\n","import React from \"react\";\nimport { cn } from \"../utils\";\nimport { Icon } from \"../foundations/Icon\";\nimport { ComponentColor, ComponentSize } from \"../types\";\n\nexport type StepStatus = \"complete\" | \"current\" | \"upcoming\" | \"disabled\";\n\nexport interface StepItem {\n id: string;\n title: React.ReactNode;\n description?: React.ReactNode;\n status?: StepStatus;\n icon?: React.ReactNode;\n}\n\nexport interface StepperProps {\n /** Array of sequential steps */\n steps: StepItem[];\n /** Controlled currently active step id */\n activeStepId?: string;\n /** Callback fired when a step is clicked */\n onStepClick?: (stepId: string) => void;\n /** Layout orientation */\n orientation?: \"horizontal\" | \"vertical\" | \"chips\";\n /** Brand color theme */\n color?: ComponentColor;\n /** Size scale */\n size?: ComponentSize;\n className?: string;\n}\n\nconst colorBadgeStyles: Record<string, { current: string; complete: string; line: string }> = {\n teal: {\n current: \"pb:bg-peerbots-teal pb:text-gray-900 pb:ring-4 pb:ring-peerbots-teal/30\",\n complete: \"pb:bg-peerbots-darkteal pb:text-white\",\n line: \"pb:bg-peerbots-darkteal\",\n },\n pink: {\n current: \"pb:bg-rose-700 pb:text-white pb:ring-4 pb:ring-rose-200\",\n complete: \"pb:bg-rose-800 pb:text-white\",\n line: \"pb:bg-rose-700\",\n },\n primary: {\n current: \"pb:bg-primary pb:text-gray-900 pb:ring-4 pb:ring-primary/30\",\n complete: \"pb:bg-dark-primary pb:text-white\",\n line: \"pb:bg-dark-primary\",\n },\n darkblue: {\n current: \"pb:bg-peerbots-darkblue pb:text-white pb:ring-4 pb:ring-peerbots-darkblue/20\",\n complete: \"pb:bg-peerbots-darkblue pb:text-white\",\n line: \"pb:bg-peerbots-darkblue\",\n },\n neutral: {\n current: \"pb:bg-gray-900 pb:text-white pb:ring-4 pb:ring-gray-300\",\n complete: \"pb:bg-gray-800 pb:text-white\",\n line: \"pb:bg-gray-600\",\n },\n};\n\nexport function Stepper({\n steps,\n activeStepId,\n onStepClick,\n orientation = \"horizontal\",\n color = \"teal\",\n size = \"md\",\n className,\n}: StepperProps) {\n const activeIndex = steps.findIndex((s) => s.id === activeStepId);\n const colorStyle = colorBadgeStyles[color] || colorBadgeStyles.teal;\n\n const resolveStatus = (step: StepItem, index: number): StepStatus => {\n if (step.status) return step.status;\n if (activeIndex === -1) return index === 0 ? \"current\" : \"upcoming\";\n if (index < activeIndex) return \"complete\";\n if (index === activeIndex) return \"current\";\n return \"upcoming\";\n };\n\n // 1. \"chips\" compact jump mode (as in Moddy build guide)\n if (orientation === \"chips\") {\n return (\n <ol\n className={cn(\n \"pb:flex pb:flex-row pb:flex-wrap pb:items-center pb:gap-2 pb:list-none pb:p-0 pb:m-0\",\n className,\n )}\n >\n {steps.map((step, idx) => {\n const status = resolveStatus(step, idx);\n const isCurrent = status === \"current\";\n const isComplete = status === \"complete\";\n const isClickable = Boolean(onStepClick) && status !== \"disabled\";\n const stepLabel = typeof step.title === \"string\" ? `Step ${idx + 1}: ${step.title}` : `Step ${idx + 1}`;\n\n return (\n <li key={step.id}>\n <button\n type=\"button\"\n aria-label={stepLabel}\n disabled={!isClickable}\n onClick={() => onStepClick?.(step.id)}\n className={cn(\n \"pb:inline-flex pb:items-center pb:gap-1.5 pb:pl-1.5 pb:pr-3 pb:py-1 pb:rounded-full pb:border pb:transition-all pb:duration-150 pb:text-xs pb:font-bold\",\n isClickable ? \"pb:cursor-pointer\" : \"pb:cursor-default\",\n isCurrent\n ? cn(colorStyle.current, \"pb:shadow-sm\")\n : isComplete\n ? \"pb:bg-gray-100 pb:text-gray-900 pb:border-gray-300 pb:hover:border-peerbots-darkteal\"\n : \"pb:bg-white pb:text-gray-600 pb:border-gray-300 pb:hover:text-gray-900\",\n )}\n >\n <span\n className={cn(\n \"pb:flex pb:items-center pb:justify-center pb:w-4 pb:h-4 pb:rounded-full pb:text-[10px] pb:font-bold\",\n isCurrent\n ? \"pb:bg-black/15 pb:text-current\"\n : isComplete\n ? \"pb:bg-peerbots-darkteal pb:text-white\"\n : \"pb:bg-gray-200 pb:text-gray-700\",\n )}\n >\n {isComplete ? (\n <Icon name=\"check\" className=\"pb:w-2.5 pb:pb:h-2.5\" />\n ) : (\n idx + 1\n )}\n </span>\n <span className=\"pb:uppercase pb:tracking-tight pb:whitespace-nowrap\">\n {step.title}\n </span>\n </button>\n </li>\n );\n })}\n </ol>\n );\n }\n\n // 2. \"vertical\" layout mode\n if (orientation === \"vertical\") {\n return (\n <ol\n className={cn(\n \"pb:flex pb:flex-col pb:gap-0 pb:list-none pb:p-0 pb:m-0\",\n className,\n )}\n >\n {steps.map((step, idx) => {\n const status = resolveStatus(step, idx);\n const isCurrent = status === \"current\";\n const isComplete = status === \"complete\";\n const isLast = idx === steps.length - 1;\n const isClickable = Boolean(onStepClick) && status !== \"disabled\";\n const stepLabel = typeof step.title === \"string\" ? `Step ${idx + 1}: ${step.title}` : `Step ${idx + 1}`;\n\n return (\n <li key={step.id} className=\"pb:relative pb:flex pb:items-start pb:gap-4 pb:pb-6\">\n {!isLast && (\n <div\n className={cn(\n \"pb:absolute pb:left-4 pb:top-8 pb:-bottom-0 pb:w-0.5 pb:bg-gray-200\",\n isComplete && colorStyle.line,\n )}\n />\n )}\n\n <button\n type=\"button\"\n aria-label={stepLabel}\n disabled={!isClickable}\n onClick={() => onStepClick?.(step.id)}\n className={cn(\n \"pb:flex pb:items-center pb:justify-center pb:w-8 pb:h-8 pb:rounded-full pb:font-bold pb:text-xs pb:shrink-0 pb:transition-all pb:duration-200 pb:z-10\",\n isClickable ? \"pb:cursor-pointer\" : \"pb:cursor-default\",\n isCurrent\n ? colorStyle.current\n : isComplete\n ? colorStyle.complete\n : \"pb:bg-gray-100 pb:text-gray-700 pb:border pb:border-gray-300\",\n )}\n >\n {step.icon || (isComplete ? <Icon name=\"check\" className=\"pb:w-4 pb:h-4\" /> : idx + 1)}\n </button>\n\n <div\n onClick={() => isClickable && onStepClick?.(step.id)}\n className={cn(\n \"pb:pt-0.5 pb:flex-1\",\n isClickable && \"pb:cursor-pointer\",\n )}\n >\n <div\n className={cn(\n \"pb:text-sm pb:font-bold\",\n isCurrent\n ? \"pb:text-gray-950\"\n : isComplete\n ? \"pb:text-gray-900\"\n : \"pb:text-gray-600\",\n )}\n >\n {step.title}\n </div>\n {step.description && (\n <div className=\"pb:text-xs pb:text-gray-600 pb:mt-0.5 pb:leading-relaxed\">\n {step.description}\n </div>\n )}\n </div>\n </li>\n );\n })}\n </ol>\n );\n }\n\n // 3. \"horizontal\" rail mode (default)\n return (\n <ol\n className={cn(\n \"pb:flex pb:w-full pb:items-center pb:justify-between pb:gap-0 pb:list-none pb:p-0 pb:m-0\",\n className,\n )}\n >\n {steps.map((step, idx) => {\n const status = resolveStatus(step, idx);\n const isCurrent = status === \"current\";\n const isComplete = status === \"complete\";\n const isLast = idx === steps.length - 1;\n const isClickable = Boolean(onStepClick) && status !== \"disabled\";\n const stepLabel = typeof step.title === \"string\" ? `Step ${idx + 1}: ${step.title}` : `Step ${idx + 1}`;\n\n return (\n <li\n key={step.id}\n className={cn(\n \"pb:flex pb:items-center\",\n isLast ? \"pb:flex-none\" : \"pb:flex-1\",\n )}\n >\n <div className=\"pb:flex pb:flex-col pb:items-center pb:text-center pb:relative\">\n <button\n type=\"button\"\n aria-label={stepLabel}\n disabled={!isClickable}\n onClick={() => onStepClick?.(step.id)}\n className={cn(\n \"pb:flex pb:items-center pb:justify-center pb:w-9 pb:h-9 pb:rounded-full pb:font-bold pb:text-xs pb:transition-all pb:duration-200 pb:z-10\",\n isClickable ? \"pb:cursor-pointer\" : \"pb:cursor-default\",\n isCurrent\n ? colorStyle.current\n : isComplete\n ? colorStyle.complete\n : \"pb:bg-gray-100 pb:text-gray-700 pb:border pb:border-gray-300\",\n )}\n >\n {step.icon || (isComplete ? <Icon name=\"check\" className=\"pb:w-4 pb:h-4\" /> : idx + 1)}\n </button>\n\n <div className=\"pb:mt-2 pb:max-w-[120px]\">\n <div\n className={cn(\n \"pb:text-xs pb:font-bold pb:leading-tight\",\n isCurrent\n ? \"pb:text-gray-950\"\n : isComplete\n ? \"pb:text-gray-900\"\n : \"pb:text-gray-600\",\n )}\n >\n {step.title}\n </div>\n {step.description && (\n <div className=\"pb:text-[10px] pb:text-gray-600 pb:mt-0.5 pb:hidden sm:pb:block truncate\">\n {step.description}\n </div>\n )}\n </div>\n </div>\n\n {!isLast && (\n <div\n className={cn(\n \"pb:flex-1 pb:h-0.5 pb:bg-gray-200 pb:mx-2 pb:transition-colors pb:duration-300 pb:-mt-6\",\n isComplete && colorStyle.line,\n )}\n />\n )}\n </li>\n );\n })}\n </ol>\n );\n}\n","interface SEOProps {\n title: string;\n description?: string;\n image?: string;\n url?: string;\n type?: string;\n}\n\nexport function SEO({\n title,\n description = \"Peerbots platform: social robots for everyone, powered by experts.\",\n image = \"/peerbots-logo.png\", // Default image if one exists, customizable\n url,\n type = \"website\",\n}: SEOProps) {\n const siteTitle = \"Peerbots App\";\n const fullTitle = title === \"Home\" ? siteTitle : `${title} | ${siteTitle}`;\n const currentUrl =\n url || (typeof window !== \"undefined\" ? window.location.href : \"\");\n\n return (\n <>\n <title>{fullTitle}</title>\n <meta name=\"description\" content={description} />\n\n {/* Open Graph */}\n <meta property=\"og:title\" content={fullTitle} />\n <meta property=\"og:description\" content={description} />\n <meta property=\"og:image\" content={image} />\n <meta property=\"og:url\" content={currentUrl} />\n <meta property=\"og:type\" content={type} />\n <meta property=\"og:site_name\" content={siteTitle} />\n\n {/* Twitter Card */}\n <meta name=\"twitter:card\" content=\"summary_large_image\" />\n <meta name=\"twitter:title\" content={fullTitle} />\n <meta name=\"twitter:description\" content={description} />\n <meta name=\"twitter:image\" content={image} />\n </>\n );\n}\n","import {\n VictoryChart,\n VictoryBar,\n VictoryAxis,\n VictoryTooltip,\n VictoryVoronoiContainer,\n VictoryLine,\n VictoryLabel,\n} from \"victory\";\n\nexport interface DistributionBarData {\n label: string;\n count: number;\n items?: string[];\n fill?: string;\n stroke?: string;\n}\n\nexport interface DistributionBarChartProps {\n data: DistributionBarData[];\n alt: string;\n chartWidth?: number;\n chartHeight?: number;\n average?: number;\n referenceLineValue?: number;\n referenceLineLabel?: string;\n label?: string;\n}\n\nexport function DistributionBarChart({\n data,\n alt,\n chartWidth = 600,\n chartHeight = 400,\n average,\n referenceLineValue,\n referenceLineLabel = \"Reference\",\n label,\n}: DistributionBarChartProps) {\n const maxCount = Math.max(...data.map((d) => d.count), 5);\n const labels = data.map((d) => d.label);\n\n if (data.length === 0) return null;\n\n return (\n <div className=\"pb:mb-6\" role=\"region\" aria-label={alt}>\n {label && (\n <span className=\"pb:text-xs pb:uppercase pb:font-bold pb:text-gray-700 pb:block pb:mb-2 pb:px-1\">\n {label}\n </span>\n )}\n <VictoryChart\n width={chartWidth}\n height={chartHeight}\n padding={{ left: 100, right: 50, top: 40, bottom: 60 }}\n containerComponent={\n <VictoryVoronoiContainer\n title={alt}\n desc={alt}\n aria-label={alt}\n />\n }\n >\n <VictoryAxis\n horizontal\n tickValues={labels}\n style={{\n axis: { stroke: \"#cbd5e1\" },\n tickLabels: { fontSize: 18, padding: 5, fill: \"#334155\" },\n }}\n />\n <VictoryAxis\n dependentAxis\n domain={[0, maxCount]}\n tickFormat={(x: number | string) =>\n typeof x === \"number\" ? Math.round(x) : x\n }\n style={{\n axis: { stroke: \"#cbd5e1\" },\n tickLabels: { fontSize: 18, padding: 5, fill: \"#334155\" },\n grid: { stroke: \"#f1f5f9\" },\n }}\n />\n <VictoryBar\n horizontal\n domain={{ x: [0.5, labels.length + 0.5], y: [0, maxCount] }}\n data={data}\n x={\"label\"}\n y={\"count\"}\n labels={({ datum }: { datum?: DistributionBarData }) => {\n if (!datum || datum.count === 0) return \"\";\n if (!datum.items || datum.items.length === 0)\n return `${datum.count}`;\n const displayItems = datum.items.slice(0, 5);\n let labelText = displayItems.join(\"\\n\");\n if (datum.items.length > 5)\n labelText += `\\n...and ${datum.items.length - 5} more`;\n return labelText;\n }}\n labelComponent={\n <VictoryTooltip\n style={{ fontSize: 18 }}\n flyoutStyle={{ fill: \"white\", stroke: \"#cbd5e1\" }}\n pointerLength={5}\n cornerRadius={2}\n constrainToVisibleArea\n />\n }\n style={{\n data: {\n fill: ({ datum }: { datum?: DistributionBarData }) =>\n datum?.fill\n ? datum.fill === \"White\"\n ? \"#f3f4f6\"\n : datum.fill\n : \"#46d9d9\",\n width: 14,\n stroke: ({ datum }: { datum?: DistributionBarData }) =>\n datum?.stroke\n ? datum.stroke\n : datum?.fill === \"White\"\n ? \"#d1d5db\"\n : \"none\",\n strokeWidth: ({ datum }: { datum?: DistributionBarData }) =>\n datum?.stroke || datum?.fill === \"White\" ? 0.5 : 0,\n cursor: \"pointer\",\n },\n }}\n cornerRadius={2}\n />\n {average !== undefined && (\n <VictoryLine\n y={() => average}\n style={{\n data: {\n stroke: \"#9ca3af\",\n strokeWidth: 2,\n strokeDasharray: \"4, 4\",\n },\n }}\n labels={[\"Average\"]}\n labelComponent={\n <VictoryLabel\n y={45}\n style={{ fill: \"#475569\", fontSize: 18, fontWeight: \"bold\" }}\n backgroundStyle={{ fill: \"white\" }}\n backgroundPadding={12}\n />\n }\n />\n )}\n {referenceLineValue !== undefined && (\n <VictoryLine\n y={() => referenceLineValue}\n labels={[referenceLineLabel]}\n labelComponent={\n <VictoryLabel\n y={45}\n style={{ fill: \"#ef4444\", fontSize: 18, fontWeight: \"bold\" }}\n backgroundStyle={{ fill: \"white\" }}\n backgroundPadding={12}\n />\n }\n style={{\n data: {\n stroke: \"#ef4444\",\n strokeWidth: 2,\n strokeDasharray: \"4, 4\",\n },\n }}\n />\n )}\n </VictoryChart>\n </div>\n );\n}\n","import {\n VictoryChart,\n VictoryAxis,\n VictoryLabel,\n VictoryLine,\n VictoryHistogram,\n VictoryTooltip,\n VictoryVoronoiContainer,\n} from \"victory\";\n\nexport interface DistributionHistogramData {\n x: number;\n text: string;\n}\n\nexport interface DistributionHistogramProps {\n data: DistributionHistogramData[];\n alt: string;\n label: string;\n average?: number;\n referenceLineValue?: number;\n referenceLineLabel?: string;\n chartWidth?: number;\n chartHeight?: number;\n}\n\nexport function DistributionHistogram({\n data,\n alt,\n label,\n average,\n referenceLineValue,\n referenceLineLabel = \"Reference\",\n chartWidth = 600,\n chartHeight = 400,\n}: DistributionHistogramProps) {\n if (data.length === 0) return null;\n\n const binSize = 10;\n const maxLength = Math.max(\n ...data.map((r) => r.x),\n referenceLineValue ?? 0,\n binSize,\n );\n const maxX = Math.ceil(maxLength / binSize) * binSize + binSize;\n\n const boundaries = [];\n for (let i = 0; i <= maxX; i += binSize) {\n boundaries.push(i);\n }\n\n const padding = { left: 60, right: 30, top: 20, bottom: 70 };\n\n return (\n <div className=\"pb:mb-6\" role=\"region\" aria-label={alt}>\n {label && (\n <span className=\"pb:text-xs pb:uppercase pb:font-bold pb:text-gray-700 pb:block pb:mb-2 pb:px-1\">\n {label}\n </span>\n )}\n <VictoryChart\n width={chartWidth}\n height={chartHeight}\n padding={padding}\n containerComponent={\n <VictoryVoronoiContainer\n title={alt}\n desc={alt}\n aria-label={alt}\n />\n }\n >\n <VictoryAxis\n label=\"Length\"\n tickValues={boundaries}\n tickFormat={(x: number | string) =>\n typeof x === \"number\" ? Math.round(x) : x\n }\n style={{\n axis: { stroke: \"#cbd5e1\" },\n axisLabel: {\n fontSize: 18,\n padding: 45,\n fill: \"#334155\",\n fontWeight: \"bold\",\n },\n tickLabels: {\n fontSize: 18,\n padding: 5,\n fill: \"#334155\",\n angle: 45,\n textAnchor: \"start\",\n },\n }}\n />\n <VictoryAxis\n dependentAxis\n label=\"Count\"\n tickFormat={(x: number | string) =>\n typeof x === \"number\" ? Math.round(x) : x\n }\n style={{\n axis: { stroke: \"#cbd5e1\" },\n axisLabel: {\n fontSize: 18,\n padding: 40,\n fill: \"#334155\",\n fontWeight: \"bold\",\n },\n tickLabels: {\n fontSize: 18,\n padding: 5,\n fill: \"#334155\",\n },\n grid: { stroke: \"#f1f5f9\" },\n }}\n />\n <VictoryHistogram\n data={data}\n bins={boundaries}\n x=\"x\"\n labels={({\n datum,\n }: {\n datum?: {\n y: number;\n binnedData?: { text: string }[];\n };\n }) => {\n if (!datum || datum.y === 0 || !datum.binnedData) return \"\";\n const items = datum.binnedData.map((d: { text: string }) => d.text);\n const displayItems = items.slice(0, 5);\n let labelText = displayItems.join(\"\\n\");\n if (items.length > 5)\n labelText += `\\n...and ${items.length - 5} more`;\n return labelText;\n }}\n labelComponent={\n <VictoryTooltip\n style={{ fontSize: 18 }}\n flyoutStyle={{ fill: \"white\", stroke: \"#cbd5e1\" }}\n pointerLength={5}\n cornerRadius={2}\n constrainToVisibleArea\n />\n }\n style={{\n data: {\n fill: \"#46d9d9\",\n stroke: \"#fff\",\n strokeWidth: 1,\n cursor: \"pointer\",\n },\n }}\n />\n {average !== undefined && (\n <VictoryLine\n x={() => average}\n style={{\n data: {\n stroke: \"#9ca3af\",\n strokeWidth: 2,\n strokeDasharray: \"4, 4\",\n },\n }}\n labels={[\"Average\"]}\n labelComponent={\n <VictoryLabel\n y={45}\n style={{ fill: \"#475569\", fontSize: 18, fontWeight: \"bold\" }}\n backgroundStyle={{ fill: \"white\" }}\n backgroundPadding={12}\n />\n }\n />\n )}\n {referenceLineValue !== undefined && (\n <VictoryLine\n x={() => referenceLineValue}\n labels={[referenceLineLabel]}\n labelComponent={\n <VictoryLabel\n y={45}\n style={{ fill: \"#ef4444\", fontSize: 18, fontWeight: \"bold\" }}\n backgroundStyle={{ fill: \"white\" }}\n backgroundPadding={12}\n />\n }\n style={{\n data: {\n stroke: \"#ef4444\",\n strokeWidth: 2,\n strokeDasharray: \"4, 4\",\n },\n }}\n />\n )}\n </VictoryChart>\n </div>\n );\n}\n","import React from \"react\";\nimport { cn } from \"../ui/utils\";\n\nexport interface LineGraphPoint {\n x: number;\n y: number;\n}\n\nexport interface LineGraphHighlightPoint extends LineGraphPoint {\n color?: string;\n label?: string;\n}\n\nexport interface LineGraphProps {\n data: LineGraphPoint[];\n highlightPoints?: LineGraphHighlightPoint[];\n minX?: number;\n maxX?: number;\n minY?: number;\n maxY?: number;\n width?: number | string;\n height?: number;\n strokeColor?: string;\n strokeWidth?: number;\n fillColor?: string;\n showGrid?: boolean;\n showAxisLabels?: boolean;\n xUnit?: string;\n padding?: number;\n className?: string;\n}\n\nexport function LineGraph({\n data = [],\n highlightPoints = [],\n minX,\n maxX,\n minY = 0,\n maxY,\n width = \"100%\",\n height = 200,\n strokeColor = \"#3b82f6\",\n strokeWidth = 2,\n fillColor,\n showGrid = true,\n showAxisLabels = true,\n xUnit = \"ms\",\n padding = 24,\n className,\n}: LineGraphProps) {\n const svgWidth = typeof width === \"number\" ? width : 800;\n const svgHeight = height;\n\n const hasData = data && data.length > 0;\n\n const calculatedMinX =\n minX ?? (hasData ? Math.min(...data.map((d) => d.x)) : 0);\n const calculatedMaxX =\n maxX ?? (hasData ? Math.max(...data.map((d) => d.x)) : 1000);\n const xSpan = Math.max(calculatedMaxX - calculatedMinX, 1);\n\n const calculatedMinY =\n minY ?? (hasData ? Math.min(...data.map((d) => d.y)) : 0);\n const calculatedMaxY =\n maxY ?? (hasData ? Math.max(...data.map((d) => d.y)) : 1);\n const ySpan = Math.max(calculatedMaxY - calculatedMinY, 0.001);\n\n const getCanvasX = (x: number) =>\n ((x - calculatedMinX) / xSpan) * (svgWidth - 2 * padding) + padding;\n\n const getCanvasY = (y: number) =>\n svgHeight -\n padding -\n ((y - calculatedMinY) / ySpan) * (svgHeight - 2 * padding);\n\n const pathData = hasData\n ? data\n .map(\n (p, i) =>\n `${i === 0 ? \"M\" : \"L\"} ${getCanvasX(p.x)} ${getCanvasY(p.y)}`,\n )\n .join(\" \")\n : `M ${padding} ${getCanvasY(calculatedMinY)} L ${\n svgWidth - padding\n } ${getCanvasY(calculatedMinY)}`;\n\n const fillPathData =\n hasData && fillColor\n ? `${pathData} L ${getCanvasX(\n data[data.length - 1].x,\n )} ${getCanvasY(calculatedMinY)} L ${getCanvasX(\n data[0].x,\n )} ${getCanvasY(calculatedMinY)} Z`\n : undefined;\n\n return (\n <div className={cn(\"pb:relative pb:w-full pb:overflow-x-auto\", className)}>\n <svg\n viewBox={`0 0 ${svgWidth} ${svgHeight}`}\n className=\"pb:w-full pb:h-auto pb:bg-gray-50 pb:rounded pb:border pb:border-gray-200\"\n style={{ minWidth: typeof width === \"number\" ? `${width}px` : \"300px\" }}\n >\n {/* Grid and Axes */}\n {showGrid && (\n <>\n {/* X-axis */}\n <line\n x1={padding}\n y1={svgHeight - padding}\n x2={svgWidth - padding}\n y2={svgHeight - padding}\n stroke=\"#e5e7eb\"\n strokeWidth=\"1\"\n />\n {/* Y-axis */}\n <line\n x1={padding}\n y1={padding}\n x2={padding}\n y2={svgHeight - padding}\n stroke=\"#e5e7eb\"\n strokeWidth=\"1\"\n />\n {/* Mid Y-grid */}\n <line\n x1={padding}\n y1={getCanvasY((calculatedMinY + calculatedMaxY) / 2)}\n x2={svgWidth - padding}\n y2={getCanvasY((calculatedMinY + calculatedMaxY) / 2)}\n stroke=\"#f3f4f6\"\n strokeWidth=\"1\"\n strokeDasharray=\"4\"\n />\n </>\n )}\n\n {/* Fill Area */}\n {fillPathData && (\n <path d={fillPathData} fill={fillColor} opacity={0.3} />\n )}\n\n {/* Data Path */}\n <path\n d={pathData}\n fill=\"none\"\n stroke={strokeColor}\n strokeWidth={hasData ? strokeWidth : 1}\n strokeLinejoin=\"round\"\n strokeLinecap=\"round\"\n />\n\n {/* Highlight Points */}\n {highlightPoints?.map((p, i) => (\n <circle\n key={i}\n cx={getCanvasX(p.x)}\n cy={getCanvasY(p.y)}\n r=\"3.5\"\n fill={p.color ?? \"#ef4444\"}\n className=\"pb:transition-all pb:duration-150 pb:hover:r-5 pb:cursor-crosshair\"\n >\n {p.label && <title>{p.label}</title>}\n </circle>\n ))}\n\n {/* Axis Labels */}\n {showAxisLabels && (\n <>\n {/* Bottom-left X min */}\n <text\n x={padding}\n y={svgHeight - 6}\n fontSize=\"10\"\n fill=\"#9ca3af\"\n textAnchor=\"start\"\n >\n {calculatedMinX}\n {xUnit}\n </text>\n {/* Bottom-right X max */}\n <text\n x={svgWidth - padding}\n y={svgHeight - 6}\n fontSize=\"10\"\n fill=\"#9ca3af\"\n textAnchor=\"end\"\n >\n {calculatedMaxX}\n {xUnit}\n </text>\n {/* Top-left Y max */}\n <text\n x={6}\n y={padding + 4}\n fontSize=\"10\"\n fill=\"#9ca3af\"\n textAnchor=\"start\"\n >\n {calculatedMaxY.toFixed(1)}\n </text>\n {/* Bottom-left Y min */}\n <text\n x={6}\n y={svgHeight - padding}\n fontSize=\"10\"\n fill=\"#9ca3af\"\n textAnchor=\"start\"\n >\n {calculatedMinY.toFixed(1)}\n </text>\n </>\n )}\n </svg>\n </div>\n );\n}\n"],"mappings":"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ACE,UAAWF,EACTd,GAAgBkB,CAAY,GAAKlB,GAAgB,GACjDD,GAAiBa,CAAa,GAAKb,GAAiB,QACpDQ,GAAUN,GAAcM,CAAM,EAC9BU,GAAS,WAAWA,CAAK,GACzBT,CACF,EACA,GAAGE,CACL,EACAD,CACF,CACF,EClKA,IAAAU,GAAkB,oBCsGd,IAAAC,EAAA,6BAjGSC,GAAY,CACvB,MAAO,kBACP,EAAG,uBACH,KAAM,iKACN,MAAO,uBACP,KAAM,yBACN,UAAW,wCACX,QAAS,qCACT,UACE,wdACF,aACE,sJACF,gBAAiB,8BACjB,OACE,uJACF,gBACE,uJACF,QACE,qcACF,WACE,utCACF,gBACE,6EACF,SACE,+kBACF,aACE,uIACF,KAAM,kLACN,aACE,8QACF,MAAO,WACP,aACE,oPACF,sBACE,wMACF,eAAgB,6BAChB,iBAAkB,8BAClB,eAAgB,wCAChB,iBAAkB,2CAClB,YACE,yQACF,IAAK,8DACL,KAAM,0EACN,mBACE,uMACF,OACE,gFACF,kBACE,8EACF,oBACE,mLACF,YACE,oeACF,UACE,8mBACF,QACE,wEACF,iBACE,wIACF,kBACE,wJACF,UACE,0UACF,eAAgB,6CAChB,oBACE,kGACF,aACE,4EACF,SACE,uGACF,WACE,uGACF,WACE,gMACF,sBACE,qJACF,aAAc,4BACd,cACE,+GACF,YACE,8GACF,OACE,2JACF,OACE,uJACF,KAAM,6OACN,KAAM,oBACN,KAAM,+FACN,OAAQ,8CACR,KAAM,+DACR,EAKaC,GAAe,CAC1B,OACE,oBACE,oBAAC,QAAK,EAAE,2LAA2L,KACnM,OAAC,QAAK,EAAE,sCAAsC,GAChD,EAEF,UACE,QAAC,KAAE,UAAU,4CACX,oBAAC,QACC,KAAK,UACL,OAAO,OACP,EAAE,4OACJ,KACA,OAAC,QACC,KAAK,UACL,OAAO,OACP,EAAE,kQACJ,KACA,OAAC,QACC,KAAK,UACL,OAAO,OACP,EAAE,oQACJ,KACA,OAAC,QACC,KAAK,UACL,OAAO,OACP,EAAE,iPACJ,GACF,EAEF,QACE,oBACE,oBAAC,UAAO,GAAG,KAAK,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","names":["src_exports","__export","Accordion","Alert","Anchor","AuthFormUI","Avatar","Button","Card","Checkbox","ChipGroup","CodeBlock","Collapsible","CopyButton","DEFAULT_PEERBOTS_SOCIAL_LINKS","Dialog","DialogClose","DialogDescription","DialogTitle","DistributionBarChart","DistributionHistogram","Dropdown","DropdownItem","DropdownSeparator","Dropzone","EmptyState","Field","FileUpload","Heading","HelperTooltip","Icon","Input","Label","LineGraph","Link","NumberField","PEERBOTS_COLOR_MAP","PEERBOTS_FONT_COLOR_MAP","PeerbotsColorSelector","Popover","PopoverClose","PopoverDescription","PopoverTitle","SEO","SearchInput","Select","Separator","SettingsPanel","Skeleton","Slider","SliderWithNumberField","SocialLinks","Spinner","Stepper","Switch","TabRadio","TabSelection","Text","TextArea","Tooltip","cn","iconPaths","useClipboard","__toCommonJS","styleInject","css","insertAt","head","style","styleInject","import_clsx","import_tailwind_merge","cn","inputs","import_react","headingSizes","headingColorClasses","textColorClasses","textSizeClasses","weightClasses","Heading","level","size","color","variant","weight","className","children","props","visualScale","resolvedColor","React","cn","Text","Component","align","resolvedSize","import_react","import_jsx_runtime","iconPaths","complexIcons","iconAliases","getIconNode","name","resolvedName","icons","_","prop","import_jsx_runtime","Icon","React","className","size","name","children","props","ref","sizes","iconContent","icons","cn","import_jsx_runtime","DEFAULT_PEERBOTS_SOCIAL_LINKS","SocialLinks","className","links","size","variant","sizeClasses","variantClasses","buttonSizeClasses","cn","link","iconName","Icon","import_react","import_jsx_runtime","CodeBlock","code","language","fileName","showLineNumbers","variant","showCopyButton","className","copied","setCopied","handleCopy","err","codeLines","isWindow","cn","Icon","line","idx","React","import_jsx_runtime","colorClasses","underlineClasses","Anchor","className","href","target","color","underline","variant","Component","render","children","props","ref","commonClass","cn","anchorProps","Link","import_react","import_jsx_runtime","variantColorMap","radiusClasses","Button","React","className","variant","color","size","radius","isLoading","leftIcon","rightIcon","children","disabled","render","nativeButton","isIconOnly","href","target","rel","props","ref","resolvedVariant","resolvedColor","resolvedRadius","isActuallyIconOnly","sizes","variantStyles","commonClasses","cn","content","BaseButton","import_react","import_jsx_runtime","Input","React","className","leftIcon","rightIcon","id","props","ref","inputClasses","cn","BaseInput","import_react","import_jsx_runtime","Select","React","className","options","propsId","value","defaultValue","onChange","disabled","placeholder","onFocus","ariaLabel","props","ref","generatedId","selectId","BaseSelect","val","details","event","cn","Icon","option","index","label","import_react","import_jsx_runtime","Slider","React","className","min","max","step","value","defaultValue","disabled","onChange","name","icon","id","ariaLabel","props","ref","handleChange","val","event","cn","BaseSlider","details","import_react","import_react","import_jsx_runtime","NumberField","React","className","value","defaultValue","min","max","step","onChange","disabled","readOnly","propsId","placeholder","showButtons","ariaLabel","props","ref","BaseNumberField","val","details","event","cn","Icon","import_jsx_runtime","SliderWithNumberField","React","className","min","max","step","value","defaultValue","disabled","onChange","inputWidth","showButtons","id","ariaLabel","props","ref","reactId","uniqueId","sliderId","numberId","handleChange","val","event","newValue","widthClass","cn","Slider","NumberField","import_react","import_jsx_runtime","Dropdown","trigger","children","align","className","BaseMenu","React","cn","DropdownItem","props","ref","DropdownSeparator","import_react","import_jsx_runtime","Switch","React","checked","defaultChecked","onChange","disabled","className","externalId","props","ref","autoId","id","cn","BaseSwitch","eventDetails","import_react","import_jsx_runtime","Tooltip","content","children","className","delay","BaseTooltip","React","cn","HelperTooltip","Icon","import_jsx_runtime","Label","children","tooltip","className","props","cn","HelperTooltip","import_react","import_jsx_runtime","variantStyles","TabRadio","options","value","onChange","className","variant","ariaLabel","val","cn","option","import_react","import_jsx_runtime","Field","React","label","description","error","tooltip","children","className","icon","labelPlacement","labelWeight","props","ref","isHorizontal","labelOnRight","BaseField","cn","Label","import_react","import_jsx_runtime","TextArea","React","className","id","props","ref","BaseInput","cn","import_react","import_jsx_runtime","Checkbox","React","className","id","checked","onChange","props","ref","BaseCheckbox","val","cn","Icon","import_jsx_runtime","PEERBOTS_COLOR_MAP","PEERBOTS_FONT_COLOR_MAP","PeerbotsColorSelector","selectedColor","onColorSelect","colors","size","className","ariaLabelPrefix","sizeClasses","cn","colorName","isSelected","import_react","import_jsx_runtime","activeColorStyles","inactiveStyles","radiusClasses","sizeClasses","ChipGroup","options","controlledValue","defaultValue","onChange","multiple","controlledValues","defaultValues","onMultipleChange","color","variant","size","radius","scrollable","className","id","name","internalValue","setInternalValue","internalValues","setInternalValues","activeValue","activeValues","handleSelect","optionValue","disabled","nextValues","v","activeStyle","currentSize","cn","option","idx","isSelected","import_react","import_jsx_runtime","variantStyles","tintStyles","radiusClasses","paddingClasses","Card","React","children","className","variant","color","padding","radius","hoverable","id","Component","href","target","rel","rest","ref","baseStyles","hoverStyles","isLink","cn","import_react","import_jsx_runtime","Accordion","items","allowMultiple","variant","title","children","defaultOpen","controlledIsOpen","onToggle","className","headerClassName","contentClassName","baseId","resolvedItems","openIndices","setOpenIndices","initial","item","index","toggleItem","willBeOpen","prev","i","cn","isOpen","headingContent","bodyContent","headerId","panelId","Icon","Text","import_react","import_jsx_runtime","Collapsible","title","children","variant","defaultOpen","controlledIsOpen","onToggle","className","internalOpen","setInternalOpen","Accordion","nextOpen","React","import_separator","import_jsx_runtime","Separator","className","orientation","props","ref","BaseSeparator","cn","import_jsx_runtime","SettingsPanel","title","children","className","contentClassName","collapsible","defaultOpen","headingLevel","content","cn","Collapsible","Heading","Card","import_react","import_jsx_runtime","getInitials","name","trimmed","parts","colorTints","getHashColor","hash","i","index","Avatar","React","src","alt","size","shape","fallbackIcon","className","props","ref","imgError","setImgError","initials","accessibleAlt","sizeStyles","iconSizeStyles","shapeStyle","colorStyle","hasValidImage","cn","Icon","import_react","import_jsx_runtime","Dropzone","React","accept","maxSizeMB","disabled","controlledPreviewUrl","value","showPreview","previewType","title","subtitle","icon","onFileSelect","onFileRemove","onError","className","id","name","ref","inputRef","isDragging","setIsDragging","internalPreviewUrl","setInternalPreviewUrl","internalPreviewType","setInternalPreviewType","imageLoadError","setImageLoadError","generatedUrlRef","isVid","url","activePreviewUrl","handleFile","file","fileMB","msg","isImg","handleDragEnter","e","handleDragOver","handleDragLeave","handleDrop","handleClick","handleInputChange","handleRemove","isVideo","hasPreview","cn","Icon","Button","import_react","import_jsx_runtime","formatBytes","bytes","decimals","k","dm","sizes","i","FileUpload","React","accept","multiple","disabled","maxSizeBytes","buttonText","buttonVariant","buttonSize","buttonIcon","Icon","placeholder","clearable","value","onChange","onError","className","id","name","ref","inputRef","internalFiles","setInternalFiles","activeFiles","handleButtonClick","handleFileChange","e","selected","oversized","f","msg","handleClear","cn","Button","import_react","import_jsx_runtime","Dialog","open","onOpenChange","trigger","children","className","BaseDialog","eventDetails","React","cn","DialogTitle","props","DialogDescription","DialogClose","import_react","import_jsx_runtime","variantStyles","Popover","trigger","children","title","open","defaultOpen","onOpenChange","side","align","sideOffset","variant","showCloseButton","showArrow","className","BasePopover","nextOpen","React","cn","Icon","PopoverTitle","props","PopoverDescription","PopoverClose","import_jsx_runtime","Skeleton","className","props","cn","import_react","import_jsx_runtime","levelColorMap","iconMap","variantColorClasses","radiusClasses","Alert","color","level","variant","title","message","children","action","onClose","radius","className","visible","setVisible","resolvedColor","iconName","colorClass","colorStyle","handleDismiss","body","cn","Icon","Button","import_jsx_runtime","EmptyState","title","description","icon","primaryAction","secondaryAction","children","className","renderIcon","Icon","cn","Heading","Text","Button","import_react","import_jsx_runtime","sizeClasses","colorClasses","Spinner","React","size","color","label","className","props","ref","cn","import_react_dom","import_jsx_runtime","SubmitButton","label","pending","Button","AuthFormUI","mode","onModeChange","formAction","actionState","onGoogleSignIn","title","description","Heading","Text","Field","Input","Icon","import_jsx_runtime","TabSelection","tabs","activeTabId","onTabClick","onAddClick","className","tab","isActive","Button","e","Icon","import_react","import_jsx_runtime","SearchInput","React","className","value","defaultValue","onChange","onSearch","onClear","showClearButton","placeholder","onKeyDown","props","ref","internalRef","handleClear","handleKeyDown","e","hasValue","cn","Input","Icon","import_react","import_react","useClipboard","options","timeout","onSuccess","onError","copied","setCopied","error","setError","timerRef","copy","text","textarea","successful","err","copyError","import_jsx_runtime","CopyButton","React","value","label","successLabel","timeout","onCopied","onCopyError","copyIcon","successIcon","showIcon","variant","color","size","radius","isIconOnly","className","props","ref","copy","copied","useClipboard","currentIcon","Icon","currentLabel","Button","cn","import_jsx_runtime","colorBadgeStyles","Stepper","steps","activeStepId","onStepClick","orientation","color","size","className","activeIndex","s","colorStyle","resolveStatus","step","index","cn","idx","status","isCurrent","isComplete","isClickable","stepLabel","Icon","isLast","import_jsx_runtime","SEO","title","description","image","url","type","siteTitle","fullTitle","currentUrl","import_victory","import_jsx_runtime","DistributionBarChart","data","alt","chartWidth","chartHeight","average","referenceLineValue","referenceLineLabel","label","maxCount","d","labels","x","datum","labelText","import_victory","import_jsx_runtime","DistributionHistogram","data","alt","label","average","referenceLineValue","referenceLineLabel","chartWidth","chartHeight","binSize","maxLength","r","maxX","boundaries","i","x","datum","items","d","labelText","import_jsx_runtime","LineGraph","data","highlightPoints","minX","maxX","minY","maxY","width","height","strokeColor","strokeWidth","fillColor","showGrid","showAxisLabels","xUnit","padding","className","svgWidth","svgHeight","hasData","calculatedMinX","d","calculatedMaxX","xSpan","calculatedMinY","calculatedMaxY","ySpan","getCanvasX","x","getCanvasY","y","pathData","p","i","fillPathData","cn"]}