@hot-updater/console 0.1.3 → 0.1.5

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.
Binary file
package/dist/index.cjs CHANGED
@@ -2112,24 +2112,6 @@ function literal(literal_, message) {
2112
2112
  }
2113
2113
  };
2114
2114
  }
2115
- function number(message) {
2116
- return {
2117
- kind: "schema",
2118
- type: "number",
2119
- reference: number,
2120
- expects: "number",
2121
- async: false,
2122
- message,
2123
- _run(dataset, config2) {
2124
- if (typeof dataset.value === "number" && !isNaN(dataset.value)) {
2125
- dataset.typed = true;
2126
- } else {
2127
- _addIssue(this, "type", dataset, config2);
2128
- }
2129
- return dataset;
2130
- }
2131
- };
2132
- }
2133
2115
  function object(entries, message) {
2134
2116
  return {
2135
2117
  kind: "schema",
@@ -2311,6 +2293,15 @@ function union(options, message) {
2311
2293
  }
2312
2294
  };
2313
2295
  }
2296
+ function omit(schema, keys) {
2297
+ const entries = {
2298
+ ...schema.entries
2299
+ };
2300
+ for (const key of keys) {
2301
+ delete entries[key];
2302
+ }
2303
+ return { ...schema, entries };
2304
+ }
2314
2305
  function partial(schema, keys) {
2315
2306
  const entries = {};
2316
2307
  for (const key in schema.entries) {
@@ -2352,15 +2343,15 @@ var vValidator = (target, schema, hook) => (
2352
2343
 
2353
2344
  // src-server/rpc.ts
2354
2345
  var import_plugin_core = require("@hot-updater/plugin-core");
2355
- var updateSourceSchema = object({
2346
+ var bundleSchema = object({
2356
2347
  platform: union([literal("ios"), literal("android")]),
2357
2348
  targetVersion: string(),
2358
- bundleVersion: number(),
2349
+ id: string(),
2359
2350
  forceUpdate: boolean(),
2360
2351
  enabled: boolean(),
2361
2352
  file: string(),
2362
2353
  hash: string(),
2363
- description: optional(string(), "")
2354
+ message: optional(string(), "")
2364
2355
  });
2365
2356
  var config = null;
2366
2357
  var rpc = new Hono2().get("/loadConfig", async (c) => {
@@ -2368,51 +2359,48 @@ var rpc = new Hono2().get("/loadConfig", async (c) => {
2368
2359
  return c.json(true);
2369
2360
  }).get("/isConfigLoaded", (c) => {
2370
2361
  return c.json(config !== null);
2371
- }).get("/getUpdateSources", async (c) => {
2362
+ }).get("/getBundles", async (c) => {
2372
2363
  if (!config) {
2373
2364
  config = await (0, import_plugin_core.loadConfig)();
2374
2365
  }
2375
- const deployPlugin = config?.deploy({
2366
+ const databasePlugin = config?.database({
2376
2367
  cwd: (0, import_plugin_core.getCwd)()
2377
2368
  });
2378
- const updateSources = await deployPlugin?.getUpdateSources();
2379
- return c.json(updateSources ?? []);
2369
+ const bundles = await databasePlugin?.getBundles();
2370
+ return c.json(bundles ?? []);
2380
2371
  }).post(
2381
- "/getUpdateSourceByBundleVersion",
2382
- vValidator("json", object({ bundleVersion: number() })),
2372
+ "/getBundleById",
2373
+ vValidator("json", object({ bundleId: string() })),
2383
2374
  async (c) => {
2384
- const { bundleVersion } = c.req.valid("json");
2375
+ const { bundleId } = c.req.valid("json");
2385
2376
  if (!config) {
2386
2377
  config = await (0, import_plugin_core.loadConfig)();
2387
2378
  }
2388
- const deployPlugin = config?.deploy({
2379
+ const databasePlugin = config?.database({
2389
2380
  cwd: (0, import_plugin_core.getCwd)()
2390
2381
  });
2391
- const updateSources = await deployPlugin?.getUpdateSources();
2392
- const updateSource = updateSources?.find(
2393
- (source) => source.bundleVersion === bundleVersion
2394
- );
2395
- return c.json(updateSource ?? null);
2382
+ const bundle = await databasePlugin?.getBundleById(bundleId);
2383
+ return c.json(bundle ?? null);
2396
2384
  }
2397
2385
  ).post(
2398
- "/updateUpdateSource",
2386
+ "/updateBundle",
2399
2387
  vValidator(
2400
2388
  "json",
2401
2389
  object({
2402
- targetBundleVersion: number(),
2403
- updateSource: partial(updateSourceSchema)
2390
+ targetBundleId: string(),
2391
+ bundle: partial(omit(bundleSchema, ["id"]))
2404
2392
  })
2405
2393
  ),
2406
2394
  async (c) => {
2407
- const { targetBundleVersion, updateSource } = c.req.valid("json");
2395
+ const { targetBundleId, bundle } = c.req.valid("json");
2408
2396
  if (!config) {
2409
2397
  config = await (0, import_plugin_core.loadConfig)();
2410
2398
  }
2411
- const deployPlugin = config?.deploy({
2399
+ const databasePlugin = config?.database({
2412
2400
  cwd: (0, import_plugin_core.getCwd)()
2413
2401
  });
2414
- await deployPlugin?.updateUpdateSource(targetBundleVersion, updateSource);
2415
- await deployPlugin?.commitUpdateSource();
2402
+ await databasePlugin?.updateBundle(targetBundleId, bundle);
2403
+ await databasePlugin?.commitBundle();
2416
2404
  return c.json(true);
2417
2405
  }
2418
2406
  );
package/dist/index.d.cts CHANGED
@@ -28,14 +28,14 @@ declare const app: Hono<{}, {
28
28
  $get: {
29
29
  input: {};
30
30
  output: {
31
+ id: string;
31
32
  platform: _hot_updater_utils.Platform;
32
33
  targetVersion: string;
33
- bundleVersion: number;
34
34
  forceUpdate: boolean;
35
35
  enabled: boolean;
36
36
  file: string;
37
37
  hash: string;
38
- description?: string | undefined;
38
+ message?: string | undefined;
39
39
  }[];
40
40
  outputFormat: "json";
41
41
  status: hono_utils_http_status.StatusCode;
@@ -44,18 +44,18 @@ declare const app: Hono<{}, {
44
44
  $post: {
45
45
  input: {
46
46
  json: {
47
- bundleVersion: number;
47
+ bundleId: string;
48
48
  };
49
49
  };
50
50
  output: {
51
+ id: string;
51
52
  platform: _hot_updater_utils.Platform;
52
53
  targetVersion: string;
53
- bundleVersion: number;
54
54
  forceUpdate: boolean;
55
55
  enabled: boolean;
56
56
  file: string;
57
57
  hash: string;
58
- description?: string | undefined;
58
+ message?: string | undefined;
59
59
  } | null;
60
60
  outputFormat: "json";
61
61
  status: hono_utils_http_status.StatusCode;
@@ -64,17 +64,16 @@ declare const app: Hono<{}, {
64
64
  $post: {
65
65
  input: {
66
66
  json: {
67
- updateSource: {
67
+ bundle: {
68
68
  platform?: "ios" | "android" | undefined;
69
69
  targetVersion?: string | undefined;
70
- bundleVersion?: number | undefined;
71
70
  forceUpdate?: boolean | undefined;
72
71
  enabled?: boolean | undefined;
73
72
  file?: string | undefined;
74
73
  hash?: string | undefined;
75
- description?: string | undefined;
74
+ message?: string | undefined;
76
75
  };
77
- targetBundleVersion: number;
76
+ targetBundleId: string;
78
77
  };
79
78
  };
80
79
  output: true;
package/dist/index.d.ts CHANGED
@@ -28,14 +28,14 @@ declare const app: Hono<{}, {
28
28
  $get: {
29
29
  input: {};
30
30
  output: {
31
+ id: string;
31
32
  platform: _hot_updater_utils.Platform;
32
33
  targetVersion: string;
33
- bundleVersion: number;
34
34
  forceUpdate: boolean;
35
35
  enabled: boolean;
36
36
  file: string;
37
37
  hash: string;
38
- description?: string | undefined;
38
+ message?: string | undefined;
39
39
  }[];
40
40
  outputFormat: "json";
41
41
  status: hono_utils_http_status.StatusCode;
@@ -44,18 +44,18 @@ declare const app: Hono<{}, {
44
44
  $post: {
45
45
  input: {
46
46
  json: {
47
- bundleVersion: number;
47
+ bundleId: string;
48
48
  };
49
49
  };
50
50
  output: {
51
+ id: string;
51
52
  platform: _hot_updater_utils.Platform;
52
53
  targetVersion: string;
53
- bundleVersion: number;
54
54
  forceUpdate: boolean;
55
55
  enabled: boolean;
56
56
  file: string;
57
57
  hash: string;
58
- description?: string | undefined;
58
+ message?: string | undefined;
59
59
  } | null;
60
60
  outputFormat: "json";
61
61
  status: hono_utils_http_status.StatusCode;
@@ -64,17 +64,16 @@ declare const app: Hono<{}, {
64
64
  $post: {
65
65
  input: {
66
66
  json: {
67
- updateSource: {
67
+ bundle: {
68
68
  platform?: "ios" | "android" | undefined;
69
69
  targetVersion?: string | undefined;
70
- bundleVersion?: number | undefined;
71
70
  forceUpdate?: boolean | undefined;
72
71
  enabled?: boolean | undefined;
73
72
  file?: string | undefined;
74
73
  hash?: string | undefined;
75
- description?: string | undefined;
74
+ message?: string | undefined;
76
75
  };
77
- targetBundleVersion: number;
76
+ targetBundleId: string;
78
77
  };
79
78
  };
80
79
  output: true;
package/dist/index.html CHANGED
@@ -1 +1 @@
1
- <!doctype html><html><head><title>Rsbuild App</title><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><script defer src="/static/js/447.2f2dc973.js"></script><script defer src="/static/js/index.721b53bc.js"></script><link href="/static/css/index.d6ce6c3e.css" rel="stylesheet"></head><body><div id="root"></div></body></html>
1
+ <!doctype html><html><head><link rel="icon" href="/favicon.ico"><title>Hot Updater Console</title><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><script defer src="/static/js/85.cfaeff33.js"></script><script defer src="/static/js/index.566f7a26.js"></script><link href="/static/css/index.8b7116d7.css" rel="stylesheet"></head><body><div id="root"></div></body></html>
package/dist/index.js CHANGED
@@ -9,7 +9,7 @@ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read fr
9
9
  var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
10
10
  var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
11
11
 
12
- // ../../node_modules/.pnpm/tsup@8.3.0_@swc+core@1.7.42_@swc+helpers@0.5.13__jiti@1.21.6_postcss@8.4.47_typescript@5.6.2_yaml@2.4.5/node_modules/tsup/assets/esm_shims.js
12
+ // ../../node_modules/.pnpm/tsup@8.3.0_@swc+core@1.7.42_@swc+helpers@0.5.15__jiti@1.21.6_postcss@8.4.47_typescript@5.6.2_yaml@2.4.5/node_modules/tsup/assets/esm_shims.js
13
13
  import { fileURLToPath } from "url";
14
14
  import path from "path";
15
15
  var getFilename = () => fileURLToPath(import.meta.url);
@@ -2087,24 +2087,6 @@ function literal(literal_, message) {
2087
2087
  }
2088
2088
  };
2089
2089
  }
2090
- function number(message) {
2091
- return {
2092
- kind: "schema",
2093
- type: "number",
2094
- reference: number,
2095
- expects: "number",
2096
- async: false,
2097
- message,
2098
- _run(dataset, config2) {
2099
- if (typeof dataset.value === "number" && !isNaN(dataset.value)) {
2100
- dataset.typed = true;
2101
- } else {
2102
- _addIssue(this, "type", dataset, config2);
2103
- }
2104
- return dataset;
2105
- }
2106
- };
2107
- }
2108
2090
  function object(entries, message) {
2109
2091
  return {
2110
2092
  kind: "schema",
@@ -2286,6 +2268,15 @@ function union(options, message) {
2286
2268
  }
2287
2269
  };
2288
2270
  }
2271
+ function omit(schema, keys) {
2272
+ const entries = {
2273
+ ...schema.entries
2274
+ };
2275
+ for (const key of keys) {
2276
+ delete entries[key];
2277
+ }
2278
+ return { ...schema, entries };
2279
+ }
2289
2280
  function partial(schema, keys) {
2290
2281
  const entries = {};
2291
2282
  for (const key in schema.entries) {
@@ -2330,15 +2321,15 @@ import {
2330
2321
  getCwd,
2331
2322
  loadConfig
2332
2323
  } from "@hot-updater/plugin-core";
2333
- var updateSourceSchema = object({
2324
+ var bundleSchema = object({
2334
2325
  platform: union([literal("ios"), literal("android")]),
2335
2326
  targetVersion: string(),
2336
- bundleVersion: number(),
2327
+ id: string(),
2337
2328
  forceUpdate: boolean(),
2338
2329
  enabled: boolean(),
2339
2330
  file: string(),
2340
2331
  hash: string(),
2341
- description: optional(string(), "")
2332
+ message: optional(string(), "")
2342
2333
  });
2343
2334
  var config = null;
2344
2335
  var rpc = new Hono2().get("/loadConfig", async (c) => {
@@ -2346,51 +2337,48 @@ var rpc = new Hono2().get("/loadConfig", async (c) => {
2346
2337
  return c.json(true);
2347
2338
  }).get("/isConfigLoaded", (c) => {
2348
2339
  return c.json(config !== null);
2349
- }).get("/getUpdateSources", async (c) => {
2340
+ }).get("/getBundles", async (c) => {
2350
2341
  if (!config) {
2351
2342
  config = await loadConfig();
2352
2343
  }
2353
- const deployPlugin = config?.deploy({
2344
+ const databasePlugin = config?.database({
2354
2345
  cwd: getCwd()
2355
2346
  });
2356
- const updateSources = await deployPlugin?.getUpdateSources();
2357
- return c.json(updateSources ?? []);
2347
+ const bundles = await databasePlugin?.getBundles();
2348
+ return c.json(bundles ?? []);
2358
2349
  }).post(
2359
- "/getUpdateSourceByBundleVersion",
2360
- vValidator("json", object({ bundleVersion: number() })),
2350
+ "/getBundleById",
2351
+ vValidator("json", object({ bundleId: string() })),
2361
2352
  async (c) => {
2362
- const { bundleVersion } = c.req.valid("json");
2353
+ const { bundleId } = c.req.valid("json");
2363
2354
  if (!config) {
2364
2355
  config = await loadConfig();
2365
2356
  }
2366
- const deployPlugin = config?.deploy({
2357
+ const databasePlugin = config?.database({
2367
2358
  cwd: getCwd()
2368
2359
  });
2369
- const updateSources = await deployPlugin?.getUpdateSources();
2370
- const updateSource = updateSources?.find(
2371
- (source) => source.bundleVersion === bundleVersion
2372
- );
2373
- return c.json(updateSource ?? null);
2360
+ const bundle = await databasePlugin?.getBundleById(bundleId);
2361
+ return c.json(bundle ?? null);
2374
2362
  }
2375
2363
  ).post(
2376
- "/updateUpdateSource",
2364
+ "/updateBundle",
2377
2365
  vValidator(
2378
2366
  "json",
2379
2367
  object({
2380
- targetBundleVersion: number(),
2381
- updateSource: partial(updateSourceSchema)
2368
+ targetBundleId: string(),
2369
+ bundle: partial(omit(bundleSchema, ["id"]))
2382
2370
  })
2383
2371
  ),
2384
2372
  async (c) => {
2385
- const { targetBundleVersion, updateSource } = c.req.valid("json");
2373
+ const { targetBundleId, bundle } = c.req.valid("json");
2386
2374
  if (!config) {
2387
2375
  config = await loadConfig();
2388
2376
  }
2389
- const deployPlugin = config?.deploy({
2377
+ const databasePlugin = config?.database({
2390
2378
  cwd: getCwd()
2391
2379
  });
2392
- await deployPlugin?.updateUpdateSource(targetBundleVersion, updateSource);
2393
- await deployPlugin?.commitUpdateSource();
2380
+ await databasePlugin?.updateBundle(targetBundleId, bundle);
2381
+ await databasePlugin?.commitBundle();
2394
2382
  return c.json(true);
2395
2383
  }
2396
2384
  );
@@ -0,0 +1 @@
1
+ @import "https://fonts.googleapis.com/css2?family=Lato:ital,wght@0,100;0,300;0,400;0,700;0,900;1,100;1,300;1,400;1,700;1,900&display=swap";*,:before,:after{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border:0 solid #e5e7eb}:before,:after{--tw-content:""}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{line-height:inherit;margin:0}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-feature-settings:normal;font-variation-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-feature-settings:inherit;font-variation-settings:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button{-webkit-appearance:button;background-color:#0000;background-image:none}input:where([type=button]){-webkit-appearance:button;background-color:#0000;background-image:none}input:where([type=reset]){-webkit-appearance:button;background-color:#0000;background-image:none}input:where([type=submit]){-webkit-appearance:button;background-color:#0000;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{margin:0;padding:0;list-style:none}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder{opacity:1;color:#9ca3af}textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background:0 0% 100%;--foreground:240 10% 3.9%;--muted:240 4.8% 95.9%;--muted-foreground:240 3.8% 46.1%;--popover:0 0% 100%;--popover-foreground:240 10% 3.9%;--border:240 5.9% 90%;--input:240 5.9% 90%;--card:0 0% 100%;--card-foreground:240 10% 3.9%;--primary:240 5.9% 10%;--primary-foreground:0 0% 98%;--secondary:240 4.8% 95.9%;--secondary-foreground:240 5.9% 10%;--accent:240 4.8% 95.9%;--accent-foreground:240 5.9% 10%;--destructive:0 84.2% 60.2%;--destructive-foreground:0 0% 98%;--info:204 94% 94%;--info-foreground:199 89% 48%;--success:149 80% 90%;--success-foreground:160 84% 39%;--warning:48 96% 89%;--warning-foreground:25 95% 53%;--error:0 93% 94%;--error-foreground:0 84% 60%;--ring:240 5.9% 10%;--radius:.5rem}.dark,[data-kb-theme=dark]{--background:240 10% 3.9%;--foreground:0 0% 98%;--muted:240 3.7% 15.9%;--muted-foreground:240 5% 64.9%;--accent:240 3.7% 15.9%;--accent-foreground:0 0% 98%;--popover:240 10% 3.9%;--popover-foreground:0 0% 98%;--border:240 3.7% 15.9%;--input:240 3.7% 15.9%;--card:240 10% 3.9%;--card-foreground:0 0% 98%;--primary:0 0% 98%;--primary-foreground:240 5.9% 10%;--secondary:240 3.7% 15.9%;--secondary-foreground:0 0% 98%;--destructive:0 62.8% 30.6%;--destructive-foreground:0 0% 98%;--info:204 94% 94%;--info-foreground:199 89% 48%;--success:149 80% 90%;--success-foreground:160 84% 39%;--warning:48 96% 89%;--warning-foreground:25 95% 53%;--error:0 93% 94%;--error-foreground:0 84% 60%;--ring:240 4.9% 83.9%;--radius:.5rem}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground));font-feature-settings:"rlig" 1,"calt" 1}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.pointer-events-none{pointer-events:none}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{top:0;bottom:0;left:0;right:0}.inset-x-0{left:0;right:0}.inset-y-0{top:0;bottom:0}.bottom-0{bottom:0}.left-0{left:0}.right-0{right:0}.right-4{right:1rem}.top-0{top:0}.top-4{top:1rem}.top-px{top:1px}.z-50{z-index:50}.z-\[1000\]{z-index:1000}.mb-4{margin-bottom:1rem}.ml-1{margin-left:.25rem}.mt-2\.5{margin-top:.625rem}.mt-4{margin-top:1rem}.mt-\[2px\]{margin-top:2px}.box-border{box-sizing:border-box}.block{display:block}.flex{display:flex}.inline-flex{display:inline-flex}.\!table{display:table!important}.table{display:table}.grid{display:grid}.hidden{display:none}.size-10{width:2.5rem;height:2.5rem}.size-3{width:.75rem;height:.75rem}.size-4{width:1rem;height:1rem}.size-5{width:1.25rem;height:1.25rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-24{height:6rem}.h-32{height:8rem}.h-6{height:1.5rem}.h-9{height:2.25rem}.h-\[var\(--kb-navigation-menu-viewport-height\)\]{height:var(--kb-navigation-menu-viewport-height)}.h-full{height:100%}.max-h-screen{max-height:100vh}.min-h-\[80px\]{min-height:80px}.w-11{width:2.75rem}.w-12{width:3rem}.w-3\/4{width:75%}.w-32{width:8rem}.w-\[var\(--kb-navigation-menu-viewport-width\)\]{width:var(--kb-navigation-menu-viewport-width)}.w-full{width:100%}.w-max{width:max-content}.max-w-sm{max-width:24rem}.flex-1{flex:1}.shrink-0{flex-shrink:0}.caption-bottom{caption-side:bottom}.origin-\[var\(--kb-menu-content-transform-origin\)\]{transform-origin:var(--kb-menu-content-transform-origin)}.translate-x-0{--tw-translate-x:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}@keyframes content-hide{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.96)}}.animate-content-hide{animation:.2s ease-out content-hide}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;user-select:none}.list-none{list-style-type:none}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*calc(1 - var(--tw-space-x-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem*calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem*var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem*calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.space-y-2\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.625rem*calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.625rem*var(--tw-space-y-reverse))}.overflow-auto{overflow:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-clip{overflow-x:clip}.overflow-y-visible{overflow-y:visible}.whitespace-nowrap{white-space:nowrap}.rounded-full{border-radius:9999px}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-input{border-color:hsl(var(--input))}.border-transparent{border-color:#0000}.bg-background{background-color:hsl(var(--background))}.bg-black\/80{background-color:#000c}.bg-destructive{background-color:hsl(var(--destructive))}.bg-input{background-color:hsl(var(--input))}.bg-popover{background-color:hsl(var(--popover))}.bg-primary{background-color:hsl(var(--primary))}.bg-secondary{background-color:hsl(var(--secondary))}.bg-transparent{background-color:#0000}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.object-contain{-o-object-fit:contain;object-fit:contain}.p-1{padding:.25rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-8{padding-left:2rem;padding-right:2rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.pl-2\.5{padding-left:.625rem}.text-left{text-align:left}.text-center{text-align:center}.align-middle{vertical-align:middle}.text-2xl{font-size:1.5rem;line-height:2rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-light{font-weight:300}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.leading-none{line-height:1}.leading-snug{line-height:1.375}.text-destructive{color:hsl(var(--destructive))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-foreground{color:hsl(var(--foreground))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.no-underline{text-decoration-line:none}.underline-offset-4{text-underline-offset:4px}.opacity-0{opacity:0}.opacity-70{opacity:.7}.shadow-lg{--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline-offset:2px;outline:2px solid #0000}.outline{outline-style:solid}.ring-0{--tw-ring-offset-shadow:var(--tw-ring-inset)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-offset-background{--tw-ring-offset-color:hsl(var(--background))}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter,-webkit-backdrop-filter,backdrop-filter,-webkit-backdrop-filter;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-\[color\,background-color\,box-shadow\]{transition-property:color,background-color,box-shadow;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-\[width\,height\]{transition-property:width,height;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-opacity{transition-property:opacity;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-transform{transition-property:transform;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-200{transition-duration:.2s}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0))}}.duration-200{animation-duration:.2s}.ease-in{animation-timing-function:cubic-bezier(.4,0,1,1)}.ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}@media (max-width:640px){.container{padding-left:1rem;padding-right:1rem}}::-webkit-scrollbar{width:16px}::-webkit-scrollbar-thumb{background-clip:content-box;background-color:hsl(var(--accent));border:4px solid #0000;border-radius:9999px}::-webkit-scrollbar-corner{display:none}body{font-family:Lato,sans-serif}.file\:border-0::-webkit-file-upload-button{border-width:0}.file\:border-0::file-selector-button{border-width:0}.file\:bg-transparent::-webkit-file-upload-button{background-color:#0000}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:text-sm::-webkit-file-upload-button{font-size:.875rem;line-height:1.25rem}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\:font-medium::-webkit-file-upload-button{font-weight:500}.file\:font-medium::file-selector-button{font-weight:500}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive)/.9)}.hover\:bg-muted\/50:hover{background-color:hsl(var(--muted)/.5)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary)/.9)}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary)/.8)}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.focus\:bg-accent:focus{background-color:hsl(var(--accent))}.focus\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.focus\:outline-none:focus{outline-offset:2px;outline:2px solid #0000}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-ring:focus{--tw-ring-color:hsl(var(--ring))}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px}.focus-visible\:outline-none:focus-visible{outline-offset:2px;outline:2px solid #0000}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color:hsl(var(--ring))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.group.toaster .group-\[\.toaster\]\:border-border{border-color:hsl(var(--border))}.group.toast .group-\[\.toast\]\:bg-muted{background-color:hsl(var(--muted))}.group.toast .group-\[\.toast\]\:bg-primary{background-color:hsl(var(--primary))}.group.toaster .group-\[\.toaster\]\:bg-background{background-color:hsl(var(--background))}.group.toast .group-\[\.toast\]\:text-muted-foreground{color:hsl(var(--muted-foreground))}.group.toast .group-\[\.toast\]\:text-primary-foreground{color:hsl(var(--primary-foreground))}.group.toaster .group-\[\.toaster\]\:text-foreground{color:hsl(var(--foreground))}.group.toaster .group-\[\.toaster\]\:shadow-lg{--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:opacity-70{opacity:.7}.data-\[expanded\]\:pointer-events-auto[data-expanded]{pointer-events:auto}.data-\[checked\]\:translate-x-5[data-checked]{--tw-translate-x:1.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}@keyframes content-show{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:scale(1)}}.data-\[expanded\]\:animate-content-show[data-expanded]{animation:.2s ease-out content-show}.data-\[disabled\]\:cursor-not-allowed[data-disabled]{cursor:not-allowed}.data-\[orientation\=vertical\]\:flex-col[data-orientation=vertical]{flex-direction:column}.data-\[orientation\=vertical\]\:overflow-y-clip[data-orientation=vertical]{overflow-y:clip}.data-\[orientation\=vertical\]\:overflow-x-visible[data-orientation=vertical]{overflow-x:visible}.data-\[expanded\]\:rounded-md[data-expanded]{border-radius:calc(var(--radius) - 2px)}.data-\[current\]\:border[data-current]{border-width:1px}.data-\[active\]\:bg-accent\/50[data-active]{background-color:hsl(var(--accent)/.5)}.data-\[checked\]\:bg-primary[data-checked]{background-color:hsl(var(--primary))}.data-\[expanded\]\:bg-accent\/50[data-expanded]{background-color:hsl(var(--accent)/.5)}.data-\[state\=open\]\:bg-secondary[data-state=open]{background-color:hsl(var(--secondary))}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:hsl(var(--muted))}.data-\[invalid\]\:text-destructive[data-invalid]{color:hsl(var(--destructive))}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[disabled\]\:opacity-70[data-disabled]{opacity:.7}.data-\[expanded\]\:opacity-100[data-expanded]{opacity:1}.data-\[closed\=\]\:duration-300[data-closed=""]{transition-duration:.3s}.data-\[expanded\=\]\:duration-500[data-expanded=""]{transition-duration:.5s}.data-\[expanded\]\:ease-out[data-expanded]{transition-timing-function:cubic-bezier(0,0,.2,1)}.data-\[expanded\=\]\:animate-in[data-expanded=""],.data-\[motion\^\=from-\]\:animate-in[data-motion^=from-]{--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial;animation-name:enter;animation-duration:.15s}.data-\[closed\=\]\:animate-out[data-closed=""],.data-\[motion\^\=to-\]\:animate-out[data-motion^=to-]{--tw-exit-opacity:initial;--tw-exit-scale:initial;--tw-exit-rotate:initial;--tw-exit-translate-x:initial;--tw-exit-translate-y:initial;animation-name:exit;animation-duration:.15s}.data-\[closed\=\]\:fade-out-0[data-closed=""]{--tw-exit-opacity:0}.data-\[expanded\=\]\:fade-in-0[data-expanded=""],.data-\[motion\^\=from-\]\:fade-in[data-motion^=from-]{--tw-enter-opacity:0}.data-\[motion\^\=to-\]\:fade-out[data-motion^=to-]{--tw-exit-opacity:0}.data-\[closed\=\]\:slide-out-to-bottom[data-closed=""]{--tw-exit-translate-y:100%}.data-\[closed\=\]\:slide-out-to-left[data-closed=""]{--tw-exit-translate-x:-100%}.data-\[closed\=\]\:slide-out-to-right[data-closed=""]{--tw-exit-translate-x:100%}.data-\[closed\=\]\:slide-out-to-top[data-closed=""]{--tw-exit-translate-y:-100%}.data-\[expanded\=\]\:slide-in-from-bottom[data-expanded=""]{--tw-enter-translate-y:100%}.data-\[expanded\=\]\:slide-in-from-right[data-expanded=""]{--tw-enter-translate-x:100%}.data-\[expanded\=\]\:slide-in-from-top[data-expanded=""]{--tw-enter-translate-y:-100%}.data-\[expanded\]\:slide-in-from-left[data-expanded]{--tw-enter-translate-x:-100%}.data-\[orientation\=horizontal\]\:data-\[motion\=from-end\]\:slide-in-from-right-52[data-motion=from-end][data-orientation=horizontal]{--tw-enter-translate-x:13rem}.data-\[orientation\=horizontal\]\:data-\[motion\=from-start\]\:slide-in-from-left-52[data-motion=from-start][data-orientation=horizontal]{--tw-enter-translate-x:-13rem}.data-\[orientation\=horizontal\]\:data-\[motion\=to-end\]\:slide-out-to-right-52[data-motion=to-end][data-orientation=horizontal]{--tw-exit-translate-x:13rem}.data-\[orientation\=horizontal\]\:data-\[motion\=to-start\]\:slide-out-to-left-52[data-motion=to-start][data-orientation=horizontal]{--tw-exit-translate-x:-13rem}.data-\[orientation\=vertical\]\:data-\[motion\=from-end\]\:slide-in-from-bottom-52[data-motion=from-end][data-orientation=vertical]{--tw-enter-translate-y:13rem}.data-\[orientation\=vertical\]\:data-\[motion\=from-start\]\:slide-in-from-top-52[data-motion=from-start][data-orientation=vertical]{--tw-enter-translate-y:-13rem}.data-\[orientation\=vertical\]\:data-\[motion\=to-end\]\:slide-out-to-bottom-52[data-motion=to-end][data-orientation=vertical],.data-\[orientation\=vertical\]\:data-\[motion\=to-start\]\:slide-out-to-bottom-52[data-motion=to-start][data-orientation=vertical]{--tw-exit-translate-y:13rem}.data-\[closed\=\]\:duration-300[data-closed=""]{animation-duration:.3s}.data-\[expanded\=\]\:duration-500[data-expanded=""]{animation-duration:.5s}.data-\[expanded\]\:ease-out[data-expanded]{animation-timing-function:cubic-bezier(0,0,.2,1)}.group\/trigger[data-expanded] .group-data-\[expanded\]\/trigger\:rotate-180{--tw-rotate:180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.group\/menu[data-orientation=vertical] .group-data-\[orientation\=vertical\]\/menu\:-rotate-90{--tw-rotate:-90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.group\/menu[data-orientation=vertical] .group\/trigger[data-expanded] .group-data-\[orientation\=vertical\]\/menu\:group-data-\[expanded\]\/trigger\:rotate-90{--tw-rotate:90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}@media (min-width:640px){.sm\:max-w-sm{max-width:24rem}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}.sm\:space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*calc(1 - var(--tw-space-x-reverse)))}.sm\:text-left{text-align:left}}@media (min-width:768px){.md\:h-48{height:12rem}.md\:w-48{width:12rem}}.\[\&\:focus-visible\+div\]\:outline-none:focus-visible+div{outline-offset:2px;outline:2px solid #0000}.\[\&\:focus-visible\+div\]\:ring-2:focus-visible+div{--tw-ring-offset-shadow:var(--tw-ring-inset)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.\[\&\:focus-visible\+div\]\:ring-ring:focus-visible+div{--tw-ring-color:hsl(var(--ring))}.\[\&\:focus-visible\+div\]\:ring-offset-2:focus-visible+div{--tw-ring-offset-width:2px}.\[\&\:focus-visible\+div\]\:ring-offset-background:focus-visible+div{--tw-ring-offset-color:hsl(var(--background))}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:0}.\[\&\>\*\]\:flex>*{display:flex}.\[\&\>\*\]\:flex-row>*{flex-direction:row}.\[\&\>\*\]\:items-center>*{align-items:center}.\[\&\>\*\]\:gap-1>*{gap:.25rem}.\[\&\>li\]\:w-full>li{width:100%}.\[\&\>ul\]\:justify-center>ul{justify-content:center}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-width:0}.\[\&_tr\]\:border-b tr{border-bottom-width:1px}