@djangocfg/ui-core 2.1.394 → 2.1.397
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 +14 -0
- package/package.json +4 -4
- package/src/components/effects/GlowBackground.tsx +1 -1
- package/src/components/navigation/sidebar/sidebar.tsx +4 -4
- package/src/hooks/index.ts +1 -0
- package/src/hooks/tabs/activeTabStore.ts +167 -0
- package/src/hooks/tabs/index.ts +17 -0
- package/src/hooks/tabs/tabId.ts +44 -0
- package/src/hooks/tabs/useActiveTab.ts +64 -0
- package/src/styles/README.md +149 -123
- package/src/styles/base.css +3 -3
- package/src/styles/presets/presets.ts +0 -9
- package/src/styles/presets/themes/dense.ts +10 -10
- package/src/styles/presets/themes/django-cfg.ts +13 -13
- package/src/styles/presets/themes/high-contrast.ts +11 -11
- package/src/styles/presets/themes/index.ts +0 -18
- package/src/styles/presets/themes/ios.ts +64 -64
- package/src/styles/presets/themes/macos.ts +64 -64
- package/src/styles/presets/themes/soft.ts +25 -25
- package/src/styles/presets/themes/windows.ts +64 -64
- package/src/styles/presets/types.ts +26 -12
- package/src/styles/theme/dark.css +47 -53
- package/src/styles/theme/light.css +47 -53
- package/src/styles/theme/tokens.css +128 -113
- package/src/styles/utilities.css +44 -6
- package/src/styles/presets/themes/catppuccin.ts +0 -38
- package/src/styles/presets/themes/dracula.ts +0 -38
- package/src/styles/presets/themes/github.ts +0 -38
- package/src/styles/presets/themes/gruvbox.ts +0 -38
- package/src/styles/presets/themes/material.ts +0 -38
- package/src/styles/presets/themes/nord.ts +0 -38
- package/src/styles/presets/themes/one-dark.ts +0 -38
- package/src/styles/presets/themes/solarized.ts +0 -38
- package/src/styles/presets/themes/tokyo-night.ts +0 -38
|
@@ -14,29 +14,29 @@
|
|
|
14
14
|
|
|
15
15
|
.dark {
|
|
16
16
|
/* Base colors - True black background with subtle grays */
|
|
17
|
-
--background: 0 0% 4
|
|
18
|
-
--foreground: 0 0% 98
|
|
19
|
-
--card: 0 0% 8
|
|
20
|
-
--card-foreground: 0 0% 98
|
|
21
|
-
--popover: 0 0% 12
|
|
22
|
-
--popover-foreground: 0 0% 98
|
|
17
|
+
--background: hsl(0 0% 4%);
|
|
18
|
+
--foreground: hsl(0 0% 98%);
|
|
19
|
+
--card: hsl(0 0% 8%);
|
|
20
|
+
--card-foreground: hsl(0 0% 98%);
|
|
21
|
+
--popover: hsl(0 0% 12%);
|
|
22
|
+
--popover-foreground: hsl(0 0% 98%);
|
|
23
23
|
/* Exact brand: #00d9ff (same HSL as :root light primary) */
|
|
24
|
-
--primary: 189 100% 50
|
|
24
|
+
--primary: hsl(189 100% 50%);
|
|
25
25
|
/* Dark label on bright cyan — stronger contrast than white on #00d9ff */
|
|
26
|
-
--primary-foreground: 0 0% 9
|
|
26
|
+
--primary-foreground: hsl(0 0% 9%);
|
|
27
27
|
/* Secondary: dark elevated surface + light label (matches typical shadcn dark “secondary” role) */
|
|
28
|
-
--secondary: 0 0% 16
|
|
29
|
-
--secondary-foreground: 0 0% 96
|
|
30
|
-
--muted: 0 0% 10
|
|
31
|
-
--muted-foreground: 0 0% 60
|
|
28
|
+
--secondary: hsl(0 0% 16%);
|
|
29
|
+
--secondary-foreground: hsl(0 0% 96%);
|
|
30
|
+
--muted: hsl(0 0% 10%);
|
|
31
|
+
--muted-foreground: hsl(0 0% 60%);
|
|
32
32
|
/* Cyan-tinted elevated surface */
|
|
33
|
-
--accent: 189 18% 17
|
|
34
|
-
--accent-foreground: 0 0% 98
|
|
35
|
-
--destructive: 0 84% 60
|
|
36
|
-
--destructive-foreground: 0 0% 98
|
|
37
|
-
--border: 0 0% 15
|
|
38
|
-
--input: 0 0% 15
|
|
39
|
-
--ring: 189 100% 50
|
|
33
|
+
--accent: hsl(189 18% 17%);
|
|
34
|
+
--accent-foreground: hsl(0 0% 98%);
|
|
35
|
+
--destructive: hsl(0 84% 60%);
|
|
36
|
+
--destructive-foreground: hsl(0 0% 98%);
|
|
37
|
+
--border: hsl(0 0% 15%);
|
|
38
|
+
--input: hsl(0 0% 15%);
|
|
39
|
+
--ring: hsl(189 100% 50%);
|
|
40
40
|
--shadow-card: none;
|
|
41
41
|
|
|
42
42
|
/* Code surface — see light.css for the rationale. On dark we want
|
|
@@ -44,22 +44,20 @@
|
|
|
44
44
|
* `--popover` (12%); 9% sits in the sweet spot — visible block but
|
|
45
45
|
* not a heavy "second card" feel. Inline code uses the same hue at
|
|
46
46
|
* a touch lighter so chips read as recessed, not as buttons. */
|
|
47
|
-
--code: 0 0% 9
|
|
48
|
-
--code-foreground: 0 0% 92
|
|
49
|
-
--code-border: 0 0% 18
|
|
50
|
-
--code-inline: 0 0% 14
|
|
51
|
-
--code-inline-foreground: 0 0% 92
|
|
52
|
-
|
|
47
|
+
--code: hsl(0 0% 9%);
|
|
48
|
+
--code-foreground: hsl(0 0% 92%);
|
|
49
|
+
--code-border: hsl(0 0% 18%);
|
|
50
|
+
--code-inline: hsl(0 0% 14%);
|
|
51
|
+
--code-inline-foreground: hsl(0 0% 92%);
|
|
53
52
|
/* Sidebar Dark Theme - Darker black sidebar */
|
|
54
|
-
--sidebar-background: 0 0% 0
|
|
55
|
-
--sidebar-foreground: 0 0% 98
|
|
56
|
-
--sidebar-primary: 189 100% 50
|
|
57
|
-
--sidebar-primary-foreground: 0 0% 9
|
|
58
|
-
--sidebar-accent: 189 14% 12
|
|
59
|
-
--sidebar-accent-foreground: 0 0% 98
|
|
60
|
-
--sidebar-border: 0 0% 15
|
|
61
|
-
--sidebar-ring: 189 100% 50
|
|
62
|
-
|
|
53
|
+
--sidebar-background: hsl(0 0% 0%);
|
|
54
|
+
--sidebar-foreground: hsl(0 0% 98%);
|
|
55
|
+
--sidebar-primary: hsl(189 100% 50%);
|
|
56
|
+
--sidebar-primary-foreground: hsl(0 0% 9%);
|
|
57
|
+
--sidebar-accent: hsl(189 14% 12%);
|
|
58
|
+
--sidebar-accent-foreground: hsl(0 0% 98%);
|
|
59
|
+
--sidebar-border: hsl(0 0% 15%);
|
|
60
|
+
--sidebar-ring: hsl(189 100% 50%);
|
|
63
61
|
/* ── Status surfaces (dark) ──────────────────────────────────────
|
|
64
62
|
* Dark variants: dim backgrounds (~8-12% lightness) so banners
|
|
65
63
|
* don't blow out against the near-black page. Foreground raised
|
|
@@ -67,29 +65,25 @@
|
|
|
67
65
|
* ─────────────────────────────────────────────────────────────── */
|
|
68
66
|
|
|
69
67
|
/* Warning — amber */
|
|
70
|
-
--warning: 38 92% 50
|
|
71
|
-
--warning-background: 38 80% 10
|
|
72
|
-
--warning-foreground: 38 90% 75
|
|
73
|
-
--warning-border: 38 60% 30
|
|
74
|
-
|
|
68
|
+
--warning: hsl(38 92% 50%);
|
|
69
|
+
--warning-background: hsl(38 80% 10%);
|
|
70
|
+
--warning-foreground: hsl(38 90% 75%);
|
|
71
|
+
--warning-border: hsl(38 60% 30%);
|
|
75
72
|
/* Success — green */
|
|
76
|
-
--success: 142 60% 45
|
|
77
|
-
--success-background: 142 60% 8
|
|
78
|
-
--success-foreground: 142 70% 70
|
|
79
|
-
--success-border: 142 50% 25
|
|
80
|
-
|
|
73
|
+
--success: hsl(142 60% 45%);
|
|
74
|
+
--success-background: hsl(142 60% 8%);
|
|
75
|
+
--success-foreground: hsl(142 70% 70%);
|
|
76
|
+
--success-border: hsl(142 50% 25%);
|
|
81
77
|
/* Destructive surface */
|
|
82
|
-
--destructive-background: 0 80% 10
|
|
83
|
-
--destructive-border: 0 70% 30
|
|
84
|
-
|
|
78
|
+
--destructive-background: hsl(0 80% 10%);
|
|
79
|
+
--destructive-border: hsl(0 70% 30%);
|
|
85
80
|
/* Info — blue-cyan */
|
|
86
|
-
--info: 200 80% 55
|
|
87
|
-
--info-background: 200 80% 8
|
|
88
|
-
--info-foreground: 200 80% 75
|
|
89
|
-
--info-border: 200 60% 25
|
|
90
|
-
|
|
81
|
+
--info: hsl(200 80% 55%);
|
|
82
|
+
--info-background: hsl(200 80% 8%);
|
|
83
|
+
--info-foreground: hsl(200 80% 75%);
|
|
84
|
+
--info-border: hsl(200 60% 25%);
|
|
91
85
|
/* Surface gradient dark */
|
|
92
|
-
--surface-gradient: linear-gradient(to bottom,
|
|
86
|
+
--surface-gradient: linear-gradient(to bottom, var(--background), color-mix(in oklab, var(--background) 80%, transparent));
|
|
93
87
|
|
|
94
88
|
/* Chart colors — chart-1 aligned with brand */
|
|
95
89
|
--chart-1: 189 100% 50%;
|
|
@@ -11,27 +11,27 @@
|
|
|
11
11
|
|
|
12
12
|
:root {
|
|
13
13
|
/* Base colors - Clean white with neutral grays */
|
|
14
|
-
--background: 0 0% 94
|
|
15
|
-
--foreground: 0 0% 9
|
|
16
|
-
--card: 0 0% 100
|
|
17
|
-
--card-foreground: 0 0% 9
|
|
18
|
-
--popover: 0 0% 100
|
|
19
|
-
--popover-foreground: 0 0% 9
|
|
14
|
+
--background: hsl(0 0% 94%);
|
|
15
|
+
--foreground: hsl(0 0% 9%);
|
|
16
|
+
--card: hsl(0 0% 100%);
|
|
17
|
+
--card-foreground: hsl(0 0% 9%);
|
|
18
|
+
--popover: hsl(0 0% 100%);
|
|
19
|
+
--popover-foreground: hsl(0 0% 9%);
|
|
20
20
|
/* Interactive primary on white (~#0989aa): readable white-on-fill + calmer than neon */
|
|
21
|
-
--primary: 192 90% 35
|
|
22
|
-
--primary-foreground: 0 0% 100
|
|
23
|
-
--secondary: 0 0% 9
|
|
24
|
-
--secondary-foreground: 0 0% 98
|
|
25
|
-
--muted: 0 0% 96
|
|
26
|
-
--muted-foreground: 0 0% 45
|
|
21
|
+
--primary: hsl(192 90% 35%);
|
|
22
|
+
--primary-foreground: hsl(0 0% 100%);
|
|
23
|
+
--secondary: hsl(0 0% 9%);
|
|
24
|
+
--secondary-foreground: hsl(0 0% 98%);
|
|
25
|
+
--muted: hsl(0 0% 96%);
|
|
26
|
+
--muted-foreground: hsl(0 0% 45%);
|
|
27
27
|
/* Subtle cyan-tinted hover surface (not gray-only) */
|
|
28
|
-
--accent: 192 18% 94
|
|
29
|
-
--accent-foreground: 0 0% 9
|
|
30
|
-
--destructive: 0 84% 60
|
|
31
|
-
--destructive-foreground: 0 0% 98
|
|
32
|
-
--border: 0 0% 90
|
|
33
|
-
--input: 0 0% 90
|
|
34
|
-
--ring: 192 90% 35
|
|
28
|
+
--accent: hsl(192 18% 94%);
|
|
29
|
+
--accent-foreground: hsl(0 0% 9%);
|
|
30
|
+
--destructive: hsl(0 84% 60%);
|
|
31
|
+
--destructive-foreground: hsl(0 0% 98%);
|
|
32
|
+
--border: hsl(0 0% 90%);
|
|
33
|
+
--input: hsl(0 0% 90%);
|
|
34
|
+
--ring: hsl(192 90% 35%);
|
|
35
35
|
--shadow-card: 0 1px 3px 0 rgb(0 0 0 / 0.06), 0 1px 2px -1px rgb(0 0 0 / 0.04);
|
|
36
36
|
|
|
37
37
|
/* Code surface — used by markdown code fences, terminal blocks,
|
|
@@ -44,22 +44,20 @@
|
|
|
44
44
|
* for body legibility. Border keeps the panel anchored.
|
|
45
45
|
* Inline code shares the same surface for chip-on-chip cohesion.
|
|
46
46
|
*/
|
|
47
|
-
--code: 0 0% 96
|
|
48
|
-
--code-foreground: 0 0% 12
|
|
49
|
-
--code-border: 0 0% 88
|
|
50
|
-
--code-inline: 0 0% 93
|
|
51
|
-
--code-inline-foreground: 0 0% 14
|
|
52
|
-
|
|
47
|
+
--code: hsl(0 0% 96%);
|
|
48
|
+
--code-foreground: hsl(0 0% 12%);
|
|
49
|
+
--code-border: hsl(0 0% 88%);
|
|
50
|
+
--code-inline: hsl(0 0% 93%);
|
|
51
|
+
--code-inline-foreground: hsl(0 0% 14%);
|
|
53
52
|
/* Sidebar Light Theme - Subtle gray background */
|
|
54
|
-
--sidebar-background: 0 0% 97
|
|
55
|
-
--sidebar-foreground: 0 0% 9
|
|
56
|
-
--sidebar-primary: 192 90% 35
|
|
57
|
-
--sidebar-primary-foreground: 0 0% 100
|
|
58
|
-
--sidebar-accent: 189 16% 95
|
|
59
|
-
--sidebar-accent-foreground: 0 0% 9
|
|
60
|
-
--sidebar-border: 0 0% 90
|
|
61
|
-
--sidebar-ring: 192 90% 35
|
|
62
|
-
|
|
53
|
+
--sidebar-background: hsl(0 0% 97%);
|
|
54
|
+
--sidebar-foreground: hsl(0 0% 9%);
|
|
55
|
+
--sidebar-primary: hsl(192 90% 35%);
|
|
56
|
+
--sidebar-primary-foreground: hsl(0 0% 100%);
|
|
57
|
+
--sidebar-accent: hsl(189 16% 95%);
|
|
58
|
+
--sidebar-accent-foreground: hsl(0 0% 9%);
|
|
59
|
+
--sidebar-border: hsl(0 0% 90%);
|
|
60
|
+
--sidebar-ring: hsl(192 90% 35%);
|
|
63
61
|
/* ── Status surfaces ─────────────────────────────────────────────
|
|
64
62
|
* Each status has 4 tokens: icon/accent color, page background,
|
|
65
63
|
* readable foreground text, and border ring.
|
|
@@ -68,29 +66,25 @@
|
|
|
68
66
|
* ─────────────────────────────────────────────────────────────── */
|
|
69
67
|
|
|
70
68
|
/* Warning — amber */
|
|
71
|
-
--warning: 38 92% 50
|
|
72
|
-
--warning-background: 48 100% 96
|
|
73
|
-
--warning-foreground: 26 90% 25
|
|
74
|
-
--warning-border: 38 70% 65
|
|
75
|
-
|
|
69
|
+
--warning: hsl(38 92% 50%);
|
|
70
|
+
--warning-background: hsl(48 100% 96%);
|
|
71
|
+
--warning-foreground: hsl(26 90% 25%);
|
|
72
|
+
--warning-border: hsl(38 70% 65%);
|
|
76
73
|
/* Success — green */
|
|
77
|
-
--success: 142 71% 45
|
|
78
|
-
--success-background: 138 76% 97
|
|
79
|
-
--success-foreground: 140 60% 20
|
|
80
|
-
--success-border: 142 60% 65
|
|
81
|
-
|
|
74
|
+
--success: hsl(142 71% 45%);
|
|
75
|
+
--success-background: hsl(138 76% 97%);
|
|
76
|
+
--success-foreground: hsl(140 60% 20%);
|
|
77
|
+
--success-border: hsl(142 60% 65%);
|
|
82
78
|
/* Destructive surface (separate from the filled button token) */
|
|
83
|
-
--destructive-background: 0 100% 97
|
|
84
|
-
--destructive-border: 0 84% 70
|
|
85
|
-
|
|
79
|
+
--destructive-background: hsl(0 100% 97%);
|
|
80
|
+
--destructive-border: hsl(0 84% 70%);
|
|
86
81
|
/* Info — blue-cyan (brand-adjacent) */
|
|
87
|
-
--info: 200 90% 40
|
|
88
|
-
--info-background: 200 100% 97
|
|
89
|
-
--info-foreground: 200 80% 20
|
|
90
|
-
--info-border: 200 80% 65
|
|
91
|
-
|
|
82
|
+
--info: hsl(200 90% 40%);
|
|
83
|
+
--info-background: hsl(200 100% 97%);
|
|
84
|
+
--info-foreground: hsl(200 80% 20%);
|
|
85
|
+
--info-border: hsl(200 80% 65%);
|
|
92
86
|
/* Surface gradient */
|
|
93
|
-
--surface-gradient: linear-gradient(to bottom,
|
|
87
|
+
--surface-gradient: linear-gradient(to bottom, var(--background), color-mix(in oklab, var(--background) 80%, transparent));
|
|
94
88
|
|
|
95
89
|
/* Chart colors — chart-1 aligned with brand hue */
|
|
96
90
|
--chart-1: 192 90% 35%;
|
|
@@ -1,130 +1,145 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Tailwind CSS v4 Theme Tokens
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Two-block layout:
|
|
5
|
+
*
|
|
6
|
+
* @theme inline { --color-X: var(--X); } ← color references
|
|
7
|
+
* @theme { --spacing-N: …; } ← raw values
|
|
8
|
+
*
|
|
9
|
+
* `@theme inline` keeps `--color-*` as *references* into `:root` /
|
|
10
|
+
* `.dark` so Tailwind's opacity modifier (`bg-card/40`, `bg-foreground/5`)
|
|
11
|
+
* resolves via `color-mix(in oklab, var(--color-X) 40%, transparent)`.
|
|
12
|
+
* The legacy `@theme { --color-X: hsl(var(--X)); }` shape baked the
|
|
13
|
+
* value into a global variable and broke every opacity modifier —
|
|
14
|
+
* consumers had to write inline `style={{ backgroundColor: 'hsl(... / 0.4)' }}`
|
|
15
|
+
* workarounds. After this refactor, those workarounds are redundant.
|
|
16
|
+
*
|
|
17
|
+
* Pairs with `light.css` / `dark.css` where every `--token` is now a
|
|
18
|
+
* fully-wrapped CSS color (`hsl(0 0% 94%)`, not bare `0 0% 94%`).
|
|
6
19
|
*/
|
|
7
20
|
|
|
8
|
-
@theme {
|
|
9
|
-
/*
|
|
10
|
-
--
|
|
11
|
-
--
|
|
12
|
-
--
|
|
13
|
-
--
|
|
14
|
-
--
|
|
21
|
+
@theme inline {
|
|
22
|
+
/* Base semantic tokens — references into :root / .dark */
|
|
23
|
+
--color-background: var(--background);
|
|
24
|
+
--color-foreground: var(--foreground);
|
|
25
|
+
--color-card: var(--card);
|
|
26
|
+
--color-card-foreground: var(--card-foreground);
|
|
27
|
+
--color-popover: var(--popover);
|
|
28
|
+
--color-popover-foreground: var(--popover-foreground);
|
|
29
|
+
--color-primary: var(--primary);
|
|
30
|
+
--color-primary-foreground: var(--primary-foreground);
|
|
31
|
+
--color-secondary: var(--secondary);
|
|
32
|
+
--color-secondary-foreground: var(--secondary-foreground);
|
|
33
|
+
--color-muted: var(--muted);
|
|
34
|
+
--color-muted-foreground: var(--muted-foreground);
|
|
35
|
+
--color-accent: var(--accent);
|
|
36
|
+
--color-accent-foreground: var(--accent-foreground);
|
|
37
|
+
--color-destructive: var(--destructive);
|
|
38
|
+
--color-destructive-foreground: var(--destructive-foreground);
|
|
39
|
+
--color-border: var(--border);
|
|
40
|
+
--color-input: var(--input);
|
|
41
|
+
--color-ring: var(--ring);
|
|
15
42
|
|
|
16
|
-
/*
|
|
17
|
-
--color-
|
|
18
|
-
--color-
|
|
19
|
-
--color-
|
|
20
|
-
--color-
|
|
21
|
-
--color-popover: hsl(var(--popover));
|
|
22
|
-
--color-popover-foreground: hsl(var(--popover-foreground));
|
|
23
|
-
--color-primary: hsl(var(--primary));
|
|
24
|
-
--color-primary-foreground: hsl(var(--primary-foreground));
|
|
25
|
-
--color-secondary: hsl(var(--secondary));
|
|
26
|
-
--color-secondary-foreground: hsl(var(--secondary-foreground));
|
|
27
|
-
--color-muted: hsl(var(--muted));
|
|
28
|
-
--color-muted-foreground: hsl(var(--muted-foreground));
|
|
29
|
-
--color-accent: hsl(var(--accent));
|
|
30
|
-
--color-accent-foreground: hsl(var(--accent-foreground));
|
|
31
|
-
--color-destructive: hsl(var(--destructive));
|
|
32
|
-
--color-destructive-foreground: hsl(var(--destructive-foreground));
|
|
33
|
-
--color-border: hsl(var(--border));
|
|
34
|
-
--color-input: hsl(var(--input));
|
|
35
|
-
--color-ring: hsl(var(--ring));
|
|
36
|
-
--color-black: #000000;
|
|
37
|
-
--color-white: #ffffff;
|
|
38
|
-
/* Status surfaces — warning / success / destructive / info */
|
|
39
|
-
--color-warning: hsl(var(--warning));
|
|
40
|
-
--color-warning-background: hsl(var(--warning-background));
|
|
41
|
-
--color-warning-foreground: hsl(var(--warning-foreground));
|
|
42
|
-
--color-warning-border: hsl(var(--warning-border));
|
|
43
|
+
/* Status surfaces */
|
|
44
|
+
--color-warning: var(--warning);
|
|
45
|
+
--color-warning-background: var(--warning-background);
|
|
46
|
+
--color-warning-foreground: var(--warning-foreground);
|
|
47
|
+
--color-warning-border: var(--warning-border);
|
|
43
48
|
|
|
44
|
-
--color-success:
|
|
45
|
-
--color-success-background:
|
|
46
|
-
--color-success-foreground:
|
|
47
|
-
--color-success-border:
|
|
49
|
+
--color-success: var(--success);
|
|
50
|
+
--color-success-background: var(--success-background);
|
|
51
|
+
--color-success-foreground: var(--success-foreground);
|
|
52
|
+
--color-success-border: var(--success-border);
|
|
48
53
|
|
|
49
|
-
--color-destructive-background:
|
|
50
|
-
--color-destructive-border:
|
|
54
|
+
--color-destructive-background: var(--destructive-background);
|
|
55
|
+
--color-destructive-border: var(--destructive-border);
|
|
51
56
|
|
|
52
|
-
--color-info:
|
|
53
|
-
--color-info-background:
|
|
54
|
-
--color-info-foreground:
|
|
55
|
-
--color-info-border:
|
|
57
|
+
--color-info: var(--info);
|
|
58
|
+
--color-info-background: var(--info-background);
|
|
59
|
+
--color-info-foreground: var(--info-foreground);
|
|
60
|
+
--color-info-border: var(--info-border);
|
|
56
61
|
|
|
57
|
-
/* Code surface
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
--color-code:
|
|
61
|
-
--color-code-
|
|
62
|
-
--color-code-
|
|
63
|
-
--color-code-inline: hsl(var(--code-inline));
|
|
64
|
-
--color-code-inline-foreground: hsl(var(--code-inline-foreground));
|
|
62
|
+
/* Code surface */
|
|
63
|
+
--color-code: var(--code);
|
|
64
|
+
--color-code-foreground: var(--code-foreground);
|
|
65
|
+
--color-code-border: var(--code-border);
|
|
66
|
+
--color-code-inline: var(--code-inline);
|
|
67
|
+
--color-code-inline-foreground: var(--code-inline-foreground);
|
|
65
68
|
|
|
66
|
-
/* Sidebar
|
|
67
|
-
--color-sidebar-background:
|
|
68
|
-
|
|
69
|
-
--color-sidebar:
|
|
70
|
-
--color-sidebar-
|
|
71
|
-
--color-sidebar-primary:
|
|
72
|
-
--color-sidebar-
|
|
73
|
-
--color-sidebar-accent:
|
|
74
|
-
--color-sidebar-
|
|
75
|
-
--color-sidebar-
|
|
76
|
-
|
|
69
|
+
/* Sidebar */
|
|
70
|
+
--color-sidebar-background: var(--sidebar-background);
|
|
71
|
+
--color-sidebar: var(--sidebar-background);
|
|
72
|
+
--color-sidebar-foreground: var(--sidebar-foreground);
|
|
73
|
+
--color-sidebar-primary: var(--sidebar-primary);
|
|
74
|
+
--color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
|
|
75
|
+
--color-sidebar-accent: var(--sidebar-accent);
|
|
76
|
+
--color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
|
|
77
|
+
--color-sidebar-border: var(--sidebar-border);
|
|
78
|
+
--color-sidebar-ring: var(--sidebar-ring);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
@theme {
|
|
82
|
+
/* Static palette anchors — not themed */
|
|
83
|
+
--color-black: #000000;
|
|
84
|
+
--color-white: #ffffff;
|
|
85
|
+
|
|
86
|
+
/* Breakpoints — mobile-first */
|
|
87
|
+
--breakpoint-sm: 40rem; /* 640px */
|
|
88
|
+
--breakpoint-md: 48rem; /* 768px */
|
|
89
|
+
--breakpoint-lg: 64rem; /* 1024px */
|
|
90
|
+
--breakpoint-xl: 80rem; /* 1280px */
|
|
91
|
+
--breakpoint-2xl: 96rem; /* 1536px */
|
|
77
92
|
|
|
78
|
-
/* Spacing scale
|
|
79
|
-
--spacing: 0.25rem;
|
|
93
|
+
/* Spacing scale — required for all spacing utilities */
|
|
94
|
+
--spacing: 0.25rem;
|
|
80
95
|
--spacing-0: 0;
|
|
81
96
|
--spacing-px: 1px;
|
|
82
|
-
--spacing-0\.5: 0.125rem;
|
|
83
|
-
--spacing-1: 0.25rem;
|
|
84
|
-
--spacing-1\.5: 0.375rem;
|
|
85
|
-
--spacing-2: 0.5rem;
|
|
86
|
-
--spacing-2\.5: 0.625rem;
|
|
87
|
-
--spacing-3: 0.75rem;
|
|
88
|
-
--spacing-3\.5: 0.875rem;
|
|
89
|
-
--spacing-4: 1rem;
|
|
90
|
-
--spacing-5: 1.25rem;
|
|
91
|
-
--spacing-6: 1.5rem;
|
|
92
|
-
--spacing-7: 1.75rem;
|
|
93
|
-
--spacing-8: 2rem;
|
|
94
|
-
--spacing-9: 2.25rem;
|
|
95
|
-
--spacing-10: 2.5rem;
|
|
96
|
-
--spacing-11: 2.75rem;
|
|
97
|
-
--spacing-12: 3rem;
|
|
98
|
-
--spacing-13: 3.25rem;
|
|
99
|
-
--spacing-14: 3.5rem;
|
|
100
|
-
--spacing-16: 4rem;
|
|
101
|
-
--spacing-20: 5rem;
|
|
102
|
-
--spacing-24: 6rem;
|
|
103
|
-
--spacing-28: 7rem;
|
|
104
|
-
--spacing-32: 8rem;
|
|
105
|
-
--spacing-36: 9rem;
|
|
106
|
-
--spacing-40: 10rem;
|
|
107
|
-
--spacing-44: 11rem;
|
|
108
|
-
--spacing-48: 12rem;
|
|
109
|
-
--spacing-52: 13rem;
|
|
110
|
-
--spacing-56: 14rem;
|
|
111
|
-
--spacing-60: 15rem;
|
|
112
|
-
--spacing-64: 16rem;
|
|
113
|
-
--spacing-72: 18rem;
|
|
114
|
-
--spacing-80: 20rem;
|
|
115
|
-
--spacing-96: 24rem;
|
|
97
|
+
--spacing-0\.5: 0.125rem;
|
|
98
|
+
--spacing-1: 0.25rem;
|
|
99
|
+
--spacing-1\.5: 0.375rem;
|
|
100
|
+
--spacing-2: 0.5rem;
|
|
101
|
+
--spacing-2\.5: 0.625rem;
|
|
102
|
+
--spacing-3: 0.75rem;
|
|
103
|
+
--spacing-3\.5: 0.875rem;
|
|
104
|
+
--spacing-4: 1rem;
|
|
105
|
+
--spacing-5: 1.25rem;
|
|
106
|
+
--spacing-6: 1.5rem;
|
|
107
|
+
--spacing-7: 1.75rem;
|
|
108
|
+
--spacing-8: 2rem;
|
|
109
|
+
--spacing-9: 2.25rem;
|
|
110
|
+
--spacing-10: 2.5rem;
|
|
111
|
+
--spacing-11: 2.75rem;
|
|
112
|
+
--spacing-12: 3rem;
|
|
113
|
+
--spacing-13: 3.25rem;
|
|
114
|
+
--spacing-14: 3.5rem;
|
|
115
|
+
--spacing-16: 4rem;
|
|
116
|
+
--spacing-20: 5rem;
|
|
117
|
+
--spacing-24: 6rem;
|
|
118
|
+
--spacing-28: 7rem;
|
|
119
|
+
--spacing-32: 8rem;
|
|
120
|
+
--spacing-36: 9rem;
|
|
121
|
+
--spacing-40: 10rem;
|
|
122
|
+
--spacing-44: 11rem;
|
|
123
|
+
--spacing-48: 12rem;
|
|
124
|
+
--spacing-52: 13rem;
|
|
125
|
+
--spacing-56: 14rem;
|
|
126
|
+
--spacing-60: 15rem;
|
|
127
|
+
--spacing-64: 16rem;
|
|
128
|
+
--spacing-72: 18rem;
|
|
129
|
+
--spacing-80: 20rem;
|
|
130
|
+
--spacing-96: 24rem;
|
|
116
131
|
|
|
117
|
-
/* Gap utilities
|
|
118
|
-
--gap-9: 2.25rem;
|
|
119
|
-
--gap-10: 2.5rem;
|
|
120
|
-
--gap-11: 2.75rem;
|
|
121
|
-
--gap-12: 3rem;
|
|
122
|
-
--gap-14: 3.5rem;
|
|
123
|
-
--gap-16: 4rem;
|
|
124
|
-
--gap-20: 5rem;
|
|
125
|
-
--gap-24: 6rem;
|
|
132
|
+
/* Gap utilities */
|
|
133
|
+
--gap-9: 2.25rem;
|
|
134
|
+
--gap-10: 2.5rem;
|
|
135
|
+
--gap-11: 2.75rem;
|
|
136
|
+
--gap-12: 3rem;
|
|
137
|
+
--gap-14: 3.5rem;
|
|
138
|
+
--gap-16: 4rem;
|
|
139
|
+
--gap-20: 5rem;
|
|
140
|
+
--gap-24: 6rem;
|
|
126
141
|
|
|
127
|
-
/* Blur
|
|
142
|
+
/* Blur (backdrop-blur-*) */
|
|
128
143
|
--blur-xs: 4px;
|
|
129
144
|
--blur-sm: 8px;
|
|
130
145
|
--blur-md: 12px;
|
|
@@ -136,7 +151,7 @@
|
|
|
136
151
|
/* Custom width utilities */
|
|
137
152
|
--width-dropdown: 500px;
|
|
138
153
|
|
|
139
|
-
/* Z-index scale
|
|
154
|
+
/* Z-index scale */
|
|
140
155
|
--z-index-0: 0;
|
|
141
156
|
--z-index-10: 10;
|
|
142
157
|
--z-index-20: 20;
|
|
@@ -153,7 +168,7 @@
|
|
|
153
168
|
--z-index-9999: 9999;
|
|
154
169
|
--z-index-auto: auto;
|
|
155
170
|
|
|
156
|
-
/*
|
|
171
|
+
/* Floating animations */
|
|
157
172
|
--animate-float: float 20s ease-in-out infinite;
|
|
158
173
|
--animate-float-slow: float 25s ease-in-out infinite;
|
|
159
174
|
--animate-float-x: float-x 18s ease-in-out infinite;
|
package/src/styles/utilities.css
CHANGED
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
position: absolute;
|
|
55
55
|
width: 2.25rem;
|
|
56
56
|
height: 2.25rem;
|
|
57
|
-
background-color:
|
|
57
|
+
background-color: var(--muted);
|
|
58
58
|
border-radius: 9999px;
|
|
59
59
|
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
|
|
60
60
|
font-weight: 500;
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
align-items: center;
|
|
65
65
|
justify-content: center;
|
|
66
66
|
text-indent: -1px;
|
|
67
|
-
border: 4px solid
|
|
67
|
+
border: 4px solid var(--background);
|
|
68
68
|
content: counter(step);
|
|
69
69
|
}
|
|
70
70
|
|
|
@@ -213,16 +213,54 @@
|
|
|
213
213
|
* Requires `isolation: isolate` and a background image/color on a parent.
|
|
214
214
|
*/
|
|
215
215
|
|
|
216
|
-
|
|
216
|
+
/**
|
|
217
|
+
* macOS Vibrancy / Liquid Glass — strong blur + high saturation over a
|
|
218
|
+
* 72% translucent base. The blur+saturate combo is the Apple-standard
|
|
219
|
+
* recipe (Sequoia / Tahoe 26 use the same values). 72% opacity keeps
|
|
220
|
+
* enough background bleed-through to read content underneath.
|
|
221
|
+
*
|
|
222
|
+
* Use on: sidebars, popovers, sheet headers, command palette overlays.
|
|
223
|
+
* Requires: container parent must be non-transparent (otherwise nothing
|
|
224
|
+
* to blur). Avoid stacking multiple `.glass-macos` — blur compounds.
|
|
225
|
+
*/
|
|
217
226
|
.glass-macos {
|
|
218
227
|
backdrop-filter: blur(20px) saturate(180%);
|
|
219
228
|
-webkit-backdrop-filter: blur(20px) saturate(180%);
|
|
220
|
-
background-color:
|
|
229
|
+
background-color: color-mix(in oklab, var(--background) 72%, transparent);
|
|
221
230
|
}
|
|
222
231
|
|
|
223
|
-
|
|
232
|
+
/**
|
|
233
|
+
* Windows 11 Mica / Acrylic — wider/softer blur over an 85% base.
|
|
234
|
+
* Mica = wallpaper-tinted material; Acrylic = stronger blur on top.
|
|
235
|
+
* This recipe targets Acrylic (the closer-to-Apple flavour).
|
|
236
|
+
*/
|
|
224
237
|
.glass-win11 {
|
|
225
238
|
backdrop-filter: blur(60px) saturate(125%);
|
|
226
239
|
-webkit-backdrop-filter: blur(60px) saturate(125%);
|
|
227
|
-
background-color:
|
|
240
|
+
background-color: color-mix(in oklab, var(--background) 85%, transparent);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/**
|
|
244
|
+
* Liquid Glass variants — Apple's macOS 26 / iOS 26 design language.
|
|
245
|
+
* Thinner blur, brighter base, subtle inner highlight via box-shadow.
|
|
246
|
+
* Designed for floating chrome (Dock, navbar, FAB chips).
|
|
247
|
+
*/
|
|
248
|
+
.glass-liquid {
|
|
249
|
+
backdrop-filter: blur(12px) saturate(180%);
|
|
250
|
+
-webkit-backdrop-filter: blur(12px) saturate(180%);
|
|
251
|
+
background-color: color-mix(in oklab, var(--card) 60%, transparent);
|
|
252
|
+
border: 1px solid color-mix(in oklab, var(--foreground) 8%, transparent);
|
|
253
|
+
box-shadow:
|
|
254
|
+
0 8px 32px color-mix(in oklab, var(--foreground) 12%, transparent),
|
|
255
|
+
inset 0 1px 0 color-mix(in oklab, var(--foreground) 6%, transparent);
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
* Lighter glass for headers / status bars where strong blur would be
|
|
260
|
+
* too heavy. 8px blur is the macOS NavBar / TitleBar default.
|
|
261
|
+
*/
|
|
262
|
+
.glass-header {
|
|
263
|
+
backdrop-filter: blur(8px) saturate(160%);
|
|
264
|
+
-webkit-backdrop-filter: blur(8px) saturate(160%);
|
|
265
|
+
background-color: color-mix(in oklab, var(--background) 80%, transparent);
|
|
228
266
|
}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import type { ThemePreset } from './types';
|
|
2
|
-
|
|
3
|
-
export const catppuccinPreset: ThemePreset = {
|
|
4
|
-
light: {
|
|
5
|
-
background: '220 23% 95%', foreground: '234 16% 35%',
|
|
6
|
-
card: '220 23% 97%', 'card-foreground': '234 16% 35%',
|
|
7
|
-
popover: '220 23% 97%', 'popover-foreground': '234 16% 35%',
|
|
8
|
-
primary: '217 92% 66%', 'primary-foreground': '0 0% 9%',
|
|
9
|
-
secondary: '267 84% 71%', 'secondary-foreground': '0 0% 9%',
|
|
10
|
-
muted: '220 23% 92%', 'muted-foreground': '234 16% 65%',
|
|
11
|
-
accent: '189 71% 63%', 'accent-foreground': '234 16% 35%',
|
|
12
|
-
destructive: '343 81% 65%', 'destructive-foreground': '0 0% 98%',
|
|
13
|
-
border: '220 23% 85%', input: '220 23% 85%', ring: '217 92% 66%',
|
|
14
|
-
radius: '0.75rem',
|
|
15
|
-
'sidebar-background': '220 23% 93%', 'sidebar-foreground': '234 16% 35%',
|
|
16
|
-
'sidebar-primary': '217 92% 66%', 'sidebar-primary-foreground': '0 0% 9%',
|
|
17
|
-
'sidebar-accent': '220 23% 91%', 'sidebar-accent-foreground': '234 16% 35%',
|
|
18
|
-
'sidebar-border': '220 23% 85%', 'sidebar-ring': '217 92% 66%',
|
|
19
|
-
'chart-1': '217 92% 66%', 'chart-2': '115 54% 66%', 'chart-3': '262 83% 58%', 'chart-4': '41 86% 73%', 'chart-5': '343 81% 65%',
|
|
20
|
-
},
|
|
21
|
-
dark: {
|
|
22
|
-
background: '240 21% 15%', foreground: '226 64% 88%',
|
|
23
|
-
card: '240 21% 19%', 'card-foreground': '226 64% 88%',
|
|
24
|
-
popover: '240 21% 19%', 'popover-foreground': '226 64% 88%',
|
|
25
|
-
primary: '217 92% 76%', 'primary-foreground': '0 0% 9%',
|
|
26
|
-
secondary: '267 84% 81%', 'secondary-foreground': '0 0% 9%',
|
|
27
|
-
muted: '240 21% 21%', 'muted-foreground': '226 64% 68%',
|
|
28
|
-
accent: '189 71% 73%', 'accent-foreground': '226 64% 88%',
|
|
29
|
-
destructive: '343 81% 75%', 'destructive-foreground': '0 0% 98%',
|
|
30
|
-
border: '240 21% 28%', input: '240 21% 28%', ring: '217 92% 76%',
|
|
31
|
-
radius: '0.75rem',
|
|
32
|
-
'sidebar-background': '240 21% 13%', 'sidebar-foreground': '226 64% 88%',
|
|
33
|
-
'sidebar-primary': '217 92% 76%', 'sidebar-primary-foreground': '0 0% 9%',
|
|
34
|
-
'sidebar-accent': '240 21% 11%', 'sidebar-accent-foreground': '226 64% 88%',
|
|
35
|
-
'sidebar-border': '240 21% 28%', 'sidebar-ring': '217 92% 76%',
|
|
36
|
-
'chart-1': '217 92% 76%', 'chart-2': '115 54% 76%', 'chart-3': '262 83% 58%', 'chart-4': '41 86% 83%', 'chart-5': '343 81% 75%',
|
|
37
|
-
},
|
|
38
|
-
};
|