{"history":[{"breakpoints":[],"visible":true,"aspectRatio":1,"userDownsample":1,"layerType":"effect","type":"twodlight","usesPingPong":false,"texture":false,"animating":false,"mouseMomentum":0,"mouseSpring":0,"isMask":0,"compiledFragmentShaders":["#version 300 es\n// Copyright (c) Unicorn Studio. Licensed under the Unicorn Studio Commercial License.\n// Unauthorized copying, redistribution, or use in competing products is prohibited.\nprecision highp float;\nprecision highp int;in vec2 vTextureCoord;uniform sampler2D uTexture;uniform vec2 uMousePos;\nuniform vec2 uResolution;uvec2 pcg2d(uvec2 v) {\nv = v * 1664525u + 1013904223u;\nv.x += v.y * v.y * 1664525u + 1013904223u;\nv.y += v.x * v.x * 1664525u + 1013904223u;\nv ^= v >> 16;\nv.x += v.y * v.y * 1664525u + 1013904223u;\nv.y += v.x * v.x * 1664525u + 1013904223u;\nreturn v;\n}float randFibo(vec2 p) {\nuvec2 v = floatBitsToUint(p);\nv = pcg2d(v);\nuint r = v.x ^ v.y;\nreturn float(r) / float(0xffffffffu);\n}float deband() {\nreturn (randFibo(gl_FragCoord.xy) - 0.5) / 255.0;\n}const float EPSILON = 0.0002;\nconst int MAX_STEPS = 20;\nconst float MAX_STEPS_F = 20.0;\nconst float STEP_SCALE = 64.0 / 20.0;\nconst float AMBIENT_STEP = 0.01 * STEP_SCALE;\nconst float SOURCE_ACCUM_GAIN = 0.05;\nconst float SOURCE_RADIUS_SCALE = 0.0;out vec4 fragColor;vec3 Tonemap_tanh(vec3 x) {\nx = clamp(x, -40.0, 40.0);\nreturn (exp(x) - exp(-x)) / (exp(x) + exp(-x));\n}float SHADER_COST_RAYMARCH_HINT(float value) {\nreturn value;\n}float interleavedGradientNoise(vec2 st) {\nreturn fract(52.9829189 * fract(dot(st, vec2(0.06711056, 0.00583715))));\n}void main() {\nvec4 sceneColor = texture(uTexture, vTextureCoord);\nvec2 aspectRatio = uResolution / min(uResolution.x, uResolution.y);\nvec2 uv = vTextureCoord * aspectRatio;\nvec2 pos = vec2(0.501530781870759, 0.6420565576064312) + mix(vec2(0), (uMousePos-0.5), 0.0000);\npos = pos * aspectRatio;\nvec2 lightDelta = pos - uv;\nfloat lightDist = length(lightDelta);if(lightDist <= EPSILON) {\nvec3 lightColor = Tonemap_tanh(sceneColor.rgb * vec3(1, 1, 1) + vec3(1, 1, 1) * (0.25 + 1.0000 * 0.5) * SOURCE_ACCUM_GAIN);\nfloat dither = deband();\nlightColor += dither;\nvec4 color = vec4(lightColor, 1.0);\nfragColor = color;return;\n}vec2 lightDir = lightDelta / lightDist;\nvec2 lightPerp = vec2(-lightDir.y, lightDir.x);\nbool hitObject = false;\nvec2 marchPos = uv;\nfloat rayDist = 0.;\nfloat jitter = interleavedGradientNoise(vTextureCoord * uResolution) - 0.5;\nfloat diffusion = 0.5400*0.125;\nfloat cappedScale = min(1.8, 0.8100);\nfloat ambient = 0.;\nfloat sourceGlow = 1.0 - smoothstep(0.0, 0.045 + cappedScale * 0.08, lightDist);\nfloat sourceRadius = (0.015 + cappedScale * 0.06) * SOURCE_RADIUS_SCALE;\nfloat sourceAccum = (SOURCE_ACCUM_GAIN * 1.0000) * (0.015 + 1.0000 * 0.12) / max(lightDist * lightDist, sourceRadius * sourceRadius);\nvec2 offset = lightPerp * jitter * diffusion;\nfloat baseStepLength = 0.01 * max(cappedScale, 0.05) * STEP_SCALE;\nfloat stepLength = min(baseStepLength, max(lightDist / (MAX_STEPS_F * 0.8), EPSILON));\nvec2 step = (lightDir + offset) * stepLength;\nmarchPos += step * (jitter + 0.5);\nvec3 prevColor = vec3(0.0);for(int i = 0; i < MAX_STEPS; i++) {\nfloat traveled = length(marchPos - uv);\nfloat dist = SHADER_COST_RAYMARCH_HINT(traveled);if (dist >= lightDist) {\nbreak;\n}marchPos += step * mix(dist, 1., 0.4);\nvec4 texColor = texture(uTexture, marchPos / aspectRatio);rayDist = dist / lightDist;vec3 color = texColor.rgb;float colorDiff = length(color - prevColor);\nbool hit = colorDiff > 0.2500;\nif (hit && !hitObject) {\nhitObject = true;\nprevColor = color;\nif(dist < lightDist) {\nbreak;\n}\n} else {\nambient -= AMBIENT_STEP;\n}\n}rayDist = mix(rayDist * lightDist, rayDist, 1.0000 * 1.5);\nfloat lightMix = max(0.0, 1. - rayDist + ambient * 1.0000);\nvec3 lightColor = mix(vec3(1, 1, 1), sceneColor.rgb * vec3(1, 1, 1), lightMix);\nlightColor += vec3(1, 1, 1) * (sourceGlow * (0.04 + 1.0000 * 0.1) + sourceAccum);\nlightColor = Tonemap_tanh(sceneColor.rgb * lightColor);\nfloat dither = deband();\nlightColor += dither;\nvec4 color = vec4(lightColor, 1.);\nfragColor = color;}"],"compiledVertexShaders":["#version 300 es\n// Copyright (c) Unicorn Studio. Licensed under the Unicorn Studio Commercial License.\n// Unauthorized copying, redistribution, or use in competing products is prohibited.\nprecision mediump float;in vec3 aVertexPosition;\nin vec2 aTextureCoord;uniform mat4 uMVMatrix;\nuniform mat4 uPMatrix;\nuniform mat4 uTextureMatrix;out vec2 vTextureCoord;\nout vec3 vVertexPosition;void main() {\ngl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);\nvTextureCoord = (uTextureMatrix * vec4(aTextureCoord, 0.0, 1.0)).xy;\n}"],"trackMouse":0,"trackAxes":"xy","data":{"depth":false,"uniforms":{},"isBackground":false},"id":"card2_layer_0_twodlight","publicId":"2d_light"},{"breakpoints":[],"visible":true,"aspectRatio":1,"userDownsample":1,"layerType":"effect","type":"aurora","usesPingPong":false,"texture":{"src":"/assets/cjt-logo-mark.svg","name":"","svgSrc":"","thumb":"","sampler":"uCustomTexture"},"animating":true,"mouseMomentum":0,"mouseSpring":0,"isMask":0,"compiledFragmentShaders":["#version 300 es\n// Copyright (c) Unicorn Studio. Licensed under the Unicorn Studio Commercial License.\n// Unauthorized copying, redistribution, or use in competing products is prohibited.\nprecision highp float;\nprecision highp int;in vec2 vTextureCoord;\nuniform sampler2D uTexture;\nuniform float uTime;\nuniform vec2 uMousePos;\nuniform vec2 uResolution;\nvec3 blend (int blendMode, vec3 src, vec3 dst) {\nreturn src + dst;\n}\nvec4 applyLayerMix(vec4 color, vec4 bg, float amount) {\ncolor.rgb = mix(bg.rgb, color.rgb, amount);\ncolor.a = max(bg.a, amount);\nreturn color;\n}\nuvec2 pcg2d(uvec2 v) {\nv = v * 1664525u + 1013904223u;\nv.x += v.y * v.y * 1664525u + 1013904223u;\nv.y += v.x * v.x * 1664525u + 1013904223u;\nv ^= v >> 16;\nv.x += v.y * v.y * 1664525u + 1013904223u;\nv.y += v.x * v.x * 1664525u + 1013904223u;\nreturn v;\n}float randFibo(vec2 p) {\nuvec2 v = floatBitsToUint(p);\nv = pcg2d(v);\nuint r = v.x ^ v.y;\nreturn float(r) / float(0xffffffffu);\n}\nfloat deband() {\nreturn (randFibo(gl_FragCoord.xy) - 0.5) / 255.0;\n}out vec4 fragColor;ivec2 customTexSize;\nfloat customTexAspect;const float PI = 3.14159265359;\nconst float TAU = 6.28318530718;vec3 pal( in float t, in vec3 a, in vec3 b, in vec3 c, in vec3 d ) {\nreturn a + b*cos( TAU*(c*t+d) );\n}vec3 Tonemap_Reinhard(vec3 x) {\nx *= 4.;\nreturn x / (1.0 + x);\n}float sdEllipse(vec2 st, float r) {\nfloat a = length(st + vec2(0, r * 0.8)) - r;\nfloat b = length(st + vec2(0, -r * 0.8)) - r;\nreturn (a + b);\n}float getSdf(vec2 st, float md) {\nreturn sdEllipse(st, 0.6800);\n}vec2 turb(vec2 pos, float it, float baseFreq, float ampStart, float phaseTime, vec2 mPos) {\nmat2 trot = mat2(0.6, -0.8, 0.8, 0.6);\nfloat freq = baseFreq;\nfloat amp = ampStart;\nfloat xp = 1.4;\nfor(float i = 0.; i < 4.; i++) {\nvec2 s = sin(freq * ((pos - mPos) * trot) + i * phaseTime + it);\npos += amp * trot[0] * s / freq;\ntrot *= mat2(0.6, -0.8, 0.8, 0.6);\namp *= mix(1., max(s.y, s.x), 0.0000);\nfreq *= xp;\n}return pos;\n}const int ITERATIONS = 36;void main() {\nvec2 uv = vTextureCoord;\nvec4 bg = texture(uTexture, uv);\nvec3 pp = vec3(0.);\nvec3 bloom = vec3(0.);\nfloat t = uTime * 0.5 + 0.0000;\nvec2 aspect = vec2(uResolution.x/uResolution.y, 1);\nvec2 mousePos = mix(vec2(0), uMousePos - 0.5, 0.0700);\nvec2 pos = (uv * aspect - vec2(0.5, 0.5) * aspect);\nfloat mDist = length(uv * aspect - uMousePos * aspect);\nfloat md = mix(1., smoothstep(1., 5., 1./mDist), 0.0000);\nfloat rotation = 0.0000 * -2.0 * PI;\nmat2 rotMatrix = mat2(cos(rotation), -sin(rotation), sin(rotation), cos(rotation));\npos = rotMatrix * pos;\nfloat bm = 0.05;\nint activeIterations = clamp(int(floor(float(36))), 1, ITERATIONS);\nfloat activeIterationsF = float(activeIterations);\nfloat turbBaseFreq = mix(2., 15., 0.5000);\nfloat turbAmpStart = 0.5000 * md;\nfloat turbPhaseTime = t * 0.1 + 0.0000;\nfloat colorScaleFactor = mix(0.1, 1.9, 0.1700);\nvec2 prevPos = turb(pos, 0. - 1./activeIterationsF, turbBaseFreq, turbAmpStart, turbPhaseTime, mousePos);\nfloat spacing = mix(1., TAU, 0.8600);\nfloat smoothing = 0.1400;\nfloat pdPow = 2.0 * 1.4426950408889634;\nfor(int i = 0; i < ITERATIONS; i++) {\nfloat fi = float(i + 1);\nif(fi > activeIterationsF) {\nbreak;\n}\nfloat iter = fi/activeIterationsF;\nvec2 st = turb(pos, iter * spacing, turbBaseFreq, turbAmpStart, turbPhaseTime, mousePos);\nfloat d = abs(getSdf(st, md));\nfloat pd = distance(st, prevPos);\nprevPos = st;\nfloat dynamicBlur = exp2(pd * pdPow) - 1.0;\nfloat ds = smoothstep(0., 0.0000 * bm + max(dynamicBlur * smoothing, 0.001), d);\nvec3 color = pal(iter * colorScaleFactor + 0.2300, vec3(0.5), vec3(0.5), vec3(1), vec3(1, 1, 1));\nfloat invd = 1./max(d + dynamicBlur, 0.001);\npp += (ds - 1.) * color;\nbloom += clamp(invd, 0., 250.) * color;\n}pp *= 1./activeIterationsF * 2.0;\nbloom = bloom / (bloom + 2e4);vec3 color = (-pp + bloom * 3. * 0.7500);\ncolor *= 1.2;\ncolor += deband();\ncolor = (Tonemap_Reinhard(color));\nvec4 auroraColor = vec4(color, 1.);\nauroraColor.rgb = blend(1, bg.rgb, auroraColor.rgb);\nauroraColor = applyLayerMix(auroraColor, bg, 1.0000);\nfragColor = auroraColor;}"],"compiledVertexShaders":["#version 300 es\n// Copyright (c) Unicorn Studio. Licensed under the Unicorn Studio Commercial License.\n// Unauthorized copying, redistribution, or use in competing products is prohibited.\nprecision mediump float;in vec3 aVertexPosition;\nin vec2 aTextureCoord;uniform mat4 uMVMatrix;\nuniform mat4 uPMatrix;\nuniform mat4 uTextureMatrix;out vec2 vTextureCoord;\nout vec3 vVertexPosition;void main() {\ngl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);\nvTextureCoord = (uTextureMatrix * vec4(aTextureCoord, 0.0, 1.0)).xy;\n}"],"speed":0.73,"trackMouse":0.07,"trackAxes":"xy","data":{"depth":false,"uniforms":{},"isBackground":false},"id":"card2_layer_1_aurora","publicId":"aurora"},{"breakpoints":[],"visible":true,"aspectRatio":1,"userDownsample":1,"layerType":"effect","type":"sdf_shape","usesPingPong":false,"texture":{"src":"/assets/unicorn/code_combined_1777997604460.png","sampler":"uCustomTexture"},"animating":true,"mouseMomentum":1,"mouseSpring":0,"isMask":0,"compiledFragmentShaders":["#version 300 es\n// Copyright (c) Unicorn Studio. Licensed under the Unicorn Studio Commercial License.\n// Unauthorized copying, redistribution, or use in competing products is prohibited.\nprecision highp float;\nprecision highp int;in vec2 vTextureCoord;\nuniform sampler2D uTexture;\nuniform sampler2D uCustomTexture;uniform float uTime;uniform vec2 uMousePos;\nuniform vec2 uResolution;uvec2 pcg2d(uvec2 v) {\nv = v * 1664525u + 1013904223u;\nv.x += v.y * v.y * 1664525u + 1013904223u;\nv.y += v.x * v.x * 1664525u + 1013904223u;\nv ^= v >> 16;\nv.x += v.y * v.y * 1664525u + 1013904223u;\nv.y += v.x * v.x * 1664525u + 1013904223u;\nreturn v;\n}float randFibo(vec2 p) {\nuvec2 v = floatBitsToUint(p);\nv = pcg2d(v);\nuint r = v.x ^ v.y;\nreturn float(r) / float(0xffffffffu);\n}const float PI = 3.14159265359;\nconst float TAU = 6.28318530718;\nconst float PHI = 1.61803398875;\nconst vec3 viewDir = vec3(0,0, -4.25);ivec2 customTexSize;\nfloat customTexAspect;const mat3 ROT_Y_90 = mat3(\n0.0, 0.0, 1.0,\n0.0, 1.0, 0.0,\n-1.0, 0.0, 0.0\n);const mat3 ROT_Z_90 = mat3(\n0.0, -1.0, 0.0,\n1.0, 0.0, 0.0,\n0.0, 0.0, 1.0\n);const mat3 ROT_X_90 = mat3(\n1.0, 0.0, 0.0,\n0.0, 0.0, -1.0,\n0.0, 1.0, 0.0\n);float interleavedGradientNoise(vec2 st) {\nreturn fract(52.9829189 * fract(dot(st, vec2(0.06711056, 0.00583715))));\n}mat3 rotY(float ang) {\nfloat c = cos(ang), s = sin(ang);\nreturn mat3(c, 0.0, s, 0.0, 1.0, 0.0, -s, 0.0, c);\n}mat3 rotX(float ang) {\nfloat c = cos(ang), s = sin(ang);\nreturn mat3(1.0, 0.0, 0.0, 0.0, c, -s, 0.0, s, c);\n}mat3 rotZ(float ang) {\nfloat c = cos(ang), s = sin(ang);\nreturn mat3(c, -s, 0.0, s, c, 0.0, 0.0, 0.0, 1.0);\n}vec3 twistY(vec3 p, float amount) {\nfloat c = cos(amount * p.y);\nfloat s = sin(amount * p.y);\nmat2 m = mat2(c, -s, s, c);\nreturn vec3(m * p.xz, p.y);\n}vec3 twistX(vec3 p, float amount) {\nfloat c = cos(amount * p.x);\nfloat s = sin(amount * p.x);\nmat2 m = mat2(c, -s, s, c);\nreturn vec3(p.x, m * p.yz);\n}float opExtrusion(vec3 p, float d, float h) {\nvec2 w = vec2( d, abs(p.z) - h );\nreturn min(max(w.x,w.y),0.0) + length(max(w,0.0));\n}float median(float r, float g, float b) {\nreturn max(min(r, g), min(max(r, g), b));\n}float sdCustom(vec3 p) {\np *= rotX(radians(90.0));\np *= rotY(radians(180.0));\np *= rotZ(radians(180.0));\nvec2 uv = p.xy * 0.25 + 0.5;\nif (customTexAspect > 1.0) {\nuv.y = (uv.y - 0.5) * customTexAspect + 0.5;\n} else {\nuv.x = (uv.x - 0.5) / customTexAspect + 0.5;\n}vec4 sdColor = texture(uCustomTexture, uv);\nfloat msdf = median(sdColor.r, sdColor.g, sdColor.b);\nfloat sdf = sdColor.a;\nfloat sd = msdf;\nif(sdf < 1.) {\nfloat tuning = 0.023;\nsd = mix(msdf, max(msdf - tuning, sdf), sdf);\n}float screenPxDistance = sd - 0.5;\nfloat d = -screenPxDistance;return opExtrusion(p, d, 0.2500 * 0.5);\n}vec3 getRepeat(vec3 p) {\nfloat spacing = (0.5000 + 0.0000 * 0.38) * 8.;\nreturn p;\n}vec3 getThreeDRepeat(vec3 p) {\nfloat spacing = (0.5000 + 0.0000 * 0.38) * 8.;\nreturn p;\n}vec3 getAdjustedP(vec3 p) {\nfloat scale = max(0.4000, 0.000000001);\nfloat scaleFactor = 1.0/scale;\nvec3 adjustedP = p * scaleFactor;vec2 twist = vec2(0, 0);adjustedP.xy *= vec2(uResolution.x / uResolution.y, 1);adjustedP *= (1. + (0.0000 + 0.01));vec2 mousePos = mix(vec2(0), uMousePos - 0.5, 0.0000);\nvec2 axis = vec2(-1. * vec3(0.6585365853658537, 0.5613240418118467, 0.4995).y - 1. + mousePos.y/PI, vec3(0.6585365853658537, 0.5613240418118467, 0.4995).x + mousePos.x/PI) * 2.;adjustedP = getRepeat(adjustedP);float baseTime = uTime * 0.02;\nfloat timeX = vec3(0, 1, 0).x * baseTime;\nfloat timeY = vec3(0, 1, 0).y * baseTime;\nfloat timeZ = vec3(0, 1, 0).z * baseTime;mat3 rotYMat = rotY(axis.y * PI);\nmat3 rotXMat = rotX(axis.x * PI);\nmat3 rotZMat = rotZ(vec3(0.6585365853658537, 0.5613240418118467, 0.4995).z * 2.0 * PI);mat3 combinedRotation = rotZMat * rotYMat * rotXMat;\nmat3 combinedAnimation = rotZ(timeZ) * rotX(timeX) * rotY(timeY);adjustedP = combinedRotation * adjustedP;\nadjustedP = combinedAnimation * adjustedP;\nadjustedP = getThreeDRepeat(adjustedP);if (twist.y != 0.0) {\nadjustedP = twistY(adjustedP, -1.0 * twist.y);\n} else {\nadjustedP = adjustedP.xzy;\n}if (twist.x != 0.0) {\nadjustedP = twistX(adjustedP, -1.0 * twist.x);\n}return adjustedP;\n}float getMergedSDF(vec3 p) {\np = getAdjustedP(p);\nreturn sdCustom(p);\n}float fresnel(vec3 eyeVector, vec3 worldNormal, float power) {\nfloat NdotV = abs(dot(eyeVector, worldNormal));\nfloat width = fwidth(dot(eyeVector, worldNormal));\nfloat threshold = 0.2;\nfloat edgeDampFactor = smoothstep(threshold, -threshold, width);\nfloat fresnelFactor = 1.0 - NdotV;\nreturn pow(fresnelFactor, power) * mix(1., edgeDampFactor * 2., 0.5);\n}float ign(vec2 st) {\nreturn fract(52.9829189 * fract(dot(st, vec2(0.06711056, 0.00583715))));\n}float ignGaussian4(vec2 st) {\nfloat n0 = ign(st + vec2(0.5, 0.5));\nfloat n1 = ign(st + vec2(5.2, 1.3));\nfloat n2 = ign(st + vec2(1.7, 9.2));\nfloat n3 = ign(st + vec2(8.3, 2.8));\nreturn (n0 + n1 + n2 + n3 - PHI) * PHI;\n}vec2 rot90(vec2 v) {\nreturn vec2(v.y, -v.x);\n}vec3 sampleDispersionTap(vec3 rd, vec3 normal, float iorBase, vec3 dispCoefficients, float step, vec2 blurOffset) {\nvec3 disp = step * dispCoefficients;\nvec3 ior = 1.0 / (iorBase + disp);\nvec3 refractedRayR = refract(rd, normal, ior.r);\nvec3 refractedRayG = refract(rd, normal, ior.g);\nvec3 refractedRayB = refract(rd, normal, ior.b);return vec3(\ntexture(uTexture, vTextureCoord - refractedRayR.xy + blurOffset).r,\ntexture(uTexture, vTextureCoord - refractedRayG.xy + blurOffset).g,\ntexture(uTexture, vTextureCoord - refractedRayB.xy + blurOffset).b\n);\n}vec3 frostOrDispersion(vec3 rd, vec3 normal) {\nvec3 refractionColor = vec3(0.0);\nfloat iorBase = 1. + 0.5000 * 0.25;\nvec3 dispCoefficients = vec3(0.03, 0.06, 0.1) * 0.2500 * 1.2;\nvec2 texel = 1.0 / uResolution;\nfloat aspectRatio = uResolution.x / uResolution.y;\nvec2 aspect = vec2(aspectRatio, 1.0);\nvec2 px = gl_FragCoord.xy;\nfloat noise = ign(px * 1.212);\nfloat angle = noise * PHI;\nvec2 screenAxis = vec2(cos(angle), sin(angle));\nvec2 screenAxisPerp = rot90(screenAxis);\nvec2 axis = screenAxis / aspect;\nvec2 axisPerp = screenAxisPerp / aspect;\nfloat jitter = ignGaussian4(px);\njitter = clamp(jitter, -2.0, 2.0) * 0.5;\nfloat blurRadius = max((0.0000 * 25.0) * texel.y * (1.0 + jitter), 0.0);dispCoefficients *= mix(jitter, 1.0, 0.6);vec2 blurAxis = vec2(0.0);\nvec2 blurAxisPerp = vec2(0.0);\nif (blurRadius > texel.y * 0.5) {\nblurAxis = axis * blurRadius;\nblurAxisPerp = axisPerp * blurRadius;\n}refractionColor += sampleDispersionTap(rd, normal, iorBase, dispCoefficients, 0.125, blurAxis);\nrefractionColor += sampleDispersionTap(rd, normal, iorBase, dispCoefficients, 0.375, -blurAxis);\nrefractionColor += sampleDispersionTap(rd, normal, iorBase, dispCoefficients, 0.625, blurAxisPerp);\nrefractionColor += sampleDispersionTap(rd, normal, iorBase, dispCoefficients, 0.875, -blurAxisPerp);return clamp(refractionColor * 0.25, 0.0, 1.0);\n}vec3 calculateNormal(vec3 p, float eps) {\nvec2 e = vec2(1.0, -1.0) * eps * 0.5;\nreturn normalize(\ne.xyy * getMergedSDF(p + e.xyy) +\ne.yyx * getMergedSDF(p + e.yyx) +\ne.yxy * getMergedSDF(p + e.yxy) +\ne.xxx * getMergedSDF(p + e.xxx)\n);\n}vec3 sampleTexture(vec3 rd, vec3 normal) {return frostOrDispersion(rd, normal);\n}float getFinalSDF(vec3 p) {\nreturn max(0.0000000001, getMergedSDF(p) - (0.0000 + 0.005)) * max(0.4000, 0.000000001);\n}const int STEPS = 72;\nconst float MAX_DISTANCE = 120.0;vec4 raymarch(vec3 ro, vec3 rd) {\nfloat pixelSize = 0.005;\nfloat jitter = interleavedGradientNoise(gl_FragCoord.xy);\nfloat traveled = jitter;\nvec3 entryPoint = vec3(0.0);\nvec3 entryNormal = vec3(0.0);\nfloat partialAlpha = 0.0;\nfloat lastDistance = 0.0;\nfloat smoothing = mix(1., 4., 0.2000);for (int i = 0; i < STEPS; ++i) {\nvec3 currentPos = ro + rd * traveled;\nfloat distance = getFinalSDF(currentPos);\nfloat progress = float(i)/float(STEPS);\nfloat step = distance * mix(0.5, 2.0, progress) * mix(1.0, jitter + 0.5, 1. - progress);if (distance > MAX_DISTANCE) break;if (distance < pixelSize) {\npartialAlpha = 1.;\nentryPoint = currentPos;\nentryNormal = calculateNormal(entryPoint, pixelSize * smoothing);\nbreak;\n}lastDistance = distance;traveled += max(step, pixelSize);\nif (traveled > MAX_DISTANCE) break;\n}if (partialAlpha == 0.0) {\nreturn texture(uTexture, vTextureCoord);\n}vec3 samplePosition = mix(rd, entryPoint, 0.0000);vec3 refractionColor = sampleTexture(samplePosition, entryNormal);\nvec3 lightDir = vec3(((vec2(vec3(0.25, 0.25, -3).x, 1.-vec3(0.25, 0.25, -3).y) - 0.333) * 3.) - vec2(0.5, 0.5), vec3(0.25, 0.25, -3).z);\nvec3 normLightDir = normalize(lightDir);float lightAndShadow = dot(entryNormal, normLightDir);\nvec3 lightColor = mix(vec3(1), vec3(0.13333333333333333, 1, 0.6549019607843137), 1. - 0.7800);\nvec3 fresnelEffect = vec3(0.0);fresnelEffect = fresnel(rd, entryNormal, 8.0) * 0.5000 * vec3(0.13333333333333333, 1, 0.6549019607843137);vec3 specularEffect = vec3(0.0);vec3 halfwayDir = normalize(lightDir + rd);\nfloat specFactor = pow(max(dot(entryNormal, halfwayDir), 0.0), 64.0 * 0.5000 + 0.01);\nspecularEffect = specFactor * 0.5000 * lightColor;vec3 combinedEffects = fresnelEffect + specularEffect;\nvec3 finalColor = mix(refractionColor, vec3(0.13333333333333333, 1, 0.6549019607843137) * lightAndShadow, 0.7800);\nfinalColor += combinedEffects;vec4 outputColor = vec4(finalColor, 1.);return outputColor;\n}out vec4 fragColor;void main() {\nvec4 col = vec4(0);\nvec2 uv = vTextureCoord;\nvec4 bg = texture(uTexture, uv);customTexSize = textureSize(uCustomTexture, 0);\ncustomTexAspect = float(customTexSize.x) / float(customTexSize.y);if(float(customTexSize.x) == float(uResolution.x) && float(customTexSize.y) == float(uResolution.y)) {\ndiscard;\n}if(0.4000 <= 0.0001 || 1.0000 <= 0.0001) {\ncol = vec4(0);\nif(1 == 1) {\ncol = bg;\n}\nfragColor = col;\nreturn;\n}vec2 pos = vec2(0.5, 0.5) + mix(vec2(0), (uMousePos-0.5), 0.0000);\nuv = uv - pos;\nfloat fovFactor = tan(radians(20.) * 0.5);\nvec3 rd = vec3(uv * fovFactor, 0.5);\ncol = raymarch(viewDir, rd);\nfloat dither = (randFibo(vTextureCoord.xy) - 0.5) / 255.0;\ncol += dither;col = mix(bg, col, 1.0000);\nfragColor = col;}"],"compiledVertexShaders":["#version 300 es\n// Copyright (c) Unicorn Studio. Licensed under the Unicorn Studio Commercial License.\n// Unauthorized copying, redistribution, or use in competing products is prohibited.\nprecision mediump float;in vec3 aVertexPosition;\nin vec2 aTextureCoord;uniform mat4 uMVMatrix;\nuniform mat4 uPMatrix;\nuniform mat4 uTextureMatrix;out vec2 vTextureCoord;\nout vec3 vVertexPosition;void main() {\ngl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);\nvTextureCoord = (uTextureMatrix * vec4(aTextureCoord, 0.0, 1.0)).xy;\n}"],"speed":0.66,"trackMouseMove":0,"trackAxes":"xy","trackMouse":0,"data":{"depth":false,"uniforms":{},"isBackground":false},"id":"card2_layer_2_sdf_shape","publicId":"3d_shape"},{"breakpoints":[],"visible":true,"aspectRatio":1,"userDownsample":1,"layerType":"effect","type":"outline","usesPingPong":false,"texture":false,"animating":false,"mouseMomentum":0,"mouseSpring":0,"isMask":0,"compiledFragmentShaders":["#version 300 es\n// Copyright (c) Unicorn Studio. Licensed under the Unicorn Studio Commercial License.\n// Unauthorized copying, redistribution, or use in competing products is prohibited.\nprecision highp float;\nin vec2 vTextureCoord;uniform sampler2D uTexture;\nuniform vec2 uResolution;\nvec3 blend (int blendMode, vec3 src, vec3 dst) {\nreturn src + dst;\n}\nvec4 applyLayerMix(vec4 color, vec4 bg, float amount) {\ncolor.rgb = mix(bg.rgb, color.rgb, amount);\ncolor.a = max(bg.a, amount);\nreturn color;\n}out vec4 fragColor;float luma(vec3 c) {\nreturn dot(c, vec3(0.299, 0.587, 0.114));\n}float interleavedGradientNoise(vec2 st) {\nreturn fract(52.9829189 * fract(dot(st, vec2(0.06711056, 0.00583715))));\n}void main() {\nvec2 uv = vTextureCoord;float thickness = 0.5000;vec2 pixel = (1.0 / uResolution) * max(thickness * 4.0, 0.001);\nfloat noise = interleavedGradientNoise(gl_FragCoord.xy);pixel *= mix(1.0, noise, 0.1);float tl = luma(texture(uTexture, uv + pixel * vec2(-1, -1)).rgb);\nfloat t = luma(texture(uTexture, uv + pixel * vec2( 0, -1)).rgb);\nfloat tr = luma(texture(uTexture, uv + pixel * vec2( 1, -1)).rgb);\nfloat l = luma(texture(uTexture, uv + pixel * vec2(-1, 0)).rgb);\nfloat r = luma(texture(uTexture, uv + pixel * vec2( 1, 0)).rgb);\nfloat bl = luma(texture(uTexture, uv + pixel * vec2(-1, 1)).rgb);\nfloat b = luma(texture(uTexture, uv + pixel * vec2( 0, 1)).rgb);\nfloat br = luma(texture(uTexture, uv + pixel * vec2( 1, 1)).rgb);float gx = -tl - 2.0 * l - bl + tr + 2.0 * r + br;\nfloat gy = -tl - 2.0 * t - tr + bl + 2.0 * b + br;\nfloat edge = length(vec2(gx, gy));float soft = max(1.0000 * 0.5, 0.001);\nedge = smoothstep(0.5000 - soft, 0.5000 + soft, edge);\nedge *= (0.5000 * 2.0);vec4 scene = texture(uTexture, uv);\nvec3 outline = vec3(1, 1, 1) * edge;\nvec3 blended = outline;blended = blend(1, outline, scene.rgb);vec4 col = applyLayerMix(vec4(blended, 1.0), scene, 0.2600);\nfragColor = col;}"],"compiledVertexShaders":["#version 300 es\n// Copyright (c) Unicorn Studio. Licensed under the Unicorn Studio Commercial License.\n// Unauthorized copying, redistribution, or use in competing products is prohibited.\nprecision mediump float;in vec3 aVertexPosition;\nin vec2 aTextureCoord;uniform mat4 uMVMatrix;\nuniform mat4 uPMatrix;\nuniform mat4 uTextureMatrix;out vec2 vTextureCoord;\nout vec3 vVertexPosition;void main() {\ngl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);\nvTextureCoord = (uTextureMatrix * vec4(aTextureCoord, 0.0, 1.0)).xy;\n}"],"trackMouse":0,"trackAxes":"xy","data":{"depth":false,"uniforms":{},"isBackground":false},"id":"card2_layer_3_outline","publicId":"outline"},{"layerType":"flattened","id":"card2_layer_4_flat","compiledFragmentShaders":["#version 300 es\n// Copyright (c) Unicorn Studio. Licensed under the Unicorn Studio Commercial License.\n// Unauthorized copying, redistribution, or use in competing products is prohibited.\nprecision highp float;\nin vec2 vTextureCoord;\nin vec3 vVertexPosition;\n\nuniform sampler2D uBgTexture;\nuniform vec2 uMousePos;\nuniform vec2 uResolution;\nuniform float uL0_ElemOpacity;\nuniform float uL1_Time;\nuniform float uL1_ElemOpacity;\nuniform float uL2_Time;\nuniform float uL2_ElemOpacity;\nuniform float uL3_Time;\nuniform float uL3_ElemOpacity;\n\nconst float MAX_ITERATIONS = 32.0;\nconst int MAX_LEVEL = 4;\nconst float TAU = 6.28318530718;\nconst float STEPS = 8.0;\nconst float PI = 3.14159265359;\nconst vec3 CH_R = vec3(1, 0, 0);\nconst vec3 CH_G = vec3(0, 1, 0);\nconst vec3 CH_B = vec3(0, 0, 1);\nvec2 caUV_L3;\nvec3 caDistort_L3;\nfloat caDist_L3;\nfloat caAmount_L3;\n\nout vec4 fragColor;\n\nfloat interleavedGradientNoise_L0(vec2 st) {\nreturn fract(52.9829189 * fract(dot(st, vec2(0.06711056, 0.00583715))));\n}\nvec4 godRays_L0(vec2 st) {\nvec3 color = vec3(0);\nfloat decay = mix(0.89, 0.965, 0.7800);\nvec2 pos = vec2(0.3722460220318238, 0.6297429620563035) - mix(vec2(0), (vec2(1. - uMousePos.x, 1. - uMousePos.y) - 0.5), 0.0000);\nfloat weight = 1.0;\nvec2 stepDir = (pos - st) / MAX_ITERATIONS * (0.25 + min(1., 0.7800)) * 0.75;\nfloat noise = interleavedGradientNoise_L0(st * uResolution);\nvec2 sampleUv = st + stepDir * noise;\nvec2 perpDir = vec2(-stepDir.y, stepDir.x);\nfloat intensity = 2.8 * 0.9000;\nfor (float i = 0.0;\ni < MAX_ITERATIONS;\ni++) {\nfloat theta = i/MAX_ITERATIONS;\nsampleUv += stepDir + (perpDir * theta * sin((noise * 0.25) * (1.0 + theta) * 50.0)) * 0.0000 * 0.25;\nvec4 samp = texture(uBgTexture, sampleUv);\nfloat lum = dot(samp.rgb, vec3(0.299, 0.587, 0.114));\nfloat thresh = smoothstep(0.4000 - 0.1, 0.4000, lum);\ncolor += samp.rgb * thresh * weight * intensity;\nweight *= decay;\nif(weight < 0.05) break;\n}\nreturn vec4(color / MAX_ITERATIONS, 1.0);\n}\nuvec2 pcg2d(uvec2 v) {\nv = v * 1664525u + 1013904223u;\nv.x += v.y * v.y * 1664525u + 1013904223u;\nv.y += v.x * v.x * 1664525u + 1013904223u;\nv ^= v >> 16;\nv.x += v.y * v.y * 1664525u + 1013904223u;\nv.y += v.x * v.x * 1664525u + 1013904223u;\nreturn v;\n}\nfloat randFibo(vec2 p) {\nuvec2 v = floatBitsToUint(p);\nv = pcg2d(v);\nuint r = v.x ^ v.y;\nreturn float(r) / float(0xffffffffu);\n}\nfloat getBayerFromCoordLevelScaled_L1(vec2 pixelpos, float scale) {\nfloat finalBayer = 0.0;\nfloat finalDivisor = 0.0;\nfloat layerMult = 1.0;\nfor(float bayerLevel = float(MAX_LEVEL);\nbayerLevel >= 1.0;\nbayerLevel--) {\nfloat bayerSize = exp2(bayerLevel) * 0.5 / scale;\nvec2 bayercoord = mod(floor(pixelpos.xy / bayerSize), 2.0);\nlayerMult *= 4.0;\nfloat byxx2 = bayercoord.x * 2.0;\nfinalBayer += mix(byxx2, 3.0 - byxx2, bayercoord.y) / 3.0 * layerMult;\nfinalDivisor += layerMult;\n}\nreturn (finalBayer / finalDivisor - 0.006);\n}\nfloat getBayerNoise_L1(vec2 st, float delta, float scale) {\nvec2 center = uResolution * 0.5;\nvec2 centered = st * uResolution - center;\nvec2 offset = vec2(\nmod(delta * 0.618033988749895, 16.0),\nmod(delta * 0.381966011250105, 16.0)\n) * 20.;\nvec2 final = (centered + center + offset);\nreturn getBayerFromCoordLevelScaled_L1(final, scale);\n}\nvec3 dither_L1(vec3 color, vec2 st) {\nfloat delta = floor(uL1_Time);\nvec2 offset = vec2(randFibo(vec2(123,16) + delta), randFibo(vec2(56,96) + delta));\nfloat noise = 0.0;\nnoise = getBayerNoise_L1(st, delta, 0.5);\nfloat dither_threshold = max(0.0001, 0.5000);\nfloat num_levels = 1.0 / dither_threshold;\nreturn floor(color * num_levels + noise) / num_levels;\n}\nvec3 getColor_L2(int index) {\nswitch(index) {\ncase 0: return vec3(0, 0, 0);\ncase 1: return vec3(0.0196078431372549, 0.3411764705882353, 0.1803921568627451);\ncase 2: return vec3(0.043137254901960784, 0.5215686274509804, 0.2901960784313726);\ncase 3: return vec3(0.06274509803921569, 0.7137254901960784, 0.403921568627451);\ncase 4: return vec3(0.13333333333333333, 1, 0.6549019607843137);\ncase 5: return vec3(0.807843137254902, 1, 0.8666666666666667);\ndefault: return vec3(0.0);\n}\n}\nfloat getStop_L2(int index) {\nswitch(index) {\ncase 0: return 0.0000;\ncase 1: return 0.2000;\ncase 2: return 0.4000;\ncase 3: return 0.6000;\ncase 4: return 0.8000;\ncase 5: return 1.0000;\ndefault: return 0.0;\n}\n}\nfloat deband_L2() {\nreturn (randFibo(gl_FragCoord.xy) - 0.5) / 255.0;\n}\nfloat luma_L2(vec3 color) {\nreturn dot(color, vec3(0.299, 0.587, 0.114));\n}\nvec3 linear_from_srgb_L2(vec3 rgb) {\nreturn pow(max(rgb, vec3(0.0)), vec3(2.2));\n}\nvec3 srgb_from_linear_L2(vec3 lin) {\nreturn pow(max(lin, vec3(0.0)), vec3(1.0/2.2));\n}\nvec3 safeCbrt_L2(vec3 v) {\nreturn sign(v) * pow(abs(v), vec3(1.0/3.0));\n}\nvec3 oklab_mix_L2(vec3 lin1, vec3 lin2, float a) {\nconst mat3 kCONEtoLMS = mat3(\n0.4121656120, 0.2118591070, 0.0883097947,\n0.5362752080, 0.6807189584, 0.2818474174,\n0.0514575653, 0.1074065790, 0.6302613616);\nconst mat3 kLMStoCONE = mat3(\n4.0767245293, -1.2681437731, -0.0041119885,\n-3.3072168827, 2.6093323231, -0.7034763098,\n0.2307590544, -0.3411344290, 1.7068625689);\nvec3 lms1 = safeCbrt_L2(kCONEtoLMS*lin1);\nvec3 lms2 = safeCbrt_L2(kCONEtoLMS*lin2);\nvec3 lms = mix(lms1, lms2, a);\nlms *= 1.0 + 0.02 * a * (1.0 - a);\nreturn kLMStoCONE*(lms*lms*lms);\n}\nvec3 getGradientColor_L2(float position) {\nposition = clamp(position, 0.0, 1.0);\nint count = 6 - 1;\nfor (int i = 0;\ni < count;\ni++) {\nfloat colorPosition = getStop_L2(i);\nfloat nextColorPosition = getStop_L2(i + 1);\nif (position <= nextColorPosition) {\nfloat stopDelta = nextColorPosition - colorPosition;\nfloat mixFactor = clamp(stopDelta > 0.0001 ? (position - colorPosition) / stopDelta : 0.0, 0.0, 1.0);\nvec3 linStart = linear_from_srgb_L2(getColor_L2(i));\nvec3 linEnd = linear_from_srgb_L2(getColor_L2(i + 1));\nvec3 mixedLin = oklab_mix_L2(linStart, linEnd, mixFactor);\nreturn srgb_from_linear_L2(mixedLin);\n}\n}\nreturn getColor_L2(count);\n}\nfloat ease_L3 (int easingFunc, float t) {\nreturn t;\n}\nmat2 rot_L3(float a) {\nreturn mat2(cos(a),-sin(a),sin(a),cos(a));\n}\nvec2 scaleAspect_L3(vec2 st) {\nreturn st * vec2(uResolution.x / uResolution.y, 1.0);\n}\nvec2 unscaleAspect_L3(vec2 st) {\nreturn st * vec2(uResolution.y / uResolution.x, 1.0);\n}\nvec2 scaleAspect_L3(vec2 st, float aspectRatio) {\nreturn st * vec2(aspectRatio, 1.0);\n}\nfloat smoothSegment_L3(float s) {\nreturn mix(s, smoothstep(0.0, 0.5, s) - smoothstep(0.5, 1.0, s), 0.0000);\n}\nvec3 channelDistort_L3(float segment) {\nreturn mix(mix(CH_R, CH_G, segment * 2.0), mix(CH_G, CH_B, (segment - 0.5) * 2.0), step(0.5, segment));\n}\nvec2 applyStyle_L3(vec2 st, vec2 pos, float angle) {\nst = rot_L3(angle * 2. * PI) * (st - pos) + pos;\nst = unscaleAspect_L3(st);\nreturn st;\n}\nvec2 style0_L3(vec2 st, vec2 pos, float divisions, float dist, float amount, float angle, out vec3 d) {\nfloat segment = smoothSegment_L3(fract((st.y + 1. - pos.y - 1. + uL3_Time * 0.01) * divisions));\nd = channelDistort_L3(segment);\nst.y -= pow(d.r, dist) / 10. * amount;\nst.y += pow(d.b, dist) / 10. * amount;\nreturn applyStyle_L3(st, pos, angle);\n}\nvec2 getStyle_L3(vec2 st, vec2 pos, float divisions, float dist, float amount, float angle, out vec3 d) {\nreturn style0_L3(st, pos, divisions, dist, amount, angle, d);\n}\nvec2 distortUV_L3(vec2 uv) {\nfloat aspectRatio = uResolution.x / uResolution.y;\nvec2 mPos = vec2(0.5, 0.5) + mix(vec2(0), (uMousePos - 0.5), 0.0000);\nfloat mDist = ease_L3(0, max(0., 1. - distance(uv * vec2(aspectRatio, 1), mPos * vec2(aspectRatio, 1)) * 4. * (1. - 1.0000)));\nvec2 pos = scaleAspect_L3(mix(vec2(0.5, 0.5), mPos, floor(1.0000)));\nvec2 st = scaleAspect_L3(uv);\nst = rot_L3(0.0000 * -2.0 * PI) * (st - pos) + pos;\nfloat divisions = 2. + 0.5000 * 30.;\nfloat dist = 0.2000 * 4. + 1.;\nfloat amount = 0.5000 * mDist;\ncaDist_L3 = dist;\ncaAmount_L3 = amount;\ncaUV_L3 = uv;\ncaDistort_L3 = vec3(0.0);\nif (abs(amount) <= 0.001) return uv;\nvec2 texelX = dFdx(st) * 1.5;\nvec2 texelY = dFdy(st) * 1.5;\nvec3 distort;\nvec3 scratchDistort;\nvec2 result = getStyle_L3(st, pos, divisions, dist, amount, 0.0000, distort);\nvec2 result1 = getStyle_L3(st + texelX, pos, divisions, dist, amount, 0.0000, scratchDistort);\nvec2 result2 = getStyle_L3(st + texelY, pos, divisions, dist, amount, 0.0000, scratchDistort);\nvec2 result3 = getStyle_L3(st - texelX, pos, divisions, dist, amount, 0.0000, scratchDistort);\nvec2 result4 = getStyle_L3(st - texelY, pos, divisions, dist, amount, 0.0000, scratchDistort);\ncaUV_L3 = result;\ncaDistort_L3 = distort;\nreturn (result + result1 + result2 + result3 + result4) / 5.;\n}\n\nvec4 computeLayer_L0(vec2 uv) {\nvec4 bg = texture(uBgTexture, uv);\nif(0.9000 <= 0.01) {\nvec4 color = bg;\nreturn color;\n}\nvec4 rays = godRays_L0(uv);\nrays.rgb *= vec3(1, 1, 1);\nvec4 color = vec4(bg.rgb + rays.rgb, bg.a + rays.r);\nreturn color;\n}\nvec4 computeLayer_L1(vec2 uv, vec4 prevLayerColor) {\nfloat delta = floor(uL1_Time);\nvec4 color = prevLayerColor;\ncolor.rgb = mix(color.rgb, dither_L1(color.rgb, vTextureCoord), 0.5000);\nreturn color;\n}\nvec4 computeLayer_L2(vec2 uv, vec4 prevLayerColor, float sharedDither) {\nvec4 color = prevLayerColor;\nif(color.a > 0.001) {\nfloat position = smoothstep(0., 1., luma_L2(color.rgb)) * (0.4000 * 2.);\nfloat posOffset = (dot(vec2(0.5, 0.5).x, vec2(0.5, 0.5).y) + 0.2600 + 0.0001) * 2.;\nposition -= (uL2_Time*0.01 + posOffset);\nfloat cycle = floor(position);\nbool reverse = 1.0000 > 0.5 && int(cycle) % 2 == 0;\nfloat animatedPos = reverse ? fract(-position) : fract(position);\nanimatedPos = reverse ? fract(-position) : fract(position);\nanimatedPos = clamp(animatedPos, 0.0, 1.0);\nvec3 gradientColor = getGradientColor_L2(animatedPos);\nfloat dither = sharedDither;\ngradientColor += dither;\nvec3 mixedColor = mix(color.rgb, gradientColor, 1.0000);\ncolor.rgb = mixedColor;\n}\nreturn color;\n;\n}\n\nvoid main() {\nvec2 uv = vTextureCoord;\nfloat sharedDither = deband_L2();\nvec2 uv_z1_raw = distortUV_L3(uv);\nvec2 uv_z1 = mix(uv, uv_z1_raw, clamp(uL3_ElemOpacity, 0.0, 1.0));\nvec4 result = vec4(0.0);\nvec4 c0 = computeLayer_L0(uv_z1);\nc0 *= uL0_ElemOpacity;\nresult = c0 + result * (1.0 - c0.a);\nvec4 c1 = computeLayer_L1(uv_z1, result);\nc1 *= uL1_ElemOpacity;\nresult = c1 + result * (1.0 - c1.a);\nvec4 c2 = computeLayer_L2(uv_z1, result, sharedDither);\nc2 *= uL2_ElemOpacity;\nresult = c2 + result * (1.0 - c2.a);\nfragColor = result;\n}"],"compiledVertexShaders":["#version 300 es\n// Copyright (c) Unicorn Studio. Licensed under the Unicorn Studio Commercial License.\n// Unauthorized copying, redistribution, or use in competing products is prohibited.\nprecision highp float;\nin vec3 aVertexPosition;\nin vec2 aTextureCoord;\nuniform mat4 uMVMatrix;\nuniform mat4 uPMatrix;\nout vec2 vTextureCoord;\nout vec3 vVertexPosition;\nvoid main() {\ngl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);\nvVertexPosition = aVertexPosition;\nvTextureCoord = aTextureCoord;\n}"],"sublayers":[{"id":"c1608ff5-81d5-411d-9b29-4224d8d0205f","publicId":"god_rays","layerType":"effect","type":"godrays","sublayerIndex":0,"opacity":1,"animating":false},{"id":"2b4f0e9b-f07c-40ad-ba4b-c270b6ff3b44","publicId":"dither","layerType":"effect","type":"dither","sublayerIndex":1,"opacity":1,"animating":false,"texture":{"src":"/assets/unicorn/blue_noise_med.png","sampler":"uBlueNoise"}},{"id":"7ad15378-1e19-42ec-8443-65e86ef2f0a8","publicId":"gradient_map","layerType":"effect","type":"gradientMap","sublayerIndex":2,"opacity":1,"animating":false},{"id":"25d00597-e155-485c-84da-e5d51cf14ce3","publicId":"blinds","layerType":"effect","type":"blinds","sublayerIndex":3,"opacity":1,"animating":true}],"data":{"uniforms":{"resolution":{"name":"uResolution","type":"2f","value":{"type":"Vec2","_x":1080,"_y":1080}},"mousePos":{"name":"uMousePos","type":"2f","value":{"type":"Vec2","_x":0.5,"_y":0.5}},"L0_elemOpacity":{"name":"uL0_ElemOpacity","type":"1f","value":1},"L1_time":{"name":"uL1_Time","type":"1f","value":0},"L1_elemOpacity":{"name":"uL1_ElemOpacity","type":"1f","value":1},"L2_time":{"name":"uL2_Time","type":"1f","value":0},"L2_elemOpacity":{"name":"uL2_ElemOpacity","type":"1f","value":1},"L3_time":{"name":"uL3_Time","type":"1f","value":0},"L3_elemOpacity":{"name":"uL3_ElemOpacity","type":"1f","value":1}},"textures":[{"sampler":"uBlueNoise","type":"media","src":"/assets/unicorn/blue_noise_med.png","sublayerIndex":1}],"timeUniforms":[{"key":"L3_time","speed":0.5,"animating":true}],"mouseUniforms":[],"hasMouseTracking":false,"hasVideoSublayers":false,"estimatedSublayerWorkRaw":372.2855543593206,"occlusion":{"candidateLayers":0}},"states":{"appear":[],"scroll":[],"hover":[],"mousemove":[]},"breakpoints":[],"userDownsample":1,"visible":true}],"options":{"name":"Copy of Card 2","fps":60,"dpi":1.5,"scale":1,"includeLogo":false,"isProduction":false,"flatten":true},"version":"2.1.12","id":"F43Socv0CpzTgciIQqKs"}