@neuravision/construct 2.2.1 → 2.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +71 -0
- package/README.md +5 -3
- package/aperture.demo.html +21 -0
- package/components/README.md +42 -1
- package/components/alert.css +4 -1
- package/components/aperture.css +441 -0
- package/components/card.css +6 -0
- package/components/drawer.css +3 -0
- package/components/field.css +3 -0
- package/components/index.css +3 -0
- package/components/modal.css +7 -1
- package/components/table.css +5 -3
- package/components/tabs.css +5 -1
- package/docs/aperture-review.md +55 -0
- package/docs/aperture.md +114 -0
- package/docs/assets/aperture-review/after-desktop.png +0 -0
- package/docs/assets/aperture-review/after-mobile.png +0 -0
- package/docs/assets/aperture-review/after-monochrome.png +0 -0
- package/docs/assets/aperture-review/before-desktop.png +0 -0
- package/examples/aperture/showcase.css +363 -0
- package/examples/aperture/showcase.js +145 -0
- package/package.json +6 -3
- package/schemas/components.schema.json +19 -1
- package/schemas/semantic.schema.json +18 -2
- package/scripts/build-tokens.mjs +20 -0
- package/standalone/aperture.css +3 -0
- package/tokens/components.json +13 -0
- package/tokens/primitives.json +14 -0
- package/tokens/semantic.dark.json +9 -0
- package/tokens/semantic.high-contrast-dark.json +9 -0
- package/tokens/semantic.high-contrast.json +9 -0
- package/tokens/semantic.light.json +10 -0
- package/tokens/tokens.css +150 -0
- package/tokens/tokens.js +166 -0
- package/tokens/tokens.json +166 -0
- package/tokens/tokens.ts +166 -0
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
// Shared by the standalone preview and Storybook. All artwork is CSS.
|
|
2
|
+
// Native links, details and radios need no composite-widget controller.
|
|
3
|
+
let instance = 0;
|
|
4
|
+
|
|
5
|
+
export const apertureMark = '<span class="ct-aperture-mark" aria-hidden="true"></span>';
|
|
6
|
+
export const apertureArrow = '<span class="ct-aperture-action__icon" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" focusable="false"><path d="M5 19 19 5M5 5h14v14"/></svg></span>';
|
|
7
|
+
export const apertureRule = '<div class="ct-aperture-rule" aria-hidden="true"></div>';
|
|
8
|
+
|
|
9
|
+
export function createApertureShowcase({ themeControls = false } = {}) {
|
|
10
|
+
const id = `aperture-${++instance}`;
|
|
11
|
+
const root = document.createElement('div');
|
|
12
|
+
root.className = 'ct-aperture aperture-demo';
|
|
13
|
+
root.lang = 'de';
|
|
14
|
+
if (themeControls) root.dataset.theme = 'light';
|
|
15
|
+
|
|
16
|
+
root.innerHTML = `
|
|
17
|
+
<a class="aperture-demo__skip" href="#${id}-main">Zum Inhalt</a>
|
|
18
|
+
<div class="aperture-demo__page" id="${id}-top">
|
|
19
|
+
<header class="aperture-demo__header">
|
|
20
|
+
<a class="ct-aperture-wordmark" href="#${id}-top" aria-label="Aperture – Anfang">
|
|
21
|
+
${apertureMark}aperture
|
|
22
|
+
</a>
|
|
23
|
+
<nav class="aperture-demo__nav" aria-label="Seitenabschnitte">
|
|
24
|
+
<a class="aperture-demo__link" href="#${id}-grammar">Die Grammatik</a>
|
|
25
|
+
<a class="aperture-demo__link" href="#${id}-idea">Der Gedanke</a>
|
|
26
|
+
</nav>
|
|
27
|
+
${themeControls ? `
|
|
28
|
+
<fieldset class="ct-aperture-choices">
|
|
29
|
+
<legend>Farbschema</legend>
|
|
30
|
+
${[['light', 'Hell'], ['dark', 'Dunkel'], ['high-contrast', 'Kontrast']].map(([value, label]) => `
|
|
31
|
+
<label class="ct-aperture-choice">
|
|
32
|
+
<input type="radio" name="${id}-theme" value="${value}" ${value === 'light' ? 'checked' : ''}>
|
|
33
|
+
${label}
|
|
34
|
+
</label>`).join('')}
|
|
35
|
+
</fieldset>` : '<span class="ct-aperture-label">A Construct signature</span>'}
|
|
36
|
+
</header>
|
|
37
|
+
|
|
38
|
+
<main id="${id}-main" tabindex="-1">
|
|
39
|
+
<section class="aperture-demo__hero" aria-labelledby="${id}-title">
|
|
40
|
+
<div class="aperture-demo__intro">
|
|
41
|
+
<p class="ct-aperture-label aperture-demo__eyebrow"><span>A Construct signature</span><span>Look 02</span></p>
|
|
42
|
+
<h1 class="ct-aperture-display" id="${id}-title"><span class="ct-aperture-line">Raum für</span> <span class="ct-aperture-line">Eigenart.</span></h1>
|
|
43
|
+
<p class="aperture-demo__description">Eine klare Form. Ein kleiner Versatz.
|
|
44
|
+
Und plötzlich bleibt etwas im Kopf.</p>
|
|
45
|
+
<a class="ct-aperture-action" href="#${id}-grammar">Aperture entdecken ${apertureArrow}</a>
|
|
46
|
+
</div>
|
|
47
|
+
<figure class="ct-aperture-poster" aria-label="Aperture: zwei versetzte Halbovale auf einer blauen Fläche">
|
|
48
|
+
<div class="aperture-demo__poster-heading"><span class="ct-aperture-label">Offen für das Wesentliche.</span><span aria-hidden="true">02</span></div>
|
|
49
|
+
<div class="ct-aperture-poster__art">${apertureMark}</div>
|
|
50
|
+
<figcaption class="ct-aperture-poster__caption">
|
|
51
|
+
<span class="ct-aperture-poster__title"><span class="ct-aperture-line">Open by</span> <span class="ct-aperture-line">design.</span></span>
|
|
52
|
+
<span>Zwei Hälften.<br>Ein eigener Charakter.</span>
|
|
53
|
+
</figcaption>
|
|
54
|
+
</figure>
|
|
55
|
+
</section>
|
|
56
|
+
|
|
57
|
+
<div class="aperture-demo__edition">
|
|
58
|
+
<span>Ein Spalt offen. Ein Stück weiter.</span>
|
|
59
|
+
<span>Form mit Haltung. Raum für Inhalt.</span>
|
|
60
|
+
</div>
|
|
61
|
+
${apertureRule}
|
|
62
|
+
|
|
63
|
+
<section class="aperture-demo__section" id="${id}-grammar" aria-labelledby="${id}-grammar-title">
|
|
64
|
+
<div class="aperture-demo__section-head">
|
|
65
|
+
<div>
|
|
66
|
+
<p class="ct-aperture-label">01 / Die Grammatik</p>
|
|
67
|
+
<h2 class="ct-aperture-heading" id="${id}-grammar-title"><span class="ct-aperture-line">Eine Form.</span> <span class="ct-aperture-line">Viele Möglichkeiten.</span></h2>
|
|
68
|
+
</div>
|
|
69
|
+
<p>Das geteilte Oval gibt den Takt vor. In der großen Geste genauso wie im kleinen Detail.
|
|
70
|
+
Alles andere lässt dem Inhalt Platz.</p>
|
|
71
|
+
</div>
|
|
72
|
+
|
|
73
|
+
<div class="aperture-demo__specimens">
|
|
74
|
+
<article class="aperture-demo__specimen">
|
|
75
|
+
<div class="aperture-demo__sample aperture-demo__sample--mark" aria-hidden="true">
|
|
76
|
+
<span class="aperture-demo__sample-label">Eine Silhouette. Jeder Maßstab.</span>
|
|
77
|
+
<div class="aperture-demo__marks">${apertureMark}${apertureMark}</div>
|
|
78
|
+
</div>
|
|
79
|
+
<div><h3><span class="aperture-demo__index" aria-hidden="true">01</span>Die Öffnung.</h3><p>Zwei Halbovale. Eine Fuge. Die Silhouette bleibt erkennbar, auch ohne Farbe.</p></div>
|
|
80
|
+
</article>
|
|
81
|
+
<article class="aperture-demo__specimen">
|
|
82
|
+
<div class="aperture-demo__sample aperture-demo__sample--type" aria-hidden="true"><span class="aperture-demo__sample-label">Nicht ganz auf einer Linie.</span><div><span class="ct-aperture-line">Groß.</span><span class="ct-aperture-line">Gedacht.</span></div></div>
|
|
83
|
+
<div><h3><span class="aperture-demo__index" aria-hidden="true">02</span>Der Versatz.</h3><p>Eine Zeile tritt aus der Achse. Aus einer Überschrift wird eine Komposition.</p></div>
|
|
84
|
+
</article>
|
|
85
|
+
<article class="aperture-demo__specimen">
|
|
86
|
+
<div class="aperture-demo__sample aperture-demo__sample--action">
|
|
87
|
+
<span class="aperture-demo__sample-label" aria-hidden="true">Die Form geht mit.</span>
|
|
88
|
+
<a class="ct-aperture-action" href="#${id}-idea">Der Gedanke ${apertureArrow}</a>
|
|
89
|
+
<a class="ct-aperture-action ct-aperture-action--quiet" href="#${id}-top">Zum Anfang ${apertureArrow}</a>
|
|
90
|
+
</div>
|
|
91
|
+
<div><h3><span class="aperture-demo__index" aria-hidden="true">03</span>Die Einladung.</h3><p>Wort und Pfeil. Getrennt durch eine Fuge, verbunden in einer Aktion. Der Versatz geht mit.</p></div>
|
|
92
|
+
</article>
|
|
93
|
+
</div>
|
|
94
|
+
</section>
|
|
95
|
+
|
|
96
|
+
<section class="aperture-demo__note" id="${id}-idea" aria-labelledby="${id}-idea-title">
|
|
97
|
+
<div>
|
|
98
|
+
<p class="ct-aperture-label">02 / Der Gedanke</p>
|
|
99
|
+
<h2 class="ct-aperture-heading" id="${id}-idea-title"><span class="ct-aperture-line">Weniger.</span> <span class="ct-aperture-line">Aber eigen.</span></h2>
|
|
100
|
+
</div>
|
|
101
|
+
<div>
|
|
102
|
+
<details class="ct-aperture-disclosure" open>
|
|
103
|
+
<summary>Warum diese Form?</summary>
|
|
104
|
+
<p>Ein geschlossenes Oval wäre ruhig. Die Teilung und der Versatz bringen Spannung hinein.
|
|
105
|
+
Die Öffnung dazwischen wird zum Erkennungszeichen – vom kleinen Signet bis zum großen Plakat.</p>
|
|
106
|
+
</details>
|
|
107
|
+
<details class="ct-aperture-disclosure">
|
|
108
|
+
<summary>Wie viel Farbe braucht es?</summary>
|
|
109
|
+
<p>Eine entschiedene Farbfläche reicht. Papier, dunkle Schrift und viel freier Raum geben
|
|
110
|
+
dem Kobaltblau Gewicht. Im dunklen Farbschema wird das Blau heller, damit die Form klar bleibt.</p>
|
|
111
|
+
</details>
|
|
112
|
+
<details class="ct-aperture-disclosure">
|
|
113
|
+
<summary>Was hält alles zusammen?</summary>
|
|
114
|
+
<p>Die wiederkehrende Silhouette, eng gesetzte große Schrift und der kleine Versatz.
|
|
115
|
+
Sie verbinden Einstieg, Inhalte und Aktionen zu einer gemeinsamen Sprache.</p>
|
|
116
|
+
</details>
|
|
117
|
+
</div>
|
|
118
|
+
</section>
|
|
119
|
+
</main>
|
|
120
|
+
|
|
121
|
+
<footer class="aperture-demo__footer">
|
|
122
|
+
${apertureRule}
|
|
123
|
+
<div class="aperture-demo__signoff">
|
|
124
|
+
<span class="ct-aperture-wordmark aperture-demo__signature">${apertureMark}aperture</span>
|
|
125
|
+
<p>Ein eigener Blick.<br>Eine offene Haltung.</p>
|
|
126
|
+
</div>
|
|
127
|
+
<div class="aperture-demo__colophon">
|
|
128
|
+
<span>Aperture / Construct</span>
|
|
129
|
+
<span>Form mit Haltung. Seit dem ersten Detail.</span>
|
|
130
|
+
<a class="aperture-demo__link" href="#${id}-top">Zurück nach oben ↑</a>
|
|
131
|
+
</div>
|
|
132
|
+
</footer>
|
|
133
|
+
</div>`;
|
|
134
|
+
|
|
135
|
+
// The handler belongs to this node, with no document/window subscriptions.
|
|
136
|
+
// Removing the example releases both the handler and its theme controls.
|
|
137
|
+
if (themeControls) {
|
|
138
|
+
root.onchange = (event) => {
|
|
139
|
+
if (event.target.matches('.ct-aperture-choice input')) {
|
|
140
|
+
root.dataset.theme = event.target.value;
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
return root;
|
|
145
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@neuravision/construct",
|
|
3
|
-
"version": "2.2
|
|
3
|
+
"version": "2.3.2",
|
|
4
4
|
"description": "Construct Design System - Accessible, token-based design system for modern web applications",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -103,7 +103,10 @@
|
|
|
103
103
|
"scripts/construct-theme.mjs",
|
|
104
104
|
"scripts/validate-tokens.mjs",
|
|
105
105
|
"docs/*.md",
|
|
106
|
+
"docs/assets/aperture-review/*.png",
|
|
106
107
|
"examples/react/*",
|
|
108
|
+
"examples/aperture/*",
|
|
109
|
+
"aperture.demo.html",
|
|
107
110
|
"CHANGELOG.md",
|
|
108
111
|
"README.md"
|
|
109
112
|
],
|
|
@@ -113,10 +116,10 @@
|
|
|
113
116
|
"@storybook/addon-themes": "^10.5.0",
|
|
114
117
|
"@storybook/addon-vitest": "^10.5.0",
|
|
115
118
|
"@storybook/html-vite": "^10.5.0",
|
|
116
|
-
"@vitest/browser-playwright": "^4.1.
|
|
119
|
+
"@vitest/browser-playwright": "^4.1.11",
|
|
117
120
|
"playwright": "^1.61.1",
|
|
118
121
|
"remark-gfm": "^4.0.1",
|
|
119
122
|
"storybook": "^10.5.0",
|
|
120
|
-
"vitest": "^4.1.
|
|
123
|
+
"vitest": "^4.1.11"
|
|
121
124
|
}
|
|
122
125
|
}
|
|
@@ -3,9 +3,27 @@
|
|
|
3
3
|
"$id": "https://neuravision.dev/construct/schemas/components.schema.json",
|
|
4
4
|
"title": "Construct component token contract",
|
|
5
5
|
"type": "object",
|
|
6
|
-
"required": ["button", "control", "card", "frame", "status", "metric", "meter", "datum"],
|
|
6
|
+
"required": ["button", "control", "card", "frame", "status", "metric", "meter", "datum", "aperture"],
|
|
7
7
|
"additionalProperties": false,
|
|
8
8
|
"properties": {
|
|
9
|
+
"aperture": {
|
|
10
|
+
"type": "object",
|
|
11
|
+
"additionalProperties": false,
|
|
12
|
+
"required": ["paper", "surface", "ink", "muted", "accent", "onAccent", "border", "fontFamily", "markSize", "actionHeight", "panelRadius"],
|
|
13
|
+
"properties": {
|
|
14
|
+
"paper": { "$ref": "#/$defs/token" },
|
|
15
|
+
"surface": { "$ref": "#/$defs/token" },
|
|
16
|
+
"ink": { "$ref": "#/$defs/token" },
|
|
17
|
+
"muted": { "$ref": "#/$defs/token" },
|
|
18
|
+
"accent": { "$ref": "#/$defs/token" },
|
|
19
|
+
"onAccent": { "$ref": "#/$defs/token" },
|
|
20
|
+
"border": { "$ref": "#/$defs/token" },
|
|
21
|
+
"fontFamily": { "$ref": "#/$defs/token" },
|
|
22
|
+
"markSize": { "$ref": "#/$defs/token" },
|
|
23
|
+
"actionHeight": { "$ref": "#/$defs/token" },
|
|
24
|
+
"panelRadius": { "$ref": "#/$defs/token" }
|
|
25
|
+
}
|
|
26
|
+
},
|
|
9
27
|
"button": {
|
|
10
28
|
"type": "object",
|
|
11
29
|
"additionalProperties": false,
|
|
@@ -20,10 +20,25 @@
|
|
|
20
20
|
"overlay",
|
|
21
21
|
"focus",
|
|
22
22
|
"avatarSeed",
|
|
23
|
-
"chartSeries"
|
|
23
|
+
"chartSeries",
|
|
24
|
+
"aperture"
|
|
24
25
|
],
|
|
25
26
|
"additionalProperties": false,
|
|
26
27
|
"properties": {
|
|
28
|
+
"aperture": {
|
|
29
|
+
"type": "object",
|
|
30
|
+
"additionalProperties": false,
|
|
31
|
+
"required": ["paper", "surface", "ink", "muted", "accent", "onAccent", "border"],
|
|
32
|
+
"properties": {
|
|
33
|
+
"paper": { "$ref": "#/$defs/token" },
|
|
34
|
+
"surface": { "$ref": "#/$defs/token" },
|
|
35
|
+
"ink": { "$ref": "#/$defs/token" },
|
|
36
|
+
"muted": { "$ref": "#/$defs/token" },
|
|
37
|
+
"accent": { "$ref": "#/$defs/token" },
|
|
38
|
+
"onAccent": { "$ref": "#/$defs/token" },
|
|
39
|
+
"border": { "$ref": "#/$defs/token" }
|
|
40
|
+
}
|
|
41
|
+
},
|
|
27
42
|
"brand": {
|
|
28
43
|
"type": "object",
|
|
29
44
|
"additionalProperties": false,
|
|
@@ -124,8 +139,9 @@
|
|
|
124
139
|
"family": {
|
|
125
140
|
"type": "object",
|
|
126
141
|
"additionalProperties": false,
|
|
127
|
-
"required": ["heading", "body", "code"],
|
|
142
|
+
"required": ["heading", "body", "code", "aperture"],
|
|
128
143
|
"properties": {
|
|
144
|
+
"aperture": { "$ref": "#/$defs/token" },
|
|
129
145
|
"heading": { "$ref": "#/$defs/token" },
|
|
130
146
|
"body": { "$ref": "#/$defs/token" },
|
|
131
147
|
"code": { "$ref": "#/$defs/token" }
|
package/scripts/build-tokens.mjs
CHANGED
|
@@ -27,6 +27,20 @@ const schemaPaths = {
|
|
|
27
27
|
const builtInThemeNames = new Set(['light', 'dark', 'high-contrast', 'high-contrast-dark']);
|
|
28
28
|
|
|
29
29
|
const defaultContrastPairs = [
|
|
30
|
+
...['ink', 'muted'].flatMap((foreground) =>
|
|
31
|
+
['paper', 'surface'].map((background) => ({
|
|
32
|
+
name: `aperture ${foreground} on ${background}`,
|
|
33
|
+
foreground: `components.aperture.${foreground}`,
|
|
34
|
+
background: `components.aperture.${background}`,
|
|
35
|
+
minRatio: 4.5,
|
|
36
|
+
}))
|
|
37
|
+
),
|
|
38
|
+
{
|
|
39
|
+
name: 'aperture text on accent',
|
|
40
|
+
foreground: 'components.aperture.onAccent',
|
|
41
|
+
background: 'components.aperture.accent',
|
|
42
|
+
minRatio: 4.5,
|
|
43
|
+
},
|
|
30
44
|
...['primary', 'secondary', 'muted'].flatMap((text) =>
|
|
31
45
|
['canvas', 'surface', 'elevated'].map((background) => ({
|
|
32
46
|
name: `${text} text on ${background}`,
|
|
@@ -838,6 +852,7 @@ const validateCssShadow = (value, label) => {
|
|
|
838
852
|
};
|
|
839
853
|
|
|
840
854
|
const componentColorPaths = new Set([
|
|
855
|
+
...['paper', 'surface', 'ink', 'muted', 'accent', 'onAccent', 'border'].map((name) => `aperture.${name}`),
|
|
841
856
|
'button.background',
|
|
842
857
|
'button.backgroundHover',
|
|
843
858
|
'button.backgroundActive',
|
|
@@ -859,6 +874,9 @@ const componentColorPaths = new Set([
|
|
|
859
874
|
]);
|
|
860
875
|
|
|
861
876
|
const componentLengthPaths = new Set([
|
|
877
|
+
'aperture.markSize',
|
|
878
|
+
'aperture.actionHeight',
|
|
879
|
+
'aperture.panelRadius',
|
|
862
880
|
'button.height',
|
|
863
881
|
'button.paddingX',
|
|
864
882
|
'button.fontSize',
|
|
@@ -881,6 +899,8 @@ const componentLengthPaths = new Set([
|
|
|
881
899
|
]);
|
|
882
900
|
|
|
883
901
|
const componentPositiveLengthPaths = new Set([
|
|
902
|
+
'aperture.markSize',
|
|
903
|
+
'aperture.actionHeight',
|
|
884
904
|
'button.height',
|
|
885
905
|
'button.fontSize',
|
|
886
906
|
'button.lineHeight',
|
package/tokens/components.json
CHANGED
|
@@ -1,4 +1,17 @@
|
|
|
1
1
|
{
|
|
2
|
+
"aperture": {
|
|
3
|
+
"paper": "{color.aperture.paper}",
|
|
4
|
+
"surface": "{color.aperture.surface}",
|
|
5
|
+
"ink": "{color.aperture.ink}",
|
|
6
|
+
"muted": "{color.aperture.muted}",
|
|
7
|
+
"accent": "{color.aperture.accent}",
|
|
8
|
+
"onAccent": "{color.aperture.onAccent}",
|
|
9
|
+
"border": "{color.aperture.border}",
|
|
10
|
+
"fontFamily": "{font.family.aperture}",
|
|
11
|
+
"markSize": "32px",
|
|
12
|
+
"actionHeight": "48px",
|
|
13
|
+
"panelRadius": "{radius.sm}"
|
|
14
|
+
},
|
|
2
15
|
"button": {
|
|
3
16
|
"background": "{color.brand.primary}",
|
|
4
17
|
"backgroundHover": "{color.brand.primaryHover}",
|
package/tokens/primitives.json
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"color": {
|
|
3
|
+
"cobalt": {
|
|
4
|
+
"200": "#A5B4FF",
|
|
5
|
+
"500": "#2448FF",
|
|
6
|
+
"700": "#1834CE"
|
|
7
|
+
},
|
|
8
|
+
"graphite": {
|
|
9
|
+
"50": "#F5F5F0",
|
|
10
|
+
"100": "#E7E8E2",
|
|
11
|
+
"400": "#95978F",
|
|
12
|
+
"600": "#585B55",
|
|
13
|
+
"800": "#282B28",
|
|
14
|
+
"950": "#111411"
|
|
15
|
+
},
|
|
3
16
|
"stone": {
|
|
4
17
|
"0": "#FFFFFF",
|
|
5
18
|
"50": "#FAFAF8",
|
|
@@ -113,6 +126,7 @@
|
|
|
113
126
|
},
|
|
114
127
|
"font": {
|
|
115
128
|
"family": {
|
|
129
|
+
"grotesk": "Arial, Helvetica, sans-serif",
|
|
116
130
|
"brand": "Lato",
|
|
117
131
|
"text": "Lato",
|
|
118
132
|
"mono": "JetBrains Mono"
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"color": {
|
|
3
|
+
"aperture": {
|
|
4
|
+
"paper": "{color.graphite.950}",
|
|
5
|
+
"surface": "{color.graphite.800}",
|
|
6
|
+
"ink": "{color.graphite.50}",
|
|
7
|
+
"muted": "{color.graphite.400}",
|
|
8
|
+
"accent": "{color.cobalt.200}",
|
|
9
|
+
"onAccent": "{color.graphite.950}",
|
|
10
|
+
"border": "{color.graphite.600}"
|
|
11
|
+
},
|
|
3
12
|
"brand": {
|
|
4
13
|
"primary": "{color.stone.100}",
|
|
5
14
|
"primaryHover": "{color.stone.0}",
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"color": {
|
|
3
|
+
"aperture": {
|
|
4
|
+
"paper": "{color.graphite.950}",
|
|
5
|
+
"surface": "{color.graphite.950}",
|
|
6
|
+
"ink": "{color.stone.0}",
|
|
7
|
+
"muted": "{color.stone.0}",
|
|
8
|
+
"accent": "{color.cobalt.200}",
|
|
9
|
+
"onAccent": "{color.graphite.950}",
|
|
10
|
+
"border": "{color.stone.0}"
|
|
11
|
+
},
|
|
3
12
|
"brand": {
|
|
4
13
|
"primary": "{color.stone.0}",
|
|
5
14
|
"primaryHover": "{color.stone.100}",
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"color": {
|
|
3
|
+
"aperture": {
|
|
4
|
+
"paper": "{color.stone.0}",
|
|
5
|
+
"surface": "{color.stone.0}",
|
|
6
|
+
"ink": "{color.graphite.950}",
|
|
7
|
+
"muted": "{color.graphite.950}",
|
|
8
|
+
"accent": "{color.cobalt.700}",
|
|
9
|
+
"onAccent": "{color.stone.0}",
|
|
10
|
+
"border": "{color.graphite.950}"
|
|
11
|
+
},
|
|
3
12
|
"brand": {
|
|
4
13
|
"primary": "{color.stone.950}",
|
|
5
14
|
"primaryHover": "{color.stone.900}",
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"color": {
|
|
3
|
+
"aperture": {
|
|
4
|
+
"paper": "{color.graphite.50}",
|
|
5
|
+
"surface": "{color.graphite.100}",
|
|
6
|
+
"ink": "{color.graphite.950}",
|
|
7
|
+
"muted": "{color.graphite.600}",
|
|
8
|
+
"accent": "{color.cobalt.500}",
|
|
9
|
+
"onAccent": "{color.stone.0}",
|
|
10
|
+
"border": "{color.graphite.400}"
|
|
11
|
+
},
|
|
3
12
|
"brand": {
|
|
4
13
|
"primary": "{color.stone.950}",
|
|
5
14
|
"primaryHover": "{color.stone.800}",
|
|
@@ -95,6 +104,7 @@
|
|
|
95
104
|
},
|
|
96
105
|
"font": {
|
|
97
106
|
"family": {
|
|
107
|
+
"aperture": "{font.family.grotesk}",
|
|
98
108
|
"heading": "{font.family.brand}",
|
|
99
109
|
"body": "{font.family.text}",
|
|
100
110
|
"code": "{font.family.mono}"
|