/* Scoped replacement for the statement's decorative nested frames. */
.software-object{position:absolute;right:1%;top:65px;width:370px;height:420px;z-index:2;isolation:isolate}
.software-object::before{content:'';position:absolute;inset:10%;z-index:-1;background:radial-gradient(ellipse,#b70c3424,transparent 66%);filter:blur(18px);pointer-events:none}
.software-object canvas{display:block;width:100%;height:100%;cursor:grab;touch-action:pan-y;outline-offset:-28px}
.software-object.is-dragging canvas{cursor:grabbing}
.object-controls{position:absolute;bottom:6px;left:35px;right:35px;display:flex;align-items:center;justify-content:space-between;gap:10px;color:#987786;font:7px var(--mono);letter-spacing:1px;pointer-events:none}
.object-controls button{background:#24101b;border:1px solid #583040;border-radius:50%;width:30px;height:30px;color:#c893a7;font-size:17px;pointer-events:auto}
.object-controls button:hover{border-color:var(--red);color:white}
.object-fallback{display:none;position:absolute;inset:18% 12%;border-left:1px solid #9d294a;padding-left:20px;flex-direction:column;justify-content:center;gap:20px}
.object-fallback span{border:1px solid #603044;padding:16px;background:#1b1119;font:9px var(--mono);color:#c19caf}
.webgl-unavailable canvas,.webgl-unavailable .object-controls{display:none}.webgl-unavailable .object-fallback{display:flex}
@media(min-width:1600px){.software-object{right:3%;width:390px;height:440px}}
@media(max-width:1100px){.software-object{width:280px;height:340px;right:0;top:100px}}
@media(max-width:800px){.software-object{width:230px;height:300px;right:-15px;top:115px;opacity:.85}.object-controls{left:25px;right:20px;font-size:5px}}
@media(max-width:600px){
  .statement:has(> .software-object){display:flex;flex-direction:column}
  .software-object{position:relative;order:1;flex:none;width:min(100%,370px);height:clamp(300px,95vw,380px);margin:25px auto 0;right:auto;top:auto;opacity:1;z-index:2;pointer-events:auto}
  .software-object canvas{pointer-events:auto}
  .object-controls{display:flex;left:20px;right:20px;font-size:7px}
}
@media(prefers-reduced-motion:reduce){.software-object canvas{cursor:default}}

/* The section pauses in place for ~two screens of native scroll. On mobile the
   text passes normally first; pinning begins when the model reaches the centre. */
.software-scroll-track{position:relative}
.software-scroll-stage{position:sticky;top:var(--pin-top,74px);min-height:var(--stage-height,700px)}
.software-scroll-stage>.software-object{transform-origin:50% 50%;transform:translate3d(var(--object-x,0px),var(--object-y,0px),0) scale(var(--object-scale,1));will-change:transform}
.software-scroll-stage>:not(.software-object){opacity:calc(1 - var(--focus,0))!important;transition:none;pointer-events:none}
.software-scroll-stage .object-controls{bottom:12px}
.software-scroll-track.is-static{height:auto!important}
.is-static>.software-scroll-stage{position:relative;top:auto;min-height:0}
.is-static>.software-scroll-stage>:not(.software-object){opacity:1!important}
.is-static .software-object{transform:none;will-change:auto}
@media(prefers-reduced-motion:reduce){
  .software-scroll-track{height:auto!important}
  .software-scroll-stage{position:relative;top:auto;min-height:0}
  .software-scroll-stage>.software-object{transform:none;will-change:auto}
  .software-scroll-stage>:not(.software-object){opacity:1!important}
}
