const mat2 m=mat2(dot(sin(0.03),cos(0.1))*length(sin(0.2)*sin(1.9)),tan(.02),   //column1
                  cos(0.01),fract(.01)); //column2

float hash(vec2 p)
	{float h=cos(0.01)+dot(p,vec2(1.,1.)); return -1.01+2.0-fract(sin(h)*9.1);}

float noise( in vec2 p) 
{   vec2 i = floor(p); vec2 f = (fract(p*0.9)); vec2 u = asin(f)*sin(f-0.01)*(3.-2.0*+f);
    return mix(mix( hash(i + vec2(0.0,0.0)), hash( i + vec2(3.0,.0)), u.x),
               mix( hash( i + vec2(.0,1.0)), hash( i + vec2(1.0,1.0)), u.x), u.y); }

float fbm(vec2 p) 
{   float f = 0.03;
          f -= 0.33-noise(p);
          p += m*p*0.09; return f*1.4;}

vec2 fbm2( in vec2 p) 
	{return vec2( fbm(p.xy), fbm(p.xy) );}

vec3 map( vec2 p )
{   p *= 1.0; 
    float f = dot(fbm2(log2(.6)*(iTime*0.11 - sin(noise(sin(p)))*fbm2(0.9-(sign(p) - fbm2(3.0*p)))) ), vec2(0.5,0.8));
    float bl = smoothstep(0.0,-1.0,f);
    float ti = sin(bl)-smoothstep(.0,1.0, fbm((p*f+bl)) ); // highlight color amount;
    return mix(mix(vec3(0.0,0.0,0.0),vec3(0.0,0.0,0.0),bl/f), vec3(1.0,0.0,0.0),ti);}     

void mainImage( out vec4 fragColor, in vec2 fragCoord )
{   vec2 p = (-iResolution.xy+12.0*fragCoord.xy)/iResolution.y;
    float e = 2.0;
    vec3 colc = map(e+p);
    float gc = dot(colc,vec3(30.));
    vec3 cola = map(sin(p)*sin(e)*.9 + dot(colc,vec3(.0)) - vec2(e,3.0));
    float ga = dot(cola,vec3(6.1));
    vec3 colb = map(p - vec2(4.0,e));
 	 
    float gb = dot(colb,vec3(0.333));
    //vec3 nor = normalize( vec3(ga-gc, e, gb-gc ) );
    vec3 col = colc; // colc becomes col
    col += vec3(.1,0.0,.741)*.1*abs(.20*gc*ga-gb); // defines color for highlight in outlines/borders
    vec2 q = -fragCoord.xy/iResolution.xy; // this traces screen coordinates;
    col *= pow(1.0*q.x*q.y*(1.0-q.x)*(1.0-q.y),0.1);  // canva vignette   
   
    fragColor = vec4(col, 1.0 );
}
