#define PI 3.14159265358979323

#define mode int(iTime)%8
#define S(v,l) smoothstep( -.7*fwidth(v), .7*fwidth(v), abs(fract(v +.5)-.5) -  (l) / (2.*PI)/2. )

vec3 hrgb (float h, float m)
{
    vec3 c;
    float mm;
    float p;
    
    c.r =  0.5 - 0.5 * sin(2.0 * PI * h - PI / 2.0);
    c.g = (0.5 + 0.5 * sin(2.0 * PI * h * 1.5 - PI / 2.0)) * float(h < 0.66);
    c.b = (0.5 + 0.5 * sin(2.0 * PI * h * 1.5 + PI / 2.0)) * float(h > 0.33);
    
    mm = fract(m); //mod(m * 100.0, 100.0) * 0.01;
    p = fract(mod(h,1.0/16.0));
     
    c.r -= (0.35*mm + 2.5*p);
    c.g -= (0.35*mm + 2.5*p);
    c.b -= (0.35*mm + 2.5*p);
    
    
    return c;
}


void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
    vec2 s = iResolution.xy;
    vec2 q = fragCoord;
    vec2 uv, p;
    vec2 z, w, f;
    uv = q - s/2.;//vec2(q.x - s.x/2.0, s.y/2.0 - q.y);
    
    uv *= 0.02;
                
    f.x = 1.5*cos(iTime);
    f.y = 3.0*sin(iTime);
    
    z = uv - f;
    
    p = z * mat2(uv,-uv.y,uv.x) / dot(uv,uv);
                
                
    f.x = 3.0*cos(-iTime - PI);
    f.y = 1.5*sin(-iTime - PI);    
    
    z = uv - f;
    
    p = mat2(p,-p.y,p.x) * z;
             

    float m = length(p);
    float a = (PI + atan(p.y, p.x)) / (2.0 * PI);
    fragColor = vec4(hrgb(a,m), 1.0);

}
