@lessly/ui 0.4.0 → 0.5.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/styles.css CHANGED
@@ -1,3 +1,679 @@
1
+ /* === @lessly/ui styles — generated by scripts/build-styles.mjs === */
2
+ /* @lessly/tokens theme + deprecated --color-* aliases + ui pieces + animation layer */
3
+
4
+ /*
5
+ * Auto-generated by tokens/build.js — do not edit manually.
6
+ * Source of truth: tokens/primitives.json + tokens/semantic.json.
7
+ * Run: node tokens/build.js
8
+ *
9
+ * Dark is the default theme (:root). Light activates via a `light` class
10
+ * on a parent element (usually <html> or <body>).
11
+ */
12
+
13
+ :root {
14
+ --bg-primary: #0e1015;
15
+ --bg-secondary: #12141b;
16
+ --bg-surface: #191b24;
17
+ --bg-elevated: #1f222d;
18
+ --bg-sunken: #08090c;
19
+ --bg-brand: #06297d;
20
+ --bg-brand-subtle: #0e204c;
21
+ --bg-brand-hover: #08349b;
22
+ --bg-brand-bright: #165ff2;
23
+ --bg-brand-bright-hover: #3d7af4;
24
+ --bg-success: #13703c;
25
+ --bg-success-bright: #21be63;
26
+ --bg-success-subtle: #0a1911;
27
+ --bg-warning: #b3780e;
28
+ --bg-warning-subtle: #1a1508;
29
+ --bg-danger: #78100b;
30
+ --bg-danger-subtle: #1a0a09;
31
+ --bg-teal-subtle: #091918;
32
+ --bg-violet-subtle: #12091a;
33
+ --bg-rose-subtle: #1a090b;
34
+ --text-primary: #eeeff0;
35
+ --text-secondary: #a5a9b5;
36
+ --text-tertiary: #8a91a7;
37
+ --text-disabled: #60687f;
38
+ --text-inverse: #0e1015;
39
+ --text-on-brand: #f6f7f7;
40
+ --text-on-success: #f6f7f7;
41
+ --text-on-success-bright: #08090c;
42
+ --text-on-warning: #08090c;
43
+ --text-on-danger: #f6f7f7;
44
+ --text-brand: #6394f6;
45
+ --text-success: #2eda76;
46
+ --text-warning: #efb042;
47
+ --text-danger: #f06a6a;
48
+ --text-link: #6394f6;
49
+ --text-link-hover: #a3b7e0;
50
+ --text-teal: #70eada;
51
+ --text-violet: #ad6cee;
52
+ --text-rose: #f06a85;
53
+ --icon-primary: #cfd1d7;
54
+ --icon-secondary: #737c95;
55
+ --icon-disabled: #393d4b;
56
+ --icon-brand: #6394f6;
57
+ --icon-success: #2eda76;
58
+ --icon-warning: #efb042;
59
+ --icon-danger: #f06a6a;
60
+ --border-subtle: #30343f;
61
+ --border-default: #60687f;
62
+ --border-strong: #737c95;
63
+ --border-brand: #165ff2;
64
+ --border-focus: #165ff2;
65
+ --border-success: #1da456;
66
+ --border-warning: #b3780e;
67
+ --border-danger: #e82020;
68
+ --field-bg: #0e1015;
69
+ --field-bg-hover: #12141b;
70
+ --field-bg-focus: #0e1015;
71
+ --field-bg-valid: #191b24;
72
+ --field-border: #30343f;
73
+ --field-border-hover: #393d4b;
74
+ --field-border-focus: #165ff2;
75
+ --field-border-filled: #393d4b;
76
+ --field-border-error: #e82020;
77
+ --field-border-success: #13703c;
78
+ --field-ring-focus: rgba(22,95,242,0.25);
79
+ --field-ring-error: rgba(232,32,32,0.2);
80
+ --field-ring-success: rgba(19,112,60,0.15);
81
+ --shadow-sm: 0 1px 2px rgba(0,0,0,0.4);
82
+ --shadow-md: 0 2px 8px rgba(0,0,0,0.5), 0 1px 2px rgba(0,0,0,0.4);
83
+ --shadow-lg: 0 8px 24px rgba(0,0,0,0.6), 0 2px 8px rgba(0,0,0,0.4);
84
+ --shadow-xl: 0 16px 48px rgba(0,0,0,0.7), 0 4px 12px rgba(0,0,0,0.5);
85
+ --shadow-inner: inset 0 1px 3px rgba(0,0,0,0.4);
86
+ --shadow-glow-brand: 0 0 12px rgba(6,41,125,0.5);
87
+ --overlay-backdrop: rgba(8,9,12,0.80);
88
+ --overlay-scrim: rgba(8,9,12,0.60);
89
+ --overlay-modal-bg: #1f222d;
90
+ --focus-ring-color: #165ff2;
91
+ --focus-ring-offset: 2px;
92
+ --focus-ring-width: 2px;
93
+ --grid-gutter: 16px;
94
+ --grid-margin-sm: 16px;
95
+ --grid-margin-md: 24px;
96
+ --grid-margin-xl: 40px;
97
+ --grid-container-max: 1440px;
98
+
99
+ /* typography text-styles — theme-invariant, :root only (see typographyVars in build.js) */
100
+ --text-display-xl-font-family: "Instrument Serif", Georgia, "Times New Roman", serif;
101
+ --text-display-xl-font-size: 3.5rem;
102
+ --text-display-xl-line-height: 1.05;
103
+ --text-display-xl-font-weight: 400;
104
+ --text-display-xl-letter-spacing: -0.02em;
105
+ --text-display-lg-font-family: "Instrument Serif", Georgia, "Times New Roman", serif;
106
+ --text-display-lg-font-size: 3rem;
107
+ --text-display-lg-line-height: 1.1;
108
+ --text-display-lg-font-weight: 400;
109
+ --text-display-lg-letter-spacing: -0.02em;
110
+ --text-h1-font-family: "Inter", system-ui, -apple-system, sans-serif;
111
+ --text-h1-font-size: 2.4375rem;
112
+ --text-h1-line-height: 1.15;
113
+ --text-h1-font-weight: 800;
114
+ --text-h1-letter-spacing: -0.025em;
115
+ --text-h2-font-family: "Inter", system-ui, -apple-system, sans-serif;
116
+ --text-h2-font-size: 2.0625rem;
117
+ --text-h2-line-height: 1.2;
118
+ --text-h2-font-weight: 800;
119
+ --text-h2-letter-spacing: -0.02em;
120
+ --text-h3-font-family: "Inter", system-ui, -apple-system, sans-serif;
121
+ --text-h3-font-size: 1.6875rem;
122
+ --text-h3-line-height: 1.25;
123
+ --text-h3-font-weight: 800;
124
+ --text-h3-letter-spacing: -0.015em;
125
+ --text-h4-font-family: "Inter", system-ui, -apple-system, sans-serif;
126
+ --text-h4-font-size: 1.4375rem;
127
+ --text-h4-line-height: 1.3;
128
+ --text-h4-font-weight: 800;
129
+ --text-h4-letter-spacing: -0.01em;
130
+ --text-h5-font-family: "Inter", system-ui, -apple-system, sans-serif;
131
+ --text-h5-font-size: 1.1875rem;
132
+ --text-h5-line-height: 1.35;
133
+ --text-h5-font-weight: 800;
134
+ --text-h5-letter-spacing: -0.005em;
135
+ --text-h6-font-family: "Inter", system-ui, -apple-system, sans-serif;
136
+ --text-h6-font-size: 1rem;
137
+ --text-h6-line-height: 1.4;
138
+ --text-h6-font-weight: 800;
139
+ --text-h6-letter-spacing: 0;
140
+ --text-body-lg-font-family: "Inter", system-ui, -apple-system, sans-serif;
141
+ --text-body-lg-font-size: 1.125rem;
142
+ --text-body-lg-line-height: 1.6;
143
+ --text-body-lg-font-weight: 400;
144
+ --text-body-lg-letter-spacing: 0;
145
+ --text-body-font-family: "Inter", system-ui, -apple-system, sans-serif;
146
+ --text-body-font-size: 1rem;
147
+ --text-body-line-height: 1.6;
148
+ --text-body-font-weight: 400;
149
+ --text-body-letter-spacing: 0;
150
+ --text-body-sm-font-family: "Inter", system-ui, -apple-system, sans-serif;
151
+ --text-body-sm-font-size: 0.875rem;
152
+ --text-body-sm-line-height: 1.5;
153
+ --text-body-sm-font-weight: 400;
154
+ --text-body-sm-letter-spacing: 0;
155
+ --text-caption-font-family: "Inter", system-ui, -apple-system, sans-serif;
156
+ --text-caption-font-size: 0.75rem;
157
+ --text-caption-line-height: 1.4;
158
+ --text-caption-font-weight: 400;
159
+ --text-caption-letter-spacing: 0;
160
+ --text-overline-font-family: "Inter", system-ui, -apple-system, sans-serif;
161
+ --text-overline-font-size: 0.6875rem;
162
+ --text-overline-line-height: 1.4;
163
+ --text-overline-font-weight: 600;
164
+ --text-overline-letter-spacing: 0.06em;
165
+ --text-overline-text-transform: uppercase;
166
+ --text-label-lg-font-family: "Inter", system-ui, -apple-system, sans-serif;
167
+ --text-label-lg-font-size: 1rem;
168
+ --text-label-lg-line-height: 1.4;
169
+ --text-label-lg-font-weight: 500;
170
+ --text-label-lg-letter-spacing: 0;
171
+ --text-label-md-font-family: "Inter", system-ui, -apple-system, sans-serif;
172
+ --text-label-md-font-size: 0.875rem;
173
+ --text-label-md-line-height: 1.4;
174
+ --text-label-md-font-weight: 500;
175
+ --text-label-md-letter-spacing: 0;
176
+ --text-label-sm-font-family: "Inter", system-ui, -apple-system, sans-serif;
177
+ --text-label-sm-font-size: 0.75rem;
178
+ --text-label-sm-line-height: 1.4;
179
+ --text-label-sm-font-weight: 500;
180
+ --text-label-sm-letter-spacing: 0;
181
+ --text-button-lg-font-family: "Inter", system-ui, -apple-system, sans-serif;
182
+ --text-button-lg-font-size: 1rem;
183
+ --text-button-lg-line-height: 1;
184
+ --text-button-lg-font-weight: 600;
185
+ --text-button-lg-letter-spacing: 0;
186
+ --text-button-md-font-family: "Inter", system-ui, -apple-system, sans-serif;
187
+ --text-button-md-font-size: 0.8125rem;
188
+ --text-button-md-line-height: 1;
189
+ --text-button-md-font-weight: 600;
190
+ --text-button-md-letter-spacing: 0;
191
+ --text-button-sm-font-family: "Inter", system-ui, -apple-system, sans-serif;
192
+ --text-button-sm-font-size: 0.6875rem;
193
+ --text-button-sm-line-height: 1;
194
+ --text-button-sm-font-weight: 600;
195
+ --text-button-sm-letter-spacing: 0;
196
+ --text-code-lg-font-family: "Fira Mono", "Fira Code", "Cascadia Code", monospace;
197
+ --text-code-lg-font-size: 1rem;
198
+ --text-code-lg-line-height: 1.6;
199
+ --text-code-lg-font-weight: 400;
200
+ --text-code-lg-letter-spacing: 0;
201
+ --text-code-font-family: "Fira Mono", "Fira Code", "Cascadia Code", monospace;
202
+ --text-code-font-size: 0.875rem;
203
+ --text-code-line-height: 1.5;
204
+ --text-code-font-weight: 400;
205
+ --text-code-letter-spacing: 0;
206
+ --text-code-sm-font-family: "Fira Mono", "Fira Code", "Cascadia Code", monospace;
207
+ --text-code-sm-font-size: 0.75rem;
208
+ --text-code-sm-line-height: 1.4;
209
+ --text-code-sm-font-weight: 400;
210
+ --text-code-sm-letter-spacing: 0;
211
+
212
+ /* layout — large dimensions (160–384px) for section spacing, theme-invariant (see layoutVars in build.js) */
213
+ --layout-40: 160px;
214
+ --layout-48: 192px;
215
+ --layout-56: 224px;
216
+ --layout-64: 256px;
217
+ --layout-80: 320px;
218
+ --layout-96: 384px;
219
+
220
+ /* motion — primitive + semantic duration/easing, theme-invariant (see motionVars in build.js) */
221
+ --motion-duration-instant: 0ms;
222
+ --motion-duration-fast: 100ms;
223
+ --motion-duration-normal: 200ms;
224
+ --motion-duration-slow: 300ms;
225
+ --motion-duration-slower: 500ms;
226
+ --motion-duration-slowest: 800ms;
227
+ --motion-easing-default: cubic-bezier(0.25, 0.1, 0.25, 1);
228
+ --motion-easing-in: cubic-bezier(0.42, 0, 1, 1);
229
+ --motion-easing-out: cubic-bezier(0, 0, 0.58, 1);
230
+ --motion-easing-in-out: cubic-bezier(0.42, 0, 0.58, 1);
231
+ --motion-easing-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
232
+ --motion-easing-linear: cubic-bezier(0, 0, 1, 1);
233
+ --motion-duration-ui: 100ms;
234
+ --motion-duration-collapse: 100ms;
235
+ --motion-duration-slide: 200ms;
236
+ --motion-duration-overlay: 300ms;
237
+ --motion-duration-toast: 300ms;
238
+ --motion-easing-standard: cubic-bezier(0.25, 0.1, 0.25, 1);
239
+ --motion-easing-enter: cubic-bezier(0, 0, 0.58, 1);
240
+ --motion-easing-exit: cubic-bezier(0.42, 0, 1, 1);
241
+ --motion-easing-emphasized: cubic-bezier(0.34, 1.56, 0.64, 1);
242
+
243
+ /* shadcn/ui role bridge — aliases to the Lessly tokens above (see SHADCN_BRIDGE
244
+ in build.js). Re-declared under .light below so a nested .light re-themes too. */
245
+ --background: var(--bg-primary);
246
+ --foreground: var(--text-primary);
247
+ --card: var(--bg-surface);
248
+ --card-foreground: var(--text-primary);
249
+ --popover: var(--bg-elevated);
250
+ --popover-foreground: var(--text-primary);
251
+ --primary: var(--bg-brand-bright);
252
+ --primary-foreground: var(--text-on-brand);
253
+ --secondary: var(--bg-elevated);
254
+ --secondary-foreground: var(--text-primary);
255
+ --muted: var(--bg-sunken);
256
+ --muted-foreground: var(--text-tertiary);
257
+ --accent: var(--bg-elevated);
258
+ --accent-foreground: var(--text-primary);
259
+ --destructive: var(--bg-danger);
260
+ --destructive-foreground: var(--text-on-danger);
261
+ --border: var(--border-default);
262
+ --input: var(--field-border);
263
+ --ring: var(--focus-ring-color);
264
+ --success: var(--bg-success);
265
+ --success-foreground: var(--text-on-success);
266
+ --warning: var(--bg-warning);
267
+ --warning-foreground: var(--text-on-warning);
268
+ --link: var(--text-link);
269
+ --link-hover: var(--text-link-hover);
270
+ --inverted-foreground: var(--bg-brand);
271
+ }
272
+
273
+ .light {
274
+ --bg-primary: #eeeff0;
275
+ --bg-secondary: #e1e2e4;
276
+ --bg-surface: #f6f7f7;
277
+ --bg-elevated: #ffffff;
278
+ --bg-sunken: #cfd1d7;
279
+ --bg-brand-subtle: #eaeef4;
280
+ --bg-brand-hover: #05226a;
281
+ --bg-brand-bright-hover: #0b4cd5;
282
+ --bg-success-subtle: #ebf3ef;
283
+ --bg-warning: #eca01c;
284
+ --bg-warning-subtle: #f4f0eb;
285
+ --bg-danger-subtle: #f4ebeb;
286
+ --bg-teal-subtle: #ebf3f2;
287
+ --bg-violet-subtle: #efebf3;
288
+ --bg-rose-subtle: #f4ebed;
289
+ --text-primary: #0e1015;
290
+ --text-secondary: #393d4b;
291
+ --text-tertiary: #535a6e;
292
+ --text-disabled: #737c95;
293
+ --text-inverse: #f6f7f7;
294
+ --text-brand: #0940b8;
295
+ --text-success: #13703c;
296
+ --text-warning: #7a5409;
297
+ --text-danger: #94120e;
298
+ --text-link: #0940b8;
299
+ --text-link-hover: #0b4cd5;
300
+ --text-teal: #107469;
301
+ --text-violet: #450d77;
302
+ --text-rose: #780b1f;
303
+ --icon-primary: #252936;
304
+ --icon-secondary: #535a6e;
305
+ --icon-disabled: #8a91a7;
306
+ --icon-brand: #0940b8;
307
+ --icon-success: #13703c;
308
+ --icon-warning: #7a5409;
309
+ --icon-danger: #94120e;
310
+ --border-subtle: #cfd1d7;
311
+ --border-default: #737c95;
312
+ --border-strong: #60687f;
313
+ --border-focus: #0940b8;
314
+ --border-success: #188a49;
315
+ --field-bg: #ffffff;
316
+ --field-bg-hover: #f6f7f7;
317
+ --field-bg-focus: #ffffff;
318
+ --field-bg-valid: #eeeff0;
319
+ --field-border: #cfd1d7;
320
+ --field-border-hover: #a5a9b5;
321
+ --field-border-filled: #a5a9b5;
322
+ --field-ring-focus: rgba(22,95,242,0.15);
323
+ --field-ring-error: rgba(232,32,32,0.12);
324
+ --field-ring-success: rgba(19,112,60,0.1);
325
+ --shadow-sm: 0 1px 2px rgba(0,0,0,0.06);
326
+ --shadow-md: 0 2px 8px rgba(0,0,0,0.08), 0 1px 2px rgba(0,0,0,0.04);
327
+ --shadow-lg: 0 8px 24px rgba(0,0,0,0.12), 0 2px 8px rgba(0,0,0,0.06);
328
+ --shadow-xl: 0 16px 48px rgba(0,0,0,0.16), 0 4px 12px rgba(0,0,0,0.08);
329
+ --shadow-inner: inset 0 1px 3px rgba(0,0,0,0.08);
330
+ --shadow-glow-brand: 0 0 12px rgba(6,41,125,0.2);
331
+ --overlay-backdrop: rgba(14,16,21,0.50);
332
+ --overlay-scrim: rgba(14,16,21,0.30);
333
+ --overlay-modal-bg: #ffffff;
334
+ --focus-ring-color: #0940b8;
335
+
336
+ /* shadcn role bridge re-declared so .light on a nested element (not just <html>)
337
+ re-resolves the aliases to light values. */
338
+ --background: var(--bg-primary);
339
+ --foreground: var(--text-primary);
340
+ --card: var(--bg-surface);
341
+ --card-foreground: var(--text-primary);
342
+ --popover: var(--bg-elevated);
343
+ --popover-foreground: var(--text-primary);
344
+ --primary: var(--bg-brand-bright);
345
+ --primary-foreground: var(--text-on-brand);
346
+ --secondary: var(--bg-elevated);
347
+ --secondary-foreground: var(--text-primary);
348
+ --muted: var(--bg-sunken);
349
+ --muted-foreground: var(--text-tertiary);
350
+ --accent: var(--bg-elevated);
351
+ --accent-foreground: var(--text-primary);
352
+ --destructive: var(--bg-danger);
353
+ --destructive-foreground: var(--text-on-danger);
354
+ --border: var(--border-default);
355
+ --input: var(--field-border);
356
+ --ring: var(--focus-ring-color);
357
+ --success: var(--bg-success);
358
+ --success-foreground: var(--text-on-success);
359
+ --warning: var(--bg-warning);
360
+ --warning-foreground: var(--text-on-warning);
361
+ --link: var(--text-link);
362
+ --link-hover: var(--text-link-hover);
363
+ --inverted-foreground: var(--bg-brand);
364
+ }
365
+
366
+ /* Text-style utility classes (.text-<role>, .link) — generated; see typographyClasses in build.js. */
367
+ .text-display-xl {
368
+ font-family: var(--text-display-xl-font-family);
369
+ font-size: var(--text-display-xl-font-size);
370
+ line-height: var(--text-display-xl-line-height);
371
+ font-weight: var(--text-display-xl-font-weight);
372
+ letter-spacing: var(--text-display-xl-letter-spacing);
373
+ }
374
+
375
+ .text-display-lg {
376
+ font-family: var(--text-display-lg-font-family);
377
+ font-size: var(--text-display-lg-font-size);
378
+ line-height: var(--text-display-lg-line-height);
379
+ font-weight: var(--text-display-lg-font-weight);
380
+ letter-spacing: var(--text-display-lg-letter-spacing);
381
+ }
382
+
383
+ .text-h1 {
384
+ font-family: var(--text-h1-font-family);
385
+ font-size: var(--text-h1-font-size);
386
+ line-height: var(--text-h1-line-height);
387
+ font-weight: var(--text-h1-font-weight);
388
+ letter-spacing: var(--text-h1-letter-spacing);
389
+ }
390
+
391
+ .text-h2 {
392
+ font-family: var(--text-h2-font-family);
393
+ font-size: var(--text-h2-font-size);
394
+ line-height: var(--text-h2-line-height);
395
+ font-weight: var(--text-h2-font-weight);
396
+ letter-spacing: var(--text-h2-letter-spacing);
397
+ }
398
+
399
+ .text-h3 {
400
+ font-family: var(--text-h3-font-family);
401
+ font-size: var(--text-h3-font-size);
402
+ line-height: var(--text-h3-line-height);
403
+ font-weight: var(--text-h3-font-weight);
404
+ letter-spacing: var(--text-h3-letter-spacing);
405
+ }
406
+
407
+ .text-h4 {
408
+ font-family: var(--text-h4-font-family);
409
+ font-size: var(--text-h4-font-size);
410
+ line-height: var(--text-h4-line-height);
411
+ font-weight: var(--text-h4-font-weight);
412
+ letter-spacing: var(--text-h4-letter-spacing);
413
+ }
414
+
415
+ .text-h5 {
416
+ font-family: var(--text-h5-font-family);
417
+ font-size: var(--text-h5-font-size);
418
+ line-height: var(--text-h5-line-height);
419
+ font-weight: var(--text-h5-font-weight);
420
+ letter-spacing: var(--text-h5-letter-spacing);
421
+ }
422
+
423
+ .text-h6 {
424
+ font-family: var(--text-h6-font-family);
425
+ font-size: var(--text-h6-font-size);
426
+ line-height: var(--text-h6-line-height);
427
+ font-weight: var(--text-h6-font-weight);
428
+ letter-spacing: var(--text-h6-letter-spacing);
429
+ }
430
+
431
+ .text-body-lg {
432
+ font-family: var(--text-body-lg-font-family);
433
+ font-size: var(--text-body-lg-font-size);
434
+ line-height: var(--text-body-lg-line-height);
435
+ font-weight: var(--text-body-lg-font-weight);
436
+ letter-spacing: var(--text-body-lg-letter-spacing);
437
+ }
438
+
439
+ .text-body {
440
+ font-family: var(--text-body-font-family);
441
+ font-size: var(--text-body-font-size);
442
+ line-height: var(--text-body-line-height);
443
+ font-weight: var(--text-body-font-weight);
444
+ letter-spacing: var(--text-body-letter-spacing);
445
+ }
446
+
447
+ .text-body-sm {
448
+ font-family: var(--text-body-sm-font-family);
449
+ font-size: var(--text-body-sm-font-size);
450
+ line-height: var(--text-body-sm-line-height);
451
+ font-weight: var(--text-body-sm-font-weight);
452
+ letter-spacing: var(--text-body-sm-letter-spacing);
453
+ }
454
+
455
+ .text-caption {
456
+ font-family: var(--text-caption-font-family);
457
+ font-size: var(--text-caption-font-size);
458
+ line-height: var(--text-caption-line-height);
459
+ font-weight: var(--text-caption-font-weight);
460
+ letter-spacing: var(--text-caption-letter-spacing);
461
+ }
462
+
463
+ .text-overline {
464
+ font-family: var(--text-overline-font-family);
465
+ font-size: var(--text-overline-font-size);
466
+ line-height: var(--text-overline-line-height);
467
+ font-weight: var(--text-overline-font-weight);
468
+ letter-spacing: var(--text-overline-letter-spacing);
469
+ text-transform: var(--text-overline-text-transform);
470
+ }
471
+
472
+ .text-label-lg {
473
+ font-family: var(--text-label-lg-font-family);
474
+ font-size: var(--text-label-lg-font-size);
475
+ line-height: var(--text-label-lg-line-height);
476
+ font-weight: var(--text-label-lg-font-weight);
477
+ letter-spacing: var(--text-label-lg-letter-spacing);
478
+ }
479
+
480
+ .text-label-md {
481
+ font-family: var(--text-label-md-font-family);
482
+ font-size: var(--text-label-md-font-size);
483
+ line-height: var(--text-label-md-line-height);
484
+ font-weight: var(--text-label-md-font-weight);
485
+ letter-spacing: var(--text-label-md-letter-spacing);
486
+ }
487
+
488
+ .text-label-sm {
489
+ font-family: var(--text-label-sm-font-family);
490
+ font-size: var(--text-label-sm-font-size);
491
+ line-height: var(--text-label-sm-line-height);
492
+ font-weight: var(--text-label-sm-font-weight);
493
+ letter-spacing: var(--text-label-sm-letter-spacing);
494
+ }
495
+
496
+ .text-button-lg {
497
+ font-family: var(--text-button-lg-font-family);
498
+ font-size: var(--text-button-lg-font-size);
499
+ line-height: var(--text-button-lg-line-height);
500
+ font-weight: var(--text-button-lg-font-weight);
501
+ letter-spacing: var(--text-button-lg-letter-spacing);
502
+ }
503
+
504
+ .text-button-md {
505
+ font-family: var(--text-button-md-font-family);
506
+ font-size: var(--text-button-md-font-size);
507
+ line-height: var(--text-button-md-line-height);
508
+ font-weight: var(--text-button-md-font-weight);
509
+ letter-spacing: var(--text-button-md-letter-spacing);
510
+ }
511
+
512
+ .text-button-sm {
513
+ font-family: var(--text-button-sm-font-family);
514
+ font-size: var(--text-button-sm-font-size);
515
+ line-height: var(--text-button-sm-line-height);
516
+ font-weight: var(--text-button-sm-font-weight);
517
+ letter-spacing: var(--text-button-sm-letter-spacing);
518
+ }
519
+
520
+ .text-code-lg {
521
+ font-family: var(--text-code-lg-font-family);
522
+ font-size: var(--text-code-lg-font-size);
523
+ line-height: var(--text-code-lg-line-height);
524
+ font-weight: var(--text-code-lg-font-weight);
525
+ letter-spacing: var(--text-code-lg-letter-spacing);
526
+ }
527
+
528
+ .text-code {
529
+ font-family: var(--text-code-font-family);
530
+ font-size: var(--text-code-font-size);
531
+ line-height: var(--text-code-line-height);
532
+ font-weight: var(--text-code-font-weight);
533
+ letter-spacing: var(--text-code-letter-spacing);
534
+ }
535
+
536
+ .text-code-sm {
537
+ font-family: var(--text-code-sm-font-family);
538
+ font-size: var(--text-code-sm-font-size);
539
+ line-height: var(--text-code-sm-line-height);
540
+ font-weight: var(--text-code-sm-font-weight);
541
+ letter-spacing: var(--text-code-sm-letter-spacing);
542
+ }
543
+
544
+ .link {
545
+ color: var(--text-link);
546
+ text-decoration: underline;
547
+ text-underline-offset: 2px;
548
+ }
549
+
550
+ .link:hover {
551
+ color: var(--text-link-hover);
552
+ }
553
+
554
+ /* Reduced motion — collapse every motion variable to instant/linear (see reducedMotionBlock in build.js). */
555
+ @media (prefers-reduced-motion: reduce) {
556
+ :root {
557
+ --motion-duration-instant: 0ms;
558
+ --motion-duration-fast: 0ms;
559
+ --motion-duration-normal: 0ms;
560
+ --motion-duration-slow: 0ms;
561
+ --motion-duration-slower: 0ms;
562
+ --motion-duration-slowest: 0ms;
563
+ --motion-duration-ui: 0ms;
564
+ --motion-duration-collapse: 0ms;
565
+ --motion-duration-slide: 0ms;
566
+ --motion-duration-overlay: 0ms;
567
+ --motion-duration-toast: 0ms;
568
+ --motion-easing-default: cubic-bezier(0, 0, 1, 1);
569
+ --motion-easing-in: cubic-bezier(0, 0, 1, 1);
570
+ --motion-easing-out: cubic-bezier(0, 0, 1, 1);
571
+ --motion-easing-in-out: cubic-bezier(0, 0, 1, 1);
572
+ --motion-easing-spring: cubic-bezier(0, 0, 1, 1);
573
+ --motion-easing-linear: cubic-bezier(0, 0, 1, 1);
574
+ --motion-easing-standard: cubic-bezier(0, 0, 1, 1);
575
+ --motion-easing-enter: cubic-bezier(0, 0, 1, 1);
576
+ --motion-easing-exit: cubic-bezier(0, 0, 1, 1);
577
+ --motion-easing-emphasized: cubic-bezier(0, 0, 1, 1);
578
+ }
579
+ }
580
+
581
+ /* === Deprecated aliases — remove in the next major ===
582
+ Old vendored `--color-*` names mapped onto the @lessly/tokens variables above.
583
+ Generated by scripts/build-styles.mjs — do not edit. */
584
+ :root {
585
+ --color-bg-primary: var(--bg-primary);
586
+ --color-bg-secondary: var(--bg-secondary);
587
+ --color-bg-surface: var(--bg-surface);
588
+ --color-bg-elevated: var(--bg-elevated);
589
+ --color-bg-sunken: var(--bg-sunken);
590
+ --color-bg-brand: var(--bg-brand);
591
+ --color-bg-brand-subtle: var(--bg-brand-subtle);
592
+ --color-bg-brand-hover: var(--bg-brand-hover);
593
+ --color-bg-brand-bright: var(--bg-brand-bright);
594
+ --color-bg-success: var(--bg-success);
595
+ --color-bg-success-subtle: var(--bg-success-subtle);
596
+ --color-bg-warning: var(--bg-warning);
597
+ --color-bg-warning-subtle: var(--bg-warning-subtle);
598
+ --color-bg-danger: var(--bg-danger);
599
+ --color-bg-danger-subtle: var(--bg-danger-subtle);
600
+ --color-bg-teal-subtle: var(--bg-teal-subtle);
601
+ --color-bg-violet-subtle: var(--bg-violet-subtle);
602
+ --color-bg-rose-subtle: var(--bg-rose-subtle);
603
+ --color-text-primary: var(--text-primary);
604
+ --color-text-secondary: var(--text-secondary);
605
+ --color-text-tertiary: var(--text-tertiary);
606
+ --color-text-disabled: var(--text-disabled);
607
+ --color-text-inverse: var(--text-inverse);
608
+ --color-text-on-brand: var(--text-on-brand);
609
+ --color-text-on-success: var(--text-on-success);
610
+ --color-text-on-warning: var(--text-on-warning);
611
+ --color-text-on-danger: var(--text-on-danger);
612
+ --color-text-brand: var(--text-brand);
613
+ --color-text-success: var(--text-success);
614
+ --color-text-warning: var(--text-warning);
615
+ --color-text-danger: var(--text-danger);
616
+ --color-text-link: var(--text-link);
617
+ --color-text-link-hover: var(--text-link-hover);
618
+ --color-text-teal: var(--text-teal);
619
+ --color-icon-primary: var(--icon-primary);
620
+ --color-icon-secondary: var(--icon-secondary);
621
+ --color-icon-disabled: var(--icon-disabled);
622
+ --color-icon-brand: var(--icon-brand);
623
+ --color-icon-success: var(--icon-success);
624
+ --color-icon-warning: var(--icon-warning);
625
+ --color-icon-danger: var(--icon-danger);
626
+ --color-border-subtle: var(--border-subtle);
627
+ --color-border-default: var(--border-default);
628
+ --color-border-strong: var(--border-strong);
629
+ --color-border-brand: var(--border-brand);
630
+ --color-border-focus: var(--border-focus);
631
+ --color-border-success: var(--border-success);
632
+ --color-border-warning: var(--border-warning);
633
+ --color-border-danger: var(--border-danger);
634
+ }
635
+
636
+ .light {
637
+ --color-bg-primary: var(--bg-primary);
638
+ --color-bg-secondary: var(--bg-secondary);
639
+ --color-bg-surface: var(--bg-surface);
640
+ --color-bg-elevated: var(--bg-elevated);
641
+ --color-bg-sunken: var(--bg-sunken);
642
+ --color-bg-brand-subtle: var(--bg-brand-subtle);
643
+ --color-bg-brand-hover: var(--bg-brand-hover);
644
+ --color-bg-success-subtle: var(--bg-success-subtle);
645
+ --color-bg-warning: var(--bg-warning);
646
+ --color-bg-warning-subtle: var(--bg-warning-subtle);
647
+ --color-bg-danger-subtle: var(--bg-danger-subtle);
648
+ --color-bg-teal-subtle: var(--bg-teal-subtle);
649
+ --color-bg-violet-subtle: var(--bg-violet-subtle);
650
+ --color-bg-rose-subtle: var(--bg-rose-subtle);
651
+ --color-text-primary: var(--text-primary);
652
+ --color-text-secondary: var(--text-secondary);
653
+ --color-text-tertiary: var(--text-tertiary);
654
+ --color-text-disabled: var(--text-disabled);
655
+ --color-text-inverse: var(--text-inverse);
656
+ --color-text-brand: var(--text-brand);
657
+ --color-text-success: var(--text-success);
658
+ --color-text-warning: var(--text-warning);
659
+ --color-text-danger: var(--text-danger);
660
+ --color-text-link: var(--text-link);
661
+ --color-text-link-hover: var(--text-link-hover);
662
+ --color-text-teal: var(--text-teal);
663
+ --color-icon-primary: var(--icon-primary);
664
+ --color-icon-secondary: var(--icon-secondary);
665
+ --color-icon-disabled: var(--icon-disabled);
666
+ --color-icon-brand: var(--icon-brand);
667
+ --color-icon-success: var(--icon-success);
668
+ --color-icon-warning: var(--icon-warning);
669
+ --color-icon-danger: var(--icon-danger);
670
+ --color-border-subtle: var(--border-subtle);
671
+ --color-border-default: var(--border-default);
672
+ --color-border-strong: var(--border-strong);
673
+ --color-border-focus: var(--border-focus);
674
+ --color-border-success: var(--border-success);
675
+ }
676
+
1
677
  /* === Fonts === */
2
678
  @font-face {
3
679
  font-family: "Inter";
@@ -50,6 +726,12 @@
50
726
  }
51
727
 
52
728
  /* === Theme Variables === */
729
+ /* The token palettes (colors, typography, motion, shadows, grid) live in
730
+ @lessly/tokens/theme.css — dark `:root` + `.light`, unprefixed names
731
+ (--bg-primary, --text-primary, ...). scripts/build-styles.mjs prepends that
732
+ file plus a generated layer of deprecated `--color-*` aliases to
733
+ dist/styles.css; only ui-specific pieces are declared here. */
734
+
53
735
  /* Tailwind v4 scalar spacing unit. The Lessly preset overrides theme.spacing with a
54
736
  fixed keyed scale, which suppresses Tailwind's own --spacing var; tw-animate-css
55
737
  slide-in-from-*/slide-out-to-* offsets compute calc(N * var(--spacing)), so without
@@ -59,114 +741,20 @@
59
741
  --spacing: 0.25rem;
60
742
  }
61
743
  :root {
62
- --color-bg-primary: #191b24;
63
- --color-bg-secondary: #12141b;
64
- --color-bg-surface: #1f222d;
65
- --color-bg-elevated: #252936;
66
- --color-bg-sunken: #0e1015;
67
- --color-bg-brand: #06297d;
68
- --color-bg-brand-subtle: #1f2541;
69
- --color-bg-brand-bright: #165ff2;
70
- --color-bg-brand-hover: #08349b;
71
- --color-bg-success: #13703c;
72
- --color-bg-success-subtle: #0a1911;
73
- --color-bg-warning: #b3780e;
74
- --color-bg-warning-subtle: #1a1508;
75
- --color-bg-danger: #78100b;
76
- --color-bg-danger-subtle: #1a0a09;
77
- --color-bg-teal-subtle: #091918;
78
- --color-bg-violet-subtle: #12091a;
79
- --color-bg-rose-subtle: #1a090b;
80
- --color-text-primary: #eeeff0;
81
- --color-text-secondary: #a5a9b5;
82
- --color-text-tertiary: #8a93a8;
83
- --color-text-disabled: #60687f;
84
- --color-text-inverse: #0e1015;
85
- --color-text-on-brand: #f6f7f7;
86
- --color-text-on-success: #f6f7f7;
87
- --color-text-on-warning: #08090c;
88
- --color-text-on-danger: #f6f7f7;
89
- --color-text-brand: #6394f6;
90
- --color-text-success: #2eda76;
91
- --color-text-warning: #efb042;
92
- --color-text-danger: #f06a6a;
93
- --color-text-link: #6394f6;
94
- --color-text-link-hover: #a3b7e0;
95
- --color-icon-primary: #cfd1d7;
96
- --color-icon-secondary: #737c95;
97
- --color-icon-disabled: #393d4b;
98
- --color-icon-brand: #6394f6;
99
- --color-icon-success: #2eda76;
100
- --color-icon-warning: #efb042;
101
- --color-icon-danger: #f06a6a;
102
- --color-border-subtle: #2a2e3b;
103
- --color-border-default: #60687f;
104
- --color-border-strong: #737c95;
105
- --color-border-brand: #165ff2;
106
- --color-border-focus: #165ff2;
107
- --color-border-success: #1da456;
108
- --color-border-warning: #b3780e;
109
- --color-border-danger: #e82020;
110
744
  /* === Nav / menu surfaces (0.3.0 sidebar) === */
111
- /* --menu-shadow is a literal: this package ships no --shadow-* variables (shadows live
112
- in the generated Tailwind preset's boxShadow map), so var(--shadow-md) would resolve
113
- to nothing. Value mirrors the 0.3.0 prototype DS's own --shadow-md. */
114
- --hov-bg: color-mix(in srgb, var(--color-text-primary) 7%, transparent);
115
- --menu-bg: var(--color-bg-elevated);
745
+ /* --menu-shadow stays a literal mirroring the 0.3.0 prototype's --shadow-md:
746
+ @lessly/tokens ships its own --shadow-* scale, but with different values —
747
+ switching to var(--shadow-md) would visibly change the menus. */
748
+ --hov-bg: color-mix(in srgb, var(--text-primary) 7%, transparent);
749
+ --menu-bg: var(--bg-elevated);
116
750
  --menu-shadow: 0 8px 24px rgba(0, 0, 0, 0.5);
117
751
  --menu-hov: var(--hov-bg);
118
752
  }
119
753
 
120
754
  .light {
121
- --color-bg-primary: #f6f7f7;
122
- --color-bg-secondary: #eeeff0;
123
- --color-bg-surface: #f2f3f4;
124
- --color-bg-elevated: #edeef0;
125
- --color-bg-sunken: #e1e2e4;
126
- --color-bg-brand: #06297d;
127
- --color-bg-brand-subtle: #e4ecfe;
128
- --color-bg-brand-bright: #165ff2;
129
- --color-bg-brand-hover: #05226a;
130
- --color-bg-success: #13703c;
131
- --color-bg-success-subtle: #ebf3ef;
132
- --color-bg-warning: #eca01c;
133
- --color-bg-warning-subtle: #f4f0eb;
134
- --color-bg-danger: #78100b;
135
- --color-bg-danger-subtle: #f4ebeb;
136
- --color-bg-teal-subtle: #ebf3f2;
137
- --color-bg-violet-subtle: #efebf3;
138
- --color-bg-rose-subtle: #f4ebed;
139
- --color-text-primary: #0e1015;
140
- --color-text-secondary: #393d4b;
141
- --color-text-tertiary: #535a6e;
142
- --color-text-disabled: #737c95;
143
- --color-text-inverse: #f6f7f7;
144
- --color-text-on-brand: #f6f7f7;
145
- --color-text-on-success: #f6f7f7;
146
- --color-text-on-warning: #08090c;
147
- --color-text-on-danger: #f6f7f7;
148
- --color-text-brand: #0b4cd5;
149
- --color-text-success: #13703c;
150
- --color-text-warning: #7a5409;
151
- --color-text-danger: #94120e;
152
- --color-text-link: #0940b8;
153
- --color-text-link-hover: #0b4cd5;
154
- --color-icon-primary: #252936;
155
- --color-icon-secondary: #535a6e;
156
- --color-icon-disabled: #8a91a7;
157
- --color-icon-brand: #165ff2;
158
- --color-icon-success: #13703c;
159
- --color-icon-warning: #7a5409;
160
- --color-icon-danger: #94120e;
161
- --color-border-subtle: #cfd1d7;
162
- --color-border-default: #737c95;
163
- --color-border-strong: #60687f;
164
- --color-border-brand: #165ff2;
165
- --color-border-focus: #0940b8;
166
- --color-border-success: #188a49;
167
- --color-border-warning: #b3780e;
168
- --color-border-danger: #e82020;
169
- /* Light keeps opaque plates: a translucent text-mix would vanish on a white menu. */
755
+ /* Light keeps opaque plates: a translucent text-mix would vanish on a white menu.
756
+ Pinned 0.3.0-prototype literals — deliberately NOT var(--bg-elevated), which
757
+ only coincidentally resolves to the same white in the current package. */
170
758
  --hov-bg: #ffffff;
171
759
  --menu-bg: #ffffff;
172
760
  --menu-shadow: 0 12px 32px rgba(16, 24, 40, 0.1), 0 2px 8px rgba(16, 24, 40, 0.06);