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