html,body{margin:0;padding:0;overflow:hidden}.app-container{grid-template-rows:100vh;grid-template-columns:20% 60% 20%;width:100vw;height:100vh;display:grid}.processing-hint{color:#f0ab00;margin-left:.8em;font-size:.9em}.empty-canvas-message{text-align:center;color:#7b7f8f;font-size:1.2em;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.main-viewport{flex-direction:column;height:100%;display:flex;position:relative;overflow:hidden}.canvas-wrapper{flex:1;width:100%;min-height:0;position:relative;overflow:hidden}.canvas-ui{flex-direction:column;gap:8px;display:flex;position:absolute;top:12px;left:12px}.canvas-stats{color:#fff;background:#00000080;border-radius:6px;padding:.4em .6em;font-size:.85em}.camera-toolbar{gap:.4em;display:flex}.camera-button{color:#fff;cursor:pointer;background:#0006;border:1px solid #fff6;border-radius:6px;padding:.3em .8em;font-size:.8em}.camera-button:hover{background:#0009}.center-panel{flex-direction:column;flex:1;justify-content:flex-start;align-items:center;min-width:0;padding:2em;display:flex}.file-input-container{box-sizing:border-box;background:#f3f3f7;border-bottom:1px solid #ddd;flex-wrap:wrap;justify-content:center;align-items:center;gap:1.5em;height:48px;min-height:48px;padding:0 1em;display:flex}.quality-preset-bar{align-items:center;gap:.6em;display:inline-flex}.quality-btn-group{align-items:center;gap:.4em;display:inline-flex}.quality-label{color:#555;font-size:.82em;font-weight:500}.quality-btn{color:#3b3e4a;cursor:pointer;background:#f4f4f8;border:1px solid #c0c4d6;border-radius:5px;padding:.35em .85em;font-size:.8em;font-weight:500;transition:all .15s;box-shadow:0 1px 2px #0000000a}.quality-btn:hover{color:#23a;background:#e2e6ff;border-color:#67c;box-shadow:0 2px 4px #6677cc26}.quality-btn-active{color:#fff;background:#35c;border-color:#24a;font-weight:600;box-shadow:0 2px 4px #3355cc40}.quality-btn-active:hover{background:#24a}.file-upload-group{align-items:center;gap:.8em;display:inline-flex}#file-input{display:none}.custom-file-upload{color:#3b3e4a;cursor:pointer;user-select:none;background:#f4f4f8;border:1px solid #c0c4d6;border-radius:5px;align-items:center;gap:.4em;padding:.35em .85em;font-size:.8em;font-weight:500;transition:all .15s;display:inline-flex;box-shadow:0 1px 2px #0000000a}.custom-file-upload:hover{color:#23a;background:#e2e6ff;border-color:#67c;box-shadow:0 2px 4px #6677cc26}.upload-icon{vertical-align:middle}.parse-button{margin-left:1em}.viewer-container{flex:1;justify-content:center;align-items:center;width:100%;min-height:350px;display:flex}.result-message{box-sizing:border-box;white-space:pre-wrap;background:#f3f3f7;border-top:1px solid #ddd;min-height:1.6em;padding:.4em 1em;font-size:.85em}.result-success{color:#1a7a1a}.result-error{color:#b91c1c;font-weight:500}.sidebar-left,.sidebar-right{overflow:hidden}.left-panel{box-sizing:border-box;background:#f3f3f7;border-right:1px solid #ddd;flex-direction:column;width:100%;height:100%;padding:0;display:flex;overflow:hidden}.panel{box-sizing:border-box;flex-direction:column;width:100%;height:100%;display:flex;overflow:hidden}.panel-header{box-sizing:border-box;background:#f3f3f7;border-bottom:1px solid #ddd;flex-shrink:0;justify-content:space-between;align-items:center;height:48px;min-height:48px;padding:0 1.2em;display:flex}.panel-header-title{color:#09090a;align-items:center;gap:.5em;font-size:1rem;font-weight:600;display:inline-flex}.panel-header-title .icon{color:#555;font-size:.95em}.clear-history-button{cursor:pointer;color:#555;box-sizing:border-box;background:#fff;border:1px solid #ddd;border-radius:6px;justify-content:center;align-items:center;width:36px;height:32px;font-size:13px;transition:all .15s;display:flex;box-shadow:0 1px 2px #0000000a}.clear-history-button:hover:not(:disabled){color:#dc2626;background:#fee2e2;border-color:#fca5a5}.clear-history-button:disabled{opacity:.35;cursor:not-allowed;color:#a1a1aa;box-shadow:none;background:#f4f4f5;border-color:#e4e4e7}.panel-content{box-sizing:border-box;flex:1;padding:1.2em;overflow:hidden auto}.left-panel-header{margin:0 0 .6em;font-size:1.1em}.empty-files-message{color:#888;margin-top:.6em;font-size:.95em}.files-list{flex-direction:column;gap:.4em;margin:0;padding:0;list-style:none;display:flex}.file-item-container{align-items:stretch;gap:.4em;min-width:0;display:flex}.file-item-button{text-align:left;cursor:pointer;background:#fff;border:1px solid #ddd;border-radius:6px;flex:1;min-width:0;padding:.5em .6em}.file-item-name{text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}.file-item-details{color:#666;text-overflow:ellipsis;white-space:nowrap;font-size:.85em;overflow:hidden}.delete-button{cursor:pointer;box-sizing:border-box;color:#666;background:#fff;border:1px solid #ddd;border-radius:6px;flex-shrink:0;justify-content:center;align-self:stretch;align-items:center;width:36px;line-height:0;transition:all .15s;display:flex;box-shadow:0 1px 2px #0000000a}.delete-button:hover{color:#dc2626;background:#fee2e2;border-color:#fca5a5}.delete-icon{pointer-events:none;font-size:14px;display:inline-block}.main-panel-container{width:100%;height:100%}.main-panel-status{color:#666;align-items:center;font-size:.85em}.main-panel-canvas{background:#fafbfc;border:none;width:100%;height:100%;display:block;position:absolute;top:0;left:0}.canvas-processing-overlay{color:#fff;background:#0009;border-radius:8px;padding:.6em 1.2em;font-size:.95em;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.fps-graph{color:#fff;pointer-events:none;user-select:none;background:#0000008c;border-radius:6px;flex-direction:column;gap:2px;padding:.3em .5em;font-size:.8em;display:flex;position:absolute;bottom:12px;left:12px}.fps-graph-label{font-variant-numeric:tabular-nums;line-height:1}.fps-graph-svg{display:block}.right-panel{box-sizing:border-box;background:#f3f3f7;border-left:1px solid #ddd;flex-direction:column;width:100%;height:100%;padding:0;display:flex;overflow:hidden}.metadata-grid{word-break:break-word;overflow-wrap:anywhere;grid-template-columns:130px 1fr;align-items:baseline;gap:.5em 1em;display:grid}.detail-label{font-weight:700}.panel-meshes{flex-direction:column;height:100%;display:flex}.mesh-controls{border-bottom:1px solid var(--border-color);gap:8px;padding:8px;display:flex}.mesh-item{border-bottom:1px solid var(--border-color);cursor:pointer;padding:8px 12px;transition:background-color .2s}.mesh-item:hover{background-color:var(--hover-bg)}.mesh-header{align-items:center;gap:8px;display:flex}.mesh-name{font-weight:500}.mesh-details{color:var(--text-secondary);margin-left:24px;font-size:.85em}.mesh-visibility{margin-right:4px}.meshes-list{flex:1;overflow-y:auto}.back-button{cursor:pointer;color:#3b3e4a;background:#fff;border:1px solid #ddd;border-radius:6px;align-items:center;gap:.4em;padding:.35em .7em;font-size:.85em;font-weight:500;transition:all .15s;display:inline-flex;box-shadow:0 1px 2px #0000000a}.back-button:hover{color:#23a;background:#e2e6ff;border-color:#67c}.webgpu-unavailable{box-sizing:border-box;background:#fafbfc;justify-content:center;align-items:center;padding:2em;display:flex;position:fixed;inset:0}.webgpu-unavailable-card{text-align:center;background:#fff;border:1px solid #ddd;border-radius:10px;max-width:34em;padding:2.5em 2em;box-shadow:0 2px 8px #00000014}.webgpu-unavailable-icon{color:#d97706;margin-bottom:.5em;font-size:2.2em}.webgpu-unavailable-card h1{color:#09090a;margin:0 0 .8em;font-size:1.3em}.webgpu-unavailable-reason{color:#7b7f8f;word-break:break-word;overflow-wrap:anywhere;margin:0 0 1.2em;font-size:.95em}.webgpu-unavailable-card p{color:#3f3f46;margin:.4em 0;line-height:1.5}.modal-backdrop{backdrop-filter:blur(2px);z-index:1000;background:#00000073;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal-dialog{background:#fff;border:1px solid #e4e4e7;border-radius:8px;width:90%;max-width:420px;padding:1.5em;box-shadow:0 10px 25px #0003}.modal-header{margin-bottom:.8em}.modal-title{color:#18181b;margin:0;font-size:1.15rem;font-weight:600}.modal-body p{color:#52525b;margin:0 0 1.2em;font-size:.95rem;line-height:1.4}.modal-footer{justify-content:flex-end;gap:.75em;display:flex}.modal-btn{cursor:pointer;border:1px solid #0000;border-radius:6px;padding:.5em 1em;font-size:.9rem;font-weight:500;transition:background .15s,border-color .15s}.modal-btn-cancel{color:#3f3f46;background:#f4f4f5;border-color:#e4e4e7}.modal-btn-cancel:hover{background:#e4e4e7}.modal-btn-danger{color:#fff;background:#dc2626}.modal-btn-danger:hover{background:#b91c1c}