@burtson-labs/ui 0.1.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.
- package/LICENSE +21 -0
- package/README.md +102 -0
- package/THIRD_PARTY_NOTICES.md +34 -0
- package/dist/components/accordion.d.ts +7 -0
- package/dist/components/accordion.js +48 -0
- package/dist/components/accordion.js.map +1 -0
- package/dist/components/alert.d.ts +9 -0
- package/dist/components/alert.js +41 -0
- package/dist/components/alert.js.map +1 -0
- package/dist/components/avatar.d.ts +6 -0
- package/dist/components/avatar.js +30 -0
- package/dist/components/avatar.js.map +1 -0
- package/dist/components/badge.d.ts +10 -0
- package/dist/components/badge.js +30 -0
- package/dist/components/badge.js.map +1 -0
- package/dist/components/button.d.ts +12 -0
- package/dist/components/button.js +46 -0
- package/dist/components/button.js.map +1 -0
- package/dist/components/card.d.ts +9 -0
- package/dist/components/card.js +57 -0
- package/dist/components/card.js.map +1 -0
- package/dist/components/checkbox.d.ts +4 -0
- package/dist/components/checkbox.js +26 -0
- package/dist/components/checkbox.js.map +1 -0
- package/dist/components/dialog.d.ts +15 -0
- package/dist/components/dialog.js +84 -0
- package/dist/components/dialog.js.map +1 -0
- package/dist/components/dropdown-menu.d.ts +24 -0
- package/dist/components/dropdown-menu.js +127 -0
- package/dist/components/dropdown-menu.js.map +1 -0
- package/dist/components/input.d.ts +5 -0
- package/dist/components/input.js +18 -0
- package/dist/components/input.js.map +1 -0
- package/dist/components/kbd.d.ts +4 -0
- package/dist/components/kbd.js +22 -0
- package/dist/components/kbd.js.map +1 -0
- package/dist/components/label.d.ts +4 -0
- package/dist/components/label.js +16 -0
- package/dist/components/label.js.map +1 -0
- package/dist/components/popover.d.ts +9 -0
- package/dist/components/popover.js +38 -0
- package/dist/components/popover.js.map +1 -0
- package/dist/components/progress.d.ts +4 -0
- package/dist/components/progress.js +22 -0
- package/dist/components/progress.js.map +1 -0
- package/dist/components/radio-group.d.ts +5 -0
- package/dist/components/radio-group.js +28 -0
- package/dist/components/radio-group.js.map +1 -0
- package/dist/components/scroll-area.d.ts +5 -0
- package/dist/components/scroll-area.js +37 -0
- package/dist/components/scroll-area.js.map +1 -0
- package/dist/components/select.d.ts +13 -0
- package/dist/components/select.js +103 -0
- package/dist/components/select.js.map +1 -0
- package/dist/components/separator.d.ts +4 -0
- package/dist/components/separator.js +18 -0
- package/dist/components/separator.js.map +1 -0
- package/dist/components/sheet.d.ts +17 -0
- package/dist/components/sheet.js +77 -0
- package/dist/components/sheet.js.map +1 -0
- package/dist/components/skeleton.d.ts +3 -0
- package/dist/components/skeleton.js +16 -0
- package/dist/components/skeleton.js.map +1 -0
- package/dist/components/spinner.d.ts +6 -0
- package/dist/components/spinner.js +18 -0
- package/dist/components/spinner.js.map +1 -0
- package/dist/components/switch.d.ts +4 -0
- package/dist/components/switch.js +20 -0
- package/dist/components/switch.js.map +1 -0
- package/dist/components/table.d.ts +10 -0
- package/dist/components/table.js +68 -0
- package/dist/components/table.js.map +1 -0
- package/dist/components/tabs.d.ts +7 -0
- package/dist/components/tabs.js +37 -0
- package/dist/components/tabs.js.map +1 -0
- package/dist/components/textarea.d.ts +3 -0
- package/dist/components/textarea.js +16 -0
- package/dist/components/textarea.js.map +1 -0
- package/dist/components/tooltip.d.ts +8 -0
- package/dist/components/tooltip.js +38 -0
- package/dist/components/tooltip.js.map +1 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.js +29 -0
- package/dist/lib/utils.d.ts +3 -0
- package/dist/lib/utils.js +11 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/mui/index.d.ts +13 -0
- package/dist/mui/index.js +82 -0
- package/dist/mui/index.js.map +1 -0
- package/dist/styles.css +2 -0
- package/dist/theme.css +170 -0
- package/dist/tokens.d.ts +28 -0
- package/dist/tokens.js +73 -0
- package/dist/tokens.js.map +1 -0
- package/package.json +122 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { cn } from "./lib/utils.js";
|
|
2
|
+
import tokens, { brand, dark, fontMono, fontSans, light, radius } from "./tokens.js";
|
|
3
|
+
import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from "./components/accordion.js";
|
|
4
|
+
import { Alert, AlertDescription, AlertTitle, alertVariants } from "./components/alert.js";
|
|
5
|
+
import { Avatar, AvatarFallback, AvatarImage } from "./components/avatar.js";
|
|
6
|
+
import { Badge, badgeVariants } from "./components/badge.js";
|
|
7
|
+
import { Button, buttonVariants } from "./components/button.js";
|
|
8
|
+
import { Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from "./components/card.js";
|
|
9
|
+
import { Checkbox } from "./components/checkbox.js";
|
|
10
|
+
import { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger } from "./components/dialog.js";
|
|
11
|
+
import { Popover, PopoverAnchor, PopoverContent, PopoverTrigger, surfaceClasses } from "./components/popover.js";
|
|
12
|
+
import { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger } from "./components/dropdown-menu.js";
|
|
13
|
+
import { Input, fieldClasses } from "./components/input.js";
|
|
14
|
+
import { Kbd, KbdGroup } from "./components/kbd.js";
|
|
15
|
+
import { Label } from "./components/label.js";
|
|
16
|
+
import { Progress } from "./components/progress.js";
|
|
17
|
+
import { RadioGroup, RadioGroupItem } from "./components/radio-group.js";
|
|
18
|
+
import { ScrollArea, ScrollBar } from "./components/scroll-area.js";
|
|
19
|
+
import { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectSeparator, SelectTrigger, SelectValue } from "./components/select.js";
|
|
20
|
+
import { Separator } from "./components/separator.js";
|
|
21
|
+
import { Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger } from "./components/sheet.js";
|
|
22
|
+
import { Skeleton } from "./components/skeleton.js";
|
|
23
|
+
import { Spinner } from "./components/spinner.js";
|
|
24
|
+
import { Switch } from "./components/switch.js";
|
|
25
|
+
import { Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow } from "./components/table.js";
|
|
26
|
+
import { Tabs, TabsContent, TabsList, TabsTrigger } from "./components/tabs.js";
|
|
27
|
+
import { Textarea } from "./components/textarea.js";
|
|
28
|
+
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "./components/tooltip.js";
|
|
29
|
+
export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertTitle, Avatar, AvatarFallback, AvatarImage, Badge, Button, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Input, Kbd, KbdGroup, Label, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, Progress, RadioGroup, RadioGroupItem, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Skeleton, Spinner, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, alertVariants, badgeVariants, brand, buttonVariants, cn, dark, fieldClasses, fontMono, fontSans, light, radius, surfaceClasses, tokens };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { clsx } from "clsx";
|
|
2
|
+
import { twMerge } from "tailwind-merge";
|
|
3
|
+
//#region src/lib/utils.ts
|
|
4
|
+
/** Joins class names and lets later Tailwind utilities override earlier ones. */
|
|
5
|
+
function cn(...inputs) {
|
|
6
|
+
return twMerge(clsx(inputs));
|
|
7
|
+
}
|
|
8
|
+
//#endregion
|
|
9
|
+
export { cn };
|
|
10
|
+
|
|
11
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","names":[],"sources":["../../src/lib/utils.ts"],"sourcesContent":["import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/** Joins class names and lets later Tailwind utilities override earlier ones. */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n"],"mappings":";;;;AAIA,SAAgB,GAAG,GAAG,QAA8B;CAClD,OAAO,QAAQ,KAAK,MAAM,CAAC;AAC7B"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Burtson palette for MUI apps, so a screen built with MUI and one built
|
|
3
|
+
* with Burtson UI components look like the same product.
|
|
4
|
+
*
|
|
5
|
+
* import { ThemeProvider } from '@mui/material/styles';
|
|
6
|
+
* import { createBurtsonTheme } from '@burtson-labs/ui/mui';
|
|
7
|
+
* <ThemeProvider theme={createBurtsonTheme('dark')}>…</ThemeProvider>
|
|
8
|
+
*/
|
|
9
|
+
import { type Theme, type ThemeOptions } from '@mui/material/styles';
|
|
10
|
+
export type BurtsonMode = 'light' | 'dark';
|
|
11
|
+
/** Theme options only, for apps that deep-merge their own overrides first. */
|
|
12
|
+
export declare function burtsonThemeOptions(mode?: BurtsonMode): ThemeOptions;
|
|
13
|
+
export declare function createBurtsonTheme(mode?: BurtsonMode, ...overrides: ThemeOptions[]): Theme;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { dark, fontMono, fontSans, light, radius } from "../tokens.js";
|
|
2
|
+
import { createTheme } from "@mui/material/styles";
|
|
3
|
+
//#region src/mui/index.ts
|
|
4
|
+
/**
|
|
5
|
+
* The Burtson palette for MUI apps, so a screen built with MUI and one built
|
|
6
|
+
* with Burtson UI components look like the same product.
|
|
7
|
+
*
|
|
8
|
+
* import { ThemeProvider } from '@mui/material/styles';
|
|
9
|
+
* import { createBurtsonTheme } from '@burtson-labs/ui/mui';
|
|
10
|
+
* <ThemeProvider theme={createBurtsonTheme('dark')}>…</ThemeProvider>
|
|
11
|
+
*/
|
|
12
|
+
var px = (rem) => Math.round(parseFloat(rem) * 16);
|
|
13
|
+
/** Theme options only, for apps that deep-merge their own overrides first. */
|
|
14
|
+
function burtsonThemeOptions(mode = "dark") {
|
|
15
|
+
const p = mode === "dark" ? dark : light;
|
|
16
|
+
return {
|
|
17
|
+
palette: {
|
|
18
|
+
mode,
|
|
19
|
+
primary: {
|
|
20
|
+
main: p.primary,
|
|
21
|
+
contrastText: p["primary-foreground"]
|
|
22
|
+
},
|
|
23
|
+
secondary: {
|
|
24
|
+
main: p.brand,
|
|
25
|
+
contrastText: p["primary-foreground"]
|
|
26
|
+
},
|
|
27
|
+
error: {
|
|
28
|
+
main: p.destructive,
|
|
29
|
+
contrastText: p["destructive-foreground"]
|
|
30
|
+
},
|
|
31
|
+
warning: {
|
|
32
|
+
main: p.warning,
|
|
33
|
+
contrastText: p["warning-foreground"]
|
|
34
|
+
},
|
|
35
|
+
success: {
|
|
36
|
+
main: p.success,
|
|
37
|
+
contrastText: p["success-foreground"]
|
|
38
|
+
},
|
|
39
|
+
background: {
|
|
40
|
+
default: p.background,
|
|
41
|
+
paper: p.card
|
|
42
|
+
},
|
|
43
|
+
text: {
|
|
44
|
+
primary: p.foreground,
|
|
45
|
+
secondary: p["muted-foreground"]
|
|
46
|
+
},
|
|
47
|
+
divider: p.border,
|
|
48
|
+
action: {
|
|
49
|
+
hover: p.accent,
|
|
50
|
+
selected: p["brand-soft"]
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
shape: { borderRadius: px(radius) },
|
|
54
|
+
typography: {
|
|
55
|
+
fontFamily: fontSans,
|
|
56
|
+
button: {
|
|
57
|
+
textTransform: "none",
|
|
58
|
+
fontWeight: 500
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
components: {
|
|
62
|
+
MuiButton: { defaultProps: { disableElevation: true } },
|
|
63
|
+
MuiPaper: { styleOverrides: { root: {
|
|
64
|
+
backgroundImage: "none",
|
|
65
|
+
border: `1px solid ${p.border}`
|
|
66
|
+
} } },
|
|
67
|
+
MuiTooltip: { styleOverrides: { tooltip: {
|
|
68
|
+
backgroundColor: p.foreground,
|
|
69
|
+
color: p.background,
|
|
70
|
+
fontSize: 12
|
|
71
|
+
} } },
|
|
72
|
+
MuiCssBaseline: { styleOverrides: { "code, kbd, pre": { fontFamily: fontMono } } }
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
function createBurtsonTheme(mode = "dark", ...overrides) {
|
|
77
|
+
return createTheme(burtsonThemeOptions(mode), ...overrides);
|
|
78
|
+
}
|
|
79
|
+
//#endregion
|
|
80
|
+
export { burtsonThemeOptions, createBurtsonTheme };
|
|
81
|
+
|
|
82
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/mui/index.ts"],"sourcesContent":["/**\n * The Burtson palette for MUI apps, so a screen built with MUI and one built\n * with Burtson UI components look like the same product.\n *\n * import { ThemeProvider } from '@mui/material/styles';\n * import { createBurtsonTheme } from '@burtson-labs/ui/mui';\n * <ThemeProvider theme={createBurtsonTheme('dark')}>…</ThemeProvider>\n */\nimport { createTheme, type Theme, type ThemeOptions } from '@mui/material/styles';\n\nimport { dark, fontMono, fontSans, light, type Palette, radius } from '../tokens';\n\nexport type BurtsonMode = 'light' | 'dark';\n\nconst px = (rem: string) => Math.round(parseFloat(rem) * 16);\n\n/** Theme options only, for apps that deep-merge their own overrides first. */\nexport function burtsonThemeOptions(mode: BurtsonMode = 'dark'): ThemeOptions {\n const p: Palette = mode === 'dark' ? dark : light;\n return {\n palette: {\n mode,\n primary: { main: p.primary, contrastText: p['primary-foreground'] },\n secondary: { main: p.brand, contrastText: p['primary-foreground'] },\n error: { main: p.destructive, contrastText: p['destructive-foreground'] },\n warning: { main: p.warning, contrastText: p['warning-foreground'] },\n success: { main: p.success, contrastText: p['success-foreground'] },\n background: { default: p.background, paper: p.card },\n text: { primary: p.foreground, secondary: p['muted-foreground'] },\n divider: p.border,\n action: { hover: p.accent, selected: p['brand-soft'] },\n },\n shape: { borderRadius: px(radius) },\n typography: {\n fontFamily: fontSans,\n button: { textTransform: 'none', fontWeight: 500 },\n },\n components: {\n MuiButton: { defaultProps: { disableElevation: true } },\n MuiPaper: {\n styleOverrides: { root: { backgroundImage: 'none', border: `1px solid ${p.border}` } },\n },\n MuiTooltip: {\n styleOverrides: {\n tooltip: { backgroundColor: p.foreground, color: p.background, fontSize: 12 },\n },\n },\n MuiCssBaseline: {\n styleOverrides: { 'code, kbd, pre': { fontFamily: fontMono } },\n },\n },\n };\n}\n\nexport function createBurtsonTheme(\n mode: BurtsonMode = 'dark',\n ...overrides: ThemeOptions[]\n): Theme {\n return createTheme(burtsonThemeOptions(mode), ...overrides);\n}\n"],"mappings":";;;;;;;;;;;AAcA,IAAM,MAAM,QAAgB,KAAK,MAAM,WAAW,GAAG,IAAI,EAAE;;AAG3D,SAAgB,oBAAoB,OAAoB,QAAsB;CAC5E,MAAM,IAAa,SAAS,SAAS,OAAO;CAC5C,OAAO;EACL,SAAS;GACP;GACA,SAAS;IAAE,MAAM,EAAE;IAAS,cAAc,EAAE;GAAsB;GAClE,WAAW;IAAE,MAAM,EAAE;IAAO,cAAc,EAAE;GAAsB;GAClE,OAAO;IAAE,MAAM,EAAE;IAAa,cAAc,EAAE;GAA0B;GACxE,SAAS;IAAE,MAAM,EAAE;IAAS,cAAc,EAAE;GAAsB;GAClE,SAAS;IAAE,MAAM,EAAE;IAAS,cAAc,EAAE;GAAsB;GAClE,YAAY;IAAE,SAAS,EAAE;IAAY,OAAO,EAAE;GAAK;GACnD,MAAM;IAAE,SAAS,EAAE;IAAY,WAAW,EAAE;GAAoB;GAChE,SAAS,EAAE;GACX,QAAQ;IAAE,OAAO,EAAE;IAAQ,UAAU,EAAE;GAAc;EACvD;EACA,OAAO,EAAE,cAAc,GAAG,MAAM,EAAE;EAClC,YAAY;GACV,YAAY;GACZ,QAAQ;IAAE,eAAe;IAAQ,YAAY;GAAI;EACnD;EACA,YAAY;GACV,WAAW,EAAE,cAAc,EAAE,kBAAkB,KAAK,EAAE;GACtD,UAAU,EACR,gBAAgB,EAAE,MAAM;IAAE,iBAAiB;IAAQ,QAAQ,aAAa,EAAE;GAAS,EAAE,EACvF;GACA,YAAY,EACV,gBAAgB,EACd,SAAS;IAAE,iBAAiB,EAAE;IAAY,OAAO,EAAE;IAAY,UAAU;GAAG,EAC9E,EACF;GACA,gBAAgB,EACd,gBAAgB,EAAE,kBAAkB,EAAE,YAAY,SAAS,EAAE,EAC/D;EACF;CACF;AACF;AAEA,SAAgB,mBACd,OAAoB,QACpB,GAAG,WACI;CACP,OAAO,YAAY,oBAAoB,IAAI,GAAG,GAAG,SAAS;AAC5D"}
|
package/dist/styles.css
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
|
|
2
|
+
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:"Inter", ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--font-mono:"JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--color-black:#000;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--container-2xl:42rem;--container-3xl:48rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--text-6xl:3.75rem;--text-6xl--line-height:1;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-widest:.1em;--leading-snug:1.375;--leading-relaxed:1.625;--radius-sm:calc(var(--radius) - 4px);--radius-md:calc(var(--radius) - 2px);--radius-lg:var(--radius);--radius-xl:calc(var(--radius) + 4px);--ease-in:cubic-bezier(.4, 0, 1, 1);--ease-out:cubic-bezier(0, 0, .2, 1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-md:12px;--blur-3xl:64px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--color-background:var(--background);--color-foreground:var(--foreground);--color-border:var(--border);--color-ring:var(--ring);--color-brand:var(--brand);--animate-in:bl-in .16s cubic-bezier(.16, 1, .3, 1);--animate-out:bl-out .12s ease-in forwards;--animate-sheet-in:bl-sheet-in .22s cubic-bezier(.16, 1, .3, 1);--animate-sheet-out:bl-sheet-out .16s ease-in forwards;--animate-accordion-down:bl-accordion-down .18s ease-out;--animate-accordion-up:bl-accordion-up .16s ease-out}}@layer base{*{border-color:var(--color-border)}:focus-visible{outline-color:var(--color-ring)}[data-slot],[data-slot] *,[data-slot]:before,[data-slot]:after{box-sizing:border-box;border:0 solid}button[data-slot]{font:inherit;cursor:pointer;background-color:#0000}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:0}.inset-y-0{inset-block:0}.-top-40{top:calc(var(--spacing) * -40)}.top-0{top:0}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing) * 2)}.top-4{top:calc(var(--spacing) * 4)}.top-14{top:calc(var(--spacing) * 14)}.-right-40{right:calc(var(--spacing) * -40)}.right-0{right:0}.right-2{right:calc(var(--spacing) * 2)}.right-4{right:calc(var(--spacing) * 4)}.-bottom-56{bottom:calc(var(--spacing) * -56)}.left-0{left:0}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing) * 2)}.isolate{isolation:isolate}.-z-10{z-index:calc(10 * -1)}.z-10{z-index:10}.z-40{z-index:40}.z-50{z-index:50}.col-span-2{grid-column:span 2/span 2}.col-start-2{grid-column-start:2}.row-span-2{grid-row:span 2/span 2}.row-start-1{grid-row-start:1}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.-mx-1{margin-inline:calc(var(--spacing) * -1)}.mx-auto{margin-inline:auto}.my-1{margin-block:var(--spacing)}.my-2{margin-block:calc(var(--spacing) * 2)}.my-4{margin-block:calc(var(--spacing) * 4)}.-mt-4{margin-top:calc(var(--spacing) * -4)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-8{margin-top:calc(var(--spacing) * 8)}.mt-10{margin-top:calc(var(--spacing) * 10)}.mt-12{margin-top:calc(var(--spacing) * 12)}.mt-14{margin-top:calc(var(--spacing) * 14)}.mt-16{margin-top:calc(var(--spacing) * 16)}.mt-auto{margin-top:auto}.mb-1{margin-bottom:var(--spacing)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-5{margin-bottom:calc(var(--spacing) * 5)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.ml-4{margin-left:calc(var(--spacing) * 4)}.ml-auto{margin-left:auto}.line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-row{display:table-row}.field-sizing-content{field-sizing:content}.aspect-square{aspect-ratio:1}.size-2{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.size-3{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.size-3\.5{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-9{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.size-10{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10)}.size-12{width:calc(var(--spacing) * 12);height:calc(var(--spacing) * 12)}.size-28{width:calc(var(--spacing) * 28);height:calc(var(--spacing) * 28)}.size-\[42rem\]{width:42rem;height:42rem}.size-\[46rem\]{width:46rem;height:46rem}.size-\[180px\]{width:180px;height:180px}.size-full{width:100%;height:100%}.h-\(--radix-select-trigger-height\){height:var(--radix-select-trigger-height)}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-14{height:calc(var(--spacing) * 14)}.h-56{height:calc(var(--spacing) * 56)}.h-\[630px\]{height:630px}.h-\[calc\(100dvh-3\.5rem\)\]{height:calc(100dvh - 3.5rem)}.h-\[calc\(100dvh-4rem\)\]{height:calc(100dvh - 4rem)}.h-full{height:100%}.h-px{height:1px}.max-h-\(--radix-dropdown-menu-content-available-height\){max-height:var(--radix-dropdown-menu-content-available-height)}.max-h-\(--radix-select-content-available-height\){max-height:var(--radix-select-content-available-height)}.min-h-4{min-height:calc(var(--spacing) * 4)}.min-h-16{min-height:calc(var(--spacing) * 16)}.min-h-56{min-height:calc(var(--spacing) * 56)}.min-h-72{min-height:calc(var(--spacing) * 72)}.min-h-80{min-height:calc(var(--spacing) * 80)}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-3\/4{width:75%}.w-9{width:calc(var(--spacing) * 9)}.w-40{width:calc(var(--spacing) * 40)}.w-48{width:calc(var(--spacing) * 48)}.w-56{width:calc(var(--spacing) * 56)}.w-72{width:calc(var(--spacing) * 72)}.w-\[470px\]{width:470px}.w-\[560px\]{width:560px}.w-\[1200px\]{width:1200px}.w-fit{width:fit-content}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-7xl{max-width:var(--container-7xl)}.max-w-\[calc\(100\%-2rem\)\]{max-width:calc(100% - 2rem)}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.max-w-xs{max-width:var(--container-xs)}.min-w-\(--radix-select-trigger-width\){min-width:var(--radix-select-trigger-width)}.min-w-0{min-width:0}.min-w-5{min-width:calc(var(--spacing) * 5)}.min-w-\[8rem\]{min-width:8rem}.flex-1{flex:1}.shrink-0{flex-shrink:0}.caption-bottom{caption-side:bottom}.origin-\(--radix-dropdown-menu-content-transform-origin\){transform-origin:var(--radix-dropdown-menu-content-transform-origin)}.origin-\(--radix-popover-content-transform-origin\){transform-origin:var(--radix-popover-content-transform-origin)}.origin-\(--radix-select-content-transform-origin\){transform-origin:var(--radix-select-content-transform-origin)}.origin-\(--radix-tooltip-content-transform-origin\){transform-origin:var(--radix-tooltip-content-transform-origin)}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-y-0\.5{--tw-translate-y:calc(var(--spacing) * .5);translate:var(--tw-translate-x) var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-accordion-down{animation:.18s ease-out bl-accordion-down}.animate-accordion-up{animation:.16s ease-out bl-accordion-up}.animate-in{animation:.16s cubic-bezier(.16,1,.3,1) bl-in}.animate-out{animation:.12s ease-in forwards bl-out}.animate-pulse{animation:var(--animate-pulse)}.animate-sheet-in{animation:.22s cubic-bezier(.16,1,.3,1) bl-sheet-in}.animate-sheet-out{animation:.16s ease-in forwards bl-sheet-out}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.touch-none{touch-action:none}.scroll-my-1{scroll-margin-block:var(--spacing)}.auto-rows-min{grid-auto-rows:min-content}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-\[0_1fr\]{grid-template-columns:0 1fr}.grid-rows-\[auto_auto\]{grid-template-rows:auto auto}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.place-content-center{place-content:center}.place-items-center{place-items:center}.content-center{align-content:center}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-items-start{justify-items:start}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-10{gap:calc(var(--spacing) * 10)}.gap-y-0\.5{row-gap:calc(var(--spacing) * .5)}.self-start{align-self:flex-start}.justify-self-end{justify-self:flex-end}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded-\[4px\]{border-radius:4px}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:calc(var(--radius) + 4px)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-brand,.border-brand\/40{border-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.border-brand\/40{border-color:color-mix(in oklab, var(--brand) 40%, transparent)}}.border-destructive\/40{border-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.border-destructive\/40{border-color:color-mix(in oklab, var(--destructive) 40%, transparent)}}.border-input{border-color:var(--input)}.border-success\/40{border-color:var(--success)}@supports (color:color-mix(in lab, red, red)){.border-success\/40{border-color:color-mix(in oklab, var(--success) 40%, transparent)}}.border-transparent{border-color:#0000}.border-warning\/40{border-color:var(--warning)}@supports (color:color-mix(in lab, red, red)){.border-warning\/40{border-color:color-mix(in oklab, var(--warning) 40%, transparent)}}.border-t-transparent{border-top-color:#0000}.border-l-transparent{border-left-color:#0000}.bg-accent{background-color:var(--accent)}.bg-background,.bg-background\/80{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.bg-background\/80{background-color:color-mix(in oklab, var(--background) 80%, transparent)}}.bg-black\/60{background-color:#0009}@supports (color:color-mix(in lab, red, red)){.bg-black\/60{background-color:color-mix(in oklab, var(--color-black) 60%, transparent)}}.bg-border{background-color:var(--border)}.bg-brand-soft{background-color:var(--brand-soft)}.bg-brand\/15{background-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.bg-brand\/15{background-color:color-mix(in oklab, var(--brand) 15%, transparent)}}.bg-brand\/20{background-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.bg-brand\/20{background-color:color-mix(in oklab, var(--brand) 20%, transparent)}}.bg-card{background-color:var(--card)}.bg-destructive,.bg-destructive\/10{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.bg-destructive\/10{background-color:color-mix(in oklab, var(--destructive) 10%, transparent)}}.bg-destructive\/15{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.bg-destructive\/15{background-color:color-mix(in oklab, var(--destructive) 15%, transparent)}}.bg-foreground{background-color:var(--foreground)}.bg-muted,.bg-muted\/30{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/30{background-color:color-mix(in oklab, var(--muted) 30%, transparent)}}.bg-muted\/40{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/40{background-color:color-mix(in oklab, var(--muted) 40%, transparent)}}.bg-muted\/50{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/50{background-color:color-mix(in oklab, var(--muted) 50%, transparent)}}.bg-popover{background-color:var(--popover)}.bg-primary,.bg-primary\/20{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\/20{background-color:color-mix(in oklab, var(--primary) 20%, transparent)}}.bg-secondary{background-color:var(--secondary)}.bg-success\/10{background-color:var(--success)}@supports (color:color-mix(in lab, red, red)){.bg-success\/10{background-color:color-mix(in oklab, var(--success) 10%, transparent)}}.bg-success\/15{background-color:var(--success)}@supports (color:color-mix(in lab, red, red)){.bg-success\/15{background-color:color-mix(in oklab, var(--success) 15%, transparent)}}.bg-transparent{background-color:#0000}.bg-warning\/10{background-color:var(--warning)}@supports (color:color-mix(in lab, red, red)){.bg-warning\/10{background-color:color-mix(in oklab, var(--warning) 10%, transparent)}}.bg-warning\/15{background-color:var(--warning)}@supports (color:color-mix(in lab, red, red)){.bg-warning\/15{background-color:color-mix(in oklab, var(--warning) 15%, transparent)}}.fill-foreground{fill:var(--foreground)}.object-cover{object-fit:cover}.p-0{padding:0}.p-1{padding:var(--spacing)}.p-2{padding:calc(var(--spacing) * 2)}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.p-16{padding:calc(var(--spacing) * 16)}.p-\[3px\]{padding:3px}.p-px{padding:1px}.px-1{padding-inline:var(--spacing)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-10{padding-block:calc(var(--spacing) * 10)}.py-16{padding-block:calc(var(--spacing) * 16)}.pt-0{padding-top:0}.pt-6{padding-top:calc(var(--spacing) * 6)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pr-12{padding-right:calc(var(--spacing) * 12)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-6{padding-bottom:calc(var(--spacing) * 6)}.pb-16{padding-bottom:calc(var(--spacing) * 16)}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-8{padding-left:calc(var(--spacing) * 8)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-middle{vertical-align:middle}.font-mono{font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.font-sans{font-family:Inter,ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,sans-serif}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.leading-7{--tw-leading:calc(var(--spacing) * 7);line-height:calc(var(--spacing) * 7)}.leading-\[1\.02\]{--tw-leading:1.02;line-height:1.02}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.2em\]{--tw-tracking:.2em;letter-spacing:.2em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.whitespace-nowrap{white-space:nowrap}.text-accent-foreground{color:var(--accent-foreground)}.text-background{color:var(--background)}.text-brand{color:var(--brand)}.text-card-foreground{color:var(--card-foreground)}.text-current{color:currentColor}.text-destructive{color:var(--destructive)}.text-destructive-foreground{color:var(--destructive-foreground)}.text-foreground{color:var(--foreground)}.text-muted-foreground{color:var(--muted-foreground)}.text-popover-foreground{color:var(--popover-foreground)}.text-primary{color:var(--primary)}.text-primary-foreground{color:var(--primary-foreground)}.text-secondary-foreground{color:var(--secondary-foreground)}.text-success{color:var(--success)}.text-warning{color:var(--warning)}.uppercase{text-transform:uppercase}.italic{font-style:italic}.underline-offset-4{text-underline-offset:4px}.accent-foreground{accent-color:var(--foreground)}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-0{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.outline-hidden{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.outline-hidden{outline-offset:2px;outline:2px solid #0000}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur-3xl{--tw-blur:blur(var(--blur-3xl));filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-\[2px\]{--tw-backdrop-blur:blur(2px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition-\[color\,background-color\,border-color\,box-shadow\]{transition-property:color,background-color,border-color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[color\,box-shadow\]{transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.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(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.ease-in{--tw-ease:var(--ease-in);transition-timing-function:var(--ease-in)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.\[--bl-sheet-from\:-100\%\]{--bl-sheet-from:-100%}.\[--bl-sheet-from\:100\%\]{--bl-sheet-from:100%}.group-data-\[disabled\=true\]\:pointer-events-none:is(:where(.group)[data-disabled=true] *){pointer-events:none}.group-data-\[disabled\=true\]\:opacity-50:is(:where(.group)[data-disabled=true] *){opacity:.5}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-50:is(:where(.peer):disabled~*){opacity:.5}.selection\:bg-primary ::selection{background-color:var(--primary)}.selection\:bg-primary::selection{background-color:var(--primary)}.selection\:text-primary-foreground ::selection{color:var(--primary-foreground)}.selection\:text-primary-foreground::selection{color:var(--primary-foreground)}.file\:inline-flex::file-selector-button{display:inline-flex}.file\:h-7::file-selector-button{height:calc(var(--spacing) * 7)}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:text-foreground::file-selector-button{color:var(--foreground)}.placeholder\:text-muted-foreground::placeholder{color:var(--muted-foreground)}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}@media (hover:hover){.hover\:bg-accent:hover{background-color:var(--accent)}.hover\:bg-destructive\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab, var(--destructive) 90%, transparent)}}.hover\:bg-muted\/50:hover{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-muted\/50:hover{background-color:color-mix(in oklab, var(--muted) 50%, transparent)}}.hover\:bg-primary\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab, var(--primary) 90%, transparent)}}.hover\:bg-secondary\/80:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab, var(--secondary) 80%, transparent)}}.hover\:text-accent-foreground:hover{color:var(--accent-foreground)}.hover\:text-foreground:hover{color:var(--foreground)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}}.focus\:not-sr-only:focus{clip-path:none;white-space:normal;width:auto;height:auto;margin:0;padding:0;position:static;overflow:visible}.focus\:fixed:focus{position:fixed}.focus\:top-2:focus{top:calc(var(--spacing) * 2)}.focus\:left-2:focus{left:calc(var(--spacing) * 2)}.focus\:z-50:focus{z-index:50}.focus\:rounded-md:focus{border-radius:calc(var(--radius) - 2px)}.focus\:bg-accent:focus{background-color:var(--accent)}.focus\:bg-background:focus{background-color:var(--background)}.focus\:px-3:focus{padding-inline:calc(var(--spacing) * 3)}.focus\:py-2:focus{padding-block:calc(var(--spacing) * 2)}.focus\:text-accent-foreground:focus{color:var(--accent-foreground)}.focus-visible\:border-ring:focus-visible{border-color:var(--ring)}.focus-visible\:ring-\[3px\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-destructive\/30:focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.focus-visible\:ring-destructive\/30:focus-visible{--tw-ring-color:color-mix(in oklab, var(--destructive) 30%, transparent)}}.focus-visible\:ring-ring\/40:focus-visible{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){.focus-visible\:ring-ring\/40:focus-visible{--tw-ring-color:color-mix(in oklab, var(--ring) 40%, transparent)}}.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:color-mix(in oklab, var(--ring) 50%, transparent)}}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.has-data-\[slot\=card-action\]\:grid-cols-\[1fr_auto\]:has([data-slot=card-action]){grid-template-columns:1fr auto}.has-\[\>svg\]\:grid-cols-\[calc\(var\(--spacing\)\*4\)_1fr\]:has(>svg){grid-template-columns:calc(var(--spacing) * 4) 1fr}.has-\[\>svg\]\:gap-x-3:has(>svg){column-gap:calc(var(--spacing) * 3)}.has-\[\>svg\]\:px-2\.5:has(>svg){padding-inline:calc(var(--spacing) * 2.5)}.has-\[\>svg\]\:px-3:has(>svg){padding-inline:calc(var(--spacing) * 3)}.has-\[\>svg\]\:px-4:has(>svg){padding-inline:calc(var(--spacing) * 4)}.aria-invalid\:border-destructive[aria-invalid=true]{border-color:var(--destructive)}.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--destructive) 20%, transparent)}}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[inset\]\:pl-8[data-inset]{padding-left:calc(var(--spacing) * 8)}.data-\[orientation\=horizontal\]\:h-px[data-orientation=horizontal]{height:1px}.data-\[orientation\=horizontal\]\:w-full[data-orientation=horizontal]{width:100%}.data-\[orientation\=vertical\]\:h-full[data-orientation=vertical]{height:100%}.data-\[orientation\=vertical\]\:w-px[data-orientation=vertical]{width:1px}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:var(--muted-foreground)}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:var(--spacing);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:var(--spacing);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[size\=default\]\:h-9[data-size=default]{height:calc(var(--spacing) * 9)}.data-\[size\=sm\]\:h-8[data-size=sm]{height:calc(var(--spacing) * 8)}:is(.\*\:data-\[slot\=alert-description\]\:text-destructive\/90>*)[data-slot=alert-description]{color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){:is(.\*\:data-\[slot\=alert-description\]\:text-destructive\/90>*)[data-slot=alert-description]{color:color-mix(in oklab, var(--destructive) 90%, transparent)}}:is(.\*\:data-\[slot\=select-value\]\:line-clamp-1>*)[data-slot=select-value]{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}:is(.\*\:data-\[slot\=select-value\]\:flex>*)[data-slot=select-value]{display:flex}:is(.\*\:data-\[slot\=select-value\]\:items-center>*)[data-slot=select-value]{align-items:center}:is(.\*\:data-\[slot\=select-value\]\:gap-2>*)[data-slot=select-value]{gap:calc(var(--spacing) * 2)}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:var(--background)}.data-\[state\=active\]\:text-foreground[data-state=active]{color:var(--foreground)}.data-\[state\=active\]\:shadow-sm[data-state=active]{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.data-\[state\=checked\]\:translate-x-\[calc\(100\%-1px\)\][data-state=checked]{--tw-translate-x:calc(100% - 1px);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[state\=checked\]\:border-primary[data-state=checked]{border-color:var(--primary)}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:var(--primary)}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:var(--primary-foreground)}.data-\[state\=closed\]\:animate-accordion-up[data-state=closed]{animation:.16s ease-out bl-accordion-up}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation:.12s ease-in forwards bl-out}.data-\[state\=closed\]\:animate-sheet-out[data-state=closed]{animation:.16s ease-in forwards bl-sheet-out}.data-\[state\=open\]\:animate-accordion-down[data-state=open]{animation:.18s ease-out bl-accordion-down}.data-\[state\=open\]\:animate-in[data-state=open]{animation:.16s cubic-bezier(.16,1,.3,1) bl-in}.data-\[state\=open\]\:animate-sheet-in[data-state=open]{animation:.22s cubic-bezier(.16,1,.3,1) bl-sheet-in}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:var(--accent)}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:var(--muted)}.data-\[state\=unchecked\]\:translate-x-px[data-state=unchecked]{--tw-translate-x:1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:var(--input)}.data-\[variant\=destructive\]\:text-destructive[data-variant=destructive]{color:var(--destructive)}.data-\[variant\=destructive\]\:focus\:bg-destructive\/10[data-variant=destructive]:focus{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.data-\[variant\=destructive\]\:focus\:bg-destructive\/10[data-variant=destructive]:focus{background-color:color-mix(in oklab, var(--destructive) 10%, transparent)}}@media (min-width:40rem){.sm\:max-w-lg{max-width:var(--container-lg)}.sm\:max-w-sm{max-width:var(--container-sm)}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}.sm\:p-8{padding:calc(var(--spacing) * 8)}.sm\:px-6{padding-inline:calc(var(--spacing) * 6)}.sm\:py-24{padding-block:calc(var(--spacing) * 24)}.sm\:text-left{text-align:left}.sm\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}}@media (min-width:48rem){.md\:flex{display:flex}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:64rem){.lg\:block{display:block}.lg\:hidden{display:none}}@media (min-width:80rem){.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}.dark\:bg-input\/20:where(.dark,.dark *,[data-theme=dark],[data-theme=dark] *){background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.dark\:bg-input\/20:where(.dark,.dark *,[data-theme=dark],[data-theme=dark] *){background-color:color-mix(in oklab, var(--input) 20%, transparent)}}@media (hover:hover){.dark\:hover\:bg-input\/40:where(.dark,.dark *,[data-theme=dark],[data-theme=dark] *):hover{background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-input\/40:where(.dark,.dark *,[data-theme=dark],[data-theme=dark] *):hover{background-color:color-mix(in oklab, var(--input) 40%, transparent)}}}.dark\:data-\[state\=active\]\:border-input:where(.dark,.dark *,[data-theme=dark],[data-theme=dark] *)[data-state=active]{border-color:var(--input)}.dark\:data-\[state\=active\]\:bg-input\/30:where(.dark,.dark *,[data-theme=dark],[data-theme=dark] *)[data-state=active]{background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.dark\:data-\[state\=active\]\:bg-input\/30:where(.dark,.dark *,[data-theme=dark],[data-theme=dark] *)[data-state=active]{background-color:color-mix(in oklab, var(--input) 30%, transparent)}}.dark\:data-\[state\=checked\]\:bg-primary-foreground:where(.dark,.dark *,[data-theme=dark],[data-theme=dark] *)[data-state=checked]{background-color:var(--primary-foreground)}.dark\:data-\[state\=unchecked\]\:bg-foreground\/80:where(.dark,.dark *,[data-theme=dark],[data-theme=dark] *)[data-state=unchecked]{background-color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.dark\:data-\[state\=unchecked\]\:bg-foreground\/80:where(.dark,.dark *,[data-theme=dark],[data-theme=dark] *)[data-state=unchecked]{background-color:color-mix(in oklab, var(--foreground) 80%, transparent)}}.\[\&_code\]\:font-mono code{font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.\[\&_code\]\:text-foreground code{color:var(--foreground)}.\[\&_p\]\:leading-relaxed p{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-3 svg{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\[\&_svg\:not\(\[class\*\=\'text-\'\]\)\]\:text-muted-foreground svg:not([class*=text-]){color:var(--muted-foreground)}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:0}.\[\.border-t\]\:pt-6.border-t{padding-top:calc(var(--spacing) * 6)}:is(.data-\[variant\=destructive\]\:\*\:\[svg\]\:\!text-destructive[data-variant=destructive]>*):is(svg){color:var(--destructive)!important}.\[\&\>svg\]\:pointer-events-none>svg{pointer-events:none}.\[\&\>svg\]\:size-3>svg{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.\[\&\>svg\]\:size-4>svg{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\[\&\>svg\]\:translate-y-0\.5>svg{--tw-translate-y:calc(var(--spacing) * .5);translate:var(--tw-translate-x) var(--tw-translate-y)}.\[\&\>svg\]\:text-brand>svg{color:var(--brand)}.\[\&\>svg\]\:text-current>svg{color:currentColor}.\[\&\>svg\]\:text-success>svg{color:var(--success)}.\[\&\>svg\]\:text-warning>svg{color:var(--warning)}.\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open]>svg{rotate:180deg}}:root{--background:#fff;--foreground:#17151c;--card:#fff;--card-foreground:#17151c;--popover:#fff;--popover-foreground:#17151c;--primary:#a60ee5;--primary-foreground:#fff;--secondary:#f3f0f7;--secondary-foreground:#221c2b;--muted:#f5f3f8;--muted-foreground:#655e70;--accent:#f1e7fb;--accent-foreground:#4d0a6b;--destructive:#d42a3a;--destructive-foreground:#fff;--success:#12805c;--success-foreground:#fff;--warning:#a35c00;--warning-foreground:#fff;--border:#e4dfeb;--input:#d9d2e2;--ring:#a60ee5;--brand:#a60ee5;--brand-soft:#f4e6fd;--radius:.625rem;color-scheme:light}.dark,[data-theme=dark]{--background:#101016;--foreground:#f0edf7;--card:#16151d;--card-foreground:#f0edf7;--popover:#191820;--popover-foreground:#f0edf7;--primary:#a60ee5;--primary-foreground:#fff;--secondary:#221f2b;--secondary-foreground:#e4ddeb;--muted:#1d1b25;--muted-foreground:#a39bac;--accent:#2b193a;--accent-foreground:#e9cffc;--destructive:#e5484d;--destructive-foreground:#fff;--success:#2fb67f;--success-foreground:#07170f;--warning:#f0a53a;--warning-foreground:#1c1204;--border:#2e2a3b;--input:#3a3548;--ring:#c77afa;--brand:#c77afa;--brand-soft:#2b193a;color-scheme:dark}@keyframes bl-in{0%{opacity:0;transform:scale(.97)translateY(2px)}}@keyframes bl-out{to{opacity:0;transform:scale(.97)}}@keyframes bl-sheet-in{0%{transform:translateX(var(--bl-sheet-from,100%))}}@keyframes bl-sheet-out{to{transform:translateX(var(--bl-sheet-from,100%))}}@keyframes bl-accordion-down{0%{height:0}to{height:var(--radix-accordion-content-height)}}@keyframes bl-accordion-up{0%{height:var(--radix-accordion-content-height)}to{height:0}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:1ms!important;animation-duration:1ms!important}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-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-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}
|
package/dist/theme.css
ADDED
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Burtson UI theme for Tailwind CSS v4. Generated from src/tokens.ts by
|
|
3
|
+
* scripts/theme.mjs; edit the tokens, not this file.
|
|
4
|
+
*
|
|
5
|
+
* @import 'tailwindcss';
|
|
6
|
+
* @import '@burtson-labs/ui/theme.css';
|
|
7
|
+
* @source '../node_modules/@burtson-labs/ui/dist';
|
|
8
|
+
*
|
|
9
|
+
* Light is the default. Put `class="dark"` or `data-theme="dark"` on <html>
|
|
10
|
+
* (or any subtree) for the dark palette.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
@custom-variant dark (&:where(.dark, .dark *, [data-theme='dark'], [data-theme='dark'] *));
|
|
14
|
+
|
|
15
|
+
:root {
|
|
16
|
+
--background: #ffffff;
|
|
17
|
+
--foreground: #17151c;
|
|
18
|
+
--card: #ffffff;
|
|
19
|
+
--card-foreground: #17151c;
|
|
20
|
+
--popover: #ffffff;
|
|
21
|
+
--popover-foreground: #17151c;
|
|
22
|
+
--primary: #a60ee5;
|
|
23
|
+
--primary-foreground: #ffffff;
|
|
24
|
+
--secondary: #f3f0f7;
|
|
25
|
+
--secondary-foreground: #221c2b;
|
|
26
|
+
--muted: #f5f3f8;
|
|
27
|
+
--muted-foreground: #655e70;
|
|
28
|
+
--accent: #f1e7fb;
|
|
29
|
+
--accent-foreground: #4d0a6b;
|
|
30
|
+
--destructive: #d42a3a;
|
|
31
|
+
--destructive-foreground: #ffffff;
|
|
32
|
+
--success: #12805c;
|
|
33
|
+
--success-foreground: #ffffff;
|
|
34
|
+
--warning: #a35c00;
|
|
35
|
+
--warning-foreground: #ffffff;
|
|
36
|
+
--border: #e4dfeb;
|
|
37
|
+
--input: #d9d2e2;
|
|
38
|
+
--ring: #a60ee5;
|
|
39
|
+
--brand: #a60ee5;
|
|
40
|
+
--brand-soft: #f4e6fd;
|
|
41
|
+
--radius: 0.625rem;
|
|
42
|
+
color-scheme: light;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.dark,
|
|
46
|
+
[data-theme='dark'] {
|
|
47
|
+
--background: #101016;
|
|
48
|
+
--foreground: #f0edf7;
|
|
49
|
+
--card: #16151d;
|
|
50
|
+
--card-foreground: #f0edf7;
|
|
51
|
+
--popover: #191820;
|
|
52
|
+
--popover-foreground: #f0edf7;
|
|
53
|
+
--primary: #a60ee5;
|
|
54
|
+
--primary-foreground: #ffffff;
|
|
55
|
+
--secondary: #221f2b;
|
|
56
|
+
--secondary-foreground: #e4ddeb;
|
|
57
|
+
--muted: #1d1b25;
|
|
58
|
+
--muted-foreground: #a39bac;
|
|
59
|
+
--accent: #2b193a;
|
|
60
|
+
--accent-foreground: #e9cffc;
|
|
61
|
+
--destructive: #e5484d;
|
|
62
|
+
--destructive-foreground: #ffffff;
|
|
63
|
+
--success: #2fb67f;
|
|
64
|
+
--success-foreground: #07170f;
|
|
65
|
+
--warning: #f0a53a;
|
|
66
|
+
--warning-foreground: #1c1204;
|
|
67
|
+
--border: #2e2a3b;
|
|
68
|
+
--input: #3a3548;
|
|
69
|
+
--ring: #c77afa;
|
|
70
|
+
--brand: #c77afa;
|
|
71
|
+
--brand-soft: #2b193a;
|
|
72
|
+
color-scheme: dark;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
@theme inline {
|
|
76
|
+
--color-background: var(--background);
|
|
77
|
+
--color-foreground: var(--foreground);
|
|
78
|
+
--color-card: var(--card);
|
|
79
|
+
--color-card-foreground: var(--card-foreground);
|
|
80
|
+
--color-popover: var(--popover);
|
|
81
|
+
--color-popover-foreground: var(--popover-foreground);
|
|
82
|
+
--color-primary: var(--primary);
|
|
83
|
+
--color-primary-foreground: var(--primary-foreground);
|
|
84
|
+
--color-secondary: var(--secondary);
|
|
85
|
+
--color-secondary-foreground: var(--secondary-foreground);
|
|
86
|
+
--color-muted: var(--muted);
|
|
87
|
+
--color-muted-foreground: var(--muted-foreground);
|
|
88
|
+
--color-accent: var(--accent);
|
|
89
|
+
--color-accent-foreground: var(--accent-foreground);
|
|
90
|
+
--color-destructive: var(--destructive);
|
|
91
|
+
--color-destructive-foreground: var(--destructive-foreground);
|
|
92
|
+
--color-success: var(--success);
|
|
93
|
+
--color-success-foreground: var(--success-foreground);
|
|
94
|
+
--color-warning: var(--warning);
|
|
95
|
+
--color-warning-foreground: var(--warning-foreground);
|
|
96
|
+
--color-border: var(--border);
|
|
97
|
+
--color-input: var(--input);
|
|
98
|
+
--color-ring: var(--ring);
|
|
99
|
+
--color-brand: var(--brand);
|
|
100
|
+
--color-brand-soft: var(--brand-soft);
|
|
101
|
+
--radius-sm: calc(var(--radius) - 4px);
|
|
102
|
+
--radius-md: calc(var(--radius) - 2px);
|
|
103
|
+
--radius-lg: var(--radius);
|
|
104
|
+
--radius-xl: calc(var(--radius) + 4px);
|
|
105
|
+
--font-sans: "Inter", ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
|
|
106
|
+
--font-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
|
107
|
+
--animate-in: bl-in 160ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
108
|
+
--animate-out: bl-out 120ms ease-in forwards;
|
|
109
|
+
--animate-sheet-in: bl-sheet-in 220ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
110
|
+
--animate-sheet-out: bl-sheet-out 160ms ease-in forwards;
|
|
111
|
+
--animate-accordion-down: bl-accordion-down 180ms ease-out;
|
|
112
|
+
--animate-accordion-up: bl-accordion-up 160ms ease-out;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
@keyframes bl-in {
|
|
116
|
+
from {
|
|
117
|
+
opacity: 0;
|
|
118
|
+
transform: scale(0.97) translateY(2px);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
@keyframes bl-out {
|
|
122
|
+
to {
|
|
123
|
+
opacity: 0;
|
|
124
|
+
transform: scale(0.97);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
@keyframes bl-sheet-in {
|
|
128
|
+
from {
|
|
129
|
+
transform: translateX(var(--bl-sheet-from, 100%));
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
@keyframes bl-sheet-out {
|
|
133
|
+
to {
|
|
134
|
+
transform: translateX(var(--bl-sheet-from, 100%));
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
@keyframes bl-accordion-down {
|
|
138
|
+
from {
|
|
139
|
+
height: 0;
|
|
140
|
+
}
|
|
141
|
+
to {
|
|
142
|
+
height: var(--radix-accordion-content-height);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
@keyframes bl-accordion-up {
|
|
146
|
+
from {
|
|
147
|
+
height: var(--radix-accordion-content-height);
|
|
148
|
+
}
|
|
149
|
+
to {
|
|
150
|
+
height: 0;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
@media (prefers-reduced-motion: reduce) {
|
|
155
|
+
*,
|
|
156
|
+
::before,
|
|
157
|
+
::after {
|
|
158
|
+
animation-duration: 1ms !important;
|
|
159
|
+
transition-duration: 1ms !important;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
@layer base {
|
|
164
|
+
* {
|
|
165
|
+
border-color: var(--color-border);
|
|
166
|
+
}
|
|
167
|
+
:focus-visible {
|
|
168
|
+
outline-color: var(--color-ring);
|
|
169
|
+
}
|
|
170
|
+
}
|
package/dist/tokens.d.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Burtson UI design tokens. This file is the single source for colour, radius
|
|
3
|
+
* and type: `scripts/theme.mjs` writes src/styles/theme.css from it, and the
|
|
4
|
+
* MUI adapter (`@burtson-labs/ui/mui`) builds its palette from it, so Tailwind
|
|
5
|
+
* apps and MUI apps render the same brand.
|
|
6
|
+
*
|
|
7
|
+
* Colour names follow the shadcn/ui convention (background, primary, muted, …)
|
|
8
|
+
* so components copied from the shadcn ecosystem pick up the Burtson palette.
|
|
9
|
+
*/
|
|
10
|
+
export type ColorToken = 'background' | 'foreground' | 'card' | 'card-foreground' | 'popover' | 'popover-foreground' | 'primary' | 'primary-foreground' | 'secondary' | 'secondary-foreground' | 'muted' | 'muted-foreground' | 'accent' | 'accent-foreground' | 'destructive' | 'destructive-foreground' | 'success' | 'success-foreground' | 'warning' | 'warning-foreground' | 'border' | 'input' | 'ring' | 'brand' | 'brand-soft';
|
|
11
|
+
export type Palette = Record<ColorToken, string>;
|
|
12
|
+
/** Burtson Labs purple, the one colour every surface shares. */
|
|
13
|
+
export declare const brand = "#a60ee5";
|
|
14
|
+
export declare const light: Palette;
|
|
15
|
+
export declare const dark: Palette;
|
|
16
|
+
/** Base corner radius; sm/md/lg/xl derive from it. */
|
|
17
|
+
export declare const radius = "0.625rem";
|
|
18
|
+
export declare const fontSans = "\"Inter\", ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif";
|
|
19
|
+
export declare const fontMono = "\"JetBrains Mono\", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace";
|
|
20
|
+
export declare const tokens: {
|
|
21
|
+
readonly brand: "#a60ee5";
|
|
22
|
+
readonly light: Palette;
|
|
23
|
+
readonly dark: Palette;
|
|
24
|
+
readonly radius: "0.625rem";
|
|
25
|
+
readonly fontSans: "\"Inter\", ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif";
|
|
26
|
+
readonly fontMono: "\"JetBrains Mono\", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace";
|
|
27
|
+
};
|
|
28
|
+
export default tokens;
|
package/dist/tokens.js
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
//#region src/tokens.ts
|
|
2
|
+
/** Burtson Labs purple, the one colour every surface shares. */
|
|
3
|
+
var brand = "#a60ee5";
|
|
4
|
+
var light = {
|
|
5
|
+
background: "#ffffff",
|
|
6
|
+
foreground: "#17151c",
|
|
7
|
+
card: "#ffffff",
|
|
8
|
+
"card-foreground": "#17151c",
|
|
9
|
+
popover: "#ffffff",
|
|
10
|
+
"popover-foreground": "#17151c",
|
|
11
|
+
primary: "#a60ee5",
|
|
12
|
+
"primary-foreground": "#ffffff",
|
|
13
|
+
secondary: "#f3f0f7",
|
|
14
|
+
"secondary-foreground": "#221c2b",
|
|
15
|
+
muted: "#f5f3f8",
|
|
16
|
+
"muted-foreground": "#655e70",
|
|
17
|
+
accent: "#f1e7fb",
|
|
18
|
+
"accent-foreground": "#4d0a6b",
|
|
19
|
+
destructive: "#d42a3a",
|
|
20
|
+
"destructive-foreground": "#ffffff",
|
|
21
|
+
success: "#12805c",
|
|
22
|
+
"success-foreground": "#ffffff",
|
|
23
|
+
warning: "#a35c00",
|
|
24
|
+
"warning-foreground": "#ffffff",
|
|
25
|
+
border: "#e4dfeb",
|
|
26
|
+
input: "#d9d2e2",
|
|
27
|
+
ring: "#a60ee5",
|
|
28
|
+
brand: "#a60ee5",
|
|
29
|
+
"brand-soft": "#f4e6fd"
|
|
30
|
+
};
|
|
31
|
+
var dark = {
|
|
32
|
+
background: "#101016",
|
|
33
|
+
foreground: "#f0edf7",
|
|
34
|
+
card: "#16151d",
|
|
35
|
+
"card-foreground": "#f0edf7",
|
|
36
|
+
popover: "#191820",
|
|
37
|
+
"popover-foreground": "#f0edf7",
|
|
38
|
+
primary: "#a60ee5",
|
|
39
|
+
"primary-foreground": "#ffffff",
|
|
40
|
+
secondary: "#221f2b",
|
|
41
|
+
"secondary-foreground": "#e4ddeb",
|
|
42
|
+
muted: "#1d1b25",
|
|
43
|
+
"muted-foreground": "#a39bac",
|
|
44
|
+
accent: "#2b193a",
|
|
45
|
+
"accent-foreground": "#e9cffc",
|
|
46
|
+
destructive: "#e5484d",
|
|
47
|
+
"destructive-foreground": "#ffffff",
|
|
48
|
+
success: "#2fb67f",
|
|
49
|
+
"success-foreground": "#07170f",
|
|
50
|
+
warning: "#f0a53a",
|
|
51
|
+
"warning-foreground": "#1c1204",
|
|
52
|
+
border: "#2e2a3b",
|
|
53
|
+
input: "#3a3548",
|
|
54
|
+
ring: "#c77afa",
|
|
55
|
+
brand: "#c77afa",
|
|
56
|
+
"brand-soft": "#2b193a"
|
|
57
|
+
};
|
|
58
|
+
/** Base corner radius; sm/md/lg/xl derive from it. */
|
|
59
|
+
var radius = "0.625rem";
|
|
60
|
+
var fontSans = "\"Inter\", ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif";
|
|
61
|
+
var fontMono = "\"JetBrains Mono\", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace";
|
|
62
|
+
var tokens = {
|
|
63
|
+
brand,
|
|
64
|
+
light,
|
|
65
|
+
dark,
|
|
66
|
+
radius,
|
|
67
|
+
fontSans,
|
|
68
|
+
fontMono
|
|
69
|
+
};
|
|
70
|
+
//#endregion
|
|
71
|
+
export { brand, dark, tokens as default, tokens, fontMono, fontSans, light, radius };
|
|
72
|
+
|
|
73
|
+
//# sourceMappingURL=tokens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.js","names":[],"sources":["../src/tokens.ts"],"sourcesContent":["/**\n * Burtson UI design tokens. This file is the single source for colour, radius\n * and type: `scripts/theme.mjs` writes src/styles/theme.css from it, and the\n * MUI adapter (`@burtson-labs/ui/mui`) builds its palette from it, so Tailwind\n * apps and MUI apps render the same brand.\n *\n * Colour names follow the shadcn/ui convention (background, primary, muted, …)\n * so components copied from the shadcn ecosystem pick up the Burtson palette.\n */\n\nexport type ColorToken =\n | 'background'\n | 'foreground'\n | 'card'\n | 'card-foreground'\n | 'popover'\n | 'popover-foreground'\n | 'primary'\n | 'primary-foreground'\n | 'secondary'\n | 'secondary-foreground'\n | 'muted'\n | 'muted-foreground'\n | 'accent'\n | 'accent-foreground'\n | 'destructive'\n | 'destructive-foreground'\n | 'success'\n | 'success-foreground'\n | 'warning'\n | 'warning-foreground'\n | 'border'\n | 'input'\n | 'ring'\n | 'brand'\n | 'brand-soft';\n\nexport type Palette = Record<ColorToken, string>;\n\n/** Burtson Labs purple, the one colour every surface shares. */\nexport const brand = '#a60ee5';\n\nexport const light: Palette = {\n background: '#ffffff',\n foreground: '#17151c',\n card: '#ffffff',\n 'card-foreground': '#17151c',\n popover: '#ffffff',\n 'popover-foreground': '#17151c',\n primary: '#a60ee5',\n 'primary-foreground': '#ffffff',\n secondary: '#f3f0f7',\n 'secondary-foreground': '#221c2b',\n muted: '#f5f3f8',\n 'muted-foreground': '#655e70',\n accent: '#f1e7fb',\n 'accent-foreground': '#4d0a6b',\n destructive: '#d42a3a',\n 'destructive-foreground': '#ffffff',\n success: '#12805c',\n 'success-foreground': '#ffffff',\n warning: '#a35c00',\n 'warning-foreground': '#ffffff',\n border: '#e4dfeb',\n input: '#d9d2e2',\n ring: '#a60ee5',\n brand: '#a60ee5',\n 'brand-soft': '#f4e6fd',\n};\n\nexport const dark: Palette = {\n background: '#101016',\n foreground: '#f0edf7',\n card: '#16151d',\n 'card-foreground': '#f0edf7',\n popover: '#191820',\n 'popover-foreground': '#f0edf7',\n primary: '#a60ee5',\n 'primary-foreground': '#ffffff',\n secondary: '#221f2b',\n 'secondary-foreground': '#e4ddeb',\n muted: '#1d1b25',\n 'muted-foreground': '#a39bac',\n accent: '#2b193a',\n 'accent-foreground': '#e9cffc',\n destructive: '#e5484d',\n 'destructive-foreground': '#ffffff',\n success: '#2fb67f',\n 'success-foreground': '#07170f',\n warning: '#f0a53a',\n 'warning-foreground': '#1c1204',\n border: '#2e2a3b',\n input: '#3a3548',\n ring: '#c77afa',\n brand: '#c77afa',\n 'brand-soft': '#2b193a',\n};\n\n/** Base corner radius; sm/md/lg/xl derive from it. */\nexport const radius = '0.625rem';\n\nexport const fontSans =\n '\"Inter\", ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif';\nexport const fontMono =\n '\"JetBrains Mono\", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace';\n\nexport const tokens = { brand, light, dark, radius, fontSans, fontMono } as const;\nexport default tokens;\n"],"mappings":";;AAwCA,IAAa,QAAQ;AAErB,IAAa,QAAiB;CAC5B,YAAY;CACZ,YAAY;CACZ,MAAM;CACN,mBAAmB;CACnB,SAAS;CACT,sBAAsB;CACtB,SAAS;CACT,sBAAsB;CACtB,WAAW;CACX,wBAAwB;CACxB,OAAO;CACP,oBAAoB;CACpB,QAAQ;CACR,qBAAqB;CACrB,aAAa;CACb,0BAA0B;CAC1B,SAAS;CACT,sBAAsB;CACtB,SAAS;CACT,sBAAsB;CACtB,QAAQ;CACR,OAAO;CACP,MAAM;CACN,OAAO;CACP,cAAc;AAChB;AAEA,IAAa,OAAgB;CAC3B,YAAY;CACZ,YAAY;CACZ,MAAM;CACN,mBAAmB;CACnB,SAAS;CACT,sBAAsB;CACtB,SAAS;CACT,sBAAsB;CACtB,WAAW;CACX,wBAAwB;CACxB,OAAO;CACP,oBAAoB;CACpB,QAAQ;CACR,qBAAqB;CACrB,aAAa;CACb,0BAA0B;CAC1B,SAAS;CACT,sBAAsB;CACtB,SAAS;CACT,sBAAsB;CACtB,QAAQ;CACR,OAAO;CACP,MAAM;CACN,OAAO;CACP,cAAc;AAChB;;AAGA,IAAa,SAAS;AAEtB,IAAa,WACX;AACF,IAAa,WACX;AAEF,IAAa,SAAS;CAAE;CAAO;CAAO;CAAM;CAAQ;CAAU;AAAS"}
|