{
	"history": [
		{
			"layerType": "flattened",
			"id": "flat_0",
			"compiledFragmentShaders": [
				"#version 300 es\nprecision highp float;\nin vec2 vTextureCoord;\nin vec3 vVertexPosition;\n\nuniform vec2 uMousePos;\nuniform float uL0_ElemOpacity;\nuniform float uL1_Time;\nuniform vec2 uResolution;\nuniform float uL1_ElemOpacity;\nuniform vec2 uArtboardResolution;\nuniform vec2 uL2_MousePos;\nuniform float uL2_ElemOpacity;\nuniform float uL3_Time;\nuniform float uL4_Time;\nuniform float uL4_ElemOpacity;\n\nconst float PI = 3.14159265359;\nconst float TAU = 6.28318530718;\nconst int MAX_ITERATIONS = 8;\n\nout vec4 fragColor;\n\nvec2 rotate_L0(vec2 coord, float angle) {\nfloat s = sin(angle);\nfloat c = cos(angle);\nreturn vec2(\ncoord.x * c - coord.y * s,\ncoord.x * s + coord.y * c\n);\n}\nvec3 getBgColor_L0(vec2 uv) {\nreturn vec3(0, 0, 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 deband_L1() {\nreturn (randFibo(gl_FragCoord.xy) - 0.5) / 255.0;\n}\nvec3 anchoredPal_L1(float t, vec3 col1, vec3 col2, float chroma) {\nvec3 mid = 0.5 * (col1 + col2);\nvec3 axisAmp = 0.5 * (col2 - col1);\nvec3 base = mid + axisAmp * cos(TAU * t);\nvec3 axis = length(axisAmp) > 0.0001 ? normalize(axisAmp) : vec3(1.0, 0.0, 0.0);\nvec3 ref = abs(axis.x) > 0.9 ? vec3(0.0, 1.0, 0.0) : vec3(1.0, 0.0, 0.0);\nvec3 tangent1 = normalize(cross(axis, ref));\nvec3 tangent2 = normalize(cross(axis, tangent1));\nfloat richness = 0.24 * length(axisAmp) + 0.02;\nvec3 ripple =\ntangent1 * sin(TAU * (t * 2.0 + 0.123)) +\ntangent2 * sin(TAU * (t * 3.0 + 0.437));\nvec3 col = base + (richness * chroma) * ripple;\ncol = clamp(col, -10.0, 10.0);\ncol = 1./(1. + exp(-col * 4. + 0.25) * 7.5);\nreturn clamp(col, 0.0, 1.0);\n}\nmat2 rot_L1(float a) {\nreturn mat2(cos(a),-sin(a),sin(a),cos(a));\n}\nvec3 hash3_L1(vec2 p) {\nvec3 q = vec3(dot(p,vec2(127.1,311.7)),\ndot(p,vec2(269.5,183.3)),\ndot(p,vec2(419.2,371.9)));\nreturn fract(sin(q)*43758.5453);\n}\nfloat voronoise_L1(vec2 uv, float driftVal, float time, float direction, float scale, float phase) {\nfloat u = 1.;\nfloat v = 1.;\nvec2 d = vec2(0, driftVal * time * 0.008);\nvec2 skew = vec2(direction, 1.0 - direction);\nvec2 x = (uv * skew * 2.) - d * mix(1., 14., scale) * 2.;\nvec2 p = floor(x);\nvec2 f = fract(x);\nfloat k = 1.0 + 63.0 * pow(1.0-v,4.0);\nfloat va = 0.0;\nfloat wt = 0.0;\nfor( int j=-2;\nj<=2;\nj++ )\nfor( int i=-2;\ni<=2;\ni++ ) {\nvec2 g = vec2( float(i),float(j) );\nvec3 o = hash3_L1( p + g ) * vec3(u,u,1.0);\no.xy += 0.5 * vec2(sin(time * 0.1 + phase + o.x * 6.28));\nvec2 r = g - f + o.xy;\nfloat dd = dot(r,r);\nfloat ww = pow( 1.0-smoothstep(0.0,1.414,sqrt(dd)), k );\nva += o.z*ww;\nwt += ww;\n}\nreturn va / max(wt, 1e-5);\n}\nfloat getVoronoiNoise_L1(vec2 uv, float turbulence, float driftVal, float time, float direction, float scale, float phase) {\nfloat turb = turbulence * 2.5;\nfloat noise = voronoise_L1(uv, driftVal, time, direction, scale, phase);\nreturn mix(0.5, noise, turb);\n}\nfloat getNoise_L1(vec2 uv, float turbulence, float driftVal, float time, float scale, float direction, float phase) {\nreturn getVoronoiNoise_L1(uv, turbulence, driftVal, time, direction, scale, phase);\n}\nvec3 blend (int blendMode, vec3 src, vec3 dst) {\nreturn vec3((dst.x <= 0.5) ? (2.0 * src.x * dst.x) : (1.0 - 2.0 * (1.0 - dst.x) * (1.0 - src.x)), (dst.y <= 0.5) ? (2.0 * src.y * dst.y) : (1.0 - 2.0 * (1.0 - dst.y) * (1.0 - src.y)), (dst.z <= 0.5) ? (2.0 * src.z * dst.z) : (1.0 - 2.0 * (1.0 - dst.z) * (1.0 - src.z)));\n}\nvec2 rotate2D_L2(vec2 p, float angle) {\nfloat s = sin(angle);\nfloat c = cos(angle);\nreturn vec2(p.x * c - p.y * s, p.x * s + p.y * c);\n}\nvec2 getAnchorOffsets_L2() {\nreturn vec2(0.5, 0.5);\n}\nvec3 getFillColor_L2(vec2 localPos, vec2 elementSize, float signedDist, float maxInset) {\nvec2 halfSize = elementSize * 0.5;\nvec2 p = localPos - halfSize;\nreturn vec3(0.7607843137254902, 0, 0);\n}\nfloat sdBox_L2(vec2 p, vec2 b) {\nvec2 d = abs(p) - b;\nreturn length(max(d, 0.0)) + min(max(d.x, d.y), 0.0);\n}\nfloat sdEllipse_L2(vec2 p, vec2 ab) {\nvec2 q = p / ab;\nreturn (length(q) - 1.0) * min(ab.x, ab.y);\n}\nfloat sdShape_L2(vec2 canvasPosPx, vec2 elementPosPx, vec2 elementSizePx, float rotationTurns) {\nvec2 p = vec2(0.0);\nvec2 halfSize = vec2(0.0);\nelementSizePx = abs(elementSizePx);\nvec2 centerPx = elementPosPx + elementSizePx * 0.5;\nvec2 rel = canvasPosPx - centerPx;\nvec2 local = rotate2D_L2(rel, -rotationTurns * TAU) + elementSizePx * 0.5;\np = local - elementSizePx * 0.5;\nhalfSize = elementSizePx * 0.5;\nreturn sdEllipse_L2(p, vec2(max(halfSize.x, 0.00001), max(halfSize.y, 0.00001)));\nreturn sdBox_L2(p, halfSize);\n}\nvec4 sampleShape_L2(vec2 canvasUV) {\nvec2 canvasPosPx = vec2(canvasUV.x * uArtboardResolution.x, (1.0 - canvasUV.y) * uArtboardResolution.y);\nfloat absWidth = 0.6000 * uArtboardResolution.x;\nfloat absHeight = 0.9361 * uArtboardResolution.y;\nabsHeight = absWidth / 1.0256;\nvec2 elementSizePx = vec2(absWidth, absHeight);\nvec2 elementPosPx = vec2(0.5000, 0.4993) * uArtboardResolution - getAnchorOffsets_L2() * elementSizePx;\nfloat dist = sdShape_L2(canvasPosPx, elementPosPx, elementSizePx, 0.0000);\nfloat aa = max(length(vec2(dFdx(dist), dFdy(dist))), 0.75);\nfloat uvGrad = max(length(dFdx(canvasUV)), length(dFdy(canvasUV)));\nfloat seamFactor = smoothstep(0.01, 0.03, uvGrad);\naa = mix(aa, 0.75, seamFactor);\nfloat fillAlpha = 1.0 - smoothstep(mix(0.0, -150., 1.5000), mix(aa, 150., 1.5000), dist);\nfillAlpha = mix(fillAlpha, step(dist, 0.0), seamFactor);\nvec2 localPos;\nlocalPos = rotate2D_L2(canvasPosPx - (elementPosPx + elementSizePx * 0.5), 0.0000 * -TAU) + elementSizePx * 0.5;\nvec2 localSize;\nlocalSize = elementSizePx;\nvec2 centerPx;\ncenterPx = elementPosPx + elementSizePx * 0.5;\nfloat centerDist = sdShape_L2(centerPx, elementPosPx, elementSizePx, 0.0000);\nfloat maxInset = max(-centerDist, 0.00001);\nvec3 fillRgb = getFillColor_L2(localPos, localSize, dist, maxInset);\nfloat finalFillAlpha = fillAlpha * 1.0000;\nvec4 fill = vec4(fillRgb * finalFillAlpha, finalFillAlpha);\nfloat strokeAlpha = 0.0;\nvec4 stroke = vec4(vec3(0, 0, 0) * strokeAlpha, strokeAlpha);\nvec4 col = stroke + fill * (1.0 - stroke.a);\nreturn col;\n}\nfloat ease_L3 (int easingFunc, float t) {\nreturn t;\n}\nvec3 hash33_L3(vec3 p3) {\np3 = fract(p3 * vec3(0.1031, 0.11369, 0.13787));\np3 += dot(p3, p3.yxz + 19.19);\nreturn -1.0 + 2.0 * fract(vec3(\n(p3.x + p3.y) * p3.z,\n(p3.x + p3.z) * p3.y,\n(p3.y + p3.z) * p3.x\n));\n}\nfloat perlin_noise_L3(vec3 p) {\nvec3 pi = floor(p);\nvec3 pf = p - pi;\nvec3 w = pf * pf * (3.0 - 2.0 * pf);\nfloat n000 = dot(pf - vec3(0.0, 0.0, 0.0), hash33_L3(pi + vec3(0.0, 0.0, 0.0)));\nfloat n100 = dot(pf - vec3(1.0, 0.0, 0.0), hash33_L3(pi + vec3(1.0, 0.0, 0.0)));\nfloat n010 = dot(pf - vec3(0.0, 1.0, 0.0), hash33_L3(pi + vec3(0.0, 1.0, 0.0)));\nfloat n110 = dot(pf - vec3(1.0, 1.0, 0.0), hash33_L3(pi + vec3(1.0, 1.0, 0.0)));\nfloat n001 = dot(pf - vec3(0.0, 0.0, 1.0), hash33_L3(pi + vec3(0.0, 0.0, 1.0)));\nfloat n101 = dot(pf - vec3(1.0, 0.0, 1.0), hash33_L3(pi + vec3(1.0, 0.0, 1.0)));\nfloat n011 = dot(pf - vec3(0.0, 1.0, 1.0), hash33_L3(pi + vec3(0.0, 1.0, 1.0)));\nfloat n111 = dot(pf - vec3(1.0, 1.0, 1.0), hash33_L3(pi + vec3(1.0, 1.0, 1.0)));\nfloat nx00 = mix(n000, n100, w.x);\nfloat nx01 = mix(n001, n101, w.x);\nfloat nx10 = mix(n010, n110, w.x);\nfloat nx11 = mix(n011, n111, w.x);\nfloat nxy0 = mix(nx00, nx10, w.y);\nfloat nxy1 = mix(nx01, nx11, w.y);\nfloat nxyz = mix(nxy0, nxy1, w.z);\nreturn nxyz;\n}\nvec2 distortUV_L3(vec2 uv) {\nvec2 st = uv;\nfloat aspectRatio = uResolution.x / max(uResolution.y, 0.001);\nvec2 aspectVec = vec2(aspectRatio, 1.);\nvec2 mPos = vec2(0.5017421602787456, 0.49163763066202093) + mix(vec2(0), (uMousePos-0.5), 0.0000);\nfloat mixRadiusStep = step(1.0, 1.0000);\nvec2 pos = mix(vec2(0.5017421602787456, 0.49163763066202093), mPos, mixRadiusStep);\nfloat dist = ease_L3(0, max(0.,1. - length(st * aspectVec - mPos * aspectVec) * 4. * (1. - 1.0000)));\nfloat sprd = (0.2000 + 0.01) / ((aspectRatio + 1.) / 2.);\nfloat amt = (0.8000 * 2.0) * 0.01 * dist;\nif(amt <= 0.) {\nreturn st;\n}\nvec2 invPos = 1. - pos;\nfloat freq = 5. * sprd;\nfloat t = 0.0000 * 5. + uL3_Time * 0.0166;\nfloat degrees = 360. * (0.5000 * 6.);\nfloat rad = degrees * PI / 180.;\nfor (int i = 0;\ni < MAX_ITERATIONS;\ni++) {\nvec2 clampedSt = clamp(st, -1., 2.);\nvec2 scaled = (clampedSt - 0.5) * aspectVec + invPos;\nfloat perlin = perlin_noise_L3(vec3((scaled - 0.5) * freq, t)) - 0.5;\nfloat ang = perlin * rad;\nst += vec2(cos(ang), sin(ang)) * amt;\n}\nreturn mix(uv, clamp(st, 0., 1.), 1.0000);\n}\n\nvec4 computeLayer_L0(vec2 uv) {\nvec2 pos = vec2(0.5, 0.5) + mix(vec2(0), (uMousePos-0.5), 0.0000);\nuv -= pos;\nuv /= max(0.5000*2., 1e-5);\nuv = rotate_L0(uv, (0.0000 - 0.5) * 2. * PI);\nvec4 color = vec4(getBgColor_L0(uv), 1.0000);\nreturn color;\n}\nvec4 computeLayer_L1(vec2 uv, vec4 prevLayerColor, float sharedDither) {\nfloat aspectRatio = uResolution.x/uResolution.y;\nvec2 aspect = vec2(aspectRatio, 1.0);\nvec2 mPos = vec2(0.5, 0.5) + mix(vec2(0), (uMousePos-0.5), 0.0000);\nvec2 pos = mix(vec2(0.5, 0.5), mPos, 0.0000);\nfloat scale = mix(1., 14., 0.1200);\nvec2 drift = vec2(0, 0.0000 * uL1_Time * 0.0125);\nmat2 rotation = rot_L1(0.0000 * 2. * PI);\nvec2 st = (uv - pos) * aspect * scale * rotation;\nfloat noise = 0.0;\nnoise = getNoise_L1(st, 0.5400, 0.0000, uL1_Time, 0.1200, 0.5000, 0.0000);\nvec4 color = prevLayerColor;\nvec4 bg = color;\nfloat shift = 0.3700 + (1.0000 * uL1_Time * 0.01);\nvec3 noiseColor = anchoredPal_L1(noise + shift, vec3(0.4, 0, 0), vec3(1, 0.32941176470588235, 0.32941176470588235), 0.6300);\ncolor.rgb = noiseColor.rgb;\nfloat dither = sharedDither;\ncolor.rgb += dither * 0.5;\ncolor = clamp(color, 0.0, 1.0) * 1.0000;\nreturn color;\n}\nvec4 computeLayer_L2(vec2 uv) {\nvec2 pos = (uL2_MousePos - 0.5) * 1.0000;\nuv -= pos;\nreturn sampleShape_L2(uv);\n}\nvec4 computeLayer_L4(vec2 uv, vec4 prevLayerColor) {\nvec4 color = prevLayerColor;\nif(color.a <= 0.001) {\nreturn vec4(0);\n}\nvec2 st = uv;\nvec3 grainRGB = vec3(0);\nst *= uResolution;\nfloat delta = fract((floor(uL4_Time)/20.));\ngrainRGB = vec3(\nrandFibo(st + vec2(1, 2) + delta),\nrandFibo(st + vec2(2, 3) + delta),\nrandFibo(st + vec2(3, 4) + delta)\n);\ncolor.rgb = mix(color.rgb, blend(5, grainRGB, color.rgb), 0.1300);\nreturn color;\n}\n\nvoid main() {\nvec2 uv = vTextureCoord;\nfloat sharedDither = deband_L1();\nvec2 uv_z1 = distortUV_L3(uv);\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, sharedDither);\nc1 *= uL1_ElemOpacity;\nresult = c1 + result * (1.0 - c1.a);\nvec4 c2 = computeLayer_L2(uv_z1);\n{\nvec3 _s = c2.rgb / max(c2.a, 0.0001);\nvec3 _d = result.rgb;\nc2 = vec4(vec3((_d.x <= 0.5) ? (2.0 * _s.x * _d.x) : (1.0 - 2.0 * (1.0 - _d.x) * (1.0 - _s.x)), (_d.y <= 0.5) ? (2.0 * _s.y * _d.y) : (1.0 - 2.0 * (1.0 - _d.y) * (1.0 - _s.y)), (_d.z <= 0.5) ? (2.0 * _s.z * _d.z) : (1.0 - 2.0 * (1.0 - _d.z) * (1.0 - _s.z))), 1.0) * (c2.a * uL2_ElemOpacity);\n}\nresult = c2 + result * (1.0 - c2.a);\nvec4 c4 = computeLayer_L4(uv, result);\nc4 *= uL4_ElemOpacity;\nresult = c4 + result * (1.0 - c4.a);\nfragColor = result;\n}"
			],
			"compiledVertexShaders": [
				"#version 300 es\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": "gradient",
					"layerType": "effect",
					"type": "gradient",
					"sublayerIndex": 0,
					"opacity": 1,
					"animating": false
				},
				{
					"id": "noise_fill",
					"layerType": "effect",
					"type": "noiseFill",
					"sublayerIndex": 1,
					"opacity": 1,
					"animating": true
				},
				{
					"id": "shape",
					"layerType": "shape",
					"sublayerIndex": 2,
					"opacity": 0.6,
					"blendMode": "OVERLAY",
					"animating": false,
					"width": 0.6,
					"widthMode": 0,
					"height": 0.9360797342192693,
					"heightMode": 2,
					"left": 0.5,
					"top": 0.49930555555555556,
					"anchorPoint": 8,
					"aspectRatio": 1.0255536626916524
				},
				{
					"id": "flow_field",
					"layerType": "effect",
					"type": "flowField",
					"sublayerIndex": 3,
					"opacity": 1,
					"animating": true
				},
				{
					"id": "grain",
					"layerType": "effect",
					"type": "grain",
					"sublayerIndex": 4,
					"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
					},
					"artboardResolution": {
						"name": "uArtboardResolution",
						"type": "2f",
						"value": { "type": "Vec2", "_x": 1440, "_y": 900 }
					},
					"L2_aspectRatio": {
						"name": "uAspectRatio",
						"type": "1f",
						"value": 1.0255536626916524
					},
					"L2_elemOpacity": {
						"name": "uL2_ElemOpacity",
						"type": "1f",
						"value": 0.6
					},
					"L3_time": { "name": "uL3_Time", "type": "1f", "value": 0 },
					"L3_elemOpacity": {
						"name": "uL3_ElemOpacity",
						"type": "1f",
						"value": 1
					},
					"L4_time": { "name": "uL4_Time", "type": "1f", "value": 0 },
					"L4_elemOpacity": {
						"name": "uL4_ElemOpacity",
						"type": "1f",
						"value": 1
					},
					"L2_mousePos": {
						"name": "uL2_MousePos",
						"type": "2f",
						"value": { "type": "Vec2", "_x": 0.5, "_y": 0.5 }
					}
				},
				"textures": [],
				"timeUniforms": [
					{ "key": "L1_time", "speed": 0.13, "animating": true },
					{ "key": "L3_time", "speed": 0.1, "animating": true },
					{ "key": "L4_time", "speed": 0.5, "animating": true }
				],
				"mouseUniforms": [
					{
						"key": "L2_mousePos",
						"momentum": 1,
						"spring": 0,
						"trackAxes": "xy"
					}
				],
				"hasMouseTracking": true,
				"hasVideoSublayers": false,
				"estimatedSublayerWorkRaw": 389.70456030897117,
				"occlusion": { "candidateLayers": 0 }
			},
			"states": { "appear": [], "scroll": [], "hover": [], "mousemove": [] },
			"breakpoints": [],
			"userDownsample": 1,
			"visible": true
		}
	],
	"options": {
		"name": "Flow gradient  (Remix)",
		"fps": 60,
		"dpi": 1.5,
		"scale": 1,
		"includeLogo": false,
		"isProduction": true,
		"flatten": true
	},
	"version": "2.1.1",
	"id": "f27oSuu9HJoDJWOlRs9k"
}
