@property --nq-travel {syntax:"<length>";inherits:true;initial-value:-8px}
@property --nq-build {syntax:"<number>";inherits:true;initial-value:0}
@property --nq-print-opacity {syntax:"<number>";inherits:true;initial-value:1}
/* One growth coordinate drives the rigid head/nozzle assembly and SVG reveal. */
.nq-print-stage {position:relative;width:min(100%,480px);height:355px;border-radius:22px;overflow:hidden;background:radial-gradient(circle at 50% 90%,#f3f3ec 0%,#e8ede7 55%,#dce6df 100%);border:1px solid #d3dcd4;box-shadow:0 24px 54px rgba(52,78,62,.1);transform:translateZ(0)}
.nq-print-stage:before {content:'';position:absolute;inset:17px;border:1px solid #c2cfc6;border-radius:15px;opacity:.7}
.nq-status-dot {width:7px;height:7px;background:#6f9a77;border-radius:50%;box-shadow:0 0 0 4px #80a98824;}
.nq-stage-mark {position:absolute;left:21px;top:16px;color:#547062;font-size:11px;font-weight:900;letter-spacing:1.8px;direction:ltr}
@media(max-width:590px) {
.nq-print-stage {height:300px}
}
@media(prefers-reduced-motion:reduce) {
.nq-status-dot {animation:none}
}
.nq-print-stage {--nq-cycle:14.857s;animation:nq-print-growth var(--nq-cycle) linear infinite,nq-print-visibility var(--nq-cycle) linear infinite,nq-five-passes var(--nq-cycle) cubic-bezier(.45,0,.55,1) infinite;isolation:isolate;background:radial-gradient(circle at 50% 70%,#f4f1e9,#e6eee8 73%,#dce6de);height:355px}
.nq-gantry {position:absolute;left:46px;right:46px;bottom:calc(71px + 134px * var(--nq-build));height:47px;z-index:6;opacity:var(--nq-print-opacity)}
.nq-machine-rail {position:absolute;top:7px;left:0;right:0;height:9px;border:1px solid #9bad9f;box-sizing:border-box;border-radius:4px;background:linear-gradient(#d5dfd6,#a5b7ab);box-shadow:0 2px 3px #59736518}
.nq-cable-guide {position:absolute;left:0;top:-8px;width:calc(50% + var(--nq-travel));height:19px;box-sizing:border-box;border-top:2px solid #99ad9f;border-right:2px solid #99ad9f;border-radius:0 12px 0 0}
.nq-carriage-mount {position:absolute;left:8px;right:8px;top:-3px;height:19px;z-index:1;border:1px solid #8fa397;border-radius:4px;background:#bdcdc1}
.nq-machine-upright {position:absolute;top:45px;bottom:48px;width:10px;border-radius:5px;background:linear-gradient(90deg,#80988a,#c9d5cb,#60776c)}
.nq-machine-upright.left {left:46px}
.nq-machine-upright.right {right:46px}
.nq-moving-carriage {position:absolute;bottom:0;left:50%;width:38px;height:47px;margin-left:-19px;transform:translateX(var(--nq-travel))}
.nq-extruder-shell {box-sizing:border-box;width:38px;height:32px;border:2px solid #8fa397;border-radius:8px 8px 10px 10px;background:linear-gradient(145deg,#d8e2da,#baccc0);box-shadow:0 3px 6px #40594b18;position:relative;z-index:2}
.nq-extruder-nozzle {width:12px;height:17px;margin:-2px auto 0;background:linear-gradient(#b68b63,#d7b892);clip-path:polygon(0 0,100% 0,70% 100%,30% 100%)}
.nq-object-container {position:absolute;bottom:51px;left:50%;height:160px;width:180px;transform:translateX(-50%);z-index:3;overflow:hidden}
.nq-printed-charm {position:absolute;bottom:0;width:180px;height:170px;clip-path:inset(calc(100% - 18px - 134px * var(--nq-build)) 0 18px 0);opacity:var(--nq-print-opacity)}
.nq-object-bed {position:absolute;bottom:51px;left:50%;transform:translateX(-50%);width:230px;height:18px;border-radius:5px;background:linear-gradient(#344b3e,#1c3027);z-index:4}
.nq-object-bed-shadow {position:absolute;bottom:34px;left:50%;transform:translateX(-50%);width:240px;height:8px;background:#899b8e;border-radius:50%}
.nq-print-console {position:absolute;z-index:9;bottom:18px;right:17px;width:176px;background:#ffffffed;padding:10px 13px;border:1px solid #dbe3dc;border-radius:14px;box-shadow:0 9px 28px #324c3b16}
.nq-console-label {display:flex;gap:9px;align-items:center;font-weight:800;font-size:11px;color:#31523d}
.nq-console-track {height:6px;background:#e3e7e0;overflow:hidden;border-radius:20px;margin:8px 0 4px}
.nq-console-track span {display:block;height:100%;background:linear-gradient(90deg,#7d9c85,#c39269);width:calc(100% * var(--nq-build));opacity:var(--nq-print-opacity)}
.nq-print-console small {font-size:9px;color:#77877b}
.nq-stage-corner {position:absolute;bottom:15px;left:18px;font-size:9px;color:#788f7e;letter-spacing:1px;direction:ltr}
@media(max-width:590px) {
.nq-print-stage {height:315px}
.nq-gantry {left:30px;right:30px}
.nq-machine-upright.left {left:30px}
.nq-machine-upright.right {right:30px}
}
@media(prefers-reduced-motion:reduce) {
.nq-print-stage {animation:none;--nq-build:1;--nq-print-opacity:1;--nq-travel:0px}
.nq-moving-carriage {animation:none;transform:translateX(0)}
}
/* SVG base y=152, top y=18: 134px growth. Bed top is 69px from bottom.
   Head + nozzle = 32 + 17 - 2 = 47px; nozzle tip stays 2px above the layer. */
@keyframes nq-five-passes {0%,16%,32%,48%,64%{--nq-travel:-8px}8%,24%,40%,56%{--nq-travel:8px}72%{--nq-travel:6px}80%,92%{--nq-travel:0px}98%,100%{--nq-travel:-8px}}
@keyframes nq-print-growth {0%{--nq-build:0}80%,92%{--nq-build:1}92.01%,100%{--nq-build:0}}
@keyframes nq-print-visibility {0%,86%,100%{--nq-print-opacity:1}92%,98%{--nq-print-opacity:0}}
