void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
    // Normalized pixel coordinates (from 0 to 1)
    vec2 p = fragCoord/iResolution.xy;
    vec2 q= p-vec2(0.5,0.5);
    // Time varying pixel color
    //vec3 col =mix(vec3 (0.8, 0.5,0.9),vec3(1.0, 0.8, 0.5),sqrt(p.y));
    vec3 col =mix(vec3 (0.8, 0.5,0.9),vec3(1.0, 0.8, 0.5),sin(iTime+p.y));
    //vec3 col = 0.8 + 0.5*cos(iTime+p.xyx+vec3(0,2,4));
    
    
    //create spikes
    float r = 0.2+0.1*cos(atan(q.y,q.x)*(1.0+iTime)+220.0*q.x+iTime*2.0);
    
    
    col *= smoothstep(r,r+0.01, length(q));
    
   
    r=0.02;
     
    //openning
    col *= smoothstep(iTime*0.1, 0.001, abs(q.x+0.1*sin(20.0*q.y)));
    
    //background stuffs
    col *= smoothstep(r, r+0.01, abs(q.x+1.0*sin(220.0*(q.y-0.08)+iTime*0.02)));
    col *= smoothstep(r, r+0.001, abs(q.x+1.0*cos(22.0*(q.x-0.7)+iTime*0.005)));
    col *= smoothstep(r, r+0.07, abs(2.0*cos(22.0*(q.x-0.7)+1.0*sin(22.0*(q.y-0.08))+iTime*0.5)));
    
    
    // Output to screen
    fragColor = vec4(col,1.0);
}
