{"id":8,"date":"2026-07-16T13:17:00","date_gmt":"2026-07-16T13:17:00","guid":{"rendered":"https:\/\/applicationlink.carenza.nl\/?page_id=8"},"modified":"2026-07-17T06:49:16","modified_gmt":"2026-07-17T06:49:16","slug":"coming-soon","status":"publish","type":"page","link":"https:\/\/applicationlink.carenza.nl\/","title":{"rendered":"Coming soon"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"8\" class=\"elementor elementor-8\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-68d8001 custom-gradient-container e-flex e-con-boxed e-con e-parent\" data-id=\"68d8001\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f47f1db elementor-widget elementor-widget-html\" data-id=\"f47f1db\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div class=\"mge-v2\" aria-hidden=\"true\">\n    <canvas class=\"mge-v2__canvas\"><\/canvas>\n<\/div>\n\n<style>\n    \/*\n     * ============================================================\n     * MESH GRADIENT ENGINE V2 \u2014 ELEMENTOR CSS\n     * ============================================================\n     *\/\n\n    .custom-gradient-container {\n        position: relative !important;\n        overflow: hidden !important;\n        isolation: isolate;\n        background-color: #020813 !important;\n    }\n\n    \/*\n     * JavaScript verplaatst deze laag rechtstreeks naar de container.\n     *\/\n    .custom-gradient-container > .mge-v2 {\n        position: absolute !important;\n        inset: 0 !important;\n        z-index: 0 !important;\n\n        width: 100% !important;\n        height: 100% !important;\n        min-width: 100% !important;\n        min-height: 100% !important;\n\n        pointer-events: none !important;\n        overflow: hidden;\n\n        background:\n            radial-gradient(\n                ellipse at 22% 20%,\n                rgba(233, 140, 0, 0.38),\n                transparent 55%\n            ),\n            radial-gradient(\n                ellipse at 82% 74%,\n                rgba(233, 140, 0, 0.42),\n                transparent 58%\n            ),\n            #020813;\n    }\n\n    .mge-v2__canvas {\n        display: block;\n        width: 100%;\n        height: 100%;\n    }\n\n    \/*\n     * Alle Elementor-content boven de gradient.\n     *\/\n    .custom-gradient-container > *:not(.mge-v2) {\n        position: relative;\n        z-index: 2;\n    }\n\n    .custom-gradient-container > .e-con-inner {\n        position: relative;\n        z-index: 2;\n    }\n\n    \/*\n     * De achtergebleven HTML-widget neemt geen ruimte meer in.\n     *\/\n    .mge-v2-source-hidden {\n        position: absolute !important;\n        inset: 0 auto auto 0 !important;\n\n        width: 0 !important;\n        height: 0 !important;\n        min-width: 0 !important;\n        min-height: 0 !important;\n\n        margin: 0 !important;\n        padding: 0 !important;\n\n        overflow: hidden !important;\n        opacity: 0 !important;\n        pointer-events: none !important;\n    }\n\n    .mge-v2-source-hidden > .elementor-widget-container {\n        width: 0 !important;\n        height: 0 !important;\n        margin: 0 !important;\n        padding: 0 !important;\n        overflow: hidden !important;\n    }\n\n    \/*\n     * Statische premium fallback.\n     *\/\n    @media (prefers-reduced-motion: reduce) {\n        .mge-v2__canvas {\n            display: none;\n        }\n\n        .custom-gradient-container > .mge-v2 {\n            background:\n                radial-gradient(\n                    ellipse at 18% 20%,\n                    rgba(233, 140, 0, 0.88) 0%,\n                    rgba(233, 140, 0, 0.30) 30%,\n                    transparent 62%\n                ),\n                radial-gradient(\n                    ellipse at 82% 74%,\n                    rgba(233, 140, 0, 0.78) 0%,\n                    rgba(233, 140, 0, 0.24) 32%,\n                    transparent 64%\n                ),\n                radial-gradient(\n                    ellipse at 58% 40%,\n                    rgba(15, 45, 95, 0.75),\n                    transparent 65%\n                ),\n                #020813;\n        }\n    }\n<\/style>\n\n<script>\n(() => {\n    \"use strict\";\n\n    \/*\n     * ============================================================\n     * MESH GRADIENT ENGINE V2\n     * ============================================================\n     *\/\n\nconst CONFIG = {\n    speed: 5,\n\n    orangeIntensity: 0.82,\n    blueIntensity: 1.25,\n\n    brightness: 1.0,\n    saturation: 1.0,\n    contrast: 1.02,\n\n    softness: 2.35,\n\n    bloomIntensity: 0.06,\n    bloomRadius: 1.05,\n\n    ambientMotion: 0.015,\n\n    vignette: 0.20,\n    grain: 0.006,\n\n    pointerEnabled: true,\n    pointerStrength: 0.055,\n    pointerEase: 0.045,\n\n    scrollEnabled: true,\n    scrollStrength: 0.00012,\n\n    desktopPixelRatio: 2,\n    mobilePixelRatio: 1.25,\n    mobileBreakpoint: 768,\n\n    pauseOutsideViewport: true,\n    viewportMargin: \"250px\",\n\n    adaptiveQuality: true\n};\n\n    const VERTEX_SHADER = `\n        attribute vec2 a_position;\n        varying vec2 v_uv;\n\n        void main() {\n            v_uv = a_position * 0.5 + 0.5;\n            gl_Position = vec4(a_position, 0.0, 1.0);\n        }\n    `;\n\n    const FRAGMENT_SHADER = `\n        precision highp float;\n\n        varying vec2 v_uv;\n\n        uniform vec2 u_resolution;\n        uniform vec2 u_pointer;\n\n        uniform float u_time;\n        uniform float u_scroll;\n\n        uniform float u_softness;\n        uniform float u_orangeIntensity;\n        uniform float u_blueIntensity;\n        uniform float u_brightness;\n        uniform float u_saturation;\n        uniform float u_contrast;\n\n        uniform float u_bloomIntensity;\n        uniform float u_bloomRadius;\n        uniform float u_ambientMotion;\n        uniform float u_vignette;\n        uniform float u_grain;\n        uniform float u_pointerStrength;\n\n        \/*\n         * #020813\n         *\/\n        const vec3 BACKGROUND = vec3(\n            0.0078431373,\n            0.0313725490,\n            0.0745098039\n        );\n\n        \/*\n         * #E98C00\n         *\/\n        const vec3 ORANGE = vec3(\n            0.9137254902,\n            0.5490196078,\n            0.0\n        );\n\n        const vec3 ORANGE_LIGHT = vec3(\n            0.9137254902,\n            0.5490196078,\n            0.015\n        );\n\n        const vec3 DEEP_BLUE = vec3(\n            0.012,\n            0.052,\n            0.135\n        );\n\n        const vec3 MID_BLUE = vec3(\n            0.020,\n            0.105,\n            0.235\n        );\n\n        const vec3 SOFT_BLUE = vec3(\n            0.035,\n            0.155,\n            0.315\n        );\n\n        float hash21(vec2 p) {\n            p = fract(\n                p * vec2(123.34, 345.45)\n            );\n\n            p += dot(\n                p,\n                p + 34.345\n            );\n\n            return fract(p.x * p.y);\n        }\n\n        \/*\n         * Elliptisch meshgewicht met zachte gaussian falloff.\n         *\/\n        float meshWeight(\n            vec2 uv,\n            vec2 position,\n            vec2 radius,\n            float softness\n        ) {\n            vec2 delta =\n                (uv - position) \/\n                max(radius, vec2(0.0001));\n\n            float distanceSquared =\n                dot(delta, delta);\n\n            return exp(\n                -distanceSquared * softness\n            );\n        }\n\n        \/*\n         * Niet-herhalende beweging door meerdere golven\n         * met verschillende frequenties te combineren.\n         *\/\n        vec2 meshMotion(\n            vec2 origin,\n            vec2 range,\n            vec4 frequencies,\n            vec4 phases,\n            float time\n        ) {\n            float xMotion =\n                sin(time * frequencies.x + phases.x) * 0.62 +\n                sin(time * frequencies.y + phases.y) * 0.38;\n\n            float yMotion =\n                cos(time * frequencies.z + phases.z) * 0.61 +\n                sin(time * frequencies.w + phases.w) * 0.39;\n\n            return origin + vec2(\n                xMotion * range.x,\n                yMotion * range.y\n            );\n        }\n\n        void addPoint(\n            inout vec3 colorAccumulator,\n            inout float weightAccumulator,\n            inout float orangeAccumulator,\n            vec2 uv,\n            vec2 position,\n            vec2 radius,\n            vec3 color,\n            float strength,\n            float orangeContribution\n        ) {\n            float weight = meshWeight(\n                uv,\n                position,\n                radius,\n                u_softness\n            );\n\n            weight *= strength;\n\n            colorAccumulator += color * weight;\n            weightAccumulator += weight;\n            orangeAccumulator += weight * orangeContribution;\n        }\n\n        vec3 adjustSaturation(\n            vec3 color,\n            float saturation\n        ) {\n            float luminance = dot(\n                color,\n                vec3(0.2126, 0.7152, 0.0722)\n            );\n\n            return mix(\n                vec3(luminance),\n                color,\n                saturation\n            );\n        }\n\n        vec3 adjustContrast(\n            vec3 color,\n            float contrast\n        ) {\n            return (\n                color - 0.5\n            ) * contrast + 0.5;\n        }\n\n        void main() {\n            vec2 uv = v_uv;\n\n            float aspect =\n                u_resolution.x \/\n                max(u_resolution.y, 1.0);\n\n            \/*\n             * Aspectratio-correcte meshruimte.\n             *\/\n            vec2 meshUv = uv;\n\n            meshUv.x =\n                (meshUv.x - 0.5) *\n                aspect +\n                0.5;\n\n            meshUv.y += u_scroll;\n\n            float time = u_time;\n\n            \/*\n             * Cursorpositie naar dezelfde meshruimte omzetten.\n             *\/\n            vec2 pointer = u_pointer;\n\n            pointer.x =\n                (pointer.x - 0.5) *\n                aspect +\n                0.5;\n\n            vec2 pointerOffset =\n                (pointer - vec2(0.5 * aspect, 0.5)) *\n                u_pointerStrength;\n\n            \/*\n             * ====================================================\n             * TWAALF MESHPOINTS\n             * ====================================================\n             *\/\n\n            vec2 p1 = meshMotion(\n                vec2(0.08 * aspect, 0.12),\n                vec2(0.25 * aspect, 0.20),\n                vec4(0.29, 0.17, 0.23, 0.31),\n                vec4(0.0, 1.4, 2.1, 0.6),\n                time\n            ) + pointerOffset * 0.70;\n\n            vec2 p2 = meshMotion(\n                vec2(0.48 * aspect, 0.15),\n                vec2(0.28 * aspect, 0.16),\n                vec4(0.21, 0.34, 0.19, 0.27),\n                vec4(1.8, 3.2, 0.5, 2.7),\n                time\n            ) - pointerOffset * 0.35;\n\n            vec2 p3 = meshMotion(\n                vec2(0.88 * aspect, 0.18),\n                vec2(0.24 * aspect, 0.21),\n                vec4(0.25, 0.16, 0.32, 0.22),\n                vec4(3.8, 1.0, 4.2, 2.1),\n                time\n            ) + pointerOffset * 0.45;\n\n            vec2 p4 = meshMotion(\n                vec2(0.18 * aspect, 0.47),\n                vec2(0.22 * aspect, 0.25),\n                vec4(0.18, 0.31, 0.24, 0.15),\n                vec4(5.1, 2.2, 1.4, 3.5),\n                time\n            ) - pointerOffset * 0.55;\n\n            vec2 p5 = meshMotion(\n                vec2(0.50 * aspect, 0.42),\n                vec2(0.26 * aspect, 0.24),\n                vec4(0.14, 0.26, 0.20, 0.33),\n                vec4(2.5, 4.7, 3.2, 0.8),\n                time\n            ) + pointerOffset * 0.25;\n\n            vec2 p6 = meshMotion(\n                vec2(0.82 * aspect, 0.50),\n                vec2(0.24 * aspect, 0.23),\n                vec4(0.30, 0.17, 0.26, 0.21),\n                vec4(4.5, 2.6, 5.0, 1.7),\n                time\n            ) - pointerOffset * 0.42;\n\n            vec2 p7 = meshMotion(\n                vec2(0.09 * aspect, 0.82),\n                vec2(0.24 * aspect, 0.20),\n                vec4(0.22, 0.28, 0.18, 0.34),\n                vec4(1.1, 5.3, 3.8, 2.4),\n                time\n            ) + pointerOffset * 0.38;\n\n            vec2 p8 = meshMotion(\n                vec2(0.40 * aspect, 0.78),\n                vec2(0.28 * aspect, 0.21),\n                vec4(0.16, 0.24, 0.31, 0.19),\n                vec4(3.3, 0.9, 2.0, 5.5),\n                time\n            ) - pointerOffset * 0.28;\n\n            vec2 p9 = meshMotion(\n                vec2(0.82 * aspect, 0.84),\n                vec2(0.25 * aspect, 0.21),\n                vec4(0.27, 0.15, 0.22, 0.30),\n                vec4(5.5, 3.0, 1.2, 4.3),\n                time\n            ) + pointerOffset * 0.58;\n\n            vec2 p10 = meshMotion(\n                vec2(0.34 * aspect, 0.28),\n                vec2(0.22 * aspect, 0.19),\n                vec4(0.20, 0.32, 0.17, 0.25),\n                vec4(4.2, 1.9, 5.7, 2.8),\n                time\n            ) - pointerOffset * 0.20;\n\n            vec2 p11 = meshMotion(\n                vec2(0.67 * aspect, 0.67),\n                vec2(0.25 * aspect, 0.22),\n                vec4(0.31, 0.19, 0.27, 0.16),\n                vec4(0.7, 4.8, 2.9, 5.2),\n                time\n            ) + pointerOffset * 0.32;\n\n            vec2 p12 = meshMotion(\n                vec2(0.56 * aspect, 0.92),\n                vec2(0.24 * aspect, 0.15),\n                vec4(0.17, 0.29, 0.21, 0.26),\n                vec4(2.8, 5.6, 4.4, 1.0),\n                time\n            ) - pointerOffset * 0.45;\n\n            \/*\n             * ====================================================\n             * GEWOGEN KLEURMENGING\n             * ====================================================\n             *\/\n\n            vec3 accumulatedColor =\n                BACKGROUND * 1.65;\n\n            float accumulatedWeight = 1.65;\n            float accumulatedOrange = 0.0;\n\n            addPoint(\n                accumulatedColor,\n                accumulatedWeight,\n                accumulatedOrange,\n                meshUv,\n                p1,\n                vec2(0.50 * aspect, 0.48),\n                ORANGE * u_orangeIntensity,\n                1.08,\n                1.0\n            );\n\n            addPoint(\n                accumulatedColor,\n                accumulatedWeight,\n                accumulatedOrange,\n                meshUv,\n                p2,\n                vec2(0.48 * aspect, 0.46),\n                MID_BLUE * u_blueIntensity,\n                0.90,\n                0.0\n            );\n\n            addPoint(\n                accumulatedColor,\n                accumulatedWeight,\n                accumulatedOrange,\n                meshUv,\n                p3,\n                vec2(0.54 * aspect, 0.50),\n                ORANGE * u_orangeIntensity,\n                1.04,\n                1.0\n            );\n\n            addPoint(\n                accumulatedColor,\n                accumulatedWeight,\n                accumulatedOrange,\n                meshUv,\n                p4,\n                vec2(0.46 * aspect, 0.52),\n                DEEP_BLUE * u_blueIntensity,\n                1.08,\n                0.0\n            );\n\n            addPoint(\n                accumulatedColor,\n                accumulatedWeight,\n                accumulatedOrange,\n                meshUv,\n                p5,\n                vec2(0.54 * aspect, 0.50),\n                ORANGE * u_orangeIntensity,\n                0.84,\n                0.88\n            );\n\n            addPoint(\n                accumulatedColor,\n                accumulatedWeight,\n                accumulatedOrange,\n                meshUv,\n                p6,\n                vec2(0.50 * aspect, 0.48),\n                SOFT_BLUE * u_blueIntensity,\n                0.76,\n                0.0\n            );\n\n            addPoint(\n                accumulatedColor,\n                accumulatedWeight,\n                accumulatedOrange,\n                meshUv,\n                p7,\n                vec2(0.48 * aspect, 0.46),\n                ORANGE * u_orangeIntensity,\n                0.82,\n                0.90\n            );\n\n            addPoint(\n                accumulatedColor,\n                accumulatedWeight,\n                accumulatedOrange,\n                meshUv,\n                p8,\n                vec2(0.56 * aspect, 0.50),\n                DEEP_BLUE * u_blueIntensity,\n                1.04,\n                0.0\n            );\n\n            addPoint(\n                accumulatedColor,\n                accumulatedWeight,\n                accumulatedOrange,\n                meshUv,\n                p9,\n                vec2(0.53 * aspect, 0.48),\n                ORANGE * u_orangeIntensity,\n                1.12,\n                1.0\n            );\n\n            addPoint(\n                accumulatedColor,\n                accumulatedWeight,\n                accumulatedOrange,\n                meshUv,\n                p10,\n                vec2(0.44 * aspect, 0.42),\n                MID_BLUE * u_blueIntensity,\n                0.68,\n                0.0\n            );\n\n            addPoint(\n                accumulatedColor,\n                accumulatedWeight,\n                accumulatedOrange,\n                meshUv,\n                p11,\n                vec2(0.50 * aspect, 0.54),\n                ORANGE * u_orangeIntensity,\n                0.63,\n                0.72\n            );\n\n            addPoint(\n                accumulatedColor,\n                accumulatedWeight,\n                accumulatedOrange,\n                meshUv,\n                p12,\n                vec2(0.52 * aspect, 0.42),\n                DEEP_BLUE * u_blueIntensity,\n                0.88,\n                0.0\n            );\n\n            vec3 color =\n                accumulatedColor \/\n                max(accumulatedWeight, 0.0001);\n\n            \/*\n             * ====================================================\n             * BLOOM\n             * ====================================================\n             *\n             * Grotere versies van de oranje velden maken een zachte\n             * diffuse gloed, zonder rook- of vlameffect.\n             *\/\n\n            float bloom =\n                meshWeight(\n                    meshUv,\n                    p1,\n                    vec2(\n                        0.64 * aspect,\n                        0.62\n                    ) * u_bloomRadius,\n                    1.55\n                ) * 0.80 +\n\n                meshWeight(\n                    meshUv,\n                    p3,\n                    vec2(\n                        0.68 * aspect,\n                        0.64\n                    ) * u_bloomRadius,\n                    1.55\n                ) * 0.78 +\n\n                meshWeight(\n                    meshUv,\n                    p9,\n                    vec2(\n                        0.66 * aspect,\n                        0.62\n                    ) * u_bloomRadius,\n                    1.55\n                ) * 0.84;\n\n            bloom *= u_bloomIntensity;\n\n            color += ORANGE * bloom * 0.10;\n\n            \/*\n             * Heldere oranje kernen.\n             *\/\nfloat orangeCore = smoothstep(\n    0.38,\n    1.25,\n    accumulatedOrange\n);\n\ncolor = mix(\n    color,\n    ORANGE,\n    orangeCore * 0.07\n);\n\n            \/*\n             * ====================================================\n             * AMBIENT LIGHT\n             * ====================================================\n             *\/\n\n            float ambient =\n                1.0 +\n                sin(time * 0.19) *\n                u_ambientMotion +\n                cos(time * 0.11 + 1.8) *\n                u_ambientMotion *\n                0.55;\n\n            color *= ambient;\n\n            \/*\n             * Vignette.\n             *\/\n            vec2 centered = uv - 0.5;\n            centered.x *= aspect;\n\n            float edgeDistance = length(centered);\n\n            float vignetteMask = smoothstep(\n                0.24,\n                0.94,\n                edgeDistance\n            );\n\n            color *=\n                1.0 -\n                vignetteMask *\n                u_vignette;\n\n            \/*\n             * Brightness, saturation en contrast.\n             *\/\ncolor *= u_brightness;\n\n\/*\n * Alleen een heel lichte contrastcorrectie.\n * Geen extra saturation, zodat #E98C00 niet verschuift.\n *\/\ncolor = adjustContrast(\n    color,\n    u_contrast\n);\n\n            \/*\n             * Minimale grain tegen kleurbanding.\n             *\/\n            float grainValue =\n                hash21(\n                    gl_FragCoord.xy +\n                    fract(time * 91.7)\n                ) - 0.5;\n\n            color += grainValue * u_grain;\n\n            color = clamp(\n                color,\n                0.0,\n                1.0\n            );\n\n            gl_FragColor = vec4(\n                color,\n                1.0\n            );\n        }\n    `;\n\n    \/*\n     * ============================================================\n     * WEBGL UTILITIES\n     * ============================================================\n     *\/\n\n    function createShader(gl, type, source) {\n        const shader = gl.createShader(type);\n\n        if (!shader) {\n            throw new Error(\n                \"WebGL-shader kon niet worden aangemaakt.\"\n            );\n        }\n\n        gl.shaderSource(shader, source);\n        gl.compileShader(shader);\n\n        if (\n            !gl.getShaderParameter(\n                shader,\n                gl.COMPILE_STATUS\n            )\n        ) {\n            const message =\n                gl.getShaderInfoLog(shader) ||\n                \"Onbekende shaderfout.\";\n\n            gl.deleteShader(shader);\n            throw new Error(message);\n        }\n\n        return shader;\n    }\n\n    function createProgram(gl) {\n        const vertexShader = createShader(\n            gl,\n            gl.VERTEX_SHADER,\n            VERTEX_SHADER\n        );\n\n        const fragmentShader = createShader(\n            gl,\n            gl.FRAGMENT_SHADER,\n            FRAGMENT_SHADER\n        );\n\n        const program = gl.createProgram();\n\n        if (!program) {\n            throw new Error(\n                \"WebGL-programma kon niet worden aangemaakt.\"\n            );\n        }\n\n        gl.attachShader(program, vertexShader);\n        gl.attachShader(program, fragmentShader);\n        gl.linkProgram(program);\n\n        gl.deleteShader(vertexShader);\n        gl.deleteShader(fragmentShader);\n\n        if (\n            !gl.getProgramParameter(\n                program,\n                gl.LINK_STATUS\n            )\n        ) {\n            const message =\n                gl.getProgramInfoLog(program) ||\n                \"Onbekende WebGL-linkfout.\";\n\n            gl.deleteProgram(program);\n            throw new Error(message);\n        }\n\n        return program;\n    }\n\n    \/*\n     * ============================================================\n     * KWALITEITSDETECTIE\n     * ============================================================\n     *\/\n\n    function getQualityPixelRatio() {\n        const devicePixelRatio =\n            window.devicePixelRatio || 1;\n\n        const isMobile =\n            window.innerWidth <=\n            CONFIG.mobileBreakpoint;\n\n        let maximum = isMobile\n            ? CONFIG.mobilePixelRatio\n            : CONFIG.desktopPixelRatio;\n\n        if (CONFIG.adaptiveQuality) {\n            const memory =\n                navigator.deviceMemory || 8;\n\n            const cores =\n                navigator.hardwareConcurrency || 8;\n\n            if (memory <= 4 || cores <= 4) {\n                maximum = Math.min(\n                    maximum,\n                    isMobile ? 1 : 1.5\n                );\n            }\n        }\n\n        return Math.min(\n            devicePixelRatio,\n            maximum\n        );\n    }\n\n    \/*\n     * ============================================================\n     * ELEMENTOR-INTEGRATIE\n     * ============================================================\n     *\/\n\n    function moveLayerToContainer(layer) {\n        const container = layer.closest(\n            \".custom-gradient-container\"\n        );\n\n        if (!container) {\n            console.warn(\n                \"MGE V2: geen container met de class custom-gradient-container gevonden.\"\n            );\n\n            return null;\n        }\n\n        const sourceWidget = layer.closest(\n            \".elementor-widget-html\"\n        );\n\n        if (layer.parentElement !== container) {\n            container.insertBefore(\n                layer,\n                container.firstChild\n            );\n        }\n\n        \/*\n         * De originele widgetwrapper bevindt zich na de verplaatsing\n         * niet meer rondom de gradientlaag.\n         *\/\n        if (\n            sourceWidget &&\n            sourceWidget !== layer &&\n            !sourceWidget.contains(layer)\n        ) {\n            sourceWidget.classList.add(\n                \"mge-v2-source-hidden\"\n            );\n        }\n\n        return container;\n    }\n\n    \/*\n     * ============================================================\n     * ENGINE\n     * ============================================================\n     *\/\n\n    function initializeEngine(layer) {\n        if (\n            !layer ||\n            layer.dataset.mgeV2Initialized === \"true\"\n        ) {\n            return;\n        }\n\n        const container =\n            moveLayerToContainer(layer);\n\n        if (!container) {\n            return;\n        }\n\n        layer.dataset.mgeV2Initialized = \"true\";\n\n        const canvas = layer.querySelector(\n            \".mge-v2__canvas\"\n        );\n\n        if (!canvas) {\n            return;\n        }\n\n        const reducedMotion = window.matchMedia(\n            \"(prefers-reduced-motion: reduce)\"\n        );\n\n        if (reducedMotion.matches) {\n            return;\n        }\n\n        const gl =\n            canvas.getContext(\"webgl\", {\n                alpha: false,\n                antialias: false,\n                depth: false,\n                stencil: false,\n                premultipliedAlpha: false,\n                preserveDrawingBuffer: false,\n                powerPreference: \"high-performance\"\n            }) ||\n            canvas.getContext(\n                \"experimental-webgl\"\n            );\n\n        if (!gl) {\n            canvas.style.display = \"none\";\n\n            console.warn(\n                \"MGE V2: WebGL wordt niet ondersteund. De CSS-fallback wordt gebruikt.\"\n            );\n\n            return;\n        }\n\n        let program;\n\n        try {\n            program = createProgram(gl);\n        } catch (error) {\n            canvas.style.display = \"none\";\n\n            console.error(\n                \"MGE V2 kon niet starten:\",\n                error\n            );\n\n            return;\n        }\n\n        gl.useProgram(program);\n\n        const positionBuffer =\n            gl.createBuffer();\n\n        gl.bindBuffer(\n            gl.ARRAY_BUFFER,\n            positionBuffer\n        );\n\n        gl.bufferData(\n            gl.ARRAY_BUFFER,\n            new Float32Array([\n                -1, -1,\n                 1, -1,\n                -1,  1,\n                -1,  1,\n                 1, -1,\n                 1,  1\n            ]),\n            gl.STATIC_DRAW\n        );\n\n        const positionLocation =\n            gl.getAttribLocation(\n                program,\n                \"a_position\"\n            );\n\n        gl.enableVertexAttribArray(\n            positionLocation\n        );\n\n        gl.vertexAttribPointer(\n            positionLocation,\n            2,\n            gl.FLOAT,\n            false,\n            0,\n            0\n        );\n\n        const uniforms = {\n            resolution: gl.getUniformLocation(\n                program,\n                \"u_resolution\"\n            ),\n\n            pointer: gl.getUniformLocation(\n                program,\n                \"u_pointer\"\n            ),\n\n            time: gl.getUniformLocation(\n                program,\n                \"u_time\"\n            ),\n\n            scroll: gl.getUniformLocation(\n                program,\n                \"u_scroll\"\n            ),\n\n            softness: gl.getUniformLocation(\n                program,\n                \"u_softness\"\n            ),\n\n            orangeIntensity: gl.getUniformLocation(\n                program,\n                \"u_orangeIntensity\"\n            ),\n\n            blueIntensity: gl.getUniformLocation(\n                program,\n                \"u_blueIntensity\"\n            ),\n\n            brightness: gl.getUniformLocation(\n                program,\n                \"u_brightness\"\n            ),\n\n            saturation: gl.getUniformLocation(\n                program,\n                \"u_saturation\"\n            ),\n\n            contrast: gl.getUniformLocation(\n                program,\n                \"u_contrast\"\n            ),\n\n            bloomIntensity: gl.getUniformLocation(\n                program,\n                \"u_bloomIntensity\"\n            ),\n\n            bloomRadius: gl.getUniformLocation(\n                program,\n                \"u_bloomRadius\"\n            ),\n\n            ambientMotion: gl.getUniformLocation(\n                program,\n                \"u_ambientMotion\"\n            ),\n\n            vignette: gl.getUniformLocation(\n                program,\n                \"u_vignette\"\n            ),\n\n            grain: gl.getUniformLocation(\n                program,\n                \"u_grain\"\n            ),\n\n            pointerStrength: gl.getUniformLocation(\n                program,\n                \"u_pointerStrength\"\n            )\n        };\n\n        let animationFrame = null;\n        let isVisible = true;\n        let scrollOffset = 0;\n\n        let pointerTargetX = 0.5;\n        let pointerTargetY = 0.5;\n\n        let pointerCurrentX = 0.5;\n        let pointerCurrentY = 0.5;\n\n        \/*\n         * Door zichtbaarheidspauzes blijft de globale tijd behouden.\n         *\/\n        const engineStartTime =\n            performance.now();\n\n        function resizeCanvas() {\n            const bounds =\n                container.getBoundingClientRect();\n\n            const cssWidth = Math.max(\n                1,\n                Math.round(bounds.width)\n            );\n\n            const cssHeight = Math.max(\n                1,\n                Math.round(bounds.height)\n            );\n\n            const pixelRatio =\n                getQualityPixelRatio();\n\n            const renderWidth = Math.max(\n                1,\n                Math.round(\n                    cssWidth * pixelRatio\n                )\n            );\n\n            const renderHeight = Math.max(\n                1,\n                Math.round(\n                    cssHeight * pixelRatio\n                )\n            );\n\n            if (\n                canvas.width !== renderWidth ||\n                canvas.height !== renderHeight\n            ) {\n                canvas.width = renderWidth;\n                canvas.height = renderHeight;\n            }\n\n            canvas.style.width =\n                `${cssWidth}px`;\n\n            canvas.style.height =\n                `${cssHeight}px`;\n\n            gl.viewport(\n                0,\n                0,\n                renderWidth,\n                renderHeight\n            );\n        }\n\n        function updateScroll() {\n            if (!CONFIG.scrollEnabled) {\n                scrollOffset = 0;\n                return;\n            }\n\n            const bounds =\n                container.getBoundingClientRect();\n\n            scrollOffset =\n                -bounds.top *\n                CONFIG.scrollStrength;\n        }\n\n        function updatePointer(event) {\n            if (!CONFIG.pointerEnabled) {\n                return;\n            }\n\n            const bounds =\n                container.getBoundingClientRect();\n\n            if (\n                bounds.width <= 0 ||\n                bounds.height <= 0\n            ) {\n                return;\n            }\n\n            pointerTargetX =\n                (\n                    event.clientX -\n                    bounds.left\n                ) \/\n                bounds.width;\n\n            \/*\n             * WebGL begint onderaan; browserco\u00f6rdinaten bovenaan.\n             *\/\n            pointerTargetY =\n                1 -\n                (\n                    event.clientY -\n                    bounds.top\n                ) \/\n                bounds.height;\n\n            pointerTargetX = Math.max(\n                0,\n                Math.min(1, pointerTargetX)\n            );\n\n            pointerTargetY = Math.max(\n                0,\n                Math.min(1, pointerTargetY)\n            );\n        }\n\n        function resetPointer() {\n            pointerTargetX = 0.5;\n            pointerTargetY = 0.5;\n        }\n\n        function render(currentTime) {\n            if (\n                CONFIG.pauseOutsideViewport &&\n                !isVisible\n            ) {\n                animationFrame = null;\n                return;\n            }\n\n            const elapsedSeconds =\n                (\n                    currentTime -\n                    engineStartTime\n                ) \/\n                1000;\n\n            const meshTime =\n                elapsedSeconds *\n                CONFIG.speed *\n                0.48;\n\n            \/*\n             * Smooth cursor easing.\n             *\/\n            pointerCurrentX +=\n                (\n                    pointerTargetX -\n                    pointerCurrentX\n                ) *\n                CONFIG.pointerEase;\n\n            pointerCurrentY +=\n                (\n                    pointerTargetY -\n                    pointerCurrentY\n                ) *\n                CONFIG.pointerEase;\n\n            gl.useProgram(program);\n\n            gl.uniform2f(\n                uniforms.resolution,\n                canvas.width,\n                canvas.height\n            );\n\n            gl.uniform2f(\n                uniforms.pointer,\n                pointerCurrentX,\n                pointerCurrentY\n            );\n\n            gl.uniform1f(\n                uniforms.time,\n                meshTime\n            );\n\n            gl.uniform1f(\n                uniforms.scroll,\n                scrollOffset\n            );\n\n            gl.uniform1f(\n                uniforms.softness,\n                CONFIG.softness\n            );\n\n            gl.uniform1f(\n                uniforms.orangeIntensity,\n                CONFIG.orangeIntensity\n            );\n\n            gl.uniform1f(\n                uniforms.blueIntensity,\n                CONFIG.blueIntensity\n            );\n\n            gl.uniform1f(\n                uniforms.brightness,\n                CONFIG.brightness\n            );\n\n            gl.uniform1f(\n                uniforms.saturation,\n                CONFIG.saturation\n            );\n\n            gl.uniform1f(\n                uniforms.contrast,\n                CONFIG.contrast\n            );\n\n            gl.uniform1f(\n                uniforms.bloomIntensity,\n                CONFIG.bloomIntensity\n            );\n\n            gl.uniform1f(\n                uniforms.bloomRadius,\n                CONFIG.bloomRadius\n            );\n\n            gl.uniform1f(\n                uniforms.ambientMotion,\n                CONFIG.ambientMotion\n            );\n\n            gl.uniform1f(\n                uniforms.vignette,\n                CONFIG.vignette\n            );\n\n            gl.uniform1f(\n                uniforms.grain,\n                CONFIG.grain\n            );\n\n            gl.uniform1f(\n                uniforms.pointerStrength,\n                CONFIG.pointerEnabled\n                    ? CONFIG.pointerStrength\n                    : 0\n            );\n\n            gl.drawArrays(\n                gl.TRIANGLES,\n                0,\n                6\n            );\n\n            animationFrame =\n                requestAnimationFrame(render);\n        }\n\n        const resizeObserver =\n            new ResizeObserver(\n                resizeCanvas\n            );\n\n        resizeObserver.observe(container);\n\n        let intersectionObserver = null;\n\n        if (\n            CONFIG.pauseOutsideViewport &&\n            \"IntersectionObserver\" in window\n        ) {\n            intersectionObserver =\n                new IntersectionObserver(\n                    ([entry]) => {\n                        isVisible =\n                            entry.isIntersecting;\n\n                        if (\n                            isVisible &&\n                            !animationFrame\n                        ) {\n                            animationFrame =\n                                requestAnimationFrame(\n                                    render\n                                );\n                        }\n                    },\n                    {\n                        rootMargin:\n                            CONFIG.viewportMargin\n                    }\n                );\n\n            intersectionObserver.observe(\n                container\n            );\n        }\n\n        if (CONFIG.scrollEnabled) {\n            window.addEventListener(\n                \"scroll\",\n                updateScroll,\n                {\n                    passive: true\n                }\n            );\n\n            updateScroll();\n        }\n\n        if (CONFIG.pointerEnabled) {\n            container.addEventListener(\n                \"pointermove\",\n                updatePointer,\n                {\n                    passive: true\n                }\n            );\n\n            container.addEventListener(\n                \"pointerleave\",\n                resetPointer,\n                {\n                    passive: true\n                }\n            );\n        }\n\n        resizeCanvas();\n\n        animationFrame =\n            requestAnimationFrame(render);\n\n        \/*\n         * ========================================================\n         * CLEANUP\n         * ========================================================\n         *\/\n\n        const removalObserver =\n            new MutationObserver(() => {\n                if (\n                    document.documentElement.contains(\n                        container\n                    )\n                ) {\n                    return;\n                }\n\n                if (animationFrame) {\n                    cancelAnimationFrame(\n                        animationFrame\n                    );\n                }\n\n                resizeObserver.disconnect();\n\n                if (intersectionObserver) {\n                    intersectionObserver.disconnect();\n                }\n\n                window.removeEventListener(\n                    \"scroll\",\n                    updateScroll\n                );\n\n                container.removeEventListener(\n                    \"pointermove\",\n                    updatePointer\n                );\n\n                container.removeEventListener(\n                    \"pointerleave\",\n                    resetPointer\n                );\n\n                removalObserver.disconnect();\n\n                if (positionBuffer) {\n                    gl.deleteBuffer(\n                        positionBuffer\n                    );\n                }\n\n                if (program) {\n                    gl.deleteProgram(program);\n                }\n            });\n\n        removalObserver.observe(\n            document.body,\n            {\n                childList: true,\n                subtree: true\n            }\n        );\n    }\n\n    \/*\n     * ============================================================\n     * INITIALISATIE\n     * ============================================================\n     *\/\n\n    function initializeAll() {\n        document\n            .querySelectorAll(\".mge-v2\")\n            .forEach(initializeEngine);\n    }\n\n    if (document.readyState === \"loading\") {\n        document.addEventListener(\n            \"DOMContentLoaded\",\n            initializeAll,\n            {\n                once: true\n            }\n        );\n    } else {\n        initializeAll();\n    }\n\n    \/*\n     * Elementor-editor.\n     *\/\n    window.addEventListener(\n        \"elementor\/frontend\/init\",\n        () => {\n            setTimeout(\n                initializeAll,\n                250\n            );\n        }\n    );\n\n    \/*\n     * Elementor kan HTML-widgets opnieuw renderen.\n     *\/\n    const elementorObserver =\n        new MutationObserver(() => {\n            initializeAll();\n        });\n\n    elementorObserver.observe(\n        document.documentElement,\n        {\n            childList: true,\n            subtree: true\n        }\n    );\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t\t<h1 data-interaction-id=\"5a843e1\" class=\"H1 e-5a843e1-f27560f e-heading-base\" data-e-type=\"widget\" data-id=\"5a843e1\">Coming soon<\/h1>\n\t\t\t\t\t<p class=\"H5 e-dacd60d-46c047a e-paragraph-base\" data-interaction-id=\"dacd60d\" data-e-type=\"widget\" data-id=\"dacd60d\">ApplicationLink and carenza* are working on a new website<\/p>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Coming soon ApplicationLink and carenza* are working on a new website<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-8","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/applicationlink.carenza.nl\/index.php?rest_route=\/wp\/v2\/pages\/8","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/applicationlink.carenza.nl\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/applicationlink.carenza.nl\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/applicationlink.carenza.nl\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/applicationlink.carenza.nl\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=8"}],"version-history":[{"count":97,"href":"https:\/\/applicationlink.carenza.nl\/index.php?rest_route=\/wp\/v2\/pages\/8\/revisions"}],"predecessor-version":[{"id":127,"href":"https:\/\/applicationlink.carenza.nl\/index.php?rest_route=\/wp\/v2\/pages\/8\/revisions\/127"}],"wp:attachment":[{"href":"https:\/\/applicationlink.carenza.nl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=8"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}