void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
    vec2 uv = (fragCoord.xy / iResolution.xy) * 2.0 - 1.0;
    uv.x *= iResolution.x / iResolution.y;
    float scale = sin(abs(1.0 + iTime) * 0.02);
    float rotation = 0.11;
    vec2 center = vec2(0.0);

    float r = length(uv - center);
    float angle = atan(uv.y - center.y, uv.x - center.x) + rotation;
    float s = scale / pow(r, 3.0);
    vec2 newUV = vec2(cos(angle), sin(angle)) * s + center;

    float time = iTime * 0.1;
    float c1 = abs(sin(newUV.x * 50.0 + newUV.y * 20.0 + time));
    float c2 = abs(cos(newUV.x * 5.0 + newUV.y * 20.0 + time));
    float c3 = abs(sin(newUV.x * 4.0 + newUV.y * 8.0 + time));

    vec3 color = vec3(c1, c2, c3);
    fragColor = vec4(color, 1.0);
}
