diff --git a/assets/css/presets/lyra.css b/assets/css/presets/lyra.css
new file mode 100644
index 0000000..2e8c34e
--- /dev/null
+++ b/assets/css/presets/lyra.css
@@ -0,0 +1,1337 @@
+@layer components {
+ .style-lyra {
+ /* MARK: Accordion */
+ .cn-accordion-item {
+ @apply not-last:border-b;
+ }
+
+ .cn-accordion-trigger {
+ @apply focus-visible:ring-ring/50 focus-visible:border-ring focus-visible:after:border-ring **:data-[slot=accordion-trigger-icon]:text-muted-foreground rounded-none py-2.5 text-left text-xs font-medium hover:underline focus-visible:ring-1 **:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4;
+ }
+
+ .cn-accordion-content {
+ @apply data-open:animate-accordion-down data-closed:animate-accordion-up text-xs;
+ }
+
+ .cn-accordion-content-inner {
+ @apply pt-0 pb-2.5;
+ }
+
+ /* MARK: Alert */
+ .cn-alert {
+ @apply grid gap-0.5 rounded-none border px-2.5 py-2 text-left text-xs has-data-[slot=alert-action]:relative has-data-[slot=alert-action]:pr-18 has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2 *:[svg]:row-span-2 *:[svg]:translate-y-0 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-alert-variant-default {
+ @apply bg-card text-card-foreground;
+ }
+
+ .cn-alert-variant-destructive {
+ @apply text-destructive bg-card *:data-[slot=alert-description]:text-destructive/90 *:[svg]:text-current;
+ }
+
+ .cn-alert-title {
+ @apply font-medium group-has-[>svg]/alert:col-start-2;
+ }
+
+ .cn-alert-description {
+ @apply text-muted-foreground text-xs/relaxed text-balance md:text-pretty [&_p:not(:last-child)]:mb-2;
+ }
+
+ .cn-alert-action {
+ @apply absolute top-[calc(--spacing(1.25))] right-[calc(--spacing(1.25))];
+ }
+
+ /* MARK: Alert Dialog */
+ .cn-alert-dialog-overlay {
+ @apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs;
+ }
+
+ .cn-alert-dialog-content {
+ @apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 bg-background ring-foreground/10 gap-4 rounded-none p-4 ring-1 duration-100 data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-sm;
+ }
+
+ .cn-alert-dialog-header {
+ @apply grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-4 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr];
+ }
+
+ .cn-alert-dialog-media {
+ @apply bg-muted mb-2 inline-flex size-10 items-center justify-center rounded-none sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-6;
+ }
+
+ .cn-alert-dialog-title {
+ @apply text-sm font-medium sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2;
+ }
+
+ .cn-alert-dialog-description {
+ @apply text-muted-foreground *:[a]:hover:text-foreground text-xs/relaxed text-balance md:text-pretty *:[a]:underline *:[a]:underline-offset-3;
+ }
+
+ /* MARK: Avatar */
+ .cn-avatar {
+ @apply size-8 rounded-full after:rounded-full data-[size=lg]:size-10 data-[size=sm]:size-6;
+ }
+
+ .cn-avatar-fallback {
+ @apply bg-muted text-muted-foreground rounded-full;
+ }
+
+ .cn-avatar-image {
+ @apply rounded-full;
+ }
+
+ .cn-avatar-badge {
+ @apply bg-primary text-primary-foreground ring-background;
+ }
+
+ .cn-avatar-group-count {
+ @apply bg-muted text-muted-foreground size-8 rounded-full text-xs group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3;
+ }
+
+ /* MARK: Badge */
+ .cn-badge {
+ @apply h-5 gap-1 rounded-none border border-transparent px-2 py-0.5 text-xs font-medium transition-all has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&>svg]:size-3!;
+ }
+
+ .cn-badge-variant-default {
+ @apply bg-primary text-primary-foreground [a]:hover:bg-primary/80;
+ }
+
+ .cn-badge-variant-secondary {
+ @apply bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80;
+ }
+
+ .cn-badge-variant-outline {
+ @apply border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground;
+ }
+
+ .cn-badge-variant-destructive {
+ @apply bg-destructive/10 [a]:hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 text-destructive dark:bg-destructive/20;
+ }
+
+ .cn-badge-variant-ghost {
+ @apply hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50;
+ }
+
+ .cn-badge-variant-link {
+ @apply text-primary underline-offset-4 hover:underline;
+ }
+
+ /* MARK: Breadcrumb */
+ .cn-breadcrumb-list {
+ @apply text-muted-foreground gap-1.5 text-xs;
+ }
+
+ .cn-breadcrumb-item {
+ @apply gap-1;
+ }
+
+ .cn-breadcrumb-link {
+ @apply hover:text-foreground transition-colors;
+ }
+
+ .cn-breadcrumb-page {
+ @apply text-foreground font-normal;
+ }
+
+ .cn-breadcrumb-separator {
+ @apply [&>svg]:size-3.5;
+ }
+
+ .cn-breadcrumb-ellipsis {
+ @apply size-5 [&>svg]:size-4;
+ }
+
+ /* MARK: Button */
+ .cn-button {
+ @apply focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-none border border-transparent bg-clip-padding text-xs font-medium focus-visible:ring-1 aria-invalid:ring-1 [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-button-variant-default {
+ @apply bg-primary text-primary-foreground [a]:hover:bg-primary/80;
+ }
+
+ .cn-button-variant-outline {
+ @apply border-border bg-background hover:bg-muted hover:text-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 aria-expanded:bg-muted aria-expanded:text-foreground;
+ }
+
+ .cn-button-variant-secondary {
+ @apply bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground;
+ }
+
+ .cn-button-variant-ghost {
+ @apply hover:bg-muted hover:text-foreground dark:hover:bg-muted/50 aria-expanded:bg-muted aria-expanded:text-foreground;
+ }
+
+ .cn-button-variant-destructive {
+ @apply bg-destructive/10 hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/20 text-destructive focus-visible:border-destructive/40 dark:hover:bg-destructive/30;
+ }
+
+ .cn-button-variant-link {
+ @apply text-primary underline-offset-4 hover:underline;
+ }
+
+ .cn-button-size-xs {
+ @apply h-6 gap-1 rounded-none px-2 text-xs has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3;
+ }
+
+ .cn-button-size-sm {
+ @apply h-7 gap-1 rounded-none px-2.5 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5;
+ }
+
+ .cn-button-size-default {
+ @apply h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2;
+ }
+
+ .cn-button-size-lg {
+ @apply h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3;
+ }
+
+ .cn-button-size-icon-xs {
+ @apply size-6 rounded-none [&_svg:not([class*='size-'])]:size-3;
+ }
+
+ .cn-button-size-icon-sm {
+ @apply size-7 rounded-none;
+ }
+
+ .cn-button-size-icon {
+ @apply size-8;
+ }
+
+ .cn-button-size-icon-lg {
+ @apply size-9;
+ }
+
+ /* MARK: Button Group */
+ .cn-button-group {
+ @apply rounded-none has-[>[data-slot=button-group]]:gap-2 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-none;
+ }
+
+ .cn-button-group-text {
+ @apply bg-muted gap-2 rounded-none border px-2.5 text-xs font-medium [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-button-group-separator {
+ @apply bg-input;
+ }
+
+ /* MARK: Calendar */
+ .cn-calendar {
+ @apply p-2 [--cell-size:--spacing(7)];
+ }
+
+ .cn-calendar-dropdown-root {
+ @apply has-focus:border-ring border-input has-focus:ring-ring/50 rounded-none border has-focus:ring-1;
+ }
+
+ .cn-calendar-caption-label {
+ @apply h-6 rounded-none pr-1 pl-1.5;
+ }
+
+ /* MARK: Card */
+ .cn-card {
+ @apply ring-foreground/10 bg-card text-card-foreground gap-4 overflow-hidden rounded-none py-4 text-xs/relaxed ring-1 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-2 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-none *:[img:last-child]:rounded-none;
+ }
+
+ .cn-card-header {
+ @apply gap-1 rounded-none px-4 group-data-[size=sm]/card:px-3 [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3;
+ }
+
+ .cn-card-title {
+ @apply text-sm font-medium group-data-[size=sm]/card:text-sm;
+ }
+
+ .cn-card-description {
+ @apply text-muted-foreground text-xs/relaxed;
+ }
+
+ .cn-card-content {
+ @apply px-4 group-data-[size=sm]/card:px-3;
+ }
+
+ .cn-card-footer {
+ @apply rounded-none border-t p-4 group-data-[size=sm]/card:p-3;
+ }
+
+ /* MARK: Chart */
+ .cn-chart-tooltip {
+ @apply border-border/50 bg-background gap-1.5 rounded-none border px-2.5 py-1.5 text-xs shadow-xl;
+ }
+
+ /* MARK: Checkbox */
+ .cn-checkbox {
+ @apply border-input dark:bg-input/30 data-checked:bg-primary data-checked:text-primary-foreground dark:data-checked:bg-primary data-checked:border-primary aria-invalid:aria-checked:border-primary aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 flex size-4 items-center justify-center rounded-none border transition-colors group-has-disabled/field:opacity-50 focus-visible:ring-1 aria-invalid:ring-1;
+ }
+
+ .cn-checkbox-indicator {
+ @apply [&>svg]:size-3.5;
+ }
+
+ /* MARK: Combobox */
+ .cn-combobox-content {
+ @apply bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 *:data-[slot=input-group]:bg-input/30 *:data-[slot=input-group]:border-input/30 max-h-72 min-w-36 overflow-hidden rounded-none shadow-md ring-1 duration-100 *:data-[slot=input-group]:m-1 *:data-[slot=input-group]:mb-0 *:data-[slot=input-group]:h-8 *:data-[slot=input-group]:shadow-none;
+ }
+
+ .cn-combobox-content-logical {
+ @apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;
+ }
+
+ .cn-combobox-label {
+ @apply text-muted-foreground px-2 py-2 text-xs;
+ }
+
+ .cn-combobox-item {
+ @apply data-highlighted:bg-accent data-highlighted:text-accent-foreground not-data-[variant=destructive]:data-highlighted:**:text-accent-foreground gap-2 rounded-none py-2 pr-8 pl-2 text-xs [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-combobox-item-indicator {
+ @apply pointer-events-none absolute right-2 flex size-4 items-center justify-center;
+ }
+
+ .cn-combobox-empty {
+ @apply text-muted-foreground hidden w-full justify-center py-2 text-center text-xs group-data-empty/combobox-content:flex;
+ }
+
+ .cn-combobox-list {
+ @apply no-scrollbar max-h-[min(calc(--spacing(72)---spacing(9)),calc(var(--available-height)---spacing(9)))] scroll-py-1 overflow-y-auto data-empty:p-0;
+ }
+
+ .cn-combobox-item-text {
+ @apply flex flex-1 gap-2;
+ }
+
+ .cn-combobox-separator {
+ @apply bg-border -mx-1 h-px;
+ }
+
+ .cn-combobox-trigger {
+ @apply [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-combobox-trigger-icon {
+ @apply text-muted-foreground size-4;
+ }
+
+ .cn-combobox-chips {
+ @apply dark:bg-input/30 border-input focus-within:border-ring focus-within:ring-ring/50 has-aria-invalid:ring-destructive/20 dark:has-aria-invalid:ring-destructive/40 has-aria-invalid:border-destructive dark:has-aria-invalid:border-destructive/50 flex min-h-8 flex-wrap items-center gap-1 rounded-none border bg-transparent bg-clip-padding px-2.5 py-1 text-xs transition-colors focus-within:ring-1 has-aria-invalid:ring-1 has-data-[slot=combobox-chip]:px-1;
+ }
+
+ .cn-combobox-chip {
+ @apply bg-muted text-foreground flex h-[calc(--spacing(5.25))] w-fit items-center justify-center gap-1 rounded-none px-1.5 text-xs font-medium whitespace-nowrap has-data-[slot=combobox-chip-remove]:pr-0;
+ }
+
+ .cn-combobox-chip-remove {
+ @apply -ml-1 opacity-50 hover:opacity-100;
+ }
+
+ /* MARK: Command */
+ .cn-command {
+ @apply bg-popover text-popover-foreground rounded-none;
+ }
+
+ .cn-command-dialog {
+ @apply rounded-none;
+ }
+
+ .cn-command-input-wrapper {
+ @apply border-b pb-0;
+ }
+
+ .cn-command-input-group {
+ @apply bg-input/30 border-input/30 h-8 border-none shadow-none! *:data-[slot=input-group-addon]:pl-2!;
+ }
+
+ .cn-command-input-icon {
+ @apply size-4 shrink-0 opacity-50;
+ }
+
+ .cn-command-input {
+ @apply w-full text-xs;
+ }
+
+ .cn-command-list {
+ @apply no-scrollbar max-h-72 scroll-py-0 outline-none;
+ }
+
+ .cn-command-empty {
+ @apply py-6 text-center text-xs;
+ }
+
+ .cn-command-group {
+ @apply text-foreground **:[[cmdk-group-heading]]:text-muted-foreground overflow-hidden **:[[cmdk-group-heading]]:px-2 **:[[cmdk-group-heading]]:py-1.5 **:[[cmdk-group-heading]]:text-xs;
+ }
+
+ .cn-command-separator {
+ @apply bg-border -mx-1 h-px;
+ }
+
+ .cn-command-item {
+ @apply data-selected:bg-muted data-selected:text-foreground data-selected:*:[svg]:text-foreground relative flex cursor-default items-center gap-2 rounded-none px-2 py-2 text-xs outline-hidden select-none in-data-[slot=dialog-content]:rounded-none! [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-command-shortcut {
+ @apply text-muted-foreground group-data-selected/command-item:text-foreground ml-auto text-xs tracking-widest;
+ }
+
+ /* MARK: Context Menu */
+ .cn-context-menu-content {
+ @apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground min-w-36 rounded-none shadow-md ring-1 duration-100;
+ }
+
+ .cn-context-menu-content-logical {
+ @apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;
+ }
+
+ .cn-context-menu-item {
+ @apply focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:text-destructive focus:*:[svg]:text-accent-foreground gap-2 rounded-none px-2 py-2 text-xs data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-context-menu-checkbox-item {
+ @apply focus:bg-accent focus:text-accent-foreground gap-2 rounded-none py-2 pr-8 pl-2 text-xs data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-context-menu-radio-item {
+ @apply focus:bg-accent focus:text-accent-foreground gap-2 rounded-none py-2 pr-8 pl-2 text-xs data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-context-menu-item-indicator {
+ @apply absolute right-2;
+ }
+
+ .cn-context-menu-label {
+ @apply text-muted-foreground px-2 py-2 text-xs data-inset:pl-7;
+ }
+
+ .cn-context-menu-separator {
+ @apply bg-border -mx-1 h-px;
+ }
+
+ .cn-context-menu-shortcut {
+ @apply text-muted-foreground group-focus/context-menu-item:text-accent-foreground ml-auto text-xs tracking-widest;
+ }
+
+ .cn-context-menu-sub-trigger {
+ @apply focus:bg-accent focus:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground gap-2 rounded-none px-2 py-2 text-xs data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-context-menu-sub-content {
+ @apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 bg-popover text-popover-foreground min-w-32 rounded-none border shadow-lg duration-100;
+ }
+
+ .cn-context-menu-subcontent {
+ @apply shadow-lg;
+ }
+
+ /* MARK: Dialog */
+ .cn-dialog-overlay {
+ @apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs;
+ }
+
+ .cn-dialog-content {
+ @apply bg-background data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 ring-foreground/10 grid max-w-[calc(100%-2rem)] gap-4 rounded-none p-4 text-xs/relaxed ring-1 duration-100 sm:max-w-sm;
+ }
+
+ .cn-dialog-close {
+ @apply absolute top-2 right-2;
+ }
+
+ .cn-dialog-header {
+ @apply gap-1 text-left;
+ }
+
+ .cn-dialog-title {
+ @apply text-sm font-medium;
+ }
+
+ .cn-dialog-description {
+ @apply text-muted-foreground *:[a]:hover:text-foreground text-xs/relaxed *:[a]:underline *:[a]:underline-offset-3;
+ }
+
+ /* MARK: Drawer */
+ .cn-drawer-overlay {
+ @apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 bg-black/10 supports-backdrop-filter:backdrop-blur-xs;
+ }
+
+ .cn-drawer-content {
+ @apply bg-background flex h-auto flex-col text-xs/relaxed data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-none data-[vaul-drawer-direction=bottom]:border-t data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:rounded-none data-[vaul-drawer-direction=left]:border-r data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:rounded-none data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-none data-[vaul-drawer-direction=top]:border-b data-[vaul-drawer-direction=left]:sm:max-w-sm data-[vaul-drawer-direction=right]:sm:max-w-sm;
+ }
+
+ .cn-drawer-handle {
+ @apply bg-muted mx-auto mt-4 hidden h-1 w-[100px] shrink-0 rounded-none group-data-[vaul-drawer-direction=bottom]/drawer-content:block;
+ }
+
+ .cn-drawer-header {
+ @apply gap-0.5 p-4 group-data-[vaul-drawer-direction=bottom]/drawer-content:text-center group-data-[vaul-drawer-direction=top]/drawer-content:text-center md:gap-0.5 md:text-left;
+ }
+
+ .cn-drawer-title {
+ @apply text-foreground text-sm font-medium;
+ }
+
+ .cn-drawer-description {
+ @apply text-muted-foreground text-xs/relaxed;
+ }
+
+ .cn-drawer-footer {
+ @apply gap-2 p-4;
+ }
+
+ /* MARK: Dropdown Menu */
+ .cn-dropdown-menu-content {
+ @apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground min-w-32 rounded-none shadow-md ring-1 duration-100;
+ }
+
+ .cn-dropdown-menu-content-logical {
+ @apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;
+ }
+
+ .cn-dropdown-menu-item {
+ @apply focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:text-destructive not-data-[variant=destructive]:focus:**:text-accent-foreground gap-2 rounded-none px-2 py-2 text-xs data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-dropdown-menu-checkbox-item {
+ @apply focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground gap-2 rounded-none py-2 pr-8 pl-2 text-xs data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-dropdown-menu-radio-item {
+ @apply focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground gap-2 rounded-none py-2 pr-8 pl-2 text-xs data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-dropdown-menu-item-indicator {
+ @apply absolute right-2 flex items-center justify-center;
+ }
+
+ .cn-dropdown-menu-label {
+ @apply text-muted-foreground px-2 py-2 text-xs data-inset:pl-7;
+ }
+
+ .cn-dropdown-menu-separator {
+ @apply bg-border -mx-1 h-px;
+ }
+
+ .cn-dropdown-menu-shortcut {
+ @apply text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground ml-auto text-xs tracking-widest;
+ }
+
+ .cn-dropdown-menu-sub-trigger {
+ @apply focus:bg-accent focus:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground gap-2 rounded-none px-2 py-2 text-xs data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-dropdown-menu-sub-content {
+ @apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground min-w-[96px] rounded-none shadow-lg ring-1 duration-100;
+ }
+
+ .cn-dropdown-menu-subcontent {
+ @apply shadow-lg;
+ }
+
+ /* MARK: Empty */
+ .cn-empty {
+ @apply gap-4 rounded-none border-dashed p-6;
+ }
+
+ .cn-empty-header {
+ @apply gap-2;
+ }
+
+ .cn-empty-media {
+ @apply mb-2;
+ }
+
+ .cn-empty-media-default {
+ @apply bg-transparent;
+ }
+
+ .cn-empty-media-icon {
+ @apply bg-muted text-foreground flex size-8 shrink-0 items-center justify-center rounded-none [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-empty-title {
+ @apply text-sm font-medium;
+ }
+
+ .cn-empty-description {
+ @apply text-xs/relaxed;
+ }
+
+ .cn-empty-content {
+ @apply gap-2.5 text-xs;
+ }
+
+ /* MARK: Field */
+ .cn-field-set {
+ @apply gap-4 has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3;
+ }
+
+ .cn-field-legend {
+ @apply mb-2.5 font-medium data-[variant=label]:text-xs data-[variant=legend]:text-sm;
+ }
+
+ .cn-field-group {
+ @apply gap-5 data-[slot=checkbox-group]:gap-3 *:data-[slot=field-group]:gap-4;
+ }
+
+ .cn-field {
+ @apply data-[invalid=true]:text-destructive gap-2;
+ }
+
+ .cn-field-content {
+ @apply gap-0.5;
+ }
+
+ .cn-field-label {
+ @apply has-data-checked:bg-primary/5 has-data-checked:border-primary/30 dark:has-data-checked:border-primary/20 dark:has-data-checked:bg-primary/10 gap-2 group-data-[disabled=true]/field:opacity-50 has-[>[data-slot=field]]:rounded-none has-[>[data-slot=field]]:border *:data-[slot=field]:p-2;
+ }
+
+ .cn-field-title {
+ @apply gap-2 text-xs/relaxed group-data-[disabled=true]/field:opacity-50;
+ }
+
+ .cn-field-description {
+ @apply text-muted-foreground text-left text-xs/relaxed [[data-variant=legend]+&]:-mt-1.5;
+ }
+
+ .cn-field-separator {
+ @apply -my-2 h-5 text-xs group-data-[variant=outline]/field-group:-mb-2;
+ }
+
+ .cn-field-separator-content {
+ @apply text-muted-foreground px-2;
+ }
+
+ .cn-field-error {
+ @apply text-destructive text-xs;
+ }
+
+ /* MARK: Hover Card */
+ .cn-hover-card-content {
+ @apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground w-64 rounded-none p-2.5 text-xs/relaxed shadow-md ring-1 duration-100;
+ }
+
+ .cn-hover-card-content-logical {
+ @apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;
+ }
+
+ /* MARK: Input */
+ .cn-input {
+ @apply dark:bg-input/30 border-input focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 disabled:bg-input/50 dark:disabled:bg-input/80 h-8 rounded-none border bg-transparent px-2.5 py-1 text-xs transition-colors file:h-6 file:text-xs file:font-medium focus-visible:ring-1 aria-invalid:ring-1 md:text-xs;
+ }
+
+ /* MARK: Input OTP */
+ .cn-input-otp {
+ @apply gap-2;
+ }
+
+ .cn-input-otp-group {
+ @apply has-aria-invalid:ring-destructive/20 dark:has-aria-invalid:ring-destructive/40 has-aria-invalid:border-destructive rounded-none has-aria-invalid:ring-1;
+ }
+
+ .cn-input-otp-slot {
+ @apply dark:bg-input/30 border-input data-[active=true]:border-ring data-[active=true]:ring-ring/50 data-[active=true]:aria-invalid:ring-destructive/20 dark:data-[active=true]:aria-invalid:ring-destructive/40 aria-invalid:border-destructive data-[active=true]:aria-invalid:border-destructive size-8 border-y border-r text-xs transition-all outline-none first:rounded-none first:border-l last:rounded-none data-[active=true]:ring-1;
+ }
+
+ .cn-input-otp-caret-line {
+ @apply animate-caret-blink bg-foreground h-4 w-px duration-1000;
+ }
+
+ .cn-input-otp-separator {
+ @apply [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ /* MARK: Item */
+ .cn-item {
+ @apply [a]:hover:bg-muted rounded-none border text-xs;
+ }
+
+ .cn-item-variant-default {
+ @apply border-transparent;
+ }
+
+ .cn-item-variant-outline {
+ @apply border-border;
+ }
+
+ .cn-item-variant-muted {
+ @apply bg-muted/50 border-transparent;
+ }
+
+ .cn-item-size-default {
+ @apply gap-2.5 px-3 py-2.5;
+ }
+
+ .cn-item-size-sm {
+ @apply gap-2.5 px-3 py-2.5;
+ }
+
+ .cn-item-size-xs {
+ @apply gap-2 px-2.5 py-2 in-data-[slot=dropdown-menu-content]:p-0;
+ }
+
+ .cn-item-media {
+ @apply gap-2 group-has-data-[slot=item-description]/item:translate-y-0.5 group-has-data-[slot=item-description]/item:self-start;
+ }
+
+ .cn-item-media-variant-default {
+ @apply bg-transparent;
+ }
+
+ .cn-item-media-variant-icon {
+ @apply [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-item-media-variant-image {
+ @apply size-10 overflow-hidden rounded-none group-data-[size=sm]/item:size-8 group-data-[size=xs]/item:size-6 [&_img]:size-full [&_img]:object-cover;
+ }
+
+ .cn-item-content {
+ @apply gap-1 group-data-[size=xs]/item:gap-0;
+ }
+
+ .cn-item-title {
+ @apply gap-2 text-xs font-medium underline-offset-4;
+ }
+
+ .cn-item-description {
+ @apply text-muted-foreground text-left text-xs/relaxed group-data-[size=xs]/item:text-xs/relaxed;
+ }
+
+ .cn-item-actions {
+ @apply gap-2;
+ }
+
+ .cn-item-header {
+ @apply gap-2;
+ }
+
+ .cn-item-footer {
+ @apply gap-2;
+ }
+
+ .cn-item-group {
+ @apply gap-4 has-data-[size=sm]:gap-2.5 has-data-[size=xs]:gap-2;
+ }
+
+ .cn-item-separator {
+ @apply my-2;
+ }
+
+ /* MARK: Kbd */
+ .cn-kbd {
+ @apply bg-muted text-muted-foreground in-data-[slot=tooltip-content]:bg-background/20 in-data-[slot=tooltip-content]:text-background dark:in-data-[slot=tooltip-content]:bg-background/10 h-5 w-fit min-w-5 gap-1 rounded-none px-1 font-sans text-xs font-medium [&_svg:not([class*='size-'])]:size-3;
+ }
+
+ .cn-kbd-group {
+ @apply gap-1;
+ }
+
+ /* MARK: Label */
+ .cn-label {
+ @apply gap-2 text-xs leading-none group-data-[disabled=true]:opacity-50 peer-disabled:opacity-50;
+ }
+
+ /* MARK: Menubar */
+ .cn-menubar {
+ @apply bg-background h-8 gap-0.5 rounded-none border p-1;
+ }
+
+ .cn-menubar-trigger {
+ @apply hover:bg-muted aria-expanded:bg-muted rounded-none px-1.5 py-[calc(--spacing(0.8))] text-xs font-medium;
+ }
+
+ .cn-menubar-content {
+ @apply bg-popover text-popover-foreground data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 min-w-36 rounded-none shadow-md ring-1 duration-100;
+ }
+
+ .cn-menubar-content-logical {
+ @apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;
+ }
+
+ .cn-menubar-item {
+ @apply focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:text-destructive! not-data-[variant=destructive]:focus:**:text-accent-foreground gap-2 rounded-none px-2 py-2 text-xs data-disabled:opacity-50 data-inset:pl-8 [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-menubar-checkbox-item {
+ @apply focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground gap-2 rounded-none py-2 pr-28 pl-8 text-xs data-inset:pl-8;
+ }
+
+ .cn-menubar-checkbox-item-indicator {
+ @apply left-1.5 size-4 [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-menubar-radio-item {
+ @apply focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground gap-2 rounded-none py-2 pr-2 pl-8 text-xs data-disabled:opacity-50 data-inset:pl-8 [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-menubar-radio-item-indicator {
+ @apply left-1.5 size-4 [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-menubar-label {
+ @apply px-2 py-2 text-xs data-inset:pl-8;
+ }
+
+ .cn-menubar-separator {
+ @apply bg-border;
+ }
+
+ .cn-menubar-shortcut {
+ @apply text-muted-foreground group-focus/menubar-item:text-accent-foreground text-xs tracking-widest;
+ }
+
+ .cn-menubar-sub-trigger {
+ @apply focus:bg-accent focus:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground gap-2 rounded-none px-2 py-2 text-xs data-inset:pl-8 [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-menubar-sub-content {
+ @apply bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 min-w-32 rounded-none shadow-lg ring-1 duration-100;
+ }
+
+ /* MARK: Navigation Menu */
+ .cn-navigation-menu {
+ @apply max-w-max;
+ }
+
+ .cn-navigation-menu-list {
+ @apply gap-0;
+ }
+
+ .cn-navigation-menu-trigger {
+ @apply bg-background hover:bg-muted focus:bg-muted data-open:hover:bg-muted data-open:focus:bg-muted data-open:bg-muted/50 focus-visible:ring-ring/50 data-popup-open:bg-muted/50 data-popup-open:hover:bg-muted rounded-none px-2.5 py-1.5 text-xs font-medium transition-all focus-visible:ring-1 focus-visible:outline-1 disabled:opacity-50;
+ }
+
+ .cn-navigation-menu-link {
+ @apply data-active:focus:bg-muted data-active:hover:bg-muted data-active:bg-muted/50 focus-visible:ring-ring/50 hover:bg-muted focus:bg-muted flex items-center gap-2 rounded-none p-2 text-xs transition-all outline-none focus-visible:ring-1 focus-visible:outline-1 in-data-[slot=navigation-menu-content]:rounded-none [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-navigation-menu-trigger-icon {
+ @apply relative top-px ml-1 size-3 transition duration-300 group-data-open/navigation-menu-trigger:rotate-180 group-data-popup-open/navigation-menu-trigger:rotate-180;
+ }
+
+ .cn-navigation-menu-content {
+ @apply data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:data-open:animate-in group-data-[viewport=false]/navigation-menu:data-closed:animate-out group-data-[viewport=false]/navigation-menu:data-closed:zoom-out-95 group-data-[viewport=false]/navigation-menu:data-open:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-open:fade-in-0 group-data-[viewport=false]/navigation-menu:data-closed:fade-out-0 group-data-[viewport=false]/navigation-menu:ring-foreground/10 p-1 ease-[cubic-bezier(0.22,1,0.36,1)] group-data-[viewport=false]/navigation-menu:rounded-none group-data-[viewport=false]/navigation-menu:shadow group-data-[viewport=false]/navigation-menu:ring-1 group-data-[viewport=false]/navigation-menu:duration-300;
+ }
+
+ .cn-navigation-menu-viewport {
+ @apply bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:zoom-out-95 data-open:zoom-in-90 ring-foreground/10 rounded-none shadow ring-1 duration-100;
+ }
+
+ .cn-navigation-menu-indicator {
+ @apply data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in;
+ }
+
+ .cn-navigation-menu-indicator-arrow {
+ @apply bg-border rounded-none shadow-md;
+ }
+
+ .cn-navigation-menu-positioner {
+ @apply transition-[top,left,right,bottom] duration-300 ease-[cubic-bezier(0.22,1,0.36,1)] data-[side=bottom]:before:top-[-10px] data-[side=bottom]:before:right-0 data-[side=bottom]:before:left-0;
+ }
+
+ .cn-navigation-menu-popup {
+ @apply bg-popover text-popover-foreground ring-foreground/10 rounded-none shadow ring-1 transition-all ease-[cubic-bezier(0.22,1,0.36,1)] outline-none data-ending-style:scale-90 data-ending-style:opacity-0 data-ending-style:duration-150 data-starting-style:scale-90 data-starting-style:opacity-0;
+ }
+
+ /* MARK: Native Select */
+ .cn-native-select {
+ @apply border-input placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 dark:hover:bg-input/50 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 h-8 w-full min-w-0 appearance-none rounded-none border bg-transparent py-1 pr-8 pl-2.5 text-xs transition-colors select-none focus-visible:ring-1 aria-invalid:ring-1 data-[size=sm]:h-7 data-[size=sm]:rounded-none data-[size=sm]:py-0.5;
+ }
+
+ .cn-native-select-icon {
+ @apply text-muted-foreground top-1/2 right-2.5 size-4 -translate-y-1/2;
+ }
+
+ /* MARK: Pagination */
+ .cn-pagination-content {
+ @apply gap-0.5;
+ }
+
+ .cn-pagination-ellipsis {
+ @apply size-8 items-center justify-center [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-pagination-previous {
+ @apply pl-1.5!;
+ }
+
+ .cn-pagination-next {
+ @apply pr-1.5!;
+ }
+
+ /* MARK: Popover */
+ .cn-popover-content {
+ @apply bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 flex flex-col gap-2.5 rounded-none p-2.5 text-xs shadow-md ring-1 duration-100;
+ }
+
+ .cn-popover-content-logical {
+ @apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;
+ }
+
+ .cn-popover-header {
+ @apply flex flex-col gap-1 text-xs;
+ }
+
+ .cn-popover-title {
+ @apply text-sm font-medium;
+ }
+
+ .cn-popover-description {
+ @apply text-muted-foreground text-xs/relaxed;
+ }
+
+ /* MARK: Progress */
+ .cn-progress {
+ @apply bg-muted h-1 rounded-none;
+ }
+
+ .cn-progress-track {
+ @apply bg-muted h-1 rounded-none;
+ }
+
+ .cn-progress-indicator {
+ @apply bg-primary;
+ }
+
+ .cn-progress-label {
+ @apply text-xs;
+ }
+
+ .cn-progress-value {
+ @apply text-muted-foreground ml-auto text-xs tabular-nums;
+ }
+
+ /* MARK: Radio Group */
+ .cn-radio-group {
+ @apply grid gap-2;
+ }
+
+ .cn-radio-group-item {
+ @apply border-input text-primary dark:bg-input/30 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 data-checked:bg-primary data-checked:border-primary flex size-4 rounded-full focus-visible:ring-1 aria-invalid:ring-1;
+ }
+
+ .cn-radio-group-indicator {
+ @apply group-aria-invalid/radio-group-item:text-destructive flex size-4 items-center justify-center text-white;
+ }
+
+ .cn-radio-group-indicator-icon {
+ @apply absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 fill-current;
+ }
+
+ /* MARK: Resizable */
+ .cn-resizable-handle-icon {
+ @apply bg-border h-6 w-1 rounded-none;
+ }
+
+ /* MARK: Scroll Area */
+ .cn-scroll-area-scrollbar {
+ @apply data-horizontal:h-2.5 data-horizontal:flex-col data-horizontal:border-t data-horizontal:border-t-transparent data-vertical:h-full data-vertical:w-2.5 data-vertical:border-l data-vertical:border-l-transparent;
+ }
+
+ .cn-scroll-area-thumb {
+ @apply rounded-none;
+ }
+
+ /* MARK: Select */
+ .cn-select-trigger {
+ @apply border-input data-placeholder:text-muted-foreground dark:bg-input/30 dark:hover:bg-input/50 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 gap-1.5 rounded-none border bg-transparent py-2 pr-2 pl-2.5 text-xs transition-colors select-none focus-visible:ring-1 aria-invalid:ring-1 data-[size=default]:h-8 data-[size=sm]:h-7 data-[size=sm]:rounded-none *:data-[slot=select-value]:flex *:data-[slot=select-value]:gap-1.5 [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-select-value {
+ @apply flex flex-1 text-left;
+ }
+
+ .cn-select-trigger-icon {
+ @apply text-muted-foreground size-4;
+ }
+
+ .cn-select-content {
+ @apply bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 min-w-36 rounded-none shadow-md ring-1 duration-100;
+ }
+
+ .cn-select-content-logical {
+ @apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;
+ }
+
+ .cn-select-label {
+ @apply text-muted-foreground px-2 py-2 text-xs;
+ }
+
+ .cn-select-item {
+ @apply focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground gap-2 rounded-none py-2 pr-8 pl-2 text-xs [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2;
+ }
+
+ .cn-select-item-indicator {
+ @apply pointer-events-none absolute right-2 flex size-4 items-center justify-center;
+ }
+
+ .cn-select-group {
+ @apply scroll-my-1;
+ }
+
+ .cn-select-item-text {
+ @apply flex flex-1 gap-2;
+ }
+
+ .cn-select-separator {
+ @apply bg-border -mx-1 h-px;
+ }
+
+ .cn-select-scroll-up-button {
+ @apply bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-select-scroll-down-button {
+ @apply bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ /* MARK: Separator */
+ .cn-separator {
+ @apply bg-border shrink-0;
+ }
+
+ .cn-separator-horizontal {
+ @apply h-px w-full;
+ }
+
+ .cn-separator-vertical {
+ @apply h-full w-px;
+ }
+
+ /* MARK: Sheet */
+ .cn-sheet-overlay {
+ @apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 bg-black/10 text-xs/relaxed duration-100 data-ending-style:opacity-0 data-starting-style:opacity-0 supports-backdrop-filter:backdrop-blur-xs;
+ }
+
+ .cn-sheet-content {
+ @apply bg-background data-open:animate-in data-closed:animate-out data-[side=right]:data-closed:slide-out-to-right-10 data-[side=right]:data-open:slide-in-from-right-10 data-[side=left]:data-closed:slide-out-to-left-10 data-[side=left]:data-open:slide-in-from-left-10 data-[side=top]:data-closed:slide-out-to-top-10 data-[side=top]:data-open:slide-in-from-top-10 data-closed:fade-out-0 data-open:fade-in-0 data-[side=bottom]:data-closed:slide-out-to-bottom-10 data-[side=bottom]:data-open:slide-in-from-bottom-10 fixed z-50 flex flex-col bg-clip-padding text-xs/relaxed shadow-lg transition duration-200 ease-in-out data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm;
+ }
+
+ .cn-sheet-close {
+ @apply absolute top-3 right-3;
+ }
+
+ .cn-sheet-header {
+ @apply gap-0.5 p-4;
+ }
+
+ .cn-sheet-footer {
+ @apply gap-2 p-4;
+ }
+
+ .cn-sheet-title {
+ @apply text-foreground text-sm font-medium;
+ }
+
+ .cn-sheet-description {
+ @apply text-muted-foreground text-xs/relaxed;
+ }
+
+ /* MARK: Sidebar */
+ .cn-sidebar-gap {
+ @apply transition-[width] duration-200 ease-linear;
+ }
+
+ .cn-sidebar-inner {
+ @apply bg-sidebar group-data-[variant=floating]:ring-sidebar-border group-data-[variant=floating]:rounded-none group-data-[variant=floating]:shadow-sm group-data-[variant=floating]:ring-1;
+ }
+
+ .cn-sidebar-rail {
+ @apply hover:after:bg-sidebar-border;
+ }
+
+ .cn-sidebar-inset {
+ @apply bg-background md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-none md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2;
+ }
+
+ .cn-sidebar-input {
+ @apply bg-background h-8 w-full shadow-none;
+ }
+
+ .cn-sidebar-header {
+ @apply gap-2 p-2;
+ }
+
+ .cn-sidebar-content {
+ @apply no-scrollbar gap-0;
+ }
+
+ .cn-sidebar-footer {
+ @apply gap-2 p-2;
+ }
+
+ .cn-sidebar-separator {
+ @apply bg-sidebar-border mx-2;
+ }
+
+ .cn-sidebar-group {
+ @apply p-2;
+ }
+
+ .cn-sidebar-menu {
+ @apply gap-0;
+ }
+
+ .cn-sidebar-group-content {
+ @apply text-xs;
+ }
+
+ .cn-sidebar-group-label {
+ @apply text-sidebar-foreground/70 ring-sidebar-ring h-8 rounded-none px-2 text-xs transition-[margin,opacity] duration-200 ease-linear group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0 focus-visible:ring-2 [&>svg]:size-4;
+ }
+
+ .cn-sidebar-group-action {
+ @apply text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 right-3 w-5 rounded-none p-0 focus-visible:ring-2 [&>svg]:size-4;
+ }
+
+ .cn-sidebar-menu-button {
+ @apply ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground data-open:hover:bg-sidebar-accent data-open:hover:text-sidebar-accent-foreground gap-2 rounded-none p-2 text-left text-xs transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! focus-visible:ring-2 data-active:font-medium;
+ }
+
+ .cn-sidebar-menu-button-variant-default {
+ @apply hover:bg-sidebar-accent hover:text-sidebar-accent-foreground;
+ }
+
+ .cn-sidebar-menu-button-variant-outline {
+ @apply bg-background hover:bg-sidebar-accent hover:text-sidebar-accent-foreground shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))];
+ }
+
+ .cn-sidebar-menu-button-size-default {
+ @apply h-8 text-xs;
+ }
+
+ .cn-sidebar-menu-button-size-sm {
+ @apply h-7 text-xs;
+ }
+
+ .cn-sidebar-menu-button-size-lg {
+ @apply h-12 text-xs group-data-[collapsible=icon]:p-0!;
+ }
+
+ .cn-sidebar-menu-action {
+ @apply text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground peer-hover/menu-button:text-sidebar-accent-foreground absolute top-1.5 right-1 aspect-square w-5 rounded-none p-0 peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1 focus-visible:ring-2 [&>svg]:size-4;
+ }
+
+ .cn-sidebar-menu-badge {
+ @apply text-sidebar-foreground peer-hover/menu-button:text-sidebar-accent-foreground peer-data-active/menu-button:text-sidebar-accent-foreground pointer-events-none absolute right-1 flex h-5 min-w-5 rounded-none px-1 text-xs font-medium peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1;
+ }
+
+ .cn-sidebar-menu-skeleton {
+ @apply h-8 gap-2 rounded-none px-2;
+ }
+
+ .cn-sidebar-menu-skeleton-icon {
+ @apply size-4 rounded-none;
+ }
+
+ .cn-sidebar-menu-skeleton-text {
+ @apply h-4;
+ }
+
+ .cn-sidebar-menu-sub {
+ @apply border-sidebar-border mx-3.5 translate-x-px gap-1 border-l px-2.5 py-0.5 group-data-[collapsible=icon]:hidden;
+ }
+
+ .cn-sidebar-menu-sub-button {
+ @apply text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground h-7 gap-2 rounded-none px-2 focus-visible:ring-2 data-[size=md]:text-xs data-[size=sm]:text-xs [&>svg]:size-4;
+ }
+
+ /* MARK: Skeleton */
+ .cn-skeleton {
+ @apply bg-muted rounded-none;
+ }
+
+ /* MARK: Slider */
+ .cn-slider {
+ @apply data-vertical:min-h-40;
+ }
+
+ .cn-slider-track {
+ @apply bg-muted rounded-none data-horizontal:h-1 data-horizontal:w-full data-vertical:h-full data-vertical:w-1;
+ }
+
+ .cn-slider-range {
+ @apply bg-primary;
+ }
+
+ .cn-slider-thumb {
+ @apply border-ring ring-ring/50 relative size-3 rounded-none border bg-white transition-[color,box-shadow] after:absolute after:-inset-2 hover:ring-1 focus-visible:ring-1 focus-visible:outline-hidden active:ring-1;
+ }
+
+ /* MARK: Sonner */
+ .cn-toast {
+ @apply rounded-none;
+ }
+
+ /* MARK: Switch */
+ .cn-switch {
+ @apply data-checked:bg-primary data-unchecked:bg-input focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 dark:data-unchecked:bg-input/80 shrink-0 rounded-full border border-transparent focus-visible:ring-1 aria-invalid:ring-1 data-[size=default]:h-[18.4px] data-[size=default]:w-[32px] data-[size=sm]:h-[14px] data-[size=sm]:w-[24px];
+ }
+
+ .cn-switch-thumb {
+ @apply bg-background dark:data-unchecked:bg-foreground dark:data-checked:bg-primary-foreground rounded-full group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 group-data-[size=default]/switch:data-checked:translate-x-[calc(100%-2px)] group-data-[size=sm]/switch:data-checked:translate-x-[calc(100%-2px)] group-data-[size=default]/switch:data-unchecked:translate-x-0 group-data-[size=sm]/switch:data-unchecked:translate-x-0;
+ }
+
+ /* MARK: Table */
+ .cn-table-container {
+ @apply relative w-full overflow-x-auto;
+ }
+
+ .cn-table {
+ @apply w-full caption-bottom text-xs;
+ }
+
+ .cn-table-header {
+ @apply [&_tr]:border-b;
+ }
+
+ .cn-table-body {
+ @apply [&_tr:last-child]:border-0;
+ }
+
+ .cn-table-footer {
+ @apply bg-muted/50 border-t font-medium [&>tr]:last:border-b-0;
+ }
+
+ .cn-table-row {
+ @apply hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors;
+ }
+
+ .cn-table-head {
+ @apply text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0;
+ }
+
+ .cn-table-cell {
+ @apply p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0;
+ }
+
+ .cn-table-caption {
+ @apply text-muted-foreground mt-4 text-xs;
+ }
+
+ /* MARK: Tabs */
+ .cn-tabs {
+ @apply gap-2;
+ }
+
+ .cn-tabs-list {
+ @apply rounded-none p-[3px] group-data-horizontal/tabs:h-8 data-[variant=line]:rounded-none;
+ }
+
+ .cn-tabs-trigger {
+ @apply gap-1.5 rounded-none border border-transparent px-1.5 py-0.5 text-xs font-medium group-data-vertical/tabs:py-[calc(--spacing(1.25))] [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-tabs-content {
+ @apply text-xs/relaxed;
+ }
+
+ /* MARK: Textarea */
+ .cn-textarea {
+ @apply border-input dark:bg-input/30 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 disabled:bg-input/50 dark:disabled:bg-input/80 rounded-none border bg-transparent px-2.5 py-2 text-xs transition-colors focus-visible:ring-1 aria-invalid:ring-1 md:text-xs;
+ }
+
+ /* MARK: Toggle */
+ .cn-toggle {
+ @apply hover:text-foreground aria-pressed:bg-muted focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive data-[state=on]:bg-muted gap-1 rounded-none text-xs font-medium transition-all [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-toggle-variant-default {
+ @apply bg-transparent;
+ }
+
+ .cn-toggle-variant-outline {
+ @apply border-input hover:bg-muted border bg-transparent;
+ }
+
+ .cn-toggle-size-default {
+ @apply h-8 min-w-8 px-2;
+ }
+
+ .cn-toggle-size-sm {
+ @apply h-7 min-w-7 rounded-none px-1.5;
+ }
+
+ .cn-toggle-size-lg {
+ @apply h-9 min-w-9 px-2.5;
+ }
+
+ /* MARK: Toggle Group */
+ .cn-toggle-group {
+ @apply rounded-none data-[size=sm]:rounded-none;
+ }
+
+ .cn-toggle-group-item {
+ @apply group-data-[spacing=0]/toggle-group:rounded-none group-data-[spacing=0]/toggle-group:px-2 group-data-horizontal/toggle-group:data-[spacing=0]:first:rounded-none group-data-vertical/toggle-group:data-[spacing=0]:first:rounded-none group-data-horizontal/toggle-group:data-[spacing=0]:last:rounded-none group-data-vertical/toggle-group:data-[spacing=0]:last:rounded-none;
+ }
+
+ /* MARK: Tooltip */
+ .cn-tooltip-content {
+ @apply data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 rounded-none px-3 py-1.5 text-xs;
+ }
+
+ .cn-tooltip-content-logical {
+ @apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;
+ }
+
+ .cn-tooltip-arrow {
+ @apply size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-none;
+ }
+
+ .cn-tooltip-arrow-logical {
+ @apply data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-right-1 data-[side=inline-start]:-translate-y-1/2;
+ }
+
+ /* MARK: Input Group */
+ .cn-input-group {
+ @apply border-input dark:bg-input/30 has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[[data-slot][aria-invalid=true]]:border-destructive dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40 has-disabled:bg-input/50 dark:has-disabled:bg-input/80 h-8 rounded-none border transition-colors in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-disabled:opacity-50 has-[[data-slot=input-group-control]:focus-visible]:ring-1 has-[[data-slot][aria-invalid=true]]:ring-1 has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=inline-end]]:[&>input]:pr-1.5 has-[>[data-align=inline-start]]:[&>input]:pl-1.5;
+ }
+
+ .cn-input-group-addon {
+ @apply text-muted-foreground h-auto gap-2 py-1.5 text-xs font-medium group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-none [&>svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-input-group-addon-align-inline-start {
+ @apply pl-2 has-[>button]:ml-[-0.3rem] has-[>kbd]:ml-[-0.15rem];
+ }
+
+ .cn-input-group-addon-align-inline-end {
+ @apply pr-2 has-[>button]:mr-[-0.3rem] has-[>kbd]:mr-[-0.15rem];
+ }
+
+ .cn-input-group-addon-align-block-start {
+ @apply px-2.5 pt-2 group-has-[>input]/input-group:pt-2 [.border-b]:pb-2;
+ }
+
+ .cn-input-group-addon-align-block-end {
+ @apply px-2.5 pb-2 group-has-[>input]/input-group:pb-2 [.border-t]:pt-2;
+ }
+
+ .cn-input-group-button {
+ @apply gap-2 text-xs;
+ }
+
+ .cn-input-group-button-size-xs {
+ @apply h-6 gap-1 rounded-none px-1.5 [&>svg:not([class*='size-'])]:size-3.5;
+ }
+
+ .cn-input-group-button-size-icon-xs {
+ @apply size-6 rounded-none p-0 has-[>svg]:p-0;
+ }
+
+ .cn-input-group-button-size-icon-sm {
+ @apply size-8 p-0 has-[>svg]:p-0;
+ }
+
+ .cn-input-group-text {
+ @apply text-muted-foreground gap-2 text-xs [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-input-group-input {
+ @apply rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent;
+ }
+
+ .cn-input-group-textarea {
+ @apply rounded-none border-0 bg-transparent py-2 shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent;
+ }
+ }
+}
diff --git a/assets/css/presets/maia.css b/assets/css/presets/maia.css
new file mode 100644
index 0000000..a540948
--- /dev/null
+++ b/assets/css/presets/maia.css
@@ -0,0 +1,1360 @@
+.style-maia {
+ /* MARK: Accordion */
+ .cn-accordion {
+ @apply overflow-hidden rounded-2xl border;
+ }
+
+ .cn-accordion-item {
+ @apply data-open:bg-muted/50 not-last:border-b;
+ }
+
+ .cn-accordion-trigger {
+ @apply **:data-[slot=accordion-trigger-icon]:text-muted-foreground gap-6 p-4 text-left text-sm font-medium hover:underline **:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4;
+ }
+
+ .cn-accordion-content {
+ @apply data-open:animate-accordion-down data-closed:animate-accordion-up px-4 text-sm;
+ }
+
+ .cn-accordion-content-inner {
+ @apply pt-0 pb-4;
+ }
+
+ /* MARK: Alert Dialog */
+ .cn-alert-dialog-overlay {
+ @apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 bg-black/80 duration-100 supports-backdrop-filter:backdrop-blur-xs;
+ }
+
+ .cn-alert-dialog-content {
+ @apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 bg-background ring-foreground/5 gap-6 rounded-4xl p-6 ring-1 duration-100 data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-md;
+ }
+
+ .cn-alert-dialog-header {
+ @apply grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-6 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr];
+ }
+
+ .cn-alert-dialog-media {
+ @apply bg-muted mb-2 inline-flex size-16 items-center justify-center rounded-full sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-8;
+ }
+
+ .cn-alert-dialog-title {
+ @apply text-lg font-medium sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2;
+ }
+
+ .cn-alert-dialog-description {
+ @apply text-muted-foreground *:[a]:hover:text-foreground text-sm text-balance md:text-pretty *:[a]:underline *:[a]:underline-offset-3;
+ }
+
+ /* MARK: Alert */
+ .cn-alert {
+ @apply grid gap-0.5 rounded-lg border px-4 py-3 text-left text-sm has-data-[slot=alert-action]:relative has-data-[slot=alert-action]:pr-18 has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2.5 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-alert-variant-default {
+ @apply bg-card text-card-foreground;
+ }
+
+ .cn-alert-variant-destructive {
+ @apply text-destructive bg-card *:data-[slot=alert-description]:text-destructive/90 *:[svg]:text-current;
+ }
+
+ .cn-alert-title {
+ @apply font-medium group-has-[>svg]/alert:col-start-2;
+ }
+
+ .cn-alert-description {
+ @apply text-muted-foreground text-sm text-balance md:text-pretty [&_p:not(:last-child)]:mb-4;
+ }
+
+ .cn-alert-action {
+ @apply absolute top-2.5 right-3;
+ }
+
+ /* MARK: Avatar */
+ .cn-avatar {
+ @apply size-8 rounded-full after:rounded-full data-[size=lg]:size-10 data-[size=sm]:size-6;
+ }
+
+ .cn-avatar-fallback {
+ @apply bg-muted text-muted-foreground rounded-full;
+ }
+
+ .cn-avatar-image {
+ @apply rounded-full;
+ }
+
+ .cn-avatar-badge {
+ @apply bg-primary text-primary-foreground ring-background;
+ }
+
+ .cn-avatar-group-count {
+ @apply bg-muted text-muted-foreground size-8 rounded-full text-sm group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3;
+ }
+
+ /* MARK: Badge */
+ .cn-badge {
+ @apply h-5 gap-1 rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium transition-all has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&>svg]:size-3!;
+ }
+
+ .cn-badge-variant-default {
+ @apply bg-primary text-primary-foreground [a]:hover:bg-primary/80;
+ }
+
+ .cn-badge-variant-secondary {
+ @apply bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80;
+ }
+
+ .cn-badge-variant-outline {
+ @apply border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground bg-input/30;
+ }
+
+ .cn-badge-variant-destructive {
+ @apply bg-destructive/10 [a]:hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 text-destructive dark:bg-destructive/20;
+ }
+
+ .cn-badge-variant-ghost {
+ @apply hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50;
+ }
+
+ .cn-badge-variant-link {
+ @apply text-primary underline-offset-4 hover:underline;
+ }
+
+ /* MARK: Breadcrumb */
+ .cn-breadcrumb-list {
+ @apply text-muted-foreground gap-1.5 text-sm sm:gap-2.5;
+ }
+
+ .cn-breadcrumb-item {
+ @apply gap-1.5;
+ }
+
+ .cn-breadcrumb-link {
+ @apply hover:text-foreground transition-colors;
+ }
+
+ .cn-breadcrumb-page {
+ @apply text-foreground font-normal;
+ }
+
+ .cn-breadcrumb-separator {
+ @apply [&>svg]:size-3.5;
+ }
+
+ .cn-breadcrumb-ellipsis {
+ @apply size-5 [&>svg]:size-4;
+ }
+
+ /* MARK: Button */
+ .cn-button {
+ @apply focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-4xl border border-transparent bg-clip-padding text-sm font-medium focus-visible:ring-[3px] aria-invalid:ring-[3px] [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-button-variant-default {
+ @apply bg-primary text-primary-foreground hover:bg-primary/80;
+ }
+
+ .cn-button-variant-outline {
+ @apply border-border bg-input/30 hover:bg-input/50 hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground;
+ }
+
+ .cn-button-variant-secondary {
+ @apply bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground;
+ }
+
+ .cn-button-variant-ghost {
+ @apply hover:bg-muted hover:text-foreground dark:hover:bg-muted/50 aria-expanded:bg-muted aria-expanded:text-foreground;
+ }
+
+ .cn-button-variant-destructive {
+ @apply bg-destructive/10 hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/20 text-destructive focus-visible:border-destructive/40 dark:hover:bg-destructive/30;
+ }
+
+ .cn-button-variant-link {
+ @apply text-primary underline-offset-4 hover:underline;
+ }
+
+ .cn-button-size-xs {
+ @apply h-6 gap-1 px-2.5 text-xs has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2 [&_svg:not([class*='size-'])]:size-3;
+ }
+
+ .cn-button-size-sm {
+ @apply h-8 gap-1 px-3 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2;
+ }
+
+ .cn-button-size-default {
+ @apply h-9 gap-1.5 px-3 has-data-[icon=inline-end]:pr-2.5 has-data-[icon=inline-start]:pl-2.5;
+ }
+
+ .cn-button-size-lg {
+ @apply h-10 gap-1.5 px-4 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3;
+ }
+
+ .cn-button-size-icon-xs {
+ @apply size-6 [&_svg:not([class*='size-'])]:size-3;
+ }
+
+ .cn-button-size-icon-sm {
+ @apply size-8;
+ }
+
+ .cn-button-size-icon {
+ @apply size-9;
+ }
+
+ .cn-button-size-icon-lg {
+ @apply size-10;
+ }
+
+ /* MARK: Button Group */
+ .cn-button-group {
+ @apply has-[>[data-slot=button-group]]:gap-2 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-4xl;
+ }
+
+ .cn-button-group-orientation-horizontal {
+ @apply [&>[data-slot]:not(:has(~[data-slot]))]:rounded-r-4xl!;
+ }
+
+ .cn-button-group-orientation-vertical {
+ @apply [&>[data-slot]:not(:has(~[data-slot]))]:rounded-b-4xl!;
+ }
+
+ .cn-button-group-text {
+ @apply bg-muted gap-2 rounded-4xl border px-2.5 text-sm font-medium [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-button-group-separator {
+ @apply bg-input;
+ }
+
+ /* MARK: Calendar */
+ .cn-calendar {
+ @apply p-3 [--cell-radius:var(--radius-4xl)] [--cell-size:--spacing(8)];
+ }
+
+ .cn-calendar-dropdown-root {
+ @apply has-focus:border-ring border-input has-focus:ring-ring/50 border has-focus:ring-[3px];
+ }
+
+ .cn-calendar-caption-label {
+ @apply h-8 pr-2 pl-3;
+ }
+
+ /* MARK: Card */
+ .cn-card {
+ @apply ring-foreground/10 bg-card text-card-foreground gap-6 overflow-hidden rounded-2xl py-6 text-sm ring-1 has-[>img:first-child]:pt-0 data-[size=sm]:gap-4 data-[size=sm]:py-4 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl;
+ }
+
+ .cn-card-header {
+ @apply gap-2 rounded-t-xl px-6 group-data-[size=sm]/card:px-4 [.border-b]:pb-6 group-data-[size=sm]/card:[.border-b]:pb-4;
+ }
+
+ .cn-card-title {
+ @apply text-base font-medium;
+ }
+
+ .cn-card-description {
+ @apply text-muted-foreground text-sm;
+ }
+
+ .cn-card-content {
+ @apply px-6 group-data-[size=sm]/card:px-4;
+ }
+
+ .cn-card-footer {
+ @apply rounded-b-xl px-6 group-data-[size=sm]/card:px-4 [.border-t]:pt-6 group-data-[size=sm]/card:[.border-t]:pt-4;
+ }
+
+ /* MARK: Carousel */
+ .cn-carousel-previous {
+ @apply rounded-full;
+ }
+
+ .cn-carousel-next {
+ @apply rounded-full;
+ }
+
+ /* MARK: Chart */
+ .cn-chart-tooltip {
+ @apply border-border/50 bg-background gap-1.5 rounded-lg border px-2.5 py-1.5 text-xs shadow-xl;
+ }
+
+ /* MARK: Checkbox */
+ .cn-checkbox {
+ @apply border-input dark:bg-input/30 data-checked:bg-primary data-checked:text-primary-foreground dark:data-checked:bg-primary data-checked:border-primary aria-invalid:aria-checked:border-primary aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 flex size-4 items-center justify-center rounded-[6px] border transition-shadow group-has-disabled/field:opacity-50 focus-visible:ring-[3px] aria-invalid:ring-[3px];
+ }
+
+ .cn-checkbox-indicator {
+ @apply [&>svg]:size-3.5;
+ }
+
+ /* MARK: Combobox */
+ .cn-combobox-content {
+ @apply bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/5 *:data-[slot=input-group]:bg-input/30 max-h-72 min-w-36 overflow-hidden rounded-2xl shadow-2xl ring-1 duration-100 *:data-[slot=input-group]:m-1 *:data-[slot=input-group]:mb-0 *:data-[slot=input-group]:h-9 *:data-[slot=input-group]:border-none *:data-[slot=input-group]:shadow-none;
+ }
+
+ .cn-combobox-content-logical {
+ @apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;
+ }
+
+ .cn-combobox-label {
+ @apply text-muted-foreground px-3.5 py-2.5 text-xs;
+ }
+
+ .cn-combobox-item {
+ @apply data-highlighted:bg-accent data-highlighted:text-accent-foreground not-data-[variant=destructive]:data-highlighted:**:text-accent-foreground gap-2.5 rounded-xl py-2 pr-8 pl-3 text-sm [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-combobox-item-indicator {
+ @apply pointer-events-none absolute right-2 flex size-4 items-center justify-center;
+ }
+
+ .cn-combobox-empty {
+ @apply text-muted-foreground hidden w-full justify-center py-2 text-center text-sm group-data-empty/combobox-content:flex;
+ }
+
+ .cn-combobox-list {
+ @apply no-scrollbar max-h-[min(calc(--spacing(72)---spacing(9)),calc(var(--available-height)---spacing(9)))] scroll-py-1 overflow-y-auto p-1 data-empty:p-0;
+ }
+
+ .cn-combobox-item-text {
+ @apply flex flex-1 gap-2;
+ }
+
+ .cn-combobox-separator {
+ @apply bg-border/50 -mx-1 my-1 h-px;
+ }
+
+ .cn-combobox-trigger {
+ @apply [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-combobox-trigger-icon {
+ @apply text-muted-foreground size-4;
+ }
+
+ .cn-combobox-chips {
+ @apply bg-input/30 border-input focus-within:border-ring focus-within:ring-ring/50 has-aria-invalid:ring-destructive/20 dark:has-aria-invalid:ring-destructive/40 has-aria-invalid:border-destructive dark:has-aria-invalid:border-destructive/50 flex min-h-9 flex-wrap items-center gap-1.5 rounded-4xl border bg-clip-padding px-2.5 py-1.5 text-sm transition-colors focus-within:ring-[3px] has-aria-invalid:ring-[3px] has-data-[slot=combobox-chip]:px-1.5;
+ }
+
+ .cn-combobox-chip {
+ @apply bg-muted-foreground/10 text-foreground flex h-[calc(--spacing(5.5))] w-fit items-center justify-center gap-1 rounded-4xl px-2 text-xs font-medium whitespace-nowrap has-data-[slot=combobox-chip-remove]:pr-0;
+ }
+
+ .cn-combobox-chip-remove {
+ @apply -ml-1 opacity-50 hover:opacity-100;
+ }
+
+ /* MARK: Command */
+ .cn-command {
+ @apply bg-popover text-popover-foreground rounded-4xl p-1;
+ }
+
+ .cn-command-dialog {
+ @apply rounded-4xl! p-0;
+ }
+
+ .cn-command-input-wrapper {
+ @apply p-1 pb-0;
+ }
+
+ .cn-command-input-group {
+ @apply bg-input/30 h-9;
+ }
+
+ .cn-command-input-icon {
+ @apply size-4 shrink-0 opacity-50;
+ }
+
+ .cn-command-input {
+ @apply w-full text-sm;
+ }
+
+ .cn-command-list {
+ @apply no-scrollbar max-h-72 scroll-py-1 outline-none;
+ }
+
+ .cn-command-empty {
+ @apply py-6 text-center text-sm;
+ }
+
+ .cn-command-group {
+ @apply text-foreground **:[[cmdk-group-heading]]:text-muted-foreground overflow-hidden p-1 **:[[cmdk-group-heading]]:px-3 **:[[cmdk-group-heading]]:py-2 **:[[cmdk-group-heading]]:text-xs **:[[cmdk-group-heading]]:font-medium;
+ }
+
+ .cn-command-separator {
+ @apply bg-border/50 my-1 h-px;
+ }
+
+ .cn-command-item {
+ @apply data-selected:bg-muted data-selected:text-foreground data-selected:*:[svg]:text-foreground relative flex cursor-default items-center gap-2 rounded-lg px-3 py-2 text-sm outline-hidden select-none in-data-[slot=dialog-content]:rounded-2xl [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-command-shortcut {
+ @apply text-muted-foreground group-data-selected/command-item:text-foreground ml-auto text-xs tracking-widest;
+ }
+
+ /* MARK: Context Menu */
+ .cn-context-menu-content {
+ @apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/5 bg-popover text-popover-foreground min-w-48 rounded-2xl p-1 shadow-2xl ring-1 duration-100;
+ }
+
+ .cn-context-menu-content-logical {
+ @apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;
+ }
+
+ .cn-context-menu-item {
+ @apply focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:text-destructive focus:*:[svg]:text-accent-foreground gap-2.5 rounded-xl px-3 py-2 text-sm data-inset:pl-9.5 [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-context-menu-checkbox-item {
+ @apply focus:bg-accent focus:text-accent-foreground gap-2 rounded-xl py-2 pr-8 pl-3 text-sm data-inset:pl-9.5 [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-context-menu-radio-item {
+ @apply focus:bg-accent focus:text-accent-foreground gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm data-inset:pl-9.5 [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-context-menu-item-indicator {
+ @apply absolute right-2;
+ }
+
+ .cn-context-menu-label {
+ @apply text-muted-foreground px-3 py-2.5 text-xs data-inset:pl-9.5;
+ }
+
+ .cn-context-menu-separator {
+ @apply bg-border/50 -mx-1 my-1 h-px;
+ }
+
+ .cn-context-menu-shortcut {
+ @apply text-muted-foreground group-focus/context-menu-item:text-accent-foreground ml-auto text-xs tracking-widest;
+ }
+
+ .cn-context-menu-sub-trigger {
+ @apply focus:bg-accent focus:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground rounded-xl px-3 py-2 text-sm data-inset:pl-9.5 [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-context-menu-sub-content {
+ @apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 bg-popover text-popover-foreground min-w-32 rounded-md border p-1 shadow-lg duration-100;
+ }
+
+ .cn-context-menu-subcontent {
+ @apply shadow-lg;
+ }
+
+ /* MARK: Dialog */
+ .cn-dialog-overlay {
+ @apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 bg-black/80 duration-100 supports-backdrop-filter:backdrop-blur-xs;
+ }
+
+ .cn-dialog-content {
+ @apply bg-background data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 ring-foreground/5 grid max-w-[calc(100%-2rem)] gap-6 rounded-4xl p-6 text-sm ring-1 duration-100 sm:max-w-md;
+ }
+
+ .cn-dialog-close {
+ @apply absolute top-4 right-4;
+ }
+
+ .cn-dialog-header {
+ @apply gap-2;
+ }
+
+ .cn-dialog-footer {
+ @apply gap-2;
+ }
+
+ .cn-dialog-title {
+ @apply text-base leading-none font-medium;
+ }
+
+ .cn-dialog-description {
+ @apply text-muted-foreground *:[a]:hover:text-foreground text-sm *:[a]:underline *:[a]:underline-offset-3;
+ }
+
+ /* MARK: Drawer */
+ .cn-drawer-overlay {
+ @apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 bg-black/80 supports-backdrop-filter:backdrop-blur-xs;
+ }
+
+ .cn-drawer-content {
+ @apply before:bg-background before:border-border relative flex h-auto flex-col bg-transparent p-4 text-sm before:absolute before:inset-2 before:-z-10 before:rounded-4xl before:border data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=left]:sm:max-w-sm data-[vaul-drawer-direction=right]:sm:max-w-sm;
+ }
+
+ .cn-drawer-handle {
+ @apply bg-muted mx-auto mt-4 hidden h-1.5 w-[100px] shrink-0 rounded-full group-data-[vaul-drawer-direction=bottom]/drawer-content:block;
+ }
+
+ .cn-drawer-header {
+ @apply gap-0.5 p-4 group-data-[vaul-drawer-direction=bottom]/drawer-content:text-center group-data-[vaul-drawer-direction=top]/drawer-content:text-center md:gap-1.5 md:text-left;
+ }
+
+ .cn-drawer-title {
+ @apply text-foreground text-base font-medium;
+ }
+
+ .cn-drawer-description {
+ @apply text-muted-foreground text-sm;
+ }
+
+ .cn-drawer-footer {
+ @apply gap-2 p-4;
+ }
+
+ /* MARK: Dropdown Menu */
+ .cn-dropdown-menu-content {
+ @apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/5 bg-popover text-popover-foreground min-w-48 rounded-2xl p-1 shadow-2xl ring-1 duration-100;
+ }
+
+ .cn-dropdown-menu-content-logical {
+ @apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;
+ }
+
+ .cn-dropdown-menu-item {
+ @apply focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:text-destructive not-data-[variant=destructive]:focus:**:text-accent-foreground gap-2.5 rounded-xl px-3 py-2 text-sm data-inset:pl-9.5 [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-dropdown-menu-checkbox-item {
+ @apply focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground gap-2.5 rounded-xl py-2 pr-8 pl-3 text-sm data-inset:pl-9.5 [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-dropdown-menu-radio-item {
+ @apply focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground gap-2.5 rounded-xl py-2 pr-8 pl-3 text-sm data-inset:pl-9.5 [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-dropdown-menu-item-indicator {
+ @apply absolute right-2 flex items-center justify-center;
+ }
+
+ .cn-dropdown-menu-label {
+ @apply text-muted-foreground px-3 py-2.5 text-xs data-inset:pl-9.5;
+ }
+
+ .cn-dropdown-menu-separator {
+ @apply bg-border/50 -mx-1 my-1 h-px;
+ }
+
+ .cn-dropdown-menu-shortcut {
+ @apply text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground ml-auto text-xs tracking-widest;
+ }
+
+ .cn-dropdown-menu-sub-trigger {
+ @apply focus:bg-accent focus:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground gap-2 rounded-xl px-3 py-2 text-sm data-inset:pl-9.5 [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-dropdown-menu-sub-content {
+ @apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/5 bg-popover text-popover-foreground min-w-36 rounded-2xl p-1 shadow-2xl ring-1 duration-100;
+ }
+
+ .cn-dropdown-menu-subcontent {
+ @apply shadow-lg;
+ }
+
+ /* MARK: Empty */
+ .cn-empty {
+ @apply gap-4 rounded-lg border-dashed p-12;
+ }
+
+ .cn-empty-header {
+ @apply gap-2;
+ }
+
+ .cn-empty-media {
+ @apply mb-2;
+ }
+
+ .cn-empty-media-default {
+ @apply bg-transparent;
+ }
+
+ .cn-empty-media-icon {
+ @apply bg-muted text-foreground flex size-10 shrink-0 items-center justify-center rounded-lg [&_svg:not([class*='size-'])]:size-6;
+ }
+
+ .cn-empty-title {
+ @apply text-lg font-medium tracking-tight;
+ }
+
+ .cn-empty-description {
+ @apply text-sm/relaxed;
+ }
+
+ .cn-empty-content {
+ @apply gap-4 text-sm;
+ }
+
+ /* MARK: Field */
+ .cn-field-set {
+ @apply gap-6 has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3;
+ }
+
+ .cn-field-legend {
+ @apply mb-3 font-medium data-[variant=label]:text-sm data-[variant=legend]:text-base;
+ }
+
+ .cn-field-group {
+ @apply gap-7 data-[slot=checkbox-group]:gap-3 *:data-[slot=field-group]:gap-4;
+ }
+
+ .cn-field {
+ @apply data-[invalid=true]:text-destructive gap-3;
+ }
+
+ .cn-field-content {
+ @apply gap-1;
+ }
+
+ .cn-field-label {
+ @apply has-data-checked:bg-primary/5 has-data-checked:border-primary/30 dark:has-data-checked:border-primary/20 dark:has-data-checked:bg-primary/10 gap-2 group-data-[disabled=true]/field:opacity-50 has-[>[data-slot=field]]:rounded-xl has-[>[data-slot=field]]:border *:data-[slot=field]:p-4;
+ }
+
+ .cn-field-title {
+ @apply gap-2 text-sm font-medium group-data-[disabled=true]/field:opacity-50;
+ }
+
+ .cn-field-description {
+ @apply text-muted-foreground text-left text-sm [[data-variant=legend]+&]:-mt-1.5;
+ }
+
+ .cn-field-separator {
+ @apply -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2;
+ }
+
+ .cn-field-separator-content {
+ @apply text-muted-foreground px-2;
+ }
+
+ .cn-field-error {
+ @apply text-destructive text-sm;
+ }
+
+ /* MARK: Hover Card */
+ .cn-hover-card-content {
+ @apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/5 bg-popover text-popover-foreground w-72 rounded-2xl p-4 text-sm shadow-2xl ring-1 duration-100;
+ }
+
+ .cn-hover-card-content-logical {
+ @apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;
+ }
+
+ /* MARK: Input */
+ .cn-input {
+ @apply bg-input/30 border-input focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 h-9 rounded-4xl border px-3 py-1 text-base transition-colors file:h-7 file:text-sm file:font-medium focus-visible:ring-[3px] aria-invalid:ring-[3px] md:text-sm;
+ }
+
+ /* MARK: Input OTP */
+ .cn-input-otp {
+ @apply gap-2;
+ }
+
+ .cn-input-otp-group {
+ @apply has-aria-invalid:ring-destructive/20 dark:has-aria-invalid:ring-destructive/40 has-aria-invalid:border-destructive rounded-4xl has-aria-invalid:ring-[3px];
+ }
+
+ .cn-input-otp-slot {
+ @apply bg-input/30 border-input data-[active=true]:border-ring data-[active=true]:ring-ring/50 data-[active=true]:aria-invalid:ring-destructive/20 dark:data-[active=true]:aria-invalid:ring-destructive/40 aria-invalid:border-destructive data-[active=true]:aria-invalid:border-destructive size-9 border-y border-r text-sm transition-all outline-none first:rounded-l-4xl first:border-l last:rounded-r-4xl data-[active=true]:ring-[3px];
+ }
+
+ .cn-input-otp-caret-line {
+ @apply animate-caret-blink bg-foreground h-4 w-px duration-1000;
+ }
+
+ .cn-input-otp-separator {
+ @apply [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ /* MARK: Item */
+ .cn-item {
+ @apply [a]:hover:bg-muted rounded-2xl border text-sm;
+ }
+
+ .cn-item-variant-default {
+ @apply border-transparent;
+ }
+
+ .cn-item-variant-outline {
+ @apply border-border;
+ }
+
+ .cn-item-variant-muted {
+ @apply bg-muted/50 border-transparent;
+ }
+
+ .cn-item-size-default {
+ @apply gap-3.5 px-4 py-3.5;
+ }
+
+ .cn-item-size-sm {
+ @apply gap-3.5 px-3.5 py-3;
+ }
+
+ .cn-item-size-xs {
+ @apply gap-2.5 px-3 py-2.5 in-data-[slot=dropdown-menu-content]:p-0;
+ }
+
+ .cn-item-media {
+ @apply gap-2 group-has-data-[slot=item-description]/item:translate-y-0.5 group-has-data-[slot=item-description]/item:self-start;
+ }
+
+ .cn-item-media-variant-default {
+ @apply bg-transparent;
+ }
+
+ .cn-item-media-variant-icon {
+ @apply [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-item-media-variant-image {
+ @apply size-10 overflow-hidden rounded-lg group-data-[size=sm]/item:size-8 group-data-[size=xs]/item:size-6 group-data-[size=xs]/item:rounded-md [&_img]:size-full [&_img]:object-cover;
+ }
+
+ .cn-item-content {
+ @apply gap-1 group-data-[size=xs]/item:gap-0.5;
+ }
+
+ .cn-item-title {
+ @apply gap-2 text-sm leading-snug font-medium underline-offset-4;
+ }
+
+ .cn-item-description {
+ @apply text-muted-foreground text-left text-sm;
+ }
+
+ .cn-item-actions {
+ @apply gap-2;
+ }
+
+ .cn-item-header {
+ @apply gap-2;
+ }
+
+ .cn-item-footer {
+ @apply gap-2;
+ }
+
+ .cn-item-group {
+ @apply gap-4 has-data-[size=sm]:gap-2.5 has-data-[size=xs]:gap-2;
+ }
+
+ .cn-item-separator {
+ @apply my-2;
+ }
+
+ /* MARK: Kbd */
+ .cn-kbd {
+ @apply bg-muted text-muted-foreground in-data-[slot=tooltip-content]:bg-background/20 in-data-[slot=tooltip-content]:text-background dark:in-data-[slot=tooltip-content]:bg-background/10 h-5 w-fit min-w-5 gap-1 rounded-sm px-1 font-sans text-xs font-medium [&_svg:not([class*='size-'])]:size-3;
+ }
+
+ .cn-kbd-group {
+ @apply gap-1;
+ }
+
+ /* MARK: Label */
+ .cn-label {
+ @apply gap-2 text-sm leading-none font-medium group-data-[disabled=true]:opacity-50 peer-disabled:opacity-50;
+ }
+
+ /* MARK: Menubar */
+ .cn-menubar {
+ @apply bg-background h-9 rounded-2xl border p-1;
+ }
+
+ .cn-menubar-trigger {
+ @apply hover:bg-muted aria-expanded:bg-muted rounded-xl px-2.5 py-1 text-sm font-medium;
+ }
+
+ .cn-menubar-content {
+ @apply bg-popover text-popover-foreground data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/5 min-w-48 rounded-2xl p-1 shadow-2xl ring-1 duration-100;
+ }
+
+ .cn-menubar-content-logical {
+ @apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;
+ }
+
+ .cn-menubar-item {
+ @apply focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:text-destructive! not-data-[variant=destructive]:focus:**:text-accent-foreground gap-2.5 rounded-xl px-3 py-2 text-sm data-disabled:opacity-50 data-inset:pl-9.5 [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-menubar-checkbox-item {
+ @apply focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground gap-2.5 rounded-xl py-2 pr-3 pl-9.5 text-sm data-inset:pl-9.5;
+ }
+
+ .cn-menubar-checkbox-item-indicator {
+ @apply left-3 size-4 [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-menubar-radio-item {
+ @apply focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground gap-2.5 rounded-xl py-2 pr-3 pl-9.5 text-sm data-disabled:opacity-50 data-inset:pl-9.5 [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-menubar-radio-item-indicator {
+ @apply left-3 size-4 [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-menubar-label {
+ @apply text-muted-foreground px-3.5 py-2.5 text-xs data-inset:pl-9.5;
+ }
+
+ .cn-menubar-separator {
+ @apply bg-border/50;
+ }
+
+ .cn-menubar-shortcut {
+ @apply text-muted-foreground group-focus/menubar-item:text-accent-foreground text-xs tracking-widest;
+ }
+
+ .cn-menubar-sub-trigger {
+ @apply focus:bg-accent focus:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground gap-2 rounded-xl px-3 py-2 text-sm data-inset:pl-9.5 [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-menubar-sub-content {
+ @apply bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/5 min-w-32 rounded-2xl p-1 shadow-2xl ring-1 duration-100;
+ }
+
+ /* MARK: Navigation Menu */
+ .cn-navigation-menu {
+ @apply max-w-max;
+ }
+
+ .cn-navigation-menu-list {
+ @apply gap-0;
+ }
+
+ .cn-navigation-menu-trigger {
+ @apply bg-background hover:bg-muted focus:bg-muted data-open:hover:bg-muted data-open:focus:bg-muted data-open:bg-muted/50 focus-visible:ring-ring/50 data-popup-open:bg-muted/50 data-popup-open:hover:bg-muted rounded-2xl px-4.5 py-2.5 text-sm font-medium transition-all focus-visible:ring-[3px] focus-visible:outline-1 disabled:opacity-50;
+ }
+
+ .cn-navigation-menu-trigger-icon {
+ @apply relative top-px ml-1 size-3 transition duration-300 group-data-open/navigation-menu-trigger:rotate-180 group-data-popup-open/navigation-menu-trigger:rotate-180;
+ }
+
+ .cn-navigation-menu-content {
+ @apply data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:data-open:animate-in group-data-[viewport=false]/navigation-menu:data-closed:animate-out group-data-[viewport=false]/navigation-menu:data-closed:zoom-out-95 group-data-[viewport=false]/navigation-menu:data-open:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-open:fade-in-0 group-data-[viewport=false]/navigation-menu:data-closed:fade-out-0 group-data-[viewport=false]/navigation-menu:ring-foreground/5 p-2.5 pr-3 ease-[cubic-bezier(0.22,1,0.36,1)] group-data-[viewport=false]/navigation-menu:rounded-2xl group-data-[viewport=false]/navigation-menu:shadow-2xl group-data-[viewport=false]/navigation-menu:ring-1 group-data-[viewport=false]/navigation-menu:duration-300;
+ }
+
+ .cn-navigation-menu-viewport {
+ @apply bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:zoom-out-95 data-open:zoom-in-90 ring-foreground/5 rounded-2xl shadow-2xl ring-1 duration-100;
+ }
+
+ .cn-navigation-menu-link {
+ @apply data-[active=true]:focus:bg-muted data-[active=true]:hover:bg-muted data-[active=true]:bg-muted/50 focus-visible:ring-ring/50 hover:bg-muted focus:bg-muted flex items-center gap-1.5 rounded-xl p-3 text-sm transition-all outline-none focus-visible:ring-[3px] focus-visible:outline-1 [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-navigation-menu-indicator {
+ @apply data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in;
+ }
+
+ .cn-navigation-menu-indicator-arrow {
+ @apply bg-border rounded-tl-sm shadow-md;
+ }
+
+ .cn-navigation-menu-positioner {
+ @apply transition-[top,left,right,bottom] duration-300 ease-[cubic-bezier(0.22,1,0.36,1)] data-[side=bottom]:before:top-[-10px] data-[side=bottom]:before:right-0 data-[side=bottom]:before:left-0;
+ }
+
+ .cn-navigation-menu-popup {
+ @apply bg-popover text-popover-foreground ring-foreground/5 rounded-2xl shadow ring-1 transition-all ease-[cubic-bezier(0.22,1,0.36,1)] outline-none data-ending-style:scale-90 data-ending-style:opacity-0 data-ending-style:duration-150 data-starting-style:scale-90 data-starting-style:opacity-0;
+ }
+
+ /* MARK: Native Select */
+ .cn-native-select {
+ @apply border-input bg-input/30 placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 dark:hover:bg-input/50 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 h-9 w-full min-w-0 appearance-none rounded-4xl border py-1 pr-8 pl-3 text-sm transition-colors select-none focus-visible:ring-[3px] aria-invalid:ring-[3px] data-[size=sm]:h-8;
+ }
+
+ .cn-native-select-icon {
+ @apply text-muted-foreground top-1/2 right-3.5 size-4 -translate-y-1/2;
+ }
+
+ /* MARK: Pagination */
+ .cn-pagination-content {
+ @apply gap-1;
+ }
+
+ .cn-pagination-ellipsis {
+ @apply size-9 items-center justify-center [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-pagination-previous {
+ @apply pl-2!;
+ }
+
+ .cn-pagination-next {
+ @apply pr-2!;
+ }
+
+ /* MARK: Popover */
+ .cn-popover-content {
+ @apply bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/5 flex flex-col gap-4 rounded-2xl p-4 text-sm shadow-2xl ring-1 duration-100;
+ }
+
+ .cn-popover-content-logical {
+ @apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;
+ }
+
+ .cn-popover-header {
+ @apply flex flex-col gap-1 text-sm;
+ }
+
+ .cn-popover-title {
+ @apply text-base font-medium;
+ }
+
+ .cn-popover-description {
+ @apply text-muted-foreground;
+ }
+
+ /* MARK: Progress */
+ .cn-progress {
+ @apply bg-muted h-3 rounded-4xl;
+ }
+
+ .cn-progress-track {
+ @apply bg-muted h-3 rounded-4xl;
+ }
+
+ .cn-progress-indicator {
+ @apply bg-primary;
+ }
+
+ .cn-progress-label {
+ @apply text-sm font-medium;
+ }
+
+ .cn-progress-value {
+ @apply text-muted-foreground ml-auto text-sm tabular-nums;
+ }
+
+ /* MARK: Radio Group */
+ .cn-radio-group {
+ @apply grid gap-3;
+ }
+
+ .cn-radio-group-item {
+ @apply border-input text-primary dark:bg-input/30 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 data-checked:bg-primary data-checked:border-primary flex size-4 rounded-full transition-none focus-visible:ring-[3px] aria-invalid:ring-[3px];
+ }
+
+ .cn-radio-group-indicator {
+ @apply group-aria-invalid/radio-group-item:text-destructive flex size-4 items-center justify-center text-white;
+ }
+
+ .cn-radio-group-indicator-icon {
+ @apply absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 fill-current;
+ }
+
+ /* MARK: Resizable */
+ .cn-resizable-handle-icon {
+ @apply bg-border h-6 w-1 rounded-lg;
+ }
+
+ /* MARK: Scroll Area */
+ .cn-scroll-area-scrollbar {
+ @apply data-horizontal:h-2.5 data-horizontal:flex-col data-horizontal:border-t data-horizontal:border-t-transparent data-vertical:h-full data-vertical:w-2.5 data-vertical:border-l data-vertical:border-l-transparent;
+ }
+
+ .cn-scroll-area-thumb {
+ @apply rounded-full;
+ }
+
+ /* MARK: Select */
+ .cn-select-trigger {
+ @apply border-input data-placeholder:text-muted-foreground bg-input/30 dark:hover:bg-input/50 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 gap-1.5 rounded-4xl border px-3 py-2 text-sm transition-colors focus-visible:ring-[3px] aria-invalid:ring-[3px] data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:flex *:data-[slot=select-value]:gap-1.5 [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-select-value {
+ @apply flex flex-1 text-left;
+ }
+
+ .cn-select-trigger-icon {
+ @apply text-muted-foreground size-4;
+ }
+
+ .cn-select-content {
+ @apply bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/5 min-w-36 rounded-2xl shadow-2xl ring-1 duration-100;
+ }
+
+ .cn-select-content-logical {
+ @apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;
+ }
+
+ .cn-select-label {
+ @apply text-muted-foreground px-3 py-2.5 text-xs;
+ }
+
+ .cn-select-item {
+ @apply focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground gap-2.5 rounded-xl py-2 pr-8 pl-3 text-sm [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2;
+ }
+
+ .cn-select-item-indicator {
+ @apply pointer-events-none absolute right-2 flex size-4 items-center justify-center;
+ }
+
+ .cn-select-group {
+ @apply scroll-my-1 p-1;
+ }
+
+ .cn-select-item-text {
+ @apply flex flex-1 gap-2;
+ }
+
+ .cn-select-separator {
+ @apply bg-border/50 -mx-1 my-1 h-px;
+ }
+
+ .cn-select-scroll-up-button {
+ @apply bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-select-scroll-down-button {
+ @apply bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ /* MARK: Separator */
+ .cn-separator {
+ @apply bg-border shrink-0;
+ }
+
+ .cn-separator-horizontal {
+ @apply h-px w-full;
+ }
+
+ .cn-separator-vertical {
+ @apply h-full w-px;
+ }
+
+ /* MARK: Sheet */
+ .cn-sheet-overlay {
+ @apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 bg-black/80 duration-100 data-ending-style:opacity-0 data-starting-style:opacity-0 supports-backdrop-filter:backdrop-blur-xs;
+ }
+
+ .cn-sheet-content {
+ @apply bg-background data-open:animate-in data-closed:animate-out data-[side=right]:data-closed:slide-out-to-right-10 data-[side=right]:data-open:slide-in-from-right-10 data-[side=left]:data-closed:slide-out-to-left-10 data-[side=left]:data-open:slide-in-from-left-10 data-[side=top]:data-closed:slide-out-to-top-10 data-[side=top]:data-open:slide-in-from-top-10 data-closed:fade-out-0 data-open:fade-in-0 data-[side=bottom]:data-closed:slide-out-to-bottom-10 data-[side=bottom]:data-open:slide-in-from-bottom-10 fixed z-50 flex flex-col bg-clip-padding text-sm shadow-lg transition duration-200 ease-in-out data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm;
+ }
+
+ .cn-sheet-close {
+ @apply absolute top-4 right-4;
+ }
+
+ .cn-sheet-header {
+ @apply gap-1.5 p-6;
+ }
+
+ .cn-sheet-footer {
+ @apply gap-2 p-6;
+ }
+
+ .cn-sheet-title {
+ @apply text-foreground text-base font-medium;
+ }
+
+ .cn-sheet-description {
+ @apply text-muted-foreground text-sm;
+ }
+
+ /* MARK: Sidebar */
+ .cn-sidebar-gap {
+ @apply transition-[width] duration-200 ease-linear;
+ }
+
+ .cn-sidebar-inner {
+ @apply bg-sidebar group-data-[variant=floating]:ring-sidebar-border group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:shadow-sm group-data-[variant=floating]:ring-1;
+ }
+
+ .cn-sidebar-rail {
+ @apply hover:after:bg-sidebar-border;
+ }
+
+ .cn-sidebar-inset {
+ @apply bg-background md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2;
+ }
+
+ .cn-sidebar-input {
+ @apply bg-background h-8 w-full shadow-none;
+ }
+
+ .cn-sidebar-header {
+ @apply gap-2 p-2 [--radius:var(--radius-xl)];
+ }
+
+ .cn-sidebar-content {
+ @apply no-scrollbar gap-2 [--radius:var(--radius-xl)];
+ }
+
+ .cn-sidebar-footer {
+ @apply gap-2 p-2;
+ }
+
+ .cn-sidebar-separator {
+ @apply bg-sidebar-border mx-2;
+ }
+
+ .cn-sidebar-group {
+ @apply p-2;
+ }
+
+ .cn-sidebar-menu {
+ @apply gap-1;
+ }
+
+ .cn-sidebar-group-content {
+ @apply text-sm;
+ }
+
+ .cn-sidebar-group-label {
+ @apply text-sidebar-foreground/70 ring-sidebar-ring h-8 rounded-md px-2 text-xs font-medium transition-[margin,opacity] duration-200 ease-linear group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0 focus-visible:ring-2 [&>svg]:size-4;
+ }
+
+ .cn-sidebar-group-action {
+ @apply text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 right-3 w-5 rounded-md p-0 focus-visible:ring-2 [&>svg]:size-4;
+ }
+
+ .cn-sidebar-menu-button {
+ @apply ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground data-open:hover:bg-sidebar-accent data-open:hover:text-sidebar-accent-foreground gap-2 rounded-lg px-3 py-2 text-left text-sm transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! focus-visible:ring-2 data-active:font-medium;
+ }
+
+ .cn-sidebar-menu-button-variant-default {
+ @apply hover:bg-sidebar-accent hover:text-sidebar-accent-foreground;
+ }
+
+ .cn-sidebar-menu-button-variant-outline {
+ @apply bg-background hover:bg-sidebar-accent hover:text-sidebar-accent-foreground shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))];
+ }
+
+ .cn-sidebar-menu-button-size-default {
+ @apply h-9 text-sm;
+ }
+
+ .cn-sidebar-menu-button-size-sm {
+ @apply h-8 text-xs;
+ }
+
+ .cn-sidebar-menu-button-size-lg {
+ @apply h-14 px-3 text-sm group-data-[collapsible=icon]:p-0!;
+ }
+
+ .cn-sidebar-menu-action {
+ @apply text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground peer-hover/menu-button:text-sidebar-accent-foreground absolute top-1.5 right-1 aspect-square w-5 rounded-md p-0 peer-data-[size=default]/menu-button:top-2 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1 focus-visible:ring-2 [&>svg]:size-4;
+ }
+
+ .cn-sidebar-menu-badge {
+ @apply text-sidebar-foreground peer-hover/menu-button:text-sidebar-accent-foreground peer-data-active/menu-button:text-sidebar-accent-foreground pointer-events-none absolute right-1 flex h-5 min-w-5 rounded-md px-1 text-xs font-medium peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1;
+ }
+
+ .cn-sidebar-menu-skeleton {
+ @apply h-8 gap-2 rounded-md px-2;
+ }
+
+ .cn-sidebar-menu-skeleton-icon {
+ @apply size-4 rounded-md;
+ }
+
+ .cn-sidebar-menu-skeleton-text {
+ @apply h-4;
+ }
+
+ .cn-sidebar-menu-sub {
+ @apply border-sidebar-border mx-3.5 translate-x-px gap-1 border-l px-2.5 py-0.5 group-data-[collapsible=icon]:hidden;
+ }
+
+ .cn-sidebar-menu-sub-button {
+ @apply text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground h-7 gap-2 rounded-md px-2 focus-visible:ring-2 data-[size=md]:text-sm data-[size=sm]:text-xs [&>svg]:size-4;
+ }
+
+ /* MARK: Skeleton */
+ .cn-skeleton {
+ @apply bg-muted rounded-xl;
+ }
+
+ /* MARK: Slider */
+ .cn-slider {
+ @apply data-vertical:min-h-40;
+ }
+
+ .cn-slider-track {
+ @apply bg-muted rounded-4xl data-horizontal:h-3 data-horizontal:w-full data-vertical:h-full data-vertical:w-3;
+ }
+
+ .cn-slider-range {
+ @apply bg-primary;
+ }
+
+ .cn-slider-thumb {
+ @apply border-primary ring-ring/50 size-4 rounded-4xl border bg-white shadow-sm transition-colors hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden;
+ }
+
+ /* MARK: Sonner */
+ .cn-toast {
+ @apply rounded-2xl;
+ }
+
+ /* MARK: Switch */
+ .cn-switch {
+ @apply data-checked:bg-primary data-unchecked:bg-input focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 dark:data-unchecked:bg-input/80 shrink-0 rounded-full border border-transparent focus-visible:ring-[3px] aria-invalid:ring-[3px] data-[size=default]:h-[18.4px] data-[size=default]:w-[32px] data-[size=sm]:h-[14px] data-[size=sm]:w-[24px];
+ }
+
+ .cn-switch-thumb {
+ @apply bg-background dark:data-unchecked:bg-foreground dark:data-checked:bg-primary-foreground rounded-full group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 group-data-[size=default]/switch:data-checked:translate-x-[calc(100%-2px)] group-data-[size=sm]/switch:data-checked:translate-x-[calc(100%-2px)] group-data-[size=default]/switch:data-unchecked:translate-x-0 group-data-[size=sm]/switch:data-unchecked:translate-x-0;
+ }
+
+ /* MARK: Table */
+ .cn-table-container {
+ @apply relative w-full overflow-x-auto;
+ }
+
+ .cn-table {
+ @apply w-full caption-bottom text-sm;
+ }
+
+ .cn-table-header {
+ @apply [&_tr]:border-b;
+ }
+
+ .cn-table-body {
+ @apply [&_tr:last-child]:border-0;
+ }
+
+ .cn-table-footer {
+ @apply bg-muted/50 border-t font-medium [&>tr]:last:border-b-0;
+ }
+
+ .cn-table-row {
+ @apply hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors;
+ }
+
+ .cn-table-head {
+ @apply text-foreground h-12 px-3 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0;
+ }
+
+ .cn-table-cell {
+ @apply p-3 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0;
+ }
+
+ .cn-table-caption {
+ @apply text-muted-foreground mt-4 text-sm;
+ }
+
+ /* MARK: Tabs */
+ .cn-tabs {
+ @apply gap-2;
+ }
+
+ .cn-tabs-list {
+ @apply rounded-4xl p-[3px] group-data-horizontal/tabs:h-9 group-data-vertical/tabs:rounded-2xl data-[variant=line]:rounded-none;
+ }
+
+ .cn-tabs-trigger {
+ @apply gap-1.5 rounded-xl border border-transparent px-2 py-1 text-sm font-medium group-data-vertical/tabs:px-2.5 group-data-vertical/tabs:py-1.5 [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-tabs-content {
+ @apply text-sm;
+ }
+
+ /* MARK: Textarea */
+ .cn-textarea {
+ @apply border-input bg-input/30 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 resize-none rounded-xl border px-3 py-3 text-base transition-colors focus-visible:ring-[3px] aria-invalid:ring-[3px] md:text-sm;
+ }
+
+ /* MARK: Toggle */
+ .cn-toggle {
+ @apply hover:text-foreground aria-pressed:bg-muted focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive gap-1 rounded-4xl text-sm font-medium transition-colors [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-toggle-variant-default {
+ @apply bg-transparent;
+ }
+
+ .cn-toggle-variant-outline {
+ @apply border-input hover:bg-muted border bg-transparent;
+ }
+
+ .cn-toggle-size-default {
+ @apply h-9 min-w-9 rounded-[min(var(--radius-2xl),12px)] px-2.5;
+ }
+
+ .cn-toggle-size-sm {
+ @apply h-8 min-w-8 px-3;
+ }
+
+ .cn-toggle-size-lg {
+ @apply h-10 min-w-10 px-2.5;
+ }
+
+ /* MARK: Toggle Group */
+ .cn-toggle-group {
+ @apply data-[spacing=0]:data-[variant=outline]:rounded-4xl;
+ }
+
+ .cn-toggle-group-item {
+ @apply data-[state=on]:bg-muted group-data-[spacing=0]/toggle-group:rounded-none group-data-[spacing=0]/toggle-group:px-3 group-data-[spacing=0]/toggle-group:shadow-none group-data-horizontal/toggle-group:data-[spacing=0]:first:rounded-l-4xl group-data-vertical/toggle-group:data-[spacing=0]:first:rounded-t-xl group-data-horizontal/toggle-group:data-[spacing=0]:last:rounded-r-4xl group-data-vertical/toggle-group:data-[spacing=0]:last:rounded-b-xl;
+ }
+
+ /* MARK: Tooltip */
+ .cn-tooltip-content {
+ @apply data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 rounded-2xl px-3 py-1.5 text-xs **:data-[slot=kbd]:rounded-4xl;
+ }
+
+ .cn-tooltip-content-logical {
+ @apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;
+ }
+
+ .cn-tooltip-arrow {
+ @apply size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px] data-[side=left]:translate-x-[-1.5px] data-[side=right]:translate-x-[1.5px];
+ }
+
+ .cn-tooltip-arrow-logical {
+ @apply data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:translate-x-[1.5px] data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-right-1 data-[side=inline-start]:translate-x-[-1.5px] data-[side=inline-start]:-translate-y-1/2;
+ }
+
+ /* MARK: Input Group */
+ .cn-input-group {
+ @apply border-input bg-input/30 has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[[data-slot][aria-invalid=true]]:border-destructive dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40 h-9 rounded-4xl border transition-colors in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-data-[align=block-end]:rounded-2xl has-data-[align=block-start]:rounded-2xl has-[[data-slot=input-group-control]:focus-visible]:ring-[3px] has-[[data-slot][aria-invalid=true]]:ring-[3px] has-[textarea]:rounded-xl has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=inline-end]]:[&>input]:pr-1.5 has-[>[data-align=inline-start]]:[&>input]:pl-1.5;
+ }
+
+ .cn-input-group-addon {
+ @apply text-muted-foreground **:data-[slot=kbd]:bg-muted-foreground/10 h-auto gap-2 py-2 text-sm font-medium group-data-[disabled=true]/input-group:opacity-50 **:data-[slot=kbd]:rounded-4xl **:data-[slot=kbd]:px-1.5 [&>svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-input-group-addon-align-inline-start {
+ @apply pl-3 has-[>button]:-ml-1 has-[>kbd]:ml-[-0.15rem];
+ }
+
+ .cn-input-group-addon-align-inline-end {
+ @apply pr-3 has-[>button]:-mr-1 has-[>kbd]:mr-[-0.15rem];
+ }
+
+ .cn-input-group-addon-align-block-start {
+ @apply px-3 pt-3 group-has-[>input]/input-group:pt-3 [.border-b]:pb-3;
+ }
+
+ .cn-input-group-addon-align-block-end {
+ @apply px-3 pb-3 group-has-[>input]/input-group:pb-3 [.border-t]:pt-3;
+ }
+
+ .cn-input-group-button {
+ @apply gap-2 rounded-4xl text-sm;
+ }
+
+ .cn-input-group-button-size-xs {
+ @apply h-6 gap-1 px-1.5 [&>svg:not([class*='size-'])]:size-3.5;
+ }
+
+ .cn-input-group-button-size-icon-xs {
+ @apply size-6 p-0 has-[>svg]:p-0;
+ }
+
+ .cn-input-group-button-size-icon-sm {
+ @apply size-8 p-0 has-[>svg]:p-0;
+ }
+
+ .cn-input-group-text {
+ @apply text-muted-foreground gap-2 text-sm [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-input-group-input {
+ @apply rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 aria-invalid:ring-0 dark:bg-transparent;
+ }
+
+ .cn-input-group-textarea {
+ @apply rounded-none border-0 bg-transparent py-2 shadow-none ring-0 focus-visible:ring-0 aria-invalid:ring-0 dark:bg-transparent;
+ }
+}
diff --git a/assets/css/presets/mira.css b/assets/css/presets/mira.css
new file mode 100644
index 0000000..5cc580c
--- /dev/null
+++ b/assets/css/presets/mira.css
@@ -0,0 +1,1364 @@
+@layer components {
+ .style-mira {
+ /* MARK: Accordion */
+ .cn-accordion {
+ @apply overflow-hidden rounded-md border;
+ }
+
+ .cn-accordion-item {
+ @apply data-open:bg-muted/50 not-last:border-b;
+ }
+
+ .cn-accordion-trigger {
+ @apply **:data-[slot=accordion-trigger-icon]:text-muted-foreground gap-6 p-2 text-left text-xs/relaxed font-medium hover:underline **:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4;
+ }
+
+ .cn-accordion-content {
+ @apply data-open:animate-accordion-down data-closed:animate-accordion-up px-2 text-xs/relaxed;
+ }
+
+ .cn-accordion-content-inner {
+ @apply pt-0 pb-4;
+ }
+
+ /* MARK: Alert Dialog */
+ .cn-alert-dialog-overlay {
+ @apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 bg-black/80 duration-100 supports-backdrop-filter:backdrop-blur-xs;
+ }
+
+ .cn-alert-dialog-content {
+ @apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 bg-background ring-foreground/10 gap-3 rounded-xl p-4 ring-1 duration-100 data-[size=default]:max-w-xs data-[size=sm]:max-w-64 data-[size=default]:sm:max-w-sm;
+ }
+
+ .cn-alert-dialog-header {
+ @apply grid grid-rows-[auto_1fr] place-items-center gap-1 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-4 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr];
+ }
+
+ .cn-alert-dialog-media {
+ @apply bg-muted mb-2 inline-flex size-8 items-center justify-center rounded-md sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-alert-dialog-title {
+ @apply text-sm font-medium sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2;
+ }
+
+ .cn-alert-dialog-description {
+ @apply text-muted-foreground *:[a]:hover:text-foreground text-xs/relaxed text-balance md:text-pretty *:[a]:underline *:[a]:underline-offset-3;
+ }
+
+ /* MARK: Alert */
+ .cn-alert {
+ @apply grid gap-0.5 rounded-lg border px-2 py-1.5 text-left text-xs/relaxed has-data-[slot=alert-action]:relative has-data-[slot=alert-action]:pr-18 has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-1.5 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-3.5;
+ }
+
+ .cn-alert-variant-default {
+ @apply bg-card text-card-foreground;
+ }
+
+ .cn-alert-variant-destructive {
+ @apply text-destructive bg-card *:data-[slot=alert-description]:text-destructive/90 *:[svg]:text-current;
+ }
+
+ .cn-alert-title {
+ @apply font-medium group-has-[>svg]/alert:col-start-2;
+ }
+
+ .cn-alert-description {
+ @apply text-muted-foreground text-xs/relaxed text-balance md:text-pretty [&_p:not(:last-child)]:mb-4;
+ }
+
+ .cn-alert-action {
+ @apply absolute top-1.5 right-2;
+ }
+
+ /* MARK: Avatar */
+ .cn-avatar {
+ @apply size-8 rounded-full after:rounded-full data-[size=lg]:size-10 data-[size=sm]:size-6;
+ }
+
+ .cn-avatar-fallback {
+ @apply bg-muted text-muted-foreground rounded-full;
+ }
+
+ .cn-avatar-image {
+ @apply rounded-full;
+ }
+
+ .cn-avatar-badge {
+ @apply bg-primary text-primary-foreground ring-background;
+ }
+
+ .cn-avatar-group-count {
+ @apply bg-muted text-muted-foreground size-8 rounded-full text-xs/relaxed group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3;
+ }
+
+ /* MARK: Badge */
+ .cn-badge {
+ @apply h-5 gap-1 rounded-full border border-transparent px-2 py-0.5 text-[0.625rem] font-medium transition-all has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&>svg]:size-2.5!;
+ }
+
+ .cn-badge-variant-default {
+ @apply bg-primary text-primary-foreground [a]:hover:bg-primary/80;
+ }
+
+ .cn-badge-variant-secondary {
+ @apply bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80;
+ }
+
+ .cn-badge-variant-outline {
+ @apply border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground bg-input/20 dark:bg-input/30;
+ }
+
+ .cn-badge-variant-destructive {
+ @apply bg-destructive/10 [a]:hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 text-destructive dark:bg-destructive/20;
+ }
+
+ .cn-badge-variant-ghost {
+ @apply hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50;
+ }
+
+ .cn-badge-variant-link {
+ @apply text-primary underline-offset-4 hover:underline;
+ }
+
+ /* MARK: Breadcrumb */
+ .cn-breadcrumb-list {
+ @apply text-muted-foreground gap-1.5 text-xs/relaxed;
+ }
+
+ .cn-breadcrumb-item {
+ @apply gap-1;
+ }
+
+ .cn-breadcrumb-link {
+ @apply hover:text-foreground transition-colors;
+ }
+
+ .cn-breadcrumb-page {
+ @apply text-foreground font-normal;
+ }
+
+ .cn-breadcrumb-separator {
+ @apply [&>svg]:size-3.5;
+ }
+
+ .cn-breadcrumb-ellipsis {
+ @apply size-4 [&>svg]:size-3.5;
+ }
+
+ /* MARK: Button */
+ .cn-button {
+ @apply focus-visible:border-ring focus-visible:ring-ring/30 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-md border border-transparent bg-clip-padding text-xs/relaxed font-medium focus-visible:ring-2 aria-invalid:ring-2 [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-button-variant-default {
+ @apply bg-primary text-primary-foreground hover:bg-primary/80;
+ }
+
+ .cn-button-variant-outline {
+ @apply border-border dark:bg-input/30 hover:bg-input/50 hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground;
+ }
+
+ .cn-button-variant-secondary {
+ @apply bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground;
+ }
+
+ .cn-button-variant-ghost {
+ @apply hover:bg-muted hover:text-foreground dark:hover:bg-muted/50 aria-expanded:bg-muted aria-expanded:text-foreground;
+ }
+
+ .cn-button-variant-destructive {
+ @apply bg-destructive/10 hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/20 text-destructive focus-visible:border-destructive/40 dark:hover:bg-destructive/30;
+ }
+
+ .cn-button-variant-link {
+ @apply text-primary underline-offset-4 hover:underline;
+ }
+
+ .cn-button-size-xs {
+ @apply h-5 gap-1 rounded-sm px-2 text-[0.625rem] has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-2.5;
+ }
+
+ .cn-button-size-sm {
+ @apply h-6 gap-1 px-2 text-xs/relaxed has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3;
+ }
+
+ .cn-button-size-default {
+ @apply h-7 gap-1 px-2 text-xs/relaxed has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5;
+ }
+
+ .cn-button-size-lg {
+ @apply h-8 gap-1 px-2.5 text-xs/relaxed has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2 [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-button-size-icon-xs {
+ @apply size-5 rounded-sm [&_svg:not([class*='size-'])]:size-2.5;
+ }
+
+ .cn-button-size-icon-sm {
+ @apply size-6 [&_svg:not([class*='size-'])]:size-3;
+ }
+
+ .cn-button-size-icon {
+ @apply size-7 [&_svg:not([class*='size-'])]:size-3.5;
+ }
+
+ .cn-button-size-icon-lg {
+ @apply size-8 [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ /* MARK: Button Group */
+ .cn-button-group {
+ @apply has-[>[data-slot=button-group]]:gap-2 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-md;
+ }
+
+ .cn-button-group-orientation-horizontal {
+ @apply [&>[data-slot]:not(:has(~[data-slot]))]:rounded-r-md!;
+ }
+
+ .cn-button-group-orientation-vertical {
+ @apply [&>[data-slot]:not(:has(~[data-slot]))]:rounded-b-md!;
+ }
+
+ .cn-button-group-text {
+ @apply bg-muted gap-2 rounded-md border px-2.5 text-xs/relaxed font-medium [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-button-group-separator {
+ @apply bg-input;
+ }
+
+ /* MARK: Calendar */
+ .cn-calendar {
+ @apply p-3 [--cell-radius:var(--radius-md)] [--cell-size:--spacing(6)];
+ }
+
+ .cn-calendar-dropdown-root {
+ @apply has-focus:border-ring border-input has-focus:ring-ring/30 border has-focus:ring-2;
+ }
+
+ .cn-calendar-caption-label {
+ @apply bg-input/20 dark:bg-input/30 h-7 pr-1.5 pl-2;
+ }
+
+ /* MARK: Card */
+ .cn-card {
+ @apply ring-foreground/10 bg-card text-card-foreground gap-4 overflow-hidden rounded-lg py-4 text-xs/relaxed ring-1 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 *:[img:first-child]:rounded-t-lg *:[img:last-child]:rounded-b-lg;
+ }
+
+ .cn-card-header {
+ @apply gap-1 rounded-t-lg px-4 group-data-[size=sm]/card:px-3 [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3;
+ }
+
+ .cn-card-title {
+ @apply text-sm font-medium;
+ }
+
+ .cn-card-description {
+ @apply text-muted-foreground text-xs/relaxed;
+ }
+
+ .cn-card-content {
+ @apply px-4 group-data-[size=sm]/card:px-3;
+ }
+
+ .cn-card-footer {
+ @apply rounded-b-lg px-4 group-data-[size=sm]/card:px-3 [.border-t]:pt-4 group-data-[size=sm]/card:[.border-t]:pt-3;
+ }
+
+ /* MARK: Carousel */
+ .cn-carousel-previous {
+ @apply rounded-full;
+ }
+
+ .cn-carousel-next {
+ @apply rounded-full;
+ }
+
+ /* MARK: Chart */
+ .cn-chart-tooltip {
+ @apply border-border/50 bg-background gap-1.5 rounded-lg border px-2.5 py-1.5 text-xs/relaxed shadow-xl;
+ }
+
+ /* MARK: Checkbox */
+ .cn-checkbox {
+ @apply border-input dark:bg-input/30 data-checked:bg-primary data-checked:text-primary-foreground dark:data-checked:bg-primary data-checked:border-primary aria-invalid:aria-checked:border-primary aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 focus-visible:border-ring focus-visible:ring-ring/30 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 flex size-4 items-center justify-center rounded-[4px] border transition-shadow group-has-disabled/field:opacity-50 focus-visible:ring-2 aria-invalid:ring-2;
+ }
+
+ .cn-checkbox-indicator {
+ @apply [&>svg]:size-3.5;
+ }
+
+ /* MARK: Combobox */
+ .cn-combobox-content {
+ @apply bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 *:data-[slot=input-group]:bg-input/20 dark:bg-popover max-h-72 min-w-32 overflow-hidden rounded-lg shadow-md ring-1 duration-100 *:data-[slot=input-group]:m-1 *:data-[slot=input-group]:mb-0 *:data-[slot=input-group]:h-7 *:data-[slot=input-group]:border-none *:data-[slot=input-group]:shadow-none;
+ }
+
+ .cn-combobox-content-logical {
+ @apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;
+ }
+
+ .cn-combobox-label {
+ @apply text-muted-foreground px-2 py-1.5 text-xs;
+ }
+
+ .cn-combobox-item {
+ @apply data-highlighted:bg-accent data-highlighted:text-accent-foreground not-data-[variant=destructive]:data-highlighted:**:text-accent-foreground min-h-7 gap-2 rounded-md px-2 py-1 text-xs/relaxed [&_svg:not([class*='size-'])]:size-3.5;
+ }
+
+ .cn-combobox-item-indicator {
+ @apply pointer-events-none absolute right-2 flex items-center justify-center;
+ }
+
+ .cn-combobox-empty {
+ @apply text-muted-foreground hidden w-full justify-center py-2 text-center text-xs/relaxed group-data-empty/combobox-content:flex;
+ }
+
+ .cn-combobox-list {
+ @apply no-scrollbar max-h-[min(calc(--spacing(72)---spacing(9)),calc(var(--available-height)---spacing(9)))] scroll-py-1 overflow-y-auto p-1 data-empty:p-0;
+ }
+
+ .cn-combobox-item-text {
+ @apply flex flex-1 gap-2;
+ }
+
+ .cn-combobox-separator {
+ @apply bg-border/50 -mx-1 my-1 h-px;
+ }
+
+ .cn-combobox-trigger {
+ @apply [&_svg:not([class*='size-'])]:size-3.5;
+ }
+
+ .cn-combobox-trigger-icon {
+ @apply text-muted-foreground size-3.5;
+ }
+
+ .cn-combobox-chips {
+ @apply bg-input/20 dark:bg-input/30 border-input focus-within:border-ring focus-within:ring-ring/30 has-aria-invalid:ring-destructive/20 dark:has-aria-invalid:ring-destructive/40 has-aria-invalid:border-destructive dark:has-aria-invalid:border-destructive/50 flex min-h-7 flex-wrap items-center gap-1 rounded-md border bg-clip-padding px-2 py-0.5 text-xs/relaxed transition-colors focus-within:ring-2 has-aria-invalid:ring-2 has-data-[slot=combobox-chip]:px-1;
+ }
+
+ .cn-combobox-chip {
+ @apply bg-muted-foreground/10 text-foreground flex h-[calc(--spacing(4.75))] w-fit items-center justify-center gap-1 rounded-[calc(var(--radius-sm)-2px)] px-1.5 text-xs/relaxed font-medium whitespace-nowrap has-data-[slot=combobox-chip-remove]:pr-0;
+ }
+
+ .cn-combobox-chip-remove {
+ @apply -ml-1 opacity-50 hover:opacity-100;
+ }
+
+ /* MARK: Command */
+ .cn-command {
+ @apply bg-popover text-popover-foreground rounded-xl p-1;
+ }
+
+ .cn-command-dialog {
+ @apply rounded-xl! p-0;
+ }
+
+ .cn-command-input-wrapper {
+ @apply p-1 pb-0;
+ }
+
+ .cn-command-input-group {
+ @apply bg-input/20 dark:bg-input/30 h-8!;
+ }
+
+ .cn-command-input-icon {
+ @apply size-3.5 shrink-0 opacity-50;
+ }
+
+ .cn-command-input {
+ @apply w-full text-xs/relaxed;
+ }
+
+ .cn-command-list {
+ @apply no-scrollbar max-h-72 scroll-py-1 outline-none;
+ }
+
+ .cn-command-empty {
+ @apply py-6 text-center text-xs/relaxed;
+ }
+
+ .cn-command-group {
+ @apply text-foreground **:[[cmdk-group-heading]]:text-muted-foreground overflow-hidden p-1 **:[[cmdk-group-heading]]:px-2.5 **:[[cmdk-group-heading]]:py-1.5 **:[[cmdk-group-heading]]:text-xs **:[[cmdk-group-heading]]:font-medium;
+ }
+
+ .cn-command-separator {
+ @apply bg-border/50 -mx-1 my-1 h-px;
+ }
+
+ .cn-command-item {
+ @apply data-selected:bg-muted data-selected:text-foreground data-selected:*:[svg]:text-foreground relative flex min-h-7 cursor-default items-center gap-2 rounded-md px-2.5 py-1.5 text-xs/relaxed outline-hidden select-none in-data-[slot=dialog-content]:rounded-md [&_svg:not([class*='size-'])]:size-3.5;
+ }
+
+ .cn-command-shortcut {
+ @apply text-muted-foreground group-data-selected/command-item:text-foreground ml-auto text-[0.625rem] tracking-widest;
+ }
+
+ /* MARK: Context Menu */
+ .cn-context-menu-content {
+ @apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground min-w-32 rounded-lg p-1 shadow-md ring-1 duration-100;
+ }
+
+ .cn-context-menu-content-logical {
+ @apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;
+ }
+
+ .cn-context-menu-item {
+ @apply focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:text-destructive not-data-[variant=destructive]:focus:**:text-accent-foreground min-h-7 gap-2 rounded-md px-2 py-1 text-xs/relaxed data-inset:pl-7.5 [&_svg:not([class*='size-'])]:size-3.5;
+ }
+
+ .cn-context-menu-checkbox-item {
+ @apply focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground min-h-7 gap-2 rounded-md py-1.5 pr-8 pl-2 text-xs data-inset:pl-7.5 [&_svg:not([class*='size-'])]:size-3.5;
+ }
+
+ .cn-context-menu-radio-item {
+ @apply focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground min-h-7 gap-2 rounded-md py-1.5 pr-8 pl-2 text-xs data-inset:pl-7.5 [&_svg:not([class*='size-'])]:size-3.5;
+ }
+
+ .cn-context-menu-item-indicator {
+ @apply pointer-events-none absolute right-2 flex items-center justify-center;
+ }
+
+ .cn-context-menu-label {
+ @apply text-muted-foreground px-2 py-1.5 text-xs data-inset:pl-7.5;
+ }
+
+ .cn-context-menu-separator {
+ @apply bg-border/50 -mx-1 my-1 h-px;
+ }
+
+ .cn-context-menu-shortcut {
+ @apply text-muted-foreground group-focus/context-menu-item:text-accent-foreground ml-auto text-[0.625rem] tracking-widest;
+ }
+
+ .cn-context-menu-sub-trigger {
+ @apply focus:bg-accent focus:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground min-h-7 gap-2 rounded-md px-2 py-1 text-xs data-inset:pl-7.5 [&_svg:not([class*='size-'])]:size-3.5;
+ }
+
+ .cn-context-menu-sub-content {
+ @apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground min-w-32 rounded-lg p-1 shadow-md ring-1 duration-100;
+ }
+
+ .cn-context-menu-subcontent {
+ @apply shadow-lg;
+ }
+
+ /* MARK: Dialog */
+ .cn-dialog-overlay {
+ @apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 bg-black/80 duration-100 supports-backdrop-filter:backdrop-blur-xs;
+ }
+
+ .cn-dialog-content {
+ @apply bg-background data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 ring-foreground/10 grid max-w-[calc(100%-2rem)] gap-4 rounded-xl p-4 text-xs/relaxed ring-1 duration-100 sm:max-w-sm;
+ }
+
+ .cn-dialog-close {
+ @apply absolute top-2 right-2;
+ }
+
+ .cn-dialog-header {
+ @apply gap-1;
+ }
+
+ .cn-dialog-footer {
+ @apply gap-2;
+ }
+
+ .cn-dialog-title {
+ @apply text-sm font-medium;
+ }
+
+ .cn-dialog-description {
+ @apply text-muted-foreground *:[a]:hover:text-foreground text-xs/relaxed *:[a]:underline *:[a]:underline-offset-3;
+ }
+
+ /* MARK: Drawer */
+ .cn-drawer-overlay {
+ @apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 bg-black/80 supports-backdrop-filter:backdrop-blur-xs;
+ }
+
+ .cn-drawer-content {
+ @apply before:bg-background before:border-border relative flex h-auto flex-col bg-transparent p-2 text-xs/relaxed before:absolute before:inset-2 before:-z-10 before:rounded-xl before:border data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=left]:sm:max-w-sm data-[vaul-drawer-direction=right]:sm:max-w-sm;
+ }
+
+ .cn-drawer-handle {
+ @apply bg-muted mx-auto mt-4 hidden h-1.5 w-[100px] shrink-0 rounded-full group-data-[vaul-drawer-direction=bottom]/drawer-content:block;
+ }
+
+ .cn-drawer-header {
+ @apply gap-1 p-4 group-data-[vaul-drawer-direction=bottom]/drawer-content:text-center group-data-[vaul-drawer-direction=top]/drawer-content:text-center md:text-left;
+ }
+
+ .cn-drawer-title {
+ @apply text-foreground text-sm font-medium;
+ }
+
+ .cn-drawer-description {
+ @apply text-muted-foreground text-xs/relaxed;
+ }
+
+ .cn-drawer-footer {
+ @apply gap-2 p-4;
+ }
+
+ /* MARK: Dropdown Menu */
+ .cn-dropdown-menu-content {
+ @apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground min-w-32 rounded-lg p-1 shadow-md ring-1 duration-100;
+ }
+
+ .cn-dropdown-menu-content-logical {
+ @apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;
+ }
+
+ .cn-dropdown-menu-item {
+ @apply focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:text-destructive not-data-[variant=destructive]:focus:**:text-accent-foreground min-h-7 gap-2 rounded-md px-2 py-1 text-xs/relaxed data-inset:pl-7.5 [&_svg:not([class*='size-'])]:size-3.5;
+ }
+
+ .cn-dropdown-menu-checkbox-item {
+ @apply focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground min-h-7 gap-2 rounded-md py-1.5 pr-8 pl-2 text-xs data-inset:pl-7.5 [&_svg:not([class*='size-'])]:size-3.5;
+ }
+
+ .cn-dropdown-menu-radio-item {
+ @apply focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground min-h-7 gap-2 rounded-md py-1.5 pr-8 pl-2 text-xs data-inset:pl-7.5 [&_svg:not([class*='size-'])]:size-3.5;
+ }
+
+ .cn-dropdown-menu-item-indicator {
+ @apply absolute right-2 flex items-center justify-center;
+ }
+
+ .cn-dropdown-menu-label {
+ @apply text-muted-foreground px-2 py-1.5 text-xs data-inset:pl-7.5;
+ }
+
+ .cn-dropdown-menu-separator {
+ @apply bg-border/50 -mx-1 my-1 h-px;
+ }
+
+ .cn-dropdown-menu-shortcut {
+ @apply text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground ml-auto text-[0.625rem] tracking-widest;
+ }
+
+ .cn-dropdown-menu-sub-trigger {
+ @apply focus:bg-accent focus:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground min-h-7 gap-2 rounded-md px-2 py-1 text-xs data-inset:pl-7.5 [&_svg:not([class*='size-'])]:size-3.5;
+ }
+
+ .cn-dropdown-menu-sub-content {
+ @apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground min-w-32 rounded-lg p-1 shadow-md ring-1 duration-100;
+ }
+
+ .cn-dropdown-menu-subcontent {
+ @apply shadow-lg;
+ }
+
+ /* MARK: Empty */
+ .cn-empty {
+ @apply gap-4 rounded-xl border-dashed p-6;
+ }
+
+ .cn-empty-header {
+ @apply gap-1;
+ }
+
+ .cn-empty-media {
+ @apply mb-2;
+ }
+
+ .cn-empty-media-default {
+ @apply bg-transparent;
+ }
+
+ .cn-empty-media-icon {
+ @apply bg-muted text-foreground flex size-8 shrink-0 items-center justify-center rounded-md [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-empty-title {
+ @apply text-sm font-medium tracking-tight;
+ }
+
+ .cn-empty-description {
+ @apply text-xs/relaxed;
+ }
+
+ .cn-empty-content {
+ @apply gap-2 text-xs/relaxed;
+ }
+
+ /* MARK: Field */
+ .cn-field-set {
+ @apply gap-4 has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3;
+ }
+
+ .cn-field-legend {
+ @apply mb-2 font-medium data-[variant=label]:text-xs/relaxed data-[variant=legend]:text-sm;
+ }
+
+ .cn-field-group {
+ @apply gap-4 data-[slot=checkbox-group]:gap-3 *:data-[slot=field-group]:gap-4;
+ }
+
+ .cn-field {
+ @apply data-[invalid=true]:text-destructive gap-2;
+ }
+
+ .cn-field-content {
+ @apply gap-0.5;
+ }
+
+ .cn-field-label {
+ @apply has-data-checked:bg-primary/5 dark:has-data-checked:bg-primary/10 gap-2 group-data-[disabled=true]/field:opacity-50 has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border *:data-[slot=field]:p-2;
+ }
+
+ .cn-field-title {
+ @apply gap-2 text-xs/relaxed font-medium group-data-[disabled=true]/field:opacity-50;
+ }
+
+ .cn-field-description {
+ @apply text-muted-foreground text-left text-xs/relaxed [[data-variant=legend]+&]:-mt-1.5;
+ }
+
+ .cn-field-separator {
+ @apply -my-2 h-5 text-xs/relaxed group-data-[variant=outline]/field-group:-mb-2;
+ }
+
+ .cn-field-separator-content {
+ @apply text-muted-foreground px-2;
+ }
+
+ .cn-field-error {
+ @apply text-destructive text-xs/relaxed;
+ }
+
+ /* MARK: Hover Card */
+ .cn-hover-card-content {
+ @apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground w-72 rounded-lg p-2.5 text-xs/relaxed shadow-md ring-1 duration-100;
+ }
+
+ .cn-hover-card-content-logical {
+ @apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;
+ }
+
+ /* MARK: Input */
+ .cn-input {
+ @apply bg-input/20 dark:bg-input/30 border-input focus-visible:border-ring focus-visible:ring-ring/30 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 h-7 rounded-md border px-2 py-0.5 text-sm transition-colors file:h-6 file:text-xs/relaxed file:font-medium focus-visible:ring-2 aria-invalid:ring-2 md:text-xs/relaxed;
+ }
+
+ /* MARK: Input OTP */
+ .cn-input-otp {
+ @apply gap-2;
+ }
+
+ .cn-input-otp-group {
+ @apply has-aria-invalid:ring-destructive/20 dark:has-aria-invalid:ring-destructive/40 has-aria-invalid:border-destructive rounded-md has-aria-invalid:ring-2;
+ }
+
+ .cn-input-otp-slot {
+ @apply bg-input/20 dark:bg-input/30 border-input data-[active=true]:border-ring data-[active=true]:ring-ring/30 data-[active=true]:aria-invalid:ring-destructive/20 dark:data-[active=true]:aria-invalid:ring-destructive/40 aria-invalid:border-destructive data-[active=true]:aria-invalid:border-destructive size-7 border-y border-r text-xs/relaxed transition-all outline-none first:rounded-l-md first:border-l last:rounded-r-md data-[active=true]:ring-2;
+ }
+
+ .cn-input-otp-caret-line {
+ @apply animate-caret-blink bg-foreground h-4 w-px duration-1000;
+ }
+
+ .cn-input-otp-separator {
+ @apply [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ /* MARK: Item */
+ .cn-item {
+ @apply [a]:hover:bg-muted rounded-md border text-xs/relaxed;
+ }
+
+ .cn-item-variant-default {
+ @apply border-transparent;
+ }
+
+ .cn-item-variant-outline {
+ @apply border-border;
+ }
+
+ .cn-item-variant-muted {
+ @apply bg-muted/50 border-transparent;
+ }
+
+ .cn-item-size-default {
+ @apply gap-2.5 px-3 py-2.5;
+ }
+
+ .cn-item-size-sm {
+ @apply gap-2.5 px-3 py-2.5;
+ }
+
+ .cn-item-size-xs {
+ @apply gap-2.5 px-2.5 py-2 in-data-[slot=dropdown-menu-content]:p-0;
+ }
+
+ .cn-item-media {
+ @apply gap-2 group-has-data-[slot=item-description]/item:translate-y-0.5 group-has-data-[slot=item-description]/item:self-start;
+ }
+
+ .cn-item-media-variant-default {
+ @apply bg-transparent;
+ }
+
+ .cn-item-media-variant-icon {
+ @apply [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-item-media-variant-image {
+ @apply size-8 overflow-hidden rounded-sm group-data-[size=sm]/item:size-8 group-data-[size=xs]/item:size-6 [&_img]:size-full [&_img]:object-cover;
+ }
+
+ .cn-item-content {
+ @apply gap-1 group-data-[size=xs]/item:gap-0.5;
+ }
+
+ .cn-item-title {
+ @apply gap-2 text-xs/relaxed leading-snug font-medium underline-offset-4;
+ }
+
+ .cn-item-description {
+ @apply text-muted-foreground text-left text-xs/relaxed;
+ }
+
+ .cn-item-actions {
+ @apply gap-2;
+ }
+
+ .cn-item-header {
+ @apply gap-2;
+ }
+
+ .cn-item-footer {
+ @apply gap-2;
+ }
+
+ .cn-item-group {
+ @apply gap-4 has-data-[size=sm]:gap-2.5 has-data-[size=xs]:gap-2;
+ }
+
+ .cn-item-separator {
+ @apply my-2;
+ }
+
+ /* MARK: Kbd */
+ .cn-kbd {
+ @apply bg-muted text-muted-foreground in-data-[slot=tooltip-content]:bg-background/20 in-data-[slot=tooltip-content]:text-background dark:in-data-[slot=tooltip-content]:bg-background/10 h-5 w-fit min-w-5 gap-1 rounded-xs px-1 font-sans text-[0.625rem] font-medium [&_svg:not([class*='size-'])]:size-3;
+ }
+
+ .cn-kbd-group {
+ @apply gap-1;
+ }
+
+ /* MARK: Label */
+ .cn-label {
+ @apply gap-2 text-xs/relaxed leading-none font-medium group-data-[disabled=true]:opacity-50 peer-disabled:opacity-50;
+ }
+
+ /* MARK: Menubar */
+ .cn-menubar {
+ @apply bg-background h-9 rounded-lg border p-1;
+ }
+
+ .cn-menubar-trigger {
+ @apply hover:bg-muted aria-expanded:bg-muted rounded-[calc(var(--radius-md)-2px)] px-2 py-[calc(--spacing(0.85))] text-xs/relaxed font-medium;
+ }
+
+ .cn-menubar-content {
+ @apply bg-popover text-popover-foreground data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 min-w-32 rounded-lg p-1 shadow-md ring-1 duration-100;
+ }
+
+ .cn-menubar-content-logical {
+ @apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;
+ }
+
+ .cn-menubar-item {
+ @apply focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:text-destructive! not-data-[variant=destructive]:focus:**:text-accent-foreground min-h-7 gap-2 rounded-md px-2 py-1 text-xs/relaxed data-disabled:opacity-50 data-inset:pl-7.5 [&_svg:not([class*='size-'])]:size-3.5;
+ }
+
+ .cn-menubar-checkbox-item {
+ @apply focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground min-h-7 gap-2 rounded-md py-1.5 pr-2 pl-7.5 text-xs data-inset:pl-7.5;
+ }
+
+ .cn-menubar-checkbox-item-indicator {
+ @apply left-2 size-4 [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-menubar-radio-item {
+ @apply focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground min-h-7 gap-2 rounded-md py-1.5 pr-2 pl-7.5 text-xs data-disabled:opacity-50 data-inset:pl-7.5 [&_svg:not([class*='size-'])]:size-3.5;
+ }
+
+ .cn-menubar-radio-item-indicator {
+ @apply left-2 size-4 [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-menubar-label {
+ @apply text-muted-foreground px-2 py-1.5 text-xs data-inset:pl-7.5;
+ }
+
+ .cn-menubar-separator {
+ @apply bg-border/50 -mx-1 my-1 h-px;
+ }
+
+ .cn-menubar-shortcut {
+ @apply text-muted-foreground group-focus/menubar-item:text-accent-foreground text-[0.625rem] tracking-widest;
+ }
+
+ .cn-menubar-sub-trigger {
+ @apply focus:bg-accent focus:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground min-h-7 gap-2 rounded-md px-2 py-1 text-xs data-inset:pl-7.5 [&_svg:not([class*='size-'])]:size-3.5;
+ }
+
+ .cn-menubar-sub-content {
+ @apply bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 min-w-32 rounded-lg p-1 shadow-md ring-1 duration-100;
+ }
+
+ /* MARK: Navigation Menu */
+ .cn-navigation-menu {
+ @apply max-w-max;
+ }
+
+ .cn-navigation-menu-list {
+ @apply gap-0;
+ }
+
+ .cn-navigation-menu-trigger {
+ @apply bg-background hover:bg-muted focus:bg-muted data-open:hover:bg-muted data-open:focus:bg-muted data-open:bg-muted/50 focus-visible:ring-ring/30 data-popup-open:bg-muted/50 data-popup-open:hover:bg-muted rounded-md px-2.5 py-1.5 text-xs/relaxed font-medium transition-all focus-visible:ring-2 focus-visible:outline-1 disabled:opacity-50;
+ }
+
+ .cn-navigation-menu-trigger-icon {
+ @apply relative top-px ml-1 size-3 transition duration-300 group-data-open/navigation-menu-trigger:rotate-180 group-data-popup-open/navigation-menu-trigger:rotate-180;
+ }
+
+ .cn-navigation-menu-content {
+ @apply data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:data-open:animate-in group-data-[viewport=false]/navigation-menu:data-closed:animate-out group-data-[viewport=false]/navigation-menu:data-closed:zoom-out-95 group-data-[viewport=false]/navigation-menu:data-open:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-open:fade-in-0 group-data-[viewport=false]/navigation-menu:data-closed:fade-out-0 group-data-[viewport=false]/navigation-menu:ring-foreground/10 p-1.5 ease-[cubic-bezier(0.22,1,0.36,1)] group-data-[viewport=false]/navigation-menu:rounded-xl group-data-[viewport=false]/navigation-menu:shadow-md group-data-[viewport=false]/navigation-menu:ring-1 group-data-[viewport=false]/navigation-menu:duration-300;
+ }
+
+ .cn-navigation-menu-viewport {
+ @apply bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:zoom-out-95 data-open:zoom-in-90 ring-foreground/10 rounded-xl shadow-md ring-1 duration-100;
+ }
+
+ .cn-navigation-menu-link {
+ @apply data-[active=true]:focus:bg-muted data-[active=true]:hover:bg-muted data-[active=true]:bg-muted/50 focus-visible:ring-ring/30 hover:bg-muted focus:bg-muted flex items-center gap-1.5 rounded-lg p-2 text-xs/relaxed transition-all outline-none focus-visible:ring-2 focus-visible:outline-1 [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-navigation-menu-indicator {
+ @apply data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in;
+ }
+
+ .cn-navigation-menu-indicator-arrow {
+ @apply bg-border rounded-tl-sm shadow-md;
+ }
+
+ .cn-navigation-menu-positioner {
+ @apply transition-[top,left,right,bottom] duration-300 ease-[cubic-bezier(0.22,1,0.36,1)] data-[side=bottom]:before:top-[-10px] data-[side=bottom]:before:right-0 data-[side=bottom]:before:left-0;
+ }
+
+ .cn-navigation-menu-popup {
+ @apply bg-popover text-popover-foreground ring-foreground/10 rounded-xl shadow ring-1 transition-all ease-[cubic-bezier(0.22,1,0.36,1)] outline-none data-ending-style:scale-90 data-ending-style:opacity-0 data-ending-style:duration-150 data-starting-style:scale-90 data-starting-style:opacity-0;
+ }
+
+ /* MARK: Native Select */
+ .cn-native-select {
+ @apply border-input bg-input/20 placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 dark:hover:bg-input/50 focus-visible:border-ring focus-visible:ring-ring/30 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 h-7 w-full min-w-0 appearance-none rounded-md border py-0.5 pr-6 pl-2 text-xs/relaxed transition-colors select-none focus-visible:ring-2 aria-invalid:ring-2 data-[size=sm]:h-6 data-[size=sm]:text-[0.625rem];
+ }
+
+ .cn-native-select-icon {
+ @apply text-muted-foreground top-1/2 right-1.5 size-3.5 -translate-y-1/2 group-data-[size=sm]/native-select:size-3 group-data-[size=sm]/native-select:-translate-y-[calc(--spacing(1.25))];
+ }
+
+ /* MARK: Pagination */
+ .cn-pagination-content {
+ @apply gap-0.5;
+ }
+
+ .cn-pagination-ellipsis {
+ @apply size-7 items-center justify-center [&_svg:not([class*='size-'])]:size-3.5;
+ }
+
+ .cn-pagination-previous {
+ @apply pl-2!;
+ }
+
+ .cn-pagination-next {
+ @apply pr-2!;
+ }
+
+ /* MARK: Popover */
+ .cn-popover-content {
+ @apply bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 flex flex-col gap-4 rounded-lg p-2.5 text-xs shadow-md ring-1 duration-100;
+ }
+
+ .cn-popover-content-logical {
+ @apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;
+ }
+
+ .cn-popover-header {
+ @apply flex flex-col gap-1 text-xs;
+ }
+
+ .cn-popover-title {
+ @apply text-sm font-medium;
+ }
+
+ .cn-popover-description {
+ @apply text-muted-foreground;
+ }
+
+ /* MARK: Progress */
+ .cn-progress {
+ @apply bg-muted h-1 rounded-md;
+ }
+
+ .cn-progress-track {
+ @apply bg-muted h-1 rounded-md;
+ }
+
+ .cn-progress-indicator {
+ @apply bg-primary;
+ }
+
+ .cn-progress-label {
+ @apply text-xs/relaxed font-medium;
+ }
+
+ .cn-progress-value {
+ @apply text-muted-foreground ml-auto text-xs/relaxed tabular-nums;
+ }
+
+ /* MARK: Radio Group */
+ .cn-radio-group {
+ @apply grid gap-3;
+ }
+
+ .cn-radio-group-item {
+ @apply border-input text-primary dark:bg-input/30 focus-visible:border-ring focus-visible:ring-ring/30 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 data-checked:bg-primary data-checked:border-primary flex size-4 rounded-full transition-none focus-visible:ring-2 aria-invalid:ring-2;
+ }
+
+ .cn-radio-group-indicator {
+ @apply group-aria-invalid/radio-group-item:text-destructive flex size-4 items-center justify-center text-white;
+ }
+
+ .cn-radio-group-indicator-icon {
+ @apply absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 fill-current;
+ }
+
+ /* MARK: Resizable */
+ .cn-resizable-handle-icon {
+ @apply bg-border h-6 w-1 rounded-lg;
+ }
+
+ /* MARK: Scroll Area */
+ .cn-scroll-area-scrollbar {
+ @apply data-horizontal:h-2.5 data-horizontal:flex-col data-horizontal:border-t data-horizontal:border-t-transparent data-vertical:h-full data-vertical:w-2.5 data-vertical:border-l data-vertical:border-l-transparent;
+ }
+
+ .cn-scroll-area-thumb {
+ @apply rounded-full;
+ }
+
+ /* MARK: Select */
+ .cn-select-trigger {
+ @apply border-input data-placeholder:text-muted-foreground bg-input/20 dark:bg-input/30 dark:hover:bg-input/50 focus-visible:border-ring focus-visible:ring-ring/30 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 gap-1.5 rounded-md border px-2 py-1.5 text-xs/relaxed transition-colors focus-visible:ring-2 aria-invalid:ring-2 data-[size=default]:h-7 data-[size=sm]:h-6 *:data-[slot=select-value]:flex *:data-[slot=select-value]:gap-1.5 [&_svg:not([class*='size-'])]:size-3.5;
+ }
+
+ .cn-select-value {
+ @apply flex flex-1 text-left;
+ }
+
+ .cn-select-trigger-icon {
+ @apply text-muted-foreground size-3.5;
+ }
+
+ .cn-select-content {
+ @apply bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 min-w-32 rounded-lg shadow-md ring-1 duration-100;
+ }
+
+ .cn-select-content-logical {
+ @apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;
+ }
+
+ .cn-select-label {
+ @apply text-muted-foreground px-2 py-1.5 text-xs;
+ }
+
+ .cn-select-item {
+ @apply focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground min-h-7 gap-2 rounded-md px-2 py-1 text-xs/relaxed [&_svg:not([class*='size-'])]:size-3.5 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2;
+ }
+
+ .cn-select-item-indicator {
+ @apply pointer-events-none absolute right-2 flex items-center justify-center;
+ }
+
+ .cn-select-group {
+ @apply scroll-my-1 p-1;
+ }
+
+ .cn-select-item-text {
+ @apply flex flex-1 gap-2;
+ }
+
+ .cn-select-separator {
+ @apply bg-border/50 -mx-1 my-1 h-px;
+ }
+
+ .cn-select-scroll-up-button {
+ @apply bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-3.5;
+ }
+
+ .cn-select-scroll-down-button {
+ @apply bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-3.5;
+ }
+
+ /* MARK: Separator */
+ .cn-separator {
+ @apply bg-border shrink-0;
+ }
+
+ .cn-separator-horizontal {
+ @apply h-px w-full;
+ }
+
+ .cn-separator-vertical {
+ @apply h-full w-px;
+ }
+
+ /* MARK: Sheet */
+ .cn-sheet-overlay {
+ @apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 bg-black/80 duration-100 data-ending-style:opacity-0 data-starting-style:opacity-0 supports-backdrop-filter:backdrop-blur-xs;
+ }
+
+ .cn-sheet-content {
+ @apply bg-background data-open:animate-in data-closed:animate-out data-[side=right]:data-closed:slide-out-to-right-10 data-[side=right]:data-open:slide-in-from-right-10 data-[side=left]:data-closed:slide-out-to-left-10 data-[side=left]:data-open:slide-in-from-left-10 data-[side=top]:data-closed:slide-out-to-top-10 data-[side=top]:data-open:slide-in-from-top-10 data-closed:fade-out-0 data-open:fade-in-0 data-[side=bottom]:data-closed:slide-out-to-bottom-10 data-[side=bottom]:data-open:slide-in-from-bottom-10 fixed z-50 flex flex-col bg-clip-padding text-xs/relaxed shadow-lg transition duration-200 ease-in-out data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm;
+ }
+
+ .cn-sheet-close {
+ @apply absolute top-4 right-4;
+ }
+
+ .cn-sheet-header {
+ @apply gap-1.5 p-6;
+ }
+
+ .cn-sheet-footer {
+ @apply gap-2 p-6;
+ }
+
+ .cn-sheet-title {
+ @apply text-foreground text-sm font-medium;
+ }
+
+ .cn-sheet-description {
+ @apply text-muted-foreground text-xs/relaxed;
+ }
+
+ /* MARK: Sidebar */
+
+ /* MARK: Sidebar */
+ .cn-sidebar-gap {
+ @apply transition-[width] duration-200 ease-linear;
+ }
+
+ .cn-sidebar-inner {
+ @apply bg-sidebar group-data-[variant=floating]:ring-sidebar-border group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:shadow-sm group-data-[variant=floating]:ring-1;
+ }
+
+ .cn-sidebar-rail {
+ @apply hover:after:bg-sidebar-border;
+ }
+
+ .cn-sidebar-inset {
+ @apply bg-background md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2;
+ }
+
+ .cn-sidebar-input {
+ @apply bg-muted/20 dark:bg-muted/30 border-input h-8 w-full;
+ }
+
+ .cn-sidebar-header {
+ @apply gap-2 p-2;
+ }
+
+ .cn-sidebar-content {
+ @apply no-scrollbar gap-0;
+ }
+
+ .cn-sidebar-footer {
+ @apply gap-2 p-2;
+ }
+
+ .cn-sidebar-separator {
+ @apply bg-sidebar-border mx-2;
+ }
+
+ .cn-sidebar-group {
+ @apply px-2 py-1;
+ }
+
+ .cn-sidebar-menu {
+ @apply gap-px;
+ }
+
+ .cn-sidebar-group-content {
+ @apply text-xs;
+ }
+
+ .cn-sidebar-group-label {
+ @apply text-sidebar-foreground/70 ring-sidebar-ring h-8 rounded-md px-2 text-xs transition-[margin,opacity] duration-200 ease-linear group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0 focus-visible:ring-2 [&>svg]:size-4;
+ }
+
+ .cn-sidebar-group-action {
+ @apply text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 right-3 w-5 rounded-md p-0 focus-visible:ring-2 [&>svg]:size-4;
+ }
+
+ .cn-sidebar-menu-button {
+ @apply ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground data-open:hover:bg-sidebar-accent data-open:hover:text-sidebar-accent-foreground gap-2 rounded-[calc(var(--radius-sm)+2px)] p-2 text-left text-xs transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! focus-visible:ring-2 data-active:font-medium;
+ }
+
+ .cn-sidebar-menu-button-variant-default {
+ @apply hover:bg-sidebar-accent hover:text-sidebar-accent-foreground;
+ }
+
+ .cn-sidebar-menu-button-variant-outline {
+ @apply bg-background hover:bg-sidebar-accent hover:text-sidebar-accent-foreground shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))];
+ }
+
+ .cn-sidebar-menu-button-size-default {
+ @apply h-8 text-xs;
+ }
+
+ .cn-sidebar-menu-button-size-sm {
+ @apply h-7 text-xs;
+ }
+
+ .cn-sidebar-menu-button-size-lg {
+ @apply h-12 text-xs group-data-[collapsible=icon]:p-0!;
+ }
+
+ .cn-sidebar-menu-action {
+ @apply text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground peer-hover/menu-button:text-sidebar-accent-foreground absolute top-1.5 right-1 aspect-square w-5 rounded-[calc(var(--radius-sm)-2px)] p-0 peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1 focus-visible:ring-2 [&>svg]:size-4;
+ }
+
+ .cn-sidebar-menu-badge {
+ @apply text-sidebar-foreground peer-hover/menu-button:text-sidebar-accent-foreground peer-data-active/menu-button:text-sidebar-accent-foreground pointer-events-none absolute right-1 flex h-5 min-w-5 rounded-[calc(var(--radius-sm)-2px)] px-1 text-xs font-medium peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1;
+ }
+
+ .cn-sidebar-menu-skeleton {
+ @apply h-8 gap-2 rounded-md px-2;
+ }
+
+ .cn-sidebar-menu-skeleton-icon {
+ @apply size-4 rounded-md;
+ }
+
+ .cn-sidebar-menu-skeleton-text {
+ @apply h-4;
+ }
+
+ .cn-sidebar-menu-sub {
+ @apply border-sidebar-border mx-3.5 translate-x-px gap-1 border-l px-2.5 py-0.5 group-data-[collapsible=icon]:hidden;
+ }
+
+ .cn-sidebar-menu-sub-button {
+ @apply text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground h-7 gap-2 rounded-md px-2 focus-visible:ring-2 data-[size=md]:text-xs data-[size=sm]:text-xs [&>svg]:size-4;
+ }
+
+ /* MARK: Skeleton */
+ .cn-skeleton {
+ @apply bg-muted rounded-md;
+ }
+
+ /* MARK: Slider */
+ .cn-slider {
+ @apply data-vertical:min-h-40;
+ }
+
+ .cn-slider-track {
+ @apply bg-muted rounded-md data-horizontal:h-3 data-horizontal:w-full data-vertical:h-full data-vertical:w-3;
+ }
+
+ .cn-slider-range {
+ @apply bg-primary;
+ }
+
+ .cn-slider-thumb {
+ @apply border-primary ring-ring/30 size-4 rounded-md border bg-white shadow-sm transition-colors hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden;
+ }
+
+ /* MARK: Sonner */
+ .cn-toast {
+ @apply rounded-md;
+ }
+
+ /* MARK: Switch */
+ .cn-switch {
+ @apply data-checked:bg-primary data-unchecked:bg-input focus-visible:border-ring focus-visible:ring-ring/30 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 dark:data-unchecked:bg-input/80 shrink-0 rounded-full border border-transparent focus-visible:ring-2 aria-invalid:ring-2 data-[size=default]:h-[16.6px] data-[size=default]:w-[28px] data-[size=sm]:h-[14px] data-[size=sm]:w-[24px];
+ }
+
+ .cn-switch-thumb {
+ @apply bg-background dark:data-unchecked:bg-foreground dark:data-checked:bg-primary-foreground rounded-full group-data-[size=default]/switch:size-3.5 group-data-[size=sm]/switch:size-3 group-data-[size=default]/switch:data-checked:translate-x-[calc(100%-2px)] group-data-[size=sm]/switch:data-checked:translate-x-[calc(100%-2px)] group-data-[size=default]/switch:data-unchecked:translate-x-0 group-data-[size=sm]/switch:data-unchecked:translate-x-0;
+ }
+
+ /* MARK: Table */
+ .cn-table-container {
+ @apply relative w-full overflow-x-auto;
+ }
+
+ .cn-table {
+ @apply w-full caption-bottom text-xs;
+ }
+
+ .cn-table-header {
+ @apply [&_tr]:border-b;
+ }
+
+ .cn-table-body {
+ @apply [&_tr:last-child]:border-0;
+ }
+
+ .cn-table-footer {
+ @apply bg-muted/50 border-t font-medium [&>tr]:last:border-b-0;
+ }
+
+ .cn-table-row {
+ @apply hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors;
+ }
+
+ .cn-table-head {
+ @apply text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0;
+ }
+
+ .cn-table-cell {
+ @apply p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0;
+ }
+
+ .cn-table-caption {
+ @apply text-muted-foreground mt-4 text-xs;
+ }
+
+ /* MARK: Tabs */
+ .cn-tabs {
+ @apply gap-2;
+ }
+
+ .cn-tabs-list {
+ @apply rounded-lg p-[3px] group-data-horizontal/tabs:h-8 data-[variant=line]:rounded-none;
+ }
+
+ .cn-tabs-trigger {
+ @apply gap-1.5 rounded-md border border-transparent px-1.5 py-0.5 text-xs font-medium group-data-vertical/tabs:py-[calc(--spacing(1.25))] [&_svg:not([class*='size-'])]:size-3.5;
+ }
+
+ .cn-tabs-content {
+ @apply text-xs/relaxed;
+ }
+
+ /* MARK: Textarea */
+ .cn-textarea {
+ @apply border-input bg-input/20 dark:bg-input/30 focus-visible:border-ring focus-visible:ring-ring/30 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 resize-none rounded-md border px-2 py-2 text-sm transition-colors focus-visible:ring-2 aria-invalid:ring-2 md:text-xs/relaxed;
+ }
+
+ /* MARK: Toggle */
+ .cn-toggle {
+ @apply hover:text-foreground aria-pressed:bg-muted focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive data-[state=on]:bg-muted gap-1 rounded-md text-xs font-medium transition-all [&_svg:not([class*='size-'])]:size-3.5;
+ }
+
+ .cn-toggle-variant-default {
+ @apply bg-transparent;
+ }
+
+ .cn-toggle-variant-outline {
+ @apply border-input hover:bg-muted border bg-transparent;
+ }
+
+ .cn-toggle-size-default {
+ @apply h-7 min-w-7 px-2;
+ }
+
+ .cn-toggle-size-sm {
+ @apply h-6 min-w-6 rounded-[min(var(--radius-md),8px)] px-1.5 text-[0.625rem] [&_svg:not([class*='size-'])]:size-3;
+ }
+
+ .cn-toggle-size-lg {
+ @apply h-8 min-w-8 px-2;
+ }
+
+ /* MARK: Toggle Group */
+ .cn-toggle-group {
+ @apply rounded-md data-[size=sm]:rounded-[min(var(--radius-md),8px)];
+ }
+
+ .cn-toggle-group-item {
+ @apply group-data-[spacing=0]/toggle-group:rounded-none group-data-[spacing=0]/toggle-group:px-2 group-data-horizontal/toggle-group:data-[spacing=0]:first:rounded-l-md group-data-vertical/toggle-group:data-[spacing=0]:first:rounded-t-md group-data-horizontal/toggle-group:data-[spacing=0]:last:rounded-r-md group-data-vertical/toggle-group:data-[spacing=0]:last:rounded-b-md;
+ }
+
+ /* MARK: Tooltip */
+ .cn-tooltip-content {
+ @apply data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 rounded-md px-3 py-1.5 text-xs **:data-[slot=kbd]:rounded-md;
+ }
+
+ .cn-tooltip-content-logical {
+ @apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;
+ }
+
+ .cn-tooltip-arrow {
+ @apply size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px];
+ }
+
+ .cn-tooltip-arrow-logical {
+ @apply data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-right-1 data-[side=inline-start]:-translate-y-1/2;
+ }
+
+ /* MARK: Input Group */
+ .cn-input-group {
+ @apply border-input bg-input/20 dark:bg-input/30 has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-ring/30 has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[[data-slot][aria-invalid=true]]:border-destructive dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40 h-7 rounded-md border transition-colors in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-data-[align=block-end]:rounded-md has-data-[align=block-start]:rounded-md has-[[data-slot=input-group-control]:focus-visible]:ring-2 has-[[data-slot][aria-invalid=true]]:ring-2 has-[textarea]:rounded-md has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=inline-end]]:[&>input]:pr-1.5 has-[>[data-align=inline-start]]:[&>input]:pl-1.5;
+ }
+
+ .cn-input-group-addon {
+ @apply text-muted-foreground **:data-[slot=kbd]:bg-muted-foreground/10 h-auto gap-1 py-2 text-xs/relaxed font-medium group-data-[disabled=true]/input-group:opacity-50 **:data-[slot=kbd]:rounded-[calc(var(--radius-sm)-2px)] **:data-[slot=kbd]:px-1 **:data-[slot=kbd]:text-[0.625rem] [&>svg:not([class*='size-'])]:size-3.5;
+ }
+
+ .cn-input-group-addon-align-inline-start {
+ @apply pl-2 has-[>button]:ml-[-0.275rem] has-[>kbd]:ml-[-0.275rem];
+ }
+
+ .cn-input-group-addon-align-inline-end {
+ @apply pr-2 has-[>button]:mr-[-0.275rem] has-[>kbd]:mr-[-0.275rem];
+ }
+
+ .cn-input-group-addon-align-block-start {
+ @apply px-2 pt-2 group-has-[>input]/input-group:pt-2 [.border-b]:pb-2;
+ }
+
+ .cn-input-group-addon-align-block-end {
+ @apply px-2 pb-2 group-has-[>input]/input-group:pb-2 [.border-t]:pt-2;
+ }
+
+ .cn-input-group-button {
+ @apply gap-2 rounded-md text-xs/relaxed;
+ }
+
+ .cn-input-group-button-size-xs {
+ @apply h-5 gap-1 rounded-[calc(var(--radius-sm)-2px)] px-1 [&>svg:not([class*='size-'])]:size-3;
+ }
+
+ .cn-input-group-button-size-icon-xs {
+ @apply size-6 p-0 has-[>svg]:p-0;
+ }
+
+ .cn-input-group-button-size-icon-sm {
+ @apply size-8 p-0 has-[>svg]:p-0;
+ }
+
+ .cn-input-group-text {
+ @apply text-muted-foreground gap-2 text-xs/relaxed [&_svg:not([class*='size-'])]:size-4;
+ }
+
+ .cn-input-group-input {
+ @apply rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 aria-invalid:ring-0 dark:bg-transparent;
+ }
+
+ .cn-input-group-textarea {
+ @apply rounded-none border-0 bg-transparent py-2 shadow-none ring-0 focus-visible:ring-0 aria-invalid:ring-0 dark:bg-transparent;
+ }
+ }
+}
diff --git a/assets/css/themes.css b/assets/css/themes.css
new file mode 100644
index 0000000..ad66fef
--- /dev/null
+++ b/assets/css/themes.css
@@ -0,0 +1,758 @@
+/* Generated from https://github.com/shadcn-ui/ui/blob/main/apps/v4/registry/themes.ts */
+
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
+
+.neutral {
+ --background: oklch(1 0 0);
+ --foreground: oklch(0.145 0 0);
+ --card: oklch(1 0 0);
+ --card-foreground: oklch(0.145 0 0);
+ --popover: oklch(1 0 0);
+ --popover-foreground: oklch(0.145 0 0);
+ --primary: oklch(0.205 0 0);
+ --primary-foreground: oklch(0.985 0 0);
+ --secondary: oklch(0.97 0 0);
+ --secondary-foreground: oklch(0.205 0 0);
+ --muted: oklch(0.97 0 0);
+ --muted-foreground: oklch(0.556 0 0);
+ --accent: oklch(0.97 0 0);
+ --accent-foreground: oklch(0.205 0 0);
+ --destructive: oklch(0.58 0.22 27);
+ --border: oklch(0.922 0 0);
+ --input: oklch(0.922 0 0);
+ --ring: oklch(0.708 0 0);
+ --chart-1: oklch(0.809 0.105 251.813);
+ --chart-2: oklch(0.623 0.214 259.815);
+ --chart-3: oklch(0.546 0.245 262.881);
+ --chart-4: oklch(0.488 0.243 264.376);
+ --chart-5: oklch(0.424 0.199 265.638);
+ --radius: 0.625rem;
+ --sidebar: oklch(0.985 0 0);
+ --sidebar-foreground: oklch(0.145 0 0);
+ --sidebar-primary: oklch(0.205 0 0);
+ --sidebar-primary-foreground: oklch(0.985 0 0);
+ --sidebar-accent: oklch(0.97 0 0);
+ --sidebar-accent-foreground: oklch(0.205 0 0);
+ --sidebar-border: oklch(0.922 0 0);
+ --sidebar-ring: oklch(0.708 0 0);
+}
+
+.neutral-dark {
+ --background: oklch(0.145 0 0);
+ --foreground: oklch(0.985 0 0);
+ --card: oklch(0.205 0 0);
+ --card-foreground: oklch(0.985 0 0);
+ --popover: oklch(0.205 0 0);
+ --popover-foreground: oklch(0.985 0 0);
+ --primary: oklch(0.87 0 0);
+ --primary-foreground: oklch(0.205 0 0);
+ --secondary: oklch(0.269 0 0);
+ --secondary-foreground: oklch(0.985 0 0);
+ --muted: oklch(0.269 0 0);
+ --muted-foreground: oklch(0.708 0 0);
+ --accent: oklch(0.371 0 0);
+ --accent-foreground: oklch(0.985 0 0);
+ --destructive: oklch(0.704 0.191 22.216);
+ --border: oklch(1 0 0 / 10%);
+ --input: oklch(1 0 0 / 15%);
+ --ring: oklch(0.556 0 0);
+ --chart-1: oklch(0.809 0.105 251.813);
+ --chart-2: oklch(0.623 0.214 259.815);
+ --chart-3: oklch(0.546 0.245 262.881);
+ --chart-4: oklch(0.488 0.243 264.376);
+ --chart-5: oklch(0.424 0.199 265.638);
+ --sidebar: oklch(0.205 0 0);
+ --sidebar-foreground: oklch(0.985 0 0);
+ --sidebar-primary: oklch(0.488 0.243 264.376);
+ --sidebar-primary-foreground: oklch(0.985 0 0);
+ --sidebar-accent: oklch(0.269 0 0);
+ --sidebar-accent-foreground: oklch(0.985 0 0);
+ --sidebar-border: oklch(1 0 0 / 10%);
+ --sidebar-ring: oklch(0.556 0 0);
+}
+
+.stone {
+ --background: oklch(1 0 0);
+ --foreground: oklch(0.147 0.004 49.25);
+ --card: oklch(1 0 0);
+ --card-foreground: oklch(0.147 0.004 49.25);
+ --popover: oklch(1 0 0);
+ --popover-foreground: oklch(0.147 0.004 49.25);
+ --primary: oklch(0.216 0.006 56.043);
+ --primary-foreground: oklch(0.985 0.001 106.423);
+ --secondary: oklch(0.97 0.001 106.424);
+ --secondary-foreground: oklch(0.216 0.006 56.043);
+ --muted: oklch(0.97 0.001 106.424);
+ --muted-foreground: oklch(0.553 0.013 58.071);
+ --accent: oklch(0.97 0.001 106.424);
+ --accent-foreground: oklch(0.216 0.006 56.043);
+ --destructive: oklch(0.577 0.245 27.325);
+ --border: oklch(0.923 0.003 48.717);
+ --input: oklch(0.923 0.003 48.717);
+ --ring: oklch(0.709 0.01 56.259);
+ --chart-1: oklch(0.646 0.222 41.116);
+ --chart-2: oklch(0.6 0.118 184.704);
+ --chart-3: oklch(0.398 0.07 227.392);
+ --chart-4: oklch(0.828 0.189 84.429);
+ --chart-5: oklch(0.769 0.188 70.08);
+ --radius: 0.625rem;
+ --sidebar: oklch(0.985 0.001 106.423);
+ --sidebar-foreground: oklch(0.147 0.004 49.25);
+ --sidebar-primary: oklch(0.216 0.006 56.043);
+ --sidebar-primary-foreground: oklch(0.985 0.001 106.423);
+ --sidebar-accent: oklch(0.97 0.001 106.424);
+ --sidebar-accent-foreground: oklch(0.216 0.006 56.043);
+ --sidebar-border: oklch(0.923 0.003 48.717);
+ --sidebar-ring: oklch(0.709 0.01 56.259);
+}
+
+.stone-dark {
+ --background: oklch(0.147 0.004 49.25);
+ --foreground: oklch(0.985 0.001 106.423);
+ --card: oklch(0.216 0.006 56.043);
+ --card-foreground: oklch(0.985 0.001 106.423);
+ --popover: oklch(0.216 0.006 56.043);
+ --popover-foreground: oklch(0.985 0.001 106.423);
+ --primary: oklch(0.923 0.003 48.717);
+ --primary-foreground: oklch(0.216 0.006 56.043);
+ --secondary: oklch(0.268 0.007 34.298);
+ --secondary-foreground: oklch(0.985 0.001 106.423);
+ --muted: oklch(0.268 0.007 34.298);
+ --muted-foreground: oklch(0.709 0.01 56.259);
+ --accent: oklch(0.268 0.007 34.298);
+ --accent-foreground: oklch(0.985 0.001 106.423);
+ --destructive: oklch(0.704 0.191 22.216);
+ --border: oklch(1 0 0 / 10%);
+ --input: oklch(1 0 0 / 15%);
+ --ring: oklch(0.553 0.013 58.071);
+ --chart-1: oklch(0.488 0.243 264.376);
+ --chart-2: oklch(0.696 0.17 162.48);
+ --chart-3: oklch(0.769 0.188 70.08);
+ --chart-4: oklch(0.627 0.265 303.9);
+ --chart-5: oklch(0.645 0.246 16.439);
+ --sidebar: oklch(0.216 0.006 56.043);
+ --sidebar-foreground: oklch(0.985 0.001 106.423);
+ --sidebar-primary: oklch(0.488 0.243 264.376);
+ --sidebar-primary-foreground: oklch(0.985 0.001 106.423);
+ --sidebar-accent: oklch(0.268 0.007 34.298);
+ --sidebar-accent-foreground: oklch(0.985 0.001 106.423);
+ --sidebar-border: oklch(1 0 0 / 10%);
+ --sidebar-ring: oklch(0.553 0.013 58.071);
+}
+
+.zinc {
+ --background: oklch(1 0 0);
+ --foreground: oklch(0.141 0.005 285.823);
+ --card: oklch(1 0 0);
+ --card-foreground: oklch(0.141 0.005 285.823);
+ --popover: oklch(1 0 0);
+ --popover-foreground: oklch(0.141 0.005 285.823);
+ --primary: oklch(0.21 0.006 285.885);
+ --primary-foreground: oklch(0.985 0 0);
+ --secondary: oklch(0.967 0.001 286.375);
+ --secondary-foreground: oklch(0.21 0.006 285.885);
+ --muted: oklch(0.967 0.001 286.375);
+ --muted-foreground: oklch(0.552 0.016 285.938);
+ --accent: oklch(0.967 0.001 286.375);
+ --accent-foreground: oklch(0.21 0.006 285.885);
+ --destructive: oklch(0.577 0.245 27.325);
+ --border: oklch(0.92 0.004 286.32);
+ --input: oklch(0.92 0.004 286.32);
+ --ring: oklch(0.705 0.015 286.067);
+ --chart-1: oklch(0.646 0.222 41.116);
+ --chart-2: oklch(0.6 0.118 184.704);
+ --chart-3: oklch(0.398 0.07 227.392);
+ --chart-4: oklch(0.828 0.189 84.429);
+ --chart-5: oklch(0.769 0.188 70.08);
+ --radius: 0.625rem;
+ --sidebar: oklch(0.985 0 0);
+ --sidebar-foreground: oklch(0.141 0.005 285.823);
+ --sidebar-primary: oklch(0.21 0.006 285.885);
+ --sidebar-primary-foreground: oklch(0.985 0 0);
+ --sidebar-accent: oklch(0.967 0.001 286.375);
+ --sidebar-accent-foreground: oklch(0.21 0.006 285.885);
+ --sidebar-border: oklch(0.92 0.004 286.32);
+ --sidebar-ring: oklch(0.705 0.015 286.067);
+}
+
+.zinc-dark {
+ --background: oklch(0.141 0.005 285.823);
+ --foreground: oklch(0.985 0 0);
+ --card: oklch(0.21 0.006 285.885);
+ --card-foreground: oklch(0.985 0 0);
+ --popover: oklch(0.21 0.006 285.885);
+ --popover-foreground: oklch(0.985 0 0);
+ --primary: oklch(0.92 0.004 286.32);
+ --primary-foreground: oklch(0.21 0.006 285.885);
+ --secondary: oklch(0.274 0.006 286.033);
+ --secondary-foreground: oklch(0.985 0 0);
+ --muted: oklch(0.274 0.006 286.033);
+ --muted-foreground: oklch(0.705 0.015 286.067);
+ --accent: oklch(0.274 0.006 286.033);
+ --accent-foreground: oklch(0.985 0 0);
+ --destructive: oklch(0.704 0.191 22.216);
+ --border: oklch(1 0 0 / 10%);
+ --input: oklch(1 0 0 / 15%);
+ --ring: oklch(0.552 0.016 285.938);
+ --chart-1: oklch(0.488 0.243 264.376);
+ --chart-2: oklch(0.696 0.17 162.48);
+ --chart-3: oklch(0.769 0.188 70.08);
+ --chart-4: oklch(0.627 0.265 303.9);
+ --chart-5: oklch(0.645 0.246 16.439);
+ --sidebar: oklch(0.21 0.006 285.885);
+ --sidebar-foreground: oklch(0.985 0 0);
+ --sidebar-primary: oklch(0.488 0.243 264.376);
+ --sidebar-primary-foreground: oklch(0.985 0 0);
+ --sidebar-accent: oklch(0.274 0.006 286.033);
+ --sidebar-accent-foreground: oklch(0.985 0 0);
+ --sidebar-border: oklch(1 0 0 / 10%);
+ --sidebar-ring: oklch(0.552 0.016 285.938);
+}
+
+.gray {
+ --background: oklch(1 0 0);
+ --foreground: oklch(0.13 0.028 261.692);
+ --card: oklch(1 0 0);
+ --card-foreground: oklch(0.13 0.028 261.692);
+ --popover: oklch(1 0 0);
+ --popover-foreground: oklch(0.13 0.028 261.692);
+ --primary: oklch(0.21 0.034 264.665);
+ --primary-foreground: oklch(0.985 0.002 247.839);
+ --secondary: oklch(0.967 0.003 264.542);
+ --secondary-foreground: oklch(0.21 0.034 264.665);
+ --muted: oklch(0.967 0.003 264.542);
+ --muted-foreground: oklch(0.551 0.027 264.364);
+ --accent: oklch(0.967 0.003 264.542);
+ --accent-foreground: oklch(0.21 0.034 264.665);
+ --destructive: oklch(0.577 0.245 27.325);
+ --border: oklch(0.928 0.006 264.531);
+ --input: oklch(0.928 0.006 264.531);
+ --ring: oklch(0.707 0.022 261.325);
+ --chart-1: oklch(0.646 0.222 41.116);
+ --chart-2: oklch(0.6 0.118 184.704);
+ --chart-3: oklch(0.398 0.07 227.392);
+ --chart-4: oklch(0.828 0.189 84.429);
+ --chart-5: oklch(0.769 0.188 70.08);
+ --radius: 0.625rem;
+ --sidebar: oklch(0.985 0.002 247.839);
+ --sidebar-foreground: oklch(0.13 0.028 261.692);
+ --sidebar-primary: oklch(0.21 0.034 264.665);
+ --sidebar-primary-foreground: oklch(0.985 0.002 247.839);
+ --sidebar-accent: oklch(0.967 0.003 264.542);
+ --sidebar-accent-foreground: oklch(0.21 0.034 264.665);
+ --sidebar-border: oklch(0.928 0.006 264.531);
+ --sidebar-ring: oklch(0.707 0.022 261.325);
+}
+
+.gray-dark {
+ --background: oklch(0.13 0.028 261.692);
+ --foreground: oklch(0.985 0.002 247.839);
+ --card: oklch(0.21 0.034 264.665);
+ --card-foreground: oklch(0.985 0.002 247.839);
+ --popover: oklch(0.21 0.034 264.665);
+ --popover-foreground: oklch(0.985 0.002 247.839);
+ --primary: oklch(0.928 0.006 264.531);
+ --primary-foreground: oklch(0.21 0.034 264.665);
+ --secondary: oklch(0.278 0.033 256.848);
+ --secondary-foreground: oklch(0.985 0.002 247.839);
+ --muted: oklch(0.278 0.033 256.848);
+ --muted-foreground: oklch(0.707 0.022 261.325);
+ --accent: oklch(0.278 0.033 256.848);
+ --accent-foreground: oklch(0.985 0.002 247.839);
+ --destructive: oklch(0.704 0.191 22.216);
+ --border: oklch(1 0 0 / 10%);
+ --input: oklch(1 0 0 / 15%);
+ --ring: oklch(0.551 0.027 264.364);
+ --chart-1: oklch(0.488 0.243 264.376);
+ --chart-2: oklch(0.696 0.17 162.48);
+ --chart-3: oklch(0.769 0.188 70.08);
+ --chart-4: oklch(0.627 0.265 303.9);
+ --chart-5: oklch(0.645 0.246 16.439);
+ --sidebar: oklch(0.21 0.034 264.665);
+ --sidebar-foreground: oklch(0.985 0.002 247.839);
+ --sidebar-primary: oklch(0.488 0.243 264.376);
+ --sidebar-primary-foreground: oklch(0.985 0.002 247.839);
+ --sidebar-accent: oklch(0.278 0.033 256.848);
+ --sidebar-accent-foreground: oklch(0.985 0.002 247.839);
+ --sidebar-border: oklch(1 0 0 / 10%);
+ --sidebar-ring: oklch(0.551 0.027 264.364);
+}
+
+.amber {
+ --primary: oklch(0.67 0.16 58);
+ --primary-foreground: oklch(0.99 0.02 95);
+ --secondary: oklch(0.967 0.001 286.375);
+ --secondary-foreground: oklch(0.21 0.006 285.885);
+ --chart-1: oklch(0.88 0.15 92);
+ --chart-2: oklch(0.77 0.16 70);
+ --chart-3: oklch(0.67 0.16 58);
+ --chart-4: oklch(0.56 0.15 49);
+ --chart-5: oklch(0.47 0.12 46);
+ --sidebar-primary: oklch(0.67 0.16 58);
+ --sidebar-primary-foreground: oklch(0.99 0.02 95);
+}
+
+.amber-dark {
+ --primary: oklch(0.77 0.16 70);
+ --primary-foreground: oklch(0.28 0.07 46);
+ --secondary: oklch(0.274 0.006 286.033);
+ --secondary-foreground: oklch(0.985 0 0);
+ --chart-1: oklch(0.88 0.15 92);
+ --chart-2: oklch(0.77 0.16 70);
+ --chart-3: oklch(0.67 0.16 58);
+ --chart-4: oklch(0.56 0.15 49);
+ --chart-5: oklch(0.47 0.12 46);
+ --sidebar-primary: oklch(0.77 0.16 70);
+ --sidebar-primary-foreground: oklch(0.28 0.07 46);
+}
+
+.blue {
+ --primary: oklch(0.488 0.243 264.376);
+ --primary-foreground: oklch(0.97 0.014 254.604);
+ --secondary: oklch(0.967 0.001 286.375);
+ --secondary-foreground: oklch(0.21 0.006 285.885);
+ --chart-1: oklch(0.809 0.105 251.813);
+ --chart-2: oklch(0.623 0.214 259.815);
+ --chart-3: oklch(0.546 0.245 262.881);
+ --chart-4: oklch(0.488 0.243 264.376);
+ --chart-5: oklch(0.424 0.199 265.638);
+ --sidebar-primary: oklch(0.546 0.245 262.881);
+ --sidebar-primary-foreground: oklch(0.97 0.014 254.604);
+}
+
+.blue-dark {
+ --primary: oklch(0.42 0.18 266);
+ --primary-foreground: oklch(0.97 0.014 254.604);
+ --secondary: oklch(0.274 0.006 286.033);
+ --secondary-foreground: oklch(0.985 0 0);
+ --chart-1: oklch(0.809 0.105 251.813);
+ --chart-2: oklch(0.623 0.214 259.815);
+ --chart-3: oklch(0.546 0.245 262.881);
+ --chart-4: oklch(0.488 0.243 264.376);
+ --chart-5: oklch(0.424 0.199 265.638);
+ --sidebar-primary: oklch(0.623 0.214 259.815);
+ --sidebar-primary-foreground: oklch(0.97 0.014 254.604);
+}
+
+.cyan {
+ --primary: oklch(0.61 0.11 222);
+ --primary-foreground: oklch(0.98 0.02 201);
+ --secondary: oklch(0.967 0.001 286.375);
+ --secondary-foreground: oklch(0.21 0.006 285.885);
+ --chart-1: oklch(0.87 0.12 207);
+ --chart-2: oklch(0.8 0.13 212);
+ --chart-3: oklch(0.71 0.13 215);
+ --chart-4: oklch(0.61 0.11 222);
+ --chart-5: oklch(0.52 0.09 223);
+ --sidebar-primary: oklch(0.61 0.11 222);
+ --sidebar-primary-foreground: oklch(0.98 0.02 201);
+}
+
+.cyan-dark {
+ --primary: oklch(0.71 0.13 215);
+ --primary-foreground: oklch(0.3 0.05 230);
+ --secondary: oklch(0.274 0.006 286.033);
+ --secondary-foreground: oklch(0.985 0 0);
+ --chart-1: oklch(0.87 0.12 207);
+ --chart-2: oklch(0.8 0.13 212);
+ --chart-3: oklch(0.71 0.13 215);
+ --chart-4: oklch(0.61 0.11 222);
+ --chart-5: oklch(0.52 0.09 223);
+ --sidebar-primary: oklch(0.8 0.13 212);
+ --sidebar-primary-foreground: oklch(0.3 0.05 230);
+}
+
+.emerald {
+ --primary: oklch(0.6 0.13 163);
+ --primary-foreground: oklch(0.98 0.02 166);
+ --secondary: oklch(0.967 0.001 286.375);
+ --secondary-foreground: oklch(0.21 0.006 285.885);
+ --chart-1: oklch(0.85 0.13 165);
+ --chart-2: oklch(0.77 0.15 163);
+ --chart-3: oklch(0.7 0.15 162);
+ --chart-4: oklch(0.6 0.13 163);
+ --chart-5: oklch(0.51 0.1 166);
+ --sidebar-primary: oklch(0.6 0.13 163);
+ --sidebar-primary-foreground: oklch(0.98 0.02 166);
+}
+
+.emerald-dark {
+ --primary: oklch(0.7 0.15 162);
+ --primary-foreground: oklch(0.26 0.05 173);
+ --secondary: oklch(0.274 0.006 286.033);
+ --secondary-foreground: oklch(0.985 0 0);
+ --chart-1: oklch(0.85 0.13 165);
+ --chart-2: oklch(0.77 0.15 163);
+ --chart-3: oklch(0.7 0.15 162);
+ --chart-4: oklch(0.6 0.13 163);
+ --chart-5: oklch(0.51 0.1 166);
+ --sidebar-primary: oklch(0.77 0.15 163);
+ --sidebar-primary-foreground: oklch(0.26 0.05 173);
+}
+
+.fuchsia {
+ --primary: oklch(0.59 0.26 323);
+ --primary-foreground: oklch(0.98 0.02 320);
+ --secondary: oklch(0.967 0.001 286.375);
+ --secondary-foreground: oklch(0.21 0.006 285.885);
+ --chart-1: oklch(0.83 0.13 321);
+ --chart-2: oklch(0.75 0.21 322);
+ --chart-3: oklch(0.67 0.26 322);
+ --chart-4: oklch(0.59 0.26 323);
+ --chart-5: oklch(0.52 0.23 324);
+ --sidebar-primary: oklch(0.59 0.26 323);
+ --sidebar-primary-foreground: oklch(0.98 0.02 320);
+}
+
+.fuchsia-dark {
+ --primary: oklch(0.67 0.26 322);
+ --primary-foreground: oklch(0.98 0.02 320);
+ --secondary: oklch(0.274 0.006 286.033);
+ --secondary-foreground: oklch(0.985 0 0);
+ --chart-1: oklch(0.83 0.13 321);
+ --chart-2: oklch(0.75 0.21 322);
+ --chart-3: oklch(0.67 0.26 322);
+ --chart-4: oklch(0.59 0.26 323);
+ --chart-5: oklch(0.52 0.23 324);
+ --sidebar-primary: oklch(0.75 0.21 322);
+ --sidebar-primary-foreground: oklch(0.98 0.02 320);
+}
+
+.green {
+ --primary: oklch(0.648 0.2 131.684);
+ --primary-foreground: oklch(0.986 0.031 120.757);
+ --secondary: oklch(0.967 0.001 286.375);
+ --secondary-foreground: oklch(0.21 0.006 285.885);
+ --chart-1: oklch(0.871 0.15 154.449);
+ --chart-2: oklch(0.723 0.219 149.579);
+ --chart-3: oklch(0.627 0.194 149.214);
+ --chart-4: oklch(0.527 0.154 150.069);
+ --chart-5: oklch(0.448 0.119 151.328);
+ --sidebar-primary: oklch(0.648 0.2 131.684);
+ --sidebar-primary-foreground: oklch(0.986 0.031 120.757);
+}
+
+.green-dark {
+ --primary: oklch(0.648 0.2 131.684);
+ --primary-foreground: oklch(0.986 0.031 120.757);
+ --secondary: oklch(0.274 0.006 286.033);
+ --secondary-foreground: oklch(0.985 0 0);
+ --chart-1: oklch(0.871 0.15 154.449);
+ --chart-2: oklch(0.723 0.219 149.579);
+ --chart-3: oklch(0.627 0.194 149.214);
+ --chart-4: oklch(0.527 0.154 150.069);
+ --chart-5: oklch(0.448 0.119 151.328);
+ --sidebar-primary: oklch(0.768 0.233 130.85);
+ --sidebar-primary-foreground: oklch(0.986 0.031 120.757);
+}
+
+.indigo {
+ --primary: oklch(0.51 0.23 277);
+ --primary-foreground: oklch(0.96 0.02 272);
+ --secondary: oklch(0.967 0.001 286.375);
+ --secondary-foreground: oklch(0.21 0.006 285.885);
+ --chart-1: oklch(0.79 0.1 275);
+ --chart-2: oklch(0.68 0.16 277);
+ --chart-3: oklch(0.59 0.2 277);
+ --chart-4: oklch(0.51 0.23 277);
+ --chart-5: oklch(0.46 0.21 277);
+ --sidebar-primary: oklch(0.51 0.23 277);
+ --sidebar-primary-foreground: oklch(0.96 0.02 272);
+}
+
+.indigo-dark {
+ --primary: oklch(0.59 0.2 277);
+ --primary-foreground: oklch(0.96 0.02 272);
+ --secondary: oklch(0.274 0.006 286.033);
+ --secondary-foreground: oklch(0.985 0 0);
+ --chart-1: oklch(0.79 0.1 275);
+ --chart-2: oklch(0.68 0.16 277);
+ --chart-3: oklch(0.59 0.2 277);
+ --chart-4: oklch(0.51 0.23 277);
+ --chart-5: oklch(0.46 0.21 277);
+ --sidebar-primary: oklch(0.68 0.16 277);
+ --sidebar-primary-foreground: oklch(0.96 0.02 272);
+}
+
+.lime {
+ --primary: oklch(0.65 0.18 132);
+ --primary-foreground: oklch(0.99 0.03 121);
+ --secondary: oklch(0.967 0.001 286.375);
+ --secondary-foreground: oklch(0.21 0.006 285.885);
+ --chart-1: oklch(0.9 0.18 127);
+ --chart-2: oklch(0.85 0.21 129);
+ --chart-3: oklch(0.77 0.2 131);
+ --chart-4: oklch(0.65 0.18 132);
+ --chart-5: oklch(0.53 0.14 132);
+ --sidebar-primary: oklch(0.65 0.18 132);
+ --sidebar-primary-foreground: oklch(0.99 0.03 121);
+}
+
+.lime-dark {
+ --primary: oklch(0.77 0.2 131);
+ --primary-foreground: oklch(0.27 0.07 132);
+ --secondary: oklch(0.274 0.006 286.033);
+ --secondary-foreground: oklch(0.985 0 0);
+ --chart-1: oklch(0.9 0.18 127);
+ --chart-2: oklch(0.85 0.21 129);
+ --chart-3: oklch(0.77 0.2 131);
+ --chart-4: oklch(0.65 0.18 132);
+ --chart-5: oklch(0.53 0.14 132);
+ --sidebar-primary: oklch(0.85 0.21 129);
+ --sidebar-primary-foreground: oklch(0.27 0.07 132);
+}
+
+.orange {
+ --primary: oklch(0.646 0.222 41.116);
+ --primary-foreground: oklch(0.98 0.016 73.684);
+ --secondary: oklch(0.967 0.001 286.375);
+ --secondary-foreground: oklch(0.21 0.006 285.885);
+ --chart-1: oklch(0.837 0.128 66.29);
+ --chart-2: oklch(0.705 0.213 47.604);
+ --chart-3: oklch(0.646 0.222 41.116);
+ --chart-4: oklch(0.553 0.195 38.402);
+ --chart-5: oklch(0.47 0.157 37.304);
+ --sidebar-primary: oklch(0.646 0.222 41.116);
+ --sidebar-primary-foreground: oklch(0.98 0.016 73.684);
+}
+
+.orange-dark {
+ --primary: oklch(0.705 0.213 47.604);
+ --primary-foreground: oklch(0.98 0.016 73.684);
+ --secondary: oklch(0.274 0.006 286.033);
+ --secondary-foreground: oklch(0.985 0 0);
+ --chart-1: oklch(0.837 0.128 66.29);
+ --chart-2: oklch(0.705 0.213 47.604);
+ --chart-3: oklch(0.646 0.222 41.116);
+ --chart-4: oklch(0.553 0.195 38.402);
+ --chart-5: oklch(0.47 0.157 37.304);
+ --sidebar-primary: oklch(0.705 0.213 47.604);
+ --sidebar-primary-foreground: oklch(0.98 0.016 73.684);
+}
+
+.pink {
+ --primary: oklch(0.59 0.22 1);
+ --primary-foreground: oklch(0.97 0.01 343);
+ --secondary: oklch(0.967 0.001 286.375);
+ --secondary-foreground: oklch(0.21 0.006 285.885);
+ --chart-1: oklch(0.82 0.11 346);
+ --chart-2: oklch(0.73 0.18 350);
+ --chart-3: oklch(0.66 0.21 354);
+ --chart-4: oklch(0.59 0.22 1);
+ --chart-5: oklch(0.52 0.2 4);
+ --sidebar-primary: oklch(0.59 0.22 1);
+ --sidebar-primary-foreground: oklch(0.97 0.01 343);
+}
+
+.pink-dark {
+ --primary: oklch(0.66 0.21 354);
+ --primary-foreground: oklch(0.97 0.01 343);
+ --secondary: oklch(0.274 0.006 286.033);
+ --secondary-foreground: oklch(0.985 0 0);
+ --chart-1: oklch(0.82 0.11 346);
+ --chart-2: oklch(0.73 0.18 350);
+ --chart-3: oklch(0.66 0.21 354);
+ --chart-4: oklch(0.59 0.22 1);
+ --chart-5: oklch(0.52 0.2 4);
+ --sidebar-primary: oklch(0.73 0.18 350);
+ --sidebar-primary-foreground: oklch(0.97 0.01 343);
+}
+
+.purple {
+ --primary: oklch(0.56 0.25 302);
+ --primary-foreground: oklch(0.98 0.01 308);
+ --secondary: oklch(0.967 0.001 286.375);
+ --secondary-foreground: oklch(0.21 0.006 285.885);
+ --chart-1: oklch(0.83 0.11 306);
+ --chart-2: oklch(0.72 0.18 306);
+ --chart-3: oklch(0.63 0.23 304);
+ --chart-4: oklch(0.56 0.25 302);
+ --chart-5: oklch(0.5 0.24 302);
+ --sidebar-primary: oklch(0.56 0.25 302);
+ --sidebar-primary-foreground: oklch(0.98 0.01 308);
+}
+
+.purple-dark {
+ --primary: oklch(0.63 0.23 304);
+ --primary-foreground: oklch(0.98 0.01 308);
+ --secondary: oklch(0.274 0.006 286.033);
+ --secondary-foreground: oklch(0.985 0 0);
+ --chart-1: oklch(0.83 0.11 306);
+ --chart-2: oklch(0.72 0.18 306);
+ --chart-3: oklch(0.63 0.23 304);
+ --chart-4: oklch(0.56 0.25 302);
+ --chart-5: oklch(0.5 0.24 302);
+ --sidebar-primary: oklch(0.72 0.18 306);
+ --sidebar-primary-foreground: oklch(0.98 0.01 308);
+}
+
+.red {
+ --primary: oklch(0.577 0.245 27.325);
+ --primary-foreground: oklch(0.971 0.013 17.38);
+ --secondary: oklch(0.967 0.001 286.375);
+ --secondary-foreground: oklch(0.21 0.006 285.885);
+ --chart-1: oklch(0.808 0.114 19.571);
+ --chart-2: oklch(0.637 0.237 25.331);
+ --chart-3: oklch(0.577 0.245 27.325);
+ --chart-4: oklch(0.505 0.213 27.518);
+ --chart-5: oklch(0.444 0.177 26.899);
+ --sidebar-primary: oklch(0.577 0.245 27.325);
+ --sidebar-primary-foreground: oklch(0.971 0.013 17.38);
+}
+
+.red-dark {
+ --primary: oklch(0.637 0.237 25.331);
+ --primary-foreground: oklch(0.971 0.013 17.38);
+ --secondary: oklch(0.274 0.006 286.033);
+ --secondary-foreground: oklch(0.985 0 0);
+ --chart-1: oklch(0.808 0.114 19.571);
+ --chart-2: oklch(0.637 0.237 25.331);
+ --chart-3: oklch(0.577 0.245 27.325);
+ --chart-4: oklch(0.505 0.213 27.518);
+ --chart-5: oklch(0.444 0.177 26.899);
+ --sidebar-primary: oklch(0.637 0.237 25.331);
+ --sidebar-primary-foreground: oklch(0.971 0.013 17.38);
+}
+
+.rose {
+ --primary: oklch(0.586 0.253 17.585);
+ --primary-foreground: oklch(0.969 0.015 12.422);
+ --secondary: oklch(0.967 0.001 286.375);
+ --secondary-foreground: oklch(0.21 0.006 285.885);
+ --chart-1: oklch(0.81 0.117 11.638);
+ --chart-2: oklch(0.645 0.246 16.439);
+ --chart-3: oklch(0.586 0.253 17.585);
+ --chart-4: oklch(0.514 0.222 16.935);
+ --chart-5: oklch(0.455 0.188 13.697);
+ --sidebar-primary: oklch(0.586 0.253 17.585);
+ --sidebar-primary-foreground: oklch(0.969 0.015 12.422);
+}
+
+.rose-dark {
+ --primary: oklch(0.645 0.246 16.439);
+ --primary-foreground: oklch(0.969 0.015 12.422);
+ --secondary: oklch(0.274 0.006 286.033);
+ --secondary-foreground: oklch(0.985 0 0);
+ --chart-1: oklch(0.81 0.117 11.638);
+ --chart-2: oklch(0.645 0.246 16.439);
+ --chart-3: oklch(0.586 0.253 17.585);
+ --chart-4: oklch(0.514 0.222 16.935);
+ --chart-5: oklch(0.455 0.188 13.697);
+ --sidebar: oklch(0.21 0.006 285.885);
+ --sidebar-primary: oklch(0.645 0.246 16.439);
+ --sidebar-primary-foreground: oklch(0.969 0.015 12.422);
+}
+
+.sky {
+ --primary: oklch(0.59 0.14 242);
+ --primary-foreground: oklch(0.98 0.01 237);
+ --secondary: oklch(0.967 0.001 286.375);
+ --secondary-foreground: oklch(0.21 0.006 285.885);
+ --chart-1: oklch(0.83 0.1 230);
+ --chart-2: oklch(0.75 0.14 233);
+ --chart-3: oklch(0.68 0.15 237);
+ --chart-4: oklch(0.59 0.14 242);
+ --chart-5: oklch(0.5 0.12 243);
+ --sidebar-primary: oklch(0.59 0.14 242);
+ --sidebar-primary-foreground: oklch(0.98 0.01 237);
+}
+
+.sky-dark {
+ --primary: oklch(0.68 0.15 237);
+ --primary-foreground: oklch(0.29 0.06 243);
+ --secondary: oklch(0.274 0.006 286.033);
+ --secondary-foreground: oklch(0.985 0 0);
+ --chart-1: oklch(0.83 0.1 230);
+ --chart-2: oklch(0.75 0.14 233);
+ --chart-3: oklch(0.68 0.15 237);
+ --chart-4: oklch(0.59 0.14 242);
+ --chart-5: oklch(0.5 0.12 243);
+ --sidebar-primary: oklch(0.75 0.14 233);
+ --sidebar-primary-foreground: oklch(0.29 0.06 243);
+}
+
+.teal {
+ --primary: oklch(0.6 0.1 185);
+ --primary-foreground: oklch(0.98 0.01 181);
+ --secondary: oklch(0.967 0.001 286.375);
+ --secondary-foreground: oklch(0.21 0.006 285.885);
+ --chart-1: oklch(0.85 0.13 181);
+ --chart-2: oklch(0.78 0.13 182);
+ --chart-3: oklch(0.7 0.12 183);
+ --chart-4: oklch(0.6 0.1 185);
+ --chart-5: oklch(0.51 0.09 186);
+ --sidebar-primary: oklch(0.6 0.1 185);
+ --sidebar-primary-foreground: oklch(0.98 0.01 181);
+}
+
+.teal-dark {
+ --primary: oklch(0.7 0.12 183);
+ --primary-foreground: oklch(0.28 0.04 193);
+ --secondary: oklch(0.274 0.006 286.033);
+ --secondary-foreground: oklch(0.985 0 0);
+ --chart-1: oklch(0.85 0.13 181);
+ --chart-2: oklch(0.78 0.13 182);
+ --chart-3: oklch(0.7 0.12 183);
+ --chart-4: oklch(0.6 0.1 185);
+ --chart-5: oklch(0.51 0.09 186);
+ --sidebar-primary: oklch(0.78 0.13 182);
+ --sidebar-primary-foreground: oklch(0.28 0.04 193);
+}
+
+.violet {
+ --primary: oklch(0.541 0.281 293.009);
+ --primary-foreground: oklch(0.969 0.016 293.756);
+ --secondary: oklch(0.967 0.001 286.375);
+ --secondary-foreground: oklch(0.21 0.006 285.885);
+ --chart-1: oklch(0.811 0.111 293.571);
+ --chart-2: oklch(0.606 0.25 292.717);
+ --chart-3: oklch(0.541 0.281 293.009);
+ --chart-4: oklch(0.491 0.27 292.581);
+ --chart-5: oklch(0.432 0.232 292.759);
+ --sidebar-primary: oklch(0.541 0.281 293.009);
+ --sidebar-primary-foreground: oklch(0.969 0.016 293.756);
+}
+
+.violet-dark {
+ --primary: oklch(0.606 0.25 292.717);
+ --primary-foreground: oklch(0.969 0.016 293.756);
+ --secondary: oklch(0.274 0.006 286.033);
+ --secondary-foreground: oklch(0.985 0 0);
+ --chart-1: oklch(0.811 0.111 293.571);
+ --chart-2: oklch(0.606 0.25 292.717);
+ --chart-3: oklch(0.541 0.281 293.009);
+ --chart-4: oklch(0.491 0.27 292.581);
+ --chart-5: oklch(0.432 0.232 292.759);
+ --sidebar-primary: oklch(0.606 0.25 292.717);
+ --sidebar-primary-foreground: oklch(0.969 0.016 293.756);
+}
+
+.yellow {
+ --primary: oklch(0.852 0.199 91.936);
+ --primary-foreground: oklch(0.421 0.095 57.708);
+ --secondary: oklch(0.967 0.001 286.375);
+ --secondary-foreground: oklch(0.21 0.006 285.885);
+ --chart-1: oklch(0.905 0.182 98.111);
+ --chart-2: oklch(0.795 0.184 86.047);
+ --chart-3: oklch(0.681 0.162 75.834);
+ --chart-4: oklch(0.554 0.135 66.442);
+ --chart-5: oklch(0.476 0.114 61.907);
+ --sidebar-primary: oklch(0.681 0.162 75.834);
+ --sidebar-primary-foreground: oklch(0.987 0.026 102.212);
+}
+
+.yellow-dark {
+ --primary: oklch(0.795 0.184 86.047);
+ --primary-foreground: oklch(0.421 0.095 57.708);
+ --secondary: oklch(0.274 0.006 286.033);
+ --secondary-foreground: oklch(0.985 0 0);
+ --chart-1: oklch(0.905 0.182 98.111);
+ --chart-2: oklch(0.795 0.184 86.047);
+ --chart-3: oklch(0.681 0.162 75.834);
+ --chart-4: oklch(0.554 0.135 66.442);
+ --chart-5: oklch(0.476 0.114 61.907);
+ --sidebar-primary: oklch(0.795 0.184 86.047);
+ --sidebar-primary-foreground: oklch(0.987 0.026 102.212);
+}
diff --git a/assets/css/wrapper.css b/assets/css/wrapper.css
index 88876a4..99c9c42 100644
--- a/assets/css/wrapper.css
+++ b/assets/css/wrapper.css
@@ -2,6 +2,10 @@
@tailwind components;
@tailwind utilities;
+@import "./presets/lyra.css";
+@import "./presets/atlas.css";
+@import "./presets/minimal.css";
+
:root {
--radius: 0.625rem;
--background: oklch(1 0 0);
@@ -35,6 +39,20 @@
--chart-3: oklch(0.7 0 0);
--chart-4: oklch(0.82 0 0);
--chart-5: oklch(0.92 0 0);
+
+ --font-geist: "Geist Variable", sans-serif;
+ --font-inter: "Inter Variable", sans-serif;
+ --font-noto-sans: "Noto Sans Variable", sans-serif;
+ --font-nunito-sans: "Nunito Sans Variable", sans-serif;
+ --font-figtree: "Figtree Variable", sans-serif;
+ --font-roboto: "Roboto", sans-serif;
+ --font-raleway: "Raleway", sans-serif;
+ --font-dm-sans: "DM Sans", sans-serif;
+ --font-public-sans: "Public Sans", sans-serif;
+ --font-outfit: "Outfit", sans-serif;
+
+ --font-jetbrains-mono: "JetBrains Mono Variable", monospace;
+ --font-geist-mono: "Geist Mono Variable", monospace;
}
.dark {
diff --git a/assets/svg/base-ui/dark.svg b/assets/svg/base-ui/dark.svg
new file mode 100644
index 0000000..f1ce177
--- /dev/null
+++ b/assets/svg/base-ui/dark.svg
@@ -0,0 +1,9 @@
+
diff --git a/assets/svg/base-ui/light.svg b/assets/svg/base-ui/light.svg
new file mode 100644
index 0000000..8c27842
--- /dev/null
+++ b/assets/svg/base-ui/light.svg
@@ -0,0 +1,9 @@
+
diff --git a/assets/svg/radix-ui/dark.svg b/assets/svg/radix-ui/dark.svg
new file mode 100644
index 0000000..9973c2e
--- /dev/null
+++ b/assets/svg/radix-ui/dark.svg
@@ -0,0 +1 @@
+
diff --git a/assets/svg/radix-ui/light.svg b/assets/svg/radix-ui/light.svg
new file mode 100644
index 0000000..7909263
--- /dev/null
+++ b/assets/svg/radix-ui/light.svg
@@ -0,0 +1 @@
+
diff --git a/scripts/generate_themes.py b/scripts/generate_themes.py
new file mode 100644
index 0000000..f4b07c3
--- /dev/null
+++ b/scripts/generate_themes.py
@@ -0,0 +1,85 @@
+import re
+from pathlib import Path
+
+# Provide the themes from shadcn/ui #
+# by downloading the raw file and cleaning the TypeScript exports and variables #
+THEMES_FILE = Path("scripts/themes.json")
+OUTPUT_CSS = Path("assets/css/themes.css")
+
+text = THEMES_FILE.read_text()
+lines = [
+ "/* Generated from https://github.com/shadcn-ui/ui/blob/main/apps/v4/registry/themes.ts */\n"
+]
+
+# Split by theme objects manually
+theme_splits = re.split(r"\},\s*\{", text)
+
+
+def extract_vars_from_lines(lines_list):
+ var_lines = []
+ for line in lines_list:
+ line = line.strip().rstrip(",")
+ if not line:
+ continue
+ # Match key: value (quoted or unquoted)
+ m = re.match(r'["]?([\w-]+)["]?\s*:\s*["]?(.+?)["]?$', line)
+ if m:
+ key, val = m.groups()
+ var_lines.append(f" --{key}: {val};")
+ return var_lines
+
+
+for theme_text in theme_splits:
+ # Extract theme name
+ name_match = re.search(r'name\s*:\s*"([^"]+)"', theme_text)
+ if not name_match:
+ continue
+ name = name_match.group(1)
+
+ # Extract light block lines
+ light_lines = []
+ dark_lines = []
+
+ in_light = False
+ in_dark = False
+ brace_count = 0
+
+ for line in theme_text.splitlines():
+ stripped = line.strip()
+ if stripped.startswith("light: {"):
+ in_light = True
+ brace_count = 1
+ continue
+ elif stripped.startswith("dark: {"):
+ in_dark = True
+ brace_count = 1
+ continue
+
+ # Track braces to know when block ends
+ if in_light or in_dark:
+ brace_count += line.count("{")
+ brace_count -= line.count("}")
+ if brace_count == 0:
+ in_light = False
+ in_dark = False
+ continue
+ if in_light:
+ light_lines.append(line)
+ if in_dark:
+ dark_lines.append(line)
+
+ # Write light CSS
+ if light_lines:
+ lines.append(f".{name} {{")
+ lines.extend(extract_vars_from_lines(light_lines))
+ lines.append("}\n")
+
+ # Write dark CSS
+ if dark_lines:
+ lines.append(f".{name}-dark {{")
+ lines.extend(extract_vars_from_lines(dark_lines))
+ lines.append("}\n")
+
+OUTPUT_CSS.parent.mkdir(parents=True, exist_ok=True)
+OUTPUT_CSS.write_text("\n".join(lines))
+print(f"Wrote {OUTPUT_CSS}")
diff --git a/src/create/hooks.py b/src/create/hooks.py
new file mode 100644
index 0000000..d19d5fd
--- /dev/null
+++ b/src/create/hooks.py
@@ -0,0 +1,13 @@
+from reflex.experimental import ClientStateVar
+
+# Var holding component library value
+component_library = ClientStateVar.create("component_library", "Base UI")
+
+# Var holding the current theme
+theme = ClientStateVar.create("theme", "neutral")
+
+# Var holding the current font family
+font_family = ClientStateVar.create("font_family", "Inter")
+
+# Var holding the current radius
+radius = ClientStateVar.create("radius", "none")
diff --git a/src/create/layout/preview.py b/src/create/layout/preview.py
new file mode 100644
index 0000000..e69de29
diff --git a/src/create/layout/sidebars.py b/src/create/layout/sidebars.py
new file mode 100644
index 0000000..3c8f9ec
--- /dev/null
+++ b/src/create/layout/sidebars.py
@@ -0,0 +1,41 @@
+import reflex as rx
+
+from src.create.ui.menu.fonts import font_menu
+from src.create.ui.menu.library import component_library_menu
+from src.create.ui.menu.radius import radius_menu
+from src.create.ui.menu.theme import theme_menu
+
+SidebarStyle = "max-w-[12rem] w-full sticky top-18 max-h-[100vh] z-[10]"
+ContentStyle = "flex flex-col items-center gap-y-4 [&_.rt-ScrollAreaScrollbar]:mt-[2rem] [&_.rt-ScrollAreaScrollbar]:mb-[2rem]"
+
+
+def component_sidebar():
+ content = rx.el.div(
+ component_library_menu(),
+ theme_menu(),
+ font_menu(),
+ radius_menu(),
+ class_name="flex flex-col max-w-[18rem] w-full h-full",
+ )
+
+ return rx.el.div(
+ rx.scroll_area(
+ content,
+ class_name=ContentStyle,
+ ),
+ class_name=SidebarStyle,
+ )
+
+
+def menu_option_sidebar():
+ content = rx.el.div(
+ class_name="flex flex-col max-w-[18rem] w-full h-full",
+ )
+
+ return rx.el.div(
+ rx.scroll_area(
+ content,
+ class_name=ContentStyle,
+ ),
+ class_name=SidebarStyle,
+ )
diff --git a/src/create/page.py b/src/create/page.py
new file mode 100644
index 0000000..6a605d6
--- /dev/null
+++ b/src/create/page.py
@@ -0,0 +1,39 @@
+import reflex as rx
+
+from src.create.layout.sidebars import component_sidebar, menu_option_sidebar
+from src.docs.library.examples.accordion.accordion import accordion_example
+from src.templates.navbar import navbar
+
+
+def create_page():
+ """The main page layout for buridan-ui/create feature"""
+ return rx.el.body(
+ rx.el.div(
+ rx.el.header(navbar(), class_name="sticky top-0 z-50"),
+ rx.el.main(
+ rx.el.div(
+ menu_option_sidebar(),
+ rx.el.div(
+ rx.el.div(
+ # main_content,
+ # font-(family-name:--font-jetbrains-mono)
+ rx.el.div(
+ accordion_example(),
+ class_name="style-mira border border-input w-full p-4",
+ ),
+ rx.el.div(
+ accordion_example(),
+ class_name="style-maia w-full border border-input p-4",
+ ),
+ class_name="flex-1 min-w-0 pt-6",
+ ),
+ component_sidebar(),
+ class_name="flex items-start w-full flex-1 min-w-0",
+ ),
+ class_name="flex w-full gap-x-0 xl:max-w-[80rem] 2xl:max-w-[85rem] mx-auto",
+ ),
+ class_name="w-full",
+ ),
+ class_name="bg-background relative flex h-screen flex-col",
+ ),
+ )
diff --git a/src/create/ui/menu/fonts.py b/src/create/ui/menu/fonts.py
new file mode 100644
index 0000000..b2c44a1
--- /dev/null
+++ b/src/create/ui/menu/fonts.py
@@ -0,0 +1,86 @@
+import reflex as rx
+
+import src.create.hooks as hooks
+from src.docs.library.base_ui.components.base.button import button
+from src.docs.library.base_ui.components.base.select import select
+from src.docs.library.base_ui.icons.hugeicon import hi
+
+FONTS = [
+ "Inter",
+ "JetBrains Mono",
+ "Geist",
+ "Geist Mono",
+ "Noto Sans",
+ "Nunito Sans",
+ "Figtree",
+ "Roboto",
+ "Raleway",
+ "DM Sans",
+ "Public Sans",
+ "Outfit",
+]
+
+
+def font_options(font: str):
+ font_var = f"--font-{font.lower().replace(' ', '-')}"
+
+ return select.item(
+ rx.el.div(
+ rx.el.p(font, class_name="!text-xs text-muted-foreground capitalize"),
+ select.item_text(
+ "Every test phrase hides a parade of playful symbols.",
+ class_name=f"line-clamp-2 !text-sm font-(family-name:{font_var})",
+ ),
+ class_name="flex flex-col gap-y-1 w-full justify-start items-start",
+ ),
+ select.item_indicator(
+ hi("Tick02Icon", class_name="size-4"),
+ ),
+ value=font,
+ class_name="w-full flex items-center justify-between rounded-lg",
+ on_click=rx.call_script(hooks.font_family.set_value(font)),
+ )
+
+
+def font_menu():
+ return select.root(
+ select.trigger(
+ render_=button(
+ rx.el.div(
+ rx.el.div(
+ rx.el.p(
+ "Font",
+ class_name="text-xs text-muted-foreground",
+ ),
+ rx.el.p(
+ select.value(),
+ class_name="text-md font-medium capitalize",
+ ),
+ class_name="flex flex-col items-start",
+ ),
+ hi(
+ "TextFontIcon",
+ class_name="size-4",
+ ),
+ class_name="!w-full flex items-center justify-between p-2",
+ ),
+ variant="ghost",
+ class_name="w-full !p-0 h-12 rounded-xl",
+ ),
+ ),
+ select.portal(
+ select.positioner(
+ select.popup(
+ select.group(
+ *[font_options(font) for font in FONTS],
+ class_name="!w-[18rem]",
+ ),
+ class_name="!rounded-xl h-[50vh] overflow-scroll scrollbar-none",
+ ),
+ side_offset=4,
+ side="left",
+ ),
+ ),
+ name="font_selector",
+ default_value="Inter",
+ )
diff --git a/src/create/ui/menu/library.py b/src/create/ui/menu/library.py
new file mode 100644
index 0000000..920fad5
--- /dev/null
+++ b/src/create/ui/menu/library.py
@@ -0,0 +1,94 @@
+from typing import Literal, TypedDict
+
+import reflex as rx
+
+import src.create.hooks as hooks
+from src.docs.library.base_ui.components.base.button import button
+from src.docs.library.base_ui.components.base.select import select
+from src.docs.library.base_ui.icons.hugeicon import hi
+
+LibraryName = Literal["base-ui", "radix-ui"]
+LibraryValue = Literal["Base UI", "Radix UI"]
+
+
+class Library(TypedDict):
+ value: LibraryValue
+ svg: LibraryName
+
+
+LIBRARIES: list[Library] = [
+ {"value": "Radix UI", "svg": "radix-ui"},
+ {"value": "Base UI", "svg": "base-ui"},
+]
+
+
+def library_svg(lib: LibraryName) -> rx.Component:
+ return rx.image(
+ src=rx.color_mode_cond(
+ f"/svg/{lib}/light.svg",
+ f"/svg/{lib}/dark.svg",
+ ),
+ class_name="size-4",
+ )
+
+
+def library_item(lib: Library) -> rx.Component:
+ return select.item(
+ rx.el.div(
+ library_svg(lib["svg"]),
+ select.item_text(lib["value"]),
+ class_name="flex gap-x-1 w-full items-center",
+ ),
+ select.item_indicator(
+ hi("Tick02Icon", class_name="size-4"),
+ ),
+ value=lib["value"],
+ class_name="w-full flex items-center justify-between rounded-lg",
+ on_click=hooks.component_library.set_value(lib["value"]),
+ )
+
+
+def current_library_icon() -> rx.Component:
+ return rx.cond(
+ hooks.component_library.value == "Base UI",
+ library_svg("base-ui"),
+ library_svg("radix-ui"),
+ )
+
+
+def component_library_menu() -> rx.Component:
+ return select.root(
+ select.trigger(
+ render_=button(
+ rx.el.div(
+ rx.el.div(
+ rx.el.p(
+ "Component Library",
+ class_name="text-xs text-muted-foreground",
+ ),
+ rx.el.p(select.value(), class_name="text-md font-medium"),
+ class_name="flex flex-col items-start",
+ ),
+ current_library_icon(),
+ class_name="!w-full flex items-center justify-between p-2",
+ ),
+ variant="ghost",
+ class_name="w-full !p-0 h-12 rounded-xl",
+ ),
+ ),
+ select.portal(
+ select.positioner(
+ select.popup(
+ select.group(
+ *[library_item(lib) for lib in LIBRARIES],
+ class_name="!w-[13rem]",
+ ),
+ class_name="!rounded-xl",
+ ),
+ side_offset=4,
+ side="left",
+ ),
+ ),
+ name="component_library",
+ default_value="Base UI",
+ )
diff --git a/src/create/ui/menu/radius.py b/src/create/ui/menu/radius.py
new file mode 100644
index 0000000..2df6084
--- /dev/null
+++ b/src/create/ui/menu/radius.py
@@ -0,0 +1,72 @@
+import reflex as rx
+
+import src.create.hooks as hooks
+from src.docs.library.base_ui.components.base.button import button
+from src.docs.library.base_ui.components.base.select import select
+from src.docs.library.base_ui.icons.hugeicon import hi
+
+RADIUS_OPTIONS = ["none", "small", "medium", "large"]
+
+RADIUS_CLASSES = {
+ "none": "rounded-none",
+ "small": "rounded-sm",
+ "medium": "rounded-md",
+ "large": "rounded-lg",
+}
+
+
+def radius_option_item(radius: str):
+ radius_class = RADIUS_CLASSES[radius]
+
+ return select.item(
+ rx.el.div(
+ rx.el.p(radius.capitalize(), class_name="text-sm text-muted-foreground"),
+ class_name=f"flex flex-col gap-y-1 w-full justify-start items-start {radius_class}",
+ ),
+ select.item_indicator(
+ hi("Tick02Icon", class_name="size-4"),
+ ),
+ value=radius,
+ class_name="w-full flex items-center justify-between rounded-lg",
+ on_click=rx.call_script(hooks.radius.set_value(radius)),
+ )
+
+
+def radius_menu():
+ return select.root(
+ select.trigger(
+ render_=button(
+ rx.el.div(
+ rx.el.div(
+ rx.el.p(
+ "Radius",
+ class_name="text-xs text-muted-foreground",
+ ),
+ rx.el.p(
+ select.value(), class_name="text-md font-medium capitalize"
+ ),
+ class_name="flex flex-col items-start",
+ ),
+ hi("BorderRight02Icon", class_name="size-4"),
+ class_name="!w-full flex items-center justify-between p-2",
+ ),
+ variant="ghost",
+ class_name="w-full !p-0 h-12 rounded-xl",
+ ),
+ ),
+ select.portal(
+ select.positioner(
+ select.popup(
+ select.group(
+ *[radius_option_item(r) for r in RADIUS_OPTIONS],
+ class_name="!w-[13rem]",
+ ),
+ class_name="!rounded-xl",
+ ),
+ side_offset=4,
+ side="left",
+ ),
+ ),
+ name="component_radius",
+ default_value="none",
+ )
diff --git a/src/create/ui/menu/theme.py b/src/create/ui/menu/theme.py
new file mode 100644
index 0000000..be8e247
--- /dev/null
+++ b/src/create/ui/menu/theme.py
@@ -0,0 +1,99 @@
+import reflex as rx
+
+import src.create.hooks as hooks
+from src.docs.library.base_ui.components.base.button import button
+from src.docs.library.base_ui.components.base.select import select
+from src.docs.library.base_ui.icons.hugeicon import hi
+
+THEMES = [
+ "amber",
+ "blue",
+ "cyan",
+ "emerald",
+ "fuchsia",
+ "gray",
+ "green",
+ "indigo",
+ "lime",
+ "neutral",
+ "orange",
+ "pink",
+ "purple",
+ "red",
+ "rose",
+ "sky",
+ "stone",
+ "teal",
+ "violet",
+ "yellow",
+ "zinc",
+]
+
+
+def theme_options(theme: str):
+ return select.item(
+ rx.el.div(
+ rx.el.div(
+ class_name="size-4 bg-primary rounded-full "
+ + rx.color_mode_cond(
+ f"{theme}",
+ f"{theme}-dark",
+ ).to(str),
+ ),
+ select.item_text(theme),
+ class_name="flex gap-x-2 w-full items-center capitalize",
+ ),
+ select.item_indicator(
+ hi("Tick02Icon", class_name="size-4"),
+ ),
+ value=theme,
+ class_name="w-full flex items-center justify-between rounded-lg",
+ on_click=hooks.theme.set_value(theme),
+ )
+
+
+def theme_menu():
+ return select.root(
+ select.trigger(
+ render_=button(
+ rx.el.div(
+ rx.el.div(
+ rx.el.p(
+ "Theme",
+ class_name="text-xs text-muted-foreground",
+ ),
+ rx.el.p(
+ select.value(),
+ class_name="text-md font-medium capitalize",
+ ),
+ class_name="flex flex-col items-start",
+ ),
+ rx.el.div(
+ class_name="size-4 bg-primary rounded-full "
+ + rx.color_mode_cond(
+ f"{hooks.theme.value}",
+ f"{hooks.theme.value}-dark",
+ ).to(str),
+ ),
+ class_name="!w-full flex items-center justify-between p-2",
+ ),
+ variant="ghost",
+ class_name="w-full !p-0 h-12 rounded-xl",
+ ),
+ ),
+ select.portal(
+ select.positioner(
+ select.popup(
+ select.group(
+ *[theme_options(theme) for theme in THEMES],
+ class_name="!w-[13rem]",
+ ),
+ class_name="!rounded-xl h-[50vh] overflow-scroll scrollbar-none",
+ ),
+ side_offset=4,
+ side="left",
+ ),
+ ),
+ name="component_library",
+ default_value="neutral",
+ )
diff --git a/src/export.py b/src/export.py
index bc10990..8b99089 100644
--- a/src/export.py
+++ b/src/export.py
@@ -2,6 +2,7 @@
import src.meta as meta
import src.routes as routes
+from src.create.page import create_page
from src.docs.generator import generate_docs_library
from src.templates.docpage import docpage
from src.templates.toc import table_of_content
@@ -10,6 +11,9 @@
# Define the landing page
landing = site_landing_page()
+# Define the create page
+create = create_page()
+
# Define redirects in one place
redirect_map = {
"/docs": routes.GET_STARTED_URLS[0]["url"],
@@ -30,6 +34,14 @@ def export(app: rx.App):
meta=meta.SITE_META_TAGS,
)
+ # Create page
+ app.add_page(
+ create,
+ route="/create",
+ title="The UI Library for Reflex Developers - buridan/ui",
+ meta=meta.SITE_META_TAGS,
+ )
+
# Create redirect pages dynamically
for route, target in redirect_map.items():
app.add_page(
diff --git a/src/src.py b/src/src.py
index 3c48e70..1154d24 100644
--- a/src/src.py
+++ b/src/src.py
@@ -1,22 +1,22 @@
import reflex as rx
-from src.export import export
from src.docs.library.javascript_integrations.fuse.fuse import (
+ custom_search_script,
fuse_cdn_script,
load_json_file_and_initialize,
- custom_search_script,
)
from src.docs.library.javascript_integrations.minisearch.minisearch import (
- minisearch_cdn_script,
custom_minisearch_search_script,
load_json_file_and_initialize_minisearch,
+ minisearch_cdn_script,
)
from src.docs.library.javascript_integrations.quill.quill import (
- quill_stylesheet,
quill_custom_font,
quill_init,
quill_lib,
+ quill_stylesheet,
)
+from src.export import export
def site_tracking_script() -> rx.Script:
@@ -30,7 +30,7 @@ def site_tracking_script() -> rx.Script:
# --- Reflex app init ---
app = rx.App(
- stylesheets=["css/wrapper.css"],
+ stylesheets=["css/wrapper.css", "css/themes.css"],
head_components=[
site_tracking_script(),
fuse_cdn_script(),
diff --git a/src/templates/docpage.py b/src/templates/docpage.py
index 8624430..da08b6b 100644
--- a/src/templates/docpage.py
+++ b/src/templates/docpage.py
@@ -1,6 +1,6 @@
import reflex as rx
-from src.templates.navbar import main_navbar
+from src.templates.navbar import navbar
from src.templates.sidebar import sidebar
@@ -8,7 +8,7 @@ def docpage(main_content, toc_content):
"""The template for all documentation pages."""
return rx.el.body(
rx.el.div(
- rx.el.header(main_navbar(), class_name="sticky top-0 z-50"),
+ rx.el.header(navbar(), class_name="sticky top-0 z-50"),
rx.el.main(
rx.el.div(
sidebar(),
diff --git a/src/templates/navbar.py b/src/templates/navbar.py
index d6a9b7e..b2570ee 100644
--- a/src/templates/navbar.py
+++ b/src/templates/navbar.py
@@ -8,7 +8,7 @@
from src.templates.search import site_search
-def main_navbar_nav_link(nav: str, url: str):
+def navbar_nav_link(nav: str, url: str):
return rx.el.a(
button(nav, variant="ghost", size="sm", class_name="!text-sm cursor-pointer"),
to=f"/{url}",
@@ -16,7 +16,7 @@ def main_navbar_nav_link(nav: str, url: str):
)
-def main_navbar():
+def navbar():
return rx.el.div(
rx.el.div(
rx.el.div(
@@ -27,18 +27,17 @@ def main_navbar():
class_name="hidden lg:flex",
),
rx.el.div(
- main_navbar_nav_link("Docs", routes.GET_STARTED_URLS[0]["url"]),
- main_navbar_nav_link(
- "Components", routes.BASE_UI_COMPONENTS[0]["url"]
- ),
- main_navbar_nav_link("Charts", routes.CHARTS_URLS[0]["url"]),
- main_navbar_nav_link(
+ navbar_nav_link("Docs", routes.GET_STARTED_URLS[0]["url"]),
+ navbar_nav_link("Components", routes.BASE_UI_COMPONENTS[0]["url"]),
+ navbar_nav_link("Charts", routes.CHARTS_URLS[0]["url"]),
+ navbar_nav_link(
"Wrapped React", routes.WRAPPED_COMPONENTS_URLS[0]["url"]
),
- main_navbar_nav_link(
+ navbar_nav_link(
"Integrations", routes.JS_INTEGRATIONS_URLS[0]["url"]
),
- class_name="hidden lg:flex flex-row items-center text-sm no-underline gap-x-0",
+ navbar_nav_link("Create", "create"),
+ class_name="hidden lg:flex flex-row items-center text-sm no-underline gap-x-2",
),
class_name="flex flex-row items-baseline gap-x-2 lg:gap-x-0",
),
diff --git a/src/views/landing/landing.py b/src/views/landing/landing.py
index 3a24108..0d71c82 100644
--- a/src/views/landing/landing.py
+++ b/src/views/landing/landing.py
@@ -3,7 +3,7 @@
import src.routes as routes
from src.comps.ui.themes import theme_buttons
from src.docs.library.base_ui.components.base.button import button
-from src.templates.navbar import main_navbar
+from src.templates.navbar import navbar
from src.views.examples.examples import examples_page
@@ -58,7 +58,7 @@ def landing_buttons():
def site_landing_page():
return rx.el.div(
rx.el.div(
- main_navbar(),
+ navbar(),
rx.el.div(
header(),
sub_header(),