@tangle-network/sandbox-ui 1.1.7 → 1.1.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/{dashboard-ClKA3opr.js → dashboard-DZ6FcC_Z.js} +3 -3
- package/dist/dashboard.js +1 -1
- package/dist/globals.css +1957 -1556
- package/dist/index-CFJ1iJhu.d.ts +26 -0
- package/dist/index.d.ts +3 -4
- package/dist/index.js +5 -289
- package/dist/integrations.d.ts +2 -1
- package/dist/integrations.js +6 -1
- package/dist/primitives-B-76QdOU.js +23 -0
- package/dist/primitives.d.ts +2 -3
- package/dist/primitives.js +1 -2
- package/dist/styles.css +1957 -1556
- package/dist/tailwind.css +4 -17
- package/dist/tokens.css +452 -851
- package/dist/{workbench-DOgYO3Zg.js → workbench-Ca6ZqAs5.js} +1 -1
- package/dist/workbench.js +1 -1
- package/package.json +4 -4
- package/dist/index-BAEvGqrn.d.ts +0 -26
- package/dist/primitives-CiwDp4-0.js +0 -32
- package/dist/rolldown-runtime-782esTHO.js +0 -26
package/dist/tokens.css
CHANGED
|
@@ -1,29 +1,5 @@
|
|
|
1
|
-
/*
|
|
2
|
-
|
|
3
|
-
* The surface ladder is near-neutral grey with a faint indigo cast; the indigo
|
|
4
|
-
* accent is trim, never field. Each plane steps at least 4.4 OKLCH L off the
|
|
5
|
-
* plane it sits on (surface-ladder.test.ts), so a card, a card in a card and a
|
|
6
|
-
* field each read by their own fill. Dark adds a 1.5:1 hairline and a top edge
|
|
7
|
-
* highlight, because a black shadow on a dark canvas renders as nothing; light
|
|
8
|
-
* is white paper on a grey canvas, separated by shadow.
|
|
9
|
-
*
|
|
10
|
-
* Each colour is declared ONCE, as a role (a plane, an ink tier, one of four
|
|
11
|
-
* indigos, one ink per status hue), and every other name of that colour is an
|
|
12
|
-
* alias of it, so a retune or a named theme moves one value and every family
|
|
13
|
-
* follows: hsl-*, md3-*, depth-*, bg-*, status-*, surface-*, code-* and brand-*.
|
|
14
|
-
*
|
|
15
|
-
* Apps consume this spine as-is. If a product needs its own accent identity,
|
|
16
|
-
* add a named theme in named-themes.css (`data-theme="<name>"`) — do NOT re-declare
|
|
17
|
-
* these tokens in the app, or its surfaces silently stop tracking the brand. */
|
|
18
|
-
|
|
19
|
-
/* Dark is the default theme (`:root`/`[data-sandbox-ui]`). It also responds to
|
|
20
|
-
* the standard `[data-theme="dark"]` / `.dark` switch so any consumer can pin or
|
|
21
|
-
* toggle a theme without inventing an ad-hoc `data-sandbox-theme` name. */
|
|
22
|
-
/* Seed a complete baseline on every supported boundary BEFORE mode overrides.
|
|
23
|
-
* Inherited var() aliases are already substituted at their parent; declaring
|
|
24
|
-
* them here lets a nested light/dark/named scope resolve its own palette.
|
|
25
|
-
* Light scopes are deliberately included in this baseline, then override it
|
|
26
|
-
* below. Named themes only author their product-specific differences. */
|
|
1
|
+
/* palette:begin — generated by scripts/gen-ladders.mjs; edit palette.mjs or palette-template.css. */
|
|
2
|
+
/* Palette layout only. Colour inputs live in palette.mjs; gen-ladders.mjs writes the public stylesheets. */
|
|
27
3
|
:root,
|
|
28
4
|
[data-sandbox-ui],
|
|
29
5
|
[data-sandbox-theme="vault"],
|
|
@@ -45,515 +21,295 @@
|
|
|
45
21
|
.light,
|
|
46
22
|
.dark {
|
|
47
23
|
color-scheme: dark;
|
|
48
|
-
|
|
49
|
-
/*
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
--
|
|
56
|
-
--
|
|
57
|
-
--
|
|
58
|
-
--
|
|
59
|
-
--
|
|
60
|
-
--
|
|
61
|
-
--
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
--md3-surface
|
|
66
|
-
--
|
|
67
|
-
--
|
|
68
|
-
--
|
|
69
|
-
--
|
|
70
|
-
--
|
|
71
|
-
--
|
|
72
|
-
--
|
|
73
|
-
--md3-surface
|
|
74
|
-
--
|
|
75
|
-
--
|
|
76
|
-
--
|
|
77
|
-
--
|
|
78
|
-
--
|
|
79
|
-
--
|
|
80
|
-
--
|
|
81
|
-
--
|
|
82
|
-
--
|
|
83
|
-
--
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
--
|
|
87
|
-
--
|
|
88
|
-
--
|
|
89
|
-
--
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
--
|
|
98
|
-
--
|
|
99
|
-
--
|
|
100
|
-
--
|
|
101
|
-
--text-
|
|
102
|
-
--
|
|
103
|
-
--hsl-
|
|
104
|
-
--hsl-
|
|
105
|
-
--hsl-
|
|
106
|
-
--
|
|
107
|
-
--
|
|
108
|
-
--
|
|
109
|
-
--
|
|
110
|
-
--
|
|
111
|
-
--
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
--
|
|
119
|
-
--md3-
|
|
120
|
-
--
|
|
121
|
-
--
|
|
122
|
-
--
|
|
123
|
-
--
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
* the accent retints all of them. The ring is brighter than the fill on
|
|
132
|
-
* purpose: it is non-text and must clear 3:1 on the canvas AND the card,
|
|
133
|
-
* while the fill is tuned to carry white. */
|
|
134
|
-
--hsl-primary: 246 54% 51%; /* fill #4c3fc6 */
|
|
135
|
-
--hsl-primary-foreground: 0 0% 100%;
|
|
136
|
-
--hsl-ring: 233 100% 87%;
|
|
137
|
-
--brand-primary: #7C6CF6;
|
|
138
|
-
--brand-cool: #818CF8;
|
|
139
|
-
--accent-text: #A5B4FC;
|
|
140
|
-
--brand-purple: #C7D2FE; /* the ink, softened: gradient text and ink on the deep field */
|
|
141
|
-
--brand-strong: #2E2A5E; /* the deep field the softened ink sits on */
|
|
142
|
-
--brand-strong-text: #ffffff;
|
|
143
|
-
--brand-strong-text-muted: rgba(255, 255, 255, 0.7);
|
|
144
|
-
--brand-strong-text-dim: rgba(255, 255, 255, 0.5);
|
|
145
|
-
--brand-glow: var(--accent-text);
|
|
146
|
-
--brand-vibrant: var(--brand-primary);
|
|
147
|
-
--btn-primary-bg: hsl(var(--hsl-primary));
|
|
148
|
-
--btn-primary-hover: #5a50d6;
|
|
149
|
-
--btn-primary-text: #ffffff;
|
|
150
|
-
--btn-cta-bg: var(--btn-primary-bg);
|
|
151
|
-
--btn-cta-text: var(--btn-primary-text);
|
|
152
|
-
--sidebar-primary: var(--hsl-primary);
|
|
153
|
-
--sidebar-primary-foreground: var(--hsl-primary-foreground);
|
|
154
|
-
--sidebar-ring: var(--hsl-ring);
|
|
155
|
-
--md3-primary: var(--accent-text);
|
|
156
|
-
--md3-primary-dim: var(--brand-primary);
|
|
157
|
-
--md3-primary-container: var(--btn-primary-bg);
|
|
158
|
-
--md3-on-primary: #ffffff;
|
|
159
|
-
--md3-on-primary-container: var(--brand-purple);
|
|
160
|
-
--md3-primary-fixed: var(--accent-text);
|
|
161
|
-
--md3-primary-fixed-dim: var(--brand-cool);
|
|
162
|
-
--md3-secondary: var(--brand-purple);
|
|
163
|
-
--md3-secondary-dim: var(--accent-text);
|
|
164
|
-
--md3-secondary-container: var(--brand-strong);
|
|
165
|
-
--md3-on-secondary: var(--brand-purple);
|
|
166
|
-
--md3-on-secondary-container: var(--brand-purple);
|
|
167
|
-
--md3-inverse-primary: var(--btn-primary-bg);
|
|
168
|
-
--md3-surface-tint: var(--accent-text);
|
|
169
|
-
/* Accent wells: soft is the hover neutral, strong the active or selected row. */
|
|
170
|
-
--accent-surface-soft: color-mix(in srgb, var(--accent-text) 7%, transparent);
|
|
171
|
-
--accent-surface-strong: color-mix(in srgb, var(--btn-primary-bg) 30%, transparent);
|
|
172
|
-
--bg-hover: var(--accent-surface-soft);
|
|
173
|
-
--bg-selection: color-mix(in srgb, var(--brand-primary) 28%, transparent);
|
|
174
|
-
--border-accent: color-mix(in srgb, var(--brand-cool) 35%, transparent);
|
|
175
|
-
--border-accent-hover: color-mix(in srgb, var(--brand-cool) 50%, transparent);
|
|
176
|
-
/* The indigo spark, kept ONLY for the logo mark and the send button. */
|
|
177
|
-
--tangle-gradient: linear-gradient(135deg, var(--btn-primary-bg), var(--accent-text));
|
|
178
|
-
--tangle-gradient-text: linear-gradient(135deg, var(--brand-purple), var(--accent-text));
|
|
179
|
-
--accent-gradient-strong: linear-gradient(135deg, var(--btn-primary-bg), var(--brand-primary));
|
|
180
|
-
|
|
181
|
-
/* ── Status: one ink, one wash, one border per hue ──────────────────────
|
|
182
|
-
* The ink is pastel on purpose. A saturated fill vibrates on a 6% canvas,
|
|
183
|
-
* and the ink already clears AA on every plane, so it is also the fill: a
|
|
184
|
-
* status fill carries dark text, as the destructive one always has. The
|
|
185
|
-
* shadcn channels are the source; the surface, status, md3, code and brand
|
|
186
|
-
* names of each hue alias them. */
|
|
187
|
-
--hsl-success: 154.7 60.2% 60.6%; /* #5ed7a4 */
|
|
188
|
-
--hsl-warning: 41.5 88.2% 63.3%; /* #f4c14f */
|
|
189
|
-
--hsl-destructive: 2.8 100% 83.1%; /* #ffada9 */
|
|
190
|
-
--hsl-destructive-foreground: 0 60% 10%;
|
|
191
|
-
--hsl-info: 199.7 100% 70.2%; /* #67cdff */
|
|
192
|
-
--surface-success-text: hsl(var(--hsl-success));
|
|
193
|
-
--surface-success-bg: #2f5146;
|
|
194
|
-
--surface-success-border: #3c7760;
|
|
195
|
-
--surface-warning-text: hsl(var(--hsl-warning));
|
|
196
|
-
--surface-warning-bg: #4b4232;
|
|
197
|
-
--surface-warning-border: #7a6236;
|
|
198
|
-
--surface-danger-text: hsl(var(--hsl-destructive));
|
|
199
|
-
--surface-danger-bg: #5a3b40;
|
|
200
|
-
--surface-danger-border: #7d4d53;
|
|
201
|
-
--surface-info-text: hsl(var(--hsl-info));
|
|
202
|
-
--surface-info-bg: #2d4e67;
|
|
203
|
-
--surface-info-border: #3d7292;
|
|
204
|
-
--status-running: var(--surface-success-text);
|
|
205
|
-
--status-creating: var(--accent-text);
|
|
206
|
-
--status-stopped: var(--surface-warning-text);
|
|
207
|
-
--status-warm: var(--surface-orange-text);
|
|
208
|
-
--status-cold: var(--surface-info-text);
|
|
209
|
-
--status-error: var(--surface-danger-text);
|
|
210
|
-
--status-deleted: var(--text-dim);
|
|
211
|
-
--brand-emerald: var(--surface-success-text);
|
|
212
|
-
--md3-tertiary: var(--surface-success-text);
|
|
213
|
-
--md3-tertiary-container: var(--surface-success-bg);
|
|
214
|
-
--md3-error: var(--surface-danger-text);
|
|
215
|
-
--md3-error-dim: color-mix(in srgb, var(--md3-error) 85%, black);
|
|
216
|
-
--md3-error-container: var(--surface-danger-bg);
|
|
217
|
-
--md3-on-error: hsl(var(--hsl-destructive-foreground));
|
|
218
|
-
--md3-on-error-container: var(--surface-danger-text);
|
|
219
|
-
/* ── shadcn aliases: the names @tangle-network/ui and Tailwind read ─────
|
|
220
|
-
* Declared once; they re-resolve per theme through the --hsl-* spine. --input
|
|
221
|
-
* is the input BORDER and the Switch off-track, a mid-tone that must stay
|
|
222
|
-
* visible against a surface, so it is NOT the field fill (--bg-input). */
|
|
223
|
-
--background: var(--hsl-background);
|
|
224
|
-
--foreground: var(--hsl-foreground);
|
|
225
|
-
--card: var(--hsl-card);
|
|
226
|
-
--card-foreground: var(--hsl-card-foreground);
|
|
227
|
-
--popover: var(--hsl-popover);
|
|
228
|
-
--popover-foreground: var(--hsl-popover-foreground);
|
|
229
|
-
--primary: var(--hsl-primary);
|
|
230
|
-
--primary-foreground: var(--hsl-primary-foreground);
|
|
231
|
-
--secondary: var(--hsl-secondary);
|
|
232
|
-
--secondary-foreground: var(--hsl-secondary-foreground);
|
|
233
|
-
--muted: var(--hsl-muted);
|
|
234
|
-
--muted-foreground: var(--hsl-muted-foreground);
|
|
235
|
-
--accent: var(--hsl-accent);
|
|
236
|
-
--accent-foreground: var(--hsl-accent-foreground);
|
|
237
|
-
--destructive: var(--hsl-destructive);
|
|
238
|
-
--destructive-foreground: var(--hsl-destructive-foreground);
|
|
239
|
-
--border: var(--hsl-border);
|
|
240
|
-
--input: var(--hsl-muted-foreground);
|
|
241
|
-
--ring: var(--hsl-ring);
|
|
242
|
-
--success: var(--hsl-success);
|
|
243
|
-
--warning: var(--hsl-warning);
|
|
244
|
-
--error: var(--hsl-destructive);
|
|
245
|
-
--info: var(--hsl-info);
|
|
246
|
-
|
|
24
|
+
--hsl-background: 246.6667 31.0345% 5.6863%; /* #0b0a13 */
|
|
25
|
+
--hsl-input: 245 26.087% 9.0196%; /* #12111d */
|
|
26
|
+
--hsl-card: 244.2857 22.5806% 12.1569%; /* #191826 */
|
|
27
|
+
--hsl-secondary: 243.3333 20.4545% 17.2549%; /* #242335 */
|
|
28
|
+
--hsl-popover: 242.7273 18.9655% 22.7451%; /* #302f45 */
|
|
29
|
+
--hsl-muted: var(--hsl-secondary); --hsl-accent: var(--hsl-secondary);
|
|
30
|
+
--md3-surface-dim: hsl(240 33.3333% 2.3529%);
|
|
31
|
+
--md3-surface-container-lowest: var(--md3-surface-dim); --md3-surface-bright: hsl(var(--hsl-popover));
|
|
32
|
+
--md3-surface: hsl(var(--hsl-background)); --md3-surface-container-low: hsl(var(--hsl-input));
|
|
33
|
+
--md3-surface-container: hsl(var(--hsl-card)); --md3-surface-container-high: hsl(var(--hsl-secondary));
|
|
34
|
+
--md3-surface-container-highest: hsl(var(--hsl-popover)); --md3-surface-variant: var(--md3-surface-container-high);
|
|
35
|
+
--depth-1: var(--md3-surface); --depth-2: var(--md3-surface-container);
|
|
36
|
+
--depth-3: var(--md3-surface-container-high); --depth-4: var(--md3-surface-container-highest);
|
|
37
|
+
--bg-root: var(--depth-1); --bg-dark: var(--depth-1);
|
|
38
|
+
--bg-card: var(--depth-2); --bg-elevated: var(--depth-4);
|
|
39
|
+
--bg-section: var(--depth-1); --bg-input: hsl(var(--hsl-input));
|
|
40
|
+
--sidebar-background: var(--hsl-input); --sidebar-accent: var(--hsl-secondary);
|
|
41
|
+
--md3-inverse-surface: hsl(0 0% 100%); --md3-inverse-on-surface: hsl(0 0% 0%);
|
|
42
|
+
--hsl-foreground: 0 0% 84.3137%; /* #d7d7d7 */
|
|
43
|
+
--hsl-muted-foreground: 0 0% 67.0588%; /* #ababab */
|
|
44
|
+
--text-primary: hsl(var(--hsl-foreground)); --text-secondary: hsl(0 0% 74.1176%);
|
|
45
|
+
--text-muted: hsl(0 0% 67.0588%); --text-dim: hsl(0 0% 60.3922%);
|
|
46
|
+
--hsl-card-foreground: var(--hsl-foreground); --hsl-popover-foreground: var(--hsl-foreground);
|
|
47
|
+
--hsl-secondary-foreground: var(--hsl-foreground); --hsl-accent-foreground: var(--hsl-foreground);
|
|
48
|
+
--sidebar-foreground: var(--hsl-foreground); --sidebar-accent-foreground: var(--hsl-foreground);
|
|
49
|
+
--md3-on-surface: var(--text-primary); --md3-on-surface-variant: var(--text-muted);
|
|
50
|
+
--md3-outline: hsl(var(--hsl-muted-foreground));
|
|
51
|
+
--hsl-border: 245 18.4615% 25.4902%; /* #37354d */
|
|
52
|
+
--md3-outline-variant: hsl(var(--hsl-border)); --sidebar-border: var(--hsl-border);
|
|
53
|
+
--border-subtle: hsl(var(--hsl-border)); --border-default: hsl(var(--hsl-border));
|
|
54
|
+
--border-hover: rgb(215 215 215 / 0.28);
|
|
55
|
+
--hsl-primary: 245.9504 54.2601% 56.2745%; /* #5f53cc */
|
|
56
|
+
--hsl-primary-foreground: 0 0% 100%; /* #ffffff */ --hsl-ring: 245.5556 93.1034% 88.6275%; /* #ccc7fd */
|
|
57
|
+
--brand-primary: hsl(245.5102 65.3333% 70.5882%); --brand-cool: hsl(246.0465 85.4305% 70.3922%);
|
|
58
|
+
--accent-text: hsl(245.5556 93.1034% 88.6275%); --brand-purple: hsl(245.1429 94.5946% 92.7451%);
|
|
59
|
+
--brand-strong: hsl(246 41.6667% 28.2353%);
|
|
60
|
+
--brand-strong-text: hsl(0 0% 100%); --brand-strong-text-muted: rgba(255, 255, 255, 0.7);
|
|
61
|
+
--brand-strong-text-dim: rgba(255, 255, 255, 0.5); --brand-glow: var(--accent-text);
|
|
62
|
+
--brand-vibrant: var(--brand-primary); --btn-primary-bg: hsl(var(--hsl-primary));
|
|
63
|
+
--btn-primary-hover: hsl(246.055 54.2289% 60.5882%); --btn-primary-text: hsl(0 0% 100%);
|
|
64
|
+
--btn-cta-bg: var(--btn-primary-bg); --btn-cta-text: var(--btn-primary-text);
|
|
65
|
+
--sidebar-primary: var(--hsl-primary); --sidebar-primary-foreground: var(--hsl-primary-foreground);
|
|
66
|
+
--sidebar-ring: var(--hsl-ring); --md3-primary: var(--accent-text);
|
|
67
|
+
--md3-primary-dim: var(--btn-primary-bg); --md3-primary-container: var(--btn-primary-bg);
|
|
68
|
+
--md3-on-primary: hsl(0 0% 100%); --md3-on-primary-container: var(--brand-purple);
|
|
69
|
+
--md3-primary-fixed: var(--accent-text); --md3-primary-fixed-dim: var(--brand-cool);
|
|
70
|
+
--md3-secondary: var(--brand-purple); --md3-secondary-dim: var(--accent-text);
|
|
71
|
+
--md3-secondary-container: var(--brand-strong); --md3-on-secondary: var(--brand-purple);
|
|
72
|
+
--md3-on-secondary-container: var(--brand-purple); --md3-inverse-primary: var(--btn-primary-bg);
|
|
73
|
+
--md3-surface-tint: var(--accent-text); --accent-surface-soft: color-mix(in srgb, var(--accent-text) 7%, transparent);
|
|
74
|
+
--accent-surface-strong: color-mix(in srgb, var(--btn-primary-bg) 30%, transparent); --bg-hover: color-mix(in srgb, var(--accent-text) 7%, transparent);
|
|
75
|
+
--bg-selection: color-mix(in srgb, var(--btn-primary-bg) 28%, transparent); --border-accent: color-mix(in srgb, var(--brand-cool) 35%, transparent);
|
|
76
|
+
--border-accent-hover: color-mix(in srgb, var(--brand-cool) 50%, transparent); --tangle-gradient: linear-gradient(135deg, var(--btn-primary-bg), var(--btn-primary-hover));
|
|
77
|
+
--tangle-gradient-text: linear-gradient(135deg, var(--brand-purple), var(--accent-text)); --accent-gradient-strong: linear-gradient(135deg, var(--btn-primary-bg), var(--btn-primary-hover));
|
|
78
|
+
--hsl-success: 155.1429 64.8148% 78.8235%; /* #a6eccf */
|
|
79
|
+
--hsl-warning: 38.5714 65.1163% 83.1373%; /* #f0dcb8 */
|
|
80
|
+
--hsl-destructive: 0 74.4681% 90.7843%; /* #f9d6d6 */
|
|
81
|
+
--hsl-destructive-foreground: 0 0% 0%; /* #000000 */ --hsl-info: 201.7021 66.1972% 86.0784%; /* #c4e2f3 */
|
|
82
|
+
--surface-success-text: hsl(var(--hsl-success)); --surface-success-bg: #21342c;
|
|
83
|
+
--surface-success-border: #496b5d; --surface-warning-text: hsl(var(--hsl-warning));
|
|
84
|
+
--surface-warning-bg: #362f22; --surface-warning-border: #6e634f;
|
|
85
|
+
--surface-danger-text: hsl(var(--hsl-destructive)); --surface-danger-bg: #412a2a;
|
|
86
|
+
--surface-danger-border: #785e5e; --surface-info-text: hsl(var(--hsl-info));
|
|
87
|
+
--surface-info-bg: #243239; --surface-info-border: #546771;
|
|
88
|
+
--status-running: var(--surface-success-text); --status-creating: var(--accent-text);
|
|
89
|
+
--status-stopped: var(--surface-warning-text); --status-warm: var(--surface-orange-text);
|
|
90
|
+
--status-cold: var(--surface-info-text); --status-error: var(--surface-danger-text);
|
|
91
|
+
--status-deleted: var(--text-dim); --brand-emerald: var(--surface-success-text);
|
|
92
|
+
--md3-tertiary: var(--surface-success-text); --md3-tertiary-container: var(--surface-success-bg);
|
|
93
|
+
--md3-error: var(--surface-danger-text); --md3-error-dim: color-mix(in srgb, var(--md3-error) 85%, black);
|
|
94
|
+
--md3-error-container: var(--surface-danger-bg); --md3-on-error: hsl(var(--hsl-destructive-foreground));
|
|
95
|
+
--md3-on-error-container: var(--surface-danger-text); --background: var(--hsl-background);
|
|
96
|
+
--foreground: var(--hsl-foreground); --card: var(--hsl-card);
|
|
97
|
+
--card-foreground: var(--hsl-card-foreground); --popover: var(--hsl-popover);
|
|
98
|
+
--popover-foreground: var(--hsl-popover-foreground); --primary: var(--hsl-primary);
|
|
99
|
+
--primary-foreground: var(--hsl-primary-foreground); --secondary: var(--hsl-secondary);
|
|
100
|
+
--secondary-foreground: var(--hsl-secondary-foreground); --muted: var(--hsl-muted);
|
|
101
|
+
--muted-foreground: var(--hsl-muted-foreground); --accent: var(--hsl-accent);
|
|
102
|
+
--accent-foreground: var(--hsl-accent-foreground); --destructive: var(--hsl-destructive);
|
|
103
|
+
--destructive-foreground: var(--hsl-destructive-foreground); --border: var(--hsl-border);
|
|
104
|
+
--input: var(--hsl-muted-foreground); --ring: var(--hsl-ring);
|
|
105
|
+
--success: var(--hsl-success); --warning: var(--hsl-warning);
|
|
106
|
+
--error: var(--hsl-destructive); --info: var(--hsl-info);
|
|
247
107
|
/* tones:begin — generated by scripts/gen-ladders.mjs; edit its CATEGORY map, not these lines. */
|
|
248
|
-
--tone-violet-bg:
|
|
249
|
-
--tone-violet-bg-hover:
|
|
250
|
-
--tone-violet-bg-selected:
|
|
251
|
-
--tone-violet-border:
|
|
252
|
-
--tone-violet-border-selected:
|
|
253
|
-
--tone-violet-text:
|
|
254
|
-
--tone-violet-icon:
|
|
255
|
-
--tone-
|
|
256
|
-
--tone-
|
|
257
|
-
--tone-
|
|
258
|
-
--tone-
|
|
259
|
-
--tone-
|
|
260
|
-
--tone-orange-
|
|
261
|
-
--tone-orange-
|
|
262
|
-
--tone-
|
|
263
|
-
--tone-
|
|
264
|
-
--tone-
|
|
265
|
-
--tone-
|
|
266
|
-
--tone-
|
|
267
|
-
--tone-
|
|
268
|
-
--tone-
|
|
269
|
-
--tone-
|
|
270
|
-
--tone-
|
|
271
|
-
--tone-
|
|
272
|
-
--tone-
|
|
273
|
-
--tone-
|
|
274
|
-
--tone-
|
|
275
|
-
--tone-
|
|
276
|
-
--tone-
|
|
277
|
-
--tone-
|
|
278
|
-
--tone-
|
|
279
|
-
--tone-
|
|
280
|
-
--tone-
|
|
281
|
-
--tone-
|
|
282
|
-
--tone-
|
|
283
|
-
--tone-
|
|
284
|
-
--tone-
|
|
285
|
-
--tone-
|
|
286
|
-
--tone-
|
|
287
|
-
--tone-
|
|
288
|
-
--tone-
|
|
289
|
-
--tone-
|
|
290
|
-
--tone-
|
|
291
|
-
--tone-
|
|
292
|
-
--tone-
|
|
293
|
-
--tone-
|
|
294
|
-
--tone-
|
|
295
|
-
--tone-
|
|
296
|
-
--tone-
|
|
297
|
-
--tone-
|
|
298
|
-
--tone-
|
|
299
|
-
--tone-
|
|
300
|
-
--tone-
|
|
301
|
-
--tone-
|
|
302
|
-
--tone-
|
|
303
|
-
--tone-
|
|
304
|
-
--
|
|
305
|
-
--
|
|
306
|
-
--
|
|
307
|
-
--
|
|
308
|
-
--
|
|
309
|
-
--
|
|
310
|
-
--
|
|
311
|
-
--
|
|
312
|
-
--
|
|
108
|
+
--tone-violet-bg: hsl(270.8108 31.6239% 22.9412%);
|
|
109
|
+
--tone-violet-bg-hover: hsl(271.4286 31.3433% 26.2745%);
|
|
110
|
+
--tone-violet-bg-selected: hsl(271.9149 31.5436% 29.2157%);
|
|
111
|
+
--tone-violet-border: hsl(272.1739 27.49% 49.2157%);
|
|
112
|
+
--tone-violet-border-selected: hsl(272.4 79.3651% 75.2941%);
|
|
113
|
+
--tone-violet-text: hsl(272 81.0811% 85.4902%);
|
|
114
|
+
--tone-violet-icon: hsl(272.4 79.3651% 75.2941%);
|
|
115
|
+
--tone-violet-fill: 272.1081 80.0866% 54.7059%;
|
|
116
|
+
--tone-violet-ring: 272.5424 80.8219% 85.6863%;
|
|
117
|
+
--tone-violet-mark: hsl(272.4 79.3651% 75.2941%);
|
|
118
|
+
--tone-violet-line: hsl(272.4 79.3651% 75.2941%);
|
|
119
|
+
--tone-violet-ink: hsl(272.5424 80.8219% 85.6863%);
|
|
120
|
+
--tone-orange-bg: hsl(23.2258 32.6316% 18.6275%);
|
|
121
|
+
--tone-orange-bg-hover: hsl(21.6667 32.7273% 21.5686%);
|
|
122
|
+
--tone-orange-bg-selected: hsl(22.5 32.7869% 23.9216%);
|
|
123
|
+
--tone-orange-border: hsl(22.4176 43.5407% 40.9804%);
|
|
124
|
+
--tone-orange-border-selected: hsl(22.2517 79.8942% 62.9412%);
|
|
125
|
+
--tone-orange-text: hsl(22.5 80% 78.4314%);
|
|
126
|
+
--tone-orange-icon: hsl(22.2517 79.8942% 62.9412%);
|
|
127
|
+
--tone-orange-fill: 22 79.7872% 36.8627%;
|
|
128
|
+
--tone-orange-ring: 22.1429 80.7692% 79.6078%;
|
|
129
|
+
--tone-orange-mark: hsl(22.2517 79.8942% 62.9412%);
|
|
130
|
+
--tone-orange-line: hsl(22.2517 79.8942% 62.9412%);
|
|
131
|
+
--tone-orange-ink: hsl(22.1429 80.7692% 79.6078%);
|
|
132
|
+
--tone-teal-bg: hsl(170.7692 32.5% 15.6863%);
|
|
133
|
+
--tone-teal-bg-hover: hsl(172 32.6087% 18.0392%);
|
|
134
|
+
--tone-teal-bg-selected: hsl(172.5 31.3725% 20%);
|
|
135
|
+
--tone-teal-border: hsl(171.7895 66.4336% 28.0392%);
|
|
136
|
+
--tone-teal-border-selected: hsl(171.9512 79.6117% 40.3922%);
|
|
137
|
+
--tone-teal-text: hsl(171.9 80% 49.0196%);
|
|
138
|
+
--tone-teal-icon: hsl(171.9512 79.6117% 40.3922%);
|
|
139
|
+
--tone-teal-fill: 172.2772 79.5276% 24.902%;
|
|
140
|
+
--tone-teal-ring: 171.7647 80.315% 49.8039%;
|
|
141
|
+
--tone-teal-mark: hsl(171.9512 79.6117% 40.3922%);
|
|
142
|
+
--tone-teal-line: hsl(171.9512 79.6117% 40.3922%);
|
|
143
|
+
--tone-teal-ink: hsl(171.7647 80.315% 49.8039%);
|
|
144
|
+
--tone-blue-bg: hsl(208.125 32.6531% 19.2157%);
|
|
145
|
+
--tone-blue-bg-hover: hsl(208.3333 32.1429% 21.9608%);
|
|
146
|
+
--tone-blue-bg-selected: hsl(208.5 31.746% 24.7059%);
|
|
147
|
+
--tone-blue-border: hsl(209.3023 39.4495% 42.7451%);
|
|
148
|
+
--tone-blue-border-selected: hsl(209.1429 80.4598% 65.8824%);
|
|
149
|
+
--tone-blue-text: hsl(208.9157 80.5825% 79.8039%);
|
|
150
|
+
--tone-blue-icon: hsl(209.1429 80.4598% 65.8824%);
|
|
151
|
+
--tone-blue-fill: 209.0683 80.0995% 39.4118%;
|
|
152
|
+
--tone-blue-ring: 208.4211 79.1667% 81.1765%;
|
|
153
|
+
--tone-blue-mark: hsl(209.1429 80.4598% 65.8824%);
|
|
154
|
+
--tone-blue-line: hsl(209.1429 80.4598% 65.8824%);
|
|
155
|
+
--tone-blue-ink: hsl(208.4211 79.1667% 81.1765%);
|
|
156
|
+
--tone-pink-bg: hsl(322.9412 31.4815% 21.1765%);
|
|
157
|
+
--tone-pink-bg-hover: hsl(322.5 32.2581% 24.3137%);
|
|
158
|
+
--tone-pink-bg-selected: hsl(323.1818 31.8841% 27.0588%);
|
|
159
|
+
--tone-pink-border: hsl(322.7027 31.0924% 46.6667%);
|
|
160
|
+
--tone-pink-border-selected: hsl(322.4348 80.4196% 71.9608%);
|
|
161
|
+
--tone-pink-text: hsl(322.7273 80.4878% 83.9216%);
|
|
162
|
+
--tone-pink-icon: hsl(322.4348 80.4196% 71.9608%);
|
|
163
|
+
--tone-pink-fill: 322 80.3571% 43.9216%;
|
|
164
|
+
--tone-pink-ring: 322.7273 80.4878% 83.9216%;
|
|
165
|
+
--tone-pink-mark: hsl(322.4348 80.4196% 71.9608%);
|
|
166
|
+
--tone-pink-line: hsl(322.4348 80.4196% 71.9608%);
|
|
167
|
+
--tone-pink-ink: hsl(322.7273 80.4878% 83.9216%);
|
|
168
|
+
--tone-brown-bg: hsl(24 31.9149% 18.4314%);
|
|
169
|
+
--tone-brown-bg-hover: hsl(24.7059 31.4815% 21.1765%);
|
|
170
|
+
--tone-brown-bg-selected: hsl(24.6154 32.2314% 23.7255%);
|
|
171
|
+
--tone-brown-border: hsl(24.2553 22.2749% 41.3725%);
|
|
172
|
+
--tone-brown-border-selected: hsl(24 35.5191% 64.1176%);
|
|
173
|
+
--tone-brown-text: hsl(24.6154 35.1351% 78.2353%);
|
|
174
|
+
--tone-brown-icon: hsl(24 35.5191% 64.1176%);
|
|
175
|
+
--tone-brown-fill: 23.662 36.0406% 38.6275%;
|
|
176
|
+
--tone-brown-ring: 25 35.2941% 80%;
|
|
177
|
+
--tone-brown-mark: hsl(24 35.5191% 64.1176%);
|
|
178
|
+
--tone-brown-line: hsl(24 35.5191% 64.1176%);
|
|
179
|
+
--tone-brown-ink: hsl(25 35.2941% 80%);
|
|
180
|
+
--tone-cyan-bg: hsl(192.8571 32.5581% 16.8627%);
|
|
181
|
+
--tone-cyan-bg-hover: hsl(191.25 32.6531% 19.2157%);
|
|
182
|
+
--tone-cyan-bg-selected: hsl(191.6667 32.7273% 21.5686%);
|
|
183
|
+
--tone-cyan-border: hsl(192.3214 68.2927% 32.1569%);
|
|
184
|
+
--tone-cyan-border-selected: hsl(192.0619 80.1653% 47.451%);
|
|
185
|
+
--tone-cyan-text: hsl(191.7188 80% 68.6275%);
|
|
186
|
+
--tone-cyan-icon: hsl(192.0619 80.1653% 47.451%);
|
|
187
|
+
--tone-cyan-fill: 192.3967 80.1325% 29.6078%;
|
|
188
|
+
--tone-cyan-ring: 191.8966 79.4521% 71.3725%;
|
|
189
|
+
--tone-cyan-mark: hsl(192.0619 80.1653% 47.451%);
|
|
190
|
+
--tone-cyan-line: hsl(192.0619 80.1653% 47.451%);
|
|
191
|
+
--tone-cyan-ink: hsl(191.8966 79.4521% 71.3725%);
|
|
192
|
+
--tone-lime-bg: hsl(82.5 30.7692% 15.2941%);
|
|
193
|
+
--tone-lime-bg-hover: hsl(84.8276 32.5843% 17.451%);
|
|
194
|
+
--tone-lime-bg-selected: hsl(84.375 32% 19.6078%);
|
|
195
|
+
--tone-lime-border: hsl(84 52.6316% 29.8039%);
|
|
196
|
+
--tone-lime-border-selected: hsl(84.2647 60.177% 44.3137%);
|
|
197
|
+
--tone-lime-text: hsl(83.6975 59.799% 60.9804%);
|
|
198
|
+
--tone-lime-icon: hsl(84.2647 60.177% 44.3137%);
|
|
199
|
+
--tone-lime-fill: 84.5783 59.7122% 27.2549%;
|
|
200
|
+
--tone-lime-ring: 84 60.4396% 64.3137%;
|
|
201
|
+
--tone-lime-mark: hsl(84.2647 60.177% 44.3137%);
|
|
202
|
+
--tone-lime-line: hsl(84.2647 60.177% 44.3137%);
|
|
203
|
+
--tone-lime-ink: hsl(84 60.4396% 64.3137%);
|
|
204
|
+
--surface-violet-bg: var(--tone-violet-bg);
|
|
205
|
+
--surface-violet-border: var(--tone-violet-border);
|
|
206
|
+
--surface-violet-text: var(--tone-violet-text);
|
|
207
|
+
--surface-orange-bg: var(--tone-orange-bg);
|
|
208
|
+
--surface-orange-border: var(--tone-orange-border);
|
|
209
|
+
--surface-orange-text: var(--tone-orange-text);
|
|
210
|
+
--surface-teal-bg: var(--tone-teal-bg);
|
|
211
|
+
--surface-teal-border: var(--tone-teal-border);
|
|
212
|
+
--surface-teal-text: var(--tone-teal-text);
|
|
313
213
|
/* tones:end */
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
* carry a glyph or a label, so its slices must ALSO separate from each other
|
|
319
|
-
* in greyscale. These five are spaced at least 1.18:1 apart in relative
|
|
320
|
-
* luminance — 1.30 in dark, 1.20 in light, where the ramp has less room
|
|
321
|
-
* before it runs into the paper — and each clears 3:1 against the track, so
|
|
322
|
-
* the mix stays countable with any form of colour blindness and in a
|
|
323
|
-
* monochrome screenshot. 1.18 is the floor the gate holds them to.
|
|
324
|
-
*
|
|
325
|
-
* Ranked by how much the reader needs to tell them apart: succeeded is
|
|
326
|
-
* brightest and cancelled quietest, so the two that matter — succeeded and
|
|
327
|
-
* failed — sit at opposite ends and can never be confused.
|
|
328
|
-
*
|
|
329
|
-
* Spacing them by OKLCH lightness does NOT work: that is perceptual, and the
|
|
330
|
-
* contrast ratio is computed from relative luminance, so an even perceptual
|
|
331
|
-
* ramp left every pair at 1.1:1. Solved in luminance space instead. */
|
|
332
|
-
--run-mix-succeeded: #76edb9;
|
|
333
|
-
--run-mix-waiting: #e9b642;
|
|
334
|
-
--run-mix-failed: #e1918e;
|
|
335
|
-
--run-mix-in-flight: #2d9bca;
|
|
336
|
-
--run-mix-cancelled: #767d90;
|
|
337
|
-
|
|
338
|
-
--surface-neutral-bg: var(--depth-3);
|
|
339
|
-
--surface-neutral-border: var(--border-subtle);
|
|
214
|
+
--run-mix-succeeded: hsl(154.9315 59.8361% 47.8431%); --run-mix-waiting: hsl(37.7483 60.1594% 49.2157%);
|
|
215
|
+
--run-mix-failed: hsl(0 60.4278% 63.3333%); --run-mix-in-flight: hsl(200.8889 60% 44.1176%);
|
|
216
|
+
--run-mix-cancelled: hsl(229.2857 11.7647% 46.6667%);
|
|
217
|
+
--surface-neutral-bg: var(--depth-3); --surface-neutral-border: var(--border-subtle);
|
|
340
218
|
--surface-neutral-text: var(--text-muted);
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
--glass-bg: var(--depth-2);
|
|
344
|
-
--glass-bg-strong: var(--depth-3);
|
|
345
|
-
--glass-border: var(--border-subtle);
|
|
346
|
-
--glass-border-hover: var(--border-hover);
|
|
219
|
+
--glass-bg: var(--depth-2); --glass-bg-strong: var(--depth-3);
|
|
220
|
+
--glass-border: var(--border-subtle); --glass-border-hover: var(--border-hover);
|
|
347
221
|
--glass-blur: 0px;
|
|
348
|
-
|
|
349
|
-
/* Mesh glows — off; depth comes from the ladder, not from glow */
|
|
350
|
-
--mesh-teal: transparent;
|
|
351
|
-
--mesh-violet: transparent;
|
|
222
|
+
--mesh-teal: transparent; --mesh-violet: transparent;
|
|
352
223
|
--mesh-blue: transparent;
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
--code-
|
|
360
|
-
--
|
|
361
|
-
--syntax-variable: var(--text-secondary);
|
|
362
|
-
--syntax-comment: var(--text-dim);
|
|
363
|
-
--syntax-keyword: var(--tone-violet-icon);
|
|
364
|
-
--syntax-meta: var(--accent-text);
|
|
365
|
-
--syntax-function: var(--surface-info-text);
|
|
366
|
-
--syntax-string: var(--surface-success-text);
|
|
367
|
-
--syntax-number: var(--surface-warning-text);
|
|
368
|
-
--syntax-error: var(--surface-danger-text);
|
|
369
|
-
--code-keyword: var(--syntax-keyword);
|
|
370
|
-
--code-string: var(--syntax-string);
|
|
371
|
-
--code-function: var(--syntax-function);
|
|
372
|
-
--code-number: var(--syntax-number);
|
|
373
|
-
--code-success: var(--surface-success-text);
|
|
374
|
-
--code-comment: var(--syntax-comment);
|
|
224
|
+
--code-header-bg: hsl(var(--hsl-background)); --syntax-foreground: var(--text-primary);
|
|
225
|
+
--syntax-variable: var(--text-secondary); --syntax-comment: var(--text-dim);
|
|
226
|
+
--syntax-keyword: var(--tone-violet-text); --syntax-meta: var(--accent-text);
|
|
227
|
+
--syntax-function: var(--surface-info-text); --syntax-string: var(--surface-success-text);
|
|
228
|
+
--syntax-number: var(--surface-warning-text); --syntax-error: var(--surface-danger-text);
|
|
229
|
+
--code-keyword: var(--syntax-keyword); --code-string: var(--syntax-string);
|
|
230
|
+
--code-function: var(--syntax-function); --code-number: var(--syntax-number);
|
|
231
|
+
--code-success: var(--surface-success-text); --code-comment: var(--syntax-comment);
|
|
375
232
|
--code-error: var(--syntax-error);
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
--shadow-card: 0
|
|
379
|
-
--
|
|
380
|
-
--shadow-
|
|
381
|
-
--shadow-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
--
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
--
|
|
399
|
-
--
|
|
400
|
-
--
|
|
401
|
-
--
|
|
402
|
-
--shadow-status-creating: none;
|
|
403
|
-
--shadow-status-error: none;
|
|
404
|
-
|
|
405
|
-
/* Radii */
|
|
406
|
-
--radius-sm: 6px;
|
|
407
|
-
--radius-md: 8px;
|
|
408
|
-
--radius-lg: 10px;
|
|
409
|
-
--radius-xl: 12px; /* chrome stays tight (was 16px) */
|
|
410
|
-
--radius-pill: 999px;
|
|
411
|
-
--radius-full: 999px;
|
|
412
|
-
--radius-composer: 26px; /* centered composer pill */
|
|
413
|
-
/* Radius by role. New surfaces pick the role they play; system.css repeats
|
|
414
|
-
these for pages that load it on its own ladders. */
|
|
415
|
-
--radius-tag: 4px;
|
|
416
|
-
--radius-chip: 8px;
|
|
417
|
-
--radius-field: 12px;
|
|
418
|
-
--radius-panel: 16px;
|
|
419
|
-
--radius-cover: 20px;
|
|
420
|
-
--radius-sheet: 24px;
|
|
421
|
-
--radius: 0.5rem; /* 8px chrome default (was 10px) */
|
|
422
|
-
|
|
423
|
-
/* Density */
|
|
424
|
-
--control-height: 2.25rem;
|
|
425
|
-
/* Control scale: Button, IconButton sizes, Input, Textarea and SelectTrigger
|
|
426
|
-
share one height and text size per size, so a row of mixed controls aligns.
|
|
427
|
-
md is --control-height, the density knob a subtree may override. */
|
|
428
|
-
--control-height-sm: 2rem; /* 32px */
|
|
429
|
-
--control-height-lg: 2.75rem; /* 44px — touch target */
|
|
430
|
-
--control-text-sm: 0.75rem; /* 12px */
|
|
431
|
-
--control-text-md: 0.875rem; /* 14px */
|
|
432
|
-
--control-text-lg: 1rem; /* 16px — fields never zoom on iOS */
|
|
433
|
-
/* Form text: labels name a field; help text describes or reports on it. */
|
|
434
|
-
--font-size-label: 0.875rem; /* 14px */
|
|
435
|
-
--font-size-help: 0.75rem; /* 12px */
|
|
436
|
-
--panel-padding: 1rem;
|
|
437
|
-
--content-max-width: 80rem;
|
|
438
|
-
/* Shell: every header row in the app shell (sidebar rail, main pane, side
|
|
439
|
-
panels, drawers, the assistant) is this tall, so their bottom dividers
|
|
440
|
-
share one y. Header content fills the row; it never sets the height.
|
|
441
|
-
An inset pane sits one gutter plus its 1px border below the shell top, so
|
|
442
|
-
its header is shorter by exactly that amount (see ShellHeader). */
|
|
443
|
-
--shell-header-height: 3.5rem; /* 56px */
|
|
444
|
-
--shell-inset-gutter: 0.5rem; /* 8px */
|
|
445
|
-
/* Transcript: the person's and the agent's messages share one family, size
|
|
446
|
-
and leading; they differ only by alignment and surface. */
|
|
447
|
-
--transcript-font-size: 1rem; /* 16px: the chat reading size */
|
|
233
|
+
--shadow-color: 0 0% 0%; /* #000000 */ --shadow-card: 0 1px 2px hsl(var(--shadow-color) / 0.3);
|
|
234
|
+
--shadow-dropdown: 0 8px 30px hsl(var(--shadow-color) / 0.45); --shadow-glow: none;
|
|
235
|
+
--shadow-accent: var(--shadow-card); --shadow-overlay: 0 2px 6px hsl(var(--shadow-color) / 0.3), 0 16px 40px hsl(var(--shadow-color) / 0.5);
|
|
236
|
+
--scrim: rgb(0 0 0 / 0.4); --scrim-strong: rgb(0 0 0 / 0.72);
|
|
237
|
+
--on-media: #ffffff; --shadow-status-running: none;
|
|
238
|
+
--shadow-status-creating: none; --shadow-status-error: none;
|
|
239
|
+
--radius-sm: 6px; --radius-md: 8px;
|
|
240
|
+
--radius-lg: 10px; --radius-xl: 12px;
|
|
241
|
+
--radius-pill: 999px; --radius-full: 999px;
|
|
242
|
+
--radius-composer: 26px;
|
|
243
|
+
--radius-tag: 4px; --radius-control: var(--radius-md);
|
|
244
|
+
--radius-card: var(--radius-xl); --radius-container: 16px;
|
|
245
|
+
--radius-chip: var(--radius-control); --radius-field: var(--radius-card);
|
|
246
|
+
--radius-panel: var(--radius-container); --radius-cover: 20px;
|
|
247
|
+
--radius-sheet: 24px; --radius: 0.5rem;
|
|
248
|
+
--control-height: 2.25rem; --control-height-sm: 2rem;
|
|
249
|
+
--control-height-lg: 2.75rem;
|
|
250
|
+
--control-text-sm: 0.75rem;
|
|
251
|
+
--control-text-md: 0.875rem;
|
|
252
|
+
--control-text-lg: 1rem;
|
|
253
|
+
--font-size-label: 0.875rem;
|
|
254
|
+
--font-size-help: 0.75rem;
|
|
255
|
+
--panel-padding: 1rem; --content-max-width: 80rem;
|
|
256
|
+
--shell-header-height: 3.5rem;
|
|
257
|
+
--shell-inset-gutter: 0.5rem;
|
|
258
|
+
--transcript-font-size: 1rem;
|
|
448
259
|
--transcript-line-height: var(--line-height-base);
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
--font-size-
|
|
454
|
-
--font-size-
|
|
455
|
-
--font-size-
|
|
456
|
-
--font-size-
|
|
457
|
-
--font-size-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
--
|
|
462
|
-
--
|
|
463
|
-
--
|
|
464
|
-
--
|
|
465
|
-
--
|
|
466
|
-
--
|
|
467
|
-
--
|
|
468
|
-
--
|
|
469
|
-
--
|
|
470
|
-
--
|
|
471
|
-
|
|
472
|
-
--
|
|
473
|
-
--
|
|
474
|
-
--tracking-wide: 0.08em; /* uppercase eyebrows / stat labels */
|
|
475
|
-
|
|
476
|
-
/* Expressive roles are opt-in; operational type and controls keep their scale. */
|
|
477
|
-
--tracking-display: -0.03em;
|
|
478
|
-
--hero-gutter: 1.5rem;
|
|
479
|
-
--hero-padding-top: clamp(5rem, 3rem + 5vw, 7rem);
|
|
480
|
-
--hero-padding-bottom: clamp(4rem, 2rem + 5vw, 6rem);
|
|
481
|
-
--display-max-width: 56rem;
|
|
482
|
-
--reading-max-width: 42rem;
|
|
483
|
-
--hero-action-gap: 0.75rem;
|
|
484
|
-
--hero-content-gap: 1.5rem;
|
|
485
|
-
--display-control-height: 2.875rem;
|
|
486
|
-
--display-control-radius: 0.625rem;
|
|
487
|
-
--display-control-font-size: 0.9375rem;
|
|
488
|
-
--display-control-shadow: inset 0 1px 0 rgb(255 255 255 / 0.18), 0 4px 16px hsl(var(--primary) / 0.2);
|
|
489
|
-
--display-gradient: linear-gradient(135deg, hsl(var(--foreground)) 10%, var(--accent-text) 70%);
|
|
490
|
-
--hero-grid-pitch: 3.5rem;
|
|
491
|
-
--hero-atmosphere-opacity: 0.16;
|
|
492
|
-
--hero-knot-opacity: 0.07;
|
|
493
|
-
--duration-expressive-entrance: 300ms;
|
|
494
|
-
--duration-expressive-ambient: 14s;
|
|
260
|
+
--font-size-xs: 0.75rem;
|
|
261
|
+
--font-size-sm: 0.875rem;
|
|
262
|
+
--font-size-base: 1rem;
|
|
263
|
+
--font-size-lg: 1.125rem;
|
|
264
|
+
--font-size-xl: 1.25rem;
|
|
265
|
+
--font-size-2xl: 1.5rem;
|
|
266
|
+
--font-size-3xl: 1.875rem;
|
|
267
|
+
--font-size-4xl: 2.25rem;
|
|
268
|
+
--font-size-hero: clamp(2rem, 1.2rem + 3.2vw, 3rem);
|
|
269
|
+
--font-size-display: clamp(2.5rem, 1.1rem + 5vw, 4rem);
|
|
270
|
+
--line-height-tight: 1.3; --line-height-base: 1.6;
|
|
271
|
+
--line-height-relaxed: 1.75; --line-height-display: 1.05;
|
|
272
|
+
--line-height-heading: 1.15;
|
|
273
|
+
--tracking-tight: -0.02em;
|
|
274
|
+
--tracking-snug: -0.01em;
|
|
275
|
+
--tracking-wide: 0.08em;
|
|
276
|
+
--tracking-display: -0.03em; --hero-gutter: 1.5rem;
|
|
277
|
+
--hero-padding-top: clamp(5rem, 3rem + 5vw, 7rem); --hero-padding-bottom: clamp(4rem, 2rem + 5vw, 6rem);
|
|
278
|
+
--display-max-width: 56rem; --reading-max-width: 42rem;
|
|
279
|
+
--hero-action-gap: 0.75rem; --hero-content-gap: 1.5rem;
|
|
280
|
+
--display-control-height: 2.875rem; --display-control-radius: 0.625rem;
|
|
281
|
+
--display-control-font-size: 0.9375rem; --display-control-shadow: inset 0 1px 0 rgb(255 255 255 / 0.18), 0 4px 16px hsl(var(--primary) / 0.2);
|
|
282
|
+
--display-gradient: linear-gradient(135deg, hsl(var(--foreground)) 10%, var(--accent-text) 70%); --hero-grid-pitch: 3.5rem;
|
|
283
|
+
--hero-atmosphere-opacity: 0.16; --hero-knot-opacity: 0.07;
|
|
284
|
+
--duration-expressive-entrance: 300ms; --duration-expressive-ambient: 14s;
|
|
495
285
|
--ease-expressive: cubic-bezier(0.16, 1, 0.3, 1);
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
--
|
|
499
|
-
--
|
|
500
|
-
--
|
|
501
|
-
--
|
|
502
|
-
--
|
|
503
|
-
--
|
|
504
|
-
--code-line-height: 1.5;
|
|
505
|
-
--chat-message-px: 0.875rem;
|
|
506
|
-
--chat-message-py: 0.5rem;
|
|
507
|
-
--chat-input-py: 0.625rem;
|
|
508
|
-
--card-padding: 1.25rem;
|
|
509
|
-
--tool-card-px: 0.75rem;
|
|
510
|
-
--tool-card-py: 0.5rem;
|
|
286
|
+
--avatar-size: 2rem;
|
|
287
|
+
--timeline-dot-size: 0.625rem;
|
|
288
|
+
--indicator-dot-size: 0.25rem;
|
|
289
|
+
--code-padding-x: 0.75rem; --code-padding-y: 0.625rem;
|
|
290
|
+
--code-font-size: 0.8125rem; --code-line-height: 1.5;
|
|
291
|
+
--chat-message-px: 0.875rem; --chat-message-py: 0.5rem;
|
|
292
|
+
--chat-input-py: 0.625rem; --card-padding: 1.25rem;
|
|
293
|
+
--tool-card-px: 0.75rem; --tool-card-py: 0.5rem;
|
|
511
294
|
--tool-icon-size: 1.75rem;
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
--
|
|
516
|
-
--
|
|
517
|
-
--duration-
|
|
518
|
-
--duration-
|
|
519
|
-
--duration-
|
|
520
|
-
--
|
|
521
|
-
--
|
|
522
|
-
--
|
|
523
|
-
--
|
|
524
|
-
--
|
|
525
|
-
--
|
|
526
|
-
--motion-surface: var(--duration-base) var(--ease-entrance);
|
|
527
|
-
--motion-dismiss: var(--duration-instant) var(--ease-exit);
|
|
528
|
-
--motion-stream: var(--duration-stream) var(--ease-expo);
|
|
529
|
-
--motion-arrive: var(--duration-arrive) var(--ease-expo);
|
|
530
|
-
|
|
531
|
-
/* Elapsed interaction thresholds, not animation durations. See
|
|
532
|
-
* docs/design-bible.md#interaction. Reduced motion leaves these unchanged. */
|
|
533
|
-
--interaction-feedback-budget: 100ms;
|
|
534
|
-
--interaction-pending-delay: 200ms;
|
|
535
|
-
--interaction-long-work-delay: 1000ms;
|
|
536
|
-
--interaction-mutation-budget: 500ms;
|
|
537
|
-
--stagger-step: 50ms;
|
|
538
|
-
--stagger-index: 0;
|
|
539
|
-
--arrive-distance: 8px;
|
|
540
|
-
--stream-blur: 4px;
|
|
541
|
-
|
|
542
|
-
/* Transitions — retain the existing Brand timings. */
|
|
543
|
-
--transition-fast: 0.1s ease;
|
|
544
|
-
--transition-default: 0.16s ease;
|
|
295
|
+
--duration-instant: 90ms; --duration-fast: 150ms;
|
|
296
|
+
--duration-base: 240ms; --duration-slow: 360ms;
|
|
297
|
+
--duration-stream: 420ms; --duration-arrive: 600ms;
|
|
298
|
+
--ease-standard: cubic-bezier(0.2, 0.8, 0.2, 1); --ease-entrance: cubic-bezier(0.22, 1, 0.36, 1);
|
|
299
|
+
--ease-exit: cubic-bezier(0.4, 0, 1, 1); --ease-expo: cubic-bezier(0.23, 1, 0.32, 1);
|
|
300
|
+
--motion-control: var(--duration-fast) var(--ease-standard); --motion-surface: var(--duration-base) var(--ease-entrance);
|
|
301
|
+
--motion-dismiss: var(--duration-instant) var(--ease-exit); --motion-stream: var(--duration-stream) var(--ease-expo);
|
|
302
|
+
--motion-arrive: var(--duration-arrive) var(--ease-expo); --duration-ambient: 2000ms;
|
|
303
|
+
--motion-ambient: var(--duration-ambient) ease-in-out;
|
|
304
|
+
--interaction-feedback-budget: 100ms; --interaction-pending-delay: 200ms;
|
|
305
|
+
--interaction-long-work-delay: 1000ms; --interaction-mutation-budget: 500ms;
|
|
306
|
+
--stagger-step: 50ms; --stagger-index: 0;
|
|
307
|
+
--arrive-distance: 8px; --stream-blur: 4px;
|
|
308
|
+
--transition-fast: 0.1s ease; --transition-default: 0.16s ease;
|
|
545
309
|
--transition-medium: 0.24s ease;
|
|
546
|
-
|
|
547
|
-
/* Fonts — unified on Inter (dark + light) */
|
|
548
|
-
--font-sans: "Inter Variable", "Inter", "Geist", ui-sans-serif, system-ui, -apple-system, sans-serif;
|
|
549
|
-
--font-display: "Inter Variable", "Inter", "Geist", sans-serif;
|
|
310
|
+
--font-sans: "Inter Variable", "Inter", "Geist", ui-sans-serif, system-ui, -apple-system, sans-serif; --font-display: "Inter Variable", "Inter", "Geist", sans-serif;
|
|
550
311
|
--font-mono: "Geist Mono", "JetBrains Mono", ui-monospace, monospace;
|
|
551
312
|
}
|
|
552
|
-
|
|
553
|
-
/* Light theme — reachable via the named `vault` theme or the standard
|
|
554
|
-
* `[data-theme="light"]` / `.light` switch. Both blocks are single-attribute/
|
|
555
|
-
* class selectors, and this one is later in source order, so when an element
|
|
556
|
-
* carries both `data-sandbox-ui` (dark) and `data-theme="light"`, light wins. */
|
|
557
313
|
[data-sandbox-theme="vault"]:where(:not(.dark)),
|
|
558
314
|
[data-sandbox-theme="dawn"]:where(:not(.dark)),
|
|
559
315
|
[data-theme="hospitality"]:where(:not(.dark)),
|
|
@@ -566,282 +322,181 @@
|
|
|
566
322
|
[data-theme="agents-light"],
|
|
567
323
|
.light {
|
|
568
324
|
color-scheme: light;
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
--hsl-background:
|
|
577
|
-
--
|
|
578
|
-
--hsl-
|
|
579
|
-
--hsl-
|
|
580
|
-
--
|
|
581
|
-
--
|
|
582
|
-
--
|
|
583
|
-
--
|
|
584
|
-
--
|
|
585
|
-
--
|
|
586
|
-
--md3-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
--
|
|
593
|
-
--
|
|
594
|
-
--
|
|
595
|
-
--text-
|
|
596
|
-
--
|
|
597
|
-
--
|
|
598
|
-
|
|
599
|
-
/*
|
|
600
|
-
--
|
|
601
|
-
--
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
* The fill is the same indigo as dark (it carries white at 7.4:1) and is
|
|
605
|
-
* also the ring: on paper it clears 3:1 as a line. The ink is the bright
|
|
606
|
-
* indigo at 6.1:1 on paper; the mark is the website's indigo. */
|
|
607
|
-
--hsl-ring: var(--hsl-primary);
|
|
608
|
-
--brand-primary: #6366F1;
|
|
609
|
-
--brand-purple: var(--brand-primary);
|
|
610
|
-
--accent-text: #3c32e9;
|
|
611
|
-
--md3-primary: var(--accent-text);
|
|
612
|
-
--md3-primary-dim: var(--btn-primary-bg);
|
|
613
|
-
--md3-on-primary-container: #ffffff;
|
|
614
|
-
--md3-primary-fixed: #E8E5FF; /* the accent tint: a chip or a selected row on paper */
|
|
615
|
-
--md3-primary-fixed-dim: color-mix(in srgb, var(--md3-primary-fixed) 85%, var(--accent-text));
|
|
616
|
-
--md3-secondary: var(--accent-text);
|
|
617
|
-
--md3-secondary-dim: var(--btn-primary-bg);
|
|
618
|
-
--md3-secondary-container: var(--md3-primary-fixed);
|
|
619
|
-
--md3-on-secondary: #ffffff;
|
|
620
|
-
--md3-on-secondary-container: var(--accent-text);
|
|
621
|
-
--md3-inverse-primary: #A5B4FC;
|
|
622
|
-
--md3-surface-tint: var(--brand-primary);
|
|
623
|
-
--accent-surface-soft: color-mix(in srgb, var(--btn-primary-bg) 5%, transparent);
|
|
624
|
-
--accent-surface-strong: color-mix(in srgb, var(--btn-primary-bg) 13%, transparent);
|
|
625
|
-
--bg-selection: color-mix(in srgb, var(--btn-primary-bg) 16%, transparent);
|
|
626
|
-
--border-accent: color-mix(in srgb, var(--btn-primary-hover) 18%, transparent);
|
|
627
|
-
--border-accent-hover: color-mix(in srgb, var(--btn-primary-hover) 35%, transparent);
|
|
628
|
-
--tangle-gradient: linear-gradient(135deg, var(--btn-primary-bg), var(--btn-primary-hover));
|
|
629
|
-
--tangle-gradient-text: var(--tangle-gradient);
|
|
630
|
-
--accent-gradient-strong: var(--tangle-gradient);
|
|
631
|
-
|
|
632
|
-
/* ── Status: the deep inks carry white, so each is its own fill too ─────── */
|
|
633
|
-
--hsl-success: 162.9 93.5% 24.3%; /* #047857 */
|
|
634
|
-
--hsl-warning: 25.9 90% 35.3%; /* #ab4f09 */
|
|
635
|
-
--hsl-destructive: 0 73.7% 41.8%; /* #b91c1c */
|
|
636
|
-
--hsl-destructive-foreground: 0 0% 100%;
|
|
637
|
-
--hsl-info: 201.3 96.3% 32.2%; /* #0369a1 */
|
|
638
|
-
--surface-success-bg: #ecfdf5;
|
|
639
|
-
--surface-success-border: #a7f3d0;
|
|
640
|
-
--surface-warning-bg: #fffbeb;
|
|
641
|
-
--surface-warning-border: #fde68a;
|
|
642
|
-
--surface-danger-bg: #fff1f2;
|
|
643
|
-
--surface-danger-border: #fecdd3;
|
|
644
|
-
--surface-info-bg: #f0f9ff;
|
|
645
|
-
--surface-info-border: #bae6fd;
|
|
325
|
+
--hsl-background: 225 26.6667% 94.1176%; /* #eceef4 */
|
|
326
|
+
--hsl-input: 231.4286 46.6667% 97.0588%; /* #f4f5fb */
|
|
327
|
+
--hsl-card: 0 0% 100%; /* #ffffff */
|
|
328
|
+
--hsl-secondary: 225 28.5714% 94.5098%; /* #edeff5 */
|
|
329
|
+
--hsl-popover: 0 0% 100%; /* #ffffff */
|
|
330
|
+
--md3-surface-dim: hsl(231.4286 11.4754% 88.0392%);
|
|
331
|
+
--md3-surface-container-lowest: hsl(var(--hsl-card));
|
|
332
|
+
--md3-surface-bright: hsl(var(--hsl-popover)); --sidebar-background: var(--hsl-card);
|
|
333
|
+
--md3-inverse-surface: hsl(0 0% 18.0392%); --md3-inverse-on-surface: hsl(0 0% 100%);
|
|
334
|
+
--hsl-foreground: 0 0% 24.7059%; /* #3f3f3f */
|
|
335
|
+
--hsl-muted-foreground: 0 0% 36.4706%; /* #5d5d5d */
|
|
336
|
+
--text-secondary: hsl(0 0% 31.3725%); --text-muted: hsl(0 0% 36.4706%);
|
|
337
|
+
--text-dim: hsl(0 0% 41.9608%); --md3-outline: hsl(var(--hsl-muted-foreground));
|
|
338
|
+
--hsl-border: 222.8571 6.6667% 79.4118%; /* #c7c9ce */
|
|
339
|
+
--border-hover: rgb(63 63 63 / 0.28);
|
|
340
|
+
--hsl-ring: 245.9504 54.2601% 56.2745%; /* #5f53cc */ --brand-primary: hsl(245.9091 64.7059% 60%);
|
|
341
|
+
--brand-purple: hsl(246.5217 92% 70.5882%); --accent-text: hsl(246.2264 92.1739% 54.902%);
|
|
342
|
+
--md3-primary: var(--accent-text); --md3-primary-dim: var(--btn-primary-bg);
|
|
343
|
+
--md3-on-primary-container: hsl(0 0% 100%); --md3-primary-fixed: hsl(246.9231 92.8571% 94.5098%);
|
|
344
|
+
--md3-primary-fixed-dim: color-mix(in srgb, var(--md3-primary-fixed) 85%, var(--accent-text)); --md3-secondary: var(--accent-text);
|
|
345
|
+
--md3-secondary-dim: var(--btn-primary-bg); --md3-secondary-container: var(--md3-primary-fixed);
|
|
346
|
+
--md3-on-secondary: hsl(0 0% 100%); --md3-on-secondary-container: var(--accent-text);
|
|
347
|
+
--md3-inverse-primary: hsl(246.0759 64.2276% 75.8824%); --md3-surface-tint: var(--accent-text);
|
|
348
|
+
--accent-surface-soft: color-mix(in srgb, var(--accent-text) 5%, transparent); --accent-surface-strong: color-mix(in srgb, var(--btn-primary-bg) 13%, transparent);
|
|
349
|
+
--bg-selection: color-mix(in srgb, var(--btn-primary-bg) 16%, transparent); --border-accent: color-mix(in srgb, var(--brand-cool) 20%, transparent);
|
|
350
|
+
--border-accent-hover: color-mix(in srgb, var(--brand-cool) 36%, transparent); --tangle-gradient: linear-gradient(135deg, var(--btn-primary-bg), var(--btn-primary-hover));
|
|
351
|
+
--tangle-gradient-text: var(--tangle-gradient); --accent-gradient-strong: linear-gradient(135deg, var(--btn-primary-bg), var(--btn-primary-hover));
|
|
352
|
+
--hsl-success: 154.8148 64.8% 24.5098%; /* #166745 */
|
|
353
|
+
--hsl-warning: 38.2979 65.2778% 28.2353%; /* #775519 */
|
|
354
|
+
--hsl-destructive: 0 75.1244% 39.4118%; /* #b01919 */
|
|
355
|
+
--hsl-destructive-foreground: 0 0% 100%; /* #ffffff */ --hsl-info: 201.1429 65.2174% 31.5686%; /* #1c6085 */
|
|
356
|
+
--surface-success-bg: #f1f6f4; --surface-success-border: #afcbc0;
|
|
357
|
+
--surface-warning-bg: #f7f5f1; --surface-warning-border: #d1c5b0;
|
|
358
|
+
--surface-danger-bg: #faf1f1; --surface-danger-border: #e4b0b0;
|
|
359
|
+
--surface-info-bg: #f1f5f8; --surface-info-border: #b1c8d6;
|
|
646
360
|
/* tones:begin — generated by scripts/gen-ladders.mjs; edit its CATEGORY map, not these lines. */
|
|
647
|
-
--tone-violet-bg:
|
|
648
|
-
--tone-violet-bg-hover:
|
|
649
|
-
--tone-violet-bg-selected:
|
|
650
|
-
--tone-violet-border:
|
|
651
|
-
--tone-violet-border-selected:
|
|
652
|
-
--tone-violet-text:
|
|
653
|
-
--tone-violet-icon:
|
|
654
|
-
--tone-
|
|
655
|
-
--tone-
|
|
656
|
-
--tone-
|
|
657
|
-
--tone-
|
|
658
|
-
--tone-
|
|
659
|
-
--tone-orange-
|
|
660
|
-
--tone-orange-
|
|
661
|
-
--tone-
|
|
662
|
-
--tone-
|
|
663
|
-
--tone-
|
|
664
|
-
--tone-
|
|
665
|
-
--tone-
|
|
666
|
-
--tone-
|
|
667
|
-
--tone-
|
|
668
|
-
--tone-
|
|
669
|
-
--tone-
|
|
670
|
-
--tone-
|
|
671
|
-
--tone-
|
|
672
|
-
--tone-
|
|
673
|
-
--tone-
|
|
674
|
-
--tone-
|
|
675
|
-
--tone-
|
|
676
|
-
--tone-
|
|
677
|
-
--tone-
|
|
678
|
-
--tone-
|
|
679
|
-
--tone-
|
|
680
|
-
--tone-
|
|
681
|
-
--tone-
|
|
682
|
-
--tone-
|
|
683
|
-
--tone-
|
|
684
|
-
--tone-
|
|
685
|
-
--tone-
|
|
686
|
-
--tone-
|
|
687
|
-
--tone-
|
|
688
|
-
--tone-
|
|
689
|
-
--tone-
|
|
690
|
-
--tone-
|
|
691
|
-
--tone-
|
|
692
|
-
--tone-
|
|
693
|
-
--tone-
|
|
694
|
-
--tone-
|
|
695
|
-
--tone-
|
|
696
|
-
--tone-
|
|
697
|
-
--tone-
|
|
698
|
-
--tone-
|
|
699
|
-
--tone-
|
|
700
|
-
--tone-
|
|
701
|
-
--tone-
|
|
702
|
-
--tone-
|
|
703
|
-
--
|
|
704
|
-
--
|
|
705
|
-
--
|
|
706
|
-
--
|
|
707
|
-
--
|
|
708
|
-
--
|
|
709
|
-
--
|
|
710
|
-
--
|
|
711
|
-
--
|
|
361
|
+
--tone-violet-bg: hsl(272.3077 86.6667% 97.0588%);
|
|
362
|
+
--tone-violet-bg-hover: hsl(272.7273 78.5714% 94.5098%);
|
|
363
|
+
--tone-violet-bg-selected: hsl(270.9091 80.4878% 91.9608%);
|
|
364
|
+
--tone-violet-border: hsl(272.5301 80.5825% 79.8039%);
|
|
365
|
+
--tone-violet-border-selected: hsl(272.1569 80.1047% 62.549%);
|
|
366
|
+
--tone-violet-text: hsl(272.1212 79.8387% 51.3725%);
|
|
367
|
+
--tone-violet-icon: hsl(272.1569 80.1047% 62.549%);
|
|
368
|
+
--tone-violet-fill: 272.1081 80.0866% 54.7059%;
|
|
369
|
+
--tone-violet-ring: 272.1081 80.0866% 54.7059%;
|
|
370
|
+
--tone-violet-mark: hsl(272.1569 80.1047% 62.549%);
|
|
371
|
+
--tone-violet-line: hsl(272.1569 80.1047% 62.549%);
|
|
372
|
+
--tone-violet-ink: hsl(271.8857 79.9087% 42.9412%);
|
|
373
|
+
--tone-orange-bg: hsl(20 42.8571% 95.8824%);
|
|
374
|
+
--tone-orange-bg-hover: hsl(20 47.3684% 92.549%);
|
|
375
|
+
--tone-orange-bg-selected: hsl(20 47.3684% 88.8235%);
|
|
376
|
+
--tone-orange-border: hsl(22.1053 62.9139% 70.3922%);
|
|
377
|
+
--tone-orange-border-selected: hsl(21.9672 79.9127% 44.902%);
|
|
378
|
+
--tone-orange-text: hsl(22.0833 80% 35.2941%);
|
|
379
|
+
--tone-orange-icon: hsl(21.9672 79.9127% 44.902%);
|
|
380
|
+
--tone-orange-fill: 22 79.7872% 36.8627%;
|
|
381
|
+
--tone-orange-ring: 22 79.7872% 36.8627%;
|
|
382
|
+
--tone-orange-mark: hsl(21.9672 79.9127% 44.902%);
|
|
383
|
+
--tone-orange-line: hsl(21.9672 79.9127% 44.902%);
|
|
384
|
+
--tone-orange-ink: hsl(22.314 80.1325% 29.6078%);
|
|
385
|
+
--tone-teal-bg: hsl(171.4286 28% 95.098%);
|
|
386
|
+
--tone-teal-bg-hover: hsl(175 26.087% 90.9804%);
|
|
387
|
+
--tone-teal-bg-selected: hsl(170.5263 27.5362% 86.4706%);
|
|
388
|
+
--tone-teal-border: hsl(171.8182 35.1064% 63.1373%);
|
|
389
|
+
--tone-teal-border-selected: hsl(172.32 79.6178% 30.7843%);
|
|
390
|
+
--tone-teal-text: hsl(172.1212 80.4878% 24.1176%);
|
|
391
|
+
--tone-teal-icon: hsl(172.32 79.6178% 30.7843%);
|
|
392
|
+
--tone-teal-fill: 172.2772 79.5276% 24.902%;
|
|
393
|
+
--tone-teal-ring: 172.2772 79.5276% 24.902%;
|
|
394
|
+
--tone-teal-mark: hsl(172.32 79.6178% 30.7843%);
|
|
395
|
+
--tone-teal-line: hsl(172.32 79.6178% 30.7843%);
|
|
396
|
+
--tone-teal-ink: hsl(172.0482 80.5825% 20.1961%);
|
|
397
|
+
--tone-blue-bg: hsl(210 50% 96.0784%);
|
|
398
|
+
--tone-blue-bg-hover: hsl(208.4211 51.3514% 92.7451%);
|
|
399
|
+
--tone-blue-bg-selected: hsl(208.9655 52.7273% 89.2157%);
|
|
400
|
+
--tone-blue-border: hsl(209.4231 74.2857% 72.549%);
|
|
401
|
+
--tone-blue-border-selected: hsl(209.0909 79.8387% 48.6275%);
|
|
402
|
+
--tone-blue-text: hsl(209.2308 79.5918% 38.4314%);
|
|
403
|
+
--tone-blue-icon: hsl(209.0909 79.8387% 48.6275%);
|
|
404
|
+
--tone-blue-fill: 209.0683 80.0995% 39.4118%;
|
|
405
|
+
--tone-blue-ring: 209.0683 80.0995% 39.4118%;
|
|
406
|
+
--tone-blue-mark: hsl(209.0909 79.8387% 48.6275%);
|
|
407
|
+
--tone-blue-line: hsl(209.0909 79.8387% 48.6275%);
|
|
408
|
+
--tone-blue-ink: hsl(209.0909 80.4878% 32.1569%);
|
|
409
|
+
--tone-pink-bg: hsl(325 66.6667% 96.4706%);
|
|
410
|
+
--tone-pink-bg-hover: hsl(321.8182 64.7059% 93.3333%);
|
|
411
|
+
--tone-pink-bg-selected: hsl(320.625 61.5385% 89.8039%);
|
|
412
|
+
--tone-pink-border: hsl(322.2222 79.4118% 73.3333%);
|
|
413
|
+
--tone-pink-border-selected: hsl(321.7647 80.315% 49.8039%);
|
|
414
|
+
--tone-pink-text: hsl(321.9876 80.0995% 39.4118%);
|
|
415
|
+
--tone-pink-icon: hsl(321.7647 80.315% 49.8039%);
|
|
416
|
+
--tone-pink-fill: 322 80.3571% 43.9216%;
|
|
417
|
+
--tone-pink-ring: 322 80.3571% 43.9216%;
|
|
418
|
+
--tone-pink-mark: hsl(321.7647 80.315% 49.8039%);
|
|
419
|
+
--tone-pink-line: hsl(321.7647 80.315% 49.8039%);
|
|
420
|
+
--tone-pink-ink: hsl(321.9403 79.7619% 32.9412%);
|
|
421
|
+
--tone-brown-bg: hsl(15 20% 96.0784%);
|
|
422
|
+
--tone-brown-bg-hover: hsl(22.5 21.0526% 92.549%);
|
|
423
|
+
--tone-brown-bg-selected: hsl(23.0769 22.807% 88.8235%);
|
|
424
|
+
--tone-brown-border: hsl(23.4783 32.3944% 72.1569%);
|
|
425
|
+
--tone-brown-border-selected: hsl(23.8636 35.7724% 48.2353%);
|
|
426
|
+
--tone-brown-text: hsl(24.3478 35.7513% 37.8431%);
|
|
427
|
+
--tone-brown-icon: hsl(23.8636 35.7724% 48.2353%);
|
|
428
|
+
--tone-brown-fill: 23.662 36.0406% 38.6275%;
|
|
429
|
+
--tone-brown-ring: 23.662 36.0406% 38.6275%;
|
|
430
|
+
--tone-brown-mark: hsl(23.8636 35.7724% 48.2353%);
|
|
431
|
+
--tone-brown-line: hsl(23.8636 35.7724% 48.2353%);
|
|
432
|
+
--tone-brown-ink: hsl(23.3898 36.1963% 31.9608%);
|
|
433
|
+
--tone-cyan-bg: hsl(187.5 33.3333% 95.2941%);
|
|
434
|
+
--tone-cyan-bg-hover: hsl(192 34.8837% 91.5686%);
|
|
435
|
+
--tone-cyan-bg-selected: hsl(193.6364 34.375% 87.451%);
|
|
436
|
+
--tone-cyan-border: hsl(192.3077 44.8276% 65.8824%);
|
|
437
|
+
--tone-cyan-border-selected: hsl(192.1622 80.4348% 36.0784%);
|
|
438
|
+
--tone-cyan-text: hsl(192.4138 79.4521% 28.6275%);
|
|
439
|
+
--tone-cyan-icon: hsl(192.1622 80.4348% 36.0784%);
|
|
440
|
+
--tone-cyan-fill: 192.3967 80.1325% 29.6078%;
|
|
441
|
+
--tone-cyan-ring: 192.3967 80.1325% 29.6078%;
|
|
442
|
+
--tone-cyan-mark: hsl(192.1622 80.4348% 36.0784%);
|
|
443
|
+
--tone-cyan-line: hsl(192.1622 80.4348% 36.0784%);
|
|
444
|
+
--tone-cyan-ink: hsl(192.2449 80.3279% 23.9216%);
|
|
445
|
+
--tone-lime-bg: hsl(90 25% 95.2941%);
|
|
446
|
+
--tone-lime-bg-hover: hsl(84 22.7273% 91.3725%);
|
|
447
|
+
--tone-lime-bg-selected: hsl(84 22.3881% 86.8627%);
|
|
448
|
+
--tone-lime-border: hsl(84.4444 30% 64.7059%);
|
|
449
|
+
--tone-lime-border-selected: hsl(83.8835 59.5376% 33.9216%);
|
|
450
|
+
--tone-lime-text: hsl(83.7037 60% 26.4706%);
|
|
451
|
+
--tone-lime-icon: hsl(83.8835 59.5376% 33.9216%);
|
|
452
|
+
--tone-lime-fill: 84.5783 59.7122% 27.2549%;
|
|
453
|
+
--tone-lime-ring: 84.5783 59.7122% 27.2549%;
|
|
454
|
+
--tone-lime-mark: hsl(83.8835 59.5376% 33.9216%);
|
|
455
|
+
--tone-lime-line: hsl(83.8835 59.5376% 33.9216%);
|
|
456
|
+
--tone-lime-ink: hsl(83.8235 59.6491% 22.3529%);
|
|
457
|
+
--surface-violet-bg: var(--tone-violet-bg);
|
|
458
|
+
--surface-violet-border: var(--tone-violet-border);
|
|
459
|
+
--surface-violet-text: var(--tone-violet-text);
|
|
460
|
+
--surface-orange-bg: var(--tone-orange-bg);
|
|
461
|
+
--surface-orange-border: var(--tone-orange-border);
|
|
462
|
+
--surface-orange-text: var(--tone-orange-text);
|
|
463
|
+
--surface-teal-bg: var(--tone-teal-bg);
|
|
464
|
+
--surface-teal-border: var(--tone-teal-border);
|
|
465
|
+
--surface-teal-text: var(--tone-teal-text);
|
|
712
466
|
/* tones:end */
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
* luminance — 1.30 in dark, 1.20 in light, where the ramp has less room
|
|
720
|
-
* before it runs into the paper — and each clears 3:1 against the track, so
|
|
721
|
-
* the mix stays countable with any form of colour blindness and in a
|
|
722
|
-
* monochrome screenshot. 1.18 is the floor the gate holds them to.
|
|
723
|
-
*
|
|
724
|
-
* Ranked by how much the reader needs to tell them apart: succeeded is
|
|
725
|
-
* brightest and cancelled quietest, so the two that matter — succeeded and
|
|
726
|
-
* failed — sit at opposite ends and can never be confused.
|
|
727
|
-
*
|
|
728
|
-
* Spacing them by OKLCH lightness does NOT work: that is perceptual, and the
|
|
729
|
-
* contrast ratio is computed from relative luminance, so an even perceptual
|
|
730
|
-
* ramp left every pair at 1.1:1. Solved in luminance space instead. */
|
|
731
|
-
--run-mix-succeeded: #3c9b78;
|
|
732
|
-
--run-mix-waiting: #c16227;
|
|
733
|
-
--run-mix-failed: #cd342f;
|
|
734
|
-
--run-mix-in-flight: #00679e;
|
|
735
|
-
--run-mix-cancelled: #515367;
|
|
736
|
-
|
|
737
|
-
--glass-bg-strong: var(--depth-1);
|
|
738
|
-
--code-header-bg: color-mix(in srgb, hsl(var(--hsl-muted)) 50%, transparent);
|
|
739
|
-
|
|
740
|
-
/* Shadows — flat, no inner ring, no glow */
|
|
741
|
-
--shadow-card: 0 1px 2px rgba(25, 28, 36, 0.06);
|
|
742
|
-
--shadow-dropdown: 0 8px 30px rgba(25, 28, 36, 0.10);
|
|
743
|
-
--shadow-glow: none;
|
|
744
|
-
--shadow-accent: 0 1px 2px rgba(25, 28, 36, 0.06);
|
|
467
|
+
--run-mix-succeeded: hsl(154.8718 60% 38.2353%); --run-mix-waiting: hsl(38.3193 60.4061% 38.6275%);
|
|
468
|
+
--run-mix-failed: hsl(0 59.6838% 49.6078%); --run-mix-in-flight: hsl(200.7692 60.4651% 33.7255%);
|
|
469
|
+
--run-mix-cancelled: hsl(228.5714 11.8644% 34.7059%);
|
|
470
|
+
--glass-bg-strong: var(--depth-1); --code-header-bg: color-mix(in srgb, hsl(var(--hsl-muted)) 50%, transparent);
|
|
471
|
+
--shadow-color: 220 40% 8%; /* #0c121d */ --shadow-card: 0 1px 2px hsl(var(--shadow-color) / 0.06);
|
|
472
|
+
--shadow-dropdown: 0 8px 30px hsl(var(--shadow-color) / 0.1); --shadow-overlay: 0 2px 6px hsl(var(--shadow-color) / 0.1), 0 16px 40px hsl(var(--shadow-color) / 0.16);
|
|
745
473
|
}
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
/* Focus and field hover — the palette behind @tangle-network/ui's focus
|
|
749
|
-
* treatment (`focusField` / `focusRing` in ui's lib/focus.ts).
|
|
750
|
-
*
|
|
751
|
-
* A focused field keeps its 1px border and shifts it to --focus-border, with a
|
|
752
|
-
* 3px --focus-halo ring outside it. A focused button or tab draws a 1px
|
|
753
|
-
* --focus-border line with the same halo beyond it. Both render as box-shadow,
|
|
754
|
-
* so they follow border-radius and never move layout.
|
|
755
|
-
*
|
|
756
|
-
* The BORDER carries the contrast and the halo is decoration. --focus-border is
|
|
757
|
-
* the ring at 80%: 4.7:1 on the white light-mode field and 5.7:1 on the dark
|
|
758
|
-
* card, so the indicator clears the 3:1 non-text floor (WCAG 1.4.11) in every
|
|
759
|
-
* theme, while reading as a tint of the field instead of a hard indigo outline.
|
|
760
|
-
* An 18% halo sits near 1.3:1 against the page on purpose: it softens the edge
|
|
761
|
-
* and is never the only cue. Gated in focus.test.ts.
|
|
762
|
-
*
|
|
763
|
-
* Every value is derived from a spine token (--hsl-ring, --surface-danger-text,
|
|
764
|
-
* --hsl-border, --hsl-foreground), and a custom property that references
|
|
765
|
-
* another is resolved where it is declared. So this rule names every scope that
|
|
766
|
-
* can redefine those tokens: a named theme or a light island on a descendant
|
|
767
|
-
* gets its own focus colors instead of inheriting the root's. */
|
|
768
474
|
:root,
|
|
769
475
|
.dark,
|
|
770
476
|
.light,
|
|
771
477
|
[data-sandbox-ui],
|
|
772
478
|
[data-sandbox-theme],
|
|
773
479
|
[data-theme] {
|
|
774
|
-
--focus-border: hsl(var(--hsl-ring) / 0.8);
|
|
775
|
-
--focus-halo:
|
|
776
|
-
/* The danger INK, not the destructive fill: the fill is tuned to carry white
|
|
777
|
-
* text and measures about 2:1 on the dark card. */
|
|
778
|
-
--focus-border-danger: color-mix(in srgb, var(--surface-danger-text) 80%, transparent);
|
|
779
|
-
--focus-halo-danger: color-mix(in srgb, var(--surface-danger-text) 18%, transparent);
|
|
780
|
-
/* A resting hairline one step toward the ink, for hover: darker on light
|
|
781
|
-
* paper, lighter on a dark card, never tinted. */
|
|
480
|
+
--focus-border: hsl(var(--hsl-ring) / 0.8); --focus-halo: hsl(var(--hsl-ring) / 0.18);
|
|
481
|
+
--focus-border-danger: color-mix(in srgb, var(--surface-danger-text) 80%, transparent); --focus-halo-danger: color-mix(in srgb, var(--surface-danger-text) 18%, transparent);
|
|
782
482
|
--border-strong: color-mix(in srgb, hsl(var(--hsl-border)), hsl(var(--hsl-foreground)) 20%);
|
|
783
483
|
}
|
|
784
|
-
|
|
785
|
-
/* Surface ladder and interaction states — the palette behind @tangle-network/ui's
|
|
786
|
-
* interaction helpers (`ixControl`, `ixField`, `ixSelected`, `ixRow` … in ui's
|
|
787
|
-
* lib/interaction.ts) and the Card primitive's surface context.
|
|
788
|
-
*
|
|
789
|
-
* LADDER. A card (`[data-slot="card"]`) re-declares two context variables for
|
|
790
|
-
* everything inside it, so nesting needs no app selector:
|
|
791
|
-
* --card the plane a nested card or `bg-card` box paints: --hsl-raised one
|
|
792
|
-
* level in, --hsl-raised-2 two levels in.
|
|
793
|
-
* --well the field fill: --well-page on the page, --well-card in a card,
|
|
794
|
-
* --well-raised in a card in a card, --well-raised-2 deeper still.
|
|
795
|
-
* The canonical ladder is the spine's own planes: raised is L3 (--hsl-secondary),
|
|
796
|
-
* raised-2 is L4 (--hsl-popover), and each well is a plane at least 4.4 OKLCH L
|
|
797
|
-
* off the level it fills. Dark wells always sit deeper (page + 30% black on the
|
|
798
|
-
* page and in a card, the card in a raised plane); light wells take the
|
|
799
|
-
* opposite plane (paper on a grey level, the canvas on paper). Dark raised
|
|
800
|
-
* planes also carry a 1px top highlight. Hospitality tunes its own ladder; the
|
|
801
|
-
* other named themes keep a flat one (below) until theirs is tuned.
|
|
802
|
-
*
|
|
803
|
-
* INTERACTION. Four states, all from the focus ring hue (--hsl-ring), so one
|
|
804
|
-
* green or one indigo marks every interactive thing in a theme:
|
|
805
|
-
* hover 1px edge at .45 plus a 4px halo at .16 (--ix-hover)
|
|
806
|
-
* press 1px edge at .95 plus a 4px halo at .30 (--ix-press)
|
|
807
|
-
* after a mouse-focused control keeps a 1px .60 / 3px .14 ring (--ix-after)
|
|
808
|
-
* selected a .13 tint (.18 in dark) with a 1px inset ring at .85
|
|
809
|
-
* Keyboard focus-visible keeps --focus-border / --focus-halo above.
|
|
810
|
-
*
|
|
811
|
-
* Declared on every scope that can redefine --hsl-ring or the ladder, as the
|
|
812
|
-
* focus rule is, because a custom property is resolved where it is declared. */
|
|
813
484
|
:root,
|
|
814
485
|
.dark,
|
|
815
486
|
.light,
|
|
816
487
|
[data-sandbox-ui],
|
|
817
488
|
[data-sandbox-theme],
|
|
818
489
|
[data-theme] {
|
|
819
|
-
--hsl-raised: var(--hsl-secondary);
|
|
820
|
-
--hsl-
|
|
821
|
-
--well-
|
|
822
|
-
--well
|
|
823
|
-
--
|
|
824
|
-
--
|
|
825
|
-
--
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
--field-border: color-mix(in oklab, hsl(var(--hsl-border)), hsl(var(--hsl-foreground)) 45%);
|
|
829
|
-
--shadow-raised: var(--shadow-card);
|
|
830
|
-
/* A shadow token joins a comma list, so "none" would void the whole list. */
|
|
831
|
-
--shadow-well: 0 0 0 0 transparent;
|
|
832
|
-
--edge-highlight: inset 0 1px 0 rgba(255, 255, 255, 0.06);
|
|
833
|
-
--ix-hover: 0 0 0 1px hsl(var(--hsl-ring) / 0.45), 0 0 0 4px hsl(var(--hsl-ring) / 0.16);
|
|
834
|
-
--ix-hover-border: hsl(var(--hsl-ring) / 0.7);
|
|
835
|
-
--ix-press: 0 0 0 1px hsl(var(--hsl-ring) / 0.95), 0 0 0 4px hsl(var(--hsl-ring) / 0.3);
|
|
836
|
-
--ix-after: 0 0 0 1px hsl(var(--hsl-ring) / 0.6), 0 0 0 3px hsl(var(--hsl-ring) / 0.14);
|
|
837
|
-
--ix-sel-ring: hsl(var(--hsl-ring) / 0.85);
|
|
838
|
-
--ix-sel-bg: hsl(var(--hsl-ring) / 0.18);
|
|
839
|
-
--ix-hover-bg: hsl(var(--hsl-ring) / 0.08);
|
|
490
|
+
--hsl-raised: var(--hsl-secondary); --hsl-raised-2: var(--hsl-popover);
|
|
491
|
+
--well-page: color-mix(in oklab, hsl(var(--hsl-background)) 70%, black); --well-card: var(--well-page);
|
|
492
|
+
--well-raised: hsl(var(--hsl-card)); --well-raised-2: var(--well-raised);
|
|
493
|
+
--well: var(--well-page); --field-border: color-mix(in oklab, hsl(var(--hsl-border)), hsl(var(--hsl-foreground)) 45%);
|
|
494
|
+
--shadow-raised: var(--shadow-card); --shadow-well: 0 0 0 0 transparent;
|
|
495
|
+
--edge-highlight: inset 0 1px 0 rgba(255, 255, 255, 0.06); --ix-hover: 0 0 0 1px hsl(var(--hsl-ring) / 0.45), 0 0 0 4px hsl(var(--hsl-ring) / 0.16);
|
|
496
|
+
--ix-hover-border: hsl(var(--hsl-ring) / 0.7); --ix-press: 0 0 0 1px hsl(var(--hsl-ring) / 0.95), 0 0 0 4px hsl(var(--hsl-ring) / 0.3);
|
|
497
|
+
--ix-after: 0 0 0 1px hsl(var(--hsl-ring) / 0.6), 0 0 0 3px hsl(var(--hsl-ring) / 0.14); --ix-sel-ring: hsl(var(--hsl-ring) / 0.85);
|
|
498
|
+
--ix-sel-bg: hsl(var(--hsl-ring) / 0.18); --ix-hover-bg: hsl(var(--hsl-ring) / 0.08);
|
|
840
499
|
}
|
|
841
|
-
|
|
842
|
-
/* Light planes need less tint for the same step, and take their wells from the
|
|
843
|
-
* opposite plane. Same scope list as the chart light rule below; dark is the
|
|
844
|
-
* default. */
|
|
845
500
|
[data-sandbox-theme="vault"]:where(:not(.dark)),
|
|
846
501
|
[data-sandbox-theme="dawn"]:where(:not(.dark)),
|
|
847
502
|
[data-theme="hospitality"]:where(:not(.dark)),
|
|
@@ -849,81 +504,32 @@
|
|
|
849
504
|
[data-theme="light"],
|
|
850
505
|
.light,
|
|
851
506
|
[data-theme$="-light"] {
|
|
852
|
-
--ix-sel-bg: hsl(var(--hsl-ring) / 0.13);
|
|
853
|
-
--
|
|
854
|
-
--well-
|
|
855
|
-
--well-card: hsl(var(--hsl-background));
|
|
856
|
-
--well-raised-2: var(--well-card);
|
|
857
|
-
--edge-highlight: 0 0 0 0 transparent;
|
|
507
|
+
--ix-sel-bg: hsl(var(--hsl-ring) / 0.13); --ix-hover-bg: hsl(var(--hsl-ring) / 0.07);
|
|
508
|
+
--well-page: hsl(var(--hsl-card)); --well-card: hsl(var(--hsl-background));
|
|
509
|
+
--well-raised-2: var(--well-card); --edge-highlight: 0 0 0 0 transparent;
|
|
858
510
|
}
|
|
859
|
-
|
|
860
|
-
/* Named themes with their own planes keep a flat ladder until each is tuned as
|
|
861
|
-
* Hospitality was: a nested card paints the card, and its field the card's well. */
|
|
862
|
-
[data-theme="aubergine"], [data-theme="aubergine-light"], [data-theme="arena"], [data-theme="arena-light"],
|
|
863
|
-
[data-theme="super"], [data-theme="super-light"], [data-theme="tangle-light"], [data-theme="agents"],
|
|
864
|
-
[data-theme="agents-light"], [data-theme="website"], [data-theme="intelligence"] {
|
|
865
|
-
--hsl-raised: var(--hsl-card);
|
|
866
|
-
--hsl-raised-2: var(--hsl-card);
|
|
867
|
-
--well-raised: var(--well-card);
|
|
868
|
-
--well-raised-2: var(--well-card);
|
|
869
|
-
--edge-highlight: 0 0 0 0 transparent;
|
|
870
|
-
}
|
|
871
|
-
|
|
872
|
-
/* Surface context: keyed only on the Card primitive's data-slot, never on app
|
|
873
|
-
* classes. :where(*) keeps it at the specificity of one attribute, so a theme
|
|
874
|
-
* scope opened inside a card still wins. */
|
|
875
511
|
[data-slot="card"] :where(*) {
|
|
876
|
-
--card: var(--hsl-raised);
|
|
877
|
-
--well: var(--well-card);
|
|
512
|
+
--card: var(--hsl-raised); --well: var(--well-card);
|
|
878
513
|
}
|
|
879
514
|
[data-slot="card"] [data-slot="card"] :where(*) {
|
|
880
|
-
--card: var(--hsl-raised-2);
|
|
881
|
-
--well: var(--well-raised);
|
|
515
|
+
--card: var(--hsl-raised-2); --well: var(--well-raised);
|
|
882
516
|
}
|
|
883
517
|
[data-slot="card"] [data-slot="card"] [data-slot="card"] :where(*) {
|
|
884
518
|
--well: var(--well-raised-2);
|
|
885
519
|
}
|
|
886
|
-
|
|
887
|
-
/* Chart marks — the palette behind @tangle-network/charts.
|
|
888
|
-
*
|
|
889
|
-
* One accent marks the measure a reader decides on (a rate bar, a frontier
|
|
890
|
-
* point, a solved attempt). One muted grey marks everything secondary. An
|
|
891
|
-
* ordinal indigo ramp marks App Grade tiers C < B < A < S; F has no fill and
|
|
892
|
-
* draws as a --chart-muted outline, the same mark as an unsolved attempt. No
|
|
893
|
-
* categorical palette ships: identity is carried by direct labels.
|
|
894
|
-
*
|
|
895
|
-
* Contrast against the dark canvas (#0a0a14) and white paper, checked with the
|
|
896
|
-
* dataviz palette validator and WCAG ratios:
|
|
897
|
-
* ink 14.45 / 13.70, ink-muted 7.34 / 5.56, accent 6.05 / 7.41,
|
|
898
|
-
* muted 5.54 / 4.41, grid 1.46 / 1.12 (recessive by design).
|
|
899
|
-
* Tiers pass the ordinal checks in both modes: one hue, monotone lightness,
|
|
900
|
-
* visible steps. They are iris ladder steps (ladders.css) except #8b87f0 dark
|
|
901
|
-
* and #7c7fe3 light, which sit between two steps to keep the gaps even.
|
|
902
|
-
*
|
|
903
|
-
* The aliases re-resolve on every theme scope, as the focus rule above does,
|
|
904
|
-
* so a named theme's ink and hairlines carry into its charts. */
|
|
905
520
|
:root,
|
|
906
521
|
.dark,
|
|
907
522
|
.light,
|
|
908
523
|
[data-sandbox-ui],
|
|
909
524
|
[data-sandbox-theme],
|
|
910
525
|
[data-theme] {
|
|
911
|
-
--chart-ink: var(--text-primary);
|
|
912
|
-
--chart-
|
|
913
|
-
--chart-
|
|
914
|
-
--chart-
|
|
915
|
-
--chart-
|
|
916
|
-
--chart-
|
|
917
|
-
--chart-accent: var(--brand-cool);
|
|
918
|
-
--chart-tier-c: #4a4a95;
|
|
919
|
-
--chart-tier-b: #5b5bd6;
|
|
920
|
-
--chart-tier-a: #8b87f0;
|
|
921
|
-
--chart-tier-s: #b1a9ff;
|
|
526
|
+
--chart-ink: var(--text-primary); --chart-ink-muted: var(--text-dim);
|
|
527
|
+
--chart-muted: var(--md3-outline); --chart-grid: var(--md3-surface-container-high);
|
|
528
|
+
--chart-rule: var(--md3-outline-variant); --chart-shade: var(--bg-hover);
|
|
529
|
+
--chart-accent: var(--brand-cool); --chart-tier-c: hsl(246.1017 55.1402% 41.9608%);
|
|
530
|
+
--chart-tier-b: hsl(246.1905 54.7826% 54.902%); --chart-tier-a: hsl(245.3933 54.6012% 68.0392%);
|
|
531
|
+
--chart-tier-s: hsl(245.6604 54.6392% 80.9804%);
|
|
922
532
|
}
|
|
923
|
-
|
|
924
|
-
/* Light: the accent is the indigo fill (#4c3fc6, 7.41:1 on white) and the tier
|
|
925
|
-
* ramp runs light to dark. `[data-theme$="-light"]` covers the named light
|
|
926
|
-
* themes, which would otherwise inherit the dark ramp from :root. */
|
|
927
533
|
[data-sandbox-theme="vault"]:where(:not(.dark)),
|
|
928
534
|
[data-sandbox-theme="dawn"]:where(:not(.dark)),
|
|
929
535
|
[data-theme="hospitality"]:where(:not(.dark)),
|
|
@@ -931,16 +537,11 @@
|
|
|
931
537
|
[data-theme="light"],
|
|
932
538
|
.light,
|
|
933
539
|
[data-theme$="-light"] {
|
|
934
|
-
--chart-accent: hsl(var(--hsl-primary));
|
|
935
|
-
--chart-tier-
|
|
936
|
-
--chart-tier-
|
|
937
|
-
--chart-tier-a: #5b5bd6;
|
|
938
|
-
--chart-tier-s: #272962;
|
|
540
|
+
--chart-accent: hsl(var(--hsl-primary)); --chart-tier-c: hsl(246.2687 54.4715% 75.8824%);
|
|
541
|
+
--chart-tier-b: hsl(246.055 54.7739% 60.9804%); --chart-tier-a: hsl(246.0465 54.8936% 46.0784%);
|
|
542
|
+
--chart-tier-s: hsl(245.5172 54.717% 31.1765%);
|
|
939
543
|
}
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
/* Motion is opt-in at the component, but its reduced-motion preference is
|
|
943
|
-
* shared. Re-declare composites at the same boundary as their durations. */
|
|
544
|
+
@keyframes tangle-breathe { 50% { opacity: 0.45; } }
|
|
944
545
|
@media (prefers-reduced-motion: reduce) {
|
|
945
546
|
:root,
|
|
946
547
|
.dark,
|
|
@@ -962,7 +563,6 @@
|
|
|
962
563
|
--motion-arrive: var(--duration-arrive) var(--ease-expo);
|
|
963
564
|
}
|
|
964
565
|
}
|
|
965
|
-
|
|
966
566
|
/* tone-scopes:begin — generated by scripts/gen-ladders.mjs; edit its CATEGORY map, not these lines. */
|
|
967
567
|
[data-tone="violet"],
|
|
968
568
|
[data-tone="violet"] :is(.light, .dark, [data-theme], [data-sandbox-ui], [data-sandbox-theme]) {
|
|
@@ -1045,3 +645,4 @@
|
|
|
1045
645
|
--tone-icon: var(--tone-lime-icon);
|
|
1046
646
|
}
|
|
1047
647
|
/* tone-scopes:end */
|
|
648
|
+
/* palette:end */
|