:root{font-family:-apple-system,BlinkMacSystemFont,'Noto Sans TC',sans-serif;color:#282a27;background:#f3f0e9;--line:#d5d1c7;--muted:#74776e;--accent:#a25b3b}*{box-sizing:border-box}body{margin:0}button,input{font:inherit}button{cursor:pointer}button:focus-visible,input:focus-visible,summary:focus-visible{outline:2px solid #8b6f44;outline-offset:3px}header{display:flex;justify-content:space-between;align-items:center;padding:24px 4vw;border-bottom:1px solid var(--line);font-size:11px;letter-spacing:.1em}.brand{font-size:24px;letter-spacing:.16em;text-decoration:none;color:inherit}.brand span{font-size:14px;vertical-align:super}main{max-width:1480px;margin:auto;padding:32px 4vw 55px}.eyebrow{color:var(--accent);font-size:10px;letter-spacing:.17em;margin:0 0 12px}.page-heading h1{font-size:clamp(28px,3vw,40px);font-weight:500;margin:0 0 25px}.upload-panel{display:grid;grid-template-columns:1fr 1fr;gap:10px 28px;padding:23px 26px;background:#f9f7f0;border:1px dashed #b9baac}.upload-panel h2,.common-settings h2{font-size:16px;font-weight:600;margin:0 0 10px}.upload-panel p{color:var(--muted);font-size:11px;line-height:1.7;margin:0}.upload-field{display:flex;align-items:center;min-width:0}.upload-field input{font-size:12px;width:100%;color:var(--muted)}input[type=file]::file-selector-button{border:1px solid #b6baad;background:#fff;padding:11px 16px;margin-right:14px;cursor:pointer;color:#282a27}.source-name{grid-column:1/-1}#upload-message{grid-column:1/-1;color:#a1452d}#upload-message:empty{display:none}.common-settings{display:grid;grid-template-columns:1fr 1.2fr;gap:50px;border-bottom:1px solid var(--line);padding:28px 0}.common-settings small,.form-group small{font-size:10px;color:var(--muted);font-weight:400}.dimension-pair{display:flex;gap:12px;align-items:center;max-width:380px}.dimension-pair label{flex:1;font-size:11px;color:var(--muted);min-width:0}.dimension-pair>span{color:#96998e;padding-top:15px}input[type=number]{display:block;width:100%;min-width:0;padding:10px 12px;margin-top:7px;border:1px solid #c9c7bc;background:#faf8f2;color:#282a27;font-size:13px}.checkbox-label{display:flex;align-items:center;gap:7px;font-size:12px;color:var(--muted);margin-top:12px}input[type=checkbox]{accent-color:#52695c}.reflection-control{display:flex;align-items:center;gap:10px;margin-top:16px;font-size:12px}.reflection-control input[type=range]{flex:1;max-width:220px;min-width:80px;accent-color:#52695c;cursor:pointer}.range-end{font-size:10px;color:#8c9084}.reflection-control output{min-width:30px;font-size:15px;font-weight:600;font-variant-numeric:tabular-nums}.reflection-control:has(input:disabled){opacity:.45}.hint{font-size:11px;color:var(--muted);line-height:1.7;margin:10px 0 0}.viewbar{display:flex;align-items:center;gap:16px;flex-wrap:wrap;margin:23px 0 8px}.viewbar>span{font-size:11px;color:var(--muted)}.view-buttons{display:flex;gap:6px}.viewbar button{padding:9px 14px;border:1px solid #c9c7bc;background:transparent;color:#282a27;font-size:12px}.viewbar button[aria-pressed=true]{background:#282a27;color:#f3f0e9;border-color:#282a27}#download{margin-left:auto}#message{font-size:12px;color:#a1452d;min-height:16px;margin:12px 0}#mounting-blocks{display:grid;gap:24px}.mount-block{display:grid;grid-template-columns:minmax(280px,.85fr) minmax(340px,1.15fr);border:1px solid var(--line);background:#f8f5ee}.block-settings{padding:26px 28px;min-width:0}.block-head .eyebrow{font-size:10px}.block-head h2{font-size:25px;font-weight:500;margin:9px 0 8px}.block-head>p{font-size:12px;color:var(--muted);line-height:1.8;margin:0}.form-group{margin-top:23px}.form-group>label,.form-group>.label{display:block;font-size:12px;font-weight:500;margin:0 0 10px}.swatches{display:flex;flex-wrap:wrap;gap:7px}.swatches button{display:flex;align-items:center;gap:7px;border:1px solid #cbc9bf;background:transparent;padding:8px 10px;font-size:11px;color:#282a27}.swatches button[aria-pressed=true]{border-color:#282a27;box-shadow:inset 0 0 0 1px #282a27;background:#eeece3}.color-dot{height:17px;width:17px;border-radius:50%;border:1px solid #0002;box-shadow:inset 0 0 0 1px #ffffff35}.frame-inputs{padding:15px;background:#eeece3;border:1px solid #d5d4c7}.frame-inputs>.label{font-weight:600}.frame-inputs .dimension-pair{max-width:none}.edge-fields{display:grid;grid-template-columns:repeat(4,1fr);gap:9px}.edge-fields label{font-size:11px;color:var(--muted);min-width:0}.edge-fields input{padding:9px 8px}.advanced-settings{margin-top:20px;border-top:1px solid var(--line);padding-top:15px}.advanced-settings summary{cursor:pointer;font-size:12px;color:var(--muted)}.thickness{max-width:140px;margin-top:16px;font-size:11px;color:var(--muted)}.gap-control{max-width:180px}.preview-panel{min-width:0;border-left:1px solid var(--line);display:flex;flex-direction:column}.frame-size{padding:21px 26px 12px;display:flex;flex-direction:column;gap:7px}.frame-size>span{font-size:12px;color:#656a60}.frame-size strong{font-size:clamp(25px,2.8vw,36px);font-weight:700;line-height:1.2;font-variant-numeric:tabular-nums;letter-spacing:-.025em}.frame-size small{font-size:.55em;font-weight:500;letter-spacing:0}.viewer{width:100%;height:clamp(330px,39vw,510px);touch-action:none;flex:1;min-height:330px}.viewer canvas{display:block;width:100%;height:100%;cursor:grab}.viewer canvas:active{cursor:grabbing}.preview-footer{display:flex;justify-content:space-between;gap:15px;align-items:center;padding:15px 24px;border-top:1px solid var(--line)}.preview-footer p{white-space:pre-line;font-size:11px;line-height:1.8;color:var(--muted);margin:0}.preview-footer button{font-size:11px;color:#282a27;border:0;border-bottom:1px solid #74776e;background:transparent;padding:3px 0;white-space:nowrap}.construction{border-top:1px solid var(--line);padding-top:24px;margin-top:32px}.construction summary{font-size:15px;cursor:pointer}.construction p{font-size:12px;color:var(--muted);line-height:1.9;max-width:900px}footer{padding:24px 4vw;border-top:1px solid var(--line);font-size:10px;color:var(--muted);letter-spacing:.08em}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media(max-width:950px){.mount-block{grid-template-columns:minmax(240px,.85fr) minmax(300px,1.15fr)}.block-settings{padding:22px 20px}.common-settings{gap:28px}.swatches button{padding:7px 8px;font-size:10px}.color-dot{width:15px;height:15px}.preview-footer{flex-wrap:wrap}.frame-size{padding:20px 20px 10px}.frame-size strong{font-size:28px}}@media(max-width:700px){header{padding:20px}.page-heading h1{font-size:29px}main{padding:25px 20px 40px}.upload-panel{grid-template-columns:1fr;padding:20px;gap:15px}.common-settings{grid-template-columns:1fr;gap:25px;padding:24px 0}.dimension-pair{max-width:none}.mount-block{grid-template-columns:1fr}.preview-panel{border-left:0;border-top:1px solid var(--line)}.block-settings{padding:22px}.block-head h2{font-size:24px}.viewer{height:380px;min-height:300px;flex:initial}.frame-size strong{font-size:31px}.viewbar>span{order:3;flex-basis:100%}#download{margin-left:0}.swatches button{padding:8px 10px;font-size:11px}.color-dot{width:17px;height:17px}.frame-size{padding:20px 22px 10px}.edge-fields{gap:8px}.preview-footer{padding:14px 22px}.reflection-control input[type=range]{max-width:none}}

/* One persistent panel per tab preserves inputs, frame colors and camera poses. */
:root{--mount-panel-height:clamp(550px,70vh,710px)}
.mount-tabs{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin:22px 0 14px}
.mount-tabs button{padding:12px 10px;min-height:48px;font-size:13px;line-height:1.5;background:#f8f5ee;border:1px solid #c9c7bc;color:#5f665b}
.mount-tabs button[aria-selected=true]{background:#282a27;color:#f3f0e9;border-color:#282a27;font-weight:600}
.mount-tabs button:hover:not([aria-selected=true]){background:#eae8df;color:#282a27}
.viewbar{margin:0 0 14px}#message:empty{display:none}
#mounting-blocks{display:block;min-height:var(--mount-panel-height)}
.mount-block{height:var(--mount-panel-height);grid-template-rows:minmax(0,1fr)}
.mount-block[hidden]{display:none}
.block-settings{min-height:0;overflow-y:auto;overscroll-behavior:contain;scrollbar-gutter:stable}
.preview-panel{height:100%;min-height:0;display:grid;grid-template-rows:100px minmax(0,1fr) 80px;align-self:start}
.frame-size{min-height:0;justify-content:center;padding-top:13px;padding-bottom:13px}
.viewer{height:100%;min-height:0;flex:initial}
.preview-footer{min-height:0;height:80px;padding-block:12px;align-content:center}
@media(max-width:700px){
 :root{--mount-panel-height:850px}
 .mount-tabs{grid-template-columns:repeat(2,minmax(0,1fr));gap:7px;margin-top:20px}
 .mount-tabs button{font-size:12px;min-height:46px;padding:10px 7px}
 .mount-block{height:var(--mount-panel-height);grid-template-rows:310px minmax(0,1fr)}
 .block-settings{height:310px;padding:20px 22px}
 .preview-panel{grid-template-rows:100px minmax(0,1fr) 80px}
 .preview-footer{height:80px;padding-block:10px}
 .viewer{height:100%;min-height:0}
}

.upload-actions{grid-column:1/-1;display:flex;align-items:center;gap:14px;flex-wrap:wrap}
.upload-actions button{background:transparent;border:1px solid #b6baad;padding:8px 12px;color:inherit;font-size:12px}
.upload-actions button:disabled{opacity:.4;cursor:default}
.upload-actions span,#cleanup-message{font-size:11px;color:var(--muted);line-height:1.7}
#cleanup-message{grid-column:1/-1}#cleanup-message:empty{display:none}
footer{display:flex;justify-content:space-between;gap:20px}footer a{color:inherit;text-decoration:none}footer a:hover{text-decoration:underline}

.background-controls{display:flex;align-items:center;flex-wrap:wrap;gap:10px;border:0;padding:0;margin:0;min-width:0;flex:1 1 440px;font-size:11px}.background-label{font-weight:600}.background-swatches{display:flex;gap:7px}.viewbar .background-swatches button{width:25px;height:25px;flex:0 0 25px;padding:0;border-radius:50%;border:1px solid #0003;background:var(--swatch);box-shadow:inset 0 0 0 2px #ffffff60}.viewbar .background-swatches button[aria-pressed=true]{outline:2px solid #282a27;outline-offset:2px;border-color:#fff;background:var(--swatch)}.background-picker{display:flex;align-items:center;gap:7px;white-space:nowrap}.background-picker input{width:30px;height:28px;padding:2px;border:1px solid #c9c7bc;background:transparent;cursor:pointer}.background-rgb{display:flex;gap:7px}.background-rgb label{display:flex;align-items:center;gap:4px}.background-rgb input[type=number]{width:48px;padding:5px 4px;margin:0;font-size:11px}.background-rgb input[aria-invalid=true]{border-color:#a1452d}.background-error{font-size:11px;color:#a1452d}.background-error:empty{display:none}.viewbar>span{flex-basis:100%;order:3}@media(max-width:700px){.background-controls{flex-basis:100%;order:2;gap:10px 12px}.background-rgb{flex-wrap:wrap}.background-controls input[type=number]{font-size:16px;width:56px}.background-picker input{width:36px;height:32px}}
