@lessly/ui 0.2.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.
@@ -0,0 +1,507 @@
1
+ /* === Fonts === */
2
+ @font-face {
3
+ font-family: "Inter";
4
+ src: url("/fonts/inter/inter-regular.woff2") format("woff2");
5
+ font-weight: 400;
6
+ font-style: normal;
7
+ font-display: swap;
8
+ }
9
+ @font-face {
10
+ font-family: "Inter";
11
+ src: url("/fonts/inter/inter-medium.woff2") format("woff2");
12
+ font-weight: 500;
13
+ font-style: normal;
14
+ font-display: swap;
15
+ }
16
+ @font-face {
17
+ font-family: "Inter";
18
+ src: url("/fonts/inter/inter-semibold.woff2") format("woff2");
19
+ font-weight: 600;
20
+ font-style: normal;
21
+ font-display: swap;
22
+ }
23
+ @font-face {
24
+ font-family: "Inter";
25
+ src: url("/fonts/inter/inter-bold.woff2") format("woff2");
26
+ font-weight: 700;
27
+ font-style: normal;
28
+ font-display: swap;
29
+ }
30
+ @font-face {
31
+ font-family: "Instrument Serif";
32
+ src: url("/fonts/instrument-serif/instrument-serif-regular.woff2") format("woff2");
33
+ font-weight: 400;
34
+ font-style: normal;
35
+ font-display: swap;
36
+ }
37
+ @font-face {
38
+ font-family: "Fira Mono";
39
+ src: url("/fonts/fira-mono/fira-mono-regular.woff2") format("woff2");
40
+ font-weight: 400;
41
+ font-style: normal;
42
+ font-display: swap;
43
+ }
44
+ @font-face {
45
+ font-family: "Fira Mono";
46
+ src: url("/fonts/fira-mono/fira-mono-medium.woff2") format("woff2");
47
+ font-weight: 500;
48
+ font-style: normal;
49
+ font-display: swap;
50
+ }
51
+
52
+ /* === Theme Variables === */
53
+ /* Tailwind v4 scalar spacing unit. The Lessly preset overrides theme.spacing with a
54
+ fixed keyed scale, which suppresses Tailwind's own --spacing var; tw-animate-css
55
+ slide-in-from-*/slide-out-to-* offsets compute calc(N * var(--spacing)), so without
56
+ this they collapse to 0. :where() keeps zero specificity — a consumer that sets its
57
+ own --spacing always wins over this fallback. */
58
+ :where(:root) {
59
+ --spacing: 0.25rem;
60
+ }
61
+ :root {
62
+ --color-bg-primary: #0e1015;
63
+ --color-bg-secondary: #12141b;
64
+ --color-bg-surface: #191b24;
65
+ --color-bg-elevated: #1f222d;
66
+ --color-bg-sunken: #08090c;
67
+ --color-bg-brand: #06297d;
68
+ --color-bg-brand-subtle: #080d1b;
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: #737c95;
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: #1f222d;
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
+ }
111
+
112
+ .light {
113
+ --color-bg-primary: #e1e2e4;
114
+ --color-bg-secondary: #eeeff0;
115
+ --color-bg-surface: #f6f7f7;
116
+ --color-bg-elevated: #ffffff;
117
+ --color-bg-sunken: #e1e2e4;
118
+ --color-bg-brand: #06297d;
119
+ --color-bg-brand-subtle: #eaeef4;
120
+ --color-bg-brand-bright: #165ff2;
121
+ --color-bg-brand-hover: #05226a;
122
+ --color-bg-success: #13703c;
123
+ --color-bg-success-subtle: #ebf3ef;
124
+ --color-bg-warning: #eca01c;
125
+ --color-bg-warning-subtle: #f4f0eb;
126
+ --color-bg-danger: #78100b;
127
+ --color-bg-danger-subtle: #f4ebeb;
128
+ --color-bg-teal-subtle: #ebf3f2;
129
+ --color-bg-violet-subtle: #efebf3;
130
+ --color-bg-rose-subtle: #f4ebed;
131
+ --color-text-primary: #0e1015;
132
+ --color-text-secondary: #393d4b;
133
+ --color-text-tertiary: #535a6e;
134
+ --color-text-disabled: #737c95;
135
+ --color-text-inverse: #f6f7f7;
136
+ --color-text-on-brand: #f6f7f7;
137
+ --color-text-on-success: #f6f7f7;
138
+ --color-text-on-warning: #08090c;
139
+ --color-text-on-danger: #f6f7f7;
140
+ --color-text-brand: #0940b8;
141
+ --color-text-success: #13703c;
142
+ --color-text-warning: #7a5409;
143
+ --color-text-danger: #94120e;
144
+ --color-text-link: #0940b8;
145
+ --color-text-link-hover: #0b4cd5;
146
+ --color-icon-primary: #252936;
147
+ --color-icon-secondary: #535a6e;
148
+ --color-icon-disabled: #8a91a7;
149
+ --color-icon-brand: #0940b8;
150
+ --color-icon-success: #13703c;
151
+ --color-icon-warning: #7a5409;
152
+ --color-icon-danger: #94120e;
153
+ --color-border-subtle: #cfd1d7;
154
+ --color-border-default: #737c95;
155
+ --color-border-strong: #60687f;
156
+ --color-border-brand: #165ff2;
157
+ --color-border-focus: #0940b8;
158
+ --color-border-success: #188a49;
159
+ --color-border-warning: #b3780e;
160
+ --color-border-danger: #e82020;
161
+ }
162
+
163
+ /* === Base === */
164
+ @layer base {
165
+ body {
166
+ font-family: "Inter", system-ui, -apple-system, sans-serif;
167
+ -webkit-font-smoothing: antialiased;
168
+ -moz-osx-font-smoothing: grayscale;
169
+ }
170
+ }
171
+
172
+ /* === Animation layer (tw-animate-css, compiled) — see scripts/build-styles.mjs === */
173
+ /*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */
174
+ @layer properties;
175
+ .data-\[motion\=from-end\]\:slide-in-from-right-52 {
176
+ &[data-motion="from-end"] {
177
+ --tw-enter-translate-x: calc(52*var(--spacing));
178
+ }
179
+ }
180
+ .data-\[motion\=from-start\]\:slide-in-from-left-52 {
181
+ &[data-motion="from-start"] {
182
+ --tw-enter-translate-x: calc(52*var(--spacing)*-1);
183
+ }
184
+ }
185
+ .data-\[motion\=to-end\]\:slide-out-to-right-52 {
186
+ &[data-motion="to-end"] {
187
+ --tw-exit-translate-x: calc(52*var(--spacing));
188
+ }
189
+ }
190
+ .data-\[motion\=to-start\]\:slide-out-to-left-52 {
191
+ &[data-motion="to-start"] {
192
+ --tw-exit-translate-x: calc(52*var(--spacing)*-1);
193
+ }
194
+ }
195
+ .data-\[motion\^\=from-\]\:animate-in {
196
+ &[data-motion^="from-"] {
197
+ animation: enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);
198
+ }
199
+ }
200
+ .data-\[motion\^\=from-\]\:fade-in {
201
+ &[data-motion^="from-"] {
202
+ --tw-enter-opacity: 0;
203
+ }
204
+ }
205
+ .data-\[motion\^\=to-\]\:animate-out {
206
+ &[data-motion^="to-"] {
207
+ animation: exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);
208
+ }
209
+ }
210
+ .data-\[motion\^\=to-\]\:fade-out {
211
+ &[data-motion^="to-"] {
212
+ --tw-exit-opacity: 0;
213
+ }
214
+ }
215
+ .data-\[side\=bottom\]\:slide-in-from-top-2 {
216
+ &[data-side="bottom"] {
217
+ --tw-enter-translate-y: calc(2*var(--spacing)*-1);
218
+ }
219
+ }
220
+ .data-\[side\=left\]\:slide-in-from-right-2 {
221
+ &[data-side="left"] {
222
+ --tw-enter-translate-x: calc(2*var(--spacing));
223
+ }
224
+ }
225
+ .data-\[side\=right\]\:slide-in-from-left-2 {
226
+ &[data-side="right"] {
227
+ --tw-enter-translate-x: calc(2*var(--spacing)*-1);
228
+ }
229
+ }
230
+ .data-\[side\=top\]\:slide-in-from-bottom-2 {
231
+ &[data-side="top"] {
232
+ --tw-enter-translate-y: calc(2*var(--spacing));
233
+ }
234
+ }
235
+ .data-\[state\=closed\]\:animate-accordion-up {
236
+ &[data-state="closed"] {
237
+ animation: accordion-up var(--tw-animation-duration,var(--tw-duration,.2s))var(--tw-ease,ease-out)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);
238
+ }
239
+ }
240
+ .data-\[state\=closed\]\:animate-collapsible-up {
241
+ &[data-state="closed"] {
242
+ animation: collapsible-up var(--tw-animation-duration,var(--tw-duration,.2s))var(--tw-ease,ease-out)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);
243
+ }
244
+ }
245
+ .data-\[state\=closed\]\:animate-out {
246
+ &[data-state="closed"] {
247
+ animation: exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);
248
+ }
249
+ }
250
+ .data-\[state\=closed\]\:fade-out-0 {
251
+ &[data-state="closed"] {
252
+ --tw-exit-opacity: calc(0/100);
253
+ --tw-exit-opacity: 0;
254
+ }
255
+ }
256
+ .data-\[state\=closed\]\:zoom-out-95 {
257
+ &[data-state="closed"] {
258
+ --tw-exit-scale: calc(95*1%);
259
+ --tw-exit-scale: .95;
260
+ }
261
+ }
262
+ .data-\[state\=closed\]\:slide-out-to-bottom {
263
+ &[data-state="closed"] {
264
+ --tw-exit-translate-y: 100%;
265
+ }
266
+ }
267
+ .data-\[state\=closed\]\:slide-out-to-left {
268
+ &[data-state="closed"] {
269
+ --tw-exit-translate-x: -100%;
270
+ }
271
+ }
272
+ .data-\[state\=closed\]\:slide-out-to-right {
273
+ &[data-state="closed"] {
274
+ --tw-exit-translate-x: 100%;
275
+ }
276
+ }
277
+ .data-\[state\=closed\]\:slide-out-to-top {
278
+ &[data-state="closed"] {
279
+ --tw-exit-translate-y: -100%;
280
+ }
281
+ }
282
+ .data-\[state\=hidden\]\:animate-out {
283
+ &[data-state="hidden"] {
284
+ animation: exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);
285
+ }
286
+ }
287
+ .data-\[state\=hidden\]\:fade-out {
288
+ &[data-state="hidden"] {
289
+ --tw-exit-opacity: 0;
290
+ }
291
+ }
292
+ .data-\[state\=open\]\:animate-accordion-down {
293
+ &[data-state="open"] {
294
+ animation: accordion-down var(--tw-animation-duration,var(--tw-duration,.2s))var(--tw-ease,ease-out)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);
295
+ }
296
+ }
297
+ .data-\[state\=open\]\:animate-collapsible-down {
298
+ &[data-state="open"] {
299
+ animation: collapsible-down var(--tw-animation-duration,var(--tw-duration,.2s))var(--tw-ease,ease-out)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);
300
+ }
301
+ }
302
+ .data-\[state\=open\]\:animate-in {
303
+ &[data-state="open"] {
304
+ animation: enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);
305
+ }
306
+ }
307
+ .data-\[state\=open\]\:fade-in-0 {
308
+ &[data-state="open"] {
309
+ --tw-enter-opacity: calc(0/100);
310
+ --tw-enter-opacity: 0;
311
+ }
312
+ }
313
+ .data-\[state\=open\]\:zoom-in-90 {
314
+ &[data-state="open"] {
315
+ --tw-enter-scale: calc(90*1%);
316
+ --tw-enter-scale: .9;
317
+ }
318
+ }
319
+ .data-\[state\=open\]\:zoom-in-95 {
320
+ &[data-state="open"] {
321
+ --tw-enter-scale: calc(95*1%);
322
+ --tw-enter-scale: .95;
323
+ }
324
+ }
325
+ .data-\[state\=open\]\:slide-in-from-bottom {
326
+ &[data-state="open"] {
327
+ --tw-enter-translate-y: 100%;
328
+ }
329
+ }
330
+ .data-\[state\=open\]\:slide-in-from-left {
331
+ &[data-state="open"] {
332
+ --tw-enter-translate-x: -100%;
333
+ }
334
+ }
335
+ .data-\[state\=open\]\:slide-in-from-right {
336
+ &[data-state="open"] {
337
+ --tw-enter-translate-x: 100%;
338
+ }
339
+ }
340
+ .data-\[state\=open\]\:slide-in-from-top {
341
+ &[data-state="open"] {
342
+ --tw-enter-translate-y: -100%;
343
+ }
344
+ }
345
+ .data-\[state\=visible\]\:animate-in {
346
+ &[data-state="visible"] {
347
+ animation: enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);
348
+ }
349
+ }
350
+ .data-\[state\=visible\]\:fade-in {
351
+ &[data-state="visible"] {
352
+ --tw-enter-opacity: 0;
353
+ }
354
+ }
355
+ @property --tw-animation-delay {
356
+ syntax: "*";
357
+ inherits: false;
358
+ initial-value: 0s;
359
+ }
360
+ @property --tw-animation-direction {
361
+ syntax: "*";
362
+ inherits: false;
363
+ initial-value: normal;
364
+ }
365
+ @property --tw-animation-duration {
366
+ syntax: "*";
367
+ inherits: false;
368
+ }
369
+ @property --tw-animation-fill-mode {
370
+ syntax: "*";
371
+ inherits: false;
372
+ initial-value: none;
373
+ }
374
+ @property --tw-animation-iteration-count {
375
+ syntax: "*";
376
+ inherits: false;
377
+ initial-value: 1;
378
+ }
379
+ @property --tw-enter-blur {
380
+ syntax: "*";
381
+ inherits: false;
382
+ initial-value: 0;
383
+ }
384
+ @property --tw-enter-opacity {
385
+ syntax: "*";
386
+ inherits: false;
387
+ initial-value: 1;
388
+ }
389
+ @property --tw-enter-rotate {
390
+ syntax: "*";
391
+ inherits: false;
392
+ initial-value: 0;
393
+ }
394
+ @property --tw-enter-scale {
395
+ syntax: "*";
396
+ inherits: false;
397
+ initial-value: 1;
398
+ }
399
+ @property --tw-enter-translate-x {
400
+ syntax: "*";
401
+ inherits: false;
402
+ initial-value: 0;
403
+ }
404
+ @property --tw-enter-translate-y {
405
+ syntax: "*";
406
+ inherits: false;
407
+ initial-value: 0;
408
+ }
409
+ @property --tw-exit-blur {
410
+ syntax: "*";
411
+ inherits: false;
412
+ initial-value: 0;
413
+ }
414
+ @property --tw-exit-opacity {
415
+ syntax: "*";
416
+ inherits: false;
417
+ initial-value: 1;
418
+ }
419
+ @property --tw-exit-rotate {
420
+ syntax: "*";
421
+ inherits: false;
422
+ initial-value: 0;
423
+ }
424
+ @property --tw-exit-scale {
425
+ syntax: "*";
426
+ inherits: false;
427
+ initial-value: 1;
428
+ }
429
+ @property --tw-exit-translate-x {
430
+ syntax: "*";
431
+ inherits: false;
432
+ initial-value: 0;
433
+ }
434
+ @property --tw-exit-translate-y {
435
+ syntax: "*";
436
+ inherits: false;
437
+ initial-value: 0;
438
+ }
439
+ @keyframes enter {
440
+ from {
441
+ opacity: var(--tw-enter-opacity,1);
442
+ transform: translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0));
443
+ filter: blur(var(--tw-enter-blur,0));
444
+ }
445
+ }
446
+ @keyframes exit {
447
+ to {
448
+ opacity: var(--tw-exit-opacity,1);
449
+ transform: translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0));
450
+ filter: blur(var(--tw-exit-blur,0));
451
+ }
452
+ }
453
+ @keyframes accordion-down {
454
+ from {
455
+ height: 0;
456
+ }
457
+ to {
458
+ height: var(--radix-accordion-content-height,var(--bits-accordion-content-height,var(--reka-accordion-content-height,var(--kb-accordion-content-height,var(--ngp-accordion-content-height,auto)))));
459
+ }
460
+ }
461
+ @keyframes accordion-up {
462
+ from {
463
+ height: var(--radix-accordion-content-height,var(--bits-accordion-content-height,var(--reka-accordion-content-height,var(--kb-accordion-content-height,var(--ngp-accordion-content-height,auto)))));
464
+ }
465
+ to {
466
+ height: 0;
467
+ }
468
+ }
469
+ @keyframes collapsible-down {
470
+ from {
471
+ height: 0;
472
+ }
473
+ to {
474
+ height: var(--radix-collapsible-content-height,var(--bits-collapsible-content-height,var(--reka-collapsible-content-height,var(--kb-collapsible-content-height,auto))));
475
+ }
476
+ }
477
+ @keyframes collapsible-up {
478
+ from {
479
+ height: var(--radix-collapsible-content-height,var(--bits-collapsible-content-height,var(--reka-collapsible-content-height,var(--kb-collapsible-content-height,auto))));
480
+ }
481
+ to {
482
+ height: 0;
483
+ }
484
+ }
485
+ @layer properties {
486
+ @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {
487
+ *, ::before, ::after, ::backdrop {
488
+ --tw-animation-delay: 0s;
489
+ --tw-animation-direction: normal;
490
+ --tw-animation-duration: initial;
491
+ --tw-animation-fill-mode: none;
492
+ --tw-animation-iteration-count: 1;
493
+ --tw-enter-blur: 0;
494
+ --tw-enter-opacity: 1;
495
+ --tw-enter-rotate: 0;
496
+ --tw-enter-scale: 1;
497
+ --tw-enter-translate-x: 0;
498
+ --tw-enter-translate-y: 0;
499
+ --tw-exit-blur: 0;
500
+ --tw-exit-opacity: 1;
501
+ --tw-exit-rotate: 0;
502
+ --tw-exit-scale: 1;
503
+ --tw-exit-translate-x: 0;
504
+ --tw-exit-translate-y: 0;
505
+ }
506
+ }
507
+ }