@agentshouse/mdhouse-tokens 0.1.0-alpha.1

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Anton (trof3039)
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,39 @@
1
+ # @agentshouse/mdhouse-tokens
2
+
3
+ The agents.house design tokens and identity assets. Tokens and assets only:
4
+ no component, no script and no font binary.
5
+
6
+ A House ceremony page and the official panel both style themselves from this
7
+ package, so a ceremony opened from the panel is recognisably the same product
8
+ ([PRD-0072 §2](https://github.com/agentshouse/core/blob/main/docs/prd/prd-0072-the-official-panel-application.md)).
9
+
10
+ | Export | What it is |
11
+ | --- | --- |
12
+ | `@agentshouse/mdhouse-tokens/tokens.css` | The semantic tokens as CSS custom properties. Light is the root value, dark replaces it under `prefers-color-scheme`, and every scheme token carries both values, so the switch needs no script |
13
+ | `@agentshouse/mdhouse-tokens/tokens.json` | The same tokens, machine-readable, with both schemes resolved to concrete values |
14
+ | `@agentshouse/mdhouse-tokens/assets/*` | The dot mark in its four states, normal, offline, syncing and error, light and dark, and the App icons |
15
+
16
+ ```html
17
+ <link rel="stylesheet" href="…/@agentshouse/mdhouse-tokens/tokens.css" />
18
+ ```
19
+
20
+ ```css
21
+ .page {
22
+ background-color: var(--surface-canvas);
23
+ color: var(--text-primary);
24
+ font-family: var(--font-ui);
25
+ }
26
+ ```
27
+
28
+ Never declare a transition on the `background` shorthand for an element whose
29
+ background comes from a token: the shorthand stops `background-color` from
30
+ committing when the token resolves to the other scheme's value. Transition the
31
+ concrete `background-color` longhand instead.
32
+
33
+ The identity mark carries visible status text beside it and takes the
34
+ precedence error over syncing over offline over normal. Colour is never its
35
+ only signal: the states differ by fill, outline and motion too.
36
+
37
+ Every file here is derived from `docs/design/system/` in
38
+ [`agentshouse/mdhouse`](https://github.com/agentshouse/mdhouse), which is the
39
+ one owner of the values and the design document that records their provenance.
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="512" height="512" role="img" aria-label="agents.house"><rect width="512" height="512" rx="114" fill="#181818"/><circle cx="256" cy="256" r="88" fill="#ffffff"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="512" height="512" role="img" aria-label="agents.house"><rect width="512" height="512" rx="114" fill="#ffffff"/><circle cx="256" cy="256" r="88" fill="#1a1c1f"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" role="img" aria-label="agents.house"><circle cx="16" cy="16" r="10" fill="#ffffff"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" role="img" aria-label="agents.house, error"><circle cx="16" cy="16" r="10" fill="#fb6563"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" role="img" aria-label="agents.house, error"><circle cx="16" cy="16" r="10" fill="#c8342a"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" role="img" aria-label="agents.house"><circle cx="16" cy="16" r="10" fill="#1a1c1f"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" role="img" aria-label="agents.house, offline"><circle cx="16" cy="16" r="9" fill="none" stroke="#c2c2c2" stroke-width="2"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" role="img" aria-label="agents.house, offline"><circle cx="16" cy="16" r="9" fill="none" stroke="#5e6263" stroke-width="2"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" role="img" aria-label="agents.house, syncing"><style>.pulse{animation:mark-pulse 1800ms ease-in-out infinite}@keyframes mark-pulse{0%,100%{opacity:1}50%{opacity:.45}}@media (prefers-reduced-motion:reduce){.pulse{animation:none}}</style><circle class="pulse" cx="16" cy="16" r="10" fill="#ffffff"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" role="img" aria-label="agents.house, syncing"><style>.pulse{animation:mark-pulse 1800ms ease-in-out infinite}@keyframes mark-pulse{0%,100%{opacity:1}50%{opacity:.45}}@media (prefers-reduced-motion:reduce){.pulse{animation:none}}</style><circle class="pulse" cx="16" cy="16" r="10" fill="#1a1c1f"/></svg>
package/package.json ADDED
@@ -0,0 +1,23 @@
1
+ {
2
+ "name": "@agentshouse/mdhouse-tokens",
3
+ "version": "0.1.0-alpha.1",
4
+ "description": "The agents.house design tokens and identity assets: tokens and assets only, no component and no script",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "sideEffects": ["*.css"],
8
+ "exports": {
9
+ "./tokens.css": "./tokens.css",
10
+ "./tokens.json": "./tokens.json",
11
+ "./assets/*": "./assets/*",
12
+ "./package.json": "./package.json"
13
+ },
14
+ "files": ["tokens.css", "tokens.json", "assets", "README.md", "LICENSE"],
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "git+https://github.com/agentshouse/mdhouse.git",
18
+ "directory": "packages/tokens"
19
+ },
20
+ "publishConfig": {
21
+ "access": "public"
22
+ }
23
+ }
package/tokens.css ADDED
@@ -0,0 +1,279 @@
1
+ /* agents.house design tokens
2
+
3
+ Provenance of every value:
4
+ (M) measured from the 2026-09 reference captures in refs/;
5
+ (D) decided in this repository, where the review measured nothing.
6
+
7
+ The capture scale the measured values were divided by was 2.30 image px per
8
+ CSS px on desktop and 3.00 on mobile. The design document owns the method
9
+ and the decisions; nothing here is provisional.
10
+
11
+ Scheme: the light values are the root values and the dark values replace
12
+ them under prefers-color-scheme, so the switch needs no script. Every token
13
+ between the scheme:begin and scheme:end markers carries both values. */
14
+
15
+ :root {
16
+ color-scheme: light dark;
17
+
18
+ /* ---- primitives: neutral ramp ---- */
19
+ --ah-gray-0: #ffffff; /* M light canvas */
20
+ --ah-gray-25: #f9f9fa; /* D */
21
+ --ah-gray-50: #f4f5f6; /* M light sidebar */
22
+ --ah-gray-75: #e6e6e6; /* D dark solid action, hovered */
23
+ --ah-gray-100: #ededed; /* M light border */
24
+ --ah-gray-150: #eaebeb; /* M light field */
25
+ --ah-gray-200: #e8e9ea; /* M light selected row */
26
+ --ah-gray-300: #d8d9da; /* D */
27
+ --ah-gray-400: #9d9ea0; /* M light muted text */
28
+ --ah-gray-500: #5e6263; /* M light secondary text and icon */
29
+ --ah-gray-600: #49494a; /* M dark selected row */
30
+ --ah-gray-650: #4f4f4f; /* M dark strong border */
31
+ --ah-gray-700: #444545; /* M dark field */
32
+ --ah-gray-750: #3a3b3b; /* M dark sidebar */
33
+ --ah-gray-800: #353535; /* M dark border */
34
+ --ah-gray-825: #2d2d2d; /* M dark inset inside overlay */
35
+ --ah-gray-850: #2b2b2b; /* M dark overlay surface */
36
+ --ah-gray-900: #232323; /* M dark grouped card */
37
+ --ah-gray-950: #181818; /* M dark canvas */
38
+ --ah-ink: #1a1c1f; /* M light primary text */
39
+ --ah-ink-raised: #2c2f33; /* D light solid action, hovered */
40
+ --ah-white: #ffffff; /* M dark primary text */
41
+ --ah-dark-secondary: #c2c2c2; /* M dark secondary text and icon */
42
+ --ah-dark-muted: #838484; /* M dark muted text */
43
+
44
+ /* ---- primitives: the only saturated hue in the system ---- */
45
+ --ah-red-400: #fb6563; /* M dark destructive text */
46
+ --ah-red-600: #c8342a; /* D light destructive text */
47
+ --ah-red-700: #a82a22; /* D light destructive, pressed */
48
+
49
+ /* ---- typography ---- */
50
+ /* The platform's own interface font, with Segoe UI and Helvetica Neue as the
51
+ fallbacks. No web font is loaded and no font binary is packaged. */
52
+ --font-ui: system-ui, -apple-system, 'Segoe UI', 'Helvetica Neue', Helvetica, Arial, sans-serif;
53
+ --font-mono: ui-monospace, 'SF Mono', SFMono-Regular, Menlo, Consolas, monospace;
54
+
55
+ --text-display-size: 26px; /* M */
56
+ --text-display-lh: 32px;
57
+ --text-display-ls: -0.01em;
58
+ --text-title-size: 20px; /* D */
59
+ --text-title-lh: 26px;
60
+ --text-heading-size: 17px; /* D */
61
+ --text-heading-lh: 24px;
62
+ --text-body-size: 16px; /* M */
63
+ --text-body-lh: 24px;
64
+ --text-row-size: 15px; /* M */
65
+ --text-row-lh: 22px;
66
+ --text-small-size: 14px; /* M */
67
+ --text-small-lh: 20px;
68
+ --text-caption-size: 12px; /* D */
69
+ --text-caption-lh: 16px;
70
+ --text-mono-size: 13px; /* D */
71
+ --text-mono-lh: 20px;
72
+ --weight-regular: 400;
73
+ --weight-medium: 500;
74
+ --weight-semibold: 600;
75
+
76
+ /* ---- spacing, on a 4px base ---- */
77
+ --space-1: 2px;
78
+ --space-2: 4px;
79
+ --space-3: 6px;
80
+ --space-4: 8px;
81
+ --space-5: 10px;
82
+ --space-6: 12px;
83
+ --space-7: 16px;
84
+ --space-8: 20px;
85
+ --space-9: 24px;
86
+ --space-10: 32px;
87
+ --space-11: 40px;
88
+ --space-12: 48px;
89
+
90
+ /* ---- radii ---- */
91
+ --radius-xs: 6px; /* D */
92
+ --radius-sm: 8px; /* D */
93
+ --radius-md: 10px; /* M nav row */
94
+ --radius-lg: 14px; /* M grouped card and search field */
95
+ --radius-xl: 18px; /* D dialog and sheet */
96
+ --radius-pill: 999px;
97
+
98
+ /* ---- control and row sizing ---- */
99
+ --control-h-xs: 24px;
100
+ --control-h-sm: 28px; /* M small button */
101
+ --control-h-md: 32px; /* M medium button */
102
+ --control-h-lg: 36px; /* M large button and form field */
103
+ --row-h-nav: 34px; /* M desktop navigation row */
104
+ --row-h-nav-pitch: 35px; /* M */
105
+ --row-h-setting: 52px; /* M single-line setting row */
106
+ --row-h-setting-described: 68px; /* M setting row with a description */
107
+ --row-h-touch: 48px; /* M the floor for any row a finger reaches */
108
+ --target-touch: 44px; /* D the floor for any control a finger reaches */
109
+
110
+ /* Icon sizes are ink sizes, the drawn extent. Lucide draws about 0.83 of its
111
+ viewBox, so a row icon takes an 18px box to put 16px of ink on the row. */
112
+ --icon-14: 14px;
113
+ --icon-16: 16px; /* M nav and setting row icon ink */
114
+ --icon-18: 18px;
115
+ --icon-20: 20px;
116
+ --icon-24: 24px;
117
+ --icon-stroke: 1.5; /* M */
118
+ --icon-row-box: 18px; /* M the box that yields 16px of ink */
119
+
120
+ /* ---- layout ---- */
121
+ --sidebar-w: 276px; /* M expanded */
122
+ --sidebar-w-collapsed: 60px; /* D collapsed */
123
+ --header-h: 52px; /* M */
124
+ --measure-document: 768px; /* D */
125
+ --measure-message: 840px; /* M */
126
+ --measure-settings: 720px; /* M */
127
+ --measure-description: 56ch; /* D */
128
+
129
+ /* ---- identity ---- */
130
+ /* The wordmark is the lowercase string agents.house set in the UI face; the
131
+ period between agents and house is the mark and is drawn as a true circle
132
+ rather than the face's period. Its geometry is relative to the wordmark's
133
+ own size, so it holds at every size the wordmark is set at. */
134
+ --wordmark-size-app: 16px; /* M in the frame header */
135
+ --wordmark-size-marketing: 20px; /* D on marketing-adjacent surfaces */
136
+ --mark-diameter: 0.15em; /* M relative to the wordmark size */
137
+ --mark-bearing: 0.055em; /* M optical side bearing */
138
+ --mark-standalone: 10px; /* D the standalone mark beside status text */
139
+ --mark-outline-width: 1.5px; /* M the offline outline */
140
+
141
+ /* ---- elevation order ---- */
142
+ --z-content: 0;
143
+ --z-sticky: 10;
144
+ --z-sidebar: 20;
145
+ --z-popover: 30;
146
+ --z-scrim: 40;
147
+ --z-dialog: 50;
148
+ --z-toast: 60;
149
+
150
+ /* ---- motion, restrained ---- */
151
+ --motion-fast: 90ms; /* D */
152
+ --motion-base: 140ms; /* D */
153
+ --motion-slow: 220ms; /* D */
154
+ --motion-ease: cubic-bezier(0.2, 0, 0.2, 1); /* D */
155
+ --motion-pulse: 1800ms; /* M the syncing pulse */
156
+
157
+ /* scheme:begin */
158
+ --surface-canvas: var(--ah-gray-0);
159
+ --surface-sidebar: var(--ah-gray-50);
160
+ --surface-raised: var(--ah-gray-0);
161
+ --surface-overlay: var(--ah-gray-0);
162
+ --surface-inset: var(--ah-gray-50);
163
+ --surface-grouped: var(--ah-gray-50);
164
+ --surface-field: var(--ah-gray-150);
165
+ --surface-scrim: rgba(0, 0, 0, 0.32);
166
+
167
+ --text-primary: var(--ah-ink);
168
+ --text-secondary: var(--ah-gray-500);
169
+ --text-muted: var(--ah-gray-400);
170
+ --text-inverse: var(--ah-gray-0);
171
+ --text-danger: var(--ah-red-600);
172
+ --text-link: var(--ah-ink);
173
+
174
+ --icon-primary: var(--ah-ink);
175
+ --icon-secondary: var(--ah-gray-500);
176
+ --icon-muted: var(--ah-gray-400);
177
+
178
+ --border-default: var(--ah-gray-100);
179
+ --border-strong: var(--ah-gray-300);
180
+ --border-field: var(--ah-gray-100);
181
+ --separator: var(--ah-gray-100);
182
+
183
+ --state-hover: rgba(26, 28, 31, 0.05);
184
+ --state-pressed: rgba(26, 28, 31, 0.1);
185
+ --state-selected: var(--ah-gray-200);
186
+ --state-disabled-text: var(--ah-gray-400);
187
+ --focus-ring: var(--ah-ink);
188
+ --focus-ring-offset: var(--surface-canvas);
189
+
190
+ --action-solid-bg: var(--ah-ink);
191
+ --action-solid-fg: var(--ah-gray-0);
192
+ --action-solid-hover: var(--ah-ink-raised);
193
+ --action-quiet-fg: var(--ah-ink);
194
+ /* The destructive fill is a different colour from destructive text: the
195
+ measured destructive text cannot carry legible ink as a fill. */
196
+ --danger-solid-bg: var(--ah-red-600);
197
+ --danger-solid-fg: var(--ah-gray-0);
198
+ --danger-solid-hover: var(--ah-red-700);
199
+ --danger-quiet-hover: rgba(200, 52, 42, 0.08);
200
+
201
+ --control-track-off: var(--ah-gray-300);
202
+ --control-track-on: var(--ah-ink);
203
+ --control-knob: var(--ah-gray-0);
204
+
205
+ --mark-fill: var(--ah-ink);
206
+ --mark-outline: var(--ah-gray-500);
207
+ --mark-error: var(--ah-red-600);
208
+
209
+ --shadow-raised: 0 1px 2px rgba(0, 0, 0, 0.06);
210
+ --shadow-overlay: 0 12px 32px rgba(0, 0, 0, 0.18), 0 2px 6px rgba(0, 0, 0, 0.08);
211
+ --shadow-sheet: 0 -8px 32px rgba(0, 0, 0, 0.18);
212
+ /* scheme:end */
213
+ }
214
+
215
+ @media (prefers-color-scheme: dark) {
216
+ :root {
217
+ --surface-canvas: var(--ah-gray-950);
218
+ --surface-sidebar: var(--ah-gray-750);
219
+ --surface-raised: var(--ah-gray-900);
220
+ --surface-overlay: var(--ah-gray-850);
221
+ --surface-inset: var(--ah-gray-825);
222
+ --surface-grouped: var(--ah-gray-950);
223
+ --surface-field: var(--ah-gray-700);
224
+ --surface-scrim: rgba(0, 0, 0, 0.45);
225
+
226
+ --text-primary: var(--ah-white);
227
+ --text-secondary: var(--ah-dark-secondary);
228
+ --text-muted: var(--ah-dark-muted);
229
+ --text-inverse: var(--ah-ink);
230
+ --text-danger: var(--ah-red-400);
231
+ --text-link: var(--ah-white);
232
+
233
+ --icon-primary: var(--ah-white);
234
+ --icon-secondary: var(--ah-dark-secondary);
235
+ --icon-muted: var(--ah-dark-muted);
236
+
237
+ --border-default: var(--ah-gray-800);
238
+ --border-strong: var(--ah-gray-650);
239
+ --border-field: var(--ah-gray-650);
240
+ --separator: var(--ah-gray-800);
241
+
242
+ --state-hover: rgba(255, 255, 255, 0.06);
243
+ --state-pressed: rgba(255, 255, 255, 0.12);
244
+ --state-selected: var(--ah-gray-600);
245
+ --state-disabled-text: var(--ah-dark-muted);
246
+ --focus-ring: var(--ah-white);
247
+ --focus-ring-offset: var(--surface-canvas);
248
+
249
+ --action-solid-bg: var(--ah-white);
250
+ --action-solid-fg: var(--ah-ink);
251
+ --action-solid-hover: var(--ah-gray-75);
252
+ --action-quiet-fg: var(--ah-white);
253
+ --danger-solid-bg: var(--ah-red-400);
254
+ --danger-solid-fg: var(--ah-ink);
255
+ --danger-solid-hover: var(--ah-red-600);
256
+ --danger-quiet-hover: rgba(251, 101, 99, 0.12);
257
+
258
+ --control-track-off: var(--ah-gray-650);
259
+ --control-track-on: var(--ah-white);
260
+ --control-knob: var(--ah-ink);
261
+
262
+ --mark-fill: var(--ah-white);
263
+ --mark-outline: var(--ah-dark-secondary);
264
+ --mark-error: var(--ah-red-400);
265
+
266
+ --shadow-raised: 0 1px 2px rgba(0, 0, 0, 0.4);
267
+ --shadow-overlay: 0 16px 40px rgba(0, 0, 0, 0.5), 0 2px 8px rgba(0, 0, 0, 0.3);
268
+ --shadow-sheet: 0 -8px 40px rgba(0, 0, 0, 0.5);
269
+ }
270
+ }
271
+
272
+ @media (prefers-reduced-motion: reduce) {
273
+ :root {
274
+ --motion-fast: 0ms;
275
+ --motion-base: 0ms;
276
+ --motion-slow: 0ms;
277
+ --motion-pulse: 0ms;
278
+ }
279
+ }
package/tokens.json ADDED
@@ -0,0 +1,216 @@
1
+ {
2
+ "$meta": {
3
+ "name": "agents.house design tokens",
4
+ "version": "0.1.0-alpha.1",
5
+ "owner": "docs/design/system/tokens.css is the one owner; this file is derived from it",
6
+ "scheme": "the light values are the root values and the dark values replace them under prefers-color-scheme",
7
+ "provenance": "M measured from the 2026-09 reference captures, D decided in this repository; the design document owns both"
8
+ },
9
+ "primitive": {
10
+ "--ah-dark-muted": "#838484",
11
+ "--ah-dark-secondary": "#c2c2c2",
12
+ "--ah-gray-0": "#ffffff",
13
+ "--ah-gray-100": "#ededed",
14
+ "--ah-gray-150": "#eaebeb",
15
+ "--ah-gray-200": "#e8e9ea",
16
+ "--ah-gray-25": "#f9f9fa",
17
+ "--ah-gray-300": "#d8d9da",
18
+ "--ah-gray-400": "#9d9ea0",
19
+ "--ah-gray-50": "#f4f5f6",
20
+ "--ah-gray-500": "#5e6263",
21
+ "--ah-gray-600": "#49494a",
22
+ "--ah-gray-650": "#4f4f4f",
23
+ "--ah-gray-700": "#444545",
24
+ "--ah-gray-75": "#e6e6e6",
25
+ "--ah-gray-750": "#3a3b3b",
26
+ "--ah-gray-800": "#353535",
27
+ "--ah-gray-825": "#2d2d2d",
28
+ "--ah-gray-850": "#2b2b2b",
29
+ "--ah-gray-900": "#232323",
30
+ "--ah-gray-950": "#181818",
31
+ "--ah-ink": "#1a1c1f",
32
+ "--ah-ink-raised": "#2c2f33",
33
+ "--ah-red-400": "#fb6563",
34
+ "--ah-red-600": "#c8342a",
35
+ "--ah-red-700": "#a82a22",
36
+ "--ah-white": "#ffffff"
37
+ },
38
+ "scale": {
39
+ "--control-h-lg": "36px",
40
+ "--control-h-md": "32px",
41
+ "--control-h-sm": "28px",
42
+ "--control-h-xs": "24px",
43
+ "--font-mono": "ui-monospace, 'SF Mono', SFMono-Regular, Menlo, Consolas, monospace",
44
+ "--font-ui": "system-ui, -apple-system, 'Segoe UI', 'Helvetica Neue', Helvetica, Arial, sans-serif",
45
+ "--header-h": "52px",
46
+ "--icon-14": "14px",
47
+ "--icon-16": "16px",
48
+ "--icon-18": "18px",
49
+ "--icon-20": "20px",
50
+ "--icon-24": "24px",
51
+ "--icon-row-box": "18px",
52
+ "--icon-stroke": "1.5",
53
+ "--mark-bearing": "0.055em",
54
+ "--mark-diameter": "0.15em",
55
+ "--mark-outline-width": "1.5px",
56
+ "--mark-standalone": "10px",
57
+ "--measure-description": "56ch",
58
+ "--measure-document": "768px",
59
+ "--measure-message": "840px",
60
+ "--measure-settings": "720px",
61
+ "--motion-base": "140ms",
62
+ "--motion-ease": "cubic-bezier(0.2, 0, 0.2, 1)",
63
+ "--motion-fast": "90ms",
64
+ "--motion-pulse": "1800ms",
65
+ "--motion-slow": "220ms",
66
+ "--radius-lg": "14px",
67
+ "--radius-md": "10px",
68
+ "--radius-pill": "999px",
69
+ "--radius-sm": "8px",
70
+ "--radius-xl": "18px",
71
+ "--radius-xs": "6px",
72
+ "--row-h-nav": "34px",
73
+ "--row-h-nav-pitch": "35px",
74
+ "--row-h-setting": "52px",
75
+ "--row-h-setting-described": "68px",
76
+ "--row-h-touch": "48px",
77
+ "--sidebar-w": "276px",
78
+ "--sidebar-w-collapsed": "60px",
79
+ "--space-1": "2px",
80
+ "--space-10": "32px",
81
+ "--space-11": "40px",
82
+ "--space-12": "48px",
83
+ "--space-2": "4px",
84
+ "--space-3": "6px",
85
+ "--space-4": "8px",
86
+ "--space-5": "10px",
87
+ "--space-6": "12px",
88
+ "--space-7": "16px",
89
+ "--space-8": "20px",
90
+ "--space-9": "24px",
91
+ "--target-touch": "44px",
92
+ "--text-body-lh": "24px",
93
+ "--text-body-size": "16px",
94
+ "--text-caption-lh": "16px",
95
+ "--text-caption-size": "12px",
96
+ "--text-display-lh": "32px",
97
+ "--text-display-ls": "-0.01em",
98
+ "--text-display-size": "26px",
99
+ "--text-heading-lh": "24px",
100
+ "--text-heading-size": "17px",
101
+ "--text-mono-lh": "20px",
102
+ "--text-mono-size": "13px",
103
+ "--text-row-lh": "22px",
104
+ "--text-row-size": "15px",
105
+ "--text-small-lh": "20px",
106
+ "--text-small-size": "14px",
107
+ "--text-title-lh": "26px",
108
+ "--text-title-size": "20px",
109
+ "--weight-medium": "500",
110
+ "--weight-regular": "400",
111
+ "--weight-semibold": "600",
112
+ "--wordmark-size-app": "16px",
113
+ "--wordmark-size-marketing": "20px",
114
+ "--z-content": "0",
115
+ "--z-dialog": "50",
116
+ "--z-popover": "30",
117
+ "--z-scrim": "40",
118
+ "--z-sidebar": "20",
119
+ "--z-sticky": "10",
120
+ "--z-toast": "60"
121
+ },
122
+ "scheme": {
123
+ "light": {
124
+ "--action-quiet-fg": "#1a1c1f",
125
+ "--action-solid-bg": "#1a1c1f",
126
+ "--action-solid-fg": "#ffffff",
127
+ "--action-solid-hover": "#2c2f33",
128
+ "--border-default": "#ededed",
129
+ "--border-field": "#ededed",
130
+ "--border-strong": "#d8d9da",
131
+ "--control-knob": "#ffffff",
132
+ "--control-track-off": "#d8d9da",
133
+ "--control-track-on": "#1a1c1f",
134
+ "--danger-quiet-hover": "rgba(200, 52, 42, 0.08)",
135
+ "--danger-solid-bg": "#c8342a",
136
+ "--danger-solid-fg": "#ffffff",
137
+ "--danger-solid-hover": "#a82a22",
138
+ "--focus-ring": "#1a1c1f",
139
+ "--focus-ring-offset": "#ffffff",
140
+ "--icon-muted": "#9d9ea0",
141
+ "--icon-primary": "#1a1c1f",
142
+ "--icon-secondary": "#5e6263",
143
+ "--mark-error": "#c8342a",
144
+ "--mark-fill": "#1a1c1f",
145
+ "--mark-outline": "#5e6263",
146
+ "--separator": "#ededed",
147
+ "--shadow-overlay": "0 12px 32px rgba(0, 0, 0, 0.18), 0 2px 6px rgba(0, 0, 0, 0.08)",
148
+ "--shadow-raised": "0 1px 2px rgba(0, 0, 0, 0.06)",
149
+ "--shadow-sheet": "0 -8px 32px rgba(0, 0, 0, 0.18)",
150
+ "--state-disabled-text": "#9d9ea0",
151
+ "--state-hover": "rgba(26, 28, 31, 0.05)",
152
+ "--state-pressed": "rgba(26, 28, 31, 0.1)",
153
+ "--state-selected": "#e8e9ea",
154
+ "--surface-canvas": "#ffffff",
155
+ "--surface-field": "#eaebeb",
156
+ "--surface-grouped": "#f4f5f6",
157
+ "--surface-inset": "#f4f5f6",
158
+ "--surface-overlay": "#ffffff",
159
+ "--surface-raised": "#ffffff",
160
+ "--surface-scrim": "rgba(0, 0, 0, 0.32)",
161
+ "--surface-sidebar": "#f4f5f6",
162
+ "--text-danger": "#c8342a",
163
+ "--text-inverse": "#ffffff",
164
+ "--text-link": "#1a1c1f",
165
+ "--text-muted": "#9d9ea0",
166
+ "--text-primary": "#1a1c1f",
167
+ "--text-secondary": "#5e6263"
168
+ },
169
+ "dark": {
170
+ "--action-quiet-fg": "#ffffff",
171
+ "--action-solid-bg": "#ffffff",
172
+ "--action-solid-fg": "#1a1c1f",
173
+ "--action-solid-hover": "#e6e6e6",
174
+ "--border-default": "#353535",
175
+ "--border-field": "#4f4f4f",
176
+ "--border-strong": "#4f4f4f",
177
+ "--control-knob": "#1a1c1f",
178
+ "--control-track-off": "#4f4f4f",
179
+ "--control-track-on": "#ffffff",
180
+ "--danger-quiet-hover": "rgba(251, 101, 99, 0.12)",
181
+ "--danger-solid-bg": "#fb6563",
182
+ "--danger-solid-fg": "#1a1c1f",
183
+ "--danger-solid-hover": "#c8342a",
184
+ "--focus-ring": "#ffffff",
185
+ "--focus-ring-offset": "#181818",
186
+ "--icon-muted": "#838484",
187
+ "--icon-primary": "#ffffff",
188
+ "--icon-secondary": "#c2c2c2",
189
+ "--mark-error": "#fb6563",
190
+ "--mark-fill": "#ffffff",
191
+ "--mark-outline": "#c2c2c2",
192
+ "--separator": "#353535",
193
+ "--shadow-overlay": "0 16px 40px rgba(0, 0, 0, 0.5), 0 2px 8px rgba(0, 0, 0, 0.3)",
194
+ "--shadow-raised": "0 1px 2px rgba(0, 0, 0, 0.4)",
195
+ "--shadow-sheet": "0 -8px 40px rgba(0, 0, 0, 0.5)",
196
+ "--state-disabled-text": "#838484",
197
+ "--state-hover": "rgba(255, 255, 255, 0.06)",
198
+ "--state-pressed": "rgba(255, 255, 255, 0.12)",
199
+ "--state-selected": "#49494a",
200
+ "--surface-canvas": "#181818",
201
+ "--surface-field": "#444545",
202
+ "--surface-grouped": "#181818",
203
+ "--surface-inset": "#2d2d2d",
204
+ "--surface-overlay": "#2b2b2b",
205
+ "--surface-raised": "#232323",
206
+ "--surface-scrim": "rgba(0, 0, 0, 0.45)",
207
+ "--surface-sidebar": "#3a3b3b",
208
+ "--text-danger": "#fb6563",
209
+ "--text-inverse": "#1a1c1f",
210
+ "--text-link": "#ffffff",
211
+ "--text-muted": "#838484",
212
+ "--text-primary": "#ffffff",
213
+ "--text-secondary": "#c2c2c2"
214
+ }
215
+ }
216
+ }