@stigmer/theme 0.0.34 → 0.0.39

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/presets/index.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B;QACE,EAAE,EAAE,SAAS;QACb,IAAI,EAAE,SAAS;QACf,SAAS,EAAE,EAAE;QACb,WAAW,EAAE,iCAAiC;QAC9C,MAAM,EAAE,sBAAsB;KAC/B;IACD;QACE,EAAE,EAAE,WAAW;QACf,IAAI,EAAE,WAAW;QACjB,SAAS,EAAE,sBAAsB;QACjC,WAAW,EAAE,gEAAgE;QAC7E,MAAM,EAAE,sBAAsB;KAC/B;IACD;QACE,EAAE,EAAE,SAAS;QACb,IAAI,EAAE,SAAS;QACf,SAAS,EAAE,oBAAoB;QAC/B,WAAW,EAAE,8DAA8D;QAC3E,MAAM,EAAE,sBAAsB;KAC/B;IACD;QACE,EAAE,EAAE,UAAU;QACd,IAAI,EAAE,UAAU;QAChB,SAAS,EAAE,qBAAqB;QAChC,WAAW,EAAE,0DAA0D;QACvE,MAAM,EAAE,qBAAqB;KAC9B;IACD;QACE,EAAE,EAAE,SAAS;QACb,IAAI,EAAE,SAAS;QACf,SAAS,EAAE,oBAAoB;QAC/B,WAAW,EAAE,gEAAgE;QAC7E,MAAM,EAAE,sBAAsB;KAC/B;CACwC,CAAC;AAK5C;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,EAAiB;IAClD,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACtD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;YAC1C,OAAO,CAAC,IAAI,CACV,oCAAoC,MAAM,CAAC,EAAE,CAAC,KAAK;gBACjD,cAAc,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC5D,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,MAAM,CAAC,SAAS,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,94 @@
1
+ /* Startup — Modern dev tools design language (Linear, Vercel, Raycast)
2
+ Medium radius, monochrome + violet accent, ultra-minimal borders, flat sidebar */
3
+
4
+ .stgm-theme-startup {
5
+ --stgm-radius: 0.5rem;
6
+ --stgm-background: oklch(0.99 0 0);
7
+ --stgm-foreground: oklch(0.13 0 0);
8
+ --stgm-card: oklch(0.97 0 0);
9
+ --stgm-card-foreground: oklch(0.13 0 0);
10
+ --stgm-popover: oklch(1 0 0);
11
+ --stgm-popover-foreground: oklch(0.13 0 0);
12
+ --stgm-primary: oklch(0.50 0.24 285);
13
+ --stgm-primary-foreground: oklch(0.98 0 0);
14
+ --stgm-secondary: oklch(0.95 0 0);
15
+ --stgm-secondary-foreground: oklch(0.30 0 0);
16
+ --stgm-muted: oklch(0.95 0 0);
17
+ --stgm-muted-foreground: oklch(0.50 0 0);
18
+ --stgm-accent: oklch(0.94 0 0);
19
+ --stgm-accent-foreground: oklch(0.30 0 0);
20
+ --stgm-border: oklch(0.92 0 0);
21
+ --stgm-input: oklch(0.90 0 0);
22
+ --stgm-ring: oklch(0.50 0.18 285);
23
+ --stgm-chart-1: oklch(0.55 0.24 285);
24
+ --stgm-chart-2: oklch(0.50 0.06 0);
25
+ --stgm-chart-3: oklch(0.65 0.16 180);
26
+ --stgm-chart-4: oklch(0.70 0.18 60);
27
+ --stgm-chart-5: oklch(0.58 0.20 340);
28
+ --stgm-shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.04), 0 1px 1px -1px rgb(0 0 0 / 0.04);
29
+ --stgm-shadow-md: 0 3px 5px -1px rgb(0 0 0 / 0.06), 0 1px 3px -2px rgb(0 0 0 / 0.05);
30
+ --stgm-shadow-lg: 0 8px 12px -3px rgb(0 0 0 / 0.06), 0 3px 5px -4px rgb(0 0 0 / 0.04);
31
+ --stgm-transition-duration: 100ms;
32
+ --stgm-transition-timing: cubic-bezier(0, 0, 0.2, 1);
33
+ --stgm-primary-hover: oklch(0.45 0.22 285);
34
+ --stgm-primary-subtle: oklch(0.96 0.02 285);
35
+ --stgm-destructive-subtle: oklch(0.96 0.03 27);
36
+ --stgm-muted-subtle: oklch(0.97 0 0);
37
+ --stgm-muted-foreground-subtle: oklch(0.60 0 0);
38
+ --stgm-backdrop: oklch(0.99 0 0 / 80%);
39
+ --stgm-sidebar: oklch(0.97 0 0);
40
+ --stgm-sidebar-foreground: oklch(0.13 0 0);
41
+ --stgm-sidebar-primary: oklch(0.50 0.24 285);
42
+ --stgm-sidebar-primary-foreground: oklch(0.98 0 0);
43
+ --stgm-sidebar-muted: oklch(0.94 0 0);
44
+ --stgm-sidebar-muted-foreground: oklch(0.50 0 0);
45
+ --stgm-sidebar-accent: oklch(0.94 0 0);
46
+ --stgm-sidebar-accent-foreground: oklch(0.30 0 0);
47
+ --stgm-sidebar-border: oklch(0.92 0 0);
48
+ --stgm-sidebar-ring: oklch(0.50 0.18 285);
49
+ }
50
+
51
+ .dark .stgm-theme-startup,
52
+ .stgm-theme-startup.dark {
53
+ --stgm-background: oklch(0.09 0 0);
54
+ --stgm-foreground: oklch(0.90 0 0);
55
+ --stgm-card: oklch(0.13 0 0);
56
+ --stgm-card-foreground: oklch(0.90 0 0);
57
+ --stgm-popover: oklch(0.16 0 0);
58
+ --stgm-popover-foreground: oklch(0.90 0 0);
59
+ --stgm-primary: oklch(0.72 0.20 285);
60
+ --stgm-primary-foreground: oklch(0.10 0 0);
61
+ --stgm-secondary: oklch(0.16 0 0);
62
+ --stgm-secondary-foreground: oklch(0.85 0 0);
63
+ --stgm-muted: oklch(0.16 0 0);
64
+ --stgm-muted-foreground: oklch(0.55 0 0);
65
+ --stgm-accent: oklch(0.20 0 0);
66
+ --stgm-accent-foreground: oklch(0.90 0 0);
67
+ --stgm-border: oklch(0.22 0 0);
68
+ --stgm-input: oklch(0.22 0 0);
69
+ --stgm-ring: oklch(0.55 0.16 285);
70
+ --stgm-chart-1: oklch(0.65 0.24 285);
71
+ --stgm-chart-2: oklch(0.55 0.06 0);
72
+ --stgm-chart-3: oklch(0.65 0.17 180);
73
+ --stgm-chart-4: oklch(0.72 0.18 60);
74
+ --stgm-chart-5: oklch(0.62 0.20 340);
75
+ --stgm-shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.18), 0 1px 1px -1px rgb(0 0 0 / 0.18);
76
+ --stgm-shadow-md: 0 3px 5px -1px rgb(0 0 0 / 0.22), 0 1px 3px -2px rgb(0 0 0 / 0.18);
77
+ --stgm-shadow-lg: 0 8px 12px -3px rgb(0 0 0 / 0.25), 0 3px 5px -4px rgb(0 0 0 / 0.2);
78
+ --stgm-primary-hover: oklch(0.66 0.18 285);
79
+ --stgm-primary-subtle: oklch(0.16 0.04 285);
80
+ --stgm-destructive-subtle: oklch(0.16 0.04 22);
81
+ --stgm-muted-subtle: oklch(0.12 0 0);
82
+ --stgm-muted-foreground-subtle: oklch(0.45 0 0);
83
+ --stgm-backdrop: oklch(0.09 0 0 / 80%);
84
+ --stgm-sidebar: oklch(0.07 0 0);
85
+ --stgm-sidebar-foreground: oklch(0.85 0 0);
86
+ --stgm-sidebar-primary: oklch(0.72 0.20 285);
87
+ --stgm-sidebar-primary-foreground: oklch(0.10 0 0);
88
+ --stgm-sidebar-muted: oklch(0.13 0 0);
89
+ --stgm-sidebar-muted-foreground: oklch(0.50 0 0);
90
+ --stgm-sidebar-accent: oklch(0.14 0 0);
91
+ --stgm-sidebar-accent-foreground: oklch(0.85 0 0);
92
+ --stgm-sidebar-border: oklch(0.18 0 0);
93
+ --stgm-sidebar-ring: oklch(0.50 0.14 285);
94
+ }
package/src/index.ts CHANGED
@@ -1,2 +1,4 @@
1
1
  export { cn } from "./utils";
2
2
  export type { ClassValue } from "./utils";
3
+ export { THEME_PRESETS, resolvePresetClass } from "./presets/index";
4
+ export type { ThemePreset, ThemePresetId } from "./presets/index";
@@ -0,0 +1,95 @@
1
+ /* Corporate — Enterprise SaaS design language (Azure, Salesforce, ServiceNow)
2
+ Tight radius, corporate blue, cool surfaces, prominent borders, dark blue sidebar */
3
+
4
+ .stgm-theme-corporate {
5
+ --stgm-font-sans: var(--font-inter, "Inter", system-ui, sans-serif);
6
+ --stgm-radius: 0.375rem;
7
+ --stgm-background: oklch(0.97 0.01 250);
8
+ --stgm-foreground: oklch(0.18 0.03 250);
9
+ --stgm-card: oklch(1 0.005 250);
10
+ --stgm-card-foreground: oklch(0.18 0.03 250);
11
+ --stgm-popover: oklch(1 0.005 250);
12
+ --stgm-popover-foreground: oklch(0.18 0.03 250);
13
+ --stgm-primary: oklch(0.48 0.18 250);
14
+ --stgm-primary-foreground: oklch(0.98 0 0);
15
+ --stgm-secondary: oklch(0.93 0.02 250);
16
+ --stgm-secondary-foreground: oklch(0.25 0.03 250);
17
+ --stgm-muted: oklch(0.93 0.02 250);
18
+ --stgm-muted-foreground: oklch(0.48 0.03 250);
19
+ --stgm-accent: oklch(0.91 0.03 250);
20
+ --stgm-accent-foreground: oklch(0.25 0.03 250);
21
+ --stgm-border: oklch(0.85 0.025 250);
22
+ --stgm-input: oklch(0.85 0.025 250);
23
+ --stgm-ring: oklch(0.48 0.15 250);
24
+ --stgm-chart-1: oklch(0.55 0.20 250);
25
+ --stgm-chart-2: oklch(0.60 0.16 200);
26
+ --stgm-chart-3: oklch(0.50 0.15 300);
27
+ --stgm-chart-4: oklch(0.72 0.16 150);
28
+ --stgm-chart-5: oklch(0.68 0.18 60);
29
+ --stgm-shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 0.12), 0 1px 2px -1px rgb(0 0 0 / 0.1);
30
+ --stgm-shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.12), 0 2px 4px -2px rgb(0 0 0 / 0.1);
31
+ --stgm-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.12), 0 4px 6px -4px rgb(0 0 0 / 0.08);
32
+ --stgm-transition-duration: 200ms;
33
+ --stgm-transition-timing: cubic-bezier(0.4, 0, 0.2, 1);
34
+ --stgm-primary-hover: oklch(0.43 0.16 250);
35
+ --stgm-primary-subtle: oklch(0.95 0.02 250);
36
+ --stgm-destructive-subtle: oklch(0.95 0.03 27);
37
+ --stgm-muted-subtle: oklch(0.95 0.01 250);
38
+ --stgm-muted-foreground-subtle: oklch(0.58 0.03 250);
39
+ --stgm-backdrop: oklch(0.97 0.01 250 / 80%);
40
+ --stgm-sidebar: oklch(0.20 0.06 250);
41
+ --stgm-sidebar-foreground: oklch(0.93 0 0);
42
+ --stgm-sidebar-primary: oklch(0.75 0.14 250);
43
+ --stgm-sidebar-primary-foreground: oklch(0.15 0 0);
44
+ --stgm-sidebar-muted: oklch(0.26 0.05 250);
45
+ --stgm-sidebar-muted-foreground: oklch(0.65 0.04 250);
46
+ --stgm-sidebar-accent: oklch(0.28 0.06 250);
47
+ --stgm-sidebar-accent-foreground: oklch(0.93 0 0);
48
+ --stgm-sidebar-border: oklch(1 0 0 / 10%);
49
+ --stgm-sidebar-ring: oklch(0.48 0.15 250);
50
+ }
51
+
52
+ .dark .stgm-theme-corporate,
53
+ .stgm-theme-corporate.dark {
54
+ --stgm-background: oklch(0.16 0.04 250);
55
+ --stgm-foreground: oklch(0.93 0.01 250);
56
+ --stgm-card: oklch(0.22 0.05 250);
57
+ --stgm-card-foreground: oklch(0.93 0.01 250);
58
+ --stgm-popover: oklch(0.26 0.05 250);
59
+ --stgm-popover-foreground: oklch(0.93 0.01 250);
60
+ --stgm-primary: oklch(0.68 0.16 250);
61
+ --stgm-primary-foreground: oklch(0.12 0 0);
62
+ --stgm-secondary: oklch(0.26 0.04 250);
63
+ --stgm-secondary-foreground: oklch(0.93 0.01 250);
64
+ --stgm-muted: oklch(0.26 0.04 250);
65
+ --stgm-muted-foreground: oklch(0.65 0.04 250);
66
+ --stgm-accent: oklch(0.32 0.05 250);
67
+ --stgm-accent-foreground: oklch(0.93 0.01 250);
68
+ --stgm-border: oklch(0.40 0.05 250);
69
+ --stgm-input: oklch(0.40 0.05 250);
70
+ --stgm-ring: oklch(0.55 0.14 250);
71
+ --stgm-chart-1: oklch(0.60 0.20 250);
72
+ --stgm-chart-2: oklch(0.62 0.17 200);
73
+ --stgm-chart-3: oklch(0.58 0.18 300);
74
+ --stgm-chart-4: oklch(0.70 0.17 150);
75
+ --stgm-chart-5: oklch(0.68 0.20 60);
76
+ --stgm-shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 0.3), 0 1px 2px -1px rgb(0 0 0 / 0.28);
77
+ --stgm-shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.35), 0 2px 4px -2px rgb(0 0 0 / 0.3);
78
+ --stgm-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.4), 0 4px 6px -4px rgb(0 0 0 / 0.35);
79
+ --stgm-primary-hover: oklch(0.62 0.14 250);
80
+ --stgm-primary-subtle: oklch(0.24 0.04 250);
81
+ --stgm-destructive-subtle: oklch(0.24 0.04 22);
82
+ --stgm-muted-subtle: oklch(0.21 0.03 250);
83
+ --stgm-muted-foreground-subtle: oklch(0.55 0.04 250);
84
+ --stgm-backdrop: oklch(0.16 0.04 250 / 80%);
85
+ --stgm-sidebar: oklch(0.13 0.05 250);
86
+ --stgm-sidebar-foreground: oklch(0.93 0 0);
87
+ --stgm-sidebar-primary: oklch(0.68 0.16 250);
88
+ --stgm-sidebar-primary-foreground: oklch(0.12 0 0);
89
+ --stgm-sidebar-muted: oklch(0.20 0.05 250);
90
+ --stgm-sidebar-muted-foreground: oklch(0.58 0.04 250);
91
+ --stgm-sidebar-accent: oklch(0.22 0.06 250);
92
+ --stgm-sidebar-accent-foreground: oklch(0.93 0 0);
93
+ --stgm-sidebar-border: oklch(0.35 0.05 250);
94
+ --stgm-sidebar-ring: oklch(0.50 0.12 250);
95
+ }
@@ -0,0 +1,96 @@
1
+ /* Fintech — Premium financial design language (Stripe, Mercury, Brex)
2
+ Nearly square corners, indigo, crisp surfaces, prominent dark sidebar */
3
+
4
+ .stgm-theme-fintech {
5
+ --stgm-font-sans: var(--font-ibm-plex-sans, "IBM Plex Sans", system-ui, sans-serif);
6
+ --stgm-font-mono: var(--font-ibm-plex-mono, "IBM Plex Mono", ui-monospace, monospace);
7
+ --stgm-radius: 0.125rem;
8
+ --stgm-background: oklch(0.98 0.005 280);
9
+ --stgm-foreground: oklch(0.15 0.04 280);
10
+ --stgm-card: oklch(1 0.003 280);
11
+ --stgm-card-foreground: oklch(0.15 0.04 280);
12
+ --stgm-popover: oklch(1 0.003 280);
13
+ --stgm-popover-foreground: oklch(0.15 0.04 280);
14
+ --stgm-primary: oklch(0.48 0.24 280);
15
+ --stgm-primary-foreground: oklch(0.98 0 0);
16
+ --stgm-secondary: oklch(0.95 0.01 280);
17
+ --stgm-secondary-foreground: oklch(0.25 0.04 280);
18
+ --stgm-muted: oklch(0.95 0.01 280);
19
+ --stgm-muted-foreground: oklch(0.50 0.03 280);
20
+ --stgm-accent: oklch(0.93 0.02 280);
21
+ --stgm-accent-foreground: oklch(0.25 0.04 280);
22
+ --stgm-border: oklch(0.90 0.01 280);
23
+ --stgm-input: oklch(0.88 0.015 280);
24
+ --stgm-ring: oklch(0.48 0.18 280);
25
+ --stgm-chart-1: oklch(0.52 0.24 280);
26
+ --stgm-chart-2: oklch(0.58 0.20 230);
27
+ --stgm-chart-3: oklch(0.50 0.16 340);
28
+ --stgm-chart-4: oklch(0.68 0.15 170);
29
+ --stgm-chart-5: oklch(0.74 0.16 60);
30
+ --stgm-shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.08), 0 1px 1px 0 rgb(0 0 0 / 0.06);
31
+ --stgm-shadow-md: 0 3px 4px -1px rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.08);
32
+ --stgm-shadow-lg: 0 8px 10px -3px rgb(0 0 0 / 0.1), 0 3px 4px -3px rgb(0 0 0 / 0.08);
33
+ --stgm-transition-duration: 150ms;
34
+ --stgm-transition-timing: cubic-bezier(0.25, 0.1, 0.25, 1);
35
+ --stgm-primary-hover: oklch(0.43 0.22 280);
36
+ --stgm-primary-subtle: oklch(0.96 0.02 280);
37
+ --stgm-destructive-subtle: oklch(0.96 0.03 27);
38
+ --stgm-muted-subtle: oklch(0.97 0.005 280);
39
+ --stgm-muted-foreground-subtle: oklch(0.60 0.03 280);
40
+ --stgm-backdrop: oklch(0.98 0.005 280 / 80%);
41
+ --stgm-sidebar: oklch(0.12 0.06 280);
42
+ --stgm-sidebar-foreground: oklch(0.90 0.01 280);
43
+ --stgm-sidebar-primary: oklch(0.72 0.20 280);
44
+ --stgm-sidebar-primary-foreground: oklch(0.12 0 0);
45
+ --stgm-sidebar-muted: oklch(0.18 0.06 280);
46
+ --stgm-sidebar-muted-foreground: oklch(0.58 0.04 280);
47
+ --stgm-sidebar-accent: oklch(0.20 0.07 280);
48
+ --stgm-sidebar-accent-foreground: oklch(0.90 0.01 280);
49
+ --stgm-sidebar-border: oklch(0.25 0.05 280);
50
+ --stgm-sidebar-ring: oklch(0.48 0.18 280);
51
+ }
52
+
53
+ .dark .stgm-theme-fintech,
54
+ .stgm-theme-fintech.dark {
55
+ --stgm-background: oklch(0.12 0.05 280);
56
+ --stgm-foreground: oklch(0.92 0.01 280);
57
+ --stgm-card: oklch(0.18 0.06 280);
58
+ --stgm-card-foreground: oklch(0.92 0.01 280);
59
+ --stgm-popover: oklch(0.23 0.05 280);
60
+ --stgm-popover-foreground: oklch(0.92 0.01 280);
61
+ --stgm-primary: oklch(0.70 0.22 280);
62
+ --stgm-primary-foreground: oklch(0.10 0 0);
63
+ --stgm-secondary: oklch(0.23 0.05 280);
64
+ --stgm-secondary-foreground: oklch(0.92 0.01 280);
65
+ --stgm-muted: oklch(0.23 0.05 280);
66
+ --stgm-muted-foreground: oklch(0.58 0.04 280);
67
+ --stgm-accent: oklch(0.28 0.06 280);
68
+ --stgm-accent-foreground: oklch(0.92 0.01 280);
69
+ --stgm-border: oklch(0.35 0.06 280);
70
+ --stgm-input: oklch(0.35 0.06 280);
71
+ --stgm-ring: oklch(0.55 0.18 280);
72
+ --stgm-chart-1: oklch(0.62 0.24 280);
73
+ --stgm-chart-2: oklch(0.58 0.20 230);
74
+ --stgm-chart-3: oklch(0.56 0.18 340);
75
+ --stgm-chart-4: oklch(0.66 0.17 170);
76
+ --stgm-chart-5: oklch(0.70 0.18 60);
77
+ --stgm-shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.28), 0 1px 1px 0 rgb(0 0 0 / 0.24);
78
+ --stgm-shadow-md: 0 3px 4px -1px rgb(0 0 0 / 0.32), 0 1px 2px -1px rgb(0 0 0 / 0.28);
79
+ --stgm-shadow-lg: 0 8px 10px -3px rgb(0 0 0 / 0.36), 0 3px 4px -3px rgb(0 0 0 / 0.3);
80
+ --stgm-primary-hover: oklch(0.64 0.20 280);
81
+ --stgm-primary-subtle: oklch(0.18 0.05 280);
82
+ --stgm-destructive-subtle: oklch(0.18 0.04 22);
83
+ --stgm-muted-subtle: oklch(0.17 0.04 280);
84
+ --stgm-muted-foreground-subtle: oklch(0.48 0.04 280);
85
+ --stgm-backdrop: oklch(0.12 0.05 280 / 80%);
86
+ --stgm-sidebar: oklch(0.08 0.06 280);
87
+ --stgm-sidebar-foreground: oklch(0.88 0.01 280);
88
+ --stgm-sidebar-primary: oklch(0.70 0.22 280);
89
+ --stgm-sidebar-primary-foreground: oklch(0.10 0 0);
90
+ --stgm-sidebar-muted: oklch(0.14 0.06 280);
91
+ --stgm-sidebar-muted-foreground: oklch(0.52 0.04 280);
92
+ --stgm-sidebar-accent: oklch(0.16 0.07 280);
93
+ --stgm-sidebar-accent-foreground: oklch(0.88 0.01 280);
94
+ --stgm-sidebar-border: oklch(0.22 0.06 280);
95
+ --stgm-sidebar-ring: oklch(0.50 0.14 280);
96
+ }
@@ -0,0 +1,95 @@
1
+ /* Friendly — Consumer SaaS design language (Notion, Intercom, Slack)
2
+ Very rounded, warm coral, cream-tinted surfaces, soft borders, approachable */
3
+
4
+ .stgm-theme-friendly {
5
+ --stgm-font-sans: var(--font-nunito, "Nunito", system-ui, sans-serif);
6
+ --stgm-radius: 1.25rem;
7
+ --stgm-background: oklch(0.97 0.015 65);
8
+ --stgm-foreground: oklch(0.22 0.03 50);
9
+ --stgm-card: oklch(0.99 0.01 65);
10
+ --stgm-card-foreground: oklch(0.22 0.03 50);
11
+ --stgm-popover: oklch(0.99 0.01 65);
12
+ --stgm-popover-foreground: oklch(0.22 0.03 50);
13
+ --stgm-primary: oklch(0.62 0.20 40);
14
+ --stgm-primary-foreground: oklch(0.98 0 0);
15
+ --stgm-secondary: oklch(0.94 0.02 65);
16
+ --stgm-secondary-foreground: oklch(0.30 0.03 50);
17
+ --stgm-muted: oklch(0.93 0.025 65);
18
+ --stgm-muted-foreground: oklch(0.50 0.03 50);
19
+ --stgm-accent: oklch(0.92 0.03 65);
20
+ --stgm-accent-foreground: oklch(0.30 0.03 50);
21
+ --stgm-border: oklch(0.88 0.02 65);
22
+ --stgm-input: oklch(0.88 0.02 65);
23
+ --stgm-ring: oklch(0.62 0.15 40);
24
+ --stgm-chart-1: oklch(0.62 0.20 40);
25
+ --stgm-chart-2: oklch(0.58 0.16 150);
26
+ --stgm-chart-3: oklch(0.55 0.18 280);
27
+ --stgm-chart-4: oklch(0.72 0.18 90);
28
+ --stgm-chart-5: oklch(0.58 0.16 200);
29
+ --stgm-shadow-sm: 0 1px 4px 0 rgb(0 0 0 / 0.07), 0 1px 3px -1px rgb(0 0 0 / 0.07);
30
+ --stgm-shadow-md: 0 4px 8px -1px rgb(0 0 0 / 0.08), 0 2px 5px -2px rgb(0 0 0 / 0.07);
31
+ --stgm-shadow-lg: 0 10px 20px -3px rgb(0 0 0 / 0.08), 0 4px 8px -4px rgb(0 0 0 / 0.06);
32
+ --stgm-transition-duration: 200ms;
33
+ --stgm-transition-timing: cubic-bezier(0.4, 0, 0.2, 1);
34
+ --stgm-primary-hover: oklch(0.57 0.18 40);
35
+ --stgm-primary-subtle: oklch(0.95 0.03 40);
36
+ --stgm-destructive-subtle: oklch(0.95 0.03 27);
37
+ --stgm-muted-subtle: oklch(0.95 0.02 65);
38
+ --stgm-muted-foreground-subtle: oklch(0.60 0.03 50);
39
+ --stgm-backdrop: oklch(0.97 0.015 65 / 80%);
40
+ --stgm-sidebar: oklch(0.95 0.02 65);
41
+ --stgm-sidebar-foreground: oklch(0.22 0.03 50);
42
+ --stgm-sidebar-primary: oklch(0.62 0.20 40);
43
+ --stgm-sidebar-primary-foreground: oklch(0.98 0 0);
44
+ --stgm-sidebar-muted: oklch(0.92 0.02 65);
45
+ --stgm-sidebar-muted-foreground: oklch(0.50 0.03 50);
46
+ --stgm-sidebar-accent: oklch(0.92 0.025 65);
47
+ --stgm-sidebar-accent-foreground: oklch(0.30 0.03 50);
48
+ --stgm-sidebar-border: oklch(0.88 0.02 65);
49
+ --stgm-sidebar-ring: oklch(0.62 0.15 40);
50
+ }
51
+
52
+ .dark .stgm-theme-friendly,
53
+ .stgm-theme-friendly.dark {
54
+ --stgm-background: oklch(0.18 0.03 50);
55
+ --stgm-foreground: oklch(0.93 0.01 65);
56
+ --stgm-card: oklch(0.24 0.04 50);
57
+ --stgm-card-foreground: oklch(0.93 0.01 65);
58
+ --stgm-popover: oklch(0.28 0.035 50);
59
+ --stgm-popover-foreground: oklch(0.93 0.01 65);
60
+ --stgm-primary: oklch(0.72 0.18 40);
61
+ --stgm-primary-foreground: oklch(0.15 0 0);
62
+ --stgm-secondary: oklch(0.27 0.03 50);
63
+ --stgm-secondary-foreground: oklch(0.93 0.01 65);
64
+ --stgm-muted: oklch(0.27 0.03 50);
65
+ --stgm-muted-foreground: oklch(0.62 0.03 50);
66
+ --stgm-accent: oklch(0.33 0.04 50);
67
+ --stgm-accent-foreground: oklch(0.93 0.01 65);
68
+ --stgm-border: oklch(0.38 0.04 50);
69
+ --stgm-input: oklch(0.38 0.04 50);
70
+ --stgm-ring: oklch(0.60 0.14 40);
71
+ --stgm-chart-1: oklch(0.68 0.20 40);
72
+ --stgm-chart-2: oklch(0.62 0.17 150);
73
+ --stgm-chart-3: oklch(0.60 0.18 280);
74
+ --stgm-chart-4: oklch(0.70 0.18 90);
75
+ --stgm-chart-5: oklch(0.60 0.17 200);
76
+ --stgm-shadow-sm: 0 1px 4px 0 rgb(0 0 0 / 0.22), 0 1px 3px -1px rgb(0 0 0 / 0.2);
77
+ --stgm-shadow-md: 0 4px 8px -1px rgb(0 0 0 / 0.26), 0 2px 5px -2px rgb(0 0 0 / 0.22);
78
+ --stgm-shadow-lg: 0 10px 20px -3px rgb(0 0 0 / 0.3), 0 4px 8px -4px rgb(0 0 0 / 0.25);
79
+ --stgm-primary-hover: oklch(0.66 0.16 40);
80
+ --stgm-primary-subtle: oklch(0.26 0.04 40);
81
+ --stgm-destructive-subtle: oklch(0.26 0.04 22);
82
+ --stgm-muted-subtle: oklch(0.22 0.02 50);
83
+ --stgm-muted-foreground-subtle: oklch(0.52 0.03 50);
84
+ --stgm-backdrop: oklch(0.18 0.03 50 / 80%);
85
+ --stgm-sidebar: oklch(0.15 0.03 50);
86
+ --stgm-sidebar-foreground: oklch(0.90 0.01 65);
87
+ --stgm-sidebar-primary: oklch(0.72 0.18 40);
88
+ --stgm-sidebar-primary-foreground: oklch(0.15 0 0);
89
+ --stgm-sidebar-muted: oklch(0.22 0.03 50);
90
+ --stgm-sidebar-muted-foreground: oklch(0.58 0.03 50);
91
+ --stgm-sidebar-accent: oklch(0.24 0.04 50);
92
+ --stgm-sidebar-accent-foreground: oklch(0.90 0.01 65);
93
+ --stgm-sidebar-border: oklch(0.32 0.04 50);
94
+ --stgm-sidebar-ring: oklch(0.55 0.12 40);
95
+ }
@@ -0,0 +1,70 @@
1
+ export interface ThemePreset {
2
+ readonly id: string;
3
+ readonly name: string;
4
+ /** CSS class added to the root element. Empty string for the built-in default. */
5
+ readonly className: string;
6
+ readonly description: string;
7
+ /** Representative OKLCH color string used for swatch rendering. */
8
+ readonly swatch: string;
9
+ }
10
+
11
+ export const THEME_PRESETS = [
12
+ {
13
+ id: "default",
14
+ name: "Default",
15
+ className: "",
16
+ description: "Stigmer's built-in teal palette",
17
+ swatch: "oklch(0.55 0.12 190)",
18
+ },
19
+ {
20
+ id: "corporate",
21
+ name: "Corporate",
22
+ className: "stgm-theme-corporate",
23
+ description: "Enterprise SaaS — tight radius, blue, cool grays, dark sidebar",
24
+ swatch: "oklch(0.48 0.15 250)",
25
+ },
26
+ {
27
+ id: "startup",
28
+ name: "Startup",
29
+ className: "stgm-theme-startup",
30
+ description: "Modern dev tools — clean, monochrome, violet accent, minimal",
31
+ swatch: "oklch(0.50 0.22 285)",
32
+ },
33
+ {
34
+ id: "friendly",
35
+ name: "Friendly",
36
+ className: "stgm-theme-friendly",
37
+ description: "Consumer SaaS — very rounded, warm coral, cream surfaces",
38
+ swatch: "oklch(0.62 0.19 45)",
39
+ },
40
+ {
41
+ id: "fintech",
42
+ name: "Fintech",
43
+ className: "stgm-theme-fintech",
44
+ description: "Premium financial — sharp corners, indigo, crisp, dark sidebar",
45
+ swatch: "oklch(0.50 0.22 280)",
46
+ },
47
+ ] as const satisfies readonly ThemePreset[];
48
+
49
+ /** Union of built-in preset identifiers. */
50
+ export type ThemePresetId = (typeof THEME_PRESETS)[number]["id"];
51
+
52
+ /**
53
+ * Resolve a preset ID to its CSS class name.
54
+ *
55
+ * Returns `""` for `"default"` (no additional class needed).
56
+ * Emits a dev-mode warning for unrecognised IDs (guards JS consumers).
57
+ */
58
+ export function resolvePresetClass(id: ThemePresetId): string {
59
+ const preset = THEME_PRESETS.find((p) => p.id === id);
60
+ if (!preset) {
61
+ if (process.env.NODE_ENV !== "production") {
62
+ console.warn(
63
+ `[@stigmer/theme] Unknown preset "${String(id)}". ` +
64
+ `Available: ${THEME_PRESETS.map((p) => p.id).join(", ")}`,
65
+ );
66
+ }
67
+ return "";
68
+ }
69
+ return preset.className;
70
+ }
@@ -0,0 +1,94 @@
1
+ /* Startup — Modern dev tools design language (Linear, Vercel, Raycast)
2
+ Medium radius, monochrome + violet accent, ultra-minimal borders, flat sidebar */
3
+
4
+ .stgm-theme-startup {
5
+ --stgm-radius: 0.5rem;
6
+ --stgm-background: oklch(0.99 0 0);
7
+ --stgm-foreground: oklch(0.13 0 0);
8
+ --stgm-card: oklch(0.97 0 0);
9
+ --stgm-card-foreground: oklch(0.13 0 0);
10
+ --stgm-popover: oklch(1 0 0);
11
+ --stgm-popover-foreground: oklch(0.13 0 0);
12
+ --stgm-primary: oklch(0.50 0.24 285);
13
+ --stgm-primary-foreground: oklch(0.98 0 0);
14
+ --stgm-secondary: oklch(0.95 0 0);
15
+ --stgm-secondary-foreground: oklch(0.30 0 0);
16
+ --stgm-muted: oklch(0.95 0 0);
17
+ --stgm-muted-foreground: oklch(0.50 0 0);
18
+ --stgm-accent: oklch(0.94 0 0);
19
+ --stgm-accent-foreground: oklch(0.30 0 0);
20
+ --stgm-border: oklch(0.92 0 0);
21
+ --stgm-input: oklch(0.90 0 0);
22
+ --stgm-ring: oklch(0.50 0.18 285);
23
+ --stgm-chart-1: oklch(0.55 0.24 285);
24
+ --stgm-chart-2: oklch(0.50 0.06 0);
25
+ --stgm-chart-3: oklch(0.65 0.16 180);
26
+ --stgm-chart-4: oklch(0.70 0.18 60);
27
+ --stgm-chart-5: oklch(0.58 0.20 340);
28
+ --stgm-shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.04), 0 1px 1px -1px rgb(0 0 0 / 0.04);
29
+ --stgm-shadow-md: 0 3px 5px -1px rgb(0 0 0 / 0.06), 0 1px 3px -2px rgb(0 0 0 / 0.05);
30
+ --stgm-shadow-lg: 0 8px 12px -3px rgb(0 0 0 / 0.06), 0 3px 5px -4px rgb(0 0 0 / 0.04);
31
+ --stgm-transition-duration: 100ms;
32
+ --stgm-transition-timing: cubic-bezier(0, 0, 0.2, 1);
33
+ --stgm-primary-hover: oklch(0.45 0.22 285);
34
+ --stgm-primary-subtle: oklch(0.96 0.02 285);
35
+ --stgm-destructive-subtle: oklch(0.96 0.03 27);
36
+ --stgm-muted-subtle: oklch(0.97 0 0);
37
+ --stgm-muted-foreground-subtle: oklch(0.60 0 0);
38
+ --stgm-backdrop: oklch(0.99 0 0 / 80%);
39
+ --stgm-sidebar: oklch(0.97 0 0);
40
+ --stgm-sidebar-foreground: oklch(0.13 0 0);
41
+ --stgm-sidebar-primary: oklch(0.50 0.24 285);
42
+ --stgm-sidebar-primary-foreground: oklch(0.98 0 0);
43
+ --stgm-sidebar-muted: oklch(0.94 0 0);
44
+ --stgm-sidebar-muted-foreground: oklch(0.50 0 0);
45
+ --stgm-sidebar-accent: oklch(0.94 0 0);
46
+ --stgm-sidebar-accent-foreground: oklch(0.30 0 0);
47
+ --stgm-sidebar-border: oklch(0.92 0 0);
48
+ --stgm-sidebar-ring: oklch(0.50 0.18 285);
49
+ }
50
+
51
+ .dark .stgm-theme-startup,
52
+ .stgm-theme-startup.dark {
53
+ --stgm-background: oklch(0.09 0 0);
54
+ --stgm-foreground: oklch(0.90 0 0);
55
+ --stgm-card: oklch(0.13 0 0);
56
+ --stgm-card-foreground: oklch(0.90 0 0);
57
+ --stgm-popover: oklch(0.16 0 0);
58
+ --stgm-popover-foreground: oklch(0.90 0 0);
59
+ --stgm-primary: oklch(0.72 0.20 285);
60
+ --stgm-primary-foreground: oklch(0.10 0 0);
61
+ --stgm-secondary: oklch(0.16 0 0);
62
+ --stgm-secondary-foreground: oklch(0.85 0 0);
63
+ --stgm-muted: oklch(0.16 0 0);
64
+ --stgm-muted-foreground: oklch(0.55 0 0);
65
+ --stgm-accent: oklch(0.20 0 0);
66
+ --stgm-accent-foreground: oklch(0.90 0 0);
67
+ --stgm-border: oklch(0.22 0 0);
68
+ --stgm-input: oklch(0.22 0 0);
69
+ --stgm-ring: oklch(0.55 0.16 285);
70
+ --stgm-chart-1: oklch(0.65 0.24 285);
71
+ --stgm-chart-2: oklch(0.55 0.06 0);
72
+ --stgm-chart-3: oklch(0.65 0.17 180);
73
+ --stgm-chart-4: oklch(0.72 0.18 60);
74
+ --stgm-chart-5: oklch(0.62 0.20 340);
75
+ --stgm-shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.18), 0 1px 1px -1px rgb(0 0 0 / 0.18);
76
+ --stgm-shadow-md: 0 3px 5px -1px rgb(0 0 0 / 0.22), 0 1px 3px -2px rgb(0 0 0 / 0.18);
77
+ --stgm-shadow-lg: 0 8px 12px -3px rgb(0 0 0 / 0.25), 0 3px 5px -4px rgb(0 0 0 / 0.2);
78
+ --stgm-primary-hover: oklch(0.66 0.18 285);
79
+ --stgm-primary-subtle: oklch(0.16 0.04 285);
80
+ --stgm-destructive-subtle: oklch(0.16 0.04 22);
81
+ --stgm-muted-subtle: oklch(0.12 0 0);
82
+ --stgm-muted-foreground-subtle: oklch(0.45 0 0);
83
+ --stgm-backdrop: oklch(0.09 0 0 / 80%);
84
+ --stgm-sidebar: oklch(0.07 0 0);
85
+ --stgm-sidebar-foreground: oklch(0.85 0 0);
86
+ --stgm-sidebar-primary: oklch(0.72 0.20 285);
87
+ --stgm-sidebar-primary-foreground: oklch(0.10 0 0);
88
+ --stgm-sidebar-muted: oklch(0.13 0 0);
89
+ --stgm-sidebar-muted-foreground: oklch(0.50 0 0);
90
+ --stgm-sidebar-accent: oklch(0.14 0 0);
91
+ --stgm-sidebar-accent-foreground: oklch(0.85 0 0);
92
+ --stgm-sidebar-border: oklch(0.18 0 0);
93
+ --stgm-sidebar-ring: oklch(0.50 0.14 285);
94
+ }