@aortl/admin-css 0.0.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/README.md ADDED
@@ -0,0 +1,63 @@
1
+ # @aortl/admin-css
2
+
3
+ Pre-built CSS for the admin design system. No Tailwind setup required to consume.
4
+
5
+ ## Install
6
+
7
+ ```fish
8
+ npm install @aortl/admin-css
9
+ ```
10
+
11
+ Or grab it from a CDN — no install needed:
12
+
13
+ ```html
14
+ <link rel="stylesheet" href="https://unpkg.com/@aortl/admin-css/dist/admin.min.css" />
15
+ ```
16
+
17
+ ## Use
18
+
19
+ ```html
20
+ <button class="btn btn-primary">Save</button>
21
+ <button class="btn btn-ghost btn-sm">Cancel</button>
22
+
23
+ <input class="input input-bordered" placeholder="Name" />
24
+
25
+ <div class="card">
26
+ <div class="card-body">
27
+ <h3 class="card-title">Hello</h3>
28
+ <p class="card-description">A small card.</p>
29
+ <div class="card-actions">
30
+ <button class="btn btn-primary btn-sm">OK</button>
31
+ </div>
32
+ </div>
33
+ </div>
34
+ ```
35
+
36
+ ## Components
37
+
38
+ | Class | Variants | Sizes |
39
+ | -------- | ------------------------------------------------------------- | ------------------------ |
40
+ | `.btn` | `.btn-primary`, `.btn-secondary`, `.btn-ghost`, `.btn-danger` | `.btn-sm`, `.btn-lg` |
41
+ | `.input` | `.input-bordered`, `.input-ghost`, `.input-danger` | `.input-sm`, `.input-lg` |
42
+ | `.card` | `.card-bordered`, `.card-compact` | — |
43
+
44
+ The `card` component uses children: `.card-body`, `.card-title`, `.card-description`, `.card-actions`.
45
+
46
+ ## Theming
47
+
48
+ Override any CSS variable in your own stylesheet:
49
+
50
+ ```css
51
+ :root {
52
+ --color-primary: oklch(0.6 0.2 30);
53
+ }
54
+ ```
55
+
56
+ See `src/theme.css` for the full list of tokens.
57
+
58
+ ## Build
59
+
60
+ ```fish
61
+ pnpm build # generates dist/admin.css + dist/admin.min.css
62
+ pnpm dev # watch mode
63
+ ```
package/dist/admin.css ADDED
@@ -0,0 +1,710 @@
1
+ /*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */
2
+ @layer properties;
3
+ @layer theme, base, components, utilities;
4
+ @layer theme {
5
+ :root, :host {
6
+ --font-sans: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji",
7
+ "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
8
+ --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono",
9
+ "Courier New", monospace;
10
+ --spacing: 0.25rem;
11
+ --text-xs: 0.75rem;
12
+ --text-xs--line-height: calc(1 / 0.75);
13
+ --text-sm: 0.875rem;
14
+ --text-sm--line-height: calc(1.25 / 0.875);
15
+ --text-base: 1rem;
16
+ --text-base--line-height: calc(1.5 / 1);
17
+ --text-lg: 1.125rem;
18
+ --text-lg--line-height: calc(1.75 / 1.125);
19
+ --font-weight-medium: 500;
20
+ --font-weight-semibold: 600;
21
+ --leading-tight: 1.25;
22
+ --leading-relaxed: 1.625;
23
+ --radius-lg: 0.5rem;
24
+ --radius-xl: 0.75rem;
25
+ --default-transition-duration: 150ms;
26
+ --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
27
+ --default-font-family: var(--font-sans);
28
+ --default-mono-font-family: var(--font-mono);
29
+ --color-paper: #fffcf0;
30
+ --color-black: #100f0f;
31
+ --color-base-50: #f2f0e5;
32
+ --color-base-100: #e6e4d9;
33
+ --color-base-150: #dad8ce;
34
+ --color-base-200: #cecdc3;
35
+ --color-base-300: #b7b5ac;
36
+ --color-base-400: #9f9d96;
37
+ --color-base-500: #878580;
38
+ --color-base-600: #6f6e69;
39
+ --color-base-700: #575653;
40
+ --color-base-800: #403e3c;
41
+ --color-base-850: #343331;
42
+ --color-base-900: #282726;
43
+ --color-base-950: #1c1b1a;
44
+ --color-red-50: #ffe1d5;
45
+ --color-red-100: #ffcabb;
46
+ --color-red-150: #fdb2a2;
47
+ --color-red-200: #f89a8a;
48
+ --color-red-300: #e8705f;
49
+ --color-red-400: #d14d41;
50
+ --color-red-500: #c03e35;
51
+ --color-red-600: #af3029;
52
+ --color-red-700: #942822;
53
+ --color-red-800: #6c201c;
54
+ --color-red-850: #551b18;
55
+ --color-red-900: #3e1715;
56
+ --color-red-950: #261312;
57
+ --color-orange-50: #ffe7ce;
58
+ --color-orange-100: #fed3af;
59
+ --color-orange-150: #fcc192;
60
+ --color-orange-200: #f9ae77;
61
+ --color-orange-300: #ec8b49;
62
+ --color-orange-400: #da702c;
63
+ --color-orange-500: #cb6120;
64
+ --color-orange-600: #bc5215;
65
+ --color-orange-700: #9d4310;
66
+ --color-orange-800: #71320d;
67
+ --color-orange-850: #59290d;
68
+ --color-orange-900: #40200d;
69
+ --color-orange-950: #27180e;
70
+ --color-yellow-50: #faeec6;
71
+ --color-yellow-100: #f6e2a0;
72
+ --color-yellow-150: #f1d67e;
73
+ --color-yellow-200: #eccb60;
74
+ --color-yellow-300: #dfb431;
75
+ --color-yellow-400: #d0a215;
76
+ --color-yellow-500: #be9207;
77
+ --color-yellow-600: #ad8301;
78
+ --color-yellow-700: #8e6b01;
79
+ --color-yellow-800: #664d01;
80
+ --color-yellow-850: #503d02;
81
+ --color-yellow-900: #3a2d04;
82
+ --color-yellow-950: #241e08;
83
+ --color-green-50: #edeecf;
84
+ --color-green-100: #dde2b2;
85
+ --color-green-150: #cdd597;
86
+ --color-green-200: #bec97e;
87
+ --color-green-300: #a0af54;
88
+ --color-green-400: #879a39;
89
+ --color-green-500: #768d21;
90
+ --color-green-600: #66800b;
91
+ --color-green-700: #536907;
92
+ --color-green-800: #3d4c07;
93
+ --color-green-850: #313d07;
94
+ --color-green-900: #252d09;
95
+ --color-green-950: #1a1e0c;
96
+ --color-cyan-50: #ddf1e4;
97
+ --color-cyan-100: #bfe8d9;
98
+ --color-cyan-150: #a2dece;
99
+ --color-cyan-200: #87d3c3;
100
+ --color-cyan-300: #5abdac;
101
+ --color-cyan-400: #3aa99f;
102
+ --color-cyan-500: #2f968d;
103
+ --color-cyan-600: #24837b;
104
+ --color-cyan-700: #1c6c66;
105
+ --color-cyan-800: #164f4a;
106
+ --color-cyan-850: #143f3c;
107
+ --color-cyan-900: #122f2c;
108
+ --color-cyan-950: #101f1d;
109
+ --color-blue-50: #e1eceb;
110
+ --color-blue-100: #c6dde8;
111
+ --color-blue-150: #abcfe2;
112
+ --color-blue-200: #92bfdb;
113
+ --color-blue-300: #66a0c8;
114
+ --color-blue-400: #4385be;
115
+ --color-blue-500: #3171b2;
116
+ --color-blue-600: #205ea6;
117
+ --color-blue-700: #1a4f8c;
118
+ --color-blue-800: #163b66;
119
+ --color-blue-850: #133051;
120
+ --color-blue-900: #12253b;
121
+ --color-blue-950: #101a24;
122
+ --color-purple-50: #f0eaec;
123
+ --color-purple-100: #e2d9e9;
124
+ --color-purple-150: #d3cae6;
125
+ --color-purple-200: #c4b9e0;
126
+ --color-purple-300: #a699d0;
127
+ --color-purple-400: #8b7ec8;
128
+ --color-purple-500: #735eb5;
129
+ --color-purple-600: #5e409d;
130
+ --color-purple-700: #4f3685;
131
+ --color-purple-800: #3c2a62;
132
+ --color-purple-850: #31234e;
133
+ --color-purple-900: #261c39;
134
+ --color-purple-950: #1a1623;
135
+ --color-magenta-50: #fee4e5;
136
+ --color-magenta-100: #fccfda;
137
+ --color-magenta-150: #f9b9cf;
138
+ --color-magenta-200: #f4a4c2;
139
+ --color-magenta-300: #e47da8;
140
+ --color-magenta-400: #ce5d97;
141
+ --color-magenta-500: #b74583;
142
+ --color-magenta-600: #a02f6f;
143
+ --color-magenta-700: #87285e;
144
+ --color-magenta-800: #641f46;
145
+ --color-magenta-850: #4f1b39;
146
+ --color-magenta-900: #39172b;
147
+ --color-magenta-950: #24131d;
148
+ --color-surface: var(--color-paper);
149
+ --color-surface-muted: var(--color-base-50);
150
+ --color-surface-strong: var(--color-base-100);
151
+ --color-text: var(--color-black);
152
+ --color-text-muted: var(--color-base-600);
153
+ --color-border: var(--color-base-150);
154
+ --color-border-strong: var(--color-base-300);
155
+ --color-primary: var(--color-blue-600);
156
+ --color-primary-hover: var(--color-blue-700);
157
+ --color-primary-muted: var(--color-blue-50);
158
+ --color-primary-content: var(--color-paper);
159
+ --color-danger: var(--color-red-600);
160
+ --color-danger-hover: var(--color-red-700);
161
+ --color-danger-muted: var(--color-red-50);
162
+ --color-danger-content: var(--color-paper);
163
+ --color-success: var(--color-green-600);
164
+ --color-success-hover: var(--color-green-700);
165
+ --color-success-muted: var(--color-green-50);
166
+ --color-success-content: var(--color-paper);
167
+ --color-warning: var(--color-yellow-400);
168
+ --color-warning-hover: var(--color-yellow-500);
169
+ --color-warning-muted: var(--color-yellow-50);
170
+ --color-warning-content: var(--color-black);
171
+ --color-info: var(--color-cyan-600);
172
+ --color-info-hover: var(--color-cyan-700);
173
+ --color-info-muted: var(--color-cyan-50);
174
+ --color-info-content: var(--color-paper);
175
+ }
176
+ }
177
+ @layer base {
178
+ *, ::after, ::before, ::backdrop, ::file-selector-button {
179
+ box-sizing: border-box;
180
+ margin: 0;
181
+ padding: 0;
182
+ border: 0 solid;
183
+ }
184
+ html, :host {
185
+ line-height: 1.5;
186
+ -webkit-text-size-adjust: 100%;
187
+ tab-size: 4;
188
+ font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");
189
+ font-feature-settings: var(--default-font-feature-settings, normal);
190
+ font-variation-settings: var(--default-font-variation-settings, normal);
191
+ -webkit-tap-highlight-color: transparent;
192
+ }
193
+ hr {
194
+ height: 0;
195
+ color: inherit;
196
+ border-top-width: 1px;
197
+ }
198
+ abbr:where([title]) {
199
+ -webkit-text-decoration: underline dotted;
200
+ text-decoration: underline dotted;
201
+ }
202
+ h1, h2, h3, h4, h5, h6 {
203
+ font-size: inherit;
204
+ font-weight: inherit;
205
+ }
206
+ a {
207
+ color: inherit;
208
+ -webkit-text-decoration: inherit;
209
+ text-decoration: inherit;
210
+ }
211
+ b, strong {
212
+ font-weight: bolder;
213
+ }
214
+ code, kbd, samp, pre {
215
+ font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);
216
+ font-feature-settings: var(--default-mono-font-feature-settings, normal);
217
+ font-variation-settings: var(--default-mono-font-variation-settings, normal);
218
+ font-size: 1em;
219
+ }
220
+ small {
221
+ font-size: 80%;
222
+ }
223
+ sub, sup {
224
+ font-size: 75%;
225
+ line-height: 0;
226
+ position: relative;
227
+ vertical-align: baseline;
228
+ }
229
+ sub {
230
+ bottom: -0.25em;
231
+ }
232
+ sup {
233
+ top: -0.5em;
234
+ }
235
+ table {
236
+ text-indent: 0;
237
+ border-color: inherit;
238
+ border-collapse: collapse;
239
+ }
240
+ :-moz-focusring {
241
+ outline: auto;
242
+ }
243
+ progress {
244
+ vertical-align: baseline;
245
+ }
246
+ summary {
247
+ display: list-item;
248
+ }
249
+ ol, ul, menu {
250
+ list-style: none;
251
+ }
252
+ img, svg, video, canvas, audio, iframe, embed, object {
253
+ display: block;
254
+ vertical-align: middle;
255
+ }
256
+ img, video {
257
+ max-width: 100%;
258
+ height: auto;
259
+ }
260
+ button, input, select, optgroup, textarea, ::file-selector-button {
261
+ font: inherit;
262
+ font-feature-settings: inherit;
263
+ font-variation-settings: inherit;
264
+ letter-spacing: inherit;
265
+ color: inherit;
266
+ border-radius: 0;
267
+ background-color: transparent;
268
+ opacity: 1;
269
+ }
270
+ :where(select:is([multiple], [size])) optgroup {
271
+ font-weight: bolder;
272
+ }
273
+ :where(select:is([multiple], [size])) optgroup option {
274
+ padding-inline-start: 20px;
275
+ }
276
+ ::file-selector-button {
277
+ margin-inline-end: 4px;
278
+ }
279
+ ::placeholder {
280
+ opacity: 1;
281
+ }
282
+ @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {
283
+ ::placeholder {
284
+ color: currentcolor;
285
+ @supports (color: color-mix(in lab, red, red)) {
286
+ color: color-mix(in oklab, currentcolor 50%, transparent);
287
+ }
288
+ }
289
+ }
290
+ textarea {
291
+ resize: vertical;
292
+ }
293
+ ::-webkit-search-decoration {
294
+ -webkit-appearance: none;
295
+ }
296
+ ::-webkit-date-and-time-value {
297
+ min-height: 1lh;
298
+ text-align: inherit;
299
+ }
300
+ ::-webkit-datetime-edit {
301
+ display: inline-flex;
302
+ }
303
+ ::-webkit-datetime-edit-fields-wrapper {
304
+ padding: 0;
305
+ }
306
+ ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field {
307
+ padding-block: 0;
308
+ }
309
+ ::-webkit-calendar-picker-indicator {
310
+ line-height: 1;
311
+ }
312
+ :-moz-ui-invalid {
313
+ box-shadow: none;
314
+ }
315
+ button, input:where([type="button"], [type="reset"], [type="submit"]), ::file-selector-button {
316
+ appearance: button;
317
+ }
318
+ ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {
319
+ height: auto;
320
+ }
321
+ [hidden]:where(:not([hidden="until-found"])) {
322
+ display: none !important;
323
+ }
324
+ }
325
+ @layer utilities;
326
+ @layer base {
327
+ html {
328
+ color: var(--color-text);
329
+ background-color: var(--color-surface);
330
+ -webkit-text-size-adjust: 100%;
331
+ }
332
+ body {
333
+ font-family: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
334
+ line-height: 1.5;
335
+ }
336
+ }
337
+ @layer components {
338
+ .btn {
339
+ display: inline-flex;
340
+ cursor: pointer;
341
+ align-items: center;
342
+ justify-content: center;
343
+ gap: calc(var(--spacing) * 2);
344
+ border-radius: var(--radius-lg);
345
+ border-style: var(--tw-border-style);
346
+ border-width: 1px;
347
+ border-color: transparent;
348
+ padding-inline: calc(var(--spacing) * 4);
349
+ padding-block: calc(var(--spacing) * 2);
350
+ font-size: var(--text-sm);
351
+ line-height: var(--tw-leading, var(--text-sm--line-height));
352
+ --tw-leading: 1;
353
+ line-height: 1;
354
+ --tw-font-weight: var(--font-weight-medium);
355
+ font-weight: var(--font-weight-medium);
356
+ transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;
357
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
358
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
359
+ --tw-duration: 150ms;
360
+ transition-duration: 150ms;
361
+ -webkit-user-select: none;
362
+ user-select: none;
363
+ &:focus-visible {
364
+ outline-style: var(--tw-outline-style);
365
+ outline-width: 2px;
366
+ }
367
+ &:focus-visible {
368
+ outline-offset: 2px;
369
+ }
370
+ &:focus-visible {
371
+ outline-color: var(--color-primary);
372
+ }
373
+ &:disabled {
374
+ pointer-events: none;
375
+ }
376
+ &:disabled {
377
+ cursor: not-allowed;
378
+ }
379
+ &:disabled {
380
+ opacity: 50%;
381
+ }
382
+ }
383
+ .btn-primary {
384
+ background-color: var(--color-primary);
385
+ color: var(--color-primary-content);
386
+ &:hover {
387
+ @media (hover: hover) {
388
+ background-color: var(--color-primary-hover);
389
+ }
390
+ }
391
+ }
392
+ .btn-secondary {
393
+ border-color: var(--color-border);
394
+ background-color: var(--color-surface-muted);
395
+ color: var(--color-text);
396
+ &:hover {
397
+ @media (hover: hover) {
398
+ background-color: var(--color-surface-strong);
399
+ }
400
+ }
401
+ }
402
+ .btn-ghost {
403
+ background-color: transparent;
404
+ color: var(--color-text);
405
+ &:hover {
406
+ @media (hover: hover) {
407
+ background-color: var(--color-surface-muted);
408
+ }
409
+ }
410
+ }
411
+ .btn-danger {
412
+ background-color: var(--color-danger);
413
+ color: var(--color-danger-content);
414
+ &:hover {
415
+ @media (hover: hover) {
416
+ opacity: 90%;
417
+ }
418
+ }
419
+ }
420
+ .btn-sm {
421
+ gap: calc(var(--spacing) * 1.5);
422
+ padding-inline: calc(var(--spacing) * 3);
423
+ padding-block: calc(var(--spacing) * 1.5);
424
+ font-size: var(--text-xs);
425
+ line-height: var(--tw-leading, var(--text-xs--line-height));
426
+ }
427
+ .btn-lg {
428
+ gap: calc(var(--spacing) * 2.5);
429
+ padding-inline: calc(var(--spacing) * 5);
430
+ padding-block: calc(var(--spacing) * 2.5);
431
+ font-size: var(--text-base);
432
+ line-height: var(--tw-leading, var(--text-base--line-height));
433
+ }
434
+ .btn-block {
435
+ width: 100%;
436
+ }
437
+ }
438
+ @layer components {
439
+ .input {
440
+ display: inline-flex;
441
+ width: 100%;
442
+ align-items: center;
443
+ border-radius: var(--radius-lg);
444
+ border-style: var(--tw-border-style);
445
+ border-width: 1px;
446
+ border-color: transparent;
447
+ background-color: var(--color-surface);
448
+ padding-inline: calc(var(--spacing) * 3);
449
+ padding-block: calc(var(--spacing) * 2);
450
+ font-size: var(--text-sm);
451
+ line-height: var(--tw-leading, var(--text-sm--line-height));
452
+ --tw-leading: 1;
453
+ line-height: 1;
454
+ color: var(--color-text);
455
+ transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;
456
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
457
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
458
+ --tw-duration: 150ms;
459
+ transition-duration: 150ms;
460
+ &::placeholder {
461
+ color: var(--color-text-muted);
462
+ }
463
+ &:focus-visible {
464
+ outline-style: var(--tw-outline-style);
465
+ outline-width: 2px;
466
+ }
467
+ &:focus-visible {
468
+ outline-offset: 2px;
469
+ }
470
+ &:focus-visible {
471
+ outline-color: var(--color-primary);
472
+ }
473
+ &:disabled {
474
+ cursor: not-allowed;
475
+ }
476
+ &:disabled {
477
+ opacity: 50%;
478
+ }
479
+ }
480
+ .input-bordered {
481
+ border-color: var(--color-border);
482
+ &:hover {
483
+ @media (hover: hover) {
484
+ border-color: var(--color-border-strong);
485
+ }
486
+ }
487
+ }
488
+ .input-ghost {
489
+ background-color: transparent;
490
+ &:hover {
491
+ @media (hover: hover) {
492
+ background-color: var(--color-surface-muted);
493
+ }
494
+ }
495
+ }
496
+ .input-danger {
497
+ border-color: var(--color-danger);
498
+ &:focus-visible {
499
+ outline-color: var(--color-danger);
500
+ }
501
+ }
502
+ .input-sm {
503
+ padding-inline: calc(var(--spacing) * 2.5);
504
+ padding-block: calc(var(--spacing) * 1.5);
505
+ font-size: var(--text-xs);
506
+ line-height: var(--tw-leading, var(--text-xs--line-height));
507
+ }
508
+ .input-lg {
509
+ padding-inline: calc(var(--spacing) * 4);
510
+ padding-block: calc(var(--spacing) * 2.5);
511
+ font-size: var(--text-base);
512
+ line-height: var(--tw-leading, var(--text-base--line-height));
513
+ }
514
+ }
515
+ @layer components {
516
+ .card {
517
+ display: flex;
518
+ flex-direction: column;
519
+ overflow: hidden;
520
+ border-radius: var(--radius-xl);
521
+ border-style: var(--tw-border-style);
522
+ border-width: 1px;
523
+ border-color: var(--color-border);
524
+ background-color: var(--color-surface);
525
+ color: var(--color-text);
526
+ --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05));
527
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
528
+ }
529
+ .card-body {
530
+ display: flex;
531
+ flex-direction: column;
532
+ gap: calc(var(--spacing) * 3);
533
+ padding: calc(var(--spacing) * 5);
534
+ }
535
+ .card-title {
536
+ font-size: var(--text-lg);
537
+ line-height: var(--tw-leading, var(--text-lg--line-height));
538
+ --tw-leading: var(--leading-tight);
539
+ line-height: var(--leading-tight);
540
+ --tw-font-weight: var(--font-weight-semibold);
541
+ font-weight: var(--font-weight-semibold);
542
+ }
543
+ .card-description {
544
+ font-size: var(--text-sm);
545
+ line-height: var(--tw-leading, var(--text-sm--line-height));
546
+ color: var(--color-text-muted);
547
+ }
548
+ .card-actions {
549
+ margin-top: auto;
550
+ display: flex;
551
+ flex-wrap: wrap;
552
+ align-items: center;
553
+ gap: calc(var(--spacing) * 2);
554
+ padding-top: calc(var(--spacing) * 2);
555
+ }
556
+ .card-compact .card-body {
557
+ gap: calc(var(--spacing) * 2);
558
+ padding: calc(var(--spacing) * 3);
559
+ }
560
+ .card-bordered {
561
+ border-color: var(--color-border-strong);
562
+ --tw-shadow: 0 0 #0000;
563
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
564
+ }
565
+ }
566
+ @layer components {
567
+ .field {
568
+ display: flex;
569
+ flex-direction: column;
570
+ gap: calc(var(--spacing) * 1.5);
571
+ }
572
+ .field-label {
573
+ font-size: var(--text-sm);
574
+ line-height: var(--tw-leading, var(--text-sm--line-height));
575
+ --tw-leading: 1;
576
+ line-height: 1;
577
+ --tw-font-weight: var(--font-weight-medium);
578
+ font-weight: var(--font-weight-medium);
579
+ color: var(--color-text);
580
+ }
581
+ .field-description {
582
+ font-size: var(--text-xs);
583
+ line-height: var(--tw-leading, var(--text-xs--line-height));
584
+ --tw-leading: var(--leading-relaxed);
585
+ line-height: var(--leading-relaxed);
586
+ color: var(--color-text-muted);
587
+ }
588
+ .field-error {
589
+ font-size: var(--text-xs);
590
+ line-height: var(--tw-leading, var(--text-xs--line-height));
591
+ --tw-leading: var(--leading-relaxed);
592
+ line-height: var(--leading-relaxed);
593
+ color: var(--color-danger);
594
+ }
595
+ .field[data-invalid] .input {
596
+ border-color: var(--color-danger);
597
+ }
598
+ }
599
+ @property --tw-border-style {
600
+ syntax: "*";
601
+ inherits: false;
602
+ initial-value: solid;
603
+ }
604
+ @property --tw-leading {
605
+ syntax: "*";
606
+ inherits: false;
607
+ }
608
+ @property --tw-font-weight {
609
+ syntax: "*";
610
+ inherits: false;
611
+ }
612
+ @property --tw-duration {
613
+ syntax: "*";
614
+ inherits: false;
615
+ }
616
+ @property --tw-outline-style {
617
+ syntax: "*";
618
+ inherits: false;
619
+ initial-value: solid;
620
+ }
621
+ @property --tw-shadow {
622
+ syntax: "*";
623
+ inherits: false;
624
+ initial-value: 0 0 #0000;
625
+ }
626
+ @property --tw-shadow-color {
627
+ syntax: "*";
628
+ inherits: false;
629
+ }
630
+ @property --tw-shadow-alpha {
631
+ syntax: "<percentage>";
632
+ inherits: false;
633
+ initial-value: 100%;
634
+ }
635
+ @property --tw-inset-shadow {
636
+ syntax: "*";
637
+ inherits: false;
638
+ initial-value: 0 0 #0000;
639
+ }
640
+ @property --tw-inset-shadow-color {
641
+ syntax: "*";
642
+ inherits: false;
643
+ }
644
+ @property --tw-inset-shadow-alpha {
645
+ syntax: "<percentage>";
646
+ inherits: false;
647
+ initial-value: 100%;
648
+ }
649
+ @property --tw-ring-color {
650
+ syntax: "*";
651
+ inherits: false;
652
+ }
653
+ @property --tw-ring-shadow {
654
+ syntax: "*";
655
+ inherits: false;
656
+ initial-value: 0 0 #0000;
657
+ }
658
+ @property --tw-inset-ring-color {
659
+ syntax: "*";
660
+ inherits: false;
661
+ }
662
+ @property --tw-inset-ring-shadow {
663
+ syntax: "*";
664
+ inherits: false;
665
+ initial-value: 0 0 #0000;
666
+ }
667
+ @property --tw-ring-inset {
668
+ syntax: "*";
669
+ inherits: false;
670
+ }
671
+ @property --tw-ring-offset-width {
672
+ syntax: "<length>";
673
+ inherits: false;
674
+ initial-value: 0px;
675
+ }
676
+ @property --tw-ring-offset-color {
677
+ syntax: "*";
678
+ inherits: false;
679
+ initial-value: #fff;
680
+ }
681
+ @property --tw-ring-offset-shadow {
682
+ syntax: "*";
683
+ inherits: false;
684
+ initial-value: 0 0 #0000;
685
+ }
686
+ @layer properties {
687
+ @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {
688
+ *, ::before, ::after, ::backdrop {
689
+ --tw-border-style: solid;
690
+ --tw-leading: initial;
691
+ --tw-font-weight: initial;
692
+ --tw-duration: initial;
693
+ --tw-outline-style: solid;
694
+ --tw-shadow: 0 0 #0000;
695
+ --tw-shadow-color: initial;
696
+ --tw-shadow-alpha: 100%;
697
+ --tw-inset-shadow: 0 0 #0000;
698
+ --tw-inset-shadow-color: initial;
699
+ --tw-inset-shadow-alpha: 100%;
700
+ --tw-ring-color: initial;
701
+ --tw-ring-shadow: 0 0 #0000;
702
+ --tw-inset-ring-color: initial;
703
+ --tw-inset-ring-shadow: 0 0 #0000;
704
+ --tw-ring-inset: initial;
705
+ --tw-ring-offset-width: 0px;
706
+ --tw-ring-offset-color: #fff;
707
+ --tw-ring-offset-shadow: 0 0 #0000;
708
+ }
709
+ }
710
+ }
@@ -0,0 +1,2 @@
1
+ /*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */
2
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-duration:initial;--tw-outline-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--font-weight-medium:500;--font-weight-semibold:600;--leading-tight:1.25;--leading-relaxed:1.625;--radius-lg:.5rem;--radius-xl:.75rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-paper:#fffcf0;--color-black:#100f0f;--color-base-50:#f2f0e5;--color-base-100:#e6e4d9;--color-base-150:#dad8ce;--color-base-200:#cecdc3;--color-base-300:#b7b5ac;--color-base-400:#9f9d96;--color-base-500:#878580;--color-base-600:#6f6e69;--color-base-700:#575653;--color-base-800:#403e3c;--color-base-850:#343331;--color-base-900:#282726;--color-base-950:#1c1b1a;--color-red-50:#ffe1d5;--color-red-100:#ffcabb;--color-red-150:#fdb2a2;--color-red-200:#f89a8a;--color-red-300:#e8705f;--color-red-400:#d14d41;--color-red-500:#c03e35;--color-red-600:#af3029;--color-red-700:#942822;--color-red-800:#6c201c;--color-red-850:#551b18;--color-red-900:#3e1715;--color-red-950:#261312;--color-orange-50:#ffe7ce;--color-orange-100:#fed3af;--color-orange-150:#fcc192;--color-orange-200:#f9ae77;--color-orange-300:#ec8b49;--color-orange-400:#da702c;--color-orange-500:#cb6120;--color-orange-600:#bc5215;--color-orange-700:#9d4310;--color-orange-800:#71320d;--color-orange-850:#59290d;--color-orange-900:#40200d;--color-orange-950:#27180e;--color-yellow-50:#faeec6;--color-yellow-100:#f6e2a0;--color-yellow-150:#f1d67e;--color-yellow-200:#eccb60;--color-yellow-300:#dfb431;--color-yellow-400:#d0a215;--color-yellow-500:#be9207;--color-yellow-600:#ad8301;--color-yellow-700:#8e6b01;--color-yellow-800:#664d01;--color-yellow-850:#503d02;--color-yellow-900:#3a2d04;--color-yellow-950:#241e08;--color-green-50:#edeecf;--color-green-100:#dde2b2;--color-green-150:#cdd597;--color-green-200:#bec97e;--color-green-300:#a0af54;--color-green-400:#879a39;--color-green-500:#768d21;--color-green-600:#66800b;--color-green-700:#536907;--color-green-800:#3d4c07;--color-green-850:#313d07;--color-green-900:#252d09;--color-green-950:#1a1e0c;--color-cyan-50:#ddf1e4;--color-cyan-100:#bfe8d9;--color-cyan-150:#a2dece;--color-cyan-200:#87d3c3;--color-cyan-300:#5abdac;--color-cyan-400:#3aa99f;--color-cyan-500:#2f968d;--color-cyan-600:#24837b;--color-cyan-700:#1c6c66;--color-cyan-800:#164f4a;--color-cyan-850:#143f3c;--color-cyan-900:#122f2c;--color-cyan-950:#101f1d;--color-blue-50:#e1eceb;--color-blue-100:#c6dde8;--color-blue-150:#abcfe2;--color-blue-200:#92bfdb;--color-blue-300:#66a0c8;--color-blue-400:#4385be;--color-blue-500:#3171b2;--color-blue-600:#205ea6;--color-blue-700:#1a4f8c;--color-blue-800:#163b66;--color-blue-850:#133051;--color-blue-900:#12253b;--color-blue-950:#101a24;--color-purple-50:#f0eaec;--color-purple-100:#e2d9e9;--color-purple-150:#d3cae6;--color-purple-200:#c4b9e0;--color-purple-300:#a699d0;--color-purple-400:#8b7ec8;--color-purple-500:#735eb5;--color-purple-600:#5e409d;--color-purple-700:#4f3685;--color-purple-800:#3c2a62;--color-purple-850:#31234e;--color-purple-900:#261c39;--color-purple-950:#1a1623;--color-magenta-50:#fee4e5;--color-magenta-100:#fccfda;--color-magenta-150:#f9b9cf;--color-magenta-200:#f4a4c2;--color-magenta-300:#e47da8;--color-magenta-400:#ce5d97;--color-magenta-500:#b74583;--color-magenta-600:#a02f6f;--color-magenta-700:#87285e;--color-magenta-800:#641f46;--color-magenta-850:#4f1b39;--color-magenta-900:#39172b;--color-magenta-950:#24131d;--color-surface:var(--color-paper);--color-surface-muted:var(--color-base-50);--color-surface-strong:var(--color-base-100);--color-text:var(--color-black);--color-text-muted:var(--color-base-600);--color-border:var(--color-base-150);--color-border-strong:var(--color-base-300);--color-primary:var(--color-blue-600);--color-primary-hover:var(--color-blue-700);--color-primary-muted:var(--color-blue-50);--color-primary-content:var(--color-paper);--color-danger:var(--color-red-600);--color-danger-hover:var(--color-red-700);--color-danger-muted:var(--color-red-50);--color-danger-content:var(--color-paper);--color-success:var(--color-green-600);--color-success-hover:var(--color-green-700);--color-success-muted:var(--color-green-50);--color-success-content:var(--color-paper);--color-warning:var(--color-yellow-400);--color-warning-hover:var(--color-yellow-500);--color-warning-muted:var(--color-yellow-50);--color-warning-content:var(--color-black);--color-info:var(--color-cyan-600);--color-info-hover:var(--color-cyan-700);--color-info-muted:var(--color-cyan-50);--color-info-content:var(--color-paper)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}html{color:var(--color-text);background-color:var(--color-surface);-webkit-text-size-adjust:100%}body{font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;line-height:1.5}}@layer components{.btn{cursor:pointer;justify-content:center;align-items:center;gap:calc(var(--spacing) * 2);border-radius:var(--radius-lg);border-style:var(--tw-border-style);padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:1;--tw-font-weight:var(--font-weight-medium);line-height:1;font-weight:var(--font-weight-medium);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.15s;-webkit-user-select:none;user-select:none;border-width:1px;border-color:#0000;transition-duration:.15s;display:inline-flex}.btn:focus-visible{outline-style:var(--tw-outline-style);outline-offset:2px;outline-width:2px;outline-color:var(--color-primary)}.btn:disabled{pointer-events:none;cursor:not-allowed;opacity:.5}.btn-primary{background-color:var(--color-primary);color:var(--color-primary-content)}@media (hover:hover){.btn-primary:hover{background-color:var(--color-primary-hover)}}.btn-secondary{border-color:var(--color-border);background-color:var(--color-surface-muted);color:var(--color-text)}@media (hover:hover){.btn-secondary:hover{background-color:var(--color-surface-strong)}}.btn-ghost{color:var(--color-text);background-color:#0000}@media (hover:hover){.btn-ghost:hover{background-color:var(--color-surface-muted)}}.btn-danger{background-color:var(--color-danger);color:var(--color-danger-content)}@media (hover:hover){.btn-danger:hover{opacity:.9}}.btn-sm{gap:calc(var(--spacing) * 1.5);padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 1.5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.btn-lg{gap:calc(var(--spacing) * 2.5);padding-inline:calc(var(--spacing) * 5);padding-block:calc(var(--spacing) * 2.5);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.btn-block{width:100%}.input{border-radius:var(--radius-lg);border-style:var(--tw-border-style);background-color:var(--color-surface);width:100%;padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:1;color:var(--color-text);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.15s;border-width:1px;border-color:#0000;align-items:center;line-height:1;transition-duration:.15s;display:inline-flex}.input::placeholder{color:var(--color-text-muted)}.input:focus-visible{outline-style:var(--tw-outline-style);outline-offset:2px;outline-width:2px;outline-color:var(--color-primary)}.input:disabled{cursor:not-allowed;opacity:.5}.input-bordered{border-color:var(--color-border)}@media (hover:hover){.input-bordered:hover{border-color:var(--color-border-strong)}}.input-ghost{background-color:#0000}@media (hover:hover){.input-ghost:hover{background-color:var(--color-surface-muted)}}.input-danger{border-color:var(--color-danger)}.input-danger:focus-visible{outline-color:var(--color-danger)}.input-sm{padding-inline:calc(var(--spacing) * 2.5);padding-block:calc(var(--spacing) * 1.5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.input-lg{padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 2.5);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.card{border-radius:var(--radius-xl);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-border);background-color:var(--color-surface);color:var(--color-text);--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);flex-direction:column;display:flex;overflow:hidden}.card-body{gap:calc(var(--spacing) * 3);padding:calc(var(--spacing) * 5);flex-direction:column;display:flex}.card-title{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height));--tw-leading:var(--leading-tight);line-height:var(--leading-tight);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.card-description{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--color-text-muted)}.card-actions{align-items:center;gap:calc(var(--spacing) * 2);padding-top:calc(var(--spacing) * 2);flex-wrap:wrap;margin-top:auto;display:flex}.card-compact .card-body{gap:calc(var(--spacing) * 2);padding:calc(var(--spacing) * 3)}.card-bordered{border-color:var(--color-border-strong);--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.field{gap:calc(var(--spacing) * 1.5);flex-direction:column;display:flex}.field-label{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:1;--tw-font-weight:var(--font-weight-medium);line-height:1;font-weight:var(--font-weight-medium);color:var(--color-text)}.field-description{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed);color:var(--color-text-muted)}.field-error{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed);color:var(--color-danger)}.field[data-invalid] .input{border-color:var(--color-danger)}}@layer utilities;@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}
package/package.json ADDED
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "@aortl/admin-css",
3
+ "version": "0.0.1",
4
+ "description": "Pre-built CSS design system. Drop in via <link> and use semantic class names.",
5
+ "keywords": [
6
+ "components",
7
+ "css",
8
+ "design-system",
9
+ "tailwind"
10
+ ],
11
+ "style": "./dist/admin.css",
12
+ "files": [
13
+ "dist",
14
+ "src",
15
+ "README.md"
16
+ ],
17
+ "type": "module",
18
+ "sideEffects": [
19
+ "*.css"
20
+ ],
21
+ "main": "./dist/admin.css",
22
+ "exports": {
23
+ ".": "./dist/admin.css",
24
+ "./admin.css": "./dist/admin.css",
25
+ "./admin.min.css": "./dist/admin.min.css",
26
+ "./src/*": "./src/*"
27
+ },
28
+ "publishConfig": {
29
+ "access": "public"
30
+ },
31
+ "devDependencies": {
32
+ "@tailwindcss/cli": "4.3.0",
33
+ "tailwindcss": "4.3.0"
34
+ },
35
+ "scripts": {
36
+ "build": "pnpm build:dev && pnpm build:min",
37
+ "build:dev": "tailwindcss -i ./src/index.css -o ./dist/admin.css",
38
+ "build:min": "tailwindcss -i ./src/index.css -o ./dist/admin.min.css --minify",
39
+ "dev": "tailwindcss -i ./src/index.css -o ./dist/admin.css --watch"
40
+ }
41
+ }
package/src/base.css ADDED
@@ -0,0 +1,18 @@
1
+ @layer base {
2
+ html {
3
+ color: var(--color-text);
4
+ background-color: var(--color-surface);
5
+ -webkit-text-size-adjust: 100%;
6
+ }
7
+
8
+ body {
9
+ font-family:
10
+ ui-sans-serif,
11
+ system-ui,
12
+ -apple-system,
13
+ "Segoe UI",
14
+ Roboto,
15
+ sans-serif;
16
+ line-height: 1.5;
17
+ }
18
+ }
@@ -0,0 +1,42 @@
1
+ @layer components {
2
+ .btn {
3
+ @apply inline-flex items-center justify-center gap-2 px-4 py-2
4
+ rounded-lg font-medium text-sm leading-none
5
+ border border-transparent
6
+ transition-colors duration-150
7
+ cursor-pointer select-none
8
+ focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary
9
+ disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none;
10
+ }
11
+
12
+ /* Variants */
13
+ .btn-primary {
14
+ @apply bg-primary text-primary-content hover:bg-primary-hover;
15
+ }
16
+
17
+ .btn-secondary {
18
+ @apply bg-surface-muted text-text border-border hover:bg-surface-strong;
19
+ }
20
+
21
+ .btn-ghost {
22
+ @apply bg-transparent text-text hover:bg-surface-muted;
23
+ }
24
+
25
+ .btn-danger {
26
+ @apply bg-danger text-danger-content hover:opacity-90;
27
+ }
28
+
29
+ /* Sizes (md is the default; modifiers override) */
30
+ .btn-sm {
31
+ @apply text-xs px-3 py-1.5 gap-1.5;
32
+ }
33
+
34
+ .btn-lg {
35
+ @apply text-base px-5 py-2.5 gap-2.5;
36
+ }
37
+
38
+ /* Modifiers */
39
+ .btn-block {
40
+ @apply w-full;
41
+ }
42
+ }
@@ -0,0 +1,35 @@
1
+ @layer components {
2
+ .card {
3
+ @apply flex flex-col
4
+ bg-surface text-text
5
+ border border-border
6
+ rounded-xl
7
+ shadow-xs
8
+ overflow-hidden;
9
+ }
10
+
11
+ .card-body {
12
+ @apply flex flex-col gap-3 p-5;
13
+ }
14
+
15
+ .card-title {
16
+ @apply text-lg font-semibold leading-tight;
17
+ }
18
+
19
+ .card-description {
20
+ @apply text-sm text-text-muted;
21
+ }
22
+
23
+ .card-actions {
24
+ @apply flex flex-wrap items-center gap-2 mt-auto pt-2;
25
+ }
26
+
27
+ /* Modifiers */
28
+ .card-compact .card-body {
29
+ @apply p-3 gap-2;
30
+ }
31
+
32
+ .card-bordered {
33
+ @apply shadow-none border-border-strong;
34
+ }
35
+ }
@@ -0,0 +1,23 @@
1
+ @layer components {
2
+ .field {
3
+ @apply flex flex-col gap-1.5;
4
+ }
5
+
6
+ .field-label {
7
+ @apply text-sm font-medium text-text leading-none;
8
+ }
9
+
10
+ .field-description {
11
+ @apply text-xs text-text-muted leading-relaxed;
12
+ }
13
+
14
+ .field-error {
15
+ @apply text-xs text-danger leading-relaxed;
16
+ }
17
+
18
+ /* When the field is in an invalid state, tint the contained input.
19
+ Base UI applies data-invalid on the Field root once validation fails. */
20
+ .field[data-invalid] .input {
21
+ @apply border-danger;
22
+ }
23
+ }
@@ -0,0 +1,4 @@
1
+ @import "./button.css";
2
+ @import "./input.css";
3
+ @import "./card.css";
4
+ @import "./field.css";
@@ -0,0 +1,33 @@
1
+ @layer components {
2
+ .input {
3
+ @apply inline-flex items-center w-full px-3 py-2
4
+ rounded-lg text-sm leading-none
5
+ bg-surface text-text
6
+ border border-transparent
7
+ transition-colors duration-150
8
+ placeholder:text-text-muted
9
+ focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary
10
+ disabled:opacity-50 disabled:cursor-not-allowed;
11
+ }
12
+
13
+ .input-bordered {
14
+ @apply border-border hover:border-border-strong;
15
+ }
16
+
17
+ .input-ghost {
18
+ @apply bg-transparent hover:bg-surface-muted;
19
+ }
20
+
21
+ .input-danger {
22
+ @apply border-danger focus-visible:outline-danger;
23
+ }
24
+
25
+ /* Sizes */
26
+ .input-sm {
27
+ @apply text-xs px-2.5 py-1.5;
28
+ }
29
+
30
+ .input-lg {
31
+ @apply text-base px-4 py-2.5;
32
+ }
33
+ }
package/src/index.css ADDED
@@ -0,0 +1,5 @@
1
+ @import "tailwindcss";
2
+
3
+ @import "./theme.css";
4
+ @import "./base.css";
5
+ @import "./components/index.css";
package/src/theme.css ADDED
@@ -0,0 +1,208 @@
1
+ /**
2
+ * Design tokens — based on Flexoki (https://stephango.com/flexoki).
3
+ *
4
+ * Two layers, both registered with @theme so Tailwind generates utilities
5
+ * (bg-blue-600, bg-primary, ...) and emits them as CSS variables you can
6
+ * reference or override at runtime.
7
+ *
8
+ * 1. Palette — the Flexoki ramps (paper, black, base, red, orange,
9
+ * yellow, green, cyan, blue, purple, magenta). Replaces Tailwind's
10
+ * default colors entirely.
11
+ *
12
+ * 2. Semantic — purpose-named aliases (primary, surface, danger, ...)
13
+ * pointing at palette tones. Components use these, never the palette
14
+ * directly, so reskinning means remapping the alias:
15
+ *
16
+ * :root { --color-primary: var(--color-green-600); }
17
+ *
18
+ * or replacing the palette tone underneath:
19
+ *
20
+ * :root { --color-blue-600: oklch(0.55 0.18 250); }
21
+ */
22
+
23
+ @theme static {
24
+ /* Wipe Tailwind's default palette — Flexoki is the single source of truth. */
25
+ --color-*: initial;
26
+
27
+ /* Base */
28
+ --color-paper: #fffcf0;
29
+ --color-black: #100f0f;
30
+ --color-base-50: #f2f0e5;
31
+ --color-base-100: #e6e4d9;
32
+ --color-base-150: #dad8ce;
33
+ --color-base-200: #cecdc3;
34
+ --color-base-300: #b7b5ac;
35
+ --color-base-400: #9f9d96;
36
+ --color-base-500: #878580;
37
+ --color-base-600: #6f6e69;
38
+ --color-base-700: #575653;
39
+ --color-base-800: #403e3c;
40
+ --color-base-850: #343331;
41
+ --color-base-900: #282726;
42
+ --color-base-950: #1c1b1a;
43
+
44
+ /* Red */
45
+ --color-red-50: #ffe1d5;
46
+ --color-red-100: #ffcabb;
47
+ --color-red-150: #fdb2a2;
48
+ --color-red-200: #f89a8a;
49
+ --color-red-300: #e8705f;
50
+ --color-red-400: #d14d41;
51
+ --color-red-500: #c03e35;
52
+ --color-red-600: #af3029;
53
+ --color-red-700: #942822;
54
+ --color-red-800: #6c201c;
55
+ --color-red-850: #551b18;
56
+ --color-red-900: #3e1715;
57
+ --color-red-950: #261312;
58
+
59
+ /* Orange */
60
+ --color-orange-50: #ffe7ce;
61
+ --color-orange-100: #fed3af;
62
+ --color-orange-150: #fcc192;
63
+ --color-orange-200: #f9ae77;
64
+ --color-orange-300: #ec8b49;
65
+ --color-orange-400: #da702c;
66
+ --color-orange-500: #cb6120;
67
+ --color-orange-600: #bc5215;
68
+ --color-orange-700: #9d4310;
69
+ --color-orange-800: #71320d;
70
+ --color-orange-850: #59290d;
71
+ --color-orange-900: #40200d;
72
+ --color-orange-950: #27180e;
73
+
74
+ /* Yellow */
75
+ --color-yellow-50: #faeec6;
76
+ --color-yellow-100: #f6e2a0;
77
+ --color-yellow-150: #f1d67e;
78
+ --color-yellow-200: #eccb60;
79
+ --color-yellow-300: #dfb431;
80
+ --color-yellow-400: #d0a215;
81
+ --color-yellow-500: #be9207;
82
+ --color-yellow-600: #ad8301;
83
+ --color-yellow-700: #8e6b01;
84
+ --color-yellow-800: #664d01;
85
+ --color-yellow-850: #503d02;
86
+ --color-yellow-900: #3a2d04;
87
+ --color-yellow-950: #241e08;
88
+
89
+ /* Green */
90
+ --color-green-50: #edeecf;
91
+ --color-green-100: #dde2b2;
92
+ --color-green-150: #cdd597;
93
+ --color-green-200: #bec97e;
94
+ --color-green-300: #a0af54;
95
+ --color-green-400: #879a39;
96
+ --color-green-500: #768d21;
97
+ --color-green-600: #66800b;
98
+ --color-green-700: #536907;
99
+ --color-green-800: #3d4c07;
100
+ --color-green-850: #313d07;
101
+ --color-green-900: #252d09;
102
+ --color-green-950: #1a1e0c;
103
+
104
+ /* Cyan */
105
+ --color-cyan-50: #ddf1e4;
106
+ --color-cyan-100: #bfe8d9;
107
+ --color-cyan-150: #a2dece;
108
+ --color-cyan-200: #87d3c3;
109
+ --color-cyan-300: #5abdac;
110
+ --color-cyan-400: #3aa99f;
111
+ --color-cyan-500: #2f968d;
112
+ --color-cyan-600: #24837b;
113
+ --color-cyan-700: #1c6c66;
114
+ --color-cyan-800: #164f4a;
115
+ --color-cyan-850: #143f3c;
116
+ --color-cyan-900: #122f2c;
117
+ --color-cyan-950: #101f1d;
118
+
119
+ /* Blue */
120
+ --color-blue-50: #e1eceb;
121
+ --color-blue-100: #c6dde8;
122
+ --color-blue-150: #abcfe2;
123
+ --color-blue-200: #92bfdb;
124
+ --color-blue-300: #66a0c8;
125
+ --color-blue-400: #4385be;
126
+ --color-blue-500: #3171b2;
127
+ --color-blue-600: #205ea6;
128
+ --color-blue-700: #1a4f8c;
129
+ --color-blue-800: #163b66;
130
+ --color-blue-850: #133051;
131
+ --color-blue-900: #12253b;
132
+ --color-blue-950: #101a24;
133
+
134
+ /* Purple */
135
+ --color-purple-50: #f0eaec;
136
+ --color-purple-100: #e2d9e9;
137
+ --color-purple-150: #d3cae6;
138
+ --color-purple-200: #c4b9e0;
139
+ --color-purple-300: #a699d0;
140
+ --color-purple-400: #8b7ec8;
141
+ --color-purple-500: #735eb5;
142
+ --color-purple-600: #5e409d;
143
+ --color-purple-700: #4f3685;
144
+ --color-purple-800: #3c2a62;
145
+ --color-purple-850: #31234e;
146
+ --color-purple-900: #261c39;
147
+ --color-purple-950: #1a1623;
148
+
149
+ /* Magenta */
150
+ --color-magenta-50: #fee4e5;
151
+ --color-magenta-100: #fccfda;
152
+ --color-magenta-150: #f9b9cf;
153
+ --color-magenta-200: #f4a4c2;
154
+ --color-magenta-300: #e47da8;
155
+ --color-magenta-400: #ce5d97;
156
+ --color-magenta-500: #b74583;
157
+ --color-magenta-600: #a02f6f;
158
+ --color-magenta-700: #87285e;
159
+ --color-magenta-800: #641f46;
160
+ --color-magenta-850: #4f1b39;
161
+ --color-magenta-900: #39172b;
162
+ --color-magenta-950: #24131d;
163
+ }
164
+
165
+ @theme static {
166
+ /* Surfaces */
167
+ --color-surface: var(--color-paper);
168
+ --color-surface-muted: var(--color-base-50);
169
+ --color-surface-strong: var(--color-base-100);
170
+
171
+ /* Text */
172
+ --color-text: var(--color-black);
173
+ --color-text-muted: var(--color-base-600);
174
+
175
+ /* Borders */
176
+ --color-border: var(--color-base-150);
177
+ --color-border-strong: var(--color-base-300);
178
+
179
+ /* Primary — Flexoki blue */
180
+ --color-primary: var(--color-blue-600);
181
+ --color-primary-hover: var(--color-blue-700);
182
+ --color-primary-muted: var(--color-blue-50);
183
+ --color-primary-content: var(--color-paper);
184
+
185
+ /* Danger — red */
186
+ --color-danger: var(--color-red-600);
187
+ --color-danger-hover: var(--color-red-700);
188
+ --color-danger-muted: var(--color-red-50);
189
+ --color-danger-content: var(--color-paper);
190
+
191
+ /* Success — green */
192
+ --color-success: var(--color-green-600);
193
+ --color-success-hover: var(--color-green-700);
194
+ --color-success-muted: var(--color-green-50);
195
+ --color-success-content: var(--color-paper);
196
+
197
+ /* Warning — yellow (dark text for legibility on the bright base) */
198
+ --color-warning: var(--color-yellow-400);
199
+ --color-warning-hover: var(--color-yellow-500);
200
+ --color-warning-muted: var(--color-yellow-50);
201
+ --color-warning-content: var(--color-black);
202
+
203
+ /* Info — cyan */
204
+ --color-info: var(--color-cyan-600);
205
+ --color-info-hover: var(--color-cyan-700);
206
+ --color-info-muted: var(--color-cyan-50);
207
+ --color-info-content: var(--color-paper);
208
+ }