@djangocfg/ui-core 2.1.393 → 2.1.395

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 (34) hide show
  1. package/README.md +14 -0
  2. package/package.json +4 -4
  3. package/src/components/effects/GlowBackground.tsx +1 -1
  4. package/src/components/navigation/sidebar/sidebar.tsx +4 -4
  5. package/src/hooks/index.ts +1 -0
  6. package/src/hooks/tabs/activeTabStore.ts +167 -0
  7. package/src/hooks/tabs/index.ts +17 -0
  8. package/src/hooks/tabs/tabId.ts +44 -0
  9. package/src/hooks/tabs/useActiveTab.ts +64 -0
  10. package/src/styles/README.md +149 -123
  11. package/src/styles/base.css +3 -3
  12. package/src/styles/presets/presets.ts +0 -9
  13. package/src/styles/presets/themes/dense.ts +10 -10
  14. package/src/styles/presets/themes/django-cfg.ts +13 -13
  15. package/src/styles/presets/themes/high-contrast.ts +11 -11
  16. package/src/styles/presets/themes/index.ts +0 -18
  17. package/src/styles/presets/themes/ios.ts +64 -64
  18. package/src/styles/presets/themes/macos.ts +64 -64
  19. package/src/styles/presets/themes/soft.ts +25 -25
  20. package/src/styles/presets/themes/windows.ts +64 -64
  21. package/src/styles/presets/types.ts +26 -12
  22. package/src/styles/theme/dark.css +47 -53
  23. package/src/styles/theme/light.css +47 -53
  24. package/src/styles/theme/tokens.css +128 -113
  25. package/src/styles/utilities.css +44 -6
  26. package/src/styles/presets/themes/catppuccin.ts +0 -38
  27. package/src/styles/presets/themes/dracula.ts +0 -38
  28. package/src/styles/presets/themes/github.ts +0 -38
  29. package/src/styles/presets/themes/gruvbox.ts +0 -38
  30. package/src/styles/presets/themes/material.ts +0 -38
  31. package/src/styles/presets/themes/nord.ts +0 -38
  32. package/src/styles/presets/themes/one-dark.ts +0 -38
  33. package/src/styles/presets/themes/solarized.ts +0 -38
  34. 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, hsl(var(--background)), hsl(var(--background) / 0.8));
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, hsl(var(--background)), hsl(var(--background) / 0.8));
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
- * Defines custom properties that Tailwind utilities can use
5
- * @theme directive registers these for Tailwind v4
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
- /* Default breakpoints - mobile-first responsive design */
10
- --breakpoint-sm: 40rem; /* 640px */
11
- --breakpoint-md: 48rem; /* 768px */
12
- --breakpoint-lg: 64rem; /* 1024px */
13
- --breakpoint-xl: 80rem; /* 1280px */
14
- --breakpoint-2xl: 96rem; /* 1536px */
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
- /* Register semantic color tokens for Tailwind utilities */
17
- --color-background: hsl(var(--background));
18
- --color-foreground: hsl(var(--foreground));
19
- --color-card: hsl(var(--card));
20
- --color-card-foreground: hsl(var(--card-foreground));
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: hsl(var(--success));
45
- --color-success-background: hsl(var(--success-background));
46
- --color-success-foreground: hsl(var(--success-foreground));
47
- --color-success-border: hsl(var(--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: hsl(var(--destructive-background));
50
- --color-destructive-border: hsl(var(--destructive-border));
54
+ --color-destructive-background: var(--destructive-background);
55
+ --color-destructive-border: var(--destructive-border);
51
56
 
52
- --color-info: hsl(var(--info));
53
- --color-info-background: hsl(var(--info-background));
54
- --color-info-foreground: hsl(var(--info-foreground));
55
- --color-info-border: hsl(var(--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 tokens — single source of truth for any "this is
58
- * code, not prose" panel (markdown fences, inline code, terminal
59
- * blocks). See light.css / dark.css for the per-theme values. */
60
- --color-code: hsl(var(--code));
61
- --color-code-foreground: hsl(var(--code-foreground));
62
- --color-code-border: hsl(var(--code-border));
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 colors */
67
- --color-sidebar-background: hsl(var(--sidebar-background));
68
- /* Shorthand used by shadcn sidebar (`bg-sidebar` / `text-sidebar`) — same surface as sidebar-background */
69
- --color-sidebar: hsl(var(--sidebar-background));
70
- --color-sidebar-foreground: hsl(var(--sidebar-foreground));
71
- --color-sidebar-primary: hsl(var(--sidebar-primary));
72
- --color-sidebar-primary-foreground: hsl(var(--sidebar-primary-foreground));
73
- --color-sidebar-accent: hsl(var(--sidebar-accent));
74
- --color-sidebar-accent-foreground: hsl(var(--sidebar-accent-foreground));
75
- --color-sidebar-border: hsl(var(--sidebar-border));
76
- --color-sidebar-ring: hsl(var(--sidebar-ring));
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 - required for all spacing utilities to work */
79
- --spacing: 0.25rem; /* Base unit: 4px */
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; /* 2px */
83
- --spacing-1: 0.25rem; /* 4px */
84
- --spacing-1\.5: 0.375rem; /* 6px */
85
- --spacing-2: 0.5rem; /* 8px */
86
- --spacing-2\.5: 0.625rem; /* 10px */
87
- --spacing-3: 0.75rem; /* 12px */
88
- --spacing-3\.5: 0.875rem; /* 14px */
89
- --spacing-4: 1rem; /* 16px */
90
- --spacing-5: 1.25rem; /* 20px */
91
- --spacing-6: 1.5rem; /* 24px */
92
- --spacing-7: 1.75rem; /* 28px */
93
- --spacing-8: 2rem; /* 32px */
94
- --spacing-9: 2.25rem; /* 36px */
95
- --spacing-10: 2.5rem; /* 40px */
96
- --spacing-11: 2.75rem; /* 44px */
97
- --spacing-12: 3rem; /* 48px */
98
- --spacing-13: 3.25rem; /* 52px */
99
- --spacing-14: 3.5rem; /* 56px */
100
- --spacing-16: 4rem; /* 64px */
101
- --spacing-20: 5rem; /* 80px */
102
- --spacing-24: 6rem; /* 96px */
103
- --spacing-28: 7rem; /* 112px */
104
- --spacing-32: 8rem; /* 128px */
105
- --spacing-36: 9rem; /* 144px */
106
- --spacing-40: 10rem; /* 160px */
107
- --spacing-44: 11rem; /* 176px */
108
- --spacing-48: 12rem; /* 192px */
109
- --spacing-52: 13rem; /* 208px */
110
- --spacing-56: 14rem; /* 224px */
111
- --spacing-60: 15rem; /* 240px */
112
- --spacing-64: 16rem; /* 256px */
113
- --spacing-72: 18rem; /* 288px */
114
- --spacing-80: 20rem; /* 320px */
115
- --spacing-96: 24rem; /* 384px */
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 - required for gap-* classes to work */
118
- --gap-9: 2.25rem; /* 36px */
119
- --gap-10: 2.5rem; /* 40px */
120
- --gap-11: 2.75rem; /* 44px */
121
- --gap-12: 3rem; /* 48px */
122
- --gap-14: 3.5rem; /* 56px */
123
- --gap-16: 4rem; /* 64px */
124
- --gap-20: 5rem; /* 80px */
125
- --gap-24: 6rem; /* 96px */
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 utilities - required for backdrop-blur-* classes to work */
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 for stacking context */
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
- /* Custom animations for smooth floating effects */
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;
@@ -54,7 +54,7 @@
54
54
  position: absolute;
55
55
  width: 2.25rem;
56
56
  height: 2.25rem;
57
- background-color: hsl(var(--muted));
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 hsl(var(--background));
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
- /* macOS Vibrancy — strong blur, 72% opacity, high saturation */
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: hsl(var(--background) / 0.72);
229
+ background-color: color-mix(in oklab, var(--background) 72%, transparent);
221
230
  }
222
231
 
223
- /* Windows 11 Mica / Acrylic — deeper blur, softer opacity */
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: hsl(var(--background) / 0.85);
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
- };