#define erot(p,ax,t) (mix(dot(ax,p)*ax,p,cos(t))+cross(ax,p)*sin(t))
#define pcg3d(p,o) do{uvec3 q=floatBitsToUint(p)*123456798u+12346578u; q.x+=q.y*q.z;q.y+=q.x*q.z;q.z+=q.y*q.x;q^=q>>16u;q.x+=q.y*q.z;q.y+=q.x*q.z;q.z+=q.y*q.x; o=vec3(q)/float(-1U);}while(false)
#define pal(t,a) (a+a*cos(6.28*(t+vec3(1.,1.,1.))))
#define pal2(t) (.5+.5*cos(6.28*(1.*t+vec3(.0,.3,.7))))
#define  diam2(p,s) (abs(p).x+abs(p).y-s)*inversesqrt(3.)
#define tru(p,out) do{ vec2 id = floor(p)+.5; vec2 gv = p-id; gv.x  *= fract(452.6*sin(dot(id,vec2(452.5,985.5)))) > .5 ? -1.:1. ; gv.xy-=.5 * (gv.x >-gv.y ? 1. :-1.); out= abs(diam2(gv.xy,.5));  } while(false)
#define cd(p,o) do{vec3 cdp=abs(p);float cdd=0.,m;for(int j=0;j++<3;){cdd+=step(m=max(cdp.y,cdp.z),cdp.x)*m;cdp = cdp.yzx;}o=max(max(cdp.x,max(cdp.y,cdp.z))-3.,1.-cdd);}while(false)
#define fractal(p,o) do{vec3 fp=p;float s= 1.;for (int ii=0;ii<6;ii++){float q;cd(fp,q);o = max(o, q*s);fp = fract((fp-1.)*.5)*6.-3.;s/= 3.0;} }while(false)
#define tri(p,trir,triout ) do{vec2 trip=p;const float k = sqrt(3.0);trip.x = abs(trip.x) - trir;trip.y = trip.y + trir/k;if( trip.x+k*trip.y>0.0 ){ trip = vec2(trip.x-k*trip.y,-k*trip.x-trip.y)/2.0;}trip.x -= clamp( trip.x, -2.0*trir, 0.0 ); triout = -length(trip)*sign(trip.y);}while(false)
vec2 p=(FC.xy*2.-r)/min(r.x,r.y);
vec2 op=p;
vec3 rnd;
pcg3d(vec3(vec3(t,floor(p.xy*50.))),rnd);
vec3 col=vec3(0.);

float bpm = t*140./60.*(.5+min(15.5,.1*exp(mod(t,35.)*.1)));
vec3 trnd; pcg3d(vec3(floor(bpm)),trnd);;
bpm= smoothstep(0.,1.,fract(bpm))+floor(bpm);
float sq =(mod(bpm,10.));
//sq =-1.5;

vec3 subscreenRnd;pcg3d(trnd,subscreenRnd);
float screenRatio = r.y/r.x;

vec2 subscreenSize = vec2(1.,screenRatio);

p -=(max(vec2(.1),subscreenRnd.xy)-.5)*1.5;
p /=max(.1,subscreenRnd.z);

if(sq<1.){
 for(float i=0.,im=25.;i<im;i++){
   vec2 pp= p;
   pp.x+=sin(t+i/im*6.28);
   pp.y+=cos(i+t*.1);
   float d = length(pp)-.1-abs(dot(sin(p*3.),cos(p.yx*2.))*.1);
   d=.001/(.001+abs(d));
   col +=vec3(d);
 }
} else if(sq<2.)  {
 for(float i=0.,im=8.;i<im;i++){
   vec2 pp= p;

   pp=erot(pp.xyy,vec3(0.,0.,1.),i*i).xy;

   pp.x += sin(i);
   float sc = i/im;
   float fsc = fract(sc-t*.1);
   float m =mix(.1,10.,fsc);
   pp*=m;
   pp=fract(pp)-.5;
   float d=  min(abs(pp.x),abs(pp.y));
   d=.001/(.001+abs(d))*mix(10.,.0,1.-exp(-7.*fsc));
   col +=vec3(d);
 }
} else if( sq<3.) {
  for(float i=0.,im=32.;i++<im;){
   vec3 rnd; pcg3d(vec3(i),rnd);
   float d=  length(p+(rnd.xz-.5)*.1)-.3;
   d= (.001+.001*exp(-.5*fract(i/im+t)))/(.001+abs(d));
   col += vec3(1.,.5,.2)*d*(1.5+1.5*sin(i/im*6.28+t+atan(p.x,p.y)));
   p*=(1.-rnd.z*.05);
   }
} else if(sq<4.) {
 vec3 a;
 vec2 pp=p;
   float b;
   pp.y -=t*.05;
   vec3 z; pcg3d(vec3(floor(pp*20.).y),z) ;
   pp.x -=(b=t*(.1+.3*z.z));

   pcg3d(vec3( floor(pp*25.),0.),a);
   col = pal(b*4.5+length(a),a)*smoothstep(a.x,a.y,a.z);

}else if(sq<5.)
{
float d = 1.0;
       float ztime = t;
       for(int c =0;c<3;c++){
       ztime = smoothstep(.0,1.,pow(fract(ztime),2.))+floor(ztime);
       for(float i=1.,im=16.;i<im;i++){

           vec2 uuv = abs(p*rotate2D(i/im+ztime*i/im-t*.5)*pow(0.95,i))-.2/(sqrt(1.)/i*im);

           d = length(max(vec2(0.),uuv))+min(0.,max(uuv.x,uuv.y));
           d = max(0.,0.002/(.001+abs(d)));
           col[c] +=d*exp(-fract(ztime+.5+i/im));
       }
   }
   col = 1.-col;

}
else if(sq<6.){
 vec2 pp=p;
   pp*=8.;

 float bpm = floor(t)+smoothstep(.0,1.,fract(t));
 for(float i=0.,im=8.;i<im;i++){
      float q = fract(i/im);
     vec2  luv =pp+q;
     float tou;tru(luv*q+bpm,tou);
     col  += +exp(-5.*fract(bpm*2.+q))*sin(vec3(.3,.3,.7))*q*.1/tou;
     tru(p+q+bpm,tou);
    //col  += +exp(-5.*fract(bpm+q))*vec3(.1,.5,.1)*.256*.02/tou;
 }

}  else if(sq<7.){
 vec2 pp=p;
 vec3 ro=vec3(0.,0.,-10.);
 vec3 rd = normalize(vec3(pp,1.));
 for(float i=0.,e=0.,g=0.;i++<20.;){
    vec3 z = ro+rd*g;
    vec3 zz=z;
    zz.xz*=rotate2D(t);
     zz.xy*=rotate2D(t);
    //z.z += t;

    float h =0.; length(z)-.1;

    fractal(zz,h);
    g+=e=max(.001,(h));
    col+=(.5+.5*sin(t+g*1.0+vec3(1.,.5,.3)))/exp(10.*i*i*e);
 }
} else if(sq<8.) {

 float t = t*.5;
 for(int cc=0;cc<3;cc++){
 for(float i=0.,im=5.;i<im;i++){
    t = pow(fract(t),0.75)+floor(t);
float sc = 2.;
 vec2 zpp=  p*(sc=pow(sqrt(3.),i));
  zpp=erot(zpp.xyy,vec3(0.,0.,1.),3.14/6.*(1.+i)*t ).xy;
     float d ; tri(zpp,.4,d);abs(d/sc)-.002;
   d = min(-d,min(abs(zpp.x),abs(zpp.y))-.1);
 d= (.005-sin(atan(zpp.x,zpp.y)+t)*.004)/(.002+abs(d)-.001);
 col[cc] += (4.*(.5+.25*sin(t+i*vec3(.2,.5,.9)))*d/im)[cc];
 }


}col=1.-col;}else if(sq<9.){

    float d = float(1U);
   float im=16.;
   for(float i=0.;i++<im;){
    float d = min(d,abs(p.x+asin(sin(i/im*6.28+p.y*5.+3.14*exp(-3.*fract(t+(1.+i/im)))))*.4));
    col += pal2(i/im)*((.005+.005*exp(-3.*fract(t)))/(.001+d));
 }


}else if(sq<10.) {
  vec3 ro =vec3(0.,1.,-5.),rt=vec3(0.);

 ro.zx +=t; rt.zx +=t;

 vec3 z = normalize(rt-ro),x=vec3(z.z,0.,-z.x),y=cross(z,x);
 vec3 rd = mat3(x,y,z)*normalize(vec3(p,1.));
 float g=0.;
 for(float  i=0.,e=0.;i++<50.;){

     vec3 gp=ro+rd*g;
    vec3 cent=gp;
   cent.zx-=t;
   float d = 0.;
   vec4 pp=vec4(gp,1.);
    for(float j=0.;j++<2.;){

    d +=  .5*dot((sin(d+pp.xyz)),(cos(pp.yzx*2./pp.w)))/pp.w;
       pp.xyz = (abs(pp.xyz)-1.5);
       pp.xyz = erot(pp.xyz,normalize(vec3(.3,.5,.3)),j+.785);
       pp*=1.1;
    }

     float h = dot(gp,vec3(0.,1.,0.))+d*.2;
     g+=e=max(.01,h);
     col+=vec3(1.,.5,.1)*.0525/exp(i*i*e);  }
 col = mix(col,vec3(1.),1.-exp(-g*g*g*.001));

}
col += step(-abs(p.x),-.95)+step(-abs(p.y),-.42);
vec3 pcol = texelFetch(b,ivec2(FC.xy)+(mod(t,70.)>35. ? 1:0)*ivec2(int(sign(sin(p.xx*100.)))+int((rnd.x-.5)*10.)/1,0),0).rgb;
o.rgb = mix(pcol*vec3(.0,.993,.992)*(1.-.00*rnd.xyz)*step(-.5,sin(op.y*1000.)),col,step(abs(p.y),subscreenSize.y)*step(abs(p.x),subscreenSize.x));
o.rgb = max(vec3(0.),o.rgb);