@lumiastream/ui 0.2.8-alpha.19 → 0.2.8-alpha.20

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.
Files changed (3) hide show
  1. package/dist/index.js +114 -54
  2. package/dist/se-import.js +114 -54
  3. package/package.json +134 -134
package/dist/index.js CHANGED
@@ -4618,8 +4618,40 @@ var SE_KAPPAGEN_EVENT_TO_LUMIA_ALERT = {
4618
4618
  // All three drop silently; the rest of the widget (size, spawn zone,
4619
4619
  // per-event flags for the remaining events) still imports.
4620
4620
  };
4621
+ function normalizeKappagenChatEmoteMode(mode) {
4622
+ const normalized = String(mode ?? "").trim().toLowerCase();
4623
+ if (!normalized || normalized === "off" || normalized === "false" || normalized === "none") return "off";
4624
+ if (normalized.includes("combo")) return "combo";
4625
+ return "show-all";
4626
+ }
4621
4627
  function mapKappagen(widget, ctx) {
4622
4628
  const v = widget.variables ?? {};
4629
+ const kappagenName = widget.name ?? widget.id ?? "unnamed widget";
4630
+ console.groupCollapsed("[SE Import][Kappagen raw widget]", kappagenName);
4631
+ console.log("Full StreamElements widget:", widget);
4632
+ console.log("Raw variables/settings:", widget.variables ?? null);
4633
+ console.log("Listeners:", widget.listeners ?? null);
4634
+ console.log("Events:", v.events ?? null);
4635
+ console.log("Events config:", v.eventsConfig ?? null);
4636
+ console.log("Kappagen animation/source settings:", {
4637
+ cheersplosions: v.cheersplosions,
4638
+ emotesplosion: v.emotesplosion,
4639
+ emotesplosiondir: v.emotesplosiondir,
4640
+ emotesplosionduration: v.emotesplosionduration,
4641
+ mode: v.mode,
4642
+ size: v.size,
4643
+ spawnzone: v.spawnzone,
4644
+ gif: v.gif,
4645
+ emoji: v.emoji,
4646
+ bttv: v.bttv,
4647
+ ffz: v.ffz,
4648
+ sevenTv: v.sevenTv,
4649
+ duration: v.duration,
4650
+ direction: v.direction,
4651
+ fullscreen: v.fullscreen,
4652
+ limit: v.limit
4653
+ });
4654
+ console.groupEnd();
4623
4655
  const eventsFromNested = v.eventsConfig ? {
4624
4656
  subscriber: v.eventsConfig.subscriber?.enabled ?? true,
4625
4657
  follower: v.eventsConfig.follower?.enabled ?? true,
@@ -4628,9 +4660,10 @@ function mapKappagen(widget, ctx) {
4628
4660
  tip: v.eventsConfig.tip?.enabled ?? true
4629
4661
  } : null;
4630
4662
  const events = v.events ?? eventsFromNested ?? { subscriber: true, follower: true, cheer: true, raid: true, tip: true };
4663
+ const chatEmoteMode = normalizeKappagenChatEmoteMode(v.mode);
4631
4664
  const alertTriggers = Object.entries(events).filter(([, enabled]) => !!enabled).map(([seKey]) => SE_KAPPAGEN_EVENT_TO_LUMIA_ALERT[seKey]).filter((x) => !!x);
4632
4665
  const alertEmotes = ["Kappa", "<3", "imGlitch"];
4633
- return buildUnit(
4666
+ const unit = buildUnit(
4634
4667
  widget,
4635
4668
  "emotealert",
4636
4669
  {
@@ -4650,6 +4683,9 @@ function mapKappagen(widget, ctx) {
4650
4683
  animationTime: typeof v.duration === "number" ? v.duration : 5,
4651
4684
  duration: typeof v.duration === "number" ? v.duration : 5,
4652
4685
  useAnimatedEmotes: true,
4686
+ alertOn: true,
4687
+ chatEmotesOn: chatEmoteMode !== "off",
4688
+ chatEmoteMode,
4653
4689
  alertNumberEmotes: typeof v.limit === "number" && v.limit > 0 ? v.limit : 30,
4654
4690
  alertEmotes,
4655
4691
  alertTriggers,
@@ -4676,6 +4712,15 @@ function mapKappagen(widget, ctx) {
4676
4712
  },
4677
4713
  ctx
4678
4714
  );
4715
+ console.groupCollapsed("[SE Import][Kappagen mapped emotealert]", kappagenName);
4716
+ console.log("Resolved events:", events);
4717
+ console.log("Mapped alert triggers:", alertTriggers);
4718
+ console.log("Mapped chat emote mode:", chatEmoteMode);
4719
+ console.log("Mapped alert emotes:", alertEmotes);
4720
+ console.log("Mapped Emotealert unit:", unit);
4721
+ console.log("Mapped Emotealert content:", unit.module?.content ?? null);
4722
+ console.groupEnd();
4723
+ return unit;
4679
4724
  }
4680
4725
  function mapLeaderboardFromVariables(widget, currency, ctx) {
4681
4726
  const v = widget.variables ?? {};
@@ -4868,7 +4913,9 @@ function liftSESpritesIntoTiers(types) {
4868
4913
  const cat = SE_TYPE_TO_CATEGORY[seKey];
4869
4914
  if (!cat) continue;
4870
4915
  const variations = block?.variations ?? [];
4871
- const usable = variations.filter((v) => typeof v?.src === "string" && v.src.length > 0);
4916
+ const usable = variations.filter(
4917
+ (v) => typeof (v?.preview ?? v?.src) === "string" && (v.preview ?? v.src ?? "").length > 0
4918
+ );
4872
4919
  const flagged = usable.filter((v) => v.default === true);
4873
4920
  const picked = flagged.length > 0 ? flagged : usable;
4874
4921
  const seenAmounts = /* @__PURE__ */ new Set();
@@ -4879,7 +4926,7 @@ function liftSESpritesIntoTiers(types) {
4879
4926
  seenAmounts.add(amount);
4880
4927
  tiers.push({
4881
4928
  minAmount: amount,
4882
- imageUrl: v.src,
4929
+ imageUrl: v.preview ?? v.src,
4883
4930
  scale: typeof v.cheerSize === "number" && v.cheerSize > 0 ? v.cheerSize : 1
4884
4931
  });
4885
4932
  }
@@ -4930,58 +4977,71 @@ function mapHypeCup(widget, ctx) {
4930
4977
  const maxBodies = typeof v.recentEvents === "number" && v.recentEvents > 0 ? Math.min(300, Math.max(10, v.recentEvents)) : 80;
4931
4978
  const duration = typeof v.duration === "number" && v.duration > 0 ? Math.min(15, Math.max(1, v.duration)) : 3;
4932
4979
  const sprites = liftSESpritesIntoTiers(v.types);
4933
- return buildUnit(widget, "tipjar", {
4934
- content: {
4935
- version: 1,
4936
- // Phase 1 ships a single preset; SE's per-cup polygon set isn't lifted
4937
- // yet (it'd require multi-cup support which we deliberately deferred).
4938
- // The streamer can swap a custom cup image + wireframe via Settings.
4939
- preset: "glass-mug",
4940
- customCup: null,
4941
- cup: {
4942
- x: cupX,
4943
- y: cupY,
4944
- scale: 1,
4945
- opacity: 1
4946
- },
4947
- physics: {
4948
- gravity: 1,
4949
- bounce,
4950
- friction: 0.06,
4951
- maxBodies
4952
- },
4953
- tokens: {
4954
- defaultRadius: 26
4955
- },
4956
- events: categoriesFromListeners(widget.listeners),
4957
- chat: {
4958
- useViewerAvatars: true
4959
- },
4960
- display: {
4961
- showWireframes: !!v.showWireframes,
4962
- showEventMessages: !!v.textEnabled,
4963
- messageDuration: duration
4980
+ return buildUnit(
4981
+ widget,
4982
+ "tipjar",
4983
+ {
4984
+ content: {
4985
+ version: 1,
4986
+ // Phase 1 ships a single preset; SE's per-cup polygon set isn't lifted
4987
+ // yet (it'd require multi-cup support which we deliberately deferred).
4988
+ // The streamer can swap a custom cup image + wireframe via Settings.
4989
+ preset: "glass-mug",
4990
+ customCup: null,
4991
+ cup: {
4992
+ x: cupX,
4993
+ y: cupY,
4994
+ scale: 1,
4995
+ opacity: 1
4996
+ },
4997
+ physics: {
4998
+ gravity: 1,
4999
+ bounce,
5000
+ friction: 0.06,
5001
+ maxBodies
5002
+ },
5003
+ tokens: {
5004
+ defaultRadius: 26
5005
+ },
5006
+ events: categoriesFromListeners(widget.listeners),
5007
+ chat: {
5008
+ useViewerAvatars: true
5009
+ },
5010
+ display: {
5011
+ showWireframes: !!v.showWireframes,
5012
+ showEventMessages: !!v.textEnabled,
5013
+ messageDuration: duration
5014
+ },
5015
+ sprites,
5016
+ // Phase 2 defaults for goal/break — disabled by import. Streamer
5017
+ // can enable in Settings; SE has no equivalent so nothing to lift.
5018
+ goal: {
5019
+ active: false,
5020
+ currency: "tips",
5021
+ target: 100,
5022
+ current: 0,
5023
+ readoutTemplate: "{{current}} / {{target}}",
5024
+ textColor: "#ffffff",
5025
+ hitAt: null
5026
+ },
5027
+ break: { enabled: false, command: "!breakjar", rebuildDelay: 5e3 },
5028
+ // Source-side knobs without a Lumia equivalent — preserved under
5029
+ // the generic `importMeta` envelope for future phases (per-cup
5030
+ // polygons + enter/movement physics tweaks). The per-event
5031
+ // sprite sets were already lifted into native `sprites` above.
5032
+ importMeta: buildImportMeta(widget, {
5033
+ enterFrom: v.enterFrom ?? null,
5034
+ preventMovement: !!v.preventMovement,
5035
+ fullscreen: !!v.fullscreen,
5036
+ cups: v.cups ?? null
5037
+ })
4964
5038
  },
4965
- sprites,
4966
- // Phase 2 defaults for goal/break — disabled by import. Streamer
4967
- // can enable in Settings; SE has no equivalent so nothing to lift.
4968
- goal: { active: false, currency: "tips", target: 100, current: 0, readoutTemplate: "{{current}} / {{target}}", textColor: "#ffffff", hitAt: null },
4969
- break: { enabled: false, command: "!breakjar", rebuildDelay: 5e3 },
4970
- // Source-side knobs without a Lumia equivalent — preserved under
4971
- // the generic `importMeta` envelope for future phases (per-cup
4972
- // polygons + enter/movement physics tweaks). The per-event
4973
- // sprite sets were already lifted into native `sprites` above.
4974
- importMeta: buildImportMeta(widget, {
4975
- enterFrom: v.enterFrom ?? null,
4976
- preventMovement: !!v.preventMovement,
4977
- fullscreen: !!v.fullscreen,
4978
- cups: v.cups ?? null
4979
- })
5039
+ css: {
5040
+ background: "transparent"
5041
+ }
4980
5042
  },
4981
- css: {
4982
- background: "transparent"
4983
- }
4984
- }, ctx);
5043
+ ctx
5044
+ );
4985
5045
  }
4986
5046
  function clamp01(n) {
4987
5047
  if (!Number.isFinite(n)) return 0.5;
@@ -5808,7 +5868,7 @@ function ActiveLayerPreview({ overlay, layerId, CustomEmbed }) {
5808
5868
  }
5809
5869
 
5810
5870
  // src/se-import/ui/SEImportWizard.css
5811
- styleInject('.se-import,\n.se-import * {\n box-sizing: border-box;\n}\n.se-import {\n --se-bg: #17162a;\n --se-surface: #27264a;\n --se-panel: #171b38;\n --se-panel-2: #202449;\n --se-border: rgba(116, 124, 211, 0.24);\n --se-border-strong: rgba(126, 128, 255, 0.58);\n --se-text: #f5f4ff;\n --se-muted: #bab8d2;\n --se-primary: #ff4076;\n --se-purple: #393853;\n --se-green: #06c96f;\n --se-warn: #f7a42b;\n width: 100%;\n height: 100%;\n min-width: min(680px, 100%);\n color: var(--se-text);\n font-family: inherit;\n display: flex;\n flex-direction: column;\n min-height: 0;\n}\n.se-import__shell {\n border-radius: 0;\n padding: 28px 48px 24px;\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n}\n.se-import__header {\n flex: 0 0 auto;\n}\nfooter.se-import-actions {\n flex: 0 0 auto;\n}\n.se-import__header {\n display: grid;\n justify-items: center;\n gap: 42px;\n}\n.se-import__title {\n display: inline-flex;\n align-items: center;\n gap: 10px;\n font-size: 20px;\n font-weight: 500;\n}\n.se-import-stepper {\n display: grid;\n width: min(760px, 100%);\n grid-template-columns: repeat(auto-fit, minmax(88px, 1fr));\n}\n.se-import-step {\n position: relative;\n display: grid;\n justify-items: center;\n gap: 12px;\n min-width: 0;\n color: rgba(255, 255, 255, 0.72);\n}\n.se-import-step__label {\n color: var(--se-text);\n font-size: 18px;\n line-height: 1.1;\n}\n.se-import-step__line {\n position: absolute;\n top: 42px;\n left: 50%;\n width: 100%;\n height: 2px;\n background: rgba(255, 255, 255, 0.16);\n}\n.se-import-step:last-child .se-import-step__line {\n display: none;\n}\n.se-import-step__dot {\n z-index: 1;\n display: grid;\n width: 22px;\n height: 22px;\n place-items: center;\n border-radius: 50%;\n background: #47485e;\n color: #fff;\n font-size: 13px;\n font-weight: 700;\n line-height: 1;\n}\n.se-import-step--active .se-import-step__dot {\n background: var(--se-primary);\n}\n.se-import-step--done .se-import-step__dot {\n background: var(--se-green);\n}\n.se-import-step--done .se-import-step__line {\n background: var(--se-green);\n}\n.se-import-step--done:has(+ .se-import-step--active) .se-import-step__line {\n background:\n linear-gradient(\n 90deg,\n var(--se-green),\n var(--se-primary));\n}\n.se-import__content {\n display: grid;\n place-items: center;\n padding: 64px 0 28px;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n}\n@media (max-height: 760px) {\n .se-import__shell {\n padding: 18px 32px 16px;\n }\n .se-import__content {\n padding: 32px 0 16px;\n }\n}\n.se-import-panel {\n width: min(100%, 1080px);\n padding: 28px;\n}\n.se-import-panel--narrow {\n width: min(100%, 1140px);\n}\n.se-import-panel--medium {\n width: min(100%, 880px);\n}\n.se-import-panel--wide {\n width: min(100%, 1000px);\n}\n.se-import-panel--confirm {\n width: min(100%, 800px);\n}\n.se-import-panel h2,\n.se-import-panel h3,\n.se-import-panel p {\n margin: 0;\n}\n.se-import-panel h2 {\n font-size: 26px;\n font-weight: 700;\n line-height: 1.15;\n}\n.se-import-panel > p {\n margin-top: 14px;\n color: var(--se-muted);\n font-size: 16px;\n line-height: 1.45;\n}\n.se-import-field {\n margin-top: 34px;\n}\n.se-import-field .mui-ls-input {\n --ls-control-height: 66px;\n}\n.se-import-field .MuiInputLabel-root {\n color: var(--se-text);\n font-weight: 700;\n}\n.se-import-field .MuiInputLabel-root.Mui-focused {\n color: #dfe1ff;\n}\n.se-import-field .MuiInputBase-root {\n font-size: 18px;\n}\n.se-import-token-loading {\n display: inline-flex;\n align-items: center;\n gap: 10px;\n margin-top: 14px;\n color: var(--se-muted);\n font-size: 13px;\n font-weight: 700;\n}\n.se-import-spinner {\n width: 16px;\n height: 16px;\n border: 2px solid rgba(255, 255, 255, 0.2);\n border-top-color: var(--se-primary);\n border-radius: 50%;\n animation: se-import-spin 800ms linear infinite;\n}\n@keyframes se-import-spin {\n to {\n transform: rotate(360deg);\n }\n}\n.se-import-help {\n display: flex;\n gap: 18px;\n margin-top: 30px;\n border: 1px solid var(--se-purple);\n border-radius: 12px;\n padding: 24px;\n color: var(--white2);\n}\n.se-import-help__icon {\n display: grid;\n width: 30px;\n height: 30px;\n flex: 0 0 auto;\n place-items: center;\n border: 1px solid var(--se-purple);\n border-radius: 50%;\n color: var(--white2);\n font-weight: 800;\n}\n.se-import-help__title {\n color: var(--se-text);\n font-size: 18px;\n font-weight: 700;\n}\n.se-import-help__image {\n display: block;\n width: min(100%, 560px);\n height: auto;\n margin-top: 16px;\n border: 1px solid var(--se-border);\n border-radius: 8px;\n}\n.se-import-help ol {\n margin: 16px 0 0;\n padding-left: 18px;\n font-size: 15px;\n line-height: 1.7;\n}\n.se-import-help a {\n color: var(--primary);\n font-weight: 700;\n}\n.se-import-help--info {\n align-items: center;\n}\n.se-import-section-title {\n display: flex;\n gap: 1rem;\n margin-bottom: 1.5rem;\n}\n.se-import-section-title__num {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 46px;\n height: 46px;\n border: 1px solid var(--se-purple);\n border-radius: 50%;\n font-size: 1.5rem;\n font-weight: 800;\n}\n.se-import-section-title__content {\n display: flex;\n flex-direction: column;\n justify-content: center;\n}\n.se-import-section-title h3 {\n font-size: 18px;\n font-weight: 800;\n}\n.se-import-section-title p {\n margin-top: 4px;\n color: var(--se-muted);\n font-size: 14px;\n}\n.se-import-grid {\n display: grid;\n gap: 8px;\n margin-top: 10px;\n}\n.se-import-grid--four {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n}\n.se-import-grid--stats {\n grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));\n}\n.se-import-grid--two {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n}\n.se-import-stat {\n min-height: 116px;\n border: 1px solid rgba(255, 255, 255, 0.06);\n border-radius: 8px;\n background:\n linear-gradient(\n 135deg,\n rgba(42, 47, 92, 0.9),\n rgba(33, 38, 78, 0.9));\n padding: 24px 22px;\n}\n.se-import-stat--success {\n background:\n linear-gradient(\n 135deg,\n rgba(12, 91, 86, 0.72),\n rgba(32, 65, 76, 0.8));\n border-color: rgba(19, 201, 126, 0.25);\n}\n.se-import-stat--info {\n border-color: rgba(116, 104, 255, 0.8);\n box-shadow: inset 3px 0 0 #6e76ff;\n}\n.se-import-stat--warn,\n.se-import-stat--muted {\n box-shadow: inset 3px 0 0 var(--se-warn);\n}\n.se-import-stat__label {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--se-muted);\n font-size: 12px;\n font-weight: 800;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n}\n.se-import-stat__icon {\n width: 20px;\n height: 20px;\n object-fit: contain;\n}\n.se-import-stat__value {\n margin-top: 12px;\n color: #fff;\n font-size: 30px;\n font-weight: 800;\n line-height: 1;\n}\n.se-import-stat__description {\n margin-top: 10px;\n color: var(--se-muted);\n font-size: 13px;\n line-height: 1.35;\n}\n.se-import-stat__sub {\n margin-top: 8px;\n color: var(--se-muted);\n font-size: 13px;\n}\n.se-import-mode-card__icon {\n display: grid;\n width: 46px;\n height: 46px;\n place-items: center;\n border-radius: 12px;\n background: rgba(255, 255, 255, 0.08);\n}\n.se-import-mode-card__icon img {\n width: 30px;\n height: 30px;\n object-fit: contain;\n}\n.se-import-mode-card__features {\n display: grid;\n gap: 6px;\n margin: 0;\n padding-left: 18px;\n}\n.se-import-overlay-progress {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n align-items: center;\n max-width: min(760px, 100%);\n width: 100%;\n gap: 14px;\n padding: 4px 2px 0;\n}\n.se-import-overlay-progress__copy {\n min-width: 0;\n color: var(--se-text);\n font-size: 13px;\n font-weight: 700;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.se-import-overlay-progress__strip,\n.se-import-overlay-progress__stack {\n display: flex;\n align-items: center;\n}\n.se-import-overlay-progress__strip {\n gap: 7px;\n}\n.se-import-overlay-progress__stack {\n margin-right: 5px;\n}\n.se-import-overlay-progress__stack--queued {\n margin-right: 0;\n margin-left: 5px;\n}\n.se-import-overlay-progress__stack .se-import-overlay-progress__item {\n margin-left: -16px;\n}\n.se-import-overlay-progress__stack .se-import-overlay-progress__item:first-child {\n margin-left: 0;\n}\n.se-import-overlay-progress__item {\n position: relative;\n width: 50px;\n height: 36px;\n flex: 0 0 auto;\n overflow: hidden;\n border: 1px solid var(--se-border);\n border-radius: 6px;\n background: var(--se-panel-2);\n opacity: 0.72;\n}\n.se-import-overlay-progress__item img,\n.se-import-overlay-progress__placeholder {\n display: block;\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n.se-import-overlay-progress__item--current {\n border-color: var(--se-primary);\n box-shadow: 0 0 0 1px var(--se-primary);\n opacity: 1;\n z-index: 3;\n}\n.se-import-overlay-progress__item--done {\n opacity: 1;\n}\n.se-import-overlay-progress__item--queued {\n opacity: 0.64;\n}\n.se-import-overlay-progress__more {\n display: grid;\n min-width: 28px;\n height: 24px;\n place-items: center;\n border-radius: 999px;\n background: rgba(255, 255, 255, 0.08);\n color: var(--se-muted);\n font-size: 12px;\n font-weight: 800;\n}\n.se-import-overlay-progress__check {\n position: absolute;\n right: 3px;\n bottom: 3px;\n display: grid;\n width: 16px;\n height: 16px;\n place-items: center;\n border-radius: 50%;\n background: var(--se-green);\n color: #fff;\n font-size: 11px;\n font-weight: 900;\n line-height: 1;\n}\n.se-import-option {\n display: grid;\n grid-template-columns: auto minmax(0, 1fr) auto auto;\n align-items: center;\n gap: 18px;\n border: 1px solid var(--se-purple);\n border-radius: 12px;\n background:\n linear-gradient(\n 135deg,\n rgba(35, 39, 81, 0.95),\n rgba(31, 35, 73, 0.95));\n box-shadow: inset 3px 0 0 var(--se-primary);\n cursor: pointer;\n padding: 22px;\n margin-bottom: 1rem;\n}\n.se-import-option--disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n.se-import-option__icon {\n display: grid;\n width: 40px;\n height: 40px;\n place-items: center;\n border-radius: 12px;\n background: rgba(255, 64, 118, 0.12);\n}\n.se-import-option__icon img {\n width: 24px;\n height: 24px;\n object-fit: contain;\n}\n.se-import-option__body {\n display: grid;\n gap: 8px;\n min-width: 0;\n}\n.se-import-option__title {\n font-size: 17px;\n font-weight: 800;\n}\n.se-import-option__copy {\n color: var(--se-muted);\n font-size: 14px;\n line-height: 1.45;\n}\n.se-import-option__count {\n color: #fff;\n font-size: 16px;\n}\n.se-import-option input {\n position: absolute;\n opacity: 0;\n pointer-events: none;\n}\n.se-import-toggle {\n position: relative;\n width: 48px;\n height: 28px;\n border-radius: 999px;\n box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.14);\n}\n.se-import-toggle::after {\n position: absolute;\n top: 4px;\n left: 4px;\n width: 20px;\n height: 20px;\n border-radius: 50%;\n background: #fff;\n content: "";\n transition: transform 160ms ease;\n}\n.se-import-option input:checked + .se-import-toggle {\n background: var(--primary);\n}\n.se-import-option input:checked + .se-import-toggle::after {\n transform: translateX(20px);\n}\n.se-import-advanced {\n margin-top: 26px;\n border-radius: 10px;\n background: rgba(32, 36, 73, 0.7);\n padding: 24px;\n}\n.se-import-advanced summary {\n cursor: pointer;\n font-size: 18px;\n font-weight: 700;\n}\n.se-import-advanced p {\n margin-top: 10px;\n color: var(--se-muted);\n}\n.se-import-transfer {\n position: relative;\n display: grid;\n width: min(720px, 100%);\n min-height: 190px;\n grid-template-columns: 180px minmax(260px, 1fr) 180px;\n align-items: center;\n gap: 28px;\n margin: 0 auto 60px;\n}\n.se-import-transfer__source {\n position: relative;\n display: grid;\n width: 160px;\n height: 160px;\n place-items: center;\n animation: se-import-source-bounce 1.8s ease-in-out infinite;\n}\n.se-import-transfer--complete .se-import-transfer__source {\n animation: none;\n}\n.se-import-transfer__source::before {\n top: -13px;\n left: -13px;\n box-shadow: 155px 0 0 var(--se-primary);\n}\n.se-import-transfer__source::after {\n bottom: -13px;\n left: -13px;\n box-shadow: 155px 0 0 var(--se-primary);\n}\n.se-import-transfer__source img {\n width: 192px;\n height: 192px;\n object-fit: contain;\n}\n.se-import-transfer__source--lumia {\n animation-delay: 0.22s;\n}\n.se-import-transfer__files {\n position: relative;\n height: 130px;\n}\n.se-import-transfer__file {\n position: absolute;\n top: 50%;\n left: -18px;\n width: 56px;\n height: 66px;\n object-fit: contain;\n transform: translateY(-50%);\n filter: drop-shadow(0 10px 12px rgba(8, 9, 25, 0.25));\n animation: se-import-file-fly 2.4s cubic-bezier(0.35, 0, 0.25, 1) infinite;\n}\n.se-import-transfer--complete .se-import-transfer__file {\n display: none;\n}\n.se-import-transfer__done {\n position: absolute;\n right: -8px;\n bottom: -8px;\n display: grid;\n width: 34px;\n height: 34px;\n place-items: center;\n border-radius: 50%;\n background: var(--se-green);\n color: #fff;\n font-size: 20px;\n font-weight: 900;\n box-shadow: 0 10px 20px rgba(6, 201, 111, 0.26);\n}\n.se-import-transfer__file--one {\n animation-delay: 0s;\n}\n.se-import-transfer__file--two {\n animation-delay: 0.38s;\n}\n.se-import-transfer__file--three {\n animation-delay: 0.76s;\n}\n.se-import-transfer__file--four {\n animation-delay: 1.14s;\n}\n@keyframes se-import-source-bounce {\n 0%, 100% {\n transform: translateY(0) scale(1);\n }\n 50% {\n transform: translateY(-8px) scale(1.025);\n }\n}\n@keyframes se-import-file-fly {\n 0% {\n opacity: 0;\n transform: translate(-10px, -50%) scale(0.82) rotate(-8deg);\n }\n 12% {\n opacity: 1;\n }\n 45% {\n transform: translate(145px, calc(-50% - 18px)) scale(1.08) rotate(5deg);\n }\n 82% {\n opacity: 1;\n }\n 100% {\n opacity: 0;\n transform: translate(330px, -50%) scale(0.9) rotate(10deg);\n }\n}\n.se-import-mirror-head {\n display: grid;\n grid-template-columns: minmax(220px, auto) minmax(180px, 1fr) auto;\n align-items: center;\n gap: 14px;\n}\n.se-import-mirror-head p {\n margin-top: 14px;\n color: var(--se-muted);\n font-size: 16px;\n}\n.se-import-mirror-head span {\n flex: 0 0 auto;\n color: var(--se-muted);\n font-weight: 700;\n}\n.se-import-mirror-head strong {\n color: var(--se-text);\n font-size: 14px;\n}\n.se-import-progress {\n width: 100%;\n height: 14px;\n margin-top: 0;\n overflow: hidden;\n border: 0;\n border-radius: 999px;\n background: rgba(255, 64, 118, 0.1);\n}\n.se-import-progress::-webkit-progress-bar {\n background: rgba(255, 64, 118, 0.1);\n}\n.se-import-progress::-webkit-progress-value {\n border-radius: 999px;\n background:\n linear-gradient(\n 90deg,\n #ff4076,\n #e7295f);\n}\n.se-import-progress::-moz-progress-bar {\n border-radius: 999px;\n background:\n linear-gradient(\n 90deg,\n #ff4076,\n #e7295f);\n}\n.se-import-asset-list {\n max-height: 360px;\n margin-top: 22px;\n overflow-y: auto;\n border-top: 1px solid rgba(255, 255, 255, 0.08);\n}\n.se-import-asset-row {\n display: grid;\n grid-template-columns: 32px minmax(0, 1fr) auto auto;\n align-items: center;\n gap: 14px;\n min-height: 42px;\n border-bottom: 1px solid rgba(255, 255, 255, 0.08);\n color: var(--se-muted);\n font-size: 13px;\n}\n.se-import-asset-row__icon {\n width: 24px;\n height: 28px;\n justify-self: end;\n object-fit: contain;\n}\n.se-import-asset-row__url {\n overflow: hidden;\n font-family:\n ui-monospace,\n SFMono-Regular,\n Menlo,\n Monaco,\n Consolas,\n monospace;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.se-import-asset-row__state {\n color: #9b8cff;\n font-weight: 800;\n}\n.se-import-asset-row--done .se-import-asset-row__state,\n.se-import-asset-row--reused .se-import-asset-row__state {\n color: var(--se-green);\n}\n.se-import-asset-row--failed .se-import-asset-row__state,\n.se-import-asset-row__error {\n color: #ff8080;\n}\n.se-import-link-button {\n border: 0;\n background: transparent;\n color: #ff9ab6;\n cursor: pointer;\n font: inherit;\n font-weight: 800;\n}\n.se-import-overview {\n margin-top: 28px;\n border: 1px solid var(--se-border);\n border-radius: 12px;\n background: rgba(26, 30, 61, 0.62);\n padding: 28px;\n}\n.se-import-overview h3 {\n margin-bottom: 18px;\n font-size: 18px;\n font-weight: 800;\n}\n.se-import-row {\n display: grid;\n grid-template-columns: 190px minmax(0, 1fr) auto;\n gap: 18px;\n align-items: center;\n min-height: 48px;\n border-top: 1px solid rgba(255, 255, 255, 0.08);\n color: var(--se-muted);\n}\n.se-import-row strong {\n min-width: 0;\n overflow: hidden;\n color: var(--se-text);\n font-weight: 600;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.se-import-row em {\n color: var(--se-muted);\n font-style: normal;\n}\n.se-import-review-card {\n display: flex;\n justify-content: space-between;\n gap: 18px;\n border: 1px solid var(--se-border);\n border-radius: 10px;\n background: rgba(30, 34, 71, 0.8);\n padding: 20px;\n}\n.se-import-review-card__type {\n font-family:\n ui-monospace,\n SFMono-Regular,\n Menlo,\n Monaco,\n Consolas,\n monospace;\n font-weight: 800;\n}\n.se-import-review-card p {\n margin-top: 8px;\n color: var(--se-muted);\n line-height: 1.45;\n}\n.se-import-review-card__status {\n flex: 0 0 auto;\n color: #facc15;\n font-size: 11px;\n font-weight: 800;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n}\n.se-import-review-bulk,\n.se-import-actions--inline {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: flex-end;\n gap: 10px;\n margin-top: 16px;\n}\n.se-import-muted {\n margin-top: 16px;\n color: var(--se-muted);\n font-size: 13px;\n}\n.se-import-generated {\n display: grid;\n gap: 12px;\n margin-top: 18px;\n}\n.se-import-generated__title {\n font-weight: 800;\n}\n.se-import-preview {\n width: 100%;\n height: 260px;\n border: 1px solid var(--se-border);\n border-radius: 8px;\n background: repeating-conic-gradient(#1a1c20 0% 25%, #1d1f24 0% 50%) 50% / 20px 20px;\n}\n.se-import-code {\n margin-top: 16px;\n}\n.se-import-code summary {\n cursor: pointer;\n color: var(--se-muted);\n font-size: 13px;\n}\n.se-import-code pre {\n max-height: 220px;\n margin: 10px 0 0;\n overflow: auto;\n border-radius: 8px;\n background: rgba(0, 0, 0, 0.28);\n padding: 12px;\n color: #d8dcff;\n font-size: 12px;\n}\n.se-import-error {\n margin-top: 18px;\n border: 1px solid rgba(239, 68, 68, 0.45);\n border-radius: 8px;\n background: rgba(220, 38, 38, 0.12);\n padding: 12px;\n color: #fca5a5;\n}\n.se-import-error__title {\n font-weight: 800;\n}\n.se-import-error__hint {\n margin-top: 6px;\n white-space: pre-wrap;\n}\n.se-import-actions {\n display: flex;\n justify-content: flex-end;\n gap: 12px;\n margin-top: 8px;\n}\nfooter.se-import-actions:not(.se-import-actions--inline) {\n margin: 0;\n padding: 0;\n}\n@media (max-height: 760px) {\n footer.se-import-actions:not(.se-import-actions--inline) {\n margin: 0;\n padding: 0;\n }\n}\n@media (max-width: 900px) {\n .se-import__shell {\n min-height: 0;\n padding: 24px 18px;\n }\n .se-import__content {\n min-height: 0;\n padding-top: 32px;\n }\n .se-import-stepper {\n grid-template-columns: repeat(auto-fit, minmax(70px, 1fr));\n }\n .se-import-step__label {\n font-size: 13px;\n }\n .se-import-grid--four,\n .se-import-grid--two,\n .se-import-transfer {\n grid-template-columns: 1fr;\n }\n .se-import-transfer {\n justify-items: center;\n }\n .se-import-transfer__files {\n width: min(360px, 100%);\n }\n .se-import-option,\n .se-import-row,\n .se-import-asset-row {\n grid-template-columns: 1fr;\n }\n .se-import-mirror-head,\n .se-import-review-card {\n align-items: flex-start;\n flex-direction: column;\n }\n}\n');
5871
+ styleInject('.se-import,\n.se-import * {\n box-sizing: border-box;\n}\n.se-import {\n --se-bg: #17162a;\n --se-surface: #27264a;\n --se-panel: #171b38;\n --se-panel-2: #202449;\n --se-border: rgba(116, 124, 211, 0.24);\n --se-border-strong: rgba(126, 128, 255, 0.58);\n --se-text: #f5f4ff;\n --se-muted: #bab8d2;\n --se-primary: #ff4076;\n --se-purple: #393853;\n --se-green: #06c96f;\n --se-warn: #f7a42b;\n width: 100%;\n height: 100%;\n min-width: min(680px, 100%);\n color: var(--se-text);\n font-family: inherit;\n display: flex;\n flex-direction: column;\n min-height: 0;\n}\n.se-import__shell {\n border-radius: 0;\n padding: 28px 48px 24px;\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n}\n.se-import__header {\n flex: 0 0 auto;\n}\nfooter.se-import-actions {\n flex: 0 0 auto;\n}\n.se-import__header {\n display: grid;\n justify-items: center;\n gap: 42px;\n}\n.se-import__title {\n display: inline-flex;\n align-items: center;\n gap: 10px;\n font-size: 20px;\n font-weight: 500;\n}\n.se-import-stepper {\n display: grid;\n width: min(760px, 100%);\n grid-template-columns: repeat(auto-fit, minmax(88px, 1fr));\n}\n.se-import-step {\n position: relative;\n display: grid;\n justify-items: center;\n gap: 12px;\n min-width: 0;\n color: rgba(255, 255, 255, 0.72);\n}\n.se-import-step__label {\n color: var(--se-text);\n font-size: 18px;\n line-height: 1.1;\n}\n.se-import-step__line {\n position: absolute;\n top: 42px;\n left: 50%;\n width: 100%;\n height: 2px;\n background: rgba(255, 255, 255, 0.16);\n}\n.se-import-step:last-child .se-import-step__line {\n display: none;\n}\n.se-import-step__dot {\n z-index: 1;\n display: grid;\n width: 22px;\n height: 22px;\n place-items: center;\n border-radius: 50%;\n background: #47485e;\n color: #fff;\n font-size: 13px;\n font-weight: 700;\n line-height: 1;\n}\n.se-import-step--active .se-import-step__dot {\n background: var(--se-primary);\n}\n.se-import-step--done .se-import-step__dot {\n background: var(--se-green);\n}\n.se-import-step--done .se-import-step__line {\n background: var(--se-green);\n}\n.se-import-step--done:has(+ .se-import-step--active) .se-import-step__line {\n background:\n linear-gradient(\n 90deg,\n var(--se-green),\n var(--se-primary));\n}\n.se-import__content {\n display: grid;\n place-items: center;\n padding: 64px 0 28px;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n}\n@media (max-height: 760px) {\n .se-import__shell {\n padding: 18px 32px 16px;\n }\n .se-import__content {\n padding: 32px 0 16px;\n }\n}\n.se-import-panel {\n width: min(100%, 1080px);\n padding: 28px;\n}\n.se-import-panel--narrow {\n width: min(100%, 1140px);\n}\n.se-import-panel--medium {\n width: min(100%, 880px);\n}\n.se-import-panel--wide {\n width: min(100%, 1000px);\n}\n.se-import-panel--confirm {\n width: min(100%, 800px);\n}\n.se-import-panel h2,\n.se-import-panel h3,\n.se-import-panel p {\n margin: 0;\n}\n.se-import-panel h2 {\n font-size: 26px;\n font-weight: 700;\n line-height: 1.15;\n}\n.se-import-panel > p {\n margin-top: 14px;\n color: var(--se-muted);\n font-size: 16px;\n line-height: 1.45;\n}\n.se-import-field {\n margin-top: 34px;\n}\n.se-import-field .mui-ls-input {\n --ls-control-height: 66px;\n}\n.se-import-field .MuiInputLabel-root {\n color: var(--se-text);\n font-weight: 700;\n}\n.se-import-field .MuiInputLabel-root.Mui-focused {\n color: #dfe1ff;\n}\n.se-import-field .MuiInputBase-root {\n font-size: 18px;\n}\n.se-import-token-loading {\n display: inline-flex;\n align-items: center;\n gap: 10px;\n margin-top: 14px;\n color: var(--se-muted);\n font-size: 13px;\n font-weight: 700;\n}\n.se-import-spinner {\n width: 16px;\n height: 16px;\n border: 2px solid rgba(255, 255, 255, 0.2);\n border-top-color: var(--se-primary);\n border-radius: 50%;\n animation: se-import-spin 800ms linear infinite;\n}\n@keyframes se-import-spin {\n to {\n transform: rotate(360deg);\n }\n}\n.se-import-help {\n display: flex;\n gap: 18px;\n margin-top: 30px;\n border: 1px solid var(--se-purple);\n border-radius: 12px;\n padding: 24px;\n color: var(--white2);\n}\n.se-import-help__icon {\n display: grid;\n width: 30px;\n height: 30px;\n flex: 0 0 auto;\n place-items: center;\n border: 1px solid var(--se-purple);\n border-radius: 50%;\n color: var(--white2);\n font-weight: 800;\n}\n.se-import-help__title {\n color: var(--se-text);\n font-size: 18px;\n font-weight: 700;\n}\n.se-import-help__image {\n display: block;\n width: min(100%, 560px);\n height: auto;\n margin-top: 16px;\n border: 1px solid var(--se-border);\n border-radius: 8px;\n}\n.se-import-help ol {\n margin: 16px 0 0;\n padding-left: 18px;\n font-size: 15px;\n line-height: 1.7;\n}\n.se-import-help a {\n color: var(--primary);\n font-weight: 700;\n}\n.se-import-help--info {\n align-items: center;\n}\n.se-import-section-title {\n display: flex;\n gap: 1rem;\n margin-bottom: 1.5rem;\n}\n.se-import-section-title__num {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 46px;\n height: 46px;\n border: 1px solid var(--se-purple);\n border-radius: 50%;\n font-size: 1.5rem;\n font-weight: 800;\n}\n.se-import-section-title__content {\n display: flex;\n flex-direction: column;\n justify-content: center;\n}\n.se-import-section-title h3 {\n font-size: 18px;\n font-weight: 800;\n}\n.se-import-section-title p {\n margin-top: 4px;\n color: var(--se-muted);\n font-size: 14px;\n}\n.se-import-grid {\n display: grid;\n gap: 8px;\n margin-top: 10px;\n}\n.se-import-grid--four {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n}\n.se-import-grid--stats {\n grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));\n}\n.se-import-grid--two {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n}\n.se-import-stat {\n min-height: 116px;\n border: 1px solid rgba(255, 255, 255, 0.06);\n border-radius: 8px;\n background:\n linear-gradient(\n 135deg,\n rgba(42, 47, 92, 0.9),\n rgba(33, 38, 78, 0.9));\n padding: 24px 22px;\n}\n.se-import-stat--success {\n background:\n linear-gradient(\n 135deg,\n rgba(12, 91, 86, 0.72),\n rgba(32, 65, 76, 0.8));\n border-color: rgba(19, 201, 126, 0.25);\n}\n.se-import-stat--info {\n border-color: rgba(116, 104, 255, 0.8);\n box-shadow: inset 3px 0 0 #6e76ff;\n}\n.se-import-stat--warn,\n.se-import-stat--muted {\n box-shadow: inset 3px 0 0 var(--se-warn);\n}\n.se-import-stat__label {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--se-muted);\n font-size: 12px;\n font-weight: 800;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n}\n.se-import-stat__icon {\n width: 20px;\n height: 20px;\n object-fit: contain;\n}\n.se-import-stat__value {\n margin-top: 12px;\n color: #fff;\n font-size: 30px;\n font-weight: 800;\n line-height: 1;\n}\n.se-import-stat__description {\n margin-top: 10px;\n color: var(--se-muted);\n font-size: 13px;\n line-height: 1.35;\n}\n.se-import-stat__sub {\n margin-top: 8px;\n color: var(--se-muted);\n font-size: 13px;\n}\n.se-import-mode-card__icon {\n display: grid;\n width: 46px;\n height: 46px;\n place-items: center;\n border-radius: 12px;\n background: rgba(255, 255, 255, 0.08);\n}\n.se-import-mode-card__icon img {\n width: 30px;\n height: 30px;\n object-fit: contain;\n}\n.se-import-mode-card__features {\n display: grid;\n gap: 6px;\n margin: 0;\n padding-left: 18px;\n}\n.se-import-overlay-progress {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n align-items: center;\n max-width: min(760px, 100%);\n width: 100%;\n gap: 14px;\n padding: 4px 2px 0;\n}\n.se-import-overlay-progress__copy {\n min-width: 0;\n color: var(--se-text);\n font-size: 13px;\n font-weight: 700;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.se-import-overlay-progress__strip,\n.se-import-overlay-progress__stack {\n display: flex;\n align-items: center;\n}\n.se-import-overlay-progress__strip {\n gap: 7px;\n}\n.se-import-overlay-progress__stack {\n margin-right: 5px;\n}\n.se-import-overlay-progress__stack--queued {\n margin-right: 0;\n margin-left: 5px;\n}\n.se-import-overlay-progress__stack .se-import-overlay-progress__item {\n margin-left: -16px;\n}\n.se-import-overlay-progress__stack .se-import-overlay-progress__item:first-child {\n margin-left: 0;\n}\n.se-import-overlay-progress__item {\n position: relative;\n width: 50px;\n height: 36px;\n flex: 0 0 auto;\n overflow: hidden;\n border: 1px solid var(--se-border);\n border-radius: 6px;\n background: var(--se-panel-2);\n opacity: 0.72;\n}\n.se-import-overlay-progress__item img,\n.se-import-overlay-progress__placeholder {\n display: block;\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n.se-import-overlay-progress__item--current {\n border-color: var(--se-primary);\n box-shadow: 0 0 0 1px var(--se-primary);\n opacity: 1;\n z-index: 3;\n}\n.se-import-overlay-progress__item--done {\n opacity: 1;\n}\n.se-import-overlay-progress__item--queued {\n opacity: 0.64;\n}\n.se-import-overlay-progress__more {\n display: grid;\n min-width: 28px;\n height: 24px;\n place-items: center;\n border-radius: 999px;\n background: rgba(255, 255, 255, 0.08);\n color: var(--se-muted);\n font-size: 12px;\n font-weight: 800;\n}\n.se-import-overlay-progress__check {\n position: absolute;\n right: 3px;\n bottom: 3px;\n display: grid;\n width: 16px;\n height: 16px;\n place-items: center;\n border-radius: 50%;\n background: var(--se-green);\n color: #fff;\n font-size: 11px;\n font-weight: 900;\n line-height: 1;\n}\n.se-import-option {\n display: grid;\n grid-template-columns: auto minmax(0, 1fr) auto auto;\n align-items: center;\n gap: 18px;\n border: 1px solid var(--se-purple);\n border-radius: 12px;\n background:\n linear-gradient(\n 135deg,\n rgba(35, 39, 81, 0.95),\n rgba(31, 35, 73, 0.95));\n box-shadow: inset 3px 0 0 var(--se-primary);\n cursor: pointer;\n padding: 22px;\n margin-bottom: 1rem;\n}\n.se-import-option--disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n.se-import-option__icon {\n display: grid;\n width: 40px;\n height: 40px;\n place-items: center;\n border-radius: 12px;\n background: rgba(255, 64, 118, 0.12);\n}\n.se-import-option__icon img {\n width: 24px;\n height: 24px;\n object-fit: contain;\n}\n.se-import-option__body {\n display: grid;\n gap: 8px;\n min-width: 0;\n}\n.se-import-option__title {\n font-size: 17px;\n font-weight: 800;\n}\n.se-import-option__copy {\n color: var(--se-muted);\n font-size: 14px;\n line-height: 1.45;\n}\n.se-import-option__count {\n color: #fff;\n font-size: 16px;\n}\n.se-import-option input {\n position: absolute;\n opacity: 0;\n pointer-events: none;\n}\n.se-import-toggle {\n position: relative;\n width: 48px;\n height: 28px;\n border-radius: 999px;\n box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.14);\n}\n.se-import-toggle::after {\n position: absolute;\n top: 4px;\n left: 4px;\n width: 20px;\n height: 20px;\n border-radius: 50%;\n background: #fff;\n content: "";\n transition: transform 160ms ease;\n}\n.se-import-option input:checked + .se-import-toggle {\n background: var(--primary);\n}\n.se-import-option input:checked + .se-import-toggle::after {\n transform: translateX(20px);\n}\n.se-import-advanced {\n margin-top: 26px;\n border-radius: 10px;\n background: rgba(32, 36, 73, 0.7);\n padding: 24px;\n}\n.se-import-advanced summary {\n cursor: pointer;\n font-size: 18px;\n font-weight: 700;\n}\n.se-import-advanced p {\n margin-top: 10px;\n color: var(--se-muted);\n}\n.se-import-transfer {\n position: relative;\n display: grid;\n width: min(720px, 100%);\n min-height: 190px;\n grid-template-columns: 180px minmax(260px, 1fr) 180px;\n align-items: center;\n gap: 28px;\n margin: 0 auto 60px;\n}\n.se-import-transfer__source {\n position: relative;\n display: grid;\n width: 160px;\n height: 160px;\n place-items: center;\n animation: se-import-source-bounce 1.8s ease-in-out infinite;\n}\n.se-import-transfer--complete .se-import-transfer__source {\n animation: none;\n}\n.se-import-transfer__source::before {\n top: -13px;\n left: -13px;\n box-shadow: 155px 0 0 var(--se-primary);\n}\n.se-import-transfer__source::after {\n bottom: -13px;\n left: -13px;\n box-shadow: 155px 0 0 var(--se-primary);\n}\n.se-import-transfer__source img {\n width: 192px;\n height: 192px;\n object-fit: contain;\n}\n.se-import-transfer__source--lumia {\n animation-delay: 0.22s;\n}\n.se-import-transfer__files {\n position: relative;\n height: 130px;\n}\n.se-import-transfer__file {\n position: absolute;\n top: 50%;\n left: -18px;\n width: 56px;\n height: 66px;\n object-fit: contain;\n transform: translateY(-50%);\n filter: drop-shadow(0 10px 12px rgba(8, 9, 25, 0.25));\n animation: se-import-file-fly 2.4s cubic-bezier(0.35, 0, 0.25, 1) infinite;\n}\n.se-import-transfer--complete .se-import-transfer__file {\n display: none;\n}\n.se-import-transfer__done {\n position: absolute;\n right: -8px;\n bottom: -8px;\n display: grid;\n width: 34px;\n height: 34px;\n place-items: center;\n border-radius: 50%;\n background: var(--se-green);\n color: #fff;\n font-size: 20px;\n font-weight: 900;\n box-shadow: 0 10px 20px rgba(6, 201, 111, 0.26);\n}\n.se-import-transfer__file--one {\n animation-delay: 0s;\n}\n.se-import-transfer__file--two {\n animation-delay: 0.38s;\n}\n.se-import-transfer__file--three {\n animation-delay: 0.76s;\n}\n.se-import-transfer__file--four {\n animation-delay: 1.14s;\n}\n@keyframes se-import-source-bounce {\n 0%, 100% {\n transform: translateY(0) scale(1);\n }\n 50% {\n transform: translateY(-8px) scale(1.025);\n }\n}\n@keyframes se-import-file-fly {\n 0% {\n opacity: 0;\n transform: translate(-10px, -50%) scale(0.82) rotate(-8deg);\n }\n 12% {\n opacity: 1;\n }\n 45% {\n transform: translate(145px, calc(-50% - 18px)) scale(1.08) rotate(5deg);\n }\n 82% {\n opacity: 1;\n }\n 100% {\n opacity: 0;\n transform: translate(330px, -50%) scale(0.9) rotate(10deg);\n }\n}\n.se-import-mirror-head {\n display: grid;\n grid-template-columns: minmax(220px, auto) minmax(180px, 1fr) auto;\n align-items: center;\n gap: 14px;\n}\n.se-import-mirror-head p {\n margin-top: 14px;\n color: var(--se-muted);\n font-size: 16px;\n}\n.se-import-mirror-head span {\n flex: 0 0 auto;\n color: var(--se-muted);\n font-weight: 700;\n}\n.se-import-mirror-head strong {\n color: var(--se-text);\n font-size: 14px;\n}\n.se-import-progress {\n width: 100%;\n height: 14px;\n margin-top: 0;\n overflow: hidden;\n border: 0;\n border-radius: 999px;\n background: rgba(255, 64, 118, 0.1);\n}\n.se-import-progress::-webkit-progress-bar {\n background: rgba(255, 64, 118, 0.1);\n}\n.se-import-progress::-webkit-progress-value {\n border-radius: 999px;\n background:\n linear-gradient(\n 90deg,\n #ff4076,\n #e7295f);\n}\n.se-import-progress::-moz-progress-bar {\n border-radius: 999px;\n background:\n linear-gradient(\n 90deg,\n #ff4076,\n #e7295f);\n}\n.se-import-asset-list {\n margin-top: 22px;\n border-top: 1px solid rgba(255, 255, 255, 0.08);\n}\n.se-import-asset-row {\n display: grid;\n grid-template-columns: 32px minmax(0, 1fr) auto auto;\n align-items: center;\n gap: 14px;\n min-height: 42px;\n border-bottom: 1px solid rgba(255, 255, 255, 0.08);\n color: var(--se-muted);\n font-size: 13px;\n}\n.se-import-asset-row__icon {\n width: 24px;\n height: 28px;\n justify-self: end;\n object-fit: contain;\n}\n.se-import-asset-row__url {\n overflow: hidden;\n font-family:\n ui-monospace,\n SFMono-Regular,\n Menlo,\n Monaco,\n Consolas,\n monospace;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.se-import-asset-row__state {\n color: #9b8cff;\n font-weight: 800;\n}\n.se-import-asset-row--done .se-import-asset-row__state,\n.se-import-asset-row--reused .se-import-asset-row__state {\n color: var(--se-green);\n}\n.se-import-asset-row--failed .se-import-asset-row__state,\n.se-import-asset-row__error {\n color: #ff8080;\n}\n.se-import-link-button {\n border: 0;\n background: transparent;\n color: #ff9ab6;\n cursor: pointer;\n font: inherit;\n font-weight: 800;\n}\n.se-import-overview {\n margin-top: 28px;\n border: 1px solid var(--se-border);\n border-radius: 12px;\n background: rgba(26, 30, 61, 0.62);\n padding: 28px;\n}\n.se-import-overview h3 {\n margin-bottom: 18px;\n font-size: 18px;\n font-weight: 800;\n}\n.se-import-row {\n display: grid;\n grid-template-columns: 190px minmax(0, 1fr) auto;\n gap: 18px;\n align-items: center;\n min-height: 48px;\n border-top: 1px solid rgba(255, 255, 255, 0.08);\n color: var(--se-muted);\n}\n.se-import-row strong {\n min-width: 0;\n overflow: hidden;\n color: var(--se-text);\n font-weight: 600;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.se-import-row em {\n color: var(--se-muted);\n font-style: normal;\n}\n.se-import-review-card {\n display: flex;\n justify-content: space-between;\n gap: 18px;\n border: 1px solid var(--se-border);\n border-radius: 10px;\n background: rgba(30, 34, 71, 0.8);\n padding: 20px;\n}\n.se-import-review-card__type {\n font-family:\n ui-monospace,\n SFMono-Regular,\n Menlo,\n Monaco,\n Consolas,\n monospace;\n font-weight: 800;\n}\n.se-import-review-card p {\n margin-top: 8px;\n color: var(--se-muted);\n line-height: 1.45;\n}\n.se-import-review-card__status {\n flex: 0 0 auto;\n color: #facc15;\n font-size: 11px;\n font-weight: 800;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n}\n.se-import-review-bulk,\n.se-import-actions--inline {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: flex-end;\n gap: 10px;\n margin-top: 16px;\n}\n.se-import-muted {\n margin-top: 16px;\n color: var(--se-muted);\n font-size: 13px;\n}\n.se-import-generated {\n display: grid;\n gap: 12px;\n margin-top: 18px;\n}\n.se-import-generated__title {\n font-weight: 800;\n}\n.se-import-preview {\n width: 100%;\n height: 260px;\n border: 1px solid var(--se-border);\n border-radius: 8px;\n background: repeating-conic-gradient(#1a1c20 0% 25%, #1d1f24 0% 50%) 50% / 20px 20px;\n}\n.se-import-code {\n margin-top: 16px;\n}\n.se-import-code summary {\n cursor: pointer;\n color: var(--se-muted);\n font-size: 13px;\n}\n.se-import-code pre {\n max-height: 220px;\n margin: 10px 0 0;\n overflow: auto;\n border-radius: 8px;\n background: rgba(0, 0, 0, 0.28);\n padding: 12px;\n color: #d8dcff;\n font-size: 12px;\n}\n.se-import-error {\n margin-top: 18px;\n border: 1px solid rgba(239, 68, 68, 0.45);\n border-radius: 8px;\n background: rgba(220, 38, 38, 0.12);\n padding: 12px;\n color: #fca5a5;\n}\n.se-import-error__title {\n font-weight: 800;\n}\n.se-import-error__hint {\n margin-top: 6px;\n white-space: pre-wrap;\n}\n.se-import-actions {\n display: flex;\n justify-content: flex-end;\n gap: 12px;\n margin-top: 8px;\n}\nfooter.se-import-actions:not(.se-import-actions--inline) {\n margin: 0;\n padding: 0;\n}\n@media (max-height: 760px) {\n footer.se-import-actions:not(.se-import-actions--inline) {\n margin: 0;\n padding: 0;\n }\n}\n@media (max-width: 900px) {\n .se-import__shell {\n min-height: 0;\n padding: 24px 18px;\n }\n .se-import__content {\n min-height: 0;\n padding-top: 32px;\n }\n .se-import-stepper {\n grid-template-columns: repeat(auto-fit, minmax(70px, 1fr));\n }\n .se-import-step__label {\n font-size: 13px;\n }\n .se-import-grid--four,\n .se-import-grid--two,\n .se-import-transfer {\n grid-template-columns: 1fr;\n }\n .se-import-transfer {\n justify-items: center;\n }\n .se-import-transfer__files {\n width: min(360px, 100%);\n }\n .se-import-option,\n .se-import-row,\n .se-import-asset-row {\n grid-template-columns: 1fr;\n }\n .se-import-mirror-head,\n .se-import-review-card {\n align-items: flex-start;\n flex-direction: column;\n }\n}\n');
5812
5872
 
5813
5873
  // src/assets/source_se.svg
5814
5874
  var source_se_default = 'data:image/svg+xml,<svg width="157" height="164" viewBox="0 0 157 164" fill="none" xmlns="http://www.w3.org/2000/svg">%0A<rect x="8.5" y="9.5" width="139" height="145" fill="%23242444" stroke="%23FF4076" stroke-width="3"/>%0A<path d="M87.1229 44.9224L89.0788 48.7235C102.041 53.3686 110.947 65.8756 110.947 79.7241C110.947 97.8858 96.1663 112.658 77.9929 112.658C59.8196 112.658 45.0457 97.8858 45.0457 79.7241C45.0457 65.8684 53.9519 53.3686 66.9143 48.7235L68.8702 44.9296C53.1725 49.0337 42 63.3222 42 79.7241C42 99.5592 58.1524 115.701 78.0001 115.701C97.8479 115.701 114 99.5592 114 79.7241C114 63.3222 102.828 49.0265 87.1229 44.9224Z" fill="url(%23paint0_linear_1424_495)"/>%0A<mask id="mask0_1424_495" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="47" y="48" width="62" height="63">%0A<path d="M77.9986 110.386C94.991 110.386 108.766 96.6196 108.766 79.638C108.766 62.6563 94.991 48.8899 77.9986 48.8899C61.0061 48.8899 47.231 62.6563 47.231 79.638C47.231 96.6196 61.0061 110.386 77.9986 110.386Z" fill="white"/>%0A</mask>%0A<g mask="url(%23mask0_1424_495)">%0A<path d="M108.825 78.9093C108.651 81.2463 105.036 90.9619 100.59 90.9619C98.7853 90.9619 98.3812 88.322 98.0853 86.3602C97.2841 89.4905 91.7629 96.2563 87.6706 96.2563C80.2295 96.2563 78.4974 80.5683 77.9921 78.4766C77.4869 80.561 75.7548 96.2563 68.3137 96.2563C64.2215 96.2563 58.7002 89.4977 57.8991 86.3602C57.6031 88.322 57.2062 90.9619 55.3947 90.9619C50.9487 90.9619 47.3328 81.2463 47.1596 78.9093C46.207 80.3158 46.2214 85.9995 47.636 89.6419C52.3561 101.795 64.1782 110.429 77.9849 110.429C91.7917 110.429 103.614 101.795 108.334 89.6419C109.749 85.9995 109.763 80.3231 108.81 78.9093H108.825Z" fill="url(%23paint1_linear_1424_495)"/>%0A<path d="M77.9988 96.2998C79.2258 98.5497 81.8961 101.918 86.4719 101.918C91.0478 101.918 94.6059 97.2014 95.7968 95.2105C95.4143 96.6097 94.642 99.6032 97.132 99.6032C102.841 99.6032 106.969 90.5798 106.969 90.5798C102.466 102.178 91.1777 110.422 77.9988 110.422C64.8199 110.422 53.532 102.178 49.0283 90.5798C49.0283 90.5798 53.1567 99.6032 58.8656 99.6032C61.3628 99.6032 60.5833 96.6021 60.2008 95.2105C61.3917 97.2014 64.8343 101.918 69.5257 101.918C74.1014 101.918 76.7646 98.5428 77.9988 96.2998Z" fill="url(%23paint2_linear_1424_495)"/>%0A<path d="M85.2523 106.419C82.4448 106.419 80.2579 105.546 77.9989 104.14C75.7399 105.539 73.553 106.419 70.7455 106.419C66.4656 106.419 65.1664 105.157 63.6147 104.003C63.658 105.474 65.1592 107.552 66.7109 108.301C70.1537 109.817 74.0221 110.422 77.9989 110.422C81.9756 110.422 85.8442 109.809 89.2868 108.301C90.8385 107.544 92.3326 105.474 92.3831 104.003C90.8313 105.157 89.5323 106.419 85.2523 106.419Z" fill="url(%23paint3_linear_1424_495)"/>%0A</g>%0A<path d="M73.8428 64.7073L69.4257 74.0622C69.2453 74.4446 69.1804 74.8773 69.2525 75.3029L70.6527 83.7562C70.696 84.0303 71.1002 84.0303 71.1435 83.7562L71.9013 79.1473C72.2116 77.2359 73.2292 75.5048 74.7522 74.3003L73.8428 64.7001V64.7073Z" fill="%23FF4800"/>%0A<path d="M82.1584 64.7073L86.5755 74.0622C86.7559 74.4446 86.8208 74.8773 86.7487 75.3029L85.3485 83.7634C85.3052 84.0376 84.9082 84.0376 84.8577 83.7634L84.0999 79.1473C83.7896 77.2359 82.7719 75.5048 81.249 74.3003L82.1584 64.7001V64.7073Z" fill="%23FF4800"/>%0A<path d="M84.5241 50.0291L78.4687 38.2867C78.2739 37.9044 77.7326 37.9044 77.5305 38.2867L71.4751 50.0219C71.2226 50.5052 71.1287 51.0606 71.2081 51.5943L74.261 73.0451L73.8063 75.0503L75.4158 79.4645C75.4519 79.5655 75.5457 79.6304 75.6468 79.6304H80.3308C80.4319 79.6304 80.5257 79.5655 80.5618 79.4645L82.1712 75.0503L81.7165 73.0451L84.7695 51.5943C84.8489 51.0534 84.7551 50.5052 84.5024 50.0219L84.5241 50.0291Z" fill="url(%23paint4_linear_1424_495)"/>%0A<path d="M77.7905 69.5107L75.6397 74.8265C75.3077 75.6488 75.2427 76.5576 75.4593 77.4159L77.7544 86.605C77.8193 86.8575 78.1802 86.8575 78.2379 86.605L80.5331 77.4159C80.7495 76.5576 80.6846 75.6488 80.3526 74.8265L78.2019 69.5107C78.1225 69.3232 77.8554 69.3232 77.7832 69.5107H77.7905Z" fill="%23FF4800"/>%0A<rect width="15" height="16" fill="%23FF4076"/>%0A<rect y="148" width="15" height="16" fill="%23FF4076"/>%0A<rect x="142" width="15" height="16" fill="%23FF4076"/>%0A<rect x="142" y="148" width="15" height="16" fill="%23FF4076"/>%0A<defs>%0A<linearGradient id="paint0_linear_1424_495" x1="78.0001" y1="24.4742" x2="78.0001" y2="138.609" gradientUnits="userSpaceOnUse">%0A<stop offset="0.3" stop-color="%2300ADFF"/>%0A<stop offset="1" stop-color="%231542FF"/>%0A</linearGradient>%0A<linearGradient id="paint1_linear_1424_495" x1="77.9993" y1="79.7965" x2="77.9993" y2="120.816" gradientUnits="userSpaceOnUse">%0A<stop stop-color="%23FCE3AD"/>%0A<stop offset="0.07" stop-color="%23FCE2A4"/>%0A<stop offset="0.19" stop-color="%23FCE08B"/>%0A<stop offset="0.33" stop-color="%23FCDD64"/>%0A<stop offset="0.48" stop-color="%23FCDA32"/>%0A<stop offset="0.66" stop-color="%23F9BC22"/>%0A<stop offset="1" stop-color="%23F57700"/>%0A</linearGradient>%0A<linearGradient id="paint2_linear_1424_495" x1="77.9988" y1="90.2913" x2="77.9988" y2="113.603" gradientUnits="userSpaceOnUse">%0A<stop stop-color="%23FCD619"/>%0A<stop offset="0.35" stop-color="%23F9B811"/>%0A<stop offset="1" stop-color="%23F57700"/>%0A</linearGradient>%0A<linearGradient id="paint3_linear_1424_495" x1="77.9989" y1="101.947" x2="77.9989" y2="112.694" gradientUnits="userSpaceOnUse">%0A<stop stop-color="%23F57700"/>%0A<stop offset="1" stop-color="%23FF4800"/>%0A</linearGradient>%0A<linearGradient id="paint4_linear_1424_495" x1="77.9996" y1="38.0054" x2="77.9996" y2="92.2167" gradientUnits="userSpaceOnUse">%0A<stop stop-color="%23E4E4E4"/>%0A<stop offset="0.88" stop-color="%23B6B8B8"/>%0A</linearGradient>%0A</defs>%0A</svg>%0A';
package/dist/se-import.js CHANGED
@@ -1503,8 +1503,40 @@ var SE_KAPPAGEN_EVENT_TO_LUMIA_ALERT = {
1503
1503
  // All three drop silently; the rest of the widget (size, spawn zone,
1504
1504
  // per-event flags for the remaining events) still imports.
1505
1505
  };
1506
+ function normalizeKappagenChatEmoteMode(mode) {
1507
+ const normalized = String(mode ?? "").trim().toLowerCase();
1508
+ if (!normalized || normalized === "off" || normalized === "false" || normalized === "none") return "off";
1509
+ if (normalized.includes("combo")) return "combo";
1510
+ return "show-all";
1511
+ }
1506
1512
  function mapKappagen(widget, ctx) {
1507
1513
  const v = widget.variables ?? {};
1514
+ const kappagenName = widget.name ?? widget.id ?? "unnamed widget";
1515
+ console.groupCollapsed("[SE Import][Kappagen raw widget]", kappagenName);
1516
+ console.log("Full StreamElements widget:", widget);
1517
+ console.log("Raw variables/settings:", widget.variables ?? null);
1518
+ console.log("Listeners:", widget.listeners ?? null);
1519
+ console.log("Events:", v.events ?? null);
1520
+ console.log("Events config:", v.eventsConfig ?? null);
1521
+ console.log("Kappagen animation/source settings:", {
1522
+ cheersplosions: v.cheersplosions,
1523
+ emotesplosion: v.emotesplosion,
1524
+ emotesplosiondir: v.emotesplosiondir,
1525
+ emotesplosionduration: v.emotesplosionduration,
1526
+ mode: v.mode,
1527
+ size: v.size,
1528
+ spawnzone: v.spawnzone,
1529
+ gif: v.gif,
1530
+ emoji: v.emoji,
1531
+ bttv: v.bttv,
1532
+ ffz: v.ffz,
1533
+ sevenTv: v.sevenTv,
1534
+ duration: v.duration,
1535
+ direction: v.direction,
1536
+ fullscreen: v.fullscreen,
1537
+ limit: v.limit
1538
+ });
1539
+ console.groupEnd();
1508
1540
  const eventsFromNested = v.eventsConfig ? {
1509
1541
  subscriber: v.eventsConfig.subscriber?.enabled ?? true,
1510
1542
  follower: v.eventsConfig.follower?.enabled ?? true,
@@ -1513,9 +1545,10 @@ function mapKappagen(widget, ctx) {
1513
1545
  tip: v.eventsConfig.tip?.enabled ?? true
1514
1546
  } : null;
1515
1547
  const events = v.events ?? eventsFromNested ?? { subscriber: true, follower: true, cheer: true, raid: true, tip: true };
1548
+ const chatEmoteMode = normalizeKappagenChatEmoteMode(v.mode);
1516
1549
  const alertTriggers = Object.entries(events).filter(([, enabled]) => !!enabled).map(([seKey]) => SE_KAPPAGEN_EVENT_TO_LUMIA_ALERT[seKey]).filter((x) => !!x);
1517
1550
  const alertEmotes = ["Kappa", "<3", "imGlitch"];
1518
- return buildUnit(
1551
+ const unit = buildUnit(
1519
1552
  widget,
1520
1553
  "emotealert",
1521
1554
  {
@@ -1535,6 +1568,9 @@ function mapKappagen(widget, ctx) {
1535
1568
  animationTime: typeof v.duration === "number" ? v.duration : 5,
1536
1569
  duration: typeof v.duration === "number" ? v.duration : 5,
1537
1570
  useAnimatedEmotes: true,
1571
+ alertOn: true,
1572
+ chatEmotesOn: chatEmoteMode !== "off",
1573
+ chatEmoteMode,
1538
1574
  alertNumberEmotes: typeof v.limit === "number" && v.limit > 0 ? v.limit : 30,
1539
1575
  alertEmotes,
1540
1576
  alertTriggers,
@@ -1561,6 +1597,15 @@ function mapKappagen(widget, ctx) {
1561
1597
  },
1562
1598
  ctx
1563
1599
  );
1600
+ console.groupCollapsed("[SE Import][Kappagen mapped emotealert]", kappagenName);
1601
+ console.log("Resolved events:", events);
1602
+ console.log("Mapped alert triggers:", alertTriggers);
1603
+ console.log("Mapped chat emote mode:", chatEmoteMode);
1604
+ console.log("Mapped alert emotes:", alertEmotes);
1605
+ console.log("Mapped Emotealert unit:", unit);
1606
+ console.log("Mapped Emotealert content:", unit.module?.content ?? null);
1607
+ console.groupEnd();
1608
+ return unit;
1564
1609
  }
1565
1610
  function mapLeaderboardFromVariables(widget, currency, ctx) {
1566
1611
  const v = widget.variables ?? {};
@@ -1753,7 +1798,9 @@ function liftSESpritesIntoTiers(types) {
1753
1798
  const cat = SE_TYPE_TO_CATEGORY[seKey];
1754
1799
  if (!cat) continue;
1755
1800
  const variations = block?.variations ?? [];
1756
- const usable = variations.filter((v) => typeof v?.src === "string" && v.src.length > 0);
1801
+ const usable = variations.filter(
1802
+ (v) => typeof (v?.preview ?? v?.src) === "string" && (v.preview ?? v.src ?? "").length > 0
1803
+ );
1757
1804
  const flagged = usable.filter((v) => v.default === true);
1758
1805
  const picked = flagged.length > 0 ? flagged : usable;
1759
1806
  const seenAmounts = /* @__PURE__ */ new Set();
@@ -1764,7 +1811,7 @@ function liftSESpritesIntoTiers(types) {
1764
1811
  seenAmounts.add(amount);
1765
1812
  tiers.push({
1766
1813
  minAmount: amount,
1767
- imageUrl: v.src,
1814
+ imageUrl: v.preview ?? v.src,
1768
1815
  scale: typeof v.cheerSize === "number" && v.cheerSize > 0 ? v.cheerSize : 1
1769
1816
  });
1770
1817
  }
@@ -1815,58 +1862,71 @@ function mapHypeCup(widget, ctx) {
1815
1862
  const maxBodies = typeof v.recentEvents === "number" && v.recentEvents > 0 ? Math.min(300, Math.max(10, v.recentEvents)) : 80;
1816
1863
  const duration = typeof v.duration === "number" && v.duration > 0 ? Math.min(15, Math.max(1, v.duration)) : 3;
1817
1864
  const sprites = liftSESpritesIntoTiers(v.types);
1818
- return buildUnit(widget, "tipjar", {
1819
- content: {
1820
- version: 1,
1821
- // Phase 1 ships a single preset; SE's per-cup polygon set isn't lifted
1822
- // yet (it'd require multi-cup support which we deliberately deferred).
1823
- // The streamer can swap a custom cup image + wireframe via Settings.
1824
- preset: "glass-mug",
1825
- customCup: null,
1826
- cup: {
1827
- x: cupX,
1828
- y: cupY,
1829
- scale: 1,
1830
- opacity: 1
1831
- },
1832
- physics: {
1833
- gravity: 1,
1834
- bounce,
1835
- friction: 0.06,
1836
- maxBodies
1837
- },
1838
- tokens: {
1839
- defaultRadius: 26
1840
- },
1841
- events: categoriesFromListeners(widget.listeners),
1842
- chat: {
1843
- useViewerAvatars: true
1844
- },
1845
- display: {
1846
- showWireframes: !!v.showWireframes,
1847
- showEventMessages: !!v.textEnabled,
1848
- messageDuration: duration
1865
+ return buildUnit(
1866
+ widget,
1867
+ "tipjar",
1868
+ {
1869
+ content: {
1870
+ version: 1,
1871
+ // Phase 1 ships a single preset; SE's per-cup polygon set isn't lifted
1872
+ // yet (it'd require multi-cup support which we deliberately deferred).
1873
+ // The streamer can swap a custom cup image + wireframe via Settings.
1874
+ preset: "glass-mug",
1875
+ customCup: null,
1876
+ cup: {
1877
+ x: cupX,
1878
+ y: cupY,
1879
+ scale: 1,
1880
+ opacity: 1
1881
+ },
1882
+ physics: {
1883
+ gravity: 1,
1884
+ bounce,
1885
+ friction: 0.06,
1886
+ maxBodies
1887
+ },
1888
+ tokens: {
1889
+ defaultRadius: 26
1890
+ },
1891
+ events: categoriesFromListeners(widget.listeners),
1892
+ chat: {
1893
+ useViewerAvatars: true
1894
+ },
1895
+ display: {
1896
+ showWireframes: !!v.showWireframes,
1897
+ showEventMessages: !!v.textEnabled,
1898
+ messageDuration: duration
1899
+ },
1900
+ sprites,
1901
+ // Phase 2 defaults for goal/break — disabled by import. Streamer
1902
+ // can enable in Settings; SE has no equivalent so nothing to lift.
1903
+ goal: {
1904
+ active: false,
1905
+ currency: "tips",
1906
+ target: 100,
1907
+ current: 0,
1908
+ readoutTemplate: "{{current}} / {{target}}",
1909
+ textColor: "#ffffff",
1910
+ hitAt: null
1911
+ },
1912
+ break: { enabled: false, command: "!breakjar", rebuildDelay: 5e3 },
1913
+ // Source-side knobs without a Lumia equivalent — preserved under
1914
+ // the generic `importMeta` envelope for future phases (per-cup
1915
+ // polygons + enter/movement physics tweaks). The per-event
1916
+ // sprite sets were already lifted into native `sprites` above.
1917
+ importMeta: buildImportMeta(widget, {
1918
+ enterFrom: v.enterFrom ?? null,
1919
+ preventMovement: !!v.preventMovement,
1920
+ fullscreen: !!v.fullscreen,
1921
+ cups: v.cups ?? null
1922
+ })
1849
1923
  },
1850
- sprites,
1851
- // Phase 2 defaults for goal/break — disabled by import. Streamer
1852
- // can enable in Settings; SE has no equivalent so nothing to lift.
1853
- goal: { active: false, currency: "tips", target: 100, current: 0, readoutTemplate: "{{current}} / {{target}}", textColor: "#ffffff", hitAt: null },
1854
- break: { enabled: false, command: "!breakjar", rebuildDelay: 5e3 },
1855
- // Source-side knobs without a Lumia equivalent — preserved under
1856
- // the generic `importMeta` envelope for future phases (per-cup
1857
- // polygons + enter/movement physics tweaks). The per-event
1858
- // sprite sets were already lifted into native `sprites` above.
1859
- importMeta: buildImportMeta(widget, {
1860
- enterFrom: v.enterFrom ?? null,
1861
- preventMovement: !!v.preventMovement,
1862
- fullscreen: !!v.fullscreen,
1863
- cups: v.cups ?? null
1864
- })
1924
+ css: {
1925
+ background: "transparent"
1926
+ }
1865
1927
  },
1866
- css: {
1867
- background: "transparent"
1868
- }
1869
- }, ctx);
1928
+ ctx
1929
+ );
1870
1930
  }
1871
1931
  function clamp01(n) {
1872
1932
  if (!Number.isFinite(n)) return 0.5;
@@ -4678,7 +4738,7 @@ function styleInject(css, { insertAt } = {}) {
4678
4738
  }
4679
4739
 
4680
4740
  // src/se-import/ui/SEImportWizard.css
4681
- styleInject('.se-import,\n.se-import * {\n box-sizing: border-box;\n}\n.se-import {\n --se-bg: #17162a;\n --se-surface: #27264a;\n --se-panel: #171b38;\n --se-panel-2: #202449;\n --se-border: rgba(116, 124, 211, 0.24);\n --se-border-strong: rgba(126, 128, 255, 0.58);\n --se-text: #f5f4ff;\n --se-muted: #bab8d2;\n --se-primary: #ff4076;\n --se-purple: #393853;\n --se-green: #06c96f;\n --se-warn: #f7a42b;\n width: 100%;\n height: 100%;\n min-width: min(680px, 100%);\n color: var(--se-text);\n font-family: inherit;\n display: flex;\n flex-direction: column;\n min-height: 0;\n}\n.se-import__shell {\n border-radius: 0;\n padding: 28px 48px 24px;\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n}\n.se-import__header {\n flex: 0 0 auto;\n}\nfooter.se-import-actions {\n flex: 0 0 auto;\n}\n.se-import__header {\n display: grid;\n justify-items: center;\n gap: 42px;\n}\n.se-import__title {\n display: inline-flex;\n align-items: center;\n gap: 10px;\n font-size: 20px;\n font-weight: 500;\n}\n.se-import-stepper {\n display: grid;\n width: min(760px, 100%);\n grid-template-columns: repeat(auto-fit, minmax(88px, 1fr));\n}\n.se-import-step {\n position: relative;\n display: grid;\n justify-items: center;\n gap: 12px;\n min-width: 0;\n color: rgba(255, 255, 255, 0.72);\n}\n.se-import-step__label {\n color: var(--se-text);\n font-size: 18px;\n line-height: 1.1;\n}\n.se-import-step__line {\n position: absolute;\n top: 42px;\n left: 50%;\n width: 100%;\n height: 2px;\n background: rgba(255, 255, 255, 0.16);\n}\n.se-import-step:last-child .se-import-step__line {\n display: none;\n}\n.se-import-step__dot {\n z-index: 1;\n display: grid;\n width: 22px;\n height: 22px;\n place-items: center;\n border-radius: 50%;\n background: #47485e;\n color: #fff;\n font-size: 13px;\n font-weight: 700;\n line-height: 1;\n}\n.se-import-step--active .se-import-step__dot {\n background: var(--se-primary);\n}\n.se-import-step--done .se-import-step__dot {\n background: var(--se-green);\n}\n.se-import-step--done .se-import-step__line {\n background: var(--se-green);\n}\n.se-import-step--done:has(+ .se-import-step--active) .se-import-step__line {\n background:\n linear-gradient(\n 90deg,\n var(--se-green),\n var(--se-primary));\n}\n.se-import__content {\n display: grid;\n place-items: center;\n padding: 64px 0 28px;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n}\n@media (max-height: 760px) {\n .se-import__shell {\n padding: 18px 32px 16px;\n }\n .se-import__content {\n padding: 32px 0 16px;\n }\n}\n.se-import-panel {\n width: min(100%, 1080px);\n padding: 28px;\n}\n.se-import-panel--narrow {\n width: min(100%, 1140px);\n}\n.se-import-panel--medium {\n width: min(100%, 880px);\n}\n.se-import-panel--wide {\n width: min(100%, 1000px);\n}\n.se-import-panel--confirm {\n width: min(100%, 800px);\n}\n.se-import-panel h2,\n.se-import-panel h3,\n.se-import-panel p {\n margin: 0;\n}\n.se-import-panel h2 {\n font-size: 26px;\n font-weight: 700;\n line-height: 1.15;\n}\n.se-import-panel > p {\n margin-top: 14px;\n color: var(--se-muted);\n font-size: 16px;\n line-height: 1.45;\n}\n.se-import-field {\n margin-top: 34px;\n}\n.se-import-field .mui-ls-input {\n --ls-control-height: 66px;\n}\n.se-import-field .MuiInputLabel-root {\n color: var(--se-text);\n font-weight: 700;\n}\n.se-import-field .MuiInputLabel-root.Mui-focused {\n color: #dfe1ff;\n}\n.se-import-field .MuiInputBase-root {\n font-size: 18px;\n}\n.se-import-token-loading {\n display: inline-flex;\n align-items: center;\n gap: 10px;\n margin-top: 14px;\n color: var(--se-muted);\n font-size: 13px;\n font-weight: 700;\n}\n.se-import-spinner {\n width: 16px;\n height: 16px;\n border: 2px solid rgba(255, 255, 255, 0.2);\n border-top-color: var(--se-primary);\n border-radius: 50%;\n animation: se-import-spin 800ms linear infinite;\n}\n@keyframes se-import-spin {\n to {\n transform: rotate(360deg);\n }\n}\n.se-import-help {\n display: flex;\n gap: 18px;\n margin-top: 30px;\n border: 1px solid var(--se-purple);\n border-radius: 12px;\n padding: 24px;\n color: var(--white2);\n}\n.se-import-help__icon {\n display: grid;\n width: 30px;\n height: 30px;\n flex: 0 0 auto;\n place-items: center;\n border: 1px solid var(--se-purple);\n border-radius: 50%;\n color: var(--white2);\n font-weight: 800;\n}\n.se-import-help__title {\n color: var(--se-text);\n font-size: 18px;\n font-weight: 700;\n}\n.se-import-help__image {\n display: block;\n width: min(100%, 560px);\n height: auto;\n margin-top: 16px;\n border: 1px solid var(--se-border);\n border-radius: 8px;\n}\n.se-import-help ol {\n margin: 16px 0 0;\n padding-left: 18px;\n font-size: 15px;\n line-height: 1.7;\n}\n.se-import-help a {\n color: var(--primary);\n font-weight: 700;\n}\n.se-import-help--info {\n align-items: center;\n}\n.se-import-section-title {\n display: flex;\n gap: 1rem;\n margin-bottom: 1.5rem;\n}\n.se-import-section-title__num {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 46px;\n height: 46px;\n border: 1px solid var(--se-purple);\n border-radius: 50%;\n font-size: 1.5rem;\n font-weight: 800;\n}\n.se-import-section-title__content {\n display: flex;\n flex-direction: column;\n justify-content: center;\n}\n.se-import-section-title h3 {\n font-size: 18px;\n font-weight: 800;\n}\n.se-import-section-title p {\n margin-top: 4px;\n color: var(--se-muted);\n font-size: 14px;\n}\n.se-import-grid {\n display: grid;\n gap: 8px;\n margin-top: 10px;\n}\n.se-import-grid--four {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n}\n.se-import-grid--stats {\n grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));\n}\n.se-import-grid--two {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n}\n.se-import-stat {\n min-height: 116px;\n border: 1px solid rgba(255, 255, 255, 0.06);\n border-radius: 8px;\n background:\n linear-gradient(\n 135deg,\n rgba(42, 47, 92, 0.9),\n rgba(33, 38, 78, 0.9));\n padding: 24px 22px;\n}\n.se-import-stat--success {\n background:\n linear-gradient(\n 135deg,\n rgba(12, 91, 86, 0.72),\n rgba(32, 65, 76, 0.8));\n border-color: rgba(19, 201, 126, 0.25);\n}\n.se-import-stat--info {\n border-color: rgba(116, 104, 255, 0.8);\n box-shadow: inset 3px 0 0 #6e76ff;\n}\n.se-import-stat--warn,\n.se-import-stat--muted {\n box-shadow: inset 3px 0 0 var(--se-warn);\n}\n.se-import-stat__label {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--se-muted);\n font-size: 12px;\n font-weight: 800;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n}\n.se-import-stat__icon {\n width: 20px;\n height: 20px;\n object-fit: contain;\n}\n.se-import-stat__value {\n margin-top: 12px;\n color: #fff;\n font-size: 30px;\n font-weight: 800;\n line-height: 1;\n}\n.se-import-stat__description {\n margin-top: 10px;\n color: var(--se-muted);\n font-size: 13px;\n line-height: 1.35;\n}\n.se-import-stat__sub {\n margin-top: 8px;\n color: var(--se-muted);\n font-size: 13px;\n}\n.se-import-mode-card__icon {\n display: grid;\n width: 46px;\n height: 46px;\n place-items: center;\n border-radius: 12px;\n background: rgba(255, 255, 255, 0.08);\n}\n.se-import-mode-card__icon img {\n width: 30px;\n height: 30px;\n object-fit: contain;\n}\n.se-import-mode-card__features {\n display: grid;\n gap: 6px;\n margin: 0;\n padding-left: 18px;\n}\n.se-import-overlay-progress {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n align-items: center;\n max-width: min(760px, 100%);\n width: 100%;\n gap: 14px;\n padding: 4px 2px 0;\n}\n.se-import-overlay-progress__copy {\n min-width: 0;\n color: var(--se-text);\n font-size: 13px;\n font-weight: 700;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.se-import-overlay-progress__strip,\n.se-import-overlay-progress__stack {\n display: flex;\n align-items: center;\n}\n.se-import-overlay-progress__strip {\n gap: 7px;\n}\n.se-import-overlay-progress__stack {\n margin-right: 5px;\n}\n.se-import-overlay-progress__stack--queued {\n margin-right: 0;\n margin-left: 5px;\n}\n.se-import-overlay-progress__stack .se-import-overlay-progress__item {\n margin-left: -16px;\n}\n.se-import-overlay-progress__stack .se-import-overlay-progress__item:first-child {\n margin-left: 0;\n}\n.se-import-overlay-progress__item {\n position: relative;\n width: 50px;\n height: 36px;\n flex: 0 0 auto;\n overflow: hidden;\n border: 1px solid var(--se-border);\n border-radius: 6px;\n background: var(--se-panel-2);\n opacity: 0.72;\n}\n.se-import-overlay-progress__item img,\n.se-import-overlay-progress__placeholder {\n display: block;\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n.se-import-overlay-progress__item--current {\n border-color: var(--se-primary);\n box-shadow: 0 0 0 1px var(--se-primary);\n opacity: 1;\n z-index: 3;\n}\n.se-import-overlay-progress__item--done {\n opacity: 1;\n}\n.se-import-overlay-progress__item--queued {\n opacity: 0.64;\n}\n.se-import-overlay-progress__more {\n display: grid;\n min-width: 28px;\n height: 24px;\n place-items: center;\n border-radius: 999px;\n background: rgba(255, 255, 255, 0.08);\n color: var(--se-muted);\n font-size: 12px;\n font-weight: 800;\n}\n.se-import-overlay-progress__check {\n position: absolute;\n right: 3px;\n bottom: 3px;\n display: grid;\n width: 16px;\n height: 16px;\n place-items: center;\n border-radius: 50%;\n background: var(--se-green);\n color: #fff;\n font-size: 11px;\n font-weight: 900;\n line-height: 1;\n}\n.se-import-option {\n display: grid;\n grid-template-columns: auto minmax(0, 1fr) auto auto;\n align-items: center;\n gap: 18px;\n border: 1px solid var(--se-purple);\n border-radius: 12px;\n background:\n linear-gradient(\n 135deg,\n rgba(35, 39, 81, 0.95),\n rgba(31, 35, 73, 0.95));\n box-shadow: inset 3px 0 0 var(--se-primary);\n cursor: pointer;\n padding: 22px;\n margin-bottom: 1rem;\n}\n.se-import-option--disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n.se-import-option__icon {\n display: grid;\n width: 40px;\n height: 40px;\n place-items: center;\n border-radius: 12px;\n background: rgba(255, 64, 118, 0.12);\n}\n.se-import-option__icon img {\n width: 24px;\n height: 24px;\n object-fit: contain;\n}\n.se-import-option__body {\n display: grid;\n gap: 8px;\n min-width: 0;\n}\n.se-import-option__title {\n font-size: 17px;\n font-weight: 800;\n}\n.se-import-option__copy {\n color: var(--se-muted);\n font-size: 14px;\n line-height: 1.45;\n}\n.se-import-option__count {\n color: #fff;\n font-size: 16px;\n}\n.se-import-option input {\n position: absolute;\n opacity: 0;\n pointer-events: none;\n}\n.se-import-toggle {\n position: relative;\n width: 48px;\n height: 28px;\n border-radius: 999px;\n box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.14);\n}\n.se-import-toggle::after {\n position: absolute;\n top: 4px;\n left: 4px;\n width: 20px;\n height: 20px;\n border-radius: 50%;\n background: #fff;\n content: "";\n transition: transform 160ms ease;\n}\n.se-import-option input:checked + .se-import-toggle {\n background: var(--primary);\n}\n.se-import-option input:checked + .se-import-toggle::after {\n transform: translateX(20px);\n}\n.se-import-advanced {\n margin-top: 26px;\n border-radius: 10px;\n background: rgba(32, 36, 73, 0.7);\n padding: 24px;\n}\n.se-import-advanced summary {\n cursor: pointer;\n font-size: 18px;\n font-weight: 700;\n}\n.se-import-advanced p {\n margin-top: 10px;\n color: var(--se-muted);\n}\n.se-import-transfer {\n position: relative;\n display: grid;\n width: min(720px, 100%);\n min-height: 190px;\n grid-template-columns: 180px minmax(260px, 1fr) 180px;\n align-items: center;\n gap: 28px;\n margin: 0 auto 60px;\n}\n.se-import-transfer__source {\n position: relative;\n display: grid;\n width: 160px;\n height: 160px;\n place-items: center;\n animation: se-import-source-bounce 1.8s ease-in-out infinite;\n}\n.se-import-transfer--complete .se-import-transfer__source {\n animation: none;\n}\n.se-import-transfer__source::before {\n top: -13px;\n left: -13px;\n box-shadow: 155px 0 0 var(--se-primary);\n}\n.se-import-transfer__source::after {\n bottom: -13px;\n left: -13px;\n box-shadow: 155px 0 0 var(--se-primary);\n}\n.se-import-transfer__source img {\n width: 192px;\n height: 192px;\n object-fit: contain;\n}\n.se-import-transfer__source--lumia {\n animation-delay: 0.22s;\n}\n.se-import-transfer__files {\n position: relative;\n height: 130px;\n}\n.se-import-transfer__file {\n position: absolute;\n top: 50%;\n left: -18px;\n width: 56px;\n height: 66px;\n object-fit: contain;\n transform: translateY(-50%);\n filter: drop-shadow(0 10px 12px rgba(8, 9, 25, 0.25));\n animation: se-import-file-fly 2.4s cubic-bezier(0.35, 0, 0.25, 1) infinite;\n}\n.se-import-transfer--complete .se-import-transfer__file {\n display: none;\n}\n.se-import-transfer__done {\n position: absolute;\n right: -8px;\n bottom: -8px;\n display: grid;\n width: 34px;\n height: 34px;\n place-items: center;\n border-radius: 50%;\n background: var(--se-green);\n color: #fff;\n font-size: 20px;\n font-weight: 900;\n box-shadow: 0 10px 20px rgba(6, 201, 111, 0.26);\n}\n.se-import-transfer__file--one {\n animation-delay: 0s;\n}\n.se-import-transfer__file--two {\n animation-delay: 0.38s;\n}\n.se-import-transfer__file--three {\n animation-delay: 0.76s;\n}\n.se-import-transfer__file--four {\n animation-delay: 1.14s;\n}\n@keyframes se-import-source-bounce {\n 0%, 100% {\n transform: translateY(0) scale(1);\n }\n 50% {\n transform: translateY(-8px) scale(1.025);\n }\n}\n@keyframes se-import-file-fly {\n 0% {\n opacity: 0;\n transform: translate(-10px, -50%) scale(0.82) rotate(-8deg);\n }\n 12% {\n opacity: 1;\n }\n 45% {\n transform: translate(145px, calc(-50% - 18px)) scale(1.08) rotate(5deg);\n }\n 82% {\n opacity: 1;\n }\n 100% {\n opacity: 0;\n transform: translate(330px, -50%) scale(0.9) rotate(10deg);\n }\n}\n.se-import-mirror-head {\n display: grid;\n grid-template-columns: minmax(220px, auto) minmax(180px, 1fr) auto;\n align-items: center;\n gap: 14px;\n}\n.se-import-mirror-head p {\n margin-top: 14px;\n color: var(--se-muted);\n font-size: 16px;\n}\n.se-import-mirror-head span {\n flex: 0 0 auto;\n color: var(--se-muted);\n font-weight: 700;\n}\n.se-import-mirror-head strong {\n color: var(--se-text);\n font-size: 14px;\n}\n.se-import-progress {\n width: 100%;\n height: 14px;\n margin-top: 0;\n overflow: hidden;\n border: 0;\n border-radius: 999px;\n background: rgba(255, 64, 118, 0.1);\n}\n.se-import-progress::-webkit-progress-bar {\n background: rgba(255, 64, 118, 0.1);\n}\n.se-import-progress::-webkit-progress-value {\n border-radius: 999px;\n background:\n linear-gradient(\n 90deg,\n #ff4076,\n #e7295f);\n}\n.se-import-progress::-moz-progress-bar {\n border-radius: 999px;\n background:\n linear-gradient(\n 90deg,\n #ff4076,\n #e7295f);\n}\n.se-import-asset-list {\n max-height: 360px;\n margin-top: 22px;\n overflow-y: auto;\n border-top: 1px solid rgba(255, 255, 255, 0.08);\n}\n.se-import-asset-row {\n display: grid;\n grid-template-columns: 32px minmax(0, 1fr) auto auto;\n align-items: center;\n gap: 14px;\n min-height: 42px;\n border-bottom: 1px solid rgba(255, 255, 255, 0.08);\n color: var(--se-muted);\n font-size: 13px;\n}\n.se-import-asset-row__icon {\n width: 24px;\n height: 28px;\n justify-self: end;\n object-fit: contain;\n}\n.se-import-asset-row__url {\n overflow: hidden;\n font-family:\n ui-monospace,\n SFMono-Regular,\n Menlo,\n Monaco,\n Consolas,\n monospace;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.se-import-asset-row__state {\n color: #9b8cff;\n font-weight: 800;\n}\n.se-import-asset-row--done .se-import-asset-row__state,\n.se-import-asset-row--reused .se-import-asset-row__state {\n color: var(--se-green);\n}\n.se-import-asset-row--failed .se-import-asset-row__state,\n.se-import-asset-row__error {\n color: #ff8080;\n}\n.se-import-link-button {\n border: 0;\n background: transparent;\n color: #ff9ab6;\n cursor: pointer;\n font: inherit;\n font-weight: 800;\n}\n.se-import-overview {\n margin-top: 28px;\n border: 1px solid var(--se-border);\n border-radius: 12px;\n background: rgba(26, 30, 61, 0.62);\n padding: 28px;\n}\n.se-import-overview h3 {\n margin-bottom: 18px;\n font-size: 18px;\n font-weight: 800;\n}\n.se-import-row {\n display: grid;\n grid-template-columns: 190px minmax(0, 1fr) auto;\n gap: 18px;\n align-items: center;\n min-height: 48px;\n border-top: 1px solid rgba(255, 255, 255, 0.08);\n color: var(--se-muted);\n}\n.se-import-row strong {\n min-width: 0;\n overflow: hidden;\n color: var(--se-text);\n font-weight: 600;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.se-import-row em {\n color: var(--se-muted);\n font-style: normal;\n}\n.se-import-review-card {\n display: flex;\n justify-content: space-between;\n gap: 18px;\n border: 1px solid var(--se-border);\n border-radius: 10px;\n background: rgba(30, 34, 71, 0.8);\n padding: 20px;\n}\n.se-import-review-card__type {\n font-family:\n ui-monospace,\n SFMono-Regular,\n Menlo,\n Monaco,\n Consolas,\n monospace;\n font-weight: 800;\n}\n.se-import-review-card p {\n margin-top: 8px;\n color: var(--se-muted);\n line-height: 1.45;\n}\n.se-import-review-card__status {\n flex: 0 0 auto;\n color: #facc15;\n font-size: 11px;\n font-weight: 800;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n}\n.se-import-review-bulk,\n.se-import-actions--inline {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: flex-end;\n gap: 10px;\n margin-top: 16px;\n}\n.se-import-muted {\n margin-top: 16px;\n color: var(--se-muted);\n font-size: 13px;\n}\n.se-import-generated {\n display: grid;\n gap: 12px;\n margin-top: 18px;\n}\n.se-import-generated__title {\n font-weight: 800;\n}\n.se-import-preview {\n width: 100%;\n height: 260px;\n border: 1px solid var(--se-border);\n border-radius: 8px;\n background: repeating-conic-gradient(#1a1c20 0% 25%, #1d1f24 0% 50%) 50% / 20px 20px;\n}\n.se-import-code {\n margin-top: 16px;\n}\n.se-import-code summary {\n cursor: pointer;\n color: var(--se-muted);\n font-size: 13px;\n}\n.se-import-code pre {\n max-height: 220px;\n margin: 10px 0 0;\n overflow: auto;\n border-radius: 8px;\n background: rgba(0, 0, 0, 0.28);\n padding: 12px;\n color: #d8dcff;\n font-size: 12px;\n}\n.se-import-error {\n margin-top: 18px;\n border: 1px solid rgba(239, 68, 68, 0.45);\n border-radius: 8px;\n background: rgba(220, 38, 38, 0.12);\n padding: 12px;\n color: #fca5a5;\n}\n.se-import-error__title {\n font-weight: 800;\n}\n.se-import-error__hint {\n margin-top: 6px;\n white-space: pre-wrap;\n}\n.se-import-actions {\n display: flex;\n justify-content: flex-end;\n gap: 12px;\n margin-top: 8px;\n}\nfooter.se-import-actions:not(.se-import-actions--inline) {\n margin: 0;\n padding: 0;\n}\n@media (max-height: 760px) {\n footer.se-import-actions:not(.se-import-actions--inline) {\n margin: 0;\n padding: 0;\n }\n}\n@media (max-width: 900px) {\n .se-import__shell {\n min-height: 0;\n padding: 24px 18px;\n }\n .se-import__content {\n min-height: 0;\n padding-top: 32px;\n }\n .se-import-stepper {\n grid-template-columns: repeat(auto-fit, minmax(70px, 1fr));\n }\n .se-import-step__label {\n font-size: 13px;\n }\n .se-import-grid--four,\n .se-import-grid--two,\n .se-import-transfer {\n grid-template-columns: 1fr;\n }\n .se-import-transfer {\n justify-items: center;\n }\n .se-import-transfer__files {\n width: min(360px, 100%);\n }\n .se-import-option,\n .se-import-row,\n .se-import-asset-row {\n grid-template-columns: 1fr;\n }\n .se-import-mirror-head,\n .se-import-review-card {\n align-items: flex-start;\n flex-direction: column;\n }\n}\n');
4741
+ styleInject('.se-import,\n.se-import * {\n box-sizing: border-box;\n}\n.se-import {\n --se-bg: #17162a;\n --se-surface: #27264a;\n --se-panel: #171b38;\n --se-panel-2: #202449;\n --se-border: rgba(116, 124, 211, 0.24);\n --se-border-strong: rgba(126, 128, 255, 0.58);\n --se-text: #f5f4ff;\n --se-muted: #bab8d2;\n --se-primary: #ff4076;\n --se-purple: #393853;\n --se-green: #06c96f;\n --se-warn: #f7a42b;\n width: 100%;\n height: 100%;\n min-width: min(680px, 100%);\n color: var(--se-text);\n font-family: inherit;\n display: flex;\n flex-direction: column;\n min-height: 0;\n}\n.se-import__shell {\n border-radius: 0;\n padding: 28px 48px 24px;\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n}\n.se-import__header {\n flex: 0 0 auto;\n}\nfooter.se-import-actions {\n flex: 0 0 auto;\n}\n.se-import__header {\n display: grid;\n justify-items: center;\n gap: 42px;\n}\n.se-import__title {\n display: inline-flex;\n align-items: center;\n gap: 10px;\n font-size: 20px;\n font-weight: 500;\n}\n.se-import-stepper {\n display: grid;\n width: min(760px, 100%);\n grid-template-columns: repeat(auto-fit, minmax(88px, 1fr));\n}\n.se-import-step {\n position: relative;\n display: grid;\n justify-items: center;\n gap: 12px;\n min-width: 0;\n color: rgba(255, 255, 255, 0.72);\n}\n.se-import-step__label {\n color: var(--se-text);\n font-size: 18px;\n line-height: 1.1;\n}\n.se-import-step__line {\n position: absolute;\n top: 42px;\n left: 50%;\n width: 100%;\n height: 2px;\n background: rgba(255, 255, 255, 0.16);\n}\n.se-import-step:last-child .se-import-step__line {\n display: none;\n}\n.se-import-step__dot {\n z-index: 1;\n display: grid;\n width: 22px;\n height: 22px;\n place-items: center;\n border-radius: 50%;\n background: #47485e;\n color: #fff;\n font-size: 13px;\n font-weight: 700;\n line-height: 1;\n}\n.se-import-step--active .se-import-step__dot {\n background: var(--se-primary);\n}\n.se-import-step--done .se-import-step__dot {\n background: var(--se-green);\n}\n.se-import-step--done .se-import-step__line {\n background: var(--se-green);\n}\n.se-import-step--done:has(+ .se-import-step--active) .se-import-step__line {\n background:\n linear-gradient(\n 90deg,\n var(--se-green),\n var(--se-primary));\n}\n.se-import__content {\n display: grid;\n place-items: center;\n padding: 64px 0 28px;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n}\n@media (max-height: 760px) {\n .se-import__shell {\n padding: 18px 32px 16px;\n }\n .se-import__content {\n padding: 32px 0 16px;\n }\n}\n.se-import-panel {\n width: min(100%, 1080px);\n padding: 28px;\n}\n.se-import-panel--narrow {\n width: min(100%, 1140px);\n}\n.se-import-panel--medium {\n width: min(100%, 880px);\n}\n.se-import-panel--wide {\n width: min(100%, 1000px);\n}\n.se-import-panel--confirm {\n width: min(100%, 800px);\n}\n.se-import-panel h2,\n.se-import-panel h3,\n.se-import-panel p {\n margin: 0;\n}\n.se-import-panel h2 {\n font-size: 26px;\n font-weight: 700;\n line-height: 1.15;\n}\n.se-import-panel > p {\n margin-top: 14px;\n color: var(--se-muted);\n font-size: 16px;\n line-height: 1.45;\n}\n.se-import-field {\n margin-top: 34px;\n}\n.se-import-field .mui-ls-input {\n --ls-control-height: 66px;\n}\n.se-import-field .MuiInputLabel-root {\n color: var(--se-text);\n font-weight: 700;\n}\n.se-import-field .MuiInputLabel-root.Mui-focused {\n color: #dfe1ff;\n}\n.se-import-field .MuiInputBase-root {\n font-size: 18px;\n}\n.se-import-token-loading {\n display: inline-flex;\n align-items: center;\n gap: 10px;\n margin-top: 14px;\n color: var(--se-muted);\n font-size: 13px;\n font-weight: 700;\n}\n.se-import-spinner {\n width: 16px;\n height: 16px;\n border: 2px solid rgba(255, 255, 255, 0.2);\n border-top-color: var(--se-primary);\n border-radius: 50%;\n animation: se-import-spin 800ms linear infinite;\n}\n@keyframes se-import-spin {\n to {\n transform: rotate(360deg);\n }\n}\n.se-import-help {\n display: flex;\n gap: 18px;\n margin-top: 30px;\n border: 1px solid var(--se-purple);\n border-radius: 12px;\n padding: 24px;\n color: var(--white2);\n}\n.se-import-help__icon {\n display: grid;\n width: 30px;\n height: 30px;\n flex: 0 0 auto;\n place-items: center;\n border: 1px solid var(--se-purple);\n border-radius: 50%;\n color: var(--white2);\n font-weight: 800;\n}\n.se-import-help__title {\n color: var(--se-text);\n font-size: 18px;\n font-weight: 700;\n}\n.se-import-help__image {\n display: block;\n width: min(100%, 560px);\n height: auto;\n margin-top: 16px;\n border: 1px solid var(--se-border);\n border-radius: 8px;\n}\n.se-import-help ol {\n margin: 16px 0 0;\n padding-left: 18px;\n font-size: 15px;\n line-height: 1.7;\n}\n.se-import-help a {\n color: var(--primary);\n font-weight: 700;\n}\n.se-import-help--info {\n align-items: center;\n}\n.se-import-section-title {\n display: flex;\n gap: 1rem;\n margin-bottom: 1.5rem;\n}\n.se-import-section-title__num {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 46px;\n height: 46px;\n border: 1px solid var(--se-purple);\n border-radius: 50%;\n font-size: 1.5rem;\n font-weight: 800;\n}\n.se-import-section-title__content {\n display: flex;\n flex-direction: column;\n justify-content: center;\n}\n.se-import-section-title h3 {\n font-size: 18px;\n font-weight: 800;\n}\n.se-import-section-title p {\n margin-top: 4px;\n color: var(--se-muted);\n font-size: 14px;\n}\n.se-import-grid {\n display: grid;\n gap: 8px;\n margin-top: 10px;\n}\n.se-import-grid--four {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n}\n.se-import-grid--stats {\n grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));\n}\n.se-import-grid--two {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n}\n.se-import-stat {\n min-height: 116px;\n border: 1px solid rgba(255, 255, 255, 0.06);\n border-radius: 8px;\n background:\n linear-gradient(\n 135deg,\n rgba(42, 47, 92, 0.9),\n rgba(33, 38, 78, 0.9));\n padding: 24px 22px;\n}\n.se-import-stat--success {\n background:\n linear-gradient(\n 135deg,\n rgba(12, 91, 86, 0.72),\n rgba(32, 65, 76, 0.8));\n border-color: rgba(19, 201, 126, 0.25);\n}\n.se-import-stat--info {\n border-color: rgba(116, 104, 255, 0.8);\n box-shadow: inset 3px 0 0 #6e76ff;\n}\n.se-import-stat--warn,\n.se-import-stat--muted {\n box-shadow: inset 3px 0 0 var(--se-warn);\n}\n.se-import-stat__label {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--se-muted);\n font-size: 12px;\n font-weight: 800;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n}\n.se-import-stat__icon {\n width: 20px;\n height: 20px;\n object-fit: contain;\n}\n.se-import-stat__value {\n margin-top: 12px;\n color: #fff;\n font-size: 30px;\n font-weight: 800;\n line-height: 1;\n}\n.se-import-stat__description {\n margin-top: 10px;\n color: var(--se-muted);\n font-size: 13px;\n line-height: 1.35;\n}\n.se-import-stat__sub {\n margin-top: 8px;\n color: var(--se-muted);\n font-size: 13px;\n}\n.se-import-mode-card__icon {\n display: grid;\n width: 46px;\n height: 46px;\n place-items: center;\n border-radius: 12px;\n background: rgba(255, 255, 255, 0.08);\n}\n.se-import-mode-card__icon img {\n width: 30px;\n height: 30px;\n object-fit: contain;\n}\n.se-import-mode-card__features {\n display: grid;\n gap: 6px;\n margin: 0;\n padding-left: 18px;\n}\n.se-import-overlay-progress {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n align-items: center;\n max-width: min(760px, 100%);\n width: 100%;\n gap: 14px;\n padding: 4px 2px 0;\n}\n.se-import-overlay-progress__copy {\n min-width: 0;\n color: var(--se-text);\n font-size: 13px;\n font-weight: 700;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.se-import-overlay-progress__strip,\n.se-import-overlay-progress__stack {\n display: flex;\n align-items: center;\n}\n.se-import-overlay-progress__strip {\n gap: 7px;\n}\n.se-import-overlay-progress__stack {\n margin-right: 5px;\n}\n.se-import-overlay-progress__stack--queued {\n margin-right: 0;\n margin-left: 5px;\n}\n.se-import-overlay-progress__stack .se-import-overlay-progress__item {\n margin-left: -16px;\n}\n.se-import-overlay-progress__stack .se-import-overlay-progress__item:first-child {\n margin-left: 0;\n}\n.se-import-overlay-progress__item {\n position: relative;\n width: 50px;\n height: 36px;\n flex: 0 0 auto;\n overflow: hidden;\n border: 1px solid var(--se-border);\n border-radius: 6px;\n background: var(--se-panel-2);\n opacity: 0.72;\n}\n.se-import-overlay-progress__item img,\n.se-import-overlay-progress__placeholder {\n display: block;\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n.se-import-overlay-progress__item--current {\n border-color: var(--se-primary);\n box-shadow: 0 0 0 1px var(--se-primary);\n opacity: 1;\n z-index: 3;\n}\n.se-import-overlay-progress__item--done {\n opacity: 1;\n}\n.se-import-overlay-progress__item--queued {\n opacity: 0.64;\n}\n.se-import-overlay-progress__more {\n display: grid;\n min-width: 28px;\n height: 24px;\n place-items: center;\n border-radius: 999px;\n background: rgba(255, 255, 255, 0.08);\n color: var(--se-muted);\n font-size: 12px;\n font-weight: 800;\n}\n.se-import-overlay-progress__check {\n position: absolute;\n right: 3px;\n bottom: 3px;\n display: grid;\n width: 16px;\n height: 16px;\n place-items: center;\n border-radius: 50%;\n background: var(--se-green);\n color: #fff;\n font-size: 11px;\n font-weight: 900;\n line-height: 1;\n}\n.se-import-option {\n display: grid;\n grid-template-columns: auto minmax(0, 1fr) auto auto;\n align-items: center;\n gap: 18px;\n border: 1px solid var(--se-purple);\n border-radius: 12px;\n background:\n linear-gradient(\n 135deg,\n rgba(35, 39, 81, 0.95),\n rgba(31, 35, 73, 0.95));\n box-shadow: inset 3px 0 0 var(--se-primary);\n cursor: pointer;\n padding: 22px;\n margin-bottom: 1rem;\n}\n.se-import-option--disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n.se-import-option__icon {\n display: grid;\n width: 40px;\n height: 40px;\n place-items: center;\n border-radius: 12px;\n background: rgba(255, 64, 118, 0.12);\n}\n.se-import-option__icon img {\n width: 24px;\n height: 24px;\n object-fit: contain;\n}\n.se-import-option__body {\n display: grid;\n gap: 8px;\n min-width: 0;\n}\n.se-import-option__title {\n font-size: 17px;\n font-weight: 800;\n}\n.se-import-option__copy {\n color: var(--se-muted);\n font-size: 14px;\n line-height: 1.45;\n}\n.se-import-option__count {\n color: #fff;\n font-size: 16px;\n}\n.se-import-option input {\n position: absolute;\n opacity: 0;\n pointer-events: none;\n}\n.se-import-toggle {\n position: relative;\n width: 48px;\n height: 28px;\n border-radius: 999px;\n box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.14);\n}\n.se-import-toggle::after {\n position: absolute;\n top: 4px;\n left: 4px;\n width: 20px;\n height: 20px;\n border-radius: 50%;\n background: #fff;\n content: "";\n transition: transform 160ms ease;\n}\n.se-import-option input:checked + .se-import-toggle {\n background: var(--primary);\n}\n.se-import-option input:checked + .se-import-toggle::after {\n transform: translateX(20px);\n}\n.se-import-advanced {\n margin-top: 26px;\n border-radius: 10px;\n background: rgba(32, 36, 73, 0.7);\n padding: 24px;\n}\n.se-import-advanced summary {\n cursor: pointer;\n font-size: 18px;\n font-weight: 700;\n}\n.se-import-advanced p {\n margin-top: 10px;\n color: var(--se-muted);\n}\n.se-import-transfer {\n position: relative;\n display: grid;\n width: min(720px, 100%);\n min-height: 190px;\n grid-template-columns: 180px minmax(260px, 1fr) 180px;\n align-items: center;\n gap: 28px;\n margin: 0 auto 60px;\n}\n.se-import-transfer__source {\n position: relative;\n display: grid;\n width: 160px;\n height: 160px;\n place-items: center;\n animation: se-import-source-bounce 1.8s ease-in-out infinite;\n}\n.se-import-transfer--complete .se-import-transfer__source {\n animation: none;\n}\n.se-import-transfer__source::before {\n top: -13px;\n left: -13px;\n box-shadow: 155px 0 0 var(--se-primary);\n}\n.se-import-transfer__source::after {\n bottom: -13px;\n left: -13px;\n box-shadow: 155px 0 0 var(--se-primary);\n}\n.se-import-transfer__source img {\n width: 192px;\n height: 192px;\n object-fit: contain;\n}\n.se-import-transfer__source--lumia {\n animation-delay: 0.22s;\n}\n.se-import-transfer__files {\n position: relative;\n height: 130px;\n}\n.se-import-transfer__file {\n position: absolute;\n top: 50%;\n left: -18px;\n width: 56px;\n height: 66px;\n object-fit: contain;\n transform: translateY(-50%);\n filter: drop-shadow(0 10px 12px rgba(8, 9, 25, 0.25));\n animation: se-import-file-fly 2.4s cubic-bezier(0.35, 0, 0.25, 1) infinite;\n}\n.se-import-transfer--complete .se-import-transfer__file {\n display: none;\n}\n.se-import-transfer__done {\n position: absolute;\n right: -8px;\n bottom: -8px;\n display: grid;\n width: 34px;\n height: 34px;\n place-items: center;\n border-radius: 50%;\n background: var(--se-green);\n color: #fff;\n font-size: 20px;\n font-weight: 900;\n box-shadow: 0 10px 20px rgba(6, 201, 111, 0.26);\n}\n.se-import-transfer__file--one {\n animation-delay: 0s;\n}\n.se-import-transfer__file--two {\n animation-delay: 0.38s;\n}\n.se-import-transfer__file--three {\n animation-delay: 0.76s;\n}\n.se-import-transfer__file--four {\n animation-delay: 1.14s;\n}\n@keyframes se-import-source-bounce {\n 0%, 100% {\n transform: translateY(0) scale(1);\n }\n 50% {\n transform: translateY(-8px) scale(1.025);\n }\n}\n@keyframes se-import-file-fly {\n 0% {\n opacity: 0;\n transform: translate(-10px, -50%) scale(0.82) rotate(-8deg);\n }\n 12% {\n opacity: 1;\n }\n 45% {\n transform: translate(145px, calc(-50% - 18px)) scale(1.08) rotate(5deg);\n }\n 82% {\n opacity: 1;\n }\n 100% {\n opacity: 0;\n transform: translate(330px, -50%) scale(0.9) rotate(10deg);\n }\n}\n.se-import-mirror-head {\n display: grid;\n grid-template-columns: minmax(220px, auto) minmax(180px, 1fr) auto;\n align-items: center;\n gap: 14px;\n}\n.se-import-mirror-head p {\n margin-top: 14px;\n color: var(--se-muted);\n font-size: 16px;\n}\n.se-import-mirror-head span {\n flex: 0 0 auto;\n color: var(--se-muted);\n font-weight: 700;\n}\n.se-import-mirror-head strong {\n color: var(--se-text);\n font-size: 14px;\n}\n.se-import-progress {\n width: 100%;\n height: 14px;\n margin-top: 0;\n overflow: hidden;\n border: 0;\n border-radius: 999px;\n background: rgba(255, 64, 118, 0.1);\n}\n.se-import-progress::-webkit-progress-bar {\n background: rgba(255, 64, 118, 0.1);\n}\n.se-import-progress::-webkit-progress-value {\n border-radius: 999px;\n background:\n linear-gradient(\n 90deg,\n #ff4076,\n #e7295f);\n}\n.se-import-progress::-moz-progress-bar {\n border-radius: 999px;\n background:\n linear-gradient(\n 90deg,\n #ff4076,\n #e7295f);\n}\n.se-import-asset-list {\n margin-top: 22px;\n border-top: 1px solid rgba(255, 255, 255, 0.08);\n}\n.se-import-asset-row {\n display: grid;\n grid-template-columns: 32px minmax(0, 1fr) auto auto;\n align-items: center;\n gap: 14px;\n min-height: 42px;\n border-bottom: 1px solid rgba(255, 255, 255, 0.08);\n color: var(--se-muted);\n font-size: 13px;\n}\n.se-import-asset-row__icon {\n width: 24px;\n height: 28px;\n justify-self: end;\n object-fit: contain;\n}\n.se-import-asset-row__url {\n overflow: hidden;\n font-family:\n ui-monospace,\n SFMono-Regular,\n Menlo,\n Monaco,\n Consolas,\n monospace;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.se-import-asset-row__state {\n color: #9b8cff;\n font-weight: 800;\n}\n.se-import-asset-row--done .se-import-asset-row__state,\n.se-import-asset-row--reused .se-import-asset-row__state {\n color: var(--se-green);\n}\n.se-import-asset-row--failed .se-import-asset-row__state,\n.se-import-asset-row__error {\n color: #ff8080;\n}\n.se-import-link-button {\n border: 0;\n background: transparent;\n color: #ff9ab6;\n cursor: pointer;\n font: inherit;\n font-weight: 800;\n}\n.se-import-overview {\n margin-top: 28px;\n border: 1px solid var(--se-border);\n border-radius: 12px;\n background: rgba(26, 30, 61, 0.62);\n padding: 28px;\n}\n.se-import-overview h3 {\n margin-bottom: 18px;\n font-size: 18px;\n font-weight: 800;\n}\n.se-import-row {\n display: grid;\n grid-template-columns: 190px minmax(0, 1fr) auto;\n gap: 18px;\n align-items: center;\n min-height: 48px;\n border-top: 1px solid rgba(255, 255, 255, 0.08);\n color: var(--se-muted);\n}\n.se-import-row strong {\n min-width: 0;\n overflow: hidden;\n color: var(--se-text);\n font-weight: 600;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.se-import-row em {\n color: var(--se-muted);\n font-style: normal;\n}\n.se-import-review-card {\n display: flex;\n justify-content: space-between;\n gap: 18px;\n border: 1px solid var(--se-border);\n border-radius: 10px;\n background: rgba(30, 34, 71, 0.8);\n padding: 20px;\n}\n.se-import-review-card__type {\n font-family:\n ui-monospace,\n SFMono-Regular,\n Menlo,\n Monaco,\n Consolas,\n monospace;\n font-weight: 800;\n}\n.se-import-review-card p {\n margin-top: 8px;\n color: var(--se-muted);\n line-height: 1.45;\n}\n.se-import-review-card__status {\n flex: 0 0 auto;\n color: #facc15;\n font-size: 11px;\n font-weight: 800;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n}\n.se-import-review-bulk,\n.se-import-actions--inline {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: flex-end;\n gap: 10px;\n margin-top: 16px;\n}\n.se-import-muted {\n margin-top: 16px;\n color: var(--se-muted);\n font-size: 13px;\n}\n.se-import-generated {\n display: grid;\n gap: 12px;\n margin-top: 18px;\n}\n.se-import-generated__title {\n font-weight: 800;\n}\n.se-import-preview {\n width: 100%;\n height: 260px;\n border: 1px solid var(--se-border);\n border-radius: 8px;\n background: repeating-conic-gradient(#1a1c20 0% 25%, #1d1f24 0% 50%) 50% / 20px 20px;\n}\n.se-import-code {\n margin-top: 16px;\n}\n.se-import-code summary {\n cursor: pointer;\n color: var(--se-muted);\n font-size: 13px;\n}\n.se-import-code pre {\n max-height: 220px;\n margin: 10px 0 0;\n overflow: auto;\n border-radius: 8px;\n background: rgba(0, 0, 0, 0.28);\n padding: 12px;\n color: #d8dcff;\n font-size: 12px;\n}\n.se-import-error {\n margin-top: 18px;\n border: 1px solid rgba(239, 68, 68, 0.45);\n border-radius: 8px;\n background: rgba(220, 38, 38, 0.12);\n padding: 12px;\n color: #fca5a5;\n}\n.se-import-error__title {\n font-weight: 800;\n}\n.se-import-error__hint {\n margin-top: 6px;\n white-space: pre-wrap;\n}\n.se-import-actions {\n display: flex;\n justify-content: flex-end;\n gap: 12px;\n margin-top: 8px;\n}\nfooter.se-import-actions:not(.se-import-actions--inline) {\n margin: 0;\n padding: 0;\n}\n@media (max-height: 760px) {\n footer.se-import-actions:not(.se-import-actions--inline) {\n margin: 0;\n padding: 0;\n }\n}\n@media (max-width: 900px) {\n .se-import__shell {\n min-height: 0;\n padding: 24px 18px;\n }\n .se-import__content {\n min-height: 0;\n padding-top: 32px;\n }\n .se-import-stepper {\n grid-template-columns: repeat(auto-fit, minmax(70px, 1fr));\n }\n .se-import-step__label {\n font-size: 13px;\n }\n .se-import-grid--four,\n .se-import-grid--two,\n .se-import-transfer {\n grid-template-columns: 1fr;\n }\n .se-import-transfer {\n justify-items: center;\n }\n .se-import-transfer__files {\n width: min(360px, 100%);\n }\n .se-import-option,\n .se-import-row,\n .se-import-asset-row {\n grid-template-columns: 1fr;\n }\n .se-import-mirror-head,\n .se-import-review-card {\n align-items: flex-start;\n flex-direction: column;\n }\n}\n');
4682
4742
 
4683
4743
  // src/assets/source_se.svg
4684
4744
  var source_se_default = 'data:image/svg+xml,<svg width="157" height="164" viewBox="0 0 157 164" fill="none" xmlns="http://www.w3.org/2000/svg">%0A<rect x="8.5" y="9.5" width="139" height="145" fill="%23242444" stroke="%23FF4076" stroke-width="3"/>%0A<path d="M87.1229 44.9224L89.0788 48.7235C102.041 53.3686 110.947 65.8756 110.947 79.7241C110.947 97.8858 96.1663 112.658 77.9929 112.658C59.8196 112.658 45.0457 97.8858 45.0457 79.7241C45.0457 65.8684 53.9519 53.3686 66.9143 48.7235L68.8702 44.9296C53.1725 49.0337 42 63.3222 42 79.7241C42 99.5592 58.1524 115.701 78.0001 115.701C97.8479 115.701 114 99.5592 114 79.7241C114 63.3222 102.828 49.0265 87.1229 44.9224Z" fill="url(%23paint0_linear_1424_495)"/>%0A<mask id="mask0_1424_495" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="47" y="48" width="62" height="63">%0A<path d="M77.9986 110.386C94.991 110.386 108.766 96.6196 108.766 79.638C108.766 62.6563 94.991 48.8899 77.9986 48.8899C61.0061 48.8899 47.231 62.6563 47.231 79.638C47.231 96.6196 61.0061 110.386 77.9986 110.386Z" fill="white"/>%0A</mask>%0A<g mask="url(%23mask0_1424_495)">%0A<path d="M108.825 78.9093C108.651 81.2463 105.036 90.9619 100.59 90.9619C98.7853 90.9619 98.3812 88.322 98.0853 86.3602C97.2841 89.4905 91.7629 96.2563 87.6706 96.2563C80.2295 96.2563 78.4974 80.5683 77.9921 78.4766C77.4869 80.561 75.7548 96.2563 68.3137 96.2563C64.2215 96.2563 58.7002 89.4977 57.8991 86.3602C57.6031 88.322 57.2062 90.9619 55.3947 90.9619C50.9487 90.9619 47.3328 81.2463 47.1596 78.9093C46.207 80.3158 46.2214 85.9995 47.636 89.6419C52.3561 101.795 64.1782 110.429 77.9849 110.429C91.7917 110.429 103.614 101.795 108.334 89.6419C109.749 85.9995 109.763 80.3231 108.81 78.9093H108.825Z" fill="url(%23paint1_linear_1424_495)"/>%0A<path d="M77.9988 96.2998C79.2258 98.5497 81.8961 101.918 86.4719 101.918C91.0478 101.918 94.6059 97.2014 95.7968 95.2105C95.4143 96.6097 94.642 99.6032 97.132 99.6032C102.841 99.6032 106.969 90.5798 106.969 90.5798C102.466 102.178 91.1777 110.422 77.9988 110.422C64.8199 110.422 53.532 102.178 49.0283 90.5798C49.0283 90.5798 53.1567 99.6032 58.8656 99.6032C61.3628 99.6032 60.5833 96.6021 60.2008 95.2105C61.3917 97.2014 64.8343 101.918 69.5257 101.918C74.1014 101.918 76.7646 98.5428 77.9988 96.2998Z" fill="url(%23paint2_linear_1424_495)"/>%0A<path d="M85.2523 106.419C82.4448 106.419 80.2579 105.546 77.9989 104.14C75.7399 105.539 73.553 106.419 70.7455 106.419C66.4656 106.419 65.1664 105.157 63.6147 104.003C63.658 105.474 65.1592 107.552 66.7109 108.301C70.1537 109.817 74.0221 110.422 77.9989 110.422C81.9756 110.422 85.8442 109.809 89.2868 108.301C90.8385 107.544 92.3326 105.474 92.3831 104.003C90.8313 105.157 89.5323 106.419 85.2523 106.419Z" fill="url(%23paint3_linear_1424_495)"/>%0A</g>%0A<path d="M73.8428 64.7073L69.4257 74.0622C69.2453 74.4446 69.1804 74.8773 69.2525 75.3029L70.6527 83.7562C70.696 84.0303 71.1002 84.0303 71.1435 83.7562L71.9013 79.1473C72.2116 77.2359 73.2292 75.5048 74.7522 74.3003L73.8428 64.7001V64.7073Z" fill="%23FF4800"/>%0A<path d="M82.1584 64.7073L86.5755 74.0622C86.7559 74.4446 86.8208 74.8773 86.7487 75.3029L85.3485 83.7634C85.3052 84.0376 84.9082 84.0376 84.8577 83.7634L84.0999 79.1473C83.7896 77.2359 82.7719 75.5048 81.249 74.3003L82.1584 64.7001V64.7073Z" fill="%23FF4800"/>%0A<path d="M84.5241 50.0291L78.4687 38.2867C78.2739 37.9044 77.7326 37.9044 77.5305 38.2867L71.4751 50.0219C71.2226 50.5052 71.1287 51.0606 71.2081 51.5943L74.261 73.0451L73.8063 75.0503L75.4158 79.4645C75.4519 79.5655 75.5457 79.6304 75.6468 79.6304H80.3308C80.4319 79.6304 80.5257 79.5655 80.5618 79.4645L82.1712 75.0503L81.7165 73.0451L84.7695 51.5943C84.8489 51.0534 84.7551 50.5052 84.5024 50.0219L84.5241 50.0291Z" fill="url(%23paint4_linear_1424_495)"/>%0A<path d="M77.7905 69.5107L75.6397 74.8265C75.3077 75.6488 75.2427 76.5576 75.4593 77.4159L77.7544 86.605C77.8193 86.8575 78.1802 86.8575 78.2379 86.605L80.5331 77.4159C80.7495 76.5576 80.6846 75.6488 80.3526 74.8265L78.2019 69.5107C78.1225 69.3232 77.8554 69.3232 77.7832 69.5107H77.7905Z" fill="%23FF4800"/>%0A<rect width="15" height="16" fill="%23FF4076"/>%0A<rect y="148" width="15" height="16" fill="%23FF4076"/>%0A<rect x="142" width="15" height="16" fill="%23FF4076"/>%0A<rect x="142" y="148" width="15" height="16" fill="%23FF4076"/>%0A<defs>%0A<linearGradient id="paint0_linear_1424_495" x1="78.0001" y1="24.4742" x2="78.0001" y2="138.609" gradientUnits="userSpaceOnUse">%0A<stop offset="0.3" stop-color="%2300ADFF"/>%0A<stop offset="1" stop-color="%231542FF"/>%0A</linearGradient>%0A<linearGradient id="paint1_linear_1424_495" x1="77.9993" y1="79.7965" x2="77.9993" y2="120.816" gradientUnits="userSpaceOnUse">%0A<stop stop-color="%23FCE3AD"/>%0A<stop offset="0.07" stop-color="%23FCE2A4"/>%0A<stop offset="0.19" stop-color="%23FCE08B"/>%0A<stop offset="0.33" stop-color="%23FCDD64"/>%0A<stop offset="0.48" stop-color="%23FCDA32"/>%0A<stop offset="0.66" stop-color="%23F9BC22"/>%0A<stop offset="1" stop-color="%23F57700"/>%0A</linearGradient>%0A<linearGradient id="paint2_linear_1424_495" x1="77.9988" y1="90.2913" x2="77.9988" y2="113.603" gradientUnits="userSpaceOnUse">%0A<stop stop-color="%23FCD619"/>%0A<stop offset="0.35" stop-color="%23F9B811"/>%0A<stop offset="1" stop-color="%23F57700"/>%0A</linearGradient>%0A<linearGradient id="paint3_linear_1424_495" x1="77.9989" y1="101.947" x2="77.9989" y2="112.694" gradientUnits="userSpaceOnUse">%0A<stop stop-color="%23F57700"/>%0A<stop offset="1" stop-color="%23FF4800"/>%0A</linearGradient>%0A<linearGradient id="paint4_linear_1424_495" x1="77.9996" y1="38.0054" x2="77.9996" y2="92.2167" gradientUnits="userSpaceOnUse">%0A<stop stop-color="%23E4E4E4"/>%0A<stop offset="0.88" stop-color="%23B6B8B8"/>%0A</linearGradient>%0A</defs>%0A</svg>%0A';
package/package.json CHANGED
@@ -1,136 +1,136 @@
1
1
  {
2
- "name": "@lumiastream/ui",
3
- "version": "0.2.8-alpha.19",
4
- "author": "Lumia Stream",
5
- "license": "ISC",
6
- "description": "Lumia UI Kit",
7
- "packageManager": "npm@11.9.0",
8
- "type": "module",
9
- "main": "dist/index.js",
10
- "module": "dist/index.js",
11
- "types": "dist/index.d.ts",
12
- "files": [
13
- "dist"
14
- ],
15
- "exports": {
16
- ".": {
17
- "types": "./dist/index.d.ts",
18
- "import": "./dist/index.js"
19
- },
20
- "./components": {
21
- "types": "./dist/components.d.ts",
22
- "import": "./dist/components.js"
23
- },
24
- "./LSButton": {
25
- "types": "./dist/LSButton.d.ts",
26
- "import": "./dist/LSButton.js"
27
- },
28
- "./LSCheckbox": {
29
- "types": "./dist/LSCheckbox.d.ts",
30
- "import": "./dist/LSCheckbox.js"
31
- },
32
- "./LSColorPicker": {
33
- "types": "./dist/LSColorPicker.d.ts",
34
- "import": "./dist/LSColorPicker.js"
35
- },
36
- "./LSDatePicker": {
37
- "types": "./dist/LSDatePicker.d.ts",
38
- "import": "./dist/LSDatePicker.js"
39
- },
40
- "./LSFontPicker": {
41
- "types": "./dist/LSFontPicker.d.ts",
42
- "import": "./dist/LSFontPicker.js"
43
- },
44
- "./LSInput": {
45
- "types": "./dist/LSInput.d.ts",
46
- "import": "./dist/LSInput.js"
47
- },
48
- "./LSMultiSelect": {
49
- "types": "./dist/LSMultiSelect.d.ts",
50
- "import": "./dist/LSMultiSelect.js"
51
- },
52
- "./LSRadio": {
53
- "types": "./dist/LSRadio.d.ts",
54
- "import": "./dist/LSRadio.js"
55
- },
56
- "./LSSelect": {
57
- "types": "./dist/LSSelect.d.ts",
58
- "import": "./dist/LSSelect.js"
59
- },
60
- "./LSSliderInput": {
61
- "types": "./dist/LSSliderInput.d.ts",
62
- "import": "./dist/LSSliderInput.js"
63
- },
64
- "./LSTextField": {
65
- "types": "./dist/LSTextField.d.ts",
66
- "import": "./dist/LSTextField.js"
67
- },
68
- "./LSVariableInputField": {
69
- "types": "./dist/LSVariableInputField.d.ts",
70
- "import": "./dist/LSVariableInputField.js"
71
- },
72
- "./utils": {
73
- "types": "./dist/utils.d.ts",
74
- "import": "./dist/utils.js"
75
- },
76
- "./utils/chatMedia": {
77
- "types": "./dist/utils/chatMedia.d.ts",
78
- "import": "./dist/utils/chatMedia.js"
79
- },
80
- "./se-import": {
81
- "types": "./dist/se-import.d.ts",
82
- "import": "./dist/se-import.js"
83
- }
84
- },
85
- "scripts": {
86
- "start": "storybook dev -p 6006",
87
- "build": "tsup",
88
- "build-storybook": "storybook build",
89
- "watch": "tsup --watch",
90
- "test": "vitest run",
91
- "test:watch": "vitest",
92
- "release": "changeset && changeset tag && npm run build && npm publish",
93
- "prepublishOnly": "npm run build",
94
- "postpublish": "npm cache clean --force && node ./scripts/postpublish-install.mjs"
95
- },
96
- "peerDependencies": {
97
- "@codemirror/autocomplete": "^6.0.0",
98
- "@emotion/react": "^11.14.0",
99
- "@emotion/styled": "^11.14.1",
100
- "@mui/icons-material": "^9.0.0",
101
- "@mui/material": "^9.0.0",
102
- "react": "^17.0.0 || ^18.0.0 || ^19.0.0",
103
- "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0",
104
- "react-hook-form": "^7.62.0"
105
- },
106
- "devDependencies": {
107
- "@codemirror/autocomplete": "^6.20.1",
108
- "@emotion/react": "^11.14.0",
109
- "@emotion/styled": "^11.14.1",
110
- "@mui/icons-material": "^9.0.0",
111
- "@mui/material": "^9.0.0",
112
- "@storybook/builder-vite": "^10.2.17",
113
- "@storybook/react-vite": "^10.2.17",
114
- "@types/node": "^25.5.0",
115
- "@types/react": "^19.2.14",
116
- "@types/react-dom": "19.2.3",
117
- "postcss": "^8.5.14",
118
- "react": "^19.2.0",
119
- "react-dom": "^19.2.0",
120
- "react-hook-form": "^7.73.1",
121
- "sass-embedded": "^1.99.0",
122
- "storybook": "^10.2.17",
123
- "tsup": "^8.5.1",
124
- "typescript": "^5.9.3",
125
- "vite": "^8.0.8",
126
- "vitest": "^4.1.6"
127
- },
128
- "dependencies": {
129
- "@lumiastream/lumia-translations": "1.15.7",
130
- "@lumiastream/lumia-types": "^3.3.7-alpha.2",
131
- "classnames": "^2.5.1",
132
- "globals": "^17.4.0",
133
- "nanoid": "^5.1.11",
134
- "react-best-gradient-color-picker": "^3.0.14"
135
- }
2
+ "name": "@lumiastream/ui",
3
+ "version": "0.2.8-alpha.20",
4
+ "author": "Lumia Stream",
5
+ "license": "ISC",
6
+ "description": "Lumia UI Kit",
7
+ "packageManager": "npm@11.9.0",
8
+ "type": "module",
9
+ "main": "dist/index.js",
10
+ "module": "dist/index.js",
11
+ "types": "dist/index.d.ts",
12
+ "files": [
13
+ "dist"
14
+ ],
15
+ "exports": {
16
+ ".": {
17
+ "types": "./dist/index.d.ts",
18
+ "import": "./dist/index.js"
19
+ },
20
+ "./components": {
21
+ "types": "./dist/components.d.ts",
22
+ "import": "./dist/components.js"
23
+ },
24
+ "./LSButton": {
25
+ "types": "./dist/LSButton.d.ts",
26
+ "import": "./dist/LSButton.js"
27
+ },
28
+ "./LSCheckbox": {
29
+ "types": "./dist/LSCheckbox.d.ts",
30
+ "import": "./dist/LSCheckbox.js"
31
+ },
32
+ "./LSColorPicker": {
33
+ "types": "./dist/LSColorPicker.d.ts",
34
+ "import": "./dist/LSColorPicker.js"
35
+ },
36
+ "./LSDatePicker": {
37
+ "types": "./dist/LSDatePicker.d.ts",
38
+ "import": "./dist/LSDatePicker.js"
39
+ },
40
+ "./LSFontPicker": {
41
+ "types": "./dist/LSFontPicker.d.ts",
42
+ "import": "./dist/LSFontPicker.js"
43
+ },
44
+ "./LSInput": {
45
+ "types": "./dist/LSInput.d.ts",
46
+ "import": "./dist/LSInput.js"
47
+ },
48
+ "./LSMultiSelect": {
49
+ "types": "./dist/LSMultiSelect.d.ts",
50
+ "import": "./dist/LSMultiSelect.js"
51
+ },
52
+ "./LSRadio": {
53
+ "types": "./dist/LSRadio.d.ts",
54
+ "import": "./dist/LSRadio.js"
55
+ },
56
+ "./LSSelect": {
57
+ "types": "./dist/LSSelect.d.ts",
58
+ "import": "./dist/LSSelect.js"
59
+ },
60
+ "./LSSliderInput": {
61
+ "types": "./dist/LSSliderInput.d.ts",
62
+ "import": "./dist/LSSliderInput.js"
63
+ },
64
+ "./LSTextField": {
65
+ "types": "./dist/LSTextField.d.ts",
66
+ "import": "./dist/LSTextField.js"
67
+ },
68
+ "./LSVariableInputField": {
69
+ "types": "./dist/LSVariableInputField.d.ts",
70
+ "import": "./dist/LSVariableInputField.js"
71
+ },
72
+ "./utils": {
73
+ "types": "./dist/utils.d.ts",
74
+ "import": "./dist/utils.js"
75
+ },
76
+ "./utils/chatMedia": {
77
+ "types": "./dist/utils/chatMedia.d.ts",
78
+ "import": "./dist/utils/chatMedia.js"
79
+ },
80
+ "./se-import": {
81
+ "types": "./dist/se-import.d.ts",
82
+ "import": "./dist/se-import.js"
83
+ }
84
+ },
85
+ "scripts": {
86
+ "start": "storybook dev -p 6006",
87
+ "build": "tsup",
88
+ "build-storybook": "storybook build",
89
+ "watch": "tsup --watch",
90
+ "test": "vitest run",
91
+ "test:watch": "vitest",
92
+ "release": "changeset && changeset tag && npm run build && npm publish",
93
+ "prepublishOnly": "npm run build",
94
+ "postpublish": "npm cache clean --force && node ./scripts/postpublish-install.mjs"
95
+ },
96
+ "peerDependencies": {
97
+ "@codemirror/autocomplete": "^6.0.0",
98
+ "@emotion/react": "^11.14.0",
99
+ "@emotion/styled": "^11.14.1",
100
+ "@mui/icons-material": "^9.0.0",
101
+ "@mui/material": "^9.0.0",
102
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0",
103
+ "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0",
104
+ "react-hook-form": "^7.62.0"
105
+ },
106
+ "devDependencies": {
107
+ "@codemirror/autocomplete": "^6.20.1",
108
+ "@emotion/react": "^11.14.0",
109
+ "@emotion/styled": "^11.14.1",
110
+ "@mui/icons-material": "^9.0.0",
111
+ "@mui/material": "^9.0.0",
112
+ "@storybook/builder-vite": "^10.2.17",
113
+ "@storybook/react-vite": "^10.2.17",
114
+ "@types/node": "^25.5.0",
115
+ "@types/react": "^19.2.14",
116
+ "@types/react-dom": "19.2.3",
117
+ "postcss": "^8.5.14",
118
+ "react": "^19.2.0",
119
+ "react-dom": "^19.2.0",
120
+ "react-hook-form": "^7.73.1",
121
+ "sass-embedded": "^1.99.0",
122
+ "storybook": "^10.2.17",
123
+ "tsup": "^8.5.1",
124
+ "typescript": "^5.9.3",
125
+ "vite": "^8.0.8",
126
+ "vitest": "^4.1.6"
127
+ },
128
+ "dependencies": {
129
+ "@lumiastream/lumia-translations": "1.15.7",
130
+ "@lumiastream/lumia-types": "^3.3.7-alpha.2",
131
+ "classnames": "^2.5.1",
132
+ "globals": "^17.4.0",
133
+ "nanoid": "^5.1.11",
134
+ "react-best-gradient-color-picker": "^3.0.14"
135
+ }
136
136
  }