@psnext/design-system 1.0.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 (81) hide show
  1. package/README.md +126 -0
  2. package/dist/AiChatPanel.cjs +1603 -0
  3. package/dist/AiChatPanel.cjs.map +1 -0
  4. package/dist/AiChatPanel.js +1526 -0
  5. package/dist/AiChatPanel.js.map +1 -0
  6. package/dist/BodhiLogo.cjs +240 -0
  7. package/dist/BodhiLogo.cjs.map +1 -0
  8. package/dist/BodhiLogo.js +194 -0
  9. package/dist/BodhiLogo.js.map +1 -0
  10. package/dist/Skeleton.cjs +19 -0
  11. package/dist/Skeleton.cjs.map +1 -0
  12. package/dist/Skeleton.js +14 -0
  13. package/dist/Skeleton.js.map +1 -0
  14. package/dist/SustainLogo.cjs +415 -0
  15. package/dist/SustainLogo.cjs.map +1 -0
  16. package/dist/SustainLogo.js +378 -0
  17. package/dist/SustainLogo.js.map +1 -0
  18. package/dist/contexts/index.cjs +60 -0
  19. package/dist/contexts/index.cjs.map +1 -0
  20. package/dist/contexts/index.d.cts +23 -0
  21. package/dist/contexts/index.d.cts.map +1 -0
  22. package/dist/contexts/index.d.ts +23 -0
  23. package/dist/contexts/index.d.ts.map +1 -0
  24. package/dist/contexts/index.js +58 -0
  25. package/dist/contexts/index.js.map +1 -0
  26. package/dist/index.cjs +273 -0
  27. package/dist/index.d.cts +1440 -0
  28. package/dist/index.d.cts.map +1 -0
  29. package/dist/index.d.ts +1440 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +7 -0
  32. package/dist/index2.d.cts +16 -0
  33. package/dist/index2.d.cts.map +1 -0
  34. package/dist/index2.d.ts +16 -0
  35. package/dist/index2.d.ts.map +1 -0
  36. package/dist/layouts/index.cjs +13 -0
  37. package/dist/layouts/index.d.cts +133 -0
  38. package/dist/layouts/index.d.cts.map +1 -0
  39. package/dist/layouts/index.d.ts +133 -0
  40. package/dist/layouts/index.d.ts.map +1 -0
  41. package/dist/layouts/index.js +2 -0
  42. package/dist/layouts.cjs +3245 -0
  43. package/dist/layouts.cjs.map +1 -0
  44. package/dist/layouts.js +3180 -0
  45. package/dist/layouts.js.map +1 -0
  46. package/dist/patterns/index.cjs +7375 -0
  47. package/dist/patterns/index.cjs.map +1 -0
  48. package/dist/patterns/index.d.cts +418 -0
  49. package/dist/patterns/index.d.cts.map +1 -0
  50. package/dist/patterns/index.d.ts +418 -0
  51. package/dist/patterns/index.d.ts.map +1 -0
  52. package/dist/patterns/index.js +7344 -0
  53. package/dist/patterns/index.js.map +1 -0
  54. package/dist/primitives/index.cjs +256 -0
  55. package/dist/primitives/index.d.cts +2 -0
  56. package/dist/primitives/index.d.ts +2 -0
  57. package/dist/primitives/index.js +5 -0
  58. package/dist/primitives.cjs +4292 -0
  59. package/dist/primitives.cjs.map +1 -0
  60. package/dist/primitives.js +2807 -0
  61. package/dist/primitives.js.map +1 -0
  62. package/dist/styles/base/colors.css +300 -0
  63. package/dist/styles/base/component-tokens.css +240 -0
  64. package/dist/styles/base/elevation.css +7 -0
  65. package/dist/styles/base/fonts.css +14 -0
  66. package/dist/styles/base/global.css +305 -0
  67. package/dist/styles/base/radius.css +22 -0
  68. package/dist/styles/base/semantic-aliases.css +53 -0
  69. package/dist/styles/base/spacing.css +33 -0
  70. package/dist/styles/base/typography.css +48 -0
  71. package/dist/styles/generated/bodhi-vars.css +34 -0
  72. package/dist/styles/generated/dark.css +87 -0
  73. package/dist/styles/generated/light.css +87 -0
  74. package/dist/styles/generated/slingshot-vars.css +34 -0
  75. package/dist/styles/generated/sustain-vars.css +34 -0
  76. package/dist/styles/index.css +32 -0
  77. package/dist/styles/theme.css +65 -0
  78. package/dist/styles/themes/bodhi.css +166 -0
  79. package/dist/styles/themes/slingshot.css +144 -0
  80. package/dist/styles/themes/sustain.css +130 -0
  81. package/package.json +131 -0
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Do not edit directly, this file was auto-generated.
3
+ */
4
+
5
+ .theme-slingshot {
6
+ --brand-neutrals-50: #F9FAFB;
7
+ --brand-neutrals-100: #F3F4F6;
8
+ --brand-neutrals-200: #E5E7EB;
9
+ --brand-neutrals-300: #D1D5DB;
10
+ --brand-neutrals-400: #9CA3AF;
11
+ --brand-neutrals-500: #6B7280;
12
+ --brand-neutrals-600: #4B5563;
13
+ --brand-neutrals-700: #374151;
14
+ --brand-neutrals-800: #1F2937;
15
+ --brand-neutrals-900: #111827;
16
+ --brand-neutrals-950: #030712;
17
+ --brand-shades-50: #FEF2F2;
18
+ --brand-shades-100: #FFE2E2;
19
+ --brand-shades-200: #FECACA;
20
+ --brand-shades-300: #FCA5A5;
21
+ --brand-shades-400: #F87171;
22
+ --brand-shades-500: #EF4444;
23
+ --brand-shades-600: #DC2626;
24
+ --brand-shades-700: #B91C1C;
25
+ --brand-shades-800: #991B1B;
26
+ --brand-shades-900: #7F1D1D;
27
+ --brand-shades-950: #450A0A;
28
+ --brand-combinations-1-brand: #EF4444;
29
+ --brand-combinations-1-brand-foreground: #FFFFFF;
30
+ --brand-combinations-2-brand: #FECACA;
31
+ --brand-combinations-2-brand-foreground: #991B1B;
32
+ --brand-combinations-3-brand: #450A0A;
33
+ --brand-combinations-3-brand-foreground: #FCA5A5;
34
+ }
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Do not edit directly, this file was auto-generated.
3
+ */
4
+
5
+ .theme-sustain {
6
+ --brand-neutrals-50: #F9FAFB;
7
+ --brand-neutrals-100: #F3F4F6;
8
+ --brand-neutrals-200: #E5E7EB;
9
+ --brand-neutrals-300: #D1D5DB;
10
+ --brand-neutrals-400: #9CA3AF;
11
+ --brand-neutrals-500: #6B7280;
12
+ --brand-neutrals-600: #4B5563;
13
+ --brand-neutrals-700: #374151;
14
+ --brand-neutrals-800: #1F2937;
15
+ --brand-neutrals-900: #111827;
16
+ --brand-neutrals-950: #030712;
17
+ --brand-shades-50: #F5F3FF;
18
+ --brand-shades-100: #EDE9FE;
19
+ --brand-shades-200: #DDD6FE;
20
+ --brand-shades-300: #C4B5FD;
21
+ --brand-shades-400: #A78BFA;
22
+ --brand-shades-500: #EF4444;
23
+ --brand-shades-600: #7C3AED;
24
+ --brand-shades-700: #6D28D9;
25
+ --brand-shades-800: #5B21B6;
26
+ --brand-shades-900: #4C1D95;
27
+ --brand-shades-950: #2E1065;
28
+ --brand-combinations-1-brand: #EF4444;
29
+ --brand-combinations-1-brand-foreground: #FFFFFF;
30
+ --brand-combinations-2-brand: #DDD6FE;
31
+ --brand-combinations-2-brand-foreground: #5B21B6;
32
+ --brand-combinations-3-brand: #2E1065;
33
+ --brand-combinations-3-brand-foreground: #C4B5FD;
34
+ }
@@ -0,0 +1,32 @@
1
+ /* ============================================================
2
+ @psnext/design-system — main CSS entry
3
+ Import order matters: tokens before aliases before components.
4
+
5
+ Brand themes are NOT imported here — import them separately:
6
+ @import "@psnext/design-system/styles/themes/slingshot";
7
+ @import "@psnext/design-system/styles/themes/bodhi";
8
+ @import "@psnext/design-system/styles/themes/sustain";
9
+ ============================================================ */
10
+
11
+ /* 1. Generated color tokens (requires `pnpm tokens:build` first) */
12
+ @import "./generated/light.css";
13
+ @import "./generated/dark.css";
14
+
15
+ /* 2. Semantic aliases — maps --bg-* / --content-* to --background / --foreground etc. */
16
+ @import "./base/semantic-aliases.css";
17
+
18
+ /* 3. Raw color scale — full palette referenced by component tokens */
19
+ @import "./base/colors.css";
20
+
21
+ /* 4. Base tokens */
22
+ @import "./base/fonts.css";
23
+ @import "./base/typography.css";
24
+ @import "./base/spacing.css";
25
+ @import "./base/radius.css";
26
+ @import "./base/elevation.css";
27
+
28
+ /* 5. Component tokens — badges, toasts, tabs, glass, etc. */
29
+ @import "./base/component-tokens.css";
30
+
31
+ /* 6. Base reset + keyframes */
32
+ @import "./base/global.css";
@@ -0,0 +1,65 @@
1
+ /* ============================================================
2
+ @psnext/design-system — Tailwind v4 theme bridge
3
+ Maps design-system token CSS vars to Tailwind utility names so
4
+ semantic utilities (bg-primary, text-muted-foreground, ring-ring,
5
+ border-input, …) resolve to our tokens and react to theme/brand.
6
+
7
+ Usage in a consuming app (or Storybook):
8
+ @import "tailwindcss";
9
+ @import "@psnext/design-system/styles"; // token vars
10
+ @import "@psnext/design-system/styles/theme"; // this bridge
11
+ @source "../node_modules/@psnext/design-system"; // scan DS classes
12
+
13
+ `inline` is required because the values reference other CSS vars
14
+ that are reassigned at runtime by theme/brand switching.
15
+ ============================================================ */
16
+
17
+ @theme inline {
18
+ /* ── Surfaces ─────────────────────────────────────────── */
19
+ --color-background: var(--background);
20
+ --color-foreground: var(--foreground);
21
+ --color-card: var(--card);
22
+ --color-card-foreground: var(--card-foreground);
23
+ --color-popover: var(--popover);
24
+ --color-popover-foreground: var(--popover-foreground);
25
+
26
+ /* ── Interactive ──────────────────────────────────────── */
27
+ --color-primary: var(--primary);
28
+ --color-primary-foreground: var(--primary-foreground);
29
+ --color-secondary: var(--secondary);
30
+ --color-secondary-foreground: var(--secondary-foreground);
31
+ --color-muted: var(--muted);
32
+ --color-muted-foreground: var(--muted-foreground);
33
+ --color-accent: var(--accent);
34
+ --color-accent-foreground: var(--accent-foreground);
35
+
36
+ /* ── States ───────────────────────────────────────────── */
37
+ --color-destructive: var(--destructive);
38
+ --color-destructive-foreground: var(--destructive-foreground);
39
+
40
+ /* ── UI structure ─────────────────────────────────────── */
41
+ --color-border: var(--border);
42
+ --color-input: var(--input);
43
+ --color-ring: var(--ring);
44
+
45
+ /* ── Sidebar / navigation ─────────────────────────────── */
46
+ --color-sidebar: var(--sidebar);
47
+ --color-sidebar-foreground: var(--sidebar-foreground);
48
+ --color-sidebar-primary: var(--sidebar-primary);
49
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
50
+ --color-sidebar-accent: var(--sidebar-accent);
51
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
52
+ --color-sidebar-border: var(--sidebar-border);
53
+ --color-sidebar-ring: var(--sidebar-ring);
54
+
55
+ /* ── Radius (derived from --radius token) ─────────────── */
56
+ --radius-sm: var(--rounded-sm);
57
+ --radius-md: var(--rounded-md);
58
+ --radius-lg: var(--rounded-lg);
59
+ --radius-xl: var(--rounded-xl);
60
+
61
+ /* ── Animations (generate animate-* utilities; keyframes in global.css) ── */
62
+ --animate-accordion-down: accordion-down 0.2s ease-out;
63
+ --animate-accordion-up: accordion-up 0.2s ease-out;
64
+ --animate-caret-blink: caret-blink 1.25s ease-out infinite;
65
+ }
@@ -0,0 +1,166 @@
1
+ /* Bodhi Theme — Blue brand */
2
+
3
+ .theme-bodhi {
4
+ --bodhi-primary: var(--color-blue-950);
5
+ --bodhi-secondary: var(--color-blue-300);
6
+ --bodhi-accent: var(--color-blue-950);
7
+ --bodhi-surface: var(--color-slate-50);
8
+ --bodhi-background: var(--color-white);
9
+
10
+ --background: var(--bodhi-background);
11
+ --foreground: var(--color-gray-950);
12
+ --card: var(--color-white);
13
+ --card-foreground: var(--color-gray-950);
14
+ --popover: var(--color-gray-800);
15
+ --popover-foreground: var(--color-white);
16
+ --primary: var(--color-gray-950);
17
+ --primary-foreground: var(--color-gray-50);
18
+ --secondary: var(--color-gray-100);
19
+ --secondary-foreground: var(--color-gray-900);
20
+ --muted: var(--color-gray-100);
21
+ --muted-foreground: var(--color-gray-500);
22
+ --accent: var(--color-gray-100);
23
+ --accent-foreground: var(--color-gray-900);
24
+ --destructive: var(--color-red-600);
25
+ --destructive-foreground: var(--color-white);
26
+ --border: var(--color-gray-200);
27
+ --input: var(--color-white);
28
+ --input-background: var(--color-white);
29
+ --ring: var(--color-gray-300);
30
+
31
+ /* Glass morphism — slate tint */
32
+ --glass-heavy: rgba(248, 250, 252, 0.8);
33
+ --glass-strong: rgba(248, 250, 252, 0.8);
34
+ --glass-subtle: rgba(248, 250, 252, 0.3);
35
+ --glass-light: rgba(248, 250, 252, 0.5);
36
+ --glass-medium: rgba(226, 232, 240, 0.5);
37
+
38
+ --nav-active-bg: var(--color-white);
39
+ --tile-bg: var(--color-white);
40
+ --tile-hover-bg: rgba(255, 255, 255, 0.4);
41
+ --tile-button-bg: var(--color-white);
42
+ --tile-button-hover-bg: var(--color-gray-900);
43
+ --tile-button-hover-text: var(--color-gray-50);
44
+
45
+ /* Gradient — Bodhi light (blue tint) */
46
+ --gradient-stop-0: var(--color-slate-200);
47
+ --gradient-stop-1: var(--bodhi-secondary);
48
+ --gradient-stop-2: var(--color-slate-200);
49
+ --radial-gradient-bg: radial-gradient(
50
+ circle at 90% 10%,
51
+ var(--gradient-stop-0) 0%,
52
+ var(--gradient-stop-1) 25%,
53
+ var(--gradient-stop-2) 60%
54
+ );
55
+
56
+ /* Sidebar */
57
+ --sidebar: var(--color-gray-50);
58
+ --sidebar-foreground: var(--color-slate-600);
59
+ --sidebar-primary: var(--bodhi-primary);
60
+ --sidebar-primary-foreground: var(--color-white);
61
+ --sidebar-accent: var(--color-slate-200);
62
+ --sidebar-accent-foreground: var(--color-slate-800);
63
+ --sidebar-border: var(--color-slate-200);
64
+ --sidebar-ring: var(--color-slate-400);
65
+
66
+ /* Logo / icon colors */
67
+ --logo-circle-bg: var(--color-white);
68
+ --logo-icon-red: var(--color-red-500);
69
+ --logo-text-dark: var(--color-gray-950);
70
+
71
+ --slingshot-primary-red: var(--color-red-500);
72
+ --slingshot-accent-white: var(--color-white);
73
+ --slingshot-text-dark: var(--color-gray-950);
74
+
75
+ --sustain-primary-red: var(--color-red-500);
76
+ --sustain-accent-white: var(--color-white);
77
+ --sustain-text-dark: var(--color-gray-950);
78
+ --sustain-circle-bg: var(--color-white);
79
+
80
+ --psai-primary-red: var(--color-red-500);
81
+ --psai-accent-white: var(--color-white);
82
+ --psai-text-dark: var(--color-gray-950);
83
+ }
84
+
85
+ /* Bodhi Theme — Dark Mode */
86
+ html.theme-bodhi.dark {
87
+ --bodhi-primary: var(--color-blue-950);
88
+ --bodhi-secondary: var(--color-blue-950);
89
+ --bodhi-accent: var(--color-blue-300);
90
+ --bodhi-surface: var(--color-slate-800);
91
+ --bodhi-background: var(--color-slate-900);
92
+
93
+ --background: var(--bodhi-background);
94
+ --foreground: var(--color-gray-50);
95
+ --card: var(--color-gray-800);
96
+ --card-foreground: var(--color-gray-50);
97
+ --popover: var(--color-gray-800);
98
+ --popover-foreground: var(--color-gray-50);
99
+ --primary: var(--color-gray-50);
100
+ --primary-foreground: var(--color-gray-900);
101
+ --secondary: var(--color-gray-700);
102
+ --secondary-foreground: var(--color-gray-50);
103
+ --muted: var(--color-gray-700);
104
+ --muted-foreground: var(--color-gray-400);
105
+ --accent: var(--color-gray-700);
106
+ --accent-foreground: var(--color-gray-50);
107
+ --destructive: var(--color-red-600);
108
+ --destructive-foreground: var(--color-gray-50);
109
+ --border: var(--color-gray-700);
110
+ --input: var(--color-gray-700);
111
+ --input-background: rgba(255, 255, 255, 0.05);
112
+ --ring: var(--color-gray-500);
113
+
114
+ /* Glass morphism — slate-800 alpha */
115
+ --glass-heavy: rgba(30, 41, 59, 0.8);
116
+ --glass-strong: rgba(30, 41, 59, 0.8);
117
+ --glass-subtle: rgba(30, 41, 59, 0.3);
118
+ --glass-light: rgba(30, 41, 59, 0.5);
119
+ --glass-medium: rgba(51, 65, 85, 0.5);
120
+
121
+ --nav-active-bg: var(--color-gray-700);
122
+ --tile-bg: var(--color-gray-800);
123
+ --tile-hover-bg: rgba(31, 40, 50, 0.4);
124
+ --tile-button-bg: var(--color-gray-800);
125
+ --tile-button-hover-bg: var(--color-gray-50);
126
+ --tile-button-hover-text: var(--color-gray-900);
127
+
128
+ /* Gradient — Bodhi dark (deep blue) */
129
+ --gradient-stop-0: var(--color-gray-950);
130
+ --gradient-stop-1: var(--color-blue-950);
131
+ --gradient-stop-2: var(--color-gray-950);
132
+ --radial-gradient-bg: radial-gradient(
133
+ circle at 90% 10%,
134
+ var(--gradient-stop-0) 0%,
135
+ var(--gradient-stop-1) 25%,
136
+ var(--gradient-stop-2) 60%
137
+ );
138
+
139
+ /* Sidebar */
140
+ --sidebar: var(--bodhi-surface);
141
+ --sidebar-foreground: var(--color-slate-300);
142
+ --sidebar-primary: var(--bodhi-primary);
143
+ --sidebar-primary-foreground: var(--color-slate-900);
144
+ --sidebar-accent: var(--color-slate-700);
145
+ --sidebar-accent-foreground: var(--color-slate-50);
146
+ --sidebar-border: var(--color-slate-700);
147
+ --sidebar-ring: var(--color-slate-500);
148
+
149
+ /* Logo / icon colors */
150
+ --logo-circle-bg: var(--color-neutral-900);
151
+ --logo-icon-red: var(--color-red-500);
152
+ --logo-text-dark: var(--color-white);
153
+
154
+ --slingshot-primary-red: var(--color-red-500);
155
+ --slingshot-accent-white: var(--color-gray-200);
156
+ --slingshot-text-dark: var(--color-gray-950);
157
+
158
+ --sustain-primary-red: var(--color-red-500);
159
+ --sustain-accent-white: var(--color-gray-200);
160
+ --sustain-text-dark: var(--color-gray-950);
161
+ --sustain-circle-bg: var(--color-neutral-900);
162
+
163
+ --psai-primary-red: var(--color-red-500);
164
+ --psai-accent-white: var(--color-gray-200);
165
+ --psai-text-dark: var(--color-white);
166
+ }
@@ -0,0 +1,144 @@
1
+ /* Slingshot Theme — Red brand */
2
+
3
+ .theme-slingshot {
4
+ --slingshot-primary: var(--color-red-500);
5
+ --slingshot-secondary: var(--color-red-200);
6
+ --slingshot-accent: var(--color-red-500);
7
+ --slingshot-surface: var(--color-gray-50);
8
+ --slingshot-background: var(--color-white);
9
+
10
+ --background: var(--slingshot-surface);
11
+ --foreground: var(--color-gray-950);
12
+ --card: var(--color-white);
13
+ --card-foreground: var(--color-gray-950);
14
+ --popover: var(--color-gray-800);
15
+ --popover-foreground: var(--color-white);
16
+ --primary: var(--color-gray-950);
17
+ --primary-foreground: var(--color-gray-50);
18
+ --secondary: var(--color-gray-100);
19
+ --secondary-foreground: var(--color-gray-900);
20
+ --muted: var(--color-gray-100);
21
+ --muted-foreground: var(--color-gray-500);
22
+ --accent: var(--color-gray-100);
23
+ --accent-foreground: var(--color-gray-900);
24
+ --destructive: var(--color-red-600);
25
+ --destructive-foreground: var(--color-white);
26
+ --border: var(--color-gray-200);
27
+ --input: var(--color-white);
28
+ --input-background: var(--color-white);
29
+ --ring: var(--color-gray-300);
30
+
31
+ /* Glass morphism */
32
+ --glass-heavy: rgba(255, 255, 255, 0.6);
33
+ --glass-strong: rgba(255, 255, 255, 0.6);
34
+ --glass-subtle: rgba(255, 255, 255, 0.2);
35
+ --glass-light: rgba(255, 255, 255, 0.4);
36
+ --glass-medium: rgba(255, 255, 255, 0.5);
37
+
38
+ --nav-active-bg: var(--color-white);
39
+ --tile-bg: var(--color-white);
40
+ --tile-hover-bg: rgba(255, 255, 255, 0.4);
41
+ --tile-button-bg: var(--color-white);
42
+ --tile-button-hover-bg: var(--color-gray-900);
43
+ --tile-button-hover-text: var(--color-gray-50);
44
+
45
+ /* Gradient — Slingshot light (red tint) */
46
+ --gradient-stop-0: var(--color-slate-200);
47
+ --gradient-stop-1: var(--slingshot-secondary);
48
+ --gradient-stop-2: var(--color-slate-200);
49
+ --radial-gradient-bg: radial-gradient(
50
+ circle at 90% 10%,
51
+ var(--gradient-stop-0) 0%,
52
+ var(--gradient-stop-1) 25%,
53
+ var(--gradient-stop-2) 60%
54
+ );
55
+
56
+ /* Sidebar */
57
+ --sidebar: var(--color-gray-50);
58
+ --sidebar-foreground: var(--color-gray-700);
59
+ --sidebar-primary: var(--color-gray-900);
60
+ --sidebar-primary-foreground: var(--color-gray-50);
61
+ --sidebar-accent: var(--color-gray-100);
62
+ --sidebar-accent-foreground: var(--color-gray-900);
63
+ --sidebar-border: var(--color-gray-200);
64
+ --sidebar-ring: var(--color-gray-300);
65
+
66
+ /* Charts */
67
+ --chart-1: var(--slingshot-secondary);
68
+ --chart-2: var(--slingshot-accent);
69
+ --chart-3: var(--color-cyan-900);
70
+ --chart-4: var(--color-amber-400);
71
+ --chart-5: var(--color-amber-500);
72
+ }
73
+
74
+ /* Slingshot Theme — Dark Mode */
75
+ html.theme-slingshot.dark {
76
+ --slingshot-primary: var(--color-red-500);
77
+ --slingshot-secondary: var(--color-orange-500);
78
+ --slingshot-accent: var(--color-red-200);
79
+ --slingshot-surface: var(--color-gray-800);
80
+ --slingshot-background: var(--color-gray-900);
81
+
82
+ --background: var(--slingshot-surface);
83
+ --foreground: var(--color-gray-50);
84
+ --card: var(--color-gray-800);
85
+ --card-foreground: var(--color-gray-50);
86
+ --popover: var(--color-gray-800);
87
+ --popover-foreground: var(--color-gray-50);
88
+ --primary: var(--color-gray-50);
89
+ --primary-foreground: var(--color-gray-900);
90
+ --secondary: var(--color-gray-700);
91
+ --secondary-foreground: var(--color-gray-50);
92
+ --muted: var(--color-gray-700);
93
+ --muted-foreground: var(--color-gray-400);
94
+ --accent: var(--color-gray-700);
95
+ --accent-foreground: var(--color-gray-50);
96
+ --destructive: var(--color-red-600);
97
+ --destructive-foreground: var(--color-gray-50);
98
+ --border: var(--color-gray-700);
99
+ --input: var(--color-gray-700);
100
+ --input-background: rgba(255, 255, 255, 0.05);
101
+ --ring: var(--color-gray-500);
102
+
103
+ /* Glass morphism */
104
+ --glass-heavy: rgba(31, 40, 50, 0.8);
105
+ --glass-strong: rgba(31, 40, 50, 0.8);
106
+ --glass-subtle: rgba(31, 40, 50, 0.3);
107
+ --glass-light: rgba(31, 40, 50, 0.5);
108
+ --glass-medium: rgba(55, 65, 81, 0.5);
109
+
110
+ --nav-active-bg: var(--color-gray-700);
111
+ --tile-bg: var(--color-gray-800);
112
+ --tile-hover-bg: rgba(31, 40, 50, 0.4);
113
+ --tile-button-bg: var(--color-gray-800);
114
+ --tile-button-hover-bg: var(--color-gray-50);
115
+ --tile-button-hover-text: var(--color-gray-900);
116
+
117
+ /* Gradient — Slingshot dark (deep red) */
118
+ --gradient-stop-0: var(--color-gray-950);
119
+ --gradient-stop-1: var(--color-red-950);
120
+ --gradient-stop-2: var(--color-gray-950);
121
+ --radial-gradient-bg: radial-gradient(
122
+ circle at 90% 10%,
123
+ var(--gradient-stop-0) 0%,
124
+ var(--gradient-stop-1) 25%,
125
+ var(--gradient-stop-2) 60%
126
+ );
127
+
128
+ /* Sidebar */
129
+ --sidebar: var(--color-gray-800);
130
+ --sidebar-foreground: var(--color-gray-300);
131
+ --sidebar-primary: var(--color-gray-50);
132
+ --sidebar-primary-foreground: var(--color-gray-900);
133
+ --sidebar-accent: var(--color-gray-700);
134
+ --sidebar-accent-foreground: var(--color-gray-50);
135
+ --sidebar-border: var(--color-gray-700);
136
+ --sidebar-ring: var(--color-gray-500);
137
+
138
+ /* Charts */
139
+ --chart-1: var(--slingshot-secondary);
140
+ --chart-2: var(--slingshot-accent);
141
+ --chart-3: var(--color-cyan-900);
142
+ --chart-4: var(--color-amber-400);
143
+ --chart-5: var(--color-amber-500);
144
+ }
@@ -0,0 +1,130 @@
1
+ /* Sustain Theme — Indigo brand */
2
+
3
+ .theme-sustain {
4
+ --sustain-primary: var(--color-indigo-800);
5
+ --sustain-secondary: var(--color-indigo-300);
6
+ --sustain-accent: var(--color-indigo-800);
7
+ --sustain-surface: var(--color-indigo-50);
8
+ --sustain-background: var(--color-indigo-50);
9
+
10
+ --background: var(--sustain-surface);
11
+ --foreground: var(--color-gray-950);
12
+ --card: var(--color-white);
13
+ --card-foreground: var(--color-gray-950);
14
+ --popover: var(--color-gray-800);
15
+ --popover-foreground: var(--color-white);
16
+ --primary: var(--color-gray-950);
17
+ --primary-foreground: var(--color-gray-50);
18
+ --secondary: var(--color-gray-100);
19
+ --secondary-foreground: var(--color-gray-900);
20
+ --muted: var(--color-gray-100);
21
+ --muted-foreground: var(--color-gray-500);
22
+ --accent: var(--color-gray-100);
23
+ --accent-foreground: var(--color-gray-900);
24
+ --destructive: var(--color-red-600);
25
+ --destructive-foreground: var(--color-white);
26
+ --border: var(--color-gray-200);
27
+ --input: var(--color-white);
28
+ --input-background: var(--color-white);
29
+ --ring: var(--color-gray-300);
30
+
31
+ /* Glass morphism */
32
+ --glass-heavy: rgba(255, 255, 255, 0.6);
33
+ --glass-strong: rgba(255, 255, 255, 0.6);
34
+ --glass-subtle: rgba(255, 255, 255, 0.2);
35
+ --glass-light: rgba(255, 255, 255, 0.4);
36
+ --glass-medium: rgba(255, 255, 255, 0.5);
37
+
38
+ --nav-active-bg: var(--color-white);
39
+ --tile-bg: var(--color-white);
40
+ --tile-hover-bg: rgba(255, 255, 255, 0.4);
41
+ --tile-button-bg: var(--color-white);
42
+ --tile-button-hover-bg: var(--color-gray-900);
43
+ --tile-button-hover-text: var(--color-gray-50);
44
+
45
+ /* Gradient — Sustain light (indigo tint) */
46
+ --gradient-stop-0: var(--color-slate-200);
47
+ --gradient-stop-1: var(--sustain-secondary);
48
+ --gradient-stop-2: var(--color-slate-200);
49
+ --radial-gradient-bg: radial-gradient(
50
+ circle at 90% 10%,
51
+ var(--gradient-stop-0) 0%,
52
+ var(--gradient-stop-1) 25%,
53
+ var(--gradient-stop-2) 60%
54
+ );
55
+
56
+ /* Sidebar */
57
+ --sidebar: var(--color-gray-50);
58
+ --sidebar-foreground: var(--color-gray-700);
59
+ --sidebar-primary: var(--color-gray-900);
60
+ --sidebar-primary-foreground: var(--color-gray-50);
61
+ --sidebar-accent: var(--color-gray-100);
62
+ --sidebar-accent-foreground: var(--color-gray-900);
63
+ --sidebar-border: var(--color-gray-200);
64
+ --sidebar-ring: var(--color-gray-300);
65
+ }
66
+
67
+ /* Sustain Theme — Dark Mode */
68
+ html.theme-sustain.dark {
69
+ --sustain-primary: var(--color-indigo-950);
70
+ --sustain-secondary: var(--color-indigo-950);
71
+ --sustain-accent: var(--color-indigo-950);
72
+ --sustain-surface: var(--color-indigo-950);
73
+ --sustain-background: var(--color-indigo-950);
74
+
75
+ --background: var(--sustain-surface);
76
+ --foreground: var(--color-gray-50);
77
+ --card: var(--color-gray-800);
78
+ --card-foreground: var(--color-gray-50);
79
+ --popover: var(--color-gray-800);
80
+ --popover-foreground: var(--color-gray-50);
81
+ --primary: var(--color-gray-50);
82
+ --primary-foreground: var(--color-gray-900);
83
+ --secondary: var(--color-gray-700);
84
+ --secondary-foreground: var(--color-gray-50);
85
+ --muted: var(--color-gray-700);
86
+ --muted-foreground: var(--color-gray-400);
87
+ --accent: var(--color-gray-700);
88
+ --accent-foreground: var(--color-gray-50);
89
+ --destructive: var(--color-red-600);
90
+ --destructive-foreground: var(--color-gray-50);
91
+ --border: var(--color-gray-700);
92
+ --input: var(--color-gray-700);
93
+ --input-background: rgba(255, 255, 255, 0.05);
94
+ --ring: var(--color-gray-500);
95
+
96
+ /* Glass morphism */
97
+ --glass-heavy: rgba(31, 40, 50, 0.8);
98
+ --glass-strong: rgba(31, 40, 50, 0.8);
99
+ --glass-subtle: rgba(31, 40, 50, 0.3);
100
+ --glass-light: rgba(31, 40, 50, 0.5);
101
+ --glass-medium: rgba(55, 65, 81, 0.5);
102
+
103
+ --nav-active-bg: var(--color-gray-700);
104
+ --tile-bg: var(--color-gray-800);
105
+ --tile-hover-bg: rgba(31, 40, 50, 0.4);
106
+ --tile-button-bg: var(--color-gray-800);
107
+ --tile-button-hover-bg: var(--color-gray-50);
108
+ --tile-button-hover-text: var(--color-gray-900);
109
+
110
+ /* Gradient — Sustain dark (deep indigo) */
111
+ --gradient-stop-0: var(--color-gray-950);
112
+ --gradient-stop-1: var(--sustain-primary);
113
+ --gradient-stop-2: var(--color-gray-950);
114
+ --radial-gradient-bg: radial-gradient(
115
+ circle at 90% 10%,
116
+ var(--gradient-stop-0) 0%,
117
+ var(--gradient-stop-1) 25%,
118
+ var(--gradient-stop-2) 60%
119
+ );
120
+
121
+ /* Sidebar */
122
+ --sidebar: var(--color-gray-800);
123
+ --sidebar-foreground: var(--color-gray-300);
124
+ --sidebar-primary: var(--color-gray-50);
125
+ --sidebar-primary-foreground: var(--color-gray-900);
126
+ --sidebar-accent: var(--color-gray-700);
127
+ --sidebar-accent-foreground: var(--color-gray-50);
128
+ --sidebar-border: var(--color-gray-700);
129
+ --sidebar-ring: var(--color-gray-500);
130
+ }