@moon-x/react-sdk 0.8.1 → 0.9.1

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
@@ -3322,24 +3574,27 @@ function ScopedContainer(param) {
3322
3574
  }
3323
3575
  // src/components/vanilla-ui/root-card.tsx
3324
3576
  import { jsx as jsx6, jsxs as jsxs3 } from "react/jsx-runtime";
3577
+ var MODAL_PORTAL_Z_INDEX = 2147483646;
3325
3578
  function RootCard(param) {
3326
3579
  var children = param.children, _param_centerContent = param.centerContent, centerContent = _param_centerContent === void 0 ? true : _param_centerContent, _param_embedded = param.embedded, embedded = _param_embedded === void 0 ? false : _param_embedded, _param_isDark = param.isDark, isDark = _param_isDark === void 0 ? false : _param_isDark, theme = param.theme, appearance = param.appearance;
3327
3580
  var minHeight = "500px";
3328
3581
  var cardStyle = {
3329
3582
  minHeight: minHeight,
3330
3583
  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)",
3584
+ borderRadius: "var(--moonx-radius-card, var(--moonkey-border-radius-lg))",
3585
+ boxShadow: "var(--moonx-card-shadow, 0 25px 50px -12px rgb(0 0 0 / 0.25))",
3586
+ border: "var(--moonx-card-border-width, 1px) solid var(--moonx-card-border-color, var(--moonkey-color-border))",
3334
3587
  position: "relative",
3335
3588
  backgroundColor: "var(--moonkey-color-background)",
3589
+ color: "var(--moonx-card-fg, inherit)",
3336
3590
  display: "flex",
3337
- flexDirection: "column"
3591
+ flexDirection: "column",
3592
+ overflow: "hidden"
3338
3593
  };
3339
3594
  var contentStyle = _object_spread({
3340
3595
  display: "flex",
3341
3596
  flexDirection: "column",
3342
- padding: "1rem 1.5rem",
3597
+ padding: "var(--moonx-card-padding, 1rem 1.5rem)",
3343
3598
  flex: 1
3344
3599
  }, centerContent ? {
3345
3600
  justifyContent: "center",
@@ -3354,8 +3609,8 @@ function RootCard(param) {
3354
3609
  width: "100vw",
3355
3610
  height: "100dvh",
3356
3611
  // Use dynamic viewport height for mobile keyboard handling
3357
- backgroundColor: "rgba(0, 0, 0, 0.3)",
3358
- backdropFilter: "blur(4px)",
3612
+ backgroundColor: "var(--moonx-backdrop-color, rgba(0, 0, 0, 0.3))",
3613
+ backdropFilter: "blur(var(--moonx-backdrop-blur, 4px))",
3359
3614
  zIndex: 50,
3360
3615
  overflow: "hidden"
3361
3616
  };
@@ -3385,7 +3640,7 @@ function RootCard(param) {
3385
3640
  };
3386
3641
  var modalCardStyle = _object_spread_props(_object_spread({}, cardStyle), {
3387
3642
  width: "100%",
3388
- maxWidth: "28rem"
3643
+ maxWidth: "var(--moonx-card-max-width, 28rem)"
3389
3644
  });
3390
3645
  if (embedded) {
3391
3646
  return /* @__PURE__ */ jsx6(ScopedContainer, {
@@ -3410,7 +3665,7 @@ function RootCard(param) {
3410
3665
  if (typeof window === "undefined") return;
3411
3666
  var portalDiv = document.createElement("div");
3412
3667
  portalDiv.id = "moonkey-modal-portal";
3413
- portalDiv.style.cssText = "\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 2147483647;\n pointer-events: none;\n ";
3668
+ portalDiv.style.cssText = "\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: ".concat(MODAL_PORTAL_Z_INDEX, ";\n pointer-events: none;\n ");
3414
3669
  document.body.appendChild(portalDiv);
3415
3670
  setPortalContainer(portalDiv);
3416
3671
  return function() {
@@ -4695,7 +4950,7 @@ var EmailOtpInput = function EmailOtpInput(param) {
4695
4950
  paddingRight: "5.3rem",
4696
4951
  paddingTop: "0.75rem",
4697
4952
  paddingBottom: "0.75rem",
4698
- borderRadius: "var(--moonkey-border-radius-lg)",
4953
+ borderRadius: "var(--moonx-radius-input, var(--moonkey-border-radius-lg))",
4699
4954
  fontSize: "1rem"
4700
4955
  },
4701
4956
  required: true
@@ -5608,6 +5863,44 @@ import { flattenPresenceTokens as flattenPresenceTokens5, getInternalPresenceTok
5608
5863
  import { createWebAuthnPasskey as createWebAuthnPasskey6 } from "@moon-x/core/web";
5609
5864
  import { KeyRound as KeyRound2, ShieldOff, X } from "lucide-react";
5610
5865
  import { useEffect as useEffect13, useRef as useRef6, useState as useState16 } from "react";
5866
+ // src/lib/theme-bridge.ts
5867
+ import { FONT_URLS_KEY } from "@moon-x/core/utils";
5868
+ function serializeThemeVars(theme) {
5869
+ var _theme_colors, _theme_borderRadius;
5870
+ var vars = {};
5871
+ if (!theme) return vars;
5872
+ var sparse = {
5873
+ colors: (_theme_colors = theme.colors) !== null && _theme_colors !== void 0 ? _theme_colors : {},
5874
+ borderRadius: (_theme_borderRadius = theme.borderRadius) !== null && _theme_borderRadius !== void 0 ? _theme_borderRadius : {},
5875
+ fontFamily: theme.fontFamily
5876
+ };
5877
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
5878
+ try {
5879
+ for(var _iterator = Object.entries(themeToCSS(sparse))[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
5880
+ var _step_value = _sliced_to_array(_step.value, 2), key = _step_value[0], value = _step_value[1];
5881
+ if (typeof value === "string" && value) vars[key] = value;
5882
+ }
5883
+ } catch (err) {
5884
+ _didIteratorError = true;
5885
+ _iteratorError = err;
5886
+ } finally{
5887
+ try {
5888
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
5889
+ _iterator.return();
5890
+ }
5891
+ } finally{
5892
+ if (_didIteratorError) {
5893
+ throw _iteratorError;
5894
+ }
5895
+ }
5896
+ }
5897
+ if (theme.moonxVars) Object.assign(vars, theme.moonxVars);
5898
+ if (theme.fontUrls && theme.fontUrls.length > 0) {
5899
+ vars[FONT_URLS_KEY] = JSON.stringify(theme.fontUrls);
5900
+ }
5901
+ return vars;
5902
+ }
5903
+ // src/components/flows/export-key/export-key.tsx
5611
5904
  import { Fragment as Fragment3, jsx as jsx22, jsxs as jsxs15 } from "react/jsx-runtime";
5612
5905
  var ExportKey = function ExportKey(param) {
5613
5906
  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 +5927,8 @@ var ExportKey = function ExportKey(param) {
5634
5927
  appConfig
5635
5928
  ]);
5636
5929
  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;
5930
+ var _config_config;
5931
+ return serializeThemeVars(config === null || config === void 0 ? void 0 : (_config_config = config.config) === null || _config_config === void 0 ? void 0 : _config_config.theme);
5724
5932
  };
5725
5933
  var getfinalIframeUrl = function getfinalIframeUrl(entropyType2, userHandleB64url, credentialIdB64url, keyshareReadToken) {
5726
5934
  var baseUrl = getIframeUrl2("/export-key");
@@ -7538,16 +7746,17 @@ var SocialLoginButton = function SocialLoginButton(param) {
7538
7746
  var icon = param.icon, text = param.text, provider = param.provider, onSocialLoginClick = param.onSocialLoginClick;
7539
7747
  var _useState23 = _sliced_to_array(useState23(false), 2), isHovered = _useState23[0], setIsHovered = _useState23[1];
7540
7748
  var buttonStyle = {
7541
- borderRadius: "var(--moonkey-border-radius-lg)",
7542
- borderWidth: "1px",
7749
+ borderRadius: "var(--moonx-radius-button, var(--moonkey-border-radius-lg))",
7750
+ borderWidth: "var(--moonx-button-border-width, 1px)",
7543
7751
  borderStyle: "solid",
7544
- borderColor: isHovered ? "var(--moonkey-color-accent)" : "var(--moonkey-color-border)",
7752
+ borderColor: isHovered ? "var(--moonx-button-border-color-hover, var(--moonkey-color-accent))" : "var(--moonx-button-border-color, var(--moonkey-color-border))",
7753
+ color: "var(--moonx-button-fg, var(--moonkey-color-foreground))",
7545
7754
  paddingTop: "0.75rem",
7546
7755
  paddingBottom: "0.75rem",
7547
7756
  paddingLeft: "0.25rem",
7548
7757
  paddingRight: "0.25rem",
7549
7758
  cursor: "pointer",
7550
- backgroundColor: isHovered ? "var(--moonkey-color-background-2)" : "transparent",
7759
+ backgroundColor: isHovered ? "var(--moonx-button-bg-hover, var(--moonkey-color-background-2))" : "var(--moonx-button-bg, transparent)",
7551
7760
  marginTop: "0.75rem",
7552
7761
  transition: "all 0.2s ease-in-out"
7553
7762
  };
@@ -12452,7 +12661,7 @@ var TermsAndPrivacy = function TermsAndPrivacy(param) {
12452
12661
  import { jsx as jsx51, jsxs as jsxs41 } from "react/jsx-runtime";
12453
12662
  var LoginLanding = function LoginLanding(param) {
12454
12663
  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;
12664
+ 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
12665
  var _useAppConfig = useAppConfig(propsAppConfig ? void 0 : config === null || config === void 0 ? void 0 : config.publishableKey), fetchedAppConfig = _useAppConfig.appConfig;
12457
12666
  var appConfig = propsAppConfig || fetchedAppConfig;
12458
12667
  var t = useTranslation().t;
@@ -12580,11 +12789,12 @@ var LoginLanding = function LoginLanding(param) {
12580
12789
  });
12581
12790
  })();
12582
12791
  };
12792
+ 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
12793
  return /* @__PURE__ */ jsxs41(RootCard, {
12584
12794
  embedded: embedded,
12585
12795
  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,
12796
+ theme: config === null || config === void 0 ? void 0 : (_config_config6 = config.config) === null || _config_config6 === void 0 ? void 0 : _config_config6.theme,
12797
+ appearance: config === null || config === void 0 ? void 0 : (_config_config7 = config.config) === null || _config_config7 === void 0 ? void 0 : _config_config7.appearance,
12588
12798
  children: [
12589
12799
  !hideClose && /* @__PURE__ */ jsx51("div", {
12590
12800
  className: "moonkey-flow-close",
@@ -12611,7 +12821,7 @@ var LoginLanding = function LoginLanding(param) {
12611
12821
  className: "moonkey-header",
12612
12822
  children: /* @__PURE__ */ jsx51("div", {
12613
12823
  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")
12824
+ 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
12825
  })
12616
12826
  }),
12617
12827
  /* @__PURE__ */ jsxs41("div", {
@@ -12624,7 +12834,9 @@ var LoginLanding = function LoginLanding(param) {
12624
12834
  className: "moonkey-logo-section__inner",
12625
12835
  children: /* @__PURE__ */ jsx51(AppLogo, {
12626
12836
  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
12837
+ src: logo === null || logo === void 0 ? void 0 : logo.src,
12838
+ height: logo === null || logo === void 0 ? void 0 : logo.height,
12839
+ align: logo === null || logo === void 0 ? void 0 : logo.align
12628
12840
  })
12629
12841
  }),
12630
12842
  (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 +18373,10 @@ var AuthProvider = function AuthProvider(param) {
18161
18373
  ]);
18162
18374
  var isReadyRef = useRef18(isReady);
18163
18375
  var configWithCSSOverrides = useMemo4(function() {
18164
- var _ref, _ref1, _ref2;
18165
- var _config_theme, _config_theme1, _config_theme2;
18376
+ var _BORDER_RADIUS_PRESETS_appearance_borderRadius, _tokens_fontFamily;
18377
+ var _tokens_borderRadius, _tokens_borderRadius1, _tokens_borderRadius2, _tokens_borderRadius3;
18166
18378
  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
- };
18379
+ var baseThemeColors = (useDarkTheme ? darkTheme : lightTheme).colors;
18210
18380
  var derived = {};
18211
18381
  if (appearance === null || appearance === void 0 ? void 0 : appearance.accentColor) {
18212
18382
  var a = appearance.accentColor;
@@ -18219,8 +18389,9 @@ var AuthProvider = function AuthProvider(param) {
18219
18389
  derived.foregroundAccent = darken(a, 0.04);
18220
18390
  }
18221
18391
  if (appearance === null || appearance === void 0 ? void 0 : appearance.backgroundColor) {
18392
+ var _isColorDark;
18222
18393
  var bg = appearance.backgroundColor;
18223
- var isDarkBg = contrastForeground(bg) === "#ffffff";
18394
+ var isDarkBg = (_isColorDark = isColorDark(bg)) !== null && _isColorDark !== void 0 ? _isColorDark : useDarkTheme;
18224
18395
  derived.background = bg;
18225
18396
  derived.background2 = isDarkBg ? lighten(bg, 0.08) : darken(bg, 0.03);
18226
18397
  derived.background3 = isDarkBg ? lighten(bg, 0.14) : darken(bg, 0.06);
@@ -18237,58 +18408,30 @@ var AuthProvider = function AuthProvider(param) {
18237
18408
  derived.foreground4 = "#d1d5db";
18238
18409
  }
18239
18410
  }
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
- }();
18411
+ var tokens = resolveAppearanceTokens(appearance, useDarkTheme);
18412
+ 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
18413
  var defaultFont = 'Sons, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif';
18414
+ var moonxVars = _object_spread({}, appearanceToMoonxVars(appearance, useDarkTheme), appearanceToComponentVars(appearance));
18415
+ var fontUrls = resolveFontUrls(appearance);
18282
18416
  return _object_spread_props(_object_spread({}, config), {
18283
18417
  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),
18418
+ colors: _object_spread({}, baseThemeColors, derived, definedOnly(tokens.colors)),
18285
18419
  borderRadius: _object_spread({
18286
18420
  sm: "0.375rem",
18287
18421
  md: "0.5rem",
18288
18422
  lg: "0.75rem",
18289
18423
  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
18424
+ }, presetRadius, definedOnly({
18425
+ // explicit appearance radii (+ per-mode), legacy keys
18426
+ sm: (_tokens_borderRadius = tokens.borderRadius) === null || _tokens_borderRadius === void 0 ? void 0 : _tokens_borderRadius.sm,
18427
+ md: (_tokens_borderRadius1 = tokens.borderRadius) === null || _tokens_borderRadius1 === void 0 ? void 0 : _tokens_borderRadius1.md,
18428
+ lg: (_tokens_borderRadius2 = tokens.borderRadius) === null || _tokens_borderRadius2 === void 0 ? void 0 : _tokens_borderRadius2.lg,
18429
+ full: (_tokens_borderRadius3 = tokens.borderRadius) === null || _tokens_borderRadius3 === void 0 ? void 0 : _tokens_borderRadius3.full
18430
+ })),
18431
+ fontFamily: (_tokens_fontFamily = tokens.fontFamily) !== null && _tokens_fontFamily !== void 0 ? _tokens_fontFamily : defaultFont,
18432
+ // appearance.fontFamily (+ per-mode)
18433
+ moonxVars: moonxVars,
18434
+ fontUrls: fontUrls
18292
18435
  },
18293
18436
  appearance: appearance
18294
18437
  });
@@ -18435,10 +18578,10 @@ var MoonKeyContext = createContext(null);
18435
18578
  var MoonKeyProvider = function MoonKeyProvider(param) {
18436
18579
  var publishableKey = param.publishableKey, embeddableId = param.embeddableId, config = param.config, children = param.children;
18437
18580
  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)) {
18581
+ if ((config === null || config === void 0 ? void 0 : config.chains) || (config === null || config === void 0 ? void 0 : config.defaultChain)) {
18439
18582
  validateChainConfig({
18440
- defaultChain: config.defaultChain,
18441
- supportedChains: config.supportedChains
18583
+ chains: config.chains,
18584
+ defaultChain: config.defaultChain
18442
18585
  });
18443
18586
  }
18444
18587
  var _useState53 = _sliced_to_array(useState53(null), 2), walletConnectClient = _useState53[0], setWalletConnectClient2 = _useState53[1];
@@ -18532,7 +18675,6 @@ var MoonKeyProvider = function MoonKeyProvider(param) {
18532
18675
  prefill: config === null || config === void 0 ? void 0 : config.prefill,
18533
18676
  walletChainType: config === null || config === void 0 ? void 0 : config.walletChainType,
18534
18677
  isDark: config === null || config === void 0 ? void 0 : config.isDark,
18535
- theme: config === null || config === void 0 ? void 0 : config.theme,
18536
18678
  emailConfig: {
18537
18679
  skipVerifiedSuccess: (config === null || config === void 0 ? void 0 : (_config_emailConfig = config.emailConfig) === null || _config_emailConfig === void 0 ? void 0 : _config_emailConfig.skipVerifiedSuccess) || false,
18538
18680
  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 +18687,9 @@ var MoonKeyProvider = function MoonKeyProvider(param) {
18545
18687
  exportKeyConfig: config === null || config === void 0 ? void 0 : config.exportKeyConfig,
18546
18688
  signTransactionConfig: config === null || config === void 0 ? void 0 : config.signTransactionConfig,
18547
18689
  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
- }
18690
+ // Unified chain config passes straight through no flat→nested remap.
18691
+ chains: config === null || config === void 0 ? void 0 : config.chains,
18692
+ defaultChain: config === null || config === void 0 ? void 0 : config.defaultChain
18553
18693
  },
18554
18694
  hideIframe: true
18555
18695
  };
@@ -18617,7 +18757,7 @@ var getReconnectionInfo = function getReconnectionInfo(error) {
18617
18757
  return null;
18618
18758
  };
18619
18759
  // src/index.ts
18620
- import { estimateEvmGas, estimateEvmGasReserve, getChainById, getDefaultChain, getEvmGasPrice, getEvmMaxPriorityFeePerGas, getEvmNonce, getRpcUrl, isChainSupported, setChainRpcUrl, validateChainConfig as validateChainConfig2 } from "@moon-x/core/lib";
18760
+ 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
18761
  import { Network } from "@moon-x/core/types";
18622
18762
  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 };
18763
+ 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 };