HEX
Server: Apache/2.4.58 (Ubuntu)
System: Linux bsx-1-dev 6.8.0-101-generic #101-Ubuntu SMP PREEMPT_DYNAMIC Mon Feb 9 10:15:05 UTC 2026 x86_64
User: www-data (33)
PHP: 8.3.6
Disabled: NONE
Upload Files
File: /var/www/html/wp-content/plugins/revslider-hovermorph-addon/public/js/hovermorph.min.js
/**
 * @preserve
 * @author    ThemePunch <info@themepunch.com>
 * @link      http://www.themepunch.com/
 * @copyright 2018 ThemePunch
 * @version   6.7.2
 */
!function(){"use strict";if(window.SR7??={},window._tpt??={},SR7.A??={},SR7.F??={},SR7.D??={},void 0!==(SR7.A.hovermorph?.init??void 0))return;SR7.A.hovermorph={...SR7.A.hovermorph,init:e=>{let t=SR7.A.hovermorph;void 0===SR7.A.hovermorphcss&&(_tpt.injectCssJs(t.style,void 0,void 0,"hovermorph_global_styles"),SR7.A.hovermorphcss=!0),SR7.M[e].c.moduleListeners??={},SR7.M[e].c.moduleListeners.hovermorph??={},t.defCursor=SR7.M[e].c.module.style.cursor,_tpt.scrollObserver.observe(SR7.M[e].c.module),SR7.F.module.listeners.init(e),t.listeners.init(e);const o=["THREE","WEBGL"];return null==t.burst&&o.push("pw_Burst"),null==t.updateShader&&o.push("hm_Shaders"),o},getModuleBasics:(e={},t)=>({u:"compare"==t?void 0:e.u??e.enable??!0}),getLayerBasics:(e={},t)=>{let o="migrate"==t,s={parbackground:e.parbackground??"default",adjustBrightness:e.adjustBrightness??50,imgScale:e.imgScale??50,imgFit:e.imgFit??"contain",imgPos:e.imgPos??"center center",imageColor:e.imageColor??(o?_tpt.gradient.convert(e.imageColor??"#ffffff",!0):"#ffffff"),imageHoverColor:e.imageHoverColor??"#ffffff",useRainbow:e.useRainbow??!1,imgColorOpt:e.imgColorOpt??1,shapeChooser:e.shapeChooser??1,shapeSelector:e.shapeSelector??3,shapeFill:e.shapeFill??!0,shapeBorderSize:e.shapeBorderSize??20,shapeSize:e.shapeSize??50,shapeXPos:e.shapeXPos??50,shapeYPos:e.shapeYPos??25,shapeZPos:e.shapeZPos??90,textInput:e.textInput??"ThemePunch",textFont:e.textFont??"Roboto",textFontWeight:e.textFontWeight??"300",textFontSize:e.textFontSize??200,interactionRadius:e.interactionRadius??80,interIntens:e.interIntens??50,dpr:e.dpr??1};return"migrate"==t&&SR7.D.collectModulFont({family:s.textFont,weight:[s.textFontWeight,s.textFontWeight,s.textFontWeight,s.textFontWeight,s.textFontWeight]},t),s},prepareLayer:async(e,o,s)=>{if("hovermorph"===o.subtype){var{c:r}=SR7.F.getLayer(s);return new Promise((e=>{r.addOns??={},r.addOns.hovermorph??={},r.addOns.hovermorph.canvas=SR7.WEBGL.getCanvas(),o.addOns.hovermorph=SR7.A.hovermorph.getLayerBasics(o.addOns.hovermorph,"normalize"),t(o.addOns.hovermorph).then((t=>{r.addOns.hovermorph.settings=t,r.addOns.hovermorph.prepared=!0,r.el.appendChild(r.addOns.hovermorph.canvas.canvas),e()})).catch((t=>{console.log(t),e()}))}))}},toggle:(e,t)=>{let o=SR7.A.hovermorph;const s=SR7.M[e];if(o.onFire)for(let t in o.onFire[e])_tpt.hop(o.onFire[e],t)&&(s.states.inViewPort?o.play(e,s.c.layers[t]):o.pause(e,s.c.layers[t],!1))},play:(e,t)=>{let o=SR7.A.hovermorph;o.onFire??={},o.onFire[e]??={},o.onFire[e][t.el.id]=!0,t.addOns.hovermorph.paused&&o.hmorph.render(t),o.hmorph.resize(t,t.cw,t.ch),o.fitCameraToObject(t),o.hmorph.render(t)},pause:(e,t,o)=>{let s=SR7.A.hovermorph;t.addOns.hovermorph.paused=!0,t.addOns.hovermorph.frame=cancelAnimationFrame(t.addOns.hovermorph.frame),o&&s?.onFire?.[e]?.[t.el.id]&&delete s.onFire[e][t.el.id]},listeners:{init:e=>{let t=SR7.A.hovermorph;t.listenersAdded?.[e]||(t.onFire??={},t.onFire[e]??={},t.listenersAdded||document.addEventListener("sr.layer.action",(function(e){""+(e.layersettings?.addOns?.hovermorph??!1)!="false"&&("enterstage"==e.eventtype?(e.c.addOns?.hovermorph?.built||(SR7.A.hovermorph.hmorph.build(e.c),e.c.addOns.hovermorph.built=!0),t.play(e.id,e.c)):"leavestage"==e.eventtype&&t.pause(e.id,e.c,!0))})),t.mouseMove=t.mouseMove??SR7.F.module.listeners.reg(e,"mousemove",((e,o)=>t.listeners.mouse.module.move(e,o))),t.listenersAdded??={},t.listenersAdded[e]=!0)},mouse:{module:{move:(e,t)=>{SR7.A.hovermorph.listeners.mouse.module.default(e,t,"move")},default:(e,t,o)=>{const s=SR7.M[e];s.c.addOns??={},s.c.addOns.hovermorph??={},s.c.addOns.hovermorph.mouse??={};const r=s.c.addOns.hovermorph;for(var e in r.mouse.type=o,SR7.M){const s=SR7.M[e];if(s.states.inViewPort)for(var a in s.c.layers){if(!s.c.layers[a].addOns?.hovermorph)continue;s.c.layers[a].addOns.hovermorph;let e=t.clientX/s.dims.module.w*s.c.layers[a].cw,r=t.clientY/s.dims.module.h*s.c.layers[a].ch;SR7.A.hovermorph.listeners.mouse[o]({layerX:e,layerY:r,clientX:e,clientY:r},s.c.layers[a],!0)}}}},move:(e,t,o)=>{let s=t.addOns.hovermorph,r=(new Date).getTime();try{if(null==s.settings)return;null==s.settings?.mouseData?.lastMouseMoveUpdateTime&&(s.settings.mouseData??={},s.settings.mouseData.lastMouseMoveUpdateTime=0),r-s.settings.mouseData.lastMouseMoveUpdateTime>10&&(s.settings.mouseData.mouseX=e.offsetX,s.settings.mouseData.mouseY=e.offsetY,null!=s.settings.mouseData.mouseX&&null!=s.settings.mouseData.mouseY&&(s.morphMat.uniforms.uMouse.value=new THREE.Vector2(s.settings.mouseData.mouseX/t.cw,1-s.settings.mouseData.mouseY/t.ch)),s.settings.mouseData.lastMouseMoveUpdateTime=r)}catch(e){console.error("HoverMorph Mouse Move Error: ",e)}},enter:(e,t)=>{let o=t.addOns.hovermorph;if(o.leaveTween&&o.leaveTween.kill&&o.leaveTween.kill(),o.morphMat&&o.morphMat.uniforms&&o.morphMat.uniforms.uInteractionRadius){const e=o.morphMat.uniforms.uInteractionRadius;tpGS.gsap.to(e,{value:o.settings.interactionRadius,duration:.25,ease:"power2.out"})}},leave:(e,t)=>{let o=t.addOns.hovermorph;if(o.morphMat&&o.morphMat.uniforms&&o.morphMat.uniforms.uInteractionRadius){const e=o.morphMat.uniforms.uInteractionRadius;o.leaveTween&&o.leaveTween.kill&&o.leaveTween.kill(),o.leaveTween=tpGS.gsap.to(e,{value:0,duration:.35,ease:"power2.inOut"})}o.settings&&o.settings.mouseData&&(o.settings.mouseData.lastMouseMoveUpdateTime=0)}}},fitCameraToObject:e=>{let t=e.addOns?.hovermorph??!1;if(t){let o=SR7.A.hovermorph,s=Math.round(e.cw??0),r=Math.round(e.ch??0);t.lastDim={width:s,height:r},o.hmorph.resize(e,s,r),t.paused=!1,cancelAnimationFrame(t.frame),t.frame=requestAnimationFrame(t.bindedRender)}}};let e=e=>parseFloat(e),t=async t=>(t.parbackground="default"===t.parbackground?SR7.E.resources.hmURL+"public/assets/img.png":t.parbackground,t.adjustBrightness=1-e(t.adjustBrightness)/100,t.imgScale=e(t.imgScale)/100,t.imgFit??t.imgFit,t.imgPos??t.imgPos,t.imageColor??t.imageColor,t.imageHoverColor=t.imageHoverColor??t.imageColor,t.useRainbow=!!t.useRainbow,t.shapeChooser??t.shapeChooser,t.shapeSelector??t.shapeSelector,t.shapeFill??t.shapeFill,t.shapeBorderSize??t.shapeBorderSize,t.shapeSize??t.shapeSize,t.shapeXPos??t.shapeXPos,t.shapeYPos??t.shapeYPos,t.shapeZPos??t.shapeZPos,t.textInput??t.textInput,t.textFont??t.textFont,t.textFontWeight??t.textFontWeight,t.textFontSize??t.textFontSize,t.interactionRadius=e(t.interactionRadius)/100,t.interIntens=e(t.interIntens)/100,t.mouseData={},t.mouseData.lastMouseMoveUpdateTime=0,t.mouseData.mouseX=.5,t.mouseData.mouseY=.5,t.dpr=e(t.dpr),void 0===t.clock&&(t.clock=new THREE.Clock),t.sr7Image??={},t.sr7Image.canvas=document.createElement("canvas"),t.sr7Image.ctx=t.sr7Image.canvas.getContext("2d"),await _tpt.checkFontLoaded(t.textFont,t.textFontWeight,null,400),await _tpt.loadSingleImage(t.parbackground).then((async e=>{t.sr7Image.img=e.image;if("string"==typeof t.parbackground&&(t.parbackground.toLowerCase().includes(".svg")||t.parbackground.startsWith("data:image/svg+xml")))try{const e=await fetch(t.parbackground);let o=await e.text();o=o.replace(/fill="[^"]*"/g,'fill="white"').replace(/stroke="[^"]*"/g,'stroke="white"'),/<svg[^>]*>/i.test(o)&&(o=o.replace(/<svg([^>]*)>/i,((e,t)=>`<svg${t}><style>svg * { fill:white !important; stroke:none !important; }</style>`)));const s=new Blob([o],{type:"image/svg+xml"}),r=URL.createObjectURL(s);await new Promise((e=>{const o=new Image;o.crossOrigin="Anonymous",o.onload=function(){t.sr7Image.img=o,URL.revokeObjectURL(r),e()},o.onerror=function(){URL.revokeObjectURL(r),e()},o.src=r}))}catch(e){}t.sr7Image.texture=new THREE.Texture(t.sr7Image.canvas)})),t);_tpt.R??={},_tpt.R.hovermorph=_tpt.extend?_tpt.extend(_tpt.R.hovermorph,{status:2,version:"1.0"}):{status:2,version:"1.0"},window.dispatchEvent(new CustomEvent("SR7HoverMorphReady"))}();
!function(){"use strict";if(window.SR7??={},window._tpt??={},SR7.A??={},SR7.F??={},SR7.D??={},void 0!==(SR7.A.hovermorph?.hmorph??void 0))return;SR7.A.hovermorph={...SR7.A.hovermorph,hmorph:{build:t=>{let r=SR7.A.hovermorph,a=t.addOns.hovermorph,o=a.settings;e(t),a.renderer=new THREE.WebGLRenderer({antialias:!0,canvas:a.canvas.canvas,alpha:!0}),a.renderer.setClearColor(0,0),a.canvas.canvas.addEventListener("mousemove",(function(e){r.listeners.mouse.move(e,t)})),a.canvas.canvas.addEventListener("mouseenter",(function(e){r.listeners.mouse.enter(e,t)})),a.canvas.canvas.addEventListener("mouseleave",(function(e){r.listeners.mouse.leave(e,t)})),a.renderer.setPixelRatio(Math.min(o.dpr,window.devicePixelRatio)),a.renderer.setSize(a.canvas.canvas.width,a.canvas.canvas.height),a.bindedRender=e=>{r.hmorph.render(t,e)}},render:(e,t)=>{let r=SR7.A.hovermorph,{id:a}=SR7.F.getLayer(e.el.id),o=e.addOns.hovermorph,n=o.settings;if(o.destroyed||o.paused||(o.frame=cancelAnimationFrame(o.frame),o.frame=requestAnimationFrame(o.bindedRender)),void 0!==t&&void 0!==o.time){o.tDiff=(t-o.time)/1600,o.time=t,void 0!==o.lastDim&&o.lastDim.width===e.cw&&o.lastDim.height===e.ch||r.fitCameraToObject(e);n.clock.getElapsedTime()>n.clockCounter*(1/60)&&(n.clockCounter+=o.tDiff),o.renderer.render(o.scene,o.camera)}else o.time=t},update:e=>{let t=e.addOns.hovermorph,r=t.settings;if(t.morphMat&&t.morphMat.uniforms){const e=t.morphMat.uniforms;r.idleColor=HM_getRGBA(r.imageColor),r.hoverColor=HM_getRGBA(r.imageHoverColor||r.imageColor),e.uIdleColor.value.set(r.idleColor[0],r.idleColor[1],r.idleColor[2],r.idleColor[3]),e.uHoverColor.value.set(r.hoverColor[0],r.hoverColor[1],r.hoverColor[2],r.hoverColor[3]),e.uUseRainbow.value=!!r.useRainbow}},resize:(e,r,o)=>{let n=e.addOns.hovermorph;if(n.w=r,n.h=o,!n.camera)return;if(n.camera.left=-r/2,n.camera.right=r/2,n.camera.top=o/2,n.camera.bottom=-o/2,n.camera.updateProjectionMatrix(),n.camera.position.set(0,0,1),n.camera.lookAt(new THREE.Vector3(0,0,0)),n.renderer.setSize(r,o),n.morphPlane&&n.morphPlane.geometry){try{n.morphPlane.geometry.dispose()}catch(e){}n.morphPlane.geometry=new THREE.PlaneGeometry(r,o)}const s=n.settings;n.morphMat&&n.morphMat.uniforms&&n.morphMat.uniforms.uResolution&&(n.morphMat.uniforms.uResolution.value=new THREE.Vector2(r,o));try{t(e)}catch(e){}if(s.shapeChooser>1)try{a(e)}catch(e){}n.morphMat&&n.morphMat.uniforms&&n.morphMat.uniforms.uTexture&&(n.morphMat.uniforms.uTexture.value=s.sr7Image.texture,s.sr7Image.texture&&(s.sr7Image.texture.needsUpdate=!0))},destroy:e=>{let t=e.addOns.hovermorph;t.destroyed=!0,t.renderer&&(t.renderer.dispose(),t.renderer.domElement.remove(),t.renderer.domElement=null),t.renderer=null,t.frame=cancelAnimationFrame(t.frame)}}};let e=e=>{let r=e.addOns.hovermorph,o=r.settings;function n(e){return(e=tpGS.gsap.utils.splitColor(e)).length<=3&&(e[3]=1),e}t(e),o.shapeChooser>1&&a(e),r.camera=new THREE.OrthographicCamera(e.cw/-2,e.cw/2,e.ch/2,e.ch/-2,1,1e3),r.scene=new THREE.Scene,r.clock=new THREE.Clock(!0),o.idleColor=n(o.imageColor),o.hoverColor=n(o.imageHoverColor||o.imageColor),o.useRainbow=!!o.useRainbow,r.morphGeo=new THREE.PlaneGeometry(e.cw,e.ch),r.morphMat=new THREE.ShaderMaterial({vertexShader:SR7.A.hovermorph.hm_vertexshader,fragmentShader:SR7.A.hovermorph.hm_fragmentshader,uniforms:{uTexture:{value:o.sr7Image.texture},uResolution:{value:new THREE.Vector2(e.cw,e.ch)},uMouse:{value:new THREE.Vector2(0,0)},uInteractionRadius:{value:o.interactionRadius},uIdleColor:{value:new THREE.Vector4(o.idleColor[0],o.idleColor[1],o.idleColor[2],o.idleColor[3])},uHoverColor:{value:new THREE.Vector4(o.hoverColor[0],o.hoverColor[1],o.hoverColor[2],o.hoverColor[3])},uUseRainbow:{value:o.useRainbow},uShapeChooser:{value:o.shapeChooser},uShapeSelector:{value:o.shapeSelector},uShapeFill:{value:o.shapeFill},uShapeBorderSize:{value:o.shapeBorderSize},uShapeSize:{value:o.shapeSize},uShapeXPos:{value:o.shapeXPos},uShapeYPos:{value:o.shapeYPos},uShapeZPos:{value:o.shapeZPos},uInterIntens:{value:o.interIntens}}}),r.morphPlane=new THREE.Mesh(r.morphGeo,r.morphMat),r.scene.add(r.morphPlane),o.clockCounter??=0},t=e=>{let t=e.addOns.hovermorph.settings;t.sr7Image.canvas.width=e.cw,t.sr7Image.canvas.height=e.ch,t.sr7Image.ctx.imageSmoothingEnabled=!1;let r=t.sr7Image.img.naturalWidth,a=t.sr7Image.img.naturalHeight;t.sr7Image.ctx.clearRect(0,0,e.cw,e.ch);const o=function(r,a,o,n,s,i,h){const l=r/a,d=o/n;let m,c;if("contain"===s){const e=l<d?n/a:o/r;m=r*e,c=a*e}else{const e=l<d?o/r:n/a;m=r*e,c=a*e}if("scale"===s){const e=.5+Math.max(0,t.imgScale);m*=e,c*=e}let u=.5*(e.cw-m),g=.5*(e.ch-c);return t.imgPos&&"string"==typeof t.imgPos&&(-1!==t.imgPos.indexOf("left")&&(u=0),-1!==t.imgPos.indexOf("right")&&(u=e.cw-m),-1!==t.imgPos.indexOf("top")&&(g=0),-1!==t.imgPos.indexOf("bottom")&&(g=e.ch-c)),{dx:u,dy:g,drawW:m,drawH:c}}(r,a,e.cw,e.ch,t.imgFit,t.imgScale,t.imgPos);t.sr7Image.ctx.drawImage(t.sr7Image.img,o.dx,o.dy,o.drawW,o.drawH),t.sr7Image.ctx.scale(1,1),t.sr7Image.url=t.parbackground,t.sr7Image.texture=new THREE.Texture(t.sr7Image.canvas),t.sr7Image.texture.needsUpdate=!0},r=(e,t,r)=>(.2126*e+.7152*t+.0722*r)/255;let a=e=>{let t=e.addOns.hovermorph,a=t.settings.adjustBrightness,o=0,n=0,s=t.settings.sr7Image.canvas;3==t.settings.shapeChooser&&function(e,t,r,a,o,n,s){t.clearRect(0,0,e.width,e.height);const i=r;let h=!1,l=a;for(;0==h;){if(t.font=`${n} ${l}px ${o}`,t.measureText(i).width<=.8*e.width&&l<=e.height){h=!0;break}l--}t.fillStyle=String(s),t.textAlign="center",t.textBaseline="middle";let d=e.width/2,m=e.height/2;t.fillText(i,d,m)}(s,t.settings.sr7Image.ctx,t.settings.textInput,t.settings.textFontSize,t.settings.textFont,t.settings.textFontWeight,"White");let i=t.settings.sr7Image.ctx.getImageData(0,0,s.width,s.height),h=new Uint16Array(s.width*s.height),l=new Uint16Array(s.width*s.height);for(let e=0;e<i.data.length/4;e++){if(r(i.data[4*e+0],i.data[4*e+1],i.data[4*e+2])>=a){let t=0;r(i.data[4*(e-1)+0],i.data[4*(e-1)+1],i.data[4*(e-1)+2])>=a&&t++,r(i.data[4*(e+1)+0],i.data[4*(e+1)+1],i.data[4*(e+1)+2])>=a&&t++,r(i.data[4*(e+s.width)+0],i.data[4*(e+s.width)+1],i.data[4*(e+s.width)+2])>=a&&t++,r(i.data[4*(e-s.width)+0],i.data[4*(e-s.width)+1],i.data[4*(e-s.width)+2])>=a&&t++,4!=t?(n++,l[o++]=100,l[o++]=e%s.width,l[o++]=Math.floor(e/s.width)):(h[e]=100)}}let d=new Uint16Array(3*n);for(let e=0;e<3*n;e++)d[e]=l[e];let m=document.createElement("canvas"),c=m.getContext("2d");m.width=s.width,m.height=s.height;let u=c.createImageData(s.width,s.height),g=u.data;function p(e,t){const r=new Float32Array(t),a=new Int32Array(t),o=new Float32Array(t+1);let n=0;a[0]=0,o[0]=-1/0,o[1]=1/0;for(let r=1;r<t;r++){let t=(e[r]+r*r-(e[a[n]]+a[n]*a[n]))/(2*r-2*a[n]);for(;t<=o[n];)n--,t=(e[r]+r*r-(e[a[n]]+a[n]*a[n]))/(2*r-2*a[n]);n++,a[n]=r,o[n]=t,o[n+1]=1/0}n=0;for(let s=0;s<t;s++){for(;o[n+1]<s;)n++;const t=s-a[n];r[s]=t*t+e[a[n]]}return r}const v=s.width,w=s.height,f=new Uint8Array(v*w);for(let e=0;e<d.length;e+=3){const t=d[e+1],r=d[e+2];t>=0&&t<v&&r>=0&&r<w&&(f[r*v+t]=1)}const R=function(e,t,r){const a=new Float32Array(t*r),o=new Float32Array(t);for(let n=0;n<r;n++){for(let r=0;r<t;r++)o[r]=e[n*t+r]?0:1e20;const r=p(o,t);a.set(r,n*t)}const n=new Float32Array(t*r),s=new Float32Array(r);for(let e=0;e<t;e++){for(let o=0;o<r;o++)s[o]=a[o*t+e];const o=p(s,r);for(let a=0;a<r;a++)n[a*t+e]=o[a]}return n}(f,v,w);for(let e=0;e<w;e++)for(let t=0;t<v;t++){const r=R[e*v+t],a=Math.sqrt(r),o=Math.max(0,255-a/100*255),n=4*(e*v+t);g[n]=g[n+1]=g[n+2]=255-o,g[n+3]=255}if(c.putImageData(u,0,0),t.settings.shapeFill){for(let e=0;e<h.length;e++)h[e]>1&&(g[4*e]=0,g[4*e+1]=0,g[4*e+2]=0,g[4*e+3]=255);c.putImageData(u,0,0)}t.settings.sr7Image.texture=new THREE.Texture(m),t.settings.sr7Image.texture.needsUpdate=!0};_tpt.R??={},_tpt.R.hm_HMorph=_tpt.extend?_tpt.extend(_tpt.R.hm_HMorph,{status:2,version:"1.0"}):{status:2,version:"1.0"},window.dispatchEvent(new CustomEvent("SR7HoverMorphWavesLoaded"))}();
!function(){"use strict";window.SR7??={},window._tpt??={},SR7.A??={},SR7.F??={},SR7.D??={},void 0===(SR7.A.hovermorph?.updateShader??void 0)&&(SR7.A.hovermorph={...SR7.A.hovermorph,updateShader:(t,n,e)=>{window.beforeCompile},hm_vertexshader:"\n            uniform vec2 uMouse;\n\t\t\tuniform vec2 uResolution;\n\n\t\t\tvarying vec2 vUv;\n\n\t\t\tvoid main() {\n\t\t\t\tvUv = uv;\n\n      \t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position.xyz, 1.0);\n\t\t\t}\n        ",hm_fragmentshader:"\n            uniform sampler2D uTexture;\n\t\t\tuniform vec2 uMouse;\n\t\t\tuniform vec2 uResolution;\n\t\t\tuniform bool uColorSwitch;\n\t\t\tuniform float uInteractionRadius;\t\t\t\t\n\t\t\tuniform int uShapeChooser;\n\t\t\tuniform int uShapeSelector;\n\t\t\tuniform bool uShapeFill;\n\t\t\tuniform float uShapeBorderSize;\n\t\t\tuniform float uShapeSize;\n\t\t\tuniform float uShapeXPos;\n\t\t\tuniform float uShapeYPos;\n\t\t\tuniform float uShapeZPos;\n\t\t\tuniform float uInterIntens;\n\t\t\tuniform vec4  uIdleColor;\n\t\t\tuniform vec4  uHoverColor;\n\t\t\tuniform bool uUseRainbow;\n\n\t\t\tvarying vec2 vUv;\n\n\t\t\tvec3 hsv2rgb(vec3 c){\n\t\t\t\tvec3 rgb = clamp(abs(mod(c.x*6.0 + vec3(0.0,4.0,2.0), 6.0) - 3.0) - 1.0, 0.0, 1.0);\n\t\t\t\treturn c.z * mix(vec3(1.0), rgb, c.y);\n\t\t\t}\n\t\t\t\n\t\t\t//_____CIRCLE_____\n\t\t\tfloat sdCircle(vec2 p, float s){\n\t\t\t\treturn length(p * s - s / 2.0) - 1.0;\n\t\t\t}\n\n\t\t\t//_____BOX_____ \n\t\t\tfloat sdBox(vec2 p, vec2 b, float s){\n\t\t\t\tvec2 d = abs(p * s - s / 2.0)-b;\n    \t\t\treturn length(max(d,0.0)) + min(max(d.x,d.y),0.0);\n\t\t\t}\n\n\t\t\t//_____TRIANGLE_____\n\t\t\tfloat sdTriangle(vec2 p, vec2 b, float s){\n\t\t\t\tconst float k = sqrt(3.0);\n\t\t\t\tp = p * s - s / 2.0;\n\t\t\t\tp.x = abs(p.x) - 1.0;\n\t\t\t\tp.y = p.y + sqrt(3.0) / 2.0;\n\t\t\t\tif( p.x+k*p.y>0.0 ) p = vec2(p.x-k*p.y,-k*p.x-p.y)/2.0;\n\t\t\t\tp.x -= clamp( p.x, -2.0*1.0, 0.0 );\n\t\t\t\treturn -length(p)*sign(p.y);\n\t\t\t}\n\n\t\t\t//_____RHOMBUS_____ \n\t\t\tfloat ndot(vec2 a, vec2 b ) \n\t\t\t{ \n\t\t\t\treturn a.x*b.x - a.y*b.y; \n\t\t\t}\n\t\t\tfloat sdRhombus( in vec2 p, in vec2 b, float s)\n\t\t\t{\n\t\t\t\tp = abs(p * s - s / 2.0);\n\t\t\t\tfloat h = clamp( ndot(b-2.0*p,b)/dot(b,b), -1.0, 1.0 );\n\t\t\t\tfloat d = length( p-0.5*b*vec2(1.0-h,1.0+h) );\n\t\t\t\treturn d * sign( p.x*b.y + p.y*b.x - b.x*b.y );\n\t\t\t}\n\n\t\t\t//_____TRIANGLE_CUSTOM_____\n\t\t\tfloat sdTriangleCustom( in vec2 p, in vec2 p0, in vec2 p1, in vec2 p2, float s )\n\t\t\t{\n\t\t\t\tp = p * s - s / 2.0;\n\t\t\t\tvec2 e0 = p1-p0, e1 = p2-p1, e2 = p0-p2;\n\t\t\t\tvec2 v0 = p -p0, v1 = p -p1, v2 = p -p2;\n\t\t\t\tvec2 pq0 = v0 - e0*clamp( dot(v0,e0)/dot(e0,e0), 0.0, 1.0 );\n\t\t\t\tvec2 pq1 = v1 - e1*clamp( dot(v1,e1)/dot(e1,e1), 0.0, 1.0 );\n\t\t\t\tvec2 pq2 = v2 - e2*clamp( dot(v2,e2)/dot(e2,e2), 0.0, 1.0 );\n\t\t\t\tfloat si = sign( e0.x*e2.y - e0.y*e2.x );\n\t\t\t\tvec2 d = min(min(vec2(dot(pq0,pq0), si*(v0.x*e0.y-v0.y*e0.x)),\n\t\t\t\t\t\t\t\tvec2(dot(pq1,pq1), si*(v1.x*e1.y-v1.y*e1.x))),\n\t\t\t\t\t\t\t\tvec2(dot(pq2,pq2), si*(v2.x*e2.y-v2.y*e2.x)));\n\t\t\t\treturn -sqrt(d.x)*sign(d.y);\n\t\t\t}\n\n\t\t\t//_____PENTAGON_____\n\t\t\tfloat sdPentagon( in vec2 p, in float r, float s )\n\t\t\t{\n\t\t\t\tp = p * s - s / 2.0;\n\t\t\t\tconst vec3 k = vec3(0.809016994,0.587785252,0.726542528);\n\t\t\t\tp.x = abs(p.x);\n\t\t\t\tp -= 2.0*min(dot(vec2(-k.x,k.y),p),0.0)*vec2(-k.x,k.y);\n\t\t\t\tp -= 2.0*min(dot(vec2( k.x,k.y),p),0.0)*vec2( k.x,k.y);\n\t\t\t\tp -= vec2(clamp(p.x,-r*k.z,r*k.z),r);    \n\t\t\t\treturn length(p)*sign(p.y);\n\t\t\t}\n\n\t\t\t//_____HEXAGON_____\n\t\t\tfloat sdHexagon( in vec2 p, in float r, float s )\n\t\t\t{\n\t\t\t\tconst vec3 k = vec3(-0.866025404,0.5,0.577350269);\n\t\t\t\tp = abs(p * s - s / 2.0);\n\t\t\t\tp -= 2.0*min(dot(k.xy,p),0.0)*k.xy;\n\t\t\t\tp -= vec2(clamp(p.x, -k.z*r, k.z*r), r);\n\t\t\t\treturn length(p)*sign(p.y);\n\t\t\t}\n\n\t\t\t//_____OCTOGON_____\n\t\t\tfloat sdOctogon( in vec2 p, in float r, float s )\n\t\t\t{\n\t\t\t\tconst vec3 k = vec3(-0.9238795325, 0.3826834323, 0.4142135623 );\n\t\t\t\tp = abs(p * s - s / 2.0);\n\t\t\t\tp -= 2.0*min(dot(vec2( k.x,k.y),p),0.0)*vec2( k.x,k.y);\n\t\t\t\tp -= 2.0*min(dot(vec2(-k.x,k.y),p),0.0)*vec2(-k.x,k.y);\n\t\t\t\tp -= vec2(clamp(p.x, -k.z*r, k.z*r), r);\n\t\t\t\treturn length(p)*sign(p.y);\n\t\t\t}\n\n\t\t\t//_____STAR_____\n\t\t\tfloat sdHexagram( in vec2 p, in float r, float s )\n\t\t\t{\n\t\t\t\tconst vec4 k = vec4(-0.5,0.8660254038,0.5773502692,1.7320508076);\n\t\t\t\tp = abs(p * s - s / 2.0);\n\t\t\t\tp -= 2.0*min(dot(k.xy,p),0.0)*k.xy;\n\t\t\t\tp -= 2.0*min(dot(k.yx,p),0.0)*k.yx;\n\t\t\t\tp -= vec2(clamp(p.x,r*k.z,r*k.w),r);\n\t\t\t\treturn length(p)*sign(p.y);\n\t\t\t}\n\n\t\t\t//_____CROSS______\n\t\t\tfloat sdCross( in vec2 p, in vec2 b, float r, float s ) \n\t\t\t{\n\t\t\t\tp = abs(p * s - s / 2.0); p = (p.y>p.x) ? p.yx : p.xy;\n\t\t\t\tvec2  q = p - b;\n\t\t\t\tfloat k = max(q.y,q.x);\n\t\t\t\tvec2  w = (k>0.0) ? q : vec2(b.y-p.x,-k);\n\t\t\t\treturn sign(k)*length(max(w,0.0)) + r;\n\t\t\t}\n\n\t\t\t//_____HEART_____ //\n\t\t\tfloat dot2(in vec2 a){\n\t\t\t\treturn dot(a,a);\n\t\t\t}\n\t\t\tfloat sdHeart( in vec2 p, float s )\n\t\t\t{\n\t\t\t\tp = p * s - s / 2.0;\n\t\t\t\tp.x = abs(p.x);\n\n\t\t\t\tif( p.y+p.x>1.0 )\n\t\t\t\t\treturn sqrt(dot2(p-vec2(0.25,0.75))) - sqrt(2.0)/4.0;\n\t\t\t\t\treturn sqrt(min(dot2(p-vec2(0.00,1.00)),\n\t\t\t\t\tdot2(p-0.5*max(p.x+p.y,0.0)))) * sign(p.x-p.y);\n\t\t\t}\n\n            // --- Anti-aliased SDF helpers with extra edge width (was: fill/stroke edge=cCircle) ---\n            float strokeAAEdge(float sd, float halfWidth, float edge) {\n                float aa = max(fwidth(sd), edge);\n                float a = smoothstep(-halfWidth - aa, -halfWidth + aa, sd);\n                float b = smoothstep( halfWidth - aa,  halfWidth + aa, sd);\n                return clamp(a - b, 0.0, 1.0);\n            }\n            float fillAAEdge(float sd, float edge) {\n                float aa = max(fwidth(sd), edge);\n                return 1.0 - smoothstep(0.0 - aa, 0.0 + aa, sd);\n            }\n\n\t\t\t//----------------------------------------------------------------------\n\t\t\t// Function Edge\n\t\t\tfloat stroke(float x, float size, float w, float edge) {\n\t\t\t\tfloat d = smoothstep(size - edge, size + edge, x + w * 0.5) - smoothstep(size - edge, size + edge, x - w * 0.5);\n\t\t\t\treturn clamp(d, 0.0, 1.0);\n\t\t\t}\n\n\t\t\t// Function Fill\n\t\t\tfloat fill(float x, float size, float edge) {\n\t\t\t\treturn 1.0 - smoothstep(size - edge, size + edge, x);\n\t\t\t}\n\n\t\t\t// Function circle for Mouse movement\n\t\t\tfloat sdCircle(in vec2 st, in vec2 center) {\n\t\t\t\tvec2 scaledSt = st / vec2(1.0, uResolution.x / uResolution.y);\n\t\t\t\tif(uResolution.x >= uResolution.y){ //Wider or equal\n\t\t\t\t\tcenter.y /= uResolution.x / uResolution.y;\n\t\t\t\t}else{ //higher\n\t\t\t\t\tcenter.y *= uResolution.y / uResolution.x;\n\t\t\t\t}\n\t\t\t\treturn (length(scaledSt - center) * (25.0 - uInteractionRadius * 25.0)) + 0.1;\n\t\t\t}\n\t\t\t\n\n\t\t\tvoid main() {\t\t\t\t\n\t\t\t\tvec2 st = vUv;\n\t\t\t\tif(uResolution.x > uResolution.y){\n\t\t\t\t\tst.x *= uResolution.x / uResolution.y;\n\t\t\t\t\tst.x += (1.0 - (uResolution.x / uResolution.y)) / 2.0;\n\t\t\t\t}\n\t\t\t\tif(uResolution.x < uResolution.y){\n\t\t\t\t\tst.y *= uResolution.y / uResolution.x;\n\t\t\t\t\tst.y += (1.0 - (uResolution.y / uResolution.x)) / 2.0;\n\t\t\t\t}\n\n\t\t\t\tvec2 st2 = vUv; //TODO: Fix that it is a circle\n\t\t\t\t/* if(uResolution.x > uResolution.y){\n\t\t\t\t\tst2.x *= uResolution.x / uResolution.y;\n\t\t\t\t\tst2.x += (1.0 - (uResolution.x / uResolution.y)) / 2.0;\n\t\t\t\t}\n\t\t\t\tif(uResolution.x < uResolution.y){\n\t\t\t\t\tst2.y *= uResolution.y / uResolution.x;\n\t\t\t\t\tst2.y += (1.0 - (uResolution.y / uResolution.x)) / 2.0;\n\t\t\t\t} */\n\t\t\t\t\n\t\t\t\tvec2 modMouse = uMouse;\n\n\t\t\t\tfloat roundness = 0.0;\n\t\t\t\tfloat size = 1.0;\n\t\t\t\tfloat border = 0.1;\n\t\t\t\tfloat shapeSize = 10.0 - uShapeSize / 10.0;\n\n\t\t\t\tfloat cSize = uInteractionRadius;\n\t\t\t\tfloat cEdge = 0.5;\n\t\t\t\tfloat cCircle = fill(sdCircle(st2, modMouse), cSize, cEdge);\n\n\t\t\t\t//_____________ SHAPE _________\n\t\t\t\tif(uShapeChooser == 1){\n\t\t\t\t\tfloat sdf;\n\n\t\t\t\t\t//Selector = 1 => Circle\n\t\t\t\t\tif(uShapeSelector == 1){\n\t\t\t\t\t\tsdf = sdCircle(st, shapeSize);\n\t\t\t\t\t}\n\n\t\t\t\t\t//Selector = 2 => Box\n\t\t\t\t\tif(uShapeSelector == 2){ \n\t\t\t\t\t\tsdf = sdBox(st, vec2(uShapeXPos / 50.0, uShapeYPos / 50.0), 5.0);\n\t\t\t\t\t}\n\n\t\t\t\t\t//Selector = 3 => Triangle\n\t\t\t\t\tif(uShapeSelector == 3){ \n\t\t\t\t\t\tsdf = sdTriangle(st, vec2(1.0), shapeSize);\n\t\t\t\t\t}\n\n\t\t\t\t\t//Selector = 4 => Triangle Custom\n\t\t\t\t\tif(uShapeSelector == 4){ \n\t\t\t\t\t\tsdf = sdTriangleCustom(st, vec2((uShapeXPos - 50.0) / 50.0, (uShapeYPos - 50.0) / 50.0), vec2((uShapeYPos - 50.0) / 50.0, (uShapeZPos - 50.0) / 50.0), vec2((uShapeZPos - 50.0) / 50.0, (uShapeXPos - 50.0) / 50.0), 5.0);\n\t\t\t\t\t}\n\n\t\t\t\t\t//Selector = 5 => Rhombus\n\t\t\t\t\tif(uShapeSelector == 5){ \n\t\t\t\t\t\tsdf = sdRhombus(st, vec2(uShapeXPos / 50.0, uShapeYPos / 50.0), 5.0);\n\t\t\t\t\t}\n\n\t\t\t\t\t//Selector = 6 => Pentagon\n\t\t\t\t\tif(uShapeSelector == 6){ \n\t\t\t\t\t\tsdf = sdPentagon(st, 1.0, shapeSize);\n\t\t\t\t\t}\n\n\t\t\t\t\t//Selector = 7 => Hexagon\n\t\t\t\t\tif(uShapeSelector == 7){ \n\t\t\t\t\t\tsdf = sdHexagon(st, 1.0, shapeSize);\n\t\t\t\t\t}\n\n\t\t\t\t\t//Selector = 8 => Octogon\n\t\t\t\t\tif(uShapeSelector == 8){ \n\t\t\t\t\t\tsdf = sdOctogon(st, 1.0, shapeSize);\n\t\t\t\t\t}\n\n\t\t\t\t\t//Selector = 9 => Star\n\t\t\t\t\tif(uShapeSelector == 9){ \n\t\t\t\t\t\tsdf = sdHexagram(st, 1.0, shapeSize);\n\t\t\t\t\t}\n\n\t\t\t\t\t//Selector = 10 => Cross\n\t\t\t\t\tif(uShapeSelector == 10){ \n\t\t\t\t\t\tsdf = sdCross(st, uShapeXPos / 500.0 + 0.3*cos(vec2(0.0,1.57)), 0.0, shapeSize);\n\t\t\t\t\t}\n\n\t\t\t\t\t//Selector = 11 => Heart\n\t\t\t\t\tif(uShapeSelector == 11){ \n\t\t\t\t\t\tsdf = sdHeart(st, shapeSize);\n\t\t\t\t\t}\n\n\t\t\t\t\t//Mouse Tester\n\t\t\t\t\t//gl_FragColor = vec4(vec3(cCircle), 1.0);\n\n\t\t\t\t\t//Selector Stroke/Fill\n\t\t\t\t\tif(uShapeFill == true){\n\t\t\t\t\t\t// Use cCircle as feather/edge width, not as visibility mask\n\t\t\t\t\t\tsdf = uUseRainbow ? fillAAEdge(sdf, cCircle) * 7.0 : fillAAEdge(sdf, cCircle) * 4.0;\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\telse{\n\t\t\t\t\t\tfloat hw = uShapeBorderSize / 100.0; // half width in SDF units\n\t\t\t\t\t\tsdf = uUseRainbow ? strokeAAEdge(sdf, hw, cCircle) * 7.0 : strokeAAEdge(sdf, hw, cCircle) * 4.0;\n\t\t\t\t\t}\n\n\t\t\t\t\t// --- UV-mapped rainbow (present but integrated) ---\n\t\t\t\t\tfloat intensity = uUseRainbow ? sdf : clamp(sdf, 0.0, 1.0);\n\t\t\t\t\t// lift mids slightly for more “Strahlung”\n\t\t\t\t\tfloat iBoost = uUseRainbow ? intensity : pow(intensity, 0.85);\n\n\t\t\t\t\tvec3 idleCol  = uUseRainbow ? vec3(1.0) : uIdleColor.rgb  / 255.0;\n\t\t\t\t\tvec3 hoverCol = uHoverColor.rgb / 255.0;\n\t\t\t\t\tvec3 pixelCol = mix(idleCol, hoverCol, cCircle);\n\n\t\t\t\t\t// UV-driven rainbow from oldmorph, but boosted a touch\n\t\t\t\t\tvec3 rainbow = vec3(iBoost * vUv.x, iBoost * vUv.y, iBoost * (1.0 - vUv.x));\n\n\t\t\t\t\t// a hair quicker morph in hover region\n\t\t\t\t\tfloat effectMix = pow(clamp(cCircle * uInterIntens, 0.0, 1.0), 0.1);\n\n\t\t\t\t\tvec3 base   = idleCol * iBoost;\n\n\t\t\t\t\tvec3 color = mix(base, rainbow, effectMix);\n\t\t\t\t\t// small global lift to make colors feel more present without clipping\n\t\t\t\t\tcolor = clamp(color * 1.06, 0.0, 1.0);\n\t\t\t\t\t\n\t\t\t\t\tgl_FragColor = uUseRainbow ? vec4(color, iBoost) : vec4(pixelCol * iBoost, iBoost);\n\t\t\t\t}\n\n\t\t\t\t//_____________ CUSTOM _________\n\t\t\t\tif(uShapeChooser == 2 || uShapeChooser == 3){\n\t\t\t\t\t//SDF Tester\n\t\t\t\t\t//vec4 abc = texture(uTexture, vUv);\n\t\t\t\t\t//gl_FragColor = vec4(abc);\n\t\t\t\t\t//gl_FragColor = vec4(vec3(cCircle), 1.0);\n\n\t\t\t\t\tvec4 sdf_vec = texture(uTexture, vUv);\n\t\t\t\t\tfloat sdf = sdf_vec.x;\n\t\t\t\t\t\n\t\t\t\t\tuUseRainbow ? sdf = fillAAEdge(sdf, cCircle) * 4.0 : sdf = fillAAEdge(sdf, cCircle) * 2.5;\n\n\t\t\t\t\t// --- UV-mapped rainbow (present but integrated) ---\n\t\t\t\t\tfloat intensity = uUseRainbow ? sdf : clamp(sdf, 0.0, 1.0);\n\t\t\t\t\t// lift mids slightly for more “Strahlung”\n\t\t\t\t\tfloat iBoost = uUseRainbow ? intensity : pow(intensity, 0.85);\n\n\t\t\t\t\tvec3 idleCol  = uUseRainbow ? vec3(1.0) : uIdleColor.rgb  / 255.0;\n\t\t\t\t\tvec3 hoverCol = uHoverColor.rgb / 255.0;\n\t\t\t\t\tvec3 pixelCol = mix(idleCol, hoverCol, cCircle);\n\n\t\t\t\t\t// UV-driven rainbow from oldmorph, but boosted a touch\n\t\t\t\t\tvec3 rainbow = vec3(iBoost * vUv.x, iBoost * vUv.y, iBoost * (1.0 - vUv.x));\n\n\t\t\t\t\t// a hair quicker morph in hover region\n\t\t\t\t\tfloat effectMix = pow(clamp(cCircle * uInterIntens, 0.0, 1.0), 0.1);\n\n\t\t\t\t\tvec3 base   = idleCol * iBoost;\n\n\t\t\t\t\tvec3 color = mix(base, rainbow, effectMix);\n\t\t\t\t\t// small global lift to make colors feel more present without clipping\n\t\t\t\t\tcolor = clamp(color * 1.06, 0.0, 1.0);\n\t\t\t\t\t\n\t\t\t\t\tgl_FragColor = uUseRainbow ? vec4(color, iBoost) : vec4(pixelCol * iBoost, iBoost);\n\t\t\t\t}\n\t\t\t}\n        "},_tpt.R??={},_tpt.R.hm_Shaders=_tpt.extend?_tpt.extend(_tpt.R.hm_Shaders,{status:2,version:"1.0"}):{status:2,version:"1.0"},window.dispatchEvent(new CustomEvent("SR7HoverMorphShadersLoaded")))}();