{
    "name": "Tunnel Vision",
    "description": "Endloser Tunnel mit Rotation",
    "vertex_shader": "attribute vec2 a_position;\nvoid main() {\n    gl_Position = vec4(a_position, 0.0, 1.0);\n}",
    "fragment_shader": "precision mediump float;\nuniform float u_time;\nuniform vec2 u_resolution;\nuniform vec2 u_mouseNorm;\nuniform float u_zoom;\n\nvoid main() {\n    vec2 uv = (gl_FragCoord.xy - 0.5 * u_resolution.xy) \/ u_resolution.y;\n    float t = u_time * 0.3;\n    float a = atan(uv.y, uv.x);\n    float r = length(uv);\n    float tunnel = 1.0 \/ r;\n    vec2 p = vec2(a * 3.0 \/ 6.2831 + t * 0.2, tunnel * 0.5 - t);\n    float grid = step(0.9, fract(p.x * 8.0)) + step(0.9, fract(p.y * 4.0));\n    vec3 col = vec3(0.0, 0.1, 0.2) * tunnel * 0.1;\n    col += vec3(0.0, 0.6, 0.9) * grid * tunnel * 0.15;\n    col += vec3(0.8, 0.2, 0.5) * grid * tunnel * 0.1 * sin(t * 2.0 + a * 3.0);\n    float centerGlow = exp(-r * 5.0);\n    col += vec3(0.5, 0.8, 1.0) * centerGlow;\n    vec2 mouseOffset = (u_mouseNorm - 0.5) * 0.3;\n    float mouseDist = length(uv - mouseOffset);\n    col += vec3(1.0, 0.5, 0.0) * smoothstep(0.3, 0.0, mouseDist) * 0.3;\n    col *= u_zoom;\n    gl_FragColor = vec4(col, 1.0);\n}"
}