@cnc_cbz/usefultools-plugin-official 1.0.5 → 1.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,3211 @@
1
+ import { defineComponent, ref, computed, openBlock, createElementBlock, createCommentVNode, createElementVNode, Fragment, renderList, normalizeClass, toDisplayString, createTextVNode, withDirectives, withKeys, withModifiers, vModelText, unref, normalizeStyle } from "vue";
2
+ const _hoisted_1 = { class: "flex flex-col h-full gap-4" };
3
+ const _hoisted_2 = { class: "flex items-center gap-2" };
4
+ const _hoisted_3 = ["onClick"];
5
+ const _hoisted_4 = { class: "bg-deep-charcoal border-4 border-black rounded-xl p-4 shadow-hard" };
6
+ const _hoisted_5 = { class: "flex items-center justify-between mb-3" };
7
+ const _hoisted_6 = { class: "flex items-center gap-2" };
8
+ const _hoisted_7 = { class: "text-sm font-bold text-gray-400 uppercase tracking-wider" };
9
+ const _hoisted_8 = ["rows", "placeholder", "onKeydown"];
10
+ const _hoisted_9 = { class: "flex items-center justify-between mt-3" };
11
+ const _hoisted_10 = ["disabled"];
12
+ const _hoisted_11 = {
13
+ key: 0,
14
+ class: "px-4 py-2 bg-coral-red/20 border-2 border-coral-red rounded flex items-center gap-2 text-coral-red font-bold text-sm"
15
+ };
16
+ const _hoisted_12 = { class: "flex-1 grid grid-cols-1 lg:grid-cols-2 gap-4 min-h-0" };
17
+ const _hoisted_13 = { class: "flex flex-col gap-4 overflow-y-auto pr-1" };
18
+ const _hoisted_14 = { class: "bg-deep-charcoal border-4 border-black rounded-xl p-4 shadow-hard" };
19
+ const _hoisted_15 = { class: "flex items-center justify-between mb-2" };
20
+ const _hoisted_16 = { class: "flex gap-2" };
21
+ const _hoisted_17 = { class: "font-mono text-sm text-neon-green bg-bg-dark rounded-lg p-3 border-2 border-black overflow-auto max-h-48 whitespace-pre-wrap" };
22
+ const _hoisted_18 = { class: "bg-deep-charcoal border-4 border-black rounded-xl p-4 shadow-hard" };
23
+ const _hoisted_19 = { class: "grid grid-cols-2 gap-3" };
24
+ const _hoisted_20 = { class: "bg-bg-dark rounded-lg p-3 border-2 border-black" };
25
+ const _hoisted_21 = { class: "bg-bg-dark rounded-lg p-3 border-2 border-black" };
26
+ const _hoisted_22 = { class: "bg-bg-dark rounded-lg p-3 border-2 border-black col-span-2" };
27
+ const _hoisted_23 = { class: "flex flex-col gap-4 overflow-y-auto pr-1" };
28
+ const _hoisted_24 = { class: "bg-deep-charcoal border-4 border-black rounded-xl p-4 shadow-hard shrink-0" };
29
+ const _hoisted_25 = { class: "flex flex-wrap gap-1.5 mb-3" };
30
+ const _hoisted_26 = ["onClick"];
31
+ const _hoisted_27 = { class: "flex gap-2" };
32
+ const _hoisted_28 = { class: "bg-deep-charcoal border-4 border-black rounded-xl p-3 shadow-hard flex-1" };
33
+ const _hoisted_29 = { class: "flex items-center gap-2 mb-2 px-1" };
34
+ const _hoisted_30 = { class: "ml-1 px-2 py-0.5 bg-primary/20 text-primary text-xs font-bold rounded border border-primary/40" };
35
+ const _hoisted_31 = { class: "space-y-0.5" };
36
+ const _hoisted_32 = { class: "flex items-center gap-2" };
37
+ const _hoisted_33 = ["onUpdate:modelValue"];
38
+ const _hoisted_34 = {
39
+ key: 1,
40
+ class: "flex-1"
41
+ };
42
+ const _hoisted_35 = ["onClick"];
43
+ const _hoisted_36 = { class: "text-xs text-gray-500 pl-[22px] leading-relaxed" };
44
+ const _hoisted_37 = {
45
+ key: 0,
46
+ class: "text-center text-gray-600 text-sm py-8"
47
+ };
48
+ const _hoisted_38 = { class: "bg-deep-charcoal border-4 border-black rounded-xl p-4 shadow-hard shrink-0" };
49
+ const _hoisted_39 = { class: "flex items-center justify-between mb-2" };
50
+ const _hoisted_40 = { class: "font-mono text-sm text-neon-green bg-bg-dark rounded-lg p-3 border-2 border-black overflow-auto max-h-36 whitespace-pre-wrap" };
51
+ const _hoisted_41 = { class: "flex-1 grid grid-cols-1 lg:grid-cols-2 gap-4 min-h-0" };
52
+ const _hoisted_42 = { class: "flex items-center gap-2 h-8" };
53
+ const _hoisted_43 = { class: "text-sm font-bold text-primary uppercase tracking-wider" };
54
+ const _hoisted_44 = {
55
+ key: 0,
56
+ class: "ml-1 px-2 py-0.5 bg-neon-green/20 text-neon-green text-xs font-bold rounded border border-neon-green/40"
57
+ };
58
+ const _hoisted_45 = { class: "bg-deep-charcoal border-4 border-black rounded-xl p-3 shadow-hard flex-1" };
59
+ const _hoisted_46 = { class: "space-y-0.5" };
60
+ const _hoisted_47 = { class: "flex items-center gap-2" };
61
+ const _hoisted_48 = ["onUpdate:modelValue"];
62
+ const _hoisted_49 = {
63
+ key: 1,
64
+ class: "flex-1 font-mono text-sm text-gray-500"
65
+ };
66
+ const _hoisted_50 = {
67
+ key: 0,
68
+ class: "text-xs text-gray-500 pl-[98px] leading-relaxed"
69
+ };
70
+ const _hoisted_51 = {
71
+ key: 0,
72
+ class: "flex flex-col gap-3 overflow-y-auto pr-1"
73
+ };
74
+ const _hoisted_52 = { class: "bg-deep-charcoal border-4 border-black rounded-xl p-3 shadow-hard flex-1" };
75
+ const _hoisted_53 = { class: "space-y-0.5" };
76
+ const _hoisted_54 = { class: "flex items-center gap-2" };
77
+ const _hoisted_55 = { class: "font-mono text-sm font-bold shrink-0 min-w-[90px] text-vibrant-purple" };
78
+ const _hoisted_56 = ["onUpdate:modelValue"];
79
+ const _hoisted_57 = {
80
+ key: 1,
81
+ class: "flex-1 font-mono text-sm text-gray-500"
82
+ };
83
+ const _hoisted_58 = {
84
+ key: 0,
85
+ class: "text-xs text-gray-500 pl-[98px] leading-relaxed"
86
+ };
87
+ const dockerSample = `docker run -d --name my-nginx -p 8080:80 -v /data/html:/usr/share/nginx/html:ro -e NGINX_HOST=example.com --restart unless-stopped --memory 512m --cpus 1.5 --network my-net nginx:alpine`;
88
+ const composeSample = `version: "3.8"
89
+ services:
90
+ web:
91
+ image: nginx:alpine
92
+ ports:
93
+ - "8080:80"
94
+ volumes:
95
+ - ./html:/usr/share/nginx/html:ro
96
+ depends_on:
97
+ - api
98
+ restart: unless-stopped
99
+ networks:
100
+ - frontend
101
+ api:
102
+ build:
103
+ context: ./api
104
+ dockerfile: Dockerfile
105
+ ports:
106
+ - "3000:3000"
107
+ environment:
108
+ - NODE_ENV=production
109
+ - DB_HOST=db
110
+ depends_on:
111
+ - db
112
+ networks:
113
+ - frontend
114
+ - backend
115
+ db:
116
+ image: postgres:16-alpine
117
+ volumes:
118
+ - db-data:/var/lib/postgresql/data
119
+ environment:
120
+ - POSTGRES_DB=myapp
121
+ - POSTGRES_USER=admin
122
+ restart: unless-stopped
123
+ networks:
124
+ - backend
125
+ volumes:
126
+ db-data:
127
+ networks:
128
+ frontend:
129
+ backend:`;
130
+ const _sfc_main = /* @__PURE__ */ defineComponent({
131
+ __name: "index",
132
+ setup(__props) {
133
+ const activeTab = ref("docker");
134
+ const rawInput = ref("");
135
+ const dockerEditMode = ref(false);
136
+ const composeEditMode = ref(false);
137
+ const copyField = ref("");
138
+ let argIdCounter = 0;
139
+ const dkSubCommand = ref("run");
140
+ const dkImage = ref("");
141
+ const dkContainerCmd = ref("");
142
+ const dkArgs = ref([]);
143
+ const dockerError = ref("");
144
+ const showAddArg = ref(false);
145
+ const newArgFlag = ref("");
146
+ const newArgValue = ref("");
147
+ const cServices = ref([]);
148
+ const cTopLevel = ref([]);
149
+ const composeError = ref("");
150
+ const booleanFlags = /* @__PURE__ */ new Set(["--rm", "--privileged", "--init", "-d", "-i", "-t", "-it"]);
151
+ const dockerFlagDesc = {
152
+ "-d": { desc: "后台运行容器,不占用当前终端(detached 模式)", category: "basic" },
153
+ "--detach": { desc: "后台运行容器,不占用当前终端(detached 模式)", category: "basic" },
154
+ "-it": { desc: "交互式终端,-i 保持输入流 + -t 分配伪终端,常用于进入容器 shell", category: "basic" },
155
+ "-i": { desc: "保持 STDIN 打开,允许向容器发送输入", category: "basic" },
156
+ "-t": { desc: "分配伪终端(TTY),使输出带颜色和格式", category: "basic" },
157
+ "--name": { desc: "指定容器名称,方便后续通过名称管理容器", category: "basic" },
158
+ "--rm": { desc: "容器停止后自动删除,适合临时任务", category: "basic" },
159
+ "--restart": { desc: "重启策略:no(不重启) | always(总是) | on-failure[:次数] | unless-stopped", category: "basic" },
160
+ "--privileged": { desc: "赋予容器几乎等同宿主机的权限,慎用", category: "basic" },
161
+ "--init": { desc: "使用 tini 作为 PID 1 进程,正确处理信号和僵尸进程", category: "basic" },
162
+ "-p": { desc: "端口映射,格式:宿主机端口:容器端口,如 8080:80 表示访问宿主机 8080 转发到容器 80", category: "network" },
163
+ "--publish": { desc: "端口映射,格式:宿主机端口:容器端口,如 8080:80 表示访问宿主机 8080 转发到容器 80", category: "network" },
164
+ "--network": { desc: "将容器连接到指定 Docker 网络,同网络内的容器可通过容器名互访", category: "network" },
165
+ "--hostname": { desc: "设置容器内部的主机名(/etc/hostname)", category: "network" },
166
+ "-h": { desc: "设置容器内部的主机名(/etc/hostname)", category: "network" },
167
+ "--dns": { desc: "自定义 DNS 服务器地址,覆盖容器默认 DNS", category: "network" },
168
+ "--link": { desc: "链接到另一个容器(已弃用,建议使用 --network 替代)", category: "network" },
169
+ "--add-host": { desc: "添加自定义 host 映射到容器 /etc/hosts,格式:域名:IP", category: "network" },
170
+ "-v": { desc: "挂载卷,格式:宿主机路径:容器路径[:选项],如 /data:/app:ro 表示只读挂载", category: "volume" },
171
+ "--volume": { desc: "挂载卷,格式:宿主机路径:容器路径[:选项],如 /data:/app:ro 表示只读挂载", category: "volume" },
172
+ "--mount": { desc: "挂载(推荐语法),type=bind|volume|tmpfs,source=源,target=目标", category: "volume" },
173
+ "--tmpfs": { desc: "挂载临时内存文件系统到指定路径,容器停止后数据丢失", category: "volume" },
174
+ "-e": { desc: "设置环境变量,格式:KEY=VALUE,容器内可通过 $KEY 访问", category: "env" },
175
+ "--env": { desc: "设置环境变量,格式:KEY=VALUE,容器内可通过 $KEY 访问", category: "env" },
176
+ "--env-file": { desc: "从文件批量读取环境变量,每行一个 KEY=VALUE", category: "env" },
177
+ "-w": { desc: "设置容器内的工作目录,CMD/ENTRYPOINT 将在此目录下执行", category: "env" },
178
+ "--workdir": { desc: "设置容器内的工作目录,CMD/ENTRYPOINT 将在此目录下执行", category: "env" },
179
+ "-u": { desc: "指定容器内运行进程的用户,格式:用户名或 UID[:GID]", category: "env" },
180
+ "--user": { desc: "指定容器内运行进程的用户,格式:用户名或 UID[:GID]", category: "env" },
181
+ "-m": { desc: "内存上限,如 512m、1g,超出后容器可能被 OOM Kill", category: "resource" },
182
+ "--memory": { desc: "内存上限,如 512m、1g,超出后容器可能被 OOM Kill", category: "resource" },
183
+ "--memory-swap": { desc: "内存+交换空间总上限,设为 -1 表示不限制交换空间", category: "resource" },
184
+ "--cpus": { desc: "CPU 核数上限,如 1.5 表示最多使用 1.5 个核心", category: "resource" },
185
+ "--cpu-shares": { desc: "CPU 时间片权重(相对值),默认 1024,值越大分配越多", category: "resource" },
186
+ "--gpus": { desc: "GPU 分配,all 表示全部,或指定数量如 2", category: "resource" },
187
+ "--shm-size": { desc: "共享内存 /dev/shm 大小,默认 64m,某些应用(如 Chrome)需要更大", category: "resource" },
188
+ "--log-driver": { desc: "日志驱动:json-file(默认) | syslog | none | fluentd 等", category: "other" },
189
+ "--log-opt": { desc: "日志选项,如 max-size=10m max-file=3 限制日志大小和数量", category: "other" },
190
+ "--label": { desc: "设置容器元数据标签,格式:key=value,用于组织和筛选", category: "other" },
191
+ "-l": { desc: "设置容器元数据标签,格式:key=value,用于组织和筛选", category: "other" },
192
+ "--cap-add": { desc: "添加 Linux capability,如 NET_ADMIN、SYS_PTRACE", category: "other" },
193
+ "--cap-drop": { desc: "移除 Linux capability,ALL 可移除全部后按需添加", category: "other" },
194
+ "--security-opt": { desc: "安全选项,如 no-new-privileges、apparmor/seccomp 配置", category: "other" },
195
+ "--entrypoint": { desc: "覆盖镜像默认入口点,如改为 /bin/sh 进行调试", category: "other" },
196
+ "--pid": { desc: "PID 命名空间,host 表示与宿主机共享进程空间", category: "other" },
197
+ "--ipc": { desc: "IPC 命名空间,host 或 shareable,用于进程间通信", category: "other" },
198
+ "--platform": { desc: "指定目标平台架构,如 linux/amd64、linux/arm64", category: "other" },
199
+ "--pull": { desc: "镜像拉取策略:always(总是拉取) | missing(本地没有才拉) | never(不拉取)", category: "other" }
200
+ };
201
+ const composeFieldDesc = {
202
+ image: "使用的 Docker 镜像及标签,如 nginx:alpine",
203
+ build: "构建配置,可以是 Dockerfile 路径或包含 context/dockerfile 的对象",
204
+ context: "构建上下文路径,Docker 会将此目录发送给守护进程",
205
+ dockerfile: "Dockerfile 文件路径,相对于 context",
206
+ ports: "端口映射,格式:宿主机端口:容器端口,如 8080:80",
207
+ volumes: "卷挂载,格式:宿主机路径:容器路径[:选项],或命名卷",
208
+ environment: "环境变量,格式:KEY=VALUE,容器内可通过 $KEY 访问",
209
+ env_file: "从文件批量加载环境变量,每行一个 KEY=VALUE",
210
+ networks: "连接到的 Docker 网络,同网络内服务可通过服务名互访",
211
+ depends_on: "服务启动依赖,确保依赖服务先启动(不等待就绪)",
212
+ restart: "重启策略:no | always | on-failure | unless-stopped",
213
+ command: "覆盖镜像默认的 CMD 启动命令",
214
+ entrypoint: "覆盖镜像默认的 ENTRYPOINT 入口点",
215
+ container_name: "指定容器名称,不设则自动生成",
216
+ working_dir: "容器内工作目录,CMD 将在此目录下执行",
217
+ user: "运行进程的用户,格式:用户名或 UID[:GID]",
218
+ privileged: "特权模式,赋予容器几乎等同宿主机的权限",
219
+ deploy: "部署配置,包含副本数、资源限制、更新策略等",
220
+ replicas: "服务副本数量,用于水平扩展",
221
+ resources: "资源限制配置,包含 limits(上限)和 reservations(预留)",
222
+ limits: "资源上限,超出后可能被 OOM Kill 或限流",
223
+ reservations: "资源预留,确保服务至少获得的资源量",
224
+ cpus: 'CPU 核数限制,如 "2.0" 表示最多 2 个核心',
225
+ memory: "内存限制,如 512M、1G",
226
+ healthcheck: "健康检查配置,Docker 定期执行以判断容器是否健康",
227
+ test: '健康检查命令,如 ["CMD", "curl", "-f", "http://localhost"]',
228
+ interval: "健康检查间隔时间,如 30s、1m",
229
+ timeout: "单次检查超时时间,超时视为失败",
230
+ retries: "连续失败多少次后标记为 unhealthy",
231
+ logging: "日志配置,指定驱动和选项",
232
+ driver: "日志/网络驱动类型",
233
+ options: "驱动选项,如日志的 max-size、max-file",
234
+ labels: "元数据标签,格式 key=value,用于组织和筛选",
235
+ expose: "暴露端口,仅容器间可见,不映射到宿主机",
236
+ extra_hosts: "添加自定义 host 映射到 /etc/hosts,格式:域名:IP",
237
+ dns: "自定义 DNS 服务器地址",
238
+ cap_add: "添加 Linux capability,如 NET_ADMIN",
239
+ cap_drop: "移除 Linux capability,ALL 可移除全部",
240
+ security_opt: "安全选项,如 no-new-privileges",
241
+ tmpfs: "挂载临时内存文件系统,容器停止后数据丢失",
242
+ shm_size: "共享内存 /dev/shm 大小,默认 64m",
243
+ stdin_open: "保持 STDIN 打开,等同 docker run -i",
244
+ tty: "分配伪终端,等同 docker run -t",
245
+ platform: "目标平台架构,如 linux/amd64",
246
+ profiles: "配置文件标签,仅在指定 profile 时启动该服务",
247
+ configs: "Docker 配置对象,用于非敏感配置数据",
248
+ secrets: "Docker 密钥对象,用于敏感数据如密码、证书"
249
+ };
250
+ const catMeta = {
251
+ basic: { label: "基础", bg: "bg-electric-blue", text: "text-electric-blue" },
252
+ network: { label: "网络", bg: "bg-neon-green", text: "text-neon-green" },
253
+ volume: { label: "存储", bg: "bg-vibrant-purple", text: "text-vibrant-purple" },
254
+ env: { label: "环境", bg: "bg-primary", text: "text-primary" },
255
+ resource: { label: "资源", bg: "bg-coral-red", text: "text-coral-red" },
256
+ other: { label: "其他", bg: "bg-hot-pink", text: "text-hot-pink" }
257
+ };
258
+ async function copyText(text, field) {
259
+ await navigator.clipboard.writeText(text);
260
+ copyField.value = field;
261
+ setTimeout(() => {
262
+ copyField.value = "";
263
+ }, 1200);
264
+ }
265
+ function tokenize(input) {
266
+ const merged = input.replace(/\\\s*\n/g, " ").replace(/`\s*\n/g, " ").trim();
267
+ const tokens = [];
268
+ let cur = "", inS = false, inD = false;
269
+ for (let i = 0; i < merged.length; i++) {
270
+ const c = merged[i];
271
+ if (c === "\\" && i + 1 < merged.length && inD) {
272
+ cur += merged[++i];
273
+ continue;
274
+ }
275
+ if (c === "'" && !inD) {
276
+ inS = !inS;
277
+ continue;
278
+ }
279
+ if (c === '"' && !inS) {
280
+ inD = !inD;
281
+ continue;
282
+ }
283
+ if (/\s/.test(c) && !inS && !inD) {
284
+ if (cur) {
285
+ tokens.push(cur);
286
+ cur = "";
287
+ }
288
+ continue;
289
+ }
290
+ cur += c;
291
+ }
292
+ if (cur) tokens.push(cur);
293
+ return tokens;
294
+ }
295
+ function makeArg(flag, value) {
296
+ const info = dockerFlagDesc[flag];
297
+ return {
298
+ id: argIdCounter++,
299
+ flag,
300
+ value,
301
+ desc: (info == null ? void 0 : info.desc) ?? "",
302
+ category: (info == null ? void 0 : info.category) ?? "other",
303
+ noValue: booleanFlags.has(flag)
304
+ };
305
+ }
306
+ function parseAndEdit() {
307
+ const raw = rawInput.value.trim();
308
+ if (!raw) return;
309
+ const tokens = tokenize(raw);
310
+ let idx = 0;
311
+ if (tokens[idx] === "sudo") idx++;
312
+ if (tokens[idx] !== "docker") {
313
+ dockerError.value = `不是 Docker 命令: "${tokens[idx]}"`;
314
+ return;
315
+ }
316
+ idx++;
317
+ dkSubCommand.value = tokens[idx] ?? "run";
318
+ idx++;
319
+ const args = [];
320
+ let image = "", containerCmd = [], imageFound = false;
321
+ const shortWithVal = /* @__PURE__ */ new Set(["-p", "-v", "-e", "-w", "-u", "-m", "-h", "-l"]);
322
+ while (idx < tokens.length) {
323
+ const tok = tokens[idx];
324
+ if (tok.startsWith("--")) {
325
+ if (tok.includes("=")) {
326
+ const eq = tok.indexOf("=");
327
+ args.push(makeArg(tok.substring(0, eq), tok.substring(eq + 1)));
328
+ } else if (booleanFlags.has(tok)) {
329
+ args.push(makeArg(tok, ""));
330
+ } else {
331
+ const nv = idx + 1 < tokens.length && !tokens[idx + 1].startsWith("-") ? tokens[++idx] : "";
332
+ args.push(makeArg(tok, nv));
333
+ }
334
+ } else if (tok.startsWith("-") && tok.length > 1) {
335
+ if (tok === "-it" || tok === "-ti") {
336
+ args.push(makeArg("-it", ""));
337
+ } else if (shortWithVal.has(tok)) {
338
+ args.push(makeArg(tok, idx + 1 < tokens.length ? tokens[++idx] : ""));
339
+ } else if (tok.length > 2) {
340
+ for (const c of tok.substring(1)) {
341
+ const f = `-${c}`;
342
+ args.push(makeArg(f, ""));
343
+ }
344
+ } else {
345
+ args.push(makeArg(tok, ""));
346
+ }
347
+ } else if (!imageFound && ["run", "pull", "create"].includes(dkSubCommand.value)) {
348
+ image = tok;
349
+ imageFound = true;
350
+ } else if (imageFound) {
351
+ containerCmd.push(tok);
352
+ } else {
353
+ containerCmd.push(tok);
354
+ }
355
+ idx++;
356
+ }
357
+ dkImage.value = image;
358
+ dkContainerCmd.value = containerCmd.join(" ");
359
+ dkArgs.value = args;
360
+ dockerError.value = "";
361
+ dockerEditMode.value = true;
362
+ }
363
+ const generatedCommand = computed(() => {
364
+ const parts = ["docker", dkSubCommand.value];
365
+ for (const a of dkArgs.value) {
366
+ if (a.noValue) {
367
+ parts.push(a.flag);
368
+ } else if (a.value) {
369
+ const v = a.value.includes(" ") ? `"${a.value}"` : a.value;
370
+ parts.push(a.flag, v);
371
+ }
372
+ }
373
+ if (dkImage.value) parts.push(dkImage.value);
374
+ if (dkContainerCmd.value.trim()) parts.push(...dkContainerCmd.value.trim().split(/\s+/));
375
+ return parts.join(" ");
376
+ });
377
+ const generatedMultiline = computed(() => {
378
+ const lines = [`docker ${dkSubCommand.value}`];
379
+ for (const a of dkArgs.value) {
380
+ if (a.noValue) lines.push(` ${a.flag}`);
381
+ else if (a.value) {
382
+ const v = a.value.includes(" ") ? `"${a.value}"` : a.value;
383
+ lines.push(` ${a.flag} ${v}`);
384
+ }
385
+ }
386
+ if (dkImage.value) lines.push(` ${dkImage.value}`);
387
+ if (dkContainerCmd.value.trim()) lines.push(` ${dkContainerCmd.value.trim()}`);
388
+ return lines.join(" \\\n");
389
+ });
390
+ function removeArg(id) {
391
+ dkArgs.value = dkArgs.value.filter((a) => a.id !== id);
392
+ }
393
+ function addArg() {
394
+ const flag = newArgFlag.value.trim();
395
+ if (!flag) return;
396
+ dkArgs.value.push(makeArg(flag.startsWith("-") ? flag : `--${flag}`, newArgValue.value.trim()));
397
+ newArgFlag.value = "";
398
+ newArgValue.value = "";
399
+ showAddArg.value = false;
400
+ }
401
+ function resetDocker() {
402
+ dockerEditMode.value = false;
403
+ rawInput.value = "";
404
+ dkArgs.value = [];
405
+ dkImage.value = "";
406
+ dkContainerCmd.value = "";
407
+ dockerError.value = "";
408
+ }
409
+ function parseCompose() {
410
+ const raw = rawInput.value.trim();
411
+ if (!raw) return;
412
+ const lines = raw.split("\n");
413
+ const services = [];
414
+ const topLevel = [];
415
+ let inSvc = false, curSvc = "", baseIndent = 0, curTopKey = "";
416
+ for (const line of lines) {
417
+ if (!line.trim() || line.trim().startsWith("#")) continue;
418
+ const indent = line.search(/\S/);
419
+ const t = line.trim();
420
+ if (indent === 0) {
421
+ const m = t.match(/^(\w[\w-]*):\s*(.*)$/);
422
+ if (m) {
423
+ const [, key, val] = m;
424
+ if (key === "services") {
425
+ inSvc = true;
426
+ curSvc = "";
427
+ curTopKey = "";
428
+ continue;
429
+ }
430
+ inSvc = false;
431
+ curTopKey = key;
432
+ topLevel.push({ key, value: val.replace(/['"]/g, ""), desc: composeFieldDesc[key] ?? "", depth: 0, editable: true });
433
+ continue;
434
+ }
435
+ }
436
+ if (inSvc) {
437
+ if (indent === 2 && t.match(/^(\w[\w-]*):\s*$/)) {
438
+ curSvc = t.replace(":", "").trim();
439
+ services.push({ name: curSvc, image: "", fields: [] });
440
+ baseIndent = 2;
441
+ continue;
442
+ }
443
+ const svc = services.find((s) => s.name === curSvc);
444
+ if (svc && indent > baseIndent) {
445
+ if (t.startsWith("- ")) {
446
+ const val = t.substring(2);
447
+ const depth = Math.floor((indent - baseIndent - 2) / 2);
448
+ svc.fields.push({ key: "•", value: val, desc: "", depth: depth + 1, editable: true });
449
+ } else {
450
+ const kv = t.match(/^(\w[\w-]*):\s*(.*)$/);
451
+ if (kv) {
452
+ const [, key, val] = kv;
453
+ const depth = Math.floor((indent - baseIndent - 2) / 2);
454
+ const cleanVal = val.replace(/['"]/g, "");
455
+ if (key === "image") svc.image = cleanVal;
456
+ svc.fields.push({ key, value: cleanVal, desc: composeFieldDesc[key] ?? "", depth, editable: !!cleanVal });
457
+ }
458
+ }
459
+ }
460
+ } else if (curTopKey && indent > 0) {
461
+ if (t.startsWith("- ")) {
462
+ topLevel.push({ key: "•", value: t.substring(2), desc: "", depth: 1, editable: true });
463
+ } else {
464
+ const kv = t.match(/^(\w[\w-]*):\s*(.*)$/);
465
+ if (kv) {
466
+ const [, key, val] = kv;
467
+ topLevel.push({ key, value: val.replace(/['"]/g, ""), desc: composeFieldDesc[key] ?? "", depth: Math.floor(indent / 2), editable: !!val });
468
+ }
469
+ }
470
+ }
471
+ }
472
+ if (!services.length && !topLevel.length) {
473
+ composeError.value = "无法解析,请确认是有效的 docker-compose.yml";
474
+ return;
475
+ }
476
+ cServices.value = services;
477
+ cTopLevel.value = topLevel;
478
+ composeError.value = "";
479
+ composeEditMode.value = true;
480
+ }
481
+ const generatedYaml = computed(() => {
482
+ const lines = [];
483
+ for (const f of cTopLevel.value) {
484
+ if (f.depth === 0 && f.key !== "•") lines.push(`${f.key}: ${f.value}`);
485
+ }
486
+ if (cServices.value.length) {
487
+ lines.push("services:");
488
+ for (const svc of cServices.value) {
489
+ lines.push(` ${svc.name}:`);
490
+ for (const f of svc.fields) {
491
+ const pad = " ".repeat(f.depth + 2);
492
+ if (f.key === "•") {
493
+ lines.push(`${pad}- ${f.value}`);
494
+ } else if (f.value) {
495
+ lines.push(`${pad}${f.key}: ${f.value}`);
496
+ } else {
497
+ lines.push(`${pad}${f.key}:`);
498
+ }
499
+ }
500
+ }
501
+ }
502
+ for (const f of cTopLevel.value) {
503
+ if (f.depth === 0 && f.key !== "•" && !["version"].includes(f.key)) ;
504
+ if (f.depth > 0) {
505
+ const pad = " ".repeat(f.depth);
506
+ if (f.key === "•") lines.push(`${pad}- ${f.value}`);
507
+ else if (f.value) lines.push(`${pad}${f.key}: ${f.value}`);
508
+ else lines.push(`${pad}${f.key}:`);
509
+ }
510
+ }
511
+ return lines.join("\n");
512
+ });
513
+ function resetCompose() {
514
+ composeEditMode.value = false;
515
+ rawInput.value = "";
516
+ cServices.value = [];
517
+ cTopLevel.value = [];
518
+ composeError.value = "";
519
+ }
520
+ function handleParse() {
521
+ if (activeTab.value === "docker") parseAndEdit();
522
+ else parseCompose();
523
+ }
524
+ function handleReset() {
525
+ if (activeTab.value === "docker") resetDocker();
526
+ else resetCompose();
527
+ }
528
+ function switchTab(tab) {
529
+ if (tab === activeTab.value) return;
530
+ handleReset();
531
+ activeTab.value = tab;
532
+ }
533
+ const isEditMode = computed(() => activeTab.value === "docker" ? dockerEditMode.value : composeEditMode.value);
534
+ const quickFlags = [
535
+ { flag: "-p", placeholder: "8080:80" },
536
+ { flag: "-v", placeholder: "/host:/container" },
537
+ { flag: "-e", placeholder: "KEY=VALUE" },
538
+ { flag: "--name", placeholder: "my-container" },
539
+ { flag: "--network", placeholder: "my-net" },
540
+ { flag: "--restart", placeholder: "unless-stopped" },
541
+ { flag: "-d", placeholder: "" },
542
+ { flag: "--rm", placeholder: "" }
543
+ ];
544
+ function loadSample() {
545
+ rawInput.value = activeTab.value === "docker" ? dockerSample : composeSample;
546
+ }
547
+ return (_ctx, _cache) => {
548
+ return openBlock(), createElementBlock("div", _hoisted_1, [
549
+ createCommentVNode(" Tab 切换 "),
550
+ createElementVNode("div", _hoisted_2, [
551
+ (openBlock(), createElementBlock(
552
+ Fragment,
553
+ null,
554
+ renderList(["docker", "compose"], (tab) => {
555
+ return createElementVNode("button", {
556
+ key: tab,
557
+ onClick: ($event) => switchTab(tab),
558
+ class: normalizeClass(["h-9 px-4 font-bold border-2 border-black rounded-lg text-sm transition-all", activeTab.value === tab ? "bg-primary text-black shadow-hard-sm" : "bg-deep-charcoal text-gray-400 hover:text-gray-200"])
559
+ }, toDisplayString(tab === "docker" ? "Docker 命令" : "Docker Compose"), 11, _hoisted_3);
560
+ }),
561
+ 64
562
+ /* STABLE_FRAGMENT */
563
+ )),
564
+ _cache[10] || (_cache[10] = createElementVNode(
565
+ "div",
566
+ { class: "flex-1" },
567
+ null,
568
+ -1
569
+ /* CACHED */
570
+ )),
571
+ isEditMode.value ? (openBlock(), createElementBlock("button", {
572
+ key: 0,
573
+ onClick: handleReset,
574
+ class: "h-8 px-3 bg-deep-charcoal text-gray-400 font-bold border-2 border-black rounded shadow-hard-sm hover:shadow-none hover:translate-x-0.5 hover:translate-y-0.5 transition-all text-xs"
575
+ }, [..._cache[9] || (_cache[9] = [
576
+ createElementVNode(
577
+ "span",
578
+ { class: "material-icons text-sm align-middle mr-1" },
579
+ "refresh",
580
+ -1
581
+ /* CACHED */
582
+ ),
583
+ createTextVNode(
584
+ "重新输入 ",
585
+ -1
586
+ /* CACHED */
587
+ )
588
+ ])])) : createCommentVNode("v-if", true)
589
+ ]),
590
+ createCommentVNode(" ═══ 输入模式 ═══ "),
591
+ !isEditMode.value ? (openBlock(), createElementBlock(
592
+ Fragment,
593
+ { key: 0 },
594
+ [
595
+ createElementVNode("div", _hoisted_4, [
596
+ createElementVNode("div", _hoisted_5, [
597
+ createElementVNode("div", _hoisted_6, [
598
+ _cache[11] || (_cache[11] = createElementVNode(
599
+ "span",
600
+ { class: "material-icons text-primary text-lg" },
601
+ "terminal",
602
+ -1
603
+ /* CACHED */
604
+ )),
605
+ createElementVNode(
606
+ "span",
607
+ _hoisted_7,
608
+ toDisplayString(activeTab.value === "docker" ? "Docker 命令" : "Docker Compose YAML"),
609
+ 1
610
+ /* TEXT */
611
+ )
612
+ ]),
613
+ createElementVNode("button", {
614
+ onClick: loadSample,
615
+ class: "h-8 px-3 bg-primary text-black font-bold border-2 border-black rounded shadow-hard-sm hover:shadow-none hover:translate-x-0.5 hover:translate-y-0.5 transition-all text-xs"
616
+ }, " 加载示例 ")
617
+ ]),
618
+ withDirectives(createElementVNode("textarea", {
619
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => rawInput.value = $event),
620
+ rows: activeTab.value === "docker" ? 4 : 12,
621
+ placeholder: activeTab.value === "docker" ? "粘贴 Docker 命令,如:docker run -d -p 8080:80 nginx" : "粘贴 docker-compose.yml 内容",
622
+ class: "w-full bg-bg-dark text-gray-100 border-4 border-black rounded-lg px-4 py-3 font-mono text-sm shadow-hard focus:border-primary focus:shadow-none focus:translate-x-[4px] focus:translate-y-[4px] transition-all outline-none placeholder-gray-600 resize-none",
623
+ onKeydown: withKeys(withModifiers(handleParse, ["ctrl"]), ["enter"])
624
+ }, null, 40, _hoisted_8), [
625
+ [vModelText, rawInput.value]
626
+ ]),
627
+ createElementVNode("div", _hoisted_9, [
628
+ _cache[13] || (_cache[13] = createElementVNode(
629
+ "span",
630
+ { class: "text-xs text-gray-600" },
631
+ "Ctrl+Enter 解析",
632
+ -1
633
+ /* CACHED */
634
+ )),
635
+ createElementVNode("button", {
636
+ onClick: handleParse,
637
+ disabled: !rawInput.value.trim(),
638
+ class: "h-9 px-5 bg-primary text-black font-bold border-2 border-black rounded-lg shadow-hard-sm hover:shadow-none hover:translate-x-0.5 hover:translate-y-0.5 transition-all text-sm disabled:opacity-40 disabled:cursor-not-allowed"
639
+ }, [..._cache[12] || (_cache[12] = [
640
+ createElementVNode(
641
+ "span",
642
+ { class: "material-icons text-sm align-middle mr-1" },
643
+ "play_arrow",
644
+ -1
645
+ /* CACHED */
646
+ ),
647
+ createTextVNode(
648
+ "解析 ",
649
+ -1
650
+ /* CACHED */
651
+ )
652
+ ])], 8, _hoisted_10)
653
+ ])
654
+ ]),
655
+ createCommentVNode(" 错误 "),
656
+ dockerError.value || composeError.value ? (openBlock(), createElementBlock("div", _hoisted_11, [
657
+ _cache[14] || (_cache[14] = createElementVNode(
658
+ "span",
659
+ { class: "material-icons text-lg" },
660
+ "error_outline",
661
+ -1
662
+ /* CACHED */
663
+ )),
664
+ createTextVNode(
665
+ " " + toDisplayString(dockerError.value || composeError.value),
666
+ 1
667
+ /* TEXT */
668
+ )
669
+ ])) : createCommentVNode("v-if", true)
670
+ ],
671
+ 64
672
+ /* STABLE_FRAGMENT */
673
+ )) : createCommentVNode("v-if", true),
674
+ createCommentVNode(" ═══ Docker 编辑模式 ═══ "),
675
+ activeTab.value === "docker" && dockerEditMode.value ? (openBlock(), createElementBlock(
676
+ Fragment,
677
+ { key: 1 },
678
+ [
679
+ createCommentVNode(" 左右分栏 "),
680
+ createElementVNode("div", _hoisted_12, [
681
+ createCommentVNode(" 左列:生成命令 + 基本信息 "),
682
+ createElementVNode("div", _hoisted_13, [
683
+ createCommentVNode(" 生成命令 "),
684
+ createElementVNode("div", _hoisted_14, [
685
+ createElementVNode("div", _hoisted_15, [
686
+ _cache[15] || (_cache[15] = createElementVNode(
687
+ "div",
688
+ { class: "flex items-center gap-2" },
689
+ [
690
+ createElementVNode("span", { class: "material-icons text-neon-green text-lg" }, "code"),
691
+ createElementVNode("span", { class: "text-sm font-bold text-gray-400 uppercase tracking-wider" }, "生成命令")
692
+ ],
693
+ -1
694
+ /* CACHED */
695
+ )),
696
+ createElementVNode("div", _hoisted_16, [
697
+ createElementVNode(
698
+ "button",
699
+ {
700
+ onClick: _cache[1] || (_cache[1] = ($event) => copyText(generatedCommand.value, "cmd-single")),
701
+ class: normalizeClass(["h-7 px-2.5 text-xs font-bold border-2 border-black rounded transition-all", copyField.value === "cmd-single" ? "bg-neon-green text-black" : "bg-bg-dark text-gray-400 hover:text-gray-200"])
702
+ },
703
+ toDisplayString(copyField.value === "cmd-single" ? "已复制" : "单行复制"),
704
+ 3
705
+ /* TEXT, CLASS */
706
+ ),
707
+ createElementVNode(
708
+ "button",
709
+ {
710
+ onClick: _cache[2] || (_cache[2] = ($event) => copyText(generatedMultiline.value, "cmd-multi")),
711
+ class: normalizeClass(["h-7 px-2.5 text-xs font-bold border-2 border-black rounded transition-all", copyField.value === "cmd-multi" ? "bg-neon-green text-black" : "bg-bg-dark text-gray-400 hover:text-gray-200"])
712
+ },
713
+ toDisplayString(copyField.value === "cmd-multi" ? "已复制" : "多行复制"),
714
+ 3
715
+ /* TEXT, CLASS */
716
+ )
717
+ ])
718
+ ]),
719
+ createElementVNode(
720
+ "pre",
721
+ _hoisted_17,
722
+ toDisplayString(generatedMultiline.value),
723
+ 1
724
+ /* TEXT */
725
+ )
726
+ ]),
727
+ createCommentVNode(" 基本信息 "),
728
+ createElementVNode("div", _hoisted_18, [
729
+ _cache[19] || (_cache[19] = createElementVNode(
730
+ "div",
731
+ { class: "flex items-center gap-2 mb-3" },
732
+ [
733
+ createElementVNode("span", { class: "material-icons text-electric-blue text-lg" }, "info"),
734
+ createElementVNode("span", { class: "text-sm font-bold text-gray-400 uppercase tracking-wider" }, "基本信息")
735
+ ],
736
+ -1
737
+ /* CACHED */
738
+ )),
739
+ createElementVNode("div", _hoisted_19, [
740
+ createElementVNode("div", _hoisted_20, [
741
+ _cache[16] || (_cache[16] = createElementVNode(
742
+ "div",
743
+ { class: "text-xs text-gray-500 mb-1" },
744
+ "子命令",
745
+ -1
746
+ /* CACHED */
747
+ )),
748
+ withDirectives(createElementVNode(
749
+ "input",
750
+ {
751
+ "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => dkSubCommand.value = $event),
752
+ class: "w-full bg-transparent text-electric-blue font-mono text-sm font-bold outline-none border-b border-transparent focus:border-electric-blue transition-colors"
753
+ },
754
+ null,
755
+ 512
756
+ /* NEED_PATCH */
757
+ ), [
758
+ [vModelText, dkSubCommand.value]
759
+ ])
760
+ ]),
761
+ createElementVNode("div", _hoisted_21, [
762
+ _cache[17] || (_cache[17] = createElementVNode(
763
+ "div",
764
+ { class: "text-xs text-gray-500 mb-1" },
765
+ "镜像",
766
+ -1
767
+ /* CACHED */
768
+ )),
769
+ withDirectives(createElementVNode(
770
+ "input",
771
+ {
772
+ "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => dkImage.value = $event),
773
+ class: "w-full bg-transparent text-neon-green font-mono text-sm font-bold outline-none border-b border-transparent focus:border-neon-green transition-colors",
774
+ placeholder: "nginx:alpine"
775
+ },
776
+ null,
777
+ 512
778
+ /* NEED_PATCH */
779
+ ), [
780
+ [vModelText, dkImage.value]
781
+ ])
782
+ ]),
783
+ createElementVNode("div", _hoisted_22, [
784
+ _cache[18] || (_cache[18] = createElementVNode(
785
+ "div",
786
+ { class: "text-xs text-gray-500 mb-1" },
787
+ "容器命令",
788
+ -1
789
+ /* CACHED */
790
+ )),
791
+ withDirectives(createElementVNode(
792
+ "input",
793
+ {
794
+ "onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => dkContainerCmd.value = $event),
795
+ class: "w-full bg-transparent text-primary font-mono text-sm font-bold outline-none border-b border-transparent focus:border-primary transition-colors",
796
+ placeholder: "可选,如 /bin/sh -c ..."
797
+ },
798
+ null,
799
+ 512
800
+ /* NEED_PATCH */
801
+ ), [
802
+ [vModelText, dkContainerCmd.value]
803
+ ])
804
+ ])
805
+ ])
806
+ ])
807
+ ]),
808
+ createCommentVNode(" 右列:添加参数 + 参数列表 "),
809
+ createElementVNode("div", _hoisted_23, [
810
+ createCommentVNode(" 添加参数 "),
811
+ createElementVNode("div", _hoisted_24, [
812
+ _cache[20] || (_cache[20] = createElementVNode(
813
+ "div",
814
+ { class: "flex items-center gap-2 mb-3" },
815
+ [
816
+ createElementVNode("span", { class: "material-icons text-primary text-lg" }, "add_circle"),
817
+ createElementVNode("span", { class: "text-sm font-bold text-gray-400 uppercase tracking-wider" }, "添加参数")
818
+ ],
819
+ -1
820
+ /* CACHED */
821
+ )),
822
+ createElementVNode("div", _hoisted_25, [
823
+ (openBlock(), createElementBlock(
824
+ Fragment,
825
+ null,
826
+ renderList(quickFlags, (qf) => {
827
+ return createElementVNode("button", {
828
+ key: qf.flag,
829
+ onClick: ($event) => {
830
+ newArgFlag.value = qf.flag;
831
+ newArgValue.value = qf.placeholder;
832
+ if (unref(booleanFlags).has(qf.flag)) addArg();
833
+ },
834
+ class: "h-7 px-2 text-xs font-mono font-bold border border-gray-600 rounded hover:border-primary hover:text-primary transition-colors text-gray-400"
835
+ }, toDisplayString(qf.flag), 9, _hoisted_26);
836
+ }),
837
+ 64
838
+ /* STABLE_FRAGMENT */
839
+ ))
840
+ ]),
841
+ createElementVNode("div", _hoisted_27, [
842
+ withDirectives(createElementVNode(
843
+ "input",
844
+ {
845
+ "onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => newArgFlag.value = $event),
846
+ placeholder: "--name",
847
+ class: "w-24 shrink-0 bg-bg-dark text-gray-100 border-2 border-black rounded px-2 py-1.5 font-mono text-sm outline-none focus:border-primary"
848
+ },
849
+ null,
850
+ 512
851
+ /* NEED_PATCH */
852
+ ), [
853
+ [vModelText, newArgFlag.value]
854
+ ]),
855
+ withDirectives(createElementVNode(
856
+ "input",
857
+ {
858
+ "onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => newArgValue.value = $event),
859
+ placeholder: "值",
860
+ class: "flex-1 bg-bg-dark text-gray-100 border-2 border-black rounded px-2 py-1.5 font-mono text-sm outline-none focus:border-primary",
861
+ onKeydown: withKeys(addArg, ["enter"])
862
+ },
863
+ null,
864
+ 544
865
+ /* NEED_HYDRATION, NEED_PATCH */
866
+ ), [
867
+ [vModelText, newArgValue.value]
868
+ ]),
869
+ createElementVNode("button", {
870
+ onClick: addArg,
871
+ class: "h-9 px-3 bg-neon-green text-black font-bold border-2 border-black rounded shadow-hard-sm hover:shadow-none hover:translate-x-0.5 hover:translate-y-0.5 transition-all text-xs shrink-0"
872
+ }, " 添加 ")
873
+ ])
874
+ ]),
875
+ createCommentVNode(" 参数列表 "),
876
+ createElementVNode("div", _hoisted_28, [
877
+ createElementVNode("div", _hoisted_29, [
878
+ _cache[21] || (_cache[21] = createElementVNode(
879
+ "span",
880
+ { class: "material-icons text-vibrant-purple text-lg" },
881
+ "tune",
882
+ -1
883
+ /* CACHED */
884
+ )),
885
+ _cache[22] || (_cache[22] = createElementVNode(
886
+ "span",
887
+ { class: "text-sm font-bold text-gray-400 uppercase tracking-wider" },
888
+ "参数列表",
889
+ -1
890
+ /* CACHED */
891
+ )),
892
+ createElementVNode(
893
+ "span",
894
+ _hoisted_30,
895
+ toDisplayString(dkArgs.value.length),
896
+ 1
897
+ /* TEXT */
898
+ )
899
+ ]),
900
+ createElementVNode("div", _hoisted_31, [
901
+ (openBlock(true), createElementBlock(
902
+ Fragment,
903
+ null,
904
+ renderList(dkArgs.value, (arg) => {
905
+ return openBlock(), createElementBlock("div", {
906
+ key: arg.id,
907
+ class: "flex flex-col gap-0.5 py-2 px-2 rounded-lg hover:bg-white/5 group transition-colors"
908
+ }, [
909
+ createElementVNode("div", _hoisted_32, [
910
+ createElementVNode(
911
+ "span",
912
+ {
913
+ class: normalizeClass(["w-1.5 h-5 rounded-full shrink-0", catMeta[arg.category].bg])
914
+ },
915
+ null,
916
+ 2
917
+ /* CLASS */
918
+ ),
919
+ createElementVNode(
920
+ "span",
921
+ {
922
+ class: normalizeClass(["font-mono text-sm font-bold shrink-0 min-w-[90px]", catMeta[arg.category].text])
923
+ },
924
+ toDisplayString(arg.flag),
925
+ 3
926
+ /* TEXT, CLASS */
927
+ ),
928
+ !arg.noValue ? withDirectives((openBlock(), createElementBlock("input", {
929
+ key: 0,
930
+ "onUpdate:modelValue": ($event) => arg.value = $event,
931
+ class: "flex-1 bg-transparent text-gray-200 font-mono text-sm outline-none border-b border-transparent focus:border-gray-500 transition-colors min-w-0",
932
+ placeholder: "输入值"
933
+ }, null, 8, _hoisted_33)), [
934
+ [vModelText, arg.value]
935
+ ]) : (openBlock(), createElementBlock("span", _hoisted_34)),
936
+ createElementVNode("button", {
937
+ onClick: ($event) => removeArg(arg.id),
938
+ class: "opacity-0 group-hover:opacity-100 transition-opacity text-gray-500 hover:text-coral-red shrink-0"
939
+ }, [..._cache[23] || (_cache[23] = [
940
+ createElementVNode(
941
+ "span",
942
+ { class: "material-icons text-sm" },
943
+ "close",
944
+ -1
945
+ /* CACHED */
946
+ )
947
+ ])], 8, _hoisted_35)
948
+ ]),
949
+ createElementVNode(
950
+ "div",
951
+ _hoisted_36,
952
+ toDisplayString(arg.desc),
953
+ 1
954
+ /* TEXT */
955
+ )
956
+ ]);
957
+ }),
958
+ 128
959
+ /* KEYED_FRAGMENT */
960
+ )),
961
+ !dkArgs.value.length ? (openBlock(), createElementBlock("div", _hoisted_37, "暂无参数")) : createCommentVNode("v-if", true)
962
+ ])
963
+ ])
964
+ ])
965
+ ])
966
+ ],
967
+ 64
968
+ /* STABLE_FRAGMENT */
969
+ )) : createCommentVNode("v-if", true),
970
+ createCommentVNode(" ═══ Compose 编辑模式 ═══ "),
971
+ activeTab.value === "compose" && composeEditMode.value ? (openBlock(), createElementBlock(
972
+ Fragment,
973
+ { key: 2 },
974
+ [
975
+ createCommentVNode(" YAML 预览(顶部固定) "),
976
+ createElementVNode("div", _hoisted_38, [
977
+ createElementVNode("div", _hoisted_39, [
978
+ _cache[24] || (_cache[24] = createElementVNode(
979
+ "div",
980
+ { class: "flex items-center gap-2" },
981
+ [
982
+ createElementVNode("span", { class: "material-icons text-neon-green text-lg" }, "code"),
983
+ createElementVNode("span", { class: "text-sm font-bold text-gray-400 uppercase tracking-wider" }, "生成 YAML")
984
+ ],
985
+ -1
986
+ /* CACHED */
987
+ )),
988
+ createElementVNode(
989
+ "button",
990
+ {
991
+ onClick: _cache[8] || (_cache[8] = ($event) => copyText(generatedYaml.value, "yaml")),
992
+ class: normalizeClass(["h-7 px-2.5 text-xs font-bold border-2 border-black rounded transition-all", copyField.value === "yaml" ? "bg-neon-green text-black" : "bg-bg-dark text-gray-400 hover:text-gray-200"])
993
+ },
994
+ toDisplayString(copyField.value === "yaml" ? "已复制" : "复制 YAML"),
995
+ 3
996
+ /* TEXT, CLASS */
997
+ )
998
+ ]),
999
+ createElementVNode(
1000
+ "pre",
1001
+ _hoisted_40,
1002
+ toDisplayString(generatedYaml.value),
1003
+ 1
1004
+ /* TEXT */
1005
+ )
1006
+ ]),
1007
+ createCommentVNode(" 左右分栏:服务列表 "),
1008
+ createElementVNode("div", _hoisted_41, [
1009
+ (openBlock(true), createElementBlock(
1010
+ Fragment,
1011
+ null,
1012
+ renderList(cServices.value, (svc, si) => {
1013
+ return openBlock(), createElementBlock("div", {
1014
+ key: svc.name,
1015
+ class: "flex flex-col gap-3 overflow-y-auto pr-1"
1016
+ }, [
1017
+ createElementVNode("div", _hoisted_42, [
1018
+ _cache[25] || (_cache[25] = createElementVNode(
1019
+ "span",
1020
+ { class: "material-icons text-electric-blue text-lg" },
1021
+ "dns",
1022
+ -1
1023
+ /* CACHED */
1024
+ )),
1025
+ createElementVNode(
1026
+ "span",
1027
+ _hoisted_43,
1028
+ toDisplayString(svc.name),
1029
+ 1
1030
+ /* TEXT */
1031
+ ),
1032
+ svc.image ? (openBlock(), createElementBlock(
1033
+ "span",
1034
+ _hoisted_44,
1035
+ toDisplayString(svc.image),
1036
+ 1
1037
+ /* TEXT */
1038
+ )) : createCommentVNode("v-if", true)
1039
+ ]),
1040
+ createElementVNode("div", _hoisted_45, [
1041
+ createElementVNode("div", _hoisted_46, [
1042
+ (openBlock(true), createElementBlock(
1043
+ Fragment,
1044
+ null,
1045
+ renderList(svc.fields, (field, fi) => {
1046
+ return openBlock(), createElementBlock(
1047
+ "div",
1048
+ {
1049
+ key: fi,
1050
+ class: "flex flex-col gap-0.5 py-1.5 rounded-lg hover:bg-white/5 transition-colors",
1051
+ style: normalizeStyle({ paddingLeft: field.depth * 12 + 8 + "px", paddingRight: "8px" })
1052
+ },
1053
+ [
1054
+ createElementVNode("div", _hoisted_47, [
1055
+ createElementVNode(
1056
+ "span",
1057
+ {
1058
+ class: normalizeClass(["font-mono text-sm font-bold shrink-0 min-w-[90px]", field.depth === 0 ? "text-electric-blue" : "text-gray-400"])
1059
+ },
1060
+ toDisplayString(field.key),
1061
+ 3
1062
+ /* TEXT, CLASS */
1063
+ ),
1064
+ field.editable ? withDirectives((openBlock(), createElementBlock("input", {
1065
+ key: 0,
1066
+ "onUpdate:modelValue": ($event) => field.value = $event,
1067
+ class: "flex-1 bg-transparent text-gray-200 font-mono text-sm outline-none border-b border-transparent focus:border-gray-500 transition-colors min-w-0"
1068
+ }, null, 8, _hoisted_48)), [
1069
+ [vModelText, field.value]
1070
+ ]) : (openBlock(), createElementBlock(
1071
+ "span",
1072
+ _hoisted_49,
1073
+ toDisplayString(field.value || ""),
1074
+ 1
1075
+ /* TEXT */
1076
+ ))
1077
+ ]),
1078
+ field.desc ? (openBlock(), createElementBlock(
1079
+ "div",
1080
+ _hoisted_50,
1081
+ toDisplayString(field.desc),
1082
+ 1
1083
+ /* TEXT */
1084
+ )) : createCommentVNode("v-if", true)
1085
+ ],
1086
+ 4
1087
+ /* STYLE */
1088
+ );
1089
+ }),
1090
+ 128
1091
+ /* KEYED_FRAGMENT */
1092
+ ))
1093
+ ])
1094
+ ])
1095
+ ]);
1096
+ }),
1097
+ 128
1098
+ /* KEYED_FRAGMENT */
1099
+ )),
1100
+ createCommentVNode(" 顶层配置 "),
1101
+ cTopLevel.value.length ? (openBlock(), createElementBlock("div", _hoisted_51, [
1102
+ _cache[26] || (_cache[26] = createElementVNode(
1103
+ "div",
1104
+ { class: "flex items-center gap-2 h-8" },
1105
+ [
1106
+ createElementVNode("span", { class: "material-icons text-vibrant-purple text-lg" }, "settings"),
1107
+ createElementVNode("span", { class: "text-sm font-bold text-gray-400 uppercase tracking-wider" }, "顶层配置")
1108
+ ],
1109
+ -1
1110
+ /* CACHED */
1111
+ )),
1112
+ createElementVNode("div", _hoisted_52, [
1113
+ createElementVNode("div", _hoisted_53, [
1114
+ (openBlock(true), createElementBlock(
1115
+ Fragment,
1116
+ null,
1117
+ renderList(cTopLevel.value, (item, i) => {
1118
+ return openBlock(), createElementBlock(
1119
+ "div",
1120
+ {
1121
+ key: i,
1122
+ class: "flex flex-col gap-0.5 py-1.5 rounded-lg hover:bg-white/5",
1123
+ style: normalizeStyle({ paddingLeft: item.depth * 12 + 8 + "px", paddingRight: "8px" })
1124
+ },
1125
+ [
1126
+ createElementVNode("div", _hoisted_54, [
1127
+ createElementVNode(
1128
+ "span",
1129
+ _hoisted_55,
1130
+ toDisplayString(item.key),
1131
+ 1
1132
+ /* TEXT */
1133
+ ),
1134
+ item.editable ? withDirectives((openBlock(), createElementBlock("input", {
1135
+ key: 0,
1136
+ "onUpdate:modelValue": ($event) => item.value = $event,
1137
+ class: "flex-1 bg-transparent text-gray-200 font-mono text-sm outline-none border-b border-transparent focus:border-gray-500 transition-colors min-w-0"
1138
+ }, null, 8, _hoisted_56)), [
1139
+ [vModelText, item.value]
1140
+ ]) : (openBlock(), createElementBlock(
1141
+ "span",
1142
+ _hoisted_57,
1143
+ toDisplayString(item.value || ""),
1144
+ 1
1145
+ /* TEXT */
1146
+ ))
1147
+ ]),
1148
+ item.desc ? (openBlock(), createElementBlock(
1149
+ "div",
1150
+ _hoisted_58,
1151
+ toDisplayString(item.desc),
1152
+ 1
1153
+ /* TEXT */
1154
+ )) : createCommentVNode("v-if", true)
1155
+ ],
1156
+ 4
1157
+ /* STYLE */
1158
+ );
1159
+ }),
1160
+ 128
1161
+ /* KEYED_FRAGMENT */
1162
+ ))
1163
+ ])
1164
+ ])
1165
+ ])) : createCommentVNode("v-if", true)
1166
+ ])
1167
+ ],
1168
+ 64
1169
+ /* STABLE_FRAGMENT */
1170
+ )) : createCommentVNode("v-if", true)
1171
+ ]);
1172
+ };
1173
+ }
1174
+ });
1175
+ export {
1176
+ _sfc_main as default
1177
+ };
1178
+
1179
+ ;(function(){var c=typeof __exports__!=="undefined"&&__exports__;var d=c&&(c.default||c);if(d)d.__pluginCss=`/*! tailwindcss v4.2.1 | MIT License | https://tailwindcss.com */
1180
+ @layer properties {
1181
+ @supports (((-webkit-hyphens: none)) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color: rgb(from red r g b)))) {
1182
+ *, :before, :after, ::backdrop {
1183
+ --tw-translate-x: 0;
1184
+ --tw-translate-y: 0;
1185
+ --tw-translate-z: 0;
1186
+ --tw-rotate-x: initial;
1187
+ --tw-rotate-y: initial;
1188
+ --tw-rotate-z: initial;
1189
+ --tw-skew-x: initial;
1190
+ --tw-skew-y: initial;
1191
+ --tw-space-y-reverse: 0;
1192
+ --tw-border-style: solid;
1193
+ --tw-leading: initial;
1194
+ --tw-font-weight: initial;
1195
+ --tw-tracking: initial;
1196
+ --tw-shadow: 0 0 #0000;
1197
+ --tw-shadow-color: initial;
1198
+ --tw-shadow-alpha: 100%;
1199
+ --tw-inset-shadow: 0 0 #0000;
1200
+ --tw-inset-shadow-color: initial;
1201
+ --tw-inset-shadow-alpha: 100%;
1202
+ --tw-ring-color: initial;
1203
+ --tw-ring-shadow: 0 0 #0000;
1204
+ --tw-inset-ring-color: initial;
1205
+ --tw-inset-ring-shadow: 0 0 #0000;
1206
+ --tw-ring-inset: initial;
1207
+ --tw-ring-offset-width: 0px;
1208
+ --tw-ring-offset-color: #fff;
1209
+ --tw-ring-offset-shadow: 0 0 #0000;
1210
+ --tw-outline-style: solid;
1211
+ --tw-duration: initial;
1212
+ --tw-scale-x: 1;
1213
+ --tw-scale-y: 1;
1214
+ --tw-scale-z: 1;
1215
+ --tw-blur: initial;
1216
+ --tw-brightness: initial;
1217
+ --tw-contrast: initial;
1218
+ --tw-grayscale: initial;
1219
+ --tw-hue-rotate: initial;
1220
+ --tw-invert: initial;
1221
+ --tw-opacity: initial;
1222
+ --tw-saturate: initial;
1223
+ --tw-sepia: initial;
1224
+ --tw-drop-shadow: initial;
1225
+ --tw-drop-shadow-color: initial;
1226
+ --tw-drop-shadow-alpha: 100%;
1227
+ --tw-drop-shadow-size: initial;
1228
+ }
1229
+ }
1230
+ }
1231
+
1232
+ @layer theme {
1233
+ :root, :host {
1234
+ --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New",
1235
+ monospace;
1236
+ --color-gray-100: oklch(96.7% .003 264.542);
1237
+ --color-gray-200: oklch(92.8% .006 264.531);
1238
+ --color-gray-300: oklch(87.2% .01 258.338);
1239
+ --color-gray-400: oklch(70.7% .022 261.325);
1240
+ --color-gray-500: oklch(55.1% .027 264.364);
1241
+ --color-gray-600: oklch(44.6% .03 256.802);
1242
+ --color-gray-700: oklch(37.3% .034 259.733);
1243
+ --color-black: #000;
1244
+ --color-white: #fff;
1245
+ --spacing: .25rem;
1246
+ --container-lg: 32rem;
1247
+ --text-xs: .75rem;
1248
+ --text-xs--line-height: calc(1 / .75);
1249
+ --text-sm: .875rem;
1250
+ --text-sm--line-height: calc(1.25 / .875);
1251
+ --text-base: 1rem;
1252
+ --text-base--line-height: calc(1.5 / 1);
1253
+ --text-lg: 1.125rem;
1254
+ --text-lg--line-height: calc(1.75 / 1.125);
1255
+ --text-xl: 1.25rem;
1256
+ --text-xl--line-height: calc(1.75 / 1.25);
1257
+ --text-2xl: 1.5rem;
1258
+ --text-2xl--line-height: calc(2 / 1.5);
1259
+ --text-3xl: 1.875rem;
1260
+ --text-3xl--line-height: calc(2.25 / 1.875);
1261
+ --text-5xl: 3rem;
1262
+ --text-5xl--line-height: 1;
1263
+ --font-weight-bold: 700;
1264
+ --font-weight-black: 900;
1265
+ --tracking-wider: .05em;
1266
+ --tracking-widest: .1em;
1267
+ --leading-relaxed: 1.625;
1268
+ --radius-sm: .25rem;
1269
+ --radius-lg: .5rem;
1270
+ --radius-xl: .75rem;
1271
+ --animate-spin: spin 1s linear infinite;
1272
+ --animate-pulse: pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;
1273
+ --default-transition-duration: .15s;
1274
+ --default-transition-timing-function: cubic-bezier(.4, 0, .2, 1);
1275
+ --color-primary: #f9b11f;
1276
+ --color-bg-dark: #231c0f;
1277
+ --color-electric-blue: #3b82f6;
1278
+ --color-neon-green: #84cc16;
1279
+ --color-vibrant-purple: #a855f7;
1280
+ --color-deep-charcoal: #1f1a14;
1281
+ --color-coral-red: #ff6b6b;
1282
+ --color-hot-pink: #ec4899;
1283
+ --font-display: "Space Grotesk", sans-serif;
1284
+ }
1285
+ }
1286
+
1287
+ @layer base, components;
1288
+
1289
+ @layer utilities {
1290
+ .pointer-events-none {
1291
+ pointer-events: none;
1292
+ }
1293
+
1294
+ .sr-only {
1295
+ clip-path: inset(50%);
1296
+ white-space: nowrap;
1297
+ border-width: 0;
1298
+ width: 1px;
1299
+ height: 1px;
1300
+ margin: -1px;
1301
+ padding: 0;
1302
+ position: absolute;
1303
+ overflow: hidden;
1304
+ }
1305
+
1306
+ .absolute {
1307
+ position: absolute;
1308
+ }
1309
+
1310
+ .fixed {
1311
+ position: fixed;
1312
+ }
1313
+
1314
+ .relative {
1315
+ position: relative;
1316
+ }
1317
+
1318
+ .inset-0 {
1319
+ inset: calc(var(--spacing) * 0);
1320
+ }
1321
+
1322
+ .start {
1323
+ inset-inline-start: var(--spacing);
1324
+ }
1325
+
1326
+ .end {
1327
+ inset-inline-end: var(--spacing);
1328
+ }
1329
+
1330
+ .top-1\\/2 {
1331
+ top: 50%;
1332
+ }
1333
+
1334
+ .left-2 {
1335
+ left: calc(var(--spacing) * 2);
1336
+ }
1337
+
1338
+ .z-50 {
1339
+ z-index: 50;
1340
+ }
1341
+
1342
+ .col-span-2 {
1343
+ grid-column: span 2 / span 2;
1344
+ }
1345
+
1346
+ .-mx-1 {
1347
+ margin-inline: calc(var(--spacing) * -1);
1348
+ }
1349
+
1350
+ .mx-0\\.5 {
1351
+ margin-inline: calc(var(--spacing) * .5);
1352
+ }
1353
+
1354
+ .mt-0\\.5 {
1355
+ margin-top: calc(var(--spacing) * .5);
1356
+ }
1357
+
1358
+ .mt-1 {
1359
+ margin-top: calc(var(--spacing) * 1);
1360
+ }
1361
+
1362
+ .mt-2 {
1363
+ margin-top: calc(var(--spacing) * 2);
1364
+ }
1365
+
1366
+ .mt-3 {
1367
+ margin-top: calc(var(--spacing) * 3);
1368
+ }
1369
+
1370
+ .mr-1 {
1371
+ margin-right: calc(var(--spacing) * 1);
1372
+ }
1373
+
1374
+ .mr-2 {
1375
+ margin-right: calc(var(--spacing) * 2);
1376
+ }
1377
+
1378
+ .mr-3 {
1379
+ margin-right: calc(var(--spacing) * 3);
1380
+ }
1381
+
1382
+ .mb-1 {
1383
+ margin-bottom: calc(var(--spacing) * 1);
1384
+ }
1385
+
1386
+ .mb-1\\.5 {
1387
+ margin-bottom: calc(var(--spacing) * 1.5);
1388
+ }
1389
+
1390
+ .mb-2 {
1391
+ margin-bottom: calc(var(--spacing) * 2);
1392
+ }
1393
+
1394
+ .mb-3 {
1395
+ margin-bottom: calc(var(--spacing) * 3);
1396
+ }
1397
+
1398
+ .ml-0\\.5 {
1399
+ margin-left: calc(var(--spacing) * .5);
1400
+ }
1401
+
1402
+ .ml-1 {
1403
+ margin-left: calc(var(--spacing) * 1);
1404
+ }
1405
+
1406
+ .ml-1\\.5 {
1407
+ margin-left: calc(var(--spacing) * 1.5);
1408
+ }
1409
+
1410
+ .ml-2 {
1411
+ margin-left: calc(var(--spacing) * 2);
1412
+ }
1413
+
1414
+ .ml-auto {
1415
+ margin-left: auto;
1416
+ }
1417
+
1418
+ .block {
1419
+ display: block;
1420
+ }
1421
+
1422
+ .flex {
1423
+ display: flex;
1424
+ }
1425
+
1426
+ .grid {
1427
+ display: grid;
1428
+ }
1429
+
1430
+ .hidden {
1431
+ display: none;
1432
+ }
1433
+
1434
+ .inline {
1435
+ display: inline;
1436
+ }
1437
+
1438
+ .inline-block {
1439
+ display: inline-block;
1440
+ }
1441
+
1442
+ .inline-flex {
1443
+ display: inline-flex;
1444
+ }
1445
+
1446
+ .table {
1447
+ display: table;
1448
+ }
1449
+
1450
+ .h-2 {
1451
+ height: calc(var(--spacing) * 2);
1452
+ }
1453
+
1454
+ .h-3 {
1455
+ height: calc(var(--spacing) * 3);
1456
+ }
1457
+
1458
+ .h-3\\.5 {
1459
+ height: calc(var(--spacing) * 3.5);
1460
+ }
1461
+
1462
+ .h-4 {
1463
+ height: calc(var(--spacing) * 4);
1464
+ }
1465
+
1466
+ .h-5 {
1467
+ height: calc(var(--spacing) * 5);
1468
+ }
1469
+
1470
+ .h-7 {
1471
+ height: calc(var(--spacing) * 7);
1472
+ }
1473
+
1474
+ .h-8 {
1475
+ height: calc(var(--spacing) * 8);
1476
+ }
1477
+
1478
+ .h-9 {
1479
+ height: calc(var(--spacing) * 9);
1480
+ }
1481
+
1482
+ .h-10 {
1483
+ height: calc(var(--spacing) * 10);
1484
+ }
1485
+
1486
+ .h-12 {
1487
+ height: calc(var(--spacing) * 12);
1488
+ }
1489
+
1490
+ .h-16 {
1491
+ height: calc(var(--spacing) * 16);
1492
+ }
1493
+
1494
+ .h-85 {
1495
+ height: calc(var(--spacing) * 85);
1496
+ }
1497
+
1498
+ .h-full {
1499
+ height: 100%;
1500
+ }
1501
+
1502
+ .max-h-36 {
1503
+ max-height: calc(var(--spacing) * 36);
1504
+ }
1505
+
1506
+ .max-h-40 {
1507
+ max-height: calc(var(--spacing) * 40);
1508
+ }
1509
+
1510
+ .max-h-48 {
1511
+ max-height: calc(var(--spacing) * 48);
1512
+ }
1513
+
1514
+ .max-h-60 {
1515
+ max-height: calc(var(--spacing) * 60);
1516
+ }
1517
+
1518
+ .max-h-\\[200px\\] {
1519
+ max-height: 200px;
1520
+ }
1521
+
1522
+ .max-h-full {
1523
+ max-height: 100%;
1524
+ }
1525
+
1526
+ .min-h-0 {
1527
+ min-height: calc(var(--spacing) * 0);
1528
+ }
1529
+
1530
+ .min-h-\\[80px\\] {
1531
+ min-height: 80px;
1532
+ }
1533
+
1534
+ .min-h-\\[180px\\] {
1535
+ min-height: 180px;
1536
+ }
1537
+
1538
+ .min-h-\\[200px\\] {
1539
+ min-height: 200px;
1540
+ }
1541
+
1542
+ .w-1\\.5 {
1543
+ width: calc(var(--spacing) * 1.5);
1544
+ }
1545
+
1546
+ .w-2 {
1547
+ width: calc(var(--spacing) * 2);
1548
+ }
1549
+
1550
+ .w-3 {
1551
+ width: calc(var(--spacing) * 3);
1552
+ }
1553
+
1554
+ .w-3\\.5 {
1555
+ width: calc(var(--spacing) * 3.5);
1556
+ }
1557
+
1558
+ .w-4 {
1559
+ width: calc(var(--spacing) * 4);
1560
+ }
1561
+
1562
+ .w-5 {
1563
+ width: calc(var(--spacing) * 5);
1564
+ }
1565
+
1566
+ .w-8 {
1567
+ width: calc(var(--spacing) * 8);
1568
+ }
1569
+
1570
+ .w-9 {
1571
+ width: calc(var(--spacing) * 9);
1572
+ }
1573
+
1574
+ .w-10 {
1575
+ width: calc(var(--spacing) * 10);
1576
+ }
1577
+
1578
+ .w-14 {
1579
+ width: calc(var(--spacing) * 14);
1580
+ }
1581
+
1582
+ .w-16 {
1583
+ width: calc(var(--spacing) * 16);
1584
+ }
1585
+
1586
+ .w-20 {
1587
+ width: calc(var(--spacing) * 20);
1588
+ }
1589
+
1590
+ .w-24 {
1591
+ width: calc(var(--spacing) * 24);
1592
+ }
1593
+
1594
+ .w-28 {
1595
+ width: calc(var(--spacing) * 28);
1596
+ }
1597
+
1598
+ .w-32 {
1599
+ width: calc(var(--spacing) * 32);
1600
+ }
1601
+
1602
+ .w-72 {
1603
+ width: calc(var(--spacing) * 72);
1604
+ }
1605
+
1606
+ .w-full {
1607
+ width: 100%;
1608
+ }
1609
+
1610
+ .max-w-70 {
1611
+ max-width: calc(var(--spacing) * 70);
1612
+ }
1613
+
1614
+ .max-w-full {
1615
+ max-width: 100%;
1616
+ }
1617
+
1618
+ .max-w-lg {
1619
+ max-width: var(--container-lg);
1620
+ }
1621
+
1622
+ .min-w-0 {
1623
+ min-width: calc(var(--spacing) * 0);
1624
+ }
1625
+
1626
+ .min-w-\\[90px\\] {
1627
+ min-width: 90px;
1628
+ }
1629
+
1630
+ .min-w-\\[200px\\] {
1631
+ min-width: 200px;
1632
+ }
1633
+
1634
+ .flex-1 {
1635
+ flex: 1;
1636
+ }
1637
+
1638
+ .shrink-0 {
1639
+ flex-shrink: 0;
1640
+ }
1641
+
1642
+ .border-collapse {
1643
+ border-collapse: collapse;
1644
+ }
1645
+
1646
+ .translate-x-0\\.5 {
1647
+ --tw-translate-x: calc(var(--spacing) * .5);
1648
+ translate: var(--tw-translate-x) var(--tw-translate-y);
1649
+ }
1650
+
1651
+ .-translate-y-1\\/2 {
1652
+ --tw-translate-y: calc(calc(1 / 2 * 100%) * -1);
1653
+ translate: var(--tw-translate-x) var(--tw-translate-y);
1654
+ }
1655
+
1656
+ .translate-y-0\\.5 {
1657
+ --tw-translate-y: calc(var(--spacing) * .5);
1658
+ translate: var(--tw-translate-x) var(--tw-translate-y);
1659
+ }
1660
+
1661
+ .transform {
1662
+ transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, );
1663
+ }
1664
+
1665
+ .animate-pulse {
1666
+ animation: var(--animate-pulse);
1667
+ }
1668
+
1669
+ .animate-spin {
1670
+ animation: var(--animate-spin);
1671
+ }
1672
+
1673
+ .cursor-grab {
1674
+ cursor: grab;
1675
+ }
1676
+
1677
+ .cursor-pointer {
1678
+ cursor: pointer;
1679
+ }
1680
+
1681
+ .resize {
1682
+ resize: both;
1683
+ }
1684
+
1685
+ .resize-none {
1686
+ resize: none;
1687
+ }
1688
+
1689
+ .appearance-none {
1690
+ appearance: none;
1691
+ }
1692
+
1693
+ .grid-cols-1 {
1694
+ grid-template-columns: repeat(1, minmax(0, 1fr));
1695
+ }
1696
+
1697
+ .grid-cols-2 {
1698
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1699
+ }
1700
+
1701
+ .grid-cols-4 {
1702
+ grid-template-columns: repeat(4, minmax(0, 1fr));
1703
+ }
1704
+
1705
+ .grid-cols-5 {
1706
+ grid-template-columns: repeat(5, minmax(0, 1fr));
1707
+ }
1708
+
1709
+ .grid-cols-\\[1fr_60px_1fr\\] {
1710
+ grid-template-columns: 1fr 60px 1fr;
1711
+ }
1712
+
1713
+ .flex-col {
1714
+ flex-direction: column;
1715
+ }
1716
+
1717
+ .flex-wrap {
1718
+ flex-wrap: wrap;
1719
+ }
1720
+
1721
+ .items-baseline {
1722
+ align-items: baseline;
1723
+ }
1724
+
1725
+ .items-center {
1726
+ align-items: center;
1727
+ }
1728
+
1729
+ .justify-between {
1730
+ justify-content: space-between;
1731
+ }
1732
+
1733
+ .justify-center {
1734
+ justify-content: center;
1735
+ }
1736
+
1737
+ .justify-end {
1738
+ justify-content: flex-end;
1739
+ }
1740
+
1741
+ .gap-0\\.5 {
1742
+ gap: calc(var(--spacing) * .5);
1743
+ }
1744
+
1745
+ .gap-1 {
1746
+ gap: calc(var(--spacing) * 1);
1747
+ }
1748
+
1749
+ .gap-1\\.5 {
1750
+ gap: calc(var(--spacing) * 1.5);
1751
+ }
1752
+
1753
+ .gap-2 {
1754
+ gap: calc(var(--spacing) * 2);
1755
+ }
1756
+
1757
+ .gap-3 {
1758
+ gap: calc(var(--spacing) * 3);
1759
+ }
1760
+
1761
+ .gap-4 {
1762
+ gap: calc(var(--spacing) * 4);
1763
+ }
1764
+
1765
+ .gap-5 {
1766
+ gap: calc(var(--spacing) * 5);
1767
+ }
1768
+
1769
+ :where(.space-y-0\\.5 > :not(:last-child)) {
1770
+ --tw-space-y-reverse: 0;
1771
+ margin-block-start: calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));
1772
+ margin-block-end: calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)));
1773
+ }
1774
+
1775
+ :where(.space-y-1 > :not(:last-child)) {
1776
+ --tw-space-y-reverse: 0;
1777
+ margin-block-start: calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));
1778
+ margin-block-end: calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)));
1779
+ }
1780
+
1781
+ :where(.space-y-1\\.5 > :not(:last-child)) {
1782
+ --tw-space-y-reverse: 0;
1783
+ margin-block-start: calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));
1784
+ margin-block-end: calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)));
1785
+ }
1786
+
1787
+ :where(.space-y-2 > :not(:last-child)) {
1788
+ --tw-space-y-reverse: 0;
1789
+ margin-block-start: calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));
1790
+ margin-block-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)));
1791
+ }
1792
+
1793
+ .gap-x-6 {
1794
+ column-gap: calc(var(--spacing) * 6);
1795
+ }
1796
+
1797
+ .gap-y-1 {
1798
+ row-gap: calc(var(--spacing) * 1);
1799
+ }
1800
+
1801
+ .truncate {
1802
+ text-overflow: ellipsis;
1803
+ white-space: nowrap;
1804
+ overflow: hidden;
1805
+ }
1806
+
1807
+ .overflow-auto {
1808
+ overflow: auto;
1809
+ }
1810
+
1811
+ .overflow-hidden {
1812
+ overflow: hidden;
1813
+ }
1814
+
1815
+ .overflow-y-auto {
1816
+ overflow-y: auto;
1817
+ }
1818
+
1819
+ .rounded {
1820
+ border-radius: .25rem;
1821
+ }
1822
+
1823
+ .rounded-full {
1824
+ border-radius: 3.40282e38px;
1825
+ }
1826
+
1827
+ .rounded-lg {
1828
+ border-radius: var(--radius-lg);
1829
+ }
1830
+
1831
+ .rounded-sm {
1832
+ border-radius: var(--radius-sm);
1833
+ }
1834
+
1835
+ .rounded-xl {
1836
+ border-radius: var(--radius-xl);
1837
+ }
1838
+
1839
+ .border {
1840
+ border-style: var(--tw-border-style);
1841
+ border-width: 1px;
1842
+ }
1843
+
1844
+ .border-2 {
1845
+ border-style: var(--tw-border-style);
1846
+ border-width: 2px;
1847
+ }
1848
+
1849
+ .border-4 {
1850
+ border-style: var(--tw-border-style);
1851
+ border-width: 4px;
1852
+ }
1853
+
1854
+ .border-r {
1855
+ border-right-style: var(--tw-border-style);
1856
+ border-right-width: 1px;
1857
+ }
1858
+
1859
+ .border-b {
1860
+ border-bottom-style: var(--tw-border-style);
1861
+ border-bottom-width: 1px;
1862
+ }
1863
+
1864
+ .border-b-2 {
1865
+ border-bottom-style: var(--tw-border-style);
1866
+ border-bottom-width: 2px;
1867
+ }
1868
+
1869
+ .border-l {
1870
+ border-left-style: var(--tw-border-style);
1871
+ border-left-width: 1px;
1872
+ }
1873
+
1874
+ .border-dashed {
1875
+ --tw-border-style: dashed;
1876
+ border-style: dashed;
1877
+ }
1878
+
1879
+ .border-black {
1880
+ border-color: var(--color-black);
1881
+ }
1882
+
1883
+ .border-coral-red {
1884
+ border-color: var(--color-coral-red);
1885
+ }
1886
+
1887
+ .border-coral-red\\/40 {
1888
+ border-color: #ff6b6b66;
1889
+ }
1890
+
1891
+ @supports (color: color-mix(in lab, red, red)) {
1892
+ .border-coral-red\\/40 {
1893
+ border-color: color-mix(in oklab, var(--color-coral-red) 40%, transparent);
1894
+ }
1895
+ }
1896
+
1897
+ .border-electric-blue\\/40 {
1898
+ border-color: #3b82f666;
1899
+ }
1900
+
1901
+ @supports (color: color-mix(in lab, red, red)) {
1902
+ .border-electric-blue\\/40 {
1903
+ border-color: color-mix(in oklab, var(--color-electric-blue) 40%, transparent);
1904
+ }
1905
+ }
1906
+
1907
+ .border-gray-600 {
1908
+ border-color: var(--color-gray-600);
1909
+ }
1910
+
1911
+ .border-gray-700 {
1912
+ border-color: var(--color-gray-700);
1913
+ }
1914
+
1915
+ .border-neon-green {
1916
+ border-color: var(--color-neon-green);
1917
+ }
1918
+
1919
+ .border-neon-green\\/40 {
1920
+ border-color: #84cc1666;
1921
+ }
1922
+
1923
+ @supports (color: color-mix(in lab, red, red)) {
1924
+ .border-neon-green\\/40 {
1925
+ border-color: color-mix(in oklab, var(--color-neon-green) 40%, transparent);
1926
+ }
1927
+ }
1928
+
1929
+ .border-primary {
1930
+ border-color: var(--color-primary);
1931
+ }
1932
+
1933
+ .border-primary\\/40 {
1934
+ border-color: #f9b11f66;
1935
+ }
1936
+
1937
+ @supports (color: color-mix(in lab, red, red)) {
1938
+ .border-primary\\/40 {
1939
+ border-color: color-mix(in oklab, var(--color-primary) 40%, transparent);
1940
+ }
1941
+ }
1942
+
1943
+ .border-transparent {
1944
+ border-color: #0000;
1945
+ }
1946
+
1947
+ .border-white\\/5 {
1948
+ border-color: #ffffff0d;
1949
+ }
1950
+
1951
+ @supports (color: color-mix(in lab, red, red)) {
1952
+ .border-white\\/5 {
1953
+ border-color: color-mix(in oklab, var(--color-white) 5%, transparent);
1954
+ }
1955
+ }
1956
+
1957
+ .border-white\\/10 {
1958
+ border-color: #ffffff1a;
1959
+ }
1960
+
1961
+ @supports (color: color-mix(in lab, red, red)) {
1962
+ .border-white\\/10 {
1963
+ border-color: color-mix(in oklab, var(--color-white) 10%, transparent);
1964
+ }
1965
+ }
1966
+
1967
+ .border-white\\/20 {
1968
+ border-color: #fff3;
1969
+ }
1970
+
1971
+ @supports (color: color-mix(in lab, red, red)) {
1972
+ .border-white\\/20 {
1973
+ border-color: color-mix(in oklab, var(--color-white) 20%, transparent);
1974
+ }
1975
+ }
1976
+
1977
+ .bg-bg-dark {
1978
+ background-color: var(--color-bg-dark);
1979
+ }
1980
+
1981
+ .bg-black\\/60 {
1982
+ background-color: #0009;
1983
+ }
1984
+
1985
+ @supports (color: color-mix(in lab, red, red)) {
1986
+ .bg-black\\/60 {
1987
+ background-color: color-mix(in oklab, var(--color-black) 60%, transparent);
1988
+ }
1989
+ }
1990
+
1991
+ .bg-coral-red {
1992
+ background-color: var(--color-coral-red);
1993
+ }
1994
+
1995
+ .bg-coral-red\\/10 {
1996
+ background-color: #ff6b6b1a;
1997
+ }
1998
+
1999
+ @supports (color: color-mix(in lab, red, red)) {
2000
+ .bg-coral-red\\/10 {
2001
+ background-color: color-mix(in oklab, var(--color-coral-red) 10%, transparent);
2002
+ }
2003
+ }
2004
+
2005
+ .bg-coral-red\\/12 {
2006
+ background-color: #ff6b6b1f;
2007
+ }
2008
+
2009
+ @supports (color: color-mix(in lab, red, red)) {
2010
+ .bg-coral-red\\/12 {
2011
+ background-color: color-mix(in oklab, var(--color-coral-red) 12%, transparent);
2012
+ }
2013
+ }
2014
+
2015
+ .bg-coral-red\\/15 {
2016
+ background-color: #ff6b6b26;
2017
+ }
2018
+
2019
+ @supports (color: color-mix(in lab, red, red)) {
2020
+ .bg-coral-red\\/15 {
2021
+ background-color: color-mix(in oklab, var(--color-coral-red) 15%, transparent);
2022
+ }
2023
+ }
2024
+
2025
+ .bg-coral-red\\/20 {
2026
+ background-color: #ff6b6b33;
2027
+ }
2028
+
2029
+ @supports (color: color-mix(in lab, red, red)) {
2030
+ .bg-coral-red\\/20 {
2031
+ background-color: color-mix(in oklab, var(--color-coral-red) 20%, transparent);
2032
+ }
2033
+ }
2034
+
2035
+ .bg-deep-charcoal {
2036
+ background-color: var(--color-deep-charcoal);
2037
+ }
2038
+
2039
+ .bg-electric-blue {
2040
+ background-color: var(--color-electric-blue);
2041
+ }
2042
+
2043
+ .bg-electric-blue\\/20 {
2044
+ background-color: #3b82f633;
2045
+ }
2046
+
2047
+ @supports (color: color-mix(in lab, red, red)) {
2048
+ .bg-electric-blue\\/20 {
2049
+ background-color: color-mix(in oklab, var(--color-electric-blue) 20%, transparent);
2050
+ }
2051
+ }
2052
+
2053
+ .bg-hot-pink {
2054
+ background-color: var(--color-hot-pink);
2055
+ }
2056
+
2057
+ .bg-neon-green {
2058
+ background-color: var(--color-neon-green);
2059
+ }
2060
+
2061
+ .bg-neon-green\\/10 {
2062
+ background-color: #84cc161a;
2063
+ }
2064
+
2065
+ @supports (color: color-mix(in lab, red, red)) {
2066
+ .bg-neon-green\\/10 {
2067
+ background-color: color-mix(in oklab, var(--color-neon-green) 10%, transparent);
2068
+ }
2069
+ }
2070
+
2071
+ .bg-neon-green\\/12 {
2072
+ background-color: #84cc161f;
2073
+ }
2074
+
2075
+ @supports (color: color-mix(in lab, red, red)) {
2076
+ .bg-neon-green\\/12 {
2077
+ background-color: color-mix(in oklab, var(--color-neon-green) 12%, transparent);
2078
+ }
2079
+ }
2080
+
2081
+ .bg-neon-green\\/20 {
2082
+ background-color: #84cc1633;
2083
+ }
2084
+
2085
+ @supports (color: color-mix(in lab, red, red)) {
2086
+ .bg-neon-green\\/20 {
2087
+ background-color: color-mix(in oklab, var(--color-neon-green) 20%, transparent);
2088
+ }
2089
+ }
2090
+
2091
+ .bg-primary {
2092
+ background-color: var(--color-primary);
2093
+ }
2094
+
2095
+ .bg-primary\\/10 {
2096
+ background-color: #f9b11f1a;
2097
+ }
2098
+
2099
+ @supports (color: color-mix(in lab, red, red)) {
2100
+ .bg-primary\\/10 {
2101
+ background-color: color-mix(in oklab, var(--color-primary) 10%, transparent);
2102
+ }
2103
+ }
2104
+
2105
+ .bg-primary\\/15 {
2106
+ background-color: #f9b11f26;
2107
+ }
2108
+
2109
+ @supports (color: color-mix(in lab, red, red)) {
2110
+ .bg-primary\\/15 {
2111
+ background-color: color-mix(in oklab, var(--color-primary) 15%, transparent);
2112
+ }
2113
+ }
2114
+
2115
+ .bg-primary\\/20 {
2116
+ background-color: #f9b11f33;
2117
+ }
2118
+
2119
+ @supports (color: color-mix(in lab, red, red)) {
2120
+ .bg-primary\\/20 {
2121
+ background-color: color-mix(in oklab, var(--color-primary) 20%, transparent);
2122
+ }
2123
+ }
2124
+
2125
+ .bg-transparent {
2126
+ background-color: #0000;
2127
+ }
2128
+
2129
+ .bg-vibrant-purple {
2130
+ background-color: var(--color-vibrant-purple);
2131
+ }
2132
+
2133
+ .bg-white {
2134
+ background-color: var(--color-white);
2135
+ }
2136
+
2137
+ .bg-white\\/5 {
2138
+ background-color: #ffffff0d;
2139
+ }
2140
+
2141
+ @supports (color: color-mix(in lab, red, red)) {
2142
+ .bg-white\\/5 {
2143
+ background-color: color-mix(in oklab, var(--color-white) 5%, transparent);
2144
+ }
2145
+ }
2146
+
2147
+ .bg-white\\/10 {
2148
+ background-color: #ffffff1a;
2149
+ }
2150
+
2151
+ @supports (color: color-mix(in lab, red, red)) {
2152
+ .bg-white\\/10 {
2153
+ background-color: color-mix(in oklab, var(--color-white) 10%, transparent);
2154
+ }
2155
+ }
2156
+
2157
+ .bg-white\\/\\[0\\.02\\] {
2158
+ background-color: #ffffff05;
2159
+ }
2160
+
2161
+ @supports (color: color-mix(in lab, red, red)) {
2162
+ .bg-white\\/\\[0\\.02\\] {
2163
+ background-color: color-mix(in oklab, var(--color-white) 2%, transparent);
2164
+ }
2165
+ }
2166
+
2167
+ .bg-white\\/\\[0\\.03\\] {
2168
+ background-color: #ffffff08;
2169
+ }
2170
+
2171
+ @supports (color: color-mix(in lab, red, red)) {
2172
+ .bg-white\\/\\[0\\.03\\] {
2173
+ background-color: color-mix(in oklab, var(--color-white) 3%, transparent);
2174
+ }
2175
+ }
2176
+
2177
+ .bg-\\[url\\(\\'data\\:image\\/svg\\+xml\\;charset\\=utf-8\\,\\%3Csvg\\%20xmlns\\%3D\\%22http\\%3A\\%2F\\%2Fwww\\.w3\\.org\\%2F2000\\%2Fsvg\\%22\\%20width\\%3D\\%2212\\%22\\%20height\\%3D\\%2212\\%22\\%20viewBox\\%3D\\%220\\%200\\%2024\\%2024\\%22\\%20fill\\%3D\\%22\\%23999\\%22\\%3E\\%3Cpath\\%20d\\%3D\\%22M7\\%2010l5\\%205\\%205-5z\\%22\\%2F\\%3E\\%3C\\%2Fsvg\\%3E\\'\\)\\] {
2178
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2212%22%20height%3D%2212%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22%23999%22%3E%3Cpath%20d%3D%22M7%2010l5%205%205-5z%22%2F%3E%3C%2Fsvg%3E");
2179
+ }
2180
+
2181
+ .bg-\\[right_4px_center\\] {
2182
+ background-position: right 4px center;
2183
+ }
2184
+
2185
+ .bg-no-repeat {
2186
+ background-repeat: no-repeat;
2187
+ }
2188
+
2189
+ .object-contain {
2190
+ object-fit: contain;
2191
+ }
2192
+
2193
+ .p-1\\.5 {
2194
+ padding: calc(var(--spacing) * 1.5);
2195
+ }
2196
+
2197
+ .p-2 {
2198
+ padding: calc(var(--spacing) * 2);
2199
+ }
2200
+
2201
+ .p-2\\.5 {
2202
+ padding: calc(var(--spacing) * 2.5);
2203
+ }
2204
+
2205
+ .p-3 {
2206
+ padding: calc(var(--spacing) * 3);
2207
+ }
2208
+
2209
+ .p-4 {
2210
+ padding: calc(var(--spacing) * 4);
2211
+ }
2212
+
2213
+ .p-5 {
2214
+ padding: calc(var(--spacing) * 5);
2215
+ }
2216
+
2217
+ .p-6 {
2218
+ padding: calc(var(--spacing) * 6);
2219
+ }
2220
+
2221
+ .px-1 {
2222
+ padding-inline: calc(var(--spacing) * 1);
2223
+ }
2224
+
2225
+ .px-1\\.5 {
2226
+ padding-inline: calc(var(--spacing) * 1.5);
2227
+ }
2228
+
2229
+ .px-2 {
2230
+ padding-inline: calc(var(--spacing) * 2);
2231
+ }
2232
+
2233
+ .px-2\\.5 {
2234
+ padding-inline: calc(var(--spacing) * 2.5);
2235
+ }
2236
+
2237
+ .px-3 {
2238
+ padding-inline: calc(var(--spacing) * 3);
2239
+ }
2240
+
2241
+ .px-4 {
2242
+ padding-inline: calc(var(--spacing) * 4);
2243
+ }
2244
+
2245
+ .px-5 {
2246
+ padding-inline: calc(var(--spacing) * 5);
2247
+ }
2248
+
2249
+ .py-0\\.5 {
2250
+ padding-block: calc(var(--spacing) * .5);
2251
+ }
2252
+
2253
+ .py-1 {
2254
+ padding-block: calc(var(--spacing) * 1);
2255
+ }
2256
+
2257
+ .py-1\\.5 {
2258
+ padding-block: calc(var(--spacing) * 1.5);
2259
+ }
2260
+
2261
+ .py-2 {
2262
+ padding-block: calc(var(--spacing) * 2);
2263
+ }
2264
+
2265
+ .py-2\\.5 {
2266
+ padding-block: calc(var(--spacing) * 2.5);
2267
+ }
2268
+
2269
+ .py-3 {
2270
+ padding-block: calc(var(--spacing) * 3);
2271
+ }
2272
+
2273
+ .py-6 {
2274
+ padding-block: calc(var(--spacing) * 6);
2275
+ }
2276
+
2277
+ .py-8 {
2278
+ padding-block: calc(var(--spacing) * 8);
2279
+ }
2280
+
2281
+ .pr-1 {
2282
+ padding-right: calc(var(--spacing) * 1);
2283
+ }
2284
+
2285
+ .pr-1\\.5 {
2286
+ padding-right: calc(var(--spacing) * 1.5);
2287
+ }
2288
+
2289
+ .pr-2 {
2290
+ padding-right: calc(var(--spacing) * 2);
2291
+ }
2292
+
2293
+ .pr-4 {
2294
+ padding-right: calc(var(--spacing) * 4);
2295
+ }
2296
+
2297
+ .pr-6 {
2298
+ padding-right: calc(var(--spacing) * 6);
2299
+ }
2300
+
2301
+ .pl-1\\.5 {
2302
+ padding-left: calc(var(--spacing) * 1.5);
2303
+ }
2304
+
2305
+ .pl-2 {
2306
+ padding-left: calc(var(--spacing) * 2);
2307
+ }
2308
+
2309
+ .pl-4 {
2310
+ padding-left: calc(var(--spacing) * 4);
2311
+ }
2312
+
2313
+ .pl-8 {
2314
+ padding-left: calc(var(--spacing) * 8);
2315
+ }
2316
+
2317
+ .pl-\\[22px\\] {
2318
+ padding-left: 22px;
2319
+ }
2320
+
2321
+ .pl-\\[98px\\] {
2322
+ padding-left: 98px;
2323
+ }
2324
+
2325
+ .text-center {
2326
+ text-align: center;
2327
+ }
2328
+
2329
+ .text-left {
2330
+ text-align: left;
2331
+ }
2332
+
2333
+ .text-right {
2334
+ text-align: right;
2335
+ }
2336
+
2337
+ .align-middle {
2338
+ vertical-align: middle;
2339
+ }
2340
+
2341
+ .font-mono {
2342
+ font-family: var(--font-mono);
2343
+ }
2344
+
2345
+ .text-2xl {
2346
+ font-size: var(--text-2xl);
2347
+ line-height: var(--tw-leading, var(--text-2xl--line-height));
2348
+ }
2349
+
2350
+ .text-3xl {
2351
+ font-size: var(--text-3xl);
2352
+ line-height: var(--tw-leading, var(--text-3xl--line-height));
2353
+ }
2354
+
2355
+ .text-5xl {
2356
+ font-size: var(--text-5xl);
2357
+ line-height: var(--tw-leading, var(--text-5xl--line-height));
2358
+ }
2359
+
2360
+ .text-base {
2361
+ font-size: var(--text-base);
2362
+ line-height: var(--tw-leading, var(--text-base--line-height));
2363
+ }
2364
+
2365
+ .text-lg {
2366
+ font-size: var(--text-lg);
2367
+ line-height: var(--tw-leading, var(--text-lg--line-height));
2368
+ }
2369
+
2370
+ .text-sm {
2371
+ font-size: var(--text-sm);
2372
+ line-height: var(--tw-leading, var(--text-sm--line-height));
2373
+ }
2374
+
2375
+ .text-xl {
2376
+ font-size: var(--text-xl);
2377
+ line-height: var(--tw-leading, var(--text-xl--line-height));
2378
+ }
2379
+
2380
+ .text-xs {
2381
+ font-size: var(--text-xs);
2382
+ line-height: var(--tw-leading, var(--text-xs--line-height));
2383
+ }
2384
+
2385
+ .text-\\[9px\\] {
2386
+ font-size: 9px;
2387
+ }
2388
+
2389
+ .text-\\[10px\\] {
2390
+ font-size: 10px;
2391
+ }
2392
+
2393
+ .text-\\[11px\\] {
2394
+ font-size: 11px;
2395
+ }
2396
+
2397
+ .leading-6 {
2398
+ --tw-leading: calc(var(--spacing) * 6);
2399
+ line-height: calc(var(--spacing) * 6);
2400
+ }
2401
+
2402
+ .leading-none {
2403
+ --tw-leading: 1;
2404
+ line-height: 1;
2405
+ }
2406
+
2407
+ .leading-relaxed {
2408
+ --tw-leading: var(--leading-relaxed);
2409
+ line-height: var(--leading-relaxed);
2410
+ }
2411
+
2412
+ .font-black {
2413
+ --tw-font-weight: var(--font-weight-black);
2414
+ font-weight: var(--font-weight-black);
2415
+ }
2416
+
2417
+ .font-bold {
2418
+ --tw-font-weight: var(--font-weight-bold);
2419
+ font-weight: var(--font-weight-bold);
2420
+ }
2421
+
2422
+ .tracking-wider {
2423
+ --tw-tracking: var(--tracking-wider);
2424
+ letter-spacing: var(--tracking-wider);
2425
+ }
2426
+
2427
+ .tracking-widest {
2428
+ --tw-tracking: var(--tracking-widest);
2429
+ letter-spacing: var(--tracking-widest);
2430
+ }
2431
+
2432
+ .break-all {
2433
+ word-break: break-all;
2434
+ }
2435
+
2436
+ .whitespace-nowrap {
2437
+ white-space: nowrap;
2438
+ }
2439
+
2440
+ .whitespace-pre {
2441
+ white-space: pre;
2442
+ }
2443
+
2444
+ .whitespace-pre-wrap {
2445
+ white-space: pre-wrap;
2446
+ }
2447
+
2448
+ .text-black {
2449
+ color: var(--color-black);
2450
+ }
2451
+
2452
+ .text-coral-red {
2453
+ color: var(--color-coral-red);
2454
+ }
2455
+
2456
+ .text-coral-red\\/40 {
2457
+ color: #ff6b6b66;
2458
+ }
2459
+
2460
+ @supports (color: color-mix(in lab, red, red)) {
2461
+ .text-coral-red\\/40 {
2462
+ color: color-mix(in oklab, var(--color-coral-red) 40%, transparent);
2463
+ }
2464
+ }
2465
+
2466
+ .text-coral-red\\/70 {
2467
+ color: #ff6b6bb3;
2468
+ }
2469
+
2470
+ @supports (color: color-mix(in lab, red, red)) {
2471
+ .text-coral-red\\/70 {
2472
+ color: color-mix(in oklab, var(--color-coral-red) 70%, transparent);
2473
+ }
2474
+ }
2475
+
2476
+ .text-coral-red\\/90 {
2477
+ color: #ff6b6be6;
2478
+ }
2479
+
2480
+ @supports (color: color-mix(in lab, red, red)) {
2481
+ .text-coral-red\\/90 {
2482
+ color: color-mix(in oklab, var(--color-coral-red) 90%, transparent);
2483
+ }
2484
+ }
2485
+
2486
+ .text-electric-blue {
2487
+ color: var(--color-electric-blue);
2488
+ }
2489
+
2490
+ .text-gray-100 {
2491
+ color: var(--color-gray-100);
2492
+ }
2493
+
2494
+ .text-gray-200 {
2495
+ color: var(--color-gray-200);
2496
+ }
2497
+
2498
+ .text-gray-300 {
2499
+ color: var(--color-gray-300);
2500
+ }
2501
+
2502
+ .text-gray-400 {
2503
+ color: var(--color-gray-400);
2504
+ }
2505
+
2506
+ .text-gray-500 {
2507
+ color: var(--color-gray-500);
2508
+ }
2509
+
2510
+ .text-gray-600 {
2511
+ color: var(--color-gray-600);
2512
+ }
2513
+
2514
+ .text-gray-700 {
2515
+ color: var(--color-gray-700);
2516
+ }
2517
+
2518
+ .text-hot-pink {
2519
+ color: var(--color-hot-pink);
2520
+ }
2521
+
2522
+ .text-neon-green {
2523
+ color: var(--color-neon-green);
2524
+ }
2525
+
2526
+ .text-neon-green\\/40 {
2527
+ color: #84cc1666;
2528
+ }
2529
+
2530
+ @supports (color: color-mix(in lab, red, red)) {
2531
+ .text-neon-green\\/40 {
2532
+ color: color-mix(in oklab, var(--color-neon-green) 40%, transparent);
2533
+ }
2534
+ }
2535
+
2536
+ .text-neon-green\\/70 {
2537
+ color: #84cc16b3;
2538
+ }
2539
+
2540
+ @supports (color: color-mix(in lab, red, red)) {
2541
+ .text-neon-green\\/70 {
2542
+ color: color-mix(in oklab, var(--color-neon-green) 70%, transparent);
2543
+ }
2544
+ }
2545
+
2546
+ .text-neon-green\\/90 {
2547
+ color: #84cc16e6;
2548
+ }
2549
+
2550
+ @supports (color: color-mix(in lab, red, red)) {
2551
+ .text-neon-green\\/90 {
2552
+ color: color-mix(in oklab, var(--color-neon-green) 90%, transparent);
2553
+ }
2554
+ }
2555
+
2556
+ .text-primary {
2557
+ color: var(--color-primary);
2558
+ }
2559
+
2560
+ .text-primary\\/70 {
2561
+ color: #f9b11fb3;
2562
+ }
2563
+
2564
+ @supports (color: color-mix(in lab, red, red)) {
2565
+ .text-primary\\/70 {
2566
+ color: color-mix(in oklab, var(--color-primary) 70%, transparent);
2567
+ }
2568
+ }
2569
+
2570
+ .text-primary\\/80 {
2571
+ color: #f9b11fcc;
2572
+ }
2573
+
2574
+ @supports (color: color-mix(in lab, red, red)) {
2575
+ .text-primary\\/80 {
2576
+ color: color-mix(in oklab, var(--color-primary) 80%, transparent);
2577
+ }
2578
+ }
2579
+
2580
+ .text-transparent {
2581
+ color: #0000;
2582
+ }
2583
+
2584
+ .text-vibrant-purple {
2585
+ color: var(--color-vibrant-purple);
2586
+ }
2587
+
2588
+ .text-white {
2589
+ color: var(--color-white);
2590
+ }
2591
+
2592
+ .uppercase {
2593
+ text-transform: uppercase;
2594
+ }
2595
+
2596
+ .italic {
2597
+ font-style: italic;
2598
+ }
2599
+
2600
+ .placeholder-gray-600::placeholder {
2601
+ color: var(--color-gray-600);
2602
+ }
2603
+
2604
+ .accent-primary {
2605
+ accent-color: var(--color-primary);
2606
+ }
2607
+
2608
+ .opacity-0 {
2609
+ opacity: 0;
2610
+ }
2611
+
2612
+ .opacity-40 {
2613
+ opacity: .4;
2614
+ }
2615
+
2616
+ .opacity-60 {
2617
+ opacity: .6;
2618
+ }
2619
+
2620
+ .opacity-70 {
2621
+ opacity: .7;
2622
+ }
2623
+
2624
+ .shadow-hard {
2625
+ --tw-shadow: 4px 4px 0 0 var(--tw-shadow-color, #000);
2626
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
2627
+ }
2628
+
2629
+ .shadow-hard-sm {
2630
+ --tw-shadow: 2px 2px 0 0 var(--tw-shadow-color, #000);
2631
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
2632
+ }
2633
+
2634
+ .shadow-hard-xl {
2635
+ --tw-shadow: 8px 8px 0 0 var(--tw-shadow-color, #000);
2636
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
2637
+ }
2638
+
2639
+ .shadow-none {
2640
+ --tw-shadow: 0 0 #0000;
2641
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
2642
+ }
2643
+
2644
+ .ring {
2645
+ --tw-ring-shadow: var(--tw-ring-inset, ) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
2646
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
2647
+ }
2648
+
2649
+ .outline {
2650
+ outline-style: var(--tw-outline-style);
2651
+ outline-width: 1px;
2652
+ }
2653
+
2654
+ .transition {
2655
+ transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, content-visibility, overlay, pointer-events;
2656
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
2657
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
2658
+ }
2659
+
2660
+ .transition-all {
2661
+ transition-property: all;
2662
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
2663
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
2664
+ }
2665
+
2666
+ .transition-colors {
2667
+ transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;
2668
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
2669
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
2670
+ }
2671
+
2672
+ .transition-opacity {
2673
+ transition-property: opacity;
2674
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
2675
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
2676
+ }
2677
+
2678
+ .transition-transform {
2679
+ transition-property: transform, translate, scale, rotate;
2680
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
2681
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
2682
+ }
2683
+
2684
+ .duration-300 {
2685
+ --tw-duration: .3s;
2686
+ transition-duration: .3s;
2687
+ }
2688
+
2689
+ .outline-none {
2690
+ --tw-outline-style: none;
2691
+ outline-style: none;
2692
+ }
2693
+
2694
+ .select-all {
2695
+ -webkit-user-select: all;
2696
+ user-select: all;
2697
+ }
2698
+
2699
+ .select-none {
2700
+ -webkit-user-select: none;
2701
+ user-select: none;
2702
+ }
2703
+
2704
+ @media (hover: hover) {
2705
+ .group-hover\\:text-primary:is(:where(.group):hover *) {
2706
+ color: var(--color-primary);
2707
+ }
2708
+
2709
+ .group-hover\\:opacity-100:is(:where(.group):hover *) {
2710
+ opacity: 1;
2711
+ }
2712
+ }
2713
+
2714
+ .peer-checked\\:border-primary:is(:where(.peer):checked ~ *) {
2715
+ border-color: var(--color-primary);
2716
+ }
2717
+
2718
+ .peer-checked\\:bg-primary:is(:where(.peer):checked ~ *) {
2719
+ background-color: var(--color-primary);
2720
+ }
2721
+
2722
+ .peer-checked\\:text-black:is(:where(.peer):checked ~ *) {
2723
+ color: var(--color-black);
2724
+ }
2725
+
2726
+ .last\\:border-b-0:last-child {
2727
+ border-bottom-style: var(--tw-border-style);
2728
+ border-bottom-width: 0;
2729
+ }
2730
+
2731
+ @media (hover: hover) {
2732
+ .hover\\:translate-x-0\\.5:hover {
2733
+ --tw-translate-x: calc(var(--spacing) * .5);
2734
+ translate: var(--tw-translate-x) var(--tw-translate-y);
2735
+ }
2736
+
2737
+ .hover\\:translate-x-\\[2px\\]:hover {
2738
+ --tw-translate-x: 2px;
2739
+ translate: var(--tw-translate-x) var(--tw-translate-y);
2740
+ }
2741
+
2742
+ .hover\\:translate-y-0\\.5:hover {
2743
+ --tw-translate-y: calc(var(--spacing) * .5);
2744
+ translate: var(--tw-translate-x) var(--tw-translate-y);
2745
+ }
2746
+
2747
+ .hover\\:translate-y-\\[2px\\]:hover {
2748
+ --tw-translate-y: 2px;
2749
+ translate: var(--tw-translate-x) var(--tw-translate-y);
2750
+ }
2751
+
2752
+ .hover\\:scale-110:hover {
2753
+ --tw-scale-x: 110%;
2754
+ --tw-scale-y: 110%;
2755
+ --tw-scale-z: 110%;
2756
+ scale: var(--tw-scale-x) var(--tw-scale-y);
2757
+ }
2758
+
2759
+ .hover\\:border-coral-red:hover {
2760
+ border-color: var(--color-coral-red);
2761
+ }
2762
+
2763
+ .hover\\:border-gray-600:hover {
2764
+ border-color: var(--color-gray-600);
2765
+ }
2766
+
2767
+ .hover\\:border-neon-green:hover {
2768
+ border-color: var(--color-neon-green);
2769
+ }
2770
+
2771
+ .hover\\:border-primary:hover {
2772
+ border-color: var(--color-primary);
2773
+ }
2774
+
2775
+ .hover\\:border-primary\\/50:hover {
2776
+ border-color: #f9b11f80;
2777
+ }
2778
+
2779
+ @supports (color: color-mix(in lab, red, red)) {
2780
+ .hover\\:border-primary\\/50:hover {
2781
+ border-color: color-mix(in oklab, var(--color-primary) 50%, transparent);
2782
+ }
2783
+ }
2784
+
2785
+ .hover\\:border-vibrant-purple:hover {
2786
+ border-color: var(--color-vibrant-purple);
2787
+ }
2788
+
2789
+ .hover\\:border-white:hover {
2790
+ border-color: var(--color-white);
2791
+ }
2792
+
2793
+ .hover\\:bg-primary\\/5:hover {
2794
+ background-color: #f9b11f0d;
2795
+ }
2796
+
2797
+ @supports (color: color-mix(in lab, red, red)) {
2798
+ .hover\\:bg-primary\\/5:hover {
2799
+ background-color: color-mix(in oklab, var(--color-primary) 5%, transparent);
2800
+ }
2801
+ }
2802
+
2803
+ .hover\\:bg-white\\/5:hover {
2804
+ background-color: #ffffff0d;
2805
+ }
2806
+
2807
+ @supports (color: color-mix(in lab, red, red)) {
2808
+ .hover\\:bg-white\\/5:hover {
2809
+ background-color: color-mix(in oklab, var(--color-white) 5%, transparent);
2810
+ }
2811
+ }
2812
+
2813
+ .hover\\:bg-white\\/10:hover {
2814
+ background-color: #ffffff1a;
2815
+ }
2816
+
2817
+ @supports (color: color-mix(in lab, red, red)) {
2818
+ .hover\\:bg-white\\/10:hover {
2819
+ background-color: color-mix(in oklab, var(--color-white) 10%, transparent);
2820
+ }
2821
+ }
2822
+
2823
+ .hover\\:text-coral-red:hover {
2824
+ color: var(--color-coral-red);
2825
+ }
2826
+
2827
+ .hover\\:text-gray-200:hover {
2828
+ color: var(--color-gray-200);
2829
+ }
2830
+
2831
+ .hover\\:text-gray-300:hover {
2832
+ color: var(--color-gray-300);
2833
+ }
2834
+
2835
+ .hover\\:text-neon-green:hover {
2836
+ color: var(--color-neon-green);
2837
+ }
2838
+
2839
+ .hover\\:text-primary:hover {
2840
+ color: var(--color-primary);
2841
+ }
2842
+
2843
+ .hover\\:text-vibrant-purple:hover {
2844
+ color: var(--color-vibrant-purple);
2845
+ }
2846
+
2847
+ .hover\\:text-white:hover {
2848
+ color: var(--color-white);
2849
+ }
2850
+
2851
+ .hover\\:shadow-none:hover {
2852
+ --tw-shadow: 0 0 #0000;
2853
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
2854
+ }
2855
+
2856
+ .hover\\:brightness-125:hover {
2857
+ --tw-brightness: brightness(125%);
2858
+ filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, );
2859
+ }
2860
+ }
2861
+
2862
+ .focus\\:translate-x-1:focus {
2863
+ --tw-translate-x: calc(var(--spacing) * 1);
2864
+ translate: var(--tw-translate-x) var(--tw-translate-y);
2865
+ }
2866
+
2867
+ .focus\\:translate-x-\\[4px\\]:focus {
2868
+ --tw-translate-x: 4px;
2869
+ translate: var(--tw-translate-x) var(--tw-translate-y);
2870
+ }
2871
+
2872
+ .focus\\:translate-y-1:focus {
2873
+ --tw-translate-y: calc(var(--spacing) * 1);
2874
+ translate: var(--tw-translate-x) var(--tw-translate-y);
2875
+ }
2876
+
2877
+ .focus\\:translate-y-\\[4px\\]:focus {
2878
+ --tw-translate-y: 4px;
2879
+ translate: var(--tw-translate-x) var(--tw-translate-y);
2880
+ }
2881
+
2882
+ .focus\\:border-electric-blue:focus {
2883
+ border-color: var(--color-electric-blue);
2884
+ }
2885
+
2886
+ .focus\\:border-gray-500:focus {
2887
+ border-color: var(--color-gray-500);
2888
+ }
2889
+
2890
+ .focus\\:border-neon-green:focus {
2891
+ border-color: var(--color-neon-green);
2892
+ }
2893
+
2894
+ .focus\\:border-primary:focus {
2895
+ border-color: var(--color-primary);
2896
+ }
2897
+
2898
+ .focus\\:border-vibrant-purple:focus {
2899
+ border-color: var(--color-vibrant-purple);
2900
+ }
2901
+
2902
+ .focus\\:shadow-none:focus {
2903
+ --tw-shadow: 0 0 #0000;
2904
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
2905
+ }
2906
+
2907
+ .active\\:cursor-grabbing:active {
2908
+ cursor: grabbing;
2909
+ }
2910
+
2911
+ .disabled\\:cursor-not-allowed:disabled {
2912
+ cursor: not-allowed;
2913
+ }
2914
+
2915
+ .disabled\\:opacity-40:disabled {
2916
+ opacity: .4;
2917
+ }
2918
+
2919
+ @media (min-width: 40rem) {
2920
+ .sm\\:grid-cols-2 {
2921
+ grid-template-columns: repeat(2, minmax(0, 1fr));
2922
+ }
2923
+
2924
+ .sm\\:grid-cols-3 {
2925
+ grid-template-columns: repeat(3, minmax(0, 1fr));
2926
+ }
2927
+
2928
+ .sm\\:flex-row {
2929
+ flex-direction: row;
2930
+ }
2931
+ }
2932
+
2933
+ @media (min-width: 48rem) {
2934
+ .md\\:grid-cols-2 {
2935
+ grid-template-columns: repeat(2, minmax(0, 1fr));
2936
+ }
2937
+ }
2938
+
2939
+ @media (min-width: 64rem) {
2940
+ .lg\\:grid-cols-2 {
2941
+ grid-template-columns: repeat(2, minmax(0, 1fr));
2942
+ }
2943
+
2944
+ .lg\\:grid-cols-4 {
2945
+ grid-template-columns: repeat(4, minmax(0, 1fr));
2946
+ }
2947
+ }
2948
+
2949
+ @media (min-width: 80rem) {
2950
+ .xl\\:grid-cols-3 {
2951
+ grid-template-columns: repeat(3, minmax(0, 1fr));
2952
+ }
2953
+ }
2954
+ }
2955
+
2956
+ @property --tw-translate-x {
2957
+ syntax: "*";
2958
+ inherits: false;
2959
+ initial-value: 0;
2960
+ }
2961
+
2962
+ @property --tw-translate-y {
2963
+ syntax: "*";
2964
+ inherits: false;
2965
+ initial-value: 0;
2966
+ }
2967
+
2968
+ @property --tw-translate-z {
2969
+ syntax: "*";
2970
+ inherits: false;
2971
+ initial-value: 0;
2972
+ }
2973
+
2974
+ @property --tw-rotate-x {
2975
+ syntax: "*";
2976
+ inherits: false
2977
+ }
2978
+
2979
+ @property --tw-rotate-y {
2980
+ syntax: "*";
2981
+ inherits: false
2982
+ }
2983
+
2984
+ @property --tw-rotate-z {
2985
+ syntax: "*";
2986
+ inherits: false
2987
+ }
2988
+
2989
+ @property --tw-skew-x {
2990
+ syntax: "*";
2991
+ inherits: false
2992
+ }
2993
+
2994
+ @property --tw-skew-y {
2995
+ syntax: "*";
2996
+ inherits: false
2997
+ }
2998
+
2999
+ @property --tw-space-y-reverse {
3000
+ syntax: "*";
3001
+ inherits: false;
3002
+ initial-value: 0;
3003
+ }
3004
+
3005
+ @property --tw-border-style {
3006
+ syntax: "*";
3007
+ inherits: false;
3008
+ initial-value: solid;
3009
+ }
3010
+
3011
+ @property --tw-leading {
3012
+ syntax: "*";
3013
+ inherits: false
3014
+ }
3015
+
3016
+ @property --tw-font-weight {
3017
+ syntax: "*";
3018
+ inherits: false
3019
+ }
3020
+
3021
+ @property --tw-tracking {
3022
+ syntax: "*";
3023
+ inherits: false
3024
+ }
3025
+
3026
+ @property --tw-shadow {
3027
+ syntax: "*";
3028
+ inherits: false;
3029
+ initial-value: 0 0 #0000;
3030
+ }
3031
+
3032
+ @property --tw-shadow-color {
3033
+ syntax: "*";
3034
+ inherits: false
3035
+ }
3036
+
3037
+ @property --tw-shadow-alpha {
3038
+ syntax: "<percentage>";
3039
+ inherits: false;
3040
+ initial-value: 100%;
3041
+ }
3042
+
3043
+ @property --tw-inset-shadow {
3044
+ syntax: "*";
3045
+ inherits: false;
3046
+ initial-value: 0 0 #0000;
3047
+ }
3048
+
3049
+ @property --tw-inset-shadow-color {
3050
+ syntax: "*";
3051
+ inherits: false
3052
+ }
3053
+
3054
+ @property --tw-inset-shadow-alpha {
3055
+ syntax: "<percentage>";
3056
+ inherits: false;
3057
+ initial-value: 100%;
3058
+ }
3059
+
3060
+ @property --tw-ring-color {
3061
+ syntax: "*";
3062
+ inherits: false
3063
+ }
3064
+
3065
+ @property --tw-ring-shadow {
3066
+ syntax: "*";
3067
+ inherits: false;
3068
+ initial-value: 0 0 #0000;
3069
+ }
3070
+
3071
+ @property --tw-inset-ring-color {
3072
+ syntax: "*";
3073
+ inherits: false
3074
+ }
3075
+
3076
+ @property --tw-inset-ring-shadow {
3077
+ syntax: "*";
3078
+ inherits: false;
3079
+ initial-value: 0 0 #0000;
3080
+ }
3081
+
3082
+ @property --tw-ring-inset {
3083
+ syntax: "*";
3084
+ inherits: false
3085
+ }
3086
+
3087
+ @property --tw-ring-offset-width {
3088
+ syntax: "<length>";
3089
+ inherits: false;
3090
+ initial-value: 0;
3091
+ }
3092
+
3093
+ @property --tw-ring-offset-color {
3094
+ syntax: "*";
3095
+ inherits: false;
3096
+ initial-value: #fff;
3097
+ }
3098
+
3099
+ @property --tw-ring-offset-shadow {
3100
+ syntax: "*";
3101
+ inherits: false;
3102
+ initial-value: 0 0 #0000;
3103
+ }
3104
+
3105
+ @property --tw-outline-style {
3106
+ syntax: "*";
3107
+ inherits: false;
3108
+ initial-value: solid;
3109
+ }
3110
+
3111
+ @property --tw-duration {
3112
+ syntax: "*";
3113
+ inherits: false
3114
+ }
3115
+
3116
+ @property --tw-scale-x {
3117
+ syntax: "*";
3118
+ inherits: false;
3119
+ initial-value: 1;
3120
+ }
3121
+
3122
+ @property --tw-scale-y {
3123
+ syntax: "*";
3124
+ inherits: false;
3125
+ initial-value: 1;
3126
+ }
3127
+
3128
+ @property --tw-scale-z {
3129
+ syntax: "*";
3130
+ inherits: false;
3131
+ initial-value: 1;
3132
+ }
3133
+
3134
+ @property --tw-blur {
3135
+ syntax: "*";
3136
+ inherits: false
3137
+ }
3138
+
3139
+ @property --tw-brightness {
3140
+ syntax: "*";
3141
+ inherits: false
3142
+ }
3143
+
3144
+ @property --tw-contrast {
3145
+ syntax: "*";
3146
+ inherits: false
3147
+ }
3148
+
3149
+ @property --tw-grayscale {
3150
+ syntax: "*";
3151
+ inherits: false
3152
+ }
3153
+
3154
+ @property --tw-hue-rotate {
3155
+ syntax: "*";
3156
+ inherits: false
3157
+ }
3158
+
3159
+ @property --tw-invert {
3160
+ syntax: "*";
3161
+ inherits: false
3162
+ }
3163
+
3164
+ @property --tw-opacity {
3165
+ syntax: "*";
3166
+ inherits: false
3167
+ }
3168
+
3169
+ @property --tw-saturate {
3170
+ syntax: "*";
3171
+ inherits: false
3172
+ }
3173
+
3174
+ @property --tw-sepia {
3175
+ syntax: "*";
3176
+ inherits: false
3177
+ }
3178
+
3179
+ @property --tw-drop-shadow {
3180
+ syntax: "*";
3181
+ inherits: false
3182
+ }
3183
+
3184
+ @property --tw-drop-shadow-color {
3185
+ syntax: "*";
3186
+ inherits: false
3187
+ }
3188
+
3189
+ @property --tw-drop-shadow-alpha {
3190
+ syntax: "<percentage>";
3191
+ inherits: false;
3192
+ initial-value: 100%;
3193
+ }
3194
+
3195
+ @property --tw-drop-shadow-size {
3196
+ syntax: "*";
3197
+ inherits: false
3198
+ }
3199
+
3200
+ @keyframes spin {
3201
+ to {
3202
+ transform: rotate(360deg);
3203
+ }
3204
+ }
3205
+
3206
+ @keyframes pulse {
3207
+ 50% {
3208
+ opacity: .5;
3209
+ }
3210
+ }
3211
+ `;})();