@ratio-ui/core 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/README.md +2 -0
  2. package/dist/catalogue.json +1719 -43
  3. package/dist/components/app-shell/AppShell.d.ts +22 -0
  4. package/dist/components/app-shell/AppShell.js +39 -0
  5. package/dist/components/app-shell/context.js +5 -0
  6. package/dist/components/app-shell/index.d.ts +2 -0
  7. package/dist/components/app-shell/index.js +1 -0
  8. package/dist/components/avatar/Avatar.d.ts +22 -0
  9. package/dist/components/avatar/Avatar.js +38 -0
  10. package/dist/components/avatar/index.d.ts +2 -0
  11. package/dist/components/avatar/index.js +1 -0
  12. package/dist/components/button/Button.d.ts +37 -0
  13. package/dist/components/button/Button.js +41 -0
  14. package/dist/components/button/index.d.ts +2 -0
  15. package/dist/components/button/index.js +1 -0
  16. package/dist/components/card/Card.d.ts +33 -0
  17. package/dist/components/card/Card.js +53 -0
  18. package/dist/components/card/index.d.ts +2 -0
  19. package/dist/components/card/index.js +1 -0
  20. package/dist/components/checkbox/Checkbox.d.ts +10 -0
  21. package/dist/components/checkbox/Checkbox.js +28 -0
  22. package/dist/components/checkbox/index.d.ts +2 -0
  23. package/dist/components/checkbox/index.js +1 -0
  24. package/dist/components/data-table/DataTable.d.ts +65 -0
  25. package/dist/components/data-table/DataTable.js +141 -0
  26. package/dist/components/data-table/index.d.ts +2 -0
  27. package/dist/components/data-table/index.js +1 -0
  28. package/dist/components/definition/Definition.d.ts +14 -0
  29. package/dist/components/definition/Definition.js +29 -0
  30. package/dist/components/definition/index.d.ts +2 -0
  31. package/dist/components/definition/index.js +1 -0
  32. package/dist/components/dialog/Dialog.d.ts +44 -0
  33. package/dist/components/dialog/Dialog.js +79 -0
  34. package/dist/components/dialog/index.d.ts +2 -0
  35. package/dist/components/dialog/index.js +1 -0
  36. package/dist/components/dropdown-menu/DropdownMenu.d.ts +73 -0
  37. package/dist/components/dropdown-menu/DropdownMenu.js +116 -0
  38. package/dist/components/dropdown-menu/index.d.ts +2 -0
  39. package/dist/components/dropdown-menu/index.js +1 -0
  40. package/dist/components/empty-state/EmptyState.d.ts +15 -0
  41. package/dist/components/empty-state/EmptyState.js +30 -0
  42. package/dist/components/empty-state/index.d.ts +2 -0
  43. package/dist/components/empty-state/index.js +1 -0
  44. package/dist/components/filter-tabs/FilterTabs.d.ts +28 -0
  45. package/dist/components/filter-tabs/FilterTabs.js +37 -0
  46. package/dist/components/filter-tabs/index.d.ts +2 -0
  47. package/dist/components/filter-tabs/index.js +1 -0
  48. package/dist/components/global-search/GlobalSearch.d.ts +51 -0
  49. package/dist/components/global-search/GlobalSearch.js +144 -0
  50. package/dist/components/global-search/index.d.ts +2 -0
  51. package/dist/components/global-search/index.js +1 -0
  52. package/dist/components/icon/registry.d.ts +3 -2
  53. package/dist/components/icon/registry.js +53 -1
  54. package/dist/components/input/Input.d.ts +19 -0
  55. package/dist/components/input/Input.js +26 -0
  56. package/dist/components/input/index.d.ts +2 -0
  57. package/dist/components/input/index.js +1 -0
  58. package/dist/components/input-group/InputGroup.d.ts +42 -0
  59. package/dist/components/input-group/InputGroup.js +83 -0
  60. package/dist/components/input-group/index.d.ts +2 -0
  61. package/dist/components/input-group/index.js +1 -0
  62. package/dist/components/kbd/Kbd.d.ts +17 -0
  63. package/dist/components/kbd/Kbd.js +21 -0
  64. package/dist/components/kbd/index.d.ts +2 -0
  65. package/dist/components/kbd/index.js +1 -0
  66. package/dist/components/link-provider/LinkProvider.d.ts +29 -0
  67. package/dist/components/link-provider/LinkProvider.js +15 -0
  68. package/dist/components/link-provider/RatioLink.js +18 -0
  69. package/dist/components/link-provider/context.js +4 -0
  70. package/dist/components/link-provider/index.d.ts +2 -0
  71. package/dist/components/link-provider/index.js +1 -0
  72. package/dist/components/metric-strip/MetricStrip.d.ts +23 -0
  73. package/dist/components/metric-strip/MetricStrip.js +39 -0
  74. package/dist/components/metric-strip/index.d.ts +2 -0
  75. package/dist/components/metric-strip/index.js +1 -0
  76. package/dist/components/page-header/PageHeader.d.ts +37 -0
  77. package/dist/components/page-header/PageHeader.js +62 -0
  78. package/dist/components/page-header/index.d.ts +2 -0
  79. package/dist/components/page-header/index.js +1 -0
  80. package/dist/components/pagination/Pagination.d.ts +18 -0
  81. package/dist/components/pagination/Pagination.js +59 -0
  82. package/dist/components/pagination/index.d.ts +2 -0
  83. package/dist/components/pagination/index.js +1 -0
  84. package/dist/components/popover/Popover.d.ts +27 -0
  85. package/dist/components/popover/Popover.js +47 -0
  86. package/dist/components/popover/index.d.ts +2 -0
  87. package/dist/components/popover/index.js +1 -0
  88. package/dist/components/search-field/SearchField.d.ts +23 -0
  89. package/dist/components/search-field/SearchField.js +66 -0
  90. package/dist/components/search-field/index.d.ts +2 -0
  91. package/dist/components/search-field/index.js +1 -0
  92. package/dist/components/side-nav/SideNav.d.ts +64 -0
  93. package/dist/components/side-nav/SideNav.js +194 -0
  94. package/dist/components/side-nav/index.d.ts +2 -0
  95. package/dist/components/side-nav/index.js +1 -0
  96. package/dist/components/skeleton/Skeleton.d.ts +13 -0
  97. package/dist/components/skeleton/Skeleton.js +21 -0
  98. package/dist/components/skeleton/index.d.ts +2 -0
  99. package/dist/components/skeleton/index.js +1 -0
  100. package/dist/components/spinner/Spinner.d.ts +11 -0
  101. package/dist/components/spinner/Spinner.js +16 -0
  102. package/dist/components/spinner/index.d.ts +2 -0
  103. package/dist/components/spinner/index.js +1 -0
  104. package/dist/components/status-pill/StatusPill.d.ts +14 -0
  105. package/dist/components/status-pill/StatusPill.js +19 -0
  106. package/dist/components/status-pill/index.d.ts +2 -0
  107. package/dist/components/status-pill/index.js +1 -0
  108. package/dist/components/table/Table.d.ts +46 -0
  109. package/dist/components/table/Table.js +87 -0
  110. package/dist/components/table/index.d.ts +2 -0
  111. package/dist/components/table/index.js +1 -0
  112. package/dist/components/table-loader/TableLoader.d.ts +31 -0
  113. package/dist/components/table-loader/TableLoader.js +35 -0
  114. package/dist/components/table-loader/index.d.ts +2 -0
  115. package/dist/components/table-loader/index.js +1 -0
  116. package/dist/components/tabs/Tabs.d.ts +23 -0
  117. package/dist/components/tabs/Tabs.js +41 -0
  118. package/dist/components/tabs/index.d.ts +2 -0
  119. package/dist/components/tabs/index.js +1 -0
  120. package/dist/components/toaster/Toaster.d.ts +32 -0
  121. package/dist/components/toaster/Toaster.js +89 -0
  122. package/dist/components/toaster/index.d.ts +2 -0
  123. package/dist/components/toaster/index.js +1 -0
  124. package/dist/components/tooltip/Tooltip.d.ts +18 -0
  125. package/dist/components/tooltip/Tooltip.js +35 -0
  126. package/dist/components/tooltip/index.d.ts +2 -0
  127. package/dist/components/tooltip/index.js +1 -0
  128. package/dist/components/top-bar/StoreSwitcher.d.ts +26 -0
  129. package/dist/components/top-bar/StoreSwitcher.js +48 -0
  130. package/dist/components/top-bar/TopBar.d.ts +24 -0
  131. package/dist/components/top-bar/TopBar.js +53 -0
  132. package/dist/components/top-bar/index.d.ts +3 -0
  133. package/dist/components/top-bar/index.js +3 -0
  134. package/dist/index.d.ts +65 -1
  135. package/dist/index.js +35 -2
  136. package/dist/lib/cn.js +32 -27
  137. package/dist/lib/format.d.ts +31 -0
  138. package/dist/lib/format.js +65 -0
  139. package/dist/styles.css +1 -1
  140. package/package.json +128 -3
@@ -0,0 +1,48 @@
1
+ import { Avatar } from "../avatar/Avatar.js";
2
+ import { Icon } from "../icon/Icon.js";
3
+ import { DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuLabel, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuTrigger } from "../dropdown-menu/DropdownMenu.js";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ // src/components/top-bar/StoreSwitcher.tsx
6
+ /**
7
+ * The store switcher of TopBar: a square avatar, the store name and a chevron that open a menu of the stores the app
8
+ * passes. On a phone only the avatar shows. Pass it to TopBar's `storeSwitcher` slot.
9
+ */
10
+ function StoreSwitcher({ stores, storeId, onStoreChange, label = "Switch store" }) {
11
+ const current = stores.find((store) => store.id === storeId);
12
+ const name = current?.name ?? label;
13
+ return /* @__PURE__ */ jsxs(DropdownMenu, { children: [/* @__PURE__ */ jsxs(DropdownMenuTrigger, {
14
+ render: /* @__PURE__ */ jsx("button", {
15
+ type: "button",
16
+ className: "rt:flex rt:h-9 rt:items-center rt:gap-2 rt:rounded-lg rt:px-1.5 rt:text-b3 rt:text-foreground rt:hover:bg-muted rt:focus-visible:focus-ring"
17
+ }),
18
+ children: [
19
+ /* @__PURE__ */ jsx(Avatar, {
20
+ name,
21
+ src: current?.src,
22
+ shape: "square",
23
+ size: "sm"
24
+ }),
25
+ /* @__PURE__ */ jsx("span", {
26
+ className: "rt:hidden rt:max-w-40 rt:truncate rt:md:inline",
27
+ children: name
28
+ }),
29
+ /* @__PURE__ */ jsx(Icon, {
30
+ name: "nav-caret-down",
31
+ size: 8,
32
+ tone: "icon"
33
+ })
34
+ ]
35
+ }), /* @__PURE__ */ jsx(DropdownMenuContent, {
36
+ align: "end",
37
+ children: /* @__PURE__ */ jsxs(DropdownMenuGroup, { children: [/* @__PURE__ */ jsx(DropdownMenuLabel, { children: label }), /* @__PURE__ */ jsx(DropdownMenuRadioGroup, {
38
+ value: storeId,
39
+ onValueChange: (value) => onStoreChange?.(String(value)),
40
+ children: stores.map((store) => /* @__PURE__ */ jsx(DropdownMenuRadioItem, {
41
+ value: store.id,
42
+ closeOnClick: true,
43
+ children: store.name
44
+ }, store.id))
45
+ })] })
46
+ })] });
47
+ }
48
+ export { StoreSwitcher };
@@ -0,0 +1,24 @@
1
+ import { JSX, ReactNode } from "react";
2
+ /** The props of TopBar. */
3
+ export type TopBarProps = {
4
+ /** The logo, usually an image. When it is left out the bar shows the text wordmark instead (--rt-wordmark). */
5
+ logo?: ReactNode;
6
+ /** The accessible name of the text wordmark, shown when there is no logo. Defaults to Ratio. */
7
+ wordmarkLabel?: string;
8
+ /** The accessible name of the phone menu button that opens the side navigation. Defaults to Open navigation menu. */
9
+ menuLabel?: string;
10
+ /** The global search, for example GlobalSearch. It takes the free space in the middle. */
11
+ search?: ReactNode;
12
+ /** The buttons at the right, such as help and notifications. */
13
+ actions?: ReactNode;
14
+ /** The store switcher, for example StoreSwitcher. It sits at the right, after the actions. */
15
+ storeSwitcher?: ReactNode;
16
+ /** The account at the far right, such as an Avatar or a menu of the signed-in person. */
17
+ account?: ReactNode;
18
+ };
19
+ /**
20
+ * The bar across the top of every page: logo, search, actions, the store switcher and the account. It is 60px high on a
21
+ * desktop and 52px on a phone, with a hairline under it. The parts are slots, so the bar does not depend on their
22
+ * components. Inside an AppShell with a side nav it shows a menu button on phones, which opens the side nav drawer.
23
+ */
24
+ export declare function TopBar({ logo, wordmarkLabel, menuLabel, search, actions, storeSwitcher, account }: TopBarProps): JSX.Element;
@@ -0,0 +1,53 @@
1
+ import { ShellNavContext } from "../app-shell/context.js";
2
+ import { Icon } from "../icon/Icon.js";
3
+ import { use } from "react";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ // src/components/top-bar/TopBar.tsx
6
+ /**
7
+ * The bar across the top of every page: logo, search, actions, the store switcher and the account. It is 60px high on a
8
+ * desktop and 52px on a phone, with a hairline under it. The parts are slots, so the bar does not depend on their
9
+ * components. Inside an AppShell with a side nav it shows a menu button on phones, which opens the side nav drawer.
10
+ */
11
+ function TopBar({ logo, wordmarkLabel = "Ratio", menuLabel = "Open navigation menu", search, actions, storeSwitcher, account }) {
12
+ const nav = use(ShellNavContext);
13
+ return /* @__PURE__ */ jsxs("header", {
14
+ className: "rt:flex rt:h-13 rt:md:h-15 rt:shrink-0 rt:items-center rt:gap-3 rt:border-b rt:border-border rt:bg-page rt:px-3 rt:md:px-6 rt:font-sans",
15
+ children: [
16
+ nav && /* @__PURE__ */ jsx("button", {
17
+ type: "button",
18
+ "aria-label": menuLabel,
19
+ "aria-expanded": nav.open,
20
+ "aria-controls": nav.id,
21
+ onClick: () => nav.setOpen(!nav.open),
22
+ className: "rt:-ml-1.5 rt:flex rt:size-9 rt:shrink-0 rt:items-center rt:justify-center rt:rounded-lg rt:text-foreground rt:hover:bg-muted rt:focus-visible:focus-ring rt:md:hidden",
23
+ children: /* @__PURE__ */ jsx(Icon, {
24
+ name: "menu",
25
+ size: 16,
26
+ tone: "icon"
27
+ })
28
+ }),
29
+ /* @__PURE__ */ jsx("div", {
30
+ className: "rt:flex rt:shrink-0 rt:items-center rt:text-b4 rt:text-foreground",
31
+ children: logo ?? /* @__PURE__ */ jsx("span", {
32
+ "data-slot": "wordmark",
33
+ role: "img",
34
+ "aria-label": wordmarkLabel,
35
+ className: "rt:wordmark"
36
+ })
37
+ }),
38
+ /* @__PURE__ */ jsx("div", {
39
+ className: "rt:flex rt:min-w-0 rt:flex-1 rt:justify-center",
40
+ children: search
41
+ }),
42
+ /* @__PURE__ */ jsxs("div", {
43
+ className: "rt:flex rt:shrink-0 rt:items-center rt:gap-2",
44
+ children: [
45
+ actions,
46
+ storeSwitcher,
47
+ account
48
+ ]
49
+ })
50
+ ]
51
+ });
52
+ }
53
+ export { TopBar };
@@ -0,0 +1,3 @@
1
+ import { TopBar, TopBarProps } from "./TopBar.js";
2
+ import { StoreOption, StoreSwitcher, StoreSwitcherProps } from "./StoreSwitcher.js";
3
+ export { type StoreOption, StoreSwitcher, type StoreSwitcherProps, TopBar, type TopBarProps };
@@ -0,0 +1,3 @@
1
+ import { TopBar } from "./TopBar.js";
2
+ import { StoreSwitcher } from "./StoreSwitcher.js";
3
+ export { StoreSwitcher, TopBar };
package/dist/index.d.ts CHANGED
@@ -1,11 +1,75 @@
1
+ import { AppShell, AppShellProps } from "./components/app-shell/AppShell.js";
2
+ import "./components/app-shell/index.js";
3
+ import { Avatar, AvatarProps, AvatarShape, AvatarSize, getInitials } from "./components/avatar/Avatar.js";
4
+ import "./components/avatar/index.js";
5
+ import { Button, ButtonProps, ButtonVariant } from "./components/button/Button.js";
6
+ import "./components/button/index.js";
7
+ import { Card, CardContent, CardContentProps, CardDescription, CardDescriptionProps, CardFooter, CardFooterProps, CardHeader, CardHeaderProps, CardProps, CardTitle, CardTitleProps } from "./components/card/Card.js";
8
+ import "./components/card/index.js";
9
+ import { Checkbox, CheckboxProps } from "./components/checkbox/Checkbox.js";
10
+ import "./components/checkbox/index.js";
11
+ import { Table, TableBody, TableBodyProps, TableCaption, TableCaptionProps, TableCell, TableCellProps, TableFooter, TableFooterProps, TableHead, TableHeadProps, TableHeader, TableHeaderProps, TableProps, TableRow, TableRowProps } from "./components/table/Table.js";
12
+ import "./components/table/index.js";
13
+ import { DataTable, DataTableColumn, DataTableProps, DataTableSort } from "./components/data-table/DataTable.js";
14
+ import "./components/data-table/index.js";
15
+ import { Definition, DefinitionProps } from "./components/definition/Definition.js";
16
+ import "./components/definition/index.js";
17
+ import { Dialog, DialogClose, DialogCloseProps, DialogContent, DialogContentProps, DialogDescription, DialogDescriptionProps, DialogFooter, DialogFooterProps, DialogHeader, DialogHeaderProps, DialogTitle, DialogTitleProps, DialogTrigger, DialogTriggerProps } from "./components/dialog/Dialog.js";
18
+ import "./components/dialog/index.js";
19
+ import { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuCheckboxItemProps, DropdownMenuContent, DropdownMenuContentProps, DropdownMenuGroup, DropdownMenuGroupProps, DropdownMenuItem, DropdownMenuItemProps, DropdownMenuLabel, DropdownMenuLabelProps, DropdownMenuProps, DropdownMenuRadioGroup, DropdownMenuRadioGroupProps, DropdownMenuRadioItem, DropdownMenuRadioItemProps, DropdownMenuSeparator, DropdownMenuSeparatorProps, DropdownMenuShortcut, DropdownMenuShortcutProps, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubContentProps, DropdownMenuSubProps, DropdownMenuSubTrigger, DropdownMenuSubTriggerProps, DropdownMenuTrigger, DropdownMenuTriggerProps } from "./components/dropdown-menu/DropdownMenu.js";
20
+ import "./components/dropdown-menu/index.js";
21
+ import { EmptyState, EmptyStateProps } from "./components/empty-state/EmptyState.js";
22
+ import "./components/empty-state/index.js";
23
+ import { FilterTabs, FilterTabsItem, FilterTabsProps } from "./components/filter-tabs/FilterTabs.js";
24
+ import "./components/filter-tabs/index.js";
1
25
  import { IconName } from "./components/icon/registry.js";
2
26
  import { Icon, IconProps, IconSize, IconTone } from "./components/icon/Icon.js";
3
27
  import "./components/icon/index.js";
28
+ import { GlobalSearch, GlobalSearchGroup, GlobalSearchProps, GlobalSearchResult } from "./components/global-search/GlobalSearch.js";
29
+ import "./components/global-search/index.js";
4
30
  import { Space } from "./lib/space.js";
5
31
  import { Inline, InlineProps } from "./components/inline/Inline.js";
6
32
  import "./components/inline/index.js";
33
+ import { InputGroup, InputGroupAddon, InputGroupAddonAlign, InputGroupAddonProps, InputGroupInput, InputGroupInputProps, InputGroupProps, InputGroupShortcut, InputGroupShortcutProps, InputGroupSize, InputGroupText, InputGroupTextProps } from "./components/input-group/InputGroup.js";
34
+ import "./components/input-group/index.js";
35
+ import { Input, InputProps, InputSize } from "./components/input/Input.js";
36
+ import "./components/input/index.js";
37
+ import { Kbd, KbdGroup, KbdGroupProps, KbdProps } from "./components/kbd/Kbd.js";
38
+ import "./components/kbd/index.js";
39
+ import { LinkProvider, LinkProviderProps, LinkRender, LinkRenderProps } from "./components/link-provider/LinkProvider.js";
40
+ import "./components/link-provider/index.js";
41
+ import { MetricSegment, MetricStrip, MetricStripProps } from "./components/metric-strip/MetricStrip.js";
42
+ import "./components/metric-strip/index.js";
43
+ import { StatusPill, StatusPillProps, StatusPillTone } from "./components/status-pill/StatusPill.js";
44
+ import "./components/status-pill/index.js";
45
+ import { PageHeader, PageHeaderMenuItem, PageHeaderProps } from "./components/page-header/PageHeader.js";
46
+ import "./components/page-header/index.js";
47
+ import { Pagination, PaginationProps } from "./components/pagination/Pagination.js";
48
+ import "./components/pagination/index.js";
49
+ import { Popover, PopoverContent, PopoverContentProps, PopoverDescription, PopoverDescriptionProps, PopoverHeader, PopoverHeaderProps, PopoverProps, PopoverTitle, PopoverTitleProps, PopoverTrigger, PopoverTriggerProps } from "./components/popover/Popover.js";
50
+ import "./components/popover/index.js";
51
+ import { SearchField, SearchFieldProps } from "./components/search-field/SearchField.js";
52
+ import "./components/search-field/index.js";
53
+ import { SideNav, SideNavAccount, SideNavItem, SideNavProps, SideNavSection } from "./components/side-nav/SideNav.js";
54
+ import "./components/side-nav/index.js";
55
+ import { Skeleton, SkeletonProps, SkeletonShape } from "./components/skeleton/Skeleton.js";
56
+ import "./components/skeleton/index.js";
57
+ import { Spinner, SpinnerProps } from "./components/spinner/Spinner.js";
58
+ import "./components/spinner/index.js";
7
59
  import { Stack, StackProps } from "./components/stack/Stack.js";
8
60
  import "./components/stack/index.js";
61
+ import { TableLoader, TableLoaderColumn, TableLoaderProps } from "./components/table-loader/TableLoader.js";
62
+ import "./components/table-loader/index.js";
63
+ import { Tabs, TabsContent, TabsContentProps, TabsList, TabsListProps, TabsProps, TabsTrigger, TabsTriggerProps } from "./components/tabs/Tabs.js";
64
+ import "./components/tabs/index.js";
9
65
  import { Text, TextProps, TextTone, TextVariant } from "./components/text/Text.js";
10
66
  import "./components/text/index.js";
11
- export { Icon, type IconName, type IconProps, type IconSize, type IconTone, Inline, type InlineProps, type Space, Stack, type StackProps, Text, type TextProps, type TextTone, type TextVariant };
67
+ import { ToastOptions, Toaster, ToasterProps, toast } from "./components/toaster/Toaster.js";
68
+ import "./components/toaster/index.js";
69
+ import { Tooltip, TooltipContent, TooltipContentProps, TooltipProps, TooltipProvider, TooltipProviderProps, TooltipTrigger, TooltipTriggerProps } from "./components/tooltip/Tooltip.js";
70
+ import "./components/tooltip/index.js";
71
+ import { TopBar, TopBarProps } from "./components/top-bar/TopBar.js";
72
+ import { StoreOption, StoreSwitcher, StoreSwitcherProps } from "./components/top-bar/StoreSwitcher.js";
73
+ import "./components/top-bar/index.js";
74
+ import { DateInput, FORMAT, formatCount, formatDate, formatMoney, formatTime } from "./lib/format.js";
75
+ export { AppShell, type AppShellProps, Avatar, type AvatarProps, type AvatarShape, type AvatarSize, Button, type ButtonProps, type ButtonVariant, Card, CardContent, type CardContentProps, CardDescription, type CardDescriptionProps, CardFooter, type CardFooterProps, CardHeader, type CardHeaderProps, type CardProps, CardTitle, type CardTitleProps, Checkbox, type CheckboxProps, DataTable, type DataTableColumn, type DataTableProps, type DataTableSort, DateInput, Definition, type DefinitionProps, Dialog, DialogClose, type DialogCloseProps, DialogContent, type DialogContentProps, DialogDescription, type DialogDescriptionProps, DialogFooter, type DialogFooterProps, DialogHeader, type DialogHeaderProps, DialogTitle, type DialogTitleProps, DialogTrigger, type DialogTriggerProps, DropdownMenu, DropdownMenuCheckboxItem, type DropdownMenuCheckboxItemProps, DropdownMenuContent, type DropdownMenuContentProps, DropdownMenuGroup, type DropdownMenuGroupProps, DropdownMenuItem, type DropdownMenuItemProps, DropdownMenuLabel, type DropdownMenuLabelProps, type DropdownMenuProps, DropdownMenuRadioGroup, type DropdownMenuRadioGroupProps, DropdownMenuRadioItem, type DropdownMenuRadioItemProps, DropdownMenuSeparator, type DropdownMenuSeparatorProps, DropdownMenuShortcut, type DropdownMenuShortcutProps, DropdownMenuSub, DropdownMenuSubContent, type DropdownMenuSubContentProps, type DropdownMenuSubProps, DropdownMenuSubTrigger, type DropdownMenuSubTriggerProps, DropdownMenuTrigger, type DropdownMenuTriggerProps, EmptyState, type EmptyStateProps, FORMAT, FilterTabs, type FilterTabsItem, type FilterTabsProps, GlobalSearch, type GlobalSearchGroup, type GlobalSearchProps, type GlobalSearchResult, Icon, type IconName, type IconProps, type IconSize, type IconTone, Inline, type InlineProps, Input, InputGroup, InputGroupAddon, type InputGroupAddonAlign, type InputGroupAddonProps, InputGroupInput, type InputGroupInputProps, type InputGroupProps, InputGroupShortcut, type InputGroupShortcutProps, type InputGroupSize, InputGroupText, type InputGroupTextProps, type InputProps, type InputSize, Kbd, KbdGroup, type KbdGroupProps, type KbdProps, LinkProvider, type LinkProviderProps, type LinkRender, type LinkRenderProps, type MetricSegment, MetricStrip, type MetricStripProps, PageHeader, type PageHeaderMenuItem, type PageHeaderProps, Pagination, type PaginationProps, Popover, PopoverContent, type PopoverContentProps, PopoverDescription, type PopoverDescriptionProps, PopoverHeader, type PopoverHeaderProps, type PopoverProps, PopoverTitle, type PopoverTitleProps, PopoverTrigger, type PopoverTriggerProps, SearchField, type SearchFieldProps, SideNav, type SideNavAccount, type SideNavItem, type SideNavProps, type SideNavSection, Skeleton, type SkeletonProps, type SkeletonShape, type Space, Spinner, type SpinnerProps, Stack, type StackProps, StatusPill, type StatusPillProps, type StatusPillTone, type StoreOption, StoreSwitcher, type StoreSwitcherProps, Table, TableBody, type TableBodyProps, TableCaption, type TableCaptionProps, TableCell, type TableCellProps, TableFooter, type TableFooterProps, TableHead, type TableHeadProps, TableHeader, type TableHeaderProps, TableLoader, type TableLoaderColumn, type TableLoaderProps, type TableProps, TableRow, type TableRowProps, Tabs, TabsContent, type TabsContentProps, TabsList, type TabsListProps, type TabsProps, TabsTrigger, type TabsTriggerProps, Text, type TextProps, type TextTone, type TextVariant, type ToastOptions, Toaster, type ToasterProps, Tooltip, TooltipContent, type TooltipContentProps, type TooltipProps, TooltipProvider, type TooltipProviderProps, TooltipTrigger, type TooltipTriggerProps, TopBar, type TopBarProps, formatCount, formatDate, formatMoney, formatTime, getInitials, toast };
package/dist/index.js CHANGED
@@ -1,5 +1,38 @@
1
+ import { AppShell } from "./components/app-shell/AppShell.js";
2
+ import { Avatar, getInitials } from "./components/avatar/Avatar.js";
3
+ import { Button } from "./components/button/Button.js";
4
+ import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from "./components/card/Card.js";
1
5
  import { Icon } from "./components/icon/Icon.js";
6
+ import { Checkbox } from "./components/checkbox/Checkbox.js";
7
+ import { FORMAT, formatCount, formatDate, formatMoney, formatTime } from "./lib/format.js";
8
+ import { Pagination } from "./components/pagination/Pagination.js";
9
+ import { Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow } from "./components/table/Table.js";
10
+ import { DataTable } from "./components/data-table/DataTable.js";
11
+ import { Definition } from "./components/definition/Definition.js";
12
+ import { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger } from "./components/dialog/Dialog.js";
13
+ import { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger } from "./components/dropdown-menu/DropdownMenu.js";
14
+ import { Text } from "./components/text/Text.js";
15
+ import { EmptyState } from "./components/empty-state/EmptyState.js";
16
+ import { FilterTabs } from "./components/filter-tabs/FilterTabs.js";
17
+ import { InputGroup, InputGroupAddon, InputGroupInput, InputGroupShortcut, InputGroupText } from "./components/input-group/InputGroup.js";
18
+ import { Kbd, KbdGroup } from "./components/kbd/Kbd.js";
19
+ import { GlobalSearch } from "./components/global-search/GlobalSearch.js";
2
20
  import { Inline } from "./components/inline/Inline.js";
21
+ import { Input } from "./components/input/Input.js";
22
+ import { LinkProvider } from "./components/link-provider/LinkProvider.js";
23
+ import { MetricStrip } from "./components/metric-strip/MetricStrip.js";
24
+ import { StatusPill } from "./components/status-pill/StatusPill.js";
25
+ import { PageHeader } from "./components/page-header/PageHeader.js";
26
+ import { Popover, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger } from "./components/popover/Popover.js";
27
+ import { SearchField } from "./components/search-field/SearchField.js";
28
+ import { SideNav } from "./components/side-nav/SideNav.js";
29
+ import { Skeleton } from "./components/skeleton/Skeleton.js";
30
+ import { Spinner } from "./components/spinner/Spinner.js";
3
31
  import { Stack } from "./components/stack/Stack.js";
4
- import { Text } from "./components/text/Text.js";
5
- export { Icon, Inline, Stack, Text };
32
+ import { TableLoader } from "./components/table-loader/TableLoader.js";
33
+ import { Tabs, TabsContent, TabsList, TabsTrigger } from "./components/tabs/Tabs.js";
34
+ import { Toaster, toast } from "./components/toaster/Toaster.js";
35
+ import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "./components/tooltip/Tooltip.js";
36
+ import { TopBar } from "./components/top-bar/TopBar.js";
37
+ import { StoreSwitcher } from "./components/top-bar/StoreSwitcher.js";
38
+ export { AppShell, Avatar, Button, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, DataTable, Definition, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, FORMAT, FilterTabs, GlobalSearch, Icon, Inline, Input, InputGroup, InputGroupAddon, InputGroupInput, InputGroupShortcut, InputGroupText, Kbd, KbdGroup, LinkProvider, MetricStrip, PageHeader, Pagination, Popover, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger, SearchField, SideNav, Skeleton, Spinner, Stack, StatusPill, StoreSwitcher, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableLoader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Text, Toaster, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TopBar, formatCount, formatDate, formatMoney, formatTime, getInitials, toast };
package/dist/lib/cn.js CHANGED
@@ -3,33 +3,38 @@ import { extendTailwindMerge } from "tailwind-merge";
3
3
  // src/lib/cn.ts
4
4
  const twMerge = extendTailwindMerge({
5
5
  prefix: "rt",
6
- extend: { theme: {
7
- text: [
8
- "display",
9
- "h1",
10
- "h5",
11
- "s1",
12
- "s2",
13
- "b1",
14
- "b2",
15
- "b3",
16
- "b4",
17
- "c1",
18
- "c2",
19
- "c3",
20
- "label",
21
- "btn",
22
- "btn-sm"
23
- ],
24
- shadow: [
25
- "ring-subtle",
26
- "ring-focus",
27
- "ring-strong",
28
- "ring-hairline",
29
- "ring-accent-hairline"
30
- ],
31
- container: ["content"]
32
- } }
6
+ extend: {
7
+ theme: {
8
+ text: [
9
+ "display",
10
+ "h1",
11
+ "h5",
12
+ "s1",
13
+ "s2",
14
+ "b1",
15
+ "b2",
16
+ "b3",
17
+ "b4",
18
+ "c1",
19
+ "c2",
20
+ "c3",
21
+ "label",
22
+ "btn",
23
+ "btn-sm"
24
+ ],
25
+ shadow: [
26
+ "ring-subtle",
27
+ "ring-focus",
28
+ "ring-strong",
29
+ "ring-hairline",
30
+ "ring-accent-hairline",
31
+ "ring-destructive",
32
+ "ring-invalid"
33
+ ],
34
+ container: ["content"]
35
+ },
36
+ classGroups: { h: [{ h: ["progress"] }] }
37
+ }
33
38
  });
34
39
  /**
35
40
  * Joins class values the way clsx does, then drops every rt: utility that a later one overrides.
@@ -0,0 +1,31 @@
1
+ /**
2
+ * The formats of design question 6, pending its answer: money in rupees with Indian grouping and two decimals
3
+ * (1,23,456.50), dates as day/month/year (28/10/2026), times on a 12-hour clock with a lower-case am or pm (3:05 pm).
4
+ * Counts carry no separators, as the design system says. Dates and times are written in the viewer's time zone.
5
+ */
6
+ export declare const FORMAT: {
7
+ /** The locale whose grouping and currency symbols money uses. */
8
+ readonly locale: "en-IN";
9
+ /** The currency of an amount when none is given (ISO 4217). */
10
+ readonly currency: "INR";
11
+ /** The decimals every amount shows. */
12
+ readonly moneyDecimals: 2;
13
+ };
14
+ /**
15
+ * A date, a timestamp in milliseconds or a date string that `Date` reads, such as an ISO 8601 date from an API.
16
+ * A date-only string (2026-10-28) is that calendar day wherever the viewer is.
17
+ */
18
+ export type DateInput = Date | number | string;
19
+ /**
20
+ * Writes an amount of money: the currency symbol, Indian digit grouping and two decimals, so 123456.5 is ₹1,23,456.50
21
+ * and -1234.5 is -₹1,234.50.
22
+ * @param amount The amount in the currency's main unit (rupees, not paise).
23
+ * @param currency The ISO 4217 code; rupees when left out.
24
+ */
25
+ export declare function formatMoney(amount: number, currency?: string): string;
26
+ /** Writes a count with no thousands separators, as the design system says: 123456, never 1,23,456. */
27
+ export declare function formatCount(count: number): string;
28
+ /** Writes a date as day/month/year with two-digit day and month: 28/10/2026. Throws a RangeError on a value that is not a date. */
29
+ export declare function formatDate(value: DateInput): string;
30
+ /** Writes a time on a 12-hour clock, minutes in two digits, with a lower-case am or pm: 3:05 pm, 12:07 am. Throws a RangeError on a value that is not a date. */
31
+ export declare function formatTime(value: DateInput): string;
@@ -0,0 +1,65 @@
1
+ // src/lib/format.ts
2
+ /**
3
+ * The formats of design question 6, pending its answer: money in rupees with Indian grouping and two decimals
4
+ * (1,23,456.50), dates as day/month/year (28/10/2026), times on a 12-hour clock with a lower-case am or pm (3:05 pm).
5
+ * Counts carry no separators, as the design system says. Dates and times are written in the viewer's time zone.
6
+ */
7
+ const FORMAT = {
8
+ /** The locale whose grouping and currency symbols money uses. */
9
+ locale: "en-IN",
10
+ /** The currency of an amount when none is given (ISO 4217). */
11
+ currency: "INR",
12
+ /** The decimals every amount shows. */
13
+ moneyDecimals: 2
14
+ };
15
+ /** A date-only ISO 8601 string: year, month and day, no time. */
16
+ const DATE_ONLY = /^(\d{4})-(\d{2})-(\d{2})$/;
17
+ /**
18
+ * The Date for a value, or a RangeError when the value is not a date, so "Invalid Date" is never written. `Date` reads a
19
+ * date-only string as UTC midnight, the day before anywhere west of UTC, so that form is built from local parts instead.
20
+ */
21
+ function toDate(value) {
22
+ const [, year, month, day] = typeof value === "string" ? DATE_ONLY.exec(value) ?? [] : [];
23
+ if (year !== void 0 && month !== void 0 && day !== void 0) {
24
+ const date = new Date(Number(year), Number(month) - 1, Number(day));
25
+ if (date.getMonth() !== Number(month) - 1 || date.getDate() !== Number(day)) throw new RangeError(`Not a date: ${value}`);
26
+ return date;
27
+ }
28
+ const date = value instanceof Date ? value : new Date(value);
29
+ if (Number.isNaN(date.getTime())) throw new RangeError(`Not a date: ${String(value)}`);
30
+ return date;
31
+ }
32
+ const pad = (part) => String(part).padStart(2, "0");
33
+ /**
34
+ * Writes an amount of money: the currency symbol, Indian digit grouping and two decimals, so 123456.5 is ₹1,23,456.50
35
+ * and -1234.5 is -₹1,234.50.
36
+ * @param amount The amount in the currency's main unit (rupees, not paise).
37
+ * @param currency The ISO 4217 code; rupees when left out.
38
+ */
39
+ function formatMoney(amount, currency = FORMAT.currency) {
40
+ return new Intl.NumberFormat(FORMAT.locale, {
41
+ style: "currency",
42
+ currency,
43
+ minimumFractionDigits: FORMAT.moneyDecimals,
44
+ maximumFractionDigits: FORMAT.moneyDecimals
45
+ }).format(amount);
46
+ }
47
+ /** Writes a count with no thousands separators, as the design system says: 123456, never 1,23,456. */
48
+ function formatCount(count) {
49
+ return new Intl.NumberFormat(FORMAT.locale, {
50
+ useGrouping: false,
51
+ maximumFractionDigits: 20
52
+ }).format(count);
53
+ }
54
+ /** Writes a date as day/month/year with two-digit day and month: 28/10/2026. Throws a RangeError on a value that is not a date. */
55
+ function formatDate(value) {
56
+ const date = toDate(value);
57
+ return `${pad(date.getDate())}/${pad(date.getMonth() + 1)}/${date.getFullYear()}`;
58
+ }
59
+ /** Writes a time on a 12-hour clock, minutes in two digits, with a lower-case am or pm: 3:05 pm, 12:07 am. Throws a RangeError on a value that is not a date. */
60
+ function formatTime(value) {
61
+ const date = toDate(value);
62
+ const hours = date.getHours();
63
+ return `${hours % 12 === 0 ? 12 : hours % 12}:${pad(date.getMinutes())} ${hours < 12 ? "am" : "pm"}`;
64
+ }
65
+ export { FORMAT, formatCount, formatDate, formatMoney, formatTime };
package/dist/styles.css CHANGED
@@ -1,2 +1,2 @@
1
1
  /*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
2
- @font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:400;src:url(./fonts/inter-latin-ext-400-normal.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:400;src:url(./fonts/inter-latin-400-normal.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:500;src:url(./fonts/inter-latin-ext-500-normal.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:500;src:url(./fonts/inter-latin-500-normal.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:600;src:url(./fonts/inter-latin-ext-600-normal.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:600;src:url(./fonts/inter-latin-600-normal.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--rt-white:#fff;--rt-blue-600:#3f53fe;--rt-blue-700:#2e40e3;--rt-blue-100:#dde0ff;--rt-ink-900:#131927;--rt-ink-800:#1a2c44;--rt-ink-700:#273951;--rt-ink-600:#344054;--rt-ink-550:#3c4f69;--rt-ink-500:#545969;--rt-ink-450:#667691;--rt-ink-800-a60:#1a2c4499;--rt-line-100:#ecf1f6;--rt-line-150:#dde5ee;--rt-line-200:#e5e7ea;--rt-line-250:#e8e8e8;--rt-green-100:#eafcdd;--rt-green-300:#a8f170;--rt-green-800:#217005;--rt-amber-100:#fff3e2;--rt-amber-400:#f7a62d;--rt-amber-600:#e88b00;--rt-typeface:"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--rt-page:var(--rt-white);--rt-background:var(--rt-white);--rt-card:var(--rt-white);--rt-card-foreground:var(--rt-ink-800);--rt-popover:var(--rt-white);--rt-popover-foreground:var(--rt-ink-800);--rt-foreground:var(--rt-ink-800);--rt-foreground-strong:var(--rt-ink-900);--rt-foreground-emphasis:var(--rt-ink-600);--rt-foreground-subdued:var(--rt-ink-550);--rt-muted-foreground:var(--rt-ink-450);--rt-icon:var(--rt-ink-500);--rt-tab-inactive:var(--rt-ink-800-a60);--rt-primary:var(--rt-blue-600);--rt-primary-foreground:var(--rt-white);--rt-primary-hover:var(--rt-blue-700);--rt-primary-tint:var(--rt-blue-100);--rt-secondary:transparent;--rt-secondary-foreground:var(--rt-ink-700);--rt-muted:var(--rt-line-100);--rt-accent:var(--rt-line-100);--rt-accent-foreground:var(--rt-ink-900);--rt-border:var(--rt-line-100);--rt-border-strong:var(--rt-line-250);--rt-divider:var(--rt-line-200);--rt-input:var(--rt-line-100);--rt-control:var(--rt-line-150);--rt-ring:var(--rt-blue-600);--rt-success:var(--rt-green-800);--rt-success-tint:var(--rt-green-100);--rt-success-border:var(--rt-green-300);--rt-warning:var(--rt-amber-600);--rt-warning-tint:var(--rt-amber-100);--rt-warning-border:var(--rt-amber-400);--rt-sidebar:var(--rt-white);--rt-sidebar-foreground:var(--rt-ink-800);--rt-sidebar-primary:var(--rt-blue-600);--rt-sidebar-primary-foreground:var(--rt-white);--rt-sidebar-accent:var(--rt-line-100);--rt-sidebar-accent-foreground:var(--rt-ink-800);--rt-sidebar-border:var(--rt-line-100);--rt-sidebar-ring:var(--rt-blue-600)}[class^=rt\:],[class*=" rt:"],[class^=rt\:]:before,[class*=" rt:"]:before,[class^=rt\:]:after,[class*=" rt:"]:after{box-sizing:border-box;font-family:var(--rt-typeface);border:0 solid;margin:0;padding:0}:root,:host{--rt-spacing:4px;--rt-text-display:48px;--rt-text-display--line-height:58px;--rt-text-display--font-weight:600;--rt-text-display--letter-spacing:0px;--rt-text-h1:34px;--rt-text-h1--line-height:40px;--rt-text-h1--font-weight:600;--rt-text-h1--letter-spacing:0px;--rt-text-h5:28px;--rt-text-h5--line-height:34px;--rt-text-h5--font-weight:600;--rt-text-h5--letter-spacing:0px;--rt-text-s1:28px;--rt-text-s1--line-height:34px;--rt-text-s1--font-weight:600;--rt-text-s1--letter-spacing:0px;--rt-text-s2:24px;--rt-text-s2--line-height:28px;--rt-text-s2--font-weight:600;--rt-text-s2--letter-spacing:0px;--rt-text-b1:12px;--rt-text-b1--line-height:20px;--rt-text-b1--font-weight:400;--rt-text-b1--letter-spacing:0px;--rt-text-b2:12px;--rt-text-b2--line-height:20px;--rt-text-b2--font-weight:500;--rt-text-b2--letter-spacing:0px;--rt-text-b3:14px;--rt-text-b3--line-height:20px;--rt-text-b3--font-weight:400;--rt-text-b3--letter-spacing:-.15px;--rt-text-b4:14px;--rt-text-b4--line-height:20px;--rt-text-b4--font-weight:600;--rt-text-b4--letter-spacing:-.15px;--rt-text-c1:12px;--rt-text-c1--line-height:16px;--rt-text-c1--font-weight:400;--rt-text-c1--letter-spacing:0px;--rt-text-c2:12px;--rt-text-c2--line-height:16px;--rt-text-c2--font-weight:500;--rt-text-c2--letter-spacing:0px;--rt-text-c3:14px;--rt-text-c3--line-height:16px;--rt-text-c3--font-weight:500;--rt-text-c3--letter-spacing:0px;--rt-text-label:12px;--rt-text-label--line-height:16px;--rt-text-label--font-weight:500;--rt-text-label--letter-spacing:0px;--rt-shadow-ring-subtle:inset 0 0 0 1px var(--rt-input), 0 0 0 1px var(--rt-input);--rt-shadow-ring-focus:inset 0 0 0 1px var(--rt-ring), 0 0 0 1px var(--rt-input);--rt-shadow-ring-strong:inset 0 0 0 1px var(--rt-border-strong);--rt-shadow-ring-hairline:inset 0 0 0 .5px var(--rt-control), 0 0 0 .5px var(--rt-control);--rt-shadow-ring-accent-hairline:inset 0 0 0 .5px var(--rt-primary), 0 0 0 .5px var(--rt-primary)}.rt\:flex{display:flex}.rt\:inline-block{display:inline-block}.rt\:shrink-0{flex-shrink:0}.rt\:flex-col{flex-direction:column}.rt\:flex-wrap{flex-wrap:wrap}.rt\:items-baseline{align-items:baseline}.rt\:items-center{align-items:center}.rt\:items-end{align-items:flex-end}.rt\:items-start{align-items:flex-start}.rt\:items-stretch{align-items:stretch}.rt\:justify-between{justify-content:space-between}.rt\:justify-center{justify-content:center}.rt\:justify-end{justify-content:flex-end}.rt\:justify-start{justify-content:flex-start}.rt\:gap-0{gap:0}.rt\:gap-0\.5{gap:calc(var(--rt-spacing) * .5)}.rt\:gap-1{gap:var(--rt-spacing)}.rt\:gap-1\.5{gap:calc(var(--rt-spacing) * 1.5)}.rt\:gap-1\.75{gap:calc(var(--rt-spacing) * 1.75)}.rt\:gap-2{gap:calc(var(--rt-spacing) * 2)}.rt\:gap-2\.75{gap:calc(var(--rt-spacing) * 2.75)}.rt\:gap-3{gap:calc(var(--rt-spacing) * 3)}.rt\:gap-3\.5{gap:calc(var(--rt-spacing) * 3.5)}.rt\:gap-6{gap:calc(var(--rt-spacing) * 6)}.rt\:gap-8{gap:calc(var(--rt-spacing) * 8)}.rt\:gap-20{gap:calc(var(--rt-spacing) * 20)}.rt\:gap-px{gap:1px}.rt\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.rt\:align-baseline{vertical-align:baseline}.rt\:text-b1{font-size:var(--rt-text-b1);line-height:var(--tw-leading,var(--rt-text-b1--line-height));letter-spacing:var(--tw-tracking,var(--rt-text-b1--letter-spacing));font-weight:var(--tw-font-weight,var(--rt-text-b1--font-weight))}.rt\:text-b2{font-size:var(--rt-text-b2);line-height:var(--tw-leading,var(--rt-text-b2--line-height));letter-spacing:var(--tw-tracking,var(--rt-text-b2--letter-spacing));font-weight:var(--tw-font-weight,var(--rt-text-b2--font-weight))}.rt\:text-b3{font-size:var(--rt-text-b3);line-height:var(--tw-leading,var(--rt-text-b3--line-height));letter-spacing:var(--tw-tracking,var(--rt-text-b3--letter-spacing));font-weight:var(--tw-font-weight,var(--rt-text-b3--font-weight))}.rt\:text-b4{font-size:var(--rt-text-b4);line-height:var(--tw-leading,var(--rt-text-b4--line-height));letter-spacing:var(--tw-tracking,var(--rt-text-b4--letter-spacing));font-weight:var(--tw-font-weight,var(--rt-text-b4--font-weight))}.rt\:text-c1{font-size:var(--rt-text-c1);line-height:var(--tw-leading,var(--rt-text-c1--line-height));letter-spacing:var(--tw-tracking,var(--rt-text-c1--letter-spacing));font-weight:var(--tw-font-weight,var(--rt-text-c1--font-weight))}.rt\:text-c2{font-size:var(--rt-text-c2);line-height:var(--tw-leading,var(--rt-text-c2--line-height));letter-spacing:var(--tw-tracking,var(--rt-text-c2--letter-spacing));font-weight:var(--tw-font-weight,var(--rt-text-c2--font-weight))}.rt\:text-c3{font-size:var(--rt-text-c3);line-height:var(--tw-leading,var(--rt-text-c3--line-height));letter-spacing:var(--tw-tracking,var(--rt-text-c3--letter-spacing));font-weight:var(--tw-font-weight,var(--rt-text-c3--font-weight))}.rt\:text-display{font-size:var(--rt-text-display);line-height:var(--tw-leading,var(--rt-text-display--line-height));letter-spacing:var(--tw-tracking,var(--rt-text-display--letter-spacing));font-weight:var(--tw-font-weight,var(--rt-text-display--font-weight))}.rt\:text-h1{font-size:var(--rt-text-h1);line-height:var(--tw-leading,var(--rt-text-h1--line-height));letter-spacing:var(--tw-tracking,var(--rt-text-h1--letter-spacing));font-weight:var(--tw-font-weight,var(--rt-text-h1--font-weight))}.rt\:text-h5{font-size:var(--rt-text-h5);line-height:var(--tw-leading,var(--rt-text-h5--line-height));letter-spacing:var(--tw-tracking,var(--rt-text-h5--letter-spacing));font-weight:var(--tw-font-weight,var(--rt-text-h5--font-weight))}.rt\:text-label{font-size:var(--rt-text-label);line-height:var(--tw-leading,var(--rt-text-label--line-height));letter-spacing:var(--tw-tracking,var(--rt-text-label--letter-spacing));font-weight:var(--tw-font-weight,var(--rt-text-label--font-weight))}.rt\:text-s1{font-size:var(--rt-text-s1);line-height:var(--tw-leading,var(--rt-text-s1--line-height));letter-spacing:var(--tw-tracking,var(--rt-text-s1--letter-spacing));font-weight:var(--tw-font-weight,var(--rt-text-s1--font-weight))}.rt\:text-s2{font-size:var(--rt-text-s2);line-height:var(--tw-leading,var(--rt-text-s2--line-height));letter-spacing:var(--tw-tracking,var(--rt-text-s2--letter-spacing));font-weight:var(--tw-font-weight,var(--rt-text-s2--font-weight))}.rt\:text-foreground{color:var(--rt-foreground)}.rt\:text-foreground-strong{color:var(--rt-foreground-strong)}.rt\:text-foreground-subdued{color:var(--rt-foreground-subdued)}.rt\:text-icon{color:var(--rt-icon)}.rt\:text-muted-foreground{color:var(--rt-muted-foreground)}.rt\:text-primary{color:var(--rt-primary)}.rt\:uppercase{text-transform:uppercase}
2
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-font-weight:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-content:""}}}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:400;src:url(./fonts/inter-latin-ext-400-normal.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:400;src:url(./fonts/inter-latin-400-normal.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:500;src:url(./fonts/inter-latin-ext-500-normal.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:500;src:url(./fonts/inter-latin-500-normal.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:600;src:url(./fonts/inter-latin-ext-600-normal.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:600;src:url(./fonts/inter-latin-600-normal.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--rt-white:#fff;--rt-blue-600:#3f53fe;--rt-blue-700:#2e40e3;--rt-blue-100:#dde0ff;--rt-ink-900:#131927;--rt-ink-800:#1a2c44;--rt-ink-700:#273951;--rt-ink-600:#344054;--rt-ink-550:#3c4f69;--rt-ink-500:#545969;--rt-ink-450:#667691;--rt-ink-800-a60:#1a2c4499;--rt-line-100:#ecf1f6;--rt-line-150:#dde5ee;--rt-line-200:#e5e7ea;--rt-line-250:#e8e8e8;--rt-green-100:#eafcdd;--rt-green-300:#a8f170;--rt-green-800:#217005;--rt-amber-100:#fff3e2;--rt-amber-400:#f7a62d;--rt-amber-600:#e88b00;--rt-typeface:"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--rt-page:var(--rt-white);--rt-background:var(--rt-white);--rt-card:var(--rt-white);--rt-card-foreground:var(--rt-ink-800);--rt-popover:var(--rt-white);--rt-popover-foreground:var(--rt-ink-800);--rt-foreground:var(--rt-ink-800);--rt-foreground-strong:var(--rt-ink-900);--rt-foreground-emphasis:var(--rt-ink-600);--rt-foreground-subdued:var(--rt-ink-550);--rt-muted-foreground:var(--rt-ink-450);--rt-icon:var(--rt-ink-500);--rt-tab-inactive:var(--rt-ink-800-a60);--rt-primary:var(--rt-blue-600);--rt-primary-foreground:var(--rt-white);--rt-primary-hover:var(--rt-blue-700);--rt-primary-tint:var(--rt-blue-100);--rt-secondary:transparent;--rt-secondary-foreground:var(--rt-ink-700);--rt-muted:var(--rt-line-100);--rt-accent:var(--rt-line-100);--rt-accent-foreground:var(--rt-ink-900);--rt-border:var(--rt-line-100);--rt-border-strong:var(--rt-line-250);--rt-divider:var(--rt-line-200);--rt-input:var(--rt-line-100);--rt-control:var(--rt-line-150);--rt-ring:var(--rt-blue-600);--rt-success:var(--rt-green-800);--rt-success-tint:var(--rt-green-100);--rt-success-border:var(--rt-green-300);--rt-warning:var(--rt-amber-600);--rt-warning-tint:var(--rt-amber-100);--rt-warning-border:var(--rt-amber-400);--rt-sidebar:var(--rt-white);--rt-sidebar-foreground:var(--rt-ink-800);--rt-sidebar-primary:var(--rt-blue-600);--rt-sidebar-primary-foreground:var(--rt-white);--rt-sidebar-accent:var(--rt-line-100);--rt-sidebar-accent-foreground:var(--rt-ink-800);--rt-sidebar-border:var(--rt-line-100);--rt-sidebar-ring:var(--rt-blue-600);--rt-error:var(--rt-ink-900);--rt-error-icon:var(--rt-ink-900);--rt-destructive:var(--rt-ink-900);--rt-destructive-fill:transparent;--rt-destructive-foreground:var(--rt-ink-700);--rt-destructive-border:var(--rt-line-250);--rt-destructive-hover:var(--rt-blue-100);--rt-status-neutral-foreground:var(--rt-ink-800);--rt-status-neutral-background:transparent;--rt-status-neutral-border:transparent;--rt-focus-ring:var(--rt-blue-600);--rt-focus-ring-width:2px;--rt-focus-ring-offset:2px;--rt-skeleton:var(--rt-line-100);--rt-progress:var(--rt-blue-600);--rt-progress-track:var(--rt-line-100);--rt-progress-height:2px;--rt-loading-animation:none;--rt-spinner-animation:none;--rt-wordmark:"RAT/O";--rt-sidenav-row-h:30px;--rt-sidenav-pad:20px;--rt-sidenav-gap:28px;--rt-sidenav-label-h:26px}[class^=rt\:],[class*=" rt:"],[class^=rt\:]:before,[class*=" rt:"]:before,[class^=rt\:]:after,[class*=" rt:"]:after{box-sizing:border-box;color:inherit;font:inherit;font-family:var(--rt-typeface);letter-spacing:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit;appearance:none;background-color:#0000;border:0 solid;margin:0;padding:0;list-style:none}:root,:host{--rt-spacing:4px;--rt-default-transition-duration:.12s;--rt-default-transition-timing-function:ease;--rt-font-weight-medium:500;--rt-font-weight-semibold:600;--rt-radius-sm:4px;--rt-radius-md:6px;--rt-radius-lg:8px;--rt-radius-3xl:24px;--rt-container-content:1152px;--rt-text-display:48px;--rt-text-display--line-height:58px;--rt-text-display--font-weight:600;--rt-text-display--letter-spacing:0px;--rt-text-h1:34px;--rt-text-h1--line-height:40px;--rt-text-h1--font-weight:600;--rt-text-h1--letter-spacing:0px;--rt-text-h5:28px;--rt-text-h5--line-height:34px;--rt-text-h5--font-weight:600;--rt-text-h5--letter-spacing:0px;--rt-text-s1:28px;--rt-text-s1--line-height:34px;--rt-text-s1--font-weight:600;--rt-text-s1--letter-spacing:0px;--rt-text-s2:24px;--rt-text-s2--line-height:28px;--rt-text-s2--font-weight:600;--rt-text-s2--letter-spacing:0px;--rt-text-b1:12px;--rt-text-b1--line-height:20px;--rt-text-b1--font-weight:400;--rt-text-b1--letter-spacing:0px;--rt-text-b2:12px;--rt-text-b2--line-height:20px;--rt-text-b2--font-weight:500;--rt-text-b2--letter-spacing:0px;--rt-text-b3:14px;--rt-text-b3--line-height:20px;--rt-text-b3--font-weight:400;--rt-text-b3--letter-spacing:-.15px;--rt-text-b4:14px;--rt-text-b4--line-height:20px;--rt-text-b4--font-weight:600;--rt-text-b4--letter-spacing:-.15px;--rt-text-c1:12px;--rt-text-c1--line-height:16px;--rt-text-c1--font-weight:400;--rt-text-c1--letter-spacing:0px;--rt-text-c2:12px;--rt-text-c2--line-height:16px;--rt-text-c2--font-weight:500;--rt-text-c2--letter-spacing:0px;--rt-text-c3:14px;--rt-text-c3--line-height:16px;--rt-text-c3--font-weight:500;--rt-text-c3--letter-spacing:0px;--rt-text-label:12px;--rt-text-label--line-height:16px;--rt-text-label--font-weight:500;--rt-text-label--letter-spacing:0px;--rt-text-btn:14px;--rt-text-btn--line-height:16px;--rt-text-btn--font-weight:400;--rt-text-btn--letter-spacing:0px;--rt-shadow-ring-subtle:inset 0 0 0 1px var(--rt-input), 0 0 0 1px var(--rt-input);--rt-shadow-ring-focus:inset 0 0 0 1px var(--rt-ring), 0 0 0 1px var(--rt-input);--rt-shadow-ring-strong:inset 0 0 0 1px var(--rt-border-strong);--rt-shadow-ring-hairline:inset 0 0 0 .5px var(--rt-control), 0 0 0 .5px var(--rt-control);--rt-shadow-ring-accent-hairline:inset 0 0 0 .5px var(--rt-primary), 0 0 0 .5px var(--rt-primary);--rt-shadow-ring-destructive:inset 0 0 0 1px var(--rt-destructive-border);--rt-shadow-ring-invalid:inset 0 0 0 1px var(--rt-destructive)}.rt\:pointer-events-auto{pointer-events:auto}.rt\:pointer-events-none{pointer-events:none}.rt\:sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.rt\:absolute{position:absolute}.rt\:fixed{position:fixed}.rt\:relative{position:relative}.rt\:inset-0{inset:0}.rt\:inset-y-0{inset-block:0}.rt\:top-4{top:calc(var(--rt-spacing) * 4)}.rt\:right-4{right:calc(var(--rt-spacing) * 4)}.rt\:bottom-4{bottom:calc(var(--rt-spacing) * 4)}.rt\:left-0{left:0}.rt\:left-3{left:calc(var(--rt-spacing) * 3)}.rt\:isolate{isolation:isolate}.rt\:z-50{z-index:50}.rt\:order-first{order:-9999}.rt\:order-last{order:9999}.rt\:m-0{margin:0}.rt\:m-auto{margin:auto}.rt\:mx-auto{margin-inline:auto}.rt\:my-1\.5{margin-block:calc(var(--rt-spacing) * 1.5)}.rt\:-mr-px{margin-right:-1px}.rt\:-mb-px{margin-bottom:-1px}.rt\:-ml-1\.5{margin-left:calc(var(--rt-spacing) * -1.5)}.rt\:ml-auto{margin-left:auto}.rt\:block{display:block}.rt\:flex{display:flex}.rt\:hidden{display:none}.rt\:inline-block{display:inline-block}.rt\:inline-flex{display:inline-flex}.rt\:aspect-square{aspect-ratio:1}.rt\:size-1\.5{width:calc(var(--rt-spacing) * 1.5);height:calc(var(--rt-spacing) * 1.5)}.rt\:size-3\.5{width:calc(var(--rt-spacing) * 3.5);height:calc(var(--rt-spacing) * 3.5)}.rt\:size-4{width:calc(var(--rt-spacing) * 4);height:calc(var(--rt-spacing) * 4)}.rt\:size-5{width:calc(var(--rt-spacing) * 5);height:calc(var(--rt-spacing) * 5)}.rt\:size-6{width:calc(var(--rt-spacing) * 6);height:calc(var(--rt-spacing) * 6)}.rt\:size-7{width:calc(var(--rt-spacing) * 7);height:calc(var(--rt-spacing) * 7)}.rt\:size-8{width:calc(var(--rt-spacing) * 8);height:calc(var(--rt-spacing) * 8)}.rt\:size-9{width:calc(var(--rt-spacing) * 9);height:calc(var(--rt-spacing) * 9)}.rt\:size-10{width:calc(var(--rt-spacing) * 10);height:calc(var(--rt-spacing) * 10)}.rt\:size-full{width:100%;height:100%}.rt\:h-4{height:calc(var(--rt-spacing) * 4)}.rt\:h-5{height:calc(var(--rt-spacing) * 5)}.rt\:h-7{height:calc(var(--rt-spacing) * 7)}.rt\:h-8{height:calc(var(--rt-spacing) * 8)}.rt\:h-9{height:calc(var(--rt-spacing) * 9)}.rt\:h-11{height:calc(var(--rt-spacing) * 11)}.rt\:h-12{height:calc(var(--rt-spacing) * 12)}.rt\:h-13{height:calc(var(--rt-spacing) * 13)}.rt\:h-24{height:calc(var(--rt-spacing) * 24)}.rt\:h-fit{height:fit-content}.rt\:h-full{height:100%}.rt\:h-px{height:1px}.rt\:h-sidenav-label{height:var(--rt-sidenav-label-h)}.rt\:h-sidenav-row{height:var(--rt-sidenav-row-h)}.rt\:max-h-80{max-height:calc(var(--rt-spacing) * 80)}.rt\:max-h-full{max-height:100%}.rt\:min-h-0{min-height:0}.rt\:w-2{width:calc(var(--rt-spacing) * 2)}.rt\:w-7{width:calc(var(--rt-spacing) * 7)}.rt\:w-14{width:calc(var(--rt-spacing) * 14)}.rt\:w-60{width:calc(var(--rt-spacing) * 60)}.rt\:w-72{width:calc(var(--rt-spacing) * 72)}.rt\:w-90{width:calc(var(--rt-spacing) * 90)}.rt\:w-120{width:calc(var(--rt-spacing) * 120)}.rt\:w-fit{width:fit-content}.rt\:w-full{width:100%}.rt\:max-w-40{max-width:calc(var(--rt-spacing) * 40)}.rt\:max-w-64{max-width:calc(var(--rt-spacing) * 64)}.rt\:max-w-72{max-width:calc(var(--rt-spacing) * 72)}.rt\:max-w-content{max-width:var(--rt-container-content)}.rt\:max-w-full{max-width:100%}.rt\:min-w-0{min-width:0}.rt\:min-w-5{min-width:calc(var(--rt-spacing) * 5)}.rt\:min-w-26{min-width:calc(var(--rt-spacing) * 26)}.rt\:min-w-40{min-width:calc(var(--rt-spacing) * 40)}.rt\:flex-1{flex:1}.rt\:flex-auto{flex:auto}.rt\:shrink-0{flex-shrink:0}.rt\:caption-bottom{caption-side:bottom}.rt\:border-collapse{border-collapse:collapse}.rt\:skeleton{background-color:var(--rt-skeleton);animation:var(--rt-loading-animation)}@media (prefers-reduced-motion:reduce){.rt\:skeleton{animation:none}}.rt\:spinner-motion{animation:var(--rt-spinner-animation)}@media (prefers-reduced-motion:reduce){.rt\:spinner-motion{animation:none}}.rt\:cursor-default{cursor:default}.rt\:cursor-help{cursor:help}.rt\:cursor-pointer{cursor:pointer}.rt\:cursor-text{cursor:text}.rt\:flex-col{flex-direction:column}.rt\:flex-wrap{flex-wrap:wrap}.rt\:items-baseline{align-items:baseline}.rt\:items-center{align-items:center}.rt\:items-end{align-items:flex-end}.rt\:items-start{align-items:flex-start}.rt\:items-stretch{align-items:stretch}.rt\:justify-between{justify-content:space-between}.rt\:justify-center{justify-content:center}.rt\:justify-end{justify-content:flex-end}.rt\:justify-start{justify-content:flex-start}.rt\:gap-0{gap:0}.rt\:gap-0\.5{gap:calc(var(--rt-spacing) * .5)}.rt\:gap-1{gap:var(--rt-spacing)}.rt\:gap-1\.5{gap:calc(var(--rt-spacing) * 1.5)}.rt\:gap-1\.75{gap:calc(var(--rt-spacing) * 1.75)}.rt\:gap-2{gap:calc(var(--rt-spacing) * 2)}.rt\:gap-2\.75{gap:calc(var(--rt-spacing) * 2.75)}.rt\:gap-3{gap:calc(var(--rt-spacing) * 3)}.rt\:gap-3\.5{gap:calc(var(--rt-spacing) * 3.5)}.rt\:gap-6{gap:calc(var(--rt-spacing) * 6)}.rt\:gap-8{gap:calc(var(--rt-spacing) * 8)}.rt\:gap-20{gap:calc(var(--rt-spacing) * 20)}.rt\:gap-px{gap:1px}.rt\:sidenav-gap{gap:var(--rt-sidenav-gap)}.rt\:gap-x-3{column-gap:calc(var(--rt-spacing) * 3)}.rt\:gap-y-2{row-gap:calc(var(--rt-spacing) * 2)}.rt\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.rt\:overflow-hidden{overflow:hidden}.rt\:overflow-x-auto{overflow-x:auto}.rt\:overflow-y-auto{overflow-y:auto}.rt\:rounded-3xl{border-radius:var(--rt-radius-3xl)}.rt\:rounded-lg{border-radius:var(--rt-radius-lg)}.rt\:rounded-md{border-radius:var(--rt-radius-md)}.rt\:rounded-sm{border-radius:var(--rt-radius-sm)}.rt\:border{border-style:var(--tw-border-style);border-width:1px}.rt\:border-0{border-style:var(--tw-border-style);border-width:0}.rt\:border-2{border-style:var(--tw-border-style);border-width:2px}.rt\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.rt\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.rt\:border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.rt\:border-border{border-color:var(--rt-border)}.rt\:border-divider{border-color:var(--rt-divider)}.rt\:border-progress-track{border-color:var(--rt-progress-track)}.rt\:border-status-neutral-border{border-color:var(--rt-status-neutral-border)}.rt\:border-success-border{border-color:var(--rt-success-border)}.rt\:border-warning-border{border-color:var(--rt-warning-border)}.rt\:border-t-progress{border-top-color:var(--rt-progress)}.rt\:bg-background{background-color:var(--rt-background)}.rt\:bg-current{background-color:currentColor}.rt\:bg-destructive-fill{background-color:var(--rt-destructive-fill)}.rt\:bg-divider{background-color:var(--rt-divider)}.rt\:bg-foreground{background-color:var(--rt-foreground)}.rt\:bg-muted{background-color:var(--rt-muted)}.rt\:bg-page{background-color:var(--rt-page)}.rt\:bg-popover{background-color:var(--rt-popover)}.rt\:bg-primary{background-color:var(--rt-primary)}.rt\:bg-primary-foreground{background-color:var(--rt-primary-foreground)}.rt\:bg-secondary{background-color:var(--rt-secondary)}.rt\:bg-sidebar{background-color:var(--rt-sidebar)}.rt\:bg-status-neutral-background{background-color:var(--rt-status-neutral-background)}.rt\:bg-success-tint{background-color:var(--rt-success-tint)}.rt\:bg-transparent{background-color:#0000}.rt\:bg-warning-tint{background-color:var(--rt-warning-tint)}.rt\:object-cover{object-fit:cover}.rt\:p-0{padding:0}.rt\:p-1{padding:var(--rt-spacing)}.rt\:p-3{padding:calc(var(--rt-spacing) * 3)}.rt\:p-6{padding:calc(var(--rt-spacing) * 6)}.rt\:px-1{padding-inline:var(--rt-spacing)}.rt\:px-1\.5{padding-inline:calc(var(--rt-spacing) * 1.5)}.rt\:px-2{padding-inline:calc(var(--rt-spacing) * 2)}.rt\:px-2\.75{padding-inline:calc(var(--rt-spacing) * 2.75)}.rt\:px-3{padding-inline:calc(var(--rt-spacing) * 3)}.rt\:px-3\.5{padding-inline:calc(var(--rt-spacing) * 3.5)}.rt\:px-6{padding-inline:calc(var(--rt-spacing) * 6)}.rt\:sidenav-pad-x{padding-inline:var(--rt-sidenav-pad)}.rt\:py-1{padding-block:var(--rt-spacing)}.rt\:py-1\.5{padding-block:calc(var(--rt-spacing) * 1.5)}.rt\:py-2{padding-block:calc(var(--rt-spacing) * 2)}.rt\:py-3{padding-block:calc(var(--rt-spacing) * 3)}.rt\:py-6{padding-block:calc(var(--rt-spacing) * 6)}.rt\:pt-2{padding-top:calc(var(--rt-spacing) * 2)}.rt\:sidenav-pad-top{padding-top:var(--rt-sidenav-pad)}.rt\:sidenav-pad-bottom{padding-bottom:var(--rt-sidenav-pad)}.rt\:pl-8{padding-left:calc(var(--rt-spacing) * 8)}.rt\:text-center{text-align:center}.rt\:text-left{text-align:left}.rt\:text-right{text-align:right}.rt\:align-baseline{vertical-align:baseline}.rt\:align-middle{vertical-align:middle}.rt\:font-sans{font-family:var(--rt-typeface)}.rt\:text-b1{font-size:var(--rt-text-b1);line-height:var(--tw-leading,var(--rt-text-b1--line-height));letter-spacing:var(--tw-tracking,var(--rt-text-b1--letter-spacing));font-weight:var(--tw-font-weight,var(--rt-text-b1--font-weight))}.rt\:text-b2{font-size:var(--rt-text-b2);line-height:var(--tw-leading,var(--rt-text-b2--line-height));letter-spacing:var(--tw-tracking,var(--rt-text-b2--letter-spacing));font-weight:var(--tw-font-weight,var(--rt-text-b2--font-weight))}.rt\:text-b3{font-size:var(--rt-text-b3);line-height:var(--tw-leading,var(--rt-text-b3--line-height));letter-spacing:var(--tw-tracking,var(--rt-text-b3--letter-spacing));font-weight:var(--tw-font-weight,var(--rt-text-b3--font-weight))}.rt\:text-b4{font-size:var(--rt-text-b4);line-height:var(--tw-leading,var(--rt-text-b4--line-height));letter-spacing:var(--tw-tracking,var(--rt-text-b4--letter-spacing));font-weight:var(--tw-font-weight,var(--rt-text-b4--font-weight))}.rt\:text-btn{font-size:var(--rt-text-btn);line-height:var(--tw-leading,var(--rt-text-btn--line-height));letter-spacing:var(--tw-tracking,var(--rt-text-btn--letter-spacing));font-weight:var(--tw-font-weight,var(--rt-text-btn--font-weight))}.rt\:text-c1{font-size:var(--rt-text-c1);line-height:var(--tw-leading,var(--rt-text-c1--line-height));letter-spacing:var(--tw-tracking,var(--rt-text-c1--letter-spacing));font-weight:var(--tw-font-weight,var(--rt-text-c1--font-weight))}.rt\:text-c2{font-size:var(--rt-text-c2);line-height:var(--tw-leading,var(--rt-text-c2--line-height));letter-spacing:var(--tw-tracking,var(--rt-text-c2--letter-spacing));font-weight:var(--tw-font-weight,var(--rt-text-c2--font-weight))}.rt\:text-c3{font-size:var(--rt-text-c3);line-height:var(--tw-leading,var(--rt-text-c3--line-height));letter-spacing:var(--tw-tracking,var(--rt-text-c3--letter-spacing));font-weight:var(--tw-font-weight,var(--rt-text-c3--font-weight))}.rt\:text-display{font-size:var(--rt-text-display);line-height:var(--tw-leading,var(--rt-text-display--line-height));letter-spacing:var(--tw-tracking,var(--rt-text-display--letter-spacing));font-weight:var(--tw-font-weight,var(--rt-text-display--font-weight))}.rt\:text-h1{font-size:var(--rt-text-h1);line-height:var(--tw-leading,var(--rt-text-h1--line-height));letter-spacing:var(--tw-tracking,var(--rt-text-h1--letter-spacing));font-weight:var(--tw-font-weight,var(--rt-text-h1--font-weight))}.rt\:text-h5{font-size:var(--rt-text-h5);line-height:var(--tw-leading,var(--rt-text-h5--line-height));letter-spacing:var(--tw-tracking,var(--rt-text-h5--letter-spacing));font-weight:var(--tw-font-weight,var(--rt-text-h5--font-weight))}.rt\:text-label{font-size:var(--rt-text-label);line-height:var(--tw-leading,var(--rt-text-label--line-height));letter-spacing:var(--tw-tracking,var(--rt-text-label--letter-spacing));font-weight:var(--tw-font-weight,var(--rt-text-label--font-weight))}.rt\:text-s1{font-size:var(--rt-text-s1);line-height:var(--tw-leading,var(--rt-text-s1--line-height));letter-spacing:var(--tw-tracking,var(--rt-text-s1--letter-spacing));font-weight:var(--tw-font-weight,var(--rt-text-s1--font-weight))}.rt\:text-s2{font-size:var(--rt-text-s2);line-height:var(--tw-leading,var(--rt-text-s2--line-height));letter-spacing:var(--tw-tracking,var(--rt-text-s2--letter-spacing));font-weight:var(--tw-font-weight,var(--rt-text-s2--font-weight))}.rt\:font-medium{--tw-font-weight:var(--rt-font-weight-medium);font-weight:var(--rt-font-weight-medium)}.rt\:whitespace-nowrap{white-space:nowrap}.rt\:text-background{color:var(--rt-background)}.rt\:text-destructive-foreground{color:var(--rt-destructive-foreground)}.rt\:text-error{color:var(--rt-error)}.rt\:text-error-icon{color:var(--rt-error-icon)}.rt\:text-foreground{color:var(--rt-foreground)}.rt\:text-foreground-strong{color:var(--rt-foreground-strong)}.rt\:text-foreground-subdued{color:var(--rt-foreground-subdued)}.rt\:text-icon{color:var(--rt-icon)}.rt\:text-inherit{color:inherit}.rt\:text-muted-foreground{color:var(--rt-muted-foreground)}.rt\:text-popover-foreground{color:var(--rt-popover-foreground)}.rt\:text-primary{color:var(--rt-primary)}.rt\:text-primary-foreground{color:var(--rt-primary-foreground)}.rt\:text-secondary-foreground{color:var(--rt-secondary-foreground)}.rt\:text-sidebar-foreground{color:var(--rt-sidebar-foreground)}.rt\:text-status-neutral-foreground{color:var(--rt-status-neutral-foreground)}.rt\:text-success{color:var(--rt-success)}.rt\:text-tab-inactive{color:var(--rt-tab-inactive)}.rt\:text-warning{color:var(--rt-warning)}.rt\:uppercase{text-transform:uppercase}.rt\:tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.rt\:underline{text-decoration-line:underline}.rt\:decoration-dotted{text-decoration-style:dotted}.rt\:decoration-1{text-decoration-thickness:1px}.rt\:underline-offset-4{text-underline-offset:4px}.rt\:shadow-ring-destructive{--tw-shadow:inset 0 0 0 1px var(--tw-shadow-color,var(--rt-destructive-border));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.rt\:shadow-ring-hairline{--tw-shadow:inset 0 0 0 .5px var(--tw-shadow-color,var(--rt-control)), 0 0 0 .5px var(--tw-shadow-color,var(--rt-control));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.rt\:shadow-ring-strong{--tw-shadow:inset 0 0 0 1px var(--tw-shadow-color,var(--rt-border-strong));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.rt\:shadow-ring-subtle{--tw-shadow:inset 0 0 0 1px var(--tw-shadow-color,var(--rt-input)), 0 0 0 1px var(--tw-shadow-color,var(--rt-input));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}@media (forced-colors:active){.rt\:forced-outline{outline:1px solid #0000}.rt\:forced-outline:focus-visible{outline-width:var(--rt-focus-ring-width);outline-offset:var(--rt-focus-ring-offset)}}.rt\:outline-hidden{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.rt\:outline-hidden{outline-offset:2px;outline:2px solid #0000}}.rt\:transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--rt-default-transition-timing-function));transition-duration:var(--tw-duration,var(--rt-default-transition-duration))}.rt\:wordmark:before{content:var(--rt-wordmark)}.rt\:outline-none{--tw-outline-style:none;outline-style:none}.rt\:select-none{-webkit-user-select:none;user-select:none}.rt\:not-empty\:p-3:not(:empty){padding:calc(var(--rt-spacing) * 3)}.rt\:not-aria-disabled\:cursor-pointer:not([aria-disabled=true]){cursor:pointer}.rt\:placeholder\:text-muted-foreground::placeholder{color:var(--rt-muted-foreground)}.rt\:after\:absolute:after{content:var(--tw-content);position:absolute}.rt\:after\:-inset-1\.25:after{content:var(--tw-content);inset:calc(var(--rt-spacing) * -1.25)}.rt\:after\:inset-x-0:after{content:var(--tw-content);inset-inline:0}.rt\:after\:-bottom-px:after{content:var(--tw-content);bottom:-1px}.rt\:after\:h-0\.5:after{content:var(--tw-content);height:calc(var(--rt-spacing) * .5)}.rt\:after\:bg-primary:after{content:var(--tw-content);background-color:var(--rt-primary)}.rt\:after\:opacity-0:after{content:var(--tw-content);opacity:0}.rt\:last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.rt\:focus-within\:shadow-ring-focus:focus-within{--tw-shadow:inset 0 0 0 1px var(--tw-shadow-color,var(--rt-ring)), 0 0 0 1px var(--tw-shadow-color,var(--rt-input));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}@media (hover:hover){.rt\:hover\:bg-destructive-hover:hover{background-color:var(--rt-destructive-hover)}.rt\:hover\:bg-muted:hover{background-color:var(--rt-muted)}.rt\:hover\:bg-primary-hover:hover{background-color:var(--rt-primary-hover)}.rt\:hover\:bg-primary-tint:hover{background-color:var(--rt-primary-tint)}.rt\:hover\:text-foreground:hover{color:var(--rt-foreground)}.rt\:hover\:underline:hover{text-decoration-line:underline}.rt\:not-aria-disabled\:hover\:bg-muted:not([aria-disabled=true]):hover{background-color:var(--rt-muted)}}.rt\:focus-visible\:shadow-ring-focus:focus-visible{--tw-shadow:inset 0 0 0 1px var(--tw-shadow-color,var(--rt-ring)), 0 0 0 1px var(--tw-shadow-color,var(--rt-input));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.rt\:focus-visible\:focus-ring:focus-visible{outline:var(--rt-focus-ring-width) solid var(--rt-focus-ring);outline-offset:var(--rt-focus-ring-offset)}.rt\:active\:bg-destructive-hover:active{background-color:var(--rt-destructive-hover)}.rt\:active\:bg-muted:active{background-color:var(--rt-muted)}.rt\:active\:bg-primary-hover:active{background-color:var(--rt-primary-hover)}.rt\:active\:bg-primary-tint:active{background-color:var(--rt-primary-tint)}.rt\:active\:underline:active{text-decoration-line:underline}.rt\:disabled\:pointer-events-none:disabled{pointer-events:none}.rt\:disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.rt\:disabled\:opacity-50:disabled,.rt\:has-disabled\:opacity-50:has(:disabled){opacity:.5}.rt\:has-aria-invalid\:shadow-ring-invalid:has([aria-invalid=true]),.rt\:has-aria-invalid\:focus-within\:shadow-ring-invalid:has([aria-invalid=true]):focus-within{--tw-shadow:inset 0 0 0 1px var(--tw-shadow-color,var(--rt-destructive));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.rt\:aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.rt\:aria-invalid\:shadow-ring-invalid[aria-invalid=true],.rt\:aria-invalid\:focus-visible\:shadow-ring-invalid[aria-invalid=true]:focus-visible{--tw-shadow:inset 0 0 0 1px var(--tw-shadow-color,var(--rt-destructive));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.rt\:data-highlighted\:bg-accent[data-highlighted]{background-color:var(--rt-accent)}.rt\:data-highlighted\:bg-destructive-hover[data-highlighted]{background-color:var(--rt-destructive-hover)}.rt\:data-highlighted\:bg-muted[data-highlighted]{background-color:var(--rt-muted)}.rt\:data-highlighted\:text-accent-foreground[data-highlighted]{color:var(--rt-accent-foreground)}.rt\:data-highlighted\:text-destructive-foreground[data-highlighted]{color:var(--rt-destructive-foreground)}.rt\:data-indeterminate\:bg-primary[data-indeterminate]{background-color:var(--rt-primary)}.rt\:data-indeterminate\:shadow-none[data-indeterminate]{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}@media (hover:hover){.rt\:data-indeterminate\:hover\:bg-primary-hover[data-indeterminate]:hover{background-color:var(--rt-primary-hover)}}.rt\:aria-invalid\:data-indeterminate\:shadow-ring-invalid[aria-invalid=true][data-indeterminate]{--tw-shadow:inset 0 0 0 1px var(--tw-shadow-color,var(--rt-destructive));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.rt\:data-popup-open\:bg-accent[data-popup-open]{background-color:var(--rt-accent)}.rt\:data-pressed\:border-0[data-pressed]{border-style:var(--tw-border-style);border-width:0}.rt\:data-pressed\:px-2\.75[data-pressed]{padding-inline:calc(var(--rt-spacing) * 2.75)}.rt\:data-pressed\:font-semibold[data-pressed]{--tw-font-weight:var(--rt-font-weight-semibold);font-weight:var(--rt-font-weight-semibold)}.rt\:data-pressed\:text-primary[data-pressed]{color:var(--rt-primary)}.rt\:data-pressed\:shadow-ring-accent-hairline[data-pressed]{--tw-shadow:inset 0 0 0 .5px var(--tw-shadow-color,var(--rt-primary)), 0 0 0 .5px var(--tw-shadow-color,var(--rt-primary));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}@media (min-width:48rem){.rt\:md\:hidden{display:none}.rt\:md\:inline{display:inline}.rt\:md\:h-15{height:calc(var(--rt-spacing) * 15)}.rt\:md\:px-6{padding-inline:calc(var(--rt-spacing) * 6)}}.rt\:data-checked\:bg-primary:where([data-checked]:not([data-checked=false])){background-color:var(--rt-primary)}.rt\:data-checked\:shadow-none:where([data-checked]:not([data-checked=false])){--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}@media (hover:hover){.rt\:data-checked\:hover\:bg-primary-hover:where([data-checked]:not([data-checked=false])):hover{background-color:var(--rt-primary-hover)}}.rt\:aria-invalid\:data-checked\:shadow-ring-invalid[aria-invalid=true]:where([data-checked]:not([data-checked=false])){--tw-shadow:inset 0 0 0 1px var(--tw-shadow-color,var(--rt-destructive));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.rt\:data-selected\:bg-muted:where([data-selected]:not([data-selected=false])){background-color:var(--rt-muted)}.rt\:data-disabled\:pointer-events-none:where([data-disabled]:not([data-disabled=false])){pointer-events:none}.rt\:data-disabled\:cursor-default:where([data-disabled]:not([data-disabled=false])){cursor:default}.rt\:data-disabled\:cursor-not-allowed:where([data-disabled]:not([data-disabled=false])){cursor:not-allowed}.rt\:data-disabled\:opacity-50:where([data-disabled]:not([data-disabled=false])){opacity:.5}.rt\:data-active\:font-semibold:where([data-active]:not([data-active=false])){--tw-font-weight:var(--rt-font-weight-semibold);font-weight:var(--rt-font-weight-semibold)}.rt\:data-active\:text-primary:where([data-active]:not([data-active=false])){color:var(--rt-primary)}.rt\:data-active\:after\:opacity-100:where([data-active]:not([data-active=false])):after{content:var(--tw-content);opacity:1}.rt\:svg\:text-icon svg{color:var(--rt-icon)}@keyframes rt-spin{to{transform:rotate(360deg)}}@keyframes rt-pulse{50%{opacity:.5}}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-content{syntax:"*";inherits:false;initial-value:""}