@astryxdesign/theme-neutral 0.7.9-canary.ffa495b → 0.7.9

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/dist/neutral.js CHANGED
@@ -90,22 +90,23 @@ export const neutralTheme = {
90
90
  "--_astryx-pre-tempo-duration-slow-min": "525ms",
91
91
  "--_astryx-pre-tempo-duration-slow": "700ms",
92
92
  "--_astryx-pre-tempo-duration-slow-max": "935ms",
93
+ "--_astryx-motion-tempo": "1",
93
94
  "--font-family-body": "Figtree, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif",
94
95
  "--font-family-heading": "Figtree, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif",
95
96
  "--font-family-code": "ui-monospace, \"SF Mono\", Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
96
97
  "--color-syntax-keyword": "light-dark(#6b187c, #efa8ff)",
97
98
  "--color-syntax-string": "light-dark(#0b5615, #a4d6a3)",
98
- "--color-syntax-comment": "light-dark(#6a6a6a, #9e9e9e)",
99
+ "--color-syntax-comment": "light-dark(#525252, #b9b9b9)",
99
100
  "--color-syntax-number": "light-dark(#733100, #ffb37e)",
100
101
  "--color-syntax-function": "light-dark(#00458c, #a1caff)",
101
102
  "--color-syntax-type": "light-dark(#6b187c, #efa8ff)",
102
103
  "--color-syntax-variable": "light-dark(#111111, #e2e2e2)",
103
- "--color-syntax-operator": "light-dark(#6a6a6a, #9e9e9e)",
104
+ "--color-syntax-operator": "light-dark(#525252, #b9b9b9)",
104
105
  "--color-syntax-constant": "light-dark(#733100, #ffb37e)",
105
106
  "--color-syntax-tag": "light-dark(#8a0011, #ffaea7)",
106
107
  "--color-syntax-attribute": "light-dark(#584400, #eec448)",
107
108
  "--color-syntax-property": "light-dark(#005348, #90d7c8)",
108
- "--color-syntax-punctuation": "light-dark(#6a6a6a, #9e9e9e)",
109
+ "--color-syntax-punctuation": "light-dark(#525252, #b9b9b9)",
109
110
  "--color-syntax-background": "light-dark(#ffffff, #111111)",
110
111
  "--color-syntax-added": "color-mix(in srgb, var(--color-success-muted) 25%, transparent)",
111
112
  "--color-syntax-removed": "color-mix(in srgb, var(--color-error-muted) 25%, transparent)",
@@ -118,7 +119,7 @@ export const neutralTheme = {
118
119
  "--color-background-popover": "light-dark(#ffffff, #1b1b1b)",
119
120
  "--color-background-muted": "light-dark(#f1f1f1, #1b1b1b)",
120
121
  "--color-accent": "light-dark(#1b1b1b, #f1f1f1)",
121
- "--color-accent-muted": "light-dark(#f1f1f1, #262626)",
122
+ "--color-accent-muted": "light-dark(#d4d4d4, #474747)",
122
123
  "--color-neutral": "light-dark(#0000000F, #ffffff1A)",
123
124
  "--color-overlay": "light-dark(#00000080, #000000CC)",
124
125
  "--color-overlay-hover": "light-dark(#0000000D, #ffffff0D)",
@@ -317,6 +318,26 @@ export const neutralTheme = {
317
318
  "lineHeight": "var(--text-display-3-leading)"
318
319
  }
319
320
  },
321
+ "item": {
322
+ "selected": {
323
+ "--color-text-secondary": "light-dark(#474747, #c6c6c6)"
324
+ }
325
+ },
326
+ "tree-list-item": {
327
+ "selected": {
328
+ "--color-text-secondary": "light-dark(#474747, #c6c6c6)"
329
+ }
330
+ },
331
+ "file-input": {
332
+ "mode:dropzone": {
333
+ "--color-text-secondary": "light-dark(#474747, #c6c6c6)"
334
+ }
335
+ },
336
+ "citation": {
337
+ "variant:number": {
338
+ "--color-text-secondary": "light-dark(#474747, #c6c6c6)"
339
+ }
340
+ },
320
341
  "button": {
321
342
  "variant:destructive": {
322
343
  "backgroundColor": "var(--color-error-muted)",
@@ -35,6 +35,7 @@ export declare const neutralPaletteRefs: {
35
35
  readonly 5: "#111111";
36
36
  readonly 10: "#1b1b1b";
37
37
  readonly 30: "#474747";
38
+ readonly 35: "#525252";
38
39
  readonly 45: "#6a6a6a";
39
40
  readonly 60: "#919191";
40
41
  readonly 85: "#d4d4d4";
@@ -48,8 +49,11 @@ export declare const neutralPaletteRefs: {
48
49
  readonly 10: "#1b1b1b";
49
50
  readonly 15: "#262626";
50
51
  readonly 20: "#303030";
52
+ readonly 30: "#474747";
51
53
  readonly 35: "#525252";
52
54
  readonly 65: "#9e9e9e";
55
+ readonly 75: "#b9b9b9";
56
+ readonly 80: "#c6c6c6";
53
57
  readonly 85: "#d4d4d4";
54
58
  readonly 90: "#e2e2e2";
55
59
  readonly 95: "#f1f1f1";
@@ -1 +1 @@
1
- {"version":3,"file":"neutralPaletteRefs.generated.d.ts","sourceRoot":"","sources":["../src/neutralPaletteRefs.generated.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyCrB,CAAC;AAEX,eAAe,kBAAkB,CAAC"}
1
+ {"version":3,"file":"neutralPaletteRefs.generated.d.ts","sourceRoot":"","sources":["../src/neutralPaletteRefs.generated.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyCrB,CAAC;AAEX,eAAe,kBAAkB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"neutralTheme.d.ts","sourceRoot":"","sources":["../src/neutralTheme.ts"],"names":[],"mappings":"AAyCA,eAAO,MAAM,YAAY,gEAoVvB,CAAC"}
1
+ {"version":3,"file":"neutralTheme.d.ts","sourceRoot":"","sources":["../src/neutralTheme.ts"],"names":[],"mappings":"AAyCA,eAAO,MAAM,YAAY,gEA8WvB,CAAC"}
package/dist/source.js CHANGED
@@ -79,8 +79,8 @@ var neutralPaletteRefs = {
79
79
  dark: { 25: "#2b422b", 80: "#aad4a9", 85: "#bce0bb" }
80
80
  },
81
81
  neutral: {
82
- light: { 0: "#000000", 5: "#111111", 10: "#1b1b1b", 30: "#474747", 45: "#6a6a6a", 60: "#919191", 85: "#d4d4d4", 90: "#e2e2e2", 95: "#f1f1f1", 100: "#ffffff" },
83
- dark: { 0: "#000000", 5: "#111111", 10: "#1b1b1b", 15: "#262626", 20: "#303030", 35: "#525252", 65: "#9e9e9e", 85: "#d4d4d4", 90: "#e2e2e2", 95: "#f1f1f1", 100: "#ffffff" }
82
+ light: { 0: "#000000", 5: "#111111", 10: "#1b1b1b", 30: "#474747", 35: "#525252", 45: "#6a6a6a", 60: "#919191", 85: "#d4d4d4", 90: "#e2e2e2", 95: "#f1f1f1", 100: "#ffffff" },
83
+ dark: { 0: "#000000", 5: "#111111", 10: "#1b1b1b", 15: "#262626", 20: "#303030", 30: "#474747", 35: "#525252", 65: "#9e9e9e", 75: "#b9b9b9", 80: "#c6c6c6", 85: "#d4d4d4", 90: "#e2e2e2", 95: "#f1f1f1", 100: "#ffffff" }
84
84
  },
85
85
  orange: {
86
86
  light: { 25: "#622700", 30: "#733100", 75: "#ff9e55", 85: "#ffc7a1" },
@@ -120,17 +120,17 @@ var neutralSyntax = (0, import_theme.defineSyntaxTheme)({
120
120
  tokens: {
121
121
  keyword: [purple.light[30], purple.light[80]],
122
122
  string: [green.light[30], green.light[80]],
123
- comment: [neutral.light[45], neutral.dark[65]],
123
+ comment: [neutral.light[35], neutral.dark[75]],
124
124
  number: [orange.light[30], orange.dark[80]],
125
125
  function: [blue.light[30], blue.dark[80]],
126
126
  type: [purple.light[30], purple.light[80]],
127
127
  variable: [neutral.light[5], neutral.dark[90]],
128
- operator: [neutral.light[45], neutral.dark[65]],
128
+ operator: [neutral.light[35], neutral.dark[75]],
129
129
  constant: [orange.light[30], orange.dark[80]],
130
130
  tag: [red.light[30], red.dark[80]],
131
131
  attribute: [yellow.light[30], yellow.light[80]],
132
132
  property: [teal.light[30], teal.light[80]],
133
- punctuation: [neutral.light[45], neutral.dark[65]],
133
+ punctuation: [neutral.light[35], neutral.dark[75]],
134
134
  background: [neutral.light[100], neutral.dark[5]]
135
135
  }
136
136
  });
@@ -186,7 +186,7 @@ var neutralTheme = (0, import_theme.defineTheme)({
186
186
  "--color-background-popover": [neutral.light[100], neutral.dark[10]],
187
187
  "--color-background-muted": [neutral.light[95], neutral.dark[10]],
188
188
  "--color-accent": [neutral.light[10], neutral.dark[95]],
189
- "--color-accent-muted": [neutral.light[95], neutral.dark[15]],
189
+ "--color-accent-muted": [neutral.light[85], neutral.dark[30]],
190
190
  "--color-neutral": [
191
191
  withAlpha(neutral.light[0], "0F"),
192
192
  withAlpha(neutral.dark[100], "1A")
@@ -334,6 +334,31 @@ var neutralTheme = (0, import_theme.defineTheme)({
334
334
  "--shadow-inset-error": `inset 0px 0px 0px 2px ${withAlpha(red.light[55], "4D")}`
335
335
  },
336
336
  components: {
337
+ // In dark mode, secondary text falls under 4.5:1 on the selected fill
338
+ // and under its hover. Selected rows use the next stop that clears both.
339
+ item: {
340
+ selected: {
341
+ "--color-text-secondary": `light-dark(${neutral.light[30]}, ${neutral.dark[80]})`
342
+ }
343
+ },
344
+ "tree-list-item": {
345
+ selected: {
346
+ "--color-text-secondary": `light-dark(${neutral.light[30]}, ${neutral.dark[80]})`
347
+ }
348
+ },
349
+ // A dropzone's hint sits on the same fill while a file is dragged over.
350
+ // That state has no target, so the dropzone takes the lift at rest too.
351
+ "file-input": {
352
+ "mode:dropzone": {
353
+ "--color-text-secondary": `light-dark(${neutral.light[30]}, ${neutral.dark[80]})`
354
+ }
355
+ },
356
+ // A numbered citation is a pill on the same fill.
357
+ citation: {
358
+ "variant:number": {
359
+ "--color-text-secondary": `light-dark(${neutral.light[30]}, ${neutral.dark[80]})`
360
+ }
361
+ },
337
362
  button: {
338
363
  "variant:destructive": {
339
364
  backgroundColor: "var(--color-error-muted)",
package/dist/source.mjs CHANGED
@@ -84,8 +84,8 @@ var neutralPaletteRefs = {
84
84
  dark: { 25: "#2b422b", 80: "#aad4a9", 85: "#bce0bb" }
85
85
  },
86
86
  neutral: {
87
- light: { 0: "#000000", 5: "#111111", 10: "#1b1b1b", 30: "#474747", 45: "#6a6a6a", 60: "#919191", 85: "#d4d4d4", 90: "#e2e2e2", 95: "#f1f1f1", 100: "#ffffff" },
88
- dark: { 0: "#000000", 5: "#111111", 10: "#1b1b1b", 15: "#262626", 20: "#303030", 35: "#525252", 65: "#9e9e9e", 85: "#d4d4d4", 90: "#e2e2e2", 95: "#f1f1f1", 100: "#ffffff" }
87
+ light: { 0: "#000000", 5: "#111111", 10: "#1b1b1b", 30: "#474747", 35: "#525252", 45: "#6a6a6a", 60: "#919191", 85: "#d4d4d4", 90: "#e2e2e2", 95: "#f1f1f1", 100: "#ffffff" },
88
+ dark: { 0: "#000000", 5: "#111111", 10: "#1b1b1b", 15: "#262626", 20: "#303030", 30: "#474747", 35: "#525252", 65: "#9e9e9e", 75: "#b9b9b9", 80: "#c6c6c6", 85: "#d4d4d4", 90: "#e2e2e2", 95: "#f1f1f1", 100: "#ffffff" }
89
89
  },
90
90
  orange: {
91
91
  light: { 25: "#622700", 30: "#733100", 75: "#ff9e55", 85: "#ffc7a1" },
@@ -125,17 +125,17 @@ var neutralSyntax = defineSyntaxTheme({
125
125
  tokens: {
126
126
  keyword: [purple.light[30], purple.light[80]],
127
127
  string: [green.light[30], green.light[80]],
128
- comment: [neutral.light[45], neutral.dark[65]],
128
+ comment: [neutral.light[35], neutral.dark[75]],
129
129
  number: [orange.light[30], orange.dark[80]],
130
130
  function: [blue.light[30], blue.dark[80]],
131
131
  type: [purple.light[30], purple.light[80]],
132
132
  variable: [neutral.light[5], neutral.dark[90]],
133
- operator: [neutral.light[45], neutral.dark[65]],
133
+ operator: [neutral.light[35], neutral.dark[75]],
134
134
  constant: [orange.light[30], orange.dark[80]],
135
135
  tag: [red.light[30], red.dark[80]],
136
136
  attribute: [yellow.light[30], yellow.light[80]],
137
137
  property: [teal.light[30], teal.light[80]],
138
- punctuation: [neutral.light[45], neutral.dark[65]],
138
+ punctuation: [neutral.light[35], neutral.dark[75]],
139
139
  background: [neutral.light[100], neutral.dark[5]]
140
140
  }
141
141
  });
@@ -191,7 +191,7 @@ var neutralTheme = defineTheme({
191
191
  "--color-background-popover": [neutral.light[100], neutral.dark[10]],
192
192
  "--color-background-muted": [neutral.light[95], neutral.dark[10]],
193
193
  "--color-accent": [neutral.light[10], neutral.dark[95]],
194
- "--color-accent-muted": [neutral.light[95], neutral.dark[15]],
194
+ "--color-accent-muted": [neutral.light[85], neutral.dark[30]],
195
195
  "--color-neutral": [
196
196
  withAlpha(neutral.light[0], "0F"),
197
197
  withAlpha(neutral.dark[100], "1A")
@@ -339,6 +339,31 @@ var neutralTheme = defineTheme({
339
339
  "--shadow-inset-error": `inset 0px 0px 0px 2px ${withAlpha(red.light[55], "4D")}`
340
340
  },
341
341
  components: {
342
+ // In dark mode, secondary text falls under 4.5:1 on the selected fill
343
+ // and under its hover. Selected rows use the next stop that clears both.
344
+ item: {
345
+ selected: {
346
+ "--color-text-secondary": `light-dark(${neutral.light[30]}, ${neutral.dark[80]})`
347
+ }
348
+ },
349
+ "tree-list-item": {
350
+ selected: {
351
+ "--color-text-secondary": `light-dark(${neutral.light[30]}, ${neutral.dark[80]})`
352
+ }
353
+ },
354
+ // A dropzone's hint sits on the same fill while a file is dragged over.
355
+ // That state has no target, so the dropzone takes the lift at rest too.
356
+ "file-input": {
357
+ "mode:dropzone": {
358
+ "--color-text-secondary": `light-dark(${neutral.light[30]}, ${neutral.dark[80]})`
359
+ }
360
+ },
361
+ // A numbered citation is a pill on the same fill.
362
+ citation: {
363
+ "variant:number": {
364
+ "--color-text-secondary": `light-dark(${neutral.light[30]}, ${neutral.dark[80]})`
365
+ }
366
+ },
342
367
  button: {
343
368
  "variant:destructive": {
344
369
  backgroundColor: "var(--color-error-muted)",
package/dist/theme.css CHANGED
@@ -158,22 +158,23 @@
158
158
  --_astryx-pre-tempo-duration-slow-min: 525ms;
159
159
  --_astryx-pre-tempo-duration-slow: 700ms;
160
160
  --_astryx-pre-tempo-duration-slow-max: 935ms;
161
+ --_astryx-motion-tempo: 1;
161
162
  --font-family-body: Figtree, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
162
163
  --font-family-heading: Figtree, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
163
164
  --font-family-code: ui-monospace, "SF Mono", Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
164
165
  --color-syntax-keyword: light-dark(#6b187c, #efa8ff);
165
166
  --color-syntax-string: light-dark(#0b5615, #a4d6a3);
166
- --color-syntax-comment: light-dark(#6a6a6a, #9e9e9e);
167
+ --color-syntax-comment: light-dark(#525252, #b9b9b9);
167
168
  --color-syntax-number: light-dark(#733100, #ffb37e);
168
169
  --color-syntax-function: light-dark(#00458c, #a1caff);
169
170
  --color-syntax-type: light-dark(#6b187c, #efa8ff);
170
171
  --color-syntax-variable: light-dark(#111111, #e2e2e2);
171
- --color-syntax-operator: light-dark(#6a6a6a, #9e9e9e);
172
+ --color-syntax-operator: light-dark(#525252, #b9b9b9);
172
173
  --color-syntax-constant: light-dark(#733100, #ffb37e);
173
174
  --color-syntax-tag: light-dark(#8a0011, #ffaea7);
174
175
  --color-syntax-attribute: light-dark(#584400, #eec448);
175
176
  --color-syntax-property: light-dark(#005348, #90d7c8);
176
- --color-syntax-punctuation: light-dark(#6a6a6a, #9e9e9e);
177
+ --color-syntax-punctuation: light-dark(#525252, #b9b9b9);
177
178
  --color-syntax-background: light-dark(#ffffff, #111111);
178
179
  --color-syntax-added: color-mix(in srgb, var(--color-success-muted) 25%, transparent);
179
180
  --color-syntax-removed: color-mix(in srgb, var(--color-error-muted) 25%, transparent);
@@ -186,7 +187,7 @@
186
187
  --color-background-popover: light-dark(#ffffff, #1b1b1b);
187
188
  --color-background-muted: light-dark(#f1f1f1, #1b1b1b);
188
189
  --color-accent: light-dark(#1b1b1b, #f1f1f1);
189
- --color-accent-muted: light-dark(#f1f1f1, #262626);
190
+ --color-accent-muted: light-dark(#d4d4d4, #474747);
190
191
  --color-neutral: light-dark(#0000000F, #ffffff1A);
191
192
  --color-overlay: light-dark(#00000080, #000000CC);
192
193
  --color-overlay-hover: light-dark(#0000000D, #ffffff0D);
@@ -405,6 +406,22 @@
405
406
  line-height: var(--text-display-3-leading);
406
407
  }
407
408
 
409
+ .astryx-item[data-selected="selected"] {
410
+ --color-text-secondary: light-dark(#474747, #c6c6c6);
411
+ }
412
+
413
+ .astryx-tree-list-item[data-selected="selected"] {
414
+ --color-text-secondary: light-dark(#474747, #c6c6c6);
415
+ }
416
+
417
+ .astryx-file-input[data-mode="dropzone"] {
418
+ --color-text-secondary: light-dark(#474747, #c6c6c6);
419
+ }
420
+
421
+ .astryx-citation[data-variant="number"] {
422
+ --color-text-secondary: light-dark(#474747, #c6c6c6);
423
+ }
424
+
408
425
  .astryx-button[data-variant="destructive"] {
409
426
  background-color: var(--color-error-muted);
410
427
  color: var(--color-on-error-muted);
@@ -522,6 +539,10 @@
522
539
 
523
540
  .astryx-heading[data-color="accent"] { color: var(--color-text-accent); }
524
541
 
542
+ .astryx-text[data-color="inherit"] { color: inherit; }
543
+
544
+ .astryx-heading[data-color="inherit"] { color: inherit; }
545
+
525
546
  .astryx-text[data-size="4xs"] { font-size: var(--font-size-4xs); }
526
547
 
527
548
  .astryx-text[data-size="3xs"] { font-size: var(--font-size-3xs); }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@astryxdesign/theme-neutral",
3
- "version": "0.7.9-canary.ffa495b",
3
+ "version": "0.7.9",
4
4
  "displayName": "Neutral Theme",
5
5
  "private": false,
6
6
  "description": "Restrained warm grays. Minimal and quiet, so the content stays the focus.",
@@ -71,11 +71,11 @@
71
71
  "lucide-react": "^1.18.0"
72
72
  },
73
73
  "peerDependencies": {
74
- "@astryxdesign/core": "0.7.9-canary.ffa495b",
74
+ "@astryxdesign/core": "0.7.9",
75
75
  "react": ">=19"
76
76
  },
77
77
  "devDependencies": {
78
- "@astryxdesign/cli": "0.7.9-canary.ffa495b"
78
+ "@astryxdesign/cli": "0.7.9"
79
79
  },
80
80
  "module": "./dist/source.mjs",
81
81
  "scripts": {
@@ -15,8 +15,8 @@ export const neutralPaletteRefs = {
15
15
  dark: {25: '#2b422b', 80: '#aad4a9', 85: '#bce0bb'},
16
16
  },
17
17
  neutral: {
18
- light: {0: '#000000', 5: '#111111', 10: '#1b1b1b', 30: '#474747', 45: '#6a6a6a', 60: '#919191', 85: '#d4d4d4', 90: '#e2e2e2', 95: '#f1f1f1', 100: '#ffffff'},
19
- dark: {0: '#000000', 5: '#111111', 10: '#1b1b1b', 15: '#262626', 20: '#303030', 35: '#525252', 65: '#9e9e9e', 85: '#d4d4d4', 90: '#e2e2e2', 95: '#f1f1f1', 100: '#ffffff'},
18
+ light: {0: '#000000', 5: '#111111', 10: '#1b1b1b', 30: '#474747', 35: '#525252', 45: '#6a6a6a', 60: '#919191', 85: '#d4d4d4', 90: '#e2e2e2', 95: '#f1f1f1', 100: '#ffffff'},
19
+ dark: {0: '#000000', 5: '#111111', 10: '#1b1b1b', 15: '#262626', 20: '#303030', 30: '#474747', 35: '#525252', 65: '#9e9e9e', 75: '#b9b9b9', 80: '#c6c6c6', 85: '#d4d4d4', 90: '#e2e2e2', 95: '#f1f1f1', 100: '#ffffff'},
20
20
  },
21
21
  orange: {
22
22
  light: {25: '#622700', 30: '#733100', 75: '#ff9e55', 85: '#ffc7a1'},
@@ -17,17 +17,17 @@ const neutralSyntax = defineSyntaxTheme({
17
17
  tokens: {
18
18
  keyword: [purple.light[30], purple.light[80]],
19
19
  string: [green.light[30], green.light[80]],
20
- comment: [neutral.light[45], neutral.dark[65]],
20
+ comment: [neutral.light[35], neutral.dark[75]],
21
21
  number: [orange.light[30], orange.dark[80]],
22
22
  function: [blue.light[30], blue.dark[80]],
23
23
  type: [purple.light[30], purple.light[80]],
24
24
  variable: [neutral.light[5], neutral.dark[90]],
25
- operator: [neutral.light[45], neutral.dark[65]],
25
+ operator: [neutral.light[35], neutral.dark[75]],
26
26
  constant: [orange.light[30], orange.dark[80]],
27
27
  tag: [red.light[30], red.dark[80]],
28
28
  attribute: [yellow.light[30], yellow.light[80]],
29
29
  property: [teal.light[30], teal.light[80]],
30
- punctuation: [neutral.light[45], neutral.dark[65]],
30
+ punctuation: [neutral.light[35], neutral.dark[75]],
31
31
  background: [neutral.light[100], neutral.dark[5]],
32
32
  },
33
33
  });
@@ -94,7 +94,7 @@ export const neutralTheme = defineTheme({
94
94
  '--color-background-muted': [neutral.light[95], neutral.dark[10]],
95
95
 
96
96
  '--color-accent': [neutral.light[10], neutral.dark[95]],
97
- '--color-accent-muted': [neutral.light[95], neutral.dark[15]],
97
+ '--color-accent-muted': [neutral.light[85], neutral.dark[30]],
98
98
  '--color-neutral': [
99
99
  withAlpha(neutral.light[0], '0F'),
100
100
  withAlpha(neutral.dark[100], '1A'),
@@ -273,6 +273,32 @@ export const neutralTheme = defineTheme({
273
273
  },
274
274
 
275
275
  components: {
276
+ // In dark mode, secondary text falls under 4.5:1 on the selected fill
277
+ // and under its hover. Selected rows use the next stop that clears both.
278
+ item: {
279
+ selected: {
280
+ '--color-text-secondary': `light-dark(${neutral.light[30]}, ${neutral.dark[80]})`,
281
+ },
282
+ },
283
+ 'tree-list-item': {
284
+ selected: {
285
+ '--color-text-secondary': `light-dark(${neutral.light[30]}, ${neutral.dark[80]})`,
286
+ },
287
+ },
288
+ // A dropzone's hint sits on the same fill while a file is dragged over.
289
+ // That state has no target, so the dropzone takes the lift at rest too.
290
+ 'file-input': {
291
+ 'mode:dropzone': {
292
+ '--color-text-secondary': `light-dark(${neutral.light[30]}, ${neutral.dark[80]})`,
293
+ },
294
+ },
295
+ // A numbered citation is a pill on the same fill.
296
+ citation: {
297
+ 'variant:number': {
298
+ '--color-text-secondary': `light-dark(${neutral.light[30]}, ${neutral.dark[80]})`,
299
+ },
300
+ },
301
+
276
302
  button: {
277
303
  'variant:destructive': {
278
304
  backgroundColor: 'var(--color-error-muted)',