1;!function(){try { var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof global?global:"undefined"!=typeof window?window:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&((e._debugIds|| (e._debugIds={}))[n]="1ec4d729-919c-7252-d2b8-1c810926e6db")}catch(e){}}(); 2(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,632974,e=>{"use strict";var t=e.i(895207),r=e.i(849260);let n="inset-x-0",i="inset-y-0",o=[{block:"start",id:"top-left",inline:"start",positionClassName:"left-[var(--guide-x-start)] top-[var(--guide-y-start)]",seed:11},{block:"start",id:"top-right",inline:"end",positionClassName:"left-[var(--guide-x-end)] top-[var(--guide-y-start)]",seed:17},{block:"end",id:"bottom-left",inline:"start",positionClassName:"left-[var(--guide-x-start)] top-[var(--guide-y-end)]",seed:23},{block:"end",id:"bottom-right",inline:"end",positionClassName:"left-[var(--guide-x-end)] top-[var(--guide-y-end)]",seed:29}];function a({className:e,id:r,seed:n}){let i=`guide-cube-noise-${r}`;return(0,t.jsxs)("svg",{"aria-hidden":"true",className:`pointer-events-none absolute z-[5] size-[14.4px] -translate-x-1/2 -translate-y-1/2 ${e} max-lg:hidden`,"data-guide-intersection":r,"data-guide-mask":!0,"data-noise-opacity":.5,"data-opacity":.4,"data-outline":"none","data-size":14.4,viewBox:"0 0 64 66",children:[(0,t.jsx)("defs",{children:(0,t.jsxs)("filter",{id:i,x:"0",y:"0",width:"100%",height:"100%",children:[(0,t.jsx)("feTurbulence",{baseFrequency:"0.22",numOctaves:"3",seed:n,type:"fractalNoise",result:"noise"}),(0,t.jsx)("feColorMatrix",{in:"noise",type:"saturate",values:"0",result:"monochrome"}),(0,t.jsx)("feComposite",{in:"monochrome",in2:"SourceGraphic",operator:"in"})]})}),(0,t.jsx)("path",{className:"fill-background",d:"M32 3 60 19 60 48 32 64 4 48 4 19Z"}),(0,t.jsxs)("g",{opacity:.4,children:[(0,t.jsxs)("g",{shapeRendering:"geometricPrecision",children:[(0,t.jsx)("path",{className:"fill-zinc-200 dark:fill-zinc-600",d:"M32 3 60 19 32 35 4 19Z"}),(0,t.jsx)("path",{className:"fill-zinc-400 dark:fill-zinc-800",d:"M4 19 32 35 32 64 4 48Z"}),(0,t.jsx)("path",{className:"fill-zinc-300 dark:fill-zinc-700",d:"M32 35 60 19 60 48 32 64Z"})]}),(0,t.jsxs)("g",{className:"mix-blend-multiply",filter:`url(#${i})`,opacity:.5,shapeRendering:"geometricPrecision",children:[(0,t.jsx)("path",{d:"M32 3 60 19 32 35 4 19Z"}),(0,t.jsx)("path",{d:"M4 19 32 35 32 64 4 48Z"}),(0,t.jsx)("path",{d:"M32 35 60 19 60 48 32 64Z"})]})]})]})}var u=e.i(310597),l=e.i(420727),s=e.i(242092),c=e.i(178163),d=e.i(95674),d=d,f=e.i(785568),h=e.i(809858);let p=` 3in vec3 aColor; 4in float aShade; 5in float aSeed; 6out vec3 vColor; 7out float vSeed; 8uniform float uSize; 9uniform float uVariance; 10uniform float uDpr; 11uniform float uRefDist; 12uniform vec3 uTint; 13uniform float uUseTint; 14uniform float uShape; 15uniform vec3 uPointer; 16uniform float uPointerActive; 17uniform float uPointerRadius; 18uniform float uPointerStrength; 19uniform float uSwirl; 20 21void main() { 22 vec3 p = position; 23 vSeed = aSeed; 24 25 vec4 world = modelMatrix * vec4(p, 1.0); 26 vec3 pointerDelta = world.xyz - uPointer; 27 float pointerDistance = length(pointerDelta); 28 float pointerInfluence = 29 uPointerActive * (1.0 - smoothstep(0.0, uPointerRadius, pointerDistance)); 30 vec3 radial = pointerDelta / max(pointerDistance, 0.001); 31 vec3 tangent = normalize(vec3(-radial.y, radial.x, radial.z * 0.15) + vec3(0.001)); 32 world.xyz += radial * pointerInfluence * uPointerStrength; 33 world.xyz += tangent * pointerInfluence * uSwirl; 34 vec4 mv = viewMatrix * world; 35 float jitter = 1.0 + uVariance * (fract(aSeed * 7.13) - 0.5) * 1.4; 36 gl_PointSize = clamp( 37 uSize * uDpr * jitter * (uRefDist / max(-mv.z, 0.1)), 0.0, 64.0); 38 vColor = mix(aColor, uTint * aShade, uUseTint); 39 if (uShape > 1.5) { 40 vColor *= 0.92 + fract(aSeed * 5.71) * 0.24; 41 } 42 gl_Position = projectionMatrix * mv; 43}`,m=` 44precision highp float; 45in vec3 vColor; 46in float vSeed; 47out vec4 outColor; 48uniform float uShape; 49 50void main() { 51 vec2 c = gl_PointCoord - 0.5; 52 float alpha; 53 float face = 1.0; 54 if (uShape > 1.5) { 55 vec2 v = c * 2.0; 56 float jig = (fract(vSeed * 7.31) - 0.5) * 0.12; 57 float cs = cos(jig); 58 float sn = sin(jig); 59 v = mat2(cs, -sn, sn, cs) * v * 1.15; 60 float d = max(abs(v.y), max(abs(v.x * 0.8660254 + v.y * 0.5), abs(v.x * 0.8660254 - v.y * 0.5)));
61 alpha = 1.0 - smoothstep(0.86, 0.9, d); 62 if (v.y > abs(v.x) * 0.5773503) face = 1.18; 63 else if (v.x < 0.0) face = 0.88; 64 else face = 0.58; 65 } else if (uShape > 0.5) { 66 float ang = fract(vSeed * 13.73) * 6.2831853; 67 float cs = cos(ang); 68 float sn = sin(ang); 69 vec2 r = mat2(cs, -sn, sn, cs) * c; 70 float d = max(abs(r.x), abs(r.y)); 71 alpha = 1.0 - smoothstep(0.28, 0.34, d); 72 } else { 73 float r2 = dot(c, c); 74 alpha = 1.0 - smoothstep(0.16, 0.25, r2); 75 } 76 if (alpha < 0.08) discard; 77 outColor = vec4(vColor * face, alpha); 78}`,b=Math.round(272.8),x=b-248,v=Math.round(Math.sqrt(2.3*b));function g(e){if(!/^#[\dA-F]{6}$/i.test(e))throw Error(`Particle tint must be a six-digit hex color, received "${e}".`);let t=Number.parseInt(e.slice(1),16);return[(t>>16&255)/255,(t>>8&255)/255,(255&t)/255]}let w=[-1,0,1],y=["x","y","z"],C=[-1,1],k={x:0,y:1,z:2},M=[[1,0,0],[0,1,0],[0,0,1]],R=y.flatMap(e=>w.flatMap(t=>C.map(r=>({axis:e,direction:r,layer:t}))));function j(){return w.flatMap(e=>w.flatMap(t=>w.map(r=>{let n=[e,t,r];return{home:n,id:`${e}:${t}:${r}`,orientation:M,position:n}})))}function S(e,t){if(null===t)return null;let r=e.find(({id:e})=>e===t);if(!r)throw Error(`Hovered Rubik cubie "${t}" does not exist.`);return r.position}function P(e){return"string"==typeof e&&/^(-1|0|1):(-1|0|1):(-1|0|1)$/.test(e)}function T(e,t,r,n){return e.map(e=>E({axis:t,layer:r},e.position)?{...e,orientation:e.orientation.map(e=>$(e,t,n)),position:$(e.position,t,n)}:e)}function E(e,t){return t[k[e.axis]]===e.layer}function A(e,t){let r=F(e);return{axis:r.axis,direction:r.direction,layer:t[r.index]}}function N([e,t,r]){let n=[Math.round(e),Math.round(t),Math.round(r)];return F(n),n}function F(e){let t=e.map((e,t)=>({index:t,value:e})).filter(({value:e})=>0!==e);if(1!==t.length||1!==Math.abs(t[0]?.value??0))throw Error(`Rubik direction must be axial, received ${e.join(",")}.`);let r=t[0];if(!r)throw Error("Rubik axial direction is missing its nonzero component.");return{axis:y[r.index],direction:r.value>0?1:-1,index:r.index}}function $([e,t,r],n,i){return"x"===n?[e,-i*r,i*t]:"y"===n?[i*r,t,-i*e]:[-i*t,i*e,r]}let D=[0,1,2,3,4,5];function z(e){let t=new h.Matrix4().makeBasis(new h.Vector3(...e[0]),new h.Vector3(...e[1]),new h.Vector3(...e[2]));return new h.Quaternion().setFromRotationMatrix(t)}function B(e){return D.filter(t=>q(e,t)).length}function I(e,t,r,n){var i,o,a;let u=X(e.particle,e.home),[l,s,c]=(i=t,o=r,a=n,0===i?[.46,o,a]:1===i?[-.46,o,a]:2===i?[o,.46,a]:3===i?[o,-.46,a]:4===i?[o,a,.46]:[o,a,-.46]),d=W(e,t,r,n)?e.colorsByRole.label:e.colorsByRole.base;e.positions.set([l,s,c],3*e.particle),e.colors.set([d.r,d.g,d.b],3*e.particle),e.shades[e.particle]=1,e.seeds[e.particle]=u,e.particle++}async function V(e,t){let r=await H(e,640),n=document.createElement("canvas");n.width=768,n.height=768;let i=n.getContext("2d");if(!i)throw Error("Canvas 2D is required for the Rubik cube label.");i.fillStyle=t,i.font=r,i.textAlign="center";let o=i.measureText(e),a=function(e,t,r){if(!Number.isFinite(e)||e<=0)throw Error(`Glyph canvas height must be positive, received ${e}.`);if(!Number.isFinite(t)||t<0||!Number.isFinite(r)||r<0)throw Error(`Glyph bounds must be non-negative, received ${t}/${r}.`);if(t+r>e)throw Error(`Glyph height ${t+r} exceeds its ${e}px canvas.`);return(e+t-r)/2}(n.height,o.actualBoundingBoxAscent,o.actualBoundingBoxDescent);return i.textBaseline="alphabetic",i.translate(n.width/2,0),i.scale(.92*n.width/o.width,1),i.fillText(e,0,a),{alpha:function(e,t){let r=e.getImageData(0,0,t.width,t.height).data,n=new Uint8ClampedArray(t.width*t.height);for(let e=0;e<n.length;e++){let t=r[4*e+3];if(void 0===t)throw Error(`Rubik label pixel ${e} has no alpha channel.`);n[e]=t}return n}(i,n),height:n.height,width:n.width}}async function H(e,t){let r=function(e){let t=getComputedStyle(document.documentElement).getPropertyValue("--font-editorial").split(",")[0]?.trim();if(!t)throw Error("PP Editorial New must be loaded before drawing the Rubik label.");return`400 ${e}px ${t}`}(t);if(await document.fonts.load(r,e),!document.fonts.check(r,e))throw Error("PP Editorial New failed to load for the Rubik label.");return r}function _(e,t){return -.42+e/13*.84+(t-.5)*.035}function q(e,t){return 0===t?1===e[0]:1===t?-1===e[0]:2===t?1===e[1]:3===t?-1===e[1]:4===t?1===e[2]:-1===e[2]}function W(e,t,r,n){return 4===t&&null!==e.labelMask&&O(e.home,r,n,e.labelMask)>=32}function L(e,t){return -.42+e/(v-1)*.84+(t-.5)*.022}function O(e,t,r,n){let i=function([e,t,r],n,i,o,a){if(1!==r)return null;if(n<-.5||n>.5||i<-.5||i>
78.5)throw Error(`Rubik sticker coordinates must stay within -0.5 and 0.5, received ${n}, ${i}.`);if(!Number.isInteger(o)||o<1||!Number.isInteger(a)||a<1)throw Error(`Rubik label mask must have positive integer dimensions, received ${o}x${a}.`);let u=Math.round((e+n+1.5)/3*(o-1));return Math.round((1-(t+i+1.5)/3)*(a-1))*o+u}(e,t,r,n.width,n.height);if(null===i)throw Error("Rubik label particles must belong to the front face.");let o=n.alpha[i];if(void 0===o)throw Error(`Rubik label mask index ${i} is out of bounds.`);return o}function U(e){let t=new h.BufferGeometry;return t.setAttribute("position",new h.BufferAttribute(e.positions,3)),t.setAttribute("aColor",new h.BufferAttribute(e.colors,3)),t.setAttribute("aShade",new h.BufferAttribute(e.shades,1)),t.setAttribute("aSeed",new h.BufferAttribute(e.seeds,1)),t}function X(e,[t,r,n]){let i=43758.5453*Math.sin((e+1)*12.9898+(9*t+3*r+n)*78.233);return i-Math.floor(i)}function Y(e){let r,n,i=(0,c.useRef)(null),o=(0,c.useRef)(new Map),a=(0,c.useCallback)((e,t)=>{t?o.current.set(e,t):o.current.delete(e)},[]),{camera:u,gl:l}=(0,f.useThree)(),s=(r=(0,c.useMemo)(()=>({uDpr:{value:1},uPointer:{value:new h.Vector3},uPointerActive:{value:0},uPointerRadius:{value:.72},uPointerStrength:{value:.18},uRefDist:{value:7.86},uShape:{value:0},uSize:{value:1.6416},uSwirl:{value:.06},uTint:{value:new h.Color("#D5B8FF")},uUseTint:{value:0},uVariance:{value:.3}}),[]),n=(0,c.useMemo)(()=>new h.ShaderMaterial({depthTest:!0,depthWrite:!0,fragmentShader:m,glslVersion:h.GLSL3,toneMapped:!1,transparent:!0,uniforms:r,vertexShader:p}),[r]),(0,c.useEffect)(()=>()=>n.dispose(),[n]),n),b=function(e,t){let{camera:r,invalidate:n}=(0,f.useThree)(),i=(0,c.useCallback)((t,n)=>{var i;let o,a;return{cubieId:t,faceNormal:n,screenAxes:(i=function(e){if(!e.current)throw Error("Rubik root must exist before cubie interaction.");return e.current}(e),i.updateWorldMatrix(!0,!1),o=new h.Vector3().applyMatrix4(i.matrixWorld).project(r),{x:(a=e=>{let t=new h.Vector3(...e).applyMatrix4(i.matrixWorld).project(r);return{x:t.x-o.x,y:o.y-t.y}})([1,0,0]),y:a([0,1,0]),z:a([0,0,1])})}},[r,e]);return{clearHover:e=>{e.stopPropagation(),t.onHoverCubie(null),n()},cubieHit:i,handleClick:(e,r)=>t.onClickCubie(i(e,r)),handleHover:(e,r)=>{t.onHoverCubie(i(e,r)),n()},handlePointerDown:(e,r,n,o)=>t.onPointerDownCubie(i(e,r),o)}}(i,e);return function({camera:e,cubieHit:t,cubies:r,gl:n,onHitTestReady:i,root:o}){let a=(0,c.useMemo)(()=>new h.Vector2,[]),u=(0,c.useMemo)(()=>new h.Raycaster,[]),l=(0,c.useCallback)((i,l)=>{if(!o.current)return null;let s=n.domElement.getBoundingClientRect();a.set((i-s.left)/s.width*2-1,-(2*((l-s.top)/s.height))+1),u.setFromCamera(a,e);let c=u.intersectObject(o.current,!0).find(K);if(!c)return null;if(!c.face)throw Error("Rubik touch raycast must intersect a face.");let d=c.object.userData.rubiksCubieId;if(!P(d))throw Error("Rubik touch raycast has an invalid cubie ID.");let f=r.find(({id:e})=>e===d);if(!f)throw Error(`Touch raycast Rubik cubie "${d}" does not exist.`);let h=c.face.normal.clone().applyQuaternion(z(f.orientation));return t(f.id,N([h.x,h.y,h.z]))},[e,t,r,n,a,u,o]);(0,c.useEffect)(()=>(i(l),()=>i(null)),[i,l])}({camera:u,cubieHit:b.cubieHit,cubies:e.cubies,gl:l,onHitTestReady:e.onHitTestReady,root:i}),function({cubieGroups:e,material:t,props:r,root:n}){let i=(0,c.useRef)(0),o=(0,c.useRef)(!1),a=(0,c.useRef)(0),u=(0,c.useMemo)(()=>new h.Vector3,[]),l=(0,c.useMemo)(()=>new h.Plane,[]),s=(0,c.useMemo)(()=>new h.Vector3,[]),f=(0,c.useMemo)(()=>new h.Vector3,[]),p=(0,c.useMemo)(()=>({axis:new h.Vector3,basisX:new h.Vector3,basisY:new h.Vector3,basisZ:new h.Vector3,matrix:new h.Matrix4,quaternion:new h.Quaternion}),[]);(0,c.useEffect)(()=>{i.current=0,o.current=!1},[r.activeTurn]),(0,d.D)((c,d)=>{(function({delta:e,material:t,pointerActive:r,pointerForce:n,state:i,vectors:o}){let a=t.uniforms;J(a,"uDpr").value=i.gl.getPixelRatio();let u=i.gl.domElement.ownerDocument.defaultView?.innerWidth;if(!u)throw Error("Rubik particle sizing requires a browser viewport.");if(J(a,"uSize").value=function(e){if(!Number.isFinite(e)||e<=0)throw Error(`Rubik particle sizing requires a positive viewport, received ${e}.`);
78return 1.2+.4416*Math.max(0,Math.min(1,(e-390)/634))}(u),n.current=h.MathUtils.damp(n.current,+!!r,r?6:5,e),J(a,"uPointerActive").value=n.current,!r)return;i.raycaster.setFromCamera(i.pointer,i.camera),i.camera.getWorldDirection(o.cameraDirection),o.pointerPlane.setFromNormalAndCoplanarPoint(o.cameraDirection,o.sceneCenter);let l=i.raycaster.ray.intersectPlane(o.pointerPlane,o.pointerWorld);l&&J(a,"uPointer").value.copy(l)})({delta:d,material:t,pointerActive:r.pointerActive,pointerForce:a,state:c,vectors:{cameraDirection:u,pointerPlane:l,pointerWorld:s,sceneCenter:f}}),n.current&&n.current.rotation.set(r.orbit.pitch,r.orbit.yaw,.08),function({activeTurn:e,pointerActive:t,pointerForce:r}){return null!==e||Math.abs(r-!!t)>.001}({activeTurn:r.activeTurn,pointerActive:r.pointerActive,pointerForce:a.current})&&c.invalidate(),!r.activeTurn||o.current||(i.current=Math.min(1,i.current+d/r.turnDurationSeconds),function({angle:e,cubies:t,groups:r,turn:n,vectors:i}){for(let o of(i.axis.set(+("x"===n.axis),+("y"===n.axis),+("z"===n.axis)),i.quaternion.setFromAxisAngle(i.axis,n.direction*e),t)){if(!E(n,o.position))continue;let e=r.get(o.id);e&&(e.position.set(...o.position).applyQuaternion(i.quaternion),i.matrix.makeBasis(i.basisX.set(...o.orientation[0]),i.basisY.set(...o.orientation[1]),i.basisZ.set(...o.orientation[2])),e.quaternion.setFromRotationMatrix(i.matrix).premultiply(i.quaternion))}}({angle:Math.PI/2*(1-Math.pow(1-i.current,3)),cubies:r.cubies,groups:e.current,turn:r.activeTurn,vectors:p}),i.current<1||(o.current=!0,r.onTurnComplete(r.activeTurn)))})}({cubieGroups:o,material:s,props:e,root:i}),(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("mesh",{position:[0,0,-5],onPointerMove:b.clearHover,children:[(0,t.jsx)("planeGeometry",{args:[100,100]}),(0,t.jsx)("meshBasicMaterial",{colorWrite:!1,depthWrite:!1,opacity:0,transparent:!0})]}),(0,t.jsx)("group",{ref:i,children:(0,t.jsx)(Z,{callbacks:b,material:s,props:e,registerCubie:a})})]})}function G({callbacks:e,cubie:r,highlighted:n,labelColor:i,labelMask:o,material:a,particleColor:u,registerCubie:l}){var s,d,f;let p,m,w=(0,c.useMemo)(()=>z(r.orientation),[r.orientation]),y=(0,c.useCallback)(e=>l(r.id,e),[r.id,l]),C=(s=r,d=w,f=e,p=e=>{if(!e.face)throw Error("Rubik hitbox hover must intersect a face.");let t=e.face.normal.clone().applyQuaternion(d);return N([t.x,t.y,t.z])},{onClick:e=>{e.stopPropagation(),e.delta<=8&&f.handleClick(s.id,p(e),e.camera)},onPointerDown:e=>{e.stopPropagation(),f.handlePointerDown(s.id,p(e),e.camera,e.nativeEvent)},onPointerMove:m=e=>{e.stopPropagation(),f.handleHover(s.id,p(e),e.camera)},onPointerOver:m}),k=(0,c.useCallback)(()=>{J(a.uniforms,"uUseTint").value=+!!n},[n,a]),M=(0,c.useMemo)(()=>(function(e,t,r){var n,i,o;let a,u=(n=e,i=t,o=r,{colors:new Float32Array(3*(a=B(n)*b)),colorsByRole:{base:new h.Color().fromArray(g(i.base)),label:new h.Color().fromArray(g(i.label))},home:n,labelMask:o,particle:0,positions:new Float32Array(3*a),seeds:new Float32Array(a),shades:new Float32Array(a)});for(let t of D)q(e,t)&&(function(e,t){for(let r=0;r<14;r++)for(let n=0;n<14;n++){let i=_(n,X(e.particle,e.home)),o=_(r,X(e.particle+137,e.home));I(e,t,i,o)}}(u,t),function(e,t){for(let r=0;r<52;r++)I(e,t,...function(e){if(!Number.isInteger(e)||e<0||e>=52)throw Error(`Rubik frame particle index is out of bounds: ${e}.`);let t=Math.floor(e/13),r=-.42+(e%13+.5)/13*.84;return 0===t?[r,-.42]:1===t?[.42,r]:2===t?[r,.42]:[-.42,r]}(r))}(u,t),function(e,t){let r=0;for(let n=0;r<x;n++){if(n===16*x)throw Error("Rubik face could not place its purple density particles.");let i=e.particle+n,o=-.42+.84*X(i+317,e.home),a=-.42+.84*X(i+613,e.home);!W(e,t,o,a)&&(I(e,t,o,a),r++)}}(u,t));let l=B(e)*b;if(u.particle!==l)throw Error(`Rubik cubie generated ${u.particle} particles, expected ${l}.`);return U(u)})(r.home,{base:u,label:i},o),[r.home,i,o,u]),R=(0,c.useMemo)(()=>o?function(e,t,r){if(1!==e[2])return null;let n=[],i=[];for(let t=0;t<v;t++)for(let o=0;o<v;o++){let a=t*v+o,u=X(a+4096,e),l=L(o,u),s=L(t,X(a+8231,e));32>O(e,l,s,r)||(n.push(l,s,.461),i.push(u))}return 0===i.length?null:function(e,t,r){let n=g(r),i=new Float32Array(3*t.length),o=new Float32Array(t.length);for(let e=0;e<t.length;e++)i.set(n,3*e),o[e]=1;return U({colors:i,positions:new Float32Array(e),seeds:new Float32Array(t),shades:o})}(n,i,t)}(r.home,i,o):null,[r.home,i,o]);return(0,c.useEffect)(()=>()=>M.dispose(),[M]),(0,c.useEffect)(()=>()=>R?.dispose(),[R]),(0,t.jsxs)("group",{ref:y,position:r.position,quaternion:w,children:[B(r.home)>0?(0,t.jsx)(Q,{cubieId:r.id,...C}):null,(0,t.jsx)("points",{geometry:M,onBeforeRender:k,children:(0,t.jsx)("primitive",{object:a,attach:"material"})}),R?(0,t.jsx)("points",{geometry:R,onBeforeRender:k,children:(0,t.jsx)("primitive",{object:a,attach:"material"})}):null]})}function Q({cubieId:e,...r}){return(0,t.jsxs)("mesh",{userData:{rubiksCubieId:e},...r,children:[(0,t.jsx)("boxGeometry",{args:[.98,.98,.98]}),(0,t.jsx)("meshBasicMaterial",{colorWrite:!1,depthWrite:!1,opacity:0,transparent:!0})]})}function Z({callbacks:e,material:r,props:n,registerCubie:i}
78){return n.cubies.map(o=>(0,t.jsx)(G,{callbacks:e,cubie:o,highlighted:null!==n.hoveredSlice&&E(n.hoveredSlice,o.position),labelColor:n.labelColor,labelMask:n.labelMask,material:r,particleColor:n.particleColor,registerCubie:i},o.id))}function K({object:e}){return P(e.userData.rubiksCubieId)}function J(e,t){let r=e[t];if(!r)throw Error(`Rubik particle shader is missing the ${t} uniform.`);return r}let ee={pitch:-.42,yaw:.66};function et({code:e,theme:r}){let{resolvedTheme:n}=(0,s.useTheme)(),i=(0,l.useReducedMotion)(),o=function(){let[e,t]=(0,c.useState)(void 0);return(0,c.useEffect)(()=>{let e=window.matchMedia("(max-width: 767px)"),r=()=>{t(window.innerWidth<768)};return e.addEventListener("change",r),t(window.innerWidth<768),()=>e.removeEventListener("change",r)},[]),!!e}(),a=r??n,u="dark"===a?"#D2BEFF":"#CEABFF",d="dark"===a?"#FFFFFF":"#0F0F0F",f=function(e,t){let[r,n]=(0,c.useState)(null);return(0,c.useEffect)(()=>{let r=!0;return V(e,t).then(e=>{r&&n(e)}),()=>{r=!1}},[t,e]),r}(e,d),p=function({reduceMotion:e}){var t,r,n,i,o,a,u,l,s,d,f,p,m,b,x;let v,g,w,C,M,P,E=(0,c.useRef)(null),N=(0,c.useRef)(null),$=function(){let[e,t]=(0,c.useState)(null),r=(0,c.useRef)(null),n=(0,c.useRef)(null),i=(0,c.useCallback)(e=>{r.current=e,t(e?`${e.cubieId}@${e.faceNormal.join(":")}`:null)},[]),o=(0,c.useCallback)(e=>{n.current=e},[]);return{hit:r,hitTest:n,setHitTest:o,targetKey:e,update:i}}(),D=(t=e,r=$.update,v=function(){let[e,t]=(0,c.useState)(j),[r,n]=(0,c.useState)(null),[i,o]=(0,c.useState)(!1),[a,u]=(0,c.useState)(0),[l,s]=(0,c.useState)(0),[d,f]=(0,c.useState)(0);return{activeTurn:r,cubies:e,setActiveTurn:n,setCubies:t,setShuffleAnimating:o,setShuffleCount:u,setShuffleStep:s,setTurnCount:f,shuffleAnimating:i,shuffleCount:a,shuffleQueue:(0,c.useRef)([]),shuffleStep:l,turnCount:d}}(),g=(0,c.useRef)(!1),w=(n=v,(0,c.useCallback)(e=>{n.setCubies(t=>T(t,e.axis,e.layer,e.direction)),n.setTurnCount(e=>e+1);let[t,...r]=n.shuffleQueue.current;if(n.shuffleQueue.current=r,t){n.setShuffleStep(e=>e+1),n.setActiveTurn(t);return}n.setShuffleAnimating(!1),n.setActiveTurn(null)},[n])),C=(i=v.activeTurn,o=w,a=t,u=r,l=v,(0,c.useCallback)(e=>{if(!i){if(u(null),a)return void o(e);l.setActiveTurn(e)}},[i,o,a,l,u])),M=(s=g,d=t,f=v,p=r,(0,c.useCallback)(()=>{if(s.current)return!1;s.current=!0,f.setShuffleCount(1),p(null);let e=function(e=Math.random){let t=[];for(;t.length<7;){let r=t.at(-1),n=r?R.filter(({axis:e,layer:t})=>e!==r.axis||t!==r.layer):R,i=e();if(!Number.isFinite(i)||i<0||i>=1)throw Error(`Rubik shuffle random sample must be in [0, 1), received ${i}.`);let o=n[Math.floor(i*n.length)];if(!o)throw Error("Rubik shuffle must select a valid turn.");t.push(o)}return t}();if(d)return f.setCubies(t=>e.reduce((e,{axis:t,direction:r,layer:n})=>T(e,t,n,r),t)),f.setShuffleStep(e.length),f.setTurnCount(t=>t+e.length),!0;let[t,...r]=e;if(!t)throw Error("The first-click Rubik shuffle must contain a turn.");return f.shuffleQueue.current=r,f.setShuffleAnimating(!0),f.setShuffleStep(1),f.setActiveTurn(t),!0},[s,d,f,p])),{activeTurn:v.activeTurn,completeTurn:w,cubies:v.cubies,didShuffle:g,requestTurn:C,shuffleAnimating:v.shuffleAnimating,shuffleCount:v.shuffleCount,shuffleOnce:M,shuffleStep:v.shuffleStep,turnCount:v.turnCount}),z=function({dragStart:e,hover:t,stageRef:r,turns:n}){var i;return{begin:(0,c.useCallback)((i,o)=>{if(n.activeTurn)return;let a=r.current;if(!a)throw Error("Rubik stage must exist before cubie interaction.");if(a.setPointerCapture(o.pointerId),t.update(i),n.shuffleOnce()){e.current=null;return}let u=S(n.cubies,i.cubieId);if(!u)throw Error("Raycast Rubik cubie must have a grid position.");let l=a.getBoundingClientRect();e.current={...i,interaction:"slice",position:u,x:o.clientX-l.left,y:o.clientY-l.top}},[e,t,r,n]),turnFromTap:(i=n,(0,c.useCallback)(e=>{if(i.activeTurn||!i.didShuffle.current)return;let t=S(i.cubies,e.cubieId);if(!t)throw Error("Tapped Rubik cubie must have a grid position.");i.requestTurn(A(e.faceNormal,t))},[i]))}}({dragStart:N,hover:$,stageRef:E,turns:D}),B=function(e,t,r,n){var i,o,a,u,l,s,d,f;let[p,m]=(0,c.useState)(ee),[b,x]=(0,c.useState)(!1);return{onPointerDown:(i=e,o=t,a=r,u=n,l=p,(0,c.useCallback)(e=>{if(u.activeTurn)return;let t=e.currentTarget.getBoundingClientRect();(e.currentTarget.setPointerCapture(e.pointerId),o.hit.current)?a.begin(o.hit.current,e):i.current={interaction:"orbit",pitch:l.pitch,x:e.clientX-t.left,y:e.clientY-t.top,yaw:l.yaw}},[i,o,l,a,u.activeTurn])),onPointerMove:(s=e,d=x,f=m,(0,c.useCallback)(e=>{let t=e.currentTarget.getBoundingClientRect(),r=e.clientX-t.left,n=e.clientY-t.top;
78d("slice"===function({height:e,width:t,x:r,y:n}){let i=.1568627450980392*t,o=.1568627450980392*e;return r>=i&&r<=t-i&&n>=o&&n<=e-o?"slice":"orbit"}({height:t.height,width:t.width,x:r,y:n}));let i=s.current;i&&"orbit"===i.interaction&&f({pitch:h.MathUtils.clamp(i.pitch+(n-i.y)*.008,-1.2,1.2),yaw:i.yaw+(r-i.x)*.008})},[s,f,d])),pointerActive:b,setPointerActive:x,value:p}}(N,$,z,D),I=function({dragStart:e,hover:t,orbit:r,turns:n}){var i,o;let a=(i=e,o=n.requestTurn,(0,c.useCallback)(e=>{let t=i.current;if(i.current=null,!t||"orbit"===t.interaction)return;let r=e.currentTarget.getBoundingClientRect();o(function({endX:e,endY:t,faceNormal:r,screenAxes:n,startPosition:i,startX:o,startY:a}){let u=e-o,l=t-a;if(8>Math.hypot(u,l))return A(r,i);let s=F(r),c=y.filter(e=>e!==s.axis).map(e=>{let t=n[e],r=Math.hypot(t.x,t.y);if(!Number.isFinite(r)||0===r)throw Error(`Rubik ${e}-axis has no finite screen projection.`);return{axis:e,dot:(t.x*u+t.y*l)/r}}).sort((e,t)=>Math.abs(t.dot)-Math.abs(e.dot))[0];if(!c)throw Error("Rubik drag requires a tangent screen axis.");let d=[0,0,0];d[k[c.axis]]=c.dot>=0?1:-1;let f=F(function([e,t,r],[n,i,o]){return[t*o-r*i,r*n-e*o,e*i-t*n]}(r,d));return{axis:f.axis,direction:f.direction,layer:i[f.index]}}({endX:e.clientX-r.left,endY:e.clientY-r.top,faceNormal:t.faceNormal,screenAxes:t.screenAxes,startPosition:t.position,startX:t.x,startY:t.y}))},[i,o]));return{onKeyDown:e=>{var t;let r="Enter"===(t=e.key)||" "===t?{axis:"z",direction:1,layer:1}:"ArrowLeft"===t?{axis:"y",direction:-1,layer:0}:"ArrowRight"===t?{axis:"y",direction:1,layer:0}:"ArrowUp"===t?{axis:"x",direction:-1,layer:0}:"ArrowDown"===t?{axis:"x",direction:1,layer:0}:null;r&&(e.preventDefault(),n.requestTurn(r))},onPointerCancel:()=>{e.current=null,t.update(null)},onPointerDown:r.onPointerDown,onPointerLeave:()=>{t.update(null),r.setPointerActive(!1)},onPointerMove:r.onPointerMove,onPointerUp:a}}({dragStart:N,hover:$,orbit:B,turns:D}),V=(m=$,b=z,x=D,P=(0,c.useRef)(!1),{onClick:e=>{if(P.current){P.current=!1;return}if(x.shuffleOnce())return;let t=m.hitTest.current?.(e.clientX,e.clientY);t&&b.turnFromTap(t)},onPointerCancel:()=>{P.current=!1},onPointerDown:e=>{if(P.current=!0,e.currentTarget.setPointerCapture(e.pointerId),x.shuffleOnce())return void e.stopPropagation();let t=m.hitTest.current?.(e.clientX,e.clientY);t&&b.begin(t,e)}}),H=$.targetKey?$.hit.current:null,_=S(D.cubies,H?.cubieId??null);return{hoveredSlice:H&&_?A(H.faceNormal,_):null,orbit:B.value,pointerActive:B.pointerActive,scene:{...D,...z,onHitTestReady:$.setHitTest,onHoverCubie:$.update},stageHandlers:I,stageRef:E,touchHandlers:V}}({reduceMotion:i}),m={activeTurn:p.scene.activeTurn,cubies:p.scene.cubies,hoveredSlice:p.hoveredSlice,labelColor:d,labelMask:f,onClickCubie:p.scene.turnFromTap,onHitTestReady:p.scene.onHitTestReady,onHoverCubie:p.scene.onHoverCubie,onPointerDownCubie:p.scene.begin,onTurnComplete:p.scene.completeTurn,orbit:p.orbit,particleColor:u,pointerActive:p.pointerActive,turnDurationSeconds:p.scene.shuffleAnimating?.085:.22};return(0,t.jsx)(er,{code:e,controller:p,isMobile:o,particleColor:u,scene:m})}function er({code:e,controller:r,isMobile:n,particleColor:i,scene:o}){return(0,t.jsx)("div",{className:"relative isolate flex w-full min-w-0 items-center justify-center",children:(0,t.jsxs)("div",{ref:r.stageRef,role:"group",tabIndex:0,"aria-label":`Interactive Rubik-style ${e} cube. Click the cube once to shuffle it, then drag the cube to turn a slice. Drag around the cube to orbit it.`,"data-rubiks-stage":!0,"data-shuffle-animating":r.scene.shuffleAnimating?"true":"false","data-shuffle-count":r.scene.shuffleCount,"data-turn-count":r.scene.turnCount,"data-turning":r.scene.activeTurn?"true":"false",className:"relative isolate z-10 aspect-square w-[510px] max-w-full cursor-grab touch-none rounded-[28px] transition-shadow duration-150 ease-out outline-none select-none focus-visible:shadow-[0_0_0_3px_var(--primary-border)] active:cursor-grabbing",...r.stageHandlers,children:[(0,t.jsx)(eo,{particleColor:i}),(0,t.jsx)(en,{code:e,handlers:r.touchHandlers}),(0,t.jsx)(ei,{isMobile:n,scene:o})]})})}function en({code:e,handlers:r}){return(0,t.jsx)("button",{type:"button","aria-label":`Interact with ${e} cube`,className:"absolute top-1/2 left-1/2 z-20 size-[70%] -translate-x-1/2 -translate-y-1/2 touch-none bg-transparent md:hidden",...r})}function ei({isMobile:e,scene:r}){return(0,t.jsx)("div",{className:"absolute z-10 motion-safe:animate-[rubiksFloat_9s_ease-in-out_infinite] motion-safe:will-change-transform max-md:inset-[
7813.3333%] md:inset-10",children:(0,t.jsx)(u.Canvas,{camera:{far:100,fov:42,near:.1,position:[0,0,7.86]},dpr:e?1:1.5,frameloop:"demand",gl:{alpha:!0,antialias:!1,powerPreference:"low-power"},onCreated:({invalidate:e})=>e(),children:(0,t.jsx)(Y,{...r})})})}function eo({particleColor:e}){return(0,t.jsx)("div",{"aria-hidden":"true","data-dither-anchor":"cube-stage",className:"opacity-30 pointer-events-none absolute top-1/2 left-1/2 z-0 size-[92%] -translate-x-1/2 -translate-y-1/2 [mask-image:radial-gradient(circle_at_center,black_0%,black_44%,transparent_74%)] lg:size-[122%]",children:(0,t.jsx)("div",{className:"absolute inset-0 bg-[radial-gradient(circle,var(--rubiks-dither-color)_0_1px,transparent_1.4px)] bg-[length:6px_6px]",style:{"--rubiks-dither-color":e}})})}let ea={"--guide-x-end":`${Math.round(94)}%`,"--guide-x-start":`${Math.round(6)}%`,"--guide-y-end":`${Math.round(86)}%`,"--guide-y-start":`${Math.round(14.000000000000002)}%`};function eu({children:e,code:r,theme:n}){return(0,t.jsxs)("main",{className:"bg-background text-text fixed inset-0 isolate z-[100] min-h-dvh overflow-y-auto",style:ea,children:[(0,t.jsx)(es,{}),(0,t.jsxs)("div",{className:"relative z-10 mx-auto grid min-h-dvh w-full max-w-[1536px] items-center gap-8 px-8 py-24 md:grid-cols-[minmax(0,1fr)_minmax(320px,510px)] lg:px-[calc(var(--guide-x-start)+4rem)]",children:[e,(0,t.jsx)(et,{code:r,...n?{theme:n}:{}})]})]})}function el({actions:e,description:r,title:n}){return(0,t.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,t.jsx)("h1",{className:"text-[clamp(2rem,3vw,2.5rem)] leading-tight font-semibold tracking-tight text-balance",children:n}),(0,t.jsx)("p",{className:"text-text-muted max-w-2xl text-lg leading-relaxed text-pretty md:text-xl",children:r}),(0,t.jsx)("div",{className:"flex flex-col items-start gap-3 sm:flex-row sm:flex-wrap",children:e.map(({href:e,label:r})=>(0,t.jsx)("a",{href:e,className:"border-border text-text-muted hover:bg-surface hover:text-text inline-flex h-10 w-fit items-center justify-center border bg-transparent px-4 text-sm font-medium transition-colors active:scale-[0.96]",children:r},e))})]})}function es(){return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{"aria-hidden":"true",className:`border-border pointer-events-none absolute top-[var(--guide-y-start)] border-t border-dashed ${n}`}),(0,t.jsx)("div",{"aria-hidden":"true",className:`border-border pointer-events-none absolute top-[var(--guide-y-end)] border-t border-dashed ${n}`}),(0,t.jsx)("div",{"aria-hidden":"true",className:`border-border pointer-events-none absolute left-[var(--guide-x-start)] hidden border-l border-dashed lg:block ${i}`}),(0,t.jsx)("div",{"aria-hidden":"true",className:`border-border pointer-events-none absolute left-[var(--guide-x-end)] hidden border-l border-dashed lg:block ${i}`}),o.map(({id:e,positionClassName:r,seed:n})=>(0,t.jsx)(a,{className:r,id:e,seed:n},e))]})}e.s(["RubiksErrorContent",0,el,"RubiksErrorLayout",0,eu,"RubiksErrorPage",0,function({code:e,theme:n}){let i=(0,r.usePathname)();return(0,t.jsx)(eu,{code:e,...n?{theme:n}:{},children:(0,t.jsx)(el,{actions:[{href:"/",label:"Go home"}],description:(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("span",{className:"text-primary font-semibold break-all",children:i})," does not exist or may have been moved."]}),title:"Page not found"})})}],632974)},420727,e=>{"use strict";var t=e.i(420460),r=e.i(634907),n=e.i(178163);e.s(["useReducedMotion",0,function(){t.hasReducedMotionListener.current||(0,r.initPrefersReducedMotion)();let[e]=(0,n.useState)(t.prefersReducedMotion.current);return e}])},634907,420460,e=>{"use strict";let t={current:null},r={current:!1};e.s(["hasReducedMotionListener",0,r,"prefersReducedMotion",0,t],420460);let n="u">typeof window;e.s(["initPrefersReducedMotion",0,function(){if(r.current=!0,n)if(window.matchMedia){let e=window.matchMedia("(prefers-reduced-motion)"),r=()=>t.current=e.matches;e.addEventListener("change",r),r()}else t.current=!1}],634907)},107983,(e,t,r)=>{"use strict";var n=e.r(178163),i="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},o=n.useState,a=n.useEffect,u=n.useLayoutEffect,l=n.useDebugValue;function s(e){var t=e.getSnapshot;e=e.value;try{var r=t();return!i(e,r)}catch(e){return!0}}var c="u"<typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(e,t){var r=t(),n=o({inst:{value:r,getSnapshot:t}}),i=n[0].inst,c=n[1];return u(function(){i.value=r,i.getSnapshot=t,s(i)&&c({inst:i})},[e,r,t]),a(function(){return s(i)&&c({inst:i}),e(function(){s(i)&&c({inst:i})})},[e]),l(r),r};r.useSyncExternalStore=void 0!==n.useSyncExternalStore?n.useSyncExternalStore:c},33347,(e,t,r)=>{"use strict";
78t.exports=e.r(107983)}]); 79 80//# debugId=1ec4d729-919c-7252-d2b8-1c810926e6db
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.