@neuravision/construct 2.3.2 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -22,8 +22,17 @@ const schemaPaths = {
22
22
  semantic: path.join(schemasDir, 'semantic.schema.json'),
23
23
  components: path.join(schemasDir, 'components.schema.json'),
24
24
  theme: path.join(schemasDir, 'theme.schema.json'),
25
+ grammar: path.join(schemasDir, 'grammar.schema.json'),
25
26
  };
26
27
 
28
+ /** Grammar sources (`tokens/grammar.<name>.json`) re-map semantic tokens inside a data-grammar scope. */
29
+ const listGrammarSources = () =>
30
+ fs
31
+ .readdirSync(tokensDir)
32
+ .filter((file) => /^grammar\.[a-z][a-z0-9-]*\.json$/.test(file))
33
+ .sort()
34
+ .map((file) => path.join(tokensDir, file));
35
+
27
36
  const builtInThemeNames = new Set(['light', 'dark', 'high-contrast', 'high-contrast-dark']);
28
37
 
29
38
  const defaultContrastPairs = [
@@ -1252,6 +1261,67 @@ const buildTokens = (options) => {
1252
1261
  });
1253
1262
  }
1254
1263
 
1264
+ /*
1265
+ * Grammars (e.g. Aperture as app grammar): every value must reference an existing token so that
1266
+ * one generated block follows all themes – including nested [data-theme] scopes. Each grammar is
1267
+ * resolved against every built-in theme and must pass the same contrast gates as the themes.
1268
+ */
1269
+ const grammars = listGrammarSources().map((grammarPath) => {
1270
+ const grammar = readJson(grammarPath);
1271
+ const relativeGrammarPath = path.relative(designDir, grammarPath);
1272
+ validateSchema(grammar, schemas.grammar, relativeGrammarPath);
1273
+ assertSafeOverrideValues(grammar.semantic, `${relativeGrammarPath}.semantic`);
1274
+ assertKnownOverride(grammar.semantic, semanticLightRaw, relativeGrammarPath);
1275
+ const overrides = flatten(grammar.semantic);
1276
+ for (const entry of overrides) {
1277
+ if (parseReference(entry.value) === null) {
1278
+ throw new Error(
1279
+ `${relativeGrammarPath}: semantic.${entry.pathKey} must reference a token so the grammar follows every theme.`
1280
+ );
1281
+ }
1282
+ }
1283
+ const results = Object.values(builtInThemes).map((theme) => {
1284
+ const semanticRaw = mergeDeep(theme.semanticRaw, grammar.semantic);
1285
+ validateSchema(semanticRaw, schemas.semantic, `${relativeGrammarPath} on theme ${theme.name}`);
1286
+ const layers = buildThemeLayers(`${theme.name} + ${grammar.name}`, semanticRaw, theme.componentRaw);
1287
+ validateResolvedThemeValues({ name: `${theme.name} + ${grammar.name}`, ...layers });
1288
+ return {
1289
+ theme: theme.name,
1290
+ layers,
1291
+ contrastResults: validateContrast({
1292
+ themeName: `${theme.name} + ${grammar.name} grammar`,
1293
+ primitiveLayer,
1294
+ semanticLayer: layers.semanticLayer,
1295
+ componentLayer: layers.componentLayer,
1296
+ pairs: defaultContrastPairs,
1297
+ report: options.reportContrast,
1298
+ }),
1299
+ };
1300
+ });
1301
+ const overriddenNames = new Set(overrides.map((entry) => semanticVarName(entry.path)));
1302
+ const entries = results[0].layers.semanticLayer.cssEntries.filter((entry) =>
1303
+ overriddenNames.has(entry.name)
1304
+ );
1305
+ return { name: grammar.name, selector: grammar.selector, source: relativeGrammarPath, entries, results };
1306
+ });
1307
+
1308
+ /*
1309
+ * :root[...] outranks the system-preference blocks (:root:not([data-theme])); the descendant
1310
+ * [data-theme] selector re-applies the re-map below nested theme scopes, which otherwise reset
1311
+ * the semantic tokens to the default grammar.
1312
+ */
1313
+ const grammarBlocks = grammars.flatMap((grammar) => {
1314
+ if (!grammar.entries.length) return [];
1315
+ const selectors = [`:root${grammar.selector}`, grammar.selector, `${grammar.selector} [data-theme]`];
1316
+ return [
1317
+ `/* Grammar: ${grammar.name} (${grammar.source}) */`,
1318
+ `${selectors.join(',\n')} {`,
1319
+ ...section(`Semantic (${grammar.name} grammar)`, grammar.entries),
1320
+ '}',
1321
+ '',
1322
+ ];
1323
+ });
1324
+
1255
1325
  const lightTheme = builtInThemes.light;
1256
1326
  const darkSemanticDiff = cssDiffEntries(lightTheme.semanticLayer, builtInThemes.dark.semanticLayer);
1257
1327
  const darkSemanticEntries = builtInThemes.dark.semanticLayer.cssEntries;
@@ -1403,6 +1473,8 @@ const buildTokens = (options) => {
1403
1473
  highContrastDarkSemanticEntries,
1404
1474
  highContrastDarkComponentEntries
1405
1475
  ),
1476
+ /* Grammars come last so their re-map wins over theme and system-preference blocks. */
1477
+ ...grammarBlocks,
1406
1478
  ];
1407
1479
 
1408
1480
  const semanticThemes = {};
@@ -1418,6 +1490,7 @@ const buildTokens = (options) => {
1418
1490
  formatVersion: 1,
1419
1491
  layers: ['primitives', 'semantic', 'components'],
1420
1492
  themes: allThemes.map((theme) => theme.name),
1493
+ grammars: grammars.map((grammar) => ({ name: grammar.name, selector: grammar.selector })),
1421
1494
  };
1422
1495
  const cssVars = {
1423
1496
  primitives: primitiveLayer.cssVars,
@@ -0,0 +1,3 @@
1
+ /* Generated by scripts/build-standalone-components.mjs. Do not edit directly. */
2
+ @import './core.css';
3
+ @import '../components/aperture-app.css';
@@ -0,0 +1,3 @@
1
+ /* Generated by scripts/build-standalone-components.mjs. Do not edit directly. */
2
+ @import './core.css';
3
+ @import '../components/bottom-nav.css';
@@ -0,0 +1,3 @@
1
+ /* Generated by scripts/build-standalone-components.mjs. Do not edit directly. */
2
+ @import './core.css';
3
+ @import '../components/stepper.css';
@@ -0,0 +1,53 @@
1
+ {
2
+ "$schema": "../schemas/grammar.schema.json",
3
+ "name": "aperture",
4
+ "description": "Aperture als App-Grammatik: Paper und Ink, Kobalt als einziger Akzent, 4-px-Radien, Grotesk. Alle Werte verweisen auf themenabhängige Aperture-Rollen, damit ein Block alle Themes abdeckt.",
5
+ "selector": "[data-grammar=\"aperture\"]",
6
+ "semantic": {
7
+ "color": {
8
+ "brand": {
9
+ "primary": "{color.aperture.accent}",
10
+ "primaryHover": "{color.aperture.accentHover}",
11
+ "primaryActive": "{color.aperture.accentActive}",
12
+ "accent": "{color.aperture.accent}",
13
+ "accentHover": "{color.aperture.accentHover}",
14
+ "accentActive": "{color.aperture.accentActive}",
15
+ "accentStrong": "{color.aperture.accentActive}",
16
+ "onAccent": "{color.aperture.onAccent}"
17
+ },
18
+ "text": {
19
+ "primary": "{color.aperture.ink}",
20
+ "secondary": "{color.aperture.muted}",
21
+ "muted": "{color.aperture.muted}",
22
+ "onPrimary": "{color.aperture.onAccent}"
23
+ },
24
+ "background": {
25
+ "canvas": "{color.aperture.paper}",
26
+ "surface": "{color.aperture.paper}",
27
+ "elevated": "{color.aperture.elevated}",
28
+ "muted": "{color.aperture.surface}",
29
+ "subtle": "{color.aperture.surface}"
30
+ },
31
+ "border": {
32
+ "subtle": "{color.aperture.borderSubtle}",
33
+ "default": "{color.aperture.muted}",
34
+ "strong": "{color.aperture.ink}",
35
+ "muted": "{color.aperture.borderSubtle}"
36
+ },
37
+ "focus": {
38
+ "ring": "{color.aperture.accent}"
39
+ }
40
+ },
41
+ "font": {
42
+ "family": {
43
+ "heading": "{font.family.aperture}",
44
+ "body": "{font.family.aperture}"
45
+ }
46
+ },
47
+ "radius": {
48
+ "control": "{radius.sm}",
49
+ "card": "{radius.sm}",
50
+ "modal": "{radius.sm}"
51
+ }
52
+ }
53
+ }
@@ -1,16 +1,25 @@
1
1
  {
2
2
  "color": {
3
3
  "cobalt": {
4
+ "100": "#DCE2FF",
4
5
  "200": "#A5B4FF",
6
+ "300": "#7D90FF",
5
7
  "500": "#2448FF",
6
- "700": "#1834CE"
8
+ "600": "#1E3EE6",
9
+ "700": "#1834CE",
10
+ "800": "#132AA6",
11
+ "900": "#0D1D6E"
7
12
  },
8
13
  "graphite": {
9
14
  "50": "#F5F5F0",
10
15
  "100": "#E7E8E2",
16
+ "200": "#D2D4CC",
17
+ "300": "#B4B6AE",
11
18
  "400": "#95978F",
12
19
  "600": "#585B55",
20
+ "700": "#3E413C",
13
21
  "800": "#282B28",
22
+ "900": "#1B1E1B",
14
23
  "950": "#111411"
15
24
  },
16
25
  "stone": {
@@ -7,7 +7,11 @@
7
7
  "muted": "{color.graphite.400}",
8
8
  "accent": "{color.cobalt.200}",
9
9
  "onAccent": "{color.graphite.950}",
10
- "border": "{color.graphite.600}"
10
+ "border": "{color.graphite.600}",
11
+ "elevated": "{color.graphite.900}",
12
+ "accentHover": "{color.cobalt.100}",
13
+ "accentActive": "{color.cobalt.300}",
14
+ "borderSubtle": "{color.graphite.700}"
11
15
  },
12
16
  "brand": {
13
17
  "primary": "{color.stone.100}",
@@ -7,7 +7,11 @@
7
7
  "muted": "{color.stone.0}",
8
8
  "accent": "{color.cobalt.200}",
9
9
  "onAccent": "{color.graphite.950}",
10
- "border": "{color.stone.0}"
10
+ "border": "{color.stone.0}",
11
+ "elevated": "{color.graphite.950}",
12
+ "accentHover": "{color.cobalt.100}",
13
+ "accentActive": "{color.cobalt.300}",
14
+ "borderSubtle": "{color.stone.0}"
11
15
  },
12
16
  "brand": {
13
17
  "primary": "{color.stone.0}",
@@ -7,7 +7,11 @@
7
7
  "muted": "{color.graphite.950}",
8
8
  "accent": "{color.cobalt.700}",
9
9
  "onAccent": "{color.stone.0}",
10
- "border": "{color.graphite.950}"
10
+ "border": "{color.graphite.950}",
11
+ "elevated": "{color.stone.0}",
12
+ "accentHover": "{color.cobalt.800}",
13
+ "accentActive": "{color.cobalt.900}",
14
+ "borderSubtle": "{color.graphite.950}"
11
15
  },
12
16
  "brand": {
13
17
  "primary": "{color.stone.950}",
@@ -7,7 +7,11 @@
7
7
  "muted": "{color.graphite.600}",
8
8
  "accent": "{color.cobalt.500}",
9
9
  "onAccent": "{color.stone.0}",
10
- "border": "{color.graphite.400}"
10
+ "border": "{color.graphite.400}",
11
+ "elevated": "{color.stone.0}",
12
+ "accentHover": "{color.cobalt.600}",
13
+ "accentActive": "{color.cobalt.700}",
14
+ "borderSubtle": "{color.graphite.200}"
11
15
  },
12
16
  "brand": {
13
17
  "primary": "{color.stone.950}",
package/tokens/tokens.css CHANGED
@@ -1,14 +1,23 @@
1
1
  /* Generated by scripts/build-tokens.mjs. Do not edit directly. */
2
2
  :root {
3
3
  /* Primitive: colors */
4
+ --color-cobalt-100: #DCE2FF;
4
5
  --color-cobalt-200: #A5B4FF;
6
+ --color-cobalt-300: #7D90FF;
5
7
  --color-cobalt-500: #2448FF;
8
+ --color-cobalt-600: #1E3EE6;
6
9
  --color-cobalt-700: #1834CE;
10
+ --color-cobalt-800: #132AA6;
11
+ --color-cobalt-900: #0D1D6E;
7
12
  --color-graphite-50: #F5F5F0;
8
13
  --color-graphite-100: #E7E8E2;
14
+ --color-graphite-200: #D2D4CC;
15
+ --color-graphite-300: #B4B6AE;
9
16
  --color-graphite-400: #95978F;
10
17
  --color-graphite-600: #585B55;
18
+ --color-graphite-700: #3E413C;
11
19
  --color-graphite-800: #282B28;
20
+ --color-graphite-900: #1B1E1B;
12
21
  --color-graphite-950: #111411;
13
22
  --color-stone-0: #FFFFFF;
14
23
  --color-stone-50: #FAFAF8;
@@ -272,6 +281,10 @@
272
281
  --color-aperture-accent: var(--color-cobalt-500);
273
282
  --color-aperture-on-accent: var(--color-stone-0);
274
283
  --color-aperture-border: var(--color-graphite-400);
284
+ --color-aperture-elevated: var(--color-stone-0);
285
+ --color-aperture-accent-hover: var(--color-cobalt-600);
286
+ --color-aperture-accent-active: var(--color-cobalt-700);
287
+ --color-aperture-border-subtle: var(--color-graphite-200);
275
288
  --color-brand-primary: var(--color-stone-950);
276
289
  --color-brand-primary-hover: var(--color-stone-800);
277
290
  --color-brand-primary-active: var(--color-stone-900);
@@ -425,6 +438,10 @@
425
438
  --color-aperture-accent: var(--color-cobalt-500);
426
439
  --color-aperture-on-accent: var(--color-stone-0);
427
440
  --color-aperture-border: var(--color-graphite-400);
441
+ --color-aperture-elevated: var(--color-stone-0);
442
+ --color-aperture-accent-hover: var(--color-cobalt-600);
443
+ --color-aperture-accent-active: var(--color-cobalt-700);
444
+ --color-aperture-border-subtle: var(--color-graphite-200);
428
445
  --color-brand-primary: var(--color-stone-950);
429
446
  --color-brand-primary-hover: var(--color-stone-800);
430
447
  --color-brand-primary-active: var(--color-stone-900);
@@ -623,6 +640,10 @@
623
640
  --color-aperture-accent: var(--color-cobalt-200);
624
641
  --color-aperture-on-accent: var(--color-graphite-950);
625
642
  --color-aperture-border: var(--color-graphite-600);
643
+ --color-aperture-elevated: var(--color-graphite-900);
644
+ --color-aperture-accent-hover: var(--color-cobalt-100);
645
+ --color-aperture-accent-active: var(--color-cobalt-300);
646
+ --color-aperture-border-subtle: var(--color-graphite-700);
626
647
  --color-brand-primary: var(--color-stone-100);
627
648
  --color-brand-primary-hover: var(--color-stone-0);
628
649
  --color-brand-primary-active: var(--color-stone-200);
@@ -821,6 +842,10 @@
821
842
  --color-aperture-accent: var(--color-cobalt-700);
822
843
  --color-aperture-on-accent: var(--color-stone-0);
823
844
  --color-aperture-border: var(--color-graphite-950);
845
+ --color-aperture-elevated: var(--color-stone-0);
846
+ --color-aperture-accent-hover: var(--color-cobalt-800);
847
+ --color-aperture-accent-active: var(--color-cobalt-900);
848
+ --color-aperture-border-subtle: var(--color-graphite-950);
824
849
  --color-brand-primary: var(--color-stone-950);
825
850
  --color-brand-primary-hover: var(--color-stone-900);
826
851
  --color-brand-primary-active: var(--color-stone-800);
@@ -1019,6 +1044,10 @@
1019
1044
  --color-aperture-accent: var(--color-cobalt-200);
1020
1045
  --color-aperture-on-accent: var(--color-graphite-950);
1021
1046
  --color-aperture-border: var(--color-stone-0);
1047
+ --color-aperture-elevated: var(--color-graphite-950);
1048
+ --color-aperture-accent-hover: var(--color-cobalt-100);
1049
+ --color-aperture-accent-active: var(--color-cobalt-300);
1050
+ --color-aperture-border-subtle: var(--color-stone-0);
1022
1051
  --color-brand-primary: var(--color-stone-0);
1023
1052
  --color-brand-primary-hover: var(--color-stone-100);
1024
1053
  --color-brand-primary-active: var(--color-stone-200);
@@ -1217,6 +1246,10 @@
1217
1246
  --color-aperture-accent: var(--color-cobalt-200);
1218
1247
  --color-aperture-on-accent: var(--color-graphite-950);
1219
1248
  --color-aperture-border: var(--color-graphite-600);
1249
+ --color-aperture-elevated: var(--color-graphite-900);
1250
+ --color-aperture-accent-hover: var(--color-cobalt-100);
1251
+ --color-aperture-accent-active: var(--color-cobalt-300);
1252
+ --color-aperture-border-subtle: var(--color-graphite-700);
1220
1253
  --color-brand-primary: var(--color-stone-100);
1221
1254
  --color-brand-primary-hover: var(--color-stone-0);
1222
1255
  --color-brand-primary-active: var(--color-stone-200);
@@ -1292,6 +1325,10 @@
1292
1325
  --color-aperture-accent: var(--color-cobalt-700);
1293
1326
  --color-aperture-on-accent: var(--color-stone-0);
1294
1327
  --color-aperture-border: var(--color-graphite-950);
1328
+ --color-aperture-elevated: var(--color-stone-0);
1329
+ --color-aperture-accent-hover: var(--color-cobalt-800);
1330
+ --color-aperture-accent-active: var(--color-cobalt-900);
1331
+ --color-aperture-border-subtle: var(--color-graphite-950);
1295
1332
  --color-brand-primary: var(--color-stone-950);
1296
1333
  --color-brand-primary-hover: var(--color-stone-900);
1297
1334
  --color-brand-primary-active: var(--color-stone-800);
@@ -1491,6 +1528,10 @@
1491
1528
  --color-aperture-accent: var(--color-cobalt-200);
1492
1529
  --color-aperture-on-accent: var(--color-graphite-950);
1493
1530
  --color-aperture-border: var(--color-stone-0);
1531
+ --color-aperture-elevated: var(--color-graphite-950);
1532
+ --color-aperture-accent-hover: var(--color-cobalt-100);
1533
+ --color-aperture-accent-active: var(--color-cobalt-300);
1534
+ --color-aperture-border-subtle: var(--color-stone-0);
1494
1535
  --color-brand-primary: var(--color-stone-0);
1495
1536
  --color-brand-primary-hover: var(--color-stone-100);
1496
1537
  --color-brand-primary-active: var(--color-stone-200);
@@ -1679,3 +1720,37 @@
1679
1720
  --component-datum-scale-major-step: 60px;
1680
1721
  }
1681
1722
  }
1723
+
1724
+ /* Grammar: aperture (tokens/grammar.aperture.json) */
1725
+ :root[data-grammar="aperture"],
1726
+ [data-grammar="aperture"],
1727
+ [data-grammar="aperture"] [data-theme] {
1728
+ /* Semantic (aperture grammar) */
1729
+ --color-brand-primary: var(--color-aperture-accent);
1730
+ --color-brand-primary-hover: var(--color-aperture-accent-hover);
1731
+ --color-brand-primary-active: var(--color-aperture-accent-active);
1732
+ --color-brand-accent: var(--color-aperture-accent);
1733
+ --color-brand-accent-hover: var(--color-aperture-accent-hover);
1734
+ --color-brand-accent-active: var(--color-aperture-accent-active);
1735
+ --color-brand-accent-strong: var(--color-aperture-accent-active);
1736
+ --color-brand-on-accent: var(--color-aperture-on-accent);
1737
+ --color-text-primary: var(--color-aperture-ink);
1738
+ --color-text-secondary: var(--color-aperture-muted);
1739
+ --color-text-muted: var(--color-aperture-muted);
1740
+ --color-text-on-primary: var(--color-aperture-on-accent);
1741
+ --color-bg-canvas: var(--color-aperture-paper);
1742
+ --color-bg-surface: var(--color-aperture-paper);
1743
+ --color-bg-elevated: var(--color-aperture-elevated);
1744
+ --color-bg-muted: var(--color-aperture-surface);
1745
+ --color-bg-subtle: var(--color-aperture-surface);
1746
+ --color-border-subtle: var(--color-aperture-border-subtle);
1747
+ --color-border-default: var(--color-aperture-muted);
1748
+ --color-border-strong: var(--color-aperture-ink);
1749
+ --color-border-muted: var(--color-aperture-border-subtle);
1750
+ --color-focus-ring: var(--color-aperture-accent);
1751
+ --font-family-heading: var(--font-family-aperture);
1752
+ --font-family-body: var(--font-family-aperture);
1753
+ --radius-control: var(--radius-sm);
1754
+ --radius-card: var(--radius-sm);
1755
+ --radius-modal: var(--radius-sm);
1756
+ }
package/tokens/tokens.js CHANGED
@@ -12,22 +12,37 @@ export const tokenMetadata = {
12
12
  "dark",
13
13
  "high-contrast",
14
14
  "high-contrast-dark"
15
+ ],
16
+ "grammars": [
17
+ {
18
+ "name": "aperture",
19
+ "selector": "[data-grammar=\"aperture\"]"
20
+ }
15
21
  ]
16
22
  };
17
23
 
18
24
  export const primitives = {
19
25
  "color": {
20
26
  "cobalt": {
27
+ "100": "#DCE2FF",
21
28
  "200": "#A5B4FF",
29
+ "300": "#7D90FF",
22
30
  "500": "#2448FF",
23
- "700": "#1834CE"
31
+ "600": "#1E3EE6",
32
+ "700": "#1834CE",
33
+ "800": "#132AA6",
34
+ "900": "#0D1D6E"
24
35
  },
25
36
  "graphite": {
26
37
  "50": "#F5F5F0",
27
38
  "100": "#E7E8E2",
39
+ "200": "#D2D4CC",
40
+ "300": "#B4B6AE",
28
41
  "400": "#95978F",
29
42
  "600": "#585B55",
43
+ "700": "#3E413C",
30
44
  "800": "#282B28",
45
+ "900": "#1B1E1B",
31
46
  "950": "#111411"
32
47
  },
33
48
  "stone": {
@@ -307,7 +322,11 @@ export const semantic = {
307
322
  "muted": "#585B55",
308
323
  "accent": "#2448FF",
309
324
  "onAccent": "#FFFFFF",
310
- "border": "#95978F"
325
+ "border": "#95978F",
326
+ "elevated": "#FFFFFF",
327
+ "accentHover": "#1E3EE6",
328
+ "accentActive": "#1834CE",
329
+ "borderSubtle": "#D2D4CC"
311
330
  },
312
331
  "brand": {
313
332
  "primary": "#16130F",
@@ -582,7 +601,11 @@ export const semanticThemes = {
582
601
  "muted": "#585B55",
583
602
  "accent": "#2448FF",
584
603
  "onAccent": "#FFFFFF",
585
- "border": "#95978F"
604
+ "border": "#95978F",
605
+ "elevated": "#FFFFFF",
606
+ "accentHover": "#1E3EE6",
607
+ "accentActive": "#1834CE",
608
+ "borderSubtle": "#D2D4CC"
586
609
  },
587
610
  "brand": {
588
611
  "primary": "#16130F",
@@ -771,7 +794,11 @@ export const semanticThemes = {
771
794
  "muted": "#95978F",
772
795
  "accent": "#A5B4FF",
773
796
  "onAccent": "#111411",
774
- "border": "#585B55"
797
+ "border": "#585B55",
798
+ "elevated": "#1B1E1B",
799
+ "accentHover": "#DCE2FF",
800
+ "accentActive": "#7D90FF",
801
+ "borderSubtle": "#3E413C"
775
802
  },
776
803
  "brand": {
777
804
  "primary": "#F1F0EB",
@@ -960,7 +987,11 @@ export const semanticThemes = {
960
987
  "muted": "#111411",
961
988
  "accent": "#1834CE",
962
989
  "onAccent": "#FFFFFF",
963
- "border": "#111411"
990
+ "border": "#111411",
991
+ "elevated": "#FFFFFF",
992
+ "accentHover": "#132AA6",
993
+ "accentActive": "#0D1D6E",
994
+ "borderSubtle": "#111411"
964
995
  },
965
996
  "brand": {
966
997
  "primary": "#16130F",
@@ -1149,7 +1180,11 @@ export const semanticThemes = {
1149
1180
  "muted": "#FFFFFF",
1150
1181
  "accent": "#A5B4FF",
1151
1182
  "onAccent": "#111411",
1152
- "border": "#FFFFFF"
1183
+ "border": "#FFFFFF",
1184
+ "elevated": "#111411",
1185
+ "accentHover": "#DCE2FF",
1186
+ "accentActive": "#7D90FF",
1187
+ "borderSubtle": "#FFFFFF"
1153
1188
  },
1154
1189
  "brand": {
1155
1190
  "primary": "#FFFFFF",
@@ -1670,16 +1705,25 @@ export const cssVars = {
1670
1705
  "primitives": {
1671
1706
  "color": {
1672
1707
  "cobalt": {
1708
+ "100": "var(--color-cobalt-100)",
1673
1709
  "200": "var(--color-cobalt-200)",
1710
+ "300": "var(--color-cobalt-300)",
1674
1711
  "500": "var(--color-cobalt-500)",
1675
- "700": "var(--color-cobalt-700)"
1712
+ "600": "var(--color-cobalt-600)",
1713
+ "700": "var(--color-cobalt-700)",
1714
+ "800": "var(--color-cobalt-800)",
1715
+ "900": "var(--color-cobalt-900)"
1676
1716
  },
1677
1717
  "graphite": {
1678
1718
  "50": "var(--color-graphite-50)",
1679
1719
  "100": "var(--color-graphite-100)",
1720
+ "200": "var(--color-graphite-200)",
1721
+ "300": "var(--color-graphite-300)",
1680
1722
  "400": "var(--color-graphite-400)",
1681
1723
  "600": "var(--color-graphite-600)",
1724
+ "700": "var(--color-graphite-700)",
1682
1725
  "800": "var(--color-graphite-800)",
1726
+ "900": "var(--color-graphite-900)",
1683
1727
  "950": "var(--color-graphite-950)"
1684
1728
  },
1685
1729
  "stone": {
@@ -1958,7 +2002,11 @@ export const cssVars = {
1958
2002
  "muted": "var(--color-aperture-muted)",
1959
2003
  "accent": "var(--color-aperture-accent)",
1960
2004
  "onAccent": "var(--color-aperture-on-accent)",
1961
- "border": "var(--color-aperture-border)"
2005
+ "border": "var(--color-aperture-border)",
2006
+ "elevated": "var(--color-aperture-elevated)",
2007
+ "accentHover": "var(--color-aperture-accent-hover)",
2008
+ "accentActive": "var(--color-aperture-accent-active)",
2009
+ "borderSubtle": "var(--color-aperture-border-subtle)"
1962
2010
  },
1963
2011
  "brand": {
1964
2012
  "primary": "var(--color-brand-primary)",