@overdoser/react-toolkit 0.0.16 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/AGENTS.md +53 -0
  2. package/CHANGELOG.md +226 -0
  3. package/README.md +102 -3
  4. package/components/Alert/Alert.d.ts +34 -0
  5. package/components/Alert/index.d.ts +2 -0
  6. package/components/Avatar/Avatar.d.ts +36 -0
  7. package/components/Avatar/index.d.ts +2 -0
  8. package/components/Badge/Badge.d.ts +25 -0
  9. package/components/Badge/index.d.ts +2 -0
  10. package/components/Breadcrumbs/Breadcrumbs.d.ts +44 -0
  11. package/components/Breadcrumbs/index.d.ts +2 -0
  12. package/components/Divider/Divider.d.ts +28 -0
  13. package/components/Divider/index.d.ts +2 -0
  14. package/components/Draggable/Draggable.d.ts +50 -0
  15. package/components/Draggable/index.d.ts +2 -0
  16. package/components/Drawer/Drawer.d.ts +65 -0
  17. package/components/Drawer/index.d.ts +2 -0
  18. package/components/Dropzone/Dropzone.d.ts +50 -0
  19. package/components/Dropzone/index.d.ts +2 -0
  20. package/components/Form/Form.d.ts +16 -1
  21. package/components/Form/FormField.d.ts +17 -2
  22. package/components/Form/formFieldDefaults.d.ts +9 -0
  23. package/components/Link/Link.d.ts +10 -0
  24. package/components/Pagination/Pagination.d.ts +48 -0
  25. package/components/Pagination/index.d.ts +4 -0
  26. package/components/Pagination/paginationRange.d.ts +8 -0
  27. package/components/Popover/Popover.d.ts +7 -0
  28. package/components/Skeleton/Skeleton.d.ts +28 -0
  29. package/components/Skeleton/index.d.ts +2 -0
  30. package/components/Spinner/Spinner.d.ts +29 -0
  31. package/components/Spinner/index.d.ts +2 -0
  32. package/components/Tabs/Tabs.d.ts +66 -0
  33. package/components/Tabs/index.d.ts +2 -0
  34. package/components/Timer/Timer.d.ts +103 -0
  35. package/components/Timer/index.d.ts +2 -0
  36. package/components/Toast/Toast.d.ts +82 -0
  37. package/components/Toast/index.d.ts +2 -0
  38. package/components/Toast/toastStore.d.ts +28 -0
  39. package/components/Tooltip/Tooltip.d.ts +38 -0
  40. package/components/Tooltip/index.d.ts +2 -0
  41. package/components/inputs/Checkbox/Checkbox.d.ts +11 -1
  42. package/components/inputs/Checkbox/CheckboxGroup.d.ts +83 -0
  43. package/components/inputs/Checkbox/index.d.ts +2 -0
  44. package/components/inputs/DatePicker/DatePicker.d.ts +58 -0
  45. package/components/inputs/DatePicker/dateUtils.d.ts +16 -0
  46. package/components/inputs/DatePicker/index.d.ts +2 -0
  47. package/components/inputs/NumberInput/NumberInput.d.ts +41 -0
  48. package/components/inputs/NumberInput/index.d.ts +2 -0
  49. package/components/inputs/Slider/Slider.d.ts +44 -0
  50. package/components/inputs/Slider/index.d.ts +2 -0
  51. package/index.css +1 -1
  52. package/index.d.ts +38 -2
  53. package/index.js +5047 -2698
  54. package/index.layered.css +5 -0
  55. package/llms.txt +331 -5
  56. package/manifest.json +2057 -289
  57. package/package.json +3 -2
@@ -0,0 +1,5 @@
1
+ @charset "UTF-8";
2
+ @layer crk {
3
+ :root{--crk-color-primary: #6366f1;--crk-color-primary-hover: #4f46e5;--crk-color-primary-active: #4338ca;--crk-color-primary-light: rgba(99, 102, 241, .08);--crk-color-primary-ring: rgba(99, 102, 241, .35);--crk-color-secondary: #64748b;--crk-color-secondary-hover: #475569;--crk-color-secondary-light: rgba(100, 116, 139, .08);--crk-color-danger: #ef4444;--crk-color-danger-hover: #dc2626;--crk-color-danger-active: #b91c1c;--crk-color-danger-light: rgba(239, 68, 68, .08);--crk-color-success: #10b981;--crk-color-success-light: rgba(16, 185, 129, .08);--crk-color-warning: #f59e0b;--crk-color-warning-light: rgba(245, 158, 11, .08);--crk-color-bg: #ffffff;--crk-color-bg-subtle: #f8fafc;--crk-color-bg-muted: #f1f5f9;--crk-color-text: #0f172a;--crk-color-text-secondary: #334155;--crk-color-text-muted: #94a3b8;--crk-color-border: #e2e8f0;--crk-color-border-hover: #cbd5e1;--crk-chart-1: #6366f1;--crk-chart-2: #10b981;--crk-chart-3: #f59e0b;--crk-chart-4: #ec4899;--crk-chart-5: #8b5cf6;--crk-chart-grid: var(--crk-color-border);--crk-chart-axis: var(--crk-color-text-muted);--crk-chart-label-inside: #ffffff;--crk-chart-tooltip-bg: var(--crk-color-text);--crk-chart-tooltip-text: var(--crk-color-bg);--crk-font-family: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", sans-serif;--crk-font-size-xs: .75rem;--crk-font-size-sm: .8125rem;--crk-font-size-md: .875rem;--crk-font-size-lg: 1rem;--crk-font-size-xl: 1.125rem;--crk-font-size-2xl: 1.375rem;--crk-font-size-3xl: 1.75rem;--crk-font-size-4xl: 2.25rem;--crk-font-size-5xl: 3rem;--crk-font-weight-normal: 400;--crk-font-weight-medium: 500;--crk-font-weight-semibold: 600;--crk-font-weight-bold: 700;--crk-line-height-tight: 1.2;--crk-line-height-normal: 1.5;--crk-line-height-relaxed: 1.7;--crk-letter-spacing-tight: -.025em;--crk-letter-spacing-normal: -.011em;--crk-control-line-height: 1.25rem;--crk-control-padding-y-sm: .375rem;--crk-control-padding-y-md: .5rem;--crk-control-padding-y-lg: .75rem;--crk-control-padding-x-sm: .9375rem;--crk-control-padding-x-md: 1.25rem;--crk-control-padding-x-lg: 1.5625rem;--crk-spacing-xs: .25rem;--crk-spacing-sm: .5rem;--crk-spacing-md: .75rem;--crk-spacing-lg: 1rem;--crk-spacing-xl: 1.5rem;--crk-spacing-2xl: 2rem;--crk-spacing-3xl: 3rem;--crk-border-radius-sm: .375rem;--crk-border-radius-md: .5rem;--crk-border-radius-lg: .75rem;--crk-border-radius-xl: 1rem;--crk-border-radius-full: 9999px;--crk-border-width: 1px;--crk-border-color: var(--crk-color-border);--crk-shadow-xs: 0 1px 2px rgba(0, 0, 0, .04);--crk-shadow-sm: 0 1px 3px rgba(0, 0, 0, .06), 0 1px 2px rgba(0, 0, 0, .04);--crk-shadow-md: 0 4px 8px -2px rgba(0, 0, 0, .06), 0 2px 4px -2px rgba(0, 0, 0, .04);--crk-shadow-lg: 0 12px 24px -4px rgba(0, 0, 0, .08), 0 4px 8px -2px rgba(0, 0, 0, .03);--crk-shadow-xl: 0 20px 40px -8px rgba(0, 0, 0, .1), 0 8px 16px -4px rgba(0, 0, 0, .04);--crk-shadow-ring: 0 0 0 3px var(--crk-color-primary-ring);--crk-z-dropdown: 1000;--crk-z-popover: 1010;--crk-z-modal-backdrop: 1040;--crk-z-modal: 1050;--crk-z-floating: 1060;--crk-transition-fast: .15s cubic-bezier(.4, 0, .2, 1);--crk-transition-normal: .2s cubic-bezier(.4, 0, .2, 1);--crk-transition-smooth: .3s cubic-bezier(.4, 0, .2, 1);--crk-transition-spring: .4s cubic-bezier(.34, 1.56, .64, 1)}.crk-root-8RX49{--crk-btn-font-family: var(--crk-font-family);--crk-btn-font-weight: 500;--crk-btn-letter-spacing: var(--crk-letter-spacing-normal);--crk-btn-border-radius: var(--crk-border-radius-md);--crk-btn-gap: var(--crk-spacing-sm);--crk-btn-transition: var(--crk-transition-smooth);--crk-btn-disabled-opacity: .5;--crk-btn-dot-size: .25em;--crk-btn-dot-gap: .2em;--crk-btn-dot-color: currentColor;--crk-btn-dot-bounce-height: -.25em;--crk-btn-dot-speed: 1.2s;--crk-btn-dot-content-shift: -.75em;position:relative;display:inline-flex;align-items:center;justify-content:center;gap:var(--crk-btn-gap);font-family:var(--crk-btn-font-family);font-weight:var(--crk-btn-font-weight);letter-spacing:var(--crk-btn-letter-spacing);border:none;border-radius:var(--crk-btn-border-radius);cursor:pointer;overflow:hidden;-webkit-user-select:none;user-select:none;transition:var(--crk-btn-transition);white-space:nowrap}.crk-root-8RX49:focus-visible{outline:none;box-shadow:var(--crk-shadow-ring)}.crk-root-8RX49:disabled:not(.crk-loading-QfItr){opacity:var(--crk-btn-disabled-opacity);cursor:not-allowed}.crk-primary-st6yY{background-color:var(--crk-color-primary);color:#fff;box-shadow:var(--crk-shadow-sm)}.crk-primary-st6yY:hover:not(:disabled){background-color:var(--crk-color-primary-hover);box-shadow:var(--crk-shadow-md)}.crk-primary-st6yY:active:not(:disabled){background-color:var(--crk-color-primary-active);box-shadow:var(--crk-shadow-sm)}.crk-secondary-j-3rj{background-color:transparent;color:var(--crk-color-text-secondary);outline:1.5px solid var(--crk-color-border);outline-offset:-1.5px;box-shadow:var(--crk-shadow-xs)}.crk-secondary-j-3rj:hover:not(:disabled){background-color:var(--crk-color-bg-subtle);outline-color:var(--crk-color-border-hover)}.crk-secondary-j-3rj:active:not(:disabled){background-color:var(--crk-color-bg-muted)}.crk-danger-Hxs5n{background-color:var(--crk-color-danger);color:#fff;box-shadow:var(--crk-shadow-sm)}.crk-danger-Hxs5n:hover:not(:disabled){background-color:var(--crk-color-danger-hover);box-shadow:var(--crk-shadow-md)}.crk-danger-Hxs5n:active:not(:disabled){background-color:var(--crk-color-danger-active);box-shadow:var(--crk-shadow-sm)}.crk-ghost-kQ0A8{background-color:transparent;color:var(--crk-color-text-secondary)}.crk-ghost-kQ0A8:hover:not(:disabled){background-color:var(--crk-color-primary-light);color:var(--crk-color-primary)}.crk-ghost-kQ0A8:active:not(:disabled){background-color:#6366f126}.crk-sm-RXFPY{--crk-btn-font-size: var(--crk-font-size-sm);--crk-btn-line-height: var(--crk-control-line-height);--crk-btn-padding-y: var(--crk-control-padding-y-sm);--crk-btn-padding-x: var(--crk-control-padding-x-sm);--crk-btn-border-radius: var(--crk-border-radius-sm);font-size:var(--crk-btn-font-size);line-height:var(--crk-btn-line-height);padding:var(--crk-btn-padding-y) var(--crk-btn-padding-x);border-radius:var(--crk-btn-border-radius)}.crk-md-nDnOD{--crk-btn-font-size: var(--crk-font-size-md);--crk-btn-line-height: var(--crk-control-line-height);--crk-btn-padding-y: var(--crk-control-padding-y-md);--crk-btn-padding-x: var(--crk-control-padding-x-md);font-size:var(--crk-btn-font-size);line-height:var(--crk-btn-line-height);padding:var(--crk-btn-padding-y) var(--crk-btn-padding-x)}.crk-lg-qD-Qh{--crk-btn-font-size: var(--crk-font-size-lg);--crk-btn-line-height: var(--crk-control-line-height);--crk-btn-padding-y: var(--crk-control-padding-y-lg);--crk-btn-padding-x: var(--crk-control-padding-x-lg);--crk-btn-border-radius: var(--crk-border-radius-lg);font-size:var(--crk-btn-font-size);line-height:var(--crk-btn-line-height);padding:var(--crk-btn-padding-y) var(--crk-btn-padding-x);border-radius:var(--crk-btn-border-radius)}.crk-fullWidth-AHpSl{width:100%}.crk-iconOnly-FNrSu{width:calc(var(--crk-btn-line-height) + 2 * var(--crk-btn-padding-y));aspect-ratio:1;padding:0;font-size:calc(var(--crk-btn-font-size) * 1.25);font-weight:700;line-height:1;flex-shrink:0}.crk-iconOnly-FNrSu svg{width:1em;height:1em;display:block}.crk-loading-QfItr{cursor:wait}.crk-loading-QfItr.crk-primary-st6yY{background-color:#8b8fa8;box-shadow:none}.crk-loading-QfItr.crk-secondary-j-3rj{background-color:var(--crk-color-bg-muted);border-color:var(--crk-color-border);box-shadow:none}.crk-loading-QfItr.crk-danger-Hxs5n{background-color:#b0a0a0;box-shadow:none}.crk-loading-QfItr.crk-ghost-kQ0A8{background-color:var(--crk-color-bg-muted)}.crk-content-PpYVU{display:inline-flex;align-items:center;gap:var(--crk-spacing-sm)}.crk-shimmer-8iQSU{position:absolute;inset:0;background:linear-gradient(105deg,transparent 35%,rgba(255,255,255,.18) 50%,transparent 65%);background-size:200% 100%;background-position:200% 0;opacity:0;pointer-events:none;transition:opacity .3s}.crk-loadingShimmer-BVvFw .crk-shimmer-8iQSU{opacity:1;animation:crk-shimmerSweep-uiZ01 1.4s ease-in-out infinite}@keyframes crk-shimmerSweep-uiZ01{0%{background-position:200% 0}to{background-position:-200% 0}}.crk-dots-U8wss{position:absolute;right:.5em;top:50%;transform:translateY(-50%);display:inline-flex;gap:var(--crk-btn-dot-gap);align-items:center;opacity:0;pointer-events:none;transition:opacity .3s}.crk-loadingDots-eKv64 .crk-content-PpYVU{transform:translate(var(--crk-btn-dot-content-shift));transition:transform .3s}.crk-loadingDots-eKv64 .crk-dots-U8wss{opacity:1}.crk-dot-Owuk1{display:block;width:var(--crk-btn-dot-size);height:var(--crk-btn-dot-size);border-radius:50%;background:var(--crk-btn-dot-color);opacity:.5;animation:crk-dotBounce-FwdcC var(--crk-btn-dot-speed) ease-in-out infinite}.crk-dot-Owuk1:nth-child(2){animation-delay:.2s}.crk-dot-Owuk1:nth-child(3){animation-delay:.4s}@keyframes crk-dotBounce-FwdcC{0%,80%,to{opacity:.3;transform:translateY(0)}40%{opacity:1;transform:translateY(var(--crk-btn-dot-bounce-height))}}@property --crk-border-angle{syntax: "<angle>"; initial-value: 0deg; inherits: false;}.crk-loadingBorder-9ULFw{overflow:visible}.crk-loadingBorder-9ULFw.crk-secondary-j-3rj{outline-color:transparent}.crk-loadingBorder-9ULFw:before{content:"";position:absolute;inset:0;border-radius:inherit;padding:1.5px;background:conic-gradient(from var(--crk-border-angle, 0deg),transparent 0%,currentColor 15%,transparent 30%);-webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);-webkit-mask-composite:xor;mask-composite:exclude;opacity:0;transition:opacity .3s}.crk-primary-st6yY.crk-loadingBorder-9ULFw:before,.crk-danger-Hxs5n.crk-loadingBorder-9ULFw:before{background:conic-gradient(from var(--crk-border-angle, 0deg),transparent 0%,rgba(255,255,255,.6) 15%,transparent 30%)}.crk-secondary-j-3rj.crk-loadingBorder-9ULFw:before,.crk-ghost-kQ0A8.crk-loadingBorder-9ULFw:before{background:conic-gradient(from var(--crk-border-angle, 0deg),transparent 0%,var(--crk-color-text-secondary) 15%,transparent 30%)}.crk-loadingBorder-9ULFw:before{opacity:1;animation:crk-borderSpin-EJ2gW 1.4s linear infinite}@keyframes crk-borderSpin-EJ2gW{to{--crk-border-angle: 360deg}}.crk-root-2j4Vp{--crk-link-font-family: var(--crk-font-family);--crk-link-font-weight: 500;--crk-link-border-radius: var(--crk-border-radius-sm);--crk-link-transition: var(--crk-transition-smooth);font-family:var(--crk-link-font-family);font-weight:var(--crk-link-font-weight);text-decoration:none;border-radius:var(--crk-link-border-radius);cursor:pointer;transition:color var(--crk-link-transition),background-color var(--crk-link-transition)}.crk-root-2j4Vp:focus-visible{outline:none;box-shadow:var(--crk-shadow-ring)}.crk-default-3TBlr{color:var(--crk-color-primary)}.crk-default-3TBlr:hover{color:var(--crk-color-primary-hover);text-decoration:underline;text-underline-offset:2px}.crk-default-3TBlr:active{color:var(--crk-color-primary-active)}.crk-muted-vReNc{color:var(--crk-color-text-muted)}.crk-muted-vReNc:hover{color:var(--crk-color-text-secondary)}.crk-muted-vReNc:active{color:var(--crk-color-text)}.crk-danger-ugf9r{color:var(--crk-color-danger)}.crk-danger-ugf9r:hover{color:var(--crk-color-danger-hover)}.crk-danger-ugf9r:active{color:var(--crk-color-danger-active)}.crk-externalIcon-nNu5J{display:inline-block;width:1em;height:1em;margin-left:.25em;vertical-align:-.1em;flex-shrink:0;opacity:.85}.crk-srOnly-LGQgs{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.crk-root-U-oiq{--crk-typo-font-family: var(--crk-font-family);--crk-typo-line-height: 1.5;--crk-typo-color: var(--crk-color-text);--crk-typo-letter-spacing: var(--crk-letter-spacing-normal);font-family:var(--crk-typo-font-family);line-height:var(--crk-typo-line-height);color:var(--crk-typo-color);margin:0;letter-spacing:var(--crk-typo-letter-spacing)}.crk-h1-Aivwz{font-size:var(--crk-font-size-5xl);font-weight:600;line-height:1.15;letter-spacing:var(--crk-letter-spacing-tight)}.crk-h2-CV8Oo{font-size:var(--crk-font-size-4xl);font-weight:600;line-height:1.2;letter-spacing:var(--crk-letter-spacing-tight)}.crk-h3-lrbrK{font-size:var(--crk-font-size-3xl);font-weight:600;line-height:1.25;letter-spacing:var(--crk-letter-spacing-tight)}.crk-h4--jkC1{font-size:var(--crk-font-size-2xl);font-weight:500;line-height:1.3;letter-spacing:var(--crk-letter-spacing-tight)}.crk-h5-GnQvD{font-size:var(--crk-font-size-xl);font-weight:500;line-height:1.35;letter-spacing:var(--crk-letter-spacing-tight)}.crk-h6-MKlIN{font-size:var(--crk-font-size-lg);font-weight:500;line-height:1.4;letter-spacing:var(--crk-letter-spacing-tight)}.crk-p-FzRtm{font-size:var(--crk-font-size-md);line-height:1.7;color:var(--crk-color-text-secondary)}.crk-span-NZvLx{font-size:inherit}.crk-label-Cwi6a{font-size:var(--crk-font-size-sm);font-weight:500;color:var(--crk-color-text-secondary);letter-spacing:.01em}.crk-normal-7AeZz{font-weight:400}.crk-medium-36OXr{font-weight:500}.crk-semibold-oQixc{font-weight:600}.crk-bold-bk4b4{font-weight:700}.crk-default-79lKR{color:var(--crk-color-text)}.crk-muted-itOSW{color:var(--crk-color-text-muted)}.crk-primary-rp36t{color:var(--crk-color-primary)}.crk-danger-SyOy-{color:var(--crk-color-danger)}.crk-success-w8PpD{color:var(--crk-color-success)}.crk-align-left-3AGYw{text-align:left}.crk-align-center-h-x--{text-align:center}.crk-align-right-IXFhK{text-align:right}.crk-truncate-eqr85{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.crk-root-PVrgx{font-family:var(--crk-font-family);list-style:none;padding:0;margin:0;display:flex;flex-direction:column}.crk-unordered-FhCWT .crk-item-TfW82:before{content:"";display:inline-block;width:6px;height:6px;background-color:var(--crk-color-primary);opacity:.4;border-radius:50%;flex-shrink:0;position:relative;top:-1px}.crk-ordered-8x4YC{counter-reset:list-counter}.crk-ordered-8x4YC .crk-item-TfW82{counter-increment:list-counter}.crk-ordered-8x4YC .crk-item-TfW82:before{content:counter(list-counter) ".";color:var(--crk-color-text-muted);font-size:var(--crk-font-size-sm);font-weight:500;min-width:1.5em;flex-shrink:0}.crk-none-f03Kx .crk-item-TfW82:before{display:none}.crk-sm-Rg4Mv{gap:var(--crk-spacing-xs)}.crk-md-X4Icb{gap:var(--crk-spacing-sm)}.crk-lg-JjNKZ{gap:var(--crk-spacing-md)}.crk-item-TfW82{font-size:var(--crk-font-size-md);color:var(--crk-color-text-secondary);display:flex;align-items:baseline;gap:var(--crk-spacing-sm);line-height:1.7}.crk-wrapper-zxjMt{display:flex;flex-direction:column}.crk-root-Gf85-{--crk-table-font-size: var(--crk-font-size-md);--crk-table-border-color: var(--crk-border-color);--crk-table-border-radius: var(--crk-border-radius-lg);--crk-table-header-bg: var(--crk-color-bg-subtle);--crk-table-header-color: var(--crk-color-text-muted);--crk-table-cell-padding: 12px 16px;--crk-table-header-padding: 10px 16px;width:100%;border-collapse:separate;border-spacing:0;font-family:inherit;font-size:var(--crk-table-font-size);border:1px solid var(--crk-table-border-color);border-radius:var(--crk-table-border-radius);overflow:hidden}.crk-headerCell-ePPZW{position:relative;padding:var(--crk-table-header-padding);text-align:left;font-size:var(--crk-font-size-sm);font-weight:600;color:var(--crk-table-header-color);text-transform:uppercase;letter-spacing:.04em;background-color:var(--crk-table-header-bg);border-bottom:1px solid var(--crk-table-border-color);white-space:nowrap}.crk-headerCellSortable-NMybk{cursor:pointer;-webkit-user-select:none;user-select:none;padding-right:28px;transition:background-color var(--crk-transition-fast)}.crk-headerCellSortable-NMybk:hover{background-color:var(--crk-color-bg-muted)}.crk-sortIndicator-WGD2S{position:absolute;right:10px;top:50%;translate:0 -50%;display:inline-flex;flex-direction:column;font-size:8px;line-height:1;gap:1px}.crk-sortArrow-1-ok4{color:var(--crk-color-text-muted);opacity:.3;transition:opacity var(--crk-transition-fast),color var(--crk-transition-fast)}.crk-sortArrowActive-yhWrO{opacity:1;color:var(--crk-color-primary)}.crk-sortIndex-HGoca{position:absolute;top:-2px;right:-10px;font-size:7px;font-weight:700;color:var(--crk-color-primary);line-height:1}.crk-row-H0wL1{transition:background-color var(--crk-transition-fast)}.crk-row-H0wL1:not(:last-child) .crk-cell-ZfnbG{border-bottom:1px solid var(--crk-table-border-color)}.crk-cell-ZfnbG{padding:var(--crk-table-cell-padding);color:var(--crk-color-text-secondary);vertical-align:middle}.crk-emptyRow-AoPfj .crk-emptyCell-99-7C{padding:var(--crk-spacing-3xl);text-align:center;color:var(--crk-color-text-muted);font-size:var(--crk-font-size-md)}.crk-striped-6Qckq .crk-row-H0wL1:nth-child(2n){background-color:var(--crk-color-bg-subtle)}.crk-hoverable-ljU9B .crk-row-H0wL1:hover{background-color:var(--crk-color-primary-light)}.crk-compact-2-UWr .crk-headerCell-ePPZW{padding:6px 12px}.crk-compact-2-UWr .crk-headerCell-ePPZW.crk-headerCellSortable-NMybk{padding-right:24px}.crk-compact-2-UWr .crk-cell-ZfnbG{padding:8px 12px;font-size:var(--crk-font-size-sm)}.crk-paginator-UlYIY{display:flex;align-items:center;justify-content:space-between;padding:var(--crk-spacing-md) 0;font-size:var(--crk-font-size-sm);color:var(--crk-color-text-muted);gap:var(--crk-spacing-md)}.crk-paginatorInfo-BVca4{display:flex;align-items:center;gap:var(--crk-spacing-md)}.crk-paginatorText-sqWS0{white-space:nowrap}.crk-pageSizeSelect-yhqJQ{appearance:none;font-family:var(--crk-font-family);font-size:var(--crk-font-size-sm);color:var(--crk-color-text-secondary);background:var(--crk-color-bg);border:var(--crk-border-width) solid var(--crk-color-border);border-radius:var(--crk-border-radius-sm);padding:4px 24px 4px 8px;cursor:pointer;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='5' viewBox='0 0 8 5'%3E%3Cpath fill='%2394a3b8' d='M0 0l4 5 4-5z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 8px center}.crk-pageSizeSelect-yhqJQ:focus{outline:none;border-color:var(--crk-color-primary);box-shadow:var(--crk-shadow-ring)}.crk-paginatorNav-MDSui{display:flex;align-items:center;gap:2px}.crk-pageButton-1PX-g{all:unset;box-sizing:border-box;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;min-width:2rem;height:2rem;padding:0 6px;font-family:var(--crk-font-family);font-size:var(--crk-font-size-sm);color:var(--crk-color-text-secondary);border-radius:var(--crk-border-radius-sm);transition:all var(--crk-transition-fast)}.crk-pageButton-1PX-g:hover:not(:disabled){background-color:var(--crk-color-bg-muted)}.crk-pageButton-1PX-g:disabled{opacity:.3;cursor:not-allowed}.crk-pageButton-1PX-g:focus-visible{outline:none;box-shadow:var(--crk-shadow-ring)}.crk-pageButtonActive--D7Q7{background-color:var(--crk-color-primary);color:#fff;font-weight:600}.crk-pageButtonActive--D7Q7:hover:not(:disabled){background-color:var(--crk-color-primary-hover)}.crk-pageEllipsis-en59J{display:inline-flex;align-items:center;justify-content:center;min-width:2rem;height:2rem;color:var(--crk-color-text-muted)}@keyframes crk-menuEnter-F0Yyt{0%{opacity:0;transform:translateY(-8px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}.crk-root-an8Cf{position:relative;display:inline-block}.crk-fullWidth-S-uVk{display:block;width:100%}.crk-trigger-LwPaD{all:unset;--crk-input-font-family: var(--crk-font-family);--crk-input-font-size: var(--crk-font-size-md);--crk-input-letter-spacing: var(--crk-letter-spacing-normal);--crk-input-color: var(--crk-color-text);--crk-input-bg: var(--crk-color-bg);--crk-input-border-color: var(--crk-border-color);--crk-input-border-radius: var(--crk-border-radius-md);--crk-input-shadow: var(--crk-shadow-xs);--crk-input-transition: var(--crk-transition-fast);--crk-input-disabled-opacity: .5;box-sizing:border-box;font-family:var(--crk-input-font-family);font-size:var(--crk-input-font-size);letter-spacing:var(--crk-input-letter-spacing);color:var(--crk-input-color);background:var(--crk-input-bg);border:var(--crk-border-width) solid var(--crk-input-border-color);border-radius:var(--crk-input-border-radius);box-shadow:var(--crk-input-shadow);transition:border-color var(--crk-input-transition),box-shadow var(--crk-input-transition),background-color var(--crk-input-transition)}.crk-trigger-LwPaD::placeholder{color:var(--crk-color-text-muted)}.crk-trigger-LwPaD:hover:not(:disabled):not(:focus){border-color:var(--crk-color-border-hover)}.crk-trigger-LwPaD:focus{outline:none;border-color:var(--crk-color-primary);box-shadow:var(--crk-shadow-ring)}.crk-trigger-LwPaD:disabled{opacity:var(--crk-input-disabled-opacity);cursor:not-allowed;background:var(--crk-color-bg-subtle)}.crk-trigger-LwPaD{cursor:pointer;display:inline-flex;align-items:center;width:100%;text-align:left;font-size:var(--crk-font-size-md);line-height:var(--crk-control-line-height);padding:var(--crk-control-padding-y-md) 2.5em var(--crk-control-padding-y-md) .85em;position:relative}.crk-trigger-LwPaD.crk-fullWidth-S-uVk{width:100%}.crk-trigger-LwPaD:focus-visible{outline:none;box-shadow:var(--crk-shadow-ring)}.crk-triggerOpen-U4pa9{border-color:var(--crk-color-primary);box-shadow:var(--crk-shadow-ring)}.crk-triggerLabel-QLITs{flex:1;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.crk-triggerError-3jlu1{border-color:var(--crk-color-danger)}.crk-triggerError-3jlu1:focus-visible{box-shadow:0 0 0 3px var(--crk-color-danger-light)}.crk-placeholder-fWdch{color:var(--crk-color-text-muted);font-weight:400}.crk-chevron-jmDNe{position:absolute;right:.75em;top:50%;transform:translateY(-50%);pointer-events:none;color:var(--crk-color-text-muted);display:flex;width:0;height:0;border-left:.3em solid transparent;border-right:.3em solid transparent;border-top:.35em solid currentColor;transition:transform var(--crk-transition-fast)}.crk-triggerOpen-U4pa9 .crk-chevron-jmDNe{transform:translateY(-50%) rotate(180deg)}.crk-menu-fxnKL{background:var(--crk-color-bg);border:var(--crk-border-width) solid var(--crk-color-border);border-radius:var(--crk-border-radius-lg);box-shadow:var(--crk-shadow-lg);box-sizing:border-box;position:absolute;top:calc(100% + 4px);min-width:180px;padding:4px;display:none;flex-direction:column}.crk-menu-fxnKL.crk-fullWidth-S-uVk{width:100%;left:0;right:0}.crk-menu-fxnKL{z-index:var(--crk-z-dropdown);opacity:0;transform:translateY(-8px) scale(.95);animation:none}.crk-menuOpen-HF-Y1{display:flex;animation:crk-menuEnter-F0Yyt .2s cubic-bezier(.34,1.56,.64,1) forwards}.crk-alignLeft-buCDJ{left:0}.crk-alignRight-05P9w{right:0}.crk-item-f-Rhh{all:unset;cursor:pointer;display:flex;align-items:center;padding:8px 12px;font-size:var(--crk-font-size-md);color:var(--crk-color-text-secondary);transition:all var(--crk-transition-fast);gap:var(--crk-spacing-sm)}.crk-item-f-Rhh:hover{background-color:var(--crk-color-primary-light);color:var(--crk-color-primary)}.crk-item-f-Rhh:focus-visible{outline:none;box-shadow:var(--crk-shadow-ring)}.crk-item-f-Rhh:active{background-color:#6366f126}.crk-itemDisabled-L-d6i{opacity:.4;cursor:not-allowed;pointer-events:none}.crk-itemSelected-Fwmuo{background-color:var(--crk-color-bg-muted);color:var(--crk-color-text);font-weight:500}.crk-itemSelected-Fwmuo:hover{background-color:var(--crk-color-primary-light);color:var(--crk-color-primary)}@keyframes crk-popoverFade-hj41M{0%{opacity:0}to{opacity:1}}.crk-root-8H-L9{position:relative;display:inline-block}.crk-trigger-Zn1nQ{all:unset;cursor:pointer;display:inline-flex}.crk-trigger-Zn1nQ:focus-visible{outline:none;box-shadow:var(--crk-shadow-ring);border-radius:var(--crk-border-radius-md)}.crk-popover-rvS3X{--crk-popover-padding: var(--crk-spacing-lg);--crk-popover-min-width: 200px;--crk-popover-border-radius: var(--crk-border-radius-lg);--crk-popover-shadow: var(--crk-shadow-lg);--crk-popover-animation: crk-popoverFade-hj41M .15s ease-out;background:var(--crk-color-bg);border:var(--crk-border-width) solid var(--crk-color-border);border-radius:var(--crk-border-radius-lg);box-shadow:var(--crk-shadow-lg);position:absolute;padding:var(--crk-popover-padding);z-index:var(--crk-z-popover);animation:var(--crk-popover-animation);min-width:var(--crk-popover-min-width);border-radius:var(--crk-popover-border-radius);box-shadow:var(--crk-popover-shadow)}.crk-bottom-lawQw{top:calc(100% + 8px);left:50%;translate:calc(-50% + var(--crk-popover-shift-x, 0px)) 0}.crk-top-rqvC6{bottom:calc(100% + 8px);left:50%;translate:calc(-50% + var(--crk-popover-shift-x, 0px)) 0}.crk-left-J6exv{right:calc(100% + 8px);top:50%;translate:0 calc(-50% + var(--crk-popover-shift-y, 0px))}.crk-right-3y20l{left:calc(100% + 8px);top:50%;translate:0 calc(-50% + var(--crk-popover-shift-y, 0px))}@keyframes crk-backdropIn-x5Z-A{0%{opacity:0;-webkit-backdrop-filter:blur(0);backdrop-filter:blur(0)}to{opacity:1;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}}@keyframes crk-modalIn-xFUwm{0%{opacity:0;transform:translateY(16px) scale(.97)}to{opacity:1;transform:translateY(0) scale(1)}}.crk-backdrop-jYpTA{--crk-modal-backdrop-bg: rgba(15, 23, 42, .4);--crk-modal-backdrop-blur: 4px;position:fixed;inset:0;background-color:var(--crk-modal-backdrop-bg);-webkit-backdrop-filter:blur(var(--crk-modal-backdrop-blur));backdrop-filter:blur(var(--crk-modal-backdrop-blur));display:flex;align-items:center;justify-content:center;z-index:var(--crk-z-modal-backdrop);animation:crk-backdropIn-x5Z-A .25s ease forwards;padding:var(--crk-spacing-xl)}.crk-modal-yNG-7{--crk-modal-bg: #fff;--crk-modal-border-radius: var(--crk-border-radius-xl);--crk-modal-shadow: var(--crk-shadow-xl);--crk-modal-padding: var(--crk-spacing-xl);background-color:var(--crk-modal-bg);border-radius:var(--crk-modal-border-radius);box-shadow:var(--crk-modal-shadow);display:flex;flex-direction:column;max-height:calc(100vh - 3rem);width:100%;z-index:var(--crk-z-modal);animation:crk-modalIn-xFUwm .3s cubic-bezier(.34,1.56,.64,1);overflow:hidden}.crk-sm--xyY9{max-width:400px}.crk-md-ETTfh{max-width:560px}.crk-lg-5DBb7{max-width:720px}.crk-fullscreen-b4jQ-{max-width:100vw;max-height:100vh;border-radius:0}.crk-header-NS30G{display:flex;align-items:center;padding:var(--crk-modal-padding) var(--crk-modal-padding) var(--crk-spacing-lg);font-size:var(--crk-font-size-xl);font-weight:600;letter-spacing:-.01em;color:var(--crk-color-text);flex-shrink:0}.crk-headerWithClose-4davm{justify-content:space-between}.crk-closeButton-JX-aq{all:unset;cursor:pointer;display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:var(--crk-border-radius-md);color:var(--crk-color-text-muted);transition:all var(--crk-transition-fast)}.crk-closeButton-JX-aq:hover{background-color:var(--crk-color-bg-muted);color:var(--crk-color-text)}.crk-closeButton-JX-aq:focus-visible{outline:none;box-shadow:var(--crk-shadow-ring)}.crk-body-3zIj9{padding:0 var(--crk-modal-padding) var(--crk-modal-padding);flex:1 1 auto;overflow-y:auto;font-size:var(--crk-font-size-md);color:var(--crk-color-text-secondary);line-height:1.625}.crk-footer-Oyz-R{display:flex;align-items:center;justify-content:flex-end;gap:var(--crk-spacing-sm);padding:var(--crk-spacing-lg) var(--crk-modal-padding);border-top:1px solid var(--crk-color-border);flex-shrink:0}.crk-root-5Kdf2{touch-action:none}.crk-surfaceDraggable-mIpX8{cursor:grab}.crk-dragging-XtMt7{cursor:grabbing;-webkit-user-select:none;user-select:none;will-change:transform}.crk-handle-r4nFh{cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none}.crk-handle-r4nFh:focus-visible{outline:none;box-shadow:var(--crk-shadow-ring)}.crk-handleDragging-FRObk{cursor:grabbing}.crk-handleDisabled-8t94h{cursor:default}.crk-root-2x4fl{display:flex;flex-direction:column;font-family:var(--crk-font-family)}.crk-vertical-D93pf{flex-direction:row;gap:var(--crk-spacing-lg)}.crk-list-6iAKX{display:flex;align-items:center;gap:.25rem}.crk-vertical-D93pf .crk-list-6iAKX{flex-direction:column;align-items:stretch}.crk-list_line-ZazHL{border-bottom:var(--crk-border-width) solid var(--crk-color-border);gap:.5rem}.crk-vertical-D93pf .crk-list_line-ZazHL{border-bottom:none;border-right:var(--crk-border-width) solid var(--crk-color-border)}.crk-list_solid-Lbmnx,.crk-list_pill-g90VV{padding:.25rem;background:var(--crk-color-bg-muted);border-radius:var(--crk-border-radius-md);width:fit-content}.crk-vertical-D93pf .crk-list_solid-Lbmnx,.crk-vertical-D93pf .crk-list_pill-g90VV{width:auto}.crk-list_pill-g90VV{border-radius:var(--crk-border-radius-full)}.crk-list_sm-U-pax .crk-tab-LYqhc{font-size:var(--crk-font-size-sm)}.crk-list_md-0H3Fg .crk-tab-LYqhc{font-size:var(--crk-font-size-md)}.crk-list_lg-vxB6m .crk-tab-LYqhc{font-size:var(--crk-font-size-lg)}.crk-tab-LYqhc{appearance:none;display:inline-flex;align-items:center;justify-content:center;gap:.4em;font:inherit;font-weight:var(--crk-font-weight-medium);line-height:1.25;color:var(--crk-color-text-secondary);background:transparent;border:none;cursor:pointer;white-space:nowrap;transition:color var(--crk-transition-fast),background-color var(--crk-transition-fast),border-color var(--crk-transition-fast)}.crk-tab-LYqhc:hover:not(:disabled){color:var(--crk-color-text)}.crk-tab-LYqhc:focus-visible{outline:none;box-shadow:var(--crk-shadow-ring)}.crk-tab-LYqhc:disabled{opacity:.5;cursor:not-allowed}.crk-tab_line-8v4fZ{padding:.625rem .25rem;border-bottom:2px solid transparent;margin-bottom:-1px}.crk-vertical-D93pf .crk-tab_line-8v4fZ{border-bottom:none;border-right:2px solid transparent;margin-bottom:0;margin-right:-1px;justify-content:flex-start}.crk-tab_line-8v4fZ.crk-tabSelected-lZne9{color:var(--crk-color-primary);border-color:var(--crk-color-primary)}.crk-tab_solid-4RJvK,.crk-tab_pill-qGlBx{padding:.4rem .875rem;border-radius:var(--crk-border-radius-sm)}.crk-tab_solid-4RJvK.crk-tabSelected-lZne9,.crk-tab_pill-qGlBx.crk-tabSelected-lZne9{color:var(--crk-color-text);background:var(--crk-color-bg);box-shadow:var(--crk-shadow-xs)}.crk-tab_pill-qGlBx{border-radius:var(--crk-border-radius-full)}.crk-panel-0OUR6{padding-top:var(--crk-spacing-md);outline:none}.crk-vertical-D93pf .crk-panel-0OUR6{padding-top:0;flex:1 1 auto}.crk-panel-0OUR6:focus-visible{outline:none;box-shadow:var(--crk-shadow-ring)}.crk-root-KIhSk{--crk-alert-accent: var(--crk-color-primary);--crk-alert-bg: var(--crk-color-primary-light);--crk-alert-fg: var(--crk-color-text);display:flex;align-items:flex-start;gap:.625rem;padding:.75rem .875rem;font-family:var(--crk-font-family);font-size:var(--crk-font-size-md);line-height:var(--crk-line-height-normal);color:var(--crk-alert-fg);background:var(--crk-alert-bg);border:var(--crk-border-width) solid transparent;border-left:3px solid var(--crk-alert-accent);border-radius:var(--crk-border-radius-md)}.crk-info--J-F1{--crk-alert-accent: var(--crk-color-primary);--crk-alert-bg: var(--crk-color-primary-light)}.crk-success-lftZT{--crk-alert-accent: var(--crk-color-success);--crk-alert-bg: var(--crk-color-success-light)}.crk-warning-uOpos{--crk-alert-accent: var(--crk-color-warning);--crk-alert-bg: var(--crk-color-warning-light)}.crk-danger-53-01{--crk-alert-accent: var(--crk-color-danger);--crk-alert-bg: var(--crk-color-danger-light)}.crk-icon-RUu7X{flex-shrink:0;display:inline-flex;color:var(--crk-alert-accent);margin-top:.05em}.crk-icon-RUu7X svg{width:1.2em;height:1.2em;display:block}.crk-content-9Fty2{flex:1 1 auto;min-width:0}.crk-title-QHuwO{font-weight:var(--crk-font-weight-semibold);color:var(--crk-color-text)}.crk-title-QHuwO:not(:only-child){margin-bottom:.15rem}.crk-message-Wd9FZ{color:var(--crk-color-text-secondary)}.crk-close-yMuK-{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;margin:-.25rem -.25rem -.25rem 0;padding:0;border:none;background:transparent;color:var(--crk-color-text-muted);border-radius:var(--crk-border-radius-sm);cursor:pointer;transition:color var(--crk-transition-fast),background-color var(--crk-transition-fast)}.crk-close-yMuK- svg{width:1.1em;height:1.1em}.crk-close-yMuK-:hover{color:var(--crk-color-text);background:#0000000d}.crk-close-yMuK-:focus-visible{outline:none;box-shadow:var(--crk-shadow-ring)}.crk-root-KSuIQ{--crk-badge-color: var(--crk-color-text-secondary);--crk-badge-bg: var(--crk-color-bg-muted);--crk-badge-border: transparent;box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;gap:.4em;font-family:var(--crk-font-family);font-weight:var(--crk-font-weight-medium);line-height:var(--crk-line-height-tight);white-space:nowrap;border-radius:var(--crk-border-radius-full);color:var(--crk-badge-color);background:var(--crk-badge-bg);border:var(--crk-border-width) solid var(--crk-badge-border)}.crk-sm--vFVn{font-size:var(--crk-font-size-xs);padding:.2em .55em}.crk-md-zmWkB{font-size:var(--crk-font-size-xs);padding:.3em .65em}.crk-lg-vhZlR{font-size:var(--crk-font-size-sm);padding:.35em .75em}.crk-neutral-RdrgV{--crk-badge-tint: var(--crk-color-bg-muted);--crk-badge-solid: var(--crk-color-secondary);--crk-badge-fg: var(--crk-color-text-secondary)}.crk-primary-wn6-R{--crk-badge-tint: var(--crk-color-primary-light);--crk-badge-solid: var(--crk-color-primary);--crk-badge-fg: var(--crk-color-primary-hover)}.crk-success-DMnu3{--crk-badge-tint: var(--crk-color-success-light);--crk-badge-solid: var(--crk-color-success);--crk-badge-fg: #047857}.crk-warning-4IHkk{--crk-badge-tint: var(--crk-color-warning-light);--crk-badge-solid: var(--crk-color-warning);--crk-badge-fg: #b45309}.crk-danger-nwbtA{--crk-badge-tint: var(--crk-color-danger-light);--crk-badge-solid: var(--crk-color-danger);--crk-badge-fg: var(--crk-color-danger-hover)}.crk-soft-D7eFo{--crk-badge-bg: var(--crk-badge-tint);--crk-badge-color: var(--crk-badge-fg)}.crk-solid-OAgyP{--crk-badge-bg: var(--crk-badge-solid);--crk-badge-color: #ffffff}.crk-outline-2IwcH{--crk-badge-bg: transparent;--crk-badge-color: var(--crk-badge-fg);--crk-badge-border: currentColor}.crk-dot-KeAKh{width:.5em;height:.5em;border-radius:var(--crk-border-radius-full);background:currentColor;flex-shrink:0}.crk-root-wia8E{display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;color:inherit}.crk-circle-8olrz{display:block;width:1em;height:1em;border-radius:var(--crk-border-radius-full);border:.15em solid currentColor;border-top-color:transparent;opacity:.9;animation:crk-crk-spinner-rotate-vrMQr .7s linear infinite}.crk-sm-q2vog{font-size:1rem}.crk-md-kcEfs{font-size:1.5rem}.crk-lg-8yfDn{font-size:2.25rem}.crk-label-ahktK{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}@keyframes crk-crk-spinner-rotate-vrMQr{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.crk-circle-8olrz{animation-duration:1.6s}}.crk-line-8roAA{--crk-skeleton-bg: var(--crk-color-bg-muted);--crk-skeleton-highlight: var(--crk-color-border);display:block;width:100%;background:var(--crk-skeleton-bg);border-radius:var(--crk-border-radius-sm)}.crk-stack-8QHed{display:flex;flex-direction:column;gap:.5em}.crk-text-4oj9n{height:.8em;border-radius:var(--crk-border-radius-sm)}.crk-text-4oj9n:before{content:" ";display:inline-block;width:0}.crk-circle-o-WgD{border-radius:var(--crk-border-radius-full);aspect-ratio:1/1;width:2.5em}.crk-rect-8lO4C{height:6rem;border-radius:var(--crk-border-radius-md)}.crk-pulse-dX0ir{animation:crk-crk-skeleton-pulse-ZXPJJ 1.6s ease-in-out infinite}.crk-wave-S82D6{position:relative;overflow:hidden}.crk-wave-S82D6:after{content:"";position:absolute;inset:0;transform:translate(-100%);background:linear-gradient(90deg,transparent,var(--crk-skeleton-highlight),transparent);animation:crk-crk-skeleton-wave-rDp6Z 1.6s ease-in-out infinite}@keyframes crk-crk-skeleton-pulse-ZXPJJ{0%,to{opacity:1}50%{opacity:.5}}@keyframes crk-crk-skeleton-wave-rDp6Z{to{transform:translate(100%)}}@media(prefers-reduced-motion:reduce){.crk-pulse-dX0ir,.crk-wave-S82D6:after{animation:none}}.crk-root-NGCl-{--crk-divider-color: var(--crk-color-border);--crk-divider-thickness: var(--crk-border-width);border:0;color:var(--crk-color-text-muted)}.crk-horizontal-X75Kv{width:100%;border-top:var(--crk-divider-thickness) solid var(--crk-divider-color)}.crk-vertical-RMtD4{align-self:stretch;min-height:1em;border-left:var(--crk-divider-thickness) solid var(--crk-divider-color)}.crk-solid-TBm4T{border-style:solid}.crk-dashed-SegXI{border-style:dashed}.crk-dotted--Swoe{border-style:dotted}.crk-withLabel-Eu-NF{display:flex;align-items:center;gap:.75rem;width:100%;border-top:0}.crk-withLabel-Eu-NF .crk-line-27unV{flex:1 1 auto;border-top:var(--crk-divider-thickness) var(--crk-divider-style, solid) var(--crk-divider-color)}.crk-withLabel-Eu-NF.crk-solid-TBm4T .crk-line-27unV{--crk-divider-style: solid}.crk-withLabel-Eu-NF.crk-dashed-SegXI .crk-line-27unV{--crk-divider-style: dashed}.crk-withLabel-Eu-NF.crk-dotted--Swoe .crk-line-27unV{--crk-divider-style: dotted}.crk-label-cjRGC{flex:0 0 auto;font-family:var(--crk-font-family);font-size:var(--crk-font-size-sm);color:var(--crk-color-text-muted);white-space:nowrap}.crk-label_start-KQBPQ .crk-line-27unV:first-child{flex-grow:0;width:1.5rem}.crk-label_end-i4XW3 .crk-line-27unV:last-child{flex-grow:0;width:1.5rem}.crk-root-1YbL5{--crk-avatar-size: 2.5rem;--crk-avatar-bg: var(--crk-color-bg-muted);--crk-avatar-color: var(--crk-color-text-secondary);position:relative;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:var(--crk-avatar-size);height:var(--crk-avatar-size);font-family:var(--crk-font-family);font-weight:var(--crk-font-weight-semibold);color:var(--crk-avatar-color);background:var(--crk-avatar-bg);overflow:hidden;-webkit-user-select:none;user-select:none}.crk-xs-1SMBv{--crk-avatar-size: 1.5rem;font-size:var(--crk-font-size-xs)}.crk-sm-8TB22{--crk-avatar-size: 2rem;font-size:var(--crk-font-size-sm)}.crk-md-zeW0d{--crk-avatar-size: 2.5rem;font-size:var(--crk-font-size-md)}.crk-lg-MWKN-{--crk-avatar-size: 3.25rem;font-size:var(--crk-font-size-lg)}.crk-xl-KCqIL{--crk-avatar-size: 4.5rem;font-size:var(--crk-font-size-2xl)}.crk-circle-nzLby{border-radius:var(--crk-border-radius-full)}.crk-square-JrlyG{border-radius:var(--crk-border-radius-md)}.crk-image-HFFlp{width:100%;height:100%;object-fit:cover;display:block}.crk-fallback-R4J-V{display:inline-flex;align-items:center;justify-content:center;width:100%;height:100%;line-height:1}.crk-status-e4HnT{position:absolute;right:0;bottom:0;width:28%;height:28%;min-width:.5rem;min-height:.5rem;border-radius:var(--crk-border-radius-full);border:2px solid var(--crk-color-bg);box-sizing:border-box}.crk-status_online-bny3b{background:var(--crk-color-success)}.crk-status_offline-xxp2c{background:var(--crk-color-text-muted)}.crk-status_away-coReU{background:var(--crk-color-warning)}.crk-status_busy-aOHjE{background:var(--crk-color-danger)}.crk-square-JrlyG .crk-status-e4HnT{right:-2px;bottom:-2px}.crk-root-stw2c{font-family:var(--crk-font-family);font-size:var(--crk-font-size-md)}.crk-list-RGYQR{display:flex;flex-wrap:wrap;align-items:center;gap:0;margin:0;padding:0;list-style:none}.crk-item-ECyrs{display:inline-flex;align-items:center;min-width:0}.crk-link-B1vub{color:var(--crk-color-text-secondary);text-decoration:none;border-radius:var(--crk-border-radius-sm);transition:color var(--crk-transition-fast)}.crk-link-B1vub:hover{color:var(--crk-color-primary);text-decoration:underline}.crk-link-B1vub:focus-visible{outline:none;box-shadow:var(--crk-shadow-ring)}.crk-current-ilnF5{color:var(--crk-color-text);font-weight:var(--crk-font-weight-medium);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.crk-separator-KChd-{margin:0 .5rem;color:var(--crk-color-text-muted);-webkit-user-select:none;user-select:none}.crk-wrapper-V567h{display:inline-flex}.crk-tooltip-LjRUX{--crk-tooltip-bg: var(--crk-color-text);--crk-tooltip-color: var(--crk-color-bg);z-index:var(--crk-z-popover);max-width:18rem;padding:.35rem .55rem;font-family:var(--crk-font-family);font-size:var(--crk-font-size-xs);line-height:var(--crk-line-height-normal);color:var(--crk-tooltip-color);background:var(--crk-tooltip-bg);border-radius:var(--crk-border-radius-sm);box-shadow:var(--crk-shadow-md);pointer-events:none;width:max-content;animation:crk-crk-tooltip-in-JCAKo var(--crk-transition-fast)}.crk-arrow-6yECM{position:absolute;width:.5rem;height:.5rem;background:var(--crk-tooltip-bg);transform:rotate(45deg)}.crk-p_top-I9ELz .crk-arrow-6yECM{bottom:-.2rem;left:50%;margin-left:-.25rem}.crk-p_bottom-S3gQ1 .crk-arrow-6yECM{top:-.2rem;left:50%;margin-left:-.25rem}.crk-p_left--Bx3l .crk-arrow-6yECM{right:-.2rem;top:50%;margin-top:-.25rem}.crk-p_right-3Wuqv .crk-arrow-6yECM{left:-.2rem;top:50%;margin-top:-.25rem}@keyframes crk-crk-tooltip-in-JCAKo{0%{opacity:0}to{opacity:1}}@media(prefers-reduced-motion:reduce){.crk-tooltip-LjRUX{animation:none}}.crk-backdrop-LBGhN{--crk-drawer-ease: cubic-bezier(.32, .72, 0, 1);--crk-drawer-duration: .32s;position:fixed;inset:0;z-index:var(--crk-z-modal-backdrop);display:flex;background:#0f172a52;animation:crk-crk-drawer-fade-in-fnZXU var(--crk-drawer-duration) ease both}.crk-backdropClosing-0aeyJ{animation:crk-crk-drawer-fade-out-iDYoX var(--crk-drawer-duration) ease both}.crk-backdropBare-7fB4W{background:transparent;pointer-events:none}.crk-backdropBare-7fB4W .crk-drawer-IKoOm{pointer-events:auto}.crk-drawer-IKoOm{position:fixed;z-index:var(--crk-z-modal);display:flex;flex-direction:column;background:var(--crk-color-bg);box-shadow:var(--crk-shadow-xl);overflow:hidden;will-change:transform;animation-duration:var(--crk-drawer-duration, .32s);animation-timing-function:var(--crk-drawer-ease, ease);animation-fill-mode:both}.crk-side_right-sYQoY{top:0;right:0;height:100%}.crk-side_left-gAeYL{top:0;left:0;height:100%}.crk-side_top-QFjZz{top:0;left:0;width:100%}.crk-side_bottom-Y1t6g{bottom:0;left:0;width:100%}.crk-slideIn_right-HORcg{animation-name:crk-crk-drawer-in-right-lit2r}.crk-slideOut_right-lbnQY{animation-name:crk-crk-drawer-out-right-lrub3}.crk-slideIn_left-VvJeV{animation-name:crk-crk-drawer-in-left-98vE7}.crk-slideOut_left-4pc01{animation-name:crk-crk-drawer-out-left-EI6P3}.crk-slideIn_top-ULcWL{animation-name:crk-crk-drawer-in-top-8ZkO6}.crk-slideOut_top-00Tue{animation-name:crk-crk-drawer-out-top-KDkv7}.crk-slideIn_bottom-uBTzu{animation-name:crk-crk-drawer-in-bottom-b9y67}.crk-slideOut_bottom-g6ELp{animation-name:crk-crk-drawer-out-bottom-IShFs}.crk-side_left-gAeYL.crk-size_sm-o8tw7,.crk-side_right-sYQoY.crk-size_sm-o8tw7{width:min(20rem,100vw)}.crk-side_left-gAeYL.crk-size_md-akgTC,.crk-side_right-sYQoY.crk-size_md-akgTC{width:min(28rem,100vw)}.crk-side_left-gAeYL.crk-size_lg-Yjulz,.crk-side_right-sYQoY.crk-size_lg-Yjulz{width:min(40rem,100vw)}.crk-side_left-gAeYL.crk-size_full-DIjPg,.crk-side_right-sYQoY.crk-size_full-DIjPg{width:100vw}.crk-side_top-QFjZz.crk-size_sm-o8tw7,.crk-side_bottom-Y1t6g.crk-size_sm-o8tw7{height:min(14rem,100vh)}.crk-side_top-QFjZz.crk-size_md-akgTC,.crk-side_bottom-Y1t6g.crk-size_md-akgTC{height:min(22rem,100vh)}.crk-side_top-QFjZz.crk-size_lg-Yjulz,.crk-side_bottom-Y1t6g.crk-size_lg-Yjulz{height:min(32rem,100vh)}.crk-side_top-QFjZz.crk-size_full-DIjPg,.crk-side_bottom-Y1t6g.crk-size_full-DIjPg{height:100vh}.crk-header--OScS{display:flex;align-items:center;justify-content:space-between;gap:var(--crk-spacing-md);padding:var(--crk-spacing-lg);font-size:var(--crk-font-size-lg);font-weight:var(--crk-font-weight-semibold);color:var(--crk-color-text);border-bottom:var(--crk-border-width) solid var(--crk-color-border)}.crk-closeButton-WdXyR{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;font-size:1.5rem;line-height:1;color:var(--crk-color-text-muted);background:transparent;border:none;border-radius:var(--crk-border-radius-sm);cursor:pointer;transition:color var(--crk-transition-fast),background-color var(--crk-transition-fast)}.crk-closeButton-WdXyR:hover{color:var(--crk-color-text);background:var(--crk-color-bg-muted)}.crk-closeButton-WdXyR:focus-visible{outline:none;box-shadow:var(--crk-shadow-ring)}.crk-body-CXRcE{flex:1 1 auto;overflow-y:auto;padding:var(--crk-spacing-lg);color:var(--crk-color-text-secondary)}.crk-footer-0kQ83{display:flex;align-items:center;justify-content:flex-end;gap:var(--crk-spacing-sm);padding:var(--crk-spacing-lg);border-top:var(--crk-border-width) solid var(--crk-color-border)}@keyframes crk-crk-drawer-fade-in-fnZXU{0%{opacity:0}to{opacity:1}}@keyframes crk-crk-drawer-fade-out-iDYoX{0%{opacity:1}to{opacity:0}}@keyframes crk-crk-drawer-in-right-lit2r{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes crk-crk-drawer-out-right-lrub3{0%{transform:translate(0)}to{transform:translate(100%)}}@keyframes crk-crk-drawer-in-left-98vE7{0%{transform:translate(-100%)}to{transform:translate(0)}}@keyframes crk-crk-drawer-out-left-EI6P3{0%{transform:translate(0)}to{transform:translate(-100%)}}@keyframes crk-crk-drawer-in-top-8ZkO6{0%{transform:translateY(-100%)}to{transform:translateY(0)}}@keyframes crk-crk-drawer-out-top-KDkv7{0%{transform:translateY(0)}to{transform:translateY(-100%)}}@keyframes crk-crk-drawer-in-bottom-b9y67{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes crk-crk-drawer-out-bottom-IShFs{0%{transform:translateY(0)}to{transform:translateY(100%)}}@media(prefers-reduced-motion:reduce){.crk-backdrop-LBGhN,.crk-backdropClosing-0aeyJ,.crk-drawer-IKoOm,.crk-drawerClosing-9hrsd{animation-duration:1ms}}.crk-root-IuiQ5{--crk-pagination-size: 2.25rem;font-family:var(--crk-font-family)}.crk-sm-tfMLg{--crk-pagination-size: 1.85rem;font-size:var(--crk-font-size-sm)}.crk-md-MdjxU{--crk-pagination-size: 2.25rem;font-size:var(--crk-font-size-md)}.crk-lg-6-p8a{--crk-pagination-size: 2.75rem;font-size:var(--crk-font-size-lg)}.crk-list-UN-OF{display:flex;align-items:center;gap:.25rem;margin:0;padding:0;list-style:none}.crk-item-ZOauk{display:inline-flex;align-items:center;justify-content:center;min-width:var(--crk-pagination-size);height:var(--crk-pagination-size);padding:0 .5rem;font:inherit;font-weight:var(--crk-font-weight-medium);color:var(--crk-color-text-secondary);background:transparent;border:var(--crk-border-width) solid transparent;border-radius:var(--crk-border-radius-md);cursor:pointer;transition:background-color var(--crk-transition-fast)}.crk-item-ZOauk:hover:not(:disabled){background:var(--crk-color-bg-muted);color:var(--crk-color-text)}.crk-item-ZOauk:focus-visible{outline:none;box-shadow:var(--crk-shadow-ring)}.crk-item-ZOauk:disabled{opacity:.45;cursor:not-allowed}.crk-active-gs4QO{color:#fff;background:var(--crk-color-primary);border-color:var(--crk-color-primary);transition:none}.crk-active-gs4QO:hover:not(:disabled){background:var(--crk-color-primary-hover);color:#fff}.crk-control-HnlrC svg{width:.85em;height:.85em}.crk-ellipsis-iAsGN{display:inline-flex;align-items:center;justify-content:center;min-width:var(--crk-pagination-size);height:var(--crk-pagination-size);color:var(--crk-color-text-muted);-webkit-user-select:none;user-select:none}.crk-root-YXMcJ{--crk-dropzone-border: var(--crk-color-border);--crk-dropzone-bg: var(--crk-color-bg-subtle);display:flex;align-items:center;justify-content:center;width:100%;min-height:9rem;padding:var(--crk-spacing-xl);font-family:var(--crk-font-family);text-align:center;background:var(--crk-dropzone-bg);border:2px dashed var(--crk-dropzone-border);border-radius:var(--crk-border-radius-lg);cursor:pointer;transition:border-color var(--crk-transition-fast),background-color var(--crk-transition-fast)}.crk-root-YXMcJ:hover{--crk-dropzone-border: var(--crk-color-border-hover)}.crk-root-YXMcJ:focus-visible{outline:none;box-shadow:var(--crk-shadow-ring)}.crk-dragging-wtsfx{--crk-dropzone-border: var(--crk-color-primary);--crk-dropzone-bg: var(--crk-color-primary-light)}.crk-disabled-9u5TX{opacity:.6;cursor:not-allowed}.crk-disabled-9u5TX:hover{--crk-dropzone-border: var(--crk-color-border)}.crk-input-1u82w{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.crk-content-y4GQe{display:flex;flex-direction:column;align-items:center;gap:.5rem}.crk-icon--ScxV{display:inline-flex;color:var(--crk-color-text-muted)}.crk-icon--ScxV svg{width:2rem;height:2rem}.crk-dragging-wtsfx .crk-icon--ScxV{color:var(--crk-color-primary)}.crk-label-8as4c{font-size:var(--crk-font-size-md);font-weight:var(--crk-font-weight-medium);color:var(--crk-color-text-secondary)}.crk-hint-c-HhG{font-size:var(--crk-font-size-xs);color:var(--crk-color-text-muted)}.crk-root-ze-qA{--crk-timer-color: var(--crk-color-text);--crk-timer-ring-track: var(--crk-color-bg-muted);--crk-timer-ring-progress: var(--crk-color-primary);--crk-timer-ring-size: 6rem;display:inline-flex;align-items:center;justify-content:center;gap:.4rem;font-family:var(--crk-font-family);color:var(--crk-timer-color)}.crk-label_top-f5ix1,.crk-label_bottom-vf4Tk{flex-direction:column}.crk-label_left-Tsjlx,.crk-label_right-l0T9l{flex-direction:row}.crk-sm-LpMEk{--crk-timer-ring-size: 4.5rem;font-size:var(--crk-font-size-xl)}.crk-md-Of6tL{--crk-timer-ring-size: 6rem;font-size:var(--crk-font-size-3xl)}.crk-lg-KKqPc{--crk-timer-ring-size: 8.5rem;font-size:var(--crk-font-size-4xl)}.crk-display-09uul{font-weight:var(--crk-font-weight-semibold);font-variant-numeric:tabular-nums;letter-spacing:.02em;line-height:1}.crk-label-F7Uuf{font-size:var(--crk-font-size-sm);font-weight:var(--crk-font-weight-normal);color:var(--crk-color-text-secondary)}.crk-ringWrap-F71Yf{position:relative;display:inline-flex;align-items:center;justify-content:center;width:var(--crk-timer-ring-size);height:var(--crk-timer-ring-size)}.crk-ring-PqZbn{width:100%;height:100%;transform:rotate(-90deg)}.crk-ringTrack-SaJmr{fill:none;stroke:var(--crk-timer-ring-track);stroke-width:8}.crk-ringProgress-54wH1{fill:none;stroke:var(--crk-timer-ring-progress);stroke-width:8;stroke-linecap:round;transition:stroke-dashoffset var(--crk-transition-normal) linear}.crk-ringDisplay-biAno{position:absolute;font-size:calc(var(--crk-timer-ring-size) / 4.5)}.crk-segments-U9rJE{display:inline-flex;align-items:flex-start;gap:.5rem}.crk-segment-2RMKN{display:inline-flex;flex-direction:column;align-items:center;gap:.3em;min-width:1.6em}.crk-segmentBoxed-iVvX0 .crk-segmentValue-fsXMN{display:flex;align-items:center;justify-content:center;min-width:1.7em;padding:.25em .3em;background:var(--crk-color-bg-muted);border:var(--crk-border-width) solid var(--crk-color-border);border-radius:var(--crk-border-radius-md);box-sizing:border-box}.crk-segmentValue-fsXMN{font-weight:var(--crk-font-weight-bold);font-variant-numeric:tabular-nums;line-height:1;color:var(--crk-timer-color)}.crk-segmentLabel-kihRG{font-size:.34em;font-weight:var(--crk-font-weight-medium);letter-spacing:.04em;text-transform:uppercase;color:var(--crk-color-text-muted);line-height:1}.crk-segmentSep-ZGeiV{align-self:center;font-weight:var(--crk-font-weight-bold);color:var(--crk-color-text-muted)}@media(prefers-reduced-motion:reduce){.crk-ringProgress-54wH1{transition:none}}.crk-viewport-2hLMp{position:fixed;z-index:var(--crk-z-floating);display:flex;flex-direction:column;gap:.625rem;width:min(100vw - 2rem,360px);padding:1rem;pointer-events:none}.crk-pos_top-left-XVZwu{top:0;left:0;align-items:flex-start}.crk-pos_top-center-7zvlQ{top:0;left:50%;transform:translate(-50%);align-items:center}.crk-pos_top-right-nyzVI{top:0;right:0;align-items:flex-end}.crk-pos_bottom-left-z0yV3{bottom:0;left:0;align-items:flex-start}.crk-pos_bottom-center-m0ZHE{bottom:0;left:50%;transform:translate(-50%);align-items:center}.crk-pos_bottom-right-Fplwy{bottom:0;right:0;align-items:flex-end}.crk-toast-ngbBR{--crk-toast-accent: var(--crk-color-text-secondary);pointer-events:auto;position:relative;display:flex;align-items:flex-start;gap:.625rem;width:100%;padding:.75rem .875rem;font-family:var(--crk-font-family);font-size:var(--crk-font-size-md);line-height:var(--crk-line-height-normal);color:var(--crk-color-text);background:var(--crk-color-bg);border:var(--crk-border-width) solid var(--crk-color-border);border-left:3px solid var(--crk-toast-accent);border-radius:var(--crk-border-radius-md);box-shadow:var(--crk-shadow-lg)}.crk-fromTop-ne93U{animation:crk-crk-toast-in-top-23NC0 var(--crk-transition-normal)}.crk-fromBottom-Y7KGE{animation:crk-crk-toast-in-bottom-TVVax var(--crk-transition-normal)}.crk-leaving-P017e{animation:crk-crk-toast-out-2YmIq var(--crk-transition-fast) forwards}.crk-neutral-Fo-jg{--crk-toast-accent: var(--crk-color-secondary)}.crk-info-YHq0a{--crk-toast-accent: var(--crk-color-primary)}.crk-success-BoQPi{--crk-toast-accent: var(--crk-color-success)}.crk-warning-jpQSP{--crk-toast-accent: var(--crk-color-warning)}.crk-danger-6qs-8{--crk-toast-accent: var(--crk-color-danger)}.crk-icon-r-npu{flex-shrink:0;display:inline-flex;color:var(--crk-toast-accent);margin-top:.05em}.crk-icon-r-npu svg{width:1.2em;height:1.2em;display:block}.crk-content-puk6Q{flex:1 1 auto;min-width:0}.crk-title-Iv28R{font-weight:var(--crk-font-weight-semibold)}.crk-title-Iv28R:not(:only-child){margin-bottom:.1rem}.crk-description-RLU-y{color:var(--crk-color-text-secondary)}.crk-close-gWTNf{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;margin:-.25rem -.25rem -.25rem 0;padding:0;border:none;background:transparent;color:var(--crk-color-text-muted);border-radius:var(--crk-border-radius-sm);cursor:pointer;transition:color var(--crk-transition-fast),background-color var(--crk-transition-fast)}.crk-close-gWTNf svg{width:1.1em;height:1.1em}.crk-close-gWTNf:hover{color:var(--crk-color-text);background:#0000000d}.crk-close-gWTNf:focus-visible{outline:none;box-shadow:var(--crk-shadow-ring)}@keyframes crk-crk-toast-in-top-23NC0{0%{opacity:0;transform:translateY(-12px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes crk-crk-toast-in-bottom-TVVax{0%{opacity:0;transform:translateY(12px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes crk-crk-toast-out-2YmIq{to{opacity:0;transform:scale(.96)}}@media(prefers-reduced-motion:reduce){.crk-fromTop-ne93U,.crk-fromBottom-Y7KGE,.crk-leaving-P017e{animation-duration:1ms}}.crk-root-jHIIP{display:flex;flex-direction:column;gap:var(--crk-spacing-sm)}.crk-rootLooseGap-NaOGK{gap:var(--crk-spacing-md)}.crk-formErrors-eh-OP{display:flex;flex-direction:column;gap:0;padding:.75em 1em;background:var(--crk-color-danger-light);border:1px solid var(--crk-color-danger);border-radius:var(--crk-border-radius-md);list-style:none;margin:0}.crk-formError-XEuWv{font-size:var(--crk-font-size-sm);color:var(--crk-color-danger);display:flex;align-items:baseline;gap:.5em;padding:.25em 0}.crk-formError-XEuWv:before{content:"•";flex-shrink:0;font-size:1.1em;line-height:1}.crk-field-OUlYz{display:flex;flex-direction:column;gap:.25rem}.crk-label-udkR7{font-size:var(--crk-font-size-sm);font-weight:var(--crk-font-weight-bold);color:var(--crk-color-text);letter-spacing:normal;cursor:pointer}.crk-labelError-LOgKi{color:var(--crk-color-danger)}.crk-required-IYiA2{color:var(--crk-color-danger);margin-left:2px}.crk-messageReserve-vTOdL{min-height:var(--crk-field-error-min-height, calc(var(--crk-font-size-xs) * var(--crk-line-height-normal)))}.crk-error-yFZXm{font-size:var(--crk-font-size-xs);line-height:var(--crk-line-height-normal);color:var(--crk-color-danger);display:flex;align-items:center;gap:4px}.crk-helperText-Dm-rb{font-size:var(--crk-font-size-xs);line-height:var(--crk-line-height-normal);color:var(--crk-color-text-muted)}.crk-row-nNbx-{display:flex;gap:var(--crk-spacing-lg)}.crk-row-nNbx->*{flex:1;min-width:0}.crk-root-rSgdy{--crk-input-font-family: var(--crk-font-family);--crk-input-font-size: var(--crk-font-size-md);--crk-input-letter-spacing: var(--crk-letter-spacing-normal);--crk-input-color: var(--crk-color-text);--crk-input-bg: var(--crk-color-bg);--crk-input-border-color: var(--crk-border-color);--crk-input-border-radius: var(--crk-border-radius-md);--crk-input-shadow: var(--crk-shadow-xs);--crk-input-transition: var(--crk-transition-fast);--crk-input-disabled-opacity: .5;box-sizing:border-box;font-family:var(--crk-input-font-family);font-size:var(--crk-input-font-size);letter-spacing:var(--crk-input-letter-spacing);color:var(--crk-input-color);background:var(--crk-input-bg);border:var(--crk-border-width) solid var(--crk-input-border-color);border-radius:var(--crk-input-border-radius);box-shadow:var(--crk-input-shadow);transition:border-color var(--crk-input-transition),box-shadow var(--crk-input-transition),background-color var(--crk-input-transition)}.crk-root-rSgdy::placeholder{color:var(--crk-color-text-muted)}.crk-root-rSgdy:hover:not(:disabled):not(:focus){border-color:var(--crk-color-border-hover)}.crk-root-rSgdy:focus{outline:none;border-color:var(--crk-color-primary);box-shadow:var(--crk-shadow-ring)}.crk-root-rSgdy:disabled{opacity:var(--crk-input-disabled-opacity);cursor:not-allowed;background:var(--crk-color-bg-subtle)}.crk-root-rSgdy{width:100%;display:block}.crk-wrapper-GHy8V{display:flex;align-items:center;--crk-input-font-family: var(--crk-font-family);--crk-input-font-size: var(--crk-font-size-md);--crk-input-letter-spacing: var(--crk-letter-spacing-normal);--crk-input-color: var(--crk-color-text);--crk-input-bg: var(--crk-color-bg);--crk-input-border-color: var(--crk-border-color);--crk-input-border-radius: var(--crk-border-radius-md);--crk-input-shadow: var(--crk-shadow-xs);--crk-input-transition: var(--crk-transition-fast);--crk-input-disabled-opacity: .5;box-sizing:border-box;font-family:var(--crk-input-font-family);font-size:var(--crk-input-font-size);letter-spacing:var(--crk-input-letter-spacing);color:var(--crk-input-color);background:var(--crk-input-bg);border:var(--crk-border-width) solid var(--crk-input-border-color);border-radius:var(--crk-input-border-radius);box-shadow:var(--crk-input-shadow);transition:border-color var(--crk-input-transition),box-shadow var(--crk-input-transition),background-color var(--crk-input-transition)}.crk-wrapper-GHy8V::placeholder{color:var(--crk-color-text-muted)}.crk-wrapper-GHy8V:hover:not(:disabled):not(:focus){border-color:var(--crk-color-border-hover)}.crk-wrapper-GHy8V:focus{outline:none;border-color:var(--crk-color-primary);box-shadow:var(--crk-shadow-ring)}.crk-wrapper-GHy8V:disabled{opacity:var(--crk-input-disabled-opacity);cursor:not-allowed;background:var(--crk-color-bg-subtle)}.crk-wrapper-GHy8V{overflow:hidden}.crk-wrapper-GHy8V .crk-root-rSgdy{border:none;box-shadow:none;outline:none;flex:1;min-width:0;font:inherit;color:inherit;padding:0;background:transparent}.crk-wrapper-GHy8V .crk-root-rSgdy:focus{box-shadow:none}.crk-wrapper-GHy8V .crk-root-rSgdy:disabled{opacity:1}.crk-sm-DptM5{font-size:var(--crk-font-size-sm);line-height:var(--crk-control-line-height);padding:var(--crk-control-padding-y-sm) 10px}.crk-md-F4B0G{font-size:var(--crk-font-size-md);line-height:var(--crk-control-line-height);padding:var(--crk-control-padding-y-md) 12px}.crk-lg-pBxwX{font-size:var(--crk-font-size-lg);line-height:var(--crk-control-line-height);padding:var(--crk-control-padding-y-lg) 16px}.crk-error-fucxe{border-color:var(--crk-color-danger)}.crk-error-fucxe:focus{box-shadow:0 0 0 3px var(--crk-color-danger-light)}.crk-prefix-w53Md,.crk-suffix-fcNgR{display:flex;align-items:center;color:var(--crk-color-text-muted);font-size:var(--crk-font-size-sm);flex-shrink:0;-webkit-user-select:none;user-select:none}.crk-prefix-w53Md{padding-left:12px}.crk-suffix-fcNgR{padding-right:12px}.crk-hasPrefix--bqPD .crk-root-rSgdy{padding-left:var(--crk-spacing-xs)}.crk-hasSuffix-zO0nX .crk-root-rSgdy{padding-right:var(--crk-spacing-xs)}@keyframes crk-menuEnter-vJjLV{0%{opacity:0;transform:translateY(-.5em) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}.crk-wrapper-SP2JE{position:relative;display:inline-flex;width:100%;font-size:var(--crk-font-size-md)}.crk-wrapper-SP2JE.crk-sm-DqshL{font-size:var(--crk-font-size-sm)}.crk-wrapper-SP2JE.crk-md-j4AKI{font-size:var(--crk-font-size-md)}.crk-wrapper-SP2JE.crk-lg-24Xd3{font-size:var(--crk-font-size-lg)}.crk-root-Uu9Ah{--crk-input-font-family: var(--crk-font-family);--crk-input-font-size: var(--crk-font-size-md);--crk-input-letter-spacing: var(--crk-letter-spacing-normal);--crk-input-color: var(--crk-color-text);--crk-input-bg: var(--crk-color-bg);--crk-input-border-color: var(--crk-border-color);--crk-input-border-radius: var(--crk-border-radius-md);--crk-input-shadow: var(--crk-shadow-xs);--crk-input-transition: var(--crk-transition-fast);--crk-input-disabled-opacity: .5;box-sizing:border-box;font-family:var(--crk-input-font-family);font-size:var(--crk-input-font-size);letter-spacing:var(--crk-input-letter-spacing);color:var(--crk-input-color);background:var(--crk-input-bg);border:var(--crk-border-width) solid var(--crk-input-border-color);border-radius:var(--crk-input-border-radius);box-shadow:var(--crk-input-shadow);transition:border-color var(--crk-input-transition),box-shadow var(--crk-input-transition),background-color var(--crk-input-transition)}.crk-root-Uu9Ah::placeholder{color:var(--crk-color-text-muted)}.crk-root-Uu9Ah:hover:not(:disabled):not(:focus){border-color:var(--crk-color-border-hover)}.crk-root-Uu9Ah:focus{outline:none;border-color:var(--crk-color-primary);box-shadow:var(--crk-shadow-ring)}.crk-root-Uu9Ah:disabled{opacity:var(--crk-input-disabled-opacity);cursor:not-allowed;background:var(--crk-color-bg-subtle)}.crk-root-Uu9Ah{width:100%;appearance:none;cursor:pointer;font-size:inherit;padding-right:2.5em}.crk-sm-DqshL.crk-root-Uu9Ah{line-height:var(--crk-control-line-height);padding:var(--crk-control-padding-y-sm) 2.5em var(--crk-control-padding-y-sm) .7em}.crk-md-j4AKI.crk-root-Uu9Ah{line-height:var(--crk-control-line-height);padding:var(--crk-control-padding-y-md) 2.5em var(--crk-control-padding-y-md) .85em}.crk-lg-24Xd3.crk-root-Uu9Ah{line-height:var(--crk-control-line-height);padding:var(--crk-control-padding-y-lg) 2.5em var(--crk-control-padding-y-lg) 1em}.crk-error-9oRU6{border-color:var(--crk-color-danger)}.crk-error-9oRU6:focus{box-shadow:0 0 0 3px var(--crk-color-danger-light)}.crk-arrow-WU8ZW{position:absolute;right:.75em;top:50%;transform:translateY(-50%);pointer-events:none;color:var(--crk-color-text-muted);display:flex;width:0;height:0;border-left:.3em solid transparent;border-right:.3em solid transparent;border-top:.35em solid currentColor}.crk-searchableWrapper-7AL4l{display:block}.crk-hiddenSelect-s3DEx{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.crk-searchableTrigger-m-GWV{all:unset;--crk-input-font-family: var(--crk-font-family);--crk-input-font-size: var(--crk-font-size-md);--crk-input-letter-spacing: var(--crk-letter-spacing-normal);--crk-input-color: var(--crk-color-text);--crk-input-bg: var(--crk-color-bg);--crk-input-border-color: var(--crk-border-color);--crk-input-border-radius: var(--crk-border-radius-md);--crk-input-shadow: var(--crk-shadow-xs);--crk-input-transition: var(--crk-transition-fast);--crk-input-disabled-opacity: .5;box-sizing:border-box;font-family:var(--crk-input-font-family);font-size:var(--crk-input-font-size);letter-spacing:var(--crk-input-letter-spacing);color:var(--crk-input-color);background:var(--crk-input-bg);border:var(--crk-border-width) solid var(--crk-input-border-color);border-radius:var(--crk-input-border-radius);box-shadow:var(--crk-input-shadow);transition:border-color var(--crk-input-transition),box-shadow var(--crk-input-transition),background-color var(--crk-input-transition)}.crk-searchableTrigger-m-GWV::placeholder{color:var(--crk-color-text-muted)}.crk-searchableTrigger-m-GWV:hover:not(:disabled):not(:focus){border-color:var(--crk-color-border-hover)}.crk-searchableTrigger-m-GWV:focus{outline:none;border-color:var(--crk-color-primary);box-shadow:var(--crk-shadow-ring)}.crk-searchableTrigger-m-GWV{width:100%;cursor:pointer;font-size:inherit;display:flex;align-items:center;text-align:left;padding-right:2.5em;position:relative}.crk-searchableTrigger-m-GWV:disabled{opacity:var(--crk-input-disabled-opacity);cursor:not-allowed;background:var(--crk-color-bg-subtle)}.crk-triggerOpen-Lo8-j{border-color:var(--crk-color-primary);box-shadow:var(--crk-shadow-ring)}.crk-triggerLabel-5rETZ{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.crk-placeholder-teBBh{color:var(--crk-color-text-muted)}.crk-arrowInline-m-roG{transition:transform var(--crk-transition-fast)}.crk-triggerOpen-Lo8-j .crk-arrowInline-m-roG{transform:translateY(-50%) rotate(180deg)}.crk-disabled-pcSeq{pointer-events:none}.crk-visuallyHidden-2tTD5{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.crk-menu--i-je{background:var(--crk-color-bg);border:var(--crk-border-width) solid var(--crk-color-border);border-radius:var(--crk-border-radius-lg);box-shadow:var(--crk-shadow-lg);box-sizing:border-box;position:absolute;top:calc(100% + .25em);left:0;right:0;z-index:var(--crk-z-dropdown);display:flex;flex-direction:column;padding:.25em;animation:crk-menuEnter-vJjLV .2s cubic-bezier(.34,1.56,.64,1) forwards}.crk-menuItems-VrZnE{max-height:15em;overflow-y:auto;display:flex;flex-direction:column}.crk-item-fU3XI{all:unset;cursor:pointer;display:flex;align-items:center;padding:.5em .75em;font-size:inherit;color:var(--crk-color-text-secondary);transition:all var(--crk-transition-fast)}.crk-item-fU3XI:hover{background-color:var(--crk-color-primary-light);color:var(--crk-color-primary)}.crk-item-fU3XI:focus-visible{outline:none;box-shadow:var(--crk-shadow-ring)}.crk-itemHighlighted-MvR41{background-color:var(--crk-color-primary-light);color:var(--crk-color-primary)}.crk-itemDisabled-KTUO8{opacity:.4;cursor:not-allowed;pointer-events:none}.crk-itemSelected-42-BG{background-color:var(--crk-color-bg-muted);color:var(--crk-color-text);font-weight:500}.crk-itemSelected-42-BG.crk-itemHighlighted-MvR41{background-color:var(--crk-color-primary-light);color:var(--crk-color-primary)}.crk-noResults-uicSW{padding:.5em .75em;color:var(--crk-color-text-muted);font-size:inherit}.crk-multiTrigger-Pd3wJ{--crk-input-font-family: var(--crk-font-family);--crk-input-font-size: var(--crk-font-size-md);--crk-input-letter-spacing: var(--crk-letter-spacing-normal);--crk-input-color: var(--crk-color-text);--crk-input-bg: var(--crk-color-bg);--crk-input-border-color: var(--crk-border-color);--crk-input-border-radius: var(--crk-border-radius-md);--crk-input-shadow: var(--crk-shadow-xs);--crk-input-transition: var(--crk-transition-fast);--crk-input-disabled-opacity: .5;box-sizing:border-box;font-family:var(--crk-input-font-family);font-size:var(--crk-input-font-size);letter-spacing:var(--crk-input-letter-spacing);color:var(--crk-input-color);background:var(--crk-input-bg);border:var(--crk-border-width) solid var(--crk-input-border-color);border-radius:var(--crk-input-border-radius);box-shadow:var(--crk-input-shadow);transition:border-color var(--crk-input-transition),box-shadow var(--crk-input-transition),background-color var(--crk-input-transition)}.crk-multiTrigger-Pd3wJ::placeholder{color:var(--crk-color-text-muted)}.crk-multiTrigger-Pd3wJ:hover:not(:disabled):not(:focus){border-color:var(--crk-color-border-hover)}.crk-multiTrigger-Pd3wJ:focus{outline:none;border-color:var(--crk-color-primary);box-shadow:var(--crk-shadow-ring)}.crk-multiTrigger-Pd3wJ:disabled{opacity:var(--crk-input-disabled-opacity);cursor:not-allowed;background:var(--crk-color-bg-subtle)}.crk-multiTrigger-Pd3wJ{box-sizing:border-box;width:100%;cursor:text;font-size:inherit;display:flex;flex-wrap:wrap;align-items:center;gap:.3em;min-height:2.5em}.crk-multiTrigger-Pd3wJ.crk-sm-DqshL{padding:var(--crk-control-padding-y-sm) 2.5em var(--crk-control-padding-y-sm) .7em}.crk-multiTrigger-Pd3wJ.crk-md-j4AKI{padding:var(--crk-control-padding-y-md) 2.5em var(--crk-control-padding-y-md) .85em}.crk-multiTrigger-Pd3wJ.crk-lg-24Xd3{padding:var(--crk-control-padding-y-lg) 2.5em var(--crk-control-padding-y-lg) 1em}.crk-multiTrigger-Pd3wJ{position:relative}.crk-multiTrigger-Pd3wJ:focus-within{border-color:var(--crk-color-primary);box-shadow:var(--crk-shadow-ring)}.crk-multiTriggerDisabled-9ajge{opacity:var(--crk-input-disabled-opacity);cursor:not-allowed;background:var(--crk-color-bg-subtle)}.crk-chip-TuYUB{display:inline-flex;align-items:center;gap:.25em;padding:.1em .4em;background:var(--crk-color-bg-muted);border-radius:var(--crk-border-radius-sm);font-size:.85em;line-height:1.4;color:var(--crk-color-text);max-width:100%;cursor:default}.crk-chipLabel-H4JWu{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.crk-chipRemove-Lfk0R{all:unset;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;width:1.1em;height:1.1em;border-radius:var(--crk-border-radius-sm);font-size:1em;line-height:1;color:var(--crk-color-text-muted);flex-shrink:0;transition:all var(--crk-transition-fast)}.crk-chipRemove-Lfk0R:hover{color:var(--crk-color-danger);background:var(--crk-color-danger-light)}.crk-multiSearch-OrVeS{all:unset;flex:1 1 3em;min-width:3em;font-size:inherit;line-height:1.4;color:var(--crk-color-text);cursor:text}.crk-multiSearch-OrVeS::placeholder{color:var(--crk-color-text-muted)}.crk-multiSearch-OrVeS:focus{outline:none}.crk-multiSearch-OrVeS:disabled{cursor:not-allowed}.crk-arrowMulti-Nh9Hr{position:absolute;right:.75em;top:50%;transform:translateY(-50%);transition:transform var(--crk-transition-fast)}.crk-triggerOpen-Lo8-j .crk-arrowMulti-Nh9Hr{transform:translateY(-50%) rotate(180deg)}.crk-itemCheck-DPB5A{display:inline-block;width:1em;height:1em;margin-right:.4em;flex-shrink:0}.crk-itemCheck-DPB5A:before{content:"✓";font-size:.85em;color:var(--crk-color-primary)}.crk-root-fvpfd{--crk-slider-track-height: .375rem;--crk-slider-thumb-size: 1.05rem;--crk-slider-track-bg: var(--crk-color-bg-muted);--crk-slider-range-bg: var(--crk-color-primary);--crk-slider-thumb-bg: var(--crk-color-bg);--crk-slider-thumb-border: var(--crk-color-primary);display:flex;align-items:center;width:100%;padding:calc(var(--crk-slider-thumb-size) / 2) 0;touch-action:none}.crk-track-MP1oP{position:relative;flex:1 1 auto;height:var(--crk-slider-track-height);border-radius:var(--crk-border-radius-full);background:var(--crk-slider-track-bg);cursor:pointer}.crk-range-fh4JV{position:absolute;top:0;height:100%;border-radius:var(--crk-border-radius-full);background:var(--crk-slider-range-bg)}.crk-thumb-LKxgd{position:absolute;top:50%;width:var(--crk-slider-thumb-size);height:var(--crk-slider-thumb-size);margin-left:calc(var(--crk-slider-thumb-size) / -2);transform:translateY(-50%);border-radius:var(--crk-border-radius-full);background:var(--crk-slider-thumb-bg);border:2px solid var(--crk-slider-thumb-border);box-shadow:var(--crk-shadow-sm);cursor:grab;transition:box-shadow var(--crk-transition-fast)}.crk-thumb-LKxgd:active{cursor:grabbing}.crk-thumb-LKxgd:hover{box-shadow:var(--crk-shadow-md)}.crk-thumb-LKxgd:focus-visible{outline:none;box-shadow:var(--crk-shadow-ring)}.crk-disabled-n8jtF{--crk-slider-range-bg: var(--crk-color-text-muted);--crk-slider-thumb-border: var(--crk-color-text-muted);opacity:.6}.crk-disabled-n8jtF .crk-track-MP1oP,.crk-disabled-n8jtF .crk-thumb-LKxgd{cursor:not-allowed}.crk-root-aUI4c{--crk-input-font-family: var(--crk-font-family);--crk-input-font-size: var(--crk-font-size-md);--crk-input-letter-spacing: var(--crk-letter-spacing-normal);--crk-input-color: var(--crk-color-text);--crk-input-bg: var(--crk-color-bg);--crk-input-border-color: var(--crk-border-color);--crk-input-border-radius: var(--crk-border-radius-md);--crk-input-shadow: var(--crk-shadow-xs);--crk-input-transition: var(--crk-transition-fast);--crk-input-disabled-opacity: .5;box-sizing:border-box;font-family:var(--crk-input-font-family);font-size:var(--crk-input-font-size);letter-spacing:var(--crk-input-letter-spacing);color:var(--crk-input-color);background:var(--crk-input-bg);border:var(--crk-border-width) solid var(--crk-input-border-color);border-radius:var(--crk-input-border-radius);box-shadow:var(--crk-input-shadow);transition:border-color var(--crk-input-transition),box-shadow var(--crk-input-transition),background-color var(--crk-input-transition)}.crk-root-aUI4c::placeholder{color:var(--crk-color-text-muted)}.crk-root-aUI4c:hover:not(:disabled):not(:focus){border-color:var(--crk-color-border-hover)}.crk-root-aUI4c:focus{outline:none;border-color:var(--crk-color-primary);box-shadow:var(--crk-shadow-ring)}.crk-root-aUI4c:disabled{opacity:var(--crk-input-disabled-opacity);cursor:not-allowed;background:var(--crk-color-bg-subtle)}.crk-root-aUI4c{display:inline-flex;align-items:stretch;width:100%;padding:0;overflow:hidden}.crk-root-aUI4c:focus-within{border-color:var(--crk-color-primary);box-shadow:var(--crk-shadow-ring)}.crk-sm-t2zR2 .crk-input-82UG6{padding:var(--crk-control-padding-y-sm) var(--crk-control-padding-x-sm);font-size:var(--crk-font-size-sm)}.crk-md-v4bFw .crk-input-82UG6{padding:var(--crk-control-padding-y-md) var(--crk-control-padding-x-md);font-size:var(--crk-font-size-md)}.crk-lg-mr8pf .crk-input-82UG6{padding:var(--crk-control-padding-y-lg) var(--crk-control-padding-x-lg);font-size:var(--crk-font-size-lg)}.crk-input-82UG6{flex:1 1 auto;min-width:0;border:none;background:transparent;color:inherit;font-family:inherit;line-height:var(--crk-control-line-height);outline:none}.crk-input-82UG6:disabled{cursor:not-allowed}.crk-controls-0vTT8{display:flex;flex-direction:column;flex-shrink:0;border-left:var(--crk-border-width) solid var(--crk-color-border)}.crk-increment-nc4uY,.crk-decrement-076EO{display:flex;align-items:center;justify-content:center;flex:1 1 50%;width:1.75rem;padding:0;border:none;background:var(--crk-color-bg-subtle);color:var(--crk-color-text-secondary);cursor:pointer;transition:background-color var(--crk-transition-fast),color var(--crk-transition-fast)}.crk-increment-nc4uY svg,.crk-decrement-076EO svg{width:.625rem;height:.4rem}.crk-increment-nc4uY:hover:not(:disabled),.crk-decrement-076EO:hover:not(:disabled){background:var(--crk-color-bg-muted);color:var(--crk-color-text)}.crk-increment-nc4uY:disabled,.crk-decrement-076EO:disabled{opacity:.4;cursor:not-allowed}.crk-increment-nc4uY{border-bottom:var(--crk-border-width) solid var(--crk-color-border)}.crk-error-1BkEa{border-color:var(--crk-color-danger)}.crk-error-1BkEa:focus-within{border-color:var(--crk-color-danger);box-shadow:0 0 0 3px var(--crk-color-danger-light)}.crk-disabled-mk7uC{opacity:var(--crk-input-disabled-opacity, .5);background:var(--crk-color-bg-subtle)}.crk-root-ZBCoP{--crk-input-font-family: var(--crk-font-family);--crk-input-font-size: var(--crk-font-size-md);--crk-input-letter-spacing: var(--crk-letter-spacing-normal);--crk-input-color: var(--crk-color-text);--crk-input-bg: var(--crk-color-bg);--crk-input-border-color: var(--crk-border-color);--crk-input-border-radius: var(--crk-border-radius-md);--crk-input-shadow: var(--crk-shadow-xs);--crk-input-transition: var(--crk-transition-fast);--crk-input-disabled-opacity: .5;box-sizing:border-box;font-family:var(--crk-input-font-family);font-size:var(--crk-input-font-size);letter-spacing:var(--crk-input-letter-spacing);color:var(--crk-input-color);background:var(--crk-input-bg);border:var(--crk-border-width) solid var(--crk-input-border-color);border-radius:var(--crk-input-border-radius);box-shadow:var(--crk-input-shadow);transition:border-color var(--crk-input-transition),box-shadow var(--crk-input-transition),background-color var(--crk-input-transition)}.crk-root-ZBCoP::placeholder{color:var(--crk-color-text-muted)}.crk-root-ZBCoP:hover:not(:disabled):not(:focus){border-color:var(--crk-color-border-hover)}.crk-root-ZBCoP:focus{outline:none;border-color:var(--crk-color-primary);box-shadow:var(--crk-shadow-ring)}.crk-root-ZBCoP:disabled{opacity:var(--crk-input-disabled-opacity);cursor:not-allowed;background:var(--crk-color-bg-subtle)}.crk-root-ZBCoP{position:relative;display:inline-flex;align-items:center;width:100%;padding:0;overflow:hidden}.crk-root-ZBCoP:focus-within{border-color:var(--crk-color-primary);box-shadow:var(--crk-shadow-ring)}.crk-sm-7EeFF .crk-input-62G21{padding:var(--crk-control-padding-y-sm) var(--crk-control-padding-x-sm);font-size:var(--crk-font-size-sm)}.crk-md-OVdqx .crk-input-62G21{padding:var(--crk-control-padding-y-md) var(--crk-control-padding-x-md);font-size:var(--crk-font-size-md)}.crk-lg-a9KsJ .crk-input-62G21{padding:var(--crk-control-padding-y-lg) var(--crk-control-padding-x-lg);font-size:var(--crk-font-size-lg)}.crk-input-62G21{flex:1 1 auto;min-width:0;border:none;background:transparent;color:inherit;font-family:inherit;line-height:var(--crk-control-line-height);cursor:pointer;outline:none}.crk-input-62G21:disabled{cursor:not-allowed}.crk-icon-jS307{display:inline-flex;align-items:center;justify-content:center;width:2.25rem;align-self:stretch;color:var(--crk-color-text-muted);background:transparent;border:none;cursor:pointer}.crk-icon-jS307 svg{width:1.1rem;height:1.1rem}.crk-icon-jS307:hover:not(:disabled){color:var(--crk-color-text)}.crk-error-c4lUO{border-color:var(--crk-color-danger)}.crk-disabled-3PiA5{opacity:var(--crk-input-disabled-opacity, .5);background:var(--crk-color-bg-subtle)}.crk-popover-x1-UT{z-index:var(--crk-z-floating);width:17rem;padding:.75rem;background:var(--crk-color-bg);border:var(--crk-border-width) solid var(--crk-color-border);border-radius:var(--crk-border-radius-lg);box-shadow:var(--crk-shadow-lg);font-family:var(--crk-font-family)}.crk-popover-x1-UT:not(.crk-portalled-iPe0Y){position:absolute;top:calc(100% + 4px);left:0}.crk-header-KmYtH{display:flex;align-items:center;justify-content:space-between;margin-bottom:.5rem}.crk-monthLabel-69Pwi{font-size:var(--crk-font-size-md);font-weight:var(--crk-font-weight-semibold);color:var(--crk-color-text)}.crk-nav-uKYXN{display:inline-flex;align-items:center;justify-content:center;width:1.75rem;height:1.75rem;color:var(--crk-color-text-secondary);background:transparent;border:none;border-radius:var(--crk-border-radius-sm);cursor:pointer;transition:background-color var(--crk-transition-fast)}.crk-nav-uKYXN svg{width:.75rem;height:.75rem}.crk-nav-uKYXN:hover{background:var(--crk-color-bg-muted);color:var(--crk-color-text)}.crk-nav-uKYXN:focus-visible{outline:none;box-shadow:var(--crk-shadow-ring)}.crk-weekdays--RSzS,.crk-grid-tf4tT{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}.crk-weekday-Zc1su{display:flex;align-items:center;justify-content:center;height:1.75rem;font-size:var(--crk-font-size-xs);font-weight:var(--crk-font-weight-medium);color:var(--crk-color-text-muted)}.crk-day-5SuBX{display:flex;align-items:center;justify-content:center;height:2rem;font-size:var(--crk-font-size-sm);color:var(--crk-color-text);background:transparent;border:none;border-radius:var(--crk-border-radius-sm);cursor:pointer;transition:background-color var(--crk-transition-fast),color var(--crk-transition-fast)}.crk-day-5SuBX:hover:not([aria-disabled=true]){background:var(--crk-color-bg-muted)}.crk-day-5SuBX:focus-visible{outline:none;box-shadow:var(--crk-shadow-ring)}.crk-day-5SuBX[aria-disabled=true]{color:var(--crk-color-text-muted);opacity:.45;cursor:not-allowed}.crk-dayOutside-q3Phh{color:var(--crk-color-text-muted)}.crk-dayToday-7rRns{font-weight:var(--crk-font-weight-bold);box-shadow:inset 0 0 0 1px var(--crk-color-border-hover)}.crk-daySelected-a3XL4{color:#fff;background:var(--crk-color-primary)}.crk-daySelected-a3XL4:hover:not([aria-disabled=true]){background:var(--crk-color-primary-hover)}.crk-root-61cKD{display:inline-flex;align-items:center;gap:.4em;cursor:pointer;-webkit-user-select:none;user-select:none;font-size:var(--crk-font-size-md)}.crk-input-bAjPU{appearance:none;width:1.15em;height:1.15em;border:.1em solid var(--crk-border-color);border-radius:.2em;background:#fff;cursor:pointer;transition:all var(--crk-transition-fast);flex-shrink:0;position:relative;display:grid;place-content:center}.crk-input-bAjPU:after{content:"";display:block;width:.3em;height:.55em;border:solid transparent;border-width:0 .13em .13em 0;transform:rotate(45deg);margin-top:-.1em}.crk-input-bAjPU:checked{background-color:var(--crk-color-primary);border-color:var(--crk-color-primary)}.crk-input-bAjPU:checked:after{border-color:#fff}.crk-input-bAjPU:hover:not(:disabled){border-color:var(--crk-color-border-hover)}.crk-input-bAjPU:focus-visible{outline:none;box-shadow:var(--crk-shadow-ring)}.crk-input-bAjPU:disabled{opacity:.5;cursor:not-allowed}.crk-switchInput-Ichse{width:2em;height:1.15em;border-radius:999px;display:inline-block;place-content:initial}.crk-switchInput-Ichse:after{content:"";position:absolute;top:50%;left:.15em;width:.85em;height:.85em;border:none;border-radius:50%;background:var(--crk-border-color);transform:translateY(-50%);transition:transform var(--crk-transition-fast),background-color var(--crk-transition-fast);margin:0}.crk-switchInput-Ichse:checked:after{background:#fff;border-color:transparent;transform:translateY(-50%) translate(.85em)}.crk-label-W9IeS{color:var(--crk-color-text-secondary);line-height:1;cursor:pointer}.crk-indeterminate-mLarv .crk-input-bAjPU{background-color:var(--crk-color-primary);border-color:var(--crk-color-primary)}.crk-indeterminate-mLarv .crk-input-bAjPU:after{width:.55em;height:0;border:none;border-top:.13em solid white;border-radius:.05em;transform:none;margin-top:0}.crk-group-3jaV7{display:flex;font-size:var(--crk-font-size-md)}.crk-vertical--i2tD{flex-direction:column;gap:var(--crk-spacing-sm)}.crk-horizontal-4qzrj{flex-direction:row;flex-wrap:wrap;gap:var(--crk-spacing-sm)}.crk-chipsGroup-jyDEd{gap:var(--crk-spacing-xs)}.crk-chip-NYeqm{--crk-chip-check-width: .75em;--crk-chip-check-gap: .15em;--crk-chip-pad-x: 1em;--crk-chip-check-inset: calc((var(--crk-chip-check-width) + var(--crk-chip-check-gap)) / 2);all:unset;box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;padding:.4em var(--crk-chip-pad-x);font-size:inherit;line-height:1.3;color:var(--crk-color-text-secondary);background:var(--crk-color-bg-subtle);border:var(--crk-border-width) solid var(--crk-color-border);border-radius:var(--crk-border-radius-full);cursor:pointer;-webkit-user-select:none;user-select:none;transition:all var(--crk-transition-fast)}.crk-chip-NYeqm:hover:not(:disabled){border-color:var(--crk-color-border-hover);color:var(--crk-color-text)}.crk-chip-NYeqm:focus-visible{outline:none;box-shadow:var(--crk-shadow-ring)}.crk-chip-NYeqm:disabled{opacity:.5;cursor:not-allowed}.crk-chipPill-DfnpS{border-radius:var(--crk-border-radius-full)}.crk-chipRounded-oi-hI{border-radius:var(--crk-border-radius-md)}.crk-chipSquare-ZcbQB{border-radius:var(--crk-border-radius-sm)}.crk-chipCheck-4nqaQ{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:0;margin-right:0;opacity:0;overflow:hidden;transition:width var(--crk-transition-fast),margin-right var(--crk-transition-fast),opacity var(--crk-transition-fast)}.crk-chipCheck-4nqaQ:before{content:"✓";font-size:.85em;line-height:1}.crk-chipCheckVisible-nGulJ{width:var(--crk-chip-check-width);margin-right:var(--crk-chip-check-gap);opacity:1}.crk-chipChecked-4h2bc{padding-left:calc(var(--crk-chip-pad-x) - var(--crk-chip-check-inset));padding-right:calc(var(--crk-chip-pad-x) - var(--crk-chip-check-inset))}.crk-chipSelected-qbOpf{color:var(--crk-color-primary);background:var(--crk-color-primary-light);border-color:var(--crk-color-primary)}.crk-chipSelected-qbOpf:hover:not(:disabled){color:var(--crk-color-primary-hover);border-color:var(--crk-color-primary-hover)}.crk-error-phPRL.crk-chipsGroup-jyDEd .crk-chip-NYeqm{border-color:var(--crk-color-danger)}.crk-group-NNwCD{display:flex;flex-direction:column;gap:var(--crk-spacing-sm);outline:none}.crk-root-7fGik{display:inline-flex;align-items:center;gap:var(--crk-spacing-sm);cursor:pointer;-webkit-user-select:none;user-select:none}.crk-input-43PQW{appearance:none;width:18px;height:18px;border:1.5px solid var(--crk-border-color);border-radius:50%;background:#fff;cursor:pointer;transition:all var(--crk-transition-fast);flex-shrink:0;display:grid;place-content:center}.crk-input-43PQW:after{content:"";width:8px;height:8px;border-radius:50%;background-color:var(--crk-color-primary);transition:transform var(--crk-transition-spring);transform:scale(0)}.crk-input-43PQW:checked{border-color:var(--crk-color-primary)}.crk-input-43PQW:checked:after{transform:scale(1)}.crk-input-43PQW:hover:not(:disabled){border-color:var(--crk-color-border-hover)}.crk-input-43PQW:focus-visible{outline:none;box-shadow:var(--crk-shadow-ring)}.crk-input-43PQW:disabled{opacity:.5;cursor:not-allowed}.crk-label-aW30x{font-size:var(--crk-font-size-md);color:var(--crk-color-text-secondary);cursor:pointer}.crk-root-IGgdn{--crk-textarea-min-height: 80px;--crk-input-font-family: var(--crk-font-family);--crk-input-font-size: var(--crk-font-size-md);--crk-input-letter-spacing: var(--crk-letter-spacing-normal);--crk-input-color: var(--crk-color-text);--crk-input-bg: var(--crk-color-bg);--crk-input-border-color: var(--crk-border-color);--crk-input-border-radius: var(--crk-border-radius-md);--crk-input-shadow: var(--crk-shadow-xs);--crk-input-transition: var(--crk-transition-fast);--crk-input-disabled-opacity: .5;box-sizing:border-box;font-family:var(--crk-input-font-family);font-size:var(--crk-input-font-size);letter-spacing:var(--crk-input-letter-spacing);color:var(--crk-input-color);background:var(--crk-input-bg);border:var(--crk-border-width) solid var(--crk-input-border-color);border-radius:var(--crk-input-border-radius);box-shadow:var(--crk-input-shadow);transition:border-color var(--crk-input-transition),box-shadow var(--crk-input-transition),background-color var(--crk-input-transition)}.crk-root-IGgdn::placeholder{color:var(--crk-color-text-muted)}.crk-root-IGgdn:hover:not(:disabled):not(:focus){border-color:var(--crk-color-border-hover)}.crk-root-IGgdn:focus{outline:none;border-color:var(--crk-color-primary);box-shadow:var(--crk-shadow-ring)}.crk-root-IGgdn:disabled{opacity:var(--crk-input-disabled-opacity);cursor:not-allowed;background:var(--crk-color-bg-subtle)}.crk-root-IGgdn{width:100%;display:block;min-height:var(--crk-textarea-min-height)}.crk-sm-N-5I2{padding:8px 10px;font-size:var(--crk-font-size-sm)}.crk-md-bbyFl{padding:8px 12px;font-size:var(--crk-font-size-md)}.crk-lg-Pd-Iq{padding:10px 16px;font-size:var(--crk-font-size-lg)}.crk-error-fyu3i{border-color:var(--crk-color-danger)}.crk-error-fyu3i:focus{box-shadow:0 0 0 3px var(--crk-color-danger-light)}.crk-resizeNone-SmNT4{resize:none}.crk-resizeVertical-oi8vP{resize:vertical}.crk-resizeHorizontal-riMLL{resize:horizontal}.crk-resizeBoth-NYSh4{resize:both}.crk-autoExpand-JWone{resize:none;overflow-y:hidden}.crk-root-uMSq0{position:relative;width:100%;font-family:var(--crk-font-family);font-size:var(--crk-font-size-sm);color:var(--crk-color-text);letter-spacing:var(--crk-letter-spacing-normal)}.crk-canvas-zhFr0{position:relative;width:100%}.crk-svg-waPLB{display:block;overflow:visible}.crk-gridLine-K2Gx9{stroke:var(--crk-chart-grid);stroke-width:1;shape-rendering:crispEdges;opacity:.7}.crk-axis-Zum8-{pointer-events:none}.crk-axisLabel-Ilv3u{fill:var(--crk-chart-axis);font-size:var(--crk-font-size-xs);font-family:inherit}.crk-cursorLine-iNHim{stroke:var(--crk-color-text-muted);stroke-width:1;stroke-dasharray:3 3;pointer-events:none}.crk-linePath-E4eYA{fill:none;stroke-width:2;stroke-linejoin:round;stroke-linecap:round}.crk-areaPath-ZwMc6{stroke:none;opacity:.18}.crk-point-DTAoa{stroke:var(--crk-color-bg);stroke-width:2}.crk-bar-9sYbq{transition:opacity var(--crk-transition-fast)}.crk-bar-9sYbq:hover{opacity:.85}.crk-barLabelInside-dlQh5{fill:var(--crk-chart-label-inside);font-weight:var(--crk-font-weight-medium)}.crk-activeBar-FJhPJ{opacity:.78}.crk-interactionLayer-dHNAG{fill:transparent;cursor:crosshair}.crk-legend-JL6YI{display:flex;flex-wrap:wrap;gap:var(--crk-spacing-md);padding-top:var(--crk-spacing-md);font-size:var(--crk-font-size-sm);color:var(--crk-color-text-secondary)}.crk-legendItem-rcdvO{display:inline-flex;align-items:center;gap:var(--crk-spacing-xs)}.crk-legendSwatch-eJBsF{display:inline-block;width:.625rem;height:.625rem;border-radius:var(--crk-border-radius-sm);flex-shrink:0}.crk-legendIcon-6gzcO{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;line-height:0}.crk-legendIcon-6gzcO svg{width:1em;height:1em;display:block}.crk-legendLabel-C-eu3{color:var(--crk-color-text)}.crk-tooltip-m55-N{position:absolute;pointer-events:none;background:var(--crk-chart-tooltip-bg);color:var(--crk-chart-tooltip-text);padding:var(--crk-spacing-sm) var(--crk-spacing-md);border-radius:var(--crk-border-radius-md);box-shadow:var(--crk-shadow-md);font-size:var(--crk-font-size-xs);line-height:var(--crk-line-height-normal);z-index:1}.crk-tooltipTitle-0EfoX{font-weight:var(--crk-font-weight-semibold);margin-bottom:var(--crk-spacing-xs)}.crk-tooltipRows-MC0wM{display:flex;flex-direction:column;gap:2px}.crk-tooltipRow-ZQomr{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:var(--crk-spacing-xs)}.crk-tooltipLabel-s4OKX{opacity:.85}.crk-tooltipValue-iwj1s{font-variant-numeric:tabular-nums;font-weight:var(--crk-font-weight-medium)}.crk-empty-aa4vk{display:flex;align-items:center;justify-content:center;height:100%;width:100%;color:var(--crk-color-text-muted);font-size:var(--crk-font-size-sm)}.crk-sparkline-3-eRc{display:inline-block;vertical-align:middle;line-height:0}.crk-tradingHeader-Pb9wS{font-family:var(--crk-font-family);font-size:var(--crk-font-size-sm);color:var(--crk-color-text);letter-spacing:var(--crk-letter-spacing-normal)}
4
+
5
+ }
package/llms.txt CHANGED
@@ -23,6 +23,21 @@ Override CSS custom properties on `:root` to theme:
23
23
 
24
24
  All components forward `className` and `style`. Most also accept a `classes` object to override internal element classNames (see `*Classes` types per component).
25
25
 
26
+ ### Making your overrides always win (CSS ordering)
27
+
28
+ `className` / `classes.*` overrides are plain CSS classes, so they only beat the toolkit's built-in class if your stylesheet is inserted **after** the toolkit's — which depends on your bundler and isn't guaranteed. Two ways to make overrides deterministic:
29
+
30
+ 1. **Import the layered stylesheet** (recommended). The package ships a twin wrapped in a CSS cascade layer:
31
+ ```ts
32
+ import '@overdoser/react-toolkit/theme.layered.css'; // instead of theme.css
33
+ ```
34
+ Everything the toolkit ships lives in the `crk` layer, so any of your own *unlayered* rules (including `classes.*`) always win, regardless of import order. Caveat: unlayered rules in your app (e.g. a global CSS reset on bare element selectors) will also win over the toolkit's base styles — if you use an aggressive reset, put it in its own earlier layer.
35
+ 2. **Layer it yourself at import** (if you import CSS from a `.css` entry): `@import '@overdoser/react-toolkit/theme.css' layer(crk);` as the first line. Same effect as option 1.
36
+
37
+ If you don't need guaranteed precedence, keep importing `theme.css` and simply ensure the toolkit CSS is imported before your own overrides.
38
+
39
+ `theme.css` and `theme.layered.css` have identical content (same rules, same hashed class names, same `--crk-*` tokens) — the layered twin just wraps everything in `@layer crk`. Import exactly ONE of them, never both. `--crk-*` token theming on `:root` works the same in either.
40
+
26
41
  ## Components
27
42
 
28
43
  ### Button
@@ -52,6 +67,7 @@ Element: `<a>` (forwards ref, accepts all native anchor props).
52
67
  Props:
53
68
  - `variant?: 'default' | 'muted' | 'danger'` — default `'default'`
54
69
  - `external?: boolean` — default `false`. When `true`, sets `target="_blank" rel="noopener noreferrer"` and adds a visually-hidden " (opens in a new tab)" suffix.
70
+ - `hideExternalIcon?: boolean` — default `false`. When a link opens in a new tab (via `external`, or a manual `target="_blank"`) an inline ↗ icon is rendered to the right by default; set this to hide it. The screen-reader suffix is kept regardless.
55
71
 
56
72
  Example:
57
73
  ```tsx
@@ -242,7 +258,8 @@ Props:
242
258
  - `trigger: ReactNode` — required. By default, wrapped in an internal `<button>` (so a plain `'Help'` string or an icon is fine).
243
259
  - `asChild?: boolean` — default `false`. When `true` and `trigger` is a single React element, the trigger is rendered **as-is** with click/aria/ref merged into it via `cloneElement` (no wrapping `<button>`). Use this when you want to pass your own interactive element (e.g. a `<Button>`) without producing `<button>` nested inside `<button>` (a hydration error).
244
260
  - `content: ReactNode` — required. Rendered inside an `[role="dialog"]` panel when open.
245
- - `position?: 'top' | 'bottom' | 'left' | 'right'` — default `'bottom'`
261
+ - `position?: 'top' | 'bottom' | 'left' | 'right'` — default `'bottom'`. The *requested* side; honored whenever it fits.
262
+ - `autoPosition?: boolean` — default `true`. Keeps the panel inside the viewport: flips to the opposite side when the requested one would overflow, and shifts along the cross-axis near a screen edge. Set `false` to pin strictly to `position`.
246
263
  - `open?: boolean` — controlled.
247
264
  - `onOpenChange?: (open: boolean) => void`
248
265
  - `classes?: Partial<PopoverClasses>` where `PopoverClasses = { root, trigger, popover }`
@@ -300,6 +317,278 @@ Example:
300
317
  </Modal>
301
318
  ```
302
319
 
320
+ ### Draggable
321
+ Import: `import { Draggable } from '@overdoser/react-toolkit'`
322
+ Element: a `<div>` (forwards ref) that wraps arbitrary children. Free-move container — position is a `translate(x, y)` offset from the element's natural layout position, so it stays in flow until dragged.
323
+
324
+ Compound: `Draggable.Handle` — place inside to restrict the grab area (e.g. a title bar). Without a handle, the whole surface drags. A focused handle is also keyboard-movable (arrow keys).
325
+
326
+ `DraggableProps` (extends native `div` props except `onDrag`):
327
+ - `defaultPosition?: { x: number; y: number }` — uncontrolled initial offset. Default `{ x: 0, y: 0 }`.
328
+ - `position?: { x: number; y: number }` — controlled offset; pair with `onDrag` to update it.
329
+ - `axis?: 'both' | 'x' | 'y'` — default `'both'`.
330
+ - `bounds?: 'viewport' | 'parent' | 'none'` — default `'viewport'`. Clamps movement to the viewport / parent element, or unconstrained.
331
+ - `keyboardStep?: number` — px per arrow-key press on a focused handle. Default `10`.
332
+ - `disabled?: boolean` — default `false`.
333
+ - `onDragStart?(pos)`, `onDrag?(pos)`, `onDragEnd?(pos)` — each receives `{ x, y }`.
334
+ - `classes?: Partial<DraggableClasses>` where `DraggableClasses = { root, handle }`.
335
+
336
+ Example:
337
+ ```tsx
338
+ <Draggable defaultPosition={{ x: 40, y: 40 }} bounds="viewport">
339
+ <Draggable.Handle>⠿ Drag me</Draggable.Handle>
340
+ <div>Any content here</div>
341
+ </Draggable>
342
+ ```
343
+
344
+ ### Toast (ToastProvider + toast + useToast)
345
+ Import: `import { ToastProvider, toast, useToast } from '@overdoser/react-toolkit'`
346
+
347
+ Imperative notification system backed by a global store. Mount `ToastProvider` **once** (it renders a portal at `document.body` and is the only thing that draws toasts — do NOT render toast elements yourself). Then trigger toasts either way:
348
+ - **Standalone `toast(options)`** — importable, no hook/context needed (works from event handlers, utilities, outside React). Also `toast.dismiss(id)` and `toast.dismissAll()`.
349
+ - **`useToast()`** — returns `{ toast, dismiss, dismissAll }` (the same functions) for callers who prefer a hook. It does NOT require being under the provider and never throws.
350
+
351
+ If `toast()` fires while no `ToastProvider` is mounted, it warns (dev) and renders nothing.
352
+
353
+ `ToastProviderProps`:
354
+ - `children: ReactNode` — required.
355
+ - `position?: 'top-left' | 'top-center' | 'top-right' | 'bottom-left' | 'bottom-center' | 'bottom-right'` — default `'top-right'`.
356
+ - `duration?: number` — default auto-dismiss ms. Default `5000`.
357
+ - `max?: number` — max simultaneously-visible toasts (older dropped). Default `5`.
358
+ - `classes?: Partial<ToastClasses>` where `ToastClasses = { viewport, toast, icon, content, title, description, close }`.
359
+
360
+ `toast(options: ToastOptions): string` — standalone; show a toast, returns its id. Methods: `toast.dismiss(id)`, `toast.dismissAll()`.
361
+
362
+ `useToast(): ToastApi` — `{ toast, dismiss, dismissAll }` (identical functions; provided for hook-style ergonomics).
363
+
364
+ `ToastOptions`:
365
+ - `title?: ReactNode`
366
+ - `description?: ReactNode`
367
+ - `variant?: 'neutral' | 'info' | 'success' | 'warning' | 'danger'` — default `'neutral'`.
368
+ - `duration?: number` — override the provider default; `0` or `Infinity` = persist until dismissed.
369
+
370
+ Behavior: auto-dismiss pauses while hovered and resumes on leave. `danger`/`warning` use `role="alert"` (assertive); others use `role="status"` (polite).
371
+
372
+ Example:
373
+ ```tsx
374
+ import { ToastProvider, toast } from '@overdoser/react-toolkit';
375
+
376
+ function App() {
377
+ return <ToastProvider position="bottom-right"><Page /></ToastProvider>;
378
+ }
379
+ function Page() {
380
+ // No hook needed — call toast() directly.
381
+ return <Button onClick={() => toast({ variant: 'success', title: 'Saved' })}>Save</Button>;
382
+ }
383
+ ```
384
+
385
+ ### Tabs (Tabs.List / Tabs.Tab / Tabs.Panel)
386
+ Import: `import { Tabs } from '@overdoser/react-toolkit'`
387
+ Element: a `<div>` (forwards ref) wrapping a `role="tablist"` and panels.
388
+
389
+ Compound: `Tabs.List`, `Tabs.Tab` (needs `value`), `Tabs.Panel` (needs `value`). A tab and its panel are linked by matching `value`. Keyboard: arrow keys (orientation-aware) + Home/End move and activate; roving tabindex; automatic activation on focus.
390
+
391
+ `TabsProps`:
392
+ - `value?: string` — controlled active tab.
393
+ - `defaultValue?: string` — uncontrolled initial active tab.
394
+ - `onValueChange?: (value: string) => void`
395
+ - `orientation?: 'horizontal' | 'vertical'` — default `'horizontal'`.
396
+ - `variant?: 'line' | 'solid' | 'pill'` — default `'line'`.
397
+ - `size?: 'sm' | 'md' | 'lg'` — default `'md'`.
398
+ - `classes?: Partial<TabsClasses>` where `TabsClasses = { root, list, tab, panel }`.
399
+
400
+ `Tabs.Tab` props: `value: string` (required), `disabled?: boolean`, plus native button props.
401
+ `Tabs.Panel` props: `value: string` (required), `keepMounted?: boolean` (default `false` — keep inactive panels mounted but hidden), plus native div props.
402
+
403
+ Example:
404
+ ```tsx
405
+ <Tabs defaultValue="overview" variant="pill">
406
+ <Tabs.List aria-label="Sections">
407
+ <Tabs.Tab value="overview">Overview</Tabs.Tab>
408
+ <Tabs.Tab value="activity">Activity</Tabs.Tab>
409
+ </Tabs.List>
410
+ <Tabs.Panel value="overview">Overview content</Tabs.Panel>
411
+ <Tabs.Panel value="activity">Activity content</Tabs.Panel>
412
+ </Tabs>
413
+ ```
414
+
415
+ ### Alert
416
+ Import: `import { Alert } from '@overdoser/react-toolkit'`
417
+ Element: a `<div role="alert">` (forwards ref). Inline, persistent status message.
418
+
419
+ `AlertProps` (extends native `div` props, omits `title`):
420
+ - `variant?: 'info' | 'success' | 'warning' | 'danger'` — default `'info'`.
421
+ - `title?: ReactNode` — optional bold heading.
422
+ - `icon?: ReactNode | boolean` — default `true` (variant icon). Pass a node to override, `false` to hide.
423
+ - `onClose?: () => void` — when set, renders a dismiss button.
424
+ - `closeLabel?: string` — default `'Dismiss'`.
425
+ - `classes?: Partial<AlertClasses>` where `AlertClasses = { root, icon, content, title, message, close }`.
426
+ - children = message body.
427
+
428
+ Example:
429
+ ```tsx
430
+ <Alert variant="success" title="Saved" onClose={() => setShown(false)}>Your changes were saved.</Alert>
431
+ ```
432
+
433
+ ### Badge
434
+ Import: `import { Badge } from '@overdoser/react-toolkit'`
435
+ Element: a `<span>` (forwards ref). Small inline status pill.
436
+
437
+ `BadgeProps` (extends native `span` props):
438
+ - `variant?: 'neutral' | 'primary' | 'success' | 'warning' | 'danger'` — default `'neutral'`.
439
+ - `appearance?: 'soft' | 'solid' | 'outline'` — default `'soft'`.
440
+ - `size?: 'sm' | 'md' | 'lg'` — default `'md'`.
441
+ - `dot?: boolean` — leading status dot. Default `false`.
442
+ - `classes?: Partial<BadgeClasses>` where `BadgeClasses = { root, dot }`.
443
+
444
+ Example:
445
+ ```tsx
446
+ <Badge variant="success" dot>Active</Badge>
447
+ <Badge variant="primary" appearance="solid">3</Badge>
448
+ ```
449
+
450
+ ### Spinner
451
+ Import: `import { Spinner } from '@overdoser/react-toolkit'`
452
+ Element: a `<span role="status">` (forwards ref). Indeterminate loading spinner; inherits `currentColor`.
453
+
454
+ `SpinnerProps` (extends native `span` props):
455
+ - `size?: 'sm' | 'md' | 'lg'` — default `'md'`.
456
+ - `color?: string` — overrides `currentColor`.
457
+ - `label?: string` — visually-hidden a11y label. Default `'Loading'`; pass `''` to omit when an adjacent element already labels the busy state.
458
+ - `classes?: Partial<SpinnerClasses>` where `SpinnerClasses = { root, circle, label }`.
459
+
460
+ Example:
461
+ ```tsx
462
+ <Spinner size="lg" />
463
+ ```
464
+
465
+ ### Skeleton
466
+ Import: `import { Skeleton } from '@overdoser/react-toolkit'`
467
+ Element: a `<div aria-hidden>` (forwards ref). Decorative loading placeholder.
468
+
469
+ `SkeletonProps` (extends native `div` props, omits `children`):
470
+ - `variant?: 'text' | 'circle' | 'rect'` — default `'text'`.
471
+ - `width?: number | string` — number → px. Defaults to `100%`.
472
+ - `height?: number | string` — number → px. Defaults per variant.
473
+ - `animation?: 'pulse' | 'wave' | 'none'` — default `'pulse'`.
474
+ - `lines?: number` — for `variant="text"`, render N stacked bars (last is shorter). Default `1`.
475
+ - `classes?: Partial<SkeletonClasses>` where `SkeletonClasses = { root, line }`.
476
+
477
+ Example:
478
+ ```tsx
479
+ <Skeleton variant="text" lines={3} />
480
+ <Skeleton variant="circle" width={40} height={40} />
481
+ ```
482
+
483
+ ### Drawer (Drawer.Header / Drawer.Body / Drawer.Footer)
484
+ Import: `import { Drawer } from '@overdoser/react-toolkit'`
485
+ Off-canvas panel sliding from a screen edge. Portal at `document.body`, focus trap, body scroll lock, Escape/backdrop close. Same family as `Modal` but anchored to a side.
486
+
487
+ `DrawerProps`:
488
+ - `open: boolean` — required.
489
+ - `onClose: () => void` — required (backdrop, Escape, header button).
490
+ - `side?: 'left' | 'right' | 'top' | 'bottom'` — default `'right'`. Left/right span full height (partial width); top/bottom span full width (partial height).
491
+ - `size?: 'sm' | 'md' | 'lg' | 'full'` — default `'md'` (width for left/right, height for top/bottom).
492
+ - `variant?: 'temporary' | 'persistent'` — default `'temporary'`. `temporary` overlays a dimmed scrim and is modal (scrim/Escape close). `persistent` shows no scrim and leaves the page interactive (a fixed side panel).
493
+ - `closeOnBackdrop?: boolean` — default `true` (temporary only). `closeOnEscape?: boolean` — default `true`.
494
+
495
+ Slides in/out with a drawer easing (panel translate + scrim fade); stays mounted through the close transition.
496
+ - `aria-label?` / `aria-labelledby?` — if neither, `Drawer.Header` is auto-wired as the label.
497
+ - `classes?: Partial<DrawerClasses>` = `{ backdrop, drawer, header, closeButton, body, footer }`.
498
+
499
+ `Drawer.Header` takes `onClose?` (renders an × button). `Drawer.Body`/`Drawer.Footer` take `children`.
500
+
501
+ ### Tooltip
502
+ Import: `import { Tooltip } from '@overdoser/react-toolkit'`
503
+ Lightweight text label on hover/focus after a delay. Wraps the trigger in an inline span and portals the bubble. For interactive/click content use `Popover`.
504
+
505
+ `TooltipProps`:
506
+ - `content: ReactNode` — the label (nullish/empty → never shows).
507
+ - `children: ReactNode` — the trigger.
508
+ - `placement?: 'top' | 'bottom' | 'left' | 'right'` — default `'top'` (flips on overflow).
509
+ - `delay?: number` — open delay ms, default `300`. `closeDelay?: number` — default `0`.
510
+ - `disabled?: boolean`, `hideArrow?: boolean`.
511
+ - `classes?: Partial<TooltipClasses>` = `{ wrapper, tooltip, arrow }`.
512
+ Closes on Escape; wires `aria-describedby` while open.
513
+
514
+ ### Avatar
515
+ Import: `import { Avatar } from '@overdoser/react-toolkit'`
516
+ Element: `<span>` (forwards ref). Image with initials/icon fallback.
517
+
518
+ `AvatarProps` (extends `span`): `src?`, `alt?`, `name?` (→ initials), `fallback?: ReactNode`, `size?: 'xs'|'sm'|'md'|'lg'|'xl'` (default `'md'`), `shape?: 'circle'|'square'` (default `'circle'`), `status?: 'online'|'offline'|'away'|'busy'`, `classes?` = `{ root, image, fallback, status }`. Falls back to initials (or a user icon) if `src` is missing or errors.
519
+
520
+ ### Divider
521
+ Import: `import { Divider } from '@overdoser/react-toolkit'`
522
+ Element: `<div role="separator">` (forwards ref). `orientation?: 'horizontal'|'vertical'` (default horizontal), `variant?: 'solid'|'dashed'|'dotted'`, `label?: ReactNode` (horizontal only), `labelPosition?: 'start'|'center'|'end'`, `classes?` = `{ root, line, label }`.
523
+
524
+ ### Breadcrumbs (Breadcrumbs.Item)
525
+ Import: `import { Breadcrumbs } from '@overdoser/react-toolkit'`
526
+ `<nav><ol>` (forwards ref). Children are `Breadcrumbs.Item`; separators auto-inserted; the last item defaults to `current`.
527
+
528
+ `BreadcrumbsProps`: `separator?: ReactNode` (default `'/'`), `label?: string` (default `'Breadcrumb'`), `classes?` = `{ root, list, item, link, current, separator }`.
529
+ `Breadcrumbs.Item` props: `href?` (omit for plain text), `current?: boolean` (→ `aria-current="page"`, no link).
530
+
531
+ ### Pagination
532
+ Import: `import { Pagination } from '@overdoser/react-toolkit'`
533
+ `<nav>` (forwards ref). Windowed page list with ellipses, e.g. `1 … 6 7 8 9 10 … 99`.
534
+
535
+ `PaginationProps`:
536
+ - `count?: number` (total pages) OR `total?: number` + `pageSize?: number` (default 10) to derive it.
537
+ - `page?: number` (controlled, 1-based) / `defaultPage?: number` (default 1) / `onChange?: (page) => void`.
538
+ - `siblingCount?: number` — default `2` (→ at most 9 chips). `boundaryCount?: number` — default `1`.
539
+ - `showPrevNext?: boolean` (default true), `showFirstLast?: boolean` (default false).
540
+ - `size?: 'sm'|'md'|'lg'`, `disabled?: boolean`, `label?: string`.
541
+ - `classes?` = `{ root, list, item, active, ellipsis, control }`.
542
+ Also exports `paginationRange(page, count, boundaryCount?, siblingCount?): (number | 'ellipsis')[]`.
543
+
544
+ ### Slider
545
+ Import: `import { Slider } from '@overdoser/react-toolkit'`
546
+ Element: `<div>` (forwards ref) containing `role="slider"` thumb(s). A tuple `value` makes it a range (two thumbs). Pointer drag + keyboard (arrows, Home/End, PageUp/Down).
547
+
548
+ `SliderProps`: `value?: number | [number, number]`, `defaultValue?`, `onChange?(value)`, `onChangeEnd?(value)`, `min?` (0), `max?` (100), `step?` (1), `disabled?`, `aria-label?`/`aria-labelledby?`, `formatValue?(n): string` (for `aria-valuetext`), `classes?` = `{ root, track, range, thumb }`.
549
+
550
+ ### NumberInput
551
+ Import: `import { NumberInput } from '@overdoser/react-toolkit'`
552
+ Element: `<div>` wrapping `<input>` (forwards ref to the input) + stepper buttons. Emits `onChange(value: number | null)`, so it binds in `FormField`.
553
+
554
+ `NumberInputProps`: `value?: number | null`, `defaultValue?`, `onChange?(value)`, `min?`, `max?`, `step?` (1), `precision?` (decimal places), `inputSize?: 'sm'|'md'|'lg'`, `error?`, `hideControls?`, `disabled?`, `classes?` = `{ root, input, controls, increment, decrement }`. Arrow keys step; values clamp on blur; buttons disable at min/max.
555
+
556
+ ### DatePicker
557
+ Import: `import { DatePicker } from '@overdoser/react-toolkit'`
558
+ Element: `<div>` wrapping a read-only `<input>` (forwards ref) + a calendar popover. Single date; binds in `FormField` (`value: Date | null`).
559
+
560
+ `DatePickerProps`: `value?: Date | null`, `defaultValue?`, `onChange?(date)`, `min?: Date`, `max?: Date`, `disabledDate?(date): boolean`, `weekStartsOn?: number` (0 = Sun), `locale?: string`, `format?(date): string`, `placeholder?` (default `'Select date'`), `inputSize?: 'sm'|'md'|'lg'`, `error?`, `disabled?`, `portal?` (default true), `classes?` = `{ root, input, icon, popover, header, nav, grid, day, daySelected, dayToday, dayOutside }`. Keyboard: arrows move days, PageUp/Down change month, Home/End week ends, Enter selects, Esc closes.
561
+
562
+ ### Dropzone
563
+ Import: `import { Dropzone } from '@overdoser/react-toolkit'`
564
+ Element: `<div role="button">` (forwards ref to a hidden file `<input>`). Drag-drop or click to browse; emits files, leaves list UI to you.
565
+
566
+ `DropzoneProps`: `onFiles?(files: File[])`, `onReject?(rejections: { file, reason: 'type'|'size'|'multiple' }[])`, `accept?` (comma list of extensions/MIME patterns), `multiple?` (default false), `maxSize?` (bytes), `disabled?`, `label?`, `hint?`, `children?: ReactNode | (state: { isDragging }) => ReactNode` (custom content), `classes?` = `{ root, input, content, icon, label, hint }`.
567
+
568
+ ### Timer
569
+ Import: `import { Timer } from '@overdoser/react-toolkit'`
570
+ Element: `<div role="timer">`. Forwards a `TimerHandle` ref (not a DOM node): `{ start, pause, reset, restart, getTime(): number, isRunning }`.
571
+
572
+ `TimerProps`:
573
+ - `mode?: 'countdown' | 'stopwatch'` — default `'countdown'`.
574
+ - `duration?: number` — seconds (countdown length / stopwatch cap; drives ring progress).
575
+ - `to?: Date | number` — absolute countdown target (overrides `duration`/pause).
576
+ - `value?: number` — controlled seconds → display-only (no internal clock).
577
+ - `autoStart?: boolean` (default true), `running?: boolean` (controlled run state), `interval?: number` ms (default 1000).
578
+ - `variant?: 'digital' | 'ring' | 'segments'` (default `'digital'`), `size?: 'sm'|'md'|'lg'`.
579
+ - `format?(seconds): ReactNode` (digital/ring only; default `MM:SS` / `H:MM:SS` / `Dd HH:MM:SS`).
580
+ - `label?: ReactNode`, `labelPlacement?: 'top'|'bottom'|'left'|'right'` (default `'bottom'`).
581
+ - `onComplete?()` (countdown hits 0), `onTick?(seconds)`.
582
+ - `classes?` = `{ root, display, label, ringTrack, ringProgress, segments, segment, segmentValue, segmentLabel }`.
583
+
584
+ Segments variant (`variant="segments"`) — one cell per unit, with the unit label under each number:
585
+ - `units?: ('days'|'hours'|'minutes'|'seconds')[]` — which cells to show. Default: smallest set that fits the duration (the leading unit absorbs overflow, e.g. `units={['minutes','seconds']}` on 1h shows `61 : 00`).
586
+ - `unitFormat?: 'long' | 'short'` (default `'short'` → `d/h/m/s`; `'long'` → `days/hours/minutes/seconds`, fixed — no singular/plural switching).
587
+ - `unitLabels?: Partial<Record<TimerUnit, ReactNode | ((value: number) => ReactNode)>>` — override labels per unit.
588
+ - `segmentVariant?: 'boxed' | 'plain'` (default `'boxed'` — a square with the number and the unit below).
589
+ - `renderSegment?: (segment: TimerSegment, index: number) => ReactNode` — fully custom per-cell rendering (`TimerSegment = { unit, value, text, label }`). Overrides `segmentVariant`.
590
+ - `segmentSeparator?: ReactNode` — content between cells (e.g. `':'`).
591
+
303
592
  ### Form / FormField / FormRow
304
593
  Requires `react-hook-form` peer dependency.
305
594
 
@@ -309,20 +598,26 @@ Imports: `import { Form, FormField, FormRow } from '@overdoser/react-toolkit'`
309
598
  - `form: UseFormReturn<T>` — pass the result of `useForm()`.
310
599
  - `onSubmit: SubmitHandler<T>` — passed through `form.handleSubmit`.
311
600
  - `errors?: ReactNode[]` — top-of-form error list (rendered above children with `role="alert"`).
601
+ - `reserveErrorSpace?: boolean | number | string` — default `true`. Form-wide default for every `FormField`'s `reserveErrorSpace` (each field can still override its own). Same accepted values as the field prop.
602
+ - `fieldClasses?: Partial<FormFieldClasses>` — default `classes` applied to every `FormField`, *merged* with each field's own `classes` (both class names apply; fields add rather than replace). Keys: `{ field, label, message, error, helperText }`.
312
603
 
313
604
  `FormField` props:
314
605
  - `name: string` — required. Becomes the field id.
315
606
  - `label?: ReactNode`
316
- - `helperText?: ReactNode`
607
+ - `helperText?: ReactNode` — description below the input. Stays visible on error; the error message appears *above* it (between the input and the description), it does not replace it.
317
608
  - `required?: boolean` — adds a "*" indicator next to the label.
318
609
  - `rules?: Record<string, unknown>` — react-hook-form rules.
610
+ - `reserveErrorSpace?: boolean | number | string` — default `true`. Reserves a line of space *after the description* so the field's outer height stays constant when an error toggles (the error appears between the input and the description, and the reserved spacer collapses 1:1, so fields below don't reflow — only the description shifts down within the field). `true` reserves one line (via the `--crk-field-error-min-height` token); `false` = no reservation (the error pushes content down); a `number` is pixels; a `string` is any CSS length. Best results when the reserved height matches a one-line error.
319
611
  - `children: ReactElement` — exactly one child input. The child does NOT need `value`/`onChange`/`name` — `FormField` injects them via `cloneElement`.
320
- - `classes?: Partial<FormFieldClasses>` where `FormFieldClasses = { field, label, error, helperText }`
612
+ - `classes?: Partial<FormFieldClasses>` where `FormFieldClasses = { field, label, message, error, helperText }`
321
613
 
322
614
  `FormField` injects bridges so these inputs work without manual wiring:
323
- - `Input`, `Textarea`, `Select`, `Dropdown` (Mode B), `Checkbox`, `Radio`/`RadioGroup`
615
+ - `Input`, `Textarea`, `Select`, `Dropdown` (Mode B), `Checkbox`, `Radio`/`RadioGroup`, `CheckboxGroup`
324
616
  - For `Select` (multi/searchable) / `Dropdown` (Mode B): bridges `onChange` → `onValueChange`/`onValuesChange`.
325
617
  - For `Checkbox`: bridges `value` → `checked` when value is boolean.
618
+ - `CheckboxGroup` works directly — its `value: string[]` / `onChange(values)` bind to the field with no extra bridge.
619
+
620
+ Note: the inter-field gap is intentionally compact because each field reserves a message line; the overall rhythm stays even without jumping on error.
326
621
 
327
622
  `FormRow` props: `children`, `className`, `style`. Wraps fields in a horizontal flex row.
328
623
 
@@ -418,12 +713,43 @@ Element: `<input type="checkbox">` wrapped in a `<label>` (forwards ref to the i
418
713
 
419
714
  Props (extends native input props):
420
715
  - `label?: ReactNode`
421
- - `indeterminate?: boolean` — default `false`. Sets the DOM `indeterminate` property; visually distinct.
716
+ - `variant?: 'checkbox' | 'switch'` — default `'checkbox'`. `'switch'` renders a sliding toggle; the underlying `<input type="checkbox">` (a11y + form behavior) is identical.
717
+ - `indeterminate?: boolean` — default `false`. Sets the DOM `indeterminate` property; visually distinct. Ignored when `variant="switch"`.
422
718
  - `classes?: Partial<CheckboxClasses>` where `CheckboxClasses = { root, input, label }`
423
719
 
424
720
  Example:
425
721
  ```tsx
426
722
  <Checkbox label="Remember me" checked={remember} onChange={(e) => setRemember(e.target.checked)} />
723
+ <Checkbox variant="switch" label="Notifications" defaultChecked />
724
+ ```
725
+
726
+ ### CheckboxGroup
727
+ Import: `import { CheckboxGroup } from '@overdoser/react-toolkit'`
728
+ Element: a `[role="group"]` `<div>` (forwards ref to it). Multi-value selection from a fixed option set.
729
+
730
+ Props:
731
+ - `options: { value: string; label: ReactNode; disabled?: boolean }[]` — required.
732
+ - `value?: string[]` — controlled selected values. Default `[]`.
733
+ - `onChange?: (values: string[]) => void` — fires with the next array on each toggle.
734
+ - `variant?: 'checkbox' | 'chips'` — default `'checkbox'`. `'chips'` renders toggleable buttons (`role="checkbox"`, `aria-checked`) laid out one after another.
735
+ - `chipShape?: 'pill' | 'rounded' | 'square'` — default `'pill'`. Chip corner style (`chips` only); `'square'` is the most rectangular.
736
+ - `chipCheckmark?: boolean` — default `true`. Show a leading checkmark on selected chips (`chips` only). The chip's total width stays constant — when checked, horizontal padding shrinks on both sides by exactly half the mark+gap, so the freed space fits the mark and the centered content does not jump.
737
+ - `orientation?: 'vertical' | 'horizontal'` — defaults to `'vertical'` for `checkbox`, `'horizontal'` (wrapping) for `chips`.
738
+ - `disabled?: boolean` — disables every option. (Per-option via `options[].disabled`.)
739
+ - `error?: boolean` — default `false`. Error styling (e.g. an empty required group).
740
+ - `name?: string` — shared name for the underlying checkboxes.
741
+ - `required?: boolean` — sets `aria-required` on the group.
742
+ - `classes?: Partial<CheckboxGroupClasses>` where `CheckboxGroupClasses = { group, option, chip, chipSelected }`
743
+ - Also accepts `id`, `aria-label`, `aria-labelledby`, `aria-describedby`, `aria-invalid`.
744
+
745
+ Works inside `<FormField>` directly (its `value: string[]` / `onChange(values)` bind to the field — no bridge needed).
746
+
747
+ Example:
748
+ ```tsx
749
+ // Checkboxes
750
+ <CheckboxGroup options={topics} value={picked} onChange={setPicked} aria-label="Topics" />
751
+ // Chips
752
+ <CheckboxGroup variant="chips" options={tags} value={picked} onChange={setPicked} aria-label="Tags" />
427
753
  ```
428
754
 
429
755
  ### Radio / RadioGroup