@cal.macconnachie/web-components 0.0.11 → 0.0.13

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.
@@ -1,5 +1,5 @@
1
1
  const z = globalThis, Z = z.ShadowRoot && (z.ShadyCSS === void 0 || z.ShadyCSS.nativeShadow) && "adoptedStyleSheets" in Document.prototype && "replace" in CSSStyleSheet.prototype, Q = Symbol(), ot = /* @__PURE__ */ new WeakMap();
2
- let wt = class {
2
+ let $t = class {
3
3
  constructor(t, s, i) {
4
4
  if (this._$cssResult$ = !0, i !== Q) throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");
5
5
  this.cssText = t, this.t = s;
@@ -17,13 +17,13 @@ let wt = class {
17
17
  return this.cssText;
18
18
  }
19
19
  };
20
- const xt = (e) => new wt(typeof e == "string" ? e : e + "", void 0, Q), Et = (e, ...t) => {
20
+ const xt = (e) => new $t(typeof e == "string" ? e : e + "", void 0, Q), Et = (e, ...t) => {
21
21
  const s = e.length === 1 ? e[0] : t.reduce(((i, r, o) => i + ((a) => {
22
22
  if (a._$cssResult$ === !0) return a.cssText;
23
23
  if (typeof a == "number") return a;
24
24
  throw Error("Value passed to 'css' function must be a 'css' function result: " + a + ". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.");
25
25
  })(r) + e[o + 1]), e[0]);
26
- return new wt(s, e, Q);
26
+ return new $t(s, e, Q);
27
27
  }, Tt = (e, t) => {
28
28
  if (Z) e.adoptedStyleSheets = t.map(((s) => s instanceof CSSStyleSheet ? s : s.styleSheet));
29
29
  else for (const s of t) {
@@ -279,8 +279,8 @@ class B {
279
279
  for (; (r = O.nextNode()) !== null && n.length < c; ) {
280
280
  if (r.nodeType === 1) {
281
281
  if (r.hasAttributes()) for (const l of r.getAttributeNames()) if (l.endsWith(bt)) {
282
- const p = d[a++], u = r.getAttribute(l).split(C), $ = /([.?@])?(.*)/.exec(p);
283
- n.push({ type: 1, index: o, name: $[2], strings: u, ctor: $[1] === "." ? zt : $[1] === "?" ? Yt : $[1] === "@" ? Kt : V }), r.removeAttribute(l);
282
+ const p = d[a++], u = r.getAttribute(l).split(C), w = /([.?@])?(.*)/.exec(p);
283
+ n.push({ type: 1, index: o, name: w[2], strings: u, ctor: w[1] === "." ? zt : w[1] === "?" ? Yt : w[1] === "@" ? Kt : V }), r.removeAttribute(l);
284
284
  } else l.startsWith(C) && (n.push({ type: 6, index: o }), r.removeAttribute(l));
285
285
  if (At.test(r.tagName)) {
286
286
  const l = r.textContent.split(C), p = l.length - 1;
@@ -609,7 +609,7 @@ const yt = (e, t, s) => {
609
609
  const i = /* @__PURE__ */ new Map();
610
610
  for (let r = t; r <= s; r++) i.set(e[r], r);
611
611
  return i;
612
- }, $t = kt(class extends Ct {
612
+ }, wt = kt(class extends Ct {
613
613
  constructor(e) {
614
614
  if (super(e), e.type !== St.CHILD) throw Error("repeat() can only be used in text expressions");
615
615
  }
@@ -628,24 +628,24 @@ const yt = (e, t, s) => {
628
628
  const r = re(e), { values: o, keys: a } = this.dt(t, s, i);
629
629
  if (!Array.isArray(r)) return this.ut = a, o;
630
630
  const c = this.ut ??= [], n = [];
631
- let h, d, l = 0, p = r.length - 1, u = 0, $ = o.length - 1;
632
- for (; l <= p && u <= $; ) if (r[l] === null) l++;
631
+ let h, d, l = 0, p = r.length - 1, u = 0, w = o.length - 1;
632
+ for (; l <= p && u <= w; ) if (r[l] === null) l++;
633
633
  else if (r[p] === null) p--;
634
634
  else if (c[l] === a[u]) n[u] = P(r[l], o[u]), l++, u++;
635
- else if (c[p] === a[$]) n[$] = P(r[p], o[$]), p--, $--;
636
- else if (c[l] === a[$]) n[$] = P(r[l], o[$]), L(e, n[$ + 1], r[l]), l++, $--;
635
+ else if (c[p] === a[w]) n[w] = P(r[p], o[w]), p--, w--;
636
+ else if (c[l] === a[w]) n[w] = P(r[l], o[w]), L(e, n[w + 1], r[l]), l++, w--;
637
637
  else if (c[p] === a[u]) n[u] = P(r[p], o[u]), L(e, r[l], r[p]), p--, u++;
638
- else if (h === void 0 && (h = yt(a, u, $), d = yt(c, l, p)), h.has(c[l])) if (h.has(c[p])) {
638
+ else if (h === void 0 && (h = yt(a, u, w), d = yt(c, l, p)), h.has(c[l])) if (h.has(c[p])) {
639
639
  const v = d.get(a[u]), A = v !== void 0 ? r[v] : null;
640
640
  if (A === null) {
641
- const w = L(e, r[l]);
642
- P(w, o[u]), n[u] = w;
641
+ const $ = L(e, r[l]);
642
+ P($, o[u]), n[u] = $;
643
643
  } else n[u] = P(A, o[u]), L(e, r[l], A), r[v] = null;
644
644
  u++;
645
645
  } else G(r[p]), p--;
646
646
  else G(r[l]), l++;
647
- for (; u <= $; ) {
648
- const v = L(e, n[$ + 1]);
647
+ for (; u <= w; ) {
648
+ const v = L(e, n[w + 1]);
649
649
  P(v, o[u]), n[u++] = v;
650
650
  }
651
651
  for (; l <= p; ) {
@@ -674,7 +674,7 @@ const yt = (e, t, s) => {
674
674
  refreshToken: p,
675
675
  idToken: u
676
676
  }) => {
677
- const $ = await fetch(`${e}${t.login}`, {
677
+ const w = await fetch(`${e}${t.login}`, {
678
678
  method: "POST",
679
679
  headers: {
680
680
  "Content-Type": "application/json"
@@ -687,11 +687,11 @@ const yt = (e, t, s) => {
687
687
  idToken: u
688
688
  })
689
689
  });
690
- if (!$.ok) {
691
- const v = await $.json();
690
+ if (!w.ok) {
691
+ const v = await w.json();
692
692
  throw new Error(v.message || v.error || "Login failed");
693
693
  }
694
- return $.json();
694
+ return w.json();
695
695
  },
696
696
  logout: async ({
697
697
  accessToken: h,
@@ -753,7 +753,7 @@ const yt = (e, t, s) => {
753
753
  phone_number: l,
754
754
  family_name: p,
755
755
  given_name: u,
756
- code: $
756
+ code: w
757
757
  }) => {
758
758
  const v = await fetch(`${e}${t.register}`, {
759
759
  method: "POST",
@@ -766,7 +766,7 @@ const yt = (e, t, s) => {
766
766
  phone_number: l,
767
767
  family_name: p,
768
768
  given_name: u,
769
- code: $
769
+ code: w
770
770
  })
771
771
  });
772
772
  if (!v.ok) {
@@ -830,11 +830,11 @@ const yt = (e, t, s) => {
830
830
  maxAge: l,
831
831
  path: p = "/",
832
832
  secure: u = window.location.protocol === "https:",
833
- sameSite: $ = "lax",
833
+ sameSite: w = "lax",
834
834
  domain: v
835
835
  } = d;
836
836
  let A = `${encodeURIComponent(n)}=${encodeURIComponent(h)}`;
837
- l !== void 0 && (A += `; Max-Age=${l}`), A += `; Path=${p}`, u && (A += "; Secure"), A += `; SameSite=${$}`, v && (A += `; Domain=${v}`), document.cookie = A;
837
+ l !== void 0 && (A += `; Max-Age=${l}`), A += `; Path=${p}`, u && (A += "; Secure"), A += `; SameSite=${w}`, v && (A += `; Domain=${v}`), document.cookie = A;
838
838
  }, t = (n) => {
839
839
  const h = encodeURIComponent(n) + "=", d = document.cookie.split(";");
840
840
  for (let l = 0; l < d.length; l++) {
@@ -882,20 +882,20 @@ const yt = (e, t, s) => {
882
882
  domain: e,
883
883
  clientId: i,
884
884
  redirectUri: he(r)
885
- }, a = (w) => {
886
- const _ = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~", k = new Uint8Array(w);
885
+ }, a = ($) => {
886
+ const _ = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~", k = new Uint8Array($);
887
887
  return crypto.getRandomValues(k), Array.from(k).map((E) => _[E % _.length]).join("");
888
- }, c = async (w) => {
889
- const k = new TextEncoder().encode(w), E = await crypto.subtle.digest("SHA-256", k);
888
+ }, c = async ($) => {
889
+ const k = new TextEncoder().encode($), E = await crypto.subtle.digest("SHA-256", k);
890
890
  return btoa(String.fromCharCode(...new Uint8Array(E))).replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "");
891
891
  }, n = async () => {
892
- const w = a(128), _ = await c(w);
893
- return sessionStorage.setItem("pkce_code_verifier", w), { codeVerifier: w, codeChallenge: _ };
892
+ const $ = a(128), _ = await c($);
893
+ return sessionStorage.setItem("pkce_code_verifier", $), { codeVerifier: $, codeChallenge: _ };
894
894
  }, h = () => {
895
- const w = a(32);
896
- return sessionStorage.setItem("oauth_state", w), w;
895
+ const $ = a(32);
896
+ return sessionStorage.setItem("oauth_state", $), $;
897
897
  }, d = async () => {
898
- const { codeChallenge: w } = await n(), _ = h(), k = new URLSearchParams({
898
+ const { codeChallenge: $ } = await n(), _ = h(), k = new URLSearchParams({
899
899
  response_type: "code",
900
900
  client_id: o.clientId,
901
901
  redirect_uri: o.redirectUri,
@@ -903,15 +903,15 @@ const yt = (e, t, s) => {
903
903
  scope: "openid email profile",
904
904
  state: _,
905
905
  code_challenge_method: "S256",
906
- code_challenge: w,
906
+ code_challenge: $,
907
907
  prompt: "select_account"
908
908
  });
909
909
  return `${o.domain}/oauth2/authorize?${k.toString()}`;
910
910
  }, l = async () => {
911
- const w = await d();
912
- window.location.href = w;
911
+ const $ = await d();
912
+ window.location.href = $;
913
913
  }, p = async () => {
914
- const { codeChallenge: w } = await n(), _ = h(), k = new URLSearchParams({
914
+ const { codeChallenge: $ } = await n(), _ = h(), k = new URLSearchParams({
915
915
  response_type: "code",
916
916
  client_id: o.clientId,
917
917
  redirect_uri: o.redirectUri,
@@ -919,32 +919,32 @@ const yt = (e, t, s) => {
919
919
  scope: "openid email profile",
920
920
  state: _,
921
921
  code_challenge_method: "S256",
922
- code_challenge: w
922
+ code_challenge: $
923
923
  });
924
924
  return `${o.domain}/oauth2/authorize?${k.toString()}`;
925
925
  }, u = async () => {
926
- const w = await p();
927
- window.location.href = w;
928
- }, $ = (w) => {
926
+ const $ = await p();
927
+ window.location.href = $;
928
+ }, w = ($) => {
929
929
  const _ = sessionStorage.getItem("oauth_state");
930
- return sessionStorage.removeItem("oauth_state"), _ === w;
930
+ return sessionStorage.removeItem("oauth_state"), _ === $;
931
931
  }, v = () => {
932
- const w = sessionStorage.getItem("pkce_code_verifier");
933
- return sessionStorage.removeItem("pkce_code_verifier"), w;
932
+ const $ = sessionStorage.getItem("pkce_code_verifier");
933
+ return sessionStorage.removeItem("pkce_code_verifier"), $;
934
934
  };
935
935
  return {
936
936
  redirectToGoogleAuth: l,
937
937
  redirectToAppleAuth: u,
938
- validateState: $,
938
+ validateState: w,
939
939
  getCodeVerifier: v,
940
- exchangeCodeForTokens: async (w) => {
940
+ exchangeCodeForTokens: async ($) => {
941
941
  const _ = v();
942
942
  if (!_)
943
943
  throw new Error("PKCE code verifier not found. Please restart the authentication flow.");
944
944
  const k = new URLSearchParams({
945
945
  grant_type: "authorization_code",
946
946
  client_id: o.clientId,
947
- code: w,
947
+ code: $,
948
948
  redirect_uri: o.redirectUri,
949
949
  code_verifier: _
950
950
  }), E = await fetch(`${o.domain}/oauth2/token`, {
@@ -2115,7 +2115,7 @@ let m = class extends H {
2115
2115
  <div class="otp-section">
2116
2116
  <label class="otp-label">Enter 6-digit code</label>
2117
2117
  <div class="otp-inputs" role="group" aria-label="One time code">
2118
- ${$t(
2118
+ ${wt(
2119
2119
  Array.from({ length: 6 }, (e, t) => t),
2120
2120
  (e) => e,
2121
2121
  (e) => y`
@@ -2185,7 +2185,7 @@ let m = class extends H {
2185
2185
  <div class="otp-section">
2186
2186
  <label class="otp-label">Enter 6-digit code</label>
2187
2187
  <div class="otp-inputs" role="group" aria-label="One time code">
2188
- ${$t(
2188
+ ${wt(
2189
2189
  Array.from({ length: 6 }, (t, s) => s),
2190
2190
  (t) => t,
2191
2191
  (t) => y`
@@ -2506,7 +2506,7 @@ f([
2506
2506
  it(".modal-body")
2507
2507
  ], m.prototype, "modalBody", 2);
2508
2508
  m = f([
2509
- Zt("auth")
2509
+ Zt("auth-drawer")
2510
2510
  ], m);
2511
2511
  export {
2512
2512
  m as Auth
@@ -17,12 +17,12 @@ let st = class {
17
17
  return this.cssText;
18
18
  }
19
19
  };
20
- const ht = (r) => new st(typeof r == "string" ? r : r + "", void 0, I), at = (r, ...t) => {
21
- const e = r.length === 1 ? r[0] : t.reduce(((s, i, n) => s + ((o) => {
22
- if (o._$cssResult$ === !0) return o.cssText;
23
- if (typeof o == "number") return o;
24
- throw Error("Value passed to 'css' function must be a 'css' function result: " + o + ". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.");
25
- })(i) + r[n + 1]), r[0]);
20
+ const at = (r) => new st(typeof r == "string" ? r : r + "", void 0, I), ht = (r, ...t) => {
21
+ const e = r.length === 1 ? r[0] : t.reduce(((s, i, o) => s + ((n) => {
22
+ if (n._$cssResult$ === !0) return n.cssText;
23
+ if (typeof n == "number") return n;
24
+ throw Error("Value passed to 'css' function must be a 'css' function result: " + n + ". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.");
25
+ })(i) + r[o + 1]), r[0]);
26
26
  return new st(e, r, I);
27
27
  }, lt = (r, t) => {
28
28
  if (L) r.adoptedStyleSheets = t.map(((e) => e instanceof CSSStyleSheet ? e : e.styleSheet));
@@ -33,7 +33,7 @@ const ht = (r) => new st(typeof r == "string" ? r : r + "", void 0, I), at = (r,
33
33
  }, J = L ? (r) => r : (r) => r instanceof CSSStyleSheet ? ((t) => {
34
34
  let e = "";
35
35
  for (const s of t.cssRules) e += s.cssText;
36
- return ht(e);
36
+ return at(e);
37
37
  })(r) : r;
38
38
  const { is: ct, defineProperty: dt, getOwnPropertyDescriptor: pt, getOwnPropertyNames: ut, getOwnPropertySymbols: $t, getPrototypeOf: mt } = Object, N = globalThis, Z = N.trustedTypes, gt = Z ? Z.emptyScript : "", ft = N.reactiveElementPolyfillSupport, w = (r, t) => r, H = { toAttribute(r, t) {
39
39
  switch (t) {
@@ -65,7 +65,7 @@ const { is: ct, defineProperty: dt, getOwnPropertyDescriptor: pt, getOwnProperty
65
65
  return e;
66
66
  } }, B = (r, t) => !ct(r, t), F = { attribute: !0, type: String, converter: H, reflect: !1, useDefault: !1, hasChanged: B };
67
67
  Symbol.metadata ??= Symbol("metadata"), N.litPropertyMetadata ??= /* @__PURE__ */ new WeakMap();
68
- let A = class extends HTMLElement {
68
+ let b = class extends HTMLElement {
69
69
  static addInitializer(t) {
70
70
  this._$Ei(), (this.l ??= []).push(t);
71
71
  }
@@ -79,14 +79,14 @@ let A = class extends HTMLElement {
79
79
  }
80
80
  }
81
81
  static getPropertyDescriptor(t, e, s) {
82
- const { get: i, set: n } = pt(this.prototype, t) ?? { get() {
82
+ const { get: i, set: o } = pt(this.prototype, t) ?? { get() {
83
83
  return this[e];
84
- }, set(o) {
85
- this[e] = o;
84
+ }, set(n) {
85
+ this[e] = n;
86
86
  } };
87
- return { get: i, set(o) {
88
- const a = i?.call(this);
89
- n?.call(this, o), this.requestUpdate(t, a, s);
87
+ return { get: i, set(n) {
88
+ const h = i?.call(this);
89
+ o?.call(this, n), this.requestUpdate(t, h, s);
90
90
  }, configurable: !0, enumerable: !0 };
91
91
  }
92
92
  static getPropertyOptions(t) {
@@ -162,29 +162,29 @@ let A = class extends HTMLElement {
162
162
  _$ET(t, e) {
163
163
  const s = this.constructor.elementProperties.get(t), i = this.constructor._$Eu(t, s);
164
164
  if (i !== void 0 && s.reflect === !0) {
165
- const n = (s.converter?.toAttribute !== void 0 ? s.converter : H).toAttribute(e, s.type);
166
- this._$Em = t, n == null ? this.removeAttribute(i) : this.setAttribute(i, n), this._$Em = null;
165
+ const o = (s.converter?.toAttribute !== void 0 ? s.converter : H).toAttribute(e, s.type);
166
+ this._$Em = t, o == null ? this.removeAttribute(i) : this.setAttribute(i, o), this._$Em = null;
167
167
  }
168
168
  }
169
169
  _$AK(t, e) {
170
170
  const s = this.constructor, i = s._$Eh.get(t);
171
171
  if (i !== void 0 && this._$Em !== i) {
172
- const n = s.getPropertyOptions(i), o = typeof n.converter == "function" ? { fromAttribute: n.converter } : n.converter?.fromAttribute !== void 0 ? n.converter : H;
172
+ const o = s.getPropertyOptions(i), n = typeof o.converter == "function" ? { fromAttribute: o.converter } : o.converter?.fromAttribute !== void 0 ? o.converter : H;
173
173
  this._$Em = i;
174
- const a = o.fromAttribute(e, n.type);
175
- this[i] = a ?? this._$Ej?.get(i) ?? a, this._$Em = null;
174
+ const h = n.fromAttribute(e, o.type);
175
+ this[i] = h ?? this._$Ej?.get(i) ?? h, this._$Em = null;
176
176
  }
177
177
  }
178
178
  requestUpdate(t, e, s) {
179
179
  if (t !== void 0) {
180
- const i = this.constructor, n = this[t];
181
- if (s ??= i.getPropertyOptions(t), !((s.hasChanged ?? B)(n, e) || s.useDefault && s.reflect && n === this._$Ej?.get(t) && !this.hasAttribute(i._$Eu(t, s)))) return;
180
+ const i = this.constructor, o = this[t];
181
+ if (s ??= i.getPropertyOptions(t), !((s.hasChanged ?? B)(o, e) || s.useDefault && s.reflect && o === this._$Ej?.get(t) && !this.hasAttribute(i._$Eu(t, s)))) return;
182
182
  this.C(t, e, s);
183
183
  }
184
184
  this.isUpdatePending === !1 && (this._$ES = this._$EP());
185
185
  }
186
- C(t, e, { useDefault: s, reflect: i, wrapped: n }, o) {
187
- s && !(this._$Ej ??= /* @__PURE__ */ new Map()).has(t) && (this._$Ej.set(t, o ?? e ?? this[t]), n !== !0 || o !== void 0) || (this._$AL.has(t) || (this.hasUpdated || s || (e = void 0), this._$AL.set(t, e)), i === !0 && this._$Em !== t && (this._$Eq ??= /* @__PURE__ */ new Set()).add(t));
186
+ C(t, e, { useDefault: s, reflect: i, wrapped: o }, n) {
187
+ s && !(this._$Ej ??= /* @__PURE__ */ new Map()).has(t) && (this._$Ej.set(t, n ?? e ?? this[t]), o !== !0 || n !== void 0) || (this._$AL.has(t) || (this.hasUpdated || s || (e = void 0), this._$AL.set(t, e)), i === !0 && this._$Em !== t && (this._$Eq ??= /* @__PURE__ */ new Set()).add(t));
188
188
  }
189
189
  async _$EP() {
190
190
  this.isUpdatePending = !0;
@@ -203,13 +203,13 @@ let A = class extends HTMLElement {
203
203
  if (!this.isUpdatePending) return;
204
204
  if (!this.hasUpdated) {
205
205
  if (this.renderRoot ??= this.createRenderRoot(), this._$Ep) {
206
- for (const [i, n] of this._$Ep) this[i] = n;
206
+ for (const [i, o] of this._$Ep) this[i] = o;
207
207
  this._$Ep = void 0;
208
208
  }
209
209
  const s = this.constructor.elementProperties;
210
- if (s.size > 0) for (const [i, n] of s) {
211
- const { wrapped: o } = n, a = this[i];
212
- o !== !0 || this._$AL.has(i) || a === void 0 || this.C(i, void 0, n, a);
210
+ if (s.size > 0) for (const [i, o] of s) {
211
+ const { wrapped: n } = o, h = this[i];
212
+ n !== !0 || this._$AL.has(i) || h === void 0 || this.C(i, void 0, o, h);
213
213
  }
214
214
  }
215
215
  let t = !1;
@@ -246,56 +246,56 @@ let A = class extends HTMLElement {
246
246
  firstUpdated(t) {
247
247
  }
248
248
  };
249
- A.elementStyles = [], A.shadowRootOptions = { mode: "open" }, A[w("elementProperties")] = /* @__PURE__ */ new Map(), A[w("finalized")] = /* @__PURE__ */ new Map(), ft?.({ ReactiveElement: A }), (N.reactiveElementVersions ??= []).push("2.1.1");
249
+ b.elementStyles = [], b.shadowRootOptions = { mode: "open" }, b[w("elementProperties")] = /* @__PURE__ */ new Map(), b[w("finalized")] = /* @__PURE__ */ new Map(), ft?.({ ReactiveElement: b }), (N.reactiveElementVersions ??= []).push("2.1.1");
250
250
  const V = globalThis, z = V.trustedTypes, G = z ? z.createPolicy("lit-html", { createHTML: (r) => r }) : void 0, it = "$lit$", m = `lit$${Math.random().toFixed(9).slice(2)}$`, rt = "?" + m, _t = `<${rt}>`, y = document, P = () => y.createComment(""), x = (r) => r === null || typeof r != "object" && typeof r != "function", q = Array.isArray, yt = (r) => q(r) || typeof r?.[Symbol.iterator] == "function", D = `[
251
251
  \f\r]`, S = /<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g, Q = /-->/g, X = />/g, f = RegExp(`>|${D}(?:([^\\s"'>=/]+)(${D}*=${D}*(?:[^
252
- \f\r"'\`<>=]|("|')|))|$)`, "g"), Y = /'/g, tt = /"/g, nt = /^(?:script|style|textarea|title)$/i, At = (r) => (t, ...e) => ({ _$litType$: r, strings: t, values: e }), j = At(1), v = Symbol.for("lit-noChange"), d = Symbol.for("lit-nothing"), et = /* @__PURE__ */ new WeakMap(), _ = y.createTreeWalker(y, 129);
253
- function ot(r, t) {
252
+ \f\r"'\`<>=]|("|')|))|$)`, "g"), Y = /'/g, tt = /"/g, ot = /^(?:script|style|textarea|title)$/i, bt = (r) => (t, ...e) => ({ _$litType$: r, strings: t, values: e }), j = bt(1), v = Symbol.for("lit-noChange"), d = Symbol.for("lit-nothing"), et = /* @__PURE__ */ new WeakMap(), _ = y.createTreeWalker(y, 129);
253
+ function nt(r, t) {
254
254
  if (!q(r) || !r.hasOwnProperty("raw")) throw Error("invalid template strings array");
255
255
  return G !== void 0 ? G.createHTML(t) : t;
256
256
  }
257
257
  const vt = (r, t) => {
258
258
  const e = r.length - 1, s = [];
259
- let i, n = t === 2 ? "<svg>" : t === 3 ? "<math>" : "", o = S;
260
- for (let a = 0; a < e; a++) {
261
- const h = r[a];
259
+ let i, o = t === 2 ? "<svg>" : t === 3 ? "<math>" : "", n = S;
260
+ for (let h = 0; h < e; h++) {
261
+ const a = r[h];
262
262
  let c, p, l = -1, u = 0;
263
- for (; u < h.length && (o.lastIndex = u, p = o.exec(h), p !== null); ) u = o.lastIndex, o === S ? p[1] === "!--" ? o = Q : p[1] !== void 0 ? o = X : p[2] !== void 0 ? (nt.test(p[2]) && (i = RegExp("</" + p[2], "g")), o = f) : p[3] !== void 0 && (o = f) : o === f ? p[0] === ">" ? (o = i ?? S, l = -1) : p[1] === void 0 ? l = -2 : (l = o.lastIndex - p[2].length, c = p[1], o = p[3] === void 0 ? f : p[3] === '"' ? tt : Y) : o === tt || o === Y ? o = f : o === Q || o === X ? o = S : (o = f, i = void 0);
264
- const $ = o === f && r[a + 1].startsWith("/>") ? " " : "";
265
- n += o === S ? h + _t : l >= 0 ? (s.push(c), h.slice(0, l) + it + h.slice(l) + m + $) : h + m + (l === -2 ? a : $);
263
+ for (; u < a.length && (n.lastIndex = u, p = n.exec(a), p !== null); ) u = n.lastIndex, n === S ? p[1] === "!--" ? n = Q : p[1] !== void 0 ? n = X : p[2] !== void 0 ? (ot.test(p[2]) && (i = RegExp("</" + p[2], "g")), n = f) : p[3] !== void 0 && (n = f) : n === f ? p[0] === ">" ? (n = i ?? S, l = -1) : p[1] === void 0 ? l = -2 : (l = n.lastIndex - p[2].length, c = p[1], n = p[3] === void 0 ? f : p[3] === '"' ? tt : Y) : n === tt || n === Y ? n = f : n === Q || n === X ? n = S : (n = f, i = void 0);
264
+ const $ = n === f && r[h + 1].startsWith("/>") ? " " : "";
265
+ o += n === S ? a + _t : l >= 0 ? (s.push(c), a.slice(0, l) + it + a.slice(l) + m + $) : a + m + (l === -2 ? h : $);
266
266
  }
267
- return [ot(r, n + (r[e] || "<?>") + (t === 2 ? "</svg>" : t === 3 ? "</math>" : "")), s];
267
+ return [nt(r, o + (r[e] || "<?>") + (t === 2 ? "</svg>" : t === 3 ? "</math>" : "")), s];
268
268
  };
269
- class O {
269
+ class k {
270
270
  constructor({ strings: t, _$litType$: e }, s) {
271
271
  let i;
272
272
  this.parts = [];
273
- let n = 0, o = 0;
274
- const a = t.length - 1, h = this.parts, [c, p] = vt(t, e);
275
- if (this.el = O.createElement(c, s), _.currentNode = this.el.content, e === 2 || e === 3) {
273
+ let o = 0, n = 0;
274
+ const h = t.length - 1, a = this.parts, [c, p] = vt(t, e);
275
+ if (this.el = k.createElement(c, s), _.currentNode = this.el.content, e === 2 || e === 3) {
276
276
  const l = this.el.content.firstChild;
277
277
  l.replaceWith(...l.childNodes);
278
278
  }
279
- for (; (i = _.nextNode()) !== null && h.length < a; ) {
279
+ for (; (i = _.nextNode()) !== null && a.length < h; ) {
280
280
  if (i.nodeType === 1) {
281
281
  if (i.hasAttributes()) for (const l of i.getAttributeNames()) if (l.endsWith(it)) {
282
- const u = p[o++], $ = i.getAttribute(l).split(m), k = /([.?@])?(.*)/.exec(u);
283
- h.push({ type: 1, index: n, name: k[2], strings: $, ctor: k[1] === "." ? Et : k[1] === "?" ? St : k[1] === "@" ? wt : R }), i.removeAttribute(l);
284
- } else l.startsWith(m) && (h.push({ type: 6, index: n }), i.removeAttribute(l));
285
- if (nt.test(i.tagName)) {
282
+ const u = p[n++], $ = i.getAttribute(l).split(m), T = /([.?@])?(.*)/.exec(u);
283
+ a.push({ type: 1, index: o, name: T[2], strings: $, ctor: T[1] === "." ? Et : T[1] === "?" ? St : T[1] === "@" ? wt : R }), i.removeAttribute(l);
284
+ } else l.startsWith(m) && (a.push({ type: 6, index: o }), i.removeAttribute(l));
285
+ if (ot.test(i.tagName)) {
286
286
  const l = i.textContent.split(m), u = l.length - 1;
287
287
  if (u > 0) {
288
288
  i.textContent = z ? z.emptyScript : "";
289
- for (let $ = 0; $ < u; $++) i.append(l[$], P()), _.nextNode(), h.push({ type: 2, index: ++n });
289
+ for (let $ = 0; $ < u; $++) i.append(l[$], P()), _.nextNode(), a.push({ type: 2, index: ++o });
290
290
  i.append(l[u], P());
291
291
  }
292
292
  }
293
- } else if (i.nodeType === 8) if (i.data === rt) h.push({ type: 2, index: n });
293
+ } else if (i.nodeType === 8) if (i.data === rt) a.push({ type: 2, index: o });
294
294
  else {
295
295
  let l = -1;
296
- for (; (l = i.data.indexOf(m, l + 1)) !== -1; ) h.push({ type: 7, index: n }), l += m.length - 1;
296
+ for (; (l = i.data.indexOf(m, l + 1)) !== -1; ) a.push({ type: 7, index: o }), l += m.length - 1;
297
297
  }
298
- n++;
298
+ o++;
299
299
  }
300
300
  }
301
301
  static createElement(t, e) {
@@ -303,13 +303,13 @@ class O {
303
303
  return s.innerHTML = t, s;
304
304
  }
305
305
  }
306
- function b(r, t, e = r, s) {
306
+ function A(r, t, e = r, s) {
307
307
  if (t === v) return t;
308
308
  let i = s !== void 0 ? e._$Co?.[s] : e._$Cl;
309
- const n = x(t) ? void 0 : t._$litDirective$;
310
- return i?.constructor !== n && (i?._$AO?.(!1), n === void 0 ? i = void 0 : (i = new n(r), i._$AT(r, e, s)), s !== void 0 ? (e._$Co ??= [])[s] = i : e._$Cl = i), i !== void 0 && (t = b(r, i._$AS(r, t.values), i, s)), t;
309
+ const o = x(t) ? void 0 : t._$litDirective$;
310
+ return i?.constructor !== o && (i?._$AO?.(!1), o === void 0 ? i = void 0 : (i = new o(r), i._$AT(r, e, s)), s !== void 0 ? (e._$Co ??= [])[s] = i : e._$Cl = i), i !== void 0 && (t = A(r, i._$AS(r, t.values), i, s)), t;
311
311
  }
312
- class bt {
312
+ class At {
313
313
  constructor(t, e) {
314
314
  this._$AV = [], this._$AN = void 0, this._$AD = t, this._$AM = e;
315
315
  }
@@ -322,13 +322,13 @@ class bt {
322
322
  u(t) {
323
323
  const { el: { content: e }, parts: s } = this._$AD, i = (t?.creationScope ?? y).importNode(e, !0);
324
324
  _.currentNode = i;
325
- let n = _.nextNode(), o = 0, a = 0, h = s[0];
326
- for (; h !== void 0; ) {
327
- if (o === h.index) {
325
+ let o = _.nextNode(), n = 0, h = 0, a = s[0];
326
+ for (; a !== void 0; ) {
327
+ if (n === a.index) {
328
328
  let c;
329
- h.type === 2 ? c = new U(n, n.nextSibling, this, t) : h.type === 1 ? c = new h.ctor(n, h.name, h.strings, this, t) : h.type === 6 && (c = new Ct(n, this, t)), this._$AV.push(c), h = s[++a];
329
+ a.type === 2 ? c = new O(o, o.nextSibling, this, t) : a.type === 1 ? c = new a.ctor(o, a.name, a.strings, this, t) : a.type === 6 && (c = new Ct(o, this, t)), this._$AV.push(c), a = s[++h];
330
330
  }
331
- o !== h?.index && (n = _.nextNode(), o++);
331
+ n !== a?.index && (o = _.nextNode(), n++);
332
332
  }
333
333
  return _.currentNode = y, i;
334
334
  }
@@ -337,7 +337,7 @@ class bt {
337
337
  for (const s of this._$AV) s !== void 0 && (s.strings !== void 0 ? (s._$AI(t, s, e), e += s.strings.length - 2) : s._$AI(t[e])), e++;
338
338
  }
339
339
  }
340
- class U {
340
+ class O {
341
341
  get _$AU() {
342
342
  return this._$AM?._$AU ?? this._$Cv;
343
343
  }
@@ -356,7 +356,7 @@ class U {
356
356
  return this._$AB;
357
357
  }
358
358
  _$AI(t, e = this) {
359
- t = b(this, t, e), x(t) ? t === d || t == null || t === "" ? (this._$AH !== d && this._$AR(), this._$AH = d) : t !== this._$AH && t !== v && this._(t) : t._$litType$ !== void 0 ? this.$(t) : t.nodeType !== void 0 ? this.T(t) : yt(t) ? this.k(t) : this._(t);
359
+ t = A(this, t, e), x(t) ? t === d || t == null || t === "" ? (this._$AH !== d && this._$AR(), this._$AH = d) : t !== this._$AH && t !== v && this._(t) : t._$litType$ !== void 0 ? this.$(t) : t.nodeType !== void 0 ? this.T(t) : yt(t) ? this.k(t) : this._(t);
360
360
  }
361
361
  O(t) {
362
362
  return this._$AA.parentNode.insertBefore(t, this._$AB);
@@ -368,22 +368,22 @@ class U {
368
368
  this._$AH !== d && x(this._$AH) ? this._$AA.nextSibling.data = t : this.T(y.createTextNode(t)), this._$AH = t;
369
369
  }
370
370
  $(t) {
371
- const { values: e, _$litType$: s } = t, i = typeof s == "number" ? this._$AC(t) : (s.el === void 0 && (s.el = O.createElement(ot(s.h, s.h[0]), this.options)), s);
371
+ const { values: e, _$litType$: s } = t, i = typeof s == "number" ? this._$AC(t) : (s.el === void 0 && (s.el = k.createElement(nt(s.h, s.h[0]), this.options)), s);
372
372
  if (this._$AH?._$AD === i) this._$AH.p(e);
373
373
  else {
374
- const n = new bt(i, this), o = n.u(this.options);
375
- n.p(e), this.T(o), this._$AH = n;
374
+ const o = new At(i, this), n = o.u(this.options);
375
+ o.p(e), this.T(n), this._$AH = o;
376
376
  }
377
377
  }
378
378
  _$AC(t) {
379
379
  let e = et.get(t.strings);
380
- return e === void 0 && et.set(t.strings, e = new O(t)), e;
380
+ return e === void 0 && et.set(t.strings, e = new k(t)), e;
381
381
  }
382
382
  k(t) {
383
383
  q(this._$AH) || (this._$AH = [], this._$AR());
384
384
  const e = this._$AH;
385
385
  let s, i = 0;
386
- for (const n of t) i === e.length ? e.push(s = new U(this.O(P()), this.O(P()), this, this.options)) : s = e[i], s._$AI(n), i++;
386
+ for (const o of t) i === e.length ? e.push(s = new O(this.O(P()), this.O(P()), this, this.options)) : s = e[i], s._$AI(o), i++;
387
387
  i < e.length && (this._$AR(s && s._$AB.nextSibling, i), e.length = i);
388
388
  }
389
389
  _$AR(t = this._$AA.nextSibling, e) {
@@ -403,19 +403,19 @@ class R {
403
403
  get _$AU() {
404
404
  return this._$AM._$AU;
405
405
  }
406
- constructor(t, e, s, i, n) {
407
- this.type = 1, this._$AH = d, this._$AN = void 0, this.element = t, this.name = e, this._$AM = i, this.options = n, s.length > 2 || s[0] !== "" || s[1] !== "" ? (this._$AH = Array(s.length - 1).fill(new String()), this.strings = s) : this._$AH = d;
406
+ constructor(t, e, s, i, o) {
407
+ this.type = 1, this._$AH = d, this._$AN = void 0, this.element = t, this.name = e, this._$AM = i, this.options = o, s.length > 2 || s[0] !== "" || s[1] !== "" ? (this._$AH = Array(s.length - 1).fill(new String()), this.strings = s) : this._$AH = d;
408
408
  }
409
409
  _$AI(t, e = this, s, i) {
410
- const n = this.strings;
411
- let o = !1;
412
- if (n === void 0) t = b(this, t, e, 0), o = !x(t) || t !== this._$AH && t !== v, o && (this._$AH = t);
410
+ const o = this.strings;
411
+ let n = !1;
412
+ if (o === void 0) t = A(this, t, e, 0), n = !x(t) || t !== this._$AH && t !== v, n && (this._$AH = t);
413
413
  else {
414
- const a = t;
415
- let h, c;
416
- for (t = n[0], h = 0; h < n.length - 1; h++) c = b(this, a[s + h], e, h), c === v && (c = this._$AH[h]), o ||= !x(c) || c !== this._$AH[h], c === d ? t = d : t !== d && (t += (c ?? "") + n[h + 1]), this._$AH[h] = c;
414
+ const h = t;
415
+ let a, c;
416
+ for (t = o[0], a = 0; a < o.length - 1; a++) c = A(this, h[s + a], e, a), c === v && (c = this._$AH[a]), n ||= !x(c) || c !== this._$AH[a], c === d ? t = d : t !== d && (t += (c ?? "") + o[a + 1]), this._$AH[a] = c;
417
417
  }
418
- o && !i && this.j(t);
418
+ n && !i && this.j(t);
419
419
  }
420
420
  j(t) {
421
421
  t === d ? this.element.removeAttribute(this.name) : this.element.setAttribute(this.name, t ?? "");
@@ -438,13 +438,13 @@ class St extends R {
438
438
  }
439
439
  }
440
440
  class wt extends R {
441
- constructor(t, e, s, i, n) {
442
- super(t, e, s, i, n), this.type = 5;
441
+ constructor(t, e, s, i, o) {
442
+ super(t, e, s, i, o), this.type = 5;
443
443
  }
444
444
  _$AI(t, e = this) {
445
- if ((t = b(this, t, e, 0) ?? d) === v) return;
446
- const s = this._$AH, i = t === d && s !== d || t.capture !== s.capture || t.once !== s.once || t.passive !== s.passive, n = t !== d && (s === d || i);
447
- i && this.element.removeEventListener(this.name, this, s), n && this.element.addEventListener(this.name, this, t), this._$AH = t;
445
+ if ((t = A(this, t, e, 0) ?? d) === v) return;
446
+ const s = this._$AH, i = t === d && s !== d || t.capture !== s.capture || t.once !== s.once || t.passive !== s.passive, o = t !== d && (s === d || i);
447
+ i && this.element.removeEventListener(this.name, this, s), o && this.element.addEventListener(this.name, this, t), this._$AH = t;
448
448
  }
449
449
  handleEvent(t) {
450
450
  typeof this._$AH == "function" ? this._$AH.call(this.options?.host ?? this.element, t) : this._$AH.handleEvent(t);
@@ -458,22 +458,22 @@ class Ct {
458
458
  return this._$AM._$AU;
459
459
  }
460
460
  _$AI(t) {
461
- b(this, t);
461
+ A(this, t);
462
462
  }
463
463
  }
464
464
  const Pt = V.litHtmlPolyfillSupport;
465
- Pt?.(O, U), (V.litHtmlVersions ??= []).push("3.3.1");
465
+ Pt?.(k, O), (V.litHtmlVersions ??= []).push("3.3.1");
466
466
  const xt = (r, t, e) => {
467
467
  const s = e?.renderBefore ?? t;
468
468
  let i = s._$litPart$;
469
469
  if (i === void 0) {
470
- const n = e?.renderBefore ?? null;
471
- s._$litPart$ = i = new U(t.insertBefore(P(), n), n, void 0, e ?? {});
470
+ const o = e?.renderBefore ?? null;
471
+ s._$litPart$ = i = new O(t.insertBefore(P(), o), o, void 0, e ?? {});
472
472
  }
473
473
  return i._$AI(r), i;
474
474
  };
475
475
  const W = globalThis;
476
- class C extends A {
476
+ class C extends b {
477
477
  constructor() {
478
478
  super(...arguments), this.renderOptions = { host: this }, this._$Do = void 0;
479
479
  }
@@ -496,47 +496,47 @@ class C extends A {
496
496
  }
497
497
  }
498
498
  C._$litElement$ = !0, C.finalized = !0, W.litElementHydrateSupport?.({ LitElement: C });
499
- const Ot = W.litElementPolyfillSupport;
500
- Ot?.({ LitElement: C });
499
+ const kt = W.litElementPolyfillSupport;
500
+ kt?.({ LitElement: C });
501
501
  (W.litElementVersions ??= []).push("4.2.1");
502
- const Ut = (r) => (t, e) => {
502
+ const Ot = (r) => (t, e) => {
503
503
  e !== void 0 ? e.addInitializer((() => {
504
504
  customElements.define(r, t);
505
505
  })) : customElements.define(r, t);
506
506
  };
507
- const Tt = { attribute: !0, type: String, converter: H, reflect: !1, hasChanged: B }, kt = (r = Tt, t, e) => {
507
+ const Ut = { attribute: !0, type: String, converter: H, reflect: !1, hasChanged: B }, Tt = (r = Ut, t, e) => {
508
508
  const { kind: s, metadata: i } = e;
509
- let n = globalThis.litPropertyMetadata.get(i);
510
- if (n === void 0 && globalThis.litPropertyMetadata.set(i, n = /* @__PURE__ */ new Map()), s === "setter" && ((r = Object.create(r)).wrapped = !0), n.set(e.name, r), s === "accessor") {
511
- const { name: o } = e;
512
- return { set(a) {
513
- const h = t.get.call(this);
514
- t.set.call(this, a), this.requestUpdate(o, h, r);
515
- }, init(a) {
516
- return a !== void 0 && this.C(o, void 0, r, a), a;
509
+ let o = globalThis.litPropertyMetadata.get(i);
510
+ if (o === void 0 && globalThis.litPropertyMetadata.set(i, o = /* @__PURE__ */ new Map()), s === "setter" && ((r = Object.create(r)).wrapped = !0), o.set(e.name, r), s === "accessor") {
511
+ const { name: n } = e;
512
+ return { set(h) {
513
+ const a = t.get.call(this);
514
+ t.set.call(this, h), this.requestUpdate(n, a, r);
515
+ }, init(h) {
516
+ return h !== void 0 && this.C(n, void 0, r, h), h;
517
517
  } };
518
518
  }
519
519
  if (s === "setter") {
520
- const { name: o } = e;
521
- return function(a) {
522
- const h = this[o];
523
- t.call(this, a), this.requestUpdate(o, h, r);
520
+ const { name: n } = e;
521
+ return function(h) {
522
+ const a = this[n];
523
+ t.call(this, h), this.requestUpdate(n, a, r);
524
524
  };
525
525
  }
526
526
  throw Error("Unsupported decorator location: " + s);
527
527
  };
528
- function T(r) {
529
- return (t, e) => typeof e == "object" ? kt(r, t, e) : ((s, i, n) => {
530
- const o = i.hasOwnProperty(n);
531
- return i.constructor.createProperty(n, s), o ? Object.getOwnPropertyDescriptor(i, n) : void 0;
528
+ function U(r) {
529
+ return (t, e) => typeof e == "object" ? Tt(r, t, e) : ((s, i, o) => {
530
+ const n = i.hasOwnProperty(o);
531
+ return i.constructor.createProperty(o, s), n ? Object.getOwnPropertyDescriptor(i, o) : void 0;
532
532
  })(r, t, e);
533
533
  }
534
534
  function Mt(r) {
535
- return T({ ...r, state: !0, attribute: !1 });
535
+ return U({ ...r, state: !0, attribute: !1 });
536
536
  }
537
537
  var Ht = Object.defineProperty, zt = Object.getOwnPropertyDescriptor, E = (r, t, e, s) => {
538
- for (var i = s > 1 ? void 0 : s ? zt(t, e) : t, n = r.length - 1, o; n >= 0; n--)
539
- (o = r[n]) && (i = (s ? o(t, e, i) : o(i)) || i);
538
+ for (var i = s > 1 ? void 0 : s ? zt(t, e) : t, o = r.length - 1, n; o >= 0; o--)
539
+ (n = r[o]) && (i = (s ? n(t, e, i) : n(i)) || i);
540
540
  return s && i && Ht(t, e, i), i;
541
541
  };
542
542
  let g = class extends C {
@@ -614,7 +614,7 @@ let g = class extends C {
614
614
  `;
615
615
  }
616
616
  };
617
- g.styles = at`
617
+ g.styles = ht`
618
618
  :host {
619
619
  display: inline-block;
620
620
  }
@@ -632,11 +632,16 @@ g.styles = at`
632
632
  font-weight: 500;
633
633
  position: relative;
634
634
  overflow: hidden;
635
+ color: inherit;
635
636
  }
636
637
 
637
638
  .theme-toggle:focus {
638
639
  outline: none;
639
- box-shadow: 0 0 0 3px rgba(66, 153, 225, 0.5);
640
+ }
641
+
642
+ .theme-toggle:focus-visible {
643
+ outline: 2px solid transparent;
644
+ outline-offset: 2px;
640
645
  }
641
646
 
642
647
  .theme-toggle:hover {
@@ -660,22 +665,25 @@ g.styles = at`
660
665
  padding: 1rem;
661
666
  }
662
667
 
663
- /* Variant styles */
668
+ /* Variant styles - Light mode */
664
669
  .btn--ghost {
665
670
  background: transparent;
671
+ border: none;
666
672
  }
667
673
 
668
674
  .btn--ghost:hover {
669
- background: rgba(0, 0, 0, 0.05);
675
+ background: transparent;
676
+ opacity: 0.7;
670
677
  }
671
678
 
672
679
  .btn--outline {
673
- border: 1px solid currentColor;
680
+ border: 1px solid rgba(0, 0, 0, 0.2);
674
681
  background: transparent;
675
682
  }
676
683
 
677
684
  .btn--outline:hover {
678
685
  background: rgba(0, 0, 0, 0.05);
686
+ border-color: rgba(0, 0, 0, 0.3);
679
687
  }
680
688
 
681
689
  .btn--solid {
@@ -686,6 +694,29 @@ g.styles = at`
686
694
  background: rgba(0, 0, 0, 0.15);
687
695
  }
688
696
 
697
+ /* Dark mode adaptations */
698
+ :host([theme="dark"]) .btn--ghost:hover {
699
+ background: transparent;
700
+ opacity: 0.7;
701
+ }
702
+
703
+ :host([theme="dark"]) .btn--outline {
704
+ border-color: rgba(255, 255, 255, 0.2);
705
+ }
706
+
707
+ :host([theme="dark"]) .btn--outline:hover {
708
+ background: rgba(255, 255, 255, 0.1);
709
+ border-color: rgba(255, 255, 255, 0.3);
710
+ }
711
+
712
+ :host([theme="dark"]) .btn--solid {
713
+ background: rgba(255, 255, 255, 0.1);
714
+ }
715
+
716
+ :host([theme="dark"]) .btn--solid:hover {
717
+ background: rgba(255, 255, 255, 0.15);
718
+ }
719
+
689
720
  .theme-icon {
690
721
  width: 1.25rem;
691
722
  height: 1.25rem;
@@ -734,22 +765,22 @@ g.styles = at`
734
765
  }
735
766
  `;
736
767
  E([
737
- T({ type: String, reflect: !0 })
768
+ U({ type: String, reflect: !0 })
738
769
  ], g.prototype, "theme", 2);
739
770
  E([
740
- T({ type: String, attribute: "storage-key" })
771
+ U({ type: String, attribute: "storage-key" })
741
772
  ], g.prototype, "storageKey", 2);
742
773
  E([
743
- T({ type: String, attribute: "size" })
774
+ U({ type: String, attribute: "size" })
744
775
  ], g.prototype, "size", 2);
745
776
  E([
746
- T({ type: String, attribute: "variant" })
777
+ U({ type: String, attribute: "variant" })
747
778
  ], g.prototype, "variant", 2);
748
779
  E([
749
780
  Mt()
750
781
  ], g.prototype, "isDark", 2);
751
782
  g = E([
752
- Ut("cals-theme-toggle")
783
+ Ot("theme-toggle")
753
784
  ], g);
754
785
  export {
755
786
  g as ThemeToggle
package/dist/index.js CHANGED
@@ -2506,7 +2506,7 @@ v([
2506
2506
  tt(".modal-body")
2507
2507
  ], A.prototype, "modalBody", 2);
2508
2508
  A = v([
2509
- Gt("auth")
2509
+ Gt("auth-drawer")
2510
2510
  ], A);
2511
2511
  var hr = Object.defineProperty, dr = Object.getOwnPropertyDescriptor, ie = (t, e, s, r) => {
2512
2512
  for (var i = r > 1 ? void 0 : r ? dr(e, s) : e, o = t.length - 1, n; o >= 0; o--)
@@ -2606,11 +2606,16 @@ F.styles = Kt`
2606
2606
  font-weight: 500;
2607
2607
  position: relative;
2608
2608
  overflow: hidden;
2609
+ color: inherit;
2609
2610
  }
2610
2611
 
2611
2612
  .theme-toggle:focus {
2612
2613
  outline: none;
2613
- box-shadow: 0 0 0 3px rgba(66, 153, 225, 0.5);
2614
+ }
2615
+
2616
+ .theme-toggle:focus-visible {
2617
+ outline: 2px solid transparent;
2618
+ outline-offset: 2px;
2614
2619
  }
2615
2620
 
2616
2621
  .theme-toggle:hover {
@@ -2634,22 +2639,25 @@ F.styles = Kt`
2634
2639
  padding: 1rem;
2635
2640
  }
2636
2641
 
2637
- /* Variant styles */
2642
+ /* Variant styles - Light mode */
2638
2643
  .btn--ghost {
2639
2644
  background: transparent;
2645
+ border: none;
2640
2646
  }
2641
2647
 
2642
2648
  .btn--ghost:hover {
2643
- background: rgba(0, 0, 0, 0.05);
2649
+ background: transparent;
2650
+ opacity: 0.7;
2644
2651
  }
2645
2652
 
2646
2653
  .btn--outline {
2647
- border: 1px solid currentColor;
2654
+ border: 1px solid rgba(0, 0, 0, 0.2);
2648
2655
  background: transparent;
2649
2656
  }
2650
2657
 
2651
2658
  .btn--outline:hover {
2652
2659
  background: rgba(0, 0, 0, 0.05);
2660
+ border-color: rgba(0, 0, 0, 0.3);
2653
2661
  }
2654
2662
 
2655
2663
  .btn--solid {
@@ -2660,6 +2668,29 @@ F.styles = Kt`
2660
2668
  background: rgba(0, 0, 0, 0.15);
2661
2669
  }
2662
2670
 
2671
+ /* Dark mode adaptations */
2672
+ :host([theme="dark"]) .btn--ghost:hover {
2673
+ background: transparent;
2674
+ opacity: 0.7;
2675
+ }
2676
+
2677
+ :host([theme="dark"]) .btn--outline {
2678
+ border-color: rgba(255, 255, 255, 0.2);
2679
+ }
2680
+
2681
+ :host([theme="dark"]) .btn--outline:hover {
2682
+ background: rgba(255, 255, 255, 0.1);
2683
+ border-color: rgba(255, 255, 255, 0.3);
2684
+ }
2685
+
2686
+ :host([theme="dark"]) .btn--solid {
2687
+ background: rgba(255, 255, 255, 0.1);
2688
+ }
2689
+
2690
+ :host([theme="dark"]) .btn--solid:hover {
2691
+ background: rgba(255, 255, 255, 0.15);
2692
+ }
2693
+
2663
2694
  .theme-icon {
2664
2695
  width: 1.25rem;
2665
2696
  height: 1.25rem;
@@ -2723,7 +2754,7 @@ ie([
2723
2754
  T()
2724
2755
  ], F.prototype, "isDark", 2);
2725
2756
  F = ie([
2726
- Gt("cals-theme-toggle")
2757
+ Gt("theme-toggle")
2727
2758
  ], F);
2728
2759
  function ss(t, e) {
2729
2760
  return function() {
@@ -1 +1 @@
1
- :root{--color-primary:#2563eb;--color-primary-hover:#1d4ed8;--color-primary-light:#dbeafe;--color-secondary:#64748b;--color-secondary-hover:#475569;--color-success:#16a34a;--color-warning:#d97706;--color-error:#dc2626;--color-info:#0891b2;--color-success-bg:rgba(22,162,73,.1);--color-success-border:rgba(22,162,73,.2);--color-warning-bg:rgba(217,119,6,.1);--color-warning-border:rgba(217,119,6,.2);--color-error-bg:rgba(220,38,38,.1);--color-error-border:rgba(220,38,38,.2);--color-info-bg:rgba(8,145,178,.1);--color-info-border:rgba(8,145,178,.2);--color-subscription:#6366f1;--color-subscription-bg:rgba(99,102,241,.1);--color-subscription-border:rgba(99,102,241,.2);--color-subscription-bg-gradient-start:rgba(99,102,241,.02);--color-subscription-bg-gradient-end:rgba(99,102,241,.05);--color-onetime:#22c55e;--color-onetime-bg:rgba(34,197,94,.1);--color-onetime-border:rgba(34,197,94,.2);--color-onetime-bg-gradient-start:rgba(34,197,94,.02);--color-onetime-bg-gradient-end:rgba(34,197,94,.05);--color-metered:#a855f7;--color-metered-bg:rgba(168,85,247,.1);--color-metered-border:rgba(168,85,247,.2);--color-metered-bg-gradient-start:rgba(168,85,247,.02);--color-metered-bg-gradient-end:rgba(168,85,247,.05);--color-text-primary:#0f172a;--color-text-secondary:#64748b;--color-text-muted:#94a3b8;--color-text-inverse:#fff;--color-bg-primary:#fff;--color-bg-secondary:#f8fafc;--color-bg-muted:#f1f5f9;--color-bg-inverse-muted:#1e293b;--color-bg-overlay:rgba(15,23,42,.8);--color-border:#e2e8f0;--color-border-hover:#cbd5e1;--color-border-focus:#3b82f6;--font-family-sans:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;--font-family-mono:"SF Mono",Monaco,"Cascadia Code",monospace;--font-size-2xs:0.625rem;--font-size-xs:0.75rem;--font-size-sm:0.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-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.625;--space-1:0.25rem;--space-2:0.5rem;--space-3:0.75rem;--space-4:1rem;--space-5:1.25rem;--space-6:1.5rem;--space-8:2rem;--space-10:2.5rem;--space-12:3rem;--space-16:4rem;--space-20:5rem;--space-24:6rem;--size-xs:20rem;--size-sm:24rem;--size-md:28rem;--size-lg:32rem;--size-xl:36rem;--size-2xl:42rem;--size-full:100%;--radius-sm:0.125rem;--radius-base:0.25rem;--radius-md:0.375rem;--radius-lg:0.5rem;--radius-xl:0.75rem;--radius-2xl:1rem;--radius-full:9999px;--shadow-xs:0 1px 2px 0 rgba(0,0,0,.05);--shadow-sm:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--shadow-base:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--shadow-md:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--shadow-lg:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--shadow-xl:0 25px 50px -12px rgba(0,0,0,.25);--z-dropdown:1000;--z-sticky:1020;--z-fixed:1030;--z-modal:1040;--z-popover:1050;--z-tooltip:1060;--transition-fast:150ms cubic-bezier(0.4,0,0.2,1);--transition-base:200ms cubic-bezier(0.4,0,0.2,1);--transition-slow:300ms cubic-bezier(0.4,0,0.2,1)}[data-theme=dark]{--color-primary:#3b82f6;--color-primary-hover:#2563eb;--color-primary-light:#1e3a8a;--color-secondary:#6b7280;--color-secondary-hover:#9ca3af;--color-success:#10b981;--color-warning:#f59e0b;--color-error:#ef4444;--color-info:#06b6d4;--color-text-primary:#f8fafc;--color-text-secondary:#cbd5e1;--color-text-muted:#94a3b8;--color-text-inverse:#0f172a;--color-bg-primary:#1e293b;--color-bg-secondary:#0f172a;--color-bg-muted:#334155;--color-bg-inverse-muted:#0f172a;--color-bg-overlay:rgba(0,0,0,.8);--color-border:#334155;--color-border-hover:#475569;--color-border-focus:#3b82f6;--shadow-xs:0 1px 2px 0 rgba(0,0,0,.3);--shadow-sm:0 1px 3px 0 rgba(0,0,0,.4),0 1px 2px -1px rgba(0,0,0,.4);--shadow-base:0 4px 6px -1px rgba(0,0,0,.4),0 2px 4px -2px rgba(0,0,0,.4);--shadow-md:0 10px 15px -3px rgba(0,0,0,.4),0 4px 6px -4px rgba(0,0,0,.4);--shadow-lg:0 20px 25px -5px rgba(0,0,0,.5),0 8px 10px -6px rgba(0,0,0,.5);--shadow-xl:0 25px 50px -12px rgba(0,0,0,.6)}*{box-sizing:border-box}body{background-color:var(--color-bg-secondary);color:var(--color-text-primary);font-family:var(--font-family-sans);font-size:var(--font-size-base);line-height:var(--line-height-normal);margin:0;padding:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}*{scrollbar-width:none;-ms-overflow-style:none}::-webkit-scrollbar{display:none}:focus{outline:2px solid var(--color-border-focus);outline-offset:2px}:focus:not(:focus-visible){outline:none}.sr-only{height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;clip:rect(0,0,0,0);border:0;white-space:nowrap}.page{margin:0 auto;max-width:1200px;padding:var(--space-6)}.float-right{float:right}.onboarding-form{gap:var(--space-6);margin-top:var(--space-4)}.form-section,.onboarding-form{box-sizing:border-box;display:flex;flex-direction:column;max-width:100%;width:100%}.form-section{gap:var(--space-3)}.form-section h5,.section-title{color:var(--color-text-primary);font-size:var(--font-size-base);font-weight:var(--font-weight-medium);margin:0 0 var(--space-3) 0}.form-grid{display:grid;gap:var(--space-4);grid-template-columns:repeat(auto-fit,minmax(min(280px,100%),1fr))}.form-field,.form-grid{box-sizing:border-box;max-width:100%;width:100%}.form-field{display:flex;flex-direction:column;gap:var(--space-1);min-width:0}.form-field.full-width{grid-column:1/-1}.form-field label{color:var(--color-text-secondary);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium)}.form-field select{background:var(--color-bg-primary);border:1px solid var(--color-border);border-radius:var(--radius-md);color:var(--color-text-primary);font-size:var(--font-size-sm);padding:var(--space-2) var(--space-3);transition:border-color .2s ease;width:100%}.form-field select:focus{border-color:var(--color-primary);outline:none}.form-field select:disabled{cursor:not-allowed;opacity:.5}.form-actions{align-items:flex-start;border-top:1px solid var(--color-border);display:flex;flex-direction:column;gap:var(--space-2);padding-top:var(--space-4)}.form-note{color:var(--color-text-secondary);font-size:var(--font-size-sm)}@media (max-width:640px){.form-grid{grid-template-columns:1fr}}input:-webkit-autofill,input:-webkit-autofill:active,input:-webkit-autofill:focus,input:-webkit-autofill:hover,select:-webkit-autofill,select:-webkit-autofill:active,select:-webkit-autofill:focus,select:-webkit-autofill:hover,textarea:-webkit-autofill,textarea:-webkit-autofill:active,textarea:-webkit-autofill:focus,textarea:-webkit-autofill:hover{-webkit-background-clip:text!important;-webkit-text-fill-color:var(--color-text-primary)!important;background-color:var(--color-bg-primary)!important;box-shadow:0 0 0 1000px var(--color-bg-primary) inset!important;transition:background-color 5000s ease-in-out 0s!important}.quantity-input-wrapper{align-items:center;display:flex;gap:0;opacity:1;transition:opacity .2s ease,visibility .2s ease;visibility:visible;width:fit-content}.quantity-input-wrapper--hidden{opacity:0;pointer-events:none;visibility:hidden}.quantity-btn{align-items:center;background:var(--color-bg-primary);border:2px solid var(--color-border);color:var(--color-text-primary);cursor:pointer;display:flex;font-size:var(--font-size-lg);font-weight:var(--font-weight-bold);height:40px;justify-content:center;transition:all .2s ease;user-select:none;width:40px}.quantity-btn:hover:not(:disabled){background:var(--color-bg-secondary)}.quantity-btn:disabled{cursor:not-allowed}.quantity-btn--minus{border-radius:var(--radius-md) 0 0 var(--radius-md);border-right:none}.quantity-btn--plus{border-left:none;border-radius:0 var(--radius-md) var(--radius-md) 0}.quantity-input{background:var(--color-bg-primary);border:2px solid var(--color-border);border-left:none;border-right:none;color:var(--color-text-primary);font-size:var(--font-size-base);font-weight:var(--font-weight-medium);height:40px;outline:none;text-align:center;width:60px}.quantity-input::-webkit-inner-spin-button,.quantity-input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.quantity-input[type=number]{-moz-appearance:textfield;appearance:textfield}.quantity-btn--xs{font-size:var(--font-size-sm);height:24px;width:24px}.quantity-input--xs{font-size:calc(var(--font-size-sm)*3/4);height:24px;width:32px}.quantity-btn--sm{font-size:var(--font-size-base);height:32px;width:32px}.quantity-input--sm{font-size:var(--font-size-sm);height:32px;width:48px}.quantity-btn--md{font-size:var(--font-size-lg);height:40px;width:40px}.quantity-input--md{font-size:var(--font-size-base);height:40px;width:60px}.quantity-btn--lg{font-size:var(--font-size-xl);height:48px;width:48px}.quantity-input--lg{font-size:var(--font-size-lg);height:48px;width:72px}body.modal-open{height:100%!important;overflow:hidden!important;position:fixed!important;width:100%!important}.base-button{align-items:center;border:1px solid transparent;border-radius:var(--radius-md);cursor:pointer;display:inline-flex;font-family:var(--font-family-sans);font-weight:var(--font-weight-medium);gap:var(--space-2);justify-content:center;line-height:var(--line-height-tight);position:relative;text-decoration:none;transition:all var(--transition-fast);user-select:none;white-space:nowrap}.base-button:focus-visible{outline:2px solid var(--color-border-focus);outline-offset:2px}.base-button--primary{background-color:var(--color-primary);border-color:var(--color-primary);color:var(--color-text-inverse)}.base-button--primary:hover:not(:disabled):not(.base-button--confirming){background-color:var(--color-primary-hover);border-color:var(--color-primary-hover)}.base-button--secondary{background-color:var(--color-secondary);border-color:var(--color-secondary);color:var(--color-text-inverse)}.base-button--secondary:hover:not(:disabled):not(.base-button--confirming){background-color:var(--color-secondary-hover);border-color:var(--color-secondary-hover)}.base-button--outline{background-color:transparent;border-color:var(--color-border);color:var(--color-primary)}.base-button--outline:hover:not(:disabled):not(.base-button--confirming){background-color:var(--color-primary-light);border-color:var(--color-primary)}.base-button--ghost{background-color:transparent;border-color:transparent;color:var(--color-text-secondary)}.base-button--danger,.base-button--ghost:hover:not(:disabled):not(.base-button--confirming){color:var(--color-text-primary)}.base-button--danger{background-color:var(--color-primary-bg);border-color:var(--color-error)}.base-button--danger:hover:not(:disabled):not(.base-button--confirming){background-color:var(--color-error-bg);border-color:var(--color-error)}.base-button--xs{font-size:var(--font-size-xs);padding:var(--space-1) var(--space-2)}.base-button--sm{font-size:var(--font-size-sm);padding:var(--space-2) var(--space-3)}.base-button--md{font-size:var(--font-size-base);padding:var(--space-3) var(--space-4)}.base-button--lg{font-size:var(--font-size-lg);padding:var(--space-4) var(--space-6)}.base-button:disabled{cursor:not-allowed;opacity:.5}.base-button--full-width{width:100%}.base-button--loading{cursor:wait}.loading-text{opacity:.7}.loading-container{filter:brightness(400%)}.base-button--xs .confirm-button{padding:var(--space-1) var(--space-2)}.base-button--sm .confirm-button{padding:var(--space-2) var(--space-3)}.base-button--md .confirm-button{padding:var(--space-3) var(--space-4)}.base-button--lg .confirm-button{padding:var(--space-4) var(--space-6)}.cancel-button{align-items:center;background:transparent;border:none;cursor:pointer;display:flex;flex-shrink:0;justify-content:center;padding:0;transition:all var(--transition-fast);width:32px}.cancel-icon{height:16px;width:16px}.confirm-container{align-items:center;display:flex;gap:var(--space-2);justify-content:space-between;width:100%}.confirm-container span{flex:1;text-align:center}.base-card{background-color:var(--color-bg-primary);border-radius:var(--radius-lg);box-sizing:border-box;display:flex;flex-direction:column;max-width:100%;position:relative;transition:all var(--transition-fast)}.base-card--default{border:none}.base-card--elevated{border:1px solid var(--color-border);box-shadow:var(--shadow-sm)}.base-card--padding-auto{padding:auto}.base-card--padding-none{padding:0}.base-card--padding-sm{padding:var(--space-4)}.base-card--padding-md{padding:var(--space-6)}.base-card--padding-lg{padding:var(--space-8)}.base-card--hoverable{cursor:pointer}.base-card--hoverable:hover{box-shadow:var(--shadow-md);transform:translateY(0)}.base-card--expandable{position:relative}.expand-btn{align-items:center;background:none;border:1px solid var(--color-border);border-radius:var(--radius-md);color:var(--color-text-secondary);cursor:pointer;display:flex;justify-content:center;opacity:0;padding:var(--space-2);pointer-events:none;position:absolute;right:var(--space-3);top:var(--space-3);transform:scale(.8);transition:all var(--transition-fast);z-index:10}.base-card--expandable:hover .expand-btn{opacity:1;pointer-events:auto;transform:scale(1)}.expand-btn:hover{background:var(--color-bg-muted);box-shadow:var(--shadow-sm);color:var(--color-text-primary)}.expand-btn:focus{opacity:1;outline:2px solid var(--color-primary);outline-offset:2px;pointer-events:auto;transform:scale(1)}@media (max-width:768px){.expand-btn{opacity:1;pointer-events:auto;transform:scale(1)}}.card-header{margin-bottom:var(--space-4)}.card-title-wrapper{align-items:center;display:flex;gap:var(--space-2)}.card-title{color:var(--color-text-primary);font-size:var(--font-size-xl);font-weight:var(--font-weight-semibold);line-height:var(--line-height-tight);margin:0}.card-badge{position:relative;right:var(--space-1)}.card-badge,.card-badge-notitle{align-items:center;background:var(--color-error);border-radius:var(--radius-full);color:#fff;cursor:pointer;display:inline-flex;font-size:var(--font-size-2xs);font-weight:var(--font-weight-semibold);height:calc(12px + var(--space-1));justify-content:center;line-height:1;min-width:12px;padding:0 var(--space-2)}.card-badge-notitle{left:var(--space-1);position:absolute;top:var(--space-1);z-index:5}.card-badge-notitle:hover,.card-badge:hover{background:var(--color-error-bg)}.card-body{min-width:0}.card-footer{border-top:1px solid var(--color-border);margin-top:var(--space-4);padding-top:var(--space-4)}.base-card--padding-none .card-header{margin-bottom:0;padding:var(--space-6) var(--space-6) 0}.base-card--padding-none .card-body{padding:var(--space-4) var(--space-6)}.base-card--padding-none .card-footer{margin-top:0;padding:0 var(--space-6) var(--space-6)}.base-card:hover{opacity:1;visibility:visible}.desktop-only{display:block}@media (max-width:768px){.desktop-only{display:none}}.input-group{display:flex;flex-direction:column;gap:var(--space-2)}.input-label{align-items:center;color:var(--color-text-primary);display:flex;font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);gap:var(--space-1);line-height:var(--line-height-tight)}.required-indicator{color:var(--color-error);font-weight:var(--font-weight-bold)}.input-wrapper{align-items:center;display:flex;position:relative}.base-input{background-color:var(--color-bg-primary);border:1px solid var(--color-border);border-radius:var(--radius-md);color:var(--color-text-primary);font-family:var(--font-family-sans);transition:all var(--transition-fast);width:100%}.base-input:hover:not(:disabled){border-color:var(--color-border-hover)}.base-input:focus{border-color:var(--color-border-focus);box-shadow:0 0 0 3px rgba(59,130,246,.1);outline:none}.base-input::placeholder{color:var(--color-text-muted)}.base-input--sm{font-size:var(--font-size-sm);padding:var(--space-2) var(--space-3)}.base-input--md{font-size:var(--font-size-base);padding:var(--space-3) var(--space-4)}.base-input--lg{font-size:var(--font-size-lg);padding:var(--space-4) var(--space-5)}.base-input--error,.base-input--error:focus{border-color:var(--color-error)}.base-input--error:focus{box-shadow:0 0 0 3px rgba(220,38,38,.1)}.base-input--disabled{background-color:var(--color-bg-muted);cursor:not-allowed;opacity:.5}.input-suffix{align-items:center;color:var(--color-text-muted);display:flex;position:absolute;right:var(--space-3)}.input-error{color:var(--color-error)}.input-error,.input-hint{font-size:var(--font-size-sm);line-height:var(--line-height-tight)}.input-hint{color:var(--color-text-muted)}.base-alert{align-items:flex-start;border:1px solid transparent;border-radius:var(--radius-md);display:flex;gap:var(--space-3);padding:var(--space-4)}.base-alert--info{background-color:rgba(59,130,246,.1);border-color:rgba(59,130,246,.2);color:var(--color-info)}.base-alert--success{background-color:rgba(16,185,129,.1);border-color:rgba(16,185,129,.2);color:var(--color-success)}.base-alert--warning{background-color:rgba(245,158,11,.1);border-color:rgba(245,158,11,.2);color:var(--color-warning)}.base-alert--error{background-color:rgba(239,68,68,.1);border-color:rgba(239,68,68,.2);color:var(--color-error)}.alert-icon{flex-shrink:0;height:1.25rem;margin-top:.125rem;width:1.25rem}.alert-content{flex:1;min-width:0}.alert-title{font-weight:var(--font-weight-semibold);line-height:var(--line-height-tight);margin:0 0 var(--space-1) 0}.alert-message,.alert-title{font-size:var(--font-size-sm)}.alert-message{line-height:var(--line-height-normal)}.alert-dismiss{background:none;border:none;color:currentColor;cursor:pointer;flex-shrink:0;height:1.25rem;opacity:.7;padding:0;transition:opacity var(--transition-fast);width:1.25rem}.alert-dismiss:hover{opacity:1}.alert-dismiss:focus{opacity:1;outline:2px solid currentColor;outline-offset:1px}.base-skeleton{animation:shimmer 1.5s ease-in-out infinite;background:linear-gradient(90deg,var(--color-bg-muted) 0,var(--color-bg-secondary) 50%,var(--color-bg-muted) 100%);background-size:200% 100%;overflow:hidden;position:relative}@keyframes shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.skeleton--text{border-radius:var(--radius-sm);height:1em}.skeleton--rectangle{border-radius:var(--radius-md)}.skeleton--rounded{border-radius:var(--radius-lg)}.skeleton--avatar,.skeleton--rounded-full{border-radius:var(--radius-full)}.skeleton--avatar{height:40px;width:40px}.skeleton--card{background:var(--color-bg-primary);border:1px solid var(--color-border);border-radius:var(--radius-lg);min-height:200px;padding:var(--space-6)}.skeleton-card{gap:var(--space-4);height:100%}.skeleton-card,.skeleton-header{display:flex;flex-direction:column}.skeleton-header{gap:var(--space-2)}.skeleton-title{animation:shimmer 1.5s ease-in-out infinite;background:linear-gradient(90deg,var(--color-bg-muted) 0,var(--color-bg-secondary) 50%,var(--color-bg-muted) 100%);background-size:200% 100%;border-radius:var(--radius-sm);height:24px;width:40%}.skeleton-body{display:flex;flex:1;flex-direction:column;gap:var(--space-3)}.skeleton-line{animation:shimmer 1.5s ease-in-out infinite;background:linear-gradient(90deg,var(--color-bg-muted) 0,var(--color-bg-secondary) 50%,var(--color-bg-muted) 100%);background-size:200% 100%;border-radius:var(--radius-sm);height:16px}@media (prefers-reduced-motion:reduce){.base-skeleton,.skeleton-line,.skeleton-title{animation:none;background:var(--color-bg-muted)}}.theme-toggle{align-items:center;display:inline-flex;justify-content:center;transition:all var(--transition-fast)}.theme-toggle:hover{transform:scale(1.05)}.theme-icon{height:1.25rem;transition:transform var(--transition-fast);width:1.25rem}.theme-toggle:active .theme-icon{transform:scale(.95)}@media (prefers-reduced-motion:no-preference){.theme-icon{animation:themeSwitch .3s ease-in-out}}@keyframes themeSwitch{0%{transform:rotate(0deg) scale(1)}50%{transform:rotate(180deg) scale(.8)}to{transform:rotate(1turn) scale(1)}}.nav-bar{align-items:center;background:var(--color-bg-primary);border-bottom:1px solid var(--color-border);display:flex;justify-content:space-between;min-height:60px;padding:var(--space-3) var(--space-6);z-index:var(--z-fixed)}.nav-bar--blur{backdrop-filter:blur(20px) saturate(180%);-webkit-backdrop-filter:blur(20px) saturate(180%);background:hsla(0,0%,100%,.8)}[data-theme=dark] .nav-bar--blur{background:rgba(28,28,30,.8)}.nav-center,.nav-left,.nav-right{align-items:center;display:flex;flex:1;gap:var(--space-4)}.nav-center{justify-content:center;margin:0 auto;max-width:500px}.nav-right{justify-content:flex-end}.app-title{color:var(--color-text-primary);font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);letter-spacing:-.02em;margin:0}.app-title--gradient{background:linear-gradient(135deg,#667eea,#764ba2);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.search-container{align-items:center;display:flex;max-width:400px;position:relative;width:100%}.search-icon{color:var(--color-text-muted);left:var(--space-3);pointer-events:none;position:absolute}.search-icon,.search-input{font-size:var(--font-size-sm)}.search-input{background:var(--color-bg-primary);border:1px solid var(--color-border);border-radius:var(--radius-lg);color:var(--color-text-primary);font-family:var(--font-family-sans);padding:var(--space-2) var(--space-10);transition:all var(--transition-base);width:100%}.search-input:hover{border-color:var(--color-border-hover)}.search-input:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px rgba(37,99,235,.1);outline:none}.search-input::placeholder{color:var(--color-text-muted)}.clear-search{align-items:center;background:none;border:none;border-radius:var(--radius-base);color:var(--color-text-muted);cursor:pointer;display:flex;justify-content:center;padding:var(--space-1);position:absolute;right:var(--space-2);transition:all var(--transition-base)}.clear-search:hover{background:var(--color-bg-muted)}.clear-search:hover,.icon-btn{color:var(--color-text-primary)}.icon-btn{align-items:center;background:var(--color-bg-secondary);border:1px solid var(--color-border);border-radius:var(--radius-lg);cursor:pointer;display:flex;font-size:var(--font-size-base);justify-content:center;line-height:1;min-height:36px;min-width:36px;padding:var(--space-2);transition:all var(--transition-base)}.icon-btn:hover:not(:disabled){background:var(--color-bg-muted);border-color:var(--color-border-hover);transform:translateY(-1px)}.icon-btn:active:not(:disabled){transform:translateY(0)}.icon-btn:disabled{cursor:not-allowed;opacity:.5}.icon-btn--sm{font-size:var(--font-size-sm);min-height:32px;min-width:32px}.icon-btn--lg{font-size:var(--font-size-lg);min-height:44px;min-width:44px}.toast{align-items:center;border-radius:var(--radius-xl);box-shadow:var(--shadow-xl);display:flex;font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);gap:var(--space-3);left:50%;max-width:500px;padding:var(--space-4) var(--space-6);position:fixed;top:80px;transform:translateX(-50%);z-index:var(--z-tooltip)}.toast--error{background:var(--color-error);color:#fff}.toast--success{background:var(--color-success);color:#fff}.toast--warning{background:var(--color-warning);color:#fff}.toast--info{background:var(--color-info);color:#fff}.toast-icon{flex-shrink:0;font-size:var(--font-size-xl)}.toast-message{flex:1}.toast-close{align-items:center;background:none;border:none;border-radius:var(--radius-base);color:currentColor;cursor:pointer;display:flex;justify-content:center;opacity:.9;padding:var(--space-1);transition:background var(--transition-base)}.toast-close:hover{background:hsla(0,0%,100%,.2);opacity:1}.toast-enter-active,.toast-leave-active{transition:all var(--transition-slow)}.toast-enter-from,.toast-leave-to{opacity:0;transform:translate(-50%,-20px)}.sidebar{background:var(--color-bg-primary);border-right:1px solid var(--color-border);display:flex;flex-direction:column;max-width:600px;min-width:250px;overflow:hidden;position:relative}.sidebar-header{align-items:center;border-bottom:1px solid var(--color-border);display:flex;justify-content:space-between;padding:var(--space-4)}.sidebar-title{color:var(--color-text-primary);font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);margin:0}.sidebar-subtitle{color:var(--color-text-secondary);font-size:var(--font-size-sm)}.sidebar-content{flex:1;overflow-y:auto;padding:var(--space-2)}.sidebar-content::-webkit-scrollbar{width:8px}.sidebar-content::-webkit-scrollbar-track{background:transparent}.sidebar-content::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:var(--radius-base)}.sidebar-content::-webkit-scrollbar-thumb:hover{background:var(--color-border-hover)}.resize-handle{background:transparent;bottom:0;cursor:col-resize;position:absolute;right:0;top:0;transition:background var(--transition-base);width:4px}.resize-handle:hover{background:var(--color-primary)}.breadcrumb{align-items:center;background:var(--color-bg-secondary);border-bottom:1px solid var(--color-border);display:flex;gap:var(--space-2);overflow-x:auto;padding:var(--space-3) var(--space-4);white-space:nowrap}.breadcrumb::-webkit-scrollbar{height:4px}.breadcrumb::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:var(--radius-sm)}.breadcrumb-item{background:none;border:none;border-radius:var(--radius-base);color:var(--color-primary);cursor:pointer;font-family:var(--font-family-sans);font-size:var(--font-size-sm);padding:var(--space-1) var(--space-2);text-decoration:none;transition:all var(--transition-base)}.breadcrumb-item:hover{background:var(--color-primary-light)}.breadcrumb-separator{color:var(--color-text-secondary);font-size:var(--font-size-xs);user-select:none}.toolbar{align-items:center;background:var(--color-bg-primary);border-bottom:1px solid var(--color-border);display:flex;justify-content:space-between;padding:var(--space-4) var(--space-6)}.toolbar--blur{backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);background:hsla(0,0%,100%,.6)}[data-theme=dark] .toolbar--blur{background:rgba(28,28,30,.6)}.toolbar-left,.toolbar-right{align-items:center;display:flex;gap:var(--space-2)}.toolbar-left{flex:1;gap:var(--space-4);min-width:0}.toolbar-title{color:var(--color-text-primary);font-size:var(--font-size-base);font-weight:var(--font-weight-medium);margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.toolbar-subtitle{color:var(--color-text-secondary);font-size:var(--font-size-sm);white-space:nowrap}.spinner{animation:spin .8s linear infinite;border:3px solid var(--color-border);border-radius:var(--radius-full);border-top-color:var(--color-primary);height:40px;width:40px}.spinner--sm{border-width:2px;height:24px;width:24px}.spinner--lg{border-width:4px;height:56px;width:56px}@keyframes spin{to{transform:rotate(1turn)}}.loading-state{align-items:center;display:flex;flex-direction:column;gap:var(--space-4);height:100%;justify-content:center;padding:var(--space-8)}.loading-state__text{color:var(--color-text-secondary);font-size:var(--font-size-sm)}.empty-state{align-items:center;display:flex;flex-direction:column;gap:var(--space-4);height:100%;justify-content:center;padding:var(--space-8);text-align:center}.empty-state__icon{font-size:4rem;line-height:1;opacity:.5}.empty-state__title{color:var(--color-text-primary);font-size:var(--font-size-2xl);font-weight:var(--font-weight-semibold);margin:0}.empty-state__description{color:var(--color-text-secondary);font-size:var(--font-size-base);margin:0;max-width:400px}.lightbox{backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);background:var(--color-bg-overlay);inset:0;position:fixed;z-index:var(--z-modal)}.lightbox,.lightbox__close{align-items:center;display:flex;justify-content:center}.lightbox__close{backdrop-filter:blur(20px);background:var(--color-bg-primary);border:1px solid var(--color-border);border-radius:var(--radius-full);color:var(--color-text-primary);cursor:pointer;font-size:var(--font-size-2xl);height:44px;position:absolute;right:var(--space-6);top:var(--space-6);transition:all var(--transition-base);width:44px;z-index:calc(var(--z-modal) + 1)}.lightbox__close:hover{background:var(--color-bg-muted);transform:scale(1.1)}.lightbox__content{max-height:90vh;max-width:90vw;position:relative}.lightbox__content,.lightbox__nav{align-items:center;display:flex;justify-content:center}.lightbox__nav{backdrop-filter:blur(20px);background:var(--color-bg-primary);border:1px solid var(--color-border);border-radius:var(--radius-full);color:var(--color-text-primary);cursor:pointer;font-size:var(--font-size-2xl);height:56px;position:absolute;top:50%;transform:translateY(-50%);transition:all var(--transition-base);width:56px;z-index:calc(var(--z-modal) + 1)}.lightbox__nav:hover{background:var(--color-bg-muted);transform:translateY(-50%) scale(1.1)}.lightbox__nav--prev{left:var(--space-8)}.lightbox__nav--next{right:var(--space-8)}.lightbox__footer{align-items:center;backdrop-filter:blur(20px);background:var(--color-bg-primary);border:1px solid var(--color-border);border-radius:var(--radius-xl);bottom:var(--space-8);display:flex;flex-direction:column;gap:var(--space-2);left:50%;padding:var(--space-4) var(--space-6);position:absolute;transform:translateX(-50%);z-index:calc(var(--z-modal) + 1)}.lightbox-enter-active,.lightbox-leave-active{transition:opacity var(--transition-slow)}.lightbox-enter-from,.lightbox-leave-to{opacity:0}.zoom-controls{background:var(--color-bg-primary);box-shadow:var(--shadow-md);gap:var(--space-2);padding:var(--space-2) var(--space-4)}.zoom-btn,.zoom-controls{align-items:center;border:1px solid var(--color-border);border-radius:var(--radius-full);display:flex}.zoom-btn{background:var(--color-bg-secondary);color:var(--color-text-primary);cursor:pointer;font-family:var(--font-family-sans);font-size:var(--font-size-sm);height:32px;justify-content:center;min-width:32px;padding:0 var(--space-3);transition:all var(--transition-base)}.zoom-btn:hover{background:var(--color-bg-muted)}.zoom-level{color:var(--color-text-secondary);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);min-width:50px;text-align:center}@media (max-width:768px){.nav-bar{flex-wrap:wrap;min-height:auto;padding:var(--space-3)}.nav-center{flex:1 1 100%;margin-top:var(--space-3);order:3}.sidebar{bottom:0;box-shadow:var(--shadow-xl);left:0;position:absolute;top:0;z-index:var(--z-dropdown)}.lightbox__nav{height:44px;width:44px}.lightbox__nav--prev{left:var(--space-4)}.lightbox__nav--next{right:var(--space-4)}}
1
+ :root{--color-primary:#2563eb;--color-primary-hover:#1d4ed8;--color-primary-light:#dbeafe;--color-secondary:#64748b;--color-secondary-hover:#475569;--color-success:#16a34a;--color-warning:#d97706;--color-error:#dc2626;--color-info:#0891b2;--color-success-bg:rgba(22,162,73,.1);--color-success-border:rgba(22,162,73,.2);--color-warning-bg:rgba(217,119,6,.1);--color-warning-border:rgba(217,119,6,.2);--color-error-bg:rgba(220,38,38,.1);--color-error-border:rgba(220,38,38,.2);--color-info-bg:rgba(8,145,178,.1);--color-info-border:rgba(8,145,178,.2);--color-subscription:#6366f1;--color-subscription-bg:rgba(99,102,241,.1);--color-subscription-border:rgba(99,102,241,.2);--color-subscription-bg-gradient-start:rgba(99,102,241,.02);--color-subscription-bg-gradient-end:rgba(99,102,241,.05);--color-onetime:#22c55e;--color-onetime-bg:rgba(34,197,94,.1);--color-onetime-border:rgba(34,197,94,.2);--color-onetime-bg-gradient-start:rgba(34,197,94,.02);--color-onetime-bg-gradient-end:rgba(34,197,94,.05);--color-metered:#a855f7;--color-metered-bg:rgba(168,85,247,.1);--color-metered-border:rgba(168,85,247,.2);--color-metered-bg-gradient-start:rgba(168,85,247,.02);--color-metered-bg-gradient-end:rgba(168,85,247,.05);--color-text-primary:#0f172a;--color-text-secondary:#64748b;--color-text-muted:#94a3b8;--color-text-inverse:#fff;--color-bg-primary:#fff;--color-bg-secondary:#f8fafc;--color-bg-muted:#f1f5f9;--color-bg-inverse-muted:#1e293b;--color-bg-overlay:rgba(15,23,42,.8);--color-border:#e2e8f0;--color-border-hover:#cbd5e1;--color-border-focus:#3b82f6;--font-family-sans:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;--font-family-mono:"SF Mono",Monaco,"Cascadia Code",monospace;--font-size-2xs:0.625rem;--font-size-xs:0.75rem;--font-size-sm:0.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-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.625;--space-1:0.25rem;--space-2:0.5rem;--space-3:0.75rem;--space-4:1rem;--space-5:1.25rem;--space-6:1.5rem;--space-8:2rem;--space-10:2.5rem;--space-12:3rem;--space-16:4rem;--space-20:5rem;--space-24:6rem;--size-xs:20rem;--size-sm:24rem;--size-md:28rem;--size-lg:32rem;--size-xl:36rem;--size-2xl:42rem;--size-full:100%;--radius-sm:0.125rem;--radius-base:0.25rem;--radius-md:0.375rem;--radius-lg:0.5rem;--radius-xl:0.75rem;--radius-2xl:1rem;--radius-full:9999px;--shadow-xs:0 1px 2px 0 rgba(0,0,0,.05);--shadow-sm:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--shadow-base:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--shadow-md:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--shadow-lg:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--shadow-xl:0 25px 50px -12px rgba(0,0,0,.25);--z-dropdown:1000;--z-sticky:1020;--z-fixed:1030;--z-modal:1040;--z-popover:1050;--z-tooltip:1060;--transition-fast:150ms cubic-bezier(0.4,0,0.2,1);--transition-base:200ms cubic-bezier(0.4,0,0.2,1);--transition-slow:300ms cubic-bezier(0.4,0,0.2,1)}[data-theme=dark]{--color-primary:#3b82f6;--color-primary-hover:#2563eb;--color-primary-light:#1e3a8a;--color-secondary:#6b7280;--color-secondary-hover:#9ca3af;--color-success:#10b981;--color-warning:#f59e0b;--color-error:#ef4444;--color-info:#06b6d4;--color-text-primary:#f8fafc;--color-text-secondary:#cbd5e1;--color-text-muted:#94a3b8;--color-text-inverse:#0f172a;--color-bg-primary:#1e293b;--color-bg-secondary:#0f172a;--color-bg-muted:#334155;--color-bg-inverse-muted:#0f172a;--color-bg-overlay:rgba(0,0,0,.8);--color-border:#334155;--color-border-hover:#475569;--color-border-focus:#3b82f6;--shadow-xs:0 1px 2px 0 rgba(0,0,0,.3);--shadow-sm:0 1px 3px 0 rgba(0,0,0,.4),0 1px 2px -1px rgba(0,0,0,.4);--shadow-base:0 4px 6px -1px rgba(0,0,0,.4),0 2px 4px -2px rgba(0,0,0,.4);--shadow-md:0 10px 15px -3px rgba(0,0,0,.4),0 4px 6px -4px rgba(0,0,0,.4);--shadow-lg:0 20px 25px -5px rgba(0,0,0,.5),0 8px 10px -6px rgba(0,0,0,.5);--shadow-xl:0 25px 50px -12px rgba(0,0,0,.6)}*{box-sizing:border-box}body{background-color:var(--color-bg-secondary);color:var(--color-text-primary);font-family:var(--font-family-sans);font-size:var(--font-size-base);line-height:var(--line-height-normal);margin:0;padding:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}*{scrollbar-width:none;-ms-overflow-style:none}::-webkit-scrollbar{display:none}:focus{outline:2px solid var(--color-border-focus);outline-offset:2px}:focus:not(:focus-visible){outline:none}.sr-only{height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;clip:rect(0,0,0,0);border:0;white-space:nowrap}.page{margin:0 auto;max-width:1200px;padding:var(--space-6)}.float-right{float:right}.onboarding-form{gap:var(--space-6);margin-top:var(--space-4)}.form-section,.onboarding-form{box-sizing:border-box;display:flex;flex-direction:column;max-width:100%;width:100%}.form-section{gap:var(--space-3)}.form-section h5,.section-title{color:var(--color-text-primary);font-size:var(--font-size-base);font-weight:var(--font-weight-medium);margin:0 0 var(--space-3) 0}.form-grid{display:grid;gap:var(--space-4);grid-template-columns:repeat(auto-fit,minmax(min(280px,100%),1fr))}.form-field,.form-grid{box-sizing:border-box;max-width:100%;width:100%}.form-field{display:flex;flex-direction:column;gap:var(--space-1);min-width:0}.form-field.full-width{grid-column:1/-1}.form-field label{color:var(--color-text-secondary);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium)}.form-field select{background:var(--color-bg-primary);border:1px solid var(--color-border);border-radius:var(--radius-md);color:var(--color-text-primary);font-size:var(--font-size-sm);padding:var(--space-2) var(--space-3);transition:border-color .2s ease;width:100%}.form-field select:focus{border-color:var(--color-primary);outline:none}.form-field select:disabled{cursor:not-allowed;opacity:.5}.form-actions{align-items:flex-start;border-top:1px solid var(--color-border);display:flex;flex-direction:column;gap:var(--space-2);padding-top:var(--space-4)}.form-note{color:var(--color-text-secondary);font-size:var(--font-size-sm)}@media (max-width:640px){.form-grid{grid-template-columns:1fr}}input:-webkit-autofill,input:-webkit-autofill:active,input:-webkit-autofill:focus,input:-webkit-autofill:hover,select:-webkit-autofill,select:-webkit-autofill:active,select:-webkit-autofill:focus,select:-webkit-autofill:hover,textarea:-webkit-autofill,textarea:-webkit-autofill:active,textarea:-webkit-autofill:focus,textarea:-webkit-autofill:hover{-webkit-background-clip:text!important;-webkit-text-fill-color:var(--color-text-primary)!important;background-color:var(--color-bg-primary)!important;box-shadow:0 0 0 1000px var(--color-bg-primary) inset!important;transition:background-color 5000s ease-in-out 0s!important}.quantity-input-wrapper{align-items:center;display:flex;gap:0;opacity:1;transition:opacity .2s ease,visibility .2s ease;visibility:visible;width:fit-content}.quantity-input-wrapper--hidden{opacity:0;pointer-events:none;visibility:hidden}.quantity-btn{align-items:center;background:var(--color-bg-primary);border:2px solid var(--color-border);color:var(--color-text-primary);cursor:pointer;display:flex;font-size:var(--font-size-lg);font-weight:var(--font-weight-bold);height:40px;justify-content:center;transition:all .2s ease;user-select:none;width:40px}.quantity-btn:hover:not(:disabled){background:var(--color-bg-secondary)}.quantity-btn:disabled{cursor:not-allowed}.quantity-btn--minus{border-radius:var(--radius-md) 0 0 var(--radius-md);border-right:none}.quantity-btn--plus{border-left:none;border-radius:0 var(--radius-md) var(--radius-md) 0}.quantity-input{background:var(--color-bg-primary);border:2px solid var(--color-border);border-left:none;border-right:none;color:var(--color-text-primary);font-size:var(--font-size-base);font-weight:var(--font-weight-medium);height:40px;outline:none;text-align:center;width:60px}.quantity-input::-webkit-inner-spin-button,.quantity-input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.quantity-input[type=number]{-moz-appearance:textfield;appearance:textfield}.quantity-btn--xs{font-size:var(--font-size-sm);height:24px;width:24px}.quantity-input--xs{font-size:calc(var(--font-size-sm)*3/4);height:24px;width:32px}.quantity-btn--sm{font-size:var(--font-size-base);height:32px;width:32px}.quantity-input--sm{font-size:var(--font-size-sm);height:32px;width:48px}.quantity-btn--md{font-size:var(--font-size-lg);height:40px;width:40px}.quantity-input--md{font-size:var(--font-size-base);height:40px;width:60px}.quantity-btn--lg{font-size:var(--font-size-xl);height:48px;width:48px}.quantity-input--lg{font-size:var(--font-size-lg);height:48px;width:72px}body.modal-open{height:100%!important;overflow:hidden!important;position:fixed!important;width:100%!important}.base-button{align-items:center;border:1px solid transparent;border-radius:var(--radius-md);cursor:pointer;display:inline-flex;font-family:var(--font-family-sans);font-weight:var(--font-weight-medium);gap:var(--space-2);justify-content:center;line-height:var(--line-height-tight);position:relative;text-decoration:none;transition:all var(--transition-fast);user-select:none;white-space:nowrap}.base-button:focus-visible{outline:2px solid var(--color-border-focus);outline-offset:2px}.base-button--primary{background-color:var(--color-primary);border-color:var(--color-primary);color:var(--color-text-inverse)}.base-button--primary:hover:not(:disabled):not(.base-button--confirming){background-color:var(--color-primary-hover);border-color:var(--color-primary-hover)}.base-button--secondary{background-color:var(--color-secondary);border-color:var(--color-secondary);color:var(--color-text-inverse)}.base-button--secondary:hover:not(:disabled):not(.base-button--confirming){background-color:var(--color-secondary-hover);border-color:var(--color-secondary-hover)}.base-button--outline{background-color:transparent;border-color:var(--color-border);color:var(--color-primary)}.base-button--outline:hover:not(:disabled):not(.base-button--confirming){background-color:var(--color-primary-light);border-color:var(--color-primary)}.base-button--ghost{background-color:transparent;border-color:transparent;color:var(--color-text-secondary)}.base-button--danger,.base-button--ghost:hover:not(:disabled):not(.base-button--confirming){color:var(--color-text-primary)}.base-button--danger{background-color:var(--color-primary-bg);border-color:var(--color-error)}.base-button--danger:hover:not(:disabled):not(.base-button--confirming){background-color:var(--color-error-bg);border-color:var(--color-error)}.base-button--xs{font-size:var(--font-size-xs);padding:var(--space-1) var(--space-2)}.base-button--sm{font-size:var(--font-size-sm);padding:var(--space-2) var(--space-3)}.base-button--md{font-size:var(--font-size-base);padding:var(--space-3) var(--space-4)}.base-button--lg{font-size:var(--font-size-lg);padding:var(--space-4) var(--space-6)}.base-button:disabled{cursor:not-allowed;opacity:.5}.base-button--full-width{width:100%}.base-button--loading{cursor:wait}.loading-text{opacity:.7}.loading-container{filter:brightness(400%)}.base-button--xs .confirm-button{padding:var(--space-1) var(--space-2)}.base-button--sm .confirm-button{padding:var(--space-2) var(--space-3)}.base-button--md .confirm-button{padding:var(--space-3) var(--space-4)}.base-button--lg .confirm-button{padding:var(--space-4) var(--space-6)}.cancel-button{align-items:center;background:transparent;border:none;cursor:pointer;display:flex;flex-shrink:0;justify-content:center;padding:0;transition:all var(--transition-fast);width:32px}.cancel-icon{height:16px;width:16px}.confirm-container{align-items:center;display:flex;gap:var(--space-2);justify-content:space-between;width:100%}.confirm-container span{flex:1;text-align:center}.base-card{background-color:var(--color-bg-primary);border-radius:var(--radius-lg);box-sizing:border-box;display:flex;flex-direction:column;max-width:100%;position:relative;transition:all var(--transition-fast)}.base-card--default{border:none}.base-card--elevated{border:1px solid var(--color-border);box-shadow:var(--shadow-sm)}.base-card--padding-auto{padding:auto}.base-card--padding-none{padding:0}.base-card--padding-sm{padding:var(--space-4)}.base-card--padding-md{padding:var(--space-6)}.base-card--padding-lg{padding:var(--space-8)}.base-card--hoverable{cursor:pointer}.base-card--hoverable:hover{box-shadow:var(--shadow-md);transform:translateY(0)}.base-card--expandable{position:relative}.expand-btn{align-items:center;background:none;border:1px solid var(--color-border);border-radius:var(--radius-md);color:var(--color-text-secondary);cursor:pointer;display:flex;justify-content:center;opacity:0;padding:var(--space-2);pointer-events:none;position:absolute;right:var(--space-3);top:var(--space-3);transform:scale(.8);transition:all var(--transition-fast);z-index:10}.base-card--expandable:hover .expand-btn{opacity:1;pointer-events:auto;transform:scale(1)}.expand-btn:hover{background:var(--color-bg-muted);box-shadow:var(--shadow-sm);color:var(--color-text-primary)}.expand-btn:focus{opacity:1;outline:2px solid var(--color-primary);outline-offset:2px;pointer-events:auto;transform:scale(1)}@media (max-width:768px){.expand-btn{opacity:1;pointer-events:auto;transform:scale(1)}}.card-header{margin-bottom:var(--space-4)}.card-title-wrapper{align-items:center;display:flex;gap:var(--space-2)}.card-title{color:var(--color-text-primary);font-size:var(--font-size-xl);font-weight:var(--font-weight-semibold);line-height:var(--line-height-tight);margin:0}.card-badge{position:relative;right:var(--space-1)}.card-badge,.card-badge-notitle{align-items:center;background:var(--color-error);border-radius:var(--radius-full);color:#fff;cursor:pointer;display:inline-flex;font-size:var(--font-size-2xs);font-weight:var(--font-weight-semibold);height:calc(12px + var(--space-1));justify-content:center;line-height:1;min-width:12px;padding:0 var(--space-2)}.card-badge-notitle{left:var(--space-1);position:absolute;top:var(--space-1);z-index:5}.card-badge-notitle:hover,.card-badge:hover{background:var(--color-error-bg)}.card-body{min-width:0}.card-footer{border-top:1px solid var(--color-border);margin-top:var(--space-4);padding-top:var(--space-4)}.base-card--padding-none .card-header{margin-bottom:0;padding:var(--space-6) var(--space-6) 0}.base-card--padding-none .card-body{padding:var(--space-4) var(--space-6)}.base-card--padding-none .card-footer{margin-top:0;padding:0 var(--space-6) var(--space-6)}.base-card:hover{opacity:1;visibility:visible}.desktop-only{display:block}@media (max-width:768px){.desktop-only{display:none}}.input-group{display:flex;flex-direction:column;gap:var(--space-2)}.input-label{align-items:center;color:var(--color-text-primary);display:flex;font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);gap:var(--space-1);line-height:var(--line-height-tight)}.required-indicator{color:var(--color-error);font-weight:var(--font-weight-bold)}.input-wrapper{align-items:center;display:flex;position:relative}.base-input{background-color:var(--color-bg-primary);border:1px solid var(--color-border);border-radius:var(--radius-md);color:var(--color-text-primary);font-family:var(--font-family-sans);transition:all var(--transition-fast);width:100%}.base-input:hover:not(:disabled){border-color:var(--color-border-hover)}.base-input:focus{border-color:var(--color-border-focus);box-shadow:0 0 0 3px rgba(59,130,246,.1);outline:none}.base-input::placeholder{color:var(--color-text-muted)}.base-input--sm{font-size:var(--font-size-sm);padding:var(--space-2) var(--space-3)}.base-input--md{font-size:var(--font-size-base);padding:var(--space-3) var(--space-4)}.base-input--lg{font-size:var(--font-size-lg);padding:var(--space-4) var(--space-5)}.base-input--error,.base-input--error:focus{border-color:var(--color-error)}.base-input--error:focus{box-shadow:0 0 0 3px rgba(220,38,38,.1)}.base-input--disabled{background-color:var(--color-bg-muted);cursor:not-allowed;opacity:.5}.input-suffix{align-items:center;color:var(--color-text-muted);display:flex;position:absolute;right:var(--space-3)}.input-error{color:var(--color-error)}.input-error,.input-hint{font-size:var(--font-size-sm);line-height:var(--line-height-tight)}.input-hint{color:var(--color-text-muted)}.base-alert{align-items:flex-start;border:1px solid transparent;border-radius:var(--radius-md);display:flex;gap:var(--space-3);padding:var(--space-4)}.base-alert--info{background-color:rgba(59,130,246,.1);border-color:rgba(59,130,246,.2);color:var(--color-info)}.base-alert--success{background-color:rgba(16,185,129,.1);border-color:rgba(16,185,129,.2);color:var(--color-success)}.base-alert--warning{background-color:rgba(245,158,11,.1);border-color:rgba(245,158,11,.2);color:var(--color-warning)}.base-alert--error{background-color:rgba(239,68,68,.1);border-color:rgba(239,68,68,.2);color:var(--color-error)}.alert-icon{flex-shrink:0;height:1.25rem;margin-top:.125rem;width:1.25rem}.alert-content{flex:1;min-width:0}.alert-title{font-weight:var(--font-weight-semibold);line-height:var(--line-height-tight);margin:0 0 var(--space-1) 0}.alert-message,.alert-title{font-size:var(--font-size-sm)}.alert-message{line-height:var(--line-height-normal)}.alert-dismiss{background:none;border:none;color:currentColor;cursor:pointer;flex-shrink:0;height:1.25rem;opacity:.7;padding:0;transition:opacity var(--transition-fast);width:1.25rem}.alert-dismiss:hover{opacity:1}.alert-dismiss:focus{opacity:1;outline:2px solid currentColor;outline-offset:1px}.base-skeleton{animation:shimmer 1.5s ease-in-out infinite;background:linear-gradient(90deg,var(--color-bg-muted) 0,var(--color-bg-secondary) 50%,var(--color-bg-muted) 100%);background-size:200% 100%;overflow:hidden;position:relative}@keyframes shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.skeleton--text{border-radius:var(--radius-sm);height:1em}.skeleton--rectangle{border-radius:var(--radius-md)}.skeleton--rounded{border-radius:var(--radius-lg)}.skeleton--avatar,.skeleton--rounded-full{border-radius:var(--radius-full)}.skeleton--avatar{height:40px;width:40px}.skeleton--card{background:var(--color-bg-primary);border:1px solid var(--color-border);border-radius:var(--radius-lg);min-height:200px;padding:var(--space-6)}.skeleton-card{gap:var(--space-4);height:100%}.skeleton-card,.skeleton-header{display:flex;flex-direction:column}.skeleton-header{gap:var(--space-2)}.skeleton-title{animation:shimmer 1.5s ease-in-out infinite;background:linear-gradient(90deg,var(--color-bg-muted) 0,var(--color-bg-secondary) 50%,var(--color-bg-muted) 100%);background-size:200% 100%;border-radius:var(--radius-sm);height:24px;width:40%}.skeleton-body{display:flex;flex:1;flex-direction:column;gap:var(--space-3)}.skeleton-line{animation:shimmer 1.5s ease-in-out infinite;background:linear-gradient(90deg,var(--color-bg-muted) 0,var(--color-bg-secondary) 50%,var(--color-bg-muted) 100%);background-size:200% 100%;border-radius:var(--radius-sm);height:16px}@media (prefers-reduced-motion:reduce){.base-skeleton,.skeleton-line,.skeleton-title{animation:none;background:var(--color-bg-muted)}}.theme-toggle{align-items:center;display:inline-flex;justify-content:center;transition:all var(--transition-fast)}.theme-toggle:hover{transform:scale(1.05)}.theme-icon{height:1.25rem;transition:transform var(--transition-fast);width:1.25rem}.theme-toggle:active .theme-icon{transform:scale(.95)}@media (prefers-reduced-motion:no-preference){.theme-icon{animation:themeSwitch .3s ease-in-out}}@keyframes themeSwitch{0%{transform:rotate(0deg) scale(1)}50%{transform:rotate(180deg) scale(.8)}to{transform:rotate(1turn) scale(1)}}.icon-btn{align-items:center;background:var(--color-bg-secondary);border:1px solid var(--color-border);border-radius:var(--radius-lg);color:var(--color-text-primary);cursor:pointer;display:flex;font-size:var(--font-size-base);justify-content:center;line-height:1;min-height:36px;min-width:36px;padding:var(--space-2);transition:all var(--transition-base)}.icon-btn:hover:not(:disabled){background:var(--color-bg-muted);border-color:var(--color-border-hover);transform:translateY(-1px)}.icon-btn:active:not(:disabled){transform:translateY(0)}.icon-btn:disabled{cursor:not-allowed;opacity:.5}.icon-btn--sm{font-size:var(--font-size-sm);min-height:32px;min-width:32px}.icon-btn--lg{font-size:var(--font-size-lg);min-height:44px;min-width:44px}.toast{align-items:center;border-radius:var(--radius-xl);box-shadow:var(--shadow-xl);display:flex;font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);gap:var(--space-3);left:50%;max-width:500px;padding:var(--space-4) var(--space-6);position:fixed;top:80px;transform:translateX(-50%);z-index:var(--z-tooltip)}.toast--error{background:var(--color-error);color:#fff}.toast--success{background:var(--color-success);color:#fff}.toast--warning{background:var(--color-warning);color:#fff}.toast--info{background:var(--color-info);color:#fff}.toast-icon{flex-shrink:0;font-size:var(--font-size-xl)}.toast-message{flex:1}.toast-close{align-items:center;background:none;border:none;border-radius:var(--radius-base);color:currentColor;cursor:pointer;display:flex;justify-content:center;opacity:.9;padding:var(--space-1);transition:background var(--transition-base)}.toast-close:hover{background:hsla(0,0%,100%,.2);opacity:1}.toast-enter-active,.toast-leave-active{transition:all var(--transition-slow)}.toast-enter-from,.toast-leave-to{opacity:0;transform:translate(-50%,-20px)}.sidebar{background:var(--color-bg-primary);border-right:1px solid var(--color-border);display:flex;flex-direction:column;max-width:600px;min-width:250px;overflow:hidden;position:relative}.sidebar-header{align-items:center;border-bottom:1px solid var(--color-border);display:flex;justify-content:space-between;padding:var(--space-4)}.sidebar-title{color:var(--color-text-primary);font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);margin:0}.sidebar-subtitle{color:var(--color-text-secondary);font-size:var(--font-size-sm)}.sidebar-content{flex:1;overflow-y:auto;padding:var(--space-2)}.sidebar-content::-webkit-scrollbar{width:8px}.sidebar-content::-webkit-scrollbar-track{background:transparent}.sidebar-content::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:var(--radius-base)}.sidebar-content::-webkit-scrollbar-thumb:hover{background:var(--color-border-hover)}.resize-handle{background:transparent;bottom:0;cursor:col-resize;position:absolute;right:0;top:0;transition:background var(--transition-base);width:4px}.resize-handle:hover{background:var(--color-primary)}.breadcrumb{align-items:center;background:var(--color-bg-secondary);border-bottom:1px solid var(--color-border);display:flex;gap:var(--space-2);overflow-x:auto;padding:var(--space-3) var(--space-4);white-space:nowrap}.breadcrumb::-webkit-scrollbar{height:4px}.breadcrumb::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:var(--radius-sm)}.breadcrumb-item{background:none;border:none;border-radius:var(--radius-base);color:var(--color-primary);cursor:pointer;font-family:var(--font-family-sans);font-size:var(--font-size-sm);padding:var(--space-1) var(--space-2);text-decoration:none;transition:all var(--transition-base)}.breadcrumb-item:hover{background:var(--color-primary-light)}.breadcrumb-separator{color:var(--color-text-secondary);font-size:var(--font-size-xs);user-select:none}.toolbar{align-items:center;background:var(--color-bg-primary);border-bottom:1px solid var(--color-border);display:flex;justify-content:space-between;padding:var(--space-4) var(--space-6)}.toolbar--blur{backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);background:hsla(0,0%,100%,.6)}[data-theme=dark] .toolbar--blur{background:rgba(28,28,30,.6)}.toolbar-left,.toolbar-right{align-items:center;display:flex;gap:var(--space-2)}.toolbar-left{flex:1;gap:var(--space-4);min-width:0}.toolbar-title{color:var(--color-text-primary);font-size:var(--font-size-base);font-weight:var(--font-weight-medium);margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.toolbar-subtitle{color:var(--color-text-secondary);font-size:var(--font-size-sm);white-space:nowrap}.spinner{animation:spin .8s linear infinite;border:3px solid var(--color-border);border-radius:var(--radius-full);border-top-color:var(--color-primary);height:40px;width:40px}.spinner--sm{border-width:2px;height:24px;width:24px}.spinner--lg{border-width:4px;height:56px;width:56px}@keyframes spin{to{transform:rotate(1turn)}}.loading-state{align-items:center;display:flex;flex-direction:column;gap:var(--space-4);height:100%;justify-content:center;padding:var(--space-8)}.loading-state__text{color:var(--color-text-secondary);font-size:var(--font-size-sm)}.empty-state{align-items:center;display:flex;flex-direction:column;gap:var(--space-4);height:100%;justify-content:center;padding:var(--space-8);text-align:center}.empty-state__icon{font-size:4rem;line-height:1;opacity:.5}.empty-state__title{color:var(--color-text-primary);font-size:var(--font-size-2xl);font-weight:var(--font-weight-semibold);margin:0}.empty-state__description{color:var(--color-text-secondary);font-size:var(--font-size-base);margin:0;max-width:400px}.lightbox{backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);background:var(--color-bg-overlay);inset:0;position:fixed;z-index:var(--z-modal)}.lightbox,.lightbox__close{align-items:center;display:flex;justify-content:center}.lightbox__close{backdrop-filter:blur(20px);background:var(--color-bg-primary);border:1px solid var(--color-border);border-radius:var(--radius-full);color:var(--color-text-primary);cursor:pointer;font-size:var(--font-size-2xl);height:44px;position:absolute;right:var(--space-6);top:var(--space-6);transition:all var(--transition-base);width:44px;z-index:calc(var(--z-modal) + 1)}.lightbox__close:hover{background:var(--color-bg-muted);transform:scale(1.1)}.lightbox__content{max-height:90vh;max-width:90vw;position:relative}.lightbox__content,.lightbox__nav{align-items:center;display:flex;justify-content:center}.lightbox__nav{backdrop-filter:blur(20px);background:var(--color-bg-primary);border:1px solid var(--color-border);border-radius:var(--radius-full);color:var(--color-text-primary);cursor:pointer;font-size:var(--font-size-2xl);height:56px;position:absolute;top:50%;transform:translateY(-50%);transition:all var(--transition-base);width:56px;z-index:calc(var(--z-modal) + 1)}.lightbox__nav:hover{background:var(--color-bg-muted);transform:translateY(-50%) scale(1.1)}.lightbox__nav--prev{left:var(--space-8)}.lightbox__nav--next{right:var(--space-8)}.lightbox__footer{align-items:center;backdrop-filter:blur(20px);background:var(--color-bg-primary);border:1px solid var(--color-border);border-radius:var(--radius-xl);bottom:var(--space-8);display:flex;flex-direction:column;gap:var(--space-2);left:50%;padding:var(--space-4) var(--space-6);position:absolute;transform:translateX(-50%);z-index:calc(var(--z-modal) + 1)}.lightbox-enter-active,.lightbox-leave-active{transition:opacity var(--transition-slow)}.lightbox-enter-from,.lightbox-leave-to{opacity:0}.zoom-controls{background:var(--color-bg-primary);box-shadow:var(--shadow-md);gap:var(--space-2);padding:var(--space-2) var(--space-4)}.zoom-btn,.zoom-controls{align-items:center;border:1px solid var(--color-border);border-radius:var(--radius-full);display:flex}.zoom-btn{background:var(--color-bg-secondary);color:var(--color-text-primary);cursor:pointer;font-family:var(--font-family-sans);font-size:var(--font-size-sm);height:32px;justify-content:center;min-width:32px;padding:0 var(--space-3);transition:all var(--transition-base)}.zoom-btn:hover{background:var(--color-bg-muted)}.zoom-level{color:var(--color-text-secondary);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);min-width:50px;text-align:center}@media (max-width:768px){.nav-bar{flex-wrap:wrap;min-height:auto;padding:var(--space-3)}.nav-center{flex:1 1 100%;margin-top:var(--space-3);order:3}.sidebar{bottom:0;box-shadow:var(--shadow-xl);left:0;position:absolute;top:0;z-index:var(--z-dropdown)}.lightbox__nav{height:44px;width:44px}.lightbox__nav--prev{left:var(--space-4)}.lightbox__nav--next{right:var(--space-4)}}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cal.macconnachie/web-components",
3
- "version": "0.0.11",
3
+ "version": "0.0.13",
4
4
  "description": "Web components hosted on a CDN",
5
5
  "keywords": [
6
6
  "lit",