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