*{box-sizing:border-box}html{color-scheme:dark}body{margin:0;background:#101416;color:#e8ecea;font:15px/1.5 'Segoe UI',Arial,sans-serif}button,select,input{font:inherit}button,a,select,input{-webkit-tap-highlight-color:transparent}button,select{color:inherit;background:#1c282b;border:1px solid #a8c5c52c;border-radius:9px;min-height:44px;padding:9px 15px;cursor:pointer}button:hover{background:#304044}button:disabled{opacity:.4;cursor:default}button:focus-visible,select:focus-visible,input:focus-visible,canvas:focus-visible,a:focus-visible,summary:focus-visible{outline:2px solid #ecc68e;outline-offset:4px}a{color:#b5d7cf}button[aria-pressed=true],button[aria-checked=true]{border-color:#d9b785;color:#efd1a3}.topbar{height:78px;display:flex;align-items:center;justify-content:space-between;padding:0 32px;border-bottom:1px solid #78908d24;gap:18px}.brand{font-weight:700;letter-spacing:2px;text-decoration:none;color:#edf0eb;display:flex;align-items:center;gap:13px;font-size:13px}.mark{font:30px Georgia;color:#e2bc83}.edition{font-size:10px;font-weight:400;color:#9baead;border-left:1px solid #60767655;padding-left:20px;letter-spacing:1.5px}.topbar nav{display:flex;padding:4px;border:1px solid #75908e30;border-radius:13px;gap:3px}.topbar nav button{border:0;background:transparent;min-width:105px}.topbar nav [aria-pressed=true]{background:#2e3c3d;color:#f0d5ac}#reduced{font-size:11px;background:transparent;min-height:40px}.labscene{height:calc(100dvh -175px);min-height:610px;max-height:1000px;position:relative;overflow:hidden;background:radial-gradient(ellipse at 50% 55%,#283638,#101416 70%)}#engine{display:block;width:100%;height:100%;touch-action:none;cursor:grab}.chapter{position:absolute;top:28px;left:34px;pointer-events:none;z-index:2}.eyebrow{font-size:10px;letter-spacing:2px;color:#a6bcb8;line-height:1.7}h1{font-size:clamp(28px,3.3vw,53px);line-height:1.05;letter-spacing:-1.8px;margin:12px 0 15px;font-weight:450}em{font-style:normal;color:#e1bc84}.chapter p{font-size:11px;color:#9bb1ad}.stagebadge{position:absolute;left:34px;top:222px;font:10px Consolas,monospace;letter-spacing:1px;display:flex;align-items:center;gap:8px;color:#b7c6c3;pointer-events:none}.dot{width:5px;height:5px;border-radius:50%;background:#dab175;box-shadow:0 0 10px #dab17588}.dock{position:absolute;bottom:135px;left:50%;transform:translateX(-50%);display:flex;gap:5px;padding:7px;border:1px solid #a9bfbb30;background:#182225ed;box-shadow:0 8px 24px #0005;border-radius:15px;white-space:nowrap}.dock button{background:transparent;border-color:transparent}.dock #explode{background:#d6b37d;color:#10191b;min-width:172px;font-weight:600}.dock #explode:hover{background:#edc994}.dock button span{margin-right:7px}.timeline{position:absolute;left:34px;right:34px;bottom:20px;max-width:1000px;margin:auto}.readouts{display:flex;align-items:baseline;gap:24px;color:#a8bcba;font-size:12px;min-height:50px}.readouts strong{font:39px/1 Consolas,monospace;letter-spacing:-2px;color:#e6eae5;min-width:100px}.readouts #valves{margin-left:auto;font-size:10px}input[type=range]{width:100%;accent-color:#d8b581;height:24px;cursor:ew-resize}.ticklabels{display:flex;align-items:center;justify-content:space-between;color:#819b98;font:10px Consolas,monospace}.ticklabels button{padding:0 9px;min-height:25px;font-size:11px;border:0;background:transparent}.context{position:absolute;top:108px;right:28px;width:310px;z-index:5;border:1px solid #8fa49f40;border-radius:16px;background:#1b272aee;box-shadow:0 15px 70px #0005;backdrop-filter:blur(16px);padding:24px}.context h2{font-size:31px;font-weight:450;letter-spacing:-1px;line-height:1.07;margin:18px 0}.context p{font-size:13px;line-height:1.6;color:#b4c5c1}.paneltop{display:flex;align-items:center;justify-content:space-between;gap:10px}.paneltop button{padding:0;width:35px;min-height:35px;font-size:22px;background:transparent;border:0}.context .small{font-size:11px;color:#91a9a6}.context .primary{width:100%;background:#d9b681;color:#142124;font-weight:600}.quiet{border:0;background:transparent;font-size:12px;width:100%;color:#becfc9}.answers{display:flex;gap:10px}.answers button{flex:1;text-align:left;font-size:12px}.answers strong{font-size:25px;display:block}.reference-pair{display:grid;grid-template-columns:1fr 1fr;gap:8px}.reference-pair figure{margin:0;background:#10191b;border-radius:7px;overflow:hidden}.reference-pair img{display:block;width:100%;aspect-ratio:1;object-fit:cover}.reference-pair figcaption{padding:8px;font-size:10px;color:#e7c48d}.reference-pair small{font-size:9px;color:#b0c6c1}.micro{background:#101b1e;border-radius:8px;padding:10px 12px;color:#e2bd83;font-size:10px;letter-spacing:2px}.micro svg{display:block;width:100%;height:40px}.controls{display:flex;flex-wrap:wrap;gap:12px;align-items:center;justify-content:center;padding:16px 25px;border-top:1px solid #78908d24;font-size:11px}.controls label{display:flex;align-items:center;gap:9px;color:#94aca8}.controls select{padding:5px 8px;min-height:36px;font-size:11px}.controls button{min-height:36px;padding:6px 12px;font-size:11px}#notice{font-size:10px;color:#8da5a0;flex-basis:100%;text-align:center}footer{display:flex;justify-content:space-between;padding:20px 34px;color:#7e9994;font-size:11px;gap:30px}footer details{max-width:500px}summary{cursor:pointer;min-height:30px;text-align:right}#loading{position:absolute;inset:0;display:grid;place-content:center;background:#101416}.fallback-view{max-width:550px;text-align:center;padding:20px}.fallback-view svg{width:100%;max-height:280px}.fallback-view p{font-size:12px;color:#9bb2ac}.fallback{pointer-events:none}#loading[hidden],.context[hidden],.partlabel[hidden]{display:none}.reduced *{scroll-behavior:auto!important;transition:none!important}
@media(min-width:1500px){.context{width:340px;right:42px;top:120px}.labscene{min-height:740px}}
@media(max-width:850px){.edition{display:none}.topbar{padding:0 20px}.chapter{left:22px;top:22px}h1{font-size:36px}.context{width:280px;right:16px;padding:20px}.context h2{font-size:27px}.dock{bottom:143px}.timeline{left:22px;right:22px}.readouts #valves{display:none}.stagebadge{left:22px;top:188px}.controls{gap:8px;padding:14px}.controls label{gap:5px}}
@media(max-width:600px){.topbar{height:112px;padding:12px 16px;flex-wrap:wrap;gap:8px}.brand{font-size:11px}.mark{font-size:24px}.topbar nav{order:3;width:100%;justify-content:center;padding:2px}.topbar nav button{flex:1;min-height:34px;padding:6px;font-size:12px}#reduced{font-size:10px;padding:5px 8px;min-height:32px}.labscene{height:660px;min-height:0;max-height:none}.chapter{top:17px;left:19px}.eyebrow{font-size:8px;letter-spacing:1.5px}h1{font-size:31px;margin:9px 0;letter-spacing:-1px}.chapter p{font-size:9px;margin-top:9px}.stagebadge{left:20px;top:162px;font-size:8px}.dock{bottom:125px;width:calc(100% - 24px);padding:5px;gap:2px;justify-content:center;border-radius:12px}.dock button{font-size:10px;padding:8px 6px;min-height:44px;flex:1}.dock button span{display:block;font-size:15px;margin:0 0 2px}.dock #explode{min-width:0;flex:1.6}.timeline{left:20px;right:20px;bottom:22px}.readouts{gap:14px;font-size:10px}.readouts strong{font-size:34px;min-width:83px}.ticklabels{font-size:8px}.context{position:relative;top:auto;right:auto;max-width:none;width:auto;margin:0 12px 16px;padding:20px;box-shadow:none}.context h2{font-size:29px}.context p{font-size:12px}.reference-pair img{aspect-ratio:1.3}.controls{padding:15px 12px;justify-content:flex-start}.controls label{flex:1;justify-content:space-between;font-size:10px;min-width:145px}.controls label:nth-child(3){flex-basis:100%}.controls label:nth-child(3) select{flex:1;max-width:220px}footer{display:block;padding:20px}summary{text-align:left}footer details{margin-top:16px}}
#engine{position:absolute;top:0;left:0;height:calc(100% - 180px)}
@media(min-width:601px){.labscene{min-height:760px}}



#engine[hidden]{display:none}.fallback-view{max-width:500px}
.has-selection .chapter{display:none}

/* V3.1: state feedback follows actual mesh picks, bounds and assembly offsets. */
.partlabel{position:absolute;z-index:4;pointer-events:none;padding:7px 10px;border:1px solid #c7d9d958;border-radius:5px;background:#182628ef;font-size:10px;color:#e3eae6;box-shadow:0 6px 20px #0004;white-space:nowrap}
.selectionframe{position:absolute;z-index:3;pointer-events:none;color:#e5be85}
.selectionframe[hidden],.assembly-feedback[hidden]{display:none}
.selectionframe i{position:absolute;width:14px;height:14px;border-color:#e5be8599;border-style:solid;border-width:0}
.selectionframe i:nth-child(1){top:0;left:0;border-top-width:1px;border-left-width:1px}.selectionframe i:nth-child(2){top:0;right:0;border-top-width:1px;border-right-width:1px}.selectionframe i:nth-child(3){bottom:0;left:0;border-bottom-width:1px;border-left-width:1px}.selectionframe i:nth-child(4){bottom:0;right:0;border-bottom-width:1px;border-right-width:1px}
.selectionframe>span{position:absolute;left:0;top:-25px;padding:3px 6px;background:#142024e8;font:10px/1.5 Consolas,monospace;white-space:nowrap;letter-spacing:.3px}
.assembly-feedback{position:absolute;left:34px;top:251px;width:205px;pointer-events:none;font:9px Consolas,monospace;color:#9db6b2;z-index:2}
.assembly-feedback>div{height:2px;background:#adc2bc25;margin-top:10px;overflow:hidden}.assembly-feedback i{display:block;height:100%;background:#d4b384}
.valve-state{padding:12px;background:#101c1f;border:1px solid #789b9333;border-radius:8px;margin:14px 0}.valve-heading{display:flex;justify-content:space-between;gap:5px;font:8px Consolas,monospace;color:#95b4ad}.valve-heading strong{font-weight:400;color:#e6c28d}.valve-row{display:grid;grid-template-columns:1fr auto;gap:3px;font-size:10px;margin-top:10px;color:#b9ded9}.valve-row b{font-size:9px;font-weight:400}.valve-row>i{grid-column:1/-1;height:4px;background:#7e9e9a26;border-radius:2px;overflow:hidden}.valve-row>i>i{display:block;height:100%;background:#83d7d0}.valve-row.exhaust{color:#e1b79f}.valve-row.exhaust>i>i{background:#e4a78b}.valve-state p{font-size:9px;line-height:1.4;margin:9px 0 0;color:#9bb5b0}.compare-actions{display:flex;gap:6px;margin-top:8px}.compare-actions button{flex:1;font:10px Consolas,monospace;min-height:36px;padding:6px}.is-predict .context{padding:20px}.is-predict .context h2{font-size:28px;margin:12px 0}.is-predict .context .reference-pair img{aspect-ratio:1.5}
button{transition:background-color 150ms,border-color 150ms}button:active:not(:disabled){background-color:#44534f}
@media(max-width:850px){.assembly-feedback{left:22px;top:213px;width:185px}}
@media(max-width:600px){.assembly-feedback{left:20px;top:186px;width:180px;font-size:8px}.selectionframe>span{font-size:9px}.is-predict .context h2{font-size:28px}.compare-actions button{min-height:44px}.controls button,.controls select{min-height:44px}.ticklabels button{min-height:32px}}
@media(prefers-reduced-motion:reduce){*{transition:none!important;scroll-behavior:auto!important}}

.has-selection .assembly-feedback,.has-selection .stagebadge{display:none}
@media(max-width:600px){.dock{bottom:143px}}
