sa2kit 1.6.12 → 1.6.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  import { useMusic } from '../chunk-CDK3DHKM.mjs';
2
2
  import '../chunk-ZCLAF3XN.mjs';
3
3
  import '../chunk-BJTO5JO5.mjs';
4
- import React21, { forwardRef, useRef, useEffect, useImperativeHandle, useState, useCallback } from 'react';
4
+ import React24, { forwardRef, useRef, useEffect, useImperativeHandle, useState, useCallback } from 'react';
5
5
  import * as THREE3 from 'three';
6
6
  import { OutlineEffect, OrbitControls, MMDLoader, MMDAnimationHelper } from 'three-stdlib';
7
7
  import { AlertCircle, Camera, Settings, RefreshCw, CameraOff, X, Check, SkipBack, Pause, Play, SkipForward, Repeat, Repeat1, Shuffle, ListMusic, Music, Search, Loader2, Grid3x3, Minimize, Maximize, Video, User, Image as Image$1 } from 'lucide-react';
@@ -2091,7 +2091,7 @@ var MMDPlayerBase = forwardRef((props, ref) => {
2091
2091
  durationRef.current = animation.duration;
2092
2092
  }
2093
2093
  mesh.castShadow = true;
2094
- mesh.receiveShadow = true;
2094
+ mesh.receiveShadow = false;
2095
2095
  const tempScene = new THREE3.Scene();
2096
2096
  tempScene.add(mesh);
2097
2097
  await waitForMaterialsReady(mesh, renderer, tempScene, camera);
@@ -2271,7 +2271,7 @@ var MMDPlayerBase = forwardRef((props, ref) => {
2271
2271
  let stageMaterialCount = 0;
2272
2272
  stageMesh.traverse((child) => {
2273
2273
  if (child instanceof THREE3.Mesh) {
2274
- child.castShadow = true;
2274
+ child.castShadow = false;
2275
2275
  child.receiveShadow = true;
2276
2276
  const mesh2 = child;
2277
2277
  const materials = Array.isArray(mesh2.material) ? mesh2.material : [mesh2.material];
@@ -2865,7 +2865,7 @@ ${errorMessage}
2865
2865
  }
2866
2866
  }
2867
2867
  };
2868
- return /* @__PURE__ */ React21.createElement(
2868
+ return /* @__PURE__ */ React24.createElement(
2869
2869
  "div",
2870
2870
  {
2871
2871
  ref: containerRef,
@@ -2904,78 +2904,78 @@ var ControlPanel = ({
2904
2904
  onNext,
2905
2905
  onResetCamera
2906
2906
  }) => {
2907
- return /* @__PURE__ */ React21.createElement("div", { className: "absolute bottom-0 left-0 right-0 bg-gradient-to-t from-black/80 to-transparent p-4 transition-opacity duration-300 hover:opacity-100" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between text-white" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-2" }, showPrevNext && onPrevious && /* @__PURE__ */ React21.createElement(
2907
+ return /* @__PURE__ */ React24.createElement("div", { className: "absolute bottom-0 left-0 right-0 bg-gradient-to-t from-black/80 to-transparent p-4 transition-opacity duration-300 hover:opacity-100" }, /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between text-white" }, /* @__PURE__ */ React24.createElement("div", { className: "flex items-center gap-2" }, showPrevNext && onPrevious && /* @__PURE__ */ React24.createElement(
2908
2908
  "button",
2909
2909
  {
2910
2910
  onClick: onPrevious,
2911
2911
  className: "rounded-full p-2 hover:bg-white/20 transition-colors",
2912
2912
  title: "\u4E0A\u4E00\u4E2A"
2913
2913
  },
2914
- /* @__PURE__ */ React21.createElement(SkipBack, { size: 20 })
2915
- ), /* @__PURE__ */ React21.createElement(
2914
+ /* @__PURE__ */ React24.createElement(SkipBack, { size: 20 })
2915
+ ), /* @__PURE__ */ React24.createElement(
2916
2916
  "button",
2917
2917
  {
2918
2918
  onClick: onPlayPause,
2919
2919
  className: "rounded-full p-2 hover:bg-white/20 transition-colors",
2920
2920
  title: isPlaying ? "\u6682\u505C" : "\u64AD\u653E"
2921
2921
  },
2922
- isPlaying ? /* @__PURE__ */ React21.createElement(Pause, { size: 24 }) : /* @__PURE__ */ React21.createElement(Play, { size: 24 })
2923
- ), showPrevNext && onNext && /* @__PURE__ */ React21.createElement(
2922
+ isPlaying ? /* @__PURE__ */ React24.createElement(Pause, { size: 24 }) : /* @__PURE__ */ React24.createElement(Play, { size: 24 })
2923
+ ), showPrevNext && onNext && /* @__PURE__ */ React24.createElement(
2924
2924
  "button",
2925
2925
  {
2926
2926
  onClick: onNext,
2927
2927
  className: "rounded-full p-2 hover:bg-white/20 transition-colors",
2928
2928
  title: "\u4E0B\u4E00\u4E2A"
2929
2929
  },
2930
- /* @__PURE__ */ React21.createElement(SkipForward, { size: 20 })
2931
- )), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-4" }, (title || subtitle) && /* @__PURE__ */ React21.createElement("div", { className: "hidden text-sm font-medium opacity-80 md:block" }, title, subtitle && /* @__PURE__ */ React21.createElement("span", { className: "ml-2 text-xs opacity-60" }, subtitle)), onToggleListLoop && /* @__PURE__ */ React21.createElement(
2930
+ /* @__PURE__ */ React24.createElement(SkipForward, { size: 20 })
2931
+ )), /* @__PURE__ */ React24.createElement("div", { className: "flex items-center gap-4" }, (title || subtitle) && /* @__PURE__ */ React24.createElement("div", { className: "hidden text-sm font-medium opacity-80 md:block" }, title, subtitle && /* @__PURE__ */ React24.createElement("span", { className: "ml-2 text-xs opacity-60" }, subtitle)), onToggleListLoop && /* @__PURE__ */ React24.createElement(
2932
2932
  "button",
2933
2933
  {
2934
2934
  onClick: onToggleListLoop,
2935
2935
  className: `rounded-full p-2 transition-colors ${isListLooping ? "bg-green-500/30 hover:bg-green-500/50" : "hover:bg-white/20"}`,
2936
2936
  title: isListLooping ? "\u5217\u8868\u5FAA\u73AF\uFF1A\u5F00\u542F" : "\u5217\u8868\u5FAA\u73AF\uFF1A\u5173\u95ED"
2937
2937
  },
2938
- /* @__PURE__ */ React21.createElement(Repeat, { size: 20 })
2939
- ), /* @__PURE__ */ React21.createElement(
2938
+ /* @__PURE__ */ React24.createElement(Repeat, { size: 20 })
2939
+ ), /* @__PURE__ */ React24.createElement(
2940
2940
  "button",
2941
2941
  {
2942
2942
  onClick: onToggleLoop,
2943
2943
  className: `rounded-full p-2 transition-colors ${isLooping ? "bg-blue-500/30 hover:bg-blue-500/50" : "hover:bg-white/20"}`,
2944
2944
  title: isLooping ? "\u5355\u66F2\u5FAA\u73AF\uFF1A\u5F00\u542F" : "\u5355\u66F2\u5FAA\u73AF\uFF1A\u5173\u95ED"
2945
2945
  },
2946
- /* @__PURE__ */ React21.createElement(Repeat1, { size: 20 })
2947
- ), isCameraManual && onResetCamera && /* @__PURE__ */ React21.createElement(
2946
+ /* @__PURE__ */ React24.createElement(Repeat1, { size: 20 })
2947
+ ), isCameraManual && onResetCamera && /* @__PURE__ */ React24.createElement(
2948
2948
  "button",
2949
2949
  {
2950
2950
  onClick: onResetCamera,
2951
2951
  className: "rounded-full p-2 bg-blue-500/30 text-blue-400 hover:bg-blue-500/50 hover:text-blue-300 transition-all animate-in zoom-in duration-300",
2952
2952
  title: "\u6062\u590D\u521D\u59CB\u89C6\u89D2"
2953
2953
  },
2954
- /* @__PURE__ */ React21.createElement(Camera, { size: 20 })
2955
- ), onToggleAxes && /* @__PURE__ */ React21.createElement(
2954
+ /* @__PURE__ */ React24.createElement(Camera, { size: 20 })
2955
+ ), onToggleAxes && /* @__PURE__ */ React24.createElement(
2956
2956
  "button",
2957
2957
  {
2958
2958
  onClick: onToggleAxes,
2959
2959
  className: `rounded-full p-2 transition-colors ${showAxes ? "bg-blue-500/30 hover:bg-blue-500/50" : "hover:bg-white/20"}`,
2960
2960
  title: "\u663E\u793A/\u9690\u85CF\u5750\u6807\u8F74"
2961
2961
  },
2962
- /* @__PURE__ */ React21.createElement(Grid3x3, { size: 20 })
2963
- ), showSettings && /* @__PURE__ */ React21.createElement(
2962
+ /* @__PURE__ */ React24.createElement(Grid3x3, { size: 20 })
2963
+ ), showSettings && /* @__PURE__ */ React24.createElement(
2964
2964
  "button",
2965
2965
  {
2966
2966
  onClick: onOpenSettings,
2967
2967
  className: "rounded-full p-2 hover:bg-white/20 transition-colors",
2968
2968
  title: "\u8D44\u6E90\u8BBE\u7F6E"
2969
2969
  },
2970
- /* @__PURE__ */ React21.createElement(Settings, { size: 20 })
2971
- ), /* @__PURE__ */ React21.createElement(
2970
+ /* @__PURE__ */ React24.createElement(Settings, { size: 20 })
2971
+ ), /* @__PURE__ */ React24.createElement(
2972
2972
  "button",
2973
2973
  {
2974
2974
  onClick: onToggleFullscreen,
2975
2975
  className: "rounded-full p-2 hover:bg-white/20 transition-colors",
2976
2976
  title: isFullscreen ? "\u9000\u51FA\u5168\u5C4F" : "\u5168\u5C4F"
2977
2977
  },
2978
- isFullscreen ? /* @__PURE__ */ React21.createElement(Minimize, { size: 20 }) : /* @__PURE__ */ React21.createElement(Maximize, { size: 20 })
2978
+ isFullscreen ? /* @__PURE__ */ React24.createElement(Minimize, { size: 20 }) : /* @__PURE__ */ React24.createElement(Maximize, { size: 20 })
2979
2979
  ))));
2980
2980
  };
2981
2981
  var SettingsPanel = ({
@@ -2990,44 +2990,44 @@ var SettingsPanel = ({
2990
2990
  }) => {
2991
2991
  const renderListMode = () => {
2992
2992
  if (!items) return null;
2993
- return /* @__PURE__ */ React21.createElement("div", { className: "grid grid-cols-1 gap-2 p-4 sm:grid-cols-2" }, items.map((item) => /* @__PURE__ */ React21.createElement(
2993
+ return /* @__PURE__ */ React24.createElement("div", { className: "grid grid-cols-1 gap-2 p-4 sm:grid-cols-2" }, items.map((item) => /* @__PURE__ */ React24.createElement(
2994
2994
  "button",
2995
2995
  {
2996
2996
  key: item.id,
2997
2997
  onClick: () => onSelectId?.(item.id),
2998
2998
  className: `group flex items-center gap-3 rounded-lg p-3 transition-all ${currentId === item.id ? "bg-blue-500/20 ring-1 ring-blue-500" : "bg-white/5 hover:bg-white/10"}`
2999
2999
  },
3000
- /* @__PURE__ */ React21.createElement("div", { className: "flex h-12 w-12 flex-shrink-0 items-center justify-center rounded bg-black/20 overflow-hidden" }, item.thumbnail ? /* @__PURE__ */ React21.createElement("img", { src: item.thumbnail, alt: item.name, className: "h-full w-full object-cover" }) : /* @__PURE__ */ React21.createElement(Video, { size: 20, className: "opacity-50" })),
3001
- /* @__PURE__ */ React21.createElement("div", { className: "flex-1 text-left" }, /* @__PURE__ */ React21.createElement("div", { className: `font-medium ${currentId === item.id ? "text-blue-400" : "text-white"}` }, item.name), item.description && /* @__PURE__ */ React21.createElement("div", { className: "text-xs text-white/50 truncate" }, item.description)),
3002
- currentId === item.id && /* @__PURE__ */ React21.createElement(Check, { size: 16, className: "text-blue-400" })
3000
+ /* @__PURE__ */ React24.createElement("div", { className: "flex h-12 w-12 flex-shrink-0 items-center justify-center rounded bg-black/20 overflow-hidden" }, item.thumbnail ? /* @__PURE__ */ React24.createElement("img", { src: item.thumbnail, alt: item.name, className: "h-full w-full object-cover" }) : /* @__PURE__ */ React24.createElement(Video, { size: 20, className: "opacity-50" })),
3001
+ /* @__PURE__ */ React24.createElement("div", { className: "flex-1 text-left" }, /* @__PURE__ */ React24.createElement("div", { className: `font-medium ${currentId === item.id ? "text-blue-400" : "text-white"}` }, item.name), item.description && /* @__PURE__ */ React24.createElement("div", { className: "text-xs text-white/50 truncate" }, item.description)),
3002
+ currentId === item.id && /* @__PURE__ */ React24.createElement(Check, { size: 16, className: "text-blue-400" })
3003
3003
  )));
3004
3004
  };
3005
3005
  const renderOptionGroup = (title, icon, type, list = [], currentVal) => {
3006
3006
  if (!list || list.length === 0) return null;
3007
- return /* @__PURE__ */ React21.createElement("div", { className: "mb-6" }, /* @__PURE__ */ React21.createElement("div", { className: "mb-3 flex items-center gap-2 text-sm font-medium text-white/70" }, icon, /* @__PURE__ */ React21.createElement("span", null, title)), /* @__PURE__ */ React21.createElement("div", { className: "grid grid-cols-2 gap-2 sm:grid-cols-3" }, list.map((opt) => /* @__PURE__ */ React21.createElement(
3007
+ return /* @__PURE__ */ React24.createElement("div", { className: "mb-6" }, /* @__PURE__ */ React24.createElement("div", { className: "mb-3 flex items-center gap-2 text-sm font-medium text-white/70" }, icon, /* @__PURE__ */ React24.createElement("span", null, title)), /* @__PURE__ */ React24.createElement("div", { className: "grid grid-cols-2 gap-2 sm:grid-cols-3" }, list.map((opt) => /* @__PURE__ */ React24.createElement(
3008
3008
  "button",
3009
3009
  {
3010
3010
  key: opt.id,
3011
3011
  onClick: () => onSelectOption?.(type, opt.id),
3012
3012
  className: `relative flex flex-col items-center gap-2 rounded-lg p-2 text-center transition-all ${currentVal === opt.id ? "bg-blue-500/20 ring-1 ring-blue-500" : "bg-white/5 hover:bg-white/10"}`
3013
3013
  },
3014
- opt.thumbnail ? /* @__PURE__ */ React21.createElement("img", { src: opt.thumbnail, alt: opt.name, className: "h-16 w-full rounded object-cover bg-black/20" }) : /* @__PURE__ */ React21.createElement("div", { className: "flex h-16 w-full items-center justify-center rounded bg-black/20" }, /* @__PURE__ */ React21.createElement("div", { className: "text-xs opacity-30" }, opt.name.slice(0, 2))),
3015
- /* @__PURE__ */ React21.createElement("div", { className: `w-full truncate text-xs ${currentVal === opt.id ? "text-blue-400" : "text-white/80"}` }, opt.name),
3016
- currentVal === opt.id && /* @__PURE__ */ React21.createElement("div", { className: "absolute top-1 right-1 rounded-full bg-blue-500 p-0.5" }, /* @__PURE__ */ React21.createElement(Check, { size: 10, className: "text-white" }))
3014
+ opt.thumbnail ? /* @__PURE__ */ React24.createElement("img", { src: opt.thumbnail, alt: opt.name, className: "h-16 w-full rounded object-cover bg-black/20" }) : /* @__PURE__ */ React24.createElement("div", { className: "flex h-16 w-full items-center justify-center rounded bg-black/20" }, /* @__PURE__ */ React24.createElement("div", { className: "text-xs opacity-30" }, opt.name.slice(0, 2))),
3015
+ /* @__PURE__ */ React24.createElement("div", { className: `w-full truncate text-xs ${currentVal === opt.id ? "text-blue-400" : "text-white/80"}` }, opt.name),
3016
+ currentVal === opt.id && /* @__PURE__ */ React24.createElement("div", { className: "absolute top-1 right-1 rounded-full bg-blue-500 p-0.5" }, /* @__PURE__ */ React24.createElement(Check, { size: 10, className: "text-white" }))
3017
3017
  ))));
3018
3018
  };
3019
3019
  const renderOptionsMode = () => {
3020
3020
  if (!options) return null;
3021
- return /* @__PURE__ */ React21.createElement("div", { className: "p-4" }, renderOptionGroup("\u6A21\u578B", /* @__PURE__ */ React21.createElement(User, { size: 16 }), "models", options.models, currentSelection?.modelId), renderOptionGroup("\u52A8\u4F5C", /* @__PURE__ */ React21.createElement(Video, { size: 16 }), "motions", options.motions, currentSelection?.motionId), renderOptionGroup("\u955C\u5934", /* @__PURE__ */ React21.createElement(Image$1, { size: 16 }), "cameras", options.cameras, currentSelection?.cameraId), renderOptionGroup("\u97F3\u9891", /* @__PURE__ */ React21.createElement(Music, { size: 16 }), "audios", options.audios, currentSelection?.audioId), renderOptionGroup("\u821E\u53F0", /* @__PURE__ */ React21.createElement(Image$1, { size: 16 }), "stages", options.stages, currentSelection?.stageId));
3021
+ return /* @__PURE__ */ React24.createElement("div", { className: "p-4" }, renderOptionGroup("\u6A21\u578B", /* @__PURE__ */ React24.createElement(User, { size: 16 }), "models", options.models, currentSelection?.modelId), renderOptionGroup("\u52A8\u4F5C", /* @__PURE__ */ React24.createElement(Video, { size: 16 }), "motions", options.motions, currentSelection?.motionId), renderOptionGroup("\u955C\u5934", /* @__PURE__ */ React24.createElement(Image$1, { size: 16 }), "cameras", options.cameras, currentSelection?.cameraId), renderOptionGroup("\u97F3\u9891", /* @__PURE__ */ React24.createElement(Music, { size: 16 }), "audios", options.audios, currentSelection?.audioId), renderOptionGroup("\u821E\u53F0", /* @__PURE__ */ React24.createElement(Image$1, { size: 16 }), "stages", options.stages, currentSelection?.stageId));
3022
3022
  };
3023
- return /* @__PURE__ */ React21.createElement("div", { className: "absolute right-0 top-0 h-full w-full max-w-sm transform bg-[#1a1a1e]/95 backdrop-blur-md shadow-2xl transition-transform duration-300 ease-in-out overflow-y-auto z-20 border-l border-white/10" }, /* @__PURE__ */ React21.createElement("div", { className: "sticky top-0 z-10 flex items-center justify-between border-b border-white/10 bg-[#1a1a1e]/95 p-4 backdrop-blur-md" }, /* @__PURE__ */ React21.createElement("h2", { className: "text-lg font-semibold text-white" }, mode === "list" ? "\u64AD\u653E\u5217\u8868" : "\u81EA\u5B9A\u4E49\u573A\u666F"), /* @__PURE__ */ React21.createElement(
3023
+ return /* @__PURE__ */ React24.createElement("div", { className: "absolute right-0 top-0 h-full w-full max-w-sm transform bg-[#1a1a1e]/95 backdrop-blur-md shadow-2xl transition-transform duration-300 ease-in-out overflow-y-auto z-20 border-l border-white/10" }, /* @__PURE__ */ React24.createElement("div", { className: "sticky top-0 z-10 flex items-center justify-between border-b border-white/10 bg-[#1a1a1e]/95 p-4 backdrop-blur-md" }, /* @__PURE__ */ React24.createElement("h2", { className: "text-lg font-semibold text-white" }, mode === "list" ? "\u64AD\u653E\u5217\u8868" : "\u81EA\u5B9A\u4E49\u573A\u666F"), /* @__PURE__ */ React24.createElement(
3024
3024
  "button",
3025
3025
  {
3026
3026
  onClick: onClose,
3027
3027
  className: "rounded-full p-2 text-white/50 hover:bg-white/10 hover:text-white"
3028
3028
  },
3029
- /* @__PURE__ */ React21.createElement(X, { size: 20 })
3030
- )), /* @__PURE__ */ React21.createElement("div", { className: "pb-20" }, mode === "list" ? renderListMode() : renderOptionsMode()));
3029
+ /* @__PURE__ */ React24.createElement(X, { size: 20 })
3030
+ )), /* @__PURE__ */ React24.createElement("div", { className: "pb-20" }, mode === "list" ? renderListMode() : renderOptionsMode()));
3031
3031
  };
3032
3032
  var MMDPlayerEnhancedDebugInfo = ({
3033
3033
  isPlaying,
@@ -3052,7 +3052,7 @@ var MMDPlayerEnhancedDebugInfo = ({
3052
3052
  }, 1e3);
3053
3053
  return () => clearInterval(timer);
3054
3054
  }, []);
3055
- return /* @__PURE__ */ React21.createElement("div", { className: "text-white text-xs font-mono" }, /* @__PURE__ */ React21.createElement("h3", { className: "text-sm font-bold mb-3 pb-2 border-b border-gray-700" }, "\u{1F3AE} MMDPlayerEnhanced Debug"), /* @__PURE__ */ React21.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React21.createElement("h4", { className: "text-gray-400 mb-2" }, "\u64AD\u653E\u72B6\u6001"), /* @__PURE__ */ React21.createElement("div", { className: "space-y-1 pl-2" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21.createElement("span", { className: "text-gray-400" }, "\u64AD\u653E\u4E2D:"), /* @__PURE__ */ React21.createElement(StatusBadge, { active: isPlaying, label: isPlaying ? "Playing" : "Paused" })), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21.createElement("span", { className: "text-gray-400" }, "\u5FAA\u73AF:"), /* @__PURE__ */ React21.createElement(StatusBadge, { active: isLooping, label: isLooping ? "On" : "Off" })), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21.createElement("span", { className: "text-gray-400" }, "\u52A0\u8F7D\u4E2D:"), /* @__PURE__ */ React21.createElement(StatusBadge, { active: isLoading, label: isLoading ? "Loading" : "Ready" })))), /* @__PURE__ */ React21.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React21.createElement("h4", { className: "text-gray-400 mb-2" }, "\u89C6\u56FE\u72B6\u6001"), /* @__PURE__ */ React21.createElement("div", { className: "space-y-1 pl-2" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21.createElement("span", { className: "text-gray-400" }, "\u5168\u5C4F:"), /* @__PURE__ */ React21.createElement(StatusBadge, { active: isFullscreen, label: isFullscreen ? "Yes" : "No" })), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21.createElement("span", { className: "text-gray-400" }, "\u5750\u6807\u8F74:"), /* @__PURE__ */ React21.createElement(StatusBadge, { active: showAxes, label: showAxes ? "Show" : "Hide" })))), /* @__PURE__ */ React21.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React21.createElement("h4", { className: "text-gray-400 mb-2" }, "\u8D44\u6E90\u4FE1\u606F"), /* @__PURE__ */ React21.createElement("div", { className: "space-y-1 pl-2" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21.createElement("span", { className: "text-gray-400" }, "\u6A21\u5F0F:"), /* @__PURE__ */ React21.createElement("span", { className: "text-blue-400 uppercase" }, mode)), mode === "list" && /* @__PURE__ */ React21.createElement(React21.Fragment, null, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21.createElement("span", { className: "text-gray-400" }, "\u603B\u6570:"), /* @__PURE__ */ React21.createElement("span", { className: "text-green-400" }, totalResources)), currentResourceId && /* @__PURE__ */ React21.createElement("div", { className: "mt-2 p-2 bg-gray-800 rounded" }, /* @__PURE__ */ React21.createElement("div", { className: "text-gray-400 text-[10px]" }, "\u5F53\u524D\u8D44\u6E90"), /* @__PURE__ */ React21.createElement("div", { className: "text-white truncate" }, currentResourceName || currentResourceId), /* @__PURE__ */ React21.createElement("div", { className: "text-gray-500 text-[10px] mt-1 truncate" }, "ID: ", currentResourceId))))), memoryInfo && /* @__PURE__ */ React21.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React21.createElement("h4", { className: "text-gray-400 mb-2" }, "\u5185\u5B58\u76D1\u63A7 (Chrome only)"), /* @__PURE__ */ React21.createElement("div", { className: "space-y-2 p-2 bg-gray-800 rounded" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between text-[10px]" }, /* @__PURE__ */ React21.createElement("span", { className: "text-gray-400" }, "\u5DF2\u7528:"), /* @__PURE__ */ React21.createElement("span", { className: "text-yellow-400 font-bold" }, memoryInfo.used, " MB")), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between text-[10px]" }, /* @__PURE__ */ React21.createElement("span", { className: "text-gray-400" }, "\u603B\u8BA1:"), /* @__PURE__ */ React21.createElement("span", { className: "text-blue-400" }, memoryInfo.total, " MB")), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between text-[10px]" }, /* @__PURE__ */ React21.createElement("span", { className: "text-gray-400" }, "\u9650\u5236:"), /* @__PURE__ */ React21.createElement("span", { className: "text-gray-400" }, memoryInfo.limit, " MB")), /* @__PURE__ */ React21.createElement("div", { className: "mt-2" }, /* @__PURE__ */ React21.createElement("div", { className: "bg-gray-700 rounded-full h-2 overflow-hidden" }, /* @__PURE__ */ React21.createElement(
3055
+ return /* @__PURE__ */ React24.createElement("div", { className: "text-white text-xs font-mono" }, /* @__PURE__ */ React24.createElement("h3", { className: "text-sm font-bold mb-3 pb-2 border-b border-gray-700" }, "\u{1F3AE} MMDPlayerEnhanced Debug"), /* @__PURE__ */ React24.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React24.createElement("h4", { className: "text-gray-400 mb-2" }, "\u64AD\u653E\u72B6\u6001"), /* @__PURE__ */ React24.createElement("div", { className: "space-y-1 pl-2" }, /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, "\u64AD\u653E\u4E2D:"), /* @__PURE__ */ React24.createElement(StatusBadge, { active: isPlaying, label: isPlaying ? "Playing" : "Paused" })), /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, "\u5FAA\u73AF:"), /* @__PURE__ */ React24.createElement(StatusBadge, { active: isLooping, label: isLooping ? "On" : "Off" })), /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, "\u52A0\u8F7D\u4E2D:"), /* @__PURE__ */ React24.createElement(StatusBadge, { active: isLoading, label: isLoading ? "Loading" : "Ready" })))), /* @__PURE__ */ React24.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React24.createElement("h4", { className: "text-gray-400 mb-2" }, "\u89C6\u56FE\u72B6\u6001"), /* @__PURE__ */ React24.createElement("div", { className: "space-y-1 pl-2" }, /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, "\u5168\u5C4F:"), /* @__PURE__ */ React24.createElement(StatusBadge, { active: isFullscreen, label: isFullscreen ? "Yes" : "No" })), /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, "\u5750\u6807\u8F74:"), /* @__PURE__ */ React24.createElement(StatusBadge, { active: showAxes, label: showAxes ? "Show" : "Hide" })))), /* @__PURE__ */ React24.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React24.createElement("h4", { className: "text-gray-400 mb-2" }, "\u8D44\u6E90\u4FE1\u606F"), /* @__PURE__ */ React24.createElement("div", { className: "space-y-1 pl-2" }, /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, "\u6A21\u5F0F:"), /* @__PURE__ */ React24.createElement("span", { className: "text-blue-400 uppercase" }, mode)), mode === "list" && /* @__PURE__ */ React24.createElement(React24.Fragment, null, /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, "\u603B\u6570:"), /* @__PURE__ */ React24.createElement("span", { className: "text-green-400" }, totalResources)), currentResourceId && /* @__PURE__ */ React24.createElement("div", { className: "mt-2 p-2 bg-gray-800 rounded" }, /* @__PURE__ */ React24.createElement("div", { className: "text-gray-400 text-[10px]" }, "\u5F53\u524D\u8D44\u6E90"), /* @__PURE__ */ React24.createElement("div", { className: "text-white truncate" }, currentResourceName || currentResourceId), /* @__PURE__ */ React24.createElement("div", { className: "text-gray-500 text-[10px] mt-1 truncate" }, "ID: ", currentResourceId))))), memoryInfo && /* @__PURE__ */ React24.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React24.createElement("h4", { className: "text-gray-400 mb-2" }, "\u5185\u5B58\u76D1\u63A7 (Chrome only)"), /* @__PURE__ */ React24.createElement("div", { className: "space-y-2 p-2 bg-gray-800 rounded" }, /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between text-[10px]" }, /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, "\u5DF2\u7528:"), /* @__PURE__ */ React24.createElement("span", { className: "text-yellow-400 font-bold" }, memoryInfo.used, " MB")), /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between text-[10px]" }, /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, "\u603B\u8BA1:"), /* @__PURE__ */ React24.createElement("span", { className: "text-blue-400" }, memoryInfo.total, " MB")), /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between text-[10px]" }, /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, "\u9650\u5236:"), /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, memoryInfo.limit, " MB")), /* @__PURE__ */ React24.createElement("div", { className: "mt-2" }, /* @__PURE__ */ React24.createElement("div", { className: "bg-gray-700 rounded-full h-2 overflow-hidden" }, /* @__PURE__ */ React24.createElement(
3056
3056
  "div",
3057
3057
  {
3058
3058
  className: `h-full transition-all duration-300 ${parseFloat(memoryInfo.used) / parseFloat(memoryInfo.limit) * 100 > 80 ? "bg-red-500" : parseFloat(memoryInfo.used) / parseFloat(memoryInfo.limit) * 100 > 60 ? "bg-yellow-500" : "bg-green-500"}`,
@@ -3060,9 +3060,9 @@ var MMDPlayerEnhancedDebugInfo = ({
3060
3060
  width: `${Math.min(100, parseFloat(memoryInfo.used) / parseFloat(memoryInfo.limit) * 100)}%`
3061
3061
  }
3062
3062
  }
3063
- )), /* @__PURE__ */ React21.createElement("div", { className: "text-[9px] text-gray-500 mt-1 text-center" }, (parseFloat(memoryInfo.used) / parseFloat(memoryInfo.limit) * 100).toFixed(1), "%")))), /* @__PURE__ */ React21.createElement("div", { className: "mt-auto pt-4 border-t border-gray-700" }, /* @__PURE__ */ React21.createElement("div", { className: "text-gray-500 text-[10px]" }, "Last Update: ", (/* @__PURE__ */ new Date()).toLocaleTimeString())));
3063
+ )), /* @__PURE__ */ React24.createElement("div", { className: "text-[9px] text-gray-500 mt-1 text-center" }, (parseFloat(memoryInfo.used) / parseFloat(memoryInfo.limit) * 100).toFixed(1), "%")))), /* @__PURE__ */ React24.createElement("div", { className: "mt-auto pt-4 border-t border-gray-700" }, /* @__PURE__ */ React24.createElement("div", { className: "text-gray-500 text-[10px]" }, "Last Update: ", (/* @__PURE__ */ new Date()).toLocaleTimeString())));
3064
3064
  };
3065
- var StatusBadge = ({ active, label }) => /* @__PURE__ */ React21.createElement(
3065
+ var StatusBadge = ({ active, label }) => /* @__PURE__ */ React24.createElement(
3066
3066
  "span",
3067
3067
  {
3068
3068
  className: `px-2 py-0.5 rounded text-[10px] font-bold ${active ? "bg-green-600 text-white" : "bg-gray-700 text-gray-400"}`
@@ -3191,16 +3191,16 @@ var MMDPlayerEnhanced = ({
3191
3191
  });
3192
3192
  };
3193
3193
  if (!currentResources) {
3194
- return /* @__PURE__ */ React21.createElement("div", { className: "flex h-full w-full items-center justify-center bg-black text-white" }, "No Resources Configured");
3194
+ return /* @__PURE__ */ React24.createElement("div", { className: "flex h-full w-full items-center justify-center bg-black text-white" }, "No Resources Configured");
3195
3195
  }
3196
- return /* @__PURE__ */ React21.createElement(
3196
+ return /* @__PURE__ */ React24.createElement(
3197
3197
  "div",
3198
3198
  {
3199
3199
  ref: containerRef,
3200
3200
  className: `relative overflow-hidden bg-black group flex ${className}`,
3201
3201
  style
3202
3202
  },
3203
- /* @__PURE__ */ React21.createElement("div", { className: "flex-1 relative" }, /* @__PURE__ */ React21.createElement(
3203
+ /* @__PURE__ */ React24.createElement("div", { className: "flex-1 relative" }, /* @__PURE__ */ React24.createElement(
3204
3204
  MMDPlayerBase,
3205
3205
  {
3206
3206
  key: mode === "list" ? currentId : JSON.stringify(currentResources),
@@ -3232,7 +3232,7 @@ var MMDPlayerEnhanced = ({
3232
3232
  },
3233
3233
  ...rest
3234
3234
  }
3235
- ), isLoading && /* @__PURE__ */ React21.createElement("div", { className: "absolute inset-0 z-10 flex items-center justify-center bg-black/50 backdrop-blur-sm" }, /* @__PURE__ */ React21.createElement("div", { className: "h-10 w-10 animate-spin rounded-full border-4 border-white/20 border-t-blue-500" })), /* @__PURE__ */ React21.createElement("div", { className: `transition-opacity duration-300 ${isPlaying && !showSettings ? "opacity-0 group-hover:opacity-100" : "opacity-100"}` }, /* @__PURE__ */ React21.createElement(
3235
+ ), isLoading && /* @__PURE__ */ React24.createElement("div", { className: "absolute inset-0 z-10 flex items-center justify-center bg-black/50 backdrop-blur-sm" }, /* @__PURE__ */ React24.createElement("div", { className: "h-10 w-10 animate-spin rounded-full border-4 border-white/20 border-t-blue-500" })), /* @__PURE__ */ React24.createElement("div", { className: `transition-opacity duration-300 ${isPlaying && !showSettings ? "opacity-0 group-hover:opacity-100" : "opacity-100"}` }, /* @__PURE__ */ React24.createElement(
3236
3236
  ControlPanel,
3237
3237
  {
3238
3238
  isPlaying,
@@ -3247,7 +3247,7 @@ var MMDPlayerEnhanced = ({
3247
3247
  onToggleAxes: () => setShowAxes(!showAxes),
3248
3248
  onOpenSettings: () => setShowSettings(true)
3249
3249
  }
3250
- )), showSettings && (mode === "list" || mode === "options") && /* @__PURE__ */ React21.createElement(
3250
+ )), showSettings && (mode === "list" || mode === "options") && /* @__PURE__ */ React24.createElement(
3251
3251
  SettingsPanel,
3252
3252
  {
3253
3253
  mode,
@@ -3260,7 +3260,7 @@ var MMDPlayerEnhanced = ({
3260
3260
  onClose: () => setShowSettings(false)
3261
3261
  }
3262
3262
  )),
3263
- showDebugInfo && /* @__PURE__ */ React21.createElement("div", { className: "w-96 bg-gray-900/95 border-l border-gray-700 p-4 overflow-y-auto" }, /* @__PURE__ */ React21.createElement(
3263
+ showDebugInfo && /* @__PURE__ */ React24.createElement("div", { className: "w-96 bg-gray-900/95 border-l border-gray-700 p-4 overflow-y-auto" }, /* @__PURE__ */ React24.createElement(
3264
3264
  MMDPlayerEnhancedDebugInfo,
3265
3265
  {
3266
3266
  isPlaying,
@@ -3302,14 +3302,14 @@ var MMDPlaylistDebugInfo = ({
3302
3302
  }, 1e3);
3303
3303
  return () => clearInterval(timer);
3304
3304
  }, []);
3305
- return /* @__PURE__ */ React21.createElement("div", { className: "text-white text-xs font-mono" }, /* @__PURE__ */ React21.createElement("h3", { className: "text-sm font-bold mb-3 pb-2 border-b border-gray-700" }, "\u{1F3AD} MMDPlaylist Debug"), /* @__PURE__ */ React21.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React21.createElement("h4", { className: "text-gray-400 mb-2" }, "\u64AD\u653E\u5217\u8868"), /* @__PURE__ */ React21.createElement("div", { className: "space-y-1 pl-2" }, /* @__PURE__ */ React21.createElement("div", { className: "text-white truncate" }, playlistName), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21.createElement("span", { className: "text-gray-400" }, "\u8FDB\u5EA6:"), /* @__PURE__ */ React21.createElement("span", { className: "text-blue-400" }, currentIndex + 1, " / ", totalNodes)), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21.createElement("span", { className: "text-gray-400" }, "\u5217\u8868\u5FAA\u73AF:"), /* @__PURE__ */ React21.createElement(StatusBadge2, { active: isListLooping, label: isListLooping ? "On" : "Off" })))), /* @__PURE__ */ React21.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React21.createElement("h4", { className: "text-gray-400 mb-2" }, "\u5F53\u524D\u8282\u70B9"), /* @__PURE__ */ React21.createElement("div", { className: "p-2 bg-gray-800 rounded space-y-1" }, /* @__PURE__ */ React21.createElement("div", { className: "text-white font-semibold truncate" }, currentNode.name), /* @__PURE__ */ React21.createElement("div", { className: "text-gray-500 text-[10px] truncate" }, "ID: ", currentNode.id), currentNode.duration && /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21.createElement("span", { className: "text-gray-400" }, "\u65F6\u957F:"), /* @__PURE__ */ React21.createElement("span", { className: "text-green-400" }, currentNode.duration, "s")), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21.createElement("span", { className: "text-gray-400" }, "\u8282\u70B9\u5FAA\u73AF:"), /* @__PURE__ */ React21.createElement(StatusBadge2, { active: isNodeLooping, label: isNodeLooping ? "On" : "Off" })))), /* @__PURE__ */ React21.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React21.createElement("h4", { className: "text-gray-400 mb-2" }, "\u64AD\u653E\u72B6\u6001"), /* @__PURE__ */ React21.createElement("div", { className: "space-y-1 pl-2" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21.createElement("span", { className: "text-gray-400" }, "\u64AD\u653E\u4E2D:"), /* @__PURE__ */ React21.createElement(StatusBadge2, { active: isPlaying, label: isPlaying ? "Playing" : "Paused" })), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21.createElement("span", { className: "text-gray-400" }, "\u52A0\u8F7D\u4E2D:"), /* @__PURE__ */ React21.createElement(StatusBadge2, { active: isLoading, label: isLoading ? "Loading" : "Ready" })))), /* @__PURE__ */ React21.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React21.createElement("h4", { className: "text-gray-400 mb-2" }, "\u9884\u52A0\u8F7D\u7B56\u7565"), /* @__PURE__ */ React21.createElement("div", { className: "space-y-1 pl-2" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21.createElement("span", { className: "text-gray-400" }, "\u7B56\u7565:"), /* @__PURE__ */ React21.createElement("span", { className: `px-2 py-0.5 rounded text-[10px] font-bold uppercase ${preloadStrategy === "all" ? "bg-red-600 text-white" : preloadStrategy === "next" ? "bg-yellow-600 text-white" : "bg-gray-700 text-gray-400"}` }, preloadStrategy)), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21.createElement("span", { className: "text-gray-400" }, "\u5DF2\u9884\u52A0\u8F7D:"), /* @__PURE__ */ React21.createElement("span", { className: "text-purple-400" }, preloadedNodes.length)), preloadedNodes.length > 0 && /* @__PURE__ */ React21.createElement("div", { className: "mt-2 p-2 bg-gray-800 rounded" }, /* @__PURE__ */ React21.createElement("div", { className: "text-gray-400 text-[10px] mb-1" }, "\u9884\u52A0\u8F7D\u8282\u70B9\u7D22\u5F15"), /* @__PURE__ */ React21.createElement("div", { className: "flex flex-wrap gap-1" }, preloadedNodes.map((idx) => /* @__PURE__ */ React21.createElement(
3305
+ return /* @__PURE__ */ React24.createElement("div", { className: "text-white text-xs font-mono" }, /* @__PURE__ */ React24.createElement("h3", { className: "text-sm font-bold mb-3 pb-2 border-b border-gray-700" }, "\u{1F3AD} MMDPlaylist Debug"), /* @__PURE__ */ React24.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React24.createElement("h4", { className: "text-gray-400 mb-2" }, "\u64AD\u653E\u5217\u8868"), /* @__PURE__ */ React24.createElement("div", { className: "space-y-1 pl-2" }, /* @__PURE__ */ React24.createElement("div", { className: "text-white truncate" }, playlistName), /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, "\u8FDB\u5EA6:"), /* @__PURE__ */ React24.createElement("span", { className: "text-blue-400" }, currentIndex + 1, " / ", totalNodes)), /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, "\u5217\u8868\u5FAA\u73AF:"), /* @__PURE__ */ React24.createElement(StatusBadge2, { active: isListLooping, label: isListLooping ? "On" : "Off" })))), /* @__PURE__ */ React24.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React24.createElement("h4", { className: "text-gray-400 mb-2" }, "\u5F53\u524D\u8282\u70B9"), /* @__PURE__ */ React24.createElement("div", { className: "p-2 bg-gray-800 rounded space-y-1" }, /* @__PURE__ */ React24.createElement("div", { className: "text-white font-semibold truncate" }, currentNode.name), /* @__PURE__ */ React24.createElement("div", { className: "text-gray-500 text-[10px] truncate" }, "ID: ", currentNode.id), currentNode.duration && /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, "\u65F6\u957F:"), /* @__PURE__ */ React24.createElement("span", { className: "text-green-400" }, currentNode.duration, "s")), /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, "\u8282\u70B9\u5FAA\u73AF:"), /* @__PURE__ */ React24.createElement(StatusBadge2, { active: isNodeLooping, label: isNodeLooping ? "On" : "Off" })))), /* @__PURE__ */ React24.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React24.createElement("h4", { className: "text-gray-400 mb-2" }, "\u64AD\u653E\u72B6\u6001"), /* @__PURE__ */ React24.createElement("div", { className: "space-y-1 pl-2" }, /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, "\u64AD\u653E\u4E2D:"), /* @__PURE__ */ React24.createElement(StatusBadge2, { active: isPlaying, label: isPlaying ? "Playing" : "Paused" })), /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, "\u52A0\u8F7D\u4E2D:"), /* @__PURE__ */ React24.createElement(StatusBadge2, { active: isLoading, label: isLoading ? "Loading" : "Ready" })))), /* @__PURE__ */ React24.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React24.createElement("h4", { className: "text-gray-400 mb-2" }, "\u9884\u52A0\u8F7D\u7B56\u7565"), /* @__PURE__ */ React24.createElement("div", { className: "space-y-1 pl-2" }, /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, "\u7B56\u7565:"), /* @__PURE__ */ React24.createElement("span", { className: `px-2 py-0.5 rounded text-[10px] font-bold uppercase ${preloadStrategy === "all" ? "bg-red-600 text-white" : preloadStrategy === "next" ? "bg-yellow-600 text-white" : "bg-gray-700 text-gray-400"}` }, preloadStrategy)), /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, "\u5DF2\u9884\u52A0\u8F7D:"), /* @__PURE__ */ React24.createElement("span", { className: "text-purple-400" }, preloadedNodes.length)), preloadedNodes.length > 0 && /* @__PURE__ */ React24.createElement("div", { className: "mt-2 p-2 bg-gray-800 rounded" }, /* @__PURE__ */ React24.createElement("div", { className: "text-gray-400 text-[10px] mb-1" }, "\u9884\u52A0\u8F7D\u8282\u70B9\u7D22\u5F15"), /* @__PURE__ */ React24.createElement("div", { className: "flex flex-wrap gap-1" }, preloadedNodes.map((idx) => /* @__PURE__ */ React24.createElement(
3306
3306
  "span",
3307
3307
  {
3308
3308
  key: idx,
3309
3309
  className: `px-1.5 py-0.5 rounded text-[10px] ${idx === currentIndex ? "bg-green-600 text-white font-bold" : "bg-gray-700 text-gray-300"}`
3310
3310
  },
3311
3311
  idx
3312
- )))))), /* @__PURE__ */ React21.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React21.createElement("h4", { className: "text-gray-400 mb-2" }, "\u89C6\u56FE\u72B6\u6001"), /* @__PURE__ */ React21.createElement("div", { className: "space-y-1 pl-2" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21.createElement("span", { className: "text-gray-400" }, "\u5168\u5C4F:"), /* @__PURE__ */ React21.createElement(StatusBadge2, { active: isFullscreen, label: isFullscreen ? "Yes" : "No" })), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21.createElement("span", { className: "text-gray-400" }, "\u5750\u6807\u8F74:"), /* @__PURE__ */ React21.createElement(StatusBadge2, { active: showAxes, label: showAxes ? "Show" : "Hide" })))), memoryInfo && /* @__PURE__ */ React21.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React21.createElement("h4", { className: "text-gray-400 mb-2" }, "\u5185\u5B58\u76D1\u63A7 (Chrome only)"), /* @__PURE__ */ React21.createElement("div", { className: "space-y-2 p-2 bg-gray-800 rounded" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between text-[10px]" }, /* @__PURE__ */ React21.createElement("span", { className: "text-gray-400" }, "\u5DF2\u7528:"), /* @__PURE__ */ React21.createElement("span", { className: "text-yellow-400 font-bold" }, memoryInfo.used, " MB")), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between text-[10px]" }, /* @__PURE__ */ React21.createElement("span", { className: "text-gray-400" }, "\u603B\u8BA1:"), /* @__PURE__ */ React21.createElement("span", { className: "text-blue-400" }, memoryInfo.total, " MB")), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between text-[10px]" }, /* @__PURE__ */ React21.createElement("span", { className: "text-gray-400" }, "\u9650\u5236:"), /* @__PURE__ */ React21.createElement("span", { className: "text-gray-400" }, memoryInfo.limit, " MB")), /* @__PURE__ */ React21.createElement("div", { className: "mt-2" }, /* @__PURE__ */ React21.createElement("div", { className: "bg-gray-700 rounded-full h-2 overflow-hidden" }, /* @__PURE__ */ React21.createElement(
3312
+ )))))), /* @__PURE__ */ React24.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React24.createElement("h4", { className: "text-gray-400 mb-2" }, "\u89C6\u56FE\u72B6\u6001"), /* @__PURE__ */ React24.createElement("div", { className: "space-y-1 pl-2" }, /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, "\u5168\u5C4F:"), /* @__PURE__ */ React24.createElement(StatusBadge2, { active: isFullscreen, label: isFullscreen ? "Yes" : "No" })), /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, "\u5750\u6807\u8F74:"), /* @__PURE__ */ React24.createElement(StatusBadge2, { active: showAxes, label: showAxes ? "Show" : "Hide" })))), memoryInfo && /* @__PURE__ */ React24.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React24.createElement("h4", { className: "text-gray-400 mb-2" }, "\u5185\u5B58\u76D1\u63A7 (Chrome only)"), /* @__PURE__ */ React24.createElement("div", { className: "space-y-2 p-2 bg-gray-800 rounded" }, /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between text-[10px]" }, /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, "\u5DF2\u7528:"), /* @__PURE__ */ React24.createElement("span", { className: "text-yellow-400 font-bold" }, memoryInfo.used, " MB")), /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between text-[10px]" }, /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, "\u603B\u8BA1:"), /* @__PURE__ */ React24.createElement("span", { className: "text-blue-400" }, memoryInfo.total, " MB")), /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between text-[10px]" }, /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, "\u9650\u5236:"), /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, memoryInfo.limit, " MB")), /* @__PURE__ */ React24.createElement("div", { className: "mt-2" }, /* @__PURE__ */ React24.createElement("div", { className: "bg-gray-700 rounded-full h-2 overflow-hidden" }, /* @__PURE__ */ React24.createElement(
3313
3313
  "div",
3314
3314
  {
3315
3315
  className: `h-full transition-all duration-300 ${parseFloat(memoryInfo.used) / parseFloat(memoryInfo.limit) * 100 > 80 ? "bg-red-500" : parseFloat(memoryInfo.used) / parseFloat(memoryInfo.limit) * 100 > 60 ? "bg-yellow-500" : "bg-green-500"}`,
@@ -3317,18 +3317,18 @@ var MMDPlaylistDebugInfo = ({
3317
3317
  width: `${Math.min(100, parseFloat(memoryInfo.used) / parseFloat(memoryInfo.limit) * 100)}%`
3318
3318
  }
3319
3319
  }
3320
- )), /* @__PURE__ */ React21.createElement("div", { className: "text-[9px] text-gray-500 mt-1 text-center" }, (parseFloat(memoryInfo.used) / parseFloat(memoryInfo.limit) * 100).toFixed(1), "%")))), /* @__PURE__ */ React21.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React21.createElement("h4", { className: "text-gray-400 mb-2" }, "\u8282\u70B9\u5217\u8868"), /* @__PURE__ */ React21.createElement("div", { className: "space-y-1 max-h-40 overflow-y-auto" }, Array.from({ length: totalNodes }).map((_, idx) => /* @__PURE__ */ React21.createElement(
3320
+ )), /* @__PURE__ */ React24.createElement("div", { className: "text-[9px] text-gray-500 mt-1 text-center" }, (parseFloat(memoryInfo.used) / parseFloat(memoryInfo.limit) * 100).toFixed(1), "%")))), /* @__PURE__ */ React24.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React24.createElement("h4", { className: "text-gray-400 mb-2" }, "\u8282\u70B9\u5217\u8868"), /* @__PURE__ */ React24.createElement("div", { className: "space-y-1 max-h-40 overflow-y-auto" }, Array.from({ length: totalNodes }).map((_, idx) => /* @__PURE__ */ React24.createElement(
3321
3321
  "div",
3322
3322
  {
3323
3323
  key: idx,
3324
3324
  className: `px-2 py-1 rounded text-[10px] flex items-center justify-between ${idx === currentIndex ? "bg-blue-600 text-white font-bold" : preloadedNodes.includes(idx) ? "bg-yellow-900/50 text-yellow-300" : "bg-gray-800 text-gray-400"}`
3325
3325
  },
3326
- /* @__PURE__ */ React21.createElement("span", null, "\u8282\u70B9 ", idx),
3327
- idx === currentIndex && /* @__PURE__ */ React21.createElement("span", null, "\u25B6"),
3328
- preloadedNodes.includes(idx) && idx !== currentIndex && /* @__PURE__ */ React21.createElement("span", null, "\u23F3")
3329
- )))), /* @__PURE__ */ React21.createElement("div", { className: "mt-auto pt-4 border-t border-gray-700" }, /* @__PURE__ */ React21.createElement("div", { className: "text-gray-500 text-[10px]" }, "Last Update: ", (/* @__PURE__ */ new Date()).toLocaleTimeString())));
3326
+ /* @__PURE__ */ React24.createElement("span", null, "\u8282\u70B9 ", idx),
3327
+ idx === currentIndex && /* @__PURE__ */ React24.createElement("span", null, "\u25B6"),
3328
+ preloadedNodes.includes(idx) && idx !== currentIndex && /* @__PURE__ */ React24.createElement("span", null, "\u23F3")
3329
+ )))), /* @__PURE__ */ React24.createElement("div", { className: "mt-auto pt-4 border-t border-gray-700" }, /* @__PURE__ */ React24.createElement("div", { className: "text-gray-500 text-[10px]" }, "Last Update: ", (/* @__PURE__ */ new Date()).toLocaleTimeString())));
3330
3330
  };
3331
- var StatusBadge2 = ({ active, label }) => /* @__PURE__ */ React21.createElement(
3331
+ var StatusBadge2 = ({ active, label }) => /* @__PURE__ */ React24.createElement(
3332
3332
  "span",
3333
3333
  {
3334
3334
  className: `px-2 py-0.5 rounded text-[10px] font-bold ${active ? "bg-green-600 text-white" : "bg-gray-700 text-gray-400"}`
@@ -3494,17 +3494,17 @@ var MMDPlaylist = ({
3494
3494
  };
3495
3495
  }, []);
3496
3496
  if (!currentNode) {
3497
- return /* @__PURE__ */ React21.createElement("div", { className: "flex h-full w-full items-center justify-center bg-black text-white" }, "\u64AD\u653E\u5217\u8868\u4E3A\u7A7A");
3497
+ return /* @__PURE__ */ React24.createElement("div", { className: "flex h-full w-full items-center justify-center bg-black text-white" }, "\u64AD\u653E\u5217\u8868\u4E3A\u7A7A");
3498
3498
  }
3499
3499
  const showPrevNext = nodes.length > 1;
3500
- return /* @__PURE__ */ React21.createElement(
3500
+ return /* @__PURE__ */ React24.createElement(
3501
3501
  "div",
3502
3502
  {
3503
3503
  ref: containerRef,
3504
3504
  className: `relative overflow-hidden bg-black group flex h-full ${className}`,
3505
3505
  style
3506
3506
  },
3507
- /* @__PURE__ */ React21.createElement("div", { className: "flex-1 relative" }, !isTransitioning && /* @__PURE__ */ React21.createElement(
3507
+ /* @__PURE__ */ React24.createElement("div", { className: "flex-1 relative" }, !isTransitioning && /* @__PURE__ */ React24.createElement(
3508
3508
  MMDPlayerBase,
3509
3509
  {
3510
3510
  key: currentNode.id,
@@ -3527,12 +3527,12 @@ var MMDPlaylist = ({
3527
3527
  onEnded: handleEnded,
3528
3528
  onError
3529
3529
  }
3530
- ), (isLoading || isTransitioning) && /* @__PURE__ */ React21.createElement("div", { className: "absolute inset-0 z-10 flex items-center justify-center bg-black/50 backdrop-blur-sm" }, /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col items-center gap-3" }, /* @__PURE__ */ React21.createElement("div", { className: "h-10 w-10 animate-spin rounded-full border-4 border-white/20 border-t-blue-500" }), /* @__PURE__ */ React21.createElement("div", { className: "text-sm text-white/80" }, isTransitioning ? "\u5207\u6362\u4E2D..." : `\u6B63\u5728\u52A0\u8F7D ${currentIndex + 1} / ${nodes.length}`))), /* @__PURE__ */ React21.createElement(
3530
+ ), (isLoading || isTransitioning) && /* @__PURE__ */ React24.createElement("div", { className: "absolute inset-0 z-10 flex items-center justify-center bg-black/50 backdrop-blur-sm" }, /* @__PURE__ */ React24.createElement("div", { className: "flex flex-col items-center gap-3" }, /* @__PURE__ */ React24.createElement("div", { className: "h-10 w-10 animate-spin rounded-full border-4 border-white/20 border-t-blue-500" }), /* @__PURE__ */ React24.createElement("div", { className: "text-sm text-white/80" }, isTransitioning ? "\u5207\u6362\u4E2D..." : `\u6B63\u5728\u52A0\u8F7D ${currentIndex + 1} / ${nodes.length}`))), /* @__PURE__ */ React24.createElement(
3531
3531
  "div",
3532
3532
  {
3533
3533
  className: `transition-opacity duration-300 ${isPlaying && !showPlaylist ? "opacity-0 group-hover:opacity-100" : "opacity-100"}`
3534
3534
  },
3535
- /* @__PURE__ */ React21.createElement(
3535
+ /* @__PURE__ */ React24.createElement(
3536
3536
  ControlPanel,
3537
3537
  {
3538
3538
  isPlaying,
@@ -3559,15 +3559,15 @@ var MMDPlaylist = ({
3559
3559
  }
3560
3560
  }
3561
3561
  )
3562
- ), showPlaylist && /* @__PURE__ */ React21.createElement("div", { className: "absolute inset-0 z-20 flex items-end bg-black/80 backdrop-blur-sm" }, /* @__PURE__ */ React21.createElement("div", { className: "w-full max-h-[60vh] overflow-y-auto bg-gray-900/95 rounded-t-xl" }, /* @__PURE__ */ React21.createElement("div", { className: "sticky top-0 flex items-center justify-between bg-gray-800 px-4 py-3 border-b border-gray-700" }, /* @__PURE__ */ React21.createElement("div", null, /* @__PURE__ */ React21.createElement("h3", { className: "text-white font-semibold" }, playlist.name), /* @__PURE__ */ React21.createElement("p", { className: "text-xs text-gray-400 mt-0.5" }, "\u5171 ", nodes.length, " \u4E2A\u8282\u70B9")), /* @__PURE__ */ React21.createElement(
3562
+ ), showPlaylist && /* @__PURE__ */ React24.createElement("div", { className: "absolute inset-0 z-20 flex items-end bg-black/80 backdrop-blur-sm" }, /* @__PURE__ */ React24.createElement("div", { className: "w-full max-h-[60vh] overflow-y-auto bg-gray-900/95 rounded-t-xl" }, /* @__PURE__ */ React24.createElement("div", { className: "sticky top-0 flex items-center justify-between bg-gray-800 px-4 py-3 border-b border-gray-700" }, /* @__PURE__ */ React24.createElement("div", null, /* @__PURE__ */ React24.createElement("h3", { className: "text-white font-semibold" }, playlist.name), /* @__PURE__ */ React24.createElement("p", { className: "text-xs text-gray-400 mt-0.5" }, "\u5171 ", nodes.length, " \u4E2A\u8282\u70B9")), /* @__PURE__ */ React24.createElement(
3563
3563
  "button",
3564
3564
  {
3565
3565
  onClick: () => setShowPlaylist(false),
3566
3566
  className: "p-2 hover:bg-white/10 rounded-lg transition-colors",
3567
3567
  "aria-label": "\u5173\u95ED\u64AD\u653E\u5217\u8868"
3568
3568
  },
3569
- /* @__PURE__ */ React21.createElement("svg", { className: "w-5 h-5 text-white", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor" }, /* @__PURE__ */ React21.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }))
3570
- )), /* @__PURE__ */ React21.createElement("div", { className: "p-2" }, nodes.map((node, index) => /* @__PURE__ */ React21.createElement(
3569
+ /* @__PURE__ */ React24.createElement("svg", { className: "w-5 h-5 text-white", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor" }, /* @__PURE__ */ React24.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }))
3570
+ )), /* @__PURE__ */ React24.createElement("div", { className: "p-2" }, nodes.map((node, index) => /* @__PURE__ */ React24.createElement(
3571
3571
  "button",
3572
3572
  {
3573
3573
  key: node.id,
@@ -3577,17 +3577,17 @@ var MMDPlaylist = ({
3577
3577
  },
3578
3578
  className: `w-full flex items-center gap-3 p-3 rounded-lg mb-2 transition-all ${index === currentIndex ? "bg-blue-600 text-white" : "bg-gray-800 text-gray-300 hover:bg-gray-700"}`
3579
3579
  },
3580
- /* @__PURE__ */ React21.createElement(
3580
+ /* @__PURE__ */ React24.createElement(
3581
3581
  "div",
3582
3582
  {
3583
3583
  className: `flex-shrink-0 w-8 h-8 rounded-full flex items-center justify-center text-sm font-semibold ${index === currentIndex ? "bg-white/20" : "bg-gray-700"}`
3584
3584
  },
3585
3585
  index + 1
3586
3586
  ),
3587
- /* @__PURE__ */ React21.createElement("div", { className: "flex-1 text-left" }, /* @__PURE__ */ React21.createElement("div", { className: "font-medium" }, node.name), node.duration && /* @__PURE__ */ React21.createElement("div", { className: "text-xs opacity-75 mt-0.5" }, Math.floor(node.duration / 60), ":", String(Math.floor(node.duration % 60)).padStart(2, "0"))),
3588
- index === currentIndex && /* @__PURE__ */ React21.createElement("div", { className: "flex-shrink-0" }, /* @__PURE__ */ React21.createElement("svg", { className: "w-5 h-5", fill: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React21.createElement("path", { d: "M8 5v14l11-7z" })))
3587
+ /* @__PURE__ */ React24.createElement("div", { className: "flex-1 text-left" }, /* @__PURE__ */ React24.createElement("div", { className: "font-medium" }, node.name), node.duration && /* @__PURE__ */ React24.createElement("div", { className: "text-xs opacity-75 mt-0.5" }, Math.floor(node.duration / 60), ":", String(Math.floor(node.duration % 60)).padStart(2, "0"))),
3588
+ index === currentIndex && /* @__PURE__ */ React24.createElement("div", { className: "flex-shrink-0" }, /* @__PURE__ */ React24.createElement("svg", { className: "w-5 h-5", fill: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React24.createElement("path", { d: "M8 5v14l11-7z" })))
3589
3589
  )))))),
3590
- showDebugInfo && /* @__PURE__ */ React21.createElement("div", { className: "w-96 flex-shrink-0 bg-gray-900/95 border-l border-gray-700 p-4 overflow-y-auto h-full" }, /* @__PURE__ */ React21.createElement(
3590
+ showDebugInfo && /* @__PURE__ */ React24.createElement("div", { className: "w-96 flex-shrink-0 bg-gray-900/95 border-l border-gray-700 p-4 overflow-y-auto h-full" }, /* @__PURE__ */ React24.createElement(
3591
3591
  MMDPlaylistDebugInfo,
3592
3592
  {
3593
3593
  playlistName: playlist.name,
@@ -3638,13 +3638,13 @@ if (typeof document !== "undefined" && !document.getElementById("dialogue-box-an
3638
3638
  document.head.appendChild(style);
3639
3639
  }
3640
3640
  var defaultTheme = {
3641
- backgroundColor: "rgba(255, 255, 255, 0.15)",
3642
- borderColor: "rgba(255, 255, 255, 0.25)",
3643
- textColor: "#ffffff",
3644
- speakerBgColor: "rgba(255, 255, 255, 0.25)",
3645
- speakerTextColor: "#ffffff",
3646
- opacity: 0.98,
3647
- blur: "24px",
3641
+ backgroundColor: "rgba(248, 250, 252, 0.95)",
3642
+ borderColor: "rgba(203, 213, 225, 0.8)",
3643
+ textColor: "#22c55e",
3644
+ speakerBgColor: "rgba(148, 163, 184, 0.9)",
3645
+ speakerTextColor: "#22c55e",
3646
+ opacity: 1,
3647
+ blur: "16px",
3648
3648
  continueHint: "\u70B9\u51FB\u7EE7\u7EED \u25BC",
3649
3649
  showContinueHint: true
3650
3650
  };
@@ -3733,7 +3733,14 @@ var DialogueBox = ({
3733
3733
  displayedText,
3734
3734
  isComplete
3735
3735
  });
3736
- const dialogueContent = /* @__PURE__ */ React21.createElement(
3736
+ console.log("[DialogueBox] Theme colors:", {
3737
+ textColor: theme.textColor,
3738
+ backgroundColor: theme.backgroundColor,
3739
+ speakerBgColor: theme.speakerBgColor,
3740
+ speakerTextColor: theme.speakerTextColor,
3741
+ fullTheme: theme
3742
+ });
3743
+ const dialogueContent = /* @__PURE__ */ React24.createElement(
3737
3744
  "div",
3738
3745
  {
3739
3746
  className: `${className || ""}`,
@@ -3749,7 +3756,7 @@ var DialogueBox = ({
3749
3756
  pointerEvents: "auto"
3750
3757
  }
3751
3758
  },
3752
- /* @__PURE__ */ React21.createElement(
3759
+ /* @__PURE__ */ React24.createElement(
3753
3760
  "div",
3754
3761
  {
3755
3762
  className: "w-full h-full rounded-t-3xl border cursor-pointer select-none transition-all hover:border-white/50 hover:shadow-2xl flex flex-col relative overflow-hidden",
@@ -3763,128 +3770,128 @@ var DialogueBox = ({
3763
3770
  position: "relative",
3764
3771
  display: "flex",
3765
3772
  background: `linear-gradient(135deg,
3766
- rgba(255, 255, 255, 0.15) 0%,
3767
- rgba(255, 255, 255, 0.12) 50%,
3768
- rgba(255, 255, 255, 0.1) 100%)`,
3773
+ rgba(248, 250, 252, 0.98) 0%,
3774
+ rgba(241, 245, 249, 0.95) 50%,
3775
+ rgba(226, 232, 240, 0.92) 100%)`,
3769
3776
  boxShadow: `
3770
- 0 -8px 40px rgba(255, 255, 255, 0.1),
3771
- 0 -4px 16px rgba(255, 255, 255, 0.05),
3772
- inset 0 1px 0 rgba(255, 255, 255, 0.3),
3773
- inset 0 -1px 0 rgba(255, 255, 255, 0.1)
3777
+ 0 -8px 40px rgba(148, 163, 184, 0.2),
3778
+ 0 -4px 16px rgba(100, 116, 139, 0.15),
3779
+ inset 0 1px 0 rgba(255, 255, 255, 0.8),
3780
+ inset 0 -1px 0 rgba(203, 213, 225, 0.5)
3774
3781
  `
3775
3782
  }
3776
3783
  },
3777
- /* @__PURE__ */ React21.createElement(
3784
+ /* @__PURE__ */ React24.createElement(
3778
3785
  "div",
3779
3786
  {
3780
- className: "absolute inset-0 opacity-20 pointer-events-none",
3787
+ className: "absolute inset-0 opacity-8 pointer-events-none",
3781
3788
  style: {
3782
3789
  background: `linear-gradient(45deg,
3783
- rgba(255, 182, 193, 0.2) 0%,
3784
- rgba(173, 216, 230, 0.2) 25%,
3785
- rgba(221, 160, 221, 0.2) 50%,
3786
- rgba(255, 218, 185, 0.2) 75%,
3787
- rgba(255, 182, 193, 0.2) 100%)`,
3790
+ rgba(226, 232, 240, 0.3) 0%,
3791
+ rgba(203, 213, 225, 0.3) 25%,
3792
+ rgba(241, 245, 249, 0.3) 50%,
3793
+ rgba(226, 232, 240, 0.3) 75%,
3794
+ rgba(203, 213, 225, 0.3) 100%)`,
3788
3795
  backgroundSize: "400% 400%",
3789
3796
  animation: "gradientShift 15s ease infinite"
3790
3797
  }
3791
3798
  }
3792
3799
  ),
3793
- /* @__PURE__ */ React21.createElement(
3800
+ /* @__PURE__ */ React24.createElement(
3794
3801
  "div",
3795
3802
  {
3796
3803
  className: "absolute top-0 left-0 right-0 h-1",
3797
3804
  style: {
3798
- background: "linear-gradient(90deg, transparent, rgba(255,255,255,0.6), transparent)"
3805
+ background: "linear-gradient(90deg, transparent, rgba(255,255,255,0.9), transparent)"
3799
3806
  }
3800
3807
  }
3801
3808
  ),
3802
- /* @__PURE__ */ React21.createElement(
3809
+ /* @__PURE__ */ React24.createElement(
3803
3810
  "div",
3804
3811
  {
3805
3812
  className: "absolute bottom-0 left-0 right-0 h-px",
3806
3813
  style: {
3807
- background: "linear-gradient(90deg, transparent, rgba(255,255,255,0.3), transparent)"
3814
+ background: "linear-gradient(90deg, transparent, rgba(203, 213, 225, 0.6), transparent)"
3808
3815
  }
3809
3816
  }
3810
3817
  ),
3811
- showControls && /* @__PURE__ */ React21.createElement("div", { className: "flex justify-end gap-3 px-6 pt-4 pb-2 flex-shrink-0 relative z-10" }, showHistoryButton && /* @__PURE__ */ React21.createElement(
3818
+ showControls && /* @__PURE__ */ React24.createElement("div", { className: "flex justify-end gap-3 px-6 pt-4 pb-2 shrink-0 relative z-10" }, showHistoryButton && /* @__PURE__ */ React24.createElement(
3812
3819
  "button",
3813
3820
  {
3814
3821
  onClick: (e) => {
3815
3822
  e.stopPropagation();
3816
3823
  onOpenHistory?.();
3817
3824
  },
3818
- className: "px-4 py-2 text-xs rounded-xl text-white font-medium hover:text-white transition-all backdrop-blur-lg border border-white/30 hover:border-white/50 hover:scale-105 active:scale-95 shadow-lg",
3825
+ className: "px-4 py-2 text-xs rounded-xl text-slate-700 font-medium hover:text-slate-900 transition-all backdrop-blur-lg border border-slate-300 hover:border-slate-400 hover:scale-105 active:scale-95 shadow-lg",
3819
3826
  style: {
3820
- background: "linear-gradient(135deg, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.15))",
3821
- boxShadow: "0 4px 16px rgba(255, 255, 255, 0.1), inset 0 1px 0 rgba(255, 255, 255, 0.3)"
3827
+ background: "linear-gradient(135deg, rgba(241, 245, 249, 0.95), rgba(226, 232, 240, 0.9))",
3828
+ boxShadow: "0 4px 16px rgba(100, 116, 139, 0.15), inset 0 1px 0 rgba(255, 255, 255, 0.8)"
3822
3829
  },
3823
3830
  title: "\u5386\u53F2\u8BB0\u5F55"
3824
3831
  },
3825
3832
  "\u{1F4DC} \u5386\u53F2"
3826
- ), isCameraManual && /* @__PURE__ */ React21.createElement(
3833
+ ), isCameraManual && /* @__PURE__ */ React24.createElement(
3827
3834
  "button",
3828
3835
  {
3829
3836
  onClick: (e) => {
3830
3837
  e.stopPropagation();
3831
3838
  onResetCamera?.();
3832
3839
  },
3833
- className: "px-4 py-2 text-xs rounded-xl text-white font-medium hover:text-white transition-all backdrop-blur-lg border border-blue-400/50 hover:border-blue-400 hover:scale-105 active:scale-95 shadow-lg animate-in zoom-in duration-300",
3840
+ className: "px-4 py-2 text-xs rounded-xl text-white font-medium hover:text-white transition-all backdrop-blur-lg border border-blue-300 hover:border-blue-400 hover:scale-105 active:scale-95 shadow-lg animate-in zoom-in duration-300",
3834
3841
  style: {
3835
- background: "linear-gradient(135deg, rgba(59, 130, 246, 0.3), rgba(37, 99, 235, 0.2))",
3836
- boxShadow: "0 4px 16px rgba(59, 130, 246, 0.2), inset 0 1px 0 rgba(255, 255, 255, 0.2)"
3842
+ background: "linear-gradient(135deg, rgba(59, 130, 246, 0.85), rgba(37, 99, 235, 0.75))",
3843
+ boxShadow: "0 4px 16px rgba(59, 130, 246, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.4)"
3837
3844
  },
3838
3845
  title: "\u6062\u590D\u521D\u59CB\u89C6\u89D2"
3839
3846
  },
3840
3847
  "\u{1F3A5} \u6062\u590D\u89C6\u89D2"
3841
- ), showAutoButton && /* @__PURE__ */ React21.createElement(
3848
+ ), showAutoButton && /* @__PURE__ */ React24.createElement(
3842
3849
  "button",
3843
3850
  {
3844
3851
  onClick: (e) => {
3845
3852
  e.stopPropagation();
3846
3853
  onToggleAuto?.();
3847
3854
  },
3848
- className: `px-4 py-2 text-xs rounded-xl font-medium transition-all backdrop-blur-lg border hover:scale-105 active:scale-95 shadow-lg ${isAutoMode ? "border-white/50 text-white" : "border-white/30 hover:border-white/50 text-white"}`,
3855
+ className: `px-4 py-2 text-xs rounded-xl font-medium transition-all backdrop-blur-lg border hover:scale-105 active:scale-95 shadow-lg ${isAutoMode ? "border-slate-400 text-slate-900" : "border-slate-300 hover:border-slate-400 text-slate-700"}`,
3849
3856
  style: {
3850
- background: isAutoMode ? "linear-gradient(135deg, rgba(255, 255, 255, 0.35), rgba(255, 255, 255, 0.25))" : "linear-gradient(135deg, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.15))",
3851
- boxShadow: isAutoMode ? "0 4px 20px rgba(255, 255, 255, 0.2), inset 0 1px 0 rgba(255, 255, 255, 0.4)" : "0 4px 16px rgba(255, 255, 255, 0.1), inset 0 1px 0 rgba(255, 255, 255, 0.3)"
3857
+ background: isAutoMode ? "linear-gradient(135deg, rgba(203, 213, 225, 0.95), rgba(148, 163, 184, 0.85))" : "linear-gradient(135deg, rgba(241, 245, 249, 0.95), rgba(226, 232, 240, 0.9))",
3858
+ boxShadow: isAutoMode ? "0 4px 20px rgba(100, 116, 139, 0.25), inset 0 1px 0 rgba(255, 255, 255, 0.8)" : "0 4px 16px rgba(100, 116, 139, 0.15), inset 0 1px 0 rgba(255, 255, 255, 0.8)"
3852
3859
  },
3853
3860
  title: "\u81EA\u52A8\u64AD\u653E"
3854
3861
  },
3855
3862
  "\u25B6 \u81EA\u52A8"
3856
- ), showSkipButton && /* @__PURE__ */ React21.createElement(
3863
+ ), showSkipButton && /* @__PURE__ */ React24.createElement(
3857
3864
  "button",
3858
3865
  {
3859
3866
  onClick: (e) => {
3860
3867
  e.stopPropagation();
3861
3868
  onSkip?.();
3862
3869
  },
3863
- className: "px-4 py-2 text-xs rounded-xl text-white font-medium hover:text-white transition-all backdrop-blur-lg border border-white/30 hover:border-white/50 hover:scale-105 active:scale-95 shadow-lg",
3870
+ className: "px-4 py-2 text-xs rounded-xl text-slate-700 font-medium hover:text-slate-900 transition-all backdrop-blur-lg border border-slate-300 hover:border-slate-400 hover:scale-105 active:scale-95 shadow-lg",
3864
3871
  style: {
3865
- background: "linear-gradient(135deg, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.15))",
3866
- boxShadow: "0 4px 16px rgba(255, 255, 255, 0.1), inset 0 1px 0 rgba(255, 255, 255, 0.3)"
3872
+ background: "linear-gradient(135deg, rgba(241, 245, 249, 0.95), rgba(226, 232, 240, 0.9))",
3873
+ boxShadow: "0 4px 16px rgba(100, 116, 139, 0.15), inset 0 1px 0 rgba(255, 255, 255, 0.8)"
3867
3874
  },
3868
3875
  title: "\u5FEB\u8FDB"
3869
3876
  },
3870
3877
  "\u23E9 \u5FEB\u8FDB"
3871
3878
  )),
3872
- /* @__PURE__ */ React21.createElement("div", { className: "px-8 pb-6 flex-1 flex flex-col justify-center overflow-y-auto relative z-10" }, dialogue.speaker && /* @__PURE__ */ React21.createElement(
3879
+ /* @__PURE__ */ React24.createElement("div", { className: "px-8 pb-6 pt-4 flex-1 flex flex-col justify-start overflow-y-auto relative z-10" }, dialogue.speaker && /* @__PURE__ */ React24.createElement(
3873
3880
  "div",
3874
3881
  {
3875
3882
  className: "inline-block px-6 py-2.5 rounded-2xl mb-4 text-sm font-bold shadow-2xl self-start relative overflow-hidden transition-all hover:scale-105",
3876
3883
  style: {
3877
3884
  color: "#ffffff",
3878
3885
  background: `linear-gradient(135deg,
3879
- rgba(255, 255, 255, 0.3) 0%,
3880
- rgba(255, 255, 255, 0.2) 100%)`,
3881
- backdropFilter: "blur(20px)",
3882
- WebkitBackdropFilter: "blur(20px)",
3883
- boxShadow: "0 8px 32px rgba(255, 255, 255, 0.15), inset 0 1px 0 rgba(255, 255, 255, 0.4)",
3884
- border: "1px solid rgba(255, 255, 255, 0.3)"
3886
+ rgba(100, 116, 139, 0.95) 0%,
3887
+ rgba(71, 85, 105, 0.9) 100%)`,
3888
+ backdropFilter: "blur(12px)",
3889
+ WebkitBackdropFilter: "blur(12px)",
3890
+ boxShadow: "0 4px 16px rgba(100, 116, 139, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.3)",
3891
+ border: "1px solid rgba(148, 163, 184, 0.5)"
3885
3892
  }
3886
3893
  },
3887
- /* @__PURE__ */ React21.createElement(
3894
+ /* @__PURE__ */ React24.createElement(
3888
3895
  "div",
3889
3896
  {
3890
3897
  className: "absolute inset-0 opacity-30",
@@ -3895,40 +3902,40 @@ var DialogueBox = ({
3895
3902
  }
3896
3903
  }
3897
3904
  ),
3898
- /* @__PURE__ */ React21.createElement("span", { className: "relative z-10 drop-shadow-lg" }, dialogue.speaker)
3899
- ), /* @__PURE__ */ React21.createElement(
3905
+ /* @__PURE__ */ React24.createElement("span", { className: "relative z-10 drop-shadow-lg" }, dialogue.speaker)
3906
+ ), /* @__PURE__ */ React24.createElement(
3900
3907
  "div",
3901
3908
  {
3902
3909
  className: "text-lg leading-relaxed relative",
3903
3910
  style: {
3904
3911
  color: theme.textColor,
3905
- textShadow: "0 2px 8px rgba(0, 0, 0, 0.5)"
3912
+ textShadow: "0 1px 2px rgba(0, 0, 0, 0.1)"
3906
3913
  }
3907
3914
  },
3908
- /* @__PURE__ */ React21.createElement("span", { className: "inline-block", style: {
3915
+ /* @__PURE__ */ React24.createElement("span", { className: "inline-block", style: {
3909
3916
  animation: !isComplete ? "textFadeIn 0.3s ease-out" : "none"
3910
3917
  } }, displayedText),
3911
- !isComplete && /* @__PURE__ */ React21.createElement(
3918
+ !isComplete && /* @__PURE__ */ React24.createElement(
3912
3919
  "span",
3913
3920
  {
3914
3921
  className: "inline-block w-1 h-6 ml-1 align-middle",
3915
3922
  style: {
3916
- background: "linear-gradient(to bottom, rgba(255, 255, 255, 1), rgba(255, 255, 255, 0.6))",
3923
+ background: "linear-gradient(to bottom, #22c55e, #4ade80)",
3917
3924
  animation: "cursorBlink 1s ease-in-out infinite",
3918
- boxShadow: "0 0 12px rgba(255, 255, 255, 0.8)"
3925
+ boxShadow: "0 0 8px rgba(34, 197, 94, 0.6)"
3919
3926
  }
3920
3927
  }
3921
3928
  )
3922
- ), isComplete && theme.showContinueHint && /* @__PURE__ */ React21.createElement("div", { className: "flex justify-end mt-4" }, /* @__PURE__ */ React21.createElement(
3929
+ ), /* @__PURE__ */ React24.createElement("div", { className: "flex justify-end mt-4 h-10 relative" }, isComplete && theme.showContinueHint && /* @__PURE__ */ React24.createElement(
3923
3930
  "span",
3924
3931
  {
3925
- className: "text-sm px-4 py-2 rounded-full backdrop-blur-lg font-medium",
3932
+ className: "text-sm px-4 py-2 rounded-full backdrop-blur-lg font-medium absolute right-0",
3926
3933
  style: {
3927
- background: "linear-gradient(135deg, rgba(255, 255, 255, 0.25), rgba(255, 255, 255, 0.15))",
3928
- color: "rgba(255, 255, 255, 0.9)",
3934
+ background: "linear-gradient(135deg, rgba(203, 213, 225, 0.9), rgba(226, 232, 240, 0.85))",
3935
+ color: "rgba(71, 85, 105, 0.9)",
3929
3936
  animation: "bounce 2s ease-in-out infinite",
3930
- boxShadow: "0 4px 16px rgba(255, 255, 255, 0.2), inset 0 1px 0 rgba(255, 255, 255, 0.3)",
3931
- border: "1px solid rgba(255, 255, 255, 0.3)"
3937
+ boxShadow: "0 4px 16px rgba(100, 116, 139, 0.2), inset 0 1px 0 rgba(255, 255, 255, 0.6)",
3938
+ border: "1px solid rgba(148, 163, 184, 0.4)"
3932
3939
  }
3933
3940
  },
3934
3941
  theme.continueHint
@@ -3957,7 +3964,7 @@ var HistoryPanel = ({
3957
3964
  useEffect(() => {
3958
3965
  setIsMounted(true);
3959
3966
  }, []);
3960
- const historyContent = /* @__PURE__ */ React21.createElement(
3967
+ const historyContent = /* @__PURE__ */ React24.createElement(
3961
3968
  "div",
3962
3969
  {
3963
3970
  className: `fixed inset-0 flex flex-col ${className}`,
@@ -3968,7 +3975,7 @@ var HistoryPanel = ({
3968
3975
  },
3969
3976
  onClick: onClose
3970
3977
  },
3971
- /* @__PURE__ */ React21.createElement(
3978
+ /* @__PURE__ */ React24.createElement(
3972
3979
  "div",
3973
3980
  {
3974
3981
  className: "absolute inset-0 opacity-25 pointer-events-none",
@@ -3984,7 +3991,7 @@ var HistoryPanel = ({
3984
3991
  }
3985
3992
  }
3986
3993
  ),
3987
- /* @__PURE__ */ React21.createElement(
3994
+ /* @__PURE__ */ React24.createElement(
3988
3995
  "div",
3989
3996
  {
3990
3997
  className: "absolute inset-0 pointer-events-none",
@@ -3994,7 +4001,7 @@ var HistoryPanel = ({
3994
4001
  }
3995
4002
  }
3996
4003
  ),
3997
- /* @__PURE__ */ React21.createElement("div", { className: "relative z-10 flex flex-col h-full", onClick: (e) => e.stopPropagation() }, /* @__PURE__ */ React21.createElement(
4004
+ /* @__PURE__ */ React24.createElement("div", { className: "relative z-10 flex flex-col h-full", onClick: (e) => e.stopPropagation() }, /* @__PURE__ */ React24.createElement(
3998
4005
  "div",
3999
4006
  {
4000
4007
  className: "flex items-center justify-between px-8 py-6 border-b relative",
@@ -4006,8 +4013,8 @@ var HistoryPanel = ({
4006
4013
  boxShadow: "0 4px 24px rgba(255, 255, 255, 0.1), inset 0 1px 0 rgba(255, 255, 255, 0.3)"
4007
4014
  }
4008
4015
  },
4009
- /* @__PURE__ */ React21.createElement("h2", { className: "text-2xl font-bold text-white flex items-center gap-3" }, /* @__PURE__ */ React21.createElement("span", { className: "text-3xl" }, "\u{1F4DC}"), /* @__PURE__ */ React21.createElement("span", { style: { textShadow: "0 2px 12px rgba(255, 255, 255, 0.3)" } }, "\u5BF9\u8BDD\u5386\u53F2")),
4010
- /* @__PURE__ */ React21.createElement(
4016
+ /* @__PURE__ */ React24.createElement("h2", { className: "text-2xl font-bold text-white flex items-center gap-3" }, /* @__PURE__ */ React24.createElement("span", { className: "text-3xl" }, "\u{1F4DC}"), /* @__PURE__ */ React24.createElement("span", { style: { textShadow: "0 2px 12px rgba(255, 255, 255, 0.3)" } }, "\u5BF9\u8BDD\u5386\u53F2")),
4017
+ /* @__PURE__ */ React24.createElement(
4011
4018
  "button",
4012
4019
  {
4013
4020
  onClick: onClose,
@@ -4021,9 +4028,9 @@ var HistoryPanel = ({
4021
4028
  },
4022
4029
  "aria-label": "\u5173\u95ED"
4023
4030
  },
4024
- /* @__PURE__ */ React21.createElement("svg", { className: "w-6 h-6", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor" }, /* @__PURE__ */ React21.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }))
4031
+ /* @__PURE__ */ React24.createElement("svg", { className: "w-6 h-6", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor" }, /* @__PURE__ */ React24.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }))
4025
4032
  )
4026
- ), /* @__PURE__ */ React21.createElement("div", { className: "flex-1 overflow-y-auto p-6 space-y-4" }, history.length === 0 ? /* @__PURE__ */ React21.createElement("div", { className: "text-center text-white/70 py-20 text-lg font-medium", style: { textShadow: "0 2px 8px rgba(0, 0, 0, 0.3)" } }, "\u6682\u65E0\u5BF9\u8BDD\u5386\u53F2") : history.map((item, index) => /* @__PURE__ */ React21.createElement(
4033
+ ), /* @__PURE__ */ React24.createElement("div", { className: "flex-1 overflow-y-auto p-6 space-y-4" }, history.length === 0 ? /* @__PURE__ */ React24.createElement("div", { className: "text-center text-white/70 py-20 text-lg font-medium", style: { textShadow: "0 2px 8px rgba(0, 0, 0, 0.3)" } }, "\u6682\u65E0\u5BF9\u8BDD\u5386\u53F2") : history.map((item, index) => /* @__PURE__ */ React24.createElement(
4027
4034
  "div",
4028
4035
  {
4029
4036
  key: `${item.nodeIndex}-${item.dialogueIndex}-${index}`,
@@ -4036,7 +4043,7 @@ var HistoryPanel = ({
4036
4043
  boxShadow: "0 8px 24px rgba(255, 255, 255, 0.08), inset 0 1px 0 rgba(255, 255, 255, 0.25)"
4037
4044
  }
4038
4045
  },
4039
- /* @__PURE__ */ React21.createElement(
4046
+ /* @__PURE__ */ React24.createElement(
4040
4047
  "div",
4041
4048
  {
4042
4049
  className: "absolute top-0 left-0 right-0 h-0.5",
@@ -4045,7 +4052,7 @@ var HistoryPanel = ({
4045
4052
  }
4046
4053
  }
4047
4054
  ),
4048
- item.speaker && /* @__PURE__ */ React21.createElement(
4055
+ item.speaker && /* @__PURE__ */ React24.createElement(
4049
4056
  "div",
4050
4057
  {
4051
4058
  className: "inline-block px-5 py-2 rounded-xl mb-3 text-sm font-bold shadow-lg relative overflow-hidden",
@@ -4058,7 +4065,7 @@ var HistoryPanel = ({
4058
4065
  border: "1px solid rgba(255, 255, 255, 0.25)"
4059
4066
  }
4060
4067
  },
4061
- /* @__PURE__ */ React21.createElement(
4068
+ /* @__PURE__ */ React24.createElement(
4062
4069
  "div",
4063
4070
  {
4064
4071
  className: "absolute inset-0 opacity-30",
@@ -4069,9 +4076,9 @@ var HistoryPanel = ({
4069
4076
  }
4070
4077
  }
4071
4078
  ),
4072
- /* @__PURE__ */ React21.createElement("span", { className: "relative z-10 drop-shadow-lg" }, item.speaker)
4079
+ /* @__PURE__ */ React24.createElement("span", { className: "relative z-10 drop-shadow-lg" }, item.speaker)
4073
4080
  ),
4074
- /* @__PURE__ */ React21.createElement(
4081
+ /* @__PURE__ */ React24.createElement(
4075
4082
  "p",
4076
4083
  {
4077
4084
  className: "text-base leading-relaxed",
@@ -4082,7 +4089,7 @@ var HistoryPanel = ({
4082
4089
  },
4083
4090
  item.text
4084
4091
  )
4085
- ))), /* @__PURE__ */ React21.createElement(
4092
+ ))), /* @__PURE__ */ React24.createElement(
4086
4093
  "div",
4087
4094
  {
4088
4095
  className: "px-8 py-4 border-t text-center",
@@ -4094,7 +4101,7 @@ var HistoryPanel = ({
4094
4101
  boxShadow: "inset 0 1px 0 rgba(255, 255, 255, 0.2)"
4095
4102
  }
4096
4103
  },
4097
- /* @__PURE__ */ React21.createElement(
4104
+ /* @__PURE__ */ React24.createElement(
4098
4105
  "span",
4099
4106
  {
4100
4107
  className: "text-sm px-5 py-2.5 rounded-full inline-block font-medium",
@@ -4144,7 +4151,7 @@ var LoadingScreen = ({
4144
4151
  console.log("[LoadingScreen] Not showing, returning null");
4145
4152
  return null;
4146
4153
  }
4147
- const content = /* @__PURE__ */ React21.createElement(
4154
+ const content = /* @__PURE__ */ React24.createElement(
4148
4155
  "div",
4149
4156
  {
4150
4157
  className: `fixed inset-0 w-screen h-screen flex items-center justify-center ${className}`,
@@ -4156,7 +4163,7 @@ var LoadingScreen = ({
4156
4163
  padding: 0
4157
4164
  }
4158
4165
  },
4159
- /* @__PURE__ */ React21.createElement(
4166
+ /* @__PURE__ */ React24.createElement(
4160
4167
  "div",
4161
4168
  {
4162
4169
  className: "absolute inset-0 w-full h-full pointer-events-none",
@@ -4166,7 +4173,7 @@ var LoadingScreen = ({
4166
4173
  WebkitBackdropFilter: "blur(32px) saturate(200%)"
4167
4174
  }
4168
4175
  },
4169
- /* @__PURE__ */ React21.createElement(
4176
+ /* @__PURE__ */ React24.createElement(
4170
4177
  "div",
4171
4178
  {
4172
4179
  className: "flex items-center justify-center flex-col inset-0 w-full h-full pointer-events-none",
@@ -4181,7 +4188,7 @@ var LoadingScreen = ({
4181
4188
  animation: "gradientShift 15s ease infinite"
4182
4189
  }
4183
4190
  },
4184
- /* @__PURE__ */ React21.createElement(
4191
+ /* @__PURE__ */ React24.createElement(
4185
4192
  "div",
4186
4193
  {
4187
4194
  className: "text-lg font-medium text-white text-center px-6 py-3 rounded-2xl"
@@ -4216,39 +4223,53 @@ var LoadingScreen = ({
4216
4223
  LoadingScreen.displayName = "LoadingScreen";
4217
4224
  var VNModal = ({ title, show, onClose, children }) => {
4218
4225
  if (!show) return null;
4219
- return /* @__PURE__ */ React21.createElement(
4226
+ return /* @__PURE__ */ React24.createElement(
4220
4227
  "div",
4221
4228
  {
4222
- className: "fixed inset-0 flex items-center justify-center bg-black/40 backdrop-blur-xl z-[1000000] pointer-events-auto transition-all animate-in fade-in zoom-in-95 duration-300",
4229
+ className: "fixed inset-0 flex items-center justify-center backdrop-blur-xl z-[1000000] pointer-events-auto transition-all animate-in fade-in zoom-in-95 duration-300 px-4",
4230
+ style: { background: "rgba(100, 116, 139, 0.3)" },
4223
4231
  onClick: onClose
4224
4232
  },
4225
- /* @__PURE__ */ React21.createElement(
4233
+ /* @__PURE__ */ React24.createElement(
4226
4234
  "div",
4227
4235
  {
4228
- className: "w-full max-w-lg mx-4 p-8 rounded-[2.5rem] border border-white/40 shadow-[0_20px_80px_rgba(0,0,0,0.4)] relative overflow-hidden",
4236
+ className: "w-full max-w-lg p-4 sm:p-6 md:p-8 rounded-3xl sm:rounded-[2.5rem] border relative overflow-hidden max-h-[90vh] overflow-y-auto",
4229
4237
  style: {
4230
- background: "linear-gradient(135deg, rgba(255, 255, 255, 0.3), rgba(255, 255, 255, 0.15))",
4238
+ background: "linear-gradient(135deg, rgba(248, 250, 252, 0.98), rgba(241, 245, 249, 0.95))",
4231
4239
  backdropFilter: "blur(40px) saturate(200%)",
4232
- WebkitBackdropFilter: "blur(40px) saturate(200%)"
4240
+ WebkitBackdropFilter: "blur(40px) saturate(200%)",
4241
+ borderColor: "rgba(203, 213, 225, 0.8)",
4242
+ boxShadow: "0 20px 80px rgba(100, 116, 139, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.8)"
4233
4243
  },
4234
4244
  onClick: (e) => e.stopPropagation()
4235
4245
  },
4236
- /* @__PURE__ */ React21.createElement("div", { className: "absolute -top-24 -right-24 w-64 h-64 bg-cyan-400/20 rounded-full blur-3xl pointer-events-none" }),
4237
- /* @__PURE__ */ React21.createElement("div", { className: "absolute -bottom-24 -left-24 w-64 h-64 bg-pink-400/20 rounded-full blur-3xl pointer-events-none" }),
4238
- /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between mb-8 relative" }, /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col" }, /* @__PURE__ */ React21.createElement("h2", { className: "text-2xl font-bold text-white tracking-wider drop-shadow-lg" }, title), /* @__PURE__ */ React21.createElement("div", { className: "h-1.5 w-16 bg-white/60 rounded-full mt-2 shadow-[0_0_10px_rgba(255,255,255,0.5)]" })), /* @__PURE__ */ React21.createElement(
4246
+ /* @__PURE__ */ React24.createElement("div", { className: "absolute -top-24 -right-24 w-64 h-64 bg-slate-300/15 rounded-full blur-3xl pointer-events-none" }),
4247
+ /* @__PURE__ */ React24.createElement("div", { className: "absolute -bottom-24 -left-24 w-64 h-64 bg-slate-400/15 rounded-full blur-3xl pointer-events-none" }),
4248
+ /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between mb-6 sm:mb-8 relative" }, /* @__PURE__ */ React24.createElement("div", { className: "flex flex-col" }, /* @__PURE__ */ React24.createElement("h2", { className: "text-xl sm:text-2xl font-bold tracking-wider drop-shadow-sm", style: { color: "#22c55e" } }, title), /* @__PURE__ */ React24.createElement("div", { className: "h-1 sm:h-1.5 w-12 sm:w-16 bg-green-500/80 rounded-full mt-2 shadow-[0_0_10px_rgba(34,197,94,0.4)]" })), /* @__PURE__ */ React24.createElement(
4239
4249
  "button",
4240
4250
  {
4241
4251
  onClick: onClose,
4242
- className: "w-12 h-12 rounded-full flex items-center justify-center bg-white/10 hover:bg-white/30 text-white transition-all border border-white/20 shadow-inner"
4252
+ className: "w-10 h-10 sm:w-12 sm:h-12 rounded-full flex items-center justify-center transition-all border shadow-inner touch-manipulation shrink-0",
4253
+ style: {
4254
+ background: "rgba(241, 245, 249, 0.8)",
4255
+ borderColor: "rgba(203, 213, 225, 0.6)",
4256
+ color: "#64748b"
4257
+ }
4243
4258
  },
4244
4259
  "\u2715"
4245
4260
  )),
4246
- /* @__PURE__ */ React21.createElement("div", { className: "text-white leading-relaxed max-h-[50vh] overflow-y-auto pr-4 custom-scrollbar relative font-medium" }, children),
4247
- /* @__PURE__ */ React21.createElement("div", { className: "mt-10 flex justify-center relative" }, /* @__PURE__ */ React21.createElement(
4261
+ /* @__PURE__ */ React24.createElement("div", { className: "leading-relaxed max-h-[40vh] sm:max-h-[50vh] overflow-y-auto pr-2 sm:pr-4 custom-scrollbar relative font-medium text-sm sm:text-base", style: { color: "#475569" } }, children),
4262
+ /* @__PURE__ */ React24.createElement("div", { className: "mt-6 sm:mt-10 flex justify-center relative" }, /* @__PURE__ */ React24.createElement(
4248
4263
  "button",
4249
4264
  {
4250
4265
  onClick: onClose,
4251
- className: "px-14 py-3.5 rounded-2xl bg-white/20 hover:bg-white/40 text-white font-bold transition-all border border-white/50 shadow-[0_0_20px_rgba(255,255,255,0.2)] hover:scale-105 active:scale-95 tracking-[0.2em] uppercase text-sm"
4266
+ className: "px-10 sm:px-14 py-3 sm:py-3.5 rounded-xl sm:rounded-2xl font-bold transition-all border hover:scale-105 active:scale-95 tracking-[0.15em] sm:tracking-[0.2em] uppercase text-xs sm:text-sm touch-manipulation",
4267
+ style: {
4268
+ background: "linear-gradient(135deg, rgba(248, 250, 252, 0.98), rgba(226, 232, 240, 0.95))",
4269
+ borderColor: "rgba(203, 213, 225, 0.8)",
4270
+ color: "#22c55e",
4271
+ boxShadow: "0 4px 16px rgba(100, 116, 139, 0.2), inset 0 1px 0 rgba(255, 255, 255, 0.8)"
4272
+ }
4252
4273
  },
4253
4274
  "Confirm"
4254
4275
  ))
@@ -4272,97 +4293,120 @@ var StartScreen = ({
4272
4293
  }, []);
4273
4294
  if (!isMounted) return null;
4274
4295
  if (!showStartScreen) return null;
4275
- const content = /* @__PURE__ */ React21.createElement(
4296
+ const content = /* @__PURE__ */ React24.createElement(
4276
4297
  "div",
4277
4298
  {
4278
4299
  className: `fixed inset-0 w-screen h-screen flex items-center justify-center overflow-hidden ${className}`,
4279
4300
  style: {
4280
4301
  zIndex: 999999,
4281
4302
  pointerEvents: "auto",
4282
- backgroundColor: "#050505",
4303
+ backgroundColor: "#f1f5f9",
4283
4304
  margin: 0,
4284
4305
  padding: 0
4285
4306
  }
4286
4307
  },
4287
- /* @__PURE__ */ React21.createElement("div", { className: "absolute inset-0 w-full h-full overflow-hidden" }, /* @__PURE__ */ React21.createElement(
4308
+ /* @__PURE__ */ React24.createElement("div", { className: "absolute inset-0 w-full h-full overflow-hidden" }, /* @__PURE__ */ React24.createElement(
4288
4309
  "div",
4289
4310
  {
4290
- className: "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[150vw] h-[150vw] opacity-40 pointer-events-none",
4311
+ className: "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[150vw] h-[150vw] opacity-20 pointer-events-none",
4291
4312
  style: {
4292
- background: "radial-gradient(circle at center, rgba(57, 197, 187, 0.4) 0%, rgba(255, 182, 193, 0.2) 30%, transparent 70%)",
4313
+ background: "radial-gradient(circle at center, rgba(226, 232, 240, 0.6) 0%, rgba(203, 213, 225, 0.3) 30%, transparent 70%)",
4293
4314
  filter: "blur(60px)",
4294
4315
  animation: "pulse 10s ease-in-out infinite"
4295
4316
  }
4296
4317
  }
4297
- ), /* @__PURE__ */ React21.createElement("div", { className: "absolute inset-0 transition-opacity duration-1000" }, /* @__PURE__ */ React21.createElement("div", { className: "absolute top-[-10%] left-[-10%] w-[60%] h-[60%] bg-cyan-500/10 rounded-full blur-[120px] animate-blob" }), /* @__PURE__ */ React21.createElement("div", { className: "absolute bottom-[-10%] right-[-10%] w-[60%] h-[60%] bg-purple-500/10 rounded-full blur-[120px] animate-blob animation-delay-2000" }), /* @__PURE__ */ React21.createElement("div", { className: "absolute top-[20%] right-[10%] w-[40%] h-[40%] bg-pink-500/10 rounded-full blur-[100px] animate-blob animation-delay-4000" })), /* @__PURE__ */ React21.createElement("div", { className: "absolute inset-0 opacity-60" }, [...Array(40)].map((_, i) => /* @__PURE__ */ React21.createElement(
4318
+ ), /* @__PURE__ */ React24.createElement("div", { className: "absolute inset-0 transition-opacity duration-1000" }, /* @__PURE__ */ React24.createElement("div", { className: "absolute top-[-10%] left-[-10%] w-[60%] h-[60%] bg-slate-300/20 rounded-full blur-[120px] animate-blob" }), /* @__PURE__ */ React24.createElement("div", { className: "absolute bottom-[-10%] right-[-10%] w-[60%] h-[60%] bg-slate-400/15 rounded-full blur-[120px] animate-blob animation-delay-2000" }), /* @__PURE__ */ React24.createElement("div", { className: "absolute top-[20%] right-[10%] w-[40%] h-[40%] bg-slate-300/15 rounded-full blur-[100px] animate-blob animation-delay-4000" })), /* @__PURE__ */ React24.createElement("div", { className: "absolute inset-0 opacity-30" }, [...Array(typeof window !== "undefined" && window.innerWidth < 768 ? 20 : 40)].map((_, i) => /* @__PURE__ */ React24.createElement(
4298
4319
  "div",
4299
4320
  {
4300
4321
  key: i,
4301
- className: "absolute bg-white/40 rounded-full",
4322
+ className: "absolute bg-slate-400/60 rounded-full",
4302
4323
  style: {
4303
4324
  width: Math.random() * 3 + 1 + "px",
4304
4325
  height: Math.random() * 3 + 1 + "px",
4305
4326
  top: Math.random() * 100 + "%",
4306
4327
  left: Math.random() * 100 + "%",
4307
- boxShadow: "0 0 10px rgba(255,255,255,0.5)",
4328
+ boxShadow: "0 0 10px rgba(148, 163, 184, 0.3)",
4308
4329
  animation: `floatParticle ${Math.random() * 10 + 10}s linear infinite`,
4309
4330
  animationDelay: `-${Math.random() * 20}s`
4310
4331
  }
4311
4332
  }
4312
4333
  )))),
4313
- /* @__PURE__ */ React21.createElement("div", { className: "relative z-10 w-full max-w-5xl mx-auto px-6 flex flex-col items-center" }, /* @__PURE__ */ React21.createElement("div", { className: "text-center mb-20 md:mb-32 group flex flex-col items-center" }, /* @__PURE__ */ React21.createElement("div", { className: "w-40 h-px bg-gradient-to-r from-transparent via-white/60 to-transparent mb-10 shadow-[0_0_15px_rgba(255,255,255,0.5)]" }), /* @__PURE__ */ React21.createElement(
4334
+ /* @__PURE__ */ React24.createElement("div", { className: "relative z-10 w-full max-w-5xl mx-auto px-4 sm:px-6 flex flex-col items-center" }, /* @__PURE__ */ React24.createElement("div", { className: "text-center mb-12 sm:mb-20 md:mb-32 group flex flex-col items-center" }, /* @__PURE__ */ React24.createElement("div", { className: "w-24 sm:w-40 h-px bg-gradient-to-r from-transparent via-slate-400/60 to-transparent mb-6 sm:mb-10 shadow-[0_0_15px_rgba(148,163,184,0.3)]" }), /* @__PURE__ */ React24.createElement(
4314
4335
  "h1",
4315
4336
  {
4316
- className: "text-6xl md:text-8xl font-black text-white tracking-[0.15em] leading-tight select-none",
4337
+ className: "text-4xl sm:text-5xl md:text-6xl lg:text-8xl font-black tracking-[0.1em] sm:tracking-[0.15em] leading-tight select-none px-4",
4317
4338
  style: {
4318
- filter: "drop-shadow(0 0 20px rgba(255,255,255,0.3))",
4319
- textShadow: "0 10px 30px rgba(0,0,0,0.5)"
4339
+ color: "#22c55e",
4340
+ filter: "drop-shadow(0 0 20px rgba(34, 197, 94, 0.4))",
4341
+ textShadow: "0 4px 12px rgba(100, 116, 139, 0.3)"
4320
4342
  }
4321
4343
  },
4322
4344
  scriptName || "VISUAL NOVEL"
4323
- ), /* @__PURE__ */ React21.createElement("div", { className: "mt-10 flex flex-col items-center gap-4" }, /* @__PURE__ */ React21.createElement("div", { className: "h-1 w-32 bg-white rounded-full opacity-80 shadow-[0_0_20px_rgba(255,255,255,0.8)]" }), /* @__PURE__ */ React21.createElement("span", { className: "text-sm md:text-base tracking-[0.8em] text-white/60 font-medium uppercase translate-x-[0.4em]" }, "Adventure System"))), /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col gap-10 items-center w-full max-w-sm" }, /* @__PURE__ */ React21.createElement(
4345
+ ), /* @__PURE__ */ React24.createElement("div", { className: "mt-6 sm:mt-10 flex flex-col items-center gap-3 sm:gap-4" }, /* @__PURE__ */ React24.createElement("div", { className: "h-0.5 sm:h-1 w-20 sm:w-32 bg-green-500 rounded-full opacity-80 shadow-[0_0_20px_rgba(34,197,94,0.5)]" }), /* @__PURE__ */ React24.createElement("span", { className: "text-xs sm:text-sm md:text-base tracking-[0.5em] sm:tracking-[0.8em] font-medium uppercase translate-x-[0.25em] sm:translate-x-[0.4em]", style: { color: "#64748b" } }, "Adventure System"))), /* @__PURE__ */ React24.createElement("div", { className: "flex flex-col gap-6 sm:gap-10 items-center w-full max-w-sm px-4 sm:px-0" }, /* @__PURE__ */ React24.createElement(
4324
4346
  "button",
4325
4347
  {
4326
4348
  onClick: onStart,
4327
- className: "group relative w-full h-20 flex items-center justify-center transition-all duration-500 active:scale-95"
4349
+ className: "group relative w-full h-16 sm:h-20 flex items-center justify-center transition-all duration-500 active:scale-95 touch-manipulation"
4328
4350
  },
4329
- /* @__PURE__ */ React21.createElement(
4351
+ /* @__PURE__ */ React24.createElement(
4330
4352
  "div",
4331
4353
  {
4332
- className: "absolute inset-0 bg-white/10 backdrop-blur-2xl border-2 border-white/40 rounded-3xl transition-all duration-500 group-hover:bg-white/25 group-hover:border-white/70 group-hover:shadow-[0_0_50px_rgba(255,255,255,0.3)] group-hover:-inset-1"
4354
+ className: "absolute inset-0 backdrop-blur-2xl border-2 rounded-3xl transition-all duration-500 group-hover:-inset-1",
4355
+ style: {
4356
+ background: "linear-gradient(135deg, rgba(248, 250, 252, 0.98), rgba(226, 232, 240, 0.95))",
4357
+ borderColor: "rgba(203, 213, 225, 0.8)",
4358
+ boxShadow: "0 8px 40px rgba(148, 163, 184, 0.2), inset 0 1px 0 rgba(255, 255, 255, 0.8)"
4359
+ }
4333
4360
  }
4334
4361
  ),
4335
- /* @__PURE__ */ React21.createElement("div", { className: "absolute inset-0 overflow-hidden rounded-3xl pointer-events-none" }, /* @__PURE__ */ React21.createElement("div", { className: "absolute inset-0 opacity-0 group-hover:opacity-100 transition-opacity duration-700 bg-gradient-to-r from-transparent via-white/20 to-transparent -skew-x-[25deg] -translate-x-[200%] group-hover:translate-x-[200%] transition-transform duration-1000 ease-in-out" })),
4336
- /* @__PURE__ */ React21.createElement("div", { className: "relative flex items-center gap-6" }, /* @__PURE__ */ React21.createElement("div", { className: "w-3 h-3 rounded-full bg-cyan-400 animate-ping opacity-75" }), /* @__PURE__ */ React21.createElement("span", { className: "text-2xl font-black text-white tracking-[0.4em] drop-shadow-md" }, startText), /* @__PURE__ */ React21.createElement("div", { className: "w-3 h-3 rounded-full bg-pink-400 animate-ping opacity-75" }))
4337
- ), /* @__PURE__ */ React21.createElement("div", { className: "flex gap-8 w-full justify-center" }, [
4338
- { text: settingsText, onClick: () => setShowSettings(true), color: "rgba(57, 197, 187, 0.2)" },
4339
- { text: aboutText, onClick: () => setShowAbout(true), color: "rgba(255, 182, 193, 0.2)" }
4340
- ].map((btn, idx) => /* @__PURE__ */ React21.createElement(
4362
+ /* @__PURE__ */ React24.createElement("div", { className: "absolute inset-0 overflow-hidden rounded-3xl pointer-events-none" }, /* @__PURE__ */ React24.createElement("div", { className: "absolute inset-0 opacity-0 group-hover:opacity-100 transition-opacity duration-700 bg-gradient-to-r from-transparent via-slate-300/30 to-transparent -skew-x-[25deg] -translate-x-[200%] group-hover:translate-x-[200%] transition-transform duration-1000 ease-in-out" })),
4363
+ /* @__PURE__ */ React24.createElement("div", { className: "relative flex items-center gap-3 sm:gap-6" }, /* @__PURE__ */ React24.createElement("div", { className: "w-2 h-2 sm:w-3 sm:h-3 rounded-full bg-green-500 animate-ping opacity-75" }), /* @__PURE__ */ React24.createElement("span", { className: "text-lg sm:text-2xl font-black tracking-[0.3em] sm:tracking-[0.4em] drop-shadow-sm", style: { color: "#22c55e" } }, startText), /* @__PURE__ */ React24.createElement("div", { className: "w-2 h-2 sm:w-3 sm:h-3 rounded-full bg-green-600 animate-ping opacity-75" }))
4364
+ ), /* @__PURE__ */ React24.createElement("div", { className: "flex gap-4 sm:gap-8 w-full justify-center" }, [
4365
+ { text: settingsText, onClick: () => setShowSettings(true) },
4366
+ { text: aboutText, onClick: () => setShowAbout(true) }
4367
+ ].map((btn, idx) => /* @__PURE__ */ React24.createElement(
4341
4368
  "button",
4342
4369
  {
4343
4370
  key: idx,
4344
4371
  onClick: btn.onClick,
4345
- className: "group relative flex-1 h-14 flex items-center justify-center transition-all duration-300 active:scale-95 overflow-hidden rounded-2xl"
4372
+ className: "group relative flex-1 h-12 sm:h-14 flex items-center justify-center transition-all duration-300 active:scale-95 overflow-hidden rounded-xl sm:rounded-2xl touch-manipulation"
4346
4373
  },
4347
- /* @__PURE__ */ React21.createElement(
4374
+ /* @__PURE__ */ React24.createElement(
4348
4375
  "div",
4349
4376
  {
4350
- className: "absolute inset-0 bg-white/5 backdrop-blur-xl border border-white/20 transition-all duration-300 group-hover:bg-white/15 group-hover:border-white/40"
4351
- }
4352
- ),
4353
- /* @__PURE__ */ React21.createElement(
4354
- "div",
4355
- {
4356
- className: "absolute inset-0 opacity-0 group-hover:opacity-100 transition-opacity",
4357
- style: { background: btn.color }
4377
+ className: "absolute inset-0 backdrop-blur-xl border transition-all duration-300",
4378
+ style: {
4379
+ background: "linear-gradient(135deg, rgba(241, 245, 249, 0.95), rgba(226, 232, 240, 0.9))",
4380
+ borderColor: "rgba(203, 213, 225, 0.6)",
4381
+ boxShadow: "0 4px 16px rgba(100, 116, 139, 0.15)"
4382
+ }
4358
4383
  }
4359
4384
  ),
4360
- /* @__PURE__ */ React21.createElement("span", { className: "relative text-sm md:text-base font-bold text-white/80 group-hover:text-white tracking-[0.25em] transition-colors uppercase" }, btn.text)
4385
+ /* @__PURE__ */ React24.createElement("span", { className: "relative text-xs sm:text-sm md:text-base font-bold tracking-[0.15em] sm:tracking-[0.25em] transition-colors uppercase", style: { color: "#64748b" } }, btn.text)
4361
4386
  ))))),
4362
- /* @__PURE__ */ React21.createElement("div", { className: "fixed bottom-10 left-0 right-0 text-center pointer-events-none select-none" }, /* @__PURE__ */ React21.createElement("div", { className: "inline-block px-6 py-2 rounded-full bg-white/5 backdrop-blur-md border border-white/10" }, /* @__PURE__ */ React21.createElement("span", { className: "text-[10px] md:text-xs text-white/30 tracking-[0.5em] font-light uppercase" }, "Ver 1.6.2 \u2014 ENGINE POWERED BY SA2KIT"))),
4363
- /* @__PURE__ */ React21.createElement(VNModal, { title: settingsText, show: showSettings, onClose: () => setShowSettings(false) }, /* @__PURE__ */ React21.createElement("div", { className: "space-y-8 py-4" }, /* @__PURE__ */ React21.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React21.createElement("div", { className: "flex justify-between items-center text-sm font-bold tracking-widest text-white/60" }, /* @__PURE__ */ React21.createElement("span", null, "MUSIC VOLUME"), /* @__PURE__ */ React21.createElement("span", null, "80%")), /* @__PURE__ */ React21.createElement("div", { className: "h-3 bg-white/10 rounded-full p-0.5 border border-white/10" }, /* @__PURE__ */ React21.createElement("div", { className: "h-full w-[80%] bg-gradient-to-r from-cyan-400 to-blue-500 rounded-full shadow-[0_0_15px_rgba(34,211,238,0.5)]" }))), /* @__PURE__ */ React21.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React21.createElement("div", { className: "flex justify-between items-center text-sm font-bold tracking-widest text-white/60" }, /* @__PURE__ */ React21.createElement("span", null, "TEXT SPEED"), /* @__PURE__ */ React21.createElement("span", null, "NORMAL")), /* @__PURE__ */ React21.createElement("div", { className: "flex gap-3" }, ["SLOW", "NORMAL", "FAST"].map((s, i) => /* @__PURE__ */ React21.createElement("div", { key: s, className: `flex-1 py-3 rounded-xl border text-center text-xs font-bold transition-all cursor-pointer ${i === 1 ? "bg-white/20 border-white/60 text-white" : "bg-white/5 border-white/10 text-white/40 hover:bg-white/10 hover:border-white/30"}` }, s)))), /* @__PURE__ */ React21.createElement("div", { className: "pt-4 flex items-center justify-between opacity-50 italic text-xs border-t border-white/10" }, /* @__PURE__ */ React21.createElement("span", null, "Auto Save Enabled"), /* @__PURE__ */ React21.createElement("span", null, "Cloud Sync Active")))),
4364
- /* @__PURE__ */ React21.createElement(VNModal, { title: aboutText, show: showAbout, onClose: () => setShowAbout(false) }, /* @__PURE__ */ React21.createElement("div", { className: "space-y-8 py-4" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-6 p-6 rounded-3xl bg-white/5 border border-white/10" }, /* @__PURE__ */ React21.createElement("div", { className: "w-20 h-20 rounded-2xl bg-gradient-to-br from-cyan-400 via-blue-500 to-purple-600 flex items-center justify-center text-3xl font-black text-white shadow-[0_10px_30px_rgba(0,0,0,0.3)]" }, "S2"), /* @__PURE__ */ React21.createElement("div", null, /* @__PURE__ */ React21.createElement("h3", { className: "text-2xl font-black text-white tracking-tight" }, scriptName || "Project SA2"), /* @__PURE__ */ React21.createElement("p", { className: "text-xs font-bold text-white/40 tracking-widest mt-1 uppercase" }, "Visual Novel Experience"))), /* @__PURE__ */ React21.createElement("div", { className: "space-y-4 px-2" }, /* @__PURE__ */ React21.createElement("p", { className: "text-white/80 font-medium leading-relaxed" }, "\u91C7\u7528 sa2kit \u5F15\u64CE\u6784\u5EFA\u7684\u65B0\u4E00\u4EE3\u5B9E\u65F6 3D \u89C6\u89C9\u5C0F\u8BF4\u3002\u7ED3\u5408\u4E86 MMD \u5B9E\u65F6\u6E32\u67D3\u6280\u672F\u4E0E\u4EA4\u4E92\u5F0F\u5267\u60C5\u5206\u652F\u7CFB\u7EDF\uFF0C\u81F4\u529B\u4E8E\u6253\u9020\u6781\u81F4\u7684\u6C89\u6D78\u5F0F\u53D9\u4E8B\u4F53\u9A8C\u3002")), /* @__PURE__ */ React21.createElement("div", { className: "grid grid-cols-2 gap-4 pt-6 border-t border-white/10" }, /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col gap-1" }, /* @__PURE__ */ React21.createElement("span", { className: "text-[10px] font-bold text-white/30 tracking-widest" }, "DEVELOPER"), /* @__PURE__ */ React21.createElement("span", { className: "text-xs font-bold text-white/80" }, "SA2KIT TEAM")), /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col gap-1 text-right" }, /* @__PURE__ */ React21.createElement("span", { className: "text-[10px] font-bold text-white/30 tracking-widest" }, "ENGINE"), /* @__PURE__ */ React21.createElement("span", { className: "text-xs font-bold text-white/80" }, "THREE.JS / REACT"))))),
4365
- /* @__PURE__ */ React21.createElement("style", null, `
4387
+ /* @__PURE__ */ React24.createElement("div", { className: "fixed bottom-4 sm:bottom-10 left-0 right-0 text-center pointer-events-none select-none px-4" }, /* @__PURE__ */ React24.createElement("div", { className: "inline-block px-3 sm:px-6 py-1.5 sm:py-2 rounded-full backdrop-blur-md border", style: {
4388
+ background: "rgba(248, 250, 252, 0.8)",
4389
+ borderColor: "rgba(203, 213, 225, 0.3)"
4390
+ } }, /* @__PURE__ */ React24.createElement("span", { className: "text-[8px] sm:text-[10px] md:text-xs tracking-[0.3em] sm:tracking-[0.5em] font-light uppercase", style: { color: "rgba(100, 116, 139, 0.5)" } }, "Ver 1.6.2 \u2014 ENGINE POWERED BY SA2KIT"))),
4391
+ /* @__PURE__ */ React24.createElement(VNModal, { title: settingsText, show: showSettings, onClose: () => setShowSettings(false) }, /* @__PURE__ */ React24.createElement("div", { className: "space-y-6 sm:space-y-8 py-2 sm:py-4" }, /* @__PURE__ */ React24.createElement("div", { className: "space-y-3 sm:space-y-4" }, /* @__PURE__ */ React24.createElement("div", { className: "flex justify-between items-center text-xs sm:text-sm font-bold tracking-wider sm:tracking-widest", style: { color: "#64748b" } }, /* @__PURE__ */ React24.createElement("span", null, "MUSIC VOLUME"), /* @__PURE__ */ React24.createElement("span", null, "80%")), /* @__PURE__ */ React24.createElement("div", { className: "h-2.5 sm:h-3 rounded-full p-0.5 border", style: { background: "rgba(241, 245, 249, 0.5)", borderColor: "rgba(203, 213, 225, 0.4)" } }, /* @__PURE__ */ React24.createElement("div", { className: "h-full w-[80%] rounded-full", style: { background: "linear-gradient(to right, #22c55e, #4ade80)", boxShadow: "0 0 15px rgba(34, 197, 94, 0.5)" } }))), /* @__PURE__ */ React24.createElement("div", { className: "space-y-3 sm:space-y-4" }, /* @__PURE__ */ React24.createElement("div", { className: "flex justify-between items-center text-xs sm:text-sm font-bold tracking-wider sm:tracking-widest", style: { color: "#64748b" } }, /* @__PURE__ */ React24.createElement("span", null, "TEXT SPEED"), /* @__PURE__ */ React24.createElement("span", null, "NORMAL")), /* @__PURE__ */ React24.createElement("div", { className: "flex gap-2 sm:gap-3" }, ["SLOW", "NORMAL", "FAST"].map((s, i) => /* @__PURE__ */ React24.createElement(
4392
+ "div",
4393
+ {
4394
+ key: s,
4395
+ className: "flex-1 py-2.5 sm:py-3 rounded-lg sm:rounded-xl border text-center text-[10px] sm:text-xs font-bold transition-all cursor-pointer touch-manipulation",
4396
+ style: i === 1 ? {
4397
+ background: "rgba(34, 197, 94, 0.15)",
4398
+ borderColor: "#22c55e",
4399
+ color: "#22c55e"
4400
+ } : {
4401
+ background: "rgba(241, 245, 249, 0.5)",
4402
+ borderColor: "rgba(203, 213, 225, 0.4)",
4403
+ color: "rgba(100, 116, 139, 0.6)"
4404
+ }
4405
+ },
4406
+ s
4407
+ )))), /* @__PURE__ */ React24.createElement("div", { className: "pt-3 sm:pt-4 flex flex-col sm:flex-row items-center justify-between gap-2 sm:gap-0 opacity-50 italic text-[10px] sm:text-xs border-t", style: { borderColor: "rgba(203, 213, 225, 0.3)" } }, /* @__PURE__ */ React24.createElement("span", null, "Auto Save Enabled"), /* @__PURE__ */ React24.createElement("span", null, "Cloud Sync Active")))),
4408
+ /* @__PURE__ */ React24.createElement(VNModal, { title: aboutText, show: showAbout, onClose: () => setShowAbout(false) }, /* @__PURE__ */ React24.createElement("div", { className: "space-y-6 sm:space-y-8 py-2 sm:py-4" }, /* @__PURE__ */ React24.createElement("div", { className: "flex items-center gap-3 sm:gap-6 p-4 sm:p-6 rounded-2xl sm:rounded-3xl border", style: { background: "rgba(241, 245, 249, 0.6)", borderColor: "rgba(203, 213, 225, 0.4)" } }, /* @__PURE__ */ React24.createElement("div", { className: "w-14 h-14 sm:w-20 sm:h-20 rounded-xl sm:rounded-2xl flex items-center justify-center text-2xl sm:text-3xl font-black text-white shadow-lg shrink-0", style: { background: "linear-gradient(to bottom right, #22c55e, #4ade80)" } }, "S2"), /* @__PURE__ */ React24.createElement("div", null, /* @__PURE__ */ React24.createElement("h3", { className: "text-lg sm:text-2xl font-black tracking-tight", style: { color: "#22c55e" } }, scriptName || "Project SA2"), /* @__PURE__ */ React24.createElement("p", { className: "text-[10px] sm:text-xs font-bold tracking-wider sm:tracking-widest mt-1 uppercase", style: { color: "rgba(100, 116, 139, 0.6)" } }, "Visual Novel Experience"))), /* @__PURE__ */ React24.createElement("div", { className: "space-y-3 sm:space-y-4 px-1 sm:px-2" }, /* @__PURE__ */ React24.createElement("p", { className: "font-medium leading-relaxed text-sm sm:text-base", style: { color: "#475569" } }, "\u91C7\u7528 sa2kit \u5F15\u64CE\u6784\u5EFA\u7684\u65B0\u4E00\u4EE3\u5B9E\u65F6 3D \u89C6\u89C9\u5C0F\u8BF4\u3002\u7ED3\u5408\u4E86 MMD \u5B9E\u65F6\u6E32\u67D3\u6280\u672F\u4E0E\u4EA4\u4E92\u5F0F\u5267\u60C5\u5206\u652F\u7CFB\u7EDF\uFF0C\u81F4\u529B\u4E8E\u6253\u9020\u6781\u81F4\u7684\u6C89\u6D78\u5F0F\u53D9\u4E8B\u4F53\u9A8C\u3002")), /* @__PURE__ */ React24.createElement("div", { className: "grid grid-cols-2 gap-3 sm:gap-4 pt-4 sm:pt-6 border-t", style: { borderColor: "rgba(203, 213, 225, 0.3)" } }, /* @__PURE__ */ React24.createElement("div", { className: "flex flex-col gap-1" }, /* @__PURE__ */ React24.createElement("span", { className: "text-[9px] sm:text-[10px] font-bold tracking-wider sm:tracking-widest", style: { color: "rgba(100, 116, 139, 0.5)" } }, "DEVELOPER"), /* @__PURE__ */ React24.createElement("span", { className: "text-xs font-bold", style: { color: "#64748b" } }, "SA2KIT TEAM")), /* @__PURE__ */ React24.createElement("div", { className: "flex flex-col gap-1 text-right" }, /* @__PURE__ */ React24.createElement("span", { className: "text-[9px] sm:text-[10px] font-bold tracking-wider sm:tracking-widest", style: { color: "rgba(100, 116, 139, 0.5)" } }, "ENGINE"), /* @__PURE__ */ React24.createElement("span", { className: "text-xs font-bold", style: { color: "#64748b" } }, "THREE.JS / REACT"))))),
4409
+ /* @__PURE__ */ React24.createElement("style", null, `
4366
4410
  @keyframes floatParticle {
4367
4411
  from { transform: translateY(0) translateX(0); opacity: 0; }
4368
4412
  20% { opacity: 1; }
@@ -4447,14 +4491,14 @@ var LoadingOverlay = ({
4447
4491
  onStart,
4448
4492
  className = ""
4449
4493
  }) => {
4450
- return /* @__PURE__ */ React21.createElement(React21.Fragment, null, /* @__PURE__ */ React21.createElement(
4494
+ return /* @__PURE__ */ React24.createElement(React24.Fragment, null, /* @__PURE__ */ React24.createElement(
4451
4495
  LoadingScreen,
4452
4496
  {
4453
4497
  isLoading,
4454
4498
  loadingText,
4455
4499
  className
4456
4500
  }
4457
- ), /* @__PURE__ */ React21.createElement(
4501
+ ), /* @__PURE__ */ React24.createElement(
4458
4502
  StartScreen,
4459
4503
  {
4460
4504
  showStartScreen,
@@ -4472,18 +4516,18 @@ var SkipConfirmDialog = ({
4472
4516
  onConfirm,
4473
4517
  onCancel
4474
4518
  }) => {
4475
- const [isMounted, setIsMounted] = React21.useState(false);
4476
- React21.useEffect(() => {
4519
+ const [isMounted, setIsMounted] = React24.useState(false);
4520
+ React24.useEffect(() => {
4477
4521
  setIsMounted(true);
4478
4522
  }, []);
4479
4523
  if (!isMounted) return null;
4480
- const content = /* @__PURE__ */ React21.createElement(
4524
+ const content = /* @__PURE__ */ React24.createElement(
4481
4525
  "div",
4482
4526
  {
4483
4527
  className: "fixed inset-0 flex items-center justify-center bg-black/40 backdrop-blur-sm pointer-events-auto",
4484
4528
  style: { zIndex: 999999 }
4485
4529
  },
4486
- /* @__PURE__ */ React21.createElement(
4530
+ /* @__PURE__ */ React24.createElement(
4487
4531
  "div",
4488
4532
  {
4489
4533
  className: "p-8 rounded-3xl border border-white/30 shadow-2xl max-w-sm w-full mx-4 overflow-hidden relative",
@@ -4495,16 +4539,16 @@ var SkipConfirmDialog = ({
4495
4539
  WebkitBackdropFilter: "blur(32px) saturate(200%)"
4496
4540
  }
4497
4541
  },
4498
- /* @__PURE__ */ React21.createElement("h3", { className: "text-xl font-bold text-white mb-4 drop-shadow-md" }, "\u52A8\u753B\u5C1A\u672A\u64AD\u653E\u5B8C\u6210"),
4499
- /* @__PURE__ */ React21.createElement("p", { className: "text-white/90 mb-8 leading-relaxed drop-shadow-sm" }, "\u5F53\u524D\u573A\u666F\u7684\u52A8\u753B\u8FD8\u6CA1\u6709\u5B8C\u6574\u64AD\u653E\u4E00\u904D\uFF0C\u662F\u5426\u76F4\u63A5\u8DF3\u8F6C\u5230\u4E0B\u4E00\u4E2A\u573A\u666F\uFF1F"),
4500
- /* @__PURE__ */ React21.createElement("div", { className: "flex justify-end gap-4" }, /* @__PURE__ */ React21.createElement(
4542
+ /* @__PURE__ */ React24.createElement("h3", { className: "text-xl font-bold text-white mb-4 drop-shadow-md" }, "\u52A8\u753B\u5C1A\u672A\u64AD\u653E\u5B8C\u6210"),
4543
+ /* @__PURE__ */ React24.createElement("p", { className: "text-white/90 mb-8 leading-relaxed drop-shadow-sm" }, "\u5F53\u524D\u573A\u666F\u7684\u52A8\u753B\u8FD8\u6CA1\u6709\u5B8C\u6574\u64AD\u653E\u4E00\u904D\uFF0C\u662F\u5426\u76F4\u63A5\u8DF3\u8F6C\u5230\u4E0B\u4E00\u4E2A\u573A\u666F\uFF1F"),
4544
+ /* @__PURE__ */ React24.createElement("div", { className: "flex justify-end gap-4" }, /* @__PURE__ */ React24.createElement(
4501
4545
  "button",
4502
4546
  {
4503
4547
  onClick: onCancel,
4504
4548
  className: "px-6 py-2.5 rounded-2xl text-white/80 font-medium hover:text-white hover:bg-white/10 transition-all border border-white/10 hover:border-white/30"
4505
4549
  },
4506
4550
  "\u53D6\u6D88"
4507
- ), /* @__PURE__ */ React21.createElement(
4551
+ ), /* @__PURE__ */ React24.createElement(
4508
4552
  "button",
4509
4553
  {
4510
4554
  onClick: onConfirm,
@@ -4528,34 +4572,51 @@ var ChoiceMenu = ({
4528
4572
  onSelect,
4529
4573
  theme
4530
4574
  }) => {
4531
- const [isMounted, setIsMounted] = React21.useState(false);
4532
- React21.useEffect(() => {
4575
+ const [isMounted, setIsMounted] = React24.useState(false);
4576
+ React24.useEffect(() => {
4533
4577
  setIsMounted(true);
4534
4578
  }, []);
4535
4579
  if (!isMounted) return null;
4536
- const content = /* @__PURE__ */ React21.createElement(
4580
+ const content = /* @__PURE__ */ React24.createElement(
4537
4581
  "div",
4538
4582
  {
4539
4583
  className: "fixed inset-0 flex flex-col items-center justify-center bg-black/20 backdrop-blur-sm pointer-events-auto transition-all animate-in fade-in duration-500",
4540
4584
  style: { zIndex: 1e6 }
4541
4585
  },
4542
- /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col gap-4 w-full max-w-md px-6" }, choices.map((choice, index) => /* @__PURE__ */ React21.createElement(
4586
+ /* @__PURE__ */ React24.createElement("div", { className: "flex flex-col gap-4 w-full max-w-md px-6" }, choices.map((choice, index) => /* @__PURE__ */ React24.createElement(
4543
4587
  "button",
4544
4588
  {
4545
4589
  key: index,
4546
4590
  onClick: () => onSelect(choice),
4547
- className: "w-full py-4 px-8 rounded-2xl text-white font-bold text-lg transition-all border border-white/20 shadow-xl hover:scale-105 active:scale-95 group relative overflow-hidden",
4591
+ className: "w-full py-4 px-8 rounded-2xl font-bold text-lg transition-all border shadow-xl hover:scale-105 active:scale-95 group relative overflow-hidden",
4548
4592
  style: {
4549
4593
  background: `linear-gradient(135deg,
4550
- rgba(255, 255, 255, 0.2) 0%,
4551
- rgba(255, 255, 255, 0.1) 100%)`,
4552
- backdropFilter: "blur(32px) saturate(200%)",
4553
- WebkitBackdropFilter: "blur(32px) saturate(200%)"
4594
+ rgba(248, 250, 252, 0.98) 0%,
4595
+ rgba(241, 245, 249, 0.95) 50%,
4596
+ rgba(226, 232, 240, 0.92) 100%)`,
4597
+ backdropFilter: "blur(16px) saturate(200%)",
4598
+ WebkitBackdropFilter: "blur(16px) saturate(200%)",
4599
+ borderColor: "rgba(203, 213, 225, 0.8)",
4600
+ color: "#22c55e",
4601
+ boxShadow: `
4602
+ 0 8px 40px rgba(148, 163, 184, 0.2),
4603
+ 0 4px 16px rgba(100, 116, 139, 0.15),
4604
+ inset 0 1px 0 rgba(255, 255, 255, 0.8),
4605
+ inset 0 -1px 0 rgba(203, 213, 225, 0.5)
4606
+ `
4554
4607
  }
4555
4608
  },
4556
- /* @__PURE__ */ React21.createElement("div", { className: "absolute inset-0 bg-white/10 opacity-0 group-hover:opacity-100 transition-opacity" }),
4557
- /* @__PURE__ */ React21.createElement("div", { className: "absolute inset-0 bg-gradient-to-r from-transparent via-white/5 to-transparent -translate-x-full group-hover:translate-x-full transition-transform duration-1000 ease-in-out" }),
4558
- /* @__PURE__ */ React21.createElement("span", { className: "relative z-10 drop-shadow-md" }, choice.text)
4609
+ /* @__PURE__ */ React24.createElement(
4610
+ "div",
4611
+ {
4612
+ className: "absolute inset-0 opacity-0 group-hover:opacity-100 transition-opacity",
4613
+ style: {
4614
+ background: "linear-gradient(135deg, rgba(226, 232, 240, 0.5), rgba(203, 213, 225, 0.3))"
4615
+ }
4616
+ }
4617
+ ),
4618
+ /* @__PURE__ */ React24.createElement("div", { className: "absolute inset-0 bg-gradient-to-r from-transparent via-white/30 to-transparent -translate-x-full group-hover:translate-x-full transition-transform duration-1000 ease-in-out" }),
4619
+ /* @__PURE__ */ React24.createElement("span", { className: "relative z-10 " }, choice.text)
4559
4620
  )))
4560
4621
  );
4561
4622
  let portalContainer = document.getElementById("dialogue-portal-root");
@@ -4567,6 +4628,268 @@ var ChoiceMenu = ({
4567
4628
  }
4568
4629
  return createPortal(content, portalContainer);
4569
4630
  };
4631
+ var LoopConfirmDialog = ({
4632
+ onRestart,
4633
+ onBackToStart,
4634
+ onCancel
4635
+ }) => {
4636
+ return /* @__PURE__ */ React24.createElement("div", { className: "fixed inset-0 z-[9999] flex items-center justify-center bg-black/70 backdrop-blur-sm" }, /* @__PURE__ */ React24.createElement("div", { className: "mx-4 w-full max-w-md rounded-lg bg-gradient-to-br from-slate-800 to-slate-900 p-6 shadow-2xl border border-slate-700" }, /* @__PURE__ */ React24.createElement("div", { className: "mb-6 text-center" }, /* @__PURE__ */ React24.createElement("h3", { className: "text-2xl font-bold text-white mb-2" }, "\u{1F3AC} \u5267\u672C\u5DF2\u64AD\u653E\u5B8C\u6BD5"), /* @__PURE__ */ React24.createElement("p", { className: "text-slate-300 text-sm" }, "\u4F60\u60F3\u8981\u505A\u4EC0\u4E48\u5462\uFF1F")), /* @__PURE__ */ React24.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React24.createElement(
4637
+ "button",
4638
+ {
4639
+ onClick: onRestart,
4640
+ className: "w-full rounded-lg bg-gradient-to-r from-blue-500 to-blue-600 px-6 py-4 text-white font-medium shadow-lg hover:from-blue-600 hover:to-blue-700 transition-all duration-200 hover:shadow-xl hover:scale-105 active:scale-95"
4641
+ },
4642
+ /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-center gap-2" }, /* @__PURE__ */ React24.createElement("span", { className: "text-xl" }, "\u{1F504}"), /* @__PURE__ */ React24.createElement("div", { className: "text-left" }, /* @__PURE__ */ React24.createElement("div", { className: "font-bold" }, "\u91CD\u65B0\u5F00\u59CB"), /* @__PURE__ */ React24.createElement("div", { className: "text-xs text-blue-100 opacity-90" }, "\u4ECE\u7B2C\u4E00\u4E2A\u8282\u70B9\u7EE7\u7EED\u64AD\u653E")))
4643
+ ), /* @__PURE__ */ React24.createElement(
4644
+ "button",
4645
+ {
4646
+ onClick: onBackToStart,
4647
+ className: "w-full rounded-lg bg-gradient-to-r from-purple-500 to-purple-600 px-6 py-4 text-white font-medium shadow-lg hover:from-purple-600 hover:to-purple-700 transition-all duration-200 hover:shadow-xl hover:scale-105 active:scale-95"
4648
+ },
4649
+ /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-center gap-2" }, /* @__PURE__ */ React24.createElement("span", { className: "text-xl" }, "\u{1F3E0}"), /* @__PURE__ */ React24.createElement("div", { className: "text-left" }, /* @__PURE__ */ React24.createElement("div", { className: "font-bold" }, "\u56DE\u5230\u5F00\u59CB\u9875\u9762"), /* @__PURE__ */ React24.createElement("div", { className: "text-xs text-purple-100 opacity-90" }, "\u8FD4\u56DE\u6807\u9898\u754C\u9762")))
4650
+ ), onCancel && /* @__PURE__ */ React24.createElement(
4651
+ "button",
4652
+ {
4653
+ onClick: onCancel,
4654
+ className: "w-full rounded-lg bg-slate-700 px-6 py-3 text-slate-300 font-medium hover:bg-slate-600 transition-all duration-200"
4655
+ },
4656
+ "\u53D6\u6D88"
4657
+ )), /* @__PURE__ */ React24.createElement("div", { className: "mt-4 text-center text-xs text-slate-400" }, "\u{1F4A1} \u63D0\u793A\uFF1A\u4F60\u4E5F\u53EF\u4EE5\u4F7F\u7528\u5FEB\u8FDB\u6309\u94AE\u8DF3\u8FC7\u5DF2\u770B\u8FC7\u7684\u5185\u5BB9")));
4658
+ };
4659
+ var CheerButton = ({
4660
+ onClick,
4661
+ text = "\u5E94\u63F4",
4662
+ show,
4663
+ className = ""
4664
+ }) => {
4665
+ if (!show) return null;
4666
+ return /* @__PURE__ */ React24.createElement(
4667
+ "button",
4668
+ {
4669
+ onClick,
4670
+ className: `
4671
+ fixed bottom-32 right-8
4672
+ px-6 py-3 rounded-full
4673
+ bg-gradient-to-r from-pink-500 to-purple-500
4674
+ hover:from-pink-600 hover:to-purple-600
4675
+ active:scale-95
4676
+ text-white font-bold text-lg
4677
+ shadow-lg hover:shadow-xl
4678
+ transition-all duration-200
4679
+ flex items-center gap-2
4680
+ ${className}
4681
+ `,
4682
+ style: {
4683
+ animation: "cheer-pulse 2s ease-in-out infinite",
4684
+ zIndex: 1e6
4685
+ // 高于对话框的 z-index (999999)
4686
+ }
4687
+ },
4688
+ /* @__PURE__ */ React24.createElement("span", { className: "text-2xl" }, "\u{1F389}"),
4689
+ /* @__PURE__ */ React24.createElement("span", null, text),
4690
+ /* @__PURE__ */ React24.createElement("style", null, `
4691
+ @keyframes cheer-pulse {
4692
+ 0%, 100% {
4693
+ transform: scale(1);
4694
+ box-shadow: 0 0 0 0 rgba(236, 72, 153, 0.7);
4695
+ }
4696
+ 50% {
4697
+ transform: scale(1.05);
4698
+ box-shadow: 0 0 20px 10px rgba(236, 72, 153, 0);
4699
+ }
4700
+ }
4701
+ `)
4702
+ );
4703
+ };
4704
+ var CheerParticles = forwardRef(
4705
+ ({ className = "" }, ref) => {
4706
+ const containerRef = useRef(null);
4707
+ const sceneRef = useRef(null);
4708
+ const cameraRef = useRef(null);
4709
+ const rendererRef = useRef(null);
4710
+ const particlesRef = useRef([]);
4711
+ const animationFrameRef = useRef(null);
4712
+ useEffect(() => {
4713
+ if (!containerRef.current) return;
4714
+ const container = containerRef.current;
4715
+ const width = container.clientWidth;
4716
+ const height = container.clientHeight;
4717
+ const scene = new THREE3.Scene();
4718
+ sceneRef.current = scene;
4719
+ const camera = new THREE3.OrthographicCamera(
4720
+ -width / 2,
4721
+ width / 2,
4722
+ height / 2,
4723
+ -height / 2,
4724
+ 1,
4725
+ 1e3
4726
+ );
4727
+ camera.position.z = 100;
4728
+ cameraRef.current = camera;
4729
+ const renderer = new THREE3.WebGLRenderer({
4730
+ alpha: true,
4731
+ antialias: true
4732
+ });
4733
+ renderer.setSize(width, height);
4734
+ renderer.setPixelRatio(window.devicePixelRatio);
4735
+ container.appendChild(renderer.domElement);
4736
+ rendererRef.current = renderer;
4737
+ const animate = () => {
4738
+ animationFrameRef.current = requestAnimationFrame(animate);
4739
+ updateParticles();
4740
+ if (rendererRef.current && sceneRef.current && cameraRef.current) {
4741
+ rendererRef.current.render(sceneRef.current, cameraRef.current);
4742
+ }
4743
+ };
4744
+ animate();
4745
+ const handleResize = () => {
4746
+ if (!containerRef.current || !cameraRef.current || !rendererRef.current) return;
4747
+ const newWidth = containerRef.current.clientWidth;
4748
+ const newHeight = containerRef.current.clientHeight;
4749
+ cameraRef.current.left = -newWidth / 2;
4750
+ cameraRef.current.right = newWidth / 2;
4751
+ cameraRef.current.top = newHeight / 2;
4752
+ cameraRef.current.bottom = -newHeight / 2;
4753
+ cameraRef.current.updateProjectionMatrix();
4754
+ rendererRef.current.setSize(newWidth, newHeight);
4755
+ };
4756
+ window.addEventListener("resize", handleResize);
4757
+ return () => {
4758
+ window.removeEventListener("resize", handleResize);
4759
+ if (animationFrameRef.current) {
4760
+ cancelAnimationFrame(animationFrameRef.current);
4761
+ }
4762
+ if (rendererRef.current) {
4763
+ container.removeChild(rendererRef.current.domElement);
4764
+ rendererRef.current.dispose();
4765
+ }
4766
+ clearParticles();
4767
+ };
4768
+ }, []);
4769
+ const createParticle = (position, velocity, color) => {
4770
+ const shapes = [
4771
+ new THREE3.SphereGeometry(8, 8, 8),
4772
+ new THREE3.BoxGeometry(10, 10, 10),
4773
+ new THREE3.ConeGeometry(5, 15, 6)
4774
+ ];
4775
+ const geometry = shapes[Math.floor(Math.random() * shapes.length)];
4776
+ const material = new THREE3.MeshBasicMaterial({
4777
+ color,
4778
+ transparent: true,
4779
+ opacity: 1
4780
+ });
4781
+ const mesh = new THREE3.Mesh(geometry, material);
4782
+ mesh.position.copy(position);
4783
+ const initialScale = 1 + Math.random() * 0.5;
4784
+ mesh.scale.set(initialScale, initialScale, initialScale);
4785
+ return {
4786
+ mesh,
4787
+ velocity: velocity.clone(),
4788
+ acceleration: new THREE3.Vector3(0, -500, 0),
4789
+ // 重力
4790
+ lifetime: 0,
4791
+ maxLifetime: 2 + Math.random() * 1,
4792
+ // 2-3秒
4793
+ initialScale
4794
+ };
4795
+ };
4796
+ const triggerParticles = () => {
4797
+ if (!sceneRef.current || !containerRef.current) return;
4798
+ const scene = sceneRef.current;
4799
+ containerRef.current.clientWidth;
4800
+ const height = containerRef.current.clientHeight;
4801
+ const colors = [
4802
+ 16738740,
4803
+ // 粉红
4804
+ 16766720,
4805
+ // 金黄
4806
+ 65535,
4807
+ // 青色
4808
+ 16716947,
4809
+ // 深粉
4810
+ 9662683,
4811
+ // 紫色
4812
+ 16737095,
4813
+ // 番茄红
4814
+ 8388564,
4815
+ // 青绿色
4816
+ 16753920
4817
+ // 橙色
4818
+ ];
4819
+ const particleCount = 100;
4820
+ for (let i = 0; i < particleCount; i++) {
4821
+ const angle = Math.PI * 2 * i / particleCount;
4822
+ const speed = 200 + Math.random() * 300;
4823
+ const spreadZ = (Math.random() - 0.5) * 200;
4824
+ const velocity = new THREE3.Vector3(
4825
+ Math.cos(angle) * speed,
4826
+ Math.sin(angle) * speed + Math.random() * 200,
4827
+ spreadZ
4828
+ );
4829
+ const color = colors[Math.floor(Math.random() * colors.length)] ?? 16738740;
4830
+ const position = new THREE3.Vector3(0, -height / 4, 0);
4831
+ const particle = createParticle(position, velocity, color);
4832
+ scene.add(particle.mesh);
4833
+ particlesRef.current.push(particle);
4834
+ }
4835
+ };
4836
+ const updateParticles = () => {
4837
+ const deltaTime = 1 / 60;
4838
+ const particles = particlesRef.current;
4839
+ for (let i = particles.length - 1; i >= 0; i--) {
4840
+ const particle = particles[i];
4841
+ if (!particle) continue;
4842
+ particle.lifetime += deltaTime;
4843
+ if (particle.lifetime >= particle.maxLifetime) {
4844
+ if (sceneRef.current) {
4845
+ sceneRef.current.remove(particle.mesh);
4846
+ }
4847
+ particle.mesh.geometry.dispose();
4848
+ particle.mesh.material.dispose();
4849
+ particles.splice(i, 1);
4850
+ continue;
4851
+ }
4852
+ particle.velocity.add(
4853
+ particle.acceleration.clone().multiplyScalar(deltaTime)
4854
+ );
4855
+ particle.mesh.position.add(
4856
+ particle.velocity.clone().multiplyScalar(deltaTime)
4857
+ );
4858
+ particle.mesh.rotation.x += deltaTime * 2;
4859
+ particle.mesh.rotation.y += deltaTime * 3;
4860
+ const progress = particle.lifetime / particle.maxLifetime;
4861
+ const opacity = Math.max(0, 1 - progress);
4862
+ particle.mesh.material.opacity = opacity;
4863
+ const scale = particle.initialScale * (1 - progress * 0.5);
4864
+ particle.mesh.scale.set(scale, scale, scale);
4865
+ }
4866
+ };
4867
+ const clearParticles = () => {
4868
+ const particles = particlesRef.current;
4869
+ particles.forEach((particle) => {
4870
+ if (sceneRef.current) {
4871
+ sceneRef.current.remove(particle.mesh);
4872
+ }
4873
+ particle.mesh.geometry.dispose();
4874
+ particle.mesh.material.dispose();
4875
+ });
4876
+ particlesRef.current = [];
4877
+ };
4878
+ useImperativeHandle(ref, () => ({
4879
+ trigger: triggerParticles,
4880
+ clear: clearParticles
4881
+ }));
4882
+ return /* @__PURE__ */ React24.createElement(
4883
+ "div",
4884
+ {
4885
+ ref: containerRef,
4886
+ className: `pointer-events-none absolute inset-0 ${className}`,
4887
+ style: { zIndex: 999998 }
4888
+ }
4889
+ );
4890
+ }
4891
+ );
4892
+ CheerParticles.displayName = "CheerParticles";
4570
4893
 
4571
4894
  // src/mmd/visual-novel/MMDVisualNovel.tsx
4572
4895
  var MMDVisualNovel = forwardRef(
@@ -4609,6 +4932,7 @@ var MMDVisualNovel = forwardRef(
4609
4932
  const [isCameraManual, setIsCameraManual] = useState(false);
4610
4933
  const [variables, setVariables] = useState({});
4611
4934
  const [activeEffect, setActiveEffect] = useState(null);
4935
+ const [showLoopConfirm, setShowLoopConfirm] = useState(false);
4612
4936
  const playerRef = useRef(null);
4613
4937
  const containerRef = useRef(null);
4614
4938
  const autoTimerRef = useRef(null);
@@ -4617,6 +4941,7 @@ var MMDVisualNovel = forwardRef(
4617
4941
  const lastAnimationTimeRef = useRef(0);
4618
4942
  const isVmdFinishedRef = useRef(false);
4619
4943
  const effectTimerRef = useRef(null);
4944
+ const cheerParticlesRef = useRef(null);
4620
4945
  const currentNode = nodes[currentNodeIndex];
4621
4946
  const currentDialogue = currentNode?.dialogues[currentDialogueIndex] || null;
4622
4947
  const addToHistory = useCallback((dialogue, nodeIndex, dialogueIndex) => {
@@ -4698,7 +5023,8 @@ var MMDVisualNovel = forwardRef(
4698
5023
  if (nextNodeIndex < nodes.length && nextNodeIndex >= 0) {
4699
5024
  goToNode(nextNodeIndex);
4700
5025
  } else if (loop) {
4701
- goToNode(0);
5026
+ console.log("[MMDVisualNovel] \u5230\u8FBE\u6700\u540E\u4E00\u4E2A\u8282\u70B9\uFF0C\u663E\u793A\u5FAA\u73AF\u786E\u8BA4\u5BF9\u8BDD\u6846");
5027
+ setShowLoopConfirm(true);
4702
5028
  } else {
4703
5029
  onScriptComplete?.();
4704
5030
  }
@@ -4778,6 +5104,9 @@ var MMDVisualNovel = forwardRef(
4778
5104
  setIsAutoMode((prev) => !prev);
4779
5105
  }, []);
4780
5106
  const handleSkip = useCallback(() => {
5107
+ if (showLoopConfirm) {
5108
+ return;
5109
+ }
4781
5110
  if (currentNode?.choices && currentNode.choices.length > 0) {
4782
5111
  setShowChoices(true);
4783
5112
  return;
@@ -4786,11 +5115,12 @@ var MMDVisualNovel = forwardRef(
4786
5115
  if (nextNodeIndex < nodes.length) {
4787
5116
  goToNode(nextNodeIndex);
4788
5117
  } else if (loop) {
4789
- goToNode(0);
5118
+ console.log("[MMDVisualNovel] \u5FEB\u8FDB\u5230\u6700\u540E\uFF0C\u663E\u793A\u5FAA\u73AF\u786E\u8BA4\u5BF9\u8BDD\u6846");
5119
+ setShowLoopConfirm(true);
4790
5120
  } else {
4791
5121
  onScriptComplete?.();
4792
5122
  }
4793
- }, [currentNodeIndex, nodes.length, loop, goToNode, onScriptComplete]);
5123
+ }, [currentNode, currentNodeIndex, nodes.length, loop, goToNode, onScriptComplete, showLoopConfirm]);
4794
5124
  const handleStart = useCallback(() => {
4795
5125
  setIsStarted(true);
4796
5126
  isStartedRef.current = true;
@@ -4801,6 +5131,28 @@ var MMDVisualNovel = forwardRef(
4801
5131
  playerRef.current?.play();
4802
5132
  }, 100);
4803
5133
  }, [currentNode, currentNodeIndex, addToHistory]);
5134
+ const handleBackToStart = useCallback(() => {
5135
+ setShowLoopConfirm(false);
5136
+ setIsStarted(false);
5137
+ isStartedRef.current = false;
5138
+ setCurrentNodeIndex(initialNodeIndex);
5139
+ setCurrentDialogueIndex(initialDialogueIndex);
5140
+ setHistory([]);
5141
+ setVariables({});
5142
+ setIsLoading(true);
5143
+ setIsAnimationPlaying(false);
5144
+ typingCompleteRef.current = false;
5145
+ console.log("[MMDVisualNovel] \u56DE\u5230\u5F00\u59CB\u9875\u9762");
5146
+ }, [initialNodeIndex, initialDialogueIndex]);
5147
+ const handleCheer = useCallback(() => {
5148
+ console.log("[MMDVisualNovel] \u89E6\u53D1\u5E94\u63F4\u6548\u679C");
5149
+ cheerParticlesRef.current?.trigger();
5150
+ }, []);
5151
+ const handleRestartLoop = useCallback(() => {
5152
+ setShowLoopConfirm(false);
5153
+ goToNode(0, true);
5154
+ console.log("[MMDVisualNovel] \u91CD\u65B0\u5F00\u59CB\u5FAA\u73AF");
5155
+ }, [goToNode]);
4804
5156
  useImperativeHandle(
4805
5157
  ref,
4806
5158
  () => ({
@@ -4837,16 +5189,16 @@ var MMDVisualNovel = forwardRef(
4837
5189
  };
4838
5190
  }, []);
4839
5191
  if (!currentNode) {
4840
- return /* @__PURE__ */ React21.createElement("div", { className: "flex h-full w-full items-center justify-center bg-black text-white" }, "\u5267\u672C\u4E3A\u7A7A");
5192
+ return /* @__PURE__ */ React24.createElement("div", { className: "flex h-full w-full items-center justify-center bg-black text-white" }, "\u5267\u672C\u4E3A\u7A7A");
4841
5193
  }
4842
- return /* @__PURE__ */ React21.createElement(
5194
+ return /* @__PURE__ */ React24.createElement(
4843
5195
  "div",
4844
5196
  {
4845
5197
  ref: containerRef,
4846
5198
  className: `relative bg-black ${className}`,
4847
5199
  style: { width: "100%", height: "100%", overflow: "hidden", ...style }
4848
5200
  },
4849
- /* @__PURE__ */ React21.createElement(
5201
+ /* @__PURE__ */ React24.createElement(
4850
5202
  "div",
4851
5203
  {
4852
5204
  className: "absolute inset-0 w-full h-full",
@@ -4857,7 +5209,7 @@ var MMDVisualNovel = forwardRef(
4857
5209
  transition: "opacity 0.3s ease-in-out"
4858
5210
  }
4859
5211
  },
4860
- !isTransitioning && /* @__PURE__ */ React21.createElement(
5212
+ !isTransitioning && /* @__PURE__ */ React24.createElement(
4861
5213
  MMDPlayerBase,
4862
5214
  {
4863
5215
  key: currentNode.id,
@@ -4906,13 +5258,13 @@ var MMDVisualNovel = forwardRef(
4906
5258
  }
4907
5259
  )
4908
5260
  ),
4909
- activeEffect && /* @__PURE__ */ React21.createElement(
5261
+ activeEffect && /* @__PURE__ */ React24.createElement(
4910
5262
  "div",
4911
5263
  {
4912
5264
  className: "pointer-events-none absolute inset-0 flex items-center justify-center",
4913
5265
  style: { zIndex: 999 }
4914
5266
  },
4915
- activeEffect.type === "flash" && /* @__PURE__ */ React21.createElement(
5267
+ activeEffect.type === "flash" && /* @__PURE__ */ React24.createElement(
4916
5268
  "div",
4917
5269
  {
4918
5270
  className: "h-full w-full",
@@ -4922,7 +5274,7 @@ var MMDVisualNovel = forwardRef(
4922
5274
  }
4923
5275
  }
4924
5276
  ),
4925
- activeEffect.type === "gif" && activeEffect.url && /* @__PURE__ */ React21.createElement(
5277
+ activeEffect.type === "gif" && activeEffect.url && /* @__PURE__ */ React24.createElement(
4926
5278
  "img",
4927
5279
  {
4928
5280
  src: activeEffect.url,
@@ -4930,7 +5282,7 @@ var MMDVisualNovel = forwardRef(
4930
5282
  className: activeEffect.position === "full" ? "h-full w-full object-cover" : "max-h-full max-w-full"
4931
5283
  }
4932
5284
  ),
4933
- /* @__PURE__ */ React21.createElement("style", null, `
5285
+ /* @__PURE__ */ React24.createElement("style", null, `
4934
5286
  @keyframes flash-anim {
4935
5287
  0% { opacity: 0; }
4936
5288
  25% { opacity: 1; }
@@ -4938,7 +5290,7 @@ var MMDVisualNovel = forwardRef(
4938
5290
  }
4939
5291
  `)
4940
5292
  ),
4941
- /* @__PURE__ */ React21.createElement(
5293
+ /* @__PURE__ */ React24.createElement(
4942
5294
  LoadingOverlay,
4943
5295
  {
4944
5296
  isLoading: (() => {
@@ -4962,17 +5314,18 @@ var MMDVisualNovel = forwardRef(
4962
5314
  }
4963
5315
  ),
4964
5316
  (() => {
4965
- const shouldShow = isStarted && isAnimationPlaying && currentDialogue && !showHistory && !showChoices;
5317
+ const shouldShow = isStarted && isAnimationPlaying && currentDialogue && !showHistory && !showChoices && !showLoopConfirm;
4966
5318
  console.log("[MMDVisualNovel] DialogueBox render condition:", {
4967
5319
  isStarted,
4968
5320
  isAnimationPlaying,
4969
5321
  hasDialogue: !!currentDialogue,
4970
5322
  showHistory,
4971
5323
  showChoices,
5324
+ showLoopConfirm,
4972
5325
  shouldShow,
4973
5326
  dialogue: currentDialogue
4974
5327
  });
4975
- return shouldShow ? /* @__PURE__ */ React21.createElement(
5328
+ return shouldShow ? /* @__PURE__ */ React24.createElement(
4976
5329
  DialogueBox,
4977
5330
  {
4978
5331
  dialogue: currentDialogue,
@@ -4998,7 +5351,7 @@ var MMDVisualNovel = forwardRef(
4998
5351
  }
4999
5352
  ) : null;
5000
5353
  })(),
5001
- pendingNodeIndex !== null && /* @__PURE__ */ React21.createElement(
5354
+ pendingNodeIndex !== null && /* @__PURE__ */ React24.createElement(
5002
5355
  SkipConfirmDialog,
5003
5356
  {
5004
5357
  onConfirm: () => {
@@ -5011,7 +5364,7 @@ var MMDVisualNovel = forwardRef(
5011
5364
  }
5012
5365
  }
5013
5366
  ),
5014
- showChoices && (currentDialogue?.choices || currentNode.choices) && /* @__PURE__ */ React21.createElement(
5367
+ showChoices && (currentDialogue?.choices || currentNode.choices) && /* @__PURE__ */ React24.createElement(
5015
5368
  ChoiceMenu,
5016
5369
  {
5017
5370
  choices: currentDialogue?.choices || currentNode.choices,
@@ -5050,13 +5403,29 @@ var MMDVisualNovel = forwardRef(
5050
5403
  }
5051
5404
  }
5052
5405
  ),
5053
- showHistory && /* @__PURE__ */ React21.createElement(
5406
+ showHistory && /* @__PURE__ */ React24.createElement(
5054
5407
  HistoryPanel,
5055
5408
  {
5056
5409
  history,
5057
5410
  theme: dialogueTheme,
5058
5411
  onClose: () => setShowHistory(false)
5059
5412
  }
5413
+ ),
5414
+ showLoopConfirm && /* @__PURE__ */ React24.createElement(
5415
+ LoopConfirmDialog,
5416
+ {
5417
+ onRestart: handleRestartLoop,
5418
+ onBackToStart: handleBackToStart
5419
+ }
5420
+ ),
5421
+ /* @__PURE__ */ React24.createElement(CheerParticles, { ref: cheerParticlesRef }),
5422
+ /* @__PURE__ */ React24.createElement(
5423
+ CheerButton,
5424
+ {
5425
+ show: isStarted && isAnimationPlaying && !showHistory && !showChoices && !showLoopConfirm && currentNode?.supportCheer === true,
5426
+ onClick: handleCheer,
5427
+ text: "\u5E94\u63F4"
5428
+ }
5060
5429
  )
5061
5430
  );
5062
5431
  }
@@ -5083,18 +5452,18 @@ var MusicControls = ({
5083
5452
  return `${mins}:${secs.toString().padStart(2, "0")}`;
5084
5453
  };
5085
5454
  const progress = duration > 0 ? currentTime / duration * 100 : 0;
5086
- return /* @__PURE__ */ React21.createElement(
5455
+ return /* @__PURE__ */ React24.createElement(
5087
5456
  "div",
5088
5457
  {
5089
5458
  className: `w-full max-w-4xl mx-auto px-6 py-4 bg-white/10 backdrop-blur-xl border border-white/20 rounded-2xl shadow-2xl pointer-events-auto transition-all group ${className}`
5090
5459
  },
5091
- /* @__PURE__ */ React21.createElement("div", { className: "relative w-full h-1.5 bg-white/20 rounded-full mb-4 cursor-pointer group/progress overflow-hidden" }, /* @__PURE__ */ React21.createElement(
5460
+ /* @__PURE__ */ React24.createElement("div", { className: "relative w-full h-1.5 bg-white/20 rounded-full mb-4 cursor-pointer group/progress overflow-hidden" }, /* @__PURE__ */ React24.createElement(
5092
5461
  "div",
5093
5462
  {
5094
5463
  className: "absolute h-full bg-blue-500 rounded-full transition-all duration-300",
5095
5464
  style: { width: `${progress}%` }
5096
5465
  }
5097
- ), /* @__PURE__ */ React21.createElement(
5466
+ ), /* @__PURE__ */ React24.createElement(
5098
5467
  "input",
5099
5468
  {
5100
5469
  type: "range",
@@ -5105,52 +5474,52 @@ var MusicControls = ({
5105
5474
  className: "absolute inset-0 w-full h-full opacity-0 cursor-pointer"
5106
5475
  }
5107
5476
  )),
5108
- /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-2 text-xs font-mono text-white/60 w-32" }, /* @__PURE__ */ React21.createElement("span", null, formatTime(currentTime)), /* @__PURE__ */ React21.createElement("span", null, "/"), /* @__PURE__ */ React21.createElement("span", null, formatTime(duration))), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-6" }, /* @__PURE__ */ React21.createElement(
5477
+ /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React24.createElement("div", { className: "flex items-center gap-2 text-xs font-mono text-white/60 w-32" }, /* @__PURE__ */ React24.createElement("span", null, formatTime(currentTime)), /* @__PURE__ */ React24.createElement("span", null, "/"), /* @__PURE__ */ React24.createElement("span", null, formatTime(duration))), /* @__PURE__ */ React24.createElement("div", { className: "flex items-center gap-6" }, /* @__PURE__ */ React24.createElement(
5109
5478
  "button",
5110
5479
  {
5111
5480
  onClick: onPrevious,
5112
5481
  className: "text-white/80 hover:text-white transition-colors"
5113
5482
  },
5114
- /* @__PURE__ */ React21.createElement(SkipBack, { className: "w-6 h-6 fill-current" })
5115
- ), /* @__PURE__ */ React21.createElement(
5483
+ /* @__PURE__ */ React24.createElement(SkipBack, { className: "w-6 h-6 fill-current" })
5484
+ ), /* @__PURE__ */ React24.createElement(
5116
5485
  "button",
5117
5486
  {
5118
5487
  onClick: onPlayPause,
5119
5488
  className: "w-12 h-12 flex items-center justify-center bg-blue-500 hover:bg-blue-400 text-white rounded-full shadow-lg shadow-blue-500/20 transition-all hover:scale-105 active:scale-95"
5120
5489
  },
5121
- isPlaying ? /* @__PURE__ */ React21.createElement(Pause, { className: "w-6 h-6 fill-current" }) : /* @__PURE__ */ React21.createElement(Play, { className: "w-6 h-6 fill-current ml-1" })
5122
- ), /* @__PURE__ */ React21.createElement(
5490
+ isPlaying ? /* @__PURE__ */ React24.createElement(Pause, { className: "w-6 h-6 fill-current" }) : /* @__PURE__ */ React24.createElement(Play, { className: "w-6 h-6 fill-current ml-1" })
5491
+ ), /* @__PURE__ */ React24.createElement(
5123
5492
  "button",
5124
5493
  {
5125
5494
  onClick: onNext,
5126
5495
  className: "text-white/80 hover:text-white transition-colors"
5127
5496
  },
5128
- /* @__PURE__ */ React21.createElement(SkipForward, { className: "w-6 h-6 fill-current" })
5129
- )), /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-4 w-32 justify-end" }, isCameraManual && /* @__PURE__ */ React21.createElement(
5497
+ /* @__PURE__ */ React24.createElement(SkipForward, { className: "w-6 h-6 fill-current" })
5498
+ )), /* @__PURE__ */ React24.createElement("div", { className: "flex items-center gap-4 w-32 justify-end" }, isCameraManual && /* @__PURE__ */ React24.createElement(
5130
5499
  "button",
5131
5500
  {
5132
5501
  onClick: onResetCamera,
5133
5502
  className: "text-blue-400 hover:text-blue-300 transition-colors animate-in zoom-in duration-300",
5134
5503
  title: "\u6062\u590D\u521D\u59CB\u89C6\u89D2"
5135
5504
  },
5136
- /* @__PURE__ */ React21.createElement(Camera, { className: "w-5 h-5" })
5137
- ), /* @__PURE__ */ React21.createElement(
5505
+ /* @__PURE__ */ React24.createElement(Camera, { className: "w-5 h-5" })
5506
+ ), /* @__PURE__ */ React24.createElement(
5138
5507
  "button",
5139
5508
  {
5140
5509
  onClick: onToggleLoop,
5141
5510
  className: "text-white/60 hover:text-white transition-colors",
5142
5511
  title: loopMode
5143
5512
  },
5144
- loopMode === "list" && /* @__PURE__ */ React21.createElement(Repeat, { className: "w-5 h-5" }),
5145
- loopMode === "single" && /* @__PURE__ */ React21.createElement(Repeat1, { className: "w-5 h-5 text-blue-400" }),
5146
- loopMode === "shuffle" && /* @__PURE__ */ React21.createElement(Shuffle, { className: "w-5 h-5 text-orange-400" })
5147
- ), /* @__PURE__ */ React21.createElement(
5513
+ loopMode === "list" && /* @__PURE__ */ React24.createElement(Repeat, { className: "w-5 h-5" }),
5514
+ loopMode === "single" && /* @__PURE__ */ React24.createElement(Repeat1, { className: "w-5 h-5 text-blue-400" }),
5515
+ loopMode === "shuffle" && /* @__PURE__ */ React24.createElement(Shuffle, { className: "w-5 h-5 text-orange-400" })
5516
+ ), /* @__PURE__ */ React24.createElement(
5148
5517
  "button",
5149
5518
  {
5150
5519
  onClick: onTogglePlaylist,
5151
5520
  className: "text-white/60 hover:text-white transition-colors"
5152
5521
  },
5153
- /* @__PURE__ */ React21.createElement(ListMusic, { className: "w-5 h-5" })
5522
+ /* @__PURE__ */ React24.createElement(ListMusic, { className: "w-5 h-5" })
5154
5523
  )))
5155
5524
  );
5156
5525
  };
@@ -5165,25 +5534,25 @@ var PlaylistPanel = ({
5165
5534
  onSearch,
5166
5535
  isSearching
5167
5536
  }) => {
5168
- const [searchValue, setSearchValue] = React21.useState("");
5537
+ const [searchValue, setSearchValue] = React24.useState("");
5169
5538
  if (!isOpen) return null;
5170
5539
  const handleSearchSubmit = (e) => {
5171
5540
  e.preventDefault();
5172
5541
  onSearch?.(searchValue);
5173
5542
  };
5174
- return /* @__PURE__ */ React21.createElement(
5543
+ return /* @__PURE__ */ React24.createElement(
5175
5544
  "div",
5176
5545
  {
5177
5546
  className: `fixed inset-y-0 right-0 w-80 bg-gray-900/90 backdrop-blur-2xl border-l border-white/10 shadow-2xl z-50 flex flex-col pointer-events-auto transform transition-transform duration-500 ease-out ${isOpen ? "translate-x-0" : "translate-x-full"} ${className}`
5178
5547
  },
5179
- /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col p-6 border-b border-white/10 gap-4" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React21.createElement(Music, { className: "w-5 h-5 text-blue-400" }), /* @__PURE__ */ React21.createElement("h3", { className: "text-lg font-bold text-white" }, mikuMode ? "Miku \u6B4C\u66F2\u5E93" : "\u64AD\u653E\u5217\u8868")), /* @__PURE__ */ React21.createElement(
5548
+ /* @__PURE__ */ React24.createElement("div", { className: "flex flex-col p-6 border-b border-white/10 gap-4" }, /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React24.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React24.createElement(Music, { className: "w-5 h-5 text-blue-400" }), /* @__PURE__ */ React24.createElement("h3", { className: "text-lg font-bold text-white" }, mikuMode ? "Miku \u6B4C\u66F2\u5E93" : "\u64AD\u653E\u5217\u8868")), /* @__PURE__ */ React24.createElement(
5180
5549
  "button",
5181
5550
  {
5182
5551
  onClick: onClose,
5183
5552
  className: "p-2 text-white/60 hover:text-white transition-colors"
5184
5553
  },
5185
- /* @__PURE__ */ React21.createElement(X, { className: "w-5 h-5" })
5186
- )), mikuMode && /* @__PURE__ */ React21.createElement("form", { onSubmit: handleSearchSubmit, className: "relative" }, /* @__PURE__ */ React21.createElement(
5554
+ /* @__PURE__ */ React24.createElement(X, { className: "w-5 h-5" })
5555
+ )), mikuMode && /* @__PURE__ */ React24.createElement("form", { onSubmit: handleSearchSubmit, className: "relative" }, /* @__PURE__ */ React24.createElement(
5187
5556
  "input",
5188
5557
  {
5189
5558
  type: "text",
@@ -5192,23 +5561,23 @@ var PlaylistPanel = ({
5192
5561
  placeholder: "\u641C\u7D22 Miku \u6B4C\u66F2...",
5193
5562
  className: "w-full bg-white/5 border border-white/10 rounded-lg py-2 pl-10 pr-4 text-sm text-white placeholder:text-white/20 focus:outline-none focus:border-blue-500/50 transition-colors"
5194
5563
  }
5195
- ), /* @__PURE__ */ React21.createElement(Search, { className: "absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-white/20" }), isSearching && /* @__PURE__ */ React21.createElement(Loader2, { className: "absolute right-3 top-1/2 -translate-y-1/2 w-4 h-4 text-blue-400 animate-spin" }))),
5196
- /* @__PURE__ */ React21.createElement("div", { className: "flex-1 overflow-y-auto p-4 space-y-2 custom-scrollbar" }, tracks.map((track, index) => {
5564
+ ), /* @__PURE__ */ React24.createElement(Search, { className: "absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-white/20" }), isSearching && /* @__PURE__ */ React24.createElement(Loader2, { className: "absolute right-3 top-1/2 -translate-y-1/2 w-4 h-4 text-blue-400 animate-spin" }))),
5565
+ /* @__PURE__ */ React24.createElement("div", { className: "flex-1 overflow-y-auto p-4 space-y-2 custom-scrollbar" }, tracks.map((track, index) => {
5197
5566
  const isActive = index === currentIndex;
5198
- return /* @__PURE__ */ React21.createElement(
5567
+ return /* @__PURE__ */ React24.createElement(
5199
5568
  "button",
5200
5569
  {
5201
5570
  key: track.id,
5202
5571
  onClick: () => onSelectTrack(index),
5203
5572
  className: `w-full flex items-center gap-4 p-3 rounded-xl transition-all group ${isActive ? "bg-blue-500/20 border border-blue-500/30" : "hover:bg-white/5 border border-transparent"}`
5204
5573
  },
5205
- /* @__PURE__ */ React21.createElement("div", { className: "relative w-12 h-12 flex-shrink-0 rounded-lg overflow-hidden bg-gray-800" }, track.coverUrl ? /* @__PURE__ */ React21.createElement("img", { src: track.coverUrl, alt: track.title, className: "w-full h-full object-cover" }) : /* @__PURE__ */ React21.createElement("div", { className: "w-full h-full flex items-center justify-center text-white/20" }, /* @__PURE__ */ React21.createElement(Music, { className: "w-6 h-6" })), isActive && /* @__PURE__ */ React21.createElement("div", { className: "absolute inset-0 bg-blue-500/40 flex items-center justify-center" }, /* @__PURE__ */ React21.createElement("div", { className: "flex gap-1 items-end h-4" }, /* @__PURE__ */ React21.createElement("div", { className: "w-1 bg-white animate-music-bar-1" }), /* @__PURE__ */ React21.createElement("div", { className: "w-1 bg-white animate-music-bar-2" }), /* @__PURE__ */ React21.createElement("div", { className: "w-1 bg-white animate-music-bar-3" })))),
5206
- /* @__PURE__ */ React21.createElement("div", { className: "flex-1 text-left min-w-0" }, /* @__PURE__ */ React21.createElement("h4", { className: `text-sm font-bold truncate ${isActive ? "text-blue-400" : "text-white/90"}` }, track.title), /* @__PURE__ */ React21.createElement("p", { className: "text-xs text-white/40 truncate mt-0.5" }, track.artist || "\u672A\u77E5\u827A\u672F\u5BB6")),
5207
- !isActive && /* @__PURE__ */ React21.createElement("div", { className: "opacity-0 group-hover:opacity-100 transition-opacity" }, /* @__PURE__ */ React21.createElement(Play, { className: "w-4 h-4 text-white/40 fill-current" }))
5574
+ /* @__PURE__ */ React24.createElement("div", { className: "relative w-12 h-12 flex-shrink-0 rounded-lg overflow-hidden bg-gray-800" }, track.coverUrl ? /* @__PURE__ */ React24.createElement("img", { src: track.coverUrl, alt: track.title, className: "w-full h-full object-cover" }) : /* @__PURE__ */ React24.createElement("div", { className: "w-full h-full flex items-center justify-center text-white/20" }, /* @__PURE__ */ React24.createElement(Music, { className: "w-6 h-6" })), isActive && /* @__PURE__ */ React24.createElement("div", { className: "absolute inset-0 bg-blue-500/40 flex items-center justify-center" }, /* @__PURE__ */ React24.createElement("div", { className: "flex gap-1 items-end h-4" }, /* @__PURE__ */ React24.createElement("div", { className: "w-1 bg-white animate-music-bar-1" }), /* @__PURE__ */ React24.createElement("div", { className: "w-1 bg-white animate-music-bar-2" }), /* @__PURE__ */ React24.createElement("div", { className: "w-1 bg-white animate-music-bar-3" })))),
5575
+ /* @__PURE__ */ React24.createElement("div", { className: "flex-1 text-left min-w-0" }, /* @__PURE__ */ React24.createElement("h4", { className: `text-sm font-bold truncate ${isActive ? "text-blue-400" : "text-white/90"}` }, track.title), /* @__PURE__ */ React24.createElement("p", { className: "text-xs text-white/40 truncate mt-0.5" }, track.artist || "\u672A\u77E5\u827A\u672F\u5BB6")),
5576
+ !isActive && /* @__PURE__ */ React24.createElement("div", { className: "opacity-0 group-hover:opacity-100 transition-opacity" }, /* @__PURE__ */ React24.createElement(Play, { className: "w-4 h-4 text-white/40 fill-current" }))
5208
5577
  );
5209
5578
  })),
5210
- /* @__PURE__ */ React21.createElement("div", { className: "p-6 border-t border-white/10" }, /* @__PURE__ */ React21.createElement("p", { className: "text-xs text-gray-500 text-center" }, "\u5171 ", tracks.length, " \u9996\u66F2\u76EE")),
5211
- /* @__PURE__ */ React21.createElement("style", { dangerouslySetInnerHTML: { __html: `
5579
+ /* @__PURE__ */ React24.createElement("div", { className: "p-6 border-t border-white/10" }, /* @__PURE__ */ React24.createElement("p", { className: "text-xs text-gray-500 text-center" }, "\u5171 ", tracks.length, " \u9996\u66F2\u76EE")),
5580
+ /* @__PURE__ */ React24.createElement("style", { dangerouslySetInnerHTML: { __html: `
5212
5581
  .custom-scrollbar::-webkit-scrollbar {
5213
5582
  width: 4px;
5214
5583
  }
@@ -5241,7 +5610,7 @@ var PlaylistPanel = ({
5241
5610
  );
5242
5611
  };
5243
5612
  var TrackInfo = ({ track, className = "" }) => {
5244
- return /* @__PURE__ */ React21.createElement("div", { className: `flex flex-col items-center text-center gap-2 ${className}` }, /* @__PURE__ */ React21.createElement("div", { className: "px-4 py-1.5 bg-black/40 backdrop-blur-md rounded-full border border-white/10 shadow-lg" }, /* @__PURE__ */ React21.createElement("h2", { className: "text-lg font-bold text-white tracking-wider truncate max-w-md" }, track.title)), /* @__PURE__ */ React21.createElement("p", { className: "text-sm font-medium text-white/60 drop-shadow-md" }, track.artist || "\u672A\u77E5\u827A\u672F\u5BB6"));
5613
+ return /* @__PURE__ */ React24.createElement("div", { className: `flex flex-col items-center text-center gap-2 ${className}` }, /* @__PURE__ */ React24.createElement("div", { className: "px-4 py-1.5 bg-black/40 backdrop-blur-md rounded-full border border-white/10 shadow-lg" }, /* @__PURE__ */ React24.createElement("h2", { className: "text-lg font-bold text-white tracking-wider truncate max-w-md" }, track.title)), /* @__PURE__ */ React24.createElement("p", { className: "text-sm font-medium text-white/60 drop-shadow-md" }, track.artist || "\u672A\u77E5\u827A\u672F\u5BB6"));
5245
5614
  };
5246
5615
 
5247
5616
  // src/mmd/music-player/MMDMusicPlayer.tsx
@@ -5443,9 +5812,9 @@ var MMDMusicPlayer = forwardRef(
5443
5812
  };
5444
5813
  }, [resetUITimeout]);
5445
5814
  if (!currentTrack) {
5446
- return /* @__PURE__ */ React21.createElement("div", { className: "flex h-full w-full items-center justify-center bg-black text-white" }, "\u64AD\u653E\u5217\u8868\u4E3A\u7A7A");
5815
+ return /* @__PURE__ */ React24.createElement("div", { className: "flex h-full w-full items-center justify-center bg-black text-white" }, "\u64AD\u653E\u5217\u8868\u4E3A\u7A7A");
5447
5816
  }
5448
- return /* @__PURE__ */ React21.createElement(
5817
+ return /* @__PURE__ */ React24.createElement(
5449
5818
  "div",
5450
5819
  {
5451
5820
  ref: containerRef,
@@ -5454,7 +5823,7 @@ var MMDMusicPlayer = forwardRef(
5454
5823
  onMouseMove: resetUITimeout,
5455
5824
  onClick: resetUITimeout
5456
5825
  },
5457
- /* @__PURE__ */ React21.createElement(
5826
+ /* @__PURE__ */ React24.createElement(
5458
5827
  "div",
5459
5828
  {
5460
5829
  className: "absolute inset-0 w-full h-full",
@@ -5464,7 +5833,7 @@ var MMDMusicPlayer = forwardRef(
5464
5833
  transition: "opacity 0.5s ease-in-out"
5465
5834
  }
5466
5835
  },
5467
- !isTransitioning && /* @__PURE__ */ React21.createElement(
5836
+ !isTransitioning && /* @__PURE__ */ React24.createElement(
5468
5837
  MMDPlayerBase,
5469
5838
  {
5470
5839
  ref: playerRef,
@@ -5498,14 +5867,14 @@ var MMDMusicPlayer = forwardRef(
5498
5867
  }
5499
5868
  )
5500
5869
  ),
5501
- (isLoading || isTransitioning) && /* @__PURE__ */ React21.createElement("div", { className: "absolute inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-md" }, /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col items-center gap-4" }, /* @__PURE__ */ React21.createElement("div", { className: "h-12 w-12 animate-spin rounded-full border-4 border-white/20 border-t-blue-500" }), /* @__PURE__ */ React21.createElement("div", { className: "text-white font-medium" }, isTransitioning ? "\u51C6\u5907\u4E0B\u4E00\u9996..." : "\u6B63\u5728\u52A0\u8F7D\u821E\u53F0..."))),
5502
- /* @__PURE__ */ React21.createElement(
5870
+ (isLoading || isTransitioning) && /* @__PURE__ */ React24.createElement("div", { className: "absolute inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-md" }, /* @__PURE__ */ React24.createElement("div", { className: "flex flex-col items-center gap-4" }, /* @__PURE__ */ React24.createElement("div", { className: "h-12 w-12 animate-spin rounded-full border-4 border-white/20 border-t-blue-500" }), /* @__PURE__ */ React24.createElement("div", { className: "text-white font-medium" }, isTransitioning ? "\u51C6\u5907\u4E0B\u4E00\u9996..." : "\u6B63\u5728\u52A0\u8F7D\u821E\u53F0..."))),
5871
+ /* @__PURE__ */ React24.createElement(
5503
5872
  "div",
5504
5873
  {
5505
5874
  className: `absolute inset-0 z-10 flex flex-col justify-between transition-opacity duration-700 pointer-events-none ${isUIVisible ? "opacity-100" : "opacity-0"}`
5506
5875
  },
5507
- /* @__PURE__ */ React21.createElement("div", { className: "pt-12 px-8 flex justify-center" }, /* @__PURE__ */ React21.createElement(TrackInfo, { track: currentTrack })),
5508
- /* @__PURE__ */ React21.createElement("div", { className: "pb-12 px-8" }, /* @__PURE__ */ React21.createElement(
5876
+ /* @__PURE__ */ React24.createElement("div", { className: "pt-12 px-8 flex justify-center" }, /* @__PURE__ */ React24.createElement(TrackInfo, { track: currentTrack })),
5877
+ /* @__PURE__ */ React24.createElement("div", { className: "pb-12 px-8" }, /* @__PURE__ */ React24.createElement(
5509
5878
  MusicControls,
5510
5879
  {
5511
5880
  isPlaying,
@@ -5530,7 +5899,7 @@ var MMDMusicPlayer = forwardRef(
5530
5899
  }
5531
5900
  ))
5532
5901
  ),
5533
- /* @__PURE__ */ React21.createElement(
5902
+ /* @__PURE__ */ React24.createElement(
5534
5903
  PlaylistPanel,
5535
5904
  {
5536
5905
  tracks,
@@ -5668,13 +6037,13 @@ var MMDARPlayer = forwardRef((props, ref) => {
5668
6037
  }
5669
6038
  return () => stopCamera();
5670
6039
  }, [autoPlay, startCamera, stopCamera]);
5671
- return /* @__PURE__ */ React21.createElement(
6040
+ return /* @__PURE__ */ React24.createElement(
5672
6041
  "div",
5673
6042
  {
5674
6043
  className: `relative w-full h-full bg-black overflow-hidden ${className}`,
5675
6044
  style
5676
6045
  },
5677
- /* @__PURE__ */ React21.createElement(
6046
+ /* @__PURE__ */ React24.createElement(
5678
6047
  "video",
5679
6048
  {
5680
6049
  ref: videoRef,
@@ -5685,13 +6054,13 @@ var MMDARPlayer = forwardRef((props, ref) => {
5685
6054
  style: { zIndex: 0 }
5686
6055
  }
5687
6056
  ),
5688
- /* @__PURE__ */ React21.createElement(
6057
+ /* @__PURE__ */ React24.createElement(
5689
6058
  "div",
5690
6059
  {
5691
6060
  className: "absolute inset-0 w-full h-full",
5692
6061
  style: { zIndex: 1 }
5693
6062
  },
5694
- /* @__PURE__ */ React21.createElement(
6063
+ /* @__PURE__ */ React24.createElement(
5695
6064
  MMDPlayerBase,
5696
6065
  {
5697
6066
  ref: playerRef,
@@ -5714,45 +6083,45 @@ var MMDARPlayer = forwardRef((props, ref) => {
5714
6083
  }
5715
6084
  )
5716
6085
  ),
5717
- /* @__PURE__ */ React21.createElement("div", { className: "absolute inset-0 z-10 pointer-events-none flex flex-col justify-between p-6" }, /* @__PURE__ */ React21.createElement("div", { className: "flex justify-between items-start pointer-events-auto" }, cameraError ? /* @__PURE__ */ React21.createElement("div", { className: "bg-red-500/80 backdrop-blur-md text-white px-4 py-2 rounded-full flex items-center gap-2 text-sm" }, /* @__PURE__ */ React21.createElement(AlertCircle, { className: "w-4 h-4" }), cameraError, /* @__PURE__ */ React21.createElement(
6086
+ /* @__PURE__ */ React24.createElement("div", { className: "absolute inset-0 z-10 pointer-events-none flex flex-col justify-between p-6" }, /* @__PURE__ */ React24.createElement("div", { className: "flex justify-between items-start pointer-events-auto" }, cameraError ? /* @__PURE__ */ React24.createElement("div", { className: "bg-red-500/80 backdrop-blur-md text-white px-4 py-2 rounded-full flex items-center gap-2 text-sm" }, /* @__PURE__ */ React24.createElement(AlertCircle, { className: "w-4 h-4" }), cameraError, /* @__PURE__ */ React24.createElement(
5718
6087
  "button",
5719
6088
  {
5720
6089
  onClick: () => startCamera(),
5721
6090
  className: "ml-2 underline"
5722
6091
  },
5723
6092
  "\u91CD\u8BD5"
5724
- )) : /* @__PURE__ */ React21.createElement("div", { className: "bg-black/40 backdrop-blur-md text-white px-4 py-2 rounded-full flex items-center gap-2 text-sm" }, /* @__PURE__ */ React21.createElement(Camera, { className: "w-4 h-4 text-green-400" }), isCameraStarted ? "\u5B9E\u666F AR \u6A21\u5F0F\u5DF2\u5F00\u542F" : "\u7B49\u5F85\u6444\u50CF\u5934..."), /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col gap-2" }, showSettings && /* @__PURE__ */ React21.createElement(
6093
+ )) : /* @__PURE__ */ React24.createElement("div", { className: "bg-black/40 backdrop-blur-md text-white px-4 py-2 rounded-full flex items-center gap-2 text-sm" }, /* @__PURE__ */ React24.createElement(Camera, { className: "w-4 h-4 text-green-400" }), isCameraStarted ? "\u5B9E\u666F AR \u6A21\u5F0F\u5DF2\u5F00\u542F" : "\u7B49\u5F85\u6444\u50CF\u5934..."), /* @__PURE__ */ React24.createElement("div", { className: "flex flex-col gap-2" }, showSettings && /* @__PURE__ */ React24.createElement(
5725
6094
  "button",
5726
6095
  {
5727
6096
  onClick: () => setIsSettingsOpen(!isSettingsOpen),
5728
6097
  className: `p-3 backdrop-blur-md rounded-full text-white transition-all active:scale-95 pointer-events-auto ${isSettingsOpen ? "bg-blue-500" : "bg-white/10 hover:bg-white/20"}`,
5729
6098
  title: "\u8BBE\u7F6E\u6A21\u578B\u4E0E\u52A8\u4F5C"
5730
6099
  },
5731
- /* @__PURE__ */ React21.createElement(Settings, { className: "w-5 h-5" })
5732
- ), /* @__PURE__ */ React21.createElement(
6100
+ /* @__PURE__ */ React24.createElement(Settings, { className: "w-5 h-5" })
6101
+ ), /* @__PURE__ */ React24.createElement(
5733
6102
  "button",
5734
6103
  {
5735
6104
  onClick: switchCamera,
5736
6105
  className: "p-3 bg-white/10 hover:bg-white/20 backdrop-blur-md rounded-full text-white transition-all active:scale-95 pointer-events-auto",
5737
6106
  title: "\u5207\u6362\u524D\u540E\u6444\u50CF\u5934"
5738
6107
  },
5739
- /* @__PURE__ */ React21.createElement(RefreshCw, { className: "w-5 h-5" })
5740
- ), /* @__PURE__ */ React21.createElement(
6108
+ /* @__PURE__ */ React24.createElement(RefreshCw, { className: "w-5 h-5" })
6109
+ ), /* @__PURE__ */ React24.createElement(
5741
6110
  "button",
5742
6111
  {
5743
6112
  onClick: isCameraStarted ? stopCamera : () => startCamera(),
5744
6113
  className: `p-3 backdrop-blur-md rounded-full text-white transition-all active:scale-95 pointer-events-auto ${isCameraStarted ? "bg-red-500/20 hover:bg-red-500/40" : "bg-green-500/20 hover:bg-green-500/40"}`,
5745
6114
  title: isCameraStarted ? "\u5173\u95ED\u6444\u50CF\u5934" : "\u5F00\u542F\u6444\u50CF\u5934"
5746
6115
  },
5747
- isCameraStarted ? /* @__PURE__ */ React21.createElement(CameraOff, { className: "w-5 h-5" }) : /* @__PURE__ */ React21.createElement(Camera, { className: "w-5 h-5" })
5748
- ))), isSettingsOpen && /* @__PURE__ */ React21.createElement("div", { className: "absolute top-20 right-6 w-80 bg-black/80 backdrop-blur-xl border border-white/10 rounded-2xl p-6 pointer-events-auto shadow-2xl animate-in slide-in-from-right-4 duration-300" }, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center justify-between mb-6" }, /* @__PURE__ */ React21.createElement("h3", { className: "text-white font-bold flex items-center gap-2" }, /* @__PURE__ */ React21.createElement(Settings, { className: "w-4 h-4" }), "\u8D44\u6E90\u8BBE\u7F6E"), /* @__PURE__ */ React21.createElement(
6116
+ isCameraStarted ? /* @__PURE__ */ React24.createElement(CameraOff, { className: "w-5 h-5" }) : /* @__PURE__ */ React24.createElement(Camera, { className: "w-5 h-5" })
6117
+ ))), isSettingsOpen && /* @__PURE__ */ React24.createElement("div", { className: "absolute top-20 right-6 w-80 bg-black/80 backdrop-blur-xl border border-white/10 rounded-2xl p-6 pointer-events-auto shadow-2xl animate-in slide-in-from-right-4 duration-300" }, /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between mb-6" }, /* @__PURE__ */ React24.createElement("h3", { className: "text-white font-bold flex items-center gap-2" }, /* @__PURE__ */ React24.createElement(Settings, { className: "w-4 h-4" }), "\u8D44\u6E90\u8BBE\u7F6E"), /* @__PURE__ */ React24.createElement(
5749
6118
  "button",
5750
6119
  {
5751
6120
  onClick: () => setIsSettingsOpen(false),
5752
6121
  className: "p-1 hover:bg-white/10 rounded-full transition-colors text-white/60"
5753
6122
  },
5754
- /* @__PURE__ */ React21.createElement(X, { className: "w-4 h-4" })
5755
- )), /* @__PURE__ */ React21.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React21.createElement("div", null, /* @__PURE__ */ React21.createElement("label", { className: "block text-xs font-medium text-white/50 mb-1.5 ml-1 uppercase tracking-wider" }, "\u6A21\u578B\u8DEF\u5F84 (.pmx)"), /* @__PURE__ */ React21.createElement(
6123
+ /* @__PURE__ */ React24.createElement(X, { className: "w-4 h-4" })
6124
+ )), /* @__PURE__ */ React24.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React24.createElement("div", null, /* @__PURE__ */ React24.createElement("label", { className: "block text-xs font-medium text-white/50 mb-1.5 ml-1 uppercase tracking-wider" }, "\u6A21\u578B\u8DEF\u5F84 (.pmx)"), /* @__PURE__ */ React24.createElement(
5756
6125
  "input",
5757
6126
  {
5758
6127
  type: "text",
@@ -5761,7 +6130,7 @@ var MMDARPlayer = forwardRef((props, ref) => {
5761
6130
  placeholder: "\u8BF7\u8F93\u5165\u6A21\u578B URL...",
5762
6131
  className: "w-full bg-white/5 border border-white/10 rounded-xl px-4 py-2.5 text-sm text-white placeholder:text-white/10 focus:outline-none focus:border-blue-500/50 transition-colors"
5763
6132
  }
5764
- )), /* @__PURE__ */ React21.createElement("div", null, /* @__PURE__ */ React21.createElement("label", { className: "block text-xs font-medium text-white/50 mb-1.5 ml-1 uppercase tracking-wider" }, "\u52A8\u4F5C\u8DEF\u5F84 (.vmd)"), /* @__PURE__ */ React21.createElement(
6133
+ )), /* @__PURE__ */ React24.createElement("div", null, /* @__PURE__ */ React24.createElement("label", { className: "block text-xs font-medium text-white/50 mb-1.5 ml-1 uppercase tracking-wider" }, "\u52A8\u4F5C\u8DEF\u5F84 (.vmd)"), /* @__PURE__ */ React24.createElement(
5765
6134
  "input",
5766
6135
  {
5767
6136
  type: "text",
@@ -5770,7 +6139,7 @@ var MMDARPlayer = forwardRef((props, ref) => {
5770
6139
  placeholder: "\u8BF7\u8F93\u5165\u52A8\u4F5C URL...",
5771
6140
  className: "w-full bg-white/5 border border-white/10 rounded-xl px-4 py-2.5 text-sm text-white placeholder:text-white/10 focus:outline-none focus:border-blue-500/50 transition-colors"
5772
6141
  }
5773
- )), /* @__PURE__ */ React21.createElement("div", { className: "pt-2" }, /* @__PURE__ */ React21.createElement(
6142
+ )), /* @__PURE__ */ React24.createElement("div", { className: "pt-2" }, /* @__PURE__ */ React24.createElement(
5774
6143
  "button",
5775
6144
  {
5776
6145
  onClick: () => {
@@ -5781,9 +6150,9 @@ var MMDARPlayer = forwardRef((props, ref) => {
5781
6150
  },
5782
6151
  className: "w-full bg-blue-500 hover:bg-blue-600 text-white font-bold py-3 rounded-xl flex items-center justify-center gap-2 transition-all active:scale-95 shadow-lg shadow-blue-500/20"
5783
6152
  },
5784
- /* @__PURE__ */ React21.createElement(Check, { className: "w-4 h-4" }),
6153
+ /* @__PURE__ */ React24.createElement(Check, { className: "w-4 h-4" }),
5785
6154
  "\u5E94\u7528\u66F4\u6539"
5786
- )))), isLoading && /* @__PURE__ */ React21.createElement("div", { className: "absolute inset-0 flex items-center justify-center pointer-events-none" }, /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col items-center gap-3" }, /* @__PURE__ */ React21.createElement("div", { className: "w-12 h-12 border-4 border-blue-500/30 border-t-blue-500 rounded-full animate-spin" }), /* @__PURE__ */ React21.createElement("div", { className: "text-white text-sm font-medium bg-black/40 px-3 py-1 rounded-full backdrop-blur-sm" }, "\u6B63\u5728\u52A0\u8F7D Miku \u8D44\u6E90..."))))
6155
+ )))), isLoading && /* @__PURE__ */ React24.createElement("div", { className: "absolute inset-0 flex items-center justify-center pointer-events-none" }, /* @__PURE__ */ React24.createElement("div", { className: "flex flex-col items-center gap-3" }, /* @__PURE__ */ React24.createElement("div", { className: "w-12 h-12 border-4 border-blue-500/30 border-t-blue-500 rounded-full animate-spin" }), /* @__PURE__ */ React24.createElement("div", { className: "text-white text-sm font-medium bg-black/40 px-3 py-1 rounded-full backdrop-blur-sm" }, "\u6B63\u5728\u52A0\u8F7D Miku \u8D44\u6E90..."))))
5787
6156
  );
5788
6157
  });
5789
6158
  MMDARPlayer.displayName = "MMDARPlayer";
@@ -6036,20 +6405,20 @@ var FXViewer = ({
6036
6405
  parse();
6037
6406
  }, [source, isContent, fileName, onParsed, onError]);
6038
6407
  if (loading) {
6039
- return /* @__PURE__ */ React21.createElement("div", { className: `fx-viewer loading ${className}` }, /* @__PURE__ */ React21.createElement("div", { className: "fx-viewer-spinner" }, "\u52A0\u8F7D\u4E2D..."));
6408
+ return /* @__PURE__ */ React24.createElement("div", { className: `fx-viewer loading ${className}` }, /* @__PURE__ */ React24.createElement("div", { className: "fx-viewer-spinner" }, "\u52A0\u8F7D\u4E2D..."));
6040
6409
  }
6041
6410
  if (error || !effect || !summary) {
6042
- return /* @__PURE__ */ React21.createElement("div", { className: `fx-viewer error ${className}` }, /* @__PURE__ */ React21.createElement("div", { className: "fx-viewer-error" }, /* @__PURE__ */ React21.createElement("h3", null, "\u274C \u89E3\u6790\u9519\u8BEF"), /* @__PURE__ */ React21.createElement("p", null, error || "\u672A\u77E5\u9519\u8BEF")));
6411
+ return /* @__PURE__ */ React24.createElement("div", { className: `fx-viewer error ${className}` }, /* @__PURE__ */ React24.createElement("div", { className: "fx-viewer-error" }, /* @__PURE__ */ React24.createElement("h3", null, "\u274C \u89E3\u6790\u9519\u8BEF"), /* @__PURE__ */ React24.createElement("p", null, error || "\u672A\u77E5\u9519\u8BEF")));
6043
6412
  }
6044
6413
  const validation = validateFXEffect(effect);
6045
- return /* @__PURE__ */ React21.createElement("div", { className: `fx-viewer ${className}` }, /* @__PURE__ */ React21.createElement("div", { className: "fx-viewer-header" }, /* @__PURE__ */ React21.createElement("h2", null, effect.fileName), /* @__PURE__ */ React21.createElement("p", { className: "fx-viewer-config-summary" }, getConfigSummaryText(effect))), /* @__PURE__ */ React21.createElement("div", { className: "fx-viewer-tabs" }, /* @__PURE__ */ React21.createElement(
6414
+ return /* @__PURE__ */ React24.createElement("div", { className: `fx-viewer ${className}` }, /* @__PURE__ */ React24.createElement("div", { className: "fx-viewer-header" }, /* @__PURE__ */ React24.createElement("h2", null, effect.fileName), /* @__PURE__ */ React24.createElement("p", { className: "fx-viewer-config-summary" }, getConfigSummaryText(effect))), /* @__PURE__ */ React24.createElement("div", { className: "fx-viewer-tabs" }, /* @__PURE__ */ React24.createElement(
6046
6415
  "button",
6047
6416
  {
6048
6417
  className: activeTab === "summary" ? "active" : "",
6049
6418
  onClick: () => setActiveTab("summary")
6050
6419
  },
6051
6420
  "\u6458\u8981"
6052
- ), /* @__PURE__ */ React21.createElement(
6421
+ ), /* @__PURE__ */ React24.createElement(
6053
6422
  "button",
6054
6423
  {
6055
6424
  className: activeTab === "defines" ? "active" : "",
@@ -6058,7 +6427,7 @@ var FXViewer = ({
6058
6427
  "\u5B8F\u5B9A\u4E49 (",
6059
6428
  summary.defineCount,
6060
6429
  ")"
6061
- ), /* @__PURE__ */ React21.createElement(
6430
+ ), /* @__PURE__ */ React24.createElement(
6062
6431
  "button",
6063
6432
  {
6064
6433
  className: activeTab === "textures" ? "active" : "",
@@ -6067,7 +6436,7 @@ var FXViewer = ({
6067
6436
  "\u7EB9\u7406 (",
6068
6437
  summary.textureCount,
6069
6438
  ")"
6070
- ), /* @__PURE__ */ React21.createElement(
6439
+ ), /* @__PURE__ */ React24.createElement(
6071
6440
  "button",
6072
6441
  {
6073
6442
  className: activeTab === "parameters" ? "active" : "",
@@ -6076,20 +6445,20 @@ var FXViewer = ({
6076
6445
  "\u53C2\u6570 (",
6077
6446
  summary.parameterCount,
6078
6447
  ")"
6079
- ), /* @__PURE__ */ React21.createElement(
6448
+ ), /* @__PURE__ */ React24.createElement(
6080
6449
  "button",
6081
6450
  {
6082
6451
  className: activeTab === "validation" ? "active" : "",
6083
6452
  onClick: () => setActiveTab("validation")
6084
6453
  },
6085
6454
  "\u9A8C\u8BC1"
6086
- )), /* @__PURE__ */ React21.createElement("div", { className: "fx-viewer-content" }, activeTab === "summary" && /* @__PURE__ */ React21.createElement(SummaryTab, { summary, effect }), activeTab === "defines" && /* @__PURE__ */ React21.createElement(DefinesTab, { effect }), activeTab === "textures" && /* @__PURE__ */ React21.createElement(TexturesTab, { effect }), activeTab === "parameters" && /* @__PURE__ */ React21.createElement(ParametersTab, { effect }), activeTab === "validation" && /* @__PURE__ */ React21.createElement(ValidationTab, { validation })));
6455
+ )), /* @__PURE__ */ React24.createElement("div", { className: "fx-viewer-content" }, activeTab === "summary" && /* @__PURE__ */ React24.createElement(SummaryTab, { summary, effect }), activeTab === "defines" && /* @__PURE__ */ React24.createElement(DefinesTab, { effect }), activeTab === "textures" && /* @__PURE__ */ React24.createElement(TexturesTab, { effect }), activeTab === "parameters" && /* @__PURE__ */ React24.createElement(ParametersTab, { effect }), activeTab === "validation" && /* @__PURE__ */ React24.createElement(ValidationTab, { validation })));
6087
6456
  };
6088
- var SummaryTab = ({ summary, effect }) => /* @__PURE__ */ React21.createElement("div", { className: "fx-tab-summary" }, /* @__PURE__ */ React21.createElement("div", { className: "fx-stats-grid" }, /* @__PURE__ */ React21.createElement("div", { className: "fx-stat-card" }, /* @__PURE__ */ React21.createElement("div", { className: "fx-stat-label" }, "\u5B8F\u5B9A\u4E49"), /* @__PURE__ */ React21.createElement("div", { className: "fx-stat-value" }, summary.defineCount)), /* @__PURE__ */ React21.createElement("div", { className: "fx-stat-card" }, /* @__PURE__ */ React21.createElement("div", { className: "fx-stat-label" }, "\u53C2\u6570"), /* @__PURE__ */ React21.createElement("div", { className: "fx-stat-value" }, summary.parameterCount)), /* @__PURE__ */ React21.createElement("div", { className: "fx-stat-card" }, /* @__PURE__ */ React21.createElement("div", { className: "fx-stat-label" }, "\u7EB9\u7406"), /* @__PURE__ */ React21.createElement("div", { className: "fx-stat-value" }, summary.textureCount)), /* @__PURE__ */ React21.createElement("div", { className: "fx-stat-card" }, /* @__PURE__ */ React21.createElement("div", { className: "fx-stat-label" }, "Technique"), /* @__PURE__ */ React21.createElement("div", { className: "fx-stat-value" }, summary.techniqueCount))), /* @__PURE__ */ React21.createElement("div", { className: "fx-features" }, /* @__PURE__ */ React21.createElement("h3", null, "\u529F\u80FD\u7279\u6027"), /* @__PURE__ */ React21.createElement("div", { className: "fx-feature-list" }, /* @__PURE__ */ React21.createElement("div", { className: `fx-feature ${summary.hasLocalShadow ? "enabled" : "disabled"}` }, summary.hasLocalShadow ? "\u2713" : "\u2717", " LocalShadow"), /* @__PURE__ */ React21.createElement("div", { className: `fx-feature ${summary.hasExcellentShadow ? "enabled" : "disabled"}` }, summary.hasExcellentShadow ? "\u2713" : "\u2717", " ExcellentShadow"), /* @__PURE__ */ React21.createElement("div", { className: `fx-feature ${summary.hasHgShadow ? "enabled" : "disabled"}` }, summary.hasHgShadow ? "\u2713" : "\u2717", " HgShadow"))), effect.includes.length > 0 && /* @__PURE__ */ React21.createElement("div", { className: "fx-includes" }, /* @__PURE__ */ React21.createElement("h3", null, "\u5305\u542B\u6587\u4EF6"), /* @__PURE__ */ React21.createElement("ul", null, effect.includes.map((inc, idx) => /* @__PURE__ */ React21.createElement("li", { key: idx }, /* @__PURE__ */ React21.createElement("code", null, inc))))), effect.controllers.length > 0 && /* @__PURE__ */ React21.createElement("div", { className: "fx-controllers" }, /* @__PURE__ */ React21.createElement("h3", null, "\u63A7\u5236\u5668"), /* @__PURE__ */ React21.createElement("ul", null, effect.controllers.map((ctrl, idx) => /* @__PURE__ */ React21.createElement("li", { key: idx }, /* @__PURE__ */ React21.createElement("strong", null, ctrl.name), ": ", ctrl.objectName, " / ", ctrl.itemName)))));
6089
- var DefinesTab = ({ effect }) => /* @__PURE__ */ React21.createElement("div", { className: "fx-tab-defines" }, /* @__PURE__ */ React21.createElement("table", { className: "fx-table" }, /* @__PURE__ */ React21.createElement("thead", null, /* @__PURE__ */ React21.createElement("tr", null, /* @__PURE__ */ React21.createElement("th", null, "\u540D\u79F0"), /* @__PURE__ */ React21.createElement("th", null, "\u503C"), /* @__PURE__ */ React21.createElement("th", null, "\u72B6\u6001"), /* @__PURE__ */ React21.createElement("th", null, "\u884C\u53F7"))), /* @__PURE__ */ React21.createElement("tbody", null, effect.defines.map((define, idx) => /* @__PURE__ */ React21.createElement("tr", { key: idx, className: define.isCommented ? "disabled" : "enabled" }, /* @__PURE__ */ React21.createElement("td", null, /* @__PURE__ */ React21.createElement("code", null, define.name)), /* @__PURE__ */ React21.createElement("td", null, define.value || "-"), /* @__PURE__ */ React21.createElement("td", null, /* @__PURE__ */ React21.createElement("span", { className: `status-badge ${define.isCommented ? "disabled" : "enabled"}` }, define.isCommented ? "\u7981\u7528" : "\u542F\u7528")), /* @__PURE__ */ React21.createElement("td", null, define.lineNumber))))));
6090
- var TexturesTab = ({ effect }) => /* @__PURE__ */ React21.createElement("div", { className: "fx-tab-textures" }, effect.textures.length === 0 ? /* @__PURE__ */ React21.createElement("p", { className: "fx-empty-message" }, "\u672A\u627E\u5230\u7EB9\u7406\u5B9A\u4E49") : /* @__PURE__ */ React21.createElement("table", { className: "fx-table" }, /* @__PURE__ */ React21.createElement("thead", null, /* @__PURE__ */ React21.createElement("tr", null, /* @__PURE__ */ React21.createElement("th", null, "\u540D\u79F0"), /* @__PURE__ */ React21.createElement("th", null, "\u8DEF\u5F84"), /* @__PURE__ */ React21.createElement("th", null, "\u5C3A\u5BF8"), /* @__PURE__ */ React21.createElement("th", null, "\u7528\u9014"))), /* @__PURE__ */ React21.createElement("tbody", null, effect.textures.map((texture, idx) => /* @__PURE__ */ React21.createElement("tr", { key: idx }, /* @__PURE__ */ React21.createElement("td", null, /* @__PURE__ */ React21.createElement("code", null, texture.name)), /* @__PURE__ */ React21.createElement("td", null, texture.path), /* @__PURE__ */ React21.createElement("td", null, texture.width && texture.height ? `${texture.width}\xD7${texture.height}` : "-"), /* @__PURE__ */ React21.createElement("td", null, texture.purpose || "-"))))));
6091
- var ParametersTab = ({ effect }) => /* @__PURE__ */ React21.createElement("div", { className: "fx-tab-parameters" }, /* @__PURE__ */ React21.createElement("table", { className: "fx-table" }, /* @__PURE__ */ React21.createElement("thead", null, /* @__PURE__ */ React21.createElement("tr", null, /* @__PURE__ */ React21.createElement("th", null, "\u540D\u79F0"), /* @__PURE__ */ React21.createElement("th", null, "\u7C7B\u578B"), /* @__PURE__ */ React21.createElement("th", null, "\u8BED\u4E49"), /* @__PURE__ */ React21.createElement("th", null, "\u9ED8\u8BA4\u503C"), /* @__PURE__ */ React21.createElement("th", null, "\u884C\u53F7"))), /* @__PURE__ */ React21.createElement("tbody", null, effect.parameters.map((param, idx) => /* @__PURE__ */ React21.createElement("tr", { key: idx }, /* @__PURE__ */ React21.createElement("td", null, /* @__PURE__ */ React21.createElement("code", null, param.name)), /* @__PURE__ */ React21.createElement("td", null, /* @__PURE__ */ React21.createElement("code", null, param.type)), /* @__PURE__ */ React21.createElement("td", null, param.semantic || "-"), /* @__PURE__ */ React21.createElement("td", null, param.defaultValue || "-"), /* @__PURE__ */ React21.createElement("td", null, param.lineNumber))))));
6092
- var ValidationTab = ({ validation }) => /* @__PURE__ */ React21.createElement("div", { className: "fx-tab-validation" }, /* @__PURE__ */ React21.createElement("div", { className: `fx-validation-status ${validation.isValid ? "valid" : "invalid"}` }, /* @__PURE__ */ React21.createElement("h3", null, validation.isValid ? "\u2713 \u9A8C\u8BC1\u901A\u8FC7" : "\u2717 \u9A8C\u8BC1\u5931\u8D25")), validation.errors.length > 0 && /* @__PURE__ */ React21.createElement("div", { className: "fx-validation-section fx-errors" }, /* @__PURE__ */ React21.createElement("h4", null, "\u9519\u8BEF (", validation.errors.length, ")"), /* @__PURE__ */ React21.createElement("ul", null, validation.errors.map((error, idx) => /* @__PURE__ */ React21.createElement("li", { key: idx, className: "fx-error-item" }, error)))), validation.warnings.length > 0 && /* @__PURE__ */ React21.createElement("div", { className: "fx-validation-section fx-warnings" }, /* @__PURE__ */ React21.createElement("h4", null, "\u8B66\u544A (", validation.warnings.length, ")"), /* @__PURE__ */ React21.createElement("ul", null, validation.warnings.map((warning, idx) => /* @__PURE__ */ React21.createElement("li", { key: idx, className: "fx-warning-item" }, warning)))), validation.isValid && validation.warnings.length === 0 && /* @__PURE__ */ React21.createElement("p", { className: "fx-success-message" }, "FX\u6587\u4EF6\u7ED3\u6784\u5B8C\u6574\uFF0C\u6CA1\u6709\u53D1\u73B0\u95EE\u9898\u3002"));
6457
+ var SummaryTab = ({ summary, effect }) => /* @__PURE__ */ React24.createElement("div", { className: "fx-tab-summary" }, /* @__PURE__ */ React24.createElement("div", { className: "fx-stats-grid" }, /* @__PURE__ */ React24.createElement("div", { className: "fx-stat-card" }, /* @__PURE__ */ React24.createElement("div", { className: "fx-stat-label" }, "\u5B8F\u5B9A\u4E49"), /* @__PURE__ */ React24.createElement("div", { className: "fx-stat-value" }, summary.defineCount)), /* @__PURE__ */ React24.createElement("div", { className: "fx-stat-card" }, /* @__PURE__ */ React24.createElement("div", { className: "fx-stat-label" }, "\u53C2\u6570"), /* @__PURE__ */ React24.createElement("div", { className: "fx-stat-value" }, summary.parameterCount)), /* @__PURE__ */ React24.createElement("div", { className: "fx-stat-card" }, /* @__PURE__ */ React24.createElement("div", { className: "fx-stat-label" }, "\u7EB9\u7406"), /* @__PURE__ */ React24.createElement("div", { className: "fx-stat-value" }, summary.textureCount)), /* @__PURE__ */ React24.createElement("div", { className: "fx-stat-card" }, /* @__PURE__ */ React24.createElement("div", { className: "fx-stat-label" }, "Technique"), /* @__PURE__ */ React24.createElement("div", { className: "fx-stat-value" }, summary.techniqueCount))), /* @__PURE__ */ React24.createElement("div", { className: "fx-features" }, /* @__PURE__ */ React24.createElement("h3", null, "\u529F\u80FD\u7279\u6027"), /* @__PURE__ */ React24.createElement("div", { className: "fx-feature-list" }, /* @__PURE__ */ React24.createElement("div", { className: `fx-feature ${summary.hasLocalShadow ? "enabled" : "disabled"}` }, summary.hasLocalShadow ? "\u2713" : "\u2717", " LocalShadow"), /* @__PURE__ */ React24.createElement("div", { className: `fx-feature ${summary.hasExcellentShadow ? "enabled" : "disabled"}` }, summary.hasExcellentShadow ? "\u2713" : "\u2717", " ExcellentShadow"), /* @__PURE__ */ React24.createElement("div", { className: `fx-feature ${summary.hasHgShadow ? "enabled" : "disabled"}` }, summary.hasHgShadow ? "\u2713" : "\u2717", " HgShadow"))), effect.includes.length > 0 && /* @__PURE__ */ React24.createElement("div", { className: "fx-includes" }, /* @__PURE__ */ React24.createElement("h3", null, "\u5305\u542B\u6587\u4EF6"), /* @__PURE__ */ React24.createElement("ul", null, effect.includes.map((inc, idx) => /* @__PURE__ */ React24.createElement("li", { key: idx }, /* @__PURE__ */ React24.createElement("code", null, inc))))), effect.controllers.length > 0 && /* @__PURE__ */ React24.createElement("div", { className: "fx-controllers" }, /* @__PURE__ */ React24.createElement("h3", null, "\u63A7\u5236\u5668"), /* @__PURE__ */ React24.createElement("ul", null, effect.controllers.map((ctrl, idx) => /* @__PURE__ */ React24.createElement("li", { key: idx }, /* @__PURE__ */ React24.createElement("strong", null, ctrl.name), ": ", ctrl.objectName, " / ", ctrl.itemName)))));
6458
+ var DefinesTab = ({ effect }) => /* @__PURE__ */ React24.createElement("div", { className: "fx-tab-defines" }, /* @__PURE__ */ React24.createElement("table", { className: "fx-table" }, /* @__PURE__ */ React24.createElement("thead", null, /* @__PURE__ */ React24.createElement("tr", null, /* @__PURE__ */ React24.createElement("th", null, "\u540D\u79F0"), /* @__PURE__ */ React24.createElement("th", null, "\u503C"), /* @__PURE__ */ React24.createElement("th", null, "\u72B6\u6001"), /* @__PURE__ */ React24.createElement("th", null, "\u884C\u53F7"))), /* @__PURE__ */ React24.createElement("tbody", null, effect.defines.map((define, idx) => /* @__PURE__ */ React24.createElement("tr", { key: idx, className: define.isCommented ? "disabled" : "enabled" }, /* @__PURE__ */ React24.createElement("td", null, /* @__PURE__ */ React24.createElement("code", null, define.name)), /* @__PURE__ */ React24.createElement("td", null, define.value || "-"), /* @__PURE__ */ React24.createElement("td", null, /* @__PURE__ */ React24.createElement("span", { className: `status-badge ${define.isCommented ? "disabled" : "enabled"}` }, define.isCommented ? "\u7981\u7528" : "\u542F\u7528")), /* @__PURE__ */ React24.createElement("td", null, define.lineNumber))))));
6459
+ var TexturesTab = ({ effect }) => /* @__PURE__ */ React24.createElement("div", { className: "fx-tab-textures" }, effect.textures.length === 0 ? /* @__PURE__ */ React24.createElement("p", { className: "fx-empty-message" }, "\u672A\u627E\u5230\u7EB9\u7406\u5B9A\u4E49") : /* @__PURE__ */ React24.createElement("table", { className: "fx-table" }, /* @__PURE__ */ React24.createElement("thead", null, /* @__PURE__ */ React24.createElement("tr", null, /* @__PURE__ */ React24.createElement("th", null, "\u540D\u79F0"), /* @__PURE__ */ React24.createElement("th", null, "\u8DEF\u5F84"), /* @__PURE__ */ React24.createElement("th", null, "\u5C3A\u5BF8"), /* @__PURE__ */ React24.createElement("th", null, "\u7528\u9014"))), /* @__PURE__ */ React24.createElement("tbody", null, effect.textures.map((texture, idx) => /* @__PURE__ */ React24.createElement("tr", { key: idx }, /* @__PURE__ */ React24.createElement("td", null, /* @__PURE__ */ React24.createElement("code", null, texture.name)), /* @__PURE__ */ React24.createElement("td", null, texture.path), /* @__PURE__ */ React24.createElement("td", null, texture.width && texture.height ? `${texture.width}\xD7${texture.height}` : "-"), /* @__PURE__ */ React24.createElement("td", null, texture.purpose || "-"))))));
6460
+ var ParametersTab = ({ effect }) => /* @__PURE__ */ React24.createElement("div", { className: "fx-tab-parameters" }, /* @__PURE__ */ React24.createElement("table", { className: "fx-table" }, /* @__PURE__ */ React24.createElement("thead", null, /* @__PURE__ */ React24.createElement("tr", null, /* @__PURE__ */ React24.createElement("th", null, "\u540D\u79F0"), /* @__PURE__ */ React24.createElement("th", null, "\u7C7B\u578B"), /* @__PURE__ */ React24.createElement("th", null, "\u8BED\u4E49"), /* @__PURE__ */ React24.createElement("th", null, "\u9ED8\u8BA4\u503C"), /* @__PURE__ */ React24.createElement("th", null, "\u884C\u53F7"))), /* @__PURE__ */ React24.createElement("tbody", null, effect.parameters.map((param, idx) => /* @__PURE__ */ React24.createElement("tr", { key: idx }, /* @__PURE__ */ React24.createElement("td", null, /* @__PURE__ */ React24.createElement("code", null, param.name)), /* @__PURE__ */ React24.createElement("td", null, /* @__PURE__ */ React24.createElement("code", null, param.type)), /* @__PURE__ */ React24.createElement("td", null, param.semantic || "-"), /* @__PURE__ */ React24.createElement("td", null, param.defaultValue || "-"), /* @__PURE__ */ React24.createElement("td", null, param.lineNumber))))));
6461
+ var ValidationTab = ({ validation }) => /* @__PURE__ */ React24.createElement("div", { className: "fx-tab-validation" }, /* @__PURE__ */ React24.createElement("div", { className: `fx-validation-status ${validation.isValid ? "valid" : "invalid"}` }, /* @__PURE__ */ React24.createElement("h3", null, validation.isValid ? "\u2713 \u9A8C\u8BC1\u901A\u8FC7" : "\u2717 \u9A8C\u8BC1\u5931\u8D25")), validation.errors.length > 0 && /* @__PURE__ */ React24.createElement("div", { className: "fx-validation-section fx-errors" }, /* @__PURE__ */ React24.createElement("h4", null, "\u9519\u8BEF (", validation.errors.length, ")"), /* @__PURE__ */ React24.createElement("ul", null, validation.errors.map((error, idx) => /* @__PURE__ */ React24.createElement("li", { key: idx, className: "fx-error-item" }, error)))), validation.warnings.length > 0 && /* @__PURE__ */ React24.createElement("div", { className: "fx-validation-section fx-warnings" }, /* @__PURE__ */ React24.createElement("h4", null, "\u8B66\u544A (", validation.warnings.length, ")"), /* @__PURE__ */ React24.createElement("ul", null, validation.warnings.map((warning, idx) => /* @__PURE__ */ React24.createElement("li", { key: idx, className: "fx-warning-item" }, warning)))), validation.isValid && validation.warnings.length === 0 && /* @__PURE__ */ React24.createElement("p", { className: "fx-success-message" }, "FX\u6587\u4EF6\u7ED3\u6784\u5B8C\u6574\uFF0C\u6CA1\u6709\u53D1\u73B0\u95EE\u9898\u3002"));
6093
6462
  FXViewer.displayName = "FXViewer";
6094
6463
  var FXThreePreview = ({
6095
6464
  effect,
@@ -6215,12 +6584,12 @@ var FXThreePreview = ({
6215
6584
  };
6216
6585
  }, [effect, texturePath, objectType]);
6217
6586
  if (loading) {
6218
- return /* @__PURE__ */ React21.createElement("div", { className: `fx-three-preview loading ${className}` }, /* @__PURE__ */ React21.createElement("div", { className: "preview-loading" }, "\u52A0\u8F7D\u4E2D..."));
6587
+ return /* @__PURE__ */ React24.createElement("div", { className: `fx-three-preview loading ${className}` }, /* @__PURE__ */ React24.createElement("div", { className: "preview-loading" }, "\u52A0\u8F7D\u4E2D..."));
6219
6588
  }
6220
6589
  if (error) {
6221
- return /* @__PURE__ */ React21.createElement("div", { className: `fx-three-preview error ${className}` }, /* @__PURE__ */ React21.createElement("div", { className: "preview-error" }, /* @__PURE__ */ React21.createElement("h3", null, "\u274C \u6E32\u67D3\u5931\u8D25"), /* @__PURE__ */ React21.createElement("p", null, error)));
6590
+ return /* @__PURE__ */ React24.createElement("div", { className: `fx-three-preview error ${className}` }, /* @__PURE__ */ React24.createElement("div", { className: "preview-error" }, /* @__PURE__ */ React24.createElement("h3", null, "\u274C \u6E32\u67D3\u5931\u8D25"), /* @__PURE__ */ React24.createElement("p", null, error)));
6222
6591
  }
6223
- return /* @__PURE__ */ React21.createElement("div", { className: `fx-three-preview ${className}` }, /* @__PURE__ */ React21.createElement(
6592
+ return /* @__PURE__ */ React24.createElement("div", { className: `fx-three-preview ${className}` }, /* @__PURE__ */ React24.createElement(
6224
6593
  "div",
6225
6594
  {
6226
6595
  ref: containerRef,
@@ -6232,7 +6601,7 @@ var FXThreePreview = ({
6232
6601
  position: "relative"
6233
6602
  }
6234
6603
  }
6235
- ), showInfo && adapterInfo && /* @__PURE__ */ React21.createElement("div", { className: "preview-info" }, /* @__PURE__ */ React21.createElement("div", { className: "info-section" }, /* @__PURE__ */ React21.createElement("h4", null, "\u{1F3A8} \u5E94\u7528\u7684FX\u53C2\u6570"), /* @__PURE__ */ React21.createElement("div", { className: "info-badges" }, /* @__PURE__ */ React21.createElement("span", { className: "badge" }, adapterInfo.materialParams.length, " \u4E2A\u6750\u8D28\u53C2\u6570"), /* @__PURE__ */ React21.createElement("span", { className: "badge" }, adapterInfo.textures.length, " \u4E2A\u7EB9\u7406"), /* @__PURE__ */ React21.createElement("span", { className: "badge" }, adapterInfo.renderFeatures.length, " \u4E2A\u6E32\u67D3\u7279\u6027"))), adapterInfo.renderFeatures.length > 0 && /* @__PURE__ */ React21.createElement("div", { className: "info-section" }, /* @__PURE__ */ React21.createElement("h5", null, "\u542F\u7528\u7684\u7279\u6027:"), /* @__PURE__ */ React21.createElement("div", { className: "feature-list" }, adapterInfo.renderFeatures.map((feature, idx) => /* @__PURE__ */ React21.createElement("span", { key: idx, className: "feature-tag" }, feature))))), /* @__PURE__ */ React21.createElement("style", null, `
6604
+ ), showInfo && adapterInfo && /* @__PURE__ */ React24.createElement("div", { className: "preview-info" }, /* @__PURE__ */ React24.createElement("div", { className: "info-section" }, /* @__PURE__ */ React24.createElement("h4", null, "\u{1F3A8} \u5E94\u7528\u7684FX\u53C2\u6570"), /* @__PURE__ */ React24.createElement("div", { className: "info-badges" }, /* @__PURE__ */ React24.createElement("span", { className: "badge" }, adapterInfo.materialParams.length, " \u4E2A\u6750\u8D28\u53C2\u6570"), /* @__PURE__ */ React24.createElement("span", { className: "badge" }, adapterInfo.textures.length, " \u4E2A\u7EB9\u7406"), /* @__PURE__ */ React24.createElement("span", { className: "badge" }, adapterInfo.renderFeatures.length, " \u4E2A\u6E32\u67D3\u7279\u6027"))), adapterInfo.renderFeatures.length > 0 && /* @__PURE__ */ React24.createElement("div", { className: "info-section" }, /* @__PURE__ */ React24.createElement("h5", null, "\u542F\u7528\u7684\u7279\u6027:"), /* @__PURE__ */ React24.createElement("div", { className: "feature-list" }, adapterInfo.renderFeatures.map((feature, idx) => /* @__PURE__ */ React24.createElement("span", { key: idx, className: "feature-tag" }, feature))))), /* @__PURE__ */ React24.createElement("style", null, `
6236
6605
  .fx-three-preview {
6237
6606
  display: flex;
6238
6607
  flex-direction: column;
@@ -6332,6 +6701,6 @@ var FXThreePreview = ({
6332
6701
  };
6333
6702
  FXThreePreview.displayName = "FXThreePreview";
6334
6703
 
6335
- export { ChoiceMenu, DialogueBox, FXParser, FXThreePreview, FXToThreeAdapter, FXViewer, HLSLToGLSLConverter, HistoryPanel, LoadingOverlay, LoadingScreen, MMDARPlayer, MMDMusicPlayer, MMDPlayerBase, MMDPlayerEnhanced, MMDPlayerEnhancedDebugInfo, MMDPlaylist, MMDPlaylistDebugInfo, MMDVisualNovel, MultiFXAdapter, MusicControls, PlaylistPanel, StartScreen, TrackInfo, compareFXEffects, exportFXToJSON, exportFXToMarkdown, extractTexturePaths, filterDefinesByPrefix, getColorParameters, getConfigSummaryText, getFeatureFlags, getTextureDefines, hasFeature, loadAmmo, validateFXEffect };
6704
+ export { CheerButton, CheerParticles, ChoiceMenu, DialogueBox, FXParser, FXThreePreview, FXToThreeAdapter, FXViewer, HLSLToGLSLConverter, HistoryPanel, LoadingOverlay, LoadingScreen, LoopConfirmDialog, MMDARPlayer, MMDMusicPlayer, MMDPlayerBase, MMDPlayerEnhanced, MMDPlayerEnhancedDebugInfo, MMDPlaylist, MMDPlaylistDebugInfo, MMDVisualNovel, MultiFXAdapter, MusicControls, PlaylistPanel, StartScreen, TrackInfo, compareFXEffects, exportFXToJSON, exportFXToMarkdown, extractTexturePaths, filterDefinesByPrefix, getColorParameters, getConfigSummaryText, getFeatureFlags, getTextureDefines, hasFeature, loadAmmo, validateFXEffect };
6336
6705
  //# sourceMappingURL=index.mjs.map
6337
6706
  //# sourceMappingURL=index.mjs.map