#define H(a) (sin(vec3(0,1.047,2.094)+vec3((a)*6.2832))*.5+.5) // color
#define RT(a) mat2(cos(m.a*1.5708+vec4(0,-1.5708,1.5708,0)))   // rotate
#define G(v) max( H(u.v+s), H(1./u.v+s) ) * gt(u.v, 1.-tr)

float gt(float x, float lb) // grid transform
{
    if (abs(x) < 1.) x = 1./x; // reciprocals
    float l = max(0., 1.-(abs(fract(x+.5)-.5)/fwidth(x))), // lines
          g = 1.-abs(sin(x*3.1416)), // glow
          d = min(1., 1./abs(x)); // darken
    return (l*lb+g*((1.-lb)+.4))*d;
}

void mainImage(out vec4 RGBA, in vec2 XY)
{
    vec3  u, c, v, g;
    vec2  R = iResolution.xy,
          m = (iMouse.xy/R*4.)-2.,
          o;
    float p = 2., // aa pass
          T = iTime,
          t = T/5.,
          tr = sin(t)*.5+.5, // transform with time
          s = .2+sin(T)*.1,  // hue shift with time
          S = 2.+(3.14*tr);  // scale
    if (iMouse.z < 1.) m = vec2(sin(t/2.)*.4, sin(t)*.3); // rotate with time
    for (int k = 0; k < int(p*p); k++) // aa loop
    {
        o = vec2(k%2, k/2)/p; // aa offset
        u = normalize(vec3((XY-.5*R+o)/R.y, .5))*S; // 3d coords
        u.yz *= RT(y), // pitch
        u.xz *= RT(x); // yaw
        g = sin(u*3.14);
        if (sign(cos(t)) < 0.) g = 1./g;
        g = vec3(g.x*g.y*g.z);
        u /= u.yzx;
        u = u*(1.-tr)+g*tr; // transform
        v = G(x) + G(y) + G(z);
        c += v;
    }
    c /= p*p;
    RGBA = vec4(c*sqrt(c)*1.5, 1);
}
