code snippet
precision mediump float;
uniform vec2 resolution;
uniform float time;
void main(){
vec2 uv=(gl_FragCoord.xy*2.0-resolution.xy)/min(resolution.x,resolution.y);
float z=1.0/(abs(uv.y)+0.18);
float x=uv.x*z;
float y=z+time*1.2;
float gx=1.0-smoothstep(0.0,0.035,abs(fract(x)-0.5));
float gy=1.0-smoothstep(0.0,0.035,abs(fract(y)-0.5));
float horizon=smoothstep(0.0,0.7,z/8.0);
vec3 col=vec3(0.0,0.02,0.06)+(gx+gy)*horizon*vec3(0.1,0.85,1.0);
col+=pow(max(0.0,1.0-length(uv)),3.0)*vec3(0.6,0.1,1.0);
gl_FragColor=vec4(col,1.0);