{"id":6464,"date":"2026-05-29T12:14:30","date_gmt":"2026-05-29T10:14:30","guid":{"rendered":"https:\/\/vair.world\/?page_id=6464"},"modified":"2026-06-09T12:56:45","modified_gmt":"2026-06-09T10:56:45","slug":"immobilien","status":"publish","type":"page","link":"https:\/\/vair.world\/en\/immobilien\/","title":{"rendered":"Immobilien"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"6464\" class=\"elementor elementor-6464\" 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-14359eb e-con-full e-flex e-con e-parent\" data-id=\"14359eb\" 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-9f162cd ha-css-transform-yes elementor-widget elementor-widget-html\" data-id=\"9f162cd\" 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-0267fcb e-flex e-con-boxed e-con e-parent\" data-id=\"0267fcb\" 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-b2ed10c e-con-full e-flex e-con e-child\" data-id=\"b2ed10c\" 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-f78f188 elementor-widget__width-initial ha-css-transform-yes elementor-widget elementor-widget-text-editor\" data-id=\"f78f188\" 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>Internationale Immobilien\u00a0<\/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-98ac8db elementor-widget__width-initial ha-css-transform-yes elementor-hidden-mobile elementor-widget elementor-widget-text-editor\" data-id=\"98ac8db\" 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>Wir verbinden Investoren mit ausgew\u00e4hlten Immobilien in internationalen M\u00e4rkten &#8211; klar strukturiert, pers\u00f6nlich begleitet und passend zur jeweiligen Investmentstrategie<\/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-f3183fa elementor-widget__width-initial ha-css-transform-yes mobile-button-hoch elementor-widget elementor-widget-button\" data-id=\"f3183fa\" 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=\"#immobilien\">\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\">Immobilien 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-96c70d6 elementor-widget elementor-widget-html\" data-id=\"96c70d6\" 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<section class=\"vair-header-search-ui\">\r\n  <style>\r\n    .vair-header-search-ui {\r\n      width: 100%;\r\n      display: flex;\r\n      justify-content: flex-end;\r\n      font-family: Arial, sans-serif;\r\n      transform: translate(-100px, -105px);\r\n    }\r\n\r\n    .vair-header-search-wrap {\r\n      width: min(560px, 100%);\r\n    }\r\n\r\n    .vair-header-search-box {\r\n      width: 100%;\r\n      display: grid;\r\n      grid-template-columns: 1fr 1fr auto;\r\n      gap: 10px;\r\n      padding: 16px;\r\n      border-radius: 14px;\r\n      background: #ffffff;\r\n      border: 1px solid #E2E7EC;\r\n      box-shadow: 0 22px 55px rgba(12, 44, 76, 0.08);\r\n      transition: transform .22s ease, box-shadow .22s ease, border-color .22s ease;\r\n    }\r\n\r\n    .vair-header-search-box:hover {\r\n      transform: translateY(-3px);\r\n      box-shadow: 0 28px 70px rgba(12, 44, 76, 0.11);\r\n      border-color: rgba(181, 162, 74, .7);\r\n    }\r\n\r\n    .vair-header-search-box select,\r\n    .vair-header-search-box button {\r\n      min-height: 43px;\r\n      border-radius: 8px;\r\n      font-family: Arial, sans-serif;\r\n      font-size: 15px;\r\n      line-height: 1;\r\n      outline: none;\r\n    }\r\n\r\n    .vair-header-search-box select {\r\n      width: 100%;\r\n      padding: 0 13px;\r\n      border: 1px solid #E2E7EC;\r\n      background: #ffffff;\r\n      color: #0C2C4C;\r\n      cursor: pointer;\r\n      transition: border-color .22s ease, box-shadow .22s ease;\r\n    }\r\n\r\n    .vair-header-search-box select:hover,\r\n    .vair-header-search-box select:focus {\r\n      border-color: rgba(181, 162, 74, .8);\r\n      box-shadow: 0 0 0 3px rgba(181, 162, 74, 0.12);\r\n    }\r\n\r\n    .vair-header-search-box button {\r\n      padding: 13px 20px;\r\n      border: 1px solid #0C2C4C !important;\r\n      border-radius: 5px !important;\r\n      background: #0C2C4C !important;\r\n      color: #ffffff !important;\r\n      font-weight: 700;\r\n      cursor: pointer;\r\n      white-space: nowrap;\r\n      box-shadow: none !important;\r\n      transition: transform .22s ease, background-color .25s ease, border-color .25s ease;\r\n    }\r\n\r\n    .vair-header-search-box button:hover,\r\n    .vair-header-search-box button:focus {\r\n      background: #071D32 !important;\r\n      border-color: #071D32 !important;\r\n      color: #ffffff !important;\r\n      transform: translateY(-1px);\r\n    }\r\n\r\n    .vair-header-search-trust {\r\n      display: flex;\r\n      flex-wrap: wrap;\r\n      gap: 8px;\r\n      margin-top: 12px;\r\n      justify-content: flex-end;\r\n    }\r\n\r\n    .vair-header-search-trust span {\r\n      display: inline-flex;\r\n      align-items: center;\r\n      min-height: 28px;\r\n      padding: 7px 11px;\r\n      border-radius: 999px;\r\n      background: #F3F5F7;\r\n      color: #0C2C4C;\r\n      font-family: Arial, sans-serif;\r\n      font-size: 12px;\r\n      line-height: 1;\r\n      font-weight: 700;\r\n    }\r\n\r\n    .vair-header-search-trust span:first-child {\r\n      background: rgba(181, 162, 74, 0.14);\r\n      color: #8B7A2D;\r\n    }\r\n\r\n    @media (max-width: 1024px) {\r\n      .vair-header-search-ui {\r\n        transform: translate(-80px, -80px);\r\n      }\r\n    }\r\n\r\n    @media (max-width: 680px) {\r\n      .vair-header-search-ui {\r\n        justify-content: center;\r\n        transform: translate(0, -30px);\r\n        padding: 0 16px;\r\n      }\r\n\r\n      .vair-header-search-box {\r\n        grid-template-columns: 1fr;\r\n      }\r\n\r\n      .vair-header-search-box button {\r\n        width: 100%;\r\n      }\r\n\r\n      .vair-header-search-trust {\r\n        justify-content: center;\r\n      }\r\n    }\r\n  <\/style>\r\n\r\n  <div class=\"vair-header-search-wrap\">\r\n    <div class=\"vair-header-search-box\">\r\n      <select id=\"vairHeroType\">\r\n        <option value=\"all\">Alle Typen<\/option>\r\n        <option value=\"studio\">Studio<\/option>\r\n        <option value=\"apartment\">Apartment<\/option>\r\n        <option value=\"loft\">Loft<\/option>\r\n        <option value=\"penthouse\">Penthouse<\/option>\r\n      <\/select>\r\n\r\n      <select id=\"vairHeroBudget\">\r\n  <option value=\"all\">Budget<\/option>\r\n  <option value=\"100000\">bis \u20ac100.000<\/option>\r\n  <option value=\"150000\">bis \u20ac150.000<\/option>\r\n  <option value=\"200000\">bis \u20ac200.000<\/option>\r\n  <option value=\"250000\">bis \u20ac250.000<\/option>\r\n<\/select>\r\n\r\n      <button type=\"button\" id=\"vairHeroSearchBtn\">Finden<\/button>\r\n    <\/div>\r\n\r\n    <div class=\"vair-header-search-trust\">\r\n  <span>7 internationale M\u00e4rkte<\/span>\r\n  <span>Ausgew\u00e4hlte Immobilien<\/span>\r\n  <span>Pers\u00f6nlich begleitet<\/span>\r\n<\/div>\r\n  <\/div>\r\n\r\n  <script>\r\n    (function () {\r\n      const btn = document.querySelector('#vairHeroSearchBtn');\r\n\r\n      if (!btn) return;\r\n\r\n      btn.addEventListener('click', function () {\r\n        const type = document.querySelector('#vairHeroType').value;\r\n        const budget = document.querySelector('#vairHeroBudget').value;\r\n        const target = document.querySelector('#objekte');\r\n\r\n        if (target) {\r\n          target.scrollIntoView({ behavior: 'smooth', block: 'start' });\r\n        }\r\n\r\n        setTimeout(function () {\r\n          const typeFilter = document.querySelector('#vairType');\r\n          const priceFilter = document.querySelector('#vairPrice');\r\n\r\n          if (typeFilter) {\r\n            typeFilter.value = type;\r\n            typeFilter.dispatchEvent(new Event('input', { bubbles: true }));\r\n          }\r\n\r\n          if (priceFilter) {\r\n            priceFilter.value = budget;\r\n            priceFilter.dispatchEvent(new Event('input', { bubbles: true }));\r\n          }\r\n        }, 450);\r\n      });\r\n    })();\r\n  <\/script>\r\n<\/section>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-719990b elementor-widget elementor-widget-html\" data-id=\"719990b\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"Immobilien\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<section class=\"vair-immo-page\" id=\"immobilien\">\r\n  <style>\r\n    .vair-immo-page {\r\n      --vair-blue: #0C2C4C;\r\n      --vair-gold: #B5A24A;\r\n      --vair-muted: #6E7D89;\r\n      --vair-border: #E2E7EC;\r\n      --vair-soft: #F5F7FA;\r\n      --vair-radius: 14px;\r\n      --vair-shadow: 0 22px 55px rgba(12, 44, 76, 0.08);\r\n      background: #ffffff;\r\n      color: #0C2C4C;\r\n      font-family: Arial, sans-serif;\r\n      overflow: hidden;\r\n    }\r\n\r\n    .vair-immo-page * { box-sizing: border-box; }\r\n\r\n    .vair-container {\r\n      width: min(1080px, calc(100% - 36px));\r\n      margin: 0 auto;\r\n    }\r\n\r\n    .vair-immo-page h1,\r\n    .vair-immo-page h2,\r\n    .vair-immo-page 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      letter-spacing: -0.02em;\r\n    }\r\n\r\n    .vair-immo-page p,\r\n    .vair-immo-page input,\r\n    .vair-immo-page select,\r\n    .vair-immo-page textarea,\r\n    .vair-immo-page li {\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-section {\r\n      padding: 72px 0;\r\n      border-bottom: 1px solid var(--vair-border);\r\n    }\r\n\r\n    .vair-section:last-of-type { border-bottom: 0; }\r\n\r\n    .vair-kicker {\r\n      display: inline-flex;\r\n      align-items: center;\r\n      min-height: 36px;\r\n      padding: 8px 15px;\r\n      margin-bottom: 20px;\r\n      border-radius: 999px;\r\n      background: #F3F5F7;\r\n      color: #0C2C4C;\r\n      font-size: 13px;\r\n      line-height: 1;\r\n      font-weight: 600;\r\n    }\r\n\r\n    .vair-section-head {\r\n      display: grid;\r\n      grid-template-columns: 1fr 1fr;\r\n      gap: 50px;\r\n      align-items: start;\r\n      margin-bottom: 36px;\r\n    }\r\n\r\n    .vair-country-grid {\r\n      display: grid;\r\n      grid-template-columns: repeat(4, 1fr);\r\n      gap: 16px;\r\n    }\r\n\r\n    .vair-country-card,\r\n    .vair-country-button {\r\n      position: relative;\r\n      min-height: 250px;\r\n      width: 100%;\r\n      padding: 26px;\r\n      border: 1px solid var(--vair-border) !important;\r\n      border-radius: var(--vair-radius);\r\n      background: #ffffff !important;\r\n      color: #0C2C4C !important;\r\n      overflow: hidden;\r\n      text-align: left;\r\n      text-decoration: none !important;\r\n      font-family: Arial, sans-serif;\r\n      appearance: none !important;\r\n      -webkit-appearance: none !important;\r\n      cursor: pointer;\r\n      transition: transform .22s ease, box-shadow .22s ease, border-color .22s ease;\r\n    }\r\n\r\n    .vair-country-card:hover,\r\n    .vair-country-button:hover {\r\n      transform: translateY(-3px);\r\n      box-shadow: var(--vair-shadow);\r\n      border-color: rgba(181, 162, 74, .7) !important;\r\n      background: #ffffff !important;\r\n    }\r\n\r\n    .vair-country-card h3,\r\n    .vair-country-button h3 {\r\n      margin-top: 18px;\r\n      color: #0C2C4C !important;\r\n    }\r\n\r\n    .vair-country-card p,\r\n    .vair-country-button p {\r\n      color: var(--vair-muted) !important;\r\n      margin: 0;\r\n    }\r\n\r\n    .vair-badge {\r\n      display: inline-flex;\r\n      align-items: center;\r\n      min-height: 34px;\r\n      padding: 8px 13px;\r\n      border-radius: 999px;\r\n      background: #F3F5F7;\r\n      color: #0C2C4C;\r\n      font-size: 13px;\r\n      font-weight: 700;\r\n      line-height: 1;\r\n    }\r\n\r\n    .vair-badge-gold {\r\n      background: rgba(181, 162, 74, 0.14);\r\n      color: #8B7A2D;\r\n    }\r\n\r\n    .vair-arrow-box {\r\n      position: absolute;\r\n      right: 20px;\r\n      top: 20px;\r\n      width: 38px;\r\n      height: 38px;\r\n      border-radius: 8px;\r\n      display: grid;\r\n      place-items: center;\r\n      background: #F6F2E2 !important;\r\n      line-height: 1;\r\n    }\r\n\r\n    .vair-arrow-box::before {\r\n      content: \"\";\r\n      width: 11px;\r\n      height: 11px;\r\n      border-top: 2px solid #B5A24A;\r\n      border-right: 2px solid #B5A24A;\r\n      transform: rotate(45deg);\r\n      margin-left: -3px;\r\n    }\r\n\r\n\r\n    .vair-country-card.is-active,\r\n    .vair-country-button.is-active {\r\n      border-color: rgba(181, 162, 74, .9) !important;\r\n      box-shadow: var(--vair-shadow);\r\n      transform: translateY(-3px);\r\n    }\r\n\r\n    .vair-no-results {\r\n      display: none;\r\n      padding: 28px;\r\n      border: 1px dashed var(--vair-border);\r\n      border-radius: var(--vair-radius);\r\n      background: #F8FAFC;\r\n      color: var(--vair-muted);\r\n      text-align: center;\r\n      font-size: 15px;\r\n      line-height: 1.5;\r\n    }\r\n\r\n    .vair-no-results.is-visible { display: block; }\r\n\r\n    .vair-filter {\r\n      padding: 16px;\r\n      margin-bottom: 22px;\r\n      border: 1px solid var(--vair-border);\r\n      border-radius: var(--vair-radius);\r\n      background: #ffffff;\r\n      box-shadow: 0 14px 38px rgba(12, 44, 76, 0.05);\r\n    }\r\n\r\n    .vair-filter-grid {\r\n      display: grid;\r\n      grid-template-columns: 1.4fr 1fr 1fr 1fr 1fr auto;\r\n      gap: 10px;\r\n    }\r\n\r\n    .vair-filter input,\r\n    .vair-filter select {\r\n      width: 100%;\r\n      min-height: 43px;\r\n      padding: 0 13px;\r\n      border: 1px solid var(--vair-border);\r\n      border-radius: 8px;\r\n      background: #ffffff;\r\n      outline: none;\r\n    }\r\n\r\n    .vair-property-grid {\r\n      display: grid;\r\n      grid-template-columns: repeat(3, 1fr);\r\n      gap: 18px;\r\n    }\r\n\r\n    .vair-property-card {\r\n      border: 1px solid var(--vair-border);\r\n      border-radius: var(--vair-radius);\r\n      background: #ffffff;\r\n      overflow: hidden;\r\n      transition: transform .22s ease, box-shadow .22s ease, border-color .22s ease;\r\n    }\r\n\r\n    .vair-property-card:hover {\r\n      transform: translateY(-3px);\r\n      box-shadow: var(--vair-shadow);\r\n      border-color: rgba(181, 162, 74, .7);\r\n    }\r\n\r\n    .vair-property-img {\r\n      height: 215px;\r\n      background: #F3F5F7;\r\n      overflow: hidden;\r\n    }\r\n\r\n    .vair-property-img img {\r\n      width: 100%;\r\n      height: 100%;\r\n      object-fit: cover;\r\n      display: block;\r\n    }\r\n\r\n    .vair-property-body { padding: 24px; }\r\n\r\n    .vair-location {\r\n      display: inline-flex;\r\n      margin-bottom: 15px;\r\n      color: var(--vair-muted);\r\n      font-size: 13px;\r\n      font-weight: 700;\r\n    }\r\n\r\n    .vair-property-meta {\r\n      display: grid;\r\n      grid-template-columns: repeat(3, 1fr);\r\n      gap: 8px;\r\n      margin: 20px 0;\r\n    }\r\n\r\n    .vair-property-meta span {\r\n      display: flex;\r\n      align-items: center;\r\n      justify-content: center;\r\n      min-height: 38px;\r\n      padding: 8px;\r\n      border-radius: 8px;\r\n      background: #F5F7FA;\r\n      color: #0C2C4C;\r\n      font-size: 13px;\r\n      line-height: 1.2;\r\n      text-align: center;\r\n    }\r\n\r\n    .vair-property-bottom {\r\n      display: flex;\r\n      align-items: center;\r\n      justify-content: space-between;\r\n      gap: 14px;\r\n      padding-top: 18px;\r\n      border-top: 1px solid var(--vair-border);\r\n    }\r\n\r\n    .vair-price {\r\n      color: #0C2C4C;\r\n      font-size: 20px;\r\n      font-weight: 700;\r\n      line-height: 1;\r\n    }\r\n\r\n    .vair-small-btn {\r\n      min-height: 43px;\r\n      padding: 13px 13px;\r\n      border: 1px solid #0C2C4C !important;\r\n      border-radius: 5px !important;\r\n      background: #0C2C4C !important;\r\n      color: #ffffff !important;\r\n      font-family: Arial, sans-serif;\r\n      font-size: 15px;\r\n      line-height: 1;\r\n      font-weight: 700;\r\n      cursor: pointer;\r\n      box-shadow: none !important;\r\n    }\r\n\r\n    .vair-small-btn:hover {\r\n      background: #071D32 !important;\r\n      border-color: #071D32 !important;\r\n      color: #ffffff !important;\r\n    }\r\n\r\n    .vair-modal-bg {\r\n      position: fixed;\r\n      inset: 0;\r\n      z-index: 999999;\r\n      display: none;\r\n      align-items: center;\r\n      justify-content: center;\r\n      padding: 20px;\r\n      background: rgba(12, 44, 76, .55);\r\n    }\r\n\r\n    .vair-modal-bg.is-open { display: flex; }\r\n\r\n    .vair-modal {\r\n      position: relative;\r\n      width: min(1040px, 100%);\r\n      max-height: 90vh;\r\n      overflow: auto;\r\n      padding: 24px;\r\n      border-radius: 14px;\r\n      background: #ffffff;\r\n      border: 1px solid var(--vair-border);\r\n      box-shadow: 0 28px 80px rgba(12, 44, 76, .22);\r\n    }\r\n\r\n    .vair-modal-close {\r\n  position: absolute;\r\n  top: 14px;\r\n  right: 14px;\r\n  width: 43px;\r\n  height: 43px;\r\n  padding: 0 !important;\r\n  border: 1px solid #0C2C4C !important;\r\n  border-radius: 5px !important;\r\n  background: #0C2C4C !important;\r\n  color: #ffffff !important;\r\n  cursor: pointer;\r\n  font-size: 28px;\r\n  line-height: 43px;\r\n  font-weight: 700;\r\n  text-align: center;\r\n  z-index: 3;\r\n  box-shadow: none !important;\r\n  transition: transform .22s ease, background-color .25s ease, border-color .25s ease;\r\n}\r\n\r\n.vair-modal-close:hover,\r\n.vair-modal-close:focus {\r\n  background: #071D32 !important;\r\n  border-color: #071D32 !important;\r\n  color: #ffffff !important;\r\n  transform: translateY(-1px);\r\n}\r\n\r\n.vair-modal-close:active {\r\n  transform: translateY(0);\r\n}\r\n    .vair-modal-grid {\r\n      display: grid;\r\n      grid-template-columns: 1.15fr .85fr;\r\n      gap: 24px;\r\n      align-items: start;\r\n    }\r\n\r\n    .vair-gallery-main {\r\n      position: relative;\r\n      width: 100%;\r\n      height: 420px;\r\n      border-radius: 12px;\r\n      overflow: hidden;\r\n      background: #F3F5F7;\r\n      border: 1px solid var(--vair-border);\r\n    }\r\n\r\n    .vair-gallery-main img {\r\n      width: 100%;\r\n      height: 100%;\r\n      object-fit: contain;\r\n      object-position: center;\r\n      display: block;\r\n      background: #ffffff;\r\n      cursor: zoom-in;\r\n    }\r\n\r\n    .vair-gallery-expand {\r\n      position: absolute;\r\n      top: 12px;\r\n      right: 12px;\r\n      width: 43px;\r\n      height: 43px;\r\n      padding: 0 !important;\r\n      border: 1px solid #0C2C4C !important;\r\n      border-radius: 5px !important;\r\n      background: #0C2C4C !important;\r\n      color: #ffffff !important;\r\n      cursor: pointer;\r\n      display: grid;\r\n      place-items: center;\r\n      z-index: 2;\r\n      box-shadow: none !important;\r\n      transition: transform .22s ease, background-color .25s ease, border-color .25s ease;\r\n    }\r\n\r\n    .vair-gallery-expand:hover,\r\n    .vair-gallery-expand:focus {\r\n      background: #071D32 !important;\r\n      border-color: #071D32 !important;\r\n      transform: translateY(-1px);\r\n      color: #ffffff !important;\r\n    }\r\n\r\n    .vair-gallery-expand svg {\r\n      width: 20px;\r\n      height: 20px;\r\n      display: block;\r\n      stroke: currentColor;\r\n    }\r\n\r\n\r\n    .vair-gallery-prev,\r\n    .vair-gallery-next {\r\n      position: absolute;\r\n      top: 50%;\r\n      width: 44px;\r\n      height: 44px;\r\n      padding: 0 !important;\r\n      border: 1px solid #0C2C4C !important;\r\n      border-radius: 5px !important;\r\n      background: rgba(12, 44, 76, .94) !important;\r\n      color: #ffffff !important;\r\n      cursor: pointer;\r\n      display: flex;\r\n      align-items: center;\r\n      justify-content: center;\r\n      z-index: 2;\r\n      font-family: Arial, sans-serif;\r\n      font-size: 34px;\r\n      line-height: 1;\r\n      font-weight: 700;\r\n      box-shadow: none !important;\r\n      transform: translateY(-50%);\r\n      transition: transform .22s ease, background-color .25s ease, border-color .25s ease;\r\n    }\r\n\r\n    .vair-gallery-prev { left: 12px; }\r\n    .vair-gallery-next { right: 12px; }\r\n\r\n    .vair-gallery-prev:hover,\r\n    .vair-gallery-next:hover,\r\n    .vair-gallery-prev:focus,\r\n    .vair-gallery-next:focus {\r\n      background: #071D32 !important;\r\n      border-color: #071D32 !important;\r\n      color: #ffffff !important;\r\n    }\r\n\r\n    .vair-gallery-thumbs button.is-active {\r\n      border-color: #0C2C4C !important;\r\n      box-shadow: 0 0 0 2px rgba(12, 44, 76, .18);\r\n    }\r\n\r\n    .vair-gallery-actions {\r\n      display: flex;\r\n      gap: 10px;\r\n      margin-top: 10px;\r\n    }\r\n\r\n    .vair-gallery-actions .vair-small-btn {\r\n      flex: 1;\r\n      min-height: 42px;\r\n    }\r\n\r\n    .vair-lightbox-bg {\r\n      position: fixed;\r\n      inset: 0;\r\n      z-index: 1000000;\r\n      display: none;\r\n      align-items: center;\r\n      justify-content: center;\r\n      padding: 22px;\r\n      background: rgba(12, 44, 76, .88);\r\n    }\r\n\r\n    .vair-lightbox-bg.is-open { display: flex; }\r\n\r\n    .vair-lightbox {\r\n      position: relative;\r\n      width: min(1180px, 100%);\r\n      height: min(82vh, 760px);\r\n      display: flex;\r\n      align-items: center;\r\n      justify-content: center;\r\n      border-radius: 14px;\r\n      background: #ffffff;\r\n      border: 1px solid rgba(255,255,255,.25);\r\n      box-shadow: 0 28px 80px rgba(0,0,0,.35);\r\n      overflow: hidden;\r\n    }\r\n\r\n    .vair-lightbox img {\r\n      width: 100%;\r\n      height: 100%;\r\n      object-fit: contain;\r\n      object-position: center;\r\n      display: block;\r\n      background: #ffffff;\r\n    }\r\n\r\n    .vair-lightbox-close,\r\n    .vair-lightbox-prev,\r\n    .vair-lightbox-next {\r\n      position: absolute;\r\n      width: 43px;\r\n      height: 43px;\r\n      padding: 0 !important;\r\n      border: 1px solid #0C2C4C !important;\r\n      border-radius: 5px !important;\r\n      background: #0C2C4C !important;\r\n      color: #ffffff !important;\r\n      cursor: pointer;\r\n      display: grid;\r\n      place-items: center;\r\n      z-index: 4;\r\n      font-family: Arial, sans-serif;\r\n      font-weight: 700;\r\n      box-shadow: none !important;\r\n      transition: transform .22s ease, background-color .25s ease, border-color .25s ease;\r\n    }\r\n\r\n    .vair-lightbox-close:hover,\r\n    .vair-lightbox-prev:hover,\r\n    .vair-lightbox-next:hover,\r\n    .vair-lightbox-close:focus,\r\n    .vair-lightbox-prev:focus,\r\n    .vair-lightbox-next:focus {\r\n      background: #071D32 !important;\r\n      border-color: #071D32 !important;\r\n      color: #ffffff !important;\r\n      transform: translateY(-1px);\r\n    }\r\n\r\n    .vair-lightbox-close {\r\n      top: 14px;\r\n      right: 14px;\r\n      font-size: 28px;\r\n      line-height: 43px;\r\n    }\r\n\r\n    .vair-lightbox-prev,\r\n    .vair-lightbox-next {\r\n      top: 50%;\r\n      transform: translateY(-50%);\r\n      font-size: 34px;\r\n      line-height: 1;\r\n    }\r\n\r\n    .vair-lightbox-prev:hover,\r\n    .vair-lightbox-next:hover,\r\n    .vair-lightbox-prev:focus,\r\n    .vair-lightbox-next:focus {\r\n      transform: translateY(calc(-50% - 1px));\r\n    }\r\n\r\n    .vair-lightbox-prev { left: 14px; }\r\n    .vair-lightbox-next { right: 14px; }\r\n\r\n    .vair-lightbox-counter {\r\n      position: absolute;\r\n      left: 14px;\r\n      bottom: 14px;\r\n      padding: 8px 12px;\r\n      border-radius: 999px;\r\n      background: rgba(12, 44, 76, .88);\r\n      color: #ffffff;\r\n      font-family: Arial, sans-serif;\r\n      font-size: 13px;\r\n      line-height: 1;\r\n      z-index: 4;\r\n    }\r\n\r\n\r\n    .vair-gallery-thumbs {\r\n      display: grid;\r\n      grid-template-columns: repeat(4, 1fr);\r\n      gap: 8px;\r\n      margin-top: 10px;\r\n    }\r\n\r\n    .vair-gallery-thumbs button {\r\n      height: 74px;\r\n      padding: 0;\r\n      border: 1px solid var(--vair-border);\r\n      border-radius: 8px;\r\n      overflow: hidden;\r\n      cursor: pointer;\r\n      background: #ffffff;\r\n    }\r\n\r\n    .vair-gallery-thumbs img {\r\n      width: 100%;\r\n      height: 100%;\r\n      object-fit: contain;\r\n      object-position: center;\r\n      display: block;\r\n      background: #ffffff;\r\n    }\r\n\r\n    .vair-detail-list {\r\n      display: grid;\r\n      grid-template-columns: repeat(2, 1fr);\r\n      gap: 10px;\r\n      margin: 20px 0;\r\n    }\r\n\r\n    .vair-detail-item {\r\n      padding: 13px;\r\n      border-radius: 8px;\r\n      background: #F5F7FA;\r\n      border: 1px solid #EDF1F5;\r\n    }\r\n\r\n    .vair-detail-item span {\r\n      display: block;\r\n      color: var(--vair-muted);\r\n      font-size: 12px;\r\n      line-height: 1.2;\r\n      margin-bottom: 5px;\r\n    }\r\n\r\n    .vair-detail-item strong {\r\n      display: block;\r\n      color: #0C2C4C;\r\n      font-size: 15px;\r\n      line-height: 1.25;\r\n    }\r\n\r\n    .vair-facilities {\r\n      display: flex;\r\n      flex-wrap: wrap;\r\n      gap: 8px;\r\n      margin: 16px 0 22px;\r\n      padding: 0;\r\n      list-style: none;\r\n    }\r\n\r\n    .vair-facilities li {\r\n      padding: 7px 10px;\r\n      border-radius: 999px;\r\n      background: #F3F5F7;\r\n      color: #0C2C4C;\r\n      font-size: 13px;\r\n      line-height: 1;\r\n    }\r\n\r\n    .vair-hidden { display: none !important; }\r\n\r\n\r\n    \/* Gr\u00f6\u00dfere Close-Buttons und Lightbox-Pfeile *\/\r\n    .vair-modal-close,\r\n    .vair-lightbox-close {\r\n      font-size: 36px !important;\r\n      line-height: 1 !important;\r\n      display: flex !important;\r\n      align-items: center !important;\r\n      justify-content: center !important;\r\n      padding: 0 0 4px 0 !important;\r\n    }\r\n\r\n    .vair-lightbox-prev,\r\n    .vair-lightbox-next {\r\n      width: 56px !important;\r\n      height: 56px !important;\r\n      font-size: 42px !important;\r\n      line-height: 1 !important;\r\n      display: flex !important;\r\n      align-items: center !important;\r\n      justify-content: center !important;\r\n      padding: 0 0 5px 0 !important;\r\n    }\r\n\r\n    @media (max-width: 1024px) {\r\n      .vair-section-head,\r\n      .vair-modal-grid { grid-template-columns: 1fr; }\r\n      .vair-country-grid { grid-template-columns: repeat(2, 1fr); }\r\n      .vair-property-grid { grid-template-columns: repeat(2, 1fr); }\r\n      .vair-filter-grid { grid-template-columns: repeat(2, 1fr); }\r\n      .vair-gallery-main { height: 360px; }\r\n    }\r\n\r\n    @media (max-width: 680px) {\r\n      .vair-container { width: min(100% - 24px, 1080px); }\r\n      .vair-section { padding: 54px 0; }\r\n      .vair-country-grid,\r\n      .vair-property-grid,\r\n      .vair-filter-grid,\r\n      .vair-detail-list { grid-template-columns: 1fr; }\r\n\r\n      .vair-immo-page h1,\r\n      .vair-immo-page h2,\r\n      .vair-immo-page h3 {\r\n        font-size: 24px;\r\n        line-height: 1.15;\r\n      }\r\n\r\n      .vair-section-head {\r\n        gap: 18px;\r\n        margin-bottom: 24px;\r\n      }\r\n\r\n      .vair-country-card,\r\n      .vair-country-button {\r\n        min-height: 190px;\r\n        padding: 22px;\r\n      }\r\n\r\n      .vair-filter {\r\n        padding: 12px;\r\n        margin-bottom: 18px;\r\n        border-radius: 12px;\r\n      }\r\n\r\n      .vair-filter-grid {\r\n        gap: 9px;\r\n      }\r\n\r\n      .vair-filter input,\r\n      .vair-filter select,\r\n      .vair-filter .vair-small-btn {\r\n        min-height: 46px;\r\n        font-size: 16px;\r\n      }\r\n\r\n      .vair-property-img {\r\n        height: 230px;\r\n      }\r\n\r\n      .vair-property-body {\r\n        padding: 18px;\r\n      }\r\n\r\n      .vair-property-meta {\r\n        grid-template-columns: 1fr;\r\n      }\r\n\r\n      .vair-property-bottom {\r\n        align-items: stretch;\r\n        flex-direction: column;\r\n      }\r\n\r\n      .vair-property-bottom .vair-small-btn {\r\n        width: 100%;\r\n      }\r\n\r\n      .vair-modal-bg {\r\n        align-items: flex-start;\r\n        padding: 12px;\r\n        overflow-y: auto;\r\n      }\r\n\r\n      .vair-modal {\r\n        width: 100%;\r\n        max-height: none;\r\n        min-height: auto;\r\n        padding: 58px 12px 16px;\r\n        overflow: visible;\r\n        border-radius: 14px;\r\n      }\r\n\r\n      .vair-modal-close {\r\n        top: 10px !important;\r\n        right: 10px !important;\r\n        width: 42px !important;\r\n        height: 42px !important;\r\n        z-index: 10 !important;\r\n      }\r\n\r\n      .vair-gallery-main {\r\n        height: min(60vh, 380px);\r\n        border-radius: 12px;\r\n      }\r\n\r\n      .vair-gallery-expand {\r\n        top: 10px;\r\n        right: 10px;\r\n        width: 40px;\r\n        height: 40px;\r\n      }\r\n\r\n      .vair-gallery-prev,\r\n      .vair-gallery-next {\r\n        width: 38px !important;\r\n        height: 38px !important;\r\n        font-size: 28px !important;\r\n        opacity: .96;\r\n      }\r\n\r\n      .vair-gallery-prev { left: 8px; }\r\n      .vair-gallery-next { right: 8px; }\r\n\r\n      .vair-gallery-thumbs {\r\n        grid-template-columns: repeat(2, 1fr);\r\n        max-height: 260px;\r\n        overflow: auto;\r\n        padding-right: 2px;\r\n      }\r\n\r\n      .vair-lightbox-bg { padding: 10px; }\r\n\r\n      .vair-lightbox {\r\n        width: 100%;\r\n        height: min(86vh, 760px);\r\n        padding: 56px 10px 74px;\r\n        border-radius: 14px;\r\n      }\r\n\r\n      .vair-lightbox img {\r\n        width: 100%;\r\n        height: 100%;\r\n        object-fit: contain;\r\n      }\r\n\r\n      .vair-lightbox-close {\r\n        top: 10px !important;\r\n        right: 10px !important;\r\n        width: 42px !important;\r\n        height: 42px !important;\r\n        z-index: 6;\r\n      }\r\n\r\n      .vair-lightbox-prev,\r\n      .vair-lightbox-next {\r\n        top: auto !important;\r\n        bottom: 16px !important;\r\n        width: 44px !important;\r\n        height: 44px !important;\r\n        font-size: 34px !important;\r\n        transform: none !important;\r\n      }\r\n\r\n      .vair-lightbox-prev { left: calc(50% - 58px) !important; }\r\n      .vair-lightbox-next { right: calc(50% - 58px) !important; }\r\n\r\n      .vair-lightbox-prev:hover,\r\n      .vair-lightbox-next:hover,\r\n      .vair-lightbox-prev:focus,\r\n      .vair-lightbox-next:focus {\r\n        transform: none !important;\r\n      }\r\n\r\n      .vair-lightbox-counter {\r\n        left: 12px;\r\n        top: 14px;\r\n        bottom: auto;\r\n      }\r\n    }\r\n  <\/style>\r\n\r\n  <section class=\"vair-section\" id=\"laender\">\r\n    <div class=\"vair-container\">\r\n      <div class=\"vair-section-head\">\r\n        <div>\r\n          <div class=\"vair-kicker\">L\u00e4nder<\/div>\r\n          <h2>M\u00e4rkte f\u00fcr Immobilien-Investments<\/h2>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"vair-country-grid\">\r\n        <a class=\"vair-country-card vair-country-filter-link\" href=\"#objekte\" data-country-filter=\"cyprus\">\r\n          <span class=\"vair-badge vair-badge-gold\">8 Objekte<\/span>\r\n          <span class=\"vair-arrow-box\"><\/span>\r\n          <h3>Zypern<\/h3>\r\n          <p>Aktive Immobilienangebote f\u00fcr internationale Kapitalanlage.<\/p>\r\n        <\/a>\r\n\r\n        <a class=\"vair-country-card vair-country-filter-link\" href=\"#objekte\" data-country-filter=\"germany\">\r\n          <span class=\"vair-badge vair-badge-gold\">1 Objekt<\/span>\r\n          <span class=\"vair-arrow-box\"><\/span>\r\n          <h3>Deutschland<\/h3>\r\n          <p>Gewerbeimmobilie mit Privatdomizil in Rochlitz, Sachsen.<\/p>\r\n        <\/a>\r\n\r\n        <a class=\"vair-country-card vair-country-filter-link\" href=\"#objekte\" data-country-filter=\"turkey\">\r\n          <span class=\"vair-badge\">Coming Soon<\/span>\r\n          <span class=\"vair-arrow-box\"><\/span>\r\n          <h3>T\u00fcrkei<\/h3>\r\n          <p>Urbane Investments und Ferienimmobilien.<\/p>\r\n        <\/a>\r\n\r\n        <a class=\"vair-country-card vair-country-filter-link\" href=\"#objekte\" data-country-filter=\"dubai\">\r\n          <span class=\"vair-badge\">Coming Soon<\/span>\r\n          <span class=\"vair-arrow-box\"><\/span>\r\n          <h3>Dubai<\/h3>\r\n          <p>Internationale High-End Immobilien und Wachstumsm\u00e4rkte.<\/p>\r\n        <\/a>\r\n\r\n        <a class=\"vair-country-card vair-country-filter-link\" href=\"#objekte\" data-country-filter=\"egypt\">\r\n          <span class=\"vair-badge\">Coming Soon<\/span>\r\n          <span class=\"vair-arrow-box\"><\/span>\r\n          <h3>\u00c4gypten<\/h3>\r\n          <p>Ferienregionen, Resorts und langfristige Perspektiven.<\/p>\r\n        <\/a>\r\n\r\n        <a class=\"vair-country-card vair-country-filter-link\" href=\"#objekte\" data-country-filter=\"syria\">\r\n          <span class=\"vair-badge\">Coming Soon<\/span>\r\n          <span class=\"vair-arrow-box\"><\/span>\r\n          <h3>Syrien<\/h3>\r\n          <p>Ausgew\u00e4hlte Immobilienoptionen f\u00fcr langfristige Strategien.<\/p>\r\n        <\/a>\r\n\r\n        <a class=\"vair-country-card vair-country-filter-link\" href=\"#objekte\" data-country-filter=\"spain\">\r\n          <span class=\"vair-badge\">Coming Soon<\/span>\r\n          <span class=\"vair-arrow-box\"><\/span>\r\n          <h3>Spanien<\/h3>\r\n          <p>K\u00fcstenlagen, Ferienimmobilien und Lifestyle-Investments.<\/p>\r\n        <\/a>\r\n\r\n        <button class=\"vair-country-card vair-open-contact vair-country-button\" type=\"button\">\r\n          <span class=\"vair-badge vair-badge-gold\">Anfrage<\/span>\r\n          <span class=\"vair-arrow-box\"><\/span>\r\n          <h3>Individuelle Suche<\/h3>\r\n          <p>Sie suchen in einem bestimmten Land? Fragen Sie direkt an.<\/p>\r\n        <\/button>\r\n      <\/div>\r\n    <\/div>\r\n  <\/section>\r\n\r\n  <section class=\"vair-section\" id=\"objekte\">\r\n    <div class=\"vair-container\">\r\n      <div class=\"vair-section-head\">\r\n        <div>\r\n          <div class=\"vair-kicker\">Zypern & Deutschland<\/div>\r\n          <h2>Verf\u00fcgbare Immobilien<\/h2>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"vair-filter\">\r\n        <div class=\"vair-filter-grid\">\r\n          <input id=\"vairSearch\" type=\"search\" placeholder=\"Suche nach Stadt oder Objekt\">\r\n          <select id=\"vairCountry\">\r\n            <option value=\"all\">Alle L\u00e4nder<\/option>\r\n            <option value=\"cyprus\">Zypern<\/option>\r\n            <option value=\"germany\">Deutschland<\/option>\r\n            <option value=\"turkey\">T\u00fcrkei<\/option>\r\n            <option value=\"dubai\">Dubai<\/option>\r\n            <option value=\"egypt\">\u00c4gypten<\/option>\r\n            <option value=\"syria\">Syrien<\/option>\r\n            <option value=\"spain\">Spanien<\/option>\r\n          <\/select>\r\n          <select id=\"vairType\">\r\n            <option value=\"all\">Alle Typen<\/option>\r\n            <option value=\"studio\">Studio<\/option>\r\n            <option value=\"apartment\">Apartment<\/option>\r\n            <option value=\"loft\">Loft<\/option>\r\n            <option value=\"penthouse\">Penthouse<\/option>\r\n            <option value=\"commercial\">Gewerbeimmobilie<\/option>\r\n          <\/select>\r\n          <select id=\"vairPrice\">\r\n            <option value=\"all\">Alle Preise<\/option>\r\n            <option value=\"120000\">bis \u20ac120.000<\/option>\r\n            <option value=\"180000\">bis \u20ac180.000<\/option>\r\n            <option value=\"240000\">bis \u20ac240.000<\/option>\r\n            <option value=\"300000\">bis \u20ac300.000<\/option>\r\n            <option value=\"720000\">bis \u20ac720.000<\/option>\r\n          <\/select>\r\n          <select id=\"vairFeature\">\r\n            <option value=\"all\">Alle Merkmale<\/option>\r\n            <option value=\"sea\">Meerblick<\/option>\r\n            <option value=\"pool\">Pool<\/option>\r\n            <option value=\"green\">Green Area<\/option>\r\n            <option value=\"ready\">Ready to move in<\/option>\r\n          <\/select>\r\n          <button class=\"vair-small-btn\" id=\"vairReset\" type=\"button\">Reset<\/button>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"vair-property-grid\" id=\"vairProperties\"><\/div>\r\n      <div class=\"vair-no-results\" id=\"vairNoResults\">F\u00fcr dieses Land sind aktuell noch keine Immobilien hinterlegt.<\/div>\r\n    <\/div>\r\n  <\/section>\r\n\r\n  <div class=\"vair-modal-bg\" id=\"vairModal\" aria-hidden=\"true\">\r\n    <div class=\"vair-modal\" role=\"dialog\" aria-modal=\"true\">\r\n      <button class=\"vair-modal-close\" id=\"vairModalClose\" aria-label=\"Schlie\u00dfen\">\u00d7<\/button>\r\n      <div class=\"vair-modal-grid\">\r\n        <div>\r\n          <div class=\"vair-gallery-main\">\r\n            <img decoding=\"async\" id=\"vairModalMainImg\" src=\"\" alt=\"Immobilie\">\r\n            <button class=\"vair-gallery-prev\" id=\"vairGalleryPrev\" type=\"button\" aria-label=\"Vorheriges Bild\">\u2039<\/button>\r\n            <button class=\"vair-gallery-next\" id=\"vairGalleryNext\" type=\"button\" aria-label=\"N\u00e4chstes Bild\">\u203a<\/button>\r\n            <button class=\"vair-gallery-expand\" id=\"vairGalleryExpand\" type=\"button\" aria-label=\"Bild gro\u00df anzeigen\">\r\n              <svg viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\r\n                <path d=\"M8 3H3v5M16 3h5v5M8 21H3v-5M21 16v5h-5\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><\/path>\r\n              <\/svg>\r\n            <\/button>\r\n          <\/div>\r\n          <div class=\"vair-gallery-actions\">\r\n            <button class=\"vair-small-btn\" id=\"vairGalleryOpenFullscreen\" type=\"button\">Vollbild ansehen<\/button>\r\n          <\/div>\r\n          <div class=\"vair-gallery-thumbs\" id=\"vairModalThumbs\"><\/div>\r\n        <\/div>\r\n        <div>\r\n          <span class=\"vair-location\" id=\"vairModalLocation\"><\/span>\r\n          <h3 id=\"vairModalTitle\"><\/h3>\r\n          <p id=\"vairModalDescription\"><\/p>\r\n          <div class=\"vair-detail-list\" id=\"vairModalDetails\"><\/div>\r\n          <h3>Ausstattung<\/h3>\r\n          <ul class=\"vair-facilities\" id=\"vairModalFacilities\"><\/ul>\r\n          <button class=\"vair-small-btn\" id=\"vairModalRequest\" type=\"button\">Anfragen<\/button>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <div class=\"vair-lightbox-bg\" id=\"vairLightbox\" aria-hidden=\"true\">\r\n    <div class=\"vair-lightbox\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Bildergalerie\">\r\n      <button class=\"vair-lightbox-close\" id=\"vairLightboxClose\" type=\"button\" aria-label=\"Schlie\u00dfen\">\u00d7<\/button>\r\n      <button class=\"vair-lightbox-prev\" id=\"vairLightboxPrev\" type=\"button\" aria-label=\"Vorheriges Bild\">\u2039<\/button>\r\n      <img decoding=\"async\" id=\"vairLightboxImg\" src=\"\" alt=\"Immobilie gro\u00df\">\r\n      <button class=\"vair-lightbox-next\" id=\"vairLightboxNext\" type=\"button\" aria-label=\"N\u00e4chstes Bild\">\u203a<\/button>\r\n      <div class=\"vair-lightbox-counter\" id=\"vairLightboxCounter\"><\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <script>\r\n    (function () {\r\n      const imagePlaceholder = 'https:\/\/images.unsplash.com\/photo-1600607687939-ce8a6c25118c?auto=format&fit=crop&w=1200&q=85';\r\n\r\n      \/*\r\n        WICHTIG:\r\n        Die Bilder kommen nicht mehr aus festen URLs im Code.\r\n        Pro Immobilie wird nur noch filebirdFolderId eingetragen.\r\n        Die eigentlichen Bild-URLs werden per WordPress AJAX aus dem FileBird-Ordner geladen.\r\n\r\n        Daf\u00fcr muss zus\u00e4tzlich der PHP-Code aus der Datei\r\n        vair-filebird-ajax-snippet.php in WordPress eingef\u00fcgt werden\r\n        z.B. \u00fcber Code Snippets oder functions.php.\r\n      *\/\r\n\r\n      const vairAjaxUrl = '\/wp-admin\/admin-ajax.php';\r\n\r\n      async function getFileBirdImages(folderId) {\r\n        if (!folderId || Number(folderId) <= 0) return [];\r\n\r\n        try {\r\n          const url = vairAjaxUrl + '?action=vair_filebird_images&folder_id=' + encodeURIComponent(folderId);\r\n          const response = await fetch(url, { credentials: 'same-origin' });\r\n\r\n          if (!response.ok) return [];\r\n\r\n          const images = await response.json();\r\n          return Array.isArray(images) ? images : [];\r\n        } catch (error) {\r\n          console.warn('FileBird Bilder konnten nicht geladen werden:', folderId, error);\r\n          return [];\r\n        }\r\n      }\r\n\r\n      async function loadDynamicGalleries() {\r\n        await Promise.all(properties.map(async function (item) {\r\n          if (!item.filebirdFolderId) return;\r\n\r\n          const images = await getFileBirdImages(item.filebirdFolderId);\r\n\r\n          if (images.length) {\r\n            item.images = images;\r\n          }\r\n        }));\r\n      }\r\n\r\n      const properties = [\r\n        {\r\n          title: '2+1 Loft Mezzanine Garden',\r\n          project: 'Special Offer',\r\n          location: 'Kyrenia \u00b7 Esentepe',\r\n          country: 'cyprus',\r\n          countryText: 'Zypern',\r\n          type: 'loft',\r\n          price: 264000,\r\n          priceText: '\u20ac264.000',\r\n          size: '93 m\u00b2',\r\n          view: 'Pool',\r\n          floor: 'Garden',\r\n          completion: 'Dezember 2027',\r\n          income: '\u20ac1.816 mtl.',\r\n          down: '\u20ac132.000',\r\n          features: ['pool'],\r\n          description: '2+1 Loft Mezzanine mit offenem Wohnbereich, hohen Decken, Terrasse und Zugang zu umfangreichen Resort-Facilities.',\r\n          facilities: ['Green Area', 'Bar', 'Gym', 'Sauna', 'Indoor Pool', 'Outdoor Pool', 'Turkish Bath', 'Basketball Court'],\r\n          filebirdFolderId: 2,\r\n          images: []\r\n        },\r\n        {\r\n          title: '1+1 Standard',\r\n          project: 'Special Offer',\r\n          location: 'Kyrenia \u00b7 Esentepe',\r\n          country: 'cyprus',\r\n          countryText: 'Zypern',\r\n          type: 'apartment',\r\n          price: 176400,\r\n          priceText: '\u20ac176.400',\r\n          size: '63 m\u00b2',\r\n          view: 'Green',\r\n          floor: 'Garden',\r\n          completion: 'Dezember 2027',\r\n          income: '\u20ac1.213 mtl.',\r\n          down: '\u20ac88.200',\r\n          features: ['green'],\r\n          description: '1+1 Apartment mit Gartenbereich, Terrasse und funktionalem Grundriss f\u00fcr Eigennutzung oder Kapitalanlage.',\r\n          facilities: ['Green Area', 'Bar', 'Gym', 'Sauna', 'Indoor Pool', 'Outdoor Pool', 'Turkish Bath', 'Basketball Court'],\r\n          filebirdFolderId: 1,\r\n          images: []},\r\n        {\r\n          title: 'Lanai Studio',\r\n          project: 'Lanai Residence',\r\n          location: 'Esentepe \u00b7 Kyrenia',\r\n          country: 'cyprus',\r\n          countryText: 'Zypern',\r\n          type: 'studio',\r\n          price: 0,\r\n          priceText: 'Auf Anfrage',\r\n          size: 'Studio',\r\n          view: 'Sea \/ Green',\r\n          floor: 'Projekt',\r\n          completion: 'Ready to move in',\r\n          income: 'Auf Anfrage',\r\n          down: 'Auf Anfrage',\r\n          features: ['sea', 'ready'],\r\n          description: 'Modernes Studio im Lanai-Projekt mit Resort-Ausstattung und Lage in Esentepe.',\r\n          facilities: ['Gym', 'Generator', 'Restaurant', 'Indoor Pool', 'SPA', 'Sauna', 'Hamam', 'Kids Pool', 'Outdoor Pool'],\r\n          filebirdFolderId: 7,\r\n          images: []\r\n        },\r\n        {\r\n          title: 'Capensis 2+1 Loft Penthouse',\r\n          project: 'Capensis',\r\n          location: 'Yenibo\u011fazi\u00e7i \u00b7 Gazima\u011fusa',\r\n          country: 'cyprus',\r\n          countryText: 'Zypern',\r\n          type: 'penthouse',\r\n          price: 216000,\r\n          priceText: '\u20ac216.000',\r\n          size: '71 + 5 + 37 m\u00b2',\r\n          view: 'Green Area',\r\n          floor: 'Block A',\r\n          completion: 'Dezember 2025',\r\n          income: '\u20ac1.134 mtl.',\r\n          down: '\u20ac108.000',\r\n          features: ['green'],\r\n          description: '2+1 Loft Mezzanine Penthouse mit Dachterrasse, modernem Grundriss und Zugang zu Pool- und Wellnessbereichen.',\r\n          facilities: ['Spa', 'Gym', 'Sauna', 'Pool Bar', 'Kids Pool', 'Turkish Bath', 'Swimming Pool', 'Indoor Swimming Pool'],\r\n          filebirdFolderId: 3,\r\n          images: []\r\n        },\r\n        {\r\n  title: 'Nest 2+1 Loft Garden',\r\n  project: 'Nest',\r\n  location: 'Kyrenia \u00b7 Esentepe',\r\n  country: 'cyprus',\r\n  countryText: 'Zypern',\r\n  type: 'loft',\r\n  price: 264000,\r\n  priceText: '\u20ac264.000',\r\n  size: '93 m\u00b2',\r\n  view: 'Pool',\r\n  floor: 'Garden',\r\n  completion: 'Dezember 2027',\r\n  income: '\u20ac1.816 mtl.',\r\n  down: '\u20ac132.000',\r\n  features: ['pool'],\r\n  description: '2+1 Loft Garden mit Mezzanine-Ebene, Poolblick und attraktivem Investmentprofil.',\r\n  facilities: [\r\n    'Green Area',\r\n    'Bar',\r\n    'Gym',\r\n    'Sauna',\r\n    'Indoor Pool',\r\n    'Outdoor Pool',\r\n    'Turkish Bath',\r\n    'Basketball Court'\r\n  ],\r\n  filebirdFolderId: 8,\r\n          images: []},\r\n        {\r\n          title: 'Nest Studio Penthouse',\r\n          project: 'Nest',\r\n          location: 'Kyrenia \u00b7 Esentepe',\r\n          country: 'cyprus',\r\n          countryText: 'Zypern',\r\n          type: 'studio',\r\n          price: 156000,\r\n          priceText: '\u20ac156.000',\r\n          size: '49 + 41 m\u00b2',\r\n          view: 'Sea',\r\n          floor: 'Penthouse',\r\n          completion: 'Dezember 2027',\r\n          income: '\u20ac1.073 mtl.',\r\n          down: '\u20ac78.000',\r\n          features: ['sea'],\r\n          description: 'Studio Penthouse mit Terrasse, Dachterrasse und Meerblick-Perspektive.',\r\n          facilities: ['Green Area', 'Bar', 'Gym', 'Sauna', 'Indoor Pool', 'Outdoor Pool', 'Turkish Bath', 'Basketball Court'],\r\n          filebirdFolderId: 9,\r\n          images: []},\r\n        {\r\n          title: 'Cielo Vista Residence',\r\n          project: 'Cielo Vista Hotel & Resortkonzept',\r\n          location: 'Ge\u00e7itkale \u00b7 Nordzypern',\r\n          country: 'cyprus',\r\n          countryText: 'Zypern',\r\n          type: 'apartment',\r\n          price: 0,\r\n          priceText: 'ab \u20ac27.000 Anzahlung',\r\n          size: 'Studio, 1+1, 2+1',\r\n          view: 'Resort \/ Green',\r\n          floor: 'Residence',\r\n          completion: 'Phase 1: Juli 2028',\r\n          income: 'Raten ab \u20ac688',\r\n          down: 'Studio \u20ac27.000 \u00b7 1+1 \u20ac39.000 \u00b7 2+1 \u20ac51.000',\r\n          features: ['pool', 'green'],\r\n          description: 'Cielo Vista ist ein Hotel- und Resortkonzept in Ge\u00e7itkale mit Studio-, 1+1- und 2+1-Einheiten. Das Projekt kombiniert Hotelmanagement, Rezeption, Concierge, 24\/7 G\u00e4steservice und umfangreiche Lifestyle-, Wellness- und Sportbereiche.',\r\n          facilities: [\r\n            'Immobilienverwaltung',\r\n            'Rezeption & Concierge',\r\n            '24\/7 G\u00e4steservice',\r\n            'Au\u00dfenpool mit Poolbar',\r\n            'Beheizter Innenpool',\r\n            'Wellness & Spa Lounge',\r\n            'T\u00fcrkischer Hamam',\r\n            'Massage & Therapier\u00e4ume',\r\n            'Modernes Fitnessstudio',\r\n            'Tennisplatz',\r\n            'Basketball & Volleyball',\r\n            'Mini-Fu\u00dfballarena',\r\n            'Kinderspielplatz',\r\n            'Restaurant & Caf\u00e9',\r\n            'Supermarkt',\r\n            'Privater Strandshuttle',\r\n            '24\/7 Sicherheit'\r\n          ],\r\n          filebirdFolderId: 5,\r\n          images: []},\r\n        {\r\n          title: 'CC Towers Studio & 1+1',\r\n          project: 'CC Towers',\r\n          location: 'Iskele \u00b7 Bo\u011faz',\r\n          country: 'cyprus',\r\n          countryText: 'Zypern',\r\n          type: 'studio apartment',\r\n          price: 103800,\r\n          priceText: 'ab \u20ac103.800',\r\n          size: 'Studio 33 + 3 m\u00b2 \/ 1+1 45 + 3 m\u00b2',\r\n          view: 'Green Area',\r\n          floor: '9.\u201312. Etage',\r\n          completion: 'Dezember 2027',\r\n          income: 'Studio \u20ac584 \/ 1+1 \u20ac803 mtl.',\r\n          down: 'Studio \u20ac31.140 \/ 1+1 \u20ac42.840',\r\n          features: ['green'],\r\n          description: 'CC Towers Projekt mit Studio- und 1+1-Einheiten, Resort-Facilities, Poolanlage und Kapitalanlage-Potenzial.',\r\n          facilities: ['Shuttle Service', 'Rental Management', 'Underground Parking', 'Restaurant & Bar', 'Gym', 'Sauna', 'Massage', 'Children\u2019s Playground', 'Outdoor Pool', 'Indoor Pool', 'Turkish Hammam'],\r\n          filebirdFolderId: 4,\r\n          images: []}\r\n,\r\n        {\r\n          title: 'Gewerbeimmobilie mit Privatdomizil',\r\n          project: 'Gewerbegebiet Eichberg 10',\r\n          location: 'Rochlitz \u00b7 Sachsen',\r\n          country: 'germany',\r\n          countryText: 'Deutschland',\r\n          type: 'commercial',\r\n          price: 890000,\r\n          priceText: '\u20ac890.000',\r\n          size: 'ca. 1.000 m\u00b2',\r\n          view: 'Gewerbe \/ Wohnen',\r\n          floor: 'EG + OG',\r\n          completion: 'Bestand \u00b7 teilrenoviert',\r\n          income: 'Auf Anfrage',\r\n          down: 'Auf Anfrage',\r\n          features: ['ready'],\r\n          description: 'Gewerbeimmobilie in Rochlitz mit exklusivem Privatdomizil: ca. 710 m\u00b2 Gewerbefl\u00e4che und ca. 290 m\u00b2 Wohnfl\u00e4che auf ca. 4.900 m\u00b2 Grundst\u00fcck. Ideal f\u00fcr Firmeninhaber, Investoren oder Privatnutzer, die Wohnen und Arbeiten flexibel kombinieren m\u00f6chten.',\r\n          facilities: [\r\n            'ca. 4.900 m\u00b2 Grundst\u00fcck',\r\n            '710 m\u00b2 Gewerbefl\u00e4che',\r\n            '290 m\u00b2 Wohnfl\u00e4che',\r\n            '9 Zimmer Wohnen',\r\n            '8 Gewerber\u00e4ume',\r\n            'Starkstromanschl\u00fcsse',\r\n            'Internetanschl\u00fcsse',\r\n            'Pelletofen',\r\n            'Klimaanlage',\r\n            '2 Toiletten im Gewerbe',\r\n            'Luxusbad mit Badewanne',\r\n            'Zweites Bad im Ausbau',\r\n            'Parkpl\u00e4tze auf dem Hof',\r\n            'Ruhiges Industriegebiet',\r\n            'Gute Anbindung an Leipzig & Chemnitz'\r\n          ],\r\n          filebirdFolderId: 6,\r\n          images: []\r\n        }\r\n      ];\r\n\r\n      const grid = document.querySelector('#vairProperties');\r\n      const noResults = document.querySelector('#vairNoResults');\r\n      const modal = document.querySelector('#vairModal');\r\n      const modalClose = document.querySelector('#vairModalClose');\r\n      const mainImg = document.querySelector('#vairModalMainImg');\r\n      const thumbs = document.querySelector('#vairModalThumbs');\r\n      const modalTitle = document.querySelector('#vairModalTitle');\r\n      const modalLocation = document.querySelector('#vairModalLocation');\r\n      const modalDescription = document.querySelector('#vairModalDescription');\r\n      const modalDetails = document.querySelector('#vairModalDetails');\r\n      const modalFacilities = document.querySelector('#vairModalFacilities');\r\n      const modalRequest = document.querySelector('#vairModalRequest');\r\n      const galleryExpand = document.querySelector('#vairGalleryExpand');\r\n      const galleryOpenFullscreen = document.querySelector('#vairGalleryOpenFullscreen');\r\n      const galleryPrev = document.querySelector('#vairGalleryPrev');\r\n      const galleryNext = document.querySelector('#vairGalleryNext');\r\n      const lightbox = document.querySelector('#vairLightbox');\r\n      const lightboxImg = document.querySelector('#vairLightboxImg');\r\n      const lightboxClose = document.querySelector('#vairLightboxClose');\r\n      const lightboxPrev = document.querySelector('#vairLightboxPrev');\r\n      const lightboxNext = document.querySelector('#vairLightboxNext');\r\n      const lightboxCounter = document.querySelector('#vairLightboxCounter');\r\n      let activeImages = [];\r\n      let activeImageIndex = 0;\r\n\r\n      function cardTemplate(item, index) {\r\n        return `\r\n          <article class=\"vair-property-card\" data-index=\"${index}\" data-title=\"${item.title.toLowerCase()} ${item.location.toLowerCase()} ${item.project.toLowerCase()} ${(item.countryText || '').toLowerCase()}\" data-country=\"${item.country}\" data-type=\"${item.type}\" data-price=\"${item.price}\" data-features=\"${item.features.join(' ')}\">\r\n            <div class=\"vair-property-img\"><img decoding=\"async\" src=\"${(item.images && item.images[0]) ? item.images[0] : imagePlaceholder}\" alt=\"${item.title}\"><\/div>\r\n            <div class=\"vair-property-body\">\r\n              <span class=\"vair-location\">${item.location}<\/span>\r\n              <h3>${item.title}<\/h3>\r\n              <p>${item.project}<\/p>\r\n              <div class=\"vair-property-meta\">\r\n                <span>${item.size}<\/span>\r\n                <span>${item.view}<\/span>\r\n                <span>${item.floor}<\/span>\r\n              <\/div>\r\n              <div class=\"vair-property-bottom\">\r\n                <div class=\"vair-price\">${item.priceText}<\/div>\r\n                <button class=\"vair-small-btn vair-open-detail\" type=\"button\">Details<\/button>\r\n              <\/div>\r\n            <\/div>\r\n          <\/article>`;\r\n      }\r\n\r\n      function renderCards() {\r\n        if (!grid) return;\r\n\r\n        grid.innerHTML = properties.map(cardTemplate).join('');\r\n\r\n        grid.querySelectorAll('.vair-open-detail').forEach(btn => {\r\n          btn.addEventListener('click', function () {\r\n            const card = this.closest('.vair-property-card');\r\n            if (!card) return;\r\n            openDetail(properties[Number(card.dataset.index)]);\r\n          });\r\n        });\r\n      }\r\n\r\n      function detailItem(label, value) {\r\n        return `<div class=\"vair-detail-item\"><span>${label}<\/span><strong>${value}<\/strong><\/div>`;\r\n      }\r\n\r\n      function updateModalImage(index) {\r\n        if (!activeImages.length) return;\r\n        activeImageIndex = (index + activeImages.length) % activeImages.length;\r\n        mainImg.src = activeImages[activeImageIndex];\r\n\r\n        thumbs.querySelectorAll('button').forEach((button, i) => {\r\n          button.classList.toggle('is-active', i === activeImageIndex);\r\n          button.setAttribute('aria-current', i === activeImageIndex ? 'true' : 'false');\r\n        });\r\n      }\r\n\r\n      function nextModalImage() {\r\n        updateModalImage(activeImageIndex + 1);\r\n      }\r\n\r\n      function prevModalImage() {\r\n        updateModalImage(activeImageIndex - 1);\r\n      }\r\n\r\n      function openDetail(item) {\r\n        activeImages = item.images && item.images.length ? item.images : [imagePlaceholder];\r\n        activeImageIndex = 0;\r\n        mainImg.src = activeImages[0];\r\n        modalTitle.textContent = item.title;\r\n        modalLocation.textContent = item.location;\r\n        modalDescription.textContent = item.description;\r\n\r\n        modalDetails.innerHTML = [\r\n          detailItem('Preis', item.priceText),\r\n          detailItem('Land', item.countryText || item.country || '\u2014'),\r\n          detailItem('Gr\u00f6\u00dfe', item.size),\r\n          detailItem('Aussicht', item.view),\r\n          detailItem('Fertigstellung', item.completion),\r\n          detailItem('Anzahlung', item.down),\r\n          detailItem('gesch\u00e4tzter Netto-Ertrag', item.income)\r\n        ].join('');\r\n\r\n        modalFacilities.innerHTML = item.facilities.map(f => `<li>${f}<\/li>`).join('');\r\n\r\n        thumbs.innerHTML = activeImages.map((src, i) => `\r\n          <button type=\"button\" class=\"${i === 0 ? 'is-active' : ''}\" aria-label=\"Bild ${i + 1} anzeigen\" aria-current=\"${i === 0 ? 'true' : 'false'}\">\r\n            <img decoding=\"async\" src=\"${src}\" alt=\"${item.title}\">\r\n          <\/button>\r\n        `).join('');\r\n\r\n        thumbs.querySelectorAll('button').forEach((button, i) => {\r\n          button.addEventListener('click', () => {\r\n            updateModalImage(i);\r\n          });\r\n        });\r\n\r\n        modalRequest.onclick = function () {\r\n          openInquiryPopup(item);\r\n        };\r\n\r\n        modal.classList.add('is-open');\r\n        modal.setAttribute('aria-hidden', 'false');\r\n      }\r\n\r\n      function renderLightbox() {\r\n        if (!activeImages.length) return;\r\n        lightboxImg.src = activeImages[activeImageIndex];\r\n        lightboxCounter.textContent = (activeImageIndex + 1) + ' \/ ' + activeImages.length;\r\n      }\r\n\r\n      function openLightbox(index) {\r\n        if (!activeImages.length) return;\r\n        activeImageIndex = typeof index === 'number' ? index : activeImageIndex;\r\n        renderLightbox();\r\n        lightbox.classList.add('is-open');\r\n        lightbox.setAttribute('aria-hidden', 'false');\r\n      }\r\n\r\n      function closeLightbox() {\r\n        lightbox.classList.remove('is-open');\r\n        lightbox.setAttribute('aria-hidden', 'true');\r\n      }\r\n\r\n      function nextLightboxImage() {\r\n        if (!activeImages.length) return;\r\n        activeImageIndex = (activeImageIndex + 1) % activeImages.length;\r\n        renderLightbox();\r\n      }\r\n\r\n      function prevLightboxImage() {\r\n        if (!activeImages.length) return;\r\n        activeImageIndex = (activeImageIndex - 1 + activeImages.length) % activeImages.length;\r\n        renderLightbox();\r\n      }\r\n\r\nfunction fillPropertyFormFields() {\r\n  var item = window.vairSelectedProperty;\r\n  if (!item) return false;\r\n\r\n  var map = {\r\n    immobilie: item.title,\r\n    projekt: item.project,\r\n    standort: item.location,\r\n    land: item.countryText || item.country,\r\n    typ: item.type,\r\n    preis: item.priceText,\r\n    groesse: item.size,\r\n    aussicht: item.view,\r\n    fertigstellung: item.completion,\r\n    anzahlung: item.down,\r\n    netto_ertrag: item.income,\r\n    finanzierungsbetrag: item.priceText,\r\n    verwendungszweck: item.title + ' - ' + item.project,\r\n    gesamtkosten: item.priceText\r\n  };\r\n\r\n  var filledAnyField = false;\r\n\r\n  Object.keys(map).forEach(function (key) {\r\n    var value = map[key] || '';\r\n\r\n    var field =\r\n      document.querySelector('#elementor-popup-modal-2777 #form-field-' + key) ||\r\n      document.querySelector('#elementor-popup-modal-2777 [name=\"form_fields[' + key + ']\"]') ||\r\n      document.getElementById('form-field-' + key) ||\r\n      document.querySelector('[name=\"form_fields[' + key + ']\"]');\r\n\r\n    if (field) {\r\n      field.value = value;\r\n      field.setAttribute('value', value);\r\n\r\n      field.dispatchEvent(new Event('input', { bubbles: true }));\r\n      field.dispatchEvent(new Event('change', { bubbles: true }));\r\n      field.dispatchEvent(new Event('blur', { bubbles: true }));\r\n\r\n      filledAnyField = true;\r\n    }\r\n  });\r\n\r\n  return filledAnyField;\r\n}\r\n\r\nfunction fillPropertyFormFieldsRepeatedly() {\r\n  var tries = 0;\r\n  var maxTries = 30;\r\n\r\n  var timer = setInterval(function () {\r\n    var filled = fillPropertyFormFields();\r\n    tries++;\r\n\r\n    var testField =\r\n      document.querySelector('#elementor-popup-modal-2777 #form-field-netto_ertrag') ||\r\n      document.querySelector('#elementor-popup-modal-2777 [name=\"form_fields[netto_ertrag]\"]') ||\r\n      document.getElementById('form-field-netto_ertrag') ||\r\n      document.querySelector('[name=\"form_fields[netto_ertrag]\"]');\r\n\r\n    if ((filled && testField && testField.value) || tries >= maxTries) {\r\n      clearInterval(timer);\r\n    }\r\n  }, 250);\r\n}\r\n\r\nfunction syncPropertyFieldsBeforeSubmit() {\r\n  document.addEventListener('submit', function (e) {\r\n    if (e.target && e.target.closest('#elementor-popup-modal-2777')) {\r\n      fillPropertyFormFields();\r\n    }\r\n  }, true);\r\n\r\n  document.addEventListener('click', function (e) {\r\n    var submitButton = e.target && e.target.closest('#elementor-popup-modal-2777 button[type=\"submit\"], #elementor-popup-modal-2777 input[type=\"submit\"]');\r\n    if (submitButton) {\r\n      fillPropertyFormFields();\r\n    }\r\n  }, true);\r\n}\r\n\r\nsyncPropertyFieldsBeforeSubmit();\r\n\r\ndocument.addEventListener('elementor\/popup\/show', function () {\r\n  fillPropertyFormFieldsRepeatedly();\r\n});\r\n\r\n      function openInquiryPopup(item) {\r\n        if (item) {\r\n          window.vairSelectedProperty = item;\r\n        }\r\n\r\n        closeModal();\r\n\r\n        if (\r\n          window.elementorProFrontend &&\r\n          window.elementorProFrontend.modules &&\r\n          window.elementorProFrontend.modules.popup &&\r\n          typeof window.elementorProFrontend.modules.popup.showPopup === 'function'\r\n        ) {\r\n          window.elementorProFrontend.modules.popup.showPopup({ id: 2777 });\r\n          setTimeout(fillPropertyFormFieldsRepeatedly, 400);\r\n          return;\r\n        }\r\n\r\n        const popupTrigger = document.querySelector('a[href=\"#elementor-action%3Aaction%3Dpopup%3Aopen%26settings%3DeyJpZCI6IjI3NzciLCJ0b2dnbGUiOmZhbHNlfQ%3D%3D\"], [data-elementor-open-lightbox], [data-popup-id=\"2777\"]');\r\n        if (popupTrigger) {\r\n          popupTrigger.click();\r\n          setTimeout(fillPropertyFormFieldsRepeatedly, 400);\r\n          return;\r\n        }\r\n\r\n        window.location.hash = 'popup-2777';\r\n        setTimeout(fillPropertyFormFieldsRepeatedly, 800);\r\n      }\r\n\r\n      function closeModal() {\r\n        modal.classList.remove('is-open');\r\n        modal.setAttribute('aria-hidden', 'true');\r\n        closeLightbox();\r\n      }\r\n\r\n      function applyFilters() {\r\n        const searchField = document.querySelector('#vairSearch');\r\n        const countryField = document.querySelector('#vairCountry');\r\n        const typeField = document.querySelector('#vairType');\r\n        const priceField = document.querySelector('#vairPrice');\r\n        const featureField = document.querySelector('#vairFeature');\r\n\r\n        const q = searchField ? (searchField.value || '').toLowerCase().trim() : '';\r\n        const selectedCountry = countryField ? countryField.value : 'all';\r\n        const selectedType = typeField ? typeField.value : 'all';\r\n        const selectedPrice = priceField ? priceField.value : 'all';\r\n        const selectedFeature = featureField ? featureField.value : 'all';\r\n\r\n        let visibleCount = 0;\r\n\r\n        document.querySelectorAll('.vair-property-card').forEach(card => {\r\n          const matchSearch = !q || card.dataset.title.includes(q);\r\n          const matchCountry = selectedCountry === 'all' || card.dataset.country === selectedCountry;\r\n          const matchType = selectedType === 'all' || card.dataset.type.split(' ').includes(selectedType);\r\n          const price = Number(card.dataset.price || 0);\r\n          const matchPrice = selectedPrice === 'all' || price === 0 || price <= Number(selectedPrice);\r\n          const matchFeature = selectedFeature === 'all' || card.dataset.features.split(' ').includes(selectedFeature);\r\n          const isVisible = matchSearch && matchCountry && matchType && matchPrice && matchFeature;\r\n\r\n          card.classList.toggle('vair-hidden', !isVisible);\r\n          if (isVisible) visibleCount += 1;\r\n        });\r\n\r\n        if (noResults) {\r\n          noResults.classList.toggle('is-visible', visibleCount === 0);\r\n        }\r\n\r\n        document.querySelectorAll('.vair-country-filter-link').forEach(link => {\r\n          link.classList.toggle('is-active', selectedCountry !== 'all' && link.dataset.countryFilter === selectedCountry);\r\n        });\r\n      }\r\n\r\n      function setCountryFilter(country) {\r\n        const countrySelect = document.querySelector('#vairCountry');\r\n        if (!countrySelect) return;\r\n\r\n        countrySelect.value = country || 'all';\r\n        applyFilters();\r\n\r\n        document.querySelectorAll('.vair-country-filter-link').forEach(link => {\r\n          link.classList.toggle('is-active', link.dataset.countryFilter === country);\r\n        });\r\n\r\n        const objectSection = document.querySelector('#objekte');\r\n        if (objectSection) {\r\n          objectSection.scrollIntoView({ behavior: 'smooth', block: 'start' });\r\n        }\r\n      }\r\n\r\n      function initPropertyPage() {\r\n        renderCards();\r\n        applyFilters();\r\n\r\n        document.querySelectorAll('.vair-country-filter-link').forEach(link => {\r\n          link.addEventListener('click', function (e) {\r\n            e.preventDefault();\r\n            setCountryFilter(this.dataset.countryFilter);\r\n          });\r\n        });\r\n\r\n        ['#vairSearch', '#vairCountry', '#vairType', '#vairPrice', '#vairFeature'].forEach(selector => {\r\n          const field = document.querySelector(selector);\r\n          if (field) field.addEventListener('input', applyFilters);\r\n        });\r\n\r\n        const resetButton = document.querySelector('#vairReset');\r\n        if (resetButton) {\r\n          resetButton.addEventListener('click', function () {\r\n            document.querySelector('#vairSearch').value = '';\r\n            document.querySelector('#vairCountry').value = 'all';\r\n            document.querySelector('#vairType').value = 'all';\r\n            document.querySelector('#vairPrice').value = 'all';\r\n            document.querySelector('#vairFeature').value = 'all';\r\n            applyFilters();\r\n            document.querySelectorAll('.vair-country-filter-link').forEach(link => link.classList.remove('is-active'));\r\n          });\r\n        }\r\n\r\n        document.querySelectorAll('.vair-open-contact').forEach(button => {\r\n          button.addEventListener('click', function () {\r\n            openInquiryPopup(null);\r\n          });\r\n        });\r\n\r\n        \/\/ FileBird-Bilder werden nur nachgeladen. Die Immobilien bleiben auch sichtbar,\r\n        \/\/ wenn AJAX, PHP oder FileBird noch nicht funktioniert.\r\n        loadDynamicGalleries()\r\n          .then(function () {\r\n            renderCards();\r\n            applyFilters();\r\n          })\r\n          .catch(function (error) {\r\n            console.warn('FileBird Galerie-Ladevorgang abgebrochen:', error);\r\n          });\r\n      }\r\n\r\n      initPropertyPage();\r\n\r\n      \/* Dynamic init above replaces the original filter\/listener init. *\/\r\n      \/*\r\n      document.querySelectorAll('.vair-country-filter-link').forEach(link => {\r\n        link.addEventListener('click', function (e) {\r\n          e.preventDefault();\r\n          setCountryFilter(this.dataset.countryFilter);\r\n        });\r\n      });\r\n\r\n      ['#vairSearch', '#vairCountry', '#vairType', '#vairPrice', '#vairFeature'].forEach(selector => {\r\n        document.querySelector(selector).addEventListener('input', applyFilters);\r\n      });\r\n\r\n      document.querySelector('#vairReset').addEventListener('click', function () {\r\n        document.querySelector('#vairSearch').value = '';\r\n        document.querySelector('#vairCountry').value = 'all';\r\n        document.querySelector('#vairType').value = 'all';\r\n        document.querySelector('#vairPrice').value = 'all';\r\n        document.querySelector('#vairFeature').value = 'all';\r\n        applyFilters();\r\n        document.querySelectorAll('.vair-country-filter-link').forEach(link => link.classList.remove('is-active'));\r\n      });\r\n\r\n      document.querySelectorAll('.vair-open-contact').forEach(button => {\r\n        button.addEventListener('click', function () {\r\n          openInquiryPopup(null);\r\n        });\r\n      });\r\n      *\/\r\n\r\n      galleryExpand.addEventListener('click', function () {\r\n        openLightbox(activeImageIndex);\r\n      });\r\n\r\n      galleryOpenFullscreen.addEventListener('click', function () {\r\n        openLightbox(activeImageIndex);\r\n      });\r\n\r\n      galleryNext.addEventListener('click', nextModalImage);\r\n      galleryPrev.addEventListener('click', prevModalImage);\r\n\r\n      mainImg.addEventListener('click', function () {\r\n        openLightbox(activeImageIndex);\r\n      });\r\n\r\n      lightboxClose.addEventListener('click', closeLightbox);\r\n      lightboxNext.addEventListener('click', nextLightboxImage);\r\n      lightboxPrev.addEventListener('click', prevLightboxImage);\r\n\r\n      lightbox.addEventListener('click', function (e) {\r\n        if (e.target === lightbox) closeLightbox();\r\n      });\r\n\r\n      modalClose.addEventListener('click', closeModal);\r\n\r\n      modal.addEventListener('click', function (e) {\r\n        if (e.target === modal) closeModal();\r\n      });\r\n\r\n      document.addEventListener('keydown', function (e) {\r\n        if (lightbox.classList.contains('is-open')) {\r\n          if (e.key === 'Escape') closeLightbox();\r\n          if (e.key === 'ArrowRight') nextLightboxImage();\r\n          if (e.key === 'ArrowLeft') prevLightboxImage();\r\n          return;\r\n        }\r\n\r\n        if (modal.classList.contains('is-open')) {\r\n          if (e.key === 'Escape') closeModal();\r\n          if (e.key === 'ArrowRight') nextModalImage();\r\n          if (e.key === 'ArrowLeft') prevModalImage();\r\n        }\r\n      });\r\n    })();\r\n  <\/script>\r\n<\/section>\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-0dad29f e-flex e-con-boxed e-con e-parent\" data-id=\"0dad29f\" 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-4452a07 elementor-widget elementor-widget-html\" data-id=\"4452a07\" 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\/#autokredit\">Autokredit<\/a>\r\n      <a href=\"\/finanzierung\/#immobilienkredit\">Immobilienkredit<\/a>\r\n      <a href=\"\/finanzierung\/#projektfinanzierung\">Projektfinanzierung<\/a>\r\n      <a href=\"\/finanzierung\/#goldkredit\">Goldkredit<\/a>\r\n    <\/div>\r\n\r\n    <div>\r\n  <h4>Fahrzeugh\u00e4ndler<\/h4>\r\n  <a href=\"\/fahrzeughaendler\/#fahrzeughandel\">Fahrzeughandel<\/a>\r\n  <a href=\"\/fahrzeughaendler\/#absatzfinanzierung\">Absatzfinanzierung<\/a>\r\n  <a href=\"\/fahrzeughaendler\/#einkaufsfinanzierung\">Einkaufsfinanzierung<\/a>\r\n  <a href=\"\/fahrzeughaendler\/#flottenloesungen\">Flottenl\u00f6sungen<\/a>\r\n<\/div>\r\n\r\n    <div>\r\n      <h4>Konto<\/h4>\r\n      <a href=\"\/konto\/#geschaeftskonto\">Gesch\u00e4ftskonto<\/a>\r\n      <a href=\"\/konto\/#sparkonto\">Sparkonto<\/a>\r\n      <a href=\"\/konto\/#privatkonto\">Privatkonto<\/a>\r\n      <a href=\"\/konto\/#goldkonto\">Goldkonto<\/a>\r\n    <\/div>\r\n\r\n    <div>\r\n      <h4>Support<\/h4>\r\n      <a href=\"\/ueber-uns\/\">\u00dcber uns<\/a>\r\n      <a href=\"\/kontakt\/\">Kontakt<\/a>\r\n      <a href=\"\/datenschutz\/\">Datenschutz<\/a>\r\n      <a href=\"\/impressum\/\">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-2ad19b6 ha-css-transform-yes elementor-widget elementor-widget-theme-site-logo elementor-widget-image\" data-id=\"2ad19b6\" 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-d14351e elementor-widget__width-initial ha-css-transform-yes elementor-widget elementor-widget-button\" data-id=\"d14351e\" 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%3DeyJpZCI6Ijc2NzUiLCJ0b2dnbGUiOmZhbHNlfQ%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>Internationale Immobilien\u00a0 Wir verbinden Investoren mit ausgew\u00e4hlten Immobilien in internationalen M\u00e4rkten &#8211; klar strukturiert, pers\u00f6nlich begleitet und passend zur jeweiligen Investmentstrategie Immobilien ansehen \u2193 Alle TypenStudioApartmentLoftPenthouse Budgetbis \u20ac100.000bis \u20ac150.000bis \u20ac200.000bis \u20ac250.000 Finden 7 internationale M\u00e4rkte Ausgew\u00e4hlte Immobilien Pers\u00f6nlich begleitet L\u00e4nder M\u00e4rkte f\u00fcr Immobilien-Investments 8 Objekte Zypern Aktive Immobilienangebote f\u00fcr internationale Kapitalanlage. 1 Objekt Deutschland Gewerbeimmobilie [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"_angie_page":false,"postBodyCss":"","postBodyMargin":[],"postBodyPadding":[],"postBodyBackground":{"backgroundType":"classic","gradient":""},"footnotes":""},"class_list":["post-6464","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/vair.world\/en\/wp-json\/wp\/v2\/pages\/6464","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=6464"}],"version-history":[{"count":177,"href":"https:\/\/vair.world\/en\/wp-json\/wp\/v2\/pages\/6464\/revisions"}],"predecessor-version":[{"id":8119,"href":"https:\/\/vair.world\/en\/wp-json\/wp\/v2\/pages\/6464\/revisions\/8119"}],"wp:attachment":[{"href":"https:\/\/vair.world\/en\/wp-json\/wp\/v2\/media?parent=6464"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}