@aginies/tokens 0.1.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.
package/dist/index.js ADDED
@@ -0,0 +1,365 @@
1
+ // src/color.ts
2
+ function hexToRgb(hex) {
3
+ const h = hex.replace("#", "");
4
+ const n = h.length === 3 ? h.split("").map((ch) => ch + ch).join("") : h;
5
+ const v = Number.parseInt(n, 16);
6
+ return { r: v >> 16 & 255, g: v >> 8 & 255, b: v & 255 };
7
+ }
8
+ function rgbToHex({ r, g, b }) {
9
+ const to = (x) => Math.round(clamp(x, 0, 255)).toString(16).padStart(2, "0");
10
+ return `#${to(r)}${to(g)}${to(b)}`.toUpperCase();
11
+ }
12
+ function rgbChannels(hex) {
13
+ const { r, g, b } = hexToRgb(hex);
14
+ return `${r} ${g} ${b}`;
15
+ }
16
+ function hslTriplet(hex) {
17
+ const { r, g, b } = hexToRgb(hex);
18
+ const rn = r / 255;
19
+ const gn = g / 255;
20
+ const bn = b / 255;
21
+ const max = Math.max(rn, gn, bn);
22
+ const min = Math.min(rn, gn, bn);
23
+ const l = (max + min) / 2;
24
+ let h = 0;
25
+ let s = 0;
26
+ if (max !== min) {
27
+ const d = max - min;
28
+ s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
29
+ if (max === rn) h = (gn - bn) / d + (gn < bn ? 6 : 0);
30
+ else if (max === gn) h = (bn - rn) / d + 2;
31
+ else h = (rn - gn) / d + 4;
32
+ h *= 60;
33
+ }
34
+ const f = (x) => Number(x.toFixed(1)).toString();
35
+ return `${f(h)} ${f(s * 100)}% ${f(l * 100)}%`;
36
+ }
37
+ function clamp(x, lo, hi) {
38
+ return Math.min(hi, Math.max(lo, x));
39
+ }
40
+ function srgbToLinear(c) {
41
+ const x = c / 255;
42
+ return x <= 0.04045 ? x / 12.92 : ((x + 0.055) / 1.055) ** 2.4;
43
+ }
44
+ function linearToSrgb(c) {
45
+ const x = c <= 31308e-7 ? c * 12.92 : 1.055 * c ** (1 / 2.4) - 0.055;
46
+ return x * 255;
47
+ }
48
+ function rgbToOklch(rgb) {
49
+ const r = srgbToLinear(rgb.r);
50
+ const g = srgbToLinear(rgb.g);
51
+ const b = srgbToLinear(rgb.b);
52
+ const l = Math.cbrt(0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b);
53
+ const m = Math.cbrt(0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b);
54
+ const s = Math.cbrt(0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b);
55
+ const L = 0.2104542553 * l + 0.793617785 * m - 0.0040720468 * s;
56
+ const A = 1.9779984951 * l - 2.428592205 * m + 0.4505937099 * s;
57
+ const B = 0.0259040371 * l + 0.7827717662 * m - 0.808675766 * s;
58
+ const c = Math.hypot(A, B);
59
+ let h = Math.atan2(B, A) * 180 / Math.PI;
60
+ if (h < 0) h += 360;
61
+ return { l: L, c, h };
62
+ }
63
+ function oklchToLinearRgb({ l: L, c, h }) {
64
+ const A = c * Math.cos(h * Math.PI / 180);
65
+ const B = c * Math.sin(h * Math.PI / 180);
66
+ const l = (L + 0.3963377774 * A + 0.2158037573 * B) ** 3;
67
+ const m = (L - 0.1055613458 * A - 0.0638541728 * B) ** 3;
68
+ const s = (L - 0.0894841775 * A - 1.291485548 * B) ** 3;
69
+ return {
70
+ r: 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s,
71
+ g: -1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s,
72
+ b: -0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s
73
+ };
74
+ }
75
+ function inGamut({ r, g, b }) {
76
+ const eps = 1e-4;
77
+ return r >= -eps && r <= 1 + eps && g >= -eps && g <= 1 + eps && b >= -eps && b <= 1 + eps;
78
+ }
79
+ function oklchToHex(color) {
80
+ let c = color.c;
81
+ let lin = oklchToLinearRgb({ ...color, c });
82
+ while (!inGamut(lin) && c > 5e-4) {
83
+ c *= 0.97;
84
+ lin = oklchToLinearRgb({ ...color, c });
85
+ }
86
+ return rgbToHex({ r: linearToSrgb(lin.r), g: linearToSrgb(lin.g), b: linearToSrgb(lin.b) });
87
+ }
88
+ function luminance(hex) {
89
+ const { r, g, b } = hexToRgb(hex);
90
+ return 0.2126 * srgbToLinear(r) + 0.7152 * srgbToLinear(g) + 0.0722 * srgbToLinear(b);
91
+ }
92
+ function contrast(a, b) {
93
+ const la = luminance(a);
94
+ const lb = luminance(b);
95
+ const [hi, lo] = la > lb ? [la, lb] : [lb, la];
96
+ return (hi + 0.05) / (lo + 0.05);
97
+ }
98
+
99
+ // src/tokens.ts
100
+ var palettes = {
101
+ dark: {
102
+ bg: "#070A14",
103
+ "bg-2": "#0B1020",
104
+ panel: "#0E1426",
105
+ "panel-2": "#121A30",
106
+ "panel-3": "#182240",
107
+ line: "#1B2238",
108
+ "line-2": "#2A3350",
109
+ "line-3": "#3C4560",
110
+ text: "#E7ECF7",
111
+ "text-2": "#A9B2CC",
112
+ mute: "#7F8AA8",
113
+ signal: "#5FC8FF",
114
+ "signal-2": "#01B1F7",
115
+ "signal-ink": "#06111F",
116
+ "signal-soft": "rgba(95, 200, 255, 0.12)",
117
+ ok: "#4FD1A0",
118
+ "ok-ink": "#06111F",
119
+ "ok-soft": "rgba(79, 209, 160, 0.14)",
120
+ warn: "#F2B35B",
121
+ "warn-ink": "#06111F",
122
+ "warn-soft": "rgba(242, 179, 91, 0.14)",
123
+ bad: "#FF7A7A",
124
+ "bad-ink": "#06111F",
125
+ "bad-soft": "rgba(255, 122, 122, 0.14)",
126
+ shadow: "0 20px 60px rgba(0, 0, 0, 0.45)",
127
+ "shadow-sm": "0 8px 24px rgba(0, 0, 0, 0.35)",
128
+ overlay: "rgba(7, 10, 20, 0.6)"
129
+ },
130
+ light: {
131
+ bg: "#F4F6FA",
132
+ "bg-2": "#FFFFFF",
133
+ panel: "#FFFFFF",
134
+ "panel-2": "#EEF1F7",
135
+ "panel-3": "#E4E9F2",
136
+ line: "#DCE1EC",
137
+ "line-2": "#C5CCDB",
138
+ "line-3": "#A9B2CC",
139
+ text: "#0B1220",
140
+ "text-2": "#3C4560",
141
+ mute: "#6B7590",
142
+ signal: "#0077C2",
143
+ "signal-2": "#005E9A",
144
+ "signal-ink": "#FFFFFF",
145
+ "signal-soft": "rgba(0, 119, 194, 0.10)",
146
+ // The site's light values (#0E8A5F, #A8661A) sit just under 4.5:1 as ink carriers; the
147
+ // app fills buttons and badges with these, so they are shaded a step darker here.
148
+ ok: "#0B7F57",
149
+ "ok-ink": "#FFFFFF",
150
+ "ok-soft": "rgba(11, 127, 87, 0.12)",
151
+ warn: "#9C5A12",
152
+ "warn-ink": "#FFFFFF",
153
+ "warn-soft": "rgba(156, 90, 18, 0.12)",
154
+ bad: "#B3261E",
155
+ "bad-ink": "#FFFFFF",
156
+ "bad-soft": "rgba(179, 38, 30, 0.10)",
157
+ shadow: "0 20px 50px rgba(11, 18, 32, 0.10)",
158
+ "shadow-sm": "0 8px 20px rgba(11, 18, 32, 0.08)",
159
+ overlay: "rgba(11, 18, 32, 0.45)"
160
+ }
161
+ };
162
+ var rampedColors = ["signal", "ok", "warn", "bad"];
163
+ var rampSteps = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950];
164
+ var rampShape = {
165
+ 50: { l: 0.97, c: 0.18 },
166
+ 100: { l: 0.935, c: 0.32 },
167
+ 200: { l: 0.875, c: 0.52 },
168
+ 300: { l: 0.795, c: 0.78 },
169
+ 400: { l: 0.715, c: 0.95 },
170
+ 500: { l: 0.635, c: 1 },
171
+ 600: { l: 0.555, c: 0.95 },
172
+ 700: { l: 0.475, c: 0.85 },
173
+ 800: { l: 0.395, c: 0.7 },
174
+ 900: { l: 0.315, c: 0.55 },
175
+ 950: { l: 0.245, c: 0.45 }
176
+ };
177
+ var neutral = {
178
+ 50: "#F4F6FA",
179
+ 100: "#EEF1F7",
180
+ 200: "#DCE1EC",
181
+ 300: "#C5CCDB",
182
+ 400: "#A9B2CC",
183
+ 500: "#7F8AA8",
184
+ 600: "#6B7590",
185
+ 700: "#3C4560",
186
+ 800: "#2A3350",
187
+ 900: "#1B2238",
188
+ 950: "#0B1020"
189
+ };
190
+ var data = ["signal", "ok", "warn", "bad", "text-2", "mute"];
191
+ var canvas = {
192
+ "canvas-bg": "bg",
193
+ "canvas-grid": "line",
194
+ "canvas-node": "panel",
195
+ "canvas-node-line": "line-2",
196
+ edge: "line-2",
197
+ "edge-hover": "text-2",
198
+ "edge-active": "signal",
199
+ execution: "ok"
200
+ };
201
+ var fonts = {
202
+ display: "'Bricolage Grotesque Variable', 'Instrument Sans Variable', ui-sans-serif, system-ui, sans-serif",
203
+ body: "'Instrument Sans Variable', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Helvetica, Arial, sans-serif",
204
+ mono: "'JetBrains Mono Variable', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace"
205
+ };
206
+ var radius = {
207
+ sm: "4px",
208
+ md: "6px",
209
+ lg: "10px",
210
+ xl: "14px",
211
+ "2xl": "20px",
212
+ full: "9999px"
213
+ };
214
+ var space = {
215
+ 1: "4px",
216
+ 2: "8px",
217
+ 3: "12px",
218
+ 4: "16px",
219
+ 5: "24px",
220
+ 6: "32px",
221
+ 7: "48px",
222
+ 8: "64px"
223
+ };
224
+ var type = {
225
+ display: {
226
+ size: "clamp(40px, 6.4vw, 88px)",
227
+ lineHeight: "0.96",
228
+ letterSpacing: "-0.04em",
229
+ family: "display",
230
+ weight: 600,
231
+ opsz: 96
232
+ },
233
+ h1: {
234
+ size: "clamp(36px, 5.2vw, 68px)",
235
+ lineHeight: "1",
236
+ letterSpacing: "-0.035em",
237
+ family: "display",
238
+ weight: 600,
239
+ opsz: 96
240
+ },
241
+ h2: {
242
+ size: "clamp(28px, 3.8vw, 50px)",
243
+ lineHeight: "1.04",
244
+ letterSpacing: "-0.03em",
245
+ family: "display",
246
+ weight: 600,
247
+ opsz: 72
248
+ },
249
+ h3: {
250
+ size: "clamp(20px, 2vw, 26px)",
251
+ lineHeight: "1.2",
252
+ letterSpacing: "-0.02em",
253
+ family: "display",
254
+ weight: 600
255
+ },
256
+ h4: { size: "17px", lineHeight: "1.3", letterSpacing: "-0.01em", family: "display", weight: 600 },
257
+ stat: {
258
+ size: "clamp(30px, 3.4vw, 44px)",
259
+ lineHeight: "1",
260
+ letterSpacing: "-0.03em",
261
+ family: "display",
262
+ weight: 600
263
+ },
264
+ lede: { size: "clamp(17px, 1.4vw, 20px)", lineHeight: "1.5" },
265
+ body: { size: "16px", lineHeight: "1.55" },
266
+ "body-2": { size: "15px", lineHeight: "1.5" },
267
+ small: { size: "13.5px", lineHeight: "1.45" },
268
+ eyebrow: {
269
+ size: "11.5px",
270
+ lineHeight: "1",
271
+ letterSpacing: "0.14em",
272
+ family: "mono",
273
+ weight: 500,
274
+ transform: "uppercase"
275
+ },
276
+ label: {
277
+ size: "11px",
278
+ lineHeight: "1",
279
+ letterSpacing: "0.1em",
280
+ family: "mono",
281
+ weight: 500,
282
+ transform: "uppercase"
283
+ },
284
+ tag: { size: "11.5px", lineHeight: "1", letterSpacing: "0.04em", family: "mono" },
285
+ ui: { size: "13px", lineHeight: "1.4" },
286
+ "ui-sm": { size: "12px", lineHeight: "1.35" },
287
+ "ui-xs": { size: "11px", lineHeight: "1.3" }
288
+ };
289
+ var motion = {
290
+ "duration-fast": "150ms",
291
+ "duration-base": "200ms",
292
+ "duration-slow": "300ms",
293
+ "duration-enter": "600ms",
294
+ "ease-enter": "cubic-bezier(0.2, 0.7, 0.2, 1)"
295
+ };
296
+ var layout = {
297
+ max: "1200px",
298
+ gutter: "clamp(20px, 4vw, 40px)",
299
+ "section-y": "clamp(64px, 9vw, 128px)",
300
+ "section-y-tight": "clamp(40px, 6vw, 80px)"
301
+ };
302
+ var breakpoints = {
303
+ sm: "640px",
304
+ md: "768px",
305
+ lg: "1024px",
306
+ xl: "1280px",
307
+ "2xl": "1536px",
308
+ /** Site nav collapses here. */
309
+ nav: "1180px",
310
+ wide: "1340px"
311
+ };
312
+ var z = {
313
+ base: 0,
314
+ raised: 10,
315
+ sticky: 50,
316
+ dropdown: 100,
317
+ modal: 200,
318
+ toast: 300
319
+ };
320
+ var focus = {
321
+ /** Keyboard focus ring on any element. */
322
+ ring: "2px solid var(--signal)",
323
+ "ring-offset": "3px",
324
+ /** Form controls: soft halo instead of an outline. */
325
+ "field-ring": "0 0 0 3px var(--signal-soft)"
326
+ };
327
+
328
+ // src/build-ramp.ts
329
+ function buildRamp(baseHex) {
330
+ const base = rgbToOklch(hexToRgb(baseHex));
331
+ const out = {};
332
+ for (const step of rampSteps) {
333
+ const { l, c } = rampShape[step];
334
+ out[step] = oklchToHex({ l, c: base.c * c, h: base.h });
335
+ }
336
+ return out;
337
+ }
338
+ export {
339
+ breakpoints,
340
+ buildRamp,
341
+ canvas,
342
+ contrast,
343
+ data,
344
+ focus,
345
+ fonts,
346
+ hexToRgb,
347
+ hslTriplet,
348
+ layout,
349
+ luminance,
350
+ motion,
351
+ neutral,
352
+ oklchToHex,
353
+ palettes,
354
+ radius,
355
+ rampShape,
356
+ rampSteps,
357
+ rampedColors,
358
+ rgbChannels,
359
+ rgbToHex,
360
+ rgbToOklch,
361
+ space,
362
+ type,
363
+ z
364
+ };
365
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/color.ts","../src/tokens.ts","../src/build-ramp.ts"],"sourcesContent":["/**\n * Small colour utilities: sRGB ⇄ OKLCH, hex parsing, HSL triplets.\n * Dependency-free so the token build can run under plain Node.\n */\n\nexport interface Rgb {\n r: number\n g: number\n b: number\n}\n\nexport interface Oklch {\n l: number\n c: number\n h: number\n}\n\nexport function hexToRgb(hex: string): Rgb {\n const h = hex.replace('#', '')\n const n =\n h.length === 3\n ? h\n .split('')\n .map((ch) => ch + ch)\n .join('')\n : h\n const v = Number.parseInt(n, 16)\n return { r: (v >> 16) & 255, g: (v >> 8) & 255, b: v & 255 }\n}\n\nexport function rgbToHex({ r, g, b }: Rgb): string {\n const to = (x: number) =>\n Math.round(clamp(x, 0, 255))\n .toString(16)\n .padStart(2, '0')\n return `#${to(r)}${to(g)}${to(b)}`.toUpperCase()\n}\n\n/** \"95 200 255\" — the channel form Tailwind's `<alpha-value>` colours need. */\nexport function rgbChannels(hex: string): string {\n const { r, g, b } = hexToRgb(hex)\n return `${r} ${g} ${b}`\n}\n\n/** \"204 100% 68.6%\" — the HSL triplet form the shadcn-era variables used. */\nexport function hslTriplet(hex: string): string {\n const { r, g, b } = hexToRgb(hex)\n const rn = r / 255\n const gn = g / 255\n const bn = b / 255\n const max = Math.max(rn, gn, bn)\n const min = Math.min(rn, gn, bn)\n const l = (max + min) / 2\n let h = 0\n let s = 0\n if (max !== min) {\n const d = max - min\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min)\n if (max === rn) h = (gn - bn) / d + (gn < bn ? 6 : 0)\n else if (max === gn) h = (bn - rn) / d + 2\n else h = (rn - gn) / d + 4\n h *= 60\n }\n const f = (x: number) => Number(x.toFixed(1)).toString()\n return `${f(h)} ${f(s * 100)}% ${f(l * 100)}%`\n}\n\nfunction clamp(x: number, lo: number, hi: number): number {\n return Math.min(hi, Math.max(lo, x))\n}\n\nfunction srgbToLinear(c: number): number {\n const x = c / 255\n return x <= 0.04045 ? x / 12.92 : ((x + 0.055) / 1.055) ** 2.4\n}\n\nfunction linearToSrgb(c: number): number {\n const x = c <= 0.0031308 ? c * 12.92 : 1.055 * c ** (1 / 2.4) - 0.055\n return x * 255\n}\n\nexport function rgbToOklch(rgb: Rgb): Oklch {\n const r = srgbToLinear(rgb.r)\n const g = srgbToLinear(rgb.g)\n const b = srgbToLinear(rgb.b)\n const l = Math.cbrt(0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b)\n const m = Math.cbrt(0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b)\n const s = Math.cbrt(0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b)\n const L = 0.2104542553 * l + 0.793617785 * m - 0.0040720468 * s\n const A = 1.9779984951 * l - 2.428592205 * m + 0.4505937099 * s\n const B = 0.0259040371 * l + 0.7827717662 * m - 0.808675766 * s\n const c = Math.hypot(A, B)\n let h = (Math.atan2(B, A) * 180) / Math.PI\n if (h < 0) h += 360\n return { l: L, c, h }\n}\n\nfunction oklchToLinearRgb({ l: L, c, h }: Oklch): Rgb {\n const A = c * Math.cos((h * Math.PI) / 180)\n const B = c * Math.sin((h * Math.PI) / 180)\n const l = (L + 0.3963377774 * A + 0.2158037573 * B) ** 3\n const m = (L - 0.1055613458 * A - 0.0638541728 * B) ** 3\n const s = (L - 0.0894841775 * A - 1.291485548 * B) ** 3\n return {\n r: 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s,\n g: -1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s,\n b: -0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s,\n }\n}\n\nfunction inGamut({ r, g, b }: Rgb): boolean {\n const eps = 1e-4\n return r >= -eps && r <= 1 + eps && g >= -eps && g <= 1 + eps && b >= -eps && b <= 1 + eps\n}\n\n/**\n * OKLCH → sRGB hex. If the colour is out of gamut the chroma is reduced until it fits,\n * which keeps lightness and hue (what the eye keys on) intact.\n */\nexport function oklchToHex(color: Oklch): string {\n let c = color.c\n let lin = oklchToLinearRgb({ ...color, c })\n while (!inGamut(lin) && c > 0.0005) {\n c *= 0.97\n lin = oklchToLinearRgb({ ...color, c })\n }\n return rgbToHex({ r: linearToSrgb(lin.r), g: linearToSrgb(lin.g), b: linearToSrgb(lin.b) })\n}\n\n/** Relative luminance (WCAG). */\nexport function luminance(hex: string): number {\n const { r, g, b } = hexToRgb(hex)\n return 0.2126 * srgbToLinear(r) + 0.7152 * srgbToLinear(g) + 0.0722 * srgbToLinear(b)\n}\n\n/** WCAG contrast ratio between two hex colours. */\nexport function contrast(a: string, b: string): number {\n const la = luminance(a)\n const lb = luminance(b)\n const [hi, lo] = la > lb ? [la, lb] : [lb, la]\n return (hi + 0.05) / (lo + 0.05)\n}\n","/**\n * Aginies design tokens — the single source of truth.\n *\n * Values mirror the aginies.com design system (\"Control Room\", dark-first, one signal\n * colour) and extend it with what an application UI needs on top of a marketing site:\n * a third panel level, a strong border, status inks and soft washes, canvas tokens,\n * a data palette for charts, a spacing scale and dense UI type sizes.\n *\n * Everything under `dist/` is generated from this file by `src/build.ts`.\n */\n\nexport type ThemeName = 'dark' | 'light'\n\n/** Theme-dependent colour values. Hex unless noted. */\nexport interface Palette {\n /** Page ground. */\n bg: string\n /** Secondary ground: inputs, inside screens. */\n 'bg-2': string\n /** Card / panel. */\n panel: string\n /** Raised panel: popovers, active rows. */\n 'panel-2': string\n /** Hover / pressed surface on a panel. */\n 'panel-3': string\n /** Divider. */\n line: string\n /** Border. */\n 'line-2': string\n /** Strong border: focused or selected outlines that are not the signal colour. */\n 'line-3': string\n /** Primary text. */\n text: string\n /** Secondary text. */\n 'text-2': string\n /** Labels, quiet text. */\n mute: string\n /** The single accent. */\n signal: string\n /** Signal hover / pressed. */\n 'signal-2': string\n /** Ink on a signal fill. */\n 'signal-ink': string\n /** Soft signal wash (rgba). */\n 'signal-soft': string\n ok: string\n 'ok-ink': string\n 'ok-soft': string\n warn: string\n 'warn-ink': string\n 'warn-soft': string\n bad: string\n 'bad-ink': string\n 'bad-soft': string\n /** The one large shadow: floating shells. */\n shadow: string\n /** Popovers and menus. */\n 'shadow-sm': string\n /** Modal scrim (rgba). */\n overlay: string\n}\n\nexport const palettes: Record<ThemeName, Palette> = {\n dark: {\n bg: '#070A14',\n 'bg-2': '#0B1020',\n panel: '#0E1426',\n 'panel-2': '#121A30',\n 'panel-3': '#182240',\n line: '#1B2238',\n 'line-2': '#2A3350',\n 'line-3': '#3C4560',\n text: '#E7ECF7',\n 'text-2': '#A9B2CC',\n mute: '#7F8AA8',\n signal: '#5FC8FF',\n 'signal-2': '#01B1F7',\n 'signal-ink': '#06111F',\n 'signal-soft': 'rgba(95, 200, 255, 0.12)',\n ok: '#4FD1A0',\n 'ok-ink': '#06111F',\n 'ok-soft': 'rgba(79, 209, 160, 0.14)',\n warn: '#F2B35B',\n 'warn-ink': '#06111F',\n 'warn-soft': 'rgba(242, 179, 91, 0.14)',\n bad: '#FF7A7A',\n 'bad-ink': '#06111F',\n 'bad-soft': 'rgba(255, 122, 122, 0.14)',\n shadow: '0 20px 60px rgba(0, 0, 0, 0.45)',\n 'shadow-sm': '0 8px 24px rgba(0, 0, 0, 0.35)',\n overlay: 'rgba(7, 10, 20, 0.6)',\n },\n light: {\n bg: '#F4F6FA',\n 'bg-2': '#FFFFFF',\n panel: '#FFFFFF',\n 'panel-2': '#EEF1F7',\n 'panel-3': '#E4E9F2',\n line: '#DCE1EC',\n 'line-2': '#C5CCDB',\n 'line-3': '#A9B2CC',\n text: '#0B1220',\n 'text-2': '#3C4560',\n mute: '#6B7590',\n signal: '#0077C2',\n 'signal-2': '#005E9A',\n 'signal-ink': '#FFFFFF',\n 'signal-soft': 'rgba(0, 119, 194, 0.10)',\n // The site's light values (#0E8A5F, #A8661A) sit just under 4.5:1 as ink carriers; the\n // app fills buttons and badges with these, so they are shaded a step darker here.\n ok: '#0B7F57',\n 'ok-ink': '#FFFFFF',\n 'ok-soft': 'rgba(11, 127, 87, 0.12)',\n warn: '#9C5A12',\n 'warn-ink': '#FFFFFF',\n 'warn-soft': 'rgba(156, 90, 18, 0.12)',\n bad: '#B3261E',\n 'bad-ink': '#FFFFFF',\n 'bad-soft': 'rgba(179, 38, 30, 0.10)',\n shadow: '0 20px 50px rgba(11, 18, 32, 0.10)',\n 'shadow-sm': '0 8px 20px rgba(11, 18, 32, 0.08)',\n overlay: 'rgba(11, 18, 32, 0.45)',\n },\n}\n\n/** Status colours that get a generated 50–950 ramp per theme. */\nexport const rampedColors = ['signal', 'ok', 'warn', 'bad'] as const\nexport type RampedColor = (typeof rampedColors)[number]\n\nexport const rampSteps = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950] as const\nexport type RampStep = (typeof rampSteps)[number]\n\n/**\n * Lightness targets (OKLCH L) and chroma factors for each ramp step. The hue is taken\n * from the theme's base colour; chroma peaks around the middle and falls off at the ends\n * so tints and shades stay in gamut and read as the same colour.\n */\nexport const rampShape: Record<RampStep, { l: number; c: number }> = {\n 50: { l: 0.97, c: 0.18 },\n 100: { l: 0.935, c: 0.32 },\n 200: { l: 0.875, c: 0.52 },\n 300: { l: 0.795, c: 0.78 },\n 400: { l: 0.715, c: 0.95 },\n 500: { l: 0.635, c: 1 },\n 600: { l: 0.555, c: 0.95 },\n 700: { l: 0.475, c: 0.85 },\n 800: { l: 0.395, c: 0.7 },\n 900: { l: 0.315, c: 0.55 },\n 950: { l: 0.245, c: 0.45 },\n}\n\n/**\n * Fixed neutral ramp, identical in both themes. It is the site's own set of surfaces and\n * text colours laid out as a scale, so `neutral-*` utilities always land on a real token.\n */\nexport const neutral: Record<RampStep, string> = {\n 50: '#F4F6FA',\n 100: '#EEF1F7',\n 200: '#DCE1EC',\n 300: '#C5CCDB',\n 400: '#A9B2CC',\n 500: '#7F8AA8',\n 600: '#6B7590',\n 700: '#3C4560',\n 800: '#2A3350',\n 900: '#1B2238',\n 950: '#0B1020',\n}\n\n/** Chart / category palette. References semantic tokens so it follows the theme. */\nexport const data = ['signal', 'ok', 'warn', 'bad', 'text-2', 'mute'] as const\n\n/** Workflow canvas tokens, expressed as references to semantic tokens. */\nexport const canvas = {\n 'canvas-bg': 'bg',\n 'canvas-grid': 'line',\n 'canvas-node': 'panel',\n 'canvas-node-line': 'line-2',\n edge: 'line-2',\n 'edge-hover': 'text-2',\n 'edge-active': 'signal',\n execution: 'ok',\n} as const\n\nexport const fonts = {\n display:\n \"'Bricolage Grotesque Variable', 'Instrument Sans Variable', ui-sans-serif, system-ui, sans-serif\",\n body: \"'Instrument Sans Variable', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Helvetica, Arial, sans-serif\",\n mono: \"'JetBrains Mono Variable', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace\",\n} as const\n\nexport const radius = {\n sm: '4px',\n md: '6px',\n lg: '10px',\n xl: '14px',\n '2xl': '20px',\n full: '9999px',\n} as const\n\n/** 4-point spacing scale. */\nexport const space = {\n 1: '4px',\n 2: '8px',\n 3: '12px',\n 4: '16px',\n 5: '24px',\n 6: '32px',\n 7: '48px',\n 8: '64px',\n} as const\n\nexport interface TypeStyle {\n size: string\n lineHeight: string\n letterSpacing?: string\n family?: keyof typeof fonts\n weight?: number\n transform?: 'uppercase'\n /** Bricolage optical size axis. */\n opsz?: number\n}\n\n/** The type scale. Marketing sizes come from the site; `ui-*` are the dense app sizes. */\nexport const type: Record<string, TypeStyle> = {\n display: {\n size: 'clamp(40px, 6.4vw, 88px)',\n lineHeight: '0.96',\n letterSpacing: '-0.04em',\n family: 'display',\n weight: 600,\n opsz: 96,\n },\n h1: {\n size: 'clamp(36px, 5.2vw, 68px)',\n lineHeight: '1',\n letterSpacing: '-0.035em',\n family: 'display',\n weight: 600,\n opsz: 96,\n },\n h2: {\n size: 'clamp(28px, 3.8vw, 50px)',\n lineHeight: '1.04',\n letterSpacing: '-0.03em',\n family: 'display',\n weight: 600,\n opsz: 72,\n },\n h3: {\n size: 'clamp(20px, 2vw, 26px)',\n lineHeight: '1.2',\n letterSpacing: '-0.02em',\n family: 'display',\n weight: 600,\n },\n h4: { size: '17px', lineHeight: '1.3', letterSpacing: '-0.01em', family: 'display', weight: 600 },\n stat: {\n size: 'clamp(30px, 3.4vw, 44px)',\n lineHeight: '1',\n letterSpacing: '-0.03em',\n family: 'display',\n weight: 600,\n },\n lede: { size: 'clamp(17px, 1.4vw, 20px)', lineHeight: '1.5' },\n body: { size: '16px', lineHeight: '1.55' },\n 'body-2': { size: '15px', lineHeight: '1.5' },\n small: { size: '13.5px', lineHeight: '1.45' },\n eyebrow: {\n size: '11.5px',\n lineHeight: '1',\n letterSpacing: '0.14em',\n family: 'mono',\n weight: 500,\n transform: 'uppercase',\n },\n label: {\n size: '11px',\n lineHeight: '1',\n letterSpacing: '0.1em',\n family: 'mono',\n weight: 500,\n transform: 'uppercase',\n },\n tag: { size: '11.5px', lineHeight: '1', letterSpacing: '0.04em', family: 'mono' },\n ui: { size: '13px', lineHeight: '1.4' },\n 'ui-sm': { size: '12px', lineHeight: '1.35' },\n 'ui-xs': { size: '11px', lineHeight: '1.3' },\n}\n\nexport const motion = {\n 'duration-fast': '150ms',\n 'duration-base': '200ms',\n 'duration-slow': '300ms',\n 'duration-enter': '600ms',\n 'ease-enter': 'cubic-bezier(0.2, 0.7, 0.2, 1)',\n} as const\n\nexport const layout = {\n max: '1200px',\n gutter: 'clamp(20px, 4vw, 40px)',\n 'section-y': 'clamp(64px, 9vw, 128px)',\n 'section-y-tight': 'clamp(40px, 6vw, 80px)',\n} as const\n\nexport const breakpoints = {\n sm: '640px',\n md: '768px',\n lg: '1024px',\n xl: '1280px',\n '2xl': '1536px',\n /** Site nav collapses here. */\n nav: '1180px',\n wide: '1340px',\n} as const\n\nexport const z = {\n base: 0,\n raised: 10,\n sticky: 50,\n dropdown: 100,\n modal: 200,\n toast: 300,\n} as const\n\nexport const focus = {\n /** Keyboard focus ring on any element. */\n ring: '2px solid var(--signal)',\n 'ring-offset': '3px',\n /** Form controls: soft halo instead of an outline. */\n 'field-ring': '0 0 0 3px var(--signal-soft)',\n} as const\n","import { hexToRgb, oklchToHex, rgbToOklch } from './color.ts'\nimport { type RampStep, rampShape, rampSteps } from './tokens.ts'\n\nexport type Ramp = Record<RampStep, string>\n\n/** Derives the 50–950 ramp for a base colour: hue from the base, lightness from the shape. */\nexport function buildRamp(baseHex: string): Ramp {\n const base = rgbToOklch(hexToRgb(baseHex))\n const out = {} as Ramp\n for (const step of rampSteps) {\n const { l, c } = rampShape[step]\n out[step] = oklchToHex({ l, c: base.c * c, h: base.h })\n }\n return out\n}\n"],"mappings":";AAiBO,SAAS,SAAS,KAAkB;AACzC,QAAM,IAAI,IAAI,QAAQ,KAAK,EAAE;AAC7B,QAAM,IACJ,EAAE,WAAW,IACT,EACG,MAAM,EAAE,EACR,IAAI,CAAC,OAAO,KAAK,EAAE,EACnB,KAAK,EAAE,IACV;AACN,QAAM,IAAI,OAAO,SAAS,GAAG,EAAE;AAC/B,SAAO,EAAE,GAAI,KAAK,KAAM,KAAK,GAAI,KAAK,IAAK,KAAK,GAAG,IAAI,IAAI;AAC7D;AAEO,SAAS,SAAS,EAAE,GAAG,GAAG,EAAE,GAAgB;AACjD,QAAM,KAAK,CAAC,MACV,KAAK,MAAM,MAAM,GAAG,GAAG,GAAG,CAAC,EACxB,SAAS,EAAE,EACX,SAAS,GAAG,GAAG;AACpB,SAAO,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,YAAY;AACjD;AAGO,SAAS,YAAY,KAAqB;AAC/C,QAAM,EAAE,GAAG,GAAG,EAAE,IAAI,SAAS,GAAG;AAChC,SAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;AACvB;AAGO,SAAS,WAAW,KAAqB;AAC9C,QAAM,EAAE,GAAG,GAAG,EAAE,IAAI,SAAS,GAAG;AAChC,QAAM,KAAK,IAAI;AACf,QAAM,KAAK,IAAI;AACf,QAAM,KAAK,IAAI;AACf,QAAM,MAAM,KAAK,IAAI,IAAI,IAAI,EAAE;AAC/B,QAAM,MAAM,KAAK,IAAI,IAAI,IAAI,EAAE;AAC/B,QAAM,KAAK,MAAM,OAAO;AACxB,MAAI,IAAI;AACR,MAAI,IAAI;AACR,MAAI,QAAQ,KAAK;AACf,UAAM,IAAI,MAAM;AAChB,QAAI,IAAI,MAAM,KAAK,IAAI,MAAM,OAAO,KAAK,MAAM;AAC/C,QAAI,QAAQ,GAAI,MAAK,KAAK,MAAM,KAAK,KAAK,KAAK,IAAI;AAAA,aAC1C,QAAQ,GAAI,MAAK,KAAK,MAAM,IAAI;AAAA,QACpC,MAAK,KAAK,MAAM,IAAI;AACzB,SAAK;AAAA,EACP;AACA,QAAM,IAAI,CAAC,MAAc,OAAO,EAAE,QAAQ,CAAC,CAAC,EAAE,SAAS;AACvD,SAAO,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC;AAC7C;AAEA,SAAS,MAAM,GAAW,IAAY,IAAoB;AACxD,SAAO,KAAK,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC;AACrC;AAEA,SAAS,aAAa,GAAmB;AACvC,QAAM,IAAI,IAAI;AACd,SAAO,KAAK,UAAU,IAAI,UAAU,IAAI,SAAS,UAAU;AAC7D;AAEA,SAAS,aAAa,GAAmB;AACvC,QAAM,IAAI,KAAK,WAAY,IAAI,QAAQ,QAAQ,MAAM,IAAI,OAAO;AAChE,SAAO,IAAI;AACb;AAEO,SAAS,WAAW,KAAiB;AAC1C,QAAM,IAAI,aAAa,IAAI,CAAC;AAC5B,QAAM,IAAI,aAAa,IAAI,CAAC;AAC5B,QAAM,IAAI,aAAa,IAAI,CAAC;AAC5B,QAAM,IAAI,KAAK,KAAK,eAAe,IAAI,eAAe,IAAI,eAAe,CAAC;AAC1E,QAAM,IAAI,KAAK,KAAK,eAAe,IAAI,eAAe,IAAI,eAAe,CAAC;AAC1E,QAAM,IAAI,KAAK,KAAK,eAAe,IAAI,eAAe,IAAI,eAAe,CAAC;AAC1E,QAAM,IAAI,eAAe,IAAI,cAAc,IAAI,eAAe;AAC9D,QAAM,IAAI,eAAe,IAAI,cAAc,IAAI,eAAe;AAC9D,QAAM,IAAI,eAAe,IAAI,eAAe,IAAI,cAAc;AAC9D,QAAM,IAAI,KAAK,MAAM,GAAG,CAAC;AACzB,MAAI,IAAK,KAAK,MAAM,GAAG,CAAC,IAAI,MAAO,KAAK;AACxC,MAAI,IAAI,EAAG,MAAK;AAChB,SAAO,EAAE,GAAG,GAAG,GAAG,EAAE;AACtB;AAEA,SAAS,iBAAiB,EAAE,GAAG,GAAG,GAAG,EAAE,GAAe;AACpD,QAAM,IAAI,IAAI,KAAK,IAAK,IAAI,KAAK,KAAM,GAAG;AAC1C,QAAM,IAAI,IAAI,KAAK,IAAK,IAAI,KAAK,KAAM,GAAG;AAC1C,QAAM,KAAK,IAAI,eAAe,IAAI,eAAe,MAAM;AACvD,QAAM,KAAK,IAAI,eAAe,IAAI,eAAe,MAAM;AACvD,QAAM,KAAK,IAAI,eAAe,IAAI,cAAc,MAAM;AACtD,SAAO;AAAA,IACL,GAAG,eAAe,IAAI,eAAe,IAAI,eAAe;AAAA,IACxD,GAAG,gBAAgB,IAAI,eAAe,IAAI,eAAe;AAAA,IACzD,GAAG,gBAAgB,IAAI,eAAe,IAAI,cAAc;AAAA,EAC1D;AACF;AAEA,SAAS,QAAQ,EAAE,GAAG,GAAG,EAAE,GAAiB;AAC1C,QAAM,MAAM;AACZ,SAAO,KAAK,CAAC,OAAO,KAAK,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,IAAI;AACzF;AAMO,SAAS,WAAW,OAAsB;AAC/C,MAAI,IAAI,MAAM;AACd,MAAI,MAAM,iBAAiB,EAAE,GAAG,OAAO,EAAE,CAAC;AAC1C,SAAO,CAAC,QAAQ,GAAG,KAAK,IAAI,MAAQ;AAClC,SAAK;AACL,UAAM,iBAAiB,EAAE,GAAG,OAAO,EAAE,CAAC;AAAA,EACxC;AACA,SAAO,SAAS,EAAE,GAAG,aAAa,IAAI,CAAC,GAAG,GAAG,aAAa,IAAI,CAAC,GAAG,GAAG,aAAa,IAAI,CAAC,EAAE,CAAC;AAC5F;AAGO,SAAS,UAAU,KAAqB;AAC7C,QAAM,EAAE,GAAG,GAAG,EAAE,IAAI,SAAS,GAAG;AAChC,SAAO,SAAS,aAAa,CAAC,IAAI,SAAS,aAAa,CAAC,IAAI,SAAS,aAAa,CAAC;AACtF;AAGO,SAAS,SAAS,GAAW,GAAmB;AACrD,QAAM,KAAK,UAAU,CAAC;AACtB,QAAM,KAAK,UAAU,CAAC;AACtB,QAAM,CAAC,IAAI,EAAE,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;AAC7C,UAAQ,KAAK,SAAS,KAAK;AAC7B;;;AC/EO,IAAM,WAAuC;AAAA,EAClD,MAAM;AAAA,IACJ,IAAI;AAAA,IACJ,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,WAAW;AAAA,IACX,WAAW;AAAA,IACX,MAAM;AAAA,IACN,UAAU;AAAA,IACV,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,eAAe;AAAA,IACf,IAAI;AAAA,IACJ,UAAU;AAAA,IACV,WAAW;AAAA,IACX,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,KAAK;AAAA,IACL,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,OAAO;AAAA,IACL,IAAI;AAAA,IACJ,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,WAAW;AAAA,IACX,WAAW;AAAA,IACX,MAAM;AAAA,IACN,UAAU;AAAA,IACV,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,eAAe;AAAA;AAAA;AAAA,IAGf,IAAI;AAAA,IACJ,UAAU;AAAA,IACV,WAAW;AAAA,IACX,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,KAAK;AAAA,IACL,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AACF;AAGO,IAAM,eAAe,CAAC,UAAU,MAAM,QAAQ,KAAK;AAGnD,IAAM,YAAY,CAAC,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAQvE,IAAM,YAAwD;AAAA,EACnE,IAAI,EAAE,GAAG,MAAM,GAAG,KAAK;AAAA,EACvB,KAAK,EAAE,GAAG,OAAO,GAAG,KAAK;AAAA,EACzB,KAAK,EAAE,GAAG,OAAO,GAAG,KAAK;AAAA,EACzB,KAAK,EAAE,GAAG,OAAO,GAAG,KAAK;AAAA,EACzB,KAAK,EAAE,GAAG,OAAO,GAAG,KAAK;AAAA,EACzB,KAAK,EAAE,GAAG,OAAO,GAAG,EAAE;AAAA,EACtB,KAAK,EAAE,GAAG,OAAO,GAAG,KAAK;AAAA,EACzB,KAAK,EAAE,GAAG,OAAO,GAAG,KAAK;AAAA,EACzB,KAAK,EAAE,GAAG,OAAO,GAAG,IAAI;AAAA,EACxB,KAAK,EAAE,GAAG,OAAO,GAAG,KAAK;AAAA,EACzB,KAAK,EAAE,GAAG,OAAO,GAAG,KAAK;AAC3B;AAMO,IAAM,UAAoC;AAAA,EAC/C,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AACP;AAGO,IAAM,OAAO,CAAC,UAAU,MAAM,QAAQ,OAAO,UAAU,MAAM;AAG7D,IAAM,SAAS;AAAA,EACpB,aAAa;AAAA,EACb,eAAe;AAAA,EACf,eAAe;AAAA,EACf,oBAAoB;AAAA,EACpB,MAAM;AAAA,EACN,cAAc;AAAA,EACd,eAAe;AAAA,EACf,WAAW;AACb;AAEO,IAAM,QAAQ;AAAA,EACnB,SACE;AAAA,EACF,MAAM;AAAA,EACN,MAAM;AACR;AAEO,IAAM,SAAS;AAAA,EACpB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,MAAM;AACR;AAGO,IAAM,QAAQ;AAAA,EACnB,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACL;AAcO,IAAM,OAAkC;AAAA,EAC7C,SAAS;AAAA,IACP,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,EACR;AAAA,EACA,IAAI;AAAA,IACF,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,EACR;AAAA,EACA,IAAI;AAAA,IACF,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,EACR;AAAA,EACA,IAAI;AAAA,IACF,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;AAAA,EACA,IAAI,EAAE,MAAM,QAAQ,YAAY,OAAO,eAAe,WAAW,QAAQ,WAAW,QAAQ,IAAI;AAAA,EAChG,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;AAAA,EACA,MAAM,EAAE,MAAM,4BAA4B,YAAY,MAAM;AAAA,EAC5D,MAAM,EAAE,MAAM,QAAQ,YAAY,OAAO;AAAA,EACzC,UAAU,EAAE,MAAM,QAAQ,YAAY,MAAM;AAAA,EAC5C,OAAO,EAAE,MAAM,UAAU,YAAY,OAAO;AAAA,EAC5C,SAAS;AAAA,IACP,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,EACb;AAAA,EACA,OAAO;AAAA,IACL,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,EACb;AAAA,EACA,KAAK,EAAE,MAAM,UAAU,YAAY,KAAK,eAAe,UAAU,QAAQ,OAAO;AAAA,EAChF,IAAI,EAAE,MAAM,QAAQ,YAAY,MAAM;AAAA,EACtC,SAAS,EAAE,MAAM,QAAQ,YAAY,OAAO;AAAA,EAC5C,SAAS,EAAE,MAAM,QAAQ,YAAY,MAAM;AAC7C;AAEO,IAAM,SAAS;AAAA,EACpB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,kBAAkB;AAAA,EAClB,cAAc;AAChB;AAEO,IAAM,SAAS;AAAA,EACpB,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,mBAAmB;AACrB;AAEO,IAAM,cAAc;AAAA,EACzB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,OAAO;AAAA;AAAA,EAEP,KAAK;AAAA,EACL,MAAM;AACR;AAEO,IAAM,IAAI;AAAA,EACf,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,OAAO;AAAA,EACP,OAAO;AACT;AAEO,IAAM,QAAQ;AAAA;AAAA,EAEnB,MAAM;AAAA,EACN,eAAe;AAAA;AAAA,EAEf,cAAc;AAChB;;;ACrUO,SAAS,UAAU,SAAuB;AAC/C,QAAM,OAAO,WAAW,SAAS,OAAO,CAAC;AACzC,QAAM,MAAM,CAAC;AACb,aAAW,QAAQ,WAAW;AAC5B,UAAM,EAAE,GAAG,EAAE,IAAI,UAAU,IAAI;AAC/B,QAAI,IAAI,IAAI,WAAW,EAAE,GAAG,GAAG,KAAK,IAAI,GAAG,GAAG,KAAK,EAAE,CAAC;AAAA,EACxD;AACA,SAAO;AACT;","names":[]}
@@ -0,0 +1,147 @@
1
+ /* @aginies/tokens v0.1.0 — generated from src/tokens.ts. Do not edit by hand. */
2
+
3
+ /* Pre-design-system variable names mapped onto the new tokens. Remove after migration. */
4
+ :root {
5
+ --surface-1: var(--panel);
6
+ --surface-2: var(--panel);
7
+ --surface-3: var(--panel-2);
8
+ --surface-4: var(--panel-2);
9
+ --surface-5: var(--panel-2);
10
+ --surface-6: var(--panel-3);
11
+ --surface-9: var(--panel-3);
12
+ --surface-11: var(--line);
13
+ --surface-12: var(--line);
14
+ --surface-13: var(--line-2);
15
+ --surface-14: var(--line-2);
16
+ --surface-15: var(--line-3);
17
+ --surface-elevated: var(--panel-2);
18
+ --bg-strong: var(--bg);
19
+ --white: var(--bg-2);
20
+ --surface-4-rgb: var(--panel-2-rgb);
21
+ --surface-5-rgb: var(--panel-2-rgb);
22
+ --surface-7-rgb: var(--panel-3-rgb);
23
+ --surface-9-rgb: var(--panel-3-rgb);
24
+ --divider-rgb: var(--line-rgb);
25
+ --white-rgb: var(--bg-2-rgb);
26
+ --black-rgb: 0 0 0;
27
+ --text-primary: var(--text);
28
+ --text-secondary: var(--text-2);
29
+ --text-tertiary: var(--text-2);
30
+ --text-muted: var(--mute);
31
+ --text-subtle: var(--mute);
32
+ --text-inverse: var(--text);
33
+ --text-error: var(--bad);
34
+ --base-muted-foreground: var(--mute);
35
+ --border: var(--line);
36
+ --border-strong: var(--line-2);
37
+ --divider: var(--line);
38
+ --border-muted: var(--line);
39
+ --border-success: var(--line-2);
40
+ --brand-400: var(--signal);
41
+ --brand-500: var(--signal-2);
42
+ --brand-secondary: var(--signal);
43
+ --brand-tertiary: var(--ok);
44
+ --warning: var(--warn);
45
+ --brand-primary-hex: var(--signal);
46
+ --brand-primary-hover-hex: var(--signal-2);
47
+ --brand-accent-hex: var(--signal);
48
+ --brand-accent-hover-hex: var(--signal-2);
49
+ --brand-background-hex: var(--bg);
50
+ --workflow-edge-default: var(--edge);
51
+ --execution-active: var(--execution);
52
+ --execution-run: color-mix(in srgb, var(--execution) 32%, var(--line));
53
+ --execution-surface: color-mix(in srgb, var(--execution) 6%, var(--panel));
54
+ --panel-tab-bar-bg: var(--bg-2);
55
+ --panel-tab-badge-bg: var(--panel-3);
56
+ --panel-tab-badge-border: var(--line-2);
57
+ --panel-tab-badge-text: var(--text);
58
+ --panel-tab-inactive-text: var(--mute);
59
+ --panel-tab-inactive-text-hover: var(--text-2);
60
+ --panel-tab-bar-border: var(--line);
61
+ --card-background: var(--panel);
62
+ --card-border: var(--line);
63
+ --card-text: var(--text);
64
+ --card-hover: var(--panel-2);
65
+ --scrollbar-size: 8px;
66
+ }
67
+
68
+ :root, .dark, [data-theme="dark"] {
69
+ --background: 226.2 48.1% 5.3%;
70
+ --foreground: 221.2 50% 93.7%;
71
+ --card: 225 46.2% 10.2%;
72
+ --card-foreground: 221.2 50% 93.7%;
73
+ --popover: 224 45.5% 12.9%;
74
+ --popover-foreground: 221.2 50% 93.7%;
75
+ --primary: 221.2 50% 93.7%;
76
+ --primary-foreground: 226.2 48.1% 5.3%;
77
+ --secondary: 224 45.5% 12.9%;
78
+ --secondary-foreground: 221.2 50% 93.7%;
79
+ --muted: 224 45.5% 12.9%;
80
+ --muted-foreground: 223.9 19.1% 57.8%;
81
+ --accent: 225 45.5% 17.3%;
82
+ --accent-foreground: 221.2 50% 93.7%;
83
+ --destructive: 0 100% 73.9%;
84
+ --destructive-foreground: 213.6 67.6% 7.3%;
85
+ --input: 225.8 31.1% 23.9%;
86
+ --input-background: 225.7 48.8% 8.4%;
87
+ --ring: 200.6 100% 68.6%;
88
+ --scrollbar-track: 225.7 48.8% 8.4%;
89
+ --scrollbar-thumb: 225.8 31.1% 23.9%;
90
+ --scrollbar-thumb-hover: 225 23.1% 30.6%;
91
+ --workflow-background: 226.2 48.1% 5.3%;
92
+ }
93
+
94
+ .light, [data-theme="light"] {
95
+ --background: 220 37.5% 96.9%;
96
+ --foreground: 220 48.8% 8.4%;
97
+ --card: 0 0% 100%;
98
+ --card-foreground: 220 48.8% 8.4%;
99
+ --popover: 220 36% 95.1%;
100
+ --popover-foreground: 220 48.8% 8.4%;
101
+ --primary: 220 48.8% 8.4%;
102
+ --primary-foreground: 220 37.5% 96.9%;
103
+ --secondary: 220 36% 95.1%;
104
+ --secondary-foreground: 220 48.8% 8.4%;
105
+ --muted: 220 36% 95.1%;
106
+ --muted-foreground: 223.8 14.7% 49.2%;
107
+ --accent: 218.6 35% 92.2%;
108
+ --accent-foreground: 220 48.8% 8.4%;
109
+ --destructive: 3.2 71.3% 41%;
110
+ --destructive-foreground: 0 0% 100%;
111
+ --input: 220.9 23.4% 81.6%;
112
+ --input-background: 0 0% 100%;
113
+ --ring: 203.2 100% 38%;
114
+ --scrollbar-track: 0 0% 100%;
115
+ --scrollbar-thumb: 220.9 23.4% 81.6%;
116
+ --scrollbar-thumb-hover: 224.6 25.5% 73.1%;
117
+ --workflow-background: 220 37.5% 96.9%;
118
+ }
119
+
120
+ @media (prefers-color-scheme: light) {
121
+ :root:not(.dark):not([data-theme="dark"]) {
122
+ --background: 220 37.5% 96.9%;
123
+ --foreground: 220 48.8% 8.4%;
124
+ --card: 0 0% 100%;
125
+ --card-foreground: 220 48.8% 8.4%;
126
+ --popover: 220 36% 95.1%;
127
+ --popover-foreground: 220 48.8% 8.4%;
128
+ --primary: 220 48.8% 8.4%;
129
+ --primary-foreground: 220 37.5% 96.9%;
130
+ --secondary: 220 36% 95.1%;
131
+ --secondary-foreground: 220 48.8% 8.4%;
132
+ --muted: 220 36% 95.1%;
133
+ --muted-foreground: 223.8 14.7% 49.2%;
134
+ --accent: 218.6 35% 92.2%;
135
+ --accent-foreground: 220 48.8% 8.4%;
136
+ --destructive: 3.2 71.3% 41%;
137
+ --destructive-foreground: 0 0% 100%;
138
+ --input: 220.9 23.4% 81.6%;
139
+ --input-background: 0 0% 100%;
140
+ --ring: 203.2 100% 38%;
141
+ --scrollbar-track: 0 0% 100%;
142
+ --scrollbar-thumb: 220.9 23.4% 81.6%;
143
+ --scrollbar-thumb-hover: 224.6 25.5% 73.1%;
144
+ --workflow-background: 220 37.5% 96.9%;
145
+ }
146
+
147
+ }