float sdEquilateralTriangle(  in vec2 p, in float r ){
    const float k = sqrt(3.0);
    p.x = abs(p.x) - r;
    p.y = p.y + r/k;
    if( p.x+k*p.y>0.0 ) p=vec2(p.x-k*p.y,-k*p.x-p.y)/2.0;
    p.x -= clamp( p.x, -2.0*r, 0.0 );
    return -length(p)*sign(p.y);
}
vec3 palette1( float t ) {

    vec3 a = vec3(0.550, 0.580, 0.550);
    vec3 b = vec3(0.500, 0.500, 0.500);
    vec3 c = vec3(2.025, 2.025, 2.025);
    vec3 d = vec3(0.110, 0.333, 0.577);

    return a + b*cos( 6.28318*(c*t+d) );
}
vec3 palette5( float t ) {

    vec3 a = vec3(0.718, 0.768, 0.548);
    vec3 b = vec3(0.515, 0.550, 0.550);
    vec3 c = vec3(1.120, 1.120, 1.120);
    vec3 d = vec3(0.000, 0.333, 0.667);

    return a + b*cos( 6.28318*(c*t+d) );
}

void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
    vec2 iMouse = iMouse.xy / iResolution.xy;
    vec2 uv = (fragCoord * 2.0 - iResolution.xy) / iResolution.y;
    uv.x = abs(uv.x);
    vec2 polar = vec2(distance(uv.xy, vec2(0,0)), atan(uv.y,uv.x));

    for(int i = 0; i < 2;i++){
        polar.xy = abs(polar.xy);
        float complexity = mix(0.5*(sin(0.3*iTime)+2.3),2. , iMouse.x);
        polar = fract(complexity*polar)-0.5;
    }

    vec2 triangle = vec2(0.,0.15);
    float factor = 3.+0.0005*sin(iTime)*sin(iTime);

    polar.xy = factor*abs(polar.xy);
    float d_t = sdEquilateralTriangle(polar + triangle, 0.6 );
    d_t = 0.5*sin(1.5*sin(0.4*iTime+d_t*0.7)*abs(d_t));

    vec4 col1 = vec4(palette1(3.*d_t + 0.5*iTime),1.0);
    vec4 col2 = vec4(palette5(3.*d_t + 0.5*iTime),1.0);
    float col_slider = 0.5*sin(1.5*iTime)+0.5;
    vec4 col = mix(col1, col2, col_slider);

    fragColor = col;
}
