atlas-react-kit 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.
Files changed (63) hide show
  1. package/COMPONENTS.md +80 -0
  2. package/DESIGN_RULES.md +40 -0
  3. package/LICENSE +21 -0
  4. package/NOTICE +24 -0
  5. package/README.md +83 -0
  6. package/dist/badge.d.ts +10 -0
  7. package/dist/badge.js +57 -0
  8. package/dist/button.d.ts +10 -0
  9. package/dist/button.js +36 -0
  10. package/dist/calendar.d.ts +10 -0
  11. package/dist/calendar.js +76 -0
  12. package/dist/card.d.ts +19 -0
  13. package/dist/card.js +32 -0
  14. package/dist/checkbox.d.ts +4 -0
  15. package/dist/checkbox.js +10 -0
  16. package/dist/dialog.d.ts +15 -0
  17. package/dist/dialog.js +38 -0
  18. package/dist/empty-panel.d.ts +10 -0
  19. package/dist/empty-panel.js +6 -0
  20. package/dist/field.d.ts +24 -0
  21. package/dist/field.js +68 -0
  22. package/dist/form/feedback-field.d.ts +4 -0
  23. package/dist/form/feedback-field.js +7 -0
  24. package/dist/form/field-error.d.ts +12 -0
  25. package/dist/form/field-error.js +13 -0
  26. package/dist/form/select-field.d.ts +13 -0
  27. package/dist/form/select-field.js +12 -0
  28. package/dist/form/text-field.d.ts +27 -0
  29. package/dist/form/text-field.js +25 -0
  30. package/dist/input.d.ts +3 -0
  31. package/dist/input.js +7 -0
  32. package/dist/internal/tabs-styles.d.ts +5 -0
  33. package/dist/internal/tabs-styles.js +19 -0
  34. package/dist/label.d.ts +4 -0
  35. package/dist/label.js +9 -0
  36. package/dist/next/tabs-nav-link.d.ts +6 -0
  37. package/dist/next/tabs-nav-link.js +9 -0
  38. package/dist/popover.d.ts +10 -0
  39. package/dist/popover.js +27 -0
  40. package/dist/select.d.ts +15 -0
  41. package/dist/select.js +38 -0
  42. package/dist/separator.d.ts +4 -0
  43. package/dist/separator.js +9 -0
  44. package/dist/skeleton.d.ts +2 -0
  45. package/dist/skeleton.js +6 -0
  46. package/dist/sonner.d.ts +4 -0
  47. package/dist/sonner.js +15 -0
  48. package/dist/table-body-skeleton.d.ts +7 -0
  49. package/dist/table-body-skeleton.js +7 -0
  50. package/dist/table.d.ts +10 -0
  51. package/dist/table.js +29 -0
  52. package/dist/tabs.d.ts +17 -0
  53. package/dist/tabs.js +28 -0
  54. package/dist/textarea.d.ts +3 -0
  55. package/dist/textarea.js +7 -0
  56. package/dist/toggle-group.d.ts +10 -0
  57. package/dist/toggle-group.js +24 -0
  58. package/dist/toggle.d.ts +9 -0
  59. package/dist/toggle.js +27 -0
  60. package/dist/utils.d.ts +5 -0
  61. package/dist/utils.js +11 -0
  62. package/package.json +181 -0
  63. package/theme.css +184 -0
@@ -0,0 +1,24 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import {} from "class-variance-authority";
5
+ import { ToggleGroup as ToggleGroupPrimitive } from "radix-ui";
6
+ import { cn } from "./utils.js";
7
+ import { toggleVariants } from "./toggle.js";
8
+ const ToggleGroupContext = React.createContext({
9
+ size: "default",
10
+ variant: "default",
11
+ spacing: 2,
12
+ orientation: "horizontal",
13
+ });
14
+ function ToggleGroup({ className, variant, size, spacing = 2, orientation = "horizontal", children, ...props }) {
15
+ return (_jsx(ToggleGroupPrimitive.Root, { "data-slot": "toggle-group", "data-variant": variant, "data-size": size, "data-spacing": spacing, "data-orientation": orientation, style: { "--gap": spacing }, className: cn("group/toggle-group flex w-fit flex-row items-center gap-[--spacing(var(--gap))] data-[spacing=0]:data-[variant=outline]:rounded-none data-vertical:flex-col data-vertical:items-stretch", className), ...props, children: _jsx(ToggleGroupContext.Provider, { value: { variant, size, spacing, orientation }, children: children }) }));
16
+ }
17
+ function ToggleGroupItem({ className, children, variant = "default", size = "default", ...props }) {
18
+ const context = React.useContext(ToggleGroupContext);
19
+ return (_jsx(ToggleGroupPrimitive.Item, { "data-slot": "toggle-group-item", "data-variant": context.variant || variant, "data-size": context.size || size, "data-spacing": context.spacing, className: cn("shrink-0 group-data-[spacing=0]/toggle-group:rounded-none group-data-[spacing=0]/toggle-group:shadow-none focus:z-10 focus-visible:z-10 group-data-horizontal/toggle-group:data-[spacing=0]:first:rounded-none group-data-vertical/toggle-group:data-[spacing=0]:first:rounded-none group-data-horizontal/toggle-group:data-[spacing=0]:last:rounded-none group-data-vertical/toggle-group:data-[spacing=0]:last:rounded-none data-[state=on]:bg-selected data-[state=on]:text-selected-foreground group-data-horizontal/toggle-group:data-[spacing=0]:data-[variant=outline]:border-l-0 group-data-vertical/toggle-group:data-[spacing=0]:data-[variant=outline]:border-t-0 group-data-horizontal/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-l group-data-vertical/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-t", toggleVariants({
20
+ variant: context.variant || variant,
21
+ size: context.size || size,
22
+ }), className), ...props, children: children }));
23
+ }
24
+ export { ToggleGroup, ToggleGroupItem };
@@ -0,0 +1,9 @@
1
+ import * as React from "react";
2
+ import { type VariantProps } from "class-variance-authority";
3
+ import { Toggle as TogglePrimitive } from "radix-ui";
4
+ declare const toggleVariants: (props?: ({
5
+ variant?: "default" | "outline" | null | undefined;
6
+ size?: "default" | "sm" | "lg" | null | undefined;
7
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
8
+ declare function Toggle({ className, variant, size, ...props }: React.ComponentProps<typeof TogglePrimitive.Root> & VariantProps<typeof toggleVariants>): React.JSX.Element;
9
+ export { Toggle, toggleVariants };
package/dist/toggle.js ADDED
@@ -0,0 +1,27 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { cva } from "class-variance-authority";
5
+ import { Toggle as TogglePrimitive } from "radix-ui";
6
+ import { cn } from "./utils.js";
7
+ const toggleVariants = cva("group/toggle inline-flex items-center justify-center gap-1.5 rounded-none text-xs font-semibold tracking-widest whitespace-nowrap uppercase transition-colors outline-none hover:bg-muted hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/30 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 aria-pressed:bg-selected aria-pressed:text-selected-foreground dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-3.5", {
8
+ variants: {
9
+ variant: {
10
+ default: "bg-transparent",
11
+ outline: "border border-input bg-transparent hover:bg-muted",
12
+ },
13
+ size: {
14
+ default: "h-10 min-w-10 px-6 has-data-[icon=inline-end]:pr-4 has-data-[icon=inline-start]:pl-4",
15
+ sm: "h-9 min-w-9 px-4 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3",
16
+ lg: "h-11 min-w-11 px-8 has-data-[icon=inline-end]:pr-5 has-data-[icon=inline-start]:pl-5",
17
+ },
18
+ },
19
+ defaultVariants: {
20
+ variant: "default",
21
+ size: "default",
22
+ },
23
+ });
24
+ function Toggle({ className, variant = "default", size = "default", ...props }) {
25
+ return (_jsx(TogglePrimitive.Root, { "data-slot": "toggle", className: cn(toggleVariants({ variant, size, className })), ...props }));
26
+ }
27
+ export { Toggle, toggleVariants };
@@ -0,0 +1,5 @@
1
+ import type { ChangeEvent } from "react";
2
+ import { type ClassValue } from "clsx";
3
+ export declare function cn(...inputs: ClassValue[]): string;
4
+ /** Stable onChange handler for controlled text inputs (satisfies react/jsx-no-bind). */
5
+ export declare function onInputChange(setValue: (value: string) => void): (e: ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => void;
package/dist/utils.js ADDED
@@ -0,0 +1,11 @@
1
+ import { clsx } from "clsx";
2
+ import { twMerge } from "tailwind-merge";
3
+ export function cn(...inputs) {
4
+ return twMerge(clsx(inputs));
5
+ }
6
+ /** Stable onChange handler for controlled text inputs (satisfies react/jsx-no-bind). */
7
+ export function onInputChange(setValue) {
8
+ return (e) => {
9
+ setValue(e.target.value);
10
+ };
11
+ }
package/package.json ADDED
@@ -0,0 +1,181 @@
1
+ {
2
+ "name": "atlas-react-kit",
3
+ "version": "0.1.0",
4
+ "description": "Shared React components and Tailwind theme for Atlas",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/Kerubi-5/atlas-design-system.git"
10
+ },
11
+ "files": [
12
+ "dist",
13
+ "theme.css",
14
+ "DESIGN_RULES.md",
15
+ "COMPONENTS.md",
16
+ "NOTICE"
17
+ ],
18
+ "sideEffects": [
19
+ "**/*.css"
20
+ ],
21
+ "exports": {
22
+ "./badge": {
23
+ "types": "./dist/badge.d.ts",
24
+ "default": "./dist/badge.js"
25
+ },
26
+ "./button": {
27
+ "types": "./dist/button.d.ts",
28
+ "default": "./dist/button.js"
29
+ },
30
+ "./calendar": {
31
+ "types": "./dist/calendar.d.ts",
32
+ "default": "./dist/calendar.js"
33
+ },
34
+ "./card": {
35
+ "types": "./dist/card.d.ts",
36
+ "default": "./dist/card.js"
37
+ },
38
+ "./checkbox": {
39
+ "types": "./dist/checkbox.d.ts",
40
+ "default": "./dist/checkbox.js"
41
+ },
42
+ "./dialog": {
43
+ "types": "./dist/dialog.d.ts",
44
+ "default": "./dist/dialog.js"
45
+ },
46
+ "./empty-panel": {
47
+ "types": "./dist/empty-panel.d.ts",
48
+ "default": "./dist/empty-panel.js"
49
+ },
50
+ "./field": {
51
+ "types": "./dist/field.d.ts",
52
+ "default": "./dist/field.js"
53
+ },
54
+ "./input": {
55
+ "types": "./dist/input.d.ts",
56
+ "default": "./dist/input.js"
57
+ },
58
+ "./label": {
59
+ "types": "./dist/label.d.ts",
60
+ "default": "./dist/label.js"
61
+ },
62
+ "./popover": {
63
+ "types": "./dist/popover.d.ts",
64
+ "default": "./dist/popover.js"
65
+ },
66
+ "./select": {
67
+ "types": "./dist/select.d.ts",
68
+ "default": "./dist/select.js"
69
+ },
70
+ "./separator": {
71
+ "types": "./dist/separator.d.ts",
72
+ "default": "./dist/separator.js"
73
+ },
74
+ "./skeleton": {
75
+ "types": "./dist/skeleton.d.ts",
76
+ "default": "./dist/skeleton.js"
77
+ },
78
+ "./sonner": {
79
+ "types": "./dist/sonner.d.ts",
80
+ "default": "./dist/sonner.js"
81
+ },
82
+ "./table": {
83
+ "types": "./dist/table.d.ts",
84
+ "default": "./dist/table.js"
85
+ },
86
+ "./table-body-skeleton": {
87
+ "types": "./dist/table-body-skeleton.d.ts",
88
+ "default": "./dist/table-body-skeleton.js"
89
+ },
90
+ "./tabs": {
91
+ "types": "./dist/tabs.d.ts",
92
+ "default": "./dist/tabs.js"
93
+ },
94
+ "./textarea": {
95
+ "types": "./dist/textarea.d.ts",
96
+ "default": "./dist/textarea.js"
97
+ },
98
+ "./toggle": {
99
+ "types": "./dist/toggle.d.ts",
100
+ "default": "./dist/toggle.js"
101
+ },
102
+ "./toggle-group": {
103
+ "types": "./dist/toggle-group.d.ts",
104
+ "default": "./dist/toggle-group.js"
105
+ },
106
+ "./form/field-error": {
107
+ "types": "./dist/form/field-error.d.ts",
108
+ "default": "./dist/form/field-error.js"
109
+ },
110
+ "./form/feedback-field": {
111
+ "types": "./dist/form/feedback-field.d.ts",
112
+ "default": "./dist/form/feedback-field.js"
113
+ },
114
+ "./form/select-field": {
115
+ "types": "./dist/form/select-field.d.ts",
116
+ "default": "./dist/form/select-field.js"
117
+ },
118
+ "./form/text-field": {
119
+ "types": "./dist/form/text-field.d.ts",
120
+ "default": "./dist/form/text-field.js"
121
+ },
122
+ "./next/tabs-nav-link": {
123
+ "types": "./dist/next/tabs-nav-link.d.ts",
124
+ "default": "./dist/next/tabs-nav-link.js"
125
+ },
126
+ "./utils": {
127
+ "types": "./dist/utils.d.ts",
128
+ "default": "./dist/utils.js"
129
+ },
130
+ "./theme.css": "./theme.css",
131
+ "./package.json": "./package.json",
132
+ "./DESIGN_RULES.md": "./DESIGN_RULES.md",
133
+ "./COMPONENTS.md": "./COMPONENTS.md"
134
+ },
135
+ "scripts": {
136
+ "build": "tsc",
137
+ "check": "npm run build && prettier --check .",
138
+ "test": "npm run build && vitest run",
139
+ "prepack": "npm run build"
140
+ },
141
+ "engines": {
142
+ "node": ">=20.19.0"
143
+ },
144
+ "publishConfig": {
145
+ "access": "public"
146
+ },
147
+ "peerDependencies": {
148
+ "next": "^16.0.0",
149
+ "react": "^19.0.0",
150
+ "react-dom": "^19.0.0",
151
+ "tailwindcss": "^4.0.0"
152
+ },
153
+ "peerDependenciesMeta": {
154
+ "next": {
155
+ "optional": true
156
+ }
157
+ },
158
+ "dependencies": {
159
+ "class-variance-authority": "^0.7.1",
160
+ "clsx": "^2.1.1",
161
+ "lucide-react": "^1.16.0",
162
+ "next-themes": "^0.4.6",
163
+ "radix-ui": "^1.4.3",
164
+ "react-day-picker": "^10.0.1",
165
+ "sonner": "^2.0.7",
166
+ "tailwind-merge": "^3.6.0",
167
+ "tw-animate-css": "^1.4.0"
168
+ },
169
+ "devDependencies": {
170
+ "@types/node": "^25.5.0",
171
+ "@types/react": "^19.2.14",
172
+ "@types/react-dom": "^19.2.3",
173
+ "next": "16.2.6",
174
+ "prettier": "^3.8.1",
175
+ "react": "^19.2.4",
176
+ "react-dom": "^19.2.4",
177
+ "tailwindcss": "^4.2.1",
178
+ "typescript": "^6.0.3",
179
+ "vitest": "^4.1.9"
180
+ }
181
+ }
package/theme.css ADDED
@@ -0,0 +1,184 @@
1
+ @import "tw-animate-css";
2
+
3
+ /* Custom state variants adapted from shadcn/ui (MIT); see NOTICE. */
4
+ @custom-variant data-open {
5
+ &:where([data-state="open"]),
6
+ &:where([data-open]:not([data-open="false"])) {
7
+ @slot;
8
+ }
9
+ }
10
+ @custom-variant data-closed {
11
+ &:where([data-state="closed"]),
12
+ &:where([data-closed]:not([data-closed="false"])) {
13
+ @slot;
14
+ }
15
+ }
16
+ @custom-variant data-checked {
17
+ &:where([data-state="checked"]),
18
+ &:where([data-checked]:not([data-checked="false"])) {
19
+ @slot;
20
+ }
21
+ }
22
+ @custom-variant data-disabled {
23
+ &:where([data-disabled="true"]),
24
+ &:where([data-disabled]:not([data-disabled="false"])) {
25
+ @slot;
26
+ }
27
+ }
28
+ @custom-variant data-horizontal {
29
+ &:where([data-orientation="horizontal"]) {
30
+ @slot;
31
+ }
32
+ }
33
+ @custom-variant data-vertical {
34
+ &:where([data-orientation="vertical"]) {
35
+ @slot;
36
+ }
37
+ }
38
+
39
+ @custom-variant dark (&:is(.dark *));
40
+
41
+ @theme inline {
42
+ --font-heading: var(--font-sans);
43
+ --color-sidebar-ring: var(--sidebar-ring);
44
+ --color-sidebar-border: var(--sidebar-border);
45
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
46
+ --color-sidebar-accent: var(--sidebar-accent);
47
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
48
+ --color-sidebar-primary: var(--sidebar-primary);
49
+ --color-sidebar-foreground: var(--sidebar-foreground);
50
+ --color-sidebar: var(--sidebar);
51
+ --color-chart-5: var(--chart-5);
52
+ --color-chart-4: var(--chart-4);
53
+ --color-chart-3: var(--chart-3);
54
+ --color-chart-2: var(--chart-2);
55
+ --color-chart-1: var(--chart-1);
56
+ --color-ring: var(--ring);
57
+ --color-input: var(--input);
58
+ --color-border: var(--border);
59
+ --color-destructive: var(--destructive);
60
+ --color-success: var(--success);
61
+ --color-warning: var(--warning);
62
+ --color-accent-foreground: var(--accent-foreground);
63
+ --color-accent: var(--accent);
64
+ --color-muted-foreground: var(--muted-foreground);
65
+ --color-muted: var(--muted);
66
+ --color-selected-foreground: var(--selected-foreground);
67
+ --color-selected: var(--selected);
68
+ --color-secondary-foreground: var(--secondary-foreground);
69
+ --color-secondary: var(--secondary);
70
+ --color-primary-foreground: var(--primary-foreground);
71
+ --color-primary: var(--primary);
72
+ --color-popover-foreground: var(--popover-foreground);
73
+ --color-popover: var(--popover);
74
+ --color-card-foreground: var(--card-foreground);
75
+ --color-card: var(--card);
76
+ --color-foreground: var(--foreground);
77
+ --color-background: var(--background);
78
+ --radius-sm: calc(var(--radius) * 0.6);
79
+ --radius-md: calc(var(--radius) * 0.8);
80
+ --radius-lg: var(--radius);
81
+ --radius-xl: calc(var(--radius) * 1.4);
82
+ --radius-2xl: calc(var(--radius) * 1.8);
83
+ --radius-3xl: calc(var(--radius) * 2.2);
84
+ --radius-4xl: calc(var(--radius) * 2.6);
85
+ }
86
+
87
+ :root {
88
+ --background: oklch(1 0 0);
89
+ --foreground: oklch(0.145 0 0);
90
+ --card: oklch(1 0 0);
91
+ --card-foreground: oklch(0.145 0 0);
92
+ --popover: oklch(1 0 0);
93
+ --popover-foreground: oklch(0.145 0 0);
94
+ --primary: oklch(0.491 0.27 292.581);
95
+ --primary-foreground: oklch(0.969 0.016 293.756);
96
+ --secondary: oklch(0.967 0.001 286.375);
97
+ --secondary-foreground: oklch(0.21 0.006 285.885);
98
+ --muted: oklch(0.97 0 0);
99
+ --muted-foreground: oklch(0.556 0 0);
100
+ --accent: oklch(0.97 0 0);
101
+ --accent-foreground: oklch(0.205 0 0);
102
+ /* Soft brand-purple wash for selected/active chrome (nav, tabs, chips, rows). */
103
+ --selected: color-mix(in oklch, var(--primary) 12%, var(--background));
104
+ --selected-foreground: var(--primary);
105
+ --destructive: oklch(0.577 0.245 27.325);
106
+ /* Status tones: AA (4.5:1) as text on the page, on a card, and on a /10–/25
107
+ tint of themselves; also used as solid fills (meters). No -foreground:
108
+ nothing puts text on a solid fill. See DESIGN_RULES.md. --destructive
109
+ (above) passes as text on the page and card but not yet on its own tint
110
+ in light mode (about 3.6:1 on /15). */
111
+ --success: oklch(0.45 0.11 160);
112
+ --warning: oklch(0.48 0.115 70);
113
+ --border: oklch(0.922 0 0);
114
+ --input: oklch(0.922 0 0);
115
+ --ring: oklch(0.708 0 0);
116
+ --chart-1: oklch(0.87 0 0);
117
+ --chart-2: oklch(0.556 0 0);
118
+ --chart-3: oklch(0.439 0 0);
119
+ --chart-4: oklch(0.371 0 0);
120
+ --chart-5: oklch(0.269 0 0);
121
+ --radius: 0.625rem;
122
+ --sidebar: oklch(0.985 0 0);
123
+ --sidebar-foreground: oklch(0.145 0 0);
124
+ --sidebar-primary: oklch(0.541 0.281 293.009);
125
+ --sidebar-primary-foreground: oklch(0.969 0.016 293.756);
126
+ --sidebar-accent: oklch(0.97 0 0);
127
+ --sidebar-accent-foreground: oklch(0.205 0 0);
128
+ --sidebar-border: oklch(0.922 0 0);
129
+ --sidebar-ring: oklch(0.708 0 0);
130
+ }
131
+
132
+ .dark {
133
+ --background: oklch(0.145 0 0);
134
+ --foreground: oklch(0.985 0 0);
135
+ --card: oklch(0.205 0 0);
136
+ --card-foreground: oklch(0.985 0 0);
137
+ --popover: oklch(0.205 0 0);
138
+ --popover-foreground: oklch(0.985 0 0);
139
+ --primary: oklch(0.432 0.232 292.759);
140
+ --primary-foreground: oklch(0.969 0.016 293.756);
141
+ --secondary: oklch(0.274 0.006 286.033);
142
+ --secondary-foreground: oklch(0.985 0 0);
143
+ --muted: oklch(0.269 0 0);
144
+ --muted-foreground: oklch(0.708 0 0);
145
+ --accent: oklch(0.269 0 0);
146
+ --accent-foreground: oklch(0.985 0 0);
147
+ --selected: color-mix(in oklch, var(--primary) 24%, var(--background));
148
+ --selected-foreground: oklch(0.85 0.06 293);
149
+ --destructive: oklch(0.704 0.191 22.216);
150
+ --success: oklch(0.765 0.177 163.223);
151
+ --warning: oklch(0.828 0.189 84.429);
152
+ --border: oklch(1 0 0 / 10%);
153
+ --input: oklch(1 0 0 / 15%);
154
+ --ring: oklch(0.556 0 0);
155
+ --chart-1: oklch(0.87 0 0);
156
+ --chart-2: oklch(0.556 0 0);
157
+ --chart-3: oklch(0.439 0 0);
158
+ --chart-4: oklch(0.371 0 0);
159
+ --chart-5: oklch(0.269 0 0);
160
+ --sidebar: oklch(0.205 0 0);
161
+ --sidebar-foreground: oklch(0.985 0 0);
162
+ --sidebar-primary: oklch(0.606 0.25 292.717);
163
+ --sidebar-primary-foreground: oklch(0.969 0.016 293.756);
164
+ --sidebar-accent: oklch(0.269 0 0);
165
+ --sidebar-accent-foreground: oklch(0.985 0 0);
166
+ --sidebar-border: oklch(1 0 0 / 10%);
167
+ --sidebar-ring: oklch(0.556 0 0);
168
+ }
169
+
170
+ @layer base {
171
+ * {
172
+ @apply border-border outline-ring/50;
173
+ }
174
+ body {
175
+ @apply bg-background text-foreground;
176
+ }
177
+ button:not(:disabled),
178
+ [role="button"]:not(:disabled) {
179
+ cursor: pointer;
180
+ }
181
+ html {
182
+ @apply font-sans;
183
+ }
184
+ }