@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 +21 -0
- package/README.md +39 -0
- package/assets/app-icon-dark.svg +1 -0
- package/assets/app-icon-light.svg +1 -0
- package/assets/mark-dot-dark.svg +1 -0
- package/assets/mark-dot-error-dark.svg +1 -0
- package/assets/mark-dot-error-light.svg +1 -0
- package/assets/mark-dot-light.svg +1 -0
- package/assets/mark-dot-offline-dark.svg +1 -0
- package/assets/mark-dot-offline-light.svg +1 -0
- package/assets/mark-dot-syncing-dark.svg +1 -0
- package/assets/mark-dot-syncing-light.svg +1 -0
- package/package.json +23 -0
- package/tokens.css +279 -0
- package/tokens.json +216 -0
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
|
+
}
|