@fea-ui/styles 0.1.0-alpha.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/README.md ADDED
@@ -0,0 +1,15 @@
1
+ # styles
2
+
3
+ To install dependencies:
4
+
5
+ ```bash
6
+ bun install
7
+ ```
8
+
9
+ To run:
10
+
11
+ ```bash
12
+ bun run index.ts
13
+ ```
14
+
15
+ This project was created using `bun init` in bun v1.3.4. [Bun](https://bun.com) is a fast all-in-one JavaScript runtime.
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "@fea-ui/styles",
3
+ "version": "0.1.0-alpha.0",
4
+ "description": "FeaUI Styles - Tailwind CSS styles for FeaUI components",
5
+ "keywords": [
6
+ "fea-ui",
7
+ "ui",
8
+ "design-system",
9
+ "tailwind",
10
+ "components",
11
+ "styles",
12
+ "react"
13
+ ],
14
+ "homepage": "https://orbis.aydinthefirst.com",
15
+ "bugs": {
16
+ "url": "https://github.com/aydinthefirst/fea-ui/issues"
17
+ },
18
+ "repository": {
19
+ "type": "git",
20
+ "url": "git+https://github.com/aydinthefirst/fea-ui.git",
21
+ "directory": "packages/styles"
22
+ },
23
+ "license": "MIT",
24
+ "author": "Halil Aydın <aydinhalil980@gmail.com>",
25
+ "sideEffects": false,
26
+ "type": "module",
27
+ "exports": {
28
+ ".": {
29
+ "style": "./src/styles.css",
30
+ "default": "./src/styles.css"
31
+ }
32
+ },
33
+ "files": [
34
+ "src"
35
+ ],
36
+ "scripts": {
37
+ "build:css": "bunx @tailwindcss/cli -i src/styles.css -o dist/index.css --minify"
38
+ },
39
+ "dependencies": {
40
+ "tailwindcss": "^4.0.0"
41
+ },
42
+ "devDependencies": {
43
+ "@biomejs/biome": "2.3.10",
44
+ "@types/bun": "latest",
45
+ "prettier": "^3.7.4",
46
+ "prettier-plugin-packagejson": "^2.5.20",
47
+ "prettier-plugin-tailwindcss": "^0.7.2"
48
+ },
49
+ "peerDependencies": {
50
+ "tailwindcss": ">=4.0.0"
51
+ },
52
+ "publishConfig": {
53
+ "access": "public"
54
+ }
55
+ }
@@ -0,0 +1,54 @@
1
+ /** Base Styling */
2
+ .accordion {
3
+ @apply flex w-96 max-w-[calc(100vw-8rem)] flex-col justify-center gap-4;
4
+ @apply bg-accordion text-accordion-foreground;
5
+ }
6
+
7
+ .accordion__item {
8
+ @apply border-border border-b;
9
+ }
10
+
11
+ .accordion__header {
12
+ @apply m-0;
13
+ }
14
+
15
+ .accordion__trigger {
16
+ @apply cursor-pointer;
17
+
18
+ @apply relative flex w-full items-baseline justify-between gap-4;
19
+
20
+ @media (hover: hover) {
21
+ &:hover {
22
+ @apply bg-accordion/90;
23
+ }
24
+ }
25
+
26
+ &:focus-visible {
27
+ @apply status-focused;
28
+ }
29
+ }
30
+
31
+ .accordion__trigger-icon {
32
+ @apply size-4;
33
+
34
+ @apply transition-transform motion-reduce:transform-none;
35
+
36
+ [data-panel-open] & {
37
+ @apply rotate-45;
38
+ }
39
+ }
40
+
41
+ .accordion__panel {
42
+ @apply overflow-hidden;
43
+
44
+ @apply transition-[height] motion-reduce:transition-none;
45
+
46
+ &[data-starting-style],
47
+ &[data-ending-style] {
48
+ height: 0;
49
+ }
50
+ }
51
+
52
+ .accordion__content {
53
+ @apply p-2;
54
+ }
@@ -0,0 +1,24 @@
1
+ /** Base Styling */
2
+ .avatar {
3
+ @apply bg-secondary text-secondary-foreground inline-flex items-center justify-center overflow-hidden rounded-full align-middle select-none;
4
+ }
5
+
6
+ .avatar--sm {
7
+ @apply size-10;
8
+ }
9
+
10
+ .avatar--md {
11
+ @apply size-12;
12
+ }
13
+
14
+ .avatar--lg {
15
+ @apply size-14;
16
+ }
17
+
18
+ .avatar__image {
19
+ @apply h-full w-full object-cover;
20
+ }
21
+
22
+ .avatar__fallback {
23
+ @apply flex h-full w-full items-center justify-center;
24
+ }
@@ -0,0 +1,16 @@
1
+ /** Base Styling */
2
+ .button-group {
3
+ @apply inline-flex items-center;
4
+ }
5
+
6
+ .button-group .button {
7
+ @apply rounded-none;
8
+ }
9
+
10
+ .button-group .button:first-child {
11
+ @apply rounded-l;
12
+ }
13
+
14
+ .button-group .button:last-child {
15
+ @apply rounded-r;
16
+ }
@@ -0,0 +1,76 @@
1
+ /** Base Styling */
2
+ .button {
3
+ @apply cursor-pointer;
4
+
5
+ @apply inline-flex items-center justify-center gap-2 rounded border font-medium text-nowrap;
6
+
7
+ @apply w-fit px-4 py-4;
8
+
9
+ @apply transition-all motion-reduce:transition-none;
10
+
11
+ @media (hover: hover) {
12
+ &:hover:not([data-disabled]) {
13
+ @apply brightness-90;
14
+ }
15
+ }
16
+
17
+ &:active {
18
+ @apply scale-95;
19
+ }
20
+
21
+ &:focus-visible {
22
+ @apply status-focused;
23
+ }
24
+
25
+ &[data-disabled] {
26
+ @apply status-disabled;
27
+ }
28
+
29
+ svg {
30
+ @apply size-5 shrink-0;
31
+ }
32
+ }
33
+
34
+ .button--sm {
35
+ @apply h-8 text-sm;
36
+ }
37
+
38
+ .button--md {
39
+ @apply h-10;
40
+ }
41
+
42
+ .button--lg {
43
+ @apply h-12;
44
+ }
45
+
46
+ .button--primary {
47
+ @apply bg-primary text-primary-foreground;
48
+ }
49
+
50
+ .button--secondary {
51
+ @apply bg-secondary text-secondary-foreground;
52
+ }
53
+
54
+ .button--outline {
55
+ @apply bg-background text-foreground;
56
+ }
57
+
58
+ .button--danger {
59
+ @apply bg-danger text-danger-foreground;
60
+ }
61
+
62
+ .button--ghost {
63
+ @apply hover:bg-primary/10 border-0 bg-transparent;
64
+ }
65
+
66
+ .button--icon-only {
67
+ @apply size-10;
68
+ }
69
+
70
+ .button--icon-only.button--sm {
71
+ @apply size-8;
72
+ }
73
+
74
+ .button--icon-only.button--lg {
75
+ @apply size-12;
76
+ }
@@ -0,0 +1,36 @@
1
+ /** Base Styling */
2
+
3
+ .card {
4
+ @apply w-full max-w-md rounded shadow;
5
+ @apply flex flex-col gap-3 p-5;
6
+ }
7
+
8
+ /** Variants */
9
+ .card--default {
10
+ @apply bg-card text-card-foreground;
11
+ }
12
+
13
+ .card--transparent {
14
+ @apply bg-transparent;
15
+ }
16
+
17
+ /** Slots */
18
+ .card__header {
19
+ @apply flex flex-col gap-1;
20
+ }
21
+
22
+ .card__title {
23
+ @apply text-2xl font-bold;
24
+ }
25
+
26
+ .card__description {
27
+ @apply text-muted-foreground text-base;
28
+ }
29
+
30
+ .card__body {
31
+ @apply flex flex-col gap-3;
32
+ }
33
+
34
+ .card__footer {
35
+ @apply flex items-center gap-3;
36
+ }
@@ -0,0 +1,4 @@
1
+ /** Base Styling */
2
+ .checkbox-group {
3
+ @apply flex flex-col items-start gap-4;
4
+ }
@@ -0,0 +1,32 @@
1
+ /** Base Styling */
2
+ .checkbox {
3
+ @apply flex items-center justify-center rounded border;
4
+
5
+ @apply size-6 outline-none;
6
+
7
+ @apply transition-all motion-reduce:transition-none;
8
+
9
+ &[data-unchecked] {
10
+ @apply bg-input/50;
11
+ }
12
+
13
+ &[data-checked] {
14
+ @apply bg-input;
15
+ }
16
+
17
+ &:focus-visible {
18
+ @apply status-focused;
19
+ }
20
+ }
21
+
22
+ .checkbox__indicator {
23
+ @apply text-input-foreground flex;
24
+
25
+ &[data-unchecked] {
26
+ @apply hidden;
27
+ }
28
+ }
29
+
30
+ .checkbox__icon {
31
+ @apply size-4;
32
+ }
@@ -0,0 +1,40 @@
1
+ /** Base Styling */
2
+ .chip {
3
+ @apply inline-flex items-center justify-center gap-2 rounded-full border px-2 font-medium text-nowrap;
4
+ }
5
+
6
+ .chip--sm {
7
+ @apply h-4 text-sm;
8
+ }
9
+
10
+ .chip--md {
11
+ @apply h-6;
12
+ }
13
+
14
+ .chip--lg {
15
+ @apply h-8;
16
+ }
17
+
18
+ .chip--primary {
19
+ @apply bg-primary text-primary-foreground;
20
+ }
21
+
22
+ .chip--secondary {
23
+ @apply bg-secondary text-secondary-foreground;
24
+ }
25
+
26
+ .chip--outline {
27
+ @apply bg-transparent;
28
+ }
29
+
30
+ .chip--danger {
31
+ @apply bg-danger text-danger-foreground;
32
+ }
33
+
34
+ .chip--ghost {
35
+ @apply border-none bg-transparent;
36
+ }
37
+
38
+ .chip--success {
39
+ @apply bg-success text-success-foreground;
40
+ }
@@ -0,0 +1,4 @@
1
+ /** Base Styling */
2
+ .container {
3
+ @apply mx-auto px-4;
4
+ }
@@ -0,0 +1,38 @@
1
+ /** Base Styling */
2
+ .dialog__backdrop {
3
+ @apply fixed inset-0 bg-black/50 opacity-20 backdrop-blur-sm;
4
+
5
+ @apply transition-opacity motion-reduce:transition-none;
6
+
7
+ &[data-starting-style],
8
+ &[data-ending-style] {
9
+ @apply opacity-0;
10
+ }
11
+ }
12
+
13
+ .dialog__popup {
14
+ @apply bg-popover rounded border p-6 shadow;
15
+
16
+ @apply w-full max-w-lg;
17
+
18
+ @apply fixed top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2;
19
+
20
+ @apply transition-all motion-reduce:transition-none;
21
+
22
+ &[data-starting-style],
23
+ &[data-ending-style] {
24
+ @apply scale-95 opacity-0;
25
+ }
26
+ }
27
+
28
+ .dialog__title {
29
+ @apply text-lg font-semibold;
30
+ }
31
+
32
+ .dialog__description {
33
+ @apply text-muted-foreground text-sm;
34
+ }
35
+
36
+ .dialog__close {
37
+ @apply absolute top-0 right-0 m-2;
38
+ }
@@ -0,0 +1,12 @@
1
+ /** Base Styling */
2
+ .field {
3
+ @apply flex flex-col gap-1;
4
+ }
5
+
6
+ .field__description {
7
+ @apply text-muted-foreground text-sm;
8
+ }
9
+
10
+ .field__error {
11
+ @apply text-danger text-sm;
12
+ }
@@ -0,0 +1,4 @@
1
+ /** Base Styling */
2
+ .form {
3
+ @apply flex w-full flex-col gap-4;
4
+ }
@@ -0,0 +1,26 @@
1
+ @import "./input.css";
2
+ @import "./textarea.css";
3
+ @import "./meter.css";
4
+ @import "./list.css";
5
+ @import "./navbar.css";
6
+ @import "./checkbox-group.css";
7
+ @import "./card.css";
8
+ @import "./avatar.css";
9
+ @import "./button-group.css";
10
+ @import "./accordion.css";
11
+ @import "./label.css";
12
+ @import "./menu.css";
13
+ @import "./chip.css";
14
+ @import "./link.css";
15
+ @import "./container.css";
16
+ @import "./tabs.css";
17
+ @import "./button.css";
18
+ @import "./text.css";
19
+ @import "./form.css";
20
+ @import "./separator.css";
21
+ @import "./switch.css";
22
+ @import "./checkbox.css";
23
+ @import "./field.css";
24
+ @import "./toggle-button.css";
25
+ @import "./table.css";
26
+ @import "./dialog.css";
@@ -0,0 +1,37 @@
1
+ /** Base Styling */
2
+ .input {
3
+ @apply bg-input text-input-foreground rounded border;
4
+ @apply w-full px-3 py-2;
5
+
6
+ @apply transition-all motion-reduce:transition-none;
7
+
8
+ @media (hover: hover) {
9
+ &:hover:not([data-disabled]) {
10
+ @apply brightness-90;
11
+ }
12
+ }
13
+
14
+ &:disabled {
15
+ @apply status-disabled;
16
+ }
17
+
18
+ &:valid {
19
+ @apply status-valid;
20
+ }
21
+
22
+ &:invalid:not(:placeholder-shown) {
23
+ @apply status-invalid;
24
+ }
25
+ }
26
+
27
+ .input--sm {
28
+ @apply h-8 text-sm;
29
+ }
30
+
31
+ .input--md {
32
+ @apply h-10;
33
+ }
34
+
35
+ .input--lg {
36
+ @apply h-12;
37
+ }
@@ -0,0 +1,4 @@
1
+ /** Base Styling */
2
+ .label {
3
+ @apply flex items-center gap-2 select-none;
4
+ }
@@ -0,0 +1,29 @@
1
+ /** Base Styling */
2
+ .link {
3
+ @apply text-link underline-offset-2 transition-colors;
4
+
5
+ &:visited {
6
+ @apply text-link/70;
7
+ }
8
+
9
+ &:hover {
10
+ @apply text-link/80;
11
+ }
12
+
13
+ &[data-active] {
14
+ @apply font-semibold;
15
+ }
16
+
17
+ &:disabled,
18
+ [data-disabled] {
19
+ @apply text-muted cursor-not-allowed;
20
+ }
21
+ }
22
+
23
+ .link--underline {
24
+ @apply underline;
25
+ }
26
+
27
+ .link--no-underline {
28
+ @apply no-underline;
29
+ }
@@ -0,0 +1,8 @@
1
+ /** Base Styling */
2
+ .list {
3
+ @apply flex flex-col gap-1;
4
+ }
5
+
6
+ .list__item {
7
+ @apply cursor-pointer;
8
+ }
File without changes
@@ -0,0 +1,72 @@
1
+ /** Base Styling */
2
+ .meter {
3
+ @apply grid grid-cols-2 items-center gap-1;
4
+ }
5
+
6
+ .meter__label {
7
+ @apply font-medium;
8
+ }
9
+
10
+ .meter__value {
11
+ @apply col-start-2 m-0 text-right text-sm leading-5;
12
+ }
13
+
14
+ .meter__track {
15
+ @apply col-span-2 block w-48 overflow-hidden rounded shadow-inner;
16
+ }
17
+
18
+ .meter__indicator {
19
+ @apply block rounded;
20
+
21
+ @apply transition-all motion-reduce:transition-none;
22
+ }
23
+
24
+ /** Variants */
25
+ .meter--primary .meter__track {
26
+ @apply bg-primary/10;
27
+ }
28
+
29
+ .meter--primary .meter__indicator {
30
+ @apply bg-primary;
31
+ }
32
+
33
+ .meter--secondary .meter__track {
34
+ @apply bg-secondary/10;
35
+ }
36
+
37
+ .meter--secondary .meter__indicator {
38
+ @apply bg-secondary;
39
+ }
40
+
41
+ .meter--success .meter__track {
42
+ @apply bg-success/10;
43
+ }
44
+
45
+ .meter--success .meter__indicator {
46
+ @apply bg-success;
47
+ }
48
+
49
+ .meter--danger .meter__track {
50
+ @apply bg-danger/10;
51
+ }
52
+
53
+ .meter--danger .meter__indicator {
54
+ @apply bg-danger;
55
+ }
56
+
57
+ /** Sizes */
58
+ .meter--sm .meter__track {
59
+ @apply h-2;
60
+ }
61
+
62
+ .meter--sm .meter__label {
63
+ @apply text-sm;
64
+ }
65
+
66
+ .meter--md .meter__track {
67
+ @apply h-3;
68
+ }
69
+
70
+ .meter--lg .meter__track {
71
+ @apply h-4;
72
+ }
@@ -0,0 +1,38 @@
1
+ /** Base Styling */
2
+ .navbar {
3
+ @apply bg-secondary/50 border-border relative z-50 flex h-[var(--navbar-height)] w-full items-center justify-between border-b px-4 py-2;
4
+ }
5
+
6
+ .navbar__container {
7
+ @apply mx-auto flex w-full max-w-7xl items-center justify-between;
8
+ }
9
+
10
+ .navbar__content {
11
+ @apply flex items-center gap-2;
12
+ }
13
+
14
+ .navbar__toggle {
15
+ @apply md:hidden;
16
+ }
17
+
18
+ .navbar__list {
19
+ @apply hidden md:flex md:items-center md:gap-6;
20
+ }
21
+
22
+ .navbar__list-item {
23
+ @apply list-none;
24
+ }
25
+
26
+ .navbar__menu {
27
+ @apply bg-secondary/50 absolute top-16 left-0 hidden w-full flex-col border border-b py-4 md:hidden;
28
+
29
+ @apply transition-[height] motion-reduce:transition-none;
30
+
31
+ &[data-expanded="true"] {
32
+ @apply flex;
33
+ }
34
+ }
35
+
36
+ .navbar__menu-item {
37
+ @apply w-full list-none px-4 py-2;
38
+ }
@@ -0,0 +1,12 @@
1
+ /** Base Styling */
2
+ .separator {
3
+ @apply border;
4
+ }
5
+
6
+ .separator--horizontal {
7
+ @apply my-2 h-px w-full;
8
+ }
9
+
10
+ .separator--vertical {
11
+ @apply mx-2 h-full w-px;
12
+ }
@@ -0,0 +1,40 @@
1
+ /** Base Styling */
2
+ .switch {
3
+ @apply cursor-pointer;
4
+
5
+ @apply bg-secondary/50 relative flex cursor-pointer rounded-full border-2;
6
+
7
+ &:active {
8
+ @apply bg-secondary;
9
+ }
10
+
11
+ &:focus-visible {
12
+ @apply status-focused;
13
+ }
14
+
15
+ &[data-disabled] {
16
+ @apply status-disabled;
17
+ }
18
+ }
19
+
20
+ .switch__thumb {
21
+ @apply bg-primary aspect-square h-full rounded-full shadow;
22
+
23
+ @apply transition-[translate] motion-reduce:transition-none;
24
+
25
+ &[data-checked] {
26
+ @apply translate-x-full;
27
+ }
28
+ }
29
+
30
+ .switch--sm {
31
+ @apply h-4 w-7;
32
+ }
33
+
34
+ .switch--md {
35
+ @apply h-6 w-10;
36
+ }
37
+
38
+ .switch--lg {
39
+ @apply h-8 w-14;
40
+ }
@@ -0,0 +1 @@
1
+ /** Base Styling */
@@ -0,0 +1,49 @@
1
+ /** Base Styling */
2
+ .tabs {
3
+ @apply bg-card/50 text-secondary-foreground rounded border;
4
+ }
5
+
6
+ .tabs__list {
7
+ @apply bg-card relative z-0 flex gap-1 rounded-t border-b px-1;
8
+ }
9
+
10
+ .tabs__tab {
11
+ @apply m-0 flex appearance-none items-center justify-center border-0 bg-transparent outline-none;
12
+ @apply text-muted-foreground break-keep whitespace-nowrap select-none;
13
+ @apply h-8 px-2 py-0;
14
+
15
+ &[data-active] {
16
+ @apply text-foreground;
17
+ }
18
+
19
+ @media (hover: hover) {
20
+ &:hover {
21
+ @apply text-foreground;
22
+ }
23
+ }
24
+
25
+ &:focus-visible {
26
+ @apply relative;
27
+
28
+ &::before {
29
+ content: "";
30
+ @apply outline-primary absolute inset-x-0 inset-y-1 rounded outline-2 -outline-offset-1;
31
+ }
32
+ }
33
+ }
34
+
35
+ .tabs__indicator {
36
+ @apply bg-primary absolute bottom-0 left-0 -z-10 h-px;
37
+ @apply transition-[translate,width] motion-reduce:transition-none;
38
+
39
+ translate: var(--active-tab-left) -50%;
40
+ width: var(--active-tab-width);
41
+ }
42
+
43
+ .tabs__panel {
44
+ @apply relative flex h-32 items-center justify-center outline-none;
45
+
46
+ &:focus-visible {
47
+ @apply status-focused;
48
+ }
49
+ }
@@ -0,0 +1,4 @@
1
+ /** Base Styling */
2
+ .text {
3
+ @apply text-danger;
4
+ }
@@ -0,0 +1 @@
1
+ /** Base Styling */
@@ -0,0 +1,8 @@
1
+ /** Base Styling */
2
+ .toggle-button {
3
+ @apply brightness-50;
4
+
5
+ &[data-pressed] {
6
+ @apply brightness-100;
7
+ }
8
+ }
package/src/styles.css ADDED
@@ -0,0 +1,127 @@
1
+ @import "tailwindcss";
2
+
3
+ @import "./components/index.css" layer(components);
4
+
5
+ :root {
6
+ --navbar-height: 4rem;
7
+ --radius: 0.625rem;
8
+
9
+ --background: oklch(1 0 0);
10
+ --foreground: oklch(0.145 0 0);
11
+
12
+ --card: oklch(1 0 0);
13
+ --card-foreground: oklch(0.145 0 0);
14
+ --popover: oklch(1 0 0);
15
+ --popover-foreground: oklch(0.145 0 0);
16
+ --input: oklch(0.922 0 0);
17
+ --input-foreground: oklch(0.205 0 0);
18
+ --accordion: oklch(1 0 0);
19
+ --accordion-foreground: oklch(0.145 0 0);
20
+
21
+ --primary: oklch(0.205 0 0);
22
+ --primary-foreground: oklch(0.985 0 0);
23
+ --secondary: oklch(0.97 0 0);
24
+ --secondary-foreground: oklch(0.205 0 0);
25
+ --muted: oklch(0.97 0 0);
26
+ --muted-foreground: oklch(0.556 0 0);
27
+ --accent: oklch(0.97 0 0);
28
+ --accent-foreground: oklch(0.205 0 0);
29
+ --danger: oklch(0.577 0.245 27.325);
30
+ --danger-foreground: oklch(0.985 0 0);
31
+ --success: oklch(0.623 0.17 145);
32
+ --success-foreground: oklch(0.985 0 0);
33
+
34
+ --border: oklch(0.922 0 0);
35
+ --ring: oklch(62% 0.18 250);
36
+ --link: oklch(0.205 0 0);
37
+ }
38
+
39
+ .dark {
40
+ --background: oklch(0.145 0 0);
41
+ --foreground: oklch(0.985 0 0);
42
+
43
+ --card: oklch(0.205 0 0);
44
+ --card-foreground: oklch(0.985 0 0);
45
+ --popover: oklch(0.205 0 0);
46
+ --popover-foreground: oklch(0.985 0 0);
47
+ --input: oklch(1 0 0 / 15%);
48
+ --input-foreground: oklch(0.985 0 0);
49
+ --accordion: oklch(0.205 0 0);
50
+ --accordion-foreground: oklch(0.985 0 0);
51
+
52
+ --primary: oklch(0.922 0 0);
53
+ --primary-foreground: oklch(0.205 0 0);
54
+ --secondary: oklch(0.269 0 0);
55
+ --secondary-foreground: oklch(0.985 0 0);
56
+ --muted: oklch(0.269 0 0);
57
+ --muted-foreground: oklch(0.708 0 0);
58
+ --danger: oklch(0.704 0.191 22.216);
59
+ --danger-foreground: oklch(0.985 0 0);
60
+ --success: oklch(0.7017 0.3225 145);
61
+ --success-foreground: oklch(0.205 0 0);
62
+
63
+ --border: oklch(1 0 0 / 10%);
64
+ --ring: oklch(62% 0.18 250);
65
+ --link: oklch(0.922 0 0);
66
+ }
67
+
68
+ @theme inline {
69
+ --radius: var(--radius);
70
+
71
+ --color-background: var(--background);
72
+ --color-foreground: var(--foreground);
73
+
74
+ --color-card: var(--card);
75
+ --color-card-foreground: var(--card-foreground);
76
+ --color-popover: var(--popover);
77
+ --color-popover-foreground: var(--popover-foreground);
78
+ --color-input: var(--input);
79
+ --color-input-foreground: var(--input-foreground);
80
+ --color-accordion: var(--accordion);
81
+ --color-accordion-foreground: var(--accordion-foreground);
82
+
83
+ --color-primary: var(--primary);
84
+ --color-primary-foreground: var(--primary-foreground);
85
+ --color-secondary: var(--secondary);
86
+ --color-secondary-foreground: var(--secondary-foreground);
87
+ --color-muted: var(--muted);
88
+ --color-muted-foreground: var(--muted-foreground);
89
+ --color-danger: var(--danger);
90
+ --color-danger-foreground: var(--danger-foreground);
91
+ --color-success: var(--success);
92
+ --color-success-foreground: var(--success-foreground);
93
+
94
+ --color-border: var(--border);
95
+ --color-ring: var(--ring);
96
+ --color-link: var(--link);
97
+ }
98
+
99
+ @layer base {
100
+ * {
101
+ @apply border-border outline-ring/50;
102
+ }
103
+
104
+ body {
105
+ @apply bg-background text-foreground;
106
+ }
107
+ }
108
+
109
+ @utility status-focused {
110
+ @apply ring-offset-background ring-2 ring-offset-2 outline-none;
111
+ }
112
+
113
+ @utility status-disabled {
114
+ @apply cursor-not-allowed opacity-50;
115
+ }
116
+
117
+ @utility status-pending {
118
+ @apply cursor-wait opacity-75;
119
+ }
120
+
121
+ @utility status-valid {
122
+ @apply border-success;
123
+ }
124
+
125
+ @utility status-invalid {
126
+ @apply border-danger;
127
+ }