{
    "name": "Chromatic Wave",
    "description": "Chromatische Aberration Sinus-Welle",
    "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 \/ u_resolution.xy;\n    float t = u_time * 0.5;\n    vec2 p = (uv - 0.5) * vec2(u_resolution.x \/ u_resolution.y, 1.0) * u_zoom;\n    float wave = sin(p.x * 3.0 + t) * 0.3;\n    float dist = p.y - wave;\n    vec3 col = vec3(0.0);\n    float r = exp(-pow((dist + 0.02 * sin(p.x * 5.0 + t)) * 8.0, 2.0));\n    float g = exp(-pow(dist * 8.0, 2.0));\n    float b = exp(-pow((dist - 0.02 * sin(p.x * 5.0 + t)) * 8.0, 2.0));\n    col = vec3(r, g, b);\n    float glow = exp(-abs(dist) * 3.0) * 0.3;\n    col += vec3(0.2, 0.3, 0.5) * glow;\n    float mouseDist = length(uv - u_mouseNorm);\n    col += vec3(0.5, 0.3, 0.8) * smoothstep(0.25, 0.0, mouseDist) * 0.4;\n    gl_FragColor = vec4(col, 1.0);\n}"
}