@alivecss/aliveui 1.0.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/vite.mjs ADDED
@@ -0,0 +1,3855 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __esm = (fn, res) => function __init() {
6
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
7
+ };
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
21
+
22
+ // src/theme/colors.ts
23
+ var defaultColors;
24
+ var init_colors = __esm({
25
+ "src/theme/colors.ts"() {
26
+ "use strict";
27
+ defaultColors = {
28
+ inherit: "inherit",
29
+ current: "currentColor",
30
+ transparent: "transparent",
31
+ black: "#000000",
32
+ white: "#ffffff",
33
+ slate: {
34
+ 50: "#f8fafc",
35
+ 100: "#f1f5f9",
36
+ 200: "#e2e8f0",
37
+ 300: "#cbd5e1",
38
+ 400: "#94a3b8",
39
+ 500: "#64748b",
40
+ 600: "#475569",
41
+ 700: "#334155",
42
+ 800: "#1e293b",
43
+ 900: "#0f172a",
44
+ 950: "#020617"
45
+ },
46
+ gray: {
47
+ 50: "#f9fafb",
48
+ 100: "#f3f4f6",
49
+ 200: "#e5e7eb",
50
+ 300: "#d1d5db",
51
+ 400: "#9ca3af",
52
+ 500: "#6b7280",
53
+ 600: "#4b5563",
54
+ 700: "#374151",
55
+ 800: "#1f2937",
56
+ 900: "#111827",
57
+ 950: "#030712"
58
+ },
59
+ zinc: {
60
+ 50: "#fafafa",
61
+ 100: "#f4f4f5",
62
+ 200: "#e4e4e7",
63
+ 300: "#d4d4d8",
64
+ 400: "#a1a1aa",
65
+ 500: "#71717a",
66
+ 600: "#52525b",
67
+ 700: "#3f3f46",
68
+ 800: "#27272a",
69
+ 900: "#18181b",
70
+ 950: "#09090b"
71
+ },
72
+ neutral: {
73
+ 50: "#fafafa",
74
+ 100: "#f5f5f5",
75
+ 200: "#e5e5e5",
76
+ 300: "#d4d4d4",
77
+ 400: "#a3a3a3",
78
+ 500: "#737373",
79
+ 600: "#525252",
80
+ 700: "#404040",
81
+ 800: "#262626",
82
+ 900: "#171717",
83
+ 950: "#0a0a0a"
84
+ },
85
+ stone: {
86
+ 50: "#fafaf9",
87
+ 100: "#f5f5f4",
88
+ 200: "#e7e5e4",
89
+ 300: "#d6d3d1",
90
+ 400: "#a8a29e",
91
+ 500: "#78716c",
92
+ 600: "#57534e",
93
+ 700: "#44403c",
94
+ 800: "#292524",
95
+ 900: "#1c1917",
96
+ 950: "#0c0a09"
97
+ },
98
+ red: {
99
+ 50: "#fef2f2",
100
+ 100: "#fee2e2",
101
+ 200: "#fecaca",
102
+ 300: "#fca5a5",
103
+ 400: "#f87171",
104
+ 500: "#ef4444",
105
+ 600: "#dc2626",
106
+ 700: "#b91c1c",
107
+ 800: "#991b1b",
108
+ 900: "#7f1d1d",
109
+ 950: "#450a0a"
110
+ },
111
+ orange: {
112
+ 50: "#fff7ed",
113
+ 100: "#ffedd5",
114
+ 200: "#fed7aa",
115
+ 300: "#fdba74",
116
+ 400: "#fb923c",
117
+ 500: "#f97316",
118
+ 600: "#ea580c",
119
+ 700: "#c2410c",
120
+ 800: "#9a3412",
121
+ 900: "#7c2d12",
122
+ 950: "#431407"
123
+ },
124
+ amber: {
125
+ 50: "#fffbeb",
126
+ 100: "#fef3c7",
127
+ 200: "#fde68a",
128
+ 300: "#fcd34d",
129
+ 400: "#fbbf24",
130
+ 500: "#f59e0b",
131
+ 600: "#d97706",
132
+ 700: "#b45309",
133
+ 800: "#92400e",
134
+ 900: "#78350f",
135
+ 950: "#451a03"
136
+ },
137
+ yellow: {
138
+ 50: "#fefce8",
139
+ 100: "#fef9c3",
140
+ 200: "#fef08a",
141
+ 300: "#fde047",
142
+ 400: "#facc15",
143
+ 500: "#eab308",
144
+ 600: "#ca8a04",
145
+ 700: "#a16207",
146
+ 800: "#854d0e",
147
+ 900: "#713f12",
148
+ 950: "#422006"
149
+ },
150
+ lime: {
151
+ 50: "#f7fee7",
152
+ 100: "#ecfccb",
153
+ 200: "#d9f99d",
154
+ 300: "#bef264",
155
+ 400: "#a3e635",
156
+ 500: "#84cc16",
157
+ 600: "#65a30d",
158
+ 700: "#4d7c0f",
159
+ 800: "#3f6212",
160
+ 900: "#365314",
161
+ 950: "#1a2e05"
162
+ },
163
+ green: {
164
+ 50: "#f0fdf4",
165
+ 100: "#dcfce7",
166
+ 200: "#bbf7d0",
167
+ 300: "#86efac",
168
+ 400: "#4ade80",
169
+ 500: "#22c55e",
170
+ 600: "#16a34a",
171
+ 700: "#15803d",
172
+ 800: "#166534",
173
+ 900: "#14532d",
174
+ 950: "#052e16"
175
+ },
176
+ emerald: {
177
+ 50: "#ecfdf5",
178
+ 100: "#d1fae5",
179
+ 200: "#a7f3d0",
180
+ 300: "#6ee7b7",
181
+ 400: "#34d399",
182
+ 500: "#10b981",
183
+ 600: "#059669",
184
+ 700: "#047857",
185
+ 800: "#065f46",
186
+ 900: "#064e3b",
187
+ 950: "#022c22"
188
+ },
189
+ teal: {
190
+ 50: "#f0fdfa",
191
+ 100: "#ccfbf1",
192
+ 200: "#99f6e4",
193
+ 300: "#5eead4",
194
+ 400: "#2dd4bf",
195
+ 500: "#14b8a6",
196
+ 600: "#0d9488",
197
+ 700: "#0f766e",
198
+ 800: "#115e59",
199
+ 900: "#134e4a",
200
+ 950: "#042f2e"
201
+ },
202
+ cyan: {
203
+ 50: "#ecfeff",
204
+ 100: "#cffafe",
205
+ 200: "#a5f3fc",
206
+ 300: "#67e8f9",
207
+ 400: "#22d3ee",
208
+ 500: "#06b6d4",
209
+ 600: "#0891b2",
210
+ 700: "#0e7490",
211
+ 800: "#155e75",
212
+ 900: "#164e63",
213
+ 950: "#083344"
214
+ },
215
+ sky: {
216
+ 50: "#f0f9ff",
217
+ 100: "#e0f2fe",
218
+ 200: "#bae6fd",
219
+ 300: "#7dd3fc",
220
+ 400: "#38bdf8",
221
+ 500: "#0ea5e9",
222
+ 600: "#0284c7",
223
+ 700: "#0369a1",
224
+ 800: "#075985",
225
+ 900: "#0c4a6e",
226
+ 950: "#082f49"
227
+ },
228
+ blue: {
229
+ 50: "#eff6ff",
230
+ 100: "#dbeafe",
231
+ 200: "#bfdbfe",
232
+ 300: "#93c5fd",
233
+ 400: "#60a5fa",
234
+ 500: "#3b82f6",
235
+ 600: "#2563eb",
236
+ 700: "#1d4ed8",
237
+ 800: "#1e40af",
238
+ 900: "#1e3a8a",
239
+ 950: "#172554"
240
+ },
241
+ indigo: {
242
+ 50: "#eef2ff",
243
+ 100: "#e0e7ff",
244
+ 200: "#c7d2fe",
245
+ 300: "#a5b4fc",
246
+ 400: "#818cf8",
247
+ 500: "#6366f1",
248
+ 600: "#4f46e5",
249
+ 700: "#4338ca",
250
+ 800: "#3730a3",
251
+ 900: "#312e81",
252
+ 950: "#1e1b4b"
253
+ },
254
+ violet: {
255
+ 50: "#f5f3ff",
256
+ 100: "#ede9fe",
257
+ 200: "#ddd6fe",
258
+ 300: "#c4b5fd",
259
+ 400: "#a78bfa",
260
+ 500: "#8b5cf6",
261
+ 600: "#7c3aed",
262
+ 700: "#6d28d9",
263
+ 800: "#5b21b6",
264
+ 900: "#4c1d95",
265
+ 950: "#2e1065"
266
+ },
267
+ purple: {
268
+ 50: "#faf5ff",
269
+ 100: "#f3e8ff",
270
+ 200: "#e9d5ff",
271
+ 300: "#d8b4fe",
272
+ 400: "#c084fc",
273
+ 500: "#a855f7",
274
+ 600: "#9333ea",
275
+ 700: "#7e22ce",
276
+ 800: "#6b21a8",
277
+ 900: "#581c87",
278
+ 950: "#3b0764"
279
+ },
280
+ fuchsia: {
281
+ 50: "#fdf4ff",
282
+ 100: "#fae8ff",
283
+ 200: "#f5d0fe",
284
+ 300: "#f0abfc",
285
+ 400: "#e879f9",
286
+ 500: "#d946ef",
287
+ 600: "#c026d3",
288
+ 700: "#a21caf",
289
+ 800: "#86198f",
290
+ 900: "#701a75",
291
+ 950: "#4a044e"
292
+ },
293
+ pink: {
294
+ 50: "#fdf2f8",
295
+ 100: "#fce7f3",
296
+ 200: "#fbcfe8",
297
+ 300: "#f9a8d4",
298
+ 400: "#f472b6",
299
+ 500: "#ec4899",
300
+ 600: "#db2777",
301
+ 700: "#be185d",
302
+ 800: "#9d174d",
303
+ 900: "#831843",
304
+ 950: "#500724"
305
+ },
306
+ rose: {
307
+ 50: "#fff1f2",
308
+ 100: "#ffe4e6",
309
+ 200: "#fecdd3",
310
+ 300: "#fda4af",
311
+ 400: "#fb7185",
312
+ 500: "#f43f5e",
313
+ 600: "#e11d48",
314
+ 700: "#be123c",
315
+ 800: "#9f1239",
316
+ 900: "#881337",
317
+ 950: "#4c0519"
318
+ }
319
+ };
320
+ }
321
+ });
322
+
323
+ // src/theme/default.ts
324
+ var defaultTheme;
325
+ var init_default = __esm({
326
+ "src/theme/default.ts"() {
327
+ "use strict";
328
+ init_colors();
329
+ defaultTheme = {
330
+ colors: defaultColors,
331
+ spacing: {
332
+ px: "1px",
333
+ "0": "0px",
334
+ "0.5": "0.125rem",
335
+ "1": "0.25rem",
336
+ "1.5": "0.375rem",
337
+ "2": "0.5rem",
338
+ "2.5": "0.625rem",
339
+ "3": "0.75rem",
340
+ "3.5": "0.875rem",
341
+ "4": "1rem",
342
+ "5": "1.25rem",
343
+ "6": "1.5rem",
344
+ "7": "1.75rem",
345
+ "8": "2rem",
346
+ "9": "2.25rem",
347
+ "10": "2.5rem",
348
+ "11": "2.75rem",
349
+ "12": "3rem",
350
+ "14": "3.5rem",
351
+ "16": "4rem",
352
+ "20": "5rem",
353
+ "24": "6rem",
354
+ "28": "7rem",
355
+ "32": "8rem",
356
+ "36": "9rem",
357
+ "40": "10rem",
358
+ "44": "11rem",
359
+ "48": "12rem",
360
+ "52": "13rem",
361
+ "56": "14rem",
362
+ "60": "15rem",
363
+ "64": "16rem",
364
+ "72": "18rem",
365
+ "80": "20rem",
366
+ "96": "24rem"
367
+ },
368
+ borderRadius: {
369
+ none: "0px",
370
+ sm: "0.125rem",
371
+ DEFAULT: "0.25rem",
372
+ md: "0.375rem",
373
+ lg: "0.5rem",
374
+ xl: "0.75rem",
375
+ "2xl": "1rem",
376
+ "3xl": "1.5rem",
377
+ full: "9999px"
378
+ },
379
+ fontSize: {
380
+ xs: ["0.75rem", "1rem"],
381
+ sm: ["0.875rem", "1.25rem"],
382
+ base: ["1rem", "1.5rem"],
383
+ lg: ["1.125rem", "1.75rem"],
384
+ xl: ["1.25rem", "1.75rem"],
385
+ "2xl": ["1.5rem", "2rem"],
386
+ "3xl": ["1.875rem", "2.25rem"],
387
+ "4xl": ["2.25rem", "2.5rem"],
388
+ "5xl": ["3rem", "1"],
389
+ "6xl": ["3.75rem", "1"],
390
+ "7xl": ["4.5rem", "1"],
391
+ "8xl": ["6rem", "1"],
392
+ "9xl": ["8rem", "1"]
393
+ },
394
+ fontWeight: {
395
+ thin: "100",
396
+ extralight: "200",
397
+ light: "300",
398
+ normal: "400",
399
+ medium: "500",
400
+ semibold: "600",
401
+ bold: "700",
402
+ extrabold: "800",
403
+ black: "900"
404
+ },
405
+ lineHeight: {
406
+ none: "1",
407
+ tight: "1.25",
408
+ snug: "1.375",
409
+ normal: "1.5",
410
+ relaxed: "1.625",
411
+ loose: "2",
412
+ "3": "0.75rem",
413
+ "4": "1rem",
414
+ "5": "1.25rem",
415
+ "6": "1.5rem",
416
+ "7": "1.75rem",
417
+ "8": "2rem",
418
+ "9": "2.25rem",
419
+ "10": "2.5rem"
420
+ },
421
+ screens: {
422
+ sm: "640px",
423
+ md: "768px",
424
+ lg: "1024px",
425
+ xl: "1280px",
426
+ "2xl": "1536px"
427
+ },
428
+ opacity: {
429
+ "0": "0",
430
+ "5": "0.05",
431
+ "10": "0.1",
432
+ "15": "0.15",
433
+ "20": "0.2",
434
+ "25": "0.25",
435
+ "30": "0.3",
436
+ "40": "0.4",
437
+ "50": "0.5",
438
+ "60": "0.6",
439
+ "70": "0.7",
440
+ "75": "0.75",
441
+ "80": "0.8",
442
+ "90": "0.9",
443
+ "95": "0.95",
444
+ "100": "1"
445
+ },
446
+ zIndex: {
447
+ auto: "auto",
448
+ "0": "0",
449
+ "10": "10",
450
+ "20": "20",
451
+ "30": "30",
452
+ "40": "40",
453
+ "50": "50"
454
+ },
455
+ boxShadow: {
456
+ sm: "0 1px 2px rgba(0, 0, 0, 0.05)",
457
+ DEFAULT: "0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.06)",
458
+ md: "0 4px 6px rgba(0, 0, 0, 0.07), 0 2px 4px rgba(0, 0, 0, 0.06)",
459
+ lg: "0 10px 15px rgba(0, 0, 0, 0.1), 0 4px 6px rgba(0, 0, 0, 0.05)",
460
+ xl: "0 20px 25px rgba(0, 0, 0, 0.1), 0 10px 10px rgba(0, 0, 0, 0.04)",
461
+ "2xl": "0 25px 50px rgba(0, 0, 0, 0.25)",
462
+ inner: "inset 0 2px 4px rgba(0, 0, 0, 0.06)",
463
+ none: "none"
464
+ },
465
+ darkMode: "media"
466
+ };
467
+ }
468
+ });
469
+
470
+ // src/config.ts
471
+ function resolveConfig(userConfig = {}) {
472
+ const userTheme = userConfig.theme;
473
+ const theme = mergeTheme(defaultTheme, userTheme ?? {});
474
+ return {
475
+ content: userConfig.content ?? [],
476
+ output: userConfig.output ?? "alive.css",
477
+ theme
478
+ };
479
+ }
480
+ function mergeTheme(base, overrides) {
481
+ return {
482
+ colors: { ...base.colors, ...overrides.colors ?? {} },
483
+ spacing: { ...base.spacing, ...overrides.spacing ?? {} },
484
+ borderRadius: { ...base.borderRadius, ...overrides.borderRadius ?? {} },
485
+ fontSize: { ...base.fontSize, ...overrides.fontSize ?? {} },
486
+ fontWeight: { ...base.fontWeight, ...overrides.fontWeight ?? {} },
487
+ lineHeight: { ...base.lineHeight, ...overrides.lineHeight ?? {} },
488
+ screens: { ...base.screens, ...overrides.screens ?? {} },
489
+ opacity: { ...base.opacity, ...overrides.opacity ?? {} },
490
+ zIndex: { ...base.zIndex, ...overrides.zIndex ?? {} },
491
+ boxShadow: { ...base.boxShadow, ...overrides.boxShadow ?? {} },
492
+ darkMode: overrides.darkMode ?? base.darkMode
493
+ };
494
+ }
495
+ var init_config = __esm({
496
+ "src/config.ts"() {
497
+ "use strict";
498
+ init_default();
499
+ }
500
+ });
501
+
502
+ // src/scanner.ts
503
+ import { readFileSync } from "fs";
504
+ import glob from "fast-glob";
505
+ async function scanContent(config) {
506
+ if (config.content.length === 0) return /* @__PURE__ */ new Set();
507
+ const files = await glob(config.content, {
508
+ absolute: true,
509
+ ignore: ["**/node_modules/**", "**/.git/**", "**/dist/**"]
510
+ });
511
+ const classes = /* @__PURE__ */ new Set();
512
+ for (const file of files) {
513
+ try {
514
+ const content = readFileSync(file, "utf-8");
515
+ extractClasses(content, classes);
516
+ } catch {
517
+ }
518
+ }
519
+ return classes;
520
+ }
521
+ function extractClasses(content, classes) {
522
+ let match;
523
+ CLASS_EXTRACTION_REGEX.lastIndex = 0;
524
+ while ((match = CLASS_EXTRACTION_REGEX.exec(content)) !== null) {
525
+ const value = match[1] ?? match[2] ?? match[3] ?? match[4];
526
+ if (value) {
527
+ splitAndAdd(value, classes);
528
+ }
529
+ }
530
+ TOKEN_REGEX.lastIndex = 0;
531
+ while ((match = TOKEN_REGEX.exec(content)) !== null) {
532
+ if (match[1]) {
533
+ splitAndAdd(match[1], classes);
534
+ }
535
+ }
536
+ const rawTokenRegex = /(?:^|[\s"'`{(,])(-?[a-z][a-z0-9]*(?:-[a-z0-9./]+)*(?:-\[[^\]]*\])?(?::[a-z][a-z0-9]*(?:-[a-z0-9./]+)*(?:-\[[^\]]*\])?)*)/g;
537
+ let rawMatch;
538
+ while ((rawMatch = rawTokenRegex.exec(content)) !== null) {
539
+ const token = rawMatch[1];
540
+ if (token && isLikelyClass(token)) {
541
+ classes.add(token);
542
+ }
543
+ }
544
+ }
545
+ function splitAndAdd(value, classes) {
546
+ const tokens = value.split(/[\s\n\r\t]+/);
547
+ for (const token of tokens) {
548
+ const clean = token.trim();
549
+ if (clean && isLikelyClass(clean)) {
550
+ classes.add(clean);
551
+ }
552
+ }
553
+ }
554
+ function isLikelyClass(token) {
555
+ if (!token || token.length < 1 || token.length > 120) return false;
556
+ if (!/^-?[a-z]/.test(token)) return false;
557
+ if (/\s/.test(token)) return false;
558
+ if (token.includes("://")) return false;
559
+ if (token.startsWith("http")) return false;
560
+ const openBrackets = (token.match(/\[/g) ?? []).length;
561
+ const closeBrackets = (token.match(/\]/g) ?? []).length;
562
+ if (openBrackets !== closeBrackets) return false;
563
+ if (JS_PROTOTYPE_PROPS.has(token)) return false;
564
+ return true;
565
+ }
566
+ var CLASS_EXTRACTION_REGEX, TOKEN_REGEX, JS_PROTOTYPE_PROPS;
567
+ var init_scanner = __esm({
568
+ "src/scanner.ts"() {
569
+ "use strict";
570
+ CLASS_EXTRACTION_REGEX = /(?:class|className)(?:\s*=\s*|\s*:\s*)(?:"([^"]+)"|'([^']+)'|`([^`]+)`|\{[^}]*['"`]([^'"`]+)['"`][^}]*\})/g;
571
+ TOKEN_REGEX = /[`'"]([\w\s/[\]#%.-]+)[`'"]/g;
572
+ JS_PROTOTYPE_PROPS = /* @__PURE__ */ new Set([
573
+ "constructor",
574
+ "prototype",
575
+ "toString",
576
+ "valueOf",
577
+ "hasOwnProperty",
578
+ "isPrototypeOf",
579
+ "propertyIsEnumerable",
580
+ "toLocaleString",
581
+ "__proto__",
582
+ "__defineGetter__",
583
+ "__defineSetter__",
584
+ "__lookupGetter__",
585
+ "__lookupSetter__"
586
+ ]);
587
+ }
588
+ });
589
+
590
+ // src/generator/base.ts
591
+ function generateBase(_config) {
592
+ return `/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550
593
+ AliveUI \u2014 Motion-first CSS framework
594
+ Base layer: tokens \xB7 depth \xB7 animations \xB7 components
595
+ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */
596
+
597
+ /* \u2500\u2500 Reset \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
598
+ *,
599
+ ::before,
600
+ ::after {
601
+ box-sizing: border-box;
602
+ }
603
+
604
+ /* \u2500\u2500 Design tokens \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
605
+ :root {
606
+ /* Motion durations */
607
+ --alive-duration-fast: 120ms;
608
+ --alive-duration-normal: 200ms;
609
+ --alive-duration-slow: 320ms;
610
+
611
+ /* Easing curves */
612
+ --alive-ease-standard: cubic-bezier(0.2, 0, 0, 1);
613
+ --alive-ease-emphasized: cubic-bezier(0.05, 0.7, 0.1, 1);
614
+ --alive-ease-exit: cubic-bezier(0.3, 0, 0.8, 0.15);
615
+
616
+ /* Depth shadows */
617
+ --alive-shadow-d1: none;
618
+ --alive-shadow-d2: 0 1px 3px rgba(0,0,0,0.08), 0 1px 2px rgba(0,0,0,0.04);
619
+ --alive-shadow-d2-hover: 0 4px 16px rgba(0,0,0,0.10), 0 2px 6px rgba(0,0,0,0.06);
620
+ --alive-shadow-d3: 0 8px 40px rgba(0,0,0,0.14), 0 4px 16px rgba(0,0,0,0.08);
621
+
622
+ /* Stagger defaults */
623
+ --alive-stagger-gap: 60ms;
624
+ --alive-index: 0;
625
+
626
+ /* Inherited depth context \u2014 overridden by .d1/.d2/.d3 */
627
+ --alive-duration: 0ms;
628
+ --alive-ease: linear;
629
+ }
630
+
631
+ /* \u2500\u2500 Depth system \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
632
+
633
+ /* d1 \u2014 base surface: flat, color-only transitions */
634
+ .d1 {
635
+ --alive-depth: 1;
636
+ --alive-duration: var(--alive-duration-normal);
637
+ --alive-ease: var(--alive-ease-standard);
638
+ }
639
+
640
+ /* d2 \u2014 elevated interactive: lifts and scales on hover */
641
+ .d2 {
642
+ --alive-depth: 2;
643
+ --alive-duration: var(--alive-duration-normal);
644
+ --alive-ease: var(--alive-ease-standard);
645
+ box-shadow: var(--alive-shadow-d2);
646
+ transition:
647
+ box-shadow var(--alive-duration-normal) var(--alive-ease-standard),
648
+ transform var(--alive-duration-normal) var(--alive-ease-standard);
649
+ }
650
+ .d2:hover {
651
+ box-shadow: var(--alive-shadow-d2-hover);
652
+ transform: translateY(-1px) scale(1.004);
653
+ }
654
+ .d2:active {
655
+ box-shadow: var(--alive-shadow-d2);
656
+ transform: translateY(0) scale(0.998);
657
+ transition-duration: var(--alive-duration-fast);
658
+ }
659
+
660
+ /* d3 \u2014 floating layer: strong shadow, emphasized entrance */
661
+ .d3 {
662
+ --alive-depth: 3;
663
+ --alive-duration: var(--alive-duration-slow);
664
+ --alive-ease: var(--alive-ease-emphasized);
665
+ box-shadow: var(--alive-shadow-d3);
666
+ }
667
+
668
+ /* \u2500\u2500 Keyframe animations \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
669
+
670
+ /* Entrances */
671
+ @keyframes alive-fade-up {
672
+ from { opacity: 0; transform: translateY(8px); }
673
+ to { opacity: 1; transform: translateY(0); }
674
+ }
675
+ @keyframes alive-fade-down {
676
+ from { opacity: 0; transform: translateY(-8px); }
677
+ to { opacity: 1; transform: translateY(0); }
678
+ }
679
+ @keyframes alive-fade-right {
680
+ from { opacity: 0; transform: translateX(-12px); }
681
+ to { opacity: 1; transform: translateX(0); }
682
+ }
683
+ @keyframes alive-fade-left {
684
+ from { opacity: 0; transform: translateX(12px); }
685
+ to { opacity: 1; transform: translateX(0); }
686
+ }
687
+ @keyframes alive-fade-in {
688
+ from { opacity: 0; }
689
+ to { opacity: 1; }
690
+ }
691
+ @keyframes alive-scale-in {
692
+ from { opacity: 0; transform: scale(0.94); }
693
+ to { opacity: 1; transform: scale(1); }
694
+ }
695
+ @keyframes alive-scale-up {
696
+ from { opacity: 0; transform: scale(0.92) translateY(4px); }
697
+ to { opacity: 1; transform: scale(1) translateY(0); }
698
+ }
699
+
700
+ /* Exits */
701
+ @keyframes alive-exit-down {
702
+ from { opacity: 1; transform: translateY(0); }
703
+ to { opacity: 0; transform: translateY(8px); }
704
+ }
705
+ @keyframes alive-exit-up {
706
+ from { opacity: 1; transform: translateY(0); }
707
+ to { opacity: 0; transform: translateY(-8px); }
708
+ }
709
+ @keyframes alive-exit-left {
710
+ from { opacity: 1; transform: translateX(0); }
711
+ to { opacity: 0; transform: translateX(-12px); }
712
+ }
713
+ @keyframes alive-exit-right {
714
+ from { opacity: 1; transform: translateX(0); }
715
+ to { opacity: 0; transform: translateX(12px); }
716
+ }
717
+ @keyframes alive-exit-scale {
718
+ from { opacity: 1; transform: scale(1); }
719
+ to { opacity: 0; transform: scale(0.94); }
720
+ }
721
+
722
+ /* Loop animations */
723
+ @keyframes alive-pulse {
724
+ 0%, 100% { opacity: 1; }
725
+ 50% { opacity: 0.45; }
726
+ }
727
+ @keyframes alive-spin {
728
+ from { transform: rotate(0deg); }
729
+ to { transform: rotate(360deg); }
730
+ }
731
+ @keyframes alive-ping {
732
+ 75%, 100% { transform: scale(2); opacity: 0; }
733
+ }
734
+ @keyframes alive-bounce {
735
+ 0%, 100% {
736
+ transform: translateY(0);
737
+ animation-timing-function: cubic-bezier(0.8, 0, 1, 1);
738
+ }
739
+ 50% {
740
+ transform: translateY(-25%);
741
+ animation-timing-function: cubic-bezier(0, 0, 0.2, 1);
742
+ }
743
+ }
744
+ @keyframes alive-shimmer {
745
+ 0% { background-position: -200% 0; }
746
+ 100% { background-position: 200% 0; }
747
+ }
748
+
749
+ /* \u2500\u2500 Entrance classes \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
750
+
751
+ .alive-enter {
752
+ animation: alive-fade-up var(--alive-duration-slow) var(--alive-ease-emphasized) both;
753
+ animation-delay: calc(var(--alive-stagger-gap, 60ms) * var(--alive-index, 0));
754
+ }
755
+ .alive-enter-down {
756
+ animation: alive-fade-down var(--alive-duration-slow) var(--alive-ease-emphasized) both;
757
+ animation-delay: calc(var(--alive-stagger-gap, 60ms) * var(--alive-index, 0));
758
+ }
759
+ .alive-enter-right {
760
+ animation: alive-fade-right var(--alive-duration-slow) var(--alive-ease-emphasized) both;
761
+ animation-delay: calc(var(--alive-stagger-gap, 60ms) * var(--alive-index, 0));
762
+ }
763
+ .alive-enter-left {
764
+ animation: alive-fade-left var(--alive-duration-slow) var(--alive-ease-emphasized) both;
765
+ animation-delay: calc(var(--alive-stagger-gap, 60ms) * var(--alive-index, 0));
766
+ }
767
+ .alive-enter-fade {
768
+ animation: alive-fade-in var(--alive-duration-normal) var(--alive-ease-standard) both;
769
+ animation-delay: calc(var(--alive-stagger-gap, 60ms) * var(--alive-index, 0));
770
+ }
771
+ .alive-enter-scale {
772
+ animation: alive-scale-in var(--alive-duration-normal) var(--alive-ease-emphasized) both;
773
+ animation-delay: calc(var(--alive-stagger-gap, 60ms) * var(--alive-index, 0));
774
+ }
775
+
776
+ /* \u2500\u2500 Exit classes (apply dynamically when removing elements) \u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
777
+
778
+ .alive-exit {
779
+ animation: alive-exit-down var(--alive-duration-normal) var(--alive-ease-exit) both;
780
+ }
781
+ .alive-exit-up {
782
+ animation: alive-exit-up var(--alive-duration-normal) var(--alive-ease-exit) both;
783
+ }
784
+ .alive-exit-left {
785
+ animation: alive-exit-left var(--alive-duration-normal) var(--alive-ease-exit) both;
786
+ }
787
+ .alive-exit-right {
788
+ animation: alive-exit-right var(--alive-duration-normal) var(--alive-ease-exit) both;
789
+ }
790
+ .alive-exit-scale {
791
+ animation: alive-exit-scale var(--alive-duration-fast) var(--alive-ease-exit) both;
792
+ }
793
+
794
+ /* \u2500\u2500 Loop animations \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
795
+
796
+ .alive-loop-pulse { animation: alive-pulse 2s ease-in-out infinite; }
797
+ .alive-loop-spin { animation: alive-spin 1s linear infinite; }
798
+ .alive-loop-ping { animation: alive-ping 1s cubic-bezier(0, 0, 0.2, 1) infinite; }
799
+ .alive-loop-bounce { animation: alive-bounce 1s infinite; }
800
+
801
+ /* Reduced motion \u2014 respect system preference */
802
+ @media (prefers-reduced-motion: reduce) {
803
+ .alive-enter,
804
+ .alive-enter-down,
805
+ .alive-enter-right,
806
+ .alive-enter-left,
807
+ .alive-enter-fade,
808
+ .alive-enter-scale,
809
+ .alive-exit,
810
+ .alive-exit-up,
811
+ .alive-exit-left,
812
+ .alive-exit-right,
813
+ .alive-exit-scale,
814
+ .alive-loop-pulse,
815
+ .alive-loop-spin,
816
+ .alive-loop-ping,
817
+ .alive-loop-bounce {
818
+ animation: none;
819
+ opacity: 1;
820
+ transform: none;
821
+ }
822
+
823
+ /* depth system \u2014 disable hover lift and active press */
824
+ .d2,
825
+ .d2:hover,
826
+ .d2:active {
827
+ transform: none;
828
+ transition: none;
829
+ box-shadow: var(--alive-shadow-d2);
830
+ }
831
+ }
832
+
833
+ /* \u2500\u2500 Motion override utilities \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
834
+
835
+ .motion-fast { --alive-duration: var(--alive-duration-fast) !important; }
836
+ .motion-normal { --alive-duration: var(--alive-duration-normal) !important; }
837
+ .motion-slow { --alive-duration: var(--alive-duration-slow) !important; }
838
+ .motion-none { --alive-duration: 0ms !important; }
839
+
840
+ .ease-standard { --alive-ease: var(--alive-ease-standard) !important; }
841
+ .ease-emphasized { --alive-ease: var(--alive-ease-emphasized) !important; }
842
+ .ease-exit { --alive-ease: var(--alive-ease-exit) !important; }
843
+
844
+ /* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550
845
+ COMPONENT PRIMITIVES
846
+ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */
847
+
848
+ /* \u2500\u2500 Card \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
849
+
850
+ .alive-card {
851
+ border-radius: 0.75rem;
852
+ padding: 1.5rem;
853
+ background-color: var(--alive-card-bg, #ffffff);
854
+ border: 1px solid var(--alive-card-border, rgba(0,0,0,0.06));
855
+ }
856
+ .alive-card-flush { padding: 0; }
857
+ .alive-card-sm { padding: 1rem; border-radius: 0.5rem; }
858
+ .alive-card-lg { padding: 2rem; border-radius: 1rem; }
859
+
860
+ /* \u2500\u2500 Button \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
861
+
862
+ .alive-button {
863
+ display: inline-flex;
864
+ align-items: center;
865
+ justify-content: center;
866
+ gap: 0.5rem;
867
+ padding: 0.625rem 1.25rem;
868
+ font-size: 0.875rem;
869
+ font-weight: 500;
870
+ line-height: 1;
871
+ border-radius: 0.5rem;
872
+ border: 1px solid transparent;
873
+ cursor: pointer;
874
+ user-select: none;
875
+ white-space: nowrap;
876
+ text-decoration: none;
877
+ transition:
878
+ background-color var(--alive-duration-fast) var(--alive-ease-standard),
879
+ color var(--alive-duration-fast) var(--alive-ease-standard),
880
+ border-color var(--alive-duration-fast) var(--alive-ease-standard),
881
+ box-shadow var(--alive-duration-fast) var(--alive-ease-standard),
882
+ transform var(--alive-duration-fast) var(--alive-ease-standard),
883
+ opacity var(--alive-duration-fast) var(--alive-ease-standard);
884
+ }
885
+ .alive-button:active {
886
+ transform: scale(0.97);
887
+ transition-duration: calc(var(--alive-duration-fast) / 2);
888
+ }
889
+ .alive-button:focus-visible {
890
+ outline: 2px solid currentColor;
891
+ outline-offset: 2px;
892
+ }
893
+ .alive-button:disabled {
894
+ opacity: 0.4;
895
+ cursor: not-allowed;
896
+ pointer-events: none;
897
+ }
898
+
899
+ /* Button variants */
900
+ .alive-button-primary {
901
+ background-color: #0a0a0a;
902
+ color: #ffffff;
903
+ border-color: #0a0a0a;
904
+ }
905
+ .alive-button-primary:hover { background-color: #1a1a1a; }
906
+
907
+ .alive-button-secondary {
908
+ background-color: transparent;
909
+ color: #0a0a0a;
910
+ border-color: #e4e4e4;
911
+ }
912
+ .alive-button-secondary:hover {
913
+ background-color: #f4f4f4;
914
+ border-color: #d4d4d4;
915
+ }
916
+
917
+ .alive-button-ghost {
918
+ background-color: transparent;
919
+ color: #4b4b4b;
920
+ border-color: transparent;
921
+ }
922
+ .alive-button-ghost:hover {
923
+ background-color: #f4f4f4;
924
+ color: #0a0a0a;
925
+ }
926
+
927
+ .alive-button-destructive {
928
+ background-color: #dc2626;
929
+ color: #ffffff;
930
+ border-color: #dc2626;
931
+ }
932
+ .alive-button-destructive:hover { background-color: #b91c1c; }
933
+
934
+ /* Button sizes */
935
+ .alive-button-xs { padding: 0.25rem 0.625rem; font-size: 0.75rem; border-radius: 0.375rem; }
936
+ .alive-button-sm { padding: 0.375rem 0.875rem; font-size: 0.8125rem; border-radius: 0.375rem; }
937
+ .alive-button-lg { padding: 0.75rem 1.75rem; font-size: 0.9375rem; border-radius: 0.625rem; }
938
+ .alive-button-xl { padding: 0.875rem 2rem; font-size: 1rem; border-radius: 0.75rem; }
939
+ .alive-button-icon {
940
+ padding: 0.625rem;
941
+ aspect-ratio: 1;
942
+ }
943
+
944
+ /* \u2500\u2500 Badge \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
945
+
946
+ .alive-badge {
947
+ display: inline-flex;
948
+ align-items: center;
949
+ gap: 0.3rem;
950
+ padding: 0.25rem 0.625rem;
951
+ font-size: 0.75rem;
952
+ font-weight: 500;
953
+ line-height: 1;
954
+ border-radius: 9999px;
955
+ border: 1px solid transparent;
956
+ white-space: nowrap;
957
+ }
958
+
959
+ /* Badge sizes */
960
+ .alive-badge-sm { padding: 0.125rem 0.5rem; font-size: 0.6875rem; }
961
+ .alive-badge-lg { padding: 0.375rem 0.75rem; font-size: 0.8125rem; }
962
+
963
+ /* Badge colors */
964
+ .alive-badge-gray { background: rgba(0,0,0,0.06); color: #525252; border-color: rgba(0,0,0,0.1); }
965
+ .alive-badge-green { background: rgba(74,222,128,0.12); color: #16a34a; border-color: rgba(74,222,128,0.25); }
966
+ .alive-badge-red { background: rgba(239,68,68,0.1); color: #dc2626; border-color: rgba(239,68,68,0.2); }
967
+ .alive-badge-yellow { background: rgba(234,179,8,0.1); color: #ca8a04; border-color: rgba(234,179,8,0.25); }
968
+ .alive-badge-blue { background: rgba(96,165,250,0.1); color: #2563eb; border-color: rgba(96,165,250,0.22); }
969
+ .alive-badge-purple { background: rgba(167,139,250,0.12); color: #7c3aed; border-color: rgba(167,139,250,0.25); }
970
+ .alive-badge-orange { background: rgba(251,146,60,0.1); color: #ea580c; border-color: rgba(251,146,60,0.22); }
971
+
972
+ /* Badge with status dot */
973
+ .alive-badge-dot::before {
974
+ content: '';
975
+ display: block;
976
+ width: 6px;
977
+ height: 6px;
978
+ border-radius: 50%;
979
+ background: currentColor;
980
+ flex-shrink: 0;
981
+ }
982
+
983
+ /* \u2500\u2500 Input \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
984
+
985
+ .alive-input {
986
+ display: block;
987
+ width: 100%;
988
+ padding: 0.625rem 0.875rem;
989
+ font-size: 0.875rem;
990
+ line-height: 1.5;
991
+ color: inherit;
992
+ background: transparent;
993
+ border: 1px solid rgba(0,0,0,0.14);
994
+ border-radius: 0.5rem;
995
+ outline: none;
996
+ transition:
997
+ border-color var(--alive-duration-fast) var(--alive-ease-standard),
998
+ box-shadow var(--alive-duration-fast) var(--alive-ease-standard);
999
+ }
1000
+ .alive-input::placeholder { opacity: 0.4; }
1001
+ .alive-input:hover { border-color: rgba(0,0,0,0.24); }
1002
+ .alive-input:focus {
1003
+ border-color: rgba(0,0,0,0.5);
1004
+ box-shadow: 0 0 0 3px rgba(0,0,0,0.07);
1005
+ }
1006
+ .alive-input:disabled {
1007
+ opacity: 0.45;
1008
+ cursor: not-allowed;
1009
+ background: rgba(0,0,0,0.03);
1010
+ }
1011
+ .alive-input-error { border-color: rgba(239,68,68,0.55); }
1012
+ .alive-input-error:hover { border-color: rgba(239,68,68,0.7); }
1013
+ .alive-input-error:focus {
1014
+ border-color: #ef4444;
1015
+ box-shadow: 0 0 0 3px rgba(239,68,68,0.1);
1016
+ }
1017
+ .alive-input-sm { padding: 0.4375rem 0.75rem; font-size: 0.8125rem; }
1018
+ .alive-input-lg { padding: 0.75rem 1rem; font-size: 0.9375rem; }
1019
+
1020
+ /* \u2500\u2500 Textarea \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
1021
+
1022
+ .alive-textarea {
1023
+ display: block;
1024
+ width: 100%;
1025
+ padding: 0.625rem 0.875rem;
1026
+ font-size: 0.875rem;
1027
+ line-height: 1.6;
1028
+ color: inherit;
1029
+ background: transparent;
1030
+ border: 1px solid rgba(0,0,0,0.14);
1031
+ border-radius: 0.5rem;
1032
+ outline: none;
1033
+ resize: vertical;
1034
+ min-height: 6rem;
1035
+ transition:
1036
+ border-color var(--alive-duration-fast) var(--alive-ease-standard),
1037
+ box-shadow var(--alive-duration-fast) var(--alive-ease-standard);
1038
+ }
1039
+ .alive-textarea::placeholder { opacity: 0.4; }
1040
+ .alive-textarea:hover { border-color: rgba(0,0,0,0.24); }
1041
+ .alive-textarea:focus {
1042
+ border-color: rgba(0,0,0,0.5);
1043
+ box-shadow: 0 0 0 3px rgba(0,0,0,0.07);
1044
+ }
1045
+ .alive-textarea:disabled {
1046
+ opacity: 0.45;
1047
+ cursor: not-allowed;
1048
+ background: rgba(0,0,0,0.03);
1049
+ }
1050
+
1051
+ /* \u2500\u2500 Select \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
1052
+
1053
+ .alive-select {
1054
+ display: block;
1055
+ width: 100%;
1056
+ padding: 0.625rem 2.25rem 0.625rem 0.875rem;
1057
+ font-size: 0.875rem;
1058
+ line-height: 1.5;
1059
+ color: inherit;
1060
+ background-color: transparent;
1061
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");
1062
+ background-repeat: no-repeat;
1063
+ background-position: right 0.6rem center;
1064
+ background-size: 1.25rem;
1065
+ border: 1px solid rgba(0,0,0,0.14);
1066
+ border-radius: 0.5rem;
1067
+ outline: none;
1068
+ cursor: pointer;
1069
+ appearance: none;
1070
+ transition:
1071
+ border-color var(--alive-duration-fast) var(--alive-ease-standard),
1072
+ box-shadow var(--alive-duration-fast) var(--alive-ease-standard);
1073
+ }
1074
+ .alive-select:hover { border-color: rgba(0,0,0,0.24); }
1075
+ .alive-select:focus {
1076
+ border-color: rgba(0,0,0,0.5);
1077
+ box-shadow: 0 0 0 3px rgba(0,0,0,0.07);
1078
+ }
1079
+ .alive-select:disabled {
1080
+ opacity: 0.45;
1081
+ cursor: not-allowed;
1082
+ }
1083
+
1084
+ /* \u2500\u2500 Checkbox / Radio \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
1085
+
1086
+ .alive-checkbox,
1087
+ .alive-radio {
1088
+ width: 1rem;
1089
+ height: 1rem;
1090
+ border: 1.5px solid rgba(0,0,0,0.25);
1091
+ border-radius: 0.25rem;
1092
+ background: transparent;
1093
+ cursor: pointer;
1094
+ appearance: none;
1095
+ transition:
1096
+ background var(--alive-duration-fast) var(--alive-ease-standard),
1097
+ border-color var(--alive-duration-fast) var(--alive-ease-standard),
1098
+ box-shadow var(--alive-duration-fast) var(--alive-ease-standard);
1099
+ flex-shrink: 0;
1100
+ }
1101
+ .alive-radio { border-radius: 50%; }
1102
+
1103
+ .alive-checkbox:checked,
1104
+ .alive-radio:checked {
1105
+ background-color: #0a0a0a;
1106
+ border-color: #0a0a0a;
1107
+ background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e");
1108
+ background-repeat: no-repeat;
1109
+ background-position: center;
1110
+ background-size: 0.75rem;
1111
+ }
1112
+ .alive-radio:checked {
1113
+ background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e");
1114
+ }
1115
+ .alive-checkbox:focus-visible,
1116
+ .alive-radio:focus-visible {
1117
+ box-shadow: 0 0 0 3px rgba(0,0,0,0.1);
1118
+ }
1119
+
1120
+ /* \u2500\u2500 Switch / Toggle \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
1121
+
1122
+ .alive-switch {
1123
+ position: relative;
1124
+ display: inline-flex;
1125
+ align-items: center;
1126
+ width: 2.75rem;
1127
+ height: 1.5rem;
1128
+ border-radius: 9999px;
1129
+ background: rgba(0,0,0,0.15);
1130
+ cursor: pointer;
1131
+ flex-shrink: 0;
1132
+ transition: background var(--alive-duration-fast) var(--alive-ease-standard);
1133
+ }
1134
+ .alive-switch::after {
1135
+ content: '';
1136
+ position: absolute;
1137
+ top: 0.1875rem;
1138
+ left: 0.1875rem;
1139
+ width: 1.125rem;
1140
+ height: 1.125rem;
1141
+ border-radius: 50%;
1142
+ background: #fff;
1143
+ box-shadow: 0 1px 4px rgba(0,0,0,0.2);
1144
+ transition: transform var(--alive-duration-normal) var(--alive-ease-emphasized);
1145
+ }
1146
+ .alive-switch[aria-checked="true"],
1147
+ .alive-switch.is-checked {
1148
+ background: #22c55e;
1149
+ }
1150
+ .alive-switch[aria-checked="true"]::after,
1151
+ .alive-switch.is-checked::after {
1152
+ transform: translateX(1.25rem);
1153
+ }
1154
+ .alive-switch[aria-checked="false"][data-pending],
1155
+ .alive-switch.is-pending {
1156
+ opacity: 0.7;
1157
+ cursor: wait;
1158
+ }
1159
+ /* Sizes */
1160
+ .alive-switch-sm {
1161
+ width: 2.25rem;
1162
+ height: 1.25rem;
1163
+ }
1164
+ .alive-switch-sm::after { width: 0.875rem; height: 0.875rem; }
1165
+ .alive-switch-sm[aria-checked="true"]::after,
1166
+ .alive-switch-sm.is-checked::after { transform: translateX(1rem); }
1167
+
1168
+ .alive-switch-lg {
1169
+ width: 3.5rem;
1170
+ height: 2rem;
1171
+ }
1172
+ .alive-switch-lg::after { width: 1.5rem; height: 1.5rem; }
1173
+ .alive-switch-lg[aria-checked="true"]::after,
1174
+ .alive-switch-lg.is-checked::after { transform: translateX(1.5rem); }
1175
+
1176
+ /* \u2500\u2500 Avatar \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
1177
+
1178
+ .alive-avatar {
1179
+ display: inline-flex;
1180
+ align-items: center;
1181
+ justify-content: center;
1182
+ flex-shrink: 0;
1183
+ width: 2.5rem;
1184
+ height: 2.5rem;
1185
+ border-radius: 50%;
1186
+ overflow: hidden;
1187
+ font-size: 0.875rem;
1188
+ font-weight: 500;
1189
+ background: rgba(0,0,0,0.08);
1190
+ color: rgba(0,0,0,0.5);
1191
+ user-select: none;
1192
+ }
1193
+ .alive-avatar img {
1194
+ width: 100%;
1195
+ height: 100%;
1196
+ object-fit: cover;
1197
+ }
1198
+ .alive-avatar-xs { width: 1.5rem; height: 1.5rem; font-size: 0.625rem; }
1199
+ .alive-avatar-sm { width: 2rem; height: 2rem; font-size: 0.75rem; }
1200
+ .alive-avatar-lg { width: 3rem; height: 3rem; font-size: 1rem; }
1201
+ .alive-avatar-xl { width: 4rem; height: 4rem; font-size: 1.25rem; }
1202
+ .alive-avatar-2xl { width: 5rem; height: 5rem; font-size: 1.5rem; }
1203
+
1204
+ /* Avatar group \u2014 overlapping stack */
1205
+ .alive-avatar-group {
1206
+ display: flex;
1207
+ }
1208
+ .alive-avatar-group .alive-avatar {
1209
+ box-shadow: 0 0 0 2px rgba(0,0,0,0.06);
1210
+ margin-left: -0.5rem;
1211
+ }
1212
+ .alive-avatar-group .alive-avatar:first-child {
1213
+ margin-left: 0;
1214
+ }
1215
+
1216
+ /* \u2500\u2500 Skeleton \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
1217
+
1218
+ .alive-skeleton {
1219
+ border-radius: 0.375rem;
1220
+ background: linear-gradient(
1221
+ 90deg,
1222
+ rgba(0,0,0,0.06) 25%,
1223
+ rgba(0,0,0,0.1) 50%,
1224
+ rgba(0,0,0,0.06) 75%
1225
+ );
1226
+ background-size: 200% 100%;
1227
+ animation: alive-shimmer 1.6s ease-in-out infinite;
1228
+ }
1229
+ .alive-skeleton-text { height: 1em; border-radius: 0.25rem; }
1230
+ .alive-skeleton-circle { border-radius: 9999px; }
1231
+ .alive-skeleton-sm { animation-duration: 1.2s; }
1232
+ .alive-skeleton-lg { animation-duration: 2s; }
1233
+
1234
+ /* \u2500\u2500 Progress \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
1235
+
1236
+ .alive-progress {
1237
+ display: block;
1238
+ width: 100%;
1239
+ height: 0.5rem;
1240
+ border-radius: 9999px;
1241
+ background: rgba(0,0,0,0.08);
1242
+ overflow: hidden;
1243
+ }
1244
+ .alive-progress-bar {
1245
+ height: 100%;
1246
+ border-radius: 9999px;
1247
+ background: #0a0a0a;
1248
+ transition: width var(--alive-duration-slow) var(--alive-ease-standard);
1249
+ }
1250
+ .alive-progress-xs { height: 0.125rem; }
1251
+ .alive-progress-sm { height: 0.25rem; }
1252
+ .alive-progress-lg { height: 0.75rem; }
1253
+ .alive-progress-xl { height: 1rem; }
1254
+ .alive-progress-indeterminate .alive-progress-bar {
1255
+ width: 40% !important;
1256
+ animation: alive-progress-indeterminate 1.5s ease-in-out infinite;
1257
+ }
1258
+ @keyframes alive-progress-indeterminate {
1259
+ 0% { transform: translateX(-150%); }
1260
+ 100% { transform: translateX(400%); }
1261
+ }
1262
+
1263
+ /* \u2500\u2500 Separator \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
1264
+
1265
+ .alive-separator {
1266
+ display: block;
1267
+ width: 100%;
1268
+ height: 1px;
1269
+ background: rgba(0,0,0,0.08);
1270
+ border: none;
1271
+ margin: 0;
1272
+ }
1273
+ .alive-separator-v {
1274
+ display: inline-block;
1275
+ width: 1px;
1276
+ height: 1em;
1277
+ vertical-align: middle;
1278
+ background: rgba(0,0,0,0.08);
1279
+ margin: 0 0.5rem;
1280
+ }
1281
+ .alive-separator-label {
1282
+ display: flex;
1283
+ align-items: center;
1284
+ gap: 0.75rem;
1285
+ font-size: 0.75rem;
1286
+ color: rgba(0,0,0,0.4);
1287
+ font-weight: 500;
1288
+ letter-spacing: 0.04em;
1289
+ text-transform: uppercase;
1290
+ }
1291
+ .alive-separator-label::before,
1292
+ .alive-separator-label::after {
1293
+ content: '';
1294
+ flex: 1;
1295
+ height: 1px;
1296
+ background: rgba(0,0,0,0.08);
1297
+ }
1298
+
1299
+ /* \u2500\u2500 Alert \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
1300
+
1301
+ .alive-alert {
1302
+ display: flex;
1303
+ align-items: flex-start;
1304
+ gap: 0.75rem;
1305
+ padding: 1rem 1.25rem;
1306
+ border-radius: 0.75rem;
1307
+ border: 1px solid transparent;
1308
+ font-size: 0.875rem;
1309
+ line-height: 1.55;
1310
+ }
1311
+ .alive-alert-title {
1312
+ font-weight: 600;
1313
+ margin-bottom: 0.25rem;
1314
+ }
1315
+
1316
+ .alive-alert-info { background: rgba(96,165,250,0.08); border-color: rgba(96,165,250,0.2); color: #1d4ed8; }
1317
+ .alive-alert-success { background: rgba(74,222,128,0.08); border-color: rgba(74,222,128,0.22); color: #15803d; }
1318
+ .alive-alert-warning { background: rgba(251,191,36,0.10); border-color: rgba(251,191,36,0.25); color: #92400e; }
1319
+ .alive-alert-error { background: rgba(239,68,68,0.08); border-color: rgba(239,68,68,0.2); color: #dc2626; }
1320
+
1321
+ /* \u2500\u2500 Tooltip \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
1322
+
1323
+ .alive-tooltip-wrap {
1324
+ position: relative;
1325
+ display: inline-flex;
1326
+ }
1327
+ .alive-tooltip {
1328
+ position: absolute;
1329
+ z-index: 50;
1330
+ bottom: calc(100% + 8px);
1331
+ left: 50%;
1332
+ transform: translateX(-50%) translateY(4px);
1333
+ padding: 0.375rem 0.75rem;
1334
+ font-size: 0.75rem;
1335
+ font-weight: 500;
1336
+ line-height: 1.4;
1337
+ white-space: nowrap;
1338
+ color: #fff;
1339
+ background: rgba(10,10,10,0.92);
1340
+ border-radius: 0.5rem;
1341
+ box-shadow: 0 4px 16px rgba(0,0,0,0.14);
1342
+ pointer-events: none;
1343
+ opacity: 0;
1344
+ transition:
1345
+ opacity var(--alive-duration-fast) var(--alive-ease-standard),
1346
+ transform var(--alive-duration-fast) var(--alive-ease-emphasized);
1347
+ }
1348
+ .alive-tooltip::after {
1349
+ content: '';
1350
+ position: absolute;
1351
+ top: 100%;
1352
+ left: 50%;
1353
+ transform: translateX(-50%);
1354
+ border: 5px solid transparent;
1355
+ border-top-color: rgba(10,10,10,0.92);
1356
+ }
1357
+ .alive-tooltip-wrap:hover .alive-tooltip {
1358
+ opacity: 1;
1359
+ transform: translateX(-50%) translateY(0);
1360
+ }
1361
+
1362
+ /* Tooltip placements */
1363
+ .alive-tooltip-bottom {
1364
+ top: calc(100% + 8px);
1365
+ bottom: auto;
1366
+ transform: translateX(-50%) translateY(-4px);
1367
+ }
1368
+ .alive-tooltip-bottom::after {
1369
+ top: auto;
1370
+ bottom: 100%;
1371
+ border-top-color: transparent;
1372
+ border-bottom-color: rgba(10,10,10,0.92);
1373
+ }
1374
+ .alive-tooltip-wrap:hover .alive-tooltip-bottom {
1375
+ transform: translateX(-50%) translateY(0);
1376
+ }
1377
+
1378
+ /* \u2500\u2500 Modal \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
1379
+
1380
+ .alive-backdrop {
1381
+ position: fixed;
1382
+ inset: 0;
1383
+ z-index: 40;
1384
+ background: rgba(0,0,0,0.45);
1385
+ backdrop-filter: blur(4px);
1386
+ animation: alive-fade-in var(--alive-duration-normal) var(--alive-ease-standard) both;
1387
+ }
1388
+ .alive-modal {
1389
+ position: fixed;
1390
+ inset: 0;
1391
+ z-index: 50;
1392
+ display: flex;
1393
+ align-items: center;
1394
+ justify-content: center;
1395
+ padding: 1rem;
1396
+ overflow-y: auto;
1397
+ }
1398
+ .alive-modal-content {
1399
+ position: relative;
1400
+ width: 100%;
1401
+ max-width: 32rem;
1402
+ max-height: calc(100dvh - 2rem);
1403
+ overflow-y: auto;
1404
+ border-radius: 1rem;
1405
+ background: #fff;
1406
+ border: 1px solid rgba(0,0,0,0.08);
1407
+ box-shadow:
1408
+ 0 24px 64px rgba(0,0,0,0.18),
1409
+ 0 8px 24px rgba(0,0,0,0.10);
1410
+ animation: alive-scale-up var(--alive-duration-slow) var(--alive-ease-emphasized) both;
1411
+ }
1412
+ .alive-modal-sm .alive-modal-content { max-width: 24rem; }
1413
+ .alive-modal-lg .alive-modal-content { max-width: 48rem; }
1414
+ .alive-modal-xl .alive-modal-content { max-width: 64rem; }
1415
+ .alive-modal-header {
1416
+ display: flex;
1417
+ align-items: center;
1418
+ justify-content: space-between;
1419
+ padding: 1.25rem 1.5rem;
1420
+ border-bottom: 1px solid rgba(0,0,0,0.06);
1421
+ }
1422
+ .alive-modal-body { padding: 1.5rem; }
1423
+ .alive-modal-footer {
1424
+ display: flex;
1425
+ align-items: center;
1426
+ justify-content: flex-end;
1427
+ gap: 0.75rem;
1428
+ padding: 1rem 1.5rem;
1429
+ border-top: 1px solid rgba(0,0,0,0.06);
1430
+ }
1431
+
1432
+ /* \u2500\u2500 Drawer / Sheet \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
1433
+
1434
+ .alive-drawer {
1435
+ position: fixed;
1436
+ top: 0;
1437
+ right: 0;
1438
+ bottom: 0;
1439
+ z-index: 50;
1440
+ width: 100%;
1441
+ max-width: 24rem;
1442
+ background: #fff;
1443
+ border-left: 1px solid rgba(0,0,0,0.08);
1444
+ box-shadow: -8px 0 40px rgba(0,0,0,0.1);
1445
+ display: flex;
1446
+ flex-direction: column;
1447
+ animation: alive-fade-left var(--alive-duration-slow) var(--alive-ease-emphasized) both;
1448
+ }
1449
+ .alive-drawer-header { padding: 1.25rem 1.5rem; border-bottom: 1px solid rgba(0,0,0,0.06); }
1450
+ .alive-drawer-body { flex: 1; overflow-y: auto; padding: 1.5rem; }
1451
+ .alive-drawer-footer { padding: 1rem 1.5rem; border-top: 1px solid rgba(0,0,0,0.06); }
1452
+
1453
+ /* \u2500\u2500 Navigation bar \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
1454
+
1455
+ .alive-nav {
1456
+ position: sticky;
1457
+ top: 0;
1458
+ z-index: 50;
1459
+ display: flex;
1460
+ align-items: center;
1461
+ height: 3.5rem;
1462
+ padding: 0 1.5rem;
1463
+ border-bottom: 1px solid rgba(0,0,0,0.07);
1464
+ background: rgba(255,255,255,0.85);
1465
+ backdrop-filter: blur(12px);
1466
+ -webkit-backdrop-filter: blur(12px);
1467
+ gap: 1rem;
1468
+ }
1469
+ .alive-nav-brand {
1470
+ display: flex;
1471
+ align-items: center;
1472
+ gap: 0.625rem;
1473
+ font-weight: 600;
1474
+ font-size: 0.9375rem;
1475
+ text-decoration: none;
1476
+ color: inherit;
1477
+ }
1478
+ .alive-nav-items {
1479
+ display: flex;
1480
+ align-items: center;
1481
+ gap: 0.25rem;
1482
+ flex: 1;
1483
+ }
1484
+ .alive-nav-end {
1485
+ display: flex;
1486
+ align-items: center;
1487
+ gap: 0.5rem;
1488
+ margin-left: auto;
1489
+ }
1490
+ .alive-nav-link {
1491
+ padding: 0.4375rem 0.75rem;
1492
+ border-radius: 0.5rem;
1493
+ font-size: 0.8125rem;
1494
+ font-weight: 500;
1495
+ text-decoration: none;
1496
+ color: rgba(0,0,0,0.55);
1497
+ transition: background var(--alive-duration-fast) var(--alive-ease-standard), color var(--alive-duration-fast) var(--alive-ease-standard);
1498
+ cursor: pointer;
1499
+ }
1500
+ .alive-nav-link:hover { background: rgba(0,0,0,0.05); color: rgba(0,0,0,0.85); }
1501
+ .alive-nav-link.is-active { background: rgba(0,0,0,0.07); color: rgba(0,0,0,0.9); }
1502
+
1503
+ /* \u2500\u2500 Tabs \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
1504
+
1505
+ .alive-tabs {
1506
+ display: flex;
1507
+ border-bottom: 1px solid rgba(0,0,0,0.08);
1508
+ gap: 0;
1509
+ position: relative;
1510
+ }
1511
+ .alive-tab {
1512
+ padding: 0.6875rem 1rem;
1513
+ font-size: 0.875rem;
1514
+ font-weight: 500;
1515
+ color: rgba(0,0,0,0.45);
1516
+ border: none;
1517
+ background: transparent;
1518
+ cursor: pointer;
1519
+ position: relative;
1520
+ border-bottom: 2px solid transparent;
1521
+ margin-bottom: -1px;
1522
+ transition: color var(--alive-duration-fast) var(--alive-ease-standard);
1523
+ }
1524
+ .alive-tab:hover { color: rgba(0,0,0,0.72); }
1525
+ .alive-tab.is-active {
1526
+ color: rgba(0,0,0,0.9);
1527
+ border-bottom-color: rgba(0,0,0,0.9);
1528
+ }
1529
+ /* Sliding indicator variant */
1530
+ .alive-tabs-indicator {
1531
+ position: absolute;
1532
+ bottom: -1px;
1533
+ height: 2px;
1534
+ background: #0a0a0a;
1535
+ border-radius: 2px 2px 0 0;
1536
+ transition:
1537
+ left var(--alive-duration-normal) var(--alive-ease-emphasized),
1538
+ width var(--alive-duration-normal) var(--alive-ease-emphasized);
1539
+ }
1540
+
1541
+ /* Pill tabs variant */
1542
+ .alive-tabs-pills {
1543
+ border-bottom: none;
1544
+ gap: 0.25rem;
1545
+ background: rgba(0,0,0,0.05);
1546
+ padding: 0.25rem;
1547
+ border-radius: 0.625rem;
1548
+ }
1549
+ .alive-tabs-pills .alive-tab {
1550
+ border-radius: 0.375rem;
1551
+ border-bottom: none;
1552
+ margin-bottom: 0;
1553
+ }
1554
+ .alive-tabs-pills .alive-tab.is-active {
1555
+ background: #fff;
1556
+ color: rgba(0,0,0,0.9);
1557
+ box-shadow: 0 1px 3px rgba(0,0,0,0.1);
1558
+ border-bottom-color: transparent;
1559
+ }
1560
+
1561
+ /* \u2500\u2500 Dropdown / Menu \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
1562
+
1563
+ .alive-dropdown {
1564
+ position: absolute;
1565
+ z-index: 50;
1566
+ min-width: 12rem;
1567
+ padding: 0.375rem;
1568
+ border-radius: 0.75rem;
1569
+ background: #fff;
1570
+ border: 1px solid rgba(0,0,0,0.08);
1571
+ box-shadow:
1572
+ 0 8px 32px rgba(0,0,0,0.1),
1573
+ 0 2px 8px rgba(0,0,0,0.06);
1574
+ animation: alive-scale-up var(--alive-duration-fast) var(--alive-ease-emphasized) both;
1575
+ transform-origin: top left;
1576
+ }
1577
+ .alive-dropdown-item {
1578
+ display: flex;
1579
+ align-items: center;
1580
+ gap: 0.625rem;
1581
+ width: 100%;
1582
+ padding: 0.5625rem 0.75rem;
1583
+ font-size: 0.875rem;
1584
+ font-weight: 400;
1585
+ color: rgba(0,0,0,0.75);
1586
+ border-radius: 0.5rem;
1587
+ border: none;
1588
+ background: transparent;
1589
+ cursor: pointer;
1590
+ text-align: left;
1591
+ text-decoration: none;
1592
+ transition: background var(--alive-duration-fast) var(--alive-ease-standard), color var(--alive-duration-fast) var(--alive-ease-standard);
1593
+ }
1594
+ .alive-dropdown-item:hover {
1595
+ background: rgba(0,0,0,0.05);
1596
+ color: rgba(0,0,0,0.9);
1597
+ }
1598
+ .alive-dropdown-item.is-active {
1599
+ background: rgba(0,0,0,0.07);
1600
+ color: rgba(0,0,0,0.9);
1601
+ font-weight: 500;
1602
+ }
1603
+ .alive-dropdown-item-destructive { color: #dc2626; }
1604
+ .alive-dropdown-item-destructive:hover { background: rgba(239,68,68,0.08); color: #dc2626; }
1605
+ .alive-dropdown-separator {
1606
+ height: 1px;
1607
+ background: rgba(0,0,0,0.07);
1608
+ margin: 0.25rem 0;
1609
+ border: none;
1610
+ }
1611
+ .alive-dropdown-label {
1612
+ padding: 0.375rem 0.75rem;
1613
+ font-size: 0.6875rem;
1614
+ font-weight: 600;
1615
+ letter-spacing: 0.06em;
1616
+ text-transform: uppercase;
1617
+ color: rgba(0,0,0,0.35);
1618
+ }
1619
+
1620
+ /* \u2500\u2500 Table \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
1621
+
1622
+ .alive-table {
1623
+ width: 100%;
1624
+ border-collapse: collapse;
1625
+ font-size: 0.875rem;
1626
+ text-align: left;
1627
+ }
1628
+ .alive-table th {
1629
+ padding: 0.75rem 1rem;
1630
+ font-size: 0.75rem;
1631
+ font-weight: 600;
1632
+ letter-spacing: 0.04em;
1633
+ text-transform: uppercase;
1634
+ color: rgba(0,0,0,0.45);
1635
+ border-bottom: 1px solid rgba(0,0,0,0.08);
1636
+ white-space: nowrap;
1637
+ }
1638
+ .alive-table td {
1639
+ padding: 0.875rem 1rem;
1640
+ border-bottom: 1px solid rgba(0,0,0,0.05);
1641
+ color: rgba(0,0,0,0.75);
1642
+ transition: background var(--alive-duration-fast) var(--alive-ease-standard);
1643
+ }
1644
+ .alive-table tr:hover td { background: rgba(0,0,0,0.02); }
1645
+ .alive-table tr:last-child td { border-bottom: none; }
1646
+
1647
+ /* Table variants */
1648
+ .alive-table-striped tr:nth-child(even) td { background: rgba(0,0,0,0.018); }
1649
+ .alive-table-bordered td,
1650
+ .alive-table-bordered th { border: 1px solid rgba(0,0,0,0.07); }
1651
+
1652
+ /* \u2500\u2500 Chip \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
1653
+
1654
+ .alive-chip {
1655
+ display: inline-flex;
1656
+ align-items: center;
1657
+ gap: 0.375rem;
1658
+ padding: 0.3125rem 0.75rem;
1659
+ font-size: 0.8125rem;
1660
+ font-weight: 500;
1661
+ border-radius: 9999px;
1662
+ background: rgba(0,0,0,0.06);
1663
+ color: rgba(0,0,0,0.65);
1664
+ border: 1px solid rgba(0,0,0,0.1);
1665
+ cursor: default;
1666
+ user-select: none;
1667
+ transition:
1668
+ background var(--alive-duration-fast) var(--alive-ease-standard),
1669
+ border-color var(--alive-duration-fast) var(--alive-ease-standard);
1670
+ }
1671
+ .alive-chip:hover { background: rgba(0,0,0,0.09); border-color: rgba(0,0,0,0.16); }
1672
+ .alive-chip.is-selected {
1673
+ background: rgba(0,0,0,0.1);
1674
+ color: rgba(0,0,0,0.85);
1675
+ border-color: rgba(0,0,0,0.2);
1676
+ }
1677
+ .alive-chip-dismiss {
1678
+ display: inline-flex;
1679
+ align-items: center;
1680
+ justify-content: center;
1681
+ width: 1rem;
1682
+ height: 1rem;
1683
+ border-radius: 50%;
1684
+ cursor: pointer;
1685
+ opacity: 0.5;
1686
+ transition: opacity var(--alive-duration-fast) var(--alive-ease-standard), background var(--alive-duration-fast) var(--alive-ease-standard);
1687
+ }
1688
+ .alive-chip-dismiss:hover { opacity: 1; background: rgba(0,0,0,0.12); }
1689
+
1690
+ /* \u2500\u2500 Stack \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
1691
+
1692
+ .alive-stack { display: flex; }
1693
+ .alive-stack-v { flex-direction: column; }
1694
+ .alive-stack-h { flex-direction: row; }
1695
+
1696
+ /* \u2500\u2500 Container \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
1697
+
1698
+ .alive-container {
1699
+ width: 100%;
1700
+ margin-left: auto;
1701
+ margin-right: auto;
1702
+ padding-left: 1rem;
1703
+ padding-right: 1rem;
1704
+ }
1705
+ @media (min-width: 640px) { .alive-container { max-width: 640px; padding-left: 1.5rem; padding-right: 1.5rem; } }
1706
+ @media (min-width: 768px) { .alive-container { max-width: 768px; } }
1707
+ @media (min-width: 1024px) { .alive-container { max-width: 1024px; padding-left: 2rem; padding-right: 2rem; } }
1708
+ @media (min-width: 1280px) { .alive-container { max-width: 1280px; } }
1709
+ @media (min-width: 1536px) { .alive-container { max-width: 1536px; } }
1710
+
1711
+ /* \u2500\u2500 Cluster (responsive flex wrap) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
1712
+
1713
+ .alive-cluster {
1714
+ display: flex;
1715
+ flex-wrap: wrap;
1716
+ gap: 0.75rem;
1717
+ }
1718
+
1719
+ /* \u2500\u2500 Focus ring \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
1720
+
1721
+ .alive-focus-ring:focus-visible {
1722
+ outline: 2px solid rgba(0,0,0,0.75);
1723
+ outline-offset: 2px;
1724
+ }
1725
+
1726
+ /* \u2500\u2500 Overlays & surfaces \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
1727
+
1728
+ .alive-overlay {
1729
+ position: fixed;
1730
+ inset: 0;
1731
+ background: rgba(0,0,0,0.45);
1732
+ backdrop-filter: blur(4px);
1733
+ -webkit-backdrop-filter: blur(4px);
1734
+ }
1735
+
1736
+ /* \u2500\u2500 Toast / Snackbar \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
1737
+
1738
+ .alive-toast-region {
1739
+ position: fixed;
1740
+ bottom: 1.25rem;
1741
+ right: 1.25rem;
1742
+ z-index: 60;
1743
+ display: flex;
1744
+ flex-direction: column;
1745
+ gap: 0.5rem;
1746
+ pointer-events: none;
1747
+ }
1748
+ .alive-toast {
1749
+ display: flex;
1750
+ align-items: center;
1751
+ gap: 0.75rem;
1752
+ padding: 0.875rem 1.125rem;
1753
+ border-radius: 0.75rem;
1754
+ background: rgba(10,10,10,0.94);
1755
+ color: #fff;
1756
+ font-size: 0.875rem;
1757
+ font-weight: 500;
1758
+ box-shadow: 0 8px 32px rgba(0,0,0,0.2);
1759
+ border: 1px solid rgba(255,255,255,0.1);
1760
+ pointer-events: auto;
1761
+ min-width: 16rem;
1762
+ max-width: 24rem;
1763
+ animation: alive-fade-right var(--alive-duration-slow) var(--alive-ease-emphasized) both;
1764
+ }
1765
+ .alive-toast-icon { flex-shrink: 0; }
1766
+ .alive-toast-body { flex: 1; min-width: 0; }
1767
+ .alive-toast-title { font-weight: 600; }
1768
+ .alive-toast-desc { font-size: 0.8125rem; opacity: 0.7; margin-top: 0.125rem; }
1769
+ .alive-toast-close {
1770
+ flex-shrink: 0;
1771
+ opacity: 0.5;
1772
+ cursor: pointer;
1773
+ transition: opacity var(--alive-duration-fast) var(--alive-ease-standard);
1774
+ }
1775
+ .alive-toast-close:hover { opacity: 1; }
1776
+
1777
+ /* Toast variants */
1778
+ .alive-toast-success { border-color: rgba(74,222,128,0.3); }
1779
+ .alive-toast-error { border-color: rgba(239,68,68,0.3); }
1780
+ .alive-toast-warning { border-color: rgba(251,191,36,0.3); }
1781
+
1782
+ /* \u2500\u2500 Command palette \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
1783
+
1784
+ .alive-command {
1785
+ position: fixed;
1786
+ inset: 0;
1787
+ z-index: 60;
1788
+ display: flex;
1789
+ align-items: flex-start;
1790
+ justify-content: center;
1791
+ padding-top: 10vh;
1792
+ }
1793
+ .alive-command-panel {
1794
+ width: 100%;
1795
+ max-width: 38rem;
1796
+ border-radius: 1rem;
1797
+ background: #fff;
1798
+ border: 1px solid rgba(0,0,0,0.1);
1799
+ box-shadow:
1800
+ 0 24px 80px rgba(0,0,0,0.22),
1801
+ 0 8px 24px rgba(0,0,0,0.12);
1802
+ overflow: hidden;
1803
+ animation: alive-scale-up var(--alive-duration-slow) var(--alive-ease-emphasized) both;
1804
+ }
1805
+ .alive-command-input-wrap {
1806
+ display: flex;
1807
+ align-items: center;
1808
+ gap: 0.75rem;
1809
+ padding: 1rem 1.25rem;
1810
+ border-bottom: 1px solid rgba(0,0,0,0.08);
1811
+ }
1812
+ .alive-command-input {
1813
+ flex: 1;
1814
+ font-size: 1rem;
1815
+ border: none;
1816
+ outline: none;
1817
+ background: transparent;
1818
+ color: inherit;
1819
+ }
1820
+ .alive-command-list {
1821
+ max-height: 24rem;
1822
+ overflow-y: auto;
1823
+ padding: 0.375rem;
1824
+ }
1825
+ .alive-command-group-label {
1826
+ padding: 0.5rem 0.75rem 0.25rem;
1827
+ font-size: 0.6875rem;
1828
+ font-weight: 600;
1829
+ letter-spacing: 0.06em;
1830
+ text-transform: uppercase;
1831
+ color: rgba(0,0,0,0.35);
1832
+ }
1833
+ .alive-command-item {
1834
+ display: flex;
1835
+ align-items: center;
1836
+ gap: 0.75rem;
1837
+ padding: 0.625rem 0.75rem;
1838
+ border-radius: 0.5rem;
1839
+ font-size: 0.875rem;
1840
+ cursor: pointer;
1841
+ color: rgba(0,0,0,0.75);
1842
+ transition: background var(--alive-duration-fast) var(--alive-ease-standard), color var(--alive-duration-fast) var(--alive-ease-standard);
1843
+ }
1844
+ .alive-command-item:hover,
1845
+ .alive-command-item.is-active {
1846
+ background: rgba(0,0,0,0.05);
1847
+ color: rgba(0,0,0,0.9);
1848
+ }
1849
+ .alive-command-shortcut {
1850
+ margin-left: auto;
1851
+ font-size: 0.75rem;
1852
+ opacity: 0.4;
1853
+ font-family: ui-monospace, monospace;
1854
+ }
1855
+
1856
+ /* \u2500\u2500 Popover \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
1857
+
1858
+ .alive-popover {
1859
+ position: absolute;
1860
+ z-index: 50;
1861
+ padding: 0.75rem;
1862
+ border-radius: 0.75rem;
1863
+ background: #fff;
1864
+ border: 1px solid rgba(0,0,0,0.08);
1865
+ box-shadow:
1866
+ 0 8px 32px rgba(0,0,0,0.1),
1867
+ 0 2px 8px rgba(0,0,0,0.06);
1868
+ animation: alive-scale-up var(--alive-duration-fast) var(--alive-ease-emphasized) both;
1869
+ }
1870
+
1871
+ /* \u2500\u2500 Sidebar \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
1872
+
1873
+ .alive-sidebar {
1874
+ display: flex;
1875
+ flex-direction: column;
1876
+ width: 15rem;
1877
+ height: 100%;
1878
+ border-right: 1px solid rgba(0,0,0,0.07);
1879
+ background: #fafafa;
1880
+ overflow-y: auto;
1881
+ flex-shrink: 0;
1882
+ }
1883
+ .alive-sidebar-section {
1884
+ padding: 1rem 0.75rem;
1885
+ }
1886
+ .alive-sidebar-section + .alive-sidebar-section {
1887
+ border-top: 1px solid rgba(0,0,0,0.06);
1888
+ }
1889
+ .alive-sidebar-label {
1890
+ padding: 0 0.5rem 0.375rem;
1891
+ font-size: 0.6875rem;
1892
+ font-weight: 600;
1893
+ letter-spacing: 0.06em;
1894
+ text-transform: uppercase;
1895
+ color: rgba(0,0,0,0.35);
1896
+ }
1897
+ .alive-sidebar-item {
1898
+ display: flex;
1899
+ align-items: center;
1900
+ gap: 0.625rem;
1901
+ padding: 0.5rem 0.625rem;
1902
+ font-size: 0.875rem;
1903
+ font-weight: 400;
1904
+ border-radius: 0.5rem;
1905
+ color: rgba(0,0,0,0.6);
1906
+ cursor: pointer;
1907
+ text-decoration: none;
1908
+ transition: background var(--alive-duration-fast) var(--alive-ease-standard), color var(--alive-duration-fast) var(--alive-ease-standard);
1909
+ }
1910
+ .alive-sidebar-item:hover { background: rgba(0,0,0,0.05); color: rgba(0,0,0,0.85); }
1911
+ .alive-sidebar-item.is-active {
1912
+ background: rgba(0,0,0,0.08);
1913
+ color: rgba(0,0,0,0.9);
1914
+ font-weight: 500;
1915
+ }
1916
+
1917
+ /* \u2500\u2500 Utility: visually hidden (screen reader) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
1918
+ .alive-sr-only {
1919
+ position: absolute;
1920
+ width: 1px;
1921
+ height: 1px;
1922
+ padding: 0;
1923
+ margin: -1px;
1924
+ overflow: hidden;
1925
+ clip: rect(0,0,0,0);
1926
+ white-space: nowrap;
1927
+ border-width: 0;
1928
+ }
1929
+
1930
+ /* \u2500\u2500 Kbd \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
1931
+
1932
+ .alive-kbd {
1933
+ display: inline-flex;
1934
+ align-items: center;
1935
+ justify-content: center;
1936
+ padding: 0.1875rem 0.4375rem;
1937
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
1938
+ font-size: 0.75rem;
1939
+ font-weight: 500;
1940
+ line-height: 1;
1941
+ color: rgba(0,0,0,0.65);
1942
+ background: rgba(0,0,0,0.04);
1943
+ border: 1px solid rgba(0,0,0,0.14);
1944
+ border-bottom-width: 2px;
1945
+ border-radius: 0.3125rem;
1946
+ white-space: nowrap;
1947
+ user-select: none;
1948
+ }
1949
+
1950
+ /* \u2500\u2500 Form group \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
1951
+
1952
+ .alive-form-group {
1953
+ display: flex;
1954
+ flex-direction: column;
1955
+ gap: 0.375rem;
1956
+ }
1957
+ .alive-label {
1958
+ display: block;
1959
+ font-size: 0.875rem;
1960
+ font-weight: 500;
1961
+ color: rgba(0,0,0,0.8);
1962
+ }
1963
+ .alive-label-required::after {
1964
+ content: ' *';
1965
+ color: #dc2626;
1966
+ }
1967
+ .alive-helper {
1968
+ font-size: 0.8125rem;
1969
+ color: rgba(0,0,0,0.45);
1970
+ line-height: 1.4;
1971
+ }
1972
+ .alive-error-msg {
1973
+ font-size: 0.8125rem;
1974
+ color: #dc2626;
1975
+ line-height: 1.4;
1976
+ }
1977
+
1978
+ /* \u2500\u2500 Breadcrumb \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
1979
+
1980
+ .alive-breadcrumb {
1981
+ display: flex;
1982
+ align-items: center;
1983
+ flex-wrap: wrap;
1984
+ gap: 0.25rem;
1985
+ font-size: 0.875rem;
1986
+ color: rgba(0,0,0,0.45);
1987
+ list-style: none;
1988
+ margin: 0;
1989
+ padding: 0;
1990
+ }
1991
+ .alive-breadcrumb-item {
1992
+ display: flex;
1993
+ align-items: center;
1994
+ gap: 0.25rem;
1995
+ }
1996
+ .alive-breadcrumb-item a {
1997
+ color: rgba(0,0,0,0.55);
1998
+ text-decoration: none;
1999
+ transition: color var(--alive-duration-fast) var(--alive-ease-standard);
2000
+ }
2001
+ .alive-breadcrumb-item a:hover { color: rgba(0,0,0,0.9); }
2002
+ .alive-breadcrumb-item[aria-current="page"] { color: rgba(0,0,0,0.85); font-weight: 500; }
2003
+ .alive-breadcrumb-sep {
2004
+ color: rgba(0,0,0,0.25);
2005
+ user-select: none;
2006
+ font-size: 0.8125rem;
2007
+ }
2008
+
2009
+ /* \u2500\u2500 Accordion \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
2010
+
2011
+ .alive-accordion {
2012
+ display: flex;
2013
+ flex-direction: column;
2014
+ border: 1px solid rgba(0,0,0,0.08);
2015
+ border-radius: 0.75rem;
2016
+ overflow: hidden;
2017
+ }
2018
+ .alive-accordion-item {
2019
+ border-bottom: 1px solid rgba(0,0,0,0.07);
2020
+ }
2021
+ .alive-accordion-item:last-child { border-bottom: none; }
2022
+ .alive-accordion-trigger {
2023
+ display: flex;
2024
+ align-items: center;
2025
+ justify-content: space-between;
2026
+ width: 100%;
2027
+ padding: 1rem 1.25rem;
2028
+ font-size: 0.9375rem;
2029
+ font-weight: 500;
2030
+ color: rgba(0,0,0,0.8);
2031
+ background: transparent;
2032
+ border: none;
2033
+ cursor: pointer;
2034
+ text-align: left;
2035
+ gap: 0.75rem;
2036
+ transition: background var(--alive-duration-fast) var(--alive-ease-standard), color var(--alive-duration-fast) var(--alive-ease-standard);
2037
+ }
2038
+ .alive-accordion-trigger:hover { background: rgba(0,0,0,0.025); color: rgba(0,0,0,0.9); }
2039
+ .alive-accordion-icon {
2040
+ flex-shrink: 0;
2041
+ width: 1rem;
2042
+ height: 1rem;
2043
+ color: rgba(0,0,0,0.35);
2044
+ transition: transform var(--alive-duration-normal) var(--alive-ease-emphasized);
2045
+ }
2046
+ .alive-accordion-item.is-open .alive-accordion-icon { transform: rotate(180deg); }
2047
+ .alive-accordion-content {
2048
+ overflow: hidden;
2049
+ font-size: 0.875rem;
2050
+ line-height: 1.6;
2051
+ color: rgba(0,0,0,0.6);
2052
+ }
2053
+ .alive-accordion-content-inner { padding: 0 1.25rem 1.25rem; }
2054
+
2055
+ /* \u2500\u2500 JS Runtime: is-open / is-active state helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
2056
+
2057
+ /* Modal and Drawer: hidden by default, shown when .is-open is added by runtime */
2058
+ [data-alive-modal],
2059
+ [data-alive-drawer] {
2060
+ display: none;
2061
+ }
2062
+ [data-alive-modal].is-open,
2063
+ [data-alive-drawer].is-open {
2064
+ display: flex;
2065
+ }
2066
+
2067
+ /* Dropdown: hidden by default */
2068
+ [data-alive-dropdown-menu] {
2069
+ display: none;
2070
+ }
2071
+ [data-alive-dropdown-menu].is-open {
2072
+ display: block;
2073
+ }
2074
+
2075
+ /* Accordion content: collapsed by default, expanded when parent has .is-open */
2076
+ [data-alive-content] {
2077
+ display: grid;
2078
+ grid-template-rows: 0fr;
2079
+ transition: grid-template-rows var(--alive-duration-normal) var(--alive-ease-standard);
2080
+ }
2081
+ [data-alive-content] > * {
2082
+ overflow: hidden;
2083
+ }
2084
+ [data-alive-accordion-item].is-open [data-alive-content] {
2085
+ grid-template-rows: 1fr;
2086
+ }
2087
+
2088
+ /* Tabs: panels hidden by default, shown when .is-active */
2089
+ [data-alive-panel] {
2090
+ display: none;
2091
+ }
2092
+ [data-alive-panel].is-active {
2093
+ display: block;
2094
+ }
2095
+ [data-alive-tab].is-active {
2096
+ color: rgba(0,0,0,0.9);
2097
+ border-bottom-color: rgba(0,0,0,0.9);
2098
+ }
2099
+
2100
+ /* \u2500\u2500 Pagination \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
2101
+
2102
+ .alive-pagination {
2103
+ display: flex;
2104
+ align-items: center;
2105
+ gap: 0.25rem;
2106
+ list-style: none;
2107
+ margin: 0;
2108
+ padding: 0;
2109
+ }
2110
+ .alive-page-item {
2111
+ display: inline-flex;
2112
+ align-items: center;
2113
+ justify-content: center;
2114
+ min-width: 2.25rem;
2115
+ height: 2.25rem;
2116
+ padding: 0 0.625rem;
2117
+ font-size: 0.875rem;
2118
+ font-weight: 500;
2119
+ border-radius: 0.5rem;
2120
+ border: 1px solid transparent;
2121
+ color: rgba(0,0,0,0.55);
2122
+ cursor: pointer;
2123
+ background: transparent;
2124
+ text-decoration: none;
2125
+ user-select: none;
2126
+ transition:
2127
+ background var(--alive-duration-fast) var(--alive-ease-standard),
2128
+ border-color var(--alive-duration-fast) var(--alive-ease-standard),
2129
+ color var(--alive-duration-fast) var(--alive-ease-standard);
2130
+ }
2131
+ .alive-page-item:hover { background: rgba(0,0,0,0.05); color: rgba(0,0,0,0.85); }
2132
+ .alive-page-item.is-active {
2133
+ background: rgba(0,0,0,0.08);
2134
+ border-color: rgba(0,0,0,0.14);
2135
+ color: rgba(0,0,0,0.9);
2136
+ font-weight: 600;
2137
+ cursor: default;
2138
+ }
2139
+ .alive-page-item:disabled,
2140
+ .alive-page-item.is-disabled {
2141
+ opacity: 0.35;
2142
+ cursor: not-allowed;
2143
+ pointer-events: none;
2144
+ }
2145
+ .alive-page-gap {
2146
+ display: inline-flex;
2147
+ align-items: center;
2148
+ justify-content: center;
2149
+ width: 2.25rem;
2150
+ height: 2.25rem;
2151
+ font-size: 0.875rem;
2152
+ color: rgba(0,0,0,0.3);
2153
+ user-select: none;
2154
+ }
2155
+ `;
2156
+ }
2157
+ var init_base = __esm({
2158
+ "src/generator/base.ts"() {
2159
+ "use strict";
2160
+ }
2161
+ });
2162
+
2163
+ // src/generator/utils.ts
2164
+ function escapeSelector(cls) {
2165
+ let result = cls.replace(/\./g, "\\.").replace(/:/g, "\\:").replace(/\[/g, "\\[").replace(/\]/g, "\\]").replace(/\//g, "\\/").replace(/#/g, "\\#").replace(/%/g, "\\%");
2166
+ if (result.startsWith("-")) {
2167
+ result = "\\" + result;
2168
+ }
2169
+ return result;
2170
+ }
2171
+ function resolveColor(colors, name, shade) {
2172
+ if (!Object.prototype.hasOwnProperty.call(colors, name)) return null;
2173
+ const entry = colors[name];
2174
+ if (typeof entry === "string") return entry;
2175
+ if (!shade) return null;
2176
+ if (!Object.prototype.hasOwnProperty.call(entry, shade)) return null;
2177
+ return entry[shade] ?? null;
2178
+ }
2179
+ function parseVariants(cls) {
2180
+ const variants = [];
2181
+ let depth = 0;
2182
+ let current = "";
2183
+ for (const ch of cls) {
2184
+ if (ch === "[") depth++;
2185
+ else if (ch === "]") depth--;
2186
+ else if (ch === ":" && depth === 0) {
2187
+ variants.push(current);
2188
+ current = "";
2189
+ continue;
2190
+ }
2191
+ current += ch;
2192
+ }
2193
+ return { variants, base: current };
2194
+ }
2195
+ var init_utils = __esm({
2196
+ "src/generator/utils.ts"() {
2197
+ "use strict";
2198
+ }
2199
+ });
2200
+
2201
+ // src/generator/colors.ts
2202
+ function transitioned(prop) {
2203
+ return TRANSITIONED.replace("{prop}", prop);
2204
+ }
2205
+ function generateColors(classes, config) {
2206
+ const { colors } = config.theme;
2207
+ const rules = [];
2208
+ for (const cls of classes) {
2209
+ const generated = matchColor(cls, colors);
2210
+ if (generated) rules.push(generated);
2211
+ }
2212
+ return rules;
2213
+ }
2214
+ function matchColor(cls, colors) {
2215
+ const bgMatch = cls.match(/^bg-([a-z]+)(?:-(\d+))?$/);
2216
+ if (bgMatch) {
2217
+ const value = resolveColor(colors, bgMatch[1], bgMatch[2]);
2218
+ if (value) {
2219
+ return `.${cls} {
2220
+ background-color: ${value};${transitioned("background-color")}
2221
+ }`;
2222
+ }
2223
+ }
2224
+ const textColorMatch = cls.match(/^text-([a-z]+)(?:-(\d+))?$/);
2225
+ if (textColorMatch) {
2226
+ const value = resolveColor(colors, textColorMatch[1], textColorMatch[2]);
2227
+ if (value) {
2228
+ return `.${cls} {
2229
+ color: ${value};${transitioned("color")}
2230
+ }`;
2231
+ }
2232
+ }
2233
+ const borderColorMatch = cls.match(/^border-([a-z]+)(?:-(\d+))?$/);
2234
+ if (borderColorMatch) {
2235
+ const value = resolveColor(colors, borderColorMatch[1], borderColorMatch[2]);
2236
+ if (value) {
2237
+ return `.${cls} {
2238
+ border-color: ${value};${transitioned("border-color")}
2239
+ }`;
2240
+ }
2241
+ }
2242
+ const ringColorMatch = cls.match(/^ring-([a-z]+)(?:-(\d+))?$/);
2243
+ if (ringColorMatch) {
2244
+ const value = resolveColor(colors, ringColorMatch[1], ringColorMatch[2]);
2245
+ if (value) {
2246
+ return `.${cls} {
2247
+ --alive-ring-color: ${value};
2248
+ }`;
2249
+ }
2250
+ }
2251
+ const outlineColorMatch = cls.match(/^outline-([a-z]+)(?:-(\d+))?$/);
2252
+ if (outlineColorMatch) {
2253
+ const value = resolveColor(colors, outlineColorMatch[1], outlineColorMatch[2]);
2254
+ if (value) {
2255
+ return `.${cls} {
2256
+ outline-color: ${value};
2257
+ }`;
2258
+ }
2259
+ }
2260
+ const fillMatch = cls.match(/^fill-([a-z]+)(?:-(\d+))?$/);
2261
+ if (fillMatch) {
2262
+ const value = resolveColor(colors, fillMatch[1], fillMatch[2]);
2263
+ if (value) {
2264
+ return `.${cls} {
2265
+ fill: ${value};
2266
+ }`;
2267
+ }
2268
+ }
2269
+ const strokeMatch = cls.match(/^stroke-([a-z]+)(?:-(\d+))?$/);
2270
+ if (strokeMatch) {
2271
+ const value = resolveColor(colors, strokeMatch[1], strokeMatch[2]);
2272
+ if (value) {
2273
+ return `.${cls} {
2274
+ stroke: ${value};
2275
+ }`;
2276
+ }
2277
+ }
2278
+ const decorationMatch = cls.match(/^decoration-([a-z]+)(?:-(\d+))?$/);
2279
+ if (decorationMatch) {
2280
+ const value = resolveColor(colors, decorationMatch[1], decorationMatch[2]);
2281
+ if (value) {
2282
+ return `.${cls} {
2283
+ text-decoration-color: ${value};
2284
+ }`;
2285
+ }
2286
+ }
2287
+ const caretMatch = cls.match(/^caret-([a-z]+)(?:-(\d+))?$/);
2288
+ if (caretMatch) {
2289
+ const value = resolveColor(colors, caretMatch[1], caretMatch[2]);
2290
+ if (value) {
2291
+ return `.${cls} {
2292
+ caret-color: ${value};
2293
+ }`;
2294
+ }
2295
+ }
2296
+ const accentMatch = cls.match(/^accent-([a-z]+)(?:-(\d+))?$/);
2297
+ if (accentMatch) {
2298
+ const value = resolveColor(colors, accentMatch[1], accentMatch[2]);
2299
+ if (value) {
2300
+ return `.${cls} {
2301
+ accent-color: ${value};
2302
+ }`;
2303
+ }
2304
+ }
2305
+ const shadowColorMatch = cls.match(/^shadow-([a-z]+)-(\d+)$/);
2306
+ if (shadowColorMatch) {
2307
+ const value = resolveColor(colors, shadowColorMatch[1], shadowColorMatch[2]);
2308
+ if (value) {
2309
+ return `.${cls} {
2310
+ --alive-shadow-color: ${value};
2311
+ }`;
2312
+ }
2313
+ }
2314
+ const arbBgMatch = cls.match(/^bg-\[(.+)\]$/);
2315
+ if (arbBgMatch) {
2316
+ const val = arbBgMatch[1];
2317
+ const escaped = escapeSelector(cls);
2318
+ if (val.startsWith("url(") || val.startsWith("linear-gradient") || val.startsWith("radial-gradient")) {
2319
+ return `.${escaped} {
2320
+ background-image: ${val};${transitioned("background-image")}
2321
+ }`;
2322
+ }
2323
+ return `.${escaped} {
2324
+ background-color: ${val};${transitioned("background-color")}
2325
+ }`;
2326
+ }
2327
+ const arbTextMatch = cls.match(/^text-\[(.+)\]$/);
2328
+ if (arbTextMatch) {
2329
+ return `.${escapeSelector(cls)} {
2330
+ color: ${arbTextMatch[1]};${transitioned("color")}
2331
+ }`;
2332
+ }
2333
+ const arbBorderColorMatch = cls.match(/^border-\[#[0-9a-fA-F]|^border-\[rgb|^border-\[hsl|^border-\[oklch/);
2334
+ if (arbBorderColorMatch) {
2335
+ const m = cls.match(/^border-\[(.+)\]$/);
2336
+ if (m) {
2337
+ return `.${escapeSelector(cls)} {
2338
+ border-color: ${m[1]};${transitioned("border-color")}
2339
+ }`;
2340
+ }
2341
+ }
2342
+ const arbFillMatch = cls.match(/^fill-\[(.+)\]$/);
2343
+ if (arbFillMatch) {
2344
+ return `.${escapeSelector(cls)} {
2345
+ fill: ${arbFillMatch[1]};
2346
+ }`;
2347
+ }
2348
+ const arbStrokeMatch = cls.match(/^stroke-\[(.+)\]$/);
2349
+ if (arbStrokeMatch) {
2350
+ return `.${escapeSelector(cls)} {
2351
+ stroke: ${arbStrokeMatch[1]};
2352
+ }`;
2353
+ }
2354
+ return null;
2355
+ }
2356
+ var TRANSITIONED;
2357
+ var init_colors2 = __esm({
2358
+ "src/generator/colors.ts"() {
2359
+ "use strict";
2360
+ init_utils();
2361
+ TRANSITIONED = `
2362
+ transition-property: {prop};
2363
+ transition-duration: var(--alive-duration, 0ms);
2364
+ transition-timing-function: var(--alive-ease, linear);`;
2365
+ }
2366
+ });
2367
+
2368
+ // src/generator/spacing.ts
2369
+ function generateSpacing(classes, config) {
2370
+ const { spacing } = config.theme;
2371
+ const rules = [];
2372
+ for (const cls of classes) {
2373
+ const generated = matchSpacing(cls, spacing);
2374
+ if (generated) rules.push(generated);
2375
+ }
2376
+ return rules;
2377
+ }
2378
+ function has(obj, key) {
2379
+ return typeof obj[key] === "string";
2380
+ }
2381
+ function matchSpacing(cls, spacing) {
2382
+ const pMatch = cls.match(/^p-(.+)$/);
2383
+ if (pMatch && has(spacing, pMatch[1])) {
2384
+ return `.${cls} { padding: ${spacing[pMatch[1]]}; }`;
2385
+ }
2386
+ const pxMatch = cls.match(/^px-(.+)$/);
2387
+ if (pxMatch && has(spacing, pxMatch[1])) {
2388
+ return `.${cls} { padding-left: ${spacing[pxMatch[1]]}; padding-right: ${spacing[pxMatch[1]]}; }`;
2389
+ }
2390
+ const pyMatch = cls.match(/^py-(.+)$/);
2391
+ if (pyMatch && has(spacing, pyMatch[1])) {
2392
+ return `.${cls} { padding-top: ${spacing[pyMatch[1]]}; padding-bottom: ${spacing[pyMatch[1]]}; }`;
2393
+ }
2394
+ const ptMatch = cls.match(/^pt-(.+)$/);
2395
+ if (ptMatch && has(spacing, ptMatch[1])) {
2396
+ return `.${cls} { padding-top: ${spacing[ptMatch[1]]}; }`;
2397
+ }
2398
+ const prMatch = cls.match(/^pr-(.+)$/);
2399
+ if (prMatch && has(spacing, prMatch[1])) {
2400
+ return `.${cls} { padding-right: ${spacing[prMatch[1]]}; }`;
2401
+ }
2402
+ const pbMatch = cls.match(/^pb-(.+)$/);
2403
+ if (pbMatch && has(spacing, pbMatch[1])) {
2404
+ return `.${cls} { padding-bottom: ${spacing[pbMatch[1]]}; }`;
2405
+ }
2406
+ const plMatch = cls.match(/^pl-(.+)$/);
2407
+ if (plMatch && has(spacing, plMatch[1])) {
2408
+ return `.${cls} { padding-left: ${spacing[plMatch[1]]}; }`;
2409
+ }
2410
+ const mMatch = cls.match(/^m-(.+)$/);
2411
+ if (mMatch) {
2412
+ if (mMatch[1] === "auto") return `.${cls} { margin: auto; }`;
2413
+ if (has(spacing, mMatch[1])) return `.${cls} { margin: ${spacing[mMatch[1]]}; }`;
2414
+ }
2415
+ const mxMatch = cls.match(/^mx-(.+)$/);
2416
+ if (mxMatch) {
2417
+ if (mxMatch[1] === "auto") return `.${cls} { margin-left: auto; margin-right: auto; }`;
2418
+ if (has(spacing, mxMatch[1])) return `.${cls} { margin-left: ${spacing[mxMatch[1]]}; margin-right: ${spacing[mxMatch[1]]}; }`;
2419
+ }
2420
+ const myMatch = cls.match(/^my-(.+)$/);
2421
+ if (myMatch) {
2422
+ if (myMatch[1] === "auto") return `.${cls} { margin-top: auto; margin-bottom: auto; }`;
2423
+ if (has(spacing, myMatch[1])) return `.${cls} { margin-top: ${spacing[myMatch[1]]}; margin-bottom: ${spacing[myMatch[1]]}; }`;
2424
+ }
2425
+ const mtMatch = cls.match(/^mt-(.+)$/);
2426
+ if (mtMatch) {
2427
+ if (mtMatch[1] === "auto") return `.${cls} { margin-top: auto; }`;
2428
+ if (has(spacing, mtMatch[1])) return `.${cls} { margin-top: ${spacing[mtMatch[1]]}; }`;
2429
+ }
2430
+ const mrMatch = cls.match(/^mr-(.+)$/);
2431
+ if (mrMatch) {
2432
+ if (mrMatch[1] === "auto") return `.${cls} { margin-right: auto; }`;
2433
+ if (has(spacing, mrMatch[1])) return `.${cls} { margin-right: ${spacing[mrMatch[1]]}; }`;
2434
+ }
2435
+ const mbMatch = cls.match(/^mb-(.+)$/);
2436
+ if (mbMatch) {
2437
+ if (mbMatch[1] === "auto") return `.${cls} { margin-bottom: auto; }`;
2438
+ if (has(spacing, mbMatch[1])) return `.${cls} { margin-bottom: ${spacing[mbMatch[1]]}; }`;
2439
+ }
2440
+ const mlMatch = cls.match(/^ml-(.+)$/);
2441
+ if (mlMatch) {
2442
+ if (mlMatch[1] === "auto") return `.${cls} { margin-left: auto; }`;
2443
+ if (has(spacing, mlMatch[1])) return `.${cls} { margin-left: ${spacing[mlMatch[1]]}; }`;
2444
+ }
2445
+ const gapMatch = cls.match(/^gap-(.+)$/);
2446
+ if (gapMatch && has(spacing, gapMatch[1])) {
2447
+ return `.${cls} { gap: ${spacing[gapMatch[1]]}; }`;
2448
+ }
2449
+ const gapXMatch = cls.match(/^gap-x-(.+)$/);
2450
+ if (gapXMatch && has(spacing, gapXMatch[1])) {
2451
+ return `.${cls} { column-gap: ${spacing[gapXMatch[1]]}; }`;
2452
+ }
2453
+ const gapYMatch = cls.match(/^gap-y-(.+)$/);
2454
+ if (gapYMatch && has(spacing, gapYMatch[1])) {
2455
+ return `.${cls} { row-gap: ${spacing[gapYMatch[1]]}; }`;
2456
+ }
2457
+ const spaceXMatch = cls.match(/^space-x-(.+)$/);
2458
+ if (spaceXMatch && has(spacing, spaceXMatch[1])) {
2459
+ return `.${cls} > * + * { margin-left: ${spacing[spaceXMatch[1]]}; }`;
2460
+ }
2461
+ const spaceYMatch = cls.match(/^space-y-(.+)$/);
2462
+ if (spaceYMatch && has(spacing, spaceYMatch[1])) {
2463
+ return `.${cls} > * + * { margin-top: ${spacing[spaceYMatch[1]]}; }`;
2464
+ }
2465
+ const insetMatch = cls.match(/^inset-(.+)$/);
2466
+ if (insetMatch) {
2467
+ if (insetMatch[1] === "auto") return `.${cls} { inset: auto; }`;
2468
+ if (insetMatch[1] === "0") return `.${cls} { inset: 0px; }`;
2469
+ if (has(spacing, insetMatch[1])) return `.${cls} { inset: ${spacing[insetMatch[1]]}; }`;
2470
+ }
2471
+ const insetXMatch = cls.match(/^inset-x-(.+)$/);
2472
+ if (insetXMatch) {
2473
+ const val = insetXMatch[1] === "auto" ? "auto" : insetXMatch[1] === "0" ? "0px" : has(spacing, insetXMatch[1]) ? spacing[insetXMatch[1]] : void 0;
2474
+ if (val) return `.${cls} { left: ${val}; right: ${val}; }`;
2475
+ }
2476
+ const insetYMatch = cls.match(/^inset-y-(.+)$/);
2477
+ if (insetYMatch) {
2478
+ const val = insetYMatch[1] === "auto" ? "auto" : insetYMatch[1] === "0" ? "0px" : has(spacing, insetYMatch[1]) ? spacing[insetYMatch[1]] : void 0;
2479
+ if (val) return `.${cls} { top: ${val}; bottom: ${val}; }`;
2480
+ }
2481
+ const topMatch = cls.match(/^top-(.+)$/);
2482
+ if (topMatch) {
2483
+ if (topMatch[1] === "auto") return `.${cls} { top: auto; }`;
2484
+ if (topMatch[1] === "0") return `.${cls} { top: 0px; }`;
2485
+ if (has(spacing, topMatch[1])) return `.${cls} { top: ${spacing[topMatch[1]]}; }`;
2486
+ }
2487
+ const rightMatch = cls.match(/^right-(.+)$/);
2488
+ if (rightMatch) {
2489
+ if (rightMatch[1] === "auto") return `.${cls} { right: auto; }`;
2490
+ if (rightMatch[1] === "0") return `.${cls} { right: 0px; }`;
2491
+ if (has(spacing, rightMatch[1])) return `.${cls} { right: ${spacing[rightMatch[1]]}; }`;
2492
+ }
2493
+ const bottomMatch = cls.match(/^bottom-(.+)$/);
2494
+ if (bottomMatch) {
2495
+ if (bottomMatch[1] === "auto") return `.${cls} { bottom: auto; }`;
2496
+ if (bottomMatch[1] === "0") return `.${cls} { bottom: 0px; }`;
2497
+ if (has(spacing, bottomMatch[1])) return `.${cls} { bottom: ${spacing[bottomMatch[1]]}; }`;
2498
+ }
2499
+ const leftMatch = cls.match(/^left-(.+)$/);
2500
+ if (leftMatch) {
2501
+ if (leftMatch[1] === "auto") return `.${cls} { left: auto; }`;
2502
+ if (leftMatch[1] === "0") return `.${cls} { left: 0px; }`;
2503
+ if (has(spacing, leftMatch[1])) return `.${cls} { left: ${spacing[leftMatch[1]]}; }`;
2504
+ }
2505
+ const negMMatch = cls.match(/^-m-(.+)$/);
2506
+ if (negMMatch && has(spacing, negMMatch[1])) {
2507
+ return `.\\-m-${negMMatch[1]} { margin: -${spacing[negMMatch[1]]}; }`;
2508
+ }
2509
+ const negMxMatch = cls.match(/^-mx-(.+)$/);
2510
+ if (negMxMatch && has(spacing, negMxMatch[1])) {
2511
+ return `.\\-mx-${negMxMatch[1]} { margin-left: -${spacing[negMxMatch[1]]}; margin-right: -${spacing[negMxMatch[1]]}; }`;
2512
+ }
2513
+ const negMyMatch = cls.match(/^-my-(.+)$/);
2514
+ if (negMyMatch && has(spacing, negMyMatch[1])) {
2515
+ return `.\\-my-${negMyMatch[1]} { margin-top: -${spacing[negMyMatch[1]]}; margin-bottom: -${spacing[negMyMatch[1]]}; }`;
2516
+ }
2517
+ const negMtMatch = cls.match(/^-mt-(.+)$/);
2518
+ if (negMtMatch && has(spacing, negMtMatch[1])) {
2519
+ return `.\\-mt-${negMtMatch[1]} { margin-top: -${spacing[negMtMatch[1]]}; }`;
2520
+ }
2521
+ const negMrMatch = cls.match(/^-mr-(.+)$/);
2522
+ if (negMrMatch && has(spacing, negMrMatch[1])) {
2523
+ return `.\\-mr-${negMrMatch[1]} { margin-right: -${spacing[negMrMatch[1]]}; }`;
2524
+ }
2525
+ const negMbMatch = cls.match(/^-mb-(.+)$/);
2526
+ if (negMbMatch && has(spacing, negMbMatch[1])) {
2527
+ return `.\\-mb-${negMbMatch[1]} { margin-bottom: -${spacing[negMbMatch[1]]}; }`;
2528
+ }
2529
+ const negMlMatch = cls.match(/^-ml-(.+)$/);
2530
+ if (negMlMatch && has(spacing, negMlMatch[1])) {
2531
+ return `.\\-ml-${negMlMatch[1]} { margin-left: -${spacing[negMlMatch[1]]}; }`;
2532
+ }
2533
+ const negInsetMatch = cls.match(/^-inset-(.+)$/);
2534
+ if (negInsetMatch && has(spacing, negInsetMatch[1])) {
2535
+ return `.\\-inset-${negInsetMatch[1]} { inset: -${spacing[negInsetMatch[1]]}; }`;
2536
+ }
2537
+ const negInsetXMatch = cls.match(/^-inset-x-(.+)$/);
2538
+ if (negInsetXMatch && has(spacing, negInsetXMatch[1])) {
2539
+ return `.\\-inset-x-${negInsetXMatch[1]} { left: -${spacing[negInsetXMatch[1]]}; right: -${spacing[negInsetXMatch[1]]}; }`;
2540
+ }
2541
+ const negInsetYMatch = cls.match(/^-inset-y-(.+)$/);
2542
+ if (negInsetYMatch && has(spacing, negInsetYMatch[1])) {
2543
+ return `.\\-inset-y-${negInsetYMatch[1]} { top: -${spacing[negInsetYMatch[1]]}; bottom: -${spacing[negInsetYMatch[1]]}; }`;
2544
+ }
2545
+ const negTopMatch = cls.match(/^-top-(.+)$/);
2546
+ if (negTopMatch && has(spacing, negTopMatch[1])) {
2547
+ return `.\\-top-${negTopMatch[1]} { top: -${spacing[negTopMatch[1]]}; }`;
2548
+ }
2549
+ const negRightMatch = cls.match(/^-right-(.+)$/);
2550
+ if (negRightMatch && has(spacing, negRightMatch[1])) {
2551
+ return `.\\-right-${negRightMatch[1]} { right: -${spacing[negRightMatch[1]]}; }`;
2552
+ }
2553
+ const negBottomMatch = cls.match(/^-bottom-(.+)$/);
2554
+ if (negBottomMatch && has(spacing, negBottomMatch[1])) {
2555
+ return `.\\-bottom-${negBottomMatch[1]} { bottom: -${spacing[negBottomMatch[1]]}; }`;
2556
+ }
2557
+ const negLeftMatch = cls.match(/^-left-(.+)$/);
2558
+ if (negLeftMatch && has(spacing, negLeftMatch[1])) {
2559
+ return `.\\-left-${negLeftMatch[1]} { left: -${spacing[negLeftMatch[1]]}; }`;
2560
+ }
2561
+ const arbSpacingMatch = cls.match(/^(w|h|p|m|pt|pr|pb|pl|px|py|mt|mr|mb|ml|mx|my|gap|gap-x|gap-y|top|right|bottom|left|inset|inset-x|inset-y)-\[(.+)\]$/);
2562
+ if (arbSpacingMatch) {
2563
+ const [, prop, val] = arbSpacingMatch;
2564
+ const escaped = escapeSelector(cls);
2565
+ switch (prop) {
2566
+ case "w":
2567
+ return `.${escaped} { width: ${val}; }`;
2568
+ case "h":
2569
+ return `.${escaped} { height: ${val}; }`;
2570
+ case "p":
2571
+ return `.${escaped} { padding: ${val}; }`;
2572
+ case "m":
2573
+ return `.${escaped} { margin: ${val}; }`;
2574
+ case "pt":
2575
+ return `.${escaped} { padding-top: ${val}; }`;
2576
+ case "pr":
2577
+ return `.${escaped} { padding-right: ${val}; }`;
2578
+ case "pb":
2579
+ return `.${escaped} { padding-bottom: ${val}; }`;
2580
+ case "pl":
2581
+ return `.${escaped} { padding-left: ${val}; }`;
2582
+ case "px":
2583
+ return `.${escaped} { padding-left: ${val}; padding-right: ${val}; }`;
2584
+ case "py":
2585
+ return `.${escaped} { padding-top: ${val}; padding-bottom: ${val}; }`;
2586
+ case "mt":
2587
+ return `.${escaped} { margin-top: ${val}; }`;
2588
+ case "mr":
2589
+ return `.${escaped} { margin-right: ${val}; }`;
2590
+ case "mb":
2591
+ return `.${escaped} { margin-bottom: ${val}; }`;
2592
+ case "ml":
2593
+ return `.${escaped} { margin-left: ${val}; }`;
2594
+ case "mx":
2595
+ return `.${escaped} { margin-left: ${val}; margin-right: ${val}; }`;
2596
+ case "my":
2597
+ return `.${escaped} { margin-top: ${val}; margin-bottom: ${val}; }`;
2598
+ case "gap":
2599
+ return `.${escaped} { gap: ${val}; }`;
2600
+ case "gap-x":
2601
+ return `.${escaped} { column-gap: ${val}; }`;
2602
+ case "gap-y":
2603
+ return `.${escaped} { row-gap: ${val}; }`;
2604
+ case "top":
2605
+ return `.${escaped} { top: ${val}; }`;
2606
+ case "right":
2607
+ return `.${escaped} { right: ${val}; }`;
2608
+ case "bottom":
2609
+ return `.${escaped} { bottom: ${val}; }`;
2610
+ case "left":
2611
+ return `.${escaped} { left: ${val}; }`;
2612
+ case "inset":
2613
+ return `.${escaped} { inset: ${val}; }`;
2614
+ case "inset-x":
2615
+ return `.${escaped} { left: ${val}; right: ${val}; }`;
2616
+ case "inset-y":
2617
+ return `.${escaped} { top: ${val}; bottom: ${val}; }`;
2618
+ }
2619
+ }
2620
+ return null;
2621
+ }
2622
+ var init_spacing = __esm({
2623
+ "src/generator/spacing.ts"() {
2624
+ "use strict";
2625
+ init_utils();
2626
+ }
2627
+ });
2628
+
2629
+ // src/generator/typography.ts
2630
+ function hasOwn(obj, key) {
2631
+ return Object.prototype.hasOwnProperty.call(obj, key);
2632
+ }
2633
+ function generateTypography(classes, config) {
2634
+ const { fontSize, fontWeight, lineHeight } = config.theme;
2635
+ const rules = [];
2636
+ for (const cls of classes) {
2637
+ const generated = matchTypography(cls, fontSize, fontWeight, lineHeight);
2638
+ if (generated) rules.push(generated);
2639
+ }
2640
+ return rules;
2641
+ }
2642
+ function matchTypography(cls, fontSize, fontWeight, lineHeight) {
2643
+ const textSizeMatch = cls.match(/^text-(xs|sm|base|lg|xl|2xl|3xl|4xl|5xl|6xl|7xl|8xl|9xl)$/);
2644
+ if (textSizeMatch && hasOwn(fontSize, textSizeMatch[1])) {
2645
+ const [size, lh] = fontSize[textSizeMatch[1]];
2646
+ return `.${cls} {
2647
+ font-size: ${size};
2648
+ line-height: ${lh};
2649
+ }`;
2650
+ }
2651
+ const fontWeightMatch = cls.match(/^font-(thin|extralight|light|normal|medium|semibold|bold|extrabold|black)$/);
2652
+ if (fontWeightMatch && hasOwn(fontWeight, fontWeightMatch[1])) {
2653
+ return `.${cls} { font-weight: ${fontWeight[fontWeightMatch[1]]}; }`;
2654
+ }
2655
+ if (cls === "font-sans") return `.${cls} { font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; }`;
2656
+ if (cls === "font-serif") return `.${cls} { font-family: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif; }`;
2657
+ if (cls === "font-mono") return `.${cls} { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; }`;
2658
+ const leadingMatch = cls.match(/^leading-(.+)$/);
2659
+ if (leadingMatch && hasOwn(lineHeight, leadingMatch[1])) {
2660
+ return `.${cls} { line-height: ${lineHeight[leadingMatch[1]]}; }`;
2661
+ }
2662
+ const trackingMap = {
2663
+ tighter: "-0.05em",
2664
+ tight: "-0.025em",
2665
+ normal: "0em",
2666
+ wide: "0.025em",
2667
+ wider: "0.05em",
2668
+ widest: "0.1em"
2669
+ };
2670
+ const trackingMatch = cls.match(/^tracking-(.+)$/);
2671
+ if (trackingMatch && Object.prototype.hasOwnProperty.call(trackingMap, trackingMatch[1])) {
2672
+ return `.${cls} { letter-spacing: ${trackingMap[trackingMatch[1]]}; }`;
2673
+ }
2674
+ if (cls === "text-left") return `.${cls} { text-align: left; }`;
2675
+ if (cls === "text-center") return `.${cls} { text-align: center; }`;
2676
+ if (cls === "text-right") return `.${cls} { text-align: right; }`;
2677
+ if (cls === "text-justify") return `.${cls} { text-align: justify; }`;
2678
+ if (cls === "text-start") return `.${cls} { text-align: start; }`;
2679
+ if (cls === "text-end") return `.${cls} { text-align: end; }`;
2680
+ if (cls === "uppercase") return `.${cls} { text-transform: uppercase; }`;
2681
+ if (cls === "lowercase") return `.${cls} { text-transform: lowercase; }`;
2682
+ if (cls === "capitalize") return `.${cls} { text-transform: capitalize; }`;
2683
+ if (cls === "normal-case") return `.${cls} { text-transform: none; }`;
2684
+ if (cls === "underline") return `.${cls} { text-decoration-line: underline; }`;
2685
+ if (cls === "overline") return `.${cls} { text-decoration-line: overline; }`;
2686
+ if (cls === "line-through") return `.${cls} { text-decoration-line: line-through; }`;
2687
+ if (cls === "no-underline") return `.${cls} { text-decoration-line: none; }`;
2688
+ if (cls === "truncate") return `.${cls} { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }`;
2689
+ if (cls === "text-ellipsis") return `.${cls} { text-overflow: ellipsis; }`;
2690
+ if (cls === "text-clip") return `.${cls} { text-overflow: clip; }`;
2691
+ if (cls === "whitespace-normal") return `.${cls} { white-space: normal; }`;
2692
+ if (cls === "whitespace-nowrap") return `.${cls} { white-space: nowrap; }`;
2693
+ if (cls === "whitespace-pre") return `.${cls} { white-space: pre; }`;
2694
+ if (cls === "whitespace-pre-line") return `.${cls} { white-space: pre-line; }`;
2695
+ if (cls === "whitespace-pre-wrap") return `.${cls} { white-space: pre-wrap; }`;
2696
+ if (cls === "whitespace-break-spaces") return `.${cls} { white-space: break-spaces; }`;
2697
+ if (cls === "italic") return `.${cls} { font-style: italic; }`;
2698
+ if (cls === "not-italic") return `.${cls} { font-style: normal; }`;
2699
+ if (cls === "tabular-nums") return `.${cls} { font-variant-numeric: tabular-nums; }`;
2700
+ if (cls === "oldstyle-nums") return `.${cls} { font-variant-numeric: oldstyle-nums; }`;
2701
+ if (cls === "list-none") return `.${cls} { list-style-type: none; }`;
2702
+ if (cls === "list-disc") return `.${cls} { list-style-type: disc; }`;
2703
+ if (cls === "list-decimal") return `.${cls} { list-style-type: decimal; }`;
2704
+ if (cls === "break-normal") return `.${cls} { overflow-wrap: normal; word-break: normal; }`;
2705
+ if (cls === "break-words") return `.${cls} { overflow-wrap: break-word; }`;
2706
+ if (cls === "break-all") return `.${cls} { word-break: break-all; }`;
2707
+ if (cls === "break-keep") return `.${cls} { word-break: keep-all; }`;
2708
+ return null;
2709
+ }
2710
+ var init_typography = __esm({
2711
+ "src/generator/typography.ts"() {
2712
+ "use strict";
2713
+ }
2714
+ });
2715
+
2716
+ // src/generator/layout.ts
2717
+ function generateLayout(classes, _config) {
2718
+ const rules = [];
2719
+ for (const cls of classes) {
2720
+ const generated = matchLayout(cls);
2721
+ if (generated) rules.push(generated);
2722
+ }
2723
+ return rules;
2724
+ }
2725
+ function matchLayout(cls) {
2726
+ const displayMap = {
2727
+ block: "display: block;",
2728
+ inline: "display: inline;",
2729
+ "inline-block": "display: inline-block;",
2730
+ flex: "display: flex;",
2731
+ "inline-flex": "display: inline-flex;",
2732
+ grid: "display: grid;",
2733
+ "inline-grid": "display: inline-grid;",
2734
+ table: "display: table;",
2735
+ hidden: "display: none;",
2736
+ contents: "display: contents;"
2737
+ };
2738
+ if (displayMap[cls]) return `.${cls} { ${displayMap[cls]} }`;
2739
+ const posMap = {
2740
+ static: "position: static;",
2741
+ relative: "position: relative;",
2742
+ absolute: "position: absolute;",
2743
+ fixed: "position: fixed;",
2744
+ sticky: "position: sticky;"
2745
+ };
2746
+ if (posMap[cls]) return `.${cls} { ${posMap[cls]} }`;
2747
+ if (cls === "flex-row") return `.${cls} { flex-direction: row; }`;
2748
+ if (cls === "flex-row-reverse") return `.${cls} { flex-direction: row-reverse; }`;
2749
+ if (cls === "flex-col") return `.${cls} { flex-direction: column; }`;
2750
+ if (cls === "flex-col-reverse") return `.${cls} { flex-direction: column-reverse; }`;
2751
+ if (cls === "flex-wrap") return `.${cls} { flex-wrap: wrap; }`;
2752
+ if (cls === "flex-nowrap") return `.${cls} { flex-wrap: nowrap; }`;
2753
+ if (cls === "flex-wrap-reverse") return `.${cls} { flex-wrap: wrap-reverse; }`;
2754
+ if (cls === "flex-1") return `.${cls} { flex: 1 1 0%; }`;
2755
+ if (cls === "flex-auto") return `.${cls} { flex: 1 1 auto; }`;
2756
+ if (cls === "flex-initial") return `.${cls} { flex: 0 1 auto; }`;
2757
+ if (cls === "flex-none") return `.${cls} { flex: none; }`;
2758
+ if (cls === "flex-grow") return `.${cls} { flex-grow: 1; }`;
2759
+ if (cls === "flex-grow-0") return `.${cls} { flex-grow: 0; }`;
2760
+ if (cls === "flex-shrink") return `.${cls} { flex-shrink: 1; }`;
2761
+ if (cls === "flex-shrink-0") return `.${cls} { flex-shrink: 0; }`;
2762
+ if (cls === "items-start") return `.${cls} { align-items: flex-start; }`;
2763
+ if (cls === "items-end") return `.${cls} { align-items: flex-end; }`;
2764
+ if (cls === "items-center") return `.${cls} { align-items: center; }`;
2765
+ if (cls === "items-baseline") return `.${cls} { align-items: baseline; }`;
2766
+ if (cls === "items-stretch") return `.${cls} { align-items: stretch; }`;
2767
+ if (cls === "self-auto") return `.${cls} { align-self: auto; }`;
2768
+ if (cls === "self-start") return `.${cls} { align-self: flex-start; }`;
2769
+ if (cls === "self-end") return `.${cls} { align-self: flex-end; }`;
2770
+ if (cls === "self-center") return `.${cls} { align-self: center; }`;
2771
+ if (cls === "self-stretch") return `.${cls} { align-self: stretch; }`;
2772
+ if (cls === "self-baseline") return `.${cls} { align-self: baseline; }`;
2773
+ if (cls === "justify-start") return `.${cls} { justify-content: flex-start; }`;
2774
+ if (cls === "justify-end") return `.${cls} { justify-content: flex-end; }`;
2775
+ if (cls === "justify-center") return `.${cls} { justify-content: center; }`;
2776
+ if (cls === "justify-between") return `.${cls} { justify-content: space-between; }`;
2777
+ if (cls === "justify-around") return `.${cls} { justify-content: space-around; }`;
2778
+ if (cls === "justify-evenly") return `.${cls} { justify-content: space-evenly; }`;
2779
+ if (cls === "justify-stretch") return `.${cls} { justify-content: stretch; }`;
2780
+ if (cls === "justify-items-start") return `.${cls} { justify-items: start; }`;
2781
+ if (cls === "justify-items-end") return `.${cls} { justify-items: end; }`;
2782
+ if (cls === "justify-items-center") return `.${cls} { justify-items: center; }`;
2783
+ if (cls === "justify-items-stretch") return `.${cls} { justify-items: stretch; }`;
2784
+ if (cls === "justify-self-auto") return `.${cls} { justify-self: auto; }`;
2785
+ if (cls === "justify-self-start") return `.${cls} { justify-self: start; }`;
2786
+ if (cls === "justify-self-end") return `.${cls} { justify-self: end; }`;
2787
+ if (cls === "justify-self-center") return `.${cls} { justify-self: center; }`;
2788
+ if (cls === "justify-self-stretch") return `.${cls} { justify-self: stretch; }`;
2789
+ if (cls === "content-normal") return `.${cls} { align-content: normal; }`;
2790
+ if (cls === "content-center") return `.${cls} { align-content: center; }`;
2791
+ if (cls === "content-start") return `.${cls} { align-content: flex-start; }`;
2792
+ if (cls === "content-end") return `.${cls} { align-content: flex-end; }`;
2793
+ if (cls === "content-between") return `.${cls} { align-content: space-between; }`;
2794
+ if (cls === "content-around") return `.${cls} { align-content: space-around; }`;
2795
+ if (cls === "content-evenly") return `.${cls} { align-content: space-evenly; }`;
2796
+ if (cls === "content-stretch") return `.${cls} { align-content: stretch; }`;
2797
+ if (cls === "content-baseline") return `.${cls} { align-content: baseline; }`;
2798
+ const gridColsMatch = cls.match(/^grid-cols-(\d+)$/);
2799
+ if (gridColsMatch) {
2800
+ const n = parseInt(gridColsMatch[1]);
2801
+ return `.${cls} { grid-template-columns: repeat(${n}, minmax(0, 1fr)); }`;
2802
+ }
2803
+ if (cls === "grid-cols-none") return `.${cls} { grid-template-columns: none; }`;
2804
+ const gridRowsMatch = cls.match(/^grid-rows-(\d+)$/);
2805
+ if (gridRowsMatch) {
2806
+ const n = parseInt(gridRowsMatch[1]);
2807
+ return `.${cls} { grid-template-rows: repeat(${n}, minmax(0, 1fr)); }`;
2808
+ }
2809
+ if (cls === "grid-rows-none") return `.${cls} { grid-template-rows: none; }`;
2810
+ const colSpanMatch = cls.match(/^col-span-(\d+)$/);
2811
+ if (colSpanMatch) return `.${cls} { grid-column: span ${colSpanMatch[1]} / span ${colSpanMatch[1]}; }`;
2812
+ if (cls === "col-span-full") return `.${cls} { grid-column: 1 / -1; }`;
2813
+ if (cls === "col-auto") return `.${cls} { grid-column: auto; }`;
2814
+ const rowSpanMatch = cls.match(/^row-span-(\d+)$/);
2815
+ if (rowSpanMatch) return `.${cls} { grid-row: span ${rowSpanMatch[1]} / span ${rowSpanMatch[1]}; }`;
2816
+ if (cls === "row-span-full") return `.${cls} { grid-row: 1 / -1; }`;
2817
+ if (cls === "row-auto") return `.${cls} { grid-row: auto; }`;
2818
+ const colStartMatch = cls.match(/^col-start-(\d+)$/);
2819
+ if (colStartMatch) return `.${cls} { grid-column-start: ${colStartMatch[1]}; }`;
2820
+ const colEndMatch = cls.match(/^col-end-(\d+)$/);
2821
+ if (colEndMatch) return `.${cls} { grid-column-end: ${colEndMatch[1]}; }`;
2822
+ const rowStartMatch = cls.match(/^row-start-(\d+)$/);
2823
+ if (rowStartMatch) return `.${cls} { grid-row-start: ${rowStartMatch[1]}; }`;
2824
+ const rowEndMatch = cls.match(/^row-end-(\d+)$/);
2825
+ if (rowEndMatch) return `.${cls} { grid-row-end: ${rowEndMatch[1]}; }`;
2826
+ const orderMatch = cls.match(/^order-(-?\d+)$/);
2827
+ if (orderMatch) return `.${cls} { order: ${orderMatch[1]}; }`;
2828
+ if (cls === "order-first") return `.${cls} { order: -9999; }`;
2829
+ if (cls === "order-last") return `.${cls} { order: 9999; }`;
2830
+ if (cls === "order-none") return `.${cls} { order: 0; }`;
2831
+ if (cls === "float-right") return `.${cls} { float: right; }`;
2832
+ if (cls === "float-left") return `.${cls} { float: left; }`;
2833
+ if (cls === "float-none") return `.${cls} { float: none; }`;
2834
+ if (cls === "clearfix") return `.${cls}::after { content: ""; display: table; clear: both; }`;
2835
+ if (cls === "overflow-auto") return `.${cls} { overflow: auto; }`;
2836
+ if (cls === "overflow-hidden") return `.${cls} { overflow: hidden; }`;
2837
+ if (cls === "overflow-clip") return `.${cls} { overflow: clip; }`;
2838
+ if (cls === "overflow-visible") return `.${cls} { overflow: visible; }`;
2839
+ if (cls === "overflow-scroll") return `.${cls} { overflow: scroll; }`;
2840
+ if (cls === "overflow-x-auto") return `.${cls} { overflow-x: auto; }`;
2841
+ if (cls === "overflow-x-hidden") return `.${cls} { overflow-x: hidden; }`;
2842
+ if (cls === "overflow-x-scroll") return `.${cls} { overflow-x: scroll; }`;
2843
+ if (cls === "overflow-y-auto") return `.${cls} { overflow-y: auto; }`;
2844
+ if (cls === "overflow-y-hidden") return `.${cls} { overflow-y: hidden; }`;
2845
+ if (cls === "overflow-y-scroll") return `.${cls} { overflow-y: scroll; }`;
2846
+ if (cls === "visible") return `.${cls} { visibility: visible; }`;
2847
+ if (cls === "invisible") return `.${cls} { visibility: hidden; }`;
2848
+ if (cls === "collapse") return `.${cls} { visibility: collapse; }`;
2849
+ if (cls === "pointer-events-none") return `.${cls} { pointer-events: none; }`;
2850
+ if (cls === "pointer-events-auto") return `.${cls} { pointer-events: auto; }`;
2851
+ const cursorMap = {
2852
+ "cursor-auto": "auto",
2853
+ "cursor-default": "default",
2854
+ "cursor-pointer": "pointer",
2855
+ "cursor-wait": "wait",
2856
+ "cursor-text": "text",
2857
+ "cursor-move": "move",
2858
+ "cursor-not-allowed": "not-allowed",
2859
+ "cursor-grab": "grab",
2860
+ "cursor-grabbing": "grabbing",
2861
+ "cursor-crosshair": "crosshair",
2862
+ "cursor-help": "help",
2863
+ "cursor-none": "none",
2864
+ "cursor-zoom-in": "zoom-in",
2865
+ "cursor-zoom-out": "zoom-out"
2866
+ };
2867
+ if (cursorMap[cls]) return `.${cls} { cursor: ${cursorMap[cls]}; }`;
2868
+ if (cls === "select-none") return `.${cls} { user-select: none; }`;
2869
+ if (cls === "select-text") return `.${cls} { user-select: text; }`;
2870
+ if (cls === "select-all") return `.${cls} { user-select: all; }`;
2871
+ if (cls === "select-auto") return `.${cls} { user-select: auto; }`;
2872
+ if (cls === "object-contain") return `.${cls} { object-fit: contain; }`;
2873
+ if (cls === "object-cover") return `.${cls} { object-fit: cover; }`;
2874
+ if (cls === "object-fill") return `.${cls} { object-fit: fill; }`;
2875
+ if (cls === "object-none") return `.${cls} { object-fit: none; }`;
2876
+ if (cls === "object-scale-down") return `.${cls} { object-fit: scale-down; }`;
2877
+ if (cls === "aspect-auto") return `.${cls} { aspect-ratio: auto; }`;
2878
+ if (cls === "aspect-square") return `.${cls} { aspect-ratio: 1 / 1; }`;
2879
+ if (cls === "aspect-video") return `.${cls} { aspect-ratio: 16 / 9; }`;
2880
+ if (cls === "container") {
2881
+ return `.${cls} {
2882
+ width: 100%;
2883
+ margin-left: auto;
2884
+ margin-right: auto;
2885
+ }`;
2886
+ }
2887
+ if (cls === "box-border") return `.${cls} { box-sizing: border-box; }`;
2888
+ if (cls === "box-content") return `.${cls} { box-sizing: content-box; }`;
2889
+ if (cls === "isolate") return `.${cls} { isolation: isolate; }`;
2890
+ if (cls === "isolation-auto") return `.${cls} { isolation: auto; }`;
2891
+ const mixBlendMap = {
2892
+ "mix-blend-normal": "normal",
2893
+ "mix-blend-multiply": "multiply",
2894
+ "mix-blend-screen": "screen",
2895
+ "mix-blend-overlay": "overlay",
2896
+ "mix-blend-darken": "darken",
2897
+ "mix-blend-lighten": "lighten",
2898
+ "mix-blend-color-dodge": "color-dodge",
2899
+ "mix-blend-color-burn": "color-burn",
2900
+ "mix-blend-hard-light": "hard-light",
2901
+ "mix-blend-soft-light": "soft-light",
2902
+ "mix-blend-difference": "difference",
2903
+ "mix-blend-exclusion": "exclusion"
2904
+ };
2905
+ if (mixBlendMap[cls]) return `.${cls} { mix-blend-mode: ${mixBlendMap[cls]}; }`;
2906
+ if (cls === "bg-auto") return `.${cls} { background-size: auto; }`;
2907
+ if (cls === "bg-cover") return `.${cls} { background-size: cover; }`;
2908
+ if (cls === "bg-contain") return `.${cls} { background-size: contain; }`;
2909
+ if (cls === "bg-center") return `.${cls} { background-position: center; }`;
2910
+ if (cls === "bg-top") return `.${cls} { background-position: top; }`;
2911
+ if (cls === "bg-bottom") return `.${cls} { background-position: bottom; }`;
2912
+ if (cls === "bg-left") return `.${cls} { background-position: left; }`;
2913
+ if (cls === "bg-right") return `.${cls} { background-position: right; }`;
2914
+ if (cls === "bg-left-top") return `.${cls} { background-position: left top; }`;
2915
+ if (cls === "bg-left-bottom") return `.${cls} { background-position: left bottom; }`;
2916
+ if (cls === "bg-right-top") return `.${cls} { background-position: right top; }`;
2917
+ if (cls === "bg-right-bottom") return `.${cls} { background-position: right bottom; }`;
2918
+ if (cls === "bg-repeat") return `.${cls} { background-repeat: repeat; }`;
2919
+ if (cls === "bg-no-repeat") return `.${cls} { background-repeat: no-repeat; }`;
2920
+ if (cls === "bg-repeat-x") return `.${cls} { background-repeat: repeat-x; }`;
2921
+ if (cls === "bg-repeat-y") return `.${cls} { background-repeat: repeat-y; }`;
2922
+ if (cls === "bg-repeat-round") return `.${cls} { background-repeat: round; }`;
2923
+ if (cls === "bg-repeat-space") return `.${cls} { background-repeat: space; }`;
2924
+ if (cls === "bg-fixed") return `.${cls} { background-attachment: fixed; }`;
2925
+ if (cls === "bg-local") return `.${cls} { background-attachment: local; }`;
2926
+ if (cls === "bg-scroll") return `.${cls} { background-attachment: scroll; }`;
2927
+ if (cls === "bg-origin-border") return `.${cls} { background-origin: border-box; }`;
2928
+ if (cls === "bg-origin-padding") return `.${cls} { background-origin: padding-box; }`;
2929
+ if (cls === "bg-origin-content") return `.${cls} { background-origin: content-box; }`;
2930
+ if (cls === "bg-clip-border") return `.${cls} { background-clip: border-box; }`;
2931
+ if (cls === "bg-clip-padding") return `.${cls} { background-clip: padding-box; }`;
2932
+ if (cls === "bg-clip-content") return `.${cls} { background-clip: content-box; }`;
2933
+ if (cls === "bg-clip-text") return `.${cls} { background-clip: text; -webkit-background-clip: text; }`;
2934
+ return null;
2935
+ }
2936
+ var init_layout = __esm({
2937
+ "src/generator/layout.ts"() {
2938
+ "use strict";
2939
+ }
2940
+ });
2941
+
2942
+ // src/generator/sizing.ts
2943
+ function has2(obj, key) {
2944
+ return typeof obj[key] === "string";
2945
+ }
2946
+ function generateSizing(classes, config) {
2947
+ const { spacing } = config.theme;
2948
+ const rules = [];
2949
+ for (const cls of classes) {
2950
+ const generated = matchSizing(cls, spacing);
2951
+ if (generated) rules.push(generated);
2952
+ }
2953
+ return rules;
2954
+ }
2955
+ function matchSizing(cls, spacing) {
2956
+ const fractions = {
2957
+ "1/2": "50%",
2958
+ "1/3": "33.333333%",
2959
+ "2/3": "66.666667%",
2960
+ "1/4": "25%",
2961
+ "2/4": "50%",
2962
+ "3/4": "75%",
2963
+ "1/5": "20%",
2964
+ "2/5": "40%",
2965
+ "3/5": "60%",
2966
+ "4/5": "80%",
2967
+ "1/6": "16.666667%",
2968
+ "2/6": "33.333333%",
2969
+ "3/6": "50%",
2970
+ "4/6": "66.666667%",
2971
+ "5/6": "83.333333%",
2972
+ "1/12": "8.333333%",
2973
+ "2/12": "16.666667%",
2974
+ "3/12": "25%",
2975
+ "4/12": "33.333333%",
2976
+ "5/12": "41.666667%",
2977
+ "6/12": "50%",
2978
+ "7/12": "58.333333%",
2979
+ "8/12": "66.666667%",
2980
+ "9/12": "75%",
2981
+ "10/12": "83.333333%",
2982
+ "11/12": "91.666667%"
2983
+ };
2984
+ const wMatch = cls.match(/^w-(.+)$/);
2985
+ if (wMatch) {
2986
+ const key = wMatch[1];
2987
+ if (key === "auto") return `.${cls} { width: auto; }`;
2988
+ if (key === "full") return `.${cls} { width: 100%; }`;
2989
+ if (key === "screen") return `.${cls} { width: 100vw; }`;
2990
+ if (key === "svw") return `.${cls} { width: 100svw; }`;
2991
+ if (key === "min") return `.${cls} { width: min-content; }`;
2992
+ if (key === "max") return `.${cls} { width: max-content; }`;
2993
+ if (key === "fit") return `.${cls} { width: fit-content; }`;
2994
+ if (has2(fractions, key)) return `.${cls} { width: ${fractions[key]}; }`;
2995
+ if (has2(spacing, key)) return `.${cls} { width: ${spacing[key]}; }`;
2996
+ }
2997
+ const minWMatch = cls.match(/^min-w-(.+)$/);
2998
+ if (minWMatch) {
2999
+ const key = minWMatch[1];
3000
+ if (key === "0") return `.${cls} { min-width: 0px; }`;
3001
+ if (key === "full") return `.${cls} { min-width: 100%; }`;
3002
+ if (key === "min") return `.${cls} { min-width: min-content; }`;
3003
+ if (key === "max") return `.${cls} { min-width: max-content; }`;
3004
+ if (key === "fit") return `.${cls} { min-width: fit-content; }`;
3005
+ if (has2(spacing, key)) return `.${cls} { min-width: ${spacing[key]}; }`;
3006
+ }
3007
+ const maxWMap = {
3008
+ none: "none",
3009
+ xs: "20rem",
3010
+ sm: "24rem",
3011
+ md: "28rem",
3012
+ lg: "32rem",
3013
+ xl: "36rem",
3014
+ "2xl": "42rem",
3015
+ "3xl": "48rem",
3016
+ "4xl": "56rem",
3017
+ "5xl": "64rem",
3018
+ "6xl": "72rem",
3019
+ "7xl": "80rem",
3020
+ full: "100%",
3021
+ min: "min-content",
3022
+ max: "max-content",
3023
+ fit: "fit-content",
3024
+ prose: "65ch",
3025
+ "screen-sm": "640px",
3026
+ "screen-md": "768px",
3027
+ "screen-lg": "1024px",
3028
+ "screen-xl": "1280px",
3029
+ "screen-2xl": "1536px"
3030
+ };
3031
+ const maxWMatch = cls.match(/^max-w-(.+)$/);
3032
+ if (maxWMatch && has2(maxWMap, maxWMatch[1])) {
3033
+ return `.${cls} { max-width: ${maxWMap[maxWMatch[1]]}; }`;
3034
+ }
3035
+ const hMatch = cls.match(/^h-(.+)$/);
3036
+ if (hMatch) {
3037
+ const key = hMatch[1];
3038
+ if (key === "auto") return `.${cls} { height: auto; }`;
3039
+ if (key === "full") return `.${cls} { height: 100%; }`;
3040
+ if (key === "screen") return `.${cls} { height: 100vh; }`;
3041
+ if (key === "svh") return `.${cls} { height: 100svh; }`;
3042
+ if (key === "dvh") return `.${cls} { height: 100dvh; }`;
3043
+ if (key === "min") return `.${cls} { height: min-content; }`;
3044
+ if (key === "max") return `.${cls} { height: max-content; }`;
3045
+ if (key === "fit") return `.${cls} { height: fit-content; }`;
3046
+ if (has2(fractions, key)) return `.${cls} { height: ${fractions[key]}; }`;
3047
+ if (has2(spacing, key)) return `.${cls} { height: ${spacing[key]}; }`;
3048
+ }
3049
+ const minHMatch = cls.match(/^min-h-(.+)$/);
3050
+ if (minHMatch) {
3051
+ const key = minHMatch[1];
3052
+ if (key === "0") return `.${cls} { min-height: 0px; }`;
3053
+ if (key === "full") return `.${cls} { min-height: 100%; }`;
3054
+ if (key === "screen") return `.${cls} { min-height: 100vh; }`;
3055
+ if (key === "svh") return `.${cls} { min-height: 100svh; }`;
3056
+ if (key === "dvh") return `.${cls} { min-height: 100dvh; }`;
3057
+ if (key === "fit") return `.${cls} { min-height: fit-content; }`;
3058
+ if (has2(spacing, key)) return `.${cls} { min-height: ${spacing[key]}; }`;
3059
+ }
3060
+ const maxHMatch = cls.match(/^max-h-(.+)$/);
3061
+ if (maxHMatch) {
3062
+ const key = maxHMatch[1];
3063
+ if (key === "none") return `.${cls} { max-height: none; }`;
3064
+ if (key === "full") return `.${cls} { max-height: 100%; }`;
3065
+ if (key === "screen") return `.${cls} { max-height: 100vh; }`;
3066
+ if (key === "svh") return `.${cls} { max-height: 100svh; }`;
3067
+ if (key === "dvh") return `.${cls} { max-height: 100dvh; }`;
3068
+ if (key === "fit") return `.${cls} { max-height: fit-content; }`;
3069
+ if (has2(spacing, key)) return `.${cls} { max-height: ${spacing[key]}; }`;
3070
+ }
3071
+ return null;
3072
+ }
3073
+ var init_sizing = __esm({
3074
+ "src/generator/sizing.ts"() {
3075
+ "use strict";
3076
+ }
3077
+ });
3078
+
3079
+ // src/generator/effects.ts
3080
+ function has3(obj, key) {
3081
+ return typeof obj[key] === "string";
3082
+ }
3083
+ function generateEffects(classes, config) {
3084
+ const { opacity, zIndex, boxShadow, borderRadius } = config.theme;
3085
+ const rules = [];
3086
+ for (const cls of classes) {
3087
+ const generated = matchEffects(cls, opacity, zIndex, boxShadow, borderRadius);
3088
+ if (generated) rules.push(generated);
3089
+ }
3090
+ return rules;
3091
+ }
3092
+ function matchEffects(cls, opacity, zIndex, boxShadow, borderRadius) {
3093
+ const opacityMatch = cls.match(/^opacity-(.+)$/);
3094
+ if (opacityMatch && has3(opacity, opacityMatch[1])) {
3095
+ return `.${cls} {
3096
+ opacity: ${opacity[opacityMatch[1]]};
3097
+ transition-property: opacity;
3098
+ transition-duration: var(--alive-duration, 0ms);
3099
+ transition-timing-function: var(--alive-ease, linear);
3100
+ }`;
3101
+ }
3102
+ const zMatch = cls.match(/^z-(.+)$/);
3103
+ if (zMatch && has3(zIndex, zMatch[1])) {
3104
+ return `.${cls} { z-index: ${zIndex[zMatch[1]]}; }`;
3105
+ }
3106
+ const shadowMatch = cls.match(/^shadow(?:-(.+))?$/);
3107
+ if (shadowMatch) {
3108
+ const key = shadowMatch[1] ?? "DEFAULT";
3109
+ if (has3(boxShadow, key)) {
3110
+ return `.${cls} { box-shadow: ${boxShadow[key]}; }`;
3111
+ }
3112
+ if (!shadowMatch[1] && has3(boxShadow, "DEFAULT")) {
3113
+ return `.${cls} { box-shadow: ${boxShadow["DEFAULT"]}; }`;
3114
+ }
3115
+ }
3116
+ const roundedMatch = cls.match(/^rounded(?:-(.+))?$/);
3117
+ if (roundedMatch) {
3118
+ const key = roundedMatch[1] ?? "DEFAULT";
3119
+ if (has3(borderRadius, key)) return `.${cls} { border-radius: ${borderRadius[key]}; }`;
3120
+ if (!roundedMatch[1] && has3(borderRadius, "DEFAULT")) return `.${cls} { border-radius: ${borderRadius["DEFAULT"]}; }`;
3121
+ }
3122
+ const roundedTMatch = cls.match(/^rounded-t(?:-(.+))?$/);
3123
+ if (roundedTMatch) {
3124
+ const rkey = roundedTMatch[1] ?? "DEFAULT";
3125
+ const val = has3(borderRadius, rkey) ? borderRadius[rkey] : has3(borderRadius, "DEFAULT") ? borderRadius["DEFAULT"] : null;
3126
+ if (val) return `.${cls} { border-top-left-radius: ${val}; border-top-right-radius: ${val}; }`;
3127
+ }
3128
+ const roundedBMatch = cls.match(/^rounded-b(?:-(.+))?$/);
3129
+ if (roundedBMatch) {
3130
+ const rkey = roundedBMatch[1] ?? "DEFAULT";
3131
+ const val = has3(borderRadius, rkey) ? borderRadius[rkey] : has3(borderRadius, "DEFAULT") ? borderRadius["DEFAULT"] : null;
3132
+ if (val) return `.${cls} { border-bottom-left-radius: ${val}; border-bottom-right-radius: ${val}; }`;
3133
+ }
3134
+ const roundedLMatch = cls.match(/^rounded-l(?:-(.+))?$/);
3135
+ if (roundedLMatch) {
3136
+ const rkey = roundedLMatch[1] ?? "DEFAULT";
3137
+ const val = has3(borderRadius, rkey) ? borderRadius[rkey] : has3(borderRadius, "DEFAULT") ? borderRadius["DEFAULT"] : null;
3138
+ if (val) return `.${cls} { border-top-left-radius: ${val}; border-bottom-left-radius: ${val}; }`;
3139
+ }
3140
+ const roundedRMatch = cls.match(/^rounded-r(?:-(.+))?$/);
3141
+ if (roundedRMatch) {
3142
+ const rkey = roundedRMatch[1] ?? "DEFAULT";
3143
+ const val = has3(borderRadius, rkey) ? borderRadius[rkey] : has3(borderRadius, "DEFAULT") ? borderRadius["DEFAULT"] : null;
3144
+ if (val) return `.${cls} { border-top-right-radius: ${val}; border-bottom-right-radius: ${val}; }`;
3145
+ }
3146
+ if (cls === "border") return `.${cls} { border-width: 1px; border-style: solid; }`;
3147
+ if (cls === "border-0") return `.${cls} { border-width: 0px; }`;
3148
+ if (cls === "border-2") return `.${cls} { border-width: 2px; border-style: solid; }`;
3149
+ if (cls === "border-4") return `.${cls} { border-width: 4px; border-style: solid; }`;
3150
+ if (cls === "border-8") return `.${cls} { border-width: 8px; border-style: solid; }`;
3151
+ if (cls === "border-t") return `.${cls} { border-top-width: 1px; border-top-style: solid; }`;
3152
+ if (cls === "border-r") return `.${cls} { border-right-width: 1px; border-right-style: solid; }`;
3153
+ if (cls === "border-b") return `.${cls} { border-bottom-width: 1px; border-bottom-style: solid; }`;
3154
+ if (cls === "border-l") return `.${cls} { border-left-width: 1px; border-left-style: solid; }`;
3155
+ if (cls === "border-t-0") return `.${cls} { border-top-width: 0px; }`;
3156
+ if (cls === "border-r-0") return `.${cls} { border-right-width: 0px; }`;
3157
+ if (cls === "border-b-0") return `.${cls} { border-bottom-width: 0px; }`;
3158
+ if (cls === "border-l-0") return `.${cls} { border-left-width: 0px; }`;
3159
+ if (cls === "border-solid") return `.${cls} { border-style: solid; }`;
3160
+ if (cls === "border-dashed") return `.${cls} { border-style: dashed; }`;
3161
+ if (cls === "border-dotted") return `.${cls} { border-style: dotted; }`;
3162
+ if (cls === "border-double") return `.${cls} { border-style: double; }`;
3163
+ if (cls === "border-hidden") return `.${cls} { border-style: hidden; }`;
3164
+ if (cls === "border-none") return `.${cls} { border-style: none; }`;
3165
+ if (cls === "outline-none") return `.${cls} { outline: 2px solid transparent; outline-offset: 2px; }`;
3166
+ if (cls === "outline") return `.${cls} { outline-style: solid; }`;
3167
+ if (cls === "outline-dashed") return `.${cls} { outline-style: dashed; }`;
3168
+ if (cls === "outline-dotted") return `.${cls} { outline-style: dotted; }`;
3169
+ if (cls === "outline-double") return `.${cls} { outline-style: double; }`;
3170
+ const outlineWidthMatch = cls.match(/^outline-(\d+)$/);
3171
+ if (outlineWidthMatch) return `.${cls} { outline-width: ${outlineWidthMatch[1]}px; }`;
3172
+ const outlineOffsetMatch = cls.match(/^outline-offset-(\d+)$/);
3173
+ if (outlineOffsetMatch) return `.${cls} { outline-offset: ${outlineOffsetMatch[1]}px; }`;
3174
+ const ringMatch = cls.match(/^ring(?:-(\d+))?$/);
3175
+ if (ringMatch) {
3176
+ const width = ringMatch[1] ?? "3";
3177
+ return `.${cls} { box-shadow: 0 0 0 ${width}px var(--alive-ring-color, rgba(59, 130, 246, 0.5)); }`;
3178
+ }
3179
+ if (cls === "ring-inset") return `.${cls} { --alive-ring-inset: inset; }`;
3180
+ const ringOffsetMatch = cls.match(/^ring-offset-(\d+)$/);
3181
+ if (ringOffsetMatch) return `.${cls} { --alive-ring-offset: ${ringOffsetMatch[1]}px; }`;
3182
+ if (cls === "transform") return `.${cls} { transform: translateX(var(--alive-tx,0)) translateY(var(--alive-ty,0)) rotate(var(--alive-rotate,0)) scaleX(var(--alive-sx,1)) scaleY(var(--alive-sy,1)) skewX(var(--alive-skew-x,0)) skewY(var(--alive-skew-y,0)); }`;
3183
+ if (cls === "transform-none") return `.${cls} { transform: none; }`;
3184
+ const scaleMap = {
3185
+ "0": "0",
3186
+ "50": ".5",
3187
+ "75": ".75",
3188
+ "90": ".9",
3189
+ "95": ".95",
3190
+ "100": "1",
3191
+ "105": "1.05",
3192
+ "110": "1.1",
3193
+ "125": "1.25",
3194
+ "150": "1.5"
3195
+ };
3196
+ const scaleMatch = cls.match(/^scale-(\d+)$/);
3197
+ if (scaleMatch && has3(scaleMap, scaleMatch[1])) {
3198
+ return `.${cls} { transform: scale(${scaleMap[scaleMatch[1]]}); }`;
3199
+ }
3200
+ const scaleXMatch = cls.match(/^scale-x-(\d+)$/);
3201
+ if (scaleXMatch && has3(scaleMap, scaleXMatch[1])) {
3202
+ return `.${cls} { transform: scaleX(${scaleMap[scaleXMatch[1]]}); }`;
3203
+ }
3204
+ const scaleYMatch = cls.match(/^scale-y-(\d+)$/);
3205
+ if (scaleYMatch && has3(scaleMap, scaleYMatch[1])) {
3206
+ return `.${cls} { transform: scaleY(${scaleMap[scaleYMatch[1]]}); }`;
3207
+ }
3208
+ const rotateMatch = cls.match(/^-?rotate-(\d+)$/);
3209
+ if (rotateMatch) {
3210
+ const neg = cls.startsWith("-") ? "-" : "";
3211
+ return `.${cls.replace(/^-/, "\\-")} { transform: rotate(${neg}${rotateMatch[1]}deg); }`;
3212
+ }
3213
+ const translateXMatch = cls.match(/^-?translate-x-(.+)$/);
3214
+ if (translateXMatch) {
3215
+ const neg = cls.startsWith("-") ? "-" : "";
3216
+ const key = translateXMatch[1];
3217
+ const fractions = { "1/2": "50%", "full": "100%" };
3218
+ const val = fractions[key] ?? null;
3219
+ if (val) return `.${cls.replace(/^-/, "\\-")} { transform: translateX(${neg}${val}); }`;
3220
+ }
3221
+ const translateYMatch = cls.match(/^-?translate-y-(.+)$/);
3222
+ if (translateYMatch) {
3223
+ const neg = cls.startsWith("-") ? "-" : "";
3224
+ const key = translateYMatch[1];
3225
+ const fractions = { "1/2": "50%", "full": "100%" };
3226
+ const val = fractions[key] ?? null;
3227
+ if (val) return `.${cls.replace(/^-/, "\\-")} { transform: translateY(${neg}${val}); }`;
3228
+ }
3229
+ if (cls === "transition-none") return `.${cls} { transition: none; }`;
3230
+ if (cls === "transition-all") return `.${cls} { transition: all var(--alive-duration-normal) var(--alive-ease-standard); }`;
3231
+ if (cls === "transition-colors") return `.${cls} { transition: color, background-color, border-color, text-decoration-color, fill, stroke; transition-duration: var(--alive-duration-normal); transition-timing-function: var(--alive-ease-standard); }`;
3232
+ if (cls === "transition-opacity") return `.${cls} { transition: opacity; transition-duration: var(--alive-duration-normal); transition-timing-function: var(--alive-ease-standard); }`;
3233
+ if (cls === "transition-shadow") return `.${cls} { transition: box-shadow; transition-duration: var(--alive-duration-normal); transition-timing-function: var(--alive-ease-standard); }`;
3234
+ if (cls === "transition-transform") return `.${cls} { transition: transform; transition-duration: var(--alive-duration-normal); transition-timing-function: var(--alive-ease-standard); }`;
3235
+ const blurMatch = cls.match(/^blur(?:-(.+))?$/);
3236
+ if (blurMatch) {
3237
+ const blurMap = {
3238
+ none: "0",
3239
+ sm: "4px",
3240
+ DEFAULT: "8px",
3241
+ md: "12px",
3242
+ lg: "16px",
3243
+ xl: "24px",
3244
+ "2xl": "40px",
3245
+ "3xl": "64px"
3246
+ };
3247
+ const key = blurMatch[1] ?? "DEFAULT";
3248
+ if (has3(blurMap, key)) return `.${cls} { filter: blur(${blurMap[key]}); }`;
3249
+ }
3250
+ const backdropBlurMatch = cls.match(/^backdrop-blur(?:-(.+))?$/);
3251
+ if (backdropBlurMatch) {
3252
+ const blurMap = {
3253
+ none: "0",
3254
+ sm: "4px",
3255
+ DEFAULT: "8px",
3256
+ md: "12px",
3257
+ lg: "16px",
3258
+ xl: "24px",
3259
+ "2xl": "40px",
3260
+ "3xl": "64px"
3261
+ };
3262
+ const key = backdropBlurMatch[1] ?? "DEFAULT";
3263
+ if (has3(blurMap, key)) return `.${cls} { backdrop-filter: blur(${blurMap[key]}); }`;
3264
+ }
3265
+ const arbOpacityMatch = cls.match(/^opacity-\[(.+)\]$/);
3266
+ if (arbOpacityMatch) {
3267
+ const escaped = escapeSelector(cls);
3268
+ return `.${escaped} {
3269
+ opacity: ${arbOpacityMatch[1]};
3270
+ transition-property: opacity;
3271
+ transition-duration: var(--alive-duration, 0ms);
3272
+ transition-timing-function: var(--alive-ease, linear);
3273
+ }`;
3274
+ }
3275
+ const arbZMatch = cls.match(/^z-\[(.+)\]$/);
3276
+ if (arbZMatch) {
3277
+ return `.${escapeSelector(cls)} { z-index: ${arbZMatch[1]}; }`;
3278
+ }
3279
+ const arbRoundedMatch = cls.match(/^rounded-\[(.+)\]$/);
3280
+ if (arbRoundedMatch) {
3281
+ return `.${escapeSelector(cls)} { border-radius: ${arbRoundedMatch[1]}; }`;
3282
+ }
3283
+ const arbBorderMatch = cls.match(/^border-\[(.+)\]$/);
3284
+ if (arbBorderMatch) {
3285
+ return `.${escapeSelector(cls)} { border-width: ${arbBorderMatch[1]}; border-style: solid; }`;
3286
+ }
3287
+ const arbShadowMatch = cls.match(/^shadow-\[(.+)\]$/);
3288
+ if (arbShadowMatch) {
3289
+ return `.${escapeSelector(cls)} { box-shadow: ${arbShadowMatch[1]}; }`;
3290
+ }
3291
+ const arbBlurMatch = cls.match(/^blur-\[(.+)\]$/);
3292
+ if (arbBlurMatch) {
3293
+ return `.${escapeSelector(cls)} { filter: blur(${arbBlurMatch[1]}); }`;
3294
+ }
3295
+ const arbScaleMatch = cls.match(/^scale-\[(.+)\]$/);
3296
+ if (arbScaleMatch) {
3297
+ return `.${escapeSelector(cls)} { transform: scale(${arbScaleMatch[1]}); }`;
3298
+ }
3299
+ const arbRotateMatch = cls.match(/^rotate-\[(.+)\]$/);
3300
+ if (arbRotateMatch) {
3301
+ return `.${escapeSelector(cls)} { transform: rotate(${arbRotateMatch[1]}); }`;
3302
+ }
3303
+ const arbTranslateXMatch = cls.match(/^translate-x-\[(.+)\]$/);
3304
+ if (arbTranslateXMatch) {
3305
+ return `.${escapeSelector(cls)} { transform: translateX(${arbTranslateXMatch[1]}); }`;
3306
+ }
3307
+ const arbTranslateYMatch = cls.match(/^translate-y-\[(.+)\]$/);
3308
+ if (arbTranslateYMatch) {
3309
+ return `.${escapeSelector(cls)} { transform: translateY(${arbTranslateYMatch[1]}); }`;
3310
+ }
3311
+ return null;
3312
+ }
3313
+ var init_effects = __esm({
3314
+ "src/generator/effects.ts"() {
3315
+ "use strict";
3316
+ init_utils();
3317
+ }
3318
+ });
3319
+
3320
+ // src/generator/index.ts
3321
+ function generateUtilities(classes, config) {
3322
+ const variantMap = /* @__PURE__ */ new Map();
3323
+ const baseClasses = /* @__PURE__ */ new Set();
3324
+ for (const cls of classes) {
3325
+ const { variants, base } = parseVariants(cls);
3326
+ baseClasses.add(base);
3327
+ variantMap.set(cls, { base, variants, original: cls });
3328
+ }
3329
+ const generators = [
3330
+ generateColors,
3331
+ generateSpacing,
3332
+ generateTypography,
3333
+ generateLayout,
3334
+ generateSizing,
3335
+ generateEffects,
3336
+ generateAliveSpecific
3337
+ ];
3338
+ const baseRuleMap = /* @__PURE__ */ new Map();
3339
+ for (const gen of generators) {
3340
+ const rules = gen(baseClasses, config);
3341
+ for (const r of rules) {
3342
+ const selectorMatch = r.match(/^\.((?:\\.|[^ {>+~:])*)/);
3343
+ if (selectorMatch && selectorMatch[1]) {
3344
+ const key = selectorMatch[1].replace(/\\(.)/g, "$1");
3345
+ baseRuleMap.set(key, r);
3346
+ }
3347
+ }
3348
+ }
3349
+ const baseOutput = [];
3350
+ const mediaOutput = /* @__PURE__ */ new Map();
3351
+ for (const [original, { base, variants }] of variantMap) {
3352
+ const baseRule = baseRuleMap.get(base);
3353
+ if (!baseRule) continue;
3354
+ if (variants.length === 0) {
3355
+ baseOutput.push(baseRule);
3356
+ continue;
3357
+ }
3358
+ const responsiveVariants = variants.filter((v) => config.theme.screens[v]);
3359
+ const stateVariants = variants.filter((v) => !config.theme.screens[v]);
3360
+ const declMatch = baseRule.match(/\{([\s\S]*)\}/);
3361
+ if (!declMatch) continue;
3362
+ let selector = `.${escapeSelector(original)}`;
3363
+ for (const sv of stateVariants) {
3364
+ switch (sv) {
3365
+ case "hover":
3366
+ selector += ":hover";
3367
+ break;
3368
+ case "focus":
3369
+ selector += ":focus";
3370
+ break;
3371
+ case "focus-visible":
3372
+ selector += ":focus-visible";
3373
+ break;
3374
+ case "active":
3375
+ selector += ":active";
3376
+ break;
3377
+ case "disabled":
3378
+ selector += ":disabled";
3379
+ break;
3380
+ case "visited":
3381
+ selector += ":visited";
3382
+ break;
3383
+ case "first":
3384
+ selector += ":first-child";
3385
+ break;
3386
+ case "last":
3387
+ selector += ":last-child";
3388
+ break;
3389
+ case "odd":
3390
+ selector += ":nth-child(odd)";
3391
+ break;
3392
+ case "even":
3393
+ selector += ":nth-child(even)";
3394
+ break;
3395
+ case "placeholder":
3396
+ selector += "::placeholder";
3397
+ break;
3398
+ case "group-hover":
3399
+ selector = `.group:hover ${selector}`;
3400
+ break;
3401
+ case "dark":
3402
+ if (config.theme.darkMode === "class") {
3403
+ selector = `.dark ${selector}`;
3404
+ }
3405
+ break;
3406
+ }
3407
+ }
3408
+ const wrappedRule = `${selector} {${declMatch[1]}}`;
3409
+ if (responsiveVariants.length === 0) {
3410
+ if (stateVariants.includes("dark") && config.theme.darkMode === "media") {
3411
+ const mq = "@media (prefers-color-scheme: dark)";
3412
+ const existing = mediaOutput.get(mq) ?? [];
3413
+ mediaOutput.set(mq, [...existing, wrappedRule]);
3414
+ } else {
3415
+ baseOutput.push(wrappedRule);
3416
+ }
3417
+ } else {
3418
+ const screen = config.theme.screens[responsiveVariants[0]];
3419
+ const mq = `@media (min-width: ${screen})`;
3420
+ const existing = mediaOutput.get(mq) ?? [];
3421
+ mediaOutput.set(mq, [...existing, wrappedRule]);
3422
+ }
3423
+ }
3424
+ const sortedMedia = [...mediaOutput.entries()].sort((a, b) => {
3425
+ const aSize = parseInt(a[0].match(/\d+/)?.[0] ?? "0");
3426
+ const bSize = parseInt(b[0].match(/\d+/)?.[0] ?? "0");
3427
+ return aSize - bSize;
3428
+ });
3429
+ const mediaCSS = sortedMedia.map(([mq, rules]) => `${mq} {
3430
+ ${rules.map((r) => " " + r.split("\n").join("\n ")).join("\n")}
3431
+ }`).join("\n\n");
3432
+ const parts = [
3433
+ "/* AliveUI Utilities */",
3434
+ ...dedupe(baseOutput),
3435
+ mediaCSS
3436
+ ].filter(Boolean);
3437
+ return parts.join("\n\n");
3438
+ }
3439
+ function dedupe(rules) {
3440
+ const seen = /* @__PURE__ */ new Set();
3441
+ return rules.filter((r) => {
3442
+ if (seen.has(r)) return false;
3443
+ seen.add(r);
3444
+ return true;
3445
+ });
3446
+ }
3447
+ function generateAliveSpecific(classes, _config) {
3448
+ const rules = [];
3449
+ for (const cls of classes) {
3450
+ if (cls === "d1" || cls === "d2" || cls === "d3") continue;
3451
+ const aliveBasePrefixes = [
3452
+ "alive-enter",
3453
+ "alive-exit",
3454
+ "alive-loop",
3455
+ "alive-card",
3456
+ "alive-button",
3457
+ "alive-badge",
3458
+ "alive-input",
3459
+ "alive-textarea",
3460
+ "alive-select",
3461
+ "alive-checkbox",
3462
+ "alive-radio",
3463
+ "alive-switch",
3464
+ "alive-avatar",
3465
+ "alive-skeleton",
3466
+ "alive-progress",
3467
+ "alive-separator",
3468
+ "alive-alert",
3469
+ "alive-tooltip",
3470
+ "alive-modal",
3471
+ "alive-drawer",
3472
+ "alive-nav",
3473
+ "alive-tabs",
3474
+ "alive-tab",
3475
+ "alive-dropdown",
3476
+ "alive-table",
3477
+ "alive-chip",
3478
+ "alive-stack",
3479
+ "alive-container",
3480
+ "alive-cluster",
3481
+ "alive-focus",
3482
+ "alive-overlay",
3483
+ "alive-toast",
3484
+ "alive-command",
3485
+ "alive-popover",
3486
+ "alive-sidebar",
3487
+ "alive-backdrop",
3488
+ "alive-sr-only"
3489
+ ];
3490
+ if (aliveBasePrefixes.some((p) => cls === p || cls.startsWith(p + "-"))) continue;
3491
+ if (cls === "animate-none") {
3492
+ rules.push(`.${cls} { animation: none; }`);
3493
+ continue;
3494
+ }
3495
+ if (cls === "animate-spin") {
3496
+ rules.push(`.${cls} { animation: alive-spin 1s linear infinite; }`);
3497
+ continue;
3498
+ }
3499
+ if (cls === "animate-ping") {
3500
+ rules.push(`.${cls} { animation: alive-ping 1s cubic-bezier(0,0,0.2,1) infinite; }`);
3501
+ continue;
3502
+ }
3503
+ if (cls === "animate-pulse") {
3504
+ rules.push(`.${cls} { animation: alive-pulse 2s cubic-bezier(0.4,0,0.6,1) infinite; }`);
3505
+ continue;
3506
+ }
3507
+ if (cls === "animate-bounce") {
3508
+ rules.push(`.${cls} { animation: alive-bounce 1s infinite; }`);
3509
+ continue;
3510
+ }
3511
+ if (cls === "animate-shimmer") {
3512
+ rules.push(`.${cls} { animation: alive-shimmer 1.5s linear infinite; }`);
3513
+ continue;
3514
+ }
3515
+ if (cls === "ease-linear") {
3516
+ rules.push(`.${cls} { transition-timing-function: linear; }`);
3517
+ continue;
3518
+ }
3519
+ if (cls === "ease-in") {
3520
+ rules.push(`.${cls} { transition-timing-function: cubic-bezier(0.4,0,1,1); }`);
3521
+ continue;
3522
+ }
3523
+ if (cls === "ease-out") {
3524
+ rules.push(`.${cls} { transition-timing-function: cubic-bezier(0,0,0.2,1); }`);
3525
+ continue;
3526
+ }
3527
+ if (cls === "ease-in-out") {
3528
+ rules.push(`.${cls} { transition-timing-function: cubic-bezier(0.4,0,0.2,1); }`);
3529
+ continue;
3530
+ }
3531
+ if (cls === "group") {
3532
+ rules.push(`.${cls} {}`);
3533
+ continue;
3534
+ }
3535
+ const staggerMatch = cls.match(/^stagger-(\d+)$/);
3536
+ if (staggerMatch) {
3537
+ rules.push(`.${cls} { --alive-stagger-gap: ${staggerMatch[1]}ms; }`);
3538
+ continue;
3539
+ }
3540
+ const indexMatch = cls.match(/^alive-index-(\d+)$/);
3541
+ if (indexMatch) {
3542
+ rules.push(`.${cls} { --alive-index: ${indexMatch[1]}; }`);
3543
+ continue;
3544
+ }
3545
+ const durationMatch = cls.match(/^duration-(\d+)$/);
3546
+ if (durationMatch) {
3547
+ rules.push(`.${cls} { --alive-duration: ${durationMatch[1]}ms; }`);
3548
+ continue;
3549
+ }
3550
+ const delayMatch = cls.match(/^delay-(\d+)$/);
3551
+ if (delayMatch) {
3552
+ rules.push(`.${cls} { animation-delay: ${delayMatch[1]}ms; }`);
3553
+ continue;
3554
+ }
3555
+ const motionMsMatch = cls.match(/^motion-(\d+)$/);
3556
+ if (motionMsMatch) {
3557
+ rules.push(`.${cls} { --alive-duration: ${motionMsMatch[1]}ms !important; }`);
3558
+ continue;
3559
+ }
3560
+ if (cls === "divide-x") {
3561
+ rules.push(`.${cls} > * + * { border-left-width: 1px; border-left-style: solid; }`);
3562
+ continue;
3563
+ }
3564
+ if (cls === "divide-y") {
3565
+ rules.push(`.${cls} > * + * { border-top-width: 1px; border-top-style: solid; }`);
3566
+ continue;
3567
+ }
3568
+ const divideColorMatch = cls.match(/^divide-([a-z]+)(?:-(\d+))?$/);
3569
+ if (divideColorMatch) {
3570
+ rules.push(`.${cls} > * + * { border-color: inherit; }`);
3571
+ continue;
3572
+ }
3573
+ if (cls === "appearance-none") {
3574
+ rules.push(`.${cls} { appearance: none; }`);
3575
+ continue;
3576
+ }
3577
+ if (cls === "appearance-auto") {
3578
+ rules.push(`.${cls} { appearance: auto; }`);
3579
+ continue;
3580
+ }
3581
+ if (cls === "resize-none") {
3582
+ rules.push(`.${cls} { resize: none; }`);
3583
+ continue;
3584
+ }
3585
+ if (cls === "resize") {
3586
+ rules.push(`.${cls} { resize: both; }`);
3587
+ continue;
3588
+ }
3589
+ if (cls === "resize-y") {
3590
+ rules.push(`.${cls} { resize: vertical; }`);
3591
+ continue;
3592
+ }
3593
+ if (cls === "resize-x") {
3594
+ rules.push(`.${cls} { resize: horizontal; }`);
3595
+ continue;
3596
+ }
3597
+ if (cls === "snap-none") {
3598
+ rules.push(`.${cls} { scroll-snap-type: none; }`);
3599
+ continue;
3600
+ }
3601
+ if (cls === "snap-x") {
3602
+ rules.push(`.${cls} { scroll-snap-type: x mandatory; }`);
3603
+ continue;
3604
+ }
3605
+ if (cls === "snap-y") {
3606
+ rules.push(`.${cls} { scroll-snap-type: y mandatory; }`);
3607
+ continue;
3608
+ }
3609
+ if (cls === "snap-start") {
3610
+ rules.push(`.${cls} { scroll-snap-align: start; }`);
3611
+ continue;
3612
+ }
3613
+ if (cls === "snap-center") {
3614
+ rules.push(`.${cls} { scroll-snap-align: center; }`);
3615
+ continue;
3616
+ }
3617
+ if (cls === "snap-end") {
3618
+ rules.push(`.${cls} { scroll-snap-align: end; }`);
3619
+ continue;
3620
+ }
3621
+ if (cls === "pointer-events-none") {
3622
+ rules.push(`.${cls} { pointer-events: none; }`);
3623
+ continue;
3624
+ }
3625
+ if (cls === "pointer-events-auto") {
3626
+ rules.push(`.${cls} { pointer-events: auto; }`);
3627
+ continue;
3628
+ }
3629
+ if (cls === "sr-only") {
3630
+ rules.push(`.${cls} { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border-width: 0; }`);
3631
+ continue;
3632
+ }
3633
+ if (cls === "not-sr-only") {
3634
+ rules.push(`.${cls} { position: static; width: auto; height: auto; padding: 0; margin: 0; overflow: visible; clip: auto; white-space: normal; }`);
3635
+ continue;
3636
+ }
3637
+ if (cls === "will-change-auto") {
3638
+ rules.push(`.${cls} { will-change: auto; }`);
3639
+ continue;
3640
+ }
3641
+ if (cls === "will-change-transform") {
3642
+ rules.push(`.${cls} { will-change: transform; }`);
3643
+ continue;
3644
+ }
3645
+ if (cls === "will-change-opacity") {
3646
+ rules.push(`.${cls} { will-change: opacity; }`);
3647
+ continue;
3648
+ }
3649
+ const lineClampMatch = cls.match(/^line-clamp-(\d+)$/);
3650
+ if (lineClampMatch) {
3651
+ const n = lineClampMatch[1];
3652
+ rules.push(`.${cls} { overflow: hidden; display: -webkit-box; -webkit-line-clamp: ${n}; -webkit-box-orient: vertical; }`);
3653
+ continue;
3654
+ }
3655
+ if (cls === "aspect-square") {
3656
+ rules.push(`.${cls} { aspect-ratio: 1 / 1; }`);
3657
+ continue;
3658
+ }
3659
+ if (cls === "aspect-video") {
3660
+ rules.push(`.${cls} { aspect-ratio: 16 / 9; }`);
3661
+ continue;
3662
+ }
3663
+ if (cls === "aspect-auto") {
3664
+ rules.push(`.${cls} { aspect-ratio: auto; }`);
3665
+ continue;
3666
+ }
3667
+ if (cls === "object-contain") {
3668
+ rules.push(`.${cls} { object-fit: contain; }`);
3669
+ continue;
3670
+ }
3671
+ if (cls === "object-cover") {
3672
+ rules.push(`.${cls} { object-fit: cover; }`);
3673
+ continue;
3674
+ }
3675
+ if (cls === "object-fill") {
3676
+ rules.push(`.${cls} { object-fit: fill; }`);
3677
+ continue;
3678
+ }
3679
+ if (cls === "object-none") {
3680
+ rules.push(`.${cls} { object-fit: none; }`);
3681
+ continue;
3682
+ }
3683
+ if (cls === "object-scale") {
3684
+ rules.push(`.${cls} { object-fit: scale-down; }`);
3685
+ continue;
3686
+ }
3687
+ if (cls === "mix-blend-multiply") {
3688
+ rules.push(`.${cls} { mix-blend-mode: multiply; }`);
3689
+ continue;
3690
+ }
3691
+ if (cls === "mix-blend-screen") {
3692
+ rules.push(`.${cls} { mix-blend-mode: screen; }`);
3693
+ continue;
3694
+ }
3695
+ if (cls === "mix-blend-overlay") {
3696
+ rules.push(`.${cls} { mix-blend-mode: overlay; }`);
3697
+ continue;
3698
+ }
3699
+ if (cls === "mix-blend-normal") {
3700
+ rules.push(`.${cls} { mix-blend-mode: normal; }`);
3701
+ continue;
3702
+ }
3703
+ if (cls === "isolate") {
3704
+ rules.push(`.${cls} { isolation: isolate; }`);
3705
+ continue;
3706
+ }
3707
+ if (cls === "isolation-auto") {
3708
+ rules.push(`.${cls} { isolation: auto; }`);
3709
+ continue;
3710
+ }
3711
+ if (cls === "touch-auto") {
3712
+ rules.push(`.${cls} { touch-action: auto; }`);
3713
+ continue;
3714
+ }
3715
+ if (cls === "touch-none") {
3716
+ rules.push(`.${cls} { touch-action: none; }`);
3717
+ continue;
3718
+ }
3719
+ if (cls === "touch-pan-x") {
3720
+ rules.push(`.${cls} { touch-action: pan-x; }`);
3721
+ continue;
3722
+ }
3723
+ if (cls === "touch-pan-y") {
3724
+ rules.push(`.${cls} { touch-action: pan-y; }`);
3725
+ continue;
3726
+ }
3727
+ if (cls === "touch-manipulation") {
3728
+ rules.push(`.${cls} { touch-action: manipulation; }`);
3729
+ continue;
3730
+ }
3731
+ if (cls === "select-none") {
3732
+ rules.push(`.${cls} { user-select: none; }`);
3733
+ continue;
3734
+ }
3735
+ if (cls === "select-text") {
3736
+ rules.push(`.${cls} { user-select: text; }`);
3737
+ continue;
3738
+ }
3739
+ if (cls === "select-all") {
3740
+ rules.push(`.${cls} { user-select: all; }`);
3741
+ continue;
3742
+ }
3743
+ if (cls === "select-auto") {
3744
+ rules.push(`.${cls} { user-select: auto; }`);
3745
+ continue;
3746
+ }
3747
+ if (cls === "break-normal") {
3748
+ rules.push(`.${cls} { overflow-wrap: normal; word-break: normal; }`);
3749
+ continue;
3750
+ }
3751
+ if (cls === "break-words") {
3752
+ rules.push(`.${cls} { overflow-wrap: break-word; }`);
3753
+ continue;
3754
+ }
3755
+ if (cls === "break-all") {
3756
+ rules.push(`.${cls} { word-break: break-all; }`);
3757
+ continue;
3758
+ }
3759
+ if (cls === "break-keep") {
3760
+ rules.push(`.${cls} { word-break: keep-all; }`);
3761
+ continue;
3762
+ }
3763
+ }
3764
+ return rules;
3765
+ }
3766
+ var init_generator = __esm({
3767
+ "src/generator/index.ts"() {
3768
+ "use strict";
3769
+ init_base();
3770
+ init_colors2();
3771
+ init_spacing();
3772
+ init_typography();
3773
+ init_layout();
3774
+ init_sizing();
3775
+ init_effects();
3776
+ init_utils();
3777
+ }
3778
+ });
3779
+
3780
+ // src/index.ts
3781
+ var src_exports = {};
3782
+ __export(src_exports, {
3783
+ default: () => src_default,
3784
+ generateBase: () => generateBase,
3785
+ generateUtilities: () => generateUtilities,
3786
+ resolveConfig: () => resolveConfig,
3787
+ scanContent: () => scanContent
3788
+ });
3789
+ var aliveui, src_default;
3790
+ var init_src = __esm({
3791
+ "src/index.ts"() {
3792
+ "use strict";
3793
+ init_config();
3794
+ init_scanner();
3795
+ init_generator();
3796
+ init_config();
3797
+ init_generator();
3798
+ init_scanner();
3799
+ aliveui = (userConfig = {}) => {
3800
+ const config = resolveConfig(userConfig);
3801
+ return {
3802
+ postcssPlugin: "aliveui",
3803
+ async Once(root, { result, postcss }) {
3804
+ const classes = await scanContent(config);
3805
+ root.walkAtRules("aliveui", (atRule) => {
3806
+ const param = atRule.params.trim();
3807
+ if (param === "base") {
3808
+ const css = generateBase(config);
3809
+ const parsed = postcss.parse(css, { from: atRule.source?.input.file });
3810
+ atRule.replaceWith(parsed.nodes);
3811
+ } else if (param === "utilities") {
3812
+ const css = generateUtilities(classes, config);
3813
+ const parsed = postcss.parse(css, { from: atRule.source?.input.file });
3814
+ atRule.replaceWith(parsed.nodes);
3815
+ } else {
3816
+ result.warn(`Unknown @aliveui directive: "${param}". Use "base" or "utilities".`, {
3817
+ node: atRule
3818
+ });
3819
+ atRule.remove();
3820
+ }
3821
+ });
3822
+ }
3823
+ };
3824
+ };
3825
+ aliveui.postcss = true;
3826
+ src_default = aliveui;
3827
+ if (typeof module !== "undefined") {
3828
+ module.exports = aliveui;
3829
+ module.exports.default = aliveui;
3830
+ }
3831
+ }
3832
+ });
3833
+
3834
+ // src/vite.ts
3835
+ function aliveUIVite(config) {
3836
+ return {
3837
+ name: "vite-plugin-aliveui",
3838
+ config() {
3839
+ const aliveui2 = (init_src(), __toCommonJS(src_exports));
3840
+ return {
3841
+ css: {
3842
+ postcss: {
3843
+ plugins: [aliveui2.default(config)]
3844
+ }
3845
+ }
3846
+ };
3847
+ }
3848
+ };
3849
+ }
3850
+ var vite_default = aliveUIVite;
3851
+ export {
3852
+ aliveUIVite,
3853
+ vite_default as default
3854
+ };
3855
+ //# sourceMappingURL=vite.mjs.map