@uptimizr/dashboard 0.3.1 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/out/404.html +1 -1
  2. package/out/__next.__PAGE__.txt +2 -2
  3. package/out/__next._full.txt +3 -3
  4. package/out/__next._head.txt +1 -1
  5. package/out/__next._index.txt +2 -2
  6. package/out/__next._tree.txt +2 -2
  7. package/out/_next/static/chunks/06m_64ysu9kn0.js +1 -0
  8. package/out/_next/static/chunks/1fruncg3k-3pu.js +3 -0
  9. package/out/_next/static/chunks/224_scesvd739.js +1 -0
  10. package/out/_next/static/chunks/2_hgfg-cjqw1-.js +1 -0
  11. package/out/_next/static/chunks/2ktxjmx03u9l3.js +1 -0
  12. package/out/_next/static/chunks/2kw33jl_i9o5j.css +3 -0
  13. package/out/_next/static/chunks/30363ptka3vzy.js +1 -0
  14. package/out/_next/static/chunks/39ojyykom0z2r.js +1 -0
  15. package/out/_next/static/chunks/3jha6wlqw8459.js +1 -0
  16. package/out/_not-found/__next._full.txt +2 -2
  17. package/out/_not-found/__next._head.txt +1 -1
  18. package/out/_not-found/__next._index.txt +2 -2
  19. package/out/_not-found/__next._not-found.__PAGE__.txt +1 -1
  20. package/out/_not-found/__next._not-found.txt +1 -1
  21. package/out/_not-found/__next._tree.txt +2 -2
  22. package/out/_not-found.html +1 -1
  23. package/out/_not-found.txt +2 -2
  24. package/out/index.html +1 -1
  25. package/out/index.txt +3 -3
  26. package/package.json +2 -2
  27. package/out/_next/static/chunks/0g_v2zswo4l6f.js +0 -1
  28. package/out/_next/static/chunks/1my2rhysaxjw4.js +0 -3
  29. package/out/_next/static/chunks/1vuq3dos1406d.css +0 -3
  30. package/out/_next/static/chunks/31nbg0n1q43p2.js +0 -1
  31. package/out/_next/static/chunks/3qw6q7d74g5wp.js +0 -1
  32. package/out/_next/static/chunks/3s2d9ymcd0l4e.js +0 -1
  33. /package/out/_next/static/{-UlF345C3V4TG3ZtvR-5_ → 2AsIePMYsPfJoAl46w-g4}/_buildManifest.js +0 -0
  34. /package/out/_next/static/{-UlF345C3V4TG3ZtvR-5_ → 2AsIePMYsPfJoAl46w-g4}/_clientMiddlewareManifest.js +0 -0
  35. /package/out/_next/static/{-UlF345C3V4TG3ZtvR-5_ → 2AsIePMYsPfJoAl46w-g4}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,56054,e=>{"use strict";e.s(["HEAT_GRADIENT",0,"linear-gradient(to right, rgb(178,47,38), rgb(224,123,57), rgb(244,200,75))","heatRgb",0,function(e){let t=Math.max(0,Math.min(1,e)),s=[.878,.482,.224],r=(e,t,s)=>[e[0]+(t[0]-e[0])*s,e[1]+(t[1]-e[1])*s,e[2]+(t[2]-e[2])*s];return t<.5?r([.698,.184,.149],s,t/.5):r(s,[.957,.784,.294],(t-.5)/.5)},"percentileMax",0,function(e,t=.95){if(0===e.length)return 1;let s=[...e].sort((e,t)=>e-t),r=Math.max(0,Math.min(1,t))*(s.length-1),n=Math.floor(r),i=Math.ceil(r);return Math.max(1,n===i?s[n]:s[n]+(s[i]-s[n])*(r-n))}])},18637,e=>{"use strict";var t=e.i(28100),s=e.i(56054);e.s(["HeatLegend",0,function({title:e,lowLabel:r="low",highLabel:n="high",note:i}){return(0,t.jsxs)("div",{className:"pointer-events-none absolute bottom-3 left-3 rounded-md border border-edge bg-ink/80 px-3 py-2 text-fg backdrop-blur-sm",children:[(0,t.jsx)("div",{className:"mb-1 text-xs font-medium text-fg",children:e}),(0,t.jsx)("div",{className:"h-2 w-36 rounded-sm",style:{background:s.HEAT_GRADIENT}}),(0,t.jsxs)("div",{className:"mt-1 flex w-36 justify-between text-[10px] text-fg-muted",children:[(0,t.jsx)("span",{children:r}),(0,t.jsx)("span",{children:n})]}),i?(0,t.jsx)("div",{className:"mt-1 max-w-44 text-[10px] leading-tight text-fg-muted",children:i}):null]})}])},20880,e=>{"use strict";class t extends Error{status;constructor(e,t){super(e),this.status=t,this.name="ApiError"}}function s(e){return e.endsWith("/")?e:`${e}/`}e.s(["ApiError",0,t,"CollectorApi",0,class{baseUrl;apiKey;constructor(e,t){this.baseUrl=e,this.apiKey=t}async get(e,r={}){let n=new URL(e,s(this.baseUrl));for(let[e,t]of Object.entries(r))null!=t&&n.searchParams.set(e,String(t));let i=await fetch(n,{headers:{"x-api-key":this.apiKey},cache:"no-store"});if(!i.ok)throw new t(await i.text().catch(()=>"")||i.statusText,i.status);return await i.json()}sessions(e){return this.get("api/v1/sessions",e).then(e=>e.map(e=>({...e,events:Number(e.events)})))}pointerHeatmap(e){return this.get("api/v1/heatmaps/pointer",e)}cameraHeatmap(e){return this.get("api/v1/heatmaps/camera",e)}topMeshes(e){return this.get("api/v1/meshes/top",e).then(e=>e.map(e=>({...e,count:Number(e.count)})))}meshKinds(e){return this.get("api/v1/meshes/kinds",e).then(e=>e.map(e=>({mesh:String(e.mesh??""),kind:String(e.kind??""),count:Number(e.count??0)})))}topMeshesBySource(e){return this.get("api/v1/meshes/sources",e).then(e=>e.map(e=>({mesh:String(e.mesh??""),source:String(e.source??""),count:Number(e.count??0)})))}topMeshesTrend(e){return this.get("api/v1/meshes/trend",e).then(e=>e.map(e=>({mesh:String(e.mesh??""),bucket:Number(e.bucket??0),count:Number(e.count??0)})))}topInputActions(e){return this.get("api/v1/input-actions/top",e).then(e=>e.map(e=>({action:String(e.action??""),source:String(e.source??""),count:Number(e.count??0)})))}perf(e){return this.get("api/v1/perf",e).then(e=>({samples:Number(e.samples??0),avg_fps:Number(e.avg_fps??0),min_fps:Number(e.min_fps??0),p50_fps:Number(e.p50_fps??0)}))}renderScale(e){return this.get("api/v1/perf/render-scale",e).then(e=>{let t=e[0]??{},s=Number(t.downscaled_samples??0),r=Number(t.scale_samples??0);return{samples:Number(t.samples??0),avg_fps:Number(t.avg_fps??0),p50_fps:Number(t.p50_fps??0),avg_render_scale:Number(t.avg_render_scale??0),p50_render_scale:Number(t.p50_render_scale??0),downscaled_samples:s,scale_samples:r,downscaled_share:r>0?s/r:0}})}perfDistribution(e){return this.get("api/v1/perf/distribution",e).then(e=>{let t=e[0]??{};return{sessions:Number(t.sessions??0),samples:Number(t.samples??0),p05_fps:Number(t.p05_fps??0),p50_fps:Number(t.p50_fps??0),p95_fps:Number(t.p95_fps??0)}})}fpsHistogram(e){return this.get("api/v1/perf/fps-histogram",e).then(e=>e.map(e=>({bucket:Number(e.bucket??0),sessions:Number(e.sessions??0)})))}frameTimePercentiles(e){return this.get("api/v1/perf/frame-time",e).then(e=>{let t=e[0]??{};return{sessions:Number(t.sessions??0),samples:Number(t.samples??0),p50_ms:Number(t.p50_ms??0),p95_ms:Number(t.p95_ms??0)}})}jankRate(e){return this.get("api/v1/perf/jank",e).then(e=>{let t=e[0]??{};return{sessions:Number(t.sessions??0),total_long_frames:Number(t.total_long_frames??0),median_rate:Number(t.median_rate??0),worst_decile_rate:Number(t.worst_decile_rate??0)}})}perfByDevice(e){return this.get("api/v1/perf/by-device",e).then(e=>e.map(e=>({engine:String(e.engine??""),is_mobile:String(e.is_mobile??""),renderer:String(e.renderer??""),browser:String(e.browser??""),os:String(e.os??""),sessions:Number(e.sessions??0),samples:Number(e.samples??0),p50_fps:Number(e.p50_fps??0)})))}perfByScene(e){return this.get("api/v1/perf/by-scene",e).then(e=>e.map(e=>({scene_id:String(e.scene_id??""),sessions:Number(e.sessions??0),samples:Number(e.samples??0),p50_fps:Number(e.p50_fps??0)})))}resourcePercentiles(e){return this.get("api/v1/perf/resource-percentiles",e).then(e=>{let t=e[0]??{};return{sessions:Number(t.sessions??0),samples:Number(t.samples??0),p50_js_heap_bytes:Number(t.p50_js_heap_bytes??0),p95_js_heap_bytes:Number(t.p95_js_heap_bytes??0),p50_texture_bytes:Number(t.p50_texture_bytes??0),p95_texture_bytes:Number(t.p95_texture_bytes??0),p50_triangles:Number(t.p50_triangles??0),p95_triangles:Number(t.p95_triangles??0)}})}stabilityCounts(e){return this.get("api/v1/perf/stability",e).then(e=>{let t=e[0]??{};return{context_losses:Number(t.context_losses??0),compile_stalls:Number(t.compile_stalls??0),incidents:Number(t.incidents??0)}})}graphicsDiagnosticCounts(e){return this.get("api/v1/graphics-diagnostics",e).then(e=>e.map(e=>({severity:String(e.severity??""),category:String(e.category??""),backend:String(e.backend??""),incidents:Number(e.incidents??0)})))}renderingTechnology(e){return this.get("api/v1/rendering-technology",e).then(e=>e.map(e=>({api:String(e.api??""),backend:String(e.backend??""),apiVersion:String(e.api_version??""),shadingLanguage:String(e.shading_language??""),sessions:Number(e.sessions??0)})))}worldHeatmap(e){return this.get("api/v1/heatmaps/world",e).then(e=>e.map(e=>({vx:Number(e.vx),vy:Number(e.vy),vz:Number(e.vz),count:Number(e.count)})))}gazeHeatmap(e){return this.get("api/v1/heatmaps/gaze",e).then(e=>e.map(e=>({vx:Number(e.vx),vy:Number(e.vy),vz:Number(e.vz),count:Number(e.count)})))}worldHeatmapStats(e){return this.get("api/v1/heatmaps/world/stats",e).then(e=>({cellSize:Number(e.cellSize??0),cells:Number(e.cells??0),hits:Number(e.hits??0)}))}gazeHeatmapStats(e){return this.get("api/v1/heatmaps/gaze/stats",e).then(e=>({cellSize:Number(e.cellSize??0),cells:Number(e.cells??0),hits:Number(e.hits??0)}))}cameraPositionHeatmap(e){return this.get("api/v1/heatmaps/position",e).then(e=>e.map(e=>({gx:Number(e.gx),gz:Number(e.gz),avg_y:Number(e.avg_y??0),count:Number(e.count??0)})))}sessionTrajectory(e,t){return this.get(`api/v1/sessions/${encodeURIComponent(e)}/trajectory`,t).then(e=>e.map(e=>({ts:Number(e.ts),x:Number(e.x),y:Number(e.y),z:Number(e.z)})))}aggregatePaths(e){return this.get("api/v1/paths",e).then(e=>e.map(e=>({session_id:String(e.session_id??""),ts:Number(e.ts),gx:Number(e.gx),gz:Number(e.gz)})))}clickRays(e){return this.get("api/v1/heatmaps/click-rays",e).then(e=>e.map(e=>({camVoxel:[Number(e.cam_vx),Number(e.cam_vy),Number(e.cam_vz)],origin:[Number(e.origin_x),Number(e.origin_y),Number(e.origin_z)],hitVoxel:[Number(e.hit_vx),Number(e.hit_vy),Number(e.hit_vz)],hit:[Number(e.hit_x),Number(e.hit_y),Number(e.hit_z)],mesh:String(e.mesh??""),count:Number(e.count)})))}flowHeatmap(e){return this.get("api/v1/heatmaps/flow",e).then(e=>e.map(e=>{let t={azimuth_bin:Number(e.azimuth_bin),elevation_bin:Number(e.elevation_bin),mesh:String(e.mesh??""),count:Number(e.count)};return null!=e.origin_vx&&(t.originVoxel=[Number(e.origin_vx),Number(e.origin_vy),Number(e.origin_vz)],t.origin=[Number(e.origin_x),Number(e.origin_y),Number(e.origin_z)]),t}))}scenes(e){return this.get("api/v1/scenes",e).then(e=>e.map(e=>({...e,events:Number(e.events)})))}timeseries(e){return this.get("api/v1/timeseries",e).then(e=>e.map(e=>({bucket:Number(e.bucket),events:Number(e.events??0),avg_fps:Number(e.avg_fps??0)})))}eventCounts(e){return this.get("api/v1/event-counts",e).then(e=>e.map(e=>({event_type:String(e.event_type),count:Number(e.count??0)})))}funnel(e,t){return this.get("api/v1/funnel",{...t,steps:JSON.stringify(e)}).then(e=>e.map(e=>({step:Number(e.step),sessions:Number(e.sessions??0)})))}coverage(e){return this.get("api/v1/coverage",e).then(e=>e.map(e=>({vx:Number(e.vx),vy:Number(e.vy),vz:Number(e.vz),count:Number(e.count??0)})))}cameraDistance(e){return this.get("api/v1/camera/distance",e).then(e=>e.map(e=>({bucket:Number(e.bucket),count:Number(e.count??0)})))}navigation(e){return this.get("api/v1/navigation",e).then(e=>e.map(e=>({session_id:String(e.session_id??""),segments:Number(e.segments??0),total_distance:Number(e.total_distance??0),active_segments:Number(e.active_segments??0),active_distance:Number(e.active_distance??0)})))}cameraGestures(e){return this.get("api/v1/camera-gestures",e).then(e=>e.map(e=>({kind:String(e.kind??""),gestures:Number(e.gestures??0),total_ms:Number(e.total_ms??0),avg_ms:Number(e.avg_ms??0),max_ms:Number(e.max_ms??0)})))}interactionsBySource(e){return this.get("api/v1/interactions/sources",e).then(e=>e.map(e=>({event_type:String(e.event_type??""),source:String(e.source??""),count:Number(e.count??0),sessions:Number(e.sessions??0)})))}sessionMeta(e){return this.get(`api/v1/sessions/${encodeURIComponent(e)}/meta`)}async sceneRepresentation(e){try{return await this.get(`api/v1/scenes/${encodeURIComponent(e)}/representation`)}catch(e){if(e instanceof t&&404===e.status)return null;throw e}}async liveToken(){let e=new URL("api/v1/live/token",s(this.baseUrl)),r=await fetch(e,{method:"POST",headers:{"x-api-key":this.apiKey},cache:"no-store"});if(!r.ok)throw new t(await r.text().catch(()=>"")||r.statusText,r.status);return await r.json()}livePresenceUrl(e){let t=new URL("api/v1/live/presence",s(this.baseUrl));return t.searchParams.set("token",e),t.toString()}liveStreamUrl(e,t){let r=new URL("api/v1/live/stream",s(this.baseUrl));return r.searchParams.set("token",e),t&&t.length>0&&r.searchParams.set("types",t.join(",")),r.toString()}liveSessionUrl(e,t){let r=new URL(`api/v1/live/sessions/${encodeURIComponent(t)}`,s(this.baseUrl));return r.searchParams.set("token",e),r.toString()}}])},37215,e=>{"use strict";var t=e.i(28100);let s=(0,t.jsxs)(t.Fragment,{children:["Each ",(0,t.jsx)("strong",{children:"source"})," is a camera ",(0,t.jsx)("em",{children:"gaze-direction bin"})," — a cell on the sphere of where viewers were looking (grouped by azimuth/elevation). Each ",(0,t.jsx)("strong",{children:"target"})," is a"," ",(0,t.jsx)("em",{children:"mesh that was clicked"}),". A ribbon's thickness is how many clicks on that mesh happened while viewers looked from that direction, so you can see which viewpoints drive interaction with which objects. When the scene reports ",(0,t.jsx)("em",{children:"standpoints"}),' (where the viewer stood, §7.8), pick one to gate the flow to clicks made from that vantage — a pin marks it in the scene. "All standpoints" is the aggregate view. Switch to ',(0,t.jsx)("strong",{children:"Two-stage"})," ","for a three-column ",(0,t.jsx)("em",{children:"standpoint → gaze sector → mesh"}),' flow with a birdview minimap; the busiest standpoints/meshes are kept and the tail folds into an "Other" node.']});e.s(["CAMERA_DOME_SUBTITLE",0,"Where the audience looked, mapped onto a sphere — drag to orbit, +/- to zoom, double-click to focus","CAMERA_DOME_TITLE",0,"View-direction dome (3D)","CLICK_RAYS_SUBTITLE",0,"Each click joined to the view it was made from — gate by viewpoint or focus a mesh; double-click to recenter","CLICK_RAYS_TITLE",0,"Click rays (3D)","FLOW_SANKEY_HELP",0,s,"FLOW_SANKEY_SUBTITLE",0,"Direction-bin → mesh links (aggregate), or standpoint → gaze → mesh (two-stage) — double-click to focus","FLOW_SANKEY_TITLE",0,"Flow Sankey (3D)","GAZE_CLICK_SUBTITLE",0,"Where viewers look (gaze) vs. where they act (clicks), voxel-binned in world space — double-click to focus","GAZE_CLICK_TITLE",0,"Gaze vs. click divergence","WORLD_HEATMAP_SUBTITLE",0,"Pointer hit-points voxel-binned in world space — drag to orbit, +/- to zoom, double-click to focus","WORLD_HEATMAP_TITLE",0,"World heatmap (3D)"])},82665,e=>{"use strict";var t=e.i(37998);let s=!!t.default.env.NEXT_PUBLIC_COLLECTOR_URL,r=t.default.env.NEXT_PUBLIC_COLLECTOR_URL??"http://localhost:4318",n="1"===t.default.env.DASHBOARD_STATIC?"":t.default.env.NEXT_PUBLIC_API_KEY??"",i=t.default.env.NEXT_PUBLIC_PLAYGROUND_URL??"http://localhost:5173";e.s(["COLLECTOR_URL_IS_PINNED",0,s,"DEFAULT_API_KEY",0,n,"DEFAULT_COLLECTOR_URL",0,r,"DEFAULT_PLAYGROUND_URL",0,i])},60614,e=>{"use strict";async function t(e,t){let s=await e.scenes(t).catch(()=>[]);if(0===s.length)return[];let r=await Promise.all(s.map(t=>e.sceneRepresentation(t.scene_id).catch(()=>null))),n=new Set,i=[];for(let e of r)for(let t of e?.proxy?.meshes??[])n.has(t.name)||(n.add(t.name),i.push(t));return i}e.s(["mergeSceneProxies",0,t])},88725,e=>{"use strict";var t=e.i(11623);e.i(82665);var s=e.i(20880);function r(e,t,s,r){let n={cancelled:!1,source:null,timer:null},i=0,a=async()=>{let a;if(n.cancelled)return;r(0===i?"connecting":"reconnecting");try{let{token:s}=await e.liveToken();a=t(s)}catch{o();return}if(n.cancelled)return;let l=new EventSource(a);n.source=l,l.onopen=()=>{i=0,r("open")},l.onerror=()=>{l.close(),n.source===l&&(n.source=null),o()},s(l)},o=()=>{if(n.cancelled)return;r("reconnecting");let e=Math.min(1e3*2**i,15e3);i+=1,n.timer=setTimeout(()=>void a(),e)};return a(),()=>{n.cancelled=!0,n.timer&&clearTimeout(n.timer),n.source?.close(),n.source=null}}async function n(e,t,s){let r=e.getReader(),n=new TextDecoder,i="";for(t.addEventListener("abort",()=>void r.cancel().catch(()=>{}));;){let{done:e,value:t}=await r.read();if(e)return;let a=(i+=n.decode(t,{stream:!0})).indexOf("\n\n");for(;a>=0;){let e=i.slice(0,a);i=i.slice(a+2);let t="message",r=[];for(let s of e.split("\n"))!s.startsWith(":")&&(s.startsWith("event:")?t=s.slice(6).trim():s.startsWith("data:")&&r.push(s.slice(5).replace(/^ /,"")));"event"===t&&r.length>0&&s(r.join("\n")),a=i.indexOf("\n\n")}}}e.s(["useLivePresence",0,function(e,n,i){let[a,o]=(0,t.useState)(null),[l,c]=(0,t.useState)("idle");return(0,t.useEffect)(()=>{if(!i||!n||!e){c("idle"),o(null);return}let t=new s.CollectorApi(e,n);return r(t,e=>t.livePresenceUrl(e),e=>{e.addEventListener("presence",e=>{try{o(JSON.parse(e.data))}catch{}})},c)},[e,n,i]),{snapshot:a,status:l}},"useLiveSession",0,function(e,r,i,a,o,l){let[c,u]=(0,t.useState)("idle"),[m,h]=(0,t.useState)(!1),[p,d]=(0,t.useState)(0),g=(0,t.useRef)(o),b=(0,t.useRef)(l);return g.current=o,b.current=l,(0,t.useEffect)(()=>{if(!a||!r||!e||!i)return void u("idle");let t=new s.CollectorApi(e,r),o=!1,l=0,c=null,m=null;h(!1),d(0);let p=()=>{if(o)return;u("reconnecting");let e=Math.min(1e3*2**l,15e3);l+=1,m=setTimeout(()=>void v(),e)},v=async()=>{let e;if(!o){u(0===l?"connecting":"reconnecting"),b.current(),d(0);try{({token:e}=await t.liveToken())}catch{p();return}if(!o){c=new AbortController;try{let s=await fetch(t.liveSessionUrl(e,i),{headers:{accept:"text/event-stream"},cache:"no-store",signal:c.signal});if(403===s.status){h(!0),u("idle");return}if(!s.ok||!s.body)return void p();l=0,u("open"),await n(s.body,c.signal,e=>{try{g.current(JSON.parse(e)),d(e=>e+1)}catch{}}),o||p()}catch{o||p()}}}};return v(),()=>{o=!0,m&&clearTimeout(m),c?.abort()}},[e,r,i,a]),{status:c,gated:m,count:p}},"useLiveStream",0,function(e,n,i,a,o){let[l,c]=(0,t.useState)("idle"),u=(0,t.useRef)(a);u.current=a;let m=o&&o.length>0?[...o].sort().join(","):"";return(0,t.useEffect)(()=>{if(!i||!n||!e)return void c("idle");let t=new s.CollectorApi(e,n),a=m?m.split(","):void 0;return r(t,e=>t.liveStreamUrl(e,a),e=>{e.addEventListener("event",e=>{try{u.current(JSON.parse(e.data))}catch{}})},c)},[e,n,i,m]),{status:l}}])},93425,e=>{"use strict";var t=e.i(28100),s=e.i(11623);function r({children:e,label:s="More information"}){return(0,t.jsxs)("span",{className:"group relative inline-flex",children:[(0,t.jsx)("button",{type:"button","aria-label":s,className:"flex h-4 w-4 items-center justify-center rounded-full border border-edge text-[10px] font-bold leading-none text-fg-muted transition hover:border-amber hover:text-fg-hi focus:outline-none focus:ring-1 focus:ring-amber",children:"?"}),(0,t.jsx)("span",{role:"tooltip",className:"pointer-events-none absolute left-1/2 top-6 z-20 w-64 -translate-x-1/2 rounded-md border border-edge bg-ink/95 p-2.5 text-xs font-normal normal-case leading-relaxed tracking-normal text-fg opacity-0 shadow-lg shadow-black/40 transition-opacity duration-150 group-hover:opacity-100 group-focus-within:opacity-100",children:e})]})}function n({label:e,onClick:s,active:r=!1,children:i}){return(0,t.jsx)("button",{type:"button","aria-label":e,title:e,onClick:s,"aria-pressed":r,className:`flex h-6 w-6 items-center justify-center rounded-md border text-sm leading-none transition focus:outline-none focus:ring-1 focus:ring-amber ${r?"border-amber text-amber":"border-edge text-fg-muted hover:border-amber hover:text-fg-hi"}`,children:i})}e.s(["Panel",0,function({title:e,subtitle:i,help:a,children:o,className:l="",collapsible:c=!1,defaultCollapsed:u=!1,onHide:m,settings:h}){let[p,d]=(0,s.useState)(c&&u),[g,b]=(0,s.useState)(!1),v=(0,t.jsxs)("header",{className:p?"":"mb-3",children:[(0,t.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,t.jsx)("h2",{className:"text-sm font-semibold uppercase tracking-wide text-fg",children:e}),c?(0,t.jsx)("span",{"aria-hidden":"true",className:"text-xs text-fg-muted",children:p?"▸":"▾"}):null,a?(0,t.jsx)(r,{label:`About: ${e}`,children:a}):null]}),i?(0,t.jsx)("p",{className:"mt-0.5 text-xs text-fg-muted",children:i}):null]}),_=!!h||!!m;return(0,t.jsxs)("section",{className:`rounded-xl border border-edge bg-panel p-4 shadow-lg shadow-black/20 ${l}`,children:[(0,t.jsxs)("div",{className:"flex items-start justify-between gap-2",children:[c?(0,t.jsx)("button",{type:"button",onClick:()=>d(e=>!e),"aria-expanded":p?"false":"true",className:"min-w-0 flex-1 text-left",children:v}):(0,t.jsx)("div",{className:"min-w-0 flex-1",children:v}),_?(0,t.jsxs)("div",{className:"flex shrink-0 items-center gap-1",children:[h?(0,t.jsx)(n,{label:`${e} settings`,active:g,onClick:()=>b(e=>!e),children:(0,t.jsx)("span",{"aria-hidden":"true",children:"⚙"})}):null,m?(0,t.jsx)(n,{label:`Hide ${e}`,onClick:m,children:(0,t.jsx)("span",{"aria-hidden":"true",children:"×"})}):null]}):null]}),h&&g?(0,t.jsx)("div",{className:"mb-3 rounded-lg border border-edge bg-ink/40 p-3",children:h}):null,p?null:o]})}])},78573,e=>{e.v(t=>Promise.all(["static/chunks/39ojyykom0z2r.js"].map(t=>e.l(t))).then(()=>t(48939)))},47410,e=>{e.v(t=>Promise.all(["static/chunks/30363ptka3vzy.js"].map(t=>e.l(t))).then(()=>t(53993)))},70162,e=>{e.v(t=>Promise.all(["static/chunks/3jha6wlqw8459.js"].map(t=>e.l(t))).then(()=>t(19399)))},21269,e=>{e.v(t=>Promise.all(["static/chunks/2_hgfg-cjqw1-.js"].map(t=>e.l(t))).then(()=>t(39592)))},69091,e=>{e.v(t=>Promise.all(["static/chunks/06m_64ysu9kn0.js"].map(t=>e.l(t))).then(()=>t(12449)))},15867,e=>{e.v(t=>Promise.all(["static/chunks/2ktxjmx03u9l3.js"].map(t=>e.l(t))).then(()=>t(94452)))}]);
@@ -0,0 +1 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,2348,2413,e=>{"use strict";let t=1/1.2;e.s(["ZOOM_IN_FACTOR",0,t,"ZOOM_OUT_FACTOR",0,1.2,"attachDoubleClickFocus",0,function(e,t,s){let a=()=>{let t=e.pick(e.pointerX,e.pointerY);t?.hit&&t.pickedPoint&&s.setTarget(t.pickedPoint)};return t.addEventListener("dblclick",a),()=>t.removeEventListener("dblclick",a)},"disableWheelZoom",0,function(e){e.inputs.removeByType("ArcRotateCameraMouseWheelInput")},"resetFocus",0,function(e,t){e.setTarget(t.target),e.alpha=t.alpha,e.beta=t.beta,e.radius=t.radius},"stepZoom",0,function(e,t){let s=e.lowerRadiusLimit??.01,a=e.upperRadiusLimit??1/0;e.radius=Math.min(a,Math.max(s,e.radius*t))}],2348);var s=e.i(28100);e.s(["ZoomButtons",0,function({onZoom:e,onReset:a}){let n="grid h-8 w-8 place-items-center rounded-md border border-edge bg-ink/80 text-lg leading-none text-fg backdrop-blur transition hover:bg-ink hover:text-white";return(0,s.jsxs)("div",{className:"absolute right-3 top-3 flex flex-col gap-1",children:[(0,s.jsx)("button",{type:"button","aria-label":"Zoom in",className:n,onClick:()=>e(t),children:"+"}),(0,s.jsx)("button",{type:"button","aria-label":"Zoom out",className:n,onClick:()=>e(1.2),children:"−"}),a?(0,s.jsx)("button",{type:"button","aria-label":"Reset camera focus to center",title:"Reset focus to center",className:n,onClick:a,children:(0,s.jsxs)("svg",{viewBox:"0 0 16 16",width:"16",height:"16",fill:"none",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round","aria-hidden":"true",children:[(0,s.jsx)("circle",{cx:"8",cy:"8",r:"3"}),(0,s.jsx)("path",{d:"M8 1v2.5M8 12.5V15M1 8h2.5M12.5 8H15"})]})}):null]})}],2413)},25476,e=>{"use strict";e.s(["attachMeshHover",0,function(e,t,s){let a=0,n=null,c=t=>{let c=t.offsetX,i=t.offsetY;a||(a=requestAnimationFrame(()=>{var t,r;let l;a=0;let h=e.pick(c,i,e=>e.isPickable&&e.isEnabled()),o=h?.pickedMesh?(t=h.pickedMesh,r=h.thinInstanceIndex??-1,(l=t.metadata)?r>=0&&l.hoverLabels?l.hoverLabels[r]??null:l.hoverLabel??null:null):null;o?s({label:o,x:c,y:i}):null!==n&&s(null),n=o}))},i=()=>{a&&(cancelAnimationFrame(a),a=0),null!==n&&(n=null,s(null))};return t.addEventListener("pointermove",c),t.addEventListener("pointerleave",i),()=>{t.removeEventListener("pointermove",c),t.removeEventListener("pointerleave",i),a&&cancelAnimationFrame(a)}}])},39592,e=>{"use strict";var t=e.i(28100),s=e.i(11623),a=e.i(56054),n=e.i(2348),c=e.i(25476),i=e.i(2413);function r(e){let t=Math.min(1,Math.max(0,e));return[.118+(.22-.118)*t,.227+.513*t,.541+(.97-.541)*t]}function l(e){return`${e.vx}|${e.vy}|${e.vz}`}function h({mode:e}){return(0,t.jsxs)("div",{className:"absolute bottom-3 right-3 max-w-72 rounded-md border border-edge bg-ink/80 px-2 py-1.5 text-xs text-fg backdrop-blur",children:[(0,t.jsxs)("div",{className:"flex items-center gap-3",children:[(0,t.jsxs)("span",{className:"flex items-center gap-1",children:[(0,t.jsx)("span",{className:"inline-block h-2.5 w-2.5 rounded-sm bg-[#38bdf8]"}),"divergence"===e?"Gaze-heavy":"Gaze"]}),(0,t.jsxs)("span",{className:"flex items-center gap-1",children:[(0,t.jsx)("span",{className:"inline-block h-2.5 w-2.5 rounded-sm bg-[#f4c84b]"}),"divergence"===e?"Click-heavy":"Clicks"]})]}),(0,t.jsx)("p",{className:"mt-1 text-fg-muted",children:"divergence"===e?"Per-voxel normalized difference: which signal dominates each cell. Color & size scale with the gap.":"Gaze = where viewers looked; Clicks = where they acted. Cells with gaze but no clicks are looked-at but un-acted-on."})]})}function o({active:e,onClick:s,children:a}){return(0,t.jsx)("button",{type:"button",onClick:s,className:`rounded px-2 py-0.5 font-medium transition ${e?"bg-amber text-ink":"text-fg-muted hover:text-fg"}`,children:a})}e.s(["GazeClickDivergence3DView",0,function({gazeVoxels:u,clickVoxels:d,cellSize:j,proxyMeshes:k=[]}){let v=(0,s.useRef)(null),m=(0,s.useRef)(null),p=(0,s.useRef)(null),[g,x]=(0,s.useState)("loading"),[b,f]=(0,s.useState)(null),[y,w]=(0,s.useState)("overlay"),[z,q]=(0,s.useState)(null);return(0,s.useEffect)(()=>{let t=v.current;if(!t)return;if(0===u.length&&0===d.length&&0===k.length)return void x("empty");let s=!1,i=null;return x("loading"),f(null),(async()=>{try{let[{Engine:h},{Scene:o},{ArcRotateCamera:v},{HemisphericLight:g},{Vector3:b,Color3:f,Color4:w,Matrix:z},{MeshBuilder:C},{StandardMaterial:M}]=await Promise.all([e.A(3905),e.A(94432),e.A(59694),e.A(88004),e.A(27940),e.A(27124),e.A(14074),e.A(35983),e.A(18561)]);if(s)return;let _=u.reduce((e,t)=>Math.max(e,t.count),1),A=d.reduce((e,t)=>Math.max(e,t.count),1),P=[...u,...d],N=0,L=0,R=0,F=0;for(let e of P)N+=(e.vx+.5)*j,L+=(e.vy+.5)*j,R+=(e.vz+.5)*j,F++;if(0===F)for(let e of k)N+=(e.aabb[0]+e.aabb[3])/2,L+=(e.aabb[1]+e.aabb[4])/2,R+=(e.aabb[2]+e.aabb[5])/2,F++;let T=new b(N/F,L/F,R/F),E=4*j;for(let e of P){let t=(e.vx+.5)*j-T.x,s=(e.vy+.5)*j-T.y,a=(e.vz+.5)*j-T.z;E=Math.max(E,Math.sqrt(t*t+s*s+a*a))}for(let e of k){let t=(e.aabb[0]+e.aabb[3])/2-T.x,s=(e.aabb[1]+e.aabb[4])/2-T.y,a=(e.aabb[2]+e.aabb[5])/2-T.z;E=Math.max(E,Math.sqrt(t*t+s*s+a*a))}let S=new h(t,!0,{preserveDrawingBuffer:!1}),B=new o(S);B.clearColor=new w(.04,.05,.07,1);let O=new v("divergence-cam",Math.PI/4,Math.PI/3,2.4*E,T,B);if(O.attachControl(t,!0),(0,n.disableWheelZoom)(O),m.current=O,p.current={target:T,alpha:O.alpha,beta:O.beta,radius:O.radius},new g("divergence-light",new b(.4,1,.3),B),k.length>0){let e=C.CreateBox("scene-proxy",{size:1},B),t=new M("scene-proxy-mat",B);t.wireframe=!0,t.disableLighting=!0,t.emissiveColor=new f(.32,.4,.52),t.alpha=.35,e.material=t,e.isPickable=!0,e.thinInstanceEnablePicking=!0,e.metadata={hoverLabels:k.map(e=>e.name)};let s=k.length,a=new Float32Array(16*s);for(let e=0;e<s;e++){let t=k[e].aabb,s=Math.max(t[3]-t[0],.001),n=Math.max(t[4]-t[1],.001),c=Math.max(t[5]-t[2],.001);z.Scaling(s,n,c).multiply(z.Translation((t[0]+t[3])/2,(t[1]+t[4])/2,(t[2]+t[5])/2)).copyToArray(a,16*e)}e.thinInstanceSetBuffer("matrix",a,16,!0)}let Z=Math.max(.02*E,.25*j)/(.9*j),I=(e,t,s,a,n)=>{if(0===t.length)return;let c=C.CreateSphere(e,{diameter:.9*j,segments:6},B),i=new M(`${e}-mat`,B);i.diffuseColor=new f(1,1,1),i.specularColor=new f(0,0,0),c.material=i,c.metadata={hoverLabel:n};let r=t.length,l=new Float32Array(16*r),h=new Float32Array(4*r);for(let e=0;e<r;e++){let n=t[e],c=n.count/s,i=Z*(.5+.5*c);z.Scaling(i,i,i).multiply(z.Translation((n.vx+.5)*j,(n.vy+.5)*j,(n.vz+.5)*j)).copyToArray(l,16*e);let[r,o,u]=a(c);h[4*e]=r,h[4*e+1]=o,h[4*e+2]=u,h[4*e+3]=1}c.thinInstanceSetBuffer("matrix",l,16,!1),c.thinInstanceSetBuffer("color",h,4,!0)};if("divergence"===y){let e=new Map(u.map(e=>[l(e),e])),t=new Map(d.map(e=>[l(e),e])),s=new Set([...e.keys(),...t.keys()]),n=[],c=[];for(let a of s){let s=(e.get(a)?.count??0)/_,i=(t.get(a)?.count??0)/A,r=t.get(a)??e.get(a),l=i-s,h={vx:r.vx,vy:r.vy,vz:r.vz,count:1e3*Math.abs(l)};(l>=0?n:c).push(h)}I("div-click",n,1e3,a.heatRgb,"Click-heavy"),I("div-gaze",c,1e3,r,"Gaze-heavy")}else("overlay"===y||"gaze"===y)&&I("gaze-voxel",u,_,r,"Gaze"),("overlay"===y||"click"===y)&&I("click-voxel",d,A,a.heatRgb,"Click");S.runRenderLoop(()=>B.render());let D=()=>S.resize();window.addEventListener("resize",D);let G=(0,c.attachMeshHover)(B,t,q),$=(0,n.attachDoubleClickFocus)(B,t,O);x("ready"),i=()=>{window.removeEventListener("resize",D),G(),$(),q(null),m.current=null,p.current=null,B.dispose(),S.dispose()}}catch(e){if(s)return;x("error"),f(e instanceof Error?e.message:"Failed to render overlay.")}})(),()=>{s=!0,i?.()}},[u,d,j,k,y]),(0,t.jsxs)("div",{className:"relative",children:[(0,t.jsx)("canvas",{ref:v,className:"aspect-video w-full rounded-lg border border-edge bg-ink"}),z?(0,t.jsx)("div",{className:"pointer-events-none absolute z-10 max-w-64 truncate rounded border border-edge bg-ink/90 px-1.5 py-0.5 text-xs text-white shadow backdrop-blur",style:{left:z.x+12,top:z.y+12},children:z.label}):null,"ready"===g?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"absolute left-3 top-3 flex items-center gap-1 rounded-md border border-edge bg-ink/80 p-0.5 text-xs backdrop-blur",children:[(0,t.jsx)(o,{active:"overlay"===y,onClick:()=>w("overlay"),children:"Overlay"}),(0,t.jsx)(o,{active:"gaze"===y,onClick:()=>w("gaze"),children:"Gaze"}),(0,t.jsx)(o,{active:"click"===y,onClick:()=>w("click"),children:"Clicks"}),(0,t.jsx)(o,{active:"divergence"===y,onClick:()=>w("divergence"),children:"Divergence"})]}),(0,t.jsx)(i.ZoomButtons,{onZoom:e=>m.current&&(0,n.stepZoom)(m.current,e),onReset:()=>m.current&&p.current&&(0,n.resetFocus)(m.current,p.current)}),(0,t.jsx)(h,{mode:y})]}):(0,t.jsx)("div",{className:"pointer-events-none absolute inset-0 grid place-items-center text-sm text-fg-muted",children:"loading"===g?"Rendering…":"empty"===g?"No gaze or click hit-points in range. Enable gaze + pointer capture in the SDK.":"error"===g?b??"Overlay unavailable.":null})]})}])},3905,e=>{e.v(t=>Promise.all(["static/chunks/3pdpaqzwhhijn.js","static/chunks/08bm3ye5govev.js","static/chunks/0g6u34xkzrpjn.js","static/chunks/25ctnyh7njp-d.js","static/chunks/2gh4z57fem0_v.js","static/chunks/3vaho-xrtuchd.js","static/chunks/0g7p8zp2kxve5.js"].map(t=>e.l(t))).then(()=>t(66232)))},94432,e=>{e.v(t=>Promise.all(["static/chunks/2kje_jvmwsvwo.js","static/chunks/1j--a56ji33_x.js","static/chunks/3pdpaqzwhhijn.js","static/chunks/2npk7tr63h7rl.js","static/chunks/3vaho-xrtuchd.js","static/chunks/3g_h_00xs9u59.js","static/chunks/1vzmzrjhlm1q5.js","static/chunks/25ctnyh7njp-d.js","static/chunks/1vpcaaf-0dn7q.js"].map(t=>e.l(t))).then(()=>t(92494)))},59694,e=>{e.v(t=>Promise.all(["static/chunks/1j--a56ji33_x.js","static/chunks/0oap0o8a8a_cl.js","static/chunks/0f_nv15a8q415.js","static/chunks/1vzmzrjhlm1q5.js","static/chunks/3pdpaqzwhhijn.js","static/chunks/245h82k-g1nxr.js","static/chunks/3ovd8o_usay7j.js","static/chunks/3vaho-xrtuchd.js","static/chunks/1vpcaaf-0dn7q.js","static/chunks/25ctnyh7njp-d.js","static/chunks/2npk7tr63h7rl.js","static/chunks/3pyggl13glbdc.js"].map(t=>e.l(t))).then(()=>t(67186)))},88004,e=>{e.v(t=>Promise.all(["static/chunks/2p8dbh81chhon.js","static/chunks/1oara6fkfvgs3.js","static/chunks/1vzmzrjhlm1q5.js","static/chunks/25ctnyh7njp-d.js","static/chunks/3pdpaqzwhhijn.js"].map(t=>e.l(t))).then(()=>t(15768)))},27940,e=>{e.v(t=>Promise.all(["static/chunks/0w0sx062qmcsh.js","static/chunks/25ctnyh7njp-d.js","static/chunks/3pdpaqzwhhijn.js"].map(t=>e.l(t))).then(()=>t(23235)))},27124,e=>{e.v(t=>Promise.all(["static/chunks/1par9m038tiov.js","static/chunks/1j--a56ji33_x.js","static/chunks/2j-sax2xfdv7l.js","static/chunks/340pg0qkv5tqq.js","static/chunks/3pdpaqzwhhijn.js","static/chunks/0gwa154w_0wuh.js","static/chunks/0oap0o8a8a_cl.js","static/chunks/0f_nv15a8q415.js","static/chunks/3vaho-xrtuchd.js","static/chunks/3pyggl13glbdc.js","static/chunks/1vzmzrjhlm1q5.js","static/chunks/3g_h_00xs9u59.js","static/chunks/1vpcaaf-0dn7q.js","static/chunks/25ctnyh7njp-d.js","static/chunks/2npk7tr63h7rl.js","static/chunks/01aeari2x_tlz.js"].map(t=>e.l(t))).then(()=>t(70928)))},14074,e=>{e.v(t=>Promise.all(["static/chunks/1zcrrq1fx8g2y.js","static/chunks/1tdg_eolxlcdl.js","static/chunks/1j--a56ji33_x.js","static/chunks/1vzmzrjhlm1q5.js","static/chunks/0vddljjnmozzx.js","static/chunks/3pdpaqzwhhijn.js","static/chunks/1vpcaaf-0dn7q.js","static/chunks/3vaho-xrtuchd.js","static/chunks/0f_nv15a8q415.js","static/chunks/3g_h_00xs9u59.js","static/chunks/2npk7tr63h7rl.js","static/chunks/25ctnyh7njp-d.js"].map(t=>e.l(t))).then(()=>t(87566)))},35983,e=>{e.v(t=>Promise.all(["static/chunks/4227p7752rnny.js","static/chunks/1j--a56ji33_x.js","static/chunks/1vzmzrjhlm1q5.js","static/chunks/2npk7tr63h7rl.js","static/chunks/1vkww9l6lgqag.js","static/chunks/25ctnyh7njp-d.js","static/chunks/0f_nv15a8q415.js","static/chunks/3vaho-xrtuchd.js","static/chunks/1vpcaaf-0dn7q.js","static/chunks/3pyggl13glbdc.js","static/chunks/3pdpaqzwhhijn.js"].map(t=>e.l(t))).then(()=>t(50608)))},18561,e=>{e.v(t=>Promise.all(["static/chunks/1j--a56ji33_x.js","static/chunks/1vkww9l6lgqag.js","static/chunks/3pdpaqzwhhijn.js","static/chunks/2npk7tr63h7rl.js","static/chunks/117ys3lltfmcu.js","static/chunks/25ctnyh7njp-d.js","static/chunks/1vzmzrjhlm1q5.js","static/chunks/3g_h_00xs9u59.js","static/chunks/1vpcaaf-0dn7q.js","static/chunks/3vaho-xrtuchd.js"].map(t=>e.l(t))).then(()=>t(85106)))}]);
@@ -0,0 +1 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,2348,2413,e=>{"use strict";let t=1/1.2;e.s(["ZOOM_IN_FACTOR",0,t,"ZOOM_OUT_FACTOR",0,1.2,"attachDoubleClickFocus",0,function(e,t,a){let n=()=>{let t=e.pick(e.pointerX,e.pointerY);t?.hit&&t.pickedPoint&&a.setTarget(t.pickedPoint)};return t.addEventListener("dblclick",n),()=>t.removeEventListener("dblclick",n)},"disableWheelZoom",0,function(e){e.inputs.removeByType("ArcRotateCameraMouseWheelInput")},"resetFocus",0,function(e,t){e.setTarget(t.target),e.alpha=t.alpha,e.beta=t.beta,e.radius=t.radius},"stepZoom",0,function(e,t){let a=e.lowerRadiusLimit??.01,n=e.upperRadiusLimit??1/0;e.radius=Math.min(n,Math.max(a,e.radius*t))}],2348);var a=e.i(28100);e.s(["ZoomButtons",0,function({onZoom:e,onReset:n}){let i="grid h-8 w-8 place-items-center rounded-md border border-edge bg-ink/80 text-lg leading-none text-fg backdrop-blur transition hover:bg-ink hover:text-white";return(0,a.jsxs)("div",{className:"absolute right-3 top-3 flex flex-col gap-1",children:[(0,a.jsx)("button",{type:"button","aria-label":"Zoom in",className:i,onClick:()=>e(t),children:"+"}),(0,a.jsx)("button",{type:"button","aria-label":"Zoom out",className:i,onClick:()=>e(1.2),children:"−"}),n?(0,a.jsx)("button",{type:"button","aria-label":"Reset camera focus to center",title:"Reset focus to center",className:i,onClick:n,children:(0,a.jsxs)("svg",{viewBox:"0 0 16 16",width:"16",height:"16",fill:"none",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round","aria-hidden":"true",children:[(0,a.jsx)("circle",{cx:"8",cy:"8",r:"3"}),(0,a.jsx)("path",{d:"M8 1v2.5M8 12.5V15M1 8h2.5M12.5 8H15"})]})}):null]})}],2413)},25476,e=>{"use strict";e.s(["attachMeshHover",0,function(e,t,a){let n=0,i=null,s=t=>{let s=t.offsetX,r=t.offsetY;n||(n=requestAnimationFrame(()=>{var t,l;let o;n=0;let c=e.pick(s,r,e=>e.isPickable&&e.isEnabled()),u=c?.pickedMesh?(t=c.pickedMesh,l=c.thinInstanceIndex??-1,(o=t.metadata)?l>=0&&o.hoverLabels?o.hoverLabels[l]??null:o.hoverLabel??null:null):null;u?a({label:u,x:s,y:r}):null!==i&&a(null),i=u}))},r=()=>{n&&(cancelAnimationFrame(n),n=0),null!==i&&(i=null,a(null))};return t.addEventListener("pointermove",s),t.addEventListener("pointerleave",r),()=>{t.removeEventListener("pointermove",s),t.removeEventListener("pointerleave",r),n&&cancelAnimationFrame(n)}}])},48939,e=>{"use strict";var t=e.i(28100),a=e.i(11623);function n(e){return Number.isNaN(e)||e<0?0:e>1?1:e}function i(e){let t=n(e),a=[[0,.1,.9],[0,.85,1],[.1,.9,.2],[1,.85,0],[1,.15,0],[1,1,1]],i=a.length-1,s=t*i,r=Math.min(Math.floor(s),i-1),l=s-r,o=a[r],c=a[r+1];return o&&c?[o[0]+(c[0]-o[0])*l,o[1]+(c[1]-o[1])*l,o[2]+(c[2]-o[2])*l]:[1,1,1]}var s=e.i(56054),r=e.i(2348),l=e.i(25476),o=e.i(18637),c=e.i(2413);e.s(["CameraDome3DView",0,function({bins:u,gridSize:h}){let d=(0,a.useRef)(null),m=(0,a.useRef)(null),p=(0,a.useRef)(null),[b,g]=(0,a.useState)("loading"),[f,x]=(0,a.useState)(null),[v,w]=(0,a.useState)("markers"),[k,j]=(0,a.useState)(null);return(0,a.useEffect)(()=>{let t=d.current;if(!t)return;if(0===u.length)return void g("empty");let a=!1,o=null;return g("loading"),x(null),(async()=>{try{let[{Engine:c},{Scene:d},{ArcRotateCamera:b},{HemisphericLight:f},{Vector3:x,Color3:w,Color4:k,Matrix:y},{MeshBuilder:M},{StandardMaterial:z},{Mesh:C},{DynamicTexture:_}]=await Promise.all([e.A(3905),e.A(94432),e.A(59694),e.A(88004),e.A(27940),e.A(27124),e.A(14074),e.A(2213),e.A(15002),e.A(35983),e.A(18561)]);if(a)return;let A=new c(t,!0,{preserveDrawingBuffer:!1}),L=new d(A);L.clearColor=new k(.04,.05,.07,1);let I=x.Zero(),S=new b("dome-cam",Math.PI/3,Math.PI/2.4,3.6,I,L);S.attachControl(t,!0),S.lowerRadiusLimit=1.6,S.upperRadiusLimit=8,(0,r.disableWheelZoom)(S),m.current=S,p.current={target:I,alpha:S.alpha,beta:S.beta,radius:S.radius},new f("dome-light",new x(.3,1,.2),L);let E=M.CreateSphere("dome",{diameter:2,segments:20},L),P=new z("dome-mat",L);P.wireframe=!0,P.disableLighting=!0,P.emissiveColor=new w(.16,.2,.28),P.alpha=.5,E.material=P,E.isPickable=!1;let $=[];for(let e=0;e<=64;e++){let t=e/64*Math.PI*2;$.push(new x(Math.cos(t),0,Math.sin(t)))}let B=M.CreateLines("dome-horizon",{points:$},L);B.color=new w(.3,.36,.46),B.isPickable=!1;let T=M.CreateLines("dome-forward",{points:[x.Zero(),new x(1.25,0,0)]},L);T.color=new w(.4,.7,.95),T.isPickable=!1;let R=u.reduce((e,t)=>Math.max(e,t.count),1),N=h>0?h:1;if("markers"===v){let e=M.CreateBox("dome-marker",{size:1},L),t=new z("dome-marker-mat",L);t.disableLighting=!0,t.emissiveColor=w.White(),t.specularColor=new w(0,0,0),e.material=t,e.isPickable=!0,e.thinInstanceEnablePicking=!0;let a=u.length,n=new Float32Array(16*a),i=new Float32Array(4*a),r=Array(a);for(let e=0;e<a;e++){let t=u[e],a=(t.azimuth_bin+.5)/N*Math.PI*2-Math.PI,l=(t.elevation_bin+.5)/N*Math.PI-Math.PI/2,o=Math.cos(l),c=o*Math.cos(a),h=Math.sin(l),d=o*Math.sin(a),m=t.count/R,p=.03+.12*m;y.Scaling(p,p,p).multiply(y.Translation(c,h,d)).copyToArray(n,16*e);let[b,g,f]=(0,s.heatRgb)(m);i[4*e]=b,i[4*e+1]=g,i[4*e+2]=f,i[4*e+3]=1,r[e]=`dir (${t.azimuth_bin}, ${t.elevation_bin}) \xb7 ${t.count}`}e.thinInstanceSetBuffer("matrix",n,16,!0),e.thinInstanceSetBuffer("color",i,4,!0),e.metadata={hoverLabels:r}}else{let e=function(e,t={}){let a=void 0!==t.width&&t.width>0?Math.floor(t.width):256,s=void 0!==t.height&&t.height>0?Math.floor(t.height):Math.max(1,Math.floor(a/2)),r=t.colorRamp??i,l=void 0!==t.blurBins&&t.blurBins>0?t.blurBins:1.5,o=n(t.alphaFloor??0),c=n(t.opacity??1),u=e.gridSize>0?e.gridSize:1,h=new Uint8ClampedArray(a*s*4),d=e.bins.filter(e=>e.count>0);if(0===d.length)return{width:a,height:s,rgba:h};let m=Math.max(1e-4,Math.PI/u*l),p=2*m*m,b=Math.cos(Math.min(Math.PI,3*m)),g=d.map(e=>{var t,a;let n,[i,s]=(t=e.azimuthBin,a=e.elevationBin,[(t+.5)/u*Math.PI*2-Math.PI,(a+.5)/u*Math.PI-Math.PI/2]);return[(n=Math.cos(s))*Math.cos(i),Math.sin(s),n*Math.sin(i)]}),f=new Float32Array(a*s),x=0;for(let e=0;e<s;e++){let t=Math.PI/2-(e+.5)/s*Math.PI,n=Math.cos(t),i=Math.sin(t);for(let t=0;t<a;t++){let s=(t+.5)/a*Math.PI*2-Math.PI,r=n*Math.cos(s),l=n*Math.sin(s),o=0;for(let e=0;e<d.length;e++){let t=g[e],a=r*t[0]+i*t[1]+l*t[2];if(a<b)continue;let n=Math.acos(a>1?1:a<-1?-1:a);o+=d[e].count*Math.exp(-(n*n)/p)}f[e*a+t]=o,o>x&&(x=o)}}if(x<=0)return{width:a,height:s,rgba:h};for(let e=0;e<f.length;e++){let t=n(f[e]/x),[a,i,s]=r(t),l=(o+(1-o)*t)*c,u=4*e;h[u]=Math.round(255*a),h[u+1]=Math.round(255*i),h[u+2]=Math.round(255*s),h[u+3]=Math.round(255*n(l))}return{width:a,height:s,rgba:h}}({bins:u.map(e=>({azimuthBin:e.azimuth_bin,elevationBin:e.elevation_bin,count:e.count})),gridSize:N},{width:256,blurBins:1.5,opacity:.95}),t=new _("dome-skytex",{width:e.width,height:e.height},L,!1);t.hasAlpha=!0;let a=t.getContext(),s=a.createImageData(e.width,e.height);s.data.set(e.rgba),a.putImageData(s,0,0),t.update();let r=M.CreateSphere("dome-sky",{diameter:2,segments:48,sideOrientation:C.DOUBLESIDE},L),l=new z("dome-sky-mat",L);l.disableLighting=!0,l.emissiveColor=w.White(),l.diffuseColor=new w(0,0,0),l.specularColor=new w(0,0,0),l.emissiveTexture=t,l.opacityTexture=t,l.backFaceCulling=!1,r.material=l,r.isPickable=!1}A.runRenderLoop(()=>L.render());let F=()=>A.resize();window.addEventListener("resize",F);let q=(0,l.attachMeshHover)(L,t,j),D=(0,r.attachDoubleClickFocus)(L,t,S);g("ready"),o=()=>{window.removeEventListener("resize",F),q(),D(),j(null),m.current=null,p.current=null,L.dispose(),A.dispose()}}catch(e){if(a)return;g("error"),x(e instanceof Error?e.message:"Failed to render dome.")}})(),()=>{a=!0,o?.()}},[u,h,v]),(0,t.jsxs)("div",{className:"relative",children:[(0,t.jsx)("canvas",{ref:d,className:"aspect-video w-full rounded-lg border border-edge bg-ink"}),k?(0,t.jsx)("div",{className:"pointer-events-none absolute z-10 max-w-[16rem] truncate rounded border border-edge bg-ink/90 px-1.5 py-0.5 text-xs text-white shadow backdrop-blur",style:{left:k.x+12,top:k.y+12},children:k.label}):null,"ready"===b?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{className:"absolute left-3 top-3 flex overflow-hidden rounded-md border border-edge bg-ink/80 text-xs backdrop-blur",children:["markers","skydome"].map(e=>(0,t.jsx)("button",{type:"button",onClick:()=>w(e),className:`px-2.5 py-1 ${v===e?"bg-fg/15 font-medium text-white":"text-fg-muted hover:text-fg"}`,children:"markers"===e?"Markers":"Skydome"},e))}),(0,t.jsx)(c.ZoomButtons,{onZoom:e=>m.current&&(0,r.stepZoom)(m.current,e),onReset:()=>m.current&&p.current&&(0,r.resetFocus)(m.current,p.current)}),(0,t.jsx)(o.HeatLegend,{title:"Gaze density",lowLabel:"rarely",highLabel:"most-viewed",note:"markers"===v?"Each marker is a look-direction (camera forward). Blue line = forward, ring = horizon. Color & size scale with how often that direction was viewed.":"Continuous equirectangular heat field: the same gaze bins splatted into a smooth thermal texture wrapped on the dome. The in-scene SDK overlay (showGazeSkydome) renders this inward so you can stand inside it in WebXR."})]}):(0,t.jsx)("div",{className:"pointer-events-none absolute inset-0 grid place-items-center text-sm text-fg-muted",children:"loading"===b?"Rendering…":"empty"===b?"No camera samples in range.":"error"===b?f??"Dome unavailable.":null})]})}],48939)},53993,e=>{"use strict";var t=e.i(28100),a=e.i(11623),n=e.i(56054),i=e.i(2348),s=e.i(25476),r=e.i(18637),l=e.i(2413);function o({shape:e,onChange:a}){let n=e=>`h-8 px-2.5 text-xs font-medium leading-none transition first:rounded-l-md last:rounded-r-md ${e?"bg-ink text-white":"bg-ink/80 text-fg hover:text-white"}`,i="sphere"===e,s="cube"===e;return(0,t.jsxs)("div",{className:"absolute left-3 top-3 flex overflow-hidden rounded-md border border-edge backdrop-blur",role:"group","aria-label":"Voxel marker shape",children:[(0,t.jsx)("button",{type:"button",className:n(i),"aria-pressed":i,onClick:()=>a("sphere"),children:"Spheres"}),(0,t.jsx)("button",{type:"button",className:n(s),"aria-pressed":s,onClick:()=>a("cube"),children:"Cubes"})]})}e.s(["WorldHeatmap3DView",0,function({voxels:c,cellSize:u,proxyMeshes:h=[],legendTitle:d="Pointer-hit density",legendLow:m="few hits",legendHigh:p="most hits",legendNote:b="Each marker is a voxel where the pointer hit your scene. Color & size scale with hits, normalized to the 95th-percentile cell so a few hotspots don't wash out the rest.",emptyLabel:g="No 3D hit-points in range.",totals:f}){let x=(0,a.useRef)(null),v=(0,a.useRef)(null),w=(0,a.useRef)(null),[k,j]=(0,a.useState)("loading"),[y,M]=(0,a.useState)(null),[z,C]=(0,a.useState)("sphere"),[_,A]=(0,a.useState)(null);(0,a.useEffect)(()=>{let t=x.current;if(!t)return;if(0===c.length&&0===h.length)return void j("empty");let a=!1,r=null;return j("loading"),M(null),(async()=>{try{let[{Engine:l},{Scene:o},{ArcRotateCamera:d},{HemisphericLight:m},{Vector3:p,Color3:b,Color4:g,Matrix:f},{MeshBuilder:x},{StandardMaterial:k}]=await Promise.all([e.A(3905),e.A(94432),e.A(59694),e.A(88004),e.A(27940),e.A(27124),e.A(14074),e.A(35983),e.A(18561)]);if(a)return;let y=(0,n.percentileMax)(c.map(e=>e.count),.95),M=0,C=0,_=0,L=0;for(let e of c)M+=(e.vx+.5)*u,C+=(e.vy+.5)*u,_+=(e.vz+.5)*u,L++;if(0===L)for(let e of h)M+=(e.aabb[0]+e.aabb[3])/2,C+=(e.aabb[1]+e.aabb[4])/2,_+=(e.aabb[2]+e.aabb[5])/2,L++;let I=new p(M/L,C/L,_/L),S=4*u;for(let e of c){let t=(e.vx+.5)*u-I.x,a=(e.vy+.5)*u-I.y,n=(e.vz+.5)*u-I.z;S=Math.max(S,Math.sqrt(t*t+a*a+n*n))}for(let e of h){let t=(e.aabb[0]+e.aabb[3])/2-I.x,a=(e.aabb[1]+e.aabb[4])/2-I.y,n=(e.aabb[2]+e.aabb[5])/2-I.z;S=Math.max(S,Math.sqrt(t*t+a*a+n*n))}let E=new l(t,!0,{preserveDrawingBuffer:!1}),P=new o(E);P.clearColor=new g(.04,.05,.07,1);let $=new d("world-cam",Math.PI/4,Math.PI/3,2.4*S,I,P);if($.attachControl(t,!0),(0,i.disableWheelZoom)($),v.current=$,w.current={target:I,alpha:$.alpha,beta:$.beta,radius:$.radius},new m("world-light",new p(.4,1,.3),P),h.length>0){let e=x.CreateBox("scene-proxy",{size:1},P),t=new k("scene-proxy-mat",P);t.wireframe=!0,t.disableLighting=!0,t.emissiveColor=new b(.32,.4,.52),t.alpha=.35,e.material=t,e.isPickable=!0,e.thinInstanceEnablePicking=!0,e.metadata={hoverLabels:h.map(e=>e.name)};let a=h.length,n=new Float32Array(16*a);for(let e=0;e<a;e++){let t=h[e].aabb,a=Math.max(t[3]-t[0],.001),i=Math.max(t[4]-t[1],.001),s=Math.max(t[5]-t[2],.001);f.Scaling(a,i,s).multiply(f.Translation((t[0]+t[3])/2,(t[1]+t[4])/2,(t[2]+t[5])/2)).copyToArray(n,16*e)}e.thinInstanceSetBuffer("matrix",n,16,!0)}if(c.length>0){let e="cube"===z?x.CreateBox("world-voxel",{size:.9*u},P):x.CreateSphere("world-voxel",{diameter:.9*u,segments:6},P),t=new k("world-voxel-mat",P);t.diffuseColor=new b(1,1,1),t.specularColor=new b(0,0,0),e.material=t;let a=c.length,i=new Float32Array(16*a),s=new Float32Array(4*a),r=new Float32Array(a),l=Math.max(.02*S,.25*u)/(.9*u);for(let e=0;e<a;e++){let t=c[e],a=Math.min(1,t.count/y),o=l*(.5+.5*a);r[e]=o,f.Scaling(o,o,o).multiply(f.Translation((t.vx+.5)*u,(t.vy+.5)*u,(t.vz+.5)*u)).copyToArray(i,16*e);let[h,d,m]=(0,n.heatRgb)(a);s[4*e]=h,s[4*e+1]=d,s[4*e+2]=m,s[4*e+3]=1}e.thinInstanceSetBuffer("matrix",i,16,!1),e.thinInstanceSetBuffer("color",s,4,!0);let o=$.radius,h=0,d=()=>{let t=Math.min(8,Math.max(.6,$.radius/o));if(!(.01>Math.abs(t-h))){h=t;for(let e=0;e<a;e++){let a=r[e]*t,n=16*e;i[n]=a,i[n+5]=a,i[n+10]=a}e.thinInstanceBufferUpdated("matrix")}};d(),P.onBeforeRenderObservable.add(d)}E.runRenderLoop(()=>P.render());let B=()=>E.resize();window.addEventListener("resize",B);let T=(0,s.attachMeshHover)(P,t,A),R=(0,i.attachDoubleClickFocus)(P,t,$);j("ready"),r=()=>{window.removeEventListener("resize",B),T(),R(),A(null),v.current=null,w.current=null,P.dispose(),E.dispose()}}catch(e){if(a)return;j("error"),M(e instanceof Error?e.message:"Failed to render heatmap.")}})(),()=>{a=!0,r?.()}},[c,u,h,z]);let L=f?f.cells>c.length?` Showing the ${c.length.toLocaleString()} busiest of ${f.cells.toLocaleString()} occupied cells (${f.hits.toLocaleString()} total hits).`:` ${f.cells.toLocaleString()} occupied cells, ${f.hits.toLocaleString()} total hits.`:"";return(0,t.jsxs)("div",{className:"relative",children:[(0,t.jsx)("canvas",{ref:x,className:"aspect-video w-full rounded-lg border border-edge bg-ink"}),_?(0,t.jsx)("div",{className:"pointer-events-none absolute z-10 max-w-[16rem] truncate rounded border border-edge bg-ink/90 px-1.5 py-0.5 text-xs text-white shadow backdrop-blur",style:{left:_.x+12,top:_.y+12},children:_.label}):null,"ready"===k?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o,{shape:z,onChange:C}),(0,t.jsx)(l.ZoomButtons,{onZoom:e=>v.current&&(0,i.stepZoom)(v.current,e),onReset:()=>v.current&&w.current&&(0,i.resetFocus)(v.current,w.current)}),(0,t.jsx)(r.HeatLegend,{title:d,lowLabel:m,highLabel:p,note:b+L})]}):(0,t.jsx)("div",{className:"pointer-events-none absolute inset-0 grid place-items-center text-sm text-fg-muted",children:"loading"===k?"Rendering…":"empty"===k?g:"error"===k?y??"Heatmap unavailable.":null})]})}])},39592,e=>{"use strict";var t=e.i(28100),a=e.i(11623),n=e.i(56054),i=e.i(2348),s=e.i(25476),r=e.i(2413);function l(e){let t=Math.min(1,Math.max(0,e));return[.118+(.22-.118)*t,.227+.513*t,.541+(.97-.541)*t]}function o(e){return`${e.vx}|${e.vy}|${e.vz}`}function c({mode:e}){return(0,t.jsxs)("div",{className:"absolute bottom-3 right-3 max-w-72 rounded-md border border-edge bg-ink/80 px-2 py-1.5 text-xs text-fg backdrop-blur",children:[(0,t.jsxs)("div",{className:"flex items-center gap-3",children:[(0,t.jsxs)("span",{className:"flex items-center gap-1",children:[(0,t.jsx)("span",{className:"inline-block h-2.5 w-2.5 rounded-sm bg-[#38bdf8]"}),"divergence"===e?"Gaze-heavy":"Gaze"]}),(0,t.jsxs)("span",{className:"flex items-center gap-1",children:[(0,t.jsx)("span",{className:"inline-block h-2.5 w-2.5 rounded-sm bg-[#f4c84b]"}),"divergence"===e?"Click-heavy":"Clicks"]})]}),(0,t.jsx)("p",{className:"mt-1 text-fg-muted",children:"divergence"===e?"Per-voxel normalized difference: which signal dominates each cell. Color & size scale with the gap.":"Gaze = where viewers looked; Clicks = where they acted. Cells with gaze but no clicks are looked-at but un-acted-on."})]})}function u({active:e,onClick:a,children:n}){return(0,t.jsx)("button",{type:"button",onClick:a,className:`rounded px-2 py-0.5 font-medium transition ${e?"bg-amber text-ink":"text-fg-muted hover:text-fg"}`,children:n})}e.s(["GazeClickDivergence3DView",0,function({gazeVoxels:h,clickVoxels:d,cellSize:m,proxyMeshes:p=[]}){let b=(0,a.useRef)(null),g=(0,a.useRef)(null),f=(0,a.useRef)(null),[x,v]=(0,a.useState)("loading"),[w,k]=(0,a.useState)(null),[j,y]=(0,a.useState)("overlay"),[M,z]=(0,a.useState)(null);return(0,a.useEffect)(()=>{let t=b.current;if(!t)return;if(0===h.length&&0===d.length&&0===p.length)return void v("empty");let a=!1,r=null;return v("loading"),k(null),(async()=>{try{let[{Engine:c},{Scene:u},{ArcRotateCamera:b},{HemisphericLight:x},{Vector3:w,Color3:k,Color4:y,Matrix:M},{MeshBuilder:C},{StandardMaterial:_}]=await Promise.all([e.A(3905),e.A(94432),e.A(59694),e.A(88004),e.A(27940),e.A(27124),e.A(14074),e.A(35983),e.A(18561)]);if(a)return;let A=h.reduce((e,t)=>Math.max(e,t.count),1),L=d.reduce((e,t)=>Math.max(e,t.count),1),I=[...h,...d],S=0,E=0,P=0,$=0;for(let e of I)S+=(e.vx+.5)*m,E+=(e.vy+.5)*m,P+=(e.vz+.5)*m,$++;if(0===$)for(let e of p)S+=(e.aabb[0]+e.aabb[3])/2,E+=(e.aabb[1]+e.aabb[4])/2,P+=(e.aabb[2]+e.aabb[5])/2,$++;let B=new w(S/$,E/$,P/$),T=4*m;for(let e of I){let t=(e.vx+.5)*m-B.x,a=(e.vy+.5)*m-B.y,n=(e.vz+.5)*m-B.z;T=Math.max(T,Math.sqrt(t*t+a*a+n*n))}for(let e of p){let t=(e.aabb[0]+e.aabb[3])/2-B.x,a=(e.aabb[1]+e.aabb[4])/2-B.y,n=(e.aabb[2]+e.aabb[5])/2-B.z;T=Math.max(T,Math.sqrt(t*t+a*a+n*n))}let R=new c(t,!0,{preserveDrawingBuffer:!1}),N=new u(R);N.clearColor=new y(.04,.05,.07,1);let F=new b("divergence-cam",Math.PI/4,Math.PI/3,2.4*T,B,N);if(F.attachControl(t,!0),(0,i.disableWheelZoom)(F),g.current=F,f.current={target:B,alpha:F.alpha,beta:F.beta,radius:F.radius},new x("divergence-light",new w(.4,1,.3),N),p.length>0){let e=C.CreateBox("scene-proxy",{size:1},N),t=new _("scene-proxy-mat",N);t.wireframe=!0,t.disableLighting=!0,t.emissiveColor=new k(.32,.4,.52),t.alpha=.35,e.material=t,e.isPickable=!0,e.thinInstanceEnablePicking=!0,e.metadata={hoverLabels:p.map(e=>e.name)};let a=p.length,n=new Float32Array(16*a);for(let e=0;e<a;e++){let t=p[e].aabb,a=Math.max(t[3]-t[0],.001),i=Math.max(t[4]-t[1],.001),s=Math.max(t[5]-t[2],.001);M.Scaling(a,i,s).multiply(M.Translation((t[0]+t[3])/2,(t[1]+t[4])/2,(t[2]+t[5])/2)).copyToArray(n,16*e)}e.thinInstanceSetBuffer("matrix",n,16,!0)}let q=Math.max(.02*T,.25*m)/(.9*m),D=(e,t,a,n,i)=>{if(0===t.length)return;let s=C.CreateSphere(e,{diameter:.9*m,segments:6},N),r=new _(`${e}-mat`,N);r.diffuseColor=new k(1,1,1),r.specularColor=new k(0,0,0),s.material=r,s.metadata={hoverLabel:i};let l=t.length,o=new Float32Array(16*l),c=new Float32Array(4*l);for(let e=0;e<l;e++){let i=t[e],s=i.count/a,r=q*(.5+.5*s);M.Scaling(r,r,r).multiply(M.Translation((i.vx+.5)*m,(i.vy+.5)*m,(i.vz+.5)*m)).copyToArray(o,16*e);let[l,u,h]=n(s);c[4*e]=l,c[4*e+1]=u,c[4*e+2]=h,c[4*e+3]=1}s.thinInstanceSetBuffer("matrix",o,16,!1),s.thinInstanceSetBuffer("color",c,4,!0)};if("divergence"===j){let e=new Map(h.map(e=>[o(e),e])),t=new Map(d.map(e=>[o(e),e])),a=new Set([...e.keys(),...t.keys()]),i=[],s=[];for(let n of a){let a=(e.get(n)?.count??0)/A,r=(t.get(n)?.count??0)/L,l=t.get(n)??e.get(n),o=r-a,c={vx:l.vx,vy:l.vy,vz:l.vz,count:1e3*Math.abs(o)};(o>=0?i:s).push(c)}D("div-click",i,1e3,n.heatRgb,"Click-heavy"),D("div-gaze",s,1e3,l,"Gaze-heavy")}else("overlay"===j||"gaze"===j)&&D("gaze-voxel",h,A,l,"Gaze"),("overlay"===j||"click"===j)&&D("click-voxel",d,L,n.heatRgb,"Click");R.runRenderLoop(()=>N.render());let O=()=>R.resize();window.addEventListener("resize",O);let Z=(0,s.attachMeshHover)(N,t,z),V=(0,i.attachDoubleClickFocus)(N,t,F);v("ready"),r=()=>{window.removeEventListener("resize",O),Z(),V(),z(null),g.current=null,f.current=null,N.dispose(),R.dispose()}}catch(e){if(a)return;v("error"),k(e instanceof Error?e.message:"Failed to render overlay.")}})(),()=>{a=!0,r?.()}},[h,d,m,p,j]),(0,t.jsxs)("div",{className:"relative",children:[(0,t.jsx)("canvas",{ref:b,className:"aspect-video w-full rounded-lg border border-edge bg-ink"}),M?(0,t.jsx)("div",{className:"pointer-events-none absolute z-10 max-w-64 truncate rounded border border-edge bg-ink/90 px-1.5 py-0.5 text-xs text-white shadow backdrop-blur",style:{left:M.x+12,top:M.y+12},children:M.label}):null,"ready"===x?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"absolute left-3 top-3 flex items-center gap-1 rounded-md border border-edge bg-ink/80 p-0.5 text-xs backdrop-blur",children:[(0,t.jsx)(u,{active:"overlay"===j,onClick:()=>y("overlay"),children:"Overlay"}),(0,t.jsx)(u,{active:"gaze"===j,onClick:()=>y("gaze"),children:"Gaze"}),(0,t.jsx)(u,{active:"click"===j,onClick:()=>y("click"),children:"Clicks"}),(0,t.jsx)(u,{active:"divergence"===j,onClick:()=>y("divergence"),children:"Divergence"})]}),(0,t.jsx)(r.ZoomButtons,{onZoom:e=>g.current&&(0,i.stepZoom)(g.current,e),onReset:()=>g.current&&f.current&&(0,i.resetFocus)(g.current,f.current)}),(0,t.jsx)(c,{mode:j})]}):(0,t.jsx)("div",{className:"pointer-events-none absolute inset-0 grid place-items-center text-sm text-fg-muted",children:"loading"===x?"Rendering…":"empty"===x?"No gaze or click hit-points in range. Enable gaze + pointer capture in the SDK.":"error"===x?w??"Overlay unavailable.":null})]})}])},19399,e=>{"use strict";var t=e.i(28100),a=e.i(11623),n=e.i(20880);let i="__other_sp__",s="__other_mesh__";function r(e){return`${e[0]}|${e[1]}|${e[2]}`}function l(e,t){return t<=1?0:1.4-e/(t-1)*2.8}var o=e.i(56054),c=e.i(2348),u=e.i(25476),h=e.i(18637),d=e.i(2413);let m="__all__",p={maxStandpoints:6,maxMeshes:10,maxRibbons:70};function b(e,t){return`${e}|${t}`}function g({label:e,value:a,onChange:n,allLabel:i,options:s}){return(0,t.jsxs)("label",{className:"flex items-center gap-1.5 rounded-md border border-edge bg-ink/80 px-2 py-1 text-xs text-fg backdrop-blur",children:[(0,t.jsx)("span",{className:"font-medium text-fg-muted",children:e}),(0,t.jsxs)("select",{className:"max-w-[12rem] bg-transparent text-white outline-none",value:a,onChange:e=>n(e.target.value),children:[(0,t.jsx)("option",{value:m,children:i}),s.map(e=>(0,t.jsx)("option",{value:e.value,children:e.label},e.value))]})]})}function f({active:e,onClick:a,children:n,disabled:i=!1,title:s}){return(0,t.jsx)("button",{type:"button",onClick:a,disabled:i,title:s,className:`rounded px-2 py-0.5 font-medium transition ${i?"cursor-not-allowed text-fg-muted/40":e?"bg-amber text-ink":"text-fg-muted hover:text-fg"}`,children:n})}function x({standpoints:e,proxyMeshes:n,selectedKey:i,onSelect:s}){let r=(0,a.useRef)(null),l=(0,a.useMemo)(()=>e.filter(e=>e.origin),[e]),o=(0,a.useMemo)(()=>{let e=1/0,t=-1/0,a=1/0,i=-1/0,s=(n,s)=>{e=Math.min(e,n),t=Math.max(t,n),a=Math.min(a,s),i=Math.max(i,s)};for(let e of n)s(e.aabb[0],e.aabb[2]),s(e.aabb[3],e.aabb[5]);for(let e of l)s(e.origin[0],e.origin[2]);return Number.isFinite(e)?(t-e<.001&&(e-=1,t+=1),i-a<.001&&(a-=1,i+=1),{minX:e,maxX:t,minZ:a,maxZ:i}):{minX:-1,maxX:1,minZ:-1,maxZ:1}},[n,l]),c=(0,a.useMemo)(()=>{let e=Math.min(134/(o.maxX-o.minX),94/(o.maxZ-o.minZ));return(t,a)=>[8+(t-o.minX)*e,8+(a-o.minZ)*e]},[o]),u=(0,a.useMemo)(()=>l.reduce((e,t)=>Math.max(e,t.count),1),[l]);return(0,a.useEffect)(()=>{let e=r.current,t=e?.getContext("2d");if(!t)return;let a=window.devicePixelRatio||1;for(let i of(e.width=150*a,e.height=110*a,t.setTransform(a,0,0,a,0,0),t.clearRect(0,0,150,110),t.fillStyle="rgba(8,10,14,0.85)",t.fillRect(0,0,150,110),t.strokeStyle="rgba(120,140,170,0.35)",t.lineWidth=1,n)){let[e,a]=c(i.aabb[0],i.aabb[2]),[n,s]=c(i.aabb[3],i.aabb[5]);t.strokeRect(Math.min(e,n),Math.min(a,s),Math.abs(n-e),Math.abs(s-a))}for(let e of l){let[a,n]=c(e.origin[0],e.origin[2]),s=2+e.count/u*4,r=e.key===i;t.beginPath(),t.arc(a,n,s,0,2*Math.PI),t.fillStyle=r?"rgba(242,115,242,1)":"rgba(242,115,242,0.55)",t.fill(),r&&(t.beginPath(),t.arc(a,n,s+2.5,0,2*Math.PI),t.strokeStyle="rgba(255,255,255,0.9)",t.lineWidth=1.5,t.stroke())}},[n,l,c,u,i]),(0,t.jsxs)("div",{className:"absolute right-3 top-3 rounded-md border border-edge bg-ink/80 p-1 backdrop-blur",children:[(0,t.jsx)("div",{className:"px-1 pb-0.5 text-[10px] font-medium text-fg-muted",children:"Standpoints (top view)"}),(0,t.jsx)("canvas",{ref:r,className:"h-27.5 w-37.5 cursor-pointer rounded",onClick:e=>{let t=r.current;if(!t||0===l.length)return;let a=t.getBoundingClientRect(),n=(e.clientX-a.left)/a.width*150,i=(e.clientY-a.top)/a.height*110,o=null,u=1/0;for(let e of l){let[t,a]=c(e.origin[0],e.origin[2]),s=(t-n)**2+(a-i)**2;s<u&&(u=s,o=e)}o&&u<=196&&s(o.key)}})]})}e.s(["FlowSankey3DView",0,function({links:v,gridSize:w,proxyMeshes:k=[],maxLinks:j=80,baseUrl:y,apiKey:M,flowQuery:z,hasFirstPerson:C=!1}){let _=(0,a.useRef)(null),A=(0,a.useRef)(null),L=(0,a.useRef)(null),[I,S]=(0,a.useState)("loading"),[E,P]=(0,a.useState)(null),[$,B]=(0,a.useState)(m),[T,R]=(0,a.useState)(m),[N,F]=(0,a.useState)(m),[q,D]=(0,a.useState)("aggregate"),[O,Z]=(0,a.useState)(null),[V,W]=(0,a.useState)("all"),[H,K]=(0,a.useState)(v),U=!!(y&&z),G=(0,a.useMemo)(()=>z?JSON.stringify(z):"",[z]),Y=(0,a.useRef)(!1);(0,a.useEffect)(()=>{!Y.current&&C&&(W("first-person"),Y.current=!0)},[C]),(0,a.useEffect)(()=>{C&&"viewer"===V&&W("first-person")},[C,V]),(0,a.useEffect)(()=>{U||K(v)},[v,U]),(0,a.useEffect)(()=>{if(!y||!z)return;let e=!1,t=new n.CollectorApi(y,M??""),a="all"===V?void 0:V;return t.flowHeatmap({...z,bins:w,limit:400,groupByOrigin:!0,cameraMode:a}).then(t=>{e||K(t)}).catch(()=>{e||K([])}),()=>{e=!0}},[y,M,G,V,w]);let X=(0,a.useMemo)(()=>{let e=new Map;for(let t of H){if(!t.originVoxel)continue;let a=r(t.originVoxel),n=t.origin,i=e.get(a);i?(i.count+=t.count,n&&(i.ox+=n[0]*t.count,i.oy+=n[1]*t.count,i.oz+=n[2]*t.count,i.wsum+=t.count)):e.set(a,{key:a,voxel:t.originVoxel,count:t.count,ox:n?n[0]*t.count:0,oy:n?n[1]*t.count:0,oz:n?n[2]*t.count:0,wsum:n?t.count:0})}return[...e.values()].map(e=>({key:e.key,voxel:e.voxel,count:e.count,origin:e.wsum>0?[e.ox/e.wsum,e.oy/e.wsum,e.oz/e.wsum]:void 0})).sort((e,t)=>t.count-e.count)},[H]),J=X.length>0,Q=(0,a.useMemo)(()=>N===m?null:X.find(e=>e.key===N)??null,[X,N]),ee=(0,a.useMemo)(()=>(function(e,t,a,n){let o=e.filter(e=>e.originVoxel);if(0===o.length)return{standpoints:[],gazes:[],meshes:[],ribbons:[],maxCount:1};let c=t.slice(0,Math.max(1,n.maxStandpoints)),u=new Set(c.map(e=>e.key)),h=e=>{let t=e.originVoxel?r(e.originVoxel):i;return u.has(t)?t:i},d=new Map;for(let e of o)d.set(e.mesh,(d.get(e.mesh)??0)+e.count);let m=new Set([...d.entries()].sort((e,t)=>t[1]-e[1]).slice(0,Math.max(1,n.maxMeshes)).map(([e])=>e)),p=e=>m.has(e)?e:s,b=new Map;for(let e of o){let t=h(e),a=p(e.mesh),n=`${t}|${e.azimuth_bin}|${e.elevation_bin}|${a}`,i=b.get(n);i?i.count+=e.count:b.set(n,{standpointId:t,gazeId:`${t}|${e.azimuth_bin}|${e.elevation_bin}`,meshId:a,azimuthBin:e.azimuth_bin,elevationBin:e.elevation_bin,count:e.count})}let g=[...b.values()].sort((e,t)=>t.count-e.count),f=g.slice(0,Math.max(1,n.maxRibbons)),x=g.slice(Math.max(1,n.maxRibbons));if(x.length>0){let e=new Map(f.map(e=>[`${e.standpointId}|${e.azimuthBin}|${e.elevationBin}|${s}`,e]));for(let t of x){let a=`${t.standpointId}|${t.azimuthBin}|${t.elevationBin}|${s}`,n=e.get(a);if(n)n.count+=t.count;else{let n={standpointId:t.standpointId,gazeId:t.gazeId,meshId:s,azimuthBin:t.azimuthBin,elevationBin:t.elevationBin,count:t.count};e.set(a,n),f.push(n)}}}let v=new Set(f.map(e=>e.standpointId)),w=new Set(f.map(e=>e.meshId)),k=[...c.filter(e=>v.has(e.key)).map(e=>e.key),...v.has(i)?[i]:[]],j=k.map((e,t)=>{let a=c.find(t=>t.key===e),n=f.filter(t=>t.standpointId===e).reduce((e,t)=>e+t.count,0);return{id:e,kind:"standpoint",pos:[-2.6,l(t,k.length),0],count:n,label:a?`[${a.voxel[0]}, ${a.voxel[1]}, ${a.voxel[2]}]`:"Other standpoints",isOther:e===i}}),y=new Map(j.map(e=>[e.id,e.pos[1]])),M=new Map;for(let e of f)M.set(e.meshId,(M.get(e.meshId)??0)+e.count);let z=[...w].sort((e,t)=>(M.get(t)??0)-(M.get(e)??0));z.sort((e,t)=>(e===s)-(t===s));let C=z.map((e,t)=>({id:e,kind:"mesh",pos:[2.6,l(t,z.length),0],count:M.get(e)??0,label:e===s?"Other meshes":e,isOther:e===s})),_=new Map;for(let e of f){let t=_.get(e.gazeId);t?t.count+=e.count:_.set(e.gazeId,{az:e.azimuthBin,el:e.elevationBin,sp:e.standpointId,count:e.count})}let A=[..._.entries()].map(([e,t])=>{let n=y.get(t.sp)??0,i=(t.az+.5)/a-.5;return{id:e,kind:"gaze",pos:[0,n+((t.el+.5)/a-.5)*.85,1.6*i],count:t.count,label:`(${t.az}, ${t.el})`,isOther:!1}}),L=f.reduce((e,t)=>Math.max(e,t.count),1);return{standpoints:j,gazes:A,meshes:C,ribbons:f,maxCount:L}})(H,X,w,p),[H,X,w]),et="twostage"===q&&J;(0,a.useEffect)(()=>{"twostage"!==q||J||D("aggregate")},[q,J]);let ea=(0,a.useMemo)(()=>{if(N!==m&&J)return H.filter(e=>e.originVoxel&&r(e.originVoxel)===N);if(!J)return H;let e=new Map;for(let t of H){let a=`${t.azimuth_bin}|${t.elevation_bin}|${t.mesh}`,n=e.get(a);n?n.count+=t.count:e.set(a,{azimuth_bin:t.azimuth_bin,elevation_bin:t.elevation_bin,mesh:t.mesh,count:t.count})}return[...e.values()]},[H,N,J]),en=(0,a.useMemo)(()=>[...ea].sort((e,t)=>t.count-e.count).slice(0,Math.max(1,j)),[ea,j]),ei=(0,a.useMemo)(()=>{let e=new Map;for(let t of en)e.set(t.mesh,(e.get(t.mesh)??0)+t.count);return[...e.entries()].sort((e,t)=>t[1]-e[1])},[en]),es=(0,a.useMemo)(()=>{let e=new Map;for(let t of en){let a=b(t.azimuth_bin,t.elevation_bin),n=e.get(a);n?n.count+=t.count:e.set(a,{azimuthBin:t.azimuth_bin,elevationBin:t.elevation_bin,count:t.count})}return[...e.values()].sort((e,t)=>t.count-e.count)},[en]);(0,a.useEffect)(()=>{!et&&$!==m&&(ei.some(([e])=>e===$)||B(m))},[et,$,ei]),(0,a.useEffect)(()=>{!et&&T!==m&&(es.some(e=>b(e.azimuthBin,e.elevationBin)===T)||R(m))},[et,T,es]),(0,a.useEffect)(()=>{!et&&N!==m&&(X.some(e=>e.key===N)||F(m))},[et,N,X]),(0,a.useEffect)(()=>{B(m),R(m),F(m)},[q]);let er=(0,a.useMemo)(()=>et?ee.ribbons.filter(e=>{let t=N===m||e.standpointId===N,a=T===m||b(e.azimuthBin,e.elevationBin)===T,n=$===m||e.meshId===$;return t&&a&&n}).length:en.filter(e=>{let t=T===m||b(e.azimuth_bin,e.elevation_bin)===T,a=$===m||e.mesh===$;return t&&a}).length,[et,ee,en,$,T,N]),el=et?ee.ribbons.length:en.length,eo=(0,a.useMemo)(()=>et?ee.standpoints.map(e=>({value:e.id,label:`${e.label} \xb7 ${e.count}`})):X.slice(0,24).map(e=>({value:e.key,label:`[${e.voxel[0]}, ${e.voxel[1]}, ${e.voxel[2]}] \xb7 ${e.count}`})),[et,ee,X]),ec=(0,a.useMemo)(()=>{if(et){let e=new Map;for(let t of ee.ribbons){let a=b(t.azimuthBin,t.elevationBin),n=e.get(a);n?n.count+=t.count:e.set(a,{az:t.azimuthBin,el:t.elevationBin,count:t.count})}return[...e.values()].sort((e,t)=>t.count-e.count).map(e=>({value:b(e.az,e.el),label:`(${e.az}, ${e.el}) \xb7 ${e.count}`}))}return es.map(e=>({value:b(e.azimuthBin,e.elevationBin),label:`(${e.azimuthBin}, ${e.elevationBin}) \xb7 ${e.count}`}))},[et,ee,es]),eu=(0,a.useMemo)(()=>et?ee.meshes.map(e=>({value:e.id,label:`${e.label} \xb7 ${e.count}`})):ei.map(([e,t])=>({value:e,label:`${e} \xb7 ${t}`})),[et,ee,ei]);return(0,a.useEffect)(()=>{let t=_.current;if(!t||et)return;if(0===en.length)return void S("empty");let a=!1,n=null;return S("loading"),P(null),(async()=>{try{let[{Engine:i},{Scene:s},{ArcRotateCamera:r},{HemisphericLight:l},{Vector3:h,Color3:d,Color4:p},{MeshBuilder:g},{StandardMaterial:f}]=await Promise.all([e.A(3905),e.A(94432),e.A(59694),e.A(88004),e.A(27940),e.A(27124),e.A(14074),e.A(18561)]);if(a)return;let x=new i(t,!0,{preserveDrawingBuffer:!1}),v=new s(x);v.clearColor=new p(.04,.05,.07,1);let j=new Map;for(let e of k)j.set(e.name,function(e){let t=e.aabb;return[(t[0]+t[3])/2,(t[1]+t[4])/2,(t[2]+t[5])/2]}(e));let y=new Map,M=ei.map(([e])=>e).filter(e=>!j.has(e));for(let e=0;e<M.length;e++){let t=M[e],a=function(e){let t=0;for(let a=0;a<e.length;a++)t=31*t+e.charCodeAt(a)|0;return Math.abs(t)}(t),n=e/Math.max(1,M.length)*Math.PI*2+a%100/100*.35;y.set(t,[2.2*Math.cos(n),-.35+(a%7-3)*.06,2.2*Math.sin(n)])}for(let[e,t]of j.entries())y.set(e,t);let z=0,C=0,_=0,I=0;for(let e of y.values())z+=e[0],C+=e[1],_+=e[2],I++;let E=new h(z/Math.max(1,I),C/Math.max(1,I),_/Math.max(1,I)),P=1.8;for(let e of y.values()){let t=e[0]-E.x,a=e[1]-E.y,n=e[2]-E.z;P=Math.max(P,Math.sqrt(t*t+a*a+n*n))}let B=.75*P+1,R=Math.max(1,P/1.8),N=en.reduce((e,t)=>Math.max(e,t.count),1),F=new f("flow-source-node",v);F.disableLighting=!0,F.emissiveColor=new d(.45,.75,1);let q=new f("flow-target-node",v);q.disableLighting=!0,q.emissiveColor=new d(1,.82,.42);let D=new Set,O=new Set,V=e=>{let t=T===m||b(e.azimuth_bin,e.elevation_bin)===T,a=$===m||e.mesh===$;return t&&a},W=new Set,H=new Set;for(let e of en)V(e)&&(W.add(b(e.azimuth_bin,e.elevation_bin)),H.add(e.mesh));for(let e of en){let t=`${e.azimuth_bin}|${e.elevation_bin}`,a=y.get(e.mesh);if(!a)continue;let n=V(e),i=(e.azimuth_bin+.5)/w*Math.PI*2-Math.PI,s=(e.elevation_bin+.5)/w*Math.PI-Math.PI/2,r=Math.cos(s),l=r*Math.cos(i),c=Math.sin(s),u=r*Math.sin(i),p=new h(E.x+l*B,E.y+c*B,E.z+u*B),b=new h(a[0],a[1],a[2]);if(!D.has(t)){let e=g.CreateSphere(`flow-src-${t}`,{diameter:.12*R,segments:6},v);e.position=p;let a=F.clone(`flow-src-mat-${t}`);a.alpha=W.has(t)||$===m&&T===m?1:.22,e.material=a,e.isPickable=!1,D.add(t)}if(!O.has(e.mesh)){let t=g.CreateSphere(`flow-target-${e.mesh}`,{diameter:.2*R,segments:7},v);t.position=b;let a=q.clone(`flow-target-mat-${e.mesh}`);a.alpha=H.has(e.mesh)||$===m&&T===m?1:.22,t.material=a,t.isPickable=!0,t.metadata={hoverLabel:e.mesh},O.add(e.mesh)}let x=p.add(b).scale(.5),k=x.subtract(E),j=Math.sqrt(k.x*k.x+k.y*k.y+k.z*k.z),M=j>1e-6?k.x/j:0,z=j>1e-6?k.y/j:1,C=j>1e-6?k.z/j:0,_=(.35+e.count/N*.75)*R,A=new h(x.x+M*_,x.y+z*_+.12*R,x.z+C*_),L=[];for(let e=0;e<=18;e++){let t=e/18,a=1-t;L.push(new h(a*a*p.x+2*a*t*A.x+t*t*b.x,a*a*p.y+2*a*t*A.y+t*t*b.y,a*a*p.z+2*a*t*A.z+t*t*b.z))}let I=e.count/N,[S,P,Z]=(0,o.heatRgb)(I),K=g.CreateTube(`flow-link-${e.mesh}-${t}`,{path:L,radius:(n?1:.4)*(.012+.04*I)*R,tessellation:8,cap:0,sideOrientation:0},v),U=new f(`flow-link-mat-${e.mesh}-${t}`,v);U.disableLighting=!0,U.emissiveColor=new d(S,P,Z),U.alpha=n?.35+.65*I:.08,K.material=U,K.isPickable=!0,K.metadata={hoverLabel:e.mesh}}let K=new r("flow-cam",Math.PI/4,Math.PI/3,3.4*P,E,v);K.attachControl(t,!0),(0,c.disableWheelZoom)(K),A.current=K,L.current={target:E,alpha:K.alpha,beta:K.beta,radius:K.radius},new l("flow-light",new h(.3,1,.2),v);let U=g.CreateSphere("flow-source-dome",{diameter:2*B,segments:20},v);U.position=E;let G=new f("flow-source-dome-mat",v);G.wireframe=!0,G.disableLighting=!0,G.emissiveColor=new d(.16,.2,.28),G.alpha=.35,U.material=G,U.isPickable=!1;let Y=Q?.origin;if(Y){let e=new h(Y[0],Y[1],Y[2]),t=g.CreateSphere("flow-standpoint",{diameter:.26*R,segments:10},v);t.position=e;let a=new f("flow-standpoint-mat",v);a.disableLighting=!0,a.emissiveColor=new d(.95,.45,.95),t.material=a,t.isPickable=!1;let n=g.CreateLines("flow-standpoint-stem",{points:[e,new h(e.x,E.y,e.z)]},v);n.color=new d(.95,.45,.95),n.isPickable=!1}x.runRenderLoop(()=>v.render());let X=()=>x.resize();window.addEventListener("resize",X);let J=(0,u.attachMeshHover)(v,t,Z),ee=(0,c.attachDoubleClickFocus)(v,t,K);S("ready"),n=()=>{window.removeEventListener("resize",X),J(),ee(),Z(null),A.current=null,L.current=null,v.dispose(),x.dispose()}}catch(e){if(a)return;S("error"),P(e instanceof Error?e.message:"Failed to render flow links.")}})(),()=>{a=!0,n?.()}},[en,w,k,$,T,Q,et]),(0,a.useEffect)(()=>{let t=_.current;if(!t||!et)return;if(0===ee.ribbons.length)return void S("empty");let a=!1,n=null;return S("loading"),P(null),(async()=>{try{let[{Engine:i},{Scene:s},{ArcRotateCamera:r},{HemisphericLight:l},{Vector3:h,Color3:d,Color4:p},{MeshBuilder:g},{StandardMaterial:f}]=await Promise.all([e.A(3905),e.A(94432),e.A(59694),e.A(88004),e.A(27940),e.A(27124),e.A(14074),e.A(18561)]);if(a)return;let x=new i(t,!0,{preserveDrawingBuffer:!1}),v=new s(x);v.clearColor=new p(.04,.05,.07,1);let w=e=>{let t=N===m||e.standpointId===N,a=T===m||b(e.azimuthBin,e.elevationBin)===T,n=$===m||e.meshId===$;return t&&a&&n},k=N!==m||T!==m||$!==m,j=new Set;for(let e of ee.ribbons)w(e)&&(j.add(e.standpointId),j.add(e.gazeId),j.add(e.meshId));let y={standpoint:[.95,.45,.95],gaze:[.45,.75,1],mesh:[1,.82,.42]},M={standpoint:.26,gaze:.13,mesh:.22},z=[...ee.standpoints,...ee.gazes,...ee.meshes],C=new Map(z.map(e=>[e.id,e.pos])),_=new Map(z.map(e=>[e.id,e.label]));for(let e of z){let t=g.CreateSphere(`ts-node-${e.kind}-${e.id}`,{diameter:M[e.kind],segments:8},v);t.position=new h(e.pos[0],e.pos[1],e.pos[2]);let a=new f(`ts-node-mat-${e.kind}-${e.id}`,v);a.disableLighting=!0;let[n,i,s]=y[e.kind];a.emissiveColor=new d(n,i,s),a.alpha=!k||j.has(e.id)?1:.2,t.material=a,t.isPickable=!0,t.metadata={hoverLabel:e.label}}let I=(e,t,a)=>{let n=e[0],i=e[1],s=e[2],r=t[0],l=t[1],o=t[2],c=[(n+r)/2,(i+l)/2+a,(s+o)/2],u=[];for(let e=0;e<=12;e++){let t=e/12,a=1-t;u.push(new h(a*a*n+2*a*t*c[0]+t*t*r,a*a*i+2*a*t*c[1]+t*t*l,a*a*s+2*a*t*c[2]+t*t*o))}return u};for(let e of ee.ribbons){let t=C.get(e.standpointId),a=C.get(e.gazeId),n=C.get(e.meshId);if(!t||!a||!n)continue;let i=e.count/ee.maxCount,s=.18+.5*i,r=[...I(t,a,s),...I(a,n,s).slice(1)],l=w(e),[c,u,h]=(0,o.heatRgb)(i),m=g.CreateTube(`ts-link-${e.standpointId}-${e.gazeId}-${e.meshId}`,{path:r,radius:(l?1:.4)*(.012+.04*i),tessellation:8,cap:0,sideOrientation:0},v),p=new f(`ts-link-mat-${e.standpointId}-${e.gazeId}-${e.meshId}`,v);p.disableLighting=!0,p.emissiveColor=new d(c,u,h),p.alpha=l?.35+.65*i:k?.06:.18,m.material=p,m.isPickable=!0,m.metadata={hoverLabel:_.get(e.meshId)??e.meshId}}let E=h.Zero(),P=new r("ts-cam",Math.PI/2,Math.PI/2.4,8.5,E,v);P.attachControl(t,!0),(0,c.disableWheelZoom)(P),A.current=P,L.current={target:E,alpha:P.alpha,beta:P.beta,radius:P.radius},new l("ts-light",new h(.3,1,.2),v),x.runRenderLoop(()=>v.render());let B=()=>x.resize();window.addEventListener("resize",B);let R=(0,u.attachMeshHover)(v,t,Z),F=(0,c.attachDoubleClickFocus)(v,t,P);S("ready"),n=()=>{window.removeEventListener("resize",B),R(),F(),Z(null),A.current=null,L.current=null,v.dispose(),x.dispose()}}catch(e){if(a)return;S("error"),P(e instanceof Error?e.message:"Failed to render flow links.")}})(),()=>{a=!0,n?.()}},[et,ee,N,T,$]),(0,t.jsxs)("div",{className:"relative",children:[(0,t.jsx)("canvas",{ref:_,className:"aspect-video w-full rounded-lg border border-edge bg-ink"}),O?(0,t.jsx)("div",{className:"pointer-events-none absolute z-10 max-w-[16rem] truncate rounded border border-edge bg-ink/90 px-1.5 py-0.5 text-xs text-white shadow backdrop-blur",style:{left:O.x+12,top:O.y+12},children:O.label}):null,"ready"===I?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"absolute left-3 top-3 flex flex-wrap gap-2",children:[J?(0,t.jsxs)("div",{className:"flex items-center gap-1 rounded-md border border-edge bg-ink/80 p-0.5 text-xs backdrop-blur",children:[(0,t.jsx)(f,{active:!et,onClick:()=>D("aggregate"),children:"Aggregate"}),(0,t.jsx)(f,{active:et,onClick:()=>D("twostage"),children:"Two-stage"})]}):null,U?(0,t.jsxs)("div",{className:"flex items-center gap-1 rounded-md border border-edge bg-ink/80 p-0.5 text-xs backdrop-blur",children:[(0,t.jsx)(f,{active:"first-person"===V,onClick:()=>W("first-person"),children:"Walk"}),(0,t.jsx)(f,{active:"viewer"===V,onClick:()=>W("viewer"),disabled:C,title:C?"Orbit (viewer) flow isn't available for walkable scenes":void 0,children:"Orbit"}),(0,t.jsx)(f,{active:"all"===V,onClick:()=>W("all"),children:"All"})]}):null,J?(0,t.jsx)(g,{label:"Standpoint",value:N,onChange:F,allLabel:"All standpoints",options:eo}):null,(0,t.jsx)(g,{label:et?"Gaze":"Source",value:T,onChange:R,allLabel:et?"All gaze sectors":"All sources",options:ec}),(0,t.jsx)(g,{label:"Mesh",value:$,onChange:B,allLabel:"All meshes",options:eu})]}),et?(0,t.jsx)(x,{standpoints:X,proxyMeshes:k,selectedKey:N,onSelect:e=>F(t=>t===e?m:e)}):null,(0,t.jsxs)("div",{className:"pointer-events-none absolute bottom-3 right-3 flex max-w-[20rem] flex-col items-end gap-2",children:[U&&!C?(0,t.jsxs)("div",{className:"rounded-md border border-edge bg-ink/80 px-2 py-1 text-xs text-fg-muted backdrop-blur",children:["Orbit-dominated scene — viewer ",(0,t.jsx)("em",{children:"position"})," adds little here. Use the"," ",(0,t.jsx)("strong",{children:"View dome"})," (§7.5) above for where viewers looked."]}):null,(0,t.jsxs)("div",{className:"rounded-md border border-edge bg-ink/80 px-2 py-1 text-xs text-fg backdrop-blur",children:["Active links: ",er,"/",el]})]}),(0,t.jsx)(d.ZoomButtons,{onZoom:e=>A.current&&(0,c.stepZoom)(A.current,e),onReset:()=>A.current&&L.current&&(0,c.resetFocus)(A.current,L.current)}),(0,t.jsx)(h.HeatLegend,{title:"Flow volume",lowLabel:"fewer links",highLabel:"dominant links",note:et?"Three columns: standpoint → gaze sector → mesh. Top standpoints/meshes are kept; the tail folds into an “Other” node. Pick a standpoint (or click the minimap), gaze sector, or mesh to emphasize matching ribbons.":"Each arc aggregates clicks from one camera-direction bin to a mesh. Pick a source or mesh to emphasize matching links and dim the rest."})]}):(0,t.jsx)("div",{className:"pointer-events-none absolute inset-0 grid place-items-center text-sm text-fg-muted",children:"loading"===I?"Rendering…":"empty"===I?"No aggregate flow links in range.":"error"===I?E??"Flow view unavailable.":null})]})}],19399)},64434,e=>{"use strict";e.s([],4255),e.i(4255);var t=e.i(48939),a=e.i(53993),n=e.i(19399),i=e.i(39592),s=e.i(28100),r=e.i(11623),l=e.i(56054),o=e.i(2348),c=e.i(25476),u=e.i(18637),h=e.i(2413);let d="__all__";function m(e){return`${e[0]},${e[1]},${e[2]}`}function p({label:e,value:t,onChange:a,allLabel:n,options:i}){return(0,s.jsxs)("label",{className:"flex items-center gap-1.5 rounded-md border border-edge bg-ink/80 px-2 py-1 text-xs text-fg backdrop-blur",children:[(0,s.jsx)("span",{className:"font-medium text-fg-muted",children:e}),(0,s.jsxs)("select",{className:"max-w-[12rem] bg-transparent text-white outline-none",value:t,onChange:e=>a(e.target.value),children:[(0,s.jsx)("option",{value:d,children:n}),i.map(e=>(0,s.jsx)("option",{value:e.value,children:e.label},e.value))]})]})}var b=e.i(37215);e.s(["CAMERA_DOME_SUBTITLE",()=>b.CAMERA_DOME_SUBTITLE,"CAMERA_DOME_TITLE",()=>b.CAMERA_DOME_TITLE,"CLICK_RAYS_SUBTITLE",()=>b.CLICK_RAYS_SUBTITLE,"CLICK_RAYS_TITLE",()=>b.CLICK_RAYS_TITLE,"CameraDome3DView",()=>t.CameraDome3DView,"ClickRays3DView",0,function({rays:t,cellSize:a,proxyMeshes:n=[]}){let i=(0,r.useRef)(null),b=(0,r.useRef)(null),g=(0,r.useRef)(null),[f,x]=(0,r.useState)("loading"),[v,w]=(0,r.useState)(null),[k,j]=(0,r.useState)(d),[y,M]=(0,r.useState)(d),[z,C]=(0,r.useState)(null),_=(0,r.useMemo)(()=>{let e=new Map;for(let a of t){let t=m(a.camVoxel),n=e.get(t);n?n.count+=a.count:e.set(t,{key:t,voxel:a.camVoxel,count:a.count})}return[...e.values()].sort((e,t)=>t.count-e.count)},[t]),A=(0,r.useMemo)(()=>{let e=new Map;for(let a of t)""!==a.mesh&&e.set(a.mesh,(e.get(a.mesh)??0)+a.count);return[...e.entries()].map(([e,t])=>({name:e,count:t})).sort((e,t)=>t.count-e.count)},[t]);return(0,r.useEffect)(()=>{k!==d&&(_.some(e=>e.key===k)||j(d))},[k,_]),(0,r.useEffect)(()=>{y!==d&&(A.some(e=>e.name===y)||M(d))},[y,A]),(0,r.useEffect)(()=>{let s=i.current;if(!s)return;if(0===t.length)return void x("empty");let r=!1,u=null;return x("loading"),w(null),(async()=>{try{let[{Engine:i},{Scene:h},{ArcRotateCamera:p},{HemisphericLight:f},{Vector3:v,Color3:w,Color4:j,Matrix:M},{MeshBuilder:z},{StandardMaterial:_}]=await Promise.all([e.A(3905),e.A(94432),e.A(59694),e.A(88004),e.A(27940),e.A(27124),e.A(14074),e.A(35983),e.A(18561)]);if(r)return;let A=k===d?t:t.filter(e=>m(e.camVoxel)===k);if(0===A.length)return void x("empty");let L=A.reduce((e,t)=>Math.max(e,t.count),1),I=0,S=0,E=0,P=0,$=(e,t,a)=>{I+=e,S+=t,E+=a,P++};for(let e of A)$(e.origin[0],e.origin[1],e.origin[2]),$(e.hit[0],e.hit[1],e.hit[2]);let B=P>0?new v(I/P,S/P,E/P):v.Zero(),T=4*a;for(let e of A)for(let t of[e.origin,e.hit]){let e=t[0]-B.x,a=t[1]-B.y,n=t[2]-B.z;T=Math.max(T,Math.sqrt(e*e+a*a+n*n))}let R=new i(s,!0,{preserveDrawingBuffer:!1}),N=new h(R);N.clearColor=new j(.04,.05,.07,1);let F=new p("rays-cam",Math.PI/4,Math.PI/3,2.4*T,B,N);if(F.attachControl(s,!0),(0,o.disableWheelZoom)(F),b.current=F,g.current={target:B,alpha:F.alpha,beta:F.beta,radius:F.radius},new f("rays-light",new v(.4,1,.3),N),n.length>0){let e=z.CreateBox("scene-proxy",{size:1},N),t=new _("scene-proxy-mat",N);t.wireframe=!0,t.disableLighting=!0,t.emissiveColor=new w(.32,.4,.52),t.alpha=.35,e.material=t,e.isPickable=!0,e.thinInstanceEnablePicking=!0,e.metadata={hoverLabels:n.map(e=>e.name)};let a=n.length,i=new Float32Array(16*a);for(let e=0;e<a;e++){let t=n[e].aabb,a=Math.max(t[3]-t[0],.001),s=Math.max(t[4]-t[1],.001),r=Math.max(t[5]-t[2],.001);M.Scaling(a,s,r).multiply(M.Translation((t[0]+t[3])/2,(t[1]+t[4])/2,(t[2]+t[5])/2)).copyToArray(i,16*e)}e.thinInstanceSetBuffer("matrix",i,16,!0)}let q=[],D=[];for(let e of A){let t=e.count/L,[a,n,i]=(0,l.heatRgb)(t),s=new j(a,n,i,.35+.65*t);q.push([new v(e.origin[0],e.origin[1],e.origin[2]),new v(e.hit[0],e.hit[1],e.hit[2])]),D.push([s,s])}q.length>0&&(z.CreateLineSystem("click-rays",{lines:q,colors:D,useVertexAlpha:!0},N).isPickable=!1);let O=new Map;for(let e of A)O.set(m(e.camVoxel),e.camVoxel);if(O.size>0){let e=z.CreateSphere("rays-eye",{diameter:.6*a,segments:6},N),t=new _("rays-eye-mat",N);t.disableLighting=!0,t.emissiveColor=new w(.9,.95,1),e.material=t;let n=[...O.values()],i=new Float32Array(16*n.length);for(let e=0;e<n.length;e++){let t=n[e];M.Translation((t[0]+.5)*a,(t[1]+.5)*a,(t[2]+.5)*a).copyToArray(i,16*e)}e.thinInstanceSetBuffer("matrix",i,16,!0)}if(y!==d){let e=t.filter(e=>e.mesh===y);if(e.length>0){let t,i=n.find(e=>e.name===y);if(i){let e=i.aabb;t=new v((e[0]+e[3])/2,(e[1]+e[4])/2,(e[2]+e[5])/2)}else{let a=0,n=0,i=0;for(let t of e)a+=t.hit[0],n+=t.hit[1],i+=t.hit[2];t=new v(a/e.length,n/e.length,i/e.length)}let s=Math.max(3*a,.18*T),r=e.reduce((e,t)=>Math.max(e,t.count),1),o=[],c=[];for(let a of e){let e=a.origin[0]-a.hit[0],n=a.origin[1]-a.hit[1],i=a.origin[2]-a.hit[2],u=Math.sqrt(e*e+n*n+i*i)||1,h=a.count/r,d=s*(.4+.6*h),m=new v(t.x+e/u*d,t.y+n/u*d,t.z+i/u*d),[p,b,g]=(0,l.heatRgb)(h),f=new j(p,b,g,1);o.push([t.clone(),m]),c.push([new j(p,b,g,.25),f])}z.CreateLineSystem("mesh-rose",{lines:o,colors:c,useVertexAlpha:!0},N).isPickable=!1;let u=z.CreateSphere("mesh-rose-hub",{diameter:.8*a,segments:8},N),h=new _("mesh-rose-hub-mat",N);h.disableLighting=!0,h.emissiveColor=new w(1,.85,.4),u.material=h,u.position=t,u.isPickable=!0,u.metadata={hoverLabel:y}}}R.runRenderLoop(()=>N.render());let Z=()=>R.resize();window.addEventListener("resize",Z);let V=(0,c.attachMeshHover)(N,s,C),W=(0,o.attachDoubleClickFocus)(N,s,F);x("ready"),u=()=>{window.removeEventListener("resize",Z),V(),W(),C(null),b.current=null,g.current=null,N.dispose(),R.dispose()}}catch(e){if(r)return;x("error"),w(e instanceof Error?e.message:"Failed to render click rays.")}})(),()=>{r=!0,u?.()}},[t,a,n,k,y]),(0,s.jsxs)("div",{className:"relative",children:[(0,s.jsx)("canvas",{ref:i,className:"aspect-video w-full rounded-lg border border-edge bg-ink"}),z?(0,s.jsx)("div",{className:"pointer-events-none absolute z-10 max-w-[16rem] truncate rounded border border-edge bg-ink/90 px-1.5 py-0.5 text-xs text-white shadow backdrop-blur",style:{left:z.x+12,top:z.y+12},children:z.label}):null,"ready"===f?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("div",{className:"absolute left-3 top-3 flex gap-2",children:[(0,s.jsx)(p,{label:"Viewpoint",value:k,onChange:j,allLabel:"All viewpoints",options:_.map(e=>({value:e.key,label:`(${e.voxel.join(", ")}) \xb7 ${e.count}`}))}),(0,s.jsx)(p,{label:"Mesh rose",value:y,onChange:M,allLabel:"No mesh focus",options:A.map(e=>({value:e.name,label:`${e.name} \xb7 ${e.count}`}))})]}),(0,s.jsx)(h.ZoomButtons,{onZoom:e=>b.current&&(0,o.stepZoom)(b.current,e),onReset:()=>b.current&&g.current&&(0,o.resetFocus)(b.current,g.current)}),(0,s.jsx)(u.HeatLegend,{title:"Click volume",lowLabel:"few clicks",highLabel:"most clicks",note:"Lines run from the camera position (bright eye) to where the click landed. Pick a viewpoint to see only clicks made from there; pick a mesh to see which directions its clicks came from."})]}):(0,s.jsx)("div",{className:"pointer-events-none absolute inset-0 grid place-items-center text-sm text-fg-muted",children:"loading"===f?"Rendering…":"empty"===f?"No correlated clicks in range.":"error"===f?v??"Click rays unavailable.":null})]})},"FLOW_SANKEY_HELP",()=>b.FLOW_SANKEY_HELP,"FLOW_SANKEY_SUBTITLE",()=>b.FLOW_SANKEY_SUBTITLE,"FLOW_SANKEY_TITLE",()=>b.FLOW_SANKEY_TITLE,"FlowSankey3DView",()=>n.FlowSankey3DView,"GAZE_CLICK_SUBTITLE",()=>b.GAZE_CLICK_SUBTITLE,"GAZE_CLICK_TITLE",()=>b.GAZE_CLICK_TITLE,"GazeClickDivergence3DView",()=>i.GazeClickDivergence3DView,"WORLD_HEATMAP_SUBTITLE",()=>b.WORLD_HEATMAP_SUBTITLE,"WORLD_HEATMAP_TITLE",()=>b.WORLD_HEATMAP_TITLE,"WorldHeatmap3DView",()=>a.WorldHeatmap3DView],64434)},94452,e=>{e.n(e.i(64434))},3905,e=>{e.v(t=>Promise.all(["static/chunks/3pdpaqzwhhijn.js","static/chunks/08bm3ye5govev.js","static/chunks/0g6u34xkzrpjn.js","static/chunks/25ctnyh7njp-d.js","static/chunks/2gh4z57fem0_v.js","static/chunks/3vaho-xrtuchd.js","static/chunks/0g7p8zp2kxve5.js"].map(t=>e.l(t))).then(()=>t(66232)))},94432,e=>{e.v(t=>Promise.all(["static/chunks/2kje_jvmwsvwo.js","static/chunks/1j--a56ji33_x.js","static/chunks/3pdpaqzwhhijn.js","static/chunks/2npk7tr63h7rl.js","static/chunks/3vaho-xrtuchd.js","static/chunks/3g_h_00xs9u59.js","static/chunks/1vzmzrjhlm1q5.js","static/chunks/25ctnyh7njp-d.js","static/chunks/1vpcaaf-0dn7q.js"].map(t=>e.l(t))).then(()=>t(92494)))},59694,e=>{e.v(t=>Promise.all(["static/chunks/1j--a56ji33_x.js","static/chunks/0oap0o8a8a_cl.js","static/chunks/0f_nv15a8q415.js","static/chunks/1vzmzrjhlm1q5.js","static/chunks/3pdpaqzwhhijn.js","static/chunks/245h82k-g1nxr.js","static/chunks/3ovd8o_usay7j.js","static/chunks/3vaho-xrtuchd.js","static/chunks/1vpcaaf-0dn7q.js","static/chunks/25ctnyh7njp-d.js","static/chunks/2npk7tr63h7rl.js","static/chunks/3pyggl13glbdc.js"].map(t=>e.l(t))).then(()=>t(67186)))},88004,e=>{e.v(t=>Promise.all(["static/chunks/2p8dbh81chhon.js","static/chunks/1oara6fkfvgs3.js","static/chunks/1vzmzrjhlm1q5.js","static/chunks/25ctnyh7njp-d.js","static/chunks/3pdpaqzwhhijn.js"].map(t=>e.l(t))).then(()=>t(15768)))},27940,e=>{e.v(t=>Promise.all(["static/chunks/0w0sx062qmcsh.js","static/chunks/25ctnyh7njp-d.js","static/chunks/3pdpaqzwhhijn.js"].map(t=>e.l(t))).then(()=>t(23235)))},27124,e=>{e.v(t=>Promise.all(["static/chunks/1par9m038tiov.js","static/chunks/1j--a56ji33_x.js","static/chunks/2j-sax2xfdv7l.js","static/chunks/340pg0qkv5tqq.js","static/chunks/3pdpaqzwhhijn.js","static/chunks/0gwa154w_0wuh.js","static/chunks/0oap0o8a8a_cl.js","static/chunks/0f_nv15a8q415.js","static/chunks/3vaho-xrtuchd.js","static/chunks/3pyggl13glbdc.js","static/chunks/1vzmzrjhlm1q5.js","static/chunks/3g_h_00xs9u59.js","static/chunks/1vpcaaf-0dn7q.js","static/chunks/25ctnyh7njp-d.js","static/chunks/2npk7tr63h7rl.js","static/chunks/01aeari2x_tlz.js"].map(t=>e.l(t))).then(()=>t(70928)))},14074,e=>{e.v(t=>Promise.all(["static/chunks/1zcrrq1fx8g2y.js","static/chunks/1tdg_eolxlcdl.js","static/chunks/1j--a56ji33_x.js","static/chunks/1vzmzrjhlm1q5.js","static/chunks/0vddljjnmozzx.js","static/chunks/3pdpaqzwhhijn.js","static/chunks/1vpcaaf-0dn7q.js","static/chunks/3vaho-xrtuchd.js","static/chunks/0f_nv15a8q415.js","static/chunks/3g_h_00xs9u59.js","static/chunks/2npk7tr63h7rl.js","static/chunks/25ctnyh7njp-d.js"].map(t=>e.l(t))).then(()=>t(87566)))},2213,e=>{e.v(t=>Promise.all(["static/chunks/3wqs57qehored.js","static/chunks/1j--a56ji33_x.js","static/chunks/1vzmzrjhlm1q5.js","static/chunks/2npk7tr63h7rl.js","static/chunks/1vkww9l6lgqag.js","static/chunks/1vpcaaf-0dn7q.js","static/chunks/0f_nv15a8q415.js","static/chunks/3pyggl13glbdc.js","static/chunks/3vaho-xrtuchd.js","static/chunks/25ctnyh7njp-d.js","static/chunks/3pdpaqzwhhijn.js"].map(t=>e.l(t))).then(()=>t(95758)))},15002,e=>{e.v(t=>Promise.all(["static/chunks/34gp3hvr3j6um.js","static/chunks/0x6i6e6863tir.js","static/chunks/3pdpaqzwhhijn.js","static/chunks/3vaho-xrtuchd.js","static/chunks/2gh4z57fem0_v.js","static/chunks/25ctnyh7njp-d.js","static/chunks/28ycc-1519hl2.js"].map(t=>e.l(t))).then(()=>t(95729)))},35983,e=>{e.v(t=>Promise.all(["static/chunks/4227p7752rnny.js","static/chunks/1j--a56ji33_x.js","static/chunks/1vzmzrjhlm1q5.js","static/chunks/2npk7tr63h7rl.js","static/chunks/1vkww9l6lgqag.js","static/chunks/25ctnyh7njp-d.js","static/chunks/0f_nv15a8q415.js","static/chunks/3vaho-xrtuchd.js","static/chunks/1vpcaaf-0dn7q.js","static/chunks/3pyggl13glbdc.js","static/chunks/3pdpaqzwhhijn.js"].map(t=>e.l(t))).then(()=>t(50608)))},18561,e=>{e.v(t=>Promise.all(["static/chunks/1j--a56ji33_x.js","static/chunks/1vkww9l6lgqag.js","static/chunks/3pdpaqzwhhijn.js","static/chunks/2npk7tr63h7rl.js","static/chunks/117ys3lltfmcu.js","static/chunks/25ctnyh7njp-d.js","static/chunks/1vzmzrjhlm1q5.js","static/chunks/3g_h_00xs9u59.js","static/chunks/1vpcaaf-0dn7q.js","static/chunks/3vaho-xrtuchd.js"].map(t=>e.l(t))).then(()=>t(85106)))}]);
@@ -0,0 +1,3 @@
1
+ @font-face{font-family:Space Grotesk;font-style:normal;font-weight:300 700;font-display:swap;src:url(../media/32687112bd2dd8db-s.1gepa_7fcx9fm.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Space Grotesk;font-style:normal;font-weight:300 700;font-display:swap;src:url(../media/28868e710e86be81-s.2eksvhm1z0jwa.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Space Grotesk;font-style:normal;font-weight:300 700;font-display:swap;src:url(../media/0c89a48fa5027cee-s.p.2cyn07wtgehh0.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Space Grotesk Fallback;src:local(Arial);ascent-override:89.71%;descent-override:26.62%;line-gap-override:0.0%;size-adjust:109.69%}.space_grotesk_59d6dcf5-module__z_Ctiq__className{font-family:Space Grotesk,Space Grotesk Fallback;font-style:normal}.space_grotesk_59d6dcf5-module__z_Ctiq__variable{--font-space-grotesk:"Space Grotesk", "Space Grotesk Fallback"}
2
+ @font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(../media/13bf9871fe164e7f-s.2f7nqdagzwx2-.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(../media/cc545e633e20c56d-s.176arc174-8zp.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(../media/71b036adf157cdcf-s.0bp8oijd_gu96.woff2)format("woff2");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(../media/89b21bb081cb7469-s.1fby2rem9ngyr.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(../media/3fe682a82f50d426-s.0vfdmo25voy_0.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(../media/70bc3e132a0a741e-s.p.3t6q91iet4nsy.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono Fallback;src:local(Arial);ascent-override:75.79%;descent-override:22.29%;line-gap-override:0.0%;size-adjust:134.59%}.jetbrains_mono_38c99671-module__5Dhsuq__className{font-family:JetBrains Mono,JetBrains Mono Fallback;font-style:normal}.jetbrains_mono_38c99671-module__5Dhsuq__variable{--font-jetbrains-mono:"JetBrains Mono", "JetBrains Mono Fallback"}
3
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:var(--font-jetbrains-mono), ui-monospace, SFMono-Regular, monospace;--color-red-300:#ffa3a3;--color-red-400:#ff6568;--color-red-900:#82181a;--color-red-950:#460809;--color-amber-300:#ffd236;--color-amber-400:#fcbb00;--color-emerald-300:#5ee9b5;--color-emerald-400:#00d294;--color-emerald-500:#00bb7f;--color-sky-400:#00bcfe;--color-sky-500:#00a5ef;--color-fuchsia-300:#f2a9ff;--color-fuchsia-400:#ec6cff;--color-fuchsia-500:#e12afb;--color-rose-300:#ffa2ae;--color-rose-400:#ff667f;--color-rose-500:#ff2357;--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-6xl:72rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-normal:0em;--tracking-wide:.025em;--leading-tight:1.25;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--animate-ping:ping 1s cubic-bezier(0, 0, .2, 1) infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-sm:8px;--aspect-video:16 / 9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-ink:#161210;--color-panel:#201913;--color-edge:#34291f;--color-fg-hi:#f4eadf;--color-fg:#d8c8b8;--color-fg-muted:#a8917c;--color-saffron:#f4c84b;--color-amber:#eda63e;--color-ember:#e07b39;--font-display:var(--font-space-grotesk), system-ui, sans-serif;--font-body:system-ui, -apple-system, "Segoe UI", Roboto, sans-serif}@supports (color:lab(0% 0 0)){:root,:host{--color-red-300:lab(76.5514% 36.422 15.5335);--color-red-400:lab(63.7053% 60.745 31.3109);--color-red-900:lab(28.5139% 44.5539 29.0463);--color-red-950:lab(13.003% 29.04 16.7519);--color-amber-300:lab(86.4156% 6.13147 78.3961);--color-amber-400:lab(80.1641% 16.6016 99.2089);--color-emerald-300:lab(83.9203% -48.7124 13.8849);--color-emerald-400:lab(75.0771% -60.7313 19.4147);--color-emerald-500:lab(66.9756% -58.27 19.5419);--color-sky-400:lab(70.687% -23.6078 -45.9483);--color-sky-500:lab(63.3038% -18.433 -51.0407);--color-fuchsia-300:lab(78.5378% 39.3533 -32.9615);--color-fuchsia-400:lab(66.1178% 66.0652 -52.4733);--color-fuchsia-500:lab(56.4256% 83.132 -64.639);--color-rose-300:lab(76.6339% 38.3549 9.68835);--color-rose-400:lab(64.4125% 63.0291 19.2068);--color-rose-500:lab(56.101% 79.4328 31.4532)}}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:0}.inset-y-1{inset-block:var(--spacing)}.top-0{top:0}.top-2{top:calc(var(--spacing) * 2)}.top-3{top:calc(var(--spacing) * 3)}.top-6{top:calc(var(--spacing) * 6)}.right-2{right:calc(var(--spacing) * 2)}.right-3{right:calc(var(--spacing) * 3)}.bottom-3{bottom:calc(var(--spacing) * 3)}.left-0{left:0}.left-1\/2{left:50%}.left-3{left:calc(var(--spacing) * 3)}.isolate{isolation:isolate}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.mx-auto{margin-inline:auto}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-auto{margin-top:auto}.mb-1{margin-bottom:var(--spacing)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.ml-1{margin-left:var(--spacing)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-auto{margin-left:auto}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.aspect-video{aspect-ratio:var(--aspect-video)}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-27\.5{height:calc(var(--spacing) * 27.5)}.h-full{height:100%}.max-h-64{max-height:calc(var(--spacing) * 64)}.min-h-\[12rem\]{min-height:12rem}.w-1{width:var(--spacing)}.w-2{width:calc(var(--spacing) * 2)}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-8{width:calc(var(--spacing) * 8)}.w-9{width:calc(var(--spacing) * 9)}.w-10{width:calc(var(--spacing) * 10)}.w-12{width:calc(var(--spacing) * 12)}.w-16{width:calc(var(--spacing) * 16)}.w-24{width:calc(var(--spacing) * 24)}.w-28{width:calc(var(--spacing) * 28)}.w-36{width:calc(var(--spacing) * 36)}.w-37\.5{width:calc(var(--spacing) * 37.5)}.w-64{width:calc(var(--spacing) * 64)}.w-full{width:100%}.w-px{width:1px}.max-w-6xl{max-width:var(--container-6xl)}.max-w-44{max-width:calc(var(--spacing) * 44)}.max-w-64{max-width:calc(var(--spacing) * 64)}.max-w-72{max-width:calc(var(--spacing) * 72)}.max-w-\[12rem\]{max-width:12rem}.max-w-\[16rem\]{max-width:16rem}.max-w-\[20rem\]{max-width:20rem}.min-w-0{min-width:0}.min-w-36{min-width:calc(var(--spacing) * 36)}.min-w-40{min-width:calc(var(--spacing) * 40)}.min-w-56{min-width:calc(var(--spacing) * 56)}.flex-1{flex:1}.flex-none{flex:none}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-ping{animation:var(--animate-ping)}.animate-pulse{animation:var(--animate-pulse)}.cursor-crosshair{cursor:crosshair}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.list-none{list-style-type:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-px{gap:1px}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(var(--spacing) * var(--tw-space-y-reverse));margin-block-end:calc(var(--spacing) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-x-4{column-gap:calc(var(--spacing) * 4)}.gap-y-1{row-gap:var(--spacing)}.gap-y-3{row-gap:calc(var(--spacing) * 3)}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-amber{border-color:var(--color-amber)}.border-amber\/40{border-color:#eda63e66}@supports (color:color-mix(in lab, red, red)){.border-amber\/40{border-color:color-mix(in oklab, var(--color-amber) 40%, transparent)}}.border-amber\/60{border-color:#eda63e99}@supports (color:color-mix(in lab, red, red)){.border-amber\/60{border-color:color-mix(in oklab, var(--color-amber) 60%, transparent)}}.border-edge{border-color:var(--color-edge)}.border-ink\/60{border-color:#16121099}@supports (color:color-mix(in lab, red, red)){.border-ink\/60{border-color:color-mix(in oklab, var(--color-ink) 60%, transparent)}}.border-red-900\/60{border-color:#82181a99}@supports (color:color-mix(in lab, red, red)){.border-red-900\/60{border-color:color-mix(in oklab, var(--color-red-900) 60%, transparent)}}.border-transparent{border-color:#0000}.bg-\[\#38bdf8\]{background-color:#38bdf8}.bg-\[\#f4c84b\]{background-color:#f4c84b}.bg-amber{background-color:var(--color-amber)}.bg-amber-400{background-color:var(--color-amber-400)}.bg-amber\/10{background-color:#eda63e1a}@supports (color:color-mix(in lab, red, red)){.bg-amber\/10{background-color:color-mix(in oklab, var(--color-amber) 10%, transparent)}}.bg-amber\/15{background-color:#eda63e26}@supports (color:color-mix(in lab, red, red)){.bg-amber\/15{background-color:color-mix(in oklab, var(--color-amber) 15%, transparent)}}.bg-amber\/30{background-color:#eda63e4d}@supports (color:color-mix(in lab, red, red)){.bg-amber\/30{background-color:color-mix(in oklab, var(--color-amber) 30%, transparent)}}.bg-black\/30{background-color:#0000004d}@supports (color:color-mix(in lab, red, red)){.bg-black\/30{background-color:color-mix(in oklab, var(--color-black) 30%, transparent)}}.bg-black\/70{background-color:#000000b3}@supports (color:color-mix(in lab, red, red)){.bg-black\/70{background-color:color-mix(in oklab, var(--color-black) 70%, transparent)}}.bg-emerald-400{background-color:var(--color-emerald-400)}.bg-emerald-500\/70{background-color:#00bb7fb3}@supports (color:color-mix(in lab, red, red)){.bg-emerald-500\/70{background-color:color-mix(in oklab, var(--color-emerald-500) 70%, transparent)}}.bg-fg-muted{background-color:var(--color-fg-muted)}.bg-fg\/15{background-color:#d8c8b826}@supports (color:color-mix(in lab, red, red)){.bg-fg\/15{background-color:color-mix(in oklab, var(--color-fg) 15%, transparent)}}.bg-fuchsia-400\/30{background-color:#ec6cff4d}@supports (color:color-mix(in lab, red, red)){.bg-fuchsia-400\/30{background-color:color-mix(in oklab, var(--color-fuchsia-400) 30%, transparent)}}.bg-ink{background-color:var(--color-ink)}.bg-ink\/40{background-color:#16121066}@supports (color:color-mix(in lab, red, red)){.bg-ink\/40{background-color:color-mix(in oklab, var(--color-ink) 40%, transparent)}}.bg-ink\/50{background-color:#16121080}@supports (color:color-mix(in lab, red, red)){.bg-ink\/50{background-color:color-mix(in oklab, var(--color-ink) 50%, transparent)}}.bg-ink\/60{background-color:#16121099}@supports (color:color-mix(in lab, red, red)){.bg-ink\/60{background-color:color-mix(in oklab, var(--color-ink) 60%, transparent)}}.bg-ink\/80{background-color:#161210cc}@supports (color:color-mix(in lab, red, red)){.bg-ink\/80{background-color:color-mix(in oklab, var(--color-ink) 80%, transparent)}}.bg-ink\/90{background-color:#161210e6}@supports (color:color-mix(in lab, red, red)){.bg-ink\/90{background-color:color-mix(in oklab, var(--color-ink) 90%, transparent)}}.bg-ink\/95{background-color:#161210f2}@supports (color:color-mix(in lab, red, red)){.bg-ink\/95{background-color:color-mix(in oklab, var(--color-ink) 95%, transparent)}}.bg-panel{background-color:var(--color-panel)}.bg-panel\/60{background-color:#20191399}@supports (color:color-mix(in lab, red, red)){.bg-panel\/60{background-color:color-mix(in oklab, var(--color-panel) 60%, transparent)}}.bg-red-950\/40{background-color:#46080966}@supports (color:color-mix(in lab, red, red)){.bg-red-950\/40{background-color:color-mix(in oklab, var(--color-red-950) 40%, transparent)}}.bg-rose-400{background-color:var(--color-rose-400)}.bg-rose-500\/20{background-color:#ff235733}@supports (color:color-mix(in lab, red, red)){.bg-rose-500\/20{background-color:color-mix(in oklab, var(--color-rose-500) 20%, transparent)}}.bg-saffron{background-color:var(--color-saffron)}.bg-sky-400\/70{background-color:#00bcfeb3}@supports (color:color-mix(in lab, red, red)){.bg-sky-400\/70{background-color:color-mix(in oklab, var(--color-sky-400) 70%, transparent)}}.bg-sky-500\/70{background-color:#00a5efb3}@supports (color:color-mix(in lab, red, red)){.bg-sky-500\/70{background-color:color-mix(in oklab, var(--color-sky-500) 70%, transparent)}}.bg-transparent{background-color:#0000}.bg-white\/5{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.bg-white\/5{background-color:color-mix(in oklab, var(--color-white) 5%, transparent)}}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:var(--spacing)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2\.5{padding:calc(var(--spacing) * 2.5)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.px-1{padding-inline:var(--spacing)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.pt-1{padding-top:var(--spacing)}.pr-1{padding-right:var(--spacing)}.pr-4{padding-right:calc(var(--spacing) * 4)}.pb-0\.5{padding-bottom:calc(var(--spacing) * .5)}.pl-8{padding-left:calc(var(--spacing) * 8)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-display{font-family:var(--font-display)}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-normal{--tw-tracking:var(--tracking-normal);letter-spacing:var(--tracking-normal)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.whitespace-nowrap{white-space:nowrap}.text-amber{color:var(--color-amber)}.text-amber-300{color:var(--color-amber-300)}.text-emerald-300{color:var(--color-emerald-300)}.text-emerald-400{color:var(--color-emerald-400)}.text-fg{color:var(--color-fg)}.text-fg-hi{color:var(--color-fg-hi)}.text-fg-muted{color:var(--color-fg-muted)}.text-fg-muted\/40{color:#a8917c66}@supports (color:color-mix(in lab, red, red)){.text-fg-muted\/40{color:color-mix(in oklab, var(--color-fg-muted) 40%, transparent)}}.text-fuchsia-300{color:var(--color-fuchsia-300)}.text-ink{color:var(--color-ink)}.text-red-300{color:var(--color-red-300)}.text-red-400{color:var(--color-red-400)}.text-rose-300{color:var(--color-rose-300)}.text-rose-400{color:var(--color-rose-400)}.text-saffron{color:var(--color-saffron)}.text-white{color:var(--color-white)}.normal-case{text-transform:none}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.underline-offset-2{text-underline-offset:2px}.accent-amber{accent-color:var(--color-amber)}.opacity-0{opacity:0}.opacity-75{opacity:.75}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring,.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-amber\/30{--tw-shadow-color:#eda63e4d}@supports (color:color-mix(in lab, red, red)){.shadow-amber\/30{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-amber) 30%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-black\/20{--tw-shadow-color:#0003}@supports (color:color-mix(in lab, red, red)){.shadow-black\/20{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-black) 20%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-black\/40{--tw-shadow-color:#0006}@supports (color:color-mix(in lab, red, red)){.shadow-black\/40{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-black) 40%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-fuchsia-500\/30{--tw-shadow-color:#e12afb4d}@supports (color:color-mix(in lab, red, red)){.shadow-fuchsia-500\/30{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-fuchsia-500) 30%, transparent) var(--tw-shadow-alpha), transparent)}}.ring-amber{--tw-ring-color:var(--color-amber)}.ring-amber\/30{--tw-ring-color:#eda63e4d}@supports (color:color-mix(in lab, red, red)){.ring-amber\/30{--tw-ring-color:color-mix(in oklab, var(--color-amber) 30%, transparent)}}.ring-fuchsia-300{--tw-ring-color:var(--color-fuchsia-300)}.ring-fuchsia-400\/30{--tw-ring-color:#ec6cff4d}@supports (color:color-mix(in lab, red, red)){.ring-fuchsia-400\/30{--tw-ring-color:color-mix(in oklab, var(--color-fuchsia-400) 30%, transparent)}}.ring-rose-400\/40{--tw-ring-color:#ff667f66}@supports (color:color-mix(in lab, red, red)){.ring-rose-400\/40{--tw-ring-color:color-mix(in oklab, var(--color-rose-400) 40%, transparent)}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.group-focus-within\:opacity-100:is(:where(.group):focus-within *){opacity:1}@media (hover:hover){.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.first\:rounded-l-md:first-child{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.last\:rounded-r-md:last-child{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}@media (hover:hover){.hover\:border-amber:hover{border-color:var(--color-amber)}.hover\:border-amber\/60:hover{border-color:#eda63e99}@supports (color:color-mix(in lab, red, red)){.hover\:border-amber\/60:hover{border-color:color-mix(in oklab, var(--color-amber) 60%, transparent)}}.hover\:border-edge:hover{border-color:var(--color-edge)}.hover\:bg-ember:hover{background-color:var(--color-ember)}.hover\:bg-ink:hover{background-color:var(--color-ink)}.hover\:text-amber:hover{color:var(--color-amber)}.hover\:text-fg:hover{color:var(--color-fg)}.hover\:text-fg-hi:hover{color:var(--color-fg-hi)}.hover\:text-white:hover{color:var(--color-white)}.hover\:underline:hover{text-decoration-line:underline}}.focus\:border-saffron:focus{border-color:var(--color-saffron)}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-amber:focus{--tw-ring-color:var(--color-amber)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}@media (min-width:40rem){.sm\:col-span-2{grid-column:span 2/span 2}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:p-8{padding:calc(var(--spacing) * 8)}}@media (min-width:64rem){.lg\:col-span-2{grid-column:span 2/span 2}.lg\:col-span-3{grid-column:span 3/span 3}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}}:root{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}body{background-color:var(--color-ink);color:var(--color-fg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:var(--font-body)}h1,h2,h3,h4{font-family:var(--font-display)}code,kbd,samp,pre{font-family:var(--font-mono)}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}
@@ -0,0 +1 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,2348,2413,t=>{"use strict";let e=1/1.2;t.s(["ZOOM_IN_FACTOR",0,e,"ZOOM_OUT_FACTOR",0,1.2,"attachDoubleClickFocus",0,function(t,e,s){let a=()=>{let e=t.pick(t.pointerX,t.pointerY);e?.hit&&e.pickedPoint&&s.setTarget(e.pickedPoint)};return e.addEventListener("dblclick",a),()=>e.removeEventListener("dblclick",a)},"disableWheelZoom",0,function(t){t.inputs.removeByType("ArcRotateCameraMouseWheelInput")},"resetFocus",0,function(t,e){t.setTarget(e.target),t.alpha=e.alpha,t.beta=e.beta,t.radius=e.radius},"stepZoom",0,function(t,e){let s=t.lowerRadiusLimit??.01,a=t.upperRadiusLimit??1/0;t.radius=Math.min(a,Math.max(s,t.radius*e))}],2348);var s=t.i(28100);t.s(["ZoomButtons",0,function({onZoom:t,onReset:a}){let n="grid h-8 w-8 place-items-center rounded-md border border-edge bg-ink/80 text-lg leading-none text-fg backdrop-blur transition hover:bg-ink hover:text-white";return(0,s.jsxs)("div",{className:"absolute right-3 top-3 flex flex-col gap-1",children:[(0,s.jsx)("button",{type:"button","aria-label":"Zoom in",className:n,onClick:()=>t(e),children:"+"}),(0,s.jsx)("button",{type:"button","aria-label":"Zoom out",className:n,onClick:()=>t(1.2),children:"−"}),a?(0,s.jsx)("button",{type:"button","aria-label":"Reset camera focus to center",title:"Reset focus to center",className:n,onClick:a,children:(0,s.jsxs)("svg",{viewBox:"0 0 16 16",width:"16",height:"16",fill:"none",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round","aria-hidden":"true",children:[(0,s.jsx)("circle",{cx:"8",cy:"8",r:"3"}),(0,s.jsx)("path",{d:"M8 1v2.5M8 12.5V15M1 8h2.5M12.5 8H15"})]})}):null]})}],2413)},25476,t=>{"use strict";t.s(["attachMeshHover",0,function(t,e,s){let a=0,n=null,c=e=>{let c=e.offsetX,i=e.offsetY;a||(a=requestAnimationFrame(()=>{var e,r;let l;a=0;let h=t.pick(c,i,t=>t.isPickable&&t.isEnabled()),o=h?.pickedMesh?(e=h.pickedMesh,r=h.thinInstanceIndex??-1,(l=e.metadata)?r>=0&&l.hoverLabels?l.hoverLabels[r]??null:l.hoverLabel??null:null):null;o?s({label:o,x:c,y:i}):null!==n&&s(null),n=o}))},i=()=>{a&&(cancelAnimationFrame(a),a=0),null!==n&&(n=null,s(null))};return e.addEventListener("pointermove",c),e.addEventListener("pointerleave",i),()=>{e.removeEventListener("pointermove",c),e.removeEventListener("pointerleave",i),a&&cancelAnimationFrame(a)}}])},53993,t=>{"use strict";var e=t.i(28100),s=t.i(11623),a=t.i(56054),n=t.i(2348),c=t.i(25476),i=t.i(18637),r=t.i(2413);function l({shape:t,onChange:s}){let a=t=>`h-8 px-2.5 text-xs font-medium leading-none transition first:rounded-l-md last:rounded-r-md ${t?"bg-ink text-white":"bg-ink/80 text-fg hover:text-white"}`,n="sphere"===t,c="cube"===t;return(0,e.jsxs)("div",{className:"absolute left-3 top-3 flex overflow-hidden rounded-md border border-edge backdrop-blur",role:"group","aria-label":"Voxel marker shape",children:[(0,e.jsx)("button",{type:"button",className:a(n),"aria-pressed":n,onClick:()=>s("sphere"),children:"Spheres"}),(0,e.jsx)("button",{type:"button",className:a(c),"aria-pressed":c,onClick:()=>s("cube"),children:"Cubes"})]})}t.s(["WorldHeatmap3DView",0,function({voxels:h,cellSize:o,proxyMeshes:u=[],legendTitle:d="Pointer-hit density",legendLow:j="few hits",legendHigh:p="most hits",legendNote:m="Each marker is a voxel where the pointer hit your scene. Color & size scale with hits, normalized to the 95th-percentile cell so a few hotspots don't wash out the rest.",emptyLabel:k="No 3D hit-points in range.",totals:v}){let b=(0,s.useRef)(null),x=(0,s.useRef)(null),g=(0,s.useRef)(null),[f,w]=(0,s.useState)("loading"),[y,z]=(0,s.useState)(null),[q,_]=(0,s.useState)("sphere"),[M,L]=(0,s.useState)(null);(0,s.useEffect)(()=>{let e=b.current;if(!e)return;if(0===h.length&&0===u.length)return void w("empty");let s=!1,i=null;return w("loading"),z(null),(async()=>{try{let[{Engine:r},{Scene:l},{ArcRotateCamera:d},{HemisphericLight:j},{Vector3:p,Color3:m,Color4:k,Matrix:v},{MeshBuilder:b},{StandardMaterial:f}]=await Promise.all([t.A(3905),t.A(94432),t.A(59694),t.A(88004),t.A(27940),t.A(27124),t.A(14074),t.A(35983),t.A(18561)]);if(s)return;let y=(0,a.percentileMax)(h.map(t=>t.count),.95),z=0,_=0,M=0,C=0;for(let t of h)z+=(t.vx+.5)*o,_+=(t.vy+.5)*o,M+=(t.vz+.5)*o,C++;if(0===C)for(let t of u)z+=(t.aabb[0]+t.aabb[3])/2,_+=(t.aabb[1]+t.aabb[4])/2,M+=(t.aabb[2]+t.aabb[5])/2,C++;let A=new p(z/C,_/C,M/C),P=4*o;for(let t of h){let e=(t.vx+.5)*o-A.x,s=(t.vy+.5)*o-A.y,a=(t.vz+.5)*o-A.z;P=Math.max(P,Math.sqrt(e*e+s*s+a*a))}for(let t of u){let e=(t.aabb[0]+t.aabb[3])/2-A.x,s=(t.aabb[1]+t.aabb[4])/2-A.y,a=(t.aabb[2]+t.aabb[5])/2-A.z;P=Math.max(P,Math.sqrt(e*e+s*s+a*a))}let S=new r(e,!0,{preserveDrawingBuffer:!1}),R=new l(S);R.clearColor=new k(.04,.05,.07,1);let F=new d("world-cam",Math.PI/4,Math.PI/3,2.4*P,A,R);if(F.attachControl(e,!0),(0,n.disableWheelZoom)(F),x.current=F,g.current={target:A,alpha:F.alpha,beta:F.beta,radius:F.radius},new j("world-light",new p(.4,1,.3),R),u.length>0){let t=b.CreateBox("scene-proxy",{size:1},R),e=new f("scene-proxy-mat",R);e.wireframe=!0,e.disableLighting=!0,e.emissiveColor=new m(.32,.4,.52),e.alpha=.35,t.material=e,t.isPickable=!0,t.thinInstanceEnablePicking=!0,t.metadata={hoverLabels:u.map(t=>t.name)};let s=u.length,a=new Float32Array(16*s);for(let t=0;t<s;t++){let e=u[t].aabb,s=Math.max(e[3]-e[0],.001),n=Math.max(e[4]-e[1],.001),c=Math.max(e[5]-e[2],.001);v.Scaling(s,n,c).multiply(v.Translation((e[0]+e[3])/2,(e[1]+e[4])/2,(e[2]+e[5])/2)).copyToArray(a,16*t)}t.thinInstanceSetBuffer("matrix",a,16,!0)}if(h.length>0){let t="cube"===q?b.CreateBox("world-voxel",{size:.9*o},R):b.CreateSphere("world-voxel",{diameter:.9*o,segments:6},R),e=new f("world-voxel-mat",R);e.diffuseColor=new m(1,1,1),e.specularColor=new m(0,0,0),t.material=e;let s=h.length,n=new Float32Array(16*s),c=new Float32Array(4*s),i=new Float32Array(s),r=Math.max(.02*P,.25*o)/(.9*o);for(let t=0;t<s;t++){let e=h[t],s=Math.min(1,e.count/y),l=r*(.5+.5*s);i[t]=l,v.Scaling(l,l,l).multiply(v.Translation((e.vx+.5)*o,(e.vy+.5)*o,(e.vz+.5)*o)).copyToArray(n,16*t);let[u,d,j]=(0,a.heatRgb)(s);c[4*t]=u,c[4*t+1]=d,c[4*t+2]=j,c[4*t+3]=1}t.thinInstanceSetBuffer("matrix",n,16,!1),t.thinInstanceSetBuffer("color",c,4,!0);let l=F.radius,u=0,d=()=>{let e=Math.min(8,Math.max(.6,F.radius/l));if(!(.01>Math.abs(e-u))){u=e;for(let t=0;t<s;t++){let s=i[t]*e,a=16*t;n[a]=s,n[a+5]=s,n[a+10]=s}t.thinInstanceBufferUpdated("matrix")}};d(),R.onBeforeRenderObservable.add(d)}S.runRenderLoop(()=>R.render());let B=()=>S.resize();window.addEventListener("resize",B);let T=(0,c.attachMeshHover)(R,e,L),E=(0,n.attachDoubleClickFocus)(R,e,F);w("ready"),i=()=>{window.removeEventListener("resize",B),T(),E(),L(null),x.current=null,g.current=null,R.dispose(),S.dispose()}}catch(t){if(s)return;w("error"),z(t instanceof Error?t.message:"Failed to render heatmap.")}})(),()=>{s=!0,i?.()}},[h,o,u,q]);let C=v?v.cells>h.length?` Showing the ${h.length.toLocaleString()} busiest of ${v.cells.toLocaleString()} occupied cells (${v.hits.toLocaleString()} total hits).`:` ${v.cells.toLocaleString()} occupied cells, ${v.hits.toLocaleString()} total hits.`:"";return(0,e.jsxs)("div",{className:"relative",children:[(0,e.jsx)("canvas",{ref:b,className:"aspect-video w-full rounded-lg border border-edge bg-ink"}),M?(0,e.jsx)("div",{className:"pointer-events-none absolute z-10 max-w-[16rem] truncate rounded border border-edge bg-ink/90 px-1.5 py-0.5 text-xs text-white shadow backdrop-blur",style:{left:M.x+12,top:M.y+12},children:M.label}):null,"ready"===f?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(l,{shape:q,onChange:_}),(0,e.jsx)(r.ZoomButtons,{onZoom:t=>x.current&&(0,n.stepZoom)(x.current,t),onReset:()=>x.current&&g.current&&(0,n.resetFocus)(x.current,g.current)}),(0,e.jsx)(i.HeatLegend,{title:d,lowLabel:j,highLabel:p,note:m+C})]}):(0,e.jsx)("div",{className:"pointer-events-none absolute inset-0 grid place-items-center text-sm text-fg-muted",children:"loading"===f?"Rendering…":"empty"===f?k:"error"===f?y??"Heatmap unavailable.":null})]})}])},3905,t=>{t.v(e=>Promise.all(["static/chunks/3pdpaqzwhhijn.js","static/chunks/08bm3ye5govev.js","static/chunks/0g6u34xkzrpjn.js","static/chunks/25ctnyh7njp-d.js","static/chunks/2gh4z57fem0_v.js","static/chunks/3vaho-xrtuchd.js","static/chunks/0g7p8zp2kxve5.js"].map(e=>t.l(e))).then(()=>e(66232)))},94432,t=>{t.v(e=>Promise.all(["static/chunks/2kje_jvmwsvwo.js","static/chunks/1j--a56ji33_x.js","static/chunks/3pdpaqzwhhijn.js","static/chunks/2npk7tr63h7rl.js","static/chunks/3vaho-xrtuchd.js","static/chunks/3g_h_00xs9u59.js","static/chunks/1vzmzrjhlm1q5.js","static/chunks/25ctnyh7njp-d.js","static/chunks/1vpcaaf-0dn7q.js"].map(e=>t.l(e))).then(()=>e(92494)))},59694,t=>{t.v(e=>Promise.all(["static/chunks/1j--a56ji33_x.js","static/chunks/0oap0o8a8a_cl.js","static/chunks/0f_nv15a8q415.js","static/chunks/1vzmzrjhlm1q5.js","static/chunks/3pdpaqzwhhijn.js","static/chunks/245h82k-g1nxr.js","static/chunks/3ovd8o_usay7j.js","static/chunks/3vaho-xrtuchd.js","static/chunks/1vpcaaf-0dn7q.js","static/chunks/25ctnyh7njp-d.js","static/chunks/2npk7tr63h7rl.js","static/chunks/3pyggl13glbdc.js"].map(e=>t.l(e))).then(()=>e(67186)))},88004,t=>{t.v(e=>Promise.all(["static/chunks/2p8dbh81chhon.js","static/chunks/1oara6fkfvgs3.js","static/chunks/1vzmzrjhlm1q5.js","static/chunks/25ctnyh7njp-d.js","static/chunks/3pdpaqzwhhijn.js"].map(e=>t.l(e))).then(()=>e(15768)))},27940,t=>{t.v(e=>Promise.all(["static/chunks/0w0sx062qmcsh.js","static/chunks/25ctnyh7njp-d.js","static/chunks/3pdpaqzwhhijn.js"].map(e=>t.l(e))).then(()=>e(23235)))},27124,t=>{t.v(e=>Promise.all(["static/chunks/1par9m038tiov.js","static/chunks/1j--a56ji33_x.js","static/chunks/2j-sax2xfdv7l.js","static/chunks/340pg0qkv5tqq.js","static/chunks/3pdpaqzwhhijn.js","static/chunks/0gwa154w_0wuh.js","static/chunks/0oap0o8a8a_cl.js","static/chunks/0f_nv15a8q415.js","static/chunks/3vaho-xrtuchd.js","static/chunks/3pyggl13glbdc.js","static/chunks/1vzmzrjhlm1q5.js","static/chunks/3g_h_00xs9u59.js","static/chunks/1vpcaaf-0dn7q.js","static/chunks/25ctnyh7njp-d.js","static/chunks/2npk7tr63h7rl.js","static/chunks/01aeari2x_tlz.js"].map(e=>t.l(e))).then(()=>e(70928)))},14074,t=>{t.v(e=>Promise.all(["static/chunks/1zcrrq1fx8g2y.js","static/chunks/1tdg_eolxlcdl.js","static/chunks/1j--a56ji33_x.js","static/chunks/1vzmzrjhlm1q5.js","static/chunks/0vddljjnmozzx.js","static/chunks/3pdpaqzwhhijn.js","static/chunks/1vpcaaf-0dn7q.js","static/chunks/3vaho-xrtuchd.js","static/chunks/0f_nv15a8q415.js","static/chunks/3g_h_00xs9u59.js","static/chunks/2npk7tr63h7rl.js","static/chunks/25ctnyh7njp-d.js"].map(e=>t.l(e))).then(()=>e(87566)))},35983,t=>{t.v(e=>Promise.all(["static/chunks/4227p7752rnny.js","static/chunks/1j--a56ji33_x.js","static/chunks/1vzmzrjhlm1q5.js","static/chunks/2npk7tr63h7rl.js","static/chunks/1vkww9l6lgqag.js","static/chunks/25ctnyh7njp-d.js","static/chunks/0f_nv15a8q415.js","static/chunks/3vaho-xrtuchd.js","static/chunks/1vpcaaf-0dn7q.js","static/chunks/3pyggl13glbdc.js","static/chunks/3pdpaqzwhhijn.js"].map(e=>t.l(e))).then(()=>e(50608)))},18561,t=>{t.v(e=>Promise.all(["static/chunks/1j--a56ji33_x.js","static/chunks/1vkww9l6lgqag.js","static/chunks/3pdpaqzwhhijn.js","static/chunks/2npk7tr63h7rl.js","static/chunks/117ys3lltfmcu.js","static/chunks/25ctnyh7njp-d.js","static/chunks/1vzmzrjhlm1q5.js","static/chunks/3g_h_00xs9u59.js","static/chunks/1vpcaaf-0dn7q.js","static/chunks/3vaho-xrtuchd.js"].map(e=>t.l(e))).then(()=>e(85106)))}]);
@@ -0,0 +1 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,2348,2413,t=>{"use strict";let e=1/1.2;t.s(["ZOOM_IN_FACTOR",0,e,"ZOOM_OUT_FACTOR",0,1.2,"attachDoubleClickFocus",0,function(t,e,s){let a=()=>{let e=t.pick(t.pointerX,t.pointerY);e?.hit&&e.pickedPoint&&s.setTarget(e.pickedPoint)};return e.addEventListener("dblclick",a),()=>e.removeEventListener("dblclick",a)},"disableWheelZoom",0,function(t){t.inputs.removeByType("ArcRotateCameraMouseWheelInput")},"resetFocus",0,function(t,e){t.setTarget(e.target),t.alpha=e.alpha,t.beta=e.beta,t.radius=e.radius},"stepZoom",0,function(t,e){let s=t.lowerRadiusLimit??.01,a=t.upperRadiusLimit??1/0;t.radius=Math.min(a,Math.max(s,t.radius*e))}],2348);var s=t.i(28100);t.s(["ZoomButtons",0,function({onZoom:t,onReset:a}){let n="grid h-8 w-8 place-items-center rounded-md border border-edge bg-ink/80 text-lg leading-none text-fg backdrop-blur transition hover:bg-ink hover:text-white";return(0,s.jsxs)("div",{className:"absolute right-3 top-3 flex flex-col gap-1",children:[(0,s.jsx)("button",{type:"button","aria-label":"Zoom in",className:n,onClick:()=>t(e),children:"+"}),(0,s.jsx)("button",{type:"button","aria-label":"Zoom out",className:n,onClick:()=>t(1.2),children:"−"}),a?(0,s.jsx)("button",{type:"button","aria-label":"Reset camera focus to center",title:"Reset focus to center",className:n,onClick:a,children:(0,s.jsxs)("svg",{viewBox:"0 0 16 16",width:"16",height:"16",fill:"none",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round","aria-hidden":"true",children:[(0,s.jsx)("circle",{cx:"8",cy:"8",r:"3"}),(0,s.jsx)("path",{d:"M8 1v2.5M8 12.5V15M1 8h2.5M12.5 8H15"})]})}):null]})}],2413)},25476,t=>{"use strict";t.s(["attachMeshHover",0,function(t,e,s){let a=0,n=null,i=e=>{let i=e.offsetX,c=e.offsetY;a||(a=requestAnimationFrame(()=>{var e,r;let h;a=0;let l=t.pick(i,c,t=>t.isPickable&&t.isEnabled()),o=l?.pickedMesh?(e=l.pickedMesh,r=l.thinInstanceIndex??-1,(h=e.metadata)?r>=0&&h.hoverLabels?h.hoverLabels[r]??null:h.hoverLabel??null:null):null;o?s({label:o,x:i,y:c}):null!==n&&s(null),n=o}))},c=()=>{a&&(cancelAnimationFrame(a),a=0),null!==n&&(n=null,s(null))};return e.addEventListener("pointermove",i),e.addEventListener("pointerleave",c),()=>{e.removeEventListener("pointermove",i),e.removeEventListener("pointerleave",c),a&&cancelAnimationFrame(a)}}])},48939,t=>{"use strict";var e=t.i(28100),s=t.i(11623);function a(t){return Number.isNaN(t)||t<0?0:t>1?1:t}function n(t){let e=a(t),s=[[0,.1,.9],[0,.85,1],[.1,.9,.2],[1,.85,0],[1,.15,0],[1,1,1]],n=s.length-1,i=e*n,c=Math.min(Math.floor(i),n-1),r=i-c,h=s[c],l=s[c+1];return h&&l?[h[0]+(l[0]-h[0])*r,h[1]+(l[1]-h[1])*r,h[2]+(l[2]-h[2])*r]:[1,1,1]}var i=t.i(56054),c=t.i(2348),r=t.i(25476),h=t.i(18637),l=t.i(2413);t.s(["CameraDome3DView",0,function({bins:o,gridSize:u}){let d=(0,s.useRef)(null),m=(0,s.useRef)(null),j=(0,s.useRef)(null),[k,p]=(0,s.useState)("loading"),[v,g]=(0,s.useState)(null),[b,f]=(0,s.useState)("markers"),[w,x]=(0,s.useState)(null);return(0,s.useEffect)(()=>{let e=d.current;if(!e)return;if(0===o.length)return void p("empty");let s=!1,h=null;return p("loading"),g(null),(async()=>{try{let[{Engine:l},{Scene:d},{ArcRotateCamera:k},{HemisphericLight:v},{Vector3:g,Color3:f,Color4:w,Matrix:M},{MeshBuilder:y},{StandardMaterial:z},{Mesh:q},{DynamicTexture:P}]=await Promise.all([t.A(3905),t.A(94432),t.A(59694),t.A(88004),t.A(27940),t.A(27124),t.A(14074),t.A(2213),t.A(15002),t.A(35983),t.A(18561)]);if(s)return;let _=new l(e,!0,{preserveDrawingBuffer:!1}),C=new d(_);C.clearColor=new w(.04,.05,.07,1);let I=g.Zero(),L=new k("dome-cam",Math.PI/3,Math.PI/2.4,3.6,I,C);L.attachControl(e,!0),L.lowerRadiusLimit=1.6,L.upperRadiusLimit=8,(0,c.disableWheelZoom)(L),m.current=L,j.current={target:I,alpha:L.alpha,beta:L.beta,radius:L.radius},new v("dome-light",new g(.3,1,.2),C);let A=y.CreateSphere("dome",{diameter:2,segments:20},C),B=new z("dome-mat",C);B.wireframe=!0,B.disableLighting=!0,B.emissiveColor=new f(.16,.2,.28),B.alpha=.5,A.material=B,A.isPickable=!1;let R=[];for(let t=0;t<=64;t++){let e=t/64*Math.PI*2;R.push(new g(Math.cos(e),0,Math.sin(e)))}let S=y.CreateLines("dome-horizon",{points:R},C);S.color=new f(.3,.36,.46),S.isPickable=!1;let F=y.CreateLines("dome-forward",{points:[g.Zero(),new g(1.25,0,0)]},C);F.color=new f(.4,.7,.95),F.isPickable=!1;let E=o.reduce((t,e)=>Math.max(t,e.count),1),N=u>0?u:1;if("markers"===b){let t=y.CreateBox("dome-marker",{size:1},C),e=new z("dome-marker-mat",C);e.disableLighting=!0,e.emissiveColor=f.White(),e.specularColor=new f(0,0,0),t.material=e,t.isPickable=!0,t.thinInstanceEnablePicking=!0;let s=o.length,a=new Float32Array(16*s),n=new Float32Array(4*s),c=Array(s);for(let t=0;t<s;t++){let e=o[t],s=(e.azimuth_bin+.5)/N*Math.PI*2-Math.PI,r=(e.elevation_bin+.5)/N*Math.PI-Math.PI/2,h=Math.cos(r),l=h*Math.cos(s),u=Math.sin(r),d=h*Math.sin(s),m=e.count/E,j=.03+.12*m;M.Scaling(j,j,j).multiply(M.Translation(l,u,d)).copyToArray(a,16*t);let[k,p,v]=(0,i.heatRgb)(m);n[4*t]=k,n[4*t+1]=p,n[4*t+2]=v,n[4*t+3]=1,c[t]=`dir (${e.azimuth_bin}, ${e.elevation_bin}) \xb7 ${e.count}`}t.thinInstanceSetBuffer("matrix",a,16,!0),t.thinInstanceSetBuffer("color",n,4,!0),t.metadata={hoverLabels:c}}else{let t=function(t,e={}){let s=void 0!==e.width&&e.width>0?Math.floor(e.width):256,i=void 0!==e.height&&e.height>0?Math.floor(e.height):Math.max(1,Math.floor(s/2)),c=e.colorRamp??n,r=void 0!==e.blurBins&&e.blurBins>0?e.blurBins:1.5,h=a(e.alphaFloor??0),l=a(e.opacity??1),o=t.gridSize>0?t.gridSize:1,u=new Uint8ClampedArray(s*i*4),d=t.bins.filter(t=>t.count>0);if(0===d.length)return{width:s,height:i,rgba:u};let m=Math.max(1e-4,Math.PI/o*r),j=2*m*m,k=Math.cos(Math.min(Math.PI,3*m)),p=d.map(t=>{var e,s;let a,[n,i]=(e=t.azimuthBin,s=t.elevationBin,[(e+.5)/o*Math.PI*2-Math.PI,(s+.5)/o*Math.PI-Math.PI/2]);return[(a=Math.cos(i))*Math.cos(n),Math.sin(i),a*Math.sin(n)]}),v=new Float32Array(s*i),g=0;for(let t=0;t<i;t++){let e=Math.PI/2-(t+.5)/i*Math.PI,a=Math.cos(e),n=Math.sin(e);for(let e=0;e<s;e++){let i=(e+.5)/s*Math.PI*2-Math.PI,c=a*Math.cos(i),r=a*Math.sin(i),h=0;for(let t=0;t<d.length;t++){let e=p[t],s=c*e[0]+n*e[1]+r*e[2];if(s<k)continue;let a=Math.acos(s>1?1:s<-1?-1:s);h+=d[t].count*Math.exp(-(a*a)/j)}v[t*s+e]=h,h>g&&(g=h)}}if(g<=0)return{width:s,height:i,rgba:u};for(let t=0;t<v.length;t++){let e=a(v[t]/g),[s,n,i]=c(e),r=(h+(1-h)*e)*l,o=4*t;u[o]=Math.round(255*s),u[o+1]=Math.round(255*n),u[o+2]=Math.round(255*i),u[o+3]=Math.round(255*a(r))}return{width:s,height:i,rgba:u}}({bins:o.map(t=>({azimuthBin:t.azimuth_bin,elevationBin:t.elevation_bin,count:t.count})),gridSize:N},{width:256,blurBins:1.5,opacity:.95}),e=new P("dome-skytex",{width:t.width,height:t.height},C,!1);e.hasAlpha=!0;let s=e.getContext(),i=s.createImageData(t.width,t.height);i.data.set(t.rgba),s.putImageData(i,0,0),e.update();let c=y.CreateSphere("dome-sky",{diameter:2,segments:48,sideOrientation:q.DOUBLESIDE},C),r=new z("dome-sky-mat",C);r.disableLighting=!0,r.emissiveColor=f.White(),r.diffuseColor=new f(0,0,0),r.specularColor=new f(0,0,0),r.emissiveTexture=e,r.opacityTexture=e,r.backFaceCulling=!1,c.material=r,c.isPickable=!1}_.runRenderLoop(()=>C.render());let T=()=>_.resize();window.addEventListener("resize",T);let Z=(0,r.attachMeshHover)(C,e,x),D=(0,c.attachDoubleClickFocus)(C,e,L);p("ready"),h=()=>{window.removeEventListener("resize",T),Z(),D(),x(null),m.current=null,j.current=null,C.dispose(),_.dispose()}}catch(t){if(s)return;p("error"),g(t instanceof Error?t.message:"Failed to render dome.")}})(),()=>{s=!0,h?.()}},[o,u,b]),(0,e.jsxs)("div",{className:"relative",children:[(0,e.jsx)("canvas",{ref:d,className:"aspect-video w-full rounded-lg border border-edge bg-ink"}),w?(0,e.jsx)("div",{className:"pointer-events-none absolute z-10 max-w-[16rem] truncate rounded border border-edge bg-ink/90 px-1.5 py-0.5 text-xs text-white shadow backdrop-blur",style:{left:w.x+12,top:w.y+12},children:w.label}):null,"ready"===k?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("div",{className:"absolute left-3 top-3 flex overflow-hidden rounded-md border border-edge bg-ink/80 text-xs backdrop-blur",children:["markers","skydome"].map(t=>(0,e.jsx)("button",{type:"button",onClick:()=>f(t),className:`px-2.5 py-1 ${b===t?"bg-fg/15 font-medium text-white":"text-fg-muted hover:text-fg"}`,children:"markers"===t?"Markers":"Skydome"},t))}),(0,e.jsx)(l.ZoomButtons,{onZoom:t=>m.current&&(0,c.stepZoom)(m.current,t),onReset:()=>m.current&&j.current&&(0,c.resetFocus)(m.current,j.current)}),(0,e.jsx)(h.HeatLegend,{title:"Gaze density",lowLabel:"rarely",highLabel:"most-viewed",note:"markers"===b?"Each marker is a look-direction (camera forward). Blue line = forward, ring = horizon. Color & size scale with how often that direction was viewed.":"Continuous equirectangular heat field: the same gaze bins splatted into a smooth thermal texture wrapped on the dome. The in-scene SDK overlay (showGazeSkydome) renders this inward so you can stand inside it in WebXR."})]}):(0,e.jsx)("div",{className:"pointer-events-none absolute inset-0 grid place-items-center text-sm text-fg-muted",children:"loading"===k?"Rendering…":"empty"===k?"No camera samples in range.":"error"===k?v??"Dome unavailable.":null})]})}],48939)},3905,t=>{t.v(e=>Promise.all(["static/chunks/3pdpaqzwhhijn.js","static/chunks/08bm3ye5govev.js","static/chunks/0g6u34xkzrpjn.js","static/chunks/25ctnyh7njp-d.js","static/chunks/2gh4z57fem0_v.js","static/chunks/3vaho-xrtuchd.js","static/chunks/0g7p8zp2kxve5.js"].map(e=>t.l(e))).then(()=>e(66232)))},94432,t=>{t.v(e=>Promise.all(["static/chunks/2kje_jvmwsvwo.js","static/chunks/1j--a56ji33_x.js","static/chunks/3pdpaqzwhhijn.js","static/chunks/2npk7tr63h7rl.js","static/chunks/3vaho-xrtuchd.js","static/chunks/3g_h_00xs9u59.js","static/chunks/1vzmzrjhlm1q5.js","static/chunks/25ctnyh7njp-d.js","static/chunks/1vpcaaf-0dn7q.js"].map(e=>t.l(e))).then(()=>e(92494)))},59694,t=>{t.v(e=>Promise.all(["static/chunks/1j--a56ji33_x.js","static/chunks/0oap0o8a8a_cl.js","static/chunks/0f_nv15a8q415.js","static/chunks/1vzmzrjhlm1q5.js","static/chunks/3pdpaqzwhhijn.js","static/chunks/245h82k-g1nxr.js","static/chunks/3ovd8o_usay7j.js","static/chunks/3vaho-xrtuchd.js","static/chunks/1vpcaaf-0dn7q.js","static/chunks/25ctnyh7njp-d.js","static/chunks/2npk7tr63h7rl.js","static/chunks/3pyggl13glbdc.js"].map(e=>t.l(e))).then(()=>e(67186)))},88004,t=>{t.v(e=>Promise.all(["static/chunks/2p8dbh81chhon.js","static/chunks/1oara6fkfvgs3.js","static/chunks/1vzmzrjhlm1q5.js","static/chunks/25ctnyh7njp-d.js","static/chunks/3pdpaqzwhhijn.js"].map(e=>t.l(e))).then(()=>e(15768)))},27940,t=>{t.v(e=>Promise.all(["static/chunks/0w0sx062qmcsh.js","static/chunks/25ctnyh7njp-d.js","static/chunks/3pdpaqzwhhijn.js"].map(e=>t.l(e))).then(()=>e(23235)))},27124,t=>{t.v(e=>Promise.all(["static/chunks/1par9m038tiov.js","static/chunks/1j--a56ji33_x.js","static/chunks/2j-sax2xfdv7l.js","static/chunks/340pg0qkv5tqq.js","static/chunks/3pdpaqzwhhijn.js","static/chunks/0gwa154w_0wuh.js","static/chunks/0oap0o8a8a_cl.js","static/chunks/0f_nv15a8q415.js","static/chunks/3vaho-xrtuchd.js","static/chunks/3pyggl13glbdc.js","static/chunks/1vzmzrjhlm1q5.js","static/chunks/3g_h_00xs9u59.js","static/chunks/1vpcaaf-0dn7q.js","static/chunks/25ctnyh7njp-d.js","static/chunks/2npk7tr63h7rl.js","static/chunks/01aeari2x_tlz.js"].map(e=>t.l(e))).then(()=>e(70928)))},14074,t=>{t.v(e=>Promise.all(["static/chunks/1zcrrq1fx8g2y.js","static/chunks/1tdg_eolxlcdl.js","static/chunks/1j--a56ji33_x.js","static/chunks/1vzmzrjhlm1q5.js","static/chunks/0vddljjnmozzx.js","static/chunks/3pdpaqzwhhijn.js","static/chunks/1vpcaaf-0dn7q.js","static/chunks/3vaho-xrtuchd.js","static/chunks/0f_nv15a8q415.js","static/chunks/3g_h_00xs9u59.js","static/chunks/2npk7tr63h7rl.js","static/chunks/25ctnyh7njp-d.js"].map(e=>t.l(e))).then(()=>e(87566)))},2213,t=>{t.v(e=>Promise.all(["static/chunks/3wqs57qehored.js","static/chunks/1j--a56ji33_x.js","static/chunks/1vzmzrjhlm1q5.js","static/chunks/2npk7tr63h7rl.js","static/chunks/1vkww9l6lgqag.js","static/chunks/1vpcaaf-0dn7q.js","static/chunks/0f_nv15a8q415.js","static/chunks/3pyggl13glbdc.js","static/chunks/3vaho-xrtuchd.js","static/chunks/25ctnyh7njp-d.js","static/chunks/3pdpaqzwhhijn.js"].map(e=>t.l(e))).then(()=>e(95758)))},15002,t=>{t.v(e=>Promise.all(["static/chunks/34gp3hvr3j6um.js","static/chunks/0x6i6e6863tir.js","static/chunks/3pdpaqzwhhijn.js","static/chunks/3vaho-xrtuchd.js","static/chunks/2gh4z57fem0_v.js","static/chunks/25ctnyh7njp-d.js","static/chunks/28ycc-1519hl2.js"].map(e=>t.l(e))).then(()=>e(95729)))},35983,t=>{t.v(e=>Promise.all(["static/chunks/4227p7752rnny.js","static/chunks/1j--a56ji33_x.js","static/chunks/1vzmzrjhlm1q5.js","static/chunks/2npk7tr63h7rl.js","static/chunks/1vkww9l6lgqag.js","static/chunks/25ctnyh7njp-d.js","static/chunks/0f_nv15a8q415.js","static/chunks/3vaho-xrtuchd.js","static/chunks/1vpcaaf-0dn7q.js","static/chunks/3pyggl13glbdc.js","static/chunks/3pdpaqzwhhijn.js"].map(e=>t.l(e))).then(()=>e(50608)))},18561,t=>{t.v(e=>Promise.all(["static/chunks/1j--a56ji33_x.js","static/chunks/1vkww9l6lgqag.js","static/chunks/3pdpaqzwhhijn.js","static/chunks/2npk7tr63h7rl.js","static/chunks/117ys3lltfmcu.js","static/chunks/25ctnyh7njp-d.js","static/chunks/1vzmzrjhlm1q5.js","static/chunks/3g_h_00xs9u59.js","static/chunks/1vpcaaf-0dn7q.js","static/chunks/3vaho-xrtuchd.js"].map(e=>t.l(e))).then(()=>e(85106)))}]);
@@ -0,0 +1 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,2348,2413,e=>{"use strict";let t=1/1.2;e.s(["ZOOM_IN_FACTOR",0,t,"ZOOM_OUT_FACTOR",0,1.2,"attachDoubleClickFocus",0,function(e,t,n){let a=()=>{let t=e.pick(e.pointerX,e.pointerY);t?.hit&&t.pickedPoint&&n.setTarget(t.pickedPoint)};return t.addEventListener("dblclick",a),()=>t.removeEventListener("dblclick",a)},"disableWheelZoom",0,function(e){e.inputs.removeByType("ArcRotateCameraMouseWheelInput")},"resetFocus",0,function(e,t){e.setTarget(t.target),e.alpha=t.alpha,e.beta=t.beta,e.radius=t.radius},"stepZoom",0,function(e,t){let n=e.lowerRadiusLimit??.01,a=e.upperRadiusLimit??1/0;e.radius=Math.min(a,Math.max(n,e.radius*t))}],2348);var n=e.i(28100);e.s(["ZoomButtons",0,function({onZoom:e,onReset:a}){let s="grid h-8 w-8 place-items-center rounded-md border border-edge bg-ink/80 text-lg leading-none text-fg backdrop-blur transition hover:bg-ink hover:text-white";return(0,n.jsxs)("div",{className:"absolute right-3 top-3 flex flex-col gap-1",children:[(0,n.jsx)("button",{type:"button","aria-label":"Zoom in",className:s,onClick:()=>e(t),children:"+"}),(0,n.jsx)("button",{type:"button","aria-label":"Zoom out",className:s,onClick:()=>e(1.2),children:"−"}),a?(0,n.jsx)("button",{type:"button","aria-label":"Reset camera focus to center",title:"Reset focus to center",className:s,onClick:a,children:(0,n.jsxs)("svg",{viewBox:"0 0 16 16",width:"16",height:"16",fill:"none",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round","aria-hidden":"true",children:[(0,n.jsx)("circle",{cx:"8",cy:"8",r:"3"}),(0,n.jsx)("path",{d:"M8 1v2.5M8 12.5V15M1 8h2.5M12.5 8H15"})]})}):null]})}],2413)},25476,e=>{"use strict";e.s(["attachMeshHover",0,function(e,t,n){let a=0,s=null,i=t=>{let i=t.offsetX,l=t.offsetY;a||(a=requestAnimationFrame(()=>{var t,o;let r;a=0;let c=e.pick(i,l,e=>e.isPickable&&e.isEnabled()),u=c?.pickedMesh?(t=c.pickedMesh,o=c.thinInstanceIndex??-1,(r=t.metadata)?o>=0&&r.hoverLabels?r.hoverLabels[o]??null:r.hoverLabel??null:null):null;u?n({label:u,x:i,y:l}):null!==s&&n(null),s=u}))},l=()=>{a&&(cancelAnimationFrame(a),a=0),null!==s&&(s=null,n(null))};return t.addEventListener("pointermove",i),t.addEventListener("pointerleave",l),()=>{t.removeEventListener("pointermove",i),t.removeEventListener("pointerleave",l),a&&cancelAnimationFrame(a)}}])},19399,e=>{"use strict";var t=e.i(28100),n=e.i(11623),a=e.i(20880);let s="__other_sp__",i="__other_mesh__";function l(e){return`${e[0]}|${e[1]}|${e[2]}`}function o(e,t){return t<=1?0:1.4-e/(t-1)*2.8}var r=e.i(56054),c=e.i(2348),u=e.i(25476),h=e.i(18637),d=e.i(2413);let m="__all__",p={maxStandpoints:6,maxMeshes:10,maxRibbons:70};function b(e,t){return`${e}|${t}`}function g({label:e,value:n,onChange:a,allLabel:s,options:i}){return(0,t.jsxs)("label",{className:"flex items-center gap-1.5 rounded-md border border-edge bg-ink/80 px-2 py-1 text-xs text-fg backdrop-blur",children:[(0,t.jsx)("span",{className:"font-medium text-fg-muted",children:e}),(0,t.jsxs)("select",{className:"max-w-[12rem] bg-transparent text-white outline-none",value:n,onChange:e=>a(e.target.value),children:[(0,t.jsx)("option",{value:m,children:s}),i.map(e=>(0,t.jsx)("option",{value:e.value,children:e.label},e.value))]})]})}function f({active:e,onClick:n,children:a,disabled:s=!1,title:i}){return(0,t.jsx)("button",{type:"button",onClick:n,disabled:s,title:i,className:`rounded px-2 py-0.5 font-medium transition ${s?"cursor-not-allowed text-fg-muted/40":e?"bg-amber text-ink":"text-fg-muted hover:text-fg"}`,children:a})}function v({standpoints:e,proxyMeshes:a,selectedKey:s,onSelect:i}){let l=(0,n.useRef)(null),o=(0,n.useMemo)(()=>e.filter(e=>e.origin),[e]),r=(0,n.useMemo)(()=>{let e=1/0,t=-1/0,n=1/0,s=-1/0,i=(a,i)=>{e=Math.min(e,a),t=Math.max(t,a),n=Math.min(n,i),s=Math.max(s,i)};for(let e of a)i(e.aabb[0],e.aabb[2]),i(e.aabb[3],e.aabb[5]);for(let e of o)i(e.origin[0],e.origin[2]);return Number.isFinite(e)?(t-e<.001&&(e-=1,t+=1),s-n<.001&&(n-=1,s+=1),{minX:e,maxX:t,minZ:n,maxZ:s}):{minX:-1,maxX:1,minZ:-1,maxZ:1}},[a,o]),c=(0,n.useMemo)(()=>{let e=Math.min(134/(r.maxX-r.minX),94/(r.maxZ-r.minZ));return(t,n)=>[8+(t-r.minX)*e,8+(n-r.minZ)*e]},[r]),u=(0,n.useMemo)(()=>o.reduce((e,t)=>Math.max(e,t.count),1),[o]);return(0,n.useEffect)(()=>{let e=l.current,t=e?.getContext("2d");if(!t)return;let n=window.devicePixelRatio||1;for(let s of(e.width=150*n,e.height=110*n,t.setTransform(n,0,0,n,0,0),t.clearRect(0,0,150,110),t.fillStyle="rgba(8,10,14,0.85)",t.fillRect(0,0,150,110),t.strokeStyle="rgba(120,140,170,0.35)",t.lineWidth=1,a)){let[e,n]=c(s.aabb[0],s.aabb[2]),[a,i]=c(s.aabb[3],s.aabb[5]);t.strokeRect(Math.min(e,a),Math.min(n,i),Math.abs(a-e),Math.abs(i-n))}for(let e of o){let[n,a]=c(e.origin[0],e.origin[2]),i=2+e.count/u*4,l=e.key===s;t.beginPath(),t.arc(n,a,i,0,2*Math.PI),t.fillStyle=l?"rgba(242,115,242,1)":"rgba(242,115,242,0.55)",t.fill(),l&&(t.beginPath(),t.arc(n,a,i+2.5,0,2*Math.PI),t.strokeStyle="rgba(255,255,255,0.9)",t.lineWidth=1.5,t.stroke())}},[a,o,c,u,s]),(0,t.jsxs)("div",{className:"absolute right-3 top-3 rounded-md border border-edge bg-ink/80 p-1 backdrop-blur",children:[(0,t.jsx)("div",{className:"px-1 pb-0.5 text-[10px] font-medium text-fg-muted",children:"Standpoints (top view)"}),(0,t.jsx)("canvas",{ref:l,className:"h-27.5 w-37.5 cursor-pointer rounded",onClick:e=>{let t=l.current;if(!t||0===o.length)return;let n=t.getBoundingClientRect(),a=(e.clientX-n.left)/n.width*150,s=(e.clientY-n.top)/n.height*110,r=null,u=1/0;for(let e of o){let[t,n]=c(e.origin[0],e.origin[2]),i=(t-a)**2+(n-s)**2;i<u&&(u=i,r=e)}r&&u<=196&&i(r.key)}})]})}e.s(["FlowSankey3DView",0,function({links:x,gridSize:k,proxyMeshes:w=[],maxLinks:j=80,baseUrl:z,apiKey:M,flowQuery:y,hasFirstPerson:_=!1}){let $=(0,n.useRef)(null),I=(0,n.useRef)(null),C=(0,n.useRef)(null),[P,B]=(0,n.useState)("loading"),[L,S]=(0,n.useState)(null),[A,q]=(0,n.useState)(m),[R,E]=(0,n.useState)(m),[N,O]=(0,n.useState)(m),[Z,F]=(0,n.useState)("aggregate"),[T,V]=(0,n.useState)(null),[W,X]=(0,n.useState)("all"),[D,H]=(0,n.useState)(x),U=!!(z&&y),K=(0,n.useMemo)(()=>y?JSON.stringify(y):"",[y]),Y=(0,n.useRef)(!1);(0,n.useEffect)(()=>{!Y.current&&_&&(X("first-person"),Y.current=!0)},[_]),(0,n.useEffect)(()=>{_&&"viewer"===W&&X("first-person")},[_,W]),(0,n.useEffect)(()=>{U||H(x)},[x,U]),(0,n.useEffect)(()=>{if(!z||!y)return;let e=!1,t=new a.CollectorApi(z,M??""),n="all"===W?void 0:W;return t.flowHeatmap({...y,bins:k,limit:400,groupByOrigin:!0,cameraMode:n}).then(t=>{e||H(t)}).catch(()=>{e||H([])}),()=>{e=!0}},[z,M,K,W,k]);let G=(0,n.useMemo)(()=>{let e=new Map;for(let t of D){if(!t.originVoxel)continue;let n=l(t.originVoxel),a=t.origin,s=e.get(n);s?(s.count+=t.count,a&&(s.ox+=a[0]*t.count,s.oy+=a[1]*t.count,s.oz+=a[2]*t.count,s.wsum+=t.count)):e.set(n,{key:n,voxel:t.originVoxel,count:t.count,ox:a?a[0]*t.count:0,oy:a?a[1]*t.count:0,oz:a?a[2]*t.count:0,wsum:a?t.count:0})}return[...e.values()].map(e=>({key:e.key,voxel:e.voxel,count:e.count,origin:e.wsum>0?[e.ox/e.wsum,e.oy/e.wsum,e.oz/e.wsum]:void 0})).sort((e,t)=>t.count-e.count)},[D]),J=G.length>0,Q=(0,n.useMemo)(()=>N===m?null:G.find(e=>e.key===N)??null,[G,N]),ee=(0,n.useMemo)(()=>(function(e,t,n,a){let r=e.filter(e=>e.originVoxel);if(0===r.length)return{standpoints:[],gazes:[],meshes:[],ribbons:[],maxCount:1};let c=t.slice(0,Math.max(1,a.maxStandpoints)),u=new Set(c.map(e=>e.key)),h=e=>{let t=e.originVoxel?l(e.originVoxel):s;return u.has(t)?t:s},d=new Map;for(let e of r)d.set(e.mesh,(d.get(e.mesh)??0)+e.count);let m=new Set([...d.entries()].sort((e,t)=>t[1]-e[1]).slice(0,Math.max(1,a.maxMeshes)).map(([e])=>e)),p=e=>m.has(e)?e:i,b=new Map;for(let e of r){let t=h(e),n=p(e.mesh),a=`${t}|${e.azimuth_bin}|${e.elevation_bin}|${n}`,s=b.get(a);s?s.count+=e.count:b.set(a,{standpointId:t,gazeId:`${t}|${e.azimuth_bin}|${e.elevation_bin}`,meshId:n,azimuthBin:e.azimuth_bin,elevationBin:e.elevation_bin,count:e.count})}let g=[...b.values()].sort((e,t)=>t.count-e.count),f=g.slice(0,Math.max(1,a.maxRibbons)),v=g.slice(Math.max(1,a.maxRibbons));if(v.length>0){let e=new Map(f.map(e=>[`${e.standpointId}|${e.azimuthBin}|${e.elevationBin}|${i}`,e]));for(let t of v){let n=`${t.standpointId}|${t.azimuthBin}|${t.elevationBin}|${i}`,a=e.get(n);if(a)a.count+=t.count;else{let a={standpointId:t.standpointId,gazeId:t.gazeId,meshId:i,azimuthBin:t.azimuthBin,elevationBin:t.elevationBin,count:t.count};e.set(n,a),f.push(a)}}}let x=new Set(f.map(e=>e.standpointId)),k=new Set(f.map(e=>e.meshId)),w=[...c.filter(e=>x.has(e.key)).map(e=>e.key),...x.has(s)?[s]:[]],j=w.map((e,t)=>{let n=c.find(t=>t.key===e),a=f.filter(t=>t.standpointId===e).reduce((e,t)=>e+t.count,0);return{id:e,kind:"standpoint",pos:[-2.6,o(t,w.length),0],count:a,label:n?`[${n.voxel[0]}, ${n.voxel[1]}, ${n.voxel[2]}]`:"Other standpoints",isOther:e===s}}),z=new Map(j.map(e=>[e.id,e.pos[1]])),M=new Map;for(let e of f)M.set(e.meshId,(M.get(e.meshId)??0)+e.count);let y=[...k].sort((e,t)=>(M.get(t)??0)-(M.get(e)??0));y.sort((e,t)=>(e===i)-(t===i));let _=y.map((e,t)=>({id:e,kind:"mesh",pos:[2.6,o(t,y.length),0],count:M.get(e)??0,label:e===i?"Other meshes":e,isOther:e===i})),$=new Map;for(let e of f){let t=$.get(e.gazeId);t?t.count+=e.count:$.set(e.gazeId,{az:e.azimuthBin,el:e.elevationBin,sp:e.standpointId,count:e.count})}let I=[...$.entries()].map(([e,t])=>{let a=z.get(t.sp)??0,s=(t.az+.5)/n-.5;return{id:e,kind:"gaze",pos:[0,a+((t.el+.5)/n-.5)*.85,1.6*s],count:t.count,label:`(${t.az}, ${t.el})`,isOther:!1}}),C=f.reduce((e,t)=>Math.max(e,t.count),1);return{standpoints:j,gazes:I,meshes:_,ribbons:f,maxCount:C}})(D,G,k,p),[D,G,k]),et="twostage"===Z&&J;(0,n.useEffect)(()=>{"twostage"!==Z||J||F("aggregate")},[Z,J]);let en=(0,n.useMemo)(()=>{if(N!==m&&J)return D.filter(e=>e.originVoxel&&l(e.originVoxel)===N);if(!J)return D;let e=new Map;for(let t of D){let n=`${t.azimuth_bin}|${t.elevation_bin}|${t.mesh}`,a=e.get(n);a?a.count+=t.count:e.set(n,{azimuth_bin:t.azimuth_bin,elevation_bin:t.elevation_bin,mesh:t.mesh,count:t.count})}return[...e.values()]},[D,N,J]),ea=(0,n.useMemo)(()=>[...en].sort((e,t)=>t.count-e.count).slice(0,Math.max(1,j)),[en,j]),es=(0,n.useMemo)(()=>{let e=new Map;for(let t of ea)e.set(t.mesh,(e.get(t.mesh)??0)+t.count);return[...e.entries()].sort((e,t)=>t[1]-e[1])},[ea]),ei=(0,n.useMemo)(()=>{let e=new Map;for(let t of ea){let n=b(t.azimuth_bin,t.elevation_bin),a=e.get(n);a?a.count+=t.count:e.set(n,{azimuthBin:t.azimuth_bin,elevationBin:t.elevation_bin,count:t.count})}return[...e.values()].sort((e,t)=>t.count-e.count)},[ea]);(0,n.useEffect)(()=>{!et&&A!==m&&(es.some(([e])=>e===A)||q(m))},[et,A,es]),(0,n.useEffect)(()=>{!et&&R!==m&&(ei.some(e=>b(e.azimuthBin,e.elevationBin)===R)||E(m))},[et,R,ei]),(0,n.useEffect)(()=>{!et&&N!==m&&(G.some(e=>e.key===N)||O(m))},[et,N,G]),(0,n.useEffect)(()=>{q(m),E(m),O(m)},[Z]);let el=(0,n.useMemo)(()=>et?ee.ribbons.filter(e=>{let t=N===m||e.standpointId===N,n=R===m||b(e.azimuthBin,e.elevationBin)===R,a=A===m||e.meshId===A;return t&&n&&a}).length:ea.filter(e=>{let t=R===m||b(e.azimuth_bin,e.elevation_bin)===R,n=A===m||e.mesh===A;return t&&n}).length,[et,ee,ea,A,R,N]),eo=et?ee.ribbons.length:ea.length,er=(0,n.useMemo)(()=>et?ee.standpoints.map(e=>({value:e.id,label:`${e.label} \xb7 ${e.count}`})):G.slice(0,24).map(e=>({value:e.key,label:`[${e.voxel[0]}, ${e.voxel[1]}, ${e.voxel[2]}] \xb7 ${e.count}`})),[et,ee,G]),ec=(0,n.useMemo)(()=>{if(et){let e=new Map;for(let t of ee.ribbons){let n=b(t.azimuthBin,t.elevationBin),a=e.get(n);a?a.count+=t.count:e.set(n,{az:t.azimuthBin,el:t.elevationBin,count:t.count})}return[...e.values()].sort((e,t)=>t.count-e.count).map(e=>({value:b(e.az,e.el),label:`(${e.az}, ${e.el}) \xb7 ${e.count}`}))}return ei.map(e=>({value:b(e.azimuthBin,e.elevationBin),label:`(${e.azimuthBin}, ${e.elevationBin}) \xb7 ${e.count}`}))},[et,ee,ei]),eu=(0,n.useMemo)(()=>et?ee.meshes.map(e=>({value:e.id,label:`${e.label} \xb7 ${e.count}`})):es.map(([e,t])=>({value:e,label:`${e} \xb7 ${t}`})),[et,ee,es]);return(0,n.useEffect)(()=>{let t=$.current;if(!t||et)return;if(0===ea.length)return void B("empty");let n=!1,a=null;return B("loading"),S(null),(async()=>{try{let[{Engine:s},{Scene:i},{ArcRotateCamera:l},{HemisphericLight:o},{Vector3:h,Color3:d,Color4:p},{MeshBuilder:g},{StandardMaterial:f}]=await Promise.all([e.A(3905),e.A(94432),e.A(59694),e.A(88004),e.A(27940),e.A(27124),e.A(14074),e.A(18561)]);if(n)return;let v=new s(t,!0,{preserveDrawingBuffer:!1}),x=new i(v);x.clearColor=new p(.04,.05,.07,1);let j=new Map;for(let e of w)j.set(e.name,function(e){let t=e.aabb;return[(t[0]+t[3])/2,(t[1]+t[4])/2,(t[2]+t[5])/2]}(e));let z=new Map,M=es.map(([e])=>e).filter(e=>!j.has(e));for(let e=0;e<M.length;e++){let t=M[e],n=function(e){let t=0;for(let n=0;n<e.length;n++)t=31*t+e.charCodeAt(n)|0;return Math.abs(t)}(t),a=e/Math.max(1,M.length)*Math.PI*2+n%100/100*.35;z.set(t,[2.2*Math.cos(a),-.35+(n%7-3)*.06,2.2*Math.sin(a)])}for(let[e,t]of j.entries())z.set(e,t);let y=0,_=0,$=0,P=0;for(let e of z.values())y+=e[0],_+=e[1],$+=e[2],P++;let L=new h(y/Math.max(1,P),_/Math.max(1,P),$/Math.max(1,P)),S=1.8;for(let e of z.values()){let t=e[0]-L.x,n=e[1]-L.y,a=e[2]-L.z;S=Math.max(S,Math.sqrt(t*t+n*n+a*a))}let q=.75*S+1,E=Math.max(1,S/1.8),N=ea.reduce((e,t)=>Math.max(e,t.count),1),O=new f("flow-source-node",x);O.disableLighting=!0,O.emissiveColor=new d(.45,.75,1);let Z=new f("flow-target-node",x);Z.disableLighting=!0,Z.emissiveColor=new d(1,.82,.42);let F=new Set,T=new Set,W=e=>{let t=R===m||b(e.azimuth_bin,e.elevation_bin)===R,n=A===m||e.mesh===A;return t&&n},X=new Set,D=new Set;for(let e of ea)W(e)&&(X.add(b(e.azimuth_bin,e.elevation_bin)),D.add(e.mesh));for(let e of ea){let t=`${e.azimuth_bin}|${e.elevation_bin}`,n=z.get(e.mesh);if(!n)continue;let a=W(e),s=(e.azimuth_bin+.5)/k*Math.PI*2-Math.PI,i=(e.elevation_bin+.5)/k*Math.PI-Math.PI/2,l=Math.cos(i),o=l*Math.cos(s),c=Math.sin(i),u=l*Math.sin(s),p=new h(L.x+o*q,L.y+c*q,L.z+u*q),b=new h(n[0],n[1],n[2]);if(!F.has(t)){let e=g.CreateSphere(`flow-src-${t}`,{diameter:.12*E,segments:6},x);e.position=p;let n=O.clone(`flow-src-mat-${t}`);n.alpha=X.has(t)||A===m&&R===m?1:.22,e.material=n,e.isPickable=!1,F.add(t)}if(!T.has(e.mesh)){let t=g.CreateSphere(`flow-target-${e.mesh}`,{diameter:.2*E,segments:7},x);t.position=b;let n=Z.clone(`flow-target-mat-${e.mesh}`);n.alpha=D.has(e.mesh)||A===m&&R===m?1:.22,t.material=n,t.isPickable=!0,t.metadata={hoverLabel:e.mesh},T.add(e.mesh)}let v=p.add(b).scale(.5),w=v.subtract(L),j=Math.sqrt(w.x*w.x+w.y*w.y+w.z*w.z),M=j>1e-6?w.x/j:0,y=j>1e-6?w.y/j:1,_=j>1e-6?w.z/j:0,$=(.35+e.count/N*.75)*E,I=new h(v.x+M*$,v.y+y*$+.12*E,v.z+_*$),C=[];for(let e=0;e<=18;e++){let t=e/18,n=1-t;C.push(new h(n*n*p.x+2*n*t*I.x+t*t*b.x,n*n*p.y+2*n*t*I.y+t*t*b.y,n*n*p.z+2*n*t*I.z+t*t*b.z))}let P=e.count/N,[B,S,V]=(0,r.heatRgb)(P),H=g.CreateTube(`flow-link-${e.mesh}-${t}`,{path:C,radius:(a?1:.4)*(.012+.04*P)*E,tessellation:8,cap:0,sideOrientation:0},x),U=new f(`flow-link-mat-${e.mesh}-${t}`,x);U.disableLighting=!0,U.emissiveColor=new d(B,S,V),U.alpha=a?.35+.65*P:.08,H.material=U,H.isPickable=!0,H.metadata={hoverLabel:e.mesh}}let H=new l("flow-cam",Math.PI/4,Math.PI/3,3.4*S,L,x);H.attachControl(t,!0),(0,c.disableWheelZoom)(H),I.current=H,C.current={target:L,alpha:H.alpha,beta:H.beta,radius:H.radius},new o("flow-light",new h(.3,1,.2),x);let U=g.CreateSphere("flow-source-dome",{diameter:2*q,segments:20},x);U.position=L;let K=new f("flow-source-dome-mat",x);K.wireframe=!0,K.disableLighting=!0,K.emissiveColor=new d(.16,.2,.28),K.alpha=.35,U.material=K,U.isPickable=!1;let Y=Q?.origin;if(Y){let e=new h(Y[0],Y[1],Y[2]),t=g.CreateSphere("flow-standpoint",{diameter:.26*E,segments:10},x);t.position=e;let n=new f("flow-standpoint-mat",x);n.disableLighting=!0,n.emissiveColor=new d(.95,.45,.95),t.material=n,t.isPickable=!1;let a=g.CreateLines("flow-standpoint-stem",{points:[e,new h(e.x,L.y,e.z)]},x);a.color=new d(.95,.45,.95),a.isPickable=!1}v.runRenderLoop(()=>x.render());let G=()=>v.resize();window.addEventListener("resize",G);let J=(0,u.attachMeshHover)(x,t,V),ee=(0,c.attachDoubleClickFocus)(x,t,H);B("ready"),a=()=>{window.removeEventListener("resize",G),J(),ee(),V(null),I.current=null,C.current=null,x.dispose(),v.dispose()}}catch(e){if(n)return;B("error"),S(e instanceof Error?e.message:"Failed to render flow links.")}})(),()=>{n=!0,a?.()}},[ea,k,w,A,R,Q,et]),(0,n.useEffect)(()=>{let t=$.current;if(!t||!et)return;if(0===ee.ribbons.length)return void B("empty");let n=!1,a=null;return B("loading"),S(null),(async()=>{try{let[{Engine:s},{Scene:i},{ArcRotateCamera:l},{HemisphericLight:o},{Vector3:h,Color3:d,Color4:p},{MeshBuilder:g},{StandardMaterial:f}]=await Promise.all([e.A(3905),e.A(94432),e.A(59694),e.A(88004),e.A(27940),e.A(27124),e.A(14074),e.A(18561)]);if(n)return;let v=new s(t,!0,{preserveDrawingBuffer:!1}),x=new i(v);x.clearColor=new p(.04,.05,.07,1);let k=e=>{let t=N===m||e.standpointId===N,n=R===m||b(e.azimuthBin,e.elevationBin)===R,a=A===m||e.meshId===A;return t&&n&&a},w=N!==m||R!==m||A!==m,j=new Set;for(let e of ee.ribbons)k(e)&&(j.add(e.standpointId),j.add(e.gazeId),j.add(e.meshId));let z={standpoint:[.95,.45,.95],gaze:[.45,.75,1],mesh:[1,.82,.42]},M={standpoint:.26,gaze:.13,mesh:.22},y=[...ee.standpoints,...ee.gazes,...ee.meshes],_=new Map(y.map(e=>[e.id,e.pos])),$=new Map(y.map(e=>[e.id,e.label]));for(let e of y){let t=g.CreateSphere(`ts-node-${e.kind}-${e.id}`,{diameter:M[e.kind],segments:8},x);t.position=new h(e.pos[0],e.pos[1],e.pos[2]);let n=new f(`ts-node-mat-${e.kind}-${e.id}`,x);n.disableLighting=!0;let[a,s,i]=z[e.kind];n.emissiveColor=new d(a,s,i),n.alpha=!w||j.has(e.id)?1:.2,t.material=n,t.isPickable=!0,t.metadata={hoverLabel:e.label}}let P=(e,t,n)=>{let a=e[0],s=e[1],i=e[2],l=t[0],o=t[1],r=t[2],c=[(a+l)/2,(s+o)/2+n,(i+r)/2],u=[];for(let e=0;e<=12;e++){let t=e/12,n=1-t;u.push(new h(n*n*a+2*n*t*c[0]+t*t*l,n*n*s+2*n*t*c[1]+t*t*o,n*n*i+2*n*t*c[2]+t*t*r))}return u};for(let e of ee.ribbons){let t=_.get(e.standpointId),n=_.get(e.gazeId),a=_.get(e.meshId);if(!t||!n||!a)continue;let s=e.count/ee.maxCount,i=.18+.5*s,l=[...P(t,n,i),...P(n,a,i).slice(1)],o=k(e),[c,u,h]=(0,r.heatRgb)(s),m=g.CreateTube(`ts-link-${e.standpointId}-${e.gazeId}-${e.meshId}`,{path:l,radius:(o?1:.4)*(.012+.04*s),tessellation:8,cap:0,sideOrientation:0},x),p=new f(`ts-link-mat-${e.standpointId}-${e.gazeId}-${e.meshId}`,x);p.disableLighting=!0,p.emissiveColor=new d(c,u,h),p.alpha=o?.35+.65*s:w?.06:.18,m.material=p,m.isPickable=!0,m.metadata={hoverLabel:$.get(e.meshId)??e.meshId}}let L=h.Zero(),S=new l("ts-cam",Math.PI/2,Math.PI/2.4,8.5,L,x);S.attachControl(t,!0),(0,c.disableWheelZoom)(S),I.current=S,C.current={target:L,alpha:S.alpha,beta:S.beta,radius:S.radius},new o("ts-light",new h(.3,1,.2),x),v.runRenderLoop(()=>x.render());let q=()=>v.resize();window.addEventListener("resize",q);let E=(0,u.attachMeshHover)(x,t,V),O=(0,c.attachDoubleClickFocus)(x,t,S);B("ready"),a=()=>{window.removeEventListener("resize",q),E(),O(),V(null),I.current=null,C.current=null,x.dispose(),v.dispose()}}catch(e){if(n)return;B("error"),S(e instanceof Error?e.message:"Failed to render flow links.")}})(),()=>{n=!0,a?.()}},[et,ee,N,R,A]),(0,t.jsxs)("div",{className:"relative",children:[(0,t.jsx)("canvas",{ref:$,className:"aspect-video w-full rounded-lg border border-edge bg-ink"}),T?(0,t.jsx)("div",{className:"pointer-events-none absolute z-10 max-w-[16rem] truncate rounded border border-edge bg-ink/90 px-1.5 py-0.5 text-xs text-white shadow backdrop-blur",style:{left:T.x+12,top:T.y+12},children:T.label}):null,"ready"===P?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"absolute left-3 top-3 flex flex-wrap gap-2",children:[J?(0,t.jsxs)("div",{className:"flex items-center gap-1 rounded-md border border-edge bg-ink/80 p-0.5 text-xs backdrop-blur",children:[(0,t.jsx)(f,{active:!et,onClick:()=>F("aggregate"),children:"Aggregate"}),(0,t.jsx)(f,{active:et,onClick:()=>F("twostage"),children:"Two-stage"})]}):null,U?(0,t.jsxs)("div",{className:"flex items-center gap-1 rounded-md border border-edge bg-ink/80 p-0.5 text-xs backdrop-blur",children:[(0,t.jsx)(f,{active:"first-person"===W,onClick:()=>X("first-person"),children:"Walk"}),(0,t.jsx)(f,{active:"viewer"===W,onClick:()=>X("viewer"),disabled:_,title:_?"Orbit (viewer) flow isn't available for walkable scenes":void 0,children:"Orbit"}),(0,t.jsx)(f,{active:"all"===W,onClick:()=>X("all"),children:"All"})]}):null,J?(0,t.jsx)(g,{label:"Standpoint",value:N,onChange:O,allLabel:"All standpoints",options:er}):null,(0,t.jsx)(g,{label:et?"Gaze":"Source",value:R,onChange:E,allLabel:et?"All gaze sectors":"All sources",options:ec}),(0,t.jsx)(g,{label:"Mesh",value:A,onChange:q,allLabel:"All meshes",options:eu})]}),et?(0,t.jsx)(v,{standpoints:G,proxyMeshes:w,selectedKey:N,onSelect:e=>O(t=>t===e?m:e)}):null,(0,t.jsxs)("div",{className:"pointer-events-none absolute bottom-3 right-3 flex max-w-[20rem] flex-col items-end gap-2",children:[U&&!_?(0,t.jsxs)("div",{className:"rounded-md border border-edge bg-ink/80 px-2 py-1 text-xs text-fg-muted backdrop-blur",children:["Orbit-dominated scene — viewer ",(0,t.jsx)("em",{children:"position"})," adds little here. Use the"," ",(0,t.jsx)("strong",{children:"View dome"})," (§7.5) above for where viewers looked."]}):null,(0,t.jsxs)("div",{className:"rounded-md border border-edge bg-ink/80 px-2 py-1 text-xs text-fg backdrop-blur",children:["Active links: ",el,"/",eo]})]}),(0,t.jsx)(d.ZoomButtons,{onZoom:e=>I.current&&(0,c.stepZoom)(I.current,e),onReset:()=>I.current&&C.current&&(0,c.resetFocus)(I.current,C.current)}),(0,t.jsx)(h.HeatLegend,{title:"Flow volume",lowLabel:"fewer links",highLabel:"dominant links",note:et?"Three columns: standpoint → gaze sector → mesh. Top standpoints/meshes are kept; the tail folds into an “Other” node. Pick a standpoint (or click the minimap), gaze sector, or mesh to emphasize matching ribbons.":"Each arc aggregates clicks from one camera-direction bin to a mesh. Pick a source or mesh to emphasize matching links and dim the rest."})]}):(0,t.jsx)("div",{className:"pointer-events-none absolute inset-0 grid place-items-center text-sm text-fg-muted",children:"loading"===P?"Rendering…":"empty"===P?"No aggregate flow links in range.":"error"===P?L??"Flow view unavailable.":null})]})}],19399)},3905,e=>{e.v(t=>Promise.all(["static/chunks/3pdpaqzwhhijn.js","static/chunks/08bm3ye5govev.js","static/chunks/0g6u34xkzrpjn.js","static/chunks/25ctnyh7njp-d.js","static/chunks/2gh4z57fem0_v.js","static/chunks/3vaho-xrtuchd.js","static/chunks/0g7p8zp2kxve5.js"].map(t=>e.l(t))).then(()=>t(66232)))},94432,e=>{e.v(t=>Promise.all(["static/chunks/2kje_jvmwsvwo.js","static/chunks/1j--a56ji33_x.js","static/chunks/3pdpaqzwhhijn.js","static/chunks/2npk7tr63h7rl.js","static/chunks/3vaho-xrtuchd.js","static/chunks/3g_h_00xs9u59.js","static/chunks/1vzmzrjhlm1q5.js","static/chunks/25ctnyh7njp-d.js","static/chunks/1vpcaaf-0dn7q.js"].map(t=>e.l(t))).then(()=>t(92494)))},59694,e=>{e.v(t=>Promise.all(["static/chunks/1j--a56ji33_x.js","static/chunks/0oap0o8a8a_cl.js","static/chunks/0f_nv15a8q415.js","static/chunks/1vzmzrjhlm1q5.js","static/chunks/3pdpaqzwhhijn.js","static/chunks/245h82k-g1nxr.js","static/chunks/3ovd8o_usay7j.js","static/chunks/3vaho-xrtuchd.js","static/chunks/1vpcaaf-0dn7q.js","static/chunks/25ctnyh7njp-d.js","static/chunks/2npk7tr63h7rl.js","static/chunks/3pyggl13glbdc.js"].map(t=>e.l(t))).then(()=>t(67186)))},88004,e=>{e.v(t=>Promise.all(["static/chunks/2p8dbh81chhon.js","static/chunks/1oara6fkfvgs3.js","static/chunks/1vzmzrjhlm1q5.js","static/chunks/25ctnyh7njp-d.js","static/chunks/3pdpaqzwhhijn.js"].map(t=>e.l(t))).then(()=>t(15768)))},27940,e=>{e.v(t=>Promise.all(["static/chunks/0w0sx062qmcsh.js","static/chunks/25ctnyh7njp-d.js","static/chunks/3pdpaqzwhhijn.js"].map(t=>e.l(t))).then(()=>t(23235)))},27124,e=>{e.v(t=>Promise.all(["static/chunks/1par9m038tiov.js","static/chunks/1j--a56ji33_x.js","static/chunks/2j-sax2xfdv7l.js","static/chunks/340pg0qkv5tqq.js","static/chunks/3pdpaqzwhhijn.js","static/chunks/0gwa154w_0wuh.js","static/chunks/0oap0o8a8a_cl.js","static/chunks/0f_nv15a8q415.js","static/chunks/3vaho-xrtuchd.js","static/chunks/3pyggl13glbdc.js","static/chunks/1vzmzrjhlm1q5.js","static/chunks/3g_h_00xs9u59.js","static/chunks/1vpcaaf-0dn7q.js","static/chunks/25ctnyh7njp-d.js","static/chunks/2npk7tr63h7rl.js","static/chunks/01aeari2x_tlz.js"].map(t=>e.l(t))).then(()=>t(70928)))},14074,e=>{e.v(t=>Promise.all(["static/chunks/1zcrrq1fx8g2y.js","static/chunks/1tdg_eolxlcdl.js","static/chunks/1j--a56ji33_x.js","static/chunks/1vzmzrjhlm1q5.js","static/chunks/0vddljjnmozzx.js","static/chunks/3pdpaqzwhhijn.js","static/chunks/1vpcaaf-0dn7q.js","static/chunks/3vaho-xrtuchd.js","static/chunks/0f_nv15a8q415.js","static/chunks/3g_h_00xs9u59.js","static/chunks/2npk7tr63h7rl.js","static/chunks/25ctnyh7njp-d.js"].map(t=>e.l(t))).then(()=>t(87566)))},18561,e=>{e.v(t=>Promise.all(["static/chunks/1j--a56ji33_x.js","static/chunks/1vkww9l6lgqag.js","static/chunks/3pdpaqzwhhijn.js","static/chunks/2npk7tr63h7rl.js","static/chunks/117ys3lltfmcu.js","static/chunks/25ctnyh7njp-d.js","static/chunks/1vzmzrjhlm1q5.js","static/chunks/3g_h_00xs9u59.js","static/chunks/1vpcaaf-0dn7q.js","static/chunks/3vaho-xrtuchd.js"].map(t=>e.l(t))).then(()=>t(85106)))}]);
@@ -6,8 +6,8 @@
6
6
  8:I[1750,["/_next/static/chunks/1ek5rtpo6rxev.js"],"ViewportBoundary"]
7
7
  a:I[1750,["/_next/static/chunks/1ek5rtpo6rxev.js"],"MetadataBoundary"]
8
8
  c:I[19606,["/_next/static/chunks/1ek5rtpo6rxev.js"],"default",1]
9
- :HL["/_next/static/chunks/1vuq3dos1406d.css","style"]
10
- 0:{"P":null,"c":["","_not-found"],"q":"","i":false,"f":[[["",{"children":["/_not-found",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1vuq3dos1406d.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/1ek5rtpo6rxev.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","className":"space_grotesk_59d6dcf5-module__z_Ctiq__variable jetbrains_mono_38c99671-module__5Dhsuq__variable","children":["$","body",null,{"children":["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],null,["$","$L4",null,{"children":["$","$5",null,{"name":"Next.MetadataOutlet","children":"$@6"}]}]]}],{},null,false,null]},null,false,"$@7"]},null,false,null],["$","$1","h",{"children":[["$","meta",null,{"name":"robots","content":"noindex"}],["$","$L8",null,{"children":"$L9"}],["$","div",null,{"hidden":true,"children":["$","$La",null,{"children":["$","$5",null,{"name":"Next.Metadata","children":"$Lb"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$c",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1vuq3dos1406d.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"-UlF345C3V4TG3ZtvR-5_"}
9
+ :HL["/_next/static/chunks/2kw33jl_i9o5j.css","style"]
10
+ 0:{"P":null,"c":["","_not-found"],"q":"","i":false,"f":[[["",{"children":["/_not-found",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/2kw33jl_i9o5j.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/1ek5rtpo6rxev.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","className":"space_grotesk_59d6dcf5-module__z_Ctiq__variable jetbrains_mono_38c99671-module__5Dhsuq__variable","children":["$","body",null,{"children":["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],null,["$","$L4",null,{"children":["$","$5",null,{"name":"Next.MetadataOutlet","children":"$@6"}]}]]}],{},null,false,null]},null,false,"$@7"]},null,false,null],["$","$1","h",{"children":[["$","meta",null,{"name":"robots","content":"noindex"}],["$","$L8",null,{"children":"$L9"}],["$","div",null,{"hidden":true,"children":["$","$La",null,{"children":["$","$5",null,{"name":"Next.Metadata","children":"$Lb"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$c",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/2kw33jl_i9o5j.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"2AsIePMYsPfJoAl46w-g4"}
11
11
  d:[]
12
12
  7:"$Wd"
13
13
  9:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
@@ -3,4 +3,4 @@
3
3
  3:I[1750,["/_next/static/chunks/1ek5rtpo6rxev.js"],"MetadataBoundary"]
4
4
  4:"$Sreact.suspense"
5
5
  5:I[11936,["/_next/static/chunks/1ek5rtpo6rxev.js"],"IconMark"]
6
- 0:{"rsc":["$","$1","h",{"children":[["$","meta",null,{"name":"robots","content":"noindex"}],["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Uptimizr — 3D Scene Analytics"}],["$","meta","1",{"name":"description","content":"Open-source analytics dashboard for 3D scenes."}],["$","link","2",{"rel":"icon","href":"/icon.svg?icon.08h29dad3pcxg.svg","sizes":"any","type":"image/svg+xml"}],["$","$L5","3",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"-UlF345C3V4TG3ZtvR-5_"}
6
+ 0:{"rsc":["$","$1","h",{"children":[["$","meta",null,{"name":"robots","content":"noindex"}],["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Uptimizr — 3D Scene Analytics"}],["$","meta","1",{"name":"description","content":"Open-source analytics dashboard for 3D scenes."}],["$","link","2",{"rel":"icon","href":"/icon.svg?icon.08h29dad3pcxg.svg","sizes":"any","type":"image/svg+xml"}],["$","$L5","3",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"2AsIePMYsPfJoAl46w-g4"}
@@ -1,5 +1,5 @@
1
1
  1:"$Sreact.fragment"
2
2
  2:I[16190,["/_next/static/chunks/1ek5rtpo6rxev.js"],"default"]
3
3
  3:I[62242,["/_next/static/chunks/1ek5rtpo6rxev.js"],"default"]
4
- :HL["/_next/static/chunks/1vuq3dos1406d.css","style"]
5
- 0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1vuq3dos1406d.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/1ek5rtpo6rxev.js","async":true}]],["$","html",null,{"lang":"en","className":"space_grotesk_59d6dcf5-module__z_Ctiq__variable jetbrains_mono_38c99671-module__5Dhsuq__variable","children":["$","body",null,{"children":["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"-UlF345C3V4TG3ZtvR-5_"}
4
+ :HL["/_next/static/chunks/2kw33jl_i9o5j.css","style"]
5
+ 0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/2kw33jl_i9o5j.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/1ek5rtpo6rxev.js","async":true}]],["$","html",null,{"lang":"en","className":"space_grotesk_59d6dcf5-module__z_Ctiq__variable jetbrains_mono_38c99671-module__5Dhsuq__variable","children":["$","body",null,{"children":["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"2AsIePMYsPfJoAl46w-g4"}
@@ -1,5 +1,5 @@
1
1
  1:"$Sreact.fragment"
2
2
  2:I[1750,["/_next/static/chunks/1ek5rtpo6rxev.js"],"OutletBoundary"]
3
3
  3:"$Sreact.suspense"
4
- 0:{"rsc":["$","$1","c",{"children":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],null,["$","$L2",null,{"children":["$","$3",null,{"name":"Next.MetadataOutlet","children":"$@4"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"-UlF345C3V4TG3ZtvR-5_"}
4
+ 0:{"rsc":["$","$1","c",{"children":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],null,["$","$L2",null,{"children":["$","$3",null,{"name":"Next.MetadataOutlet","children":"$@4"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"2AsIePMYsPfJoAl46w-g4"}
5
5
  4:null
@@ -2,4 +2,4 @@
2
2
  2:I[16190,["/_next/static/chunks/1ek5rtpo6rxev.js"],"default"]
3
3
  3:I[62242,["/_next/static/chunks/1ek5rtpo6rxev.js"],"default"]
4
4
  4:[]
5
- 0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"-UlF345C3V4TG3ZtvR-5_"}
5
+ 0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"2AsIePMYsPfJoAl46w-g4"}