@seatlayer/core 0.99.0 → 0.100.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/dist/chunk-COOPHSHM.js +1 -0
  2. package/dist/core/inventory/index.d.cts +2 -2
  3. package/dist/core/inventory/index.d.ts +2 -2
  4. package/dist/core/layout/index.d.cts +2 -2
  5. package/dist/core/layout/index.d.ts +2 -2
  6. package/dist/core/quality/index.d.cts +2 -2
  7. package/dist/core/quality/index.d.ts +2 -2
  8. package/dist/core/sections/index.d.cts +1 -1
  9. package/dist/core/sections/index.d.ts +1 -1
  10. package/dist/index.cjs +1 -1
  11. package/dist/index.d.cts +11 -6
  12. package/dist/index.d.ts +11 -6
  13. package/dist/index.js +1 -1
  14. package/dist/{renderedQuality-Bl1Kq_XO.d.cts → renderedQuality-BZycehrC.d.cts} +1 -1
  15. package/dist/{renderedQuality-BMSbVkwu.d.ts → renderedQuality-DPElQ3-x.d.ts} +1 -1
  16. package/dist/{renderer-njHDbIqI.d.ts → renderer-DPKIlnuF.d.ts} +9 -0
  17. package/dist/{renderer-Ccv8ZDZS.d.cts → renderer-DnsIDiWN.d.cts} +9 -0
  18. package/dist/{tableSizing-BLtQ-KV0.d.ts → tableSizing-0PwrOWi5.d.ts} +1 -1
  19. package/dist/{tableSizing-CB8g2Fs0.d.cts → tableSizing-x8ADFtKS.d.cts} +1 -1
  20. package/dist/{ticketRestrictions-DUjN2bZn.d.ts → ticketRestrictions-C8H-XJha.d.ts} +1 -1
  21. package/dist/{ticketRestrictions-BvlWLw10.d.cts → ticketRestrictions-O-fv0Os6.d.cts} +1 -1
  22. package/dist/view3d/index.cjs +79 -47
  23. package/dist/view3d/index.d.cts +16 -2
  24. package/dist/view3d/index.d.ts +16 -2
  25. package/dist/view3d/index.js +77 -45
  26. package/dist/view3d/scene/scene.worker.cjs +1 -1
  27. package/dist/view3d/scene/scene.worker.js +1 -1
  28. package/package.json +1 -1
  29. package/dist/chunk-K22SISYC.js +0 -1
@@ -1,4 +1,4 @@
1
- import{A as Bn,B as Wn,C as Xe,D as kt,E as Un,F as Yn,a as Ue,b as Ce,c as lt,d as Lt,e as Rn,f as Tn,g as be,h as Fn,i as In,j as ct,k as Fe,l as Ye,m as _n,n as Vt,o as Ur,p as Dn,q as Ln,r as Vn,s as kn,t as ge,u as zn,v as On,w as Nn,x as Hn,y as Gn,z as ut}from"../chunk-K22SISYC.js";import"../chunk-UIMDB6GZ.js";import"../chunk-L34T3APU.js";import"../chunk-QJXSZT3H.js";import"../chunk-VWT44HBR.js";import"../chunk-23OTKCJU.js";import"../chunk-D723OZEY.js";import"../chunk-N4J4CT6P.js";import"../chunk-HYEZPOZU.js";import"../chunk-4N5CHKHD.js";import"../chunk-TQN2VWQO.js";import"../chunk-5BMXWOE7.js";import"../chunk-HO4MFTVX.js";import{Va as An}from"../chunk-UISTXRO5.js";import"../chunk-5ITK5236.js";import{d as Cn,l as En}from"../chunk-JBOTRSMY.js";import"../chunk-CRCGO52K.js";function Xn(t,e,n){let r=Math.floor(e.length/3),a=n.center[0],o=n.center[2];if(r>0){let l=Math.max(1,Math.floor(r/4e3)),u=0,d=0,m=0;for(let f=0;f<r;f+=l)u+=e[f*3],d+=e[f*3+2],m++;a=u/m,o=d/m}let i=t[0]-a,s=t[2]-o;return Math.hypot(i,s)>n.radius*.12?Math.atan2(i,s):void 0}import{Mat4 as ls}from"ogl";function qn(t,e,n="#ffffff"){let{iPosition:r,count:a}=e.seats;if(a<2||typeof document>"u")return null;let o=1/0,i=-1/0,s=1/0,l=-1/0;for(let F=0;F<a;F++){let I=r[F*3],h=r[F*3+2];I<o&&(o=I),I>i&&(i=I),h<s&&(s=h),h>l&&(l=h)}for(let F of e.stages)o=Math.min(o,F.cx-F.halfX),i=Math.max(i,F.cx+F.halfX),s=Math.min(s,F.cz-F.halfZ),l=Math.max(l,F.cz+F.halfZ);let u=Math.min(130/Math.max(.001,i-o),86/Math.max(.001,l-s)),d=(148-(i-o)*u)/2,m=(104-(l-s)*u)/2,f=F=>d+(F-o)*u,v=F=>m+(F-s)*u,c=Math.min(2,typeof window<"u"&&window.devicePixelRatio||1),g=document.createElement("canvas");g.width=Math.round(148*c),g.height=Math.round(104*c),g.setAttribute("aria-hidden","true"),g.setAttribute("data-seat-locator","");let x=g.style;x.position="absolute",x.left="12px",x.bottom="12px",x.width="148px",x.height="104px",x.borderRadius="10px",x.background="rgba(10,14,22,.72)",x.border="1px solid rgba(255,255,255,.14)",x.boxShadow="0 4px 14px rgba(0,0,0,.35)",x.pointerEvents="none",x.zIndex="3",x.display="none",t.appendChild(g);let M=document.createElement("canvas");M.width=g.width,M.height=g.height;let D=M.getContext("2d");if(D){D.scale(c,c),D.fillStyle="rgba(214,222,234,.28)";let F=Math.max(1,Math.ceil(a/6e3));for(let I=0;I<a;I+=F)D.fillRect(f(r[I*3])-.6,v(r[I*3+2])-.6,1.2,1.2);D.fillStyle="rgba(236,240,246,.16)",D.strokeStyle="rgba(236,240,246,.55)",D.lineWidth=1;for(let I of e.stages){let h=f(I.cx-I.halfX),y=v(I.cz-I.halfZ),T=I.halfX*2*u,A=I.halfZ*2*u;D.fillRect(h,y,T,A),D.strokeRect(h+.5,y+.5,Math.max(0,T-1),Math.max(0,A-1))}}let S=g.getContext("2d"),E="";return{el:g,update(F,I){if(!F||!S||t.clientWidth>0&&t.clientWidth<560){x.display!=="none"&&(x.display="none"),E="";return}let h=f(F[0]),y=v(F[2]),T=I?Math.atan2(I[2],I[0]):0,A=`${h.toFixed(1)},${y.toFixed(1)},${T.toFixed(2)}`;if(A!==E){if(E=A,x.display="block",S.setTransform(1,0,0,1,0,0),S.clearRect(0,0,g.width,g.height),S.drawImage(M,0,0),S.setTransform(c,0,0,c,0,0),I){let V=S.createRadialGradient(h,y,0,h,y,26);V.addColorStop(0,"rgba(255,255,255,.55)"),V.addColorStop(1,"rgba(255,255,255,0)"),S.fillStyle=V,S.beginPath(),S.moveTo(h,y),S.arc(h,y,26,T-.5,T+.5),S.closePath(),S.fill()}S.fillStyle=n,S.strokeStyle="rgba(10,14,22,.9)",S.lineWidth=1.5,S.beginPath(),S.arc(h,y,3.6,0,Math.PI*2),S.fill(),S.stroke()}},dispose(){g.remove()}}}var zt=78,jn=18;function Kn(){let t=[],e=[],n=[],r=[],a=[],o=[{n:[1,0,0],c:[[1,0,0],[1,1,0],[1,1,1],[1,0,1]]},{n:[-1,0,0],c:[[0,0,1],[0,1,1],[0,1,0],[0,0,0]]},{n:[0,1,0],c:[[0,1,0],[0,1,1],[1,1,1],[1,1,0]]},{n:[0,-1,0],c:[[0,0,1],[0,0,0],[1,0,0],[1,0,1]]},{n:[0,0,1],c:[[0,0,1],[1,0,1],[1,1,1],[0,1,1]]},{n:[0,0,-1],c:[[1,0,0],[0,0,0],[0,1,0],[1,1,0]]}];for(let s of[{part:1,min:[-1,.36,-.95],max:[1,.45,1]},{part:2,min:[-1,Ce,-1],max:[1,lt,-.72]}])for(let l of o){let u=t.length/3,d=l.n[1]+(s.part===2?Math.abs(l.n[0])*(1-Lt)/(lt-Ce):0),m=Math.hypot(l.n[0],d,l.n[2]),f=[l.n[0]/m,d/m,l.n[2]/m];for(let[v,c]of l.c.entries()){let g=c.map((x,M)=>s.min[M]+x*(s.max[M]-s.min[M]));s.part===2&&(g[0]*=1-c[1]*(1-Lt)),t.push(...g),e.push(...f),n.push(s.part),r.push(...[[-1,-1],[1,-1],[1,1],[-1,1]][v])}a.push(u,u+1,u+2,u,u+2,u+3)}let i=t.length/3;for(let[s,l]of[[-1,-1],[1,-1],[1,1],[-1,1]])t.push(s,l,0),e.push(0,1,0),n.push(0),r.push(s,l);return a.push(i,i+1,i+2,i,i+2,i+3),a.push(...a.slice(12,18),...a.slice(60,66),...a.slice(72,78)),{position:new Float32Array(t),normal:new Float32Array(e),surface:new Float32Array(n),uv:new Float32Array(r),index:new Uint16Array(a)}}import{Renderer as Yr}from"ogl";function Xr(){let t=typeof window<"u"&&window.devicePixelRatio||1,e=navigator.deviceMemory,n=typeof e=="number"&&e<=4?1.5:2;return Math.min(t,n)}var dt=class{constructor(e,n){this.clearRgb=[0,0,0];this.container=e,this.canvas=document.createElement("canvas"),this.canvas.style.display="block",this.canvas.style.width="100%",this.canvas.style.height="100%",this.canvas.style.touchAction="none",this.canvas.tabIndex=0,this.canvas.setAttribute("role","application"),this.canvas.setAttribute("aria-label","Interactive 3D venue. Drag or use arrow keys to look around; pinch, scroll, plus or minus to zoom."),this.renderer=new Yr({canvas:this.canvas,dpr:Xr(),alpha:!1,antialias:!1,depth:!0,stencil:!1,powerPreference:"high-performance",webgl:2}),this.gl=this.renderer.gl,this.clearRgb=[ct.top[0],ct.top[1],ct.top[2]],this.gl.clearColor(this.clearRgb[0],this.clearRgb[1],this.clearRgb[2],1),e.appendChild(this.canvas),this.lostHandler=r=>{r.preventDefault(),n.onContextLost()},this.restoredHandler=()=>n.onContextRestored(),this.canvas.addEventListener("webglcontextlost",this.lostHandler,!1),this.canvas.addEventListener("webglcontextrestored",this.restoredHandler,!1),this.resize()}setClearColor(e){this.clearRgb=[e[0],e[1],e[2]],this.gl.clearColor(e[0],e[1],e[2],1)}get clearColor(){return this.clearRgb}resize(){let e=Math.max(1,this.container.clientWidth||this.canvas.clientWidth||1),n=Math.max(1,this.container.clientHeight||this.canvas.clientHeight||1);return this.renderer.setSize(e,n),{width:e,height:n}}get pixelHeight(){return this.renderer.height*this.renderer.dpr}get aspect(){return this.renderer.width/Math.max(1,this.renderer.height)}dispose(){this.canvas.removeEventListener("webglcontextlost",this.lostHandler,!1),this.canvas.removeEventListener("webglcontextrestored",this.restoredHandler,!1);let e=this.gl.getExtension("WEBGL_lose_context");e&&e.loseContext(),this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas)}simulateContextLossCycle(){let e=this.gl.getExtension("WEBGL_lose_context");e&&(e.loseContext(),setTimeout(()=>{e.restoreContext&&e.restoreContext()},300))}};import{Camera as qr,Vec3 as Ot}from"ogl";var ce=Math.PI/180,Nt=15*ce,Ht=80*ce,Ie=.12,$n=35,Gt=1.25,Qn=.006,jr=4,_e=.82,qe=1/_e,Kr=.12,$r=2;function Qr(t,e){return{azimuth:t*Qn,polar:-e*Qn}}function Zr(t,e,n){if(!n)return 1;let r=e[0]-t[0],a=e[2]-t[2];return(n[0]-e[0])*r+(n[2]-e[2])*a<0?-1:1}function Zn(t,e,n){let r=Math.max($r,Math.max(1,e)*Kr),a=n*jr;return{minDist:t?Math.min(t.minDist,r):r,maxDist:t?Math.max(t.maxDist,a):a}}var Jr=1.5;function ea(t,e,n){let r=Math.max(1,n)*Jr;if(!t)return{anchor:[e[0],e[1],e[2]],limit:r};let[a,o,i]=t.anchor,s=e[1]-o,l=Math.max(Math.abs(e[0]-a),Math.abs(e[2]-i),s>=0?s:-s*2);return{anchor:t.anchor,limit:Math.max(t.limit,l+r)}}function Jn(t,e,n,r,a,o,i,s){let l=Math.sin(n),u=[l*Math.sin(e),Math.cos(n),l*Math.cos(e)],d=[t[0]+r*u[0],t[1]+r*u[1],t[2]+r*u[2]],m=[-u[0],-u[1],-u[2]],f=[-m[2],0,m[0]],v=Math.hypot(f[0],f[2])||1;f=[f[0]/v,0,f[2]/v];let c=[f[1]*m[2]-f[2]*m[1],f[2]*m[0]-f[0]*m[2],f[0]*m[1]-f[1]*m[0]],g=Math.tan(a*ce/2),x=g*(o>0?o:1),M=[0,1,2].map(E=>m[E]+i*x*f[E]+s*g*c[E]);if(M[1]>=-1e-6)return null;let D=(t[1]-d[1])/M[1],S=Math.hypot(M[0],M[1],M[2]);return!(D>0)||D*S>r*ta?null:[d[0]+M[0]*D,t[1],d[2]+M[2]*D]}var eo=3,ta=4,to=.72;function no(t,e){let n=Math.sin(e),r=-n*Math.sin(t),a=-Math.cos(e),o=-n*Math.cos(t);if(Math.abs(a)>.999)return null;let i=-o,s=r,l=Math.hypot(i,s);return i/=l,s/=l,{fx:r,fy:a,fz:o,rx:i,rz:s,ux:-s*a,uy:s*r-i*o,uz:i*a}}var na=.4;function oa(t,e,n,r,a,o){let i=[t.center[0],t.center[1],t.center[2]],s=o(i),l=t.fitPoints,u=no(r,a);if(!l||l.length<9||!u)return{center:i,distance:s};let{fx:d,fy:m,fz:f,rx:v,rz:c,ux:g,uy:x,uz:M}=u,D=Math.hypot(d,f),S=d/D,E=f/D,F=S*g+E*M,I=na*Math.max(1,t.radius);for(let h=0;h<3;h++){let y=1/0,T=-1/0,A=1/0,V=-1/0;for(let Y=0;Y+2<l.length;Y+=3){let R=l[Y]-i[0],w=l[Y+1]-i[1],ee=l[Y+2]-i[2],k=s+R*d+w*m+ee*f;if(!(k>.001))continue;let P=(R*v+ee*c)/(k*e),H=(R*g+w*x+ee*M)/(k*n);P<y&&(y=P),P>T&&(T=P),H<A&&(A=H),H>V&&(V=H)}if(!Number.isFinite(y))break;let L=(y+T)/2*s*e,_=Math.abs(F)>.1?(A+V)/2*s*n/F:0,N=L*v+_*S,U=L*c+_*E;if(Math.hypot(i[0]+N-t.center[0],i[2]+U-t.center[2])>I){let Y=i[0]-t.center[0],R=i[2]-t.center[2],w=Y+N,ee=R+U,k=I/Math.hypot(w,ee);N=w*k-Y,U=ee*k-R}i=[i[0]+N,i[1],i[2]+U],s=o(i)}return{center:i,distance:s}}var mt=class{constructor(e,n,r,a){this.fovY=$n;this.target=new Ot;this.azimuth=-30*ce;this.polar=55*ce;this.distance=10;this.azT=-30*ce;this.polT=55*ce;this.distT=10;this.minDist=1;this.maxDist=100;this.envelope=null;this.gestureFired=!1;this.interactionEnabled=!0;this.dragging=!1;this.panning=!1;this.lastX=0;this.lastY=0;this.activePointers=new Map;this.pinchDist=0;this.pinchCx=0;this.pinchCy=0;this.targetT=new Ot;this.panAnchor=new Ot;this.panLimit=0;this.panBox=null;this.grabSign=1;this.zoomPointResolver=null;this.primaryDragMode="orbit";this.camera=new qr(e,{fov:$n,near:.1,far:5e3,aspect:1}),this.canvas=n,this.requestRender=r,this.onGesture=a,this.onPointerDown=o=>{if(this.interactionEnabled){try{this.canvas.setPointerCapture?.(o.pointerId)}catch{}if(this.activePointers.set(o.pointerId,{x:o.clientX,y:o.clientY}),this.activePointers.size===1){let i=o.button===2||o.button===1,s=o.button===0&&(o.shiftKey?this.primaryDragMode==="orbit":this.primaryDragMode==="pan");this.panning=i||s,this.dragging=!this.panning,this.dragging&&(this.grabSign=this.grabSignAt(o.clientX,o.clientY)),this.lastX=o.clientX,this.lastY=o.clientY}else if(this.activePointers.size===2){this.dragging=!1,this.panning=!1,this.pinchDist=this.currentPinchDistance();let i=this.pinchCentroid();this.pinchCx=i.x,this.pinchCy=i.y}}},this.onPointerMove=o=>{if(!this.interactionEnabled||!this.activePointers.has(o.pointerId))return;if(this.activePointers.set(o.pointerId,{x:o.clientX,y:o.clientY}),this.activePointers.size>=2){let u=this.currentPinchDistance(),d=this.pinchCentroid();this.pinchDist>0&&(this.dollyAt(Math.exp((this.pinchDist-u)*.005),d.x,d.y),this.fireGesture()),this.pinchDist=u,this.panBy(d.x-this.pinchCx,d.y-this.pinchCy),this.pinchCx=d.x,this.pinchCy=d.y;return}let i=o.clientX-this.lastX,s=o.clientY-this.lastY;if(this.panning){this.lastX=o.clientX,this.lastY=o.clientY,(i!==0||s!==0)&&(this.panBy(i,s),this.fireGesture());return}if(!this.dragging)return;this.lastX=o.clientX,this.lastY=o.clientY,(i!==0||s!==0)&&this.fireGesture();let l=Qr(i,s);this.azT+=l.azimuth*this.grabSign,this.polT=Math.max(Nt,Math.min(Ht,this.polT+l.polar)),this.requestRender()},this.onPointerUp=o=>{this.activePointers.delete(o.pointerId);try{this.canvas.releasePointerCapture?.(o.pointerId)}catch{}this.activePointers.size<2&&(this.pinchDist=0),this.activePointers.size===0&&(this.dragging=!1,this.panning=!1)},this.onContextMenu=o=>{o.preventDefault()},this.onWheel=o=>{if(o.preventDefault(),!this.interactionEnabled)return;let i=o.deltaMode===1?16:o.deltaMode===2?100:1,s=Math.max(-2,Math.min(2,o.deltaY*i/100));this.dollyAt(Math.exp(s*.22),o.clientX,o.clientY),this.fireGesture()},this.onKeyDown=o=>{if(!this.interactionEnabled)return;let i=7*ce;if(o.shiftKey&&(o.key==="ArrowLeft"||o.key==="ArrowRight"||o.key==="ArrowUp"||o.key==="ArrowDown"))this.panBy(o.key==="ArrowLeft"?-32:o.key==="ArrowRight"?32:0,o.key==="ArrowUp"?-32:o.key==="ArrowDown"?32:0);else if(o.key==="ArrowLeft"||o.key==="ArrowRight")this.azT+=o.key==="ArrowLeft"?-i:i;else if(o.key==="ArrowUp"||o.key==="ArrowDown")this.polT=Math.max(Nt,Math.min(Ht,this.polT+(o.key==="ArrowUp"?-i:i)));else if(o.key==="+"||o.key==="=")this.dollyBy(_e);else if(o.key==="-"||o.key==="_")this.dollyBy(qe);else return;o.preventDefault(),this.fireGesture(),this.requestRender()},n.addEventListener("pointerdown",this.onPointerDown),n.addEventListener("pointermove",this.onPointerMove),n.addEventListener("pointerup",this.onPointerUp),n.addEventListener("pointercancel",this.onPointerUp),n.addEventListener("wheel",this.onWheel,{passive:!1}),n.addEventListener("keydown",this.onKeyDown),n.addEventListener("contextmenu",this.onContextMenu)}pinchCentroid(){let e=[...this.activePointers.values()];if(!e.length)return{x:0,y:0};let n=0,r=0;for(let a of e)n+=a.x,r+=a.y;return{x:n/e.length,y:r/e.length}}panBy(e,n){let r=this.canvas.clientHeight||1,a=2*this.distance*Math.tan(this.fovY*ce/2)/r,o=Math.sin(this.azimuth),i=Math.cos(this.azimuth),s=i,l=-o,u=Math.cos(this.polar),d=Math.sin(this.polar),m=-o*u,f=-i*u;this.targetT.x+=(-e*s+n*m)*a,this.targetT.z+=(-e*l+n*f)*a,this.targetT.y+=n*d*a,this.clampPan(),this.requestRender()}widenPanBox(e){this.panBox=ea(this.panBox,e.center,e.radius),this.panAnchor.set(this.panBox.anchor[0],this.panBox.anchor[1],this.panBox.anchor[2]),this.panLimit=this.panBox.limit}clampPan(){if(this.panLimit<=0)return;let e=this.panLimit,n=this.panAnchor.x,r=this.panAnchor.y,a=this.panAnchor.z;this.targetT.x=Math.max(n-e,Math.min(n+e,this.targetT.x)),this.targetT.z=Math.max(a-e,Math.min(a+e,this.targetT.z)),this.targetT.y=Math.max(r-e*.5,Math.min(r+e,this.targetT.y))}fireGesture(){this.gestureFired||(this.gestureFired=!0,this.onGesture?.())}currentPinchDistance(){let e=[...this.activePointers.values()];return e.length<2?0:Math.hypot(e[0].x-e[1].x,e[0].y-e[1].y)}dollyBy(e){this.distT=Math.max(this.minDist,Math.min(this.maxDist,this.distT*e)),this.requestRender()}dollyAt(e,n,r){let a=this.distT,o=this.canvas.getBoundingClientRect?.(),i=this.zoomPointResolver?.(n,r)??null;if(i){this.distT=Math.max(eo,Math.min(this.maxDist,this.distT*e)),this.minDist=Math.min(this.minDist,Math.max(eo,this.distT)),this.requestRender(),this.scaleTargetAbout(i,this.distT/a);return}let s=o&&o.width>0&&o.height>0?Jn([this.targetT.x,this.targetT.y,this.targetT.z],this.azT,this.polT,this.distT,this.fovY,this.camera.aspect||o.width/o.height,(n-o.left)/o.width*2-1,1-(r-o.top)/o.height*2):null;this.dollyBy(e),s&&this.scaleTargetAbout(s,this.distT/a)}scaleTargetAbout(e,n){!Number.isFinite(n)||n===1||(this.targetT.x=e[0]+(this.targetT.x-e[0])*n,this.targetT.y=e[1]+(this.targetT.y-e[1])*n,this.targetT.z=e[2]+(this.targetT.z-e[2])*n,this.clampPan())}grabSignAt(e,n){let r=this.canvas.getBoundingClientRect?.(),a=this.zoomPointResolver?.(e,n)??(r&&r.width>0&&r.height>0?Jn([this.target.x,this.target.y,this.target.z],this.azimuth,this.polar,this.distance,this.fovY,this.camera.aspect||r.width/r.height,(e-r.left)/r.width*2-1,1-(n-r.top)/r.height*2):null),o=this.camera.position;return Zr([o.x,o.y,o.z],[this.target.x,this.target.y,this.target.z],a)}setZoomPointResolver(e){this.zoomPointResolver=e}zoomBy(e){this.interactionEnabled&&(this.dollyBy(e),this.fireGesture())}dollyLimitState(){return{atMin:this.distT<=this.minDist+1e-6,atMax:this.distT>=this.maxDist-1e-6}}setPrimaryDragMode(e){this.primaryDragMode=e}setInteractionEnabled(e){this.interactionEnabled=e,!e&&(this.activePointers.clear(),this.dragging=!1,this.panning=!1,this.pinchDist=0)}frame(e,n=!1,r,a=!1,o){this.camera.perspective({fov:this.fovY,aspect:this.camera.aspect}),this.target.set(e.center[0],e.center[1],e.center[2]),this.targetT.copy(this.target),this.widenPanBox(e);let i=Math.max(1,e.radius),s=this.fovY*ce/2,l=a?Math.max(.82,this.camera.aspect||1):this.camera.aspect||1,u=Math.atan(Math.tan(s)*l);this.azT=r??-30*ce,this.polT=Math.max(15,Math.min(80,o?.polarDeg??55))*ce;let d=this.framedOn(e,s,u),m=d.distance;this.target.set(d.center[0],d.center[1],d.center[2]),this.targetT.copy(this.target),this.distT=m*Math.max(1.05,Math.min(2,o?.margin??Gt)),this.envelope=Zn(this.envelope,i,m),this.minDist=this.envelope.minDist,this.maxDist=this.envelope.maxDist,n?(this.azimuth=this.azT,this.polar=12*ce,this.distance=this.distT*1.7):(this.azimuth=this.azT,this.polar=this.polT,this.distance=this.distT),this.applyPosition()}setAspect(e){if(!(e>0)||!Number.isFinite(e))return;let n=this.camera.aspect;if(this.interactionEnabled&&n>0){let r=Math.min(n,1)/Math.min(e,1);this.distance*=r,this.distT*=r,this.maxDist=Math.max(this.maxDist,this.distance,this.distT),this.applyPosition()}this.camera.perspective({aspect:e})}glideTo(e,n){this.syncFromCamera(),this.camera.perspective({fov:this.fovY,aspect:this.camera.aspect}),this.widenPanBox(e),this.targetT.set(e.center[0],e.center[1],e.center[2]);let r=this.fovY*ce/2,a=Math.atan(Math.tan(r)*(this.camera.aspect||1));this.azT=this.azimuth,this.polT=Math.max(15,Math.min(80,n?.polarDeg??55))*ce;let o=this.framedOn(e,r,a),i=o.distance;this.targetT.set(o.center[0],o.center[1],o.center[2]),this.distT=i*Math.max(1.05,Math.min(2,n?.margin??Gt)),this.envelope=Zn(this.envelope,Math.max(1,e.radius),i),this.minDist=this.envelope.minDist,this.maxDist=this.envelope.maxDist,this.requestRender()}frameSoft(e,n,r=!1,a){this.target.set(e.center[0],e.center[1],e.center[2]),this.targetT.copy(this.target),this.widenPanBox(e),this.syncFromCamera(),this.camera.perspective({fov:this.fovY,aspect:this.camera.aspect});let o=this.fovY*ce/2,i=r?Math.max(.82,this.camera.aspect||1):this.camera.aspect||1,s=Math.atan(Math.tan(o)*i);this.azT=n??this.azimuth,this.polT=Math.max(15,Math.min(80,a?.polarDeg??55))*ce;let l=this.framedOn(e,o,s);this.targetT.set(l.center[0],l.center[1],l.center[2]),this.distT=l.distance*Math.max(1.05,Math.min(2,a?.margin??Gt))}framedOn(e,n,r){return oa(e,Math.tan(r),Math.tan(n),this.azT,this.polT,a=>this.fitDistance({...e,center:a},n,r,this.azT,this.polT))}fitDistance(e,n,r,a,o){let i=Math.max(1,e.radius),s=Math.max(i/Math.tan(n),i/Math.tan(r)),l=e.box;if(!l)return s;let u=no(a,o);if(!u)return s;let{fx:d,fy:m,fz:f,rx:v,rz:c,ux:g,uy:x,uz:M}=u,D=Math.tan(r),S=Math.tan(n),E=1;for(let A=0;A<8;A++){let V=(A&1?l.max[0]:l.min[0])-e.center[0],L=(A&2?l.max[1]:l.min[1])-e.center[1],_=(A&4?l.max[2]:l.min[2])-e.center[2],N=V*d+L*m+_*f,U=Math.abs(V*v+_*c),z=Math.abs(V*g+L*x+_*M);E=Math.max(E,U/D-N,z/S-N)}let F=Math.min(s,Math.max(E,i*.35)),I=e.fitPoints;if(!I||I.length<9)return F;let h=0,y=1/(D*to),T=1/(S*to);for(let A=0;A+2<I.length;A+=3){let V=I[A]-e.center[0],L=I[A+1]-e.center[1],_=I[A+2]-e.center[2],N=V*d+L*m+_*f,U=Math.abs(V*v+_*c),z=Math.abs(V*g+L*x+_*M);h=Math.max(h,U*y-N,z*T-N)}return Math.min(F*1.5,Math.max(F*.55,h))}updateClipping(e){let n=this.camera.position.x-e.center[0],r=this.camera.position.y-e.center[1],a=this.camera.position.z-e.center[2],o=Math.hypot(this.camera.position.x-this.target.x,this.camera.position.y-this.target.y,this.camera.position.z-this.target.z),i=this.interactionEnabled&&Math.abs(o-this.distance)<=this.distance*.01,{near:s,far:l}=ia(Math.hypot(n,r,a),e.radius,i?this.distance:null);this.camera.perspective({near:s,far:l,aspect:this.camera.aspect})}update(){let e=this.azT-this.azimuth,n=this.polT-this.polar,r=this.distT-this.distance,a=this.targetT.x-this.target.x,o=this.targetT.y-this.target.y,i=this.targetT.z-this.target.z,s=Math.max(1e-4,this.distance*1e-4),l=Math.abs(e)>1e-4||Math.abs(n)>1e-4||Math.abs(r)>1e-4||Math.abs(a)>s||Math.abs(o)>s||Math.abs(i)>s;return this.azimuth+=e*Ie,this.polar+=n*Ie,this.distance+=r*Ie,this.target.x+=a*Ie,this.target.y+=o*Ie,this.target.z+=i*Ie,l&&this.applyPosition(),l}get currentAzimuth(){return this.azimuth}get currentDistance(){return this.distance}syncFromCamera(){let e=this.camera.position.x-this.target.x,n=this.camera.position.y-this.target.y,r=this.camera.position.z-this.target.z,a=Math.hypot(e,n,r)||1,o=Math.max(Nt,Math.min(Ht,Math.acos(Math.max(-1,Math.min(1,n/a)))));this.distance=this.distT=a,this.polar=this.polT=o,this.azimuth=this.azT=Math.atan2(e,r)}setTarget(e){this.target.set(e[0],e[1],e[2]),this.targetT.copy(this.target)}resumeAfterFlight(e){this.camera.perspective({fov:this.fovY,aspect:this.camera.aspect}),e&&this.target.set(e[0],e[1],e[2]),this.targetT.copy(this.target),this.syncFromCamera()}applyPosition(){let e=Math.sin(this.polar),n=this.target.x+this.distance*e*Math.sin(this.azimuth),r=this.target.y+this.distance*Math.cos(this.polar),a=this.target.z+this.distance*e*Math.cos(this.azimuth);this.camera.position.set(n,r,a),this.camera.lookAt(this.target)}dispose(){this.canvas.removeEventListener("pointerdown",this.onPointerDown),this.canvas.removeEventListener("pointermove",this.onPointerMove),this.canvas.removeEventListener("pointerup",this.onPointerUp),this.canvas.removeEventListener("pointercancel",this.onPointerUp),this.canvas.removeEventListener("wheel",this.onWheel),this.canvas.removeEventListener("keydown",this.onKeyDown),this.canvas.removeEventListener("contextmenu",this.onContextMenu),this.activePointers.clear()}},ra=.1,aa=.25;function ia(t,e,n){let r=Math.max(1,e)*1.18,a=n==null?aa:Math.max(.05,n*ra),o=Math.max(a,t-r),i=Math.max(o+10,t+r);return{near:o,far:i}}var ht=class{constructor(e){this.rafId=0;this.running=!1;this.lastTime=0;this.fpsEma=0;this.rendered=0;this.tick=e=>{let n=this.lastTime?(e-this.lastTime)/1e3:.016666666666666666;if(this.lastTime=e,n>0){let a=1/n;this.fpsEma=this.fpsEma?this.fpsEma*.9+a*.1:a}this.rendered++,this.frame(n)?this.rafId=requestAnimationFrame(this.tick):(this.running=!1,this.rafId=0)};this.frame=e}requestRender(){this.running||(this.running=!0,this.lastTime=0,this.rafId=requestAnimationFrame(this.tick))}stats(){return{fps:this.running?Math.round(this.fpsEma):0,rendered:this.rendered,idle:!this.running}}stop(){this.rafId&&cancelAnimationFrame(this.rafId),this.rafId=0,this.running=!1}};function oo(t){let e=!1;return n=>{n!==e&&(e=n,n?t.dataset.slReady="1":delete t.dataset.slReady)}}var De=2.5,sa=1.15,je=12,Le=22,ro=6,ao=9.5,io=.9,so=2.2,Bt=30,Wt=4,pt=8192;var Cs=Le+Wt;function lo(t,e){let n=e*1.4,r=e*3.2;if(t<=n)return{scale:1,fade:0,minPixels:De};let a=Math.min(1,(t-n)/Math.max(.001,r-n));return{scale:1-a*.4,fade:a*.55,minPixels:De+a*(sa-De)}}function co(t,e,n){return!(t>0)||!(e>0)||!(n>0)?!1:e*n/t>=64}var la=12;function uo(t,e,n,r,a){if(!(t>0)||!(e>0)||!(n>0)||!(r>0)||!(a>0))return!1;let o=Math.tan(r/2*Math.PI/180);if(!(o>0))return!1;let i=e/(n*o)*(a/2);return Math.PI*i*i/t>=la}import{Geometry as ca,Mesh as ua,Program as da,Transform as ma}from"ogl";var ha=.05,pa=.6,fa=12,va=1.6,ba=1,ga=2.5,ya=650,mo=24;function xa(t){let e=[],n=[],r=[],a=(m,f,v)=>{e.push(...m),n.push(...f),r.push(v)};for(let m=0;m<16;m++){let f=m/16*Math.PI*2,v=(m+1)/16*Math.PI*2,c=S=>[Math.cos(S),0,Math.sin(S)],g=[Math.cos(f)*.012,0,Math.sin(f)*.012],x=[Math.cos(v)*.012,0,Math.sin(v)*.012],M=[Math.cos(f)*.03,1,Math.sin(f)*.03],D=[Math.cos(v)*.03,1,Math.sin(v)*.03];a(g,c(f),0),a(M,c(f),0),a(D,c(v),0),a(g,c(f),0),a(D,c(v),0),a(x,c(v),0)}let l=.16,u=.24,d=.01;for(let m=0;m<48;m++){let f=m/48*Math.PI*2,v=(m+1)/48*Math.PI*2,c=[Math.cos(f)*l,d,Math.sin(f)*l],g=[Math.cos(f)*u,d,Math.sin(f)*u],x=[Math.cos(v)*u,d,Math.sin(v)*u],M=[Math.cos(v)*l,d,Math.sin(v)*l];for(let D of[c,g,x,c,x,M])a(D,[0,1,0],1)}return new ca(t,{position:{size:3,data:new Float32Array(e)},normal:{size:3,data:new Float32Array(n)},part:{size:1,data:new Float32Array(r)}})}var Sa=`#version 300 es
1
+ import{A as Bt,B as Qn,C as Ke,D as Wt,E as Zn,F as Jn,a as Xe,b as Ee,c as mt,d as Ht,e as On,f as zn,g as ye,h as Nn,i as Hn,j as ht,k as Ie,l as qe,m as Gn,n as Gt,o as Jr,p as Bn,q as Wn,r as Un,s as Yn,t as xe,u as Xn,v as qn,w as jn,x as Kn,y as $n,z as je}from"../chunk-COOPHSHM.js";import"../chunk-UIMDB6GZ.js";import"../chunk-L34T3APU.js";import{d as Ln}from"../chunk-P4J57TK6.js";import"../chunk-QJXSZT3H.js";import"../chunk-VWT44HBR.js";import"../chunk-23OTKCJU.js";import"../chunk-D723OZEY.js";import"../chunk-N4J4CT6P.js";import"../chunk-HYEZPOZU.js";import"../chunk-4N5CHKHD.js";import"../chunk-TQN2VWQO.js";import"../chunk-5BMXWOE7.js";import"../chunk-HO4MFTVX.js";import{Va as Fn}from"../chunk-UISTXRO5.js";import"../chunk-5ITK5236.js";import{d as Vn,l as kn}from"../chunk-JBOTRSMY.js";import"../chunk-CRCGO52K.js";function eo(t,e,n){let r=Math.floor(e.length/3),a=n.center[0],o=n.center[2];if(r>0){let l=Math.max(1,Math.floor(r/4e3)),c=0,d=0,h=0;for(let p=0;p<r;p+=l)c+=e[p*3],d+=e[p*3+2],h++;a=c/h,o=d/h}let i=t[0]-a,s=t[2]-o;return Math.hypot(i,s)>n.radius*.12?Math.atan2(i,s):void 0}import{Mat4 as ws}from"ogl";function to(t,e,n="#ffffff"){let{iPosition:r,count:a}=e.seats;if(a<2||typeof document>"u")return null;let o=1/0,i=-1/0,s=1/0,l=-1/0;for(let F=0;F<a;F++){let D=r[F*3],L=r[F*3+2];D<o&&(o=D),D>i&&(i=D),L<s&&(s=L),L>l&&(l=L)}for(let F of e.stages)o=Math.min(o,F.cx-F.halfX),i=Math.max(i,F.cx+F.halfX),s=Math.min(s,F.cz-F.halfZ),l=Math.max(l,F.cz+F.halfZ);let c=Math.min(130/Math.max(.001,i-o),86/Math.max(.001,l-s)),d=(148-(i-o)*c)/2,h=(104-(l-s)*c)/2,p=F=>d+(F-o)*c,f=F=>h+(F-s)*c,u=Math.min(2,typeof window<"u"&&window.devicePixelRatio||1),y=document.createElement("canvas");y.width=Math.round(148*u),y.height=Math.round(104*u),y.setAttribute("aria-hidden","true"),y.setAttribute("data-seat-locator","");let v=y.style;v.position="absolute",v.left="12px",v.bottom="12px",v.width="148px",v.height="104px",v.borderRadius="10px",v.background="rgba(10,14,22,.72)",v.border="1px solid rgba(255,255,255,.14)",v.boxShadow="0 4px 14px rgba(0,0,0,.35)",v.pointerEvents="none",v.zIndex="3",v.display="none",t.appendChild(y);let M=document.createElement("canvas");M.width=y.width,M.height=y.height;let I=M.getContext("2d");if(I){I.scale(u,u),I.fillStyle="rgba(214,222,234,.28)";let F=Math.max(1,Math.ceil(a/6e3));for(let D=0;D<a;D+=F)I.fillRect(p(r[D*3])-.6,f(r[D*3+2])-.6,1.2,1.2);I.fillStyle="rgba(236,240,246,.16)",I.strokeStyle="rgba(236,240,246,.55)",I.lineWidth=1;for(let D of e.stages){let L=p(D.cx-D.halfX),g=f(D.cz-D.halfZ),A=D.halfX*2*c,w=D.halfZ*2*c;I.fillRect(L,g,A,w),I.strokeRect(L+.5,g+.5,Math.max(0,A-1),Math.max(0,w-1))}}let S=y.getContext("2d"),T="";return{el:y,update(F,D){if(!F||!S||t.clientWidth>0&&t.clientWidth<560){v.display!=="none"&&(v.display="none"),T="";return}let L=p(F[0]),g=f(F[2]),A=D?Math.atan2(D[2],D[0]):0,w=`${L.toFixed(1)},${g.toFixed(1)},${A.toFixed(2)}`;if(w!==T){if(T=w,v.display="block",S.setTransform(1,0,0,1,0,0),S.clearRect(0,0,y.width,y.height),S.drawImage(M,0,0),S.setTransform(u,0,0,u,0,0),D){let _=S.createRadialGradient(L,g,0,L,g,26);_.addColorStop(0,"rgba(255,255,255,.55)"),_.addColorStop(1,"rgba(255,255,255,0)"),S.fillStyle=_,S.beginPath(),S.moveTo(L,g),S.arc(L,g,26,A-.5,A+.5),S.closePath(),S.fill()}S.fillStyle=n,S.strokeStyle="rgba(10,14,22,.9)",S.lineWidth=1.5,S.beginPath(),S.arc(L,g,3.6,0,Math.PI*2),S.fill(),S.stroke()}},dispose(){y.remove()}}}var Ut=78,no=18;function oo(){let t=[],e=[],n=[],r=[],a=[],o=[{n:[1,0,0],c:[[1,0,0],[1,1,0],[1,1,1],[1,0,1]]},{n:[-1,0,0],c:[[0,0,1],[0,1,1],[0,1,0],[0,0,0]]},{n:[0,1,0],c:[[0,1,0],[0,1,1],[1,1,1],[1,1,0]]},{n:[0,-1,0],c:[[0,0,1],[0,0,0],[1,0,0],[1,0,1]]},{n:[0,0,1],c:[[0,0,1],[1,0,1],[1,1,1],[0,1,1]]},{n:[0,0,-1],c:[[1,0,0],[0,0,0],[0,1,0],[1,1,0]]}];for(let s of[{part:1,min:[-1,.36,-.95],max:[1,.45,1]},{part:2,min:[-1,Ee,-1],max:[1,mt,-.72]}])for(let l of o){let c=t.length/3,d=l.n[1]+(s.part===2?Math.abs(l.n[0])*(1-Ht)/(mt-Ee):0),h=Math.hypot(l.n[0],d,l.n[2]),p=[l.n[0]/h,d/h,l.n[2]/h];for(let[f,u]of l.c.entries()){let y=u.map((v,M)=>s.min[M]+v*(s.max[M]-s.min[M]));s.part===2&&(y[0]*=1-u[1]*(1-Ht)),t.push(...y),e.push(...p),n.push(s.part),r.push(...[[-1,-1],[1,-1],[1,1],[-1,1]][f])}a.push(c,c+1,c+2,c,c+2,c+3)}let i=t.length/3;for(let[s,l]of[[-1,-1],[1,-1],[1,1],[-1,1]])t.push(s,l,0),e.push(0,1,0),n.push(0),r.push(s,l);return a.push(i,i+1,i+2,i,i+2,i+3),a.push(...a.slice(12,18),...a.slice(60,66),...a.slice(72,78)),{position:new Float32Array(t),normal:new Float32Array(e),surface:new Float32Array(n),uv:new Float32Array(r),index:new Uint16Array(a)}}import{Renderer as ea}from"ogl";function ta(){let t=typeof window<"u"&&window.devicePixelRatio||1,e=navigator.deviceMemory,n=typeof e=="number"&&e<=4?1.5:2;return Math.min(t,n)}var pt=class{constructor(e,n){this.clearRgb=[0,0,0];this.container=e,this.canvas=document.createElement("canvas"),this.canvas.style.display="block",this.canvas.style.width="100%",this.canvas.style.height="100%",this.canvas.style.touchAction="none",this.canvas.tabIndex=0,this.canvas.setAttribute("role","application"),this.canvas.setAttribute("aria-label","Interactive 3D venue. Drag or use arrow keys to look around; pinch, scroll, plus or minus to zoom."),this.renderer=new ea({canvas:this.canvas,dpr:ta(),alpha:!1,antialias:!1,depth:!0,stencil:!1,powerPreference:"high-performance",webgl:2}),this.gl=this.renderer.gl,this.clearRgb=[ht.top[0],ht.top[1],ht.top[2]],this.gl.clearColor(this.clearRgb[0],this.clearRgb[1],this.clearRgb[2],1),e.appendChild(this.canvas),this.lostHandler=r=>{r.preventDefault(),n.onContextLost()},this.restoredHandler=()=>n.onContextRestored(),this.canvas.addEventListener("webglcontextlost",this.lostHandler,!1),this.canvas.addEventListener("webglcontextrestored",this.restoredHandler,!1),this.resize()}setClearColor(e){this.clearRgb=[e[0],e[1],e[2]],this.gl.clearColor(e[0],e[1],e[2],1)}get clearColor(){return this.clearRgb}resize(){let e=Math.max(1,this.container.clientWidth||this.canvas.clientWidth||1),n=Math.max(1,this.container.clientHeight||this.canvas.clientHeight||1);return this.renderer.setSize(e,n),{width:e,height:n}}get pixelHeight(){return this.renderer.height*this.renderer.dpr}get aspect(){return this.renderer.width/Math.max(1,this.renderer.height)}dispose(){this.canvas.removeEventListener("webglcontextlost",this.lostHandler,!1),this.canvas.removeEventListener("webglcontextrestored",this.restoredHandler,!1);let e=this.gl.getExtension("WEBGL_lose_context");e&&e.loseContext(),this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas)}simulateContextLossCycle(){let e=this.gl.getExtension("WEBGL_lose_context");e&&(e.loseContext(),setTimeout(()=>{e.restoreContext&&e.restoreContext()},300))}};import{Camera as na,Vec3 as Yt}from"ogl";var ce=Math.PI/180,Xt=15*ce,qt=80*ce,De=.12,ro=35,jt=1.25,ao=.006,oa=4,Fe=.82,$e=1/Fe,ra=.12,aa=2;function ia(t,e){return{azimuth:t*ao,polar:-e*ao}}function sa(t,e,n){if(!n)return 1;let r=e[0]-t[0],a=e[2]-t[2];return(n[0]-e[0])*r+(n[2]-e[2])*a<0?-1:1}function io(t,e,n){let r=Math.max(aa,Math.max(1,e)*ra),a=n*oa;return{minDist:t?Math.min(t.minDist,r):r,maxDist:t?Math.max(t.maxDist,a):a}}var la=1.5;function ca(t,e,n){let r=Math.max(1,n)*la;if(!t)return{anchor:[e[0],e[1],e[2]],limit:r};let[a,o,i]=t.anchor,s=e[1]-o,l=Math.max(Math.abs(e[0]-a),Math.abs(e[2]-i),s>=0?s:-s*2);return{anchor:t.anchor,limit:Math.max(t.limit,l+r)}}function so(t,e,n,r,a,o,i,s){let l=Math.sin(n),c=[l*Math.sin(e),Math.cos(n),l*Math.cos(e)],d=[t[0]+r*c[0],t[1]+r*c[1],t[2]+r*c[2]],h=[-c[0],-c[1],-c[2]],p=[-h[2],0,h[0]],f=Math.hypot(p[0],p[2])||1;p=[p[0]/f,0,p[2]/f];let u=[p[1]*h[2]-p[2]*h[1],p[2]*h[0]-p[0]*h[2],p[0]*h[1]-p[1]*h[0]],y=Math.tan(a*ce/2),v=y*(o>0?o:1),M=[0,1,2].map(T=>h[T]+i*v*p[T]+s*y*u[T]);if(M[1]>=-1e-6)return null;let I=(t[1]-d[1])/M[1],S=Math.hypot(M[0],M[1],M[2]);return!(I>0)||I*S>r*ua?null:[d[0]+M[0]*I,t[1],d[2]+M[2]*I]}var lo=3,ua=4,co=.72;function uo(t,e){let n=Math.sin(e),r=-n*Math.sin(t),a=-Math.cos(e),o=-n*Math.cos(t);if(Math.abs(a)>.999)return null;let i=-o,s=r,l=Math.hypot(i,s);return i/=l,s/=l,{fx:r,fy:a,fz:o,rx:i,rz:s,ux:-s*a,uy:s*r-i*o,uz:i*a}}var da=.4;function ma(t,e,n,r,a,o){let i=[t.center[0],t.center[1],t.center[2]],s=o(i),l=t.fitPoints,c=uo(r,a);if(!l||l.length<9||!c)return{center:i,distance:s};let{fx:d,fy:h,fz:p,rx:f,rz:u,ux:y,uy:v,uz:M}=c,I=Math.hypot(d,p),S=d/I,T=p/I,F=S*y+T*M,D=da*Math.max(1,t.radius);for(let L=0;L<3;L++){let g=1/0,A=-1/0,w=1/0,_=-1/0;for(let G=0;G+2<l.length;G+=3){let Y=l[G]-i[0],te=l[G+1]-i[1],E=l[G+2]-i[2],x=s+Y*d+te*h+E*p;if(!(x>.001))continue;let P=(Y*f+E*u)/(x*e),B=(Y*y+te*v+E*M)/(x*n);P<g&&(g=P),P>A&&(A=P),B<w&&(w=B),B>_&&(_=B)}if(!Number.isFinite(g))break;let O=(g+A)/2*s*e,C=Math.abs(F)>.1?(w+_)/2*s*n/F:0,V=O*f+C*S,N=O*u+C*T;if(Math.hypot(i[0]+V-t.center[0],i[2]+N-t.center[2])>D){let G=i[0]-t.center[0],Y=i[2]-t.center[2],te=G+V,E=Y+N,x=D/Math.hypot(te,E);V=te*x-G,N=E*x-Y}i=[i[0]+V,i[1],i[2]+N],s=o(i)}return{center:i,distance:s}}var ft=class{constructor(e,n,r,a){this.fovY=ro;this.target=new Yt;this.azimuth=-30*ce;this.polar=55*ce;this.distance=10;this.azT=-30*ce;this.polT=55*ce;this.distT=10;this.minDist=1;this.maxDist=100;this.envelope=null;this.gestureFired=!1;this.interactionEnabled=!0;this.dragging=!1;this.panning=!1;this.lastX=0;this.lastY=0;this.activePointers=new Map;this.pinchDist=0;this.pinchCx=0;this.pinchCy=0;this.targetT=new Yt;this.panAnchor=new Yt;this.panLimit=0;this.panBox=null;this.grabSign=1;this.zoomPointResolver=null;this.primaryDragMode="orbit";this.camera=new na(e,{fov:ro,near:.1,far:5e3,aspect:1}),this.canvas=n,this.requestRender=r,this.onGesture=a,this.onPointerDown=o=>{if(this.interactionEnabled){try{this.canvas.setPointerCapture?.(o.pointerId)}catch{}if(this.activePointers.set(o.pointerId,{x:o.clientX,y:o.clientY}),this.activePointers.size===1){let i=o.button===2||o.button===1,s=o.button===0&&(o.shiftKey?this.primaryDragMode==="orbit":this.primaryDragMode==="pan");this.panning=i||s,this.dragging=!this.panning,this.dragging&&(this.grabSign=this.grabSignAt(o.clientX,o.clientY)),this.lastX=o.clientX,this.lastY=o.clientY}else if(this.activePointers.size===2){this.dragging=!1,this.panning=!1,this.pinchDist=this.currentPinchDistance();let i=this.pinchCentroid();this.pinchCx=i.x,this.pinchCy=i.y}}},this.onPointerMove=o=>{if(!this.interactionEnabled||!this.activePointers.has(o.pointerId))return;if(this.activePointers.set(o.pointerId,{x:o.clientX,y:o.clientY}),this.activePointers.size>=2){let c=this.currentPinchDistance(),d=this.pinchCentroid();this.pinchDist>0&&(this.dollyAt(Math.exp((this.pinchDist-c)*.005),d.x,d.y),this.fireGesture()),this.pinchDist=c,this.panBy(d.x-this.pinchCx,d.y-this.pinchCy),this.pinchCx=d.x,this.pinchCy=d.y;return}let i=o.clientX-this.lastX,s=o.clientY-this.lastY;if(this.panning){this.lastX=o.clientX,this.lastY=o.clientY,(i!==0||s!==0)&&(this.panBy(i,s),this.fireGesture());return}if(!this.dragging)return;this.lastX=o.clientX,this.lastY=o.clientY,(i!==0||s!==0)&&this.fireGesture();let l=ia(i,s);this.azT+=l.azimuth*this.grabSign,this.polT=Math.max(Xt,Math.min(qt,this.polT+l.polar)),this.requestRender()},this.onPointerUp=o=>{this.activePointers.delete(o.pointerId);try{this.canvas.releasePointerCapture?.(o.pointerId)}catch{}this.activePointers.size<2&&(this.pinchDist=0),this.activePointers.size===0&&(this.dragging=!1,this.panning=!1)},this.onContextMenu=o=>{o.preventDefault()},this.onWheel=o=>{if(o.preventDefault(),!this.interactionEnabled)return;let i=o.deltaMode===1?16:o.deltaMode===2?100:1,s=Math.max(-2,Math.min(2,o.deltaY*i/100));this.dollyAt(Math.exp(s*.22),o.clientX,o.clientY),this.fireGesture()},this.onKeyDown=o=>{if(!this.interactionEnabled)return;let i=7*ce;if(o.shiftKey&&(o.key==="ArrowLeft"||o.key==="ArrowRight"||o.key==="ArrowUp"||o.key==="ArrowDown"))this.panBy(o.key==="ArrowLeft"?-32:o.key==="ArrowRight"?32:0,o.key==="ArrowUp"?-32:o.key==="ArrowDown"?32:0);else if(o.key==="ArrowLeft"||o.key==="ArrowRight")this.azT+=o.key==="ArrowLeft"?-i:i;else if(o.key==="ArrowUp"||o.key==="ArrowDown")this.polT=Math.max(Xt,Math.min(qt,this.polT+(o.key==="ArrowUp"?-i:i)));else if(o.key==="+"||o.key==="=")this.dollyBy(Fe);else if(o.key==="-"||o.key==="_")this.dollyBy($e);else return;o.preventDefault(),this.fireGesture(),this.requestRender()},n.addEventListener("pointerdown",this.onPointerDown),n.addEventListener("pointermove",this.onPointerMove),n.addEventListener("pointerup",this.onPointerUp),n.addEventListener("pointercancel",this.onPointerUp),n.addEventListener("wheel",this.onWheel,{passive:!1}),n.addEventListener("keydown",this.onKeyDown),n.addEventListener("contextmenu",this.onContextMenu)}pinchCentroid(){let e=[...this.activePointers.values()];if(!e.length)return{x:0,y:0};let n=0,r=0;for(let a of e)n+=a.x,r+=a.y;return{x:n/e.length,y:r/e.length}}panBy(e,n){let r=this.canvas.clientHeight||1,a=2*this.distance*Math.tan(this.fovY*ce/2)/r,o=Math.sin(this.azimuth),i=Math.cos(this.azimuth),s=i,l=-o,c=Math.cos(this.polar),d=Math.sin(this.polar),h=-o*c,p=-i*c;this.targetT.x+=(-e*s+n*h)*a,this.targetT.z+=(-e*l+n*p)*a,this.targetT.y+=n*d*a,this.clampPan(),this.requestRender()}widenPanBox(e){this.panBox=ca(this.panBox,e.center,e.radius),this.panAnchor.set(this.panBox.anchor[0],this.panBox.anchor[1],this.panBox.anchor[2]),this.panLimit=this.panBox.limit}clampPan(){if(this.panLimit<=0)return;let e=this.panLimit,n=this.panAnchor.x,r=this.panAnchor.y,a=this.panAnchor.z;this.targetT.x=Math.max(n-e,Math.min(n+e,this.targetT.x)),this.targetT.z=Math.max(a-e,Math.min(a+e,this.targetT.z)),this.targetT.y=Math.max(r-e*.5,Math.min(r+e,this.targetT.y))}fireGesture(){this.gestureFired||(this.gestureFired=!0,this.onGesture?.())}currentPinchDistance(){let e=[...this.activePointers.values()];return e.length<2?0:Math.hypot(e[0].x-e[1].x,e[0].y-e[1].y)}dollyBy(e){this.distT=Math.max(this.minDist,Math.min(this.maxDist,this.distT*e)),this.requestRender()}dollyAt(e,n,r){let a=this.distT,o=this.canvas.getBoundingClientRect?.(),i=this.zoomPointResolver?.(n,r)??null;if(i){this.distT=Math.max(lo,Math.min(this.maxDist,this.distT*e)),this.minDist=Math.min(this.minDist,Math.max(lo,this.distT)),this.requestRender(),this.scaleTargetAbout(i,this.distT/a);return}let s=o&&o.width>0&&o.height>0?so([this.targetT.x,this.targetT.y,this.targetT.z],this.azT,this.polT,this.distT,this.fovY,this.camera.aspect||o.width/o.height,(n-o.left)/o.width*2-1,1-(r-o.top)/o.height*2):null;this.dollyBy(e),s&&this.scaleTargetAbout(s,this.distT/a)}scaleTargetAbout(e,n){!Number.isFinite(n)||n===1||(this.targetT.x=e[0]+(this.targetT.x-e[0])*n,this.targetT.y=e[1]+(this.targetT.y-e[1])*n,this.targetT.z=e[2]+(this.targetT.z-e[2])*n,this.clampPan())}grabSignAt(e,n){let r=this.canvas.getBoundingClientRect?.(),a=this.zoomPointResolver?.(e,n)??(r&&r.width>0&&r.height>0?so([this.target.x,this.target.y,this.target.z],this.azimuth,this.polar,this.distance,this.fovY,this.camera.aspect||r.width/r.height,(e-r.left)/r.width*2-1,1-(n-r.top)/r.height*2):null),o=this.camera.position;return sa([o.x,o.y,o.z],[this.target.x,this.target.y,this.target.z],a)}setZoomPointResolver(e){this.zoomPointResolver=e}zoomBy(e){this.interactionEnabled&&(this.dollyBy(e),this.fireGesture())}dollyLimitState(){return{atMin:this.distT<=this.minDist+1e-6,atMax:this.distT>=this.maxDist-1e-6}}setPrimaryDragMode(e){this.primaryDragMode=e}setInteractionEnabled(e){this.interactionEnabled=e,!e&&(this.activePointers.clear(),this.dragging=!1,this.panning=!1,this.pinchDist=0)}frame(e,n=!1,r,a=!1,o){this.camera.perspective({fov:this.fovY,aspect:this.camera.aspect}),this.target.set(e.center[0],e.center[1],e.center[2]),this.targetT.copy(this.target),this.widenPanBox(e);let i=Math.max(1,e.radius),s=this.fovY*ce/2,l=a?Math.max(.82,this.camera.aspect||1):this.camera.aspect||1,c=Math.atan(Math.tan(s)*l);this.azT=r??-30*ce,this.polT=Math.max(15,Math.min(80,o?.polarDeg??55))*ce;let d=this.framedOn(e,s,c),h=d.distance;this.target.set(d.center[0],d.center[1],d.center[2]),this.targetT.copy(this.target),this.distT=h*Math.max(1.05,Math.min(2,o?.margin??jt)),this.envelope=io(this.envelope,i,h),this.minDist=this.envelope.minDist,this.maxDist=this.envelope.maxDist,n?(this.azimuth=this.azT,this.polar=12*ce,this.distance=this.distT*1.7):(this.azimuth=this.azT,this.polar=this.polT,this.distance=this.distT),this.applyPosition()}setAspect(e){if(!(e>0)||!Number.isFinite(e))return;let n=this.camera.aspect;if(this.interactionEnabled&&n>0){let r=Math.min(n,1)/Math.min(e,1);this.distance*=r,this.distT*=r,this.maxDist=Math.max(this.maxDist,this.distance,this.distT),this.applyPosition()}this.camera.perspective({aspect:e})}glideTo(e,n){this.syncFromCamera(),this.camera.perspective({fov:this.fovY,aspect:this.camera.aspect}),this.widenPanBox(e),this.targetT.set(e.center[0],e.center[1],e.center[2]);let r=this.fovY*ce/2,a=Math.atan(Math.tan(r)*(this.camera.aspect||1));this.azT=this.azimuth,this.polT=Math.max(15,Math.min(80,n?.polarDeg??55))*ce;let o=this.framedOn(e,r,a),i=o.distance;this.targetT.set(o.center[0],o.center[1],o.center[2]),this.distT=i*Math.max(1.05,Math.min(2,n?.margin??jt)),this.envelope=io(this.envelope,Math.max(1,e.radius),i),this.minDist=this.envelope.minDist,this.maxDist=this.envelope.maxDist,this.requestRender()}frameSoft(e,n,r=!1,a){this.target.set(e.center[0],e.center[1],e.center[2]),this.targetT.copy(this.target),this.widenPanBox(e),this.syncFromCamera(),this.camera.perspective({fov:this.fovY,aspect:this.camera.aspect});let o=this.fovY*ce/2,i=r?Math.max(.82,this.camera.aspect||1):this.camera.aspect||1,s=Math.atan(Math.tan(o)*i);this.azT=n??this.azimuth,this.polT=Math.max(15,Math.min(80,a?.polarDeg??55))*ce;let l=this.framedOn(e,o,s);this.targetT.set(l.center[0],l.center[1],l.center[2]),this.distT=l.distance*Math.max(1.05,Math.min(2,a?.margin??jt))}framedOn(e,n,r){return ma(e,Math.tan(r),Math.tan(n),this.azT,this.polT,a=>this.fitDistance({...e,center:a},n,r,this.azT,this.polT))}fitDistance(e,n,r,a,o){let i=Math.max(1,e.radius),s=Math.max(i/Math.tan(n),i/Math.tan(r)),l=e.box;if(!l)return s;let c=uo(a,o);if(!c)return s;let{fx:d,fy:h,fz:p,rx:f,rz:u,ux:y,uy:v,uz:M}=c,I=Math.tan(r),S=Math.tan(n),T=1;for(let w=0;w<8;w++){let _=(w&1?l.max[0]:l.min[0])-e.center[0],O=(w&2?l.max[1]:l.min[1])-e.center[1],C=(w&4?l.max[2]:l.min[2])-e.center[2],V=_*d+O*h+C*p,N=Math.abs(_*f+C*u),W=Math.abs(_*y+O*v+C*M);T=Math.max(T,N/I-V,W/S-V)}let F=Math.min(s,Math.max(T,i*.35)),D=e.fitPoints;if(!D||D.length<9)return F;let L=0,g=1/(I*co),A=1/(S*co);for(let w=0;w+2<D.length;w+=3){let _=D[w]-e.center[0],O=D[w+1]-e.center[1],C=D[w+2]-e.center[2],V=_*d+O*h+C*p,N=Math.abs(_*f+C*u),W=Math.abs(_*y+O*v+C*M);L=Math.max(L,N*g-V,W*A-V)}return Math.min(F*1.5,Math.max(F*.55,L))}updateClipping(e){let n=this.camera.position.x-e.center[0],r=this.camera.position.y-e.center[1],a=this.camera.position.z-e.center[2],o=Math.hypot(this.camera.position.x-this.target.x,this.camera.position.y-this.target.y,this.camera.position.z-this.target.z),i=this.interactionEnabled&&Math.abs(o-this.distance)<=this.distance*.01,{near:s,far:l}=fa(Math.hypot(n,r,a),e.radius,i?this.distance:null);this.camera.perspective({near:s,far:l,aspect:this.camera.aspect})}update(){let e=this.azT-this.azimuth,n=this.polT-this.polar,r=this.distT-this.distance,a=this.targetT.x-this.target.x,o=this.targetT.y-this.target.y,i=this.targetT.z-this.target.z,s=Math.max(1e-4,this.distance*1e-4),l=Math.abs(e)>1e-4||Math.abs(n)>1e-4||Math.abs(r)>1e-4||Math.abs(a)>s||Math.abs(o)>s||Math.abs(i)>s;return this.azimuth+=e*De,this.polar+=n*De,this.distance+=r*De,this.target.x+=a*De,this.target.y+=o*De,this.target.z+=i*De,l&&this.applyPosition(),l}get currentAzimuth(){return this.azimuth}get currentDistance(){return this.distance}get targetDistance(){return this.distT}syncFromCamera(){let e=this.camera.position.x-this.target.x,n=this.camera.position.y-this.target.y,r=this.camera.position.z-this.target.z,a=Math.hypot(e,n,r)||1,o=Math.max(Xt,Math.min(qt,Math.acos(Math.max(-1,Math.min(1,n/a)))));this.distance=this.distT=a,this.polar=this.polT=o,this.azimuth=this.azT=Math.atan2(e,r)}setTarget(e){this.target.set(e[0],e[1],e[2]),this.targetT.copy(this.target)}resumeAfterFlight(e){this.camera.perspective({fov:this.fovY,aspect:this.camera.aspect}),e&&this.target.set(e[0],e[1],e[2]),this.targetT.copy(this.target),this.syncFromCamera()}applyPosition(){let e=Math.sin(this.polar),n=this.target.x+this.distance*e*Math.sin(this.azimuth),r=this.target.y+this.distance*Math.cos(this.polar),a=this.target.z+this.distance*e*Math.cos(this.azimuth);this.camera.position.set(n,r,a),this.camera.lookAt(this.target)}dispose(){this.canvas.removeEventListener("pointerdown",this.onPointerDown),this.canvas.removeEventListener("pointermove",this.onPointerMove),this.canvas.removeEventListener("pointerup",this.onPointerUp),this.canvas.removeEventListener("pointercancel",this.onPointerUp),this.canvas.removeEventListener("wheel",this.onWheel),this.canvas.removeEventListener("keydown",this.onKeyDown),this.canvas.removeEventListener("contextmenu",this.onContextMenu),this.activePointers.clear()}},ha=.1,pa=.25;function fa(t,e,n){let r=Math.max(1,e)*1.18,a=n==null?pa:Math.max(.05,n*ha),o=Math.max(a,t-r),i=Math.max(o+10,t+r);return{near:o,far:i}}var vt=class{constructor(e){this.rafId=0;this.running=!1;this.lastTime=0;this.fpsEma=0;this.rendered=0;this.tick=e=>{let n=this.lastTime?(e-this.lastTime)/1e3:.016666666666666666;if(this.lastTime=e,n>0){let a=1/n;this.fpsEma=this.fpsEma?this.fpsEma*.9+a*.1:a}this.rendered++,this.frame(n)?this.rafId=requestAnimationFrame(this.tick):(this.running=!1,this.rafId=0)};this.frame=e}requestRender(){this.running||(this.running=!0,this.lastTime=0,this.rafId=requestAnimationFrame(this.tick))}stats(){return{fps:this.running?Math.round(this.fpsEma):0,rendered:this.rendered,idle:!this.running}}stop(){this.rafId&&cancelAnimationFrame(this.rafId),this.rafId=0,this.running=!1}};function mo(t){let e=!1;return n=>{n!==e&&(e=n,n?t.dataset.slReady="1":delete t.dataset.slReady)}}var Le=2.5,va=1.15,Qe=12,Ve=22,ho=6,po=9.5,fo=.9,vo=2.2,Kt=30,$t=4,bt=8192;var Gs=Ve+$t;function bo(t,e){let n=e*1.4,r=e*3.2;if(t<=n)return{scale:1,fade:0,minPixels:Le};let a=Math.min(1,(t-n)/Math.max(.001,r-n));return{scale:1-a*.4,fade:a*.55,minPixels:Le+a*(va-Le)}}function go(t,e,n){return!(t>0)||!(e>0)||!(n>0)?!1:e*n/t>=64}var ba=12;function yo(t,e,n,r,a){if(!(t>0)||!(e>0)||!(n>0)||!(r>0)||!(a>0))return!1;let o=Math.tan(r/2*Math.PI/180);if(!(o>0))return!1;let i=e/(n*o)*(a/2);return Math.PI*i*i/t>=ba}import{Geometry as ga,Mesh as ya,Program as xa,Transform as Sa}from"ogl";var wa=.05,Ma=.6,Pa=12,Aa=1.6,Ca=1,Ea=2.5,Ra=650,xo=24;function Ta(t){let e=[],n=[],r=[],a=(h,p,f)=>{e.push(...h),n.push(...p),r.push(f)};for(let h=0;h<16;h++){let p=h/16*Math.PI*2,f=(h+1)/16*Math.PI*2,u=S=>[Math.cos(S),0,Math.sin(S)],y=[Math.cos(p)*.012,0,Math.sin(p)*.012],v=[Math.cos(f)*.012,0,Math.sin(f)*.012],M=[Math.cos(p)*.03,1,Math.sin(p)*.03],I=[Math.cos(f)*.03,1,Math.sin(f)*.03];a(y,u(p),0),a(M,u(p),0),a(I,u(f),0),a(y,u(p),0),a(I,u(f),0),a(v,u(f),0)}let l=.16,c=.24,d=.01;for(let h=0;h<48;h++){let p=h/48*Math.PI*2,f=(h+1)/48*Math.PI*2,u=[Math.cos(p)*l,d,Math.sin(p)*l],y=[Math.cos(p)*c,d,Math.sin(p)*c],v=[Math.cos(f)*c,d,Math.sin(f)*c],M=[Math.cos(f)*l,d,Math.sin(f)*l];for(let I of[u,y,v,u,v,M])a(I,[0,1,0],1)}return new ga(t,{position:{size:3,data:new Float32Array(e)},normal:{size:3,data:new Float32Array(n)},part:{size:1,data:new Float32Array(r)}})}var _a=`#version 300 es
2
2
  precision highp float;
3
3
  in vec3 position; in vec3 normal; in float part;
4
4
  uniform mat4 modelViewMatrix; uniform mat4 projectionMatrix; uniform mat3 normalMatrix;
@@ -14,7 +14,7 @@ void main() {
14
14
  float scale = part > 0.5 ? uRingScale : uHeight;
15
15
  vec3 world = uSeat + vec3(position.x, position.y * grow, position.z) * scale;
16
16
  gl_Position = projectionMatrix * modelViewMatrix * vec4(world, 1.0);
17
- }`,wa=`#version 300 es
17
+ }`,Ia=`#version 300 es
18
18
  precision highp float;
19
19
  in vec3 vNormal; in float vPart;
20
20
  uniform vec3 uColor; uniform float uRingAlpha;
@@ -26,15 +26,15 @@ void main() {
26
26
  float key = max(dot(normalize(vNormal), normalize(vec3(-0.4, 0.7, 0.6))), 0.0);
27
27
  vec3 c = uColor * (0.55 + 0.5 * key) + vec3(0.12) * pow(key, 12.0);
28
28
  fragColor = vec4(c, 1.0);
29
- }`;function Ma(t){if(t>=1)return 1;if(t<.72){let n=t/.72;return 1-(1-n)*(1-n)}let e=(t-.72)/.28;return 1-.08*Math.sin(e*Math.PI)}function Ut(t){return Math.max(pa,Math.min(fa,t*ha))}function ho(t,e){let n=new ma,r=xa(t),a=new Map,o=(i,s)=>{let l=new da(t,{vertex:Sa,fragment:wa,uniforms:{uSeat:{value:i},uHeight:{value:1},uLift:{value:0},uRingScale:{value:1},uColor:{value:e},uRingAlpha:{value:.85}},transparent:!0,depthTest:!0,depthWrite:!1,cullFace:!1}),u=new ua(t,{geometry:r,program:l});return u.frustumCulled=!1,u.setParent(n),{mesh:u,program:l,seat:i,start:s}};return{root:n,setSeats(i,s,l){let u=new Set(i.slice(0,mo).map(d=>d.id));for(let[d,m]of a)u.has(d)||(m.mesh.setParent(null),a.delete(d));for(let d of i.slice(0,mo))a.has(d.id)||a.set(d.id,o(d.position,l?s:-1/0))},update(i,s,l,u=!1){let d=!1;for(let m of a.values()){let f=s[0]-m.seat[0],v=s[1]-m.seat[1],c=s[2]-m.seat[2],g=Math.hypot(f,v,c);m.mesh.visible=!l&&g>(u?ba:ga);let x=Ut(g),M=Math.max(0,Math.min(1,(i-m.start)/ya));M<1&&(d=!0),m.program.uniforms.uHeight.value=x,m.program.uniforms.uRingScale.value=Math.min(x,va),m.program.uniforms.uLift.value=u?1:1-Ma(M),m.program.uniforms.uRingAlpha.value=.55+.4*(M<1?Math.sin(M*Math.PI):0)}return d},dispose(){for(let i of a.values())i.mesh.setParent(null);a.clear(),r.remove()}}}var Ke="#ffffff",po="#0b1220",$e=6,Pa=80,fo=14,vo=88,bo=20,go={floor:{size:14,weight:"700",opacity:.98},stage:{size:14,weight:"700",opacity:.98},zone:{size:15,weight:"600",opacity:.95},section:{size:12,weight:"500",opacity:.88},ga:{size:12,weight:"500",opacity:.88},booth:{size:11,weight:"500",opacity:.85},annotation:{size:11,weight:"400",opacity:.75},row:{size:11.5,weight:"700",opacity:.94},seat:{size:12.5,weight:"800",opacity:1}},Aa=640,Ca=.8,Ea=11,Ra="3px 7px",Ta="2px 5px",yo="rgba(10,14,22,.62)",Fa="#f4f7fb",xo=5,So=2,Ia=6,Qe=new Set(["row","seat"]),wo={stage:6,floor:5,zone:4,section:3,ga:3,booth:2,annotation:1},Ve={row:{x:66,y:20},seat:{x:52,y:22}},Xt=Cn,Yt=t=>En(t);function qt(t,e){let n=Yt(t),r=Yt(e);return(Math.max(n,r)+.05)/(Math.min(n,r)+.05)}function jt(t,e){let n=/rgba\((\d+),(\d+),(\d+),([\d.]+)\)/.exec(t.replace(/\s/g,""));if(!n)return e;let r=Math.max(0,Math.min(1,Number(n[4])));return[1,2,3].map(a=>Number(n[a])/255*r+e[a-1]*(1-r))}function _a(t,e=[.04,.06,.1],n=!0){let r=Yt(e)<.42,a=r?"#f4f7fb":"#0b1220",o=r?"rgba(8,12,22,.78)":"rgba(255,255,255,.84)",i=n?jt(o,e):e,s=Xt(t),l=n?7:4.5,u=s&&qt(s,i)>=l?t:a;return r?{ink:u,backing:o,border:"rgba(210,222,245,.24)"}:{ink:u,backing:o,border:"rgba(11,18,32,.22)"}}function Da(t,e=[.04,.06,.1]){let n=jt(yo,e),r=Xt(t);return{ink:r&&qt(r,n)>=4.5?t:Fa,backing:yo}}var La='ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif',ft=class{constructor(e,n={}){this.nodes=new Map;this.labels=[];this.nodeAppearance=new WeakMap;this.forcedDense=!1;this.selectedSeatLabelIds=new Set;this.narrowStage=!1;this.seatNumberRow=void 0;this.pinHeads=[];this.opts=n,this.root=document.createElement("div"),this.root.setAttribute("data-view3d-labels","");let r=this.root.style;r.position="absolute",r.inset="0",r.pointerEvents="none",r.overflow="hidden",r.fontFamily=n.fontFamily||La,e.appendChild(this.root)}setVisible(e){this.root.style.visibility=e?"":"hidden"}setLabels(e){this.labels=e;let n=new Set(e.map(r=>r.id));for(let[r,a]of this.nodes)n.has(r)||(a.remove(),this.nodes.delete(r))}setForcedDense(e){this.forcedDense=e}setSeatNumberRow(e){return e===this.seatNumberRow?!1:(this.seatNumberRow=e,!0)}setSelectedSeatIds(e){this.selectedSeatLabelIds=new Set(Array.from(e,n=>`seat:${n}`))}sizeFor(e){let n=go[e].size;return!this.narrowStage||Qe.has(e)?n:Math.max(Ea,n*Ca)}qualityEvidence(){let e=this.root.getBoundingClientRect(),n=this.root.style.visibility!=="hidden";return this.labels.map(r=>{let a=this.nodes.get(r.id),o=a?.getBoundingClientRect(),i=!!(n&&a&&a.style.display!=="none"&&o&&o.width>0&&o.height>0);return{id:r.id,kind:r.kind,text:r.text,visible:i,renderedFontPx:a&&Number.parseFloat(a.style.fontSize)||0,contrast:a?Number(a.dataset.qualityContrast??0):0,...i&&o?{screenBox:{x:o.x-e.x,y:o.y-e.y,width:o.width,height:o.height}}:{}}})}update(e,n,r,a,o,i){if(!this.labels.length)return;this.narrowStage=n>0&&n<Aa;let s=Vn(a,o,{hasZoneLabels:this.labels.some(h=>h.kind==="zone")});this.forcedDense&&(s.add("row"),s.add("seat"));let l=[];for(let h of this.labels){if(!s.has(h.kind)&&!(h.kind==="seat"&&this.selectedSeatLabelIds.has(h.id)))continue;let y=h.kind==="seat"&&i&&this.selectedSeatLabelIds.has(h.id)?h.pinBase:void 0,T=y&&i?[y[0],y[1]+Ut(Math.hypot(y[0]-i[0],y[1]-i[1],y[2]-i[2])),y[2]]:h.anchor,A=ge(e,T,n,r);if(!A.visible)continue;let V=Qe.has(h.kind),L=this.sizeFor(h.kind),_=Nn(h.text,L,!V)+(V?xo*2:0);if(h.kind==="seat"&&h.seatWidthM!==void 0&&!this.selectedSeatLabelIds.has(h.id)&&Bn(e,h.anchor,h.seatWidthM,n)<Math.max(22,_))continue;let N=kn(A,_/2,L/2+(V?So:4),n,r),U=i?Math.hypot(h.anchor[0]-i[0],h.anchor[1]-i[1],h.anchor[2]-i[2]):1;l.push({label:h,screen:N,focus:Gn(N,U,n,r),halfWidth:_/2,...this.selectedSeatLabelIds.has(h.id)?{priority:1}:{}})}let u=Ln(l.filter(h=>h.label.kind==="floor"),n),d=[...l.filter(h=>!Qe.has(h.label.kind)&&h.label.kind!=="floor"),...u],m=Hn(n),f=l.filter(h=>h.label.kind==="seat"&&this.selectedSeatLabelIds.has(h.label.id)),v=ut(f,Ve.seat.x,Ve.seat.y,m.seat);this.placePinHeads(f.filter(h=>h.label.pinBase&&!v.includes(h)).map(h=>h.screen));let c=zn(d,vo,bo).filter(h=>!v.some(y=>On(h,y,vo,bo))),g=ut(l.filter(h=>h.label.kind==="row"),Ve.row.x,Ve.row.y,m.row,[...c,...v]),x=this.seatNumberRow!==void 0,M=ut(l.filter(h=>h.label.kind==="seat"&&!this.selectedSeatLabelIds.has(h.label.id)&&(!x||this.seatNumberRow!==null&&h.label.rowId===this.seatNumberRow)),Ve.seat.x,Ve.seat.y,x?Pa:m.seat-v.length,[...c,...v,...g]),D=[...c,...g,...v,...M],S=new Set(D.map(h=>h.label.id));for(let{label:h,screen:y}of D){let A=this.nodeFor(h).style;A.display="";let V=!!h.pinBase&&this.selectedSeatLabelIds.has(h.id);A.transform=V?`translate(-50%, -100%) translate(${y.x.toFixed(1)}px, ${(y.y-$e).toFixed(1)}px)`:`translate(-50%, -50%) translate(${y.x.toFixed(1)}px, ${y.y.toFixed(1)}px)`}let F=D.filter(({label:h})=>!Qe.has(h.kind)).sort((h,y)=>wo[y.label.kind]-wo[h.label.kind]||h.screen.depth-y.screen.depth||h.focus-y.focus).flatMap(({label:h})=>{let y=this.nodes.get(h.id);return y&&y.style.display!=="none"?[{node:y,box:y.getBoundingClientRect()}]:[]}),I=[];for(let{node:h,box:y}of F)I.some(A=>y.left<A.right+3&&y.right+3>A.left&&y.top<A.bottom+3&&y.bottom+3>A.top)?h.style.display="none":I.push(y);for(let[h,y]of this.nodes)S.has(h)||(y.style.display="none")}nodeFor(e){let n=this.nodes.get(e.id);if(!n){n=document.createElement("div");let g=n.style;g.position="absolute",g.left="0",g.top="0",g.whiteSpace="nowrap",g.display="none",this.root.appendChild(n),this.nodes.set(e.id,n)}let r=this.selectedSeatLabelIds.has(e.id),a=this.nodeAppearance.get(n);if(a&&a.text===e.text&&a.kind===e.kind&&a.color===e.color&&a.selected===r&&a.narrow===this.narrowStage)return n;if(this.nodeAppearance.set(n,{text:e.text,kind:e.kind,color:e.color,selected:r,narrow:this.narrowStage}),n.textContent=e.text,r){let g=document.createElement("span"),x=g.style;x.position="absolute",x.left="50%",x.bottom=`-${$e}px`,x.transform="translateX(-50%)",x.borderLeft=`${$e}px solid transparent`,x.borderRight=`${$e}px solid transparent`,x.borderTop=`${$e}px solid ${Ke}`,n.appendChild(g)}n.setAttribute("data-label-kind",e.kind),n.toggleAttribute("data-selected-seat",r);let o=go[e.kind],i=n.style;i.fontSize=`${this.sizeFor(e.kind)}px`,i.fontWeight=r?"800":o.weight,i.opacity=r?"1":String(o.opacity);let s=Qe.has(e.kind),l=!s,u=_a(e.color??this.opts.ink,this.opts.backgroundRgb,!0),d=s?Da(e.color??this.opts.ink,this.opts.backgroundRgb):u;i.color=r?po:d.ink,i.background=r?Ke:d.backing,i.border=r?`1px solid ${Ke}`:l?`1px solid ${u.border}`:"",i.borderRadius=r||l?"999px":`${Ia}px`;let m=this.narrowStage?Ta:Ra;i.padding=r||l?m:`${So}px ${xo}px`,i.lineHeight=s?"1.1":"",i.boxShadow=r?"0 0 0 3px rgba(255,255,255,.28), 0 0 18px rgba(255,255,255,.55), 0 5px 14px rgba(0,0,0,.45)":l?"0 3px 10px rgba(0,0,0,.24)":"0 1px 4px rgba(0,0,0,.28)",i.textShadow=r||l?"none":"0 1px 1px rgba(0,0,0,0.4)",i.letterSpacing=e.kind==="zone"||e.kind==="floor"?"0.08em":"0.02em";let f=this.opts.backgroundRgb??[.04,.06,.1],v=Xt(r?po:d.ink)??[1,1,1],c=jt(r?Ke:d.backing,f);return n.dataset.qualityContrast=qt(v,c).toFixed(3),i.textTransform=e.kind==="zone"||e.kind==="floor"?"uppercase":"",n}placePinHeads(e){for(;this.pinHeads.length<e.length;){let n=document.createElement("div");n.setAttribute("data-pin-head",""),n.setAttribute("aria-hidden","true");let r=n.style;r.position="absolute",r.left="0",r.top="0",r.width=`${fo}px`,r.height=`${fo}px`,r.borderRadius="50%",r.background=Ke,r.boxShadow="0 0 0 3px rgba(255,255,255,.28), 0 0 14px rgba(255,255,255,.55), 0 3px 8px rgba(0,0,0,.45)",r.pointerEvents="none",this.root.appendChild(n),this.pinHeads.push(n)}this.pinHeads.forEach((n,r)=>{let a=e[r];n.style.display=a?"":"none",a&&(n.style.transform=`translate(-50%, -100%) translate(${a.x.toFixed(1)}px, ${a.y.toFixed(1)}px)`)})}dispose(){this.pinHeads=[],this.root.remove(),this.nodes.clear()}};var Va=1;var ka=new Set(["floor","stage","zone","section","ga","booth","annotation"]);function za(t){return t.every(e=>Number.isFinite(e))}function Oa(t,e){return t.x<e.x+e.width&&t.x+t.width>e.x&&t.y<e.y+e.height&&t.y+t.height>e.y}function Mo(t){return t.length?Math.round(Math.min(...t)*100)/100:null}function Ee(t){return Math.round(t*1e4)/1e4}function Na(t){if(t)return{box:{x:Ee(t.box.x),y:Ee(t.box.y),width:Ee(t.box.width),height:Ee(t.box.height)},horizontalFillRatio:Ee(t.horizontalFillRatio),verticalFillRatio:Ee(t.verticalFillRatio),visibleAreaRatio:Ee(t.visibleAreaRatio),clippedEdges:[...t.clippedEdges]}}function ye(t,e,n){return n.length?{code:t,message:e,count:n.length,samples:n.slice(0,20)}:null}function Kt(t){let e=t.labels.filter(s=>s.visible&&s.screenBox),n=e.filter(s=>ka.has(s.kind)),r=t.scene.floorCount>1?t.scene.floorCount:t.scene.zoneCount||t.scene.sectionCount,a=[];for(let s=0;s<n.length;s+=1)for(let l=0;l<s;l+=1)Oa(n[s].screenBox,n[l].screenBox)&&a.push({primaryId:n[s].id,primaryLabel:n[s].text,secondaryId:n[l].id});let o=[...t.camera.position,t.camera.distance,t.camera.verticalFovDeg],i=[ye("webgl2-unavailable","The venue scene must render through WebGL2",t.context.webgl2?[]:[{primaryId:"renderer",primaryLabel:"WebGL2"}]),ye("context-lost","The WebGL context must be live at capture",t.context.lost?[{primaryId:"renderer",primaryLabel:"context lost"}]:[]),ye("frame-not-stable","The captured 3D frame must be rendered and parked",t.frame.rendered>0&&t.frame.idle?[]:[{primaryId:"renderer",primaryLabel:"unstable frame"}]),ye("viewport-empty","The 3D viewport must have visible dimensions",t.viewport.width>1&&t.viewport.height>1?[]:[{primaryId:"viewport",primaryLabel:`${t.viewport.width}\xD7${t.viewport.height}`}]),ye("camera-invalid","The capture camera must have a finite physical pose",za(o)&&t.camera.distance>0&&t.camera.verticalFovDeg>0&&t.camera.verticalFovDeg<180?[]:[{primaryId:"camera",primaryLabel:"invalid pose"}]),ye("authored-relief-not-visible","Authored 3D height or rake must produce visible screen-space relief",!t.scene.authoredRelief||t.scene.renderedVerticalSpanM>.05&&t.scene.projectedReliefPx>=2?[]:[{primaryId:"scene",primaryLabel:"authored relief",measured:t.scene.projectedReliefPx,minimum:2}]),ye("hierarchy-label-missing","A venue with authored hierarchy must show at least one structural label",r===0||n.length>0?[]:[{primaryId:"labels",primaryLabel:`${r} expected hierarchy labels`}]),ye("hierarchy-label-undersized","Visible 3D hierarchy labels must remain readable",n.filter(s=>s.renderedFontPx<11).map(s=>({primaryId:s.id,primaryLabel:s.text,measured:s.renderedFontPx,minimum:11}))),ye("hierarchy-label-contrast-low","Visible 3D hierarchy labels must meet text contrast",n.filter(s=>s.contrast<4.5).map(s=>({primaryId:s.id,primaryLabel:s.text,measured:s.contrast,minimum:4.5}))),ye("hierarchy-label-collision","Visible 3D hierarchy labels must not overlap",a)].filter(s=>!!s);return{version:1,state:"venue3d",passed:i.length===0,resolvedRules:["rendered-3d-webgl-context","rendered-3d-stable-frame","rendered-3d-camera-pose","rendered-3d-relief-projection","rendered-3d-label-size","rendered-3d-label-contrast","rendered-3d-label-collision"],viewport:t.viewport,context:t.context,frame:t.frame,camera:t.camera,scene:t.scene,composition:{visibleLabels:e.map(({id:s,kind:l,text:u})=>({id:s,kind:l,text:u})).sort((s,l)=>s.kind.localeCompare(l.kind)||s.id.localeCompare(l.id)),framing:Na(t.framing)},metrics:{minimumHierarchyFontPx:Mo(n.map(s=>s.renderedFontPx)),minimumHierarchyContrast:Mo(n.map(s=>s.contrast)),projectedReliefPx:Math.round(t.scene.projectedReliefPx*100)/100},findings:i}}function Po(t,e,n){t.fill(0);for(let r=0;r<Math.min(n,e.length);r++)t[e[r]]=1}import{Geometry as Ze,Mesh as Je,Program as ci,Texture as ui,Transform as No}from"ogl";import{Program as Re}from"ogl";var vt=`
29
+ }`;function Da(t){if(t>=1)return 1;if(t<.72){let n=t/.72;return 1-(1-n)*(1-n)}let e=(t-.72)/.28;return 1-.08*Math.sin(e*Math.PI)}function Qt(t){return Math.max(Ma,Math.min(Pa,t*wa))}function So(t,e){let n=new Sa,r=Ta(t),a=new Map,o=(i,s)=>{let l=new xa(t,{vertex:_a,fragment:Ia,uniforms:{uSeat:{value:i},uHeight:{value:1},uLift:{value:0},uRingScale:{value:1},uColor:{value:e},uRingAlpha:{value:.85}},transparent:!0,depthTest:!0,depthWrite:!1,cullFace:!1}),c=new ya(t,{geometry:r,program:l});return c.frustumCulled=!1,c.setParent(n),{mesh:c,program:l,seat:i,start:s}};return{root:n,setSeats(i,s,l){let c=new Set(i.slice(0,xo).map(d=>d.id));for(let[d,h]of a)c.has(d)||(h.mesh.setParent(null),a.delete(d));for(let d of i.slice(0,xo))a.has(d.id)||a.set(d.id,o(d.position,l?s:-1/0))},update(i,s,l,c=!1){let d=!1;for(let h of a.values()){let p=s[0]-h.seat[0],f=s[1]-h.seat[1],u=s[2]-h.seat[2],y=Math.hypot(p,f,u);h.mesh.visible=!l&&y>(c?Ca:Ea);let v=Qt(y),M=Math.max(0,Math.min(1,(i-h.start)/Ra));M<1&&(d=!0),h.program.uniforms.uHeight.value=v,h.program.uniforms.uRingScale.value=Math.min(v,Aa),h.program.uniforms.uLift.value=c?1:1-Da(M),h.program.uniforms.uRingAlpha.value=.55+.4*(M<1?Math.sin(M*Math.PI):0)}return d},dispose(){for(let i of a.values())i.mesh.setParent(null);a.clear(),r.remove()}}}var Ze="#ffffff",wo="#0b1220",Je=6,Fa=80,Mo=14,Po=88,Ao=20,Co={floor:{size:14,weight:"700",opacity:.98},stage:{size:14,weight:"700",opacity:.98},zone:{size:15,weight:"600",opacity:.95},section:{size:12,weight:"500",opacity:.88},ga:{size:12,weight:"500",opacity:.88},booth:{size:11,weight:"500",opacity:.85},annotation:{size:11,weight:"400",opacity:.75},row:{size:11.5,weight:"700",opacity:.94},seat:{size:12.5,weight:"800",opacity:1},access:{size:12,weight:"700",opacity:1}},La=640,Va=.8,ka=11,Oa="3px 7px",za="2px 5px",Eo="rgba(10,14,22,.62)",Na="#f4f7fb",Ro=5,To=2,Ha=6,et=new Set(["row","seat","access"]),_o={stage:6,floor:5,zone:4,section:3,ga:3,booth:2,annotation:1},ke={row:{x:66,y:20},seat:{x:52,y:22}},tt=Vn,Zt=t=>kn(t);function gt(t,e){let n=Zt(t),r=Zt(e);return(Math.max(n,r)+.05)/(Math.min(n,r)+.05)}function Jt(t,e){let n=/rgba\((\d+),(\d+),(\d+),([\d.]+)\)/.exec(t.replace(/\s/g,""));if(!n)return e;let r=Math.max(0,Math.min(1,Number(n[4])));return[1,2,3].map(a=>Number(n[a])/255*r+e[a-1]*(1-r))}function Ga(t,e=[.04,.06,.1],n=!0){let r=Zt(e)<.42,a=r?"#f4f7fb":"#0b1220",o=r?"rgba(8,12,22,.78)":"rgba(255,255,255,.84)",i=n?Jt(o,e):e,s=tt(t),l=n?7:4.5,c=s&&gt(s,i)>=l?t:a;return r?{ink:c,backing:o,border:"rgba(210,222,245,.24)"}:{ink:c,backing:o,border:"rgba(11,18,32,.22)"}}function Ba(t,e=[.04,.06,.1]){let n=Jt(Eo,e),r=tt(t);return{ink:r&&gt(r,n)>=4.5?t:Na,backing:Eo}}var Wa=.8,Oe=20,Ua=14,Ya=60,Xa='ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif',yt=class{constructor(e,n={}){this.nodes=new Map;this.labels=[];this.nodeAppearance=new WeakMap;this.forcedDense=!1;this.overviewDistance=null;this.selectedSeatLabelIds=new Set;this.narrowStage=!1;this.seatNumberRow=void 0;this.seatNumberSeat=null;this.pinHeads=[];this.opts=n,this.root=document.createElement("div"),this.root.setAttribute("data-view3d-labels","");let r=this.root.style;r.position="absolute",r.inset="0",r.pointerEvents="none",r.overflow="hidden",r.fontFamily=n.fontFamily||Xa,e.appendChild(this.root)}setVisible(e){this.root.style.visibility=e?"":"hidden"}setLabels(e){this.labels=e;let n=new Set(e.map(r=>r.id));for(let[r,a]of this.nodes)n.has(r)||(a.remove(),this.nodes.delete(r))}setForcedDense(e){this.forcedDense=e}setOverviewDistance(e){this.overviewDistance=e>0?e:null}setSeatNumberRow(e){return e===this.seatNumberRow?!1:(this.seatNumberRow=e,!0)}setSeatNumberSeat(e){let n=e?`seat:${e}`:null;return n===this.seatNumberSeat?!1:(this.seatNumberSeat=n,!0)}setSelectedSeatIds(e){this.selectedSeatLabelIds=new Set(Array.from(e,n=>`seat:${n}`))}sizeFor(e){let n=Co[e].size;return!this.narrowStage||et.has(e)?n:Math.max(ka,n*Va)}qualityEvidence(){let e=this.root.getBoundingClientRect(),n=this.root.style.visibility!=="hidden";return this.labels.map(r=>{let a=this.nodes.get(r.id),o=a?.getBoundingClientRect(),i=!!(n&&a&&a.style.display!=="none"&&o&&o.width>0&&o.height>0);return{id:r.id,kind:r.kind,text:r.text,visible:i,renderedFontPx:a&&Number.parseFloat(a.style.fontSize)||0,contrast:a?Number(a.dataset.qualityContrast??0):0,...i&&o?{screenBox:{x:o.x-e.x,y:o.y-e.y,width:o.width,height:o.height}}:{}}})}update(e,n,r,a,o,i){if(!this.labels.length)return;this.narrowStage=n>0&&n<La;let s=Un(a,o,{hasZoneLabels:this.labels.some(g=>g.kind==="zone")});this.forcedDense&&(s.add("row"),s.add("seat"),s.add("access")),!this.forcedDense&&this.overviewDistance!==null&&a>this.overviewDistance*Wa&&(s.delete("section"),s.delete("ga"));let l=[];for(let g of this.labels){if(!s.has(g.kind)&&!(g.kind==="seat"&&this.selectedSeatLabelIds.has(g.id)))continue;let A=g.kind==="seat"&&i&&this.selectedSeatLabelIds.has(g.id)?g.pinBase:void 0,w=A&&i?[A[0],A[1]+Qt(Math.hypot(A[0]-i[0],A[1]-i[1],A[2]-i[2])),A[2]]:g.anchor,_=xe(e,w,n,r);if(!_.visible)continue;let O=et.has(g.kind),C=this.sizeFor(g.kind),V=g.kind==="access"?Oe:jn(g.text,C,!O)+(O?Ro*2:0);if(g.kind==="access"&&g.seatWidthM!==void 0&&Bt(e,g.anchor,g.seatWidthM,n)<Ua||g.kind==="seat"&&g.seatWidthM!==void 0&&!this.selectedSeatLabelIds.has(g.id)&&Bt(e,g.anchor,g.seatWidthM,n)<Math.max(22,V))continue;let N=Yn(_,V/2,C/2+(O?To:4),n,r),W=i?Math.hypot(g.anchor[0]-i[0],g.anchor[1]-i[1],g.anchor[2]-i[2]):1;l.push({label:g,screen:N,focus:$n(N,W,n,r),halfWidth:V/2,...this.selectedSeatLabelIds.has(g.id)?{priority:1}:{}})}let c=Wn(l.filter(g=>g.label.kind==="floor"),n),d=[...l.filter(g=>!et.has(g.label.kind)&&g.label.kind!=="floor"),...c],h=Kn(n),p=l.filter(g=>g.label.kind==="seat"&&this.selectedSeatLabelIds.has(g.label.id)),f=je(p,ke.seat.x,ke.seat.y,h.seat);this.placePinHeads(p.filter(g=>g.label.pinBase&&!f.includes(g)).map(g=>g.screen));let u=Xn(d,Po,Ao).filter(g=>!f.some(A=>qn(g,A,Po,Ao))),y=je(l.filter(g=>g.label.kind==="access"),Oe,Oe,Ya,[...u,...f]),v=je(l.filter(g=>g.label.kind==="row"),ke.row.x,ke.row.y,h.row,[...u,...f,...y]),M=this.seatNumberRow!==void 0||this.seatNumberSeat!==null,I=je(l.filter(g=>g.label.kind==="seat"&&!this.selectedSeatLabelIds.has(g.label.id)&&(this.seatNumberSeat!==null?g.label.id===this.seatNumberSeat:!M||this.seatNumberRow!==null&&g.label.rowId===this.seatNumberRow)),ke.seat.x,ke.seat.y,M?Fa:h.seat-f.length,[...u,...f,...y,...v]),S=[...u,...y,...v,...f,...I],T=new Set(S.map(g=>g.label.id));for(let{label:g,screen:A}of S){let _=this.nodeFor(g).style;_.display=g.kind==="access"?"flex":"";let O=!!g.pinBase&&this.selectedSeatLabelIds.has(g.id);_.transform=O?`translate(-50%, -100%) translate(${A.x.toFixed(1)}px, ${(A.y-Je).toFixed(1)}px)`:`translate(-50%, -50%) translate(${A.x.toFixed(1)}px, ${A.y.toFixed(1)}px)`}let D=S.filter(({label:g})=>!et.has(g.kind)).sort((g,A)=>_o[A.label.kind]-_o[g.label.kind]||g.screen.depth-A.screen.depth||g.focus-A.focus).flatMap(({label:g})=>{let A=this.nodes.get(g.id);return A&&A.style.display!=="none"?[{node:A,box:A.getBoundingClientRect()}]:[]}),L=[];for(let{node:g,box:A}of D)L.some(_=>A.left<_.right+3&&A.right+3>_.left&&A.top<_.bottom+3&&A.bottom+3>_.top)?g.style.display="none":L.push(A);for(let[g,A]of this.nodes)T.has(g)||(A.style.display="none")}nodeFor(e){let n=this.nodes.get(e.id);if(!n){n=document.createElement("div");let y=n.style;y.position="absolute",y.left="0",y.top="0",y.whiteSpace="nowrap",y.display="none",this.root.appendChild(n),this.nodes.set(e.id,n)}let r=this.selectedSeatLabelIds.has(e.id),a=this.nodeAppearance.get(n);if(a&&a.text===e.text+(e.icon??"")&&a.kind===e.kind&&a.color===e.color&&a.selected===r&&a.narrow===this.narrowStage)return n;if(this.nodeAppearance.set(n,{text:e.text+(e.icon??""),kind:e.kind,color:e.color,selected:r,narrow:this.narrowStage}),e.kind==="access")return this.paintAccessChip(n,e);if(n.textContent=e.text,r){let y=document.createElement("span"),v=y.style;v.position="absolute",v.left="50%",v.bottom=`-${Je}px`,v.transform="translateX(-50%)",v.borderLeft=`${Je}px solid transparent`,v.borderRight=`${Je}px solid transparent`,v.borderTop=`${Je}px solid ${Ze}`,n.appendChild(y)}n.setAttribute("data-label-kind",e.kind),n.toggleAttribute("data-selected-seat",r);let o=Co[e.kind],i=n.style;i.fontSize=`${this.sizeFor(e.kind)}px`,i.fontWeight=r?"800":o.weight,i.opacity=r?"1":String(o.opacity);let s=et.has(e.kind),l=!s,c=Ga(e.color??this.opts.ink,this.opts.backgroundRgb,!0),d=s?Ba(e.color??this.opts.ink,this.opts.backgroundRgb):c;i.color=r?wo:d.ink,i.background=r?Ze:d.backing,i.border=r?`1px solid ${Ze}`:l?`1px solid ${c.border}`:"",i.borderRadius=r||l?"999px":`${Ha}px`;let h=this.narrowStage?za:Oa;i.padding=r||l?h:`${To}px ${Ro}px`,i.lineHeight=s?"1.1":"",i.boxShadow=r?"0 0 0 3px rgba(255,255,255,.28), 0 0 18px rgba(255,255,255,.55), 0 5px 14px rgba(0,0,0,.45)":l?"0 3px 10px rgba(0,0,0,.24)":"0 1px 4px rgba(0,0,0,.28)",i.textShadow=r||l?"none":"0 1px 1px rgba(0,0,0,0.4)",i.letterSpacing=e.kind==="zone"||e.kind==="floor"?"0.08em":"0.02em";let p=this.opts.backgroundRgb??[.04,.06,.1],f=tt(r?wo:d.ink)??[1,1,1],u=Jt(r?Ze:d.backing,p);return n.dataset.qualityContrast=gt(f,u).toFixed(3),i.textTransform=e.kind==="zone"||e.kind==="floor"?"uppercase":"",n}paintAccessChip(e,n){e.setAttribute("data-label-kind","access"),e.setAttribute("data-access-type",n.icon??""),e.innerHTML=n.icon?Ln(n.icon,{size:Oe-6}):"";let r=e.style;return r.width=`${Oe}px`,r.height=`${Oe}px`,r.alignItems="center",r.justifyContent="center",r.borderRadius="50%",r.background=n.color??"#3b82f6",r.color=n.ink??"#ffffff",r.border="1.5px solid #ffffff",r.boxShadow="0 2px 6px rgba(0,0,0,.35)",r.padding="0",r.lineHeight="0",r.boxSizing="border-box",e.dataset.qualityContrast=gt(tt(n.ink??"#ffffff")??[1,1,1],tt(n.color??"#3b82f6")??[.23,.51,.96]).toFixed(3),e}placePinHeads(e){for(;this.pinHeads.length<e.length;){let n=document.createElement("div");n.setAttribute("data-pin-head",""),n.setAttribute("aria-hidden","true");let r=n.style;r.position="absolute",r.left="0",r.top="0",r.width=`${Mo}px`,r.height=`${Mo}px`,r.borderRadius="50%",r.background=Ze,r.boxShadow="0 0 0 3px rgba(255,255,255,.28), 0 0 14px rgba(255,255,255,.55), 0 3px 8px rgba(0,0,0,.45)",r.pointerEvents="none",this.root.appendChild(n),this.pinHeads.push(n)}this.pinHeads.forEach((n,r)=>{let a=e[r];n.style.display=a?"":"none",a&&(n.style.transform=`translate(-50%, -100%) translate(${a.x.toFixed(1)}px, ${a.y.toFixed(1)}px)`)})}dispose(){this.pinHeads=[],this.root.remove(),this.nodes.clear()}};var qa=1;var ja=new Set(["floor","stage","zone","section","ga","booth","annotation"]);function Ka(t){return t.every(e=>Number.isFinite(e))}function $a(t,e){return t.x<e.x+e.width&&t.x+t.width>e.x&&t.y<e.y+e.height&&t.y+t.height>e.y}function Io(t){return t.length?Math.round(Math.min(...t)*100)/100:null}function Re(t){return Math.round(t*1e4)/1e4}function Qa(t){if(t)return{box:{x:Re(t.box.x),y:Re(t.box.y),width:Re(t.box.width),height:Re(t.box.height)},horizontalFillRatio:Re(t.horizontalFillRatio),verticalFillRatio:Re(t.verticalFillRatio),visibleAreaRatio:Re(t.visibleAreaRatio),clippedEdges:[...t.clippedEdges]}}function Se(t,e,n){return n.length?{code:t,message:e,count:n.length,samples:n.slice(0,20)}:null}function en(t){let e=t.labels.filter(s=>s.visible&&s.screenBox),n=e.filter(s=>ja.has(s.kind)),r=t.scene.floorCount>1?t.scene.floorCount:t.scene.zoneCount||t.scene.sectionCount,a=[];for(let s=0;s<n.length;s+=1)for(let l=0;l<s;l+=1)$a(n[s].screenBox,n[l].screenBox)&&a.push({primaryId:n[s].id,primaryLabel:n[s].text,secondaryId:n[l].id});let o=[...t.camera.position,t.camera.distance,t.camera.verticalFovDeg],i=[Se("webgl2-unavailable","The venue scene must render through WebGL2",t.context.webgl2?[]:[{primaryId:"renderer",primaryLabel:"WebGL2"}]),Se("context-lost","The WebGL context must be live at capture",t.context.lost?[{primaryId:"renderer",primaryLabel:"context lost"}]:[]),Se("frame-not-stable","The captured 3D frame must be rendered and parked",t.frame.rendered>0&&t.frame.idle?[]:[{primaryId:"renderer",primaryLabel:"unstable frame"}]),Se("viewport-empty","The 3D viewport must have visible dimensions",t.viewport.width>1&&t.viewport.height>1?[]:[{primaryId:"viewport",primaryLabel:`${t.viewport.width}\xD7${t.viewport.height}`}]),Se("camera-invalid","The capture camera must have a finite physical pose",Ka(o)&&t.camera.distance>0&&t.camera.verticalFovDeg>0&&t.camera.verticalFovDeg<180?[]:[{primaryId:"camera",primaryLabel:"invalid pose"}]),Se("authored-relief-not-visible","Authored 3D height or rake must produce visible screen-space relief",!t.scene.authoredRelief||t.scene.renderedVerticalSpanM>.05&&t.scene.projectedReliefPx>=2?[]:[{primaryId:"scene",primaryLabel:"authored relief",measured:t.scene.projectedReliefPx,minimum:2}]),Se("hierarchy-label-missing","A venue with authored hierarchy must show at least one structural label",r===0||n.length>0?[]:[{primaryId:"labels",primaryLabel:`${r} expected hierarchy labels`}]),Se("hierarchy-label-undersized","Visible 3D hierarchy labels must remain readable",n.filter(s=>s.renderedFontPx<11).map(s=>({primaryId:s.id,primaryLabel:s.text,measured:s.renderedFontPx,minimum:11}))),Se("hierarchy-label-contrast-low","Visible 3D hierarchy labels must meet text contrast",n.filter(s=>s.contrast<4.5).map(s=>({primaryId:s.id,primaryLabel:s.text,measured:s.contrast,minimum:4.5}))),Se("hierarchy-label-collision","Visible 3D hierarchy labels must not overlap",a)].filter(s=>!!s);return{version:1,state:"venue3d",passed:i.length===0,resolvedRules:["rendered-3d-webgl-context","rendered-3d-stable-frame","rendered-3d-camera-pose","rendered-3d-relief-projection","rendered-3d-label-size","rendered-3d-label-contrast","rendered-3d-label-collision"],viewport:t.viewport,context:t.context,frame:t.frame,camera:t.camera,scene:t.scene,composition:{visibleLabels:e.map(({id:s,kind:l,text:c})=>({id:s,kind:l,text:c})).sort((s,l)=>s.kind.localeCompare(l.kind)||s.id.localeCompare(l.id)),framing:Qa(t.framing)},metrics:{minimumHierarchyFontPx:Io(n.map(s=>s.renderedFontPx)),minimumHierarchyContrast:Io(n.map(s=>s.contrast)),projectedReliefPx:Math.round(t.scene.projectedReliefPx*100)/100},findings:i}}function Do(t,e,n){t.fill(0);for(let r=0;r<Math.min(n,e.length);r++)t[e[r]]=1}import{Geometry as nt,Mesh as ot,Program as wi,Texture as Mi,Transform as qo}from"ogl";import{Program as Te}from"ogl";var xt=`
30
30
  float chairWeight(float depth) {
31
31
  return 1.0 - smoothstep(uChairFull, uChairNone, depth);
32
- }`,Ao=`
32
+ }`,Fo=`
33
33
  float occupantWeight(float depth) {
34
- float nearWeight = smoothstep(${io.toFixed(1)}, ${so.toFixed(1)}, depth);
35
- float farWeight = 1.0 - smoothstep(${ro.toFixed(1)}, ${ao.toFixed(1)}, depth);
34
+ float nearWeight = smoothstep(${fo.toFixed(1)}, ${vo.toFixed(1)}, depth);
35
+ float farWeight = 1.0 - smoothstep(${ho.toFixed(1)}, ${po.toFixed(1)}, depth);
36
36
  return nearWeight * farWeight;
37
- }`,$t=`
37
+ }`,tn=`
38
38
  float glyphEq(float glyph, float expected) {
39
39
  return 1.0 - step(0.25, abs(glyph - expected));
40
40
  }
@@ -83,7 +83,20 @@ vec3 glyphChairPosition(vec3 p, float partId, float glyph) {
83
83
  p.y += 0.16;
84
84
  }
85
85
  return p;
86
- }`,Ha=`#version 300 es
86
+ }`,Za=1.5,ze=`
87
+ uniform vec4 uSeeThrough; // xyz = the seats looked at, w = cone radius there; 0 = off
88
+ bool seeThroughCut(vec3 p, vec3 eye) {
89
+ if (uSeeThrough.w <= 0.0) return false;
90
+ vec3 axis = uSeeThrough.xyz - eye;
91
+ float len = length(axis);
92
+ if (len < 1.0) return false;
93
+ vec3 dir = axis / len;
94
+ float t = dot(p - eye, dir);
95
+ if (t <= 0.0 || t > len - ${Za.toFixed(2)}) return false;
96
+ vec3 onLine = eye + dir * t;
97
+ if (p.y < onLine.y - 0.25) return false;
98
+ return length(p - onLine) < uSeeThrough.w * t / len;
99
+ }`,Ja=`#version 300 es
87
100
  precision highp float;
88
101
  in vec3 position;
89
102
  in vec3 normal;
@@ -121,13 +134,13 @@ void main() {
121
134
  vNormalWorld = normalize(mat3(modelMatrix) * normal);
122
135
  vColor = color;
123
136
  gl_Position = projectionMatrix * mv;
124
- }`,Co=`
137
+ }`,Lo=`
125
138
  bool roomWallHidden(float material, vec3 normalWorld, vec3 posWorld, vec3 eye, vec2 roomCentre) {
126
139
  if (abs(material - 6.0) > 0.5) return false;
127
140
  vec3 n = normalize(normalWorld);
128
141
  if (abs(n.y) > 0.5) return true;
129
142
  return dot(n.xz, eye.xz - posWorld.xz) * dot(n.xz, roomCentre - posWorld.xz) <= 0.0;
130
- }`,Ga=`#version 300 es
143
+ }`,ei=`#version 300 es
131
144
  precision highp float;
132
145
  in vec3 vColor;
133
146
  in vec3 vNormalWorld;
@@ -147,7 +160,8 @@ uniform mat4 uShadowMatrix;
147
160
  uniform vec3 cameraPosition;
148
161
  uniform vec2 uRoomCentre;
149
162
  out vec4 fragColor;
150
- ${Co}
163
+ ${Lo}
164
+ ${ze}
151
165
  // Stable world-space variation; no textures or per-frame random grain.
152
166
  float turfHash(vec2 p) {
153
167
  vec3 q = fract(vec3(p.xyx) * 0.1031);
@@ -187,6 +201,7 @@ float architecturalLight(vec3 normal) {
187
201
  void main() {
188
202
  if (vDim > 0.5) discard;
189
203
  if (roomWallHidden(vMaterial, vNormalWorld, vPosWorld, cameraPosition, uRoomCentre)) discard;
204
+ if (seeThroughCut(vPosWorld, cameraPosition)) discard;
190
205
  // Row treads (material 3) and risers (material 2) are chart truth: the
191
206
  // stepped deck IS the stand, at every distance. What must not survive at
192
207
  // whole-venue scale is the risers' darker shade \u2014 hundreds of sub-pixel dark
@@ -240,7 +255,10 @@ void main() {
240
255
  // More sun, less flat ambient: at 0.40-0.68 ambient against a 0.46 key every
241
256
  // face read at nearly one value and venues looked flat beside a lit reference
242
257
  // (3D Digital Venue comparison, 2026-09-24). Lit and turned faces now part.
243
- vec3 base = vColorRung * (0.34 + 0.26 * hemi) * mix(0.72, 1.0, visibility) + vColorRung * key * 0.60 + vColorRung * fill * 0.10;
258
+ // The fill keeps the turned faces from going charcoal: at 0.10 a wall facing
259
+ // away from the sun kept about half its colour, and the walls under every
260
+ // tier and box read as dark blocks (owner, 2026-09-24).
261
+ vec3 base = vColorRung * (0.34 + 0.26 * hemi) * mix(0.72, 1.0, visibility) + vColorRung * key * 0.60 + vColorRung * fill * 0.26;
244
262
  float fres = pow(1.0 - max(dot(normalize(vNormalView), V), 0.0), 3.0);
245
263
  // Material 1 is a powered display and keeps its authored emission treatment.
246
264
  // Every architectural material uses the venue roughness token; 0.78 maps to
@@ -274,8 +292,8 @@ void main() {
274
292
  + vec3(0.20, 0.10, 0.34) * focalHalo;
275
293
  base = mix(base, display, poweredDisplay * verticalFace * 0.92);
276
294
  fragColor = vec4(base, 1.0);
277
- }`,Eo=`
278
- ${$t}
295
+ }`,Vo=`
296
+ ${tn}
279
297
  vec4 seatSurface(vec3 source, float radius) {
280
298
  vec4 origin = modelViewMatrix * vec4(iOffset, 1.0);
281
299
  if (iPhysicalSeat < 0.5) {
@@ -289,12 +307,12 @@ vec4 seatSurface(vec3 source, float radius) {
289
307
  if (surface < 0.5) return origin;
290
308
  vec3 p = glyphChairPosition(source, surface, iGlyph);
291
309
  p.xz *= iChairWidth;
292
- if (surface > 1.5) p.z -= max(p.y - ${Ce.toFixed(2)}, 0.0) * ${Ue.toFixed(2)} * glyphBackRake(iGlyph);
310
+ if (surface > 1.5) p.z -= max(p.y - ${Ee.toFixed(2)}, 0.0) * ${Xe.toFixed(2)} * glyphBackRake(iGlyph);
293
311
  float c = cos(iYaw), s = sin(iYaw);
294
312
  vec3 rotated = vec3(p.x * c + p.z * s, p.y, -p.x * s + p.z * c);
295
313
  return modelViewMatrix * vec4(iOffset + rotated, 1.0);
296
314
  }
297
- `,Ba=`#version 300 es
315
+ `,ti=`#version 300 es
298
316
  precision highp float;
299
317
  in float surface;
300
318
  in float iYaw;
@@ -333,9 +351,12 @@ out float vSectionFade;
333
351
  out float vDotWeight; // 1 = the dot IS this seat, 0 = the chair has taken over
334
352
  out float vPhysicalSeat;
335
353
  out float vPixelRadius;
336
- ${vt}
337
- ${Eo}
354
+ uniform vec3 cameraPosition;
355
+ ${xt}
356
+ ${Vo}
357
+ ${ze}
338
358
  void main() {
359
+ if (seeThroughCut(iOffset, cameraPosition)) { gl_Position = vec4(2.0, 2.0, 2.0, 1.0); return; }
339
360
  vec4 mv = modelViewMatrix * vec4(iOffset, 1.0);
340
361
  float depth = max(-mv.z, 0.001);
341
362
  // Hand the seat over to the chair mesh as it comes into range. Derived from
@@ -355,7 +376,7 @@ void main() {
355
376
  mv = seatSurface(position, r);
356
377
  // Match the shell's non-uniform width/depth scale before its back rake.
357
378
  vec3 n = vec3(normal.x / iChairWidth, normal.y, normal.z / iChairWidth);
358
- if (surface > 1.5) n.y += n.z * ${Ue.toFixed(2)} * glyphBackRake(iGlyph);
379
+ if (surface > 1.5) n.y += n.z * ${Xe.toFixed(2)} * glyphBackRake(iGlyph);
359
380
  n = normalize(n);
360
381
  vSeatNormal = vec3(n.x * cos(iYaw) + n.z * sin(iYaw), n.y, -n.x * sin(iYaw) + n.z * cos(iYaw));
361
382
  vSeatHeight = position.y;
@@ -367,13 +388,13 @@ void main() {
367
388
  vDim = (uFocusFloor < -0.5 || abs(iFloor - uFocusFloor) < 0.5) ? 0.0 : 1.0;
368
389
  vSectionFade = (uFocusSection < -0.5 || abs(iSection - uFocusSection) < 0.5) ? 0.0 : 1.0;
369
390
  gl_Position = projectionMatrix * mv;
370
- }`,Ro=`
391
+ }`,ko=`
371
392
  float seatSilhouette(vec2 uv, float physical) {
372
393
  // Solid furniture owns its silhouette in geometry. Only empty bays need
373
394
  // a fragment mask; cutting physical faces would open holes in the volume.
374
395
  return mix(max(abs(uv.x), abs(uv.y)), 0.0, physical);
375
396
  }
376
- `,Wa=`#version 300 es
397
+ `,ni=`#version 300 es
377
398
  precision highp float;
378
399
  in vec3 vSeatNormal;
379
400
  in float vSeatHeight;
@@ -393,7 +414,7 @@ uniform float uSeatDetail; // 0 for venue/area overview; 1 in section/row/sea
393
414
  uniform vec3 uFadeColor;
394
415
  uniform float uRoughness;
395
416
  out vec4 fragColor;
396
- ${Ro}
417
+ ${ko}
397
418
  void main() {
398
419
  if (vDim > 0.5) discard;
399
420
  // Same screen-door dissolve as the structure rung (uStructureDetail): the
@@ -458,7 +479,7 @@ void main() {
458
479
  c = mix(c, mix(vec3(lum), vec3(0.93), 0.35), 0.45);
459
480
  }
460
481
  fragColor = vec4(c, alpha);
461
- }`,Ua=`#version 300 es
482
+ }`,oi=`#version 300 es
462
483
  precision highp float;
463
484
  in vec3 position; // local: x/z in units of the seat radius, y in METRES
464
485
  in vec3 normal;
@@ -494,10 +515,13 @@ out float vSectionFade;
494
515
  out float vOccupant; // 1 = this vertex belongs to a person, not to the chair
495
516
  out vec3 vOccupantTint;
496
517
  out float vTaken; // 1 = sold or held: not for sale
497
- ${vt}
498
- ${Ao}
499
- ${$t}
518
+ ${xt}
519
+ ${Fo}
520
+ ${tn}
521
+ uniform vec3 cameraPosition;
522
+ ${ze}
500
523
  void main() {
524
+ if (seeThroughCut(iOffset, cameraPosition)) { gl_Position = vec4(2.0, 2.0, 2.0, 1.0); return; }
501
525
  vec4 anchor = modelViewMatrix * vec4(iOffset, 1.0);
502
526
  float viewDepth = -anchor.z;
503
527
  float depth = max(viewDepth, 0.001);
@@ -582,7 +606,7 @@ void main() {
582
606
  vDim = (uFocusFloor < -0.5 || abs(iFloor - uFocusFloor) < 0.5) ? 0.0 : 1.0;
583
607
  vSectionFade = (uFocusSection < -0.5 || abs(iSection - uFocusSection) < 0.5) ? 0.0 : 1.0;
584
608
  gl_Position = projectionMatrix * mv;
585
- }`,Ya=`#version 300 es
609
+ }`,ri=`#version 300 es
586
610
  precision highp float;
587
611
  in vec3 vColor;
588
612
  in vec3 vNormalWorld;
@@ -660,14 +684,14 @@ void main() {
660
684
  base = mix(base, mix(vec3(lum), vec3(0.93), 0.35), 0.45);
661
685
  }
662
686
  fragColor = vec4(base, 1.0);
663
- }`,Xa=`#version 300 es
687
+ }`,ai=`#version 300 es
664
688
  precision highp float;
665
689
  in vec2 position;
666
690
  out vec2 vUv;
667
691
  void main() {
668
692
  vUv = position * 0.5 + 0.5;
669
693
  gl_Position = vec4(position, 0.999, 1.0);
670
- }`,qa=`#version 300 es
694
+ }`,ii=`#version 300 es
671
695
  precision highp float;
672
696
  in vec2 vUv;
673
697
  uniform vec3 uTop;
@@ -698,7 +722,7 @@ void main() {
698
722
  col = mix(col, sky, smoothstep(-0.22, 0.03, up));
699
723
  }
700
724
  fragColor = vec4(col, 1.0);
701
- }`,ja=`#version 300 es
725
+ }`,si=`#version 300 es
702
726
  precision highp float;
703
727
  in float surface;
704
728
  in float iYaw;
@@ -726,9 +750,12 @@ out float vPhysicalSeat;
726
750
  out float vDotWeight;
727
751
  out float vHidden;
728
752
  flat out vec3 vPick;
729
- ${vt}
730
- ${Eo}
753
+ uniform vec3 cameraPosition;
754
+ ${xt}
755
+ ${Vo}
756
+ ${ze}
731
757
  void main() {
758
+ if (seeThroughCut(iOffset, cameraPosition)) { gl_Position = vec4(2.0, 2.0, 2.0, 1.0); return; }
732
759
  int id = gl_InstanceID + 1; // 0 reserved for no-hit
733
760
  vPick = vec3(float(id & 255), float((id >> 8) & 255), float((id >> 16) & 255)) / 255.0;
734
761
  vec4 mv = modelViewMatrix * vec4(iOffset, 1.0);
@@ -741,7 +768,7 @@ void main() {
741
768
  vPhysicalSeat = iPhysicalSeat;
742
769
  vHidden = (uFocusFloor > -0.5 && abs(iFloor - uFocusFloor) > 0.5) ? 1.0 : 0.0;
743
770
  gl_Position = projectionMatrix * mv;
744
- }`,Ka=`#version 300 es
771
+ }`,li=`#version 300 es
745
772
  precision highp float;
746
773
  in vec2 vUv;
747
774
  in float vPhysicalSeat;
@@ -749,7 +776,7 @@ in float vDotWeight;
749
776
  in float vHidden;
750
777
  flat in vec3 vPick;
751
778
  out vec4 fragColor;
752
- ${Ro}
779
+ ${ko}
753
780
  void main() {
754
781
  if (vHidden > 0.5) discard;
755
782
  if (vDotWeight <= 0.99) discard;
@@ -757,7 +784,7 @@ void main() {
757
784
  float d = seatSilhouette(vUv, vPhysicalSeat);
758
785
  if (d > 1.0) discard; // hit-mask matches chair/bay shape
759
786
  fragColor = vec4(vPick, 1.0);
760
- }`,$a=`#version 300 es
787
+ }`,ci=`#version 300 es
761
788
  precision highp float;
762
789
  in vec3 position;
763
790
  in float part;
@@ -779,10 +806,13 @@ uniform float uFocusFloor;
779
806
  flat out vec3 vPick;
780
807
  out float vChairWeight;
781
808
  out float vHidden;
782
- ${vt}
783
- ${Ao}
784
- ${$t}
809
+ uniform vec3 cameraPosition;
810
+ ${xt}
811
+ ${Fo}
812
+ ${tn}
813
+ ${ze}
785
814
  void main() {
815
+ if (seeThroughCut(iOffset, cameraPosition)) { gl_Position = vec4(2.0, 2.0, 2.0, 1.0); return; }
786
816
  int id = int(iPickIndex + 0.5); // already global index + 1
787
817
  vPick = vec3(float(id & 255), float((id >> 8) & 255), float((id >> 16) & 255)) / 255.0;
788
818
  vHidden = (uFocusFloor > -0.5 && abs(iFloor - uFocusFloor) > 0.5) ? 1.0 : 0.0;
@@ -815,7 +845,7 @@ void main() {
815
845
  float c = cos(iYaw), s = sin(iYaw);
816
846
  vec3 rp = vec3(p.x * c + p.z * s, p.y, -p.x * s + p.z * c);
817
847
  gl_Position = projectionMatrix * modelViewMatrix * vec4(iOffset + rp, 1.0);
818
- }`,Qa=`#version 300 es
848
+ }`,ui=`#version 300 es
819
849
  precision highp float;
820
850
  flat in vec3 vPick;
821
851
  in float vHidden;
@@ -825,7 +855,7 @@ void main() {
825
855
  if (vHidden > 0.5) discard;
826
856
  if (vChairWeight < 0.01) discard;
827
857
  fragColor = vec4(vPick, 1.0);
828
- }`,Za=`#version 300 es
858
+ }`,di=`#version 300 es
829
859
  precision highp float;
830
860
  in vec3 position;
831
861
  in vec3 normal;
@@ -845,7 +875,7 @@ void main() {
845
875
  vNormalWorld = mat3(modelMatrix) * normal;
846
876
  vPosWorld = (modelMatrix * vec4(position, 1.0)).xyz;
847
877
  gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
848
- }`,Ja=`#version 300 es
878
+ }`,mi=`#version 300 es
849
879
  precision highp float;
850
880
  in float vHidden;
851
881
  in float vMaterial;
@@ -854,12 +884,14 @@ in vec3 vPosWorld;
854
884
  uniform vec3 cameraPosition;
855
885
  uniform vec2 uRoomCentre;
856
886
  out vec4 fragColor;
857
- ${Co}
887
+ ${Lo}
888
+ ${ze}
858
889
  void main() {
859
890
  if (vHidden > 0.5) discard;
860
891
  if (roomWallHidden(vMaterial, vNormalWorld, vPosWorld, cameraPosition, uRoomCentre)) discard;
892
+ if (seeThroughCut(vPosWorld, cameraPosition)) discard;
861
893
  fragColor = vec4(0.0, 0.0, 0.0, 1.0);
862
- }`;function To(t){return new Re(t,{vertex:ja,fragment:Ka,transparent:!1,depthTest:!0,depthWrite:!0,cullFace:!1,uniforms:{uSeatRadius:{value:Ye},uSeatScale:{value:1},uMinPixels:{value:De},uPixelToWorld:{value:.002},uChairFull:{value:je},uChairNone:{value:Le},uFocusFloor:{value:-1}}})}function Fo(t){return new Re(t,{vertex:$a,fragment:Qa,transparent:!1,depthTest:!0,depthWrite:!0,cullFace:!1,uniforms:{uChairFull:{value:je},uChairNone:{value:Le},uBackRake:{value:Ue},uBackBase:{value:Ce},uFocusFloor:{value:-1}}})}function Io(t){return new Re(t,{vertex:Za,fragment:Ja,transparent:!1,depthTest:!0,depthWrite:!0,cullFace:!1,uniforms:{uFocusFloor:{value:-1},uRoomCentre:{value:new Float32Array([0,0])}}})}function _o(t,e=.78,n=[.63,.66,.65]){return new Re(t,{vertex:Ha,fragment:Ga,cullFace:!1,depthTest:!0,depthWrite:!0,uniforms:{uKeyDir:{value:new Float32Array([-.48,.78,.4])},uFocusFloor:{value:-1},uStructureDetail:{value:0},uDeckColor:{value:new Float32Array(n)},uSectionFilter:{value:0},uRoughness:{value:e},uRoomCentre:{value:new Float32Array([0,0])}}})}function Do(t){return new Re(t,{vertex:Ba,fragment:Wa,transparent:!0,depthTest:!0,depthWrite:!0,cullFace:!1,uniforms:{uKeyDir:{value:new Float32Array([-.48,.78,.4])},uSeatRadius:{value:Ye},uSeatScale:{value:1},uMinPixels:{value:De},uPixelToWorld:{value:.002},uSeatFade:{value:0},uSeatDetail:{value:0},uFocusFloor:{value:-1},uFocusSection:{value:-1},uFadeColor:{value:new Float32Array([.32,.37,.43])},uChairFull:{value:je},uChairNone:{value:Le}}})}function Lo(t,e=.78){return new Re(t,{vertex:Ua,fragment:Ya,transparent:!1,depthTest:!0,depthWrite:!0,cullFace:!1,uniforms:{uKeyDir:{value:new Float32Array([-.48,.78,.4])},uFadeColor:{value:new Float32Array([.32,.37,.43])},uChairFull:{value:je},uChairNone:{value:Le},uBackRake:{value:Ue},uBackBase:{value:Ce},uFocusFloor:{value:-1},uFocusSection:{value:-1},uRoughness:{value:e}}})}function Vo(t,e,n,r){return new Re(t,{vertex:Xa,fragment:qa,depthTest:!1,depthWrite:!1,cullFace:!1,uniforms:{uTop:{value:new Float32Array(e)},uBottom:{value:new Float32Array(n)},uSky:{value:r?1:0},uZenith:{value:new Float32Array(r?.zenith??[0,0,0])},uHorizon:{value:new Float32Array(r?.horizon??[0,0,0])},uInvViewProj:{value:new Float32Array(16)}}})}import{Camera as ei,Mat4 as ti,Mesh as ni,Program as oi,RenderTarget as ri,Transform as ai}from"ogl";function ko(t,e,n){let a=Math.max(3,n.radius*1.04),[o,i,s]=n.center,l=new ei(t,{left:-a,right:a,bottom:-a,top:a,near:.1,far:a*6});l.position.set(o-a*1.44,i+a*2.34,s+a*1.2),l.lookAt([o,i,s]);let u=new ri(t,{width:1024,height:1024,depthTexture:!0,minFilter:t.NEAREST,magFilter:t.NEAREST}),d=new oi(t,{cullFace:!1,vertex:`#version 300 es
894
+ }`;function Oo(t){return new Te(t,{vertex:si,fragment:li,transparent:!1,depthTest:!0,depthWrite:!0,cullFace:!1,uniforms:{uSeeThrough:{value:[0,0,0,0]},uSeatRadius:{value:qe},uSeatScale:{value:1},uMinPixels:{value:Le},uPixelToWorld:{value:.002},uChairFull:{value:Qe},uChairNone:{value:Ve},uFocusFloor:{value:-1}}})}function zo(t){return new Te(t,{vertex:ci,fragment:ui,transparent:!1,depthTest:!0,depthWrite:!0,cullFace:!1,uniforms:{uSeeThrough:{value:[0,0,0,0]},uChairFull:{value:Qe},uChairNone:{value:Ve},uBackRake:{value:Xe},uBackBase:{value:Ee},uFocusFloor:{value:-1}}})}function No(t){return new Te(t,{vertex:di,fragment:mi,transparent:!1,depthTest:!0,depthWrite:!0,cullFace:!1,uniforms:{uSeeThrough:{value:[0,0,0,0]},uFocusFloor:{value:-1},uRoomCentre:{value:new Float32Array([0,0])}}})}function Ho(t,e=.78,n=[.63,.66,.65]){return new Te(t,{vertex:Ja,fragment:ei,cullFace:!1,depthTest:!0,depthWrite:!0,uniforms:{uSeeThrough:{value:[0,0,0,0]},uKeyDir:{value:new Float32Array([-.48,.78,.4])},uFocusFloor:{value:-1},uStructureDetail:{value:0},uDeckColor:{value:new Float32Array(n)},uSectionFilter:{value:0},uRoughness:{value:e},uRoomCentre:{value:new Float32Array([0,0])}}})}function Go(t){return new Te(t,{vertex:ti,fragment:ni,transparent:!0,depthTest:!0,depthWrite:!0,cullFace:!1,uniforms:{uSeeThrough:{value:[0,0,0,0]},uKeyDir:{value:new Float32Array([-.48,.78,.4])},uSeatRadius:{value:qe},uSeatScale:{value:1},uMinPixels:{value:Le},uPixelToWorld:{value:.002},uSeatFade:{value:0},uSeatDetail:{value:0},uFocusFloor:{value:-1},uFocusSection:{value:-1},uFadeColor:{value:new Float32Array([.32,.37,.43])},uChairFull:{value:Qe},uChairNone:{value:Ve}}})}function Bo(t,e=.78){return new Te(t,{vertex:oi,fragment:ri,transparent:!1,depthTest:!0,depthWrite:!0,cullFace:!1,uniforms:{uSeeThrough:{value:[0,0,0,0]},uKeyDir:{value:new Float32Array([-.48,.78,.4])},uFadeColor:{value:new Float32Array([.32,.37,.43])},uChairFull:{value:Qe},uChairNone:{value:Ve},uBackRake:{value:Xe},uBackBase:{value:Ee},uFocusFloor:{value:-1},uFocusSection:{value:-1},uRoughness:{value:e}}})}function Wo(t,e,n,r){return new Te(t,{vertex:ai,fragment:ii,depthTest:!1,depthWrite:!1,cullFace:!1,uniforms:{uTop:{value:new Float32Array(e)},uBottom:{value:new Float32Array(n)},uSky:{value:r?1:0},uZenith:{value:new Float32Array(r?.zenith??[0,0,0])},uHorizon:{value:new Float32Array(r?.horizon??[0,0,0])},uInvViewProj:{value:new Float32Array(16)}}})}import{Camera as hi,Mat4 as pi,Mesh as fi,Program as vi,RenderTarget as bi,Transform as gi}from"ogl";function Uo(t,e,n){let a=Math.max(3,n.radius*1.04),[o,i,s]=n.center,l=new hi(t,{left:-a,right:a,bottom:-a,top:a,near:.1,far:a*6});l.position.set(o-a*1.44,i+a*2.34,s+a*1.2),l.lookAt([o,i,s]);let c=new bi(t,{width:1024,height:1024,depthTexture:!0,minFilter:t.NEAREST,magFilter:t.NEAREST}),d=new vi(t,{cullFace:!1,vertex:`#version 300 es
863
895
  in vec3 position;
864
896
  in float materialIndex;
865
897
  uniform mat4 modelViewMatrix;
@@ -872,7 +904,7 @@ void main() {
872
904
  void main() {
873
905
  if (abs(vMaterial - 6.0) < 0.5) discard;
874
906
  fragColor = vec4(1.0);
875
- }`}),m=new ai,f=new ni(t,{geometry:e,program:d});f.frustumCulled=!1,f.setParent(m);let v=t.getParameter(t.COLOR_CLEAR_VALUE),c=t.isEnabled(t.DITHER);try{t.disable(t.DITHER),t.clearColor(1,1,1,1),t.renderer.render({scene:m,camera:l,target:u})}finally{c&&t.enable(t.DITHER),t.clearColor(v[0],v[1],v[2],v[3]),d.remove()}let g=new ti().multiply(l.projectionMatrix,l.viewMatrix);return{texture:u.depthTexture,matrix:g,dispose(){for(let x of u.textures)t.deleteTexture(x.texture);t.deleteTexture(u.depthTexture.texture),t.deleteFramebuffer(u.buffer),u.depthBuffer&&t.deleteRenderbuffer(u.depthBuffer)}}}var ii=.65,si=new Set(["dimmed","sold"]),li=new Set(["dimmed","sold","held"]);function zo(t,e,n){let r=new Set,a=!1,o=be.indexOf("dimmed"),i=!1;for(let l=0;l<n.length;l+=1)if(n[l]===o){i=!0;break}let s=i?li:si;for(let l of t){let u=e.get(l.sectionId);if(!u||!u.length){r.add(l.sectionId);continue}let d=!1;for(let m of u){let f=be[n[m]]??"available";if(!s.has(f)){d=!0;break}}d?r.add(l.sectionId):a=!0}return{lit:r,anyUnlit:a}}function Oo(t,e,n,r,a,o){let i=[];for(let s of t){let l=a===null||a.has(s.sectionId);if(r.get(s.sectionId)===l)continue;r.set(s.sectionId,l);let u=(s.start+s.count)*3;for(let d=s.start*3;d<u;d++)e[d]=l?n[d]:n[d]+(o[d%3]-n[d])*ii;i.push(s)}return i}var Ho=be.indexOf("selected");function di(t,e){return[0,1,2].map(n=>t[n]*.15+.75+e[n]*.1)}function Go(t,e,n,r,a,o){for(let i=n;i<n+r;i++){let s=o&&e[i]===0,l=o&&e[i]===Ho?di([o[i*3],o[i*3+1],o[i*3+2]],a[Ho]??a[0]):s?null:a[e[i]]??a[0];t[i*3]=l?l[0]:o[i*3],t[i*3+1]=l?l[1]:o[i*3+1],t[i*3+2]=l?l[2]:o[i*3+2]}}var mi=new Float32Array([-1,-1,3,-1,-1,3]);function Bo(t,e){let n=new No,r=new No,a=new Ze(t,{position:{size:2,data:mi}}),o=Vo(t,e.theme.background.top,e.theme.background.bottom,e.outdoor?e.theme.sky:null),i=new Je(t,{geometry:a,program:o});i.frustumCulled=!1,i.setParent(r);let s=new Ze(t,{position:{size:3,data:e.solids.position},normal:{size:3,data:e.solids.normal},color:{size:3,data:e.solids.color},floorIndex:{size:1,data:e.solids.floor},materialIndex:{size:1,data:e.solids.material}}),l=ko(t,s,e.renderBounds),u=_o(t,e.theme.materials.roughness,e.theme.structure.tierTop);u.uniforms.tVenueShadow={value:l.texture},u.uniforms.uShadowMatrix={value:l.matrix},e.room&&u.uniforms.uRoomCentre.value.set(e.room.centre);let d=new Je(t,{geometry:s,program:u});d.frustumCulled=!1,d.setParent(n);let m=Do(t),f=new Float32Array(e.seats.count*3),v=be.map(B=>e.theme.seatStates[B]),c=e.seats.iCategory.slice();for(let B=0;B<e.seats.count;B++){if(e.seats.iPhysicalSeat[B]<.5)continue;let Z=e.theme.materials.seat??In([c[B*3],c[B*3+1],c[B*3+2]]);c.set(Z,B*3)}Go(f,e.seats.iState,0,e.seats.count,v,c);let g=Kn(),x=new Uint8Array(e.seats.count),M=new Ze(t,{position:{size:3,data:g.position},normal:{size:3,data:g.normal},uv:{size:2,data:g.uv},index:{size:1,data:g.index},surface:{size:1,data:g.surface},iYaw:{size:1,data:e.seats.iYaw,instanced:1},iChairWidth:{size:1,data:e.seats.iChairWidth,instanced:1},iGlyph:{size:1,data:e.seats.iGlyph,instanced:1},iOffset:{size:3,data:e.seats.iPosition,instanced:1},iColor:{size:3,data:f,instanced:1},iMaxRadius:{size:1,data:e.seats.iMaxRadius,instanced:1},iHasChair:{size:1,data:x,type:t.UNSIGNED_BYTE,usage:t.DYNAMIC_DRAW,instanced:1},iPhysicalSeat:{size:1,data:e.seats.iPhysicalSeat,instanced:1},iRing:{size:3,data:e.seats.iRing,instanced:1},iFloor:{size:1,data:e.seats.iFloor,instanced:1},iSection:{size:1,data:e.seats.iSection,instanced:1}}),D=new Je(t,{geometry:M,program:m});D.frustumCulled=!1,e.seats.count>0&&D.setParent(n);let S=M.attributes.iColor,E=e.solids.color.slice(),F=e.theme.structure.ground,I=new Map(e.sectionSolidRanges.map(B=>[B.sectionId,!0])),h=Tn(),y=Lo(t,e.theme.materials.roughness),T=pt,A=new Float32Array(T*3),V=new Float32Array(T*3),L=new Float32Array(T),_=new Float32Array(T),N=new Float32Array(T),U=new Float32Array(T*3),z=new Float32Array(T),Y=new Float32Array(T),R=new Float32Array(T),w=new Float32Array(T),ee=new Float32Array(T),k=new Ze(t,{position:{size:3,data:h.position},normal:{size:3,data:h.normal},part:{size:1,data:h.part},index:{data:h.index},iOffset:{size:3,data:A,instanced:1},iColor:{size:3,data:V,instanced:1},iRadius:{size:1,data:L,instanced:1},iYaw:{size:1,data:_,instanced:1},iGlyph:{size:1,data:N,instanced:1},iRing:{size:3,data:U,instanced:1},iFloor:{size:1,data:z,instanced:1},iSection:{size:1,data:Y,instanced:1},iPhysicalSeat:{size:1,data:R,instanced:1},iSeed:{size:1,data:ee,instanced:1},iPickIndex:{size:1,data:w,instanced:1}}),P=new Je(t,{geometry:k,program:y});P.frustumCulled=!1;let H=0,te=!1,j=!1,se=null,le=null,K=null,de=new Int32Array(0),me=()=>{let B=e.seats;for(let Z=0;Z<H;Z++){let X=de[Z];ee[Z]=_n(B.iState[X],X),V[Z*3]=f[X*3],V[Z*3+1]=f[X*3+1],V[Z*3+2]=f[X*3+2]}k.attributes.iColor.needsUpdate=!0,k.attributes.iSeed.needsUpdate=!0},ne={main:n,background:r,backgroundProgram:o,seatProgram:m,solidProgram:u,chairProgram:y,seatGeometry:M,chairGeometry:k,solidGeometry:s,drawCalls:3,setNearSeats(B,Z){let X=Math.min(Z,T,B.length);if(Po(x,B,X),M.attributes.iHasChair.needsUpdate=!0,de=B,H=X,X===0){P.parent&&P.setParent(null),k.instancedCount=0,ne.drawCalls=3+(te?1:0);return}let q=e.seats;for(let $=0;$<X;$++){let oe=B[$];A[$*3]=q.iPosition[oe*3],A[$*3+1]=q.iPosition[oe*3+1],A[$*3+2]=q.iPosition[oe*3+2],L[$]=q.iChairWidth[oe],_[$]=q.iYaw[oe],N[$]=q.iGlyph[oe],U[$*3]=q.iRing[oe*3],U[$*3+1]=q.iRing[oe*3+1],U[$*3+2]=q.iRing[oe*3+2],z[$]=q.iFloor[oe],Y[$]=q.iSection[oe],R[$]=q.iPhysicalSeat[oe],w[$]=oe+1}me(),k.attributes.iOffset.needsUpdate=!0,k.attributes.iRadius.needsUpdate=!0,k.attributes.iYaw.needsUpdate=!0,k.attributes.iGlyph.needsUpdate=!0,k.attributes.iRing.needsUpdate=!0,k.attributes.iFloor.needsUpdate=!0,k.attributes.iSection.needsUpdate=!0,k.attributes.iPhysicalSeat.needsUpdate=!0,k.attributes.iSeed.needsUpdate=!0,k.attributes.iPickIndex.needsUpdate=!0,k.instancedCount=X,P.parent||P.setParent(n),ne.drawCalls=4+(te?1:0)},nearSeatCount(){return H},setSectionShellLit(B){u.uniforms.uSectionFilter.value=B===null?0:1;let Z=Oo(e.sectionSolidRanges,e.solids.color,E,I,B,F);if(!Z.length)return;let X=s.attributes.color,q=X.buffer;if(!q){X.needsUpdate=!0;return}t.bindBuffer(t.ARRAY_BUFFER,q);for(let $ of Z){let oe=e.solids.color.subarray($.start*3,($.start+$.count)*3);t.bufferSubData(t.ARRAY_BUFFER,$.start*3*Float32Array.BYTES_PER_ELEMENT,oe)}},uploadSeatStateRuns(B){if(!B.length)return;H&&me();for(let X of B)Go(f,e.seats.iState,X.start,X.length,v,c);let Z=S.buffer;if(!Z){S.needsUpdate=!0;return}t.bindBuffer(t.ARRAY_BUFFER,Z);for(let X of B){let q=f.subarray(X.start*3,(X.start+X.length)*3);t.bufferSubData(t.ARRAY_BUFFER,X.start*3*Float32Array.BYTES_PER_ELEMENT,q)}},dispose(){j=!0,l.dispose(),a.remove(),o.remove(),s.remove(),u.remove(),M.remove(),m.remove(),k.remove(),y.remove(),se?.remove(),le?.remove(),K?.texture&&t.deleteTexture(K.texture)}},ve=e.productionElements.find(B=>B.contentImageUrl&&B.contentPlane);if(ve?.contentImageUrl&&ve.contentPlane?.length===4&&typeof Image<"u"){let B=new Image;B.crossOrigin="anonymous",B.onload=()=>{if(j)return;let Z=ve.contentPlane;se=new Ze(t,{position:{size:3,data:new Float32Array(Z.flat())},uv:{size:2,data:new Float32Array([0,1,1,1,0,0,1,0])},floorIndex:{size:1,data:new Float32Array(4).fill(ve.floorIndex)},index:{data:new Uint16Array([0,1,2,2,1,3])}}),K=new ui(t,{image:B,generateMipmaps:!0,wrapS:t.CLAMP_TO_EDGE,wrapT:t.CLAMP_TO_EDGE,flipY:!1}),le=new ci(t,{vertex:`#version 300 es
907
+ }`}),h=new gi,p=new fi(t,{geometry:e,program:d});p.frustumCulled=!1,p.setParent(h);let f=t.getParameter(t.COLOR_CLEAR_VALUE),u=t.isEnabled(t.DITHER);try{t.disable(t.DITHER),t.clearColor(1,1,1,1),t.renderer.render({scene:h,camera:l,target:c})}finally{u&&t.enable(t.DITHER),t.clearColor(f[0],f[1],f[2],f[3]),d.remove()}let y=new pi().multiply(l.projectionMatrix,l.viewMatrix);return{texture:c.depthTexture,matrix:y,dispose(){for(let v of c.textures)t.deleteTexture(v.texture);t.deleteTexture(c.depthTexture.texture),t.deleteFramebuffer(c.buffer),c.depthBuffer&&t.deleteRenderbuffer(c.depthBuffer)}}}var yi=.65,xi=new Set(["dimmed","sold"]),Si=new Set(["dimmed","sold","held"]);function Yo(t,e,n){let r=new Set,a=!1,o=ye.indexOf("dimmed"),i=!1;for(let l=0;l<n.length;l+=1)if(n[l]===o){i=!0;break}let s=i?Si:xi;for(let l of t){let c=e.get(l.sectionId);if(!c||!c.length){r.add(l.sectionId);continue}let d=!1;for(let h of c){let p=ye[n[h]]??"available";if(!s.has(p)){d=!0;break}}d?r.add(l.sectionId):a=!0}return{lit:r,anyUnlit:a}}function Xo(t,e,n,r,a,o){let i=[];for(let s of t){let l=a===null||a.has(s.sectionId);if(r.get(s.sectionId)===l)continue;r.set(s.sectionId,l);let c=(s.start+s.count)*3;for(let d=s.start*3;d<c;d++)e[d]=l?n[d]:n[d]+(o[d%3]-n[d])*yi;i.push(s)}return i}var jo=ye.indexOf("selected");function Pi(t,e){return[0,1,2].map(n=>t[n]*.15+.75+e[n]*.1)}function Ko(t,e,n,r,a,o){for(let i=n;i<n+r;i++){let s=o&&e[i]===0,l=o&&e[i]===jo?Pi([o[i*3],o[i*3+1],o[i*3+2]],a[jo]??a[0]):s?null:a[e[i]]??a[0];t[i*3]=l?l[0]:o[i*3],t[i*3+1]=l?l[1]:o[i*3+1],t[i*3+2]=l?l[2]:o[i*3+2]}}var Ai=new Float32Array([-1,-1,3,-1,-1,3]);function $o(t,e){let n=new qo,r=new qo,a=new nt(t,{position:{size:2,data:Ai}}),o=Wo(t,e.theme.background.top,e.theme.background.bottom,e.outdoor?e.theme.sky:null),i=new ot(t,{geometry:a,program:o});i.frustumCulled=!1,i.setParent(r);let s=new nt(t,{position:{size:3,data:e.solids.position},normal:{size:3,data:e.solids.normal},color:{size:3,data:e.solids.color},floorIndex:{size:1,data:e.solids.floor},materialIndex:{size:1,data:e.solids.material}}),l=Uo(t,s,e.renderBounds),c=Ho(t,e.theme.materials.roughness,e.theme.structure.tierTop);c.uniforms.tVenueShadow={value:l.texture},c.uniforms.uShadowMatrix={value:l.matrix},e.room&&c.uniforms.uRoomCentre.value.set(e.room.centre);let d=new ot(t,{geometry:s,program:c});d.frustumCulled=!1,d.setParent(n);let h=Go(t),p=new Float32Array(e.seats.count*3),f=ye.map(z=>e.theme.seatStates[z]),u=e.seats.iCategory.slice();for(let z=0;z<e.seats.count;z++){if(e.seats.iPhysicalSeat[z]<.5)continue;let J=e.theme.materials.seat??Hn([u[z*3],u[z*3+1],u[z*3+2]]);u.set(J,z*3)}Ko(p,e.seats.iState,0,e.seats.count,f,u);let y=oo(),v=new Uint8Array(e.seats.count),M=new nt(t,{position:{size:3,data:y.position},normal:{size:3,data:y.normal},uv:{size:2,data:y.uv},index:{size:1,data:y.index},surface:{size:1,data:y.surface},iYaw:{size:1,data:e.seats.iYaw,instanced:1},iChairWidth:{size:1,data:e.seats.iChairWidth,instanced:1},iGlyph:{size:1,data:e.seats.iGlyph,instanced:1},iOffset:{size:3,data:e.seats.iPosition,instanced:1},iColor:{size:3,data:p,instanced:1},iMaxRadius:{size:1,data:e.seats.iMaxRadius,instanced:1},iHasChair:{size:1,data:v,type:t.UNSIGNED_BYTE,usage:t.DYNAMIC_DRAW,instanced:1},iPhysicalSeat:{size:1,data:e.seats.iPhysicalSeat,instanced:1},iRing:{size:3,data:e.seats.iRing,instanced:1},iFloor:{size:1,data:e.seats.iFloor,instanced:1},iSection:{size:1,data:e.seats.iSection,instanced:1}}),I=new ot(t,{geometry:M,program:h});I.frustumCulled=!1,e.seats.count>0&&I.setParent(n);let S=M.attributes.iColor,T=e.solids.color.slice(),F=e.theme.structure.ground,D=new Map(e.sectionSolidRanges.map(z=>[z.sectionId,!0])),L=zn(),g=Bo(t,e.theme.materials.roughness),A=bt,w=new Float32Array(A*3),_=new Float32Array(A*3),O=new Float32Array(A),C=new Float32Array(A),V=new Float32Array(A),N=new Float32Array(A*3),W=new Float32Array(A),G=new Float32Array(A),Y=new Float32Array(A),te=new Float32Array(A),E=new Float32Array(A),x=new nt(t,{position:{size:3,data:L.position},normal:{size:3,data:L.normal},part:{size:1,data:L.part},index:{data:L.index},iOffset:{size:3,data:w,instanced:1},iColor:{size:3,data:_,instanced:1},iRadius:{size:1,data:O,instanced:1},iYaw:{size:1,data:C,instanced:1},iGlyph:{size:1,data:V,instanced:1},iRing:{size:3,data:N,instanced:1},iFloor:{size:1,data:W,instanced:1},iSection:{size:1,data:G,instanced:1},iPhysicalSeat:{size:1,data:Y,instanced:1},iSeed:{size:1,data:E,instanced:1},iPickIndex:{size:1,data:te,instanced:1}}),P=new ot(t,{geometry:x,program:g});P.frustumCulled=!1;let B=0,j=!1,X=!1,ne=null,re=null,ue=null,de=new Int32Array(0),K=()=>{let z=e.seats;for(let J=0;J<B;J++){let q=de[J];E[J]=Gn(z.iState[q],q),_[J*3]=p[q*3],_[J*3+1]=p[q*3+1],_[J*3+2]=p[q*3+2]}x.attributes.iColor.needsUpdate=!0,x.attributes.iSeed.needsUpdate=!0},me={main:n,background:r,backgroundProgram:o,seatProgram:h,solidProgram:c,chairProgram:g,seatGeometry:M,chairGeometry:x,solidGeometry:s,drawCalls:3,setNearSeats(z,J){let q=Math.min(J,A,z.length);if(Do(v,z,q),M.attributes.iHasChair.needsUpdate=!0,de=z,B=q,q===0){P.parent&&P.setParent(null),x.instancedCount=0,me.drawCalls=3+(j?1:0);return}let oe=e.seats;for(let $=0;$<q;$++){let ee=z[$];w[$*3]=oe.iPosition[ee*3],w[$*3+1]=oe.iPosition[ee*3+1],w[$*3+2]=oe.iPosition[ee*3+2],O[$]=oe.iChairWidth[ee],C[$]=oe.iYaw[ee],V[$]=oe.iGlyph[ee],N[$*3]=oe.iRing[ee*3],N[$*3+1]=oe.iRing[ee*3+1],N[$*3+2]=oe.iRing[ee*3+2],W[$]=oe.iFloor[ee],G[$]=oe.iSection[ee],Y[$]=oe.iPhysicalSeat[ee],te[$]=ee+1}K(),x.attributes.iOffset.needsUpdate=!0,x.attributes.iRadius.needsUpdate=!0,x.attributes.iYaw.needsUpdate=!0,x.attributes.iGlyph.needsUpdate=!0,x.attributes.iRing.needsUpdate=!0,x.attributes.iFloor.needsUpdate=!0,x.attributes.iSection.needsUpdate=!0,x.attributes.iPhysicalSeat.needsUpdate=!0,x.attributes.iSeed.needsUpdate=!0,x.attributes.iPickIndex.needsUpdate=!0,x.instancedCount=q,P.parent||P.setParent(n),me.drawCalls=4+(j?1:0)},nearSeatCount(){return B},setSectionShellLit(z){c.uniforms.uSectionFilter.value=z===null?0:1;let J=Xo(e.sectionSolidRanges,e.solids.color,T,D,z,F);if(!J.length)return;let q=s.attributes.color,oe=q.buffer;if(!oe){q.needsUpdate=!0;return}t.bindBuffer(t.ARRAY_BUFFER,oe);for(let $ of J){let ee=e.solids.color.subarray($.start*3,($.start+$.count)*3);t.bufferSubData(t.ARRAY_BUFFER,$.start*3*Float32Array.BYTES_PER_ELEMENT,ee)}},uploadSeatStateRuns(z){if(!z.length)return;B&&K();for(let q of z)Ko(p,e.seats.iState,q.start,q.length,f,u);let J=S.buffer;if(!J){S.needsUpdate=!0;return}t.bindBuffer(t.ARRAY_BUFFER,J);for(let q of z){let oe=p.subarray(q.start*3,(q.start+q.length)*3);t.bufferSubData(t.ARRAY_BUFFER,q.start*3*Float32Array.BYTES_PER_ELEMENT,oe)}},dispose(){X=!0,l.dispose(),a.remove(),o.remove(),s.remove(),c.remove(),M.remove(),h.remove(),x.remove(),g.remove(),ne?.remove(),re?.remove(),ue?.texture&&t.deleteTexture(ue.texture)}},he=e.productionElements.find(z=>z.contentImageUrl&&z.contentPlane);if(he?.contentImageUrl&&he.contentPlane?.length===4&&typeof Image<"u"){let z=new Image;z.crossOrigin="anonymous",z.onload=()=>{if(X)return;let J=he.contentPlane;ne=new nt(t,{position:{size:3,data:new Float32Array(J.flat())},uv:{size:2,data:new Float32Array([0,1,1,1,0,0,1,0])},floorIndex:{size:1,data:new Float32Array(4).fill(he.floorIndex)},index:{data:new Uint16Array([0,1,2,2,1,3])}}),ue=new Mi(t,{image:z,generateMipmaps:!0,wrapS:t.CLAMP_TO_EDGE,wrapT:t.CLAMP_TO_EDGE,flipY:!1}),re=new wi(t,{vertex:`#version 300 es
876
908
  precision highp float;
877
909
  in vec3 position; in vec2 uv; in float floorIndex;
878
910
  uniform mat4 modelViewMatrix; uniform mat4 projectionMatrix; uniform float uFocusFloor;
@@ -880,4 +912,4 @@ void main() {
880
912
  void main(){ vUv=uv; vDim=(uFocusFloor < -0.5 || abs(floorIndex-uFocusFloor)<0.5)?0.0:1.0; gl_Position=projectionMatrix*modelViewMatrix*vec4(position,1.0); }`,fragment:`#version 300 es
881
913
  precision highp float;
882
914
  in vec2 vUv; in float vDim; uniform sampler2D uImage; out vec4 fragColor;
883
- void main(){ if(vDim>0.5) discard; vec4 c=texture(uImage,vUv); if(c.a<0.01) discard; fragColor=c; }`,uniforms:{uImage:{value:K},uFocusFloor:{value:-1}},transparent:!1,depthTest:!0,depthWrite:!0,cullFace:!1});let X=new Je(t,{geometry:se,program:le});X.frustumCulled=!1,X.setParent(n),ne.screenProgram=le,te=!0,ne.drawCalls=3+(H?1:0)+1},B.src=ve.contentImageUrl}return ne}import{Mesh as Qt,RenderTarget as pi,Transform as Zt}from"ogl";function hi(t,e,n){let r=t+(e<<8)+(n<<16);return r===0?-1:r-1}function Wo(t,e,n,r,a,o){let i=-1,s=1/0;for(let l=0;l<n;l++)for(let u=0;u<e;u++){let d=(l*e+u)*4,m=hi(t[d],t[d+1],t[d+2]);if(m<0||m>=o)continue;let f=u-r,v=l-a,c=f*f+v*v;c<s&&(s=c,i=m)}return i}function Uo(t,e,n,r,a,o){let i=t-n.left,s=e-n.top,l=Math.round(i*r),u=Math.round((n.height-s)*r);return{x:Math.max(0,Math.min(a-1,l)),y:Math.max(0,Math.min(o-1,u))}}var fi=["uSeatRadius","uSeatScale","uMinPixels","uPixelToWorld"],bt=class{constructor(e,n,r,a,o){this.seatScene=new Zt;this.chairScene=new Zt;this.solidScene=new Zt;this.target=null;this.restoreClear=[0,0,0];this.renderer=e,this.gl=e.gl,this.maxIndex=o,this.seatProg=To(this.gl),this.chairProg=Fo(this.gl),this.depthProg=Io(this.gl);let i=new Qt(this.gl,{geometry:n,program:this.seatProg});i.frustumCulled=!1,i.setParent(this.seatScene);let s=new Qt(this.gl,{geometry:r,program:this.chairProg});s.frustumCulled=!1,s.setParent(this.chairScene);let l=new Qt(this.gl,{geometry:a,program:this.depthProg});l.frustumCulled=!1,l.setParent(this.solidScene)}setRoomCentre(e){this.depthProg.uniforms.uRoomCentre.value.set(e??[0,0])}setRestoreClear(e){this.restoreClear=[e[0],e[1],e[2]]}syncFromSeatProgram(e){for(let r of fi)this.seatProg.uniforms[r].value=e.uniforms[r].value;let n=e.uniforms.uFocusFloor.value;this.seatProg.uniforms.uFocusFloor.value=n,this.chairProg.uniforms.uFocusFloor.value=n,this.depthProg.uniforms.uFocusFloor.value=n}ensureTarget(){let e=this.gl.drawingBufferWidth,n=this.gl.drawingBufferHeight;return this.target&&(this.target.width!==e||this.target.height!==n)&&this.destroyTarget(),this.target||(this.target=new pi(this.gl,{width:e,height:n,depth:!0})),this.target}destroyTarget(){if(!this.target)return;let e=this.gl;this.target.buffer&&e.deleteFramebuffer(this.target.buffer);for(let n of this.target.textures??[])n.texture&&e.deleteTexture(n.texture);this.target.depthBuffer&&e.deleteRenderbuffer(this.target.depthBuffer),this.target=null}pick(e,n,r,a){let o=this.gl,i=this.ensureTarget(),s=o.drawingBufferWidth,l=o.drawingBufferHeight,u=Math.max(0,n-a),d=Math.max(0,r-a),m=Math.max(1,Math.min(s,n+a+1)-u),f=Math.max(1,Math.min(l,r+a+1)-d);o.enable(o.SCISSOR_TEST),o.scissor(u,d,m,f);let[v,c,g]=this.restoreClear;o.clearColor(0,0,0,1),this.renderer.render({scene:this.solidScene,camera:e,target:i,clear:!0}),this.renderer.render({scene:this.seatScene,camera:e,target:i,clear:!1}),this.renderer.render({scene:this.chairScene,camera:e,target:i,clear:!1}),o.clearColor(v,c,g,1),o.disable(o.SCISSOR_TEST);let x=new Uint8Array(m*f*4);return this.renderer.bindFramebuffer(i),o.readPixels(u,d,m,f,o.RGBA,o.UNSIGNED_BYTE,x),this.renderer.bindFramebuffer(),Wo(x,m,f,n-u,r-d,this.maxIndex)}dispose(){this.destroyTarget(),this.seatProg.remove(),this.chairProg.remove(),this.depthProg.remove()}};function Yo(t,e){let n=[];for(let r of e)t.has(r.seatId)?t.set(r.seatId,Fn(r.state)):n.push(r);return n}function Xo(t,e,n){let r=new Set;for(let i of e)(t.has(i)||n(i)!==void 0)&&r.add(i);let a=new Map(t),o=[];for(let[i,s]of t)r.has(i)||(o.push({seatId:i,state:be[s]??"available"}),a.delete(i));for(let i of r){if(a.has(i))continue;let s=n(i);s!==void 0&&(a.set(i,s),o.push({seatId:i,state:"selected"}))}return{updates:o,next:a}}import{Quat as et,Vec3 as gi}from"ogl";function vi(t,e){return[t[0]-e[0],t[1]-e[1],t[2]-e[2]]}function qo(t,e){return[t[0]+e[0],t[1]+e[1],t[2]+e[2]]}function bi(t,e){return[t[0]*e,t[1]*e,t[2]*e]}function jo(t){let e=Math.hypot(t[0],t[1],t[2]);return e>1e-6?[t[0]/e,t[1]/e,t[2]/e]:[0,0,0]}function Jt(t){let e=Math.max(0,Math.min(1,t));return e*e*e*(e*(e*6-15)+10)}function en(t,e){return Math.max(0,Math.min(1,t+e))}function Ko(t,e){let n=t.length;if(n===0)return[0,0,0];if(n===1)return[...t[0]];let r=Math.max(0,Math.min(1,e)),a=n-1,o=Math.floor(r*a);o>=a&&(o=a-1);let i=r*a-o,s=t[Math.max(0,o-1)],l=t[o],u=t[o+1],d=t[Math.min(n-1,o+2)],m=i*i,f=m*i,v=[0,0,0];for(let c=0;c<3;c++)v[c]=.5*(2*l[c]+(-s[c]+u[c])*i+(2*s[c]-5*l[c]+4*u[c]-d[c])*m+(-s[c]+3*l[c]-3*u[c]+d[c])*f);return v}function tn(t,e,n,r,a){let o=jo(vi(e,n));o[0]===0&&o[1]===0&&o[2]===0&&(o=[0,0,1]);let i=qo(qo(e,bi(o,2.5)),[0,1.5,0]),s=[e[0]-r[0],0,e[2]-r[2]],l=jo(s);l[0]===0&&l[2]===0&&(l=[o[0],0,o[2]]);let u=Math.max(1,a),d=[r[0]+l[0]*u*1.3,r[1]+u*.75,r[2]+l[2]*u*1.3];return{waypoints:[t,d,i],finalPos:i}}function nn(t,e,n=35,r=28){let a=Jt(e),o=Ko(t,a),i=Jt(Math.max(0,Math.min(1,(e-.66)/.34)));return{pos:o,fov:n+(r-n)*i,eased:a}}function Jo(t,e,n){let r=t.position.clone(),a=new et().copy(t.quaternion);t.position.set(e[0],e[1],e[2]),t.lookAt(new gi(n[0],n[1],n[2]));let o=new et().copy(t.quaternion);return t.position.copy(r),t.quaternion.copy(a),o}var gt=class{constructor(e){this.active=!1;this.waypoints=[];this.startQuat=new et;this.endQuat=new et;this.outQuat=new et;this.startTime=0;this.duration=2500;this.endFov=28;this.resolveFn=null;this.camera=e}start(e,n,r,a=2500,o=28){return this.settle(),this.waypoints=e,this.startQuat.copy(n),this.endQuat.copy(r),this.duration=a,this.endFov=o,this.startTime=performance.now(),this.active=!0,new Promise(i=>{this.resolveFn=i})}update(e){if(!this.active)return!1;let n=Math.min(1,(e-this.startTime)/this.duration),{pos:r,fov:a,eased:o}=nn(this.waypoints,n,35,this.endFov);return this.camera.position.set(r[0],r[1],r[2]),this.outQuat.copy(this.startQuat).slerp(this.endQuat,en(o,.15)),this.camera.quaternion.copy(this.outQuat),this.camera.fov=a,this.camera.updateProjectionMatrix(),n>=1?(this.settle(),!1):!0}cancel(){this.settle()}settle(){this.active=!1;let e=this.resolveFn;this.resolveFn=null,e&&e()}};var er=Rn,yi=.12,xi=.25,Si=1.5;function tr(t,e,n=0,r,a){let o=[e.x*Fe,n+Si,e.y*Fe],i=a?[a[0],a[1],a[2]]:o,s=t[1],l=Number.isFinite(s)?s+er:Number.isFinite(r)?n+r:n+er,u=o[0]-t[0],d=o[2]-t[2],m=Math.hypot(u,d),f=m>.001?Math.min(yi,m*xi):0,v=m>.001?u/m:0,c=m>.001?d/m:0;return{eye:[t[0]+v*f,l,t[2]+c*f],focal:i}}var Se=Math.PI/180,wi=45,on=80,yt=70,Mi=1,Pi=.99;function Ai(t,e){if(!(t<Mi))return on;if(!(Number.isFinite(e)&&e>0))return yt;let n=2*Math.atan(e/(2*xt*Pi)/Math.max(.05,t))/Se;return Math.max(yt,Math.min(on,n))}var Ci=.25,xt=1,Ei=.25,Ri=12*Se,Ti=.2,Fi=1.5,nr=.8,or=6,cr=1.9,Ii=2/3,_i=.12,Di=.9,Li=1.2,Vi=2,ur=.05,ki=6;function dr(t,e,n=0){if(!t.length)return{min:[e[0]-6,n,e[2]-6],max:[e[0]+6,Math.max(n+nr,e[1]),e[2]+6]};let r=1/0,a=-1/0,o=1/0,i=-1/0,s=n;for(let c of t)r=Math.min(r,c.cx-c.halfX),a=Math.max(a,c.cx+c.halfX),o=Math.min(o,c.cz-c.halfZ),i=Math.max(i,c.cz+c.halfZ),s=Math.max(s,c.y);let l=a-r,u=i-o,d=Math.max(l,Math.min(u,or))/2,m=Math.max(u,Math.min(l,or))/2,f=(r+a)/2,v=(o+i)/2;return{min:[f-d,n,v-m],max:[f+d,Math.max(n+nr,s),v+m]}}function zi(t){return{min:[t.min[0],t.min[1],t.min[2]],max:[t.max[0],t.max[1]+cr,t.max[2]]}}function rn(t){let e=t.max[1];return[(t.min[0]+t.max[0])/2,Math.max(t.min[1]+Fi,e+Ti,e+cr*Ii),(t.min[2]+t.max[2])/2]}function mr(t,e){let n=t[0]-e[0],r=t[2]-e[2],a=Math.hypot(n,r);return a<.001?{x:0,z:1}:{x:n/a,z:r/a}}function rr(t,e,n){let r=e[0]-t[0],a=e[1]-t[1],o=e[2]-t[2],i=Math.hypot(r,a,o)||1;r/=i,a/=i,o/=i;let s=-o,l=r,u=Math.hypot(s,l);if(u<1e-6)return 1/0;s/=u,l/=u;let d=1/0,m=-1/0;for(let f=0;f<8;f++){let v=(f&1?n.max[0]:n.min[0])-t[0],c=(f&2?n.max[1]:n.min[1])-t[1],g=(f&4?n.max[2]:n.min[2])-t[2],x=Math.max(ur,v*r+c*a+g*o),M=(v*s+g*l)/x;M<d&&(d=M),M>m&&(m=M)}return m-d}function ar(t,e,n){let r=e[0]-t[0],a=e[1]-t[1],o=e[2]-t[2],i=Math.hypot(r,a,o)||1;r/=i,a/=i,o/=i;let s=-o,l=r,u=Math.hypot(s,l);if(u<1e-6)return 1/0;s/=u,l/=u;let d=-l*a,m=l*r-s*o,f=s*a,v=1/0,c=-1/0;for(let g=0;g<8;g++){let x=(g&1?n.max[0]:n.min[0])-t[0],M=(g&2?n.max[1]:n.min[1])-t[1],D=(g&4?n.max[2]:n.min[2])-t[2],S=Math.max(ur,x*r+M*a+D*o),E=(x*d+M*m+D*f)/S;E<v&&(v=E),E>c&&(c=E)}return c-v}function St(t,e){return Math.tan(t*Se/2)*Math.max(.05,e)}function ir(t,e,n){let r=Ai(n,t),a=l=>Math.max(wi,Math.min(r,l)),o=l=>2*Math.atan(l)/Se,i=Number.isFinite(t)&&t>0?a(o(t/(2*Ci)/Math.max(.05,n))):r;if(!(Number.isFinite(e)&&e>0))return i;let s=Math.min(i,a(o(e/(2*_i))));return t/(2*St(s,n))>xt?i:s}function hr(t,e,n,r={}){let a=rn(e),o=[t[0],t[1],t[2]],i=0,s=0,l=c=>{if(!(c>0))return;let g=mr(o,a);o[0]+=g.x*c,o[2]+=g.z*c,s+=c},u=r.preserveEye?0:e.max[1]+Ei-o[1];u>0&&(o[1]+=u,i=u,l(u/Math.tan(Ri)));let d=zi(e),m=rr(o,a,e),f=ir(m,ar(o,a,d),n),v=m/(2*St(f,n));for(let c=0;!r.preserveEye&&c<ki&&v>xt;c++){let g=Math.max(1,Math.hypot(o[0]-a[0],o[2]-a[2])),x=Number.isFinite(v)?v/xt:2;l(Math.min(60,g*(Math.min(4,x)-1)+.5)),m=rr(o,a,e),f=ir(m,ar(o,a,d),n),v=m/(2*St(f,n))}return{eye:o,focal:a,fov:f,raisedM:i,pulledBackM:s,stageFrameWidth:v}}function Oi(t,e,n){let r=Math.tan(e*Se/2),a=St(e,n);return Math.max(1,t/Math.max(.05,Math.min(r,a)))}var Ni=.7,sr=.5,Hi=.8;function lr(t,e,n){let r=[e[0]-t[0],e[1]-t[1],e[2]-t[2]],a=[n[0]-t[0],n[1]-t[1],n[2]-t[2]],o=r[0]*a[0]+r[1]*a[1]+r[2]*a[2],i=Math.hypot(r[0],r[1],r[2])*Math.hypot(a[0],a[1],a[2])||1;return Math.acos(Math.max(-1,Math.min(1,o/i)))/Se}function Gi(t,e,n){let r=u=>{let d=Math.hypot(u[0],u[1],u[2])||1;return[u[0]/d,u[1]/d,u[2]/d]},a=[e[0]-t[0],e[1]-t[1],e[2]-t[2]],o=Math.hypot(a[0],a[1],a[2]),i=r(a),s=r([n[0]-t[0],n[1]-t[1],n[2]-t[2]]),l=r([0,1,2].map(u=>i[u]*(1-sr)+s[u]*sr));return[t[0]+l[0]*o,t[1]+l[1]*o,t[2]+l[2]*o]}function pr(t,e){let{aspect:n,venue:r}=e,a=t.focal,o=mr(t.eye,a),i=g=>(g[0]-a[0])*o.x+(g[2]-a[2])*o.z,s=[{name:"seat",eye:t.eye,focal:a,fov:t.fov}],l=Vi*(e.rowDepthM??Di),u=[t.eye[0]+o.x*l,t.eye[1]+Li,t.eye[2]+o.z*l],d=[t.eye[0],t.eye[1]-Ni,t.eye[2]],m=Gi(u,a,d);s.push({name:"row",eye:u,focal:m,fov:Math.min(on,Math.max(t.fov,2*Math.max(lr(u,m,d),lr(u,m,a))/Hi))});let f=(g,x,M,D)=>{let S=Oi(M,t.fov,n)*1.08,E=S*Math.sin(D*Se),F=Number.isFinite(e.seatingTopY)?e.seatingTopY+2:-1/0,I=Math.max(E,F-x[1]),h=S*Math.cos(D*Se);return{name:g,eye:[x[0]+o.x*h,x[1]+I,x[2]+o.z*h],focal:x,fov:t.fov}};e.section&&e.section.radius>0&&s.push(f("section",e.section.center,e.section.radius,35)),s.push(f("venue",r.center,Math.max(1,r.radius),40));let v=[],c=-1/0;for(let g of s){let x=i(g.eye);v.length&&x<=c+.5||(v.push(g),c=x)}return v}import{Vec3 as Bi}from"ogl";var nt=Math.PI/180,an=320,fr=70*nt,Wi=32*nt,Ui=24*nt,vr=.0026,Yi=.22,Xi=.006,qi=180,ji=900,Ki=1100,$i=4,fe=(t,e,n)=>Math.max(e,Math.min(n,t)),br=t=>t<.5?4*t*t*t:1-Math.pow(-2*t+2,3)/2;function gr(t){let{canvas:e,camera:n}=t,r=[],a=!1,o=0,i=0,s=0,l=0,u=0,d=0,m=an,f=null,v=()=>{f&&(clearTimeout(f),f=null)},c=!1,g=[0,0],x=0,M=!1,D=null,S=null,E=new Map,F=!1,I=0,h=0,y=0,T=0,A=()=>a&&r.length?r[fe(Math.round(o),0,r.length-1)].name:null,V=()=>{let P=A();P!==D&&(D=P,t.onStopChange?.(P))},L=()=>{if(!a||!r.length)return;let P=r[fe(Math.floor(o),0,r.length-1)],H=r[fe(Math.ceil(o),0,r.length-1)],te=fe(o-Math.floor(o),0,1),j=($,oe)=>$+(oe-$)*te,se=[j(P.eye[0],H.eye[0]),j(P.eye[1],H.eye[1]),j(P.eye[2],H.eye[2])],le=[j(P.focal[0],H.focal[0]),j(P.focal[1],H.focal[1]),j(P.focal[2],H.focal[2])],K=le[0]-se[0],de=le[1]-se[1],me=le[2]-se[2],ne=Math.hypot(K,de,me)||1,ve=Math.atan2(K,me),B=Math.asin(fe(de/ne,-1,1)),Z=ve+i,X=fe(B+s,-80*nt,80*nt),q=Math.cos(X)*ne;K=Math.sin(Z)*q,de=Math.sin(X)*ne,me=Math.cos(Z)*q,n.position.set(se[0],se[1],se[2]),n.fov=j(P.fov,H.fov),n.updateProjectionMatrix(),n.lookAt(new Bi(se[0]+K,se[1]+de,se[2]+me)),t.onApplied?.()},_=()=>{if(!a||!r.length)return;let P=fe(Math.round(o),0,r.length-1);if(t.reducedMotion()){c=!1,o=P,L(),V(),t.requestRender();return}if(Math.abs(P-o)<.001){c=!1,V();return}l=o,u=P,d=performance.now(),m=an,c=!0,t.requestRender()},N=P=>{!a||r.length<2||(v(),c=!1,o=fe(o+P,0,r.length-1),L(),V(),t.requestRender())},U=(P,H)=>{a&&(v(),c=!1,M=!1,i=fe(i-P*vr,-fr,fr),s=fe(s-H*vr,-Ui,Wi),L(),t.requestRender())},z=P=>{a&&(E.set(P.pointerId,{x:P.clientX,y:P.clientY}),E.size===1?(F=!0,T=0,I=P.clientX,h=P.clientY):E.size===2&&(F=!1,y=Y()))},Y=()=>{let P=[...E.values()];return P.length<2?0:Math.hypot(P[0].x-P[1].x,P[0].y-P[1].y)},R=P=>{if(!a||!E.has(P.pointerId))return;if(E.set(P.pointerId,{x:P.clientX,y:P.clientY}),E.size>=2){let j=Y();y>0&&N((y-j)*Xi),y=j;return}if(!F)return;let H=P.clientX-I,te=P.clientY-h;I=P.clientX,h=P.clientY,T+=Math.abs(H)+Math.abs(te),!(T<=$i)&&U(H,te)},w=P=>{E.delete(P.pointerId)&&(E.size<2&&(y=0),E.size===0&&(F=!1,_()))},ee=P=>{if(!a)return;P.preventDefault();let H=P.deltaMode===1?16:P.deltaMode===2?100:1,te=fe(P.deltaY*H/100,-2,2);N(te*Yi),S&&clearTimeout(S),S=setTimeout(()=>{S=null,_()},qi)},k=()=>{v(),a&&(a=!1,c=!1,M=!1,r=[],E.clear(),F=!1,S&&(clearTimeout(S),S=null),D!==null&&(D=null,t.onStopChange?.(null)))};return e.addEventListener("pointerdown",z),e.addEventListener("pointermove",R),e.addEventListener("pointerup",w),e.addEventListener("pointercancel",w),e.addEventListener("wheel",ee,{passive:!1}),{get active(){return a},enter(P,H=0){if(P.length<2){k();return}v(),r=P,a=!0,o=t.reducedMotion()?0:fe(H,0,P.length-1),o>0&&(f=setTimeout(()=>{f=null,a&&(l=o,u=0,d=performance.now(),m=Ki,c=!0,t.requestRender())},ji)),i=0,s=0,c=!1,M=!1,D=null,L(),V(),t.requestRender()},exit:k,recentre(){return a?Math.abs(i)<1e-4&&Math.abs(s)<1e-4?!0:t.reducedMotion()?(M=!1,i=0,s=0,L(),t.requestRender(),!0):(g=[i,s],x=performance.now(),M=!0,t.requestRender(),!0):!1},update(P){if(!a)return!1;let H=!1;if(M){let te=fe((P-x)/an,0,1),j=1-br(te);i=g[0]*j,s=g[1]*j,te>=1?(M=!1,i=0,s=0):H=!0}if(c){let te=fe((P-d)/m,0,1);o=l+(u-l)*br(te),te>=1?(c=!1,o=u,V()):H=!0}return L(),H},currentStop:A,dispose(){k(),e.removeEventListener("pointerdown",z),e.removeEventListener("pointermove",R),e.removeEventListener("pointerup",w),e.removeEventListener("pointercancel",w),e.removeEventListener("wheel",ee)}}}function yr(t){return t.flying?"cinematic":t.panoramaMounted?"panorama":t.seatViewActive?"seatView":"orbit"}var sn=null;function xr(){return sn??=import("../openPanorama-VD6PE3YZ.js").catch(t=>{throw sn=null,t}),sn}var Sr=()=>typeof performance<"u"&&performance.now?performance.now():Date.now(),wt=class{constructor(e){this.orbitLatched=!1;this.panoramaOpenedAt=0;this.cb=e}emit(e,n){if(this.cb)try{this.cb(e,n)}catch{}}opened(e,n,r,a){this.emit("3d_opened",{seats:e,hasHeights:n,...r===void 0?{}:{buildMs:Math.round(r)},...a===void 0?{}:{prepSource:a}})}orbitEngaged(){this.orbitLatched||(this.orbitLatched=!0,this.emit("3d_orbit_engaged"))}seatPicked(e,n){this.emit("3d_seat_picked",{seatId:e,sectionId:n})}cinematicPlayed(e){this.emit("3d_cinematic_played",{durationMs:e,reducedMotion:!1})}cinematicSkipped(){this.emit("3d_cinematic_skipped",{reducedMotion:!0})}cinematicCancelled(){this.emit("3d_cinematic_cancelled")}panoramaOpened(){this.panoramaOpenedAt=Sr(),this.emit("3d_panorama_opened")}panoramaClosed(){let e=this.panoramaOpenedAt?Math.round(Sr()-this.panoramaOpenedAt):0;this.panoramaOpenedAt=0,this.emit("3d_panorama_closed",{viewMs:e})}panoramaFailed(e,n){this.emit("3d_panorama_failed",{seatId:e,phase:n})}panoramaFallback(e){this.emit("3d_panorama_fallback",{seatId:e})}contextLost(){this.emit("3d_context_lost")}contextRestored(){this.emit("3d_context_restored")}};function wr(t){let e=t.style.position;return getComputedStyle(t).position!=="static"?()=>{}:(t.style.position="relative",()=>{t.style.position==="relative"&&(t.style.position=e)})}function Mr(t){let{container:e,model:n,opts:r,expandedSeatById:a,seatIdsByRow:o,isNarrow:i}=t,s=null,l=()=>{if(!s)return;let m=i();Object.assign(s.style,m?{left:"12px",right:"12px",bottom:"70px",transform:"none",justifyContent:"center"}:{left:"50%",right:"auto",bottom:"18px",transform:"translateX(-50%)",justifyContent:"initial"})},u=()=>{s?.remove(),s=null};return{show:(m,f,v=!1)=>{if(u(),t.isDisposed())return null;let c=document.createElement("div");c.setAttribute("role","group"),Object.assign(c.style,{position:"absolute",display:"flex",flexDirection:"column",alignItems:"center",gap:"6px",zIndex:"4"});let g=r.chrome?.caption!==!1,x=r.chrome?.seatStepper!==!1;if(!g&&!x)return null;let M=a.get(m),D=M?.sectionId?n.sections.find(A=>A.id===M.sectionId):void 0,S=M?.label??m;c.setAttribute("aria-label",`Explore views near ${D?.label?`${D.label}, `:""}seat ${S}`);let E=document.createElement("span");E.textContent=r.seatViewCaption?.(m)??["Live 3D seat view",D?.label,S].filter(Boolean).join(" \xB7 "),Object.assign(E.style,{maxWidth:"min(70vw, 560px)",padding:"5px 10px",borderRadius:"999px",overflow:"hidden",color:"#d9e3f5",background:"rgba(12,18,32,0.72)",font:"600 11px/1.2 inherit",textOverflow:"ellipsis",whiteSpace:"nowrap",backdropFilter:"blur(6px)"}),g&&c.appendChild(E);let F=document.createElement("div");Object.assign(F.style,{display:"flex",alignItems:"center",justifyContent:"center",gap:"6px"}),c.appendChild(F);let I=M?.rowId?o.get(M.rowId):void 0,h=I?.indexOf(m)??-1,y=h>=0?[I?.[h-1],I?.[h+1]]:[void 0,void 0],T=(A,V,L,_=!1)=>{let N=document.createElement("button");N.type="button",N.textContent=A,N.setAttribute("aria-label",V),Object.assign(N.style,{minHeight:"44px",padding:_?"10px 16px":"10px",borderRadius:"999px",background:"rgba(12,18,32,0.78)",color:"#eef1f8",border:"1px solid rgba(150,165,205,0.4)",backdropFilter:"blur(6px)",font:"600 13px/1 inherit",cursor:"pointer",whiteSpace:"nowrap"}),_||(N.style.minWidth="44px"),_&&(N.dataset.panoramaTrigger=""),N.addEventListener("click",L),F.appendChild(N)};if(x&&y[0]){let A=a.get(y[0])?.label??y[0];T("\u2039",`View previous seat ${A}`,()=>{t.flyToSeat(y[0])})}if(x&&r.getSeatView){let A=r.seatViewActionLabel?.(m)??"Open 360\xB0 panorama";T(v?`\u21BB Retry ${A}`:`\u25C9 ${A}`,`${v?"Retry":A} from seat ${S}`,()=>{if(t.isDisposed()||f!==t.flightGen()){u();return}u(),t.openPanorama(m,400,f)},!0)}if(x&&y[1]){let A=a.get(y[1])?.label??y[1];T("\u203A",`View next seat ${A}`,()=>{t.flyToSeat(y[1])})}return!F.childElementCount&&!g?null:(e.appendChild(c),s=c,l(),c)},remove:u,layout:l}}var Qi={rotate:"Drag to rotate the venue",move:"Drag to move the venue",zoomIn:"Zoom in",zoomOut:"Zoom out",fitView:"Show whole venue"};function Pr(t){let{container:e,orbit:n,isNarrow:r}=t,a={...Qi,...t.labels??{}},o=(S,E)=>{S.setAttribute("aria-label",E),S.title=E},i=document.createElement("div"),s=!1;i.className="sl-3d-navigation-controls",Object.assign(i.style,{position:"absolute",right:"14px",bottom:"14px",display:"flex",zIndex:"4",flexDirection:"column",alignItems:"flex-end",gap:"7px"});let l=document.createElement("div");l.setAttribute("role","group"),l.setAttribute("aria-label","3D drag mode"),Object.assign(l.style,{display:"flex",flexDirection:"column",gap:"6px",alignItems:"flex-end"});let u=document.createElement("div");u.setAttribute("role","group"),u.setAttribute("aria-label","3D view controls"),Object.assign(u.style,{display:"flex",flexDirection:"column",gap:"6px",alignItems:"flex-end"});let d=document.createElement("button");d.type="button",d.textContent="\u21BB",o(d,a.rotate);let m=document.createElement("button");m.type="button",m.textContent="\u2725",o(m,a.move);let f=document.createElement("button");f.type="button",f.textContent="\u2212",o(f,a.zoomOut);let v=document.createElement("button");v.type="button",v.textContent="+",o(v,a.zoomIn);for(let S of[d,m,f,v])S.className="sl-3d-icon-control",Object.assign(S.style,{width:"44px",minWidth:"44px",minHeight:"44px",padding:"9px",border:"1px solid rgba(150,165,205,0.35)",borderRadius:"999px",color:"#c9d4ea",background:"rgba(12,18,32,0.82)",font:"600 17px/1 inherit",backdropFilter:"blur(6px)",cursor:"pointer",whiteSpace:"nowrap"});l.append(d,m),u.append(v,f);let c=S=>{n.setPrimaryDragMode(S);let E=S==="orbit";d.setAttribute("aria-pressed",String(E)),m.setAttribute("aria-pressed",String(!E)),d.style.background=E?"rgba(96,110,150,0.68)":"rgba(12,18,32,0.82)",m.style.background=E?"rgba(12,18,32,0.82)":"rgba(96,110,150,0.68)",i.title=E?`${a.rotate} \xB7 ${a.move} with Shift`:`${a.move} \xB7 ${a.rotate} with Shift`};d.addEventListener("click",()=>c("orbit")),m.addEventListener("click",()=>c("pan"));let g=()=>{let{atMin:S,atMax:E}=n.dollyLimitState();v.disabled!==S&&(v.disabled=S),f.disabled!==E&&(f.disabled=E)};f.addEventListener("click",()=>{n.zoomBy(qe),g()}),v.addEventListener("click",()=>{n.zoomBy(_e),g()}),i.append(l,u),c("orbit"),e.appendChild(i);let x=t.enabled!==!1,M=()=>{let S=r();i.style.display=s||!x?"none":"flex",i.style.right=S?"12px":"14px",i.style.bottom=S?"calc(env(safe-area-inset-bottom, 0px) + 76px)":"14px",l.style.display=S?"none":"flex",v.style.display=S?"none":"",f.style.display=S?"none":""};return M(),{element:i,utilityControls:u,setNavigationMode:c,syncZoomLimits:g,setSeatViewLocked:S=>{s=S,n.setInteractionEnabled(!S),M()},seatViewLocked:()=>s,layout:M}}var Zi=12;function Ji(t,e){if(!t)return!1;let n=t.x-e[0],r=t.y-e[1],a=t.z-e[2];return Math.hypot(n,r,a)>Zi}var es=.5,ts=12;function ns(t,e,n){return!(t>0)||!(n>0)?0:es*n/(2*t*Math.tan(e*Math.PI/360))}function Ar(t){let{glctx:e,orbit:n,model:r,seats:a,opts:o,cinematic:i,analytics:s,seatIdByIndex:l,sectionIdBySeatId:u,tapSlop:d,tapMs:m,cancelFlight:f,focusSectionCamera:v,setSelection:c,ensureSeatView:g}=t,x=0,M=0,D=0,S=-1,E=!1,F=!1,I=L=>{t.seatViewLocked()||S===-1&&(S=L.pointerId,x=L.clientX,M=L.clientY,D=performance.now(),E=!1,F=i.active,i.active&&(s.cinematicCancelled(),f(),o.onViewTargetChange?.(null)))},h=L=>{L.pointerId===S&&Math.hypot(L.clientX-x,L.clientY-M)>d&&(E=!0)},y=(L,_,N,U,z)=>{let Y=e.canvas.getBoundingClientRect(),R=e.canvas.clientWidth||Y.width||1,w=e.canvas.clientHeight||Y.height||1,ee=L-Y.left,k=_-Y.top,P=U*U,H=-1,te=P,j=1/0;for(let se of a){if(N&&se.sectionId!==N)continue;let le=r.seats.idToIndex.get(se.id);if(le===void 0)continue;if(z){let B=Math.round(r.seats.iState[le]??0);if(B!==0&&B!==3)continue}let K=le*3,de=ge(n.camera.projectionViewMatrix,[r.seats.iPosition[K],r.seats.iPosition[K+1]+.55,r.seats.iPosition[K+2]],R,w);if(!de.visible)continue;let me=de.x-ee,ne=de.y-k,ve=me*me+ne*ne;(ve<te||Math.abs(ve-te)<1&&de.depth<j)&&(H=le,te=ve,j=de.depth)}return H},T=(L,_)=>{let N=t.gpu(),U=t.pick();if(!N||!U)return-1;U.syncFromSeatProgram(N.seatProgram);let z=e.canvas.getBoundingClientRect(),Y=e.renderer.dpr,{x:R,y:w}=Uo(L,_,z,Y,e.gl.drawingBufferWidth,e.gl.drawingBufferHeight),ee=Math.max(2,Math.round(8*Y));return U.pick(n.camera,R,w,ee)},A=L=>{let _=n.camera?.position;if(!_)return!1;let N=L*3,U=Math.hypot(_.x-r.seats.iPosition[N],_.y-r.seats.iPosition[N+1],_.z-r.seats.iPosition[N+2]),z=e.canvas.clientHeight||e.canvas.getBoundingClientRect().height;return ns(U,n.fovY,z)>=ts};return{onDown:I,onMove:h,onUp:L=>{if(L.pointerId!==S)return;let _=!E&&performance.now()-D<m;if(S=-1,F){F=!1;return}let N=t.gpu(),U=t.pick();if(!_||!N||!U)return;let z=T(L.clientX,L.clientY),Y=z>=0&&A(z),R=!1;if(t.focusedSectionId()&&z>=0){let k=l[z],P=k?u.get(k):void 0;if(P&&P!==t.focusedSectionId()&&v(P,{keepCamera:Y})){if(!Y)return;R=!0}}if(t.focusedSectionId()&&z<0&&(z=y(L.clientX,L.clientY,t.focusedSectionId(),44,!1)),t.focusedSectionId()&&z<0){let k=y(L.clientX,L.clientY,null,72,!1),P=k>=0?l[k]:void 0,H=P?u.get(P):void 0;if(H&&H!==t.focusedSectionId()&&v(H))return}if(!t.focusedSectionId()){z<0&&(z=y(L.clientX,L.clientY,null,42,!1));let k=z>=0?l[z]:void 0,P=k?u.get(k):void 0;if(P&&v(P,{keepCamera:Y})){if(!Y)return;R=!0}}if(z<0||z>=l.length){t.selection().size&&(c([]),o.onViewTargetChange?.(null));return}let w=l[z],ee=be[Math.round(r.seats.iState[z]??0)]??"available";if(ee!=="available"&&ee!=="selected"){o.onSeatInspect?.(w,ee);return}if(t.selection().has(w)&&t.selection().size===1){c([]),o.onViewTargetChange?.(null),o.onSeatPick?.(w);return}if(c([w]),g(w),s.seatPicked(w,u.get(w)),o.onSeatPick?.(w),t.focusedSectionId()&&!R){let k=z*3,P=[r.seats.iPosition[k],r.seats.iPosition[k+1],r.seats.iPosition[k+2]];Ji(n.camera?.position,P)&&t.focusSeatCamera(w)}}}}var Mt=class{constructor(e,n){this.minX=0;this.minZ=0;this.cell=1;this.cols=1;this.rows=1;this.cellStart=null;this.cellItems=null;this.iPosition=e,this.count=n}ensureGrid(){if(this.cellStart||this.count===0)return;let e=this.iPosition,n=1/0,r=1/0,a=-1/0,o=-1/0;for(let v=0;v<this.count;v++){let c=e[v*3],g=e[v*3+2];c<n&&(n=c),c>a&&(a=c),g<r&&(r=g),g>o&&(o=g)}let i=Math.max(a-n,.001),s=Math.max(o-r,.001);this.cell=Math.max(Math.sqrt(i*s*4/this.count),.25),this.cols=Math.max(1,Math.ceil(i/this.cell)+1),this.rows=Math.max(1,Math.ceil(s/this.cell)+1),this.minX=n,this.minZ=r;let l=this.cols*this.rows,u=new Int32Array(l+1),d=v=>{let c=Math.min(this.cols-1,Math.max(0,Math.floor((e[v*3]-n)/this.cell)));return Math.min(this.rows-1,Math.max(0,Math.floor((e[v*3+2]-r)/this.cell)))*this.cols+c};for(let v=0;v<this.count;v++)u[d(v)+1]++;for(let v=0;v<l;v++)u[v+1]+=u[v];let m=new Int32Array(this.count),f=u.slice(0,l);for(let v=0;v<this.count;v++)m[f[d(v)]++]=v;this.cellStart=u,this.cellItems=m}gather(e,n,r,a,o){this.ensureGrid();let i=this.cellStart,s=this.cellItems;if(!i||!s)return 0;let l=a.length,u=r*r,d=Math.floor((e-this.minX)/this.cell),m=Math.floor((n-this.minZ)/this.cell),f=Math.ceil(r/this.cell)+1,v=this.iPosition,c=0;for(let g=0;g<=f&&c<l;g++){let x=m-g,M=m+g,D=d-g,S=d+g;for(let E=x;E<=M&&c<l;E++){if(E<0||E>=this.rows)continue;let F=E===x||E===M;for(let I=D;I<=S&&c<l;I++){if(!F&&I!==D&&I!==S){I=S-1;continue}if(I<0||I>=this.cols)continue;let h=E*this.cols+I;for(let y=i[h],T=i[h+1];y<T&&c<l;y++){let A=s[y],V=v[A*3]-e,L=v[A*3+2]-n,_=o===void 0?0:v[A*3+1]-o;V*V+_*_+L*L<=u&&(a[c++]=A)}}}}return c}};var Pt=class{constructor(e){this.ctx=e;this.detailVisible=!1;this.seatDetailMix=0;this.structureDetailMix=0;this.nearBuf=new Int32Array(pt);this.lastGatherX=1/0;this.lastGatherZ=1/0;this.lastGatherY=1/0;this.nearIndex=new Mt(e.model.seats.iPosition,e.model.seats.count)}forceRegather(){this.lastGatherX=1/0}setDetailEnabled(e){let n=this.ctx.gpu();e||(this.detailVisible=!1),this.lastGatherX=1/0,this.lastGatherZ=1/0,!e&&n?.nearSeatCount()&&n.setNearSeats(this.nearBuf,0)}update(e){let{model:n}=this.ctx,r=this.ctx.gpu();if(!r)return;if(!e){r.nearSeatCount()&&r.setNearSeats(this.nearBuf,0);return}let a=this.ctx.orbit().camera.position;if(Math.hypot(a.x-this.lastGatherX,a.y-this.lastGatherY,a.z-this.lastGatherZ)<Wt)return;if(this.lastGatherX=a.x,this.lastGatherY=a.y,this.lastGatherZ=a.z,Math.hypot(a.x-n.bounds.center[0],a.y-n.bounds.center[1],a.z-n.bounds.center[2])-n.bounds.radius>Bt){r.nearSeatCount()&&r.setNearSeats(this.nearBuf,0);return}let s=this.nearIndex.gather(a.x,a.z,Bt,this.nearBuf,a.y);s===0&&r.nearSeatCount()===0||r.setNearSeats(this.nearBuf,s)}ease(e,n,r){let a=1-Math.exp(-e*9),o=1-Math.exp(-e*20);this.seatDetailMix+=(n-this.seatDetailMix)*(n>this.seatDetailMix?a:o),this.structureDetailMix+=(r-this.structureDetailMix)*(r>this.structureDetailMix?a:o),Math.abs(n-this.seatDetailMix)<.01&&(this.seatDetailMix=n),Math.abs(r-this.structureDetailMix)<.01&&(this.structureDetailMix=r)}};function Cr(t){let e=Math.max(5,t.radius),n=t.focalWorld[0]-t.center[0],r=t.focalWorld[2]-t.center[2],a=Math.hypot(n,r);if(a<e*.12)return{center:t.center,radius:e,polarDeg:48};let o=Math.min(a*.25,e*.2);return{center:[t.center[0]+n/a*o,t.center[1],t.center[2]+r/a*o],radius:e+o,polarDeg:50}}import{Quat as os,Vec3 as rs}from"ogl";function Er(){let t="http://www.w3.org/2000/svg",e=document.createElementNS(t,"svg");e.setAttribute("viewBox","0 0 24 24"),e.setAttribute("width","18"),e.setAttribute("height","18"),e.setAttribute("aria-hidden","true"),e.setAttribute("focusable","false"),e.setAttribute("fill","none"),e.setAttribute("stroke","currentColor"),e.setAttribute("stroke-width","2"),e.setAttribute("stroke-linecap","round"),e.setAttribute("stroke-linejoin","round");let n=document.createElementNS(t,"path");return n.setAttribute("d","M8 3H5a2 2 0 0 0-2 2v3M16 3h3a2 2 0 0 0 2 2v3M8 21H5a2 2 0 0 0-2-2v-3M16 21h3a2 2 0 0 0 2-2v-3"),e.appendChild(n),e}function Fr(t){let{container:e,model:n,opts:r,orbit:a,cinematic:o,analytics:i,loop:s,labelOverlay:l,stageAzimuth:u,overviewFraming:d}=t,m=0,f=-1,v=(h,y,T=28)=>{a.camera.position.set(h[0],h[1],h[2]),a.camera.lookAt(new rs(y[0],y[1],y[2])),a.camera.fov=T,a.camera.updateProjectionMatrix()},c=document.createElement("button");c.className="sl-3d-overview-control sl-3d-icon-control",c.type="button",c.replaceChildren(Er());let g=r.navLabels?.fitView??"Show whole venue";c.setAttribute("aria-label",g),c.title=g,Object.assign(c.style,{width:"44px",minWidth:"44px",minHeight:"44px",padding:"9px",borderRadius:"999px",background:"rgba(12,18,32,0.72)",color:"#c9d4ea",border:"1px solid rgba(150,165,205,0.35)",backdropFilter:"blur(6px)",font:"600 11px/1 inherit",cursor:"pointer",whiteSpace:"nowrap"});let x=()=>{c.firstElementChild||c.replaceChildren(Er())};x();let M=h=>{f=h;let y=t.gpu();y&&(y.seatProgram.uniforms.uFocusFloor.value=h,y.solidProgram.uniforms.uFocusFloor.value=h,y.chairProgram.uniforms.uFocusFloor.value=h),t.showSectionSeatLabels(null)},D=()=>{if(t.isDisposed())return;r.onViewTargetChange?.(null),r.onSectionFocusChange?.(null),t.panorama()&&(t.panorama().dispose(),t.setPanorama(null),i.panoramaClosed()),t.setPanoramaSphereVisible(!1),t.panoramaLoadAbort()?.abort(),t.setPanoramaLoadAbort(null),t.restorePanoramaLayer(),c.style.display="",l.setVisible(!0),t.setFrozen(!1);let h=f>=0?n.floors[f]:null;if(t.setNearFieldDetailEnabled(!!h),t.setSeatViewLocked(!1),S(),t.removeArriveChip(),t.setNavigationMode("orbit"),h){let y=h.focalWorld[0]-h.center[0],T=h.focalWorld[2]-h.center[2],A=Math.hypot(y,T)>h.radius*.12?Math.atan2(y,T):u,V={center:h.center,radius:h.radius,box:h.box},L={polarDeg:58,margin:1.12};t.reducedMotion()?a.frame(V,!1,A,!1,L):a.frameSoft(V,A,!1,L)}else t.reducedMotion()?a.frame(n.bounds,!1,u,r.portraitOverviewCrop===!0,d):a.frameSoft(n.bounds,u,r.portraitOverviewCrop===!0,d);t.showSectionSeatLabels(null),s.requestRender()},S=()=>{m++,t.setSeatStepping(!1),t.panoramaLoadAbort()?.abort(),t.setPanoramaLoadAbort(null),o.active&&(o.cancel(),a.resumeAfterFlight(n.focalWorld))},E=h=>{if(t.isDisposed()||!t.gpu())return Promise.resolve();let y=n.seats.idToIndex.get(h);if(y===void 0)return Promise.resolve();t.setNearFieldDetailEnabled(!0),r.onViewTargetChange?.(h),t.panorama()&&(t.panorama().dispose(),t.setPanorama(null),t.setPanoramaSphereVisible(!1),c.style.display="",t.restorePanoramaLayer()),t.panoramaLoadAbort()?.abort(),t.setPanoramaLoadAbort(null),t.setFrozen(!1);let T=t.inSeatView()&&r.arriveAtSeatEye===!0;t.setSeatStepping(T),t.setSeatViewLocked(!1);let A=++m;T?t.showArriveChip(h,A):t.removeArriveChip();let{eye:V,focal:L}=t.resolvedSeatViewPose(h,y),_=r.arriveAtSeatEye?t.seatViewArrival(h,y):null,N=_&&_.stops.length>1&&_.stops[1].name==="row"?_.stops[1]:null,U=_?_.focal:L,z=[a.camera.position.x,a.camera.position.y,a.camera.position.z],Y=tn(z,_?.eye??V,U,n.bounds.center,n.bounds.radius),R=N?N.eye:_?_.eye:r.arriveAtSeatEye?V:Y.finalPos,w=_?_.fov:r.arriveAtSeatEye?e.clientWidth/Math.max(1,e.clientHeight)<.7?yt:65:28,ee=[Y.waypoints[0],Y.waypoints[1],R];if(l.setVisible(!1),t.reducedMotion())return t.setSeatStepping(!1),v(R,U,w),s.requestRender(),i.cinematicSkipped(),t.isDisposed()||a.syncFromCamera(),t.setSeatViewLocked(r.arriveAtSeatEye===!0),_&&t.enterSeatView(_.stops),t.showArriveChip(h,A),Promise.resolve();let k=new os().copy(a.camera.quaternion),P=Jo(a.camera,R,U);s.requestRender();let H=T?700:2500;return o.start(ee,k,P,H,w).then(()=>{t.isDisposed()||A!==m||(t.setSeatStepping(!1),i.cinematicPlayed(H),a.resumeAfterFlight(U),t.setSeatViewLocked(r.arriveAtSeatEye===!0),_&&t.enterSeatView(_.stops,N?1:0),s.requestRender(),t.showArriveChip(h,A))})},F=(h,y)=>{let T=n.sections.find(A=>A.id===h);if(!T||T.seatCount===0)return!1;if(t.setNearFieldDetailEnabled(!0),t.setSeatStepping(!1),t.setSeatViewLocked(!1),o.cancel(),t.removeArriveChip(),n.floors.length>1&&f!==T.floorIndex&&M(T.floorIndex),t.setNavigationMode("pan"),t.panorama()||l.setVisible(!0),t.showSectionSeatLabels(h),!y?.keepCamera){let A=Cr(T),V={polarDeg:A.polarDeg,margin:1.12};t.reducedMotion()?a.frame({center:A.center,radius:A.radius},!1,a.currentAzimuth,!1,V):a.glideTo({center:A.center,radius:A.radius},V)}return r.onSectionFocusChange?.(h),s.requestRender(),!0},I=h=>{if(t.isDisposed()||!t.gpu())return!1;let y=n.seats.idToIndex.get(h);if(y===void 0)return!1;let T=y*3,A=[n.seats.iPosition[T],n.seats.iPosition[T+1]+.55,n.seats.iPosition[T+2]];return t.reducedMotion()?a.frame({center:A,radius:Rr},!1,void 0,!1,Tr):a.frameSoft({center:A,radius:Rr},void 0,!1,Tr),s.requestRender(),!0};return c.addEventListener("click",D),{overviewChip:c,layoutOverviewChip:x,flightGen:()=>m,focusedFloor:()=>f,applyFloorFocus:M,placeCameraFinal:v,cancelFlight:S,focusOverview:D,flyToSeat:E,focusSectionCamera:F,focusSeatCamera:I}}var Rr=4.5,Tr={polarDeg:48,margin:1.25};function ln(t,e,n,r,a,o,i,s,l=.5){let u=-1,d=s*s,m=1/0;for(let f=0;f<e;f++){let v=f*3,c=ge(n,[t[v],t[v+1]+l,t[v+2]],r,a);if(!c.visible)continue;let g=c.x-o,x=c.y-i,M=g*g+x*x;(M<d-4||M<d+4&&c.depth<m)&&(u=f,d=Math.min(d,M),m=c.depth)}return u}function Ir(t){let e=performance.now(),{input:n,estimate:r}=Yn(t);return{model:Xe(n),buildMs:performance.now()-e,source:"main",...r?{estimate:r}:{}}}function as(t){let e=An(t.doc);return{...Ir({...t,seats:e}),seats:e}}function _r(t,e,n){if(typeof Worker>"u")return Promise.resolve(e());let r;try{r=new Worker(new URL("./scene/scene.worker.js",import.meta.url),{type:"module"})}catch{return Promise.resolve(e())}return new Promise(a=>{let o=!1,i=u=>{o||(o=!0,clearTimeout(l),r.terminate(),a(u))},s=()=>i(e()),l=window.setTimeout(s,15e3);r.onerror=s,r.onmessage=u=>{let d=n(u.data);d?i(d):s()},r.postMessage(t)})}function is(t){return _r(t,()=>Ir(t),({model:e,buildMs:n,estimate:r})=>({model:e,buildMs:n,source:"worker",...r?{estimate:r}:{}}))}function ss(t){return _r(t,()=>as(t),({model:e,buildMs:n,seats:r,estimate:a})=>r?{model:e,buildMs:n,seats:r,source:"worker",...a?{estimate:a}:{}}:null)}var cs=40,us=48,ds=Math.PI/180,ms=6,hs=500;function zc(t,e,n={}){let r=performance.now(),a=e.prepared?e.prepared.estimate:e.estimate===!1?null:kt(e.doc,e.seats);a&&(e={...e,doc:a.doc,seats:Un(e.seats,a)});let o=e.prepared?.model??Xe(e),i=new wt(n.onAnalytics),s=new Array(o.seats.count);for(let[p,b]of o.seats.idToIndex)s[b]=p;let l=new Map(e.seats.map(p=>[p.id,p])),u=new Map;for(let p of e.seats){if(!p.rowId)continue;let b=u.get(p.rowId);b?b.push(p.id):u.set(p.rowId,[p.id])}let d=new Map;e.seats.forEach((p,b)=>{d.set(p.id,o.seatSectionIds?.[b]??p.sectionId)});let m=new Map;for(let[p,b]of o.seats.idToIndex){let C=d.get(p);if(!C)continue;let O=m.get(C);O?O.push(b):m.set(C,[b])}let f=()=>{if(!c||!o.sectionSolidRanges.length)return;let{lit:p,anyUnlit:b}=zo(o.sectionSolidRanges,m,o.seats.iState);c.setSectionShellLit(b?p:null)},v=e.doc.floors?.some(b=>(b.baseHeightM??0)>0)?!0:(e.doc.floors?.flatMap(b=>b.objects)??e.doc.objects).some(b=>b.type==="section"&&((b.height??0)>0||(b.rake??0)>0)),c=null,g=null,x=null,M=!1,D=!1,S=!1,E=new Map,F=null,I=null,h=null,y=new Map,T=null,A=()=>{h===null&&(h=t.style.zIndex,t.style.zIndex="20")},V=()=>{h!==null&&(t.style.zIndex==="20"&&(t.style.zIndex=h),h=null)},L=!1,_=()=>L?he.focusedFloor():-1,N=()=>{c=Bo(R.gl,o),g?.dispose(),g=ho(R.gl,[1,1,1]),pn(!1),f(),Z(),x=new bt(R.renderer,c.seatGeometry,c.chairGeometry,c.solidGeometry,o.seats.count),R.setClearColor(o.theme.background.top),x.setRestoreClear(o.theme.background.top),x.setRoomCentre(o.room?.centre),c.seatProgram.uniforms.uSeatRadius.value=Ye*o.theme.seatScale,c.seatProgram.uniforms.uFocusFloor.value=_(),c.solidProgram.uniforms.uFocusFloor.value=_(),c.chairProgram.uniforms.uFocusFloor.value=_(),c.screenProgram&&(c.screenProgram.uniforms.uFocusFloor.value=_()),z.forceRegather()},U=!1,z=new Pt({model:o,orbit:()=>w,gpu:()=>c}),Y=p=>z.setDetailEnabled(p),R=new dt(t,{onContextLost:()=>{S||i.contextLost(),M=!0,re.stop(),c=null,x=null},onContextRestored:()=>{N(),M=!1,S||i.contextRestored(),re.requestRender()}}),w=new mt(R.gl,R.canvas,()=>re.requestRender(),()=>i.orbitEngaged());w.setAspect(R.aspect);let ee=(e.doc.floors?.flatMap(p=>p.objects)??e.doc.objects).some(p=>p.type==="section"&&p.physical3dProvenance?.surfaceKind?.status==="inferred"),k=(()=>{if(Number.isFinite(n.overviewAzimuthDeg))return n.overviewAzimuthDeg*Math.PI/180;if(!(ee&&o.stages.length===0))return Xn(o.focalWorld,o.seats.iPosition,o.bounds)})(),P=(e.doc.floors?.flatMap(p=>p.objects)??e.doc.objects).some(p=>p.type==="shape"&&p.stageKind?.startsWith("pitch-")),H=o.floors.length>1?{polarDeg:48,margin:1.1}:{polarDeg:P?36:48,margin:1.05},te=typeof window<"u"&&!!window.matchMedia&&window.matchMedia("(prefers-reduced-motion: reduce)").matches;w.frame(o.bounds,!te&&n.skipInitialOverviewAnimation!==!0,k,n.portraitOverviewCrop===!0,H);let j=new gt(w.camera),se=wr(t),le=qn(t,o),K=new ft(t,{fontFamily:e.doc.theme?.fontFamily,ink:e.doc.theme?.textColor,backgroundRgb:o.theme.background.top}),de=o.labels,me=()=>Dn(de,o.floors.length,_());K.setLabels(me());let ne=null,ve=()=>[...E.keys()].flatMap(p=>{let b=o.seats.idToIndex.get(p),C=b===void 0?void 0:e.seats[b];if(b===void 0||C?.id!==p)return[];let O=b*3;return[{id:`seat:${p}`,kind:"seat",seatWidthM:o.seats.iChairWidth[b]*2,text:C.displayLabel||C.label,anchor:[o.seats.iPosition[O],o.seats.iPosition[O+1]+1.05,o.seats.iPosition[O+2]],pinBase:At(O)}]}),B=-1,Z=()=>{c&&(B=ne?o.sections.findIndex(p=>p.id===ne):-1,c.seatProgram.uniforms.uFocusSection.value=B,c.chairProgram.uniforms.uFocusSection.value=B)},X=p=>{if(ne=p,Z(),K.setForcedDense(!!p),!p){let G=ve(),pe=new Set(G.map(ae=>ae.id));K.setLabels([...me().filter(ae=>!pe.has(ae.id)),...G]);return}let b=e.seats.filter(G=>d.get(G.id)===p),C=new Set(b.map(G=>G.id)),O=new Set(b.map(G=>G.rowId)),W=new Set(E.keys()),J=new Set(b.filter(G=>W.has(G.id)).map(G=>G.id)),Q=me().filter(G=>G.kind!=="row"&&G.kind!=="seat"||(G.kind==="row"?O.has(G.id.slice(4)):C.has(G.id.slice(5))));if(o.seatCount<=6e3&&J.size===0){K.setLabels(Q);return}let ue=b,Pe=new Set(ue.map(G=>`seat:${G.id}`)),Ae=ue.flatMap(G=>{let pe=o.seats.idToIndex.get(G.id);if(pe===void 0)return[];let ae=pe*3;return[{id:`seat:${G.id}`,kind:"seat",seatWidthM:o.seats.iChairWidth[pe]*2,rowId:G.rowId,text:W.has(G.id)?G.displayLabel||G.label:Wn(G.displayLabel||G.label),anchor:[o.seats.iPosition[ae],o.seats.iPosition[ae+1]+(W.has(G.id)?1.05:.55),o.seats.iPosition[ae+2]],...W.has(G.id)?{pinBase:At(ae)}:{}}]});K.setLabels([...Q.filter(G=>!Pe.has(G.id)),...Ae])};N();let q=null,$=null,oe=new ls,cn=p=>{if(M||!c||D)return!1;let b=yr({flying:j.active,panoramaMounted:F!==null,seatViewActive:q?.active===!0}),C=b==="orbit"?B:-1;c.seatProgram.uniforms.uFocusSection.value=C,c.chairProgram.uniforms.uFocusSection.value=C;let O=b==="cinematic"?j.update(performance.now()):b==="seatView"?q.update(performance.now()):b==="orbit"?w.update():!1;$?.syncZoomLimits();let W=_()>=0?o.floors[_()]:null,J=W?.radius??o.bounds.radius,Q=lo(w.currentDistance,J),ue=U?{center:[w.camera.position.x,w.camera.position.y,w.camera.position.z],radius:520}:o.clipBounds??o.renderBounds;w.updateClipping(ue);let Pe=W?.center??o.renderBounds.center,Ae=W?.radius??o.renderBounds.radius,G=(ie,Dt)=>Math.hypot(w.camera.position.x-ie[0],w.camera.position.y-ie[1],w.camera.position.z-ie[2])<=Dt*(z.detailVisible?1.8:1.55),pe=G(Pe,Ae);if(!pe&&ne){let ie=o.sections.find(Dt=>Dt.id===ne);ie&&(pe=G(ie.center,Math.max(12,ie.radius*2)))}z.detailVisible=pe;let ae=c.seatProgram.uniforms;ae.uSeatScale.value=Q.scale,ae.uSeatFade.value=Q.fade;let at=!!W&&co(W.seatCount,R.canvas.clientWidth||1,R.canvas.clientHeight||1),it=uo(o.seats.count,J,w.currentDistance,w.camera.fov,R.canvas.clientHeight||1),Ge=z.detailVisible||at||it?1:0,Be=z.detailVisible||_()>=0||o.floors.length>1?1:0;z.ease(p,Ge,Be),ae.uSeatDetail.value=z.seatDetailMix;let st=Ge===0&&z.seatDetailMix<.01;c.seatGeometry.setDrawRange(st?zt:0,st?jn:zt),c.solidProgram.uniforms.uStructureDetail.value=z.structureDetailMix,ae.uMinPixels.value=Q.minPixels,ae.uPixelToWorld.value=2*Math.tan(w.camera.fov*ds/2)/Math.max(1,R.pixelHeight),z.update(z.detailVisible),o.outdoor&&(oe.copy(w.camera.projectionViewMatrix).inverse(),c.backgroundProgram.uniforms.uInvViewProj.value.set(oe)),R.renderer.render({scene:c.background,clear:!0}),R.renderer.render({scene:c.main,camera:w.camera,clear:!1});let We=g?g.update(performance.now(),[w.camera.position.x,w.camera.position.y,w.camera.position.z],F!==null,b==="seatView"):!1;if(g&&R.renderer.render({scene:g.root,camera:w.camera,clear:!1}),le){let ie=w.camera.worldMatrix;le.update(b==="seatView"?[w.camera.position.x,w.camera.position.y,w.camera.position.z]:null,[-ie[8],-ie[9],-ie[10]])}K.update(w.camera.projectionViewMatrix,R.canvas.clientWidth||1,R.canvas.clientHeight||1,w.currentDistance,J,[w.camera.position.x,w.camera.position.y,w.camera.position.z]);let Te=O||We||z.seatDetailMix!==Ge||z.structureDetailMix!==Be;return un(!Te),Te},un=oo(t),re=new ht(cn),dn=typeof ResizeObserver<"u"?new ResizeObserver(()=>_t.resize()):null;dn?.observe(t),w.setZoomPointResolver((p,b)=>{let C=R.canvas.getBoundingClientRect(),O=R.canvas.clientWidth||C.width,W=R.canvas.clientHeight||C.height;if(!(O>0)||!(W>0))return null;w.camera.updateMatrixWorld();let J=ln(o.seats.iPosition,o.seats.count,w.camera.projectionViewMatrix,O,W,p-C.left,b-C.top,cs);if(J<0)return null;let Q=J*3;return[o.seats.iPosition[Q],o.seats.iPosition[Q+1]+.5,o.seats.iPosition[Q+2]]});function At(p){return[o.seats.iPosition[p],o.seats.iPosition[p+1]+.5,o.seats.iPosition[p+2]]}K.setSeatNumberRow(null);let ze=null,we=0,mn=()=>{we=0;let p=null;if(ze&&!q?.active&&!j.active){let b=R.canvas.getBoundingClientRect(),C=R.canvas.clientWidth||b.width,O=R.canvas.clientHeight||b.height;if(C>0&&O>0){let W=ln(o.seats.iPosition,o.seats.count,w.camera.projectionViewMatrix,C,O,ze.x-b.left,ze.y-b.top,us);p=W>=0?e.seats[W]?.rowId??null:null}}K.setSeatNumberRow(p)&&re.requestRender()},ot=p=>{ze={x:p.clientX,y:p.clientY},we||(we=requestAnimationFrame(mn))},hn=p=>{p.pointerType==="mouse"&&(ze=null,we||(we=requestAnimationFrame(mn)))};R.canvas.addEventListener("pointermove",ot),R.canvas.addEventListener("pointerdown",ot),R.canvas.addEventListener("pointerleave",hn);function pn(p){if(!g)return;let b=[];for(let C of E.keys()){let O=o.seats.idToIndex.get(C);if(O===void 0)continue;let W=O*3;b.push({id:C,position:At(W)})}g.setSeats(b,performance.now(),p)}let fn=p=>{let b=W=>{let J=o.seats.idToIndex.get(W);return J===void 0?void 0:o.seats.iState[J]},{updates:C,next:O}=Xo(E,p,b);if(E=O,K.setSelectedSeatIds(E.keys()),pn(!Oe()),re.requestRender(),X(ne),C.length){let W=Vt(o.seats,C);c&&c.uploadSeatStateRuns(W),f(),re.requestRender()}},Oe=()=>T!==null?T:typeof window<"u"&&!!window.matchMedia&&window.matchMedia("(prefers-reduced-motion: reduce)").matches,Dr=8,vn=p=>{if(!n.getSeatView)return null;let b=y.get(p);if(!b)for(b=Promise.resolve(n.getSeatView(p)),y.set(p,b),b.catch(()=>{y.get(p)===b&&y.delete(p)});y.size>Dr;){let C=y.keys().next().value;if(C===void 0)break;y.delete(C)}return b},bn=dr(o.stages,o.focalWorld,o.bounds.groundY??0),Lr=rn(bn),Ct=(p,b)=>{let C=l.get(p),O=Math.max(0,Math.round(o.seats.iFloor[b]??0)),W=e.doc.floors?.[O],J=o.floors[O],Q=W?.focalPoint??e.doc.focalPoint,ue=J?{x:J.focalWorld[0]/Fe,y:J.focalWorld[2]/Fe}:Q,Pe=C?.focalPoint?{x:C.focalPoint.x+ue.x-Q.x,y:C.focalPoint.y+ue.y-Q.y}:ue,Ae=[o.seats.iPosition[b*3],o.seats.iPosition[b*3+1],o.seats.iPosition[b*3+2]];return tr(Ae,Pe,W?.baseHeightM??0,C?.eyeHeightM,Lr)},gn=()=>(t.clientWidth||R.canvas.clientWidth)<=520,Et=null,yn=null,Vr=async(p,b,C)=>{if(!n.getSeatView||S||C!==he.flightGen())return;let O;try{O=await xr()}catch{if(i.panoramaFailed(p,"mount"),!S&&C===he.flightGen()){let W=Tt(p,C,!0);requestAnimationFrame(()=>W?.querySelector("[data-panorama-trigger]")?.focus())}return}if(!(S||C!==he.flightGen()||!Et))return yn??=O.createOpenPanorama(Et),yn(p,b,C)},Rt=Mr({container:t,model:o,opts:n,expandedSeatById:l,seatIdsByRow:u,isNarrow:gn,isDisposed:()=>S,flightGen:()=>he.flightGen(),flyToSeat:p=>Mn(p),openPanorama:(p,b,C)=>Vr(p,b,C)}),Tt=Rt.show,Ft=Rt.remove,kr=Rt.layout,Me=Pr({container:t,orbit:w,isNarrow:gn,enabled:n.chrome?.controlDock!==!1,...n.navLabels?{labels:n.navLabels}:{}});$=Me;let zr=Me.element,Ne=Me.setNavigationMode,Or=Me.layout,Nr=Me.utilityControls,He=null,xn=!1,rt=p=>{Me.setSeatViewLocked(p),p||q?.exit()};q=gr({canvas:R.canvas,camera:w.camera,requestRender:()=>re.requestRender(),reducedMotion:Oe,onStopChange:p=>{let b=p??(xn?"seat":null);He=b;try{n.onSeatViewStopChange?.(b)}catch{}},onApplied:()=>{S||w.syncFromCamera()}});let Sn=o.sections.reduce((p,b)=>b.seatCount>0&&b.box?Math.max(p,b.box.max[1]):p,-1/0),Hr=(p,b)=>{let{eye:C}=Ct(p,b),O=(t.clientWidth||R.canvas.clientWidth||1)/Math.max(1,t.clientHeight||R.canvas.clientHeight||1),W=hr(C,bn,O,{preserveEye:!0});if(n.seatViewStops===!1)return{...W,stops:[]};let J=d.get(p),Q=J?o.sections.find(ue=>ue.id===J):void 0;return{...W,stops:pr(W,{aspect:O,seatingTopY:Number.isFinite(Sn)?Sn:o.bounds.box.max[1],section:Q&&Q.seatCount>0?{center:Q.center,radius:Q.radius}:null,venue:{center:o.bounds.center,radius:o.bounds.radius}})}},he=Fr({container:t,model:o,opts:n,orbit:w,cinematic:j,analytics:i,loop:re,labelOverlay:K,stageAzimuth:k,overviewFraming:H,gpu:()=>c,isDisposed:()=>S,panorama:()=>F,setPanorama:p=>{F=p},setPanoramaSphereVisible:p=>{U=p},panoramaLoadAbort:()=>I,setPanoramaLoadAbort:p=>{I=p},setFrozen:p=>{D=p},restorePanoramaLayer:V,reducedMotion:Oe,resolvedSeatViewPose:Ct,showSectionSeatLabels:X,setNearFieldDetailEnabled:Y,setSeatViewLocked:rt,setNavigationMode:Ne,showArriveChip:Tt,removeArriveChip:Ft,inSeatView:()=>He!==null,setSeatStepping:p=>{xn=p},seatViewArrival:(p,b)=>n.arriveAtSeatEye?Hr(p,b):null,enterSeatView:(p,b)=>q?.enter(p,b)});L=!0;let It=he.overviewChip,Gr=he.layoutOverviewChip,Br=he.applyFloorFocus,Wr=he.focusOverview,wn=he.cancelFlight,Mn=he.flyToSeat,Pn=he.focusSectionCamera;Nr.appendChild(It),Et={container:t,model:o,opts:n,analytics:i,orbit:w,loop:re,seatsById:l,ensureSeatView:vn,resolvedSeatViewPose:Ct,gpu:()=>c,gl:R.gl,isContextLost:()=>M,isDisposed:()=>S,flightGen:()=>he.flightGen(),setPanorama:p=>{F=p},getLoadAbort:()=>I,setLoadAbort:p=>{I=p},setPanoramaSphereVisible:p=>{U=p,p&&q?.exit()},setFrozen:p=>{D=p},raisePanoramaLayer:A,restorePanoramaLayer:V,getOverviewChip:()=>It,labelOverlay:K,reducedMotion:Oe,removeArriveChip:Ft,showArriveChip:Tt};let xe=Ar({glctx:R,orbit:w,model:o,seats:e.seats,opts:n,cinematic:j,analytics:i,seatIdByIndex:s,sectionIdBySeatId:d,tapSlop:ms,tapMs:hs,gpu:()=>c,pick:()=>x,seatViewLocked:()=>Me.seatViewLocked(),focusedSectionId:()=>ne,selection:()=>E,cancelFlight:wn,focusSectionCamera:Pn,focusSeatCamera:he.focusSeatCamera,setSelection:fn,ensureSeatView:vn});R.canvas.addEventListener("pointerdown",xe.onDown),R.canvas.addEventListener("pointermove",xe.onMove),R.canvas.addEventListener("pointerup",xe.onUp),R.canvas.addEventListener("pointercancel",xe.onUp),re.requestRender();let _t={setAvailability(p){let b=Yo(E,p),C=Vt(o.seats,b);C.length&&c&&c.uploadSeatStateRuns(C),f(),re.requestRender()},setSelection:fn,setNavigationMode:Ne,zoomIn(){w.zoomBy(_e),re.requestRender()},zoomOut(){w.zoomBy(qe),re.requestRender()},flyToSeat:Mn,focusOverview:Wr,seatViewStop:()=>He,recentreSeatView:()=>q?.recentre()??!1,resize(){let{width:p,height:b}=R.resize();w.setAspect(p/Math.max(1,b)),kr(),Or(),Gr(),re.requestRender()},stats(){return{...re.stats(),drawCalls:c?c.drawCalls:0,fallbackTriangles:c?c.seatGeometry.drawRange.count/3*o.seats.count:0,seatCount:o.seatCount}},captureImage(p=1280){if(M||!c||typeof document>"u")return null;cn(0);let b=R.canvas,C=Math.min(1,p/Math.max(b.width,b.height,1)),O=document.createElement("canvas");O.width=Math.max(1,Math.round(b.width*C)),O.height=Math.max(1,Math.round(b.height*C));let W=O.getContext("2d");return W?(W.drawImage(b,0,0,O.width,O.height),O.toDataURL("image/jpeg",.82)):null},getQualityEvidence(){let p=re.stats(),b=R.canvas.clientWidth||1,C=R.canvas.clientHeight||1,O=o.bounds.center,W=ge(w.camera.projectionViewMatrix,[O[0],o.bounds.box.min[1],O[2]],b,C),J=ge(w.camera.projectionViewMatrix,[O[0],o.bounds.box.max[1],O[2]],b,C),Q=o.bounds.box,ue=[Q.min[0],Q.max[0]].flatMap(G=>[Q.min[1],Q.max[1]].flatMap(pe=>[Q.min[2],Q.max[2]].map(ae=>ge(w.camera.projectionViewMatrix,[G,pe,ae],b,C)))).filter(G=>Number.isFinite(G.x)&&Number.isFinite(G.y)&&Number.isFinite(G.depth)),Pe=ue.length?(()=>{let G=Math.min(...ue.map(ie=>ie.x)),pe=Math.max(...ue.map(ie=>ie.x)),ae=Math.min(...ue.map(ie=>ie.y)),at=Math.max(...ue.map(ie=>ie.y)),it=Math.max(0,G),Ge=Math.min(b,pe),Be=Math.max(0,ae),st=Math.min(C,at),We=Math.max(0,Ge-it),Te=Math.max(0,st-Be);return{box:{x:it,y:Be,width:We,height:Te},horizontalFillRatio:We/b,verticalFillRatio:Te/C,visibleAreaRatio:We*Te/(b*C),clippedEdges:[...ae<0?["top"]:[],...pe>b?["right"]:[],...at>C?["bottom"]:[],...G<0?["left"]:[]]}})():void 0,Ae=String(R.gl.getParameter(R.gl.VERSION)??"");return{viewport:{width:b,height:C},context:{webgl2:/webgl\s*2/i.test(Ae),lost:M},frame:{rendered:p.rendered,idle:p.idle},camera:{position:[w.camera.position.x,w.camera.position.y,w.camera.position.z],distance:w.currentDistance,verticalFovDeg:w.fovY},scene:{seatCount:o.seatCount,floorCount:o.floors.length,zoneCount:o.zones.length,sectionCount:o.sections.length,authoredRelief:v,renderedVerticalSpanM:Math.max(0,o.bounds.box.max[1]-o.bounds.box.min[1]),projectedReliefPx:W.visible&&J.visible?Math.abs(W.y-J.y):0},labels:K.qualityEvidence(),framing:Pe,...He?{seatView:{fovDeg:w.camera.fov,stop:He}}:{}}},getQualityReport(){return Kt(_t.getQualityEvidence())},loseContextForTest(){R.simulateContextLossCycle()},floors(){return o.floors},focusFloor(p){if(p!==null&&!o.floors.some(C=>C.index===p))return!1;let b=p??-1;if(Y(p!==null),rt(!1),Br(b),Ne("orbit"),p===null)j.cancel(),Oe()?w.frame(o.bounds,!1,k,n.portraitOverviewCrop===!0,H):w.frameSoft(o.bounds,k,n.portraitOverviewCrop===!0,H);else{let C=o.floors[p];if(C.seatCount>0){j.cancel();let O=C.focalWorld[0]-C.center[0],W=C.focalWorld[2]-C.center[2],J=Math.hypot(O,W)>C.radius*.12?Math.atan2(O,W):k;w.frame({center:C.center,radius:C.radius,box:C.box},!1,J,!1,{polarDeg:58,margin:1.12})}}return re.requestRender(),!0},zones(){return o.zones},focusZone(p){let b=o.zones.find(J=>J.id===p);if(!b||b.seatCount===0)return!1;Y(!1),rt(!1),j.cancel(),Ne("orbit"),X(null),n.onSectionFocusChange?.(null);let C=b.focalWorld[0]-b.center[0],O=b.focalWorld[2]-b.center[2],W=Math.hypot(C,O)>b.radius*.12?Math.atan2(C,O):void 0;return w.frame({center:b.center,radius:b.radius*1.25},!1,W),re.requestRender(),!0},sections(){return o.sections},focusSection(p){return Pn(p)},rows(p){return p?o.rows.filter(b=>b.sectionId===p):o.rows},seatsInRow(p){return e.seats.filter(b=>b.rowId===p).map(b=>({id:b.id,label:b.displayLabel||b.label}))},focusRow(p){let b=o.rows.find(C=>C.id===p);return!b||b.seatCount===0?!1:(Y(!0),rt(!1),j.cancel(),Ne("pan"),b.sectionId&&(X(b.sectionId),n.onSectionFocusChange?.(b.sectionId)),w.frame({center:b.center,radius:Math.max(2.5,b.radius*.65)}),re.requestRender(),!0)},setReducedMotionForTest(p){T=p},dispose(){S=!0,le?.dispose(),un(!1),Ft(),It.remove(),zr.remove(),wn(),q?.dispose(),re.stop(),K.dispose(),dn?.disconnect(),F&&(F.dispose(),F=null),V(),se(),R.canvas.removeEventListener("pointerdown",xe.onDown),R.canvas.removeEventListener("pointermove",xe.onMove),R.canvas.removeEventListener("pointerup",xe.onUp),R.canvas.removeEventListener("pointercancel",xe.onUp),R.canvas.removeEventListener("pointermove",ot),R.canvas.removeEventListener("pointerdown",ot),R.canvas.removeEventListener("pointerleave",hn),we&&cancelAnimationFrame(we),w.dispose(),x&&x.dispose(),c&&c.dispose(),c=null,g?.dispose(),g=null,x=null,R.dispose()}};return i.opened(o.seatCount,v,e.prepared?.buildMs??performance.now()-r,e.prepared?.source??"inline"),_t}export{Va as VENUE3D_QUALITY_REPORT_VERSION,Ur as autoVenue3d,Xe as buildSceneModel,kt as estimateVenue3D,Kt as inspectVenue3DQualityEvidence,zc as mountVenue3D,is as prepareVenue3D,ss as prepareVenue3DFromChart};
915
+ void main(){ if(vDim>0.5) discard; vec4 c=texture(uImage,vUv); if(c.a<0.01) discard; fragColor=c; }`,uniforms:{uImage:{value:ue},uFocusFloor:{value:-1}},transparent:!1,depthTest:!0,depthWrite:!0,cullFace:!1});let q=new ot(t,{geometry:ne,program:re});q.frustumCulled=!1,q.setParent(n),me.screenProgram=re,j=!0,me.drawCalls=3+(B?1:0)+1},z.src=he.contentImageUrl}return me}import{Mesh as nn,RenderTarget as Ei,Transform as on}from"ogl";function Ci(t,e,n){let r=t+(e<<8)+(n<<16);return r===0?-1:r-1}function Qo(t,e,n,r,a,o){let i=-1,s=1/0;for(let l=0;l<n;l++)for(let c=0;c<e;c++){let d=(l*e+c)*4,h=Ci(t[d],t[d+1],t[d+2]);if(h<0||h>=o)continue;let p=c-r,f=l-a,u=p*p+f*f;u<s&&(s=u,i=h)}return i}function Zo(t,e,n,r,a,o){let i=t-n.left,s=e-n.top,l=Math.round(i*r),c=Math.round((n.height-s)*r);return{x:Math.max(0,Math.min(a-1,l)),y:Math.max(0,Math.min(o-1,c))}}var Ri=["uSeatRadius","uSeatScale","uMinPixels","uPixelToWorld"],St=class{constructor(e,n,r,a,o){this.seatScene=new on;this.chairScene=new on;this.solidScene=new on;this.target=null;this.restoreClear=[0,0,0];this.renderer=e,this.gl=e.gl,this.maxIndex=o,this.seatProg=Oo(this.gl),this.chairProg=zo(this.gl),this.depthProg=No(this.gl);let i=new nn(this.gl,{geometry:n,program:this.seatProg});i.frustumCulled=!1,i.setParent(this.seatScene);let s=new nn(this.gl,{geometry:r,program:this.chairProg});s.frustumCulled=!1,s.setParent(this.chairScene);let l=new nn(this.gl,{geometry:a,program:this.depthProg});l.frustumCulled=!1,l.setParent(this.solidScene)}setRoomCentre(e){this.depthProg.uniforms.uRoomCentre.value.set(e??[0,0])}setRestoreClear(e){this.restoreClear=[e[0],e[1],e[2]]}syncFromSeatProgram(e){for(let a of Ri)this.seatProg.uniforms[a].value=e.uniforms[a].value;let n=e.uniforms.uFocusFloor.value;this.seatProg.uniforms.uFocusFloor.value=n,this.chairProg.uniforms.uFocusFloor.value=n,this.depthProg.uniforms.uFocusFloor.value=n;let r=e.uniforms.uSeeThrough?.value;if(r)for(let a of[this.seatProg,this.chairProg,this.depthProg])a.uniforms.uSeeThrough.value=r}ensureTarget(){let e=this.gl.drawingBufferWidth,n=this.gl.drawingBufferHeight;return this.target&&(this.target.width!==e||this.target.height!==n)&&this.destroyTarget(),this.target||(this.target=new Ei(this.gl,{width:e,height:n,depth:!0})),this.target}destroyTarget(){if(!this.target)return;let e=this.gl;this.target.buffer&&e.deleteFramebuffer(this.target.buffer);for(let n of this.target.textures??[])n.texture&&e.deleteTexture(n.texture);this.target.depthBuffer&&e.deleteRenderbuffer(this.target.depthBuffer),this.target=null}pick(e,n,r,a){let o=this.gl,i=this.ensureTarget(),s=o.drawingBufferWidth,l=o.drawingBufferHeight,c=Math.max(0,n-a),d=Math.max(0,r-a),h=Math.max(1,Math.min(s,n+a+1)-c),p=Math.max(1,Math.min(l,r+a+1)-d);o.enable(o.SCISSOR_TEST),o.scissor(c,d,h,p);let[f,u,y]=this.restoreClear;o.clearColor(0,0,0,1),this.renderer.render({scene:this.solidScene,camera:e,target:i,clear:!0}),this.renderer.render({scene:this.seatScene,camera:e,target:i,clear:!1}),this.renderer.render({scene:this.chairScene,camera:e,target:i,clear:!1}),o.clearColor(f,u,y,1),o.disable(o.SCISSOR_TEST);let v=new Uint8Array(h*p*4);return this.renderer.bindFramebuffer(i),o.readPixels(c,d,h,p,o.RGBA,o.UNSIGNED_BYTE,v),this.renderer.bindFramebuffer(),Qo(v,h,p,n-c,r-d,this.maxIndex)}dispose(){this.destroyTarget(),this.seatProg.remove(),this.chairProg.remove(),this.depthProg.remove()}};function Jo(t,e){let n=[];for(let r of e)t.has(r.seatId)?t.set(r.seatId,Nn(r.state)):n.push(r);return n}function er(t,e,n){let r=new Set;for(let i of e)(t.has(i)||n(i)!==void 0)&&r.add(i);let a=new Map(t),o=[];for(let[i,s]of t)r.has(i)||(o.push({seatId:i,state:ye[s]??"available"}),a.delete(i));for(let i of r){if(a.has(i))continue;let s=n(i);s!==void 0&&(a.set(i,s),o.push({seatId:i,state:"selected"}))}return{updates:o,next:a}}import{Quat as rt,Vec3 as Ii}from"ogl";function Ti(t,e){return[t[0]-e[0],t[1]-e[1],t[2]-e[2]]}function tr(t,e){return[t[0]+e[0],t[1]+e[1],t[2]+e[2]]}function _i(t,e){return[t[0]*e,t[1]*e,t[2]*e]}function nr(t){let e=Math.hypot(t[0],t[1],t[2]);return e>1e-6?[t[0]/e,t[1]/e,t[2]/e]:[0,0,0]}function rn(t){let e=Math.max(0,Math.min(1,t));return e*e*e*(e*(e*6-15)+10)}function an(t,e){return Math.max(0,Math.min(1,t+e))}function or(t,e){let n=t.length;if(n===0)return[0,0,0];if(n===1)return[...t[0]];let r=Math.max(0,Math.min(1,e)),a=n-1,o=Math.floor(r*a);o>=a&&(o=a-1);let i=r*a-o,s=t[Math.max(0,o-1)],l=t[o],c=t[o+1],d=t[Math.min(n-1,o+2)],h=i*i,p=h*i,f=[0,0,0];for(let u=0;u<3;u++)f[u]=.5*(2*l[u]+(-s[u]+c[u])*i+(2*s[u]-5*l[u]+4*c[u]-d[u])*h+(-s[u]+3*l[u]-3*c[u]+d[u])*p);return f}function sn(t,e,n,r,a){let o=nr(Ti(e,n));o[0]===0&&o[1]===0&&o[2]===0&&(o=[0,0,1]);let i=tr(tr(e,_i(o,2.5)),[0,1.5,0]),s=[e[0]-r[0],0,e[2]-r[2]],l=nr(s);l[0]===0&&l[2]===0&&(l=[o[0],0,o[2]]);let c=Math.max(1,a),d=[r[0]+l[0]*c*1.3,r[1]+c*.75,r[2]+l[2]*c*1.3];return{waypoints:[t,d,i],finalPos:i}}function ln(t,e,n=35,r=28){let a=rn(e),o=or(t,a),i=rn(Math.max(0,Math.min(1,(e-.66)/.34)));return{pos:o,fov:n+(r-n)*i,eased:a}}function sr(t,e,n){let r=t.position.clone(),a=new rt().copy(t.quaternion);t.position.set(e[0],e[1],e[2]),t.lookAt(new Ii(n[0],n[1],n[2]));let o=new rt().copy(t.quaternion);return t.position.copy(r),t.quaternion.copy(a),o}var wt=class{constructor(e){this.active=!1;this.waypoints=[];this.startQuat=new rt;this.endQuat=new rt;this.outQuat=new rt;this.startTime=0;this.duration=2500;this.endFov=28;this.resolveFn=null;this.camera=e}start(e,n,r,a=2500,o=28){return this.settle(),this.waypoints=e,this.startQuat.copy(n),this.endQuat.copy(r),this.duration=a,this.endFov=o,this.startTime=performance.now(),this.active=!0,new Promise(i=>{this.resolveFn=i})}update(e){if(!this.active)return!1;let n=Math.min(1,(e-this.startTime)/this.duration),{pos:r,fov:a,eased:o}=ln(this.waypoints,n,35,this.endFov);return this.camera.position.set(r[0],r[1],r[2]),this.outQuat.copy(this.startQuat).slerp(this.endQuat,an(o,.15)),this.camera.quaternion.copy(this.outQuat),this.camera.fov=a,this.camera.updateProjectionMatrix(),n>=1?(this.settle(),!1):!0}cancel(){this.settle()}settle(){this.active=!1;let e=this.resolveFn;this.resolveFn=null,e&&e()}};var lr=On,Di=.12,Fi=.25,Li=1.5;function cr(t,e,n=0,r,a){let o=[e.x*Ie,n+Li,e.y*Ie],i=a?[a[0],a[1],a[2]]:o,s=t[1],l=Number.isFinite(s)?s+lr:Number.isFinite(r)?n+r:n+lr,c=o[0]-t[0],d=o[2]-t[2],h=Math.hypot(c,d),p=h>.001?Math.min(Di,h*Fi):0,f=h>.001?c/h:0,u=h>.001?d/h:0;return{eye:[t[0]+f*p,l,t[2]+u*p],focal:i}}var Pe=Math.PI/180,Vi=45,cn=80,Mt=70,ki=1,Oi=.99;function zi(t,e){if(!(t<ki))return cn;if(!(Number.isFinite(e)&&e>0))return Mt;let n=2*Math.atan(e/(2*Pt*Oi)/Math.max(.05,t))/Pe;return Math.max(Mt,Math.min(cn,n))}var Ni=.25,Pt=1,Hi=.25,Gi=12*Pe,Bi=.2,Wi=1.5,ur=.8,dr=6,br=1.9,Ui=2/3,Yi=.12,Xi=.9,qi=1.2,ji=2,gr=.05,Ki=6;function yr(t,e,n=0){if(!t.length)return{min:[e[0]-6,n,e[2]-6],max:[e[0]+6,Math.max(n+ur,e[1]),e[2]+6]};let r=1/0,a=-1/0,o=1/0,i=-1/0,s=n;for(let u of t)r=Math.min(r,u.cx-u.halfX),a=Math.max(a,u.cx+u.halfX),o=Math.min(o,u.cz-u.halfZ),i=Math.max(i,u.cz+u.halfZ),s=Math.max(s,u.y);let l=a-r,c=i-o,d=Math.max(l,Math.min(c,dr))/2,h=Math.max(c,Math.min(l,dr))/2,p=(r+a)/2,f=(o+i)/2;return{min:[p-d,n,f-h],max:[p+d,Math.max(n+ur,s),f+h]}}function $i(t){return{min:[t.min[0],t.min[1],t.min[2]],max:[t.max[0],t.max[1]+br,t.max[2]]}}function un(t){let e=t.max[1];return[(t.min[0]+t.max[0])/2,Math.max(t.min[1]+Wi,e+Bi,e+br*Ui),(t.min[2]+t.max[2])/2]}function xr(t,e){let n=t[0]-e[0],r=t[2]-e[2],a=Math.hypot(n,r);return a<.001?{x:0,z:1}:{x:n/a,z:r/a}}function mr(t,e,n){let r=e[0]-t[0],a=e[1]-t[1],o=e[2]-t[2],i=Math.hypot(r,a,o)||1;r/=i,a/=i,o/=i;let s=-o,l=r,c=Math.hypot(s,l);if(c<1e-6)return 1/0;s/=c,l/=c;let d=1/0,h=-1/0;for(let p=0;p<8;p++){let f=(p&1?n.max[0]:n.min[0])-t[0],u=(p&2?n.max[1]:n.min[1])-t[1],y=(p&4?n.max[2]:n.min[2])-t[2],v=Math.max(gr,f*r+u*a+y*o),M=(f*s+y*l)/v;M<d&&(d=M),M>h&&(h=M)}return h-d}function hr(t,e,n){let r=e[0]-t[0],a=e[1]-t[1],o=e[2]-t[2],i=Math.hypot(r,a,o)||1;r/=i,a/=i,o/=i;let s=-o,l=r,c=Math.hypot(s,l);if(c<1e-6)return 1/0;s/=c,l/=c;let d=-l*a,h=l*r-s*o,p=s*a,f=1/0,u=-1/0;for(let y=0;y<8;y++){let v=(y&1?n.max[0]:n.min[0])-t[0],M=(y&2?n.max[1]:n.min[1])-t[1],I=(y&4?n.max[2]:n.min[2])-t[2],S=Math.max(gr,v*r+M*a+I*o),T=(v*d+M*h+I*p)/S;T<f&&(f=T),T>u&&(u=T)}return u-f}function At(t,e){return Math.tan(t*Pe/2)*Math.max(.05,e)}function pr(t,e,n){let r=zi(n,t),a=l=>Math.max(Vi,Math.min(r,l)),o=l=>2*Math.atan(l)/Pe,i=Number.isFinite(t)&&t>0?a(o(t/(2*Ni)/Math.max(.05,n))):r;if(!(Number.isFinite(e)&&e>0))return i;let s=Math.min(i,a(o(e/(2*Yi))));return t/(2*At(s,n))>Pt?i:s}function Sr(t,e,n,r={}){let a=un(e),o=[t[0],t[1],t[2]],i=0,s=0,l=u=>{if(!(u>0))return;let y=xr(o,a);o[0]+=y.x*u,o[2]+=y.z*u,s+=u},c=r.preserveEye?0:e.max[1]+Hi-o[1];c>0&&(o[1]+=c,i=c,l(c/Math.tan(Gi)));let d=$i(e),h=mr(o,a,e),p=pr(h,hr(o,a,d),n),f=h/(2*At(p,n));for(let u=0;!r.preserveEye&&u<Ki&&f>Pt;u++){let y=Math.max(1,Math.hypot(o[0]-a[0],o[2]-a[2])),v=Number.isFinite(f)?f/Pt:2;l(Math.min(60,y*(Math.min(4,v)-1)+.5)),h=mr(o,a,e),p=pr(h,hr(o,a,d),n),f=h/(2*At(p,n))}return{eye:o,focal:a,fov:p,raisedM:i,pulledBackM:s,stageFrameWidth:f}}function Qi(t,e,n){let r=Math.tan(e*Pe/2),a=At(e,n);return Math.max(1,t/Math.max(.05,Math.min(r,a)))}var Zi=.7,fr=.5,Ji=.8;function vr(t,e,n){let r=[e[0]-t[0],e[1]-t[1],e[2]-t[2]],a=[n[0]-t[0],n[1]-t[1],n[2]-t[2]],o=r[0]*a[0]+r[1]*a[1]+r[2]*a[2],i=Math.hypot(r[0],r[1],r[2])*Math.hypot(a[0],a[1],a[2])||1;return Math.acos(Math.max(-1,Math.min(1,o/i)))/Pe}function es(t,e,n){let r=c=>{let d=Math.hypot(c[0],c[1],c[2])||1;return[c[0]/d,c[1]/d,c[2]/d]},a=[e[0]-t[0],e[1]-t[1],e[2]-t[2]],o=Math.hypot(a[0],a[1],a[2]),i=r(a),s=r([n[0]-t[0],n[1]-t[1],n[2]-t[2]]),l=r([0,1,2].map(c=>i[c]*(1-fr)+s[c]*fr));return[t[0]+l[0]*o,t[1]+l[1]*o,t[2]+l[2]*o]}function wr(t,e){let{aspect:n,venue:r}=e,a=t.focal,o=xr(t.eye,a),i=y=>(y[0]-a[0])*o.x+(y[2]-a[2])*o.z,s=[{name:"seat",eye:t.eye,focal:a,fov:t.fov}],l=ji*(e.rowDepthM??Xi),c=[t.eye[0]+o.x*l,t.eye[1]+qi,t.eye[2]+o.z*l],d=[t.eye[0],t.eye[1]-Zi,t.eye[2]],h=es(c,a,d);s.push({name:"row",eye:c,focal:h,fov:Math.min(cn,Math.max(t.fov,2*Math.max(vr(c,h,d),vr(c,h,a))/Ji))});let p=(y,v,M,I)=>{let S=Qi(M,t.fov,n)*1.08,T=S*Math.sin(I*Pe),F=Number.isFinite(e.seatingTopY)?e.seatingTopY+2:-1/0,D=Math.max(T,F-v[1]),L=S*Math.cos(I*Pe);return{name:y,eye:[v[0]+o.x*L,v[1]+D,v[2]+o.z*L],focal:v,fov:t.fov}};e.section&&e.section.radius>0&&s.push(p("section",e.section.center,e.section.radius,35)),s.push(p("venue",r.center,Math.max(1,r.radius),40));let f=[],u=-1/0;for(let y of s){let v=i(y.eye);f.length&&v<=u+.5||(f.push(y),u=v)}return f}import{Vec3 as ts}from"ogl";var it=Math.PI/180,dn=320,Mr=70*it,ns=32*it,os=24*it,Pr=.0026,rs=.22,as=.006,is=180,ss=900,ls=1100,cs=4,ve=(t,e,n)=>Math.max(e,Math.min(n,t)),Ar=t=>t<.5?4*t*t*t:1-Math.pow(-2*t+2,3)/2;function Cr(t){let{canvas:e,camera:n}=t,r=[],a=!1,o=0,i=0,s=0,l=0,c=0,d=0,h=dn,p=null,f=()=>{p&&(clearTimeout(p),p=null)},u=!1,y=[0,0],v=0,M=!1,I=null,S=null,T=new Map,F=!1,D=0,L=0,g=0,A=0,w=()=>a&&r.length?r[ve(Math.round(o),0,r.length-1)].name:null,_=()=>{let P=w();P!==I&&(I=P,t.onStopChange?.(P))},O=()=>{if(!a||!r.length)return;let P=r[ve(Math.floor(o),0,r.length-1)],B=r[ve(Math.ceil(o),0,r.length-1)],j=ve(o-Math.floor(o),0,1),X=($,ee)=>$+(ee-$)*j,ne=[X(P.eye[0],B.eye[0]),X(P.eye[1],B.eye[1]),X(P.eye[2],B.eye[2])],re=[X(P.focal[0],B.focal[0]),X(P.focal[1],B.focal[1]),X(P.focal[2],B.focal[2])],ue=re[0]-ne[0],de=re[1]-ne[1],K=re[2]-ne[2],me=Math.hypot(ue,de,K)||1,he=Math.atan2(ue,K),z=Math.asin(ve(de/me,-1,1)),J=he+i,q=ve(z+s,-80*it,80*it),oe=Math.cos(q)*me;ue=Math.sin(J)*oe,de=Math.sin(q)*me,K=Math.cos(J)*oe,n.position.set(ne[0],ne[1],ne[2]),n.fov=X(P.fov,B.fov),n.updateProjectionMatrix(),n.lookAt(new ts(ne[0]+ue,ne[1]+de,ne[2]+K)),t.onApplied?.()},C=()=>{if(!a||!r.length)return;let P=ve(Math.round(o),0,r.length-1);if(t.reducedMotion()){u=!1,o=P,O(),_(),t.requestRender();return}if(Math.abs(P-o)<.001){u=!1,_();return}l=o,c=P,d=performance.now(),h=dn,u=!0,t.requestRender()},V=P=>{!a||r.length<2||(f(),u=!1,o=ve(o+P,0,r.length-1),O(),_(),t.requestRender())},N=(P,B)=>{a&&(f(),u=!1,M=!1,i=ve(i-P*Pr,-Mr,Mr),s=ve(s-B*Pr,-os,ns),O(),t.requestRender())},W=P=>{a&&(T.set(P.pointerId,{x:P.clientX,y:P.clientY}),T.size===1?(F=!0,A=0,D=P.clientX,L=P.clientY):T.size===2&&(F=!1,g=G()))},G=()=>{let P=[...T.values()];return P.length<2?0:Math.hypot(P[0].x-P[1].x,P[0].y-P[1].y)},Y=P=>{if(!a||!T.has(P.pointerId))return;if(T.set(P.pointerId,{x:P.clientX,y:P.clientY}),T.size>=2){let X=G();g>0&&V((g-X)*as),g=X;return}if(!F)return;let B=P.clientX-D,j=P.clientY-L;D=P.clientX,L=P.clientY,A+=Math.abs(B)+Math.abs(j),!(A<=cs)&&N(B,j)},te=P=>{T.delete(P.pointerId)&&(T.size<2&&(g=0),T.size===0&&(F=!1,C()))},E=P=>{if(!a)return;P.preventDefault();let B=P.deltaMode===1?16:P.deltaMode===2?100:1,j=ve(P.deltaY*B/100,-2,2);V(j*rs),S&&clearTimeout(S),S=setTimeout(()=>{S=null,C()},is)},x=()=>{f(),a&&(a=!1,u=!1,M=!1,r=[],T.clear(),F=!1,S&&(clearTimeout(S),S=null),I!==null&&(I=null,t.onStopChange?.(null)))};return e.addEventListener("pointerdown",W),e.addEventListener("pointermove",Y),e.addEventListener("pointerup",te),e.addEventListener("pointercancel",te),e.addEventListener("wheel",E,{passive:!1}),{get active(){return a},enter(P,B=0){if(P.length<2){x();return}f(),r=P,a=!0,o=t.reducedMotion()?0:ve(B,0,P.length-1),o>0&&(p=setTimeout(()=>{p=null,a&&(l=o,c=0,d=performance.now(),h=ls,u=!0,t.requestRender())},ss)),i=0,s=0,u=!1,M=!1,I=null,O(),_(),t.requestRender()},exit:x,recentre(){return a?Math.abs(i)<1e-4&&Math.abs(s)<1e-4?!0:t.reducedMotion()?(M=!1,i=0,s=0,O(),t.requestRender(),!0):(y=[i,s],v=performance.now(),M=!0,t.requestRender(),!0):!1},update(P){if(!a)return!1;let B=!1;if(M){let j=ve((P-v)/dn,0,1),X=1-Ar(j);i=y[0]*X,s=y[1]*X,j>=1?(M=!1,i=0,s=0):B=!0}if(u){let j=ve((P-d)/h,0,1);o=l+(c-l)*Ar(j),j>=1?(u=!1,o=c,_()):B=!0}return O(),B},currentStop:w,dispose(){x(),e.removeEventListener("pointerdown",W),e.removeEventListener("pointermove",Y),e.removeEventListener("pointerup",te),e.removeEventListener("pointercancel",te),e.removeEventListener("wheel",E)}}}function Er(t){return t.flying?"cinematic":t.panoramaMounted?"panorama":t.seatViewActive?"seatView":"orbit"}var mn=null;function Rr(){return mn??=import("../openPanorama-VD6PE3YZ.js").catch(t=>{throw mn=null,t}),mn}var Tr=()=>typeof performance<"u"&&performance.now?performance.now():Date.now(),Ct=class{constructor(e){this.orbitLatched=!1;this.panoramaOpenedAt=0;this.cb=e}emit(e,n){if(this.cb)try{this.cb(e,n)}catch{}}opened(e,n,r,a){this.emit("3d_opened",{seats:e,hasHeights:n,...r===void 0?{}:{buildMs:Math.round(r)},...a===void 0?{}:{prepSource:a}})}orbitEngaged(){this.orbitLatched||(this.orbitLatched=!0,this.emit("3d_orbit_engaged"))}seatPicked(e,n){this.emit("3d_seat_picked",{seatId:e,sectionId:n})}cinematicPlayed(e){this.emit("3d_cinematic_played",{durationMs:e,reducedMotion:!1})}cinematicSkipped(){this.emit("3d_cinematic_skipped",{reducedMotion:!0})}cinematicCancelled(){this.emit("3d_cinematic_cancelled")}panoramaOpened(){this.panoramaOpenedAt=Tr(),this.emit("3d_panorama_opened")}panoramaClosed(){let e=this.panoramaOpenedAt?Math.round(Tr()-this.panoramaOpenedAt):0;this.panoramaOpenedAt=0,this.emit("3d_panorama_closed",{viewMs:e})}panoramaFailed(e,n){this.emit("3d_panorama_failed",{seatId:e,phase:n})}panoramaFallback(e){this.emit("3d_panorama_fallback",{seatId:e})}contextLost(){this.emit("3d_context_lost")}contextRestored(){this.emit("3d_context_restored")}};function _r(t){let e=t.style.position;return getComputedStyle(t).position!=="static"?()=>{}:(t.style.position="relative",()=>{t.style.position==="relative"&&(t.style.position=e)})}function Ir(t){let{container:e,model:n,opts:r,expandedSeatById:a,seatIdsByRow:o,isNarrow:i}=t,s=null,l=()=>{if(!s)return;let h=i();Object.assign(s.style,h?{left:"12px",right:"12px",bottom:"70px",transform:"none",justifyContent:"center"}:{left:"50%",right:"auto",bottom:"18px",transform:"translateX(-50%)",justifyContent:"initial"})},c=()=>{s?.remove(),s=null};return{show:(h,p,f=!1)=>{if(c(),t.isDisposed())return null;let u=document.createElement("div");u.setAttribute("role","group"),Object.assign(u.style,{position:"absolute",display:"flex",flexDirection:"column",alignItems:"center",gap:"6px",zIndex:"4"});let y=r.chrome?.caption!==!1,v=r.chrome?.seatStepper!==!1;if(!y&&!v)return null;let M=a.get(h),I=M?.sectionId?n.sections.find(w=>w.id===M.sectionId):void 0,S=M?.label??h;u.setAttribute("aria-label",`Explore views near ${I?.label?`${I.label}, `:""}seat ${S}`);let T=document.createElement("span");T.textContent=r.seatViewCaption?.(h)??["Live 3D seat view",I?.label,S].filter(Boolean).join(" \xB7 "),Object.assign(T.style,{maxWidth:"min(70vw, 560px)",padding:"5px 10px",borderRadius:"999px",overflow:"hidden",color:"#d9e3f5",background:"rgba(12,18,32,0.72)",font:"600 11px/1.2 inherit",textOverflow:"ellipsis",whiteSpace:"nowrap",backdropFilter:"blur(6px)"}),y&&u.appendChild(T);let F=document.createElement("div");Object.assign(F.style,{display:"flex",alignItems:"center",justifyContent:"center",gap:"6px"}),u.appendChild(F);let D=M?.rowId?o.get(M.rowId):void 0,L=D?.indexOf(h)??-1,g=L>=0?[D?.[L-1],D?.[L+1]]:[void 0,void 0],A=(w,_,O,C=!1)=>{let V=document.createElement("button");V.type="button",V.textContent=w,V.setAttribute("aria-label",_),Object.assign(V.style,{minHeight:"44px",padding:C?"10px 16px":"10px",borderRadius:"999px",background:"rgba(12,18,32,0.78)",color:"#eef1f8",border:"1px solid rgba(150,165,205,0.4)",backdropFilter:"blur(6px)",font:"600 13px/1 inherit",cursor:"pointer",whiteSpace:"nowrap"}),C||(V.style.minWidth="44px"),C&&(V.dataset.panoramaTrigger=""),V.addEventListener("click",O),F.appendChild(V)};if(v&&g[0]){let w=a.get(g[0])?.label??g[0];A("\u2039",`View previous seat ${w}`,()=>{t.flyToSeat(g[0])})}if(v&&r.getSeatView){let w=r.seatViewActionLabel?.(h)??"Open 360\xB0 panorama";A(f?`\u21BB Retry ${w}`:`\u25C9 ${w}`,`${f?"Retry":w} from seat ${S}`,()=>{if(t.isDisposed()||p!==t.flightGen()){c();return}c(),t.openPanorama(h,400,p)},!0)}if(v&&g[1]){let w=a.get(g[1])?.label??g[1];A("\u203A",`View next seat ${w}`,()=>{t.flyToSeat(g[1])})}return!F.childElementCount&&!y?null:(e.appendChild(u),s=u,l(),u)},remove:c,layout:l}}var us={rotate:"Drag to rotate the venue",move:"Drag to move the venue",zoomIn:"Zoom in",zoomOut:"Zoom out",fitView:"Show whole venue"};function Dr(t){let{container:e,orbit:n,isNarrow:r}=t,a={...us,...t.labels??{}},o=(S,T)=>{S.setAttribute("aria-label",T),S.title=T},i=document.createElement("div"),s=!1;i.className="sl-3d-navigation-controls",Object.assign(i.style,{position:"absolute",right:"14px",bottom:"14px",display:"flex",zIndex:"4",flexDirection:"column",alignItems:"flex-end",gap:"7px"});let l=document.createElement("div");l.setAttribute("role","group"),l.setAttribute("aria-label","3D drag mode"),Object.assign(l.style,{display:"flex",flexDirection:"column",gap:"6px",alignItems:"flex-end"});let c=document.createElement("div");c.setAttribute("role","group"),c.setAttribute("aria-label","3D view controls"),Object.assign(c.style,{display:"flex",flexDirection:"column",gap:"6px",alignItems:"flex-end"});let d=document.createElement("button");d.type="button",d.textContent="\u21BB",o(d,a.rotate);let h=document.createElement("button");h.type="button",h.textContent="\u2725",o(h,a.move);let p=document.createElement("button");p.type="button",p.textContent="\u2212",o(p,a.zoomOut);let f=document.createElement("button");f.type="button",f.textContent="+",o(f,a.zoomIn);for(let S of[d,h,p,f])S.className="sl-3d-icon-control",Object.assign(S.style,{width:"44px",minWidth:"44px",minHeight:"44px",padding:"9px",border:"1px solid rgba(150,165,205,0.35)",borderRadius:"999px",color:"#c9d4ea",background:"rgba(12,18,32,0.82)",font:"600 17px/1 inherit",backdropFilter:"blur(6px)",cursor:"pointer",whiteSpace:"nowrap"});l.append(d,h),c.append(f,p);let u=S=>{n.setPrimaryDragMode(S);let T=S==="orbit";d.setAttribute("aria-pressed",String(T)),h.setAttribute("aria-pressed",String(!T)),d.style.background=T?"rgba(96,110,150,0.68)":"rgba(12,18,32,0.82)",h.style.background=T?"rgba(12,18,32,0.82)":"rgba(96,110,150,0.68)",i.title=T?`${a.rotate} \xB7 ${a.move} with Shift`:`${a.move} \xB7 ${a.rotate} with Shift`};d.addEventListener("click",()=>u("orbit")),h.addEventListener("click",()=>u("pan"));let y=()=>{let{atMin:S,atMax:T}=n.dollyLimitState();f.disabled!==S&&(f.disabled=S),p.disabled!==T&&(p.disabled=T)};p.addEventListener("click",()=>{n.zoomBy($e),y()}),f.addEventListener("click",()=>{n.zoomBy(Fe),y()}),i.append(l,c),u("orbit"),e.appendChild(i);let v=t.enabled!==!1,M=()=>{let S=r();i.style.display=s||!v?"none":"flex",i.style.right=S?"12px":"14px",i.style.bottom=S?"calc(env(safe-area-inset-bottom, 0px) + 76px)":"14px",l.style.display=S?"none":"flex",f.style.display=S?"none":"",p.style.display=S?"none":""};return M(),{element:i,utilityControls:c,setNavigationMode:u,syncZoomLimits:y,setSeatViewLocked:S=>{s=S,n.setInteractionEnabled(!S),M()},seatViewLocked:()=>s,layout:M}}var ds=.5,Fr=12,Lr=20,ms=28;function hs(t,e,n){return!(t>0)||!(n>0)?0:ds*n/(2*t*Math.tan(e*Math.PI/360))}function Vr(t){let{glctx:e,orbit:n,model:r,seats:a,opts:o,cinematic:i,analytics:s,seatIdByIndex:l,sectionIdBySeatId:c,tapSlop:d,tapMs:h,cancelFlight:p,focusSectionCamera:f,setSelection:u,ensureSeatView:y}=t,v=0,M=0,I=0,S=-1,T=!1,F=!1,D=C=>{t.seatViewLocked()||S===-1&&(S=C.pointerId,v=C.clientX,M=C.clientY,I=performance.now(),T=!1,F=i.active,i.active&&(s.cinematicCancelled(),p(),o.onViewTargetChange?.(null)))},L=C=>{C.pointerId===S&&Math.hypot(C.clientX-v,C.clientY-M)>d&&(T=!0)},g=(C,V,N,W,G)=>{let Y=e.canvas.getBoundingClientRect(),te=e.canvas.clientWidth||Y.width||1,E=e.canvas.clientHeight||Y.height||1,x=C-Y.left,P=V-Y.top,B=W*W,j=-1,X=B,ne=1/0;for(let re of a){if(N&&re.sectionId!==N)continue;let ue=r.seats.idToIndex.get(re.id);if(ue===void 0)continue;if(G){let J=Math.round(r.seats.iState[ue]??0);if(J!==0&&J!==3)continue}let de=ue*3,K=xe(n.camera.projectionViewMatrix,[r.seats.iPosition[de],r.seats.iPosition[de+1]+.55,r.seats.iPosition[de+2]],te,E);if(!K.visible)continue;let me=K.x-x,he=K.y-P,z=me*me+he*he;(z<X||Math.abs(z-X)<1&&K.depth<ne)&&(j=ue,X=z,ne=K.depth)}return j},A=(C,V)=>{let N=t.gpu(),W=t.pick();if(!N||!W)return-1;W.syncFromSeatProgram(N.seatProgram);let G=e.canvas.getBoundingClientRect(),Y=e.renderer.dpr,{x:te,y:E}=Zo(C,V,G,Y,e.gl.drawingBufferWidth,e.gl.drawingBufferHeight),x=Math.max(2,Math.round(8*Y));return W.pick(n.camera,te,E,x)},w=()=>e.canvas.clientHeight||e.canvas.getBoundingClientRect().height,_=(C,V=Fr)=>{let N=n.camera?.position;if(!N)return!1;let W=C*3,G=Math.hypot(N.x-r.seats.iPosition[W],N.y-r.seats.iPosition[W+1],N.z-r.seats.iPosition[W+2]);return hs(G,n.fovY,w())>=V};return{onDown:D,onMove:L,onUp:C=>{if(C.pointerId!==S)return;let V=!T&&performance.now()-I<h;if(S=-1,F){F=!1;return}let N=t.gpu(),W=t.pick();if(!V||!N||!W)return;let G=A(C.clientX,C.clientY),Y=C.pointerType==="touch"||C.pointerType==="pen",te=Y?Lr:Fr,E=G>=0&&_(G,te),x=!1;if(t.focusedSectionId()&&G>=0){let j=l[G],X=j?c.get(j):void 0;if(X&&X!==t.focusedSectionId()&&f(X,{keepCamera:E})){if(!E)return;x=!0}}if(t.focusedSectionId()&&G<0&&(G=g(C.clientX,C.clientY,t.focusedSectionId(),44,!1)),t.focusedSectionId()&&G<0){let j=g(C.clientX,C.clientY,null,72,!1),X=j>=0?l[j]:void 0,ne=X?c.get(X):void 0;if(ne&&ne!==t.focusedSectionId()&&f(ne))return}if(!t.focusedSectionId()){G<0&&(G=g(C.clientX,C.clientY,null,42,!1));let j=G>=0?l[G]:void 0,X=j?c.get(j):void 0;if(X&&f(X,{keepCamera:E})){if(!E)return;x=!0}}if(G<0||G>=l.length){t.selection().size&&(u([]),o.onViewTargetChange?.(null));return}let P=l[G];if(Y&&t.focusedSectionId()&&!x&&!_(G,Lr)){t.focusSeatCamera(P,{seatPx:ms,viewportHeightPx:w()});return}let B=ye[Math.round(r.seats.iState[G]??0)]??"available";if(B!=="available"&&B!=="selected"){o.onSeatInspect?.(P,B);return}if(t.selection().has(P)&&t.selection().size===1){u([]),o.onViewTargetChange?.(null),o.onSeatPick?.(P);return}u([P]),y(P),s.seatPicked(P,c.get(P)),o.onSeatPick?.(P)}}}var Et=class{constructor(e,n){this.minX=0;this.minZ=0;this.cell=1;this.cols=1;this.rows=1;this.cellStart=null;this.cellItems=null;this.iPosition=e,this.count=n}ensureGrid(){if(this.cellStart||this.count===0)return;let e=this.iPosition,n=1/0,r=1/0,a=-1/0,o=-1/0;for(let f=0;f<this.count;f++){let u=e[f*3],y=e[f*3+2];u<n&&(n=u),u>a&&(a=u),y<r&&(r=y),y>o&&(o=y)}let i=Math.max(a-n,.001),s=Math.max(o-r,.001);this.cell=Math.max(Math.sqrt(i*s*4/this.count),.25),this.cols=Math.max(1,Math.ceil(i/this.cell)+1),this.rows=Math.max(1,Math.ceil(s/this.cell)+1),this.minX=n,this.minZ=r;let l=this.cols*this.rows,c=new Int32Array(l+1),d=f=>{let u=Math.min(this.cols-1,Math.max(0,Math.floor((e[f*3]-n)/this.cell)));return Math.min(this.rows-1,Math.max(0,Math.floor((e[f*3+2]-r)/this.cell)))*this.cols+u};for(let f=0;f<this.count;f++)c[d(f)+1]++;for(let f=0;f<l;f++)c[f+1]+=c[f];let h=new Int32Array(this.count),p=c.slice(0,l);for(let f=0;f<this.count;f++)h[p[d(f)]++]=f;this.cellStart=c,this.cellItems=h}gather(e,n,r,a,o){this.ensureGrid();let i=this.cellStart,s=this.cellItems;if(!i||!s)return 0;let l=a.length,c=r*r,d=Math.floor((e-this.minX)/this.cell),h=Math.floor((n-this.minZ)/this.cell),p=Math.ceil(r/this.cell)+1,f=this.iPosition,u=0;for(let y=0;y<=p&&u<l;y++){let v=h-y,M=h+y,I=d-y,S=d+y;for(let T=v;T<=M&&u<l;T++){if(T<0||T>=this.rows)continue;let F=T===v||T===M;for(let D=I;D<=S&&u<l;D++){if(!F&&D!==I&&D!==S){D=S-1;continue}if(D<0||D>=this.cols)continue;let L=T*this.cols+D;for(let g=i[L],A=i[L+1];g<A&&u<l;g++){let w=s[g],_=f[w*3]-e,O=f[w*3+2]-n,C=o===void 0?0:f[w*3+1]-o;_*_+C*C+O*O<=c&&(a[u++]=w)}}}}return u}};var Rt=class{constructor(e){this.ctx=e;this.detailVisible=!1;this.seatDetailMix=0;this.structureDetailMix=0;this.nearBuf=new Int32Array(bt);this.lastGatherX=1/0;this.lastGatherZ=1/0;this.lastGatherY=1/0;this.nearIndex=new Et(e.model.seats.iPosition,e.model.seats.count)}forceRegather(){this.lastGatherX=1/0}setDetailEnabled(e){let n=this.ctx.gpu();e||(this.detailVisible=!1),this.lastGatherX=1/0,this.lastGatherZ=1/0,!e&&n?.nearSeatCount()&&n.setNearSeats(this.nearBuf,0)}update(e){let{model:n}=this.ctx,r=this.ctx.gpu();if(!r)return;if(!e){r.nearSeatCount()&&r.setNearSeats(this.nearBuf,0);return}let a=this.ctx.orbit().camera.position;if(Math.hypot(a.x-this.lastGatherX,a.y-this.lastGatherY,a.z-this.lastGatherZ)<$t)return;if(this.lastGatherX=a.x,this.lastGatherY=a.y,this.lastGatherZ=a.z,Math.hypot(a.x-n.bounds.center[0],a.y-n.bounds.center[1],a.z-n.bounds.center[2])-n.bounds.radius>Kt){r.nearSeatCount()&&r.setNearSeats(this.nearBuf,0);return}let s=this.nearIndex.gather(a.x,a.z,Kt,this.nearBuf,a.y);s===0&&r.nearSeatCount()===0||r.setNearSeats(this.nearBuf,s)}ease(e,n,r){let a=1-Math.exp(-e*9),o=1-Math.exp(-e*20);this.seatDetailMix+=(n-this.seatDetailMix)*(n>this.seatDetailMix?a:o),this.structureDetailMix+=(r-this.structureDetailMix)*(r>this.structureDetailMix?a:o),Math.abs(n-this.seatDetailMix)<.01&&(this.seatDetailMix=n),Math.abs(r-this.structureDetailMix)<.01&&(this.structureDetailMix=r)}};function kr(t){let e=Math.max(5,t.radius),n=t.focalWorld[0]-t.center[0],r=t.focalWorld[2]-t.center[2],a=Math.hypot(n,r);if(a<e*.12)return{center:t.center,radius:e,polarDeg:48};let o=Math.min(a*.25,e*.2);return{center:[t.center[0]+n/a*o,t.center[1],t.center[2]+r/a*o],radius:e+o,polarDeg:50}}import{Quat as ps,Vec3 as fs}from"ogl";function Or(){let t="http://www.w3.org/2000/svg",e=document.createElementNS(t,"svg");e.setAttribute("viewBox","0 0 24 24"),e.setAttribute("width","18"),e.setAttribute("height","18"),e.setAttribute("aria-hidden","true"),e.setAttribute("focusable","false"),e.setAttribute("fill","none"),e.setAttribute("stroke","currentColor"),e.setAttribute("stroke-width","2"),e.setAttribute("stroke-linecap","round"),e.setAttribute("stroke-linejoin","round");let n=document.createElementNS(t,"path");return n.setAttribute("d","M8 3H5a2 2 0 0 0-2 2v3M16 3h3a2 2 0 0 0 2 2v3M8 21H5a2 2 0 0 0-2-2v-3M16 21h3a2 2 0 0 0 2-2v-3"),e.appendChild(n),e}function zr(t){let{container:e,model:n,opts:r,orbit:a,cinematic:o,analytics:i,loop:s,labelOverlay:l,stageAzimuth:c,overviewFraming:d}=t,h=0,p=-1,f=(w,_,O=28)=>{a.camera.position.set(w[0],w[1],w[2]),a.camera.lookAt(new fs(_[0],_[1],_[2])),a.camera.fov=O,a.camera.updateProjectionMatrix()},u=document.createElement("button");u.className="sl-3d-overview-control sl-3d-icon-control",u.type="button",u.replaceChildren(Or());let y=r.navLabels?.fitView??"Show whole venue";u.setAttribute("aria-label",y),u.title=y,Object.assign(u.style,{width:"44px",minWidth:"44px",minHeight:"44px",padding:"9px",borderRadius:"999px",background:"rgba(12,18,32,0.72)",color:"#c9d4ea",border:"1px solid rgba(150,165,205,0.35)",backdropFilter:"blur(6px)",font:"600 11px/1 inherit",cursor:"pointer",whiteSpace:"nowrap"});let v=()=>{u.firstElementChild||u.replaceChildren(Or())};v();let M=w=>{p=w;let _=t.gpu();_&&(_.seatProgram.uniforms.uFocusFloor.value=w,_.solidProgram.uniforms.uFocusFloor.value=w,_.chairProgram.uniforms.uFocusFloor.value=w),t.showSectionSeatLabels(null)},I=null,S=!1,T=()=>{if(I=null,S=!1,t.setSeeThrough?.(null),t.isDisposed())return;r.onViewTargetChange?.(null),r.onSectionFocusChange?.(null),t.panorama()&&(t.panorama().dispose(),t.setPanorama(null),i.panoramaClosed()),t.setPanoramaSphereVisible(!1),t.panoramaLoadAbort()?.abort(),t.setPanoramaLoadAbort(null),t.restorePanoramaLayer(),u.style.display="",l.setVisible(!0),t.setFrozen(!1);let w=p>=0?n.floors[p]:null;if(t.setNearFieldDetailEnabled(!!w),t.setSeatViewLocked(!1),F(),t.removeArriveChip(),t.setNavigationMode("orbit"),w){let _=w.focalWorld[0]-w.center[0],O=w.focalWorld[2]-w.center[2],C=Math.hypot(_,O)>w.radius*.12?Math.atan2(_,O):c,V={center:w.center,radius:w.radius,box:w.box},N={polarDeg:58,margin:1.12};t.reducedMotion()?a.frame(V,!1,C,!1,N):a.frameSoft(V,C,!1,N)}else t.reducedMotion()?a.frame(n.bounds,!1,c,r.portraitOverviewCrop===!0,d):a.frameSoft(n.bounds,c,r.portraitOverviewCrop===!0,d);l.setOverviewDistance(a.targetDistance),t.showSectionSeatLabels(null),s.requestRender()},F=()=>{h++,t.setSeatStepping(!1),t.panoramaLoadAbort()?.abort(),t.setPanoramaLoadAbort(null),o.active&&(o.cancel(),a.resumeAfterFlight(n.focalWorld))},D=w=>{if(t.isDisposed()||!t.gpu())return Promise.resolve();let _=n.seats.idToIndex.get(w);if(_===void 0)return Promise.resolve();t.setNearFieldDetailEnabled(!0),r.onViewTargetChange?.(w),t.panorama()&&(t.panorama().dispose(),t.setPanorama(null),t.setPanoramaSphereVisible(!1),u.style.display="",t.restorePanoramaLayer()),t.panoramaLoadAbort()?.abort(),t.setPanoramaLoadAbort(null),t.setFrozen(!1);let O=t.inSeatView()&&r.arriveAtSeatEye===!0;t.setSeatStepping(O),t.setSeatViewLocked(!1);let C=++h;O?t.showArriveChip(w,C):t.removeArriveChip();let{eye:V,focal:N}=t.resolvedSeatViewPose(w,_),W=r.arriveAtSeatEye?t.seatViewArrival(w,_):null,G=W&&W.stops.length>1&&W.stops[1].name==="row"?W.stops[1]:null,Y=W?W.focal:N,te=[a.camera.position.x,a.camera.position.y,a.camera.position.z],E=sn(te,W?.eye??V,Y,n.bounds.center,n.bounds.radius),x=G?G.eye:W?W.eye:r.arriveAtSeatEye?V:E.finalPos,P=W?W.fov:r.arriveAtSeatEye?e.clientWidth/Math.max(1,e.clientHeight)<.7?Mt:65:28,B=[E.waypoints[0],E.waypoints[1],x];if(l.setVisible(!1),t.reducedMotion())return t.setSeatStepping(!1),f(x,Y,P),s.requestRender(),i.cinematicSkipped(),t.isDisposed()||a.syncFromCamera(),t.setSeatViewLocked(r.arriveAtSeatEye===!0),W&&t.enterSeatView(W.stops),t.showArriveChip(w,C),Promise.resolve();let j=new ps().copy(a.camera.quaternion),X=sr(a.camera,x,Y);s.requestRender();let ne=O?700:2500;return o.start(B,j,X,ne,P).then(()=>{t.isDisposed()||C!==h||(t.setSeatStepping(!1),i.cinematicPlayed(ne),a.resumeAfterFlight(Y),t.setSeatViewLocked(r.arriveAtSeatEye===!0),W&&t.enterSeatView(W.stops,G?1:0),s.requestRender(),t.showArriveChip(w,C))})},L=(w,_)=>{let O=n.sections.find(C=>C.id===w);if(!O||O.seatCount===0)return!1;if(I=w,S=!1,t.setSeeThrough?.(null),t.setNearFieldDetailEnabled(!0),t.setSeatStepping(!1),t.setSeatViewLocked(!1),o.cancel(),t.removeArriveChip(),n.floors.length>1&&p!==O.floorIndex&&M(O.floorIndex),t.setNavigationMode("pan"),t.panorama()||l.setVisible(!0),t.showSectionSeatLabels(w),!_?.keepCamera){let C=kr(O),V={polarDeg:C.polarDeg,margin:1.12};t.reducedMotion()?a.frame({center:C.center,radius:C.radius},!1,a.currentAzimuth,!1,V):a.glideTo({center:C.center,radius:C.radius},V)}return r.onSectionFocusChange?.(w),s.requestRender(),!0},g=(w,_)=>{if(t.isDisposed()||!t.gpu())return!1;let O=n.seats.idToIndex.get(w);if(O===void 0)return!1;let C=O*3,V=[n.seats.iPosition[C],n.seats.iPosition[C+1]+.55,n.seats.iPosition[C+2]],N=_?vs(_,a.fovY,a.camera.aspect||1):Nr;return S=!0,t.setSeeThrough?.(V),t.reducedMotion()?a.frame({center:V,radius:N},!1,void 0,!1,hn):a.frameSoft({center:V,radius:N},void 0,!1,hn),s.requestRender(),!0},A=()=>{if(t.isNarrow?.()&&S&&I&&L(I)){s.requestRender();return}T()};return u.addEventListener("click",A),{overviewChip:u,layoutOverviewChip:v,flightGen:()=>h,focusedFloor:()=>p,applyFloorFocus:M,placeCameraFinal:f,cancelFlight:F,focusOverview:T,flyToSeat:D,focusSectionCamera:L,focusSeatCamera:g}}var Nr=4.5;function vs(t,e,n){let r=Math.tan(e*Math.PI/360),a=r*Math.max(.001,n),i=bs*t.viewportHeightPx/(2*Math.max(1,t.seatPx)*r)*Math.min(r,a)/hn.margin;return Math.max(gs,Math.min(Nr,i))}var bs=.5,gs=1.5,hn={polarDeg:48,margin:1.25};function pn(t,e,n,r,a,o,i,s,l=.5){let c=-1,d=s*s,h=1/0;for(let p=0;p<e;p++){let f=p*3,u=xe(n,[t[f],t[f+1]+l,t[f+2]],r,a);if(!u.visible)continue;let y=u.x-o,v=u.y-i,M=y*y+v*v;(M<d-4||M<d+4&&u.depth<h)&&(c=p,d=Math.min(d,M),h=u.depth)}return c}function Hr(t){let e=performance.now(),{input:n,estimate:r}=Jn(t);return{model:Ke(n),buildMs:performance.now()-e,source:"main",...r?{estimate:r}:{}}}function ys(t){let e=Fn(t.doc);return{...Hr({...t,seats:e}),seats:e}}function Gr(t,e,n){if(typeof Worker>"u")return Promise.resolve(e());let r;try{r=new Worker(new URL("./scene/scene.worker.js",import.meta.url),{type:"module"})}catch{return Promise.resolve(e())}return new Promise(a=>{let o=!1,i=c=>{o||(o=!0,clearTimeout(l),r.terminate(),a(c))},s=()=>i(e()),l=window.setTimeout(s,15e3);r.onerror=s,r.onmessage=c=>{let d=n(c.data);d?i(d):s()},r.postMessage(t)})}function xs(t){return Gr(t,()=>Hr(t),({model:e,buildMs:n,estimate:r})=>({model:e,buildMs:n,source:"worker",...r?{estimate:r}:{}}))}function Ss(t){return Gr(t,()=>ys(t),({model:e,buildMs:n,seats:r,estimate:a})=>r?{model:e,buildMs:n,seats:r,source:"worker",...a?{estimate:a}:{}}:null)}var Ms=40,Ps=48,As=Math.PI/180,Cs=6,Es=500,Rs=6;function Jc(t,e,n={}){let r=performance.now(),a=e.prepared?e.prepared.estimate:e.estimate===!1?null:Wt(e.doc,e.seats);a&&(e={...e,doc:a.doc,seats:Zn(e.seats,a)});let o=e.prepared?.model??Ke(e),i=new Ct(n.onAnalytics),s=new Array(o.seats.count);for(let[m,b]of o.seats.idToIndex)s[b]=m;let l=new Map(e.seats.map(m=>[m.id,m])),c=new Map;for(let m of e.seats){if(!m.rowId)continue;let b=c.get(m.rowId);b?b.push(m.id):c.set(m.rowId,[m.id])}let d=new Map,h=[0,0,0,0];function p(){if(v)for(let m of[v.seatProgram,v.solidProgram,v.chairProgram])m.uniforms.uSeeThrough.value=h}e.seats.forEach((m,b)=>{d.set(m.id,o.seatSectionIds?.[b]??m.sectionId)});let f=new Map;for(let[m,b]of o.seats.idToIndex){let R=d.get(m);if(!R)continue;let H=f.get(R);H?H.push(b):f.set(R,[b])}let u=()=>{if(!v||!o.sectionSolidRanges.length)return;let{lit:m,anyUnlit:b}=Yo(o.sectionSolidRanges,f,o.seats.iState);v.setSectionShellLit(b?m:null)},y=e.doc.floors?.some(b=>(b.baseHeightM??0)>0)?!0:(e.doc.floors?.flatMap(b=>b.objects)??e.doc.objects).some(b=>b.type==="section"&&((b.height??0)>0||(b.rake??0)>0)),v=null,M=null,I=null,S=!1,T=!1,F=!1,D=new Map,L=null,g=null,A=null,w=new Map,_=null,O=()=>{A===null&&(A=t.style.zIndex,t.style.zIndex="20")},C=()=>{A!==null&&(t.style.zIndex==="20"&&(t.style.zIndex=A),A=null)},V=!1,N=()=>V?pe.focusedFloor():-1,W=()=>{v=$o(E.gl,o),M?.dispose(),M=So(E.gl,[1,1,1]),Mn(!1),u(),oe(),I=new St(E.renderer,v.seatGeometry,v.chairGeometry,v.solidGeometry,o.seats.count),E.setClearColor(o.theme.background.top),I.setRestoreClear(o.theme.background.top),I.setRoomCentre(o.room?.centre),v.seatProgram.uniforms.uSeatRadius.value=qe*o.theme.seatScale,v.seatProgram.uniforms.uFocusFloor.value=N(),v.solidProgram.uniforms.uFocusFloor.value=N(),v.chairProgram.uniforms.uFocusFloor.value=N(),v.screenProgram&&(v.screenProgram.uniforms.uFocusFloor.value=N()),p(),Y.forceRegather()},G=!1,Y=new Rt({model:o,orbit:()=>x,gpu:()=>v}),te=m=>Y.setDetailEnabled(m),E=new pt(t,{onContextLost:()=>{F||i.contextLost(),S=!0,ae.stop(),v=null,I=null},onContextRestored:()=>{W(),S=!1,F||i.contextRestored(),ae.requestRender()}}),x=new ft(E.gl,E.canvas,()=>ae.requestRender(),()=>i.orbitEngaged());x.setAspect(E.aspect);let P=(e.doc.floors?.flatMap(m=>m.objects)??e.doc.objects).some(m=>m.type==="section"&&m.physical3dProvenance?.surfaceKind?.status==="inferred"),B=(()=>{if(Number.isFinite(n.overviewAzimuthDeg))return n.overviewAzimuthDeg*Math.PI/180;if(!(P&&o.stages.length===0))return eo(o.focalWorld,o.seats.iPosition,o.bounds)})(),j=(e.doc.floors?.flatMap(m=>m.objects)??e.doc.objects).some(m=>m.type==="shape"&&m.stageKind?.startsWith("pitch-")),X=o.floors.length>1?{polarDeg:48,margin:1.1}:{polarDeg:j?36:48,margin:1.05},ne=typeof window<"u"&&!!window.matchMedia&&window.matchMedia("(prefers-reduced-motion: reduce)").matches;x.frame(o.bounds,!ne&&n.skipInitialOverviewAnimation!==!0,B,n.portraitOverviewCrop===!0,X);let re=new wt(x.camera),ue=_r(t),de=to(t,o),K=new yt(t,{fontFamily:e.doc.theme?.fontFamily,ink:e.doc.theme?.textColor,backgroundRgb:o.theme.background.top}),me=o.labels,he=()=>Bn(me,o.floors.length,N());K.setLabels(he()),K.setOverviewDistance(x.targetDistance);let z=null,J=()=>[...D.keys()].flatMap(m=>{let b=o.seats.idToIndex.get(m),R=b===void 0?void 0:e.seats[b];if(b===void 0||R?.id!==m)return[];let H=b*3;return[{id:`seat:${m}`,kind:"seat",seatWidthM:o.seats.iChairWidth[b]*2,text:R.displayLabel||R.label,anchor:[o.seats.iPosition[H],o.seats.iPosition[H+1]+1.05,o.seats.iPosition[H+2]],pinBase:Tt(H)}]}),q=-1,oe=()=>{v&&(q=z?o.sections.findIndex(m=>m.id===z):-1,v.seatProgram.uniforms.uFocusSection.value=q,v.chairProgram.uniforms.uFocusSection.value=q)},$=m=>{if(z=m,oe(),K.setForcedDense(!!m),!m){let k=J(),fe=new Set(k.map(se=>se.id));K.setLabels([...he().filter(se=>!fe.has(se.id)),...k]);return}let b=e.seats.filter(k=>d.get(k.id)===m),R=new Set(b.map(k=>k.id)),H=new Set(b.map(k=>k.rowId)),U=new Set(D.keys()),Z=new Set(b.filter(k=>U.has(k.id)).map(k=>k.id)),Q=he().filter(k=>k.kind!=="row"&&k.kind!=="seat"&&k.kind!=="access"||k.kind==="access"&&R.has(k.id.slice(7))||(k.kind==="row"?H.has(k.id.slice(4)):R.has(k.id.slice(5))));if(o.seatCount<=6e3&&Z.size===0){K.setLabels(Q);return}let ie=b,be=new Set(ie.map(k=>`seat:${k.id}`)),Me=ie.flatMap(k=>{let fe=o.seats.idToIndex.get(k.id);if(fe===void 0)return[];let se=fe*3;return[{id:`seat:${k.id}`,kind:"seat",seatWidthM:o.seats.iChairWidth[fe]*2,rowId:k.rowId,text:U.has(k.id)?k.displayLabel||k.label:Qn(k.displayLabel||k.label),anchor:[o.seats.iPosition[se],o.seats.iPosition[se+1]+(U.has(k.id)?1.05:.55),o.seats.iPosition[se+2]],...U.has(k.id)?{pinBase:Tt(se)}:{}}]});K.setLabels([...Q.filter(k=>!be.has(k.id)),...Me])};W();let ee=null,fn=null,vn=new ws,bn=m=>{if(S||!v||T)return!1;let b=Er({flying:re.active,panoramaMounted:L!==null,seatViewActive:ee?.active===!0}),R=b==="orbit"?q:-1;v.seatProgram.uniforms.uFocusSection.value=R,v.chairProgram.uniforms.uFocusSection.value=R;let H=b==="cinematic"?re.update(performance.now()):b==="seatView"?ee.update(performance.now()):b==="orbit"?x.update():!1;fn?.syncZoomLimits();let U=N()>=0?o.floors[N()]:null,Z=U?.radius??o.bounds.radius,Q=bo(x.currentDistance,Z),ie=G?{center:[x.camera.position.x,x.camera.position.y,x.camera.position.z],radius:520}:o.clipBounds??o.renderBounds;x.updateClipping(ie);let be=U?.center??o.renderBounds.center,Me=U?.radius??o.renderBounds.radius,k=(le,Nt)=>Math.hypot(x.camera.position.x-le[0],x.camera.position.y-le[1],x.camera.position.z-le[2])<=Nt*(Y.detailVisible?1.8:1.55),fe=k(be,Me);if(!fe&&z){let le=o.sections.find(Nt=>Nt.id===z);le&&(fe=k(le.center,Math.max(12,le.radius*2)))}Y.detailVisible=fe;let se=v.seatProgram.uniforms;se.uSeatScale.value=Q.scale,se.uSeatFade.value=Q.fade;let ct=!!U&&go(U.seatCount,E.canvas.clientWidth||1,E.canvas.clientHeight||1),ut=yo(o.seats.count,Z,x.currentDistance,x.camera.fov,E.canvas.clientHeight||1),We=Y.detailVisible||ct||ut?1:0,Ue=Y.detailVisible||N()>=0||o.floors.length>1?1:0;Y.ease(m,We,Ue),se.uSeatDetail.value=Y.seatDetailMix;let dt=We===0&&Y.seatDetailMix<.01;v.seatGeometry.setDrawRange(dt?Ut:0,dt?no:Ut),v.solidProgram.uniforms.uStructureDetail.value=Y.structureDetailMix,se.uMinPixels.value=Q.minPixels,se.uPixelToWorld.value=2*Math.tan(x.camera.fov*As/2)/Math.max(1,E.pixelHeight),Y.update(Y.detailVisible),o.outdoor&&(vn.copy(x.camera.projectionViewMatrix).inverse(),v.backgroundProgram.uniforms.uInvViewProj.value.set(vn)),E.renderer.render({scene:v.background,clear:!0}),E.renderer.render({scene:v.main,camera:x.camera,clear:!1});let Ye=M?M.update(performance.now(),[x.camera.position.x,x.camera.position.y,x.camera.position.z],L!==null,b==="seatView"):!1;if(M&&E.renderer.render({scene:M.root,camera:x.camera,clear:!1}),de){let le=x.camera.worldMatrix;de.update(b==="seatView"?[x.camera.position.x,x.camera.position.y,x.camera.position.z]:null,[-le[8],-le[9],-le[10]])}K.update(x.camera.projectionViewMatrix,E.canvas.clientWidth||1,E.canvas.clientHeight||1,x.currentDistance,Z,[x.camera.position.x,x.camera.position.y,x.camera.position.z]);let _e=H||Ye||Y.seatDetailMix!==We||Y.structureDetailMix!==Ue;return gn(!_e),_e},gn=mo(t),ae=new vt(bn),yn=typeof ResizeObserver<"u"?new ResizeObserver(()=>zt.resize()):null;yn?.observe(t),x.setZoomPointResolver((m,b)=>{let R=E.canvas.getBoundingClientRect(),H=E.canvas.clientWidth||R.width,U=E.canvas.clientHeight||R.height;if(!(H>0)||!(U>0))return null;x.camera.updateMatrixWorld();let Z=pn(o.seats.iPosition,o.seats.count,x.camera.projectionViewMatrix,H,U,m-R.left,b-R.top,Ms);if(Z<0)return null;let Q=Z*3;return[o.seats.iPosition[Q],o.seats.iPosition[Q+1]+.5,o.seats.iPosition[Q+2]]});function Tt(m){return[o.seats.iPosition[m],o.seats.iPosition[m+1]+.5,o.seats.iPosition[m+2]]}K.setSeatNumberRow(null);let ge=null,Ae=0,_t=null,xn=()=>{Ae=0;let m=null,b=null;if(ge&&!ee?.active&&!re.active){let U=E.canvas.getBoundingClientRect(),Z=E.canvas.clientWidth||U.width,Q=E.canvas.clientHeight||U.height;if(Z>0&&Q>0){let ie=pn(o.seats.iPosition,o.seats.count,x.camera.projectionViewMatrix,Z,Q,ge.x-U.left,ge.y-U.top,Ps);m=ie>=0?e.seats[ie]?.rowId??null:null;let be=ie>=0?e.seats[ie]?.id??null:null;if(b=be,ge.mouse&&!ge.pressing&&!!z&&!!be&&d.get(be)===z){let k=t.getBoundingClientRect();_t=be,n.onSeatHover?.(be,{x:ge.x-k.left,y:ge.y-k.top})}else Sn()}}else Sn();let R=ge?.mouse?b:null,H=K.setSeatNumberSeat(R);(K.setSeatNumberRow(m)||H)&&ae.requestRender()};function Sn(){_t!==null&&(_t=null,n.onSeatHover?.(null,null))}let st=m=>{ge={x:m.clientX,y:m.clientY,mouse:m.pointerType==="mouse",pressing:m.type==="pointerdown"},Ae||(Ae=requestAnimationFrame(xn))},wn=m=>{m.pointerType==="mouse"&&(ge=null,Ae||(Ae=requestAnimationFrame(xn)))};E.canvas.addEventListener("pointermove",st),E.canvas.addEventListener("pointerdown",st),E.canvas.addEventListener("pointerleave",wn);function Mn(m){if(!M)return;let b=[];for(let R of D.keys()){let H=o.seats.idToIndex.get(R);if(H===void 0)continue;let U=H*3;b.push({id:R,position:Tt(U)})}M.setSeats(b,performance.now(),m)}let Pn=m=>{let b=U=>{let Z=o.seats.idToIndex.get(U);return Z===void 0?void 0:o.seats.iState[Z]},{updates:R,next:H}=er(D,m,b);if(D=H,K.setSelectedSeatIds(D.keys()),Mn(!He()),ae.requestRender(),$(z),R.length){let U=Gt(o.seats,R);v&&v.uploadSeatStateRuns(U),u(),ae.requestRender()}},He=()=>_!==null?_:typeof window<"u"&&!!window.matchMedia&&window.matchMedia("(prefers-reduced-motion: reduce)").matches,Br=8,An=m=>{if(!n.getSeatView)return null;let b=w.get(m);if(!b)for(b=Promise.resolve(n.getSeatView(m)),w.set(m,b),b.catch(()=>{w.get(m)===b&&w.delete(m)});w.size>Br;){let R=w.keys().next().value;if(R===void 0)break;w.delete(R)}return b},Cn=yr(o.stages,o.focalWorld,o.bounds.groundY??0),Wr=un(Cn),It=(m,b)=>{let R=l.get(m),H=Math.max(0,Math.round(o.seats.iFloor[b]??0)),U=e.doc.floors?.[H],Z=o.floors[H],Q=U?.focalPoint??e.doc.focalPoint,ie=Z?{x:Z.focalWorld[0]/Ie,y:Z.focalWorld[2]/Ie}:Q,be=R?.focalPoint?{x:R.focalPoint.x+ie.x-Q.x,y:R.focalPoint.y+ie.y-Q.y}:ie,Me=[o.seats.iPosition[b*3],o.seats.iPosition[b*3+1],o.seats.iPosition[b*3+2]];return cr(Me,be,U?.baseHeightM??0,R?.eyeHeightM,Wr)},Dt=()=>(t.clientWidth||E.canvas.clientWidth)<=520,Ft=null,En=null,Ur=async(m,b,R)=>{if(!n.getSeatView||F||R!==pe.flightGen())return;let H;try{H=await Rr()}catch{if(i.panoramaFailed(m,"mount"),!F&&R===pe.flightGen()){let U=Vt(m,R,!0);requestAnimationFrame(()=>U?.querySelector("[data-panorama-trigger]")?.focus())}return}if(!(F||R!==pe.flightGen()||!Ft))return En??=H.createOpenPanorama(Ft),En(m,b,R)},Lt=Ir({container:t,model:o,opts:n,expandedSeatById:l,seatIdsByRow:c,isNarrow:Dt,isDisposed:()=>F,flightGen:()=>pe.flightGen(),flyToSeat:m=>In(m),openPanorama:(m,b,R)=>Ur(m,b,R)}),Vt=Lt.show,kt=Lt.remove,Yr=Lt.layout,Ce=Dr({container:t,orbit:x,isNarrow:Dt,enabled:n.chrome?.controlDock!==!1,...n.navLabels?{labels:n.navLabels}:{}});fn=Ce;let Xr=Ce.element,Ge=Ce.setNavigationMode,qr=Ce.layout,jr=Ce.utilityControls,Be=null,Rn=!1,lt=m=>{Ce.setSeatViewLocked(m),m||ee?.exit()};ee=Cr({canvas:E.canvas,camera:x.camera,requestRender:()=>ae.requestRender(),reducedMotion:He,onStopChange:m=>{let b=m??(Rn?"seat":null);Be=b;try{n.onSeatViewStopChange?.(b)}catch{}},onApplied:()=>{F||x.syncFromCamera()}});let Tn=o.sections.reduce((m,b)=>b.seatCount>0&&b.box?Math.max(m,b.box.max[1]):m,-1/0),Kr=(m,b)=>{let{eye:R}=It(m,b),H=(t.clientWidth||E.canvas.clientWidth||1)/Math.max(1,t.clientHeight||E.canvas.clientHeight||1),U=Sr(R,Cn,H,{preserveEye:!0});if(n.seatViewStops===!1)return{...U,stops:[]};let Z=d.get(m),Q=Z?o.sections.find(ie=>ie.id===Z):void 0;return{...U,stops:wr(U,{aspect:H,seatingTopY:Number.isFinite(Tn)?Tn:o.bounds.box.max[1],section:Q&&Q.seatCount>0?{center:Q.center,radius:Q.radius}:null,venue:{center:o.bounds.center,radius:o.bounds.radius}})}},pe=zr({isNarrow:Dt,setSeeThrough:m=>{h=m?[m[0],m[1],m[2],Rs]:[0,0,0,0],p(),ae.requestRender()},container:t,model:o,opts:n,orbit:x,cinematic:re,analytics:i,loop:ae,labelOverlay:K,stageAzimuth:B,overviewFraming:X,gpu:()=>v,isDisposed:()=>F,panorama:()=>L,setPanorama:m=>{L=m},setPanoramaSphereVisible:m=>{G=m},panoramaLoadAbort:()=>g,setPanoramaLoadAbort:m=>{g=m},setFrozen:m=>{T=m},restorePanoramaLayer:C,reducedMotion:He,resolvedSeatViewPose:It,showSectionSeatLabels:$,setNearFieldDetailEnabled:te,setSeatViewLocked:lt,setNavigationMode:Ge,showArriveChip:Vt,removeArriveChip:kt,inSeatView:()=>Be!==null,setSeatStepping:m=>{Rn=m},seatViewArrival:(m,b)=>n.arriveAtSeatEye?Kr(m,b):null,enterSeatView:(m,b)=>ee?.enter(m,b)});V=!0;let Ot=pe.overviewChip,$r=pe.layoutOverviewChip,Qr=pe.applyFloorFocus,Zr=pe.focusOverview,_n=pe.cancelFlight,In=pe.flyToSeat,Dn=pe.focusSectionCamera;jr.appendChild(Ot),Ft={container:t,model:o,opts:n,analytics:i,orbit:x,loop:ae,seatsById:l,ensureSeatView:An,resolvedSeatViewPose:It,gpu:()=>v,gl:E.gl,isContextLost:()=>S,isDisposed:()=>F,flightGen:()=>pe.flightGen(),setPanorama:m=>{L=m},getLoadAbort:()=>g,setLoadAbort:m=>{g=m},setPanoramaSphereVisible:m=>{G=m,m&&ee?.exit()},setFrozen:m=>{T=m},raisePanoramaLayer:O,restorePanoramaLayer:C,getOverviewChip:()=>Ot,labelOverlay:K,reducedMotion:He,removeArriveChip:kt,showArriveChip:Vt};let we=Vr({glctx:E,orbit:x,model:o,seats:e.seats,opts:n,cinematic:re,analytics:i,seatIdByIndex:s,sectionIdBySeatId:d,tapSlop:Cs,tapMs:Es,gpu:()=>v,pick:()=>I,seatViewLocked:()=>Ce.seatViewLocked(),focusedSectionId:()=>z,selection:()=>D,cancelFlight:_n,focusSectionCamera:Dn,focusSeatCamera:pe.focusSeatCamera,setSelection:Pn,ensureSeatView:An});E.canvas.addEventListener("pointerdown",we.onDown),E.canvas.addEventListener("pointermove",we.onMove),E.canvas.addEventListener("pointerup",we.onUp),E.canvas.addEventListener("pointercancel",we.onUp),ae.requestRender();let zt={setAvailability(m){let b=Jo(D,m),R=Gt(o.seats,b);R.length&&v&&v.uploadSeatStateRuns(R),u(),ae.requestRender()},setSelection:Pn,setNavigationMode:Ge,zoomIn(){x.zoomBy(Fe),ae.requestRender()},zoomOut(){x.zoomBy($e),ae.requestRender()},flyToSeat:In,focusOverview:Zr,seatViewStop:()=>Be,recentreSeatView:()=>ee?.recentre()??!1,resize(){let{width:m,height:b}=E.resize();x.setAspect(m/Math.max(1,b)),Yr(),qr(),$r(),ae.requestRender()},stats(){return{...ae.stats(),drawCalls:v?v.drawCalls:0,fallbackTriangles:v?v.seatGeometry.drawRange.count/3*o.seats.count:0,seatCount:o.seatCount}},captureImage(m=1280){if(S||!v||typeof document>"u")return null;bn(0);let b=E.canvas,R=Math.min(1,m/Math.max(b.width,b.height,1)),H=document.createElement("canvas");H.width=Math.max(1,Math.round(b.width*R)),H.height=Math.max(1,Math.round(b.height*R));let U=H.getContext("2d");return U?(U.drawImage(b,0,0,H.width,H.height),H.toDataURL("image/jpeg",.82)):null},getQualityEvidence(){let m=ae.stats(),b=E.canvas.clientWidth||1,R=E.canvas.clientHeight||1,H=o.bounds.center,U=xe(x.camera.projectionViewMatrix,[H[0],o.bounds.box.min[1],H[2]],b,R),Z=xe(x.camera.projectionViewMatrix,[H[0],o.bounds.box.max[1],H[2]],b,R),Q=o.bounds.box,ie=[Q.min[0],Q.max[0]].flatMap(k=>[Q.min[1],Q.max[1]].flatMap(fe=>[Q.min[2],Q.max[2]].map(se=>xe(x.camera.projectionViewMatrix,[k,fe,se],b,R)))).filter(k=>Number.isFinite(k.x)&&Number.isFinite(k.y)&&Number.isFinite(k.depth)),be=ie.length?(()=>{let k=Math.min(...ie.map(le=>le.x)),fe=Math.max(...ie.map(le=>le.x)),se=Math.min(...ie.map(le=>le.y)),ct=Math.max(...ie.map(le=>le.y)),ut=Math.max(0,k),We=Math.min(b,fe),Ue=Math.max(0,se),dt=Math.min(R,ct),Ye=Math.max(0,We-ut),_e=Math.max(0,dt-Ue);return{box:{x:ut,y:Ue,width:Ye,height:_e},horizontalFillRatio:Ye/b,verticalFillRatio:_e/R,visibleAreaRatio:Ye*_e/(b*R),clippedEdges:[...se<0?["top"]:[],...fe>b?["right"]:[],...ct>R?["bottom"]:[],...k<0?["left"]:[]]}})():void 0,Me=String(E.gl.getParameter(E.gl.VERSION)??"");return{viewport:{width:b,height:R},context:{webgl2:/webgl\s*2/i.test(Me),lost:S},frame:{rendered:m.rendered,idle:m.idle},camera:{position:[x.camera.position.x,x.camera.position.y,x.camera.position.z],distance:x.currentDistance,verticalFovDeg:x.fovY},scene:{seatCount:o.seatCount,floorCount:o.floors.length,zoneCount:o.zones.length,sectionCount:o.sections.length,authoredRelief:y,renderedVerticalSpanM:Math.max(0,o.bounds.box.max[1]-o.bounds.box.min[1]),projectedReliefPx:U.visible&&Z.visible?Math.abs(U.y-Z.y):0},labels:K.qualityEvidence(),framing:be,...Be?{seatView:{fovDeg:x.camera.fov,stop:Be}}:{}}},getQualityReport(){return en(zt.getQualityEvidence())},loseContextForTest(){E.simulateContextLossCycle()},floors(){return o.floors},focusFloor(m){if(m!==null&&!o.floors.some(R=>R.index===m))return!1;let b=m??-1;if(te(m!==null),lt(!1),Qr(b),Ge("orbit"),m===null)re.cancel(),He()?x.frame(o.bounds,!1,B,n.portraitOverviewCrop===!0,X):x.frameSoft(o.bounds,B,n.portraitOverviewCrop===!0,X),K.setOverviewDistance(x.targetDistance);else{let R=o.floors[m];if(R.seatCount>0){re.cancel();let H=R.focalWorld[0]-R.center[0],U=R.focalWorld[2]-R.center[2],Z=Math.hypot(H,U)>R.radius*.12?Math.atan2(H,U):B;x.frame({center:R.center,radius:R.radius,box:R.box},!1,Z,!1,{polarDeg:58,margin:1.12}),K.setOverviewDistance(x.targetDistance)}}return ae.requestRender(),!0},zones(){return o.zones},focusZone(m){let b=o.zones.find(Z=>Z.id===m);if(!b||b.seatCount===0)return!1;te(!1),lt(!1),re.cancel(),Ge("orbit"),$(null),n.onSectionFocusChange?.(null);let R=b.focalWorld[0]-b.center[0],H=b.focalWorld[2]-b.center[2],U=Math.hypot(R,H)>b.radius*.12?Math.atan2(R,H):void 0;return x.frame({center:b.center,radius:b.radius*1.25},!1,U),ae.requestRender(),!0},sections(){return o.sections},focusSection(m){return Dn(m)},rows(m){return m?o.rows.filter(b=>b.sectionId===m):o.rows},seatsInRow(m){return e.seats.filter(b=>b.rowId===m).map(b=>({id:b.id,label:b.displayLabel||b.label}))},focusRow(m){let b=o.rows.find(R=>R.id===m);return!b||b.seatCount===0?!1:(te(!0),lt(!1),re.cancel(),Ge("pan"),b.sectionId&&($(b.sectionId),n.onSectionFocusChange?.(b.sectionId)),x.frame({center:b.center,radius:Math.max(2.5,b.radius*.65)}),ae.requestRender(),!0)},setReducedMotionForTest(m){_=m},dispose(){F=!0,de?.dispose(),gn(!1),kt(),Ot.remove(),Xr.remove(),_n(),ee?.dispose(),ae.stop(),K.dispose(),yn?.disconnect(),L&&(L.dispose(),L=null),C(),ue(),E.canvas.removeEventListener("pointerdown",we.onDown),E.canvas.removeEventListener("pointermove",we.onMove),E.canvas.removeEventListener("pointerup",we.onUp),E.canvas.removeEventListener("pointercancel",we.onUp),E.canvas.removeEventListener("pointermove",st),E.canvas.removeEventListener("pointerdown",st),E.canvas.removeEventListener("pointerleave",wn),Ae&&cancelAnimationFrame(Ae),x.dispose(),I&&I.dispose(),v&&v.dispose(),v=null,M?.dispose(),M=null,I=null,E.dispose()}};return i.opened(o.seatCount,y,e.prepared?.buildMs??performance.now()-r,e.prepared?.source??"inline"),zt}export{qa as VENUE3D_QUALITY_REPORT_VERSION,Jr as autoVenue3d,Ke as buildSceneModel,Wt as estimateVenue3D,en as inspectVenue3DQualityEvidence,Jc as mountVenue3D,xs as prepareVenue3D,Ss as prepareVenue3DFromChart};