:root{color-scheme:dark;font-family:Segoe UI Variable,Microsoft YaHei UI,Microsoft YaHei,sans-serif;color:#e1e2d9;background:#2f3532;font-synthesis:none;--surface: #2f3532;--surface-soft: #363e39;--surface-raised: #424b45;--viewer: #333333;--ink: #e1e2d9;--muted: #bec3bc;--line: rgba(225, 226, 217, .14);--accent: #87968d;--accent-strong: #aab5ae;--accent-soft: #59665f;--danger: #c0938d;--radius: 16px;--shadow: 0 24px 64px rgba(10, 14, 12, .28)}*{box-sizing:border-box}html,body,#viewer{width:100%;height:100%}html,body{overscroll-behavior:none}::selection{color:#202622;background:var(--accent-strong)}body{margin:0;min-width:320px;min-height:100vh;min-height:100dvh;overflow:hidden;background:var(--surface)}button,a{font:inherit}button{-webkit-tap-highlight-color:transparent}button:focus-visible,a:focus-visible,#viewer:focus-visible{outline:2px solid var(--accent-strong);outline-offset:3px}.app-shell{min-height:100vh;min-height:100dvh;display:grid;grid-template-columns:minmax(0,1fr);gap:12px;padding:12px;background:var(--surface)}.scene-rail{min-height:0;display:flex;flex-direction:column;align-items:center;justify-content:space-between;padding:14px 10px 16px;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface-soft)}.rail-primary{display:flex;flex-direction:column;align-items:center;gap:24px}.icon-button,.viewer-tools button,.error-card button{border:1px solid var(--line);border-radius:12px;color:var(--ink);background:var(--surface-raised);cursor:pointer;transition:transform .18s ease,background-color .18s ease,border-color .18s ease,color .18s ease}.icon-button:hover,.viewer-tools button:hover,.error-card button:hover{border-color:#aab5ae6b;background:#4a554e;color:#f1f1eb}.icon-button:active,.viewer-tools button:active,.error-card button:active{transform:scale(.97)}.icon-button svg,.viewer-tools svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}.menu-button{min-width:54px;min-height:54px;display:grid;place-items:center;gap:3px;padding:7px 5px 6px}.menu-button svg{width:20px}.button-label{color:var(--muted);font-size:10px;line-height:1}.brand{display:flex;flex-direction:column;align-items:center;gap:8px;color:var(--ink);text-decoration:none}.brand-mark{width:38px;height:38px;display:grid;place-items:center;border:1px solid rgba(170,181,174,.3);border-radius:12px;color:var(--accent-strong);background:#303833;font-size:14px;font-weight:650}.brand-copy{display:none}.status{display:flex;align-items:center;gap:7px;color:var(--muted);font-size:10px;writing-mode:vertical-rl}.status-dot{width:7px;height:7px;flex:0 0 auto;border-radius:50%;background:#a58e73}.is-ready .status-dot{background:var(--accent-strong)}.has-error .status-dot{background:var(--danger)}.workspace{min-width:0;min-height:0}.viewer-wrap{position:relative;height:100%;min-height:360px;overflow:hidden;border:1px solid rgba(225,226,217,.1);border-radius:var(--radius);background:var(--viewer);box-shadow:var(--shadow)}#viewer{position:absolute;inset:0;cursor:grab;background:var(--viewer);touch-action:none;overscroll-behavior:none;-webkit-user-select:none;user-select:none}#viewer:active{cursor:grabbing}#viewer.is-assembly-mode{cursor:grab}#viewer.is-assembly-mode.is-dragging{cursor:grabbing}#viewer canvas{width:100%;height:100%;display:block;background:transparent;touch-action:none;overscroll-behavior:none}.scene-heading{position:absolute;top:clamp(22px,3vw,40px);left:clamp(22px,3vw,42px);max-width:min(350px,calc(100% - 44px));pointer-events:none}.scene-heading h1{margin:0;color:#f1f1ebeb;font-size:clamp(22px,2.7vw,36px);font-weight:520;letter-spacing:-.035em;line-height:1.15;text-shadow:0 2px 18px rgba(0,0,0,.24)}.scene-heading p{display:flex;gap:8px;margin:9px 0 0;color:#cdd1ca9e;font-size:11px;letter-spacing:.04em}.role-legend{position:absolute;top:clamp(24px,3vw,40px);right:clamp(18px,2.5vw,28px);min-width:132px;padding:14px 15px 15px;border:1px solid var(--line);border-radius:12px;color:var(--ink);background:#363e39f0;pointer-events:none}.role-legend h2{margin:0 0 11px;color:var(--muted);font-size:10px;font-weight:600;letter-spacing:.08em}.role-legend ul{display:grid;gap:9px;margin:0;padding:0;list-style:none}.role-legend li{display:flex;align-items:center;gap:9px;font-size:11px;line-height:1}.role-swatch{width:12px;height:12px;flex:0 0 auto;border:1px solid rgba(255,255,255,.28);border-radius:4px;background:var(--role-color)}.loading-card,.error-card{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:min(320px,calc(100% - 40px));padding:20px;border:1px solid var(--line);border-radius:var(--radius);background:#363e39f2;box-shadow:var(--shadow);color:var(--muted);font-size:12px;text-align:center}.loading-line{height:3px;margin-bottom:15px;overflow:hidden;border-radius:3px;background:#aab5ae2e}.loading-line span{display:block;width:100%;height:100%;transform:scaleX(.08);transform-origin:left center;background:var(--accent-strong);transition:transform .2s ease}.error-card strong{color:var(--danger);font-size:15px}.error-card p{line-height:1.65;word-break:break-word}.error-card button{min-height:42px;padding:0 15px}.viewer-tools{position:absolute;right:clamp(16px,2.5vw,28px);bottom:clamp(18px,2.8vw,28px);display:flex;gap:8px}.viewer-tools button{min-height:44px;display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:0 14px;font-size:11px;font-weight:600;white-space:nowrap}.viewer-tools button[aria-pressed=true]{color:#222825;border-color:var(--accent-strong);background:var(--accent-strong)}.viewer-tools button:disabled{opacity:.42;cursor:not-allowed}.animation-group,.assembly-group{display:flex;gap:6px}.animation-icon-pause,#toggleAnimation[aria-pressed=true] .animation-icon-play{display:none}#toggleAnimation[aria-pressed=true] .animation-icon-pause{display:block}.zoom-group{display:flex;overflow:hidden;border:1px solid var(--line);border-radius:12px;background:var(--surface-raised)}.viewer-tools .zoom-button{width:64px;padding:0;gap:4px;border:0;border-radius:0;background:transparent}.viewer-tools .zoom-button+.zoom-button{border-left:1px solid var(--line)}.gesture-hint{position:absolute;left:clamp(22px,3vw,42px);bottom:clamp(22px,2.8vw,31px);color:#e1e2d9b8;font-size:10px;pointer-events:none}.touch-hint{display:none}.menu-backdrop{position:fixed;inset:0;z-index:20;opacity:0;background:#0b0f0d8f;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);transition:opacity .25s ease}.menu-backdrop.is-visible{opacity:1}.side-menu{position:fixed;inset:12px auto 12px 12px;z-index:30;width:min(390px,calc(100vw - 24px));display:grid;grid-template-rows:auto minmax(0,1fr);transform:translate(calc(-100% - 20px));overflow:hidden;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface-soft);box-shadow:28px 0 70px #070a0861;visibility:hidden;transition:transform .3s cubic-bezier(.16,1,.3,1),visibility 0s linear .3s}.side-menu.is-open{transform:translate(0);visibility:visible;transition-delay:0s}.side-menu-header{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;padding:28px 26px 23px;border-bottom:1px solid var(--line)}.side-menu-header h2{margin:0;color:var(--ink);font-size:24px;font-weight:560;letter-spacing:-.03em}.side-menu-header p{margin:7px 0 0;color:var(--muted);font-size:12px}.close-menu-button{width:42px;height:42px;display:grid;place-items:center;padding:0}.side-menu-content{min-height:0;overflow-y:auto;padding:26px;scrollbar-color:var(--accent-soft) transparent}.side-menu-content h3{margin:0 0 14px;color:var(--muted);font-size:11px;font-weight:650;letter-spacing:.08em}.scene-list{display:grid;gap:4px}.scene-entry{width:100%;display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:14px;padding:14px 12px;border:1px solid transparent;border-radius:14px;color:var(--ink);background:transparent;text-align:left;cursor:pointer;transition:background-color .18s ease,border-color .18s ease}.scene-entry:hover{background:#424b45a3}.scene-entry[aria-current=true]{border-color:#aab5ae4d;background:var(--surface-raised)}.scene-entry-copy{min-width:0;display:grid;gap:5px}.scene-entry-copy strong{overflow:hidden;color:var(--ink);font-size:13px;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.scene-entry-copy span,.scene-entry-state{color:var(--muted);font-size:10px}.scene-entry-state{color:#c2cbc5}[hidden]{display:none!important}.model-structure{margin-bottom:24px;color:var(--ink)}.model-structure summary{cursor:pointer;min-height:44px;padding:12px 0;font-size:13px;overflow-wrap:anywhere}.model-structure summary:focus-visible{outline:2px solid var(--accent-strong);outline-offset:2px}.model-structure>p{margin:4px 0 12px;color:var(--muted);font-size:12px}.model-tree,.model-tree ul{list-style:none;padding:0;margin:0}.model-tree ul{margin-left:10px;padding-left:12px;border-left:1px solid var(--line)}.model-tree summary{font-size:12px}.model-tree small{margin-left:8px;color:var(--muted);font-size:10px}.model-tree-leaf{display:block;padding:9px 0;font-size:12px;line-height:1.5;overflow-wrap:anywhere}.has-part-inspector #viewer{width:calc(100% - 268px)}.role-legend{top:28px;left:22px;right:auto}.part-inspector{min-width:0;max-width:calc(100% - 20px);overflow-x:hidden;position:absolute;top:24px;right:18px;bottom:96px;width:236px;display:flex;flex-direction:column;gap:16px;padding:16px;border-radius:12px;background:var(--surface-soft);overflow-y:auto;scrollbar-color:var(--accent-soft) transparent}.part-inspector>*{min-width:0;max-width:100%}.part-inspector-header{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px;width:100%}.part-inspector-header h2{flex:1 1 auto;min-width:0}.part-inspector-header #showAllParts{flex:0 0 auto;white-space:nowrap;width:auto}.part-inspector h2{margin:0;font-size:14px;font-weight:600}.part-inspector button{min-height:44px;border:1px solid var(--line);border-radius:12px;color:var(--ink);background:var(--surface-raised);cursor:pointer;padding:8px 10px;font-size:12px}.part-inspector button:hover{background:#4a554e}.part-inspector button[aria-pressed=true]{background:var(--accent-strong);color:#222825}.part-inspector button:disabled{opacity:.5;cursor:not-allowed}.part-buttons{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;min-width:0;width:100%}.part-description{border-top:1px solid var(--line);padding-top:14px}.part-description h3{margin:0 0 8px;font-size:14px;font-weight:600}.part-description p{margin:0;color:var(--muted);font-size:13px;line-height:1.7;overflow-wrap:anywhere;white-space:pre-line}.is-assembling #partInspector{display:none}.assembly-editor{gap:10px}.assembly-editor-label{color:var(--muted);font-size:12px;margin:0}.assembly-mode{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px}.assembly-editor>*{flex-shrink:0}.assembly-editor label{color:var(--muted);font-size:12px;display:grid;gap:6px}.assembly-editor select,.assembly-editor input{width:100%;min-width:0;min-height:44px;padding:8px;font:inherit;font-size:12px;color:var(--ink);background:var(--surface-raised);border:1px solid var(--line);border-radius:8px}.assembly-editor :is(select,input,summary):focus-visible{outline:2px solid var(--accent-strong);outline-offset:2px}.assembly-editor-hint{color:var(--muted);font-size:12px;line-height:1.6;margin:0}.story-clock{position:absolute;right:24px;top:28px;display:grid;gap:6px;text-align:right;pointer-events:none}.story-clock span,.story-clock small{color:var(--muted);font-size:11px}.story-clock time{font-size:28px;font-variant-numeric:tabular-nums}@media(max-width:760px){.app-shell{grid-template-columns:1fr;grid-template-rows:60px minmax(0,1fr);gap:8px;padding:8px}.scene-rail{flex-direction:row;padding:7px 9px}.rail-primary{flex-direction:row;gap:12px}.menu-button{min-width:44px;min-height:44px;padding:0}.menu-button .button-label{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}.brand{flex-direction:row;gap:10px}.brand-mark{width:34px;height:34px;border-radius:10px;font-size:12px}.brand-copy{display:grid;gap:1px}.brand-copy strong{font-size:12px;font-weight:600}.brand-copy small{color:var(--muted);font-size:9px}.status{writing-mode:horizontal-tb;font-size:10px}.viewer-wrap{min-height:0}.scene-heading{top:20px;left:18px}.scene-heading h1{font-size:23px}.scene-heading p{margin-top:6px}.role-legend{top:20px;right:16px;min-width:120px;padding:12px}.viewer-tools{left:10px;right:10px;bottom:12px;justify-content:flex-end;gap:6px}.viewer-tools button{min-height:44px;padding:0 10px}.viewer-tools .zoom-button{width:40px}.gesture-hint{left:18px;bottom:69px;font-size:9px}.desktop-hint{display:none}.touch-hint{display:inline}.side-menu{inset:8px auto 8px 8px;width:min(360px,calc(100vw - 16px))}.side-menu-header{padding:22px 20px 18px}.side-menu-content{padding:22px 20px}}@media(max-width:430px){.status #statusText{max-width:92px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.role-legend{top:80px;left:18px;right:auto;max-width:calc(100% - 36px);padding:10px 12px}.role-legend h2{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}.role-legend ul{display:flex;flex-wrap:wrap;gap:9px 14px}.role-legend li{gap:6px;font-size:10px}.role-swatch{width:10px;height:10px;border-radius:3px}.viewer-tools button span{display:none}.viewer-tools button{width:44px;padding:0}.gesture-hint{max-width:170px;line-height:1.5}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important}}@media(max-width:760px){.role-legend{top:88px;left:18px;right:auto;min-width:0;max-width:calc(100% - 36px);padding:8px 10px}.role-legend h2{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}.role-legend ul{display:flex;flex-wrap:wrap;gap:8px 12px}.has-part-inspector #viewer{width:100%;height:calc(100% - 232px)}.has-part-inspector .gesture-hint{display:none}.part-inspector{inset:auto 10px 66px;width:auto;height:164px;padding:10px 12px;gap:8px;overflow:hidden}.part-inspector-header h2{font-size:12px}.part-inspector-header{flex-shrink:0}.part-inspector-header button{min-height:28px;padding:4px 8px}.part-buttons{display:flex;flex-shrink:0;overflow-x:auto;scrollbar-color:var(--accent-soft) transparent;padding-bottom:2px}.part-buttons button{flex-shrink:0;white-space:nowrap}.part-description{min-height:0;overflow-y:auto;padding-top:6px;scrollbar-color:var(--accent-soft) transparent}.part-description h3{display:none}.part-description p{font-size:12px;line-height:1.6}.is-assembling #viewer{height:calc(100% - 306px)}.assembly-editor{height:238px;overflow-y:auto;gap:6px}.assembly-editor>.assembly-editor-hint:first-of-type{display:none}.assembly-editor>label{display:none}.assembly-editor h2{font-size:12px}.story-clock{top:20px;right:16px}.story-clock time{font-size:22px}.story-clock small{max-width:110px;font-size:10px}.viewer-wrap:has(.story-clock:not([hidden])) .scene-heading{max-width:calc(100% - 145px)}}@media(prefers-reduced-transparency:reduce){.menu-backdrop{-webkit-backdrop-filter:none;backdrop-filter:none}.loading-card,.error-card{background:var(--surface-soft)}}.mobile-panel-toggle{display:none}.viewer-wrap.is-wind{--viewer: #EBEBEB}.is-wind .scene-heading h1{color:#303632;text-shadow:none}.is-wind .scene-heading p,.is-wind .gesture-hint{color:#535c56}@media(max-width:760px),(max-height:500px)and (pointer:coarse){.is-wind .role-legend{color:#303632}.is-wind .role-swatch{border-color:#3036324d}}@media(min-width:761px)and (min-height:501px){.has-transparency-controls #partButtons{grid-template-columns:1fr}}.group-selector{border-bottom:1px solid var(--line);padding-bottom:14px}.group-selector h2{margin-bottom:10px}.group-scene-buttons{display:grid;gap:6px}.side-menu-content,.part-inspector,.part-buttons{overscroll-behavior:contain}@media(max-width:760px),(max-height:500px)and (pointer:coarse){.app-shell{display:block;position:fixed;top:var(--visible-top, 0px);left:var(--visible-left, 0px);width:var(--visible-width, 100%);height:var(--visible-height, 100dvh);min-height:0;padding:0}.workspace{height:100%}.viewer-wrap{height:100%;min-height:0;border:0;border-radius:0;box-shadow:none;--mobile-top: calc(14px + env(safe-area-inset-top)) ;--mobile-bottom: calc(64px + env(safe-area-inset-bottom)) }.viewer-wrap.has-role-legend{--mobile-top: calc(52px + env(safe-area-inset-top)) }.viewer-wrap.has-part-inspector{--mobile-bottom: calc(116px + env(safe-area-inset-bottom)) }.viewer-wrap.mobile-panel-open{--mobile-bottom: calc(min(296px, calc(var(--visible-height, 100dvh) * .55)) + env(safe-area-inset-bottom)) }#viewer,.has-part-inspector #viewer,.is-assembling #viewer{top:var(--mobile-top);bottom:var(--mobile-bottom);left:0;right:0;width:100%;height:calc(100% - var(--mobile-top) - var(--mobile-bottom))}.scene-rail{position:absolute;z-index:5;top:max(6px,env(safe-area-inset-top));left:max(8px,env(safe-area-inset-left));width:44px;height:44px;min-height:0;padding:0;border:0;background:none}.rail-primary{gap:0}.brand{display:none}.menu-button{width:44px;min-width:44px;min-height:44px;padding:0}.menu-button .button-label{display:none}.rail-status{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}.scene-heading{top:max(17px,calc(env(safe-area-inset-top) + 11px));left:16px;max-width:calc(100% - 32px)}.scene-heading h1{font-size:17px;line-height:1.25;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.scene-heading p{display:none}.role-legend{top:calc(14px + env(safe-area-inset-top));left:12px;right:auto;padding:3px 0;min-width:0;max-width:calc(100% - 24px);border:0;background:none}.viewer-wrap:has(.story-clock:not([hidden])) .role-legend{max-width:calc(100% - 104px)}.role-legend h2{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}.role-legend ul{display:flex;flex-wrap:wrap;gap:8px 12px}.role-legend li{font-size:11px;gap:6px}.story-clock{top:8px;right:12px;gap:2px}.story-clock time{font-size:19px}.story-clock span{font-size:10px}.story-clock small{display:none}.viewer-wrap:has(.story-clock:not([hidden])) .scene-heading{max-width:calc(100% - 118px)}.gesture-hint{display:none}.viewer-tools{left:8px;right:8px;bottom:max(8px,env(safe-area-inset-bottom));justify-content:center;gap:6px}.viewer-tools button{width:44px;min-height:50px;padding:3px 0;flex-direction:column;gap:4px}.viewer-tools button span{display:block;font-size:10px;line-height:1.15;font-weight:500}.viewer-tools .zoom-button{width:40px}.mobile-panel-toggle{display:flex;align-items:center;justify-content:space-between;position:absolute;bottom:calc(62px + env(safe-area-inset-bottom));left:12px;right:12px;min-height:44px;padding:0 14px;border:1px solid var(--line);border-radius:12px;color:var(--ink);background:var(--surface-soft);font-size:12px;cursor:pointer}.mobile-panel-toggle svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.7}.mobile-panel-toggle[aria-expanded=true] svg{transform:rotate(180deg)}.viewer-wrap:not(.mobile-panel-open) .part-inspector{display:none}.part-inspector,.assembly-editor{top:auto;bottom:calc(112px + env(safe-area-inset-bottom));left:12px;right:12px;width:auto;max-width:none;height:calc(var(--mobile-bottom) - 116px - env(safe-area-inset-bottom));padding:10px 12px;gap:6px;overflow-y:auto}.part-inspector>*{flex-shrink:0}.part-buttons{display:flex;overflow-x:auto;padding-bottom:2px}.part-buttons button{flex-shrink:0;white-space:nowrap}.part-description{overflow-y:visible}.assembly-editor>.assembly-editor-hint,.assembly-editor>h2,.assembly-editor-label{display:none}.assembly-mode{min-height:44px}.group-selector{padding-bottom:6px}.group-selector h2{display:none}.group-scene-buttons{display:flex;gap:6px;overflow-x:auto;scrollbar-color:var(--accent-soft) transparent}.group-scene-buttons button{flex:0 0 auto;white-space:nowrap}.side-menu{top:calc(var(--visible-top, 0px) + 8px);left:calc(var(--visible-left, 0px) + 8px);bottom:auto;height:calc(var(--visible-height, 100dvh) - 16px);width:min(360px,calc(var(--visible-width, 100%) - 16px))}}@media(max-height:500px)and (pointer:coarse)and (orientation:landscape){.viewer-wrap.mobile-panel-open{--mobile-bottom: calc(116px + env(safe-area-inset-bottom)) }.mobile-panel-open #viewer{width:calc(100% - 280px)}.mobile-panel-open .part-inspector{top:56px;bottom:calc(112px + env(safe-area-inset-bottom));left:auto;right:12px;width:256px;height:auto}}
