@liveroom-tech/react-immersive 5.1.0 → 5.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +486 -57
- package/dist/binding-builder.css +1 -1
- package/dist/binding-builder.js +17 -13
- package/dist/binding-builder.mjs +1 -1
- package/dist/chunk-4NLJSD3S.mjs +1 -0
- package/dist/chunk-B7REIGDG.mjs +1 -0
- package/dist/{chunk-WN6GMMHF.mjs → chunk-HYFJ5DYJ.mjs} +1 -1
- package/dist/chunk-QC3NT76G.mjs +3 -0
- package/dist/chunk-T3M3BQ7H.mjs +32 -0
- package/dist/chunk-ZPK67UG7.mjs +1 -0
- package/dist/hosted.css +1 -1
- package/dist/hosted.d.mts +4 -3
- package/dist/hosted.d.ts +4 -3
- package/dist/hosted.js +16 -12
- package/dist/hosted.mjs +1 -1
- package/dist/index.css +1 -1
- package/dist/index.d.mts +39 -8
- package/dist/index.d.ts +39 -8
- package/dist/index.js +14 -10
- package/dist/index.mjs +1 -1
- package/dist/materialVariants-DnZe9eMC.d.mts +309 -0
- package/dist/materialVariants-DnZe9eMC.d.ts +309 -0
- package/dist/modelInfo-BYebMPdZ.d.mts +43 -0
- package/dist/modelInfo-XfUQO7C_.d.ts +43 -0
- package/dist/{ModelViewer-Bj-KjiDL.d.mts → modelViewerProps-CIZ2R_Fv.d.ts} +82 -10
- package/dist/{ModelViewer-BkQ73y6N.d.ts → modelViewerProps-DoRiTZMn.d.mts} +82 -10
- package/dist/{objectCatalog-BIeXURoq.d.ts → rendererBackend-QwMzISTn.d.mts} +32 -4
- package/dist/{objectCatalog-BIeXURoq.d.mts → rendererBackend-QwMzISTn.d.ts} +32 -4
- package/dist/simple-model-viewer.css +1 -1
- package/dist/simple-model-viewer.d.mts +32 -4
- package/dist/simple-model-viewer.d.ts +32 -4
- package/dist/simple-model-viewer.js +3 -3
- package/dist/simple-model-viewer.mjs +1 -1
- package/dist/utils.d.mts +5 -4
- package/dist/utils.d.ts +5 -4
- package/dist/utils.js +1 -1
- package/dist/utils.mjs +1 -1
- package/package.json +2 -1
- package/dist/chunk-32WCLPTZ.mjs +0 -1
- package/dist/chunk-CSGNL4XU.mjs +0 -3
- package/dist/chunk-F2ILTIPG.mjs +0 -28
- package/dist/chunk-V6GALFL5.mjs +0 -1
- package/dist/modelInfo-DnkmTGMd.d.mts +0 -23
- package/dist/modelInfo-DnkmTGMd.d.ts +0 -23
package/dist/hosted.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{a as i}from"./chunk-
|
|
1
|
+
"use client";import{a as i}from"./chunk-QC3NT76G.mjs";import{x as e}from"./chunk-T3M3BQ7H.mjs";import"./chunk-ZPK67UG7.mjs";import"./chunk-B7REIGDG.mjs";import"./chunk-4NLJSD3S.mjs";import"./chunk-JR557W27.mjs";import{jsx as t}from"react/jsx-runtime";function o(r){return t(e,{...r})}export{i as ProjectBindingBuilder,o as ProjectModelViewer};
|
package/dist/index.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
:root{--ri-styles-model-viewer: 1}.ri-viewer--license-checking,.ri-viewer--license-invalid{display:flex;align-items:center;justify-content:center;width:100%;height:100%;background-color:#f9f9f9}.ri-viewer{--ri-font-family: Inter, "Segoe UI", Helvetica, Arial, sans-serif;--ri-viewer-bg: #1c1c1d;--ri-viewer-text: #111827;--ri-panel-bg: #ffffff;--ri-panel-border: #e5e7eb;--ri-panel-title: #111827;--ri-panel-muted-text: #4b5563;--ri-panel-subtle-text: #9ca3af;--ri-panel-surface: #f9fafb;--ri-panel-surface-hover: #f3f4f6;--ri-panel-surface-border: #e5e7eb;--ri-panel-button-text: #1f2937;--ri-panel-accent: #2563eb;--ri-panel-accent-contrast: #ffffff;--ri-license-overlay-bg: rgba(0, 0, 0, .04);--ri-license-overlay-border: rgba(0, 0, 0, .08);--ri-license-overlay-text: #888;--ri-license-overlay-error-bg: rgba(192, 57, 43, .06);--ri-license-overlay-error-border: rgba(192, 57, 43, .2);--ri-license-overlay-error-text: #c0392b;--ri-sidepanel-font-family: Inter, "Segoe UI", Helvetica, Arial, sans-serif;--ri-sidepanel-bg: var(--ri-databinding-bg, #111318);--ri-sidepanel-open-btn-bg: rgba(20, 20, 20, .82);--ri-sidepanel-open-btn-bg-hover: #27282b7e;--ri-sidepanel-border: rgba(255, 255, 255, .06);--ri-sidepanel-divider: rgba(255, 255, 255, .04);--ri-sidepanel-border-strong: rgba(255, 255, 255, .08);--ri-sidepanel-border-active: rgba(255, 255, 255, .18);--ri-sidepanel-shadow-left: 4px 0 24px rgba(0, 0, 0, .35);--ri-sidepanel-shadow-right: -4px 0 24px rgba(0, 0, 0, .35);--ri-sidepanel-text: var(--ri-databinding-text, #f1f5f9);--ri-sidepanel-text-emphasis: var(--ri-databinding-text-hover, #cbd5e1);--ri-sidepanel-text-muted: var(--ri-databinding-text-muted, #94a3b8);--ri-sidepanel-text-subtle: var(--ri-databinding-text-subtle, #64748b);--ri-sidepanel-placeholder: var(--ri-databinding-text-faint, #475569);--ri-sidepanel-surface: rgba(255, 255, 255, .05);--ri-sidepanel-surface-hover: rgba(255, 255, 255, .1);--ri-sidepanel-accent: #3b82f6;--ri-sidepanel-accent-soft: rgba(59, 130, 246, .12);--ri-databinding-bg: #111318;--ri-databinding-border: rgba(255, 255, 255, .06);--ri-databinding-border-strong: rgba(255, 255, 255, .08);--ri-databinding-border-hover: rgba(255, 255, 255, .15);--ri-databinding-shadow: 4px 0 24px rgba(0, 0, 0, .35);--ri-databinding-font-family: "Inter", "Segoe UI", sans-serif;--ri-databinding-mono-font-family: "JetBrains Mono", "Fira Code", "Menlo", monospace;--ri-databinding-text: #f1f5f9;--ri-databinding-text-muted: #94a3b8;--ri-databinding-text-subtle: #64748b;--ri-databinding-text-faint: #475569;--ri-databinding-text-hover: #cbd5e1;--ri-databinding-surface: rgba(255, 255, 255, .03);--ri-databinding-surface-hover: rgba(255, 255, 255, .06);--ri-databinding-accent: #93c5fd;--ri-databinding-accent-glow: rgba(147, 197, 253, .8);--ri-databinding-accent-border: rgba(96, 165, 250, .55);--ri-databinding-accent-gradient: linear-gradient( 135deg, #1e3a8a 0%, #1d4ed8 60%, #2563eb 100% );--ri-databinding-accent-gradient-active: linear-gradient( 135deg, #1e3a8a 0%, #1e40af 100% );display:flex;flex-direction:row;width:100%;height:100%;min-height:0;overflow:hidden;background:var(--ri-viewer-bg);position:relative;color:var(--ri-viewer-text);font-family:var(--ri-font-family);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility;font-synthesis:none}.ri-viewer:fullscreen{width:100vw;height:100vh;max-width:none;max-height:none;margin:0}.ri-viewer *{box-sizing:border-box}.ri-viewerLeft{display:flex;flex:1;min-height:0;min-width:0;position:relative}.ri-viewerRight{display:flex;flex-shrink:0;min-width:0}.ri-panel{width:280px;min-height:0;background:var(--ri-panel-bg);border-right:1px solid var(--ri-panel-border);display:flex;flex-direction:column;padding:20px;overflow-y:auto;flex-shrink:0;transition:margin-left .3s ease,transform .3s ease}.ri-panel--open{transform:translate(0);margin-left:0}.ri-panel--closed{transform:translate(-100%);margin-left:-280px}.ri-panelHeader{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}.ri-panelTitle{margin:0;font-size:15px;font-weight:700;color:var(--ri-panel-title);line-height:1.4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ri-closeButton{border:0;background:transparent;color:var(--ri-panel-subtle-text);font-size:22px;line-height:1;padding:0;cursor:pointer;flex-shrink:0;transition:color .2s ease}.ri-closeButton:hover{color:var(--ri-panel-muted-text)}.ri-json{margin:0 0 16px;padding:12px;background:var(--ri-panel-surface);border:1px solid var(--ri-panel-surface-border);border-radius:12px;font-size:12px;line-height:1.55;color:var(--ri-panel-button-text);overflow-x:auto;white-space:pre-wrap;word-break:break-word}.ri-divider{border-top:1px solid var(--ri-panel-border);margin-bottom:12px}.ri-sectionLabel{margin-bottom:8px;font-size:11px;font-weight:700;color:var(--ri-panel-subtle-text);text-transform:uppercase;letter-spacing:.16em}.ri-actionList{display:flex;flex-direction:column;gap:8px}.ri-actionButton{width:100%;border-radius:8px;border:1px solid var(--ri-panel-surface-border);background:var(--ri-panel-surface);color:var(--ri-panel-button-text);padding:10px 12px;text-align:left;font-size:14px;line-height:1.4;cursor:pointer;transition:background-color .2s ease,border-color .2s ease,color .2s ease}.ri-actionButton:hover{background:var(--ri-panel-surface-hover);border-color:var(--ri-panel-border)}.ri-actionButton--active{background:var(--ri-panel-accent);border-color:var(--ri-panel-accent);color:var(--ri-panel-accent-contrast)}.ri-actionButton--active:hover{background:var(--ri-panel-accent);border-color:var(--ri-panel-accent)}.ri-canvasArea{flex:1 1 auto;position:relative;min-width:0}.ri-canvasArea--measuring{cursor:crosshair}.ri-canvasArea canvas{opacity:1;transition:opacity .18s ease}.ri-canvasArea--positioning canvas{opacity:0;transition:none}.ri-bindingsMismatchBanner{position:absolute;top:12px;left:50%;transform:translate(-50%);z-index:20;display:flex;align-items:center;gap:8px;padding:7px 12px 7px 10px;border-radius:8px;background:#1e1400e0;border:1px solid rgba(251,191,36,.35);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);color:#fbbf24;font-size:12px;font-weight:500;line-height:1.4;white-space:nowrap;pointer-events:auto;max-width:calc(100% - 32px);white-space:normal;text-align:center}.ri-bindingsMismatchBanner__icon{flex-shrink:0}.ri-bindingsMismatchBanner__dismiss{flex-shrink:0;display:flex;align-items:center;justify-content:center;margin-left:4px;padding:2px;background:none;border:none;border-radius:4px;color:#fbbf24b3;cursor:pointer;transition:color .15s ease,background .15s ease}.ri-bindingsMismatchBanner__dismiss:hover{color:#fbbf24;background:#fbbf241f}.ri-measureTools,.ri-uvCheckerTools{position:absolute;top:16px;left:16px;z-index:10;display:flex;gap:8px;align-items:center}.ri-measureButton{width:34px;height:34px;padding:0;background:#141414d1;border:1px solid rgba(255,255,255,.12);color:#ffffffbf;border-radius:8px;cursor:pointer;display:flex;align-items:center;justify-content:center;touch-action:manipulation;user-select:none;-webkit-tap-highlight-color:transparent;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);transition:background .15s ease,color .15s ease,border-color .15s ease}.ri-measureButton:hover{background:#282828eb;color:#fff;border-color:#ffffff40}.ri-measureButton:active{background:#38dbf0;color:#06343c;border-color:#38dbf0}.ri-measureButton--active{background:#22d3ee;border-color:#22d3ee;color:#06343c}.ri-measureButton--active:hover{background:#38dbf0;color:#06343c}.ri-measureHint{padding:6px 10px;border-radius:8px;font-size:12px;line-height:1.35;color:#fff;background:#141414d1;border:1px solid rgba(255,255,255,.12);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);white-space:normal}.ri-measureTools{align-items:flex-start;flex-direction:column;max-width:min(540px,calc(100% - 32px))}.ri-measureToolbarRow{display:flex;align-items:center;flex-wrap:wrap;gap:6px}.ri-measureSelect,.ri-measureFinish{height:34px;padding:0 8px;border:1px solid rgba(255,255,255,.2);border-radius:8px;background:#242424;color:#fff;font:inherit;font-size:12px;cursor:pointer}.ri-measureFinish{background:#22d3ee;color:#06343c}.ri-measureHint--error{color:#facc15}.ri-measureButton:disabled,.ri-measureFinish:disabled{opacity:.4;cursor:not-allowed}.ri-measureSelect:focus-visible,.ri-measureFinish:focus-visible,.ri-measureButton:focus-visible{outline:2px solid #22d3ee;outline-offset:2px}.ri-measureDot.ri-measureDot--snapped{background:#facc15}.ri-measureSnapTarget{width:16px;height:16px;border:2px solid #facc15;background:#facc1533;box-shadow:0 0 0 1px #000;pointer-events:none}.ri-measureSnapLabel{position:absolute;top:22px;left:0;padding:3px 6px;border-radius:4px;background:#facc15;color:#06343c;font-size:12px;pointer-events:none}.ri-explodeTools{position:absolute;top:16px;left:16px;z-index:10;display:flex;gap:8px;align-items:center}.ri-explodeSlider{display:flex;align-items:center;gap:8px;height:34px;padding:0 12px;background:#141414d1;border:1px solid rgba(255,255,255,.12);border-radius:8px;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}.ri-explodeSlider input[type=range]{width:120px;accent-color:#22d3ee;cursor:pointer}.ri-sectionTools{position:absolute;top:16px;left:16px;z-index:10;display:flex;gap:8px;align-items:center}.ri-sectionPanel{display:flex;align-items:center;gap:8px;height:34px;padding:0 6px;background:#141414d1;border:1px solid rgba(255,255,255,.12);border-radius:8px;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}.ri-sectionPanel input[type=range]{width:110px;accent-color:#22d3ee;cursor:pointer}.ri-sectionAxes{display:flex;gap:2px}.ri-sectionAxis{display:inline-flex;align-items:center;justify-content:center;min-width:24px;height:24px;padding:0 6px;font-size:12px;font-weight:600;color:#ffffffbf;background:transparent;border:none;border-radius:6px;cursor:pointer}.ri-sectionAxis:hover{color:#fff;background:#ffffff14}.ri-sectionAxis--active,.ri-sectionAxis--active:hover{background:#22d3ee;color:#06343c}.ri-sectionAxis:focus-visible{outline:2px solid #22d3ee;outline-offset:1px}.ri-decalControl{padding:12px}.ri-decalPosition{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 0}.ri-decalPosition__label{font-size:13px;font-weight:600}.ri-decalPosition__hint{font-size:11px;opacity:.65;margin-top:4px;max-width:160px}.ri-decalPosition__pad{display:grid;grid-template:repeat(3,30px) / repeat(3,30px);gap:3px;flex-shrink:0}.ri-decalPosition__button{touch-action:none;user-select:none;display:flex;align-items:center;justify-content:center;border:1px solid rgba(148,163,184,.25);border-radius:7px;color:inherit;background:#94a3b81a;cursor:pointer}.ri-decalPosition__button:hover{background:#38bdf833}.ri-decalPosition__button:active{background:#38bdf859}.ri-decalPosition__button:focus-visible{outline:2px solid #38bdf8;outline-offset:2px}.ri-decalPosition__button--up{grid-area:1 / 2}.ri-decalPosition__button--left{grid-area:2 / 1}.ri-decalPosition__button--right{grid-area:2 / 3}.ri-decalPosition__button--down{grid-area:3 / 2}.ri-decalControl__row{display:flex;align-items:center;gap:8px;margin-bottom:8px}.ri-decalControl__input{flex:1;min-width:0;height:34px;padding:0 10px;font:inherit;font-size:13px;color:var(--ri-databinding-text, #f1f5f9);background:#00000040;border:1px solid var(--ri-databinding-border-strong, rgba(255, 255, 255, .08));border-radius:8px}.ri-decalControl__input:focus-visible,.ri-decalControl__chip:focus-visible{outline:2px solid #22d3ee;outline-offset:1px}.ri-decalControl__color{flex-shrink:0;width:34px;height:34px;padding:2px;background:transparent;border:1px solid var(--ri-databinding-border-strong, rgba(255, 255, 255, .08));border-radius:8px;cursor:pointer}.ri-decalControl .ri-uploadButton:disabled{opacity:.5;cursor:not-allowed}.ri-decalControl__hint{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:10px;padding:8px 10px;font-size:12px;line-height:1.35;border-radius:8px;border:1px solid rgba(34,211,238,.35);background:#22d3ee14}.ri-decalControl__list{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}.ri-decalControl__chip{max-width:100%;padding:4px 10px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;color:var(--ri-databinding-text, #f1f5f9);background:var(--ri-databinding-surface-hover, rgba(255, 255, 255, .06));border:1px solid var(--ri-databinding-border-strong, rgba(255, 255, 255, .08));border-radius:999px;cursor:pointer}.ri-decalControl__chip--active{background:#22d3ee;border-color:#22d3ee;color:#06343c}.ri-decalControl__editor{margin-top:10px;padding-top:10px;border-top:1px solid var(--ri-databinding-border-strong, rgba(255, 255, 255, .08))}.ri-decalControl__slider{display:grid;grid-template-columns:38px minmax(0,1fr);align-items:center;gap:8px;margin-bottom:6px;font-size:12px;color:var(--ri-databinding-text-muted, #94a3b8)}.ri-decalControl__slider input{width:100%;accent-color:#22d3ee;cursor:pointer}.ri-bottomStack{position:absolute;bottom:12px;left:50%;transform:translate(-50%);z-index:10;display:flex;flex-direction:column;align-items:center;gap:8px;max-width:calc(100% - 24px)}.ri-bottomStack--aboveButtons{bottom:var(--ri-bottom-stack-offset, 56px)}.ri-recordingOverlay{position:absolute;inset:0;z-index:200;display:flex;align-items:flex-end;justify-content:center;padding:0 12px 72px;cursor:wait}.ri-isolationPill{display:flex;align-items:center;gap:10px;max-width:100%;padding:4px 4px 4px 12px;background:#141414d1;border:1px solid rgba(255,255,255,.12);border-radius:10px;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);color:#ffffffd9;font-size:13px}.ri-isolationPill__label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ri-isolationPill__button{flex-shrink:0;height:28px;padding:0 12px;font-size:13px;font-weight:600;color:#06343c;background:#22d3ee;border:none;border-radius:7px;cursor:pointer}.ri-isolationPill__button:hover{background:#38dbf0}.ri-isolationPill__button:focus-visible{outline:2px solid #fff;outline-offset:1px}.ri-variantPicker{display:flex;gap:4px;max-width:100%;padding:4px;overflow-x:auto;scrollbar-width:none;background:#141414d1;border:1px solid rgba(255,255,255,.12);border-radius:10px;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}.ri-variantPicker::-webkit-scrollbar{display:none}.ri-variantPicker__option{flex-shrink:0;height:28px;padding:0 12px;font-size:13px;font-weight:500;white-space:nowrap;color:#ffffffbf;background:transparent;border:1px solid transparent;border-radius:7px;cursor:pointer;touch-action:manipulation;user-select:none;-webkit-tap-highlight-color:transparent;transition:background .15s ease,color .15s ease}.ri-variantPicker__option:hover{color:#fff;background:#ffffff14}.ri-variantPicker__option--active,.ri-variantPicker__option--active:hover{background:#22d3ee;color:#06343c}.ri-variantPicker__option:focus-visible{outline:2px solid #22d3ee;outline-offset:1px}.ri-cinematicTools{position:absolute;left:16px;z-index:10;display:flex;gap:8px;align-items:center}.ri-measureDot{width:10px;height:10px;border-radius:50%;background:#22d3ee;border:2px solid #fff;box-shadow:0 0 0 1px #0006;pointer-events:none}.ri-measureLabel{padding:3px 7px;border-radius:6px;font-size:12px;font-weight:600;line-height:1;white-space:nowrap;color:#06343c;background:#22d3ee;box-shadow:0 1px 4px #00000059;pointer-events:none;user-select:none}.ri-xrTools{position:absolute;left:16px;z-index:10;display:flex;gap:8px;align-items:center}.ri-xrButton{display:inline-flex;align-items:center;gap:8px;height:34px;padding:0 10px;font-size:13px;font-weight:500;color:#fff;background:#141414d1;border:1px solid rgba(255,255,255,.16);border-radius:8px;cursor:pointer;touch-action:manipulation;user-select:none;-webkit-tap-highlight-color:transparent;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);transition:background .15s ease,border-color .15s ease}.ri-xrButton:hover{background:#282828eb;border-color:#ffffff4d}.ri-mobileHandoffBackdrop{position:absolute;z-index:30;inset:0;display:grid;place-items:center;padding:20px;background:#020617ad;backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(5px)}.ri-mobileHandoffDialog{position:relative;display:flex;width:min(100%,300px);flex-direction:column;align-items:center;padding:16px;text-align:center;color:#e2e8f0;background:#0f172a;border:1px solid rgba(148,163,184,.3);border-radius:16px;box-shadow:0 24px 80px #00000080}.ri-mobileHandoffDialog>svg{color:#67e8f9}.ri-mobileHandoffDialog h2{margin:12px 0 0;font-size:18px;line-height:1.25;color:#fff}.ri-mobileHandoffDialog p{margin:8px 0 16px;font-size:13px;line-height:1.5;color:#cbd5e1}.ri-mobileHandoffQr{display:grid;place-items:center;padding:10px;background:#fff;border-radius:10px}.ri-mobileHandoffDialog a{margin-top:16px;font-size:13px;font-weight:600;color:#a5f3fc;text-decoration:underline;text-underline-offset:3px}.ri-mobileHandoffClose{position:absolute;top:10px;right:10px;display:grid;width:30px;height:30px;place-items:center;padding:0;color:#cbd5e1;background:transparent;border:0;border-radius:6px;cursor:pointer}.ri-mobileHandoffClose:hover{color:#fff;background:#ffffff1a}.ri-arHintOverlay{position:absolute;top:18px;left:50%;transform:translate(-50%);z-index:10;width:min(calc(100% - 32px),360px);pointer-events:none}.ri-arHint{margin:0 auto;width:fit-content;max-width:100%;padding:6px 12px;font-size:11px;font-weight:500;line-height:1.2;text-align:center;color:#ffffffeb;background:#14141494;border:1px solid rgba(255,255,255,.12);border-radius:999px;user-select:none;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}.ri-arOverlay{position:absolute;bottom:24px;left:50%;transform:translate(-50%);z-index:10;width:min(calc(100% - 32px),420px);pointer-events:none}.ri-arControls{display:flex;flex-direction:column;align-items:center;gap:10px}.ri-arStatus,.ri-arActionButton{max-width:100%;padding:8px 16px;font-size:13px;font-weight:600;line-height:1.3;text-align:center;white-space:nowrap;color:#fff;background:#141414d1;border:1px solid rgba(255,255,255,.16);border-radius:19px;user-select:none;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}.ri-arStatus{pointer-events:none}.ri-arActionButton{display:inline-flex;align-items:center;justify-content:center;gap:6px;cursor:pointer;pointer-events:auto;touch-action:manipulation;-webkit-tap-highlight-color:transparent;transition:background .15s ease,border-color .15s ease,color .15s ease,transform .15s ease}.ri-arActionButton svg{flex-shrink:0}.ri-arActionButton:hover{background:#282828eb;border-color:#ffffff4d}.ri-arActionButton:active{transform:scale(.98)}.ri-arActionButton--primary{color:#06343c;background:#22d3ee;border-color:transparent;box-shadow:0 1px 4px #00000059}.ri-arActionButton--primary:hover{background:#67e8f9;border-color:transparent}.ri-arActionButton.ri-arActionButton--active,.ri-arActionButton[aria-pressed=true],.ri-arActionButton.ri-arActionButton--active:hover,.ri-arActionButton[aria-pressed=true]:hover,.ri-arActionButton.ri-arActionButton--active:active,.ri-arActionButton[aria-pressed=true]:active{color:#06343c;background:#22d3ee;border-color:transparent;box-shadow:0 1px 4px #00000059}.ri-hiddenInput{display:none}.ri-popover{position:absolute;z-index:50;background:#fff;border:1px solid #e5e7eb;border-radius:16px;box-shadow:0 24px 48px #0f172a2e;color:#111827}.ri-popover--inline{position:static;z-index:auto;width:100%;border-radius:10px;box-shadow:none}.ri-popover--inline .react-colorful{width:100%}.ri-popover--inline{background:var(--ri-databinding-surface, rgba(255, 255, 255, .03));border-color:var(--ri-databinding-border-strong, rgba(255, 255, 255, .08));color:var(--ri-databinding-text, #f1f5f9)}.ri-popover--inline .ri-popoverHeader{border-bottom-color:var( --ri-databinding-border-strong, rgba(255, 255, 255, .08) )}.ri-popover--inline .ri-popoverLabel,.ri-popover--inline .ri-colorCode{color:var(--ri-databinding-text-muted, #94a3b8)}.ri-popover--inline .ri-secondaryButton{background:var(--ri-databinding-surface-hover, rgba(255, 255, 255, .06));border-color:var(--ri-databinding-border-strong, rgba(255, 255, 255, .08));color:var(--ri-databinding-text, #f1f5f9)}.ri-popover--inline .ri-secondaryButton:hover{background:#ffffff1f}.ri-popover--inline .ri-previewFrame{border-color:var(--ri-databinding-border-strong, rgba(255, 255, 255, .08))}.ri-popover--inline .ri-emptyState{border-color:var(--ri-databinding-border-hover, rgba(255, 255, 255, .15));color:var(--ri-databinding-text-subtle, #64748b)}.ri-popover--inline .ri-uploadButton{background:var(--ri-databinding-accent-gradient, #2563eb);color:#fff}.ri-popover--inline .ri-uploadButton:hover{background:var(--ri-databinding-accent-gradient-active, #1d4ed8)}.ri-popover--inline .ri-removeButton{background:transparent;border-color:var(--ri-databinding-border-strong, rgba(255, 255, 255, .08));color:var(--ri-databinding-text-muted, #94a3b8)}.ri-popover--inline .ri-removeButton:hover{background:var(--ri-databinding-surface-hover, rgba(255, 255, 255, .06))}.ri-popover--inline .ri-formatHint{color:var(--ri-databinding-text-subtle, #64748b)}.ri-popoverHeader{padding:12px 16px}.ri-popoverLabel{margin:0 0 8px;font-size:11px;font-weight:700;color:#6b7280;text-transform:uppercase;letter-spacing:.16em}.ri-inlineRow{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:8px}.ri-colorCode{font-size:12px;color:#9ca3af;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;text-transform:uppercase}.ri-secondaryButton{border:1px solid #e5e7eb;background:#f3f4f6;color:#374151;border-radius:8px;padding:6px 10px;font-size:12px;cursor:pointer;transition:background-color .2s ease}.ri-secondaryButton:hover{background:#e5e7eb}.ri-materialBody{display:flex;flex-direction:column;gap:12px;padding-left:12px;padding-right:12px;padding-bottom:12px}.ri-previewFrame{position:relative;height:112px;border-radius:12px;overflow:hidden;border:1px solid #e5e7eb}.ri-previewImage{width:100%;height:100%;object-fit:cover;display:block}.ri-previewCaption{position:absolute;left:0;right:0;bottom:0;background:#0006;padding:4px 8px;color:#fff;font-size:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ri-emptyState{height:112px;border-radius:12px;border:2px dashed #e5e7eb;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;color:#d1d5db;text-align:center}.ri-uploadButton{width:100%;border:0;border-radius:10px;background:#111827;color:#fff;padding:10px 12px;font-size:12px;font-weight:600;cursor:pointer;transition:background-color .2s ease}.ri-uploadButton:hover{background:#374151}.ri-removeButton{width:100%;border-radius:10px;border:1px solid #e5e7eb;background:#fff;color:#6b7280;padding:8px 12px;font-size:12px;cursor:pointer;transition:background-color .2s ease}.ri-removeButton:hover{background:#f9fafb}.ri-formatHint{margin:0;text-align:center;font-size:10px;color:#d1d5db}.ri-texturePosition{display:flex;flex-direction:column;gap:8px;padding-top:8px;border-top:1px solid #e5e7eb}.ri-texturePositionLabel{margin:0;font-size:11px;font-weight:600;color:#6b7280}.ri-texturePositionGrid{display:grid;grid-template-columns:1fr 1fr;gap:8px}.ri-texturePositionField{display:flex;flex-direction:column;gap:4px;font-size:11px;color:#6b7280}.ri-texturePositionField--full{grid-column:1 / -1}.ri-texturePositionField input[type=number]{width:100%;border-radius:8px;border:1px solid #e5e7eb;background:#fff;color:#111827;padding:6px 8px;font-size:12px}.ri-texturePositionSliderRow{display:flex;align-items:center;gap:8px}.ri-texturePositionSliderRow input[type=range]{flex:1}.ri-texturePositionSliderRow input[type=number]{width:56px;border-radius:8px;border:1px solid #e5e7eb;background:#fff;color:#111827;padding:6px 8px;font-size:12px}.ri-texturePositionHint{margin:0;font-size:11px;line-height:1.4;color:#9ca3af}.ri-popover--inline .ri-texturePosition{border-color:var(--ri-databinding-border-strong, rgba(255, 255, 255, .08))}.ri-popover--inline .ri-texturePositionLabel,.ri-popover--inline .ri-texturePositionField,.ri-popover--inline .ri-texturePositionHint{color:var(--ri-databinding-text-muted, #94a3b8)}.ri-popover--inline .ri-texturePositionField input[type=number],.ri-popover--inline .ri-texturePositionSliderRow input[type=number]{background:var(--ri-databinding-surface-hover, rgba(255, 255, 255, .06));border-color:var(--ri-databinding-border-strong, rgba(255, 255, 255, .08));color:var(--ri-databinding-text, #e2e8f0)}.ri-buttonContainer{display:flex;justify-content:space-between;align-items:center;gap:8px;position:absolute;bottom:12px;left:12px;right:12px;z-index:10}.ri-tourControls{display:flex;gap:6px;align-items:center;flex-shrink:0}.ri-rightControls{display:flex;gap:6px;align-items:center;flex-shrink:0;margin-left:auto}.ri-rightControls:only-child{margin-left:auto}.ri-navButtonSingle,.ri-tourButton,.ri-resetButton,.ri-downloadButton{height:34px;background:#141414d1;border:1px solid rgba(255,255,255,.12);color:#ffffffbf!important;border-radius:8px;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);cursor:pointer;transition:background .15s ease,color .15s ease,border-color .15s ease,transform .15s ease;user-select:none;-webkit-tap-highlight-color:transparent}.ri-navButtonSingle:hover:not(:disabled),.ri-tourButton:hover:not(:disabled),.ri-resetButton:hover:not(:disabled){background:#282828eb;color:#fff;border-color:#ffffff40}.ri-navButtonSingle:active:not(:disabled),.ri-tourButton:active:not(:disabled),.ri-resetButton:active:not(:disabled){background:#38dbf0;color:#06343c;border-color:#38dbf0}.ri-navButtonSingle:disabled,.ri-tourButton:disabled,.ri-resetButton:disabled{opacity:.45;cursor:not-allowed}.ri-navButtonSingle{padding:0 16px;font-size:13px;font-weight:500;display:flex;align-items:center;gap:8px;white-space:nowrap}.ri-tourButton{padding:0 12px;font-size:13px;font-weight:500;display:flex;align-items:center;gap:4px;white-space:nowrap}.ri-tourButton svg{width:15px;height:15px;flex-shrink:0}.ri-tourButton--stop{border-color:#f446;color:#ff6b6b}.ri-tourButton--stop:hover:not(:disabled){background:#ff444426;border-color:#f449;color:#ff6b6b}.ri-tourButton--stop:active:not(:disabled){background:#f44;color:#fff;border-color:#f44}.ri-tourButton--next{border-color:#38dbf04d;color:#38dbf0}.ri-tourButton--next:hover:not(:disabled){background:#38dbf01f;border-color:#38dbf080;color:#38dbf0}.ri-tourButton--next:active:not(:disabled){background:#38dbf0;color:#06343c;border-color:#38dbf0}.mv-rightControls{position:absolute;bottom:5px;right:5px;z-index:10000;display:flex;align-items:center;gap:5px;pointer-events:auto}.mv-resetButton,.mv-fullscreenButton,.mv-controllersButton,.mv-downloadButton{height:34px;display:inline-flex;align-items:center;justify-content:center;gap:6px;border:1px solid rgba(255,255,255,.12);border-radius:8px;background:#141414d1;color:#ffffffbf;font-size:13px;font-weight:500;white-space:nowrap;cursor:pointer;user-select:none;-webkit-tap-highlight-color:transparent;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);transition:background .15s ease,color .15s ease,border-color .15s ease,transform .15s ease,opacity .15s ease}.mv-resetButton:hover:not(:disabled),.mv-fullscreenButton:hover:not(:disabled),.mv-controllersButton:hover:not(:disabled),.mv-downloadButton:hover:not(:disabled){background:#282828eb;color:#fff;border-color:#ffffff40}.mv-resetButton:active:not(:disabled),.mv-fullscreenButton:active:not(:disabled),.mv-controllersButton:active:not(:disabled),.mv-downloadButton:active:not(:disabled){background:#38dbf0;color:#06343c;border-color:#38dbf0}.mv-resetButton:disabled,.mv-fullscreenButton:disabled,.mv-controllersButton:disabled,.mv-downloadButton:disabled{opacity:.45;cursor:not-allowed}.mv-resetButton:focus-visible,.mv-fullscreenButton:focus-visible,.mv-controllersButton:focus-visible,.mv-downloadButton:focus-visible{outline:2px solid rgba(255,255,255,.5);outline-offset:2px}.mv-resetButton,.mv-fullscreenButton{width:34px;padding:0;flex-shrink:0}.mv-resetButton svg,.mv-fullscreenButton svg{width:15px;height:15px;flex-shrink:0;pointer-events:none}.mv-fullscreenWrapper{display:inline-flex}.mv-fullscreenError{position:absolute;bottom:calc(100% + 8px);right:0;width:240px;max-width:calc(100vw - 20px);padding:10px 12px;border:1px solid rgba(255,255,255,.14);border-radius:8px;background:#141414f2;color:#fff;font-size:12px;line-height:1.5}.mv-controllersWrapper{position:relative;display:inline-flex;flex-direction:column;align-items:stretch}.mv-controllersButton{width:34px;padding:0;flex-shrink:0}.mv-controllersButton svg{width:15px;height:15px;flex-shrink:0;pointer-events:none}.mv-controllersMenu{position:absolute;bottom:calc(100% + 6px);right:0;min-width:168px;display:flex;flex-direction:column;padding:6px;border:1px solid rgba(255,255,255,.14);border-radius:10px;background:#141414eb;box-shadow:0 16px 32px #0f172a66;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);z-index:100;animation:mv-menuReveal .12s ease}.mv-controllersMenuItem{display:flex;align-items:center;gap:9px;width:100%;padding:9px 12px;border:none;border-radius:6px;background:transparent;color:#fff;font-size:13px;font-weight:400;text-align:left;white-space:nowrap;cursor:pointer;transition:background .1s ease,color .1s ease}.mv-controllersMenuItem:hover:not(:disabled){background:#ffffff1a}.mv-controllersMenuItem--active{background:#38dbf026;color:#38dbf0;font-weight:600}.mv-controllersMenuItem--active:hover{background:#38dbf038}.mv-downloadWrapper{position:relative;display:inline-flex;flex-direction:column;align-items:stretch}.mv-downloadButton{padding:0 16px;flex-shrink:0}.mv-downloadButton svg{width:15px;height:15px;flex-shrink:0;pointer-events:none}.mv-downloadButton__spinner{display:inline-block;width:13px;height:13px;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:mv-spin .7s linear infinite;flex-shrink:0}.mv-downloadMenu{position:absolute;bottom:calc(100% + 6px);right:0;min-width:168px;display:flex;flex-direction:column;padding:6px;border:1px solid rgba(255,255,255,.14);border-radius:10px;background:#141414eb;box-shadow:0 16px 32px #0f172a66;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);overflow:hidden;z-index:100;animation:mv-menuReveal .12s ease}.mv-downloadMenuItem{display:flex;align-items:center;gap:9px;width:100%;padding:10px 14px;border:none;border-radius:6px;background:transparent;color:#fff;font-size:13px;font-weight:400;text-align:left;white-space:nowrap;cursor:pointer;transition:background .1s ease}.mv-downloadMenuItem:hover:not(:disabled){background:#ffffff1a}.mv-downloadMenuItem:disabled{opacity:.4;cursor:not-allowed}.mv-downloadMenuItem select{margin-left:auto;padding:4px 6px;border:1px solid rgba(255,255,255,.2);border-radius:4px;background:#242424;color:#fff;font:inherit}.mv-downloadMenuDivider{height:1px;margin:0 10px;background:#ffffff1a}.mv-downloadMenuNotice{max-width:220px;padding:8px 14px 11px;color:#fca5a5;font-size:11px;line-height:1.4}@keyframes mv-menuReveal{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@keyframes mv-spin{to{transform:rotate(360deg)}}@media(max-width:768px){.mv-rightControls{flex-wrap:wrap;gap:6px}.mv-downloadButton{padding:0 10px;font-size:12px}}@media(max-width:480px){.mv-downloadButton{padding:0 10px;font-size:12px}.mv-downloadButton span{display:none}}.ri-annotationMarker{position:relative;width:36px;height:36px;border-radius:50%;background:#141414d1;border:2px solid rgba(255,255,255,.9);color:#fff;display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:700;cursor:pointer;z-index:20;user-select:none;box-shadow:0 2px 8px #00000073;pointer-events:auto;transition:opacity .3s ease,transform .3s ease}.ri-annotationMarker:hover{transform:scale(1.08);box-shadow:0 12px 28px #0f172a2e;background:#282828eb}.ri-annotationPopup{position:absolute;width:min(270px,calc(100vw - 32px));background:#141414d9;border:1px solid rgba(255,255,255,.12);border-radius:16px;padding:16px;z-index:30;display:flex;flex-direction:column;gap:12px;box-shadow:0 24px 48px #0f172a2e;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}.ri-annotationInput,.ri-annotationTextarea{width:100%;border:1px solid rgba(255,255,255,.12);background:#ffffff0d;color:#e5e7eb;border-radius:10px;padding:10px 12px;outline:none;font-family:inherit;transition:border-color .2s ease,box-shadow .2s ease}.ri-annotationInput{font-size:14px;font-weight:500}.ri-annotationTextarea{font-size:13px;resize:vertical;min-height:110px}.ri-annotationInput:focus,.ri-annotationTextarea:focus{border-color:#38dbf0;box-shadow:0 0 0 3px #38dbf01f}.ri-annotationActions{display:flex;align-items:center;gap:10px}.ri-annotationOkBtn{border:0;border-radius:8px;background:#38dbf0cc;color:#06343c;padding:8px 18px;font-size:13px;font-weight:600;cursor:pointer;transition:background-color .2s ease,opacity .2s ease}.ri-annotationOkBtn:hover:not(:disabled){background:#38dbf0}.ri-annotationOkBtn:disabled,.ri-annotationOkBtn.disabled{opacity:.5;cursor:not-allowed}.ri-annotationCancelBtn{border:1px solid rgba(255,255,255,.12);background:transparent;color:#9ca3af;border-radius:8px;padding:8px 12px;font-size:13px;cursor:pointer;transition:background-color .2s ease,border-color .2s ease}.ri-annotationCancelBtn:hover{background:#ffffff0d;border-color:#fff3}.ri-annotationIcons{margin-left:auto;display:flex;align-items:center;gap:12px;color:#9ca3af}.ri-annotationIcons svg{flex-shrink:0}.ri-viewAnnotationPopup{position:relative;background:#141414d9;border:1px solid rgba(255,255,255,.12);border-radius:8px;padding:12px 16px;min-width:200px;max-width:min(280px,calc(100vw - 48px));box-shadow:0 8px 24px #00000080;pointer-events:auto;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);animation:ri-viewAnnotationFadeIn .15s ease-out;margin-left:24px;margin-top:-20px;isolation:isolate;z-index:1000}.ri-viewAnnotationClose{background:transparent;border:none;color:#b7bdc6;cursor:pointer;font-size:18px;padding:0 4px;transition:color .2s;line-height:1}.ri-viewAnnotationClose:hover{color:#e2e8f0}.ri-viewAnnotationDescription{margin:0;color:#cbd5e1;font-size:13px;line-height:1.4;word-wrap:break-word}@keyframes ri-viewAnnotationFadeIn{0%{opacity:0;transform:translateY(-6px) scale(.96)}to{opacity:1;transform:translateY(0) scale(1)}}.ri-annotationNavSingle{position:absolute;bottom:120px;left:50%;transform:translate(-50%);z-index:10;display:flex;flex-direction:column;align-items:center;gap:10px;pointer-events:none}.ri-annotationNavSingle>*{pointer-events:auto}.ri-navBadge{background:#ffffff1a;padding:2px 10px;border-radius:4px;font-size:12px;font-weight:400;color:#ffffffb3}.ri-annotationTitleHint{background:#000000b3;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);color:#fff;padding:8px 20px;border-radius:8px;font-size:13px;border:1px solid rgba(255,255,255,.08);text-align:center;max-width:350px;animation:slideUp .3s ease}.ri-annotationHintTitle{font-weight:600;color:#e5e7eb}.ri-annotationHintDesc{font-size:12px;opacity:.6;margin-top:2px;color:#d1d5db}@keyframes slideUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.ri-canvasArea .bb-loadingOverlay{position:absolute;inset:0;z-index:12;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;padding:24px;text-align:center;border-radius:14px;background:#0f172a75;backdrop-filter:blur(1px)}.ri-canvasArea .bb-loadingSpinner{width:40px;height:40px;border-radius:999px;border:3px solid rgba(226,232,240,.24);border-top-color:#93c5fd;animation:bb-spin .8s linear infinite}.ri-canvasArea .bb-loadingMessage{max-width:320px;color:#f7f8f9;font-size:13px;font-weight:600;line-height:1.5}.ri-canvasArea .bb-loadingProgressRow{display:flex;align-items:center;gap:8px;width:100%;max-width:240px}.ri-canvasArea .bb-loadingProgress{flex:1;height:6px;border-radius:999px;background:#e2e8f03d;overflow:hidden}.ri-canvasArea .bb-loadingProgress__bar{height:100%;border-radius:inherit;background:#93c5fd}.ri-canvasArea .bb-loadingProgress__label{flex-shrink:0;min-width:34px;text-align:right;color:#f7f8f9;font-size:12px;font-weight:600;font-variant-numeric:tabular-nums}.ri-largeModelBanner{position:absolute;top:12px;left:50%;transform:translate(-50%);z-index:20;display:flex;align-items:center;gap:8px;padding:7px 12px 7px 10px;border-radius:8px;background:#1e1400e0;border:1px solid rgba(251,191,36,.35);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);color:#fbbf24;font-size:12px;font-weight:500;line-height:1.4;pointer-events:auto;max-width:calc(100% - 32px);white-space:normal;text-align:center}.ri-largeModelBanner--offset{top:64px}.ri-largeModelBanner__icon{flex-shrink:0}.ri-largeModelBanner__dismiss{flex-shrink:0;display:flex;align-items:center;justify-content:center;margin-left:4px;padding:2px;background:none;border:none;border-radius:4px;color:#fbbf24b3;cursor:pointer;transition:color .15s ease,background .15s ease}.ri-largeModelBanner__dismiss:hover{color:#fbbf24;background:#fbbf241f}.ri-uvCheckerBanner{position:absolute;top:12px;right:12px;z-index:20;display:flex;align-items:center;gap:8px;max-width:min(360px,calc(100% - 24px));padding:7px 11px;border:1px solid rgba(244,114,182,.4);border-radius:8px;background:#280a23e6;color:#f9a8d4;font-size:12px;font-weight:500;line-height:1.4;text-align:left;pointer-events:none;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}.ri-uvCheckerBanner__icon{flex-shrink:0}@media(max-width:768px){.ri-xrTools{gap:6px}.ri-xrButton{height:34px;gap:6px;padding:0 8px;font-size:11px}.ri-xrButton svg{width:14px;height:14px}.ri-xrButtonPrefix{display:none}.ri-annotationNavSingle{bottom:100px}.ri-navButtonSingle{padding:8px 20px;font-size:13px;min-width:110px}.ri-annotationTitleHint{padding:6px 14px;font-size:12px;max-width:250px}.ri-viewAnnotationPopup{min-width:160px;max-width:220px;padding:10px 12px}.ri-viewAnnotationTitle{font-size:13px}.ri-viewAnnotationDescription{font-size:12px}.ri-buttonContainer{flex-wrap:wrap;gap:6px}.ri-tourControls,.ri-rightControls{flex-wrap:wrap}}@media(max-width:480px){.ri-xrTools{gap:5px}.ri-xrButton{height:34px;gap:5px;font-size:10px}.ri-xrButton svg{width:13px;height:13px}.ri-annotationNavSingle{bottom:80px}.ri-navButtonSingle{padding:6px 16px;font-size:12px;min-width:90px;gap:6px}.ri-annotationTitleHint{padding:4px 10px;font-size:11px;max-width:200px}.ri-navBadge{font-size:10px;padding:1px 6px}.ri-tourButton{padding:0 8px;font-size:12px}.ri-tourButton span{display:none}.ri-downloadButton{padding:0 10px;font-size:12px}.ri-downloadButton span{display:none}}.ri-contextRecovery{position:absolute;inset:0;z-index:20000;display:flex;align-items:center;justify-content:center;padding:20px;background:#0c0e12e6}.ri-contextRecovery__card{width:min(380px,100%);padding:24px;border:1px solid rgba(255,255,255,.14);border-radius:12px;background:#1c1c1d;color:#f3f4f6;box-shadow:0 18px 42px #0000004d}.ri-contextRecovery__card h2{margin:12px 0 8px;font-size:18px;line-height:1.3}.ri-contextRecovery__card p{margin:0 0 18px;color:#b8bec9;font-size:14px;line-height:1.6}.ri-contextRecovery__card button{display:inline-flex;align-items:center;gap:8px;padding:9px 12px;border:1px solid rgba(255,255,255,.25);border-radius:8px;background:#f3f4f6;color:#111827;font:inherit;font-size:13px;font-weight:600;cursor:pointer}.ri-contextRecovery__card button:hover:not(:disabled){background:#fff}.ri-contextRecovery__card button:focus-visible{outline:2px solid #38dbf0;outline-offset:3px}.ri-contextRecovery__card button:disabled{opacity:.5;cursor:wait}.ri-loadError{position:absolute;inset:0;z-index:5;display:flex;align-items:center;justify-content:center;padding:16px;pointer-events:none}.ri-loadError__card{display:flex;flex-direction:column;gap:8px;width:min(460px,100%);padding:18px 22px;border-radius:10px;color:var(--ri-license-overlay-error-text, #c0392b);background:var(--ri-license-overlay-error-bg, rgba(255, 245, 244, .96));border:1px solid var(--ri-license-overlay-error-border, rgba(192, 57, 43, .2));box-shadow:0 18px 42px #0f172a1f;pointer-events:auto}.ri-loadError__header{display:flex;align-items:center;gap:8px}.ri-loadError__title{font-size:14px;font-weight:700;line-height:1.3}.ri-loadError__detail{margin:0;font-size:13px;line-height:1.5;color:var(--ri-license-overlay-text, #374151)}.ri-loadError__source,.ri-loadError__technical{margin:0;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;line-height:1.45;overflow-wrap:anywhere;color:var(--ri-license-overlay-text, #374151);opacity:.75}.ri-loadError__technical{opacity:.55}.ri-overlay{position:absolute;inset:0;z-index:5;pointer-events:none}.ri-overlay>*{pointer-events:auto}.ri-license-overlay{display:flex;flex-direction:column;gap:10px;min-width:min(420px,calc(100% - 32px));max-width:min(460px,calc(100% - 32px));padding:20px 28px;border-radius:10px;color:var(--ri-license-overlay-text, #374151);background:var(--ri-license-overlay-bg, rgba(0, 0, 0, .04));border:1px solid var(--ri-license-overlay-border, rgba(0, 0, 0, .08));box-shadow:0 18px 42px #0f172a14}.ri-license-overlay__header{display:flex;align-items:center;gap:10px}.ri-license-overlay__statusDot{width:10px;height:10px;border-radius:999px;background:currentColor;opacity:.7;flex-shrink:0}.ri-license-overlay__icon{flex-shrink:0}.ri-license-overlay__title{font-size:14px;font-weight:700;line-height:1.2}.ri-license-overlay__message{margin:0;font-size:14px;font-weight:500;line-height:1.5}.ri-license-overlay--error{color:var(--ri-license-overlay-error-text, #c0392b);background:var(--ri-license-overlay-error-bg, rgba(192, 57, 43, .06));border:1px solid var(--ri-license-overlay-error-border, rgba(192, 57, 43, .2))}.ri-annotationMarker--hovered{transform:scale(1.08);box-shadow:0 12px 28px #0f172a2e;background:#282828eb}.ri-viewAnnotationHeader{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.ri-viewAnnotationTitle{margin:0;color:#e2e8f0;font-size:14px;font-weight:600}.mc__wrapper{position:absolute;bottom:-10px;left:50%;transform:translate(-50%);display:flex;flex-direction:column;align-items:center;z-index:100}.mc__dpad{display:flex;flex-direction:column;align-items:center;gap:2px;margin-bottom:20px}.mc__middle-row{display:flex;align-items:center;gap:2px}.mc__joystick{width:60px;height:60px;flex-shrink:0;background:radial-gradient(circle at 40% 35%,#ffffff12,#0000008c);border-radius:50%;border:1.5px solid rgba(255,255,255,.15);position:relative;cursor:grab;touch-action:none;transition:border-color .2s ease,box-shadow .2s ease;margin:4px;box-shadow:0 4px 16px #00000080,0 0 0 4px #ffffff08}.mc__joystick:hover{border-color:#ffffff47;box-shadow:0 4px 20px #0000008c,0 0 0 4px #4285f414}.mc__joystick:active{cursor:grabbing;border-color:#4285f499;box-shadow:0 2px 12px #00000080,0 0 4px #4285f426}.mc__knob{position:absolute;top:50%;left:50%;width:34px;height:34px;margin-left:-17px;margin-top:-17px;background:linear-gradient(145deg,#5a9bf5,#1a66d9);border-radius:50%;cursor:grab;box-shadow:0 3px 10px #1a66d980,0 1px #ffffff40 inset;transition:transform .04s linear,box-shadow .1s ease;border:1.5px solid rgba(255,255,255,.45)}.mc__joystick:active .mc__knob{box-shadow:0 2px 16px #4285f4b3,0 1px #ffffff40 inset;animation:pulse .6s ease infinite}.mc__arrow{padding:0;margin:0;background:transparent;border:none;border-radius:0;box-shadow:none;outline:none;-webkit-appearance:none;appearance:none;cursor:pointer;display:flex;align-items:center;justify-content:center;touch-action:manipulation;user-select:none;-webkit-tap-highlight-color:transparent;transition:transform .1s ease,filter .15s ease;overflow:visible}.mc__arrow svg{display:block!important;pointer-events:none!important;user-select:none!important;-webkit-user-select:none!important;overflow:visible!important}.mc__arrow--up{margin-bottom:2px}.mc__arrow--up:hover{transform:scale(1.15) translateY(-2px);filter:drop-shadow(0 4px 12px rgba(66,133,244,.8))}.mc__arrow--up:active{transform:scale(.92) translateY(2px)}.mc__arrow--down{margin-top:2px}.mc__arrow--down:hover{transform:scale(1.15) translateY(2px);filter:drop-shadow(0 -4px 12px rgba(66,133,244,.8))}.mc__arrow--down:active{transform:scale(.92) translateY(-2px)}.mc__arrow--left{margin-right:2px}.mc__arrow--left:hover{transform:scale(1.15) translate(-2px);filter:drop-shadow(4px 0 12px rgba(66,133,244,.8))}.mc__arrow--left:active{transform:scale(.92) translate(2px)}.mc__arrow--right{margin-left:2px}.mc__arrow--right:hover{transform:scale(1.15) translate(2px);filter:drop-shadow(-4px 0 12px rgba(66,133,244,.8))}.mc__arrow--right:active{transform:scale(.92) translate(-2px)}@keyframes pulse{0%,to{box-shadow:0 2px 16px #4285f499,0 1px #ffffff40 inset;opacity:.85}50%{box-shadow:0 4px 24px #4285f4f2,0 1px #ffffff40 inset;opacity:1}}@media(max-width:768px){.mc__wrapper{bottom:-5px}.mc__joystick{width:68px;height:68px}.mc__knob{width:30px;height:30px;margin-left:-15px;margin-top:-15px}.mc__arrow--up:hover{transform:scale(1.1) translateY(-1px)}.mc__arrow--down:hover{transform:scale(1.1) translateY(1px)}.mc__arrow--left:hover{transform:scale(1.1) translate(-1px)}.mc__arrow--right:hover{transform:scale(1.1) translate(1px)}}@media(max-width:480px){.mc__joystick{width:56px;height:56px}.mc__knob{width:26px;height:26px;margin-left:-13px;margin-top:-13px}.mc__arrow--up{margin-bottom:1px}.mc__arrow--down{margin-top:1px}.mc__arrow--left{margin-right:1px}.mc__arrow--right{margin-left:1px}}@media(hover:none){.mc__arrow:hover{transform:none!important;filter:none!important}.mc__arrow:active{transform:scale(.92)!important}}.left-panel{width:280px;min-height:0;background:var(--ri-databinding-bg, #111318);border-right:1px solid var(--ri-databinding-border, rgba(255, 255, 255, .06));display:flex;flex-direction:column;padding:24px 18px;overflow-y:auto;font-family:var( --ri-databinding-font-family, "Inter", "Segoe UI", sans-serif );flex-shrink:0;transition:margin-left .45s cubic-bezier(.4,0,.2,1);box-shadow:var(--ri-databinding-shadow, 4px 0 24px rgba(0, 0, 0, .35))}.left-panel--open{margin-left:0}.left-panel--closed{margin-left:-280px}.left-panel::-webkit-scrollbar{width:4px}.left-panel::-webkit-scrollbar-track{background:transparent}.left-panel::-webkit-scrollbar-thumb{background:var(--ri-databinding-border-strong, rgba(255, 255, 255, .08));border-radius:4px}.left-panel__header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;padding-bottom:14px;border-bottom:1px solid var(--ri-databinding-border-strong, rgba(255, 255, 255, .08))}.left-panel__title{font-size:14px;font-weight:600;color:var(--ri-databinding-text, #f1f5f9);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding-right:8px;margin:0;letter-spacing:.02em}.left-panel__close-btn{width:26px;height:26px;display:flex;align-items:center;justify-content:center;background:var(--ri-databinding-surface, rgba(255, 255, 255, .03));border:1px solid var(--ri-databinding-border-strong, rgba(255, 255, 255, .08));border-radius:6px;color:var(--ri-databinding-text-subtle, #64748b);font-size:13px;flex-shrink:0;cursor:pointer;transition:background .15s ease,color .15s ease,border-color .15s ease}.left-panel__close-btn:hover{background:var(--ri-databinding-surface-hover, rgba(255, 255, 255, .06));color:var(--ri-databinding-text-hover, #cbd5e1);border-color:var(--ri-databinding-border-hover, rgba(255, 255, 255, .15))}.left-panel__data{padding:12px 6px;background:var(--ri-databinding-surface, rgba(255, 255, 255, .03));border:1px solid var(--ri-databinding-border-strong, rgba(255, 255, 255, .08));border-radius:10px;font-size:11px;font-family:var( --ri-databinding-mono-font-family, "JetBrains Mono", "Fira Code", "Menlo", monospace );color:var(--ri-databinding-text-muted, #94a3b8);line-height:1.7;overflow-x:auto;margin-bottom:18px}.left-panel__divider{border:none;border-top:1px solid var(--ri-databinding-border, rgba(255, 255, 255, .06));margin-bottom:16px}.left-panel__actions-label{font-size:10px;font-weight:600;color:var(--ri-databinding-text-faint, #475569);text-transform:uppercase;letter-spacing:.12em;margin-bottom:10px}.left-panel__actions-list{display:flex;flex-direction:column;gap:6px}.left-panel__action-extra{display:grid;grid-template-rows:0fr;opacity:0;margin-top:0;transition:grid-template-rows .28s cubic-bezier(.4,0,.2,1),opacity .2s ease,margin-top .28s cubic-bezier(.4,0,.2,1)}.left-panel__action-extra--open{grid-template-rows:1fr;opacity:1;margin-top:4px}.left-panel__action-extra-inner{overflow:hidden;min-height:0}.left-panel__action-btn{position:relative;padding:9px 14px;border-radius:8px;text-align:left;font-size:13px;font-weight:500;cursor:pointer;overflow:hidden;border:1px solid var(--ri-databinding-border-strong, rgba(255, 255, 255, .08));background:var(--ri-databinding-surface, rgba(255, 255, 255, .03));color:var(--ri-databinding-text-muted, #94a3b8);letter-spacing:.01em}.left-panel__action-btn:active{transform:scale(.97)}.left-panel__action-btn--active:before{content:"";position:absolute;left:0;top:20%;bottom:20%;width:3px;background:var(--ri-databinding-accent, #93c5fd);border-radius:0 3px 3px 0;box-shadow:0 0 8px var(--ri-databinding-accent-glow, rgba(147, 197, 253, .8))}.left-panel__action-btn--active:hover{background:var( --ri-databinding-accent-gradient, linear-gradient(135deg, #1e3a8a 0%, #1d4ed8 60%, #2563eb 100%) );border-color:var(--ri-databinding-accent-border, rgba(96, 165, 250, .55))}.left-panel__action-btn--active:active{transform:scale(.97);background:var( --ri-databinding-accent-gradient-active, linear-gradient(135deg, #1e3a8a 0%, #1e40af 100%) )}.left-panel__data{display:flex;flex-direction:column;gap:2px;margin-bottom:18px}.left-panel__data-row{display:flex;align-items:baseline;justify-content:space-between;gap:10px;padding:7px 10px;border-radius:7px;background:var(--ri-databinding-surface, rgba(255, 255, 255, .03));border:1px solid transparent;transition:background .15s ease,border-color .15s ease}.left-panel__data-row:hover{background:var(--ri-databinding-surface-hover, rgba(255, 255, 255, .06));border-color:var(--ri-databinding-border-strong, rgba(255, 255, 255, .08))}.left-panel__data-key{font-size:11px;font-weight:600;color:var(--ri-databinding-text-faint, #475569);text-transform:uppercase;letter-spacing:.07em;white-space:nowrap;flex-shrink:0}.left-panel__data-value{font-size:12px;font-family:var( --ri-databinding-mono-font-family, "JetBrains Mono", "Fira Code", "Menlo", monospace );text-align:right;overflow-wrap:anywhere;word-break:break-word;min-width:0}.left-panel__data-group{display:flex;flex-direction:column;gap:2px;padding:7px 10px;border-radius:7px;background:var(--ri-databinding-surface, rgba(255, 255, 255, .03));border:1px solid transparent;transition:background .15s ease,border-color .15s ease}.left-panel__data-group:hover{background:var(--ri-databinding-surface-hover, rgba(255, 255, 255, .06));border-color:var(--ri-databinding-border-strong, rgba(255, 255, 255, .08))}.left-panel__data-children{display:flex;flex-direction:column;gap:2px;margin-top:4px;padding-left:10px;border-left:1px solid var(--ri-databinding-border-strong, rgba(255, 255, 255, .08))}.left-panel__data-children .left-panel__data-row,.left-panel__data-children .left-panel__data-group{padding:3px 0;background:transparent;border-color:transparent}.left-panel__data-children .left-panel__data-row:hover,.left-panel__data-children .left-panel__data-group:hover{background:transparent}@media(max-width:900px){.left-panel{width:50vw}.left-panel--open{margin-left:0}.left-panel--closed{margin-left:-50vw}.left-panel{padding:18px 12px}.left-panel__data-row{flex-direction:column;align-items:stretch;gap:2px;padding:6px 8px}.left-panel__data-group{padding:6px 8px}.left-panel__data-value{text-align:left;font-size:11.5px}.left-panel__data-children{padding-left:8px}}.ri-sidepanel-wrap{height:100%;transition:width .45s cubic-bezier(.4,0,.2,1);overflow:visible}.ri-sidepanel-wrap--open{width:300px;flex-shrink:0}.ri-sidepanel-wrap--closed{width:0;flex-shrink:0;overflow:hidden}.ri-sidepanel__open-btn{position:absolute;top:12px;right:12px;display:flex;align-items:center;gap:7px;padding:7px 13px;border-radius:7px;border:1px solid var(--ri-sidepanel-border-strong, rgba(255, 255, 255, .08));background:var(--ri-sidepanel-open-btn-bg, rgba(20, 20, 20, .82));cursor:pointer;font-size:13px;font-weight:500;color:var(--ri-sidepanel-text-muted, #94a3b8);z-index:190;transition:background .15s}.ri-sidepanel__open-btn:hover{background:var(--ri-sidepanel-open-btn-bg-hover, #27282b7e)}.ri-sidepanel{position:absolute;top:0;right:0;width:300px;height:100%;background:var(--ri-sidepanel-bg, #141824);display:flex;flex-direction:column;font-family:var( --ri-sidepanel-font-family, Inter, "Segoe UI", Helvetica, Arial, sans-serif );transform:translate(100%);transition:transform .45s cubic-bezier(.4,0,.2,1);z-index:200;border-left:1px solid var(--ri-sidepanel-border, rgba(255, 255, 255, .06));box-shadow:var(--ri-sidepanel-shadow-right, -4px 0 24px rgba(0, 0, 0, .35))}.ri-sidepanel--open{transform:translate(0)}.ri-sidepanel--closed{transform:translate(100%)}.ri-sidepanel__header{padding:24px 20px 16px;border-bottom:1px solid var(--ri-sidepanel-border-strong, rgba(255, 255, 255, .08))}.ri-sidepanel__header-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:4px}.ri-sidepanel__eyebrow{font-size:10px;font-weight:700;letter-spacing:.12em;color:var(--ri-sidepanel-text-subtle, #64748b);text-transform:uppercase}.ri-sidepanel__title{font-size:22px;font-weight:700;color:var(--ri-sidepanel-text, #f1f5f9);margin:0;line-height:1.2}.ri-sidepanel__close-btn{display:flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:8px;border:1px solid var(--ri-sidepanel-border-strong, rgba(255, 255, 255, .08));background:var(--ri-sidepanel-surface, rgba(255, 255, 255, .05));cursor:pointer;color:var(--ri-sidepanel-text-muted, #94a3b8);transition:background .15s,color .15s;flex-shrink:0}.ri-sidepanel__close-btn:hover{background:var(--ri-sidepanel-surface-hover, rgba(255, 255, 255, .1));color:var(--ri-sidepanel-text, #f1f5f9)}.ri-sidepanel__search-wrap{padding:14px 16px;border-bottom:1px solid var(--ri-sidepanel-border-strong, rgba(255, 255, 255, .08))}.ri-sidepanel__search{width:100%;padding:10px 14px;border-radius:10px;border:1px solid var(--ri-sidepanel-border-strong, rgba(255, 255, 255, .08));background:var(--ri-sidepanel-surface, rgba(255, 255, 255, .05));color:var(--ri-sidepanel-text, #e2e8f0);font-size:13px;outline:none;box-sizing:border-box;transition:border-color .15s,background .15s}.ri-sidepanel__search::placeholder{color:var(--ri-sidepanel-placeholder, #475569)}.ri-sidepanel__search:focus{border-color:var(--ri-sidepanel-border-active, rgba(255, 255, 255, .18));background:var(--ri-sidepanel-surface-hover, rgba(255, 255, 255, .08))}.ri-sidepanel__list{display:flex;flex-direction:column;padding:10px 0;overflow-y:auto;flex:1}.ri-sidepanel__list::-webkit-scrollbar{width:4px}.ri-sidepanel__list::-webkit-scrollbar-track{background:transparent}.ri-sidepanel__list::-webkit-scrollbar-thumb{background:var(--ri-sidepanel-surface-hover, rgba(255, 255, 255, .1));border-radius:4px}.ri-sidepanel__row{display:flex;justify-content:space-between;padding:12px 20px;cursor:pointer;width:100%;border:none;background:transparent;color:inherit;font:inherit;text-align:left;appearance:none;-webkit-appearance:none;transition:background .12s;border-bottom:1px solid var(--ri-sidepanel-divider, rgba(255, 255, 255, .04))}.ri-sidepanel__row:hover,.ri-sidepanel__row--hovered{background:var(--ri-sidepanel-surface, rgba(255, 255, 255, .05))}.ri-sidepanel__row--selected{background:var(--ri-sidepanel-accent-soft, rgba(59, 130, 246, .12))}.ri-sidepanel__label{font-size:14px;font-weight:600;color:var(--ri-sidepanel-text-muted, #94a3b8);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ri-sidepanel__label--hovered,.ri-sidepanel__label--selected{color:var(--ri-sidepanel-text-emphasis, #ffffff)}.ri-sidepanel__meta{font-size:12px;color:var(--ri-sidepanel-text-muted, #94a3b8);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ri-sidepanel__vis-btn{display:flex;align-items:center;flex-shrink:0;cursor:pointer;background:none;border:none;padding:0;margin-left:10px}.ri-sidepanel__checkbox{width:16px;height:16px;border-radius:4px;border:1.5px solid var(--ri-sidepanel-border-active, rgba(255, 255, 255, .2));background:transparent;display:flex;align-items:center;justify-content:center;transition:background .15s,border-color .15s}.ri-sidepanel__checkbox--checked{background:var(--ri-sidepanel-accent, #3b82f6);border-color:var(--ri-sidepanel-accent, #3b82f6)}@media(max-width:900px){.ri-sidepanel-wrap--open,.ri-sidepanel{width:50vw}}.ri-sidepanel__isolate-btn{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:22px;height:22px;margin-left:auto;padding:0;border:none;border-radius:5px;background:none;color:var(--ri-sidepanel-muted, rgba(255, 255, 255, .5));cursor:pointer;opacity:0;transition:opacity .15s ease,color .15s ease}.ri-sidepanel__row:hover .ri-sidepanel__isolate-btn,.ri-sidepanel__row--hovered .ri-sidepanel__isolate-btn,.ri-sidepanel__isolate-btn:focus-visible,.ri-sidepanel__isolate-btn--active{opacity:1}@media(hover:none){.ri-sidepanel__isolate-btn{opacity:1}}.ri-sidepanel__isolate-btn:hover{color:var(--ri-sidepanel-text, #fff)}.ri-sidepanel__isolate-btn--active,.ri-sidepanel__isolate-btn--active:hover{color:var(--ri-sidepanel-accent, #3b82f6)}.ri-sidepanel__row--setAside .ri-sidepanel__label{opacity:.45}.bb-loadingOverlay{position:absolute;inset:0;z-index:5;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;padding:24px;text-align:center;border-radius:14px;background:#f8fafcd1;backdrop-filter:blur(2px)}.bb-loadingSpinner{width:40px;height:40px;border-radius:999px;border:3px solid rgba(148,163,184,.3);border-top-color:#2563eb;animation:bb-spin .8s linear infinite}@keyframes bb-spin{to{transform:rotate(360deg)}}.bb-loadingProgressRow{display:flex;align-items:center;gap:8px;width:100%;max-width:240px}.bb-loadingProgress{flex:1;height:6px;border-radius:999px;background:#94a3b84d;overflow:hidden}.bb-loadingProgress__bar{height:100%;border-radius:inherit;background:#2563eb;transition:width .15s ease-out}.bb-loadingProgress__label{flex-shrink:0;min-width:34px;text-align:right;color:#475569;font-size:12px;font-weight:600;font-variant-numeric:tabular-nums}.bb-loadingMessage{max-width:320px;color:#475569;font-size:13px;font-weight:600;line-height:1.5}
|
|
1
|
+
:root{--ri-styles-model-viewer: 1}.ri-viewer--license-checking,.ri-viewer--license-invalid{display:flex;align-items:center;justify-content:center;width:100%;height:100%;background-color:#f9f9f9}.ri-viewer{--ri-font-family: Inter, "Segoe UI", Helvetica, Arial, sans-serif;--ri-viewer-bg: #1c1c1d;--ri-viewer-text: #111827;--ri-panel-bg: #ffffff;--ri-panel-border: #e5e7eb;--ri-panel-title: #111827;--ri-panel-muted-text: #4b5563;--ri-panel-subtle-text: #9ca3af;--ri-panel-surface: #f9fafb;--ri-panel-surface-hover: #f3f4f6;--ri-panel-surface-border: #e5e7eb;--ri-panel-button-text: #1f2937;--ri-panel-accent: #2563eb;--ri-panel-accent-contrast: #ffffff;--ri-license-overlay-bg: rgba(0, 0, 0, .04);--ri-license-overlay-border: rgba(0, 0, 0, .08);--ri-license-overlay-text: #888;--ri-license-overlay-error-bg: rgba(192, 57, 43, .06);--ri-license-overlay-error-border: rgba(192, 57, 43, .2);--ri-license-overlay-error-text: #c0392b;--ri-sidepanel-font-family: Inter, "Segoe UI", Helvetica, Arial, sans-serif;--ri-sidepanel-bg: var(--ri-databinding-bg, #111318);--ri-sidepanel-open-btn-bg: rgba(20, 20, 20, .82);--ri-sidepanel-open-btn-bg-hover: #27282b7e;--ri-sidepanel-border: rgba(255, 255, 255, .06);--ri-sidepanel-divider: rgba(255, 255, 255, .04);--ri-sidepanel-border-strong: rgba(255, 255, 255, .08);--ri-sidepanel-border-active: rgba(255, 255, 255, .18);--ri-sidepanel-shadow-left: 4px 0 24px rgba(0, 0, 0, .35);--ri-sidepanel-shadow-right: -4px 0 24px rgba(0, 0, 0, .35);--ri-sidepanel-text: var(--ri-databinding-text, #f1f5f9);--ri-sidepanel-text-emphasis: var(--ri-databinding-text-hover, #cbd5e1);--ri-sidepanel-text-muted: var(--ri-databinding-text-muted, #94a3b8);--ri-sidepanel-text-subtle: var(--ri-databinding-text-subtle, #64748b);--ri-sidepanel-placeholder: var(--ri-databinding-text-faint, #475569);--ri-sidepanel-surface: rgba(255, 255, 255, .05);--ri-sidepanel-surface-hover: rgba(255, 255, 255, .1);--ri-sidepanel-accent: #3b82f6;--ri-sidepanel-accent-soft: rgba(59, 130, 246, .12);--ri-databinding-bg: #111318;--ri-databinding-border: rgba(255, 255, 255, .06);--ri-databinding-border-strong: rgba(255, 255, 255, .08);--ri-databinding-border-hover: rgba(255, 255, 255, .15);--ri-databinding-shadow: 4px 0 24px rgba(0, 0, 0, .35);--ri-databinding-font-family: "Inter", "Segoe UI", sans-serif;--ri-databinding-mono-font-family: "JetBrains Mono", "Fira Code", "Menlo", monospace;--ri-databinding-text: #f1f5f9;--ri-databinding-text-muted: #94a3b8;--ri-databinding-text-subtle: #64748b;--ri-databinding-text-faint: #475569;--ri-databinding-text-hover: #cbd5e1;--ri-databinding-surface: rgba(255, 255, 255, .03);--ri-databinding-surface-hover: rgba(255, 255, 255, .06);--ri-databinding-accent: #93c5fd;--ri-databinding-accent-glow: rgba(147, 197, 253, .8);--ri-databinding-accent-border: rgba(96, 165, 250, .55);--ri-databinding-accent-gradient: linear-gradient( 135deg, #1e3a8a 0%, #1d4ed8 60%, #2563eb 100% );--ri-databinding-accent-gradient-active: linear-gradient( 135deg, #1e3a8a 0%, #1e40af 100% );display:flex;flex-direction:row;width:100%;height:100%;min-height:0;overflow:hidden;background:var(--ri-viewer-bg);position:relative;color:var(--ri-viewer-text);font-family:var(--ri-font-family);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility;font-synthesis:none}.ri-viewer:fullscreen{width:100vw;height:100vh;max-width:none;max-height:none;margin:0}.ri-viewer *{box-sizing:border-box}.ri-viewerLeft{display:flex;flex:1;min-height:0;min-width:0;position:relative}.ri-viewerRight{display:flex;flex-shrink:0;min-width:0}.ri-panel{width:280px;min-height:0;background:var(--ri-panel-bg);border-right:1px solid var(--ri-panel-border);display:flex;flex-direction:column;padding:20px;overflow-y:auto;flex-shrink:0;transition:margin-left .3s ease,transform .3s ease}.ri-panel--open{transform:translate(0);margin-left:0}.ri-panel--closed{transform:translate(-100%);margin-left:-280px}.ri-panelHeader{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}.ri-panelTitle{margin:0;font-size:15px;font-weight:700;color:var(--ri-panel-title);line-height:1.4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ri-closeButton{border:0;background:transparent;color:var(--ri-panel-subtle-text);font-size:22px;line-height:1;padding:0;cursor:pointer;flex-shrink:0;transition:color .2s ease}.ri-closeButton:hover{color:var(--ri-panel-muted-text)}.ri-json{margin:0 0 16px;padding:12px;background:var(--ri-panel-surface);border:1px solid var(--ri-panel-surface-border);border-radius:12px;font-size:12px;line-height:1.55;color:var(--ri-panel-button-text);overflow-x:auto;white-space:pre-wrap;word-break:break-word}.ri-divider{border-top:1px solid var(--ri-panel-border);margin-bottom:12px}.ri-sectionLabel{margin-bottom:8px;font-size:11px;font-weight:700;color:var(--ri-panel-subtle-text);text-transform:uppercase;letter-spacing:.16em}.ri-actionList{display:flex;flex-direction:column;gap:8px}.ri-actionButton{width:100%;border-radius:8px;border:1px solid var(--ri-panel-surface-border);background:var(--ri-panel-surface);color:var(--ri-panel-button-text);padding:10px 12px;text-align:left;font-size:14px;line-height:1.4;cursor:pointer;transition:background-color .2s ease,border-color .2s ease,color .2s ease}.ri-actionButton:hover{background:var(--ri-panel-surface-hover);border-color:var(--ri-panel-border)}.ri-actionButton--active{background:var(--ri-panel-accent);border-color:var(--ri-panel-accent);color:var(--ri-panel-accent-contrast)}.ri-actionButton--active:hover{background:var(--ri-panel-accent);border-color:var(--ri-panel-accent)}.ri-canvasArea{flex:1 1 auto;position:relative;min-width:0}.ri-canvasArea--measuring{cursor:crosshair}.ri-canvasArea canvas{opacity:1;transition:opacity .18s ease}.ri-canvasArea--positioning canvas{opacity:0;transition:none}.ri-bindingsMismatchBanner{position:absolute;top:12px;left:50%;transform:translate(-50%);z-index:20;display:flex;align-items:center;gap:8px;padding:7px 12px 7px 10px;border-radius:8px;background:#1e1400e0;border:1px solid rgba(251,191,36,.35);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);color:#fbbf24;font-size:12px;font-weight:500;line-height:1.4;white-space:nowrap;pointer-events:auto;max-width:calc(100% - 32px);white-space:normal;text-align:center}.ri-bindingsMismatchBanner__icon{flex-shrink:0}.ri-bindingsMismatchBanner__dismiss{flex-shrink:0;display:flex;align-items:center;justify-content:center;margin-left:4px;padding:2px;background:none;border:none;border-radius:4px;color:#fbbf24b3;cursor:pointer;transition:color .15s ease,background .15s ease}.ri-bindingsMismatchBanner__dismiss:hover{color:#fbbf24;background:#fbbf241f}.ri-measureTools,.ri-uvCheckerTools{position:absolute;top:16px;left:16px;z-index:10;display:flex;gap:8px;align-items:center}.ri-measureButton{width:34px;height:34px;padding:0;background:#141414d1;border:1px solid rgba(255,255,255,.12);color:#ffffffbf;border-radius:8px;cursor:pointer;display:flex;align-items:center;justify-content:center;touch-action:manipulation;user-select:none;-webkit-tap-highlight-color:transparent;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);transition:background .15s ease,color .15s ease,border-color .15s ease}.ri-measureButton:hover{background:#282828eb;color:#fff;border-color:#ffffff40}.ri-measureButton:active{background:#38dbf0;color:#06343c;border-color:#38dbf0}.ri-measureButton--active{background:#22d3ee;border-color:#22d3ee;color:#06343c}.ri-measureButton--active:hover{background:#38dbf0;color:#06343c}.ri-measureHint{padding:6px 10px;border-radius:8px;font-size:12px;line-height:1.35;color:#fff;background:#141414d1;border:1px solid rgba(255,255,255,.12);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);white-space:normal}.ri-measureTools{align-items:flex-start;flex-direction:column;max-width:min(540px,calc(100% - 32px))}.ri-measureToolbarRow{display:flex;align-items:center;flex-wrap:wrap;gap:6px}.ri-measureSelect,.ri-measureFinish{height:34px;padding:0 8px;border:1px solid rgba(255,255,255,.2);border-radius:8px;background:#242424;color:#fff;font:inherit;font-size:12px;cursor:pointer}.ri-measureFinish{background:#22d3ee;color:#06343c}.ri-measureHint--error{color:#facc15}.ri-measureButton:disabled,.ri-measureFinish:disabled{opacity:.4;cursor:not-allowed}.ri-measureSelect:focus-visible,.ri-measureFinish:focus-visible,.ri-measureButton:focus-visible{outline:2px solid #22d3ee;outline-offset:2px}.ri-measureDot.ri-measureDot--snapped{background:#facc15}.ri-measureSnapTarget{width:16px;height:16px;border:2px solid #facc15;background:#facc1533;box-shadow:0 0 0 1px #000;pointer-events:none}.ri-measureSnapLabel{position:absolute;top:22px;left:0;padding:3px 6px;border-radius:4px;background:#facc15;color:#06343c;font-size:12px;pointer-events:none}.ri-explodeTools{position:absolute;top:16px;left:16px;z-index:10;display:flex;gap:8px;align-items:center}.ri-explodeSlider{display:flex;align-items:center;gap:8px;height:34px;padding:0 12px;background:#141414d1;border:1px solid rgba(255,255,255,.12);border-radius:8px;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}.ri-explodeSlider input[type=range]{width:120px;accent-color:#22d3ee;cursor:pointer}.ri-sectionTools{position:absolute;top:16px;left:16px;z-index:10;display:flex;gap:8px;align-items:center}.ri-sectionPanel{display:flex;align-items:center;gap:8px;height:34px;padding:0 6px;background:#141414d1;border:1px solid rgba(255,255,255,.12);border-radius:8px;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}.ri-sectionPanel input[type=range]{width:110px;accent-color:#22d3ee;cursor:pointer}.ri-sectionAxes{display:flex;gap:2px}.ri-sectionAxis{display:inline-flex;align-items:center;justify-content:center;min-width:24px;height:24px;padding:0 6px;font-size:12px;font-weight:600;color:#ffffffbf;background:transparent;border:none;border-radius:6px;cursor:pointer}.ri-sectionAxis:hover{color:#fff;background:#ffffff14}.ri-sectionAxis--active,.ri-sectionAxis--active:hover{background:#22d3ee;color:#06343c}.ri-sectionAxis:focus-visible{outline:2px solid #22d3ee;outline-offset:1px}.ri-decalControl{padding:12px}.ri-decalPosition{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 0}.ri-decalPosition__label{font-size:13px;font-weight:600}.ri-decalPosition__hint{font-size:11px;opacity:.65;margin-top:4px;max-width:160px}.ri-decalPosition__pad{display:grid;grid-template:repeat(3,30px) / repeat(3,30px);gap:3px;flex-shrink:0}.ri-decalPosition__button{touch-action:none;user-select:none;display:flex;align-items:center;justify-content:center;border:1px solid rgba(148,163,184,.25);border-radius:7px;color:inherit;background:#94a3b81a;cursor:pointer}.ri-decalPosition__button:hover{background:#38bdf833}.ri-decalPosition__button:active{background:#38bdf859}.ri-decalPosition__button:focus-visible{outline:2px solid #38bdf8;outline-offset:2px}.ri-decalPosition__button--up{grid-area:1 / 2}.ri-decalPosition__button--left{grid-area:2 / 1}.ri-decalPosition__button--right{grid-area:2 / 3}.ri-decalPosition__button--down{grid-area:3 / 2}.ri-decalControl__row{display:flex;align-items:center;gap:8px;margin-bottom:8px}.ri-decalControl__input{flex:1;min-width:0;height:34px;padding:0 10px;font:inherit;font-size:13px;color:var(--ri-databinding-text, #f1f5f9);background:#00000040;border:1px solid var(--ri-databinding-border-strong, rgba(255, 255, 255, .08));border-radius:8px}.ri-decalControl__input:focus-visible,.ri-decalControl__chip:focus-visible{outline:2px solid #22d3ee;outline-offset:1px}.ri-decalControl__color{flex-shrink:0;width:34px;height:34px;padding:2px;background:transparent;border:1px solid var(--ri-databinding-border-strong, rgba(255, 255, 255, .08));border-radius:8px;cursor:pointer}.ri-decalControl .ri-uploadButton:disabled{opacity:.5;cursor:not-allowed}.ri-decalControl__hint{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:10px;padding:8px 10px;font-size:12px;line-height:1.35;border-radius:8px;border:1px solid rgba(34,211,238,.35);background:#22d3ee14}.ri-decalControl__list{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}.ri-decalControl__chip{max-width:100%;padding:4px 10px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;color:var(--ri-databinding-text, #f1f5f9);background:var(--ri-databinding-surface-hover, rgba(255, 255, 255, .06));border:1px solid var(--ri-databinding-border-strong, rgba(255, 255, 255, .08));border-radius:999px;cursor:pointer}.ri-decalControl__chip--active{background:#22d3ee;border-color:#22d3ee;color:#06343c}.ri-decalControl__editor{margin-top:10px;padding-top:10px;border-top:1px solid var(--ri-databinding-border-strong, rgba(255, 255, 255, .08))}.ri-decalControl__slider{display:grid;grid-template-columns:38px minmax(0,1fr);align-items:center;gap:8px;margin-bottom:6px;font-size:12px;color:var(--ri-databinding-text-muted, #94a3b8)}.ri-decalControl__slider input{width:100%;accent-color:#22d3ee;cursor:pointer}.ri-bottomStack{position:absolute;bottom:12px;left:50%;transform:translate(-50%);z-index:10;display:flex;flex-direction:column;align-items:center;gap:8px;max-width:calc(100% - 24px)}.ri-bottomStack--aboveButtons{bottom:var(--ri-bottom-stack-offset, 56px)}.ri-recordingOverlay{position:absolute;inset:0;z-index:200;display:flex;align-items:flex-end;justify-content:center;padding:0 12px 72px;cursor:wait}.ri-isolationPill{display:flex;align-items:center;gap:10px;max-width:100%;padding:4px 4px 4px 12px;background:#141414d1;border:1px solid rgba(255,255,255,.12);border-radius:10px;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);color:#ffffffd9;font-size:13px}.ri-isolationPill__label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ri-isolationPill__button{flex-shrink:0;height:28px;padding:0 12px;font-size:13px;font-weight:600;color:#06343c;background:#22d3ee;border:none;border-radius:7px;cursor:pointer}.ri-isolationPill__button:hover{background:#38dbf0}.ri-isolationPill__button:focus-visible{outline:2px solid #fff;outline-offset:1px}.ri-variantPicker{display:flex;gap:4px;max-width:100%;padding:4px;overflow-x:auto;scrollbar-width:none;background:#141414d1;border:1px solid rgba(255,255,255,.12);border-radius:10px;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}.ri-variantPicker::-webkit-scrollbar{display:none}.ri-variantPicker__option{flex-shrink:0;height:28px;padding:0 12px;font-size:13px;font-weight:500;white-space:nowrap;color:#ffffffbf;background:transparent;border:1px solid transparent;border-radius:7px;cursor:pointer;touch-action:manipulation;user-select:none;-webkit-tap-highlight-color:transparent;transition:background .15s ease,color .15s ease}.ri-variantPicker__option:hover{color:#fff;background:#ffffff14}.ri-variantPicker__option--active,.ri-variantPicker__option--active:hover{background:#22d3ee;color:#06343c}.ri-variantPicker__option:focus-visible{outline:2px solid #22d3ee;outline-offset:1px}.ri-variantPicker__group{display:flex;align-items:center;flex-shrink:0;padding:0 8px;font-size:11px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;white-space:nowrap;color:#ffffff8c}.ri-variantPicker__option{display:inline-flex;align-items:center;gap:7px}.ri-variantPicker__swatch{flex-shrink:0;width:14px;height:14px;border-radius:50%;box-shadow:inset 0 0 0 1px #ffffff59,0 0 0 1px #00000040}.ri-cinematicTools{position:absolute;left:16px;z-index:10;display:flex;gap:8px;align-items:center}.ri-measureDot{width:10px;height:10px;border-radius:50%;background:#22d3ee;border:2px solid #fff;box-shadow:0 0 0 1px #0006;pointer-events:none}.ri-measureLabel{padding:3px 7px;border-radius:6px;font-size:12px;font-weight:600;line-height:1;white-space:nowrap;color:#06343c;background:#22d3ee;box-shadow:0 1px 4px #00000059;pointer-events:none;user-select:none}.ri-xrTools{position:absolute;left:16px;z-index:10;display:flex;gap:8px;align-items:center}.ri-xrButton{display:inline-flex;align-items:center;gap:8px;height:34px;padding:0 10px;font-size:13px;font-weight:500;color:#fff;background:#141414d1;border:1px solid rgba(255,255,255,.16);border-radius:8px;cursor:pointer;touch-action:manipulation;user-select:none;-webkit-tap-highlight-color:transparent;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);transition:background .15s ease,border-color .15s ease}.ri-xrButton:hover{background:#282828eb;border-color:#ffffff4d}.ri-mobileHandoffBackdrop{position:absolute;z-index:30;inset:0;display:grid;place-items:center;padding:20px;background:#020617ad;backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(5px)}.ri-mobileHandoffDialog{position:relative;display:flex;width:min(100%,300px);flex-direction:column;align-items:center;padding:16px;text-align:center;color:#e2e8f0;background:#0f172a;border:1px solid rgba(148,163,184,.3);border-radius:16px;box-shadow:0 24px 80px #00000080}.ri-mobileHandoffDialog>svg{color:#67e8f9}.ri-mobileHandoffDialog h2{margin:12px 0 0;font-size:18px;line-height:1.25;color:#fff}.ri-mobileHandoffDialog p{margin:8px 0 16px;font-size:13px;line-height:1.5;color:#cbd5e1}.ri-mobileHandoffQr{display:grid;place-items:center;padding:10px;background:#fff;border-radius:10px}.ri-mobileHandoffDialog a{margin-top:16px;font-size:13px;font-weight:600;color:#a5f3fc;text-decoration:underline;text-underline-offset:3px}.ri-mobileHandoffClose{position:absolute;top:10px;right:10px;display:grid;width:30px;height:30px;place-items:center;padding:0;color:#cbd5e1;background:transparent;border:0;border-radius:6px;cursor:pointer}.ri-mobileHandoffClose:hover{color:#fff;background:#ffffff1a}.ri-arHintOverlay{position:absolute;top:18px;left:50%;transform:translate(-50%);z-index:10;width:min(calc(100% - 32px),360px);pointer-events:none}.ri-arHint{margin:0 auto;width:fit-content;max-width:100%;padding:6px 12px;font-size:11px;font-weight:500;line-height:1.2;text-align:center;color:#ffffffeb;background:#14141494;border:1px solid rgba(255,255,255,.12);border-radius:999px;user-select:none;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}.ri-arOverlay{position:absolute;bottom:24px;left:50%;transform:translate(-50%);z-index:10;width:min(calc(100% - 32px),420px);pointer-events:none}.ri-arControls{display:flex;flex-direction:column;align-items:center;gap:10px}.ri-arStatus,.ri-arActionButton{max-width:100%;padding:8px 16px;font-size:13px;font-weight:600;line-height:1.3;text-align:center;white-space:nowrap;color:#fff;background:#141414d1;border:1px solid rgba(255,255,255,.16);border-radius:19px;user-select:none;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}.ri-arStatus{pointer-events:none}.ri-arActionButton{display:inline-flex;align-items:center;justify-content:center;gap:6px;cursor:pointer;pointer-events:auto;touch-action:manipulation;-webkit-tap-highlight-color:transparent;transition:background .15s ease,border-color .15s ease,color .15s ease,transform .15s ease}.ri-arActionButton svg{flex-shrink:0}.ri-arActionButton:hover{background:#282828eb;border-color:#ffffff4d}.ri-arActionButton:active{transform:scale(.98)}.ri-arActionButton--primary{color:#06343c;background:#22d3ee;border-color:transparent;box-shadow:0 1px 4px #00000059}.ri-arActionButton--primary:hover{background:#67e8f9;border-color:transparent}.ri-arActionButton.ri-arActionButton--active,.ri-arActionButton[aria-pressed=true],.ri-arActionButton.ri-arActionButton--active:hover,.ri-arActionButton[aria-pressed=true]:hover,.ri-arActionButton.ri-arActionButton--active:active,.ri-arActionButton[aria-pressed=true]:active{color:#06343c;background:#22d3ee;border-color:transparent;box-shadow:0 1px 4px #00000059}.ri-hiddenInput{display:none}.ri-popover{position:absolute;z-index:50;background:#fff;border:1px solid #e5e7eb;border-radius:16px;box-shadow:0 24px 48px #0f172a2e;color:#111827}.ri-popover--inline{position:static;z-index:auto;width:100%;border-radius:10px;box-shadow:none}.ri-popover--inline .react-colorful{width:100%}.ri-popover--inline{background:var(--ri-databinding-surface, rgba(255, 255, 255, .03));border-color:var(--ri-databinding-border-strong, rgba(255, 255, 255, .08));color:var(--ri-databinding-text, #f1f5f9)}.ri-popover--inline .ri-popoverHeader{border-bottom-color:var( --ri-databinding-border-strong, rgba(255, 255, 255, .08) )}.ri-popover--inline .ri-popoverLabel,.ri-popover--inline .ri-colorCode{color:var(--ri-databinding-text-muted, #94a3b8)}.ri-popover--inline .ri-secondaryButton{background:var(--ri-databinding-surface-hover, rgba(255, 255, 255, .06));border-color:var(--ri-databinding-border-strong, rgba(255, 255, 255, .08));color:var(--ri-databinding-text, #f1f5f9)}.ri-popover--inline .ri-secondaryButton:hover{background:#ffffff1f}.ri-popover--inline .ri-previewFrame{border-color:var(--ri-databinding-border-strong, rgba(255, 255, 255, .08))}.ri-popover--inline .ri-emptyState{border-color:var(--ri-databinding-border-hover, rgba(255, 255, 255, .15));color:var(--ri-databinding-text-subtle, #64748b)}.ri-popover--inline .ri-uploadButton{background:var(--ri-databinding-accent-gradient, #2563eb);color:#fff}.ri-popover--inline .ri-uploadButton:hover{background:var(--ri-databinding-accent-gradient-active, #1d4ed8)}.ri-popover--inline .ri-removeButton{background:transparent;border-color:var(--ri-databinding-border-strong, rgba(255, 255, 255, .08));color:var(--ri-databinding-text-muted, #94a3b8)}.ri-popover--inline .ri-removeButton:hover{background:var(--ri-databinding-surface-hover, rgba(255, 255, 255, .06))}.ri-popover--inline .ri-formatHint{color:var(--ri-databinding-text-subtle, #64748b)}.ri-popoverHeader{padding:12px 16px}.ri-popoverLabel{margin:0 0 8px;font-size:11px;font-weight:700;color:#6b7280;text-transform:uppercase;letter-spacing:.16em}.ri-inlineRow{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:8px}.ri-colorCode{font-size:12px;color:#9ca3af;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;text-transform:uppercase}.ri-secondaryButton{border:1px solid #e5e7eb;background:#f3f4f6;color:#374151;border-radius:8px;padding:6px 10px;font-size:12px;cursor:pointer;transition:background-color .2s ease}.ri-secondaryButton:hover{background:#e5e7eb}.ri-materialBody{display:flex;flex-direction:column;gap:12px;padding-left:12px;padding-right:12px;padding-bottom:12px}.ri-previewFrame{position:relative;height:112px;border-radius:12px;overflow:hidden;border:1px solid #e5e7eb}.ri-previewImage{width:100%;height:100%;object-fit:cover;display:block}.ri-previewCaption{position:absolute;left:0;right:0;bottom:0;background:#0006;padding:4px 8px;color:#fff;font-size:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ri-emptyState{height:112px;border-radius:12px;border:2px dashed #e5e7eb;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;color:#d1d5db;text-align:center}.ri-uploadButton{width:100%;border:0;border-radius:10px;background:#111827;color:#fff;padding:10px 12px;font-size:12px;font-weight:600;cursor:pointer;transition:background-color .2s ease}.ri-uploadButton:hover{background:#374151}.ri-removeButton{width:100%;border-radius:10px;border:1px solid #e5e7eb;background:#fff;color:#6b7280;padding:8px 12px;font-size:12px;cursor:pointer;transition:background-color .2s ease}.ri-removeButton:hover{background:#f9fafb}.ri-formatHint{margin:0;text-align:center;font-size:10px;color:#d1d5db}.ri-texturePosition{display:flex;flex-direction:column;gap:8px;padding-top:8px;border-top:1px solid #e5e7eb}.ri-texturePositionLabel{margin:0;font-size:11px;font-weight:600;color:#6b7280}.ri-texturePositionGrid{display:grid;grid-template-columns:1fr 1fr;gap:8px}.ri-texturePositionField{display:flex;flex-direction:column;gap:4px;font-size:11px;color:#6b7280}.ri-texturePositionField--full{grid-column:1 / -1}.ri-texturePositionField input[type=number]{width:100%;border-radius:8px;border:1px solid #e5e7eb;background:#fff;color:#111827;padding:6px 8px;font-size:12px}.ri-texturePositionSliderRow{display:flex;align-items:center;gap:8px}.ri-texturePositionSliderRow input[type=range]{flex:1}.ri-texturePositionSliderRow input[type=number]{width:56px;border-radius:8px;border:1px solid #e5e7eb;background:#fff;color:#111827;padding:6px 8px;font-size:12px}.ri-texturePositionHint{margin:0;font-size:11px;line-height:1.4;color:#9ca3af}.ri-popover--inline .ri-texturePosition{border-color:var(--ri-databinding-border-strong, rgba(255, 255, 255, .08))}.ri-popover--inline .ri-texturePositionLabel,.ri-popover--inline .ri-texturePositionField,.ri-popover--inline .ri-texturePositionHint{color:var(--ri-databinding-text-muted, #94a3b8)}.ri-popover--inline .ri-texturePositionField input[type=number],.ri-popover--inline .ri-texturePositionSliderRow input[type=number]{background:var(--ri-databinding-surface-hover, rgba(255, 255, 255, .06));border-color:var(--ri-databinding-border-strong, rgba(255, 255, 255, .08));color:var(--ri-databinding-text, #e2e8f0)}.ri-buttonContainer{display:flex;justify-content:space-between;align-items:center;gap:8px;position:absolute;bottom:12px;left:12px;right:12px;z-index:10;pointer-events:none}.ri-buttonContainer>*{pointer-events:auto}.ri-tourControls{display:flex;gap:6px;align-items:center;flex-shrink:0}.ri-rightControls{display:flex;gap:6px;align-items:center;flex-shrink:0;margin-left:auto}.ri-rightControls:only-child{margin-left:auto}.ri-navButtonSingle,.ri-tourButton,.ri-resetButton,.ri-downloadButton{height:34px;background:#141414d1;border:1px solid rgba(255,255,255,.12);color:#ffffffbf!important;border-radius:8px;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);cursor:pointer;transition:background .15s ease,color .15s ease,border-color .15s ease,transform .15s ease;user-select:none;-webkit-tap-highlight-color:transparent}.ri-navButtonSingle:hover:not(:disabled),.ri-tourButton:hover:not(:disabled),.ri-resetButton:hover:not(:disabled){background:#282828eb;color:#fff;border-color:#ffffff40}.ri-navButtonSingle:active:not(:disabled),.ri-tourButton:active:not(:disabled),.ri-resetButton:active:not(:disabled){background:#38dbf0;color:#06343c;border-color:#38dbf0}.ri-navButtonSingle:disabled,.ri-tourButton:disabled,.ri-resetButton:disabled{opacity:.45;cursor:not-allowed}.ri-navButtonSingle{padding:0 16px;font-size:13px;font-weight:500;display:flex;align-items:center;gap:8px;white-space:nowrap}.ri-tourButton{padding:0 12px;font-size:13px;font-weight:500;display:flex;align-items:center;gap:4px;white-space:nowrap}.ri-tourButton svg{width:15px;height:15px;flex-shrink:0}.ri-tourButton--stop{border-color:#f446;color:#ff6b6b}.ri-tourButton--stop:hover:not(:disabled){background:#ff444426;border-color:#f449;color:#ff6b6b}.ri-tourButton--stop:active:not(:disabled){background:#f44;color:#fff;border-color:#f44}.ri-tourButton--next{border-color:#38dbf04d;color:#38dbf0}.ri-tourButton--next:hover:not(:disabled){background:#38dbf01f;border-color:#38dbf080;color:#38dbf0}.ri-tourButton--next:active:not(:disabled){background:#38dbf0;color:#06343c;border-color:#38dbf0}.mv-rightControls{position:absolute;bottom:5px;right:5px;z-index:10000;display:flex;align-items:center;gap:5px;pointer-events:auto}.mv-resetButton,.mv-fullscreenButton,.mv-controllersButton,.mv-downloadButton{height:34px;display:inline-flex;align-items:center;justify-content:center;gap:6px;border:1px solid rgba(255,255,255,.12);border-radius:8px;background:#141414d1;color:#ffffffbf;font-size:13px;font-weight:500;white-space:nowrap;cursor:pointer;user-select:none;-webkit-tap-highlight-color:transparent;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);transition:background .15s ease,color .15s ease,border-color .15s ease,transform .15s ease,opacity .15s ease}.mv-resetButton:hover:not(:disabled),.mv-fullscreenButton:hover:not(:disabled),.mv-controllersButton:hover:not(:disabled),.mv-downloadButton:hover:not(:disabled){background:#282828eb;color:#fff;border-color:#ffffff40}.mv-resetButton:active:not(:disabled),.mv-fullscreenButton:active:not(:disabled),.mv-controllersButton:active:not(:disabled),.mv-downloadButton:active:not(:disabled){background:#38dbf0;color:#06343c;border-color:#38dbf0}.mv-resetButton:disabled,.mv-fullscreenButton:disabled,.mv-controllersButton:disabled,.mv-downloadButton:disabled{opacity:.45;cursor:not-allowed}.mv-resetButton:focus-visible,.mv-fullscreenButton:focus-visible,.mv-controllersButton:focus-visible,.mv-downloadButton:focus-visible{outline:2px solid rgba(255,255,255,.5);outline-offset:2px}.mv-resetButton,.mv-fullscreenButton{width:34px;padding:0;flex-shrink:0}.mv-resetButton svg,.mv-fullscreenButton svg{width:15px;height:15px;flex-shrink:0;pointer-events:none}.mv-fullscreenWrapper{display:inline-flex}.mv-fullscreenError{position:absolute;bottom:calc(100% + 8px);right:0;width:240px;max-width:calc(100vw - 20px);padding:10px 12px;border:1px solid rgba(255,255,255,.14);border-radius:8px;background:#141414f2;color:#fff;font-size:12px;line-height:1.5}.mv-controllersWrapper{position:relative;display:inline-flex;flex-direction:column;align-items:stretch}.mv-controllersButton{width:34px;padding:0;flex-shrink:0}.mv-controllersButton svg{width:15px;height:15px;flex-shrink:0;pointer-events:none}.mv-controllersMenu{position:absolute;bottom:calc(100% + 6px);right:0;min-width:168px;display:flex;flex-direction:column;padding:6px;border:1px solid rgba(255,255,255,.14);border-radius:10px;background:#141414eb;box-shadow:0 16px 32px #0f172a66;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);z-index:100;animation:mv-menuReveal .12s ease}.mv-controllersMenuItem{display:flex;align-items:center;gap:9px;width:100%;padding:9px 12px;border:none;border-radius:6px;background:transparent;color:#fff;font-size:13px;font-weight:400;text-align:left;white-space:nowrap;cursor:pointer;transition:background .1s ease,color .1s ease}.mv-controllersMenuItem:hover:not(:disabled){background:#ffffff1a}.mv-controllersMenuItem--active{background:#38dbf026;color:#38dbf0;font-weight:600}.mv-controllersMenuItem--active:hover{background:#38dbf038}.mv-downloadWrapper{position:relative;display:inline-flex;flex-direction:column;align-items:stretch}.mv-downloadButton{padding:0 16px;flex-shrink:0}.mv-downloadButton svg{width:15px;height:15px;flex-shrink:0;pointer-events:none}.mv-downloadButton__spinner{display:inline-block;width:13px;height:13px;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:mv-spin .7s linear infinite;flex-shrink:0}.mv-downloadMenu{position:absolute;bottom:calc(100% + 6px);right:0;min-width:168px;display:flex;flex-direction:column;padding:6px;border:1px solid rgba(255,255,255,.14);border-radius:10px;background:#141414eb;box-shadow:0 16px 32px #0f172a66;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);overflow:hidden;z-index:100;animation:mv-menuReveal .12s ease}.mv-downloadMenuItem{display:flex;align-items:center;gap:9px;width:100%;padding:10px 14px;border:none;border-radius:6px;background:transparent;color:#fff;font-size:13px;font-weight:400;text-align:left;white-space:nowrap;cursor:pointer;transition:background .1s ease}.mv-downloadMenuItem:hover:not(:disabled){background:#ffffff1a}.mv-downloadMenuItem:disabled{opacity:.4;cursor:not-allowed}.mv-downloadMenuItem select{margin-left:auto;padding:4px 6px;border:1px solid rgba(255,255,255,.2);border-radius:4px;background:#242424;color:#fff;font:inherit}.mv-downloadMenuDivider{height:1px;margin:0 10px;background:#ffffff1a}.mv-downloadMenuNotice{max-width:220px;padding:8px 14px 11px;color:#fca5a5;font-size:11px;line-height:1.4}@keyframes mv-menuReveal{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@keyframes mv-spin{to{transform:rotate(360deg)}}@media(max-width:768px){.mv-rightControls{flex-wrap:wrap;gap:6px}.mv-downloadButton{padding:0 10px;font-size:12px}}@media(max-width:480px){.mv-downloadButton{padding:0 10px;font-size:12px}.mv-downloadButton span{display:none}}.ri-annotationMarker{position:relative;width:36px;height:36px;border-radius:50%;background:#141414d1;border:2px solid rgba(255,255,255,.9);color:#fff;display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:700;cursor:pointer;z-index:20;user-select:none;box-shadow:0 2px 8px #00000073;pointer-events:auto;transition:opacity .3s ease,transform .3s ease}.ri-annotationMarker:hover{transform:scale(1.08);box-shadow:0 12px 28px #0f172a2e;background:#282828eb}.ri-annotationPopup{position:absolute;width:min(270px,calc(100vw - 32px));background:#141414d9;border:1px solid rgba(255,255,255,.12);border-radius:16px;padding:16px;z-index:30;display:flex;flex-direction:column;gap:12px;box-shadow:0 24px 48px #0f172a2e;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}.ri-annotationInput,.ri-annotationTextarea{width:100%;border:1px solid rgba(255,255,255,.12);background:#ffffff0d;color:#e5e7eb;border-radius:10px;padding:10px 12px;outline:none;font-family:inherit;transition:border-color .2s ease,box-shadow .2s ease}.ri-annotationInput{font-size:14px;font-weight:500}.ri-annotationTextarea{font-size:13px;resize:vertical;min-height:110px}.ri-annotationInput:focus,.ri-annotationTextarea:focus{border-color:#38dbf0;box-shadow:0 0 0 3px #38dbf01f}.ri-annotationActions{display:flex;align-items:center;gap:10px}.ri-annotationOkBtn{border:0;border-radius:8px;background:#38dbf0cc;color:#06343c;padding:8px 18px;font-size:13px;font-weight:600;cursor:pointer;transition:background-color .2s ease,opacity .2s ease}.ri-annotationOkBtn:hover:not(:disabled){background:#38dbf0}.ri-annotationOkBtn:disabled,.ri-annotationOkBtn.disabled{opacity:.5;cursor:not-allowed}.ri-annotationCancelBtn{border:1px solid rgba(255,255,255,.12);background:transparent;color:#9ca3af;border-radius:8px;padding:8px 12px;font-size:13px;cursor:pointer;transition:background-color .2s ease,border-color .2s ease}.ri-annotationCancelBtn:hover{background:#ffffff0d;border-color:#fff3}.ri-annotationIcons{margin-left:auto;display:flex;align-items:center;gap:12px;color:#9ca3af}.ri-annotationIcons svg{flex-shrink:0}.ri-viewAnnotationPopup{position:relative;background:#141414d9;border:1px solid rgba(255,255,255,.12);border-radius:8px;padding:12px 16px;min-width:200px;max-width:min(280px,calc(100vw - 48px));box-shadow:0 8px 24px #00000080;pointer-events:auto;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);animation:ri-viewAnnotationFadeIn .15s ease-out;margin-left:24px;margin-top:-20px;isolation:isolate;z-index:1000}.ri-viewAnnotationClose{background:transparent;border:none;color:#b7bdc6;cursor:pointer;font-size:18px;padding:0 4px;transition:color .2s;line-height:1}.ri-viewAnnotationClose:hover{color:#e2e8f0}.ri-viewAnnotationDescription{margin:0;color:#cbd5e1;font-size:13px;line-height:1.4;word-wrap:break-word}@keyframes ri-viewAnnotationFadeIn{0%{opacity:0;transform:translateY(-6px) scale(.96)}to{opacity:1;transform:translateY(0) scale(1)}}.ri-annotationNavSingle{position:absolute;bottom:120px;left:50%;transform:translate(-50%);z-index:10;display:flex;flex-direction:column;align-items:center;gap:10px;pointer-events:none}.ri-annotationNavSingle>*{pointer-events:auto}.ri-navBadge{background:#ffffff1a;padding:2px 10px;border-radius:4px;font-size:12px;font-weight:400;color:#ffffffb3}.ri-annotationTitleHint{background:#000000b3;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);color:#fff;padding:8px 20px;border-radius:8px;font-size:13px;border:1px solid rgba(255,255,255,.08);text-align:center;max-width:350px;animation:slideUp .3s ease}.ri-annotationHintTitle{font-weight:600;color:#e5e7eb}.ri-annotationHintDesc{font-size:12px;opacity:.6;margin-top:2px;color:#d1d5db}@keyframes slideUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.ri-canvasArea .bb-loadingOverlay{position:absolute;inset:0;z-index:12;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;padding:24px;text-align:center;border-radius:14px;background:#0f172a75;backdrop-filter:blur(1px)}.ri-canvasArea .bb-loadingSpinner{width:40px;height:40px;border-radius:999px;border:3px solid rgba(226,232,240,.24);border-top-color:#93c5fd;animation:bb-spin .8s linear infinite}.ri-canvasArea .bb-loadingMessage{max-width:320px;color:#f7f8f9;font-size:13px;font-weight:600;line-height:1.5}.ri-canvasArea .bb-loadingProgressRow{display:flex;align-items:center;gap:8px;width:100%;max-width:240px}.ri-canvasArea .bb-loadingProgress{flex:1;height:6px;border-radius:999px;background:#e2e8f03d;overflow:hidden}.ri-canvasArea .bb-loadingProgress__bar{height:100%;border-radius:inherit;background:#93c5fd}.ri-canvasArea .bb-loadingProgress__label{flex-shrink:0;min-width:34px;text-align:right;color:#f7f8f9;font-size:12px;font-weight:600;font-variant-numeric:tabular-nums}.ri-largeModelBanner{position:absolute;top:12px;left:50%;transform:translate(-50%);z-index:20;display:flex;align-items:center;gap:8px;padding:7px 12px 7px 10px;border-radius:8px;background:#1e1400e0;border:1px solid rgba(251,191,36,.35);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);color:#fbbf24;font-size:12px;font-weight:500;line-height:1.4;pointer-events:auto;max-width:calc(100% - 32px);white-space:normal;text-align:center}.ri-largeModelBanner--offset{top:64px}.ri-largeModelBanner__icon{flex-shrink:0}.ri-largeModelBanner__dismiss{flex-shrink:0;display:flex;align-items:center;justify-content:center;margin-left:4px;padding:2px;background:none;border:none;border-radius:4px;color:#fbbf24b3;cursor:pointer;transition:color .15s ease,background .15s ease}.ri-largeModelBanner__dismiss:hover{color:#fbbf24;background:#fbbf241f}.ri-uvCheckerBanner{position:absolute;top:12px;right:12px;z-index:20;display:flex;align-items:center;gap:8px;max-width:min(360px,calc(100% - 24px));padding:7px 11px;border:1px solid rgba(244,114,182,.4);border-radius:8px;background:#280a23e6;color:#f9a8d4;font-size:12px;font-weight:500;line-height:1.4;text-align:left;pointer-events:none;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}.ri-uvCheckerBanner__icon{flex-shrink:0}@media(max-width:768px){.ri-xrTools{gap:6px}.ri-xrButton{height:34px;gap:6px;padding:0 8px;font-size:11px}.ri-xrButton svg{width:14px;height:14px}.ri-xrButtonPrefix{display:none}.ri-annotationNavSingle{bottom:100px}.ri-navButtonSingle{padding:8px 20px;font-size:13px;min-width:110px}.ri-annotationTitleHint{padding:6px 14px;font-size:12px;max-width:250px}.ri-viewAnnotationPopup{min-width:160px;max-width:220px;padding:10px 12px}.ri-viewAnnotationTitle{font-size:13px}.ri-viewAnnotationDescription{font-size:12px}.ri-buttonContainer{flex-wrap:wrap;gap:6px}.ri-tourControls,.ri-rightControls{flex-wrap:wrap}}@media(max-width:480px){.ri-xrTools{gap:5px}.ri-xrButton{height:34px;gap:5px;font-size:10px}.ri-xrButton svg{width:13px;height:13px}.ri-annotationNavSingle{bottom:80px}.ri-navButtonSingle{padding:6px 16px;font-size:12px;min-width:90px;gap:6px}.ri-annotationTitleHint{padding:4px 10px;font-size:11px;max-width:200px}.ri-navBadge{font-size:10px;padding:1px 6px}.ri-tourButton{padding:0 8px;font-size:12px}.ri-tourButton span{display:none}.ri-downloadButton{padding:0 10px;font-size:12px}.ri-downloadButton span{display:none}}.ri-contextRecovery{position:absolute;inset:0;z-index:20000;display:flex;align-items:center;justify-content:center;padding:20px;background:#0c0e12e6}.ri-contextRecovery__card{width:min(380px,100%);padding:24px;border:1px solid rgba(255,255,255,.14);border-radius:12px;background:#1c1c1d;color:#f3f4f6;box-shadow:0 18px 42px #0000004d}.ri-contextRecovery__card h2{margin:12px 0 8px;font-size:18px;line-height:1.3}.ri-contextRecovery__card p{margin:0 0 18px;color:#b8bec9;font-size:14px;line-height:1.6}.ri-contextRecovery__card button{display:inline-flex;align-items:center;gap:8px;padding:9px 12px;border:1px solid rgba(255,255,255,.25);border-radius:8px;background:#f3f4f6;color:#111827;font:inherit;font-size:13px;font-weight:600;cursor:pointer}.ri-contextRecovery__card button:hover:not(:disabled){background:#fff}.ri-contextRecovery__card button:focus-visible{outline:2px solid #38dbf0;outline-offset:3px}.ri-contextRecovery__card button:disabled{opacity:.5;cursor:wait}.ri-loadError{position:absolute;inset:0;z-index:5;display:flex;align-items:center;justify-content:center;padding:16px;pointer-events:none}.ri-loadError__card{display:flex;flex-direction:column;gap:8px;width:min(460px,100%);padding:18px 22px;border-radius:10px;color:var(--ri-license-overlay-error-text, #c0392b);background:var(--ri-license-overlay-error-bg, rgba(255, 245, 244, .96));border:1px solid var(--ri-license-overlay-error-border, rgba(192, 57, 43, .2));box-shadow:0 18px 42px #0f172a1f;pointer-events:auto}.ri-loadError__header{display:flex;align-items:center;gap:8px}.ri-loadError__title{font-size:14px;font-weight:700;line-height:1.3}.ri-loadError__detail{margin:0;font-size:13px;line-height:1.5;color:var(--ri-license-overlay-text, #374151)}.ri-loadError__source,.ri-loadError__technical{margin:0;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;line-height:1.45;overflow-wrap:anywhere;color:var(--ri-license-overlay-text, #374151);opacity:.75}.ri-loadError__technical{opacity:.55}.ri-overlay{position:absolute;inset:0;z-index:5;pointer-events:none}.ri-overlay>*{pointer-events:auto}.ri-bottomStack--annotationFilters{z-index:2001}.ri-annotationFilters{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:6px;max-width:min(520px,calc(100vw - 40px));max-height:120px;overflow-y:auto;padding:8px;border-radius:8px;background:#141414e6;color:#e2e8f0;font-size:12px;pointer-events:auto}.ri-annotationFilters button{color:inherit;background:transparent;border:1px solid rgba(255,255,255,.25);border-radius:5px;padding:4px 8px;cursor:pointer}.ri-annotationFilters button[aria-pressed=true]{background:#1e40af;border-color:#93c5fd}.ri-viewAnnotationPopup{max-height:min(420px,60vh);overflow-y:auto}.ri-visuallyHidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}.ri-canvasArea:focus-visible{outline:2px solid #22d3ee;outline-offset:-2px}.ri-objectNavigator{position:absolute;top:12px;left:50%;z-index:30;display:flex;flex-direction:column;align-items:center;gap:4px;max-width:calc(100% - 32px);transform:translate(-50%);pointer-events:none}.ri-objectNavigator:not(:focus-within){width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}.ri-objectNavigator__list{display:flex;align-items:center;box-sizing:border-box;min-width:220px;max-width:100%;padding:8px 12px;background:#141414db;border:1px solid rgba(255,255,255,.14);border-radius:10px;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);color:#fff;font:600 13px/1.3 var(--ri-font-family)}.ri-objectNavigator__list:focus{outline:2px solid #22d3ee;outline-offset:2px}.ri-objectNavigator__option{display:flex;align-items:baseline;justify-content:space-between;gap:12px;width:100%;min-width:0}.ri-objectNavigator__name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ri-objectNavigator__option--selected .ri-objectNavigator__name{color:#22d3ee}.ri-objectNavigator__position{flex-shrink:0;color:#fff9;font-weight:500;font-variant-numeric:tabular-nums}.ri-objectNavigator__hint{max-width:100%;padding:3px 8px;overflow:hidden;background:#141414b8;border-radius:6px;color:#ffffffc7;font:500 11px/1.3 var(--ri-font-family);text-overflow:ellipsis;white-space:nowrap}.ri-viewer[data-reduced-motion] *,.ri-viewer[data-reduced-motion] *:before,.ri-viewer[data-reduced-motion] *:after{transition-duration:0s!important;transition-delay:0s!important}.ri-viewer[data-reduced-motion] .mv-controllersMenu,.ri-viewer[data-reduced-motion] .mv-downloadMenu,.ri-viewer[data-reduced-motion] .ri-viewAnnotationPopup,.ri-viewer[data-reduced-motion] .ri-annotationTitleHint,.ri-viewer[data-reduced-motion] .mc__joystick:active .mc__knob{animation:none!important}.ri-compare{position:relative;width:100%;height:100%;overflow:hidden;font-family:Inter,Segoe UI,Helvetica,Arial,sans-serif}.ri-compare__layer{position:absolute;inset:0}.ri-compare__layer--after{clip-path:inset(0 0 0 var(--ri-compare-split))}.ri-compare__divider{position:absolute;top:0;bottom:0;left:var(--ri-compare-split);z-index:40;display:flex;align-items:center;justify-content:center;width:32px;margin-left:-16px;cursor:ew-resize;touch-action:none;outline:none}.ri-compare__divider:before{content:"";position:absolute;top:0;bottom:0;left:50%;width:2px;margin-left:-1px;background:#ffffffe6;box-shadow:0 0 6px #00000073}.ri-compare__handle{position:relative;width:32px;height:32px;border-radius:50%;background:#fff;box-shadow:0 1px 6px #0006}.ri-compare__handle:before,.ri-compare__handle:after{content:"";position:absolute;top:50%;margin-top:-5px;border:5px solid transparent}.ri-compare__handle:before{left:4px;border-right-color:#1f2937}.ri-compare__handle:after{right:4px;border-left-color:#1f2937}.ri-compare__divider:focus-visible .ri-compare__handle{outline:2px solid #22d3ee;outline-offset:2px}.ri-compare__label{position:absolute;bottom:12px;z-index:30;max-width:40%;padding:4px 10px;overflow:hidden;border-radius:999px;background:#141414cc;color:#fff;font-size:12px;font-weight:600;line-height:1.3;text-overflow:ellipsis;white-space:nowrap;pointer-events:none}.ri-compare__label[hidden]{display:none}.ri-compare__labelAction{display:inline-flex;align-items:center;gap:4px;margin:-2px 0 -2px 8px;padding:0 7px;line-height:16px;border:1px solid rgba(255,255,255,.25);border-radius:999px;background:#ffffff1f;color:#fff;font:inherit;font-size:11px;font-weight:600;vertical-align:middle;cursor:pointer;pointer-events:auto}.ri-compare__labelAction:hover{background:#ffffff38}.ri-compare__labelAction[aria-pressed=true]{border-color:#22d3ee;background:#22d3ee;color:#06343c}.ri-compare__labelAction:focus-visible{outline:2px solid #22d3ee;outline-offset:2px}.ri-compare__label--before,.ri-compare__pane .ri-compare__label{left:12px}.ri-compare__label--after{right:12px}.ri-compare--sideBySide{display:flex;gap:2px;background:#000}.ri-compare__pane{position:relative;flex:1 1 0;min-width:0;height:100%}.ri-compare--overlay{position:absolute;inset:0;z-index:4;pointer-events:none}.ri-compare--overlay .ri-compare__layer--before{clip-path:inset(0 calc(100% - var(--ri-compare-split)) 0 0);pointer-events:auto}.ri-compare--overlay .ri-compare__divider{pointer-events:auto}.ri-compare--overlay .ri-compare__label{top:12px;bottom:auto}.ri-compare--overlay .ri-compare__label--before{left:auto;right:calc(100% - var(--ri-compare-split) + 12px)}.ri-compare--overlay .ri-compare__label--after{right:auto;left:calc(var(--ri-compare-split) + 12px)}.ri-license-overlay{display:flex;flex-direction:column;gap:10px;min-width:min(420px,calc(100% - 32px));max-width:min(460px,calc(100% - 32px));padding:20px 28px;border-radius:10px;color:var(--ri-license-overlay-text, #374151);background:var(--ri-license-overlay-bg, rgba(0, 0, 0, .04));border:1px solid var(--ri-license-overlay-border, rgba(0, 0, 0, .08));box-shadow:0 18px 42px #0f172a14}.ri-license-overlay__header{display:flex;align-items:center;gap:10px}.ri-license-overlay__statusDot{width:10px;height:10px;border-radius:999px;background:currentColor;opacity:.7;flex-shrink:0}.ri-license-overlay__icon{flex-shrink:0}.ri-license-overlay__title{font-size:14px;font-weight:700;line-height:1.2}.ri-license-overlay__message{margin:0;font-size:14px;font-weight:500;line-height:1.5}.ri-license-overlay--error{color:var(--ri-license-overlay-error-text, #c0392b);background:var(--ri-license-overlay-error-bg, rgba(192, 57, 43, .06));border:1px solid var(--ri-license-overlay-error-border, rgba(192, 57, 43, .2))}.ri-viewerSlot{position:relative;width:100%;height:100%;min-width:0;min-height:0}.ri-viewerPlaceholder{position:relative;overflow:hidden}.ri-viewerPlaceholder--inset{position:absolute;inset:0}.ri-poster{position:absolute;inset:0;z-index:0;width:100%;height:100%;object-fit:var(--ri-poster-fit, contain);pointer-events:none;user-select:none;transition:opacity .3s ease}.ri-poster--hidden{opacity:0}[data-reduced-motion] .ri-poster{transition:none}@media(prefers-reduced-motion:reduce){.ri-poster{transition:none}}.ri-revealButton{position:absolute;top:50%;left:50%;z-index:2;display:inline-flex;align-items:center;gap:8px;padding:10px 18px;border:0;border-radius:999px;background:#111827d1;color:#f9fafb;font:600 14px/1.2 Inter,Segoe UI,Helvetica,Arial,sans-serif;white-space:nowrap;cursor:pointer;transform:translate(-50%,-50%);box-shadow:0 6px 20px #00000040}.ri-revealButton:hover{background:#111827f0}.ri-revealButton:focus-visible{outline:2px solid #93c5fd;outline-offset:3px}.ri-annotationMarker--hovered{transform:scale(1.08);box-shadow:0 12px 28px #0f172a2e;background:#282828eb}.ri-viewAnnotationHeader{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.ri-viewAnnotationTitle{margin:0;color:#e2e8f0;font-size:14px;font-weight:600}.ri-annotationCategory{display:inline-block;margin-bottom:8px;padding:2px 7px;border-radius:4px;background:#ffffff1a;color:#cbd5e1;font-size:11px}.ri-annotationImage{display:block;width:100%;max-height:180px;object-fit:contain;border-radius:5px;margin-top:10px}.ri-annotationLink{display:block;margin-top:10px;color:#93c5fd;font-size:13px;overflow-wrap:anywhere;text-decoration:underline}.mc__wrapper{position:absolute;bottom:-10px;left:50%;transform:translate(-50%);display:flex;flex-direction:column;align-items:center;z-index:100}.mc__dpad{display:flex;flex-direction:column;align-items:center;gap:2px;margin-bottom:20px}.mc__middle-row{display:flex;align-items:center;gap:2px}.mc__joystick{width:60px;height:60px;flex-shrink:0;background:radial-gradient(circle at 40% 35%,#ffffff12,#0000008c);border-radius:50%;border:1.5px solid rgba(255,255,255,.15);position:relative;cursor:grab;touch-action:none;transition:border-color .2s ease,box-shadow .2s ease;margin:4px;box-shadow:0 4px 16px #00000080,0 0 0 4px #ffffff08}.mc__joystick:hover{border-color:#ffffff47;box-shadow:0 4px 20px #0000008c,0 0 0 4px #4285f414}.mc__joystick:active{cursor:grabbing;border-color:#4285f499;box-shadow:0 2px 12px #00000080,0 0 4px #4285f426}.mc__knob{position:absolute;top:50%;left:50%;width:34px;height:34px;margin-left:-17px;margin-top:-17px;background:linear-gradient(145deg,#5a9bf5,#1a66d9);border-radius:50%;cursor:grab;box-shadow:0 3px 10px #1a66d980,0 1px #ffffff40 inset;transition:transform .04s linear,box-shadow .1s ease;border:1.5px solid rgba(255,255,255,.45)}.mc__joystick:active .mc__knob{box-shadow:0 2px 16px #4285f4b3,0 1px #ffffff40 inset;animation:pulse .6s ease infinite}.mc__arrow{padding:0;margin:0;background:transparent;border:none;border-radius:0;box-shadow:none;outline:none;-webkit-appearance:none;appearance:none;cursor:pointer;display:flex;align-items:center;justify-content:center;touch-action:manipulation;user-select:none;-webkit-tap-highlight-color:transparent;transition:transform .1s ease,filter .15s ease;overflow:visible}.mc__arrow svg{display:block!important;pointer-events:none!important;user-select:none!important;-webkit-user-select:none!important;overflow:visible!important}.mc__arrow--up{margin-bottom:2px}.mc__arrow--up:hover{transform:scale(1.15) translateY(-2px);filter:drop-shadow(0 4px 12px rgba(66,133,244,.8))}.mc__arrow--up:active{transform:scale(.92) translateY(2px)}.mc__arrow--down{margin-top:2px}.mc__arrow--down:hover{transform:scale(1.15) translateY(2px);filter:drop-shadow(0 -4px 12px rgba(66,133,244,.8))}.mc__arrow--down:active{transform:scale(.92) translateY(-2px)}.mc__arrow--left{margin-right:2px}.mc__arrow--left:hover{transform:scale(1.15) translate(-2px);filter:drop-shadow(4px 0 12px rgba(66,133,244,.8))}.mc__arrow--left:active{transform:scale(.92) translate(2px)}.mc__arrow--right{margin-left:2px}.mc__arrow--right:hover{transform:scale(1.15) translate(2px);filter:drop-shadow(-4px 0 12px rgba(66,133,244,.8))}.mc__arrow--right:active{transform:scale(.92) translate(-2px)}@keyframes pulse{0%,to{box-shadow:0 2px 16px #4285f499,0 1px #ffffff40 inset;opacity:.85}50%{box-shadow:0 4px 24px #4285f4f2,0 1px #ffffff40 inset;opacity:1}}@media(max-width:768px){.mc__wrapper{bottom:-5px}.mc__joystick{width:68px;height:68px}.mc__knob{width:30px;height:30px;margin-left:-15px;margin-top:-15px}.mc__arrow--up:hover{transform:scale(1.1) translateY(-1px)}.mc__arrow--down:hover{transform:scale(1.1) translateY(1px)}.mc__arrow--left:hover{transform:scale(1.1) translate(-1px)}.mc__arrow--right:hover{transform:scale(1.1) translate(1px)}}@media(max-width:480px){.mc__joystick{width:56px;height:56px}.mc__knob{width:26px;height:26px;margin-left:-13px;margin-top:-13px}.mc__arrow--up{margin-bottom:1px}.mc__arrow--down{margin-top:1px}.mc__arrow--left{margin-right:1px}.mc__arrow--right{margin-left:1px}}@media(hover:none){.mc__arrow:hover{transform:none!important;filter:none!important}.mc__arrow:active{transform:scale(.92)!important}}.left-panel{width:280px;min-height:0;background:var(--ri-databinding-bg, #111318);border-right:1px solid var(--ri-databinding-border, rgba(255, 255, 255, .06));display:flex;flex-direction:column;padding:24px 18px;overflow-y:auto;font-family:var( --ri-databinding-font-family, "Inter", "Segoe UI", sans-serif );flex-shrink:0;transition:margin-left .45s cubic-bezier(.4,0,.2,1);box-shadow:var(--ri-databinding-shadow, 4px 0 24px rgba(0, 0, 0, .35))}.left-panel--open{margin-left:0}.left-panel--closed{margin-left:-280px}.left-panel::-webkit-scrollbar{width:4px}.left-panel::-webkit-scrollbar-track{background:transparent}.left-panel::-webkit-scrollbar-thumb{background:var(--ri-databinding-border-strong, rgba(255, 255, 255, .08));border-radius:4px}.left-panel__header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;padding-bottom:14px;border-bottom:1px solid var(--ri-databinding-border-strong, rgba(255, 255, 255, .08))}.left-panel__title{font-size:14px;font-weight:600;color:var(--ri-databinding-text, #f1f5f9);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding-right:8px;margin:0;letter-spacing:.02em}.left-panel__close-btn{width:26px;height:26px;display:flex;align-items:center;justify-content:center;background:var(--ri-databinding-surface, rgba(255, 255, 255, .03));border:1px solid var(--ri-databinding-border-strong, rgba(255, 255, 255, .08));border-radius:6px;color:var(--ri-databinding-text-subtle, #64748b);font-size:13px;flex-shrink:0;cursor:pointer;transition:background .15s ease,color .15s ease,border-color .15s ease}.left-panel__close-btn:hover{background:var(--ri-databinding-surface-hover, rgba(255, 255, 255, .06));color:var(--ri-databinding-text-hover, #cbd5e1);border-color:var(--ri-databinding-border-hover, rgba(255, 255, 255, .15))}.left-panel__data{padding:12px 6px;background:var(--ri-databinding-surface, rgba(255, 255, 255, .03));border:1px solid var(--ri-databinding-border-strong, rgba(255, 255, 255, .08));border-radius:10px;font-size:11px;font-family:var( --ri-databinding-mono-font-family, "JetBrains Mono", "Fira Code", "Menlo", monospace );color:var(--ri-databinding-text-muted, #94a3b8);line-height:1.7;overflow-x:auto;margin-bottom:18px}.left-panel__divider{border:none;border-top:1px solid var(--ri-databinding-border, rgba(255, 255, 255, .06));margin-bottom:16px}.left-panel__actions-label{font-size:10px;font-weight:600;color:var(--ri-databinding-text-faint, #475569);text-transform:uppercase;letter-spacing:.12em;margin-bottom:10px}.left-panel__actions-list{display:flex;flex-direction:column;gap:6px}.left-panel__action-extra{display:grid;grid-template-rows:0fr;opacity:0;margin-top:0;transition:grid-template-rows .28s cubic-bezier(.4,0,.2,1),opacity .2s ease,margin-top .28s cubic-bezier(.4,0,.2,1)}.left-panel__action-extra--open{grid-template-rows:1fr;opacity:1;margin-top:4px}.left-panel__action-extra-inner{overflow:hidden;min-height:0}.left-panel__action-btn{position:relative;padding:9px 14px;border-radius:8px;text-align:left;font-size:13px;font-weight:500;cursor:pointer;overflow:hidden;border:1px solid var(--ri-databinding-border-strong, rgba(255, 255, 255, .08));background:var(--ri-databinding-surface, rgba(255, 255, 255, .03));color:var(--ri-databinding-text-muted, #94a3b8);letter-spacing:.01em}.left-panel__action-btn:active{transform:scale(.97)}.left-panel__action-btn--active:before{content:"";position:absolute;left:0;top:20%;bottom:20%;width:3px;background:var(--ri-databinding-accent, #93c5fd);border-radius:0 3px 3px 0;box-shadow:0 0 8px var(--ri-databinding-accent-glow, rgba(147, 197, 253, .8))}.left-panel__action-btn--active:hover{background:var( --ri-databinding-accent-gradient, linear-gradient(135deg, #1e3a8a 0%, #1d4ed8 60%, #2563eb 100%) );border-color:var(--ri-databinding-accent-border, rgba(96, 165, 250, .55))}.left-panel__action-btn--active:active{transform:scale(.97);background:var( --ri-databinding-accent-gradient-active, linear-gradient(135deg, #1e3a8a 0%, #1e40af 100%) )}.left-panel__data{display:flex;flex-direction:column;gap:2px;margin-bottom:18px}.left-panel__data-row{display:flex;align-items:baseline;justify-content:space-between;gap:10px;padding:7px 10px;border-radius:7px;background:var(--ri-databinding-surface, rgba(255, 255, 255, .03));border:1px solid transparent;transition:background .15s ease,border-color .15s ease}.left-panel__data-row:hover{background:var(--ri-databinding-surface-hover, rgba(255, 255, 255, .06));border-color:var(--ri-databinding-border-strong, rgba(255, 255, 255, .08))}.left-panel__data-key{font-size:11px;font-weight:600;color:var(--ri-databinding-text-faint, #475569);text-transform:uppercase;letter-spacing:.07em;white-space:nowrap;flex-shrink:0}.left-panel__data-value{font-size:12px;font-family:var( --ri-databinding-mono-font-family, "JetBrains Mono", "Fira Code", "Menlo", monospace );text-align:right;overflow-wrap:anywhere;word-break:break-word;min-width:0}.left-panel__data-group{display:flex;flex-direction:column;gap:2px;padding:7px 10px;border-radius:7px;background:var(--ri-databinding-surface, rgba(255, 255, 255, .03));border:1px solid transparent;transition:background .15s ease,border-color .15s ease}.left-panel__data-group:hover{background:var(--ri-databinding-surface-hover, rgba(255, 255, 255, .06));border-color:var(--ri-databinding-border-strong, rgba(255, 255, 255, .08))}.left-panel__data-children{display:flex;flex-direction:column;gap:2px;margin-top:4px;padding-left:10px;border-left:1px solid var(--ri-databinding-border-strong, rgba(255, 255, 255, .08))}.left-panel__data-children .left-panel__data-row,.left-panel__data-children .left-panel__data-group{padding:3px 0;background:transparent;border-color:transparent}.left-panel__data-children .left-panel__data-row:hover,.left-panel__data-children .left-panel__data-group:hover{background:transparent}@media(max-width:900px){.left-panel{width:50vw}.left-panel--open{margin-left:0}.left-panel--closed{margin-left:-50vw}.left-panel{padding:18px 12px}.left-panel__data-row{flex-direction:column;align-items:stretch;gap:2px;padding:6px 8px}.left-panel__data-group{padding:6px 8px}.left-panel__data-value{text-align:left;font-size:11.5px}.left-panel__data-children{padding-left:8px}}.ri-sidepanel-wrap{height:100%;transition:width .45s cubic-bezier(.4,0,.2,1);overflow:visible}.ri-sidepanel-wrap--open{width:300px;flex-shrink:0}.ri-sidepanel-wrap--closed{width:0;flex-shrink:0;overflow:hidden}.ri-sidepanel__open-btn{position:absolute;top:12px;right:12px;display:flex;align-items:center;gap:7px;padding:7px 13px;border-radius:7px;border:1px solid var(--ri-sidepanel-border-strong, rgba(255, 255, 255, .08));background:var(--ri-sidepanel-open-btn-bg, rgba(20, 20, 20, .82));cursor:pointer;font-size:13px;font-weight:500;color:var(--ri-sidepanel-text-muted, #94a3b8);z-index:190;transition:background .15s}.ri-sidepanel__open-btn:hover{background:var(--ri-sidepanel-open-btn-bg-hover, #27282b7e)}.ri-sidepanel{position:absolute;top:0;right:0;width:300px;height:100%;background:var(--ri-sidepanel-bg, #141824);display:flex;flex-direction:column;font-family:var( --ri-sidepanel-font-family, Inter, "Segoe UI", Helvetica, Arial, sans-serif );transform:translate(100%);transition:transform .45s cubic-bezier(.4,0,.2,1);z-index:200;border-left:1px solid var(--ri-sidepanel-border, rgba(255, 255, 255, .06));box-shadow:var(--ri-sidepanel-shadow-right, -4px 0 24px rgba(0, 0, 0, .35))}.ri-sidepanel--open{transform:translate(0)}.ri-sidepanel--closed{transform:translate(100%)}.ri-sidepanel__header{padding:24px 20px 16px;border-bottom:1px solid var(--ri-sidepanel-border-strong, rgba(255, 255, 255, .08))}.ri-sidepanel__header-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:4px}.ri-sidepanel__eyebrow{font-size:10px;font-weight:700;letter-spacing:.12em;color:var(--ri-sidepanel-text-subtle, #64748b);text-transform:uppercase}.ri-sidepanel__title{font-size:22px;font-weight:700;color:var(--ri-sidepanel-text, #f1f5f9);margin:0;line-height:1.2}.ri-sidepanel__close-btn{display:flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:8px;border:1px solid var(--ri-sidepanel-border-strong, rgba(255, 255, 255, .08));background:var(--ri-sidepanel-surface, rgba(255, 255, 255, .05));cursor:pointer;color:var(--ri-sidepanel-text-muted, #94a3b8);transition:background .15s,color .15s;flex-shrink:0}.ri-sidepanel__close-btn:hover{background:var(--ri-sidepanel-surface-hover, rgba(255, 255, 255, .1));color:var(--ri-sidepanel-text, #f1f5f9)}.ri-sidepanel__search-wrap{padding:14px 16px;border-bottom:1px solid var(--ri-sidepanel-border-strong, rgba(255, 255, 255, .08))}.ri-sidepanel__search{width:100%;padding:10px 14px;border-radius:10px;border:1px solid var(--ri-sidepanel-border-strong, rgba(255, 255, 255, .08));background:var(--ri-sidepanel-surface, rgba(255, 255, 255, .05));color:var(--ri-sidepanel-text, #e2e8f0);font-size:13px;outline:none;box-sizing:border-box;transition:border-color .15s,background .15s}.ri-sidepanel__search::placeholder{color:var(--ri-sidepanel-placeholder, #475569)}.ri-sidepanel__search:focus{border-color:var(--ri-sidepanel-border-active, rgba(255, 255, 255, .18));background:var(--ri-sidepanel-surface-hover, rgba(255, 255, 255, .08))}.ri-sidepanel__list{display:flex;flex-direction:column;padding:10px 0;overflow-y:auto;flex:1}.ri-sidepanel__list::-webkit-scrollbar{width:4px}.ri-sidepanel__list::-webkit-scrollbar-track{background:transparent}.ri-sidepanel__list::-webkit-scrollbar-thumb{background:var(--ri-sidepanel-surface-hover, rgba(255, 255, 255, .1));border-radius:4px}.ri-sidepanel__row{display:flex;justify-content:space-between;padding:12px 20px;cursor:pointer;width:100%;border:none;background:transparent;color:inherit;font:inherit;text-align:left;appearance:none;-webkit-appearance:none;transition:background .12s;border-bottom:1px solid var(--ri-sidepanel-divider, rgba(255, 255, 255, .04))}.ri-sidepanel__row:hover,.ri-sidepanel__row--hovered{background:var(--ri-sidepanel-surface, rgba(255, 255, 255, .05))}.ri-sidepanel__row--selected{background:var(--ri-sidepanel-accent-soft, rgba(59, 130, 246, .12))}.ri-sidepanel__label{font-size:14px;font-weight:600;color:var(--ri-sidepanel-text-muted, #94a3b8);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ri-sidepanel__label--hovered,.ri-sidepanel__label--selected{color:var(--ri-sidepanel-text-emphasis, #ffffff)}.ri-sidepanel__meta{font-size:12px;color:var(--ri-sidepanel-text-muted, #94a3b8);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ri-sidepanel__vis-btn{display:flex;align-items:center;flex-shrink:0;cursor:pointer;background:none;border:none;padding:0;margin-left:10px}.ri-sidepanel__checkbox{width:16px;height:16px;border-radius:4px;border:1.5px solid var(--ri-sidepanel-border-active, rgba(255, 255, 255, .2));background:transparent;display:flex;align-items:center;justify-content:center;transition:background .15s,border-color .15s}.ri-sidepanel__checkbox--checked{background:var(--ri-sidepanel-accent, #3b82f6);border-color:var(--ri-sidepanel-accent, #3b82f6)}@media(max-width:900px){.ri-sidepanel-wrap--open,.ri-sidepanel{width:50vw}}.ri-sidepanel__isolate-btn{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:22px;height:22px;margin-left:auto;padding:0;border:none;border-radius:5px;background:none;color:var(--ri-sidepanel-muted, rgba(255, 255, 255, .5));cursor:pointer;opacity:0;transition:opacity .15s ease,color .15s ease}.ri-sidepanel__row:hover .ri-sidepanel__isolate-btn,.ri-sidepanel__row--hovered .ri-sidepanel__isolate-btn,.ri-sidepanel__isolate-btn:focus-visible,.ri-sidepanel__isolate-btn--active{opacity:1}@media(hover:none){.ri-sidepanel__isolate-btn{opacity:1}}.ri-sidepanel__isolate-btn:hover{color:var(--ri-sidepanel-text, #fff)}.ri-sidepanel__isolate-btn--active,.ri-sidepanel__isolate-btn--active:hover{color:var(--ri-sidepanel-accent, #3b82f6)}.ri-sidepanel__row--setAside .ri-sidepanel__label{opacity:.45}.ri-sidepanel__labelButton{flex:1 1 auto;min-width:0;padding:0;background:none;border:none;font:inherit;font-size:14px;font-weight:600;text-align:left;cursor:pointer}.ri-sidepanel__labelButton:focus-visible{outline:2px solid var(--ri-panel-accent, #2563eb);outline-offset:2px;border-radius:4px}.bb-loadingOverlay{position:absolute;inset:0;z-index:5;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;padding:24px;text-align:center;border-radius:14px;background:#f8fafcd1;backdrop-filter:blur(2px)}.bb-loadingSpinner{width:40px;height:40px;border-radius:999px;border:3px solid rgba(148,163,184,.3);border-top-color:#2563eb;animation:bb-spin .8s linear infinite}@keyframes bb-spin{to{transform:rotate(360deg)}}.bb-loadingProgressRow{display:flex;align-items:center;gap:8px;width:100%;max-width:240px}.bb-loadingProgress{flex:1;height:6px;border-radius:999px;background:#94a3b84d;overflow:hidden}.bb-loadingProgress__bar{height:100%;border-radius:inherit;background:#2563eb;transition:width .15s ease-out}.bb-loadingProgress__label{flex-shrink:0;min-width:34px;text-align:right;color:#475569;font-size:12px;font-weight:600;font-variant-numeric:tabular-nums}.bb-loadingMessage{max-width:320px;color:#475569;font-size:13px;font-weight:600;line-height:1.5}
|
package/dist/index.d.mts
CHANGED
|
@@ -1,17 +1,46 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
|
-
import { l as ModelViewerProps, r as ViewerCameraProps, t as ViewerReadyState, b as CaptureImageOptions, c as CaptureVideoOptions, U as UseViewerCameraOptions } from './
|
|
3
|
-
export { A as AnnotationMarker, C as CameraControllerType, a as CameraLimits, d as CinematicConfig, e as CinematicWaypoint, f as CustomObjectBindingDataPanelProps, g as CustomSceneObjectsPanelProps, D as DecalMoveTarget, G as GroupedModelViewerProps, H as HomeCameraState, M as MODEL_VIEWER_PRESETS, h as ModelViewerControlsOptions, i as ModelViewerDecoderOptions, j as ModelViewerPerfOptions, k as ModelViewerPreset, m as ModelViewerTilesOptions, n as ModelViewerToolsOptions, o as ModelViewerUiOptions, p as ModelViewerXrOptions, q as MouseControllerPosition, O as ObjectTransformSpace, P as PerformanceProfile, T as TexturePositioningControls, V as ViewerCameraPreset, s as ViewerEngagementEvent, X as XRScaleMode, u as useViewerCamera } from './
|
|
4
|
-
import { o as ObjectBinding, z as ObjectBindingTarget, v as ObjectBindingPatch, B as BindingEdit, s as ObjectBindingMaterial, H as ObjectBindingTextureSlot, F as ObjectBindingTextureChannel, J as ObjectBindingTransform, r as ObjectBindingDecal,
|
|
5
|
-
export { A as AnimationAction, a as AnimationActionEffect, b as AnimationClipInfo, c as AnimationClipState, d as AnimationClipStatus, e as AnimationControls, f as AnimationLoopMode, g as AnimationPlayOptions, h as AnimationPlaybackState, C as CameraAction, i as CameraActionEffect, D as DEFAULT_SCENE_CONFIG, j as DEFAULT_SECTION_CONFIG, k as DeepPartial, E as EnvironmentPreset, G as GlitchModeName, I as IsolatedObjectBindings, l as IsolationActionEffect, K as KernelSizeName, M as MATERIAL_BLENDING_MODES, m as MATERIAL_SIDES, O as ObjectActionEffect, q as ObjectBindingCameraState, t as ObjectBindingMaterialBlendingMode, u as ObjectBindingMaterialSide, w as ObjectBindingSelector, x as ObjectBindingStatus, y as ObjectBindingStyle, L as ObjectBindingType, N as ObjectBindingsActionEffect, P as ObjectPointerEvent, Q as ObjectSurfacePoint, R as RampTypeName, S as
|
|
2
|
+
import { l as ModelViewerProps, r as ViewerCameraProps, t as ViewerReadyState, b as CaptureImageOptions, c as CaptureVideoOptions, U as UseViewerCameraOptions } from './modelViewerProps-DoRiTZMn.mjs';
|
|
3
|
+
export { A as AnnotationMarker, C as CameraControllerType, a as CameraLimits, d as CinematicConfig, e as CinematicWaypoint, f as CustomObjectBindingDataPanelProps, g as CustomSceneObjectsPanelProps, D as DecalMoveTarget, G as GroupedModelViewerProps, H as HomeCameraState, M as MODEL_VIEWER_PRESETS, h as ModelViewerControlsOptions, i as ModelViewerDecoderOptions, j as ModelViewerPerfOptions, k as ModelViewerPreset, m as ModelViewerTilesOptions, n as ModelViewerToolsOptions, o as ModelViewerUiOptions, p as ModelViewerXrOptions, q as MouseControllerPosition, O as ObjectTransformSpace, P as PerformanceProfile, T as TexturePositioningControls, V as ViewerCameraPreset, s as ViewerEngagementEvent, X as XRScaleMode, u as useViewerCamera } from './modelViewerProps-DoRiTZMn.mjs';
|
|
4
|
+
import { o as ObjectBinding, z as ObjectBindingTarget, v as ObjectBindingPatch, B as BindingEdit, s as ObjectBindingMaterial, H as ObjectBindingTextureSlot, F as ObjectBindingTextureChannel, J as ObjectBindingTransform, r as ObjectBindingDecal, a1 as SceneConfig, a3 as SceneConfigPatch, a6 as SceneLight, a7 as SceneLightAttachment, aq as ViewerIsolation, p as ObjectBindingAction, n as ObjectActionEvent, an as ViewerAnimationsProps, ar as ViewerObjectInfo, ap as ViewerCameraState } from './rendererBackend-QwMzISTn.mjs';
|
|
5
|
+
export { A as AnimationAction, a as AnimationActionEffect, b as AnimationClipInfo, c as AnimationClipState, d as AnimationClipStatus, e as AnimationControls, f as AnimationLoopMode, g as AnimationPlayOptions, h as AnimationPlaybackState, C as CameraAction, i as CameraActionEffect, D as DEFAULT_SCENE_CONFIG, j as DEFAULT_SECTION_CONFIG, k as DeepPartial, E as EnvironmentPreset, G as GlitchModeName, I as IsolatedObjectBindings, l as IsolationActionEffect, K as KernelSizeName, M as MATERIAL_BLENDING_MODES, m as MATERIAL_SIDES, O as ObjectActionEffect, q as ObjectBindingCameraState, t as ObjectBindingMaterialBlendingMode, u as ObjectBindingMaterialSide, w as ObjectBindingSelector, x as ObjectBindingStatus, y as ObjectBindingStyle, L as ObjectBindingType, N as ObjectBindingsActionEffect, P as ObjectPointerEvent, Q as ObjectSurfacePoint, R as RampTypeName, S as RendererBackend, T as SceneAnimationClipConfig, U as SceneAnimationConfig, V as SceneAnnotationCameraView, W as SceneAnnotationImage, X as SceneAnnotationLink, Y as SceneAnnotationMarker, Z as SceneBackgroundConfig, _ as SceneCameraConfig, $ as SceneCinematicConfig, a0 as SceneCinematicWaypoint, a2 as SceneConfigActionEffect, a4 as SceneEnvironmentConfig, a5 as SceneGroundShadowConfig, a8 as SceneLightType, a9 as SceneLightingConfig, aa as SceneModelConfig, ab as SceneModelRenderer, ac as ScenePostProcessingConfig, ad as SceneSectionAxis, ae as SceneSectionConfig, af as SceneShadowConfig, ag as SceneStyleColorScale, ah as SceneStyleCondition, ai as SceneStylePulse, aj as SceneStyleRule, ak as SceneWireframeConfig, al as StyledObjectBindings, am as StyledObjectPulse, ao as ViewerCameraConfig, as as VisibilityActionEffect, at as applyIsolation, au as applyStyleRules, av as colorScaleValue, aw as isolatedBindingKeys, ax as material, ay as patchBindings, az as patchSceneConfig, aA as selectBindingKeys, aB as selectBindings, aC as useViewerAnimations } from './rendererBackend-QwMzISTn.mjs';
|
|
6
6
|
import { SceneLightInput } from './utils.mjs';
|
|
7
7
|
export { ACTION_CATALOG, ActionCatalogEntry, ActionHandling, ObjectBindingActionId, ObjectBindingKey, buildBindingsFromNodes, createDefaultBinding, defineObjectBindings, findCatalogAction, inferType, sceneLight } from './utils.mjs';
|
|
8
|
-
import {
|
|
9
|
-
export { M as ModelFormat } from './modelInfo-
|
|
8
|
+
import { a as ViewerModelBounds, b as ViewerModelInfo } from './modelInfo-BYebMPdZ.mjs';
|
|
9
|
+
export { M as ModelFormat, V as ViewerLoading, c as ViewerReveal } from './modelInfo-BYebMPdZ.mjs';
|
|
10
|
+
import { M as MaterialVariantGroup } from './materialVariants-DnZe9eMC.mjs';
|
|
11
|
+
export { D as DEFAULT_MODEL_VIEWER_LABELS, a as MaterialVariantOption, b as ModelViewerLabelKey, c as ModelViewerLabels, R as ReducedMotionSetting, d as chooseMaterialVariant } from './materialVariants-DnZe9eMC.mjs';
|
|
10
12
|
import '@react-three/drei';
|
|
11
13
|
import 'three';
|
|
12
14
|
|
|
13
15
|
declare function PublicModelViewer(props: ModelViewerProps): react.JSX.Element;
|
|
14
16
|
|
|
17
|
+
/** One side of a comparison: any ModelViewer props, over the shared ones. */
|
|
18
|
+
type CompareViewerSide = Partial<ModelViewerProps> & {
|
|
19
|
+
/** Shown over this side. Defaults to "Before" and "After". */
|
|
20
|
+
label?: string;
|
|
21
|
+
};
|
|
22
|
+
type CompareViewerProps = Partial<ModelViewerProps> & {
|
|
23
|
+
licenseKey: string;
|
|
24
|
+
/** The left side: the shared props with these on top. */
|
|
25
|
+
before: CompareViewerSide;
|
|
26
|
+
/** The right side. */
|
|
27
|
+
after: CompareViewerSide;
|
|
28
|
+
/**
|
|
29
|
+
* `"slider"` lays the two views over each other with a divider to drag
|
|
30
|
+
* across; `"side-by-side"` shows them next to each other. Default
|
|
31
|
+
* `"slider"`.
|
|
32
|
+
*/
|
|
33
|
+
layout?: "slider" | "side-by-side";
|
|
34
|
+
/** Where the slider's divider is, from 0 (left edge) to 1. Default 0.5. */
|
|
35
|
+
split?: number;
|
|
36
|
+
onSplitChange?: (split: number) => void;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Two ModelViewers showing two configurations of a model (or two models) with
|
|
40
|
+
* one camera: moving either view moves both.
|
|
41
|
+
*/
|
|
42
|
+
declare function CompareViewer(props: CompareViewerProps): react.JSX.Element;
|
|
43
|
+
|
|
15
44
|
type HiddenObjectsState = Record<string, boolean>;
|
|
16
45
|
type ObjectBindingsController = {
|
|
17
46
|
objectBindings: Record<string, ObjectBinding>;
|
|
@@ -293,9 +322,11 @@ type ViewerModelProps = {
|
|
|
293
322
|
objectCount: number;
|
|
294
323
|
/**
|
|
295
324
|
* The model's glTF material variants, by name; empty when it has none. Show
|
|
296
|
-
*
|
|
325
|
+
* them by setting `sceneConfig.model.activeVariants`.
|
|
297
326
|
*/
|
|
298
327
|
materialVariants: string[];
|
|
328
|
+
/** The same variants as option groups, with labels and swatches. */
|
|
329
|
+
materialVariantGroups: MaterialVariantGroup[];
|
|
299
330
|
/**
|
|
300
331
|
* Every bindable object in the model (see `ViewerObjectInfo`). Filled by
|
|
301
332
|
* `handleObjectCatalog`, so pass that to `ModelViewer`'s `onObjectCatalog`.
|
|
@@ -394,4 +425,4 @@ type ShareableViewerStateProps = {
|
|
|
394
425
|
};
|
|
395
426
|
declare function useShareableViewerState({ cameraState, setCameraState, objectBindings, onObjectBindingsChange, selectedObjectBinding, setSelectedObjectBinding, paramKey, debounceMs, autoSync, }: UseShareableViewerStateOptions): ShareableViewerStateProps;
|
|
396
427
|
|
|
397
|
-
export { BindingEdit, CaptureImageOptions, CaptureVideoOptions, type HiddenObjectsState, PublicModelViewer as ModelViewer, ModelViewerProps, ObjectActionEvent, ObjectBinding, ObjectBindingAction, ObjectBindingDecal, ObjectBindingMaterial, ObjectBindingPatch, ObjectBindingTarget, ObjectBindingTextureChannel, ObjectBindingTextureSlot, ObjectBindingTransform, type ObjectBindingsController, type RuntimeMaterialPatch, type RuntimeMaterialRanges, type RuntimePointLightOptions, type RuntimePointLightPatch, type RuntimeTransformPatch, type RuntimeTransformRanges, SceneConfig, type SceneConfigController, SceneConfigPatch, type SceneConfigUpdate, SceneLight, SceneLightAttachment, SceneLightInput, type SceneLightPatch, type SceneLightsController, type ShareableViewerStateProps, type UseShareableViewerStateOptions, UseViewerCameraOptions, type UseViewerEffectsOptions, type UseViewerOptions, type UseViewerProps, type UseViewerResult, type ViewerActionAnimationController, type ViewerActionBindingsController, type ViewerActionCameraController, type ViewerActionIsolationController, type ViewerActionSceneController, type ViewerActionsOptions, type ViewerActionsProps, ViewerAnimationsProps, ViewerCameraProps, ViewerCameraState, type ViewerConnectionController, type ViewerEffectChannels, type ViewerEffectEasing, type ViewerEffectRange, type ViewerEffectTarget, type ViewerEffectsController, type ViewerFlickerOptions, type ViewerHoverProps, ViewerIsolation, type ViewerIsolationProps, type ViewerLightEffectChannel, type ViewerMaterialEffectChannel, ViewerModelBounds, ViewerModelInfo, type ViewerModelProps, ViewerObjectInfo, type ViewerPulseOptions, type ViewerReadyConsumer, type ViewerReadyHandler, ViewerReadyState, type ViewerSelectionProps, type ViewerTimelineOptions, type ViewerTimelineStep, type ViewerTransformEffectChannel, type ViewerTransitionOptions, type ViewerVector3, useObjectBinding, useObjectBindingIds, useObjectBindings, useSceneConfig, useShareableViewerState, useViewer, useViewerActions, useViewerConnection, useViewerEffects, useViewerHover, useViewerIsolation, useViewerModel, useViewerSelection };
|
|
428
|
+
export { BindingEdit, CaptureImageOptions, CaptureVideoOptions, CompareViewer, type CompareViewerProps, type CompareViewerSide, type HiddenObjectsState, MaterialVariantGroup, PublicModelViewer as ModelViewer, ModelViewerProps, ObjectActionEvent, ObjectBinding, ObjectBindingAction, ObjectBindingDecal, ObjectBindingMaterial, ObjectBindingPatch, ObjectBindingTarget, ObjectBindingTextureChannel, ObjectBindingTextureSlot, ObjectBindingTransform, type ObjectBindingsController, type RuntimeMaterialPatch, type RuntimeMaterialRanges, type RuntimePointLightOptions, type RuntimePointLightPatch, type RuntimeTransformPatch, type RuntimeTransformRanges, SceneConfig, type SceneConfigController, SceneConfigPatch, type SceneConfigUpdate, SceneLight, SceneLightAttachment, SceneLightInput, type SceneLightPatch, type SceneLightsController, type ShareableViewerStateProps, type UseShareableViewerStateOptions, UseViewerCameraOptions, type UseViewerEffectsOptions, type UseViewerOptions, type UseViewerProps, type UseViewerResult, type ViewerActionAnimationController, type ViewerActionBindingsController, type ViewerActionCameraController, type ViewerActionIsolationController, type ViewerActionSceneController, type ViewerActionsOptions, type ViewerActionsProps, ViewerAnimationsProps, ViewerCameraProps, ViewerCameraState, type ViewerConnectionController, type ViewerEffectChannels, type ViewerEffectEasing, type ViewerEffectRange, type ViewerEffectTarget, type ViewerEffectsController, type ViewerFlickerOptions, type ViewerHoverProps, ViewerIsolation, type ViewerIsolationProps, type ViewerLightEffectChannel, type ViewerMaterialEffectChannel, ViewerModelBounds, ViewerModelInfo, type ViewerModelProps, ViewerObjectInfo, type ViewerPulseOptions, type ViewerReadyConsumer, type ViewerReadyHandler, ViewerReadyState, type ViewerSelectionProps, type ViewerTimelineOptions, type ViewerTimelineStep, type ViewerTransformEffectChannel, type ViewerTransitionOptions, type ViewerVector3, useObjectBinding, useObjectBindingIds, useObjectBindings, useSceneConfig, useShareableViewerState, useViewer, useViewerActions, useViewerConnection, useViewerEffects, useViewerHover, useViewerIsolation, useViewerModel, useViewerSelection };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,17 +1,46 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
|
-
import { l as ModelViewerProps, r as ViewerCameraProps, t as ViewerReadyState, b as CaptureImageOptions, c as CaptureVideoOptions, U as UseViewerCameraOptions } from './
|
|
3
|
-
export { A as AnnotationMarker, C as CameraControllerType, a as CameraLimits, d as CinematicConfig, e as CinematicWaypoint, f as CustomObjectBindingDataPanelProps, g as CustomSceneObjectsPanelProps, D as DecalMoveTarget, G as GroupedModelViewerProps, H as HomeCameraState, M as MODEL_VIEWER_PRESETS, h as ModelViewerControlsOptions, i as ModelViewerDecoderOptions, j as ModelViewerPerfOptions, k as ModelViewerPreset, m as ModelViewerTilesOptions, n as ModelViewerToolsOptions, o as ModelViewerUiOptions, p as ModelViewerXrOptions, q as MouseControllerPosition, O as ObjectTransformSpace, P as PerformanceProfile, T as TexturePositioningControls, V as ViewerCameraPreset, s as ViewerEngagementEvent, X as XRScaleMode, u as useViewerCamera } from './
|
|
4
|
-
import { o as ObjectBinding, z as ObjectBindingTarget, v as ObjectBindingPatch, B as BindingEdit, s as ObjectBindingMaterial, H as ObjectBindingTextureSlot, F as ObjectBindingTextureChannel, J as ObjectBindingTransform, r as ObjectBindingDecal,
|
|
5
|
-
export { A as AnimationAction, a as AnimationActionEffect, b as AnimationClipInfo, c as AnimationClipState, d as AnimationClipStatus, e as AnimationControls, f as AnimationLoopMode, g as AnimationPlayOptions, h as AnimationPlaybackState, C as CameraAction, i as CameraActionEffect, D as DEFAULT_SCENE_CONFIG, j as DEFAULT_SECTION_CONFIG, k as DeepPartial, E as EnvironmentPreset, G as GlitchModeName, I as IsolatedObjectBindings, l as IsolationActionEffect, K as KernelSizeName, M as MATERIAL_BLENDING_MODES, m as MATERIAL_SIDES, O as ObjectActionEffect, q as ObjectBindingCameraState, t as ObjectBindingMaterialBlendingMode, u as ObjectBindingMaterialSide, w as ObjectBindingSelector, x as ObjectBindingStatus, y as ObjectBindingStyle, L as ObjectBindingType, N as ObjectBindingsActionEffect, P as ObjectPointerEvent, Q as ObjectSurfacePoint, R as RampTypeName, S as
|
|
2
|
+
import { l as ModelViewerProps, r as ViewerCameraProps, t as ViewerReadyState, b as CaptureImageOptions, c as CaptureVideoOptions, U as UseViewerCameraOptions } from './modelViewerProps-CIZ2R_Fv.js';
|
|
3
|
+
export { A as AnnotationMarker, C as CameraControllerType, a as CameraLimits, d as CinematicConfig, e as CinematicWaypoint, f as CustomObjectBindingDataPanelProps, g as CustomSceneObjectsPanelProps, D as DecalMoveTarget, G as GroupedModelViewerProps, H as HomeCameraState, M as MODEL_VIEWER_PRESETS, h as ModelViewerControlsOptions, i as ModelViewerDecoderOptions, j as ModelViewerPerfOptions, k as ModelViewerPreset, m as ModelViewerTilesOptions, n as ModelViewerToolsOptions, o as ModelViewerUiOptions, p as ModelViewerXrOptions, q as MouseControllerPosition, O as ObjectTransformSpace, P as PerformanceProfile, T as TexturePositioningControls, V as ViewerCameraPreset, s as ViewerEngagementEvent, X as XRScaleMode, u as useViewerCamera } from './modelViewerProps-CIZ2R_Fv.js';
|
|
4
|
+
import { o as ObjectBinding, z as ObjectBindingTarget, v as ObjectBindingPatch, B as BindingEdit, s as ObjectBindingMaterial, H as ObjectBindingTextureSlot, F as ObjectBindingTextureChannel, J as ObjectBindingTransform, r as ObjectBindingDecal, a1 as SceneConfig, a3 as SceneConfigPatch, a6 as SceneLight, a7 as SceneLightAttachment, aq as ViewerIsolation, p as ObjectBindingAction, n as ObjectActionEvent, an as ViewerAnimationsProps, ar as ViewerObjectInfo, ap as ViewerCameraState } from './rendererBackend-QwMzISTn.js';
|
|
5
|
+
export { A as AnimationAction, a as AnimationActionEffect, b as AnimationClipInfo, c as AnimationClipState, d as AnimationClipStatus, e as AnimationControls, f as AnimationLoopMode, g as AnimationPlayOptions, h as AnimationPlaybackState, C as CameraAction, i as CameraActionEffect, D as DEFAULT_SCENE_CONFIG, j as DEFAULT_SECTION_CONFIG, k as DeepPartial, E as EnvironmentPreset, G as GlitchModeName, I as IsolatedObjectBindings, l as IsolationActionEffect, K as KernelSizeName, M as MATERIAL_BLENDING_MODES, m as MATERIAL_SIDES, O as ObjectActionEffect, q as ObjectBindingCameraState, t as ObjectBindingMaterialBlendingMode, u as ObjectBindingMaterialSide, w as ObjectBindingSelector, x as ObjectBindingStatus, y as ObjectBindingStyle, L as ObjectBindingType, N as ObjectBindingsActionEffect, P as ObjectPointerEvent, Q as ObjectSurfacePoint, R as RampTypeName, S as RendererBackend, T as SceneAnimationClipConfig, U as SceneAnimationConfig, V as SceneAnnotationCameraView, W as SceneAnnotationImage, X as SceneAnnotationLink, Y as SceneAnnotationMarker, Z as SceneBackgroundConfig, _ as SceneCameraConfig, $ as SceneCinematicConfig, a0 as SceneCinematicWaypoint, a2 as SceneConfigActionEffect, a4 as SceneEnvironmentConfig, a5 as SceneGroundShadowConfig, a8 as SceneLightType, a9 as SceneLightingConfig, aa as SceneModelConfig, ab as SceneModelRenderer, ac as ScenePostProcessingConfig, ad as SceneSectionAxis, ae as SceneSectionConfig, af as SceneShadowConfig, ag as SceneStyleColorScale, ah as SceneStyleCondition, ai as SceneStylePulse, aj as SceneStyleRule, ak as SceneWireframeConfig, al as StyledObjectBindings, am as StyledObjectPulse, ao as ViewerCameraConfig, as as VisibilityActionEffect, at as applyIsolation, au as applyStyleRules, av as colorScaleValue, aw as isolatedBindingKeys, ax as material, ay as patchBindings, az as patchSceneConfig, aA as selectBindingKeys, aB as selectBindings, aC as useViewerAnimations } from './rendererBackend-QwMzISTn.js';
|
|
6
6
|
import { SceneLightInput } from './utils.js';
|
|
7
7
|
export { ACTION_CATALOG, ActionCatalogEntry, ActionHandling, ObjectBindingActionId, ObjectBindingKey, buildBindingsFromNodes, createDefaultBinding, defineObjectBindings, findCatalogAction, inferType, sceneLight } from './utils.js';
|
|
8
|
-
import {
|
|
9
|
-
export { M as ModelFormat } from './modelInfo-
|
|
8
|
+
import { a as ViewerModelBounds, b as ViewerModelInfo } from './modelInfo-XfUQO7C_.js';
|
|
9
|
+
export { M as ModelFormat, V as ViewerLoading, c as ViewerReveal } from './modelInfo-XfUQO7C_.js';
|
|
10
|
+
import { M as MaterialVariantGroup } from './materialVariants-DnZe9eMC.js';
|
|
11
|
+
export { D as DEFAULT_MODEL_VIEWER_LABELS, a as MaterialVariantOption, b as ModelViewerLabelKey, c as ModelViewerLabels, R as ReducedMotionSetting, d as chooseMaterialVariant } from './materialVariants-DnZe9eMC.js';
|
|
10
12
|
import '@react-three/drei';
|
|
11
13
|
import 'three';
|
|
12
14
|
|
|
13
15
|
declare function PublicModelViewer(props: ModelViewerProps): react.JSX.Element;
|
|
14
16
|
|
|
17
|
+
/** One side of a comparison: any ModelViewer props, over the shared ones. */
|
|
18
|
+
type CompareViewerSide = Partial<ModelViewerProps> & {
|
|
19
|
+
/** Shown over this side. Defaults to "Before" and "After". */
|
|
20
|
+
label?: string;
|
|
21
|
+
};
|
|
22
|
+
type CompareViewerProps = Partial<ModelViewerProps> & {
|
|
23
|
+
licenseKey: string;
|
|
24
|
+
/** The left side: the shared props with these on top. */
|
|
25
|
+
before: CompareViewerSide;
|
|
26
|
+
/** The right side. */
|
|
27
|
+
after: CompareViewerSide;
|
|
28
|
+
/**
|
|
29
|
+
* `"slider"` lays the two views over each other with a divider to drag
|
|
30
|
+
* across; `"side-by-side"` shows them next to each other. Default
|
|
31
|
+
* `"slider"`.
|
|
32
|
+
*/
|
|
33
|
+
layout?: "slider" | "side-by-side";
|
|
34
|
+
/** Where the slider's divider is, from 0 (left edge) to 1. Default 0.5. */
|
|
35
|
+
split?: number;
|
|
36
|
+
onSplitChange?: (split: number) => void;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Two ModelViewers showing two configurations of a model (or two models) with
|
|
40
|
+
* one camera: moving either view moves both.
|
|
41
|
+
*/
|
|
42
|
+
declare function CompareViewer(props: CompareViewerProps): react.JSX.Element;
|
|
43
|
+
|
|
15
44
|
type HiddenObjectsState = Record<string, boolean>;
|
|
16
45
|
type ObjectBindingsController = {
|
|
17
46
|
objectBindings: Record<string, ObjectBinding>;
|
|
@@ -293,9 +322,11 @@ type ViewerModelProps = {
|
|
|
293
322
|
objectCount: number;
|
|
294
323
|
/**
|
|
295
324
|
* The model's glTF material variants, by name; empty when it has none. Show
|
|
296
|
-
*
|
|
325
|
+
* them by setting `sceneConfig.model.activeVariants`.
|
|
297
326
|
*/
|
|
298
327
|
materialVariants: string[];
|
|
328
|
+
/** The same variants as option groups, with labels and swatches. */
|
|
329
|
+
materialVariantGroups: MaterialVariantGroup[];
|
|
299
330
|
/**
|
|
300
331
|
* Every bindable object in the model (see `ViewerObjectInfo`). Filled by
|
|
301
332
|
* `handleObjectCatalog`, so pass that to `ModelViewer`'s `onObjectCatalog`.
|
|
@@ -394,4 +425,4 @@ type ShareableViewerStateProps = {
|
|
|
394
425
|
};
|
|
395
426
|
declare function useShareableViewerState({ cameraState, setCameraState, objectBindings, onObjectBindingsChange, selectedObjectBinding, setSelectedObjectBinding, paramKey, debounceMs, autoSync, }: UseShareableViewerStateOptions): ShareableViewerStateProps;
|
|
396
427
|
|
|
397
|
-
export { BindingEdit, CaptureImageOptions, CaptureVideoOptions, type HiddenObjectsState, PublicModelViewer as ModelViewer, ModelViewerProps, ObjectActionEvent, ObjectBinding, ObjectBindingAction, ObjectBindingDecal, ObjectBindingMaterial, ObjectBindingPatch, ObjectBindingTarget, ObjectBindingTextureChannel, ObjectBindingTextureSlot, ObjectBindingTransform, type ObjectBindingsController, type RuntimeMaterialPatch, type RuntimeMaterialRanges, type RuntimePointLightOptions, type RuntimePointLightPatch, type RuntimeTransformPatch, type RuntimeTransformRanges, SceneConfig, type SceneConfigController, SceneConfigPatch, type SceneConfigUpdate, SceneLight, SceneLightAttachment, SceneLightInput, type SceneLightPatch, type SceneLightsController, type ShareableViewerStateProps, type UseShareableViewerStateOptions, UseViewerCameraOptions, type UseViewerEffectsOptions, type UseViewerOptions, type UseViewerProps, type UseViewerResult, type ViewerActionAnimationController, type ViewerActionBindingsController, type ViewerActionCameraController, type ViewerActionIsolationController, type ViewerActionSceneController, type ViewerActionsOptions, type ViewerActionsProps, ViewerAnimationsProps, ViewerCameraProps, ViewerCameraState, type ViewerConnectionController, type ViewerEffectChannels, type ViewerEffectEasing, type ViewerEffectRange, type ViewerEffectTarget, type ViewerEffectsController, type ViewerFlickerOptions, type ViewerHoverProps, ViewerIsolation, type ViewerIsolationProps, type ViewerLightEffectChannel, type ViewerMaterialEffectChannel, ViewerModelBounds, ViewerModelInfo, type ViewerModelProps, ViewerObjectInfo, type ViewerPulseOptions, type ViewerReadyConsumer, type ViewerReadyHandler, ViewerReadyState, type ViewerSelectionProps, type ViewerTimelineOptions, type ViewerTimelineStep, type ViewerTransformEffectChannel, type ViewerTransitionOptions, type ViewerVector3, useObjectBinding, useObjectBindingIds, useObjectBindings, useSceneConfig, useShareableViewerState, useViewer, useViewerActions, useViewerConnection, useViewerEffects, useViewerHover, useViewerIsolation, useViewerModel, useViewerSelection };
|
|
428
|
+
export { BindingEdit, CaptureImageOptions, CaptureVideoOptions, CompareViewer, type CompareViewerProps, type CompareViewerSide, type HiddenObjectsState, MaterialVariantGroup, PublicModelViewer as ModelViewer, ModelViewerProps, ObjectActionEvent, ObjectBinding, ObjectBindingAction, ObjectBindingDecal, ObjectBindingMaterial, ObjectBindingPatch, ObjectBindingTarget, ObjectBindingTextureChannel, ObjectBindingTextureSlot, ObjectBindingTransform, type ObjectBindingsController, type RuntimeMaterialPatch, type RuntimeMaterialRanges, type RuntimePointLightOptions, type RuntimePointLightPatch, type RuntimeTransformPatch, type RuntimeTransformRanges, SceneConfig, type SceneConfigController, SceneConfigPatch, type SceneConfigUpdate, SceneLight, SceneLightAttachment, SceneLightInput, type SceneLightPatch, type SceneLightsController, type ShareableViewerStateProps, type UseShareableViewerStateOptions, UseViewerCameraOptions, type UseViewerEffectsOptions, type UseViewerOptions, type UseViewerProps, type UseViewerResult, type ViewerActionAnimationController, type ViewerActionBindingsController, type ViewerActionCameraController, type ViewerActionIsolationController, type ViewerActionSceneController, type ViewerActionsOptions, type ViewerActionsProps, ViewerAnimationsProps, ViewerCameraProps, ViewerCameraState, type ViewerConnectionController, type ViewerEffectChannels, type ViewerEffectEasing, type ViewerEffectRange, type ViewerEffectTarget, type ViewerEffectsController, type ViewerFlickerOptions, type ViewerHoverProps, ViewerIsolation, type ViewerIsolationProps, type ViewerLightEffectChannel, type ViewerMaterialEffectChannel, ViewerModelBounds, ViewerModelInfo, type ViewerModelProps, ViewerObjectInfo, type ViewerPulseOptions, type ViewerReadyConsumer, type ViewerReadyHandler, ViewerReadyState, type ViewerSelectionProps, type ViewerTimelineOptions, type ViewerTimelineStep, type ViewerTransformEffectChannel, type ViewerTransitionOptions, type ViewerVector3, useObjectBinding, useObjectBindingIds, useObjectBindings, useSceneConfig, useShareableViewerState, useViewer, useViewerActions, useViewerConnection, useViewerEffects, useViewerHover, useViewerIsolation, useViewerModel, useViewerSelection };
|