@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.
- package/dist/components/auth.js +49 -49
- package/dist/components/theme-toggle.js +149 -118
- package/dist/index.js +37 -6
- package/dist/stylesheets/main.css +1 -1
- package/package.json +1 -1
package/dist/components/auth.js
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
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),
|
|
283
|
-
n.push({ type: 1, index: o, name:
|
|
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
|
-
},
|
|
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,
|
|
632
|
-
for (; l <= p && u <=
|
|
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[
|
|
636
|
-
else if (c[l] === a[
|
|
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,
|
|
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
|
|
642
|
-
P(
|
|
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[
|
|
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
|
|
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 (
|
|
691
|
-
const v = await
|
|
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
|
|
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:
|
|
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=${
|
|
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 = (
|
|
886
|
-
const _ = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~", k = new Uint8Array(
|
|
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 (
|
|
889
|
-
const k = new TextEncoder().encode(
|
|
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
|
|
893
|
-
return sessionStorage.setItem("pkce_code_verifier",
|
|
892
|
+
const $ = a(128), _ = await c($);
|
|
893
|
+
return sessionStorage.setItem("pkce_code_verifier", $), { codeVerifier: $, codeChallenge: _ };
|
|
894
894
|
}, h = () => {
|
|
895
|
-
const
|
|
896
|
-
return sessionStorage.setItem("oauth_state",
|
|
895
|
+
const $ = a(32);
|
|
896
|
+
return sessionStorage.setItem("oauth_state", $), $;
|
|
897
897
|
}, d = async () => {
|
|
898
|
-
const { codeChallenge:
|
|
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:
|
|
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
|
|
912
|
-
window.location.href =
|
|
911
|
+
const $ = await d();
|
|
912
|
+
window.location.href = $;
|
|
913
913
|
}, p = async () => {
|
|
914
|
-
const { codeChallenge:
|
|
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:
|
|
922
|
+
code_challenge: $
|
|
923
923
|
});
|
|
924
924
|
return `${o.domain}/oauth2/authorize?${k.toString()}`;
|
|
925
925
|
}, u = async () => {
|
|
926
|
-
const
|
|
927
|
-
window.location.href =
|
|
928
|
-
},
|
|
926
|
+
const $ = await p();
|
|
927
|
+
window.location.href = $;
|
|
928
|
+
}, w = ($) => {
|
|
929
929
|
const _ = sessionStorage.getItem("oauth_state");
|
|
930
|
-
return sessionStorage.removeItem("oauth_state"), _ ===
|
|
930
|
+
return sessionStorage.removeItem("oauth_state"), _ === $;
|
|
931
931
|
}, v = () => {
|
|
932
|
-
const
|
|
933
|
-
return sessionStorage.removeItem("pkce_code_verifier"),
|
|
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 (
|
|
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:
|
|
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
|
-
${
|
|
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
|
-
${
|
|
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
|
|
21
|
-
const e = r.length === 1 ? r[0] : t.reduce(((s, i,
|
|
22
|
-
if (
|
|
23
|
-
if (typeof
|
|
24
|
-
throw Error("Value passed to 'css' function must be a 'css' function result: " +
|
|
25
|
-
})(i) + r[
|
|
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
|
|
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
|
|
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:
|
|
82
|
+
const { get: i, set: o } = pt(this.prototype, t) ?? { get() {
|
|
83
83
|
return this[e];
|
|
84
|
-
}, set(
|
|
85
|
-
this[e] =
|
|
84
|
+
}, set(n) {
|
|
85
|
+
this[e] = n;
|
|
86
86
|
} };
|
|
87
|
-
return { get: i, set(
|
|
88
|
-
const
|
|
89
|
-
|
|
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
|
|
166
|
-
this._$Em = t,
|
|
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
|
|
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
|
|
175
|
-
this[i] =
|
|
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,
|
|
181
|
-
if (s ??= i.getPropertyOptions(t), !((s.hasChanged ?? B)(
|
|
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:
|
|
187
|
-
s && !(this._$Ej ??= /* @__PURE__ */ new Map()).has(t) && (this._$Ej.set(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,
|
|
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,
|
|
211
|
-
const { wrapped:
|
|
212
|
-
|
|
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
|
-
|
|
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,
|
|
253
|
-
function
|
|
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,
|
|
260
|
-
for (let
|
|
261
|
-
const
|
|
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 <
|
|
264
|
-
const $ =
|
|
265
|
-
|
|
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 [
|
|
267
|
+
return [nt(r, o + (r[e] || "<?>") + (t === 2 ? "</svg>" : t === 3 ? "</math>" : "")), s];
|
|
268
268
|
};
|
|
269
|
-
class
|
|
269
|
+
class k {
|
|
270
270
|
constructor({ strings: t, _$litType$: e }, s) {
|
|
271
271
|
let i;
|
|
272
272
|
this.parts = [];
|
|
273
|
-
let
|
|
274
|
-
const
|
|
275
|
-
if (this.el =
|
|
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 &&
|
|
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[
|
|
283
|
-
|
|
284
|
-
} else l.startsWith(m) && (
|
|
285
|
-
if (
|
|
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(),
|
|
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)
|
|
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; )
|
|
296
|
+
for (; (l = i.data.indexOf(m, l + 1)) !== -1; ) a.push({ type: 7, index: o }), l += m.length - 1;
|
|
297
297
|
}
|
|
298
|
-
|
|
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
|
|
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
|
|
310
|
-
return i?.constructor !==
|
|
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
|
|
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
|
|
326
|
-
for (;
|
|
327
|
-
if (
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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 =
|
|
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 =
|
|
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
|
|
375
|
-
|
|
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
|
|
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
|
|
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,
|
|
407
|
-
this.type = 1, this._$AH = d, this._$AN = void 0, this.element = t, this.name = e, this._$AM = i, this.options =
|
|
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
|
|
411
|
-
let
|
|
412
|
-
if (
|
|
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
|
|
415
|
-
let
|
|
416
|
-
for (t =
|
|
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
|
-
|
|
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,
|
|
442
|
-
super(t, e, s, i,
|
|
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 =
|
|
446
|
-
const s = this._$AH, i = t === d && s !== d || t.capture !== s.capture || t.once !== s.once || t.passive !== s.passive,
|
|
447
|
-
i && this.element.removeEventListener(this.name, this, s),
|
|
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
|
-
|
|
461
|
+
A(this, t);
|
|
462
462
|
}
|
|
463
463
|
}
|
|
464
464
|
const Pt = V.litHtmlPolyfillSupport;
|
|
465
|
-
Pt?.(
|
|
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
|
|
471
|
-
s._$litPart$ = i = new
|
|
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
|
|
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
|
|
500
|
-
|
|
499
|
+
const kt = W.litElementPolyfillSupport;
|
|
500
|
+
kt?.({ LitElement: C });
|
|
501
501
|
(W.litElementVersions ??= []).push("4.2.1");
|
|
502
|
-
const
|
|
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
|
|
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
|
|
510
|
-
if (
|
|
511
|
-
const { name:
|
|
512
|
-
return { set(
|
|
513
|
-
const
|
|
514
|
-
t.set.call(this,
|
|
515
|
-
}, init(
|
|
516
|
-
return
|
|
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:
|
|
521
|
-
return function(
|
|
522
|
-
const
|
|
523
|
-
t.call(this,
|
|
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
|
|
529
|
-
return (t, e) => typeof e == "object" ?
|
|
530
|
-
const
|
|
531
|
-
return i.constructor.createProperty(
|
|
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
|
|
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,
|
|
539
|
-
(
|
|
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 =
|
|
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
|
-
|
|
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:
|
|
675
|
+
background: transparent;
|
|
676
|
+
opacity: 0.7;
|
|
670
677
|
}
|
|
671
678
|
|
|
672
679
|
.btn--outline {
|
|
673
|
-
border: 1px solid
|
|
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
|
-
|
|
768
|
+
U({ type: String, reflect: !0 })
|
|
738
769
|
], g.prototype, "theme", 2);
|
|
739
770
|
E([
|
|
740
|
-
|
|
771
|
+
U({ type: String, attribute: "storage-key" })
|
|
741
772
|
], g.prototype, "storageKey", 2);
|
|
742
773
|
E([
|
|
743
|
-
|
|
774
|
+
U({ type: String, attribute: "size" })
|
|
744
775
|
], g.prototype, "size", 2);
|
|
745
776
|
E([
|
|
746
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
2649
|
+
background: transparent;
|
|
2650
|
+
opacity: 0.7;
|
|
2644
2651
|
}
|
|
2645
2652
|
|
|
2646
2653
|
.btn--outline {
|
|
2647
|
-
border: 1px solid
|
|
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("
|
|
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)}}
|