@tangle-network/brand 0.5.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/package.json +1 -1
- package/src/styles/theme.css +39 -8
- package/src/styles/tokens.css +41 -30
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.7.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- e199bc7: Fix the dark theme being unresponsive to token changes + harsh on dark surfaces — root cause was the `@theme` layer.
|
|
8
|
+
|
|
9
|
+
- **Single source of truth for semantic tokens.** `theme.css` now maps every shadcn/MD3 utility token (`--color-background/card/border/muted/popover/secondary/accent/destructive/ring/input` + `--color-surface-container*`) onto the `tokens.css` spine via `var()`, instead of leaving them undefined (forcing every app to re-define them) and hardcoding a now-stale `--color-depth-*` copy. Editing the spine in `tokens.css` now actually flows through to `bg-card` / `border-border` / `bg-muted` everywhere.
|
|
10
|
+
- **Comfortable dark surface ladder.** Lift the canvas off near-black (`#0b0b0d` → `#15151a`) and spread the surface/depth/MD3 ladder so panels separate by _fill_, with the border softened (`13%` → `16%` lightness) so it recedes instead of reading as a bright outline on black.
|
|
11
|
+
|
|
12
|
+
## 0.6.0
|
|
13
|
+
|
|
14
|
+
### Minor Changes
|
|
15
|
+
|
|
16
|
+
- c56ea6c: Add a standard `data-theme`/`.dark`/`.light` switch alongside the existing named themes. The dark block now also matches `[data-theme="dark"]`/`.dark` and the light block also matches `[data-theme="light"]`/`.light`, so consumers can pin or toggle a theme with a standard switch instead of an ad-hoc `data-sandbox-theme` name (an unknown name previously fell back to the dark default). The `:root` default stays dark — zero blast radius to existing consumers.
|
|
17
|
+
|
|
3
18
|
## 0.5.0
|
|
4
19
|
|
|
5
20
|
### Minor Changes
|
package/package.json
CHANGED
package/src/styles/theme.css
CHANGED
|
@@ -52,16 +52,47 @@
|
|
|
52
52
|
--color-brand-glow: #A5AAFC;
|
|
53
53
|
--color-brand-emerald: #10B981;
|
|
54
54
|
|
|
55
|
-
/* Depth stack —
|
|
56
|
-
|
|
57
|
-
--color-depth-
|
|
58
|
-
--color-depth-
|
|
59
|
-
--color-depth-
|
|
55
|
+
/* Depth stack — REFERENCE the spine in tokens.css (single source; was a stale
|
|
56
|
+
hardcoded copy that drifted from --depth-* and broke theme retunes). */
|
|
57
|
+
--color-depth-1: var(--depth-1);
|
|
58
|
+
--color-depth-2: var(--depth-2);
|
|
59
|
+
--color-depth-3: var(--depth-3);
|
|
60
|
+
--color-depth-4: var(--depth-4);
|
|
61
|
+
|
|
62
|
+
/* Semantic surface + text roles — map the shadcn/MD3 utility names onto the
|
|
63
|
+
tokens.css spine so `bg-card` / `border-border` / `bg-muted` /
|
|
64
|
+
`bg-surface-container*` / `text-muted-foreground` resolve from ONE source
|
|
65
|
+
here, instead of every consuming app re-defining them (the drift you hit).
|
|
66
|
+
Apps may still override locally; absent an override these are the defaults. */
|
|
67
|
+
--color-background: hsl(var(--background));
|
|
68
|
+
--color-foreground: hsl(var(--foreground));
|
|
69
|
+
--color-card: hsl(var(--card));
|
|
70
|
+
--color-card-foreground: hsl(var(--card-foreground));
|
|
71
|
+
--color-popover: hsl(var(--popover));
|
|
72
|
+
--color-popover-foreground: hsl(var(--popover-foreground));
|
|
73
|
+
--color-primary: hsl(var(--primary));
|
|
74
|
+
--color-primary-foreground: hsl(var(--primary-foreground));
|
|
75
|
+
--color-secondary: hsl(var(--secondary));
|
|
76
|
+
--color-secondary-foreground: hsl(var(--secondary-foreground));
|
|
77
|
+
--color-muted: hsl(var(--muted));
|
|
78
|
+
--color-muted-foreground: hsl(var(--muted-foreground));
|
|
79
|
+
--color-accent: hsl(var(--accent));
|
|
80
|
+
--color-accent-foreground: hsl(var(--accent-foreground));
|
|
81
|
+
--color-destructive: hsl(var(--destructive));
|
|
82
|
+
--color-destructive-foreground: hsl(var(--destructive-foreground));
|
|
83
|
+
--color-border: hsl(var(--border));
|
|
84
|
+
--color-input: hsl(var(--input));
|
|
85
|
+
--color-ring: hsl(var(--ring));
|
|
86
|
+
--color-surface-container-lowest: var(--md3-surface-container-lowest);
|
|
87
|
+
--color-surface-container-low: var(--md3-surface-container-low);
|
|
88
|
+
--color-surface-container: var(--md3-surface-container);
|
|
89
|
+
--color-surface-container-high: var(--md3-surface-container-high);
|
|
90
|
+
--color-surface-container-highest: var(--md3-surface-container-highest);
|
|
60
91
|
|
|
61
92
|
/* Semantic text — use as `text-fg`, `text-fg-muted`, `text-fg-dim` */
|
|
62
|
-
--color-fg:
|
|
63
|
-
--color-fg-muted:
|
|
64
|
-
--color-fg-dim:
|
|
93
|
+
--color-fg: var(--text-primary);
|
|
94
|
+
--color-fg-muted: var(--text-muted);
|
|
95
|
+
--color-fg-dim: var(--text-dim);
|
|
65
96
|
|
|
66
97
|
/* Status — use as `text-status-running`, `bg-status-stopped` */
|
|
67
98
|
--color-status-running: #10B981;
|
package/src/styles/tokens.css
CHANGED
|
@@ -2,17 +2,22 @@
|
|
|
2
2
|
/* Brand: warm purple palette, #5B4ED4 primary */
|
|
3
3
|
|
|
4
4
|
/* MD3 surface hierarchy */
|
|
5
|
+
/* Dark is the default theme (`:root`/`[data-sandbox-ui]`). It also responds to
|
|
6
|
+
* the standard `[data-theme="dark"]` / `.dark` switch so any consumer can pin or
|
|
7
|
+
* toggle a theme without inventing an ad-hoc `data-sandbox-theme` name. */
|
|
5
8
|
:root,
|
|
6
|
-
[data-sandbox-ui]
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
--md3-surface
|
|
10
|
-
--md3-surface-
|
|
11
|
-
--md3-surface-
|
|
12
|
-
--md3-surface-container: #
|
|
13
|
-
--md3-surface-container-
|
|
14
|
-
--md3-surface-container
|
|
15
|
-
--md3-surface-
|
|
9
|
+
[data-sandbox-ui],
|
|
10
|
+
[data-theme="dark"],
|
|
11
|
+
.dark {
|
|
12
|
+
--md3-surface: #16161f;
|
|
13
|
+
--md3-surface-dim: #111119;
|
|
14
|
+
--md3-surface-bright: #2a2940;
|
|
15
|
+
--md3-surface-container-lowest: #101017;
|
|
16
|
+
--md3-surface-container-low: #16161f;
|
|
17
|
+
--md3-surface-container: #1c1b27;
|
|
18
|
+
--md3-surface-container-high: #232231;
|
|
19
|
+
--md3-surface-container-highest: #2c2b3d;
|
|
20
|
+
--md3-surface-variant: #2c2b3d;
|
|
16
21
|
--md3-on-surface: #fdfdfd;
|
|
17
22
|
--md3-on-surface-variant: #aaa8b8;
|
|
18
23
|
|
|
@@ -31,8 +36,8 @@
|
|
|
31
36
|
--md3-on-secondary-container: #E8E5FF;
|
|
32
37
|
|
|
33
38
|
--md3-tertiary: #10B981;
|
|
34
|
-
--md3-outline: #
|
|
35
|
-
--md3-outline-variant: #
|
|
39
|
+
--md3-outline: #4a4965;
|
|
40
|
+
--md3-outline-variant: #34324a;
|
|
36
41
|
|
|
37
42
|
--md3-error: #ff5277;
|
|
38
43
|
--md3-error-dim: #eb2855;
|
|
@@ -46,24 +51,24 @@
|
|
|
46
51
|
--md3-surface-tint: #818CF8;
|
|
47
52
|
|
|
48
53
|
/* Semantic HSL bridge — flat neutral spine (Tangle Quiet) */
|
|
49
|
-
--hsl-background: 240
|
|
54
|
+
--hsl-background: 240 7% 9%; /* #15151a canvas — lifted off pure black */
|
|
50
55
|
--hsl-foreground: 240 6% 93%; /* #ececee */
|
|
51
|
-
--hsl-card: 240 5%
|
|
56
|
+
--hsl-card: 240 5% 13%; /* #1f1f23 surface, clearly above canvas */
|
|
52
57
|
--hsl-card-foreground: 240 6% 93%;
|
|
53
|
-
--hsl-popover: 240
|
|
58
|
+
--hsl-popover: 240 5% 17%; /* #28282d elevated */
|
|
54
59
|
--hsl-popover-foreground: 240 6% 93%;
|
|
55
60
|
--hsl-primary: 239 84% 67%;
|
|
56
61
|
--hsl-primary-foreground: 0 0% 100%;
|
|
57
|
-
--hsl-secondary: 240 5%
|
|
62
|
+
--hsl-secondary: 240 5% 15%; /* #242428 surface-2 */
|
|
58
63
|
--hsl-secondary-foreground: 240 6% 93%;
|
|
59
|
-
--hsl-muted: 240 5%
|
|
60
|
-
--hsl-muted-foreground: 240 4%
|
|
61
|
-
--hsl-accent: 240 5%
|
|
64
|
+
--hsl-muted: 240 5% 15%; /* #242428 — neutral hover well */
|
|
65
|
+
--hsl-muted-foreground: 240 4% 64%; /* #9c9ca6 text-muted */
|
|
66
|
+
--hsl-accent: 240 5% 15%; /* neutral hover (indigo lives in accent-surface-strong) */
|
|
62
67
|
--hsl-accent-foreground: 240 6% 93%;
|
|
63
68
|
--hsl-destructive: 348 90% 60%;
|
|
64
69
|
--hsl-destructive-foreground: 0 0% 100%;
|
|
65
|
-
--hsl-border: 240
|
|
66
|
-
--hsl-input: 240 5%
|
|
70
|
+
--hsl-border: 240 5% 16%; /* soft edge — fill carries separation, not the line */
|
|
71
|
+
--hsl-input: 240 5% 15%;
|
|
67
72
|
--hsl-ring: 239 84% 67%;
|
|
68
73
|
--hsl-success: 160 84% 39%;
|
|
69
74
|
--hsl-warning: 40 94% 56%;
|
|
@@ -95,20 +100,20 @@
|
|
|
95
100
|
--info: var(--hsl-info);
|
|
96
101
|
|
|
97
102
|
/* Sidebar tokens — flat surface + hairline */
|
|
98
|
-
--sidebar-background: 240
|
|
103
|
+
--sidebar-background: 240 6% 11%; /* #1a1a1f surface */
|
|
99
104
|
--sidebar-foreground: 240 6% 93%;
|
|
100
105
|
--sidebar-primary: 239 84% 67%;
|
|
101
106
|
--sidebar-primary-foreground: 0 0% 100%;
|
|
102
|
-
--sidebar-accent: 240 5%
|
|
107
|
+
--sidebar-accent: 240 5% 15%; /* neutral hover */
|
|
103
108
|
--sidebar-accent-foreground: 240 6% 93%;
|
|
104
|
-
--sidebar-border: 240
|
|
109
|
+
--sidebar-border: 240 5% 16%; /* soft edge */
|
|
105
110
|
--sidebar-ring: 239 84% 67%;
|
|
106
111
|
|
|
107
112
|
/* Depth scale — flat neutral spine (Tangle Quiet) */
|
|
108
|
-
--depth-1: #
|
|
109
|
-
--depth-2: #
|
|
110
|
-
--depth-3: #
|
|
111
|
-
--depth-4: #
|
|
113
|
+
--depth-1: #15151a;
|
|
114
|
+
--depth-2: #1f1f23;
|
|
115
|
+
--depth-3: #26262b;
|
|
116
|
+
--depth-4: #2e2e34;
|
|
112
117
|
|
|
113
118
|
/* Status colors */
|
|
114
119
|
--status-running: #10B981;
|
|
@@ -167,7 +172,7 @@
|
|
|
167
172
|
--accent-text: #b9bffb;
|
|
168
173
|
|
|
169
174
|
/* Surfaces — flat single-neutral (no radial mesh) */
|
|
170
|
-
--bg-root: #
|
|
175
|
+
--bg-root: #15151a;
|
|
171
176
|
--bg-dark: var(--depth-1);
|
|
172
177
|
--bg-card: var(--depth-2);
|
|
173
178
|
--bg-elevated: var(--depth-4);
|
|
@@ -304,7 +309,13 @@
|
|
|
304
309
|
--font-mono: "Geist Mono", "JetBrains Mono", ui-monospace, monospace;
|
|
305
310
|
}
|
|
306
311
|
|
|
307
|
-
|
|
312
|
+
/* Light theme — reachable via the named `vault` theme or the standard
|
|
313
|
+
* `[data-theme="light"]` / `.light` switch. Both blocks are single-attribute/
|
|
314
|
+
* class selectors, and this one is later in source order, so when an element
|
|
315
|
+
* carries both `data-sandbox-ui` (dark) and `data-theme="light"`, light wins. */
|
|
316
|
+
[data-sandbox-theme="vault"],
|
|
317
|
+
[data-theme="light"],
|
|
318
|
+
.light {
|
|
308
319
|
/* Light theme — clean professional, warm purple accents */
|
|
309
320
|
|
|
310
321
|
/* MD3 surface hierarchy */
|