@seatlayer/core 0.95.1 → 0.97.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.
- package/dist/ar-Q44JP5JY.js +1 -0
- package/dist/be-CGFFSIQL.js +1 -0
- package/dist/bg-WOYK6OLH.js +1 -0
- package/dist/ca-77ZVI3X5.js +1 -0
- package/dist/chunk-2P72QUJR.js +1 -0
- package/dist/chunk-5N4H3KMR.js +1 -0
- package/dist/chunk-ASIIXY5M.js +1 -0
- package/dist/{chunk-O3DGXAIC.js → chunk-CUACREZL.js} +1 -1
- package/dist/{chunk-CEIVHWRB.js → chunk-FLMKHAUT.js} +1 -1
- package/dist/{chunk-TKYTTEJ2.js → chunk-IW7QZIMF.js} +1 -1
- package/dist/chunk-M5VINTGE.js +1 -0
- package/dist/chunk-NGZXKXOY.js +1 -0
- package/dist/{chunk-U7CVRE4P.js → chunk-OLGPAFXW.js} +1 -1
- package/dist/{chunk-M5X6G7FD.js → chunk-P4C24CIZ.js} +1 -1
- package/dist/{chunk-A3ZL3R75.js → chunk-QEPYNCBJ.js} +1 -1
- package/dist/chunk-VAI2VDQR.js +1 -0
- package/dist/{chunk-Q3MSDG4S.js → chunk-YPESNMTC.js} +1 -1
- package/dist/chunk-Z43H6AWN.js +1 -0
- package/dist/core/chart-ops/index.cjs +1 -1
- package/dist/core/chart-ops/index.d.cts +40 -18
- package/dist/core/chart-ops/index.d.ts +40 -18
- package/dist/core/chart-ops/index.js +1 -1
- package/dist/core/inventory/index.cjs +1 -1
- package/dist/core/inventory/index.js +1 -1
- package/dist/core/layout/index.cjs +1 -1
- package/dist/core/layout/index.js +1 -1
- package/dist/core/quality/index.js +1 -1
- package/dist/core/render-assets/index.js +1 -1
- package/dist/core/sections/index.js +1 -1
- package/dist/cs-OSBZYCSR.js +1 -0
- package/dist/cy-ZCOJW2WH.js +1 -0
- package/dist/da-2PDK6JTR.js +1 -0
- package/dist/de-R5LLVFUU.js +1 -0
- package/dist/el-ZPFVDCWA.js +1 -0
- package/dist/es-7YASJP32.js +1 -0
- package/dist/et-J4TV6KQL.js +1 -0
- package/dist/fa-4TEO7UGM.js +1 -0
- package/dist/fi-GIUDDKMH.js +1 -0
- package/dist/fr-J5J2XJLA.js +1 -0
- package/dist/he-OCEHSVUJ.js +1 -0
- package/dist/hi-EK5CTBW5.js +1 -0
- package/dist/hr-SLDTQOYC.js +1 -0
- package/dist/hu-2QNE77NO.js +1 -0
- package/dist/id-LGDAFQJK.js +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +8 -16
- package/dist/index.d.ts +8 -16
- package/dist/index.js +1 -1
- package/dist/it-DT4Y3IYB.js +1 -0
- package/dist/ja-D5EY2XCQ.js +1 -0
- package/dist/ko-DD2NV45Q.js +1 -0
- package/dist/ku-KZCMVLBE.js +1 -0
- package/dist/localeLoaders-GGAKX22E.js +1 -0
- package/dist/lt-QWGTJ47Y.js +1 -0
- package/dist/lv-LYAIG3VK.js +1 -0
- package/dist/ms-XTF4KNGD.js +1 -0
- package/dist/nl-QEXY6XHS.js +1 -0
- package/dist/no-HCOXN2CN.js +1 -0
- package/dist/pl-BWY53TSD.js +1 -0
- package/dist/pt-2UJUBCPL.js +1 -0
- package/dist/ro-GGXOLTED.js +1 -0
- package/dist/ru-ZTFK3WCU.js +1 -0
- package/dist/sk-KU543Y2U.js +1 -0
- package/dist/sl-FT576R7A.js +1 -0
- package/dist/sr-WE3J46JE.js +1 -0
- package/dist/stage-CKb7aNoH.d.cts +18 -0
- package/dist/stage-CKb7aNoH.d.ts +18 -0
- package/dist/sv-YEAOPSEB.js +1 -0
- package/dist/th-BEBRDHJA.js +1 -0
- package/dist/tr-LOAHUPSH.js +1 -0
- package/dist/uk-2GMICSHN.js +1 -0
- package/dist/vi-TC5B6AUR.js +1 -0
- package/dist/view3d/index.cjs +241 -78
- package/dist/view3d/index.d.cts +146 -78
- package/dist/view3d/index.d.ts +146 -78
- package/dist/view3d/index.js +239 -76
- package/dist/view3d/scene/scene.worker.cjs +1 -1
- package/dist/view3d/scene/scene.worker.js +1 -1
- package/dist/zh-Hans-TSZWTZQY.js +1 -0
- package/dist/zh-Hant-TLB4FZYM.js +1 -0
- package/package.json +1 -1
- package/dist/ar-ACDAWDG3.js +0 -1
- package/dist/be-MMLNJEJ2.js +0 -1
- package/dist/bg-ULTV77R3.js +0 -1
- package/dist/ca-2NRQWAFI.js +0 -1
- package/dist/chunk-F2EXXZSZ.js +0 -1
- package/dist/chunk-F7TP67LK.js +0 -1
- package/dist/chunk-LAX7F5ML.js +0 -1
- package/dist/chunk-LFJUXTIO.js +0 -1
- package/dist/chunk-M7JA4BGP.js +0 -1
- package/dist/cs-B3WL73W4.js +0 -1
- package/dist/cy-3EP6TX65.js +0 -1
- package/dist/da-YFCIQ5IW.js +0 -1
- package/dist/de-Y6HGIGLE.js +0 -1
- package/dist/el-7XNCC4HQ.js +0 -1
- package/dist/es-HOHSNNC5.js +0 -1
- package/dist/et-4XG3F3L2.js +0 -1
- package/dist/fa-LGZETRFZ.js +0 -1
- package/dist/fi-EJ7WAJ6Y.js +0 -1
- package/dist/fr-2AYVLJIX.js +0 -1
- package/dist/he-AW5ARPXB.js +0 -1
- package/dist/hr-TWJE7W7B.js +0 -1
- package/dist/hu-RJSTAAQ7.js +0 -1
- package/dist/it-CMJGPQEI.js +0 -1
- package/dist/ja-ADBJEN56.js +0 -1
- package/dist/ku-EUUAH5EO.js +0 -1
- package/dist/localeLoaders-E6HOKVNP.js +0 -1
- package/dist/lt-5IPKKDZP.js +0 -1
- package/dist/lv-6D3FN6DH.js +0 -1
- package/dist/nl-QVZAZWDH.js +0 -1
- package/dist/no-PEVS2KFB.js +0 -1
- package/dist/pl-ZZFOX74N.js +0 -1
- package/dist/pt-NKA7SU2B.js +0 -1
- package/dist/ro-NMCKGNBF.js +0 -1
- package/dist/ru-HPOD5UXT.js +0 -1
- package/dist/sk-GRJUAHE4.js +0 -1
- package/dist/sl-WZMICIEW.js +0 -1
- package/dist/sr-5DMHZCZI.js +0 -1
- package/dist/sv-G3NNXEWJ.js +0 -1
- package/dist/tr-HJ2KMOJD.js +0 -1
- package/dist/uk-FVJDE2SG.js +0 -1
- package/dist/zh-Hans-HPO7O27I.js +0 -1
- package/dist/zh-Hant-55X4MZZC.js +0 -1
package/dist/view3d/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var ks=Object.create;var $t=Object.defineProperty;var Fs=Object.getOwnPropertyDescriptor;var Ds=Object.getOwnPropertyNames;var Os=Object.getPrototypeOf,Vs=Object.prototype.hasOwnProperty;var Rt=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(r){throw n=[r],r}};var Uo=(e,t)=>{for(var n in t)$t(e,n,{get:t[n],enumerable:!0})},Ho=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Ds(t))!Vs.call(e,o)&&o!==n&&$t(e,o,{get:()=>t[o],enumerable:!(r=Fs(t,o))||r.enumerable});return e};var mt=(e,t,n)=>(n=e!=null?ks(Os(e)):{},Ho(t||!e||!e.__esModule?$t(n,"default",{value:e,enumerable:!0}):n,e)),Bs=e=>Ho($t({},"__esModule",{value:!0}),e);function ed(e,t){return!Number.isFinite(e)||!Number.isFinite(t)||e<=0||t<=0?0:Math.ceil(e*t*4*(4/3))}function td(e){return(e!==void 0&&e<=2?32:e!==void 0&&e>=8?192:96)*1024*1024}function Tn(e){let t=typeof navigator>"u"?void 0:navigator;return{saveData:t?.connection?.saveData===!0,maxTextureSize:e,maxDecodedBytes:td(t?.deviceMemory)}}function _n(e,t={}){let n=e.previewUrl?.trim();if(!n||n===e.url)return{initialUrl:e.url,initialWidth:e.sourceWidth,initialHeight:e.sourceHeight,reason:"full-only"};let r={initialUrl:n,initialWidth:e.previewWidth,initialHeight:e.previewHeight};if(t.saveData)return{...r,reason:"save-data"};let o=[...e.variants??[],...e.sourceWidth!==void 0&&e.sourceHeight!==void 0?[{url:e.url,width:e.sourceWidth,height:e.sourceHeight}]:[]].filter(c=>c.url.trim()&&c.url!==n&&Number.isFinite(c.width)&&c.width>0&&Number.isFinite(c.height)&&c.height>0).sort((c,u)=>c.width*c.height-u.width*u.height);if(!o.length)return{...r,upgradeUrl:e.url,reason:"progressive"};let i=o.filter(c=>t.maxTextureSize===void 0||Math.max(c.width,c.height)<=t.maxTextureSize);if(!i.length)return{...r,reason:"texture-limit"};let a=i.filter(c=>t.maxDecodedBytes===void 0||ed(c.width,c.height)<=t.maxDecodedBytes);if(!a.length)return{...r,reason:"memory-limit"};let s=a[a.length-1];return{...r,upgradeUrl:s.url,reason:"progressive"}}function Ja(){return new DOMException("Panorama image load aborted","AbortError")}function Yt(e,t){return new Promise((n,r)=>{if(t?.aborted){r(Ja());return}let o=new Image;o.crossOrigin="anonymous";let i=!1,a=()=>{o.onload=null,o.onerror=null,t?.removeEventListener("abort",c)},s=u=>{i||(i=!0,a(),u?r(u):n(o))},c=()=>{o.src="",s(Ja())};o.onload=()=>{(typeof o.decode=="function"?o.decode():Promise.resolve()).then(()=>s(),()=>s())},o.onerror=()=>s(new Error("panorama_image_failed")),t?.addEventListener("abort",c,{once:!0}),o.src=e})}function Ln(e){let t=globalThis;if(t.requestIdleCallback){let r=t.requestIdleCallback(e,{timeout:1200});return()=>t.cancelIdleCallback?.(r)}let n=globalThis.setTimeout(e,32);return()=>globalThis.clearTimeout(n)}var Fo=Rt(()=>{"use strict"});function ts(e){let t=e.mediaKind==="demo-render",n=e.generated||e.mediaKind==="model"?"Live 3D \xB7 chart-derived seat-eye":t?e.coverage==="exact-seat"?"AI-generated exact-seat demo":e.coverage==="row-representative"?"AI-generated representative row demo":e.coverage==="section-representative"?"AI-generated representative section demo":e.coverage==="floor-representative"?"AI-generated representative floor demo":"AI-generated illustrative venue demo":e.coverage==="exact-seat"?"Exact seat photo":e.coverage==="row-representative"?"Representative row view":e.coverage==="section-representative"?"Representative section view":e.coverage==="floor-representative"?"Representative floor view":e.coverage==="venue-representative"?"Representative venue view":"Venue photo",r=e.capturedAt&&/^\d{4}/.test(e.capturedAt)?e.capturedAt.slice(0,4):"";return[n,r?`${t?"created":"captured"} ${r}`:"",e.sourceLabel??""].filter(Boolean).join(" \xB7 ")}function Do(e){return Math.max(nd,Math.min(od,e))}function rd(e,t,n){let r=(.5+e/360)*n;return t/2-r}function id(e,t=Fn){return e*(180/t)}function es(e,t,n){return(e-t)/2+kn(n,t)}function kn(e,t){let n=Le/180*t;return Math.max(-n,Math.min(n,e))}function ad(){if(typeof window>"u")return!1;try{if(typeof window.matchMedia=="function"&&window.matchMedia("(pointer: coarse)").matches)return!0}catch{}return"ontouchstart"in window}function Oo(e){return e||(ad()?"Drag to look \xB7 pinch to zoom \xB7 tap \u2715 to close":"Drag to look \xB7 pinch or scroll to zoom \xB7 Esc to close")}function ns(e,t,n={}){let r=n.fadeMs??400,o=t.initialBearingDeg??0,i=_n(t,Tn()),a=new AbortController,s=()=>a.abort();n.signal?.addEventListener("abort",s,{once:!0});let c=document.createElement("div"),u=document.activeElement instanceof HTMLElement?document.activeElement:null;c.setAttribute("role","dialog"),c.setAttribute("aria-modal","true"),c.setAttribute("aria-label",n.seatLabel?`View from ${n.seatLabel}`:"View from seat"),c.tabIndex=-1,Object.assign(c.style,{position:"absolute",inset:"0",zIndex:"10",opacity:"0",transition:`opacity ${r}ms ease`,background:"#05070c",overflow:"hidden",touchAction:"none"});let d=document.createElement("div");Object.assign(d.style,{position:"absolute",inset:"0",backgroundImage:`url("${i.initialUrl}")`,backgroundRepeat:"repeat-x",cursor:"grab"}),c.appendChild(d);let f=document.createElement("button");if(f.type="button",f.setAttribute("aria-label","Close"),f.textContent="\u2715",Object.assign(f.style,{position:"absolute",top:"12px",right:"12px",zIndex:"2",width:"44px",height:"44px",borderRadius:"999px",cursor:"pointer",border:"1px solid rgba(255,255,255,0.25)",background:"rgba(8,12,18,0.6)",color:"#e6edf3",fontSize:"15px",lineHeight:"1"}),c.appendChild(f),n.disclosure){let G=document.createElement("div");G.textContent=`${n.disclosurePrefix??"360\xB0 panorama"} \xB7 ${n.disclosure}`,Object.assign(G.style,{position:"absolute",top:"calc(12px + var(--sl-3d-top-inset, 0px))",left:"12px",zIndex:"2",maxWidth:"calc(100% - 88px)",padding:"8px 11px",borderRadius:"999px",overflow:"hidden",color:"#dce6f8",background:"rgba(8,12,18,0.68)",font:"600 11px/1.2 ui-sans-serif, system-ui, sans-serif",textOverflow:"ellipsis",whiteSpace:"nowrap",pointerEvents:"none",backdropFilter:"blur(6px)"}),c.appendChild(G)}let m=document.createElement("div");m.textContent=Oo(n.lookAroundHint),Object.assign(m.style,{position:"absolute",bottom:"12px",left:"0",right:"0",textAlign:"center",color:"rgba(230,237,243,0.7)",font:"12px ui-sans-serif, system-ui, sans-serif",pointerEvents:"none"}),c.appendChild(m),e.appendChild(c),f.focus({preventScroll:!0});let l=0,p=0,h=0,b=0,y=Fn,v=()=>{let G=c.clientHeight||1,V=c.clientWidth||1,W=R.naturalWidth||V*2,X=R.naturalHeight||G,Q=l>0?(V/2-h)/l:0,q=p>0?b/p:0;p=id(G,y),l=p*(W/X),d.style.backgroundSize=`${l}px ${p}px`,S?h=V/2-Q*l:(h=rd(o,V,l),b=kn((t.initialPitchDeg??0)/180*p,p),S=!0),b=kn(q*p,p),d.style.backgroundPosition=`${h}px ${es(G,p,b)}px`},S=!1,M=()=>{let G=c.clientHeight||1;b=kn(b,p),d.style.backgroundPosition=`${h}px ${es(G,p,b)}px`},R=new Image;R.onload=v,R.src=i.initialUrl;let x=()=>{};i.upgradeUrl&&(x=Ln(()=>{(t.resolveUrl?t.resolveUrl(i.upgradeUrl):Promise.resolve(i.upgradeUrl)).then(V=>!V||a.signal.aborted?null:Yt(V,a.signal).then(W=>({full:W,url:V}))).then(V=>{V&&(P||a.signal.aborted||(R=V.full,d.style.backgroundImage=`url("${V.url}")`,v()))}).catch(()=>{})})),requestAnimationFrame(v);let g=!1,C=0,E=0,D=0,B=new Map,L=()=>{let[G,V]=[...B.values()];return G&&V?Math.hypot(G.x-V.x,G.y-V.y):0},A=G=>{let V=Do(G);V!==y&&(y=V,v())},k=G=>{B.set(G.pointerId,{x:G.clientX,y:G.clientY}),g=B.size===1,C=G.clientX,E=G.clientY,B.size===2&&(D=L()),d.style.cursor="grabbing";try{d.setPointerCapture?.(G.pointerId)}catch{}},N=G=>{if(B.has(G.pointerId)){if(B.set(G.pointerId,{x:G.clientX,y:G.clientY}),B.size>=2){let V=L();D>0&&V>0&&A(y*(D/V)),D=V,g=!1;return}g&&(h+=G.clientX-C,b+=G.clientY-E,C=G.clientX,E=G.clientY,M())}},w=G=>{B.delete(G.pointerId),D=B.size===2?L():0;let V=B.values().next().value;g=B.size===1,V?(C=V.x,E=V.y):d.style.cursor="grab";try{d.releasePointerCapture?.(G.pointerId)}catch{}},T=G=>{G.preventDefault(),A(y+G.deltaY*.04)};d.addEventListener("pointerdown",k),d.addEventListener("pointermove",N),d.addEventListener("pointerup",w),d.addEventListener("pointercancel",w),d.addEventListener("wheel",T,{passive:!1});let _=!1,P=!1,O=0,I=()=>{d.removeEventListener("pointerdown",k),d.removeEventListener("pointermove",N),d.removeEventListener("pointerup",w),d.removeEventListener("pointercancel",w),d.removeEventListener("wheel",T),window.removeEventListener("keydown",j)},F=()=>{x(),a.abort(),n.signal?.removeEventListener("abort",s),O&&(window.clearTimeout(O),O=0),I(),c.parentNode&&c.parentNode.removeChild(c),u?.isConnected&&u.focus({preventScroll:!0})},H=()=>{if(_)return;_=!0,c.style.opacity="0";let G=()=>{O=0,!P&&(F(),n.onClose?.())};O=window.setTimeout(G,r)},j=G=>{if(G.key==="Tab"){G.preventDefault(),f.focus({preventScroll:!0});return}if(G.key==="Escape"){G.stopPropagation(),H();return}if(G.key==="ArrowLeft"||G.key==="ArrowRight")h+=G.key==="ArrowLeft"?-32:32;else if(G.key==="ArrowUp"||G.key==="ArrowDown")b+=(G.key==="ArrowUp"?4:-4)*(p/180);else if(G.key==="+"||G.key==="="){A(y-5),G.preventDefault();return}else if(G.key==="-"){A(y+5),G.preventDefault();return}else return;G.preventDefault(),M()};return window.addEventListener("keydown",j),f.addEventListener("click",H),requestAnimationFrame(()=>{c.style.opacity="1"}),{close:H,dispose(){_=!0,P=!0,F()}}}var Fn,nd,od,Le,Dn=Rt(()=>{"use strict";Fo();Fn=70,nd=35,od=90;Le=35});function ud(e=sd,t=cd,n=ld){let r=e+1,o=t+1,i=r*o,a=new Float32Array(i*3),s=new Float32Array(i*2);for(let d=0;d<o;d++){let f=d/t,m=f*Math.PI,l=Math.sin(m),p=Math.cos(m);for(let h=0;h<r;h++){let b=h/e,y=(b-.5)*Math.PI*2,v=d*r+h;a[v*3]=n*l*Math.sin(y),a[v*3+1]=n*p,a[v*3+2]=-n*l*Math.cos(y),s[v*2]=b,s[v*2+1]=f}}let c=new Uint16Array(e*t*6),u=0;for(let d=0;d<t;d++)for(let f=0;f<e;f++){let m=d*r+f,l=m+r;c[u++]=m,c[u++]=l,c[u++]=m+1,c[u++]=m+1,c[u++]=l,c[u++]=l+1}return{position:a,uv:s,index:c}}function os(e,t){let n=e*Math.PI/180,r=t*Math.PI/180,o=Math.cos(r);return[o*Math.sin(n),Math.sin(r),-o*Math.cos(n)]}function rs(e,t){let{position:n,uv:r,index:o}=ud(),i=new Ke.Geometry(e,{position:{size:3,data:n},uv:{size:2,data:r},index:{data:o}}),a=new Ke.Texture(e,{image:t,wrapS:e.CLAMP_TO_EDGE,wrapT:e.CLAMP_TO_EDGE,generateMipmaps:!0,flipY:!1}),s=new Ke.Program(e,{vertex:md,fragment:dd,uniforms:{uPano:{value:a},uOpacity:{value:0}},transparent:!0,depthTest:!1,depthWrite:!1}),c=new Ke.Mesh(e,{geometry:i,program:s});return{mesh:c,setOpacity(u){s.uniforms.uOpacity.value=Math.max(0,Math.min(1,u))},setImage(u){a.image=u,a.needsUpdate=!0},dispose(){c.setParent(null),i.remove(),a.texture&&e.deleteTexture(a.texture),s.remove()}}}var Ke,sd,cd,ld,md,dd,is=Rt(()=>{"use strict";Ke=require("ogl"),sd=64,cd=32,ld=500;md=`#version 300 es
|
|
1
|
+
"use strict";var Xl=Object.create;var Ln=Object.defineProperty;var Wl=Object.getOwnPropertyDescriptor;var Yl=Object.getOwnPropertyNames;var Kl=Object.getPrototypeOf,ql=Object.prototype.hasOwnProperty;var on=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(o){throw n=[o],o}};var Kr=(e,t)=>{for(var n in t)Ln(e,n,{get:t[n],enumerable:!0})},qr=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Yl(t))!ql.call(e,r)&&r!==n&&Ln(e,r,{get:()=>t[r],enumerable:!(o=Wl(t,r))||o.enumerable});return e};var lt=(e,t,n)=>(n=e!=null?Xl(Kl(e)):{},qr(t||!e||!e.__esModule?Ln(n,"default",{value:e,enumerable:!0}):n,e)),$l=e=>qr(Ln({},"__esModule",{value:!0}),e);function Zp(e,t){return!Number.isFinite(e)||!Number.isFinite(t)||e<=0||t<=0?0:Math.ceil(e*t*4*(4/3))}function Qp(e){return(e!==void 0&&e<=2?32:e!==void 0&&e>=8?192:96)*1024*1024}function Mo(e){let t=typeof navigator>"u"?void 0:navigator;return{saveData:t?.connection?.saveData===!0,maxTextureSize:e,maxDecodedBytes:Qp(t?.deviceMemory)}}function So(e,t={}){let n=e.previewUrl?.trim();if(!n||n===e.url)return{initialUrl:e.url,initialWidth:e.sourceWidth,initialHeight:e.sourceHeight,reason:"full-only"};let o={initialUrl:n,initialWidth:e.previewWidth,initialHeight:e.previewHeight};if(t.saveData)return{...o,reason:"save-data"};let r=[...e.variants??[],...e.sourceWidth!==void 0&&e.sourceHeight!==void 0?[{url:e.url,width:e.sourceWidth,height:e.sourceHeight}]:[]].filter(c=>c.url.trim()&&c.url!==n&&Number.isFinite(c.width)&&c.width>0&&Number.isFinite(c.height)&&c.height>0).sort((c,u)=>c.width*c.height-u.width*u.height);if(!r.length)return{...o,upgradeUrl:e.url,reason:"progressive"};let i=r.filter(c=>t.maxTextureSize===void 0||Math.max(c.width,c.height)<=t.maxTextureSize);if(!i.length)return{...o,reason:"texture-limit"};let a=i.filter(c=>t.maxDecodedBytes===void 0||Zp(c.width,c.height)<=t.maxDecodedBytes);if(!a.length)return{...o,reason:"memory-limit"};let s=a[a.length-1];return{...o,upgradeUrl:s.url,reason:"progressive"}}function cl(){return new DOMException("Panorama image load aborted","AbortError")}function Rn(e,t){return new Promise((n,o)=>{if(t?.aborted){o(cl());return}let r=new Image;r.crossOrigin="anonymous";let i=!1,a=()=>{r.onload=null,r.onerror=null,t?.removeEventListener("abort",c)},s=u=>{i||(i=!0,a(),u?o(u):n(r))},c=()=>{r.src="",s(cl())};r.onload=()=>{(typeof r.decode=="function"?r.decode():Promise.resolve()).then(()=>s(),()=>s())},r.onerror=()=>s(new Error("panorama_image_failed")),t?.addEventListener("abort",c,{once:!0}),r.src=e})}function wo(e){let t=globalThis;if(t.requestIdleCallback){let o=t.requestIdleCallback(e,{timeout:1200});return()=>t.cancelIdleCallback?.(o)}let n=globalThis.setTimeout(e,32);return()=>globalThis.clearTimeout(n)}var Nr=on(()=>{"use strict"});function ul(e){let t=e.mediaKind==="demo-render",n=e.generated||e.mediaKind==="model"?"Live 3D \xB7 chart-derived seat-eye":t?e.coverage==="exact-seat"?"AI-generated exact-seat demo":e.coverage==="row-representative"?"AI-generated representative row demo":e.coverage==="section-representative"?"AI-generated representative section demo":e.coverage==="floor-representative"?"AI-generated representative floor demo":"AI-generated illustrative venue demo":e.coverage==="exact-seat"?"Exact seat photo":e.coverage==="row-representative"?"Representative row view":e.coverage==="section-representative"?"Representative section view":e.coverage==="floor-representative"?"Representative floor view":e.coverage==="venue-representative"?"Representative venue view":"Venue photo",o=e.capturedAt&&/^\d{4}/.test(e.capturedAt)?e.capturedAt.slice(0,4):"";return[n,o?`${t?"created":"captured"} ${o}`:"",e.sourceLabel??""].filter(Boolean).join(" \xB7 ")}function Vr(e){return Math.max(Jp,Math.min(eb,e))}function tb(e,t,n){let o=(.5+e/360)*n;return t/2-o}function nb(e,t=Io){return e*(180/t)}function ll(e,t,n){return(e-t)/2+Po(n,t)}function Po(e,t){let n=Qe/180*t;return Math.max(-n,Math.min(n,e))}function ob(){if(typeof window>"u")return!1;try{if(typeof window.matchMedia=="function"&&window.matchMedia("(pointer: coarse)").matches)return!0}catch{}return"ontouchstart"in window}function Gr(e){return e||(ob()?"Drag to look \xB7 pinch to zoom \xB7 tap \u2715 to close":"Drag to look \xB7 pinch or scroll to zoom \xB7 Esc to close")}function ml(e,t,n={}){let o=n.fadeMs??400,r=t.initialBearingDeg??0,i=So(t,Mo()),a=new AbortController,s=()=>a.abort();n.signal?.addEventListener("abort",s,{once:!0});let c=document.createElement("div"),u=document.activeElement instanceof HTMLElement?document.activeElement:null;c.setAttribute("role","dialog"),c.setAttribute("aria-modal","true"),c.setAttribute("aria-label",n.seatLabel?`View from ${n.seatLabel}`:"View from seat"),c.tabIndex=-1,Object.assign(c.style,{position:"absolute",inset:"0",zIndex:"10",opacity:"0",transition:`opacity ${o}ms ease`,background:"#05070c",overflow:"hidden",touchAction:"none"});let l=document.createElement("div");Object.assign(l.style,{position:"absolute",inset:"0",backgroundImage:`url("${i.initialUrl}")`,backgroundRepeat:"repeat-x",cursor:"grab"}),c.appendChild(l);let m=document.createElement("button");if(m.type="button",m.setAttribute("aria-label","Close"),m.textContent="\u2715",Object.assign(m.style,{position:"absolute",top:"12px",right:"12px",zIndex:"2",width:"44px",height:"44px",borderRadius:"999px",cursor:"pointer",border:"1px solid rgba(255,255,255,0.25)",background:"rgba(8,12,18,0.6)",color:"#e6edf3",fontSize:"15px",lineHeight:"1"}),c.appendChild(m),n.disclosure){let G=document.createElement("div");G.textContent=`${n.disclosurePrefix??"360\xB0 panorama"} \xB7 ${n.disclosure}`,Object.assign(G.style,{position:"absolute",top:"calc(12px + var(--sl-3d-top-inset, 0px))",left:"12px",zIndex:"2",maxWidth:"calc(100% - 88px)",padding:"8px 11px",borderRadius:"999px",overflow:"hidden",color:"#dce6f8",background:"rgba(8,12,18,0.68)",font:"600 11px/1.2 ui-sans-serif, system-ui, sans-serif",textOverflow:"ellipsis",whiteSpace:"nowrap",pointerEvents:"none",backdropFilter:"blur(6px)"}),c.appendChild(G)}let h=document.createElement("div");h.textContent=Gr(n.lookAroundHint),Object.assign(h.style,{position:"absolute",bottom:"12px",left:"0",right:"0",textAlign:"center",color:"rgba(230,237,243,0.7)",font:"12px ui-sans-serif, system-ui, sans-serif",pointerEvents:"none"}),c.appendChild(h),e.appendChild(c),m.focus({preventScroll:!0});let d=0,f=0,p=0,b=0,y=Io,g=()=>{let G=c.clientHeight||1,H=c.clientWidth||1,K=I.naturalWidth||H*2,Q=I.naturalHeight||G,Y=d>0?(H/2-p)/d:0,W=f>0?b/f:0;f=nb(G,y),d=f*(K/Q),l.style.backgroundSize=`${d}px ${f}px`,x?p=H/2-Y*d:(p=tb(r,H,d),b=Po((t.initialPitchDeg??0)/180*f,f),x=!0),b=Po(W*f,f),l.style.backgroundPosition=`${p}px ${ll(G,f,b)}px`},x=!1,w=()=>{let G=c.clientHeight||1;b=Po(b,f),l.style.backgroundPosition=`${p}px ${ll(G,f,b)}px`},I=new Image;I.onload=g,I.src=i.initialUrl;let v=()=>{};i.upgradeUrl&&(v=wo(()=>{(t.resolveUrl?t.resolveUrl(i.upgradeUrl):Promise.resolve(i.upgradeUrl)).then(H=>!H||a.signal.aborted?null:Rn(H,a.signal).then(K=>({full:K,url:H}))).then(H=>{H&&(k||a.signal.aborted||(I=H.full,l.style.backgroundImage=`url("${H.url}")`,g()))}).catch(()=>{})})),requestAnimationFrame(g);let P=!1,S=0,M=0,C=0,T=new Map,N=()=>{let[G,H]=[...T.values()];return G&&H?Math.hypot(G.x-H.x,G.y-H.y):0},D=G=>{let H=Vr(G);H!==y&&(y=H,g())},R=G=>{T.set(G.pointerId,{x:G.clientX,y:G.clientY}),P=T.size===1,S=G.clientX,M=G.clientY,T.size===2&&(C=N()),l.style.cursor="grabbing";try{l.setPointerCapture?.(G.pointerId)}catch{}},A=G=>{if(T.has(G.pointerId)){if(T.set(G.pointerId,{x:G.clientX,y:G.clientY}),T.size>=2){let H=N();C>0&&H>0&&D(y*(C/H)),C=H,P=!1;return}P&&(p+=G.clientX-S,b+=G.clientY-M,S=G.clientX,M=G.clientY,w())}},L=G=>{T.delete(G.pointerId),C=T.size===2?N():0;let H=T.values().next().value;P=T.size===1,H?(S=H.x,M=H.y):l.style.cursor="grab";try{l.releasePointerCapture?.(G.pointerId)}catch{}},O=G=>{G.preventDefault(),D(y+G.deltaY*.04)};l.addEventListener("pointerdown",R),l.addEventListener("pointermove",A),l.addEventListener("pointerup",L),l.addEventListener("pointercancel",L),l.addEventListener("wheel",O,{passive:!1});let _=!1,k=!1,V=0,F=()=>{l.removeEventListener("pointerdown",R),l.removeEventListener("pointermove",A),l.removeEventListener("pointerup",L),l.removeEventListener("pointercancel",L),l.removeEventListener("wheel",O),window.removeEventListener("keydown",U)},B=()=>{v(),a.abort(),n.signal?.removeEventListener("abort",s),V&&(window.clearTimeout(V),V=0),F(),c.parentNode&&c.parentNode.removeChild(c),u?.isConnected&&u.focus({preventScroll:!0})},z=()=>{if(_)return;_=!0,c.style.opacity="0";let G=()=>{V=0,!k&&(B(),n.onClose?.())};V=window.setTimeout(G,o)},U=G=>{if(G.key==="Tab"){G.preventDefault(),m.focus({preventScroll:!0});return}if(G.key==="Escape"){G.stopPropagation(),z();return}if(G.key==="ArrowLeft"||G.key==="ArrowRight")p+=G.key==="ArrowLeft"?-32:32;else if(G.key==="ArrowUp"||G.key==="ArrowDown")b+=(G.key==="ArrowUp"?4:-4)*(f/180);else if(G.key==="+"||G.key==="="){D(y-5),G.preventDefault();return}else if(G.key==="-"){D(y+5),G.preventDefault();return}else return;G.preventDefault(),w()};return window.addEventListener("keydown",U),m.addEventListener("click",z),requestAnimationFrame(()=>{c.style.opacity="1"}),{close:z,dispose(){_=!0,k=!0,B()}}}var Io,Jp,eb,Qe,Co=on(()=>{"use strict";Nr();Io=70,Jp=35,eb=90;Qe=35});function sb(e=rb,t=ib,n=ab){let o=e+1,r=t+1,i=o*r,a=new Float32Array(i*3),s=new Float32Array(i*2);for(let l=0;l<r;l++){let m=l/t,h=m*Math.PI,d=Math.sin(h),f=Math.cos(h);for(let p=0;p<o;p++){let b=p/e,y=(b-.5)*Math.PI*2,g=l*o+p;a[g*3]=n*d*Math.sin(y),a[g*3+1]=n*f,a[g*3+2]=-n*d*Math.cos(y),s[g*2]=b,s[g*2+1]=m}}let c=new Uint16Array(e*t*6),u=0;for(let l=0;l<t;l++)for(let m=0;m<e;m++){let h=l*o+m,d=h+o;c[u++]=h,c[u++]=d,c[u++]=h+1,c[u++]=h+1,c[u++]=d,c[u++]=d+1}return{position:a,uv:s,index:c}}function fl(e,t){let n=e*Math.PI/180,o=t*Math.PI/180,r=Math.cos(o);return[r*Math.sin(n),Math.sin(o),-r*Math.cos(n)]}function dl(e,t){let{position:n,uv:o,index:r}=sb(),i=new xt.Geometry(e,{position:{size:3,data:n},uv:{size:2,data:o},index:{data:r}}),a=new xt.Texture(e,{image:t,wrapS:e.CLAMP_TO_EDGE,wrapT:e.CLAMP_TO_EDGE,generateMipmaps:!0,flipY:!1}),s=new xt.Program(e,{vertex:cb,fragment:lb,uniforms:{uPano:{value:a},uOpacity:{value:0}},transparent:!0,depthTest:!1,depthWrite:!1}),c=new xt.Mesh(e,{geometry:i,program:s});return{mesh:c,setOpacity(u){s.uniforms.uOpacity.value=Math.max(0,Math.min(1,u))},setImage(u){a.image=u,a.needsUpdate=!0},dispose(){c.setParent(null),i.remove(),a.texture&&e.deleteTexture(a.texture),s.remove()}}}var xt,rb,ib,ab,cb,lb,hl=on(()=>{"use strict";xt=require("ogl"),rb=64,ib=32,ab=500;cb=`#version 300 es
|
|
2
2
|
precision highp float;
|
|
3
3
|
in vec3 position;
|
|
4
4
|
in vec2 uv;
|
|
@@ -8,7 +8,7 @@ out vec2 vUv;
|
|
|
8
8
|
void main() {
|
|
9
9
|
vUv = uv;
|
|
10
10
|
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
|
|
11
|
-
}`,
|
|
11
|
+
}`,lb=`#version 300 es
|
|
12
12
|
precision highp float;
|
|
13
13
|
in vec2 vUv;
|
|
14
14
|
uniform sampler2D uPano;
|
|
@@ -17,15 +17,15 @@ out vec4 fragColor;
|
|
|
17
17
|
void main() {
|
|
18
18
|
vec3 rgb = texture(uPano, vUv).rgb;
|
|
19
19
|
fragColor = vec4(rgb, uOpacity);
|
|
20
|
-
}`});async function ss(e,t,n,r={}){let o=r.fadeMs??400,i=t?.initialBearingDeg??0,a=Math.max(-Le,Math.min(Le,t?.initialPitchDeg??0)),s=Fn,c=!1,u=new AbortController,d=()=>u.abort();r.signal?.addEventListener("abort",d,{once:!0});let f=()=>{},m=[n.camera.position.x,n.camera.position.y,n.camera.position.z];if(!t&&n.cameraOriginWorld&&n.camera.position.set(n.cameraOriginWorld[0],n.cameraOriginWorld[1],n.cameraOriginWorld[2]),!t&&n.focalWorld){let I=n.camera.position,F=n.focalWorld[0]-I.x,H=n.focalWorld[1]-I.y,j=n.focalWorld[2]-I.z,G=Math.hypot(F,j);G>.001&&(i=Math.atan2(F,-j)*180/Math.PI,a=Math.max(-Le,Math.min(Le,Math.atan2(H,G)*180/Math.PI)))}let l=null;if(t){let I=n.gl.getParameter(n.gl.MAX_TEXTURE_SIZE),F=_n(t,Tn(I)),H;try{let j=t.resolveUrl?await t.resolveUrl(F.initialUrl):F.initialUrl;if(!j)throw new Error("panorama_asset_unavailable");H=await Yt(j,u.signal)}catch{return r.signal?.removeEventListener("abort",d),null}try{l=rs(n.gl,H)}catch{return u.abort(),r.signal?.removeEventListener("abort",d),null}l.mesh.renderOrder=999,l.mesh.setParent(n.scene),F.upgradeUrl&&(f=Ln(()=>{(t.resolveUrl?t.resolveUrl(F.upgradeUrl):Promise.resolve(F.upgradeUrl)).then(G=>!G||u.signal.aborted?null:Yt(G,u.signal)).then(G=>{G&&(c||u.signal.aborted||(l?.setImage(G),n.requestRender()))}).catch(()=>{})}))}let p=n.camera.fov;n.camera.perspective({fov:s,aspect:n.camera.aspect});let h=n.camera.quaternion.slice(),b=()=>{let I=n.camera.position;l?.mesh.position.set(I.x,I.y,I.z);let[F,H,j]=os(i,a);n.camera.lookAt([I.x+F,I.y+H,I.z+j]),n.requestRender()};b();let y=document.createElement("div"),v=document.activeElement instanceof HTMLElement?document.activeElement:null;y.setAttribute("role","dialog"),y.setAttribute("aria-modal","true"),y.setAttribute("aria-label",r.seatLabel?`View from ${r.seatLabel}`:"View from seat"),y.tabIndex=-1,Object.assign(y.style,{position:"absolute",inset:"0",zIndex:"10",cursor:"grab",touchAction:"none"});let S=document.createElement("button");if(S.type="button",S.setAttribute("aria-label","Close"),S.textContent="\u2715",Object.assign(S.style,{position:"absolute",top:"12px",right:"12px",zIndex:"2",width:"44px",height:"44px",borderRadius:"999px",cursor:"pointer",border:"1px solid rgba(255,255,255,0.25)",background:"rgba(8,12,18,0.6)",color:"#e6edf3",fontSize:"15px",lineHeight:"1"}),y.appendChild(S),r.disclosure){let I=document.createElement("div");I.textContent=`${r.disclosurePrefix??"360\xB0 panorama"} \xB7 ${r.disclosure}`,Object.assign(I.style,{position:"absolute",top:"calc(12px + var(--sl-3d-top-inset, 0px))",left:"12px",zIndex:"2",maxWidth:"calc(100% - 88px)",padding:"8px 11px",borderRadius:"999px",overflow:"hidden",color:"#dce6f8",background:"rgba(8,12,18,0.68)",font:"600 11px/1.2 ui-sans-serif, system-ui, sans-serif",textOverflow:"ellipsis",whiteSpace:"nowrap",pointerEvents:"none",backdropFilter:"blur(6px)"}),y.appendChild(I)}let M=document.createElement("div");M.textContent=Oo(r.lookAroundHint),Object.assign(M.style,{position:"absolute",bottom:"12px",left:"0",right:"0",textAlign:"center",color:"rgba(230,237,243,0.7)",font:"12px ui-sans-serif, system-ui, sans-serif",pointerEvents:"none"}),y.appendChild(M),e.appendChild(y),S.focus({preventScroll:!0});let R=!1,x=0,g=0,C=0,E=new Map,D=()=>{let[I,F]=[...E.values()];return I&&F?Math.hypot(I.x-F.x,I.y-F.y):0},B=I=>{let F=Do(I);F!==s&&(s=F,n.camera.perspective({fov:s,aspect:n.camera.aspect}),b())},L=I=>{I.target!==S&&(E.set(I.pointerId,{x:I.clientX,y:I.clientY}),R=E.size===1,x=I.clientX,g=I.clientY,E.size===2&&(C=D()),y.setPointerCapture?.(I.pointerId),y.style.cursor="grabbing")},A=I=>{if(E.has(I.pointerId)){if(E.set(I.pointerId,{x:I.clientX,y:I.clientY}),E.size>=2){let F=D();C>0&&F>0&&B(s*(C/F)),C=F,R=!1;return}R&&(i+=(I.clientX-x)*as,a=Math.max(-Le,Math.min(Le,a+(I.clientY-g)*as)),x=I.clientX,g=I.clientY,b())}},k=I=>{E.delete(I.pointerId),C=E.size===2?D():0;let F=E.values().next().value;R=E.size===1,F?(x=F.x,g=F.y):y.style.cursor="grab";try{y.releasePointerCapture?.(I.pointerId)}catch{}},N=I=>{I.preventDefault(),B(s+I.deltaY*.04)};y.addEventListener("pointerdown",L),y.addEventListener("pointermove",A),y.addEventListener("pointerup",k),y.addEventListener("pointercancel",k),y.addEventListener("wheel",N,{passive:!1});let w=I=>{if(!c){if(I.key==="Tab"){I.preventDefault(),S.focus({preventScroll:!0});return}if(I.key==="Escape"){I.stopPropagation(),O.close();return}if(I.key==="ArrowLeft"||I.key==="ArrowRight")i+=I.key==="ArrowLeft"?-4:4;else if(I.key==="ArrowUp"||I.key==="ArrowDown")a=Math.max(-Le,Math.min(Le,a+(I.key==="ArrowUp"?4:-4)));else if(I.key==="+"||I.key==="="){B(s-5),I.preventDefault();return}else if(I.key==="-"){B(s+5),I.preventDefault();return}else return;I.preventDefault(),b()}};window.addEventListener("keydown",w);let T=0,_=(I,F)=>{if(!l){F?.();return}let H=I===1?0:1,j=performance.now(),G=()=>{if(c)return;let V=o<=0?1:Math.min(1,(performance.now()-j)/o);l?.setOpacity(H+(I-H)*V),n.requestRender(),V<1?T=requestAnimationFrame(G):F?.()};T=requestAnimationFrame(G)};_(1);let P=()=>{c||(c=!0,f(),u.abort(),r.signal?.removeEventListener("abort",d),cancelAnimationFrame(T),y.removeEventListener("pointerdown",L),y.removeEventListener("pointermove",A),y.removeEventListener("pointerup",k),y.removeEventListener("pointercancel",k),y.removeEventListener("wheel",N),window.removeEventListener("keydown",w),y.remove(),v?.isConnected&&v.focus({preventScroll:!0}),l?.dispose(),n.camera.position.set(m[0],m[1],m[2]),n.camera.perspective({fov:p,aspect:n.camera.aspect}),n.camera.quaternion.set(h[0],h[1],h[2],h[3]),n.requestRender())},O={close(){if(c)return;let I=()=>{P(),r.onClose?.()};cancelAnimationFrame(T),_(0,I)},dispose:P};return S.addEventListener("click",()=>O.close()),O}var as,cs=Rt(()=>{"use strict";is();Dn();Dn();Fo();as=.15});var ls={};Uo(ls,{createOpenPanorama:()=>fd});function fd(e){let{container:t,model:n,opts:r,analytics:o,orbit:i,loop:a,seatsById:s,ensureSeatView:c,resolvedSeatViewPose:u,gpu:d,gl:f,isContextLost:m,isDisposed:l,flightGen:p,setPanorama:h,getLoadAbort:b,setLoadAbort:y,setPanoramaSphereVisible:v,setFrozen:S,raisePanoramaLayer:M,restorePanoramaLayer:R,getOverviewChip:x,labelOverlay:g,reducedMotion:C,removeArriveChip:E,showArriveChip:D}=e;return async(B,L,A)=>{b()?.abort();let k=new AbortController;y(k);let N=n.seats.idToIndex.get(B);if(N===void 0){i.syncFromCamera();return}let w=s.get(B)?.label??B,T=u(B,N),_=c(B);if(!_){k.abort(),b()===k&&y(null),i.syncFromCamera();return}S(!0),a.stop();let P;try{P=await _}catch{if(b()===k&&y(null),o.panoramaFailed(B,"source"),!l()&&A===p()){S(!1),i.resumeAfterFlight(T.focal),a.requestRender();let W=D(B,A,!0);requestAnimationFrame(()=>W?.querySelector("[data-panorama-trigger]")?.focus())}return}if(l()||A!==p()){k.abort(),b()===k&&y(null);return}E();let O=x(),I=()=>{k.abort(),b()===k&&y(null),h(null),v(!1),R(),O.style.display="",g.setVisible(!r.arriveAtSeatEye),S(!1),o.panoramaClosed(),i.resumeAfterFlight(T.focal),a.requestRender();let W=D(B,p());requestAnimationFrame(()=>W?.querySelector("[data-panorama-trigger]")?.focus())},F=P.generated===!0,H=ts(P);M(),v(!F),O.style.display="none";let j=C()?0:L,G=d(),V=G&&!m()?await ss(t,F?null:P,{gl:f,scene:G.main,camera:i.camera,requestRender:()=>a.requestRender(),cameraOriginWorld:F?T.eye:void 0,focalWorld:T.focal},{fadeMs:j,seatLabel:w,disclosure:H,disclosurePrefix:F?"Live seat-eye view":"360\xB0 panorama",lookAroundHint:r.lookAroundHint,onClose:I,signal:k.signal}):null;if(l()||A!==p()){k.abort(),v(!1),b()===k&&y(null),V?.dispose(),O.style.display="",R();return}if(V)i.syncFromCamera(),g.setVisible(!1),S(!1),a.requestRender(),h(V);else if(F){R(),O.style.display="",S(!1),i.resumeAfterFlight(T.focal),a.requestRender(),h(null),v(!1),o.panoramaFailed(B,"mount");let W=D(B,p(),!0);requestAnimationFrame(()=>W?.querySelector("[data-panorama-trigger]")?.focus()),b()===k&&y(null);return}else v(!1),o.panoramaFallback(B),h(ns(t,P,{fadeMs:j,seatLabel:w,disclosure:H,onClose:I,signal:k.signal,lookAroundHint:r.lookAroundHint}));o.panoramaOpened()}}var us=Rt(()=>{"use strict";Dn();cs()});var wd={};Uo(wd,{VENUE3D_QUALITY_REPORT_VERSION:()=>sa,buildSceneModel:()=>St,inspectVenue3DQualityEvidence:()=>wn,mountVenue3D:()=>Md,prepareVenue3D:()=>ws,prepareVenue3DFromChart:()=>Ps});module.exports=Bs(wd);var Wo=require("ogl");var Ns=/^#?([\da-f]{3}|[\da-f]{6})$/i;function Gs(e){let t=Ns.exec((e??"").trim());if(!t)return null;let n=t[1].length===3?t[1].split("").map(o=>o+o).join(""):t[1],r=parseInt(n,16);return[r>>16&255,r>>8&255,r&255]}function ne(e){let t=Gs(e);return t?[t[0]/255,t[1]/255,t[2]/255]:null}function Hn(e){let t=e/255;return t<=.04045?t/12.92:((t+.055)/1.055)**2.4}function zs(e){return .2126*Hn(e[0])+.7152*Hn(e[1])+.0722*Hn(e[2])}function jo(e){return zs([e[0]*255,e[1]*255,e[2]*255])}function Us(e){return .2126*e[0]+.7152*e[1]+.0722*e[2]}function ge(e,t,n){return[e[0]+(t[0]-e[0])*n,e[1]+(t[1]-e[1])*n,e[2]+(t[2]-e[2])*n]}function Et(e,t){let n=Us(e);return ge(e,[n,n,n],t)}var pe=["available","held","sold","selected","dimmed"];function It(e){let t=pe.indexOf(e);return t<0?0:t}var Yo={available:[.24,.82,.52],held:[.95,.66,.22],sold:[.34,.39,.45],selected:[.24,.74,1],dimmed:[.28,.32,.37]};function Xo(e){let t=.2126*e[0]+.7152*e[1]+.0722*e[2],n=.42,r=.62;return[(t+(e[0]-t)*n)*r,(t+(e[1]-t)*n)*r,(t+(e[2]-t)*n)*r]}var jn={ground:[.07,.085,.11],tierTop:[.24,.28,.34],tierWall:[.17,.2,.25],stageTop:[.94,.7,.38],stageWall:[.48,.33,.18],decorTop:[.22,.25,.29],decorWall:[.15,.17,.2],gaTop:[.24,.28,.33],gaWall:[.16,.19,.23],boothTop:[.3,.33,.38],boothWall:[.2,.23,.27],tableTop:[.38,.34,.29],tableWall:[.24,.21,.18]},Je={top:[.05,.06,.08],bottom:[.1,.12,.15]};function Pe(e,t){return[Math.min(1,e[0]*t),Math.min(1,e[1]*t),Math.min(1,e[2]*t)]}function Hs(){let e=typeof window<"u"&&window.devicePixelRatio||1,t=navigator.deviceMemory,n=typeof t=="number"&&t<=4?1.5:2;return Math.min(e,n)}var Qt=class{constructor(t,n){this.clearRgb=[0,0,0];this.container=t,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 Wo.Renderer({canvas:this.canvas,dpr:Hs(),alpha:!1,antialias:!1,depth:!0,stencil:!1,powerPreference:"high-performance",webgl:2}),this.gl=this.renderer.gl,this.clearRgb=[Je.top[0],Je.top[1],Je.top[2]],this.gl.clearColor(this.clearRgb[0],this.clearRgb[1],this.clearRgb[2],1),t.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(t){this.clearRgb=[t[0],t[1],t[2]],this.gl.clearColor(t[0],t[1],t[2],1)}get clearColor(){return this.clearRgb}resize(){let t=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(t,n),{width:t,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 t=this.gl.getExtension("WEBGL_lose_context");t&&t.loseContext(),this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas)}simulateContextLossCycle(){let t=this.gl.getExtension("WEBGL_lose_context");t&&(t.loseContext(),setTimeout(()=>{t.restoreContext&&t.restoreContext()},300))}};var ft=require("ogl"),he=Math.PI/180,Yn=15*he,Xn=80*he,dt=.12,Ko=35,qo=1.25,$o=.006,js=4,pt=.82,Tt=1/pt,Ys=.12,Xs=2;function Ws(e,t){return{azimuth:e*$o,polar:-t*$o}}function Ks(e,t,n){let r=Math.max(Xs,Math.max(1,t)*Ys),o=n*js;return{minDist:e?Math.min(e.minDist,r):r,maxDist:e?Math.max(e.maxDist,o):o}}var Zt=class{constructor(t,n,r,o){this.fovY=Ko;this.target=new ft.Vec3;this.azimuth=-30*he;this.polar=55*he;this.distance=10;this.azT=-30*he;this.polT=55*he;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 ft.Vec3;this.panAnchor=new ft.Vec3;this.panLimit=0;this.primaryDragMode="orbit";this.camera=new ft.Camera(t,{fov:Ko,near:.1,far:5e3,aspect:1}),this.canvas=n,this.requestRender=r,this.onGesture=o,this.onPointerDown=i=>{if(this.interactionEnabled){try{this.canvas.setPointerCapture?.(i.pointerId)}catch{}if(this.activePointers.set(i.pointerId,{x:i.clientX,y:i.clientY}),this.activePointers.size===1){let a=i.button===2||i.button===1,s=i.button===0&&(i.shiftKey?this.primaryDragMode==="orbit":this.primaryDragMode==="pan");this.panning=a||s,this.dragging=!this.panning,this.lastX=i.clientX,this.lastY=i.clientY}else if(this.activePointers.size===2){this.dragging=!1,this.panning=!1,this.pinchDist=this.currentPinchDistance();let a=this.pinchCentroid();this.pinchCx=a.x,this.pinchCy=a.y}}},this.onPointerMove=i=>{if(!this.interactionEnabled||!this.activePointers.has(i.pointerId))return;if(this.activePointers.set(i.pointerId,{x:i.clientX,y:i.clientY}),this.activePointers.size>=2){let u=this.currentPinchDistance();this.pinchDist>0&&(this.dollyBy(Math.exp((this.pinchDist-u)*.005)),this.fireGesture()),this.pinchDist=u;let d=this.pinchCentroid();this.panBy(d.x-this.pinchCx,d.y-this.pinchCy),this.pinchCx=d.x,this.pinchCy=d.y;return}let a=i.clientX-this.lastX,s=i.clientY-this.lastY;if(this.panning){this.lastX=i.clientX,this.lastY=i.clientY,(a!==0||s!==0)&&(this.panBy(a,s),this.fireGesture());return}if(!this.dragging)return;this.lastX=i.clientX,this.lastY=i.clientY,(a!==0||s!==0)&&this.fireGesture();let c=Ws(a,s);this.azT+=c.azimuth,this.polT=Math.max(Yn,Math.min(Xn,this.polT+c.polar)),this.requestRender()},this.onPointerUp=i=>{this.activePointers.delete(i.pointerId);try{this.canvas.releasePointerCapture?.(i.pointerId)}catch{}this.activePointers.size<2&&(this.pinchDist=0),this.activePointers.size===0&&(this.dragging=!1,this.panning=!1)},this.onContextMenu=i=>{i.preventDefault()},this.onWheel=i=>{if(i.preventDefault(),!this.interactionEnabled)return;let a=i.deltaMode===1?16:i.deltaMode===2?100:1,s=Math.max(-2,Math.min(2,i.deltaY*a/100));this.dollyBy(Math.exp(s*.22)),this.fireGesture()},this.onKeyDown=i=>{if(!this.interactionEnabled)return;let a=7*he;if(i.shiftKey&&(i.key==="ArrowLeft"||i.key==="ArrowRight"||i.key==="ArrowUp"||i.key==="ArrowDown"))this.panBy(i.key==="ArrowLeft"?-32:i.key==="ArrowRight"?32:0,i.key==="ArrowUp"?-32:i.key==="ArrowDown"?32:0);else if(i.key==="ArrowLeft"||i.key==="ArrowRight")this.azT+=i.key==="ArrowLeft"?-a:a;else if(i.key==="ArrowUp"||i.key==="ArrowDown")this.polT=Math.max(Yn,Math.min(Xn,this.polT+(i.key==="ArrowUp"?-a:a)));else if(i.key==="+"||i.key==="=")this.dollyBy(pt);else if(i.key==="-"||i.key==="_")this.dollyBy(Tt);else return;i.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 t=[...this.activePointers.values()];if(!t.length)return{x:0,y:0};let n=0,r=0;for(let o of t)n+=o.x,r+=o.y;return{x:n/t.length,y:r/t.length}}panBy(t,n){let r=this.canvas.clientHeight||1,o=2*this.distance*Math.tan(this.fovY*he/2)/r,i=Math.sin(this.azimuth),a=Math.cos(this.azimuth),s=a,c=-i,u=Math.cos(this.polar),d=Math.sin(this.polar),f=-i*u,m=-a*u;this.targetT.x+=(-t*s+n*f)*o,this.targetT.z+=(-t*c+n*m)*o,this.targetT.y+=n*d*o,this.clampPan(),this.requestRender()}clampPan(){if(this.panLimit<=0)return;let t=this.panLimit,n=this.panAnchor.x,r=this.panAnchor.y,o=this.panAnchor.z;this.targetT.x=Math.max(n-t,Math.min(n+t,this.targetT.x)),this.targetT.z=Math.max(o-t,Math.min(o+t,this.targetT.z)),this.targetT.y=Math.max(r-t*.5,Math.min(r+t,this.targetT.y))}fireGesture(){this.gestureFired||(this.gestureFired=!0,this.onGesture?.())}currentPinchDistance(){let t=[...this.activePointers.values()];return t.length<2?0:Math.hypot(t[0].x-t[1].x,t[0].y-t[1].y)}dollyBy(t){this.distT=Math.max(this.minDist,Math.min(this.maxDist,this.distT*t)),this.requestRender()}zoomBy(t){this.interactionEnabled&&(this.dollyBy(t),this.fireGesture())}dollyLimitState(){return{atMin:this.distT<=this.minDist+1e-6,atMax:this.distT>=this.maxDist-1e-6}}setPrimaryDragMode(t){this.primaryDragMode=t}setInteractionEnabled(t){this.interactionEnabled=t,!t&&(this.activePointers.clear(),this.dragging=!1,this.panning=!1,this.pinchDist=0)}frame(t,n=!1,r,o=!1,i){this.target.set(t.center[0],t.center[1],t.center[2]),this.targetT.copy(this.target),this.panAnchor.copy(this.target),this.panLimit=Math.max(1,t.radius)*1.5;let a=Math.max(1,t.radius),s=this.fovY*he/2,c=o?Math.max(.82,this.camera.aspect||1):this.camera.aspect||1,u=Math.atan(Math.tan(s)*c);this.azT=r??-30*he,this.polT=Math.max(15,Math.min(80,i?.polarDeg??55))*he;let d=this.fitDistance(t,s,u,this.azT,this.polT);this.distT=d*Math.max(1.05,Math.min(2,i?.margin??qo)),this.envelope=Ks(this.envelope,a,d),this.minDist=this.envelope.minDist,this.maxDist=this.envelope.maxDist,n?(this.azimuth=this.azT,this.polar=12*he,this.distance=this.distT*1.7):(this.azimuth=this.azT,this.polar=this.polT,this.distance=this.distT),this.applyPosition()}setAspect(t){this.camera.perspective({aspect:t})}frameSoft(t,n,r=!1,o){this.target.set(t.center[0],t.center[1],t.center[2]),this.targetT.copy(this.target),this.panAnchor.copy(this.target),this.panLimit=Math.max(1,t.radius)*1.5,this.syncFromCamera(),this.camera.perspective({fov:this.fovY,aspect:this.camera.aspect});let i=this.fovY*he/2,a=r?Math.max(.82,this.camera.aspect||1):this.camera.aspect||1,s=Math.atan(Math.tan(i)*a);this.azT=n??this.azimuth,this.polT=Math.max(15,Math.min(80,o?.polarDeg??55))*he;let c=this.fitDistance(t,i,s,this.azT,this.polT);this.distT=c*Math.max(1.05,Math.min(2,o?.margin??qo))}fitDistance(t,n,r,o,i){let a=Math.max(1,t.radius),s=Math.max(a/Math.tan(n),a/Math.tan(r)),c=t.box;if(!c)return s;let u=Math.sin(i),d=-u*Math.sin(o),f=-Math.cos(i),m=-u*Math.cos(o);if(Math.abs(f)>.999)return s;let l=-m,p=d,h=Math.hypot(l,p);l/=h,p/=h;let b=-p*f,y=p*d-l*m,v=l*f,S=Math.tan(r),M=Math.tan(n),R=1;for(let x=0;x<8;x++){let g=(x&1?c.max[0]:c.min[0])-t.center[0],C=(x&2?c.max[1]:c.min[1])-t.center[1],E=(x&4?c.max[2]:c.min[2])-t.center[2],D=g*d+C*f+E*m,B=Math.abs(g*l+E*p),L=Math.abs(g*b+C*y+E*v);R=Math.max(R,B/S-D,L/M-D)}return Math.min(s,Math.max(R,a*.35))}updateClipping(t){let n=this.camera.position.x-t.center[0],r=this.camera.position.y-t.center[1],o=this.camera.position.z-t.center[2],i=Math.hypot(n,r,o),a=Math.max(1,t.radius)*1.18,s=Math.max(.05,i-a),c=Math.max(s+10,i+a);this.camera.perspective({near:s,far:c,aspect:this.camera.aspect})}update(){let t=this.azT-this.azimuth,n=this.polT-this.polar,r=this.distT-this.distance,o=this.targetT.x-this.target.x,i=this.targetT.y-this.target.y,a=this.targetT.z-this.target.z,s=Math.max(1e-4,this.distance*1e-4),c=Math.abs(t)>1e-4||Math.abs(n)>1e-4||Math.abs(r)>1e-4||Math.abs(o)>s||Math.abs(i)>s||Math.abs(a)>s;return this.azimuth+=t*dt,this.polar+=n*dt,this.distance+=r*dt,this.target.x+=o*dt,this.target.y+=i*dt,this.target.z+=a*dt,c&&this.applyPosition(),c}get currentDistance(){return this.distance}syncFromCamera(){let t=this.camera.position.x-this.target.x,n=this.camera.position.y-this.target.y,r=this.camera.position.z-this.target.z,o=Math.hypot(t,n,r)||1,i=Math.max(Yn,Math.min(Xn,Math.acos(Math.max(-1,Math.min(1,n/o)))));this.distance=this.distT=o,this.polar=this.polT=i,this.azimuth=this.azT=Math.atan2(t,r)}setTarget(t){this.target.set(t[0],t[1],t[2]),this.targetT.copy(this.target)}resumeAfterFlight(t){this.camera.perspective({fov:this.fovY,aspect:this.camera.aspect}),t&&this.target.set(t[0],t[1],t[2]),this.targetT.copy(this.target),this.syncFromCamera()}applyPosition(){let t=Math.sin(this.polar),n=this.target.x+this.distance*t*Math.sin(this.azimuth),r=this.target.y+this.distance*Math.cos(this.polar),o=this.target.z+this.distance*t*Math.cos(this.azimuth);this.camera.position.set(n,r,o),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()}};var Jt=class{constructor(t){this.rafId=0;this.running=!1;this.lastTime=0;this.fpsEma=0;this.rendered=0;this.tick=t=>{let n=this.lastTime?(t-this.lastTime)/1e3:.016666666666666666;if(this.lastTime=t,n>0){let o=1/n;this.fpsEma=this.fpsEma?this.fpsEma*.9+o*.1:o}this.rendered++,this.frame(n)?this.rafId=requestAnimationFrame(this.tick):(this.running=!1,this.rafId=0)};this.frame=t}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 Qo(e,t,n){return Math.max(t,Math.min(n,e))}var ht=2.5,qs=1.15,_t=6,bt=10,Zo=6,Jo=9.5,er=.9,tr=2.2,Wn=30,Kn=4,en=8192;var kd=bt+Kn;function nr(e,t){let n=t*1.4,r=t*3.2;if(e<=n)return{scale:1,fade:0,minPixels:ht};let o=Math.min(1,(e-n)/Math.max(.001,r-n));return{scale:1-o*.4,fade:o*.55,minPixels:ht+o*(qs-ht)}}function or(e,t,n){return!(e>0)||!(t>0)||!(n>0)?!1:t*n/e>=64}function rr(e,t,n,r,o){if(!(e>0)||!(t>0)||!(n>0)||!(r>0)||!(o>0))return!1;let i=Math.tan(r/2*Math.PI/180);if(!(i>0))return!1;let a=t/(n*i)*(o/2);return Math.PI*a*a/e>=64}var $s=[{key:"wheelchair",label:"Wheelchair space",short:"Wheelchair",icon:"\u267F"},{key:"companion",label:"Companion seat",short:"Companion",icon:"\u{1F9D1}\u200D\u{1F91D}\u200D\u{1F9D1}"},{key:"semi-ambulatory",label:"Semi-ambulatory (limited mobility)",short:"Limited mobility",icon:"\u{1F9AF}"},{key:"designated-aisle",label:"Designated aisle / transfer seat",short:"Aisle transfer",icon:"AS"},{key:"step-free",label:"Step-free accessible seat",short:"Step-free",icon:"SF"},{key:"hearing",label:"Assistive listening",short:"Hearing",icon:"\u{1F9BB}"},{key:"cart",label:"CART live-caption view",short:"CART captions",icon:"CC"},{key:"sign-language",label:"Sign-language view",short:"Sign language",icon:"\u{1F91F}"},{key:"low-vision",label:"Blind / low-vision viewing",short:"Low vision",icon:"LV"},{key:"sensory-friendly",label:"Quiet / sensory-friendly seating",short:"Sensory-friendly",icon:"QS"},{key:"plus-size",label:"Plus-size seat",short:"Plus-size",icon:"\u{1F4BA}"},{key:"lift-armrest",label:"Lift-up armrest",short:"Lift armrest",icon:"\u2195\uFE0F"}],Dd=new Map($s.map(e=>[e.key,e]));var Qs={wheelchair:"#3b82f6",companion:"#8b5cf6","semi-ambulatory":"#0ea5e9","designated-aisle":"#0284c7","step-free":"#16a34a",hearing:"#14b8a6",cart:"#7c3aed","sign-language":"#f59e0b","low-vision":"#d97706","sensory-friendly":"#6366f1","plus-size":"#ec4899","lift-armrest":"#22c55e"};function ir(e){let t=e?.[0];return t&&Qs[t]||"#3b82f6"}var Zs=[{key:"obstructedView",label:"Obstructed view",short:"Obstructed",icon:"\u26D4"},{key:"restrictedView",label:"Restricted view",short:"Restricted",icon:"\u{1F441}"},{key:"premium",label:"Premium seat",short:"Premium",icon:"\u2605"}],Od=new Map(Zs.map(e=>[e.key,e]));var Js=["reference-focal","bar","entrance","exit","restroom","screen","sound","concession","coat","wall","rail","suite","obstruction"],Vd=new Set(Js);var sr=[{key:"circle",label:"Standard seat",shortLabel:"Standard",useCase:"General assigned seating",group:"general",path:null,bounds:null,mark:null},{key:"theatre",label:"Theatre chair",shortLabel:"Theatre",useCase:"Auditoriums, arenas and stadium stands",group:"fixed",path:"M4.5 3.5 Q4.5 1.5 6.5 1.5 L17.5 1.5 Q19.5 1.5 19.5 3.5 L19.5 13 L4.5 13 Z M3.5 12 L20.5 12 Q22.5 12 22.5 14 L22.5 21 Q22.5 22.5 21 22.5 Q19.5 22.5 19.5 21 L19.5 17.5 L4.5 17.5 L4.5 21 Q4.5 22.5 3 22.5 Q1.5 22.5 1.5 21 L1.5 14 Q1.5 12 3.5 12 Z",bounds:{x:1.5,y:1.5,width:21,height:21},mark:{x:12,y:10,radius:6}},{key:"dining",label:"Dining chair",shortLabel:"Dining",useCase:"Banquets, restaurants and table seating",group:"flexible",path:"M7 1 Q6 1 6 2.5 L6.75 10.5 L5 10.5 Q4 10.5 4 12 L4 14 Q4 15 5.25 15 L6 15 L4 23 L7 23 L9.5 15 L14.5 15 L17 23 L20 23 L18 15 L18.75 15 Q20 15 20 14 L20 12 Q20 10.5 19 10.5 L17.25 10.5 L18 2.5 Q18 1 17 1 Z",bounds:{x:4,y:1,width:16,height:22},mark:{x:12,y:10,radius:4.5}},{key:"folding",label:"Folding chair",shortLabel:"Folding",useCase:"Concert floors, ceremonies and conferences",group:"flexible",path:"M6 2 Q5 2 5 3 L6 8 L18 8 L19 3 Q19 2 18 2 Z M5 9 L19 9 Q20 9 20 10.5 L19 13 L5 13 L4 10.5 Q4 9 5 9 Z M6 12 L9 12 L12 17 L15 12 L18 12 L14 19 L17 23 L14 23 L12 21 L10 23 L7 23 L10 19 Z",bounds:{x:4,y:2,width:16,height:21},mark:{x:12,y:5,radius:3}},{key:"armchair",label:"Premium armchair",shortLabel:"Armchair",useCase:"Boxes, lounges and club seating",group:"premium",path:"M3.5 4 Q3.5 1.5 6 1.5 L18 1.5 Q20.5 1.5 20.5 4 L20.5 13 L3.5 13 Z M1.5 12.5 Q1.5 10 3.25 10 Q5 10 5 12.5 L5 13.5 L19 13.5 L19 12.5 Q19 10 20.75 10 Q22.5 10 22.5 12.5 L22.5 19.5 Q22.5 22 20 22 L4 22 Q1.5 22 1.5 19.5 Z",bounds:{x:1.5,y:1.5,width:21,height:20.5},mark:{x:12,y:7.5,radius:5.5}},{key:"recliner",label:"Recliner",shortLabel:"Recliner",useCase:"Luxury cinemas and premium clubs",group:"premium",path:"M7 2 Q7 1 8.5 1 L15.5 1 Q17 1 17 2 L19 13 L5 13 Z M4 9 Q2 9 2 11.5 L2 16 Q2 18 4 18 L6 18 L6 15 L18 15 L18 18 L20 18 Q22 18 22 16 L22 11.5 Q22 9 20 9 Q18 9 18 11 L18 13 L6 13 L6 11 Q6 9 4 9 Z M7 17 L17 17 Q18 17 18.5 18.5 L19.5 22.5 L4.5 22.5 L5.5 18.5 Q6 17 7 17 Z",bounds:{x:2,y:1,width:20,height:21.5},mark:{x:12,y:8,radius:5}},{key:"stool",label:"Stool",shortLabel:"Stool",useCase:"Bars, high-tops and seating rails",group:"flexible",path:"M6 2.5 L18 2.5 Q22 2.5 22 6.5 L22 12 Q22 16 18 16 L6 16 Q2 16 2 12 L2 6.5 Q2 2.5 6 2.5 Z M6 15.5 L9.5 15.5 L7.5 22.5 L3 22.5 Z M14.5 15.5 L18 15.5 L20.5 22.5 L16 22.5 Z",bounds:{x:2,y:2.5,width:20,height:20},mark:{x:12,y:9.25,radius:6.5}},{key:"bench",label:"Bench place",shortLabel:"Bench",useCase:"Pews, bleachers and terraces",group:"fixed",path:"M2.5 0.5 L21.5 0.5 Q23 0.5 23 2 L23 5 Q23 6.5 21.5 6.5 L2.5 6.5 Q1 6.5 1 5 L1 2 Q1 0.5 2.5 0.5 Z M2 7.5 L22 7.5 Q23.5 7.5 23.5 9 L23.5 15.5 Q23.5 17 22 17 L18 17 L18 21.5 Q18 22.5 16.75 22.5 Q15.5 22.5 15.5 21.5 L15.5 17 L8.5 17 L8.5 21.5 Q8.5 22.5 7.25 22.5 Q6 22.5 6 21.5 L6 17 L2 17 Q0.5 17 0.5 15.5 L0.5 9 Q0.5 7.5 2 7.5 Z",bounds:{x:.5,y:.5,width:23,height:22},mark:{x:12,y:12.25,radius:4.75}}],cr=sr.map(e=>e.key),ec=new Map(sr.map(e=>[e.key,e]));function ar(e){return typeof e=="string"&&ec.has(e)}function lr(e,t){return ar(e)?e:ar(t?.seatGlyph)?t.seatGlyph:"circle"}var be=.02291666666666667,He=1/be,tc=58,nc=tc*be;var oc=3,ur=0,qn=120,rc=0,ic=45,ac=7,Ie=1.2;function $n(e,t,n,r){return Number.isFinite(e)?Math.max(t,Math.min(n,e)):r}function sc(e){return!Number.isFinite(e)||!Number.isInteger(e)||e<0?0:e<=ac?e:oc}function tn(e,t={}){let n=$n(t.floorBaseHeightM,ur,qn,0),r=Math.min(qn,n+sc(e.elevation)*nc),o=e.height===void 0?r:$n(e.height,ur,qn,r),i=$n(e.rake,rc,ic,0);return{height:o,rake:i}}var dr=mt(require("earcut"),1),fr=mt(require("polygon-clipping"),1);var Hd=Math.PI/180;function Qn(e){let t=0,n=0;for(let o of e)t+=o.x,n+=o.y;let r=e.length||1;return{x:t/r,y:n/r}}function Lt(e){return e.length?Qn(e):null}function et(e){let t=0;for(let n=0,r=e.length;n<r;n+=1){let o=e[n],i=e[(n+1)%r];t+=o.x*i.y-i.x*o.y}return t/2}function kt(e,t,n){let r=!1;for(let o=0,i=e.length-1;o<e.length;i=o++){let a=e[o],s=e[i];a.y>n!=s.y>n&&t<(s.x-a.x)*(n-a.y)/(s.y-a.y)+a.x&&(r=!r)}return r}var z=be,cc=.002;function lc(e,t,n){let r=Math.hypot(t[0]-e[0],t[1]-e[1],t[2]-e[2]),o=Math.hypot(n[0]-t[0],n[1]-t[1],n[2]-t[2]),i=Math.hypot(e[0]-n[0],e[1]-n[1],e[2]-n[2]),a=Math.max(r,o,i);if(a<1e-9)return!0;let s=(r+o+i)/2;return 2*Math.sqrt(Math.max(0,s*(s-r)*(s-o)*(s-i)))/a<cc}var tt=class{constructor(t=16384){this.len=0;this.buf=new Float32Array(t)}push3(t,n,r){this.len+3>this.buf.length&&this.grow(this.len+3),this.buf[this.len++]=t,this.buf[this.len++]=n,this.buf[this.len++]=r}push1(t){this.len+1>this.buf.length&&this.grow(this.len+1),this.buf[this.len++]=t}grow(t){let n=this.buf.length*2;for(;n<t;)n*=2;let r=new Float32Array(n);r.set(this.buf.subarray(0,this.len)),this.buf=r}get length(){return this.len}toArray(){return this.buf.slice(0,this.len)}},rn=class{constructor(){this.pos=new tt;this.nor=new tt;this.col=new tt;this.flr=new tt;this.mat=new tt;this.currentFloor=0;this.currentMaterial=0}setFloor(t){this.currentFloor=t}setMaterial(t){this.currentMaterial=t}tri(t,n,r,o,i,a=i,s=i){lc(t,n,r)||(this.pos.push3(t[0],t[1],t[2]),this.pos.push3(n[0],n[1],n[2]),this.pos.push3(r[0],r[1],r[2]),this.nor.push3(o[0],o[1],o[2]),this.nor.push3(o[0],o[1],o[2]),this.nor.push3(o[0],o[1],o[2]),this.col.push3(i[0],i[1],i[2]),this.col.push3(a[0],a[1],a[2]),this.col.push3(s[0],s[1],s[2]),this.flr.push1(this.currentFloor),this.flr.push1(this.currentFloor),this.flr.push1(this.currentFloor),this.mat.push1(this.currentMaterial),this.mat.push1(this.currentMaterial),this.mat.push1(this.currentMaterial))}triN(t,n,r,o,i,a,s,c=s,u=s){[...t,...n,...r].every(Number.isFinite)&&(this.pos.push3(t[0],t[1],t[2]),this.pos.push3(n[0],n[1],n[2]),this.pos.push3(r[0],r[1],r[2]),this.nor.push3(o[0],o[1],o[2]),this.nor.push3(i[0],i[1],i[2]),this.nor.push3(a[0],a[1],a[2]),this.col.push3(s[0],s[1],s[2]),this.col.push3(c[0],c[1],c[2]),this.col.push3(u[0],u[1],u[2]),this.flr.push1(this.currentFloor),this.flr.push1(this.currentFloor),this.flr.push1(this.currentFloor),this.mat.push1(this.currentMaterial),this.mat.push1(this.currentMaterial),this.mat.push1(this.currentMaterial))}get vertexCount(){return this.pos.length/3}build(){return{position:this.pos.toArray(),normal:this.nor.toArray(),color:this.col.toArray(),floor:this.flr.toArray(),material:this.mat.toArray(),count:this.pos.length/3}}};function uc(e,t,n){let r=t[0]-e[0],o=t[1]-e[1],i=t[2]-e[2],a=n[0]-e[0],s=n[1]-e[1],c=n[2]-e[2],u=o*c-i*s,d=i*a-r*c,f=r*s-o*a,m=Math.hypot(u,d,f)||1;return u/=m,d/=m,f/=m,[u,d,f]}function mc(e,t){let n=[...e],r=[];for(let a of e)r.push(a.x,a.y);let o=[];if(t){for(let a of t)if(!(a.length<3)){o.push(n.length);for(let s of a)n.push(s),r.push(s.x,s.y)}}let i=(0,dr.default)(r,o.length?o:void 0,2);return{pts:n,tris:i}}function Zn(e){return et(e)<0?[...e].reverse():e}var dc=3;function fc(e,t,n,r){let o=r(e),i=r(t),a=r(n),s=(l,p,h,b)=>Math.abs(r({x:(l.x+p.x)/2,y:(l.y+p.y)/2})-(h+b)/2),c=(e.x+t.x+n.x)/3,u=(e.y+t.y+n.y)/3,d=(o+i+a)/3,f=Math.max(s(e,t,o,i),s(t,n,i,a),s(n,e,a,o),Math.abs(r({x:c,y:u})-d)),m=(l,p,h)=>{let b=Math.abs(r({x:(l+c)/2,y:(p+u)/2})-(h+d)/2);b>f&&(f=b)};return m((e.x+t.x)/2,(e.y+t.y)/2,(o+i)/2),m((t.x+n.x)/2,(t.y+n.y)/2,(i+a)/2),m((n.x+e.x)/2,(n.y+e.y)/2,(a+o)/2),f}function Ft(e,t,n,r,o){if(o<=0)return fc(e,t,n,r);let i={x:(e.x+t.x)/2,y:(e.y+t.y)/2},a={x:(t.x+n.x)/2,y:(t.y+n.y)/2},s={x:(n.x+e.x)/2,y:(n.y+e.y)/2};return Math.max(Ft(e,i,s,r,o-1),Ft(i,t,a,r,o-1),Ft(s,a,n,r,o-1),Ft(i,a,s,r,o-1))}function Dt(e,t,n,r,o,i,a,s){if(a>0){let m={x:(t.x+n.x)/2,y:(t.y+n.y)/2},l={x:(n.x+r.x)/2,y:(n.y+r.y)/2},p={x:(r.x+t.x)/2,y:(r.y+t.y)/2};Dt(e,t,m,p,o,i,a-1,s),Dt(e,m,n,l,o,i,a-1,s),Dt(e,p,l,r,o,i,a-1,s),Dt(e,m,l,p,o,i,a-1,s);return}let c=[t.x*z,o(t),t.y*z],u=[n.x*z,o(n),n.y*z],d=[r.x*z,o(r),r.y*z];if(s){e.triN(c,u,d,s(t),s(n),s(r),i);return}let f=uc(c,u,d);f[1]<0&&(f=[-f[0],-f[1],-f[2]]),e.tri(c,u,d,f,i)}var pc=8;function mr(e,t,n){if(!Number.isFinite(n))return e;let r=[],o=(i,a,s,c,u)=>{if(u>0){let d={x:(i.x+a.x)/2,y:(i.y+a.y)/2},f=t(d);if(Math.abs(f-(s+c)/2)>n){o(i,d,s,f,u-1),o(d,a,f,c,u-1);return}}r.push(i)};for(let i=0;i<e.length;i++){let a=e[i],s=e[(i+1)%e.length];o(a,s,t(a),t(s),pc)}return r}function nn(e,t){if(e.length<3)return e;let n=[];for(let o of e){let i=n[n.length-1];i&&Math.hypot(o.x-i.x,o.y-i.y)<t||n.push(o)}for(;n.length>2&&Math.hypot(n[0].x-n[n.length-1].x,n[0].y-n[n.length-1].y)<t;)n.pop();if(n.length<3)return e;let r=[];for(let o=0;o<n.length;o++){let i=r.length?r[r.length-1]:n[(o-1+n.length)%n.length],a=n[o],s=n[(o+1)%n.length],c=s.x-i.x,u=s.y-i.y,d=Math.hypot(c,u);d>t&&Math.abs((a.x-i.x)*u-(a.y-i.y)*c)/d<t||r.push(a)}return r.length>=3?r:n}var on=.001*He*.1;function ue(e,t,n,r,o,i,a,s,c=1/0,u){if(!t||t.length<3||(c===void 0&&(c=1/0),Math.abs(et(t))<1e-4))return;let d=nn(mr(nn(Zn(t),on),r,c),on),f=n?.map(x=>nn(mr(nn(Zn(x),on),r,c),on)).filter(x=>x.length>=3&&Math.abs(et(x))>=1e-4),{pts:m,tris:l}=mc(d,f),p=[i[0]*s.top,i[1]*s.top,i[2]*s.top],h=[i[0]*s.bottomCap,i[1]*s.bottomCap,i[2]*s.bottomCap],b=[a[0]*s.top,a[1]*s.top,a[2]*s.top],y=[a[0]*s.wallBottom,a[1]*s.wallBottom,a[2]*s.wallBottom],v=0;if(Number.isFinite(c))for(;v<dc;v++){let x=0;for(let g=0;g<l.length;g+=3){let C=Ft(m[l[g]],m[l[g+1]],m[l[g+2]],r,v);C>x&&(x=C)}if(x<=c)break}for(let x=0;x<l.length;x+=3){let g=m[l[x]],C=m[l[x+1]],E=m[l[x+2]];Dt(e,g,C,E,r,p,v,u);let D=[g.x*z,o,g.y*z],B=[C.x*z,o,C.y*z],L=[E.x*z,o,E.y*z];e.tri(D,L,B,[0,-1,0],h)}let S=x=>{if(v<=0)return x;let g=1<<v,C=[];for(let E=0;E<x.length;E++){let D=x[E],B=x[(E+1)%x.length];for(let L=0;L<g;L++){let A=L/g;C.push({x:D.x+(B.x-D.x)*A,y:D.y+(B.y-D.y)*A})}}return C},M=Qn(d),R=[{ring:S(d),flip:!1}];if(f)for(let x of f)x.length>=3&&R.push({ring:S(x),flip:!0});for(let{ring:x,flip:g}of R)for(let C=0;C<x.length;C++){let E=x[C],D=x[(C+1)%x.length],B=(D.x-E.x)*z,A=(D.y-E.y)*z,k=-B,N=Math.hypot(A,k)||1;A/=N,k/=N;let w=(E.x+D.x)/2-M.x,T=(E.y+D.y)/2-M.y,_=A*w+k*T;g&&(_=-_),_<0&&(A=-A,k=-k);let P=[A,0,k],O=[E.x*z,r(E),E.y*z],I=[D.x*z,r(D),D.y*z],F=[E.x*z,o,E.y*z],H=[D.x*z,o,D.y*z];e.tri(O,I,H,P,b,b,y),e.tri(O,H,F,P,b,y,y)}}function pr(e){let t=0;for(let c of e)t+=c.count;let n=new Float32Array(t*3),r=new Float32Array(t*3),o=new Float32Array(t*3),i=new Float32Array(t),a=new Float32Array(t),s=0;for(let c of e)n.set(c.position,s*3),r.set(c.normal,s*3),o.set(c.color,s*3),i.set(c.floor,s),a.set(c.material,s),s+=c.count;return{position:n,normal:r,color:o,floor:i,material:a,count:t}}function an(e,t,n=2.5){if(t<=0||e.length<3)return e;let r=Zn(e),o=r.length,i=[];for(let s=0;s<o;s++){let c=r[s],u=r[(s+1)%o],d=u.x-c.x,f=u.y-c.y,m=Math.hypot(d,f)||1;i.push({x:f/m,y:-d/m})}let a=[];for(let s=0;s<o;s++){let c=r[s],u=i[(s-1+o)%o],d=i[s],f=u.x+d.x,m=u.y+d.y,l=Math.hypot(f,m),p=()=>{a.push([c.x+u.x*t,c.y+u.y*t]),a.push([c.x+d.x*t,c.y+d.y*t])};if(l<1e-9){p();continue}f/=l,m/=l;let h=f*u.x+m*u.y,b=1/Math.max(h,1e-6);if(!Number.isFinite(b)||b>n){p();continue}a.push([c.x+f*t*b,c.y+m*t*b])}if(a.length<3)return e;try{let s=fr.default.union([[...a,a[0]]]),c=null,u=-1/0;for(let f of s){let m=Math.abs(et(f[0].map(([l,p])=>({x:l,y:p}))));m>u&&(u=m,c=f[0])}if(!c)return e;let d=c.map(([f,m])=>({x:f,y:m}));if(d.length>1){let f=d[0],m=d[d.length-1];Math.abs(f.x-m.x)<1e-9&&Math.abs(f.y-m.y)<1e-9&&d.pop()}return d.length>=3?d:e}catch{return e}}function sn(e,t,n,r,o=28){let i=[];for(let a=0;a<o;a++){let s=a/o*Math.PI*2;i.push({x:e+n*Math.cos(s),y:t+r*Math.sin(s)})}return i}function Ot(e,t,n,r){return[{x:e,y:t},{x:e+n,y:t},{x:e+n,y:t+r},{x:e,y:t+r}]}var ae={pedestal:0,pad:1,back:2,arm:3,footrest:4,leg:5,body:10,head:11},hc=.44,bc=.15,hr=.3,yc=.24;function br(e){return e===void 0||!Number.isFinite(e)||e<=0?yc:Math.min(hr,Math.max(bc,e*hc))}var Jn=.21,gc=.05,eo=.45,cn=eo+gc,yr=.92,to=1.205,gr=-.23,xr=.38,xc=[{part:ae.pedestal,min:[-.3,0,-.3],max:[.3,.36,.3]},{part:ae.pad,min:[-1,.36,-.95],max:[1,eo,1]},{part:ae.back,min:[-1,cn,-1],max:[1,yr,-.72]},{part:ae.arm,min:[-1,.44,-.82],max:[-.78,.65,.78]},{part:ae.arm,min:[.78,.44,-.82],max:[1,.65,.78]},{part:ae.footrest,min:[-.9,.18,.78],max:[.9,.31,1.34]},{part:ae.leg,min:[-.82,0,-.7],max:[-.62,.37,-.48]},{part:ae.leg,min:[.62,0,-.7],max:[.82,.37,-.48]},{part:ae.leg,min:[-.82,0,.48],max:[-.62,.37,.7]},{part:ae.leg,min:[.62,0,.48],max:[.82,.37,.7]}],vc=[{part:ae.body,min:[-.52,.39,-.08],max:[-.08,.55,.82]},{part:ae.body,min:[.08,.39,-.08],max:[.52,.55,.82]},{part:ae.body,min:[-.47,.05,.58],max:[-.13,.43,.82]},{part:ae.body,min:[.13,.05,.58],max:[.47,.43,.82]},{part:ae.head,min:[-.16,1.04,-.33],max:[.16,1.1,-.13]}],Sc=[{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]]}];function vr(){let e=[],t=[],n=[],r=[],o=(N,w,T)=>{let _=n.length,[P,O,I]=N,F=[O[0]-P[0],O[1]-P[1],O[2]-P[2]],H=[I[0]-P[0],I[1]-P[1],I[2]-P[2]],j=F[1]*H[2]-F[2]*H[1],G=F[2]*H[0]-F[0]*H[2],V=F[0]*H[1]-F[1]*H[0],W=Math.hypot(j,G,V);W>1e-9?(j/=W,G/=W,V/=W):[j,G,V]=w,j*w[0]+G*w[1]+V*w[2]<0&&(j=-j,G=-G,V=-V);for(let X of N)e.push(...X),t.push(j,G,V),n.push(T);r.push(_,_+1,_+2,_,_+2,_+3)},i=N=>{for(let w of Sc){let T=w.c.map(_=>_.map((P,O)=>P?N.max[O]:N.min[O]));o(T,w.n,N.part)}};for(let N of xc)i(N);for(let N of vc)i(N);let a=eo,s=1.08,c=.47,u=.69,d=-.55,f=.08,m=-.48,l=.01,p=[-c,a,d],h=[c,a,d],b=[-c,a,f],y=[c,a,f],v=[-u,s,m],S=[u,s,m],M=[-u,s,l],R=[u,s,l];o([h,S,R,y],[1,0,0],ae.body),o([b,M,v,p],[-1,0,0],ae.body),o([M,R,S,v],[0,1,0],ae.body),o([p,h,y,b],[0,-1,0],ae.body),o([y,R,M,b],[0,0,1],ae.body),o([p,v,S,h],[0,0,-1],ae.body);let x=10,g=8,C=[0,to,gr],E=[.42,.115,xr],D=n.length;for(let N=0;N<=g;N++){let w=Math.PI*N/g,T=Math.cos(w),_=Math.sin(w);for(let P=0;P<=x;P++){let O=Math.PI*2*P/x,I=_*Math.cos(O),F=_*Math.sin(O);e.push(C[0]+E[0]*I,C[1]+E[1]*T,C[2]+E[2]*F);let H=I/E[0],j=T/E[1],G=F/E[2],V=Math.hypot(H,j,G)||1;H/=V,j/=V,G/=V,t.push(H,j,G),n.push(ae.head)}}for(let N=0;N<g;N++)for(let w=0;w<x;w++){let T=D+N*(x+1)+w,_=T+x+1;r.push(T,_,T+1,T+1,_,_+1)}let B=new Float32Array(e),L=new Float32Array(t),A=new Float32Array(n),k=new Uint16Array(r);return{position:B,normal:L,part:A,index:k,vertexCount:n.length,indexCount:r.length}}function Sr(e,t,n,r){let o=new Float32Array(t),i=u=>e[u*3],a=u=>e[u*3+2],s=0,c=(u,d)=>{let f=d-u;for(let m=u;m<d;m++){let[l,p]=r(m),h=l-i(m),b=p-a(m);if(f>=2){let y=Math.max(u,m-1),v=Math.min(d-1,m+1),S=i(v)-i(y),M=a(v)-a(y),R=Math.hypot(S,M);if(R>1e-6){let x=-M/R,g=S/R;x*h+g*b<0&&(x=-x,g=-g),h=x,b=g}}o[m]=h===0&&b===0?0:Math.atan2(h,b)}};for(let u=1;u<=t;u++)(u===t||n(u)!==n(s))&&(c(s,u),s=u);return o}var De=.22;function Mr(e,t){let n=pe[e];if(n!=="sold"&&n!=="held")return-1;let r=(t+1)*2654435761;return r^=r>>>15,r=Math.imul(r,2246822519),r^=r>>>13,(r>>>0)%1e5/1e5}var Mc=.42;function wc(e){let t=e.length,n=new Float64Array(t);if(t<2)return n.fill(1/0),n;let r=1/0,o=1/0,i=-1/0,a=-1/0;for(let p of e)p.x<r&&(r=p.x),p.y<o&&(o=p.y),p.x>i&&(i=p.x),p.y>a&&(a=p.y);let s=Math.max(i-r,1e-6),c=Math.max(a-o,1e-6),u=Math.max(Math.sqrt(s*c/t),1e-6),d=Math.max(1,Math.ceil(s/u)+1),f=Math.max(1,Math.ceil(c/u)+1),m=new Map,l=(p,h)=>{let b=Math.min(d-1,Math.max(0,Math.floor((p-r)/u)));return Math.min(f-1,Math.max(0,Math.floor((h-o)/u)))*d+b};for(let p=0;p<t;p++){let h=l(e[p].x,e[p].y),b=m.get(h);b?b.push(p):m.set(h,[p])}for(let p=0;p<t;p++){let h=e[p],b=Math.min(d-1,Math.max(0,Math.floor((h.x-r)/u))),y=Math.min(f-1,Math.max(0,Math.floor((h.y-o)/u))),v=1/0;for(let S=1;S<=4;S++){for(let M=y-S;M<=y+S;M++)if(!(M<0||M>=f))for(let R=b-S;R<=b+S;R++){if(R<0||R>=d||S>1&&Math.abs(M-y)<S&&Math.abs(R-b)<S)continue;let x=m.get(M*d+R);if(x)for(let g of x){if(g===p)continue;let C=Math.hypot(e[g].x-h.x,e[g].y-h.y);C<v&&(v=C)}}if(Number.isFinite(v)&&v<=S*u)break}n[p]=v}return n}function Pc(e){let t=e.eyeHeightM;return Number.isFinite(t)?Math.max(0,t-Ie):0}function wr(e,t,n,r,o,i){let a=e.length,s=new Float32Array(a*3),c=new Float32Array(a),u=new Float32Array(a*3),d=new Float32Array(a),f=new Float32Array(a),m=new Float32Array(a),l=new Float32Array(a),p=new Float32Array(a*3),h=new Map,b=wc(e);for(let y=0;y<a;y++){let v=e[y],M=(n?.seatPitchU(y)??b[y])*z;d[y]=Number.isFinite(M)?Math.max(.06,Math.min(De,M*Mc)):De,f[y]=br(Number.isFinite(M)?M:void 0);let R=lr(v.glyph,{seatGlyph:i?.get(v.categoryKey)});m[y]=cr.indexOf(R),l[y]=v.wheelchairSpaceType==="no-seat"?0:1,s[y*3]=v.x*z,s[y*3+1]=n?n.seatDeckY(y):Pc(v),s[y*3+2]=v.y*z,c[y]=It(t?t(v):"available");let x=ne(o?.get(v.categoryKey)??"#6e7bff")??[.43,.48,1];if(u[y*3]=x[0],u[y*3+1]=x[1],u[y*3+2]=x[2],v.accessibility?.length){let g=ne(ir(v.accessibility));g&&(p[y*3]=g[0],p[y*3+1]=g[1],p[y*3+2]=g[2])}h.set(v.id,y)}return{count:a,iPosition:s,iState:c,iCategory:u,iMaxRadius:d,iRing:p,idToIndex:h,iChairWidth:f,iGlyph:m,iPhysicalSeat:l,iFloor:r??new Float32Array(a),iYaw:new Float32Array(a)}}var Cc=64;function no(e,t){let n=[];for(let a of t){let s=e.idToIndex.get(a.seatId);if(s===void 0)continue;let c=It(a.state);e.iState[s]!==c&&(e.iState[s]=c,n.push(s))}if(!n.length)return[];n.sort((a,s)=>a-s);let r=[],o=n[0],i=n[0];for(let a=1;a<n.length;a++){let s=n[a];if(s!==i){if(s<=i+Cc){i=s;continue}r.push({start:o,length:i-o+1}),o=s,i=s}}return r.push({start:o,length:i-o+1}),r}var Ac=.15,Rc=1.6;function Pr(e){return Qo(e??1,Ac,Rc)}var Ec=.15,Ic=.9,Tc=1.76;function _c(){return{background:{top:[...Je.top],bottom:[...Je.bottom]},structure:jn,seatStates:{...Yo},seatScale:1,materials:{seat:null,shell:null,roughness:.78}}}function Cr(e){let t=_c();if(!e)return t;let n=ne(e.background);if(n){t.background={top:Pe(n,Ic),bottom:Pe(n,Tc)};let a={};for(let[s,c]of Object.entries(jn))a[s]=ge(c,n,Ec);t.structure=a}let r=ne(e.selectionColor)??ne(e.accent);r&&(t.seatStates={...t.seatStates,selected:r});let o=e.seatScale;typeof o=="number"&&Number.isFinite(o)&&(t.seatScale=Pr(o));let i=e.venue3d;if(i){let a=ne(i.deck),s=ne(i.fascia);a&&(t.structure={...t.structure,tierTop:a,gaTop:a}),s&&(t.structure={...t.structure,tierWall:s,gaWall:s}),t.materials.seat=ne(i.seat),t.materials.shell=ne(i.shell),typeof i.roughness=="number"&&Number.isFinite(i.roughness)&&(t.materials.roughness=Math.min(1,Math.max(0,i.roughness)))}return t}function Ar(e,t){let n=[];for(let r of t)n.push(...e.seatStates[r]);return n}function Rr(e,t){let n=1-t,r=n*n*n,o=3*n*n*t,i=3*n*t*t,a=t*t*t;return{x:r*e.start.x+o*e.control1.x+i*e.control2.x+a*e.end.x,y:r*e.start.y+o*e.control1.y+i*e.control2.y+a*e.end.y}}function Er(e,t,n=192){if(!Number.isInteger(t)||t<1)throw new Error("Path point count must be a positive integer");if(t===1)return[Rr(e,.5)];let r=Array.from({length:n+1},(c,u)=>Rr(e,u/n)),o=new Float64Array(r.length);for(let c=1;c<r.length;c+=1){let u=r[c].x-r[c-1].x,d=r[c].y-r[c-1].y;o[c]=o[c-1]+Math.hypot(u,d)}let i=o[o.length-1];if(i<=1e-9)return Array.from({length:t},()=>({...e.start}));let a=[],s=1;for(let c=0;c<t;c+=1){let u=i*c/(t-1);for(;s<o.length-1&&o[s]<u;)s+=1;let d=o[s-1],f=o[s],m=f===d?0:(u-d)/(f-d);a.push({x:r[s-1].x+(r[s].x-r[s-1].x)*m,y:r[s-1].y+(r[s].y-r[s-1].y)*m})}return a}function Ir(e){let t=new Map,n=new Map;for(let r of e){if(r.type!=="row"||!r.segmentedRow)continue;let o=n.get(r.segmentedRow.groupId)??[];o.push(r),n.set(r.segmentedRow.groupId,o)}for(let[r,o]of n){let i=o.slice().sort((m,l)=>m.segmentedRow.componentIndex-l.segmentedRow.componentIndex),a=i[0]?.segmentedRow?.componentCount??0,s=i[0]?.segmentedRow;if(!s||!(a>=2&&i.length===a&&s?.boundaryBefore==="start"&&i.every((m,l)=>m.segmentedRow?.kind==="segmented-row-v1"&&m.segmentedRow.groupId===r&&m.segmentedRow.componentCount===a&&m.segmentedRow.componentIndex===l&&m.segmentedRow.repeatLabelOnComponents===s.repeatLabelOnComponents&&(l===0?m.segmentedRow.boundaryBefore==="start":m.segmentedRow.boundaryBefore!=="start")&&m.segmentedRow.displayLabel===s.displayLabel)))continue;let u=i.reduce((m,l)=>m+l.seatCount,0),d=0,f=0;for(let m of i)m.segmentedRow.boundaryBefore==="break"&&(d+=1),t.set(m.id,{groupId:r,adjacencyOffset:d,displayOffset:f,displayLabel:s.displayLabel,totalSeats:u,canonical:i[0],viewFromSeatUrl:s.viewFromSeatUrl,viewFromSeatMeta:s.viewFromSeatMeta,confidenceEvidence:s.confidenceEvidence}),d+=m.seatCount,f+=m.seatCount}return t}var Lc="ABCDEFGHIJKLMNOPQRSTUVWXYZ";var kc="abcdefghijklmnopqrstuvwxyz";function Fc(e,t){let n=t.length,r=e+1,o="";for(;r>0;){r-=1;let i=r%n;o=t[i]+o,r=Math.floor(r/n)}return o}function oo(e,t=!1){let n=t?kc:Lc;return Fc(Math.max(0,Math.floor(e)-1),n)}var Dc=[[1e3,"M"],[900,"CM"],[500,"D"],[400,"CD"],[100,"C"],[90,"XC"],[50,"L"],[40,"XL"],[10,"X"],[9,"IX"],[5,"V"],[4,"IV"],[1,"I"]];function Tr(e){if(!Number.isFinite(e)||e<=0)return String(e);let t=Math.floor(e),n="";for(let[r,o]of Dc)for(;t>=r;)n+=o,t-=r;return n}function Oc(e){let t=new Array(e);return Array.from({length:e},(n,r)=>r).sort((n,r)=>Math.abs(2*n-(e-1))-Math.abs(2*r-(e-1))||n-r).forEach((n,r)=>t[n]=r),t}function ln(e,t){let n=e.seatLabelStart??1,r=e.seatNumbering?.direction??"ltr",o=e.seatNumbering?.step??1,i=e.seatNumbering?.scheme??"decimal",a=e.seatNumbering?.prefix??"",s=e.seatNumbering?.endAt,c=e.seatCount;if(i==="updown"||i==="updown-descending"){let l=Math.ceil(c/2),p=i==="updown"?t<l?n+2*t:n-1+2*(c-t):t<l?n+2*(l-1-t):n+1+2*(t-l);return`${a}${p}`}let u=i==="odd"||i==="even"?2:o,d=s!=null&&Number.isFinite(s)?s-(c-1)*u:n,f=r==="center"?Oc(c)[t]:r==="rtl"?c-1-t:t,m;switch(i){case"odd":{let l=d%2===1?d:d+1;m=String(l+f*2);break}case"even":{let l=d%2===0?d:d+1;m=String(l+f*2);break}case"roman":m=Tr(d+f*o);break;case"letters-upper":m=oo(d+f*o,!1);break;case"letters-lower":m=oo(d+f*o,!0);break;default:m=String(d+f*o);break}return`${a}${m}`}function Vc(e){return{...e.canonical,seatCount:e.totalSeats,label:e.displayLabel,displayLabel:e.displayLabel}}function _r(e,t,n){return n?.label??`${e.seatLabelBase??e.label}-${ln(e,t)}`}function ro(e,t,n,r){if(r?.displayLabel)return r.displayLabel;if(e.seatDisplayLabelMode==="number")return ln(e,t);if(!n)return`${e.displayLabel||e.label}-${ln(e,t)}`;let o=Vc(n),i=n.displayOffset+t;return`${n.displayLabel}-${ln(o,i)}`}function Lr(e){let t=e.length;return t<=3?[...e]:[e[Math.floor(t*.25)],e[Math.floor(t*.5)],e[Math.floor(t*.75)]]}function yt(e,t,n){if(!e.length)return 1/0;if(e.length===1)return Math.hypot(t-e[0].x,n-e[0].y);let r=1/0;for(let o=0;o+1<e.length;o++){let i=e[o],a=e[o+1],s=a.x-i.x,c=a.y-i.y,u=s*s+c*c,d=u>1e-12?((t-i.x)*s+(n-i.y)*c)/u:0;d<0?d=0:d>1&&(d=1);let f=t-(i.x+d*s),m=n-(i.y+d*c);if(Math.abs(f)>=r||Math.abs(m)>=r)continue;let l=Math.hypot(f,m);l<r&&(r=l)}return r}function Bc(e){let t=0,n=0;for(let i of e)t+=i.x,n+=i.y;let r=e.length||1;t/=r,n/=r;let o=0;for(let i of e){let a=Math.hypot(i.x-t,i.y-n);a>o&&(o=a)}return{cx:t,cy:n,r:o}}function kr(e,t){return Math.hypot(e.cx-t.cx,e.cy-t.cy)-e.r-t.r}function io(e,t){let n=1/0;for(let r of Lr(e)){let o=yt(t,r.x,r.y);o<n&&(n=o)}for(let r of Lr(t)){let o=yt(e,r.x,r.y);o<n&&(n=o)}return n}function Nc(e,t){if(e.length<3)return{pts:e,seatIndices:t};let n=0,r=0;for(let d of e)n+=d.x,r+=d.y;n/=e.length,r/=e.length;let o=-1,i=e[0];for(let d of e){let f=Math.hypot(d.x-n,d.y-r);f>o&&(o=f,i=d)}let a=i.x-n,s=i.y-r,c=Math.hypot(a,s);c>1e-9?(a/=c,s/=c):(a=1,s=0);let u=e.map((d,f)=>({p:d,i:f,t:(d.x-n)*a+(d.y-r)*s})).sort((d,f)=>d.t-f.t);return{pts:u.map(d=>d.p),seatIndices:u.map(d=>t[d.i])}}function ao(e){let t=e.length;if(t<3)return null;let n=0,r=0;for(let v of e)n+=v.x,r+=v.y;n/=t,r/=t;let o=0,i=0,a=0,s=0,c=0,u=0,d=0;for(let v of e){let S=v.x-n,M=v.y-r;o+=S*S,a+=M*M,i+=S*M,s+=S*S*S,c+=M*M*M,u+=S*M*M,d+=M*S*S}let f=o*a-i*i;if(Math.abs(f)<1e-9)return null;let m=(s+u)/2,l=(c+d)/2,p=(m*a-l*i)/f,h=(l*o-m*i)/f,b=p+n,y=h+r;return!Number.isFinite(b)||!Number.isFinite(y)?null:{cx:b,cy:y}}var Gc=.15;function zc(e){if(e.length<2)return null;let t=e.map(v=>{let S=0,M=0;for(let R of v.pts)S+=R.x,M+=R.y;return{x:S/v.pts.length,y:M/v.pts.length}}),n=0,r=0;for(let v of t)n+=v.x,r+=v.y;n/=t.length,r/=t.length;let o=0,i=0,a=0;for(let v of t){let S=v.x-n,M=v.y-r;o+=S*S,i+=S*M,a+=M*M}let s=o+a,c=o*a-i*i,u=s/2+Math.sqrt(Math.max(0,s*s/4-c)),d,f;Math.abs(i)>1e-12?(d=u-a,f=i):o>=a?(d=1,f=0):(d=0,f=1);let m=Math.hypot(d,f);if(!(m>1e-12))return null;d/=m,f/=m;let l=1/0,p=-1/0,h=[];for(let v of e){let S=1/0,M=-1/0;for(let R of v.pts){let x=R.x*d+R.y*f;x<S&&(S=x),x>M&&(M=x),x<l&&(l=x),x>p&&(p=x)}h.push(M-S)}let b=p-l;return b>1e-9?(h.sort((v,S)=>v-S),h[Math.min(h.length-1,Math.floor(h.length*.9))]/b<=Uc?{x:d,y:f}:null):null}var Uc=.35;function un(e,t,n,r){let o=new Map;for(let x of n){let g=t[x],C=g.rowId||`__seat-${x}`,E=o.get(C);E||(E={pts:[],idx:[]},o.set(C,E)),E.pts.push({x:g.x,y:g.y}),E.idx.push(x)}if(!o.size)return{sectionId:e,rows:[],blockCount:0};let i=[];for(let[x,g]of o){let C=Nc(g.pts,g.idx),E=0;for(let D of C.pts)E+=Math.hypot(D.x-r.x,D.y-r.y);i.push({id:x,pts:C.pts,seatIndices:C.seatIndices,blockId:-1,ordinal:0,blockDepth:0,focalDistance:E/C.pts.length})}let a=i.map(x=>Bc(x.pts)),s=i.length<=256?i.length*(i.length-1)/2:0,c=s?new Float64Array(s):null;c?.fill(Number.NaN);let u=c?new Map(i.map((x,g)=>[x,g])):null,d=(x,g)=>(x>g&&([x,g]=[g,x]),x*(2*i.length-x-1)/2+(g-x-1)),f=(x,g)=>{if(!c)return io(i[x].pts,i[g].pts);let C=d(x,g),E=c[C];if(!Number.isNaN(E))return E;let D=io(i[x].pts,i[g].pts);return c[C]=D,D},m=(x,g)=>u?f(u.get(x),u.get(g)):io(x.pts,g.pts),l=[];for(let x=0;x<i.length;x++){let g=1/0;for(let C=0;C<i.length;C++){if(x===C||kr(a[x],a[C])>=g)continue;let E=f(x,C);E<g&&(g=E)}Number.isFinite(g)&&l.push(g)}l.sort((x,g)=>x-g);let p=l.length?l[Math.floor(l.length/2)]:1,h=Math.max(p*1.8,1e-6),b=i.map(()=>[]);for(let x=0;x<i.length;x++)for(let g=x+1;g<i.length;g++)kr(a[x],a[g])>h||f(x,g)<=h&&(b[x].push(g),b[g].push(x));let y=0;for(let x=0;x<i.length;x++){if(i[x].blockId!==-1)continue;let g=y++,C=[x];for(i[x].blockId=g;C.length;){let E=C.pop();for(let D of b[E])i[D].blockId===-1&&(i[D].blockId=g,C.push(D))}}let v=new Map;for(let x of i){let g=v.get(x.blockId)??[];g.push(x),v.set(x.blockId,g)}let S=[];for(let x of i){if(x.pts.length<4)continue;let g=ao(x.pts);g&&(!Number.isFinite(g.cx)||!Number.isFinite(g.cy)||S.push({x:g.cx,y:g.cy}))}let M=S.length>=2?(()=>{let x=S.map(E=>E.x).sort((E,D)=>E-D),g=S.map(E=>E.y).sort((E,D)=>E-D),C=Math.floor(S.length/2);return{cx:x[C],cy:g[C]}})():null;if(M){let x=L=>Math.hypot(L.x-M.cx,L.y-M.cy),g=1/0,C=-1/0,E=[];for(let L of i){let A=1/0,k=-1/0;for(let N of L.pts){let w=x(N);w<A&&(A=w),w>k&&(k=w)}E.push(k-A),A<g&&(g=A),k>C&&(C=k)}let D=C-g;E.sort((L,A)=>L-A);let B=E[Math.min(E.length-1,Math.floor(E.length*.9))];if(D>1e-9&&B/D<=Gc){let L=i.map(F=>{let H=0;for(let j of F.pts)H+=x(j);return{row:F,radius:H/F.pts.length}}),A=0,k=0;for(let F of L)A+=F.radius,k+=F.row.focalDistance;A/=L.length,k/=L.length;let N=0;for(let F of L)N+=(F.radius-A)*(F.row.focalDistance-k);if(N<0)for(let F of L)F.radius=-F.radius;let T=1/0;for(let F of L)F.radius<T&&(T=F.radius);L.sort((F,H)=>F.radius-H.radius);let _=-1,P=-1/0,O=D/Math.max(1,L.length)*.5,I=[];for(let F of L)F.radius-P>O&&(_++,P=F.radius),F.row.ordinal=_,F.row.blockDepth=F.radius-T,I.push(F.row);return{sectionId:e,rows:I,blockCount:y}}}let R=[];for(let[,x]of v){let g=zc(x);if(g){let C=D=>{let B=0;for(let L of D.pts)B+=L.x*g.x+L.y*g.y;return B/D.pts.length};x.sort((D,B)=>C(D)-C(B)),x.length>=2&&x[0].focalDistance>x[x.length-1].focalDistance&&x.reverse();let E=0;for(let D=0;D<x.length;D++)D>0&&(E+=m(x[D-1],x[D])),x[D].ordinal=D,x[D].blockDepth=E,R.push(x[D])}else{let C=1/0;for(let E of x)E.focalDistance<C&&(C=E.focalDistance);x.sort((E,D)=>E.focalDistance-D.focalDistance);for(let E=0;E<x.length;E++)x[E].ordinal=E,x[E].blockDepth=Math.max(0,x[E].focalDistance-C),R.push(x[E])}}return{sectionId:e,rows:R,blockCount:y}}var Hc=/^\d{4}-\d{2}-\d{2}$/;function jc(e){let t=Date.parse(e);return Number.isFinite(t)?Hc.test(e)?t+864e5:t:null}function Yc(e,t=Date.now()){if(e.validUntil===void 0){if(e.status!=="approved")return!0;let r=e.assessedAt?Date.parse(e.assessedAt):Number.NaN;return Number.isFinite(r)&&(t instanceof Date?t.getTime():t)<=r+366*864e5}let n=jc(e.validUntil);return n===null?!1:(t instanceof Date?t.getTime():t)<n}function Xc(e,t,n){return!(e.eventConfigurationId&&e.eventConfigurationId!==t||e.eventConfigurationVersion!==void 0&&e.eventConfigurationVersion!==n)}function Wc(e){return e.status!=="draft"&&e.status!=="retracted"}function Kc(e,t){return e.status===void 0?t===void 0:e.status!=="approved"?!0:typeof t=="string"&&typeof e.basisSha256=="string"&&e.basisSha256===t}function Fr(e,t={}){return!!e&&Wc(e)&&Xc(e,t.activeConfigurationId,t.activeConfigurationVersion)&&Kc(e,t.activeBasisSha256)&&Yc(e,t.now)}var gf=Math.PI*2;function mn(e){return e==="pitch-football"||e==="rink-hockey"||e==="track-athletics"||e==="oval-cricket"}var qc=/^data:image\/(?:png|jpe?g|webp|gif|avif);base64,[a-z0-9+/]+={0,2}$/i,$c=/[\s"'<>`\\]/;function Qc(e){if(typeof e!="string"||!e||e.length>2e6||e!==e.trim())return!1;if(e.startsWith("data:"))return qc.test(e);if($c.test(e))return!1;try{let t=new URL(e);return t.protocol==="https:"&&!t.username&&!t.password}catch{return!1}}function Dr(e){let t=e.trim();return Qc(t)?t:null}var so="seatlayer.event-configuration/1";var gt=100,Zc=120,Jc=2e5,el=1e4,tl=/^[a-f0-9]{64}$/,nl=new Set(["stage","screen","barrier","camera_platform","sound_desk","rigging_truss"]);function Vt(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function nt(e,t){return typeof e=="string"&&e.length>=1&&e.length<=t&&e.normalize("NFKC").trim()===e}function ol(e){return typeof e=="number"&&Number.isInteger(e)&&e>0}function Or(e){return!Array.isArray(e)||e.length>Jc||!e.every(t=>nt(t,gt))?null:[...new Set(e)].sort()}function rl(e){return!Vt(e)||!nt(e.chartId,gt)||!nt(e.version,gt)||e.sha256!==void 0&&(typeof e.sha256!="string"||!tl.test(e.sha256))?null:{chartId:e.chartId,version:e.version,...typeof e.sha256=="string"?{sha256:e.sha256}:{}}}function co(e,t,n){return typeof e=="number"&&Number.isFinite(e)&&e>=t&&e<=n}function il(e){return Vt(e)?e.mode==="none"||e.mode==="opaque"?e.opacity===void 0?{mode:e.mode}:null:e.mode==="partial"&&co(e.opacity,.01,.99)?{mode:"partial",opacity:e.opacity}:null:null}function al(e,t){if(e===void 0)return;if(!Array.isArray(e)||e.length>el)return null;let n=new Set(t),r=new Set,o=new Set,i=0,a=[];for(let s of e){if(!Vt(s)||!nt(s.id,gt)||!nt(s.objectId,gt)||!n.has(s.objectId)||!nl.has(String(s.kind))||!co(s.heightM,.05,50)||s.baseElevationM!==void 0&&!co(s.baseElevationM,-10,100))return null;let c=il(s.occlusion);if(!c||r.has(s.id)||o.has(s.objectId))return null;let u=s.contentImageUrl===void 0?void 0:typeof s.contentImageUrl=="string"?Dr(s.contentImageUrl):null;if(s.contentImageUrl!==void 0&&(!u||s.kind!=="screen"||++i>1))return null;r.add(s.id),o.add(s.objectId),a.push({id:s.id,objectId:s.objectId,kind:s.kind,heightM:s.heightM,...s.baseElevationM!==void 0?{baseElevationM:s.baseElevationM}:{},occlusion:c,...u?{contentImageUrl:u}:{}})}return a.sort((s,c)=>s.id.localeCompare(c.id))}function sl(e){let t=[];if(!Vt(e))return{issues:[{code:"invalid_export",path:"configuration",message:"Configuration must be an object"}]};e.schema!==so&&t.push({code:"unsupported_schema",path:"configuration.schema",message:`Configuration schema must be ${so}`}),nt(e.id,gt)||t.push({code:"invalid_id",path:"configuration.id",message:"Configuration id must contain 1 to 100 normalized characters"}),nt(e.label,Zc)||t.push({code:"invalid_label",path:"configuration.label",message:"Configuration label must contain 1 to 120 normalized characters"}),ol(e.version)||t.push({code:"invalid_version",path:"configuration.version",message:"Configuration version must be a positive integer"});let n=rl(e.baseVenue);n||t.push({code:"invalid_base_venue",path:"configuration.baseVenue",message:"Base venue must identify one normalized chart id and exact version"});let r=Vt(e.overlay)?e.overlay:null,o=Or(r?.objectIds),i=Or(r?.productionKillSeatIds),a=o?al(r?.productionElements,o):null;return(!r||!o||!i)&&t.push({code:"invalid_overlay",path:"configuration.overlay",message:"Overlay ids must be bounded arrays of normalized stable ids"}),a===null&&t.push({code:"invalid_production_element",path:"configuration.overlay.productionElements",message:"Production elements must be unique, bounded semantics over referenced base-venue objects"}),t.length||!n||!o||!i||a===null?{issues:t}:{issues:t,value:{schema:so,id:e.id,label:e.label,version:e.version,baseVenue:n,overlay:{objectIds:o,productionKillSeatIds:i,...a!==void 0?{productionElements:a}:{}}}}}function Vr(e){let t=sl(e);return t.value?{ok:!0,value:t.value}:{ok:!1,issues:t.issues}}function cl(e){if((e.kind==="polygon"||e.kind==="polyline"||e.kind==="line")&&e.points&&e.points.length>=2)return e.points;if(e.x==null||e.y==null||e.width==null||e.height==null)return null;let t=e.x,n=e.y,r=e.width,o=e.height;return[{x:t,y:n},{x:t+r,y:n},{x:t+r,y:n+o},{x:t,y:n+o}]}function ll(e,t,n){let r=n*Math.PI/180,o=Math.cos(r),i=Math.sin(r),a=e.x-t.x,s=e.y-t.y;return{x:t.x+a*o-s*i,y:t.y+a*i+s*o}}function Br(e){let t=cl(e);if(!t||t.length<2)return null;let n=e.rotation??0,r=Math.abs(n)<1e-6?t:t.map(c=>ll(c,{x:t.reduce((u,d)=>u+d.x,0)/t.length,y:t.reduce((u,d)=>u+d.y,0)/t.length},n)),o=1/0,i=1/0,a=-1/0,s=-1/0;for(let c of r)o=Math.min(o,c.x),i=Math.min(i,c.y),a=Math.max(a,c.x),s=Math.max(s,c.y);return!Number.isFinite(o)||a-o<1e-6||s-i<1e-6?null:{minX:o,minY:i,maxX:a,maxY:s}}var ul=5,ml=3,dl=.92,fl=1.9,pl=2,hl=.6,bl=1,yl=.06;function gl(e){return e.heightM!==void 0?e.heightM:mn(e.stageKind)?yl:bl}function Nr(e){let t=1/0,n=1/0,r=-1/0,o=-1/0,i=-1/0;for(let a of Ur(e)){let s=a.baseHeightM??0;for(let c of a.objects){if(c.type!=="shape"||c.role!=="stage")continue;let u=Br(c);u&&(t=Math.min(t,u.minX),n=Math.min(n,u.minY),r=Math.max(r,u.maxX),o=Math.max(o,u.maxY),i=Math.max(i,s+gl(c)))}}return!Number.isFinite(t)||!Number.isFinite(i)?null:{minX:t,minY:n,maxX:r,maxY:o,deckTopM:i}}function xl(e,t,n,r){let o=1/0,i=1/0,a=-1/0,s=-1/0;for(let l of e)Number.isFinite(l.eyeHeightM)&&(o=Math.min(o,l.x),a=Math.max(a,l.x),i=Math.min(i,l.y),s=Math.max(s,l.y));if(!Number.isFinite(o))return null;let c=o*t,u=i*t,d=Math.max(1,Math.ceil((a-o)*t/n)+1),f=Math.max(1,Math.ceil((s-i)*t/n)+1),m=new Float64Array(d*f).fill(-1/0);for(let l of e){if(!Number.isFinite(l.eyeHeightM))continue;let p=l.eyeHeightM-Ie,h=Math.min(d-1,Math.max(0,Math.floor((l.x*t-c)/n))),y=Math.min(f-1,Math.max(0,Math.floor((l.y*t-u)/n)))*d+h,v=p+r;v>m[y]&&(m[y]=v)}return{cellM:n,minX:c,minY:u,cols:d,rows:f,top:m}}function vl(e,t,n){let r=Math.floor((t-e.minX)/e.cellM),o=Math.floor((n-e.minY)/e.cellM);return r<0||o<0||r>=e.cols||o>=e.rows?-1/0:e.top[o*e.cols+r]}function Gr(e,t,n={}){let r=new Map;if(!t||!e.length)return r;let o=n.metresPerChartUnit??be,i=n.cellM??hl,a=n.chairBackM??dl,s=n.selfRowSkipM??pl,c=n.clearThreshold??.9,u=n.partialThreshold??.25,d=Math.max(1,n.columns??ul),f=Math.max(1,n.rows??ml),m=xl(e,o,i,a);if(!m)return r;let l=(t.maxX-t.minX)*o,p=(t.maxY-t.minY)*o,h=l>=p,b=(t.minX+t.maxX)/2*o,y=(t.minY+t.maxY)/2*o,v=[];for(let M=0;M<d;M++){let R=(M+.5)/d-.5,x=h?b+R*l:b,g=h?y:y+R*p;for(let C=0;C<f;C++){let E=t.deckTopM+(f===1?0:C/(f-1)*fl);v.push({x,y:g,z:E})}}let S=i/2;for(let M of e){if(!Number.isFinite(M.eyeHeightM))continue;let R=M.x*o,x=M.y*o,g=M.eyeHeightM,C=0,E=1/0;for(let B of v){let L=B.x-R,A=B.y-x,k=Math.hypot(L,A);if(!(k>s)){C++;continue}let N=L/k,w=A/k,T=0;for(let _=s;_<k;_+=S){let P=vl(m,R+N*_,x+w*_);if(!(!Number.isFinite(P)||P>=g)&&P>g+(B.z-g)*_/k){T=_;break}}T?E=Math.min(E,T):C++}let D=C/v.length;D>=c||r.set(M.id,{seatId:M.id,mark:D<u?"obstructedView":"restrictedView",visibleFraction:D,totalRays:v.length,atDistanceM:Number.isFinite(E)?E:0})}return r}function zr(e,t){if(!t.size)return 0;let n=0;for(let r of e){let o=t.get(r.id);if(!o)continue;let i=r.commercial;i?.restrictedView!==void 0||i?.obstructedView!==void 0||(r.commercial={...i,[o.mark]:!0},n++)}return n}function lo(e){return e?e.accessibility?.length?e.wheelchairSpaceType&&!e.accessibility.includes("wheelchair")?["wheelchair",...e.accessibility]:e.accessibility:e.wheelchairSpaceType?["wheelchair"]:e.accessible?["wheelchair"]:[]:[]}var fn=Math.PI/180;var Bt=16;function uo(e,t,n,r){let o=n*fn,i=Math.cos(o),a=Math.sin(o);return{x:r.x+e*i-t*a,y:r.y+e*a+t*i}}function Wr(e){let{seatCount:t,seatSpacing:n,curve:r,rotation:o,origin:i}=e,a=[];if(e.path)return Er(e.path,t);if(t<=1)return t===1&&a.push({x:i.x,y:i.y}),a;if(r===0){for(let u=0;u<t;u++)a.push(uo(u*n,0,o,i));return a}let s=r/(t-1)*fn,c=n/(2*Math.sin(Math.abs(s)/2));for(let u=0;u<t;u++){let d=u*s,f=c*Math.sin(d),m=-c+c*Math.cos(d);a.push(uo(f,m,o,i))}return a}function Kr(e){let t=new Map;if(e.overrides)for(let n of e.overrides)t.set(n.index,n);return t}function Sl(e,t){let n=Kr(e);return Wr(e).map((r,o)=>{let i=n.get(o),a=lo(i),s=_r(e,o,i),c={...e.commercial,...i?.commercial};return{index:o,x:r.x+(i?.dx??0),y:r.y+(i?.dy??0),label:s,displayLabel:ro(e,o,t,i),categoryKey:i?.categoryKey??e.categoryKey,skipped:!!i?.skip,accessible:a.length>0,accessibility:a,wheelchairSpaceType:i?.wheelchairSpaceType,commercial:Object.values(c).some(u=>u!==void 0&&u!==!1&&u!=="")?c:void 0,glyph:i?.glyph,viewUrl:i?.viewFromSeatUrl??e.viewFromSeatUrl,viewMeta:i?.viewFromSeatUrl?i.viewFromSeatMeta:e.viewFromSeatMeta,labelStyle:i?.labelStyle??e.seatLabelStyle}})}function Ml(e){let t=[];for(let n of Sl(e))n.skipped||t.push({id:`${e.id}:${n.index}`,label:n.label,displayLabel:n.displayLabel===n.label?void 0:n.displayLabel,x:n.x,y:n.y,rowId:e.id,categoryKey:n.categoryKey,accessible:n.accessible||void 0,accessibility:n.accessibility.length?n.accessibility:void 0,wheelchairSpaceType:n.wheelchairSpaceType,commercial:n.commercial,glyph:n.glyph,viewUrl:n.viewUrl,viewMeta:n.viewMeta,labelStyle:n.labelStyle});return t}function wl(e){if(e.seatCountsBySide)return{...e.seatCountsBySide};let t=e.sides&&e.sides.length?e.sides:["top","bottom"],n=["top","bottom","left","right"].filter(i=>t.includes(i)),r={top:0,bottom:0,left:0,right:0};if(!n.length)return r;let o=Math.max(0,Math.round(e.seatCount));for(let i=0;i<o;i++)r[n[i%n.length]]+=1;return r}function Pl(e){let t=[],n=Math.max(0,Math.round(e.seatCount));if(n===0)return t;let r=new Map((e.overrides??[]).map(d=>[d.index,d])),o=(d,f,m,l)=>{let p=r.get(d),h=lo(p),b=p?.label??`${e.label}-${d+1}`,y=e.displayLabel??e.label;return{index:d,label:b,displayLabel:p?.displayLabel??`${y}-${d+1}`,x:f+(p?.dx??0),y:m+(p?.dy??0),categoryKey:p?.categoryKey??e.categoryKey,skipped:!!p?.skip,accessible:h.length>0,accessibility:h,wheelchairSpaceType:p?.wheelchairSpaceType,commercial:p?.commercial,glyph:p?.glyph,viewUrl:p?.viewFromSeatUrl,viewMeta:p?.viewFromSeatUrl?p.viewFromSeatMeta:void 0,labelStyle:p?.labelStyle,...l?{side:l}:{}}};if(e.shape==="round"){let d=(e.radius??40)+Bt,f=e.rotation*fn,m=Math.max(0,Math.min(360,e.seatArc??360));if(m>=360||n===1){for(let b=0;b<n;b++){let y=f+b/n*2*Math.PI;t.push(o(b,e.center.x+d*Math.cos(y),e.center.y+d*Math.sin(y)))}return t}let l=m*fn,p=(2*Math.PI-l)/2,h=f+p;for(let b=0;b<n;b++){let y=h+b/(n-1)*l;t.push(o(b,e.center.x+d*Math.cos(y),e.center.y+d*Math.sin(y)))}return t}let i=e.width??80,a=e.height??50,s=wl(e),c=["top","bottom","left","right"],u=0;for(let d of c){let f=s[d];for(let m=0;m<f;m++){let l,p;d==="top"?(l=-i/2+(m+.5)*i/f,p=-a/2-Bt):d==="bottom"?(l=-i/2+(m+.5)*i/f,p=a/2+Bt):d==="left"?(l=-i/2-Bt,p=-a/2+(m+.5)*a/f):(l=i/2+Bt,p=-a/2+(m+.5)*a/f);let h=uo(l,p,e.rotation,e.center);t.push(o(u++,h.x,h.y,d))}}return t}function Cl(e){return Pl(e).filter(t=>!t.skipped).map(t=>({id:`${e.id}:${t.index}`,label:t.label,...t.displayLabel!==t.label?{displayLabel:t.displayLabel}:{},x:t.x,y:t.y,rowId:e.id,categoryKey:t.categoryKey,...t.accessible?{accessible:!0}:{},...t.accessibility.length?{accessibility:t.accessibility}:{},...t.wheelchairSpaceType?{wheelchairSpaceType:t.wheelchairSpaceType}:{},...t.commercial?{commercial:t.commercial}:{},...t.glyph?{glyph:t.glyph}:{},...t.viewUrl?{viewUrl:t.viewUrl}:{},...t.viewUrl&&t.viewMeta?{viewMeta:t.viewMeta}:{},...t.labelStyle?{labelStyle:t.labelStyle}:{}}))}function Al(e){return[{id:`${e.id}:0`,label:e.label,...e.displayLabel&&e.displayLabel!==e.label?{displayLabel:e.displayLabel}:{},x:e.center.x,y:e.center.y,rowId:e.id,categoryKey:e.categoryKey,kind:"booth"}]}function Hr(e,t){let n=!1;for(let r=0,o=t.length-1;r<t.length;o=r++){let i=t[r].x,a=t[r].y,s=t[o].x,c=t[o].y;a>e.y!=c>e.y&&e.x<(s-i)*(e.y-a)/(c-a)+i&&(n=!n)}return n}function Rl(e,t){return t.some((n,r)=>{let o=t[(r+1)%t.length],i=(e.y-n.y)*(o.x-n.x)-(e.x-n.x)*(o.y-n.y);if(Math.abs(i)>1e-7)return!1;let a=(e.x-n.x)*(o.x-n.x)+(e.y-n.y)*(o.y-n.y),s=(o.x-n.x)**2+(o.y-n.y)**2;return a>=-1e-7&&a<=s+1e-7})}function mo(e){return Array.isArray(e)?e.filter(t=>Array.isArray(t)&&t.length>=3):[]}function ot(e,t,n){return Hr(e,t)&&!mo(n).some(r=>Hr(e,r)||Rl(e,r))}function dn(e){if(!e.length)return{x:0,y:0};let t=0,n=0;for(let r of e)t+=r.x,n+=r.y;return{x:t/e.length,y:n/e.length}}function qr(e){switch(e.type){case"row":{let t=Wr(e),n=Kr(e),r=0,o=0,i=0;for(let a=0;a<t.length;a++){let s=n.get(a);s?.skip||(r+=t[a].x+(s?.dx??0),o+=t[a].y+(s?.dy??0),i++)}return i?{x:r/i,y:o/i}:{x:e.origin.x,y:e.origin.y}}case"table":case"booth":return{x:e.center.x,y:e.center.y};case"gaArea":return dn(e.points);case"section":return dn(e.outline);case"text":return{x:e.position.x,y:e.position.y};case"shape":return e.points&&e.points.length?dn(e.points):e.x!=null&&e.y!=null&&e.width!=null&&e.height!=null?{x:e.x+e.width/2,y:e.y+e.height/2}:{x:e.x??0,y:e.y??0};case"decorImage":return{x:e.x+e.width/2,y:e.y+e.height/2}}}function jr(e,t){return e.length===t.length&&e.every((n,r)=>n.x===t[r].x&&n.y===t[r].y)}function El(e,t){if(e.type!=="gaArea"||!jr(e.points,t.outline))return!1;let n=mo(e.holes),r=mo(t.holes);return n.length===r.length&&n.every((o,i)=>jr(o,r[i]))}function Il(e,t,n=e.filter(o=>o.type==="section"),r=qr(t)){let o="referenceInventorySource"in t?t.referenceInventorySource?.logicalSectionId:void 0;return(o?n.find(a=>(a.logicalSectionId??a.id)===o&&(El(t,a)||ot(r,a.outline,a.holes))):void 0)??n.find(a=>ot(r,a.outline,a.holes))}function Ur(e){return e.floors&&e.floors.length?e.floors:[{id:"floor-0",name:"Main",objects:e.objects,focalPoint:e.focalPoint,referenceImage:e.referenceImage,backgroundImage:e.backgroundImage}]}function Yr(e,t,n,r,o,i,a,s,c){let u=[],d=e.filter(h=>h.type==="section"),f=Ir(e),m=h=>!h?.eventConfigurationId||h.eventConfigurationId===r&&(h.eventConfigurationVersion===void 0||h.eventConfigurationVersion===c),l=h=>Fr(h,{activeConfigurationId:r,activeConfigurationVersion:c,activeBasisSha256:o,now:s}),p=(h,b)=>l(h)?{...h,coverage:b}:void 0;for(let h of e){let b=[];if(h.type==="row"?b=Ml(h):h.type==="table"?b=Cl(h):h.type==="booth"&&(b=Al(h)),!b.length)continue;for(let R of b)R.viewUrl&&!m(R.viewMeta)&&(R.viewUrl=void 0,R.viewMeta=void 0);if(h.type==="row"){let R=f.get(h.id);if(R){let x=new Map((h.overrides??[]).map(g=>[g.index,g]));for(let g of b){let C=Number(g.id.slice(g.id.lastIndexOf(":")+1));if(!Number.isInteger(C))continue;g.logicalRowId=R.groupId,g.logicalSeatIndex=R.adjacencyOffset+C,x.get(C)?.displayLabel||(g.displayLabel=ro(h,C,R)),!g.viewUrl&&R.viewFromSeatUrl&&m(R.viewFromSeatMeta)&&(g.viewUrl=R.viewFromSeatUrl,g.viewMeta=R.viewFromSeatMeta);let E=x.get(C)?.confidenceEvidence;g.confidenceEvidence=p(E,"exact-seat")??p(h.confidenceEvidence,"row-representative")??p(R.confidenceEvidence,"row-representative")}}}let y=Il(e,h,d,h.type==="row"?dn(b):qr(h)),v=y?.viewFromSeatUrl,M=(y?.zone?t?.find(R=>R.id===y.zone):void 0)?.focalPoint??n;for(let R of b){if(!R.confidenceEvidence){let x=Number(R.id.slice(R.id.lastIndexOf(":")+1)),g=(h.type==="row"||h.type==="table")&&Number.isInteger(x)?h.overrides?.find(C=>C.index===x)?.confidenceEvidence:void 0;R.confidenceEvidence=p(g,"exact-seat")??(h.type==="row"?p(h.confidenceEvidence,"row-representative"):void 0)}R.confidenceEvidence??=p(y?.confidenceEvidence,"section-representative")??(a?p(a.evidence,a.coverage):void 0),!R.viewUrl&&v&&m(y?.viewFromSeatMeta)&&(R.viewUrl=v,R.viewMeta=y?.viewFromSeatMeta),!R.viewUrl&&i&&m(i.meta)&&(R.viewUrl=i.url,R.viewMeta=i.meta),y&&(R.sectionId=y.logicalSectionId??y.id),y?.zone&&(R.zoneId=y.zone),M&&(R.focalPoint={...M})}u.push(...b)}return u}function $r(e,t={}){if(e.floors?.length){let r=[];for(let o of e.floors){let i=o.focalPoint??e.focalPoint,a=o.viewFromSeatUrl?{url:o.viewFromSeatUrl,meta:o.viewFromSeatMeta}:e.viewFromSeatUrl?{url:e.viewFromSeatUrl,meta:e.viewFromSeatMeta}:void 0,s=o.confidenceEvidence?{evidence:o.confidenceEvidence,coverage:"floor-representative"}:e.confidenceEvidence?{evidence:e.confidenceEvidence,coverage:"venue-representative"}:void 0,c=Yr(o.objects,e.zones,i,e.eventConfigurationId,e.confidenceBasisSha256,a,s,t.now,t.eventConfigurationVersion??e.eventConfigurationVersion);t.resolveEyeHeights!==!1&&Xr(o.objects,o.focalPoint??e.focalPoint,o.baseHeightM??0,c);for(let u of c)u.floorId=o.id;for(let u of c)r.push(u)}return r}let n=Yr(e.objects,e.zones,e.focalPoint,e.eventConfigurationId,e.confidenceBasisSha256,e.viewFromSeatUrl?{url:e.viewFromSeatUrl,meta:e.viewFromSeatMeta}:void 0,e.confidenceEvidence?{evidence:e.confidenceEvidence,coverage:"venue-representative"}:void 0,t.now,t.eventConfigurationVersion??e.eventConfigurationVersion);return t.resolveEyeHeights!==!1&&Xr(e.objects,e.focalPoint,t.floorBaseHeightM??0,n),Tl(e,n,t)}function Tl(e,t,n){return!n.deriveRestrictedView||e.derivedRestrictedView===!1||n.resolveEyeHeights===!1||zr(t,Gr(t,Nr(e))),t}function Xr(e,t,n,r){let o=e.filter(f=>f.type==="section"),i=n>0||o.some(f=>f.height!==void 0||f.rake!==void 0||(f.elevation??0)>0);if(!o.length||!i||!t){for(let f of r)f.eyeHeightM=n+Ie;return}let a=new Array(r.length),s=new Map;for(let f of o)s.has(f.id)||s.set(f.id,f);let c=new Map,u=new Map;for(let f=0;f<r.length;f++){let m=r[f],p=(m.sectionId?s.get(m.sectionId)??o.find(b=>b.logicalSectionId===m.sectionId&&ot({x:m.x,y:m.y},b.outline,b.holes)):void 0)??o.find(b=>ot({x:m.x,y:m.y},b.outline,b.holes))??null;if(a[f]=p,!p)continue;c.has(p.id)||c.set(p.id,tn(p,{floorBaseHeightM:n}));let h=u.get(p.id);h?h.push(f):u.set(p.id,[f])}let d=new Array(r.length).fill(void 0);for(let[f,m]of u){let l=c.get(f);if(!l)continue;let p=l.rake>0?Math.tan(l.rake*Math.PI/180):0,h=un(f,r,m,t);for(let b of h.rows){let y=b.blockDepth*be*p,v=l.height+y;for(let S of b.seatIndices)d[S]=v}}for(let f=0;f<r.length;f++){let m=r[f],l=a[f];if(!l){m.eyeHeightM=n+Ie;continue}let p=c.get(l.id);m.eyeHeightM=(d[f]??p.height)+Ie}}function _l(e){return{kind:"radial",rowCount:0,rows:[],nearestRow:()=>-1,depthAt:(t,n)=>Math.hypot(t-e.x,n-e.y),gradientAt:(t,n)=>{let r=t-e.x,o=n-e.y,i=Math.hypot(r,o);return i<1e-9?[0,0]:[r/i,o/i]}}}function Ll(e,t){if(!e.length)return null;let n=0,r=0,o=0;for(let l of e)n+=l.x,r+=l.y,o+=Math.hypot(l.x-t.x,l.y-t.y);let i=e.length;n/=i,r/=i,o/=i;let a=e[0],s=-1;for(let l of e){let p=Math.hypot(l.x-n,l.y-r);p>s&&(s=p,a=l)}let c=a.x-n,u=a.y-r,d=Math.hypot(c,u);d>1e-9?(c/=d,u/=d):(c=1,u=0);let f=[...e].sort((l,p)=>(l.x-n)*c+(l.y-r)*u-((p.x-n)*c+(p.y-r)*u)),m=0;for(let l of f){let p=Math.hypot(l.x-n,l.y-r);p>m&&(m=p)}return{pts:f,cx:n,cy:r,radius:m,depth:o}}function Qr(e,t,n){let r=e.pts;if(r.length===1)return Math.hypot(t-r[0].x,n-r[0].y);let o=1/0;for(let i=0;i+1<r.length;i++){let a=r[i],s=r[i+1],c=s.x-a.x,u=s.y-a.y,d=c*c+u*u,f=d>1e-12?((t-a.x)*c+(n-a.y)*u)/d:0;f<0?f=0:f>1&&(f=1);let m=Math.hypot(t-(a.x+f*c),n-(a.y+f*u));m<o&&(o=m)}return o}var pn=8;function kl(e,t,n){let r=new Array(pn).fill(1/0),o=new Array(pn).fill(-1);for(let d=0;d<e.length;d++){let f=e[d],m=Math.hypot(t-f.cx,n-f.cy)-f.radius;for(let l=0;l<pn;l++)if(m<r[l]){for(let p=pn-1;p>l;p--)r[p]=r[p-1],o[p]=o[p-1];r[l]=m,o[l]=d;break}}let i=new Array(3).fill(1/0),a=new Array(3).fill(-1);for(let d of o){if(d<0)continue;let f=Qr(e[d],t,n);for(let m=0;m<3;m++)if(f<i[m]){for(let l=2;l>m;l--)i[l]=i[l-1],a[l]=a[l-1];i[m]=f,a[m]=d;break}}if(a[0]<0)return 0;if(i[0]<1e-6)return e[a[0]].depth;let s=i[0]*2.2,c=0,u=0;for(let d=0;d<3;d++){let f=a[d];if(f<0||i[d]>s)continue;let m=1/(i[d]*i[d]);c+=m*e[f].depth,u+=m}return u>0?c/u:e[a[0]].depth}function Fl(e){let t=(r,o)=>kl(e,r,o),n=(r,o)=>{let i=1/0,a=-1;for(let s=0;s<e.length;s++){let c=e[s];if(Math.hypot(r-c.cx,o-c.cy)-c.radius>=i)continue;let u=Qr(c,r,o);u<i&&(i=u,a=s)}return a};return{kind:"rows",rowCount:e.length,rows:e,nearestRow:n,depthAt:t,gradientAt:(r,o)=>{let i=(t(r+.5,o)-t(r-.5,o))/1,a=(t(r,o+.5)-t(r,o-.5))/(2*.5),s=Math.hypot(i,a);return s<1e-9?[0,0]:[i/s,a/s]}}}function Zr(e,t){let n=[];for(let r of e){let o=Ll(r.points,t);o&&n.push(o)}return n.length<2?_l(t):(n.sort((r,o)=>r.depth-o.depth),Fl(n))}var ho=mt(require("polygon-clipping"),1);var ni=mt(require("earcut"),1);var Dl=.58,Jr=.01,Ce=De*1.5*He,Ol=.5,Vl=.6;function Bl(e,t){let n=e.length,r=[];for(let a=0;a<n;a++){let s=e[Math.max(0,a-1)],c=e[Math.min(n-1,a+1)],u=c.x-s.x,d=c.y-s.y,f=Math.hypot(u,d);if(f<1e-9){r.push([0,0]);continue}u/=f,d/=f,r.push([-d,u])}let o=0;for(let a=0;a<n;a++)o+=(e[a].x-t.x)*r[a][0]+(e[a].y-t.y)*r[a][1];return o<0?r.map(([a,s])=>[-a,-s]):r}function Nl(e,t){if(e.length<2||t<=0)return[...e];let n=[...e],r=(a,s)=>{let c=s.x-a.x,u=s.y-a.y,d=Math.hypot(c,u)||1;return{x:c/d,y:u/d}},o=r(n[1],n[0]),i=r(n[n.length-2],n[n.length-1]);return n.unshift({x:n[0].x+o.x*t,y:n[0].y+o.y*t}),n.push({x:n[n.length-1].x+i.x*t,y:n[n.length-1].y+i.y*t}),n}var ei=Math.PI/12;function Gl(e){if(e.length<3)return[...e];let t=[...e].sort((i,a)=>i.x-a.x||i.y-a.y),n=(i,a,s)=>(a.x-i.x)*(s.y-i.y)-(a.y-i.y)*(s.x-i.x),r=i=>{let a=[];for(let s of i){for(;a.length>=2&&n(a[a.length-2],a[a.length-1],s)<=0;)a.pop();a.push(s)}return a.pop(),a},o=[...r(t),...r([...t].reverse())];return o.length>=3?o:[...e]}function oi(e,t){if(!e.length||!(t>0))return[];let n=Gl(e),r=(s,c,u,d)=>{let f=u-c;for(;f<0;)f+=Math.PI*2;for(;f>Math.PI*2;)f-=Math.PI*2;let m=Math.max(1,Math.ceil(f/ei)),l=t/Math.cos(f/m/2);for(let p=0;p<=m;p++){let h=c+f*p/m;d.push({x:s.x+Math.cos(h)*l,y:s.y+Math.sin(h)*l})}};if(n.length<3){let s=0,c=0;for(let l of n)s+=l.x,c+=l.y;s/=n.length||1,c/=n.length||1;let u=0;for(let l of n)u=Math.max(u,Math.hypot(l.x-s,l.y-c));let d=[],f=Math.max(3,Math.ceil(Math.PI*2/ei)),m=(u+t)/Math.cos(Math.PI/f);for(let l=0;l<f;l++){let p=l/f*Math.PI*2;d.push({x:s+Math.cos(p)*m,y:c+Math.sin(p)*m})}return d}let o=n.length,i=[];for(let s=0;s<o;s++){let c=n[s],u=n[(s+1)%o];i.push(Math.atan2(-(u.x-c.x),u.y-c.y))}let a=[];for(let s=0;s<o;s++)r(n[s],i[(s+o-1)%o],i[s],a);return ci(a)}function zl(e,t,n){if(e.length===1)return Math.hypot(t-e[0].x,n-e[0].y);let r=1/0;for(let o=0;o+1<e.length;o++){let i=e[o],a=e[o+1],s=a.x-i.x,c=a.y-i.y,u=s*s+c*c,d=u>1e-12?((t-i.x)*s+(n-i.y)*c)/u:0;d<0?d=0:d>1&&(d=1);let f=Math.hypot(t-(i.x+d*s),n-(i.y+d*c));f<r&&(r=f)}return r}function hn(e){let t=e.map(o=>{let i=0,a=0;for(let u of o.pts)i+=u.x,a+=u.y;let s=o.pts.length||1;i/=s,a/=s;let c=0;for(let u of o.pts){let d=Math.hypot(u.x-i,u.y-a);d>c&&(c=d)}return{cx:i,cy:a,rad:c}}),n=o=>{let i=o.length;return i<=2?[...o]:[o[Math.floor(i*.25)],o[Math.floor(i*.5)],o[Math.floor(i*.75)]]},r=[];for(let o=0;o<e.length;o++){let i=n(e[o].pts),a=[],s=1/0,c=null;for(let d of i){let f=1/0;for(let m=0;m<e.length;m++){if(m===o||Math.abs(e[m].y-e[o].y)<.001)continue;let l=t[m],p=Math.hypot(d.x-l.cx,d.y-l.cy)-l.rad;if(p>=f&&p>=s)continue;let h=zl(e[m].pts,d.x,d.y);h<f&&(f=h),e[m].depth<e[o].depth&&h<s&&(s=h,c=e[m].y)}Number.isFinite(f)&&f>0&&a.push(f)}a.sort((d,f)=>d-f);let u=a.length?a[Math.floor(a.length/2)]:1;r.push({pitch:u,belowY:c})}return r}function ri(e,t,n,r){let o=e[t],i=o.pts.length>=2?[...o.pts]:o.pts.length===1?(()=>{let d=o.pts[0],f=d.x-r.x,m=d.y-r.y,l=Math.hypot(f,m)||1;f/=l,m/=l;let p=Math.max(n[t].pitch,.001)*.5;return[{x:d.x+m*p,y:d.y-f*p},{x:d.x-m*p,y:d.y+f*p}]})():[];if(i.length<2)return null;let a=0,s=0;for(let d=1;d<i.length;d++){let f=Math.hypot(i[d].x-i[d-1].x,i[d].y-i[d-1].y);f>1e-6&&(a+=f,s++)}let c=s>0?a/s:0,u=Nl(i,Math.max(c*Vl,Ce));return{pts:u,nrm:Bl(u,r),front:Math.max(n[t].pitch*Dl,Ce),back:Math.max(n[t].pitch*Ol,Ce)}}var xt=1.5,ii=.3;function fo(e,t){if(e.length<3)return e;let n=e[0],r=e[e.length-1],o=r.x-n.x,i=r.y-n.y,a=Math.hypot(o,i),s=-1,c=-1;for(let f=1;f<e.length-1;f++){let m=e[f],l=a>1e-12?Math.abs((m.x-n.x)*i-(m.y-n.y)*o)/a:Math.hypot(m.x-n.x,m.y-n.y);l>s&&(s=l,c=f)}if(s<=t||c<0)return[n,r];let u=fo(e.slice(0,c+1),t),d=fo(e.slice(c),t);return[...u.slice(0,-1),...d]}function ai(e,t){if(e.length<4)return e;let n=fo([...e,e[0]],t);return n.pop(),n.length>=3?n:e}function si(e,t,n){if(e.length<2)return[];let r=n??hn(e),o=new Map;for(let a=0;a<e.length;a++){let s=o.get(e[a].blockId);s?s.push(a):o.set(e[a].blockId,[a])}let i=[];for(let[,a]of o){let s=[];for(let v of a){let S=e[v].patch;S&&S.length>=3?i.push({outline:[...S],holes:[],topY:e[v].y}):s.push(v)}if(!s.length)continue;s.sort((v,S)=>e[v].depth-e[S].depth);let u=s.map(v=>ri(e,v,r,t)).filter(v=>v!==null);if(!u.length)continue;let d=(v,S)=>({x:v.pts[S].x-v.nrm[S][0]*(v.front+xt),y:v.pts[S].y-v.nrm[S][1]*(v.front+xt)}),f=(v,S)=>({x:v.pts[S].x+v.nrm[S][0]*(v.back+xt),y:v.pts[S].y+v.nrm[S][1]*(v.back+xt)}),m=u[0],l=u[u.length-1],p=[];for(let v=0;v<m.pts.length;v++)p.push(d(m,v));for(let v of u)p.push(f(v,v.pts.length-1));for(let v=l.pts.length-1;v>=0;v--)p.push(f(l,v));for(let v=u.length-1;v>=0;v--)p.push(d(u[v],0));let h=ci(p),b=1/0;for(let v of s)e[v].y<b&&(b=e[v].y);if(!Number.isFinite(b))continue;if(h.length>=3&&Math.abs(et(h))>1e-6&&u.every(v=>{let S=v.pts[Math.floor(v.pts.length/2)];return kt(h,S.x,S.y)})){i.push({outline:ai(h,ii),holes:[],topY:b});continue}for(let v of Ul(u))i.push({outline:v,holes:[],topY:b})}return i}function Ul(e){let t=[];for(let n of e){let r=[],o=[],i=n.front+xt,a=n.back+xt;for(let c=0;c<n.pts.length;c++){let u=n.pts[c],d=n.nrm[c];r.push([u.x-d[0]*i,u.y-d[1]*i]),o.push([u.x+d[0]*a,u.y+d[1]*a])}let s=[...r,...o.reverse()];s.length<3||(s.push(s[0]),t.push([s]))}if(!t.length)return[];try{let n=ho.default.union(t[0],...t.slice(1)),r=[];for(let o of n){if(!o.length||o[0].length<4)continue;let i=o[0].map(([c,u])=>({x:c,y:u})),a=i[0],s=i[i.length-1];i.length>1&&Math.abs(a.x-s.x)<1e-9&&Math.abs(a.y-s.y)<1e-9&&i.pop(),i.length>=3&&r.push(ai(i,ii))}return r}catch{return[]}}function ci(e){let t=[];for(let n of e){let r=t[t.length-1];r&&Math.hypot(n.x-r.x,n.y-r.y)<1e-9||t.push(n)}for(;t.length>2&&Math.hypot(t[0].x-t[t.length-1].x,t[0].y-t[t.length-1].y)<1e-9;)t.pop();return t}var po=class{constructor(t){this.minX=1/0;this.minY=1/0;this.maxX=-1/0;this.maxY=-1/0;this.rings=t;for(let n of t)for(let r of n)r.x<this.minX&&(this.minX=r.x),r.y<this.minY&&(this.minY=r.y),r.x>this.maxX&&(this.maxX=r.x),r.y>this.maxY&&(this.maxY=r.y)}containsAll(t){for(let n of t)if(n.x<this.minX||n.x>this.maxX||n.y<this.minY||n.y>this.maxY)return!1;for(let n of this.rings){let r=!0;for(let o of t)if(!kt(n,o.x,o.y)){r=!1;break}if(r)return!0}return!1}};function ti(e,t,n,r,o,i){if(r.length<3)return;if(n.containsAll(r)){let u=[0,1,0],d=r[0];for(let f=1;f+1<r.length;f++){let m=r[f],l=r[f+1];e.tri([d.x*z,o,d.y*z],[m.x*z,o,m.y*z],[l.x*z,o,l.y*z],u,i)}return}let a=r.map(u=>[u.x,u.y]);a.push(a[0]);let s;try{s=ho.default.intersection([a],t)}catch{return}let c=[0,1,0];for(let u of s){if(!u.length||u[0].length<4)continue;let d=u[0],f=[],m=[];for(let p=0;p<d.length-1;p++)f.push(d[p][0],d[p][1]),m.push([d[p][0],d[p][1]]);if(m.length<3)continue;let l=(0,ni.default)(f,void 0,2);for(let p=0;p<l.length;p+=3){let h=m[l[p]],b=m[l[p+1]],y=m[l[p+2]];e.tri([h[0]*z,o,h[1]*z],[b[0]*z,o,b[1]*z],[y[0]*z,o,y[1]*z],c,i)}}}function li(e,t,n,r,o,i,a){if(t.length<2)return;let s=a??hn(t),c=[0,1,0],u=i&&i.length>=3?[[...i.map(l=>[l.x,l.y]),[i[0].x,i[0].y]]]:null,d=i&&i.length>=3?new po([[...i]]):null,f=l=>{e.setMaterial(2),l(),e.setMaterial(0)},m=l=>{e.setMaterial(3),l(),e.setMaterial(0)};for(let l=0;l<t.length;l++){let p=t[l];if(p.patch&&p.patch.length>=3){let R=[...p.patch],x=s[l].belowY??r;if(m(()=>{if(u&&d)ti(e,u,d,R,p.y,o.tread);else{let g=R[0];for(let C=1;C+1<R.length;C++){let E=R[C],D=R[C+1];e.tri([g.x*z,p.y,g.y*z],[E.x*z,p.y,E.y*z],[D.x*z,p.y,D.y*z],c,o.tread)}}}),p.y>x+Jr){let g=0,C=0;for(let E of R)g+=E.x,C+=E.y;g/=R.length,C/=R.length,f(()=>{for(let E=0;E<R.length;E++){let D=R[E],B=R[(E+1)%R.length],L=B.x-D.x,A=B.y-D.y,k=Math.hypot(L,A);if(k<1e-6)continue;let N=A/k,w=-L/k;(D.x-g)*N+(D.y-C)*w<0&&(N=-N,w=-w);let T=[N,0,w],_=[D.x*z,p.y,D.y*z],P=[B.x*z,p.y,B.y*z],O=[D.x*z,x,D.y*z],I=[B.x*z,x,B.y*z];e.tri(_,P,I,T,o.riser),e.tri(_,I,O,T,o.riser)}})}continue}let h=ri(t,l,s,n);if(!h)continue;let{pts:b,nrm:y,front:v,back:S}=h,M=s[l].belowY??r;for(let R=0;R+1<b.length;R++){let x=b[R],g=b[R+1],C=y[R],E=y[R+1];if(Math.hypot(g.x-x.x,g.y-x.y)<1e-6||C[0]===0&&C[1]===0||E[0]===0&&E[1]===0)continue;let D=[(x.x-C[0]*v)*z,p.y,(x.y-C[1]*v)*z],B=[(g.x-E[0]*v)*z,p.y,(g.y-E[1]*v)*z],L=[(x.x+C[0]*S)*z,p.y,(x.y+C[1]*S)*z],A=[(g.x+E[0]*S)*z,p.y,(g.y+E[1]*S)*z];if(m(()=>{u&&d?ti(e,u,d,[{x:x.x-C[0]*v,y:x.y-C[1]*v},{x:g.x-E[0]*v,y:g.y-E[1]*v},{x:g.x+E[0]*S,y:g.y+E[1]*S},{x:x.x+C[0]*S,y:x.y+C[1]*S}],p.y,o.tread):(e.tri(D,B,A,c,o.tread),e.tri(D,A,L,c,o.tread))}),p.y>M+Jr){let k=[D[0],M,D[2]],N=[B[0],M,B[2]],w=[-C[0],0,-C[1]];f(()=>{e.tri(D,B,N,w,o.riser),e.tri(D,N,k,w,o.riser)})}}}}function ui(e){let t=1/0,n=1/0,r=-1/0,o=-1/0,i=!1;for(let a of e)!Number.isFinite(a.x)||!Number.isFinite(a.y)||(i=!0,a.x<t&&(t=a.x),a.y<n&&(n=a.y),a.x>r&&(r=a.x),a.y>o&&(o=a.y));return i?{minX:t,minY:n,maxX:r,maxY:o}:null}function bn(e,t){return e.minX<=t.maxX&&t.minX<=e.maxX&&e.minY<=t.maxY&&t.minY<=e.maxY}var bo=mt(require("polygon-clipping"),1);function Hl(e,t){let n=e.eventConfigurationIds;return!n?.length||!!t&&n.includes(t)}function mi(e,t){return e.filter(n=>n.type!=="shape"||Hl(n,t))}function di(e,t){let n=e.focalPoint??{x:0,y:0};return e.floors?.length?e.floors.map((r,o)=>({objects:mi(r.objects,t),focal:{x:(r.focalPoint??n).x,y:(r.focalPoint??n).y},baseHeightM:r.baseHeightM??0,index:o})):[{objects:mi(e.objects,t),focal:n,baseHeightM:0,index:0}]}var jl={minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0};function vt(e){return ui(e)??jl}function fi(e,t){let n=an(e.outline,Ce),r=vt(n),o=t.filter(a=>a!==e&&a.outline&&a.outline.length>=3&&bn(r,vt(a.outline)));if(!o.length)return[n];let i=a=>{let s=a.map(c=>[c.x,c.y]);return s.push(s[0]),s};try{let a=bo.default.difference([i(n)],...o.map(c=>[i(c.outline)])),s=[];for(let c of a){if(!c.length)continue;let u=c[0].map(([d,f])=>({x:d,y:f}));if(u.length>1){let d=u[0],f=u[u.length-1];Math.abs(d.x-f.x)<1e-9&&Math.abs(d.y-f.y)<1e-9&&u.pop()}u.length>=3&&s.push(u)}return s.length?s:[n]}catch{return[n]}}function pi(e,t){if(!t.length)return e;let n=i=>{let a=i.map(s=>[s.x,s.y]);return a.push(a[0]),a},r=t.map(i=>[n(i)]),o=[];for(let i of e){let a;try{a=bo.default.intersection([n(i.outline)],r.flat())}catch{o.push(i);continue}for(let s of a){if(!s.length)continue;let c=s[0].map(([u,d])=>({x:u,y:d}));if(c.length>1){let u=c[0],d=c[c.length-1];Math.abs(u.x-d.x)<1e-9&&Math.abs(u.y-d.y)<1e-9&&c.pop()}c.length>=3&&o.push({outline:c,holes:[],topY:i.topY})}}return o.length?o:e}var Yl=.05,hi=.05,Xl=.15,yo=25;function bi(e,t,n){let r=new Map,o=new Array(t.length).fill(null),i=new Float64Array(t.length),a=new Array(t.length).fill(void 0),s=new Array(t.length).fill(void 0),c=new Map,u=[],d=new Set;for(let m=0;m<e.length;m+=1){let l=e[m];for(let p of l.objects){if(p.type==="table"&&d.add(p.id),p.type!=="section"||!p.outline||p.outline.length<3)continue;let h=an(p.outline,Ce);c.set(p.id,{section:p,unit:l,frontU:1/0,hasSeats:!1,rows:new Map,seatIndices:[]}),u.push({id:p.id,floorIndex:m,box:vt(h),section:p,unit:l,outline:h})}}let f=new Map;for(let m of u){let l=f.get(m.floorIndex);l?l.push(m):f.set(m.floorIndex,[m])}for(let m=0;m<t.length;m++){let l=t[m],p=n?f.get(n[m])??[]:u,h=l.sectionId?p.find(y=>y.id===l.sectionId)??p.find(y=>y.section.logicalSectionId===l.sectionId&&ot({x:l.x,y:l.y},y.outline,y.section.holes)):void 0,b=h?[h]:p;for(let y of b){if(n&&y.floorIndex!==n[m]||!h&&(l.x<y.box.minX||l.x>y.box.maxX||l.y<y.box.minY||l.y>y.box.maxY||!ot({x:l.x,y:l.y},y.outline,y.section.holes)))continue;o[m]=y.id;let v=c.get(y.id);v.hasSeats=!0;let S=l.focalPoint??y.unit.focal,M=Math.hypot(l.x-S.x,l.y-S.y);M<v.frontU&&(v.frontU=M),v.seatIndices.push(m);let R=l.rowId||`__seat-${m}`,x=v.rows.get(R);x?x.push({x:l.x,y:l.y}):v.rows.set(R,[{x:l.x,y:l.y}]);break}}for(let[m,l]of c){let p=tn(l.section,{floorBaseHeightM:l.unit.baseHeightM}),h=l.unit.baseHeightM,b=p.rake>0?Math.tan(p.rake*Math.PI/180):0,y=p.rake<=.01&&p.height<=h+.001,v=l.section.surfaceKind,S=v==="flat"?!0:v==="rakedRows"&&p.rake>.01?!1:y,M=l.hasSeats?un(m,t,l.seatIndices,l.unit.focal):{sectionId:m,rows:[],blockCount:0},x=M.rows.length<2?Zr([...l.rows.values()].map(_=>({points:_})),l.unit.focal):null,g=1/0;if(x){if(l.hasSeats)for(let _ of l.rows.values())for(let P of _){let O=x.depthAt(P.x,P.y);O<g&&(g=O)}if(!l.hasSeats||!Number.isFinite(g)){g=1/0;for(let _ of l.section.outline){let P=x.depthAt(_.x,_.y);P<g&&(g=P)}}}let C=h+Yl,E=Math.max(C,p.height),D=_=>{let P=Math.max(0,_-g)*be,O=Math.min(P*b,yo);return Math.max(C,p.height+O)},B=_=>{let P=Math.max(0,_)*be,O=Math.min(P*b,yo);return Math.max(C,p.height+O)},L=S?[]:M.rows.map(_=>({pts:_.pts,y:B(_.blockDepth),depth:_.blockDepth,blockId:_.blockId,...d.has(_.id)?{patch:oi(_.pts,Ce)}:{}})),A=L.length?L[0].y:E,k=L.map(_=>{let P=_.patch&&_.patch.length>=3?_.patch:_.pts,O=0,I=0;for(let j of P)O+=j.x,I+=j.y;let F=P.length||1;O/=F,I/=F;let H=0;for(let j of P){let G=Math.hypot(j.x-O,j.y-I);G>H&&(H=G)}return{cx:O,cy:I,rad:H}}),N=S?()=>E:L.length>=2?(_,P)=>{let O=1/0,I=A;for(let F=0;F<L.length;F++){let H=k[F];if(Math.hypot(_-H.cx,P-H.cy)-H.rad>=O)continue;let j=L[F].patch,G=j&&j.length>=3?kt(j,_,P)?0:yt(j,_,P):yt(L[F].pts,_,P);G<O&&(O=G,I=L[F].y)}return I}:(_,P)=>x?D(x.depthAt(_,P)):E,w=[0,1,0],T=L.length>=2||S?()=>w:(_,P)=>{if(!x)return w;let O=x.depthAt(_,P);if(O<=g)return w;let I=(O-g)*be;if(I*b>=yo||p.height+I*b<=C)return w;let[F,H]=x.gradientAt(_,P);if(F===0&&H===0)return w;let j=1/Math.hypot(b,1);return[-F*b*j,j,-H*b*j]};if(!S)for(let _ of M.rows){let P=B(_.blockDepth);for(let O of _.seatIndices)a[O]=P}for(let _ of M.rows){let P=[];for(let j=1;j<_.pts.length;j++){let G=Math.hypot(_.pts[j].x-_.pts[j-1].x,_.pts[j].y-_.pts[j-1].y);G>1e-6&&P.push(G)}P.sort((j,G)=>j-G);let O=P.length?P[Math.floor(P.length/2)]:1/0,I=1/0,F=_.pts[Math.floor(_.pts.length/2)];if(F)for(let j of M.rows){if(j===_||j.blockId!==_.blockId)continue;let G=yt(j.pts,F.x,F.y);G>1e-6&&G<I&&(I=G)}let H=Math.min(O,Math.max(I,O*.5));if(Number.isFinite(H)&&H>0)for(let j of _.seatIndices)s[j]=H}r.set(m,{sectionId:m,deckAt:N,normalAt:T,flat:S,bottomY:h,rowLevels:L,landingY:A})}for(let m=0;m<t.length;m++){let l=o[m],p=t[m];if(l){let b=a[m];i[m]=(b??r.get(l).deckAt(p.x,p.y))+Xl;continue}let h=p.eyeHeightM;i[m]=Number.isFinite(h)?Math.max(0,h-Ie):0}return{bySection:r,seatOwner:o,seatDeckY:m=>i[m],seatPitchU:m=>s[m]}}var le={top:1,wallBottom:.5,bottomCap:.4};function Oe(e,t){if(!e)return t;let n=Pe(Et(e,.4),.62);return ge(t,n,.72)}function yi(e,t){let n=new Map;for(let i of e.categories??[])n.set(i.key,i.color);let r=new Map;for(let i of t){if(!i.sectionId)continue;let a=r.get(i.sectionId);a||(a=new Map,r.set(i.sectionId,a)),a.set(i.categoryKey,(a.get(i.categoryKey)??0)+1)}let o=new Map;for(let[i,a]of r){let s=0,c=0,u=0,d=0;for(let[f,m]of a){let l=ne(n.get(f));l&&(s+=l[0]*m,c+=l[1]*m,u+=l[2]*m,d+=m)}d>0&&o.set(i,[s/d,c/d,u/d])}return o}function gi(e,t){return ne(e.color)??t.get(e.logicalSectionId??e.id)??null}var xi=mt(require("polygon-clipping"),1);function Wl(e,t){return e===void 0||t===void 0?!0:Math.abs(e-t)<.001}var yn=class{constructor(){this.rings=[];this.boxes=[];this.levels=[]}subtract(t,n){let r=t.map(c=>[c.x,c.y]);if(r.length<3)return[];r.push(r[0]);let o=vt(t),i=this.rings.filter((c,u)=>bn(o,this.boxes[u])&&Wl(n,this.levels[u])),a=[[r]];if(i.length)try{a=xi.default.difference([r],...i).map(u=>u.map(d=>d.map(([f,m])=>[f,m])))}catch{a=[[r]]}this.rings.push([r]),this.boxes.push(o),this.levels.push(n);let s=[];for(let c of a){if(!c.length)continue;let u=c[0].map(([d,f])=>({x:d,y:f}));if(u.length>1){let d=u[0],f=u[u.length-1];Math.abs(d.x-f.x)<1e-9&&Math.abs(d.y-f.y)<1e-9&&u.pop()}u.length>=3&&s.push(u)}return s}};function Kl(e,t){if(!t)return e;let n=1/0,r=-1/0,o=1/0,i=-1/0;for(let f of e)n=Math.min(n,f.x),r=Math.max(r,f.x),o=Math.min(o,f.y),i=Math.max(i,f.y);let a=(n+r)/2,s=(o+i)/2,c=t*Math.PI/180,u=Math.cos(c),d=Math.sin(c);return e.map(f=>{let m=f.x-a,l=f.y-s;return{x:a+m*u-l*d,y:s+m*d+l*u}})}function rt(e){let t=null;if(e.kind==="polygon"&&e.points&&e.points.length>=3&&(t=e.points),e.kind==="rect"&&e.width&&e.height&&(t=Ot(e.x??0,e.y??0,e.width,e.height)),e.kind==="ellipse"&&e.width&&e.height){let n=(e.x??0)+e.width/2,r=(e.y??0)+e.height/2;t=sn(n,r,e.width/2,e.height/2)}return t?Kl(t,e.rotation):null}function Nt(e){let t=e.role??"",n={stage:{kind:"stage",heightM:1},entrance:{kind:"portal",heightM:2.7},exit:{kind:"portal",heightM:2.7},screen:{kind:"solid",heightM:6},wall:{kind:"solid",heightM:2.8},rail:{kind:"solid",heightM:1.1},suite:{kind:"suite",heightM:3},obstruction:{kind:"solid",heightM:4.5},sound:{kind:"solid",heightM:1.45},restroom:{kind:"solid",heightM:2.4},bar:{kind:"solid",heightM:1.1},concession:{kind:"solid",heightM:1.1},coat:{kind:"solid",heightM:1.1},goal:{kind:"portal",heightM:1.8}},r=t==="stage"&&mn(e.stageKind)?{kind:"stage",heightM:.06}:n[t]??{kind:"plate",heightM:.25};return{...r,heightM:e.heightM??r.heightM}}var ql=.08;function vi(e,t){let n=rt(e),r=Nt(e),o=r.heightM;if(!n||r.kind!=="plate"&&r.kind!=="stage")return o;let i=1/0,a=1/0,s=-1/0,c=-1/0;for(let d of n)i=Math.min(i,d.x),a=Math.min(a,d.y),s=Math.max(s,d.x),c=Math.max(c,d.y);let u=o;for(let d of t)s>d.minX&&i<d.maxX&&c>d.minY&&a<d.maxY&&u<=d.topOffsetM+1e-6&&(u=d.topOffsetM+ql);return t.push({minX:i,minY:a,maxX:s,maxY:c,topOffsetM:u}),u}function je(e,t,n){return{x:e.x+(t.x-e.x)*n,y:e.y+(t.y-e.y)*n}}function Si(e){if(e.length!==4)return e;let t=Math.hypot(e[1].x-e[0].x,e[1].y-e[0].y),n=Math.hypot(e[2].x-e[1].x,e[2].y-e[1].y);return t>=n?e:[e[1],e[2],e[3],e[0]]}function Gt(e,t,n){return[je(e[0],e[1],t),je(e[0],e[1],n),je(e[3],e[2],n),je(e[3],e[2],t)]}function Mi(e,t,n){return[je(e[0],e[3],t),je(e[1],e[2],t),je(e[1],e[2],n),je(e[0],e[3],n)]}function Ve(e,t,n,r,o,i){ue(e,t,void 0,()=>n,r,o,i,le)}var go=2.4,$l=.75,Ql=.15;function zt(e){if(e.points&&e.points.length>=3)return e.points;let{center:t,width:n,height:r,rotation:o}=e;if(!n||!r)return null;let i=(o??0)*Math.PI/180,a=Math.cos(i),s=Math.sin(i),c=n/2,u=r/2;return[[-c,-u],[c,-u],[c,u],[-c,u]].map(([d,f])=>({x:t.x+d*a-f*s,y:t.y+d*s+f*a}))}function wi(e,t,n,r,o){let i=zt(t);i&&ue(e,i,void 0,()=>n+go,n,Oe(r,o.boothTop),o.boothWall,le)}function xo(e){if(e.shape==="round"){let d=e.radius;return d?sn(e.center.x,e.center.y,d,d,24):null}let{width:t,height:n,rotation:r,center:o}=e;if(!t||!n)return null;let i=(r??0)*Math.PI/180,a=Math.cos(i),s=Math.sin(i),c=t/2,u=n/2;return[[-c,-u],[c,-u],[c,u],[-c,u]].map(([d,f])=>({x:o.x+d*a-f*s,y:o.y+d*s+f*a}))}function Pi(e,t,n,r,o){let i=xo(t);i&&ue(e,i,void 0,()=>n+$l,n,Oe(r,o.tableTop),o.tableWall,le)}function Ci(e,t,n,r,o,i,a,s){let c=rt(t);if(!c)return;let u=s?s.kind==="stage":t.role==="stage",d=s?s.kind==="screen":t.role==="screen",f=s?{kind:u?"stage":"solid",heightM:s.topY-s.baseY}:Nt(t),m=s?.baseY??n,l=s?.topY??n+r;if(u&&a){let v=1/0,S=-1/0,M=1/0,R=-1/0;for(let x of c)x.x<v&&(v=x.x),x.x>S&&(S=x.x),x.y<M&&(M=x.y),x.y>R&&(R=x.y);a.push({cx:(v+S)/2*z,cz:(M+R)/2*z,y:l,halfX:Math.max((S-v)/2*z,.5),halfZ:Math.max((R-M)/2*z,.5)})}let p=ne(t.fill),h=u&&p?ge(o.stageTop,Pe(Et(p,.18),.9),.9):Oe(p,u?o.stageTop:o.decorTop),b=d?p:null,y=u?p?ge(o.stageWall,Pe(p,.58),.82):o.stageWall:d?b?ge(Pe(b,1.42),[.24,.46,.82],.08):[.24,.46,.82]:Oe(ne(t.fill),o.decorWall);if(f.kind==="portal"&&c.length===4){let v=Si(c);Ve(e,Gt(v,0,.16),l,m,h,y),Ve(e,Gt(v,.84,1),l,m,h,y),Ve(e,v,l,Math.max(m,l-.35),h,y);return}if(f.kind==="suite"&&c.length===4){let v=c.map((R,x)=>{let g=c[(x+1)%4],C=(R.x+g.x)/2,E=(R.y+g.y)/2;return Math.hypot(C-i.x,E-i.y)}),S=v.indexOf(Math.min(...v)),M=[0,1,2,3].map(R=>c[(S+R)%4]);Ve(e,Gt(M,0,.08),l,m,h,y),Ve(e,Gt(M,.92,1),l,m,h,y),Ve(e,Mi(M,.88,1),l,m,h,y),Ve(e,M,l,Math.max(m,l-.18),h,y);return}Ve(e,c,l,m,h,y)}function vo(e){let{x:t,y:n,width:r,height:o}=e;if(!r||!o)return null;let i=t+r/2,a=n+o/2,s=(e.rotation??0)*Math.PI/180,c=Math.cos(s),u=Math.sin(s),d=r/2,f=o/2;return[[-d,-f],[d,-f],[d,f],[-d,f]].map(([m,l])=>({x:i+m*c-l*u,y:a+m*u+l*c}))}function Zl(e){if(!e||!e.startsWith("data:image/svg+xml"))return null;let t=e.slice(e.indexOf(",")+1);if(/;base64/i.test(e.slice(0,e.indexOf(","))))try{t=atob(t)}catch{return null}else try{t=decodeURIComponent(t)}catch{}let n=t.match(/<(?:rect|path)\b[^>]*\bfill="([^"]+)"/i);if(!n)return null;let r=n[1].trim();if(r==="none"||r==="transparent")return null;let o=r.match(/^url\(#([^)]+)\)$/);if(!o)return ne(r);let i=t.match(new RegExp(`<(?:linear|radial)Gradient\\b[^>]*\\bid="${o[1]}"[^>]*>([\\s\\S]*?)</(?:linear|radial)Gradient>`,"i"));if(!i)return null;let a=[];for(let s of i[1].matchAll(/stop-color="([^"]+)"/gi)){let c=ne(s[1].trim());c&&a.push(c)}return a.length?a.reduce((s,c,u)=>ge(s,c,1/(u+1)),a[0]):null}function Ai(e,t,n,r){if(t.layer==="foreground")return;let o=vo(t);if(!o)return;let i=n+Ql,a=Oe(Zl(t.href),r.decorTop),s=Math.max(0,Math.min(1,t.opacity??1));s<1&&(a=ge(r.ground,a,s)),ue(e,o,void 0,()=>i,n,a,ge(a,r.decorWall,.5),le)}function Ri(e,t,n,r,o){if(!t.points||t.points.length<3)return;let i=Oe(r,o.gaTop);ue(e,t.points,t.holes,()=>n+.15,n,i,o.gaWall,le)}var Jl=Math.PI/180,oe=96,eu=6,tu=60,nu=150,Ei=.2,ou=.35;function ru(e,t){let n=Math.atan2(t.x-e.x,t.y-e.y)/Jl;return n<0?n+360:n}function gn(e){if(!e.length)return NaN;let t=[...e].sort((n,r)=>n-r);return t[Math.floor(t.length/2)]}function xn(e,t,n=2){let r=e.length,o=new Float64Array(r);for(let i=0;i<r;i++){let a=0,s=0;for(let c=-n;c<=n;c++){let u=i+c;if(t)u=(u%r+r)%r;else if(u<0||u>=r)continue;a+=e[u],s++}o[i]=a/s}return o}function Ii(e,t){let n=e.filter(m=>m.rows.length>=1);if(n.length<1)return null;let r=[],o=0,i=0,a=0;for(let m of n)for(let l of m.rows){for(let p of l.pts)o+=p.x,i+=p.y,a++;if(l.pts.length>=4){let p=ao(l.pts);p&&Number.isFinite(p.cx)&&Number.isFinite(p.cy)&&r.push({x:p.cx,y:p.cy})}}if(!a)return null;let s={x:o/a,y:i/a},c=s;if(r.length>=8){let m=gn(r.map(y=>y.x)),l=gn(r.map(y=>y.y)),p=0;for(let y of n)for(let v of y.rows)for(let S of v.pts){let M=Math.hypot(S.x-s.x,S.y-s.y);M>p&&(p=M)}let h=0,b=p*.2;for(let y of n)for(let v of y.rows)for(let S of v.pts)Math.hypot(S.x-m,S.y-l)<b&&h++;Math.hypot(m-s.x,l-s.y)<=p&&h/a<.01&&(c={x:m,y:l})}let u=[];for(let m of n){let l={sectionId:m.sectionId,rMin:1/0,rMax:-1/0,samples:[]};for(let p of m.rows)for(let h of p.pts){let b=Math.hypot(h.x-c.x,h.y-c.y),y=Math.min(oe-1,Math.floor(ru(c,h)/(360/oe)));l.samples.push({r:b,bin:y,levelM:p.levelM}),b<l.rMin&&(l.rMin=b),b>l.rMax&&(l.rMax=b)}l.samples.length&&u.push(l)}if(!u.length)return null;u.sort((m,l)=>m.rMin+m.rMax-(l.rMin+l.rMax));let d=[];for(let m of u){let l=!1;for(let p of d){let h=Math.min(m.rMax,p.rMax)-Math.max(m.rMin,p.rMin),b=Math.min(m.rMax-m.rMin,p.rMax-p.rMin);if(b>1e-9&&h>=ou*b){p.members.push(m),p.rMin=Math.min(p.rMin,m.rMin),p.rMax=Math.max(p.rMax,m.rMax),l=!0;break}}l||d.push({members:[m],rMin:m.rMin,rMax:m.rMax})}let f=[];for(let m of d){let l=new Array(oe).fill(null);for(let A of m.members)for(let k of A.samples){let N=l[k.bin];N||(N={samples:[]},l[k.bin]=N),N.samples.push({r:k.r,levelM:k.levelM})}let p=l.map(A=>!!A);if(!p.filter(Boolean).length)continue;let b=[],y=[];for(let A of l){if(!A)continue;let k=1/0,N=-1/0;for(let w of A.samples)w.r<k&&(k=w.r),w.r>N&&(N=w.r);b.push(k),y.push(N)}let v=gn(b),S=gn(y);if(!(v>=Ei*S)||!(S>0))continue;let M=[...b].sort((A,k)=>A-k);if(!(M[Math.floor(M.length*.1)]>=Ei*S))continue;let x=l.map(A=>{if(!A)return null;let k=[...A.samples].sort((F,H)=>F.r-H.r),N=k[0].r,w=k[k.length-1].r,T=k[0].levelM,_=-1/0;for(let F of k)F.levelM>_&&(_=F.levelM);let P=[];for(let F of k){let H={r:F.r,l:F.levelM};for(;P.length&&Math.abs(P[P.length-1].r-H.r)<1e-9;){if(P[P.length-1].l<=H.l){H.skip=!0;break}P.pop()}if(!H.skip){for(;P.length>=2;){let j=P[P.length-2],G=P[P.length-1];if((G.r-j.r)*(H.l-j.l)-(G.l-j.l)*(H.r-j.r)<=0)P.pop();else break}P.push(H)}}let O=P.map(F=>F.r),I=P.map(F=>F.l);return{inner:N,outer:w,front:T,top:_,profile:{rs:O,ls:I}}}),g=p.slice();for(let A=0;A<oe;A++){if(g[A])continue;let k=-1,N=-1,w=0;for(let V=1;V<=oe;V++){let W=(A-V+oe*2)%oe;if(g[W]){k=W;break}}for(let V=1;V<=oe;V++){let W=(A+V)%oe;if(g[W]){N=W,w=V;break}}if(k<0||N<0)continue;let T=0;for(let V=1;V<=oe;V++){let W=(A-V+oe*2)%oe;if(p[W]){T=V;break}}if(T-1+w>eu)continue;let P=x[k],O=x[N],I=T/(T+w),F=P.inner+(O.inner-P.inner)*I,H=P.outer+(O.outer-P.outer)*I,j=P.front+(O.front-P.front)*I,G=P.top+(O.top-P.top)*I;x[A]={inner:F,outer:H,front:j,top:G,profile:{rs:[F,H],ls:[j,G]}}}for(let A=0;A<oe;A++)x[A]&&(g[A]=!0);let C=360/oe,E=[],D=g.filter(Boolean).length,B=[];if(D===oe)B.push({start:0,len:oe});else{let A=0;for(;g[A];)A=(A+1)%oe;let k=-1;for(let N=0;N<=oe;N++){let w=(A+N)%oe,T=N<oe&&g[w];if(T&&k<0)k=w;else if(!T&&k>=0){let _=(w-k+oe)%oe||oe;B.push({start:k,len:_}),k=-1}}}for(let A of B){if(A.len*C<tu&&A.len<oe)continue;let k=A.len===oe,N=new Float64Array(A.len),w=new Float64Array(A.len),T=new Float64Array(A.len),_=new Float64Array(A.len),P=[];for(let V=0;V<A.len;V++){let W=x[(A.start+V)%oe];N[V]=W.inner,w[V]=W.outer,T[V]=W.front,_[V]=W.top,P.push(W.profile??{rs:[W.inner,W.outer],ls:[W.front,W.top]})}let O=xn(N,k),I=xn(w,k),F=xn(T,k),H=xn(_,k);for(let V=0;V<A.len;V++)O[V]>N[V]&&(O[V]=N[V]),I[V]<w[V]&&(I[V]=w[V]),O[V]>I[V]-1e-6&&(O[V]=Math.max(0,I[V]-1e-6)),H[V]<F[V]&&(H[V]=F[V]);let j={startBin:A.start,binCount:A.len,closed:k,innerR:O,outerR:I,frontLevelM:F,topLevelM:H,profiles:P},G=(V,W,X)=>{let Q=P[V],q=Q.rs,K=Q.ls;if(W<=q[0]){K[0]>X&&(K[0]=X);return}if(W>=q[q.length-1]){K[K.length-1]>X&&(K[K.length-1]=X);return}for(let Z=0;Z+1<q.length;Z++)if(W<=q[Z+1]){K[Z]>X&&(K[Z]=X),K[Z+1]>X&&(K[Z+1]=X);return}};for(let V=0;V<A.len;V++){let W=l[(A.start+V)%oe];if(W)for(let X of W.samples){G(V,X.r,X.levelM);let Q=k?(V-1+A.len)%A.len:V-1,q=k?(V+1)%A.len:V+1;Q>=0&&G(Q,X.r,X.levelM),q<A.len&&G(q,X.r,X.levelM)}}E.push(j)}E.reduce((A,k)=>A+k.binCount*C,0)<nu||f.push({arcs:E,sectionIds:m.members.map(A=>A.sectionId),innerRMedian:v,outerRMedian:S})}if(!f.length)return null;if(f.sort((m,l)=>m.innerRMedian-l.innerRMedian),t){let m=f[f.length-1].outerRMedian;if(Math.hypot(t.x-c.x,t.y-c.y)>.9*m)return null}return{centre:c,binCount:oe,binStepDeg:360/oe,rings:f}}function Ti(e,t,n,r){let o=e.binStepDeg,i=n/o-.5-t.startBin;i=(i%e.binCount+e.binCount)%e.binCount,i>t.binCount-1&&(t.closed?i=i-t.binCount<t.binCount-i?0:t.binCount-1:i=i-(t.binCount-1)<e.binCount-i?t.binCount-1:0);let a=Math.floor(i),s=t.closed?(a+1)%t.binCount:Math.min(t.binCount-1,a+1),c=i-a,u=d=>{let f=t.profiles[d],m=f.rs,l=f.ls;if(r<=m[0])return l[0];if(r>=m[m.length-1])return l[l.length-1];for(let p=0;p+1<m.length;p++)if(r<=m[p+1]){let h=m[p+1]-m[p],b=h>1e-9?(r-m[p])/h:0;return l[p]+(l[p+1]-l[p])*b}return l[l.length-1]};return u(a)*(1-c)+u(s)*c}var iu=.25,au=1.2,su=.6,cu=.45,lu=2.3,uu=Math.PI/180;function it(e,t,n){let r=n*uu;return{x:e.x+t*Math.sin(r),y:e.y+t*Math.cos(r)}}function mu(e,t){let n=t.rings[t.rings.length-1];if(!n)return!1;let r=n.outerRMedian*.85;for(let o of e){if(o.role!=="wall")continue;let i=o.points&&o.points.length>=2?o.points:o.x!==void 0&&o.y!==void 0&&o.width!==void 0&&o.height!==void 0?[{x:o.x,y:o.y},{x:o.x+o.width,y:o.y},{x:o.x+o.width,y:o.y+o.height},{x:o.x,y:o.y+o.height}]:[];if(i.length<2)continue;let a=0;for(let s of i)Math.hypot(s.x-t.centre.x,s.y-t.centre.y)>=r&&a++;if(a>=i.length/2)return!0}return!1}var du=24;function fu(e,t,n,r,o,i,a,s){let c=n.binCount,u=du,d=be,f=i+.02,m=[];for(let L=0;L<c;L++){let A=(n.startBin+L+.5)*t.binStepDeg,k=new Float64Array(u+1);for(let N=0;N<=u;N++){let w=r[L]+(o[L]-r[L])*N/u;k[N]=Math.max(f,Ti(t,n,A,w)-iu)}m.push(k)}let l=[a.bandTop[0]*s.top,a.bandTop[1]*s.top,a.bandTop[2]*s.top],p=[a.bandTop[0]*s.bottomCap,a.bandTop[1]*s.bottomCap,a.bandTop[2]*s.bottomCap],h=[a.bandWall[0]*s.top,a.bandWall[1]*s.top,a.bandWall[2]*s.top],b=[a.bandWall[0]*s.wallBottom,a.bandWall[1]*s.wallBottom,a.bandWall[2]*s.wallBottom],y=(L,A)=>{let k=(n.startBin+L+.5)*t.binStepDeg,N=r[L]+(o[L]-r[L])*A/u,w=it(t.centre,N,k);return[w.x*d,m[L][A],w.y*d]};{let L=Math.tan(12*Math.PI/180);for(let A=0;A<6;A++){let k=!1;for(let w=0;w<c;w++)for(let T=u-1;T>=0;T--)m[w][T]>m[w][T+1]&&(m[w][T]=m[w][T+1],k=!0);let N=n.closed?c:c-1;for(let w=0;w<N;w++){let T=(w+1)%c;for(let _=0;_<=u;_++){let P=m[T][_]-m[w][_];if(Math.abs(P)>1)continue;let O=r[w]+(o[w]-r[w])*_/u,I=r[T]+(o[T]-r[T])*_/u,F=it(t.centre,O,(n.startBin+w+.5)*t.binStepDeg),H=it(t.centre,I,(n.startBin+T+.5)*t.binStepDeg),j=L*Math.hypot(H.x-F.x,H.y-F.y)*d;P>j?(m[T][_]=m[w][_]+j,k=!0):-P>j&&(m[w][_]=m[T][_]+j,k=!0)}}if(!k)break}}let v=1,S=(L,A)=>{for(let k=0;k<=u;k+=4)if(Math.abs(m[L][k]-m[A][k])>v)return!0;return Math.abs(m[L][u]-m[A][u])>v},M=Math.tan(38*Math.PI/180),R=L=>(o[L]-r[L])/u*d,x=(L,A)=>m[L][A+1]-m[L][A]>M*Math.max(1e-6,R(L)),g=(L,A)=>{let k=n.closed?(L-1+c)%c:Math.max(0,L-1),N=n.closed?(L+1)%c:Math.min(c-1,L+1);Math.abs(m[k][A]-m[L][A])>v&&(k=L),Math.abs(m[N][A]-m[L][A])>v&&(N=L);let w=Math.max(0,A-1),T=Math.min(u,A+1);w<A&&x(L,w)&&(w=A),T>A&&x(L,A)&&(T=A);let _=y(k,A),P=y(N,A),O=y(L,w),I=y(L,T),F=P[0]-_[0],H=P[1]-_[1],j=P[2]-_[2],G=I[0]-O[0],V=I[1]-O[1],W=I[2]-O[2],X=H*W-j*V,Q=j*G-F*W,q=F*V-H*G,K=Math.hypot(X,Q,q);return K>1e-12?(X/=K,Q/=K,q/=K,Q<0&&(X=-X,Q=-Q,q=-q),[X,Q,q]):[0,1,0]},C=(L,A)=>{let k=[L[0],i,L[2]],N=[A[0],i,A[2]],w=A[0]-L[0],T=A[2]-L[2],_=Math.hypot(w,T);if(!(_>1e-12))return;let P=[T/_,0,-w/_];e.tri(L,A,N,P,h,h,b),e.tri(L,N,k,P,h,b,b)},E=.05*He,D=L=>o[L]-r[L]<E,B=n.closed?c:c-1;for(let L=0;L<B;L++){let A=(L+1)%c;if(D(L)||D(A))continue;if(S(L,A)){let P=(n.startBin+L+1)*t.binStepDeg,O=(V,W)=>{let X=(r[L]+r[A])/2,Q=(o[L]+o[A])/2,q=X+(Q-X)*W/u,K=it(t.centre,q,P);return[K.x*d,m[V][W],K.y*d]};for(let V=0;V<u;V++){let W=y(L,V),X=y(L,V+1),Q=O(L,V),q=O(L,V+1),K=g(L,V),Z=g(L,V+1);e.triN(W,Q,q,K,K,Z,l),e.triN(W,q,X,K,Z,Z,l);let te=y(A,V),Me=y(A,V+1),Ae=O(A,V),Be=O(A,V+1),ke=g(A,V),Ne=g(A,V+1);e.triN(Ae,te,Me,ke,ke,Ne,l),e.triN(Ae,Me,Be,ke,Ne,Ne,l);let we=O(L,V),de=O(L,V+1),Ge=O(A,V+1),ct=O(A,V),lt=de[0]-we[0],Fe=de[2]-we[2],qe=Math.hypot(lt,Fe);if(qe>1e-12){let ut=[Fe/qe,0,-lt/qe];e.tri(we,de,Ge,ut,h),e.tri(we,Ge,ct,ut,h)}}let I=y(L,0),F=y(A,0),H=y(A,u),j=y(L,u),G=V=>[V[0],i,V[2]];e.tri(G(I),G(H),G(F),[0,-1,0],p),e.tri(G(I),G(j),G(H),[0,-1,0],p),C(I,F),C(j,H);continue}for(let P=0;P<u;P++){let O=g(L,P),I=g(A,P),F=g(A,P+1),H=g(L,P+1);if(x(L,P)||x(A,P)){let X=(de,Ge)=>{let ct=(n.startBin+de+.5)*t.binStepDeg,lt=r[de]+(o[de]-r[de])*(P+.5)/u,Fe=it(t.centre,lt,ct);return[Fe.x*d,Ge,Fe.y*d]},Q=y(L,P),q=y(A,P),K=X(L,m[L][P]),Z=X(A,m[A][P]);e.triN(Q,q,Z,O,I,I,l),e.triN(Q,Z,K,O,I,O,l);let te=y(A,P+1),Me=y(L,P+1),Ae=X(L,m[L][P+1]),Be=X(A,m[A][P+1]);e.triN(Ae,Be,te,H,F,F,l),e.triN(Ae,te,Me,H,F,H,l);let ke=Z[0]-K[0],Ne=Z[2]-K[2],we=Math.hypot(ke,Ne);if(we>1e-12){let de=[-Ne/we,0,ke/we];e.tri(K,Z,Be,de,h),e.tri(K,Be,Ae,de,h)}continue}let j=y(L,P),G=y(A,P),V=y(A,P+1),W=y(L,P+1);e.triN(j,G,V,O,I,F,l),e.triN(j,V,W,O,F,H,l)}let k=y(L,0),N=y(A,0),w=y(A,u),T=y(L,u),_=P=>[P[0],i,P[2]];e.tri(_(k),_(w),_(N),[0,-1,0],p),e.tri(_(k),_(T),_(w),[0,-1,0],p),C(k,N),C(T,w)}if(!n.closed)for(let L of[0,c-1])for(let A=0;A<u;A++)C(y(L,A),y(L,A+1))}function _i(e,t,n){let{bottomY:r,colors:o,ao:i}=n,a=new Float64Array(t.binCount).fill(-1/0);for(let d of t.rings)for(let f of d.arcs){let m=new Float64Array(f.binCount),l=new Float64Array(f.binCount);for(let h=0;h<f.binCount;h++){let b=(f.startBin+h)%t.binCount,y=Math.max(0,f.innerR[h]-Ce);m[h]=Math.max(y,a[b]+.001),l[h]=Math.max(m[h]+.001,f.outerR[h]+Ce)}let p=0;for(let h=0;h<f.binCount;h++){let b=f.topLevelM[h]-r;b>p&&(p=b)}p>=au&&fu(e,t,f,m,l,r,o,i);for(let h=0;h<f.binCount;h++){let b=(f.startBin+h)%t.binCount;l[h]>a[b]&&(a[b]=l[h])}}if(n.deriveShell===!1||mu(n.shapes,t))return;let s=t.rings[t.rings.length-1],c=su*He,u=cu*He;for(let d of s.arcs){let f=[],m=[];for(let h=0;h<d.binCount;h++){let b=(d.startBin+h+.5)*t.binStepDeg,y=d.outerR[h]+Ce+c;f.push(it(t.centre,y,b)),m.push(it(t.centre,y+u,b))}let l=-1/0;for(let h=0;h<d.binCount;h++)d.topLevelM[h]>l&&(l=d.topLevelM[h]);let p=()=>l+lu;d.closed?ue(e,m,[f.slice().reverse()],p,r,o.shellTop,o.shellWall,i):ue(e,[...m,...f.slice().reverse()],void 0,p,r,o.shellTop,o.shellWall,i)}}function Li(e,t,n,r,o,i,a,s){if(!t.outline||t.outline.length<3)return;let c=n.baseHeightM,u=Oe(r,s.tierTop);if(!o)return;let d=b=>o.deckAt(b.x,b.y),f=fi(t,a),m=f[0]??t.outline;if(o.rowLevels.length>=2){let b=hn(o.rowLevels),y=pi(si(o.rowLevels,n.focal,b),f),v=()=>[0,1,0];for(let M of y){let R=Math.max(c,M.topY-.02);for(let x of i.subtract(M.outline,R))ue(e,x,M.holes,()=>R,c,u,s.tierWall,le,void 0,v)}y.length||ue(e,m,t.holes,()=>o.landingY,c,u,s.tierWall,le);let S={tread:[u[0]*le.top,u[1]*le.top,u[2]*le.top],riser:[u[0]*.72,u[1]*.72,u[2]*.72]};for(let M of f.length?f:[m])li(e,o.rowLevels,n.focal,o.landingY,S,M,b);return}let l=o.flat?1/0:hi,p=b=>o.normalAt(b.x,b.y),h=o.flat?o.landingY:void 0;for(let b of i.subtract(m,h))ue(e,b,t.holes,d,c,u,s.tierWall,le,l,p)}function pu(e,t,n){let r=new Set;for(let a of e.objects)a.type==="section"&&r.add(a.id);let o=new Map;for(let a=0;a<t.length;a++){let s=n.seatOwner[a];if(!s||!r.has(s))continue;let c=n.bySection.get(s);if(c&&c.rowLevels.length>=2)continue;let u=t[a],d=o.get(s);d||(d=new Map,o.set(s,d));let f=u.rowId||`__seat-${a}`,m=d.get(f);m||(m={pts:[],levelM:0,n:0},d.set(f,m)),m.pts.push({x:u.x,y:u.y}),m.levelM+=n.seatDeckY(a),m.n++}let i=[];for(let a of e.objects){if(a.type!=="section")continue;let s=n.bySection.get(a.id);if(s&&s.rowLevels.length>=2){let u=s.rowLevels.filter(d=>!d.patch).map(d=>({pts:d.pts,levelM:d.y}));u.length>=2&&i.push({sectionId:a.id,rows:u});continue}let c=o.get(a.id);c&&i.push({sectionId:a.id,rows:[...c.values()].map(u=>({pts:u.pts,levelM:u.levelM/u.n}))})}return i}function ki(e,t,n,r,o,i,a=!0){let s=pu(t,n,r);if(!s.length)return;let c=Ii(s,t.focal);c&&(e.setMaterial(0),_i(e,c,{bottomY:t.baseHeightM,colors:{bandTop:Pe(o.tierTop,.8),bandWall:o.tierWall,shellTop:i??Pe(o.tierWall,1.15),shellWall:i??o.tierWall},ao:le,shapes:t.objects.filter(u=>u.type==="shape"),deriveShell:a}))}var Fi=/^[\p{L}\p{N}]{1,4}$/u,hu=/^([\p{L}\p{N}]{2,})[\s\-\u2013\u2014\u00b7_./]+(.+)$/u;function Di(e,t){let n=t?.trim();if(!n)return e;let r=e.toLocaleLowerCase("en-US"),o=n.toLocaleLowerCase("en-US");if(r.startsWith(`${o} `)){let a=e.slice(n.length).trim();if(Fi.test(a))return a}let i=hu.exec(e);if(i){let a=i[1].toLocaleLowerCase("en-US"),s=i[2].trim();if((o.startsWith(a)||a.startsWith(o))&&Fi.test(s))return s}return e}function Oi(e,t,n){return n<0?t>1?e.filter(r=>r.kind==="floor"):[...e]:e.filter(r=>r.floorIndex===void 0||r.floorIndex===n)}function Vi(e,t){let n=[...e].sort((o,i)=>o.screen.y-i.screen.y),r=[];for(let o of n){let i=r.find(a=>a.some(s=>Math.abs(s.screen.x-o.screen.x)<104&&Math.abs(s.screen.y-o.screen.y)<34));i?i.push(o):r.push([o])}return r.flatMap(o=>o.length<2?o:o.map((i,a)=>({...i,screen:{...i.screen,x:Math.max(54,Math.min(t-54,i.screen.x+(a-(o.length-1)/2)*104))}})))}var bu=1.15,yu=2.75,gu=4.5,xu=.85,vu=.5,Su=.26;function Bi(e,t,n){let r=Math.max(1e-6,t),o=e/r,i=n?.hasZoneLabels??!0,a=new Set;return o>=.75&&a.add("floor"),o>=bu&&a.add("zone"),o<=(i?yu:gu)&&(a.add("section"),a.add("ga")),o<=xu&&(a.add("annotation"),a.add("booth")),o<=vu&&a.add("row"),o<=Su&&a.add("seat"),a}function Ni(e,t,n,r,o,i=6){let a=i+t,s=r-i-t,c=i+n,u=o-i-n;return{...e,x:a>s?r/2:Math.max(a,Math.min(s,e.x)),y:c>u?o/2:Math.max(c,Math.min(u,e.y))}}function Ye(e,t,n,r){let o=e,i=t[0],a=t[1],s=t[2],c=o[0]*i+o[4]*a+o[8]*s+o[12],u=o[1]*i+o[5]*a+o[9]*s+o[13],d=o[2]*i+o[6]*a+o[10]*s+o[14],f=o[3]*i+o[7]*a+o[11]*s+o[15];if(!(f>1e-6))return{x:0,y:0,depth:1/0,visible:!1};let m=c/f,l=u/f,p=d/f,h=m>=-1.05&&m<=1.05&&l>=-1.05&&l<=1.05&&p<=1;return{x:(m*.5+.5)*n,y:(1-(l*.5+.5))*r,depth:p,visible:h}}function Gi(e,t,n=t){let r=[],o=[...e].sort((i,a)=>i.screen.depth-a.screen.depth);for(let i of o){let a=!1;for(let s of r)if(So(i,s,t,n)){a=!0;break}a||r.push(i)}return r}var Mu=6;function So(e,t,n,r){let o=Math.abs(e.screen.x-t.screen.x),i=Math.abs(e.screen.y-t.screen.y),a=e.halfWidth!=null&&t.halfWidth!=null?Math.max(n,e.halfWidth+t.halfWidth+Mu):n;return o<a&&i<r}function zi(e,t,n){return e.length*t*.58+(n?14:0)}var wu={row:8,seat:14};function Ui(e){return e<480?{row:5,seat:8}:e<768?{row:6,seat:10}:wu}function Hi(e,t,n,r){let o=Math.max(1,Math.min(n,r)*.5),i=Math.min(2,Math.hypot(e.x-n/2,e.y-r/2)/o);return t*(1+1.5*i)}function Mo(e,t,n,r,o=[]){let i=[...e].sort((s,c)=>(c.priority??0)-(s.priority??0)||s.focus-c.focus),a=[];for(let s of i){if(a.length>=r)break;let c=!1;for(let u of o)if(So(s,u,t,n)){c=!0;break}if(!c){for(let u of a)if(So(s,u,t,n)){c=!0;break}}c||a.push(s)}return a}var Pu=6,Cu=2.2,ji=.1,Au=.3,Ru=1.8,Eu=.9,Iu=.55,Tu=6e3;function Yi(e){let{doc:t,units:n,seats:r,surfaces:o,focal:i}=e,a=t.zones??[],s=[];if(a.length){let c=new Map;for(let d of n)for(let f of d.objects)f.type==="section"&&f.zone&&c.set(f.id,f.zone);let u=new Map;for(let d=0;d<r.length;d++){let f=r[d],m=o.seatOwner[d],l=f.zoneId??(m?c.get(m):void 0);if(!l)continue;let p=u.get(l);p||(p={n:0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0,sumY:0},u.set(l,p)),p.n++,f.x<p.minX&&(p.minX=f.x),f.y<p.minY&&(p.minY=f.y),f.x>p.maxX&&(p.maxX=f.x),f.y>p.maxY&&(p.maxY=f.y),p.sumY+=o.seatDeckY(d)}for(let d of a){let f=u.get(d.id),m=[];for(let[l,p]of c)p===d.id&&m.push(l);if(!f||f.n===0){s.push({id:d.id,label:d.label,color:ne(d.color),sectionIds:m,seatCount:0,center:[0,0,0],radius:0,focalWorld:[(d.focalPoint??i).x*z,1.5,(d.focalPoint??i).y*z]});continue}s.push({id:d.id,label:d.label,color:ne(d.color),sectionIds:m,seatCount:f.n,center:[(f.minX+f.maxX)/2*z,f.sumY/f.n,(f.minY+f.maxY)/2*z],radius:.5*Math.hypot((f.maxX-f.minX)*z,(f.maxY-f.minY)*z)||1,focalWorld:[(d.focalPoint??i).x*z,1.5,(d.focalPoint??i).y*z]})}}return s}function Xi(e){let{doc:t,units:n,seats:r,surfaces:o,seatData:i,hintedSeatFloor:a,zones:s,focal:c}=e,u=[],d=[],f=[];for(let m of s)m.seatCount!==0&&u.push({id:`zone:${m.id}`,kind:"zone",text:m.label,anchor:[m.center[0],m.center[1]+Pu,m.center[2]],color:t.zones?.find(l=>l.id===m.id)?.color});{let m=new Map,l=new Map;for(let p=0;p<r.length;p++){let h=o.seatOwner[p];if(!h)continue;let b=m.get(h);b||(b={n:0,x:0,y:0,deck:0},m.set(h,b)),b.n++,b.x+=r[p].x,b.y+=r[p].y,b.deck+=o.seatDeckY(p);let y=l.get(h);y||(y={minX:1/0,maxX:-1/0,minY:1/0,maxY:-1/0},l.set(h,y)),r[p].x<y.minX&&(y.minX=r[p].x),r[p].x>y.maxX&&(y.maxX=r[p].x),r[p].y<y.minY&&(y.minY=r[p].y),r[p].y>y.maxY&&(y.maxY=r[p].y)}for(let p of n)for(let h of p.objects){if(h.type!=="section")continue;let b=m.get(h.id);if(!b||b.n===0)continue;let y=l.get(h.id),v=[b.x/b.n*z,b.deck/b.n,b.y/b.n*z],S=h.displayLabel||h.label||h.id;d.push({id:h.id,floorIndex:p.index,label:S,seatCount:b.n,center:v,radius:Math.max(1,Math.hypot(y.maxX-y.minX,y.maxY-y.minY)*.5*z),focalWorld:[p.focal.x*z,p.baseHeightM+1.5,p.focal.y*z]});let M=t.floors?.[p.index]?.name?.trim().toLocaleLowerCase();n.length>1&&M===S.trim().toLocaleLowerCase()||u.push({id:`section:${h.id}`,kind:"section",text:S,anchor:[v[0],v[1]+Cu,v[2]],floorIndex:p.index})}}{for(let h of n)for(let b of h.objects){if(b.type!=="gaArea")continue;let y=Lt(b.points);if(!y)continue;let v=b.displayLabel||b.label||b.id;u.push({id:`ga:${b.id}`,kind:"ga",text:b.capacity>0?`${v} \xB7 ${b.capacity.toLocaleString()}`:v,anchor:[y.x*z,h.baseHeightM+Ru,y.y*z],floorIndex:h.index})}let m=new Map;for(let h of n)for(let b of h.objects)b.type==="section"&&m.set(b.id,b.displayLabel||b.label||b.id);let l=new Map;for(let h=0;h<r.length;h++){let b=r[h],y=Math.hypot(b.x-c.x,b.y-c.y),v=l.get(b.rowId);(!v||y>v.far)&&l.set(b.rowId,{seat:b,index:h,far:y})}for(let[h,b]of l){let y=_u(b.seat.label,h,m.get(b.seat.sectionId??""));y&&u.push({id:`row:${h}`,kind:"row",text:y,anchor:[b.seat.x*z,o.seatDeckY(b.index)+Eu,b.seat.y*z],floorIndex:a[b.index]})}let p=new Map;for(let h=0;h<r.length;h++){let b=r[h],y=b.label?b.label.lastIndexOf("-"):-1,v=p.get(b.rowId);v||(v={n:0,x:0,y:0,z:0,minX:1/0,maxX:-1/0,minZ:1/0,maxZ:-1/0,label:y>0?b.label.slice(0,y):b.rowId,sectionId:b.sectionId},p.set(b.rowId,v));let S=h*3,M=i.iPosition[S],R=i.iPosition[S+1],x=i.iPosition[S+2];v.n++,v.x+=M,v.y+=R,v.z+=x,v.minX=Math.min(v.minX,M),v.maxX=Math.max(v.maxX,M),v.minZ=Math.min(v.minZ,x),v.maxZ=Math.max(v.maxZ,x)}for(let[h,b]of p)f.push({id:h,label:b.label,sectionId:b.sectionId,seatCount:b.n,center:[b.x/b.n,b.y/b.n,b.z/b.n],radius:Math.max(.8,Math.hypot(b.maxX-b.minX,b.maxZ-b.minZ)*.5)});if(r.length<=Tu)for(let h=0;h<r.length;h++){let b=r[h],y=wo(b.displayLabel||b.label);y&&u.push({id:`seat:${b.id}`,kind:"seat",text:y,anchor:[b.x*z,o.seatDeckY(h)+Iu,b.y*z],floorIndex:a[h]})}}for(let m of n)for(let l of m.objects)if(l.type==="shape"&&l.role&&["entrance","exit","screen","suite","obstruction"].includes(l.role)){let p=rt(l),h=p?Lt(p):null;if(!h||!l.label)continue;u.push({id:`architecture:${l.id}`,kind:"annotation",text:l.label,anchor:[h.x*z,m.baseHeightM+Nt(l).heightM+ji,h.y*z],color:l.fill,floorIndex:m.index})}else if(l.type==="text"){if(!l.text)continue;u.push({id:`text:${l.id}`,kind:"annotation",text:l.text,anchor:[l.position.x*z,m.baseHeightM+ji,l.position.y*z],color:l.color,rotation:l.rotation,floorIndex:m.index})}else if(l.type==="booth"){let p=zt(l);if(!p)continue;let h=Lt(p);if(!h)continue;u.push({id:`booth:${l.id}`,kind:"booth",text:l.displayLabel||l.label||l.id,anchor:[h.x*z,m.baseHeightM+go+Au,h.y*z],floorIndex:m.index})}return{labels:u,sections:d,rows:f}}function Wi(e,t){if(t.length>1)for(let n of t)e.push({id:`floor:${n.id}`,kind:"floor",text:n.label,anchor:[n.center[0],n.box.max[1]+1.2,n.center[2]],floorIndex:n.index})}function wo(e){let t=e.lastIndexOf("-");return t>=0&&t<e.length-1?e.slice(t+1):e}function _u(e,t,n){let r=e?e.lastIndexOf("-"):-1,o=r>0?e.slice(0,r):t;return o&&Di(o,n)}function Ki(e){let{doc:t,units:n,seats:r,surfaces:o,solids:i,hintedSeatFloor:a,seatFloor:s}=e,c=[];{let u=n.map(()=>({minX:1/0,minY:1/0,minZ:1/0,maxX:-1/0,maxY:-1/0,maxZ:-1/0}));for(let m=0;m<i.floor.length;m+=1){let l=Math.max(0,Math.min(n.length-1,Math.round(i.floor[m]))),p=m*3,h=u[l];h.minX=Math.min(h.minX,i.position[p]),h.minY=Math.min(h.minY,i.position[p+1]),h.minZ=Math.min(h.minZ,i.position[p+2]),h.maxX=Math.max(h.maxX,i.position[p]),h.maxY=Math.max(h.maxY,i.position[p+1]),h.maxZ=Math.max(h.maxZ,i.position[p+2])}let d=new Map;for(let m=0;m<n.length;m++)for(let l of n[m].objects)l.type==="section"&&d.set(l.id,m);let f=n.map(()=>({n:0,minX:1/0,minY:1/0,minDeck:1/0,maxX:-1/0,maxY:-1/0,maxDeck:-1/0,sumX:0,sumDeck:0,sumZ:0}));for(let m=0;m<r.length;m++){let l=o.seatOwner[m],p=(l!==null?d.get(l):void 0)??a[m];if(p===void 0)continue;let h=f[p],b=r[m];h.n++,b.x<h.minX&&(h.minX=b.x),b.y<h.minY&&(h.minY=b.y),b.x>h.maxX&&(h.maxX=b.x),b.y>h.maxY&&(h.maxY=b.y);let y=o.seatDeckY(m);h.sumX+=b.x*z,h.sumDeck+=y,h.sumZ+=b.y*z,h.minDeck=Math.min(h.minDeck,y),h.maxDeck=Math.max(h.maxDeck,y+1.6),s[m]=p}for(let m=0;m<n.length;m++){let l=f[m],p=t.floors?.[m],h=u[m],b=Math.min(l.n?l.minX*z:n[m].focal.x*z-1,Number.isFinite(h.minX)?h.minX:1/0),y=Math.max(l.n?l.maxX*z:n[m].focal.x*z+1,Number.isFinite(h.maxX)?h.maxX:-1/0),v=Math.min(l.n?l.minY*z:n[m].focal.y*z-1,Number.isFinite(h.minZ)?h.minZ:1/0),S=Math.max(l.n?l.maxY*z:n[m].focal.y*z+1,Number.isFinite(h.maxZ)?h.maxZ:-1/0),M=Math.min(l.n?Math.min(n[m].baseHeightM,l.minDeck):n[m].baseHeightM,Number.isFinite(h.minY)?h.minY:1/0),R=Math.max(l.n?Math.max(l.maxDeck,M+.5):M+.5,Number.isFinite(h.maxY)?h.maxY:-1/0),x=[l.n?l.sumX/l.n:(b+y)/2,l.n?l.sumDeck/l.n:(M+R)/2,l.n?l.sumZ/l.n:(v+S)/2],g=Math.max(1,.5*Math.hypot(y-b,R-M,S-v));c.push({index:m,id:p?.id??`floor-${m}`,label:p?.name??(n.length>1?`Floor ${m+1}`:"Venue"),seatCount:l.n,center:x,radius:g,box:{min:[b,M,v],max:[y,R,S]},focalWorld:[n[m].focal.x*z,n[m].baseHeightM+1.5,n[m].focal.y*z]})}}return c}function Po(e,t){let n=1/0,r=1/0,o=-1/0,i=-1/0,a=(s,c)=>{s<n&&(n=s),c<r&&(r=c),s>o&&(o=s),c>i&&(i=c)};for(let s of t)a(s.x,s.y);for(let s of e)for(let c of s.objects)if(c.type==="section")for(let u of c.outline)a(u.x,u.y);else if(c.type==="shape"&&c.points)for(let u of c.points)a(u.x,u.y);else if(c.type==="gaArea")for(let u of c.points)a(u.x,u.y);else if(c.type==="booth"){let u=zt(c);if(u)for(let d of u)a(d.x,d.y)}else if(c.type==="table"){let u=xo(c);if(u)for(let d of u)a(d.x,d.y)}else if(c.type==="decorImage"){let u=vo(c);if(u)for(let d of u)a(d.x,d.y)}return Number.isFinite(n)||(n=-100,r=-100,o=100,i=100),{minX:n,minY:r,maxX:o,maxY:i}}function qi(e,t,n,r,o,i){if(t.length===1){let a=Math.max(60,(o.maxX-o.minX+o.maxY-o.minY)*.06),s=Ot(o.minX-a,o.minY-a,o.maxX-o.minX+a*2,o.maxY-o.minY+a*2);ue(e,s,void 0,()=>0,-.4,i.ground,i.ground,le)}else{let a=t.reduce((l,p)=>p.baseHeightM<l.baseHeightM?p:l);e.setFloor(a.index);let s=n.filter((l,p)=>r[p]===a.index),c=Po([a],s),u=Math.hypot(c.maxX-c.minX,c.maxY-c.minY),d=Math.max(28,Math.min(80,u*.04)),f=Ot(c.minX-d,c.minY-d,c.maxX-c.minX+d*2,c.maxY-c.minY+d*2),m=a.baseHeightM-.03;ue(e,f,void 0,()=>m,m-.22,i.ground,i.ground,le)}}function $i(e,t,n){let{cx:r,cz:o,radius:i}=n,a=1/0,s=1/0,c=1/0,u=-1/0,d=-1/0,f=-1/0,m=(h,b,y)=>{a=Math.min(a,h),u=Math.max(u,h),s=Math.min(s,b),d=Math.max(d,b),c=Math.min(c,y),f=Math.max(f,y)};for(let h=0;h<e.position.length;h+=3)m(e.position[h],e.position[h+1],e.position[h+2]);for(let h=0;h<t.count;h++){let b=h*3,y=t.iPosition[b],v=t.iPosition[b+1],S=t.iPosition[b+2],M=Math.max(.35,t.iMaxRadius[h]??.35);m(y-M,v,S-M),m(y+M,v+1.6,S+M)}Number.isFinite(a)||(a=r-i,u=r+i,s=0,d=i*.16,c=o-i,f=o+i);let l=[(a+u)/2,(s+d)/2,(c+f)/2],p=Math.max(1,.5*Math.hypot(u-a,d-s,f-c));return{center:l,radius:p,minY:s,maxY:d}}function Qi(e,t,n,r,o,i){let a=1/0,s=1/0,c=-1/0,u=-1/0;for(let M=0;M<e.count;M++){let R=M*3,x=e.iPosition[R],g=e.iPosition[R+2];x<a&&(a=x),x>c&&(c=x),g<s&&(s=g),g>u&&(u=g)}for(let M of t)a=Math.min(a,M.cx-M.halfX),c=Math.max(c,M.cx+M.halfX),s=Math.min(s,M.cz-M.halfZ),u=Math.max(u,M.cz+M.halfZ);let d=n.minX*z,f=n.maxX*z,m=n.minY*z,l=n.maxY*z,p=d,h=f,b=m,y=l;if(Number.isFinite(a)){let M=Math.max(2,.06*Math.hypot(c-a,u-s));p=Math.max(d,a-M),h=Math.min(f,c+M),b=Math.max(m,s-M),y=Math.min(l,u+M)}let v=Math.min(0,r),S=Math.max(o,i*.05);return{min:[p,v,b],max:[h,S,y]}}function Zi(e,t,n){let r=()=>({byObjectId:new Map,elements:[]});if(!t||!e)return r();let o=Vr(t);if(!o.ok||o.value.id!==e)return r();let i=new Map;for(let f of n)for(let m of f.objects)m.type==="shape"&&i.set(m.id,{shape:m,unit:f});let a=new Set,s=new Set,c=new Map((t.overlay.productionElements??[]).map(f=>{let m=f.runtimeContentImageUrl;return[f.id,typeof m=="string"&&/^(?:blob:|data:image\/|https:\/\/)/.test(m)?m:void 0]})),u=[];for(let f of o.value.overlay.productionElements??[]){let m=i.get(f.objectId),l=m?rt(m.shape):null,p=f.baseElevationM??0;if(!m||!l||l.length<3||!f.id||a.has(f.id)||s.has(f.objectId)||!Number.isFinite(f.heightM)||f.heightM<.05||f.heightM>50||!Number.isFinite(p)||p<-10||p>100)return r();a.add(f.id),s.add(f.objectId);let h=l.map(C=>C.x*z),b=l.map(C=>C.y*z),y=m.unit.baseHeightM+p,v=Math.min(...h),S=Math.max(...h),M=Math.min(...b),R=Math.max(...b),x,g=c.get(f.id)??f.contentImageUrl;if(f.kind==="screen"&&g)if(S-v>=R-M){let C=Math.abs(M-m.unit.focal.y*z)<=Math.abs(R-m.unit.focal.y*z)?M-.006:R+.006;x=[[v,y,C],[S,y,C],[v,y+f.heightM,C],[S,y+f.heightM,C]]}else{let C=Math.abs(v-m.unit.focal.x*z)<=Math.abs(S-m.unit.focal.x*z)?v-.006:S+.006;x=[[C,y,M],[C,y,R],[C,y+f.heightM,M],[C,y+f.heightM,R]]}u.push({id:f.id,objectId:f.objectId,kind:f.kind,floorIndex:m.unit.index,baseY:y,topY:y+f.heightM,bounds:{min:[v,y,M],max:[S,y+f.heightM,R]},occlusion:f.occlusion,...g?{contentImageUrl:g}:{},...x?{contentPlane:x}:{}})}let d=u.sort((f,m)=>f.id.localeCompare(m.id));return{byObjectId:new Map(d.map(f=>[f.objectId,f])),elements:d}}function ve(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function xe(e){return Array.isArray(e)?e:[]}function Lu(e){let t=[e];for(;t.length;){let n=t.pop();if(Array.isArray(n)){t.push(...n);continue}if(!ve(n))continue;let r=ve(n.extensions)?n.extensions:null;if(r&&Object.prototype.hasOwnProperty.call(r,"KHR_draco_mesh_compression"))return!0;t.push(...Object.values(n))}return!1}function vn(e,t){return!Array.isArray(e)||e.length!==t||!e.every(n=>typeof n=="number"&&Number.isFinite(n))?null:e}function ku(){return[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]}function Fu(e,t){let n=new Array(16).fill(0);for(let r=0;r<4;r++)for(let o=0;o<4;o++)for(let i=0;i<4;i++)n[r*4+o]+=e[i*4+o]*t[r*4+i];return n}function Du(e){let t=vn(e.matrix,16);if(t)return t;if(e.matrix!==void 0)return null;let n=e.translation===void 0?[0,0,0]:vn(e.translation,3),r=e.rotation===void 0?[0,0,0,1]:vn(e.rotation,4),o=e.scale===void 0?[1,1,1]:vn(e.scale,3);if(!n||!r||!o)return null;let[i,a,s,c]=r,u=Math.hypot(i,a,s,c);if(!(u>1e-8))return null;let d=i/u,f=a/u,m=s/u,l=c/u,p=d+d,h=f+f,b=m+m,y=d*p,v=d*h,S=d*b,M=f*h,R=f*b,x=m*b,g=l*p,C=l*h,E=l*b;return[(1-(M+x))*o[0],(v+E)*o[0],(S-C)*o[0],0,(v-E)*o[1],(1-(y+x))*o[1],(R+g)*o[1],0,(S+C)*o[2],(R-g)*o[2],(1-(y+M))*o[2],0,n[0],n[1],n[2],1]}function Ou(e,t,n,r){return[e[0]*t+e[4]*n+e[8]*r+e[12],e[1]*t+e[5]*n+e[9]*r+e[13],e[2]*t+e[6]*n+e[10]*r+e[14]]}function Vu(e){let t=e[0],n=e[4],r=e[8],o=e[1],i=e[5],a=e[9],s=e[2],c=e[6],u=e[10],d=i*u-a*c,f=a*s-o*u,m=o*c-i*s,l=t*d+n*f+r*m;if(Math.abs(l)<1e-12)return null;let p=1/l;return[d*p,f*p,m*p,(r*c-n*u)*p,(t*u-r*s)*p,(n*s-t*c)*p,(n*a-r*i)*p,(r*o-t*a)*p,(t*i-n*o)*p]}function Ji(e,t,n,r){let o=e[0]*t+e[1]*n+e[2]*r,i=e[3]*t+e[4]*n+e[5]*r,a=e[6]*t+e[7]*n+e[8]*r,s=Math.hypot(o,i,a)||1;return o/=s,i/=s,a/=s,[o,i,a]}function Bu(e){if(e.byteLength<20||e.byteLength>8388608)return null;let t=new DataView(e.buffer,e.byteOffset,e.byteLength);if(t.getUint32(0,!0)!==1179937895||t.getUint32(4,!0)!==2||t.getUint32(8,!0)!==e.byteLength)return null;let n=12,r=null,o=null;for(;n+8<=e.byteLength;){let i=t.getUint32(n,!0),a=t.getUint32(n+4,!0);if(n+=8,i%4!==0||n+i>e.byteLength)return null;let s=e.subarray(n,n+i);if(a===1313821514&&!r)try{let c=JSON.parse(new TextDecoder().decode(s).replace(/[\u0000 ]+$/g,""));if(!ve(c))return null;r=c}catch{return null}else if(a===5130562&&!o)o=s;else return null;n+=i}return n===e.byteLength&&r&&o?{json:r,bin:o}:null}function Nu(e){return e===5120||e===5121?1:e===5122||e===5123?2:e===5125||e===5126?4:0}function Gu(e){return e==="SCALAR"?1:e==="VEC2"?2:e==="VEC3"?3:e==="VEC4"?4:0}function zu(e,t,n){return n===5120?e.getInt8(t):n===5121?e.getUint8(t):n===5122?e.getInt16(t,!0):n===5123?e.getUint16(t,!0):n===5125?e.getUint32(t,!0):e.getFloat32(t,!0)}function Uu(e){let t=e instanceof Uint8Array?e:new Uint8Array(e),n=Bu(t);if(!n)return{ok:!1,issue:"invalid_glb"};let{json:r,bin:o}=n;if(!ve(r.asset)||r.asset.version!=="2.0")return{ok:!1,issue:"unsupported_glb"};let i=xe(r.extensionsUsed).filter(M=>typeof M=="string");if(i.includes("KHR_draco_mesh_compression")||Lu(r))return{ok:!1,issue:"draco_not_allowed"};if(i.length||xe(r.extensionsRequired).length)return{ok:!1,issue:"unsupported_glb"};if(xe(r.images).length||xe(r.textures).length)return{ok:!1,issue:"external_resource"};let a=xe(r.buffers);if(a.length!==1||!ve(a[0])||a[0].uri!==void 0||typeof a[0].byteLength!="number"||!Number.isInteger(a[0].byteLength)||a[0].byteLength<0||a[0].byteLength>o.byteLength)return{ok:!1,issue:"external_resource"};let s=xe(r.accessors),c=xe(r.bufferViews),u=xe(r.meshes),d=xe(r.nodes),f=xe(r.scenes),m=typeof r.scene=="number"?r.scene:0;if(!ve(f[m]))return{ok:!1,issue:"unsupported_glb"};let l=new DataView(o.buffer,o.byteOffset,o.byteLength),p=(M,R,x)=>{if(typeof M!="number"||!Number.isInteger(M)||!ve(s[M]))return null;let g=s[M];if(g.type!==R||g.sparse!==void 0||g.normalized===!0||typeof g.count!="number"||!Number.isInteger(g.count)||g.count<1||typeof g.componentType!="number"||!x.includes(g.componentType)||typeof g.bufferView!="number")return null;let C=c[g.bufferView];if(!ve(C)||C.buffer!==0||typeof C.byteLength!="number"||!Number.isInteger(C.byteLength)||C.byteLength<0)return null;let E=Gu(g.type),D=Nu(g.componentType),B=typeof C.byteStride=="number"?C.byteStride:E*D,L=typeof C.byteOffset=="number"?C.byteOffset:0,A=typeof g.byteOffset=="number"?g.byteOffset:0,k=L+A,N=A+(g.count-1)*B+E*D;if(!Number.isInteger(B)||!Number.isInteger(L)||!Number.isInteger(A)||B<E*D||L<0||A<0||L+C.byteLength>o.byteLength||N>C.byteLength)return null;let w=[];for(let T=0;T<g.count;T++){let _=[];for(let P=0;P<E;P++){let O=zu(l,k+T*B+P*D,g.componentType);if(!Number.isFinite(O))return null;_.push(O)}w.push(_)}return w},h=[],b=[],y=0,v=new Set,S=(M,R)=>{if(typeof M!="number"||!Number.isInteger(M)||!ve(d[M])||v.has(M))return!1;v.add(M);let x=d[M],g=Du(x);if(!g)return!1;let C=Fu(R,g),E=Vu(C);if(!E)return!1;if(x.mesh!==void 0){if(typeof x.mesh!="number")return!1;let D=u[x.mesh];if(!ve(D))return!1;for(let B of xe(D.primitives)){if(!ve(B)||B.mode!==void 0&&B.mode!==4||!ve(B.attributes))return!1;let L=p(B.attributes.POSITION,"VEC3",[5126]),A=B.attributes.NORMAL===void 0?null:p(B.attributes.NORMAL,"VEC3",[5126]);if(!L||B.attributes.NORMAL!==void 0&&!A)return!1;let k=L.length;if(B.indices!==void 0){let w=typeof B.indices=="number"?s[B.indices]:null;k=ve(w)?w.count:void 0}if(typeof k!="number"||!Number.isInteger(k)||k%3!==0||(y+=k/3,y>1e5))return!1;let N=B.indices===void 0?L.map((w,T)=>[T]):p(B.indices,"SCALAR",[5121,5123,5125]);if(!N||N.length%3!==0||N.length!==k)return!1;for(let w=0;w<N.length;w+=3){let T=[N[w][0],N[w+1][0],N[w+2][0]];if(T.some(O=>!Number.isInteger(O)||O<0||O>=L.length))return!1;let _=T.map(O=>Ou(C,...L[O])),P=null;if(!A){let O=_[1][0]-_[0][0],I=_[1][1]-_[0][1],F=_[1][2]-_[0][2],H=_[2][0]-_[0][0],j=_[2][1]-_[0][1],G=_[2][2]-_[0][2];P=Ji([1,0,0,0,1,0,0,0,1],I*G-F*j,F*H-O*G,O*j-I*H)}for(let O=0;O<3;O++)h.push(..._[O]),b.push(...A?Ji(E,...A[T[O]]):P)}}}for(let D of xe(x.children))if(!S(D,C))return!1;return v.delete(M),!0};for(let M of xe(f[m].nodes))if(!S(M,ku()))return{ok:!1,issue:y>1e5?"triangle_limit":"unsupported_glb"};return!y||h.length!==y*9||b.length!==h.length?{ok:!1,issue:"unsupported_glb"}:{ok:!0,triangleCount:y,position:new Float32Array(h),normal:new Float32Array(b)}}function ea(e){try{return Uu(e)}catch{return{ok:!1,issue:"invalid_glb"}}}function St(e){let{doc:t}=e,n=Cr(t.theme),r=n.structure,o=di(t,e.eventConfigurationId??t.eventConfigurationId),i=Zi(e.eventConfigurationId,e.eventConfiguration,o),a=e.seats,s=new rn,c=null;if(e.registeredShellGlb){let w=ea(e.registeredShellGlb);if(w.ok){let T=w.position.length/3,_=new Float32Array(w.position.length),P=n.materials.shell??r.tierWall;for(let O=0;O<T;O++){let I=w.normal[O*3+1],F=I<-.25?.4:.62+.38*Math.max(0,I);_[O*3]=P[0]*F,_[O*3+1]=P[1]*F,_[O*3+2]=P[2]*F}c={position:w.position,normal:w.normal,color:_,floor:new Float32Array(T).fill(-2),material:new Float32Array(T),count:T}}}let u=new Map;for(let w of o)for(let T of w.objects)u.set(T.id,w.index),T.type==="section"&&u.set(T.logicalSectionId??T.id,w.index);let d=a.map(w=>u.get(w.sectionId??"")??u.get(w.rowId??"")??0),f=Po(o,a);qi(s,o,a,d,f,r);let m=yi(t,a),l=new Map,p=new Map;for(let w of t.categories??[])l.set(w.key,w.color),w.seatGlyph&&p.set(w.key,w.seatGlyph);let h=[],b=bi(o,a,d),y=new Float32Array(a.length),v=[];for(let w=0;w<o.length;w++){let T=o[w];s.setFloor(w);let _=new yn,P=[],O=T.objects.filter(I=>I.type==="section"&&!!I.outline&&I.outline.length>=3);for(let I of T.objects)if(I.type==="section"){let F=s.vertexCount;Li(s,I,T,gi(I,m),b.bySection.get(I.id),_,O,r);let H=s.vertexCount-F;H>0&&v.push({sectionId:I.id,start:F,count:H})}else if(I.type==="shape"){let F=i.byObjectId.get(I.id);s.setMaterial((F?.kind??I.role)==="screen"?1:0),Ci(s,I,T.baseHeightM,vi(I,P),r,T.focal,h,F),s.setMaterial(0)}else I.type==="gaArea"?Ri(s,I,T.baseHeightM,ne(l.get(I.categoryKey)),r):I.type==="booth"?wi(s,I,T.baseHeightM,ne(l.get(I.categoryKey)),r):I.type==="table"?Pi(s,I,T.baseHeightM,ne(I.fill??t.theme?.decorFill??"#232c40"),r):I.type==="decorImage"&&Ai(s,I,T.baseHeightM,r);ki(s,T,a,b,r,n.materials.shell,!c)}let S=o.length>1?{x:o.reduce((w,T)=>w+T.focal.x,0)/o.length,y:o.reduce((w,T)=>w+T.focal.y,0)/o.length}:t.focalPoint??{x:(f.minX+f.maxX)/2,y:(f.minY+f.maxY)/2},M=pr(c?[s.build(),c]:[s.build()]),R=wr(a,e.initialState,b,y,l,p),x=Yi({doc:t,units:o,seats:a,surfaces:b,focal:S}),{labels:g,sections:C,rows:E}=Xi({doc:t,units:o,seats:a,surfaces:b,seatData:R,hintedSeatFloor:d,zones:x,focal:S}),D=Ki({doc:t,units:o,seats:a,surfaces:b,solids:M,hintedSeatFloor:d,seatFloor:y});Wi(g,D),R.iYaw=Sr(R.iPosition,a.length,w=>a[w].rowId,w=>{let T=o[y[w]]?.focal??S;return[T.x*z,T.y*z]});let B=(f.minX+f.maxX)/2*z,L=(f.minY+f.maxY)/2*z,A=.5*Math.hypot((f.maxX-f.minX)*z,(f.maxY-f.minY)*z)||10,k=$i(M,R,{cx:B,cz:L,radius:A}),N=Qi(R,h,f,k.minY,k.maxY,A);return{solids:M,sectionSolidRanges:v,seats:R,bounds:{center:[(N.min[0]+N.max[0])/2,(N.min[1]+N.max[1])/2,(N.min[2]+N.max[2])/2],radius:A,groundY:0,box:N},renderBounds:{center:k.center,radius:k.radius},stateColorLUT:Ar(n,pe),theme:n,seatCount:a.length,focalWorld:[S.x*z,1.5,S.y*z],zones:x,stages:h,productionElements:i.elements,sections:C,rows:E,labels:g,floors:D}}var Hu=88,ju=20,ta={floor:{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}},Yu=640,Xu=.8,Wu=11,Ku="3px 7px",qu="2px 5px",na="rgba(10,14,22,.62)",$u="#f4f7fb",oa=5,ra=2,Qu=6,Ut=new Set(["row","seat"]),ia={floor:5,zone:4,section:3,ga:3,booth:2,annotation:1},Sn={row:{x:66,y:20},seat:{x:52,y:22}},Ao=ne,Co=e=>jo(e);function Ro(e,t){let n=Co(e),r=Co(t);return(Math.max(n,r)+.05)/(Math.min(n,r)+.05)}function Eo(e,t){let n=/rgba\((\d+),(\d+),(\d+),([\d.]+)\)/.exec(e.replace(/\s/g,""));if(!n)return t;let r=Math.max(0,Math.min(1,Number(n[4])));return[1,2,3].map(o=>Number(n[o])/255*r+t[o-1]*(1-r))}function Zu(e,t=[.04,.06,.1],n=!0){let r=Co(t)<.42,o=r?"#f4f7fb":"#0b1220",i=r?"rgba(8,12,22,.78)":"rgba(255,255,255,.84)",a=n?Eo(i,t):t,s=Ao(e),c=n?7:4.5,u=s&&Ro(s,a)>=c?e:o;return r?{ink:u,backing:i,border:"rgba(210,222,245,.24)"}:{ink:u,backing:i,border:"rgba(11,18,32,.22)"}}function Ju(e,t=[.04,.06,.1]){let n=Eo(na,t),r=Ao(e);return{ink:r&&Ro(r,n)>=4.5?e:$u,backing:na}}var em='ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif',Mn=class{constructor(t,n={}){this.nodes=new Map;this.labels=[];this.forcedDense=!1;this.selectedSeatLabelIds=new Set;this.narrowStage=!1;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||em,t.appendChild(this.root)}setVisible(t){this.root.style.visibility=t?"":"hidden"}setLabels(t){this.labels=t;for(let[n,r]of this.nodes)t.some(o=>o.id===n)||(r.remove(),this.nodes.delete(n))}setForcedDense(t){this.forcedDense=t}setSelectedSeatIds(t){this.selectedSeatLabelIds=new Set(Array.from(t,n=>`seat:${n}`))}sizeFor(t){let n=ta[t].size;return!this.narrowStage||Ut.has(t)?n:Math.max(Wu,n*Xu)}qualityEvidence(){let t=this.root.getBoundingClientRect(),n=this.root.style.visibility!=="hidden";return this.labels.map(r=>{let o=this.nodes.get(r.id),i=o?.getBoundingClientRect(),a=!!(n&&o&&o.style.display!=="none"&&i&&i.width>0&&i.height>0);return{id:r.id,kind:r.kind,text:r.text,visible:a,renderedFontPx:o&&Number.parseFloat(o.style.fontSize)||0,contrast:o?Number(o.dataset.qualityContrast??0):0,...a&&i?{screenBox:{x:i.x-t.x,y:i.y-t.y,width:i.width,height:i.height}}:{}}})}update(t,n,r,o,i,a){if(!this.labels.length)return;this.narrowStage=n>0&&n<Yu;let s=Bi(o,i,{hasZoneLabels:this.labels.some(S=>S.kind==="zone")});this.forcedDense&&(s.add("row"),s.add("seat"));let c=[];for(let S of this.labels){if(!s.has(S.kind))continue;let M=Ye(t,S.anchor,n,r);if(!M.visible)continue;let R=Ut.has(S.kind),x=this.sizeFor(S.kind),g=zi(S.text,x,!R)+(R?oa*2:0),C=Ni(M,g/2,x/2+(R?ra:4),n,r),E=a?Math.hypot(S.anchor[0]-a[0],S.anchor[1]-a[1],S.anchor[2]-a[2]):1;c.push({label:S,screen:C,focus:Hi(C,E,n,r),halfWidth:g/2,...this.selectedSeatLabelIds.has(S.id)?{priority:1}:{}})}let u=Vi(c.filter(S=>S.label.kind==="floor"),n),d=[...c.filter(S=>!Ut.has(S.label.kind)&&S.label.kind!=="floor"),...u],f=Gi(d,Hu,ju),m=Ui(n),l=Mo(c.filter(S=>S.label.kind==="row"),Sn.row.x,Sn.row.y,m.row,f),p=Mo(c.filter(S=>S.label.kind==="seat"),Sn.seat.x,Sn.seat.y,m.seat,[...f,...l]),h=[...f,...l,...p],b=new Set(h.map(S=>S.label.id));for(let{label:S,screen:M}of h){let x=this.nodeFor(S).style;x.display="",x.transform=`translate(-50%, -50%) translate(${M.x.toFixed(1)}px, ${M.y.toFixed(1)}px)`}let y=h.filter(({label:S})=>!Ut.has(S.kind)).sort((S,M)=>ia[M.label.kind]-ia[S.label.kind]||S.screen.depth-M.screen.depth||S.focus-M.focus),v=[];for(let{label:S}of y){let M=this.nodes.get(S.id);if(!M||M.style.display==="none")continue;let R=M.getBoundingClientRect();v.some(g=>R.left<g.right+3&&R.right+3>g.left&&R.top<g.bottom+3&&R.bottom+3>g.top)?M.style.display="none":v.push(R)}for(let[S,M]of this.nodes)b.has(S)||(M.style.display="none")}nodeFor(t){let n=this.nodes.get(t.id);if(!n){n=document.createElement("div");let p=n.style;p.position="absolute",p.left="0",p.top="0",p.whiteSpace="nowrap",p.textShadow="0 1px 3px rgba(0,0,0,0.85), 0 0 8px rgba(0,0,0,0.55)",p.display="none",this.root.appendChild(n),this.nodes.set(t.id,n)}n.textContent=t.text,n.setAttribute("data-label-kind",t.kind);let r=this.selectedSeatLabelIds.has(t.id);n.toggleAttribute("data-selected-seat",r);let o=ta[t.kind],i=n.style;i.fontSize=`${this.sizeFor(t.kind)}px`,i.fontWeight=r?"800":o.weight,i.opacity=r?"1":String(o.opacity);let a=Ut.has(t.kind),s=!a,c=Zu(t.color??this.opts.ink,this.opts.backgroundRgb,!0),u=a?Ju(t.color??this.opts.ink,this.opts.backgroundRgb):c;i.color=r?"#ecf8ff":u.ink,i.background=r?"rgba(10,28,45,.9)":u.backing,i.border=r?"1px solid rgba(89,199,255,.92)":s?`1px solid ${c.border}`:"",i.borderRadius=r||s?"999px":`${Qu}px`;let d=this.narrowStage?qu:Ku;i.padding=r||s?d:`${ra}px ${oa}px`,i.lineHeight=a?"1.1":"",i.boxShadow=r?"0 0 0 2px rgba(41,176,255,.18), 0 5px 14px rgba(0,0,0,.35)":s?"0 3px 10px rgba(0,0,0,.24)":"0 1px 4px rgba(0,0,0,.28)",i.letterSpacing=t.kind==="zone"||t.kind==="floor"?"0.08em":"0.02em";let f=this.opts.backgroundRgb??[.04,.06,.1],m=Ao(r?"#ecf8ff":u.ink)??[1,1,1],l=Eo(r?"rgba(10,28,45,.9)":u.backing,f);return n.dataset.qualityContrast=Ro(m,l).toFixed(3),(t.kind==="zone"||t.kind==="floor")&&(i.textTransform="uppercase"),n}dispose(){this.root.remove(),this.nodes.clear()}};var sa=1;var tm=new Set(["floor","zone","section","ga","booth","annotation"]);function nm(e){return e.every(t=>Number.isFinite(t))}function om(e,t){return e.x<t.x+t.width&&e.x+e.width>t.x&&e.y<t.y+t.height&&e.y+e.height>t.y}function aa(e){return e.length?Math.round(Math.min(...e)*100)/100:null}function at(e){return Math.round(e*1e4)/1e4}function rm(e){if(e)return{box:{x:at(e.box.x),y:at(e.box.y),width:at(e.box.width),height:at(e.box.height)},horizontalFillRatio:at(e.horizontalFillRatio),verticalFillRatio:at(e.verticalFillRatio),visibleAreaRatio:at(e.visibleAreaRatio),clippedEdges:[...e.clippedEdges]}}function Te(e,t,n){return n.length?{code:e,message:t,count:n.length,samples:n.slice(0,20)}:null}function wn(e){let t=e.labels.filter(s=>s.visible&&s.screenBox),n=t.filter(s=>tm.has(s.kind)),r=e.scene.floorCount>1?e.scene.floorCount:e.scene.zoneCount||e.scene.sectionCount,o=[];for(let s=0;s<n.length;s+=1)for(let c=0;c<s;c+=1)om(n[s].screenBox,n[c].screenBox)&&o.push({primaryId:n[s].id,primaryLabel:n[s].text,secondaryId:n[c].id});let i=[...e.camera.position,e.camera.distance,e.camera.verticalFovDeg],a=[Te("webgl2-unavailable","The venue scene must render through WebGL2",e.context.webgl2?[]:[{primaryId:"renderer",primaryLabel:"WebGL2"}]),Te("context-lost","The WebGL context must be live at capture",e.context.lost?[{primaryId:"renderer",primaryLabel:"context lost"}]:[]),Te("frame-not-stable","The captured 3D frame must be rendered and parked",e.frame.rendered>0&&e.frame.idle?[]:[{primaryId:"renderer",primaryLabel:"unstable frame"}]),Te("viewport-empty","The 3D viewport must have visible dimensions",e.viewport.width>1&&e.viewport.height>1?[]:[{primaryId:"viewport",primaryLabel:`${e.viewport.width}\xD7${e.viewport.height}`}]),Te("camera-invalid","The capture camera must have a finite physical pose",nm(i)&&e.camera.distance>0&&e.camera.verticalFovDeg>0&&e.camera.verticalFovDeg<180?[]:[{primaryId:"camera",primaryLabel:"invalid pose"}]),Te("authored-relief-not-visible","Authored 3D height or rake must produce visible screen-space relief",!e.scene.authoredRelief||e.scene.renderedVerticalSpanM>.05&&e.scene.projectedReliefPx>=2?[]:[{primaryId:"scene",primaryLabel:"authored relief",measured:e.scene.projectedReliefPx,minimum:2}]),Te("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`}]),Te("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}))),Te("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}))),Te("hierarchy-label-collision","Visible 3D hierarchy labels must not overlap",o)].filter(s=>!!s);return{version:1,state:"venue3d",passed:a.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:e.viewport,context:e.context,frame:e.frame,camera:e.camera,scene:e.scene,composition:{visibleLabels:t.map(({id:s,kind:c,text:u})=>({id:s,kind:c,text:u})).sort((s,c)=>s.kind.localeCompare(c.kind)||s.id.localeCompare(c.id)),framing:rm(e.framing)},metrics:{minimumHierarchyFontPx:aa(n.map(s=>s.renderedFontPx)),minimumHierarchyContrast:aa(n.map(s=>s.contrast)),projectedReliefPx:Math.round(e.scene.projectedReliefPx*100)/100},findings:a}}var ce=require("ogl");var Xe=require("ogl");var Pn=`
|
|
20
|
+
}`});async function bl(e,t,n,o={}){let r=o.fadeMs??400,i=t?.initialBearingDeg??0,a=Math.max(-Qe,Math.min(Qe,t?.initialPitchDeg??0)),s=Io,c=!1,u=new AbortController,l=()=>u.abort();o.signal?.addEventListener("abort",l,{once:!0});let m=()=>{},h=[n.camera.position.x,n.camera.position.y,n.camera.position.z];if(!t&&n.cameraOriginWorld&&n.camera.position.set(n.cameraOriginWorld[0],n.cameraOriginWorld[1],n.cameraOriginWorld[2]),!t&&n.focalWorld){let F=n.camera.position,B=n.focalWorld[0]-F.x,z=n.focalWorld[1]-F.y,U=n.focalWorld[2]-F.z,G=Math.hypot(B,U);G>.001&&(i=Math.atan2(B,-U)*180/Math.PI,a=Math.max(-Qe,Math.min(Qe,Math.atan2(z,G)*180/Math.PI)))}let d=null;if(t){let F=n.gl.getParameter(n.gl.MAX_TEXTURE_SIZE),B=So(t,Mo(F)),z;try{let U=t.resolveUrl?await t.resolveUrl(B.initialUrl):B.initialUrl;if(!U)throw new Error("panorama_asset_unavailable");z=await Rn(U,u.signal)}catch{return o.signal?.removeEventListener("abort",l),null}try{d=dl(n.gl,z)}catch{return u.abort(),o.signal?.removeEventListener("abort",l),null}d.mesh.renderOrder=999,d.mesh.setParent(n.scene),B.upgradeUrl&&(m=wo(()=>{(t.resolveUrl?t.resolveUrl(B.upgradeUrl):Promise.resolve(B.upgradeUrl)).then(G=>!G||u.signal.aborted?null:Rn(G,u.signal)).then(G=>{G&&(c||u.signal.aborted||(d?.setImage(G),n.requestRender()))}).catch(()=>{})}))}let f=n.camera.fov;n.camera.perspective({fov:s,aspect:n.camera.aspect});let p=n.camera.quaternion.slice(),b=()=>{let F=n.camera.position;d?.mesh.position.set(F.x,F.y,F.z);let[B,z,U]=fl(i,a);n.camera.lookAt([F.x+B,F.y+z,F.z+U]),n.requestRender()};b();let y=document.createElement("div"),g=document.activeElement instanceof HTMLElement?document.activeElement:null;y.setAttribute("role","dialog"),y.setAttribute("aria-modal","true"),y.setAttribute("aria-label",o.seatLabel?`View from ${o.seatLabel}`:"View from seat"),y.tabIndex=-1,Object.assign(y.style,{position:"absolute",inset:"0",zIndex:"10",cursor:"grab",touchAction:"none"});let x=document.createElement("button");if(x.type="button",x.setAttribute("aria-label","Close"),x.textContent="\u2715",Object.assign(x.style,{position:"absolute",top:"12px",right:"12px",zIndex:"2",width:"44px",height:"44px",borderRadius:"999px",cursor:"pointer",border:"1px solid rgba(255,255,255,0.25)",background:"rgba(8,12,18,0.6)",color:"#e6edf3",fontSize:"15px",lineHeight:"1"}),y.appendChild(x),o.disclosure){let F=document.createElement("div");F.textContent=`${o.disclosurePrefix??"360\xB0 panorama"} \xB7 ${o.disclosure}`,Object.assign(F.style,{position:"absolute",top:"calc(12px + var(--sl-3d-top-inset, 0px))",left:"12px",zIndex:"2",maxWidth:"calc(100% - 88px)",padding:"8px 11px",borderRadius:"999px",overflow:"hidden",color:"#dce6f8",background:"rgba(8,12,18,0.68)",font:"600 11px/1.2 ui-sans-serif, system-ui, sans-serif",textOverflow:"ellipsis",whiteSpace:"nowrap",pointerEvents:"none",backdropFilter:"blur(6px)"}),y.appendChild(F)}let w=document.createElement("div");w.textContent=Gr(o.lookAroundHint),Object.assign(w.style,{position:"absolute",bottom:"12px",left:"0",right:"0",textAlign:"center",color:"rgba(230,237,243,0.7)",font:"12px ui-sans-serif, system-ui, sans-serif",pointerEvents:"none"}),y.appendChild(w),e.appendChild(y),x.focus({preventScroll:!0});let I=!1,v=0,P=0,S=0,M=new Map,C=()=>{let[F,B]=[...M.values()];return F&&B?Math.hypot(F.x-B.x,F.y-B.y):0},T=F=>{let B=Vr(F);B!==s&&(s=B,n.camera.perspective({fov:s,aspect:n.camera.aspect}),b())},N=F=>{F.target!==x&&(M.set(F.pointerId,{x:F.clientX,y:F.clientY}),I=M.size===1,v=F.clientX,P=F.clientY,M.size===2&&(S=C()),y.setPointerCapture?.(F.pointerId),y.style.cursor="grabbing")},D=F=>{if(M.has(F.pointerId)){if(M.set(F.pointerId,{x:F.clientX,y:F.clientY}),M.size>=2){let B=C();S>0&&B>0&&T(s*(S/B)),S=B,I=!1;return}I&&(i+=(F.clientX-v)*pl,a=Math.max(-Qe,Math.min(Qe,a+(F.clientY-P)*pl)),v=F.clientX,P=F.clientY,b())}},R=F=>{M.delete(F.pointerId),S=M.size===2?C():0;let B=M.values().next().value;I=M.size===1,B?(v=B.x,P=B.y):y.style.cursor="grab";try{y.releasePointerCapture?.(F.pointerId)}catch{}},A=F=>{F.preventDefault(),T(s+F.deltaY*.04)};y.addEventListener("pointerdown",N),y.addEventListener("pointermove",D),y.addEventListener("pointerup",R),y.addEventListener("pointercancel",R),y.addEventListener("wheel",A,{passive:!1});let L=F=>{if(!c){if(F.key==="Tab"){F.preventDefault(),x.focus({preventScroll:!0});return}if(F.key==="Escape"){F.stopPropagation(),V.close();return}if(F.key==="ArrowLeft"||F.key==="ArrowRight")i+=F.key==="ArrowLeft"?-4:4;else if(F.key==="ArrowUp"||F.key==="ArrowDown")a=Math.max(-Qe,Math.min(Qe,a+(F.key==="ArrowUp"?4:-4)));else if(F.key==="+"||F.key==="="){T(s-5),F.preventDefault();return}else if(F.key==="-"){T(s+5),F.preventDefault();return}else return;F.preventDefault(),b()}};window.addEventListener("keydown",L);let O=0,_=(F,B)=>{if(!d){B?.();return}let z=F===1?0:1,U=performance.now(),G=()=>{if(c)return;let H=r<=0?1:Math.min(1,(performance.now()-U)/r);d?.setOpacity(z+(F-z)*H),n.requestRender(),H<1?O=requestAnimationFrame(G):B?.()};O=requestAnimationFrame(G)};_(1);let k=()=>{c||(c=!0,m(),u.abort(),o.signal?.removeEventListener("abort",l),cancelAnimationFrame(O),y.removeEventListener("pointerdown",N),y.removeEventListener("pointermove",D),y.removeEventListener("pointerup",R),y.removeEventListener("pointercancel",R),y.removeEventListener("wheel",A),window.removeEventListener("keydown",L),y.remove(),g?.isConnected&&g.focus({preventScroll:!0}),d?.dispose(),n.camera.position.set(h[0],h[1],h[2]),n.camera.perspective({fov:f,aspect:n.camera.aspect}),n.camera.quaternion.set(p[0],p[1],p[2],p[3]),n.requestRender())},V={close(){if(c)return;let F=()=>{k(),o.onClose?.()};cancelAnimationFrame(O),_(0,F)},dispose:k};return x.addEventListener("click",()=>V.close()),V}var pl,yl=on(()=>{"use strict";hl();Co();Co();Nr();pl=.15});var gl={};Kr(gl,{createOpenPanorama:()=>ub});function ub(e){let{container:t,model:n,opts:o,analytics:r,orbit:i,loop:a,seatsById:s,ensureSeatView:c,resolvedSeatViewPose:u,gpu:l,gl:m,isContextLost:h,isDisposed:d,flightGen:f,setPanorama:p,getLoadAbort:b,setLoadAbort:y,setPanoramaSphereVisible:g,setFrozen:x,raisePanoramaLayer:w,restorePanoramaLayer:I,getOverviewChip:v,labelOverlay:P,reducedMotion:S,removeArriveChip:M,showArriveChip:C}=e;return async(T,N,D)=>{b()?.abort();let R=new AbortController;y(R);let A=n.seats.idToIndex.get(T);if(A===void 0){i.syncFromCamera();return}let L=s.get(T)?.label??T,O=u(T,A),_=c(T);if(!_){R.abort(),b()===R&&y(null),i.syncFromCamera();return}x(!0),a.stop();let k;try{k=await _}catch{if(b()===R&&y(null),r.panoramaFailed(T,"source"),!d()&&D===f()){x(!1),i.resumeAfterFlight(O.focal),a.requestRender();let K=C(T,D,!0);requestAnimationFrame(()=>K?.querySelector("[data-panorama-trigger]")?.focus())}return}if(d()||D!==f()){R.abort(),b()===R&&y(null);return}M();let V=v(),F=()=>{R.abort(),b()===R&&y(null),p(null),g(!1),I(),V.style.display="",P.setVisible(!o.arriveAtSeatEye),x(!1),r.panoramaClosed(),i.resumeAfterFlight(O.focal),a.requestRender();let K=C(T,f());requestAnimationFrame(()=>K?.querySelector("[data-panorama-trigger]")?.focus())},B=k.generated===!0,z=ul(k);w(),g(!B),V.style.display="none";let U=S()?0:N,G=l(),H=G&&!h()?await bl(t,B?null:k,{gl:m,scene:G.main,camera:i.camera,requestRender:()=>a.requestRender(),cameraOriginWorld:B?O.eye:void 0,focalWorld:O.focal},{fadeMs:U,seatLabel:L,disclosure:z,disclosurePrefix:B?"Live seat-eye view":"360\xB0 panorama",lookAroundHint:o.lookAroundHint,onClose:F,signal:R.signal}):null;if(d()||D!==f()){R.abort(),g(!1),b()===R&&y(null),H?.dispose(),V.style.display="",I();return}if(H)i.syncFromCamera(),P.setVisible(!1),x(!1),a.requestRender(),p(H);else if(B){I(),V.style.display="",x(!1),i.resumeAfterFlight(O.focal),a.requestRender(),p(null),g(!1),r.panoramaFailed(T,"mount");let K=C(T,f(),!0);requestAnimationFrame(()=>K?.querySelector("[data-panorama-trigger]")?.focus()),b()===R&&y(null);return}else g(!1),r.panoramaFallback(T),p(ml(t,k,{fadeMs:U,seatLabel:L,disclosure:z,onClose:F,signal:R.signal,lookAroundHint:o.lookAroundHint}));r.panoramaOpened()}}var xl=on(()=>{"use strict";Co();yl()});var vb={};Kr(vb,{VENUE3D_QUALITY_REPORT_VERSION:()=>dc,autoVenue3d:()=>lo,buildSceneModel:()=>Kt,estimateVenue3D:()=>An,inspectVenue3DQualityEvidence:()=>ho,mountVenue3D:()=>xb,prepareVenue3D:()=>Fl,prepareVenue3DFromChart:()=>Dl});module.exports=$l(vb);function $r(e,t,n){let o=Math.floor(t.length/3),r=n.center[0],i=n.center[2];if(o>0){let c=Math.max(1,Math.floor(o/4e3)),u=0,l=0,m=0;for(let h=0;h<o;h+=c)u+=t[h*3],l+=t[h*3+2],m++;r=u/m,i=l/m}let a=e[0]-r,s=e[2]-i;return Math.hypot(a,s)>n.radius*.12?Math.atan2(a,s):void 0}var ye={pedestal:0,pad:1,back:2,arm:3,footrest:4,leg:5,body:10,head:11},Zl=.44,Ql=.15,Zr=.3,Jl=.24;function Qr(e){return e===void 0||!Number.isFinite(e)||e<=0?Jl:Math.min(Zr,Math.max(Ql,e*Zl))}var an=.21,eu=.05,Oo=.45,ut=Oo+eu,sn=.92,rn=.66,Bo=1.205,Jr=-.23,ei=.38,tu=[{part:ye.pedestal,min:[-.3,0,-.3],max:[.3,.36,.3]},{part:ye.pad,min:[-1,.36,-.95],max:[1,Oo,1]},{part:ye.back,min:[-1,ut,-1],max:[1,sn,-.72]},{part:ye.arm,min:[-1,.44,-.82],max:[-.78,.65,.78]},{part:ye.arm,min:[.78,.44,-.82],max:[1,.65,.78]},{part:ye.footrest,min:[-.9,.18,.78],max:[.9,.31,1.34]},{part:ye.leg,min:[-.82,0,-.7],max:[-.62,.37,-.48]},{part:ye.leg,min:[.62,0,-.7],max:[.82,.37,-.48]},{part:ye.leg,min:[-.82,0,.48],max:[-.62,.37,.7]},{part:ye.leg,min:[.62,0,.48],max:[.82,.37,.7]}],nu=[{part:ye.body,min:[-.52,.39,-.08],max:[-.08,.55,.82]},{part:ye.body,min:[.08,.39,-.08],max:[.52,.55,.82]},{part:ye.body,min:[-.47,.05,.58],max:[-.13,.43,.82]},{part:ye.body,min:[.13,.05,.58],max:[.47,.43,.82]},{part:ye.head,min:[-.16,1.04,-.33],max:[.16,1.1,-.13]}],ou=[{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]]}];function ti(){let e=[],t=[],n=[],o=[],r=(L,O,_)=>{let k=n.length,[V,F,B]=L,z=[F[0]-V[0],F[1]-V[1],F[2]-V[2]],U=[B[0]-V[0],B[1]-V[1],B[2]-V[2]],G=z[1]*U[2]-z[2]*U[1],H=z[2]*U[0]-z[0]*U[2],K=z[0]*U[1]-z[1]*U[0],Q=Math.hypot(G,H,K);Q>1e-9?(G/=Q,H/=Q,K/=Q):[G,H,K]=O,G*O[0]+H*O[1]+K*O[2]<0&&(G=-G,H=-H,K=-K);for(let Y of L)e.push(...Y),t.push(G,H,K),n.push(_);o.push(k,k+1,k+2,k,k+2,k+3)},i=L=>{for(let O of ou){let _=O.c.map(k=>k.map((V,F)=>V?L.max[F]:L.min[F]));r(_,O.n,L.part)}},a=(L,O)=>{let[_,k,V]=O?[0,1,2]:[0,2,1],F=L.min[_],B=L.max[_],z=L.min[k],U=L.max[k],G=(B-F)*.1,H=(U-z)*.1,K=O?[[F+G,z],[B-G,z],[B,z+H],[B*.94,U-(U-z)*.23],[B*rn,U],[F*rn,U],[F*.94,U-(U-z)*.23],[F,z+H]]:[[F+G,z],[B-G,z],[B,z+H],[B,U-H],[B-G,U],[F+G,U],[F,U-H],[F,z+H]],Q=(W,Z,ee)=>{let q=[0,0,0];return q[_]=W,q[k]=Z,q[V]=ee,q},Y=[L.min[V],L.max[V]].map(W=>K.map(([Z,ee])=>Q(Z,ee,W)));for(let W=0;W<K.length;W++){let Z=(W+1)%K.length,ee=[0,0,0];ee[_]=(K[W][0]+K[Z][0])/2-(F+B)/2,ee[k]=(K[W][1]+K[Z][1])/2-(z+U)/2,r([Y[0][W],Y[0][Z],Y[1][Z],Y[1][W]],ee,L.part)}for(let W=0;W<2;W++){let Z=[0,0,0];Z[V]=W?1:-1;let ee=Y[W];for(let q=1;q<ee.length-1;q++){let oe=n.length;for(let te of[ee[0],ee[q],ee[q+1]])e.push(...te),t.push(...Z),n.push(L.part);o.push(oe,oe+1,oe+2)}}};for(let L of tu)L.part===ye.pad||L.part===ye.back?a(L,L.part===ye.back):i(L);for(let L of nu)i(L);let s=Oo,c=1.08,u=.47,l=.69,m=-.55,h=.08,d=-.48,f=.01,p=[-u,s,m],b=[u,s,m],y=[-u,s,h],g=[u,s,h],x=[-l,c,d],w=[l,c,d],I=[-l,c,f],v=[l,c,f];r([b,w,v,g],[1,0,0],ye.body),r([y,I,x,p],[-1,0,0],ye.body),r([I,v,w,x],[0,1,0],ye.body),r([p,b,g,y],[0,-1,0],ye.body),r([g,v,I,y],[0,0,1],ye.body),r([p,x,w,b],[0,0,-1],ye.body);let P=10,S=8,M=[0,Bo,Jr],C=[.42,.115,ei],T=n.length;for(let L=0;L<=S;L++){let O=Math.PI*L/S,_=Math.cos(O),k=Math.sin(O);for(let V=0;V<=P;V++){let F=Math.PI*2*V/P,B=k*Math.cos(F),z=k*Math.sin(F);e.push(M[0]+C[0]*B,M[1]+C[1]*_,M[2]+C[2]*z);let U=B/C[0],G=_/C[1],H=z/C[2],K=Math.hypot(U,G,H)||1;U/=K,G/=K,H/=K,t.push(U,G,H),n.push(ye.head)}}for(let L=0;L<S;L++)for(let O=0;O<P;O++){let _=T+L*(P+1)+O,k=_+P+1;o.push(_,k,_+1,_+1,k,k+1)}let N=new Float32Array(e),D=new Float32Array(t),R=new Float32Array(n),A=new Uint16Array(o);return{position:N,normal:D,part:R,index:A,vertexCount:n.length,indexCount:o.length}}function ni(e,t,n,o){let r=new Float32Array(t),i=u=>e[u*3],a=u=>e[u*3+2],s=0,c=(u,l)=>{let m=l-u;for(let h=u;h<l;h++){let[d,f]=o(h),p=d-i(h),b=f-a(h);if(m>=2){let y=Math.max(u,h-1),g=Math.min(l-1,h+1),x=i(g)-i(y),w=a(g)-a(y),I=Math.hypot(x,w);if(I>1e-6){let v=-w/I,P=x/I;v*p+P*b<0&&(v=-v,P=-P),p=v,b=P}}r[h]=p===0&&b===0?0:Math.atan2(p,b)}};for(let u=1;u<=t;u++)(u===t||n(u)!==n(s))&&(c(s,u),s=u);return r}var No=78,oi=18;function ri(){let e=[],t=[],n=[],o=[],r=[],i=[{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,ut,-1],max:[1,sn,-.72]}])for(let c of i){let u=e.length/3,l=c.n[1]+(s.part===2?Math.abs(c.n[0])*(1-rn)/(sn-ut):0),m=Math.hypot(c.n[0],l,c.n[2]),h=[c.n[0]/m,l/m,c.n[2]/m];for(let[d,f]of c.c.entries()){let p=f.map((b,y)=>s.min[y]+b*(s.max[y]-s.min[y]));s.part===2&&(p[0]*=1-f[1]*(1-rn)),e.push(...p),t.push(...h),n.push(s.part),o.push(...[[-1,-1],[1,-1],[1,1],[-1,1]][d])}r.push(u,u+1,u+2,u,u+2,u+3)}let a=e.length/3;for(let[s,c]of[[-1,-1],[1,-1],[1,1],[-1,1]])e.push(s,c,0),t.push(0,1,0),n.push(0),o.push(s,c);return r.push(a,a+1,a+2,a,a+2,a+3),r.push(...r.slice(12,18),...r.slice(60,66),...r.slice(72,78)),{position:new Float32Array(e),normal:new Float32Array(t),surface:new Float32Array(n),uv:new Float32Array(o),index:new Uint16Array(r)}}var ui=require("ogl");var ru=/^#?([\da-f]{3}|[\da-f]{6})$/i;function ii(e){let t=e.replace("#","");return{r:parseInt(t.slice(0,2),16),g:parseInt(t.slice(2,4),16),b:parseInt(t.slice(4,6),16)}}function iu(e){let t=ru.exec((e??"").trim());if(!t)return null;let n=t[1].length===3?t[1].split("").map(r=>r+r).join(""):t[1],o=parseInt(n,16);return[o>>16&255,o>>8&255,o&255]}function me(e){let t=iu(e);return t?[t[0]/255,t[1]/255,t[2]/255]:null}function Vo(e){let t=e/255;return t<=.04045?t/12.92:((t+.055)/1.055)**2.4}function au(e){return .2126*Vo(e[0])+.7152*Vo(e[1])+.0722*Vo(e[2])}function ai(e){return au([e[0]*255,e[1]*255,e[2]*255])}function su(e){return .2126*e[0]+.7152*e[1]+.0722*e[2]}function de(e,t,n){return[e[0]+(t[0]-e[0])*n,e[1]+(t[1]-e[1])*n,e[2]+(t[2]-e[2])*n]}function Xe(e,t){let n=su(e);return de(e,[n,n,n],t)}function si({r:e,g:t,b:n}){let o=e/255,r=t/255,i=n/255,a=Math.max(o,r,i),s=Math.min(o,r,i),c=(a+s)/2;if(a===s)return{h:0,s:0,l:c};let u=a-s,l=c>.5?u/(2-a-s):u/(a+s),m;return a===o?m=((r-i)/u+(r<i?6:0))/6:a===r?m=((i-o)/u+2)/6:m=((o-r)/u+4)/6,{h:m,s:l,l:c}}var Ae=["available","held","sold","selected","dimmed"];function cn(e){let t=Ae.indexOf(e);return t<0?0:t}var ci={available:[.24,.82,.52],held:[.95,.66,.22],sold:[.34,.39,.45],selected:[.24,.74,1],dimmed:[.28,.32,.37]};function li(e){let t=.2126*e[0]+.7152*e[1]+.0722*e[2],n=.78,o=.86;return[(t+(e[0]-t)*n)*o,(t+(e[1]-t)*n)*o,(t+(e[2]-t)*n)*o]}var Go={ground:[.07,.085,.11],tierTop:[.24,.28,.34],tierWall:[.17,.2,.25],stageTop:[.94,.7,.38],stageWall:[.48,.33,.18],decorTop:[.22,.25,.29],decorWall:[.15,.17,.2],gaTop:[.24,.28,.33],gaWall:[.16,.19,.23],boothTop:[.3,.33,.38],boothWall:[.2,.23,.27],tableTop:[.38,.34,.29],tableWall:[.24,.21,.18]},It={top:[.05,.06,.08],bottom:[.1,.12,.15]};function ie(e,t){return[Math.min(1,e[0]*t),Math.min(1,e[1]*t),Math.min(1,e[2]*t)]}function cu(){let e=typeof window<"u"&&window.devicePixelRatio||1,t=navigator.deviceMemory,n=typeof t=="number"&&t<=4?1.5:2;return Math.min(e,n)}var Fn=class{constructor(t,n){this.clearRgb=[0,0,0];this.container=t,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 ui.Renderer({canvas:this.canvas,dpr:cu(),alpha:!1,antialias:!1,depth:!0,stencil:!1,powerPreference:"high-performance",webgl:2}),this.gl=this.renderer.gl,this.clearRgb=[It.top[0],It.top[1],It.top[2]],this.gl.clearColor(this.clearRgb[0],this.clearRgb[1],this.clearRgb[2],1),t.appendChild(this.canvas),this.lostHandler=o=>{o.preventDefault(),n.onContextLost()},this.restoredHandler=()=>n.onContextRestored(),this.canvas.addEventListener("webglcontextlost",this.lostHandler,!1),this.canvas.addEventListener("webglcontextrestored",this.restoredHandler,!1),this.resize()}setClearColor(t){this.clearRgb=[t[0],t[1],t[2]],this.gl.clearColor(t[0],t[1],t[2],1)}get clearColor(){return this.clearRgb}resize(){let t=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(t,n),{width:t,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 t=this.gl.getExtension("WEBGL_lose_context");t&&t.loseContext(),this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas)}simulateContextLossCycle(){let t=this.gl.getExtension("WEBGL_lose_context");t&&(t.loseContext(),setTimeout(()=>{t.restoreContext&&t.restoreContext()},300))}};var Ft=require("ogl"),Ee=Math.PI/180,Ho=15*Ee,zo=80*Ee,Lt=.12,mi=35,fi=1.25,di=.006,lu=4,Dt=.82,ln=1/Dt,uu=.12,mu=2;function fu(e,t){return{azimuth:e*di,polar:-t*di}}function du(e,t,n){let o=Math.max(mu,Math.max(1,t)*uu),r=n*lu;return{minDist:e?Math.min(e.minDist,o):o,maxDist:e?Math.max(e.maxDist,r):r}}var hu=1.5;function pu(e,t,n){let o=Math.max(1,n)*hu;if(!e)return{anchor:[t[0],t[1],t[2]],limit:o};let[r,i,a]=e.anchor,s=t[1]-i,c=Math.max(Math.abs(t[0]-r),Math.abs(t[2]-a),s>=0?s:-s*2);return{anchor:e.anchor,limit:Math.max(e.limit,c+o)}}var Dn=class{constructor(t,n,o,r){this.fovY=mi;this.target=new Ft.Vec3;this.azimuth=-30*Ee;this.polar=55*Ee;this.distance=10;this.azT=-30*Ee;this.polT=55*Ee;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 Ft.Vec3;this.panAnchor=new Ft.Vec3;this.panLimit=0;this.panBox=null;this.primaryDragMode="orbit";this.camera=new Ft.Camera(t,{fov:mi,near:.1,far:5e3,aspect:1}),this.canvas=n,this.requestRender=o,this.onGesture=r,this.onPointerDown=i=>{if(this.interactionEnabled){try{this.canvas.setPointerCapture?.(i.pointerId)}catch{}if(this.activePointers.set(i.pointerId,{x:i.clientX,y:i.clientY}),this.activePointers.size===1){let a=i.button===2||i.button===1,s=i.button===0&&(i.shiftKey?this.primaryDragMode==="orbit":this.primaryDragMode==="pan");this.panning=a||s,this.dragging=!this.panning,this.lastX=i.clientX,this.lastY=i.clientY}else if(this.activePointers.size===2){this.dragging=!1,this.panning=!1,this.pinchDist=this.currentPinchDistance();let a=this.pinchCentroid();this.pinchCx=a.x,this.pinchCy=a.y}}},this.onPointerMove=i=>{if(!this.interactionEnabled||!this.activePointers.has(i.pointerId))return;if(this.activePointers.set(i.pointerId,{x:i.clientX,y:i.clientY}),this.activePointers.size>=2){let u=this.currentPinchDistance();this.pinchDist>0&&(this.dollyBy(Math.exp((this.pinchDist-u)*.005)),this.fireGesture()),this.pinchDist=u;let l=this.pinchCentroid();this.panBy(l.x-this.pinchCx,l.y-this.pinchCy),this.pinchCx=l.x,this.pinchCy=l.y;return}let a=i.clientX-this.lastX,s=i.clientY-this.lastY;if(this.panning){this.lastX=i.clientX,this.lastY=i.clientY,(a!==0||s!==0)&&(this.panBy(a,s),this.fireGesture());return}if(!this.dragging)return;this.lastX=i.clientX,this.lastY=i.clientY,(a!==0||s!==0)&&this.fireGesture();let c=fu(a,s);this.azT+=c.azimuth,this.polT=Math.max(Ho,Math.min(zo,this.polT+c.polar)),this.requestRender()},this.onPointerUp=i=>{this.activePointers.delete(i.pointerId);try{this.canvas.releasePointerCapture?.(i.pointerId)}catch{}this.activePointers.size<2&&(this.pinchDist=0),this.activePointers.size===0&&(this.dragging=!1,this.panning=!1)},this.onContextMenu=i=>{i.preventDefault()},this.onWheel=i=>{if(i.preventDefault(),!this.interactionEnabled)return;let a=i.deltaMode===1?16:i.deltaMode===2?100:1,s=Math.max(-2,Math.min(2,i.deltaY*a/100));this.dollyBy(Math.exp(s*.22)),this.fireGesture()},this.onKeyDown=i=>{if(!this.interactionEnabled)return;let a=7*Ee;if(i.shiftKey&&(i.key==="ArrowLeft"||i.key==="ArrowRight"||i.key==="ArrowUp"||i.key==="ArrowDown"))this.panBy(i.key==="ArrowLeft"?-32:i.key==="ArrowRight"?32:0,i.key==="ArrowUp"?-32:i.key==="ArrowDown"?32:0);else if(i.key==="ArrowLeft"||i.key==="ArrowRight")this.azT+=i.key==="ArrowLeft"?-a:a;else if(i.key==="ArrowUp"||i.key==="ArrowDown")this.polT=Math.max(Ho,Math.min(zo,this.polT+(i.key==="ArrowUp"?-a:a)));else if(i.key==="+"||i.key==="=")this.dollyBy(Dt);else if(i.key==="-"||i.key==="_")this.dollyBy(ln);else return;i.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 t=[...this.activePointers.values()];if(!t.length)return{x:0,y:0};let n=0,o=0;for(let r of t)n+=r.x,o+=r.y;return{x:n/t.length,y:o/t.length}}panBy(t,n){let o=this.canvas.clientHeight||1,r=2*this.distance*Math.tan(this.fovY*Ee/2)/o,i=Math.sin(this.azimuth),a=Math.cos(this.azimuth),s=a,c=-i,u=Math.cos(this.polar),l=Math.sin(this.polar),m=-i*u,h=-a*u;this.targetT.x+=(-t*s+n*m)*r,this.targetT.z+=(-t*c+n*h)*r,this.targetT.y+=n*l*r,this.clampPan(),this.requestRender()}widenPanBox(t){this.panBox=pu(this.panBox,t.center,t.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 t=this.panLimit,n=this.panAnchor.x,o=this.panAnchor.y,r=this.panAnchor.z;this.targetT.x=Math.max(n-t,Math.min(n+t,this.targetT.x)),this.targetT.z=Math.max(r-t,Math.min(r+t,this.targetT.z)),this.targetT.y=Math.max(o-t*.5,Math.min(o+t,this.targetT.y))}fireGesture(){this.gestureFired||(this.gestureFired=!0,this.onGesture?.())}currentPinchDistance(){let t=[...this.activePointers.values()];return t.length<2?0:Math.hypot(t[0].x-t[1].x,t[0].y-t[1].y)}dollyBy(t){this.distT=Math.max(this.minDist,Math.min(this.maxDist,this.distT*t)),this.requestRender()}zoomBy(t){this.interactionEnabled&&(this.dollyBy(t),this.fireGesture())}dollyLimitState(){return{atMin:this.distT<=this.minDist+1e-6,atMax:this.distT>=this.maxDist-1e-6}}setPrimaryDragMode(t){this.primaryDragMode=t}setInteractionEnabled(t){this.interactionEnabled=t,!t&&(this.activePointers.clear(),this.dragging=!1,this.panning=!1,this.pinchDist=0)}frame(t,n=!1,o,r=!1,i){this.camera.perspective({fov:this.fovY,aspect:this.camera.aspect}),this.target.set(t.center[0],t.center[1],t.center[2]),this.targetT.copy(this.target),this.widenPanBox(t);let a=Math.max(1,t.radius),s=this.fovY*Ee/2,c=r?Math.max(.82,this.camera.aspect||1):this.camera.aspect||1,u=Math.atan(Math.tan(s)*c);this.azT=o??-30*Ee,this.polT=Math.max(15,Math.min(80,i?.polarDeg??55))*Ee;let l=this.fitDistance(t,s,u,this.azT,this.polT);this.distT=l*Math.max(1.05,Math.min(2,i?.margin??fi)),this.envelope=du(this.envelope,a,l),this.minDist=this.envelope.minDist,this.maxDist=this.envelope.maxDist,n?(this.azimuth=this.azT,this.polar=12*Ee,this.distance=this.distT*1.7):(this.azimuth=this.azT,this.polar=this.polT,this.distance=this.distT),this.applyPosition()}setAspect(t){if(!(t>0)||!Number.isFinite(t))return;let n=this.camera.aspect;if(this.interactionEnabled&&n>0){let o=Math.min(n,1)/Math.min(t,1);this.distance*=o,this.distT*=o,this.maxDist=Math.max(this.maxDist,this.distance,this.distT),this.applyPosition()}this.camera.perspective({aspect:t})}frameSoft(t,n,o=!1,r){this.target.set(t.center[0],t.center[1],t.center[2]),this.targetT.copy(this.target),this.widenPanBox(t),this.syncFromCamera(),this.camera.perspective({fov:this.fovY,aspect:this.camera.aspect});let i=this.fovY*Ee/2,a=o?Math.max(.82,this.camera.aspect||1):this.camera.aspect||1,s=Math.atan(Math.tan(i)*a);this.azT=n??this.azimuth,this.polT=Math.max(15,Math.min(80,r?.polarDeg??55))*Ee;let c=this.fitDistance(t,i,s,this.azT,this.polT);this.distT=c*Math.max(1.05,Math.min(2,r?.margin??fi))}fitDistance(t,n,o,r,i){let a=Math.max(1,t.radius),s=Math.max(a/Math.tan(n),a/Math.tan(o)),c=t.box;if(!c)return s;let u=Math.sin(i),l=-u*Math.sin(r),m=-Math.cos(i),h=-u*Math.cos(r);if(Math.abs(m)>.999)return s;let d=-h,f=l,p=Math.hypot(d,f);d/=p,f/=p;let b=-f*m,y=f*l-d*h,g=d*m,x=Math.tan(o),w=Math.tan(n),I=1;for(let v=0;v<8;v++){let P=(v&1?c.max[0]:c.min[0])-t.center[0],S=(v&2?c.max[1]:c.min[1])-t.center[1],M=(v&4?c.max[2]:c.min[2])-t.center[2],C=P*l+S*m+M*h,T=Math.abs(P*d+M*f),N=Math.abs(P*b+S*y+M*g);I=Math.max(I,T/x-C,N/w-C)}return Math.min(s,Math.max(I,a*.35))}updateClipping(t){let n=this.camera.position.x-t.center[0],o=this.camera.position.y-t.center[1],r=this.camera.position.z-t.center[2],i=Math.hypot(this.camera.position.x-this.target.x,this.camera.position.y-this.target.y,this.camera.position.z-this.target.z),a=this.interactionEnabled&&Math.abs(i-this.distance)<=this.distance*.01,{near:s,far:c}=gu(Math.hypot(n,o,r),t.radius,a?this.distance:null);this.camera.perspective({near:s,far:c,aspect:this.camera.aspect})}update(){let t=this.azT-this.azimuth,n=this.polT-this.polar,o=this.distT-this.distance,r=this.targetT.x-this.target.x,i=this.targetT.y-this.target.y,a=this.targetT.z-this.target.z,s=Math.max(1e-4,this.distance*1e-4),c=Math.abs(t)>1e-4||Math.abs(n)>1e-4||Math.abs(o)>1e-4||Math.abs(r)>s||Math.abs(i)>s||Math.abs(a)>s;return this.azimuth+=t*Lt,this.polar+=n*Lt,this.distance+=o*Lt,this.target.x+=r*Lt,this.target.y+=i*Lt,this.target.z+=a*Lt,c&&this.applyPosition(),c}get currentDistance(){return this.distance}syncFromCamera(){let t=this.camera.position.x-this.target.x,n=this.camera.position.y-this.target.y,o=this.camera.position.z-this.target.z,r=Math.hypot(t,n,o)||1,i=Math.max(Ho,Math.min(zo,Math.acos(Math.max(-1,Math.min(1,n/r)))));this.distance=this.distT=r,this.polar=this.polT=i,this.azimuth=this.azT=Math.atan2(t,o)}setTarget(t){this.target.set(t[0],t[1],t[2]),this.targetT.copy(this.target)}resumeAfterFlight(t){this.camera.perspective({fov:this.fovY,aspect:this.camera.aspect}),t&&this.target.set(t[0],t[1],t[2]),this.targetT.copy(this.target),this.syncFromCamera()}applyPosition(){let t=Math.sin(this.polar),n=this.target.x+this.distance*t*Math.sin(this.azimuth),o=this.target.y+this.distance*Math.cos(this.polar),r=this.target.z+this.distance*t*Math.cos(this.azimuth);this.camera.position.set(n,o,r),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()}},bu=.1,yu=.25;function gu(e,t,n){let o=Math.max(1,t)*1.18,r=n==null?yu:Math.max(.05,n*bu),i=Math.max(r,e-o),a=Math.max(i+10,e+o);return{near:i,far:a}}var On=class{constructor(t){this.rafId=0;this.running=!1;this.lastTime=0;this.fpsEma=0;this.rendered=0;this.tick=t=>{let n=this.lastTime?(t-this.lastTime)/1e3:.016666666666666666;if(this.lastTime=t,n>0){let r=1/n;this.fpsEma=this.fpsEma?this.fpsEma*.9+r*.1:r}this.rendered++,this.frame(n)?this.rafId=requestAnimationFrame(this.tick):(this.running=!1,this.rafId=0)};this.frame=t}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 hi(e,t,n){return Math.max(t,Math.min(n,e))}var Ot=2.5,xu=1.15,un=12,Bt=22,pi=6,bi=9.5,yi=.9,gi=2.2,Uo=30,jo=4,Bn=8192;var Fb=Bt+jo;function xi(e,t){let n=t*1.4,o=t*3.2;if(e<=n)return{scale:1,fade:0,minPixels:Ot};let r=Math.min(1,(e-n)/Math.max(.001,o-n));return{scale:1-r*.4,fade:r*.55,minPixels:Ot+r*(xu-Ot)}}function vi(e,t,n){return!(e>0)||!(t>0)||!(n>0)?!1:t*n/e>=64}function Mi(e,t,n,o,r){if(!(e>0)||!(t>0)||!(n>0)||!(o>0)||!(r>0))return!1;let i=Math.tan(o/2*Math.PI/180);if(!(i>0))return!1;let a=t/(n*i)*(r/2);return Math.PI*a*a/e>=64}var vu=[{key:"wheelchair",label:"Wheelchair space",short:"Wheelchair",icon:"\u267F"},{key:"companion",label:"Companion seat",short:"Companion",icon:"\u{1F9D1}\u200D\u{1F91D}\u200D\u{1F9D1}"},{key:"semi-ambulatory",label:"Semi-ambulatory (limited mobility)",short:"Limited mobility",icon:"\u{1F9AF}"},{key:"designated-aisle",label:"Designated aisle / transfer seat",short:"Aisle transfer",icon:"AS"},{key:"step-free",label:"Step-free accessible seat",short:"Step-free",icon:"SF"},{key:"hearing",label:"Assistive listening",short:"Hearing",icon:"\u{1F9BB}"},{key:"cart",label:"CART live-caption view",short:"CART captions",icon:"CC"},{key:"sign-language",label:"Sign-language view",short:"Sign language",icon:"\u{1F91F}"},{key:"low-vision",label:"Blind / low-vision viewing",short:"Low vision",icon:"LV"},{key:"sensory-friendly",label:"Quiet / sensory-friendly seating",short:"Sensory-friendly",icon:"QS"},{key:"plus-size",label:"Plus-size seat",short:"Plus-size",icon:"\u{1F4BA}"},{key:"lift-armrest",label:"Lift-up armrest",short:"Lift armrest",icon:"\u2195\uFE0F"}],Ob=new Map(vu.map(e=>[e.key,e]));var Mu={wheelchair:"#3b82f6",companion:"#8b5cf6","semi-ambulatory":"#0ea5e9","designated-aisle":"#0284c7","step-free":"#16a34a",hearing:"#14b8a6",cart:"#7c3aed","sign-language":"#f59e0b","low-vision":"#d97706","sensory-friendly":"#6366f1","plus-size":"#ec4899","lift-armrest":"#22c55e"};function Si(e){let t=e?.[0];return t&&Mu[t]||"#3b82f6"}var Su=[{key:"obstructedView",label:"Obstructed view",short:"Obstructed",icon:"\u26D4"},{key:"restrictedView",label:"Restricted view",short:"Restricted",icon:"\u{1F441}"},{key:"premium",label:"Premium seat",short:"Premium",icon:"\u2605"}],Bb=new Map(Su.map(e=>[e.key,e]));var wu=["reference-focal","bar","entrance","exit","restroom","screen","sound","concession","coat","wall","rail","suite","obstruction"],Nb=new Set(wu);var Pi=[{key:"circle",label:"Standard seat",shortLabel:"Standard",useCase:"General assigned seating",group:"general",path:null,bounds:null,mark:null},{key:"theatre",label:"Theatre chair",shortLabel:"Theatre",useCase:"Auditoriums, arenas and stadium stands",group:"fixed",path:"M4.5 3.5 Q4.5 1.5 6.5 1.5 L17.5 1.5 Q19.5 1.5 19.5 3.5 L19.5 13 L4.5 13 Z M3.5 12 L20.5 12 Q22.5 12 22.5 14 L22.5 21 Q22.5 22.5 21 22.5 Q19.5 22.5 19.5 21 L19.5 17.5 L4.5 17.5 L4.5 21 Q4.5 22.5 3 22.5 Q1.5 22.5 1.5 21 L1.5 14 Q1.5 12 3.5 12 Z",bounds:{x:1.5,y:1.5,width:21,height:21},mark:{x:12,y:10,radius:6}},{key:"dining",label:"Dining chair",shortLabel:"Dining",useCase:"Banquets, restaurants and table seating",group:"flexible",path:"M7 1 Q6 1 6 2.5 L6.75 10.5 L5 10.5 Q4 10.5 4 12 L4 14 Q4 15 5.25 15 L6 15 L4 23 L7 23 L9.5 15 L14.5 15 L17 23 L20 23 L18 15 L18.75 15 Q20 15 20 14 L20 12 Q20 10.5 19 10.5 L17.25 10.5 L18 2.5 Q18 1 17 1 Z",bounds:{x:4,y:1,width:16,height:22},mark:{x:12,y:10,radius:4.5}},{key:"folding",label:"Folding chair",shortLabel:"Folding",useCase:"Concert floors, ceremonies and conferences",group:"flexible",path:"M6 2 Q5 2 5 3 L6 8 L18 8 L19 3 Q19 2 18 2 Z M5 9 L19 9 Q20 9 20 10.5 L19 13 L5 13 L4 10.5 Q4 9 5 9 Z M6 12 L9 12 L12 17 L15 12 L18 12 L14 19 L17 23 L14 23 L12 21 L10 23 L7 23 L10 19 Z",bounds:{x:4,y:2,width:16,height:21},mark:{x:12,y:5,radius:3}},{key:"armchair",label:"Premium armchair",shortLabel:"Armchair",useCase:"Boxes, lounges and club seating",group:"premium",path:"M3.5 4 Q3.5 1.5 6 1.5 L18 1.5 Q20.5 1.5 20.5 4 L20.5 13 L3.5 13 Z M1.5 12.5 Q1.5 10 3.25 10 Q5 10 5 12.5 L5 13.5 L19 13.5 L19 12.5 Q19 10 20.75 10 Q22.5 10 22.5 12.5 L22.5 19.5 Q22.5 22 20 22 L4 22 Q1.5 22 1.5 19.5 Z",bounds:{x:1.5,y:1.5,width:21,height:20.5},mark:{x:12,y:7.5,radius:5.5}},{key:"recliner",label:"Recliner",shortLabel:"Recliner",useCase:"Luxury cinemas and premium clubs",group:"premium",path:"M7 2 Q7 1 8.5 1 L15.5 1 Q17 1 17 2 L19 13 L5 13 Z M4 9 Q2 9 2 11.5 L2 16 Q2 18 4 18 L6 18 L6 15 L18 15 L18 18 L20 18 Q22 18 22 16 L22 11.5 Q22 9 20 9 Q18 9 18 11 L18 13 L6 13 L6 11 Q6 9 4 9 Z M7 17 L17 17 Q18 17 18.5 18.5 L19.5 22.5 L4.5 22.5 L5.5 18.5 Q6 17 7 17 Z",bounds:{x:2,y:1,width:20,height:21.5},mark:{x:12,y:8,radius:5}},{key:"stool",label:"Stool",shortLabel:"Stool",useCase:"Bars, high-tops and seating rails",group:"flexible",path:"M6 2.5 L18 2.5 Q22 2.5 22 6.5 L22 12 Q22 16 18 16 L6 16 Q2 16 2 12 L2 6.5 Q2 2.5 6 2.5 Z M6 15.5 L9.5 15.5 L7.5 22.5 L3 22.5 Z M14.5 15.5 L18 15.5 L20.5 22.5 L16 22.5 Z",bounds:{x:2,y:2.5,width:20,height:20},mark:{x:12,y:9.25,radius:6.5}},{key:"bench",label:"Bench place",shortLabel:"Bench",useCase:"Pews, bleachers and terraces",group:"fixed",path:"M2.5 0.5 L21.5 0.5 Q23 0.5 23 2 L23 5 Q23 6.5 21.5 6.5 L2.5 6.5 Q1 6.5 1 5 L1 2 Q1 0.5 2.5 0.5 Z M2 7.5 L22 7.5 Q23.5 7.5 23.5 9 L23.5 15.5 Q23.5 17 22 17 L18 17 L18 21.5 Q18 22.5 16.75 22.5 Q15.5 22.5 15.5 21.5 L15.5 17 L8.5 17 L8.5 21.5 Q8.5 22.5 7.25 22.5 Q6 22.5 6 21.5 L6 17 L2 17 Q0.5 17 0.5 15.5 L0.5 9 Q0.5 7.5 2 7.5 Z",bounds:{x:.5,y:.5,width:23,height:22},mark:{x:12,y:12.25,radius:4.75}}],Ii=Pi.map(e=>e.key),Pu=new Map(Pi.map(e=>[e.key,e]));function wi(e){return typeof e=="string"&&Pu.has(e)}function Ci(e,t){return wi(e)?e:wi(t?.seatGlyph)?t.seatGlyph:"circle"}var le=.02291666666666667,Ve=1/le,Iu=58,Cu=Iu*le;var Ru=3,Ri=0,Xo=120,Au=0,Eu=45,_u=7,We=1.2;function Wo(e,t,n,o){return Number.isFinite(e)?Math.max(t,Math.min(n,e)):o}function Tu(e){return!Number.isFinite(e)||!Number.isInteger(e)||e<0?0:e<=_u?e:Ru}function mt(e,t={}){let n=Wo(t.floorBaseHeightM,Ri,Xo,0),o=Math.min(Xo,n+Tu(e.elevation)*Cu),r=e.height===void 0?o:Wo(e.height,Ri,Xo,o),i=Wo(e.rake,Au,Eu,0);return{height:r,rake:i}}var Ei=lt(require("earcut"),1),Ko=lt(require("polygon-clipping"),1);var jb=Math.PI/180;function Yo(e){let t=0,n=0;for(let r of e)t+=r.x,n+=r.y;let o=e.length||1;return{x:t/o,y:n/o}}function mn(e){return e.length?Yo(e):null}function Le(e){let t=0;for(let n=0,o=e.length;n<o;n+=1){let r=e[n],i=e[(n+1)%o];t+=r.x*i.y-i.x*r.y}return t/2}function Fe(e,t,n){let o=!1;for(let r=0,i=e.length-1;r<e.length;i=r++){let a=e[r],s=e[i];a.y>n!=s.y>n&&t<(s.x-a.x)*(n-a.y)/(s.y-a.y)+a.x&&(o=!o)}return o}var E=le,ku=.002;function Lu(e,t,n){let o=Math.hypot(t[0]-e[0],t[1]-e[1],t[2]-e[2]),r=Math.hypot(n[0]-t[0],n[1]-t[1],n[2]-t[2]),i=Math.hypot(e[0]-n[0],e[1]-n[1],e[2]-n[2]),a=Math.max(o,r,i);if(a<1e-9)return!0;let s=(o+r+i)/2;return 2*Math.sqrt(Math.max(0,s*(s-o)*(s-r)*(s-i)))/a<ku}var Ct=class{constructor(t=16384){this.len=0;this.buf=new Float32Array(t)}push3(t,n,o){this.len+3>this.buf.length&&this.grow(this.len+3),this.buf[this.len++]=t,this.buf[this.len++]=n,this.buf[this.len++]=o}push1(t){this.len+1>this.buf.length&&this.grow(this.len+1),this.buf[this.len++]=t}grow(t){let n=this.buf.length*2;for(;n<t;)n*=2;let o=new Float32Array(n);o.set(this.buf.subarray(0,this.len)),this.buf=o}get length(){return this.len}toArray(){return this.buf.slice(0,this.len)}},Gn=class{constructor(){this.pos=new Ct;this.nor=new Ct;this.col=new Ct;this.flr=new Ct;this.mat=new Ct;this.currentFloor=0;this.currentMaterial=0}setFloor(t){this.currentFloor=t}setMaterial(t){this.currentMaterial=t}tri(t,n,o,r,i,a=i,s=i){Lu(t,n,o)||(this.pos.push3(t[0],t[1],t[2]),this.pos.push3(n[0],n[1],n[2]),this.pos.push3(o[0],o[1],o[2]),this.nor.push3(r[0],r[1],r[2]),this.nor.push3(r[0],r[1],r[2]),this.nor.push3(r[0],r[1],r[2]),this.col.push3(i[0],i[1],i[2]),this.col.push3(a[0],a[1],a[2]),this.col.push3(s[0],s[1],s[2]),this.flr.push1(this.currentFloor),this.flr.push1(this.currentFloor),this.flr.push1(this.currentFloor),this.mat.push1(this.currentMaterial),this.mat.push1(this.currentMaterial),this.mat.push1(this.currentMaterial))}triN(t,n,o,r,i,a,s,c=s,u=s){[...t,...n,...o].every(Number.isFinite)&&(this.pos.push3(t[0],t[1],t[2]),this.pos.push3(n[0],n[1],n[2]),this.pos.push3(o[0],o[1],o[2]),this.nor.push3(r[0],r[1],r[2]),this.nor.push3(i[0],i[1],i[2]),this.nor.push3(a[0],a[1],a[2]),this.col.push3(s[0],s[1],s[2]),this.col.push3(c[0],c[1],c[2]),this.col.push3(u[0],u[1],u[2]),this.flr.push1(this.currentFloor),this.flr.push1(this.currentFloor),this.flr.push1(this.currentFloor),this.mat.push1(this.currentMaterial),this.mat.push1(this.currentMaterial),this.mat.push1(this.currentMaterial))}get vertexCount(){return this.pos.length/3}build(){return{position:this.pos.toArray(),normal:this.nor.toArray(),color:this.col.toArray(),floor:this.flr.toArray(),material:this.mat.toArray(),count:this.pos.length/3}}};function Fu(e,t,n){let o=t[0]-e[0],r=t[1]-e[1],i=t[2]-e[2],a=n[0]-e[0],s=n[1]-e[1],c=n[2]-e[2],u=r*c-i*s,l=i*a-o*c,m=o*s-r*a,h=Math.hypot(u,l,m)||1;return u/=h,l/=h,m/=h,[u,l,m]}function Du(e,t){let n=[...e],o=[];for(let a of e)o.push(a.x,a.y);let r=[];if(t){for(let a of t)if(!(a.length<3)){r.push(n.length);for(let s of a)n.push(s),o.push(s.x,s.y)}}let i=(0,Ei.default)(o,r.length?r:void 0,2);return{pts:n,tris:i}}function Ye(e){return Le(e)<0?[...e].reverse():e}var Ou=3;function Bu(e,t,n,o){let r=o(e),i=o(t),a=o(n),s=(d,f,p,b)=>Math.abs(o({x:(d.x+f.x)/2,y:(d.y+f.y)/2})-(p+b)/2),c=(e.x+t.x+n.x)/3,u=(e.y+t.y+n.y)/3,l=(r+i+a)/3,m=Math.max(s(e,t,r,i),s(t,n,i,a),s(n,e,a,r),Math.abs(o({x:c,y:u})-l)),h=(d,f,p)=>{let b=Math.abs(o({x:(d+c)/2,y:(f+u)/2})-(p+l)/2);b>m&&(m=b)};return h((e.x+t.x)/2,(e.y+t.y)/2,(r+i)/2),h((t.x+n.x)/2,(t.y+n.y)/2,(i+a)/2),h((n.x+e.x)/2,(n.y+e.y)/2,(a+r)/2),m}function fn(e,t,n,o,r){if(r<=0)return Bu(e,t,n,o);let i={x:(e.x+t.x)/2,y:(e.y+t.y)/2},a={x:(t.x+n.x)/2,y:(t.y+n.y)/2},s={x:(n.x+e.x)/2,y:(n.y+e.y)/2};return Math.max(fn(e,i,s,o,r-1),fn(i,t,a,o,r-1),fn(s,a,n,o,r-1),fn(i,a,s,o,r-1))}function dn(e,t,n,o,r,i,a,s){if(a>0){let h={x:(t.x+n.x)/2,y:(t.y+n.y)/2},d={x:(n.x+o.x)/2,y:(n.y+o.y)/2},f={x:(o.x+t.x)/2,y:(o.y+t.y)/2};dn(e,t,h,f,r,i,a-1,s),dn(e,h,n,d,r,i,a-1,s),dn(e,f,d,o,r,i,a-1,s),dn(e,h,d,f,r,i,a-1,s);return}let c=[t.x*E,r(t),t.y*E],u=[n.x*E,r(n),n.y*E],l=[o.x*E,r(o),o.y*E];if(s){e.triN(c,u,l,s(t),s(n),s(o),i);return}let m=Fu(c,u,l);m[1]<0&&(m=[-m[0],-m[1],-m[2]]),e.tri(c,u,l,m,i)}var Nu=8;function Ai(e,t,n){if(!Number.isFinite(n))return e;let o=[],r=(i,a,s,c,u)=>{if(u>0){let l={x:(i.x+a.x)/2,y:(i.y+a.y)/2},m=t(l);if(Math.abs(m-(s+c)/2)>n){r(i,l,s,m,u-1),r(l,a,m,c,u-1);return}}o.push(i)};for(let i=0;i<e.length;i++){let a=e[i],s=e[(i+1)%e.length];r(a,s,t(a),t(s),Nu)}return o}function Nn(e,t){if(e.length<3)return e;let n=[];for(let r of e){let i=n[n.length-1];i&&Math.hypot(r.x-i.x,r.y-i.y)<t||n.push(r)}for(;n.length>2&&Math.hypot(n[0].x-n[n.length-1].x,n[0].y-n[n.length-1].y)<t;)n.pop();if(n.length<3)return e;let o=[];for(let r=0;r<n.length;r++){let i=o.length?o[o.length-1]:n[(r-1+n.length)%n.length],a=n[r],s=n[(r+1)%n.length],c=s.x-i.x,u=s.y-i.y,l=Math.hypot(c,u);l>t&&Math.abs((a.x-i.x)*u-(a.y-i.y)*c)/l<t||o.push(a)}return o.length>=3?o:n}var Vn=.001*Ve*.1;function ae(e,t,n,o,r,i,a,s,c=1/0,u){if(!t||t.length<3||(c===void 0&&(c=1/0),Math.abs(Le(t))<1e-4))return;let l=Nn(Ai(Nn(Ye(t),Vn),o,c),Vn),m=n?.map(v=>Nn(Ai(Nn(Ye(v),Vn),o,c),Vn)).filter(v=>v.length>=3&&Math.abs(Le(v))>=1e-4),{pts:h,tris:d}=Du(l,m),f=[i[0]*s.top,i[1]*s.top,i[2]*s.top],p=[i[0]*s.bottomCap,i[1]*s.bottomCap,i[2]*s.bottomCap],b=[a[0]*s.top,a[1]*s.top,a[2]*s.top],y=[a[0]*s.wallBottom,a[1]*s.wallBottom,a[2]*s.wallBottom],g=0;if(Number.isFinite(c))for(;g<Ou;g++){let v=0;for(let P=0;P<d.length;P+=3){let S=fn(h[d[P]],h[d[P+1]],h[d[P+2]],o,g);S>v&&(v=S)}if(v<=c)break}for(let v=0;v<d.length;v+=3){let P=h[d[v]],S=h[d[v+1]],M=h[d[v+2]];dn(e,P,S,M,o,f,g,u);let C=[P.x*E,r,P.y*E],T=[S.x*E,r,S.y*E],N=[M.x*E,r,M.y*E];e.tri(C,N,T,[0,-1,0],p)}let x=v=>{if(g<=0)return v;let P=1<<g,S=[];for(let M=0;M<v.length;M++){let C=v[M],T=v[(M+1)%v.length];for(let N=0;N<P;N++){let D=N/P;S.push({x:C.x+(T.x-C.x)*D,y:C.y+(T.y-C.y)*D})}}return S},w=Yo(l),I=[{ring:x(l),flip:!1}];if(m)for(let v of m)v.length>=3&&I.push({ring:x(v),flip:!0});for(let{ring:v,flip:P}of I)for(let S=0;S<v.length;S++){let M=v[S],C=v[(S+1)%v.length],T=(C.x-M.x)*E,D=(C.y-M.y)*E,R=-T,A=Math.hypot(D,R)||1;D/=A,R/=A;let L=(M.x+C.x)/2-w.x,O=(M.y+C.y)/2-w.y,_=D*L+R*O;P&&(_=-_),_<0&&(D=-D,R=-R);let k=[D,0,R],V=[M.x*E,o(M),M.y*E],F=[C.x*E,o(C),C.y*E],B=[M.x*E,r,M.y*E],z=[C.x*E,r,C.y*E];e.tri(V,F,z,k,b,b,y),e.tri(V,z,B,k,b,y,y)}}function _i(e){let t=0;for(let c of e)t+=c.count;let n=new Float32Array(t*3),o=new Float32Array(t*3),r=new Float32Array(t*3),i=new Float32Array(t),a=new Float32Array(t),s=0;for(let c of e)n.set(c.position,s*3),o.set(c.normal,s*3),r.set(c.color,s*3),i.set(c.floor,s),a.set(c.material,s),s+=c.count;return{position:n,normal:o,color:r,floor:i,material:a,count:t}}function Ue(e,t,n=2.5){if(t<=0||e.length<3)return e;let o=Ye(e),r=o.length,i=[];for(let s=0;s<r;s++){let c=o[s],u=o[(s+1)%r],l=u.x-c.x,m=u.y-c.y,h=Math.hypot(l,m)||1;i.push({x:m/h,y:-l/h})}let a=[];for(let s=0;s<r;s++){let c=o[s],u=i[(s-1+r)%r],l=i[s],m=u.x+l.x,h=u.y+l.y,d=Math.hypot(m,h),f=()=>{a.push([c.x+u.x*t,c.y+u.y*t]),a.push([c.x+l.x*t,c.y+l.y*t])};if(d<1e-9){f();continue}m/=d,h/=d;let p=m*u.x+h*u.y,b=1/Math.max(p,1e-6);if(!Number.isFinite(b)||b>n){f();continue}a.push([c.x+m*t*b,c.y+h*t*b])}if(a.length<3)return e;try{let s=Ko.default.union([[...a,a[0]]]),c=null,u=-1/0;for(let m of s){let h=Math.abs(Le(m[0].map(([d,f])=>({x:d,y:f}))));h>u&&(u=h,c=m[0])}if(!c)return e;let l=c.map(([m,h])=>({x:m,y:h}));if(l.length>1){let m=l[0],h=l[l.length-1];Math.abs(m.x-h.x)<1e-9&&Math.abs(m.y-h.y)<1e-9&&l.pop()}return l.length>=3?l:e}catch{return e}}function Rt(e,t,n=2.5){if(e.length<3)return[];if(t<=0)return e;let o=Ye(e),r=o.length,i=[];for(let c=0;c<r;c++){let u=o[c],l=o[(c+1)%r],m=Math.hypot(l.x-u.x,l.y-u.y)||1;i.push({x:-(l.y-u.y)/m,y:(l.x-u.x)/m})}let a=[],s=[];for(let c=0;c<r;c++){let u=o[c],l=i[(c-1+r)%r],m=i[c],h=l.x+m.x,d=l.y+m.y,f=Math.hypot(h,d),p=f<1e-9?1/0:1/Math.max(h/f*l.x+d/f*l.y,1e-6);if(!Number.isFinite(p)||p>n){a.push({x:u.x+l.x*t,y:u.y+l.y*t},{x:u.x+m.x*t,y:u.y+m.y*t}),s.push(c,c);continue}h/=f,d/=f,a.push({x:u.x+h*t*p,y:u.y+d*t*p}),s.push(c)}for(let c=0;c<a.length;c++){let u=(c+1)%a.length,l=s[c],m=s[u];if(m!==(l+1)%r)continue;let h=o[l],d=o[m];if((a[u].x-a[c].x)*(d.x-h.x)+(a[u].y-a[c].y)*(d.y-h.y)<=0)return[]}try{let c=Ko.default.intersection([[...a.map(f=>[f.x,f.y]),[a[0].x,a[0].y]]],[[...o.map(f=>[f.x,f.y]),[o[0].x,o[0].y]]]),u=null,l=0;for(let f of c){let p=Math.abs(Le(f[0].map(([b,y])=>({x:b,y}))));p>l&&(l=p,u=f[0])}if(!u)return[];let m=u.map(([f,p])=>({x:f,y:p})),h=m[0],d=m[m.length-1];return m.length>1&&Math.abs(h.x-d.x)<1e-9&&Math.abs(h.y-d.y)<1e-9&&m.pop(),m.length>=3?Ye(m):[]}catch{return[]}}function Hn(e,t,n,o,r=28){let i=[];for(let a=0;a<r;a++){let s=a/r*Math.PI*2;i.push({x:e+n*Math.cos(s),y:t+o*Math.sin(s)})}return i}function hn(e,t,n,o){return[{x:e,y:t},{x:e+n,y:t},{x:e+n,y:t+o},{x:e,y:t+o}]}var et=.22;function Ti(e,t){let n=Ae[e];if(n!=="sold"&&n!=="held")return-1;let o=(t+1)*2654435761;return o^=o>>>15,o=Math.imul(o,2246822519),o^=o>>>13,(o>>>0)%1e5/1e5}var Vu=.42;function Gu(e){let t=e.length,n=new Float64Array(t);if(t<2)return n.fill(1/0),n;let o=1/0,r=1/0,i=-1/0,a=-1/0;for(let f of e)f.x<o&&(o=f.x),f.y<r&&(r=f.y),f.x>i&&(i=f.x),f.y>a&&(a=f.y);let s=Math.max(i-o,1e-6),c=Math.max(a-r,1e-6),u=Math.max(Math.sqrt(s*c/t),1e-6),l=Math.max(1,Math.ceil(s/u)+1),m=Math.max(1,Math.ceil(c/u)+1),h=new Map,d=(f,p)=>{let b=Math.min(l-1,Math.max(0,Math.floor((f-o)/u)));return Math.min(m-1,Math.max(0,Math.floor((p-r)/u)))*l+b};for(let f=0;f<t;f++){let p=d(e[f].x,e[f].y),b=h.get(p);b?b.push(f):h.set(p,[f])}for(let f=0;f<t;f++){let p=e[f],b=Math.min(l-1,Math.max(0,Math.floor((p.x-o)/u))),y=Math.min(m-1,Math.max(0,Math.floor((p.y-r)/u))),g=1/0;for(let x=1;x<=4;x++){for(let w=y-x;w<=y+x;w++)if(!(w<0||w>=m))for(let I=b-x;I<=b+x;I++){if(I<0||I>=l||x>1&&Math.abs(w-y)<x&&Math.abs(I-b)<x)continue;let v=h.get(w*l+I);if(v)for(let P of v){if(P===f)continue;let S=Math.hypot(e[P].x-p.x,e[P].y-p.y);S<g&&(g=S)}}if(Number.isFinite(g)&&g<=x*u)break}n[f]=g}return n}function Hu(e){let t=e.eyeHeightM;return Number.isFinite(t)?Math.max(0,t-We):0}function ki(e,t,n,o,r,i){let a=e.length,s=new Float32Array(a*3),c=new Float32Array(a),u=new Float32Array(a*3),l=new Float32Array(a),m=new Float32Array(a),h=new Float32Array(a),d=new Float32Array(a),f=new Float32Array(a*3),p=new Map,b=Gu(e);for(let y=0;y<a;y++){let g=e[y],w=(n?.seatPitchU(y)??b[y])*E;l[y]=Number.isFinite(w)?Math.max(.06,Math.min(et,w*Vu)):et,m[y]=Qr(Number.isFinite(w)?w:void 0);let I=Ci(g.glyph,{seatGlyph:i?.get(g.categoryKey)});h[y]=Ii.indexOf(I),d[y]=g.wheelchairSpaceType==="no-seat"?0:1,s[y*3]=g.x*E,s[y*3+1]=n?n.seatDeckY(y):Hu(g),s[y*3+2]=g.y*E,c[y]=cn(t?t(g):"available");let v=me(r?.get(g.categoryKey)??"#6e7bff")??[.43,.48,1];if(u[y*3]=v[0],u[y*3+1]=v[1],u[y*3+2]=v[2],g.accessibility?.length){let P=me(Si(g.accessibility));P&&(f[y*3]=P[0],f[y*3+1]=P[1],f[y*3+2]=P[2])}p.set(g.id,y)}return{count:a,iPosition:s,iState:c,iCategory:u,iMaxRadius:l,iRing:f,idToIndex:p,iChairWidth:m,iGlyph:h,iPhysicalSeat:d,iFloor:o??new Float32Array(a),iSection:new Float32Array(a).fill(-1),iYaw:new Float32Array(a)}}var zu=64;function qo(e,t){let n=[];for(let a of t){let s=e.idToIndex.get(a.seatId);if(s===void 0)continue;let c=cn(a.state);e.iState[s]!==c&&(e.iState[s]=c,n.push(s))}if(!n.length)return[];n.sort((a,s)=>a-s);let o=[],r=n[0],i=n[0];for(let a=1;a<n.length;a++){let s=n[a];if(s!==i){if(s<=i+zu){i=s;continue}o.push({start:r,length:i-r+1}),r=s,i=s}}return o.push({start:r,length:i-r+1}),o}var pn=3,At=.38,bn=.24;function Uu(e){if(e.length<3)return null;let t=e[0],n=e[Math.floor(e.length/2)],o=e[e.length-1],r=(n.x-t.x)*E,i=(n.y-t.y)*E,a=(o.x-t.x)*E,s=(o.y-t.y)*E,c=2*(r*s-i*a);if(Math.abs(c)<1e-7)return null;let u=r*r+i*i,l=a*a+s*s,m=(u*s-l*i)/c+t.x*E,h=(r*l-a*u)/c+t.y*E,d=Math.hypot(t.x*E-m,t.y*E-h);return d<1||d>200||!Number.isFinite(d)||e.some(f=>Math.abs(Math.hypot(f.x*E-m,f.y*E-h)-d)>.03)?null:{x:m,z:h,radius:d}}function Li(e){let t=[],n=new Map,o=(c,u)=>`${Math.floor(c/pn)},${Math.floor(u/pn)}`;for(let c of e)for(let u of c.rows){for(let m of u.pts){let h=m.x*E,d=m.y*E,f=o(h,d),p=n.get(f)??[];p.push({x:h,z:d,y:u.y,floor:c.floorIndex}),n.set(f,p)}if(u.patch||u.pts.length<2)continue;let l=Uu(u.pts);for(let m of[0,u.pts.length-1]){let h=u.pts[m],d=u.pts[m===0?1:m-1],f=h.x-d.x,p=h.y-d.y,b=Math.hypot(f,p);b<1e-6||t.push({sectionId:c.sectionId,floorIndex:c.floorIndex,curve:l,row:u,point:h,x:h.x*E,z:h.y*E,dx:f/b,dz:p/b})}}let r=new Map;t.forEach((c,u)=>{let l=o(c.x,c.z),m=r.get(l)??[];m.push(u),r.set(l,m)});let i=(c,u)=>{let l=Math.floor(c/pn),m=Math.floor(u/pn);return[-1,0,1].flatMap(h=>[-1,0,1].map(d=>`${l+h},${m+d}`))},a=new Map;t.forEach((c,u)=>{let l=-1,m=1/0,h=!1;for(let d of i(c.x,c.z))for(let f of r.get(d)??[]){let p=t[f];if(c.sectionId===p.sectionId&&c.row.blockId===p.row.blockId||c.floorIndex!==p.floorIndex||Math.abs(c.row.y-p.row.y)>.05)continue;let b=p.x-c.x,y=p.z-c.z,g=Math.hypot(b,y);if(g<At*2+.45||g>pn)continue;let x=c.curve&&p.curve&&Math.hypot(c.curve.x-p.curve.x,c.curve.z-p.curve.z)<=.05&&Math.abs(c.curve.radius-p.curve.radius)<=.05,w=Math.min((b*c.dx+y*c.dz)/g,(-b*p.dx-y*p.dz)/g);(x?w<.8:w<.98)||!x&&(Math.abs(b*c.dz-y*c.dx)>.15||Math.abs(b*p.dz-y*p.dx)>.15)||(g<m-.02?(l=f,m=g,h=!1):Math.abs(g-m)<=.02&&(h=!0))}l>=0&&!h&&a.set(u,l)});let s=[];for(let[c,u]of a){if(c>=u||a.get(u)!==c)continue;let l=t[c],m=t[u],h=Math.hypot(m.x-l.x,m.z-l.z),d=(m.x-l.x)/h,f=(m.z-l.z)/h,p=!1;for(let y of i((l.x+m.x)/2,(l.z+m.z)/2))for(let g of n.get(y)??[]){if(g.floor!==l.floorIndex||Math.abs(g.y-l.row.y)>.75)continue;let x=(g.x-l.x)*d+(g.z-l.z)*f,w=Math.abs((g.x-l.x)*f-(g.z-l.z)*d);x>.01&&x<h-.01&&w<bn+At&&(p=!0)}if(p)continue;let b=(y,g)=>({x:(l.x+d*y-f*g)/E,y:(l.z+f*y+d*g)/E});s.push({sections:[l.sectionId,m.sectionId],blocks:[l.row.blockId,m.row.blockId],floorIndex:l.floorIndex,ends:[l.point,m.point],clearWidthM:h-2*At,heightM:(l.row.y+m.row.y)/2,outline:[b(At,-bn),b(h-At,-bn),b(h-At,bn),b(At,bn)]})}return s}var ju=.15,Xu=1.6;function Fi(e){return hi(e??1,ju,Xu)}var Wu=.15,Yu=.9,Ku=1.76;function qu(){return{background:{top:[...It.top],bottom:[...It.bottom]},structure:Go,seatStates:{...ci},seatScale:1,materials:{seat:null,shell:null,roughness:.78}}}function $u(e){return!!e&&e[0]*.2126+e[1]*.7152+e[2]*.0722>.55?{deck:"#a8ada9",fascia:"#69777c",shell:"#8d9ca0",roughness:.87}:{deck:"#69747b",fascia:"#3e4d58",shell:"#526572",roughness:.87}}function Di(e){let t=qu();e??={};let n=me(e.background);if(n){t.background={top:ie(n,Yu),bottom:ie(n,Ku)};let s={};for(let[u,l]of Object.entries(Go))s[u]=de(l,n,Wu);n[0]*.2126+n[1]*.7152+n[2]*.0722>.55&&(s.ground=ie(n,.86)),t.structure=s}let o=me(e.selectionColor)??me(e.accent);o&&(t.seatStates={...t.seatStates,selected:o});let r=e.seatScale;typeof r=="number"&&Number.isFinite(r)&&(t.seatScale=Fi(r));let i=Object.fromEntries(Object.entries(e.venue3d??{}).filter(([,s])=>s!=null)),a={...$u(n),...i};if(a){let s=me(a.deck),c=me(a.fascia);s&&(t.structure={...t.structure,tierTop:s,gaTop:s}),c&&(t.structure={...t.structure,tierWall:c,gaWall:c}),t.materials.seat=me(a.seat),t.materials.shell=me(a.shell),typeof a.roughness=="number"&&Number.isFinite(a.roughness)&&(t.materials.roughness=Math.min(1,Math.max(0,a.roughness)))}return t}function Oi(e,t){let n=[];for(let o of t)n.push(...e.seatStates[o]);return n}function Bi(e,t){let n=1-t,o=n*n*n,r=3*n*n*t,i=3*n*t*t,a=t*t*t;return{x:o*e.start.x+r*e.control1.x+i*e.control2.x+a*e.end.x,y:o*e.start.y+r*e.control1.y+i*e.control2.y+a*e.end.y}}function Ni(e,t,n=192){if(!Number.isInteger(t)||t<1)throw new Error("Path point count must be a positive integer");if(t===1)return[Bi(e,.5)];let o=Array.from({length:n+1},(c,u)=>Bi(e,u/n)),r=new Float64Array(o.length);for(let c=1;c<o.length;c+=1){let u=o[c].x-o[c-1].x,l=o[c].y-o[c-1].y;r[c]=r[c-1]+Math.hypot(u,l)}let i=r[r.length-1];if(i<=1e-9)return Array.from({length:t},()=>({...e.start}));let a=[],s=1;for(let c=0;c<t;c+=1){let u=i*c/(t-1);for(;s<r.length-1&&r[s]<u;)s+=1;let l=r[s-1],m=r[s],h=m===l?0:(u-l)/(m-l);a.push({x:o[s-1].x+(o[s].x-o[s-1].x)*h,y:o[s-1].y+(o[s].y-o[s-1].y)*h})}return a}function Vi(e){let t=new Map,n=new Map;for(let o of e){if(o.type!=="row"||!o.segmentedRow)continue;let r=n.get(o.segmentedRow.groupId)??[];r.push(o),n.set(o.segmentedRow.groupId,r)}for(let[o,r]of n){let i=r.slice().sort((h,d)=>h.segmentedRow.componentIndex-d.segmentedRow.componentIndex),a=i[0]?.segmentedRow?.componentCount??0,s=i[0]?.segmentedRow;if(!s||!(a>=2&&i.length===a&&s?.boundaryBefore==="start"&&i.every((h,d)=>h.segmentedRow?.kind==="segmented-row-v1"&&h.segmentedRow.groupId===o&&h.segmentedRow.componentCount===a&&h.segmentedRow.componentIndex===d&&h.segmentedRow.repeatLabelOnComponents===s.repeatLabelOnComponents&&(d===0?h.segmentedRow.boundaryBefore==="start":h.segmentedRow.boundaryBefore!=="start")&&h.segmentedRow.displayLabel===s.displayLabel)))continue;let u=i.reduce((h,d)=>h+d.seatCount,0),l=0,m=0;for(let h of i)h.segmentedRow.boundaryBefore==="break"&&(l+=1),t.set(h.id,{groupId:o,adjacencyOffset:l,displayOffset:m,displayLabel:s.displayLabel,totalSeats:u,canonical:i[0],viewFromSeatUrl:s.viewFromSeatUrl,viewFromSeatMeta:s.viewFromSeatMeta,confidenceEvidence:s.confidenceEvidence}),l+=h.seatCount,m+=h.seatCount}return t}var Zu="ABCDEFGHIJKLMNOPQRSTUVWXYZ";var Qu="abcdefghijklmnopqrstuvwxyz";function Ju(e,t){let n=t.length,o=e+1,r="";for(;o>0;){o-=1;let i=o%n;r=t[i]+r,o=Math.floor(o/n)}return r}function $o(e,t=!1){let n=t?Qu:Zu;return Ju(Math.max(0,Math.floor(e)-1),n)}var em=[[1e3,"M"],[900,"CM"],[500,"D"],[400,"CD"],[100,"C"],[90,"XC"],[50,"L"],[40,"XL"],[10,"X"],[9,"IX"],[5,"V"],[4,"IV"],[1,"I"]];function Gi(e){if(!Number.isFinite(e)||e<=0)return String(e);let t=Math.floor(e),n="";for(let[o,r]of em)for(;t>=o;)n+=r,t-=o;return n}function tm(e){let t=new Array(e);return Array.from({length:e},(n,o)=>o).sort((n,o)=>Math.abs(2*n-(e-1))-Math.abs(2*o-(e-1))||n-o).forEach((n,o)=>t[n]=o),t}function zn(e,t){let n=e.seatLabelStart??1,o=e.seatNumbering?.direction??"ltr",r=e.seatNumbering?.step??1,i=e.seatNumbering?.scheme??"decimal",a=e.seatNumbering?.prefix??"",s=e.seatNumbering?.endAt,c=e.seatCount;if(i==="updown"||i==="updown-descending"){let d=Math.ceil(c/2),f=i==="updown"?t<d?n+2*t:n-1+2*(c-t):t<d?n+2*(d-1-t):n+1+2*(t-d);return`${a}${f}`}let u=i==="odd"||i==="even"?2:r,l=s!=null&&Number.isFinite(s)?s-(c-1)*u:n,m=o==="center"?tm(c)[t]:o==="rtl"?c-1-t:t,h;switch(i){case"odd":{let d=l%2===1?l:l+1;h=String(d+m*2);break}case"even":{let d=l%2===0?l:l+1;h=String(d+m*2);break}case"roman":h=Gi(l+m*r);break;case"letters-upper":h=$o(l+m*r,!1);break;case"letters-lower":h=$o(l+m*r,!0);break;default:h=String(l+m*r);break}return`${a}${h}`}function nm(e){return{...e.canonical,seatCount:e.totalSeats,label:e.displayLabel,displayLabel:e.displayLabel}}function Hi(e,t,n){return n?.label??`${e.seatLabelBase??e.label}-${zn(e,t)}`}function Zo(e,t,n,o){if(o?.displayLabel)return o.displayLabel;if(e.seatDisplayLabelMode==="number")return zn(e,t);if(!n)return`${e.displayLabel||e.label}-${zn(e,t)}`;let r=nm(n),i=n.displayOffset+t;return`${n.displayLabel}-${zn(r,i)}`}function zi(e){let t=e.length;return t<=3?[...e]:[e[Math.floor(t*.25)],e[Math.floor(t*.5)],e[Math.floor(t*.75)]]}function Nt(e,t,n){if(!e.length)return 1/0;if(e.length===1)return Math.hypot(t-e[0].x,n-e[0].y);let o=1/0;for(let r=0;r+1<e.length;r++){let i=e[r],a=e[r+1],s=a.x-i.x,c=a.y-i.y,u=s*s+c*c,l=u>1e-12?((t-i.x)*s+(n-i.y)*c)/u:0;l<0?l=0:l>1&&(l=1);let m=t-(i.x+l*s),h=n-(i.y+l*c);if(Math.abs(m)>=o||Math.abs(h)>=o)continue;let d=Math.hypot(m,h);d<o&&(o=d)}return o}function om(e){let t=0,n=0;for(let i of e)t+=i.x,n+=i.y;let o=e.length||1;t/=o,n/=o;let r=0;for(let i of e){let a=Math.hypot(i.x-t,i.y-n);a>r&&(r=a)}return{cx:t,cy:n,r}}function Ui(e,t){return Math.hypot(e.cx-t.cx,e.cy-t.cy)-e.r-t.r}function Qo(e,t){let n=1/0;for(let o of zi(e)){let r=Nt(t,o.x,o.y);r<n&&(n=r)}for(let o of zi(t)){let r=Nt(e,o.x,o.y);r<n&&(n=r)}return n}function rm(e,t){if(e.length<3)return{pts:e,seatIndices:t};let n=0,o=0;for(let l of e)n+=l.x,o+=l.y;n/=e.length,o/=e.length;let r=-1,i=e[0];for(let l of e){let m=Math.hypot(l.x-n,l.y-o);m>r&&(r=m,i=l)}let a=i.x-n,s=i.y-o,c=Math.hypot(a,s);c>1e-9?(a/=c,s/=c):(a=1,s=0);let u=e.map((l,m)=>({p:l,i:m,t:(l.x-n)*a+(l.y-o)*s})).sort((l,m)=>l.t-m.t);return{pts:u.map(l=>l.p),seatIndices:u.map(l=>t[l.i])}}function Jo(e){let t=e.length;if(t<3)return null;let n=0,o=0;for(let g of e)n+=g.x,o+=g.y;n/=t,o/=t;let r=0,i=0,a=0,s=0,c=0,u=0,l=0;for(let g of e){let x=g.x-n,w=g.y-o;r+=x*x,a+=w*w,i+=x*w,s+=x*x*x,c+=w*w*w,u+=x*w*w,l+=w*x*x}let m=r*a-i*i;if(Math.abs(m)<1e-9)return null;let h=(s+u)/2,d=(c+l)/2,f=(h*a-d*i)/m,p=(d*r-h*i)/m,b=f+n,y=p+o;return!Number.isFinite(b)||!Number.isFinite(y)?null:{cx:b,cy:y}}var im=.15;function am(e){if(e.length<2)return null;let t=e.map(g=>{let x=0,w=0;for(let I of g.pts)x+=I.x,w+=I.y;return{x:x/g.pts.length,y:w/g.pts.length}}),n=0,o=0;for(let g of t)n+=g.x,o+=g.y;n/=t.length,o/=t.length;let r=0,i=0,a=0;for(let g of t){let x=g.x-n,w=g.y-o;r+=x*x,i+=x*w,a+=w*w}let s=r+a,c=r*a-i*i,u=s/2+Math.sqrt(Math.max(0,s*s/4-c)),l,m;Math.abs(i)>1e-12?(l=u-a,m=i):r>=a?(l=1,m=0):(l=0,m=1);let h=Math.hypot(l,m);if(!(h>1e-12))return null;l/=h,m/=h;let d=1/0,f=-1/0,p=[];for(let g of e){let x=1/0,w=-1/0;for(let I of g.pts){let v=I.x*l+I.y*m;v<x&&(x=v),v>w&&(w=v),v<d&&(d=v),v>f&&(f=v)}p.push(w-x)}let b=f-d;return b>1e-9?(p.sort((g,x)=>g-x),p[Math.min(p.length-1,Math.floor(p.length*.9))]/b<=sm?{x:l,y:m}:null):null}var sm=.35;function Un(e,t,n,o){let r=new Map;for(let v of n){let P=t[v],S=P.rowId||`__seat-${v}`,M=r.get(S);M||(M={pts:[],idx:[]},r.set(S,M)),M.pts.push({x:P.x,y:P.y}),M.idx.push(v)}if(!r.size)return{sectionId:e,rows:[],blockCount:0};let i=[];for(let[v,P]of r){let S=rm(P.pts,P.idx),M=0;for(let C of S.pts)M+=Math.hypot(C.x-o.x,C.y-o.y);i.push({id:v,pts:S.pts,seatIndices:S.seatIndices,blockId:-1,ordinal:0,blockDepth:0,focalDistance:M/S.pts.length})}let a=i.map(v=>om(v.pts)),s=i.length<=256?i.length*(i.length-1)/2:0,c=s?new Float64Array(s):null;c?.fill(Number.NaN);let u=c?new Map(i.map((v,P)=>[v,P])):null,l=(v,P)=>(v>P&&([v,P]=[P,v]),v*(2*i.length-v-1)/2+(P-v-1)),m=(v,P)=>{if(!c)return Qo(i[v].pts,i[P].pts);let S=l(v,P),M=c[S];if(!Number.isNaN(M))return M;let C=Qo(i[v].pts,i[P].pts);return c[S]=C,C},h=(v,P)=>u?m(u.get(v),u.get(P)):Qo(v.pts,P.pts),d=[];for(let v=0;v<i.length;v++){let P=1/0;for(let S=0;S<i.length;S++){if(v===S||Ui(a[v],a[S])>=P)continue;let M=m(v,S);M<P&&(P=M)}Number.isFinite(P)&&d.push(P)}d.sort((v,P)=>v-P);let f=d.length?d[Math.floor(d.length/2)]:1,p=Math.max(f*1.8,1e-6),b=i.map(()=>[]);for(let v=0;v<i.length;v++)for(let P=v+1;P<i.length;P++)Ui(a[v],a[P])>p||m(v,P)<=p&&(b[v].push(P),b[P].push(v));let y=0;for(let v=0;v<i.length;v++){if(i[v].blockId!==-1)continue;let P=y++,S=[v];for(i[v].blockId=P;S.length;){let M=S.pop();for(let C of b[M])i[C].blockId===-1&&(i[C].blockId=P,S.push(C))}}let g=new Map;for(let v of i){let P=g.get(v.blockId)??[];P.push(v),g.set(v.blockId,P)}let x=[];for(let v of i){if(v.pts.length<4)continue;let P=Jo(v.pts);P&&(!Number.isFinite(P.cx)||!Number.isFinite(P.cy)||x.push({x:P.cx,y:P.cy}))}let w=x.length>=2?(()=>{let v=x.map(M=>M.x).sort((M,C)=>M-C),P=x.map(M=>M.y).sort((M,C)=>M-C),S=Math.floor(x.length/2);return{cx:v[S],cy:P[S]}})():null;if(w){let v=N=>Math.hypot(N.x-w.cx,N.y-w.cy),P=1/0,S=-1/0,M=[];for(let N of i){let D=1/0,R=-1/0;for(let A of N.pts){let L=v(A);L<D&&(D=L),L>R&&(R=L)}M.push(R-D),D<P&&(P=D),R>S&&(S=R)}let C=S-P;M.sort((N,D)=>N-D);let T=M[Math.min(M.length-1,Math.floor(M.length*.9))];if(C>1e-9&&T/C<=im){let N=i.map(B=>{let z=0;for(let U of B.pts)z+=v(U);return{row:B,radius:z/B.pts.length}}),D=0,R=0;for(let B of N)D+=B.radius,R+=B.row.focalDistance;D/=N.length,R/=N.length;let A=0;for(let B of N)A+=(B.radius-D)*(B.row.focalDistance-R);if(A<0)for(let B of N)B.radius=-B.radius;let O=1/0;for(let B of N)B.radius<O&&(O=B.radius);N.sort((B,z)=>B.radius-z.radius);let _=-1,k=-1/0,V=C/Math.max(1,N.length)*.5,F=[];for(let B of N)B.radius-k>V&&(_++,k=B.radius),B.row.ordinal=_,B.row.blockDepth=B.radius-O,F.push(B.row);return{sectionId:e,rows:F,blockCount:y}}}let I=[];for(let[,v]of g){let P=am(v);if(P){let S=C=>{let T=0;for(let N of C.pts)T+=N.x*P.x+N.y*P.y;return T/C.pts.length};v.sort((C,T)=>S(C)-S(T)),v.length>=2&&v[0].focalDistance>v[v.length-1].focalDistance&&v.reverse();let M=0;for(let C=0;C<v.length;C++)C>0&&(M+=h(v[C-1],v[C])),v[C].ordinal=C,v[C].blockDepth=M,I.push(v[C])}else{let S=1/0;for(let M of v)M.focalDistance<S&&(S=M.focalDistance);v.sort((M,C)=>M.focalDistance-C.focalDistance);for(let M=0;M<v.length;M++)v[M].ordinal=M,v[M].blockDepth=Math.max(0,v[M].focalDistance-S),I.push(v[M])}}return{sectionId:e,rows:I,blockCount:y}}var cm=/^\d{4}-\d{2}-\d{2}$/;function lm(e){let t=Date.parse(e);return Number.isFinite(t)?cm.test(e)?t+864e5:t:null}function um(e,t=Date.now()){if(e.validUntil===void 0){if(e.status!=="approved")return!0;let o=e.assessedAt?Date.parse(e.assessedAt):Number.NaN;return Number.isFinite(o)&&(t instanceof Date?t.getTime():t)<=o+366*864e5}let n=lm(e.validUntil);return n===null?!1:(t instanceof Date?t.getTime():t)<n}function mm(e,t,n){return!(e.eventConfigurationId&&e.eventConfigurationId!==t||e.eventConfigurationVersion!==void 0&&e.eventConfigurationVersion!==n)}function fm(e){return e.status!=="draft"&&e.status!=="retracted"}function dm(e,t){return e.status===void 0?t===void 0:e.status!=="approved"?!0:typeof t=="string"&&typeof e.basisSha256=="string"&&e.basisSha256===t}function ji(e,t={}){return!!e&&fm(e)&&mm(e,t.activeConfigurationId,t.activeConfigurationVersion)&&dm(e,t.activeBasisSha256)&&um(e,t.now)}var hm=new Set(["pitch-football","rink-hockey","track-athletics","oval-cricket","pitch-rugby","diamond-baseball","court-basketball","court-tennis","ring-boxing"]),pm=new Set(["pitch-football","track-athletics","oval-cricket","pitch-rugby","diamond-baseball"]);function Et(e){return!!e&&hm.has(e)}function Yi(e){return!!e&&pm.has(e)}var jn=1.1,bm={"pitch-football":{width:105,height:68},"rink-hockey":{width:60,height:30},"track-athletics":{width:176.9,height:92.5},"oval-cricket":{width:150,height:140},"pitch-rugby":{width:120,height:70},"diamond-baseball":{width:140,height:140},"court-basketball":{width:32,height:19},"court-tennis":{width:36.57,height:18.29},"ring-boxing":{width:7.8,height:7.8}},ym={"pitch-football":"#2f7d4f","rink-hockey":"#e8f1f8","track-athletics":"#a4472f","oval-cricket":"#3d8a53","pitch-rugby":"#2f7d4f","diamond-baseball":"#2f7d4f","court-basketball":"#c8894f","court-tennis":"#3f7a5a","ring-boxing":"#2a4d8f"};var gm=Math.PI*2;function xm(e,t,n,o,r,i){return{x:r+e*n-t*o,y:i+e*o+t*n}}function Xi(e,t){let n=Math.max(0,e-t),o=[],r=20;for(let i=0;i<=r;i++){let a=-Math.PI/2+i/r*Math.PI;o.push({x:n+t*Math.cos(a),y:t*Math.sin(a)})}for(let i=0;i<=r;i++){let a=Math.PI/2+i/r*Math.PI;o.push({x:-n+t*Math.cos(a),y:t*Math.sin(a)})}return o}var Wi=(()=>{let t={x:0,y:52},n=25,o={x:70,y:t.y-70},r=(o.x*o.x+o.y*o.y-4900)/(2*(o.y+70)),i=r+70,a=[],s=Math.atan2(o.y-r,o.x),c=Math.atan2(o.y-r,-o.x);for(let u=0;u<=24;u++){let l=s+(c-s)*u/24;a.push({x:i*Math.cos(l),y:r+i*Math.sin(l)})}return{half:70,home:t,backstop:n,fence:a}})();var Xn="#f1f5f9";function yn(e){return Et(e)}function ft(e,t,n,o,r=32){let i=[];for(let a=0;a<r;a++){let s=a/r*gm;i.push({x:e+n*Math.cos(s),y:t+o*Math.sin(s)})}return i}function tt(e,t,n,o){return[{x:e-n,y:t-o},{x:e+n,y:t-o},{x:e+n,y:t+o},{x:e-n,y:t+o}]}function vm(e){let{kind:t,cx:n,cy:o,width:r,height:i}=e,a=(e.rotation??0)*Math.PI/180,s=Math.cos(a),c=Math.sin(a),u=r/2,l=i/2,m=[],h=bm[t],d=p=>h?p/h.width*r:0,f=p=>h?p/h.height*i:0;switch(t){case"pitch-football":{m.push({points:[{x:0,y:-l},{x:0,y:l}],closed:!1}),m.push({points:ft(0,0,d(9.15),f(9.15)),closed:!0});for(let p of[-1,1])m.push({points:tt(p*(u-d(16.5)/2),0,d(16.5)/2,f(40.32)/2),closed:!0}),m.push({points:tt(p*(u-d(5.5)/2),0,d(5.5)/2,f(18.32)/2),closed:!0});break}case"rink-hockey":{m.push({points:[{x:0,y:-l},{x:0,y:l}],closed:!1,ink:"#d63b3b"});for(let p of[-1,1]){m.push({points:[{x:p*d(7.5),y:-l},{x:p*d(7.5),y:l}],closed:!1,ink:"#2f6ecb"}),m.push({points:[{x:p*(u-d(4)),y:-f(11)},{x:p*(u-d(4)),y:f(11)}],closed:!1,ink:"#d63b3b"});for(let b of[-1,1])m.push({points:ft(p*d(20.5),b*f(7),d(4.5),f(4.5)),closed:!0,ink:"#2f6ecb"})}m.push({points:ft(0,0,d(4.5),f(4.5)),closed:!0,ink:"#2f6ecb"});break}case"track-athletics":{let b=l-f(1.22)*8;b>0&&m.push({points:Xi(u-d(1.22)*8,b),closed:!0,fill:"#2f7d4f"});for(let y=1;y<8;y++){let g=f(1.22)*y,x=l-g;if(x<=0)break;m.push({points:Xi(u-d(1.22)*y,x),closed:!0})}break}case"oval-cricket":{m.push({points:ft(0,0,d(27.4),f(27.4+20.12/2),40),closed:!0}),m.push({points:tt(0,0,d(3.05)/2,f(20.12)/2),closed:!0,ink:"#d8cfae"});break}case"pitch-rugby":{let p=b=>({points:[{x:d(b),y:-l},{x:d(b),y:l}],closed:!1});m.push(p(0));for(let b of[-1,1]){m.push(p(b*50),p(b*28));for(let y=-35;y<35;y+=4)m.push({points:[{x:d(b*10),y:f(y)},{x:d(b*10),y:f(Math.min(35,y+2))}],closed:!1})}break}case"diamond-baseball":{let p=(L,O)=>({x:d(L),y:f(O)}),{home:b}=Wi,y=27.43,g=y/Math.SQRT2,x={x:b.x+g,y:b.y-g},w={x:b.x,y:b.y-2*g},I={x:b.x-g,y:b.y-g},v={x:b.x,y:b.y-18.44},P="#b98a59",S=ym["diamond-baseball"],M=38.94,C=[p(b.x,b.y)],T=Math.atan2(b.y-M/Math.SQRT2-v.y,M/Math.SQRT2),N=Math.PI-T;for(let L=0;L<=16;L++){let O=T-(T+Math.PI*2-N)%(Math.PI*2)*(L/16);C.push(p(v.x+29*Math.cos(O),v.y+29*Math.sin(O)))}m.push({points:C,closed:!0,fill:P,ink:P});let D={x:b.x,y:b.y-g},R=[{x:b.x,y:b.y},x,w,I].map(L=>p(D.x+(L.x-D.x)*.84,D.y+(L.y-D.y)*.84));m.push({points:R,closed:!0,fill:S,ink:S}),m.push({points:ft(d(v.x),f(v.y),d(2.74),f(2.74),20),closed:!0,fill:P,ink:P}),m.push({points:ft(d(b.x),f(b.y),d(3.96),f(3.96),20),closed:!0,fill:P,ink:P});let A=Wi.fence;m.push({points:[p(b.x,b.y),p(A[0].x,A[0].y)],closed:!1}),m.push({points:[p(b.x,b.y),p(A[A.length-1].x,A[A.length-1].y)],closed:!1});for(let L of[x,w,I])m.push({points:tt(d(L.x),f(L.y),d(.3),f(.3)),closed:!0,fill:Xn});break}case"court-basketball":{m.push({points:tt(0,0,d(14),f(7.5)),closed:!0}),m.push({points:[{x:0,y:-f(7.5)},{x:0,y:f(7.5)}],closed:!1}),m.push({points:ft(0,0,d(1.8),f(1.8),24),closed:!0});for(let p of[-1,1]){let b=p*14,y=p*(14-5.8),g=p*(14-1.575);m.push({points:tt(d((b+y)/2),0,d(2.9),f(2.45)),closed:!0,fill:"#2f5d8a"}),m.push({points:ft(d(y),0,d(1.8),f(1.8),24),closed:!0});let x=Math.sqrt(6.75*6.75-6.6*6.6),w=[{x:d(b),y:-f(6.6)}],I=Math.atan2(-6.6,-p*x),v=2*Math.atan2(6.6,x);for(let P=0;P<=16;P++){let S=I-p*v*(P/16);w.push({x:d(g+6.75*Math.cos(S)),y:f(6.75*Math.sin(S))})}w.push({x:d(b),y:f(6.6)}),m.push({points:w,closed:!1})}break}case"court-tennis":{m.push({points:tt(0,0,d(11.885),f(5.485)),closed:!0,fill:"#2b5f99"});for(let p of[-1,1])m.push({points:[{x:-d(11.885),y:p*f(4.115)},{x:d(11.885),y:p*f(4.115)}],closed:!1}),m.push({points:[{x:p*d(6.4),y:-f(4.115)},{x:p*d(6.4),y:f(4.115)}],closed:!1});m.push({points:[{x:-d(6.4),y:0},{x:d(6.4),y:0}],closed:!1}),m.push({points:[{x:0,y:-f(6.4)},{x:0,y:f(6.4)}],closed:!1,ink:"#d1d5db"});break}case"ring-boxing":{m.push({points:tt(0,0,d(3.05),f(3.05)),closed:!0});let y=[[-1,-1,"#c53030"],[1,1,"#2b6cb0"],[1,-1,"#e2e8f0"],[-1,1,"#e2e8f0"]];for(let[g,x,w]of y)m.push({points:tt(g*d(3.05),x*f(3.05),d(.3),f(.3)),closed:!0,fill:w,ink:w});break}default:return[]}return m.map(p=>({...p,points:p.points.map(b=>xm(b.x,b.y,s,c,n,o))}))}function Ki(e){if(e.role!=="stage"||!yn(e.stageKind))return[];let t=null;if(e.x!=null&&e.y!=null&&e.width!=null&&e.height!=null&&e.width>0&&e.height>0&&[e.x,e.y,e.width,e.height].every(Number.isFinite))t={cx:e.x+e.width/2,cy:e.y+e.height/2,width:e.width,height:e.height};else if(e.points&&e.points.length>=3&&e.points.every(n=>Number.isFinite(n.x)&&Number.isFinite(n.y))){let n=e.points.map(l=>l.x),o=e.points.map(l=>l.y),r=Math.min(...n),i=Math.max(...n),a=Math.min(...o),s=Math.max(...o),c=Math.max(1,i-r),u=Math.max(1,s-a);t={cx:r+c/2,cy:a+u/2,width:c,height:u}}return t?vm({kind:e.stageKind,...t}):[]}var Mm=/^data:image\/(?:png|jpe?g|webp|gif|avif);base64,[a-z0-9+/]+={0,2}$/i,Sm=/[\s"'<>`\\]/;function wm(e){if(typeof e!="string"||!e||e.length>2e6||e!==e.trim())return!1;if(e.startsWith("data:"))return Mm.test(e);if(Sm.test(e))return!1;try{let t=new URL(e);return t.protocol==="https:"&&!t.username&&!t.password}catch{return!1}}function qi(e){let t=e.trim();return wm(t)?t:null}var er="seatlayer.event-configuration/1";var Vt=100,Pm=120,Im=2e5,Cm=1e4,Rm=/^[a-f0-9]{64}$/,Am=new Set(["stage","screen","barrier","camera_platform","sound_desk","rigging_truss"]);function gn(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function _t(e,t){return typeof e=="string"&&e.length>=1&&e.length<=t&&e.normalize("NFKC").trim()===e}function Em(e){return typeof e=="number"&&Number.isInteger(e)&&e>0}function $i(e){return!Array.isArray(e)||e.length>Im||!e.every(t=>_t(t,Vt))?null:[...new Set(e)].sort()}function _m(e){return!gn(e)||!_t(e.chartId,Vt)||!_t(e.version,Vt)||e.sha256!==void 0&&(typeof e.sha256!="string"||!Rm.test(e.sha256))?null:{chartId:e.chartId,version:e.version,...typeof e.sha256=="string"?{sha256:e.sha256}:{}}}function tr(e,t,n){return typeof e=="number"&&Number.isFinite(e)&&e>=t&&e<=n}function Tm(e){return gn(e)?e.mode==="none"||e.mode==="opaque"?e.opacity===void 0?{mode:e.mode}:null:e.mode==="partial"&&tr(e.opacity,.01,.99)?{mode:"partial",opacity:e.opacity}:null:null}function km(e,t){if(e===void 0)return;if(!Array.isArray(e)||e.length>Cm)return null;let n=new Set(t),o=new Set,r=new Set,i=0,a=[];for(let s of e){if(!gn(s)||!_t(s.id,Vt)||!_t(s.objectId,Vt)||!n.has(s.objectId)||!Am.has(String(s.kind))||!tr(s.heightM,.05,50)||s.baseElevationM!==void 0&&!tr(s.baseElevationM,-10,100))return null;let c=Tm(s.occlusion);if(!c||o.has(s.id)||r.has(s.objectId))return null;let u=s.contentImageUrl===void 0?void 0:typeof s.contentImageUrl=="string"?qi(s.contentImageUrl):null;if(s.contentImageUrl!==void 0&&(!u||s.kind!=="screen"||++i>1))return null;o.add(s.id),r.add(s.objectId),a.push({id:s.id,objectId:s.objectId,kind:s.kind,heightM:s.heightM,...s.baseElevationM!==void 0?{baseElevationM:s.baseElevationM}:{},occlusion:c,...u?{contentImageUrl:u}:{}})}return a.sort((s,c)=>s.id.localeCompare(c.id))}function Lm(e){let t=[];if(!gn(e))return{issues:[{code:"invalid_export",path:"configuration",message:"Configuration must be an object"}]};e.schema!==er&&t.push({code:"unsupported_schema",path:"configuration.schema",message:`Configuration schema must be ${er}`}),_t(e.id,Vt)||t.push({code:"invalid_id",path:"configuration.id",message:"Configuration id must contain 1 to 100 normalized characters"}),_t(e.label,Pm)||t.push({code:"invalid_label",path:"configuration.label",message:"Configuration label must contain 1 to 120 normalized characters"}),Em(e.version)||t.push({code:"invalid_version",path:"configuration.version",message:"Configuration version must be a positive integer"});let n=_m(e.baseVenue);n||t.push({code:"invalid_base_venue",path:"configuration.baseVenue",message:"Base venue must identify one normalized chart id and exact version"});let o=gn(e.overlay)?e.overlay:null,r=$i(o?.objectIds),i=$i(o?.productionKillSeatIds),a=r?km(o?.productionElements,r):null;return(!o||!r||!i)&&t.push({code:"invalid_overlay",path:"configuration.overlay",message:"Overlay ids must be bounded arrays of normalized stable ids"}),a===null&&t.push({code:"invalid_production_element",path:"configuration.overlay.productionElements",message:"Production elements must be unique, bounded semantics over referenced base-venue objects"}),t.length||!n||!r||!i||a===null?{issues:t}:{issues:t,value:{schema:er,id:e.id,label:e.label,version:e.version,baseVenue:n,overlay:{objectIds:r,productionKillSeatIds:i,...a!==void 0?{productionElements:a}:{}}}}}function Zi(e){let t=Lm(e);return t.value?{ok:!0,value:t.value}:{ok:!1,issues:t.issues}}function Fm(e){if((e.kind==="polygon"||e.kind==="polyline"||e.kind==="line")&&e.points&&e.points.length>=2)return e.points;if(e.x==null||e.y==null||e.width==null||e.height==null)return null;let t=e.x,n=e.y,o=e.width,r=e.height;return[{x:t,y:n},{x:t+o,y:n},{x:t+o,y:n+r},{x:t,y:n+r}]}function Dm(e,t,n){let o=n*Math.PI/180,r=Math.cos(o),i=Math.sin(o),a=e.x-t.x,s=e.y-t.y;return{x:t.x+a*r-s*i,y:t.y+a*i+s*r}}function Qi(e){let t=Fm(e);if(!t||t.length<2)return null;let n=e.rotation??0,o=Math.abs(n)<1e-6?t:t.map(c=>Dm(c,{x:t.reduce((u,l)=>u+l.x,0)/t.length,y:t.reduce((u,l)=>u+l.y,0)/t.length},n)),r=1/0,i=1/0,a=-1/0,s=-1/0;for(let c of o)r=Math.min(r,c.x),i=Math.min(i,c.y),a=Math.max(a,c.x),s=Math.max(s,c.y);return!Number.isFinite(r)||a-r<1e-6||s-i<1e-6?null:{minX:r,minY:i,maxX:a,maxY:s}}var Om=5,Bm=3,Nm=.92,Vm=1.9,Gm=2,Hm=.6,zm=1,Um=.06;function jm(e){return e.heightM!==void 0?e.heightM:e.stageKind==="ring-boxing"?jn:yn(e.stageKind)?Um:zm}function Ji(e){let t=1/0,n=1/0,o=-1/0,r=-1/0,i=-1/0;for(let a of na(e)){let s=a.baseHeightM??0;for(let c of a.objects){if(c.type!=="shape"||c.role!=="stage")continue;let u=Qi(c);u&&(t=Math.min(t,u.minX),n=Math.min(n,u.minY),o=Math.max(o,u.maxX),r=Math.max(r,u.maxY),i=Math.max(i,s+jm(c)))}}return!Number.isFinite(t)||!Number.isFinite(i)?null:{minX:t,minY:n,maxX:o,maxY:r,deckTopM:i}}function Xm(e,t,n,o){let r=1/0,i=1/0,a=-1/0,s=-1/0;for(let d of e)Number.isFinite(d.eyeHeightM)&&(r=Math.min(r,d.x),a=Math.max(a,d.x),i=Math.min(i,d.y),s=Math.max(s,d.y));if(!Number.isFinite(r))return null;let c=r*t,u=i*t,l=Math.max(1,Math.ceil((a-r)*t/n)+1),m=Math.max(1,Math.ceil((s-i)*t/n)+1),h=new Float64Array(l*m).fill(-1/0);for(let d of e){if(!Number.isFinite(d.eyeHeightM))continue;let f=d.eyeHeightM-We,p=Math.min(l-1,Math.max(0,Math.floor((d.x*t-c)/n))),y=Math.min(m-1,Math.max(0,Math.floor((d.y*t-u)/n)))*l+p,g=f+o;g>h[y]&&(h[y]=g)}return{cellM:n,minX:c,minY:u,cols:l,rows:m,top:h}}function Wm(e,t,n){let o=Math.floor((t-e.minX)/e.cellM),r=Math.floor((n-e.minY)/e.cellM);return o<0||r<0||o>=e.cols||r>=e.rows?-1/0:e.top[r*e.cols+o]}function ea(e,t,n={}){let o=new Map;if(!t||!e.length)return o;let r=n.metresPerChartUnit??le,i=n.cellM??Hm,a=n.chairBackM??Nm,s=n.selfRowSkipM??Gm,c=n.clearThreshold??.9,u=n.partialThreshold??.25,l=Math.max(1,n.columns??Om),m=Math.max(1,n.rows??Bm),h=Xm(e,r,i,a);if(!h)return o;let d=(t.maxX-t.minX)*r,f=(t.maxY-t.minY)*r,p=d>=f,b=(t.minX+t.maxX)/2*r,y=(t.minY+t.maxY)/2*r,g=[];for(let w=0;w<l;w++){let I=(w+.5)/l-.5,v=p?b+I*d:b,P=p?y:y+I*f;for(let S=0;S<m;S++){let M=t.deckTopM+(m===1?0:S/(m-1)*Vm);g.push({x:v,y:P,z:M})}}let x=i/2;for(let w of e){if(!Number.isFinite(w.eyeHeightM))continue;let I=w.x*r,v=w.y*r,P=w.eyeHeightM,S=0,M=1/0;for(let T of g){let N=T.x-I,D=T.y-v,R=Math.hypot(N,D);if(!(R>s)){S++;continue}let A=N/R,L=D/R,O=0;for(let _=s;_<R;_+=x){let k=Wm(h,I+A*_,v+L*_);if(!(!Number.isFinite(k)||k>=P)&&k>P+(T.z-P)*_/R){O=_;break}}O?M=Math.min(M,O):S++}let C=S/g.length;C>=c||o.set(w.id,{seatId:w.id,mark:C<u?"obstructedView":"restrictedView",visibleFraction:C,totalRays:g.length,atDistanceM:Number.isFinite(M)?M:0})}return o}function ta(e,t){if(!t.size)return 0;let n=0;for(let o of e){let r=t.get(o.id);if(!r)continue;let i=o.commercial;i?.restrictedView!==void 0||i?.obstructedView!==void 0||(o.commercial={...i,[r.mark]:!0},n++)}return n}function nr(e){return e?e.accessibility?.length?e.wheelchairSpaceType&&!e.accessibility.includes("wheelchair")?["wheelchair",...e.accessibility]:e.accessibility:e.wheelchairSpaceType?["wheelchair"]:e.accessible?["wheelchair"]:[]:[]}var Yn=Math.PI/180;var xn=16;function or(e,t,n,o){let r=n*Yn,i=Math.cos(r),a=Math.sin(r);return{x:o.x+e*i-t*a,y:o.y+e*a+t*i}}function sa(e){let{seatCount:t,seatSpacing:n,curve:o,rotation:r,origin:i}=e,a=[];if(e.path)return Ni(e.path,t);if(t<=1)return t===1&&a.push({x:i.x,y:i.y}),a;if(o===0){for(let u=0;u<t;u++)a.push(or(u*n,0,r,i));return a}let s=o/(t-1)*Yn,c=n/(2*Math.sin(Math.abs(s)/2));for(let u=0;u<t;u++){let l=u*s,m=c*Math.sin(l),h=-c+c*Math.cos(l);a.push(or(m,h,r,i))}return a}function ca(e){let t=new Map;if(e.overrides)for(let n of e.overrides)t.set(n.index,n);return t}function Ym(e,t){let n=ca(e);return sa(e).map((o,r)=>{let i=n.get(r),a=nr(i),s=Hi(e,r,i),c={...e.commercial,...i?.commercial};return{index:r,x:o.x+(i?.dx??0),y:o.y+(i?.dy??0),label:s,displayLabel:Zo(e,r,t,i),categoryKey:i?.categoryKey??e.categoryKey,skipped:!!i?.skip,accessible:a.length>0,accessibility:a,wheelchairSpaceType:i?.wheelchairSpaceType,commercial:Object.values(c).some(u=>u!==void 0&&u!==!1&&u!=="")?c:void 0,glyph:i?.glyph,viewUrl:i?.viewFromSeatUrl??e.viewFromSeatUrl,viewMeta:i?.viewFromSeatUrl?i.viewFromSeatMeta:e.viewFromSeatMeta,labelStyle:i?.labelStyle??e.seatLabelStyle}})}function Km(e){let t=[];for(let n of Ym(e))n.skipped||t.push({id:`${e.id}:${n.index}`,label:n.label,displayLabel:n.displayLabel===n.label?void 0:n.displayLabel,x:n.x,y:n.y,rowId:e.id,categoryKey:n.categoryKey,accessible:n.accessible||void 0,accessibility:n.accessibility.length?n.accessibility:void 0,wheelchairSpaceType:n.wheelchairSpaceType,commercial:n.commercial,glyph:n.glyph,viewUrl:n.viewUrl,viewMeta:n.viewMeta,labelStyle:n.labelStyle});return t}function qm(e){if(e.seatCountsBySide)return{...e.seatCountsBySide};let t=e.sides&&e.sides.length?e.sides:["top","bottom"],n=["top","bottom","left","right"].filter(i=>t.includes(i)),o={top:0,bottom:0,left:0,right:0};if(!n.length)return o;let r=Math.max(0,Math.round(e.seatCount));for(let i=0;i<r;i++)o[n[i%n.length]]+=1;return o}function $m(e){let t=[],n=Math.max(0,Math.round(e.seatCount));if(n===0)return t;let o=new Map((e.overrides??[]).map(l=>[l.index,l])),r=(l,m,h,d)=>{let f=o.get(l),p=nr(f),b=f?.label??`${e.label}-${l+1}`,y=e.displayLabel??e.label;return{index:l,label:b,displayLabel:f?.displayLabel??`${y}-${l+1}`,x:m+(f?.dx??0),y:h+(f?.dy??0),categoryKey:f?.categoryKey??e.categoryKey,skipped:!!f?.skip,accessible:p.length>0,accessibility:p,wheelchairSpaceType:f?.wheelchairSpaceType,commercial:f?.commercial,glyph:f?.glyph,viewUrl:f?.viewFromSeatUrl,viewMeta:f?.viewFromSeatUrl?f.viewFromSeatMeta:void 0,labelStyle:f?.labelStyle,...d?{side:d}:{}}};if(e.shape==="round"){let l=(e.radius??40)+xn,m=e.rotation*Yn,h=Math.max(0,Math.min(360,e.seatArc??360));if(h>=360||n===1){for(let b=0;b<n;b++){let y=m+b/n*2*Math.PI;t.push(r(b,e.center.x+l*Math.cos(y),e.center.y+l*Math.sin(y)))}return t}let d=h*Yn,f=(2*Math.PI-d)/2,p=m+f;for(let b=0;b<n;b++){let y=p+b/(n-1)*d;t.push(r(b,e.center.x+l*Math.cos(y),e.center.y+l*Math.sin(y)))}return t}let i=e.width??80,a=e.height??50,s=qm(e),c=["top","bottom","left","right"],u=0;for(let l of c){let m=s[l];for(let h=0;h<m;h++){let d,f;l==="top"?(d=-i/2+(h+.5)*i/m,f=-a/2-xn):l==="bottom"?(d=-i/2+(h+.5)*i/m,f=a/2+xn):l==="left"?(d=-i/2-xn,f=-a/2+(h+.5)*a/m):(d=i/2+xn,f=-a/2+(h+.5)*a/m);let p=or(d,f,e.rotation,e.center);t.push(r(u++,p.x,p.y,l))}}return t}function Zm(e){return $m(e).filter(t=>!t.skipped).map(t=>({id:`${e.id}:${t.index}`,label:t.label,...t.displayLabel!==t.label?{displayLabel:t.displayLabel}:{},x:t.x,y:t.y,rowId:e.id,categoryKey:t.categoryKey,...t.accessible?{accessible:!0}:{},...t.accessibility.length?{accessibility:t.accessibility}:{},...t.wheelchairSpaceType?{wheelchairSpaceType:t.wheelchairSpaceType}:{},...t.commercial?{commercial:t.commercial}:{},...t.glyph?{glyph:t.glyph}:{},...t.viewUrl?{viewUrl:t.viewUrl}:{},...t.viewUrl&&t.viewMeta?{viewMeta:t.viewMeta}:{},...t.labelStyle?{labelStyle:t.labelStyle}:{}}))}function Qm(e){return[{id:`${e.id}:0`,label:e.label,...e.displayLabel&&e.displayLabel!==e.label?{displayLabel:e.displayLabel}:{},x:e.center.x,y:e.center.y,rowId:e.id,categoryKey:e.categoryKey,kind:"booth"}]}function oa(e,t){let n=!1;for(let o=0,r=t.length-1;o<t.length;r=o++){let i=t[o].x,a=t[o].y,s=t[r].x,c=t[r].y;a>e.y!=c>e.y&&e.x<(s-i)*(e.y-a)/(c-a)+i&&(n=!n)}return n}function Jm(e,t){return t.some((n,o)=>{let r=t[(o+1)%t.length],i=(e.y-n.y)*(r.x-n.x)-(e.x-n.x)*(r.y-n.y);if(Math.abs(i)>1e-7)return!1;let a=(e.x-n.x)*(r.x-n.x)+(e.y-n.y)*(r.y-n.y),s=(r.x-n.x)**2+(r.y-n.y)**2;return a>=-1e-7&&a<=s+1e-7})}function rr(e){return Array.isArray(e)?e.filter(t=>Array.isArray(t)&&t.length>=3):[]}function _e(e,t,n){return oa(e,t)&&!rr(n).some(o=>oa(e,o)||Jm(e,o))}function Wn(e){if(!e.length)return{x:0,y:0};let t=0,n=0;for(let o of e)t+=o.x,n+=o.y;return{x:t/e.length,y:n/e.length}}function la(e){switch(e.type){case"row":{let t=sa(e),n=ca(e),o=0,r=0,i=0;for(let a=0;a<t.length;a++){let s=n.get(a);s?.skip||(o+=t[a].x+(s?.dx??0),r+=t[a].y+(s?.dy??0),i++)}return i?{x:o/i,y:r/i}:{x:e.origin.x,y:e.origin.y}}case"table":case"booth":return{x:e.center.x,y:e.center.y};case"gaArea":return Wn(e.points);case"section":return Wn(e.outline);case"text":return{x:e.position.x,y:e.position.y};case"shape":return e.points&&e.points.length?Wn(e.points):e.x!=null&&e.y!=null&&e.width!=null&&e.height!=null?{x:e.x+e.width/2,y:e.y+e.height/2}:{x:e.x??0,y:e.y??0};case"decorImage":return{x:e.x+e.width/2,y:e.y+e.height/2}}}function ra(e,t){return e.length===t.length&&e.every((n,o)=>n.x===t[o].x&&n.y===t[o].y)}function ef(e,t){if(e.type!=="gaArea"||!ra(e.points,t.outline))return!1;let n=rr(e.holes),o=rr(t.holes);return n.length===o.length&&n.every((r,i)=>ra(r,o[i]))}function tf(e,t,n=e.filter(r=>r.type==="section"),o=la(t)){let r="referenceInventorySource"in t?t.referenceInventorySource?.logicalSectionId:void 0;return(r?n.find(a=>(a.logicalSectionId??a.id)===r&&(ef(t,a)||_e(o,a.outline,a.holes))):void 0)??n.find(a=>_e(o,a.outline,a.holes))}function na(e){return e.floors&&e.floors.length?e.floors:[{id:"floor-0",name:"Main",objects:e.objects,focalPoint:e.focalPoint,referenceImage:e.referenceImage,backgroundImage:e.backgroundImage}]}function ia(e,t,n,o,r,i,a,s,c){let u=[],l=e.filter(p=>p.type==="section"),m=Vi(e),h=p=>!p?.eventConfigurationId||p.eventConfigurationId===o&&(p.eventConfigurationVersion===void 0||p.eventConfigurationVersion===c),d=p=>ji(p,{activeConfigurationId:o,activeConfigurationVersion:c,activeBasisSha256:r,now:s}),f=(p,b)=>d(p)?{...p,coverage:b}:void 0;for(let p of e){let b=[];if(p.type==="row"?b=Km(p):p.type==="table"?b=Zm(p):p.type==="booth"&&(b=Qm(p)),!b.length)continue;for(let I of b)I.viewUrl&&!h(I.viewMeta)&&(I.viewUrl=void 0,I.viewMeta=void 0);if(p.type==="row"){let I=m.get(p.id);if(I){let v=new Map((p.overrides??[]).map(P=>[P.index,P]));for(let P of b){let S=Number(P.id.slice(P.id.lastIndexOf(":")+1));if(!Number.isInteger(S))continue;P.logicalRowId=I.groupId,P.logicalSeatIndex=I.adjacencyOffset+S,v.get(S)?.displayLabel||(P.displayLabel=Zo(p,S,I)),!P.viewUrl&&I.viewFromSeatUrl&&h(I.viewFromSeatMeta)&&(P.viewUrl=I.viewFromSeatUrl,P.viewMeta=I.viewFromSeatMeta);let M=v.get(S)?.confidenceEvidence;P.confidenceEvidence=f(M,"exact-seat")??f(p.confidenceEvidence,"row-representative")??f(I.confidenceEvidence,"row-representative")}}}let y=tf(e,p,l,p.type==="row"?Wn(b):la(p)),g=y?.viewFromSeatUrl,w=(y?.zone?t?.find(I=>I.id===y.zone):void 0)?.focalPoint??n;for(let I of b){if(!I.confidenceEvidence){let v=Number(I.id.slice(I.id.lastIndexOf(":")+1)),P=(p.type==="row"||p.type==="table")&&Number.isInteger(v)?p.overrides?.find(S=>S.index===v)?.confidenceEvidence:void 0;I.confidenceEvidence=f(P,"exact-seat")??(p.type==="row"?f(p.confidenceEvidence,"row-representative"):void 0)}I.confidenceEvidence??=f(y?.confidenceEvidence,"section-representative")??(a?f(a.evidence,a.coverage):void 0),!I.viewUrl&&g&&h(y?.viewFromSeatMeta)&&(I.viewUrl=g,I.viewMeta=y?.viewFromSeatMeta),!I.viewUrl&&i&&h(i.meta)&&(I.viewUrl=i.url,I.viewMeta=i.meta),y&&(I.sectionId=y.logicalSectionId??y.id),y?.zone&&(I.zoneId=y.zone),w&&(I.focalPoint={...w})}u.push(...b)}return u}function Gt(e,t={}){if(e.floors?.length){let o=[];for(let r of e.floors){let i=r.focalPoint??e.focalPoint,a=r.viewFromSeatUrl?{url:r.viewFromSeatUrl,meta:r.viewFromSeatMeta}:e.viewFromSeatUrl?{url:e.viewFromSeatUrl,meta:e.viewFromSeatMeta}:void 0,s=r.confidenceEvidence?{evidence:r.confidenceEvidence,coverage:"floor-representative"}:e.confidenceEvidence?{evidence:e.confidenceEvidence,coverage:"venue-representative"}:void 0,c=ia(r.objects,e.zones,i,e.eventConfigurationId,e.confidenceBasisSha256,a,s,t.now,t.eventConfigurationVersion??e.eventConfigurationVersion);t.resolveEyeHeights!==!1&&aa(r.objects,r.focalPoint??e.focalPoint,r.baseHeightM??0,c);for(let u of c)u.floorId=r.id;for(let u of c)o.push(u)}return o}let n=ia(e.objects,e.zones,e.focalPoint,e.eventConfigurationId,e.confidenceBasisSha256,e.viewFromSeatUrl?{url:e.viewFromSeatUrl,meta:e.viewFromSeatMeta}:void 0,e.confidenceEvidence?{evidence:e.confidenceEvidence,coverage:"venue-representative"}:void 0,t.now,t.eventConfigurationVersion??e.eventConfigurationVersion);return t.resolveEyeHeights!==!1&&aa(e.objects,e.focalPoint,t.floorBaseHeightM??0,n),nf(e,n,t)}function nf(e,t,n){return!n.deriveRestrictedView||e.derivedRestrictedView===!1||n.resolveEyeHeights===!1||ta(t,ea(t,Ji(e))),t}function aa(e,t,n,o){let r=e.filter(m=>m.type==="section"),i=n>0||r.some(m=>m.height!==void 0||m.rake!==void 0||(m.elevation??0)>0);if(!r.length||!i||!t){for(let m of o)m.eyeHeightM=n+We;return}let a=new Array(o.length),s=new Map;for(let m of r)s.has(m.id)||s.set(m.id,m);let c=new Map,u=new Map;for(let m=0;m<o.length;m++){let h=o[m],f=(h.sectionId?s.get(h.sectionId)??r.find(b=>b.logicalSectionId===h.sectionId&&_e({x:h.x,y:h.y},b.outline,b.holes)):void 0)??r.find(b=>_e({x:h.x,y:h.y},b.outline,b.holes))??null;if(a[m]=f,!f)continue;c.has(f.id)||c.set(f.id,mt(f,{floorBaseHeightM:n}));let p=u.get(f.id);p?p.push(m):u.set(f.id,[m])}let l=new Array(o.length).fill(void 0);for(let[m,h]of u){let d=c.get(m);if(!d)continue;let f=d.rake>0?Math.tan(d.rake*Math.PI/180):0,p=Un(m,o,h,t);for(let b of p.rows){let y=b.blockDepth*le*f,g=d.height+y;for(let x of b.seatIndices)l[x]=g}}for(let m=0;m<o.length;m++){let h=o[m],d=a[m];if(!d){h.eyeHeightM=n+We;continue}let f=c.get(d.id);h.eyeHeightM=(l[m]??f.height)+We}}function of(e){return{kind:"radial",rowCount:0,rows:[],nearestRow:()=>-1,depthAt:(t,n)=>Math.hypot(t-e.x,n-e.y),gradientAt:(t,n)=>{let o=t-e.x,r=n-e.y,i=Math.hypot(o,r);return i<1e-9?[0,0]:[o/i,r/i]}}}function rf(e,t){if(!e.length)return null;let n=0,o=0,r=0;for(let d of e)n+=d.x,o+=d.y,r+=Math.hypot(d.x-t.x,d.y-t.y);let i=e.length;n/=i,o/=i,r/=i;let a=e[0],s=-1;for(let d of e){let f=Math.hypot(d.x-n,d.y-o);f>s&&(s=f,a=d)}let c=a.x-n,u=a.y-o,l=Math.hypot(c,u);l>1e-9?(c/=l,u/=l):(c=1,u=0);let m=[...e].sort((d,f)=>(d.x-n)*c+(d.y-o)*u-((f.x-n)*c+(f.y-o)*u)),h=0;for(let d of m){let f=Math.hypot(d.x-n,d.y-o);f>h&&(h=f)}return{pts:m,cx:n,cy:o,radius:h,depth:r}}function ua(e,t,n){let o=e.pts;if(o.length===1)return Math.hypot(t-o[0].x,n-o[0].y);let r=1/0;for(let i=0;i+1<o.length;i++){let a=o[i],s=o[i+1],c=s.x-a.x,u=s.y-a.y,l=c*c+u*u,m=l>1e-12?((t-a.x)*c+(n-a.y)*u)/l:0;m<0?m=0:m>1&&(m=1);let h=Math.hypot(t-(a.x+m*c),n-(a.y+m*u));h<r&&(r=h)}return r}var Kn=8;function af(e,t,n){let o=new Array(Kn).fill(1/0),r=new Array(Kn).fill(-1);for(let l=0;l<e.length;l++){let m=e[l],h=Math.hypot(t-m.cx,n-m.cy)-m.radius;for(let d=0;d<Kn;d++)if(h<o[d]){for(let f=Kn-1;f>d;f--)o[f]=o[f-1],r[f]=r[f-1];o[d]=h,r[d]=l;break}}let i=new Array(3).fill(1/0),a=new Array(3).fill(-1);for(let l of r){if(l<0)continue;let m=ua(e[l],t,n);for(let h=0;h<3;h++)if(m<i[h]){for(let d=2;d>h;d--)i[d]=i[d-1],a[d]=a[d-1];i[h]=m,a[h]=l;break}}if(a[0]<0)return 0;if(i[0]<1e-6)return e[a[0]].depth;let s=i[0]*2.2,c=0,u=0;for(let l=0;l<3;l++){let m=a[l];if(m<0||i[l]>s)continue;let h=1/(i[l]*i[l]);c+=h*e[m].depth,u+=h}return u>0?c/u:e[a[0]].depth}function sf(e){let t=(o,r)=>af(e,o,r),n=(o,r)=>{let i=1/0,a=-1;for(let s=0;s<e.length;s++){let c=e[s];if(Math.hypot(o-c.cx,r-c.cy)-c.radius>=i)continue;let u=ua(c,o,r);u<i&&(i=u,a=s)}return a};return{kind:"rows",rowCount:e.length,rows:e,nearestRow:n,depthAt:t,gradientAt:(o,r)=>{let i=(t(o+.5,r)-t(o-.5,r))/1,a=(t(o,r+.5)-t(o,r-.5))/(2*.5),s=Math.hypot(i,a);return s<1e-9?[0,0]:[i/s,a/s]}}}function ma(e,t){let n=[];for(let o of e){let r=rf(o.points,t);r&&n.push(r)}return n.length<2?of(t):(n.sort((o,r)=>o.depth-r.depth),sf(n))}var sr=lt(require("polygon-clipping"),1);var pa=lt(require("earcut"),1);var cf=.58,fa=.01,Ge=et*1.5*Ve,lf=.5,uf=.6;function mf(e,t){let n=e.length,o=[];for(let a=0;a<n;a++){let s=e[Math.max(0,a-1)],c=e[Math.min(n-1,a+1)],u=c.x-s.x,l=c.y-s.y,m=Math.hypot(u,l);if(m<1e-9){o.push([0,0]);continue}u/=m,l/=m,o.push([-l,u])}let r=0;for(let a=0;a<n;a++)r+=(e[a].x-t.x)*o[a][0]+(e[a].y-t.y)*o[a][1];return r<0?o.map(([a,s])=>[-a,-s]):o}function ff(e,t){if(e.length<2||t<=0)return[...e];let n=[...e],o=(a,s)=>{let c=s.x-a.x,u=s.y-a.y,l=Math.hypot(c,u)||1;return{x:c/l,y:u/l}},r=o(n[1],n[0]),i=o(n[n.length-2],n[n.length-1]);return n.unshift({x:n[0].x+r.x*t,y:n[0].y+r.y*t}),n.push({x:n[n.length-1].x+i.x*t,y:n[n.length-1].y+i.y*t}),n}var da=Math.PI/12;function df(e){if(e.length<3)return[...e];let t=[...e].sort((i,a)=>i.x-a.x||i.y-a.y),n=(i,a,s)=>(a.x-i.x)*(s.y-i.y)-(a.y-i.y)*(s.x-i.x),o=i=>{let a=[];for(let s of i){for(;a.length>=2&&n(a[a.length-2],a[a.length-1],s)<=0;)a.pop();a.push(s)}return a.pop(),a},r=[...o(t),...o([...t].reverse())];return r.length>=3?r:[...e]}function ba(e,t){if(!e.length||!(t>0))return[];let n=df(e),o=(s,c,u,l)=>{let m=u-c;for(;m<0;)m+=Math.PI*2;for(;m>Math.PI*2;)m-=Math.PI*2;let h=Math.max(1,Math.ceil(m/da)),d=t/Math.cos(m/h/2);for(let f=0;f<=h;f++){let p=c+m*f/h;l.push({x:s.x+Math.cos(p)*d,y:s.y+Math.sin(p)*d})}};if(n.length<3){let s=0,c=0;for(let d of n)s+=d.x,c+=d.y;s/=n.length||1,c/=n.length||1;let u=0;for(let d of n)u=Math.max(u,Math.hypot(d.x-s,d.y-c));let l=[],m=Math.max(3,Math.ceil(Math.PI*2/da)),h=(u+t)/Math.cos(Math.PI/m);for(let d=0;d<m;d++){let f=d/m*Math.PI*2;l.push({x:s+Math.cos(f)*h,y:c+Math.sin(f)*h})}return l}let r=n.length,i=[];for(let s=0;s<r;s++){let c=n[s],u=n[(s+1)%r];i.push(Math.atan2(-(u.x-c.x),u.y-c.y))}let a=[];for(let s=0;s<r;s++)o(n[s],i[(s+r-1)%r],i[s],a);return Ma(a)}function hf(e,t,n){if(e.length===1)return Math.hypot(t-e[0].x,n-e[0].y);let o=1/0;for(let r=0;r+1<e.length;r++){let i=e[r],a=e[r+1],s=a.x-i.x,c=a.y-i.y,u=s*s+c*c,l=u>1e-12?((t-i.x)*s+(n-i.y)*c)/u:0;l<0?l=0:l>1&&(l=1);let m=Math.hypot(t-(i.x+l*s),n-(i.y+l*c));m<o&&(o=m)}return o}function qn(e){let t=e.map(r=>{let i=0,a=0;for(let u of r.pts)i+=u.x,a+=u.y;let s=r.pts.length||1;i/=s,a/=s;let c=0;for(let u of r.pts){let l=Math.hypot(u.x-i,u.y-a);l>c&&(c=l)}return{cx:i,cy:a,rad:c}}),n=r=>{let i=r.length;return i<=2?[...r]:[r[Math.floor(i*.25)],r[Math.floor(i*.5)],r[Math.floor(i*.75)]]},o=[];for(let r=0;r<e.length;r++){let i=n(e[r].pts),a=[],s=1/0,c=null;for(let l of i){let m=1/0;for(let h=0;h<e.length;h++){if(h===r||Math.abs(e[h].y-e[r].y)<.001)continue;let d=t[h],f=Math.hypot(l.x-d.cx,l.y-d.cy)-d.rad;if(f>=m&&f>=s)continue;let p=hf(e[h].pts,l.x,l.y);p<m&&(m=p),e[h].depth<e[r].depth&&p<s&&(s=p,c=e[h].y)}Number.isFinite(m)&&m>0&&a.push(m)}a.sort((l,m)=>l-m);let u=a.length?a[Math.floor(a.length/2)]:1;o.push({pitch:u,belowY:c})}return o}function ya(e,t,n,o){let r=e[t],i=r.pts.length>=2?[...r.pts]:r.pts.length===1?(()=>{let l=r.pts[0],m=l.x-o.x,h=l.y-o.y,d=Math.hypot(m,h)||1;m/=d,h/=d;let f=Math.max(n[t].pitch,.001)*.5;return[{x:l.x+h*f,y:l.y-m*f},{x:l.x-h*f,y:l.y+m*f}]})():[];if(i.length<2)return null;let a=0,s=0;for(let l=1;l<i.length;l++){let m=Math.hypot(i[l].x-i[l-1].x,i[l].y-i[l-1].y);m>1e-6&&(a+=m,s++)}let c=s>0?a/s:0,u=ff(i,Math.max(c*uf,Ge));return{pts:u,nrm:mf(u,o),front:Math.max(n[t].pitch*cf,Ge),back:Math.max(n[t].pitch*lf,Ge)}}var Ht=1.5,ga=.3;function ir(e,t){if(e.length<3)return e;let n=e[0],o=e[e.length-1],r=o.x-n.x,i=o.y-n.y,a=Math.hypot(r,i),s=-1,c=-1;for(let m=1;m<e.length-1;m++){let h=e[m],d=a>1e-12?Math.abs((h.x-n.x)*i-(h.y-n.y)*r)/a:Math.hypot(h.x-n.x,h.y-n.y);d>s&&(s=d,c=m)}if(s<=t||c<0)return[n,o];let u=ir(e.slice(0,c+1),t),l=ir(e.slice(c),t);return[...u.slice(0,-1),...l]}function xa(e,t){if(e.length<4)return e;let n=ir([...e,e[0]],t);return n.pop(),n.length>=3?n:e}function pf(e){let t=e.map((o,r)=>{let i=e[(r+1)%e.length];return{a:o,b:i,i:r,minX:Math.min(o.x,i.x),maxX:Math.max(o.x,i.x),minY:Math.min(o.y,i.y),maxY:Math.max(o.y,i.y)}}).sort((o,r)=>o.minX-r.minX),n=(o,r,i)=>(r.x-o.x)*(i.y-o.y)-(r.y-o.y)*(i.x-o.x);for(let o=0;o<t.length;o++){let r=t[o];for(let i=o+1;i<t.length&&t[i].minX<=r.maxX;i++){let a=t[i];if(!(Math.abs(r.i-a.i)===1||Math.abs(r.i-a.i)===e.length-1||r.maxY<a.minY||a.maxY<r.minY)&&n(r.a,r.b,a.a)*n(r.a,r.b,a.b)<=0&&n(a.a,a.b,r.a)*n(a.a,a.b,r.b)<=0)return!0}}return!1}function va(e,t,n){if(e.length<2)return[];let o=n??qn(e),r=new Map;for(let a=0;a<e.length;a++){let s=r.get(e[a].blockId);s?s.push(a):r.set(e[a].blockId,[a])}let i=[];for(let[,a]of r){let s=[];for(let g of a){let x=e[g].patch;x&&x.length>=3?i.push({outline:[...x],holes:[],topY:e[g].y}):s.push(g)}if(!s.length)continue;s.sort((g,x)=>e[g].depth-e[x].depth);let u=s.map(g=>ya(e,g,o,t)).filter(g=>g!==null);if(!u.length)continue;let l=(g,x)=>({x:g.pts[x].x-g.nrm[x][0]*(g.front+Ht),y:g.pts[x].y-g.nrm[x][1]*(g.front+Ht)}),m=(g,x)=>({x:g.pts[x].x+g.nrm[x][0]*(g.back+Ht),y:g.pts[x].y+g.nrm[x][1]*(g.back+Ht)}),h=u[0],d=u[u.length-1],f=[];for(let g=0;g<h.pts.length;g++)f.push(l(h,g));for(let g of u)f.push(m(g,g.pts.length-1));for(let g=d.pts.length-1;g>=0;g--)f.push(m(d,g));for(let g=u.length-1;g>=0;g--)f.push(l(u[g],0));let p=Ma(f),b=1/0;for(let g of s)e[g].y<b&&(b=e[g].y);if(!Number.isFinite(b))continue;if(p.length>=3&&Math.abs(Le(p))>1e-6&&u.every(g=>{let x=g.pts[Math.floor(g.pts.length/2)];return Fe(p,x.x,x.y)})&&!pf(p)){i.push({outline:xa(p,ga),holes:[],topY:b});continue}for(let g of bf(u))i.push({outline:g,holes:[],topY:b})}return i}function bf(e){let t=[];for(let n of e){let o=[],r=[],i=n.front+Ht,a=n.back+Ht;for(let c=0;c<n.pts.length;c++){let u=n.pts[c],l=n.nrm[c];o.push([u.x-l[0]*i,u.y-l[1]*i]),r.push([u.x+l[0]*a,u.y+l[1]*a])}let s=[...o,...r.reverse()];s.length<3||(s.push(s[0]),t.push([s]))}if(!t.length)return[];try{let n=sr.default.union(t[0],...t.slice(1)),o=[];for(let r of n){if(!r.length||r[0].length<4)continue;let i=r[0].map(([c,u])=>({x:c,y:u})),a=i[0],s=i[i.length-1];i.length>1&&Math.abs(a.x-s.x)<1e-9&&Math.abs(a.y-s.y)<1e-9&&i.pop(),i.length>=3&&o.push(xa(i,ga))}return o}catch{return[]}}function Ma(e){let t=[];for(let n of e){let o=t[t.length-1];o&&Math.hypot(n.x-o.x,n.y-o.y)<1e-9||t.push(n)}for(;t.length>2&&Math.hypot(t[0].x-t[t.length-1].x,t[0].y-t[t.length-1].y)<1e-9;)t.pop();return t}var ar=class{constructor(t){this.minX=1/0;this.minY=1/0;this.maxX=-1/0;this.maxY=-1/0;this.rings=t;for(let n of t)for(let o of n)o.x<this.minX&&(this.minX=o.x),o.y<this.minY&&(this.minY=o.y),o.x>this.maxX&&(this.maxX=o.x),o.y>this.maxY&&(this.maxY=o.y)}containsAll(t){for(let n of t)if(n.x<this.minX||n.x>this.maxX||n.y<this.minY||n.y>this.maxY)return!1;for(let n of this.rings){let o=!0;for(let r of t)if(!Fe(n,r.x,r.y)){o=!1;break}if(o)return!0}return!1}};function ha(e,t,n,o,r,i){if(o.length<3)return;if(n.containsAll(o)){let u=[0,1,0],l=o[0];for(let m=1;m+1<o.length;m++){let h=o[m],d=o[m+1];e.tri([l.x*E,r,l.y*E],[h.x*E,r,h.y*E],[d.x*E,r,d.y*E],u,i)}return}let a=o.map(u=>[u.x,u.y]);a.push(a[0]);let s;try{s=sr.default.intersection([a],t)}catch{return}let c=[0,1,0];for(let u of s){if(!u.length||u[0].length<4)continue;let l=u[0],m=[],h=[];for(let f=0;f<l.length-1;f++)m.push(l[f][0],l[f][1]),h.push([l[f][0],l[f][1]]);if(h.length<3)continue;let d=(0,pa.default)(m,void 0,2);for(let f=0;f<d.length;f+=3){let p=h[d[f]],b=h[d[f+1]],y=h[d[f+2]];e.tri([p[0]*E,r,p[1]*E],[b[0]*E,r,b[1]*E],[y[0]*E,r,y[1]*E],c,i)}}}function Sa(e,t,n,o,r,i,a){if(t.length<2)return;let s=a??qn(t),c=[0,1,0],u=i&&i.length>=3?[[...i.map(d=>[d.x,d.y]),[i[0].x,i[0].y]]]:null,l=i&&i.length>=3?new ar([[...i]]):null,m=d=>{e.setMaterial(2),d(),e.setMaterial(0)},h=d=>{e.setMaterial(3),d(),e.setMaterial(0)};for(let d=0;d<t.length;d++){let f=t[d];if(f.patch&&f.patch.length>=3){let I=[...f.patch],v=s[d].belowY??o;if(h(()=>{if(u&&l)ha(e,u,l,I,f.y,r.tread);else{let P=I[0];for(let S=1;S+1<I.length;S++){let M=I[S],C=I[S+1];e.tri([P.x*E,f.y,P.y*E],[M.x*E,f.y,M.y*E],[C.x*E,f.y,C.y*E],c,r.tread)}}}),f.y>v+fa){let P=0,S=0;for(let M of I)P+=M.x,S+=M.y;P/=I.length,S/=I.length,m(()=>{for(let M=0;M<I.length;M++){let C=I[M],T=I[(M+1)%I.length],N=T.x-C.x,D=T.y-C.y,R=Math.hypot(N,D);if(R<1e-6)continue;let A=D/R,L=-N/R;(C.x-P)*A+(C.y-S)*L<0&&(A=-A,L=-L);let O=[A,0,L],_=[C.x*E,f.y,C.y*E],k=[T.x*E,f.y,T.y*E],V=[C.x*E,v,C.y*E],F=[T.x*E,v,T.y*E];e.tri(_,k,F,O,r.riser),e.tri(_,F,V,O,r.riser)}})}continue}let p=ya(t,d,s,n);if(!p)continue;let{pts:b,nrm:y,front:g,back:x}=p,w=s[d].belowY??o;for(let I=0;I+1<b.length;I++){let v=b[I],P=b[I+1],S=y[I],M=y[I+1];if(Math.hypot(P.x-v.x,P.y-v.y)<1e-6||S[0]===0&&S[1]===0||M[0]===0&&M[1]===0)continue;let C=[(v.x-S[0]*g)*E,f.y,(v.y-S[1]*g)*E],T=[(P.x-M[0]*g)*E,f.y,(P.y-M[1]*g)*E],N=[(v.x+S[0]*x)*E,f.y,(v.y+S[1]*x)*E],D=[(P.x+M[0]*x)*E,f.y,(P.y+M[1]*x)*E];if(h(()=>{u&&l?ha(e,u,l,[{x:v.x-S[0]*g,y:v.y-S[1]*g},{x:P.x-M[0]*g,y:P.y-M[1]*g},{x:P.x+M[0]*x,y:P.y+M[1]*x},{x:v.x+S[0]*x,y:v.y+S[1]*x}],f.y,r.tread):(e.tri(C,T,D,c,r.tread),e.tri(C,D,N,c,r.tread))}),f.y>w+fa){let R=[C[0],w,C[2]],A=[T[0],w,T[2]],L=[-S[0],0,-S[1]];m(()=>{e.tri(C,T,A,L,r.riser),e.tri(C,A,R,L,r.riser)})}}}}function wa(e){let t=1/0,n=1/0,o=-1/0,r=-1/0,i=!1;for(let a of e)!Number.isFinite(a.x)||!Number.isFinite(a.y)||(i=!0,a.x<t&&(t=a.x),a.y<n&&(n=a.y),a.x>o&&(o=a.x),a.y>r&&(r=a.y));return i?{minX:t,minY:n,maxX:o,maxY:r}:null}function zt(e,t){return e.minX<=t.maxX&&t.minX<=e.maxX&&e.minY<=t.maxY&&t.minY<=e.maxY}var cr=lt(require("polygon-clipping"),1);function yf(e,t){let n=e.eventConfigurationIds;return!n?.length||!!t&&n.includes(t)}function Pa(e,t){return e.filter(n=>n.type!=="shape"||yf(n,t))}function Ia(e,t){let n=e.focalPoint??{x:0,y:0};return e.floors?.length?e.floors.map((o,r)=>({objects:Pa(o.objects,t),focal:{x:(o.focalPoint??n).x,y:(o.focalPoint??n).y},baseHeightM:o.baseHeightM??0,index:r})):[{objects:Pa(e.objects,t),focal:n,baseHeightM:0,index:0}]}var gf={minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0};function nt(e){return wa(e)??gf}function Ca(e,t){let n=Ue(e.outline,Ge),o=nt(n),r=t.filter(a=>a!==e&&a.outline&&a.outline.length>=3&&zt(o,nt(a.outline)));if(!r.length)return[n];let i=a=>{let s=a.map(c=>[c.x,c.y]);return s.push(s[0]),s};try{let a=cr.default.difference([i(n)],...r.map(c=>[i(c.outline)])),s=[];for(let c of a){if(!c.length)continue;let u=c[0].map(([l,m])=>({x:l,y:m}));if(u.length>1){let l=u[0],m=u[u.length-1];Math.abs(l.x-m.x)<1e-9&&Math.abs(l.y-m.y)<1e-9&&u.pop()}u.length>=3&&s.push(u)}return s.length?s:[n]}catch{return[n]}}function Ra(e,t){if(!t.length)return e;let n=i=>{let a=i.map(s=>[s.x,s.y]);return a.push(a[0]),a},o=t.map(i=>[n(i)]),r=[];for(let i of e){let a;try{a=cr.default.intersection([n(i.outline)],o.flat())}catch{r.push(i);continue}for(let s of a){if(!s.length)continue;let c=s[0].map(([u,l])=>({x:u,y:l}));if(c.length>1){let u=c[0],l=c[c.length-1];Math.abs(u.x-l.x)<1e-9&&Math.abs(u.y-l.y)<1e-9&&c.pop()}c.length>=3&&r.push({outline:c,holes:[],topY:i.topY})}}return r.length?r:e}var dt=.06,xf=.05,Ea=.05,Aa=.15,lr=25;function _a(e,t,n){let o=new Map,r=new Array(t.length).fill(null),i=new Float64Array(t.length),a=new Array(t.length).fill(void 0),s=new Array(t.length).fill(void 0),c=new Map,u=[],l=new Set;for(let h=0;h<e.length;h+=1){let d=e[h];for(let f of d.objects){if(f.type==="table"&&l.add(f.id),f.type!=="section"||!f.outline||f.outline.length<3)continue;let p=Ue(f.outline,Ge);c.set(f.id,{section:f,unit:d,frontU:1/0,hasSeats:!1,rows:new Map,seatIndices:[]}),u.push({id:f.id,floorIndex:h,box:nt(p),section:f,unit:d,outline:p})}}let m=new Map;for(let h of u){let d=m.get(h.floorIndex);d?d.push(h):m.set(h.floorIndex,[h])}for(let h=0;h<t.length;h++){let d=t[h],f=n?m.get(n[h])??[]:u,p=d.sectionId?f.find(y=>y.id===d.sectionId)??f.find(y=>y.section.logicalSectionId===d.sectionId&&_e({x:d.x,y:d.y},y.outline,y.section.holes)):void 0,b=p?[p]:f;for(let y of b){if(n&&y.floorIndex!==n[h]||!p&&(d.x<y.box.minX||d.x>y.box.maxX||d.y<y.box.minY||d.y>y.box.maxY||!_e({x:d.x,y:d.y},y.outline,y.section.holes)))continue;r[h]=y.id;let g=c.get(y.id);g.hasSeats=!0;let x=d.focalPoint??y.unit.focal,w=Math.hypot(d.x-x.x,d.y-x.y);w<g.frontU&&(g.frontU=w),g.seatIndices.push(h);let I=d.rowId||`__seat-${h}`,v=g.rows.get(I);v?v.push({x:d.x,y:d.y}):g.rows.set(I,[{x:d.x,y:d.y}]);break}}for(let[h,d]of c){let f=mt(d.section,{floorBaseHeightM:d.unit.baseHeightM}),p=d.unit.baseHeightM,b=f.rake>0?Math.tan(f.rake*Math.PI/180):0,y=f.rake<=.01&&f.height<=p+.001,g=d.section.surfaceKind,x=g==="flat"?!0:g==="rakedRows"&&f.rake>.01?!1:y,w=d.hasSeats?Un(h,t,d.seatIndices,d.unit.focal):{sectionId:h,rows:[],blockCount:0},v=w.rows.length<2?ma([...d.rows.values()].map(_=>({points:_})),d.unit.focal):null,P=1/0;if(v){if(d.hasSeats)for(let _ of d.rows.values())for(let k of _){let V=v.depthAt(k.x,k.y);V<P&&(P=V)}if(!d.hasSeats||!Number.isFinite(P)){P=1/0;for(let _ of d.section.outline){let k=v.depthAt(_.x,_.y);k<P&&(P=k)}}}let S=p+xf,M=Math.max(S,f.height),C=_=>{let k=Math.max(0,_-P)*le,V=Math.min(k*b,lr);return Math.max(S,f.height+V)},T=_=>{let k=Math.max(0,_)*le,V=Math.min(k*b,lr);return Math.max(S,f.height+V)},N=x?[]:w.rows.map(_=>({pts:_.pts,y:T(_.blockDepth),depth:_.blockDepth,blockId:_.blockId,...l.has(_.id)?{patch:ba(_.pts,Ge)}:{}})),D=N.length?N[0].y:M,R=N.map(_=>{let k=_.patch&&_.patch.length>=3?_.patch:_.pts,V=0,F=0;for(let U of k)V+=U.x,F+=U.y;let B=k.length||1;V/=B,F/=B;let z=0;for(let U of k){let G=Math.hypot(U.x-V,U.y-F);G>z&&(z=G)}return{cx:V,cy:F,rad:z}}),A=x?()=>M:N.length>=2?(_,k)=>{let V=1/0,F=D;for(let B=0;B<N.length;B++){let z=R[B];if(Math.hypot(_-z.cx,k-z.cy)-z.rad>=V)continue;let U=N[B].patch,G=U&&U.length>=3?Fe(U,_,k)?0:Nt(U,_,k):Nt(N[B].pts,_,k);G<V&&(V=G,F=N[B].y)}return F}:(_,k)=>v?C(v.depthAt(_,k)):M,L=[0,1,0],O=N.length>=2||x?()=>L:(_,k)=>{if(!v)return L;let V=v.depthAt(_,k);if(V<=P)return L;let F=(V-P)*le;if(F*b>=lr||f.height+F*b<=S)return L;let[B,z]=v.gradientAt(_,k);if(B===0&&z===0)return L;let U=1/Math.hypot(b,1);return[-B*b*U,U,-z*b*U]};if(!x)for(let _ of w.rows){let k=T(_.blockDepth);for(let V of _.seatIndices)a[V]=k}for(let _ of w.rows){let k=[];for(let U=1;U<_.pts.length;U++){let G=Math.hypot(_.pts[U].x-_.pts[U-1].x,_.pts[U].y-_.pts[U-1].y);G>1e-6&&k.push(G)}k.sort((U,G)=>U-G);let V=k.length?k[Math.floor(k.length/2)]:1/0,F=1/0,B=_.pts[Math.floor(_.pts.length/2)];if(B)for(let U of w.rows){if(U===_||U.blockId!==_.blockId)continue;let G=Nt(U.pts,B.x,B.y);G>1e-6&&G<F&&(F=G)}let z=Math.min(V,Math.max(F,V*.5));if(Number.isFinite(z)&&z>0)for(let U of _.seatIndices)s[U]=z}o.set(h,{sectionId:h,deckAt:A,normalAt:O,flat:x,bottomY:p,rowLevels:N,landingY:D})}for(let h=0;h<t.length;h++){let d=r[h],f=t[h];if(d){let y=a[h];i[h]=(y??o.get(d).deckAt(f.x,f.y))+Aa;continue}let p=f.eyeHeightM,b=Number.isFinite(p)?Math.max(0,p-We):0;i[h]=f.kind==="booth"?b+dt+Aa:b}return{bySection:o,seatOwner:r,seatDeckY:h=>i[h],seatPitchU:h=>s[h]}}var re={top:1,wallBottom:.58,bottomCap:.4};function ht(e,t){if(!e)return t;let n=ie(Xe(e,.4),.62);return de(t,n,.22)}function Ta(e,t){return e?de(t,ie(Xe(e,.08),.9),.82):t}function ka(e,t){let n=new Map;for(let i of e.categories??[])n.set(i.key,i.color);let o=new Map;for(let i of t){if(!i.sectionId)continue;let a=o.get(i.sectionId);a||(a=new Map,o.set(i.sectionId,a)),a.set(i.categoryKey,(a.get(i.categoryKey)??0)+1)}let r=new Map;for(let[i,a]of o){let s=0,c=0,u=0,l=0;for(let[m,h]of a){let d=me(n.get(m));d&&(s+=d[0]*h,c+=d[1]*h,u+=d[2]*h,l+=h)}l>0&&r.set(i,[s/l,c/l,u/l])}return r}function La(e,t){return me(e.color)??t.get(e.logicalSectionId??e.id)??null}var Fa=lt(require("polygon-clipping"),1);function vf(e,t){return e===void 0||t===void 0?!0:Math.abs(e-t)<.001}var $n=class{constructor(){this.rings=[];this.boxes=[];this.levels=[]}subtract(t,n){let o=t.map(c=>[c.x,c.y]);if(o.length<3)return[];o.push(o[0]);let r=nt(t),i=this.rings.filter((c,u)=>zt(r,this.boxes[u])&&vf(n,this.levels[u])),a=[[o]];if(i.length)try{a=Fa.default.difference([o],...i).map(u=>u.map(l=>l.map(([m,h])=>[m,h])))}catch{a=[[o]]}this.rings.push([o]),this.boxes.push(r),this.levels.push(n);let s=[];for(let c of a){if(!c.length)continue;let u=c[0].map(([l,m])=>({x:l,y:m}));if(u.length>1){let l=u[0],m=u[u.length-1];Math.abs(l.x-m.x)<1e-9&&Math.abs(l.y-m.y)<1e-9&&u.pop()}u.length>=3&&s.push(u)}return s}};function Zn(e,t){if(!t)return e;let n=1/0,o=-1/0,r=1/0,i=-1/0;for(let m of e)n=Math.min(n,m.x),o=Math.max(o,m.x),r=Math.min(r,m.y),i=Math.max(i,m.y);let a=(n+o)/2,s=(r+i)/2,c=t*Math.PI/180,u=Math.cos(c),l=Math.sin(c);return e.map(m=>{let h=m.x-a,d=m.y-s;return{x:a+h*u-d*l,y:s+h*l+d*u}})}function ge(e){let t=null;if(e.kind==="polygon"&&e.points&&e.points.length>=3&&(t=e.points),e.kind==="rect"&&e.width&&e.height&&(t=hn(e.x??0,e.y??0,e.width,e.height)),e.kind==="ellipse"&&e.width&&e.height){let n=(e.x??0)+e.width/2,o=(e.y??0)+e.height/2;t=Hn(n,o,e.width/2,e.height/2)}return t?Zn(t,e.rotation):null}function je(e){let t=e.role??"",n={stage:{kind:"stage",heightM:1},entrance:{kind:"portal",heightM:2.7},exit:{kind:"portal",heightM:2.7},screen:{kind:"solid",heightM:6},wall:{kind:"solid",heightM:2.8},rail:{kind:"solid",heightM:1.1},suite:{kind:"suite",heightM:3},obstruction:{kind:"solid",heightM:4.5},sound:{kind:"solid",heightM:1.45},restroom:{kind:"solid",heightM:2.4},bar:{kind:"solid",heightM:1.1},concession:{kind:"solid",heightM:1.1},coat:{kind:"solid",heightM:1.1},goal:{kind:"portal",heightM:1.8}},o=t==="stage"&&yn(e.stageKind)?{kind:"stage",heightM:e.stageKind==="ring-boxing"?jn:.06}:n[t]??{kind:"plate",heightM:.25};return{...o,heightM:e.heightM??o.heightM}}var Mf=.08,Sf=30,wf=.015;function Pf(e,t){let n=!1;for(let o=0,r=t.length-1;o<t.length;r=o++){let i=t[o],a=t[r];i.y>e.y!=a.y>e.y&&e.x<(a.x-i.x)*(e.y-i.y)/(a.y-i.y)+i.x&&(n=!n)}return n}function Da(e,t){let n=ge(e)??(e.points?.length?Zn(e.points,e.rotation):null),o=je(e),i=!e.role&&o.kind==="plate"&&e.heightM===void 0&&!!n&&Math.abs(Le(n))*le**2>=Sf?wf:o.heightM;if(!n)return{topOffsetM:i,supportOffsetM:0};if(o.kind!=="plate"&&o.kind!=="stage")return{topOffsetM:i,supportOffsetM:0};let a=1/0,s=1/0,c=-1/0,u=-1/0;for(let d of n)a=Math.min(a,d.x),s=Math.min(s,d.y),c=Math.max(c,d.x),u=Math.max(u,d.y);let l=i,m=0,h=1e-6*Math.max(1,c-a,u-s);for(let d of t)c>d.minX&&a<d.maxX&&u>d.minY&&s<d.maxY&&l<=d.topOffsetM+1e-6&&(l=d.topOffsetM+Mf),a>=d.minX-h&&c<=d.maxX+h&&s>=d.minY-h&&u<=d.maxY+h&&(!d.poly||n.every(b=>Pf(b,d.poly)||If(b,d.poly,h)))&&(m=Math.max(m,d.topOffsetM));return e.fill&&e.fill!=="none"&&e.fill!=="transparent"&&t.push({minX:a,minY:s,maxX:c,maxY:u,topOffsetM:l,poly:n}),{topOffsetM:l,supportOffsetM:Math.min(m,l)}}function If(e,t,n){for(let o=0,r=t.length-1;o<t.length;r=o++){let i=t[r],a=t[o],s=a.x-i.x,c=a.y-i.y,u=s*s+c*c,l=u?Math.max(0,Math.min(1,((e.x-i.x)*s+(e.y-i.y)*c)/u)):0;if(Math.hypot(e.x-(i.x+l*s),e.y-(i.y+l*c))<=n)return!0}return!1}function pt(e,t,n){return{x:e.x+(t.x-e.x)*n,y:e.y+(t.y-e.y)*n}}function De(e){if(e.length!==4)return e;let t=Math.hypot(e[1].x-e[0].x,e[1].y-e[0].y),n=Math.hypot(e[2].x-e[1].x,e[2].y-e[1].y);return t>=n?e:[e[1],e[2],e[3],e[0]]}function Ie(e,t,n){return[pt(e[0],e[1],t),pt(e[0],e[1],n),pt(e[3],e[2],n),pt(e[3],e[2],t)]}function vn(e,t,n){return[pt(e[0],e[3],t),pt(e[1],e[2],t),pt(e[1],e[2],n),pt(e[0],e[3],n)]}function ue(e,t,n,o,r,i){ae(e,t,void 0,()=>n,o,r,i,re)}function Ut(e,t,n){if(e.length!==4||n<=t)return null;let o=De(e),r=Math.hypot(o[1].x-o[0].x,o[1].y-o[0].y)*E,i=Math.hypot(o[3].x-o[0].x,o[3].y-o[0].y)*E;if(r<1e-6||i<1e-6)return null;let a=Math.min(.22/r,.16),s=Math.min(.28,(n-t)*.13),c=Math.min(.065/i,.2);return{quad:o,side:a,face:c,opening:Ie(o,a,1-a),openingTop:n-s}}function ur(e,t,n){if(e.length!==4||n-t<=.2)return null;let o=De(e),r=Math.hypot(o[1].x-o[0].x,o[1].y-o[0].y)*E;if(r<=1e-6)return null;let i=Math.min(.14,(n-t)*.08,r*.08),a=i/r,s=Ie(o,a,1-a);return{quad:o,side:a,trim:i,inner:s,panel:vn(s,.15,.85),bottom:t+i,top:n-i}}function Oa(e,t,n,o){let r=ur(e,t,n);if(!r)return;let{panel:i}=r,a=(g,x)=>({x:(g.x+x.x)/2,y:(g.y+x.y)/2}),s=a(i[0],i[1]),c=a(i[3],i[2]),u=Math.hypot(s.x-o.x,s.y-o.y)<=Math.hypot(c.x-o.x,c.y-o.y),[l,m]=u?[i[0],i[1]]:[i[3],i[2]],h=u?{x:s.x-c.x,y:s.y-c.y}:{x:c.x-s.x,y:c.y-s.y},d=Math.hypot(h.x,h.y);if(d<1e-6)return;-(m.y-l.y)*h.x+(m.x-l.x)*h.y<0&&([l,m]=[m,l]);let f=Math.min(.006,d*E*.05),p=h.x/d*f,b=h.y/d*f,y=(g,x)=>[g.x*E+p,x,g.y*E+b];return[y(l,r.bottom),y(m,r.bottom),y(l,r.top),y(m,r.top)]}var Ba=lt(require("polygon-clipping"),1);function ot(e,t,n,o,r,i,a,s={}){let c=nt(t),u=s.ao??re,l=r.flatMap(p=>{if(p.role!=="entrance"&&p.role!=="exit")return[];let b=ge(p);if(!b||b.length!==4||!zt(c,nt(b)))return[];let y=s.portalBase??n,g=Ut(b,y,y+je(p).heightM);if(!g)return[];let x=Math.min(o,g.openingTop);return x<=n?[]:[{poly:g.opening,height:x}]});if(!l.length)return!1;let m=p=>p.map(b=>[b.x,b.y]),h=[m(t),...(s.holes??[]).map(m)],d=[n,...new Set(l.map(p=>p.height)),o].sort((p,b)=>p-b),f=[];try{for(let p=1;p<d.length;p++){let b=d[p-1],y=d[p];if(y-b<1e-6)continue;let g=l.filter(w=>w.height>b+1e-6).map(w=>[m(w.poly)]),x=g.length?Ba.default.difference(h,...g):[h];f.push({low:b,high:y,polys:x})}}catch{return!1}for(let p of f)for(let b of p.polys){let[y,...g]=b.map(w=>w.map(([I,v])=>({x:I,y:v}))),x=w=>u.wallBottom+(u.top-u.wallBottom)*(w-n)/(o-n);ae(e,y,g,()=>p.high,p.low,i,a,{...u,top:x(p.high),wallBottom:x(p.low)})}return!0}function Na(e,t,n,o,r,i,a){let s=o-n;if(s<=0)return;let c=s<1.5?[[n,o,1]]:[[n,n+Math.min(.9,s*.18),.82],[n+Math.min(.9,s*.18),o-.1,1],[o-.1,o,1.1]],u=l=>re.wallBottom+(re.top-re.wallBottom)*(l-n)/s;for(let[l,m,h]of c){let d={...re,top:u(m),wallBottom:u(l)},f=ie(i,h),p=ie(a,h);ot(e,t,l,m,r,f,p,{portalBase:n,ao:d})||ae(e,t,void 0,()=>m,l,f,p,d)}}function Mn(e,t,n){let o=me(t.stroke?.color),r=t.stroke?.width??0;if(!o||!Number.isFinite(r)||r<=0)return;let i=t.kind==="line"||t.kind==="polyline",a=i?Zn(t.points??[],t.rotation):ge(t);if(!a||a.length<2)return;let s=i?a.length-1:a.length,c=r*.5;for(let u=0;u<s;u++){let l=a[u],m=a[(u+1)%a.length],h=Math.hypot(m.x-l.x,m.y-l.y);if(h<1e-6)continue;let d=-(m.y-l.y)/h*c,f=(m.x-l.x)/h*c,p=[(l.x+d)*E,n,(l.y+f)*E],b=[(m.x+d)*E,n,(m.y+f)*E],y=[(m.x-d)*E,n,(m.y-f)*E],g=[(l.x-d)*E,n,(l.y-f)*E];e.tri(p,b,y,[0,1,0],o),e.tri(p,y,g,[0,1,0],o)}}function Va(e){return e==="bar"||e==="concession"||e==="coat"||e==="restroom"}var jt=(e,t,n)=>({x:e.x+(t.x-e.x)*n,y:e.y+(t.y-e.y)*n});function Qn(e,t,n,o){let[r,i,a,s]=t?e:[e[3],e[2],e[1],e[0]];return[jt(r,s,n),jt(i,a,n),jt(i,a,o),jt(r,s,o)]}function Ga(e,t,n,o,r,i,a,s,c=!1){if(n.length!==4||r-o<.4)return!1;let u=S=>c?Math.min(S,r):S,l=De(n),m=Math.hypot(l[3].x-l[0].x,l[3].y-l[0].y)*E;if(m<.4)return!1;let h=jt(l[0],l[1],.5),d=jt(l[3],l[2],.5),f=Math.hypot(h.x-s.x,h.y-s.y)<=Math.hypot(d.x-s.x,d.y-s.y),p=de(a,[.92,.9,.86],.35),b=ie(i,.72),y=r-o;if(t==="restroom"){let S=Math.min(.18,y*.08);return ue(e,l,r-S,o,a,i),ue(e,l,r,r-S,p,p),!0}let g=o+Math.min(1.1,y),x=t==="coat"?1:Math.min(.5,.75/m),w=Qn(l,f,0,x);if(ue(e,w,g-.05,o,b,i),ue(e,w,g,g-.05,p,p),t==="coat"||m<1.2)return!0;if(t==="bar"){let S=Qn(l,f,Math.max(x+.2,1-.45/m),1),M=u(o+Math.max(Math.min(2.2,y*2),g-o+.6));return ue(e,S,M,o,a,b),!0}let I=Qn(l,f,Math.max(x+.25,.55),1),v=u(o+Math.max(2.6,g-o+1.4));if(v-.14<=g)return!0;ue(e,I,v-.14,o,a,i),ue(e,l,v,v-.14,p,b);let P=Math.min(.08,.1/Math.max(.1,Math.hypot(l[1].x-l[0].x,l[1].y-l[0].y)*E));for(let[S,M]of[[0,P],[1-P,1]])ue(e,Qn(Ie(l,S,M),f,0,Math.min(.08,.1/m)),v-.14,g,b,b);return!0}var Cf=[.12,.38,.16],Rf=[.72,.62,.45],Af=[.88,.93,.96],Ha=[.95,.95,.94],Ef=[.66,.29,.22],mr={length:20.12,width:3.05},_f=.14,Tf=9.76,rt=[.93,.94,.95],Jn=[.1,.11,.13],kf=[.45,.85,1.25],Lf=1.45,za=.012,Ua=.004,Ff=1.07,Df=.15;function Wt(e,t,n,o,r,i){e.setMaterial(i),ae(e,t,n?[n.slice().reverse()]:void 0,()=>o,o-.004,r,r,re)}var ja=(e,t)=>Rt(e,t/E);function Xa(e,t,n){let o=t.x-e.x,r=t.y-e.y,i=Math.hypot(o,r);if(i<1e-9)return null;let a=-r/i*n,s=o/i*n;return[{x:e.x+a,y:e.y+s},{x:t.x+a,y:t.y+s},{x:t.x-a,y:t.y-s},{x:e.x-a,y:e.y-s}]}function Of(e,t,n,o){let r=t.map(i=>[i.x*E,n,i.y*E]);e.tri(r[0],r[1],r[2],[0,1,0],o),e.tri(r[0],r[2],r[3],[0,1,0],o)}function eo(e,t,n,o,r,i){let a=n/E,s=[{x:t.x-a,y:t.y-a},{x:t.x+a,y:t.y-a},{x:t.x+a,y:t.y+a},{x:t.x-a,y:t.y+a}];ae(e,s,void 0,()=>r,o,i,ie(i,.85),re)}function Xt(e,t,n,o,r,i,a){let s=Xa(t,n,o/E);s&&ae(e,s,void 0,()=>i,r,a,ie(a,.85),re)}function to(e){let t=De(e),n={x:(t[0].x+t[2].x)/2,y:(t[0].y+t[2].y)/2},o=Math.hypot(t[1].x-t[0].x,t[1].y-t[0].y)||1,r=Math.hypot(t[3].x-t[0].x,t[3].y-t[0].y)||1,i={x:(t[1].x-t[0].x)/o,y:(t[1].y-t[0].y)/o},a={x:(t[3].x-t[0].x)/r,y:(t[3].y-t[0].y)/r};return{at:(c,u)=>({x:n.x+(i.x*c+a.x*u)/E,y:n.y+(i.y*c+a.y*u)/E}),lengthM:o*E,widthM:r*E}}function Wa(e,t,n){let o=Ki(t);if(!o.length)return;let r=1/0,i=-1/0,a=1/0,s=-1/0;for(let x of t.points??[])r=Math.min(r,x.x),i=Math.max(i,x.x),a=Math.min(a,x.y),s=Math.max(s,x.y);let c=(t.rotation??0)*Math.PI/180,u=Math.cos(c),l=Math.sin(c),m=(r+i)/2,h=(a+s)/2,d=x=>c?{x:m+(x.x-m)*u-(x.y-h)*l,y:h+(x.x-m)*l+(x.y-h)*u}:x,f=Math.min(i-r,s-a)*E,p=Math.max(.04,Math.min(.3,f*.004))/E,b=0;e.setMaterial(0);for(let x of o){if(!x.fill)continue;let w=x.points.map(d);Wt(e,w,null,n+za+b*Ua,me(x.fill)??rt,0),b++}let y=o.filter(x=>!(x.fill&&x.ink===x.fill)),g=[...new Set(y.map(x=>x.ink??Xn))];for(let x of g){let w=n+za+b++*Ua,I=me(x)??rt;for(let v of y){if((v.ink??Xn)!==x)continue;let P=v.points.map(d),S=v.closed?P.length:P.length-1;for(let M=0;M<S;M++){let C=Xa(P[M],P[(M+1)%P.length],p);C&&Of(e,C,w,I)}}}}function Ya(e,t,n,o,r){if(t.length<3)return!1;let i=o+.006,a=r??Cf;if(n==="oval-cricket"){let s=t.reduce((I,v)=>I+v.x,0)/t.length,c=t.reduce((I,v)=>I+v.y,0)/t.length,u=I=>t.map(v=>({x:s+(v.x-s)*I,y:c+(v.y-c)*I})),l=8;for(let I=0;I<l;I++){let v=u(1-I/l),P=I===l-1?null:u(1-(I+1)/l);Wt(e,v,P,i,ie(a,I%2?1.04:.96),4)}let m=t[0];for(let I of t)Math.hypot(I.x-s,I.y-c)>Math.hypot(m.x-s,m.y-c)&&(m=I);let h=Math.hypot(m.x-s,m.y-c)||1,d=(m.x-s)/h,f=(m.y-c)/h,p=-f,b=d,y=Math.min(1,2*h*E*_f/mr.length),g=mr.length*y/2/E,x=mr.width*y/2/E,w=[[-g,-x],[g,-x],[g,x],[-g,x]].map(([I,v])=>({x:s+d*I+p*v,y:c+f*I+b*v}));return Wt(e,w,null,i+.004,Rf,0),e.setMaterial(0),!0}if(n==="rink-hockey"){let s=ja(t,Df);return Wt(e,s,null,i,Af,0),e.setMaterial(0),ae(e,t,[s.slice().reverse()],()=>o+Ff,o,Ha,ie(Ha,.9),re),!0}if(n==="ring-boxing"&&t.length===4){let{at:s}=to(t),c=[s(-3.05,-3.05),s(3.05,-3.05),s(3.05,3.05),s(-3.05,3.05)],u=[[.77,.19,.19],rt,[.17,.42,.69],rt];e.setMaterial(0),c.forEach((l,m)=>eo(e,l,.07,o,o+Lf,u[m]));for(let l of kf)for(let m=0;m<4;m++)Xt(e,c[m],c[(m+1)%4],.025,o+l-.025,o+l+.025,rt);return!0}if(n==="court-tennis"&&t.length===4){let{at:s}=to(t);e.setMaterial(0),Xt(e,s(0,-6.4),s(0,6.4),.015,o,o+.95,Jn),Xt(e,s(0,-6.4),s(0,6.4),.03,o+.95,o+1,rt);for(let c of[-1,1])eo(e,s(0,c*6.4),.05,o,o+1.07,Jn);return!0}if(n==="court-basketball"&&t.length===4){let{at:s,lengthM:c}=to(t),u=Math.min(14,c/2-.5);e.setMaterial(0);for(let l of[-1,1]){let m=s(l*(u+1.2),0),h=s(l*(u-1.2),0);eo(e,m,.12,o,o+3.4,Jn),Xt(e,m,h,.06,o+3.25,o+3.4,Jn),Xt(e,s(l*(u-1.2),-.9),s(l*(u-1.2),.9),.03,o+2.9,o+3.95,rt)}return!0}if(n==="pitch-rugby"&&t.length===4){let{at:s,lengthM:c}=to(t),u=c*(50/120);e.setMaterial(0);for(let l of[-1,1]){for(let m of[-2.8,2.8])eo(e,s(l*u,m),.07,o,o+12,rt);Xt(e,s(l*u,-2.8),s(l*u,2.8),.06,o+2.94,o+3.06,rt)}return!0}if(n==="track-athletics"){let s=ja(t,Tf);return s.length<3?!1:(Wt(e,t,s,i,Ef,0),Wt(e,s,null,i,a,4),e.setMaterial(0),!0)}return!1}var Bf=.012,ro=2.4,Nf=1,Vf=.75,Gf=.15;function Ke(e){if(e.points&&e.points.length>=3)return e.points;let{center:t,width:n,height:o,rotation:r}=e;if(!n||!o)return null;let i=(r??0)*Math.PI/180,a=Math.cos(i),s=Math.sin(i),c=n/2,u=o/2;return[[-c,-u],[c,-u],[c,u],[-c,u]].map(([l,m])=>({x:t.x+l*a-m*s,y:t.y+l*s+m*a}))}function Ja(e,t,n,o,r,i,a=!1){let s=Ke(t);if(s){if(a){let c=ht(o,r.boothTop),u=Ye([...s]);ae(e,Ue(u,Hf/E),[u.slice().reverse()],()=>n+.03,n,c,ie(c,.8),re);return}if(!(!t.points&&i&&Uf(e,s,n,o,i))){if(!t.points&&i&&s.length===4){zf(e,s,n,o,i);return}ae(e,s,void 0,()=>n+ro,n,ht(o,r.boothTop),r.boothWall,re)}}}var fr=1.1,Ka=[.9,.9,.88],Hf=.1,no=[.87,.87,.85],qa=.08;function es(e,t){let n=c=>({x:(e[c].x+e[(c+1)%4].x)/2,y:(e[c].y+e[(c+1)%4].y)/2}),o=0,r=1/0;for(let c=0;c<4;c++){let u=n(c),l=Math.hypot(u.x-t.x,u.y-t.y);l<r&&(r=l,o=c)}let i=[0,1,2,3].map(c=>e[(o+c)%4]),a=(c,u,l)=>({x:c.x+(u.x-c.x)*l,y:c.y+(u.y-c.y)*l});return{q:i,part:(c,u,l,m)=>{let h=a(i[0],i[1],c),d=a(i[0],i[1],u),f=a(i[3],i[2],c),p=a(i[3],i[2],u);return[a(h,f,l),a(d,p,l),a(d,p,m),a(h,f,m)]},depthM:Math.hypot(i[3].x-i[0].x,i[3].y-i[0].y)*E,widthM:Math.hypot(i[1].x-i[0].x,i[1].y-i[0].y)*E}}function zf(e,t,n,o,r){let{q:i,part:a}=es(t,r),s=o??[.35,.42,.55],c=de(s,[.78,.78,.77],.62),u=de(s,[.95,.95,.94],.45);ue(e,i,n+dt,n,c,ie(c,.8)),ue(e,a(.05,.95,.72,.98),n+fr-.05,n+dt,u,ie(u,.8)),ue(e,a(.03,.97,.7,1),n+fr,n+fr-.05,Ka,ie(Ka,.9))}function Uf(e,t,n,o,r){if(t.length!==4)return!1;let{q:i,part:a,depthM:s,widthM:c}=es(t,r);if(s<1||c<1)return!1;let u=o??[.35,.42,.55],l=de(u,[.78,.78,.77],.62),m=n+ro,h=qa/c,d=qa/s;ue(e,i,n+dt,n,l,ie(l,.8)),ue(e,a(0,1,1-d,1),m,n+dt,no,ie(no,.9));for(let[b,y]of[[0,h],[1-h,1]])ue(e,a(b,y,0,1-d),m,n+dt,no,ie(no,.9));ue(e,a(h,1-h,0,Math.min(.5,.06/s)),m,m-.3,u,ie(u,.85));let f=Math.min(.4,.6/c),p=Math.min(.12,.3/s);return ue(e,a(.5-f,.5+f,.72-p,.72+p),n+Nf,n+dt,de(u,[.95,.95,.94],.7),ie(u,.75)),!0}function io(e){if(e.shape==="round"){let l=e.radius;return l?Hn(e.center.x,e.center.y,l,l,24):null}let{width:t,height:n,rotation:o,center:r}=e;if(!t||!n)return null;let i=(o??0)*Math.PI/180,a=Math.cos(i),s=Math.sin(i),c=t/2,u=n/2;return[[-c,-u],[c,-u],[c,u],[-c,u]].map(([l,m])=>({x:r.x+l*a-m*s,y:r.y+l*s+m*a}))}function ts(e,t,n,o,r,i=!0){let a=io(t);if(!a)return;let s=a.reduce((h,d)=>h+d.x,0)/a.length,c=a.reduce((h,d)=>h+d.y,0)/a.length,u=h=>a.map(d=>({x:s+(d.x-s)*h,y:c+(d.y-c)*h})),l=i&&o?ht(o,r.tableTop):jf,m=n+Vf;ae(e,a,void 0,()=>m,n+Xf,l,ie(l,.86),re),ae(e,u(.12),void 0,()=>m+.12,m,$a,ie($a,.8),re)}var jf=[.93,.92,.89],$a=[.78,.66,.42],Xf=.25;function ns(e,t,n,o,r,i,a,s,c=[]){let u=ge(t);if(!t.role&&(!t.fill||t.fill==="none"||t.fill==="transparent")||!u){Mn(e,t,n+o+Bf);return}let m=s?s.kind==="stage":t.role==="stage",h=s?s.kind==="screen":t.role==="screen",d=s?{kind:m?"stage":"solid",heightM:s.topY-s.baseY}:je(t),f=s?.baseY??n,p=s?.topY??n+o;if(m&&a){let S=1/0,M=-1/0,C=1/0,T=-1/0;for(let N of u)N.x<S&&(S=N.x),N.x>M&&(M=N.x),N.y<C&&(C=N.y),N.y>T&&(T=N.y);a.push({cx:(S+M)/2*E,cz:(C+T)/2*E,y:p,halfX:Math.max((M-S)/2*E,.5),halfZ:Math.max((T-C)/2*E,.5)})}let b=me(t.fill),y=t.role==="wall"||t.role==="entrance"||t.role==="exit",g=y?b?ie(Xe(b,.12),.95):r.tierTop:m&&b?de(r.stageTop,ie(Xe(b,.18),.9),.9):!t.role&&b?b:ht(b,m?r.stageTop:r.decorTop),x=h?b:null,w=y?b?ie(Xe(b,.12),.85):r.tierWall:m?b?de(r.stageWall,ie(b,.58),.82):r.stageWall:h?x?de(ie(x,1.42),[.24,.46,.82],.08):[.24,.46,.82]:ht(me(t.fill),r.decorWall);if(t.role==="wall"&&!s){Na(e,u,f,p,c,g,w),Mn(e,t,p+.012);return}if(h&&u.length===4&&p-f>.2){let S=ur(u,f,p);if(!S)return;let{quad:M,side:C,trim:T,inner:N,panel:D}=S,R=[.12,.15,.18];for(let[A,L]of[[0,C],[1-C,1]])ue(e,Ie(M,A,L),p,f,R,R);ue(e,N,f+T,f,R,R),ue(e,N,p,p-T,R,R),ue(e,D,p-T,f+T,w,w),Mn(e,t,p+.012);return}let I=b?ie(Xe(b,.15),.82):w,v=b?ie(Xe(b,.1),1.02):g;if(Va(t.role)&&!s&&Ga(e,t.role,u,f,p,I,v,i,t.heightM!==void 0))return;if((t.role==="sound"||s?.kind==="sound_desk")&&u.length===4&&p-f>.3){let S=De(u),M=Math.hypot(S[1].x-S[0].x,S[1].y-S[0].y)*E,C=Math.min(.12,.09/Math.max(M,.001)),T=[.18,.21,.24],N=p-Math.min(.12,(p-f)*.15);for(let[D,R]of[[0,C],[1-C,1]])ue(e,Ie(S,D,R),N,f,T,T);ue(e,S,p,N,g,T);return}if(t.role==="rail"&&u.length===4&&p>f){let S=De(u),M=Math.hypot(S[1].x-S[0].x,S[1].y-S[0].y)*E,C=Math.max(1,Math.min(128,Math.ceil(M/1.4))),T=Math.min(.08,.055/Math.max(.055,M)),N=[.58,.64,.66];for(let D=0;D<=C;D++){let R=D/C,A=Math.min(1-T,Math.max(0,R-T/2));ue(e,Ie(S,A,A+T),p,f,N,ie(N,.8))}for(let D of[.52,1]){let R=f+(p-f)*D;ue(e,S,R,Math.max(f,R-.055),N,ie(N,.8))}return}if(t.role==="goal"&&u.length===4){let S=De(u),M=Math.hypot(S[1].x-S[0].x,S[1].y-S[0].y)*E,C=Math.min(.12,.1/Math.max(.1,M)),T=[.9,.94,.94];for(let[N,D]of[[0,C],[1-C,1]])ue(e,Ie(S,N,D),Math.max(f,p-.1),f,T,T);ue(e,S,p,Math.max(f,p-.1),T,T);return}if(d.kind==="portal"&&u.length===4){let S=Ut(u,f,p);if(!S)return;let{quad:M,side:C,face:T,openingTop:N}=S;for(let[D,R,A]of[[0,T,1],[T,1-T,.67],[1-T,1,1]]){let L=vn(M,D,R),O=ie(g,A),_=ie(w,A);for(let[k,V]of[[0,C],[1-C,1]])ue(e,Ie(L,k,V),N,f,O,_);ue(e,L,p,N,O,_)}return}if(d.kind==="suite"&&u.length===4){let S=u.map((T,N)=>{let D=u[(N+1)%4],R=(T.x+D.x)/2,A=(T.y+D.y)/2;return Math.hypot(R-i.x,A-i.y)}),M=S.indexOf(Math.min(...S)),C=[0,1,2,3].map(T=>u[(M+T)%4]);ue(e,Ie(C,0,.08),p,f,g,w),ue(e,Ie(C,.92,1),p,f,g,w),ue(e,vn(C,.88,1),p,f,g,w),ue(e,C,p,Math.max(f,p-.18),g,w);return}if(m&&!t.stageKind?.startsWith("pitch-")&&p-f>.12){let S=p-Math.min(.06,(p-f)*.15);ue(e,u,S,f,g,w),ue(e,u,p,S,g,de(g,w,.2))}else ue(e,u,p,f,g,w);if((t.stageKind==="pitch-football"||t.stageKind==="pitch-rugby")&&u.length===4){e.setMaterial(4);let S=De(u);for(let M=0;M<12;M++){let C=Ie(S,M/12,(M+1)/12),T=ie(b??[.12,.38,.16],M%2?1.035:.965),N=C.map(D=>[D.x*E,p+.006,D.y*E]);e.tri(N[0],N[1],N[2],[0,1,0],T),e.tri(N[0],N[2],N[3],[0,1,0],T)}}t.stageKind&&t.stageKind!=="pitch-football"&&Ya(e,u,t.stageKind,p,b),m&&Et(t.stageKind)&&Wa(e,t,p),e.setMaterial(h?1:0),Mn(e,t,p+.012)}function ao(e){let{x:t,y:n,width:o,height:r}=e;if(!o||!r)return null;let i=t+o/2,a=n+r/2,s=(e.rotation??0)*Math.PI/180,c=Math.cos(s),u=Math.sin(s),l=o/2,m=r/2;return[[-l,-m],[l,-m],[l,m],[-l,m]].map(([h,d])=>({x:i+h*c-d*u,y:a+h*u+d*c}))}function Wf(e){if(!e||!e.startsWith("data:image/svg+xml"))return null;let t=e.slice(e.indexOf(",")+1);if(/;base64/i.test(e.slice(0,e.indexOf(","))))try{t=atob(t)}catch{return null}else try{t=decodeURIComponent(t)}catch{}let n=t.match(/<(?:rect|path)\b[^>]*\bfill="([^"]+)"/i);if(!n)return null;let o=n[1].trim();if(o==="none"||o==="transparent")return null;let r=o.match(/^url\(#([^)]+)\)$/);if(!r)return me(o);let i=t.match(new RegExp(`<(?:linear|radial)Gradient\\b[^>]*\\bid="${r[1]}"[^>]*>([\\s\\S]*?)</(?:linear|radial)Gradient>`,"i"));if(!i)return null;let a=[];for(let s of i[1].matchAll(/stop-color="([^"]+)"/gi)){let c=me(s[1].trim());c&&a.push(c)}return a.length?a.reduce((s,c,u)=>de(s,c,1/(u+1)),a[0]):null}function os(e,t,n,o){if(t.layer==="foreground")return;let r=ao(t);if(!r)return;let i=n+Gf,a=ht(Wf(t.href),o.decorTop),s=Math.max(0,Math.min(1,t.opacity??1));s<1&&(a=de(o.ground,a,s)),ae(e,r,void 0,()=>i,n,a,de(a,o.decorWall,.5),re)}function rs(e,t,n,o,r){if(!t.points||t.points.length<3)return;let i=ht(o,r.gaTop);ae(e,t.points,t.holes,()=>n+Za,n,i,r.gaWall,re),qf(e,t.points,n+Za)}var Za=.15,oo=[.72,.74,.76],dr=1.1,Qa=.12,hr=.05,Yf=.06,Kf=2.4;function qf(e,t,n){let o=Ye([...t]),r=Rt(o,Qa/E),i=Rt(o,(Qa+hr)/E);if(r.length<3||i.length<3)return;for(let s of[n+dr,n+dr*.5])ae(e,r,[i.slice().reverse()],()=>s,s-hr,oo,ie(oo,.85),re);let a=Yf/2/E;for(let s=0;s<r.length;s++){let c=r[s],u=r[(s+1)%r.length],l=Math.hypot(u.x-c.x,u.y-c.y)*E,m=Math.max(1,Math.round(l/Kf));for(let h=0;h<m;h++){let d=h/m,f=c.x+(u.x-c.x)*d,p=c.y+(u.y-c.y)*d,b=[{x:f-a,y:p-a},{x:f+a,y:p-a},{x:f+a,y:p+a},{x:f-a,y:p+a}];ae(e,b,void 0,()=>n+dr-hr,n,oo,ie(oo,.8),re)}}}var pr=.6,is=3,$f=.25;function Zf(e,t){if(Fe(t,e.x,e.y))return 0;let n=1/0;for(let o=0,r=t.length-1;o<t.length;r=o++){let i=t[r],a=t[o],s=a.x-i.x,c=a.y-i.y,u=s*s+c*c||1,l=Math.max(0,Math.min(1,((e.x-i.x)*s+(e.y-i.y)*c)/u));n=Math.min(n,Math.hypot(e.x-(i.x+l*s),e.y-(i.y+l*c)))}return n}function as(e,t){let n=e.map(a=>({booth:a,ring:Ke(a)})).filter(a=>!!a.ring&&a.ring.length===4&&!a.booth.points),o=n.map(({ring:a})=>({minX:Math.min(...a.map(s=>s.x)),maxX:Math.max(...a.map(s=>s.x)),minY:Math.min(...a.map(s=>s.y)),maxY:Math.max(...a.map(s=>s.y))})),r=(is+pr)/E,i=new Map;return n.forEach(({booth:a,ring:s},c)=>{let u={x:s.reduce((d,f)=>d+f.x,0)/4,y:s.reduce((d,f)=>d+f.y,0)/4},l=[0,1,2,3].map(d=>{let f=s[d],p=s[(d+1)%4],b={x:(f.x+p.x)/2,y:(f.y+p.y)/2},y=b.x-u.x,g=b.y-u.y,x=Math.hypot(y,g)||1,w={x:b.x+y/x*pr/E,y:b.y+g/x*pr/E},I=is/E;return o.forEach((v,P)=>{P===c||w.x<v.minX-r||w.x>v.maxX+r||w.y<v.minY-r||w.y>v.maxY+r||(I=Math.min(I,Zf(w,n[P].ring)))}),{open:I*E,toward:{x:b.x+y/x*10/E,y:b.y+g/x*10/E},focal:Math.hypot(b.x-t.x,b.y-t.y)}}),m=Math.max(...l.map(d=>d.open)),h=l.filter(d=>d.open>=m-$f).sort((d,f)=>d.focal-f.focal)[0];i.set(a.id,h.toward)}),i}var ss=lt(require("polygon-clipping"),1);var Qf=.45,Jf=1500,ed=200;function cs(e,t){if(e.role!=="stage"||Et(e.stageKind))return e;let n=ge(e);if(!n||n.length<3||Math.abs(Le(n))*E*E>Jf)return e;let o=t.filter(a=>Fe(n,a.x,a.y));if(!o.length||o.length>ed)return e;let r=Qf/E,i=o.map(a=>[[[a.x-r,a.y-r],[a.x+r,a.y-r],[a.x+r,a.y+r],[a.x-r,a.y+r],[a.x-r,a.y-r]]]);try{let a=ss.default.difference([[...n.map(u=>[u.x,u.y]),[n[0].x,n[0].y]]],...i),s=null,c=0;for(let u of a){let l=u[0].slice(0,-1).map(([h,d])=>({x:h,y:d})),m=Math.abs(Le(l));m>c&&(c=m,s=l)}return!s||s.length<3?e:{...e,kind:"polygon",points:s,rotation:0}}catch{return e}}var td=Math.PI/180,pe=96,nd=6,od=60,rd=150,ls=.2,id=.35;function ad(e,t){let n=Math.atan2(t.x-e.x,t.y-e.y)/td;return n<0?n+360:n}function so(e){if(!e.length)return NaN;let t=[...e].sort((n,o)=>n-o);return t[Math.floor(t.length/2)]}function co(e,t,n=2){let o=e.length,r=new Float64Array(o);for(let i=0;i<o;i++){let a=0,s=0;for(let c=-n;c<=n;c++){let u=i+c;if(t)u=(u%o+o)%o;else if(u<0||u>=o)continue;a+=e[u],s++}r[i]=a/s}return r}function us(e,t){let n=e.filter(h=>h.rows.length>=1);if(n.length<1)return null;let o=[],r=0,i=0,a=0;for(let h of n)for(let d of h.rows){for(let f of d.pts)r+=f.x,i+=f.y,a++;if(d.pts.length>=4){let f=Jo(d.pts);f&&Number.isFinite(f.cx)&&Number.isFinite(f.cy)&&o.push({x:f.cx,y:f.cy})}}if(!a)return null;let s={x:r/a,y:i/a},c=s;if(o.length>=8){let h=so(o.map(y=>y.x)),d=so(o.map(y=>y.y)),f=0;for(let y of n)for(let g of y.rows)for(let x of g.pts){let w=Math.hypot(x.x-s.x,x.y-s.y);w>f&&(f=w)}let p=0,b=f*.2;for(let y of n)for(let g of y.rows)for(let x of g.pts)Math.hypot(x.x-h,x.y-d)<b&&p++;Math.hypot(h-s.x,d-s.y)<=f&&p/a<.01&&(c={x:h,y:d})}let u=[];for(let h of n){let d={sectionId:h.sectionId,rMin:1/0,rMax:-1/0,samples:[]};for(let f of h.rows)for(let p of f.pts){let b=Math.hypot(p.x-c.x,p.y-c.y),y=Math.min(pe-1,Math.floor(ad(c,p)/(360/pe)));d.samples.push({r:b,bin:y,levelM:f.levelM}),b<d.rMin&&(d.rMin=b),b>d.rMax&&(d.rMax=b)}d.samples.length&&u.push(d)}if(!u.length)return null;u.sort((h,d)=>h.rMin+h.rMax-(d.rMin+d.rMax));let l=[];for(let h of u){let d=!1;for(let f of l){let p=Math.min(h.rMax,f.rMax)-Math.max(h.rMin,f.rMin),b=Math.min(h.rMax-h.rMin,f.rMax-f.rMin);if(b>1e-9&&p>=id*b){f.members.push(h),f.rMin=Math.min(f.rMin,h.rMin),f.rMax=Math.max(f.rMax,h.rMax),d=!0;break}}d||l.push({members:[h],rMin:h.rMin,rMax:h.rMax})}let m=[];for(let h of l){let d=new Array(pe).fill(null);for(let D of h.members)for(let R of D.samples){let A=d[R.bin];A||(A={samples:[]},d[R.bin]=A),A.samples.push({r:R.r,levelM:R.levelM})}let f=d.map(D=>!!D);if(!f.filter(Boolean).length)continue;let b=[],y=[];for(let D of d){if(!D)continue;let R=1/0,A=-1/0;for(let L of D.samples)L.r<R&&(R=L.r),L.r>A&&(A=L.r);b.push(R),y.push(A)}let g=so(b),x=so(y);if(!(g>=ls*x)||!(x>0))continue;let w=[...b].sort((D,R)=>D-R);if(!(w[Math.floor(w.length*.1)]>=ls*x))continue;let v=d.map(D=>{if(!D)return null;let R=[...D.samples].sort((B,z)=>B.r-z.r),A=R[0].r,L=R[R.length-1].r,O=R[0].levelM,_=-1/0;for(let B of R)B.levelM>_&&(_=B.levelM);let k=[];for(let B of R){let z={r:B.r,l:B.levelM};for(;k.length&&Math.abs(k[k.length-1].r-z.r)<1e-9;){if(k[k.length-1].l<=z.l){z.skip=!0;break}k.pop()}if(!z.skip){for(;k.length>=2;){let U=k[k.length-2],G=k[k.length-1];if((G.r-U.r)*(z.l-U.l)-(G.l-U.l)*(z.r-U.r)<=0)k.pop();else break}k.push(z)}}let V=k.map(B=>B.r),F=k.map(B=>B.l);return{inner:A,outer:L,front:O,top:_,profile:{rs:V,ls:F}}}),P=f.slice();for(let D=0;D<pe;D++){if(P[D])continue;let R=-1,A=-1,L=0;for(let H=1;H<=pe;H++){let K=(D-H+pe*2)%pe;if(P[K]){R=K;break}}for(let H=1;H<=pe;H++){let K=(D+H)%pe;if(P[K]){A=K,L=H;break}}if(R<0||A<0)continue;let O=0;for(let H=1;H<=pe;H++){let K=(D-H+pe*2)%pe;if(f[K]){O=H;break}}if(O-1+L>nd)continue;let k=v[R],V=v[A],F=O/(O+L),B=k.inner+(V.inner-k.inner)*F,z=k.outer+(V.outer-k.outer)*F,U=k.front+(V.front-k.front)*F,G=k.top+(V.top-k.top)*F;v[D]={inner:B,outer:z,front:U,top:G,profile:{rs:[B,z],ls:[U,G]}}}for(let D=0;D<pe;D++)v[D]&&(P[D]=!0);let S=360/pe,M=[],C=P.filter(Boolean).length,T=[];if(C===pe)T.push({start:0,len:pe});else{let D=0;for(;P[D];)D=(D+1)%pe;let R=-1;for(let A=0;A<=pe;A++){let L=(D+A)%pe,O=A<pe&&P[L];if(O&&R<0)R=L;else if(!O&&R>=0){let _=(L-R+pe)%pe||pe;T.push({start:R,len:_}),R=-1}}}for(let D of T){if(D.len*S<od&&D.len<pe)continue;let R=D.len===pe,A=new Float64Array(D.len),L=new Float64Array(D.len),O=new Float64Array(D.len),_=new Float64Array(D.len),k=[];for(let H=0;H<D.len;H++){let K=v[(D.start+H)%pe];A[H]=K.inner,L[H]=K.outer,O[H]=K.front,_[H]=K.top,k.push(K.profile??{rs:[K.inner,K.outer],ls:[K.front,K.top]})}let V=co(A,R),F=co(L,R),B=co(O,R),z=co(_,R);for(let H=0;H<D.len;H++)V[H]>A[H]&&(V[H]=A[H]),F[H]<L[H]&&(F[H]=L[H]),V[H]>F[H]-1e-6&&(V[H]=Math.max(0,F[H]-1e-6)),z[H]<B[H]&&(z[H]=B[H]);let U={startBin:D.start,binCount:D.len,closed:R,innerR:V,outerR:F,frontLevelM:B,topLevelM:z,profiles:k},G=(H,K,Q)=>{let Y=k[H],W=Y.rs,Z=Y.ls;if(K<=W[0]){Z[0]>Q&&(Z[0]=Q);return}if(K>=W[W.length-1]){Z[Z.length-1]>Q&&(Z[Z.length-1]=Q);return}for(let ee=0;ee+1<W.length;ee++)if(K<=W[ee+1]){Z[ee]>Q&&(Z[ee]=Q),Z[ee+1]>Q&&(Z[ee+1]=Q);return}};for(let H=0;H<D.len;H++){let K=d[(D.start+H)%pe];if(K)for(let Q of K.samples){G(H,Q.r,Q.levelM);let Y=R?(H-1+D.len)%D.len:H-1,W=R?(H+1)%D.len:H+1;Y>=0&&G(Y,Q.r,Q.levelM),W<D.len&&G(W,Q.r,Q.levelM)}}M.push(U)}M.reduce((D,R)=>D+R.binCount*S,0)<rd||m.push({arcs:M,sectionIds:h.members.map(D=>D.sectionId),innerRMedian:g,outerRMedian:x})}if(!m.length)return null;if(m.sort((h,d)=>h.innerRMedian-d.innerRMedian),t){let h=m[m.length-1].outerRMedian;if(Math.hypot(t.x-c.x,t.y-c.y)>.9*h)return null}return{centre:c,binCount:pe,binStepDeg:360/pe,rings:m}}function ms(e,t,n,o){let r=e.binStepDeg,i=n/r-.5-t.startBin;i=(i%e.binCount+e.binCount)%e.binCount,i>t.binCount-1&&(t.closed?i=i-t.binCount<t.binCount-i?0:t.binCount-1:i=i-(t.binCount-1)<e.binCount-i?t.binCount-1:0);let a=Math.floor(i),s=t.closed?(a+1)%t.binCount:Math.min(t.binCount-1,a+1),c=i-a,u=l=>{let m=t.profiles[l],h=m.rs,d=m.ls;if(o<=h[0])return d[0];if(o>=h[h.length-1])return d[d.length-1];for(let f=0;f+1<h.length;f++)if(o<=h[f+1]){let p=h[f+1]-h[f],b=p>1e-9?(o-h[f])/p:0;return d[f]+(d[f+1]-d[f])*b}return d[d.length-1]};return u(a)*(1-c)+u(s)*c}function br(e,t,n,o,r,i,a,s,c,u=[],l=r){if(t.length!==n.length||t.length<2||i-r<1.5)return;let m=(p,b,y)=>{ot(e,p,b,y,u,a,s,{portalBase:l,ao:c})||ae(e,p,void 0,()=>y,b,a,s,c)},h=(p,b,y)=>({x:p.x+(b.x-p.x)*y,y:p.y+(b.y-p.y)*y}),d=o?t.length:t.length-1,f=0;for(let p=0;p<d;p++){let b=(p+1)%t.length,y=Math.hypot(n[b].x-n[p].x,n[b].y-n[p].y)*le;if(y<1e-5)continue;let g=(v,P)=>[h(t[p],t[b],v),h(t[p],t[b],P),h(n[p],n[b],P),h(n[p],n[b],v)];m(g(0,1),r,r+.95),m(g(0,1),i-.22,i);let x=Math.ceil((f-.32)/6)*6,w=!1,I=!1;for(let v=x;v<f+y;v+=6){let P=Math.max(0,(v-f)/y),S=Math.min(1,(v+.32-f)/y);S<=P||(m(g(P,S),r+.95,i-.22),w||=P<1e-6,I||=S>1-1e-6)}if(!o&&(p===0&&!w||p===d-1&&!I)){let v=Math.min(1,.32/y);m(g(p===0?0:1-v,p===0?v:1),r+.95,i-.22)}f+=y}}var Sn=.65;function fs(e,t){let n=1/0;for(let o of t)for(let r=0;r<o.length;r++){let i=o[r],a=o[(r+1)%o.length],s=a.x-i.x,c=a.y-i.y,u=Math.max(0,Math.min(1,((e.x-i.x)*s+(e.y-i.y)*c)/(s*s+c*c||1)));n=Math.min(n,Math.hypot(e.x-i.x-u*s,e.y-i.y-u*c))}return n}var ds=.01;function hs(e,t,n,o,r,i,a,s=[],c=!0){if(o-r<=1e-5)return;let u=o-r>=3,l=u?o-Sn:r;e.setMaterial(5);let m=u?[]:s.filter(w=>{if(w.role!=="entrance"&&w.role!=="exit")return!1;let I=ge(w);if(!I)return!1;let v=Ut(I,r,r+je(w).heightM);return v!==null&&v.openingTop<=o-.12});if((!m.length||!ot(e,t,l,o,m,i,a,{holes:n,portalBase:r}))&&ae(e,t,n,()=>o,l,i,a,re,void 0,()=>[0,1,0]),!u){e.setMaterial(0);return}let h=6/E,d=.22/E,f=s.flatMap(w=>{if(w.role!=="entrance"&&w.role!=="exit")return[];let I=ge(w);return I?.length?[{minX:Math.min(...I.map(v=>v.x)),maxX:Math.max(...I.map(v=>v.x)),minY:Math.min(...I.map(v=>v.y)),maxY:Math.max(...I.map(v=>v.y))}]:[]}),p=Math.min(...t.map(w=>w.x)),b=Math.max(...t.map(w=>w.x)),y=Math.min(...t.map(w=>w.y)),g=Math.max(...t.map(w=>w.y));for(let w=p+h/2;w<b;w+=h)for(let I=y+h/2;I<g;I+=h){if(f.some(P=>w+d>=P.minX&&w-d<=P.maxX&&I+d>=P.minY&&I-d<=P.maxY))continue;let v=[{x:w-d,y:I-d},{x:w+d,y:I-d},{x:w+d,y:I+d},{x:w-d,y:I+d}];!_e({x:w,y:I},t,n)||fs({x:w,y:I},[t,...n??[]])<d*Math.SQRT2+(c?yr/E:0)||ae(e,v,void 0,()=>l,r,i,a,re)}let x=Rt(t,yr/E);if(c&&x.length>=3){let w=s.filter(P=>{if(P.role!=="entrance"&&P.role!=="exit")return!1;let S=ge(P);return!!S&&S.some(M=>!_e(M,t,void 0)||fs(M,[t])<=yr/E)}),I=[x.slice().reverse()],v=r-ds;(!w.length||!ot(e,t,v,l,w,i,a,{holes:I,portalBase:r+ds}))&&ae(e,t,I,()=>l,v,i,a,re)}e.setMaterial(0)}var yr=.25;var sd=.02,cd=.25,ld=1.2,ud=.6,md=.45,fd=2.3,dd=Math.PI/180,ps=.005;function qe(e,t,n){let o=n*dd;return{x:e.x+t*Math.sin(o),y:e.y+t*Math.cos(o)}}function hd(e,t){let n=t.rings[t.rings.length-1];if(!n)return!1;let o=n.outerRMedian*.85;for(let r of e){if(r.role!=="wall")continue;let i=r.points&&r.points.length>=2?r.points:r.x!==void 0&&r.y!==void 0&&r.width!==void 0&&r.height!==void 0?[{x:r.x,y:r.y},{x:r.x+r.width,y:r.y},{x:r.x+r.width,y:r.y+r.height},{x:r.x,y:r.y+r.height}]:[];if(i.length<2)continue;let a=0;for(let s of i)Math.hypot(s.x-t.centre.x,s.y-t.centre.y)>=o&&a++;if(a>=i.length/2)return!0}return!1}var pd=24,bd=.01;function yd(e,t,n,o,r,i,a,s,c){let u=n.binCount,l=pd,m=le,h=i+.02,d=i-bd,f=[];for(let R=0;R<u;R++){let A=(n.startBin+R+.5)*t.binStepDeg,L=new Float64Array(l+1);for(let O=0;O<=l;O++){let _=o[R]+(r[R]-o[R])*O/l;L[O]=Math.max(h,ms(t,n,A,_)-cd)}f.push(L)}if(c){let R=0;for(let A=0;A+1<u;A++)for(let L=0;L<l;L++){let O=qe(t.centre,o[A]+(r[A]-o[A])*L/l,(n.startBin+A+.5)*t.binStepDeg),_=qe(t.centre,o[A+1]+(r[A+1]-o[A+1])*(L+1)/l,(n.startBin+A+1.5)*t.binStepDeg);R=Math.max(R,Math.hypot(_.x-O.x,_.y-O.y))}for(let A=0;A<u;A++){let L=(n.startBin+A+.5)*t.binStepDeg;for(let O=0;O<=l;O++){let _=qe(t.centre,o[A]+(r[A]-o[A])*O/l,L),k=c(_.x,_.y,R*1.01);k!==null&&(f[A][O]=Math.min(f[A][O],Math.max(d+ps,k-ps)))}}}let p=[a.bandTop[0]*s.top,a.bandTop[1]*s.top,a.bandTop[2]*s.top],b=[a.bandTop[0]*s.bottomCap,a.bandTop[1]*s.bottomCap,a.bandTop[2]*s.bottomCap],y=[a.bandWall[0]*s.top,a.bandWall[1]*s.top,a.bandWall[2]*s.top],g=[a.bandWall[0]*s.wallBottom,a.bandWall[1]*s.wallBottom,a.bandWall[2]*s.wallBottom],x=(R,A)=>{let L=(n.startBin+R+.5)*t.binStepDeg,O=o[R]+(r[R]-o[R])*A/l,_=qe(t.centre,O,L);return[_.x*m,f[R][A],_.y*m]};{let R=Math.tan(12*Math.PI/180);for(let A=0;A<6;A++){let L=!1;for(let _=0;_<u;_++)for(let k=l-1;k>=0;k--)f[_][k]>f[_][k+1]&&(f[_][k]=f[_][k+1],L=!0);let O=n.closed?u:u-1;for(let _=0;_<O;_++){let k=(_+1)%u;for(let V=0;V<=l;V++){let F=f[k][V]-f[_][V];if(Math.abs(F)>1)continue;let B=o[_]+(r[_]-o[_])*V/l,z=o[k]+(r[k]-o[k])*V/l,U=qe(t.centre,B,(n.startBin+_+.5)*t.binStepDeg),G=qe(t.centre,z,(n.startBin+k+.5)*t.binStepDeg),H=R*Math.hypot(G.x-U.x,G.y-U.y)*m;F>H?(f[k][V]=f[_][V]+H,L=!0):-F>H&&(f[_][V]=f[k][V]+H,L=!0)}}if(!L)break}}let w=1,I=(R,A)=>{for(let L=0;L<=l;L+=4)if(Math.abs(f[R][L]-f[A][L])>w)return!0;return Math.abs(f[R][l]-f[A][l])>w},v=Math.tan(38*Math.PI/180),P=R=>(r[R]-o[R])/l*m,S=(R,A)=>f[R][A+1]-f[R][A]>v*Math.max(1e-6,P(R)),M=(R,A)=>{let L=n.closed?(R-1+u)%u:Math.max(0,R-1),O=n.closed?(R+1)%u:Math.min(u-1,R+1);Math.abs(f[L][A]-f[R][A])>w&&(L=R),Math.abs(f[O][A]-f[R][A])>w&&(O=R);let _=Math.max(0,A-1),k=Math.min(l,A+1);_<A&&S(R,_)&&(_=A),k>A&&S(R,A)&&(k=A);let V=x(L,A),F=x(O,A),B=x(R,_),z=x(R,k),U=F[0]-V[0],G=F[1]-V[1],H=F[2]-V[2],K=z[0]-B[0],Q=z[1]-B[1],Y=z[2]-B[2],W=G*Y-H*Q,Z=H*K-U*Y,ee=U*Q-G*K,q=Math.hypot(W,Z,ee);return q>1e-12?(W/=q,Z/=q,ee/=q,Z<0&&(W=-W,Z=-Z,ee=-ee),[W,Z,ee]):[0,1,0]},C=(R,A,L=!1)=>{let O=L&&Math.min(R[1],A[1])-i>=3,_=[R[0],O?R[1]-Sn:d,R[2]],k=[A[0],O?A[1]-Sn:d,A[2]],V=A[0]-R[0],F=A[2]-R[2],B=Math.hypot(V,F);if(!(B>1e-12))return;let z=[F/B,0,-V/B];e.tri(R,A,k,z,y,y,g),e.tri(R,k,_,z,y,g,g)},T=.05*Ve,N=R=>r[R]-o[R]<T,D=n.closed?u:u-1;for(let R=0;R<D;R++){let A=(R+1)%u;if(N(R)||N(A))continue;if(I(R,A)){let F=(n.startBin+R+1)*t.binStepDeg,B=(Q,Y)=>{let W=(o[R]+o[A])/2,Z=(r[R]+r[A])/2,ee=W+(Z-W)*Y/l,q=qe(t.centre,ee,F);return[q.x*m,f[Q][Y],q.y*m]};for(let Q=0;Q<l;Q++){let Y=x(R,Q),W=x(R,Q+1),Z=B(R,Q),ee=B(R,Q+1),q=M(R,Q),oe=M(R,Q+1);e.triN(Y,Z,ee,q,q,oe,p),e.triN(Y,ee,W,q,oe,oe,p);let te=x(A,Q),$=x(A,Q+1),ne=B(A,Q),he=B(A,Q+1),Te=M(A,Q),Pe=M(A,Q+1);e.triN(ne,te,$,Te,Te,Pe,p),e.triN(ne,$,he,Te,Pe,Pe,p);let ke=B(R,Q),Se=B(R,Q+1),Je=B(A,Q+1),Zt=B(A,Q),it=Se[0]-ke[0],at=Se[2]-ke[2],vt=Math.hypot(it,at);if(vt>1e-12){let Qt=[at/vt,0,-it/vt];e.tri(ke,Se,Je,Qt,y),e.tri(ke,Je,Zt,Qt,y)}}let z=x(R,0),U=x(A,0),G=x(A,l),H=x(R,l),K=Q=>[Q[0],d,Q[2]];Math.min(z[1],U[1])-i<3&&(e.tri(K(z),K(G),K(U),[0,-1,0],b),e.tri(K(z),K(H),K(G),[0,-1,0],b)),C(z,U,!0),C(H,G,!0);continue}for(let F=0;F<l;F++){let B=M(R,F),z=M(A,F),U=M(A,F+1),G=M(R,F+1);if(S(R,F)||S(A,F)){let W=(Se,Je)=>{let Zt=(n.startBin+Se+.5)*t.binStepDeg,it=o[Se]+(r[Se]-o[Se])*(F+.5)/l,at=qe(t.centre,it,Zt);return[at.x*m,Je,at.y*m]},Z=x(R,F),ee=x(A,F),q=W(R,f[R][F]),oe=W(A,f[A][F]);e.triN(Z,ee,oe,B,z,z,p),e.triN(Z,oe,q,B,z,B,p);let te=x(A,F+1),$=x(R,F+1),ne=W(R,f[R][F+1]),he=W(A,f[A][F+1]);e.triN(ne,he,te,G,U,U,p),e.triN(ne,te,$,G,U,G,p);let Te=oe[0]-q[0],Pe=oe[2]-q[2],ke=Math.hypot(Te,Pe);if(ke>1e-12){let Se=[-Pe/ke,0,Te/ke];e.tri(q,oe,he,Se,y),e.tri(q,he,ne,Se,y)}continue}let H=x(R,F),K=x(A,F),Q=x(A,F+1),Y=x(R,F+1);e.triN(H,K,Q,B,z,U,p),e.triN(H,Q,Y,B,U,G,p)}let L=x(R,0),O=x(A,0),_=x(A,l),k=x(R,l),V=F=>[F[0],d,F[2]];Math.min(L[1],O[1])-i<3&&(e.tri(V(L),V(_),V(O),[0,-1,0],b),e.tri(V(L),V(k),V(_),[0,-1,0],b)),C(L,O,!0),C(k,_,!0)}if(!n.closed)for(let R of[0,u-1])for(let A=0;A<l;A++)C(x(R,A),x(R,A+1))}function bs(e,t,n){let{bottomY:o,colors:r,ao:i}=n,a=new Float64Array(t.binCount).fill(-1/0);for(let l of t.rings)for(let m of l.arcs){let h=new Float64Array(m.binCount),d=new Float64Array(m.binCount);for(let p=0;p<m.binCount;p++){let b=(m.startBin+p)%t.binCount,y=Math.max(0,m.innerR[p]-Ge);h[p]=Math.max(y,a[b]+.001),d[p]=Math.max(h[p]+.001,m.outerR[p]+Ge)}let f=0;for(let p=0;p<m.binCount;p++){let b=m.topLevelM[p]-o;b>f&&(f=b)}f>=ld&&yd(e,t,m,h,d,o,r,i,n.standTopNear);for(let p=0;p<m.binCount;p++){let b=(m.startBin+p)%t.binCount;d[p]>a[b]&&(a[b]=d[p])}}if(n.deriveShell===!1||hd(n.shapes,t))return;let s=t.rings[t.rings.length-1],c=ud*Ve,u=md*Ve;for(let l of s.arcs){let m=[],h=[];for(let M=0;M<l.binCount;M++){let C=(l.startBin+M+.5)*t.binStepDeg,T=l.outerR[M]+Ge+c;m.push(qe(t.centre,T,C)),h.push(qe(t.centre,T+u,C))}let d=-1/0;for(let M=0;M<l.binCount;M++)l.topLevelM[M]>d&&(d=l.topLevelM[M]);let f=d+fd,p=l.closed?h:[...h,...m.slice().reverse()],b=l.closed?[m.slice().reverse()]:void 0,y=de(r.shellWall,[.66,.71,.72],.62),g=(M,C,T,N,D)=>{let R=Math.abs(N-d)<1e-6?N-sd:N;ot(e,M,T,R,n.shapes,r.shellTop,D,{holes:C,portalBase:o,ao:i})||ae(e,M,C,()=>R,T,r.shellTop,D,i)},x=Math.max(1,Math.ceil((d-o)/4.5)),w=(d-o)/x,I=new Set,v=n.tierFrontLevels??t.rings.map(M=>{let C=M.arcs.flatMap(T=>Array.from(T.frontLevelM)).filter(Number.isFinite).sort((T,N)=>T-N);return C[Math.floor(C.length/2)]});for(let M of v)Number.isFinite(M)&&M-o>=3&&M<d&&I.add(Math.max(0,Math.min(x-1,Math.floor((M-o)/w))));let P=Math.min(...v.filter(M=>Number.isFinite(M)&&M-o>=3&&M<d));for(let M=0;M<x;M++)o+(M+1)*w<=P-Sn&&Number.isFinite(P)&&I.add(M);for(let M=0;M<x;M++){let C=o+(d-o)*M/x,T=o+(d-o)*(M+1)/x;I.has(M)&&T-C>=3.2?(g(p,b,C,C+.45,y),br(e,m,h,l.closed,C+.45,T-.16,r.shellTop,y,i,n.shapes,o)):g(p,b,C,T-.16,y),g(p,b,T-.16,T,ie(y,.62))}br(e,m,h,l.closed,d,f,r.shellTop,y,i,n.shapes,o);let S=8;for(let M=1;M<h.length;M++){if(S+=Math.hypot(h[M].x-h[M-1].x,h[M].y-h[M-1].y)*le,S<8)continue;S=0;let C=h[M],T=h[M-1],N=C.x-T.x,D=C.y-T.y,R=Math.max(1,Math.hypot(N,D)),A=N/R*.16*Ve,L=D/R*.16*Ve,O=Math.max(1,Math.hypot(C.x-t.centre.x,C.y-t.centre.y)),_=(C.x-t.centre.x)/O*.24*Ve,k=(C.y-t.centre.y)/O*.24*Ve,V=[{x:C.x-A,y:C.y-L},{x:C.x+A,y:C.y+L},{x:C.x+A+_,y:C.y+L+k},{x:C.x-A+_,y:C.y-L+k}];g(V,void 0,o,d,ie(y,1.12))}}}function ys(e,t,n,o){let r=new Map;for(let s of t){let c=r.get(s.blockId);(!c||s.depth<c.depth)&&r.set(s.blockId,s)}let i=[.68,.72,.72],a=[.48,.55,.57];for(let s of r.values()){if(s.y-o<2.5||s.pts.length<2)continue;let c=s.pts.map(l=>{let m=l.x-n.x,h=l.y-n.y,d=Math.max(1,Math.hypot(m,h));return{x:l.x-m/d*.65/E,y:l.y-h/d*.65/E}}),u=2;for(let l=1;l<c.length;l++){let m=c[l-1],h=c[l],d=h.x-m.x,f=h.y-m.y,p=Math.hypot(d,f);if(p<1e-5||p*E>2)continue;let b=y=>{let g=-f/p*y/E/2,x=d/p*y/E/2;return[{x:m.x+g,y:m.y+x},{x:h.x+g,y:h.y+x},{x:h.x-g,y:h.y-x},{x:m.x-g,y:m.y-x}]};ae(e,b(.22),void 0,()=>s.y-.06,s.y-.56,i,i,re);for(let y of[.5,.95])ae(e,b(.045),void 0,()=>s.y+y,s.y+y-.045,a,a,re);if(u+=p*E,u>=1.8||l===c.length-1){u=0;let y=.028/E,g=[{x:m.x-y,y:m.y-y},{x:m.x+y,y:m.y-y},{x:m.x+y,y:m.y+y},{x:m.x-y,y:m.y+y}];ae(e,g,void 0,()=>s.y+.95-.045,s.y-.06,a,a,re)}}}}function gs(e,t,n,o,r){let i=[.67,.71,.68];for(let a=0;a<t.length;a++){let s=t[a];if(!(s.pts.length<2))for(let c of[0,s.pts.length-1]){let u=s.pts[c],l=s.pts[c===0?1:c-1],m=u.x-l.x,h=u.y-l.y,d=Math.hypot(m,h);if(d<1e-5)continue;m/=d,h/=d;let f=1/0;for(let S=0;S<n.length;S++){let M=n[S],C=n[(S+1)%n.length],T=C.x-M.x,N=C.y-M.y,D=m*N-h*T;if(Math.abs(D)<1e-8)continue;let R=M.x-u.x,A=M.y-u.y,L=(R*N-A*T)/D,O=(R*h-A*m)/D;L>0&&O>=0&&O<=1&&(f=Math.min(f,L))}let p=.3/E,b=f-.04/E;if(!Number.isFinite(f)||f*E>2||b-p<.12/E)continue;let y=.27/E,g=[{x:u.x+m*p-h*y,y:u.y+h*p+m*y},{x:u.x+m*b-h*y,y:u.y+h*b+m*y},{x:u.x+m*b+h*y,y:u.y+h*b-m*y},{x:u.x+m*p+h*y,y:u.y+h*p-m*y}];if(!g.every(S=>Fe(n,S.x,S.y)))continue;let x=r?.[a]?.belowY,w=x==null?0:s.y-x,I=!!o&&w>.03&&w<=.65;if(I&&o){let S=(M,C)=>Math.hypot((M.x+C.x)/2-o.x,(M.y+C.y)/2-o.y);S(g[0],g[1])>S(g[3],g[2])&&(g=[g[3],g[2],g[1],g[0]])}let v=I?Math.ceil((w-1e-8)/.2):1,P=(S,M,C)=>({x:S.x+(M.x-S.x)*C,y:S.y+(M.y-S.y)*C});for(let S=0;S<v;S++){let M=S/v,C=(S+1)/v,T=[P(g[0],g[3],M),P(g[1],g[2],M),P(g[1],g[2],C),P(g[0],g[3],C)],N=s.y+.008-(I?w*(1-C):0);if(ae(e,T,void 0,()=>N,N-(I?w/v+.1:.16),i,[.43,.47,.46],re),!I)continue;let D=Math.hypot(T[3].x-T[0].x,T[3].y-T[0].y)*E,R=Math.min(.04/D,.25),A=P(T[0],T[3],R),L=P(T[1],T[2],R),O=k=>[k.x*E,N+.004,k.y*E],_=[.66,.59,.39];e.tri(O(T[0]),O(T[1]),O(L),[0,1,0],_),e.tri(O(T[0]),O(L),O(A),[0,1,0],_)}}}}function xs(e,t,n,o,r,i,a,s,c=!1){if(!t.outline||t.outline.length<3)return;let u=n.baseHeightM,l=n.objects.filter(g=>g.type==="shape"&&(g.role==="entrance"||g.role==="exit")),m=Ta(o,s.tierTop);if(!r)return;let h=g=>r.deckAt(g.x,g.y),d=Ca(t,a),f=d[0]??t.outline;if(r.rowLevels.length>=2){let g=qn(r.rowLevels),x=Ra(va(r.rowLevels,n.focal,g),d);for(let I of x){let v=Math.max(u,I.topY-vs);for(let P of i.subtract(I.outline,v))hs(e,P,I.holes,v,u,s.tierTop,s.tierWall,l,!c)}x.length||ae(e,f,t.holes,()=>r.landingY,u,m,s.tierWall,re);let w={tread:[m[0]*re.top,m[1]*re.top,m[2]*re.top],riser:[m[0]*.72,m[1]*.72,m[2]*.72]};for(let I of d.length?d:[f])Sa(e,r.rowLevels,n.focal,r.landingY,w,I,g);ys(e,r.rowLevels,n.focal,u),gs(e,r.rowLevels,t.outline,n.focal,g);return}let p=r.flat?1/0:Ea,b=g=>r.normalAt(g.x,g.y),y=r.flat?r.landingY:void 0;for(let g of i.subtract(f,y))ae(e,g,t.holes,h,u,m,s.tierWall,re,p,b)}function gd(e,t,n){let o=new Set;for(let a of e.objects)a.type==="section"&&o.add(a.id);let r=new Map;for(let a=0;a<t.length;a++){let s=n.seatOwner[a];if(!s||!o.has(s))continue;let c=n.bySection.get(s);if(c&&c.rowLevels.length>=2)continue;let u=t[a];if(u.kind==="booth")continue;let l=r.get(s);l||(l=new Map,r.set(s,l));let m=u.rowId||`__seat-${a}`,h=l.get(m);h||(h={pts:[],levelM:0,n:0},l.set(m,h)),h.pts.push({x:u.x,y:u.y}),h.levelM+=n.seatDeckY(a),h.n++}let i=[];for(let a of e.objects){if(a.type!=="section")continue;let s=n.bySection.get(a.id);if(s&&s.rowLevels.length>=2){let u=s.rowLevels.filter(l=>!l.patch).map(l=>({pts:l.pts,levelM:l.y}));u.length>=2&&i.push({sectionId:a.id,rows:u});continue}let c=r.get(a.id);c&&i.push({sectionId:a.id,rows:[...c.values()].map(u=>({pts:u.pts,levelM:u.levelM/u.n}))})}return i}function xd(e,t){let n=1/0;for(let o=0;o<t.length;o++){let r=t[o],i=t[(o+1)%t.length],a=i.x-r.x,s=i.y-r.y,c=Math.max(0,Math.min(1,((e.x-r.x)*a+(e.y-r.y)*s)/(a*a+s*s||1)));n=Math.min(n,Math.hypot(e.x-r.x-c*a,e.y-r.y-c*s))}return n}var vs=.02;function vd(e,t){let n=e.objects.filter(o=>o.type==="section"&&!!o.outline&&o.outline.length>=3).flatMap(o=>{let r=t.bySection.get(o.id);if(!r)return[];let i=1/0,a=-1/0,s=1/0,c=-1/0;for(let l of o.outline)l.x<i&&(i=l.x),l.x>a&&(a=l.x),l.y<s&&(s=l.y),l.y>c&&(c=l.y);let u=r.landingY;for(let l of r.rowLevels)u=Math.min(u,l.y-vs);return[{outline:o.outline,holes:o.holes,surface:r,floorTop:u,minX:i,maxX:a,minY:s,maxY:c}]});return(o,r,i)=>{let a=null;for(let s of n){if(o<s.minX-i||o>s.maxX+i||r<s.minY-i||r>s.maxY+i)continue;let c={x:o,y:r};if(!_e(c,s.outline,s.holes)&&xd(c,s.outline)>i)continue;let u=Math.min(s.surface.deckAt(o,r),s.floorTop);(a===null||u<a)&&(a=u)}return a}}var Md=3,Sd=.4;function Ms(e,t,n,o,r,i,a=!0){let s=gd(t,n,o);if(s.length<Md)return;let c=us(s,t.focal);if(!c)return;let u=Math.max(0,...c.rings.map(l=>l.arcs.reduce((m,h)=>m+h.binCount,0)))/c.binCount;e.setMaterial(5),bs(e,c,{bottomY:t.baseHeightM,tierFrontLevels:s.map(l=>Math.min(...l.rows.map(m=>m.levelM))),colors:{bandTop:ie(r.tierTop,.8),bandWall:r.tierWall,shellTop:i??ie(r.tierWall,1.15),shellWall:i??r.tierWall},ao:re,shapes:t.objects.filter(l=>l.type==="shape"),deriveShell:a&&u>=Sd,standTopNear:vd(t,o)}),e.setMaterial(0)}var Ss=4;var wd=[[/\b(wc|toilets?|restrooms?|washrooms?|lavatory|loo)\b/i,"restroom"],[/\b(bar|drinks|pub|cocktails?)\b/i,"bar"],[/\b(food|concessions?|snacks?|kiosk|caf[eé]|kitchen|catering)\b/i,"concession"],[/\b(coat ?check|cloak ?room|cloakroom|coats)\b/i,"coat"],[/\b(screen|led wall|projection|video wall)\b/i,"screen"],[/\b(sound|foh|mixing desk|control booth)\b/i,"sound"],[/\b(entrance|entry|way in|gate)\b/i,"entrance"],[/\b(exit|way out)\b/i,"exit"],[/\b(pillar|column|obstruction)\b/i,"obstruction"]];function Pd(e){if(!e)return null;for(let[t,n]of wd)if(t.test(e))return n;return null}var Is="auto-rows-";function Cs(e){return e.id.startsWith(Is)&&!e.label}var Id=1.15,Cd=.09,Rd=6,Ad=34,Ed=.35,_d=6,Td=.35,kd=.75,Ld=12,Fd=2.5,Dd=40,ws=[18,24],Od=.8,Bd=.6,Nd=5,Vd=.3,Rs=.4,Gd=2,Hd=400,zd=2.6,Ud=1.6,jd=6e3,Xd=.6,Wd="#c3c7cd",Ps=300,Yd=240;function Kd(e,t,n,o){if(!e.fill||!/^#[0-9a-f]{6}$/i.test(e.fill))return null;let r=xr([...t]),i=new Set;for(let l of o)i.add(Math.floor(Math.atan2(l.y-r.y,l.x-r.x)*180/Math.PI/10));if(i.size*10<Yd)return null;let{h:a,s,l:c}=si(ii(e.fill));return a<70/360||a>170/360||s<.2||c<.08||c>.75||n.some(l=>l!==e&&l.type==="shape"&&ge(l)?.some(m=>Sr(m,t)))?null:e.kind==="ellipse"?"oval-cricket":e.kind==="rect"?"pitch-football":null}var qd="Estimated from the drawing; confirm with the venue.",As=e=>{if(!e.length)return null;let t=[...e].sort((o,r)=>o-r),n=Math.floor(t.length/2);return t.length%2?t[n]:(t[n-1]+t[n])/2},xr=e=>({x:e.reduce((t,n)=>t+n.x,0)/e.length,y:e.reduce((t,n)=>t+n.y,0)/e.length}),vr=e=>{let t=0;for(let n=0;n<e.length;n++){let o=e[n],r=e[(n+1)%e.length];t+=o.x*r.y-r.x*o.y}return Math.abs(t)/2};function $d(e){return e.height!==void 0||e.rake!==void 0||e.elevation!==void 0||e.surfaceKind!==void 0}function Mr(e){let t=new Map;for(let n of e){let o=t.get(n.rowId);o?o.push(n):t.set(n.rowId,[n])}return t}function Sr(e,t){let n=!1;for(let o=0,r=t.length-1;o<t.length;r=o++){let i=t[o],a=t[r];i.y>e.y!=a.y>e.y&&e.x<(a.x-i.x)*(e.y-i.y)/(a.y-i.y)+i.x&&(n=!n)}return n}function wr(e,t){let n=t[0],o=1/0;for(let r=0;r<t.length;r++){let i=t[r],a=t[(r+1)%t.length],s=a.x-i.x,c=a.y-i.y,u=s*s+c*c,l=u>0?Math.max(0,Math.min(1,((e.x-i.x)*s+(e.y-i.y)*c)/u)):0,m={x:i.x+s*l,y:i.y+c*l},h=Math.hypot(e.x-m.x,e.y-m.y);h<o&&(o=h,n=m)}return n}function Es(e,t){let n=0,o=0;for(let r of e.values()){if(r.length<3)continue;let i=r[0],a=r[r.length-1],s=a.x-i.x,c=a.y-i.y,u=Math.hypot(s,c);if(u<1e-6)continue;let l={x:(i.x+a.x)/2,y:(i.y+a.y)/2},m=wr(l,t),h=m.x-l.x,d=m.y-l.y,f=Math.hypot(h,d);f<1e-6||(o+=Math.abs((-c*h+s*d)/(u*f))*r.length,n+=r.length)}return n?o/n:0}function Zd(e,t,n){let o=e.filter(p=>p.type==="shape"),r=o.find(p=>p.role==="stage");if(r){let p=ge(r);return p?{shape:r,centre:xr(p),outline:p,inferred:!1}:null}if(!n.length)return null;let i=1/0,a=-1/0,s=1/0,c=-1/0;for(let p of n)i=Math.min(i,p.x),a=Math.max(a,p.x),s=Math.min(s,p.y),c=Math.max(c,p.y);let u=(a-i)*(c-s),l=[];for(let p of o){if(p.role)continue;let b=ge(p);if(!b)continue;let y=vr(b);if(y*le*le<6||y>u)continue;let g=Math.min(...b.map(M=>M.x)),x=Math.max(...b.map(M=>M.x)),w=Math.min(...b.map(M=>M.y)),I=Math.max(...b.map(M=>M.y)),v=0;for(let M of n)M.x>g&&M.x<x&&M.y>w&&M.y<I&&Sr(M,b)&&v++;if(v>n.length*.05)continue;let P=xr(b),S=Es(t,b);S>=Od&&l.push({shape:p,centre:P,outline:b,score:S,area:y,box:[g,w,x,I]})}let m=(p,b)=>b!==p&&b.area>p.area&&p.box[0]>=b.box[0]-1e-6&&p.box[1]>=b.box[1]-1e-6&&p.box[2]<=b.box[2]+1e-6&&p.box[3]<=b.box[3]+1e-6,h=l.filter(p=>!l.some(b=>m(p,b))),d=Math.max(0,...h.map(p=>p.score)),f=h.filter(p=>p.score>=d-.03).sort((p,b)=>b.area-p.area)[0]??null;return f?{shape:f.shape,centre:f.centre,outline:f.outline,inferred:!0}:null}function Qd(e,t,n){if(!n||n.length<3)return Math.hypot(e.x-t.x,e.y-t.y);let o=wr(e,n);return Math.hypot(e.x-o.x,e.y-o.y)}function _s(e){let t=[...e].sort((i,a)=>i.x-a.x||i.y-a.y);if(t.length<3)return t;let n=(i,a,s)=>(a.x-i.x)*(s.y-i.y)-(a.y-i.y)*(s.x-i.x),o=[];for(let i of t){for(;o.length>=2&&n(o[o.length-2],o[o.length-1],i)<=0;)o.pop();o.push(i)}let r=[];for(let i=t.length-1;i>=0;i--){let a=t[i];for(;r.length>=2&&n(r[r.length-2],r[r.length-1],a)<=0;)r.pop();r.push(a)}return[...o.slice(0,-1),...r.slice(0,-1)]}function Jd(e){if(!e.length||e.length>jd)return[];let t=[...Mr(e).values()],n=t.map((s,c)=>c),o=s=>n[s]===s?s:n[s]=o(n[s]),r=Ud/le,i=t.map(s=>({minX:Math.min(...s.map(c=>c.x))-r,maxX:Math.max(...s.map(c=>c.x))+r,minY:Math.min(...s.map(c=>c.y))-r,maxY:Math.max(...s.map(c=>c.y))+r}));for(let s=0;s<t.length;s++)for(let c=s+1;c<t.length;c++){let u=i[s],l=i[c];if(u.maxX<l.minX||l.maxX<u.minX||u.maxY<l.minY||l.maxY<u.minY)continue;t[s].some(h=>t[c].some(d=>Math.hypot(h.x-d.x,h.y-d.y)<=r))&&(n[o(s)]=o(c))}let a=new Map;return t.forEach((s,c)=>{let u=o(c),l=a.get(u);l?l.push(...s):a.set(u,[...s])}),[...a.values()].filter(s=>new Set(s.map(c=>c.rowId)).size>=2)}function eh(e,t,n){if(!t.length)return null;let o=t.filter(S=>n.tableIds.has(S.rowId)||S.kind==="booth").length>t.length/2,r=Mr(t),i=!n.outline||Es(r,n.outline)>=Bd,a=0,s=0;for(let S of r.values()){if(S.length<2)continue;let M=S[0],C=S[S.length-1],T=C.x-M.x,N=C.y-M.y,D=Math.hypot(T,N);if(D<1e-6)continue;let R={x:(M.x+C.x)/2,y:(M.y+C.y)/2},A=i?n.outline?wr(R,n.outline):n.focal:n.middle,L=-N/D,O=T/D;L*(A.x-R.x)+O*(A.y-R.y)<0&&(L=-L,O=-O),a+=L*S.length,s+=O*S.length}let c={x:t.reduce((S,M)=>S+M.x,0)/t.length,y:t.reduce((S,M)=>S+M.y,0)/t.length};if(Math.hypot(a,s)<1e-9){let S=i?n.focal:n.middle;a=S.x-c.x,s=S.y-c.y}let u=Math.hypot(a,s)||1,l={x:a/u,y:s/u},m=S=>-(S.x*l.x+S.y*l.y),h=S=>-S.x*l.y+S.y*l.x,d=1/0,f=-1/0,p=1/0,b=-1/0,y=1/0,g=new Map;for(let S of t){let M=m(S),C=h(S);d=Math.min(d,M),f=Math.max(f,M),p=Math.min(p,C),b=Math.max(b,C),i&&(y=Math.min(y,Qd(S,n.focal,n.outline)));let T=S.logicalRowId??S.rowId,N=g.get(T);N?N.push(M):g.set(T,[M])}i||(y=Math.max(0,d-m(n.middle)));let x=[...g.values()].map(S=>As(S)).sort((S,M)=>S-M),w=[];if(!o)for(let S of x)w.length&&S-w[w.length-1]<Td/le||w.push(S);let I=$d(e),v=mt(e,{floorBaseHeightM:n.baseHeightM}),P={id:e.id,section:e,authored:I,plane:n,facing:l,facesAction:i,hull:_s(t),sample:t.filter((S,M)=>M%Math.ceil(t.length/Hd)===0),frontD:d,backD:f,latMin:p,latMax:b,frontDistance:y,rowDepths:w,rowCount:w.length,level:0,height:v.height,rake:I?v.rake:0,backHeight:0};return P.backHeight=P.height+(f-d)*le*Math.tan(P.rake*Math.PI/180),P}function th(e,t,n,o){if(e.length<2)return 0;let r=Math.max(1,t*le),i=n+Id-o,a=0,s=0;for(let u=1;u<e.length;u++){let l=Math.max(kd,(e[u]-e[u-1])*le),m=(i+Cd)*(r+l)/r;a+=m-i,s+=l,i=m,r+=l}let c=Math.atan(a/s)*180/Math.PI;return Math.round(Math.max(Rd,Math.min(Ad,c))*10)/10}function nh(e,t){if(e.facing.x*t.facing.x+e.facing.y*t.facing.y<Vd)return null;let n=-1/0,o=1/0,r=-1/0;for(let m of t.hull){n=Math.max(n,-(m.x*e.facing.x+m.y*e.facing.y));let h=-m.x*e.facing.y+m.y*e.facing.x;o=Math.min(o,h),r=Math.max(r,h)}if(Math.min(e.latMax,r)-Math.max(e.latMin,o)<Rs*(e.latMax-e.latMin))return null;let a=Gd/le,s=new Map,c=new Map;for(let m of e.sample){let h=Math.floor((-m.x*e.facing.y+m.y*e.facing.x)/a),d=-(m.x*e.facing.x+m.y*e.facing.y);s.set(h,Math.min(s.get(h)??1/0,d))}for(let m of t.sample){let h=Math.floor((-m.x*e.facing.y+m.y*e.facing.x)/a),d=-(m.x*e.facing.x+m.y*e.facing.y);c.set(h,Math.max(c.get(h)??-1/0,d))}let u=[];for(let[m,h]of s){let d=c.get(m);d!==void 0&&u.push(h-d)}let l=u.length?As(u):e.frontD-n;return l<-1/le?null:l}function oh(e,t){if(t.plane.floorIndex>=e.plane.floorIndex)return!1;let n=-1/0,o=1/0,r=1/0,i=-1/0;for(let c of t.hull){let u=-(c.x*e.facing.x+c.y*e.facing.y);n=Math.max(n,u),o=Math.min(o,u);let l=-c.x*e.facing.y+c.y*e.facing.x;r=Math.min(r,l),i=Math.max(i,l)}let a=Math.min(e.latMax,i)-Math.max(e.latMin,r),s=Math.min(e.backD,n)-Math.max(e.frontD,o);return a>Rs*(e.latMax-e.latMin)&&s>1/le}function rh(e){let t=new Map,n=[...e].sort((a,s)=>a.plane.floorIndex-s.plane.floorIndex||a.frontDistance-s.frontDistance),o=[],r=new Map,i=a=>{if(a.plane.floorIndex===0||a.plane.baseHeightM>0)return a.plane.baseHeightM;let s=r.get(a.plane.floorIndex-1);return s===void 0?a.plane.baseHeightM:s+Ss};for(let a of n){if(!a.authored){let c=i(a),u;for(let m of o){if(m.plane.floorIndex>a.plane.floorIndex)continue;if(oh(a,m)){let f=m.backHeight+zd;f>c&&(c=f,u=m);continue}let h=nh(a,m);if(h==null)continue;let d=m.backHeight+Ed+Math.min(_d,Math.max(0,h)*le)*Math.tan(m.rake*Math.PI/180);d>c&&(c=d,u=m)}a.height=Math.round(Math.min(c,a.plane.baseHeightM+Dd)*100)/100;let l=!u&&a.height>a.plane.baseHeightM;if(a.level=u?u.level+1:l?1:0,a.rake=th(a.rowDepths,a.frontDistance,a.height,a.plane.focalHeightM),!a.facesAction&&a.rowCount<Nd)a.rake=0;else if(!u&&!l){let m=Math.max(1e-6,(a.backD-a.frontD)*le);a.rake=Math.min(a.rake,Ld,Math.round(Math.atan(Fd/m)*1800/Math.PI)/10)}else a.rowCount>=2&&(a.rake=Math.max(a.rake,ws[Math.min(a.level,ws.length)-1]));a.backHeight=a.height+(a.backD-a.frontD)*le*Math.tan(a.rake*Math.PI/180),t.set(a.id,u?.id)}let s=a.plane.floorIndex;r.set(s,Math.min(r.get(s)??1/0,a.height)),o.push(a)}return t}var gr=(e,t)=>!!e&&e.x===t.x&&e.y===t.y;function lo(e,t={x:0,y:-40}){let n=Gt(e),o=new Map;for(let f of n){if(!f.sectionId)continue;let p=o.get(f.sectionId);p?p.push(f):o.set(f.sectionId,[f])}let r={focalInferred:!1,confident:!1,sections:[]},i=e.floors?.length?e.floors.map((f,p)=>({objects:f.objects,floorIndex:p,floorId:f.id,baseHeightM:f.baseHeightM??0,focal:f.focalPoint??e.focalPoint})):[{objects:e.objects,floorIndex:0,floorId:void 0,baseHeightM:0,focal:e.focalPoint}],a=new Set(i.flatMap(f=>f.objects.filter(p=>p.type==="table").map(p=>p.id))),s=[],c,u=new Set,l=i.map(f=>{let p=C=>!e.floors?.length||C.floorId===f.floorId,b=Jd(n.filter(C=>!C.sectionId&&C.kind!=="booth"&&!a.has(C.rowId)&&p(C))),y=[];for(let C of b){let T=Ue(Ye(_s(C)),Xd/le);if(n.some(D=>!p(D)&&Sr(D,T)))continue;let N=`${Is}${f.floorIndex}-${y.length}`;u.add(N),o.set(N,C),y.push({type:"section",id:N,label:"",color:Wd,outline:T})}let g=y.length?{...f,objects:[...f.objects,...y]}:f,x=new Set(g.objects.filter(C=>C.type==="section").map(C=>C.logicalSectionId??C.id)),w=[...o.entries()].filter(([C])=>x.has(C)).flatMap(([,C])=>C),I=Zd(g.objects,Mr(w),w),v=g.focal;(I||g.focal&&!gr(g.focal,t))&&(r.confident=!0),I&&(r.stage??={id:I.shape.id,inferred:I.inferred,...g.floorId?{floorId:g.floorId}:{}},(I.inferred||gr(g.focal,t))&&(v=I.centre,r.focalInferred=!0));let P=I&&(!I.inferred||vr(I.outline)*le*le<=Ps),S=I?void 0:c,M={tableIds:a,floorIndex:g.floorIndex,floorId:g.floorId,baseHeightM:g.baseHeightM,focal:S?.focal??v,outline:I?.outline??S?.outline,focalHeightM:S?.focalHeightM??g.baseHeightM+(I&&P?je({...I.shape,role:"stage"}).heightM:0),middle:w.length?{x:w.reduce((C,T)=>C+T.x,0)/w.length,y:w.reduce((C,T)=>C+T.y,0)/w.length}:v};for(let C of g.objects){if(C.type!=="section")continue;let T=eh(C,o.get(C.logicalSectionId??C.id)??[],M);T&&s.push(T)}return M.outline&&(c=M),gr(g.focal,M.focal)||(r.focal??=[]).push({...g.floorId?{floorId:g.floorId}:{},point:{...M.focal}}),{unit:g,plane:M,stage:I,planeSeats:w}}),m=rh(s),h=new Map(s.filter(f=>!f.authored).map(f=>[f.id,f])),d=l.map(({unit:f,plane:p,stage:b,planeSeats:y})=>f.objects.map(g=>{let x=g.type==="shape"&&!g.role&&g.id!==b?.shape.id?Pd(g.label):null;if(x&&g.type==="shape")return(r.roles??=[]).push({id:g.id,...p.floorId?{floorId:p.floorId}:{},role:x}),{...g,role:x};let w=b?.inferred&&g.id===b.shape.id&&g.type==="shape"?Kd(g,b.outline,f.objects,y):null;if(w&&g.type==="shape")return r.stage?.id===g.id&&(r.stage.field=w),{...g,role:"stage",stageKind:w};if(b?.inferred&&g.id===b.shape.id&&g.type==="shape"&&vr(b.outline)*le*le<=Ps)return r.stage?.id===g.id&&(r.stage.deck=!0),{...g,role:"stage"};let I=g.type==="section"?h.get(g.id):void 0;if(!I||g.type!=="section")return g;let v=I.rowCount>=2&&I.rake>0;u.has(I.id)?r.looseRowBlocks=(r.looseRowBlocks??0)+1:r.sections.push({id:I.id,floorId:p.floorId,surfaceKind:v?"rakedRows":"flat",height:I.height,rake:I.rake,stackedOn:m.get(I.id)});let P={status:"inferred",source:"public-2d-topology",note:qd};return{...g,height:I.height,rake:I.rake,surfaceKind:v?"rakedRows":"flat",physical3dProvenance:{height:P,rake:P,surfaceKind:P}}}));if(e.floors?.length){let f=e.floors.map((p,b)=>({...p,objects:d[b],focalPoint:l[b].plane.focal}));return{doc:{...e,floors:f,objects:f[0].objects,focalPoint:f[0].focalPoint},report:r}}return{doc:{...e,objects:d[0],focalPoint:l[0].plane.focal},report:r}}var Ts=/^[\p{L}\p{N}]{1,4}$/u,ih=/^([\p{L}\p{N}]{2,})[\s\-\u2013\u2014\u00b7_./]+(.+)$/u;function ks(e,t){let n=t?.trim();if(!n)return e;let o=e.toLocaleLowerCase("en-US"),r=n.toLocaleLowerCase("en-US");if(o.startsWith(`${r} `)){let a=e.slice(n.length).trim();if(Ts.test(a))return a}let i=ih.exec(e);if(i){let a=i[1].toLocaleLowerCase("en-US"),s=i[2].trim();if((r.startsWith(a)||a.startsWith(r))&&Ts.test(s))return s}return e}function Ls(e,t,n){return n<0?t>1?e.filter(o=>o.kind==="floor"):[...e]:e.filter(o=>o.floorIndex===void 0||o.floorIndex===n)}function Fs(e,t){let n=[...e].sort((r,i)=>r.screen.y-i.screen.y),o=[];for(let r of n){let i=o.find(a=>a.some(s=>Math.abs(s.screen.x-r.screen.x)<104&&Math.abs(s.screen.y-r.screen.y)<34));i?i.push(r):o.push([r])}return o.flatMap(r=>r.length<2?r:r.map((i,a)=>({...i,screen:{...i.screen,x:Math.max(54,Math.min(t-54,i.screen.x+(a-(r.length-1)/2)*104))}})))}var ah=1.15,sh=2.75,ch=4.5,lh=.85,uh=.5,mh=.26;function Ds(e,t,n){let o=Math.max(1e-6,t),r=e/o,i=n?.hasZoneLabels??!0,a=new Set;return r>=.75&&a.add("floor"),r>=ah&&a.add("zone"),r<=(i?sh:ch)&&(a.add("section"),a.add("ga")),r<=lh&&(a.add("annotation"),a.add("booth")),r<=uh&&a.add("row"),r<=mh&&a.add("seat"),a}function Os(e,t,n,o,r,i=6){let a=i+t,s=o-i-t,c=i+n,u=r-i-n;return{...e,x:a>s?o/2:Math.max(a,Math.min(s,e.x)),y:c>u?r/2:Math.max(c,Math.min(u,e.y))}}function bt(e,t,n,o){let r=e,i=t[0],a=t[1],s=t[2],c=r[0]*i+r[4]*a+r[8]*s+r[12],u=r[1]*i+r[5]*a+r[9]*s+r[13],l=r[2]*i+r[6]*a+r[10]*s+r[14],m=r[3]*i+r[7]*a+r[11]*s+r[15];if(!(m>1e-6))return{x:0,y:0,depth:1/0,visible:!1};let h=c/m,d=u/m,f=l/m,p=h>=-1.05&&h<=1.05&&d>=-1.05&&d<=1.05&&f<=1;return{x:(h*.5+.5)*n,y:(1-(d*.5+.5))*o,depth:f,visible:p}}function Bs(e,t,n=t){let o=[],r=[...e].sort((i,a)=>i.screen.depth-a.screen.depth);for(let i of r){let a=!1;for(let s of o)if(wn(i,s,t,n)){a=!0;break}a||o.push(i)}return o}var fh=6;function wn(e,t,n,o){let r=Math.abs(e.screen.x-t.screen.x),i=Math.abs(e.screen.y-t.screen.y),a=e.halfWidth!=null&&t.halfWidth!=null?Math.max(n,e.halfWidth+t.halfWidth+fh):n;return r<a&&i<o}function Ns(e,t,n){return e.length*t*.58+(n?14:0)}var dh={row:8,seat:14};function Vs(e){return e<480?{row:5,seat:8}:e<768?{row:6,seat:10}:dh}function Gs(e,t,n,o){let r=Math.max(1,Math.min(n,o)*.5),i=Math.min(2,Math.hypot(e.x-n/2,e.y-o/2)/r);return t*(1+1.5*i)}function uo(e,t,n,o,r=[]){let i=[...e].sort((s,c)=>(c.priority??0)-(s.priority??0)||s.focus-c.focus),a=[];for(let s of i){if(a.length>=o)break;let c=!1;for(let u of r)if(wn(s,u,t,n)){c=!0;break}if(!c){for(let u of a)if(wn(s,u,t,n)){c=!0;break}}c||a.push(s)}return a}function Hs(e,t,n,o){let r=e[3]*t[0]+e[7]*t[1]+e[11]*t[2]+e[15];return r<=0||!(n>0)?0:n*Math.hypot(e[0],e[4],e[8])*o/(2*r)}var hh=6,ph=2.2,zs=.1,bh=.3,yh=1.8,gh=.9,xh=.55,vh=6e3;function js(e){let{doc:t,units:n,seats:o,surfaces:r,focal:i}=e,a=t.zones??[],s=[];if(a.length){let c=new Map;for(let l of n)for(let m of l.objects)m.type==="section"&&m.zone&&c.set(m.id,m.zone);let u=new Map;for(let l=0;l<o.length;l++){let m=o[l],h=r.seatOwner[l],d=m.zoneId??(h?c.get(h):void 0);if(!d)continue;let f=u.get(d);f||(f={n:0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0,sumY:0},u.set(d,f)),f.n++,m.x<f.minX&&(f.minX=m.x),m.y<f.minY&&(f.minY=m.y),m.x>f.maxX&&(f.maxX=m.x),m.y>f.maxY&&(f.maxY=m.y),f.sumY+=r.seatDeckY(l)}for(let l of a){let m=u.get(l.id),h=[];for(let[d,f]of c)f===l.id&&h.push(d);if(!m||m.n===0){s.push({id:l.id,label:l.label,color:me(l.color),sectionIds:h,seatCount:0,center:[0,0,0],radius:0,focalWorld:[(l.focalPoint??i).x*E,1.5,(l.focalPoint??i).y*E]});continue}s.push({id:l.id,label:l.label,color:me(l.color),sectionIds:h,seatCount:m.n,center:[(m.minX+m.maxX)/2*E,m.sumY/m.n,(m.minY+m.maxY)/2*E],radius:.5*Math.hypot((m.maxX-m.minX)*E,(m.maxY-m.minY)*E)||1,focalWorld:[(l.focalPoint??i).x*E,1.5,(l.focalPoint??i).y*E]})}}return s}function Xs(e){let{doc:t,units:n,seats:o,surfaces:r,seatData:i,hintedSeatFloor:a,zones:s,focal:c}=e,u=[],l=[],m=[];for(let h of s)h.seatCount!==0&&u.push({id:`zone:${h.id}`,kind:"zone",text:h.label,anchor:[h.center[0],h.center[1]+hh,h.center[2]],color:t.zones?.find(d=>d.id===h.id)?.color});{let h=new Map,d=new Map;for(let f=0;f<o.length;f++){let p=r.seatOwner[f];if(!p)continue;let b=h.get(p);b||(b={n:0,x:0,y:0,deck:0},h.set(p,b)),b.n++,b.x+=o[f].x,b.y+=o[f].y,b.deck+=r.seatDeckY(f);let y=d.get(p);y||(y={minX:1/0,maxX:-1/0,minY:1/0,maxY:-1/0,minDeck:1/0,maxDeck:-1/0},d.set(p,y)),y.minDeck=Math.min(y.minDeck,r.seatDeckY(f)),y.maxDeck=Math.max(y.maxDeck,r.seatDeckY(f)),o[f].x<y.minX&&(y.minX=o[f].x),o[f].x>y.maxX&&(y.maxX=o[f].x),o[f].y<y.minY&&(y.minY=o[f].y),o[f].y>y.maxY&&(y.maxY=o[f].y)}for(let f of n)for(let p of f.objects){if(p.type!=="section"||Cs(p))continue;let b=h.get(p.id);if(!b||b.n===0)continue;let y=d.get(p.id),g=[b.x/b.n*E,b.deck/b.n,b.y/b.n*E],x=p.displayLabel||p.label||p.id;l.push({id:p.id,floorIndex:f.index,label:x,seatCount:b.n,center:g,radius:Math.max(1,Math.hypot(y.maxX-y.minX,y.maxY-y.minY)*.5*E),box:{min:[y.minX*E-.4,y.minDeck,y.minY*E-.4],max:[y.maxX*E+.4,y.maxDeck+1,y.maxY*E+.4]},focalWorld:[f.focal.x*E,f.baseHeightM+1.5,f.focal.y*E]});let w=t.floors?.[f.index]?.name?.trim().toLocaleLowerCase();n.length>1&&w===x.trim().toLocaleLowerCase()||u.push({id:`section:${p.id}`,kind:"section",text:x,anchor:[g[0],g[1]+ph,g[2]],floorIndex:f.index})}}{for(let b of n)for(let y of b.objects){if(y.type!=="gaArea")continue;let g=mn(y.points);if(!g)continue;let x=y.displayLabel||y.label||y.id;u.push({id:`ga:${y.id}`,kind:"ga",text:y.capacity>0?`${x} \xB7 ${y.capacity.toLocaleString()}`:x,anchor:[g.x*E,b.baseHeightM+yh,g.y*E],floorIndex:b.index})}let h=new Map,d=new Map;for(let b of n)for(let y of b.objects)if(y.type==="section"&&h.set(y.id,y.displayLabel||y.label||y.id),y.type==="row"){let g=y.displayLabel?.trim()||y.segmentedRow?.displayLabel?.trim();g&&d.set(y.id,g)}let f=new Map;for(let b=0;b<o.length;b++){let y=o[b],g=Math.hypot(y.x-c.x,y.y-c.y),x=f.get(y.rowId);(!x||g>x.far)&&f.set(y.rowId,{seat:y,index:b,far:g})}for(let[b,y]of f){let g=r.seatOwner[y.index]??y.seat.sectionId,x=Us(y.seat.label,b,h.get(g??""),d.get(b));x&&u.push({id:`row:${b}`,kind:"row",text:x,anchor:[y.seat.x*E,r.seatDeckY(y.index)+gh,y.seat.y*E],floorIndex:a[y.index]})}let p=new Map;for(let b=0;b<o.length;b++){let y=o[b],g=p.get(y.rowId);g||(g={n:0,x:0,y:0,z:0,minX:1/0,maxX:-1/0,minZ:1/0,maxZ:-1/0,label:Us(y.label,y.rowId,h.get(r.seatOwner[b]??y.sectionId??""),d.get(y.rowId)),sectionId:r.seatOwner[b]??y.sectionId},p.set(y.rowId,g));let x=b*3,w=i.iPosition[x],I=i.iPosition[x+1],v=i.iPosition[x+2];g.n++,g.x+=w,g.y+=I,g.z+=v,g.minX=Math.min(g.minX,w),g.maxX=Math.max(g.maxX,w),g.minZ=Math.min(g.minZ,v),g.maxZ=Math.max(g.maxZ,v)}for(let[b,y]of p)m.push({id:b,label:y.label,sectionId:y.sectionId,seatCount:y.n,center:[y.x/y.n,y.y/y.n,y.z/y.n],radius:Math.max(.8,Math.hypot(y.maxX-y.minX,y.maxZ-y.minZ)*.5)});if(o.length<=vh)for(let b=0;b<o.length;b++){let y=o[b],g=Pr(y.displayLabel||y.label);g&&u.push({id:`seat:${y.id}`,kind:"seat",seatWidthM:i.iChairWidth[b]*2,text:g,anchor:[y.x*E,r.seatDeckY(b)+xh,y.y*E],floorIndex:a[b]})}}for(let h of n)for(let d of h.objects)if(d.type==="shape"&&d.role&&["entrance","exit","screen","suite","obstruction"].includes(d.role)){let f=ge(d),p=f?mn(f):null;if(!p||!d.label)continue;u.push({id:`architecture:${d.id}`,kind:"annotation",text:d.label,anchor:[p.x*E,h.baseHeightM+je(d).heightM+zs,p.y*E],color:d.fill,floorIndex:h.index})}else if(d.type==="text"){if(!d.text)continue;u.push({id:`text:${d.id}`,kind:"annotation",text:d.text,anchor:[d.position.x*E,h.baseHeightM+zs,d.position.y*E],color:d.color,rotation:d.rotation,floorIndex:h.index})}else if(d.type==="booth"){let f=Ke(d);if(!f)continue;let p=mn(f);if(!p)continue;u.push({id:`booth:${d.id}`,kind:"booth",text:d.displayLabel||d.label||d.id,anchor:[p.x*E,h.baseHeightM+ro+bh,p.y*E],floorIndex:h.index})}return{labels:u,sections:l,rows:m}}function Ws(e,t){if(t.length>1)for(let n of t)e.push({id:`floor:${n.id}`,kind:"floor",text:n.label,anchor:[n.center[0],n.box.max[1]+1.2,n.center[2]],floorIndex:n.index})}function Pr(e){let t=e.lastIndexOf("-");return t>=0&&t<e.length-1?e.slice(t+1):e}function Us(e,t,n,o){if(o?.trim())return o.trim();let r=e?e.lastIndexOf("-"):-1,i=r>0?e.slice(0,r):t;return i&&ks(i,n)}function Ys(e){let{doc:t,units:n,seats:o,surfaces:r,solids:i,hintedSeatFloor:a,seatFloor:s}=e,c=[];{let u=n.map(()=>({minX:1/0,minY:1/0,minZ:1/0,maxX:-1/0,maxY:-1/0,maxZ:-1/0}));for(let h=0;h<i.floor.length;h+=1){let d=Math.max(0,Math.min(n.length-1,Math.round(i.floor[h]))),f=h*3,p=u[d];p.minX=Math.min(p.minX,i.position[f]),p.minY=Math.min(p.minY,i.position[f+1]),p.minZ=Math.min(p.minZ,i.position[f+2]),p.maxX=Math.max(p.maxX,i.position[f]),p.maxY=Math.max(p.maxY,i.position[f+1]),p.maxZ=Math.max(p.maxZ,i.position[f+2])}let l=new Map;for(let h=0;h<n.length;h++)for(let d of n[h].objects)d.type==="section"&&l.set(d.id,h);let m=n.map(()=>({n:0,minX:1/0,minY:1/0,minDeck:1/0,maxX:-1/0,maxY:-1/0,maxDeck:-1/0,sumX:0,sumDeck:0,sumZ:0}));for(let h=0;h<o.length;h++){let d=r.seatOwner[h],f=(d!==null?l.get(d):void 0)??a[h];if(f===void 0)continue;let p=m[f],b=o[h];p.n++,b.x<p.minX&&(p.minX=b.x),b.y<p.minY&&(p.minY=b.y),b.x>p.maxX&&(p.maxX=b.x),b.y>p.maxY&&(p.maxY=b.y);let y=r.seatDeckY(h);p.sumX+=b.x*E,p.sumDeck+=y,p.sumZ+=b.y*E,p.minDeck=Math.min(p.minDeck,y),p.maxDeck=Math.max(p.maxDeck,y+1.6),s[h]=f}for(let h=0;h<n.length;h++){let d=m[h],f=t.floors?.[h],p=u[h],b=Math.min(d.n?d.minX*E:n[h].focal.x*E-1,Number.isFinite(p.minX)?p.minX:1/0),y=Math.max(d.n?d.maxX*E:n[h].focal.x*E+1,Number.isFinite(p.maxX)?p.maxX:-1/0),g=Math.min(d.n?d.minY*E:n[h].focal.y*E-1,Number.isFinite(p.minZ)?p.minZ:1/0),x=Math.max(d.n?d.maxY*E:n[h].focal.y*E+1,Number.isFinite(p.maxZ)?p.maxZ:-1/0),w=Math.min(d.n?Math.min(n[h].baseHeightM,d.minDeck):n[h].baseHeightM,Number.isFinite(p.minY)?p.minY:1/0),I=Math.max(d.n?Math.max(d.maxDeck,w+.5):w+.5,Number.isFinite(p.maxY)?p.maxY:-1/0),v=[d.n?d.sumX/d.n:(b+y)/2,d.n?d.sumDeck/d.n:(w+I)/2,d.n?d.sumZ/d.n:(g+x)/2],P=Math.max(1,.5*Math.hypot(y-b,I-w,x-g));c.push({index:h,id:f?.id??`floor-${h}`,label:f?.name??(n.length>1?`Floor ${h+1}`:"Venue"),seatCount:d.n,center:v,radius:P,box:{min:[b,w,g],max:[y,I,x]},focalWorld:[n[h].focal.x*E,n[h].baseHeightM+1.5,n[h].focal.y*E]})}}return c}function Ir(e){if(e.length<3)return e.map(i=>({...i}));let t=[...e].sort((i,a)=>i.x-a.x||i.y-a.y),n=(i,a,s)=>(a.x-i.x)*(s.y-i.y)-(a.y-i.y)*(s.x-i.x),o=i=>{let a=[];for(let s of i){for(;a.length>=2&&n(a[a.length-2],a[a.length-1],s)<=0;)a.pop();a.push(s)}return a.pop(),a},r=[...o(t),...o([...t].reverse())];return r.length>=3?r.map(i=>({...i})):t.map(i=>({...i}))}function Cr(e,t){let n=1/0,o=1/0,r=-1/0,i=-1/0,a=(s,c)=>{s<n&&(n=s),c<o&&(o=c),s>r&&(r=s),c>i&&(i=c)};for(let s of t)a(s.x,s.y);for(let s of e)for(let c of s.objects)if(c.type==="section")for(let u of c.outline)a(u.x,u.y);else if(c.type==="shape"&&c.points)for(let u of c.points)a(u.x,u.y);else if(c.type==="gaArea")for(let u of c.points)a(u.x,u.y);else if(c.type==="booth"){let u=Ke(c);if(u)for(let l of u)a(l.x,l.y)}else if(c.type==="table"){let u=io(c);if(u)for(let l of u)a(l.x,l.y)}else if(c.type==="decorImage"){let u=ao(c);if(u)for(let l of u)a(l.x,l.y)}return Number.isFinite(n)||(n=-100,o=-100,r=100,i=100),{minX:n,minY:o,maxX:r,maxY:i}}function Qs(e,t,n,o,r,i,a){if(t.length===1){let s=n.map(h=>({x:h.x,y:h.y}));for(let h of t[0].objects)h.type==="section"?s.push(...h.outline):h.type==="shape"?s.push(...ge(h)??h.points??[]):h.type==="gaArea"?s.push(...h.points):h.type==="booth"?s.push(...Ke(h)??[]):h.type==="table"?s.push(...io(h)??[]):h.type==="decorImage"&&s.push(...ao(h)??[]);if(Zs(e,t[0],n,s,i))return!1;if(a&&qs(e,t[0].baseHeightM,s,i,a))return!0;let c=Ir(s),u=(r.minX+r.maxX)/2,l=(r.minY+r.maxY)/2,m=c.length>=3?c.map(h=>{let d=h.x-u,f=h.y-l,p=Math.max(1,Math.hypot(d,f));return{x:h.x+d/p*80,y:h.y+f/p*80}}):hn(r.minX-28,r.minY-28,r.maxX-r.minX+56,r.maxY-r.minY+56);return ae(e,m,void 0,()=>-.04,-.22,i.ground,i.ground,re),!1}else{let s=t.reduce((b,y)=>y.baseHeightM<b.baseHeightM?y:b);e.setFloor(s.index);let c={...s,objects:t.flatMap(b=>b.objects)},u=n.map(b=>({x:b.x,y:b.y}));for(let b of c.objects)b.type==="section"&&u.push(...b.outline);if(Zs(e,c,n,u,i))return!1;if(a&&qs(e,s.baseHeightM,u,i,a))return!0;let l=n.filter((b,y)=>o[y]===s.index),m=Cr([s],l),h=Math.hypot(m.maxX-m.minX,m.maxY-m.minY),d=Math.max(28,Math.min(80,h*.04)),f=hn(m.minX-d,m.minY-d,m.maxX-m.minX+d*2,m.maxY-m.minY+d*2),p=s.baseHeightM-.03;return ae(e,f,void 0,()=>p,p-.22,i.ground,i.ground,re),!1}}function Rr(e,t,n,o){let{cx:r,cz:i,radius:a}=n,s=1/0,c=1/0,u=1/0,l=-1/0,m=-1/0,h=-1/0,d=(b,y,g)=>{s=Math.min(s,b),l=Math.max(l,b),c=Math.min(c,y),m=Math.max(m,y),u=Math.min(u,g),h=Math.max(h,g)};for(let b=0;b<e.position.length;b+=3){let y=b/3;o&&y>=o[0]&&y<o[1]||d(e.position[b],e.position[b+1],e.position[b+2])}for(let b=0;b<t.count;b++){let y=b*3,g=t.iPosition[y],x=t.iPosition[y+1],w=t.iPosition[y+2],I=Math.max(.35,t.iMaxRadius[b]??.35);d(g-I,x,w-I),d(g+I,x+1.6,w+I)}Number.isFinite(s)||(s=r-a,l=r+a,c=0,m=a*.16,u=i-a,h=i+a);let f=[(s+l)/2,(c+m)/2,(u+h)/2],p=Math.max(1,.5*Math.hypot(l-s,m-c,h-u));return{center:f,radius:p,minY:c,maxY:m}}function Js(e,t,n,o,r,i){let a=1/0,s=1/0,c=-1/0,u=-1/0;for(let w=0;w<e.count;w++){let I=w*3,v=e.iPosition[I],P=e.iPosition[I+2];v<a&&(a=v),v>c&&(c=v),P<s&&(s=P),P>u&&(u=P)}for(let w of t)a=Math.min(a,w.cx-w.halfX),c=Math.max(c,w.cx+w.halfX),s=Math.min(s,w.cz-w.halfZ),u=Math.max(u,w.cz+w.halfZ);let l=n.minX*E,m=n.maxX*E,h=n.minY*E,d=n.maxY*E,f=l,p=m,b=h,y=d;if(Number.isFinite(a)){let w=Math.max(2,.06*Math.hypot(c-a,u-s));f=Math.max(l,a-w),p=Math.min(m,c+w),b=Math.max(h,s-w),y=Math.min(d,u+w)}let g=Math.min(0,o),x=Math.max(r,i*.05);return{min:[f,g,b],max:[p,x,y]}}var Ks=12,Mh=.6,Sh=40;function qs(e,t,n,o,r){let i=Ir([...n]);if(i.length<3)return!1;let a=1/0,s=1/0,c=-1/0,u=-1/0;for(let w of i)a=Math.min(a,w.x),c=Math.max(c,w.x),s=Math.min(s,w.y),u=Math.max(u,w.y);let l=Math.hypot(c-a,u-s)*E,m=Ue(i,Ks/E,1.2),h=Math.max(Sh,l*Mh),d=Ue(i,(Ks+h)/E,1.2);if(m.length!==d.length)return!1;let f=de(o.ground,[.78,.76,.72],.35),p=de(o.ground,[.56,.62,.52],.3);ae(e,m,void 0,()=>t-.04,t-.22,f,f,re);let b=t-.05,y=m.map(w=>[w.x*E,b,w.y*E]),g=d.map(w=>[w.x*E,b,w.y*E]),x=[0,1,0];for(let w=0;w<y.length;w++){let I=(w+1)%y.length;e.tri(y[w],g[I],g[w],x,p,r,r),e.tri(y[w],y[I],g[I],x,p,p,r)}return!0}var wh=3e3,Ph=20,$s=1.5,Ih=1.2,Ch=.25;function Zs(e,t,n,o,r){if(!n.length||n.length>wh||o.length<3)return!1;for(let M of t.objects){if(M.type==="shape"&&Yi(M.stageKind))return!1;if(M.type==="section"){let{height:C}=mt(M,{floorBaseHeightM:t.baseHeightM});if(C-t.baseHeightM>Ph)return!1}}let i=0,a=0;for(let M of o)i+=M.x,a+=M.y;i/=o.length,a/=o.length;let s=0,c=0,u=0;for(let M of o){let C=M.x-i,T=M.y-a;s+=C*C,c+=T*T,u+=C*T}let l=.5*Math.atan2(2*u,s-c),m=Math.cos(l),h=Math.sin(l),d=-h,f=m,p=1/0,b=-1/0,y=1/0,g=-1/0;for(let M of o){let C=(M.x-i)*m+(M.y-a)*h,T=(M.x-i)*d+(M.y-a)*f;p=Math.min(p,C),b=Math.max(b,C),y=Math.min(y,T),g=Math.max(g,T)}let x=M=>[[p-M,y-M],[b+M,y-M],[b+M,g+M],[p-M,g+M]].map(([C,T])=>({x:i+m*C+d*T,y:a+h*C+f*T})),w=x($s/E),I=x(($s+Ch)/E),v=t.baseHeightM,P=de(r.ground,[.62,.55,.47],.4),S=de(r.ground,[.86,.86,.84],.55);return ae(e,I,void 0,()=>v-.04,v-.22,P,P,re),ae(e,I,[w.slice().reverse()],()=>v+Ih,v-.04,de(S,[1,1,1],.2),S,re),!0}function ec(e,t,n){let o=()=>({byObjectId:new Map,elements:[]});if(!t||!e)return o();let r=Zi(t);if(!r.ok||r.value.id!==e)return o();let i=new Map;for(let m of n)for(let h of m.objects)h.type==="shape"&&i.set(h.id,{shape:h,unit:m});let a=new Set,s=new Set,c=new Map((t.overlay.productionElements??[]).map(m=>{let h=m.runtimeContentImageUrl;return[m.id,typeof h=="string"&&/^(?:blob:|data:image\/|https:\/\/)/.test(h)?h:void 0]})),u=[];for(let m of r.value.overlay.productionElements??[]){let h=i.get(m.objectId),d=h?ge(h.shape):null,f=m.baseElevationM??0;if(!h||!d||d.length<3||!m.id||a.has(m.id)||s.has(m.objectId)||!Number.isFinite(m.heightM)||m.heightM<.05||m.heightM>50||!Number.isFinite(f)||f<-10||f>100)return o();a.add(m.id),s.add(m.objectId);let p=d.map(S=>S.x*E),b=d.map(S=>S.y*E),y=h.unit.baseHeightM+f,g=Math.min(...p),x=Math.max(...p),w=Math.min(...b),I=Math.max(...b),v,P=c.get(m.id)??m.contentImageUrl;if(m.kind==="screen"&&P&&(v=Oa(d,y,y+m.heightM,h.unit.focal),!v))if(x-g>=I-w){let S=Math.abs(w-h.unit.focal.y*E)<=Math.abs(I-h.unit.focal.y*E)?w-.006:I+.006;v=[[g,y,S],[x,y,S],[g,y+m.heightM,S],[x,y+m.heightM,S]]}else{let S=Math.abs(g-h.unit.focal.x*E)<=Math.abs(x-h.unit.focal.x*E)?g-.006:x+.006;v=[[S,y,w],[S,y,I],[S,y+m.heightM,w],[S,y+m.heightM,I]]}u.push({id:m.id,objectId:m.objectId,kind:m.kind,floorIndex:h.unit.index,baseY:y,topY:y+m.heightM,bounds:{min:[g,y,w],max:[x,y+m.heightM,I]},occlusion:m.occlusion,...P?{contentImageUrl:P}:{},...v?{contentPlane:v}:{}})}let l=u.sort((m,h)=>m.id.localeCompare(h.id));return{byObjectId:new Map(l.map(m=>[m.objectId,m])),elements:l}}var tc=[.13,.14,.17],Yt=[.4,.43,.47],Rh=.18,Ah=.02,Eh=2.4,_h=1500,Th=240;function nc(e,t,n,o){let r=t.stageKind??"";if(Et(r)||r==="round"||!o.length)return;let i=ge(t);if(!i||i.length<3)return;let a={x:i.reduce((A,L)=>A+L.x,0)/i.length,y:i.reduce((A,L)=>A+L.y,0)/i.length},s=0,c=0,u=new Set;for(let A of o)s+=A.x,c+=A.y,u.add(Math.floor(Math.atan2(A.y-a.y,A.x-a.x)*180/Math.PI/10));if(u.size*10>Th)return;let l=a.x-s/o.length,m=a.y-c/o.length,h=Math.hypot(l,m);if(h<1e-6)return;let d=l/h,f=m/h,p=-f,b=d,y=-1/0,g=1/0,x=1/0,w=-1/0;for(let A of i){let L=(A.x-a.x)*d+(A.y-a.y)*f,O=(A.x-a.x)*p+(A.y-a.y)*b;y=Math.max(y,L),g=Math.min(g,L),x=Math.min(x,O),w=Math.max(w,O)}let I=(w-x)*E,v=(y-g)*E;if(I<3||v<1.5||I*v>_h)return;let P=Rh/E,S=(A,L)=>({x:a.x+d*A+p*L,y:a.y+f*A+b*L}),M=(A,L,O,_)=>[S(A,O),S(A,_),S(L,_),S(L,O)],C=n+Math.max(3.5,Math.min(8,I*.35)),T=n+Math.min(Eh,C-n-1),N=.2/E,D=g+Math.min(v*.25,1.5)/E,R=Ah/E;ae(e,M(y-2*P+R,y-P-R,x+P+N,w-P-N),void 0,()=>T,n,tc,tc,re);for(let[A,L]of[[x+P,x+P+N],[w-P-N,w-P]])ae(e,M(y-2*P,y-P,A,L),void 0,()=>C+.3,n,Yt,Yt,re),ae(e,M(D+N,y-2*P,A,L),void 0,()=>C+.3,C,Yt,Yt,re);ae(e,M(D,D+N,x+P,w-P),void 0,()=>C+.3,C,Yt,Yt,re)}function Be(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function Oe(e){return Array.isArray(e)?e:[]}function kh(e){let t=[e];for(;t.length;){let n=t.pop();if(Array.isArray(n)){t.push(...n);continue}if(!Be(n))continue;let o=Be(n.extensions)?n.extensions:null;if(o&&Object.prototype.hasOwnProperty.call(o,"KHR_draco_mesh_compression"))return!0;t.push(...Object.values(n))}return!1}function mo(e,t){return!Array.isArray(e)||e.length!==t||!e.every(n=>typeof n=="number"&&Number.isFinite(n))?null:e}function Lh(){return[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]}function Fh(e,t){let n=new Array(16).fill(0);for(let o=0;o<4;o++)for(let r=0;r<4;r++)for(let i=0;i<4;i++)n[o*4+r]+=e[i*4+r]*t[o*4+i];return n}function Dh(e){let t=mo(e.matrix,16);if(t)return t;if(e.matrix!==void 0)return null;let n=e.translation===void 0?[0,0,0]:mo(e.translation,3),o=e.rotation===void 0?[0,0,0,1]:mo(e.rotation,4),r=e.scale===void 0?[1,1,1]:mo(e.scale,3);if(!n||!o||!r)return null;let[i,a,s,c]=o,u=Math.hypot(i,a,s,c);if(!(u>1e-8))return null;let l=i/u,m=a/u,h=s/u,d=c/u,f=l+l,p=m+m,b=h+h,y=l*f,g=l*p,x=l*b,w=m*p,I=m*b,v=h*b,P=d*f,S=d*p,M=d*b;return[(1-(w+v))*r[0],(g+M)*r[0],(x-S)*r[0],0,(g-M)*r[1],(1-(y+v))*r[1],(I+P)*r[1],0,(x+S)*r[2],(I-P)*r[2],(1-(y+w))*r[2],0,n[0],n[1],n[2],1]}function Oh(e,t,n,o){return[e[0]*t+e[4]*n+e[8]*o+e[12],e[1]*t+e[5]*n+e[9]*o+e[13],e[2]*t+e[6]*n+e[10]*o+e[14]]}function Bh(e){let t=e[0],n=e[4],o=e[8],r=e[1],i=e[5],a=e[9],s=e[2],c=e[6],u=e[10],l=i*u-a*c,m=a*s-r*u,h=r*c-i*s,d=t*l+n*m+o*h;if(Math.abs(d)<1e-12)return null;let f=1/d;return[l*f,m*f,h*f,(o*c-n*u)*f,(t*u-o*s)*f,(n*s-t*c)*f,(n*a-o*i)*f,(o*r-t*a)*f,(t*i-n*r)*f]}function oc(e,t,n,o){let r=e[0]*t+e[1]*n+e[2]*o,i=e[3]*t+e[4]*n+e[5]*o,a=e[6]*t+e[7]*n+e[8]*o,s=Math.hypot(r,i,a)||1;return r/=s,i/=s,a/=s,[r,i,a]}function Nh(e){if(e.byteLength<20||e.byteLength>8388608)return null;let t=new DataView(e.buffer,e.byteOffset,e.byteLength);if(t.getUint32(0,!0)!==1179937895||t.getUint32(4,!0)!==2||t.getUint32(8,!0)!==e.byteLength)return null;let n=12,o=null,r=null;for(;n+8<=e.byteLength;){let i=t.getUint32(n,!0),a=t.getUint32(n+4,!0);if(n+=8,i%4!==0||n+i>e.byteLength)return null;let s=e.subarray(n,n+i);if(a===1313821514&&!o)try{let c=JSON.parse(new TextDecoder().decode(s).replace(/[\u0000 ]+$/g,""));if(!Be(c))return null;o=c}catch{return null}else if(a===5130562&&!r)r=s;else return null;n+=i}return n===e.byteLength&&o&&r?{json:o,bin:r}:null}function Vh(e){return e===5120||e===5121?1:e===5122||e===5123?2:e===5125||e===5126?4:0}function Gh(e){return e==="SCALAR"?1:e==="VEC2"?2:e==="VEC3"?3:e==="VEC4"?4:0}function Hh(e,t,n){return n===5120?e.getInt8(t):n===5121?e.getUint8(t):n===5122?e.getInt16(t,!0):n===5123?e.getUint16(t,!0):n===5125?e.getUint32(t,!0):e.getFloat32(t,!0)}function zh(e){let t=e instanceof Uint8Array?e:new Uint8Array(e),n=Nh(t);if(!n)return{ok:!1,issue:"invalid_glb"};let{json:o,bin:r}=n;if(!Be(o.asset)||o.asset.version!=="2.0")return{ok:!1,issue:"unsupported_glb"};let i=Oe(o.extensionsUsed).filter(w=>typeof w=="string");if(i.includes("KHR_draco_mesh_compression")||kh(o))return{ok:!1,issue:"draco_not_allowed"};if(i.length||Oe(o.extensionsRequired).length)return{ok:!1,issue:"unsupported_glb"};if(Oe(o.images).length||Oe(o.textures).length)return{ok:!1,issue:"external_resource"};let a=Oe(o.buffers);if(a.length!==1||!Be(a[0])||a[0].uri!==void 0||typeof a[0].byteLength!="number"||!Number.isInteger(a[0].byteLength)||a[0].byteLength<0||a[0].byteLength>r.byteLength)return{ok:!1,issue:"external_resource"};let s=Oe(o.accessors),c=Oe(o.bufferViews),u=Oe(o.meshes),l=Oe(o.nodes),m=Oe(o.scenes),h=typeof o.scene=="number"?o.scene:0;if(!Be(m[h]))return{ok:!1,issue:"unsupported_glb"};let d=new DataView(r.buffer,r.byteOffset,r.byteLength),f=(w,I,v)=>{if(typeof w!="number"||!Number.isInteger(w)||!Be(s[w]))return null;let P=s[w];if(P.type!==I||P.sparse!==void 0||P.normalized===!0||typeof P.count!="number"||!Number.isInteger(P.count)||P.count<1||typeof P.componentType!="number"||!v.includes(P.componentType)||typeof P.bufferView!="number")return null;let S=c[P.bufferView];if(!Be(S)||S.buffer!==0||typeof S.byteLength!="number"||!Number.isInteger(S.byteLength)||S.byteLength<0)return null;let M=Gh(P.type),C=Vh(P.componentType),T=typeof S.byteStride=="number"?S.byteStride:M*C,N=typeof S.byteOffset=="number"?S.byteOffset:0,D=typeof P.byteOffset=="number"?P.byteOffset:0,R=N+D,A=D+(P.count-1)*T+M*C;if(!Number.isInteger(T)||!Number.isInteger(N)||!Number.isInteger(D)||T<M*C||N<0||D<0||N+S.byteLength>r.byteLength||A>S.byteLength)return null;let L=[];for(let O=0;O<P.count;O++){let _=[];for(let k=0;k<M;k++){let V=Hh(d,R+O*T+k*C,P.componentType);if(!Number.isFinite(V))return null;_.push(V)}L.push(_)}return L},p=[],b=[],y=0,g=new Set,x=(w,I)=>{if(typeof w!="number"||!Number.isInteger(w)||!Be(l[w])||g.has(w))return!1;g.add(w);let v=l[w],P=Dh(v);if(!P)return!1;let S=Fh(I,P),M=Bh(S);if(!M)return!1;if(v.mesh!==void 0){if(typeof v.mesh!="number")return!1;let C=u[v.mesh];if(!Be(C))return!1;for(let T of Oe(C.primitives)){if(!Be(T)||T.mode!==void 0&&T.mode!==4||!Be(T.attributes))return!1;let N=f(T.attributes.POSITION,"VEC3",[5126]),D=T.attributes.NORMAL===void 0?null:f(T.attributes.NORMAL,"VEC3",[5126]);if(!N||T.attributes.NORMAL!==void 0&&!D)return!1;let R=N.length;if(T.indices!==void 0){let L=typeof T.indices=="number"?s[T.indices]:null;R=Be(L)?L.count:void 0}if(typeof R!="number"||!Number.isInteger(R)||R%3!==0||(y+=R/3,y>1e5))return!1;let A=T.indices===void 0?N.map((L,O)=>[O]):f(T.indices,"SCALAR",[5121,5123,5125]);if(!A||A.length%3!==0||A.length!==R)return!1;for(let L=0;L<A.length;L+=3){let O=[A[L][0],A[L+1][0],A[L+2][0]];if(O.some(V=>!Number.isInteger(V)||V<0||V>=N.length))return!1;let _=O.map(V=>Oh(S,...N[V])),k=null;if(!D){let V=_[1][0]-_[0][0],F=_[1][1]-_[0][1],B=_[1][2]-_[0][2],z=_[2][0]-_[0][0],U=_[2][1]-_[0][1],G=_[2][2]-_[0][2];k=oc([1,0,0,0,1,0,0,0,1],F*G-B*U,B*z-V*G,V*U-F*z)}for(let V=0;V<3;V++)p.push(..._[V]),b.push(...D?oc(M,...D[O[V]]):k)}}}for(let C of Oe(v.children))if(!x(C,S))return!1;return g.delete(w),!0};for(let w of Oe(m[h].nodes))if(!x(w,Lh()))return{ok:!1,issue:y>1e5?"triangle_limit":"unsupported_glb"};return!y||p.length!==y*9||b.length!==p.length?{ok:!1,issue:"unsupported_glb"}:{ok:!0,triangleCount:y,position:new Float32Array(p),normal:new Float32Array(b)}}function rc(e){try{return zh(e)}catch{return{ok:!1,issue:"invalid_glb"}}}function Kt(e){let{doc:t}=e,n=Di(t.theme),o=n.structure,r=Ia(t,e.eventConfigurationId??t.eventConfigurationId),i=ec(e.eventConfigurationId,e.eventConfiguration,r),a=e.seats,s=new Gn,c=null;if(e.registeredShellGlb){let Y=rc(e.registeredShellGlb);if(Y.ok){let W=Y.position.length/3,Z=new Float32Array(Y.position.length),ee=n.materials.shell??o.tierWall;for(let q=0;q<W;q++){let oe=Y.normal[q*3+1],te=oe<-.25?.4:.62+.38*Math.max(0,oe);Z[q*3]=ee[0]*te,Z[q*3+1]=ee[1]*te,Z[q*3+2]=ee[2]*te}c={position:Y.position,normal:Y.normal,color:Z,floor:new Float32Array(W).fill(-2),material:new Float32Array(W),count:W}}}let u=new Map;for(let Y of r)for(let W of Y.objects)u.set(W.id,Y.index),W.type==="section"&&u.set(W.logicalSectionId??W.id,Y.index);let l=a.map(Y=>u.get(Y.sectionId??"")??u.get(Y.rowId??"")??0),m=Cr(r,a),h=s.vertexCount,f=Qs(s,r,a,l,m,o,de(n.background.top,n.background.bottom,.5))?s.vertexCount:h,p=ka(t,a),b=new Map,y=new Map;for(let Y of t.categories??[])b.set(Y.key,Y.color),Y.seatGlyph&&y.set(Y.key,Y.seatGlyph);let g=[],x=_a(r,a,l),w=new Map;a.forEach((Y,W)=>{let Z=x.seatDeckY(W);Number.isFinite(Z)&&w.set(Y.rowId,Math.min(w.get(Y.rowId)??1/0,Z))});let I=new Float32Array(a.length),v=[],P=new Map((t.floors??[]).map((Y,W)=>[Y.id,W])),S=r.map(()=>[]);for(let Y of a){let W=Y.floorId?P.get(Y.floorId)??0:0;S[Math.min(W,S.length-1)]?.push(Y)}let M=(Y,W)=>{if(!W||W.length<3)return!1;let Z=Math.min(...W.map(te=>te.x)),ee=Math.max(...W.map(te=>te.x)),q=Math.min(...W.map(te=>te.y)),oe=Math.max(...W.map(te=>te.y));for(let te=0;te<Y;te++)for(let $ of S[te])if(!($.x<Z||$.x>ee||$.y<q||$.y>oe)&&_e($,W,void 0))return!0;return!1},C=null,T=Y=>r.length===1?a:a.filter((W,Z)=>l[Z]===Y),N=(Y,W)=>{let Z=Ke(Y);if(!Z)return!1;let ee=1/0,q=1/0,oe=-1/0,te=-1/0;for(let $ of Z)ee=Math.min(ee,$.x),oe=Math.max(oe,$.x),q=Math.min(q,$.y),te=Math.max(te,$.y);return a.some(($,ne)=>$.kind!=="booth"&&(r.length===1||l[ne]===W)&&$.x>ee&&$.x<oe&&$.y>q&&$.y<te&&Fe(Z,$.x,$.y))};for(let Y=0;Y<r.length;Y++){let W=r[Y];s.setFloor(Y);let Z=new $n,ee=[],q=W.objects.filter($=>$.type==="shape"&&($.role==="entrance"||$.role==="exit")),oe=W.objects.filter($=>$.type==="section"&&!!$.outline&&$.outline.length>=3),te=as(W.objects.filter($=>$.type==="booth"),W.focal);for(let $ of W.objects)if($.type==="section"){let ne=s.vertexCount;xs(s,$,W,La($,p),x.bySection.get($.id),Z,oe,o,Y>0&&M(Y,$.outline));let he=s.vertexCount-ne;he>0&&v.push({sectionId:$.id,start:ne,count:he})}else if($.type==="shape"){let ne=i.byObjectId.get($.id),he=g.length;s.setMaterial((ne?.kind??$.role)==="screen"?1:0);let Te=$.role==="stage"&&!ne?cs($,T(Y)):$,Pe=Da(Te,ee);if(ns(s,Te,W.baseHeightM+Pe.supportOffsetM,Pe.topOffsetM-Pe.supportOffsetM,o,W.focal,g,ne,q),s.setMaterial(0),$.role==="stage"&&!ne&&g.length>he&&(C??Y)===Y){C=Y;let ke=t.floors?.[Y]?.id,Se=r.length>1&&ke?a.filter(Je=>Je.floorId===ke):a;nc(s,Te,g[g.length-1].y,Se)}}else $.type==="gaArea"?rs(s,$,W.baseHeightM,me(b.get($.categoryKey)),o):$.type==="booth"?Ja(s,$,W.baseHeightM,me(b.get($.categoryKey)),o,te.get($.id)??W.focal,N($,Y)):$.type==="table"?ts(s,$,Math.max(W.baseHeightM,w.get($.id)??W.baseHeightM),me($.fill??t.theme?.decorFill??"#232c40"),o,!!($.fill??t.theme?.decorFill)):$.type==="decorImage"&&os(s,$,W.baseHeightM,o);Ms(s,W,a,x,o,n.materials.shell,!c)}let D=r.length>1?{x:r.reduce((Y,W)=>Y+W.focal.x,0)/r.length,y:r.reduce((Y,W)=>Y+W.focal.y,0)/r.length}:t.focalPoint??{x:(m.minX+m.maxX)/2,y:(m.minY+m.maxY)/2},R=_i(c?[s.build(),c]:[s.build()]),A=ki(a,e.initialState,x,I,b,y),L=js({doc:t,units:r,seats:a,surfaces:x,focal:D}),{labels:O,sections:_,rows:k}=Xs({doc:t,units:r,seats:a,surfaces:x,seatData:A,hintedSeatFloor:l,zones:L,focal:D}),V=new Map(_.map((Y,W)=>[Y.id,W]));x.seatOwner.forEach((Y,W)=>{A.iSection[W]=Y?V.get(Y)??-1:-1});let F=Ys({doc:t,units:r,seats:a,surfaces:x,solids:R,hintedSeatFloor:l,seatFloor:I});Ws(O,F),A.iYaw=ni(A.iPosition,a.length,Y=>a[Y].rowId,Y=>{let W=r[I[Y]]?.focal??D;return[W.x*E,W.y*E]});let B=(m.minX+m.maxX)/2*E,z=(m.minY+m.maxY)/2*E,U=.5*Math.hypot((m.maxX-m.minX)*E,(m.maxY-m.minY)*E)||10,G=Rr(R,A,{cx:B,cz:z,radius:U},[h,f]),H=Rr(R,A,{cx:B,cz:z,radius:U}),K=Js(A,g,m,G.minY,G.maxY,U);return{sharedAisles:Li(r.flatMap(Y=>Y.objects.flatMap(W=>{if(W.type!=="section")return[];let Z=x.bySection.get(W.id);return Z?[{sectionId:W.id,floorIndex:Y.index,rows:Z.rowLevels}]:[]}))),solids:R,sectionSolidRanges:v,seats:A,seatSectionIds:x.seatOwner,bounds:{center:[(K.min[0]+K.max[0])/2,(K.min[1]+K.max[1])/2,(K.min[2]+K.max[2])/2],radius:U,groundY:0,box:K},renderBounds:{center:G.center,radius:G.radius},clipBounds:{center:H.center,radius:H.radius},stateColorLUT:Oi(n,Ae),theme:n,seatCount:a.length,focalWorld:[D.x*E,1.5,D.y*E],zones:L,stages:g,productionElements:i.elements,sections:_,rows:k,labels:O,floors:F}}var ic=88,ac=20,sc={floor:{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}},Uh=640,jh=.8,Xh=11,Wh="3px 7px",Yh="2px 5px",cc="rgba(10,14,22,.62)",Kh="#f4f7fb",lc=5,uc=2,qh=6,Pn=new Set(["row","seat"]),mc={floor:5,zone:4,section:3,ga:3,booth:2,annotation:1},qt={row:{x:66,y:20},seat:{x:52,y:22}},Er=me,Ar=e=>ai(e);function _r(e,t){let n=Ar(e),o=Ar(t);return(Math.max(n,o)+.05)/(Math.min(n,o)+.05)}function Tr(e,t){let n=/rgba\((\d+),(\d+),(\d+),([\d.]+)\)/.exec(e.replace(/\s/g,""));if(!n)return t;let o=Math.max(0,Math.min(1,Number(n[4])));return[1,2,3].map(r=>Number(n[r])/255*o+t[r-1]*(1-o))}function $h(e,t=[.04,.06,.1],n=!0){let o=Ar(t)<.42,r=o?"#f4f7fb":"#0b1220",i=o?"rgba(8,12,22,.78)":"rgba(255,255,255,.84)",a=n?Tr(i,t):t,s=Er(e),c=n?7:4.5,u=s&&_r(s,a)>=c?e:r;return o?{ink:u,backing:i,border:"rgba(210,222,245,.24)"}:{ink:u,backing:i,border:"rgba(11,18,32,.22)"}}function Zh(e,t=[.04,.06,.1]){let n=Tr(cc,t),o=Er(e);return{ink:o&&_r(o,n)>=4.5?e:Kh,backing:cc}}var Qh='ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif',fo=class{constructor(t,n={}){this.nodes=new Map;this.labels=[];this.nodeAppearance=new WeakMap;this.forcedDense=!1;this.selectedSeatLabelIds=new Set;this.narrowStage=!1;this.opts=n,this.root=document.createElement("div"),this.root.setAttribute("data-view3d-labels","");let o=this.root.style;o.position="absolute",o.inset="0",o.pointerEvents="none",o.overflow="hidden",o.fontFamily=n.fontFamily||Qh,t.appendChild(this.root)}setVisible(t){this.root.style.visibility=t?"":"hidden"}setLabels(t){this.labels=t;let n=new Set(t.map(o=>o.id));for(let[o,r]of this.nodes)n.has(o)||(r.remove(),this.nodes.delete(o))}setForcedDense(t){this.forcedDense=t}setSelectedSeatIds(t){this.selectedSeatLabelIds=new Set(Array.from(t,n=>`seat:${n}`))}sizeFor(t){let n=sc[t].size;return!this.narrowStage||Pn.has(t)?n:Math.max(Xh,n*jh)}qualityEvidence(){let t=this.root.getBoundingClientRect(),n=this.root.style.visibility!=="hidden";return this.labels.map(o=>{let r=this.nodes.get(o.id),i=r?.getBoundingClientRect(),a=!!(n&&r&&r.style.display!=="none"&&i&&i.width>0&&i.height>0);return{id:o.id,kind:o.kind,text:o.text,visible:a,renderedFontPx:r&&Number.parseFloat(r.style.fontSize)||0,contrast:r?Number(r.dataset.qualityContrast??0):0,...a&&i?{screenBox:{x:i.x-t.x,y:i.y-t.y,width:i.width,height:i.height}}:{}}})}update(t,n,o,r,i,a){if(!this.labels.length)return;this.narrowStage=n>0&&n<Uh;let s=Ds(r,i,{hasZoneLabels:this.labels.some(I=>I.kind==="zone")});this.forcedDense&&(s.add("row"),s.add("seat"));let c=[];for(let I of this.labels){if(!s.has(I.kind)&&!(I.kind==="seat"&&this.selectedSeatLabelIds.has(I.id)))continue;let v=bt(t,I.anchor,n,o);if(!v.visible)continue;let P=Pn.has(I.kind),S=this.sizeFor(I.kind),M=Ns(I.text,S,!P)+(P?lc*2:0);if(I.kind==="seat"&&I.seatWidthM!==void 0&&!this.selectedSeatLabelIds.has(I.id)&&Hs(t,I.anchor,I.seatWidthM,n)<Math.max(22,M))continue;let C=Os(v,M/2,S/2+(P?uc:4),n,o),T=a?Math.hypot(I.anchor[0]-a[0],I.anchor[1]-a[1],I.anchor[2]-a[2]):1;c.push({label:I,screen:C,focus:Gs(C,T,n,o),halfWidth:M/2,...this.selectedSeatLabelIds.has(I.id)?{priority:1}:{}})}let u=Fs(c.filter(I=>I.label.kind==="floor"),n),l=[...c.filter(I=>!Pn.has(I.label.kind)&&I.label.kind!=="floor"),...u],m=Vs(n),h=uo(c.filter(I=>I.label.kind==="seat"&&this.selectedSeatLabelIds.has(I.label.id)),qt.seat.x,qt.seat.y,m.seat),d=Bs(l,ic,ac).filter(I=>!h.some(v=>wn(I,v,ic,ac))),f=uo(c.filter(I=>I.label.kind==="row"),qt.row.x,qt.row.y,m.row,[...d,...h]),p=uo(c.filter(I=>I.label.kind==="seat"&&!this.selectedSeatLabelIds.has(I.label.id)),qt.seat.x,qt.seat.y,m.seat-h.length,[...d,...h,...f]),b=[...d,...f,...h,...p],y=new Set(b.map(I=>I.label.id));for(let{label:I,screen:v}of b){let S=this.nodeFor(I).style;S.display="",S.transform=`translate(-50%, -50%) translate(${v.x.toFixed(1)}px, ${v.y.toFixed(1)}px)`}let x=b.filter(({label:I})=>!Pn.has(I.kind)).sort((I,v)=>mc[v.label.kind]-mc[I.label.kind]||I.screen.depth-v.screen.depth||I.focus-v.focus).flatMap(({label:I})=>{let v=this.nodes.get(I.id);return v&&v.style.display!=="none"?[{node:v,box:v.getBoundingClientRect()}]:[]}),w=[];for(let{node:I,box:v}of x)w.some(S=>v.left<S.right+3&&v.right+3>S.left&&v.top<S.bottom+3&&v.bottom+3>S.top)?I.style.display="none":w.push(v);for(let[I,v]of this.nodes)y.has(I)||(v.style.display="none")}nodeFor(t){let n=this.nodes.get(t.id);if(!n){n=document.createElement("div");let p=n.style;p.position="absolute",p.left="0",p.top="0",p.whiteSpace="nowrap",p.textShadow="0 1px 3px rgba(0,0,0,0.85), 0 0 8px rgba(0,0,0,0.55)",p.display="none",this.root.appendChild(n),this.nodes.set(t.id,n)}let o=this.selectedSeatLabelIds.has(t.id),r=this.nodeAppearance.get(n);if(r&&r.text===t.text&&r.kind===t.kind&&r.color===t.color&&r.selected===o&&r.narrow===this.narrowStage)return n;this.nodeAppearance.set(n,{text:t.text,kind:t.kind,color:t.color,selected:o,narrow:this.narrowStage}),n.textContent=t.text,n.setAttribute("data-label-kind",t.kind),n.toggleAttribute("data-selected-seat",o);let i=sc[t.kind],a=n.style;a.fontSize=`${this.sizeFor(t.kind)}px`,a.fontWeight=o?"800":i.weight,a.opacity=o?"1":String(i.opacity);let s=Pn.has(t.kind),c=!s,u=$h(t.color??this.opts.ink,this.opts.backgroundRgb,!0),l=s?Zh(t.color??this.opts.ink,this.opts.backgroundRgb):u;a.color=o?"#ecf8ff":l.ink,a.background=o?"rgba(10,28,45,.9)":l.backing,a.border=o?"1px solid rgba(89,199,255,.92)":c?`1px solid ${u.border}`:"",a.borderRadius=o||c?"999px":`${qh}px`;let m=this.narrowStage?Yh:Wh;a.padding=o||c?m:`${uc}px ${lc}px`,a.lineHeight=s?"1.1":"",a.boxShadow=o?"0 0 0 2px rgba(41,176,255,.18), 0 5px 14px rgba(0,0,0,.35)":c?"0 3px 10px rgba(0,0,0,.24)":"0 1px 4px rgba(0,0,0,.28)",a.letterSpacing=t.kind==="zone"||t.kind==="floor"?"0.08em":"0.02em";let h=this.opts.backgroundRgb??[.04,.06,.1],d=Er(o?"#ecf8ff":l.ink)??[1,1,1],f=Tr(o?"rgba(10,28,45,.9)":l.backing,h);return n.dataset.qualityContrast=_r(d,f).toFixed(3),a.textTransform=t.kind==="zone"||t.kind==="floor"?"uppercase":"",n}dispose(){this.root.remove(),this.nodes.clear()}};var dc=1;var Jh=new Set(["floor","zone","section","ga","booth","annotation"]);function ep(e){return e.every(t=>Number.isFinite(t))}function tp(e,t){return e.x<t.x+t.width&&e.x+e.width>t.x&&e.y<t.y+t.height&&e.y+e.height>t.y}function fc(e){return e.length?Math.round(Math.min(...e)*100)/100:null}function Tt(e){return Math.round(e*1e4)/1e4}function np(e){if(e)return{box:{x:Tt(e.box.x),y:Tt(e.box.y),width:Tt(e.box.width),height:Tt(e.box.height)},horizontalFillRatio:Tt(e.horizontalFillRatio),verticalFillRatio:Tt(e.verticalFillRatio),visibleAreaRatio:Tt(e.visibleAreaRatio),clippedEdges:[...e.clippedEdges]}}function $e(e,t,n){return n.length?{code:e,message:t,count:n.length,samples:n.slice(0,20)}:null}function ho(e){let t=e.labels.filter(s=>s.visible&&s.screenBox),n=t.filter(s=>Jh.has(s.kind)),o=e.scene.floorCount>1?e.scene.floorCount:e.scene.zoneCount||e.scene.sectionCount,r=[];for(let s=0;s<n.length;s+=1)for(let c=0;c<s;c+=1)tp(n[s].screenBox,n[c].screenBox)&&r.push({primaryId:n[s].id,primaryLabel:n[s].text,secondaryId:n[c].id});let i=[...e.camera.position,e.camera.distance,e.camera.verticalFovDeg],a=[$e("webgl2-unavailable","The venue scene must render through WebGL2",e.context.webgl2?[]:[{primaryId:"renderer",primaryLabel:"WebGL2"}]),$e("context-lost","The WebGL context must be live at capture",e.context.lost?[{primaryId:"renderer",primaryLabel:"context lost"}]:[]),$e("frame-not-stable","The captured 3D frame must be rendered and parked",e.frame.rendered>0&&e.frame.idle?[]:[{primaryId:"renderer",primaryLabel:"unstable frame"}]),$e("viewport-empty","The 3D viewport must have visible dimensions",e.viewport.width>1&&e.viewport.height>1?[]:[{primaryId:"viewport",primaryLabel:`${e.viewport.width}\xD7${e.viewport.height}`}]),$e("camera-invalid","The capture camera must have a finite physical pose",ep(i)&&e.camera.distance>0&&e.camera.verticalFovDeg>0&&e.camera.verticalFovDeg<180?[]:[{primaryId:"camera",primaryLabel:"invalid pose"}]),$e("authored-relief-not-visible","Authored 3D height or rake must produce visible screen-space relief",!e.scene.authoredRelief||e.scene.renderedVerticalSpanM>.05&&e.scene.projectedReliefPx>=2?[]:[{primaryId:"scene",primaryLabel:"authored relief",measured:e.scene.projectedReliefPx,minimum:2}]),$e("hierarchy-label-missing","A venue with authored hierarchy must show at least one structural label",o===0||n.length>0?[]:[{primaryId:"labels",primaryLabel:`${o} expected hierarchy labels`}]),$e("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}))),$e("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}))),$e("hierarchy-label-collision","Visible 3D hierarchy labels must not overlap",r)].filter(s=>!!s);return{version:1,state:"venue3d",passed:a.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:e.viewport,context:e.context,frame:e.frame,camera:e.camera,scene:e.scene,composition:{visibleLabels:t.map(({id:s,kind:c,text:u})=>({id:s,kind:c,text:u})).sort((s,c)=>s.kind.localeCompare(c.kind)||s.id.localeCompare(c.id)),framing:np(e.framing)},metrics:{minimumHierarchyFontPx:fc(n.map(s=>s.renderedFontPx)),minimumHierarchyContrast:fc(n.map(s=>s.contrast)),projectedReliefPx:Math.round(e.scene.projectedReliefPx*100)/100},findings:a}}function hc(e,t,n){e.fill(0);for(let o=0;o<Math.min(n,t.length);o++)e[t[o]]=1}var ve=require("ogl");var yt=require("ogl");var po=`
|
|
21
21
|
float chairWeight(float depth) {
|
|
22
22
|
return 1.0 - smoothstep(uChairFull, uChairNone, depth);
|
|
23
|
-
}`,
|
|
23
|
+
}`,pc=`
|
|
24
24
|
float occupantWeight(float depth) {
|
|
25
|
-
float nearWeight = smoothstep(${
|
|
26
|
-
float farWeight = 1.0 - smoothstep(${
|
|
25
|
+
float nearWeight = smoothstep(${yi.toFixed(1)}, ${gi.toFixed(1)}, depth);
|
|
26
|
+
float farWeight = 1.0 - smoothstep(${pi.toFixed(1)}, ${bi.toFixed(1)}, depth);
|
|
27
27
|
return nearWeight * farWeight;
|
|
28
|
-
}`,
|
|
28
|
+
}`,kr=`
|
|
29
29
|
float glyphEq(float glyph, float expected) {
|
|
30
30
|
return 1.0 - step(0.25, abs(glyph - expected));
|
|
31
31
|
}
|
|
@@ -74,7 +74,7 @@ vec3 glyphChairPosition(vec3 p, float partId, float glyph) {
|
|
|
74
74
|
p.y += 0.16;
|
|
75
75
|
}
|
|
76
76
|
return p;
|
|
77
|
-
}`,
|
|
77
|
+
}`,op=`#version 300 es
|
|
78
78
|
precision highp float;
|
|
79
79
|
in vec3 position;
|
|
80
80
|
in vec3 normal;
|
|
@@ -112,7 +112,7 @@ void main() {
|
|
|
112
112
|
vNormalWorld = normalize(mat3(modelMatrix) * normal);
|
|
113
113
|
vColor = color;
|
|
114
114
|
gl_Position = projectionMatrix * mv;
|
|
115
|
-
}`,
|
|
115
|
+
}`,rp=`#version 300 es
|
|
116
116
|
precision highp float;
|
|
117
117
|
in vec3 vColor;
|
|
118
118
|
in vec3 vNormalWorld;
|
|
@@ -124,7 +124,48 @@ in float vMaterial;
|
|
|
124
124
|
uniform vec3 uKeyDir; // WORLD space, unit, points at the light
|
|
125
125
|
uniform float uStructureDetail;
|
|
126
126
|
uniform float uRoughness;
|
|
127
|
+
uniform vec3 uDeckColor;
|
|
128
|
+
uniform float uSectionFilter;
|
|
129
|
+
uniform float uFocusFloor;
|
|
130
|
+
uniform sampler2D tVenueShadow;
|
|
131
|
+
uniform mat4 uShadowMatrix;
|
|
127
132
|
out vec4 fragColor;
|
|
133
|
+
// Stable world-space variation; no textures or per-frame random grain.
|
|
134
|
+
float turfHash(vec2 p) {
|
|
135
|
+
vec3 q = fract(vec3(p.xyx) * 0.1031);
|
|
136
|
+
q += dot(q, q.yzx + 33.33);
|
|
137
|
+
return fract((q.x + q.y) * q.z);
|
|
138
|
+
}
|
|
139
|
+
float turfNoise(vec2 p) {
|
|
140
|
+
vec2 cell = floor(p), f = fract(p);
|
|
141
|
+
f = f * f * (3.0 - 2.0 * f);
|
|
142
|
+
return mix(mix(turfHash(cell), turfHash(cell + vec2(1.0, 0.0)), f.x),
|
|
143
|
+
mix(turfHash(cell + vec2(0.0, 1.0)), turfHash(cell + vec2(1.0)), f.x), f.y);
|
|
144
|
+
}
|
|
145
|
+
float architecturalLight(vec3 normal) {
|
|
146
|
+
// Whole-venue static bake only: hidden floors must never leave ghost shadows.
|
|
147
|
+
if (uFocusFloor >= -0.5) return 1.0;
|
|
148
|
+
vec4 clip = uShadowMatrix * vec4(vPosWorld, 1.0);
|
|
149
|
+
vec3 p = clip.xyz / clip.w * 0.5 + 0.5;
|
|
150
|
+
if (any(lessThan(p, vec3(0.0))) || any(greaterThan(p, vec3(1.0)))) return 1.0;
|
|
151
|
+
float bias = max(0.001, 0.003 * (1.0 - max(dot(normal, uKeyDir), 0.0)));
|
|
152
|
+
// Interpolate depth comparisons, not depth values. Fixed nearest samples
|
|
153
|
+
// produced four visible shade bands as an edge crossed a shadow texel.
|
|
154
|
+
// A small tent filter softens those edges with continuous coverage.
|
|
155
|
+
// Sixteen depth reads; no extra shadow render pass or larger texture.
|
|
156
|
+
vec2 size = vec2(textureSize(tVenueShadow, 0));
|
|
157
|
+
vec2 texel = p.xy * size - 0.5;
|
|
158
|
+
vec2 cell = floor(texel);
|
|
159
|
+
vec2 fraction = fract(texel);
|
|
160
|
+
float lit = 0.0;
|
|
161
|
+
for (int x = -1; x < 3; x++) for (int y = -1; y < 3; y++) {
|
|
162
|
+
vec2 corner = vec2(float(x), float(y));
|
|
163
|
+
vec2 weight = max(vec2(0.0), vec2(2.0) - abs(corner - fraction));
|
|
164
|
+
float depth = texture(tVenueShadow, (cell + corner + 0.5) / size).r;
|
|
165
|
+
lit += step(p.z - bias, depth) * weight.x * weight.y;
|
|
166
|
+
}
|
|
167
|
+
return mix(0.65, 1.0, lit / 16.0);
|
|
168
|
+
}
|
|
128
169
|
void main() {
|
|
129
170
|
if (vDim > 0.5) discard;
|
|
130
171
|
// Row treads (material 3) and risers (material 2) are chart truth: the
|
|
@@ -144,22 +185,48 @@ void main() {
|
|
|
144
185
|
// Risers are baked at 0.72 of their tread (see tiers.ts bandColors); lift
|
|
145
186
|
// them back to the tread colour as detail fades out.
|
|
146
187
|
vec3 vColorRung = vColor * mix(mix(1.0 / 0.72, 1.0, uStructureDetail), 1.0, 1.0 - riser);
|
|
147
|
-
|
|
188
|
+
// Concrete remains visible at overview instead of painting the entire
|
|
189
|
+
// seating deck like upholstery. Keep a category tint for navigation;
|
|
190
|
+
// filtering retains its existing shell color cues.
|
|
191
|
+
float tread = 1.0 - step(0.5, abs(vMaterial - 3.0));
|
|
192
|
+
float concreteWeight = max(tread, riser) * mix(0.38, 1.0, uStructureDetail) * (1.0 - uSectionFilter);
|
|
193
|
+
vec3 concrete = uDeckColor * mix(1.0, 0.72, riser * uStructureDetail);
|
|
194
|
+
vColorRung = mix(vColorRung, concrete, concreteWeight * 0.82);
|
|
195
|
+
if (abs(vMaterial - 4.5) < 1.0) {
|
|
196
|
+
// Turf and generated concrete share the same two noise evaluations. Fine
|
|
197
|
+
// fibres/aggregate fade as they become sub-pixel, avoiding distant grain.
|
|
198
|
+
float concreteSurface = step(4.5, vMaterial);
|
|
199
|
+
vec2 surface = vPosWorld.xz + concreteSurface * vPosWorld.y * vec2(0.73, 0.41);
|
|
200
|
+
float pixelSize = max(length(dFdx(surface)), length(dFdy(surface)));
|
|
201
|
+
float fine = 1.0 - smoothstep(mix(0.04, 0.015, concreteSurface),
|
|
202
|
+
mix(0.16, 0.065, concreteSurface), pixelSize);
|
|
203
|
+
float variation = (turfNoise(surface * mix(0.32, 0.65, concreteSurface)) - 0.5)
|
|
204
|
+
* mix(0.13, 0.075, concreteSurface)
|
|
205
|
+
+ (turfNoise(surface * mix(9.0, 23.0, concreteSurface)) - 0.5)
|
|
206
|
+
* mix(0.10, 0.055, concreteSurface) * fine;
|
|
207
|
+
vColorRung *= 1.0 + variation;
|
|
208
|
+
}
|
|
209
|
+
// Unresolved row faces need the same lighting, not merely the same paint:
|
|
210
|
+
// alternating vertical/horizontal normals otherwise recreate a moire comb.
|
|
211
|
+
float rowOverview = max(tread, riser) * (1.0 - uStructureDetail);
|
|
212
|
+
vec3 N = normalize(mix(vNormalWorld, vec3(0.0, 1.0, 0.0), rowOverview));
|
|
148
213
|
vec3 V = normalize(-vPosView);
|
|
149
214
|
float hemi = 0.5 + 0.5 * N.y; // sky/ground gradient about WORLD up
|
|
150
|
-
float
|
|
215
|
+
float visibility = architecturalLight(N);
|
|
216
|
+
float key = max(dot(N, uKeyDir), 0.0) * visibility; // fixed key \u2014 does not orbit with you
|
|
151
217
|
// Low opposite fill so faces turned away from the key keep their form instead
|
|
152
218
|
// of crushing to a single flat value.
|
|
153
219
|
vec3 fillDir = normalize(vec3(-uKeyDir.x, 0.25, -uKeyDir.z));
|
|
154
220
|
float fill = max(dot(N, fillDir), 0.0);
|
|
155
|
-
vec3 base = vColorRung * (0.
|
|
221
|
+
vec3 base = vColorRung * (0.40 + 0.28 * hemi) * mix(0.76, 1.0, visibility) + vColorRung * key * 0.46 + vColorRung * fill * 0.12;
|
|
156
222
|
float fres = pow(1.0 - max(dot(normalize(vNormalView), V), 0.0), 3.0);
|
|
157
223
|
// Material 1 is a powered display and keeps its authored emission treatment.
|
|
158
224
|
// Every architectural material uses the venue roughness token; 0.78 maps to
|
|
159
225
|
// exactly the historical rim strength so an unthemed chart does not shift.
|
|
160
226
|
float poweredMaterial = 1.0 - step(0.5, abs(vMaterial - 1.0));
|
|
161
227
|
float sheen = mix(clamp((1.0 - uRoughness) / 0.22, 0.15, 2.0), 1.0, poweredMaterial);
|
|
162
|
-
|
|
228
|
+
float concreteSheen = abs(vMaterial - 5.0) < 0.5 ? 0.45 : 1.0;
|
|
229
|
+
base += vec3(0.26, 0.31, 0.38) * fres * 0.16 * sheen * (1.0 - rowOverview) * concreteSheen; // cool rim, restrained
|
|
163
230
|
// Bright, saturated authored screen faces should read as powered displays,
|
|
164
231
|
// not painted slabs. Vertex colour is deliberately the material signal here:
|
|
165
232
|
// muted tiers and structure never cross these thresholds. The broad waves
|
|
@@ -185,15 +252,43 @@ void main() {
|
|
|
185
252
|
+ vec3(0.20, 0.10, 0.34) * focalHalo;
|
|
186
253
|
base = mix(base, display, poweredDisplay * verticalFace * 0.92);
|
|
187
254
|
fragColor = vec4(base, 1.0);
|
|
188
|
-
}`,
|
|
255
|
+
}`,bc=`
|
|
256
|
+
${kr}
|
|
257
|
+
vec4 seatSurface(vec3 source, float radius) {
|
|
258
|
+
vec4 origin = modelViewMatrix * vec4(iOffset, 1.0);
|
|
259
|
+
if (iPhysicalSeat < 0.5) {
|
|
260
|
+
if (surface > 0.5) return origin;
|
|
261
|
+
// Empty bays are markings on the deck, not upright camera-facing panels.
|
|
262
|
+
float c = cos(iYaw), s = sin(iYaw);
|
|
263
|
+
vec3 bay = vec3(source.x * c + source.y * s, 0.0, -source.x * s + source.y * c) * radius;
|
|
264
|
+
bay.y = 0.015;
|
|
265
|
+
return modelViewMatrix * vec4(iOffset + bay, 1.0);
|
|
266
|
+
}
|
|
267
|
+
if (surface < 0.5) return origin;
|
|
268
|
+
vec3 p = glyphChairPosition(source, surface, iGlyph);
|
|
269
|
+
p.xz *= iChairWidth;
|
|
270
|
+
if (surface > 1.5) p.z -= max(p.y - ${ut.toFixed(2)}, 0.0) * ${an.toFixed(2)} * glyphBackRake(iGlyph);
|
|
271
|
+
float c = cos(iYaw), s = sin(iYaw);
|
|
272
|
+
vec3 rotated = vec3(p.x * c + p.z * s, p.y, -p.x * s + p.z * c);
|
|
273
|
+
return modelViewMatrix * vec4(iOffset + rotated, 1.0);
|
|
274
|
+
}
|
|
275
|
+
`,ip=`#version 300 es
|
|
189
276
|
precision highp float;
|
|
190
|
-
in
|
|
277
|
+
in float surface;
|
|
278
|
+
in float iYaw;
|
|
279
|
+
in float iChairWidth;
|
|
280
|
+
in float iGlyph;
|
|
281
|
+
in vec3 position;
|
|
282
|
+
in vec3 normal;
|
|
283
|
+
in vec2 uv; // quad corner in [-1,1]
|
|
191
284
|
in vec3 iOffset; // per-instance world position
|
|
192
285
|
in vec3 iColor; // per-instance state colour (resolved CPU-side)
|
|
193
286
|
in float iMaxRadius; // per-instance world-radius ceiling (seat pitch derived)
|
|
287
|
+
in float iHasChair;
|
|
194
288
|
in float iPhysicalSeat;// 1 = chair; 0 = empty wheelchair bay
|
|
195
289
|
in vec3 iRing; // accommodation ring colour; (0,0,0) = not accessible
|
|
196
290
|
in float iFloor; // owning floor index
|
|
291
|
+
in float iSection; // owning section index, -1 = none
|
|
197
292
|
uniform mat4 modelViewMatrix;
|
|
198
293
|
uniform mat4 projectionMatrix;
|
|
199
294
|
uniform float uSeatRadius;
|
|
@@ -201,25 +296,31 @@ uniform float uSeatScale;
|
|
|
201
296
|
uniform float uMinPixels;
|
|
202
297
|
uniform float uPixelToWorld; // (2*tan(fovY/2)) / viewportHeightPx
|
|
203
298
|
uniform float uFocusFloor; // -1 = show every floor
|
|
299
|
+
uniform float uFocusSection; // -1 = no section entered
|
|
204
300
|
uniform float uChairFull; // view depth at which the chair mesh is full size
|
|
205
301
|
uniform float uChairNone; // ...and at which it has scaled away entirely
|
|
302
|
+
out vec3 vSeatNormal;
|
|
303
|
+
out float vSeatHeight;
|
|
304
|
+
out float vSeatSurface;
|
|
206
305
|
out vec2 vUv;
|
|
207
306
|
out vec3 vColor;
|
|
208
307
|
out float vBudget; // 1 = dot holds its minimum pixel size, <1 = it cannot
|
|
209
308
|
out vec3 vRing;
|
|
210
309
|
out float vDim;
|
|
310
|
+
out float vSectionFade;
|
|
211
311
|
out float vDotWeight; // 1 = the dot IS this seat, 0 = the chair has taken over
|
|
212
312
|
out float vPhysicalSeat;
|
|
213
313
|
out float vPixelRadius;
|
|
214
|
-
${
|
|
314
|
+
${po}
|
|
315
|
+
${bc}
|
|
215
316
|
void main() {
|
|
216
317
|
vec4 mv = modelViewMatrix * vec4(iOffset, 1.0);
|
|
217
318
|
float depth = max(-mv.z, 0.001);
|
|
218
319
|
// Hand the seat over to the chair mesh as it comes into range. Derived from
|
|
219
|
-
// this instance's
|
|
320
|
+
// this instance's spherical distance rather than from a global uniform, so a row two
|
|
220
321
|
// metres away and the far side of the bowl resolve differently in the same
|
|
221
322
|
// frame \u2014 which is the entire point of a ladder over a switch.
|
|
222
|
-
vDotWeight = 1.0 - chairWeight(
|
|
323
|
+
vDotWeight = 1.0 - iPhysicalSeat * iHasChair * chairWeight(length(mv.xyz));
|
|
223
324
|
float minR = uMinPixels * depth * uPixelToWorld; // screen-space floor
|
|
224
325
|
// Grow to hold the pixel floor, but never past this seat's own pitch ceiling:
|
|
225
326
|
// unbounded growth is what merges neighbouring rows into one mass at range.
|
|
@@ -229,28 +330,39 @@ void main() {
|
|
|
229
330
|
// it is losing legibility to distance, and the fragment stage dissolves it
|
|
230
331
|
// toward the tier top rather than letting a sub-pixel dot alias and shimmer.
|
|
231
332
|
vBudget = minR > 0.0 ? clamp(r / minR, 0.0, 1.0) : 1.0;
|
|
232
|
-
mv
|
|
233
|
-
//
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
vUv = position;
|
|
333
|
+
mv = seatSurface(position, r);
|
|
334
|
+
// Match the shell's non-uniform width/depth scale before its back rake.
|
|
335
|
+
vec3 n = vec3(normal.x / iChairWidth, normal.y, normal.z / iChairWidth);
|
|
336
|
+
if (surface > 1.5) n.y += n.z * ${an.toFixed(2)} * glyphBackRake(iGlyph);
|
|
337
|
+
n = normalize(n);
|
|
338
|
+
vSeatNormal = vec3(n.x * cos(iYaw) + n.z * sin(iYaw), n.y, -n.x * sin(iYaw) + n.z * cos(iYaw));
|
|
339
|
+
vSeatHeight = position.y;
|
|
340
|
+
vSeatSurface = step(1.5, surface);
|
|
341
|
+
vUv = uv;
|
|
242
342
|
vColor = iColor;
|
|
243
343
|
vRing = iRing;
|
|
244
344
|
vPhysicalSeat = iPhysicalSeat;
|
|
245
345
|
vDim = (uFocusFloor < -0.5 || abs(iFloor - uFocusFloor) < 0.5) ? 0.0 : 1.0;
|
|
346
|
+
vSectionFade = (uFocusSection < -0.5 || abs(iSection - uFocusSection) < 0.5) ? 0.0 : 1.0;
|
|
246
347
|
gl_Position = projectionMatrix * mv;
|
|
247
|
-
}`,
|
|
348
|
+
}`,yc=`
|
|
349
|
+
float seatSilhouette(vec2 uv, float physical) {
|
|
350
|
+
// Solid furniture owns its silhouette in geometry. Only empty bays need
|
|
351
|
+
// a fragment mask; cutting physical faces would open holes in the volume.
|
|
352
|
+
return mix(max(abs(uv.x), abs(uv.y)), 0.0, physical);
|
|
353
|
+
}
|
|
354
|
+
`,ap=`#version 300 es
|
|
248
355
|
precision highp float;
|
|
356
|
+
in vec3 vSeatNormal;
|
|
357
|
+
in float vSeatHeight;
|
|
358
|
+
in float vSeatSurface;
|
|
359
|
+
uniform vec3 uKeyDir;
|
|
249
360
|
in vec2 vUv;
|
|
250
361
|
in vec3 vColor;
|
|
251
362
|
in float vBudget;
|
|
252
363
|
in vec3 vRing;
|
|
253
364
|
in float vDim;
|
|
365
|
+
in float vSectionFade;
|
|
254
366
|
in float vDotWeight;
|
|
255
367
|
in float vPhysicalSeat;
|
|
256
368
|
in float vPixelRadius;
|
|
@@ -259,25 +371,36 @@ uniform float uSeatDetail; // 0 for venue/area overview; 1 in section/row/sea
|
|
|
259
371
|
uniform vec3 uFadeColor;
|
|
260
372
|
uniform float uRoughness;
|
|
261
373
|
out vec4 fragColor;
|
|
374
|
+
${yc}
|
|
262
375
|
void main() {
|
|
263
376
|
if (vDim > 0.5) discard;
|
|
264
377
|
// Same screen-door dissolve as the structure rung (uStructureDetail): the
|
|
265
378
|
// dot layer develops over ~a quarter second instead of appearing at once.
|
|
266
379
|
float stipple = fract(sin(dot(gl_FragCoord.xy, vec2(12.9898, 78.233))) * 43758.5453);
|
|
267
|
-
|
|
380
|
+
// At overview, faint physical-seat grain supplies scale without exposing
|
|
381
|
+
// inventory states. It dissolves before subpixel seats can alias.
|
|
382
|
+
float overviewGrain = (1.0 - uSeatDetail) * vPhysicalSeat * smoothstep(0.55, 1.15, vPixelRadius);
|
|
383
|
+
if (stipple >= uSeatDetail && overviewGrain <= 0.0) discard;
|
|
268
384
|
// Empty wheelchair provision is a square bay, never a round chair marker.
|
|
269
|
-
float d =
|
|
385
|
+
float d = seatSilhouette(vUv, vPhysicalSeat);
|
|
270
386
|
if (d > 1.0) discard;
|
|
271
387
|
float alpha = smoothstep(1.0, 0.72, d);
|
|
272
|
-
|
|
273
|
-
|
|
388
|
+
vec3 N = normalize(vSeatNormal);
|
|
389
|
+
if (vSeatSurface > 0.5 && !gl_FrontFacing) N = -N;
|
|
390
|
+
float hemi = 0.5 + 0.5 * N.y;
|
|
391
|
+
float key = max(dot(N, uKeyDir), 0.0);
|
|
392
|
+
float fill = max(dot(N, normalize(vec3(-uKeyDir.x, 0.25, -uKeyDir.z))), 0.0);
|
|
393
|
+
float ao = mix(0.58, 1.0, clamp(vSeatHeight / 0.92, 0.0, 1.0));
|
|
394
|
+
float partShade = mix(1.10, 0.80, vSeatSurface);
|
|
395
|
+
vec3 c = vColor * (partShade * ao * (0.60 + 0.30 * hemi) + key * 0.28 + fill * 0.16);
|
|
274
396
|
c = mix(c, uFadeColor, uSeatFade);
|
|
275
397
|
// Accommodation ring \u2014 the 3D echo of the coloured ring 2D draws around every
|
|
276
398
|
// accessible seat. Painted INSIDE the dot's own radius rather than outside it,
|
|
277
399
|
// so an accessible seat still respects the row-pitch ceiling and cannot grow
|
|
278
400
|
// into its neighbour just for carrying a ring.
|
|
279
401
|
float ringMask = step(0.001, dot(vRing, vRing));
|
|
280
|
-
float
|
|
402
|
+
float ringDistance = max(abs(vUv.x), abs(vUv.y));
|
|
403
|
+
float ring = smoothstep(0.58, 0.70, ringDistance) * (1.0 - smoothstep(0.90, 1.0, ringDistance));
|
|
281
404
|
c = mix(c, vRing, ring * ringMask * 0.95);
|
|
282
405
|
// A dot that can no longer afford its pixel floor dissolves instead of
|
|
283
406
|
// aliasing; the tier cap underneath already carries the section's category
|
|
@@ -287,7 +410,10 @@ void main() {
|
|
|
287
410
|
// seat rather than a sample in a dense screen-space pattern. This is based on
|
|
288
411
|
// actual projected pixels, so it remains correct for unusually large or small
|
|
289
412
|
// venues where a radius-normalised camera distance is misleading.
|
|
290
|
-
alpha
|
|
413
|
+
float detailedAlpha = alpha * smoothstep(2.4, 3.2, vPixelRadius) * uSeatDetail;
|
|
414
|
+
float grainAlpha = smoothstep(1.0, 0.55, d) * overviewGrain * 0.42;
|
|
415
|
+
c = mix(vec3(0.27, 0.31, 0.32), c, uSeatDetail);
|
|
416
|
+
alpha = max(detailedAlpha, grainAlpha);
|
|
291
417
|
// Inventory states are a section-level decision aid. At whole-venue/area
|
|
292
418
|
// scale the category-tinted structural surface is the honest, stable signal;
|
|
293
419
|
// thousands of enlarged status dots only form a moir\xE9 pattern. The journey
|
|
@@ -297,13 +423,17 @@ void main() {
|
|
|
297
423
|
// while zooming. uSeatFade already measures this exact LOD transition: let
|
|
298
424
|
// the category-tinted tier carry the overview, then reveal individual live
|
|
299
425
|
// availability as the buyer approaches a section.
|
|
300
|
-
//
|
|
301
|
-
|
|
302
|
-
// never thins out to nothing in between.
|
|
303
|
-
alpha *= vDotWeight;
|
|
426
|
+
// Exactly one representation owns this seat at the detail boundary.
|
|
427
|
+
if (vDotWeight <= 0.99) discard;
|
|
304
428
|
if (alpha <= 0.0) discard;
|
|
429
|
+
// Outside the entered section: quieter, still visible and pickable. Not the
|
|
430
|
+
// strong grey of a filtered seat, which means nothing to buy there.
|
|
431
|
+
if (vSectionFade > 0.5) {
|
|
432
|
+
float lum = dot(c, vec3(0.299, 0.587, 0.114));
|
|
433
|
+
c = mix(c, mix(vec3(lum), vec3(0.93), 0.35), 0.45);
|
|
434
|
+
}
|
|
305
435
|
fragColor = vec4(c, alpha);
|
|
306
|
-
}`,
|
|
436
|
+
}`,sp=`#version 300 es
|
|
307
437
|
precision highp float;
|
|
308
438
|
in vec3 position; // local: x/z in units of the seat radius, y in METRES
|
|
309
439
|
in vec3 normal;
|
|
@@ -314,6 +444,7 @@ in float iRadius; // per-instance horizontal half-width, world metres
|
|
|
314
444
|
in float iYaw; // per-instance facing, radians (local +Z -> facing dir)
|
|
315
445
|
in vec3 iRing; // accommodation ring colour; (0,0,0) = not accessible
|
|
316
446
|
in float iFloor;
|
|
447
|
+
in float iSection; // owning section index, -1 = none
|
|
317
448
|
in float iSeed; // <0 = seat is empty; else per-person hash in [0,1)
|
|
318
449
|
in float iPhysicalSeat;// 1 = chair; 0 = empty wheelchair bay
|
|
319
450
|
in float iGlyph; // stable SEAT_GLYPH_ORDER index
|
|
@@ -322,21 +453,24 @@ uniform mat4 projectionMatrix;
|
|
|
322
453
|
uniform float uChairFull;
|
|
323
454
|
uniform float uChairNone;
|
|
324
455
|
uniform float uFocusFloor;
|
|
456
|
+
uniform float uFocusSection; // -1 = no section entered
|
|
325
457
|
uniform float uBackRake; // metres of z per metre of rise, above uBackBase
|
|
326
458
|
uniform float uBackBase; // local height at which the back starts
|
|
327
459
|
out vec3 vColor;
|
|
328
460
|
out vec3 vNormalWorld;
|
|
329
461
|
out vec3 vNormalView;
|
|
330
462
|
out vec3 vPosView;
|
|
463
|
+
out float vChairWeight;
|
|
331
464
|
out float vPart;
|
|
332
465
|
out float vHeight; // local height in metres, for the vertical occlusion ramp
|
|
333
466
|
out vec3 vRing;
|
|
334
467
|
out float vDim;
|
|
468
|
+
out float vSectionFade;
|
|
335
469
|
out float vOccupant; // 1 = this vertex belongs to a person, not to the chair
|
|
336
470
|
out vec3 vOccupantTint;
|
|
337
|
-
${
|
|
338
|
-
${
|
|
339
|
-
${
|
|
471
|
+
${po}
|
|
472
|
+
${pc}
|
|
473
|
+
${kr}
|
|
340
474
|
void main() {
|
|
341
475
|
vec4 anchor = modelViewMatrix * vec4(iOffset, 1.0);
|
|
342
476
|
float viewDepth = -anchor.z;
|
|
@@ -344,7 +478,7 @@ void main() {
|
|
|
344
478
|
// A stale near-field gather can contain seats now behind the camera after a
|
|
345
479
|
// row\u2192overview move. Treating negative depth as 0.001 made those chairs full
|
|
346
480
|
// size across the near plane, producing the long black zoom streaks.
|
|
347
|
-
float w = viewDepth > 0.05 ? chairWeight(
|
|
481
|
+
float w = viewDepth > 0.05 ? chairWeight(length(anchor.xyz)) : 0.0;
|
|
348
482
|
// 1. Local units -> world metres. Only x/z scale: narrow rows get narrow
|
|
349
483
|
// chairs, but nobody gets a short one (people are the same height at every
|
|
350
484
|
// seat pitch).
|
|
@@ -388,11 +522,9 @@ void main() {
|
|
|
388
522
|
float resolvedRake = uBackRake * glyphBackRake(iGlyph);
|
|
389
523
|
float rake = (part > 1.5 && part < 2.5) ? max(p.y - uBackBase, 0.0) * resolvedRake : 0.0;
|
|
390
524
|
p.z -= rake;
|
|
391
|
-
//
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
// half there; see chairScale() in lod.ts.
|
|
395
|
-
p *= sqrt(w);
|
|
525
|
+
// Fixed-size detail swap: no miniature chair inside a larger fallback.
|
|
526
|
+
p *= step(0.01, w);
|
|
527
|
+
vChairWeight = w;
|
|
396
528
|
float c = cos(iYaw), s = sin(iYaw);
|
|
397
529
|
vec3 rp = vec3(p.x * c + p.z * s, p.y, -p.x * s + p.z * c);
|
|
398
530
|
// Normals under the same two transforms, in reverse and inverted-transposed.
|
|
@@ -421,8 +553,9 @@ void main() {
|
|
|
421
553
|
vHeight = localHeight;
|
|
422
554
|
vRing = iRing;
|
|
423
555
|
vDim = (uFocusFloor < -0.5 || abs(iFloor - uFocusFloor) < 0.5) ? 0.0 : 1.0;
|
|
556
|
+
vSectionFade = (uFocusSection < -0.5 || abs(iSection - uFocusSection) < 0.5) ? 0.0 : 1.0;
|
|
424
557
|
gl_Position = projectionMatrix * mv;
|
|
425
|
-
}`,
|
|
558
|
+
}`,cp=`#version 300 es
|
|
426
559
|
precision highp float;
|
|
427
560
|
in vec3 vColor;
|
|
428
561
|
in vec3 vNormalWorld;
|
|
@@ -432,14 +565,17 @@ in float vPart;
|
|
|
432
565
|
in float vHeight;
|
|
433
566
|
in vec3 vRing;
|
|
434
567
|
in float vDim;
|
|
568
|
+
in float vSectionFade;
|
|
435
569
|
in float vOccupant;
|
|
436
570
|
in vec3 vOccupantTint;
|
|
437
571
|
uniform vec3 uKeyDir;
|
|
438
572
|
uniform vec3 uFadeColor;
|
|
439
573
|
uniform float uRoughness;
|
|
574
|
+
in float vChairWeight;
|
|
440
575
|
out vec4 fragColor;
|
|
441
576
|
void main() {
|
|
442
577
|
if (vDim > 0.5) discard;
|
|
578
|
+
if (vChairWeight < 0.01) discard;
|
|
443
579
|
vec3 N = normalize(vNormalWorld);
|
|
444
580
|
vec3 V = normalize(-vPosView);
|
|
445
581
|
// The solids' rig, unchanged, so the chairs sit in the venue's light.
|
|
@@ -472,21 +608,27 @@ void main() {
|
|
|
472
608
|
// Occupants rise above the 0.92 m chair back, so their ramp uses their own
|
|
473
609
|
// height or every head would clamp to full brightness and float.
|
|
474
610
|
float ao = mix(0.58, 1.0, clamp(vHeight / (vOccupant > 0.5 ? 1.30 : 0.92), 0.0, 1.0));
|
|
475
|
-
vec3 base = tint * partShade * ao * (0.
|
|
611
|
+
vec3 base = tint * partShade * ao * (0.60 + 0.30 * hemi) + tint * key * 0.28 + tint * fill * 0.16;
|
|
476
612
|
float fres = pow(1.0 - max(dot(normalize(vNormalView), V), 0.0), 3.0);
|
|
477
|
-
// A
|
|
478
|
-
//
|
|
613
|
+
// A restrained furniture rim keeps the low-poly edges from looking outlined.
|
|
614
|
+
// Occupant silhouettes retain their existing stronger separation.
|
|
479
615
|
float sheen = clamp((1.0 - uRoughness) / 0.22, 0.15, 2.0);
|
|
480
|
-
base += vec3(0.26, 0.31, 0.38) * fres * 0.55 * mix(sheen, 1.0, vOccupant);
|
|
616
|
+
base += vec3(0.26, 0.31, 0.38) * fres * mix(0.24, 0.55, vOccupant) * mix(sheen, 1.0, vOccupant);
|
|
617
|
+
// Outside the entered section: quieter, still visible and pickable. Not the
|
|
618
|
+
// strong grey of a filtered seat, which means nothing to buy there.
|
|
619
|
+
if (vSectionFade > 0.5) {
|
|
620
|
+
float lum = dot(base, vec3(0.299, 0.587, 0.114));
|
|
621
|
+
base = mix(base, mix(vec3(lum), vec3(0.93), 0.35), 0.45);
|
|
622
|
+
}
|
|
481
623
|
fragColor = vec4(base, 1.0);
|
|
482
|
-
}`,
|
|
624
|
+
}`,lp=`#version 300 es
|
|
483
625
|
precision highp float;
|
|
484
626
|
in vec2 position;
|
|
485
627
|
out vec2 vUv;
|
|
486
628
|
void main() {
|
|
487
629
|
vUv = position * 0.5 + 0.5;
|
|
488
630
|
gl_Position = vec4(position, 0.999, 1.0);
|
|
489
|
-
}`,
|
|
631
|
+
}`,up=`#version 300 es
|
|
490
632
|
precision highp float;
|
|
491
633
|
in vec2 vUv;
|
|
492
634
|
uniform vec3 uTop;
|
|
@@ -495,13 +637,20 @@ out vec4 fragColor;
|
|
|
495
637
|
void main() {
|
|
496
638
|
vec3 col = mix(uBottom, uTop, vUv.y);
|
|
497
639
|
vec2 c = vUv - 0.5;
|
|
498
|
-
float vig = 1.0 - dot(c, c) * 0.
|
|
640
|
+
float vig = 1.0 - dot(c, c) * 0.16; // soft vignette
|
|
499
641
|
fragColor = vec4(col * vig, 1.0);
|
|
500
|
-
}`,
|
|
642
|
+
}`,mp=`#version 300 es
|
|
501
643
|
precision highp float;
|
|
502
|
-
in
|
|
644
|
+
in float surface;
|
|
645
|
+
in float iYaw;
|
|
646
|
+
in float iChairWidth;
|
|
647
|
+
in float iGlyph;
|
|
648
|
+
in vec3 position;
|
|
649
|
+
in vec3 normal;
|
|
650
|
+
in vec2 uv;
|
|
503
651
|
in vec3 iOffset;
|
|
504
652
|
in float iMaxRadius;
|
|
653
|
+
in float iHasChair;
|
|
505
654
|
in float iPhysicalSeat;
|
|
506
655
|
in float iFloor;
|
|
507
656
|
uniform mat4 modelViewMatrix;
|
|
@@ -518,23 +667,22 @@ out float vPhysicalSeat;
|
|
|
518
667
|
out float vDotWeight;
|
|
519
668
|
out float vHidden;
|
|
520
669
|
flat out vec3 vPick;
|
|
521
|
-
${
|
|
670
|
+
${po}
|
|
671
|
+
${bc}
|
|
522
672
|
void main() {
|
|
523
673
|
int id = gl_InstanceID + 1; // 0 reserved for no-hit
|
|
524
674
|
vPick = vec3(float(id & 255), float((id >> 8) & 255), float((id >> 16) & 255)) / 255.0;
|
|
525
675
|
vec4 mv = modelViewMatrix * vec4(iOffset, 1.0);
|
|
526
676
|
float depth = max(-mv.z, 0.001);
|
|
527
|
-
vDotWeight = 1.0 - chairWeight(
|
|
677
|
+
vDotWeight = 1.0 - iPhysicalSeat * iHasChair * chairWeight(length(mv.xyz));
|
|
528
678
|
float minR = uMinPixels * depth * uPixelToWorld;
|
|
529
679
|
float r = min(max(uSeatRadius * uSeatScale, minR), iMaxRadius);
|
|
530
|
-
mv
|
|
531
|
-
|
|
532
|
-
mv.xy += normalize(vec3(modelViewMatrix * vec4(0.0, 1.0, 0.0, 0.0))).xy * r;
|
|
533
|
-
vUv = position;
|
|
680
|
+
mv = seatSurface(position, r);
|
|
681
|
+
vUv = uv;
|
|
534
682
|
vPhysicalSeat = iPhysicalSeat;
|
|
535
683
|
vHidden = (uFocusFloor > -0.5 && abs(iFloor - uFocusFloor) > 0.5) ? 1.0 : 0.0;
|
|
536
684
|
gl_Position = projectionMatrix * mv;
|
|
537
|
-
}`,
|
|
685
|
+
}`,fp=`#version 300 es
|
|
538
686
|
precision highp float;
|
|
539
687
|
in vec2 vUv;
|
|
540
688
|
in float vPhysicalSeat;
|
|
@@ -542,13 +690,15 @@ in float vDotWeight;
|
|
|
542
690
|
in float vHidden;
|
|
543
691
|
flat in vec3 vPick;
|
|
544
692
|
out vec4 fragColor;
|
|
693
|
+
${yc}
|
|
545
694
|
void main() {
|
|
546
695
|
if (vHidden > 0.5) discard;
|
|
696
|
+
if (vDotWeight <= 0.99) discard;
|
|
547
697
|
if (vDotWeight <= 0.02) discard; // invisible dot cannot steal a chair tap
|
|
548
|
-
float d =
|
|
698
|
+
float d = seatSilhouette(vUv, vPhysicalSeat);
|
|
549
699
|
if (d > 1.0) discard; // hit-mask matches chair/bay shape
|
|
550
700
|
fragColor = vec4(vPick, 1.0);
|
|
551
|
-
}`,
|
|
701
|
+
}`,dp=`#version 300 es
|
|
552
702
|
precision highp float;
|
|
553
703
|
in vec3 position;
|
|
554
704
|
in float part;
|
|
@@ -568,10 +718,11 @@ uniform float uBackRake;
|
|
|
568
718
|
uniform float uBackBase;
|
|
569
719
|
uniform float uFocusFloor;
|
|
570
720
|
flat out vec3 vPick;
|
|
721
|
+
out float vChairWeight;
|
|
571
722
|
out float vHidden;
|
|
572
|
-
${
|
|
573
|
-
${
|
|
574
|
-
${
|
|
723
|
+
${po}
|
|
724
|
+
${pc}
|
|
725
|
+
${kr}
|
|
575
726
|
void main() {
|
|
576
727
|
int id = int(iPickIndex + 0.5); // already global index + 1
|
|
577
728
|
vPick = vec3(float(id & 255), float((id >> 8) & 255), float((id >> 16) & 255)) / 255.0;
|
|
@@ -579,7 +730,7 @@ void main() {
|
|
|
579
730
|
vec4 anchor = modelViewMatrix * vec4(iOffset, 1.0);
|
|
580
731
|
float viewDepth = -anchor.z;
|
|
581
732
|
float depth = max(viewDepth, 0.001);
|
|
582
|
-
float w = viewDepth > 0.05 ? chairWeight(
|
|
733
|
+
float w = viewDepth > 0.05 ? chairWeight(length(anchor.xyz)) : 0.0;
|
|
583
734
|
vec3 p = position;
|
|
584
735
|
float occupant = step(9.5, part);
|
|
585
736
|
float taken = step(0.0, iSeed);
|
|
@@ -600,19 +751,22 @@ void main() {
|
|
|
600
751
|
? max(p.y - uBackBase, 0.0) * uBackRake * glyphBackRake(iGlyph)
|
|
601
752
|
: 0.0;
|
|
602
753
|
p.z -= rake;
|
|
603
|
-
p *=
|
|
754
|
+
p *= step(0.01, w);
|
|
755
|
+
vChairWeight = w;
|
|
604
756
|
float c = cos(iYaw), s = sin(iYaw);
|
|
605
757
|
vec3 rp = vec3(p.x * c + p.z * s, p.y, -p.x * s + p.z * c);
|
|
606
758
|
gl_Position = projectionMatrix * modelViewMatrix * vec4(iOffset + rp, 1.0);
|
|
607
|
-
}`,
|
|
759
|
+
}`,hp=`#version 300 es
|
|
608
760
|
precision highp float;
|
|
609
761
|
flat in vec3 vPick;
|
|
610
762
|
in float vHidden;
|
|
763
|
+
in float vChairWeight;
|
|
611
764
|
out vec4 fragColor;
|
|
612
765
|
void main() {
|
|
613
766
|
if (vHidden > 0.5) discard;
|
|
767
|
+
if (vChairWeight < 0.01) discard;
|
|
614
768
|
fragColor = vec4(vPick, 1.0);
|
|
615
|
-
}`,
|
|
769
|
+
}`,pp=`#version 300 es
|
|
616
770
|
precision highp float;
|
|
617
771
|
in vec3 position;
|
|
618
772
|
in float floorIndex;
|
|
@@ -623,14 +777,23 @@ out float vHidden;
|
|
|
623
777
|
void main() {
|
|
624
778
|
vHidden = (uFocusFloor > -0.5 && abs(floorIndex - uFocusFloor) > 0.5) ? 1.0 : 0.0;
|
|
625
779
|
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
|
|
626
|
-
}`,
|
|
780
|
+
}`,bp=`#version 300 es
|
|
627
781
|
precision highp float;
|
|
628
782
|
in float vHidden;
|
|
629
783
|
out vec4 fragColor;
|
|
630
784
|
void main() {
|
|
631
785
|
if (vHidden > 0.5) discard;
|
|
632
786
|
fragColor = vec4(0.0, 0.0, 0.0, 1.0);
|
|
633
|
-
}`;function
|
|
787
|
+
}`;function gc(e){return new yt.Program(e,{vertex:mp,fragment:fp,transparent:!1,depthTest:!0,depthWrite:!0,cullFace:!1,uniforms:{uSeatRadius:{value:et},uSeatScale:{value:1},uMinPixels:{value:Ot},uPixelToWorld:{value:.002},uChairFull:{value:un},uChairNone:{value:Bt},uFocusFloor:{value:-1}}})}function xc(e){return new yt.Program(e,{vertex:dp,fragment:hp,transparent:!1,depthTest:!0,depthWrite:!0,cullFace:!1,uniforms:{uChairFull:{value:un},uChairNone:{value:Bt},uBackRake:{value:an},uBackBase:{value:ut},uFocusFloor:{value:-1}}})}function vc(e){return new yt.Program(e,{vertex:pp,fragment:bp,transparent:!1,depthTest:!0,depthWrite:!0,cullFace:!1,uniforms:{uFocusFloor:{value:-1}}})}function Mc(e,t=.78,n=[.63,.66,.65]){return new yt.Program(e,{vertex:op,fragment:rp,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:t}}})}function Sc(e){return new yt.Program(e,{vertex:ip,fragment:ap,transparent:!0,depthTest:!0,depthWrite:!0,cullFace:!1,uniforms:{uKeyDir:{value:new Float32Array([-.48,.78,.4])},uSeatRadius:{value:et},uSeatScale:{value:1},uMinPixels:{value:Ot},uPixelToWorld:{value:.002},uSeatFade:{value:0},uSeatDetail:{value:0},uFocusFloor:{value:-1},uFocusSection:{value:-1},uFadeColor:{value:new Float32Array([.32,.37,.43])},uChairFull:{value:un},uChairNone:{value:Bt}}})}function wc(e,t=.78){return new yt.Program(e,{vertex:sp,fragment:cp,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:un},uChairNone:{value:Bt},uBackRake:{value:an},uBackBase:{value:ut},uFocusFloor:{value:-1},uFocusSection:{value:-1},uRoughness:{value:t}}})}function Pc(e,t,n){return new yt.Program(e,{vertex:lp,fragment:up,depthTest:!1,depthWrite:!1,cullFace:!1,uniforms:{uTop:{value:new Float32Array(t)},uBottom:{value:new Float32Array(n)}}})}var He=require("ogl");function Ic(e,t,n){let r=Math.max(3,n.radius*1.04),[i,a,s]=n.center,c=new He.Camera(e,{left:-r,right:r,bottom:-r,top:r,near:.1,far:r*6});c.position.set(i-r*1.44,a+r*2.34,s+r*1.2),c.lookAt([i,a,s]);let u=new He.RenderTarget(e,{width:1024,height:1024,depthTexture:!0,minFilter:e.NEAREST,magFilter:e.NEAREST}),l=new He.Program(e,{cullFace:!1,vertex:`#version 300 es
|
|
788
|
+
in vec3 position;
|
|
789
|
+
uniform mat4 modelViewMatrix;
|
|
790
|
+
uniform mat4 projectionMatrix;
|
|
791
|
+
void main() { gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); }`,fragment:`#version 300 es
|
|
792
|
+
precision highp float;
|
|
793
|
+
out vec4 fragColor;
|
|
794
|
+
void main() {
|
|
795
|
+
fragColor = vec4(1.0);
|
|
796
|
+
}`}),m=new He.Transform,h=new He.Mesh(e,{geometry:t,program:l});h.frustumCulled=!1,h.setParent(m);let d=e.getParameter(e.COLOR_CLEAR_VALUE),f=e.isEnabled(e.DITHER);try{e.disable(e.DITHER),e.clearColor(1,1,1,1),e.renderer.render({scene:m,camera:c,target:u})}finally{f&&e.enable(e.DITHER),e.clearColor(d[0],d[1],d[2],d[3]),l.remove()}let p=new He.Mat4().multiply(c.projectionMatrix,c.viewMatrix);return{texture:u.depthTexture,matrix:p,dispose(){for(let b of u.textures)e.deleteTexture(b.texture);e.deleteTexture(u.depthTexture.texture),e.deleteFramebuffer(u.buffer),u.depthBuffer&&e.deleteRenderbuffer(u.depthBuffer)}}}var yp=.65,gp=new Set(["dimmed","sold"]),xp=new Set(["dimmed","sold","held"]);function Cc(e,t,n){let o=new Set,r=!1,i=Ae.indexOf("dimmed"),a=!1;for(let c=0;c<n.length;c+=1)if(n[c]===i){a=!0;break}let s=a?xp:gp;for(let c of e){let u=t.get(c.sectionId);if(!u||!u.length){o.add(c.sectionId);continue}let l=!1;for(let m of u){let h=Ae[n[m]]??"available";if(!s.has(h)){l=!0;break}}l?o.add(c.sectionId):r=!0}return{lit:o,anyUnlit:r}}function Rc(e,t,n,o,r,i){let a=[];for(let s of e){let c=r===null||r.has(s.sectionId);if(o.get(s.sectionId)===c)continue;o.set(s.sectionId,c);let u=(s.start+s.count)*3;for(let l=s.start*3;l<u;l++)t[l]=c?n[l]:n[l]+(i[l%3]-n[l])*yp;a.push(s)}return a}function Ac(e,t,n,o,r,i){for(let a=n;a<n+o;a++){let c=i&&t[a]===0?null:r[t[a]]??r[0];e[a*3]=c?c[0]:i[a*3],e[a*3+1]=c?c[1]:i[a*3+1],e[a*3+2]=c?c[2]:i[a*3+2]}}var vp=new Float32Array([-1,-1,3,-1,-1,3]);function Ec(e,t){let n=new ve.Transform,o=new ve.Transform,r=new ve.Geometry(e,{position:{size:2,data:vp}}),i=Pc(e,t.theme.background.top,t.theme.background.bottom),a=new ve.Mesh(e,{geometry:r,program:i});a.frustumCulled=!1,a.setParent(o);let s=new ve.Geometry(e,{position:{size:3,data:t.solids.position},normal:{size:3,data:t.solids.normal},color:{size:3,data:t.solids.color},floorIndex:{size:1,data:t.solids.floor},materialIndex:{size:1,data:t.solids.material}}),c=Ic(e,s,t.renderBounds),u=Mc(e,t.theme.materials.roughness,t.theme.structure.tierTop);u.uniforms.tVenueShadow={value:c.texture},u.uniforms.uShadowMatrix={value:c.matrix};let l=new ve.Mesh(e,{geometry:s,program:u});l.frustumCulled=!1,l.setParent(n);let m=Sc(e),h=new Float32Array(t.seats.count*3),d=Ae.map(q=>t.theme.seatStates[q]),f=t.seats.iCategory.slice();for(let q=0;q<t.seats.count;q++){if(t.seats.iPhysicalSeat[q]<.5)continue;let oe=t.theme.materials.seat??li([f[q*3],f[q*3+1],f[q*3+2]]);f.set(oe,q*3)}Ac(h,t.seats.iState,0,t.seats.count,d,f);let p=ri(),b=new Uint8Array(t.seats.count),y=new ve.Geometry(e,{position:{size:3,data:p.position},normal:{size:3,data:p.normal},uv:{size:2,data:p.uv},index:{size:1,data:p.index},surface:{size:1,data:p.surface},iYaw:{size:1,data:t.seats.iYaw,instanced:1},iChairWidth:{size:1,data:t.seats.iChairWidth,instanced:1},iGlyph:{size:1,data:t.seats.iGlyph,instanced:1},iOffset:{size:3,data:t.seats.iPosition,instanced:1},iColor:{size:3,data:h,instanced:1},iMaxRadius:{size:1,data:t.seats.iMaxRadius,instanced:1},iHasChair:{size:1,data:b,type:e.UNSIGNED_BYTE,usage:e.DYNAMIC_DRAW,instanced:1},iPhysicalSeat:{size:1,data:t.seats.iPhysicalSeat,instanced:1},iRing:{size:3,data:t.seats.iRing,instanced:1},iFloor:{size:1,data:t.seats.iFloor,instanced:1},iSection:{size:1,data:t.seats.iSection,instanced:1}}),g=new ve.Mesh(e,{geometry:y,program:m});g.frustumCulled=!1,t.seats.count>0&&g.setParent(n);let x=y.attributes.iColor,w=t.solids.color.slice(),I=t.theme.structure.ground,v=new Map(t.sectionSolidRanges.map(q=>[q.sectionId,!0])),P=ti(),S=wc(e,t.theme.materials.roughness),M=Bn,C=new Float32Array(M*3),T=new Float32Array(M*3),N=new Float32Array(M),D=new Float32Array(M),R=new Float32Array(M),A=new Float32Array(M*3),L=new Float32Array(M),O=new Float32Array(M),_=new Float32Array(M),k=new Float32Array(M),V=new Float32Array(M),F=new ve.Geometry(e,{position:{size:3,data:P.position},normal:{size:3,data:P.normal},part:{size:1,data:P.part},index:{data:P.index},iOffset:{size:3,data:C,instanced:1},iColor:{size:3,data:T,instanced:1},iRadius:{size:1,data:N,instanced:1},iYaw:{size:1,data:D,instanced:1},iGlyph:{size:1,data:R,instanced:1},iRing:{size:3,data:A,instanced:1},iFloor:{size:1,data:L,instanced:1},iSection:{size:1,data:O,instanced:1},iPhysicalSeat:{size:1,data:_,instanced:1},iSeed:{size:1,data:V,instanced:1},iPickIndex:{size:1,data:k,instanced:1}}),B=new ve.Mesh(e,{geometry:F,program:S});B.frustumCulled=!1;let z=0,U=!1,G=!1,H=null,K=null,Q=null,Y=new Int32Array(0),W=()=>{let q=t.seats;for(let oe=0;oe<z;oe++){let te=Y[oe];V[oe]=Ti(q.iState[te],te),T[oe*3]=h[te*3],T[oe*3+1]=h[te*3+1],T[oe*3+2]=h[te*3+2]}F.attributes.iColor.needsUpdate=!0,F.attributes.iSeed.needsUpdate=!0},Z={main:n,background:o,seatProgram:m,solidProgram:u,chairProgram:S,seatGeometry:y,chairGeometry:F,solidGeometry:s,drawCalls:3,setNearSeats(q,oe){let te=Math.min(oe,M,q.length);if(hc(b,q,te),y.attributes.iHasChair.needsUpdate=!0,Y=q,z=te,te===0){B.parent&&B.setParent(null),F.instancedCount=0,Z.drawCalls=3+(U?1:0);return}let $=t.seats;for(let ne=0;ne<te;ne++){let he=q[ne];C[ne*3]=$.iPosition[he*3],C[ne*3+1]=$.iPosition[he*3+1],C[ne*3+2]=$.iPosition[he*3+2],N[ne]=$.iChairWidth[he],D[ne]=$.iYaw[he],R[ne]=$.iGlyph[he],A[ne*3]=$.iRing[he*3],A[ne*3+1]=$.iRing[he*3+1],A[ne*3+2]=$.iRing[he*3+2],L[ne]=$.iFloor[he],O[ne]=$.iSection[he],_[ne]=$.iPhysicalSeat[he],k[ne]=he+1}W(),F.attributes.iOffset.needsUpdate=!0,F.attributes.iRadius.needsUpdate=!0,F.attributes.iYaw.needsUpdate=!0,F.attributes.iGlyph.needsUpdate=!0,F.attributes.iRing.needsUpdate=!0,F.attributes.iFloor.needsUpdate=!0,F.attributes.iSection.needsUpdate=!0,F.attributes.iPhysicalSeat.needsUpdate=!0,F.attributes.iSeed.needsUpdate=!0,F.attributes.iPickIndex.needsUpdate=!0,F.instancedCount=te,B.parent||B.setParent(n),Z.drawCalls=4+(U?1:0)},nearSeatCount(){return z},setSectionShellLit(q){u.uniforms.uSectionFilter.value=q===null?0:1;let oe=Rc(t.sectionSolidRanges,t.solids.color,w,v,q,I);if(!oe.length)return;let te=s.attributes.color,$=te.buffer;if(!$){te.needsUpdate=!0;return}e.bindBuffer(e.ARRAY_BUFFER,$);for(let ne of oe){let he=t.solids.color.subarray(ne.start*3,(ne.start+ne.count)*3);e.bufferSubData(e.ARRAY_BUFFER,ne.start*3*Float32Array.BYTES_PER_ELEMENT,he)}},uploadSeatStateRuns(q){if(!q.length)return;z&&W();for(let te of q)Ac(h,t.seats.iState,te.start,te.length,d,f);let oe=x.buffer;if(!oe){x.needsUpdate=!0;return}e.bindBuffer(e.ARRAY_BUFFER,oe);for(let te of q){let $=h.subarray(te.start*3,(te.start+te.length)*3);e.bufferSubData(e.ARRAY_BUFFER,te.start*3*Float32Array.BYTES_PER_ELEMENT,$)}},dispose(){G=!0,c.dispose(),r.remove(),i.remove(),s.remove(),u.remove(),y.remove(),m.remove(),F.remove(),S.remove(),H?.remove(),K?.remove(),Q?.texture&&e.deleteTexture(Q.texture)}},ee=t.productionElements.find(q=>q.contentImageUrl&&q.contentPlane);if(ee?.contentImageUrl&&ee.contentPlane?.length===4&&typeof Image<"u"){let q=new Image;q.crossOrigin="anonymous",q.onload=()=>{if(G)return;let oe=ee.contentPlane;H=new ve.Geometry(e,{position:{size:3,data:new Float32Array(oe.flat())},uv:{size:2,data:new Float32Array([0,1,1,1,0,0,1,0])},floorIndex:{size:1,data:new Float32Array(4).fill(ee.floorIndex)},index:{data:new Uint16Array([0,1,2,2,1,3])}}),Q=new ve.Texture(e,{image:q,generateMipmaps:!0,wrapS:e.CLAMP_TO_EDGE,wrapT:e.CLAMP_TO_EDGE,flipY:!1}),K=new ve.Program(e,{vertex:`#version 300 es
|
|
634
797
|
precision highp float;
|
|
635
798
|
in vec3 position; in vec2 uv; in float floorIndex;
|
|
636
799
|
uniform mat4 modelViewMatrix; uniform mat4 projectionMatrix; uniform float uFocusFloor;
|
|
@@ -638,4 +801,4 @@ void main() {
|
|
|
638
801
|
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
|
|
639
802
|
precision highp float;
|
|
640
803
|
in vec2 vUv; in float vDim; uniform sampler2D uImage; out vec4 fragColor;
|
|
641
|
-
void main(){ if(vDim>0.5) discard; vec4 c=texture(uImage,vUv); if(c.a<0.01) discard; fragColor=c; }`,uniforms:{uImage:{value:H},uFocusFloor:{value:-1}},transparent:!1,depthTest:!0,depthWrite:!0,cullFace:!1});let q=new ce.Mesh(e,{geometry:I,program:F});q.frustumCulled=!1,q.setParent(n),V.screenProgram=F,P=!0,V.drawCalls=3+(_?1:0)+1},X.src=W.contentImageUrl}return V}var _e=require("ogl");function Pm(e,t,n){let r=e+(t<<8)+(n<<16);return r===0?-1:r-1}function Sa(e,t,n,r,o,i){let a=-1,s=1/0;for(let c=0;c<n;c++)for(let u=0;u<t;u++){let d=(c*t+u)*4,f=Pm(e[d],e[d+1],e[d+2]);if(f<0||f>=i)continue;let m=u-r,l=c-o,p=m*m+l*l;p<s&&(s=p,a=f)}return a}function Ma(e,t,n,r,o,i){let a=e-n.left,s=t-n.top,c=Math.round(a*r),u=Math.round((n.height-s)*r);return{x:Math.max(0,Math.min(o-1,c)),y:Math.max(0,Math.min(i-1,u))}}var Cm=["uSeatRadius","uSeatScale","uMinPixels","uPixelToWorld"],Cn=class{constructor(t,n,r,o,i){this.seatScene=new _e.Transform;this.chairScene=new _e.Transform;this.solidScene=new _e.Transform;this.target=null;this.restoreClear=[0,0,0];this.renderer=t,this.gl=t.gl,this.maxIndex=i,this.seatProg=ua(this.gl),this.chairProg=ma(this.gl),this.depthProg=da(this.gl);let a=new _e.Mesh(this.gl,{geometry:n,program:this.seatProg});a.frustumCulled=!1,a.setParent(this.seatScene);let s=new _e.Mesh(this.gl,{geometry:r,program:this.chairProg});s.frustumCulled=!1,s.setParent(this.chairScene);let c=new _e.Mesh(this.gl,{geometry:o,program:this.depthProg});c.frustumCulled=!1,c.setParent(this.solidScene)}setRestoreClear(t){this.restoreClear=[t[0],t[1],t[2]]}syncFromSeatProgram(t){for(let r of Cm)this.seatProg.uniforms[r].value=t.uniforms[r].value;let n=t.uniforms.uFocusFloor.value;this.seatProg.uniforms.uFocusFloor.value=n,this.chairProg.uniforms.uFocusFloor.value=n,this.depthProg.uniforms.uFocusFloor.value=n}ensureTarget(){let t=this.gl.drawingBufferWidth,n=this.gl.drawingBufferHeight;return this.target&&(this.target.width!==t||this.target.height!==n)&&this.destroyTarget(),this.target||(this.target=new _e.RenderTarget(this.gl,{width:t,height:n,depth:!0})),this.target}destroyTarget(){if(!this.target)return;let t=this.gl;this.target.buffer&&t.deleteFramebuffer(this.target.buffer);for(let n of this.target.textures??[])n.texture&&t.deleteTexture(n.texture);this.target.depthBuffer&&t.deleteRenderbuffer(this.target.depthBuffer),this.target=null}pick(t,n,r,o){let i=this.gl,a=this.ensureTarget(),s=i.drawingBufferWidth,c=i.drawingBufferHeight,u=Math.max(0,n-o),d=Math.max(0,r-o),f=Math.max(1,Math.min(s,n+o+1)-u),m=Math.max(1,Math.min(c,r+o+1)-d);i.enable(i.SCISSOR_TEST),i.scissor(u,d,f,m);let[l,p,h]=this.restoreClear;i.clearColor(0,0,0,1),this.renderer.render({scene:this.solidScene,camera:t,target:a,clear:!0}),this.renderer.render({scene:this.seatScene,camera:t,target:a,clear:!1}),this.renderer.render({scene:this.chairScene,camera:t,target:a,clear:!1}),i.clearColor(l,p,h,1),i.disable(i.SCISSOR_TEST);let b=new Uint8Array(f*m*4);return this.renderer.bindFramebuffer(a),i.readPixels(u,d,f,m,i.RGBA,i.UNSIGNED_BYTE,b),this.renderer.bindFramebuffer(),Sa(b,f,m,n-u,r-d,this.maxIndex)}dispose(){this.destroyTarget(),this.seatProg.remove(),this.chairProg.remove(),this.depthProg.remove()}};function wa(e,t){let n=[];for(let r of t)e.has(r.seatId)?e.set(r.seatId,It(r.state)):n.push(r);return n}function Pa(e,t,n){let r=new Set;for(let a of t)(e.has(a)||n(a)!==void 0)&&r.add(a);let o=new Map(e),i=[];for(let[a,s]of e)r.has(a)||(i.push({seatId:a,state:pe[s]??"available"}),o.delete(a));for(let a of r){if(o.has(a))continue;let s=n(a);s!==void 0&&(o.set(a,s),i.push({seatId:a,state:"selected"}))}return{updates:i,next:o}}var We=require("ogl");function Am(e,t){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]}function Ca(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]}function Rm(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function Aa(e){let t=Math.hypot(e[0],e[1],e[2]);return t>1e-6?[e[0]/t,e[1]/t,e[2]/t]:[0,0,0]}function Io(e){let t=Math.max(0,Math.min(1,e));return t*t*t*(t*(t*6-15)+10)}function To(e,t){return Math.max(0,Math.min(1,e+t))}function Ra(e,t){let n=e.length;if(n===0)return[0,0,0];if(n===1)return[...e[0]];let r=Math.max(0,Math.min(1,t)),o=n-1,i=Math.floor(r*o);i>=o&&(i=o-1);let a=r*o-i,s=e[Math.max(0,i-1)],c=e[i],u=e[i+1],d=e[Math.min(n-1,i+2)],f=a*a,m=f*a,l=[0,0,0];for(let p=0;p<3;p++)l[p]=.5*(2*c[p]+(-s[p]+u[p])*a+(2*s[p]-5*c[p]+4*u[p]-d[p])*f+(-s[p]+3*c[p]-3*u[p]+d[p])*m);return l}function _o(e,t,n,r,o){let i=Aa(Am(t,n));i[0]===0&&i[1]===0&&i[2]===0&&(i=[0,0,1]);let a=Ca(Ca(t,Rm(i,2.5)),[0,1.5,0]),s=[t[0]-r[0],0,t[2]-r[2]],c=Aa(s);c[0]===0&&c[2]===0&&(c=[i[0],0,i[2]]);let u=Math.max(1,o),d=[r[0]+c[0]*u*1.3,r[1]+u*.75,r[2]+c[2]*u*1.3];return{waypoints:[e,d,a],finalPos:a}}function Lo(e,t,n=35,r=28){let o=Io(t),i=Ra(e,o),a=Io(Math.max(0,Math.min(1,(t-.66)/.34)));return{pos:i,fov:n+(r-n)*a,eased:o}}function _a(e,t,n){let r=e.position.clone(),o=new We.Quat().copy(e.quaternion);e.position.set(t[0],t[1],t[2]),e.lookAt(new We.Vec3(n[0],n[1],n[2]));let i=new We.Quat().copy(e.quaternion);return e.position.copy(r),e.quaternion.copy(o),i}var An=class{constructor(t){this.active=!1;this.waypoints=[];this.startQuat=new We.Quat;this.endQuat=new We.Quat;this.outQuat=new We.Quat;this.startTime=0;this.duration=2500;this.endFov=28;this.resolveFn=null;this.camera=t}start(t,n,r,o=2500,i=28){return this.settle(),this.waypoints=t,this.startQuat.copy(n),this.endQuat.copy(r),this.duration=o,this.endFov=i,this.startTime=performance.now(),this.active=!0,new Promise(a=>{this.resolveFn=a})}update(t){if(!this.active)return!1;let n=Math.min(1,(t-this.startTime)/this.duration),{pos:r,fov:o,eased:i}=Lo(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,To(i,.15)),this.camera.quaternion.copy(this.outQuat),this.camera.fov=o,this.camera.updateProjectionMatrix(),n>=1?(this.settle(),!1):!0}cancel(){this.settle()}settle(){this.active=!1;let t=this.resolveFn;this.resolveFn=null,t&&t()}};var La=to,Em=.12,Im=.25,Tm=1.5;function ka(e,t,n=0,r,o){let i=[t.x*z,n+Tm,t.y*z],a=o?[o[0],o[1],o[2]]:i,s=e[1],c=Number.isFinite(s)?s+La:Number.isFinite(r)?n+r:n+La,u=i[0]-e[0],d=i[2]-e[2],f=Math.hypot(u,d),m=f>.001?Math.min(Em,f*Im):0,l=f>.001?u/f:0,p=f>.001?d/f:0;return{eye:[e[0]+l*m,c,e[2]+p*m],focal:a}}var st=Math.PI/180,_m=45,Fa=80,Rn=70,Lm=1,km=.99;function Fm(e,t){if(!(e<Lm))return Fa;if(!(Number.isFinite(t)&&t>0))return Rn;let n=2*Math.atan(t/(2*En*km)/Math.max(.05,e))/st;return Math.max(Rn,Math.min(Fa,n))}var Dm=.25,En=1,Om=.25,Vm=12*st,Bm=.2,Nm=1.5,Da=.8,Oa=6,Ga=1.9,Gm=2/3,zm=.12,Um=.9,Hm=1.2,jm=2,za=.05,Ym=6;function Ua(e,t,n=0){if(!e.length)return{min:[t[0]-6,n,t[2]-6],max:[t[0]+6,Math.max(n+Da,t[1]),t[2]+6]};let r=1/0,o=-1/0,i=1/0,a=-1/0,s=n;for(let p of e)r=Math.min(r,p.cx-p.halfX),o=Math.max(o,p.cx+p.halfX),i=Math.min(i,p.cz-p.halfZ),a=Math.max(a,p.cz+p.halfZ),s=Math.max(s,p.y);let c=o-r,u=a-i,d=Math.max(c,Math.min(u,Oa))/2,f=Math.max(u,Math.min(c,Oa))/2,m=(r+o)/2,l=(i+a)/2;return{min:[m-d,n,l-f],max:[m+d,Math.max(n+Da,s),l+f]}}function Xm(e){return{min:[e.min[0],e.min[1],e.min[2]],max:[e.max[0],e.max[1]+Ga,e.max[2]]}}function ko(e){let t=e.max[1];return[(e.min[0]+e.max[0])/2,Math.max(e.min[1]+Nm,t+Bm,t+Ga*Gm),(e.min[2]+e.max[2])/2]}function Ha(e,t){let n=e[0]-t[0],r=e[2]-t[2],o=Math.hypot(n,r);return o<.001?{x:0,z:1}:{x:n/o,z:r/o}}function Va(e,t,n){let r=t[0]-e[0],o=t[1]-e[1],i=t[2]-e[2],a=Math.hypot(r,o,i)||1;r/=a,o/=a,i/=a;let s=-i,c=r,u=Math.hypot(s,c);if(u<1e-6)return 1/0;s/=u,c/=u;let d=1/0,f=-1/0;for(let m=0;m<8;m++){let l=(m&1?n.max[0]:n.min[0])-e[0],p=(m&2?n.max[1]:n.min[1])-e[1],h=(m&4?n.max[2]:n.min[2])-e[2],b=Math.max(za,l*r+p*o+h*i),y=(l*s+h*c)/b;y<d&&(d=y),y>f&&(f=y)}return f-d}function Ba(e,t,n){let r=t[0]-e[0],o=t[1]-e[1],i=t[2]-e[2],a=Math.hypot(r,o,i)||1;r/=a,o/=a,i/=a;let s=-i,c=r,u=Math.hypot(s,c);if(u<1e-6)return 1/0;s/=u,c/=u;let d=-c*o,f=c*r-s*i,m=s*o,l=1/0,p=-1/0;for(let h=0;h<8;h++){let b=(h&1?n.max[0]:n.min[0])-e[0],y=(h&2?n.max[1]:n.min[1])-e[1],v=(h&4?n.max[2]:n.min[2])-e[2],S=Math.max(za,b*r+y*o+v*i),M=(b*d+y*f+v*m)/S;M<l&&(l=M),M>p&&(p=M)}return p-l}function In(e,t){return Math.tan(e*st/2)*Math.max(.05,t)}function Na(e,t,n){let r=Fm(n,e),o=c=>Math.max(_m,Math.min(r,c)),i=c=>2*Math.atan(c)/st,a=Number.isFinite(e)&&e>0?o(i(e/(2*Dm)/Math.max(.05,n))):r;if(!(Number.isFinite(t)&&t>0))return a;let s=Math.min(a,o(i(t/(2*zm))));return e/(2*In(s,n))>En?a:s}function ja(e,t,n){let r=ko(t),o=[e[0],e[1],e[2]],i=0,a=0,s=l=>{if(!(l>0))return;let p=Ha(o,r);o[0]+=p.x*l,o[2]+=p.z*l,a+=l},c=t.max[1]+Om-o[1];c>0&&(o[1]+=c,i=c,s(c/Math.tan(Vm)));let u=Xm(t),d=Va(o,r,t),f=Na(d,Ba(o,r,u),n),m=d/(2*In(f,n));for(let l=0;l<Ym&&m>En;l++){let p=Math.max(1,Math.hypot(o[0]-r[0],o[2]-r[2])),h=Number.isFinite(m)?m/En:2;s(Math.min(60,p*(Math.min(4,h)-1)+.5)),d=Va(o,r,t),f=Na(d,Ba(o,r,u),n),m=d/(2*In(f,n))}return{eye:o,focal:r,fov:f,raisedM:i,pulledBackM:a,stageFrameWidth:m}}function Wm(e,t,n){let r=Math.tan(t*st/2),o=In(t,n);return Math.max(1,e/Math.max(.05,Math.min(r,o)))}function Ya(e,t){let{aspect:n,venue:r}=t,o=e.focal,i=Ha(e.eye,o),a=m=>(m[0]-o[0])*i.x+(m[2]-o[2])*i.z,s=[{name:"seat",eye:e.eye,focal:o,fov:e.fov}],c=jm*(t.rowDepthM??Um);s.push({name:"row",eye:[e.eye[0]+i.x*c,e.eye[1]+Hm,e.eye[2]+i.z*c],focal:o,fov:e.fov});let u=(m,l,p,h)=>{let b=Wm(p,e.fov,n)*1.08,y=b*Math.sin(h*st),v=b*Math.cos(h*st);return{name:m,eye:[l[0]+i.x*v,l[1]+y,l[2]+i.z*v],focal:l,fov:e.fov}};t.section&&t.section.radius>0&&s.push(u("section",t.section.center,t.section.radius,14)),s.push(u("venue",r.center,Math.max(1,r.radius),26));let d=[],f=-1/0;for(let m of s){let l=a(m.eye);d.length&&l<=f+.5||(d.push(m),f=l)}return d}var $a=require("ogl"),jt=Math.PI/180,Xa=320,Wa=70*jt,Km=32*jt,qm=24*jt,Ka=.0026,$m=.22,Qm=.006,Zm=180,Jm=4,Se=(e,t,n)=>Math.max(t,Math.min(n,e)),qa=e=>e<.5?4*e*e*e:1-Math.pow(-2*e+2,3)/2;function Qa(e){let{canvas:t,camera:n}=e,r=[],o=!1,i=0,a=0,s=0,c=0,u=0,d=0,f=!1,m=[0,0],l=0,p=!1,h=null,b=null,y=new Map,v=!1,S=0,M=0,R=0,x=0,g=()=>o&&r.length?r[Se(Math.round(i),0,r.length-1)].name:null,C=()=>{let P=g();P!==h&&(h=P,e.onStopChange?.(P))},E=()=>{if(!o||!r.length)return;let P=r[Se(Math.floor(i),0,r.length-1)],O=r[Se(Math.ceil(i),0,r.length-1)],I=Se(i-Math.floor(i),0,1),F=(Me,Ae)=>Me+(Ae-Me)*I,H=[F(P.eye[0],O.eye[0]),F(P.eye[1],O.eye[1]),F(P.eye[2],O.eye[2])],j=[F(P.focal[0],O.focal[0]),F(P.focal[1],O.focal[1]),F(P.focal[2],O.focal[2])],G=j[0]-H[0],V=j[1]-H[1],W=j[2]-H[2],X=Math.hypot(G,V,W)||1,Q=Math.atan2(G,W),q=Math.asin(Se(V/X,-1,1)),K=Q+a,Z=Se(q+s,-80*jt,80*jt),te=Math.cos(Z)*X;G=Math.sin(K)*te,V=Math.sin(Z)*X,W=Math.cos(K)*te,n.position.set(H[0],H[1],H[2]),n.fov=F(P.fov,O.fov),n.updateProjectionMatrix(),n.lookAt(new $a.Vec3(H[0]+G,H[1]+V,H[2]+W)),e.onApplied?.()},D=()=>{if(!o||!r.length)return;let P=Se(Math.round(i),0,r.length-1);if(e.reducedMotion()){f=!1,i=P,E(),C(),e.requestRender();return}if(Math.abs(P-i)<.001){f=!1,C();return}c=i,u=P,d=performance.now(),f=!0,e.requestRender()},B=P=>{!o||r.length<2||(f=!1,i=Se(i+P,0,r.length-1),E(),C(),e.requestRender())},L=(P,O)=>{o&&(f=!1,p=!1,a=Se(a-P*Ka,-Wa,Wa),s=Se(s-O*Ka,-qm,Km),E(),e.requestRender())},A=P=>{o&&(y.set(P.pointerId,{x:P.clientX,y:P.clientY}),y.size===1?(v=!0,x=0,S=P.clientX,M=P.clientY):y.size===2&&(v=!1,R=k()))},k=()=>{let P=[...y.values()];return P.length<2?0:Math.hypot(P[0].x-P[1].x,P[0].y-P[1].y)},N=P=>{if(!o||!y.has(P.pointerId))return;if(y.set(P.pointerId,{x:P.clientX,y:P.clientY}),y.size>=2){let F=k();R>0&&B((R-F)*Qm),R=F;return}if(!v)return;let O=P.clientX-S,I=P.clientY-M;S=P.clientX,M=P.clientY,x+=Math.abs(O)+Math.abs(I),!(x<=Jm)&&L(O,I)},w=P=>{y.delete(P.pointerId)&&(y.size<2&&(R=0),y.size===0&&(v=!1,D()))},T=P=>{if(!o)return;P.preventDefault();let O=P.deltaMode===1?16:P.deltaMode===2?100:1,I=Se(P.deltaY*O/100,-2,2);B(I*$m),b&&clearTimeout(b),b=setTimeout(()=>{b=null,D()},Zm)},_=()=>{o&&(o=!1,f=!1,p=!1,r=[],y.clear(),v=!1,b&&(clearTimeout(b),b=null),h!==null&&(h=null,e.onStopChange?.(null)))};return t.addEventListener("pointerdown",A),t.addEventListener("pointermove",N),t.addEventListener("pointerup",w),t.addEventListener("pointercancel",w),t.addEventListener("wheel",T,{passive:!1}),{get active(){return o},enter(P){if(P.length<2){_();return}r=P,o=!0,i=0,a=0,s=0,f=!1,p=!1,h=null,E(),C(),e.requestRender()},exit:_,recentre(){return o?Math.abs(a)<1e-4&&Math.abs(s)<1e-4?!0:e.reducedMotion()?(p=!1,a=0,s=0,E(),e.requestRender(),!0):(m=[a,s],l=performance.now(),p=!0,e.requestRender(),!0):!1},update(P){if(!o)return!1;let O=!1;if(p){let I=Se((P-l)/Xa,0,1),F=1-qa(I);a=m[0]*F,s=m[1]*F,I>=1?(p=!1,a=0,s=0):O=!0}if(f){let I=Se((P-d)/Xa,0,1);i=c+(u-c)*qa(I),I>=1?(f=!1,i=u,C()):O=!0}return E(),O},currentStop:g,dispose(){_(),t.removeEventListener("pointerdown",A),t.removeEventListener("pointermove",N),t.removeEventListener("pointerup",w),t.removeEventListener("pointercancel",w),t.removeEventListener("wheel",T)}}}function Za(e){return e.flying?"cinematic":e.panoramaMounted?"panorama":e.seatViewActive?"seatView":"orbit"}var Vo=null;function ms(){return Vo??=Promise.resolve().then(()=>(us(),ls)).catch(e=>{throw Vo=null,e}),Vo}var ds=()=>typeof performance<"u"&&performance.now?performance.now():Date.now(),On=class{constructor(t){this.orbitLatched=!1;this.panoramaOpenedAt=0;this.cb=t}emit(t,n){if(this.cb)try{this.cb(t,n)}catch{}}opened(t,n,r,o){this.emit("3d_opened",{seats:t,hasHeights:n,...r===void 0?{}:{buildMs:Math.round(r)},...o===void 0?{}:{prepSource:o}})}orbitEngaged(){this.orbitLatched||(this.orbitLatched=!0,this.emit("3d_orbit_engaged"))}seatPicked(t,n){this.emit("3d_seat_picked",{seatId:t,sectionId:n})}cinematicPlayed(t){this.emit("3d_cinematic_played",{durationMs:t,reducedMotion:!1})}cinematicSkipped(){this.emit("3d_cinematic_skipped",{reducedMotion:!0})}cinematicCancelled(){this.emit("3d_cinematic_cancelled")}panoramaOpened(){this.panoramaOpenedAt=ds(),this.emit("3d_panorama_opened")}panoramaClosed(){let t=this.panoramaOpenedAt?Math.round(ds()-this.panoramaOpenedAt):0;this.panoramaOpenedAt=0,this.emit("3d_panorama_closed",{viewMs:t})}panoramaFailed(t,n){this.emit("3d_panorama_failed",{seatId:t,phase:n})}panoramaFallback(t){this.emit("3d_panorama_fallback",{seatId:t})}contextLost(){this.emit("3d_context_lost")}contextRestored(){this.emit("3d_context_restored")}};function fs(e){let t=e.style.position;return getComputedStyle(e).position!=="static"?()=>{}:(e.style.position="relative",()=>{e.style.position==="relative"&&(e.style.position=t)})}function ps(e){let{container:t,model:n,opts:r,expandedSeatById:o,seatIdsByRow:i,isNarrow:a}=e,s=null,c=()=>{if(!s)return;let f=a();Object.assign(s.style,f?{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:(f,m,l=!1)=>{if(u(),e.isDisposed())return null;let p=document.createElement("div");p.setAttribute("role","group"),Object.assign(p.style,{position:"absolute",display:"flex",flexDirection:"column",alignItems:"center",gap:"6px",zIndex:"4"});let h=r.chrome?.caption!==!1,b=r.chrome?.seatStepper!==!1;if(!h&&!b)return null;let y=o.get(f),v=y?.sectionId?n.sections.find(D=>D.id===y.sectionId):void 0,S=y?.label??f;p.setAttribute("aria-label",`Explore views near ${v?.label?`${v.label}, `:""}seat ${S}`);let M=document.createElement("span");M.textContent=r.seatViewCaption?.(f)??["Live 3D seat view",v?.label,S].filter(Boolean).join(" \xB7 "),Object.assign(M.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)"}),h&&p.appendChild(M);let R=document.createElement("div");Object.assign(R.style,{display:"flex",alignItems:"center",justifyContent:"center",gap:"6px"}),p.appendChild(R);let x=y?.rowId?i.get(y.rowId):void 0,g=x?.indexOf(f)??-1,C=g>=0?[x?.[g-1],x?.[g+1]]:[void 0,void 0],E=(D,B,L,A=!1)=>{let k=document.createElement("button");k.type="button",k.textContent=D,k.setAttribute("aria-label",B),Object.assign(k.style,{minHeight:"44px",padding:A?"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"}),A||(k.style.minWidth="44px"),A&&(k.dataset.panoramaTrigger=""),k.addEventListener("click",L),R.appendChild(k)};if(b&&C[0]){let D=o.get(C[0])?.label??C[0];E("\u2039",`View previous seat ${D}`,()=>{e.flyToSeat(C[0])})}if(b&&r.getSeatView){let D=r.seatViewActionLabel?.(f)??"Open 360\xB0 panorama";E(l?`\u21BB Retry ${D}`:`\u25C9 ${D}`,`${l?"Retry":D} from seat ${S}`,()=>{if(e.isDisposed()||m!==e.flightGen()){u();return}u(),e.openPanorama(f,400,m)},!0)}if(b&&C[1]){let D=o.get(C[1])?.label??C[1];E("\u203A",`View next seat ${D}`,()=>{e.flyToSeat(C[1])})}return!R.childElementCount&&!h?null:(t.appendChild(p),s=p,c(),p)},remove:u,layout:c}}var pd={rotate:"Drag to rotate the venue",move:"Drag to move the venue",zoomIn:"Zoom in",zoomOut:"Zoom out",fitView:"Show whole venue"};function hs(e){let{container:t,orbit:n,isNarrow:r}=e,o={...pd,...e.labels??{}},i=(S,M)=>{S.setAttribute("aria-label",M),S.title=M},a=document.createElement("div"),s=!1;a.className="sl-3d-navigation-controls",Object.assign(a.style,{position:"absolute",right:"14px",bottom:"14px",display:"flex",zIndex:"4",flexDirection:"column",alignItems:"flex-end",gap:"7px"});let c=document.createElement("div");c.setAttribute("role","group"),c.setAttribute("aria-label","3D drag mode"),Object.assign(c.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",i(d,o.rotate);let f=document.createElement("button");f.type="button",f.textContent="\u2725",i(f,o.move);let m=document.createElement("button");m.type="button",m.textContent="\u2212",i(m,o.zoomOut);let l=document.createElement("button");l.type="button",l.textContent="+",i(l,o.zoomIn);for(let S of[d,f,m,l])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"});c.append(d,f),u.append(l,m);let p=S=>{n.setPrimaryDragMode(S);let M=S==="orbit";d.setAttribute("aria-pressed",String(M)),f.setAttribute("aria-pressed",String(!M)),d.style.background=M?"rgba(96,110,150,0.68)":"rgba(12,18,32,0.82)",f.style.background=M?"rgba(12,18,32,0.82)":"rgba(96,110,150,0.68)",a.title=M?`${o.rotate} \xB7 ${o.move} with Shift`:`${o.move} \xB7 ${o.rotate} with Shift`};d.addEventListener("click",()=>p("orbit")),f.addEventListener("click",()=>p("pan"));let h=()=>{let{atMin:S,atMax:M}=n.dollyLimitState();l.disabled!==S&&(l.disabled=S),m.disabled!==M&&(m.disabled=M)};m.addEventListener("click",()=>{n.zoomBy(Tt),h()}),l.addEventListener("click",()=>{n.zoomBy(pt),h()}),a.append(c,u),p("orbit"),t.appendChild(a);let b=e.enabled!==!1,y=()=>{let S=r();a.style.display=s||!b?"none":"flex",a.style.right=S?"12px":"14px",a.style.bottom=S?"calc(env(safe-area-inset-bottom, 0px) + 76px)":"14px",c.style.display=S?"none":"flex",l.style.display=S?"none":"",m.style.display=S?"none":""};return y(),{element:a,utilityControls:u,setNavigationMode:p,syncZoomLimits:h,setSeatViewLocked:S=>{s=S,n.setInteractionEnabled(!S),y()},seatViewLocked:()=>s,layout:y}}var hd=12;function bd(e,t){if(!e)return!1;let n=e.x-t[0],r=e.y-t[1],o=e.z-t[2];return Math.hypot(n,r,o)>hd}function bs(e){let{glctx:t,orbit:n,model:r,seats:o,opts:i,cinematic:a,analytics:s,seatIdByIndex:c,sectionIdBySeatId:u,tapSlop:d,tapMs:f,cancelFlight:m,focusSectionCamera:l,setSelection:p,ensureSeatView:h}=e,b=0,y=0,v=0,S=-1,M=!1,R=!1,x=B=>{e.seatViewLocked()||S===-1&&(S=B.pointerId,b=B.clientX,y=B.clientY,v=performance.now(),M=!1,R=a.active,a.active&&(s.cinematicCancelled(),m(),i.onViewTargetChange?.(null)))},g=B=>{B.pointerId===S&&Math.hypot(B.clientX-b,B.clientY-y)>d&&(M=!0)},C=(B,L,A,k,N)=>{let w=t.canvas.getBoundingClientRect(),T=t.canvas.clientWidth||w.width||1,_=t.canvas.clientHeight||w.height||1,P=B-w.left,O=L-w.top,I=k*k,F=-1,H=I,j=1/0;for(let G of o){if(A&&G.sectionId!==A)continue;let V=r.seats.idToIndex.get(G.id);if(V===void 0)continue;if(N){let Z=Math.round(r.seats.iState[V]??0);if(Z!==0&&Z!==3)continue}let W=V*3,X=Ye(n.camera.projectionViewMatrix,[r.seats.iPosition[W],r.seats.iPosition[W+1]+.55,r.seats.iPosition[W+2]],T,_);if(!X.visible)continue;let Q=X.x-P,q=X.y-O,K=Q*Q+q*q;(K<H||Math.abs(K-H)<1&&X.depth<j)&&(F=V,H=K,j=X.depth)}return F},E=(B,L)=>{let A=e.gpu(),k=e.pick();if(!A||!k)return-1;k.syncFromSeatProgram(A.seatProgram);let N=t.canvas.getBoundingClientRect(),w=t.renderer.dpr,{x:T,y:_}=Ma(B,L,N,w,t.gl.drawingBufferWidth,t.gl.drawingBufferHeight),P=Math.max(2,Math.round(8*w));return k.pick(n.camera,T,_,P)};return{onDown:x,onMove:g,onUp:B=>{if(B.pointerId!==S)return;let L=!M&&performance.now()-v<f;if(S=-1,R){R=!1;return}let A=e.gpu(),k=e.pick();if(!L||!A||!k)return;let N=E(B.clientX,B.clientY);if(e.focusedSectionId()&&N>=0){let _=c[N],P=_?u.get(_):void 0;if(P&&P!==e.focusedSectionId()&&l(P))return}if(e.focusedSectionId()&&N<0&&(N=C(B.clientX,B.clientY,e.focusedSectionId(),44,!1)),e.focusedSectionId()&&N<0){let _=C(B.clientX,B.clientY,null,72,!1),P=_>=0?c[_]:void 0,O=P?u.get(P):void 0;if(O&&O!==e.focusedSectionId()&&l(O))return}if(!e.focusedSectionId()){N<0&&(N=C(B.clientX,B.clientY,null,42,!1));let _=N>=0?c[N]:void 0,P=_?u.get(_):void 0;if(P&&l(P))return}if(N<0||N>=c.length){e.selection().size&&(p([]),i.onViewTargetChange?.(null));return}let w=c[N],T=pe[Math.round(r.seats.iState[N]??0)]??"available";if(T!=="available"&&T!=="selected"){i.onSeatInspect?.(w,T);return}if(e.selection().has(w)&&e.selection().size===1){p([]),i.onViewTargetChange?.(null),i.onSeatPick?.(w);return}if(p([w]),h(w),s.seatPicked(w,u.get(w)),i.onSeatPick?.(w),e.focusedSectionId()){let _=N*3,P=[r.seats.iPosition[_],r.seats.iPosition[_+1],r.seats.iPosition[_+2]];bd(n.camera?.position,P)&&e.focusSeatCamera(w)}}}}var Vn=class{constructor(t,n){this.minX=0;this.minZ=0;this.cell=1;this.cols=1;this.rows=1;this.cellStart=null;this.cellItems=null;this.iPosition=t,this.count=n}ensureGrid(){if(this.cellStart||this.count===0)return;let t=this.iPosition,n=1/0,r=1/0,o=-1/0,i=-1/0;for(let l=0;l<this.count;l++){let p=t[l*3],h=t[l*3+2];p<n&&(n=p),p>o&&(o=p),h<r&&(r=h),h>i&&(i=h)}let a=Math.max(o-n,.001),s=Math.max(i-r,.001);this.cell=Math.max(Math.sqrt(a*s*4/this.count),.25),this.cols=Math.max(1,Math.ceil(a/this.cell)+1),this.rows=Math.max(1,Math.ceil(s/this.cell)+1),this.minX=n,this.minZ=r;let c=this.cols*this.rows,u=new Int32Array(c+1),d=l=>{let p=Math.min(this.cols-1,Math.max(0,Math.floor((t[l*3]-n)/this.cell)));return Math.min(this.rows-1,Math.max(0,Math.floor((t[l*3+2]-r)/this.cell)))*this.cols+p};for(let l=0;l<this.count;l++)u[d(l)+1]++;for(let l=0;l<c;l++)u[l+1]+=u[l];let f=new Int32Array(this.count),m=u.slice(0,c);for(let l=0;l<this.count;l++)f[m[d(l)]++]=l;this.cellStart=u,this.cellItems=f}gather(t,n,r,o){this.ensureGrid();let i=this.cellStart,a=this.cellItems;if(!i||!a)return 0;let s=o.length,c=r*r,u=Math.floor((t-this.minX)/this.cell),d=Math.floor((n-this.minZ)/this.cell),f=Math.ceil(r/this.cell)+1,m=this.iPosition,l=0;for(let p=0;p<=f&&l<s;p++){let h=d-p,b=d+p,y=u-p,v=u+p;for(let S=h;S<=b&&l<s;S++){if(S<0||S>=this.rows)continue;let M=S===h||S===b;for(let R=y;R<=v&&l<s;R++){if(!M&&R!==y&&R!==v){R=v-1;continue}if(R<0||R>=this.cols)continue;let x=S*this.cols+R;for(let g=i[x],C=i[x+1];g<C&&l<s;g++){let E=a[g],D=m[E*3]-t,B=m[E*3+2]-n;D*D+B*B<=c&&(o[l++]=E)}}}}return l}};var Bn=class{constructor(t){this.ctx=t;this.detailVisible=!1;this.seatDetailMix=0;this.structureDetailMix=0;this.nearBuf=new Int32Array(en);this.lastGatherX=1/0;this.lastGatherZ=1/0;this.nearIndex=new Vn(t.model.seats.iPosition,t.model.seats.count)}forceRegather(){this.lastGatherX=1/0}setDetailEnabled(t){let n=this.ctx.gpu();t||(this.detailVisible=!1),this.lastGatherX=1/0,this.lastGatherZ=1/0,!t&&n?.nearSeatCount()&&n.setNearSeats(this.nearBuf,0)}update(t){let{model:n}=this.ctx,r=this.ctx.gpu();if(!r)return;if(!t){r.nearSeatCount()&&r.setNearSeats(this.nearBuf,0);return}let o=this.ctx.orbit().camera.position;if(Math.hypot(o.x-this.lastGatherX,o.z-this.lastGatherZ)<Kn)return;if(this.lastGatherX=o.x,this.lastGatherZ=o.z,Math.hypot(o.x-n.bounds.center[0],o.z-n.bounds.center[2])-n.bounds.radius>Wn){r.nearSeatCount()&&r.setNearSeats(this.nearBuf,0);return}let s=this.nearIndex.gather(o.x,o.z,Wn,this.nearBuf);s===0&&r.nearSeatCount()===0||r.setNearSeats(this.nearBuf,s)}ease(t,n,r){let o=1-Math.exp(-t*9),i=1-Math.exp(-t*20);this.seatDetailMix+=(n-this.seatDetailMix)*(n>this.seatDetailMix?o:i),this.structureDetailMix+=(r-this.structureDetailMix)*(r>this.structureDetailMix?o:i),Math.abs(n-this.seatDetailMix)<.01&&(this.seatDetailMix=n),Math.abs(r-this.structureDetailMix)<.01&&(this.structureDetailMix=r)}};var Nn=require("ogl");function ys(){let e="http://www.w3.org/2000/svg",t=document.createElementNS(e,"svg");t.setAttribute("viewBox","0 0 24 24"),t.setAttribute("width","18"),t.setAttribute("height","18"),t.setAttribute("aria-hidden","true"),t.setAttribute("focusable","false"),t.setAttribute("fill","none"),t.setAttribute("stroke","currentColor"),t.setAttribute("stroke-width","2"),t.setAttribute("stroke-linecap","round"),t.setAttribute("stroke-linejoin","round");let n=document.createElementNS(e,"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"),t.appendChild(n),t}function vs(e){let{container:t,model:n,opts:r,orbit:o,cinematic:i,analytics:a,loop:s,labelOverlay:c,stageAzimuth:u,overviewFraming:d}=e,f=0,m=-1,l=(g,C,E=28)=>{o.camera.position.set(g[0],g[1],g[2]),o.camera.lookAt(new Nn.Vec3(C[0],C[1],C[2])),o.camera.fov=E,o.camera.updateProjectionMatrix()},p=document.createElement("button");p.className="sl-3d-overview-control sl-3d-icon-control",p.type="button",p.replaceChildren(ys());let h=r.navLabels?.fitView??"Show whole venue";p.setAttribute("aria-label",h),p.title=h,Object.assign(p.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 b=()=>{p.firstElementChild||p.replaceChildren(ys())};b();let y=g=>{m=g;let C=e.gpu();C&&(C.seatProgram.uniforms.uFocusFloor.value=g,C.solidProgram.uniforms.uFocusFloor.value=g,C.chairProgram.uniforms.uFocusFloor.value=g),e.showSectionSeatLabels(null)},v=()=>{if(e.isDisposed())return;r.onViewTargetChange?.(null),r.onSectionFocusChange?.(null),e.panorama()&&(e.panorama().dispose(),e.setPanorama(null),a.panoramaClosed()),e.setPanoramaSphereVisible(!1),e.panoramaLoadAbort()?.abort(),e.setPanoramaLoadAbort(null),e.restorePanoramaLayer(),p.style.display="",c.setVisible(!0),e.setFrozen(!1);let g=m>=0?n.floors[m]:null;if(e.setNearFieldDetailEnabled(!!g),e.setSeatViewLocked(!1),S(),e.removeArriveChip(),e.setNavigationMode("orbit"),g){let C=g.focalWorld[0]-g.center[0],E=g.focalWorld[2]-g.center[2],D=Math.hypot(C,E)>g.radius*.12?Math.atan2(C,E):u,B={center:g.center,radius:g.radius,box:g.box},L={polarDeg:58,margin:1.12};e.reducedMotion()?o.frame(B,!1,D,!1,L):o.frameSoft(B,D,!1,L)}else e.reducedMotion()?o.frame(n.bounds,!1,u,r.portraitOverviewCrop===!0,d):o.frameSoft(n.bounds,u,r.portraitOverviewCrop===!0,d);e.showSectionSeatLabels(null),s.requestRender()},S=()=>{f++,e.setSeatStepping(!1),e.panoramaLoadAbort()?.abort(),e.setPanoramaLoadAbort(null),i.active&&(i.cancel(),o.resumeAfterFlight(n.focalWorld))},M=g=>{if(e.isDisposed()||!e.gpu())return Promise.resolve();let C=n.seats.idToIndex.get(g);if(C===void 0)return Promise.resolve();e.setNearFieldDetailEnabled(!0),r.onViewTargetChange?.(g),e.panorama()&&(e.panorama().dispose(),e.setPanorama(null),e.setPanoramaSphereVisible(!1),p.style.display="",e.restorePanoramaLayer()),e.panoramaLoadAbort()?.abort(),e.setPanoramaLoadAbort(null),e.setFrozen(!1);let E=e.inSeatView()&&r.arriveAtSeatEye===!0;e.setSeatStepping(E),e.setSeatViewLocked(!1);let D=++f;E?e.showArriveChip(g,D):e.removeArriveChip();let{eye:B,focal:L}=e.resolvedSeatViewPose(g,C),A=r.arriveAtSeatEye?e.seatViewArrival(g,C):null,k=A?A.focal:L,N=[o.camera.position.x,o.camera.position.y,o.camera.position.z],w=_o(N,A?.eye??B,k,n.bounds.center,n.bounds.radius),T=A?A.eye:r.arriveAtSeatEye?B:w.finalPos,_=A?A.fov:r.arriveAtSeatEye?t.clientWidth/Math.max(1,t.clientHeight)<.7?Rn:65:28,P=[w.waypoints[0],w.waypoints[1],T];if(c.setVisible(!1),e.reducedMotion())return e.setSeatStepping(!1),l(T,k,_),s.requestRender(),a.cinematicSkipped(),e.isDisposed()||o.syncFromCamera(),e.setSeatViewLocked(r.arriveAtSeatEye===!0),A&&e.enterSeatView(A.stops),e.showArriveChip(g,D),Promise.resolve();let O=new Nn.Quat().copy(o.camera.quaternion),I=_a(o.camera,T,k);s.requestRender();let F=E?700:2500;return i.start(P,O,I,F,_).then(()=>{e.isDisposed()||D!==f||(e.setSeatStepping(!1),a.cinematicPlayed(F),o.resumeAfterFlight(k),e.setSeatViewLocked(r.arriveAtSeatEye===!0),A&&e.enterSeatView(A.stops),s.requestRender(),e.showArriveChip(g,D))})},R=g=>{let C=n.sections.find(L=>L.id===g);if(!C||C.seatCount===0)return!1;e.setNearFieldDetailEnabled(!0),e.setSeatStepping(!1),e.setSeatViewLocked(!1),i.cancel(),e.removeArriveChip(),n.floors.length>1&&m!==C.floorIndex&&y(C.floorIndex),e.setNavigationMode("pan"),e.showSectionSeatLabels(g);let E=C.focalWorld[0]-C.center[0],D=C.focalWorld[2]-C.center[2],B=Math.hypot(E,D)>C.radius*.12?Math.atan2(E,D):void 0;return o.frame({center:C.center,radius:Math.max(5,C.radius*.5)},!1,B),r.onSectionFocusChange?.(g),s.requestRender(),!0},x=g=>{if(e.isDisposed()||!e.gpu())return!1;let C=n.seats.idToIndex.get(g);if(C===void 0)return!1;let E=C*3,D=[n.seats.iPosition[E],n.seats.iPosition[E+1]+.55,n.seats.iPosition[E+2]];return e.reducedMotion()?o.frame({center:D,radius:gs},!1,void 0,!1,xs):o.frameSoft({center:D,radius:gs},void 0,!1,xs),s.requestRender(),!0};return p.addEventListener("click",v),{overviewChip:p,layoutOverviewChip:b,flightGen:()=>f,focusedFloor:()=>m,applyFloorFocus:y,placeCameraFinal:l,cancelFlight:S,focusOverview:v,flyToSeat:M,focusSectionCamera:R,focusSeatCamera:x}}var gs=4.5,xs={polarDeg:48,margin:1.25};var gd={};function Ss(e){let t=performance.now();return{model:St(e),buildMs:performance.now()-t,source:"main"}}function yd(e){let t=$r(e.doc);return{...Ss({...e,seats:t}),seats:t}}function Ms(e,t,n){if(typeof Worker>"u")return Promise.resolve(t());let r;try{r=new Worker(new URL("./scene/scene.worker.js",gd.url),{type:"module"})}catch{return Promise.resolve(t())}return new Promise(o=>{let i=!1,a=u=>{i||(i=!0,clearTimeout(c),r.terminate(),o(u))},s=()=>a(t()),c=window.setTimeout(s,15e3);r.onerror=s,r.onmessage=u=>{let d=n(u.data);d?a(d):s()},r.postMessage(e)})}function ws(e){return Ms(e,()=>Ss(e),({model:t,buildMs:n})=>({model:t,buildMs:n,source:"worker"}))}function Ps(e){return Ms(e,()=>yd(e),({model:t,buildMs:n,seats:r})=>r?{model:t,buildMs:n,seats:r,source:"worker"}:null)}var xd=Math.PI/180,vd=6,Sd=500;function Md(e,t,n={}){let r=performance.now(),o=t.prepared?.model??St(t),i=new On(n.onAnalytics),a=new Array(o.seats.count);for(let[U,Y]of o.seats.idToIndex)a[Y]=U;let s=new Map(t.seats.map(U=>[U.id,U])),c=new Map;for(let U of t.seats){if(!U.rowId)continue;let Y=c.get(U.rowId);Y?Y.push(U.id):c.set(U.rowId,[U.id])}let u=new Map;for(let U of t.seats)u.set(U.id,U.sectionId);let d=new Map;for(let[U,Y]of o.seats.idToIndex){let $=u.get(U);if(!$)continue;let ee=d.get($);ee?ee.push(Y):d.set($,[Y])}let f=()=>{if(!l||!o.sectionSolidRanges.length)return;let{lit:U,anyUnlit:Y}=ya(o.sectionSolidRanges,d,o.seats.iState);l.setSectionShellLit(Y?U:null)},m=t.doc.floors?.some(Y=>(Y.baseHeightM??0)>0)?!0:(t.doc.floors?.flatMap(Y=>Y.objects)??t.doc.objects).some(Y=>Y.type==="section"&&((Y.height??0)>0||(Y.rake??0)>0)),l=null,p=null,h=!1,b=!1,y=!1,v=new Map,S=null,M=null,R=null,x=new Map,g=null,C=()=>{R===null&&(R=e.style.zIndex,e.style.zIndex="20")},E=()=>{R!==null&&(e.style.zIndex==="20"&&(e.style.zIndex=R),R=null)},D=!1,B=()=>D?fe.focusedFloor():-1,L=()=>{l=va(w.gl,o),f(),p=new Cn(w.renderer,l.seatGeometry,l.chairGeometry,l.solidGeometry,o.seats.count),w.setClearColor(o.theme.background.top),p.setRestoreClear(o.theme.background.top),l.seatProgram.uniforms.uSeatRadius.value=De*o.theme.seatScale,l.seatProgram.uniforms.uFocusFloor.value=B(),l.solidProgram.uniforms.uFocusFloor.value=B(),l.chairProgram.uniforms.uFocusFloor.value=B(),l.screenProgram&&(l.screenProgram.uniforms.uFocusFloor.value=B()),k.forceRegather()},A=!1,k=new Bn({model:o,orbit:()=>T,gpu:()=>l}),N=U=>k.setDetailEnabled(U),w=new Qt(e,{onContextLost:()=>{y||i.contextLost(),h=!0,K.stop(),l=null,p=null},onContextRestored:()=>{L(),h=!1,y||i.contextRestored(),K.requestRender()}}),T=new Zt(w.gl,w.canvas,()=>K.requestRender(),()=>i.orbitEngaged());T.setAspect(w.aspect);let _=(t.doc.floors?.flatMap(U=>U.objects)??t.doc.objects).some(U=>U.type==="section"&&U.physical3dProvenance?.surfaceKind?.status==="inferred"),P=(()=>{if(_&&o.stages.length===0)return;let U=o.focalWorld[0]-o.bounds.center[0],Y=o.focalWorld[2]-o.bounds.center[2];return Math.hypot(U,Y)>o.bounds.radius*.12?Math.atan2(U,Y):void 0})(),O=o.floors.length>1?{polarDeg:48,margin:1.1}:{margin:1.1},I=typeof window<"u"&&!!window.matchMedia&&window.matchMedia("(prefers-reduced-motion: reduce)").matches;T.frame(o.bounds,!I&&n.skipInitialOverviewAnimation!==!0,P,n.portraitOverviewCrop===!0,O);let F=new An(T.camera),H=fs(e),j=new Mn(e,{fontFamily:t.doc.theme?.fontFamily,ink:t.doc.theme?.textColor,backgroundRgb:o.theme.background.top}),G=o.labels,V=()=>Oi(G,o.floors.length,B());j.setLabels(V());let W=null,X=U=>{if(W=U,j.setForcedDense(!!U),!U){j.setLabels(V());return}let Y=t.seats.filter(J=>J.sectionId===U),$=new Set(Y.map(J=>J.id)),ee=new Set(Y.map(J=>J.rowId)),re=new Set(v.keys()),ie=new Set(Y.filter(J=>re.has(J.id)).map(J=>J.id)),se=V().filter(J=>J.kind!=="row"&&J.kind!=="seat"||(J.kind==="row"?ee.has(J.id.slice(4)):$.has(J.id.slice(5))&&(ie.size===0||ie.has(J.id.slice(5)))));if(o.seatCount<=6e3&&ie.size===0){j.setLabels(se);return}let me=ie.size?Y.filter(J=>ie.has(J.id)):Y,Qe=new Set(me.map(J=>`seat:${J.id}`)),Ue=me.flatMap(J=>{let ye=o.seats.idToIndex.get(J.id);if(ye===void 0)return[];let Re=ye*3;return[{id:`seat:${J.id}`,kind:"seat",text:re.has(J.id)?J.displayLabel||J.label:wo(J.displayLabel||J.label),anchor:[o.seats.iPosition[Re],o.seats.iPosition[Re+1]+(re.has(J.id)?1.05:.55),o.seats.iPosition[Re+2]]}]});j.setLabels([...se.filter(J=>!Qe.has(J.id)),...Ue])};L();let Q=null,q=null,K=new Jt(U=>{if(h||!l||b)return!1;let Y=Za({flying:F.active,panoramaMounted:S!==null,seatViewActive:Q?.active===!0}),$=Y==="cinematic"?F.update(performance.now()):Y==="seatView"?Q.update(performance.now()):Y==="orbit"?T.update():!1;q?.syncZoomLimits();let ee=B()>=0?o.floors[B()]:null,re=ee?.radius??o.bounds.radius,ie=nr(T.currentDistance,re),se=A?{center:[T.camera.position.x,T.camera.position.y,T.camera.position.z],radius:520}:o.renderBounds;T.updateClipping(se);let me=ee?.center??o.renderBounds.center,Qe=ee?.radius??o.renderBounds.radius,Ue=(Ee,At)=>Math.hypot(T.camera.position.x-Ee[0],T.camera.position.y-Ee[1],T.camera.position.z-Ee[2])<=At*(k.detailVisible?1.8:1.55),J=Ue(me,Qe);if(!J&&W){let Ee=o.sections.find(At=>At.id===W);Ee&&(J=Ue(Ee.center,Math.max(12,Ee.radius*2)))}k.detailVisible=J;let ye=l.seatProgram.uniforms;ye.uSeatScale.value=ie.scale,ye.uSeatFade.value=ie.fade;let Re=!!ee&&or(ee.seatCount,w.canvas.clientWidth||1,w.canvas.clientHeight||1),Wt=rr(o.seats.count,re,T.currentDistance,T.camera.fov,w.canvas.clientHeight||1),Ct=k.detailVisible||Re||Wt?1:0,Kt=k.detailVisible||B()>=0||o.floors.length>1?1:0;return k.ease(U,Ct,Kt),ye.uSeatDetail.value=k.seatDetailMix,l.solidProgram.uniforms.uStructureDetail.value=k.structureDetailMix,ye.uMinPixels.value=ie.minPixels,ye.uPixelToWorld.value=2*Math.tan(T.camera.fov*xd/2)/Math.max(1,w.pixelHeight),k.update(k.detailVisible),w.renderer.render({scene:l.background,clear:!0}),w.renderer.render({scene:l.main,camera:T.camera,clear:!1}),j.update(T.camera.projectionViewMatrix,w.canvas.clientWidth||1,w.canvas.clientHeight||1,T.currentDistance,re,[T.camera.position.x,T.camera.position.y,T.camera.position.z]),$||k.seatDetailMix!==Ct||k.structureDetailMix!==Kt}),Z=typeof ResizeObserver<"u"?new ResizeObserver(()=>zn.resize()):null;Z?.observe(e);let te=U=>{let Y=re=>{let ie=o.seats.idToIndex.get(re);return ie===void 0?void 0:o.seats.iState[ie]},{updates:$,next:ee}=Pa(v,U,Y);if(v=ee,j.setSelectedSeatIds(v.keys()),W&&X(W),$.length){let re=no(o.seats,$);l&&l.uploadSeatStateRuns(re),f(),K.requestRender()}},Me=()=>g!==null?g:typeof window<"u"&&!!window.matchMedia&&window.matchMedia("(prefers-reduced-motion: reduce)").matches,Ae=8,Be=U=>{if(!n.getSeatView)return null;let Y=x.get(U);if(!Y)for(Y=Promise.resolve(n.getSeatView(U)),x.set(U,Y),Y.catch(()=>{x.get(U)===Y&&x.delete(U)});x.size>Ae;){let $=x.keys().next().value;if($===void 0)break;x.delete($)}return Y},ke=Ua(o.stages,o.focalWorld,o.bounds.groundY??0),Ne=ko(ke),we=(U,Y)=>{let $=s.get(U),ee=Math.max(0,Math.round(o.seats.iFloor[Y]??0)),re=t.doc.floors?.[ee],ie=o.floors[ee],se=re?.focalPoint??t.doc.focalPoint,me=ie?{x:ie.focalWorld[0]/z,y:ie.focalWorld[2]/z}:se,Qe=$?.focalPoint?{x:$.focalPoint.x+me.x-se.x,y:$.focalPoint.y+me.y-se.y}:me,Ue=[o.seats.iPosition[Y*3],o.seats.iPosition[Y*3+1],o.seats.iPosition[Y*3+2]];return ka(Ue,Qe,re?.baseHeightM??0,$?.eyeHeightM,Ne)},de=()=>(e.clientWidth||w.canvas.clientWidth)<=520,Ge=null,ct=null,lt=async(U,Y,$)=>{if(!n.getSeatView||y||$!==fe.flightGen())return;let ee;try{ee=await ms()}catch{if(i.panoramaFailed(U,"mount"),!y&&$===fe.flightGen()){let re=qe(U,$,!0);requestAnimationFrame(()=>re?.querySelector("[data-panorama-trigger]")?.focus())}return}if(!(y||$!==fe.flightGen()||!Ge))return ct??=ee.createOpenPanorama(Ge),ct(U,Y,$)},Fe=ps({container:e,model:o,opts:n,expandedSeatById:s,seatIdsByRow:c,isNarrow:de,isDisposed:()=>y,flightGen:()=>fe.flightGen(),flyToSeat:U=>Go(U),openPanorama:(U,Y,$)=>lt(U,Y,$)}),qe=Fe.show,ut=Fe.remove,Cs=Fe.layout,$e=hs({container:e,orbit:T,isNarrow:de,enabled:n.chrome?.controlDock!==!1,...n.navLabels?{labels:n.navLabels}:{}});q=$e;let As=$e.element,wt=$e.setNavigationMode,Rs=$e.layout,Es=$e.utilityControls,Pt=null,Bo=!1,Xt=U=>{$e.setSeatViewLocked(U),U||Q?.exit()};Q=Qa({canvas:w.canvas,camera:T.camera,requestRender:()=>K.requestRender(),reducedMotion:Me,onStopChange:U=>{let Y=U??(Bo?"seat":null);Pt=Y;try{n.onSeatViewStopChange?.(Y)}catch{}},onApplied:()=>{y||T.syncFromCamera()}});let Is=(U,Y)=>{let{eye:$}=we(U,Y),ee=(e.clientWidth||w.canvas.clientWidth||1)/Math.max(1,e.clientHeight||w.canvas.clientHeight||1),re=ja($,ke,ee);if(n.seatViewStops===!1)return{...re,stops:[]};let ie=u.get(U),se=ie?o.sections.find(me=>me.id===ie):void 0;return{...re,stops:Ya(re,{aspect:ee,section:se&&se.seatCount>0?{center:se.center,radius:se.radius}:null,venue:{center:o.bounds.center,radius:o.bounds.radius}})}},fe=vs({container:e,model:o,opts:n,orbit:T,cinematic:F,analytics:i,loop:K,labelOverlay:j,stageAzimuth:P,overviewFraming:O,gpu:()=>l,isDisposed:()=>y,panorama:()=>S,setPanorama:U=>{S=U},setPanoramaSphereVisible:U=>{A=U},panoramaLoadAbort:()=>M,setPanoramaLoadAbort:U=>{M=U},setFrozen:U=>{b=U},restorePanoramaLayer:E,reducedMotion:Me,resolvedSeatViewPose:we,showSectionSeatLabels:X,setNearFieldDetailEnabled:N,setSeatViewLocked:Xt,setNavigationMode:wt,showArriveChip:qe,removeArriveChip:ut,inSeatView:()=>Pt!==null,setSeatStepping:U=>{Bo=U},seatViewArrival:(U,Y)=>n.arriveAtSeatEye?Is(U,Y):null,enterSeatView:U=>Q?.enter(U)});D=!0;let Gn=fe.overviewChip,Ts=fe.layoutOverviewChip,_s=fe.applyFloorFocus,Ls=fe.focusOverview,No=fe.cancelFlight,Go=fe.flyToSeat,zo=fe.focusSectionCamera;Es.appendChild(Gn),Ge={container:e,model:o,opts:n,analytics:i,orbit:T,loop:K,seatsById:s,ensureSeatView:Be,resolvedSeatViewPose:we,gpu:()=>l,gl:w.gl,isContextLost:()=>h,isDisposed:()=>y,flightGen:()=>fe.flightGen(),setPanorama:U=>{S=U},getLoadAbort:()=>M,setLoadAbort:U=>{M=U},setPanoramaSphereVisible:U=>{A=U,U&&Q?.exit()},setFrozen:U=>{b=U},raisePanoramaLayer:C,restorePanoramaLayer:E,getOverviewChip:()=>Gn,labelOverlay:j,reducedMotion:Me,removeArriveChip:ut,showArriveChip:qe};let ze=bs({glctx:w,orbit:T,model:o,seats:t.seats,opts:n,cinematic:F,analytics:i,seatIdByIndex:a,sectionIdBySeatId:u,tapSlop:vd,tapMs:Sd,gpu:()=>l,pick:()=>p,seatViewLocked:()=>$e.seatViewLocked(),focusedSectionId:()=>W,selection:()=>v,cancelFlight:No,focusSectionCamera:zo,focusSeatCamera:fe.focusSeatCamera,setSelection:te,ensureSeatView:Be});w.canvas.addEventListener("pointerdown",ze.onDown),w.canvas.addEventListener("pointermove",ze.onMove),w.canvas.addEventListener("pointerup",ze.onUp),w.canvas.addEventListener("pointercancel",ze.onUp),K.requestRender();let zn={setAvailability(U){let Y=wa(v,U),$=no(o.seats,Y);$.length&&l&&l.uploadSeatStateRuns($),f(),K.requestRender()},setSelection:te,setNavigationMode:wt,zoomIn(){T.zoomBy(pt),K.requestRender()},zoomOut(){T.zoomBy(Tt),K.requestRender()},flyToSeat:Go,focusOverview:Ls,seatViewStop:()=>Pt,recentreSeatView:()=>Q?.recentre()??!1,resize(){let{width:U,height:Y}=w.resize();T.setAspect(U/Math.max(1,Y)),Cs(),Rs(),Ts(),K.requestRender()},stats(){return{...K.stats(),drawCalls:l?l.drawCalls:0,seatCount:o.seatCount}},getQualityEvidence(){let U=K.stats(),Y=w.canvas.clientWidth||1,$=w.canvas.clientHeight||1,ee=o.bounds.center,re=Ye(T.camera.projectionViewMatrix,[ee[0],o.bounds.box.min[1],ee[2]],Y,$),ie=Ye(T.camera.projectionViewMatrix,[ee[0],o.bounds.box.max[1],ee[2]],Y,$),se=o.bounds.box,me=[se.min[0],se.max[0]].flatMap(J=>[se.min[1],se.max[1]].flatMap(ye=>[se.min[2],se.max[2]].map(Re=>Ye(T.camera.projectionViewMatrix,[J,ye,Re],Y,$)))).filter(J=>Number.isFinite(J.x)&&Number.isFinite(J.y)&&Number.isFinite(J.depth)),Qe=me.length?(()=>{let J=Math.min(...me.map(Ze=>Ze.x)),ye=Math.max(...me.map(Ze=>Ze.x)),Re=Math.min(...me.map(Ze=>Ze.y)),Wt=Math.max(...me.map(Ze=>Ze.y)),Ct=Math.max(0,J),Kt=Math.min(Y,ye),Ee=Math.max(0,Re),At=Math.min($,Wt),qt=Math.max(0,Kt-Ct),Un=Math.max(0,At-Ee);return{box:{x:Ct,y:Ee,width:qt,height:Un},horizontalFillRatio:qt/Y,verticalFillRatio:Un/$,visibleAreaRatio:qt*Un/(Y*$),clippedEdges:[...Re<0?["top"]:[],...ye>Y?["right"]:[],...Wt>$?["bottom"]:[],...J<0?["left"]:[]]}})():void 0,Ue=String(w.gl.getParameter(w.gl.VERSION)??"");return{viewport:{width:Y,height:$},context:{webgl2:/webgl\s*2/i.test(Ue),lost:h},frame:{rendered:U.rendered,idle:U.idle},camera:{position:[T.camera.position.x,T.camera.position.y,T.camera.position.z],distance:T.currentDistance,verticalFovDeg:T.fovY},scene:{seatCount:o.seatCount,floorCount:o.floors.length,zoneCount:o.zones.length,sectionCount:o.sections.length,authoredRelief:m,renderedVerticalSpanM:Math.max(0,o.bounds.box.max[1]-o.bounds.box.min[1]),projectedReliefPx:re.visible&&ie.visible?Math.abs(re.y-ie.y):0},labels:j.qualityEvidence(),framing:Qe,...Pt?{seatView:{fovDeg:T.camera.fov,stop:Pt}}:{}}},getQualityReport(){return wn(zn.getQualityEvidence())},loseContextForTest(){w.simulateContextLossCycle()},floors(){return o.floors},focusFloor(U){if(U!==null&&!o.floors.some($=>$.index===U))return!1;let Y=U??-1;if(N(U!==null),Xt(!1),_s(Y),wt("orbit"),U===null)F.cancel(),Me()?T.frame(o.bounds,!1,P,n.portraitOverviewCrop===!0,O):T.frameSoft(o.bounds,P,n.portraitOverviewCrop===!0,O);else{let $=o.floors[U];if($.seatCount>0){F.cancel();let ee=$.focalWorld[0]-$.center[0],re=$.focalWorld[2]-$.center[2],ie=Math.hypot(ee,re)>$.radius*.12?Math.atan2(ee,re):P;T.frame({center:$.center,radius:$.radius,box:$.box},!1,ie,!1,{polarDeg:58,margin:1.12})}}return K.requestRender(),!0},zones(){return o.zones},focusZone(U){let Y=o.zones.find(ie=>ie.id===U);if(!Y||Y.seatCount===0)return!1;N(!1),Xt(!1),F.cancel(),wt("orbit"),X(null),n.onSectionFocusChange?.(null);let $=Y.focalWorld[0]-Y.center[0],ee=Y.focalWorld[2]-Y.center[2],re=Math.hypot($,ee)>Y.radius*.12?Math.atan2($,ee):void 0;return T.frame({center:Y.center,radius:Y.radius*1.25},!1,re),K.requestRender(),!0},sections(){return o.sections},focusSection(U){return zo(U)},rows(U){return U?o.rows.filter(Y=>Y.sectionId===U):o.rows},seatsInRow(U){return t.seats.filter(Y=>Y.rowId===U).map(Y=>({id:Y.id,label:Y.displayLabel||Y.label}))},focusRow(U){let Y=o.rows.find($=>$.id===U);return!Y||Y.seatCount===0?!1:(N(!0),Xt(!1),F.cancel(),wt("pan"),Y.sectionId&&(X(Y.sectionId),n.onSectionFocusChange?.(Y.sectionId)),T.frame({center:Y.center,radius:Math.max(2.5,Y.radius*.65)}),K.requestRender(),!0)},setReducedMotionForTest(U){g=U},dispose(){y=!0,ut(),Gn.remove(),As.remove(),No(),Q?.dispose(),K.stop(),j.dispose(),Z?.disconnect(),S&&(S.dispose(),S=null),E(),H(),w.canvas.removeEventListener("pointerdown",ze.onDown),w.canvas.removeEventListener("pointermove",ze.onMove),w.canvas.removeEventListener("pointerup",ze.onUp),w.canvas.removeEventListener("pointercancel",ze.onUp),T.dispose(),p&&p.dispose(),l&&l.dispose(),l=null,p=null,w.dispose()}};return i.opened(o.seatCount,m,t.prepared?.buildMs??performance.now()-r,t.prepared?.source??"inline"),zn}0&&(module.exports={VENUE3D_QUALITY_REPORT_VERSION,buildSceneModel,inspectVenue3DQualityEvidence,mountVenue3D,prepareVenue3D,prepareVenue3DFromChart});
|
|
804
|
+
void main(){ if(vDim>0.5) discard; vec4 c=texture(uImage,vUv); if(c.a<0.01) discard; fragColor=c; }`,uniforms:{uImage:{value:Q},uFocusFloor:{value:-1}},transparent:!1,depthTest:!0,depthWrite:!0,cullFace:!1});let te=new ve.Mesh(e,{geometry:H,program:K});te.frustumCulled=!1,te.setParent(n),Z.screenProgram=K,U=!0,Z.drawCalls=3+(z?1:0)+1},q.src=ee.contentImageUrl}return Z}var Ze=require("ogl");function Mp(e,t,n){let o=e+(t<<8)+(n<<16);return o===0?-1:o-1}function _c(e,t,n,o,r,i){let a=-1,s=1/0;for(let c=0;c<n;c++)for(let u=0;u<t;u++){let l=(c*t+u)*4,m=Mp(e[l],e[l+1],e[l+2]);if(m<0||m>=i)continue;let h=u-o,d=c-r,f=h*h+d*d;f<s&&(s=f,a=m)}return a}function Tc(e,t,n,o,r,i){let a=e-n.left,s=t-n.top,c=Math.round(a*o),u=Math.round((n.height-s)*o);return{x:Math.max(0,Math.min(r-1,c)),y:Math.max(0,Math.min(i-1,u))}}var Sp=["uSeatRadius","uSeatScale","uMinPixels","uPixelToWorld"],bo=class{constructor(t,n,o,r,i){this.seatScene=new Ze.Transform;this.chairScene=new Ze.Transform;this.solidScene=new Ze.Transform;this.target=null;this.restoreClear=[0,0,0];this.renderer=t,this.gl=t.gl,this.maxIndex=i,this.seatProg=gc(this.gl),this.chairProg=xc(this.gl),this.depthProg=vc(this.gl);let a=new Ze.Mesh(this.gl,{geometry:n,program:this.seatProg});a.frustumCulled=!1,a.setParent(this.seatScene);let s=new Ze.Mesh(this.gl,{geometry:o,program:this.chairProg});s.frustumCulled=!1,s.setParent(this.chairScene);let c=new Ze.Mesh(this.gl,{geometry:r,program:this.depthProg});c.frustumCulled=!1,c.setParent(this.solidScene)}setRestoreClear(t){this.restoreClear=[t[0],t[1],t[2]]}syncFromSeatProgram(t){for(let o of Sp)this.seatProg.uniforms[o].value=t.uniforms[o].value;let n=t.uniforms.uFocusFloor.value;this.seatProg.uniforms.uFocusFloor.value=n,this.chairProg.uniforms.uFocusFloor.value=n,this.depthProg.uniforms.uFocusFloor.value=n}ensureTarget(){let t=this.gl.drawingBufferWidth,n=this.gl.drawingBufferHeight;return this.target&&(this.target.width!==t||this.target.height!==n)&&this.destroyTarget(),this.target||(this.target=new Ze.RenderTarget(this.gl,{width:t,height:n,depth:!0})),this.target}destroyTarget(){if(!this.target)return;let t=this.gl;this.target.buffer&&t.deleteFramebuffer(this.target.buffer);for(let n of this.target.textures??[])n.texture&&t.deleteTexture(n.texture);this.target.depthBuffer&&t.deleteRenderbuffer(this.target.depthBuffer),this.target=null}pick(t,n,o,r){let i=this.gl,a=this.ensureTarget(),s=i.drawingBufferWidth,c=i.drawingBufferHeight,u=Math.max(0,n-r),l=Math.max(0,o-r),m=Math.max(1,Math.min(s,n+r+1)-u),h=Math.max(1,Math.min(c,o+r+1)-l);i.enable(i.SCISSOR_TEST),i.scissor(u,l,m,h);let[d,f,p]=this.restoreClear;i.clearColor(0,0,0,1),this.renderer.render({scene:this.solidScene,camera:t,target:a,clear:!0}),this.renderer.render({scene:this.seatScene,camera:t,target:a,clear:!1}),this.renderer.render({scene:this.chairScene,camera:t,target:a,clear:!1}),i.clearColor(d,f,p,1),i.disable(i.SCISSOR_TEST);let b=new Uint8Array(m*h*4);return this.renderer.bindFramebuffer(a),i.readPixels(u,l,m,h,i.RGBA,i.UNSIGNED_BYTE,b),this.renderer.bindFramebuffer(),_c(b,m,h,n-u,o-l,this.maxIndex)}dispose(){this.destroyTarget(),this.seatProg.remove(),this.chairProg.remove(),this.depthProg.remove()}};function kc(e,t){let n=[];for(let o of t)e.has(o.seatId)?e.set(o.seatId,cn(o.state)):n.push(o);return n}function Lc(e,t,n){let o=new Set;for(let a of t)(e.has(a)||n(a)!==void 0)&&o.add(a);let r=new Map(e),i=[];for(let[a,s]of e)o.has(a)||(i.push({seatId:a,state:Ae[s]??"available"}),r.delete(a));for(let a of o){if(r.has(a))continue;let s=n(a);s!==void 0&&(r.set(a,s),i.push({seatId:a,state:"selected"}))}return{updates:i,next:r}}var gt=require("ogl");function wp(e,t){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]}function Fc(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]}function Pp(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function Dc(e){let t=Math.hypot(e[0],e[1],e[2]);return t>1e-6?[e[0]/t,e[1]/t,e[2]/t]:[0,0,0]}function Lr(e){let t=Math.max(0,Math.min(1,e));return t*t*t*(t*(t*6-15)+10)}function Fr(e,t){return Math.max(0,Math.min(1,e+t))}function Oc(e,t){let n=e.length;if(n===0)return[0,0,0];if(n===1)return[...e[0]];let o=Math.max(0,Math.min(1,t)),r=n-1,i=Math.floor(o*r);i>=r&&(i=r-1);let a=o*r-i,s=e[Math.max(0,i-1)],c=e[i],u=e[i+1],l=e[Math.min(n-1,i+2)],m=a*a,h=m*a,d=[0,0,0];for(let f=0;f<3;f++)d[f]=.5*(2*c[f]+(-s[f]+u[f])*a+(2*s[f]-5*c[f]+4*u[f]-l[f])*m+(-s[f]+3*c[f]-3*u[f]+l[f])*h);return d}function Dr(e,t,n,o,r){let i=Dc(wp(t,n));i[0]===0&&i[1]===0&&i[2]===0&&(i=[0,0,1]);let a=Fc(Fc(t,Pp(i,2.5)),[0,1.5,0]),s=[t[0]-o[0],0,t[2]-o[2]],c=Dc(s);c[0]===0&&c[2]===0&&(c=[i[0],0,i[2]]);let u=Math.max(1,r),l=[o[0]+c[0]*u*1.3,o[1]+u*.75,o[2]+c[2]*u*1.3];return{waypoints:[e,l,a],finalPos:a}}function Or(e,t,n=35,o=28){let r=Lr(t),i=Oc(e,r),a=Lr(Math.max(0,Math.min(1,(t-.66)/.34)));return{pos:i,fov:n+(o-n)*a,eased:r}}function Gc(e,t,n){let o=e.position.clone(),r=new gt.Quat().copy(e.quaternion);e.position.set(t[0],t[1],t[2]),e.lookAt(new gt.Vec3(n[0],n[1],n[2]));let i=new gt.Quat().copy(e.quaternion);return e.position.copy(o),e.quaternion.copy(r),i}var yo=class{constructor(t){this.active=!1;this.waypoints=[];this.startQuat=new gt.Quat;this.endQuat=new gt.Quat;this.outQuat=new gt.Quat;this.startTime=0;this.duration=2500;this.endFov=28;this.resolveFn=null;this.camera=t}start(t,n,o,r=2500,i=28){return this.settle(),this.waypoints=t,this.startQuat.copy(n),this.endQuat.copy(o),this.duration=r,this.endFov=i,this.startTime=performance.now(),this.active=!0,new Promise(a=>{this.resolveFn=a})}update(t){if(!this.active)return!1;let n=Math.min(1,(t-this.startTime)/this.duration),{pos:o,fov:r,eased:i}=Or(this.waypoints,n,35,this.endFov);return this.camera.position.set(o[0],o[1],o[2]),this.outQuat.copy(this.startQuat).slerp(this.endQuat,Fr(i,.15)),this.camera.quaternion.copy(this.outQuat),this.camera.fov=r,this.camera.updateProjectionMatrix(),n>=1?(this.settle(),!1):!0}cancel(){this.settle()}settle(){this.active=!1;let t=this.resolveFn;this.resolveFn=null,t&&t()}};var Hc=Bo,Ip=.12,Cp=.25,Rp=1.5;function zc(e,t,n=0,o,r){let i=[t.x*E,n+Rp,t.y*E],a=r?[r[0],r[1],r[2]]:i,s=e[1],c=Number.isFinite(s)?s+Hc:Number.isFinite(o)?n+o:n+Hc,u=i[0]-e[0],l=i[2]-e[2],m=Math.hypot(u,l),h=m>.001?Math.min(Ip,m*Cp):0,d=m>.001?u/m:0,f=m>.001?l/m:0;return{eye:[e[0]+d*h,c,e[2]+f*h],focal:a}}var kt=Math.PI/180,Ap=45,Uc=80,go=70,Ep=1,_p=.99;function Tp(e,t){if(!(e<Ep))return Uc;if(!(Number.isFinite(t)&&t>0))return go;let n=2*Math.atan(t/(2*xo*_p)/Math.max(.05,e))/kt;return Math.max(go,Math.min(Uc,n))}var kp=.25,xo=1,Lp=.25,Fp=12*kt,Dp=.2,Op=1.5,jc=.8,Xc=6,qc=1.9,Bp=2/3,Np=.12,Vp=.9,Gp=1.2,Hp=2,$c=.05,zp=6;function Zc(e,t,n=0){if(!e.length)return{min:[t[0]-6,n,t[2]-6],max:[t[0]+6,Math.max(n+jc,t[1]),t[2]+6]};let o=1/0,r=-1/0,i=1/0,a=-1/0,s=n;for(let f of e)o=Math.min(o,f.cx-f.halfX),r=Math.max(r,f.cx+f.halfX),i=Math.min(i,f.cz-f.halfZ),a=Math.max(a,f.cz+f.halfZ),s=Math.max(s,f.y);let c=r-o,u=a-i,l=Math.max(c,Math.min(u,Xc))/2,m=Math.max(u,Math.min(c,Xc))/2,h=(o+r)/2,d=(i+a)/2;return{min:[h-l,n,d-m],max:[h+l,Math.max(n+jc,s),d+m]}}function Up(e){return{min:[e.min[0],e.min[1],e.min[2]],max:[e.max[0],e.max[1]+qc,e.max[2]]}}function Br(e){let t=e.max[1];return[(e.min[0]+e.max[0])/2,Math.max(e.min[1]+Op,t+Dp,t+qc*Bp),(e.min[2]+e.max[2])/2]}function Qc(e,t){let n=e[0]-t[0],o=e[2]-t[2],r=Math.hypot(n,o);return r<.001?{x:0,z:1}:{x:n/r,z:o/r}}function Wc(e,t,n){let o=t[0]-e[0],r=t[1]-e[1],i=t[2]-e[2],a=Math.hypot(o,r,i)||1;o/=a,r/=a,i/=a;let s=-i,c=o,u=Math.hypot(s,c);if(u<1e-6)return 1/0;s/=u,c/=u;let l=1/0,m=-1/0;for(let h=0;h<8;h++){let d=(h&1?n.max[0]:n.min[0])-e[0],f=(h&2?n.max[1]:n.min[1])-e[1],p=(h&4?n.max[2]:n.min[2])-e[2],b=Math.max($c,d*o+f*r+p*i),y=(d*s+p*c)/b;y<l&&(l=y),y>m&&(m=y)}return m-l}function Yc(e,t,n){let o=t[0]-e[0],r=t[1]-e[1],i=t[2]-e[2],a=Math.hypot(o,r,i)||1;o/=a,r/=a,i/=a;let s=-i,c=o,u=Math.hypot(s,c);if(u<1e-6)return 1/0;s/=u,c/=u;let l=-c*r,m=c*o-s*i,h=s*r,d=1/0,f=-1/0;for(let p=0;p<8;p++){let b=(p&1?n.max[0]:n.min[0])-e[0],y=(p&2?n.max[1]:n.min[1])-e[1],g=(p&4?n.max[2]:n.min[2])-e[2],x=Math.max($c,b*o+y*r+g*i),w=(b*l+y*m+g*h)/x;w<d&&(d=w),w>f&&(f=w)}return f-d}function vo(e,t){return Math.tan(e*kt/2)*Math.max(.05,t)}function Kc(e,t,n){let o=Tp(n,e),r=c=>Math.max(Ap,Math.min(o,c)),i=c=>2*Math.atan(c)/kt,a=Number.isFinite(e)&&e>0?r(i(e/(2*kp)/Math.max(.05,n))):o;if(!(Number.isFinite(t)&&t>0))return a;let s=Math.min(a,r(i(t/(2*Np))));return e/(2*vo(s,n))>xo?a:s}function Jc(e,t,n,o={}){let r=Br(t),i=[e[0],e[1],e[2]],a=0,s=0,c=f=>{if(!(f>0))return;let p=Qc(i,r);i[0]+=p.x*f,i[2]+=p.z*f,s+=f},u=o.preserveEye?0:t.max[1]+Lp-i[1];u>0&&(i[1]+=u,a=u,c(u/Math.tan(Fp)));let l=Up(t),m=Wc(i,r,t),h=Kc(m,Yc(i,r,l),n),d=m/(2*vo(h,n));for(let f=0;!o.preserveEye&&f<zp&&d>xo;f++){let p=Math.max(1,Math.hypot(i[0]-r[0],i[2]-r[2])),b=Number.isFinite(d)?d/xo:2;c(Math.min(60,p*(Math.min(4,b)-1)+.5)),m=Wc(i,r,t),h=Kc(m,Yc(i,r,l),n),d=m/(2*vo(h,n))}return{eye:i,focal:r,fov:h,raisedM:a,pulledBackM:s,stageFrameWidth:d}}function jp(e,t,n){let o=Math.tan(t*kt/2),r=vo(t,n);return Math.max(1,e/Math.max(.05,Math.min(o,r)))}function el(e,t){let{aspect:n,venue:o}=t,r=e.focal,i=Qc(e.eye,r),a=h=>(h[0]-r[0])*i.x+(h[2]-r[2])*i.z,s=[{name:"seat",eye:e.eye,focal:r,fov:e.fov}],c=Hp*(t.rowDepthM??Vp);s.push({name:"row",eye:[e.eye[0]+i.x*c,e.eye[1]+Gp,e.eye[2]+i.z*c],focal:r,fov:e.fov});let u=(h,d,f,p)=>{let b=jp(f,e.fov,n)*1.08,y=b*Math.sin(p*kt),g=Number.isFinite(t.seatingTopY)?t.seatingTopY+2:-1/0,x=Math.max(y,g-d[1]),w=b*Math.cos(p*kt);return{name:h,eye:[d[0]+i.x*w,d[1]+x,d[2]+i.z*w],focal:d,fov:e.fov}};t.section&&t.section.radius>0&&s.push(u("section",t.section.center,t.section.radius,35)),s.push(u("venue",o.center,Math.max(1,o.radius),40));let l=[],m=-1/0;for(let h of s){let d=a(h.eye);l.length&&d<=m+.5||(l.push(h),m=d)}return l}var il=require("ogl"),Cn=Math.PI/180,tl=320,nl=70*Cn,Xp=32*Cn,Wp=24*Cn,ol=.0026,Yp=.22,Kp=.006,qp=180,$p=4,Ne=(e,t,n)=>Math.max(t,Math.min(n,e)),rl=e=>e<.5?4*e*e*e:1-Math.pow(-2*e+2,3)/2;function al(e){let{canvas:t,camera:n}=e,o=[],r=!1,i=0,a=0,s=0,c=0,u=0,l=0,m=!1,h=[0,0],d=0,f=!1,p=null,b=null,y=new Map,g=!1,x=0,w=0,I=0,v=0,P=()=>r&&o.length?o[Ne(Math.round(i),0,o.length-1)].name:null,S=()=>{let k=P();k!==p&&(p=k,e.onStopChange?.(k))},M=()=>{if(!r||!o.length)return;let k=o[Ne(Math.floor(i),0,o.length-1)],V=o[Ne(Math.ceil(i),0,o.length-1)],F=Ne(i-Math.floor(i),0,1),B=(oe,te)=>oe+(te-oe)*F,z=[B(k.eye[0],V.eye[0]),B(k.eye[1],V.eye[1]),B(k.eye[2],V.eye[2])],U=[B(k.focal[0],V.focal[0]),B(k.focal[1],V.focal[1]),B(k.focal[2],V.focal[2])],G=U[0]-z[0],H=U[1]-z[1],K=U[2]-z[2],Q=Math.hypot(G,H,K)||1,Y=Math.atan2(G,K),W=Math.asin(Ne(H/Q,-1,1)),Z=Y+a,ee=Ne(W+s,-80*Cn,80*Cn),q=Math.cos(ee)*Q;G=Math.sin(Z)*q,H=Math.sin(ee)*Q,K=Math.cos(Z)*q,n.position.set(z[0],z[1],z[2]),n.fov=B(k.fov,V.fov),n.updateProjectionMatrix(),n.lookAt(new il.Vec3(z[0]+G,z[1]+H,z[2]+K)),e.onApplied?.()},C=()=>{if(!r||!o.length)return;let k=Ne(Math.round(i),0,o.length-1);if(e.reducedMotion()){m=!1,i=k,M(),S(),e.requestRender();return}if(Math.abs(k-i)<.001){m=!1,S();return}c=i,u=k,l=performance.now(),m=!0,e.requestRender()},T=k=>{!r||o.length<2||(m=!1,i=Ne(i+k,0,o.length-1),M(),S(),e.requestRender())},N=(k,V)=>{r&&(m=!1,f=!1,a=Ne(a-k*ol,-nl,nl),s=Ne(s-V*ol,-Wp,Xp),M(),e.requestRender())},D=k=>{r&&(y.set(k.pointerId,{x:k.clientX,y:k.clientY}),y.size===1?(g=!0,v=0,x=k.clientX,w=k.clientY):y.size===2&&(g=!1,I=R()))},R=()=>{let k=[...y.values()];return k.length<2?0:Math.hypot(k[0].x-k[1].x,k[0].y-k[1].y)},A=k=>{if(!r||!y.has(k.pointerId))return;if(y.set(k.pointerId,{x:k.clientX,y:k.clientY}),y.size>=2){let B=R();I>0&&T((I-B)*Kp),I=B;return}if(!g)return;let V=k.clientX-x,F=k.clientY-w;x=k.clientX,w=k.clientY,v+=Math.abs(V)+Math.abs(F),!(v<=$p)&&N(V,F)},L=k=>{y.delete(k.pointerId)&&(y.size<2&&(I=0),y.size===0&&(g=!1,C()))},O=k=>{if(!r)return;k.preventDefault();let V=k.deltaMode===1?16:k.deltaMode===2?100:1,F=Ne(k.deltaY*V/100,-2,2);T(F*Yp),b&&clearTimeout(b),b=setTimeout(()=>{b=null,C()},qp)},_=()=>{r&&(r=!1,m=!1,f=!1,o=[],y.clear(),g=!1,b&&(clearTimeout(b),b=null),p!==null&&(p=null,e.onStopChange?.(null)))};return t.addEventListener("pointerdown",D),t.addEventListener("pointermove",A),t.addEventListener("pointerup",L),t.addEventListener("pointercancel",L),t.addEventListener("wheel",O,{passive:!1}),{get active(){return r},enter(k){if(k.length<2){_();return}o=k,r=!0,i=0,a=0,s=0,m=!1,f=!1,p=null,M(),S(),e.requestRender()},exit:_,recentre(){return r?Math.abs(a)<1e-4&&Math.abs(s)<1e-4?!0:e.reducedMotion()?(f=!1,a=0,s=0,M(),e.requestRender(),!0):(h=[a,s],d=performance.now(),f=!0,e.requestRender(),!0):!1},update(k){if(!r)return!1;let V=!1;if(f){let F=Ne((k-d)/tl,0,1),B=1-rl(F);a=h[0]*B,s=h[1]*B,F>=1?(f=!1,a=0,s=0):V=!0}if(m){let F=Ne((k-l)/tl,0,1);i=c+(u-c)*rl(F),F>=1?(m=!1,i=u,S()):V=!0}return M(),V},currentStop:P,dispose(){_(),t.removeEventListener("pointerdown",D),t.removeEventListener("pointermove",A),t.removeEventListener("pointerup",L),t.removeEventListener("pointercancel",L),t.removeEventListener("wheel",O)}}}function sl(e){return e.flying?"cinematic":e.panoramaMounted?"panorama":e.seatViewActive?"seatView":"orbit"}var Hr=null;function vl(){return Hr??=Promise.resolve().then(()=>(xl(),gl)).catch(e=>{throw Hr=null,e}),Hr}var Ml=()=>typeof performance<"u"&&performance.now?performance.now():Date.now(),Ro=class{constructor(t){this.orbitLatched=!1;this.panoramaOpenedAt=0;this.cb=t}emit(t,n){if(this.cb)try{this.cb(t,n)}catch{}}opened(t,n,o,r){this.emit("3d_opened",{seats:t,hasHeights:n,...o===void 0?{}:{buildMs:Math.round(o)},...r===void 0?{}:{prepSource:r}})}orbitEngaged(){this.orbitLatched||(this.orbitLatched=!0,this.emit("3d_orbit_engaged"))}seatPicked(t,n){this.emit("3d_seat_picked",{seatId:t,sectionId:n})}cinematicPlayed(t){this.emit("3d_cinematic_played",{durationMs:t,reducedMotion:!1})}cinematicSkipped(){this.emit("3d_cinematic_skipped",{reducedMotion:!0})}cinematicCancelled(){this.emit("3d_cinematic_cancelled")}panoramaOpened(){this.panoramaOpenedAt=Ml(),this.emit("3d_panorama_opened")}panoramaClosed(){let t=this.panoramaOpenedAt?Math.round(Ml()-this.panoramaOpenedAt):0;this.panoramaOpenedAt=0,this.emit("3d_panorama_closed",{viewMs:t})}panoramaFailed(t,n){this.emit("3d_panorama_failed",{seatId:t,phase:n})}panoramaFallback(t){this.emit("3d_panorama_fallback",{seatId:t})}contextLost(){this.emit("3d_context_lost")}contextRestored(){this.emit("3d_context_restored")}};function Sl(e){let t=e.style.position;return getComputedStyle(e).position!=="static"?()=>{}:(e.style.position="relative",()=>{e.style.position==="relative"&&(e.style.position=t)})}function wl(e){let{container:t,model:n,opts:o,expandedSeatById:r,seatIdsByRow:i,isNarrow:a}=e,s=null,c=()=>{if(!s)return;let m=a();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,h,d=!1)=>{if(u(),e.isDisposed())return null;let f=document.createElement("div");f.setAttribute("role","group"),Object.assign(f.style,{position:"absolute",display:"flex",flexDirection:"column",alignItems:"center",gap:"6px",zIndex:"4"});let p=o.chrome?.caption!==!1,b=o.chrome?.seatStepper!==!1;if(!p&&!b)return null;let y=r.get(m),g=y?.sectionId?n.sections.find(C=>C.id===y.sectionId):void 0,x=y?.label??m;f.setAttribute("aria-label",`Explore views near ${g?.label?`${g.label}, `:""}seat ${x}`);let w=document.createElement("span");w.textContent=o.seatViewCaption?.(m)??["Live 3D seat view",g?.label,x].filter(Boolean).join(" \xB7 "),Object.assign(w.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)"}),p&&f.appendChild(w);let I=document.createElement("div");Object.assign(I.style,{display:"flex",alignItems:"center",justifyContent:"center",gap:"6px"}),f.appendChild(I);let v=y?.rowId?i.get(y.rowId):void 0,P=v?.indexOf(m)??-1,S=P>=0?[v?.[P-1],v?.[P+1]]:[void 0,void 0],M=(C,T,N,D=!1)=>{let R=document.createElement("button");R.type="button",R.textContent=C,R.setAttribute("aria-label",T),Object.assign(R.style,{minHeight:"44px",padding:D?"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"}),D||(R.style.minWidth="44px"),D&&(R.dataset.panoramaTrigger=""),R.addEventListener("click",N),I.appendChild(R)};if(b&&S[0]){let C=r.get(S[0])?.label??S[0];M("\u2039",`View previous seat ${C}`,()=>{e.flyToSeat(S[0])})}if(b&&o.getSeatView){let C=o.seatViewActionLabel?.(m)??"Open 360\xB0 panorama";M(d?`\u21BB Retry ${C}`:`\u25C9 ${C}`,`${d?"Retry":C} from seat ${x}`,()=>{if(e.isDisposed()||h!==e.flightGen()){u();return}u(),e.openPanorama(m,400,h)},!0)}if(b&&S[1]){let C=r.get(S[1])?.label??S[1];M("\u203A",`View next seat ${C}`,()=>{e.flyToSeat(S[1])})}return!I.childElementCount&&!p?null:(t.appendChild(f),s=f,c(),f)},remove:u,layout:c}}var mb={rotate:"Drag to rotate the venue",move:"Drag to move the venue",zoomIn:"Zoom in",zoomOut:"Zoom out",fitView:"Show whole venue"};function Pl(e){let{container:t,orbit:n,isNarrow:o}=e,r={...mb,...e.labels??{}},i=(x,w)=>{x.setAttribute("aria-label",w),x.title=w},a=document.createElement("div"),s=!1;a.className="sl-3d-navigation-controls",Object.assign(a.style,{position:"absolute",right:"14px",bottom:"14px",display:"flex",zIndex:"4",flexDirection:"column",alignItems:"flex-end",gap:"7px"});let c=document.createElement("div");c.setAttribute("role","group"),c.setAttribute("aria-label","3D drag mode"),Object.assign(c.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 l=document.createElement("button");l.type="button",l.textContent="\u21BB",i(l,r.rotate);let m=document.createElement("button");m.type="button",m.textContent="\u2725",i(m,r.move);let h=document.createElement("button");h.type="button",h.textContent="\u2212",i(h,r.zoomOut);let d=document.createElement("button");d.type="button",d.textContent="+",i(d,r.zoomIn);for(let x of[l,m,h,d])x.className="sl-3d-icon-control",Object.assign(x.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"});c.append(l,m),u.append(d,h);let f=x=>{n.setPrimaryDragMode(x);let w=x==="orbit";l.setAttribute("aria-pressed",String(w)),m.setAttribute("aria-pressed",String(!w)),l.style.background=w?"rgba(96,110,150,0.68)":"rgba(12,18,32,0.82)",m.style.background=w?"rgba(12,18,32,0.82)":"rgba(96,110,150,0.68)",a.title=w?`${r.rotate} \xB7 ${r.move} with Shift`:`${r.move} \xB7 ${r.rotate} with Shift`};l.addEventListener("click",()=>f("orbit")),m.addEventListener("click",()=>f("pan"));let p=()=>{let{atMin:x,atMax:w}=n.dollyLimitState();d.disabled!==x&&(d.disabled=x),h.disabled!==w&&(h.disabled=w)};h.addEventListener("click",()=>{n.zoomBy(ln),p()}),d.addEventListener("click",()=>{n.zoomBy(Dt),p()}),a.append(c,u),f("orbit"),t.appendChild(a);let b=e.enabled!==!1,y=()=>{let x=o();a.style.display=s||!b?"none":"flex",a.style.right=x?"12px":"14px",a.style.bottom=x?"calc(env(safe-area-inset-bottom, 0px) + 76px)":"14px",c.style.display=x?"none":"flex",d.style.display=x?"none":"",h.style.display=x?"none":""};return y(),{element:a,utilityControls:u,setNavigationMode:f,syncZoomLimits:p,setSeatViewLocked:x=>{s=x,n.setInteractionEnabled(!x),y()},seatViewLocked:()=>s,layout:y}}var fb=12;function db(e,t){if(!e)return!1;let n=e.x-t[0],o=e.y-t[1],r=e.z-t[2];return Math.hypot(n,o,r)>fb}function Il(e){let{glctx:t,orbit:n,model:o,seats:r,opts:i,cinematic:a,analytics:s,seatIdByIndex:c,sectionIdBySeatId:u,tapSlop:l,tapMs:m,cancelFlight:h,focusSectionCamera:d,setSelection:f,ensureSeatView:p}=e,b=0,y=0,g=0,x=-1,w=!1,I=!1,v=T=>{e.seatViewLocked()||x===-1&&(x=T.pointerId,b=T.clientX,y=T.clientY,g=performance.now(),w=!1,I=a.active,a.active&&(s.cinematicCancelled(),h(),i.onViewTargetChange?.(null)))},P=T=>{T.pointerId===x&&Math.hypot(T.clientX-b,T.clientY-y)>l&&(w=!0)},S=(T,N,D,R,A)=>{let L=t.canvas.getBoundingClientRect(),O=t.canvas.clientWidth||L.width||1,_=t.canvas.clientHeight||L.height||1,k=T-L.left,V=N-L.top,F=R*R,B=-1,z=F,U=1/0;for(let G of r){if(D&&G.sectionId!==D)continue;let H=o.seats.idToIndex.get(G.id);if(H===void 0)continue;if(A){let ee=Math.round(o.seats.iState[H]??0);if(ee!==0&&ee!==3)continue}let K=H*3,Q=bt(n.camera.projectionViewMatrix,[o.seats.iPosition[K],o.seats.iPosition[K+1]+.55,o.seats.iPosition[K+2]],O,_);if(!Q.visible)continue;let Y=Q.x-k,W=Q.y-V,Z=Y*Y+W*W;(Z<z||Math.abs(Z-z)<1&&Q.depth<U)&&(B=H,z=Z,U=Q.depth)}return B},M=(T,N)=>{let D=e.gpu(),R=e.pick();if(!D||!R)return-1;R.syncFromSeatProgram(D.seatProgram);let A=t.canvas.getBoundingClientRect(),L=t.renderer.dpr,{x:O,y:_}=Tc(T,N,A,L,t.gl.drawingBufferWidth,t.gl.drawingBufferHeight),k=Math.max(2,Math.round(8*L));return R.pick(n.camera,O,_,k)};return{onDown:v,onMove:P,onUp:T=>{if(T.pointerId!==x)return;let N=!w&&performance.now()-g<m;if(x=-1,I){I=!1;return}let D=e.gpu(),R=e.pick();if(!N||!D||!R)return;let A=M(T.clientX,T.clientY);if(e.focusedSectionId()&&A>=0){let _=c[A],k=_?u.get(_):void 0;if(k&&k!==e.focusedSectionId()&&d(k))return}if(e.focusedSectionId()&&A<0&&(A=S(T.clientX,T.clientY,e.focusedSectionId(),44,!1)),e.focusedSectionId()&&A<0){let _=S(T.clientX,T.clientY,null,72,!1),k=_>=0?c[_]:void 0,V=k?u.get(k):void 0;if(V&&V!==e.focusedSectionId()&&d(V))return}if(!e.focusedSectionId()){A<0&&(A=S(T.clientX,T.clientY,null,42,!1));let _=A>=0?c[A]:void 0,k=_?u.get(_):void 0;if(k&&d(k))return}if(A<0||A>=c.length){e.selection().size&&(f([]),i.onViewTargetChange?.(null));return}let L=c[A],O=Ae[Math.round(o.seats.iState[A]??0)]??"available";if(O!=="available"&&O!=="selected"){i.onSeatInspect?.(L,O);return}if(e.selection().has(L)&&e.selection().size===1){f([]),i.onViewTargetChange?.(null),i.onSeatPick?.(L);return}if(f([L]),p(L),s.seatPicked(L,u.get(L)),i.onSeatPick?.(L),e.focusedSectionId()){let _=A*3,k=[o.seats.iPosition[_],o.seats.iPosition[_+1],o.seats.iPosition[_+2]];db(n.camera?.position,k)&&e.focusSeatCamera(L)}}}}var Ao=class{constructor(t,n){this.minX=0;this.minZ=0;this.cell=1;this.cols=1;this.rows=1;this.cellStart=null;this.cellItems=null;this.iPosition=t,this.count=n}ensureGrid(){if(this.cellStart||this.count===0)return;let t=this.iPosition,n=1/0,o=1/0,r=-1/0,i=-1/0;for(let d=0;d<this.count;d++){let f=t[d*3],p=t[d*3+2];f<n&&(n=f),f>r&&(r=f),p<o&&(o=p),p>i&&(i=p)}let a=Math.max(r-n,.001),s=Math.max(i-o,.001);this.cell=Math.max(Math.sqrt(a*s*4/this.count),.25),this.cols=Math.max(1,Math.ceil(a/this.cell)+1),this.rows=Math.max(1,Math.ceil(s/this.cell)+1),this.minX=n,this.minZ=o;let c=this.cols*this.rows,u=new Int32Array(c+1),l=d=>{let f=Math.min(this.cols-1,Math.max(0,Math.floor((t[d*3]-n)/this.cell)));return Math.min(this.rows-1,Math.max(0,Math.floor((t[d*3+2]-o)/this.cell)))*this.cols+f};for(let d=0;d<this.count;d++)u[l(d)+1]++;for(let d=0;d<c;d++)u[d+1]+=u[d];let m=new Int32Array(this.count),h=u.slice(0,c);for(let d=0;d<this.count;d++)m[h[l(d)]++]=d;this.cellStart=u,this.cellItems=m}gather(t,n,o,r,i){this.ensureGrid();let a=this.cellStart,s=this.cellItems;if(!a||!s)return 0;let c=r.length,u=o*o,l=Math.floor((t-this.minX)/this.cell),m=Math.floor((n-this.minZ)/this.cell),h=Math.ceil(o/this.cell)+1,d=this.iPosition,f=0;for(let p=0;p<=h&&f<c;p++){let b=m-p,y=m+p,g=l-p,x=l+p;for(let w=b;w<=y&&f<c;w++){if(w<0||w>=this.rows)continue;let I=w===b||w===y;for(let v=g;v<=x&&f<c;v++){if(!I&&v!==g&&v!==x){v=x-1;continue}if(v<0||v>=this.cols)continue;let P=w*this.cols+v;for(let S=a[P],M=a[P+1];S<M&&f<c;S++){let C=s[S],T=d[C*3]-t,N=d[C*3+2]-n,D=i===void 0?0:d[C*3+1]-i;T*T+D*D+N*N<=u&&(r[f++]=C)}}}}return f}};var Eo=class{constructor(t){this.ctx=t;this.detailVisible=!1;this.seatDetailMix=0;this.structureDetailMix=0;this.nearBuf=new Int32Array(Bn);this.lastGatherX=1/0;this.lastGatherZ=1/0;this.lastGatherY=1/0;this.nearIndex=new Ao(t.model.seats.iPosition,t.model.seats.count)}forceRegather(){this.lastGatherX=1/0}setDetailEnabled(t){let n=this.ctx.gpu();t||(this.detailVisible=!1),this.lastGatherX=1/0,this.lastGatherZ=1/0,!t&&n?.nearSeatCount()&&n.setNearSeats(this.nearBuf,0)}update(t){let{model:n}=this.ctx,o=this.ctx.gpu();if(!o)return;if(!t){o.nearSeatCount()&&o.setNearSeats(this.nearBuf,0);return}let r=this.ctx.orbit().camera.position;if(Math.hypot(r.x-this.lastGatherX,r.y-this.lastGatherY,r.z-this.lastGatherZ)<jo)return;if(this.lastGatherX=r.x,this.lastGatherY=r.y,this.lastGatherZ=r.z,Math.hypot(r.x-n.bounds.center[0],r.y-n.bounds.center[1],r.z-n.bounds.center[2])-n.bounds.radius>Uo){o.nearSeatCount()&&o.setNearSeats(this.nearBuf,0);return}let s=this.nearIndex.gather(r.x,r.z,Uo,this.nearBuf,r.y);s===0&&o.nearSeatCount()===0||o.setNearSeats(this.nearBuf,s)}ease(t,n,o){let r=1-Math.exp(-t*9),i=1-Math.exp(-t*20);this.seatDetailMix+=(n-this.seatDetailMix)*(n>this.seatDetailMix?r:i),this.structureDetailMix+=(o-this.structureDetailMix)*(o>this.structureDetailMix?r:i),Math.abs(n-this.seatDetailMix)<.01&&(this.seatDetailMix=n),Math.abs(o-this.structureDetailMix)<.01&&(this.structureDetailMix=o)}};function Cl(e){let t=Math.max(5,e.radius),n=e.focalWorld[0]-e.center[0],o=e.focalWorld[2]-e.center[2],r=Math.hypot(n,o);if(r<t*.12)return{center:e.center,radius:t,polarDeg:48};let i=Math.min(r*.25,t*1.2);return{center:[e.center[0]+n/r*i,e.center[1],e.center[2]+o/r*i],radius:t+i*.4,azimuth:Math.atan2(-n,-o),polarDeg:50}}var _o=require("ogl");function Rl(){let e="http://www.w3.org/2000/svg",t=document.createElementNS(e,"svg");t.setAttribute("viewBox","0 0 24 24"),t.setAttribute("width","18"),t.setAttribute("height","18"),t.setAttribute("aria-hidden","true"),t.setAttribute("focusable","false"),t.setAttribute("fill","none"),t.setAttribute("stroke","currentColor"),t.setAttribute("stroke-width","2"),t.setAttribute("stroke-linecap","round"),t.setAttribute("stroke-linejoin","round");let n=document.createElementNS(e,"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"),t.appendChild(n),t}function _l(e){let{container:t,model:n,opts:o,orbit:r,cinematic:i,analytics:a,loop:s,labelOverlay:c,stageAzimuth:u,overviewFraming:l}=e,m=0,h=-1,d=(P,S,M=28)=>{r.camera.position.set(P[0],P[1],P[2]),r.camera.lookAt(new _o.Vec3(S[0],S[1],S[2])),r.camera.fov=M,r.camera.updateProjectionMatrix()},f=document.createElement("button");f.className="sl-3d-overview-control sl-3d-icon-control",f.type="button",f.replaceChildren(Rl());let p=o.navLabels?.fitView??"Show whole venue";f.setAttribute("aria-label",p),f.title=p,Object.assign(f.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 b=()=>{f.firstElementChild||f.replaceChildren(Rl())};b();let y=P=>{h=P;let S=e.gpu();S&&(S.seatProgram.uniforms.uFocusFloor.value=P,S.solidProgram.uniforms.uFocusFloor.value=P,S.chairProgram.uniforms.uFocusFloor.value=P),e.showSectionSeatLabels(null)},g=()=>{if(e.isDisposed())return;o.onViewTargetChange?.(null),o.onSectionFocusChange?.(null),e.panorama()&&(e.panorama().dispose(),e.setPanorama(null),a.panoramaClosed()),e.setPanoramaSphereVisible(!1),e.panoramaLoadAbort()?.abort(),e.setPanoramaLoadAbort(null),e.restorePanoramaLayer(),f.style.display="",c.setVisible(!0),e.setFrozen(!1);let P=h>=0?n.floors[h]:null;if(e.setNearFieldDetailEnabled(!!P),e.setSeatViewLocked(!1),x(),e.removeArriveChip(),e.setNavigationMode("orbit"),P){let S=P.focalWorld[0]-P.center[0],M=P.focalWorld[2]-P.center[2],C=Math.hypot(S,M)>P.radius*.12?Math.atan2(S,M):u,T={center:P.center,radius:P.radius,box:P.box},N={polarDeg:58,margin:1.12};e.reducedMotion()?r.frame(T,!1,C,!1,N):r.frameSoft(T,C,!1,N)}else e.reducedMotion()?r.frame(n.bounds,!1,u,o.portraitOverviewCrop===!0,l):r.frameSoft(n.bounds,u,o.portraitOverviewCrop===!0,l);e.showSectionSeatLabels(null),s.requestRender()},x=()=>{m++,e.setSeatStepping(!1),e.panoramaLoadAbort()?.abort(),e.setPanoramaLoadAbort(null),i.active&&(i.cancel(),r.resumeAfterFlight(n.focalWorld))},w=P=>{if(e.isDisposed()||!e.gpu())return Promise.resolve();let S=n.seats.idToIndex.get(P);if(S===void 0)return Promise.resolve();e.setNearFieldDetailEnabled(!0),o.onViewTargetChange?.(P),e.panorama()&&(e.panorama().dispose(),e.setPanorama(null),e.setPanoramaSphereVisible(!1),f.style.display="",e.restorePanoramaLayer()),e.panoramaLoadAbort()?.abort(),e.setPanoramaLoadAbort(null),e.setFrozen(!1);let M=e.inSeatView()&&o.arriveAtSeatEye===!0;e.setSeatStepping(M),e.setSeatViewLocked(!1);let C=++m;M?e.showArriveChip(P,C):e.removeArriveChip();let{eye:T,focal:N}=e.resolvedSeatViewPose(P,S),D=o.arriveAtSeatEye?e.seatViewArrival(P,S):null,R=D?D.focal:N,A=[r.camera.position.x,r.camera.position.y,r.camera.position.z],L=Dr(A,D?.eye??T,R,n.bounds.center,n.bounds.radius),O=D?D.eye:o.arriveAtSeatEye?T:L.finalPos,_=D?D.fov:o.arriveAtSeatEye?t.clientWidth/Math.max(1,t.clientHeight)<.7?go:65:28,k=[L.waypoints[0],L.waypoints[1],O];if(c.setVisible(!1),e.reducedMotion())return e.setSeatStepping(!1),d(O,R,_),s.requestRender(),a.cinematicSkipped(),e.isDisposed()||r.syncFromCamera(),e.setSeatViewLocked(o.arriveAtSeatEye===!0),D&&e.enterSeatView(D.stops),e.showArriveChip(P,C),Promise.resolve();let V=new _o.Quat().copy(r.camera.quaternion),F=Gc(r.camera,O,R);s.requestRender();let B=M?700:2500;return i.start(k,V,F,B,_).then(()=>{e.isDisposed()||C!==m||(e.setSeatStepping(!1),a.cinematicPlayed(B),r.resumeAfterFlight(R),e.setSeatViewLocked(o.arriveAtSeatEye===!0),D&&e.enterSeatView(D.stops),s.requestRender(),e.showArriveChip(P,C))})},I=P=>{let S=n.sections.find(C=>C.id===P);if(!S||S.seatCount===0)return!1;e.setNearFieldDetailEnabled(!0),e.setSeatStepping(!1),e.setSeatViewLocked(!1),i.cancel(),e.removeArriveChip(),n.floors.length>1&&h!==S.floorIndex&&y(S.floorIndex),e.setNavigationMode("pan"),e.panorama()||c.setVisible(!0),e.showSectionSeatLabels(P);let M=Cl(S);return r.frame({center:M.center,radius:M.radius},!1,M.azimuth,!1,{polarDeg:M.polarDeg,margin:1.12}),o.onSectionFocusChange?.(P),s.requestRender(),!0},v=P=>{if(e.isDisposed()||!e.gpu())return!1;let S=n.seats.idToIndex.get(P);if(S===void 0)return!1;let M=S*3,C=[n.seats.iPosition[M],n.seats.iPosition[M+1]+.55,n.seats.iPosition[M+2]];return e.reducedMotion()?r.frame({center:C,radius:Al},!1,void 0,!1,El):r.frameSoft({center:C,radius:Al},void 0,!1,El),s.requestRender(),!0};return f.addEventListener("click",g),{overviewChip:f,layoutOverviewChip:b,flightGen:()=>m,focusedFloor:()=>h,applyFloorFocus:y,placeCameraFinal:d,cancelFlight:x,focusOverview:g,flyToSeat:w,focusSectionCamera:I,focusSeatCamera:v}}var Al=4.5,El={polarDeg:48,margin:1.25};function An(e,t){let{doc:n,report:o}=lo(e),r=o.confident&&(o.sections.length>0||!!o.looseRowBlocks);if(!r&&!o.roles?.length)return null;if(!r){let c=new Map(o.roles.map(d=>[d.id,d.role])),u=d=>d.map(f=>f.type==="shape"&&c.has(f.id)?{...f,role:c.get(f.id)}:f),l=e.floors?.map(d=>({...d,objects:u(d.objects)})),m=new Float64Array(t.length).fill(Number.NaN),h=new Float64Array(t.length*2).fill(Number.NaN);return t.forEach((d,f)=>{d.eyeHeightM!==void 0&&(m[f]=d.eyeHeightM),d.focalPoint&&(h[f*2]=d.focalPoint.x,h[f*2+1]=d.focalPoint.y)}),{doc:{...e,objects:l?.[0]?.objects??u(e.objects),...l?{floors:l}:{}},report:o,eyeHeightM:m,focal:h}}let i=new Map(Gt(n).map(c=>[c.id,c])),a=new Float64Array(t.length).fill(Number.NaN),s=new Float64Array(t.length*2).fill(Number.NaN);return t.forEach((c,u)=>{let l=i.get(c.id)??c;l.eyeHeightM!==void 0&&(a[u]=l.eyeHeightM),l.focalPoint&&(s[u*2]=l.focalPoint.x,s[u*2+1]=l.focalPoint.y)}),{doc:n,report:o,eyeHeightM:a,focal:s}}function zr(e,t){return e.map((n,o)=>{let r=t.eyeHeightM[o],i=t.focal[o*2],a=t.focal[o*2+1],s={...n};return Number.isNaN(r)?delete s.eyeHeightM:s.eyeHeightM=r,Number.isNaN(i)?delete s.focalPoint:s.focalPoint={x:i,y:a},s})}function Tl(e){let t=e.estimate===!1?null:An(e.doc,e.seats);return t?{input:{...e,doc:t.doc,seats:zr(e.seats,t)},estimate:t}:{input:e}}var pb={};function kl(e){let t=performance.now(),{input:n,estimate:o}=Tl(e);return{model:Kt(n),buildMs:performance.now()-t,source:"main",...o?{estimate:o}:{}}}function hb(e){let t=Gt(e.doc);return{...kl({...e,seats:t}),seats:t}}function Ll(e,t,n){if(typeof Worker>"u")return Promise.resolve(t());let o;try{o=new Worker(new URL("./scene/scene.worker.js",pb.url),{type:"module"})}catch{return Promise.resolve(t())}return new Promise(r=>{let i=!1,a=u=>{i||(i=!0,clearTimeout(c),o.terminate(),r(u))},s=()=>a(t()),c=window.setTimeout(s,15e3);o.onerror=s,o.onmessage=u=>{let l=n(u.data);l?a(l):s()},o.postMessage(e)})}function Fl(e){return Ll(e,()=>kl(e),({model:t,buildMs:n,estimate:o})=>({model:t,buildMs:n,source:"worker",...o?{estimate:o}:{}}))}function Dl(e){return Ll(e,()=>hb(e),({model:t,buildMs:n,seats:o,estimate:r})=>o?{model:t,buildMs:n,seats:o,source:"worker",...r?{estimate:r}:{}}:null)}var bb=Math.PI/180,yb=6,gb=500;function xb(e,t,n={}){let o=performance.now(),r=t.prepared?t.prepared.estimate:t.estimate===!1?null:An(t.doc,t.seats);r&&(t={...t,doc:r.doc,seats:zr(t.seats,r)});let i=t.prepared?.model??Kt(t),a=new Ro(n.onAnalytics),s=new Array(i.seats.count);for(let[j,X]of i.seats.idToIndex)s[X]=j;let c=new Map(t.seats.map(j=>[j.id,j])),u=new Map;for(let j of t.seats){if(!j.rowId)continue;let X=u.get(j.rowId);X?X.push(j.id):u.set(j.rowId,[j.id])}let l=new Map;t.seats.forEach((j,X)=>{l.set(j.id,i.seatSectionIds?.[X]??j.sectionId)});let m=new Map;for(let[j,X]of i.seats.idToIndex){let J=l.get(j);if(!J)continue;let ce=m.get(J);ce?ce.push(X):m.set(J,[X])}let h=()=>{if(!f||!i.sectionSolidRanges.length)return;let{lit:j,anyUnlit:X}=Cc(i.sectionSolidRanges,m,i.seats.iState);f.setSectionShellLit(X?j:null)},d=t.doc.floors?.some(X=>(X.baseHeightM??0)>0)?!0:(t.doc.floors?.flatMap(X=>X.objects)??t.doc.objects).some(X=>X.type==="section"&&((X.height??0)>0||(X.rake??0)>0)),f=null,p=null,b=!1,y=!1,g=!1,x=new Map,w=null,I=null,v=null,P=new Map,S=null,M=()=>{v===null&&(v=e.style.zIndex,e.style.zIndex="20")},C=()=>{v!==null&&(e.style.zIndex==="20"&&(e.style.zIndex=v),v=null)},T=!1,N=()=>T?Ce.focusedFloor():-1,D=()=>{f=Ec(O.gl,i),h(),ee(),p=new bo(O.renderer,f.seatGeometry,f.chairGeometry,f.solidGeometry,i.seats.count),O.setClearColor(i.theme.background.top),p.setRestoreClear(i.theme.background.top),f.seatProgram.uniforms.uSeatRadius.value=et*i.theme.seatScale,f.seatProgram.uniforms.uFocusFloor.value=N(),f.solidProgram.uniforms.uFocusFloor.value=N(),f.chairProgram.uniforms.uFocusFloor.value=N(),f.screenProgram&&(f.screenProgram.uniforms.uFocusFloor.value=N()),A.forceRegather()},R=!1,A=new Eo({model:i,orbit:()=>_,gpu:()=>f}),L=j=>A.setDetailEnabled(j),O=new Fn(e,{onContextLost:()=>{g||a.contextLost(),b=!0,ne.stop(),f=null,p=null},onContextRestored:()=>{D(),b=!1,g||a.contextRestored(),ne.requestRender()}}),_=new Dn(O.gl,O.canvas,()=>ne.requestRender(),()=>a.orbitEngaged());_.setAspect(O.aspect);let k=(t.doc.floors?.flatMap(j=>j.objects)??t.doc.objects).some(j=>j.type==="section"&&j.physical3dProvenance?.surfaceKind?.status==="inferred"),V=(()=>{if(Number.isFinite(n.overviewAzimuthDeg))return n.overviewAzimuthDeg*Math.PI/180;if(!(k&&i.stages.length===0))return $r(i.focalWorld,i.seats.iPosition,i.bounds)})(),F=(t.doc.floors?.flatMap(j=>j.objects)??t.doc.objects).some(j=>j.type==="shape"&&j.stageKind?.startsWith("pitch-")),B=i.floors.length>1?{polarDeg:48,margin:1.1}:{polarDeg:F?36:48,margin:1.05},z=typeof window<"u"&&!!window.matchMedia&&window.matchMedia("(prefers-reduced-motion: reduce)").matches;_.frame(i.bounds,!z&&n.skipInitialOverviewAnimation!==!0,V,n.portraitOverviewCrop===!0,B);let U=new yo(_.camera),G=Sl(e),H=new fo(e,{fontFamily:t.doc.theme?.fontFamily,ink:t.doc.theme?.textColor,backgroundRgb:i.theme.background.top}),K=i.labels,Q=()=>Ls(K,i.floors.length,N());H.setLabels(Q());let Y=null,W=()=>[...x.keys()].flatMap(j=>{let X=i.seats.idToIndex.get(j),J=X===void 0?void 0:t.seats[X];if(X===void 0||J?.id!==j)return[];let ce=X*3;return[{id:`seat:${j}`,kind:"seat",seatWidthM:i.seats.iChairWidth[X]*2,text:J.displayLabel||J.label,anchor:[i.seats.iPosition[ce],i.seats.iPosition[ce+1]+1.05,i.seats.iPosition[ce+2]]}]}),Z=-1,ee=()=>{f&&(Z=Y?i.sections.findIndex(j=>j.id===Y):-1,f.seatProgram.uniforms.uFocusSection.value=Z,f.chairProgram.uniforms.uFocusSection.value=Z)},q=j=>{if(Y=j,ee(),H.setForcedDense(!!j),!j){let se=W(),Re=new Set(se.map(Me=>Me.id));H.setLabels([...Q().filter(Me=>!Re.has(Me.id)),...se]);return}let X=t.seats.filter(se=>l.get(se.id)===j),J=new Set(X.map(se=>se.id)),ce=new Set(X.map(se=>se.rowId)),fe=new Set(x.keys()),be=new Set(X.filter(se=>fe.has(se.id)).map(se=>se.id)),xe=Q().filter(se=>se.kind!=="row"&&se.kind!=="seat"||(se.kind==="row"?ce.has(se.id.slice(4)):J.has(se.id.slice(5))&&(be.size===0||be.has(se.id.slice(5)))));if(i.seatCount<=6e3&&be.size===0){H.setLabels(xe);return}let we=be.size?X.filter(se=>be.has(se.id)):X,St=new Set(we.map(se=>`seat:${se.id}`)),wt=we.flatMap(se=>{let Re=i.seats.idToIndex.get(se.id);if(Re===void 0)return[];let Me=Re*3;return[{id:`seat:${se.id}`,kind:"seat",seatWidthM:i.seats.iChairWidth[Re]*2,text:fe.has(se.id)?se.displayLabel||se.label:Pr(se.displayLabel||se.label),anchor:[i.seats.iPosition[Me],i.seats.iPosition[Me+1]+(fe.has(se.id)?1.05:.55),i.seats.iPosition[Me+2]]}]});H.setLabels([...xe.filter(se=>!St.has(se.id)),...wt])};D();let oe=null,te=null,$=j=>{if(b||!f||y)return!1;let X=sl({flying:U.active,panoramaMounted:w!==null,seatViewActive:oe?.active===!0}),J=X==="orbit"?Z:-1;f.seatProgram.uniforms.uFocusSection.value=J,f.chairProgram.uniforms.uFocusSection.value=J;let ce=X==="cinematic"?U.update(performance.now()):X==="seatView"?oe.update(performance.now()):X==="orbit"?_.update():!1;te?.syncZoomLimits();let fe=N()>=0?i.floors[N()]:null,be=fe?.radius??i.bounds.radius,xe=xi(_.currentDistance,be),we=R?{center:[_.camera.position.x,_.camera.position.y,_.camera.position.z],radius:520}:i.clipBounds??i.renderBounds;_.updateClipping(we);let St=fe?.center??i.renderBounds.center,wt=fe?.radius??i.renderBounds.radius,se=(ze,Pt)=>Math.hypot(_.camera.position.x-ze[0],_.camera.position.y-ze[1],_.camera.position.z-ze[2])<=Pt*(A.detailVisible?1.8:1.55),Re=se(St,wt);if(!Re&&Y){let ze=i.sections.find(Pt=>Pt.id===Y);ze&&(Re=se(ze.center,Math.max(12,ze.radius*2)))}A.detailVisible=Re;let Me=f.seatProgram.uniforms;Me.uSeatScale.value=xe.scale,Me.uSeatFade.value=xe.fade;let _n=!!fe&&vi(fe.seatCount,O.canvas.clientWidth||1,O.canvas.clientHeight||1),Tn=Mi(i.seats.count,be,_.currentDistance,_.camera.fov,O.canvas.clientHeight||1),tn=A.detailVisible||_n||Tn?1:0,nn=A.detailVisible||N()>=0||i.floors.length>1?1:0;A.ease(j,tn,nn),Me.uSeatDetail.value=A.seatDetailMix;let kn=tn===0&&A.seatDetailMix<.01;return f.seatGeometry.setDrawRange(kn?No:0,kn?oi:No),f.solidProgram.uniforms.uStructureDetail.value=A.structureDetailMix,Me.uMinPixels.value=xe.minPixels,Me.uPixelToWorld.value=2*Math.tan(_.camera.fov*bb/2)/Math.max(1,O.pixelHeight),A.update(A.detailVisible),O.renderer.render({scene:f.background,clear:!0}),O.renderer.render({scene:f.main,camera:_.camera,clear:!1}),H.update(_.camera.projectionViewMatrix,O.canvas.clientWidth||1,O.canvas.clientHeight||1,_.currentDistance,be,[_.camera.position.x,_.camera.position.y,_.camera.position.z]),ce||A.seatDetailMix!==tn||A.structureDetailMix!==nn},ne=new On($),he=typeof ResizeObserver<"u"?new ResizeObserver(()=>Do.resize()):null;he?.observe(e);let Te=j=>{let X=fe=>{let be=i.seats.idToIndex.get(fe);return be===void 0?void 0:i.seats.iState[be]},{updates:J,next:ce}=Lc(x,j,X);if(x=ce,H.setSelectedSeatIds(x.keys()),q(Y),J.length){let fe=qo(i.seats,J);f&&f.uploadSeatStateRuns(fe),h(),ne.requestRender()}},Pe=()=>S!==null?S:typeof window<"u"&&!!window.matchMedia&&window.matchMedia("(prefers-reduced-motion: reduce)").matches,ke=8,Se=j=>{if(!n.getSeatView)return null;let X=P.get(j);if(!X)for(X=Promise.resolve(n.getSeatView(j)),P.set(j,X),X.catch(()=>{P.get(j)===X&&P.delete(j)});P.size>ke;){let J=P.keys().next().value;if(J===void 0)break;P.delete(J)}return X},Je=Zc(i.stages,i.focalWorld,i.bounds.groundY??0),Zt=Br(Je),it=(j,X)=>{let J=c.get(j),ce=Math.max(0,Math.round(i.seats.iFloor[X]??0)),fe=t.doc.floors?.[ce],be=i.floors[ce],xe=fe?.focalPoint??t.doc.focalPoint,we=be?{x:be.focalWorld[0]/E,y:be.focalWorld[2]/E}:xe,St=J?.focalPoint?{x:J.focalPoint.x+we.x-xe.x,y:J.focalPoint.y+we.y-xe.y}:we,wt=[i.seats.iPosition[X*3],i.seats.iPosition[X*3+1],i.seats.iPosition[X*3+2]];return zc(wt,St,fe?.baseHeightM??0,J?.eyeHeightM,Zt)},at=()=>(e.clientWidth||O.canvas.clientWidth)<=520,vt=null,Qt=null,Ol=async(j,X,J)=>{if(!n.getSeatView||g||J!==Ce.flightGen())return;let ce;try{ce=await vl()}catch{if(a.panoramaFailed(j,"mount"),!g&&J===Ce.flightGen()){let fe=ko(j,J,!0);requestAnimationFrame(()=>fe?.querySelector("[data-panorama-trigger]")?.focus())}return}if(!(g||J!==Ce.flightGen()||!vt))return Qt??=ce.createOpenPanorama(vt),Qt(j,X,J)},To=wl({container:e,model:i,opts:n,expandedSeatById:c,seatIdsByRow:u,isNarrow:at,isDisposed:()=>g,flightGen:()=>Ce.flightGen(),flyToSeat:j=>Wr(j),openPanorama:(j,X,J)=>Ol(j,X,J)}),ko=To.show,Lo=To.remove,Bl=To.layout,Mt=Pl({container:e,orbit:_,isNarrow:at,enabled:n.chrome?.controlDock!==!1,...n.navLabels?{labels:n.navLabels}:{}});te=Mt;let Nl=Mt.element,Jt=Mt.setNavigationMode,Vl=Mt.layout,Gl=Mt.utilityControls,en=null,Ur=!1,En=j=>{Mt.setSeatViewLocked(j),j||oe?.exit()};oe=al({canvas:O.canvas,camera:_.camera,requestRender:()=>ne.requestRender(),reducedMotion:Pe,onStopChange:j=>{let X=j??(Ur?"seat":null);en=X;try{n.onSeatViewStopChange?.(X)}catch{}},onApplied:()=>{g||_.syncFromCamera()}});let jr=i.sections.reduce((j,X)=>X.seatCount>0&&X.box?Math.max(j,X.box.max[1]):j,-1/0),Hl=(j,X)=>{let{eye:J}=it(j,X),ce=(e.clientWidth||O.canvas.clientWidth||1)/Math.max(1,e.clientHeight||O.canvas.clientHeight||1),fe=Jc(J,Je,ce,{preserveEye:!0});if(n.seatViewStops===!1)return{...fe,stops:[]};let be=l.get(j),xe=be?i.sections.find(we=>we.id===be):void 0;return{...fe,stops:el(fe,{aspect:ce,seatingTopY:Number.isFinite(jr)?jr:i.bounds.box.max[1],section:xe&&xe.seatCount>0?{center:xe.center,radius:xe.radius}:null,venue:{center:i.bounds.center,radius:i.bounds.radius}})}},Ce=_l({container:e,model:i,opts:n,orbit:_,cinematic:U,analytics:a,loop:ne,labelOverlay:H,stageAzimuth:V,overviewFraming:B,gpu:()=>f,isDisposed:()=>g,panorama:()=>w,setPanorama:j=>{w=j},setPanoramaSphereVisible:j=>{R=j},panoramaLoadAbort:()=>I,setPanoramaLoadAbort:j=>{I=j},setFrozen:j=>{y=j},restorePanoramaLayer:C,reducedMotion:Pe,resolvedSeatViewPose:it,showSectionSeatLabels:q,setNearFieldDetailEnabled:L,setSeatViewLocked:En,setNavigationMode:Jt,showArriveChip:ko,removeArriveChip:Lo,inSeatView:()=>en!==null,setSeatStepping:j=>{Ur=j},seatViewArrival:(j,X)=>n.arriveAtSeatEye?Hl(j,X):null,enterSeatView:j=>oe?.enter(j)});T=!0;let Fo=Ce.overviewChip,zl=Ce.layoutOverviewChip,Ul=Ce.applyFloorFocus,jl=Ce.focusOverview,Xr=Ce.cancelFlight,Wr=Ce.flyToSeat,Yr=Ce.focusSectionCamera;Gl.appendChild(Fo),vt={container:e,model:i,opts:n,analytics:a,orbit:_,loop:ne,seatsById:c,ensureSeatView:Se,resolvedSeatViewPose:it,gpu:()=>f,gl:O.gl,isContextLost:()=>b,isDisposed:()=>g,flightGen:()=>Ce.flightGen(),setPanorama:j=>{w=j},getLoadAbort:()=>I,setLoadAbort:j=>{I=j},setPanoramaSphereVisible:j=>{R=j,j&&oe?.exit()},setFrozen:j=>{y=j},raisePanoramaLayer:M,restorePanoramaLayer:C,getOverviewChip:()=>Fo,labelOverlay:H,reducedMotion:Pe,removeArriveChip:Lo,showArriveChip:ko};let st=Il({glctx:O,orbit:_,model:i,seats:t.seats,opts:n,cinematic:U,analytics:a,seatIdByIndex:s,sectionIdBySeatId:l,tapSlop:yb,tapMs:gb,gpu:()=>f,pick:()=>p,seatViewLocked:()=>Mt.seatViewLocked(),focusedSectionId:()=>Y,selection:()=>x,cancelFlight:Xr,focusSectionCamera:Yr,focusSeatCamera:Ce.focusSeatCamera,setSelection:Te,ensureSeatView:Se});O.canvas.addEventListener("pointerdown",st.onDown),O.canvas.addEventListener("pointermove",st.onMove),O.canvas.addEventListener("pointerup",st.onUp),O.canvas.addEventListener("pointercancel",st.onUp),ne.requestRender();let Do={setAvailability(j){let X=kc(x,j),J=qo(i.seats,X);J.length&&f&&f.uploadSeatStateRuns(J),h(),ne.requestRender()},setSelection:Te,setNavigationMode:Jt,zoomIn(){_.zoomBy(Dt),ne.requestRender()},zoomOut(){_.zoomBy(ln),ne.requestRender()},flyToSeat:Wr,focusOverview:jl,seatViewStop:()=>en,recentreSeatView:()=>oe?.recentre()??!1,resize(){let{width:j,height:X}=O.resize();_.setAspect(j/Math.max(1,X)),Bl(),Vl(),zl(),ne.requestRender()},stats(){return{...ne.stats(),drawCalls:f?f.drawCalls:0,fallbackTriangles:f?f.seatGeometry.drawRange.count/3*i.seats.count:0,seatCount:i.seatCount}},captureImage(j=1280){if(b||!f||typeof document>"u")return null;$(0);let X=O.canvas,J=Math.min(1,j/Math.max(X.width,X.height,1)),ce=document.createElement("canvas");ce.width=Math.max(1,Math.round(X.width*J)),ce.height=Math.max(1,Math.round(X.height*J));let fe=ce.getContext("2d");return fe?(fe.drawImage(X,0,0,ce.width,ce.height),ce.toDataURL("image/jpeg",.82)):null},getQualityEvidence(){let j=ne.stats(),X=O.canvas.clientWidth||1,J=O.canvas.clientHeight||1,ce=i.bounds.center,fe=bt(_.camera.projectionViewMatrix,[ce[0],i.bounds.box.min[1],ce[2]],X,J),be=bt(_.camera.projectionViewMatrix,[ce[0],i.bounds.box.max[1],ce[2]],X,J),xe=i.bounds.box,we=[xe.min[0],xe.max[0]].flatMap(se=>[xe.min[1],xe.max[1]].flatMap(Re=>[xe.min[2],xe.max[2]].map(Me=>bt(_.camera.projectionViewMatrix,[se,Re,Me],X,J)))).filter(se=>Number.isFinite(se.x)&&Number.isFinite(se.y)&&Number.isFinite(se.depth)),St=we.length?(()=>{let se=Math.min(...we.map(ct=>ct.x)),Re=Math.max(...we.map(ct=>ct.x)),Me=Math.min(...we.map(ct=>ct.y)),_n=Math.max(...we.map(ct=>ct.y)),Tn=Math.max(0,se),tn=Math.min(X,Re),nn=Math.max(0,Me),kn=Math.min(J,_n),ze=Math.max(0,tn-Tn),Pt=Math.max(0,kn-nn);return{box:{x:Tn,y:nn,width:ze,height:Pt},horizontalFillRatio:ze/X,verticalFillRatio:Pt/J,visibleAreaRatio:ze*Pt/(X*J),clippedEdges:[...Me<0?["top"]:[],...Re>X?["right"]:[],..._n>J?["bottom"]:[],...se<0?["left"]:[]]}})():void 0,wt=String(O.gl.getParameter(O.gl.VERSION)??"");return{viewport:{width:X,height:J},context:{webgl2:/webgl\s*2/i.test(wt),lost:b},frame:{rendered:j.rendered,idle:j.idle},camera:{position:[_.camera.position.x,_.camera.position.y,_.camera.position.z],distance:_.currentDistance,verticalFovDeg:_.fovY},scene:{seatCount:i.seatCount,floorCount:i.floors.length,zoneCount:i.zones.length,sectionCount:i.sections.length,authoredRelief:d,renderedVerticalSpanM:Math.max(0,i.bounds.box.max[1]-i.bounds.box.min[1]),projectedReliefPx:fe.visible&&be.visible?Math.abs(fe.y-be.y):0},labels:H.qualityEvidence(),framing:St,...en?{seatView:{fovDeg:_.camera.fov,stop:en}}:{}}},getQualityReport(){return ho(Do.getQualityEvidence())},loseContextForTest(){O.simulateContextLossCycle()},floors(){return i.floors},focusFloor(j){if(j!==null&&!i.floors.some(J=>J.index===j))return!1;let X=j??-1;if(L(j!==null),En(!1),Ul(X),Jt("orbit"),j===null)U.cancel(),Pe()?_.frame(i.bounds,!1,V,n.portraitOverviewCrop===!0,B):_.frameSoft(i.bounds,V,n.portraitOverviewCrop===!0,B);else{let J=i.floors[j];if(J.seatCount>0){U.cancel();let ce=J.focalWorld[0]-J.center[0],fe=J.focalWorld[2]-J.center[2],be=Math.hypot(ce,fe)>J.radius*.12?Math.atan2(ce,fe):V;_.frame({center:J.center,radius:J.radius,box:J.box},!1,be,!1,{polarDeg:58,margin:1.12})}}return ne.requestRender(),!0},zones(){return i.zones},focusZone(j){let X=i.zones.find(be=>be.id===j);if(!X||X.seatCount===0)return!1;L(!1),En(!1),U.cancel(),Jt("orbit"),q(null),n.onSectionFocusChange?.(null);let J=X.focalWorld[0]-X.center[0],ce=X.focalWorld[2]-X.center[2],fe=Math.hypot(J,ce)>X.radius*.12?Math.atan2(J,ce):void 0;return _.frame({center:X.center,radius:X.radius*1.25},!1,fe),ne.requestRender(),!0},sections(){return i.sections},focusSection(j){return Yr(j)},rows(j){return j?i.rows.filter(X=>X.sectionId===j):i.rows},seatsInRow(j){return t.seats.filter(X=>X.rowId===j).map(X=>({id:X.id,label:X.displayLabel||X.label}))},focusRow(j){let X=i.rows.find(J=>J.id===j);return!X||X.seatCount===0?!1:(L(!0),En(!1),U.cancel(),Jt("pan"),X.sectionId&&(q(X.sectionId),n.onSectionFocusChange?.(X.sectionId)),_.frame({center:X.center,radius:Math.max(2.5,X.radius*.65)}),ne.requestRender(),!0)},setReducedMotionForTest(j){S=j},dispose(){g=!0,Lo(),Fo.remove(),Nl.remove(),Xr(),oe?.dispose(),ne.stop(),H.dispose(),he?.disconnect(),w&&(w.dispose(),w=null),C(),G(),O.canvas.removeEventListener("pointerdown",st.onDown),O.canvas.removeEventListener("pointermove",st.onMove),O.canvas.removeEventListener("pointerup",st.onUp),O.canvas.removeEventListener("pointercancel",st.onUp),_.dispose(),p&&p.dispose(),f&&f.dispose(),f=null,p=null,O.dispose()}};return a.opened(i.seatCount,d,t.prepared?.buildMs??performance.now()-o,t.prepared?.source??"inline"),Do}0&&(module.exports={VENUE3D_QUALITY_REPORT_VERSION,autoVenue3d,buildSceneModel,estimateVenue3D,inspectVenue3DQualityEvidence,mountVenue3D,prepareVenue3D,prepareVenue3DFromChart});
|