@qwik.dev/devtools 0.2.2 → 0.2.4

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.
@@ -8030,171 +8030,199 @@ var import_src = __toESM(require_src(), 1);
8030
8030
  //#endregion
8031
8031
  //#region src/npm/index.ts
8032
8032
  const log$4 = (0, import_src.debug)("qwik:devtools:npm");
8033
- const packageCache = new Map();
8034
- const CACHE_TTL = 1e3 * 60 * 30;
8035
8033
  let preloadedDependencies = null;
8036
8034
  let isPreloading = false;
8037
8035
  let preloadPromise = null;
8038
- function getCachedPackage(name) {
8039
- const cached = packageCache.get(name);
8040
- if (cached && Date.now() - cached.timestamp < CACHE_TTL) return cached.data;
8041
- packageCache.delete(name);
8042
- return null;
8043
- }
8044
- function setCachedPackage(name, data) {
8045
- packageCache.set(name, {
8046
- data,
8047
- timestamp: Date.now()
8048
- });
8036
+ let dependenciesStatus = {
8037
+ phase: "idle",
8038
+ loaded: 0,
8039
+ total: 0,
8040
+ startedAt: null,
8041
+ finishedAt: null
8042
+ };
8043
+ async function fileExists(filePath) {
8044
+ try {
8045
+ await fsp.access(filePath);
8046
+ return true;
8047
+ } catch {
8048
+ return false;
8049
+ }
8049
8050
  }
8050
- async function findNearestFileUp(startDir, fileName) {
8051
+ async function readJsonFile(filePath) {
8051
8052
  try {
8052
- let currentDir = path.resolve(startDir);
8053
- for (let i = 0; i < 100; i++) {
8054
- const candidate = path.join(currentDir, fileName);
8055
- const exists = await fsp.access(candidate).then(() => true).catch(() => false);
8056
- if (exists) return candidate;
8057
- const parent = path.dirname(currentDir);
8058
- if (parent === currentDir) break;
8059
- currentDir = parent;
8060
- }
8061
- return null;
8053
+ const content = await fsp.readFile(filePath, "utf-8");
8054
+ return JSON.parse(content);
8062
8055
  } catch {
8063
8056
  return null;
8064
8057
  }
8065
8058
  }
8059
+ async function findNearestFileUp(startDir, fileName) {
8060
+ let currentDir = path.resolve(startDir);
8061
+ for (let i = 0; i < 100; i++) {
8062
+ const candidate = path.join(currentDir, fileName);
8063
+ if (await fileExists(candidate)) return candidate;
8064
+ const parent = path.dirname(currentDir);
8065
+ if (parent === currentDir) break;
8066
+ currentDir = parent;
8067
+ }
8068
+ return null;
8069
+ }
8066
8070
  function getProjectStartDirFromConfig(config) {
8067
8071
  if (config?.root) return config.root;
8068
8072
  if (config?.configFile) return path.dirname(config.configFile);
8069
8073
  return process.cwd();
8070
8074
  }
8071
- async function detectPackageManager(projectRoot) {
8072
- try {
8073
- if (await fsp.access(path.join(projectRoot, "pnpm-lock.yaml")).then(() => true).catch(() => false)) return "pnpm";
8074
- if (await fsp.access(path.join(projectRoot, "yarn.lock")).then(() => true).catch(() => false)) return "yarn";
8075
- if (await fsp.access(path.join(projectRoot, "package-lock.json")).then(() => true).catch(() => false)) return "npm";
8076
- return "pnpm";
8077
- } catch {
8078
- return "pnpm";
8079
- }
8075
+ function nodeModulesPackageJsonPath(projectRoot, name) {
8076
+ return path.join(projectRoot, "node_modules", ...name.split("/"), "package.json");
8077
+ }
8078
+ function normalizeRepositoryUrl(repository) {
8079
+ const url = typeof repository === "string" ? repository : repository?.url;
8080
+ if (!url || typeof url !== "string") return void 0;
8081
+ return url.replace(/^git\+/, "").replace(/^ssh:\/\/git@/, "https://").replace(/\.git$/, "");
8080
8082
  }
8081
- const preloadDependencies = async (config) => {
8082
- if (preloadedDependencies) {
8083
- log$4("[Qwik DevTools] Dependencies already preloaded");
8084
- return preloadedDependencies;
8083
+ function guessIconUrl(name, repositoryUrl) {
8084
+ if (name.startsWith("@")) {
8085
+ const scope = name.split("/")[0].substring(1);
8086
+ return `https://avatars.githubusercontent.com/${scope}?size=64`;
8085
8087
  }
8086
- if (isPreloading && preloadPromise) {
8087
- log$4("[Qwik DevTools] Preloading already in progress...");
8088
- return preloadPromise;
8088
+ if (repositoryUrl?.includes("github.com")) {
8089
+ const match$1 = repositoryUrl.match(/github\.com\/([^\/]+)/);
8090
+ if (match$1) return `https://avatars.githubusercontent.com/${match$1[1]}?size=64`;
8089
8091
  }
8092
+ return null;
8093
+ }
8094
+ function deferToEventLoop() {
8095
+ return new Promise((resolve$2) => setImmediate(resolve$2));
8096
+ }
8097
+ async function mapLimit(items, concurrency, fn) {
8098
+ if (items.length === 0) return [];
8099
+ const results = new Array(items.length);
8100
+ let cursor = 0;
8101
+ const workers = Array.from({ length: Math.min(concurrency, items.length) }, async () => {
8102
+ while (true) {
8103
+ const i = cursor++;
8104
+ if (i >= items.length) return;
8105
+ results[i] = await fn(items[i], i);
8106
+ }
8107
+ });
8108
+ await Promise.all(workers);
8109
+ return results;
8110
+ }
8111
+ async function detectPackageManager(projectRoot) {
8112
+ if (await fileExists(path.join(projectRoot, "pnpm-lock.yaml"))) return "pnpm";
8113
+ if (await fileExists(path.join(projectRoot, "yarn.lock"))) return "yarn";
8114
+ if (await fileExists(path.join(projectRoot, "package-lock.json"))) return "npm";
8115
+ return "pnpm";
8116
+ }
8117
+ async function phase1LocalIndex(projectRoot, deps) {
8118
+ const localConcurrency = 16;
8119
+ return mapLimit(deps, localConcurrency, async ([name, requestedVersion]) => {
8120
+ const pkgJsonPath = nodeModulesPackageJsonPath(projectRoot, name);
8121
+ const installedPkg = await readJsonFile(pkgJsonPath);
8122
+ const version = installedPkg?.version || requestedVersion;
8123
+ const repository = normalizeRepositoryUrl(installedPkg?.repository);
8124
+ const iconUrl = guessIconUrl(name, repository);
8125
+ const info = {
8126
+ name,
8127
+ version,
8128
+ description: installedPkg?.description || "No description available",
8129
+ author: installedPkg?.author,
8130
+ homepage: installedPkg?.homepage,
8131
+ repository,
8132
+ npmUrl: `https://www.npmjs.com/package/${name}`,
8133
+ iconUrl
8134
+ };
8135
+ dependenciesStatus.loaded++;
8136
+ if (dependenciesStatus.loaded % 50 === 0) await deferToEventLoop();
8137
+ return info;
8138
+ });
8139
+ }
8140
+ async function phase2BackgroundEnrich(deps) {
8141
+ const targets = deps.filter((p$1) => !p$1.repository || !p$1.iconUrl || p$1.description === "No description available");
8142
+ const enrichConcurrency = 6;
8143
+ await mapLimit(targets, enrichConcurrency, async (p$1) => {
8144
+ const repo = normalizeRepositoryUrl(p$1.repository);
8145
+ if (repo && repo !== p$1.repository) p$1.repository = repo;
8146
+ if (!p$1.iconUrl) p$1.iconUrl = guessIconUrl(p$1.name, p$1.repository);
8147
+ if (!p$1.repository || p$1.description === "No description available") try {
8148
+ const controller = new AbortController();
8149
+ const timeoutId = setTimeout(() => controller.abort(), 1500);
8150
+ const res = await fetch(`https://registry.npmjs.org/${encodeURIComponent(p$1.name)}/${encodeURIComponent(p$1.version)}`, {
8151
+ headers: { Accept: "application/json" },
8152
+ signal: controller.signal
8153
+ });
8154
+ clearTimeout(timeoutId);
8155
+ if (res.ok) {
8156
+ const data = await res.json();
8157
+ if (!p$1.repository) p$1.repository = normalizeRepositoryUrl(data?.repository);
8158
+ if (p$1.description === "No description available" && data?.description) p$1.description = data.description;
8159
+ if (!p$1.iconUrl) p$1.iconUrl = guessIconUrl(p$1.name, p$1.repository);
8160
+ }
8161
+ } catch {}
8162
+ await deferToEventLoop();
8163
+ return p$1;
8164
+ });
8165
+ }
8166
+ async function preloadDependencies(config) {
8167
+ if (preloadedDependencies) return preloadedDependencies;
8168
+ if (isPreloading && preloadPromise) return preloadPromise;
8090
8169
  isPreloading = true;
8091
- log$4("[Qwik DevTools] Starting to preload dependencies...");
8170
+ dependenciesStatus = {
8171
+ phase: "phase1",
8172
+ loaded: 0,
8173
+ total: 0,
8174
+ startedAt: Date.now(),
8175
+ finishedAt: null
8176
+ };
8092
8177
  preloadPromise = (async () => {
8093
8178
  const startDir = getProjectStartDirFromConfig(config);
8094
- const pathToPackageJson = await findNearestFileUp(startDir, "package.json");
8095
- if (!pathToPackageJson) {
8179
+ const packageJsonPath = await findNearestFileUp(startDir, "package.json");
8180
+ if (!packageJsonPath) {
8096
8181
  preloadedDependencies = [];
8182
+ dependenciesStatus.phase = "done";
8183
+ dependenciesStatus.finishedAt = Date.now();
8097
8184
  isPreloading = false;
8098
- log$4("[Qwik DevTools] No package.json found");
8099
8185
  return [];
8100
8186
  }
8187
+ const projectRoot = path.dirname(packageJsonPath);
8188
+ const pkg = await readJsonFile(packageJsonPath);
8189
+ const allDeps = {
8190
+ ...pkg?.dependencies || {},
8191
+ ...pkg?.devDependencies || {},
8192
+ ...pkg?.peerDependencies || {}
8193
+ };
8194
+ const entries = Object.entries(allDeps);
8195
+ dependenciesStatus.total = entries.length;
8101
8196
  try {
8102
- const pkgJson = await fsp.readFile(pathToPackageJson, "utf-8");
8103
- const pkg = JSON.parse(pkgJson);
8104
- const allDeps = {
8105
- ...pkg.dependencies || {},
8106
- ...pkg.devDependencies || {},
8107
- ...pkg.peerDependencies || {}
8108
- };
8109
- const dependencies = Object.entries(allDeps);
8110
- const cachedPackages = [];
8111
- const uncachedDependencies = [];
8112
- for (const [name, version] of dependencies) {
8113
- const cached = getCachedPackage(name);
8114
- if (cached) cachedPackages.push({
8115
- ...cached,
8116
- version
8117
- });
8118
- else uncachedDependencies.push([name, version]);
8119
- }
8120
- if (uncachedDependencies.length === 0) {
8121
- preloadedDependencies = cachedPackages;
8122
- isPreloading = false;
8123
- return cachedPackages;
8124
- }
8125
- const batchSize = 100;
8126
- const batches = [];
8127
- for (let i = 0; i < uncachedDependencies.length; i += batchSize) batches.push(uncachedDependencies.slice(i, i + batchSize));
8128
- const fetchedPackages = [];
8129
- log$4(`[Qwik DevTools] Fetching ${uncachedDependencies.length} packages in parallel...`);
8130
- const allBatchPromises = batches.map(async (batch) => {
8131
- const batchPromises = batch.map(async ([name, version]) => {
8132
- try {
8133
- const controller = new AbortController();
8134
- const timeoutId = setTimeout(() => controller.abort(), 5e3);
8135
- const response = await fetch(`https://registry.npmjs.org/${name}`, {
8136
- headers: { "Accept": "application/json" },
8137
- signal: controller.signal
8138
- });
8139
- clearTimeout(timeoutId);
8140
- if (!response.ok) throw new Error(`HTTP ${response.status}`);
8141
- const packageData = await response.json();
8142
- const latestVersion = packageData["dist-tags"]?.latest || version;
8143
- const versionData = packageData.versions?.[latestVersion] || packageData.versions?.[version];
8144
- let repositoryUrl = versionData?.repository?.url || packageData.repository?.url;
8145
- if (repositoryUrl) repositoryUrl = repositoryUrl.replace(/^git\+/, "").replace(/^ssh:\/\/git@/, "https://").replace(/\.git$/, "");
8146
- let iconUrl = null;
8147
- if (packageData.logo) iconUrl = packageData.logo;
8148
- else if (name.startsWith("@")) {
8149
- const scope = name.split("/")[0].substring(1);
8150
- iconUrl = `https://avatars.githubusercontent.com/${scope}?size=64`;
8151
- } else if (repositoryUrl?.includes("github.com")) {
8152
- const repoMatch = repositoryUrl.match(/github\.com\/([^\/]+)/);
8153
- if (repoMatch) iconUrl = `https://avatars.githubusercontent.com/${repoMatch[1]}?size=64`;
8154
- }
8155
- const packageInfo = {
8156
- name,
8157
- version,
8158
- description: versionData?.description || packageData.description || "No description available",
8159
- author: versionData?.author || packageData.author,
8160
- homepage: versionData?.homepage || packageData.homepage,
8161
- repository: repositoryUrl,
8162
- npmUrl: `https://www.npmjs.com/package/${name}`,
8163
- iconUrl
8164
- };
8165
- setCachedPackage(name, packageInfo);
8166
- return packageInfo;
8167
- } catch (error) {
8168
- const basicInfo = {
8169
- name,
8170
- version,
8171
- description: "No description available",
8172
- npmUrl: `https://www.npmjs.com/package/${name}`,
8173
- iconUrl: null
8174
- };
8175
- setCachedPackage(name, basicInfo);
8176
- return basicInfo;
8177
- }
8178
- });
8179
- const batchResults = await Promise.allSettled(batchPromises);
8180
- return batchResults.filter((result) => result.status === "fulfilled").map((result) => result.value);
8181
- });
8182
- const allBatchResults = await Promise.all(allBatchPromises);
8183
- for (const batchResult of allBatchResults) fetchedPackages.push(...batchResult);
8184
- const allPackages = [...cachedPackages, ...fetchedPackages];
8185
- preloadedDependencies = allPackages;
8186
- isPreloading = false;
8187
- log$4(`[Qwik DevTools] ✓ Successfully preloaded ${allPackages.length} dependencies`);
8188
- return allPackages;
8189
- } catch (error) {
8190
- log$4("[Qwik DevTools] ✗ Failed to preload dependencies:", error);
8197
+ const list = await phase1LocalIndex(projectRoot, entries);
8198
+ preloadedDependencies = list;
8199
+ dependenciesStatus.phase = "phase2";
8200
+ (async () => {
8201
+ try {
8202
+ await phase2BackgroundEnrich(list);
8203
+ dependenciesStatus.phase = "done";
8204
+ } catch (e) {
8205
+ dependenciesStatus.phase = "error";
8206
+ dependenciesStatus.error = e instanceof Error ? e.message : String(e);
8207
+ } finally {
8208
+ dependenciesStatus.finishedAt = Date.now();
8209
+ isPreloading = false;
8210
+ }
8211
+ })();
8212
+ log$4(`[Qwik DevTools] ✓ Phase1 preloaded ${list.length} dependencies (local-first)`);
8213
+ return list;
8214
+ } catch (e) {
8191
8215
  preloadedDependencies = [];
8216
+ dependenciesStatus.phase = "error";
8217
+ dependenciesStatus.error = e instanceof Error ? e.message : String(e);
8218
+ dependenciesStatus.finishedAt = Date.now();
8192
8219
  isPreloading = false;
8220
+ log$4("[Qwik DevTools] ✗ Failed to preload dependencies (local-first):", e);
8193
8221
  return [];
8194
8222
  }
8195
8223
  })();
8196
8224
  return preloadPromise;
8197
- };
8225
+ }
8198
8226
  async function startPreloading({ config }) {
8199
8227
  const startTime = Date.now();
8200
8228
  log$4("[Qwik DevTools] 🚀 Initiating dependency preload (background)...");
@@ -8213,8 +8241,7 @@ function getNpmFunctions({ config }) {
8213
8241
  const pathToPackageJson = await findNearestFileUp(startDir, "package.json");
8214
8242
  if (!pathToPackageJson) return [];
8215
8243
  try {
8216
- const pkgJson = await fsp.readFile(pathToPackageJson, "utf-8");
8217
- const pkg = JSON.parse(pkgJson);
8244
+ const pkg = await readJsonFile(pathToPackageJson);
8218
8245
  return Object.entries(pkg.devDependencies).filter(([key]) => /@qwik/i.test(key));
8219
8246
  } catch (error) {
8220
8247
  return [];
@@ -8225,12 +8252,26 @@ function getNpmFunctions({ config }) {
8225
8252
  log$4("[Qwik DevTools] Returning preloaded dependencies");
8226
8253
  return preloadedDependencies;
8227
8254
  }
8228
- if (isPreloading && preloadPromise) {
8229
- log$4("[Qwik DevTools] Waiting for preload to complete...");
8230
- return preloadPromise;
8231
- }
8255
+ if (isPreloading) return [];
8232
8256
  log$4("[Qwik DevTools] Warning: Preload not started, starting now...");
8233
- return preloadDependencies(config);
8257
+ preloadDependencies(config);
8258
+ return [];
8259
+ },
8260
+ async getDependenciesStatus() {
8261
+ return dependenciesStatus;
8262
+ },
8263
+ async refreshDependencies() {
8264
+ preloadedDependencies = null;
8265
+ isPreloading = false;
8266
+ preloadPromise = null;
8267
+ dependenciesStatus = {
8268
+ phase: "idle",
8269
+ loaded: 0,
8270
+ total: 0,
8271
+ startedAt: null,
8272
+ finishedAt: null
8273
+ };
8274
+ preloadDependencies(config);
8234
8275
  },
8235
8276
  async installPackage(packageName, isDev = true) {
8236
8277
  try {
@@ -9810,11 +9851,6 @@ const __qwik_perf_init_csr__ = () => {
9810
9851
  const __qwik_perf_get_ssr_store__ = () =>
9811
9852
  typeof process !== 'undefined' && process ? process : globalThis;
9812
9853
 
9813
- const __qwik_perf_to_error__ = (err) => ({
9814
- name: (err && err.name) || 'Error',
9815
- message: err && err.message ? String(err.message) : String(err),
9816
- });
9817
-
9818
9854
  const __qwik_perf_next_id__ = (perf) => {
9819
9855
  perf._id = (perf._id || 0) + 1;
9820
9856
  return perf._id;
@@ -9936,31 +9972,17 @@ function componentQrl(qrl, options) {
9936
9972
  if(qrl.dev){
9937
9973
  viteId = qrl.dev.file.replace(/[^/]*$/, qrl.dev.displayName);
9938
9974
  }
9939
- try {
9940
- const result = originalComponentQrl(qrl, options);
9941
- const duration = performance.now() - start;
9942
- __qwik_perf_commit_componentqrl__({
9943
- component,
9944
- phase,
9945
- duration,
9946
- start,
9947
- viteId,
9948
- end: start + duration,
9949
- });
9950
- return result;
9951
- } catch (err) {
9952
- const duration = performance.now() - start;
9953
- __qwik_perf_commit_componentqrl__({
9954
- component,
9955
- phase,
9956
- duration,
9957
- start,
9958
- viteId,
9959
- end: start + duration,
9960
- error: __qwik_perf_to_error__(err),
9961
- });
9962
- throw err;
9963
- }
9975
+ const result = originalComponentQrl(qrl, options);
9976
+ const duration = performance.now() - start;
9977
+ __qwik_perf_commit_componentqrl__({
9978
+ component,
9979
+ phase,
9980
+ duration,
9981
+ start,
9982
+ viteId,
9983
+ end: start + duration,
9984
+ });
9985
+ return result;
9964
9986
  }
9965
9987
 
9966
9988
  export { componentQrl };
@@ -10089,40 +10111,50 @@ const perfLazyWrapperPreamble = `${perfRuntime_default}
10089
10111
 
10090
10112
  // [qwik-component-proxy] Render function wrapper
10091
10113
  const __qwik_wrap__ = (fn, name, viteId) => {
10114
+ if (typeof fn !== 'function') return fn;
10092
10115
  let renderCount = 0;
10093
- return function (...args) {
10116
+
10117
+ function wrapped(...args) {
10094
10118
  renderCount += 1;
10095
10119
  const phase = __qwik_perf_is_server__() ? 'ssr' : 'csr';
10096
10120
  const start = performance.now();
10097
10121
 
10098
- try {
10099
- const result = fn.apply(this, args);
10100
- const duration = performance.now() - start;
10101
- __qwik_perf_commit__({
10102
- component: name,
10103
- phase,
10104
- duration,
10105
- start,
10106
- end: start + duration,
10107
- viteId,
10108
- renderCount,
10109
- });
10110
- return result;
10111
- } catch (err) {
10112
- const duration = performance.now() - start;
10113
- __qwik_perf_commit__({
10114
- component: name,
10115
- phase,
10116
- duration,
10117
- start,
10118
- end: start + duration,
10119
- error: __qwik_perf_to_error__(err),
10120
- viteId,
10121
- renderCount,
10122
- });
10123
- throw err;
10124
- }
10122
+ const result = fn.apply(this, args);
10123
+ const duration = performance.now() - start;
10124
+ __qwik_perf_commit__({
10125
+ component: name,
10126
+ phase,
10127
+ duration,
10128
+ start,
10129
+ end: start + duration,
10130
+ viteId,
10131
+ renderCount,
10132
+ });
10133
+ return result;
10134
+ }
10135
+
10136
+ // Preserve Qwik-compiler metadata attached to the original function.
10137
+ // (No try/catch per request; avoid touching special function props.)
10138
+ const skip = {
10139
+ length: true,
10140
+ name: true,
10141
+ arguments: true,
10142
+ caller: true,
10143
+ prototype: true,
10125
10144
  };
10145
+
10146
+ const descriptors = Object.getOwnPropertyDescriptors(fn);
10147
+ for (const key of Object.keys(descriptors)) {
10148
+ if (skip[key]) continue;
10149
+ Object.defineProperty(wrapped, key, descriptors[key]);
10150
+ }
10151
+
10152
+ for (const sym of Object.getOwnPropertySymbols(fn)) {
10153
+ const desc = Object.getOwnPropertyDescriptor(fn, sym);
10154
+ if (desc) Object.defineProperty(wrapped, sym, desc);
10155
+ }
10156
+
10157
+ return wrapped;
10126
10158
  };
10127
10159
  `;
10128
10160
  var perfLazyWrapperPreamble_default = perfLazyWrapperPreamble;
@@ -32,6 +32,21 @@ function getClientRpcFunctions() {
32
32
  healthCheck: () => true
33
33
  };
34
34
  }
35
+ function toDevtoolsRoutes(routes) {
36
+ const children = routes?.children || [];
37
+ const directories = children.filter((child) => child.type === re.DIRECTORY);
38
+ return [
39
+ {
40
+ relativePath: "",
41
+ name: "index",
42
+ type: re.DIRECTORY,
43
+ path: "",
44
+ isSymbolicLink: false,
45
+ children: void 0
46
+ },
47
+ ...directories
48
+ ];
49
+ }
35
50
  const QwikDevtools = component$(() => {
36
51
  useStyles$(globalCss);
37
52
  const state = useStore({
@@ -44,7 +59,6 @@ const QwikDevtools = component$(() => {
44
59
  allDependencies: [],
45
60
  isLoadingDependencies: false
46
61
  });
47
- const clientReady = useSignal(false);
48
62
  useVisibleTask$(async () => {
49
63
  const hot = await tryCreateHotContext(void 0, [
50
64
  "/"
@@ -54,78 +68,43 @@ const QwikDevtools = component$(() => {
54
68
  }
55
69
  setViteClientContext(hot);
56
70
  createClientRpc(getClientRpcFunctions());
57
- clientReady.value = true;
58
- });
59
- useVisibleTask$(async ({ track }) => {
60
- track(() => clientReady.value);
61
- if (!clientReady.value) return;
62
- const rpc = getViteClientRpc();
63
- try {
64
- const assets = await rpc.getAssetsFromPublicDir();
65
- state.assets = assets;
66
- } catch (error) {
67
- log("Failed to load assets:", error);
68
- }
69
- });
70
- useVisibleTask$(async ({ track }) => {
71
- track(() => clientReady.value);
72
- if (!clientReady.value) return;
73
- const rpc = getViteClientRpc();
74
- try {
75
- const components = await rpc.getComponents();
76
- state.components = components;
77
- } catch (error) {
78
- log("Failed to load components:", error);
79
- }
80
- });
81
- useVisibleTask$(async ({ track }) => {
82
- track(() => clientReady.value);
83
- if (!clientReady.value) return;
84
- const rpc = getViteClientRpc();
85
- try {
86
- const routes = await rpc.getRoutes();
87
- const children = routes?.children || [];
88
- const directories = children.filter((child) => child.type === "directory");
89
- const values = [
90
- {
91
- relativePath: "",
92
- name: "index",
93
- type: re.DIRECTORY,
94
- path: "",
95
- isSymbolicLink: false,
96
- children: void 0
97
- },
98
- ...directories
99
- ];
100
- state.routes = noSerialize(values);
101
- } catch (error) {
102
- log("Failed to load routes:", error);
103
- }
104
- });
105
- useVisibleTask$(async ({ track }) => {
106
- track(() => clientReady.value);
107
- if (!clientReady.value) return;
108
- const rpc = getViteClientRpc();
109
- try {
110
- const qwikPackages = await rpc.getQwikPackages();
111
- state.npmPackages = qwikPackages;
112
- } catch (error) {
113
- log("Failed to load Qwik packages:", error);
114
- }
115
- });
116
- useVisibleTask$(async ({ track }) => {
117
- track(() => clientReady.value);
118
- if (!clientReady.value) return;
119
71
  const rpc = getViteClientRpc();
72
+ const group1 = Promise.allSettled([
73
+ rpc.getAssetsFromPublicDir(),
74
+ rpc.getComponents(),
75
+ rpc.getRoutes(),
76
+ rpc.getQwikPackages()
77
+ ]);
120
78
  state.isLoadingDependencies = true;
121
- try {
122
- const allDeps = await rpc.getAllDependencies();
79
+ const depsPromise = rpc.getAllDependencies().then((allDeps) => {
123
80
  state.allDependencies = allDeps;
124
- } catch (error) {
81
+ }).catch((error) => {
125
82
  log("Failed to load all dependencies:", error);
126
- } finally {
83
+ }).finally(() => {
127
84
  state.isLoadingDependencies = false;
85
+ });
86
+ const [assetsRes, componentsRes, routesRes, packagesRes] = await group1;
87
+ if (assetsRes.status === "fulfilled") {
88
+ state.assets = assetsRes.value;
89
+ } else {
90
+ log("Failed to load assets:", assetsRes.reason);
91
+ }
92
+ if (componentsRes.status === "fulfilled") {
93
+ state.components = componentsRes.value;
94
+ } else {
95
+ log("Failed to load components:", componentsRes.reason);
96
+ }
97
+ if (routesRes.status === "fulfilled") {
98
+ state.routes = noSerialize(toDevtoolsRoutes(routesRes.value));
99
+ } else {
100
+ log("Failed to load routes:", routesRes.reason);
101
+ }
102
+ if (packagesRes.status === "fulfilled") {
103
+ state.npmPackages = packagesRes.value;
104
+ } else {
105
+ log("Failed to load Qwik packages:", packagesRes.reason);
128
106
  }
107
+ await depsPromise;
129
108
  });
130
109
  return /* @__PURE__ */ jsxs(Fragment, {
131
110
  children: [
@@ -2,11 +2,17 @@ import { jsxs, jsx } from "@qwik.dev/core/jsx-runtime";
2
2
  import { component$, $ } from "@qwik.dev/core";
3
3
  import { PackageIcon } from "../PackageIcon/PackageIcon.qwik.mjs";
4
4
  const DependencyCard = component$(({ pkg }) => {
5
+ const author = pkg.author;
6
+ const authorName = typeof author === "string" ? author.trim() : (author?.name || "").trim();
7
+ const authorDisplayName = authorName || "Unknown";
8
+ const authorInitials = authorDisplayName.split(/\s+/).filter(Boolean).map((n) => n.charAt(0)).join("").substring(0, 2).toUpperCase() || "??";
5
9
  const handleAuthorClick = $(() => {
6
- if (pkg.author?.url) {
7
- window.open(pkg.author.url, "_blank");
8
- } else if (pkg.author?.email) {
9
- window.open(`mailto:${pkg.author.email}`, "_blank");
10
+ if (typeof author !== "string") {
11
+ if (author?.url) {
12
+ window.open(author.url, "_blank");
13
+ } else if (author?.email) {
14
+ window.open(`mailto:${author.email}`, "_blank");
15
+ }
10
16
  }
11
17
  });
12
18
  const handlePackageClick = $(() => {
@@ -87,23 +93,23 @@ const DependencyCard = component$(({ pkg }) => {
87
93
  /* @__PURE__ */ jsxs("div", {
88
94
  class: "flex items-center justify-between gap-3",
89
95
  children: [
90
- pkg.author ? /* @__PURE__ */ jsxs("div", {
96
+ author ? /* @__PURE__ */ jsxs("div", {
91
97
  class: "flex min-w-0 flex-1 items-center gap-2",
92
98
  children: [
93
99
  /* @__PURE__ */ jsx("div", {
94
100
  class: "from-accent/20 to-accent/40 border-accent/30 flex h-7 w-7 flex-shrink-0 cursor-pointer items-center justify-center rounded-full border bg-gradient-to-br transition-transform hover:scale-110",
95
101
  onClick$: handleAuthorClick,
96
- title: `Contact ${pkg.author.name}`,
102
+ title: `Contact ${authorDisplayName}`,
97
103
  children: /* @__PURE__ */ jsx("span", {
98
104
  class: "text-accent text-[10px] font-semibold",
99
- children: pkg.author.name.split(" ").map((n) => n.charAt(0)).join("").substring(0, 2).toUpperCase()
105
+ children: authorInitials
100
106
  })
101
107
  }),
102
108
  /* @__PURE__ */ jsx("span", {
103
109
  class: "text-muted-foreground truncate text-xs",
104
110
  children: /* @__PURE__ */ jsx("span", {
105
111
  class: "text-foreground font-medium",
106
- children: pkg.author.name
112
+ children: authorDisplayName
107
113
  })
108
114
  })
109
115
  ]
@@ -1,4 +1,4 @@
1
- const globalCss = '/*! tailwindcss v4.1.14 | MIT License | https://tailwindcss.com */\n@layer properties {\n @supports (((-webkit-hyphens: none)) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color: rgb(from red r g b)))) {\n *, :before, :after, ::backdrop {\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-translate-z: 0;\n --tw-rotate-x: initial;\n --tw-rotate-y: initial;\n --tw-rotate-z: initial;\n --tw-skew-x: initial;\n --tw-skew-y: initial;\n --tw-space-y-reverse: 0;\n --tw-space-x-reverse: 0;\n --tw-divide-y-reverse: 0;\n --tw-border-style: solid;\n --tw-gradient-position: initial;\n --tw-gradient-from: #0000;\n --tw-gradient-via: #0000;\n --tw-gradient-to: #0000;\n --tw-gradient-stops: initial;\n --tw-gradient-via-stops: initial;\n --tw-gradient-from-position: 0%;\n --tw-gradient-via-position: 50%;\n --tw-gradient-to-position: 100%;\n --tw-leading: initial;\n --tw-font-weight: initial;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-color: initial;\n --tw-shadow-alpha: 100%;\n --tw-inset-shadow: 0 0 #0000;\n --tw-inset-shadow-color: initial;\n --tw-inset-shadow-alpha: 100%;\n --tw-ring-color: initial;\n --tw-ring-shadow: 0 0 #0000;\n --tw-inset-ring-color: initial;\n --tw-inset-ring-shadow: 0 0 #0000;\n --tw-ring-inset: initial;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-blur: initial;\n --tw-brightness: initial;\n --tw-contrast: initial;\n --tw-grayscale: initial;\n --tw-hue-rotate: initial;\n --tw-invert: initial;\n --tw-opacity: initial;\n --tw-saturate: initial;\n --tw-sepia: initial;\n --tw-drop-shadow: initial;\n --tw-drop-shadow-color: initial;\n --tw-drop-shadow-alpha: 100%;\n --tw-drop-shadow-size: initial;\n --tw-backdrop-blur: initial;\n --tw-backdrop-brightness: initial;\n --tw-backdrop-contrast: initial;\n --tw-backdrop-grayscale: initial;\n --tw-backdrop-hue-rotate: initial;\n --tw-backdrop-invert: initial;\n --tw-backdrop-opacity: initial;\n --tw-backdrop-saturate: initial;\n --tw-backdrop-sepia: initial;\n --tw-duration: initial;\n --tw-ease: initial;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-scale-z: 1;\n }\n }\n}\n\n@layer theme {\n :root, :host {\n --font-sans: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";\n --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;\n --color-red-400: oklch(70.4% .191 22.216);\n --color-amber-400: oklch(82.8% .189 84.429);\n --color-green-400: oklch(79.2% .209 151.711);\n --color-emerald-100: oklch(95% .052 163.051);\n --color-emerald-300: oklch(84.5% .143 164.978);\n --color-emerald-700: oklch(50.8% .118 165.612);\n --color-emerald-900: oklch(37.8% .077 168.94);\n --color-blue-400: oklch(70.7% .165 254.624);\n --color-violet-300: oklch(81.1% .111 293.571);\n --color-violet-400: oklch(70.2% .183 293.541);\n --color-purple-400: oklch(71.4% .203 305.504);\n --color-pink-400: oklch(71.8% .202 349.761);\n --color-black: #000;\n --color-white: #fff;\n --spacing: .25rem;\n --text-xs: .75rem;\n --text-xs--line-height: calc(1 / .75);\n --text-sm: .875rem;\n --text-sm--line-height: calc(1.25 / .875);\n --text-base: 1rem;\n --text-base--line-height: calc(1.5 / 1);\n --text-lg: 1.125rem;\n --text-lg--line-height: calc(1.75 / 1.125);\n --text-xl: 1.25rem;\n --text-xl--line-height: calc(1.75 / 1.25);\n --text-2xl: 1.5rem;\n --text-2xl--line-height: calc(2 / 1.5);\n --text-3xl: 1.875rem;\n --text-3xl--line-height: calc(2.25 / 1.875);\n --font-weight-medium: 500;\n --font-weight-semibold: 600;\n --font-weight-bold: 700;\n --leading-relaxed: 1.625;\n --radius-md: .375rem;\n --radius-lg: .5rem;\n --radius-xl: .75rem;\n --drop-shadow-md: 0 3px 3px #0000001f;\n --ease-out: cubic-bezier(0, 0, .2, 1);\n --ease-in-out: cubic-bezier(.4, 0, .2, 1);\n --animate-spin: spin 1s linear infinite;\n --blur-md: 12px;\n --blur-lg: 16px;\n --default-transition-duration: .15s;\n --default-transition-timing-function: cubic-bezier(.4, 0, .2, 1);\n --default-font-family: var(--font-sans);\n --default-mono-font-family: var(--font-mono);\n --color-background: #fff;\n --color-foreground: #000;\n --color-primary: #10b981;\n --color-primary-active: #047857;\n --color-muted-foreground: #6b7280;\n --color-accent: #10b981;\n --color-border: #e5e7eb;\n --color-card: #f2f2f2;\n --color-card-item-bg: #00000005;\n --color-card-item-hover-bg: #00000008;\n }\n}\n\n@layer base {\n *, :after, :before, ::backdrop {\n box-sizing: border-box;\n border: 0 solid;\n margin: 0;\n padding: 0;\n }\n\n ::file-selector-button {\n box-sizing: border-box;\n border: 0 solid;\n margin: 0;\n padding: 0;\n }\n\n html, :host {\n -webkit-text-size-adjust: 100%;\n tab-size: 4;\n line-height: 1.5;\n font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");\n font-feature-settings: var(--default-font-feature-settings, normal);\n font-variation-settings: var(--default-font-variation-settings, normal);\n -webkit-tap-highlight-color: transparent;\n }\n\n hr {\n height: 0;\n color: inherit;\n border-top-width: 1px;\n }\n\n abbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n }\n\n h1, h2, h3, h4, h5, h6 {\n font-size: inherit;\n font-weight: inherit;\n }\n\n a {\n color: inherit;\n -webkit-text-decoration: inherit;\n -webkit-text-decoration: inherit;\n -webkit-text-decoration: inherit;\n text-decoration: inherit;\n }\n\n b, strong {\n font-weight: bolder;\n }\n\n code, kbd, samp, pre {\n font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);\n font-feature-settings: var(--default-mono-font-feature-settings, normal);\n font-variation-settings: var(--default-mono-font-variation-settings, normal);\n font-size: 1em;\n }\n\n small {\n font-size: 80%;\n }\n\n sub, sup {\n vertical-align: baseline;\n font-size: 75%;\n line-height: 0;\n position: relative;\n }\n\n sub {\n bottom: -.25em;\n }\n\n sup {\n top: -.5em;\n }\n\n table {\n text-indent: 0;\n border-color: inherit;\n border-collapse: collapse;\n }\n\n :-moz-focusring {\n outline: auto;\n }\n\n progress {\n vertical-align: baseline;\n }\n\n summary {\n display: list-item;\n }\n\n ol, ul, menu {\n list-style: none;\n }\n\n img, svg, video, canvas, audio, iframe, embed, object {\n vertical-align: middle;\n display: block;\n }\n\n img, video {\n max-width: 100%;\n height: auto;\n }\n\n button, input, select, optgroup, textarea {\n font: inherit;\n font-feature-settings: inherit;\n font-variation-settings: inherit;\n letter-spacing: inherit;\n color: inherit;\n opacity: 1;\n background-color: #0000;\n border-radius: 0;\n }\n\n ::file-selector-button {\n font: inherit;\n font-feature-settings: inherit;\n font-variation-settings: inherit;\n letter-spacing: inherit;\n color: inherit;\n opacity: 1;\n background-color: #0000;\n border-radius: 0;\n }\n\n :where(select:is([multiple], [size])) optgroup {\n font-weight: bolder;\n }\n\n :where(select:is([multiple], [size])) optgroup option {\n padding-inline-start: 20px;\n }\n\n ::file-selector-button {\n margin-inline-end: 4px;\n }\n\n ::placeholder {\n opacity: 1;\n }\n\n @supports (not ((-webkit-appearance: -apple-pay-button))) or (contain-intrinsic-size: 1px) {\n ::placeholder {\n color: currentColor;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n ::placeholder {\n color: color-mix(in oklab, currentcolor 50%, transparent);\n }\n }\n }\n\n textarea {\n resize: vertical;\n }\n\n ::-webkit-search-decoration {\n -webkit-appearance: none;\n }\n\n ::-webkit-date-and-time-value {\n min-height: 1lh;\n text-align: inherit;\n }\n\n ::-webkit-datetime-edit {\n display: inline-flex;\n }\n\n ::-webkit-datetime-edit-fields-wrapper {\n padding: 0;\n }\n\n ::-webkit-datetime-edit {\n padding-block: 0;\n }\n\n ::-webkit-datetime-edit-year-field {\n padding-block: 0;\n }\n\n ::-webkit-datetime-edit-month-field {\n padding-block: 0;\n }\n\n ::-webkit-datetime-edit-day-field {\n padding-block: 0;\n }\n\n ::-webkit-datetime-edit-hour-field {\n padding-block: 0;\n }\n\n ::-webkit-datetime-edit-minute-field {\n padding-block: 0;\n }\n\n ::-webkit-datetime-edit-second-field {\n padding-block: 0;\n }\n\n ::-webkit-datetime-edit-millisecond-field {\n padding-block: 0;\n }\n\n ::-webkit-datetime-edit-meridiem-field {\n padding-block: 0;\n }\n\n ::-webkit-calendar-picker-indicator {\n line-height: 1;\n }\n\n :-moz-ui-invalid {\n box-shadow: none;\n }\n\n button, input:where([type="button"], [type="reset"], [type="submit"]) {\n appearance: button;\n }\n\n ::file-selector-button {\n appearance: button;\n }\n\n ::-webkit-inner-spin-button {\n height: auto;\n }\n\n ::-webkit-outer-spin-button {\n height: auto;\n }\n\n [hidden]:where(:not([hidden="until-found"])) {\n display: none !important;\n }\n}\n\n@layer components;\n\n@layer utilities {\n .qwik-devtools .pointer-events-none {\n pointer-events: none;\n }\n\n .qwik-devtools .visible {\n visibility: visible;\n }\n\n .qwik-devtools .absolute {\n position: absolute;\n }\n\n .qwik-devtools .fixed {\n position: fixed;\n }\n\n .qwik-devtools .relative {\n position: relative;\n }\n\n .qwik-devtools .static {\n position: static;\n }\n\n .qwik-devtools .inset-0 {\n inset: calc(var(--spacing) * 0);\n }\n\n .qwik-devtools .right-0 {\n right: calc(var(--spacing) * 0);\n }\n\n .qwik-devtools .right-6 {\n right: calc(var(--spacing) * 6);\n }\n\n .qwik-devtools .bottom-0 {\n bottom: calc(var(--spacing) * 0);\n }\n\n .qwik-devtools .bottom-6 {\n bottom: calc(var(--spacing) * 6);\n }\n\n .qwik-devtools .z-\\[9999\\] {\n z-index: 9999;\n }\n\n .qwik-devtools .col-start-1 {\n grid-column-start: 1;\n }\n\n .qwik-devtools .row-start-1 {\n grid-row-start: 1;\n }\n\n .qwik-devtools .container {\n width: 100%;\n }\n\n @media (min-width: 40rem) {\n .qwik-devtools .container {\n max-width: 40rem;\n }\n }\n\n @media (min-width: 48rem) {\n .qwik-devtools .container {\n max-width: 48rem;\n }\n }\n\n @media (min-width: 64rem) {\n .qwik-devtools .container {\n max-width: 64rem;\n }\n }\n\n @media (min-width: 80rem) {\n .qwik-devtools .container {\n max-width: 80rem;\n }\n }\n\n @media (min-width: 96rem) {\n .qwik-devtools .container {\n max-width: 96rem;\n }\n }\n\n .qwik-devtools .mt-1 {\n margin-top: calc(var(--spacing) * 1);\n }\n\n .qwik-devtools .mt-4 {\n margin-top: calc(var(--spacing) * 4);\n }\n\n .qwik-devtools .mt-5 {\n margin-top: calc(var(--spacing) * 5);\n }\n\n .qwik-devtools .mt-6 {\n margin-top: calc(var(--spacing) * 6);\n }\n\n .qwik-devtools .mt-auto {\n margin-top: auto;\n }\n\n .qwik-devtools .mr-2 {\n margin-right: calc(var(--spacing) * 2);\n }\n\n .qwik-devtools .mb-1\\.5 {\n margin-bottom: calc(var(--spacing) * 1.5);\n }\n\n .qwik-devtools .mb-2 {\n margin-bottom: calc(var(--spacing) * 2);\n }\n\n .qwik-devtools .mb-3 {\n margin-bottom: calc(var(--spacing) * 3);\n }\n\n .qwik-devtools .mb-4 {\n margin-bottom: calc(var(--spacing) * 4);\n }\n\n .qwik-devtools .ml-2 {\n margin-left: calc(var(--spacing) * 2);\n }\n\n .qwik-devtools .line-clamp-2 {\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n display: -webkit-box;\n overflow: hidden;\n }\n\n .qwik-devtools .flex {\n display: flex;\n }\n\n .qwik-devtools .grid {\n display: grid;\n }\n\n .qwik-devtools .hidden {\n display: none;\n }\n\n .qwik-devtools .inline-flex {\n display: inline-flex;\n }\n\n .qwik-devtools .aspect-square {\n aspect-ratio: 1;\n }\n\n .qwik-devtools .h-3 {\n height: calc(var(--spacing) * 3);\n }\n\n .qwik-devtools .h-4 {\n height: calc(var(--spacing) * 4);\n }\n\n .qwik-devtools .h-5 {\n height: calc(var(--spacing) * 5);\n }\n\n .qwik-devtools .h-6 {\n height: calc(var(--spacing) * 6);\n }\n\n .qwik-devtools .h-7 {\n height: calc(var(--spacing) * 7);\n }\n\n .qwik-devtools .h-8 {\n height: calc(var(--spacing) * 8);\n }\n\n .qwik-devtools .h-9 {\n height: calc(var(--spacing) * 9);\n }\n\n .qwik-devtools .h-10 {\n height: calc(var(--spacing) * 10);\n }\n\n .qwik-devtools .h-12 {\n height: calc(var(--spacing) * 12);\n }\n\n .qwik-devtools .h-\\[60vh\\] {\n height: 60vh;\n }\n\n .qwik-devtools .h-\\[calc\\(100vh-3rem\\)\\] {\n height: calc(100vh - 3rem);\n }\n\n .qwik-devtools .h-full {\n height: 100%;\n }\n\n .qwik-devtools .min-h-0 {\n min-height: calc(var(--spacing) * 0);\n }\n\n .qwik-devtools .min-h-\\[2\\.5rem\\] {\n min-height: 2.5rem;\n }\n\n .qwik-devtools .w-1\\/2 {\n width: 50%;\n }\n\n .qwik-devtools .w-3 {\n width: calc(var(--spacing) * 3);\n }\n\n .qwik-devtools .w-4 {\n width: calc(var(--spacing) * 4);\n }\n\n .qwik-devtools .w-5 {\n width: calc(var(--spacing) * 5);\n }\n\n .qwik-devtools .w-6 {\n width: calc(var(--spacing) * 6);\n }\n\n .qwik-devtools .w-7 {\n width: calc(var(--spacing) * 7);\n }\n\n .qwik-devtools .w-8 {\n width: calc(var(--spacing) * 8);\n }\n\n .qwik-devtools .w-9 {\n width: calc(var(--spacing) * 9);\n }\n\n .qwik-devtools .w-10 {\n width: calc(var(--spacing) * 10);\n }\n\n .qwik-devtools .w-12 {\n width: calc(var(--spacing) * 12);\n }\n\n .qwik-devtools .w-\\[420px\\] {\n width: 420px;\n }\n\n .qwik-devtools .w-\\[calc\\(100vw-3rem\\)\\] {\n width: calc(100vw - 3rem);\n }\n\n .qwik-devtools .w-full {\n width: 100%;\n }\n\n .qwik-devtools .min-w-0 {\n min-width: calc(var(--spacing) * 0);\n }\n\n .qwik-devtools .min-w-\\[320px\\] {\n min-width: 320px;\n }\n\n .qwik-devtools .flex-1 {\n flex: 1;\n }\n\n .qwik-devtools .flex-shrink-0, .qwik-devtools .shrink-0 {\n flex-shrink: 0;\n }\n\n .qwik-devtools .origin-center {\n transform-origin: center;\n }\n\n .qwik-devtools .translate-y-0 {\n --tw-translate-y: calc(var(--spacing) * 0);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n\n .qwik-devtools .-rotate-90 {\n rotate: -90deg;\n }\n\n .qwik-devtools .rotate-90 {\n rotate: 90deg;\n }\n\n .qwik-devtools .rotate-180 {\n rotate: 180deg;\n }\n\n .qwik-devtools .transform {\n transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, );\n }\n\n .qwik-devtools .animate-spin {\n animation: var(--animate-spin);\n }\n\n .qwik-devtools .cursor-grab {\n cursor: grab;\n }\n\n .qwik-devtools .cursor-grabbing {\n cursor: grabbing;\n }\n\n .qwik-devtools .cursor-not-allowed {\n cursor: not-allowed;\n }\n\n .qwik-devtools .cursor-pointer {\n cursor: pointer;\n }\n\n .qwik-devtools .resize-none {\n resize: none;\n }\n\n .qwik-devtools .grid-cols-1 {\n grid-template-columns: repeat(1, minmax(0, 1fr));\n }\n\n .qwik-devtools .grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n\n .qwik-devtools .grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n\n .qwik-devtools .grid-cols-4 {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n }\n\n .qwik-devtools .flex-col {\n flex-direction: column;\n }\n\n .qwik-devtools .place-items-center {\n place-items: center;\n }\n\n .qwik-devtools .items-center {\n align-items: center;\n }\n\n .qwik-devtools .items-start {\n align-items: flex-start;\n }\n\n .qwik-devtools .justify-between {\n justify-content: space-between;\n }\n\n .qwik-devtools .justify-center {\n justify-content: center;\n }\n\n .qwik-devtools .gap-1 {\n gap: calc(var(--spacing) * 1);\n }\n\n .qwik-devtools .gap-1\\.5 {\n gap: calc(var(--spacing) * 1.5);\n }\n\n .qwik-devtools .gap-2 {\n gap: calc(var(--spacing) * 2);\n }\n\n .qwik-devtools .gap-3 {\n gap: calc(var(--spacing) * 3);\n }\n\n .qwik-devtools .gap-4 {\n gap: calc(var(--spacing) * 4);\n }\n\n .qwik-devtools .gap-5 {\n gap: calc(var(--spacing) * 5);\n }\n\n :where(.qwik-devtools .space-y-2 > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)));\n }\n\n :where(.qwik-devtools .space-y-3 > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)));\n }\n\n :where(.qwik-devtools .space-y-4 > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)));\n }\n\n :where(.qwik-devtools .space-y-6 > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)));\n }\n\n .qwik-devtools .gap-x-6 {\n column-gap: calc(var(--spacing) * 6);\n }\n\n :where(.qwik-devtools .space-x-2 > :not(:last-child)) {\n --tw-space-x-reverse: 0;\n margin-inline-start: calc(calc(var(--spacing) * 2) * var(--tw-space-x-reverse));\n margin-inline-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-x-reverse)));\n }\n\n :where(.qwik-devtools .space-x-4 > :not(:last-child)) {\n --tw-space-x-reverse: 0;\n margin-inline-start: calc(calc(var(--spacing) * 4) * var(--tw-space-x-reverse));\n margin-inline-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-x-reverse)));\n }\n\n .qwik-devtools .gap-y-3 {\n row-gap: calc(var(--spacing) * 3);\n }\n\n :where(.qwik-devtools .divide-y > :not(:last-child)) {\n --tw-divide-y-reverse: 0;\n border-bottom-style: var(--tw-border-style);\n border-top-style: var(--tw-border-style);\n border-top-width: calc(1px * var(--tw-divide-y-reverse));\n border-bottom-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));\n }\n\n :where(.qwik-devtools .divide-border > :not(:last-child)) {\n border-color: var(--color-border);\n }\n\n .qwik-devtools .truncate {\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n }\n\n .qwik-devtools .overflow-auto {\n overflow: auto;\n }\n\n .qwik-devtools .overflow-hidden {\n overflow: hidden;\n }\n\n .qwik-devtools .overflow-x-auto {\n overflow-x: auto;\n }\n\n .qwik-devtools .overflow-y-auto {\n overflow-y: auto;\n }\n\n .qwik-devtools .rounded {\n border-radius: .25rem;\n }\n\n .qwik-devtools .rounded-full {\n border-radius: 3.40282e38px;\n }\n\n .qwik-devtools .rounded-lg {\n border-radius: var(--radius-lg);\n }\n\n .qwik-devtools .rounded-md {\n border-radius: var(--radius-md);\n }\n\n .qwik-devtools .rounded-xl {\n border-radius: var(--radius-xl);\n }\n\n .qwik-devtools .border {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n\n .qwik-devtools .border-2 {\n border-style: var(--tw-border-style);\n border-width: 2px;\n }\n\n .qwik-devtools .border-t {\n border-top-style: var(--tw-border-style);\n border-top-width: 1px;\n }\n\n .qwik-devtools .border-r {\n border-right-style: var(--tw-border-style);\n border-right-width: 1px;\n }\n\n .qwik-devtools .border-b {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 1px;\n }\n\n .qwik-devtools .border-b-2 {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 2px;\n }\n\n .qwik-devtools .border-l {\n border-left-style: var(--tw-border-style);\n border-left-width: 1px;\n }\n\n .qwik-devtools .border-accent\\/30 {\n border-color: #10b9814d;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .border-accent\\/30 {\n border-color: color-mix(in oklab, var(--color-accent) 30%, transparent);\n }\n }\n\n .qwik-devtools .border-accent\\/50 {\n border-color: #10b98180;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .border-accent\\/50 {\n border-color: color-mix(in oklab, var(--color-accent) 50%, transparent);\n }\n }\n\n .qwik-devtools .border-border {\n border-color: var(--color-border);\n }\n\n .qwik-devtools .border-border\\/50 {\n border-color: #e5e7eb80;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .border-border\\/50 {\n border-color: color-mix(in oklab, var(--color-border) 50%, transparent);\n }\n }\n\n .qwik-devtools .border-current {\n border-color: currentColor;\n }\n\n .qwik-devtools .border-emerald-300 {\n border-color: var(--color-emerald-300);\n }\n\n .qwik-devtools .border-primary\\/20 {\n border-color: #10b98133;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .border-primary\\/20 {\n border-color: color-mix(in oklab, var(--color-primary) 20%, transparent);\n }\n }\n\n .qwik-devtools .border-t-foreground\\/40 {\n border-top-color: #0006;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .border-t-foreground\\/40 {\n border-top-color: color-mix(in oklab, var(--color-foreground) 40%, transparent);\n }\n }\n\n .qwik-devtools .border-t-transparent {\n border-top-color: #0000;\n }\n\n .qwik-devtools .border-b-transparent {\n border-bottom-color: #0000;\n }\n\n .qwik-devtools .bg-accent {\n background-color: var(--color-accent);\n }\n\n .qwik-devtools .bg-background {\n background-color: var(--color-background);\n }\n\n .qwik-devtools .bg-background\\/95 {\n background-color: #fffffff2;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .bg-background\\/95 {\n background-color: color-mix(in oklab, var(--color-background) 95%, transparent);\n }\n }\n\n .qwik-devtools .bg-black\\/20 {\n background-color: #0003;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .bg-black\\/20 {\n background-color: color-mix(in oklab, var(--color-black) 20%, transparent);\n }\n }\n\n .qwik-devtools .bg-card {\n background-color: var(--color-card);\n }\n\n .qwik-devtools .bg-card-item-bg {\n background-color: var(--color-card-item-bg);\n }\n\n .qwik-devtools .bg-emerald-100 {\n background-color: var(--color-emerald-100);\n }\n\n .qwik-devtools .bg-foreground\\/5 {\n background-color: #0000000d;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .bg-foreground\\/5 {\n background-color: color-mix(in oklab, var(--color-foreground) 5%, transparent);\n }\n }\n\n .qwik-devtools .bg-primary\\/5 {\n background-color: #10b9810d;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .bg-primary\\/5 {\n background-color: color-mix(in oklab, var(--color-primary) 5%, transparent);\n }\n }\n\n .qwik-devtools .bg-primary\\/10 {\n background-color: #10b9811a;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .bg-primary\\/10 {\n background-color: color-mix(in oklab, var(--color-primary) 10%, transparent);\n }\n }\n\n .qwik-devtools .bg-transparent {\n background-color: #0000;\n }\n\n .qwik-devtools .bg-gradient-to-br {\n --tw-gradient-position: to bottom right in oklab;\n background-image: linear-gradient(var(--tw-gradient-stops));\n }\n\n .qwik-devtools .from-accent\\/20 {\n --tw-gradient-from: #10b98133;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .from-accent\\/20 {\n --tw-gradient-from: color-mix(in oklab, var(--color-accent) 20%, transparent);\n }\n }\n\n .qwik-devtools .from-accent\\/20 {\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n\n .qwik-devtools .from-primary\\/0 {\n --tw-gradient-from: #0000;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .from-primary\\/0 {\n --tw-gradient-from: color-mix(in oklab, var(--color-primary) 0%, transparent);\n }\n }\n\n .qwik-devtools .from-primary\\/0 {\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n\n .qwik-devtools .from-primary\\/10 {\n --tw-gradient-from: #10b9811a;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .from-primary\\/10 {\n --tw-gradient-from: color-mix(in oklab, var(--color-primary) 10%, transparent);\n }\n }\n\n .qwik-devtools .from-primary\\/10 {\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n\n .qwik-devtools .via-primary\\/0 {\n --tw-gradient-via: #0000;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .via-primary\\/0 {\n --tw-gradient-via: color-mix(in oklab, var(--color-primary) 0%, transparent);\n }\n }\n\n .qwik-devtools .via-primary\\/0 {\n --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-via-stops);\n }\n\n .qwik-devtools .via-primary\\/20 {\n --tw-gradient-via: #10b98133;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .via-primary\\/20 {\n --tw-gradient-via: color-mix(in oklab, var(--color-primary) 20%, transparent);\n }\n }\n\n .qwik-devtools .via-primary\\/20 {\n --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-via-stops);\n }\n\n .qwik-devtools .to-accent\\/40 {\n --tw-gradient-to: #10b98166;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .to-accent\\/40 {\n --tw-gradient-to: color-mix(in oklab, var(--color-accent) 40%, transparent);\n }\n }\n\n .qwik-devtools .to-accent\\/40 {\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n\n .qwik-devtools .to-primary\\/5 {\n --tw-gradient-to: #10b9810d;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .to-primary\\/5 {\n --tw-gradient-to: color-mix(in oklab, var(--color-primary) 5%, transparent);\n }\n }\n\n .qwik-devtools .to-primary\\/5 {\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n\n .qwik-devtools .to-primary\\/30 {\n --tw-gradient-to: #10b9814d;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .to-primary\\/30 {\n --tw-gradient-to: color-mix(in oklab, var(--color-primary) 30%, transparent);\n }\n }\n\n .qwik-devtools .to-primary\\/30 {\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n\n .qwik-devtools .object-cover {\n object-fit: cover;\n }\n\n .qwik-devtools .p-0\\.5 {\n padding: calc(var(--spacing) * .5);\n }\n\n .qwik-devtools .p-1 {\n padding: calc(var(--spacing) * 1);\n }\n\n .qwik-devtools .p-1\\.5 {\n padding: calc(var(--spacing) * 1.5);\n }\n\n .qwik-devtools .p-2 {\n padding: calc(var(--spacing) * 2);\n }\n\n .qwik-devtools .p-2\\.5 {\n padding: calc(var(--spacing) * 2.5);\n }\n\n .qwik-devtools .p-3 {\n padding: calc(var(--spacing) * 3);\n }\n\n .qwik-devtools .p-3\\.5 {\n padding: calc(var(--spacing) * 3.5);\n }\n\n .qwik-devtools .p-4 {\n padding: calc(var(--spacing) * 4);\n }\n\n .qwik-devtools .p-5 {\n padding: calc(var(--spacing) * 5);\n }\n\n .qwik-devtools .p-8 {\n padding: calc(var(--spacing) * 8);\n }\n\n .qwik-devtools .px-2 {\n padding-inline: calc(var(--spacing) * 2);\n }\n\n .qwik-devtools .px-2\\.5 {\n padding-inline: calc(var(--spacing) * 2.5);\n }\n\n .qwik-devtools .px-3 {\n padding-inline: calc(var(--spacing) * 3);\n }\n\n .qwik-devtools .px-4 {\n padding-inline: calc(var(--spacing) * 4);\n }\n\n .qwik-devtools .py-0\\.5 {\n padding-block: calc(var(--spacing) * .5);\n }\n\n .qwik-devtools .py-1 {\n padding-block: calc(var(--spacing) * 1);\n }\n\n .qwik-devtools .py-1\\.5 {\n padding-block: calc(var(--spacing) * 1.5);\n }\n\n .qwik-devtools .py-2 {\n padding-block: calc(var(--spacing) * 2);\n }\n\n .qwik-devtools .py-3 {\n padding-block: calc(var(--spacing) * 3);\n }\n\n .qwik-devtools .py-4 {\n padding-block: calc(var(--spacing) * 4);\n }\n\n .qwik-devtools .py-8 {\n padding-block: calc(var(--spacing) * 8);\n }\n\n .qwik-devtools .pb-4 {\n padding-bottom: calc(var(--spacing) * 4);\n }\n\n .qwik-devtools .pb-6 {\n padding-bottom: calc(var(--spacing) * 6);\n }\n\n .qwik-devtools .text-center {\n text-align: center;\n }\n\n .qwik-devtools .text-left {\n text-align: left;\n }\n\n .qwik-devtools .text-right {\n text-align: right;\n }\n\n .qwik-devtools .font-mono {\n font-family: var(--font-mono);\n }\n\n .qwik-devtools .font-sans {\n font-family: var(--font-sans);\n }\n\n .qwik-devtools .text-2xl {\n font-size: var(--text-2xl);\n line-height: var(--tw-leading, var(--text-2xl--line-height));\n }\n\n .qwik-devtools .text-3xl {\n font-size: var(--text-3xl);\n line-height: var(--tw-leading, var(--text-3xl--line-height));\n }\n\n .qwik-devtools .text-base {\n font-size: var(--text-base);\n line-height: var(--tw-leading, var(--text-base--line-height));\n }\n\n .qwik-devtools .text-lg {\n font-size: var(--text-lg);\n line-height: var(--tw-leading, var(--text-lg--line-height));\n }\n\n .qwik-devtools .text-sm {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n\n .qwik-devtools .text-xl {\n font-size: var(--text-xl);\n line-height: var(--tw-leading, var(--text-xl--line-height));\n }\n\n .qwik-devtools .text-xs {\n font-size: var(--text-xs);\n line-height: var(--tw-leading, var(--text-xs--line-height));\n }\n\n .qwik-devtools .text-\\[10px\\] {\n font-size: 10px;\n }\n\n .qwik-devtools .leading-relaxed {\n --tw-leading: var(--leading-relaxed);\n line-height: var(--leading-relaxed);\n }\n\n .qwik-devtools .font-bold {\n --tw-font-weight: var(--font-weight-bold);\n font-weight: var(--font-weight-bold);\n }\n\n .qwik-devtools .font-medium {\n --tw-font-weight: var(--font-weight-medium);\n font-weight: var(--font-weight-medium);\n }\n\n .qwik-devtools .font-semibold {\n --tw-font-weight: var(--font-weight-semibold);\n font-weight: var(--font-weight-semibold);\n }\n\n .qwik-devtools .break-all {\n word-break: break-all;\n }\n\n .qwik-devtools .whitespace-nowrap {\n white-space: nowrap;\n }\n\n .qwik-devtools .text-accent {\n color: var(--color-accent);\n }\n\n .qwik-devtools .text-amber-400 {\n color: var(--color-amber-400);\n }\n\n .qwik-devtools .text-blue-400 {\n color: var(--color-blue-400);\n }\n\n .qwik-devtools .text-emerald-700 {\n color: var(--color-emerald-700);\n }\n\n .qwik-devtools .text-foreground {\n color: var(--color-foreground);\n }\n\n .qwik-devtools .text-foreground\\/70 {\n color: #000000b3;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .text-foreground\\/70 {\n color: color-mix(in oklab, var(--color-foreground) 70%, transparent);\n }\n }\n\n .qwik-devtools .text-green-400 {\n color: var(--color-green-400);\n }\n\n .qwik-devtools .text-muted-foreground {\n color: var(--color-muted-foreground);\n }\n\n .qwik-devtools .text-pink-400 {\n color: var(--color-pink-400);\n }\n\n .qwik-devtools .text-primary {\n color: var(--color-primary);\n }\n\n .qwik-devtools .text-primary\\/50 {\n color: #10b98180;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .text-primary\\/50 {\n color: color-mix(in oklab, var(--color-primary) 50%, transparent);\n }\n }\n\n .qwik-devtools .text-purple-400 {\n color: var(--color-purple-400);\n }\n\n .qwik-devtools .text-red-400 {\n color: var(--color-red-400);\n }\n\n .qwik-devtools .text-violet-400 {\n color: var(--color-violet-400);\n }\n\n .qwik-devtools .text-white {\n color: var(--color-white);\n }\n\n .qwik-devtools .opacity-0 {\n opacity: 0;\n }\n\n .qwik-devtools .opacity-90 {\n opacity: .9;\n }\n\n .qwik-devtools .shadow {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, #0000001a), 0 1px 2px -1px var(--tw-shadow-color, #0000001a);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n\n .qwik-devtools .shadow-lg {\n --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, #0000001a), 0 4px 6px -4px var(--tw-shadow-color, #0000001a);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n\n .qwik-devtools .shadow-md {\n --tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, #0000001a), 0 2px 4px -2px var(--tw-shadow-color, #0000001a);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n\n .qwik-devtools .shadow-sm {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, #0000001a), 0 1px 2px -1px var(--tw-shadow-color, #0000001a);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n\n .qwik-devtools .ring-2 {\n --tw-ring-shadow: var(--tw-ring-inset, ) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n\n .qwik-devtools .shadow-accent\\/35 {\n --tw-shadow-color: #10b98159;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .shadow-accent\\/35 {\n --tw-shadow-color: color-mix(in oklab, color-mix(in oklab, var(--color-accent) 35%, transparent) var(--tw-shadow-alpha), transparent);\n }\n }\n\n .qwik-devtools .ring-primary-active {\n --tw-ring-color: var(--color-primary-active);\n }\n\n .qwik-devtools .drop-shadow-md {\n --tw-drop-shadow-size: drop-shadow(0 3px 3px var(--tw-drop-shadow-color, #0000001f));\n --tw-drop-shadow: drop-shadow(var(--drop-shadow-md));\n 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, );\n }\n\n .qwik-devtools .filter {\n 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, );\n }\n\n .qwik-devtools .backdrop-blur-lg {\n --tw-backdrop-blur: blur(var(--blur-lg));\n -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, );\n backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, );\n }\n\n .qwik-devtools .backdrop-blur-md {\n --tw-backdrop-blur: blur(var(--blur-md));\n -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, );\n backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, );\n }\n\n .qwik-devtools .transition {\n 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;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n\n .qwik-devtools .transition-all {\n transition-property: all;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n\n .qwik-devtools .transition-colors {\n transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n\n .qwik-devtools .transition-opacity {\n transition-property: opacity;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n\n .qwik-devtools .transition-transform {\n transition-property: transform, translate, scale, rotate;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n\n .qwik-devtools .duration-200 {\n --tw-duration: .2s;\n transition-duration: .2s;\n }\n\n .qwik-devtools .duration-300 {\n --tw-duration: .3s;\n transition-duration: .3s;\n }\n\n .qwik-devtools .ease-in-out {\n --tw-ease: var(--ease-in-out);\n transition-timing-function: var(--ease-in-out);\n }\n\n .qwik-devtools .ease-out {\n --tw-ease: var(--ease-out);\n transition-timing-function: var(--ease-out);\n }\n\n .qwik-devtools .select-none {\n -webkit-user-select: none;\n user-select: none;\n }\n\n @media (hover: hover) {\n .qwik-devtools .group-hover\\:scale-110:is(:where(.group):hover *) {\n --tw-scale-x: 110%;\n --tw-scale-y: 110%;\n --tw-scale-z: 110%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n\n .qwik-devtools .group-hover\\:opacity-100:is(:where(.group):hover *) {\n opacity: 1;\n }\n\n .qwik-devtools .group-hover\\:shadow-primary\\/20:is(:where(.group):hover *) {\n --tw-shadow-color: #10b98133;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .group-hover\\:shadow-primary\\/20:is(:where(.group):hover *) {\n --tw-shadow-color: color-mix(in oklab, color-mix(in oklab, var(--color-primary) 20%, transparent) var(--tw-shadow-alpha), transparent);\n }\n }\n }\n\n .qwik-devtools .group-active\\:scale-75:is(:where(.group):active *) {\n --tw-scale-x: 75%;\n --tw-scale-y: 75%;\n --tw-scale-z: 75%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n\n @media (hover: hover) {\n .qwik-devtools .hover\\:-translate-y-0\\.5:hover {\n --tw-translate-y: calc(var(--spacing) * -.5);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n\n .qwik-devtools .hover\\:scale-110:hover {\n --tw-scale-x: 110%;\n --tw-scale-y: 110%;\n --tw-scale-z: 110%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n\n .qwik-devtools .hover\\:rotate-3:hover {\n rotate: 3deg;\n }\n\n .qwik-devtools .hover\\:border-primary\\/30:hover {\n border-color: #10b9814d;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .hover\\:border-primary\\/30:hover {\n border-color: color-mix(in oklab, var(--color-primary) 30%, transparent);\n }\n }\n\n .qwik-devtools .hover\\:bg-card-item-hover-bg:hover {\n background-color: var(--color-card-item-hover-bg);\n }\n\n .qwik-devtools .hover\\:bg-foreground\\/5:hover {\n background-color: #0000000d;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .hover\\:bg-foreground\\/5:hover {\n background-color: color-mix(in oklab, var(--color-foreground) 5%, transparent);\n }\n }\n\n .qwik-devtools .hover\\:bg-primary\\/10:hover {\n background-color: #10b9811a;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .hover\\:bg-primary\\/10:hover {\n background-color: color-mix(in oklab, var(--color-primary) 10%, transparent);\n }\n }\n\n .qwik-devtools .hover\\:bg-primary\\/20:hover {\n background-color: #10b98133;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .hover\\:bg-primary\\/20:hover {\n background-color: color-mix(in oklab, var(--color-primary) 20%, transparent);\n }\n }\n\n .qwik-devtools .hover\\:text-foreground:hover {\n color: var(--color-foreground);\n }\n\n .qwik-devtools .hover\\:text-primary:hover {\n color: var(--color-primary);\n }\n\n .qwik-devtools .hover\\:underline:hover {\n text-decoration-line: underline;\n }\n\n .qwik-devtools .hover\\:opacity-60:hover {\n opacity: .6;\n }\n\n .qwik-devtools .hover\\:opacity-90:hover {\n opacity: .9;\n }\n\n .qwik-devtools .hover\\:shadow-lg:hover {\n --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, #0000001a), 0 4px 6px -4px var(--tw-shadow-color, #0000001a);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n\n .qwik-devtools .hover\\:shadow-primary\\/5:hover {\n --tw-shadow-color: #10b9810d;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .hover\\:shadow-primary\\/5:hover {\n --tw-shadow-color: color-mix(in oklab, color-mix(in oklab, var(--color-primary) 5%, transparent) var(--tw-shadow-alpha), transparent);\n }\n }\n }\n\n .qwik-devtools .focus\\:ring-primary-active:focus {\n --tw-ring-color: var(--color-primary-active);\n }\n\n .qwik-devtools .focus\\:ring-offset-0:focus {\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-shadow: var(--tw-ring-inset, ) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n }\n\n @media (min-width: 40rem) {\n .qwik-devtools .sm\\:grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n\n .qwik-devtools .sm\\:grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n }\n\n @media (min-width: 48rem) {\n .qwik-devtools .md\\:mt-6 {\n margin-top: calc(var(--spacing) * 6);\n }\n\n .qwik-devtools .md\\:grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n\n .qwik-devtools .md\\:grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n\n .qwik-devtools .md\\:grid-cols-4 {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n }\n\n .qwik-devtools .md\\:px-4 {\n padding-inline: calc(var(--spacing) * 4);\n }\n }\n\n @media (min-width: 64rem) {\n .qwik-devtools .lg\\:grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n\n .qwik-devtools .lg\\:grid-cols-4 {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n }\n }\n\n @media (prefers-color-scheme: dark) {\n .qwik-devtools .dark\\:border-\\[\\#374151\\] {\n border-color: #374151;\n }\n\n .qwik-devtools .dark\\:border-emerald-700\\/40 {\n border-color: #00795666;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .dark\\:border-emerald-700\\/40 {\n border-color: color-mix(in oklab, var(--color-emerald-700) 40%, transparent);\n }\n }\n\n .qwik-devtools .dark\\:bg-\\[\\#1F2937\\] {\n background-color: #1f2937;\n }\n\n .qwik-devtools .dark\\:bg-emerald-900\\/30 {\n background-color: #004e3b4d;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .dark\\:bg-emerald-900\\/30 {\n background-color: color-mix(in oklab, var(--color-emerald-900) 30%, transparent);\n }\n }\n\n .qwik-devtools .dark\\:text-emerald-300 {\n color: var(--color-emerald-300);\n }\n\n .qwik-devtools .dark\\:text-violet-300 {\n color: var(--color-violet-300);\n }\n }\n\n .custom-scrollbar {\n scrollbar-width: thin;\n scrollbar-color: var(--color-scrollbar-thumb) transparent;\n }\n\n .custom-scrollbar::-webkit-scrollbar {\n width: 6px;\n }\n\n .custom-scrollbar::-webkit-scrollbar-track {\n background: none;\n }\n\n .custom-scrollbar::-webkit-scrollbar-thumb {\n background-color: var(--color-scrollbar-thumb);\n border-radius: 20px;\n }\n\n .custom-scrollbar::-webkit-scrollbar-thumb:hover {\n background-color: var(--color-scrollbar-thumb-hover);\n }\n}\n\n:root {\n --theme-name: "light";\n --color-background: #fff;\n --color-foreground: #000;\n --color-primary: #10b981;\n --color-primary-hover: #f2f2f2;\n --color-primary-active: #047857;\n --color-secondary: #6b7280;\n --color-border: #e5e7eb;\n --color-card: #f2f2f2;\n --color-card-item-bg: #00000005;\n --color-card-item-hover-bg: #00000008;\n --color-scrollbar-thumb: #d1d5db;\n --color-scrollbar-thumb-hover: #a1a1aa;\n --color-muted: #9ca3af;\n --color-muted-foreground: #6b7280;\n --color-accent: #10b981;\n --color-input: var(--color-border);\n --color-ring: var(--color-primary);\n}\n\n:root[data-theme="dark"] {\n --theme-name: "dark";\n --color-background: #18181b;\n --color-foreground: #fff;\n --color-primary: #34d399;\n --color-primary-hover: #10b981;\n --color-primary-active: #059669;\n --color-secondary: #9ca3af;\n --color-border: #374151;\n --color-card: #27272a;\n --color-card-item-bg: #ffffff08;\n --color-card-item-hover-bg: #ffffff0d;\n --color-scrollbar-thumb: #3f3f46;\n --color-scrollbar-thumb-hover: #52525b;\n --color-muted: #374151;\n --color-muted-foreground: #9ca3af;\n --color-accent: #10b981;\n --color-input: var(--color-border);\n --color-ring: var(--color-primary);\n}\n\n@media (prefers-color-scheme: dark) {\n :root:not([data-theme]) {\n --theme-name: "dark";\n --color-background: #18181b;\n --color-foreground: #fff;\n --color-primary: #10b981;\n --color-secondary: #9ca3af;\n --color-border: #374151;\n --color-card: #27272a;\n --color-card-item-bg: #ffffff08;\n --color-card-item-hover-bg: #ffffff0d;\n --color-scrollbar-thumb: #3f3f46;\n --color-scrollbar-thumb-hover: #52525b;\n --color-muted: #374151;\n --color-muted-foreground: #9ca3af;\n --color-accent: #10b981;\n --color-input: var(--color-border);\n --color-ring: var(--color-primary);\n }\n}\n\n@property --tw-translate-x {\n syntax: "*";\n inherits: false;\n initial-value: 0;\n}\n\n@property --tw-translate-y {\n syntax: "*";\n inherits: false;\n initial-value: 0;\n}\n\n@property --tw-translate-z {\n syntax: "*";\n inherits: false;\n initial-value: 0;\n}\n\n@property --tw-rotate-x {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-rotate-y {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-rotate-z {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-skew-x {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-skew-y {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-space-y-reverse {\n syntax: "*";\n inherits: false;\n initial-value: 0;\n}\n\n@property --tw-space-x-reverse {\n syntax: "*";\n inherits: false;\n initial-value: 0;\n}\n\n@property --tw-divide-y-reverse {\n syntax: "*";\n inherits: false;\n initial-value: 0;\n}\n\n@property --tw-border-style {\n syntax: "*";\n inherits: false;\n initial-value: solid;\n}\n\n@property --tw-gradient-position {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-gradient-from {\n syntax: "<color>";\n inherits: false;\n initial-value: #0000;\n}\n\n@property --tw-gradient-via {\n syntax: "<color>";\n inherits: false;\n initial-value: #0000;\n}\n\n@property --tw-gradient-to {\n syntax: "<color>";\n inherits: false;\n initial-value: #0000;\n}\n\n@property --tw-gradient-stops {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-gradient-via-stops {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-gradient-from-position {\n syntax: "<length-percentage>";\n inherits: false;\n initial-value: 0%;\n}\n\n@property --tw-gradient-via-position {\n syntax: "<length-percentage>";\n inherits: false;\n initial-value: 50%;\n}\n\n@property --tw-gradient-to-position {\n syntax: "<length-percentage>";\n inherits: false;\n initial-value: 100%;\n}\n\n@property --tw-leading {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-font-weight {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-shadow {\n syntax: "*";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n\n@property --tw-shadow-color {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-shadow-alpha {\n syntax: "<percentage>";\n inherits: false;\n initial-value: 100%;\n}\n\n@property --tw-inset-shadow {\n syntax: "*";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n\n@property --tw-inset-shadow-color {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-inset-shadow-alpha {\n syntax: "<percentage>";\n inherits: false;\n initial-value: 100%;\n}\n\n@property --tw-ring-color {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-ring-shadow {\n syntax: "*";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n\n@property --tw-inset-ring-color {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-inset-ring-shadow {\n syntax: "*";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n\n@property --tw-ring-inset {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-ring-offset-width {\n syntax: "<length>";\n inherits: false;\n initial-value: 0;\n}\n\n@property --tw-ring-offset-color {\n syntax: "*";\n inherits: false;\n initial-value: #fff;\n}\n\n@property --tw-ring-offset-shadow {\n syntax: "*";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n\n@property --tw-blur {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-brightness {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-contrast {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-grayscale {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-hue-rotate {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-invert {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-opacity {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-saturate {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-sepia {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-drop-shadow {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-drop-shadow-color {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-drop-shadow-alpha {\n syntax: "<percentage>";\n inherits: false;\n initial-value: 100%;\n}\n\n@property --tw-drop-shadow-size {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-backdrop-blur {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-backdrop-brightness {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-backdrop-contrast {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-backdrop-grayscale {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-backdrop-hue-rotate {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-backdrop-invert {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-backdrop-opacity {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-backdrop-saturate {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-backdrop-sepia {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-duration {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-ease {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-scale-x {\n syntax: "*";\n inherits: false;\n initial-value: 1;\n}\n\n@property --tw-scale-y {\n syntax: "*";\n inherits: false;\n initial-value: 1;\n}\n\n@property --tw-scale-z {\n syntax: "*";\n inherits: false;\n initial-value: 1;\n}\n\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n';
1
+ const globalCss = '/*! tailwindcss v4.1.14 | MIT License | https://tailwindcss.com */\n@layer properties {\n @supports (((-webkit-hyphens: none)) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color: rgb(from red r g b)))) {\n *, :before, :after, ::backdrop {\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-translate-z: 0;\n --tw-rotate-x: initial;\n --tw-rotate-y: initial;\n --tw-rotate-z: initial;\n --tw-skew-x: initial;\n --tw-skew-y: initial;\n --tw-space-y-reverse: 0;\n --tw-space-x-reverse: 0;\n --tw-divide-y-reverse: 0;\n --tw-border-style: solid;\n --tw-gradient-position: initial;\n --tw-gradient-from: #0000;\n --tw-gradient-via: #0000;\n --tw-gradient-to: #0000;\n --tw-gradient-stops: initial;\n --tw-gradient-via-stops: initial;\n --tw-gradient-from-position: 0%;\n --tw-gradient-via-position: 50%;\n --tw-gradient-to-position: 100%;\n --tw-leading: initial;\n --tw-font-weight: initial;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-color: initial;\n --tw-shadow-alpha: 100%;\n --tw-inset-shadow: 0 0 #0000;\n --tw-inset-shadow-color: initial;\n --tw-inset-shadow-alpha: 100%;\n --tw-ring-color: initial;\n --tw-ring-shadow: 0 0 #0000;\n --tw-inset-ring-color: initial;\n --tw-inset-ring-shadow: 0 0 #0000;\n --tw-ring-inset: initial;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-blur: initial;\n --tw-brightness: initial;\n --tw-contrast: initial;\n --tw-grayscale: initial;\n --tw-hue-rotate: initial;\n --tw-invert: initial;\n --tw-opacity: initial;\n --tw-saturate: initial;\n --tw-sepia: initial;\n --tw-drop-shadow: initial;\n --tw-drop-shadow-color: initial;\n --tw-drop-shadow-alpha: 100%;\n --tw-drop-shadow-size: initial;\n --tw-backdrop-blur: initial;\n --tw-backdrop-brightness: initial;\n --tw-backdrop-contrast: initial;\n --tw-backdrop-grayscale: initial;\n --tw-backdrop-hue-rotate: initial;\n --tw-backdrop-invert: initial;\n --tw-backdrop-opacity: initial;\n --tw-backdrop-saturate: initial;\n --tw-backdrop-sepia: initial;\n --tw-duration: initial;\n --tw-ease: initial;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-scale-z: 1;\n }\n }\n}\n\n@layer theme {\n :root, :host {\n --font-sans: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";\n --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;\n --color-red-400: oklch(70.4% .191 22.216);\n --color-amber-400: oklch(82.8% .189 84.429);\n --color-green-400: oklch(79.2% .209 151.711);\n --color-emerald-100: oklch(95% .052 163.051);\n --color-emerald-300: oklch(84.5% .143 164.978);\n --color-emerald-700: oklch(50.8% .118 165.612);\n --color-emerald-900: oklch(37.8% .077 168.94);\n --color-blue-400: oklch(70.7% .165 254.624);\n --color-violet-300: oklch(81.1% .111 293.571);\n --color-violet-400: oklch(70.2% .183 293.541);\n --color-purple-400: oklch(71.4% .203 305.504);\n --color-pink-400: oklch(71.8% .202 349.761);\n --color-black: #000;\n --color-white: #fff;\n --spacing: .25rem;\n --text-xs: .75rem;\n --text-xs--line-height: calc(1 / .75);\n --text-sm: .875rem;\n --text-sm--line-height: calc(1.25 / .875);\n --text-base: 1rem;\n --text-base--line-height: calc(1.5 / 1);\n --text-lg: 1.125rem;\n --text-lg--line-height: calc(1.75 / 1.125);\n --text-xl: 1.25rem;\n --text-xl--line-height: calc(1.75 / 1.25);\n --text-2xl: 1.5rem;\n --text-2xl--line-height: calc(2 / 1.5);\n --text-3xl: 1.875rem;\n --text-3xl--line-height: calc(2.25 / 1.875);\n --font-weight-medium: 500;\n --font-weight-semibold: 600;\n --font-weight-bold: 700;\n --leading-relaxed: 1.625;\n --radius-md: .375rem;\n --radius-lg: .5rem;\n --radius-xl: .75rem;\n --drop-shadow-md: 0 3px 3px #0000001f;\n --ease-out: cubic-bezier(0, 0, .2, 1);\n --ease-in-out: cubic-bezier(.4, 0, .2, 1);\n --animate-spin: spin 1s linear infinite;\n --blur-md: 12px;\n --blur-lg: 16px;\n --default-transition-duration: .15s;\n --default-transition-timing-function: cubic-bezier(.4, 0, .2, 1);\n --default-font-family: var(--font-sans);\n --default-mono-font-family: var(--font-mono);\n --color-background: #fff;\n --color-foreground: #000;\n --color-primary: #16b6f6;\n --color-primary-active: #0ea5e9;\n --color-muted-foreground: #6b7280;\n --color-accent: #16b6f6;\n --color-border: #e5e7eb;\n --color-card: #f2f2f2;\n --color-card-item-bg: #00000005;\n --color-card-item-hover-bg: #00000008;\n }\n}\n\n@layer base {\n *, :after, :before, ::backdrop {\n box-sizing: border-box;\n border: 0 solid;\n margin: 0;\n padding: 0;\n }\n\n ::file-selector-button {\n box-sizing: border-box;\n border: 0 solid;\n margin: 0;\n padding: 0;\n }\n\n html, :host {\n -webkit-text-size-adjust: 100%;\n tab-size: 4;\n line-height: 1.5;\n font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");\n font-feature-settings: var(--default-font-feature-settings, normal);\n font-variation-settings: var(--default-font-variation-settings, normal);\n -webkit-tap-highlight-color: transparent;\n }\n\n hr {\n height: 0;\n color: inherit;\n border-top-width: 1px;\n }\n\n abbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n }\n\n h1, h2, h3, h4, h5, h6 {\n font-size: inherit;\n font-weight: inherit;\n }\n\n a {\n color: inherit;\n -webkit-text-decoration: inherit;\n -webkit-text-decoration: inherit;\n -webkit-text-decoration: inherit;\n text-decoration: inherit;\n }\n\n b, strong {\n font-weight: bolder;\n }\n\n code, kbd, samp, pre {\n font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);\n font-feature-settings: var(--default-mono-font-feature-settings, normal);\n font-variation-settings: var(--default-mono-font-variation-settings, normal);\n font-size: 1em;\n }\n\n small {\n font-size: 80%;\n }\n\n sub, sup {\n vertical-align: baseline;\n font-size: 75%;\n line-height: 0;\n position: relative;\n }\n\n sub {\n bottom: -.25em;\n }\n\n sup {\n top: -.5em;\n }\n\n table {\n text-indent: 0;\n border-color: inherit;\n border-collapse: collapse;\n }\n\n :-moz-focusring {\n outline: auto;\n }\n\n progress {\n vertical-align: baseline;\n }\n\n summary {\n display: list-item;\n }\n\n ol, ul, menu {\n list-style: none;\n }\n\n img, svg, video, canvas, audio, iframe, embed, object {\n vertical-align: middle;\n display: block;\n }\n\n img, video {\n max-width: 100%;\n height: auto;\n }\n\n button, input, select, optgroup, textarea {\n font: inherit;\n font-feature-settings: inherit;\n font-variation-settings: inherit;\n letter-spacing: inherit;\n color: inherit;\n opacity: 1;\n background-color: #0000;\n border-radius: 0;\n }\n\n ::file-selector-button {\n font: inherit;\n font-feature-settings: inherit;\n font-variation-settings: inherit;\n letter-spacing: inherit;\n color: inherit;\n opacity: 1;\n background-color: #0000;\n border-radius: 0;\n }\n\n :where(select:is([multiple], [size])) optgroup {\n font-weight: bolder;\n }\n\n :where(select:is([multiple], [size])) optgroup option {\n padding-inline-start: 20px;\n }\n\n ::file-selector-button {\n margin-inline-end: 4px;\n }\n\n ::placeholder {\n opacity: 1;\n }\n\n @supports (not ((-webkit-appearance: -apple-pay-button))) or (contain-intrinsic-size: 1px) {\n ::placeholder {\n color: currentColor;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n ::placeholder {\n color: color-mix(in oklab, currentcolor 50%, transparent);\n }\n }\n }\n\n textarea {\n resize: vertical;\n }\n\n ::-webkit-search-decoration {\n -webkit-appearance: none;\n }\n\n ::-webkit-date-and-time-value {\n min-height: 1lh;\n text-align: inherit;\n }\n\n ::-webkit-datetime-edit {\n display: inline-flex;\n }\n\n ::-webkit-datetime-edit-fields-wrapper {\n padding: 0;\n }\n\n ::-webkit-datetime-edit {\n padding-block: 0;\n }\n\n ::-webkit-datetime-edit-year-field {\n padding-block: 0;\n }\n\n ::-webkit-datetime-edit-month-field {\n padding-block: 0;\n }\n\n ::-webkit-datetime-edit-day-field {\n padding-block: 0;\n }\n\n ::-webkit-datetime-edit-hour-field {\n padding-block: 0;\n }\n\n ::-webkit-datetime-edit-minute-field {\n padding-block: 0;\n }\n\n ::-webkit-datetime-edit-second-field {\n padding-block: 0;\n }\n\n ::-webkit-datetime-edit-millisecond-field {\n padding-block: 0;\n }\n\n ::-webkit-datetime-edit-meridiem-field {\n padding-block: 0;\n }\n\n ::-webkit-calendar-picker-indicator {\n line-height: 1;\n }\n\n :-moz-ui-invalid {\n box-shadow: none;\n }\n\n button, input:where([type="button"], [type="reset"], [type="submit"]) {\n appearance: button;\n }\n\n ::file-selector-button {\n appearance: button;\n }\n\n ::-webkit-inner-spin-button {\n height: auto;\n }\n\n ::-webkit-outer-spin-button {\n height: auto;\n }\n\n [hidden]:where(:not([hidden="until-found"])) {\n display: none !important;\n }\n}\n\n@layer components;\n\n@layer utilities {\n .qwik-devtools .pointer-events-none {\n pointer-events: none;\n }\n\n .qwik-devtools .visible {\n visibility: visible;\n }\n\n .qwik-devtools .absolute {\n position: absolute;\n }\n\n .qwik-devtools .fixed {\n position: fixed;\n }\n\n .qwik-devtools .relative {\n position: relative;\n }\n\n .qwik-devtools .static {\n position: static;\n }\n\n .qwik-devtools .inset-0 {\n inset: calc(var(--spacing) * 0);\n }\n\n .qwik-devtools .right-0 {\n right: calc(var(--spacing) * 0);\n }\n\n .qwik-devtools .right-6 {\n right: calc(var(--spacing) * 6);\n }\n\n .qwik-devtools .bottom-0 {\n bottom: calc(var(--spacing) * 0);\n }\n\n .qwik-devtools .bottom-6 {\n bottom: calc(var(--spacing) * 6);\n }\n\n .qwik-devtools .z-\\[9999\\] {\n z-index: 9999;\n }\n\n .qwik-devtools .col-start-1 {\n grid-column-start: 1;\n }\n\n .qwik-devtools .row-start-1 {\n grid-row-start: 1;\n }\n\n .qwik-devtools .container {\n width: 100%;\n }\n\n @media (min-width: 40rem) {\n .qwik-devtools .container {\n max-width: 40rem;\n }\n }\n\n @media (min-width: 48rem) {\n .qwik-devtools .container {\n max-width: 48rem;\n }\n }\n\n @media (min-width: 64rem) {\n .qwik-devtools .container {\n max-width: 64rem;\n }\n }\n\n @media (min-width: 80rem) {\n .qwik-devtools .container {\n max-width: 80rem;\n }\n }\n\n @media (min-width: 96rem) {\n .qwik-devtools .container {\n max-width: 96rem;\n }\n }\n\n .qwik-devtools .mt-1 {\n margin-top: calc(var(--spacing) * 1);\n }\n\n .qwik-devtools .mt-4 {\n margin-top: calc(var(--spacing) * 4);\n }\n\n .qwik-devtools .mt-5 {\n margin-top: calc(var(--spacing) * 5);\n }\n\n .qwik-devtools .mt-6 {\n margin-top: calc(var(--spacing) * 6);\n }\n\n .qwik-devtools .mt-auto {\n margin-top: auto;\n }\n\n .qwik-devtools .mr-2 {\n margin-right: calc(var(--spacing) * 2);\n }\n\n .qwik-devtools .mb-1\\.5 {\n margin-bottom: calc(var(--spacing) * 1.5);\n }\n\n .qwik-devtools .mb-2 {\n margin-bottom: calc(var(--spacing) * 2);\n }\n\n .qwik-devtools .mb-3 {\n margin-bottom: calc(var(--spacing) * 3);\n }\n\n .qwik-devtools .mb-4 {\n margin-bottom: calc(var(--spacing) * 4);\n }\n\n .qwik-devtools .ml-2 {\n margin-left: calc(var(--spacing) * 2);\n }\n\n .qwik-devtools .line-clamp-2 {\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n display: -webkit-box;\n overflow: hidden;\n }\n\n .qwik-devtools .flex {\n display: flex;\n }\n\n .qwik-devtools .grid {\n display: grid;\n }\n\n .qwik-devtools .hidden {\n display: none;\n }\n\n .qwik-devtools .inline-flex {\n display: inline-flex;\n }\n\n .qwik-devtools .aspect-square {\n aspect-ratio: 1;\n }\n\n .qwik-devtools .h-3 {\n height: calc(var(--spacing) * 3);\n }\n\n .qwik-devtools .h-4 {\n height: calc(var(--spacing) * 4);\n }\n\n .qwik-devtools .h-5 {\n height: calc(var(--spacing) * 5);\n }\n\n .qwik-devtools .h-6 {\n height: calc(var(--spacing) * 6);\n }\n\n .qwik-devtools .h-7 {\n height: calc(var(--spacing) * 7);\n }\n\n .qwik-devtools .h-8 {\n height: calc(var(--spacing) * 8);\n }\n\n .qwik-devtools .h-9 {\n height: calc(var(--spacing) * 9);\n }\n\n .qwik-devtools .h-10 {\n height: calc(var(--spacing) * 10);\n }\n\n .qwik-devtools .h-12 {\n height: calc(var(--spacing) * 12);\n }\n\n .qwik-devtools .h-\\[60vh\\] {\n height: 60vh;\n }\n\n .qwik-devtools .h-\\[calc\\(100vh-3rem\\)\\] {\n height: calc(100vh - 3rem);\n }\n\n .qwik-devtools .h-full {\n height: 100%;\n }\n\n .qwik-devtools .min-h-0 {\n min-height: calc(var(--spacing) * 0);\n }\n\n .qwik-devtools .min-h-\\[2\\.5rem\\] {\n min-height: 2.5rem;\n }\n\n .qwik-devtools .w-1\\/2 {\n width: 50%;\n }\n\n .qwik-devtools .w-3 {\n width: calc(var(--spacing) * 3);\n }\n\n .qwik-devtools .w-4 {\n width: calc(var(--spacing) * 4);\n }\n\n .qwik-devtools .w-5 {\n width: calc(var(--spacing) * 5);\n }\n\n .qwik-devtools .w-6 {\n width: calc(var(--spacing) * 6);\n }\n\n .qwik-devtools .w-7 {\n width: calc(var(--spacing) * 7);\n }\n\n .qwik-devtools .w-8 {\n width: calc(var(--spacing) * 8);\n }\n\n .qwik-devtools .w-9 {\n width: calc(var(--spacing) * 9);\n }\n\n .qwik-devtools .w-10 {\n width: calc(var(--spacing) * 10);\n }\n\n .qwik-devtools .w-12 {\n width: calc(var(--spacing) * 12);\n }\n\n .qwik-devtools .w-\\[420px\\] {\n width: 420px;\n }\n\n .qwik-devtools .w-\\[calc\\(100vw-3rem\\)\\] {\n width: calc(100vw - 3rem);\n }\n\n .qwik-devtools .w-full {\n width: 100%;\n }\n\n .qwik-devtools .min-w-0 {\n min-width: calc(var(--spacing) * 0);\n }\n\n .qwik-devtools .min-w-\\[320px\\] {\n min-width: 320px;\n }\n\n .qwik-devtools .flex-1 {\n flex: 1;\n }\n\n .qwik-devtools .flex-shrink-0, .qwik-devtools .shrink-0 {\n flex-shrink: 0;\n }\n\n .qwik-devtools .origin-center {\n transform-origin: center;\n }\n\n .qwik-devtools .translate-y-0 {\n --tw-translate-y: calc(var(--spacing) * 0);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n\n .qwik-devtools .-rotate-90 {\n rotate: -90deg;\n }\n\n .qwik-devtools .rotate-90 {\n rotate: 90deg;\n }\n\n .qwik-devtools .rotate-180 {\n rotate: 180deg;\n }\n\n .qwik-devtools .transform {\n transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, );\n }\n\n .qwik-devtools .animate-spin {\n animation: var(--animate-spin);\n }\n\n .qwik-devtools .cursor-grab {\n cursor: grab;\n }\n\n .qwik-devtools .cursor-grabbing {\n cursor: grabbing;\n }\n\n .qwik-devtools .cursor-not-allowed {\n cursor: not-allowed;\n }\n\n .qwik-devtools .cursor-pointer {\n cursor: pointer;\n }\n\n .qwik-devtools .resize-none {\n resize: none;\n }\n\n .qwik-devtools .grid-cols-1 {\n grid-template-columns: repeat(1, minmax(0, 1fr));\n }\n\n .qwik-devtools .grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n\n .qwik-devtools .grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n\n .qwik-devtools .grid-cols-4 {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n }\n\n .qwik-devtools .flex-col {\n flex-direction: column;\n }\n\n .qwik-devtools .place-items-center {\n place-items: center;\n }\n\n .qwik-devtools .items-center {\n align-items: center;\n }\n\n .qwik-devtools .items-start {\n align-items: flex-start;\n }\n\n .qwik-devtools .justify-between {\n justify-content: space-between;\n }\n\n .qwik-devtools .justify-center {\n justify-content: center;\n }\n\n .qwik-devtools .gap-1 {\n gap: calc(var(--spacing) * 1);\n }\n\n .qwik-devtools .gap-1\\.5 {\n gap: calc(var(--spacing) * 1.5);\n }\n\n .qwik-devtools .gap-2 {\n gap: calc(var(--spacing) * 2);\n }\n\n .qwik-devtools .gap-3 {\n gap: calc(var(--spacing) * 3);\n }\n\n .qwik-devtools .gap-4 {\n gap: calc(var(--spacing) * 4);\n }\n\n .qwik-devtools .gap-5 {\n gap: calc(var(--spacing) * 5);\n }\n\n :where(.qwik-devtools .space-y-2 > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)));\n }\n\n :where(.qwik-devtools .space-y-3 > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)));\n }\n\n :where(.qwik-devtools .space-y-4 > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)));\n }\n\n :where(.qwik-devtools .space-y-6 > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)));\n }\n\n .qwik-devtools .gap-x-6 {\n column-gap: calc(var(--spacing) * 6);\n }\n\n :where(.qwik-devtools .space-x-2 > :not(:last-child)) {\n --tw-space-x-reverse: 0;\n margin-inline-start: calc(calc(var(--spacing) * 2) * var(--tw-space-x-reverse));\n margin-inline-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-x-reverse)));\n }\n\n :where(.qwik-devtools .space-x-4 > :not(:last-child)) {\n --tw-space-x-reverse: 0;\n margin-inline-start: calc(calc(var(--spacing) * 4) * var(--tw-space-x-reverse));\n margin-inline-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-x-reverse)));\n }\n\n .qwik-devtools .gap-y-3 {\n row-gap: calc(var(--spacing) * 3);\n }\n\n :where(.qwik-devtools .divide-y > :not(:last-child)) {\n --tw-divide-y-reverse: 0;\n border-bottom-style: var(--tw-border-style);\n border-top-style: var(--tw-border-style);\n border-top-width: calc(1px * var(--tw-divide-y-reverse));\n border-bottom-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));\n }\n\n :where(.qwik-devtools .divide-border > :not(:last-child)) {\n border-color: var(--color-border);\n }\n\n .qwik-devtools .truncate {\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n }\n\n .qwik-devtools .overflow-auto {\n overflow: auto;\n }\n\n .qwik-devtools .overflow-hidden {\n overflow: hidden;\n }\n\n .qwik-devtools .overflow-x-auto {\n overflow-x: auto;\n }\n\n .qwik-devtools .overflow-y-auto {\n overflow-y: auto;\n }\n\n .qwik-devtools .rounded {\n border-radius: .25rem;\n }\n\n .qwik-devtools .rounded-full {\n border-radius: 3.40282e38px;\n }\n\n .qwik-devtools .rounded-lg {\n border-radius: var(--radius-lg);\n }\n\n .qwik-devtools .rounded-md {\n border-radius: var(--radius-md);\n }\n\n .qwik-devtools .rounded-xl {\n border-radius: var(--radius-xl);\n }\n\n .qwik-devtools .border {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n\n .qwik-devtools .border-2 {\n border-style: var(--tw-border-style);\n border-width: 2px;\n }\n\n .qwik-devtools .border-t {\n border-top-style: var(--tw-border-style);\n border-top-width: 1px;\n }\n\n .qwik-devtools .border-r {\n border-right-style: var(--tw-border-style);\n border-right-width: 1px;\n }\n\n .qwik-devtools .border-b {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 1px;\n }\n\n .qwik-devtools .border-b-2 {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 2px;\n }\n\n .qwik-devtools .border-l {\n border-left-style: var(--tw-border-style);\n border-left-width: 1px;\n }\n\n .qwik-devtools .border-accent\\/30 {\n border-color: #16b6f64d;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .border-accent\\/30 {\n border-color: color-mix(in oklab, var(--color-accent) 30%, transparent);\n }\n }\n\n .qwik-devtools .border-accent\\/50 {\n border-color: #16b6f680;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .border-accent\\/50 {\n border-color: color-mix(in oklab, var(--color-accent) 50%, transparent);\n }\n }\n\n .qwik-devtools .border-border {\n border-color: var(--color-border);\n }\n\n .qwik-devtools .border-border\\/50 {\n border-color: #e5e7eb80;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .border-border\\/50 {\n border-color: color-mix(in oklab, var(--color-border) 50%, transparent);\n }\n }\n\n .qwik-devtools .border-current {\n border-color: currentColor;\n }\n\n .qwik-devtools .border-emerald-300 {\n border-color: var(--color-emerald-300);\n }\n\n .qwik-devtools .border-primary\\/20 {\n border-color: #16b6f633;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .border-primary\\/20 {\n border-color: color-mix(in oklab, var(--color-primary) 20%, transparent);\n }\n }\n\n .qwik-devtools .border-t-foreground\\/40 {\n border-top-color: #0006;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .border-t-foreground\\/40 {\n border-top-color: color-mix(in oklab, var(--color-foreground) 40%, transparent);\n }\n }\n\n .qwik-devtools .border-t-transparent {\n border-top-color: #0000;\n }\n\n .qwik-devtools .border-b-transparent {\n border-bottom-color: #0000;\n }\n\n .qwik-devtools .bg-accent {\n background-color: var(--color-accent);\n }\n\n .qwik-devtools .bg-background {\n background-color: var(--color-background);\n }\n\n .qwik-devtools .bg-background\\/95 {\n background-color: #fffffff2;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .bg-background\\/95 {\n background-color: color-mix(in oklab, var(--color-background) 95%, transparent);\n }\n }\n\n .qwik-devtools .bg-black\\/20 {\n background-color: #0003;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .bg-black\\/20 {\n background-color: color-mix(in oklab, var(--color-black) 20%, transparent);\n }\n }\n\n .qwik-devtools .bg-card {\n background-color: var(--color-card);\n }\n\n .qwik-devtools .bg-card-item-bg {\n background-color: var(--color-card-item-bg);\n }\n\n .qwik-devtools .bg-emerald-100 {\n background-color: var(--color-emerald-100);\n }\n\n .qwik-devtools .bg-foreground\\/5 {\n background-color: #0000000d;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .bg-foreground\\/5 {\n background-color: color-mix(in oklab, var(--color-foreground) 5%, transparent);\n }\n }\n\n .qwik-devtools .bg-primary\\/5 {\n background-color: #16b6f60d;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .bg-primary\\/5 {\n background-color: color-mix(in oklab, var(--color-primary) 5%, transparent);\n }\n }\n\n .qwik-devtools .bg-primary\\/10 {\n background-color: #16b6f61a;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .bg-primary\\/10 {\n background-color: color-mix(in oklab, var(--color-primary) 10%, transparent);\n }\n }\n\n .qwik-devtools .bg-transparent {\n background-color: #0000;\n }\n\n .qwik-devtools .bg-gradient-to-br {\n --tw-gradient-position: to bottom right in oklab;\n background-image: linear-gradient(var(--tw-gradient-stops));\n }\n\n .qwik-devtools .from-accent\\/20 {\n --tw-gradient-from: #16b6f633;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .from-accent\\/20 {\n --tw-gradient-from: color-mix(in oklab, var(--color-accent) 20%, transparent);\n }\n }\n\n .qwik-devtools .from-accent\\/20 {\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n\n .qwik-devtools .from-primary\\/0 {\n --tw-gradient-from: #0000;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .from-primary\\/0 {\n --tw-gradient-from: color-mix(in oklab, var(--color-primary) 0%, transparent);\n }\n }\n\n .qwik-devtools .from-primary\\/0 {\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n\n .qwik-devtools .from-primary\\/10 {\n --tw-gradient-from: #16b6f61a;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .from-primary\\/10 {\n --tw-gradient-from: color-mix(in oklab, var(--color-primary) 10%, transparent);\n }\n }\n\n .qwik-devtools .from-primary\\/10 {\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n\n .qwik-devtools .via-primary\\/0 {\n --tw-gradient-via: #0000;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .via-primary\\/0 {\n --tw-gradient-via: color-mix(in oklab, var(--color-primary) 0%, transparent);\n }\n }\n\n .qwik-devtools .via-primary\\/0 {\n --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-via-stops);\n }\n\n .qwik-devtools .via-primary\\/20 {\n --tw-gradient-via: #16b6f633;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .via-primary\\/20 {\n --tw-gradient-via: color-mix(in oklab, var(--color-primary) 20%, transparent);\n }\n }\n\n .qwik-devtools .via-primary\\/20 {\n --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-via-stops);\n }\n\n .qwik-devtools .to-accent\\/40 {\n --tw-gradient-to: #16b6f666;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .to-accent\\/40 {\n --tw-gradient-to: color-mix(in oklab, var(--color-accent) 40%, transparent);\n }\n }\n\n .qwik-devtools .to-accent\\/40 {\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n\n .qwik-devtools .to-primary\\/5 {\n --tw-gradient-to: #16b6f60d;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .to-primary\\/5 {\n --tw-gradient-to: color-mix(in oklab, var(--color-primary) 5%, transparent);\n }\n }\n\n .qwik-devtools .to-primary\\/5 {\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n\n .qwik-devtools .to-primary\\/30 {\n --tw-gradient-to: #16b6f64d;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .to-primary\\/30 {\n --tw-gradient-to: color-mix(in oklab, var(--color-primary) 30%, transparent);\n }\n }\n\n .qwik-devtools .to-primary\\/30 {\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n\n .qwik-devtools .object-cover {\n object-fit: cover;\n }\n\n .qwik-devtools .p-0\\.5 {\n padding: calc(var(--spacing) * .5);\n }\n\n .qwik-devtools .p-1 {\n padding: calc(var(--spacing) * 1);\n }\n\n .qwik-devtools .p-1\\.5 {\n padding: calc(var(--spacing) * 1.5);\n }\n\n .qwik-devtools .p-2 {\n padding: calc(var(--spacing) * 2);\n }\n\n .qwik-devtools .p-2\\.5 {\n padding: calc(var(--spacing) * 2.5);\n }\n\n .qwik-devtools .p-3 {\n padding: calc(var(--spacing) * 3);\n }\n\n .qwik-devtools .p-3\\.5 {\n padding: calc(var(--spacing) * 3.5);\n }\n\n .qwik-devtools .p-4 {\n padding: calc(var(--spacing) * 4);\n }\n\n .qwik-devtools .p-5 {\n padding: calc(var(--spacing) * 5);\n }\n\n .qwik-devtools .p-8 {\n padding: calc(var(--spacing) * 8);\n }\n\n .qwik-devtools .px-2 {\n padding-inline: calc(var(--spacing) * 2);\n }\n\n .qwik-devtools .px-2\\.5 {\n padding-inline: calc(var(--spacing) * 2.5);\n }\n\n .qwik-devtools .px-3 {\n padding-inline: calc(var(--spacing) * 3);\n }\n\n .qwik-devtools .px-4 {\n padding-inline: calc(var(--spacing) * 4);\n }\n\n .qwik-devtools .py-0\\.5 {\n padding-block: calc(var(--spacing) * .5);\n }\n\n .qwik-devtools .py-1 {\n padding-block: calc(var(--spacing) * 1);\n }\n\n .qwik-devtools .py-1\\.5 {\n padding-block: calc(var(--spacing) * 1.5);\n }\n\n .qwik-devtools .py-2 {\n padding-block: calc(var(--spacing) * 2);\n }\n\n .qwik-devtools .py-3 {\n padding-block: calc(var(--spacing) * 3);\n }\n\n .qwik-devtools .py-4 {\n padding-block: calc(var(--spacing) * 4);\n }\n\n .qwik-devtools .py-8 {\n padding-block: calc(var(--spacing) * 8);\n }\n\n .qwik-devtools .pb-4 {\n padding-bottom: calc(var(--spacing) * 4);\n }\n\n .qwik-devtools .pb-6 {\n padding-bottom: calc(var(--spacing) * 6);\n }\n\n .qwik-devtools .text-center {\n text-align: center;\n }\n\n .qwik-devtools .text-left {\n text-align: left;\n }\n\n .qwik-devtools .text-right {\n text-align: right;\n }\n\n .qwik-devtools .font-mono {\n font-family: var(--font-mono);\n }\n\n .qwik-devtools .font-sans {\n font-family: var(--font-sans);\n }\n\n .qwik-devtools .text-2xl {\n font-size: var(--text-2xl);\n line-height: var(--tw-leading, var(--text-2xl--line-height));\n }\n\n .qwik-devtools .text-3xl {\n font-size: var(--text-3xl);\n line-height: var(--tw-leading, var(--text-3xl--line-height));\n }\n\n .qwik-devtools .text-base {\n font-size: var(--text-base);\n line-height: var(--tw-leading, var(--text-base--line-height));\n }\n\n .qwik-devtools .text-lg {\n font-size: var(--text-lg);\n line-height: var(--tw-leading, var(--text-lg--line-height));\n }\n\n .qwik-devtools .text-sm {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n\n .qwik-devtools .text-xl {\n font-size: var(--text-xl);\n line-height: var(--tw-leading, var(--text-xl--line-height));\n }\n\n .qwik-devtools .text-xs {\n font-size: var(--text-xs);\n line-height: var(--tw-leading, var(--text-xs--line-height));\n }\n\n .qwik-devtools .text-\\[10px\\] {\n font-size: 10px;\n }\n\n .qwik-devtools .leading-relaxed {\n --tw-leading: var(--leading-relaxed);\n line-height: var(--leading-relaxed);\n }\n\n .qwik-devtools .font-bold {\n --tw-font-weight: var(--font-weight-bold);\n font-weight: var(--font-weight-bold);\n }\n\n .qwik-devtools .font-medium {\n --tw-font-weight: var(--font-weight-medium);\n font-weight: var(--font-weight-medium);\n }\n\n .qwik-devtools .font-semibold {\n --tw-font-weight: var(--font-weight-semibold);\n font-weight: var(--font-weight-semibold);\n }\n\n .qwik-devtools .break-all {\n word-break: break-all;\n }\n\n .qwik-devtools .whitespace-nowrap {\n white-space: nowrap;\n }\n\n .qwik-devtools .text-accent {\n color: var(--color-accent);\n }\n\n .qwik-devtools .text-amber-400 {\n color: var(--color-amber-400);\n }\n\n .qwik-devtools .text-blue-400 {\n color: var(--color-blue-400);\n }\n\n .qwik-devtools .text-emerald-700 {\n color: var(--color-emerald-700);\n }\n\n .qwik-devtools .text-foreground {\n color: var(--color-foreground);\n }\n\n .qwik-devtools .text-foreground\\/70 {\n color: #000000b3;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .text-foreground\\/70 {\n color: color-mix(in oklab, var(--color-foreground) 70%, transparent);\n }\n }\n\n .qwik-devtools .text-green-400 {\n color: var(--color-green-400);\n }\n\n .qwik-devtools .text-muted-foreground {\n color: var(--color-muted-foreground);\n }\n\n .qwik-devtools .text-pink-400 {\n color: var(--color-pink-400);\n }\n\n .qwik-devtools .text-primary {\n color: var(--color-primary);\n }\n\n .qwik-devtools .text-primary\\/50 {\n color: #16b6f680;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .text-primary\\/50 {\n color: color-mix(in oklab, var(--color-primary) 50%, transparent);\n }\n }\n\n .qwik-devtools .text-purple-400 {\n color: var(--color-purple-400);\n }\n\n .qwik-devtools .text-red-400 {\n color: var(--color-red-400);\n }\n\n .qwik-devtools .text-violet-400 {\n color: var(--color-violet-400);\n }\n\n .qwik-devtools .text-white {\n color: var(--color-white);\n }\n\n .qwik-devtools .opacity-0 {\n opacity: 0;\n }\n\n .qwik-devtools .opacity-90 {\n opacity: .9;\n }\n\n .qwik-devtools .shadow {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, #0000001a), 0 1px 2px -1px var(--tw-shadow-color, #0000001a);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n\n .qwik-devtools .shadow-lg {\n --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, #0000001a), 0 4px 6px -4px var(--tw-shadow-color, #0000001a);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n\n .qwik-devtools .shadow-md {\n --tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, #0000001a), 0 2px 4px -2px var(--tw-shadow-color, #0000001a);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n\n .qwik-devtools .shadow-sm {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, #0000001a), 0 1px 2px -1px var(--tw-shadow-color, #0000001a);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n\n .qwik-devtools .ring-2 {\n --tw-ring-shadow: var(--tw-ring-inset, ) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n\n .qwik-devtools .shadow-accent\\/35 {\n --tw-shadow-color: #16b6f659;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .shadow-accent\\/35 {\n --tw-shadow-color: color-mix(in oklab, color-mix(in oklab, var(--color-accent) 35%, transparent) var(--tw-shadow-alpha), transparent);\n }\n }\n\n .qwik-devtools .ring-primary-active {\n --tw-ring-color: var(--color-primary-active);\n }\n\n .qwik-devtools .drop-shadow-md {\n --tw-drop-shadow-size: drop-shadow(0 3px 3px var(--tw-drop-shadow-color, #0000001f));\n --tw-drop-shadow: drop-shadow(var(--drop-shadow-md));\n 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, );\n }\n\n .qwik-devtools .filter {\n 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, );\n }\n\n .qwik-devtools .backdrop-blur-lg {\n --tw-backdrop-blur: blur(var(--blur-lg));\n -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, );\n backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, );\n }\n\n .qwik-devtools .backdrop-blur-md {\n --tw-backdrop-blur: blur(var(--blur-md));\n -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, );\n backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, );\n }\n\n .qwik-devtools .transition {\n 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;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n\n .qwik-devtools .transition-all {\n transition-property: all;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n\n .qwik-devtools .transition-colors {\n transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n\n .qwik-devtools .transition-opacity {\n transition-property: opacity;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n\n .qwik-devtools .transition-transform {\n transition-property: transform, translate, scale, rotate;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n\n .qwik-devtools .duration-200 {\n --tw-duration: .2s;\n transition-duration: .2s;\n }\n\n .qwik-devtools .duration-300 {\n --tw-duration: .3s;\n transition-duration: .3s;\n }\n\n .qwik-devtools .ease-in-out {\n --tw-ease: var(--ease-in-out);\n transition-timing-function: var(--ease-in-out);\n }\n\n .qwik-devtools .ease-out {\n --tw-ease: var(--ease-out);\n transition-timing-function: var(--ease-out);\n }\n\n .qwik-devtools .select-none {\n -webkit-user-select: none;\n user-select: none;\n }\n\n @media (hover: hover) {\n .qwik-devtools .group-hover\\:scale-110:is(:where(.group):hover *) {\n --tw-scale-x: 110%;\n --tw-scale-y: 110%;\n --tw-scale-z: 110%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n\n .qwik-devtools .group-hover\\:opacity-100:is(:where(.group):hover *) {\n opacity: 1;\n }\n\n .qwik-devtools .group-hover\\:shadow-primary\\/20:is(:where(.group):hover *) {\n --tw-shadow-color: #16b6f633;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .group-hover\\:shadow-primary\\/20:is(:where(.group):hover *) {\n --tw-shadow-color: color-mix(in oklab, color-mix(in oklab, var(--color-primary) 20%, transparent) var(--tw-shadow-alpha), transparent);\n }\n }\n }\n\n .qwik-devtools .group-active\\:scale-75:is(:where(.group):active *) {\n --tw-scale-x: 75%;\n --tw-scale-y: 75%;\n --tw-scale-z: 75%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n\n @media (hover: hover) {\n .qwik-devtools .hover\\:-translate-y-0\\.5:hover {\n --tw-translate-y: calc(var(--spacing) * -.5);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n\n .qwik-devtools .hover\\:scale-110:hover {\n --tw-scale-x: 110%;\n --tw-scale-y: 110%;\n --tw-scale-z: 110%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n\n .qwik-devtools .hover\\:rotate-3:hover {\n rotate: 3deg;\n }\n\n .qwik-devtools .hover\\:border-primary\\/30:hover {\n border-color: #16b6f64d;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .hover\\:border-primary\\/30:hover {\n border-color: color-mix(in oklab, var(--color-primary) 30%, transparent);\n }\n }\n\n .qwik-devtools .hover\\:bg-card-item-hover-bg:hover {\n background-color: var(--color-card-item-hover-bg);\n }\n\n .qwik-devtools .hover\\:bg-foreground\\/5:hover {\n background-color: #0000000d;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .hover\\:bg-foreground\\/5:hover {\n background-color: color-mix(in oklab, var(--color-foreground) 5%, transparent);\n }\n }\n\n .qwik-devtools .hover\\:bg-primary\\/10:hover {\n background-color: #16b6f61a;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .hover\\:bg-primary\\/10:hover {\n background-color: color-mix(in oklab, var(--color-primary) 10%, transparent);\n }\n }\n\n .qwik-devtools .hover\\:bg-primary\\/20:hover {\n background-color: #16b6f633;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .hover\\:bg-primary\\/20:hover {\n background-color: color-mix(in oklab, var(--color-primary) 20%, transparent);\n }\n }\n\n .qwik-devtools .hover\\:text-foreground:hover {\n color: var(--color-foreground);\n }\n\n .qwik-devtools .hover\\:text-primary:hover {\n color: var(--color-primary);\n }\n\n .qwik-devtools .hover\\:underline:hover {\n text-decoration-line: underline;\n }\n\n .qwik-devtools .hover\\:opacity-60:hover {\n opacity: .6;\n }\n\n .qwik-devtools .hover\\:opacity-90:hover {\n opacity: .9;\n }\n\n .qwik-devtools .hover\\:shadow-lg:hover {\n --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, #0000001a), 0 4px 6px -4px var(--tw-shadow-color, #0000001a);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n\n .qwik-devtools .hover\\:shadow-primary\\/5:hover {\n --tw-shadow-color: #16b6f60d;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .hover\\:shadow-primary\\/5:hover {\n --tw-shadow-color: color-mix(in oklab, color-mix(in oklab, var(--color-primary) 5%, transparent) var(--tw-shadow-alpha), transparent);\n }\n }\n }\n\n .qwik-devtools .focus\\:ring-primary-active:focus {\n --tw-ring-color: var(--color-primary-active);\n }\n\n .qwik-devtools .focus\\:ring-offset-0:focus {\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-shadow: var(--tw-ring-inset, ) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n }\n\n @media (min-width: 40rem) {\n .qwik-devtools .sm\\:grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n\n .qwik-devtools .sm\\:grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n }\n\n @media (min-width: 48rem) {\n .qwik-devtools .md\\:mt-6 {\n margin-top: calc(var(--spacing) * 6);\n }\n\n .qwik-devtools .md\\:grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n\n .qwik-devtools .md\\:grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n\n .qwik-devtools .md\\:grid-cols-4 {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n }\n\n .qwik-devtools .md\\:px-4 {\n padding-inline: calc(var(--spacing) * 4);\n }\n }\n\n @media (min-width: 64rem) {\n .qwik-devtools .lg\\:grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n\n .qwik-devtools .lg\\:grid-cols-4 {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n }\n }\n\n @media (prefers-color-scheme: dark) {\n .qwik-devtools .dark\\:border-\\[\\#374151\\] {\n border-color: #374151;\n }\n\n .qwik-devtools .dark\\:border-emerald-700\\/40 {\n border-color: #00795666;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .dark\\:border-emerald-700\\/40 {\n border-color: color-mix(in oklab, var(--color-emerald-700) 40%, transparent);\n }\n }\n\n .qwik-devtools .dark\\:bg-\\[\\#1F2937\\] {\n background-color: #1f2937;\n }\n\n .qwik-devtools .dark\\:bg-emerald-900\\/30 {\n background-color: #004e3b4d;\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .qwik-devtools .dark\\:bg-emerald-900\\/30 {\n background-color: color-mix(in oklab, var(--color-emerald-900) 30%, transparent);\n }\n }\n\n .qwik-devtools .dark\\:text-emerald-300 {\n color: var(--color-emerald-300);\n }\n\n .qwik-devtools .dark\\:text-violet-300 {\n color: var(--color-violet-300);\n }\n }\n\n .custom-scrollbar {\n scrollbar-width: thin;\n scrollbar-color: var(--color-scrollbar-thumb) transparent;\n }\n\n .custom-scrollbar::-webkit-scrollbar {\n width: 6px;\n }\n\n .custom-scrollbar::-webkit-scrollbar-track {\n background: none;\n }\n\n .custom-scrollbar::-webkit-scrollbar-thumb {\n background-color: var(--color-scrollbar-thumb);\n border-radius: 20px;\n }\n\n .custom-scrollbar::-webkit-scrollbar-thumb:hover {\n background-color: var(--color-scrollbar-thumb-hover);\n }\n}\n\n:root {\n --theme-name: "light";\n --color-background: #fff;\n --color-foreground: #000;\n --color-primary: #16b6f6;\n --color-primary-hover: #38bdf8;\n --color-primary-active: #0ea5e9;\n --color-secondary: #6b7280;\n --color-border: #e5e7eb;\n --color-card: #f2f2f2;\n --color-card-item-bg: #00000005;\n --color-card-item-hover-bg: #00000008;\n --color-scrollbar-thumb: #d1d5db;\n --color-scrollbar-thumb-hover: #a1a1aa;\n --color-muted: #9ca3af;\n --color-muted-foreground: #6b7280;\n --color-accent: #16b6f6;\n --color-input: var(--color-border);\n --color-ring: var(--color-primary);\n}\n\n:root[data-theme="dark"] {\n --theme-name: "dark";\n --color-background: #18181b;\n --color-foreground: #fff;\n --color-primary: #16b6f6;\n --color-primary-hover: #38bdf8;\n --color-primary-active: #0ea5e9;\n --color-secondary: #9ca3af;\n --color-border: #374151;\n --color-card: #27272a;\n --color-card-item-bg: #ffffff08;\n --color-card-item-hover-bg: #ffffff0d;\n --color-scrollbar-thumb: #3f3f46;\n --color-scrollbar-thumb-hover: #52525b;\n --color-muted: #374151;\n --color-muted-foreground: #9ca3af;\n --color-accent: #16b6f6;\n --color-input: var(--color-border);\n --color-ring: var(--color-primary);\n}\n\n@media (prefers-color-scheme: dark) {\n :root:not([data-theme]) {\n --theme-name: "dark";\n --color-background: #18181b;\n --color-foreground: #fff;\n --color-primary: #16b6f6;\n --color-secondary: #9ca3af;\n --color-border: #374151;\n --color-card: #27272a;\n --color-card-item-bg: #ffffff08;\n --color-card-item-hover-bg: #ffffff0d;\n --color-scrollbar-thumb: #3f3f46;\n --color-scrollbar-thumb-hover: #52525b;\n --color-muted: #374151;\n --color-muted-foreground: #9ca3af;\n --color-accent: #16b6f6;\n --color-input: var(--color-border);\n --color-ring: var(--color-primary);\n }\n}\n\n@property --tw-translate-x {\n syntax: "*";\n inherits: false;\n initial-value: 0;\n}\n\n@property --tw-translate-y {\n syntax: "*";\n inherits: false;\n initial-value: 0;\n}\n\n@property --tw-translate-z {\n syntax: "*";\n inherits: false;\n initial-value: 0;\n}\n\n@property --tw-rotate-x {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-rotate-y {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-rotate-z {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-skew-x {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-skew-y {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-space-y-reverse {\n syntax: "*";\n inherits: false;\n initial-value: 0;\n}\n\n@property --tw-space-x-reverse {\n syntax: "*";\n inherits: false;\n initial-value: 0;\n}\n\n@property --tw-divide-y-reverse {\n syntax: "*";\n inherits: false;\n initial-value: 0;\n}\n\n@property --tw-border-style {\n syntax: "*";\n inherits: false;\n initial-value: solid;\n}\n\n@property --tw-gradient-position {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-gradient-from {\n syntax: "<color>";\n inherits: false;\n initial-value: #0000;\n}\n\n@property --tw-gradient-via {\n syntax: "<color>";\n inherits: false;\n initial-value: #0000;\n}\n\n@property --tw-gradient-to {\n syntax: "<color>";\n inherits: false;\n initial-value: #0000;\n}\n\n@property --tw-gradient-stops {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-gradient-via-stops {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-gradient-from-position {\n syntax: "<length-percentage>";\n inherits: false;\n initial-value: 0%;\n}\n\n@property --tw-gradient-via-position {\n syntax: "<length-percentage>";\n inherits: false;\n initial-value: 50%;\n}\n\n@property --tw-gradient-to-position {\n syntax: "<length-percentage>";\n inherits: false;\n initial-value: 100%;\n}\n\n@property --tw-leading {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-font-weight {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-shadow {\n syntax: "*";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n\n@property --tw-shadow-color {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-shadow-alpha {\n syntax: "<percentage>";\n inherits: false;\n initial-value: 100%;\n}\n\n@property --tw-inset-shadow {\n syntax: "*";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n\n@property --tw-inset-shadow-color {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-inset-shadow-alpha {\n syntax: "<percentage>";\n inherits: false;\n initial-value: 100%;\n}\n\n@property --tw-ring-color {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-ring-shadow {\n syntax: "*";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n\n@property --tw-inset-ring-color {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-inset-ring-shadow {\n syntax: "*";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n\n@property --tw-ring-inset {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-ring-offset-width {\n syntax: "<length>";\n inherits: false;\n initial-value: 0;\n}\n\n@property --tw-ring-offset-color {\n syntax: "*";\n inherits: false;\n initial-value: #fff;\n}\n\n@property --tw-ring-offset-shadow {\n syntax: "*";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n\n@property --tw-blur {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-brightness {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-contrast {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-grayscale {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-hue-rotate {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-invert {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-opacity {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-saturate {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-sepia {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-drop-shadow {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-drop-shadow-color {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-drop-shadow-alpha {\n syntax: "<percentage>";\n inherits: false;\n initial-value: 100%;\n}\n\n@property --tw-drop-shadow-size {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-backdrop-blur {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-backdrop-brightness {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-backdrop-contrast {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-backdrop-grayscale {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-backdrop-hue-rotate {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-backdrop-invert {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-backdrop-opacity {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-backdrop-saturate {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-backdrop-sepia {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-duration {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-ease {\n syntax: "*";\n inherits: false\n}\n\n@property --tw-scale-x {\n syntax: "*";\n inherits: false;\n initial-value: 1;\n}\n\n@property --tw-scale-y {\n syntax: "*";\n inherits: false;\n initial-value: 1;\n}\n\n@property --tw-scale-z {\n syntax: "*";\n inherits: false;\n initial-value: 1;\n}\n\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n';
2
2
  export {
3
3
  globalCss as default
4
4
  };
@@ -12,6 +12,15 @@ export interface ServerFunctions {
12
12
  getRoutes: () => any;
13
13
  getQwikPackages: () => Promise<[string, string][]>;
14
14
  getAllDependencies: () => Promise<any[]>;
15
+ getDependenciesStatus: () => Promise<{
16
+ phase: 'idle' | 'phase1' | 'phase2' | 'done' | 'error';
17
+ loaded: number;
18
+ total: number;
19
+ startedAt: number | null;
20
+ finishedAt: number | null;
21
+ error?: string;
22
+ }>;
23
+ refreshDependencies: () => Promise<void>;
15
24
  installPackage: (packageName: string, isDev?: boolean) => Promise<{
16
25
  success: boolean;
17
26
  error?: string;
@@ -2,8 +2,16 @@ export interface Package {
2
2
  name: string;
3
3
  version: string;
4
4
  description: string;
5
- author?: {
6
- name: string;
5
+ /**
6
+ * npm package.json `author` can be:
7
+ * - string: "Jane Doe <jane@example.com> (https://example.com)"
8
+ * - object: { name, email?, url? }
9
+ * - missing / partial
10
+ *
11
+ * Runtime data may not match strict typings, so keep this permissive.
12
+ */
13
+ author?: string | {
14
+ name?: string;
7
15
  email?: string;
8
16
  url?: string;
9
17
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qwik.dev/devtools",
3
- "version": "0.2.2",
3
+ "version": "0.2.4",
4
4
  "license": "MIT",
5
5
  "main": "./dist/plugin/index.mjs",
6
6
  "description": "Qwik devtools package",