#define SCALE 2.0
#define PI radians(180.0)
#define TAU (PI*2.0)
#define CS(a) vec2(cos(a), sin(a))
#define PT(u,r) smoothstep(0.0, r, r-length(u))
void mainImage( out vec4 O, in vec2 U )
{
    float n = -3.0; // spiral exponent
    float sec = 10.0; // time for lesser cycle
    float lt = -iTime/sec; // lesser cycle (color alignment)
    float gt = (iTime*TAU)/(sec*3.0); // greater cycle (left/right alignment)
    vec2 R = iResolution.xy;
    vec4 m = iMouse; m.xy = m.xy*2.0/R-1.0; // ±1x, ±1y
    float z = (m.z > 0.0) ? pow(1.0-abs(m.y), 2.0*sign(m.y)): 1.0; // mouse y zoom
    vec2 uv = (U-0.5*R)/R.y*SCALE*z; // apply cartesian, scale, zoom
    float px = length(fwidth(uv)*0.7); // pixel size
    float l = length(uv); // unit radius
    float r = pow(l, n); // spiral radius
    float sa = gt+round(r)*lt*TAU; // segmented spiral arc
    vec2 xy = CS(sa)*l; // point xy coords
    vec3 c = vec3(0); // background color
    float f = (r > 0.5) ? 1.0: -1.0; // flip trails
    vec2 g = vec2(atan(uv.y, uv.x), atan(-uv.y, -uv.x))*f; // spiral gradients
    g = mod(g-sa*f, TAU)/0.15; // continue building spiral gradients
    g = min(g, 1.0/g); // darken filter
    c += g.x*vec3(1.0, 0.3, 0.0)*0.1; // add orange gradient
    c += g.y*vec3(0.3, 0.0, 1.0)*0.2; // add purple gradient
    c *= texture(iChannel0, CS(lt)*l).xyz*4.0; // multiply with texture
    c += vec3(0.9, 0.7, 0.0)*PT(uv-xy, px*15.0)*0.32; // gold glow
    c += vec3(0.2, 0.4, 1.0)*PT(uv+xy, px*15.0)*0.4; // blue glow
    c += PT(uv-xy, px); // white line 1
    c += PT(uv+xy, px); // white line 2
    float d = mod(r+0.5, 1.0); // gradient to smooth edges
    d = min(d, 1.0-d); // darken filter
    c *= d*3.0; // smooth
    float cg = pow(max(1.0-length(uv), 0.0), 13.0); // center glow
    if (z < 1.0) cg *= z; // fade glow on zoom in
    c = max(c, cg); // lighten filter
    O = vec4(c*1.5, 1.0); // draw
}
