astrogators-shared-ui 0.4.0 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  var ue = Object.defineProperty;
2
- var he = (e, t, s) => t in e ? ue(e, t, { enumerable: !0, configurable: !0, writable: !0, value: s }) : e[t] = s;
3
- var R = (e, t, s) => he(e, typeof t != "symbol" ? t + "" : t, s);
2
+ var he = (e, s, t) => s in e ? ue(e, s, { enumerable: !0, configurable: !0, writable: !0, value: t }) : e[s] = t;
3
+ var R = (e, s, t) => he(e, typeof s != "symbol" ? s + "" : s, t);
4
4
  import { jsx as r, jsxs as m, Fragment as ge } from "react/jsx-runtime";
5
- import ne, { createContext as fe, useState as b, useEffect as U, useCallback as S, useContext as pe } from "react";
5
+ import ae, { createContext as fe, useState as b, useEffect as j, useCallback as S, useContext as pe } from "react";
6
6
  const ye = "_container_u3o0e_1", ve = "_padding_u3o0e_7", X = {
7
7
  container: ye,
8
8
  padding: ve,
@@ -11,15 +11,15 @@ const ye = "_container_u3o0e_1", ve = "_padding_u3o0e_7", X = {
11
11
  "maxWidth-lg": "_maxWidth-lg_u3o0e_20",
12
12
  "maxWidth-xl": "_maxWidth-xl_u3o0e_24",
13
13
  "maxWidth-full": "_maxWidth-full_u3o0e_28"
14
- }, ys = ({
14
+ }, vs = ({
15
15
  children: e,
16
- maxWidth: t = "xl",
17
- padding: s = !0,
16
+ maxWidth: s = "xl",
17
+ padding: t = !0,
18
18
  className: o = ""
19
19
  }) => /* @__PURE__ */ r(
20
20
  "div",
21
21
  {
22
- className: `${X.container} ${X[`maxWidth-${t}`]} ${s ? X.padding : ""} ${o}`,
22
+ className: `${X.container} ${X[`maxWidth-${s}`]} ${t ? X.padding : ""} ${o}`,
23
23
  children: e
24
24
  }
25
25
  ), $e = "_topBar_10g3c_1", be = "_content_10g3c_13", we = "_left_10g3c_23", Ne = "_right_10g3c_30", Ae = "_logo_10g3c_36", P = {
@@ -28,24 +28,24 @@ const ye = "_container_u3o0e_1", ve = "_padding_u3o0e_7", X = {
28
28
  left: we,
29
29
  right: Ne,
30
30
  logo: Ae
31
- }, vs = ({
31
+ }, $s = ({
32
32
  logo: e,
33
- leftContent: t,
34
- rightContent: s,
33
+ leftContent: s,
34
+ rightContent: t,
35
35
  className: o = ""
36
36
  }) => /* @__PURE__ */ r("header", { className: `${P.topBar} ${o}`, children: /* @__PURE__ */ m("div", { className: P.content, children: [
37
37
  /* @__PURE__ */ m("div", { className: P.left, children: [
38
38
  e && /* @__PURE__ */ r("div", { className: P.logo, children: e }),
39
- t
39
+ s
40
40
  ] }),
41
- /* @__PURE__ */ r("div", { className: P.right, children: s })
41
+ /* @__PURE__ */ r("div", { className: P.right, children: t })
42
42
  ] }) }), Se = "_footer_zjuj8_1", xe = "_content_zjuj8_7", Te = "_defaultContent_zjuj8_13", Ce = "_copyright_zjuj8_21", ke = "_disclaimer_zjuj8_26", B = {
43
43
  footer: Se,
44
44
  content: xe,
45
45
  defaultContent: Te,
46
46
  copyright: Ce,
47
47
  disclaimer: ke
48
- }, $s = ({ children: e, className: t = "" }) => /* @__PURE__ */ r("footer", { className: `${B.footer} ${t}`, children: /* @__PURE__ */ r("div", { className: B.content, children: e || /* @__PURE__ */ m("div", { className: B.defaultContent, children: [
48
+ }, bs = ({ children: e, className: s = "" }) => /* @__PURE__ */ r("footer", { className: `${B.footer} ${s}`, children: /* @__PURE__ */ r("div", { className: B.content, children: e || /* @__PURE__ */ m("div", { className: B.defaultContent, children: [
49
49
  /* @__PURE__ */ m("p", { className: B.copyright, children: [
50
50
  "© ",
51
51
  (/* @__PURE__ */ new Date()).getFullYear(),
@@ -68,10 +68,10 @@ const ye = "_container_u3o0e_1", ve = "_padding_u3o0e_7", X = {
68
68
  spinner: Oe,
69
69
  spin: ze,
70
70
  loadingText: Me
71
- }, z = ({
71
+ }, M = ({
72
72
  children: e,
73
- variant: t = "primary",
74
- size: s = "md",
73
+ variant: s = "primary",
74
+ size: t = "md",
75
75
  fullWidth: o = !1,
76
76
  loading: _ = !1,
77
77
  disabled: g = !1,
@@ -80,7 +80,7 @@ const ye = "_container_u3o0e_1", ve = "_padding_u3o0e_7", X = {
80
80
  }) => /* @__PURE__ */ r(
81
81
  "button",
82
82
  {
83
- className: `${x.button} ${x[t]} ${x[s]} ${o ? x.fullWidth : ""} ${_ ? x.loading : ""} ${c}`,
83
+ className: `${x.button} ${x[s]} ${x[t]} ${o ? x.fullWidth : ""} ${_ ? x.loading : ""} ${c}`,
84
84
  disabled: g || _,
85
85
  ...l,
86
86
  children: _ ? /* @__PURE__ */ m("span", { className: x.loadingSpinner, children: [
@@ -97,17 +97,17 @@ const ye = "_container_u3o0e_1", ve = "_padding_u3o0e_7", X = {
97
97
  error: Ve,
98
98
  errorText: Qe,
99
99
  helperText: Xe
100
- }, ae = ne.forwardRef(
100
+ }, ne = ae.forwardRef(
101
101
  ({
102
102
  label: e,
103
- error: t,
104
- helperText: s,
103
+ error: s,
104
+ helperText: t,
105
105
  fullWidth: o = !1,
106
106
  className: _ = "",
107
107
  id: g,
108
108
  ...c
109
109
  }, l) => {
110
- const i = g || `input-${Math.random().toString(36).substr(2, 9)}`, h = !!t;
110
+ const i = g || `input-${Math.random().toString(36).substr(2, 9)}`, h = !!s;
111
111
  return /* @__PURE__ */ m("div", { className: `${T.inputWrapper} ${o ? T.fullWidth : ""} ${_}`, children: [
112
112
  e && /* @__PURE__ */ m("label", { htmlFor: i, className: T.label, children: [
113
113
  e,
@@ -122,28 +122,28 @@ const ye = "_container_u3o0e_1", ve = "_padding_u3o0e_7", X = {
122
122
  ...c
123
123
  }
124
124
  ),
125
- t && /* @__PURE__ */ r("span", { className: T.errorText, children: t }),
126
- s && !t && /* @__PURE__ */ r("span", { className: T.helperText, children: s })
125
+ s && /* @__PURE__ */ r("span", { className: T.errorText, children: s }),
126
+ t && !s && /* @__PURE__ */ r("span", { className: T.helperText, children: t })
127
127
  ] });
128
128
  }
129
129
  );
130
- ae.displayName = "Input";
131
- const Ze = "_selectWrapper_ir4bq_1", et = "_fullWidth_ir4bq_7", tt = "_label_ir4bq_11", st = "_required_ir4bq_20", ot = "_selectContainer_ir4bq_24", rt = "_select_ir4bq_1", nt = "_error_ir4bq_63", at = "_arrow_ir4bq_71", lt = "_errorText_ir4bq_81", ct = "_helperText_ir4bq_86", w = {
130
+ ne.displayName = "Input";
131
+ const Ze = "_selectWrapper_ir4bq_1", et = "_fullWidth_ir4bq_7", tt = "_label_ir4bq_11", st = "_required_ir4bq_20", ot = "_selectContainer_ir4bq_24", rt = "_select_ir4bq_1", at = "_error_ir4bq_63", nt = "_arrow_ir4bq_71", lt = "_errorText_ir4bq_81", ct = "_helperText_ir4bq_86", w = {
132
132
  selectWrapper: Ze,
133
133
  fullWidth: et,
134
134
  label: tt,
135
135
  required: st,
136
136
  selectContainer: ot,
137
137
  select: rt,
138
- error: nt,
139
- arrow: at,
138
+ error: at,
139
+ arrow: nt,
140
140
  errorText: lt,
141
141
  helperText: ct
142
- }, le = ne.forwardRef(
142
+ }, le = ae.forwardRef(
143
143
  ({
144
144
  label: e,
145
- error: t,
146
- helperText: s,
145
+ error: s,
146
+ helperText: t,
147
147
  options: o,
148
148
  placeholder: _,
149
149
  fullWidth: g = !1,
@@ -151,7 +151,7 @@ const Ze = "_selectWrapper_ir4bq_1", et = "_fullWidth_ir4bq_7", tt = "_label_ir4
151
151
  id: l,
152
152
  ...i
153
153
  }, h) => {
154
- const p = l || `select-${Math.random().toString(36).substr(2, 9)}`, N = !!t;
154
+ const p = l || `select-${Math.random().toString(36).substr(2, 9)}`, N = !!s;
155
155
  return /* @__PURE__ */ m("div", { className: `${w.selectWrapper} ${g ? w.fullWidth : ""} ${c}`, children: [
156
156
  e && /* @__PURE__ */ m("label", { htmlFor: p, className: w.label, children: [
157
157
  e,
@@ -182,8 +182,8 @@ const Ze = "_selectWrapper_ir4bq_1", et = "_fullWidth_ir4bq_7", tt = "_label_ir4
182
182
  ),
183
183
  /* @__PURE__ */ r("span", { className: w.arrow, children: "▼" })
184
184
  ] }),
185
- t && /* @__PURE__ */ r("span", { className: w.errorText, children: t }),
186
- s && !t && /* @__PURE__ */ r("span", { className: w.helperText, children: s })
185
+ s && /* @__PURE__ */ r("span", { className: w.errorText, children: s }),
186
+ t && !s && /* @__PURE__ */ r("span", { className: w.helperText, children: t })
187
187
  ] });
188
188
  }
189
189
  );
@@ -196,45 +196,45 @@ const te = "astrogators_access_token", se = "astrogators_refresh_token", ce = ()
196
196
  localStorage.setItem(se, e);
197
197
  }, ut = () => {
198
198
  localStorage.removeItem(se);
199
- }, ie = (e, t) => {
200
- it(e), mt(t);
199
+ }, ie = (e, s) => {
200
+ it(e), mt(s);
201
201
  }, ee = () => {
202
202
  dt(), ut();
203
203
  }, ht = () => !!ce();
204
204
  class gt {
205
- constructor(t) {
205
+ constructor(s) {
206
206
  R(this, "baseURL");
207
207
  R(this, "onUnauthorized");
208
208
  R(this, "isRefreshing", !1);
209
209
  R(this, "refreshPromise", null);
210
- this.baseURL = t.baseURL, this.onUnauthorized = t.onUnauthorized;
210
+ this.baseURL = s.baseURL, this.onUnauthorized = s.onUnauthorized;
211
211
  }
212
212
  async refreshAccessToken() {
213
213
  var _;
214
- const t = _t();
215
- if (!t)
214
+ const s = _t();
215
+ if (!s)
216
216
  throw new Error("No refresh token available");
217
- const s = await fetch(`${this.baseURL}/api/v1/auth/refresh-token`, {
217
+ const t = await fetch(`${this.baseURL}/api/v1/auth/refresh-token`, {
218
218
  method: "POST",
219
219
  headers: {
220
220
  "Content-Type": "application/json"
221
221
  },
222
- body: JSON.stringify({ refresh_token: t })
222
+ body: JSON.stringify({ refresh_token: s })
223
223
  });
224
- if (!s.ok)
224
+ if (!t.ok)
225
225
  throw ee(), (_ = this.onUnauthorized) == null || _.call(this), new Error("Token refresh failed");
226
- const o = await s.json();
227
- return ie(o.access_token, t), o.access_token;
226
+ const o = await t.json();
227
+ return ie(o.access_token, s), o.access_token;
228
228
  }
229
- async request(t, s = {}) {
229
+ async request(s, t = {}) {
230
230
  const o = ce(), _ = {
231
231
  "Content-Type": "application/json",
232
- ...s.headers
232
+ ...t.headers
233
233
  };
234
234
  o && (_.Authorization = `Bearer ${o}`);
235
- const g = `${this.baseURL}${t}`;
235
+ const g = `${this.baseURL}${s}`;
236
236
  let c = await fetch(g, {
237
- ...s,
237
+ ...t,
238
238
  headers: _
239
239
  });
240
240
  if (c.status === 401 && o) {
@@ -244,7 +244,7 @@ class gt {
244
244
  try {
245
245
  const l = await this.refreshPromise;
246
246
  _.Authorization = `Bearer ${l}`, c = await fetch(g, {
247
- ...s,
247
+ ...t,
248
248
  headers: _
249
249
  });
250
250
  } catch {
@@ -269,221 +269,221 @@ class gt {
269
269
  }
270
270
  return c.status === 204 ? {} : c.json();
271
271
  }
272
- async get(t, s) {
273
- return this.request(t, { ...s, method: "GET" });
272
+ async get(s, t) {
273
+ return this.request(s, { ...t, method: "GET" });
274
274
  }
275
- async post(t, s, o) {
276
- return this.request(t, {
275
+ async post(s, t, o) {
276
+ return this.request(s, {
277
277
  ...o,
278
278
  method: "POST",
279
- body: s ? JSON.stringify(s) : void 0
279
+ body: t ? JSON.stringify(t) : void 0
280
280
  });
281
281
  }
282
- async put(t, s, o) {
283
- return this.request(t, {
282
+ async put(s, t, o) {
283
+ return this.request(s, {
284
284
  ...o,
285
285
  method: "PUT",
286
- body: s ? JSON.stringify(s) : void 0
286
+ body: t ? JSON.stringify(t) : void 0
287
287
  });
288
288
  }
289
- async patch(t, s, o) {
290
- return this.request(t, {
289
+ async patch(s, t, o) {
290
+ return this.request(s, {
291
291
  ...o,
292
292
  method: "PATCH",
293
- body: s ? JSON.stringify(s) : void 0
293
+ body: t ? JSON.stringify(t) : void 0
294
294
  });
295
295
  }
296
- async delete(t, s) {
297
- return this.request(t, { ...s, method: "DELETE" });
296
+ async delete(s, t) {
297
+ return this.request(s, { ...t, method: "DELETE" });
298
298
  }
299
299
  }
300
300
  let y;
301
301
  const ft = (e) => {
302
302
  y = new gt(e);
303
- }, j = "astrogators_ally_codes", H = "astrogators_selected_ally_code", A = () => {
303
+ }, F = "astrogators_ally_codes", H = "astrogators_selected_ally_code", A = () => {
304
304
  try {
305
- const e = localStorage.getItem(j);
305
+ const e = localStorage.getItem(F);
306
306
  return e ? JSON.parse(e) : [];
307
307
  } catch (e) {
308
308
  return console.error("Failed to read ally codes from localStorage:", e), [];
309
309
  }
310
310
  }, pt = (e) => {
311
311
  try {
312
- const t = A();
313
- if (t.some((o) => o.ally_code === e.ally_code))
312
+ const s = A();
313
+ if (s.some((o) => o.ally_code === e.ally_code))
314
314
  return;
315
- t.push(e), localStorage.setItem(j, JSON.stringify(t));
316
- } catch (t) {
317
- console.error("Failed to save ally code to localStorage:", t);
315
+ s.push(e), localStorage.setItem(F, JSON.stringify(s));
316
+ } catch (s) {
317
+ console.error("Failed to save ally code to localStorage:", s);
318
318
  }
319
319
  }, yt = (e) => {
320
320
  try {
321
- const s = A().filter((o) => o.ally_code !== e);
322
- localStorage.setItem(j, JSON.stringify(s));
323
- } catch (t) {
324
- console.error("Failed to remove ally code from localStorage:", t);
321
+ const t = A().filter((o) => o.ally_code !== e);
322
+ localStorage.setItem(F, JSON.stringify(t));
323
+ } catch (s) {
324
+ console.error("Failed to remove ally code from localStorage:", s);
325
325
  }
326
326
  }, re = (e) => {
327
327
  try {
328
- const s = A().map(
328
+ const t = A().map(
329
329
  (o) => o.ally_code === e ? { ...o, last_used_at: (/* @__PURE__ */ new Date()).toISOString() } : o
330
330
  );
331
- localStorage.setItem(j, JSON.stringify(s));
332
- } catch (t) {
333
- console.error("Failed to update ally code last used:", t);
331
+ localStorage.setItem(F, JSON.stringify(t));
332
+ } catch (s) {
333
+ console.error("Failed to update ally code last used:", s);
334
334
  }
335
335
  }, vt = () => localStorage.getItem(H), $t = (e) => {
336
336
  e ? localStorage.setItem(H, e) : localStorage.removeItem(H);
337
337
  }, bt = () => {
338
- localStorage.removeItem(j), localStorage.removeItem(H);
339
- }, de = fe(void 0), bs = ({ children: e, apiBaseUrl: t }) => {
340
- const [s, o] = b(null), [_, g] = b(!0), [c, l] = b([]), [i, h] = b(null), [p, N] = b(!1), [f, k] = b({
338
+ localStorage.removeItem(F), localStorage.removeItem(H);
339
+ }, de = fe(void 0), ws = ({ children: e, apiBaseUrl: s }) => {
340
+ const [t, o] = b(null), [_, g] = b(!0), [c, l] = b([]), [i, h] = b(null), [p, N] = b(!1), [f, k] = b({
341
341
  show: !1,
342
342
  localStorageCodes: []
343
343
  });
344
- U(() => {
344
+ j(() => {
345
345
  ft({
346
- baseURL: t
346
+ baseURL: s
347
347
  });
348
- }, [t]);
348
+ }, [s]);
349
349
  const W = S(async () => {
350
350
  if (!ht()) {
351
351
  o(null), g(!1);
352
352
  return;
353
353
  }
354
354
  try {
355
- const n = await y.get("/api/v1/users/me");
356
- o(n);
357
- } catch (n) {
358
- console.error("Failed to fetch user:", n), o(null), ee();
355
+ const a = await y.get("/api/v1/users/me");
356
+ o(a);
357
+ } catch (a) {
358
+ console.error("Failed to fetch user:", a), o(null), ee();
359
359
  } finally {
360
360
  g(!1);
361
361
  }
362
362
  }, []);
363
- U(() => {
363
+ j(() => {
364
364
  W();
365
365
  }, [W]);
366
- const I = async (n) => {
366
+ const I = async (a) => {
367
367
  try {
368
- const a = await y.post("/api/v1/auth/login", n);
369
- ie(a.access_token, a.refresh_token);
368
+ const n = await y.post("/api/v1/auth/login", a);
369
+ ie(n.access_token, n.refresh_token);
370
370
  const u = await y.get("/api/v1/users/me");
371
371
  o(u);
372
- } catch (a) {
373
- throw console.error("Login failed:", a), a;
372
+ } catch (n) {
373
+ throw console.error("Login failed:", n), n;
374
374
  }
375
- }, F = async (n) => {
375
+ }, D = async (a) => {
376
376
  try {
377
- await y.post("/api/v1/auth/register", n);
378
- } catch (a) {
379
- throw console.error("Registration failed:", a), a;
377
+ await y.post("/api/v1/auth/register", a);
378
+ } catch (n) {
379
+ throw console.error("Registration failed:", n), n;
380
380
  }
381
- }, D = () => {
381
+ }, O = () => {
382
382
  ee(), o(null), l([]), h(null), k({ show: !1, localStorageCodes: [] });
383
383
  }, Y = async () => {
384
384
  await W();
385
- }, G = async (n) => {
385
+ }, G = async (a) => {
386
386
  try {
387
387
  return (await y.post(
388
388
  "/api/v1/auth/forgot-password",
389
- n
389
+ a
390
390
  )).message;
391
- } catch (a) {
392
- throw console.error("Forgot password failed:", a), a;
391
+ } catch (n) {
392
+ throw console.error("Forgot password failed:", n), n;
393
393
  }
394
- }, K = async (n) => {
394
+ }, K = async (a) => {
395
395
  try {
396
396
  return (await y.post(
397
397
  "/api/v1/auth/reset-password",
398
- n
398
+ a
399
399
  )).message;
400
- } catch (a) {
401
- throw console.error("Reset password failed:", a), a;
400
+ } catch (n) {
401
+ throw console.error("Reset password failed:", n), n;
402
402
  }
403
- }, V = async (n) => {
403
+ }, V = async (a) => {
404
404
  try {
405
405
  return (await y.post(
406
406
  "/api/v1/auth/resend-verification",
407
- n
407
+ a
408
408
  )).message;
409
- } catch (a) {
410
- throw console.error("Resend verification failed:", a), a;
409
+ } catch (n) {
410
+ throw console.error("Resend verification failed:", n), n;
411
411
  }
412
412
  }, d = S(async () => {
413
413
  N(!0);
414
414
  try {
415
- if (s) {
416
- const a = await y.get("/api/v1/users/me/ally-codes");
417
- l(a.ally_codes);
415
+ if (t) {
416
+ const n = await y.get("/api/v1/users/me/ally-codes");
417
+ l(n.ally_codes);
418
418
  const u = A();
419
419
  u.length > 0 && k({
420
420
  show: !0,
421
421
  localStorageCodes: u.map((q) => q.ally_code)
422
422
  });
423
423
  } else {
424
- const a = A();
425
- l(a);
424
+ const n = A();
425
+ l(n);
426
426
  }
427
- const n = vt();
428
- h(n);
429
- } catch (n) {
430
- console.error("Failed to fetch ally codes:", n), l([]);
427
+ const a = vt();
428
+ h(a);
429
+ } catch (a) {
430
+ console.error("Failed to fetch ally codes:", a), l([]);
431
431
  } finally {
432
432
  N(!1);
433
433
  }
434
- }, [s]), v = S(async (n) => {
435
- var a;
436
- if (!/^\d{9}$/.test(n))
434
+ }, [t]), v = S(async (a) => {
435
+ var n;
436
+ if (!/^\d{9}$/.test(a))
437
437
  throw new Error("Ally code must be exactly 9 digits");
438
- if (s) {
438
+ if (t) {
439
439
  const u = await y.post(
440
440
  "/api/v1/users/me/ally-codes",
441
- { ally_code: n }
441
+ { ally_code: a }
442
442
  );
443
- l((q) => [u, ...q]), c.length === 0 && O(n);
443
+ l((q) => [u, ...q]), c.length === 0 && z(a);
444
444
  } else {
445
- const u = await y.get(`/api/v1/player-data/player/${n}`);
445
+ const u = await y.get(`/api/v1/player-data/player/${a}`);
446
446
  if (!u)
447
447
  throw new Error("Invalid ally code - player not found");
448
448
  const q = {
449
- ally_code: n,
450
- player_name: ((a = u == null ? void 0 : u.data) == null ? void 0 : a.name) || null,
449
+ ally_code: a,
450
+ player_name: ((n = u == null ? void 0 : u.data) == null ? void 0 : n.name) || null,
451
451
  last_used_at: (/* @__PURE__ */ new Date()).toISOString()
452
452
  };
453
- pt(q), l(A()), c.length === 0 && O(n);
453
+ pt(q), l(A()), c.length === 0 && z(a);
454
454
  }
455
- }, [s, c.length]), L = S(async (n) => {
456
- s && typeof n == "number" ? (await y.delete(`/api/v1/users/me/ally-codes/${n}`), l((a) => a.filter((u) => "id" in u && u.id !== n))) : !s && typeof n == "string" && (yt(n), l(A()), i === n && O(null));
457
- }, [s, i]), O = S((n) => {
458
- if (h(n), $t(n), n && s) {
459
- const a = c.find((u) => "ally_code" in u && u.ally_code === n);
460
- a && "id" in a && oe(a.id);
461
- } else n && !s && re(n);
462
- }, [s, c]), oe = S(async (n) => {
463
- s && typeof n == "number" ? (await y.put(`/api/v1/users/me/ally-codes/${n}/use`, {}), await d()) : !s && typeof n == "string" && (re(n), l(A()));
464
- }, [s, d]), Q = S(() => {
455
+ }, [t, c.length]), L = S(async (a) => {
456
+ t && typeof a == "number" ? (await y.delete(`/api/v1/users/me/ally-codes/${a}`), l((n) => n.filter((u) => "id" in u && u.id !== a))) : !t && typeof a == "string" && (yt(a), l(A()), i === a && z(null));
457
+ }, [t, i]), z = S((a) => {
458
+ if (h(a), $t(a), a && t) {
459
+ const n = c.find((u) => "ally_code" in u && u.ally_code === a);
460
+ n && "id" in n && oe(n.id);
461
+ } else a && !t && re(a);
462
+ }, [t, c]), oe = S(async (a) => {
463
+ t && typeof a == "number" ? (await y.put(`/api/v1/users/me/ally-codes/${a}/use`, {}), await d()) : !t && typeof a == "string" && (re(a), l(A()));
464
+ }, [t, d]), Q = S(() => {
465
465
  k({ show: !1, localStorageCodes: [] });
466
466
  }, []), _e = S(async () => {
467
- if (!s) return;
468
- const n = A();
469
- for (const a of n)
467
+ if (!t) return;
468
+ const a = A();
469
+ for (const n of a)
470
470
  try {
471
- await v(a.ally_code);
471
+ await v(n.ally_code);
472
472
  } catch (u) {
473
- console.error(`Failed to migrate ally code ${a.ally_code}:`, u);
473
+ console.error(`Failed to migrate ally code ${n.ally_code}:`, u);
474
474
  }
475
475
  bt(), Q();
476
- }, [s, v, Q]);
477
- U(() => {
476
+ }, [t, v, Q]);
477
+ j(() => {
478
478
  d();
479
479
  }, [d]);
480
480
  const me = {
481
- user: s,
482
- isAuthenticated: !!s,
481
+ user: t,
482
+ isAuthenticated: !!t,
483
483
  isLoading: _,
484
484
  login: I,
485
- register: F,
486
- logout: D,
485
+ register: D,
486
+ logout: O,
487
487
  refreshUser: Y,
488
488
  forgotPassword: G,
489
489
  resetPassword: K,
@@ -495,7 +495,7 @@ const ft = (e) => {
495
495
  fetchAllyCodes: d,
496
496
  addAllyCode: v,
497
497
  removeAllyCode: L,
498
- selectAllyCode: O,
498
+ selectAllyCode: z,
499
499
  updateAllyCodeLastUsed: oe,
500
500
  migrationPrompt: f,
501
501
  dismissMigrationPrompt: Q,
@@ -507,7 +507,7 @@ const ft = (e) => {
507
507
  if (e === void 0)
508
508
  throw new Error("useAuth must be used within an AuthProvider");
509
509
  return e;
510
- }, M = (e) => !e || e.length !== 9 ? e : `${e.slice(0, 3)}-${e.slice(3, 6)}-${e.slice(6, 9)}`, ws = (e) => e.replace(/-/g, ""), Nt = "_allyCodeDropdown_1m0tw_1", At = "_select_1m0tw_8", St = "_manageButton_1m0tw_12", xt = "_managePanel_1m0tw_16", Tt = "_addSection_1m0tw_37", Ct = "_addInputGroup_1m0tw_43", kt = "_error_1m0tw_55", Et = "_success_1m0tw_61", Wt = "_codesList_1m0tw_67", It = "_codeItem_1m0tw_71", Lt = "_doneButton_1m0tw_88", $ = {
510
+ }, J = (e) => !e || e.length !== 9 ? e : `${e.slice(0, 3)}-${e.slice(3, 6)}-${e.slice(6, 9)}`, Ns = (e) => e.replace(/-/g, ""), Nt = "_allyCodeDropdown_1m0tw_1", At = "_select_1m0tw_8", St = "_manageButton_1m0tw_12", xt = "_managePanel_1m0tw_16", Tt = "_addSection_1m0tw_37", Ct = "_addInputGroup_1m0tw_43", kt = "_error_1m0tw_55", Et = "_success_1m0tw_61", Wt = "_codesList_1m0tw_67", It = "_codeItem_1m0tw_71", Lt = "_doneButton_1m0tw_88", $ = {
511
511
  allyCodeDropdown: Nt,
512
512
  select: At,
513
513
  manageButton: St,
@@ -519,25 +519,25 @@ const ft = (e) => {
519
519
  codesList: Wt,
520
520
  codeItem: It,
521
521
  doneButton: Lt
522
- }, Ns = ({
522
+ }, As = ({
523
523
  onAllyCodeSelected: e,
524
- className: t = ""
524
+ className: s = ""
525
525
  }) => {
526
526
  const {
527
- allyCodes: s,
527
+ allyCodes: t,
528
528
  selectedAllyCode: o,
529
529
  selectAllyCode: _,
530
530
  removeAllyCode: g,
531
531
  addAllyCode: c,
532
532
  isLoadingAllyCodes: l
533
- } = wt(), [i, h] = b(!1), [p, N] = b(""), [f, k] = b(""), [W, I] = b(""), [F, D] = b(!1), Y = s.map((d) => ({
533
+ } = wt(), [i, h] = b(!1), [p, N] = b(""), [f, k] = b(""), [W, I] = b(""), [D, O] = b(!1), Y = t.map((d) => ({
534
534
  value: d.ally_code,
535
- label: d.player_name ? `${d.player_name} (${M(d.ally_code)})` : M(d.ally_code)
535
+ label: d.player_name ? `${d.player_name} (${J(d.ally_code)})` : J(d.ally_code)
536
536
  })), G = (d) => {
537
537
  const v = d.target.value || null;
538
538
  _(v), e == null || e(v);
539
539
  }, K = async (d) => {
540
- const v = s.find((L) => L.ally_code === d);
540
+ const v = t.find((L) => L.ally_code === d);
541
541
  if (v) {
542
542
  const L = "id" in v ? v.id : v.ally_code;
543
543
  await g(L);
@@ -547,16 +547,16 @@ const ft = (e) => {
547
547
  k("Ally code must be exactly 9 digits");
548
548
  return;
549
549
  }
550
- D(!0);
550
+ O(!0);
551
551
  try {
552
552
  await c(p), I("Added successfully!"), N(""), setTimeout(() => I(""), 2e3);
553
553
  } catch (d) {
554
554
  k(d.message || "Failed to add ally code");
555
555
  } finally {
556
- D(!1);
556
+ O(!1);
557
557
  }
558
558
  };
559
- return s.length === 0 ? null : /* @__PURE__ */ m("div", { className: `${$.allyCodeDropdown} ${t}`, children: [
559
+ return t.length === 0 ? null : /* @__PURE__ */ m("div", { className: `${$.allyCodeDropdown} ${s}`, children: [
560
560
  /* @__PURE__ */ r(
561
561
  le,
562
562
  {
@@ -573,22 +573,22 @@ const ft = (e) => {
573
573
  /* @__PURE__ */ m("div", { className: $.addSection, children: [
574
574
  /* @__PURE__ */ m("div", { className: $.addInputGroup, children: [
575
575
  /* @__PURE__ */ r(
576
- ae,
576
+ ne,
577
577
  {
578
578
  type: "text",
579
579
  placeholder: "9-digit ally code",
580
580
  value: p,
581
581
  onChange: (d) => N(d.target.value.replace(/\D/g, "").slice(0, 9)),
582
- disabled: F
582
+ disabled: D
583
583
  }
584
584
  ),
585
585
  /* @__PURE__ */ r(
586
- z,
586
+ M,
587
587
  {
588
588
  variant: "primary",
589
589
  size: "sm",
590
590
  onClick: V,
591
- loading: F,
591
+ loading: D,
592
592
  disabled: p.length !== 9,
593
593
  children: "Add"
594
594
  }
@@ -597,10 +597,10 @@ const ft = (e) => {
597
597
  f && /* @__PURE__ */ r("div", { className: $.error, children: f }),
598
598
  W && /* @__PURE__ */ r("div", { className: $.success, children: W })
599
599
  ] }),
600
- /* @__PURE__ */ r("div", { className: $.codesList, children: s.map((d) => /* @__PURE__ */ m("div", { className: $.codeItem, children: [
601
- /* @__PURE__ */ r("span", { children: d.player_name ? `${d.player_name} (${M(d.ally_code)})` : M(d.ally_code) }),
600
+ /* @__PURE__ */ r("div", { className: $.codesList, children: t.map((d) => /* @__PURE__ */ m("div", { className: $.codeItem, children: [
601
+ /* @__PURE__ */ r("span", { children: d.player_name ? `${d.player_name} (${J(d.ally_code)})` : J(d.ally_code) }),
602
602
  /* @__PURE__ */ r(
603
- z,
603
+ M,
604
604
  {
605
605
  variant: "ghost",
606
606
  size: "sm",
@@ -610,7 +610,7 @@ const ft = (e) => {
610
610
  )
611
611
  ] }, d.ally_code)) }),
612
612
  /* @__PURE__ */ r(
613
- z,
613
+ M,
614
614
  {
615
615
  variant: "secondary",
616
616
  size: "sm",
@@ -621,7 +621,7 @@ const ft = (e) => {
621
621
  )
622
622
  ] }),
623
623
  /* @__PURE__ */ r(
624
- z,
624
+ M,
625
625
  {
626
626
  variant: "ghost",
627
627
  size: "sm",
@@ -631,20 +631,21 @@ const ft = (e) => {
631
631
  }
632
632
  )
633
633
  ] });
634
- }, qt = "_card_1n0ll_1", Rt = "_elevated_1n0ll_12", Pt = "_outline_1n0ll_17", Bt = "_hoverable_1n0ll_40", J = {
634
+ }, qt = "_card_b4471_1", Rt = "_chamfered_b4471_8", Pt = "_elevated_b4471_17", Bt = "_outline_b4471_22", Ut = "_hoverable_b4471_45", U = {
635
635
  card: qt,
636
- default: "_default_1n0ll_8",
637
- elevated: Rt,
638
- outline: Pt,
639
- "padding-none": "_padding-none_1n0ll_23",
640
- "padding-sm": "_padding-sm_1n0ll_27",
641
- "padding-md": "_padding-md_1n0ll_31",
642
- "padding-lg": "_padding-lg_1n0ll_35",
643
- hoverable: Bt
644
- }, As = ({
636
+ chamfered: Rt,
637
+ default: "_default_b4471_13",
638
+ elevated: Pt,
639
+ outline: Bt,
640
+ "padding-none": "_padding-none_b4471_28",
641
+ "padding-sm": "_padding-sm_b4471_32",
642
+ "padding-md": "_padding-md_b4471_36",
643
+ "padding-lg": "_padding-lg_b4471_40",
644
+ hoverable: Ut
645
+ }, Ss = ({
645
646
  children: e,
646
- variant: t = "default",
647
- chamfered: s = !1,
647
+ variant: s = "default",
648
+ chamfered: t = !1,
648
649
  chamferSize: o = "md",
649
650
  padding: _ = "md",
650
651
  hoverable: g = !1,
@@ -654,11 +655,11 @@ const ft = (e) => {
654
655
  onClick: h,
655
656
  style: p
656
657
  }) => {
657
- const N = s ? o === "asymmetric" ? "chamfered-box-asymmetric" : o === "sm" ? "chamfered-box-sm" : o === "lg" ? "chamfered-box-lg" : "chamfered-box" : "", f = l ? { color: l } : void 0;
658
+ const N = t ? o === "asymmetric" ? "chamfered-box-asymmetric" : o === "sm" ? "chamfered-box-sm" : o === "lg" ? "chamfered-box-lg" : "chamfered-box" : "", f = l ? { color: l } : void 0;
658
659
  return /* @__PURE__ */ m(
659
660
  "div",
660
661
  {
661
- className: `${J.card} ${J[t]} ${J[`padding-${_}`]} ${N} ${g ? J.hoverable : ""} ${i}`,
662
+ className: `${U.card} ${t ? U.chamfered : ""} ${U[s]} ${U[`padding-${_}`]} ${N} ${g ? U.hoverable : ""} ${i}`,
662
663
  onClick: h,
663
664
  role: h ? "button" : void 0,
664
665
  tabIndex: h ? 0 : void 0,
@@ -674,100 +675,100 @@ const ft = (e) => {
674
675
  ]
675
676
  }
676
677
  );
677
- }, Ut = "_badge_rk7t5_1", jt = "_sm_rk7t5_11", Ft = "_md_rk7t5_16", Dt = "_lg_rk7t5_21", Ot = "_primary_rk7t5_32", zt = "_secondary_rk7t5_37", Mt = "_success_rk7t5_42", Jt = "_warning_rk7t5_47", Ht = "_error_rk7t5_52", Yt = "_info_rk7t5_57", Z = {
678
- badge: Ut,
679
- sm: jt,
680
- md: Ft,
681
- lg: Dt,
678
+ }, jt = "_badge_rk7t5_1", Ft = "_sm_rk7t5_11", Dt = "_md_rk7t5_16", Ot = "_lg_rk7t5_21", zt = "_primary_rk7t5_32", Mt = "_secondary_rk7t5_37", Jt = "_success_rk7t5_42", Ht = "_warning_rk7t5_47", Yt = "_error_rk7t5_52", Gt = "_info_rk7t5_57", Z = {
679
+ badge: jt,
680
+ sm: Ft,
681
+ md: Dt,
682
+ lg: Ot,
682
683
  default: "_default_rk7t5_27",
683
- primary: Ot,
684
- secondary: zt,
685
- success: Mt,
686
- warning: Jt,
687
- error: Ht,
688
- info: Yt
689
- }, Ss = ({
684
+ primary: zt,
685
+ secondary: Mt,
686
+ success: Jt,
687
+ warning: Ht,
688
+ error: Yt,
689
+ info: Gt
690
+ }, xs = ({
690
691
  children: e,
691
- variant: t = "default",
692
- size: s = "md",
692
+ variant: s = "default",
693
+ size: t = "md",
693
694
  className: o = ""
694
- }) => /* @__PURE__ */ r("span", { className: `${Z.badge} ${Z[t]} ${Z[s]} ${o}`, children: e }), Gt = "_overlay_1b3yt_1", Kt = "_fadeIn_1b3yt_1", Vt = "_modal_1b3yt_13", Qt = "_slideUp_1b3yt_1", Xt = "_sm_1b3yt_25", Zt = "_md_1b3yt_30", es = "_lg_1b3yt_35", ts = "_xl_1b3yt_40", ss = "_header_1b3yt_45", os = "_title_1b3yt_53", rs = "_closeButton_1b3yt_60", ns = "_content_1b3yt_78", E = {
695
- overlay: Gt,
696
- fadeIn: Kt,
697
- modal: Vt,
698
- slideUp: Qt,
699
- sm: Xt,
700
- md: Zt,
701
- lg: es,
702
- xl: ts,
703
- header: ss,
704
- title: os,
705
- closeButton: rs,
695
+ }) => /* @__PURE__ */ r("span", { className: `${Z.badge} ${Z[s]} ${Z[t]} ${o}`, children: e }), Kt = "_overlay_1b3yt_1", Vt = "_fadeIn_1b3yt_1", Qt = "_modal_1b3yt_13", Xt = "_slideUp_1b3yt_1", Zt = "_sm_1b3yt_25", es = "_md_1b3yt_30", ts = "_lg_1b3yt_35", ss = "_xl_1b3yt_40", os = "_header_1b3yt_45", rs = "_title_1b3yt_53", as = "_closeButton_1b3yt_60", ns = "_content_1b3yt_78", E = {
696
+ overlay: Kt,
697
+ fadeIn: Vt,
698
+ modal: Qt,
699
+ slideUp: Xt,
700
+ sm: Zt,
701
+ md: es,
702
+ lg: ts,
703
+ xl: ss,
704
+ header: os,
705
+ title: rs,
706
+ closeButton: as,
706
707
  content: ns
707
- }, xs = ({
708
+ }, Ts = ({
708
709
  isOpen: e,
709
- onClose: t,
710
- title: s,
710
+ onClose: s,
711
+ title: t,
711
712
  children: o,
712
713
  size: _ = "md",
713
714
  closeOnOverlayClick: g = !0,
714
715
  className: c = ""
715
716
  }) => {
716
- if (U(() => (e ? document.body.style.overflow = "hidden" : document.body.style.overflow = "unset", () => {
717
+ if (j(() => (e ? document.body.style.overflow = "hidden" : document.body.style.overflow = "unset", () => {
717
718
  document.body.style.overflow = "unset";
718
- }), [e]), U(() => {
719
+ }), [e]), j(() => {
719
720
  const i = (h) => {
720
- h.key === "Escape" && e && t();
721
+ h.key === "Escape" && e && s();
721
722
  };
722
723
  return document.addEventListener("keydown", i), () => document.removeEventListener("keydown", i);
723
- }, [e, t]), !e) return null;
724
+ }, [e, s]), !e) return null;
724
725
  const l = (i) => {
725
- g && i.target === i.currentTarget && t();
726
+ g && i.target === i.currentTarget && s();
726
727
  };
727
728
  return /* @__PURE__ */ r("div", { className: E.overlay, onClick: l, children: /* @__PURE__ */ m("div", { className: `${E.modal} ${E[_]} ${c}`, role: "dialog", "aria-modal": "true", children: [
728
- s && /* @__PURE__ */ m("div", { className: E.header, children: [
729
- /* @__PURE__ */ r("h2", { className: E.title, children: s }),
730
- /* @__PURE__ */ r("button", { className: E.closeButton, onClick: t, "aria-label": "Close modal", children: "✕" })
729
+ t && /* @__PURE__ */ m("div", { className: E.header, children: [
730
+ /* @__PURE__ */ r("h2", { className: E.title, children: t }),
731
+ /* @__PURE__ */ r("button", { className: E.closeButton, onClick: s, "aria-label": "Close modal", children: "✕" })
731
732
  ] }),
732
733
  /* @__PURE__ */ r("div", { className: E.content, children: o })
733
734
  ] }) });
734
- }, as = "_spinner_1uhnh_2", ls = "_spin_1uhnh_2", cs = "_sm_1uhnh_9", is = "_md_1uhnh_15", ds = "_lg_1uhnh_21", _s = "_dots_1uhnh_34", ms = "_dot_1uhnh_34", us = "_bounce_1uhnh_1", hs = "_visuallyHidden_1uhnh_91", C = {
735
- spinner: as,
736
- spin: ls,
737
- sm: cs,
738
- md: is,
739
- lg: ds,
740
- dots: _s,
741
- dot: ms,
742
- bounce: us,
743
- visuallyHidden: hs
744
- }, Ts = ({
735
+ }, ls = "_spinner_1uhnh_2", cs = "_spin_1uhnh_2", is = "_sm_1uhnh_9", ds = "_md_1uhnh_15", _s = "_lg_1uhnh_21", ms = "_dots_1uhnh_34", us = "_dot_1uhnh_34", hs = "_bounce_1uhnh_1", gs = "_visuallyHidden_1uhnh_91", C = {
736
+ spinner: ls,
737
+ spin: cs,
738
+ sm: is,
739
+ md: ds,
740
+ lg: _s,
741
+ dots: ms,
742
+ dot: us,
743
+ bounce: hs,
744
+ visuallyHidden: gs
745
+ }, Cs = ({
745
746
  size: e = "md",
746
- variant: t = "spinner",
747
- className: s = ""
748
- }) => t === "dots" ? /* @__PURE__ */ m("div", { className: `${C.dots} ${C[e]} ${s}`, children: [
747
+ variant: s = "spinner",
748
+ className: t = ""
749
+ }) => s === "dots" ? /* @__PURE__ */ m("div", { className: `${C.dots} ${C[e]} ${t}`, children: [
749
750
  /* @__PURE__ */ r("span", { className: C.dot }),
750
751
  /* @__PURE__ */ r("span", { className: C.dot }),
751
752
  /* @__PURE__ */ r("span", { className: C.dot })
752
- ] }) : /* @__PURE__ */ r("div", { className: `${C.spinner} ${C[e]} ${s}`, role: "status", children: /* @__PURE__ */ r("span", { className: C.visuallyHidden, children: "Loading..." }) });
753
+ ] }) : /* @__PURE__ */ r("div", { className: `${C.spinner} ${C[e]} ${t}`, role: "status", children: /* @__PURE__ */ r("span", { className: C.visuallyHidden, children: "Loading..." }) });
753
754
  export {
754
- Ns as AllyCodeDropdown,
755
+ As as AllyCodeDropdown,
755
756
  gt as ApiClient,
756
- bs as AuthProvider,
757
- Ss as Badge,
758
- z as Button,
759
- As as Card,
760
- ys as Container,
761
- $s as Footer,
762
- ae as Input,
763
- Ts as Loader,
764
- xs as Modal,
757
+ ws as AuthProvider,
758
+ xs as Badge,
759
+ M as Button,
760
+ Ss as Card,
761
+ vs as Container,
762
+ bs as Footer,
763
+ ne as Input,
764
+ Cs as Loader,
765
+ Ts as Modal,
765
766
  le as Select,
766
- vs as TopBar,
767
+ $s as TopBar,
767
768
  y as apiClient,
768
769
  bt as clearAllyCodes,
769
770
  ee as clearTokens,
770
- M as formatAllyCode,
771
+ J as formatAllyCode,
771
772
  ce as getAccessToken,
772
773
  A as getAllyCodesFromStorage,
773
774
  _t as getRefreshToken,
@@ -782,7 +783,7 @@ export {
782
783
  mt as setRefreshToken,
783
784
  $t as setSelectedAllyCode,
784
785
  ie as setTokens,
785
- ws as unformatAllyCode,
786
+ Ns as unformatAllyCode,
786
787
  re as updateAllyCodeLastUsed,
787
788
  wt as useAuth
788
789
  };
package/dist/style.css CHANGED
@@ -1 +1 @@
1
- :root{--color-primary: #1a73e8;--color-primary-hover: #1557b0;--color-primary-active: #0d3c78;--color-secondary: #34a853;--color-secondary-hover: #2d8e47;--color-secondary-active: #1f6631;--color-background: #0a0e27;--color-background-elevated: #131729;--color-background-hover: #1a1f3a;--color-surface: #1e2139;--color-border: #2a2f4a;--color-text-primary: #ffffff;--color-text-secondary: #a0a5c0;--color-text-disabled: #5a5f7a;--color-success: #34a853;--color-warning: #fbbc04;--color-error: #ea4335;--color-info: #4285f4;--tier-grey: #C0EEEE;--tier-green: #47c43c;--tier-blue: #1D99FF;--tier-purple: #8b5cf6;--tier-gold: #ffcc33;--tier-gold-glow: rgba(255, 204, 51, .6);--tier-purple-glow: rgba(139, 92, 246, .5);--tier-blue-glow: rgba(29, 153, 255, .5);--sixdot-gradient-start: #60a5fa;--sixdot-gradient-mid: #a855f7;--sixdot-gradient-end: #f59e0b;--sixdot-border-opacity: .3;--font-primary: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;--font-heading: "Orbitron", var(--font-primary);--font-mono: "Fira Code", "Courier New", monospace;--font-size-xs: .75rem;--font-size-sm: .875rem;--font-size-base: 1rem;--font-size-lg: 1.125rem;--font-size-xl: 1.25rem;--font-size-2xl: 1.5rem;--font-size-3xl: 1.875rem;--font-size-4xl: 2.25rem;--font-weight-normal: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--line-height-tight: 1.25;--line-height-normal: 1.5;--line-height-relaxed: 1.75;--spacing-xs: .25rem;--spacing-sm: .5rem;--spacing-md: 1rem;--spacing-lg: 1.5rem;--spacing-xl: 2rem;--spacing-2xl: 3rem;--spacing-3xl: 4rem;--radius-sm: .25rem;--radius-md: .5rem;--radius-lg: .75rem;--radius-xl: 1rem;--radius-full: 9999px;--shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, .3);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .4), 0 2px 4px -1px rgba(0, 0, 0, .3);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .5), 0 4px 6px -2px rgba(0, 0, 0, .4);--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, .6), 0 10px 10px -5px rgba(0, 0, 0, .5);--z-base: 0;--z-dropdown: 100;--z-sticky: 200;--z-modal: 300;--z-toast: 400;--z-tooltip: 500;--chamfer-size: 8px;--chamfer-size-lg: 12px;--chamfer-size-sm: 4px;--transition-fast: .15s ease-in-out;--transition-base: .2s ease-in-out;--transition-slow: .3s ease-in-out;--topbar-height: 64px;--topbar-background: var(--color-background-elevated);--topbar-border: var(--color-border);--container-max-width: 1280px;--container-padding: var(--spacing-md);--button-height: 40px;--button-padding-x: var(--spacing-lg);--button-padding-y: var(--spacing-sm);--input-height: 40px;--input-padding-x: var(--spacing-md);--input-padding-y: var(--spacing-sm);--input-border: var(--color-border);--input-background: var(--color-surface);--card-padding: var(--spacing-lg);--card-background: var(--color-surface);--card-border: var(--color-border)}*,*:before,*:after{box-sizing:border-box}*{margin:0;padding:0}html,body{height:100%}html{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{line-height:var(--line-height-normal);font-family:var(--font-primary);font-size:var(--font-size-base);color:var(--color-text-primary);background-color:var(--color-background)}img,picture,video,canvas,svg{display:block;max-width:100%}input,button,textarea,select{font:inherit;color:inherit}button{background:none;border:none;cursor:pointer}p,h1,h2,h3,h4,h5,h6{overflow-wrap:break-word}ul,ol{list-style:none}a{color:inherit;text-decoration:none}#root{isolation:isolate;min-height:100%}.chamfered-box{position:relative;clip-path:polygon(var(--chamfer-size) 0,calc(100% - var(--chamfer-size)) 0,100% var(--chamfer-size),100% calc(100% - var(--chamfer-size)),calc(100% - var(--chamfer-size)) 100%,var(--chamfer-size) 100%,0 calc(100% - var(--chamfer-size)),0 var(--chamfer-size))}.chamfered-box-lg{position:relative;clip-path:polygon(var(--chamfer-size-lg) 0,calc(100% - var(--chamfer-size-lg)) 0,100% var(--chamfer-size-lg),100% calc(100% - var(--chamfer-size-lg)),calc(100% - var(--chamfer-size-lg)) 100%,var(--chamfer-size-lg) 100%,0 calc(100% - var(--chamfer-size-lg)),0 var(--chamfer-size-lg))}.chamfered-box-sm{position:relative;clip-path:polygon(var(--chamfer-size-sm) 0,calc(100% - var(--chamfer-size-sm)) 0,100% var(--chamfer-size-sm),100% calc(100% - var(--chamfer-size-sm)),calc(100% - var(--chamfer-size-sm)) 100%,var(--chamfer-size-sm) 100%,0 calc(100% - var(--chamfer-size-sm)),0 var(--chamfer-size-sm))}.chamfered-box-asymmetric{position:relative;clip-path:polygon(12px 0%,calc(100% - 12px) 0%,100% 12px,100% calc(100% - 24px),calc(100% - 24px) 100%,12px 100%,0% calc(100% - 12px),0% 12px)}.chamfered-border{position:relative;background:var(--color-surface)}.chamfered-border:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;padding:2px;background:linear-gradient(135deg,var(--color-primary),var(--color-secondary));-webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);-webkit-mask-composite:xor;mask-composite:exclude;clip-path:polygon(var(--chamfer-size) 0,calc(100% - var(--chamfer-size)) 0,100% var(--chamfer-size),100% calc(100% - var(--chamfer-size)),calc(100% - var(--chamfer-size)) 100%,var(--chamfer-size) 100%,0 calc(100% - var(--chamfer-size)),0 var(--chamfer-size))}.chamfered-diagonal-border{position:absolute;background-color:currentColor;transition:background-color .3s ease;z-index:5;pointer-events:none}.chamfered-diagonal-tl{top:-1px;left:11px;width:16px;height:2px;transform:rotate(135deg);transform-origin:left center}.chamfered-diagonal-tr{top:10px;right:0;width:18px;height:2px;transform:rotate(45deg);transform-origin:right center}.chamfered-diagonal-bl{bottom:-2px;left:12px;width:20px;height:2px;transform:rotate(-135deg);transform-origin:left center}.chamfered-diagonal-br{bottom:11px;right:-1px;width:18px;height:2px;transform:rotate(-45deg);transform-origin:right center}.chamfered-diagonal-br-large{bottom:23px;right:-1px;width:35px;height:2px;transform:rotate(-45deg);transform-origin:right center}.gradient-primary{background:linear-gradient(135deg,var(--color-primary),var(--color-primary-active))}.gradient-secondary{background:linear-gradient(135deg,var(--color-secondary),var(--color-secondary-active))}.gradient-surface{background:linear-gradient(135deg,var(--color-surface),var(--color-background-elevated))}.glow-primary{box-shadow:0 0 20px #1a73e880}.glow-secondary{box-shadow:0 0 20px #34a85380}.glow-error{box-shadow:0 0 20px #ea433580}.glow-tier-gold{box-shadow:0 0 20px var(--tier-gold-glow)}.glow-tier-purple{box-shadow:0 0 20px var(--tier-purple-glow)}.glow-tier-blue{box-shadow:0 0 20px var(--tier-blue-glow)}.sixdot-border{position:relative}.sixdot-border:before{content:"";position:absolute;top:-2px;left:-2px;right:-2px;bottom:-2px;background:linear-gradient(45deg,var(--sixdot-gradient-start),var(--sixdot-gradient-mid),var(--sixdot-gradient-end));border-radius:inherit;opacity:var(--sixdot-border-opacity);z-index:-1}.sixdot-glow{background:linear-gradient(135deg,#4338ca33,#7c3aed33)}.hover-scale{transition:transform var(--transition-base)}.hover-scale:hover{transform:scale(1.02)}.hover-brighten{transition:filter var(--transition-base)}.hover-brighten:hover{filter:brightness(1.1)}.hover-lift{transition:transform var(--transition-base)}.hover-lift:hover{transform:translateY(-2px)}.hover-glow{transition:box-shadow var(--transition-base)}.hover-glow:hover{box-shadow:0 0 20px #1a73e866}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes slideDown{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.animate-fade-in{animation:fadeIn var(--transition-base)}.animate-slide-up{animation:slideUp var(--transition-base)}.animate-slide-down{animation:slideDown var(--transition-base)}.animate-spin{animation:spin 1s linear infinite}.flex{display:flex}.flex-col{display:flex;flex-direction:column}.flex-center{display:flex;align-items:center;justify-content:center}.flex-between{display:flex;align-items:center;justify-content:space-between}.flex-wrap{flex-wrap:wrap}.flex-1{flex:1}.grid{display:grid}.grid-cols-2{grid-template-columns:repeat(2,1fr)}.grid-cols-3{grid-template-columns:repeat(3,1fr)}.grid-cols-4{grid-template-columns:repeat(4,1fr)}.gap-sm{gap:var(--spacing-sm)}.gap-md{gap:var(--spacing-md)}.gap-lg{gap:var(--spacing-lg)}.gap-xl{gap:var(--spacing-xl)}.m-0{margin:0}.mt-sm{margin-top:var(--spacing-sm)}.mt-md{margin-top:var(--spacing-md)}.mt-lg{margin-top:var(--spacing-lg)}.mt-xl{margin-top:var(--spacing-xl)}.mb-sm{margin-bottom:var(--spacing-sm)}.mb-md{margin-bottom:var(--spacing-md)}.mb-lg{margin-bottom:var(--spacing-lg)}.mb-xl{margin-bottom:var(--spacing-xl)}.p-sm{padding:var(--spacing-sm)}.p-md{padding:var(--spacing-md)}.p-lg{padding:var(--spacing-lg)}.p-xl{padding:var(--spacing-xl)}.text-xs{font-size:var(--font-size-xs)}.text-sm{font-size:var(--font-size-sm)}.text-base{font-size:var(--font-size-base)}.text-lg{font-size:var(--font-size-lg)}.text-xl{font-size:var(--font-size-xl)}.text-2xl{font-size:var(--font-size-2xl)}.text-3xl{font-size:var(--font-size-3xl)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-normal{font-weight:var(--font-weight-normal)}.font-medium{font-weight:var(--font-weight-medium)}.font-semibold{font-weight:var(--font-weight-semibold)}.font-bold{font-weight:var(--font-weight-bold)}.text-primary{color:var(--color-text-primary)}.text-secondary{color:var(--color-text-secondary)}.text-disabled{color:var(--color-text-disabled)}.bg-primary{background-color:var(--color-primary)}.bg-secondary{background-color:var(--color-secondary)}.bg-surface{background-color:var(--color-surface)}.bg-elevated{background-color:var(--color-background-elevated)}.hidden{display:none}.block{display:block}.inline-block{display:inline-block}.relative{position:relative}.absolute{position:absolute}.fixed{position:fixed}.w-full{width:100%}.w-auto{width:auto}.h-full{height:100%}.h-auto{height:auto}.overflow-hidden{overflow:hidden}.overflow-auto{overflow:auto}.overflow-scroll{overflow:scroll}.cursor-pointer{cursor:pointer}.cursor-not-allowed{cursor:not-allowed}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:var(--color-background)}::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:var(--radius-full)}::-webkit-scrollbar-thumb:hover{background:var(--color-text-disabled)}:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.bg-overlay{position:relative}.bg-overlay:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:var(--overlay-gradient, linear-gradient(135deg, rgba(15, 23, 42, .7), rgba(15, 23, 42, .5)));z-index:0}.bg-overlay>*{position:relative;z-index:1}.backdrop-image{position:absolute;top:0;right:0;bottom:0;left:0;background-size:cover;background-position:center;background-repeat:no-repeat}._container_u3o0e_1{width:100%;margin-left:auto;margin-right:auto}._padding_u3o0e_7{padding-left:var(--container-padding);padding-right:var(--container-padding)}._maxWidth-sm_u3o0e_12{max-width:640px}._maxWidth-md_u3o0e_16{max-width:768px}._maxWidth-lg_u3o0e_20{max-width:1024px}._maxWidth-xl_u3o0e_24{max-width:var(--container-max-width)}._maxWidth-full_u3o0e_28{max-width:100%}@media (max-width: 768px){._padding_u3o0e_7{padding-left:var(--spacing-md);padding-right:var(--spacing-md)}}._topBar_10g3c_1{position:sticky;top:0;left:0;right:0;height:var(--topbar-height);background-color:var(--topbar-background);border-bottom:1px solid var(--topbar-border);z-index:var(--z-sticky);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}._content_10g3c_13{height:100%;max-width:var(--container-max-width);margin:0 auto;padding:0 var(--container-padding);display:flex;align-items:center;justify-content:space-between}._left_10g3c_23{display:flex;align-items:center;gap:var(--spacing-xl);flex:1}._right_10g3c_30{display:flex;align-items:center;gap:var(--spacing-md)}._logo_10g3c_36{display:flex;align-items:center;font-size:var(--font-size-xl);font-weight:var(--font-weight-bold);color:var(--color-primary);font-family:var(--font-heading)}@media (max-width: 768px){._content_10g3c_13{padding:0 var(--spacing-md)}._left_10g3c_23{gap:var(--spacing-md)}._right_10g3c_30{gap:var(--spacing-sm)}}._footer_zjuj8_1{background-color:var(--color-background-elevated);border-top:1px solid var(--color-border);margin-top:auto}._content_zjuj8_7{max-width:var(--container-max-width);margin:0 auto;padding:var(--spacing-xl) var(--container-padding)}._defaultContent_zjuj8_13{display:flex;flex-direction:column;align-items:center;gap:var(--spacing-sm);text-align:center}._copyright_zjuj8_21{font-size:var(--font-size-sm);color:var(--color-text-secondary)}._disclaimer_zjuj8_26{font-size:var(--font-size-xs);color:var(--color-text-disabled)}@media (max-width: 768px){._content_zjuj8_7{padding:var(--spacing-lg) var(--spacing-md)}}._button_159ms_1{display:inline-flex;align-items:center;justify-content:center;gap:var(--spacing-sm);font-family:var(--font-primary);font-weight:var(--font-weight-medium);border-radius:var(--radius-md);cursor:pointer;transition:all var(--transition-base);border:2px solid transparent;text-align:center;-webkit-user-select:none;user-select:none}._button_159ms_1:disabled{opacity:.5;cursor:not-allowed}._sm_159ms_22{height:32px;padding:0 var(--spacing-md);font-size:var(--font-size-sm)}._md_159ms_28{height:var(--button-height);padding:0 var(--button-padding-x);font-size:var(--font-size-base)}._lg_159ms_34{height:48px;padding:0 var(--spacing-xl);font-size:var(--font-size-lg)}._primary_159ms_41{background-color:var(--color-primary);color:var(--color-text-primary)}._primary_159ms_41:hover:not(:disabled){background-color:var(--color-primary-hover);box-shadow:var(--shadow-md)}._primary_159ms_41:active:not(:disabled){background-color:var(--color-primary-active)}._secondary_159ms_55{background-color:var(--color-secondary);color:var(--color-text-primary)}._secondary_159ms_55:hover:not(:disabled){background-color:var(--color-secondary-hover);box-shadow:var(--shadow-md)}._secondary_159ms_55:active:not(:disabled){background-color:var(--color-secondary-active)}._outline_159ms_69{background-color:transparent;border-color:var(--color-border);color:var(--color-text-primary)}._outline_159ms_69:hover:not(:disabled){background-color:var(--color-background-hover);border-color:var(--color-primary)}._ghost_159ms_80{background-color:transparent;color:var(--color-text-primary)}._ghost_159ms_80:hover:not(:disabled){background-color:var(--color-background-hover)}._danger_159ms_89{background-color:var(--color-error);color:var(--color-text-primary)}._danger_159ms_89:hover:not(:disabled){background-color:#c33a2e;box-shadow:var(--shadow-md)}._fullWidth_159ms_100{width:100%}._loading_159ms_105{position:relative;pointer-events:none}._loadingSpinner_159ms_110{display:flex;align-items:center;gap:var(--spacing-sm)}._spinner_159ms_116{width:16px;height:16px;border:2px solid transparent;border-top-color:currentColor;border-radius:50%;animation:_spin_159ms_116 .6s linear infinite}@keyframes _spin_159ms_116{to{transform:rotate(360deg)}}._loadingText_159ms_131{opacity:.7}._inputWrapper_15t4g_1{display:flex;flex-direction:column;gap:var(--spacing-xs)}._fullWidth_15t4g_7{width:100%}._label_15t4g_11{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text-primary);display:flex;align-items:center;gap:var(--spacing-xs)}._required_15t4g_20{color:var(--color-error)}._input_15t4g_1{height:var(--input-height);padding:var(--input-padding-y) var(--input-padding-x);font-size:var(--font-size-base);font-family:var(--font-primary);color:var(--color-text-primary);background-color:var(--input-background);border:1px solid var(--input-border);border-radius:var(--radius-md);transition:all var(--transition-base);outline:none}._input_15t4g_1:hover{border-color:var(--color-text-disabled)}._input_15t4g_1:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px #1a73e81a}._input_15t4g_1:disabled{opacity:.5;cursor:not-allowed}._input_15t4g_1::placeholder{color:var(--color-text-disabled)}._input_15t4g_1._error_15t4g_55{border-color:var(--color-error)}._input_15t4g_1._error_15t4g_55:focus{box-shadow:0 0 0 3px #ea43351a}._errorText_15t4g_63{font-size:var(--font-size-sm);color:var(--color-error)}._helperText_15t4g_68{font-size:var(--font-size-sm);color:var(--color-text-secondary)}._selectWrapper_ir4bq_1{display:flex;flex-direction:column;gap:var(--spacing-xs)}._fullWidth_ir4bq_7{width:100%}._label_ir4bq_11{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text-primary);display:flex;align-items:center;gap:var(--spacing-xs)}._required_ir4bq_20{color:var(--color-error)}._selectContainer_ir4bq_24{position:relative;display:inline-block;width:100%}._select_ir4bq_1{width:100%;height:var(--input-height);padding:var(--input-padding-y) var(--input-padding-x);padding-right:calc(var(--input-padding-x) + 24px);font-size:var(--font-size-base);font-family:var(--font-primary);color:var(--color-text-primary);background-color:var(--input-background);border:1px solid var(--input-border);border-radius:var(--radius-md);transition:all var(--transition-base);outline:none;cursor:pointer;appearance:none;-webkit-appearance:none;-moz-appearance:none}._select_ir4bq_1:hover{border-color:var(--color-text-disabled)}._select_ir4bq_1:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px #1a73e81a}._select_ir4bq_1:disabled{opacity:.5;cursor:not-allowed}._select_ir4bq_1._error_ir4bq_63{border-color:var(--color-error)}._select_ir4bq_1._error_ir4bq_63:focus{box-shadow:0 0 0 3px #ea43351a}._arrow_ir4bq_71{position:absolute;right:var(--input-padding-x);top:50%;transform:translateY(-50%);pointer-events:none;font-size:var(--font-size-xs);color:var(--color-text-secondary)}._errorText_ir4bq_81{font-size:var(--font-size-sm);color:var(--color-error)}._helperText_ir4bq_86{font-size:var(--font-size-sm);color:var(--color-text-secondary)}._select_ir4bq_1 option{background-color:var(--color-surface);color:var(--color-text-primary)}._allyCodeDropdown_1m0tw_1{position:relative;display:flex;align-items:center;gap:.5rem}._select_1m0tw_8{min-width:200px}._manageButton_1m0tw_12{white-space:nowrap}._managePanel_1m0tw_16{position:absolute;top:100%;right:0;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:1rem;margin-top:.5rem;min-width:300px;box-shadow:0 4px 6px #0000001a;z-index:1000}._managePanel_1m0tw_16 h4{margin:0 0 1rem;font-size:.875rem;font-weight:600;color:var(--color-text-primary)}._addSection_1m0tw_37{margin-bottom:1rem;padding-bottom:1rem;border-bottom:1px solid var(--color-border)}._addInputGroup_1m0tw_43{display:flex;gap:.5rem;margin-bottom:.5rem}._addInputGroup_1m0tw_43 input{flex:1;font-family:monospace;letter-spacing:.05em}._error_1m0tw_55{font-size:.75rem;color:var(--color-error);margin-top:.25rem}._success_1m0tw_61{font-size:.75rem;color:var(--color-success);margin-top:.25rem}._codesList_1m0tw_67{margin-bottom:1rem}._codeItem_1m0tw_71{display:flex;justify-content:space-between;align-items:center;padding:.5rem 0;border-bottom:1px solid var(--color-border)}._codeItem_1m0tw_71:last-of-type{border-bottom:none}._codeItem_1m0tw_71 span{font-size:.875rem;color:var(--color-text-secondary)}._doneButton_1m0tw_88{width:100%}@media (max-width: 768px){._select_1m0tw_8{min-width:150px}._managePanel_1m0tw_16{right:auto;left:0}}._card_1n0ll_1{background-color:var(--card-background);border-radius:var(--radius-lg);transition:transform var(--transition-base),box-shadow var(--transition-base)}._default_1n0ll_8{background-color:var(--card-background)}._elevated_1n0ll_12{background-color:var(--card-background);box-shadow:var(--shadow-md)}._outline_1n0ll_17{background-color:transparent;border:1px solid var(--card-border)}._padding-none_1n0ll_23{padding:0}._padding-sm_1n0ll_27{padding:var(--spacing-sm)}._padding-md_1n0ll_31{padding:var(--card-padding)}._padding-lg_1n0ll_35{padding:var(--spacing-xl)}._hoverable_1n0ll_40{cursor:pointer;will-change:transform;backface-visibility:hidden;transform:translateZ(0)}._hoverable_1n0ll_40:hover{transform:translateY(-4px) translateZ(0);box-shadow:var(--shadow-lg)}._hoverable_1n0ll_40:active{transform:translateY(-1px) translateZ(0);box-shadow:var(--shadow-md)}._card_1n0ll_1[role=button]:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}._badge_rk7t5_1{display:inline-flex;align-items:center;justify-content:center;font-weight:var(--font-weight-medium);border-radius:var(--radius-full);white-space:nowrap}._sm_rk7t5_11{padding:2px 8px;font-size:var(--font-size-xs)}._md_rk7t5_16{padding:4px 12px;font-size:var(--font-size-sm)}._lg_rk7t5_21{padding:6px 16px;font-size:var(--font-size-base)}._default_rk7t5_27{background-color:var(--color-surface);color:var(--color-text-secondary)}._primary_rk7t5_32{background-color:var(--color-primary);color:var(--color-text-primary)}._secondary_rk7t5_37{background-color:var(--color-secondary);color:var(--color-text-primary)}._success_rk7t5_42{background-color:var(--color-success);color:var(--color-text-primary)}._warning_rk7t5_47{background-color:var(--color-warning);color:var(--color-background)}._error_rk7t5_52{background-color:var(--color-error);color:var(--color-text-primary)}._info_rk7t5_57{background-color:var(--color-info);color:var(--color-text-primary)}._overlay_1b3yt_1{position:fixed;top:0;right:0;bottom:0;left:0;background-color:#000000bf;display:flex;align-items:center;justify-content:center;z-index:var(--z-modal);padding:var(--spacing-md);animation:_fadeIn_1b3yt_1 var(--transition-base)}._modal_1b3yt_13{background-color:var(--color-surface);border-radius:var(--radius-lg);box-shadow:var(--shadow-xl);max-height:90vh;overflow:hidden;display:flex;flex-direction:column;animation:_slideUp_1b3yt_1 var(--transition-base)}._sm_1b3yt_25{width:100%;max-width:400px}._md_1b3yt_30{width:100%;max-width:600px}._lg_1b3yt_35{width:100%;max-width:800px}._xl_1b3yt_40{width:100%;max-width:1200px}._header_1b3yt_45{display:flex;align-items:center;justify-content:space-between;padding:var(--spacing-lg);border-bottom:1px solid var(--color-border)}._title_1b3yt_53{font-size:var(--font-size-xl);font-weight:var(--font-weight-semibold);color:var(--color-text-primary);margin:0}._closeButton_1b3yt_60{width:32px;height:32px;display:flex;align-items:center;justify-content:center;border-radius:var(--radius-md);color:var(--color-text-secondary);transition:all var(--transition-fast);font-size:var(--font-size-xl);line-height:1}._closeButton_1b3yt_60:hover{background-color:var(--color-background-hover);color:var(--color-text-primary)}._content_1b3yt_78{padding:var(--spacing-lg);overflow-y:auto;flex:1}@keyframes _fadeIn_1b3yt_1{0%{opacity:0}to{opacity:1}}@keyframes _slideUp_1b3yt_1{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@media (max-width: 768px){._modal_1b3yt_13{max-height:95vh}._header_1b3yt_45,._content_1b3yt_78{padding:var(--spacing-md)}}._spinner_1uhnh_2{border:3px solid rgba(255,255,255,.1);border-top-color:var(--color-primary);border-radius:50%;animation:_spin_1uhnh_2 .8s linear infinite}._spinner_1uhnh_2._sm_1uhnh_9{width:16px;height:16px;border-width:2px}._spinner_1uhnh_2._md_1uhnh_15{width:32px;height:32px;border-width:3px}._spinner_1uhnh_2._lg_1uhnh_21{width:48px;height:48px;border-width:4px}@keyframes _spin_1uhnh_2{to{transform:rotate(360deg)}}._dots_1uhnh_34{display:inline-flex;gap:8px}._dots_1uhnh_34._sm_1uhnh_9{gap:4px}._dots_1uhnh_34._lg_1uhnh_21{gap:12px}._dot_1uhnh_34{display:inline-block;background-color:var(--color-primary);border-radius:50%;animation:_bounce_1uhnh_1 1.4s infinite ease-in-out both}._dots_1uhnh_34._sm_1uhnh_9 ._dot_1uhnh_34{width:6px;height:6px}._dots_1uhnh_34._md_1uhnh_15 ._dot_1uhnh_34{width:10px;height:10px}._dots_1uhnh_34._lg_1uhnh_21 ._dot_1uhnh_34{width:14px;height:14px}._dot_1uhnh_34:nth-child(1){animation-delay:-.32s}._dot_1uhnh_34:nth-child(2){animation-delay:-.16s}@keyframes _bounce_1uhnh_1{0%,80%,to{transform:scale(0);opacity:.5}40%{transform:scale(1);opacity:1}}._visuallyHidden_1uhnh_91{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}
1
+ :root{--color-primary: #1a73e8;--color-primary-hover: #1557b0;--color-primary-active: #0d3c78;--color-secondary: #34a853;--color-secondary-hover: #2d8e47;--color-secondary-active: #1f6631;--color-background: #0a0e27;--color-background-elevated: #131729;--color-background-hover: #1a1f3a;--color-surface: #1e2139;--color-border: #2a2f4a;--color-text-primary: #ffffff;--color-text-secondary: #a0a5c0;--color-text-disabled: #5a5f7a;--color-success: #34a853;--color-warning: #fbbc04;--color-error: #ea4335;--color-info: #4285f4;--tier-grey: #C0EEEE;--tier-green: #47c43c;--tier-blue: #1D99FF;--tier-purple: #8b5cf6;--tier-gold: #ffcc33;--tier-gold-glow: rgba(255, 204, 51, .6);--tier-purple-glow: rgba(139, 92, 246, .5);--tier-blue-glow: rgba(29, 153, 255, .5);--sixdot-gradient-start: #60a5fa;--sixdot-gradient-mid: #a855f7;--sixdot-gradient-end: #f59e0b;--sixdot-border-opacity: .3;--font-primary: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;--font-heading: "Orbitron", var(--font-primary);--font-mono: "Fira Code", "Courier New", monospace;--font-size-xs: .75rem;--font-size-sm: .875rem;--font-size-base: 1rem;--font-size-lg: 1.125rem;--font-size-xl: 1.25rem;--font-size-2xl: 1.5rem;--font-size-3xl: 1.875rem;--font-size-4xl: 2.25rem;--font-weight-normal: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--line-height-tight: 1.25;--line-height-normal: 1.5;--line-height-relaxed: 1.75;--spacing-xs: .25rem;--spacing-sm: .5rem;--spacing-md: 1rem;--spacing-lg: 1.5rem;--spacing-xl: 2rem;--spacing-2xl: 3rem;--spacing-3xl: 4rem;--radius-sm: .25rem;--radius-md: .5rem;--radius-lg: .75rem;--radius-xl: 1rem;--radius-full: 9999px;--shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, .3);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .4), 0 2px 4px -1px rgba(0, 0, 0, .3);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .5), 0 4px 6px -2px rgba(0, 0, 0, .4);--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, .6), 0 10px 10px -5px rgba(0, 0, 0, .5);--z-base: 0;--z-dropdown: 100;--z-sticky: 200;--z-modal: 300;--z-toast: 400;--z-tooltip: 500;--chamfer-size: 8px;--chamfer-size-lg: 12px;--chamfer-size-sm: 4px;--transition-fast: .15s ease-in-out;--transition-base: .2s ease-in-out;--transition-slow: .3s ease-in-out;--topbar-height: 64px;--topbar-background: var(--color-background-elevated);--topbar-border: var(--color-border);--container-max-width: 1280px;--container-padding: var(--spacing-md);--button-height: 40px;--button-padding-x: var(--spacing-lg);--button-padding-y: var(--spacing-sm);--input-height: 40px;--input-padding-x: var(--spacing-md);--input-padding-y: var(--spacing-sm);--input-border: var(--color-border);--input-background: var(--color-surface);--card-padding: var(--spacing-lg);--card-background: var(--color-surface);--card-border: var(--color-border)}*,*:before,*:after{box-sizing:border-box}*{margin:0;padding:0}html,body{height:100%}html{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{line-height:var(--line-height-normal);font-family:var(--font-primary);font-size:var(--font-size-base);color:var(--color-text-primary);background-color:var(--color-background)}img,picture,video,canvas,svg{display:block;max-width:100%}input,button,textarea,select{font:inherit;color:inherit}button{background:none;border:none;cursor:pointer}p,h1,h2,h3,h4,h5,h6{overflow-wrap:break-word}ul,ol{list-style:none}a{color:inherit;text-decoration:none}#root{isolation:isolate;min-height:100%}.chamfered-box{position:relative;clip-path:polygon(var(--chamfer-size) 0,calc(100% - var(--chamfer-size)) 0,100% var(--chamfer-size),100% calc(100% - var(--chamfer-size)),calc(100% - var(--chamfer-size)) 100%,var(--chamfer-size) 100%,0 calc(100% - var(--chamfer-size)),0 var(--chamfer-size))}.chamfered-box-lg{position:relative;clip-path:polygon(var(--chamfer-size-lg) 0,calc(100% - var(--chamfer-size-lg)) 0,100% var(--chamfer-size-lg),100% calc(100% - var(--chamfer-size-lg)),calc(100% - var(--chamfer-size-lg)) 100%,var(--chamfer-size-lg) 100%,0 calc(100% - var(--chamfer-size-lg)),0 var(--chamfer-size-lg))}.chamfered-box-sm{position:relative;clip-path:polygon(var(--chamfer-size-sm) 0,calc(100% - var(--chamfer-size-sm)) 0,100% var(--chamfer-size-sm),100% calc(100% - var(--chamfer-size-sm)),calc(100% - var(--chamfer-size-sm)) 100%,var(--chamfer-size-sm) 100%,0 calc(100% - var(--chamfer-size-sm)),0 var(--chamfer-size-sm))}.chamfered-box-asymmetric{position:relative;clip-path:polygon(12px 0%,calc(100% - 12px) 0%,100% 12px,100% calc(100% - 24px),calc(100% - 24px) 100%,12px 100%,0% calc(100% - 12px),0% 12px)}.chamfered-border{position:relative;background:var(--color-surface)}.chamfered-border:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;padding:2px;background:linear-gradient(135deg,var(--color-primary),var(--color-secondary));-webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);-webkit-mask-composite:xor;mask-composite:exclude;clip-path:polygon(var(--chamfer-size) 0,calc(100% - var(--chamfer-size)) 0,100% var(--chamfer-size),100% calc(100% - var(--chamfer-size)),calc(100% - var(--chamfer-size)) 100%,var(--chamfer-size) 100%,0 calc(100% - var(--chamfer-size)),0 var(--chamfer-size))}.chamfered-diagonal-border{position:absolute;background-color:currentColor;transition:background-color .3s ease;z-index:5;pointer-events:none}.chamfered-diagonal-tl{top:-1px;left:11px;width:16px;height:2px;transform:rotate(135deg);transform-origin:left center}.chamfered-diagonal-tr{top:10px;right:0;width:18px;height:2px;transform:rotate(45deg);transform-origin:right center}.chamfered-diagonal-bl{bottom:-2px;left:12px;width:20px;height:2px;transform:rotate(-135deg);transform-origin:left center}.chamfered-diagonal-br{bottom:11px;right:-1px;width:18px;height:2px;transform:rotate(-45deg);transform-origin:right center}.chamfered-diagonal-br-large{bottom:23px;right:-1px;width:35px;height:2px;transform:rotate(-45deg);transform-origin:right center}.gradient-primary{background:linear-gradient(135deg,var(--color-primary),var(--color-primary-active))}.gradient-secondary{background:linear-gradient(135deg,var(--color-secondary),var(--color-secondary-active))}.gradient-surface{background:linear-gradient(135deg,var(--color-surface),var(--color-background-elevated))}.glow-primary{box-shadow:0 0 20px #1a73e880}.glow-secondary{box-shadow:0 0 20px #34a85380}.glow-error{box-shadow:0 0 20px #ea433580}.glow-tier-gold{box-shadow:0 0 20px var(--tier-gold-glow)}.glow-tier-purple{box-shadow:0 0 20px var(--tier-purple-glow)}.glow-tier-blue{box-shadow:0 0 20px var(--tier-blue-glow)}.sixdot-border{position:relative}.sixdot-border:before{content:"";position:absolute;top:-2px;left:-2px;right:-2px;bottom:-2px;background:linear-gradient(45deg,var(--sixdot-gradient-start),var(--sixdot-gradient-mid),var(--sixdot-gradient-end));border-radius:inherit;opacity:var(--sixdot-border-opacity);z-index:-1}.sixdot-glow{background:linear-gradient(135deg,#4338ca33,#7c3aed33)}.hover-scale{transition:transform var(--transition-base)}.hover-scale:hover{transform:scale(1.02)}.hover-brighten{transition:filter var(--transition-base)}.hover-brighten:hover{filter:brightness(1.1)}.hover-lift{transition:transform var(--transition-base)}.hover-lift:hover{transform:translateY(-2px)}.hover-glow{transition:box-shadow var(--transition-base)}.hover-glow:hover{box-shadow:0 0 20px #1a73e866}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes slideDown{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.animate-fade-in{animation:fadeIn var(--transition-base)}.animate-slide-up{animation:slideUp var(--transition-base)}.animate-slide-down{animation:slideDown var(--transition-base)}.animate-spin{animation:spin 1s linear infinite}.flex{display:flex}.flex-col{display:flex;flex-direction:column}.flex-center{display:flex;align-items:center;justify-content:center}.flex-between{display:flex;align-items:center;justify-content:space-between}.flex-wrap{flex-wrap:wrap}.flex-1{flex:1}.grid{display:grid}.grid-cols-2{grid-template-columns:repeat(2,1fr)}.grid-cols-3{grid-template-columns:repeat(3,1fr)}.grid-cols-4{grid-template-columns:repeat(4,1fr)}.gap-sm{gap:var(--spacing-sm)}.gap-md{gap:var(--spacing-md)}.gap-lg{gap:var(--spacing-lg)}.gap-xl{gap:var(--spacing-xl)}.m-0{margin:0}.mt-sm{margin-top:var(--spacing-sm)}.mt-md{margin-top:var(--spacing-md)}.mt-lg{margin-top:var(--spacing-lg)}.mt-xl{margin-top:var(--spacing-xl)}.mb-sm{margin-bottom:var(--spacing-sm)}.mb-md{margin-bottom:var(--spacing-md)}.mb-lg{margin-bottom:var(--spacing-lg)}.mb-xl{margin-bottom:var(--spacing-xl)}.p-sm{padding:var(--spacing-sm)}.p-md{padding:var(--spacing-md)}.p-lg{padding:var(--spacing-lg)}.p-xl{padding:var(--spacing-xl)}.text-xs{font-size:var(--font-size-xs)}.text-sm{font-size:var(--font-size-sm)}.text-base{font-size:var(--font-size-base)}.text-lg{font-size:var(--font-size-lg)}.text-xl{font-size:var(--font-size-xl)}.text-2xl{font-size:var(--font-size-2xl)}.text-3xl{font-size:var(--font-size-3xl)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-normal{font-weight:var(--font-weight-normal)}.font-medium{font-weight:var(--font-weight-medium)}.font-semibold{font-weight:var(--font-weight-semibold)}.font-bold{font-weight:var(--font-weight-bold)}.text-primary{color:var(--color-text-primary)}.text-secondary{color:var(--color-text-secondary)}.text-disabled{color:var(--color-text-disabled)}.bg-primary{background-color:var(--color-primary)}.bg-secondary{background-color:var(--color-secondary)}.bg-surface{background-color:var(--color-surface)}.bg-elevated{background-color:var(--color-background-elevated)}.hidden{display:none}.block{display:block}.inline-block{display:inline-block}.relative{position:relative}.absolute{position:absolute}.fixed{position:fixed}.w-full{width:100%}.w-auto{width:auto}.h-full{height:100%}.h-auto{height:auto}.overflow-hidden{overflow:hidden}.overflow-auto{overflow:auto}.overflow-scroll{overflow:scroll}.cursor-pointer{cursor:pointer}.cursor-not-allowed{cursor:not-allowed}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:var(--color-background)}::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:var(--radius-full)}::-webkit-scrollbar-thumb:hover{background:var(--color-text-disabled)}:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.bg-overlay{position:relative}.bg-overlay:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:var(--overlay-gradient, linear-gradient(135deg, rgba(15, 23, 42, .7), rgba(15, 23, 42, .5)));z-index:0}.bg-overlay>*{position:relative;z-index:1}.backdrop-image{position:absolute;top:0;right:0;bottom:0;left:0;background-size:cover;background-position:center;background-repeat:no-repeat}._container_u3o0e_1{width:100%;margin-left:auto;margin-right:auto}._padding_u3o0e_7{padding-left:var(--container-padding);padding-right:var(--container-padding)}._maxWidth-sm_u3o0e_12{max-width:640px}._maxWidth-md_u3o0e_16{max-width:768px}._maxWidth-lg_u3o0e_20{max-width:1024px}._maxWidth-xl_u3o0e_24{max-width:var(--container-max-width)}._maxWidth-full_u3o0e_28{max-width:100%}@media (max-width: 768px){._padding_u3o0e_7{padding-left:var(--spacing-md);padding-right:var(--spacing-md)}}._topBar_10g3c_1{position:sticky;top:0;left:0;right:0;height:var(--topbar-height);background-color:var(--topbar-background);border-bottom:1px solid var(--topbar-border);z-index:var(--z-sticky);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}._content_10g3c_13{height:100%;max-width:var(--container-max-width);margin:0 auto;padding:0 var(--container-padding);display:flex;align-items:center;justify-content:space-between}._left_10g3c_23{display:flex;align-items:center;gap:var(--spacing-xl);flex:1}._right_10g3c_30{display:flex;align-items:center;gap:var(--spacing-md)}._logo_10g3c_36{display:flex;align-items:center;font-size:var(--font-size-xl);font-weight:var(--font-weight-bold);color:var(--color-primary);font-family:var(--font-heading)}@media (max-width: 768px){._content_10g3c_13{padding:0 var(--spacing-md)}._left_10g3c_23{gap:var(--spacing-md)}._right_10g3c_30{gap:var(--spacing-sm)}}._footer_zjuj8_1{background-color:var(--color-background-elevated);border-top:1px solid var(--color-border);margin-top:auto}._content_zjuj8_7{max-width:var(--container-max-width);margin:0 auto;padding:var(--spacing-xl) var(--container-padding)}._defaultContent_zjuj8_13{display:flex;flex-direction:column;align-items:center;gap:var(--spacing-sm);text-align:center}._copyright_zjuj8_21{font-size:var(--font-size-sm);color:var(--color-text-secondary)}._disclaimer_zjuj8_26{font-size:var(--font-size-xs);color:var(--color-text-disabled)}@media (max-width: 768px){._content_zjuj8_7{padding:var(--spacing-lg) var(--spacing-md)}}._button_159ms_1{display:inline-flex;align-items:center;justify-content:center;gap:var(--spacing-sm);font-family:var(--font-primary);font-weight:var(--font-weight-medium);border-radius:var(--radius-md);cursor:pointer;transition:all var(--transition-base);border:2px solid transparent;text-align:center;-webkit-user-select:none;user-select:none}._button_159ms_1:disabled{opacity:.5;cursor:not-allowed}._sm_159ms_22{height:32px;padding:0 var(--spacing-md);font-size:var(--font-size-sm)}._md_159ms_28{height:var(--button-height);padding:0 var(--button-padding-x);font-size:var(--font-size-base)}._lg_159ms_34{height:48px;padding:0 var(--spacing-xl);font-size:var(--font-size-lg)}._primary_159ms_41{background-color:var(--color-primary);color:var(--color-text-primary)}._primary_159ms_41:hover:not(:disabled){background-color:var(--color-primary-hover);box-shadow:var(--shadow-md)}._primary_159ms_41:active:not(:disabled){background-color:var(--color-primary-active)}._secondary_159ms_55{background-color:var(--color-secondary);color:var(--color-text-primary)}._secondary_159ms_55:hover:not(:disabled){background-color:var(--color-secondary-hover);box-shadow:var(--shadow-md)}._secondary_159ms_55:active:not(:disabled){background-color:var(--color-secondary-active)}._outline_159ms_69{background-color:transparent;border-color:var(--color-border);color:var(--color-text-primary)}._outline_159ms_69:hover:not(:disabled){background-color:var(--color-background-hover);border-color:var(--color-primary)}._ghost_159ms_80{background-color:transparent;color:var(--color-text-primary)}._ghost_159ms_80:hover:not(:disabled){background-color:var(--color-background-hover)}._danger_159ms_89{background-color:var(--color-error);color:var(--color-text-primary)}._danger_159ms_89:hover:not(:disabled){background-color:#c33a2e;box-shadow:var(--shadow-md)}._fullWidth_159ms_100{width:100%}._loading_159ms_105{position:relative;pointer-events:none}._loadingSpinner_159ms_110{display:flex;align-items:center;gap:var(--spacing-sm)}._spinner_159ms_116{width:16px;height:16px;border:2px solid transparent;border-top-color:currentColor;border-radius:50%;animation:_spin_159ms_116 .6s linear infinite}@keyframes _spin_159ms_116{to{transform:rotate(360deg)}}._loadingText_159ms_131{opacity:.7}._inputWrapper_15t4g_1{display:flex;flex-direction:column;gap:var(--spacing-xs)}._fullWidth_15t4g_7{width:100%}._label_15t4g_11{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text-primary);display:flex;align-items:center;gap:var(--spacing-xs)}._required_15t4g_20{color:var(--color-error)}._input_15t4g_1{height:var(--input-height);padding:var(--input-padding-y) var(--input-padding-x);font-size:var(--font-size-base);font-family:var(--font-primary);color:var(--color-text-primary);background-color:var(--input-background);border:1px solid var(--input-border);border-radius:var(--radius-md);transition:all var(--transition-base);outline:none}._input_15t4g_1:hover{border-color:var(--color-text-disabled)}._input_15t4g_1:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px #1a73e81a}._input_15t4g_1:disabled{opacity:.5;cursor:not-allowed}._input_15t4g_1::placeholder{color:var(--color-text-disabled)}._input_15t4g_1._error_15t4g_55{border-color:var(--color-error)}._input_15t4g_1._error_15t4g_55:focus{box-shadow:0 0 0 3px #ea43351a}._errorText_15t4g_63{font-size:var(--font-size-sm);color:var(--color-error)}._helperText_15t4g_68{font-size:var(--font-size-sm);color:var(--color-text-secondary)}._selectWrapper_ir4bq_1{display:flex;flex-direction:column;gap:var(--spacing-xs)}._fullWidth_ir4bq_7{width:100%}._label_ir4bq_11{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text-primary);display:flex;align-items:center;gap:var(--spacing-xs)}._required_ir4bq_20{color:var(--color-error)}._selectContainer_ir4bq_24{position:relative;display:inline-block;width:100%}._select_ir4bq_1{width:100%;height:var(--input-height);padding:var(--input-padding-y) var(--input-padding-x);padding-right:calc(var(--input-padding-x) + 24px);font-size:var(--font-size-base);font-family:var(--font-primary);color:var(--color-text-primary);background-color:var(--input-background);border:1px solid var(--input-border);border-radius:var(--radius-md);transition:all var(--transition-base);outline:none;cursor:pointer;appearance:none;-webkit-appearance:none;-moz-appearance:none}._select_ir4bq_1:hover{border-color:var(--color-text-disabled)}._select_ir4bq_1:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px #1a73e81a}._select_ir4bq_1:disabled{opacity:.5;cursor:not-allowed}._select_ir4bq_1._error_ir4bq_63{border-color:var(--color-error)}._select_ir4bq_1._error_ir4bq_63:focus{box-shadow:0 0 0 3px #ea43351a}._arrow_ir4bq_71{position:absolute;right:var(--input-padding-x);top:50%;transform:translateY(-50%);pointer-events:none;font-size:var(--font-size-xs);color:var(--color-text-secondary)}._errorText_ir4bq_81{font-size:var(--font-size-sm);color:var(--color-error)}._helperText_ir4bq_86{font-size:var(--font-size-sm);color:var(--color-text-secondary)}._select_ir4bq_1 option{background-color:var(--color-surface);color:var(--color-text-primary)}._allyCodeDropdown_1m0tw_1{position:relative;display:flex;align-items:center;gap:.5rem}._select_1m0tw_8{min-width:200px}._manageButton_1m0tw_12{white-space:nowrap}._managePanel_1m0tw_16{position:absolute;top:100%;right:0;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:1rem;margin-top:.5rem;min-width:300px;box-shadow:0 4px 6px #0000001a;z-index:1000}._managePanel_1m0tw_16 h4{margin:0 0 1rem;font-size:.875rem;font-weight:600;color:var(--color-text-primary)}._addSection_1m0tw_37{margin-bottom:1rem;padding-bottom:1rem;border-bottom:1px solid var(--color-border)}._addInputGroup_1m0tw_43{display:flex;gap:.5rem;margin-bottom:.5rem}._addInputGroup_1m0tw_43 input{flex:1;font-family:monospace;letter-spacing:.05em}._error_1m0tw_55{font-size:.75rem;color:var(--color-error);margin-top:.25rem}._success_1m0tw_61{font-size:.75rem;color:var(--color-success);margin-top:.25rem}._codesList_1m0tw_67{margin-bottom:1rem}._codeItem_1m0tw_71{display:flex;justify-content:space-between;align-items:center;padding:.5rem 0;border-bottom:1px solid var(--color-border)}._codeItem_1m0tw_71:last-of-type{border-bottom:none}._codeItem_1m0tw_71 span{font-size:.875rem;color:var(--color-text-secondary)}._doneButton_1m0tw_88{width:100%}@media (max-width: 768px){._select_1m0tw_8{min-width:150px}._managePanel_1m0tw_16{right:auto;left:0}}._card_b4471_1{background-color:var(--card-background);border-radius:var(--radius-lg);transition:transform var(--transition-base),box-shadow var(--transition-base)}._card_b4471_1._chamfered_b4471_8{border-radius:0}._default_b4471_13{background-color:var(--card-background)}._elevated_b4471_17{background-color:var(--card-background);box-shadow:var(--shadow-md)}._outline_b4471_22{background-color:transparent;border:1px solid var(--card-border)}._padding-none_b4471_28{padding:0}._padding-sm_b4471_32{padding:var(--spacing-sm)}._padding-md_b4471_36{padding:var(--card-padding)}._padding-lg_b4471_40{padding:var(--spacing-xl)}._hoverable_b4471_45{cursor:pointer;will-change:transform;backface-visibility:hidden;transform:translateZ(0)}._hoverable_b4471_45:hover{transform:translateY(-4px) translateZ(0);box-shadow:var(--shadow-lg)}._hoverable_b4471_45:active{transform:translateY(-1px) translateZ(0);box-shadow:var(--shadow-md)}._card_b4471_1[role=button]:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}._badge_rk7t5_1{display:inline-flex;align-items:center;justify-content:center;font-weight:var(--font-weight-medium);border-radius:var(--radius-full);white-space:nowrap}._sm_rk7t5_11{padding:2px 8px;font-size:var(--font-size-xs)}._md_rk7t5_16{padding:4px 12px;font-size:var(--font-size-sm)}._lg_rk7t5_21{padding:6px 16px;font-size:var(--font-size-base)}._default_rk7t5_27{background-color:var(--color-surface);color:var(--color-text-secondary)}._primary_rk7t5_32{background-color:var(--color-primary);color:var(--color-text-primary)}._secondary_rk7t5_37{background-color:var(--color-secondary);color:var(--color-text-primary)}._success_rk7t5_42{background-color:var(--color-success);color:var(--color-text-primary)}._warning_rk7t5_47{background-color:var(--color-warning);color:var(--color-background)}._error_rk7t5_52{background-color:var(--color-error);color:var(--color-text-primary)}._info_rk7t5_57{background-color:var(--color-info);color:var(--color-text-primary)}._overlay_1b3yt_1{position:fixed;top:0;right:0;bottom:0;left:0;background-color:#000000bf;display:flex;align-items:center;justify-content:center;z-index:var(--z-modal);padding:var(--spacing-md);animation:_fadeIn_1b3yt_1 var(--transition-base)}._modal_1b3yt_13{background-color:var(--color-surface);border-radius:var(--radius-lg);box-shadow:var(--shadow-xl);max-height:90vh;overflow:hidden;display:flex;flex-direction:column;animation:_slideUp_1b3yt_1 var(--transition-base)}._sm_1b3yt_25{width:100%;max-width:400px}._md_1b3yt_30{width:100%;max-width:600px}._lg_1b3yt_35{width:100%;max-width:800px}._xl_1b3yt_40{width:100%;max-width:1200px}._header_1b3yt_45{display:flex;align-items:center;justify-content:space-between;padding:var(--spacing-lg);border-bottom:1px solid var(--color-border)}._title_1b3yt_53{font-size:var(--font-size-xl);font-weight:var(--font-weight-semibold);color:var(--color-text-primary);margin:0}._closeButton_1b3yt_60{width:32px;height:32px;display:flex;align-items:center;justify-content:center;border-radius:var(--radius-md);color:var(--color-text-secondary);transition:all var(--transition-fast);font-size:var(--font-size-xl);line-height:1}._closeButton_1b3yt_60:hover{background-color:var(--color-background-hover);color:var(--color-text-primary)}._content_1b3yt_78{padding:var(--spacing-lg);overflow-y:auto;flex:1}@keyframes _fadeIn_1b3yt_1{0%{opacity:0}to{opacity:1}}@keyframes _slideUp_1b3yt_1{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@media (max-width: 768px){._modal_1b3yt_13{max-height:95vh}._header_1b3yt_45,._content_1b3yt_78{padding:var(--spacing-md)}}._spinner_1uhnh_2{border:3px solid rgba(255,255,255,.1);border-top-color:var(--color-primary);border-radius:50%;animation:_spin_1uhnh_2 .8s linear infinite}._spinner_1uhnh_2._sm_1uhnh_9{width:16px;height:16px;border-width:2px}._spinner_1uhnh_2._md_1uhnh_15{width:32px;height:32px;border-width:3px}._spinner_1uhnh_2._lg_1uhnh_21{width:48px;height:48px;border-width:4px}@keyframes _spin_1uhnh_2{to{transform:rotate(360deg)}}._dots_1uhnh_34{display:inline-flex;gap:8px}._dots_1uhnh_34._sm_1uhnh_9{gap:4px}._dots_1uhnh_34._lg_1uhnh_21{gap:12px}._dot_1uhnh_34{display:inline-block;background-color:var(--color-primary);border-radius:50%;animation:_bounce_1uhnh_1 1.4s infinite ease-in-out both}._dots_1uhnh_34._sm_1uhnh_9 ._dot_1uhnh_34{width:6px;height:6px}._dots_1uhnh_34._md_1uhnh_15 ._dot_1uhnh_34{width:10px;height:10px}._dots_1uhnh_34._lg_1uhnh_21 ._dot_1uhnh_34{width:14px;height:14px}._dot_1uhnh_34:nth-child(1){animation-delay:-.32s}._dot_1uhnh_34:nth-child(2){animation-delay:-.16s}@keyframes _bounce_1uhnh_1{0%,80%,to{transform:scale(0);opacity:.5}40%{transform:scale(1);opacity:1}}._visuallyHidden_1uhnh_91{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "astrogators-shared-ui",
3
- "version": "0.4.0",
3
+ "version": "0.4.2",
4
4
  "description": "Shared UI components and utilities for Astrogator's Table applications",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",