{"id":3011,"date":"2026-05-19T18:21:11","date_gmt":"2026-05-19T16:21:11","guid":{"rendered":"https:\/\/vair.world\/?page_id=3011"},"modified":"2026-05-20T22:23:26","modified_gmt":"2026-05-20T20:23:26","slug":"fahrzeuge-testseite","status":"publish","type":"page","link":"https:\/\/vair.world\/en\/fahrzeuge-testseite\/","title":{"rendered":"Fahrzeuge (Testseite)"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"3011\" class=\"elementor elementor-3011\" data-elementor-settings=\"{&quot;ha_cmc_init_switcher&quot;:&quot;no&quot;}\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-dfbecfd e-con-full e-flex e-con e-parent\" data-id=\"dfbecfd\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;_ha_eqh_enable&quot;:false}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-10ad07a ha-css-transform-yes elementor-widget elementor-widget-html\" data-id=\"10ad07a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"gradient-balken\">\r\n  <canvas style=\"--gradient-color-1:#0c2c4c;\r\n  --gradient-color-2:#b33c3d;\r\n  --gradient-color-3:#b49c44;\r\n  --gradient-color-4:#0c2c4c;\" id=\"gradient-canvas\" data-transition-in><\/canvas>\r\n<\/div>\r\n\r\n<script>\r\n\twindow.addEventListener('DOMContentLoaded', (e) => {\r\n\t\tvar gradient = new Gradient;\r\n\t\tgradient.initGradient(\"#gradient-canvas\");\r\n\t});\r\n<\/script>\r\n\r\n<script>\r\n    function normalizeColor(hexCode) {\r\n\treturn [\r\n\t\t((hexCode >> 16) & 255) \/ 255,\r\n\t\t((hexCode >> 8) & 255) \/ 255,\r\n\t\t(255 & hexCode) \/ 255\r\n\t];\r\n}\r\n[\"SCREEN\", \"LINEAR_LIGHT\"].reduce(\r\n\t(hexCode, t, n) => Object.assign(hexCode, { [t]: n }),\r\n\t{}\r\n);\r\nclass MiniGl {\r\n\tconstructor(canvas, width, height, debug = !1) {\r\n\t\tconst _miniGl = this,\r\n\t\t\tdebug_output =\r\n\t\t\t\t-1 !== document.location.search.toLowerCase().indexOf(\"debug=webgl\");\r\n\t\t(_miniGl.canvas = canvas),\r\n\t\t\t(_miniGl.gl = _miniGl.canvas.getContext(\"webgl\", { antialias: !0 })),\r\n\t\t\t(_miniGl.meshes = []);\r\n\t\tconst context = _miniGl.gl;\r\n\t\twidth && height && this.setSize(width, height),\r\n\t\t\t_miniGl.lastDebugMsg,\r\n\t\t\t(_miniGl.debug =\r\n\t\t\t\tdebug && debug_output\r\n\t\t\t\t\t? function (e) {\r\n\t\t\t\t\t\t\tconst t = new Date();\r\n\t\t\t\t\t\t\tt - _miniGl.lastDebugMsg > 1e3 && console.log(\"---\"),\r\n\t\t\t\t\t\t\t\tconsole.log(\r\n\t\t\t\t\t\t\t\t\tt.toLocaleTimeString() +\r\n\t\t\t\t\t\t\t\t\t\tArray(Math.max(0, 32 - e.length)).join(\" \") +\r\n\t\t\t\t\t\t\t\t\t\te +\r\n\t\t\t\t\t\t\t\t\t\t\": \",\r\n\t\t\t\t\t\t\t\t\t...Array.from(arguments).slice(1)\r\n\t\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t\t\t(_miniGl.lastDebugMsg = t);\r\n\t\t\t\t\t  }\r\n\t\t\t\t\t: () => {}),\r\n\t\t\tObject.defineProperties(_miniGl, {\r\n\t\t\t\tMaterial: {\r\n\t\t\t\t\tenumerable: !1,\r\n\t\t\t\t\tvalue: class {\r\n\t\t\t\t\t\tconstructor(vertexShaders, fragments, uniforms = {}) {\r\n\t\t\t\t\t\t\tconst material = this;\r\n\t\t\t\t\t\t\tfunction getShaderByType(type, source) {\r\n\t\t\t\t\t\t\t\tconst shader = context.createShader(type);\r\n\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\tcontext.shaderSource(shader, source),\r\n\t\t\t\t\t\t\t\t\tcontext.compileShader(shader),\r\n\t\t\t\t\t\t\t\t\tcontext.getShaderParameter(shader, context.COMPILE_STATUS) ||\r\n\t\t\t\t\t\t\t\t\t\tconsole.error(context.getShaderInfoLog(shader)),\r\n\t\t\t\t\t\t\t\t\t_miniGl.debug(\"Material.compileShaderSource\", { source: source }),\r\n\t\t\t\t\t\t\t\t\tshader\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tfunction getUniformVariableDeclarations(uniforms, type) {\r\n\t\t\t\t\t\t\t\treturn Object.entries(uniforms)\r\n\t\t\t\t\t\t\t\t\t.map(([uniform, value]) => value.getDeclaration(uniform, type))\r\n\t\t\t\t\t\t\t\t\t.join(\"\\n\");\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t(this.uniforms = uniforms), (this.uniformInstances = []);\r\n\t\t\t\t\t\t\tconst prefix = \"\\n              precision highp float;\\n            \";\r\n\t\t\t\t\t\t\t(this.vertexSource = `\\n              ${prefix}\\n              attribute vec4 position;\\n              attribute vec2 uv;\\n              attribute vec2 uvNorm;\\n              ${getUniformVariableDeclarations(\r\n\t\t\t\t\t\t\t\t_miniGl.commonUniforms,\r\n\t\t\t\t\t\t\t\t\"vertex\"\r\n\t\t\t\t\t\t\t)}\\n              ${getUniformVariableDeclarations(\r\n\t\t\t\t\t\t\t\tuniforms,\r\n\t\t\t\t\t\t\t\t\"vertex\"\r\n\t\t\t\t\t\t\t)}\\n              ${vertexShaders}\\n            `),\r\n\t\t\t\t\t\t\t\t(this.Source = `\\n              ${prefix}\\n              ${getUniformVariableDeclarations(\r\n\t\t\t\t\t\t\t\t\t_miniGl.commonUniforms,\r\n\t\t\t\t\t\t\t\t\t\"fragment\"\r\n\t\t\t\t\t\t\t\t)}\\n              ${getUniformVariableDeclarations(\r\n\t\t\t\t\t\t\t\t\tuniforms,\r\n\t\t\t\t\t\t\t\t\t\"fragment\"\r\n\t\t\t\t\t\t\t\t)}\\n              ${fragments}\\n            `),\r\n\t\t\t\t\t\t\t\t(this.vertexShader = getShaderByType(\r\n\t\t\t\t\t\t\t\t\tcontext.VERTEX_SHADER,\r\n\t\t\t\t\t\t\t\t\tthis.vertexSource\r\n\t\t\t\t\t\t\t\t)),\r\n\t\t\t\t\t\t\t\t(this.fragmentShader = getShaderByType(\r\n\t\t\t\t\t\t\t\t\tcontext.FRAGMENT_SHADER,\r\n\t\t\t\t\t\t\t\t\tthis.Source\r\n\t\t\t\t\t\t\t\t)),\r\n\t\t\t\t\t\t\t\t(this.program = context.createProgram()),\r\n\t\t\t\t\t\t\t\tcontext.attachShader(this.program, this.vertexShader),\r\n\t\t\t\t\t\t\t\tcontext.attachShader(this.program, this.fragmentShader),\r\n\t\t\t\t\t\t\t\tcontext.linkProgram(this.program),\r\n\t\t\t\t\t\t\t\tcontext.getProgramParameter(this.program, context.LINK_STATUS) ||\r\n\t\t\t\t\t\t\t\t\tconsole.error(context.getProgramInfoLog(this.program)),\r\n\t\t\t\t\t\t\t\tcontext.useProgram(this.program),\r\n\t\t\t\t\t\t\t\tthis.attachUniforms(void 0, _miniGl.commonUniforms),\r\n\t\t\t\t\t\t\t\tthis.attachUniforms(void 0, this.uniforms);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tattachUniforms(name, uniforms) {\r\n\t\t\t\t\t\t\tconst material = this;\r\n\t\t\t\t\t\t\tvoid 0 === name\r\n\t\t\t\t\t\t\t\t? Object.entries(uniforms).forEach(([name, uniform]) => {\r\n\t\t\t\t\t\t\t\t\t\tmaterial.attachUniforms(name, uniform);\r\n\t\t\t\t\t\t\t\t  })\r\n\t\t\t\t\t\t\t\t: \"array\" == uniforms.type\r\n\t\t\t\t\t\t\t\t? uniforms.value.forEach((uniform, i) =>\r\n\t\t\t\t\t\t\t\t\t\tmaterial.attachUniforms(`${name}[${i}]`, uniform)\r\n\t\t\t\t\t\t\t\t  )\r\n\t\t\t\t\t\t\t\t: \"struct\" == uniforms.type\r\n\t\t\t\t\t\t\t\t? Object.entries(uniforms.value).forEach(([uniform, i]) =>\r\n\t\t\t\t\t\t\t\t\t\tmaterial.attachUniforms(`${name}.${uniform}`, i)\r\n\t\t\t\t\t\t\t\t  )\r\n\t\t\t\t\t\t\t\t: (_miniGl.debug(\"Material.attachUniforms\", {\r\n\t\t\t\t\t\t\t\t\t\tname: name,\r\n\t\t\t\t\t\t\t\t\t\tuniform: uniforms\r\n\t\t\t\t\t\t\t\t  }),\r\n\t\t\t\t\t\t\t\t  material.uniformInstances.push({\r\n\t\t\t\t\t\t\t\t\t\tuniform: uniforms,\r\n\t\t\t\t\t\t\t\t\t\tlocation: context.getUniformLocation(material.program, name)\r\n\t\t\t\t\t\t\t\t  }));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tUniform: {\r\n\t\t\t\t\tenumerable: !1,\r\n\t\t\t\t\tvalue: class {\r\n\t\t\t\t\t\tconstructor(e) {\r\n\t\t\t\t\t\t\t(this.type = \"float\"),\r\n\t\t\t\t\t\t\t\tObject.assign(this, e),\r\n\t\t\t\t\t\t\t\t(this.typeFn =\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tfloat: \"1f\",\r\n\t\t\t\t\t\t\t\t\t\tint: \"1i\",\r\n\t\t\t\t\t\t\t\t\t\tvec2: \"2fv\",\r\n\t\t\t\t\t\t\t\t\t\tvec3: \"3fv\",\r\n\t\t\t\t\t\t\t\t\t\tvec4: \"4fv\",\r\n\t\t\t\t\t\t\t\t\t\tmat4: \"Matrix4fv\"\r\n\t\t\t\t\t\t\t\t\t}[this.type] || \"1f\"),\r\n\t\t\t\t\t\t\t\tthis.update();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tupdate(value) {\r\n\t\t\t\t\t\t\tvoid 0 !== this.value &&\r\n\t\t\t\t\t\t\t\tcontext[`uniform${this.typeFn}`](\r\n\t\t\t\t\t\t\t\t\tvalue,\r\n\t\t\t\t\t\t\t\t\t0 === this.typeFn.indexOf(\"Matrix\") ? this.transpose : this.value,\r\n\t\t\t\t\t\t\t\t\t0 === this.typeFn.indexOf(\"Matrix\") ? this.value : null\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tgetDeclaration(name, type, length) {\r\n\t\t\t\t\t\t\tconst uniform = this;\r\n\t\t\t\t\t\t\tif (uniform.excludeFrom !== type) {\r\n\t\t\t\t\t\t\t\tif (\"array\" === uniform.type)\r\n\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\tuniform.value[0].getDeclaration(name, type, uniform.value.length) +\r\n\t\t\t\t\t\t\t\t\t\t`\\nconst int ${name}_length = ${uniform.value.length};`\r\n\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\tif (\"struct\" === uniform.type) {\r\n\t\t\t\t\t\t\t\t\tlet name_no_prefix = name.replace(\"u_\", \"\");\r\n\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t(name_no_prefix =\r\n\t\t\t\t\t\t\t\t\t\t\tname_no_prefix.charAt(0).toUpperCase() + name_no_prefix.slice(1)),\r\n\t\t\t\t\t\t\t\t\t\t`uniform struct ${name_no_prefix} \\n                                {\\n` +\r\n\t\t\t\t\t\t\t\t\t\t\tObject.entries(uniform.value)\r\n\t\t\t\t\t\t\t\t\t\t\t\t.map(([name, uniform]) =>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tuniform.getDeclaration(name, type).replace(\/^uniform\/, \"\")\r\n\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\t.join(\"\") +\r\n\t\t\t\t\t\t\t\t\t\t\t`\\n} ${name}${length > 0 ? `[${length}]` : \"\"};`\r\n\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\treturn `uniform ${uniform.type} ${name}${\r\n\t\t\t\t\t\t\t\t\tlength > 0 ? `[${length}]` : \"\"\r\n\t\t\t\t\t\t\t\t};`;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tPlaneGeometry: {\r\n\t\t\t\t\tenumerable: !1,\r\n\t\t\t\t\tvalue: class {\r\n\t\t\t\t\t\tconstructor(width, height, n, i, orientation) {\r\n\t\t\t\t\t\t\tcontext.createBuffer(),\r\n\t\t\t\t\t\t\t\t(this.attributes = {\r\n\t\t\t\t\t\t\t\t\tposition: new _miniGl.Attribute({\r\n\t\t\t\t\t\t\t\t\t\ttarget: context.ARRAY_BUFFER,\r\n\t\t\t\t\t\t\t\t\t\tsize: 3\r\n\t\t\t\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t\t\t\tuv: new _miniGl.Attribute({ target: context.ARRAY_BUFFER, size: 2 }),\r\n\t\t\t\t\t\t\t\t\tuvNorm: new _miniGl.Attribute({\r\n\t\t\t\t\t\t\t\t\t\ttarget: context.ARRAY_BUFFER,\r\n\t\t\t\t\t\t\t\t\t\tsize: 2\r\n\t\t\t\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t\t\t\tindex: new _miniGl.Attribute({\r\n\t\t\t\t\t\t\t\t\t\ttarget: context.ELEMENT_ARRAY_BUFFER,\r\n\t\t\t\t\t\t\t\t\t\tsize: 3,\r\n\t\t\t\t\t\t\t\t\t\ttype: context.UNSIGNED_SHORT\r\n\t\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t\t\tthis.setTopology(n, i),\r\n\t\t\t\t\t\t\t\tthis.setSize(width, height, orientation);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tsetTopology(e = 1, t = 1) {\r\n\t\t\t\t\t\t\tconst n = this;\r\n\t\t\t\t\t\t\t(n.xSegCount = e),\r\n\t\t\t\t\t\t\t\t(n.ySegCount = t),\r\n\t\t\t\t\t\t\t\t(n.vertexCount = (n.xSegCount + 1) * (n.ySegCount + 1)),\r\n\t\t\t\t\t\t\t\t(n.quadCount = n.xSegCount * n.ySegCount * 2),\r\n\t\t\t\t\t\t\t\t(n.attributes.uv.values = new Float32Array(2 * n.vertexCount)),\r\n\t\t\t\t\t\t\t\t(n.attributes.uvNorm.values = new Float32Array(2 * n.vertexCount)),\r\n\t\t\t\t\t\t\t\t(n.attributes.index.values = new Uint16Array(3 * n.quadCount));\r\n\t\t\t\t\t\t\tfor (let e = 0; e <= n.ySegCount; e++)\r\n\t\t\t\t\t\t\t\tfor (let t = 0; t <= n.xSegCount; t++) {\r\n\t\t\t\t\t\t\t\t\tconst i = e * (n.xSegCount + 1) + t;\r\n\t\t\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t\t\t((n.attributes.uv.values[2 * i] = t \/ n.xSegCount),\r\n\t\t\t\t\t\t\t\t\t\t(n.attributes.uv.values[2 * i + 1] = 1 - e \/ n.ySegCount),\r\n\t\t\t\t\t\t\t\t\t\t(n.attributes.uvNorm.values[2 * i] = (t \/ n.xSegCount) * 2 - 1),\r\n\t\t\t\t\t\t\t\t\t\t(n.attributes.uvNorm.values[2 * i + 1] = 1 - (e \/ n.ySegCount) * 2),\r\n\t\t\t\t\t\t\t\t\t\tt < n.xSegCount && e < n.ySegCount)\r\n\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\tconst s = e * n.xSegCount + t;\r\n\t\t\t\t\t\t\t\t\t\t(n.attributes.index.values[6 * s] = i),\r\n\t\t\t\t\t\t\t\t\t\t\t(n.attributes.index.values[6 * s + 1] = i + 1 + n.xSegCount),\r\n\t\t\t\t\t\t\t\t\t\t\t(n.attributes.index.values[6 * s + 2] = i + 1),\r\n\t\t\t\t\t\t\t\t\t\t\t(n.attributes.index.values[6 * s + 3] = i + 1),\r\n\t\t\t\t\t\t\t\t\t\t\t(n.attributes.index.values[6 * s + 4] = i + 1 + n.xSegCount),\r\n\t\t\t\t\t\t\t\t\t\t\t(n.attributes.index.values[6 * s + 5] = i + 2 + n.xSegCount);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tn.attributes.uv.update(),\r\n\t\t\t\t\t\t\t\tn.attributes.uvNorm.update(),\r\n\t\t\t\t\t\t\t\tn.attributes.index.update(),\r\n\t\t\t\t\t\t\t\t_miniGl.debug(\"Geometry.setTopology\", {\r\n\t\t\t\t\t\t\t\t\tuv: n.attributes.uv,\r\n\t\t\t\t\t\t\t\t\tuvNorm: n.attributes.uvNorm,\r\n\t\t\t\t\t\t\t\t\tindex: n.attributes.index\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tsetSize(width = 1, height = 1, orientation = \"xz\") {\r\n\t\t\t\t\t\t\tconst geometry = this;\r\n\t\t\t\t\t\t\t(geometry.width = width),\r\n\t\t\t\t\t\t\t\t(geometry.height = height),\r\n\t\t\t\t\t\t\t\t(geometry.orientation = orientation),\r\n\t\t\t\t\t\t\t\t(geometry.attributes.position.values &&\r\n\t\t\t\t\t\t\t\t\tgeometry.attributes.position.values.length ===\r\n\t\t\t\t\t\t\t\t\t\t3 * geometry.vertexCount) ||\r\n\t\t\t\t\t\t\t\t\t(geometry.attributes.position.values = new Float32Array(\r\n\t\t\t\t\t\t\t\t\t\t3 * geometry.vertexCount\r\n\t\t\t\t\t\t\t\t\t));\r\n\t\t\t\t\t\t\tconst o = width \/ -2,\r\n\t\t\t\t\t\t\t\tr = height \/ -2,\r\n\t\t\t\t\t\t\t\tsegment_width = width \/ geometry.xSegCount,\r\n\t\t\t\t\t\t\t\tsegment_height = height \/ geometry.ySegCount;\r\n\t\t\t\t\t\t\tfor (let yIndex = 0; yIndex <= geometry.ySegCount; yIndex++) {\r\n\t\t\t\t\t\t\t\tconst t = r + yIndex * segment_height;\r\n\t\t\t\t\t\t\t\tfor (let xIndex = 0; xIndex <= geometry.xSegCount; xIndex++) {\r\n\t\t\t\t\t\t\t\t\tconst r = o + xIndex * segment_width,\r\n\t\t\t\t\t\t\t\t\t\tl = yIndex * (geometry.xSegCount + 1) + xIndex;\r\n\t\t\t\t\t\t\t\t\t(geometry.attributes.position.values[\r\n\t\t\t\t\t\t\t\t\t\t3 * l + \"xyz\".indexOf(orientation[0])\r\n\t\t\t\t\t\t\t\t\t] = r),\r\n\t\t\t\t\t\t\t\t\t\t(geometry.attributes.position.values[\r\n\t\t\t\t\t\t\t\t\t\t\t3 * l + \"xyz\".indexOf(orientation[1])\r\n\t\t\t\t\t\t\t\t\t\t] = -t);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tgeometry.attributes.position.update(),\r\n\t\t\t\t\t\t\t\t_miniGl.debug(\"Geometry.setSize\", {\r\n\t\t\t\t\t\t\t\t\tposition: geometry.attributes.position\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tMesh: {\r\n\t\t\t\t\tenumerable: !1,\r\n\t\t\t\t\tvalue: class {\r\n\t\t\t\t\t\tconstructor(geometry, material) {\r\n\t\t\t\t\t\t\tconst mesh = this;\r\n\t\t\t\t\t\t\t(mesh.geometry = geometry),\r\n\t\t\t\t\t\t\t\t(mesh.material = material),\r\n\t\t\t\t\t\t\t\t(mesh.wireframe = !1),\r\n\t\t\t\t\t\t\t\t(mesh.attributeInstances = []),\r\n\t\t\t\t\t\t\t\tObject.entries(mesh.geometry.attributes).forEach(([e, attribute]) => {\r\n\t\t\t\t\t\t\t\t\tmesh.attributeInstances.push({\r\n\t\t\t\t\t\t\t\t\t\tattribute: attribute,\r\n\t\t\t\t\t\t\t\t\t\tlocation: attribute.attach(e, mesh.material.program)\r\n\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t\t\t_miniGl.meshes.push(mesh),\r\n\t\t\t\t\t\t\t\t_miniGl.debug(\"Mesh.constructor\", { mesh: mesh });\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tdraw() {\r\n\t\t\t\t\t\t\tcontext.useProgram(this.material.program),\r\n\t\t\t\t\t\t\t\tthis.material.uniformInstances.forEach(({ uniform: e, location: t }) =>\r\n\t\t\t\t\t\t\t\t\te.update(t)\r\n\t\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t\t\tthis.attributeInstances.forEach(({ attribute: e, location: t }) =>\r\n\t\t\t\t\t\t\t\t\te.use(t)\r\n\t\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t\t\tcontext.drawElements(\r\n\t\t\t\t\t\t\t\t\tthis.wireframe ? context.LINES : context.TRIANGLES,\r\n\t\t\t\t\t\t\t\t\tthis.geometry.attributes.index.values.length,\r\n\t\t\t\t\t\t\t\t\tcontext.UNSIGNED_SHORT,\r\n\t\t\t\t\t\t\t\t\t0\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tremove() {\r\n\t\t\t\t\t\t\t_miniGl.meshes = _miniGl.meshes.filter((e) => e != this);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tAttribute: {\r\n\t\t\t\t\tenumerable: !1,\r\n\t\t\t\t\tvalue: class {\r\n\t\t\t\t\t\tconstructor(e) {\r\n\t\t\t\t\t\t\t(this.type = context.FLOAT),\r\n\t\t\t\t\t\t\t\t(this.normalized = !1),\r\n\t\t\t\t\t\t\t\t(this.buffer = context.createBuffer()),\r\n\t\t\t\t\t\t\t\tObject.assign(this, e),\r\n\t\t\t\t\t\t\t\tthis.update();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tupdate() {\r\n\t\t\t\t\t\t\tvoid 0 !== this.values &&\r\n\t\t\t\t\t\t\t\t(context.bindBuffer(this.target, this.buffer),\r\n\t\t\t\t\t\t\t\tcontext.bufferData(this.target, this.values, context.STATIC_DRAW));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tattach(e, t) {\r\n\t\t\t\t\t\t\tconst n = context.getAttribLocation(t, e);\r\n\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\tthis.target === context.ARRAY_BUFFER &&\r\n\t\t\t\t\t\t\t\t\t(context.enableVertexAttribArray(n),\r\n\t\t\t\t\t\t\t\t\tcontext.vertexAttribPointer(\r\n\t\t\t\t\t\t\t\t\t\tn,\r\n\t\t\t\t\t\t\t\t\t\tthis.size,\r\n\t\t\t\t\t\t\t\t\t\tthis.type,\r\n\t\t\t\t\t\t\t\t\t\tthis.normalized,\r\n\t\t\t\t\t\t\t\t\t\t0,\r\n\t\t\t\t\t\t\t\t\t\t0\r\n\t\t\t\t\t\t\t\t\t)),\r\n\t\t\t\t\t\t\t\tn\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tuse(e) {\r\n\t\t\t\t\t\t\tcontext.bindBuffer(this.target, this.buffer),\r\n\t\t\t\t\t\t\t\tthis.target === context.ARRAY_BUFFER &&\r\n\t\t\t\t\t\t\t\t\t(context.enableVertexAttribArray(e),\r\n\t\t\t\t\t\t\t\t\tcontext.vertexAttribPointer(\r\n\t\t\t\t\t\t\t\t\t\te,\r\n\t\t\t\t\t\t\t\t\t\tthis.size,\r\n\t\t\t\t\t\t\t\t\t\tthis.type,\r\n\t\t\t\t\t\t\t\t\t\tthis.normalized,\r\n\t\t\t\t\t\t\t\t\t\t0,\r\n\t\t\t\t\t\t\t\t\t\t0\r\n\t\t\t\t\t\t\t\t\t));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\tconst a = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\r\n\t\t_miniGl.commonUniforms = {\r\n\t\t\tprojectionMatrix: new _miniGl.Uniform({ type: \"mat4\", value: a }),\r\n\t\t\tmodelViewMatrix: new _miniGl.Uniform({ type: \"mat4\", value: a }),\r\n\t\t\tresolution: new _miniGl.Uniform({ type: \"vec2\", value: [1, 1] }),\r\n\t\t\taspectRatio: new _miniGl.Uniform({ type: \"float\", value: 1 })\r\n\t\t};\r\n\t}\r\n\tsetSize(e = 640, t = 480) {\r\n\t\t(this.width = e),\r\n\t\t\t(this.height = t),\r\n\t\t\t(this.canvas.width = e),\r\n\t\t\t(this.canvas.height = t),\r\n\t\t\tthis.gl.viewport(0, 0, e, t),\r\n\t\t\t(this.commonUniforms.resolution.value = [e, t]),\r\n\t\t\t(this.commonUniforms.aspectRatio.value = e \/ t),\r\n\t\t\tthis.debug(\"MiniGL.setSize\", { width: e, height: t });\r\n\t}\r\n\tsetOrthographicCamera(e = 0, t = 0, n = 0, i = -2e3, s = 2e3) {\r\n\t\t(this.commonUniforms.projectionMatrix.value = [\r\n\t\t\t2 \/ this.width,\r\n\t\t\t0,\r\n\t\t\t0,\r\n\t\t\t0,\r\n\t\t\t0,\r\n\t\t\t2 \/ this.height,\r\n\t\t\t0,\r\n\t\t\t0,\r\n\t\t\t0,\r\n\t\t\t0,\r\n\t\t\t2 \/ (i - s),\r\n\t\t\t0,\r\n\t\t\te,\r\n\t\t\tt,\r\n\t\t\tn,\r\n\t\t\t1\r\n\t\t]),\r\n\t\t\tthis.debug(\r\n\t\t\t\t\"setOrthographicCamera\",\r\n\t\t\t\tthis.commonUniforms.projectionMatrix.value\r\n\t\t\t);\r\n\t}\r\n\trender() {\r\n\t\tthis.gl.clearColor(0, 0, 0, 0),\r\n\t\t\tthis.gl.clearDepth(1),\r\n\t\t\tthis.meshes.forEach((e) => e.draw());\r\n\t}\r\n}\r\nfunction e(object, propertyName, val) {\r\n\treturn (\r\n\t\tpropertyName in object\r\n\t\t\t? Object.defineProperty(object, propertyName, {\r\n\t\t\t\t\tvalue: val,\r\n\t\t\t\t\tenumerable: !0,\r\n\t\t\t\t\tconfigurable: !0,\r\n\t\t\t\t\twritable: !0\r\n\t\t\t  })\r\n\t\t\t: (object[propertyName] = val),\r\n\t\tobject\r\n\t);\r\n}\r\nclass Gradient {\r\n\tconstructor(...t) {\r\n\t\te(this, \"el\", void 0),\r\n\t\t\te(this, \"cssVarRetries\", 0),\r\n\t\t\te(this, \"maxCssVarRetries\", 200),\r\n\t\t\te(this, \"angle\", 0),\r\n\t\t\te(this, \"isLoadedClass\", !1),\r\n\t\t\te(this, \"isScrolling\", !1),\r\n\t\t\te(this, \"scrollingTimeout\", void 0),\r\n\t\t\te(this, \"scrollingRefreshDelay\", 200),\r\n\t\t\te(this, \"isIntersecting\", !1),\r\n\t\t\te(this, \"shaderFiles\", void 0),\r\n\t\t\te(this, \"vertexShader\", void 0),\r\n\t\t\te(this, \"sectionColors\", void 0),\r\n\t\t\te(this, \"computedCanvasStyle\", void 0),\r\n\t\t\te(this, \"conf\", void 0),\r\n\t\t\te(this, \"uniforms\", void 0),\r\n\t\t\te(this, \"t\", 1253106),\r\n\t\t\te(this, \"last\", 0),\r\n\t\t\te(this, \"width\", void 0),\r\n\t\t\te(this, \"minWidth\", 1111),\r\n\t\t\te(this, \"height\", 600),\r\n\t\t\te(this, \"xSegCount\", void 0),\r\n\t\t\te(this, \"ySegCount\", void 0),\r\n\t\t\te(this, \"mesh\", void 0),\r\n\t\t\te(this, \"material\", void 0),\r\n\t\t\te(this, \"geometry\", void 0),\r\n\t\t\te(this, \"minigl\", void 0),\r\n\t\t\te(this, \"scrollObserver\", void 0),\r\n\t\t\te(this, \"amp\", 320),\r\n\t\t\te(this, \"seed\", 5),\r\n\t\t\te(this, \"freqX\", 14e-5),\r\n\t\t\te(this, \"freqY\", 29e-5),\r\n\t\t\te(this, \"freqDelta\", 1e-5),\r\n\t\t\te(this, \"activeColors\", [1, 1, 1, 1]),\r\n\t\t\te(this, \"isMetaKey\", !1),\r\n\t\t\te(this, \"isGradientLegendVisible\", !1),\r\n\t\t\te(this, \"isMouseDown\", !1),\r\n\t\t\te(this, \"handleScroll\", () => {\r\n\t\t\t\tclearTimeout(this.scrollingTimeout),\r\n\t\t\t\t\t(this.scrollingTimeout = setTimeout(\r\n\t\t\t\t\t\tthis.handleScrollEnd,\r\n\t\t\t\t\t\tthis.scrollingRefreshDelay\r\n\t\t\t\t\t)),\r\n\t\t\t\t\tthis.isGradientLegendVisible && this.hideGradientLegend(),\r\n\t\t\t\t\tthis.conf.playing && ((this.isScrolling = !0), this.pause());\r\n\t\t\t}),\r\n\t\t\te(this, \"handleScrollEnd\", () => {\r\n\t\t\t\t(this.isScrolling = !1), this.isIntersecting && this.play();\r\n\t\t\t}),\r\n\t\t\te(this, \"resize\", () => {\r\n\t\t\t\t(this.width = window.innerWidth),\r\n\t\t\t\t\tthis.minigl.setSize(this.width, this.height),\r\n\t\t\t\t\tthis.minigl.setOrthographicCamera(),\r\n\t\t\t\t\t(this.xSegCount = Math.ceil(this.width * this.conf.density[0])),\r\n\t\t\t\t\t(this.ySegCount = Math.ceil(this.height * this.conf.density[1])),\r\n\t\t\t\t\tthis.mesh.geometry.setTopology(this.xSegCount, this.ySegCount),\r\n\t\t\t\t\tthis.mesh.geometry.setSize(this.width, this.height),\r\n\t\t\t\t\t(this.mesh.material.uniforms.u_shadow_power.value =\r\n\t\t\t\t\t\tthis.width < 600 ? 5 : 6);\r\n\t\t\t}),\r\n\t\t\te(this, \"handleMouseDown\", (e) => {\r\n\t\t\t\tthis.isGradientLegendVisible &&\r\n\t\t\t\t\t((this.isMetaKey = e.metaKey),\r\n\t\t\t\t\t(this.isMouseDown = !0),\r\n\t\t\t\t\t!1 === this.conf.playing && requestAnimationFrame(this.animate));\r\n\t\t\t}),\r\n\t\t\te(this, \"handleMouseUp\", () => {\r\n\t\t\t\tthis.isMouseDown = !1;\r\n\t\t\t}),\r\n\t\t\te(this, \"animate\", (e) => {\r\n\t\t\t\tif (!this.shouldSkipFrame(e) || this.isMouseDown) {\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\t((this.t += Math.min(e - this.last, 1e3 \/ 15)),\r\n\t\t\t\t\t\t(this.last = e),\r\n\t\t\t\t\t\tthis.isMouseDown)\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tlet e = 160;\r\n\t\t\t\t\t\tthis.isMetaKey && (e = -160), (this.t += e);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t(this.mesh.material.uniforms.u_time.value = this.t), this.minigl.render();\r\n\t\t\t\t}\r\n\t\t\t\tif (0 !== this.last && this.isStatic)\r\n\t\t\t\t\treturn this.minigl.render(), void this.disconnect();\r\n\t\t\t\t(this.conf.playing || this.isMouseDown) &&\r\n\t\t\t\t\trequestAnimationFrame(this.animate);\r\n\t\t\t}),\r\n\t\t\te(this, \"addIsLoadedClass\", () => {\r\n\t\t\t\t!this.isLoadedClass &&\r\n\t\t\t\t\t((this.isLoadedClass = !0),\r\n\t\t\t\t\tthis.el.classList.add(\"isLoaded\"),\r\n\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\tthis.el.parentElement.classList.add(\"isLoaded\");\r\n\t\t\t\t\t}, 3e3));\r\n\t\t\t}),\r\n\t\t\te(this, \"pause\", () => {\r\n\t\t\t\tthis.conf.playing = !1;\r\n\t\t\t}),\r\n\t\t\te(this, \"play\", () => {\r\n\t\t\t\trequestAnimationFrame(this.animate), (this.conf.playing = !0);\r\n\t\t\t}),\r\n\t\t\te(\r\n\t\t\t\tthis,\r\n\t\t\t\t\"initGradient\",\r\n\t\t\t\t(selector) => (\r\n\t\t\t\t\t(this.el = document.querySelector(selector)), this.connect(), this\r\n\t\t\t\t)\r\n\t\t\t);\r\n\t}\r\n\tasync connect() {\r\n\t\t(this.shaderFiles = {\r\n\t\t\tvertex:\r\n\t\t\t\t\"varying vec3 v_color;\\n\\nvoid main() {\\n  float time = u_time * u_global.noiseSpeed;\\n\\n  vec2 noiseCoord = resolution * uvNorm * u_global.noiseFreq;\\n\\n  vec2 st = 1. - uvNorm.xy;\\n\\n  \/\/\\n  \/\/ Tilting the plane\\n  \/\/\\n\\n  \/\/ Front-to-back tilt\\n  float tilt = resolution.y \/ 2.0 * uvNorm.y;\\n\\n  \/\/ Left-to-right angle\\n  float incline = resolution.x * uvNorm.x \/ 2.0 * u_vertDeform.incline;\\n\\n  \/\/ Up-down shift to offset incline\\n  float offset = resolution.x \/ 2.0 * u_vertDeform.incline * mix(u_vertDeform.offsetBottom, u_vertDeform.offsetTop, uv.y);\\n\\n  \/\/\\n  \/\/ Vertex noise\\n  \/\/\\n\\n  float noise = snoise(vec3(\\n    noiseCoord.x * u_vertDeform.noiseFreq.x + time * u_vertDeform.noiseFlow,\\n    noiseCoord.y * u_vertDeform.noiseFreq.y,\\n    time * u_vertDeform.noiseSpeed + u_vertDeform.noiseSeed\\n  )) * u_vertDeform.noiseAmp;\\n\\n  \/\/ Fade noise to zero at edges\\n  noise *= 1.0 - pow(abs(uvNorm.y), 2.0);\\n\\n  \/\/ Clamp to 0\\n  noise = max(0.0, noise);\\n\\n  vec3 pos = vec3(\\n    position.x,\\n    position.y + tilt + incline + noise - offset,\\n    position.z\\n  );\\n\\n  \/\/\\n  \/\/ Vertex color, to be passed to fragment shader\\n  \/\/\\n\\n  if (u_active_colors[0] == 1.) {\\n    v_color = u_baseColor;\\n  }\\n\\n  for (int i = 0; i < u_waveLayers_length; i++) {\\n    if (u_active_colors[i + 1] == 1.) {\\n      WaveLayers layer = u_waveLayers[i];\\n\\n      float noise = smoothstep(\\n        layer.noiseFloor,\\n        layer.noiseCeil,\\n        snoise(vec3(\\n          noiseCoord.x * layer.noiseFreq.x + time * layer.noiseFlow,\\n          noiseCoord.y * layer.noiseFreq.y,\\n          time * layer.noiseSpeed + layer.noiseSeed\\n        )) \/ 2.0 + 0.5\\n      );\\n\\n      v_color = blendNormal(v_color, layer.color, pow(noise, 4.));\\n    }\\n  }\\n\\n  \/\/\\n  \/\/ Finish\\n  \/\/\\n\\n  gl_Position = projectionMatrix * modelViewMatrix * vec4(pos, 1.0);\\n}\",\r\n\t\t\tnoise:\r\n\t\t\t\t\"\/\/\\n\/\/ Description : Array and textureless GLSL 2D\/3D\/4D simplex\\n\/\/               noise functions.\\n\/\/      Author : Ian McEwan, Ashima Arts.\\n\/\/  Maintainer : stegu\\n\/\/     Lastmod : 20110822 (ijm)\\n\/\/     License : Copyright (C) 2011 Ashima Arts. All rights reserved.\\n\/\/               Distributed under the MIT License. See LICENSE file.\\n\/\/               https:\/\/github.com\/ashima\/webgl-noise\\n\/\/               https:\/\/github.com\/stegu\/webgl-noise\\n\/\/\\n\\nvec3 mod289(vec3 x) {\\n  return x - floor(x * (1.0 \/ 289.0)) * 289.0;\\n}\\n\\nvec4 mod289(vec4 x) {\\n  return x - floor(x * (1.0 \/ 289.0)) * 289.0;\\n}\\n\\nvec4 permute(vec4 x) {\\n    return mod289(((x*34.0)+1.0)*x);\\n}\\n\\nvec4 taylorInvSqrt(vec4 r)\\n{\\n  return 1.79284291400159 - 0.85373472095314 * r;\\n}\\n\\nfloat snoise(vec3 v)\\n{\\n  const vec2  C = vec2(1.0\/6.0, 1.0\/3.0) ;\\n  const vec4  D = vec4(0.0, 0.5, 1.0, 2.0);\\n\\n\/\/ First corner\\n  vec3 i  = floor(v + dot(v, C.yyy) );\\n  vec3 x0 =   v - i + dot(i, C.xxx) ;\\n\\n\/\/ Other corners\\n  vec3 g = step(x0.yzx, x0.xyz);\\n  vec3 l = 1.0 - g;\\n  vec3 i1 = min( g.xyz, l.zxy );\\n  vec3 i2 = max( g.xyz, l.zxy );\\n\\n  \/\/   x0 = x0 - 0.0 + 0.0 * C.xxx;\\n  \/\/   x1 = x0 - i1  + 1.0 * C.xxx;\\n  \/\/   x2 = x0 - i2  + 2.0 * C.xxx;\\n  \/\/   x3 = x0 - 1.0 + 3.0 * C.xxx;\\n  vec3 x1 = x0 - i1 + C.xxx;\\n  vec3 x2 = x0 - i2 + C.yyy; \/\/ 2.0*C.x = 1\/3 = C.y\\n  vec3 x3 = x0 - D.yyy;      \/\/ -1.0+3.0*C.x = -0.5 = -D.y\\n\\n\/\/ Permutations\\n  i = mod289(i);\\n  vec4 p = permute( permute( permute(\\n            i.z + vec4(0.0, i1.z, i2.z, 1.0 ))\\n          + i.y + vec4(0.0, i1.y, i2.y, 1.0 ))\\n          + i.x + vec4(0.0, i1.x, i2.x, 1.0 ));\\n\\n\/\/ Gradients: 7x7 points over a square, mapped onto an octahedron.\\n\/\/ The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294)\\n  float n_ = 0.142857142857; \/\/ 1.0\/7.0\\n  vec3  ns = n_ * D.wyz - D.xzx;\\n\\n  vec4 j = p - 49.0 * floor(p * ns.z * ns.z);  \/\/  mod(p,7*7)\\n\\n  vec4 x_ = floor(j * ns.z);\\n  vec4 y_ = floor(j - 7.0 * x_ );    \/\/ mod(j,N)\\n\\n  vec4 x = x_ *ns.x + ns.yyyy;\\n  vec4 y = y_ *ns.x + ns.yyyy;\\n  vec4 h = 1.0 - abs(x) - abs(y);\\n\\n  vec4 b0 = vec4( x.xy, y.xy );\\n  vec4 b1 = vec4( x.zw, y.zw );\\n\\n  \/\/vec4 s0 = vec4(lessThan(b0,0.0))*2.0 - 1.0;\\n  \/\/vec4 s1 = vec4(lessThan(b1,0.0))*2.0 - 1.0;\\n  vec4 s0 = floor(b0)*2.0 + 1.0;\\n  vec4 s1 = floor(b1)*2.0 + 1.0;\\n  vec4 sh = -step(h, vec4(0.0));\\n\\n  vec4 a0 = b0.xzyw + s0.xzyw*sh.xxyy ;\\n  vec4 a1 = b1.xzyw + s1.xzyw*sh.zzww ;\\n\\n  vec3 p0 = vec3(a0.xy,h.x);\\n  vec3 p1 = vec3(a0.zw,h.y);\\n  vec3 p2 = vec3(a1.xy,h.z);\\n  vec3 p3 = vec3(a1.zw,h.w);\\n\\n\/\/Normalise gradients\\n  vec4 norm = taylorInvSqrt(vec4(dot(p0,p0), dot(p1,p1), dot(p2, p2), dot(p3,p3)));\\n  p0 *= norm.x;\\n  p1 *= norm.y;\\n  p2 *= norm.z;\\n  p3 *= norm.w;\\n\\n\/\/ Mix final noise value\\n  vec4 m = max(0.6 - vec4(dot(x0,x0), dot(x1,x1), dot(x2,x2), dot(x3,x3)), 0.0);\\n  m = m * m;\\n  return 42.0 * dot( m*m, vec4( dot(p0,x0), dot(p1,x1),\\n                                dot(p2,x2), dot(p3,x3) ) );\\n}\",\r\n\t\t\tblend:\r\n\t\t\t\t\"\/\/\\n\/\/ https:\/\/github.com\/jamieowen\/glsl-blend\\n\/\/\\n\\n\/\/ Normal\\n\\nvec3 blendNormal(vec3 base, vec3 blend) {\\n\\treturn blend;\\n}\\n\\nvec3 blendNormal(vec3 base, vec3 blend, float opacity) {\\n\\treturn (blendNormal(base, blend) * opacity + base * (1.0 - opacity));\\n}\\n\\n\/\/ Screen\\n\\nfloat blendScreen(float base, float blend) {\\n\\treturn 1.0-((1.0-base)*(1.0-blend));\\n}\\n\\nvec3 blendScreen(vec3 base, vec3 blend) {\\n\\treturn vec3(blendScreen(base.r,blend.r),blendScreen(base.g,blend.g),blendScreen(base.b,blend.b));\\n}\\n\\nvec3 blendScreen(vec3 base, vec3 blend, float opacity) {\\n\\treturn (blendScreen(base, blend) * opacity + base * (1.0 - opacity));\\n}\\n\\n\/\/ Multiply\\n\\nvec3 blendMultiply(vec3 base, vec3 blend) {\\n\\treturn base*blend;\\n}\\n\\nvec3 blendMultiply(vec3 base, vec3 blend, float opacity) {\\n\\treturn (blendMultiply(base, blend) * opacity + base * (1.0 - opacity));\\n}\\n\\n\/\/ Overlay\\n\\nfloat blendOverlay(float base, float blend) {\\n\\treturn base<0.5?(2.0*base*blend):(1.0-2.0*(1.0-base)*(1.0-blend));\\n}\\n\\nvec3 blendOverlay(vec3 base, vec3 blend) {\\n\\treturn vec3(blendOverlay(base.r,blend.r),blendOverlay(base.g,blend.g),blendOverlay(base.b,blend.b));\\n}\\n\\nvec3 blendOverlay(vec3 base, vec3 blend, float opacity) {\\n\\treturn (blendOverlay(base, blend) * opacity + base * (1.0 - opacity));\\n}\\n\\n\/\/ Hard light\\n\\nvec3 blendHardLight(vec3 base, vec3 blend) {\\n\\treturn blendOverlay(blend,base);\\n}\\n\\nvec3 blendHardLight(vec3 base, vec3 blend, float opacity) {\\n\\treturn (blendHardLight(base, blend) * opacity + base * (1.0 - opacity));\\n}\\n\\n\/\/ Soft light\\n\\nfloat blendSoftLight(float base, float blend) {\\n\\treturn (blend<0.5)?(2.0*base*blend+base*base*(1.0-2.0*blend)):(sqrt(base)*(2.0*blend-1.0)+2.0*base*(1.0-blend));\\n}\\n\\nvec3 blendSoftLight(vec3 base, vec3 blend) {\\n\\treturn vec3(blendSoftLight(base.r,blend.r),blendSoftLight(base.g,blend.g),blendSoftLight(base.b,blend.b));\\n}\\n\\nvec3 blendSoftLight(vec3 base, vec3 blend, float opacity) {\\n\\treturn (blendSoftLight(base, blend) * opacity + base * (1.0 - opacity));\\n}\\n\\n\/\/ Color dodge\\n\\nfloat blendColorDodge(float base, float blend) {\\n\\treturn (blend==1.0)?blend:min(base\/(1.0-blend),1.0);\\n}\\n\\nvec3 blendColorDodge(vec3 base, vec3 blend) {\\n\\treturn vec3(blendColorDodge(base.r,blend.r),blendColorDodge(base.g,blend.g),blendColorDodge(base.b,blend.b));\\n}\\n\\nvec3 blendColorDodge(vec3 base, vec3 blend, float opacity) {\\n\\treturn (blendColorDodge(base, blend) * opacity + base * (1.0 - opacity));\\n}\\n\\n\/\/ Color burn\\n\\nfloat blendColorBurn(float base, float blend) {\\n\\treturn (blend==0.0)?blend:max((1.0-((1.0-base)\/blend)),0.0);\\n}\\n\\nvec3 blendColorBurn(vec3 base, vec3 blend) {\\n\\treturn vec3(blendColorBurn(base.r,blend.r),blendColorBurn(base.g,blend.g),blendColorBurn(base.b,blend.b));\\n}\\n\\nvec3 blendColorBurn(vec3 base, vec3 blend, float opacity) {\\n\\treturn (blendColorBurn(base, blend) * opacity + base * (1.0 - opacity));\\n}\\n\\n\/\/ Vivid Light\\n\\nfloat blendVividLight(float base, float blend) {\\n\\treturn (blend<0.5)?blendColorBurn(base,(2.0*blend)):blendColorDodge(base,(2.0*(blend-0.5)));\\n}\\n\\nvec3 blendVividLight(vec3 base, vec3 blend) {\\n\\treturn vec3(blendVividLight(base.r,blend.r),blendVividLight(base.g,blend.g),blendVividLight(base.b,blend.b));\\n}\\n\\nvec3 blendVividLight(vec3 base, vec3 blend, float opacity) {\\n\\treturn (blendVividLight(base, blend) * opacity + base * (1.0 - opacity));\\n}\\n\\n\/\/ Lighten\\n\\nfloat blendLighten(float base, float blend) {\\n\\treturn max(blend,base);\\n}\\n\\nvec3 blendLighten(vec3 base, vec3 blend) {\\n\\treturn vec3(blendLighten(base.r,blend.r),blendLighten(base.g,blend.g),blendLighten(base.b,blend.b));\\n}\\n\\nvec3 blendLighten(vec3 base, vec3 blend, float opacity) {\\n\\treturn (blendLighten(base, blend) * opacity + base * (1.0 - opacity));\\n}\\n\\n\/\/ Linear burn\\n\\nfloat blendLinearBurn(float base, float blend) {\\n\\t\/\/ Note : Same implementation as BlendSubtractf\\n\\treturn max(base+blend-1.0,0.0);\\n}\\n\\nvec3 blendLinearBurn(vec3 base, vec3 blend) {\\n\\t\/\/ Note : Same implementation as BlendSubtract\\n\\treturn max(base+blend-vec3(1.0),vec3(0.0));\\n}\\n\\nvec3 blendLinearBurn(vec3 base, vec3 blend, float opacity) {\\n\\treturn (blendLinearBurn(base, blend) * opacity + base * (1.0 - opacity));\\n}\\n\\n\/\/ Linear dodge\\n\\nfloat blendLinearDodge(float base, float blend) {\\n\\t\/\/ Note : Same implementation as BlendAddf\\n\\treturn min(base+blend,1.0);\\n}\\n\\nvec3 blendLinearDodge(vec3 base, vec3 blend) {\\n\\t\/\/ Note : Same implementation as BlendAdd\\n\\treturn min(base+blend,vec3(1.0));\\n}\\n\\nvec3 blendLinearDodge(vec3 base, vec3 blend, float opacity) {\\n\\treturn (blendLinearDodge(base, blend) * opacity + base * (1.0 - opacity));\\n}\\n\\n\/\/ Linear light\\n\\nfloat blendLinearLight(float base, float blend) {\\n\\treturn blend<0.5?blendLinearBurn(base,(2.0*blend)):blendLinearDodge(base,(2.0*(blend-0.5)));\\n}\\n\\nvec3 blendLinearLight(vec3 base, vec3 blend) {\\n\\treturn vec3(blendLinearLight(base.r,blend.r),blendLinearLight(base.g,blend.g),blendLinearLight(base.b,blend.b));\\n}\\n\\nvec3 blendLinearLight(vec3 base, vec3 blend, float opacity) {\\n\\treturn (blendLinearLight(base, blend) * opacity + base * (1.0 - opacity));\\n}\",\r\n\t\t\tfragment:\r\n\t\t\t\t\"varying vec3 v_color;\\n\\nvoid main() {\\n  vec3 color = v_color;\\n  if (u_darken_top == 1.0) {\\n    vec2 st = gl_FragCoord.xy\/resolution.xy;\\n    color.g -= pow(st.y + sin(-12.0) * st.x, u_shadow_power) * 0.4;\\n  }\\n  gl_FragColor = vec4(color, 1.0);\\n}\"\r\n\t\t}),\r\n\t\t\t(this.conf = {\r\n\t\t\t\tpresetName: \"\",\r\n\t\t\t\twireframe: !1,\r\n\t\t\t\tdensity: [0.06, 0.16],\r\n\t\t\t\tzoom: 1,\r\n\t\t\t\trotation: 0,\r\n\t\t\t\tplaying: !0\r\n\t\t\t}),\r\n\t\t\tdocument.querySelectorAll(\"canvas\").length < 1\r\n\t\t\t\t? console.log(\"DID NOT LOAD HERO STRIPE CANVAS\")\r\n\t\t\t\t: ((this.minigl = new MiniGl(this.el, null, null, !0)),\r\n\t\t\t\t  requestAnimationFrame(() => {\r\n\t\t\t\t\t\tthis.el &&\r\n\t\t\t\t\t\t\t((this.computedCanvasStyle = getComputedStyle(this.el)),\r\n\t\t\t\t\t\t\tthis.waitForCssVars());\r\n\t\t\t\t  }));\r\n\t}\r\n\tdisconnect() {\r\n\t\tthis.scrollObserver &&\r\n\t\t\t(window.removeEventListener(\"scroll\", this.handleScroll),\r\n\t\t\twindow.removeEventListener(\"mousedown\", this.handleMouseDown),\r\n\t\t\twindow.removeEventListener(\"mouseup\", this.handleMouseUp),\r\n\t\t\twindow.removeEventListener(\"keydown\", this.handleKeyDown),\r\n\t\t\tthis.scrollObserver.disconnect()),\r\n\t\t\twindow.removeEventListener(\"resize\", this.resize);\r\n\t}\r\n\tinitMaterial() {\r\n\t\tthis.uniforms = {\r\n\t\t\tu_time: new this.minigl.Uniform({ value: 0 }),\r\n\t\t\tu_shadow_power: new this.minigl.Uniform({ value: 5 }),\r\n\t\t\tu_darken_top: new this.minigl.Uniform({\r\n\t\t\t\tvalue: \"\" === this.el.dataset.jsDarkenTop ? 1 : 0\r\n\t\t\t}),\r\n\t\t\tu_active_colors: new this.minigl.Uniform({\r\n\t\t\t\tvalue: this.activeColors,\r\n\t\t\t\ttype: \"vec4\"\r\n\t\t\t}),\r\n\t\t\tu_global: new this.minigl.Uniform({\r\n\t\t\t\tvalue: {\r\n\t\t\t\t\tnoiseFreq: new this.minigl.Uniform({\r\n\t\t\t\t\t\tvalue: [this.freqX, this.freqY],\r\n\t\t\t\t\t\ttype: \"vec2\"\r\n\t\t\t\t\t}),\r\n\t\t\t\t\tnoiseSpeed: new this.minigl.Uniform({ value: 5e-6 })\r\n\t\t\t\t},\r\n\t\t\t\ttype: \"struct\"\r\n\t\t\t}),\r\n\t\t\tu_vertDeform: new this.minigl.Uniform({\r\n\t\t\t\tvalue: {\r\n\t\t\t\t\tincline: new this.minigl.Uniform({\r\n\t\t\t\t\t\tvalue: Math.sin(this.angle) \/ Math.cos(this.angle)\r\n\t\t\t\t\t}),\r\n\t\t\t\t\toffsetTop: new this.minigl.Uniform({ value: -0.5 }),\r\n\t\t\t\t\toffsetBottom: new this.minigl.Uniform({ value: -0.5 }),\r\n\t\t\t\t\tnoiseFreq: new this.minigl.Uniform({ value: [3, 4], type: \"vec2\" }),\r\n\t\t\t\t\tnoiseAmp: new this.minigl.Uniform({ value: this.amp }),\r\n\t\t\t\t\tnoiseSpeed: new this.minigl.Uniform({ value: 10 }),\r\n\t\t\t\t\tnoiseFlow: new this.minigl.Uniform({ value: 3 }),\r\n\t\t\t\t\tnoiseSeed: new this.minigl.Uniform({ value: this.seed })\r\n\t\t\t\t},\r\n\t\t\t\ttype: \"struct\",\r\n\t\t\t\texcludeFrom: \"fragment\"\r\n\t\t\t}),\r\n\t\t\tu_baseColor: new this.minigl.Uniform({\r\n\t\t\t\tvalue: this.sectionColors[0],\r\n\t\t\t\ttype: \"vec3\",\r\n\t\t\t\texcludeFrom: \"fragment\"\r\n\t\t\t}),\r\n\t\t\tu_waveLayers: new this.minigl.Uniform({\r\n\t\t\t\tvalue: [],\r\n\t\t\t\texcludeFrom: \"fragment\",\r\n\t\t\t\ttype: \"array\"\r\n\t\t\t})\r\n\t\t};\r\n\t\tfor (let e = 1; e < this.sectionColors.length; e += 1)\r\n\t\t\tthis.uniforms.u_waveLayers.value.push(\r\n\t\t\t\tnew this.minigl.Uniform({\r\n\t\t\t\t\tvalue: {\r\n\t\t\t\t\t\tcolor: new this.minigl.Uniform({\r\n\t\t\t\t\t\t\tvalue: this.sectionColors[e],\r\n\t\t\t\t\t\t\ttype: \"vec3\"\r\n\t\t\t\t\t\t}),\r\n\t\t\t\t\t\tnoiseFreq: new this.minigl.Uniform({\r\n\t\t\t\t\t\t\tvalue: [\r\n\t\t\t\t\t\t\t\t2 + e \/ this.sectionColors.length,\r\n\t\t\t\t\t\t\t\t3 + e \/ this.sectionColors.length\r\n\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\ttype: \"vec2\"\r\n\t\t\t\t\t\t}),\r\n\t\t\t\t\t\tnoiseSpeed: new this.minigl.Uniform({ value: 11 + 0.3 * e }),\r\n\t\t\t\t\t\tnoiseFlow: new this.minigl.Uniform({ value: 6.5 + 0.3 * e }),\r\n\t\t\t\t\t\tnoiseSeed: new this.minigl.Uniform({ value: this.seed + 10 * e }),\r\n\t\t\t\t\t\tnoiseFloor: new this.minigl.Uniform({ value: 0.1 }),\r\n\t\t\t\t\t\tnoiseCeil: new this.minigl.Uniform({ value: 0.63 + 0.07 * e })\r\n\t\t\t\t\t},\r\n\t\t\t\t\ttype: \"struct\"\r\n\t\t\t\t})\r\n\t\t\t);\r\n\t\treturn (\r\n\t\t\t(this.vertexShader = [\r\n\t\t\t\tthis.shaderFiles.noise,\r\n\t\t\t\tthis.shaderFiles.blend,\r\n\t\t\t\tthis.shaderFiles.vertex\r\n\t\t\t].join(\"\\n\\n\")),\r\n\t\t\tnew this.minigl.Material(\r\n\t\t\t\tthis.vertexShader,\r\n\t\t\t\tthis.shaderFiles.fragment,\r\n\t\t\t\tthis.uniforms\r\n\t\t\t)\r\n\t\t);\r\n\t}\r\n\tinitMesh() {\r\n\t\t(this.material = this.initMaterial()),\r\n\t\t\t(this.geometry = new this.minigl.PlaneGeometry()),\r\n\t\t\t(this.mesh = new this.minigl.Mesh(this.geometry, this.material));\r\n\t}\r\n\tshouldSkipFrame(e) {\r\n\t\treturn (\r\n\t\t\t!!window.document.hidden ||\r\n\t\t\t!this.conf.playing ||\r\n\t\t\tparseInt(e, 10) % 2 == 0 ||\r\n\t\t\tvoid 0\r\n\t\t);\r\n\t}\r\n\tupdateFrequency(e) {\r\n\t\t(this.freqX += e), (this.freqY += e);\r\n\t}\r\n\ttoggleColor(index) {\r\n\t\tthis.activeColors[index] = 0 === this.activeColors[index] ? 1 : 0;\r\n\t}\r\n\tshowGradientLegend() {\r\n\t\tthis.width > this.minWidth &&\r\n\t\t\t((this.isGradientLegendVisible = !0),\r\n\t\t\tdocument.body.classList.add(\"isGradientLegendVisible\"));\r\n\t}\r\n\thideGradientLegend() {\r\n\t\t(this.isGradientLegendVisible = !1),\r\n\t\t\tdocument.body.classList.remove(\"isGradientLegendVisible\");\r\n\t}\r\n\tinit() {\r\n\t\tthis.initGradientColors(),\r\n\t\t\tthis.initMesh(),\r\n\t\t\tthis.resize(),\r\n\t\t\trequestAnimationFrame(this.animate),\r\n\t\t\twindow.addEventListener(\"resize\", this.resize);\r\n\t}\r\n\twaitForCssVars() {\r\n\t\tif (\r\n\t\t\tthis.computedCanvasStyle &&\r\n\t\t\t-1 !==\r\n\t\t\t\tthis.computedCanvasStyle.getPropertyValue(\"--gradient-color-1\").indexOf(\"#\")\r\n\t\t)\r\n\t\t\tthis.init(), this.addIsLoadedClass();\r\n\t\telse {\r\n\t\t\tif (((this.cssVarRetries += 1), this.cssVarRetries > this.maxCssVarRetries))\r\n\t\t\t\treturn (\r\n\t\t\t\t\t(this.sectionColors = [16711680, 16711680, 16711935, 65280, 255]),\r\n\t\t\t\t\tvoid this.init()\r\n\t\t\t\t);\r\n\t\t\trequestAnimationFrame(() => this.waitForCssVars());\r\n\t\t}\r\n\t}\r\n\tinitGradientColors() {\r\n\t\tthis.sectionColors = [\r\n\t\t\t\"--gradient-color-1\",\r\n\t\t\t\"--gradient-color-2\",\r\n\t\t\t\"--gradient-color-3\",\r\n\t\t\t\"--gradient-color-4\"\r\n\t\t]\r\n\t\t\t.map((cssPropertyName) => {\r\n\t\t\t\tlet hex = this.computedCanvasStyle.getPropertyValue(cssPropertyName).trim();\r\n\t\t\t\tif (4 === hex.length) {\r\n\t\t\t\t\tconst hexTemp = hex\r\n\t\t\t\t\t\t.substr(1)\r\n\t\t\t\t\t\t.split(\"\")\r\n\t\t\t\t\t\t.map((hexTemp) => hexTemp + hexTemp)\r\n\t\t\t\t\t\t.join(\"\");\r\n\t\t\t\t\thex = `#${hexTemp}`;\r\n\t\t\t\t}\r\n\t\t\t\treturn hex && `0x${hex.substr(1)}`;\r\n\t\t\t})\r\n\t\t\t.filter(Boolean)\r\n\t\t\t.map(normalizeColor);\r\n\t}\r\n}\r\n\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-597ab5f e-flex e-con-boxed e-con e-parent\" data-id=\"597ab5f\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;_ha_eqh_enable&quot;:false}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-cb7f306 e-con-full e-flex e-con e-child\" data-id=\"cb7f306\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;_ha_eqh_enable&quot;:false}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1b18314 elementor-widget__width-initial ha-css-transform-yes elementor-widget elementor-widget-text-editor\" data-id=\"1b18314\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Fahrzeuge kaufen, finanzieren, vermieten &amp; investieren<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f210e41 elementor-widget__width-initial ha-css-transform-yes elementor-hidden-mobile elementor-widget elementor-widget-text-editor\" data-id=\"f210e41\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>VAIR WORLD verbindet Fahrzeughandel, Absatzfinanzierung, Einkaufsfinanzierung, Langzeit-Autovermietung und Fahrzeug-Investments \u00fcber ausgew\u00e4hlte Partner \u2013 strukturiert, diskret und individuell gepr\u00fcft.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4815cc2 ha-css-transform-yes elementor-widget elementor-widget-button\" data-id=\"4815cc2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"#elementor-action%3Aaction%3Dpopup%3Aopen%26settings%3DeyJpZCI6IjI3NzciLCJ0b2dnbGUiOmZhbHNlfQ%3D%3D\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Fahrzeuganfrage starten<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9211f1d elementor-widget__width-initial ha-css-transform-yes elementor-widget elementor-widget-button\" data-id=\"9211f1d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"#finanzierungen\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Leistungen ansehen \u2193  <\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3118079 ha-css-transform-yes elementor-widget elementor-widget-html\" data-id=\"3118079\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div id=\"sportcar-particles\"><\/div>\r\n\r\n<style>\r\n  #sportcar-particles {\r\n    width: 100%;\r\n    height: 560px;\r\n    background: transparent;\r\n    overflow: hidden;\r\n    position: relative;\r\n  }\r\n\r\n  #sportcar-particles canvas {\r\n    width: 100%;\r\n    height: 100%;\r\n    display: block;\r\n  }\r\n<\/style>\r\n\r\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/three.js\/r128\/three.min.js\"><\/script>\r\n\r\n<script>\r\n(function () {\r\n  const container = document.getElementById(\"sportcar-particles\");\r\n\r\n  const scene = new THREE.Scene();\r\n\r\n  const camera = new THREE.PerspectiveCamera(\r\n    55,\r\n    container.offsetWidth \/ container.offsetHeight,\r\n    0.1,\r\n    1000\r\n  );\r\n\r\n  camera.position.set(0, 2, 46);\r\n\r\n  const renderer = new THREE.WebGLRenderer({\r\n    alpha: true,\r\n    antialias: true\r\n  });\r\n\r\n  renderer.setSize(container.offsetWidth, container.offsetHeight);\r\n  renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));\r\n  container.appendChild(renderer.domElement);\r\n\r\n  const particleColor = \"#0C2C4C\";\r\n  const particleCount = 4200;\r\n\r\n  const positions = [];\r\n  const originalPositions = [];\r\n  const velocities = [];\r\n\r\n  function addPoint(x, y, z) {\r\n    positions.push(x, y, z);\r\n    originalPositions.push(new THREE.Vector3(x, y, z));\r\n    velocities.push(new THREE.Vector3(0, 0, 0));\r\n  }\r\n\r\n  function addBoxPoints(count, xRange, yRange, zRange) {\r\n    for (let i = 0; i < count; i++) {\r\n      const x = xRange[0] + Math.random() * (xRange[1] - xRange[0]);\r\n      const y = yRange[0] + Math.random() * (yRange[1] - yRange[0]);\r\n      const z = zRange[0] + Math.random() * (zRange[1] - zRange[0]);\r\n      addPoint(x, y, z);\r\n    }\r\n  }\r\n\r\n  function addWheel(cx, cy, cz, count) {\r\n    for (let i = 0; i < count; i++) {\r\n      const angle = Math.random() * Math.PI * 2;\r\n      const radius = 2.25 + Math.random() * 0.35;\r\n      const depth = (Math.random() - 0.5) * 1.15;\r\n\r\n      const x = cx + Math.cos(angle) * radius;\r\n      const y = cy + Math.sin(angle) * radius;\r\n      const z = cz + depth;\r\n\r\n      addPoint(x, y, z);\r\n    }\r\n  }\r\n\r\n  function addCurvePoints(count) {\r\n    for (let i = 0; i < count; i++) {\r\n      const t = Math.random();\r\n      const x = -18 + t * 36;\r\n\r\n      let y;\r\n\r\n      if (x < -9) {\r\n        y = -0.6 + (x + 18) * 0.14;\r\n      } else if (x < 7) {\r\n        y = 3.1 + Math.sin((x + 9) \/ 16 * Math.PI) * 4.2;\r\n      } else {\r\n        y = 3.1 - (x - 7) * 0.28;\r\n      }\r\n\r\n      const z = (Math.random() - 0.5) * 8.2;\r\n      addPoint(x, y + (Math.random() - 0.5) * 0.5, z);\r\n    }\r\n  }\r\n\r\n  \/\/ Flacher Sportwagen-K\u00f6rper\r\n  addBoxPoints(1450, [-19, 19], [-3.1, 1.9], [-4.5, 4.5]);\r\n\r\n  \/\/ Tiefe Front \/ Motorhaube\r\n  addBoxPoints(620, [-19.5, -5], [-1.6, 2.5], [-4.2, 4.2]);\r\n\r\n  \/\/ Heck\r\n  addBoxPoints(480, [8, 19], [-2, 2.6], [-4.4, 4.4]);\r\n\r\n  \/\/ Sportwagen-Kabine\r\n  addBoxPoints(720, [-5.5, 7.5], [2, 6.5], [-3.6, 3.6]);\r\n\r\n  \/\/ Saubere Dachlinie \/ Silhouette\r\n  addCurvePoints(520);\r\n\r\n  \/\/ Spoiler hinten\r\n  addBoxPoints(220, [14.5, 19.8], [3.6, 4.5], [-5.2, 5.2]);\r\n  addBoxPoints(120, [16.5, 17.8], [1.2, 4.2], [-4.8, 4.8]);\r\n\r\n  \/\/ R\u00e4der\r\n  addWheel(-11.8, -3.5, -4.8, 260);\r\n  addWheel(11.8, -3.5, -4.8, 260);\r\n  addWheel(-11.8, -3.5, 4.8, 260);\r\n  addWheel(11.8, -3.5, 4.8, 260);\r\n\r\n  \/\/ Zus\u00e4tzliche glatte Konturpunkte\r\n  for (let i = 0; i < 420; i++) {\r\n    const x = -20 + Math.random() * 40;\r\n    const z = Math.random() > 0.5 ? 4.9 : -4.9;\r\n    const y = -2.7 + Math.random() * 4.5;\r\n    addPoint(x, y, z);\r\n  }\r\n\r\n  const geometry = new THREE.BufferGeometry();\r\n\r\n  geometry.setAttribute(\r\n    \"position\",\r\n    new THREE.Float32BufferAttribute(positions, 3)\r\n  );\r\n\r\n  const material = new THREE.PointsMaterial({\r\n    color: particleColor,\r\n    size: 0.145,\r\n    transparent: true,\r\n    opacity: 0.98,\r\n    depthWrite: false\r\n  });\r\n\r\n  const car = new THREE.Points(geometry, material);\r\n  scene.add(car);\r\n\r\n  const mouse = new THREE.Vector2(999, 999);\r\n  let hovering = false;\r\n\r\n  container.addEventListener(\"mousemove\", function (event) {\r\n    const rect = container.getBoundingClientRect();\r\n\r\n    mouse.x = ((event.clientX - rect.left) \/ rect.width) * 2 - 1;\r\n    mouse.y = -((event.clientY - rect.top) \/ rect.height) * 2 + 1;\r\n\r\n    hovering = true;\r\n  });\r\n\r\n  container.addEventListener(\"mouseleave\", function () {\r\n    hovering = false;\r\n    mouse.x = 999;\r\n    mouse.y = 999;\r\n  });\r\n\r\n  function animate() {\r\n    requestAnimationFrame(animate);\r\n\r\n    const pos = geometry.attributes.position.array;\r\n\r\n    car.rotation.y += 0.0022;\r\n    car.rotation.x = Math.sin(Date.now() * 0.00045) * 0.055;\r\n\r\n    for (let i = 0; i < originalPositions.length; i++) {\r\n      const i3 = i * 3;\r\n      const original = originalPositions[i];\r\n      const velocity = velocities[i];\r\n\r\n      let targetX = original.x;\r\n      let targetY = original.y;\r\n      let targetZ = original.z;\r\n\r\n      if (hovering) {\r\n        const projectedX = original.x \/ 22;\r\n        const projectedY = original.y \/ 13;\r\n\r\n        const dx = projectedX - mouse.x;\r\n        const dy = projectedY - mouse.y;\r\n        const distance = Math.sqrt(dx * dx + dy * dy);\r\n\r\n        if (distance < 0.62) {\r\n          const strength = Math.pow(0.62 - distance, 2) * 34;\r\n\r\n          velocity.x += dx * strength * 0.075;\r\n          velocity.y += dy * strength * 0.075;\r\n          velocity.z += (Math.random() - 0.5) * strength * 0.12;\r\n        }\r\n      }\r\n\r\n      velocity.x += (targetX - pos[i3]) * 0.018;\r\n      velocity.y += (targetY - pos[i3 + 1]) * 0.018;\r\n      velocity.z += (targetZ - pos[i3 + 2]) * 0.018;\r\n\r\n      velocity.multiplyScalar(0.86);\r\n\r\n      pos[i3] += velocity.x;\r\n      pos[i3 + 1] += velocity.y;\r\n      pos[i3 + 2] += velocity.z;\r\n    }\r\n\r\n    geometry.attributes.position.needsUpdate = true;\r\n    renderer.render(scene, camera);\r\n  }\r\n\r\n  animate();\r\n\r\n  window.addEventListener(\"resize\", function () {\r\n    camera.aspect = container.offsetWidth \/ container.offsetHeight;\r\n    camera.updateProjectionMatrix();\r\n    renderer.setSize(container.offsetWidth, container.offsetHeight);\r\n  });\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3264c7d ha-css-transform-yes elementor-widget elementor-widget-html\" data-id=\"3264c7d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"problem-solution-box\">\r\n  <div class=\"item problem\">\r\n    <span class=\"icon\">\u2715<\/span>\r\n    <span>Viele Vorhaben im Fahrzeugbereich scheitern an hoher Kapitalbindung und fehlender finanzieller Flexibilit\u00e4t.<\/span>\r\n  <\/div>\r\n\r\n  <div class=\"item problem\">\r\n    <span class=\"icon\">\u2715<\/span>\r\n    <span>Unternehmen und H\u00e4ndler finden oft keine passende Fahrzeug- oder Flottenfinanzierung.<\/span>\r\n  <\/div>\r\n\r\n  <div class=\"item problem\">\r\n    <span class=\"icon\">\u2715<\/span>\r\n    <span>Zwischen Handel, Vermietung und Investment fehlt oft die Vernetzung \u2013 Synergien und Wachstumspotenziale bleiben ungenutzt.<\/span>\r\n  <\/div>\r\n\r\n  <div class=\"item solution\">\r\n    <span class=\"icon\">\u2713<\/span>\r\n    <span>Fahrzeughandel mit ausgew\u00e4hlten Partnern<\/span>\r\n  <\/div>\r\n\r\n  <div class=\"item solution\">\r\n    <span class=\"icon\">\u2713<\/span>\r\n    <span>Einkaufs-, Absatzfinanzierung & Langzeitmiete aus einer Hand<\/span>\r\n  <\/div>\r\n\r\n  <div class=\"item solution\">\r\n    <span class=\"icon\">\u2713<\/span>\r\n    <span>Strukturierte Fahrzeug-Investments im starken Netzwerk<\/span>\r\n  <\/div>\r\n<\/div>\r\n\r\n<style>\r\n.problem-solution-box {\r\n  font-family: Arial, sans-serif;\r\n  font-size: 15px;\r\n  max-width: 460px;\r\n  width: 100%;\r\n  box-sizing: border-box;\r\n}\r\n\r\n.problem-solution-box * {\r\n  box-sizing: border-box;\r\n}\r\n\r\n.problem-solution-box .item {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 10px;\r\n  background: #ffffff;\r\n  color: #46566b;\r\n  padding: 10px 14px;\r\n  margin-bottom: 9px;\r\n  border-radius: 7px;\r\n  box-shadow: 0 6px 16px rgba(0, 0, 0, 0.12);\r\n  line-height: 1.35;\r\n  transition: transform 0.25s ease, box-shadow 0.25s ease;\r\n  transform-origin: center;\r\n}\r\n\r\n.problem-solution-box .item:hover {\r\n  transform: scale(1.04);\r\n  box-shadow: 0 10px 24px rgba(0, 0, 0, 0.16);\r\n}\r\n\r\n.problem-solution-box .icon {\r\n  width: 16px;\r\n  height: 16px;\r\n  min-width: 16px;\r\n  border-radius: 50%;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  font-size: 11px;\r\n  font-weight: bold;\r\n  background: transparent;\r\n  color: #0C2C4C;\r\n}\r\n\r\n@media (max-width: 767px) {\r\n  .problem-solution-box {\r\n    font-size: 12px;\r\n    max-width: 100%;\r\n  }\r\n\r\n  .problem-solution-box .item {\r\n    gap: 7px;\r\n    padding: 7px 9px;\r\n    margin-bottom: 6px;\r\n    border-radius: 6px;\r\n    line-height: 1.25;\r\n    box-shadow: 0 4px 11px rgba(0, 0, 0, 0.10);\r\n  }\r\n\r\n  .problem-solution-box .item:hover {\r\n    transform: scale(1.03);\r\n  }\r\n\r\n  .problem-solution-box .icon {\r\n    width: 13px;\r\n    height: 13px;\r\n    min-width: 13px;\r\n    font-size: 9px;\r\n  }\r\n}\r\n\r\n@media (max-width: 420px) {\r\n  .problem-solution-box {\r\n    font-size: 11px;\r\n  }\r\n\r\n  .problem-solution-box .item {\r\n    gap: 6px;\r\n    padding: 6px 8px;\r\n    margin-bottom: 5px;\r\n  }\r\n\r\n  .problem-solution-box .icon {\r\n    width: 12px;\r\n    height: 12px;\r\n    min-width: 12px;\r\n    font-size: 8px;\r\n  }\r\n}\r\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-448775a elementor-widget__width-initial ha-css-transform-yes elementor-widget elementor-widget-html\" data-id=\"448775a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"vair-benefits-grid\">\r\n\r\n  <div class=\"vair-benefit-item\">\r\n    <div class=\"vair-icon\">\r\n      <svg viewBox=\"0 0 24 24\">\r\n        <path d=\"M8 12l2 2 4-4\"\/>\r\n        <path d=\"M3 12a9 9 0 1 0 18 0 9 9 0 0 0-18 0z\"\/>\r\n      <\/svg>\r\n    <\/div>\r\n\r\n    <h3>Handel, Finanzierung & Investment verbundene<\/h3>\r\n\r\n    <p>\r\n      VAIR WORLD betrachtet Fahrzeuge nicht isoliert, sondern als Teil eines wirtschaftlichen \u00d6kosystems aus Handel, Finanzierung, Vermietung und Investment.\r\n    <\/p>\r\n  <\/div>\r\n\r\n\r\n  <div class=\"vair-benefit-item\">\r\n    <div class=\"vair-icon\">\r\n      <svg viewBox=\"0 0 24 24\">\r\n        <path d=\"M11 4a7 7 0 1 0 0 14 7 7 0 0 0 0-14z\"\/>\r\n        <path d=\"M20 20l-4.35-4.35\"\/>\r\n        <path d=\"M8.5 11l1.8 1.8 3.2-3.6\"\/>\r\n      <\/svg>\r\n    <\/div>\r\n\r\n    <h3>Zugang zu Partnern und Fahrzeugnetzwerken<\/h3>\r\n\r\n    <p>\r\n      \u00dcber unser Netzwerk k\u00f6nnen passende H\u00e4ndler, Finanzierungspartner, Investoren und Projektpartner zusammengebracht werden.\r\n    <\/p>\r\n  <\/div>\r\n\r\n\r\n  <div class=\"vair-benefit-item\">\r\n    <div class=\"vair-icon\">\r\n      <svg viewBox=\"0 0 24 24\">\r\n        <path d=\"M12 3v18\"\/>\r\n        <path d=\"M3 12h18\"\/>\r\n        <path d=\"M5 7h14\"\/>\r\n        <path d=\"M5 17h14\"\/>\r\n        <path d=\"M12 3a9 9 0 0 1 0 18\"\/>\r\n        <path d=\"M12 3a9 9 0 0 0 0 18\"\/>\r\n      <\/svg>\r\n    <\/div>\r\n\r\n    <h3>L\u00f6sungen f\u00fcr H\u00e4ndler, Kunden und Investoren<\/h3>\r\n\r\n    <p>\r\n      Ob Fahrzeugverkauf, Einkaufsfinanzierung, Absatzfinanzierung oder Investmentmodell \u2013 wir pr\u00fcfen den passenden Weg je nach Zielgruppe.\r\n    <\/p>\r\n  <\/div>\r\n\r\n\r\n  <div class=\"vair-benefit-item\">\r\n    <div class=\"vair-icon\">\r\n      <svg viewBox=\"0 0 24 24\">\r\n        <path d=\"M7 11V8a5 5 0 0 1 10 0v3\"\/>\r\n        <path d=\"M6 11h12v9H6z\"\/>\r\n        <path d=\"M12 15v2\"\/>\r\n      <\/svg>\r\n    <\/div>\r\n\r\n    <h3>Strukturierte Pr\u00fcfung statt Standardl\u00f6sung<\/h3>\r\n\r\n    <p>\r\n      Jede Anfrage wird individuell betrachtet: Fahrzeugart, Kapitalbedarf, Nutzung, Laufzeit, Partnerstruktur und wirtschaftliches Ziel.\r\n    <\/p>\r\n  <\/div>\r\n\r\n<\/div>\r\n\r\n<style>\r\n\r\n.vair-benefits-grid {\r\n  display: grid;\r\n  grid-template-columns: repeat(4, 1fr);\r\n  max-width: 1200px;\r\n  margin: 0 auto;\r\n  border-left: 1px solid #e8edf3;\r\n  background: #fff;\r\n}\r\n\r\n.vair-benefit-item {\r\n  padding: 40px 30px;\r\n  border-right: 1px solid #e8edf3;\r\n  font-family: Arial, sans-serif;\r\n}\r\n\r\n.vair-icon {\r\n  margin-bottom: 24px;\r\n}\r\n\r\n.vair-icon svg {\r\n  width: 34px;\r\n  height: 34px;\r\n  stroke: #0C2C4C;\r\n  stroke-width: 1.8;\r\n  fill: none;\r\n  stroke-linecap: round;\r\n  stroke-linejoin: round;\r\n}\r\n\r\n.vair-benefit-item h3 {\r\n  font-family: Arial, sans-serif;\r\n  font-size: 27px;\r\n  line-height: 1.08;\r\n  font-weight: 500;\r\n  color: #0C2C4C;\r\n  margin: 0 0 16px 0;\r\n}\r\n\r\n.vair-benefit-item p {\r\n  font-family: Arial, sans-serif;\r\n  font-size: 15px;\r\n  line-height: 1.55;\r\n  font-weight: 400;\r\n  color: #0C2C4C;\r\n  margin: 0;\r\n}\r\n\r\n\/* Tablet *\/\r\n@media (max-width: 992px) {\r\n  .vair-benefits-grid {\r\n    grid-template-columns: repeat(2, 1fr);\r\n  }\r\n\r\n  .vair-benefit-item:nth-child(2) {\r\n    border-right: none;\r\n  }\r\n}\r\n\r\n\/* Mobile *\/\r\n@media (max-width: 600px) {\r\n  .vair-benefits-grid {\r\n    grid-template-columns: 1fr;\r\n    border-left: none;\r\n  }\r\n\r\n  .vair-benefit-item {\r\n    border-right: none;\r\n    border-bottom: 1px solid #e8edf3;\r\n  }\r\n}\r\n\r\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-424dc7d e-con-full e-flex e-con e-child\" data-id=\"424dc7d\" data-element_type=\"container\" data-e-type=\"container\" id=\"finanzierungen\" data-settings=\"{&quot;_ha_eqh_enable&quot;:false}\">\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7fe9ec9 elementor-widget elementor-widget-html\" data-id=\"7fe9ec9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"vw-finance-slider\" id=\"vwFinanceSlider\">\r\n  <div class=\"vw-finance-top\">\r\n    <h2>Fahrzeugl\u00f6sungen<\/h2>\r\n\r\n    <div class=\"vw-nav\">\r\n      <button class=\"vw-arrow vw-prev\" type=\"button\" aria-label=\"Zur\u00fcck\">\r\n        <span>\u2039<\/span>\r\n      <\/button>\r\n      <button class=\"vw-arrow vw-next\" type=\"button\" aria-label=\"Weiter\">\r\n        <span>\u203a<\/span>\r\n      <\/button>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <div class=\"vw-window\">\r\n    <div class=\"vw-track\">\r\n      <div class=\"vw-box selected\" id=\"fahrzeughandel\">\r\n        <div class=\"vw-gradient\">\r\n          <div class=\"vw-mockup\">\r\n            <div class=\"vw-card-icon\">\r\n              <!-- Fahrzeughandel: Auto -->\r\n              <svg viewBox=\"0 0 24 24\">\r\n                <path d=\"M4 14l1.6-4.2A2.8 2.8 0 0 1 8.2 8h7.6a2.8 2.8 0 0 1 2.6 1.8L20 14\" \/>\r\n                <path d=\"M3 14h18v4H3z\" \/>\r\n                <path d=\"M6 14l1.2-3h9.6L18 14\" \/>\r\n                <circle cx=\"7\" cy=\"18\" r=\"1.8\" \/>\r\n                <circle cx=\"17\" cy=\"18\" r=\"1.8\" \/>\r\n                <path d=\"M9 11v3\" \/>\r\n                <path d=\"M15 11v3\" \/>\r\n              <\/svg>\r\n            <\/div>\r\n          <\/div>\r\n        <\/div>\r\n        <h3>Fahrzeughandel<\/h3>\r\n        <p>Verkaufsmanagement mit KI<\/p>\r\n        <p>Mehr Verk\u00e4ufe & Qualit\u00e4t<\/p>\r\n        <p>Neu- & Gebrauchtwagen<\/p>\r\n        <button class=\"vw-popup-btn\" type=\"button\">Anmelden<\/button>\r\n      <\/div>\r\n\r\n     <div class=\"vw-box\" id=\"absatzfinanzierung\">\r\n        <div class=\"vw-gradient\">\r\n          <div class=\"vw-mockup\">\r\n            <div class=\"vw-card-icon\">\r\n              <!-- Absatzfinanzierung: Auto + Euro -->\r\n              <svg viewBox=\"0 0 24 24\">\r\n                <path d=\"M3 14l1.4-3.5A2.4 2.4 0 0 1 6.7 9h6.6a2.4 2.4 0 0 1 2.3 1.5L17 14\" \/>\r\n                <path d=\"M2.5 14h15v4h-15z\" \/>\r\n                <circle cx=\"6\" cy=\"18\" r=\"1.6\" \/>\r\n                <circle cx=\"14\" cy=\"18\" r=\"1.6\" \/>\r\n                <circle cx=\"18.5\" cy=\"7.5\" r=\"3.5\" \/>\r\n                <path d=\"M20 6.2h-2.2a1.5 1.5 0 0 0 0 3H20\" \/>\r\n                <path d=\"M17 7.5h2.8\" \/>\r\n              <\/svg>\r\n            <\/div>\r\n          <\/div>\r\n        <\/div>\r\n        <h3>Absatzfinanzierung<\/h3>\r\n        <p>Leasing, Finanzierung, Mietkauf<\/p>\r\n        <p>Finanzierung ohne Zinsen<\/p>\r\n        <p>H\u00f6here Verkaufschancen<\/p>\r\n        <button class=\"vw-popup-btn\" type=\"button\">Anmelden<\/button>\r\n      <\/div>\r\n\r\n     <div class=\"vw-box\" id=\"einkaufsfinanzierung\">\r\n        <div class=\"vw-gradient\">\r\n          <div class=\"vw-mockup\">\r\n            <div class=\"vw-card-icon\">\r\n              <!-- Einkaufsfinanzierung: Einkaufswagen + Auto -->\r\n              <svg viewBox=\"0 0 24 24\">\r\n                <path d=\"M3 5h2l2 10h10l2-7H7\" \/>\r\n                <circle cx=\"9\" cy=\"19\" r=\"1.6\" \/>\r\n                <circle cx=\"17\" cy=\"19\" r=\"1.6\" \/>\r\n                <path d=\"M9 11l1-2h4l1 2\" \/>\r\n                <path d=\"M8.5 11h7v3h-7z\" \/>\r\n                <path d=\"M10 14v1\" \/>\r\n                <path d=\"M14 14v1\" \/>\r\n              <\/svg>\r\n            <\/div>\r\n          <\/div>\r\n        <\/div>\r\n        <h3>Einkaufsfinanzierung<\/h3>\r\n        <p>Finanzierung des Bestands<\/p>\r\n        <p>Mehr Liquidit\u00e4t, Wachstum & Expansion<\/p>\r\n        <p>Schnelle digitale Prozesse<\/p>\r\n        <button class=\"vw-popup-btn\" type=\"button\">Anmelden<\/button>\r\n      <\/div>\r\n\r\n      <div class=\"vw-box\" id=\"flottenloesungen\">\r\n        <div class=\"vw-gradient\">\r\n          <div class=\"vw-mockup\">\r\n            <div class=\"vw-card-icon\">\r\n              <!-- Flottenl\u00f6sungen: mehrere Fahrzeuge -->\r\n              <svg viewBox=\"0 0 24 24\">\r\n                <path d=\"M3 15l1.2-3A2 2 0 0 1 6 10.8h4.5A2 2 0 0 1 12.3 12l1.2 3\" \/>\r\n                <path d=\"M2.5 15h12v3h-12z\" \/>\r\n                <circle cx=\"5.5\" cy=\"18\" r=\"1.3\" \/>\r\n                <circle cx=\"11.5\" cy=\"18\" r=\"1.3\" \/>\r\n                <path d=\"M10.5 9l1-2.3A2 2 0 0 1 13.3 5.5h4.2a2 2 0 0 1 1.8 1.2L20.5 10\" \/>\r\n                <path d=\"M12 10h9.5v3.5h-5\" \/>\r\n                <circle cx=\"18.5\" cy=\"13.5\" r=\"1.3\" \/>\r\n              <\/svg>\r\n            <\/div>\r\n          <\/div>\r\n        <\/div>\r\n        <h3>Flottenl\u00f6sungen<\/h3>\r\n        <p>Schnelle L\u00f6sungen, F\u00fcr Firmen & Unternehmen<\/p>\r\n        <p>Flexible Laufzeiten & Modelle<\/p>\r\n        <p>Moderne Mobilit\u00e4tsl\u00f6sungen<\/p>\r\n        <button class=\"vw-popup-btn\" type=\"button\">Anmelden<\/button>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n<style>\r\n#vwFinanceSlider {\r\n  width: 100%;\r\n  padding: 60px 0;\r\n  overflow: hidden;\r\n  font-family: Arial, sans-serif;\r\n}\r\n\r\n#vwFinanceSlider .vw-finance-top {\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: space-between;\r\n  gap: 20px;\r\n  margin-bottom: 35px;\r\n}\r\n\r\n#vwFinanceSlider .vw-finance-top h2 {\r\n  font-family: Arial, sans-serif;\r\n  font-size: 27px;\r\n  line-height: 1.08;\r\n  font-weight: 500;\r\n  color: #0C2C4C;\r\n  margin: 0;\r\n  padding-left: 450px;\r\n}\r\n\r\n#vwFinanceSlider .vw-nav {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 12px;\r\n  padding-right: 30px;\r\n}\r\n\r\n#vwFinanceSlider .vw-arrow {\r\n  width: 42px;\r\n  height: 42px;\r\n  min-width: 42px;\r\n  min-height: 42px;\r\n  border-radius: 50%;\r\n  border: 1px solid rgba(12,44,76,.18);\r\n  background: #ffffff;\r\n  color: #0C2C4C;\r\n  cursor: pointer;\r\n  padding: 0;\r\n  margin: 0;\r\n  display: inline-flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  box-shadow: 0 8px 22px rgba(12,44,76,.10);\r\n  transition: all .25s ease;\r\n}\r\n\r\n#vwFinanceSlider .vw-arrow span {\r\n  display: block;\r\n  font-size: 28px;\r\n  line-height: 1;\r\n  transform: translateY(-1px);\r\n}\r\n\r\n#vwFinanceSlider .vw-arrow:hover {\r\n  background: #B49C44;\r\n  color: #ffffff;\r\n  border-color: #B49C44;\r\n}\r\n\r\n#vwFinanceSlider .vw-window {\r\n  width: 100%;\r\n  overflow-x: auto;\r\n  overflow-y: hidden;\r\n  cursor: grab;\r\n  user-select: none;\r\n  scroll-behavior: smooth;\r\n  scrollbar-width: none;\r\n  -ms-overflow-style: none;\r\n  padding: 10px 30px 40px;\r\n}\r\n\r\n#vwFinanceSlider .vw-window::-webkit-scrollbar {\r\n  display: none;\r\n}\r\n\r\n#vwFinanceSlider .vw-window.dragging {\r\n  cursor: grabbing;\r\n  scroll-behavior: auto;\r\n}\r\n\r\n#vwFinanceSlider .vw-track {\r\n  display: flex;\r\n  gap: 28px;\r\n  width: max-content;\r\n}\r\n\r\n#vwFinanceSlider .vw-box {\r\n  flex: 0 0 340px;\r\n  background: #ffffff;\r\n  border-radius: 22px;\r\n  padding: 26px;\r\n  min-height: 430px;\r\n  cursor: pointer;\r\n  border: 1px solid rgba(12,44,76,.08);\r\n  box-shadow: 0 18px 45px rgba(12,44,76,.10);\r\n  transition: transform .25s ease, box-shadow .25s ease, border-color .25s ease;\r\n  scroll-margin-top: 110px;\r\n}\r\n\r\n#vwFinanceSlider .vw-box:hover {\r\n  transform: translateY(-6px);\r\n  box-shadow: 0 24px 58px rgba(12,44,76,.14);\r\n}\r\n\r\n#vwFinanceSlider .vw-box.selected {\r\n  border-color: rgba(180,156,68,.75);\r\n  box-shadow: 0 24px 60px rgba(12,44,76,.16);\r\n}\r\n\r\n#vwFinanceSlider .vw-gradient {\r\n  height: 205px;\r\n  border-radius: 18px;\r\n  margin-bottom: 28px;\r\n  position: relative;\r\n  overflow: hidden;\r\n  background: linear-gradient(135deg, #B49C44 0%, #f6f2e3 42%, #0C2C4C 100%);\r\n}\r\n\r\n#vwFinanceSlider .vw-box.selected .vw-gradient {\r\n  background: linear-gradient(135deg, #B49C44 0%, #ffffff 36%, #0C2C4C 100%);\r\n}\r\n\r\n#vwFinanceSlider .vw-mockup {\r\n  position: absolute;\r\n  left: 42px;\r\n  right: 42px;\r\n  top: 42px;\r\n  bottom: 42px;\r\n  background: rgba(255,255,255,.88);\r\n  border-radius: 16px;\r\n  box-shadow: 0 20px 40px rgba(12,44,76,.18);\r\n}\r\n\r\n#vwFinanceSlider .vw-card-icon {\r\n  position: absolute;\r\n  inset: 0;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n}\r\n\r\n#vwFinanceSlider .vw-card-icon svg {\r\n  width: 74px;\r\n  height: 74px;\r\n  fill: none;\r\n  stroke: #B49C44;\r\n  stroke-width: 1.8;\r\n  stroke-linecap: round;\r\n  stroke-linejoin: round;\r\n  filter: drop-shadow(0 6px 10px rgba(12,44,76,.12));\r\n}\r\n\r\n#vwFinanceSlider h3 {\r\n  font-family: Arial, sans-serif;\r\n  font-size: 27px;\r\n  line-height: 1.08;\r\n  font-weight: 500;\r\n  color: #0C2C4C;\r\n  margin: 0 0 18px;\r\n}\r\n\r\n#vwFinanceSlider p {\r\n  font-family: Arial, sans-serif;\r\n  font-size: 15px;\r\n  line-height: 1.55;\r\n  font-weight: 400;\r\n  color: #0C2C4C;\r\n  margin: 11px 0;\r\n  padding-left: 25px;\r\n  position: relative;\r\n}\r\n\r\n#vwFinanceSlider p:before {\r\n  content: \"\u2713\";\r\n  position: absolute;\r\n  left: 0;\r\n  top: 0;\r\n  color: #B49C44;\r\n  font-weight: 700;\r\n}\r\n\r\n#vwFinanceSlider .vw-popup-btn {\r\n  margin-top: 18px;\r\n  background: #B49C44;\r\n  color: #ffffff;\r\n  border: none;\r\n  border-radius: 999px;\r\n  padding: 12px 22px;\r\n  font-size: 15px;\r\n  font-weight: 700;\r\n  cursor: pointer;\r\n  transition: all .25s ease;\r\n}\r\n\r\n#vwFinanceSlider .vw-popup-btn:hover {\r\n  background: #0C2C4C;\r\n}\r\n\r\n@media(max-width: 767px) {\r\n  #vwFinanceSlider {\r\n    padding: 40px 20px;\r\n    overflow: visible;\r\n  }\r\n\r\n  #vwFinanceSlider .vw-finance-top {\r\n    display: block;\r\n    margin-bottom: 25px;\r\n  }\r\n\r\n  #vwFinanceSlider .vw-finance-top h2 {\r\n  font-size: 27px;\r\n  line-height: 1.08;\r\n  font-weight: 500;\r\n  padding-left: 0;\r\n  text-align: center;\r\n  width: 100%;\r\n  margin: 0 auto;\r\n}\r\n\r\n  #vwFinanceSlider .vw-nav {\r\n    display: none;\r\n  }\r\n\r\n  #vwFinanceSlider .vw-window {\r\n    padding: 0;\r\n    overflow: visible;\r\n    cursor: default;\r\n    user-select: auto;\r\n  }\r\n\r\n  #vwFinanceSlider .vw-track {\r\n    width: 100%;\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 22px;\r\n  }\r\n\r\n  #vwFinanceSlider .vw-box {\r\n    width: 100%;\r\n    flex: none;\r\n    min-height: auto;\r\n    padding: 22px;\r\n  }\r\n\r\n  #vwFinanceSlider .vw-box:hover {\r\n    transform: none;\r\n  }\r\n\r\n  #vwFinanceSlider .vw-gradient {\r\n    height: 185px;\r\n    margin-bottom: 24px;\r\n  }\r\n\r\n  #vwFinanceSlider .vw-mockup {\r\n    left: 32px;\r\n    right: 32px;\r\n    top: 36px;\r\n    bottom: 36px;\r\n  }\r\n\r\n  #vwFinanceSlider h3 {\r\n    font-size: 19px;\r\n  }\r\n}\r\n<\/style>\r\n\r\n<script>\r\n(function () {\r\n  function initFinanceSlider() {\r\n    const slider = document.getElementById(\"vwFinanceSlider\");\r\n    if (!slider || slider.dataset.ready === \"true\") return;\r\n\r\n    slider.dataset.ready = \"true\";\r\n\r\n    const windowEl = slider.querySelector(\".vw-window\");\r\n    const cards = Array.from(slider.querySelectorAll(\".vw-box\"));\r\n    const prev = slider.querySelector(\".vw-prev\");\r\n    const next = slider.querySelector(\".vw-next\");\r\n\r\n    let isDown = false;\r\n    let startX = 0;\r\n    let scrollLeft = 0;\r\n    let moved = false;\r\n\r\n    function isMobile() {\r\n      return window.matchMedia(\"(max-width: 767px)\").matches;\r\n    }\r\n\r\n    function cardStep() {\r\n      const firstCard = cards[0];\r\n      if (!firstCard) return 360;\r\n      return firstCard.offsetWidth + 28;\r\n    }\r\n\r\n    function selectCard(card, shouldScroll) {\r\n  cards.forEach(function (item) {\r\n    item.classList.remove(\"selected\");\r\n  });\r\n\r\n  card.classList.add(\"selected\");\r\n\r\n  if (shouldScroll && !isMobile()) {\r\n    windowEl.scrollTo({\r\n      left: card.offsetLeft - windowEl.offsetWidth \/ 2 + card.offsetWidth \/ 2,\r\n      behavior: \"smooth\"\r\n    });\r\n  }\r\n}\r\n\r\nfunction selectCardFromHash() {\r\n  const hash = window.location.hash;\r\n  if (!hash) return;\r\n\r\n  const target = slider.querySelector(hash);\r\n  if (!target || !target.classList.contains(\"vw-box\")) return;\r\n\r\n  selectCard(target, true);;\r\n}\r\n\r\nselectCardFromHash();\r\n\r\nwindow.addEventListener(\"hashchange\", function () {\r\n  selectCardFromHash();\r\n});\r\n\r\n    cards.forEach(function (card) {\r\n      const button = card.querySelector(\".vw-popup-btn\");\r\n\r\n      card.addEventListener(\"click\", function () {\r\n        if (moved) return;\r\n        selectCard(card, false);\r\n      });\r\n\r\n      if (button) {\r\n        button.addEventListener(\"click\", function (e) {\r\n          e.stopPropagation();\r\n\r\n          if (typeof elementorProFrontend !== \"undefined\") {\r\n            elementorProFrontend.modules.popup.showPopup({\r\n              id: 2777\r\n            });\r\n          }\r\n        });\r\n      }\r\n    });\r\n\r\n    if (next) {\r\n      next.addEventListener(\"click\", function () {\r\n        if (isMobile()) return;\r\n\r\n        windowEl.scrollBy({\r\n          left: cardStep(),\r\n          behavior: \"smooth\"\r\n        });\r\n      });\r\n    }\r\n\r\n    if (prev) {\r\n      prev.addEventListener(\"click\", function () {\r\n        if (isMobile()) return;\r\n\r\n        windowEl.scrollBy({\r\n          left: -cardStep(),\r\n          behavior: \"smooth\"\r\n        });\r\n      });\r\n    }\r\n\r\n    windowEl.addEventListener(\"mousedown\", function (e) {\r\n      if (isMobile()) return;\r\n\r\n      isDown = true;\r\n      moved = false;\r\n      windowEl.classList.add(\"dragging\");\r\n      startX = e.pageX - windowEl.offsetLeft;\r\n      scrollLeft = windowEl.scrollLeft;\r\n    });\r\n\r\n    windowEl.addEventListener(\"mouseleave\", function () {\r\n      isDown = false;\r\n      windowEl.classList.remove(\"dragging\");\r\n    });\r\n\r\n    windowEl.addEventListener(\"mouseup\", function () {\r\n      isDown = false;\r\n      windowEl.classList.remove(\"dragging\");\r\n\r\n      setTimeout(function () {\r\n        moved = false;\r\n      }, 80);\r\n    });\r\n\r\n    windowEl.addEventListener(\"mousemove\", function (e) {\r\n      if (!isDown || isMobile()) return;\r\n      e.preventDefault();\r\n\r\n      const x = e.pageX - windowEl.offsetLeft;\r\n      const walk = (x - startX) * 1.2;\r\n\r\n      if (Math.abs(walk) > 5) moved = true;\r\n\r\n      windowEl.scrollLeft = scrollLeft - walk;\r\n    });\r\n  }\r\n\r\n  if (document.readyState === \"loading\") {\r\n    document.addEventListener(\"DOMContentLoaded\", initFinanceSlider);\r\n  } else {\r\n    initFinanceSlider();\r\n  }\r\n\r\n  window.addEventListener(\"load\", initFinanceSlider);\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e0d4d64 elementor-widget elementor-widget-html\" data-id=\"e0d4d64\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>\r\n.vair-stats-section {\r\n  font-family: Arial, sans-serif;\r\n  display: grid;\r\n  grid-template-columns: repeat(2, 1fr);\r\n  gap: 32px;\r\n  max-width: 980px;\r\n  margin: 0 auto;\r\n}\r\n\r\n.vair-stat {\r\n  display: flex;\r\n  flex-direction: column;\r\n  height: 100%;\r\n}\r\n\r\n.vair-text {\r\n  min-height: 210px;\r\n}\r\n\r\n.vair-stat h3 {\r\n  font-family: Arial, sans-serif;\r\n  font-size: 27px;\r\n  line-height: 1.08;\r\n  font-weight: 500;\r\n  color: #0C2C4C;\r\n  margin: 0 0 18px;\r\n}\r\n\r\n.vair-stat p,\r\n.vair-caption {\r\n  font-family: Arial, sans-serif;\r\n  font-size: 15px;\r\n  line-height: 1.55;\r\n  font-weight: 400;\r\n  color: #0C2C4C;\r\n}\r\n\r\n.vair-number-box {\r\n  background: #f6f8fb;\r\n  border: 1px solid #e7edf3;\r\n  border-radius: 8px;\r\n  height: 210px;\r\n  display: flex;\r\n  flex-direction: column;\r\n  justify-content: center;\r\n  align-items: center;\r\n  text-align: center;\r\n}\r\n\r\n.vair-number {\r\n  font-family: Arial, sans-serif;\r\n  font-size: 64px;\r\n  font-weight: 700;\r\n  line-height: 1;\r\n  background: linear-gradient(90deg, #0C2C4C, #B49C44);\r\n  -webkit-background-clip: text;\r\n  -webkit-text-fill-color: transparent;\r\n  background-clip: text;\r\n  margin-bottom: 14px;\r\n}\r\n\r\n.vair-caption {\r\n  font-family: Arial, sans-serif;\r\n  font-size: 15px;\r\n  font-weight: 400;\r\n  color: #0C2C4C;\r\n}\r\n\r\n@media (max-width: 768px) {\r\n  .vair-stats-section {\r\n    grid-template-columns: 1fr;\r\n  }\r\n\r\n  .vair-text {\r\n    min-height: auto;\r\n    margin-bottom: 24px;\r\n  }\r\n\r\n\r\n}\r\n<\/style>\r\n\r\n<div class=\"vair-stats-section\">\r\n\r\n  <div class=\"vair-stat\">\r\n    <div class=\"vair-text\">\r\n      <h3>Individuelle L\u00f6sungen f\u00fcr jede Fahrzeugsituation<\/h3>\r\n      <p>\r\n        Wir begleiten Unternehmen und Privatkunden mit klar strukturierten L\u00f6sungen rund um Fahrzeugkauf, Finanzierung, Vermietung und Investments \u2013 passend zu Bedarf, Wachstum und Zielsetzung.\r\n      <\/p>\r\n    <\/div>\r\n    <div class=\"vair-number-box\">\r\n      <div class=\"vair-number\">5<\/div>\r\n      <div class=\"vair-caption\">Fahrzeugbereiche<\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <div class=\"vair-stat\">\r\n    <div class=\"vair-text\">\r\n      <h3>Vielf\u00e4ltige Modelle f\u00fcr mehr Mobilit\u00e4tsflexibilit\u00e4t<\/h3>\r\n      <p>\r\n        Von Einkaufs- und Absatzfinanzierung bis hin zu Langzeitvermietung und Fahrzeug-Investments schaffen wir Zugang zu flexiblen L\u00f6sungen \u00fcber ausgew\u00e4hlte Partner.\r\n      <\/p>\r\n    <\/div>\r\n    <div class=\"vair-number-box\">\r\n      <div class=\"vair-number\">B2B & B2C<\/div>\r\n      <div class=\"vair-caption\">L\u00f6sungen<\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <div class=\"vair-stat\">\r\n    <div class=\"vair-text\">\r\n      <h3>Starke Partner f\u00fcr nachhaltige Fahrzeugl\u00f6sungen<\/h3>\r\n      <p>\r\n        Durch unser gewachsenes Netzwerk verbinden wir H\u00e4ndler, Unternehmen und Investoren mit passenden Finanzierungspartnern, Vermietungsmodellen und strategischen M\u00f6glichkeiten.\r\n      <\/p>\r\n    <\/div>\r\n    <div class=\"vair-number-box\">\r\n      <div class=\"vair-number\">1<\/div>\r\n      <div class=\"vair-caption\">gro\u00dfes Netzwerk<\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <div class=\"vair-stat\">\r\n    <div class=\"vair-text\">\r\n      <h3>Ganzheitliche Betreuung von Anfang bis Abschluss<\/h3>\r\n      <p>\r\n        Wir begleiten den gesamten Prozess transparent, diskret und individuell gepr\u00fcft \u2013 von der Auswahl bis zur erfolgreichen Umsetzung.\r\n      <\/p>\r\n    <\/div>\r\n    <div class=\"vair-number-box\">\r\n      <div class=\"vair-number\">360\u00b0<\/div>\r\n      <div class=\"vair-caption\">Begleitung<\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2828940 elementor-widget elementor-widget-html\" data-id=\"2828940\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>\r\n.vair-faq {\r\n  font-family: Arial, sans-serif;\r\n  max-width: 980px;\r\n  margin: 0 auto;\r\n  padding: 40px 20px;\r\n}\r\n\r\n.vair-faq-title {\r\n  text-align: center;\r\n  margin-bottom: 36px;\r\n}\r\n\r\n.vair-faq-title span {\r\n  color: #B49C44;\r\n  font-size: 15px;\r\n  font-weight: 400;\r\n  letter-spacing: 2px;\r\n  text-transform: uppercase;\r\n}\r\n\r\n.vair-faq-title h2 {\r\n  font-family: Arial, sans-serif;\r\n  font-size: 27px;\r\n  line-height: 1.08;\r\n  font-weight: 500;\r\n  color: #0C2C4C;\r\n  margin: 0;\r\n}\r\n\r\n.vair-faq-item {\r\n  background: #ffffff;\r\n  border-radius: 18px;\r\n  margin-bottom: 18px;\r\n  box-shadow: 0 14px 35px rgba(12, 44, 76, 0.12);\r\n  overflow: hidden;\r\n  border: 1px solid rgba(12, 44, 76, 0.08);\r\n}\r\n\r\n.vair-faq-question {\r\n  width: 100%;\r\n  background: transparent !important;\r\n  border: none !important;\r\n  outline: none !important;\r\n  box-shadow: none !important;\r\n  padding: 26px 30px;\r\n  cursor: pointer;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: space-between;\r\n  color: #0C2C4C !important;\r\n  font-family: Arial, sans-serif;\r\n  font-size: 27px;\r\n  line-height: 1.08;\r\n  font-weight: 500;\r\n  text-align: left;\r\n}\r\n\r\n.vair-faq-question:hover,\r\n.vair-faq-question:focus,\r\n.vair-faq-question:active {\r\n  background: transparent !important;\r\n  color: #0C2C4C !important;\r\n  border: none !important;\r\n  outline: none !important;\r\n  box-shadow: none !important;\r\n}\r\n\r\n.vair-faq-question-left {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 20px;\r\n}\r\n\r\n.vair-faq-icon {\r\n  min-width: 38px;\r\n  width: 38px;\r\n  height: 38px;\r\n  border-radius: 50%;\r\n  background: linear-gradient(135deg, #0C2C4C, #B49C44);\r\n  color: #ffffff;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  font-size: 26px;\r\n  font-weight: 400;\r\n  transition: 0.3s ease;\r\n}\r\n\r\n.vair-faq-arrow {\r\n  color: #B49C44;\r\n  font-size: 24px;\r\n  transition: 0.3s ease;\r\n  margin-left: 20px;\r\n  flex-shrink: 0;\r\n}\r\n\r\n.vair-faq-answer {\r\n  max-height: 0;\r\n  overflow: hidden;\r\n  transition: max-height 0.35s ease;\r\n}\r\n\r\n.vair-faq-answer p {\r\n  font-family: Arial, sans-serif;\r\n  color: #0C2C4C;\r\n  font-size: 15px;\r\n  line-height: 1.55;\r\n  font-weight: 400;\r\n  margin: 0;\r\n  padding: 0 30px 28px 88px;\r\n}\r\n\r\n.vair-faq-item.active .vair-faq-answer {\r\n  max-height: 500px;\r\n}\r\n\r\n.vair-faq-item.active .vair-faq-icon {\r\n  background: linear-gradient(135deg, #B49C44, #0C2C4C);\r\n}\r\n\r\n.vair-faq-item.active .vair-faq-icon::before {\r\n  content: \"\u2212\";\r\n}\r\n\r\n.vair-faq-item:not(.active) .vair-faq-icon::before {\r\n  content: \"+\";\r\n}\r\n\r\n.vair-faq-item.active .vair-faq-arrow {\r\n  transform: rotate(180deg);\r\n}\r\n\r\n@media (max-width: 768px) {\r\n  .vair-faq {\r\n    padding: 35px 16px;\r\n    max-width: 100%;\r\n  }\r\n\r\n  .vair-faq-title {\r\n    margin-bottom: 26px;\r\n  }\r\n\r\n  .vair-faq-title span {\r\n    font-size: 13px;\r\n    letter-spacing: 1.6px;\r\n  }\r\n\r\n  .vair-faq-title h2 {\r\n    font-size: 24px;\r\n    line-height: 1.25;\r\n  }\r\n\r\n  .vair-faq-item {\r\n    border-radius: 16px;\r\n    margin-bottom: 14px;\r\n    box-shadow: 0 10px 26px rgba(12, 44, 76, 0.10);\r\n  }\r\n\r\n  .vair-faq-question {\r\n    padding: 20px 16px;\r\n    font-size: 16px;\r\n    line-height: 1.35;\r\n    align-items: flex-start;\r\n    gap: 10px;\r\n  }\r\n\r\n  .vair-faq-question-left {\r\n    display: grid;\r\n    grid-template-columns: 34px 1fr;\r\n    gap: 12px;\r\n    align-items: flex-start;\r\n    min-width: 0;\r\n    flex: 1;\r\n  }\r\n\r\n  .vair-faq-question-left span:last-child {\r\n    display: block;\r\n    white-space: normal;\r\n    overflow-wrap: break-word;\r\n    word-break: normal;\r\n    max-width: 100%;\r\n  }\r\n\r\n  .vair-faq-icon {\r\n    min-width: 34px;\r\n    width: 34px;\r\n    height: 34px;\r\n    font-size: 23px;\r\n  }\r\n\r\n  .vair-faq-arrow {\r\n    display: none;\r\n  }\r\n\r\n  .vair-faq-answer p {\r\n    font-size: 15px;\r\n    line-height: 1.65;\r\n    padding: 0 16px 22px 62px;\r\n  }\r\n}\r\n\r\n@media (max-width: 480px) {\r\n  .vair-faq {\r\n    padding: 30px 14px;\r\n  }\r\n\r\n  .vair-faq-title h2 {\r\n    font-size: 22px;\r\n  }\r\n\r\n  .vair-faq-question {\r\n    padding: 18px 14px;\r\n    font-size: 15.5px;\r\n  }\r\n\r\n  .vair-faq-question-left {\r\n    grid-template-columns: 32px 1fr;\r\n    gap: 10px;\r\n  }\r\n\r\n  .vair-faq-icon {\r\n    min-width: 32px;\r\n    width: 32px;\r\n    height: 32px;\r\n    font-size: 22px;\r\n  }\r\n\r\n  .vair-faq-answer p {\r\n    padding: 0 14px 22px 56px;\r\n    font-size: 14.5px;\r\n  }\r\n}\r\n<\/style>\r\n\r\n<div class=\"vair-faq\">\r\n  <div class=\"vair-faq-title\">\r\n    \r\n    <h2>H\u00e4ufig gestellte Fragen<\/h2>\r\n  <\/div>\r\n\r\n  <div class=\"vair-faq-item active\">\r\n    <button class=\"vair-faq-question\" type=\"button\">\r\n      <div class=\"vair-faq-question-left\">\r\n        <span class=\"vair-faq-icon\"><\/span>\r\n        <span>F\u00fcr wen sind die Fahrzeugl\u00f6sungen von VAIR WORLD geeignet?<\/span>\r\n      <\/div>\r\n      <span class=\"vair-faq-arrow\">\u2304<\/span>\r\n    <\/button>\r\n    <div class=\"vair-faq-answer\">\r\n      <p>Unsere Fahrzeugl\u00f6sungen richten sich an Privatkunden, Unternehmer, H\u00e4ndler, Investoren und Partner, die Fahrzeuge kaufen, finanzieren, vermieten oder wirtschaftlich nutzen m\u00f6chten.<\/p>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <div class=\"vair-faq-item\">\r\n    <button class=\"vair-faq-question\" type=\"button\">\r\n      <div class=\"vair-faq-question-left\">\r\n        <span class=\"vair-faq-icon\"><\/span>\r\n        <span>Kann VAIR WORLD auch Fahrzeugfinanzierungen f\u00fcr H\u00e4ndler oder Unternehmen pr\u00fcfen?<\/span>\r\n      <\/div>\r\n      <span class=\"vair-faq-arrow\">\u2304<\/span>\r\n    <\/button>\r\n    <div class=\"vair-faq-answer\">\r\n      <p>Ja, VAIR WORLD pr\u00fcft je nach Anfrage passende M\u00f6glichkeiten f\u00fcr Einkaufsfinanzierung, Absatzfinanzierung, Fahrzeugbest\u00e4nde, Flotten oder gewerbliche Fahrzeugprojekte.<\/p>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <div class=\"vair-faq-item\">\r\n    <button class=\"vair-faq-question\" type=\"button\">\r\n      <div class=\"vair-faq-question-left\">\r\n        <span class=\"vair-faq-icon\"><\/span>\r\n        <span>Bietet VAIR WORLD eigene Fahrzeuge oder arbeitet ihr mit Partnern?<\/span>\r\n      <\/div>\r\n      <span class=\"vair-faq-arrow\">\u2304<\/span>\r\n    <\/button>\r\n    <div class=\"vair-faq-answer\">\r\n      <p>VAIR WORLD arbeitet je nach Bereich mit eigenen Strukturen und ausgew\u00e4hlten Partnern, um passende Fahrzeug-, Finanzierungs-, Vermietungs- oder Investmentm\u00f6glichkeiten zu pr\u00fcfen.<\/p>\r\n    <\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n<script>\r\ndocument.querySelectorAll('.vair-faq-question').forEach(function(button) {\r\n  button.addEventListener('click', function() {\r\n    const item = this.closest('.vair-faq-item');\r\n\r\n    document.querySelectorAll('.vair-faq-item').forEach(function(faq) {\r\n      if (faq !== item) {\r\n        faq.classList.remove('active');\r\n      }\r\n    });\r\n\r\n    item.classList.toggle('active');\r\n  });\r\n});\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ab660b9 elementor-widget elementor-widget-html\" data-id=\"ab660b9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"process-flow\">\r\n  <h2 class=\"process-title\">Wie funktioniert es?<\/h2>\r\n\r\n  <div class=\"process-steps\">\r\n    <div class=\"process-card\">\r\n      <div class=\"icon\">\u2709<\/div>\r\n      <span>Anfrage senden<\/span>\r\n      <div class=\"hover-text\">\r\n        Sie teilen uns mit, ob es um Fahrzeughandel, Finanzierung, Vermietung oder Investment geht.\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"process-card\">\r\n      <div class=\"icon\">\u2713<\/div>\r\n      <span>Bedarf kl\u00e4ren<\/span>\r\n      <div class=\"hover-text\">\r\n        Wir pr\u00fcfen Fahrzeugart, Budget, Kapitalrahmen, Nutzung, Laufzeit und gew\u00fcnschtes Modell.\r\n\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"process-card\">\r\n      <div class=\"icon\">\u2194<\/div>\r\n      <span>Passende L\u00f6sung einordnen<\/span>\r\n      <div class=\"hover-text\">\r\n        VAIR WORLD ordnet Ihre Anfrage dem passenden Bereich zu: Handel, Absatzfinanzierung, Einkaufsfinanzierung, Langzeitmiete oder Investment.\r\n\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"process-card\">\r\n      <div class=\"icon\">\u2699<\/div>\r\n      <span>Partner & M\u00f6glichkeiten pr\u00fcfen<\/span>\r\n      <div class=\"hover-text\">\r\n        Wir pr\u00fcfen passende Partner, Finanzierungswege oder Fahrzeugoptionen innerhalb unseres Netzwerks.\r\n\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n<style>\r\n.process-flow {\r\n  font-family: Arial, sans-serif;\r\n  color: #0C2C4C;\r\n  width: 100%;\r\n  margin: 0 auto;\r\n}\r\n\r\n.process-title {\r\n  font-family: Arial, sans-serif;\r\n  font-size: 27px !important;\r\n  line-height: 1.08;\r\n  font-weight: 500;\r\n  color: #0C2C4C;\r\n  margin: 0 0 18px 0;\r\n  text-align: center;\r\n}\r\n\r\n.process-steps {\r\n  display: flex;\r\n  gap: 16px;\r\n  justify-content: center;\r\n  align-items: stretch;\r\n  flex-wrap: wrap;\r\n}\r\n\r\n.process-card {\r\n  position: relative;\r\n  background: #ffffff;\r\n  border: 1px solid #e2e8f0;\r\n  border-radius: 8px;\r\n  padding: 16px;\r\n  width: 210px;\r\n  min-height: 110px;\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 14px;\r\n  color: #0C2C4C;\r\n  font-family: Arial, sans-serif;\r\n  font-size: 15px;\r\n  font-weight: 400;\r\n  cursor: pointer;\r\n}\r\n\r\n.icon {\r\n  width: 42px;\r\n  height: 42px;\r\n  min-width: 42px;\r\n  border-radius: 8px;\r\n  background: rgba(12, 44, 76, 0.10);\r\n  color: #0C2C4C;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  font-size: 20px;\r\n}\r\n\r\n.hover-text {\r\n  display: none;\r\n  position: absolute;\r\n  top: calc(100% + 10px);\r\n  left: 0;\r\n  right: 0;\r\n  background: #ffffff;\r\n  border: 1px solid #e2e8f0;\r\n  border-radius: 8px;\r\n  padding: 14px;\r\n  color: #0C2C4C;\r\n  font-family: Arial, sans-serif;\r\n  font-size: 15px;\r\n  line-height: 1.55;\r\n  font-weight: 400;\r\n  z-index: 10;\r\n  box-shadow: 0 8px 20px rgba(12, 44, 76, 0.10);\r\n}\r\n\r\n.process-card:hover .hover-text {\r\n  display: block;\r\n}\r\n\r\n@media (max-width: 768px) {\r\n  .process-steps {\r\n    flex-direction: column;\r\n  }\r\n\r\n  .process-card {\r\n    width: 100%;\r\n  }\r\n}\r\n.process-flow h2.process-title {\r\n  font-family: Arial, sans-serif !important;\r\n  font-size: 27px !important;\r\n  line-height: 1.08 !important;\r\n  font-weight: 500 !important;\r\n  color: #0C2C4C !important;\r\n  margin: 0 0 18px 0 !important;\r\n  text-align: center !important;\r\n}\r\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-e9f9afe e-flex e-con-boxed e-con e-parent\" data-id=\"e9f9afe\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;_ha_eqh_enable&quot;:false}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1b4e3dc elementor-widget elementor-widget-html\" data-id=\"1b4e3dc\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>\r\n  .vair-footer {\r\n  font-family: Arial, sans-serif;\r\n  color: #0C2C4C;\r\n  background: #fff;\r\n  padding: 50px 50px 70px;\r\n}\r\n\r\n  .vair-footer-grid {\r\n    display: grid;\r\n    grid-template-columns: 1.3fr 1fr 1fr 1fr 1fr;\r\n    gap: 55px;\r\n    max-width: 1140px;\r\n    margin: 0 auto;\r\n    align-items: start;\r\n  }\r\n\r\n  .vair-logo-space {\r\n    height: 76px;\r\n    margin-bottom: 10px;\r\n  }\r\n\r\n  .vair-footer-brand p,\r\n.vair-footer a,\r\n.vair-cta-text p {\r\n  font-family: Arial, sans-serif;\r\n  font-size: 15px;\r\n  line-height: 1.55;\r\n  font-weight: 400;\r\n  color: #0C2C4C;\r\n}\r\n\r\n  .vair-footer h4,\r\n.vair-cta-text h3 {\r\n  font-family: Arial, sans-serif;\r\n  font-size: 27px;\r\n  line-height: 1.08;\r\n  font-weight: 500;\r\n  color: #0C2C4C;\r\n  margin: 0 0 22px;\r\n  text-align: left;\r\n}\r\n\r\n.vair-footer a {\r\n  display: block;\r\n  font-family: Arial, sans-serif;\r\n  font-size: 15px;\r\n  line-height: 1.55;\r\n  font-weight: 400;\r\n  color: #0C2C4C;\r\n  text-decoration: none;\r\n  margin-bottom: 12px;\r\n  text-align: left;\r\n}\r\n\r\n  .vair-footer a:hover {\r\n  color: #031322;\r\n}\r\n\r\n  .vair-cta {\r\n    max-width: 1140px;\r\n    margin: 60px auto 0;\r\n    background: #eef6ff;\r\n    border-radius: 10px;\r\n    display: grid;\r\n    grid-template-columns: 1fr 260px;\r\n    align-items: center;\r\n    min-height: 72px;\r\n  }\r\n\r\n  .vair-cta-text {\r\n    padding: 11px 28px;\r\n  }\r\n\r\n  .vair-cta-text h3 {\r\n  font-family: Arial, sans-serif;\r\n  font-size: 27px;\r\n  line-height: 1.08;\r\n  font-weight: 500;\r\n  color: #0C2C4C;\r\n  margin: 0 0 6px;\r\n}\r\n\r\n.vair-cta-text p {\r\n  margin: 0;\r\n  font-size: 15px;\r\n  line-height: 1.25;\r\n  max-width: 520px;\r\n}\r\n\r\n  .vair-button-space {\r\n    min-height: 42px;\r\n  }\r\n\r\n  @media (max-width: 900px) {\r\n    .vair-footer {\r\n      padding: 45px 25px 55px;\r\n    }\r\n\r\n    .vair-footer-grid {\r\n      grid-template-columns: 1fr 1fr;\r\n      gap: 35px;\r\n      text-align: center;\r\n    }\r\n\r\n    .vair-footer-brand {\r\n      grid-column: 1 \/ -1;\r\n      text-align: center;\r\n    }\r\n\r\n    .vair-footer-brand p {\r\n      margin: 0 auto;\r\n    }\r\n\r\n    .vair-logo-space {\r\n      height: 35px;\r\n    }\r\n\r\n    .vair-cta {\r\n      grid-template-columns: 1fr;\r\n      text-align: center;\r\n      margin-top: 45px;\r\n      padding-bottom: 18px;\r\n    }\r\n\r\n    .vair-cta-text p {\r\n      margin: 0 auto;\r\n    }\r\n\r\n    .vair-button-space {\r\n      min-height: 36px;\r\n    }\r\n  }\r\n\r\n  @media (max-width: 600px) {\r\n    .vair-footer-grid {\r\n      grid-template-columns: 1fr;\r\n      gap: 30px;\r\n    }\r\n\r\n    .vair-footer h4 {\r\n      margin-bottom: 14px;\r\n    }\r\n\r\n    .vair-footer a {\r\n      margin-bottom: 11px;\r\n    }\r\n\r\n    .vair-cta-text {\r\n      padding: 22px 18px 8px;\r\n    }\r\n\r\n    @media (max-width: 600px) {\r\n  .vair-cta-text h3 {\r\n    font-family: Arial, sans-serif;\r\n    font-size: 27px;\r\n    line-height: 1.08;\r\n    font-weight: 500;\r\n    color: #0C2C4C;\r\n    text-align: center;\r\n    margin: 0 0 14px;\r\n  }\r\n\r\n  .vair-cta-text p {\r\n    text-align: center;\r\n  }\r\n}\r\n\r\n.vair-cta-text p {\r\n  font-family: Arial, sans-serif;\r\n  font-size: 15px;\r\n  line-height: 1.55;\r\n  font-weight: 400;\r\n  color: #0C2C4C;\r\n}\r\n\r\n.vair-footer h4,\r\n.vair-footer a {\r\n  text-align: center;\r\n}\r\n\r\n}\r\n<\/style>\r\n\r\n<footer class=\"vair-footer\">\r\n  <div class=\"vair-footer-grid\">\r\n\r\n    <div class=\"vair-footer-brand\">\r\n      <div class=\"vair-logo-space\"><\/div>\r\n      <p>Das Business-\u00d6kosystem f\u00fcr Unternehmer, Investoren und Gr\u00fcnder.<\/p>\r\n    <\/div>\r\n\r\n    <div>\r\n      <h4>Finanzierung<\/h4>\r\n     <a href=\"\/finanzierung-testseite\/#autokredit\">Autokredit<\/a>\r\n      <a href=\"\/finanzierung-testseite\/#immobilienkredit\">Immobilienkredit<\/a>\r\n      <a href=\"\/finanzierung-testseite\/#projektfinanzierung\">Projektfinanzierung<\/a>\r\n      <a href=\"\/finanzierung-testseite\/#goldkredit\">Goldkredit<\/a>\r\n    <\/div>\r\n\r\n    <div>\r\n      <h4>Fahrzeuge<\/h4>\r\n      <a href=\"\/fahrzeuge-testseite\/#fahrzeughandel\">Fahrzeughandel<\/a>\r\n      <a href=\"\/fahrzeuge-testseite\/#absatzfinanzierung\">Absatzfinanzierung<\/a>\r\n      <a href=\"\/fahrzeuge-testseite\/#einkaufsfinanzierung\">Einkaufsfinanzierung<\/a>\r\n      <a href=\"\/fahrzeuge-testseite\/#flottenloesungen\">Flottenl\u00f6sungen<\/a>\r\n    <\/div>\r\n\r\n    <div>\r\n  <h4>Konto<\/h4>\r\n      <a href=\"\/konto-testseite\/#geschaeftskonto\">Gesch\u00e4ftskonto<\/a>\r\n      <a href=\"\/konto-testseite\/#sparkonto\">Sparkonto<\/a>\r\n      <a href=\"\/konto-testseite\/#privatkonto\">Privatkonto<\/a>\r\n      <a href=\"\/konto-testseite\/#goldkonto\">Goldkonto<\/a>\r\n<\/div>\r\n\r\n    <div>\r\n      <h4>Support<\/h4>\r\n      <a href=\"\/ueber-uns-testseite\/\">\u00dcber uns<\/a>\r\n      <a href=\"\/kontakt-testseite\/\">Kontakt<\/a>\r\n      <a href=\"\/datenschutz-testseite\/\">Datenschutz<\/a>\r\n      <a href=\"\/impressum-testseite\/\">Impressum<\/a>\r\n    <\/div>\r\n\r\n  <\/div>\r\n\r\n  <div class=\"vair-cta\">\r\n    <div class=\"vair-cta-text\">\r\n      <h3>Bereit zu starten?<\/h3>\r\n      <p>Treten Sie unserem \u00d6kosystem bei und finden Sie die perfekte Finanzierungsl\u00f6sung f\u00fcr Ihr Unternehmen.<\/p>\r\n    <\/div>\r\n\r\n    <div class=\"vair-button-space\"><\/div>\r\n  <\/div>\r\n<\/footer>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b481e4e ha-css-transform-yes elementor-widget elementor-widget-theme-site-logo elementor-widget-image\" data-id=\"b481e4e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"theme-site-logo.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/vair.world\/en\">\n\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"555\" height=\"245\" src=\"https:\/\/vair.world\/wp-content\/uploads\/2024\/03\/Logo_Vair_komplett_4c_compressed.svg\" class=\"attachment-full size-full wp-image-526\" alt=\"\" \/>\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0830935 elementor-widget__width-initial ha-css-transform-yes elementor-widget elementor-widget-button\" data-id=\"0830935\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"#elementor-action%3Aaction%3Dpopup%3Aopen%26settings%3DeyJpZCI6IjI3NzciLCJ0b2dnbGUiOmZhbHNlfQ%3D%3D\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Anfrage senden<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\n    <div class=\"xs_social_share_widget xs_share_url after_content \t\tmain_content  wslu-style-1 wslu-share-box-shaped wslu-fill-colored wslu-none wslu-share-horizontal wslu-theme-font-no wslu-main_content\">\n\n\t\t\n        <ul>\n\t\t\t        <\/ul>\n    <\/div> \n","protected":false},"excerpt":{"rendered":"<p>Fahrzeuge kaufen, finanzieren, vermieten &amp; investieren VAIR WORLD verbindet Fahrzeughandel, Absatzfinanzierung, Einkaufsfinanzierung, Langzeit-Autovermietung und Fahrzeug-Investments \u00fcber ausgew\u00e4hlte Partner \u2013 strukturiert, diskret und individuell gepr\u00fcft. Fahrzeuganfrage starten Leistungen ansehen \u2193 \u2715 Viele Vorhaben im Fahrzeugbereich scheitern an hoher Kapitalbindung und fehlender finanzieller Flexibilit\u00e4t. \u2715 Unternehmen und H\u00e4ndler finden oft keine passende Fahrzeug- oder Flottenfinanzierung. \u2715 Zwischen [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_angie_page":false,"postBodyCss":"","postBodyMargin":[],"postBodyPadding":[],"postBodyBackground":{"backgroundType":"classic","gradient":""},"footnotes":""},"class_list":["post-3011","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/vair.world\/en\/wp-json\/wp\/v2\/pages\/3011","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vair.world\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/vair.world\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/vair.world\/en\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/vair.world\/en\/wp-json\/wp\/v2\/comments?post=3011"}],"version-history":[{"count":250,"href":"https:\/\/vair.world\/en\/wp-json\/wp\/v2\/pages\/3011\/revisions"}],"predecessor-version":[{"id":5694,"href":"https:\/\/vair.world\/en\/wp-json\/wp\/v2\/pages\/3011\/revisions\/5694"}],"wp:attachment":[{"href":"https:\/\/vair.world\/en\/wp-json\/wp\/v2\/media?parent=3011"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}