*{box-sizing:border-box}body{margin:0;background:#f3efe6;color:#1d1b18;font-family:system-ui,sans-serif}header,footer{padding:16px 3vw;background:white;border-bottom:1px solid #a8b7b2;display:flex;justify-content:space-between;gap:20px;flex-wrap:wrap}nav{display:flex;gap:22px;flex-wrap:wrap}a{color:#243c43;text-decoration:underline}main{max-width:1840px;margin:auto;padding:24px clamp(12px,3vw,48px)}h1{font-size:clamp(1.8rem,3vw,2.375rem);line-height:1.1;letter-spacing:-1px;color:#243c43;margin:12px 0}.intro{display:flex;gap:40px;justify-content:space-between;align-items:center}.intro>div{max-width:900px}.local-note{font-family:'IBM Plex Mono',monospace;font-size:.82rem;border-left:4px solid #243c43;padding-left:15px;white-space:nowrap}p{line-height:1.5}.workspace{display:grid;grid-template-columns:minmax(290px,360px) minmax(0,1fr);gap:22px;align-items:start}.pane{min-width:0;background:#fffdf8;border:1px solid #a8b7b2;padding:18px;margin:0 0 20px}h2{font-size:1.05rem;margin:-18px -18px 18px;padding:12px 16px;background:#243c43;color:white;display:flex;gap:12px;justify-content:space-between}h2 span{font-size:.8rem;font-weight:400}label{display:flex;flex-direction:column;gap:6px;margin:12px 0;font-size:.92rem}input,select{accent-color:#243c43;width:100%;min-width:0;font:inherit;padding:10px;border:1px solid #555;background:white;border-radius:0}input[type=checkbox]{width:20px;height:20px;flex-shrink:0;margin:0}.check{display:flex;flex-direction:row;align-items:center;gap:9px;line-height:1.45}.pair{display:grid;grid-template-columns:1fr 1fr;gap:12px}button{font:inherit;padding:10px 12px;min-height:44px;border:1px solid #8b9a97;background:#f8f5ee;color:#1d1b18;cursor:pointer;border-radius:0}button:hover{background:#e5ece7}button:disabled{opacity:.5;cursor:default}button.primary,button[aria-pressed=true]{background:#243c43;color:white}button.primary{width:100%;font-weight:600}button:focus-visible,input:focus-visible,select:focus-visible,summary:focus-visible,a:focus-visible{outline:3px solid #b45a18;outline-offset:3px}.hint{font-size:.84rem;color:#536a6d}.notice{font-size:.88rem;background:#fff1c7;padding:12px;border-left:4px solid #9b6300}.dropzone{border:2px dashed #243c43;padding:18px;background:#e9f0ed;cursor:pointer;margin:0;line-height:1.4}.dropzone span{font-size:.85rem}.dropzone input{padding:6px;font-size:.8rem}.dropzone.drag{background:#d9e9e5;border-style:solid}.file-info{font-family:'IBM Plex Mono',monospace;overflow-wrap:anywhere;font-size:.85rem}details{border-top:1px solid #aaa;padding-top:12px;margin-top:15px}summary{cursor:pointer;min-height:36px;font-weight:600}fieldset{border:1px solid #aaa;margin:12px 0;padding:10px}legend{font-size:.85rem;font-weight:600}.row,.toolbar,.downloads{display:flex;gap:8px;flex-wrap:wrap}.toolbar{margin-bottom:14px}.table-wrap{overflow:auto;margin-top:12px}table{width:100%;border-collapse:collapse;font-size:.8rem}th,td{padding:8px 5px;text-align:left;border-bottom:1px solid #ccc}td small{display:block;color:#555}td label{margin:0}th{background:#eee}td input{min-height:24px}.metrics{display:grid;grid-template-columns:1fr 1fr;font-size:.85rem;font-family:'IBM Plex Mono',monospace;gap:6px;margin:10px 0}.metrics dt,.metrics dd{margin:0;border-bottom:1px solid #ccc;padding:6px 0;overflow-wrap:anywhere}.metrics dd{text-align:right}.viewer-pane{position:sticky;top:12px}#viewer{height:clamp(360px,48vw,670px);background:#f3efe6;position:relative;overflow:hidden}#viewer canvas{width:100%;height:100%;display:block;touch-action:none}#viewer-message{position:absolute;left:16px;top:0;z-index:2;background:#ffffffdc;padding:8px;max-width:90%}.legend{display:flex;flex-wrap:wrap;gap:15px;font-size:.8rem;margin:12px 0}.legend span{display:flex;align-items:center;gap:6px}.legend i{width:14px;height:14px;border:1px solid #1d1b18;display:inline-block}.teal{background:#5ca3b0}.orange{background:#faa147}.status-row{display:flex;align-items:center;gap:16px;justify-content:space-between}#status{font-weight:600;margin:6px 0;overflow-wrap:anywhere}#cancel{flex-shrink:0}.section-control{display:flex;gap:24px;align-items:center;flex-wrap:wrap}.section-control label{margin:5px 0}.section-control label:last-child{flex:1;min-width:150px;display:grid;grid-template-columns:auto minmax(50px,1fr) 35px;align-items:center;font-size:.8rem}.section-control input[type=range]{padding:0}.viewer-column{min-width:0}body[data-busy=true] #viewer-message{display:block}.controls [aria-busy=true]{opacity:.75}footer{font-family:monospace;font-size:.85rem}.error{color:#9e1a12}[hidden]{display:none!important}@media(min-width:1450px){.workspace{grid-template-columns:380px minmax(0,1fr)}#viewer{height:700px}}@media(max-width:900px){.workspace{grid-template-columns:minmax(270px,320px) minmax(0,1fr)}.intro{display:block}.local-note{white-space:normal}.toolbar button{flex:1 1 95px}#viewer{height:430px}.viewer-pane{position:static}.section-control{gap:8px}.section-control label:last-child{grid-template-columns:1fr 2fr 35px}}@media(max-width:700px){main{padding:12px}.workspace{display:flex;flex-direction:column;gap:0}.controls,.viewer-column{width:100%}.viewer-column{display:contents}.viewer-pane{order:-1;width:100%}.pane{padding:14px;width:100%}h2{margin:-14px -14px 14px}.intro{margin-bottom:20px}.local-note{font-size:.75rem}#viewer{height:360px}.toolbar{gap:5px}.toolbar button{font-size:.85rem;flex:1 1 85px}.downloads button{flex:1}header{padding:14px}nav{gap:14px}.controls{order:0}.status-row{align-items:flex-start}.metrics{font-size:.8rem}.section-control{align-items:flex-start}h1{font-size:1.8rem}}
@media(max-width:700px){.controls{display:contents}.controls>.pane:first-child{order:-2}}
/* Workflow and review states, October 2026. */
.workflow{position:sticky;top:0;z-index:10;background:#fffdf8;border:1px solid #a8b7b2;margin:8px 0 20px;box-shadow:0 3px 0 #f3efe6}.workflow nav{display:grid;grid-template-columns:repeat(4,1fr);gap:0}.workflow nav a{padding:12px 14px;border-right:1px solid #aaa;text-decoration:none;font-weight:600;min-height:44px}.workflow nav a:last-child{border:0}.workflow nav a[aria-current=step]{background:#243c43;color:#fff}.workflow .status-row{padding:8px 14px;border-top:1px solid #aaa;min-height:48px}.workflow #status{font-size:.88rem;font-weight:500}.workflow #cancel{min-height:34px;padding:4px 12px}.workflow #cancel:disabled{display:none}body[data-busy=true] .workflow #status:before{content:'';display:inline-block;width:10px;height:10px;margin-right:9px;background:#243c43;animation:working 1s ease-in-out infinite alternate}@keyframes working{to{opacity:.25}}.pane{scroll-margin-top:140px}.viewer-pane{top:124px}#viewer{height:clamp(280px,calc(100dvh - 440px),480px)}.viewer-summary{font-family:'IBM Plex Mono',monospace;font-size:.85rem;margin:0 0 10px;padding:10px 12px;background:#eef1eb}.viewer-help{margin:9px 0}.representation{padding:9px 11px;background:#edf4f4;border-left:3px solid #16747c;font-size:.84rem}.formats{margin:0 0 12px;padding:0;border:0}.formats summary{font-size:.84rem;min-height:30px}.detection-details{margin-top:10px}.detection-details summary{font-size:.8rem;min-height:30px}.scope details{border:0;margin:0;padding:0}.scope summary{font-size:1rem}.notice[data-matched=true]{background:#edf4f4;border-color:#16747c}#orientation-settings{margin:0 0 14px;padding:0;border:0}#orientation-settings>summary{font-size:.88rem}.table-wrap{max-height:310px}thead{position:sticky;top:0}td:first-child{padding:0}td:first-child input{margin:10px;cursor:pointer}.downloads button:not(:disabled){border-color:#243c43}.downloads #step:not(:disabled),.downloads #three-mf:not(:disabled){background:#243c43;color:white}#convert-help{margin-bottom:0}body[data-view=converted] #legend{display:none}#section-z:disabled{opacity:.4}button:disabled{opacity:.6}.intro p{margin-bottom:16px}
@media(max-width:900px){.viewer-pane{position:static}.workflow nav a{font-size:.85rem;padding:10px 8px}#viewer{height:360px}.viewer-help{font-size:.76rem}}
@media(max-width:700px){.workflow{margin-top:0;width:100%}.workflow nav a{font-size:.75rem;padding:10px 5px;text-align:center}.workflow .status-row{padding:6px 9px}.workflow #status{font-size:.78rem;line-height:1.35}.intro{margin-bottom:8px}.intro .local-note{margin:8px 0 16px}.pane{scroll-margin-top:150px}.viewer-pane{order:-1}#viewer{height:300px}.viewer-summary{font-size:.78rem}.viewer-help{font-size:.72rem}.legend{font-size:.72rem;gap:8px}.section-control{gap:5px}.downloads button{flex:1 1 125px}.table-wrap{max-height:250px}}
@media(prefers-reduced-motion:reduce){body[data-busy=true] .workflow #status:before{animation:none}}
.pane{scroll-margin-top:calc(var(--workflow-height,120px) + 16px)}.viewer-pane{top:calc(var(--workflow-height,120px) + 12px)}
#export-shortcut{display:inline-flex;align-items:center;padding:10px 12px;background:#243c43;color:#fff;min-height:44px;text-decoration:none;font-weight:600}#units-settings{margin:10px 0;padding:8px 0 0}#units-settings summary{font-size:.85rem}#model-size dt:not(:first-child),#model-size dd:not(:nth-child(2)){font-size:.75rem;color:#555}
.foot-check{min-width:44px;min-height:44px;display:flex;align-items:center;justify-content:center;cursor:pointer}.legend span span{display:inline}
@media(max-width:700px){.section-control{flex-direction:column;align-items:stretch}.section-control label:last-child{width:100%;grid-template-columns:auto minmax(80px,1fr) 35px}.toolbar button{line-height:1.35}}

.intro-tools{flex-shrink:0}.intro-tools .local-note{margin-top:0}.intro-tools #example-help{margin:6px 0 16px;font-size:.78rem}.intro-tools #demo{font-size:.85rem;background:white}@media(max-width:900px){.intro-tools{margin-bottom:16px}}
.workflow-actions{display:flex;gap:8px;align-items:center;flex-shrink:0}#workflow-action{background:#243c43;color:#fff;font-weight:600;min-height:44px;white-space:nowrap}.workflow .status-row{gap:12px}@media(max-width:700px){.workflow .status-row{flex-wrap:wrap}.workflow-actions{width:100%}#workflow-action{flex:1}.workflow #status{margin:3px 0}.pane{scroll-margin-top:calc(var(--workflow-height,170px) + 16px)}}

button.primary:disabled,#workflow-action:disabled{background:#ddd;color:#555;border-color:#aaa;opacity:1;cursor:not-allowed}

/* Keep the file action separate from the model currently in the viewer. */
.dropzone #choose-file{width:100%;min-height:48px;background:#fff;color:#243c43;font-weight:600}.dropzone #choose-file:disabled{color:#666;background:#ddd}.dropzone #files[hidden]{display:none}.file-state{font-weight:600;margin:18px 0 4px}.file-state + .file-info{margin-top:0;overflow-wrap:anywhere}

.fit-control{display:flex;gap:4px;align-items:stretch}.fit-control #fit{min-width:0;flex:1;appearance:textfield;-moz-appearance:textfield}.fit-control #fit::-webkit-inner-spin-button,.fit-control #fit::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.fit-control button{min-width:44px;min-height:44px;padding:4px;font-size:1.25rem}

.loading{padding:0 14px 12px}.loading[hidden]{display:none}.loading progress{display:block;width:100%;height:10px;border:1px solid #777;border-radius:0;background:#eee;appearance:none;overflow:hidden}.loading progress::-webkit-progress-bar{background:#eee}.loading progress:indeterminate{background:linear-gradient(90deg,#eee 0%,#eee 30%,#243c43 30%,#243c43 60%,#eee 60%);background-size:250% 100%;animation:loading-track 1.8s linear infinite}.loading progress:indeterminate::-webkit-progress-bar{background:transparent}.loading progress::-webkit-progress-value{background:#243c43}#loading-stage:empty{display:none}#loading-stage{margin:0 0 6px}.loading progress::-moz-progress-bar{background:#243c43}.loading .hint{display:block;margin-top:6px;font-size:.75rem}@keyframes loading-track{from{background-position:100% 0}to{background-position:0 0}}@media(prefers-reduced-motion:reduce){.loading progress:indeterminate{animation:none}}

/* Keep preview and exports in one sticky unit so their panels cannot overlap.
   Tall columns scroll until their bottom is visible before sticking. */
.viewer-pane{position:static}
@media(min-width:901px){.viewer-column{position:sticky;top:min(calc(var(--workflow-height,120px) + 12px),calc(100dvh - var(--viewer-column-height,100dvh) - 12px))}}
