@mavonengine/editor 0.0.9 → 0.0.10

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.
@@ -0,0 +1,54 @@
1
+ import type { ServerEntityView } from '@mavonengine/core/Networking/Client/NetworkManager';
2
+ import type { SyncSnapshot } from '@mavonengine/core/Networking/Debug/sync';
3
+ import EventEmitter from '@mavonengine/core/Utils/EventEmitter';
4
+ import { Group } from 'three';
5
+ import SyncStore from './SyncStore';
6
+ export interface NetworkOverlayOptions {
7
+ /** A wireframe box per networked entity, where the server last said it is */
8
+ ghosts: boolean;
9
+ /** A ring around each player at the server's sync distance */
10
+ rings: boolean;
11
+ /** Colour the ghosts by what this player is sent, instead of by what any player is */
12
+ viewAs: string | null;
13
+ }
14
+ export type GhostState = 'synced' | 'stale' | 'untracked';
15
+ export declare const GHOST_COLORS: Record<GhostState, number>;
16
+ /**
17
+ * How a ghost is coloured: by the server's sync when it is known, otherwise by what this client last received.
18
+ */
19
+ export declare function ghostState(view: ServerEntityView, newestTick: number | null, sync?: SyncSnapshot, viewAs?: string | null): GhostState;
20
+ /**
21
+ * Draws the network state into the editor's viewport: where the server says each entity is (ghosts)
22
+ * and how far each player's state sync reaches (rings).
23
+ *
24
+ * Triggers `changed` when its options change.
25
+ */
26
+ export default class NetworkOverlay extends EventEmitter {
27
+ readonly sync: SyncStore;
28
+ readonly group: Group<import("three").Object3DEventMap>;
29
+ private _options;
30
+ private ghosts;
31
+ private rings;
32
+ private unsubscribe?;
33
+ private boxGeometry;
34
+ private ringGeometry;
35
+ private materials;
36
+ private errorMaterial;
37
+ private ringMaterial;
38
+ private ringSelectedMaterial;
39
+ constructor(sync?: SyncStore, options?: NetworkOverlayOptions);
40
+ get options(): Readonly<NetworkOverlayOptions>;
41
+ setOptions(options: Partial<NetworkOverlayOptions>): void;
42
+ private get active();
43
+ private applyOptions;
44
+ update(): void;
45
+ private updateGhosts;
46
+ private createGhost;
47
+ private updateRings;
48
+ /** How many ghosts and rings are drawn */
49
+ get counts(): {
50
+ ghosts: number;
51
+ rings: number;
52
+ };
53
+ dispose(): void;
54
+ }
@@ -0,0 +1,22 @@
1
+ import type { SyncSnapshot } from '@mavonengine/core/Networking/Debug/sync';
2
+ export interface SyncState {
3
+ /** The server's state sync, undefined until the first answer or after a failed one */
4
+ sync?: SyncSnapshot;
5
+ error?: string;
6
+ }
7
+ /**
8
+ * The server's state sync, asked for a few times a second while something listens: the sync overlay or the Network panel.
9
+ */
10
+ export default class SyncStore {
11
+ private intervalMs;
12
+ private load;
13
+ private state;
14
+ private listeners;
15
+ private timer?;
16
+ private loading;
17
+ constructor(intervalMs?: number, load?: () => Promise<SyncSnapshot>);
18
+ /** Stable until the next answer, for `useSyncExternalStore` */
19
+ get: () => SyncState;
20
+ subscribe: (listener: () => void) => (() => void);
21
+ refresh(): Promise<void>;
22
+ }
@@ -0,0 +1,14 @@
1
+ import type { NetRecordDetail, NetRecordList, NetRecordQuery } from '@mavonengine/core/Networking/Debug/NetRecorder';
2
+ import type { SyncSnapshot } from '@mavonengine/core/Networking/Debug/sync';
3
+ /**
4
+ * The game server's network debug endpoints (GET /api/game/dev/net/*), read by the editor.
5
+ *
6
+ * They are asked on the page's own origin, which is where the game server serves the client in dev.
7
+ * For a client served elsewhere, put the server's URL in `localStorage['mavonengine:server-url']`;
8
+ * the server then has to allow that origin (CORS).
9
+ */
10
+ export declare const SERVER_URL_KEY = "mavonengine:server-url";
11
+ export declare function serverUrl(): string;
12
+ export declare function fetchSync(fetchFn?: typeof fetch): Promise<SyncSnapshot>;
13
+ export declare function fetchPackets(query: NetRecordQuery, fetchFn?: typeof fetch): Promise<NetRecordList>;
14
+ export declare function fetchPacket(id: number, fetchFn?: typeof fetch): Promise<NetRecordDetail | null>;
@@ -0,0 +1,49 @@
1
+ import type { InstallJob, InstallStatus } from '@mavonengine/core/Plugins/install';
2
+ import type { AvailablePlugin } from '@mavonengine/core/Plugins/registry';
3
+ import type { PluginInfo, PluginInfoList } from '@mavonengine/core/Plugins/types';
4
+ export type { AvailablePlugin, InstallJob, InstallStatus, PluginInfo, PluginInfoList };
5
+ /** Put a URL here in localStorage to read the list of available plugins from a fork or a branch */
6
+ export declare const PLUGINS_URL_KEY = "mavonengine:plugins-url";
7
+ export declare function registryUrl(): string;
8
+ /**
9
+ * The plugins that can be installed and the project doesn't have yet: plugins.json on the main branch of the
10
+ * MavonEngine repository, read from GitHub by the browser.
11
+ */
12
+ export declare function fetchAvailablePlugins(installed: PluginInfo[], fetchFn?: typeof fetch): Promise<AvailablePlugin[]>;
13
+ /**
14
+ * The plugins in the project's mavonengine.json, as the dev server describes them: version, readme, prefabs.
15
+ * Asked on the page's own origin, which the Vite dev server with `mavonEnginePlugins()` answers.
16
+ */
17
+ export declare function fetchPlugins(fetchFn?: typeof fetch): Promise<PluginInfoList>;
18
+ export interface PluginPrefab {
19
+ name: string;
20
+ /** Shown in the editor's asset list, when the plugin registered the prefab in this session */
21
+ label?: string;
22
+ /** Registered by the plugin's client entry right now, so it can be placed */
23
+ registered: boolean;
24
+ /** Listed under the plugin's `prefabs` in mavonengine.json: its assets ship in a release */
25
+ used: boolean;
26
+ }
27
+ /**
28
+ * The prefabs of a plugin: the ones it registered in the running editor, plus the ones its manifest or
29
+ * the project's mavonengine.json name
30
+ */
31
+ export declare function pluginPrefabs(plugin: PluginInfo, registered: {
32
+ name: string;
33
+ label?: string;
34
+ plugin?: string;
35
+ }[]): PluginPrefab[];
36
+ /**
37
+ * The README of a plugin that isn't installed, read from the URL the list gives for it
38
+ */
39
+ export declare function fetchAvailableReadme(plugin: AvailablePlugin, fetchFn?: typeof fetch): Promise<string>;
40
+ /**
41
+ * Whether packages can be installed from the editor, and how the running or last install goes.
42
+ * Never throws: a dev server that can't be asked can't install either.
43
+ */
44
+ export declare function fetchInstallStatus(fetchFn?: typeof fetch): Promise<InstallStatus>;
45
+ /**
46
+ * Ask the dev server to install `packages`. It hands that to `mavonengine dev`, which installs them, adds the
47
+ * plugins among them to mavonengine.json and restarts the dev servers. Resolves once the install has started.
48
+ */
49
+ export declare function startInstall(packages: string[], fetchFn?: typeof fetch): Promise<InstallJob>;
@@ -0,0 +1,23 @@
1
+ import type { HttpRouteInfo } from '@mavonengine/core/Networking/Server/Http/RouteInfo';
2
+ export type { HttpRouteInfo };
3
+ /**
4
+ * The game server's list of HTTP endpoints (GET /api/game/routes), read by the editor's Server panel.
5
+ *
6
+ * It is asked on the page's own origin, which is where the game server serves the client in dev.
7
+ * For a client served elsewhere, put the server's URL in `localStorage['mavonengine:server-url']`;
8
+ * the server then has to allow that origin (CORS).
9
+ */
10
+ export declare const SERVER_URL_KEY = "mavonengine:server-url";
11
+ export declare function serverUrl(): string;
12
+ export declare function fetchRoutes(fetchFn?: typeof fetch): Promise<HttpRouteInfo[]>;
13
+ export interface RouteGroup {
14
+ /** `engine`, `game` or the plugin's package */
15
+ id: string;
16
+ /** `Engine`, `Game` or the plugin's package, as shown in the From column */
17
+ from: string;
18
+ routes: HttpRouteInfo[];
19
+ }
20
+ /**
21
+ * Routes by who registered them: the game's own first, then each plugin, the engine's last
22
+ */
23
+ export declare function groupRoutes(routes: HttpRouteInfo[]): RouteGroup[];
@@ -1 +1,6 @@
1
- export default function ActivityBar(): import("react").JSX.Element;
1
+ /** What the editor shows next to the activity bar: the scene editor itself, or a view that takes its place */
2
+ export type Activity = 'scene' | 'server' | 'plugins';
3
+ export default function ActivityBar({ active, onSelect }: {
4
+ active: Activity;
5
+ onSelect(activity: Activity): void;
6
+ }): import("react").JSX.Element;
@@ -0,0 +1,5 @@
1
+ /**
2
+ * The editor's Network panel: packets and network events of the server or of this tab, a timeline of them,
3
+ * the server's state sync, and the switches of the viewport overlay.
4
+ */
5
+ export default function NetworkPanel(): import("react").JSX.Element;
@@ -0,0 +1,14 @@
1
+ import type { NetRecord } from '@mavonengine/core/Networking/Debug/NetRecorder';
2
+ declare const LANES: readonly ['out', 'in', 'event'];
3
+ export declare function laneOf(record: NetRecord): typeof LANES[number];
4
+ /**
5
+ * The last `windowMs` of traffic as marks on three lanes: sent, received and events. Taller marks are larger packets.
6
+ * While `live` the newest moment sits at the right edge and the marks scroll; paused it ends at the last record.
7
+ */
8
+ export default function Timeline({ records, selectedId, live, windowMs }: {
9
+ records: NetRecord[];
10
+ selectedId?: number;
11
+ live: boolean;
12
+ windowMs?: number;
13
+ }): import("react").JSX.Element;
14
+ export {};
@@ -0,0 +1,14 @@
1
+ import type { NetRecord } from '@mavonengine/core/Networking/Debug/NetRecorder';
2
+ export declare function formatBytes(bytes: number | undefined): string;
3
+ /** Local time with milliseconds, e.g. 14:02:11.123 */
4
+ export declare function formatTime(timestamp: number): string;
5
+ /** The facts of a record in one line: tick, sequence id and what `info` holds */
6
+ export declare function describeRecord(record: NetRecord): string;
7
+ export interface RecordFilter {
8
+ kind: 'all' | 'packet' | 'event';
9
+ /** ping / pong: one pair a second per client */
10
+ pings: boolean;
11
+ /** Part of the message name or the peer, case-insensitive */
12
+ text: string;
13
+ }
14
+ export declare function filterRecords(records: NetRecord[], { kind, pings, text }: RecordFilter): NetRecord[];
@@ -0,0 +1,13 @@
1
+ import type { NetRecord, NetRecordDetail } from '@mavonengine/core/Networking/Debug/NetRecorder';
2
+ /** Whose records are shown: everything the server sent and received, or only this tab's own traffic */
3
+ export type RecordSource = 'server' | 'client';
4
+ /**
5
+ * The newest records of one side, oldest first, kept up to date while not paused
6
+ */
7
+ export declare function useRecords(source: RecordSource, paused: boolean): {
8
+ records: NetRecord[];
9
+ error: string | undefined;
10
+ clear: () => void;
11
+ };
12
+ /** One record with its payload, undefined while it loads or when nothing is selected */
13
+ export declare function useRecordDetail(source: RecordSource, id: number | undefined): NetRecordDetail | null | undefined;
@@ -0,0 +1,22 @@
1
+ /** How often the install is asked about while it runs */
2
+ export declare const INSTALL_POLL_MS = 1000;
3
+ export interface InstallRequest {
4
+ /** What is handed to the package manager: names, name@version, file: paths, URLs */
5
+ packages: string[];
6
+ /** Where the source can be looked at, when the list of plugins says */
7
+ homepage?: string;
8
+ }
9
+ /** Where to look at what `spec` installs: the list's homepage, the URL itself, or its page on npm */
10
+ export declare function sourceOf(spec: string, homepage?: string): string | undefined;
11
+ /**
12
+ * Asks before anything is installed, then shows how the install goes.
13
+ *
14
+ * A package runs its own code on the machine, when it is installed and whenever the game runs, and nothing
15
+ * checks what it does. So the dialog says so, points at the source and only installs once the person
16
+ * has ticked that they looked at it.
17
+ */
18
+ export default function InstallDialog({ request, onClose, fetchFn }: {
19
+ request: InstallRequest;
20
+ onClose(): void;
21
+ fetchFn?: typeof fetch;
22
+ }): import("react").JSX.Element;
@@ -0,0 +1,3 @@
1
+ export default function Markdown({ source }: {
2
+ source: string;
3
+ }): import("react").JSX.Element;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * The plugins in the project's mavonengine.json: what each is, and which HTTP endpoints and prefabs come from it.
3
+ * Plugin details come from the dev server, endpoints from the game server, prefabs from the running editor.
4
+ * Below them, the plugins that can be installed: the public list on GitHub, without the ones the project has.
5
+ */
6
+ export default function PluginsPanel({ fetchFn }: {
7
+ fetchFn?: typeof fetch;
8
+ }): import("react").JSX.Element;
@@ -0,0 +1,9 @@
1
+ /** How often the list is read again while the panel is shown */
2
+ export declare const ROUTES_REFRESH_MS = 5000;
3
+ /**
4
+ * The game server's HTTP endpoints: the engine's, the game's own and those of plugins.
5
+ * Read from the running server, so it shows what the server answers right now.
6
+ */
7
+ export default function ServerPanel({ fetchFn }: {
8
+ fetchFn?: typeof fetch;
9
+ }): import("react").JSX.Element;
package/dist/Editor.css CHANGED
@@ -1,2 +1,2 @@
1
- :root{--bg-primary:#1a1a1a;--bg-secondary:#222;--bg-panel:#2a2a2a;--bg-input:#1e1e1e;--bg-viewport:#111;--bg-header:#1a1a1a;--bg-toolbar:#252525;--bg-hover:#333;--bg-selected:#2c3e50;--bg-active:#3a3a3a;--bg-statusbar:#007acc;--text-primary:#e0e0e0;--text-secondary:#888;--text-muted:#666;--text-label:#aaa;--text-bright:#fff;--border-primary:#333;--border-subtle:#2a2a2a;--border-active:#555;--accent-blue:#007acc;--accent-green:#4ec9b0;--accent-orange:#ce9178;--accent-yellow:#dcdcaa;--accent-red:#f44747;--accent-purple:#c586c0;--icon-default:#aaa;--icon-active:#fff;--icon-accent:#007acc;--font-ui:"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-mono:"Space Mono", "SF Mono", "Fira Code", monospace;--font-size-xs:10px;--font-size-sm:11px;--font-size-md:12px;--font-size-lg:13px;--font-size-xl:14px;--font-size-title:16px;--spacing-xs:2px;--spacing-sm:4px;--spacing-md:8px;--spacing-lg:12px;--spacing-xl:16px;--spacing-2xl:24px;--radius-none:0px;--radius-sm:2px;--radius-md:4px;--radius-lg:6px}html,body,#root,#ui{height:100%;margin:0;overflow:hidden}*{box-sizing:border-box}[data-panel-resize-handle-id]{background-color:var(--border-primary);transition:background-color .15s}[data-panel-resize-handle-id]:hover,[data-panel-resize-handle-id][data-resize-handle-active]{background-color:var(--accent-blue)}._activityBar_4dnwm_1{background-color:var(--bg-header);width:40px;min-width:40px;height:100%;padding:var(--spacing-md) 0;align-items:center;gap:var(--spacing-xs);border-right:1px solid var(--border-primary);flex-direction:column;display:flex}._icon_4dnwm_14{cursor:pointer;border-radius:var(--radius-sm);justify-content:center;align-items:center;width:28px;height:28px;transition:background-color .1s;display:flex}._icon_4dnwm_14:hover{background-color:var(--bg-hover)}._icon_4dnwm_14._active_4dnwm_29{background-color:var(--accent-blue)}._icon_4dnwm_14 svg{width:16px;height:16px}._window_ybolb_1{color:var(--text-primary);font-family:var(--font-ui);font-size:var(--font-size-lg);z-index:1000;background-color:var(--bg-secondary)!important;border:1px solid var(--border-primary)!important;border-radius:var(--radius-md)!important;flex-direction:column!important;display:flex!important;overflow:hidden!important;box-shadow:0 8px 32px #0009!important}._handle_ybolb_15{background-color:var(--bg-header);border-bottom:1px solid var(--border-primary);border-radius:var(--radius-md) var(--radius-md) 0 0;cursor:grab;-webkit-user-select:none;user-select:none;height:28px;min-height:28px;padding:0 var(--spacing-md);justify-content:flex-end;align-items:center;display:flex}._handle_ybolb_15:active{cursor:grabbing}._title_ybolb_33{font-size:var(--font-size-md);color:var(--text-primary);white-space:nowrap;text-overflow:ellipsis;padding:0 var(--spacing-md);-webkit-user-select:none;user-select:none;flex:1;overflow:hidden}._body_ybolb_44{padding:var(--spacing-lg);flex:1;min-height:0;overflow:auto}._close_ybolb_51{color:var(--text-muted);font-size:var(--font-size-xl);cursor:pointer;border-radius:var(--radius-sm);background:0 0;border:none;flex-shrink:0;padding:2px 6px;line-height:1}._close_ybolb_51:hover{color:var(--text-primary);background-color:var(--bg-hover)}._assetsPanel_5ux7f_1{flex-direction:column;flex:1;display:flex;overflow:hidden}._toolbar_5ux7f_8{align-items:center;gap:var(--spacing-md);padding:0 var(--spacing-md);flex-shrink:0;height:24px;display:flex}._searchWrapper_5ux7f_17{flex:1;align-items:center;display:flex;position:relative}._search_5ux7f_17{width:100%;height:20px;padding:0 20px 0 var(--spacing-md);background-color:var(--bg-input);border:1px solid var(--border-primary);border-radius:var(--radius-sm);color:var(--text-primary);font-family:var(--font-ui);font-size:var(--font-size-xs);box-sizing:border-box;outline:none}._search_5ux7f_17::placeholder{color:var(--text-muted)}._search_5ux7f_17:focus{border-color:var(--accent-blue)}._searchClear_5ux7f_46{color:var(--text-muted);cursor:pointer;background:0 0;border:none;align-items:center;padding:0;font-size:10px;line-height:1;display:flex;position:absolute;right:4px}._searchClear_5ux7f_46:hover{color:var(--text-primary)}._categorySelect_5ux7f_64{height:20px;padding:0 var(--spacing-sm);background-color:var(--bg-active);color:var(--text-primary);font-family:var(--font-ui);font-size:var(--font-size-xs);cursor:pointer;border:none;border-radius:9px;outline:none;flex-shrink:0}._categorySelect_5ux7f_64:focus{border-color:var(--accent-blue)}._assets_5ux7f_1{padding:var(--spacing-lg);gap:var(--spacing-lg);flex-wrap:wrap;flex:1;align-content:flex-start;align-items:flex-start;display:flex;overflow:auto}._assetRow_5ux7f_93{align-items:center;gap:var(--spacing-sm);padding:var(--spacing-sm);border-radius:var(--radius-sm);font-family:var(--font-ui);font-size:var(--font-size-xs);color:var(--text-secondary);cursor:grab;word-break:break-word;text-align:center;flex-direction:column;max-width:80px;display:flex}._assetRow_5ux7f_93:hover{background-color:var(--bg-hover)}._assetRow_5ux7f_93 img{object-fit:contain;border-radius:var(--radius-sm);border:1px solid var(--border-primary);background-color:var(--bg-input);width:64px;height:64px}._texturePreview_5ux7f_122{object-fit:contain;border-radius:var(--radius-sm);border:1px solid var(--border-primary);background-image:linear-gradient(45deg,#2a2a2a 25%,#0000 25%),linear-gradient(-45deg,#2a2a2a 25%,#0000 25%),linear-gradient(45deg,#0000 75%,#2a2a2a 75%),linear-gradient(-45deg,#0000 75%,#2a2a2a 75%);background-position:0 0,0 4px,4px -4px,-4px 0;background-size:8px 8px;background-color:var(--bg-input);width:64px;height:64px}._assetIcon_5ux7f_138{border-radius:var(--radius-sm);border:1px solid var(--border-primary);background-color:var(--bg-input);cursor:grab;justify-content:center;align-items:center;width:64px;height:64px;display:flex}._assetIcon_5ux7f_138 svg{width:24px;height:24px;color:var(--text-muted)}._stats_1gd9h_1{gap:var(--spacing-md);border-left:1px solid var(--border-primary);width:90px;padding:0 var(--spacing-lg);flex-direction:column;flex-shrink:0;justify-content:center;display:flex}._stat_1gd9h_1{flex-direction:column;gap:1px;display:flex}._label_1gd9h_18{font-family:var(--font-ui);font-size:var(--font-size-xs);color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em}._value_1gd9h_26{font-family:var(--font-mono);font-size:var(--font-size-md);color:var(--text-primary);font-variant-numeric:tabular-nums}._player_nqeb9_1{flex-direction:row;gap:0;height:100%;display:flex}._main_nqeb9_8{gap:var(--spacing-lg);flex-direction:column;flex:1;min-width:0;display:flex}._waveform_nqeb9_16{flex:1;min-height:0}._controls_nqeb9_21{align-items:center;gap:var(--spacing-md);flex-shrink:0;display:flex}._playButton_nqeb9_28{border:1px solid var(--border-primary);border-radius:var(--radius-sm);color:var(--text-primary);font-size:var(--font-size-xl);cursor:pointer;background:0 0;flex-shrink:0;justify-content:center;align-items:center;width:28px;height:28px;display:flex}._playButton_nqeb9_28:hover{background-color:var(--bg-hover)}._time_nqeb9_47{font-family:var(--font-mono);font-size:var(--font-size-sm);color:var(--text-muted);font-variant-numeric:tabular-nums}._wrapper_65zj4_1{flex-direction:column;width:100%;height:100%;display:flex;position:relative}._canvas_65zj4_9{background-color:var(--bg-viewport);width:100%;height:100%}._toolbar_65zj4_15{height:32px;padding:0 var(--spacing-md);align-items:center;gap:var(--spacing-sm);background-color:var(--bg-toolbar);border-bottom:1px solid var(--border-primary);flex-shrink:0;display:flex}._toolBtn_65zj4_26{border-radius:var(--radius-sm);width:28px;height:28px;color:var(--icon-default);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;padding:0;transition:background-color .1s,color .1s;display:flex}._toolBtn_65zj4_26:hover{background-color:var(--bg-hover);color:var(--icon-active)}._toolBtn_65zj4_26._active_65zj4_46{background-color:var(--accent-blue);color:var(--icon-active)}._separator_65zj4_51{background-color:var(--border-primary);flex-shrink:0;width:1px;height:16px}._toolbarRight_65zj4_58{top:2px;right:var(--spacing-md);gap:var(--spacing-sm);z-index:10;pointer-events:all;align-items:flex-start;display:flex;position:absolute}._overlayDropdown_65zj4_69{background-color:var(--bg-panel);border:1px solid var(--border-primary);border-radius:var(--radius-md);padding:var(--spacing-lg);z-index:20;gap:var(--spacing-sm);min-width:180px;font-family:var(--font-ui);font-size:var(--font-size-lg);flex-direction:column;display:flex;position:absolute;top:calc(100% + 6px);right:0}._overlaySection_65zj4_86{font-size:var(--font-size-sm);color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em;margin-top:6px;margin-bottom:2px}._overlaySection_65zj4_86:first-child{margin-top:0}._overlayRow_65zj4_99{align-items:center;gap:var(--spacing-md);font-size:var(--font-size-lg);color:var(--text-primary);cursor:pointer;-webkit-user-select:none;user-select:none;padding:2px 0;display:flex}._overlayRow_65zj4_99:hover{color:var(--text-bright)}._overlayRow_65zj4_99 input[type=checkbox]{accent-color:var(--accent-blue);cursor:pointer;flex-shrink:0;width:14px;height:14px}._viewer_8mn40_1{flex-direction:row;height:100%;max-height:100%;display:flex;overflow:hidden}._canvasWrapper_8mn40_9{flex:1;min-width:0;min-height:0;position:relative}._toolbar_8mn40_16{top:var(--spacing-md);left:var(--spacing-md);gap:var(--spacing-sm);background-color:var(--bg-panel);border:1px solid var(--border-primary);border-radius:var(--radius-md);padding:var(--spacing-sm);z-index:10;display:flex;position:absolute}._animBar_8mn40_29{bottom:30px;left:var(--spacing-md);z-index:10;align-items:center;gap:var(--spacing-md);background-color:var(--bg-panel);border:1px solid var(--border-primary);border-radius:var(--radius-md);padding:var(--spacing-sm) var(--spacing-md);display:flex;position:absolute}._scrubber_8mn40_43{z-index:10;appearance:none;cursor:pointer;background:0 0;width:100%;height:20px;margin:0;padding:0;position:absolute;bottom:0;left:0}._scrubber_8mn40_43::-webkit-slider-runnable-track{background:var(--bg-panel);border-top:1px solid var(--border-primary);height:4px}._scrubber_8mn40_43::-webkit-slider-thumb{-webkit-appearance:none;background:var(--accent-blue);cursor:pointer;border-radius:50%;width:12px;height:12px;margin-top:-4px}._scrubber_8mn40_43::-moz-range-track{background:var(--bg-panel);border-top:1px solid var(--border-primary);height:4px}._scrubber_8mn40_43::-moz-range-thumb{background:var(--accent-blue);cursor:pointer;border:none;border-radius:50%;width:12px;height:12px}._animSelect_8mn40_89{color:var(--text-primary);font-family:var(--font-ui);font-size:var(--font-size-md);cursor:pointer;background:0 0;border:none;outline:none;max-width:200px}._animSelect_8mn40_89:hover{border-color:var(--border-active)}._animLoopLabel_8mn40_104{color:var(--text-primary);font-family:var(--font-ui);font-size:var(--font-size-md);cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap;align-items:center;gap:5px;display:flex}._viewer_76hio_1{flex-direction:row;height:100%;max-height:100%;display:flex;overflow:hidden}._imageWrapper_76hio_9{background-image:linear-gradient(45deg,#2a2a2a 25%,#0000 25%),linear-gradient(-45deg,#2a2a2a 25%,#0000 25%),linear-gradient(45deg,#0000 75%,#2a2a2a 75%),linear-gradient(-45deg,#0000 75%,#2a2a2a 75%);background-position:0 0,0 8px,8px -8px,-8px 0;background-size:16px 16px;background-color:var(--bg-input);flex:1;min-width:0;min-height:0;position:relative;overflow:hidden}._zoomInner_76hio_25{transform-origin:0 0;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}._image_76hio_9{object-fit:contain;-webkit-user-select:none;user-select:none;pointer-events:none;max-width:100%;max-height:100%}._zoomReset_76hio_42{bottom:var(--spacing-md);right:var(--spacing-md);background:var(--bg-panel);border:1px solid var(--border-primary);border-radius:var(--radius-sm);color:var(--text-primary);font-size:var(--font-size-sm);font-family:var(--font-mono);cursor:pointer;z-index:10;-webkit-user-select:none;user-select:none;padding:2px 6px;position:absolute}._zoomReset_76hio_42:hover{background:var(--bg-hover)}._cubeCross_76hio_62{width:100%;height:100%;padding:var(--spacing-md);box-sizing:border-box;-webkit-user-select:none;user-select:none;pointer-events:none;grid-template-rows:repeat(3,1fr);grid-template-columns:repeat(4,1fr);gap:2px;display:grid}._cubeFace_76hio_75{background-image:linear-gradient(45deg,#2a2a2a 25%,#0000 25%),linear-gradient(-45deg,#2a2a2a 25%,#0000 25%),linear-gradient(45deg,#0000 75%,#2a2a2a 75%),linear-gradient(-45deg,#0000 75%,#2a2a2a 75%);background-position:0 0,0 8px,8px -8px,-8px 0;background-size:16px 16px;background-color:var(--bg-input);position:relative;overflow:hidden}._cubeFace_76hio_75 img{object-fit:contain;width:100%;height:100%;display:block}._faceLabel_76hio_95{font-size:9px;font-family:var(--font-mono);color:#ffffffa6;pointer-events:none;text-shadow:0 1px 2px #000c;position:absolute;bottom:3px;left:4px}._cubeEmpty_76hio_106{background:0 0}._noPreview_76hio_110{color:var(--text-muted);font-size:var(--font-size-md);font-family:var(--font-ui);-webkit-user-select:none;user-select:none}._tabs_19fdz_1{background-color:var(--bg-header);scrollbar-width:none;align-items:stretch;height:28px;min-height:28px;display:flex;overflow-x:auto}._tab_19fdz_1{padding:0 var(--spacing-md);font-family:var(--font-ui);font-size:var(--font-size-xs);letter-spacing:2px;text-transform:uppercase;color:var(--text-muted);cursor:pointer;white-space:nowrap;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-top:1px solid #0000;align-items:center;font-weight:600;display:flex}._tab_19fdz_1:hover{color:var(--text-secondary)}._active_19fdz_33{color:var(--text-bright);background-color:var(--bg-secondary);border-top-color:var(--accent-blue)}._unpadded_19fdz_39{flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}._mounted_19fdz_47{height:100%}._error_19fdz_51{gap:var(--spacing-md);color:var(--accent-red);font-size:var(--font-size-md);flex-direction:column;display:flex}._error_19fdz_51 button{align-self:flex-start}._root_ngf3k_1{background-color:var(--bg-primary);flex-direction:column;height:100%;display:flex}._main_ngf3k_8{flex:1;display:flex;overflow:hidden}._editor_ngf3k_14{background-color:var(--bg-primary);flex:1;height:100%}._panel_ngf3k_20{font-family:var(--font-ui);font-size:var(--font-size-lg);color:var(--text-primary);background-color:var(--bg-secondary)}._panelContent_ngf3k_27{flex-direction:column;height:100%;display:flex;overflow:hidden}._panelBody_ngf3k_34{padding:var(--spacing-md);flex:1;overflow:auto}._middleGroup_ngf3k_40{flex:1}._panelHeader_25fch_1{height:28px;min-height:28px;padding:0 var(--spacing-md);background-color:var(--bg-header);font-family:var(--font-ui);font-size:var(--font-size-xs);letter-spacing:2px;text-transform:uppercase;color:var(--text-secondary);-webkit-user-select:none;user-select:none;align-items:center;font-weight:600;display:flex}._container_1jjbp_1{flex-direction:column;gap:4px;display:flex}._nameRow_1jjbp_8{background-color:var(--bg-panel);border-bottom:1px solid var(--border-primary);align-items:center;gap:8px;height:32px;padding:0 12px;display:flex}._nameIcon_1jjbp_18{flex-shrink:0;width:16px;height:16px}._nameText_1jjbp_24{font-family:var(--font-ui);font-size:var(--font-size-xl);color:var(--text-bright);font-weight:600}._sectionHeader_1jjbp_32{cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:4px;height:24px;padding:0 8px;display:flex}._sectionHeader_1jjbp_32:hover{background-color:var(--bg-hover)}._sectionArrow_1jjbp_46{width:10px;height:10px;color:var(--text-secondary);flex-shrink:0;transition:transform .1s}._sectionArrow_1jjbp_46._collapsed_1jjbp_54{transform:rotate(-90deg)}._sectionTitle_1jjbp_58{font-family:var(--font-ui);font-size:var(--font-size-sm);color:var(--text-primary);font-weight:600}._divider_1jjbp_66{background-color:var(--border-primary);height:1px;margin:0}._propertyRow3_1jjbp_73{align-items:center;gap:8px;height:24px;padding:0 8px;display:flex}._propertyLabel_1jjbp_81{font-family:var(--font-ui);font-size:var(--font-size-sm);color:var(--text-secondary);flex-shrink:0;width:60px}._valueInput_1jjbp_89{background-color:var(--bg-input);border:1px solid var(--border-primary);border-radius:var(--radius-sm);width:52px;height:20px;font-family:var(--font-mono);font-size:var(--font-size-sm);color:var(--text-primary);box-sizing:border-box;outline:none;padding:0 6px}._valueInput_1jjbp_89:focus{border-color:var(--accent-blue)}._checkboxRow_1jjbp_108{align-items:center;gap:6px;height:24px;padding:0 8px;display:flex}._checkbox_1jjbp_108{width:14px;height:14px;accent-color:var(--accent-blue);cursor:pointer;flex-shrink:0}._checkboxLabel_1jjbp_124{font-family:var(--font-ui);font-size:var(--font-size-sm);color:var(--text-secondary);cursor:pointer}._propertyRow_1jjbp_73{align-items:center;gap:8px;height:24px;padding:0 8px;display:flex}._propertyLabelWide_1jjbp_140{font-family:var(--font-ui);font-size:var(--font-size-sm);color:var(--text-secondary);flex-shrink:0;width:80px}._valueDisplay_1jjbp_148{background-color:var(--bg-input);border:1px solid var(--border-primary);border-radius:var(--radius-sm);height:20px;font-family:var(--font-mono);font-size:var(--font-size-sm);color:var(--text-primary);text-overflow:ellipsis;white-space:nowrap;align-items:center;min-width:60px;padding:0 6px;display:flex;overflow:hidden}._valueInputWide_1jjbp_165{background-color:var(--bg-input);border:1px solid var(--border-primary);border-radius:var(--radius-sm);height:20px;font-family:var(--font-mono);font-size:var(--font-size-sm);color:var(--text-primary);box-sizing:border-box;outline:none;flex:1;padding:0 6px}._valueInputWide_1jjbp_165:focus{border-color:var(--accent-blue)}._sliderRow_1jjbp_184{align-items:center;gap:8px;height:24px;padding:0 8px;display:flex}._sliderTrack_1jjbp_192{background-color:var(--bg-input);border:1px solid var(--border-primary);cursor:pointer;border-radius:2px;flex:1;height:4px;position:relative}._sliderFill_1jjbp_202{background-color:var(--accent-blue);pointer-events:none;border-radius:2px;height:100%;position:absolute;top:0;left:0}._sliderThumb_1jjbp_212{background-color:var(--text-bright);pointer-events:none;border-radius:50%;width:10px;height:10px;position:absolute;top:50%;transform:translate(-50%,-50%);box-shadow:0 1px 3px #0006}._sliderInput_1jjbp_224{background-color:var(--bg-input);border:1px solid var(--border-primary);border-radius:var(--radius-sm);width:48px;height:20px;font-family:var(--font-mono);font-size:var(--font-size-sm);color:var(--text-primary);box-sizing:border-box;text-align:right;outline:none;padding:0 4px}._sliderInput_1jjbp_224:focus{border-color:var(--accent-blue)}._draggableInput_1jjbp_244{background-color:var(--bg-input);border:1px solid var(--border-primary);border-radius:var(--radius-sm);width:52px;height:20px;font-family:var(--font-mono);font-size:var(--font-size-sm);color:var(--text-primary);box-sizing:border-box;cursor:ew-resize;outline:none;padding:0 6px}._draggableInput_1jjbp_244:focus{border-color:var(--accent-blue);cursor:text}._empty_1jjbp_265{color:var(--text-muted);font-family:var(--font-ui);font-size:var(--font-size-md);padding:16px 8px;font-style:italic}._colorInput_1jjbp_274{border:1px solid var(--border-primary);border-radius:var(--radius-sm);background-color:var(--bg-input);cursor:pointer;box-sizing:border-box;width:32px;height:20px;padding:1px 2px}._prefabSection_1jjbp_286{flex-direction:column;gap:4px;display:flex}._container_7ns3c_1{font-family:var(--font-ui);font-size:var(--font-size-md);-webkit-user-select:none;user-select:none;padding:var(--spacing-sm) 0}._row_7ns3c_8{cursor:pointer;align-items:center;gap:var(--spacing-sm);border-radius:var(--radius-sm);height:24px;padding-right:var(--spacing-md);display:flex}._row_7ns3c_8:hover{background-color:var(--bg-hover)}._selected_7ns3c_22,._selected_7ns3c_22:hover{background-color:var(--bg-selected)}._arrow_7ns3c_30{width:12px;color:var(--text-secondary);cursor:pointer;text-align:center;flex-shrink:0;font-size:10px}._typeIcon_7ns3c_39{flex-shrink:0;justify-content:center;align-items:center;width:14px;height:14px;display:flex}._typeIcon_7ns3c_39 svg{width:14px;height:14px}._name_7ns3c_53{color:var(--text-primary);text-overflow:ellipsis;white-space:nowrap;font-size:var(--font-size-md);overflow:hidden}._empty_7ns3c_61{padding:var(--spacing-md);color:var(--text-muted);font-style:italic;font-family:var(--font-ui);font-size:var(--font-size-md)}._runtime_7ns3c_69{color:var(--text-muted);font-style:italic}._container_z6ti4_1{font-family:var(--font-ui);font-size:var(--font-size-md);-webkit-user-select:none;user-select:none}._empty_z6ti4_7,._hint_z6ti4_8{color:var(--text-muted);font-size:var(--font-size-sm);padding:var(--spacing-sm) var(--spacing-md)}._header_z6ti4_14{justify-content:space-between;align-items:center;gap:var(--spacing-md);padding-bottom:var(--spacing-md);border-bottom:1px solid var(--border-subtle);display:flex}._title_z6ti4_23{align-items:baseline;gap:var(--spacing-sm);flex-wrap:wrap;min-width:0;display:flex}._sceneName_z6ti4_31{color:var(--text-bright);font-weight:600}._dirty_z6ti4_36{color:var(--accent-orange);font-size:10px}._file_z6ti4_41{color:var(--text-muted);font-family:var(--font-mono);font-size:var(--font-size-xs)}._saveButton_z6ti4_47,._removeButton_z6ti4_48{background-color:var(--bg-input);color:var(--text-primary);border:1px solid var(--border-primary);border-radius:var(--radius-sm);padding:2px var(--spacing-md);font-family:var(--font-ui);font-size:var(--font-size-sm);cursor:pointer}._saveButton_z6ti4_47:hover:not(:disabled),._removeButton_z6ti4_48:hover{border-color:var(--accent-blue);color:var(--text-bright)}._saveButton_z6ti4_47:disabled{opacity:.6;cursor:default}._removeButton_z6ti4_48{margin-top:var(--spacing-sm);align-self:flex-start}._error_z6ti4_75{color:var(--accent-red);font-size:var(--font-size-sm);padding:var(--spacing-sm) 0}._section_z6ti4_81{color:var(--text-secondary);font-size:var(--font-size-xs);letter-spacing:1px;text-transform:uppercase;padding:var(--spacing-lg) 0 var(--spacing-sm);font-weight:600}._clickable_z6ti4_90{cursor:pointer}._row_z6ti4_94{align-items:center;gap:var(--spacing-sm);height:24px;padding:0 var(--spacing-sm);border-radius:var(--radius-sm);cursor:pointer;display:flex}._row_z6ti4_94:hover{background-color:var(--bg-hover)}._selected_z6ti4_108,._selected_z6ti4_108:hover{background-color:var(--bg-selected)}._liveRow_z6ti4_113 ._name_z6ti4_113{color:var(--text-secondary)}._arrow_z6ti4_117{width:12px;color:var(--text-secondary);text-align:center;flex-shrink:0;font-size:10px}._liveDot_z6ti4_125{background-color:var(--accent-green);border-radius:50%;flex-shrink:0;width:6px;height:6px;margin:0 3px}._name_z6ti4_113{color:var(--text-primary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}._type_z6ti4_141{color:var(--text-muted);font-size:var(--font-size-xs);white-space:nowrap;text-overflow:ellipsis;margin-left:auto;overflow:hidden}._badge_z6ti4_150{color:var(--accent-purple);border:1px solid var(--accent-purple);border-radius:var(--radius-sm);text-transform:uppercase;flex-shrink:0;padding:0 3px;font-size:9px}._details_z6ti4_160{gap:var(--spacing-sm);padding:var(--spacing-sm) var(--spacing-md) var(--spacing-md) 28px;-webkit-user-select:text;user-select:text;flex-direction:column;display:flex}._field_z6ti4_168{align-items:center;gap:var(--spacing-md);font-size:var(--font-size-sm);display:flex}._field_z6ti4_168>span{width:80px;color:var(--text-label);flex-shrink:0}._field_z6ti4_168 code{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}._field_z6ti4_168 input:not([type=checkbox]):not([type=color]){background-color:var(--bg-input);min-width:0;color:var(--text-primary);border:1px solid var(--border-primary);border-radius:var(--radius-sm);padding:2px var(--spacing-sm);font-family:var(--font-mono);font-size:var(--font-size-xs);flex:1}._field_z6ti4_168 input[type=color]{background:0 0;border:none;width:28px;height:18px;padding:0}._root_t4wh3_1{gap:var(--spacing-lg);font-size:var(--font-size-md);flex-direction:column;display:flex}._empty_t4wh3_8{color:var(--text-secondary);text-align:center;padding:var(--spacing-2xl) var(--spacing-lg);line-height:1.5}._card_t4wh3_15{gap:var(--spacing-md);padding-bottom:var(--spacing-lg);border-bottom:1px solid var(--border-primary);flex-direction:column;display:flex}._cardHeader_t4wh3_23{align-items:center;gap:var(--spacing-md);min-width:0;display:flex}._badge_t4wh3_30{font-size:var(--font-size-xs);text-transform:uppercase;letter-spacing:.04em;background-color:var(--accent-blue);color:var(--text-bright);border-radius:var(--radius-sm);flex-shrink:0;padding:1px 6px}._gamepadId_t4wh3_41{white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0;overflow:hidden}._meta_t4wh3_49{color:var(--text-muted);font-family:var(--font-mono);flex-shrink:0}._button_t4wh3_55{background-color:var(--bg-active);border:1px solid var(--border-active);color:var(--text-primary);border-radius:var(--radius-sm);font-family:var(--font-ui);font-size:var(--font-size-sm);padding:2px var(--spacing-md);cursor:pointer;flex-shrink:0}._button_t4wh3_55:hover{background-color:var(--bg-hover)}._warning_t4wh3_71{color:var(--accent-yellow);font-size:var(--font-size-sm)}._diagram_t4wh3_76{align-self:center;width:100%;max-width:360px}._body_t4wh3_82{fill:var(--bg-panel);stroke:var(--border-primary)}._part_t4wh3_87{fill:var(--bg-hover);stroke:var(--border-active);stroke-width:1px}._pressed_t4wh3_93{fill:var(--accent-blue);stroke:var(--text-bright)}._fill_t4wh3_98{fill:var(--text-muted)}._fillPressed_t4wh3_102{fill:var(--accent-blue)}._deadzone_t4wh3_106{fill:none;stroke:var(--accent-orange);stroke-dasharray:2 2}._rawDot_t4wh3_112{fill:var(--text-secondary)}._stickDot_t4wh3_116{fill:var(--accent-green)}._tinyLabel_t4wh3_120,._faceLabel_t4wh3_121{fill:var(--text-primary);font-family:var(--font-ui);text-anchor:middle;pointer-events:none}._tinyLabel_t4wh3_120{font-size:7px}._faceLabel_t4wh3_121{font-size:8px;font-weight:600}._sticks_t4wh3_137{font-family:var(--font-mono);color:var(--text-label);justify-content:space-around;display:flex}._sectionTitle_t4wh3_144{font-size:var(--font-size-xs);color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em}._rows_t4wh3_151{gap:var(--spacing-xs);flex-direction:column;display:flex}._row_t4wh3_151{align-items:center;gap:var(--spacing-md);color:var(--text-label);grid-template-columns:110px 1fr 48px;display:grid}._rowPressed_t4wh3_165{color:var(--text-bright)}._rowLabel_t4wh3_169{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}._rowValue_t4wh3_175{font-family:var(--font-mono);text-align:right;font-variant-numeric:tabular-nums}._bar_t4wh3_181{background-color:var(--bg-input);border-radius:var(--radius-sm);height:6px;position:relative;overflow:hidden}._barCenter_t4wh3_189{background-color:var(--border-active);width:1px;position:absolute;top:0;bottom:0;left:50%}._barFill_t4wh3_198{background-color:var(--accent-blue);position:absolute;top:0;bottom:0}._log_t4wh3_205{font-family:var(--font-mono);font-size:var(--font-size-sm);gap:var(--spacing-xs);color:var(--text-label);flex-direction:column;display:flex}._logEmpty_t4wh3_214{color:var(--text-muted)}._logEntry_t4wh3_218{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}._logTime_t4wh3_224{color:var(--text-muted);margin-right:var(--spacing-md)}._statusBar_6wjbc_1{background-color:var(--bg-statusbar);height:22px;min-height:22px;padding:0 var(--spacing-md);font-size:var(--font-size-xs);color:var(--text-bright);justify-content:space-between;align-items:center;display:flex}._section_6wjbc_13{gap:var(--spacing-xl);align-items:center;display:flex}._stat_6wjbc_1{gap:var(--spacing-sm);font-family:var(--font-mono);display:flex}._statLabel_6wjbc_25{opacity:.7;font-family:var(--font-mono)}._branch_6wjbc_30{font-family:var(--font-ui);font-weight:500}._engineName_6wjbc_35{font-family:var(--font-ui);font-weight:600}._statButton_6wjbc_40{color:inherit;font-size:inherit;padding:0 var(--spacing-sm);border-radius:var(--radius-sm);cursor:pointer;background:0 0;border:none;align-items:center;height:18px}._statButton_6wjbc_40:hover{background-color:#ffffff26}
1
+ :root{--bg-primary:#1a1a1a;--bg-secondary:#222;--bg-panel:#2a2a2a;--bg-input:#1e1e1e;--bg-viewport:#111;--bg-header:#1a1a1a;--bg-toolbar:#252525;--bg-hover:#333;--bg-selected:#2c3e50;--bg-active:#3a3a3a;--bg-statusbar:#007acc;--text-primary:#e0e0e0;--text-secondary:#888;--text-muted:#666;--text-label:#aaa;--text-bright:#fff;--border-primary:#333;--border-subtle:#2a2a2a;--border-active:#555;--accent-blue:#007acc;--accent-green:#4ec9b0;--accent-orange:#ce9178;--accent-yellow:#dcdcaa;--accent-red:#f44747;--accent-purple:#c586c0;--icon-default:#aaa;--icon-active:#fff;--icon-accent:#007acc;--font-ui:"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-mono:"Space Mono", "SF Mono", "Fira Code", monospace;--font-size-xs:10px;--font-size-sm:11px;--font-size-md:12px;--font-size-lg:13px;--font-size-xl:14px;--font-size-title:16px;--spacing-xs:2px;--spacing-sm:4px;--spacing-md:8px;--spacing-lg:12px;--spacing-xl:16px;--spacing-2xl:24px;--radius-none:0px;--radius-sm:2px;--radius-md:4px;--radius-lg:6px}html,body,#root,#ui{height:100%;margin:0;overflow:hidden}*{box-sizing:border-box}[data-panel-resize-handle-id]{background-color:var(--border-primary);transition:background-color .15s}[data-panel-resize-handle-id]:hover,[data-panel-resize-handle-id][data-resize-handle-active]{background-color:var(--accent-blue)}._activityBar_4dnwm_1{background-color:var(--bg-header);width:40px;min-width:40px;height:100%;padding:var(--spacing-md) 0;align-items:center;gap:var(--spacing-xs);border-right:1px solid var(--border-primary);flex-direction:column;display:flex}._icon_4dnwm_14{cursor:pointer;border-radius:var(--radius-sm);justify-content:center;align-items:center;width:28px;height:28px;transition:background-color .1s;display:flex}._icon_4dnwm_14:hover{background-color:var(--bg-hover)}._icon_4dnwm_14._active_4dnwm_29{background-color:var(--accent-blue)}._icon_4dnwm_14 svg{width:16px;height:16px}._window_ybolb_1{color:var(--text-primary);font-family:var(--font-ui);font-size:var(--font-size-lg);z-index:1000;background-color:var(--bg-secondary)!important;border:1px solid var(--border-primary)!important;border-radius:var(--radius-md)!important;flex-direction:column!important;display:flex!important;overflow:hidden!important;box-shadow:0 8px 32px #0009!important}._handle_ybolb_15{background-color:var(--bg-header);border-bottom:1px solid var(--border-primary);border-radius:var(--radius-md) var(--radius-md) 0 0;cursor:grab;-webkit-user-select:none;user-select:none;height:28px;min-height:28px;padding:0 var(--spacing-md);justify-content:flex-end;align-items:center;display:flex}._handle_ybolb_15:active{cursor:grabbing}._title_ybolb_33{font-size:var(--font-size-md);color:var(--text-primary);white-space:nowrap;text-overflow:ellipsis;padding:0 var(--spacing-md);-webkit-user-select:none;user-select:none;flex:1;overflow:hidden}._body_ybolb_44{padding:var(--spacing-lg);flex:1;min-height:0;overflow:auto}._close_ybolb_51{color:var(--text-muted);font-size:var(--font-size-xl);cursor:pointer;border-radius:var(--radius-sm);background:0 0;border:none;flex-shrink:0;padding:2px 6px;line-height:1}._close_ybolb_51:hover{color:var(--text-primary);background-color:var(--bg-hover)}._assetsPanel_5ux7f_1{flex-direction:column;flex:1;display:flex;overflow:hidden}._toolbar_5ux7f_8{align-items:center;gap:var(--spacing-md);padding:0 var(--spacing-md);flex-shrink:0;height:24px;display:flex}._searchWrapper_5ux7f_17{flex:1;align-items:center;display:flex;position:relative}._search_5ux7f_17{width:100%;height:20px;padding:0 20px 0 var(--spacing-md);background-color:var(--bg-input);border:1px solid var(--border-primary);border-radius:var(--radius-sm);color:var(--text-primary);font-family:var(--font-ui);font-size:var(--font-size-xs);box-sizing:border-box;outline:none}._search_5ux7f_17::placeholder{color:var(--text-muted)}._search_5ux7f_17:focus{border-color:var(--accent-blue)}._searchClear_5ux7f_46{color:var(--text-muted);cursor:pointer;background:0 0;border:none;align-items:center;padding:0;font-size:10px;line-height:1;display:flex;position:absolute;right:4px}._searchClear_5ux7f_46:hover{color:var(--text-primary)}._categorySelect_5ux7f_64{height:20px;padding:0 var(--spacing-sm);background-color:var(--bg-active);color:var(--text-primary);font-family:var(--font-ui);font-size:var(--font-size-xs);cursor:pointer;border:none;border-radius:9px;outline:none;flex-shrink:0}._categorySelect_5ux7f_64:focus{border-color:var(--accent-blue)}._assets_5ux7f_1{padding:var(--spacing-lg);gap:var(--spacing-lg);flex-wrap:wrap;flex:1;align-content:flex-start;align-items:flex-start;display:flex;overflow:auto}._assetRow_5ux7f_93{align-items:center;gap:var(--spacing-sm);padding:var(--spacing-sm);border-radius:var(--radius-sm);font-family:var(--font-ui);font-size:var(--font-size-xs);color:var(--text-secondary);cursor:grab;word-break:break-word;text-align:center;flex-direction:column;max-width:80px;display:flex}._assetRow_5ux7f_93:hover{background-color:var(--bg-hover)}._assetRow_5ux7f_93 img{object-fit:contain;border-radius:var(--radius-sm);border:1px solid var(--border-primary);background-color:var(--bg-input);width:64px;height:64px}._texturePreview_5ux7f_122{object-fit:contain;border-radius:var(--radius-sm);border:1px solid var(--border-primary);background-image:linear-gradient(45deg,#2a2a2a 25%,#0000 25%),linear-gradient(-45deg,#2a2a2a 25%,#0000 25%),linear-gradient(45deg,#0000 75%,#2a2a2a 75%),linear-gradient(-45deg,#0000 75%,#2a2a2a 75%);background-position:0 0,0 4px,4px -4px,-4px 0;background-size:8px 8px;background-color:var(--bg-input);width:64px;height:64px}._assetIcon_5ux7f_138{border-radius:var(--radius-sm);border:1px solid var(--border-primary);background-color:var(--bg-input);cursor:grab;justify-content:center;align-items:center;width:64px;height:64px;display:flex}._assetIcon_5ux7f_138 svg{width:24px;height:24px;color:var(--text-muted)}._stats_1gd9h_1{gap:var(--spacing-md);border-left:1px solid var(--border-primary);width:90px;padding:0 var(--spacing-lg);flex-direction:column;flex-shrink:0;justify-content:center;display:flex}._stat_1gd9h_1{flex-direction:column;gap:1px;display:flex}._label_1gd9h_18{font-family:var(--font-ui);font-size:var(--font-size-xs);color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em}._value_1gd9h_26{font-family:var(--font-mono);font-size:var(--font-size-md);color:var(--text-primary);font-variant-numeric:tabular-nums}._player_nqeb9_1{flex-direction:row;gap:0;height:100%;display:flex}._main_nqeb9_8{gap:var(--spacing-lg);flex-direction:column;flex:1;min-width:0;display:flex}._waveform_nqeb9_16{flex:1;min-height:0}._controls_nqeb9_21{align-items:center;gap:var(--spacing-md);flex-shrink:0;display:flex}._playButton_nqeb9_28{border:1px solid var(--border-primary);border-radius:var(--radius-sm);color:var(--text-primary);font-size:var(--font-size-xl);cursor:pointer;background:0 0;flex-shrink:0;justify-content:center;align-items:center;width:28px;height:28px;display:flex}._playButton_nqeb9_28:hover{background-color:var(--bg-hover)}._time_nqeb9_47{font-family:var(--font-mono);font-size:var(--font-size-sm);color:var(--text-muted);font-variant-numeric:tabular-nums}._wrapper_65zj4_1{flex-direction:column;width:100%;height:100%;display:flex;position:relative}._canvas_65zj4_9{background-color:var(--bg-viewport);width:100%;height:100%}._toolbar_65zj4_15{height:32px;padding:0 var(--spacing-md);align-items:center;gap:var(--spacing-sm);background-color:var(--bg-toolbar);border-bottom:1px solid var(--border-primary);flex-shrink:0;display:flex}._toolBtn_65zj4_26{border-radius:var(--radius-sm);width:28px;height:28px;color:var(--icon-default);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;padding:0;transition:background-color .1s,color .1s;display:flex}._toolBtn_65zj4_26:hover{background-color:var(--bg-hover);color:var(--icon-active)}._toolBtn_65zj4_26._active_65zj4_46{background-color:var(--accent-blue);color:var(--icon-active)}._separator_65zj4_51{background-color:var(--border-primary);flex-shrink:0;width:1px;height:16px}._toolbarRight_65zj4_58{top:2px;right:var(--spacing-md);gap:var(--spacing-sm);z-index:10;pointer-events:all;align-items:flex-start;display:flex;position:absolute}._overlayDropdown_65zj4_69{background-color:var(--bg-panel);border:1px solid var(--border-primary);border-radius:var(--radius-md);padding:var(--spacing-lg);z-index:20;gap:var(--spacing-sm);min-width:180px;font-family:var(--font-ui);font-size:var(--font-size-lg);flex-direction:column;display:flex;position:absolute;top:calc(100% + 6px);right:0}._overlaySection_65zj4_86{font-size:var(--font-size-sm);color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em;margin-top:6px;margin-bottom:2px}._overlaySection_65zj4_86:first-child{margin-top:0}._overlayRow_65zj4_99{align-items:center;gap:var(--spacing-md);font-size:var(--font-size-lg);color:var(--text-primary);cursor:pointer;-webkit-user-select:none;user-select:none;padding:2px 0;display:flex}._overlayRow_65zj4_99:hover{color:var(--text-bright)}._overlayRow_65zj4_99 input[type=checkbox]{accent-color:var(--accent-blue);cursor:pointer;flex-shrink:0;width:14px;height:14px}._viewer_8mn40_1{flex-direction:row;height:100%;max-height:100%;display:flex;overflow:hidden}._canvasWrapper_8mn40_9{flex:1;min-width:0;min-height:0;position:relative}._toolbar_8mn40_16{top:var(--spacing-md);left:var(--spacing-md);gap:var(--spacing-sm);background-color:var(--bg-panel);border:1px solid var(--border-primary);border-radius:var(--radius-md);padding:var(--spacing-sm);z-index:10;display:flex;position:absolute}._animBar_8mn40_29{bottom:30px;left:var(--spacing-md);z-index:10;align-items:center;gap:var(--spacing-md);background-color:var(--bg-panel);border:1px solid var(--border-primary);border-radius:var(--radius-md);padding:var(--spacing-sm) var(--spacing-md);display:flex;position:absolute}._scrubber_8mn40_43{z-index:10;appearance:none;cursor:pointer;background:0 0;width:100%;height:20px;margin:0;padding:0;position:absolute;bottom:0;left:0}._scrubber_8mn40_43::-webkit-slider-runnable-track{background:var(--bg-panel);border-top:1px solid var(--border-primary);height:4px}._scrubber_8mn40_43::-webkit-slider-thumb{-webkit-appearance:none;background:var(--accent-blue);cursor:pointer;border-radius:50%;width:12px;height:12px;margin-top:-4px}._scrubber_8mn40_43::-moz-range-track{background:var(--bg-panel);border-top:1px solid var(--border-primary);height:4px}._scrubber_8mn40_43::-moz-range-thumb{background:var(--accent-blue);cursor:pointer;border:none;border-radius:50%;width:12px;height:12px}._animSelect_8mn40_89{color:var(--text-primary);font-family:var(--font-ui);font-size:var(--font-size-md);cursor:pointer;background:0 0;border:none;outline:none;max-width:200px}._animSelect_8mn40_89:hover{border-color:var(--border-active)}._animLoopLabel_8mn40_104{color:var(--text-primary);font-family:var(--font-ui);font-size:var(--font-size-md);cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap;align-items:center;gap:5px;display:flex}._viewer_76hio_1{flex-direction:row;height:100%;max-height:100%;display:flex;overflow:hidden}._imageWrapper_76hio_9{background-image:linear-gradient(45deg,#2a2a2a 25%,#0000 25%),linear-gradient(-45deg,#2a2a2a 25%,#0000 25%),linear-gradient(45deg,#0000 75%,#2a2a2a 75%),linear-gradient(-45deg,#0000 75%,#2a2a2a 75%);background-position:0 0,0 8px,8px -8px,-8px 0;background-size:16px 16px;background-color:var(--bg-input);flex:1;min-width:0;min-height:0;position:relative;overflow:hidden}._zoomInner_76hio_25{transform-origin:0 0;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}._image_76hio_9{object-fit:contain;-webkit-user-select:none;user-select:none;pointer-events:none;max-width:100%;max-height:100%}._zoomReset_76hio_42{bottom:var(--spacing-md);right:var(--spacing-md);background:var(--bg-panel);border:1px solid var(--border-primary);border-radius:var(--radius-sm);color:var(--text-primary);font-size:var(--font-size-sm);font-family:var(--font-mono);cursor:pointer;z-index:10;-webkit-user-select:none;user-select:none;padding:2px 6px;position:absolute}._zoomReset_76hio_42:hover{background:var(--bg-hover)}._cubeCross_76hio_62{width:100%;height:100%;padding:var(--spacing-md);box-sizing:border-box;-webkit-user-select:none;user-select:none;pointer-events:none;grid-template-rows:repeat(3,1fr);grid-template-columns:repeat(4,1fr);gap:2px;display:grid}._cubeFace_76hio_75{background-image:linear-gradient(45deg,#2a2a2a 25%,#0000 25%),linear-gradient(-45deg,#2a2a2a 25%,#0000 25%),linear-gradient(45deg,#0000 75%,#2a2a2a 75%),linear-gradient(-45deg,#0000 75%,#2a2a2a 75%);background-position:0 0,0 8px,8px -8px,-8px 0;background-size:16px 16px;background-color:var(--bg-input);position:relative;overflow:hidden}._cubeFace_76hio_75 img{object-fit:contain;width:100%;height:100%;display:block}._faceLabel_76hio_95{font-size:9px;font-family:var(--font-mono);color:#ffffffa6;pointer-events:none;text-shadow:0 1px 2px #000c;position:absolute;bottom:3px;left:4px}._cubeEmpty_76hio_106{background:0 0}._noPreview_76hio_110{color:var(--text-muted);font-size:var(--font-size-md);font-family:var(--font-ui);-webkit-user-select:none;user-select:none}._tabs_19fdz_1{background-color:var(--bg-header);scrollbar-width:none;align-items:stretch;height:28px;min-height:28px;display:flex;overflow-x:auto}._tab_19fdz_1{padding:0 var(--spacing-md);font-family:var(--font-ui);font-size:var(--font-size-xs);letter-spacing:2px;text-transform:uppercase;color:var(--text-muted);cursor:pointer;white-space:nowrap;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-top:1px solid #0000;align-items:center;font-weight:600;display:flex}._tab_19fdz_1:hover{color:var(--text-secondary)}._active_19fdz_33{color:var(--text-bright);background-color:var(--bg-secondary);border-top-color:var(--accent-blue)}._unpadded_19fdz_39{flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}._mounted_19fdz_47{height:100%}._error_19fdz_51{gap:var(--spacing-md);color:var(--accent-red);font-size:var(--font-size-md);flex-direction:column;display:flex}._error_19fdz_51 button{align-self:flex-start}._root_11p0k_1{background-color:var(--bg-primary);flex-direction:column;height:100%;display:flex}._main_11p0k_8{flex:1;display:flex;overflow:hidden}._workspace_11p0k_14{flex:1;min-width:0;display:flex;position:relative}._fullView_11p0k_22{z-index:10;position:absolute;inset:0}._editor_11p0k_28{background-color:var(--bg-primary);flex:1;height:100%}._panel_11p0k_34{font-family:var(--font-ui);font-size:var(--font-size-lg);color:var(--text-primary);background-color:var(--bg-secondary)}._panelContent_11p0k_41{flex-direction:column;height:100%;display:flex;overflow:hidden}._panelBody_11p0k_48{padding:var(--spacing-md);flex:1;overflow:auto}._middleGroup_11p0k_54{flex:1}._panelHeader_25fch_1{height:28px;min-height:28px;padding:0 var(--spacing-md);background-color:var(--bg-header);font-family:var(--font-ui);font-size:var(--font-size-xs);letter-spacing:2px;text-transform:uppercase;color:var(--text-secondary);-webkit-user-select:none;user-select:none;align-items:center;font-weight:600;display:flex}._root_14mvj_1{gap:var(--spacing-md);font-family:var(--font-ui);font-size:var(--font-size-md);color:var(--text-primary);flex-direction:column;display:flex}._toolbar_14mvj_10{justify-content:space-between;align-items:center;gap:var(--spacing-md);display:flex}._title_14mvj_17{color:var(--text-label)}._refresh_14mvj_21{border:1px solid var(--border-primary);border-radius:var(--radius-sm);background-color:var(--bg-panel);color:var(--text-primary);font-family:var(--font-ui);font-size:var(--font-size-sm);padding:var(--spacing-xs) var(--spacing-md);cursor:pointer}._refresh_14mvj_21:hover{background-color:var(--bg-hover)}._error_14mvj_36{color:var(--accent-red);line-height:1.5}._empty_14mvj_41,._muted_14mvj_42{color:var(--text-secondary)}._empty_14mvj_41{text-align:center;padding:var(--spacing-2xl) var(--spacing-lg)}._tableWrap_14mvj_52{border:1px solid var(--border-primary);border-radius:var(--radius-md);overflow-x:auto}._table_14mvj_52{border-collapse:collapse;width:100%}._table_14mvj_52 th{padding:var(--spacing-sm) var(--spacing-md);background-color:var(--bg-header);border-bottom:1px solid var(--border-primary);font-size:var(--font-size-xs);letter-spacing:1px;text-transform:uppercase;text-align:left;white-space:nowrap;color:var(--text-secondary);font-weight:600}._table_14mvj_52 td{padding:var(--spacing-sm) var(--spacing-md);vertical-align:baseline}._row_14mvj_81{cursor:pointer}._row_14mvj_81+._row_14mvj_81,._detailsRow_14mvj_86+._row_14mvj_81{border-top:1px solid var(--border-subtle)}._row_14mvj_81:nth-of-type(2n){background-color:var(--bg-secondary)}._row_14mvj_81:hover,._row_14mvj_81[aria-expanded=true]{background-color:var(--bg-hover)}._row_14mvj_81:focus-visible{outline:1px solid var(--accent-blue);outline-offset:-1px}._method_14mvj_104{font-family:var(--font-mono);font-size:var(--font-size-sm);white-space:nowrap;color:var(--accent-yellow);font-weight:700}._methodGET_14mvj_112{color:var(--accent-green)}._methodDELETE_14mvj_116{color:var(--accent-red)}._methodALL_14mvj_120{color:var(--text-secondary)}._path_14mvj_124{font-family:var(--font-mono);font-size:var(--font-size-sm);white-space:nowrap;color:var(--text-bright)}._environment_14mvj_131{border:1px solid var(--accent-green);border-radius:var(--radius-sm);padding:0 var(--spacing-sm);font-size:var(--font-size-xs);letter-spacing:.04em;text-transform:uppercase;white-space:nowrap;color:var(--accent-green);display:inline-block}._devOnly_14mvj_143{border-color:var(--accent-yellow);color:var(--accent-yellow)}._from_14mvj_148{white-space:nowrap;color:var(--text-label)}._summary_14mvj_153{width:100%;min-width:200px;color:var(--text-secondary)}._detailsRow_14mvj_86>td{padding:0}._details_14mvj_86{gap:var(--spacing-sm) var(--spacing-md);padding:var(--spacing-md) var(--spacing-md) var(--spacing-lg);background-color:var(--bg-primary);border-top:1px solid var(--border-subtle);grid-template-columns:64px minmax(0,1fr);margin:0;line-height:1.5;display:grid}._details_14mvj_86 dt{color:var(--text-muted)}._details_14mvj_86 dd{overflow-wrap:anywhere;margin:0}._details_14mvj_86 code{font-family:var(--font-mono);font-size:var(--font-size-sm);color:var(--accent-orange)}._details_14mvj_86 a{color:var(--accent-blue)}._field_14mvj_194{gap:var(--spacing-md);display:flex}._field_14mvj_194 code{flex-shrink:0}._backdrop_1q7x5_1{z-index:100;padding:var(--spacing-xl);background-color:#0009;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}._dialog_1q7x5_12{gap:var(--spacing-md);width:min(560px,100%);max-height:100%;padding:var(--spacing-2xl);border:1px solid var(--border-active);border-radius:var(--radius-lg);background-color:var(--bg-panel);font-family:var(--font-ui);font-size:var(--font-size-md);color:var(--text-primary);flex-direction:column;line-height:1.5;display:flex;overflow-y:auto}._dialog_1q7x5_12 p{margin:0}._title_1q7x5_33{font-size:var(--font-size-title);color:var(--text-bright);overflow-wrap:anywhere;margin:0;font-weight:600}._warning_1q7x5_41{color:var(--accent-yellow);font-weight:600}._muted_1q7x5_46{color:var(--text-secondary)}._error_1q7x5_50{color:var(--accent-red);overflow-wrap:anywhere}._sources_1q7x5_55{gap:var(--spacing-sm);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}._sources_1q7x5_55 li{gap:var(--spacing-sm) var(--spacing-md);overflow-wrap:anywhere;flex-wrap:wrap;display:flex}._sources_1q7x5_55 code{font-family:var(--font-mono);font-size:var(--font-size-sm);color:var(--accent-orange)}._sources_1q7x5_55 a{color:var(--accent-blue)}._check_1q7x5_81{align-items:center;gap:var(--spacing-md);padding:var(--spacing-md);border:1px solid var(--border-primary);border-radius:var(--radius-md);color:var(--text-bright);cursor:pointer;display:flex}._output_1q7x5_92{max-height:220px;padding:var(--spacing-md);border:1px solid var(--border-primary);border-radius:var(--radius-md);background-color:var(--bg-input);font-family:var(--font-mono);font-size:var(--font-size-sm);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;overflow:auto}._buttons_1q7x5_106{justify-content:flex-end;gap:var(--spacing-md);margin-top:var(--spacing-md);display:flex}._buttons_1q7x5_106:empty{display:none}._button_1q7x5_106{border:1px solid var(--border-active);border-radius:var(--radius-sm);background-color:var(--bg-panel);color:var(--text-primary);font-family:var(--font-ui);font-size:var(--font-size-md);padding:var(--spacing-sm) var(--spacing-xl);cursor:pointer}._button_1q7x5_106:hover{background-color:var(--bg-hover)}._primary_1q7x5_132{border-color:var(--accent-blue);background-color:var(--accent-blue);color:var(--text-bright)}._primary_1q7x5_132:hover{background-color:var(--accent-blue);filter:brightness(1.15)}._button_1q7x5_106:disabled{border-color:var(--border-primary);background-color:var(--bg-panel);color:var(--text-muted);cursor:not-allowed;filter:none}._markdown_642o6_1{max-width:80ch;color:var(--text-primary);overflow-wrap:anywhere;line-height:1.6}._markdown_642o6_1>:first-child{margin-top:0}._markdown_642o6_1 h2,._markdown_642o6_1 h3,._markdown_642o6_1 h4,._markdown_642o6_1 h5,._markdown_642o6_1 h6{margin:var(--spacing-2xl) 0 var(--spacing-md);color:var(--text-bright);font-weight:600;line-height:1.3}._markdown_642o6_1 h2{font-size:var(--font-size-title)}._markdown_642o6_1 h3{font-size:var(--font-size-xl)}._markdown_642o6_1 h4,._markdown_642o6_1 h5,._markdown_642o6_1 h6{font-size:var(--font-size-lg)}._markdown_642o6_1 p,._markdown_642o6_1 ul,._markdown_642o6_1 ol,._markdown_642o6_1 blockquote,._markdown_642o6_1 pre{margin:0 0 var(--spacing-lg)}._markdown_642o6_1 ul,._markdown_642o6_1 ol{padding-left:var(--spacing-2xl)}._markdown_642o6_1 li+li{margin-top:var(--spacing-sm)}._markdown_642o6_1 a{color:var(--accent-blue)}._markdown_642o6_1 code{font-family:var(--font-mono);font-size:var(--font-size-sm);color:var(--accent-orange)}._markdown_642o6_1 pre{padding:var(--spacing-md) var(--spacing-lg);border:1px solid var(--border-primary);border-radius:var(--radius-md);background-color:var(--bg-input);overflow-x:auto}._markdown_642o6_1 pre code{color:var(--text-primary);white-space:pre}._markdown_642o6_1 blockquote{padding-left:var(--spacing-lg);border-left:2px solid var(--border-active);color:var(--text-label)}._markdown_642o6_1 hr{margin:var(--spacing-xl) 0;border:none;border-top:1px solid var(--border-primary)}._tableWrap_642o6_89{margin-bottom:var(--spacing-lg);overflow-x:auto}._markdown_642o6_1 table{border-collapse:collapse}._markdown_642o6_1 th,._markdown_642o6_1 td{padding:var(--spacing-sm) var(--spacing-md);border:1px solid var(--border-primary);text-align:left;vertical-align:top}._markdown_642o6_1 th{background-color:var(--bg-header);color:var(--text-label)}._root_6ps5n_1{gap:var(--spacing-md);min-height:100%;font-family:var(--font-ui);font-size:var(--font-size-md);color:var(--text-primary);flex-direction:column;display:flex}._toolbar_6ps5n_11{justify-content:space-between;align-items:center;gap:var(--spacing-md);display:flex}._title_6ps5n_18{color:var(--text-label)}._refresh_6ps5n_22{border:1px solid var(--border-primary);border-radius:var(--radius-sm);background-color:var(--bg-panel);color:var(--text-primary);font-family:var(--font-ui);font-size:var(--font-size-sm);padding:var(--spacing-xs) var(--spacing-md);cursor:pointer}._refresh_6ps5n_22:hover{background-color:var(--bg-hover)}._empty_6ps5n_37,._muted_6ps5n_38{color:var(--text-secondary)}._empty_6ps5n_37{text-align:center;padding:var(--spacing-2xl) var(--spacing-lg)}._empty_6ps5n_37 code{font-family:var(--font-mono);color:var(--accent-orange)}._muted_6ps5n_38{margin:0}._nowrap_6ps5n_56{white-space:nowrap}._problem_6ps5n_60{color:var(--accent-red);margin:0;line-height:1.5}._columns_6ps5n_66{align-items:flex-start;gap:var(--spacing-xl);display:flex}._lists_6ps5n_72{gap:var(--spacing-md);flex-direction:column;flex:0 0 260px;min-width:0;display:flex}._note_6ps5n_80{color:var(--text-secondary);overflow-wrap:anywhere;line-height:1.5}._note_6ps5n_80 code{font-family:var(--font-mono);color:var(--accent-orange)}._install_6ps5n_91{margin-bottom:var(--spacing-md);border:1px solid var(--accent-blue);border-radius:var(--radius-sm);background-color:var(--accent-blue);color:var(--text-bright);font-family:var(--font-ui);font-size:var(--font-size-md);padding:var(--spacing-sm) var(--spacing-xl);cursor:pointer;align-self:flex-start}._install_6ps5n_91:hover{filter:brightness(1.15)}._other_6ps5n_108{align-items:flex-end;gap:var(--spacing-md);flex-wrap:wrap;display:flex}._otherLabel_6ps5n_115{gap:var(--spacing-sm);min-width:0;font-size:var(--font-size-sm);color:var(--text-secondary);flex-direction:column;flex:1;display:flex}._otherInput_6ps5n_125{border:1px solid var(--border-primary);border-radius:var(--radius-sm);background-color:var(--bg-input);min-width:0;color:var(--text-primary);font-family:var(--font-mono);font-size:var(--font-size-sm);padding:var(--spacing-sm) var(--spacing-md)}._otherInput_6ps5n_125:focus-visible{outline:1px solid var(--accent-blue)}._refresh_6ps5n_22:disabled{color:var(--text-muted);cursor:not-allowed}._command_6ps5n_145{margin:var(--spacing-md) 0 0;padding:var(--spacing-md) var(--spacing-lg);border:1px solid var(--border-primary);border-radius:var(--radius-md);background-color:var(--bg-input);font-family:var(--font-mono);font-size:var(--font-size-sm);-webkit-user-select:all;user-select:all;overflow-x:auto}._list_6ps5n_72{border:1px solid var(--border-primary);border-radius:var(--radius-md);margin:0;padding:0;list-style:none;overflow:hidden}._list_6ps5n_72 li+li{border-top:1px solid var(--border-subtle)}._item_6ps5n_170{gap:var(--spacing-xs);width:100%;padding:var(--spacing-md);color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:none;flex-direction:column;display:flex}._item_6ps5n_170:hover{background-color:var(--bg-hover)}._selected_6ps5n_188,._selected_6ps5n_188:hover{background-color:var(--bg-selected)}._itemName_6ps5n_193{color:var(--text-bright);overflow-wrap:anywhere}._itemMeta_6ps5n_198{font-size:var(--font-size-sm);color:var(--text-secondary)}._details_6ps5n_203{gap:var(--spacing-lg);flex-direction:column;flex:1;min-width:0;display:flex}._header_6ps5n_211{align-items:center;gap:var(--spacing-md);flex-wrap:wrap;display:flex}._name_6ps5n_218{font-size:var(--font-size-title);color:var(--text-bright);overflow-wrap:anywhere;margin:0;font-weight:600}._badges_6ps5n_226{gap:var(--spacing-sm);flex-wrap:wrap;display:flex}._badge_6ps5n_226{border:1px solid var(--border-active);border-radius:var(--radius-sm);padding:0 var(--spacing-sm);font-size:var(--font-size-xs);letter-spacing:.04em;text-transform:uppercase;white-space:nowrap;color:var(--text-label)}._on_6ps5n_243{border-color:var(--accent-green);color:var(--accent-green)}._off_6ps5n_248{border-color:var(--text-muted);color:var(--text-secondary)}._description_6ps5n_253{color:var(--text-label);margin:0;line-height:1.5}._meta_6ps5n_259{gap:var(--spacing-sm) var(--spacing-lg);grid-template-columns:max-content minmax(0,1fr);margin:0;display:grid}._meta_6ps5n_259:empty{display:none}._meta_6ps5n_259 dt{color:var(--text-muted)}._meta_6ps5n_259 dd{overflow-wrap:anywhere;margin:0}._meta_6ps5n_259 a{color:var(--accent-blue)}._sectionTitle_6ps5n_283{margin:var(--spacing-md) 0;font-size:var(--font-size-xs);letter-spacing:2px;text-transform:uppercase;color:var(--text-secondary);font-weight:600}@media (width<=720px){._columns_6ps5n_66{flex-direction:column;align-items:stretch}._lists_6ps5n_72{flex-basis:auto}}._container_1jjbp_1{flex-direction:column;gap:4px;display:flex}._nameRow_1jjbp_8{background-color:var(--bg-panel);border-bottom:1px solid var(--border-primary);align-items:center;gap:8px;height:32px;padding:0 12px;display:flex}._nameIcon_1jjbp_18{flex-shrink:0;width:16px;height:16px}._nameText_1jjbp_24{font-family:var(--font-ui);font-size:var(--font-size-xl);color:var(--text-bright);font-weight:600}._sectionHeader_1jjbp_32{cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:4px;height:24px;padding:0 8px;display:flex}._sectionHeader_1jjbp_32:hover{background-color:var(--bg-hover)}._sectionArrow_1jjbp_46{width:10px;height:10px;color:var(--text-secondary);flex-shrink:0;transition:transform .1s}._sectionArrow_1jjbp_46._collapsed_1jjbp_54{transform:rotate(-90deg)}._sectionTitle_1jjbp_58{font-family:var(--font-ui);font-size:var(--font-size-sm);color:var(--text-primary);font-weight:600}._divider_1jjbp_66{background-color:var(--border-primary);height:1px;margin:0}._propertyRow3_1jjbp_73{align-items:center;gap:8px;height:24px;padding:0 8px;display:flex}._propertyLabel_1jjbp_81{font-family:var(--font-ui);font-size:var(--font-size-sm);color:var(--text-secondary);flex-shrink:0;width:60px}._valueInput_1jjbp_89{background-color:var(--bg-input);border:1px solid var(--border-primary);border-radius:var(--radius-sm);width:52px;height:20px;font-family:var(--font-mono);font-size:var(--font-size-sm);color:var(--text-primary);box-sizing:border-box;outline:none;padding:0 6px}._valueInput_1jjbp_89:focus{border-color:var(--accent-blue)}._checkboxRow_1jjbp_108{align-items:center;gap:6px;height:24px;padding:0 8px;display:flex}._checkbox_1jjbp_108{width:14px;height:14px;accent-color:var(--accent-blue);cursor:pointer;flex-shrink:0}._checkboxLabel_1jjbp_124{font-family:var(--font-ui);font-size:var(--font-size-sm);color:var(--text-secondary);cursor:pointer}._propertyRow_1jjbp_73{align-items:center;gap:8px;height:24px;padding:0 8px;display:flex}._propertyLabelWide_1jjbp_140{font-family:var(--font-ui);font-size:var(--font-size-sm);color:var(--text-secondary);flex-shrink:0;width:80px}._valueDisplay_1jjbp_148{background-color:var(--bg-input);border:1px solid var(--border-primary);border-radius:var(--radius-sm);height:20px;font-family:var(--font-mono);font-size:var(--font-size-sm);color:var(--text-primary);text-overflow:ellipsis;white-space:nowrap;align-items:center;min-width:60px;padding:0 6px;display:flex;overflow:hidden}._valueInputWide_1jjbp_165{background-color:var(--bg-input);border:1px solid var(--border-primary);border-radius:var(--radius-sm);height:20px;font-family:var(--font-mono);font-size:var(--font-size-sm);color:var(--text-primary);box-sizing:border-box;outline:none;flex:1;padding:0 6px}._valueInputWide_1jjbp_165:focus{border-color:var(--accent-blue)}._sliderRow_1jjbp_184{align-items:center;gap:8px;height:24px;padding:0 8px;display:flex}._sliderTrack_1jjbp_192{background-color:var(--bg-input);border:1px solid var(--border-primary);cursor:pointer;border-radius:2px;flex:1;height:4px;position:relative}._sliderFill_1jjbp_202{background-color:var(--accent-blue);pointer-events:none;border-radius:2px;height:100%;position:absolute;top:0;left:0}._sliderThumb_1jjbp_212{background-color:var(--text-bright);pointer-events:none;border-radius:50%;width:10px;height:10px;position:absolute;top:50%;transform:translate(-50%,-50%);box-shadow:0 1px 3px #0006}._sliderInput_1jjbp_224{background-color:var(--bg-input);border:1px solid var(--border-primary);border-radius:var(--radius-sm);width:48px;height:20px;font-family:var(--font-mono);font-size:var(--font-size-sm);color:var(--text-primary);box-sizing:border-box;text-align:right;outline:none;padding:0 4px}._sliderInput_1jjbp_224:focus{border-color:var(--accent-blue)}._draggableInput_1jjbp_244{background-color:var(--bg-input);border:1px solid var(--border-primary);border-radius:var(--radius-sm);width:52px;height:20px;font-family:var(--font-mono);font-size:var(--font-size-sm);color:var(--text-primary);box-sizing:border-box;cursor:ew-resize;outline:none;padding:0 6px}._draggableInput_1jjbp_244:focus{border-color:var(--accent-blue);cursor:text}._empty_1jjbp_265{color:var(--text-muted);font-family:var(--font-ui);font-size:var(--font-size-md);padding:16px 8px;font-style:italic}._colorInput_1jjbp_274{border:1px solid var(--border-primary);border-radius:var(--radius-sm);background-color:var(--bg-input);cursor:pointer;box-sizing:border-box;width:32px;height:20px;padding:1px 2px}._prefabSection_1jjbp_286{flex-direction:column;gap:4px;display:flex}._container_7ns3c_1{font-family:var(--font-ui);font-size:var(--font-size-md);-webkit-user-select:none;user-select:none;padding:var(--spacing-sm) 0}._row_7ns3c_8{cursor:pointer;align-items:center;gap:var(--spacing-sm);border-radius:var(--radius-sm);height:24px;padding-right:var(--spacing-md);display:flex}._row_7ns3c_8:hover{background-color:var(--bg-hover)}._selected_7ns3c_22,._selected_7ns3c_22:hover{background-color:var(--bg-selected)}._arrow_7ns3c_30{width:12px;color:var(--text-secondary);cursor:pointer;text-align:center;flex-shrink:0;font-size:10px}._typeIcon_7ns3c_39{flex-shrink:0;justify-content:center;align-items:center;width:14px;height:14px;display:flex}._typeIcon_7ns3c_39 svg{width:14px;height:14px}._name_7ns3c_53{color:var(--text-primary);text-overflow:ellipsis;white-space:nowrap;font-size:var(--font-size-md);overflow:hidden}._empty_7ns3c_61{padding:var(--spacing-md);color:var(--text-muted);font-style:italic;font-family:var(--font-ui);font-size:var(--font-size-md)}._runtime_7ns3c_69{color:var(--text-muted);font-style:italic}._container_z6ti4_1{font-family:var(--font-ui);font-size:var(--font-size-md);-webkit-user-select:none;user-select:none}._empty_z6ti4_7,._hint_z6ti4_8{color:var(--text-muted);font-size:var(--font-size-sm);padding:var(--spacing-sm) var(--spacing-md)}._header_z6ti4_14{justify-content:space-between;align-items:center;gap:var(--spacing-md);padding-bottom:var(--spacing-md);border-bottom:1px solid var(--border-subtle);display:flex}._title_z6ti4_23{align-items:baseline;gap:var(--spacing-sm);flex-wrap:wrap;min-width:0;display:flex}._sceneName_z6ti4_31{color:var(--text-bright);font-weight:600}._dirty_z6ti4_36{color:var(--accent-orange);font-size:10px}._file_z6ti4_41{color:var(--text-muted);font-family:var(--font-mono);font-size:var(--font-size-xs)}._saveButton_z6ti4_47,._removeButton_z6ti4_48{background-color:var(--bg-input);color:var(--text-primary);border:1px solid var(--border-primary);border-radius:var(--radius-sm);padding:2px var(--spacing-md);font-family:var(--font-ui);font-size:var(--font-size-sm);cursor:pointer}._saveButton_z6ti4_47:hover:not(:disabled),._removeButton_z6ti4_48:hover{border-color:var(--accent-blue);color:var(--text-bright)}._saveButton_z6ti4_47:disabled{opacity:.6;cursor:default}._removeButton_z6ti4_48{margin-top:var(--spacing-sm);align-self:flex-start}._error_z6ti4_75{color:var(--accent-red);font-size:var(--font-size-sm);padding:var(--spacing-sm) 0}._section_z6ti4_81{color:var(--text-secondary);font-size:var(--font-size-xs);letter-spacing:1px;text-transform:uppercase;padding:var(--spacing-lg) 0 var(--spacing-sm);font-weight:600}._clickable_z6ti4_90{cursor:pointer}._row_z6ti4_94{align-items:center;gap:var(--spacing-sm);height:24px;padding:0 var(--spacing-sm);border-radius:var(--radius-sm);cursor:pointer;display:flex}._row_z6ti4_94:hover{background-color:var(--bg-hover)}._selected_z6ti4_108,._selected_z6ti4_108:hover{background-color:var(--bg-selected)}._liveRow_z6ti4_113 ._name_z6ti4_113{color:var(--text-secondary)}._arrow_z6ti4_117{width:12px;color:var(--text-secondary);text-align:center;flex-shrink:0;font-size:10px}._liveDot_z6ti4_125{background-color:var(--accent-green);border-radius:50%;flex-shrink:0;width:6px;height:6px;margin:0 3px}._name_z6ti4_113{color:var(--text-primary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}._type_z6ti4_141{color:var(--text-muted);font-size:var(--font-size-xs);white-space:nowrap;text-overflow:ellipsis;margin-left:auto;overflow:hidden}._badge_z6ti4_150{color:var(--accent-purple);border:1px solid var(--accent-purple);border-radius:var(--radius-sm);text-transform:uppercase;flex-shrink:0;padding:0 3px;font-size:9px}._details_z6ti4_160{gap:var(--spacing-sm);padding:var(--spacing-sm) var(--spacing-md) var(--spacing-md) 28px;-webkit-user-select:text;user-select:text;flex-direction:column;display:flex}._field_z6ti4_168{align-items:center;gap:var(--spacing-md);font-size:var(--font-size-sm);display:flex}._field_z6ti4_168>span{width:80px;color:var(--text-label);flex-shrink:0}._field_z6ti4_168 code{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}._field_z6ti4_168 input:not([type=checkbox]):not([type=color]){background-color:var(--bg-input);min-width:0;color:var(--text-primary);border:1px solid var(--border-primary);border-radius:var(--radius-sm);padding:2px var(--spacing-sm);font-family:var(--font-mono);font-size:var(--font-size-xs);flex:1}._field_z6ti4_168 input[type=color]{background:0 0;border:none;width:28px;height:18px;padding:0}._root_t4wh3_1{gap:var(--spacing-lg);font-size:var(--font-size-md);flex-direction:column;display:flex}._empty_t4wh3_8{color:var(--text-secondary);text-align:center;padding:var(--spacing-2xl) var(--spacing-lg);line-height:1.5}._card_t4wh3_15{gap:var(--spacing-md);padding-bottom:var(--spacing-lg);border-bottom:1px solid var(--border-primary);flex-direction:column;display:flex}._cardHeader_t4wh3_23{align-items:center;gap:var(--spacing-md);min-width:0;display:flex}._badge_t4wh3_30{font-size:var(--font-size-xs);text-transform:uppercase;letter-spacing:.04em;background-color:var(--accent-blue);color:var(--text-bright);border-radius:var(--radius-sm);flex-shrink:0;padding:1px 6px}._gamepadId_t4wh3_41{white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0;overflow:hidden}._meta_t4wh3_49{color:var(--text-muted);font-family:var(--font-mono);flex-shrink:0}._button_t4wh3_55{background-color:var(--bg-active);border:1px solid var(--border-active);color:var(--text-primary);border-radius:var(--radius-sm);font-family:var(--font-ui);font-size:var(--font-size-sm);padding:2px var(--spacing-md);cursor:pointer;flex-shrink:0}._button_t4wh3_55:hover{background-color:var(--bg-hover)}._warning_t4wh3_71{color:var(--accent-yellow);font-size:var(--font-size-sm)}._diagram_t4wh3_76{align-self:center;width:100%;max-width:360px}._body_t4wh3_82{fill:var(--bg-panel);stroke:var(--border-primary)}._part_t4wh3_87{fill:var(--bg-hover);stroke:var(--border-active);stroke-width:1px}._pressed_t4wh3_93{fill:var(--accent-blue);stroke:var(--text-bright)}._fill_t4wh3_98{fill:var(--text-muted)}._fillPressed_t4wh3_102{fill:var(--accent-blue)}._deadzone_t4wh3_106{fill:none;stroke:var(--accent-orange);stroke-dasharray:2 2}._rawDot_t4wh3_112{fill:var(--text-secondary)}._stickDot_t4wh3_116{fill:var(--accent-green)}._tinyLabel_t4wh3_120,._faceLabel_t4wh3_121{fill:var(--text-primary);font-family:var(--font-ui);text-anchor:middle;pointer-events:none}._tinyLabel_t4wh3_120{font-size:7px}._faceLabel_t4wh3_121{font-size:8px;font-weight:600}._sticks_t4wh3_137{font-family:var(--font-mono);color:var(--text-label);justify-content:space-around;display:flex}._sectionTitle_t4wh3_144{font-size:var(--font-size-xs);color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em}._rows_t4wh3_151{gap:var(--spacing-xs);flex-direction:column;display:flex}._row_t4wh3_151{align-items:center;gap:var(--spacing-md);color:var(--text-label);grid-template-columns:110px 1fr 48px;display:grid}._rowPressed_t4wh3_165{color:var(--text-bright)}._rowLabel_t4wh3_169{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}._rowValue_t4wh3_175{font-family:var(--font-mono);text-align:right;font-variant-numeric:tabular-nums}._bar_t4wh3_181{background-color:var(--bg-input);border-radius:var(--radius-sm);height:6px;position:relative;overflow:hidden}._barCenter_t4wh3_189{background-color:var(--border-active);width:1px;position:absolute;top:0;bottom:0;left:50%}._barFill_t4wh3_198{background-color:var(--accent-blue);position:absolute;top:0;bottom:0}._log_t4wh3_205{font-family:var(--font-mono);font-size:var(--font-size-sm);gap:var(--spacing-xs);color:var(--text-label);flex-direction:column;display:flex}._logEmpty_t4wh3_214{color:var(--text-muted)}._logEntry_t4wh3_218{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}._logTime_t4wh3_224{color:var(--text-muted);margin-right:var(--spacing-md)}._statusBar_6wjbc_1{background-color:var(--bg-statusbar);height:22px;min-height:22px;padding:0 var(--spacing-md);font-size:var(--font-size-xs);color:var(--text-bright);justify-content:space-between;align-items:center;display:flex}._section_6wjbc_13{gap:var(--spacing-xl);align-items:center;display:flex}._stat_6wjbc_1{gap:var(--spacing-sm);font-family:var(--font-mono);display:flex}._statLabel_6wjbc_25{opacity:.7;font-family:var(--font-mono)}._branch_6wjbc_30{font-family:var(--font-ui);font-weight:500}._engineName_6wjbc_35{font-family:var(--font-ui);font-weight:600}._statButton_6wjbc_40{color:inherit;font-size:inherit;padding:0 var(--spacing-sm);border-radius:var(--radius-sm);cursor:pointer;background:0 0;border:none;align-items:center;height:18px}._statButton_6wjbc_40:hover{background-color:#ffffff26}._root_14xjl_1{gap:var(--spacing-md);height:100%;min-height:0;font-size:var(--font-size-sm);color:var(--text-primary);flex-direction:column;display:flex}._toolbar_14xjl_11{align-items:center;gap:var(--spacing-md);flex-wrap:wrap;display:flex}._toolbar_14xjl_11 select,._toolbar_14xjl_11 input[type=search],._toolbar_14xjl_11 button{background-color:var(--bg-input);border:1px solid var(--border-primary);border-radius:var(--radius-sm);color:var(--text-primary);font-family:var(--font-ui);font-size:var(--font-size-sm);padding:2px var(--spacing-md)}._toolbar_14xjl_11 button{background-color:var(--bg-active);border-color:var(--border-active);cursor:pointer}._toolbar_14xjl_11 button:hover{background-color:var(--bg-hover)}._toolbar_14xjl_11 label{align-items:center;gap:var(--spacing-sm);color:var(--text-label);white-space:nowrap;cursor:pointer;display:flex}._spacer_14xjl_49{flex:1}._status_14xjl_53{align-items:center;gap:var(--spacing-sm);color:var(--text-secondary);font-family:var(--font-mono);white-space:nowrap;display:flex}._dotOn_14xjl_62,._dotOff_14xjl_63{background-color:var(--accent-green);border-radius:50%;width:6px;height:6px}._dotOff_14xjl_63{background-color:var(--accent-red)}._timeline_14xjl_74{background-color:var(--bg-input);border-radius:var(--radius-sm);flex-shrink:0;width:100%}._body_14xjl_81{gap:var(--spacing-lg);flex:1;min-height:0;display:flex}._records_14xjl_88{flex:2;min-width:0;overflow:auto}._side_14xjl_94{border-left:1px solid var(--border-primary);min-width:200px;padding-left:var(--spacing-lg);flex:1;overflow:auto}._table_14xjl_102{border-collapse:collapse;width:100%;font-family:var(--font-mono);font-variant-numeric:tabular-nums}._table_14xjl_102 th{text-align:left;color:var(--text-muted);padding:1px var(--spacing-md) 1px 0;font-weight:400}._table_14xjl_102 td{padding:1px var(--spacing-md) 1px 0;white-space:nowrap}._table_14xjl_102 tbody tr{cursor:pointer}._table_14xjl_102 tbody tr:hover{background-color:var(--bg-hover)}._table_14xjl_102 tbody tr._selected_14xjl_129{background-color:var(--bg-selected)}._time_14xjl_74{color:var(--text-muted)}._out_14xjl_137 ._arrow_14xjl_137{color:var(--accent-blue)}._in_14xjl_141 ._arrow_14xjl_137{color:var(--accent-green)}._event_14xjl_145 ._arrow_14xjl_137,._event_14xjl_145 ._type_14xjl_146{color:var(--accent-yellow)}._peer_14xjl_150{text-overflow:ellipsis;max-width:90px;color:var(--text-secondary);overflow:hidden}._bytes_14xjl_157{text-align:right;color:var(--text-label)}._info_14xjl_162{width:100%;color:var(--text-secondary)}._sectionTitle_14xjl_167{font-size:var(--font-size-xs);color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em;margin-bottom:var(--spacing-md)}._payload_14xjl_175{font-family:var(--font-mono);font-size:var(--font-size-sm);color:var(--text-label);white-space:pre-wrap;word-break:break-word;-webkit-user-select:text;user-select:text;margin:0}._sync_14xjl_185{gap:var(--spacing-md);flex-direction:column;display:flex}._syncSummary_14xjl_191{color:var(--text-label);line-height:1.5}._note_14xjl_196{color:var(--text-secondary);line-height:1.5}._error_14xjl_201{color:var(--accent-yellow);margin-bottom:var(--spacing-md);line-height:1.5}
2
2
  /*$vite$:1*/
package/dist/Editor.d.ts CHANGED
@@ -11,6 +11,7 @@ import { Object3D } from 'three';
11
11
  import { FlyControls } from 'three/examples/jsm/controls/FlyControls.js';
12
12
  import { TransformControls } from 'three/examples/jsm/controls/TransformControls.js';
13
13
  import { OutlinePass } from 'three/examples/jsm/postprocessing/OutlinePass.js';
14
+ import NetworkOverlay from './Editor/Network/NetworkOverlay';
14
15
  export type { EditorPanelDefinition, EditorPanelLocation } from './Editor/panels';
15
16
  export { registerEditorPanel, unregisterEditorPanel } from './Editor/panels';
16
17
  export type ShadeMode = 'solid' | 'flat' | 'wireframe';
@@ -30,6 +31,8 @@ export default class Editor extends EventEmitter implements IEditor, GameObjectI
30
31
  private _showHelpers;
31
32
  private abort;
32
33
  private saving?;
34
+ /** Server ghosts and sync rings in the viewport, switched on from the Network panel */
35
+ networkOverlay: NetworkOverlay;
33
36
  availableAssetCategories: string[];
34
37
  activeAssetCategory: 'Object' | '_texture' | 'CubeTexture' | 'AudioBuffer' | 'Font';
35
38
  /**