// Browser-side geometry contract, shared by standalone and embedded acceptance. module.exports = function staircaseFits() { const els=[...document.querySelectorAll('#learning-loop .learning-loop>*')]; const b=els.map(e=>e.getBoundingClientRect()); const center=r=>({x:(r.left+r.right)/2,y:(r.top+r.bottom)/2}); const close=(a,b)=>Math.abs(a-b)<2; return [[0,1,2],[4,5,6],[8,9,10]].every(([a,arrow,c])=> close(center(b[a]).y,center(b[c]).y)&&close(center(b[a]).y,center(b[arrow]).y)&& b[a].right<=b[arrow].left+2&&b[arrow].right<=b[c].left+2 )&&[[2,3,4],[6,7,8]].every(([a,arrow,c])=> close(center(b[a]).x,center(b[c]).x)&&close(center(b[a]).x,center(b[arrow]).x)&& b[a].bottom<=b[arrow].top+2&&b[arrow].bottom<=b[c].top+2 )&&els.filter(e=>e.tagName==='SPAN').every(e=>e.scrollWidth<=e.clientWidth+1); };