@moon-x/react-sdk 0.8.1 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -389,8 +389,8 @@ function _ts_generator(thisArg, body) {
389
389
  };
390
390
  }
391
391
  }
392
- import { ethereum_exports } from "./chunk-Y6HSLN2H.mjs";
393
- import { solana_exports } from "./chunk-RFAKWGRF.mjs";
392
+ import { ethereum_exports } from "./chunk-7XFCJAFG.mjs";
393
+ import { solana_exports } from "./chunk-OAG4S5VJ.mjs";
394
394
  import { AuthContext, useAuthSDK } from "./chunk-PCEN5CH6.mjs";
395
395
  // src/index.ts
396
396
  import { useAddPasskey, useEphemeralSigner, useLoginWithEmail, usePasskeyStatus, useRegisterPasskey, useRemovePasskey, useUser } from "@moon-x/core/react";
@@ -3038,29 +3038,60 @@ function themeToCSS(theme) {
3038
3038
  "--moonkey-font-family": theme.fontFamily
3039
3039
  };
3040
3040
  }
3041
+ function isColorDark(color) {
3042
+ var c = color.trim().toLowerCase();
3043
+ if (c.startsWith("#")) {
3044
+ var h = c.slice(1);
3045
+ if (h.length === 3 || h.length === 4) {
3046
+ h = h.split("").map(function(ch) {
3047
+ return ch + ch;
3048
+ }).join("");
3049
+ }
3050
+ if (h.length !== 6 && h.length !== 8) return void 0;
3051
+ var r = parseInt(h.substring(0, 2), 16);
3052
+ var g = parseInt(h.substring(2, 4), 16);
3053
+ var b = parseInt(h.substring(4, 6), 16);
3054
+ if (Number.isNaN(r) || Number.isNaN(g) || Number.isNaN(b)) return void 0;
3055
+ return 0.299 * r + 0.587 * g + 0.114 * b < 128;
3056
+ }
3057
+ var rgb = c.match(/^rgba?\(([^)]+)\)$/);
3058
+ if (rgb) {
3059
+ var parts = rgb[1].split(/[\s,/]+/).filter(Boolean).slice(0, 3);
3060
+ if (parts.length < 3) return void 0;
3061
+ var _parts_map = _sliced_to_array(parts.map(function(p) {
3062
+ return p.endsWith("%") ? parseFloat(p) / 100 * 255 : parseFloat(p);
3063
+ }), 3), r1 = _parts_map[0], g1 = _parts_map[1], b1 = _parts_map[2];
3064
+ if (Number.isNaN(r1) || Number.isNaN(g1) || Number.isNaN(b1)) return void 0;
3065
+ return 0.299 * r1 + 0.587 * g1 + 0.114 * b1 < 128;
3066
+ }
3067
+ return void 0;
3068
+ }
3041
3069
  function isDarkMode(theme, displayMode, backgroundColor) {
3070
+ var _isColorDark;
3042
3071
  var _theme_colors;
3043
3072
  if (displayMode === "dark") return true;
3044
3073
  if (displayMode === "light") return false;
3074
+ if (displayMode === "auto" && typeof window !== "undefined" && typeof window.matchMedia === "function") {
3075
+ return window.matchMedia("(prefers-color-scheme: dark)").matches;
3076
+ }
3045
3077
  var bgToCheck = backgroundColor || (theme === null || theme === void 0 ? void 0 : (_theme_colors = theme.colors) === null || _theme_colors === void 0 ? void 0 : _theme_colors.background);
3046
3078
  if (!bgToCheck) return false;
3047
- var hex = bgToCheck.replace("#", "");
3048
- if (hex.length !== 6) return false;
3049
- var r = parseInt(hex.substring(0, 2), 16);
3050
- var g = parseInt(hex.substring(2, 4), 16);
3051
- var b = parseInt(hex.substring(4, 6), 16);
3052
- return 0.299 * r + 0.587 * g + 0.114 * b < 128;
3079
+ return (_isColorDark = isColorDark(bgToCheck)) !== null && _isColorDark !== void 0 ? _isColorDark : false;
3053
3080
  }
3054
3081
  // src/components/app-logo.tsx
3055
3082
  import { useState as useState7 } from "react";
3056
3083
  import { jsx } from "react/jsx-runtime";
3057
3084
  var AppLogo = function AppLogo(param) {
3058
- var src = param.src, appConfig = param.appConfig, className = param.className, style = param.style;
3085
+ var src = param.src, appConfig = param.appConfig, className = param.className, style = param.style, height = param.height, _param_align = param.align, align = _param_align === void 0 ? "center" : _param_align;
3059
3086
  var _useState7 = _sliced_to_array(useState7(false), 2), imageError = _useState7[0], setImageError = _useState7[1];
3060
3087
  var logoSrc = src || (appConfig === null || appConfig === void 0 ? void 0 : appConfig.public_logo_url) || "";
3061
3088
  var defaultStyle = _object_spread({
3062
- height: "4rem",
3063
- marginLeft: "auto",
3089
+ display: "block",
3090
+ // Truthy check (not `!= null`): a 0 height is degenerate (invisible logo),
3091
+ // so fall back to the 4rem default rather than rendering "0px".
3092
+ height: height ? "".concat(height, "px") : "4rem",
3093
+ // center → auto/auto; left → 0/auto.
3094
+ marginLeft: align === "left" ? 0 : "auto",
3064
3095
  marginRight: "auto"
3065
3096
  }, style);
3066
3097
  var handleImageError = function handleImageError() {
@@ -3189,17 +3220,17 @@ function hslToHex(h, s, l) {
3189
3220
  }).join(""));
3190
3221
  }
3191
3222
  function darken(hex, amount) {
3192
- if (!/^#[0-9a-fA-F]{6}$/.test(hex)) return hex;
3223
+ if (!/^#[0-9a-fA-F]{6}([0-9a-fA-F]{2})?$/.test(hex)) return hex;
3193
3224
  var _hexToHsl = _sliced_to_array(hexToHsl(hex), 3), h = _hexToHsl[0], s = _hexToHsl[1], l = _hexToHsl[2];
3194
3225
  return hslToHex(h, s, Math.max(0, l - amount));
3195
3226
  }
3196
3227
  function lighten(hex, amount) {
3197
- if (!/^#[0-9a-fA-F]{6}$/.test(hex)) return hex;
3228
+ if (!/^#[0-9a-fA-F]{6}([0-9a-fA-F]{2})?$/.test(hex)) return hex;
3198
3229
  var _hexToHsl = _sliced_to_array(hexToHsl(hex), 3), h = _hexToHsl[0], s = _hexToHsl[1], l = _hexToHsl[2];
3199
3230
  return hslToHex(h, s, Math.min(1, l + amount));
3200
3231
  }
3201
3232
  function contrastForeground(hex) {
3202
- if (!/^#[0-9a-fA-F]{6}$/.test(hex)) return "#000000";
3233
+ if (!/^#[0-9a-fA-F]{6}([0-9a-fA-F]{2})?$/.test(hex)) return "#000000";
3203
3234
  var h = hex.replace("#", "");
3204
3235
  var r = parseInt(h.substring(0, 2), 16);
3205
3236
  var g = parseInt(h.substring(2, 4), 16);
@@ -3208,35 +3239,101 @@ function contrastForeground(hex) {
3208
3239
  }
3209
3240
  function isDarkAppearance(appearance) {
3210
3241
  var _ref = appearance !== null && appearance !== void 0 ? appearance : {}, displayMode = _ref.displayMode, backgroundColor = _ref.backgroundColor;
3211
- if (displayMode === "dark") return true;
3212
- if (displayMode === "light") return false;
3213
- if (!backgroundColor) return false;
3214
- return contrastForeground(backgroundColor) === "#ffffff";
3242
+ return isDarkMode(void 0, displayMode, backgroundColor);
3215
3243
  }
3216
3244
  var BORDER_RADIUS_PRESETS = {
3217
3245
  none: {
3218
3246
  sm: "0",
3219
3247
  md: "0",
3220
- lg: "0"
3248
+ lg: "0",
3249
+ full: "0"
3221
3250
  },
3222
3251
  sm: {
3223
3252
  sm: "0.125rem",
3224
3253
  md: "0.25rem",
3225
- lg: "0.375rem"
3254
+ lg: "0.375rem",
3255
+ full: "9999px"
3226
3256
  },
3227
3257
  md: {
3228
3258
  sm: "0.375rem",
3229
3259
  md: "0.5rem",
3230
- lg: "0.75rem"
3260
+ lg: "0.75rem",
3261
+ full: "9999px"
3231
3262
  },
3232
3263
  lg: {
3233
3264
  sm: "0.5rem",
3234
3265
  md: "0.75rem",
3235
- lg: "1rem"
3266
+ lg: "1rem",
3267
+ full: "9999px"
3268
+ },
3269
+ full: {
3270
+ sm: "9999px",
3271
+ md: "9999px",
3272
+ lg: "9999px",
3273
+ full: "9999px"
3236
3274
  }
3237
3275
  };
3276
+ function definedOnly(src) {
3277
+ var out = {};
3278
+ if (!src) return out;
3279
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
3280
+ try {
3281
+ for(var _iterator = Object.keys(src)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
3282
+ var key = _step.value;
3283
+ var v = src[key];
3284
+ if (v !== void 0 && v !== null && v !== "") out[key] = v;
3285
+ }
3286
+ } catch (err) {
3287
+ _didIteratorError = true;
3288
+ _iteratorError = err;
3289
+ } finally{
3290
+ try {
3291
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
3292
+ _iterator.return();
3293
+ }
3294
+ } finally{
3295
+ if (_didIteratorError) {
3296
+ throw _iteratorError;
3297
+ }
3298
+ }
3299
+ }
3300
+ return out;
3301
+ }
3302
+ function resolveAppearanceTokens(appearance, isDark) {
3303
+ var _ref, _perMode_fontFamily;
3304
+ var _appearance_typography, _perMode_typography, _appearance_typography1, _perMode_typography1;
3305
+ if (!appearance) return {};
3306
+ var baseRadius = _type_of(appearance.borderRadius) === "object" ? appearance.borderRadius : void 0;
3307
+ var perMode = (_ref = isDark ? appearance.dark : appearance.light) !== null && _ref !== void 0 ? _ref : {};
3308
+ return {
3309
+ colors: _object_spread({}, appearance.colors, perMode.colors),
3310
+ borderRadius: _object_spread({}, baseRadius, perMode.borderRadius),
3311
+ fontFamily: (_perMode_fontFamily = perMode.fontFamily) !== null && _perMode_fontFamily !== void 0 ? _perMode_fontFamily : appearance.fontFamily,
3312
+ typography: _object_spread_props(_object_spread({}, appearance.typography, perMode.typography), {
3313
+ fontSize: _object_spread({}, (_appearance_typography = appearance.typography) === null || _appearance_typography === void 0 ? void 0 : _appearance_typography.fontSize, (_perMode_typography = perMode.typography) === null || _perMode_typography === void 0 ? void 0 : _perMode_typography.fontSize),
3314
+ fontWeight: _object_spread({}, (_appearance_typography1 = appearance.typography) === null || _appearance_typography1 === void 0 ? void 0 : _appearance_typography1.fontWeight, (_perMode_typography1 = perMode.typography) === null || _perMode_typography1 === void 0 ? void 0 : _perMode_typography1.fontWeight)
3315
+ }),
3316
+ card: _object_spread({}, appearance.card, perMode.card),
3317
+ backdrop: _object_spread({}, appearance.backdrop, perMode.backdrop)
3318
+ };
3319
+ }
3320
+ function resolveLogo(logo, isDark) {
3321
+ if (!logo) return void 0;
3322
+ if (typeof logo === "string") return {
3323
+ src: logo
3324
+ };
3325
+ var src = isDark && logo.srcDark ? logo.srcDark : logo.src;
3326
+ return {
3327
+ src: src,
3328
+ height: logo.height,
3329
+ align: logo.align
3330
+ };
3331
+ }
3238
3332
  function appearanceToTheme(appearance) {
3333
+ var isDark = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false;
3334
+ var _tokens_borderRadius, _tokens_fontFamily;
3239
3335
  if (!appearance) return {};
3336
+ var tokens = resolveAppearanceTokens(appearance, isDark);
3240
3337
  var colors = {};
3241
3338
  if (appearance.accentColor) {
3242
3339
  var a = appearance.accentColor;
@@ -3249,8 +3346,9 @@ function appearanceToTheme(appearance) {
3249
3346
  colors.foregroundAccent = darken(a, 0.04);
3250
3347
  }
3251
3348
  if (appearance.backgroundColor) {
3349
+ var _isColorDark;
3252
3350
  var bg = appearance.backgroundColor;
3253
- var isBgDark = contrastForeground(bg) === "#ffffff";
3351
+ var isBgDark = (_isColorDark = isColorDark(bg)) !== null && _isColorDark !== void 0 ? _isColorDark : isDark;
3254
3352
  colors.background = bg;
3255
3353
  colors.background2 = isBgDark ? lighten(bg, 0.08) : darken(bg, 0.03);
3256
3354
  colors.background3 = isBgDark ? lighten(bg, 0.14) : darken(bg, 0.06);
@@ -3267,43 +3365,191 @@ function appearanceToTheme(appearance) {
3267
3365
  colors.foreground4 = "#d1d5db";
3268
3366
  }
3269
3367
  }
3270
- if (appearance.colors) {
3271
- Object.assign(colors, appearance.colors);
3272
- }
3368
+ Object.assign(colors, definedOnly(tokens.colors));
3273
3369
  var result = {};
3274
- if (Object.keys(colors).length > 0) result.colors = colors;
3275
- if (appearance.fontFamily) result.fontFamily = appearance.fontFamily;
3276
- if (appearance.borderRadius) {
3277
- if (typeof appearance.borderRadius === "string") {
3278
- var _BORDER_RADIUS_PRESETS_appearance_borderRadius;
3279
- result.borderRadius = (_BORDER_RADIUS_PRESETS_appearance_borderRadius = BORDER_RADIUS_PRESETS[appearance.borderRadius]) !== null && _BORDER_RADIUS_PRESETS_appearance_borderRadius !== void 0 ? _BORDER_RADIUS_PRESETS_appearance_borderRadius : BORDER_RADIUS_PRESETS.md;
3280
- } else {
3281
- result.borderRadius = appearance.borderRadius;
3282
- }
3370
+ if (Object.keys(colors).length > 0) {
3371
+ result.colors = colors;
3372
+ }
3373
+ var radius = {};
3374
+ if (typeof appearance.borderRadius === "string") {
3375
+ var _BORDER_RADIUS_PRESETS_appearance_borderRadius;
3376
+ Object.assign(radius, (_BORDER_RADIUS_PRESETS_appearance_borderRadius = BORDER_RADIUS_PRESETS[appearance.borderRadius]) !== null && _BORDER_RADIUS_PRESETS_appearance_borderRadius !== void 0 ? _BORDER_RADIUS_PRESETS_appearance_borderRadius : BORDER_RADIUS_PRESETS.md);
3377
+ }
3378
+ var _ref = (_tokens_borderRadius = tokens.borderRadius) !== null && _tokens_borderRadius !== void 0 ? _tokens_borderRadius : {}, sm = _ref.sm, md = _ref.md, lg = _ref.lg, full = _ref.full;
3379
+ Object.assign(radius, definedOnly({
3380
+ sm: sm,
3381
+ md: md,
3382
+ lg: lg,
3383
+ full: full
3384
+ }));
3385
+ if (Object.keys(radius).length > 0) {
3386
+ result.borderRadius = radius;
3283
3387
  }
3388
+ var fontFamily = (_tokens_fontFamily = tokens.fontFamily) !== null && _tokens_fontFamily !== void 0 ? _tokens_fontFamily : appearance.fontFamily;
3389
+ if (fontFamily) result.fontFamily = fontFamily;
3284
3390
  return result;
3285
3391
  }
3392
+ function appearanceToMoonxVars(appearance, isDark) {
3393
+ var _t_colors, _t_colors1, _t_colors2, _t_colors3, _t_borderRadius, _t_borderRadius1, _t_borderRadius2, _t_typography, _t_typography1, _t_typography2, _t_typography3, _t_typography4, _t_typography5, _t_typography_fontSize, _t_typography6, _t_typography_fontSize1, _t_typography7, _t_typography_fontSize2, _t_typography8, _t_typography_fontWeight, _t_typography9, _t_typography_fontWeight1, _t_typography10, _t_card, _t_card1, _t_card2, _t_card3, _t_backdrop, _t_backdrop1;
3394
+ var vars = {};
3395
+ if (!appearance) return vars;
3396
+ var t = resolveAppearanceTokens(appearance, isDark);
3397
+ var set = function set(name, value) {
3398
+ if (value !== void 0 && value !== null && value !== "") {
3399
+ vars[name] = String(value);
3400
+ }
3401
+ };
3402
+ set("--moonx-color-warning", (_t_colors = t.colors) === null || _t_colors === void 0 ? void 0 : _t_colors.warning);
3403
+ set("--moonx-color-info", (_t_colors1 = t.colors) === null || _t_colors1 === void 0 ? void 0 : _t_colors1.info);
3404
+ set("--moonx-color-link", (_t_colors2 = t.colors) === null || _t_colors2 === void 0 ? void 0 : _t_colors2.link);
3405
+ set("--moonx-color-ring", (_t_colors3 = t.colors) === null || _t_colors3 === void 0 ? void 0 : _t_colors3.ring);
3406
+ set("--moonx-radius-button", (_t_borderRadius = t.borderRadius) === null || _t_borderRadius === void 0 ? void 0 : _t_borderRadius.button);
3407
+ set("--moonx-radius-card", (_t_borderRadius1 = t.borderRadius) === null || _t_borderRadius1 === void 0 ? void 0 : _t_borderRadius1.card);
3408
+ set("--moonx-radius-input", (_t_borderRadius2 = t.borderRadius) === null || _t_borderRadius2 === void 0 ? void 0 : _t_borderRadius2.input);
3409
+ set("--moonx-font-family-heading", (_t_typography = t.typography) === null || _t_typography === void 0 ? void 0 : _t_typography.fontFamilyHeading);
3410
+ set("--moonx-font-size-heading", (_t_typography1 = t.typography) === null || _t_typography1 === void 0 ? void 0 : _t_typography1.fontSizeHeading);
3411
+ set("--moonx-font-weight-heading", (_t_typography2 = t.typography) === null || _t_typography2 === void 0 ? void 0 : _t_typography2.fontWeightHeading);
3412
+ set("--moonx-color-heading", (_t_typography3 = t.typography) === null || _t_typography3 === void 0 ? void 0 : _t_typography3.colorHeading);
3413
+ set("--moonx-letter-spacing-heading", (_t_typography4 = t.typography) === null || _t_typography4 === void 0 ? void 0 : _t_typography4.letterSpacingHeading);
3414
+ set("--moonx-letter-spacing", (_t_typography5 = t.typography) === null || _t_typography5 === void 0 ? void 0 : _t_typography5.letterSpacing);
3415
+ set("--moonx-font-size-sm", (_t_typography6 = t.typography) === null || _t_typography6 === void 0 ? void 0 : (_t_typography_fontSize = _t_typography6.fontSize) === null || _t_typography_fontSize === void 0 ? void 0 : _t_typography_fontSize.sm);
3416
+ set("--moonx-font-size-lg", (_t_typography7 = t.typography) === null || _t_typography7 === void 0 ? void 0 : (_t_typography_fontSize1 = _t_typography7.fontSize) === null || _t_typography_fontSize1 === void 0 ? void 0 : _t_typography_fontSize1.lg);
3417
+ set("--moonx-font-size-xl", (_t_typography8 = t.typography) === null || _t_typography8 === void 0 ? void 0 : (_t_typography_fontSize2 = _t_typography8.fontSize) === null || _t_typography_fontSize2 === void 0 ? void 0 : _t_typography_fontSize2.xl);
3418
+ set("--moonx-font-weight-medium", (_t_typography9 = t.typography) === null || _t_typography9 === void 0 ? void 0 : (_t_typography_fontWeight = _t_typography9.fontWeight) === null || _t_typography_fontWeight === void 0 ? void 0 : _t_typography_fontWeight.medium);
3419
+ set("--moonx-font-weight-bold", (_t_typography10 = t.typography) === null || _t_typography10 === void 0 ? void 0 : (_t_typography_fontWeight1 = _t_typography10.fontWeight) === null || _t_typography_fontWeight1 === void 0 ? void 0 : _t_typography_fontWeight1.bold);
3420
+ set("--moonx-card-padding", (_t_card = t.card) === null || _t_card === void 0 ? void 0 : _t_card.padding);
3421
+ set("--moonx-card-shadow", (_t_card1 = t.card) === null || _t_card1 === void 0 ? void 0 : _t_card1.shadow);
3422
+ set("--moonx-card-border-width", (_t_card2 = t.card) === null || _t_card2 === void 0 ? void 0 : _t_card2.borderWidth);
3423
+ set("--moonx-card-max-width", (_t_card3 = t.card) === null || _t_card3 === void 0 ? void 0 : _t_card3.maxWidth);
3424
+ set("--moonx-backdrop-color", (_t_backdrop = t.backdrop) === null || _t_backdrop === void 0 ? void 0 : _t_backdrop.color);
3425
+ set("--moonx-backdrop-blur", (_t_backdrop1 = t.backdrop) === null || _t_backdrop1 === void 0 ? void 0 : _t_backdrop1.blur);
3426
+ return vars;
3427
+ }
3428
+ var COMPONENT_RADIUS_VAR = {
3429
+ card: "--moonx-radius-card",
3430
+ button: "--moonx-radius-button",
3431
+ input: "--moonx-radius-input"
3432
+ };
3433
+ function appearanceToComponentVars(appearance) {
3434
+ var vars = {};
3435
+ var components = appearance === null || appearance === void 0 ? void 0 : appearance.components;
3436
+ if (!components) return vars;
3437
+ var set = function set(name, value) {
3438
+ if (value !== void 0 && value !== null && value !== "") vars[name] = value;
3439
+ };
3440
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
3441
+ try {
3442
+ for(var _iterator = Object.entries(components)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
3443
+ var _step_value = _sliced_to_array(_step.value, 2), comp = _step_value[0], style = _step_value[1];
3444
+ if (!style) continue;
3445
+ set("--moonx-".concat(comp, "-bg"), style.background);
3446
+ set("--moonx-".concat(comp, "-fg"), style.text);
3447
+ set("--moonx-".concat(comp, "-border-color"), style.border);
3448
+ set("--moonx-".concat(comp, "-border-width"), style.borderWidth);
3449
+ var radiusVar = COMPONENT_RADIUS_VAR[comp];
3450
+ if (radiusVar) set(radiusVar, style.radius);
3451
+ if (comp === "button") {
3452
+ var shade = function shade(c) {
3453
+ return isColorDark(c) ? lighten(c, 0.08) : darken(c, 0.08);
3454
+ };
3455
+ if (style.background) {
3456
+ var hover = shade(style.background);
3457
+ if (hover !== style.background) set("--moonx-button-bg-hover", hover);
3458
+ }
3459
+ if (style.border) {
3460
+ var hover1 = shade(style.border);
3461
+ if (hover1 !== style.border) set("--moonx-button-border-color-hover", hover1);
3462
+ }
3463
+ }
3464
+ }
3465
+ } catch (err) {
3466
+ _didIteratorError = true;
3467
+ _iteratorError = err;
3468
+ } finally{
3469
+ try {
3470
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
3471
+ _iterator.return();
3472
+ }
3473
+ } finally{
3474
+ if (_didIteratorError) {
3475
+ throw _iteratorError;
3476
+ }
3477
+ }
3478
+ }
3479
+ return vars;
3480
+ }
3481
+ function resolveFontUrls(appearance) {
3482
+ if (!appearance) return [];
3483
+ var urls = /* @__PURE__ */ new Set();
3484
+ for(var _i = 0, _iter = [
3485
+ appearance,
3486
+ appearance.light,
3487
+ appearance.dark
3488
+ ]; _i < _iter.length; _i++){
3489
+ var tokens = _iter[_i];
3490
+ var _tokens_typography;
3491
+ var fontUrl = tokens === null || tokens === void 0 ? void 0 : (_tokens_typography = tokens.typography) === null || _tokens_typography === void 0 ? void 0 : _tokens_typography.fontUrl;
3492
+ if (!fontUrl) continue;
3493
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
3494
+ try {
3495
+ for(var _iterator = (Array.isArray(fontUrl) ? fontUrl : [
3496
+ fontUrl
3497
+ ])[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
3498
+ var url = _step.value;
3499
+ if (url) urls.add(url);
3500
+ }
3501
+ } catch (err) {
3502
+ _didIteratorError = true;
3503
+ _iteratorError = err;
3504
+ } finally{
3505
+ try {
3506
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
3507
+ _iterator.return();
3508
+ }
3509
+ } finally{
3510
+ if (_didIteratorError) {
3511
+ throw _iteratorError;
3512
+ }
3513
+ }
3514
+ }
3515
+ }
3516
+ return Array.from(urls);
3517
+ }
3518
+ function appearanceToCssVars(appearance, isDark) {
3519
+ var _derived_fontFamily;
3520
+ var baseTheme = isDark ? darkTheme : lightTheme;
3521
+ var derived = appearanceToTheme(appearance, isDark);
3522
+ var merged = {
3523
+ colors: _object_spread({}, baseTheme.colors, derived.colors),
3524
+ borderRadius: _object_spread({}, baseTheme.borderRadius, derived.borderRadius),
3525
+ fontFamily: (_derived_fontFamily = derived.fontFamily) !== null && _derived_fontFamily !== void 0 ? _derived_fontFamily : baseTheme.fontFamily
3526
+ };
3527
+ return _object_spread({}, themeToCSS(merged), appearanceToMoonxVars(appearance, isDark), appearanceToComponentVars(appearance));
3528
+ }
3286
3529
  // src/styles/sdk-stylesheet.ts
3287
- var SDK_STYLES = '\n/* === Reset === */\n.moonkey-sdk-root * { box-sizing: border-box; }\n.moonkey-sdk-root *:focus-visible { outline: 2px solid var(--moonkey-color-accent); outline-offset: 2px; }\n.moonkey-sdk-root input::placeholder { color: var(--moonkey-color-foreground-3); opacity: 1; }\n\n/* === Animations === */\n@keyframes moonkey-spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }\n@keyframes moonkey-pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.4; } }\n\n/* === Button === */\n.moonkey-sdk-root .moonkey-btn {\n display: inline-flex; align-items: center; justify-content: center; gap: 0.5rem;\n font-weight: 500; font-size: 0.875rem; border: none; cursor: pointer;\n user-select: none; -webkit-user-select: none; white-space: nowrap;\n transition: background-color 0.2s, color 0.2s, border-color 0.2s, opacity 0.2s;\n font-family: inherit; text-decoration: none;\n}\n.moonkey-sdk-root .moonkey-btn:disabled { opacity: 0.5; cursor: not-allowed; pointer-events: none; }\n\n/* Sizes */\n.moonkey-sdk-root .moonkey-btn--sm { height: 2.25rem; padding: 0 0.75rem; border-radius: var(--moonkey-border-radius-md); }\n.moonkey-sdk-root .moonkey-btn--md, .moonkey-sdk-root .moonkey-btn--default { height: 2.75rem; padding: 0 1rem; border-radius: var(--moonkey-border-radius-md); }\n.moonkey-sdk-root .moonkey-btn--lg { height: 3rem; padding: 0 2rem; font-size: 1rem; border-radius: var(--moonkey-border-radius-md); }\n.moonkey-sdk-root .moonkey-btn--icon { width: 2rem; height: 2rem; padding: 0; border-radius: var(--moonkey-border-radius-md); }\n.moonkey-sdk-root .moonkey-btn--full { width: 100%; justify-content: center; }\n\n/* Variants */\n.moonkey-sdk-root .moonkey-btn--primary, .moonkey-sdk-root .moonkey-btn--default {\n background-color: var(--moonkey-color-accent); color: var(--moonkey-color-accent-foreground);\n}\n.moonkey-sdk-root .moonkey-btn--primary:hover:not(:disabled), .moonkey-sdk-root .moonkey-btn--default:hover:not(:disabled) {\n background-color: var(--moonkey-color-accent-dark);\n}\n.moonkey-sdk-root .moonkey-btn--primary.moonkey-state--success { background-color: var(--moonkey-color-success); color: var(--moonkey-color-success-foreground); }\n.moonkey-sdk-root .moonkey-btn--primary.moonkey-state--error { background-color: var(--moonkey-color-error); color: var(--moonkey-color-error-foreground); }\n\n.moonkey-sdk-root .moonkey-btn--outline {\n background-color: transparent; border: 1px solid var(--moonkey-color-border); color: var(--moonkey-color-foreground);\n}\n.moonkey-sdk-root .moonkey-btn--outline:hover:not(:disabled) { background-color: var(--moonkey-color-background-2); border-color: var(--moonkey-color-accent); }\n\n.moonkey-sdk-root .moonkey-btn--ghost { background-color: transparent; color: var(--moonkey-color-foreground); }\n.moonkey-sdk-root .moonkey-btn--ghost:hover:not(:disabled) { background-color: var(--moonkey-color-background-2); }\n\n.moonkey-sdk-root .moonkey-btn--secondary { background-color: var(--moonkey-color-background-2); color: var(--moonkey-color-foreground); }\n.moonkey-sdk-root .moonkey-btn--secondary:hover:not(:disabled) { background-color: var(--moonkey-color-background-3); }\n\n.moonkey-sdk-root .moonkey-btn--destructive { background-color: var(--moonkey-color-error); color: var(--moonkey-color-error-foreground); }\n.moonkey-sdk-root .moonkey-btn--destructive:hover:not(:disabled) { opacity: 0.9; }\n\n.moonkey-sdk-root .moonkey-btn--link { background: transparent; color: var(--moonkey-color-accent); text-decoration: underline; text-underline-offset: 4px; height: auto; padding: 0; }\n\n/* === Input === */\n.moonkey-sdk-root .moonkey-input {\n display: flex; width: 100%; height: 2.75rem; padding: 0 0.75rem;\n font-size: 0.875rem; font-family: inherit; color: var(--moonkey-color-foreground);\n background-color: var(--moonkey-color-background); border: 1px solid var(--moonkey-color-border);\n border-radius: var(--moonkey-border-radius-md); outline: none;\n transition: border-color 0.2s, box-shadow 0.2s; box-sizing: border-box;\n}\n.moonkey-sdk-root .moonkey-input:focus { border-color: var(--moonkey-color-accent); box-shadow: 0 0 0 1px var(--moonkey-color-accent); }\n.moonkey-sdk-root .moonkey-input:disabled { opacity: 0.5; cursor: not-allowed; }\n.moonkey-sdk-root .moonkey-input--error { border-color: var(--moonkey-color-error); }\n\n/* === Label === */\n.moonkey-sdk-root .moonkey-label { display: block; font-size: 0.875rem; font-weight: 500; color: var(--moonkey-color-foreground); line-height: 1; }\n.moonkey-sdk-root .moonkey-label--secondary { color: var(--moonkey-color-foreground-3); }\n.moonkey-sdk-root .moonkey-label--tertiary { color: var(--moonkey-color-foreground-4); font-size: 0.75rem; }\n.moonkey-sdk-root .moonkey-label--error { color: var(--moonkey-color-error); }\n.moonkey-sdk-root .moonkey-label--success { color: var(--moonkey-color-success); }\n\n/* === Detail Row === */\n.moonkey-sdk-root .moonkey-detail-row { display: flex; justify-content: space-between; align-items: center; padding: 0.25rem 0; }\n.moonkey-sdk-root .moonkey-detail-row__label { font-size: 0.875rem; color: var(--moonkey-color-foreground-3); }\n.moonkey-sdk-root .moonkey-detail-row__value { font-size: 0.875rem; font-weight: 500; color: var(--moonkey-color-foreground); text-align: right; }\n\n/* === Divider === */\n.moonkey-sdk-root .moonkey-divider { border-top: 1px solid var(--moonkey-color-border); margin: 1rem 0; }\n\n/* === Boxes === */\n.moonkey-sdk-root .moonkey-box { padding: 0.75rem; border-radius: var(--moonkey-border-radius-lg); }\n.moonkey-sdk-root .moonkey-box--surface { background-color: var(--moonkey-color-background-2); }\n.moonkey-sdk-root .moonkey-box--error { background-color: var(--moonkey-color-background-2); border: 1px solid var(--moonkey-color-error); }\n.moonkey-sdk-root .moonkey-box--success { background-color: var(--moonkey-color-background-2); border: 1px solid var(--moonkey-color-success); }\n.moonkey-sdk-root .moonkey-box--info { background-color: var(--moonkey-color-background-2); border: 1px solid var(--moonkey-color-border); }\n.moonkey-sdk-root .moonkey-box--warning { background-color: var(--moonkey-color-background-2); border: 1px solid var(--moonkey-color-error); display: flex; align-items: flex-start; gap: 0.5rem; }\n.moonkey-sdk-root .moonkey-box--scrollable { overflow-y: auto; font-size: 0.875rem; white-space: pre-wrap; word-break: break-word; }\n\n/* === Address Pill === */\n.moonkey-sdk-root .moonkey-address-pill {\n display: inline-flex; align-items: center; gap: 0.5rem; padding: 0.25rem 0.75rem;\n background-color: var(--moonkey-color-background-3); color: var(--moonkey-color-foreground);\n border: 1px solid var(--moonkey-color-border); border-radius: var(--moonkey-border-radius-md);\n font-size: 0.875rem; font-family: monospace; cursor: pointer;\n transition: background-color 0.2s, border-color 0.2s;\n}\n.moonkey-sdk-root .moonkey-address-pill:hover { background-color: var(--moonkey-color-background-2); }\n.moonkey-sdk-root .moonkey-address-pill--copied { border-color: var(--moonkey-color-success); }\n\n/* === Mono Text === */\n.moonkey-sdk-root .moonkey-mono { font-family: monospace; font-size: 0.875rem; color: var(--moonkey-color-foreground); }\n\n/* === Spinner === */\n.moonkey-sdk-root .moonkey-spinner {\n display: inline-block; flex-shrink: 0;\n border: 2px solid currentColor; border-top-color: transparent;\n border-radius: 9999px; animation: moonkey-spin 1s linear infinite;\n}\n.moonkey-sdk-root .moonkey-spinner--sm { width: 0.875rem; height: 0.875rem; }\n.moonkey-sdk-root .moonkey-spinner--md { width: 1rem; height: 1rem; }\n.moonkey-sdk-root .moonkey-spinner--lg { width: 1.5rem; height: 1.5rem; }\n.moonkey-sdk-root .moonkey-spinner--xl { width: 2rem; height: 2rem; }\n\n/* === Pulse skeleton === */\n.moonkey-sdk-root .moonkey-skeleton { background-color: var(--moonkey-color-background-2); border-radius: 0.25rem; animation: moonkey-pulse 2s cubic-bezier(0.4,0,0.6,1) infinite; }\n\n/* === Flow layout === */\n.moonkey-sdk-root .moonkey-flow-close { position: absolute; top: 1rem; right: 1.5rem; display: flex; align-items: center; flex-shrink: 0; z-index: 1; }\n.moonkey-sdk-root .moonkey-flow-header { display: flex; flex-direction: column; text-align: center; padding: 0 0.5rem 0.25rem; gap: 0.5rem; }\n.moonkey-sdk-root .moonkey-flow-content { display: flex; flex-direction: column; flex: 1; margin-top: 1rem; padding: 0 0.5rem; }\n.moonkey-sdk-root .moonkey-flow-footer {\n position: absolute; bottom: 0; left: 0; right: 0;\n background-color: var(--moonkey-color-background); padding: 1rem 2rem 3rem;\n margin: 0 0.125rem 0.125rem;\n border-bottom-left-radius: var(--moonkey-border-radius-lg);\n border-bottom-right-radius: var(--moonkey-border-radius-lg);\n}\n.moonkey-sdk-root .moonkey-flow-footer__actions { display: flex; gap: 0.75rem; }\n/* Buttons inside footer actions auto-stretch to fill space */\n.moonkey-sdk-root .moonkey-flow-footer__actions > .moonkey-btn { flex: 1; height: 3rem; font-size: 1rem; }\n\n/* === Flow text utilities === */\n.moonkey-sdk-root .moonkey-text--heading { font-weight: 500; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--moonkey-color-foreground); }\n.moonkey-sdk-root .moonkey-text--title { font-size: 1rem; font-weight: 600; color: var(--moonkey-color-foreground); }\n.moonkey-sdk-root .moonkey-text--secondary { font-size: 0.875rem; color: var(--moonkey-color-foreground-3); }\n.moonkey-sdk-root .moonkey-text--error { font-size: 0.875rem; color: var(--moonkey-color-error); }\n.moonkey-sdk-root .moonkey-text--success { font-size: 0.875rem; color: var(--moonkey-color-success); }\n.moonkey-sdk-root .moonkey-flow-logo { display: flex; align-items: center; justify-content: center; }\n\n/* === Terms link row (accept-terms) === */\n.moonkey-sdk-root .moonkey-terms-link {\n display: flex; flex-direction: row; align-items: center; justify-content: space-between;\n border-radius: var(--moonkey-border-radius-lg); padding: 0.75rem;\n margin-left: 0.75rem; margin-right: 0.75rem;\n border: 1px solid var(--moonkey-color-border); cursor: pointer;\n transition: background-color 0.2s ease;\n}\n.moonkey-sdk-root .moonkey-terms-link:hover { background-color: var(--moonkey-color-background-2); }\n\n/* === Wallet item === */\n.moonkey-sdk-root .moonkey-wallet-item {\n display: flex; align-items: center; justify-content: space-between; padding: 0.5rem 1rem;\n border: 1px solid var(--moonkey-color-border); border-radius: var(--moonkey-border-radius-lg);\n background-color: var(--moonkey-color-background); cursor: pointer;\n transition: border-color 0.2s, background-color 0.2s;\n}\n.moonkey-sdk-root .moonkey-wallet-item:hover { border-color: var(--moonkey-color-accent); background-color: var(--moonkey-color-background-2); }\n.moonkey-sdk-root .moonkey-wallet-item--selected { border-color: var(--moonkey-color-accent); background-color: var(--moonkey-color-background-2); }\n\n/* === Flow overlay (z-index stack wrapper) === */\n.moonkey-sdk-root .moonkey-flow-overlay { position: relative; z-index: 100; }\n\n/* === Wallet connection state container === */\n.moonkey-sdk-root .moonkey-connect-state { display: flex; flex-direction: column; align-items: center; justify-content: center; padding-top: 3rem; padding-bottom: 3rem; }\n\n/* === Large wallet icon spinner === */\n.moonkey-sdk-root .moonkey-wallet-spinner { position: relative; width: 5rem; height: 5rem; display: flex; align-items: center; justify-content: center; }\n.moonkey-sdk-root .moonkey-wallet-spinner__ring { position: absolute; inset: 0; width: 5rem; height: 5rem; border-radius: 50%; border: 4px solid var(--moonkey-color-border); }\n.moonkey-sdk-root .moonkey-wallet-spinner__ring--error { border-color: var(--moonkey-color-error); }\n.moonkey-sdk-root .moonkey-wallet-spinner__spin { position: absolute; inset: 0; width: 5rem; height: 5rem; border-radius: 50%; border: 4px solid transparent; border-top-color: var(--moonkey-color-accent); animation: moonkey-spin 1s linear infinite; }\n.moonkey-sdk-root .moonkey-wallet-spinner__center { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; }\n\n/* === Data preview box (sign typed-data / transactions) === */\n.moonkey-sdk-root .moonkey-data-preview { margin-top: 0.25rem; padding: 0.75rem; background-color: var(--moonkey-color-background-2); border-radius: var(--moonkey-border-radius-md); font-size: 0.875rem; font-family: monospace; word-break: break-all; white-space: pre-line; user-select: none; -webkit-user-select: none; }\n\n/* === Scrollable data container (signing flows) === */\n.moonkey-sdk-root .moonkey-data-scroll { display: flex; flex-direction: column; max-height: 390px; overflow-y: auto; padding-bottom: 5rem; position: relative; }\n\n/* === Expand/collapse trigger === */\n.moonkey-sdk-root .moonkey-expand-toggle { display: inline-flex; align-items: center; cursor: pointer; user-select: none; -webkit-user-select: none; }\n\n/* === Scrollable bordered list (transaction detail panels) === */\n.moonkey-sdk-root .moonkey-scrollable-list { display: flex; flex-direction: column; overflow-y: auto; border: 1px solid var(--moonkey-color-border); border-radius: var(--moonkey-border-radius-md); scrollbar-width: none; }\n.moonkey-sdk-root .moonkey-scrollable-list::-webkit-scrollbar { display: none; }\n\n/* === Modal content column (passkey-enroll, add-passkey) === */\n.moonkey-sdk-root .moonkey-modal-content { display: flex; flex-direction: column; align-items: center; text-align: center; padding: 0 1rem 1.5rem; gap: 1rem; }\n\n/* === Back nav button (absolute top-left) === */\n.moonkey-sdk-root .moonkey-back-btn { position: absolute; top: 1rem; left: 0.5rem; width: 2.5rem; height: 2.5rem; display: flex; align-items: center; justify-content: center; border-radius: var(--moonkey-border-radius-full); }\n\n/* === Centered inline row (resend, action links) === */\n.moonkey-sdk-root .moonkey-center-row { display: flex; justify-content: center; align-items: center; gap: 0.25rem; }\n\n/* === Stacked button column (modal CTAs) === */\n.moonkey-sdk-root .moonkey-btn-stack { display: flex; flex-direction: column; gap: 0.5rem; width: 100%; padding-top: 0.5rem; }\n\n/* === Legal footer text (terms & privacy) === */\n.moonkey-sdk-root .moonkey-legal-text { font-size: 0.75rem; color: var(--moonkey-color-foreground-3); text-align: center; line-height: 1.5; margin-top: 1rem; }\n.moonkey-sdk-root .moonkey-legal-text a { color: var(--moonkey-color-accent); cursor: pointer; }\n/* Inline-checkbox variant: same typography, but flex layout aligned left so the checkbox sits beside the link text. */\n.moonkey-sdk-root .moonkey-legal-checkbox { display: flex; align-items: flex-start; justify-content: flex-start; text-align: left; gap: 0.5rem; }\n.moonkey-sdk-root .moonkey-legal-checkbox input[type="checkbox"] { margin-top: 0.15rem; cursor: pointer; }\n\n/* === Login gating (require_users_accept_terms) === */\n/* Wraps the email/social/wallet buttons so they can be visually disabled until the terms checkbox is ticked. The default state is unaffected. */\n.moonkey-sdk-root .moonkey-login-gateable { transition: opacity 0.15s ease-out; }\n.moonkey-sdk-root .moonkey-login-gated { opacity: 0.5; pointer-events: none; }\n\n/* === Shared entry animations === */\n@keyframes moonkey-slide-in { from { opacity: 0; transform: translateX(-20px); } to { opacity: 1; transform: translateX(0); } }\n@keyframes moonkey-success-bounce { from { opacity: 0; transform: translateY(-50px) rotate(-60deg); } to { opacity: 1; transform: translateY(20px) rotate(0deg); } }\n@keyframes moonkey-error-bounce { from { opacity: 0; transform: translateY(-50px) rotate(-60deg); } to { opacity: 1; transform: translateY(20px) rotate(0deg); } }\n@keyframes moonkey-error-shake { 0%, 100% { transform: translateX(0); } 10%, 30%, 50%, 70%, 90% { transform: translateX(-10px); } 20%, 40%, 60%, 80% { transform: translateX(10px); } }\n@keyframes moonkey-mail-slide-in { from { opacity: 0; transform: translateX(-50px) rotate(-15deg); } to { opacity: 1; transform: translateX(0) rotate(0deg); } }\n@keyframes moonkey-verified-slide-in { from { opacity: 0; transform: translateX(100px); } to { opacity: 1; transform: translateX(0); } }\n\n/* === Icon size utilities === */\n.moonkey-sdk-root .moonkey-icon--xs { width: 0.75rem; height: 0.75rem; }\n.moonkey-sdk-root .moonkey-icon--sm { width: 1rem; height: 1rem; }\n.moonkey-sdk-root .moonkey-icon--md { width: 1.5rem; height: 1.5rem; }\n.moonkey-sdk-root .moonkey-icon--lg { width: 2rem; height: 2rem; }\n.moonkey-sdk-root .moonkey-icon--xl { width: 2.5rem; height: 2.5rem; }\n.moonkey-sdk-root .moonkey-icon--2xl { width: 3rem; height: 3rem; }\n.moonkey-sdk-root .moonkey-icon--mr-xs { margin-right: 0.25rem; }\n.moonkey-sdk-root .moonkey-icon--mr-sm { margin-right: 0.5rem; }\n.moonkey-sdk-root .moonkey-icon--accent { color: var(--moonkey-color-accent); }\n.moonkey-sdk-root .moonkey-icon--success { color: var(--moonkey-color-success, #16a34a); }\n.moonkey-sdk-root .moonkey-icon--error { color: var(--moonkey-color-error); }\n.moonkey-sdk-root .moonkey-icon--muted { color: var(--moonkey-color-foreground-3); }\n.moonkey-sdk-root .moonkey-icon--fg { color: var(--moonkey-color-foreground); }\n\n/* === Layout utilities === */\n.moonkey-sdk-root .moonkey-flex-center { display: flex; align-items: center; justify-content: center; }\n.moonkey-sdk-root .moonkey-flex-between { display: flex; align-items: center; justify-content: space-between; }\n.moonkey-sdk-root .moonkey-flex-col { display: flex; flex-direction: column; }\n.moonkey-sdk-root .moonkey-flex-col-center { display: flex; flex-direction: column; align-items: center; }\n\n/* === Text modifiers === */\n.moonkey-sdk-root .moonkey-text--semibold { font-weight: 500; }\n.moonkey-sdk-root .moonkey-text--bold { font-weight: 600; }\n.moonkey-sdk-root .moonkey-text--center { text-align: center; }\n.moonkey-sdk-root .moonkey-text--sm { font-size: 0.875rem; }\n.moonkey-sdk-root .moonkey-text--lg { font-size: 1.125rem; }\n.moonkey-sdk-root .moonkey-text--xl { font-size: 1.25rem; }\n\n/* === Transaction detail card (success receipt) === */\n.moonkey-sdk-root .moonkey-detail-card { display: flex; flex-direction: column; border: 1px solid var(--moonkey-color-border); border-radius: var(--moonkey-border-radius-lg); padding: 1rem 0.5rem; margin: 2rem 0.5rem 0; }\n.moonkey-sdk-root .moonkey-detail-card__rows { flex: 1; display: flex; flex-direction: column; gap: 0.25rem; }\n\n/* === Failed-transaction error scroll box === */\n.moonkey-sdk-root .moonkey-error-scroll { display: flex; flex-direction: column; background-color: var(--moonkey-color-background-2); border: 1px solid var(--moonkey-color-border); border-radius: var(--moonkey-border-radius-lg); padding: 1rem 0.5rem; margin: 0.5rem; height: 150px; overflow: auto; }\n\n/* === Network logo badge (ethereum/solana pair) === */\n.moonkey-sdk-root .moonkey-network-badge { width: 32px; height: 32px; border-radius: 16px; border: 1px solid var(--moonkey-color-border); background-color: var(--moonkey-color-background-2); display: flex; align-items: center; justify-content: center; flex-shrink: 0; }\n.moonkey-sdk-root .moonkey-network-badge--overlap { margin-left: -8px; }\n\n/* === Positioned icons inside inputs === */\n.moonkey-sdk-root .moonkey-search-icon { position: absolute; left: 0.75rem; top: 0.875rem; color: var(--moonkey-color-foreground-3); }\n.moonkey-sdk-root .moonkey-input-icon--left { position: absolute; left: 0.75rem; top: 50%; transform: translateY(-50%); color: var(--moonkey-color-foreground-3); pointer-events: none; }\n\n/* === Step indicator (N of M) === */\n.moonkey-sdk-root .moonkey-step-label { font-size: 0.75rem; font-weight: 600; color: var(--moonkey-color-accent); letter-spacing: 0.05em; text-transform: uppercase; }\n\n/* === Feature bullet item (passkey enroll) === */\n.moonkey-sdk-root .moonkey-feature-item { display: flex; align-items: flex-start; gap: 0.75rem; text-align: left; font-size: 0.875rem; color: var(--moonkey-color-foreground); }\n\n/* === Monospace textarea (import wallet) === */\n.moonkey-sdk-root .moonkey-mono-textarea { width: 100%; min-height: 100px; padding: 0.75rem; font-family: monospace; font-size: 0.75rem; background-color: var(--moonkey-color-background-2); color: var(--moonkey-color-foreground); border: 1px solid var(--moonkey-color-border); border-radius: var(--moonkey-border-radius-md); outline: none; resize: vertical; }\n\n/* === Sign-flow inner section and row === */\n.moonkey-sdk-root .moonkey-sign-section { padding: 0.5rem; }\n.moonkey-sdk-root .moonkey-sign-row { display: flex; align-items: center; justify-content: space-between; }\n\n/* === External wallet connect button (login flow) === */\n.moonkey-sdk-root .moonkey-external-wallet-btn { border-radius: var(--moonkey-border-radius-lg); border: 1px solid var(--moonkey-color-border); padding: 0.75rem 0.25rem; cursor: pointer; margin-top: 0.75rem; transition: all 0.2s ease-in-out; background-color: transparent; }\n.moonkey-sdk-root .moonkey-external-wallet-btn:hover { border-color: var(--moonkey-color-accent); background-color: var(--moonkey-color-background-2); }\n.moonkey-sdk-root .moonkey-external-wallet-btn--accent-hover:hover { background-color: var(--moonkey-color-accent); }\n.moonkey-sdk-root .moonkey-external-wallet-btn__inner { display: flex; flex-direction: row; align-items: center; gap: 0.5rem; animation: moonkey-slide-in 0.3s ease-out 0.1s both; }\n\n/* === Flex row utility (icon + label pairs) === */\n.moonkey-sdk-root .moonkey-flex-row { display: flex; flex-direction: row; align-items: center; gap: 0.5rem; }\n\n/* === Login landing layout === */\n.moonkey-sdk-root .moonkey-header { position: absolute; top: 1.5rem; left: 0; right: 0; text-align: center; font-size: 0.875rem; color: var(--moonkey-color-foreground); margin-bottom: 0.5rem; padding-left: 3rem; padding-right: 3rem; }\n.moonkey-sdk-root .moonkey-header__inner { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.moonkey-sdk-root .moonkey-content-wrapper { padding-top: 1rem; padding-bottom: 1rem; width: 100%; }\n.moonkey-sdk-root .moonkey-logo-section { text-align: center; margin-bottom: 1rem; }\n.moonkey-sdk-root .moonkey-logo-section__inner { padding-top: 1rem; padding-bottom: 1rem; }\n.moonkey-sdk-root .moonkey-description { padding-left: 1.25rem; padding-right: 1.25rem; text-align: center; color: var(--moonkey-color-foreground-3); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.moonkey-sdk-root .moonkey-form-section { padding: 0.5rem 1rem; }\n\n/* === Email OTP content fill === */\n.moonkey-sdk-root .moonkey-otp-content { flex-grow: 1; display: flex; flex-direction: column; justify-content: center; }\n\n/* === Wallet icon status overlay badge === */\n.moonkey-sdk-root .moonkey-wallet-status-badge { position: absolute; bottom: -4px; right: -4px; background-color: var(--moonkey-color-background); border-radius: 50%; display: flex; align-items: center; justify-content: center; }\n\n/* === Wallet connect success animation === */\n@keyframes fadeInScale { from { opacity: 0; transform: scale(0.8); } to { opacity: 1; transform: scale(1); } }\n';
3530
+ var SDK_STYLES = '\n/* === Reset === */\n.moonkey-sdk-root * { box-sizing: border-box; }\n.moonkey-sdk-root *:focus-visible { outline: 2px solid var(--moonx-color-ring, var(--moonkey-color-accent)); outline-offset: 2px; }\n.moonkey-sdk-root input::placeholder { color: var(--moonkey-color-foreground-3); opacity: 1; }\n\n/* === Animations === */\n@keyframes moonkey-spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }\n@keyframes moonkey-pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.4; } }\n\n/* === Button === */\n.moonkey-sdk-root .moonkey-btn {\n display: inline-flex; align-items: center; justify-content: center; gap: 0.5rem;\n font-weight: var(--moonx-font-weight-medium, 500); font-size: 0.875rem; border: none; cursor: pointer;\n user-select: none; -webkit-user-select: none; white-space: nowrap;\n transition: background-color 0.2s, color 0.2s, border-color 0.2s, opacity 0.2s;\n font-family: inherit; text-decoration: none;\n}\n.moonkey-sdk-root .moonkey-btn:disabled { opacity: 0.5; cursor: not-allowed; pointer-events: none; }\n\n/* Sizes */\n.moonkey-sdk-root .moonkey-btn--sm { height: 2.25rem; padding: 0 0.75rem; border-radius: var(--moonx-radius-button, var(--moonkey-border-radius-md)); }\n.moonkey-sdk-root .moonkey-btn--md, .moonkey-sdk-root .moonkey-btn--default { height: 2.75rem; padding: 0 1rem; border-radius: var(--moonx-radius-button, var(--moonkey-border-radius-md)); }\n.moonkey-sdk-root .moonkey-btn--lg { height: 3rem; padding: 0 2rem; font-size: 1rem; border-radius: var(--moonx-radius-button, var(--moonkey-border-radius-md)); }\n.moonkey-sdk-root .moonkey-btn--icon { width: 2rem; height: 2rem; padding: 0; border-radius: var(--moonx-radius-button, var(--moonkey-border-radius-md)); }\n.moonkey-sdk-root .moonkey-btn--full { width: 100%; justify-content: center; }\n\n/* Variants */\n.moonkey-sdk-root .moonkey-btn--primary, .moonkey-sdk-root .moonkey-btn--default {\n background-color: var(--moonx-button-bg, var(--moonkey-color-accent)); color: var(--moonx-button-fg, var(--moonkey-color-accent-foreground));\n border: var(--moonx-button-border-width, 0px) solid var(--moonx-button-border-color, transparent);\n}\n.moonkey-sdk-root .moonkey-btn--primary:hover:not(:disabled), .moonkey-sdk-root .moonkey-btn--default:hover:not(:disabled) {\n background-color: var(--moonkey-color-accent-dark);\n}\n.moonkey-sdk-root .moonkey-btn--primary.moonkey-state--success { background-color: var(--moonkey-color-success); color: var(--moonkey-color-success-foreground); }\n.moonkey-sdk-root .moonkey-btn--primary.moonkey-state--error { background-color: var(--moonkey-color-error); color: var(--moonkey-color-error-foreground); }\n\n.moonkey-sdk-root .moonkey-btn--outline {\n background-color: transparent; border: 1px solid var(--moonkey-color-border); color: var(--moonkey-color-foreground);\n}\n.moonkey-sdk-root .moonkey-btn--outline:hover:not(:disabled) { background-color: var(--moonkey-color-background-2); border-color: var(--moonkey-color-accent); }\n\n.moonkey-sdk-root .moonkey-btn--ghost { background-color: transparent; color: var(--moonkey-color-foreground); }\n.moonkey-sdk-root .moonkey-btn--ghost:hover:not(:disabled) { background-color: var(--moonkey-color-background-2); }\n\n.moonkey-sdk-root .moonkey-btn--secondary { background-color: var(--moonkey-color-background-2); color: var(--moonkey-color-foreground); }\n.moonkey-sdk-root .moonkey-btn--secondary:hover:not(:disabled) { background-color: var(--moonkey-color-background-3); }\n\n.moonkey-sdk-root .moonkey-btn--destructive { background-color: var(--moonkey-color-error); color: var(--moonkey-color-error-foreground); }\n.moonkey-sdk-root .moonkey-btn--destructive:hover:not(:disabled) { opacity: 0.9; }\n\n.moonkey-sdk-root .moonkey-btn--link { background: transparent; color: var(--moonx-color-link, var(--moonkey-color-accent)); text-decoration: underline; text-underline-offset: 4px; height: auto; padding: 0; }\n\n/* === Input === */\n.moonkey-sdk-root .moonkey-input {\n display: flex; width: 100%; height: 2.75rem; padding: 0 0.75rem;\n font-size: 0.875rem; font-family: inherit; color: var(--moonx-input-fg, var(--moonkey-color-foreground));\n background-color: var(--moonx-input-bg, transparent); border: var(--moonx-input-border-width, 1px) solid var(--moonx-input-border-color, var(--moonkey-color-border));\n border-radius: var(--moonx-radius-input, var(--moonkey-border-radius-md)); outline: none;\n transition: border-color 0.2s, box-shadow 0.2s; box-sizing: border-box;\n}\n.moonkey-sdk-root .moonkey-input:focus { border-color: var(--moonx-color-ring, var(--moonkey-color-accent)); box-shadow: 0 0 0 1px var(--moonx-color-ring, var(--moonkey-color-accent)); }\n.moonkey-sdk-root .moonkey-input:disabled { opacity: 0.5; cursor: not-allowed; }\n.moonkey-sdk-root .moonkey-input--error { border-color: var(--moonkey-color-error); }\n\n/* === Label === */\n.moonkey-sdk-root .moonkey-label { display: block; font-size: 0.875rem; font-weight: var(--moonx-font-weight-medium, 500); color: var(--moonkey-color-foreground); line-height: 1; }\n.moonkey-sdk-root .moonkey-label--secondary { color: var(--moonkey-color-foreground-3); }\n.moonkey-sdk-root .moonkey-label--tertiary { color: var(--moonkey-color-foreground-4); font-size: 0.75rem; }\n.moonkey-sdk-root .moonkey-label--error { color: var(--moonkey-color-error); }\n.moonkey-sdk-root .moonkey-label--success { color: var(--moonkey-color-success); }\n\n/* === Detail Row === */\n.moonkey-sdk-root .moonkey-detail-row { display: flex; justify-content: space-between; align-items: center; padding: 0.25rem 0; }\n.moonkey-sdk-root .moonkey-detail-row__label { font-size: 0.875rem; color: var(--moonkey-color-foreground-3); }\n.moonkey-sdk-root .moonkey-detail-row__value { font-size: 0.875rem; font-weight: 500; color: var(--moonkey-color-foreground); text-align: right; }\n\n/* === Divider === */\n.moonkey-sdk-root .moonkey-divider { border-top: 1px solid var(--moonkey-color-border); margin: 1rem 0; }\n\n/* === Boxes === */\n.moonkey-sdk-root .moonkey-box { padding: 0.75rem; border-radius: var(--moonkey-border-radius-lg); }\n.moonkey-sdk-root .moonkey-box--surface { background-color: var(--moonkey-color-background-2); }\n.moonkey-sdk-root .moonkey-box--error { background-color: var(--moonkey-color-background-2); border: 1px solid var(--moonkey-color-error); }\n.moonkey-sdk-root .moonkey-box--success { background-color: var(--moonkey-color-background-2); border: 1px solid var(--moonkey-color-success); }\n.moonkey-sdk-root .moonkey-box--info { background-color: var(--moonkey-color-background-2); border: 1px solid var(--moonx-color-info, var(--moonkey-color-border)); }\n.moonkey-sdk-root .moonkey-box--warning { background-color: var(--moonkey-color-background-2); border: 1px solid var(--moonx-color-warning, var(--moonkey-color-error)); display: flex; align-items: flex-start; gap: 0.5rem; }\n.moonkey-sdk-root .moonkey-box--scrollable { overflow-y: auto; font-size: 0.875rem; white-space: pre-wrap; word-break: break-word; }\n\n/* === Address Pill === */\n.moonkey-sdk-root .moonkey-address-pill {\n display: inline-flex; align-items: center; gap: 0.5rem; padding: 0.25rem 0.75rem;\n background-color: var(--moonkey-color-background-3); color: var(--moonkey-color-foreground);\n border: 1px solid var(--moonkey-color-border); border-radius: var(--moonkey-border-radius-md);\n font-size: 0.875rem; font-family: monospace; cursor: pointer;\n transition: background-color 0.2s, border-color 0.2s;\n}\n.moonkey-sdk-root .moonkey-address-pill:hover { background-color: var(--moonkey-color-background-2); }\n.moonkey-sdk-root .moonkey-address-pill--copied { border-color: var(--moonkey-color-success); }\n\n/* === Mono Text === */\n.moonkey-sdk-root .moonkey-mono { font-family: monospace; font-size: 0.875rem; color: var(--moonkey-color-foreground); }\n\n/* === Spinner === */\n.moonkey-sdk-root .moonkey-spinner {\n display: inline-block; flex-shrink: 0;\n border: 2px solid currentColor; border-top-color: transparent;\n border-radius: 9999px; animation: moonkey-spin 1s linear infinite;\n}\n.moonkey-sdk-root .moonkey-spinner--sm { width: 0.875rem; height: 0.875rem; }\n.moonkey-sdk-root .moonkey-spinner--md { width: 1rem; height: 1rem; }\n.moonkey-sdk-root .moonkey-spinner--lg { width: 1.5rem; height: 1.5rem; }\n.moonkey-sdk-root .moonkey-spinner--xl { width: 2rem; height: 2rem; }\n\n/* === Pulse skeleton === */\n.moonkey-sdk-root .moonkey-skeleton { background-color: var(--moonkey-color-background-2); border-radius: 0.25rem; animation: moonkey-pulse 2s cubic-bezier(0.4,0,0.6,1) infinite; }\n\n/* === Flow layout === */\n.moonkey-sdk-root .moonkey-flow-close { position: absolute; top: 1rem; right: 1.5rem; display: flex; align-items: center; flex-shrink: 0; z-index: 1; }\n.moonkey-sdk-root .moonkey-flow-header { display: flex; flex-direction: column; text-align: center; padding: 0 0.5rem 0.25rem; gap: 0.5rem; }\n.moonkey-sdk-root .moonkey-flow-content { display: flex; flex-direction: column; flex: 1; margin-top: 1rem; padding: 0 0.5rem; }\n.moonkey-sdk-root .moonkey-flow-footer {\n position: absolute; bottom: 0; left: 0; right: 0;\n background-color: var(--moonkey-color-background); padding: 1rem 2rem 3rem;\n margin: 0 0.125rem 0.125rem;\n border-bottom-left-radius: var(--moonkey-border-radius-lg);\n border-bottom-right-radius: var(--moonkey-border-radius-lg);\n}\n.moonkey-sdk-root .moonkey-flow-footer__actions { display: flex; gap: 0.75rem; }\n/* Buttons inside footer actions auto-stretch to fill space */\n.moonkey-sdk-root .moonkey-flow-footer__actions > .moonkey-btn { flex: 1; height: 3rem; font-size: 1rem; }\n\n/* === Flow text utilities === */\n.moonkey-sdk-root .moonkey-text--heading { font-weight: var(--moonx-font-weight-heading, var(--moonx-font-weight-medium, 500)); font-family: var(--moonx-font-family-heading, inherit); letter-spacing: var(--moonx-letter-spacing-heading, inherit); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--moonx-color-heading, var(--moonkey-color-foreground)); }\n.moonkey-sdk-root .moonkey-text--title { font-size: var(--moonx-font-size-heading, var(--moonx-font-size-lg, 1rem)); font-weight: var(--moonx-font-weight-heading, var(--moonx-font-weight-bold, 600)); font-family: var(--moonx-font-family-heading, inherit); letter-spacing: var(--moonx-letter-spacing-heading, inherit); color: var(--moonx-color-heading, var(--moonkey-color-foreground)); }\n.moonkey-sdk-root .moonkey-text--secondary { font-size: var(--moonx-font-size-sm, 0.875rem); color: var(--moonkey-color-foreground-3); }\n.moonkey-sdk-root .moonkey-text--error { font-size: 0.875rem; color: var(--moonkey-color-error); }\n.moonkey-sdk-root .moonkey-text--success { font-size: 0.875rem; color: var(--moonkey-color-success); }\n.moonkey-sdk-root .moonkey-flow-logo { display: flex; align-items: center; justify-content: center; }\n\n/* === Terms link row (accept-terms) === */\n.moonkey-sdk-root .moonkey-terms-link {\n display: flex; flex-direction: row; align-items: center; justify-content: space-between;\n border-radius: var(--moonkey-border-radius-lg); padding: 0.75rem;\n margin-left: 0.75rem; margin-right: 0.75rem;\n border: 1px solid var(--moonkey-color-border); cursor: pointer;\n transition: background-color 0.2s ease;\n}\n.moonkey-sdk-root .moonkey-terms-link:hover { background-color: var(--moonkey-color-background-2); }\n\n/* === Wallet item === */\n.moonkey-sdk-root .moonkey-wallet-item {\n display: flex; align-items: center; justify-content: space-between; padding: 0.5rem 1rem;\n border: 1px solid var(--moonkey-color-border); border-radius: var(--moonx-radius-button, var(--moonkey-border-radius-lg));\n background-color: var(--moonkey-color-background); cursor: pointer;\n transition: border-color 0.2s, background-color 0.2s;\n}\n.moonkey-sdk-root .moonkey-wallet-item:hover { border-color: var(--moonkey-color-accent); background-color: var(--moonkey-color-background-2); }\n.moonkey-sdk-root .moonkey-wallet-item--selected { border-color: var(--moonkey-color-accent); background-color: var(--moonkey-color-background-2); }\n\n/* === Flow overlay (z-index stack wrapper) === */\n.moonkey-sdk-root .moonkey-flow-overlay { position: relative; z-index: 100; }\n\n/* === Wallet connection state container === */\n.moonkey-sdk-root .moonkey-connect-state { display: flex; flex-direction: column; align-items: center; justify-content: center; padding-top: 3rem; padding-bottom: 3rem; }\n\n/* === Large wallet icon spinner === */\n.moonkey-sdk-root .moonkey-wallet-spinner { position: relative; width: 5rem; height: 5rem; display: flex; align-items: center; justify-content: center; }\n.moonkey-sdk-root .moonkey-wallet-spinner__ring { position: absolute; inset: 0; width: 5rem; height: 5rem; border-radius: 50%; border: 4px solid var(--moonkey-color-border); }\n.moonkey-sdk-root .moonkey-wallet-spinner__ring--error { border-color: var(--moonkey-color-error); }\n.moonkey-sdk-root .moonkey-wallet-spinner__spin { position: absolute; inset: 0; width: 5rem; height: 5rem; border-radius: 50%; border: 4px solid transparent; border-top-color: var(--moonkey-color-accent); animation: moonkey-spin 1s linear infinite; }\n.moonkey-sdk-root .moonkey-wallet-spinner__center { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; }\n\n/* === Data preview box (sign typed-data / transactions) === */\n.moonkey-sdk-root .moonkey-data-preview { margin-top: 0.25rem; padding: 0.75rem; background-color: var(--moonkey-color-background-2); border-radius: var(--moonkey-border-radius-md); font-size: 0.875rem; font-family: monospace; word-break: break-all; white-space: pre-line; user-select: none; -webkit-user-select: none; }\n\n/* === Scrollable data container (signing flows) === */\n.moonkey-sdk-root .moonkey-data-scroll { display: flex; flex-direction: column; max-height: 390px; overflow-y: auto; padding-bottom: 5rem; position: relative; }\n\n/* === Expand/collapse trigger === */\n.moonkey-sdk-root .moonkey-expand-toggle { display: inline-flex; align-items: center; cursor: pointer; user-select: none; -webkit-user-select: none; }\n\n/* === Scrollable bordered list (transaction detail panels) === */\n.moonkey-sdk-root .moonkey-scrollable-list { display: flex; flex-direction: column; overflow-y: auto; border: 1px solid var(--moonkey-color-border); border-radius: var(--moonkey-border-radius-md); scrollbar-width: none; }\n.moonkey-sdk-root .moonkey-scrollable-list::-webkit-scrollbar { display: none; }\n\n/* === Modal content column (passkey-enroll, add-passkey) === */\n.moonkey-sdk-root .moonkey-modal-content { display: flex; flex-direction: column; align-items: center; text-align: center; padding: 0 1rem 1.5rem; gap: 1rem; }\n\n/* === Back nav button (absolute top-left) === */\n.moonkey-sdk-root .moonkey-back-btn { position: absolute; top: 1rem; left: 0.5rem; width: 2.5rem; height: 2.5rem; display: flex; align-items: center; justify-content: center; border-radius: var(--moonkey-border-radius-full); }\n\n/* === Centered inline row (resend, action links) === */\n.moonkey-sdk-root .moonkey-center-row { display: flex; justify-content: center; align-items: center; gap: 0.25rem; }\n\n/* === Stacked button column (modal CTAs) === */\n.moonkey-sdk-root .moonkey-btn-stack { display: flex; flex-direction: column; gap: 0.5rem; width: 100%; padding-top: 0.5rem; }\n\n/* === Legal footer text (terms & privacy) === */\n.moonkey-sdk-root .moonkey-legal-text { font-size: 0.75rem; color: var(--moonkey-color-foreground-3); text-align: center; line-height: 1.5; margin-top: 1rem; }\n.moonkey-sdk-root .moonkey-legal-text a { color: var(--moonx-color-link, var(--moonkey-color-accent)); cursor: pointer; }\n/* Inline-checkbox variant: same typography, but flex layout aligned left so the checkbox sits beside the link text. */\n.moonkey-sdk-root .moonkey-legal-checkbox { display: flex; align-items: flex-start; justify-content: flex-start; text-align: left; gap: 0.5rem; }\n.moonkey-sdk-root .moonkey-legal-checkbox input[type="checkbox"] { margin-top: 0.15rem; cursor: pointer; }\n\n/* === Login gating (require_users_accept_terms) === */\n/* Wraps the email/social/wallet buttons so they can be visually disabled until the terms checkbox is ticked. The default state is unaffected. */\n.moonkey-sdk-root .moonkey-login-gateable { transition: opacity 0.15s ease-out; }\n.moonkey-sdk-root .moonkey-login-gated { opacity: 0.5; pointer-events: none; }\n\n/* === Shared entry animations === */\n@keyframes moonkey-slide-in { from { opacity: 0; transform: translateX(-20px); } to { opacity: 1; transform: translateX(0); } }\n@keyframes moonkey-success-bounce { from { opacity: 0; transform: translateY(-50px) rotate(-60deg); } to { opacity: 1; transform: translateY(20px) rotate(0deg); } }\n@keyframes moonkey-error-bounce { from { opacity: 0; transform: translateY(-50px) rotate(-60deg); } to { opacity: 1; transform: translateY(20px) rotate(0deg); } }\n@keyframes moonkey-error-shake { 0%, 100% { transform: translateX(0); } 10%, 30%, 50%, 70%, 90% { transform: translateX(-10px); } 20%, 40%, 60%, 80% { transform: translateX(10px); } }\n@keyframes moonkey-mail-slide-in { from { opacity: 0; transform: translateX(-50px) rotate(-15deg); } to { opacity: 1; transform: translateX(0) rotate(0deg); } }\n@keyframes moonkey-verified-slide-in { from { opacity: 0; transform: translateX(100px); } to { opacity: 1; transform: translateX(0); } }\n\n/* === Icon size utilities === */\n.moonkey-sdk-root .moonkey-icon--xs { width: 0.75rem; height: 0.75rem; }\n.moonkey-sdk-root .moonkey-icon--sm { width: 1rem; height: 1rem; }\n.moonkey-sdk-root .moonkey-icon--md { width: 1.5rem; height: 1.5rem; }\n.moonkey-sdk-root .moonkey-icon--lg { width: 2rem; height: 2rem; }\n.moonkey-sdk-root .moonkey-icon--xl { width: 2.5rem; height: 2.5rem; }\n.moonkey-sdk-root .moonkey-icon--2xl { width: 3rem; height: 3rem; }\n.moonkey-sdk-root .moonkey-icon--mr-xs { margin-right: 0.25rem; }\n.moonkey-sdk-root .moonkey-icon--mr-sm { margin-right: 0.5rem; }\n.moonkey-sdk-root .moonkey-icon--accent { color: var(--moonkey-color-accent); }\n.moonkey-sdk-root .moonkey-icon--success { color: var(--moonkey-color-success, #16a34a); }\n.moonkey-sdk-root .moonkey-icon--error { color: var(--moonkey-color-error); }\n.moonkey-sdk-root .moonkey-icon--muted { color: var(--moonkey-color-foreground-3); }\n.moonkey-sdk-root .moonkey-icon--fg { color: var(--moonkey-color-foreground); }\n\n/* === Layout utilities === */\n.moonkey-sdk-root .moonkey-flex-center { display: flex; align-items: center; justify-content: center; }\n.moonkey-sdk-root .moonkey-flex-between { display: flex; align-items: center; justify-content: space-between; }\n.moonkey-sdk-root .moonkey-flex-col { display: flex; flex-direction: column; }\n.moonkey-sdk-root .moonkey-flex-col-center { display: flex; flex-direction: column; align-items: center; }\n\n/* === Text modifiers === */\n.moonkey-sdk-root .moonkey-text--semibold { font-weight: var(--moonx-font-weight-medium, 500); }\n.moonkey-sdk-root .moonkey-text--bold { font-weight: var(--moonx-font-weight-bold, 600); }\n.moonkey-sdk-root .moonkey-text--center { text-align: center; }\n.moonkey-sdk-root .moonkey-text--sm { font-size: var(--moonx-font-size-sm, 0.875rem); }\n.moonkey-sdk-root .moonkey-text--lg { font-size: var(--moonx-font-size-lg, 1.125rem); }\n.moonkey-sdk-root .moonkey-text--xl { font-size: var(--moonx-font-size-xl, 1.25rem); }\n\n/* === Transaction detail card (success receipt) === */\n.moonkey-sdk-root .moonkey-detail-card { display: flex; flex-direction: column; border: 1px solid var(--moonkey-color-border); border-radius: var(--moonkey-border-radius-lg); padding: 1rem 0.5rem; margin: 2rem 0.5rem 0; }\n.moonkey-sdk-root .moonkey-detail-card__rows { flex: 1; display: flex; flex-direction: column; gap: 0.25rem; }\n\n/* === Failed-transaction error scroll box === */\n.moonkey-sdk-root .moonkey-error-scroll { display: flex; flex-direction: column; background-color: var(--moonkey-color-background-2); border: 1px solid var(--moonkey-color-border); border-radius: var(--moonkey-border-radius-lg); padding: 1rem 0.5rem; margin: 0.5rem; height: 150px; overflow: auto; }\n\n/* === Network logo badge (ethereum/solana pair) === */\n.moonkey-sdk-root .moonkey-network-badge { width: 32px; height: 32px; border-radius: 16px; border: 1px solid var(--moonkey-color-border); background-color: var(--moonkey-color-background-2); display: flex; align-items: center; justify-content: center; flex-shrink: 0; }\n.moonkey-sdk-root .moonkey-network-badge--overlap { margin-left: -8px; }\n\n/* === Positioned icons inside inputs === */\n.moonkey-sdk-root .moonkey-search-icon { position: absolute; left: 0.75rem; top: 0.875rem; color: var(--moonkey-color-foreground-3); }\n.moonkey-sdk-root .moonkey-input-icon--left { position: absolute; left: 0.75rem; top: 50%; transform: translateY(-50%); color: var(--moonkey-color-foreground-3); pointer-events: none; }\n\n/* === Step indicator (N of M) === */\n.moonkey-sdk-root .moonkey-step-label { font-size: 0.75rem; font-weight: 600; color: var(--moonkey-color-accent); letter-spacing: 0.05em; text-transform: uppercase; }\n\n/* === Feature bullet item (passkey enroll) === */\n.moonkey-sdk-root .moonkey-feature-item { display: flex; align-items: flex-start; gap: 0.75rem; text-align: left; font-size: 0.875rem; color: var(--moonkey-color-foreground); }\n\n/* === Monospace textarea (import wallet) === */\n.moonkey-sdk-root .moonkey-mono-textarea { width: 100%; min-height: 100px; padding: 0.75rem; font-family: monospace; font-size: 0.75rem; background-color: var(--moonkey-color-background-2); color: var(--moonkey-color-foreground); border: 1px solid var(--moonkey-color-border); border-radius: var(--moonx-radius-input, var(--moonkey-border-radius-md)); outline: none; resize: vertical; }\n\n/* === Sign-flow inner section and row === */\n.moonkey-sdk-root .moonkey-sign-section { padding: 0.5rem; }\n.moonkey-sdk-root .moonkey-sign-row { display: flex; align-items: center; justify-content: space-between; }\n\n/* === External wallet connect button (login flow) === */\n.moonkey-sdk-root .moonkey-external-wallet-btn { border-radius: var(--moonx-radius-button, var(--moonkey-border-radius-lg)); border: var(--moonx-button-border-width, 1px) solid var(--moonx-button-border-color, var(--moonkey-color-border)); color: var(--moonx-button-fg, var(--moonkey-color-foreground)); padding: 0.75rem 0.25rem; cursor: pointer; margin-top: 0.75rem; transition: all 0.2s ease-in-out; background-color: var(--moonx-button-bg, transparent); }\n.moonkey-sdk-root .moonkey-external-wallet-btn:hover { border-color: var(--moonx-button-border-color-hover, var(--moonkey-color-accent)); background-color: var(--moonx-button-bg-hover, var(--moonkey-color-background-2)); }\n.moonkey-sdk-root .moonkey-external-wallet-btn--accent-hover:hover { background-color: var(--moonkey-color-accent); }\n.moonkey-sdk-root .moonkey-external-wallet-btn__inner { display: flex; flex-direction: row; align-items: center; gap: 0.5rem; animation: moonkey-slide-in 0.3s ease-out 0.1s both; }\n\n/* === Flex row utility (icon + label pairs) === */\n.moonkey-sdk-root .moonkey-flex-row { display: flex; flex-direction: row; align-items: center; gap: 0.5rem; }\n\n/* === Login landing layout === */\n.moonkey-sdk-root .moonkey-header { position: absolute; top: 1.5rem; left: 0; right: 0; text-align: center; font-family: var(--moonx-font-family-heading, inherit); font-size: var(--moonx-font-size-heading, 0.875rem); font-weight: var(--moonx-font-weight-heading, 500); letter-spacing: var(--moonx-letter-spacing-heading, inherit); color: var(--moonx-color-heading, var(--moonkey-color-foreground)); margin-bottom: 0.5rem; padding-left: 3rem; padding-right: 3rem; }\n.moonkey-sdk-root .moonkey-header__inner { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.moonkey-sdk-root .moonkey-content-wrapper { padding-top: 1rem; padding-bottom: 1rem; width: 100%; }\n.moonkey-sdk-root .moonkey-logo-section { text-align: center; margin-bottom: 1rem; }\n.moonkey-sdk-root .moonkey-logo-section__inner { padding-top: 1rem; padding-bottom: 1rem; }\n.moonkey-sdk-root .moonkey-description { padding-left: 1.25rem; padding-right: 1.25rem; text-align: center; color: var(--moonkey-color-foreground-3); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.moonkey-sdk-root .moonkey-form-section { padding: 0.5rem 1rem; }\n\n/* === Email OTP content fill === */\n.moonkey-sdk-root .moonkey-otp-content { flex-grow: 1; display: flex; flex-direction: column; justify-content: center; }\n\n/* === Wallet icon status overlay badge === */\n.moonkey-sdk-root .moonkey-wallet-status-badge { position: absolute; bottom: -4px; right: -4px; background-color: var(--moonkey-color-background); border-radius: 50%; display: flex; align-items: center; justify-content: center; }\n\n/* === Wallet connect success animation === */\n@keyframes fadeInScale { from { opacity: 0; transform: scale(0.8); } to { opacity: 1; transform: scale(1); } }\n';
3288
3531
  // src/components/scoped-container.tsx
3289
3532
  import { jsx as jsx5, jsxs as jsxs2 } from "react/jsx-runtime";
3290
3533
  function ScopedContainer(param) {
3291
3534
  var children = param.children, _param_isDark = param.isDark, isDark = _param_isDark === void 0 ? false : _param_isDark, customTheme = param.theme, appearance = param.appearance, className = param.className;
3292
- var _ref, _ref1;
3535
+ var _ref, _ref1, _ref2, _ref3;
3293
3536
  var baseTheme = isDark ? darkTheme : lightTheme;
3294
- var appearanceDerived = appearanceToTheme(appearance);
3537
+ var appearanceDerived = appearanceToTheme(appearance, isDark);
3538
+ var moonxVars = (_ref = customTheme === null || customTheme === void 0 ? void 0 : customTheme.moonxVars) !== null && _ref !== void 0 ? _ref : {};
3539
+ var fontUrls = (_ref1 = customTheme === null || customTheme === void 0 ? void 0 : customTheme.fontUrls) !== null && _ref1 !== void 0 ? _ref1 : [];
3295
3540
  var mergedTheme = {
3296
3541
  colors: _object_spread({}, baseTheme.colors, appearanceDerived.colors, customTheme === null || customTheme === void 0 ? void 0 : customTheme.colors),
3297
3542
  borderRadius: _object_spread({}, baseTheme.borderRadius, appearanceDerived.borderRadius, customTheme === null || customTheme === void 0 ? void 0 : customTheme.borderRadius),
3298
- fontFamily: (_ref = (_ref1 = customTheme === null || customTheme === void 0 ? void 0 : customTheme.fontFamily) !== null && _ref1 !== void 0 ? _ref1 : appearanceDerived.fontFamily) !== null && _ref !== void 0 ? _ref : baseTheme.fontFamily
3543
+ fontFamily: (_ref2 = (_ref3 = customTheme === null || customTheme === void 0 ? void 0 : customTheme.fontFamily) !== null && _ref3 !== void 0 ? _ref3 : appearanceDerived.fontFamily) !== null && _ref2 !== void 0 ? _ref2 : baseTheme.fontFamily
3299
3544
  };
3300
- var containerStyles = _object_spread_props(_object_spread({}, themeToCSS(mergedTheme)), {
3545
+ var containerStyles = _object_spread_props(_object_spread({}, themeToCSS(mergedTheme), moonxVars), {
3301
3546
  isolation: "isolate",
3302
3547
  contain: "layout style",
3303
3548
  boxSizing: "border-box",
3304
3549
  WebkitFontSmoothing: "antialiased",
3305
3550
  MozOsxFontSmoothing: "grayscale",
3306
3551
  fontFamily: "var(--moonkey-font-family)",
3552
+ letterSpacing: "var(--moonx-letter-spacing, normal)",
3307
3553
  color: mergedTheme.colors.foreground
3308
3554
  });
3309
3555
  return /* @__PURE__ */ jsxs2("div", {
@@ -3311,6 +3557,12 @@ function ScopedContainer(param) {
3311
3557
  style: containerStyles,
3312
3558
  "data-theme": isDark ? "dark" : "light",
3313
3559
  children: [
3560
+ fontUrls.map(function(href) {
3561
+ return /* @__PURE__ */ jsx5("link", {
3562
+ rel: "stylesheet",
3563
+ href: href
3564
+ }, href);
3565
+ }),
3314
3566
  /* @__PURE__ */ jsx5("style", {
3315
3567
  dangerouslySetInnerHTML: {
3316
3568
  __html: SDK_STYLES
@@ -3328,18 +3580,20 @@ function RootCard(param) {
3328
3580
  var cardStyle = {
3329
3581
  minHeight: minHeight,
3330
3582
  width: "100%",
3331
- borderRadius: "var(--moonkey-border-radius-lg)",
3332
- boxShadow: "0 25px 50px -12px rgb(0 0 0 / 0.25)",
3333
- border: "1px solid var(--moonkey-color-border)",
3583
+ borderRadius: "var(--moonx-radius-card, var(--moonkey-border-radius-lg))",
3584
+ boxShadow: "var(--moonx-card-shadow, 0 25px 50px -12px rgb(0 0 0 / 0.25))",
3585
+ border: "var(--moonx-card-border-width, 1px) solid var(--moonx-card-border-color, var(--moonkey-color-border))",
3334
3586
  position: "relative",
3335
3587
  backgroundColor: "var(--moonkey-color-background)",
3588
+ color: "var(--moonx-card-fg, inherit)",
3336
3589
  display: "flex",
3337
- flexDirection: "column"
3590
+ flexDirection: "column",
3591
+ overflow: "hidden"
3338
3592
  };
3339
3593
  var contentStyle = _object_spread({
3340
3594
  display: "flex",
3341
3595
  flexDirection: "column",
3342
- padding: "1rem 1.5rem",
3596
+ padding: "var(--moonx-card-padding, 1rem 1.5rem)",
3343
3597
  flex: 1
3344
3598
  }, centerContent ? {
3345
3599
  justifyContent: "center",
@@ -3354,8 +3608,8 @@ function RootCard(param) {
3354
3608
  width: "100vw",
3355
3609
  height: "100dvh",
3356
3610
  // Use dynamic viewport height for mobile keyboard handling
3357
- backgroundColor: "rgba(0, 0, 0, 0.3)",
3358
- backdropFilter: "blur(4px)",
3611
+ backgroundColor: "var(--moonx-backdrop-color, rgba(0, 0, 0, 0.3))",
3612
+ backdropFilter: "blur(var(--moonx-backdrop-blur, 4px))",
3359
3613
  zIndex: 50,
3360
3614
  overflow: "hidden"
3361
3615
  };
@@ -3385,7 +3639,7 @@ function RootCard(param) {
3385
3639
  };
3386
3640
  var modalCardStyle = _object_spread_props(_object_spread({}, cardStyle), {
3387
3641
  width: "100%",
3388
- maxWidth: "28rem"
3642
+ maxWidth: "var(--moonx-card-max-width, 28rem)"
3389
3643
  });
3390
3644
  if (embedded) {
3391
3645
  return /* @__PURE__ */ jsx6(ScopedContainer, {
@@ -4695,7 +4949,7 @@ var EmailOtpInput = function EmailOtpInput(param) {
4695
4949
  paddingRight: "5.3rem",
4696
4950
  paddingTop: "0.75rem",
4697
4951
  paddingBottom: "0.75rem",
4698
- borderRadius: "var(--moonkey-border-radius-lg)",
4952
+ borderRadius: "var(--moonx-radius-input, var(--moonkey-border-radius-lg))",
4699
4953
  fontSize: "1rem"
4700
4954
  },
4701
4955
  required: true
@@ -5608,6 +5862,44 @@ import { flattenPresenceTokens as flattenPresenceTokens5, getInternalPresenceTok
5608
5862
  import { createWebAuthnPasskey as createWebAuthnPasskey6 } from "@moon-x/core/web";
5609
5863
  import { KeyRound as KeyRound2, ShieldOff, X } from "lucide-react";
5610
5864
  import { useEffect as useEffect13, useRef as useRef6, useState as useState16 } from "react";
5865
+ // src/lib/theme-bridge.ts
5866
+ import { FONT_URLS_KEY } from "@moon-x/core/utils";
5867
+ function serializeThemeVars(theme) {
5868
+ var _theme_colors, _theme_borderRadius;
5869
+ var vars = {};
5870
+ if (!theme) return vars;
5871
+ var sparse = {
5872
+ colors: (_theme_colors = theme.colors) !== null && _theme_colors !== void 0 ? _theme_colors : {},
5873
+ borderRadius: (_theme_borderRadius = theme.borderRadius) !== null && _theme_borderRadius !== void 0 ? _theme_borderRadius : {},
5874
+ fontFamily: theme.fontFamily
5875
+ };
5876
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
5877
+ try {
5878
+ for(var _iterator = Object.entries(themeToCSS(sparse))[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
5879
+ var _step_value = _sliced_to_array(_step.value, 2), key = _step_value[0], value = _step_value[1];
5880
+ if (typeof value === "string" && value) vars[key] = value;
5881
+ }
5882
+ } catch (err) {
5883
+ _didIteratorError = true;
5884
+ _iteratorError = err;
5885
+ } finally{
5886
+ try {
5887
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
5888
+ _iterator.return();
5889
+ }
5890
+ } finally{
5891
+ if (_didIteratorError) {
5892
+ throw _iteratorError;
5893
+ }
5894
+ }
5895
+ }
5896
+ if (theme.moonxVars) Object.assign(vars, theme.moonxVars);
5897
+ if (theme.fontUrls && theme.fontUrls.length > 0) {
5898
+ vars[FONT_URLS_KEY] = JSON.stringify(theme.fontUrls);
5899
+ }
5900
+ return vars;
5901
+ }
5902
+ // src/components/flows/export-key/export-key.tsx
5611
5903
  import { Fragment as Fragment3, jsx as jsx22, jsxs as jsxs15 } from "react/jsx-runtime";
5612
5904
  var ExportKey = function ExportKey(param) {
5613
5905
  var uiConfig = param.uiConfig, walletId = param.walletId, publishableKey = param.publishableKey, walletType = param.walletType, onCancel = param.onCancel, propsIsDark = param.isDark, propsAppConfig = param.appConfig, config = param.config;
@@ -5634,93 +5926,8 @@ var ExportKey = function ExportKey(param) {
5634
5926
  appConfig
5635
5927
  ]);
5636
5928
  var buildThemeParams = function buildThemeParams() {
5637
- var _config_config_theme, _config_config;
5638
- var themeVars = {};
5639
- var c = config === null || config === void 0 ? void 0 : (_config_config = config.config) === null || _config_config === void 0 ? void 0 : (_config_config_theme = _config_config.theme) === null || _config_config_theme === void 0 ? void 0 : _config_config_theme.colors;
5640
- if (!c) return themeVars;
5641
- var map = [
5642
- [
5643
- "--moonkey-color-accent",
5644
- c.accent
5645
- ],
5646
- [
5647
- "--moonkey-color-accent-foreground",
5648
- c.accentForeground
5649
- ],
5650
- [
5651
- "--moonkey-color-accent-dark",
5652
- c.accentDark
5653
- ],
5654
- [
5655
- "--moonkey-color-accent-light",
5656
- c.accentLight
5657
- ],
5658
- [
5659
- "--moonkey-color-accent-lightest",
5660
- c.accentLightest
5661
- ],
5662
- [
5663
- "--moonkey-color-background",
5664
- c.background
5665
- ],
5666
- [
5667
- "--moonkey-color-background-2",
5668
- c.background2
5669
- ],
5670
- [
5671
- "--moonkey-color-foreground",
5672
- c.foreground
5673
- ],
5674
- [
5675
- "--moonkey-color-foreground-2",
5676
- c.foreground2
5677
- ],
5678
- [
5679
- "--moonkey-color-foreground-3",
5680
- c.foreground3
5681
- ],
5682
- [
5683
- "--moonkey-color-success",
5684
- c.success
5685
- ],
5686
- [
5687
- "--moonkey-color-success-foreground",
5688
- c.successForeground
5689
- ],
5690
- [
5691
- "--moonkey-color-error",
5692
- c.error
5693
- ],
5694
- [
5695
- "--moonkey-color-error-foreground",
5696
- c.errorForeground
5697
- ],
5698
- [
5699
- "--moonkey-color-border",
5700
- c.border
5701
- ]
5702
- ];
5703
- var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
5704
- try {
5705
- for(var _iterator = map[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
5706
- var _step_value = _sliced_to_array(_step.value, 2), varName = _step_value[0], val = _step_value[1];
5707
- if (val) themeVars[varName] = val;
5708
- }
5709
- } catch (err) {
5710
- _didIteratorError = true;
5711
- _iteratorError = err;
5712
- } finally{
5713
- try {
5714
- if (!_iteratorNormalCompletion && _iterator.return != null) {
5715
- _iterator.return();
5716
- }
5717
- } finally{
5718
- if (_didIteratorError) {
5719
- throw _iteratorError;
5720
- }
5721
- }
5722
- }
5723
- return themeVars;
5929
+ var _config_config;
5930
+ return serializeThemeVars(config === null || config === void 0 ? void 0 : (_config_config = config.config) === null || _config_config === void 0 ? void 0 : _config_config.theme);
5724
5931
  };
5725
5932
  var getfinalIframeUrl = function getfinalIframeUrl(entropyType2, userHandleB64url, credentialIdB64url, keyshareReadToken) {
5726
5933
  var baseUrl = getIframeUrl2("/export-key");
@@ -7538,16 +7745,17 @@ var SocialLoginButton = function SocialLoginButton(param) {
7538
7745
  var icon = param.icon, text = param.text, provider = param.provider, onSocialLoginClick = param.onSocialLoginClick;
7539
7746
  var _useState23 = _sliced_to_array(useState23(false), 2), isHovered = _useState23[0], setIsHovered = _useState23[1];
7540
7747
  var buttonStyle = {
7541
- borderRadius: "var(--moonkey-border-radius-lg)",
7542
- borderWidth: "1px",
7748
+ borderRadius: "var(--moonx-radius-button, var(--moonkey-border-radius-lg))",
7749
+ borderWidth: "var(--moonx-button-border-width, 1px)",
7543
7750
  borderStyle: "solid",
7544
- borderColor: isHovered ? "var(--moonkey-color-accent)" : "var(--moonkey-color-border)",
7751
+ borderColor: isHovered ? "var(--moonx-button-border-color-hover, var(--moonkey-color-accent))" : "var(--moonx-button-border-color, var(--moonkey-color-border))",
7752
+ color: "var(--moonx-button-fg, var(--moonkey-color-foreground))",
7545
7753
  paddingTop: "0.75rem",
7546
7754
  paddingBottom: "0.75rem",
7547
7755
  paddingLeft: "0.25rem",
7548
7756
  paddingRight: "0.25rem",
7549
7757
  cursor: "pointer",
7550
- backgroundColor: isHovered ? "var(--moonkey-color-background-2)" : "transparent",
7758
+ backgroundColor: isHovered ? "var(--moonx-button-bg-hover, var(--moonkey-color-background-2))" : "var(--moonx-button-bg, transparent)",
7551
7759
  marginTop: "0.75rem",
7552
7760
  transition: "all 0.2s ease-in-out"
7553
7761
  };
@@ -12452,7 +12660,7 @@ var TermsAndPrivacy = function TermsAndPrivacy(param) {
12452
12660
  import { jsx as jsx51, jsxs as jsxs41 } from "react/jsx-runtime";
12453
12661
  var LoginLanding = function LoginLanding(param) {
12454
12662
  var config = param.config, onCancel = param.onCancel, onMethodSelect = param.onMethodSelect, _param_embedded = param.embedded, embedded = _param_embedded === void 0 ? false : _param_embedded, _param_hideClose = param.hideClose, hideClose = _param_hideClose === void 0 ? false : _param_hideClose, propsIsDark = param.isDark, propsAppConfig = param.appConfig;
12455
- var _config_config, _config_config_appearance, _config_config1, _config_config_appearance1, _config_config2, _config_config3, _config_config4, _appConfig_privacy_policy_url, _appConfig_terms_of_service_url, _config_config5, _config_config6, _config_config_appearance_loginHeaderTitle, _config_config_appearance2, _config_config7, _config_config_appearance3, _config_config8, _config_config_appearance4, _config_config9, _config_config_appearance5, _config_config10, _config_config_prefill, _config_config11, _config_config_prefill1, _config_config12;
12663
+ var _config_config, _config_config_appearance, _config_config1, _config_config_appearance1, _config_config2, _config_config3, _config_config4, _appConfig_privacy_policy_url, _appConfig_terms_of_service_url, _config_config_appearance2, _config_config5, _config_config6, _config_config7, _config_config_appearance_loginHeaderTitle, _config_config_appearance3, _config_config8, _config_config_appearance4, _config_config9, _config_config_appearance5, _config_config10, _config_config_prefill, _config_config11, _config_config_prefill1, _config_config12;
12456
12664
  var _useAppConfig = useAppConfig(propsAppConfig ? void 0 : config === null || config === void 0 ? void 0 : config.publishableKey), fetchedAppConfig = _useAppConfig.appConfig;
12457
12665
  var appConfig = propsAppConfig || fetchedAppConfig;
12458
12666
  var t = useTranslation().t;
@@ -12580,11 +12788,12 @@ var LoginLanding = function LoginLanding(param) {
12580
12788
  });
12581
12789
  })();
12582
12790
  };
12791
+ var logo = resolveLogo(config === null || config === void 0 ? void 0 : (_config_config5 = config.config) === null || _config_config5 === void 0 ? void 0 : (_config_config_appearance2 = _config_config5.appearance) === null || _config_config_appearance2 === void 0 ? void 0 : _config_config_appearance2.logo, isDark);
12583
12792
  return /* @__PURE__ */ jsxs41(RootCard, {
12584
12793
  embedded: embedded,
12585
12794
  isDark: isDark,
12586
- theme: config === null || config === void 0 ? void 0 : (_config_config5 = config.config) === null || _config_config5 === void 0 ? void 0 : _config_config5.theme,
12587
- appearance: config === null || config === void 0 ? void 0 : (_config_config6 = config.config) === null || _config_config6 === void 0 ? void 0 : _config_config6.appearance,
12795
+ theme: config === null || config === void 0 ? void 0 : (_config_config6 = config.config) === null || _config_config6 === void 0 ? void 0 : _config_config6.theme,
12796
+ appearance: config === null || config === void 0 ? void 0 : (_config_config7 = config.config) === null || _config_config7 === void 0 ? void 0 : _config_config7.appearance,
12588
12797
  children: [
12589
12798
  !hideClose && /* @__PURE__ */ jsx51("div", {
12590
12799
  className: "moonkey-flow-close",
@@ -12611,7 +12820,7 @@ var LoginLanding = function LoginLanding(param) {
12611
12820
  className: "moonkey-header",
12612
12821
  children: /* @__PURE__ */ jsx51("div", {
12613
12822
  className: "moonkey-header__inner",
12614
- children: (config === null || config === void 0 ? void 0 : (_config_config7 = config.config) === null || _config_config7 === void 0 ? void 0 : (_config_config_appearance2 = _config_config7.appearance) === null || _config_config_appearance2 === void 0 ? void 0 : (_config_config_appearance_loginHeaderTitle = _config_config_appearance2.loginHeaderTitle) === null || _config_config_appearance_loginHeaderTitle === void 0 ? void 0 : _config_config_appearance_loginHeaderTitle.toString()) || t("loginLanding.title")
12823
+ children: (config === null || config === void 0 ? void 0 : (_config_config8 = config.config) === null || _config_config8 === void 0 ? void 0 : (_config_config_appearance3 = _config_config8.appearance) === null || _config_config_appearance3 === void 0 ? void 0 : (_config_config_appearance_loginHeaderTitle = _config_config_appearance3.loginHeaderTitle) === null || _config_config_appearance_loginHeaderTitle === void 0 ? void 0 : _config_config_appearance_loginHeaderTitle.toString()) || t("loginLanding.title")
12615
12824
  })
12616
12825
  }),
12617
12826
  /* @__PURE__ */ jsxs41("div", {
@@ -12624,7 +12833,9 @@ var LoginLanding = function LoginLanding(param) {
12624
12833
  className: "moonkey-logo-section__inner",
12625
12834
  children: /* @__PURE__ */ jsx51(AppLogo, {
12626
12835
  appConfig: appConfig,
12627
- src: config === null || config === void 0 ? void 0 : (_config_config8 = config.config) === null || _config_config8 === void 0 ? void 0 : (_config_config_appearance3 = _config_config8.appearance) === null || _config_config_appearance3 === void 0 ? void 0 : _config_config_appearance3.logo
12836
+ src: logo === null || logo === void 0 ? void 0 : logo.src,
12837
+ height: logo === null || logo === void 0 ? void 0 : logo.height,
12838
+ align: logo === null || logo === void 0 ? void 0 : logo.align
12628
12839
  })
12629
12840
  }),
12630
12841
  (config === null || config === void 0 ? void 0 : (_config_config9 = config.config) === null || _config_config9 === void 0 ? void 0 : (_config_config_appearance4 = _config_config9.appearance) === null || _config_config_appearance4 === void 0 ? void 0 : _config_config_appearance4.loginHeaderDescription) && /* @__PURE__ */ jsx51("div", {
@@ -18161,52 +18372,10 @@ var AuthProvider = function AuthProvider(param) {
18161
18372
  ]);
18162
18373
  var isReadyRef = useRef18(isReady);
18163
18374
  var configWithCSSOverrides = useMemo4(function() {
18164
- var _ref, _ref1, _ref2;
18165
- var _config_theme, _config_theme1, _config_theme2;
18375
+ var _BORDER_RADIUS_PRESETS_appearance_borderRadius, _tokens_fontFamily;
18376
+ var _tokens_borderRadius, _tokens_borderRadius1, _tokens_borderRadius2, _tokens_borderRadius3;
18166
18377
  var useDarkTheme = isDarkAppearance(appearance);
18167
- var baseThemeColors = useDarkTheme ? {
18168
- accent: "#818cf8",
18169
- accentForeground: "#ffffff",
18170
- accentDark: "#6366f1",
18171
- accentDarkest: "#4f46e5",
18172
- accentLight: "#a5b4fc",
18173
- accentLightest: "#e0e7ff",
18174
- background: "#09090b",
18175
- background2: "#18181b",
18176
- background3: "#27272a",
18177
- foreground: "#fafafa",
18178
- foreground2: "#e4e4e7",
18179
- foreground3: "#a1a1aa",
18180
- foreground4: "#71717a",
18181
- foregroundAccent: "#a78bfa",
18182
- success: "#22c55e",
18183
- successForeground: "#ffffff",
18184
- error: "#ef4444",
18185
- errorForeground: "#ffffff",
18186
- errorLight: "#fca5a5",
18187
- border: "#3f3f46"
18188
- } : {
18189
- accent: "#6366f1",
18190
- accentForeground: "#ffffff",
18191
- accentDark: "#4338ca",
18192
- accentDarkest: "#3730a3",
18193
- accentLight: "#818cf8",
18194
- accentLightest: "#c7d2fe",
18195
- background: "#ffffff",
18196
- background2: "#f9fafb",
18197
- background3: "#f3f4f6",
18198
- foreground: "#09090b",
18199
- foreground2: "#18181b",
18200
- foreground3: "#71717a",
18201
- foreground4: "#a1a1aa",
18202
- foregroundAccent: "#4f46e5",
18203
- success: "#10b981",
18204
- successForeground: "#ffffff",
18205
- error: "#ef4444",
18206
- errorForeground: "#ffffff",
18207
- errorLight: "#fca5a5",
18208
- border: "#e5e7eb"
18209
- };
18378
+ var baseThemeColors = (useDarkTheme ? darkTheme : lightTheme).colors;
18210
18379
  var derived = {};
18211
18380
  if (appearance === null || appearance === void 0 ? void 0 : appearance.accentColor) {
18212
18381
  var a = appearance.accentColor;
@@ -18219,8 +18388,9 @@ var AuthProvider = function AuthProvider(param) {
18219
18388
  derived.foregroundAccent = darken(a, 0.04);
18220
18389
  }
18221
18390
  if (appearance === null || appearance === void 0 ? void 0 : appearance.backgroundColor) {
18391
+ var _isColorDark;
18222
18392
  var bg = appearance.backgroundColor;
18223
- var isDarkBg = contrastForeground(bg) === "#ffffff";
18393
+ var isDarkBg = (_isColorDark = isColorDark(bg)) !== null && _isColorDark !== void 0 ? _isColorDark : useDarkTheme;
18224
18394
  derived.background = bg;
18225
18395
  derived.background2 = isDarkBg ? lighten(bg, 0.08) : darken(bg, 0.03);
18226
18396
  derived.background3 = isDarkBg ? lighten(bg, 0.14) : darken(bg, 0.06);
@@ -18237,58 +18407,30 @@ var AuthProvider = function AuthProvider(param) {
18237
18407
  derived.foreground4 = "#d1d5db";
18238
18408
  }
18239
18409
  }
18240
- var appearanceColors = (_ref = appearance === null || appearance === void 0 ? void 0 : appearance.colors) !== null && _ref !== void 0 ? _ref : {};
18241
- var BORDER_RADIUS_PRESETS2 = {
18242
- none: {
18243
- sm: "0",
18244
- md: "0",
18245
- lg: "0",
18246
- full: "0"
18247
- },
18248
- sm: {
18249
- sm: "0.125rem",
18250
- md: "0.25rem",
18251
- lg: "0.375rem",
18252
- full: "9999px"
18253
- },
18254
- md: {
18255
- sm: "0.375rem",
18256
- md: "0.5rem",
18257
- lg: "0.75rem",
18258
- full: "9999px"
18259
- },
18260
- lg: {
18261
- sm: "0.5rem",
18262
- md: "0.75rem",
18263
- lg: "1rem",
18264
- full: "9999px"
18265
- },
18266
- full: {
18267
- sm: "9999px",
18268
- md: "9999px",
18269
- lg: "9999px",
18270
- full: "9999px"
18271
- }
18272
- };
18273
- var appearanceBorderRadius = function() {
18274
- if (!(appearance === null || appearance === void 0 ? void 0 : appearance.borderRadius)) return {};
18275
- if (typeof appearance.borderRadius === "string") {
18276
- var _BORDER_RADIUS_PRESETS2_appearance_borderRadius;
18277
- return (_BORDER_RADIUS_PRESETS2_appearance_borderRadius = BORDER_RADIUS_PRESETS2[appearance.borderRadius]) !== null && _BORDER_RADIUS_PRESETS2_appearance_borderRadius !== void 0 ? _BORDER_RADIUS_PRESETS2_appearance_borderRadius : {};
18278
- }
18279
- return appearance.borderRadius;
18280
- }();
18410
+ var tokens = resolveAppearanceTokens(appearance, useDarkTheme);
18411
+ var presetRadius = typeof (appearance === null || appearance === void 0 ? void 0 : appearance.borderRadius) === "string" ? (_BORDER_RADIUS_PRESETS_appearance_borderRadius = BORDER_RADIUS_PRESETS[appearance.borderRadius]) !== null && _BORDER_RADIUS_PRESETS_appearance_borderRadius !== void 0 ? _BORDER_RADIUS_PRESETS_appearance_borderRadius : {} : {};
18281
18412
  var defaultFont = 'Sons, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif';
18413
+ var moonxVars = _object_spread({}, appearanceToMoonxVars(appearance, useDarkTheme), appearanceToComponentVars(appearance));
18414
+ var fontUrls = resolveFontUrls(appearance);
18282
18415
  return _object_spread_props(_object_spread({}, config), {
18283
18416
  theme: {
18284
- colors: _object_spread({}, baseThemeColors, derived, appearanceColors, config === null || config === void 0 ? void 0 : (_config_theme = config.theme) === null || _config_theme === void 0 ? void 0 : _config_theme.colors),
18417
+ colors: _object_spread({}, baseThemeColors, derived, definedOnly(tokens.colors)),
18285
18418
  borderRadius: _object_spread({
18286
18419
  sm: "0.375rem",
18287
18420
  md: "0.5rem",
18288
18421
  lg: "0.75rem",
18289
18422
  full: "9999px"
18290
- }, appearanceBorderRadius, config === null || config === void 0 ? void 0 : (_config_theme1 = config.theme) === null || _config_theme1 === void 0 ? void 0 : _config_theme1.borderRadius),
18291
- fontFamily: (_ref1 = (_ref2 = config === null || config === void 0 ? void 0 : (_config_theme2 = config.theme) === null || _config_theme2 === void 0 ? void 0 : _config_theme2.fontFamily) !== null && _ref2 !== void 0 ? _ref2 : appearance === null || appearance === void 0 ? void 0 : appearance.fontFamily) !== null && _ref1 !== void 0 ? _ref1 : defaultFont
18423
+ }, presetRadius, definedOnly({
18424
+ // explicit appearance radii (+ per-mode), legacy keys
18425
+ sm: (_tokens_borderRadius = tokens.borderRadius) === null || _tokens_borderRadius === void 0 ? void 0 : _tokens_borderRadius.sm,
18426
+ md: (_tokens_borderRadius1 = tokens.borderRadius) === null || _tokens_borderRadius1 === void 0 ? void 0 : _tokens_borderRadius1.md,
18427
+ lg: (_tokens_borderRadius2 = tokens.borderRadius) === null || _tokens_borderRadius2 === void 0 ? void 0 : _tokens_borderRadius2.lg,
18428
+ full: (_tokens_borderRadius3 = tokens.borderRadius) === null || _tokens_borderRadius3 === void 0 ? void 0 : _tokens_borderRadius3.full
18429
+ })),
18430
+ fontFamily: (_tokens_fontFamily = tokens.fontFamily) !== null && _tokens_fontFamily !== void 0 ? _tokens_fontFamily : defaultFont,
18431
+ // appearance.fontFamily (+ per-mode)
18432
+ moonxVars: moonxVars,
18433
+ fontUrls: fontUrls
18292
18434
  },
18293
18435
  appearance: appearance
18294
18436
  });
@@ -18435,10 +18577,10 @@ var MoonKeyContext = createContext(null);
18435
18577
  var MoonKeyProvider = function MoonKeyProvider(param) {
18436
18578
  var publishableKey = param.publishableKey, embeddableId = param.embeddableId, config = param.config, children = param.children;
18437
18579
  var _config_walletConnect, _config_emailConfig, _config_emailConfig1, _config_emailConfig2, _config_emailConfig3, _config_emailConfig4;
18438
- if ((config === null || config === void 0 ? void 0 : config.defaultChain) || (config === null || config === void 0 ? void 0 : config.supportedChains)) {
18580
+ if ((config === null || config === void 0 ? void 0 : config.chains) || (config === null || config === void 0 ? void 0 : config.defaultChain)) {
18439
18581
  validateChainConfig({
18440
- defaultChain: config.defaultChain,
18441
- supportedChains: config.supportedChains
18582
+ chains: config.chains,
18583
+ defaultChain: config.defaultChain
18442
18584
  });
18443
18585
  }
18444
18586
  var _useState53 = _sliced_to_array(useState53(null), 2), walletConnectClient = _useState53[0], setWalletConnectClient2 = _useState53[1];
@@ -18532,7 +18674,6 @@ var MoonKeyProvider = function MoonKeyProvider(param) {
18532
18674
  prefill: config === null || config === void 0 ? void 0 : config.prefill,
18533
18675
  walletChainType: config === null || config === void 0 ? void 0 : config.walletChainType,
18534
18676
  isDark: config === null || config === void 0 ? void 0 : config.isDark,
18535
- theme: config === null || config === void 0 ? void 0 : config.theme,
18536
18677
  emailConfig: {
18537
18678
  skipVerifiedSuccess: (config === null || config === void 0 ? void 0 : (_config_emailConfig = config.emailConfig) === null || _config_emailConfig === void 0 ? void 0 : _config_emailConfig.skipVerifiedSuccess) || false,
18538
18679
  verifiedDisplayTime: (config === null || config === void 0 ? void 0 : (_config_emailConfig1 = config.emailConfig) === null || _config_emailConfig1 === void 0 ? void 0 : _config_emailConfig1.verifiedDisplayTime) || 3e3,
@@ -18545,11 +18686,9 @@ var MoonKeyProvider = function MoonKeyProvider(param) {
18545
18686
  exportKeyConfig: config === null || config === void 0 ? void 0 : config.exportKeyConfig,
18546
18687
  signTransactionConfig: config === null || config === void 0 ? void 0 : config.signTransactionConfig,
18547
18688
  sendTransactionConfig: config === null || config === void 0 ? void 0 : config.sendTransactionConfig,
18548
- solana: config === null || config === void 0 ? void 0 : config.solana,
18549
- ethereum: {
18550
- defaultChain: config === null || config === void 0 ? void 0 : config.defaultChain,
18551
- supportedChains: config === null || config === void 0 ? void 0 : config.supportedChains
18552
- }
18689
+ // Unified chain config passes straight through no flat→nested remap.
18690
+ chains: config === null || config === void 0 ? void 0 : config.chains,
18691
+ defaultChain: config === null || config === void 0 ? void 0 : config.defaultChain
18553
18692
  },
18554
18693
  hideIframe: true
18555
18694
  };
@@ -18617,7 +18756,7 @@ var getReconnectionInfo = function getReconnectionInfo(error) {
18617
18756
  return null;
18618
18757
  };
18619
18758
  // src/index.ts
18620
- import { estimateEvmGas, estimateEvmGasReserve, getChainById, getDefaultChain, getEvmGasPrice, getEvmMaxPriorityFeePerGas, getEvmNonce, getRpcUrl, isChainSupported, setChainRpcUrl, validateChainConfig as validateChainConfig2 } from "@moon-x/core/lib";
18759
+ import { buildChainIndex, estimateEvmGas, estimateEvmGasReserve, getChainById, getEvmGasPrice, getEvmMaxPriorityFeePerGas, getEvmNonce, getRpcUrl, isChainSupported, isEvmEntry, normalizeChainKey, resolveChainEntry, resolveRpcUrl, resolveSolanaChainEntry, resolveWsUrl, validateChainConfig as validateChainConfig2 } from "@moon-x/core/lib";
18621
18760
  import { Network } from "@moon-x/core/types";
18622
18761
  import { arbitrum, arbitrumSepolia, avalanche, avalancheFuji, base, baseSepolia, bsc, bscTestnet, goerli, holesky, mainnet, optimism, optimismSepolia, polygon, polygonAmoy, sepolia } from "viem/chains";
18623
- export { MoonKeyProvider, Network, SessionExpiredError, SessionNotFoundError, arbitrum, arbitrumSepolia, avalanche, avalancheFuji, base, baseSepolia, bsc, bscTestnet, estimateEvmGas, estimateEvmGasReserve, ethereum_exports as ethereum, getChainById, getDefaultChain, getEvmGasPrice, getEvmMaxPriorityFeePerGas, getEvmNonce, getReconnectionInfo, getRpcUrl, goerli, holesky, isChainSupported, mainnet, optimism, optimismSepolia, polygon, polygonAmoy, requiresReconnection, sepolia, setChainRpcUrl, solana_exports as solana, useAddPasskey, useAttachOAuth, useConnectWallet, useDetachOAuth, useEphemeralSigner, useLoginWithEmail, useLoginWithOAuth, useMoonKey, useOAuthCompletion, usePasskeyStatus, useRegisterPasskey, useRemovePasskey, useUser, validateChainConfig2 as validateChainConfig };
18762
+ export { MoonKeyProvider, Network, SessionExpiredError, SessionNotFoundError, appearanceToComponentVars, appearanceToCssVars, appearanceToMoonxVars, appearanceToTheme, arbitrum, arbitrumSepolia, avalanche, avalancheFuji, base, baseSepolia, bsc, bscTestnet, buildChainIndex, darkTheme, definedOnly, estimateEvmGas, estimateEvmGasReserve, ethereum_exports as ethereum, getChainById, getEvmGasPrice, getEvmMaxPriorityFeePerGas, getEvmNonce, getReconnectionInfo, getRpcUrl, goerli, holesky, isChainSupported, isColorDark, isDarkAppearance, isDarkMode, isEvmEntry, lightTheme, mainnet, normalizeChainKey, optimism, optimismSepolia, polygon, polygonAmoy, requiresReconnection, resolveAppearanceTokens, resolveChainEntry, resolveFontUrls, resolveLogo, resolveRpcUrl, resolveSolanaChainEntry, resolveWsUrl, sepolia, solana_exports as solana, themeToCSS, useAddPasskey, useAttachOAuth, useConnectWallet, useDetachOAuth, useEphemeralSigner, useLoginWithEmail, useLoginWithOAuth, useMoonKey, useOAuthCompletion, usePasskeyStatus, useRegisterPasskey, useRemovePasskey, useUser, validateChainConfig2 as validateChainConfig };