{"id":2,"date":"2026-05-15T08:14:17","date_gmt":"2026-05-15T08:14:17","guid":{"rendered":"https:\/\/inspiro.wpzoom.com\/construction\/?page_id=2"},"modified":"2026-08-25T08:23:03","modified_gmt":"2026-08-25T08:23:03","slug":"homepage","status":"publish","type":"page","link":"https:\/\/citybrix.ai\/","title":{"rendered":"Homepage"},"content":{"rendered":"\n<div class=\"wp-block-cover is-light\" style=\"min-height:90vh;aspect-ratio:unset;\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" class=\"wp-block-cover__image-background wp-image-208 size-large\" alt=\"\" src=\"https:\/\/inspiro.wpzoom.com\/construction\/wp-content\/uploads\/sites\/9\/2026\/05\/photo-1541888946425-d81bb19240f5_converted-1024x683.jpg\" data-object-fit=\"cover\" srcset=\"https:\/\/citybrix.ai\/wp-content\/uploads\/2026\/05\/photo-1541888946425-d81bb19240f5_converted-1024x683.jpg 1024w, https:\/\/citybrix.ai\/wp-content\/uploads\/2026\/05\/photo-1541888946425-d81bb19240f5_converted-300x200.jpg 300w, https:\/\/citybrix.ai\/wp-content\/uploads\/2026\/05\/photo-1541888946425-d81bb19240f5_converted-2000x1333.jpg 2000w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><span aria-hidden=\"true\" class=\"wp-block-cover__background has-background-dim-80 has-background-dim\" style=\"background-color:#020202\"><\/span><div class=\"wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow\">\n<div class=\"wp-block-group is-layout-constrained wp-container-core-group-is-layout-457a2287 wp-block-group-is-layout-constrained\" style=\"padding-top:0;padding-right:0;padding-bottom:0;padding-left:0\">\n<p class=\"has-text-color wp-block-paragraph\" style=\"color:#f59e0b;margin-top:0;margin-bottom:16px;font-size:12px;font-weight:700;letter-spacing:4px;text-transform:uppercase\">Est. 1998 \u00b7 Warsaw, Poland<\/p>\n\n\n\n<h1 class=\"wp-block-heading has-text-color\" style=\"color:#ffffff;margin-top:0px;margin-bottom:32px;padding-top:0;padding-bottom:0;font-size:clamp(40px, 7vw, 96px);font-weight:700;line-height:1.0;text-transform:uppercase\">BUILDING<br><mark style=\"background-color:rgba(0,0,0,0);color:#f59e0b\" class=\"has-inline-color\">YOUR VISION<\/mark><br>INTO REALITY<\/h1>\n\n\n\n<p class=\"has-text-color wp-block-paragraph\" style=\"color:#d1d5db;margin-bottom:40px;font-size:18px;font-weight:300\">From residential towers to critical infrastructure \u2014 we deliver construction excellence across Europe with precision, safety, and innovation.<\/p>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-container-core-buttons-is-layout-989b6caf wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link has-text-color has-background wp-element-button\" href=\"#\" style=\"border-radius:0px;color:#000000;background-color:#f59e0b;padding-top:16px;padding-right:32px;padding-bottom:16px;padding-left:32px;font-weight:700;letter-spacing:2px;text-transform:uppercase\">View Our Projects \u2192<\/a><\/div>\n\n\n\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link has-text-color has-background has-border-color wp-element-button\" href=\"#\" style=\"border-color:rgba(255,255,255,0.4);border-width:2px;border-radius:0px;color:#ffffff;background-color:transparent;padding-top:14px;padding-right:32px;padding-bottom:14px;padding-left:32px;font-weight:700;letter-spacing:2px;text-transform:uppercase\">Request a Quote<\/a><\/div>\n<\/div>\n<\/div>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-group alignfull has-background is-layout-constrained wp-block-group-is-layout-constrained\" style=\"background-color:#0a0f1a;padding-top:0;padding-bottom:0\">\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-794e3cfa wp-block-columns-is-layout-flex\" style=\"border-top-color:rgba(255,255,255,0.08);border-top-width:1px;border-bottom-color:rgba(255,255,255,0.08);border-bottom-width:1px\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"border-right-color:rgba(255,255,255,0.08);border-right-width:1px;padding-top:28px;padding-bottom:28px\">\n<h3 class=\"wp-block-heading has-text-align-center has-text-color\" style=\"color:#f59e0b;margin-top:0;margin-bottom:6px;font-size:48px;font-weight:700\">25+<\/h3>\n\n\n\n<p class=\"has-text-align-center has-text-color wp-block-paragraph\" style=\"color:#6b7280;margin-top:0;font-size:11px;letter-spacing:3px;text-transform:uppercase\">Years Experience<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"border-right-color:rgba(255,255,255,0.08);border-right-width:1px;padding-top:28px;padding-bottom:28px\">\n<h3 class=\"wp-block-heading has-text-align-center has-text-color\" style=\"color:#f59e0b;margin-top:0;margin-bottom:6px;font-size:48px;font-weight:700\">400+<\/h3>\n\n\n\n<p class=\"has-text-align-center has-text-color wp-block-paragraph\" style=\"color:#6b7280;margin-top:0;font-size:11px;letter-spacing:3px;text-transform:uppercase\">Projects Completed<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"border-right-color:rgba(255,255,255,0.08);border-right-width:1px;padding-top:28px;padding-bottom:28px\">\n<h3 class=\"wp-block-heading has-text-align-center has-text-color\" style=\"color:#f59e0b;margin-top:0;margin-bottom:6px;font-size:48px;font-weight:700\">12<\/h3>\n\n\n\n<p class=\"has-text-align-center has-text-color wp-block-paragraph\" style=\"color:#6b7280;margin-top:0;font-size:11px;letter-spacing:3px;text-transform:uppercase\">Countries<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"padding-top:28px;padding-bottom:28px\">\n<h3 class=\"wp-block-heading has-text-align-center has-text-color\" style=\"color:#f59e0b;margin-top:0;margin-bottom:6px;font-size:48px;font-weight:700\">800+<\/h3>\n\n\n\n<p class=\"has-text-align-center has-text-color wp-block-paragraph\" style=\"color:#6b7280;margin-top:0;font-size:11px;letter-spacing:3px;text-transform:uppercase\">Professionals<\/p>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-group alignfull has-background is-layout-constrained wp-block-group-is-layout-constrained\" style=\"background-color:#fafaf9;padding-top:96px;padding-bottom:96px\">\n<div class=\"wp-block-columns are-vertically-aligned-center is-layout-flex wp-container-core-columns-is-layout-7fdf67f5 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-video\"><video height=\"1080\" style=\"aspect-ratio: 1920 \/ 1080;\" width=\"1920\" controls src=\"https:\/\/citybrix.ai\/wp-content\/uploads\/2026\/08\/download-3.mp4\"><\/video><\/figure>\n\n\n\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-794e3cfa wp-block-group-is-layout-flex\">\n<div class=\"wp-block-group has-background is-layout-constrained wp-container-core-group-is-layout-3e2b7dc1 wp-block-group-is-layout-constrained\" style=\"background-color:#f59e0b;padding-top:24px;padding-right:32px;padding-bottom:24px;padding-left:32px\">\n<h3 class=\"wp-block-heading has-text-color\" style=\"color:#000000;margin-top:0;margin-bottom:4px;font-size:48px;font-weight:700\">25+<\/h3>\n\n\n\n<p class=\"has-text-color wp-block-paragraph\" style=\"color:#000000;margin-top:0;font-size:11px;font-weight:700;letter-spacing:2px;text-transform:uppercase\">Years of Excellence<\/p>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p class=\"has-text-color wp-block-paragraph\" style=\"color:#f59e0b;margin-top:0;margin-bottom:16px;font-size:12px;font-weight:700;letter-spacing:4px;text-transform:uppercase\">About Forma<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-text-color\" style=\"color:#111827;margin-top:0;margin-bottom:24px;padding-top:0;padding-bottom:0;font-size:clamp(28px,3.5vw,44px);font-weight:700;text-transform:uppercase\">TRUSTED CONSTRUCTION PARTNER SINCE 1998<\/h2>\n\n\n\n<p class=\"has-text-color wp-block-paragraph\" style=\"color:#4b5563;margin-bottom:16px\">Forma Construction Group is one of Poland\u2019s leading general contractors, with a proven track record in residential, commercial, and infrastructure projects across Europe.<\/p>\n\n\n\n<p class=\"has-text-color wp-block-paragraph\" style=\"color:#4b5563;margin-bottom:32px\">Our integrated approach combines decades of expertise with modern construction methods and an unwavering commitment to delivering every project on time, within budget, and to the highest safety standards.<\/p>\n\n\n\n<ul style=\"color:#374151;margin-bottom:40px\" class=\"wp-block-list has-text-color\">\n<li>ISO 9001:2015 Certified Quality Management System<\/li>\n\n\n\n<li>Award-winning sustainable construction practices<\/li>\n\n\n\n<li>Zero major safety incidents over the past 5 years<\/li>\n\n\n\n<li>\u20ac285M annual revenue \u2014 consistently growing year-on-year<\/li>\n<\/ul>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link has-text-color has-background wp-element-button\" href=\"#\" style=\"border-radius:0px;color:#ffffff;background-color:#111827;font-weight:700;letter-spacing:2px;text-transform:uppercase\">Learn More About Us \u2192<\/a><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-group alignfull has-background is-layout-constrained wp-block-group-is-layout-constrained\" style=\"background-color:#f59e0b;padding-top:16px;padding-bottom:16px\">\n<p class=\"has-text-align-center has-text-color wp-block-paragraph\" style=\"color:#000000;margin-top:0;margin-bottom:0;font-size:12px;font-weight:700;letter-spacing:5px;text-transform:uppercase\">Excellence &nbsp;\u00b7&nbsp; Safety First &nbsp;\u00b7&nbsp; Innovation &nbsp;\u00b7&nbsp; Quality Built &nbsp;\u00b7&nbsp; On Time Delivery &nbsp;\u00b7&nbsp; Trusted Partner &nbsp;\u00b7&nbsp; Excellence &nbsp;\u00b7&nbsp; Safety First &nbsp;\u00b7&nbsp; Innovation<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-group alignfull has-background is-layout-constrained wp-block-group-is-layout-constrained\" style=\"background-color:#ffffff;padding-top:96px;padding-bottom:96px\">\n<div class=\"wp-block-group is-layout-flow wp-block-group-is-layout-flow\" style=\"margin-bottom:64px\">\n<p class=\"has-text-align-center has-text-color wp-block-paragraph\" style=\"color:#f59e0b;margin-bottom:16px;font-size:12px;font-weight:700;letter-spacing:4px;text-transform:uppercase\">What We Do<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-center has-text-color\" style=\"color:#111827;margin-top:0;padding-top:0;padding-bottom:0;font-weight:700;text-transform:uppercase\">OUR SERVICES<\/h2>\n<\/div>\n\n\n\n<div class=\"wp-block-columns alignfull is-layout-flex wp-container-core-columns-is-layout-14f3f09f wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<!-- INNOBRIX 3D SPEELTOESTEL -->\n<div class=\"ibx-playground-3d\">\n    <div id=\"ibx-playground-canvas\"><\/div>\n<\/div>\n\n<style>\n.ibx-playground-3d {\n    width: 100%;\n    height: 600px;\n    position: relative;\n    overflow: hidden;\n    background: #f3f6f8;\n    border-radius: 16px;\n    cursor: grab;\n}\n\n#ibx-playground-canvas {\n    position: absolute;\n    inset: 0;\n}\n\n#ibx-playground-canvas canvas {\n    display: block;\n    width: 100%;\n    height: 100%;\n}\n\n@media (max-width: 768px) {\n    .ibx-playground-3d {\n        height: 450px;\n    }\n}\n<\/style>\n\n<script type=\"module\">\n\nimport * as THREE from 'https:\/\/cdn.jsdelivr.net\/npm\/three@0.179.1\/build\/three.module.js';\n\nconst container = document.getElementById('ibx-playground-canvas');\n\nif (container) {\n\n    \/* =========================\n       SCENE\n    ========================= *\/\n\n    const scene = new THREE.Scene();\n\n    const camera = new THREE.PerspectiveCamera(\n        35,\n        container.clientWidth \/ container.clientHeight,\n        0.1,\n        100\n    );\n\n    camera.position.set(7, 4.5, 9);\n    camera.lookAt(0, 1.5, 0);\n\n\n    \/* =========================\n       RENDERER\n    ========================= *\/\n\n    const renderer = new THREE.WebGLRenderer({\n        antialias: true,\n        alpha: true\n    });\n\n    renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));\n    renderer.setSize(\n        container.clientWidth,\n        container.clientHeight\n    );\n\n    renderer.shadowMap.enabled = true;\n    renderer.shadowMap.type = THREE.PCFSoftShadowMap;\n\n    renderer.outputColorSpace = THREE.SRGBColorSpace;\n\n    container.appendChild(renderer.domElement);\n\n\n    \/* =========================\n       VERLICHTING\n    ========================= *\/\n\n    const ambientLight = new THREE.HemisphereLight(\n        0xffffff,\n        0xa3ad9a,\n        2.5\n    );\n\n    scene.add(ambientLight);\n\n\n    const sun = new THREE.DirectionalLight(\n        0xffffff,\n        3\n    );\n\n    sun.position.set(5, 10, 7);\n    sun.castShadow = true;\n\n    sun.shadow.mapSize.set(2048, 2048);\n\n    scene.add(sun);\n\n\n    \/* =========================\n       MATERIALEN\n    ========================= *\/\n\n    const wood = new THREE.MeshStandardMaterial({\n        color: 0xc99458,\n        roughness: 0.75\n    });\n\n    const darkWood = new THREE.MeshStandardMaterial({\n        color: 0x9f6b3f,\n        roughness: 0.8\n    });\n\n    const blue = new THREE.MeshStandardMaterial({\n        color: 0x354b6a,\n        roughness: 0.5\n    });\n\n    const lightBlue = new THREE.MeshStandardMaterial({\n        color: 0x6584a3,\n        roughness: 0.5\n    });\n\n    const orange = new THREE.MeshStandardMaterial({\n        color: 0xe8963e,\n        roughness: 0.55\n    });\n\n    const ropeMaterial = new THREE.MeshStandardMaterial({\n        color: 0x4b4540,\n        roughness: 1\n    });\n\n    const metalMaterial = new THREE.MeshStandardMaterial({\n        color: 0xb5bcc2,\n        metalness: 0.6,\n        roughness: 0.3\n    });\n\n\n    \/* =========================\n       HOOFDGROEP\n    ========================= *\/\n\n    const playground = new THREE.Group();\n\n    playground.rotation.y = -0.4;\n\n    scene.add(playground);\n\n\n    \/* =========================\n       HELPERS\n    ========================= *\/\n\n    function box(\n        width,\n        height,\n        depth,\n        material,\n        x,\n        y,\n        z\n    ) {\n\n        const mesh = new THREE.Mesh(\n            new THREE.BoxGeometry(\n                width,\n                height,\n                depth\n            ),\n            material\n        );\n\n        mesh.position.set(x, y, z);\n\n        mesh.castShadow = true;\n        mesh.receiveShadow = true;\n\n        playground.add(mesh);\n\n        return mesh;\n    }\n\n\n    function pole(\n        radius,\n        height,\n        material,\n        x,\n        y,\n        z\n    ) {\n\n        const mesh = new THREE.Mesh(\n            new THREE.CylinderGeometry(\n                radius,\n                radius,\n                height,\n                20\n            ),\n            material\n        );\n\n        mesh.position.set(x, y, z);\n\n        mesh.castShadow = true;\n        mesh.receiveShadow = true;\n\n        playground.add(mesh);\n\n        return mesh;\n    }\n\n\n    \/* =========================\n       SPEELTOREN\n    ========================= *\/\n\n    const towerX = -0.7;\n    const towerZ = 0;\n\n    const postPositions = [\n        [-1.65, -0.9],\n        [0.25, -0.9],\n        [-1.65, 0.9],\n        [0.25, 0.9]\n    ];\n\n    postPositions.forEach(position => {\n\n        pole(\n            0.10,\n            3.5,\n            wood,\n            position[0],\n            1.75,\n            position[1]\n        );\n\n    });\n\n\n    \/* PLATFORM *\/\n\n    box(\n        2.2,\n        0.18,\n        2.1,\n        darkWood,\n        towerX,\n        1.45,\n        towerZ\n    );\n\n\n    \/* BALUSTRADES *\/\n\n    box(\n        2.1,\n        0.12,\n        0.10,\n        blue,\n        towerX,\n        2.15,\n        -0.88\n    );\n\n    box(\n        2.1,\n        0.12,\n        0.10,\n        blue,\n        towerX,\n        2.15,\n        0.88\n    );\n\n\n    \/* Verticale spijlen *\/\n\n    for (let i = 0; i < 5; i++) {\n\n        const x = -1.55 + i * 0.43;\n\n        pole(\n            0.035,\n            0.65,\n            blue,\n            x,\n            1.85,\n            -0.88\n        );\n\n    }\n\n\n    \/* =========================\n       DAK\n    ========================= *\/\n\n    const roof = new THREE.Mesh(\n        new THREE.ConeGeometry(\n            1.65,\n            1.1,\n            4\n        ),\n        orange\n    );\n\n    roof.position.set(\n        towerX,\n        3.65,\n        towerZ\n    );\n\n    roof.rotation.y = Math.PI \/ 4;\n\n    roof.castShadow = true;\n\n    playground.add(roof);\n\n\n    \/* =========================\n       GLIJBAAN\n    ========================= *\/\n\n    const slideGroup = new THREE.Group();\n\n    playground.add(slideGroup);\n\n    slideGroup.position.set(\n        0.25,\n        1.4,\n        0\n    );\n\n    slideGroup.rotation.z = -0.43;\n\n\n    const slide = new THREE.Mesh(\n        new THREE.BoxGeometry(\n            3.5,\n            0.13,\n            0.9\n        ),\n        lightBlue\n    );\n\n    slide.position.x = 1.55;\n    slide.castShadow = true;\n\n    slideGroup.add(slide);\n\n\n    \/* Glijbaan randen *\/\n\n    const slideSide1 = new THREE.Mesh(\n        new THREE.BoxGeometry(\n            3.5,\n            0.30,\n            0.08\n        ),\n        blue\n    );\n\n    slideSide1.position.set(\n        1.55,\n        0.12,\n        -0.43\n    );\n\n    slideGroup.add(slideSide1);\n\n\n    const slideSide2 = slideSide1.clone();\n\n    slideSide2.position.z = 0.43;\n\n    slideGroup.add(slideSide2);\n\n\n    \/* =========================\n       KLIMWAND\n    ========================= *\/\n\n    const climbingWall = box(\n        1.5,\n        2.1,\n        0.15,\n        orange,\n        -1.9,\n        0.85,\n        0\n    );\n\n    climbingWall.rotation.z = -0.18;\n\n\n    \/* KLIMGREPEN *\/\n\n    const holdColors = [\n        0x354b6a,\n        0xffffff,\n        0x6584a3\n    ];\n\n    for (let i = 0; i < 9; i++) {\n\n        const material = new THREE.MeshStandardMaterial({\n            color: holdColors[i % holdColors.length],\n            roughness: 0.5\n        });\n\n        const hold = new THREE.Mesh(\n            new THREE.SphereGeometry(\n                0.09,\n                16,\n                12\n            ),\n            material\n        );\n\n        const column = i % 3;\n        const row = Math.floor(i \/ 3);\n\n        hold.position.set(\n            -2.25 + column * 0.38,\n            0.35 + row * 0.52,\n            0.12\n        );\n\n        hold.scale.set(\n            1,\n            0.65,\n            0.6\n        );\n\n        playground.add(hold);\n\n    }\n\n\n    \/* =========================\n       SCHOMMEL\n    ========================= *\/\n\n    const swingX = -0.2;\n\n    \/* Staanders *\/\n\n    const swingLeft = pole(\n        0.09,\n        3.2,\n        wood,\n        swingX,\n        1.55,\n        -2.45\n    );\n\n    swingLeft.rotation.z = -0.15;\n\n\n    const swingRight = pole(\n        0.09,\n        3.2,\n        wood,\n        2.0,\n        1.55,\n        -2.45\n    );\n\n    swingRight.rotation.z = 0.15;\n\n\n    \/* Bovenbalk *\/\n\n    const topBar = pole(\n        0.10,\n        2.5,\n        darkWood,\n        0.9,\n        3.0,\n        -2.45\n    );\n\n    topBar.rotation.z = Math.PI \/ 2;\n\n\n    \/* Touwen *\/\n\n    pole(\n        0.025,\n        1.35,\n        ropeMaterial,\n        0.55,\n        2.2,\n        -2.45\n    );\n\n    pole(\n        0.025,\n        1.35,\n        ropeMaterial,\n        1.25,\n        2.2,\n        -2.45\n    );\n\n\n    \/* Zitje *\/\n\n    box(\n        0.9,\n        0.09,\n        0.45,\n        blue,\n        0.9,\n        1.5,\n        -2.45\n    );\n\n\n    \/* =========================\n       TRAP\n    ========================= *\/\n\n    pole(\n        0.055,\n        1.7,\n        wood,\n        -0.15,\n        0.75,\n        1.35\n    );\n\n    pole(\n        0.055,\n        1.7,\n        wood,\n        -1.25,\n        0.75,\n        1.35\n    );\n\n\n    for (let i = 0; i < 5; i++) {\n\n        const step = pole(\n            0.045,\n            1.05,\n            metalMaterial,\n            -0.70,\n            0.30 + i * 0.28,\n            1.35\n        );\n\n        step.rotation.z = Math.PI \/ 2;\n\n    }\n\n\n    \/* =========================\n       ONDERGROND \/ SCHADUW\n    ========================= *\/\n\n    const ground = new THREE.Mesh(\n        new THREE.CircleGeometry(\n            6,\n            64\n        ),\n        new THREE.ShadowMaterial({\n            color: 0x000000,\n            opacity: 0.12\n        })\n    );\n\n    ground.rotation.x = -Math.PI \/ 2;\n    ground.position.y = -0.02;\n\n    ground.receiveShadow = true;\n\n    scene.add(ground);\n\n\n    \/* =========================\n       MUIS INTERACTIE\n    ========================= *\/\n\n    let targetRotationX = 0;\n    let targetRotationY = -0.4;\n\n    let currentRotationX = 0;\n    let currentRotationY = -0.4;\n\n    let mouseInside = false;\n\n\n    container.addEventListener(\n        'mouseenter',\n        () => {\n\n            mouseInside = true;\n\n        }\n    );\n\n\n    container.addEventListener(\n        'mouseleave',\n        () => {\n\n            mouseInside = false;\n\n            targetRotationX = 0;\n            targetRotationY = -0.4;\n\n        }\n    );\n\n\n    container.addEventListener(\n        'mousemove',\n        event => {\n\n            const rect =\n                container.getBoundingClientRect();\n\n            const mouseX =\n                (\n                    event.clientX -\n                    rect.left\n                ) \/ rect.width;\n\n            const mouseY =\n                (\n                    event.clientY -\n                    rect.top\n                ) \/ rect.height;\n\n\n            \/*\n             * horizontaal bewegen =\n             * model links\/rechts draaien\n             *\/\n\n            targetRotationY =\n                -0.4 +\n                (mouseX - 0.5) * 1.15;\n\n\n            \/*\n             * verticaal bewegen =\n             * heel subtiel kantelen\n             *\/\n\n            targetRotationX =\n                (mouseY - 0.5) * 0.20;\n\n        }\n    );\n\n\n    \/* =========================\n       ANIMATIE\n    ========================= *\/\n\n    let time = 0;\n\n    function animate() {\n\n        requestAnimationFrame(animate);\n\n        time += 0.01;\n\n\n        \/*\n         * Op apparaten zonder hover:\n         * langzaam automatisch bewegen\n         *\/\n\n        if (\n            window.matchMedia(\n                '(hover: none)'\n            ).matches\n        ) {\n\n            targetRotationY =\n                -0.4 +\n                Math.sin(time * 0.5) * 0.25;\n\n        }\n\n\n        \/*\n         * Smooth overgang\n         *\/\n\n        currentRotationY +=\n            (\n                targetRotationY -\n                currentRotationY\n            ) * 0.045;\n\n        currentRotationX +=\n            (\n                targetRotationX -\n                currentRotationX\n            ) * 0.045;\n\n\n        playground.rotation.y =\n            currentRotationY;\n\n        playground.rotation.x =\n            currentRotationX;\n\n\n        \/*\n         * subtiele zwevende beweging\n         *\/\n\n        playground.position.y =\n            Math.sin(time) * 0.025;\n\n\n        renderer.render(\n            scene,\n            camera\n        );\n\n    }\n\n    animate();\n\n\n    \/* =========================\n       RESPONSIVE\n    ========================= *\/\n\n    function resize() {\n\n        const width =\n            container.clientWidth;\n\n        const height =\n            container.clientHeight;\n\n        camera.aspect =\n            width \/ height;\n\n        camera.updateProjectionMatrix();\n\n        renderer.setSize(\n            width,\n            height,\n            false\n        );\n\n    }\n\n    window.addEventListener(\n        'resize',\n        resize\n    );\n\n}\n\n<\/script>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"ibx-padel-3d\">\n    <div id=\"ibx-padel-canvas\"><\/div>\n<\/div>\n\n<style>\n.ibx-padel-3d {\n    width: 100%;\n    height: 600px;\n    position: relative;\n    overflow: hidden;\n    background: #f3f6f8;\n    border-radius: 16px;\n}\n\n#ibx-padel-canvas {\n    position: absolute;\n    inset: 0;\n}\n\n#ibx-padel-canvas canvas {\n    display: block;\n    width: 100%;\n    height: 100%;\n}\n\n@media (max-width: 768px) {\n    .ibx-padel-3d {\n        height: 450px;\n    }\n}\n<\/style>\n\n<script type=\"module\">\nimport * as THREE from 'https:\/\/cdn.jsdelivr.net\/npm\/three@0.179.1\/build\/three.module.js';\n\nconst container = document.getElementById('ibx-padel-canvas');\n\nif (container) {\n\n    const scene = new THREE.Scene();\n\n    const camera = new THREE.PerspectiveCamera(\n        32,\n        container.clientWidth \/ container.clientHeight,\n        0.1,\n        100\n    );\n\n    camera.position.set(11, 8, 13);\n    camera.lookAt(0, 1, 0);\n\n    const renderer = new THREE.WebGLRenderer({\n        antialias: true,\n        alpha: true\n    });\n\n    renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));\n    renderer.setSize(container.clientWidth, container.clientHeight);\n    renderer.shadowMap.enabled = true;\n    renderer.shadowMap.type = THREE.PCFSoftShadowMap;\n    renderer.outputColorSpace = THREE.SRGBColorSpace;\n\n    container.appendChild(renderer.domElement);\n\n    \/* VERLICHTING *\/\n\n    scene.add(\n        new THREE.HemisphereLight(\n            0xffffff,\n            0x95a095,\n            2.5\n        )\n    );\n\n    const sun = new THREE.DirectionalLight(\n        0xffffff,\n        3\n    );\n\n    sun.position.set(7, 12, 8);\n    sun.castShadow = true;\n    sun.shadow.mapSize.set(2048, 2048);\n\n    scene.add(sun);\n\n\n    \/* MATERIALEN *\/\n\n    const courtMaterial = new THREE.MeshStandardMaterial({\n        color: 0x315e78,\n        roughness: 0.8\n    });\n\n    const lineMaterial = new THREE.MeshStandardMaterial({\n        color: 0xffffff,\n        roughness: 0.7\n    });\n\n    const frameMaterial = new THREE.MeshStandardMaterial({\n        color: 0x24282c,\n        metalness: 0.55,\n        roughness: 0.35\n    });\n\n    const netMaterial = new THREE.MeshStandardMaterial({\n        color: 0x1c1c1c,\n        roughness: 0.9,\n        transparent: true,\n        opacity: 0.8,\n        side: THREE.DoubleSide\n    });\n\n    const glassMaterial = new THREE.MeshPhysicalMaterial({\n        color: 0xb8dce8,\n        transparent: true,\n        opacity: 0.22,\n        roughness: 0.1,\n        transmission: 0.6,\n        thickness: 0.1,\n        side: THREE.DoubleSide\n    });\n\n\n    \/* GROEP *\/\n\n    const padel = new THREE.Group();\n\n    padel.rotation.y = -0.35;\n\n    scene.add(padel);\n\n\n    \/* HELPERS *\/\n\n    function box(\n        width,\n        height,\n        depth,\n        material,\n        x,\n        y,\n        z\n    ) {\n\n        const mesh = new THREE.Mesh(\n            new THREE.BoxGeometry(\n                width,\n                height,\n                depth\n            ),\n            material\n        );\n\n        mesh.position.set(x, y, z);\n        mesh.castShadow = true;\n        mesh.receiveShadow = true;\n\n        padel.add(mesh);\n\n        return mesh;\n    }\n\n\n    \/* =========================\n       BAAN\n    ========================= *\/\n\n    box(\n        10,\n        0.16,\n        5,\n        courtMaterial,\n        0,\n        0,\n        0\n    );\n\n\n    \/* BUITENRAND *\/\n\n    box(\n        10.2,\n        0.05,\n        0.06,\n        lineMaterial,\n        0,\n        0.1,\n        -2.46\n    );\n\n    box(\n        10.2,\n        0.05,\n        0.06,\n        lineMaterial,\n        0,\n        0.1,\n        2.46\n    );\n\n    box(\n        0.06,\n        0.05,\n        5,\n        lineMaterial,\n        -4.96,\n        0.1,\n        0\n    );\n\n    box(\n        0.06,\n        0.05,\n        5,\n        lineMaterial,\n        4.96,\n        0.1,\n        0\n    );\n\n\n    \/* MIDDENLIJNEN *\/\n\n    box(\n        0.06,\n        0.04,\n        5,\n        lineMaterial,\n        0,\n        0.1,\n        0\n    );\n\n    box(\n        10,\n        0.04,\n        0.06,\n        lineMaterial,\n        0,\n        0.1,\n        0\n    );\n\n\n    \/* SERVICELIJNEN *\/\n\n    box(\n        0.06,\n        0.04,\n        5,\n        lineMaterial,\n        -3.25,\n        0.1,\n        0\n    );\n\n    box(\n        0.06,\n        0.04,\n        5,\n        lineMaterial,\n        3.25,\n        0.1,\n        0\n    );\n\n\n    \/* =========================\n       NET\n    ========================= *\/\n\n    box(\n        0.05,\n        0.95,\n        4.8,\n        netMaterial,\n        0,\n        0.55,\n        0\n    );\n\n    box(\n        0.12,\n        1.1,\n        0.12,\n        frameMaterial,\n        0,\n        0.55,\n        -2.45\n    );\n\n    box(\n        0.12,\n        1.1,\n        0.12,\n        frameMaterial,\n        0,\n        0.55,\n        2.45\n    );\n\n\n    \/* =========================\n       GLASWANDEN\n    ========================= *\/\n\n    \/* ACHTERKANT LINKS *\/\n\n    box(\n        0.08,\n        3,\n        4.8,\n        glassMaterial,\n        -4.95,\n        1.5,\n        0\n    );\n\n    \/* ACHTERKANT RECHTS *\/\n\n    box(\n        0.08,\n        3,\n        4.8,\n        glassMaterial,\n        4.95,\n        1.5,\n        0\n    );\n\n\n    \/* ZIJWANDEN *\/\n\n    box(\n        2.4,\n        3,\n        0.08,\n        glassMaterial,\n        -3.75,\n        1.5,\n        -2.45\n    );\n\n    box(\n        2.4,\n        3,\n        0.08,\n        glassMaterial,\n        -3.75,\n        1.5,\n        2.45\n    );\n\n    box(\n        2.4,\n        3,\n        0.08,\n        glassMaterial,\n        3.75,\n        1.5,\n        -2.45\n    );\n\n    box(\n        2.4,\n        3,\n        0.08,\n        glassMaterial,\n        3.75,\n        1.5,\n        2.45\n    );\n\n\n    \/* =========================\n       STALEN FRAME\n    ========================= *\/\n\n    function post(x, z, height = 3.2) {\n\n        box(\n            0.12,\n            height,\n            0.12,\n            frameMaterial,\n            x,\n            height \/ 2,\n            z\n        );\n\n    }\n\n    const xPositions = [\n        -5,\n        -2.5,\n        0,\n        2.5,\n        5\n    ];\n\n    xPositions.forEach(x => {\n\n        post(x, -2.5);\n        post(x, 2.5);\n\n    });\n\n\n    \/* ACHTERHOEKEN *\/\n\n    post(-5, 0);\n    post(5, 0);\n\n\n    \/* BOVENREGELS *\/\n\n    box(\n        10,\n        0.10,\n        0.10,\n        frameMaterial,\n        0,\n        3.15,\n        -2.5\n    );\n\n    box(\n        10,\n        0.10,\n        0.10,\n        frameMaterial,\n        0,\n        3.15,\n        2.5\n    );\n\n    box(\n        0.10,\n        0.10,\n        5,\n        frameMaterial,\n        -5,\n        3.15,\n        0\n    );\n\n    box(\n        0.10,\n        0.10,\n        5,\n        frameMaterial,\n        5,\n        3.15,\n        0\n    );\n\n\n    \/* =========================\n       GAASWERK\n    ========================= *\/\n\n    function wireVertical(x, z1, z2) {\n\n        box(\n            0.025,\n            2.8,\n            0.025,\n            frameMaterial,\n            x,\n            1.45,\n            (z1 + z2) \/ 2\n        );\n\n    }\n\n\n    \/* subtiele rasterlijnen zijwanden *\/\n\n    for (let x = -2; x <= 2; x += 0.45) {\n\n        box(\n            0.025,\n            2.8,\n            0.025,\n            frameMaterial,\n            x,\n            1.45,\n            -2.49\n        );\n\n        box(\n            0.025,\n            2.8,\n            0.025,\n            frameMaterial,\n            x,\n            1.45,\n            2.49\n        );\n\n    }\n\n\n    \/* horizontale rasterlijnen *\/\n\n    for (let y = 0.6; y < 3; y += 0.45) {\n\n        box(\n            4,\n            0.025,\n            0.025,\n            frameMaterial,\n            0,\n            y,\n            -2.49\n        );\n\n        box(\n            4,\n            0.025,\n            0.025,\n            frameMaterial,\n            0,\n            y,\n            2.49\n        );\n\n    }\n\n\n    \/* =========================\n       VERLICHTINGSMASTEN\n    ========================= *\/\n\n    function lightPole(x, z) {\n\n        box(\n            0.10,\n            4.4,\n            0.10,\n            frameMaterial,\n            x,\n            2.2,\n            z\n        );\n\n        const lampMaterial =\n            new THREE.MeshStandardMaterial({\n                color: 0xffffff,\n                emissive: 0xffffff,\n                emissiveIntensity: 0.25\n            });\n\n        const lamp = box(\n            0.7,\n            0.16,\n            0.3,\n            lampMaterial,\n            x,\n            4.4,\n            z\n        );\n\n        lamp.rotation.x = 0.15;\n\n    }\n\n    lightPole(-3.3, -2.9);\n    lightPole(3.3, -2.9);\n    lightPole(-3.3, 2.9);\n    lightPole(3.3, 2.9);\n\n\n    \/* =========================\n       ONDERGROND \/ SCHADUW\n    ========================= *\/\n\n    const ground = new THREE.Mesh(\n        new THREE.PlaneGeometry(\n            18,\n            12\n        ),\n        new THREE.ShadowMaterial({\n            color: 0x000000,\n            opacity: 0.10\n        })\n    );\n\n    ground.rotation.x = -Math.PI \/ 2;\n    ground.position.y = -0.1;\n    ground.receiveShadow = true;\n\n    scene.add(ground);\n\n\n    \/* =========================\n       MUISBEWEGING\n    ========================= *\/\n\n    let targetRotationY = -0.35;\n    let targetRotationX = 0;\n\n    let currentRotationY = -0.35;\n    let currentRotationX = 0;\n\n\n    container.addEventListener(\n        'mousemove',\n        event => {\n\n            const rect =\n                container.getBoundingClientRect();\n\n            const x =\n                (\n                    event.clientX -\n                    rect.left\n                ) \/ rect.width;\n\n            const y =\n                (\n                    event.clientY -\n                    rect.top\n                ) \/ rect.height;\n\n\n            targetRotationY =\n                -0.35 +\n                (x - 0.5) * 1.0;\n\n            targetRotationX =\n                (y - 0.5) * 0.12;\n\n        }\n    );\n\n\n    container.addEventListener(\n        'mouseleave',\n        () => {\n\n            targetRotationY = -0.35;\n            targetRotationX = 0;\n\n        }\n    );\n\n\n    \/* =========================\n       ANIMATIE\n    ========================= *\/\n\n    let time = 0;\n\n    const reduceMotion =\n        window.matchMedia(\n            '(prefers-reduced-motion: reduce)'\n        ).matches;\n\n\n    function animate() {\n\n        requestAnimationFrame(animate);\n\n        time += 0.01;\n\n\n        \/* MOBILE *\/\n\n        if (\n            window.matchMedia(\n                '(hover: none)'\n            ).matches &&\n            !reduceMotion\n        ) {\n\n            targetRotationY =\n                -0.35 +\n                Math.sin(time * 0.35) * 0.18;\n\n        }\n\n\n        currentRotationY +=\n            (\n                targetRotationY -\n                currentRotationY\n            ) * 0.04;\n\n        currentRotationX +=\n            (\n                targetRotationX -\n                currentRotationX\n            ) * 0.04;\n\n\n        padel.rotation.y =\n            currentRotationY;\n\n        padel.rotation.x =\n            currentRotationX;\n\n\n        renderer.render(\n            scene,\n            camera\n        );\n\n    }\n\n    animate();\n\n\n    \/* =========================\n       RESPONSIVE\n    ========================= *\/\n\n    function resize() {\n\n        const width =\n            container.clientWidth;\n\n        const height =\n            container.clientHeight;\n\n        camera.aspect =\n            width \/ height;\n\n        camera.updateProjectionMatrix();\n\n        renderer.setSize(\n            width,\n            height,\n            false\n        );\n\n    }\n\n    window.addEventListener(\n        'resize',\n        resize\n    );\n\n}\n\n<\/script>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"ibx-building-3d\">\n    <div id=\"ibx-building-canvas\"><\/div>\n<\/div>\n\n<style>\n.ibx-building-3d {\n    width: 100%;\n    height: 600px;\n    position: relative;\n    overflow: hidden;\n    background: #f3f6f8;\n    border-radius: 16px;\n}\n\n#ibx-building-canvas {\n    position: absolute;\n    inset: 0;\n}\n\n#ibx-building-canvas canvas {\n    display: block;\n    width: 100%;\n    height: 100%;\n}\n\n@media (max-width: 768px) {\n    .ibx-building-3d {\n        height: 450px;\n    }\n}\n<\/style>\n\n<script type=\"module\">\nimport * as THREE from 'https:\/\/cdn.jsdelivr.net\/npm\/three@0.179.1\/build\/three.module.js';\n\nconst container = document.getElementById('ibx-building-canvas');\n\nif (container) {\n\n    \/* =========================\n       SCENE\n    ========================= *\/\n\n    const scene = new THREE.Scene();\n\n    const camera = new THREE.PerspectiveCamera(\n        34,\n        container.clientWidth \/ container.clientHeight,\n        0.1,\n        100\n    );\n\n    camera.position.set(9, 6.5, 11);\n    camera.lookAt(0, 2, 0);\n\n\n    \/* =========================\n       RENDERER\n    ========================= *\/\n\n    const renderer = new THREE.WebGLRenderer({\n        antialias: true,\n        alpha: true\n    });\n\n    renderer.setPixelRatio(\n        Math.min(window.devicePixelRatio, 2)\n    );\n\n    renderer.setSize(\n        container.clientWidth,\n        container.clientHeight\n    );\n\n    renderer.shadowMap.enabled = true;\n    renderer.shadowMap.type = THREE.PCFSoftShadowMap;\n    renderer.outputColorSpace = THREE.SRGBColorSpace;\n\n    container.appendChild(renderer.domElement);\n\n\n    \/* =========================\n       VERLICHTING\n    ========================= *\/\n\n    const hemisphereLight =\n        new THREE.HemisphereLight(\n            0xffffff,\n            0x9aa2a8,\n            2.4\n        );\n\n    scene.add(hemisphereLight);\n\n\n    const sun =\n        new THREE.DirectionalLight(\n            0xffffff,\n            3.2\n        );\n\n    sun.position.set(7, 12, 9);\n    sun.castShadow = true;\n\n    sun.shadow.mapSize.set(2048, 2048);\n\n    scene.add(sun);\n\n\n    \/* =========================\n       MATERIALEN\n    ========================= *\/\n\n    const brickMaterial =\n        new THREE.MeshStandardMaterial({\n            color: 0xb77b5d,\n            roughness: 0.85\n        });\n\n    const lightBrickMaterial =\n        new THREE.MeshStandardMaterial({\n            color: 0xd2c8ba,\n            roughness: 0.9\n        });\n\n    const concreteMaterial =\n        new THREE.MeshStandardMaterial({\n            color: 0xb8bcc0,\n            roughness: 0.75\n        });\n\n    const darkMaterial =\n        new THREE.MeshStandardMaterial({\n            color: 0x354b6a,\n            roughness: 0.55\n        });\n\n    const roofMaterial =\n        new THREE.MeshStandardMaterial({\n            color: 0x34383d,\n            roughness: 0.8\n        });\n\n    const glassMaterial =\n        new THREE.MeshPhysicalMaterial({\n            color: 0x91b8ca,\n            transparent: true,\n            opacity: 0.42,\n            roughness: 0.15,\n            metalness: 0.05\n        });\n\n    const whiteMaterial =\n        new THREE.MeshStandardMaterial({\n            color: 0xf2f2ef,\n            roughness: 0.7\n        });\n\n    const greenMaterial =\n        new THREE.MeshStandardMaterial({\n            color: 0x68875b,\n            roughness: 0.95\n        });\n\n\n    \/* =========================\n       HOOFDGROEP\n    ========================= *\/\n\n    const building =\n        new THREE.Group();\n\n    building.rotation.y = -0.45;\n\n    scene.add(building);\n\n\n    \/* =========================\n       HELPERS\n    ========================= *\/\n\n    function box(\n        width,\n        height,\n        depth,\n        material,\n        x,\n        y,\n        z\n    ) {\n\n        const mesh =\n            new THREE.Mesh(\n                new THREE.BoxGeometry(\n                    width,\n                    height,\n                    depth\n                ),\n                material\n            );\n\n        mesh.position.set(x, y, z);\n\n        mesh.castShadow = true;\n        mesh.receiveShadow = true;\n\n        building.add(mesh);\n\n        return mesh;\n    }\n\n\n    \/* =========================\n       HOOFDVOLUME\n    ========================= *\/\n\n    box(\n        6.5,\n        3.8,\n        4.8,\n        brickMaterial,\n        0,\n        1.9,\n        0\n    );\n\n\n    \/* =========================\n       TWEEDE BOUWVOLUME\n    ========================= *\/\n\n    box(\n        3.2,\n        2.8,\n        3.4,\n        lightBrickMaterial,\n        3.5,\n        1.4,\n        0.2\n    );\n\n\n    \/* =========================\n       DAK\n    ========================= *\/\n\n    box(\n        6.7,\n        0.25,\n        5,\n        roofMaterial,\n        0,\n        3.9,\n        0\n    );\n\n    box(\n        3.4,\n        0.22,\n        3.6,\n        roofMaterial,\n        3.5,\n        2.9,\n        0.2\n    );\n\n\n    \/* =========================\n       ENTREE\n    ========================= *\/\n\n    box(\n        1.5,\n        2.5,\n        0.15,\n        darkMaterial,\n        0,\n        1.25,\n        2.43\n    );\n\n    box(\n        1.1,\n        2.15,\n        0.08,\n        glassMaterial,\n        0,\n        1.15,\n        2.52\n    );\n\n\n    \/* LUIFEL *\/\n\n    box(\n        2.2,\n        0.15,\n        1.2,\n        darkMaterial,\n        0,\n        2.65,\n        2.8\n    );\n\n\n    \/* =========================\n       RAMEN VOORGEVEL\n    ========================= *\/\n\n    function windowFront(x, y) {\n\n        box(\n            1.15,\n            1.15,\n            0.08,\n            glassMaterial,\n            x,\n            y,\n            2.43\n        );\n\n        \/* kozijn boven *\/\n\n        box(\n            1.3,\n            0.07,\n            0.10,\n            darkMaterial,\n            x,\n            y + 0.61,\n            2.47\n        );\n\n        \/* kozijn onder *\/\n\n        box(\n            1.3,\n            0.07,\n            0.10,\n            darkMaterial,\n            x,\n            y - 0.61,\n            2.47\n        );\n\n        \/* middenstijl *\/\n\n        box(\n            0.06,\n            1.2,\n            0.10,\n            darkMaterial,\n            x,\n            y,\n            2.47\n        );\n\n    }\n\n\n    windowFront(-2.3, 1.15);\n    windowFront(2.3, 1.15);\n\n    windowFront(-2.3, 2.75);\n    windowFront(0, 2.75);\n    windowFront(2.3, 2.75);\n\n\n    \/* =========================\n       RECHTERGEVEL RAMEN\n    ========================= *\/\n\n    function sideWindow(z, y) {\n\n        const windowMesh =\n            box(\n                0.08,\n                1.15,\n                1.15,\n                glassMaterial,\n                3.27,\n                y,\n                z\n            );\n\n        return windowMesh;\n    }\n\n    sideWindow(-1.45, 1.3);\n    sideWindow(0.2, 1.3);\n    sideWindow(1.7, 1.3);\n\n    sideWindow(-1.45, 2.8);\n    sideWindow(0.2, 2.8);\n\n\n    \/* =========================\n       AANBOUW RAMEN\n    ========================= *\/\n\n    box(\n        2,\n        1.6,\n        0.08,\n        glassMaterial,\n        3.5,\n        1.3,\n        1.93\n    );\n\n    box(\n        2.2,\n        0.08,\n        0.10,\n        darkMaterial,\n        3.5,\n        2.12,\n        1.97\n    );\n\n    box(\n        2.2,\n        0.08,\n        0.10,\n        darkMaterial,\n        3.5,\n        0.48,\n        1.97\n    );\n\n\n    \/* =========================\n       BALKON\n    ========================= *\/\n\n    box(\n        2.8,\n        0.16,\n        1.15,\n        concreteMaterial,\n        -1.4,\n        2.35,\n        2.85\n    );\n\n\n    \/* glazen balkonhek *\/\n\n    box(\n        2.7,\n        0.85,\n        0.06,\n        glassMaterial,\n        -1.4,\n        2.82,\n        3.35\n    );\n\n\n    \/* balkonstaanders *\/\n\n    for (\n        let x = -2.6;\n        x <= -0.2;\n        x += 0.6\n    ) {\n\n        box(\n            0.04,\n            0.85,\n            0.06,\n            darkMaterial,\n            x,\n            2.82,\n            3.38\n        );\n\n    }\n\n\n    \/* =========================\n       SCHOORSTEEN \/ DAKOPBOUW\n    ========================= *\/\n\n    box(\n        0.75,\n        1.1,\n        0.75,\n        brickMaterial,\n        -2,\n        4.5,\n        -0.8\n    );\n\n    box(\n        0.85,\n        0.12,\n        0.85,\n        concreteMaterial,\n        -2,\n        5.1,\n        -0.8\n    );\n\n\n    \/* =========================\n       STOEP\n    ========================= *\/\n\n    box(\n        7.5,\n        0.12,\n        2.4,\n        concreteMaterial,\n        0.3,\n        -0.01,\n        3.3\n    );\n\n\n    \/* =========================\n       GROEN\n    ========================= *\/\n\n    function bush(\n        x,\n        z,\n        scale = 1\n    ) {\n\n        const mesh =\n            new THREE.Mesh(\n                new THREE.SphereGeometry(\n                    0.5 * scale,\n                    20,\n                    16\n                ),\n                greenMaterial\n            );\n\n        mesh.position.set(\n            x,\n            0.4 * scale,\n            z\n        );\n\n        mesh.scale.y = 0.75;\n\n        mesh.castShadow = true;\n\n        building.add(mesh);\n\n    }\n\n    bush(-3.8, 2.8, 0.8);\n    bush(-3.2, 3.1, 0.6);\n    bush(4.7, 2.2, 0.9);\n    bush(4.3, 2.8, 0.65);\n\n\n    \/* =========================\n       BOOMPJE\n    ========================= *\/\n\n    box(\n        0.16,\n        2,\n        0.16,\n        darkMaterial,\n        -4.4,\n        1,\n        -1.5\n    );\n\n    const tree =\n        new THREE.Mesh(\n            new THREE.SphereGeometry(\n                1,\n                24,\n                18\n            ),\n            greenMaterial\n        );\n\n    tree.position.set(\n        -4.4,\n        2.6,\n        -1.5\n    );\n\n    tree.scale.set(\n        1,\n        1.25,\n        1\n    );\n\n    tree.castShadow = true;\n\n    building.add(tree);\n\n\n    \/* =========================\n       ONDERGROND\n    ========================= *\/\n\n    const ground =\n        new THREE.Mesh(\n            new THREE.PlaneGeometry(\n                18,\n                14\n            ),\n            new THREE.ShadowMaterial({\n                color: 0x000000,\n                opacity: 0.10\n            })\n        );\n\n    ground.rotation.x =\n        -Math.PI \/ 2;\n\n    ground.position.y =\n        -0.09;\n\n    ground.receiveShadow = true;\n\n    scene.add(ground);\n\n\n    \/* =========================\n       MUIS INTERACTIE\n    ========================= *\/\n\n    let targetRotationY = -0.45;\n    let targetRotationX = 0;\n\n    let currentRotationY = -0.45;\n    let currentRotationX = 0;\n\n\n    container.addEventListener(\n        'mousemove',\n        event => {\n\n            const rect =\n                container.getBoundingClientRect();\n\n            const mouseX =\n                (\n                    event.clientX -\n                    rect.left\n                ) \/ rect.width;\n\n            const mouseY =\n                (\n                    event.clientY -\n                    rect.top\n                ) \/ rect.height;\n\n\n            targetRotationY =\n                -0.45 +\n                (mouseX - 0.5) * 1.05;\n\n            targetRotationX =\n                (mouseY - 0.5) * 0.10;\n\n        }\n    );\n\n\n    container.addEventListener(\n        'mouseleave',\n        () => {\n\n            targetRotationY = -0.45;\n            targetRotationX = 0;\n\n        }\n    );\n\n\n    \/* =========================\n       ANIMATIE\n    ========================= *\/\n\n    let time = 0;\n\n    const reduceMotion =\n        window.matchMedia(\n            '(prefers-reduced-motion: reduce)'\n        ).matches;\n\n\n    function animate() {\n\n        requestAnimationFrame(animate);\n\n        time += 0.01;\n\n\n        \/*\n         * Op mobiel automatisch\n         * subtiel heen en weer\n         *\/\n\n        if (\n            window.matchMedia(\n                '(hover: none)'\n            ).matches &&\n            !reduceMotion\n        ) {\n\n            targetRotationY =\n                -0.45 +\n                Math.sin(time * 0.35) * 0.17;\n\n        }\n\n\n        currentRotationY +=\n            (\n                targetRotationY -\n                currentRotationY\n            ) * 0.04;\n\n        currentRotationX +=\n            (\n                targetRotationX -\n                currentRotationX\n            ) * 0.04;\n\n\n        building.rotation.y =\n            currentRotationY;\n\n        building.rotation.x =\n            currentRotationX;\n\n\n        renderer.render(\n            scene,\n            camera\n        );\n\n    }\n\n    animate();\n\n\n    \/* =========================\n       RESPONSIVE\n    ========================= *\/\n\n    function resize() {\n\n        const width =\n            container.clientWidth;\n\n        const height =\n            container.clientHeight;\n\n        camera.aspect =\n            width \/ height;\n\n        camera.updateProjectionMatrix();\n\n        renderer.setSize(\n            width,\n            height,\n            false\n        );\n\n    }\n\n    window.addEventListener(\n        'resize',\n        resize\n    );\n\n}\n\n<\/script>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"ibx-city-3d\">\n    <div id=\"ibx-city-canvas\"><\/div>\n<\/div>\n\n<style>\n.ibx-city-3d {\n    width: 100%;\n    height: 650px;\n    position: relative;\n    overflow: hidden;\n    background: #f3f6f8;\n    border-radius: 16px;\n}\n\n#ibx-city-canvas {\n    position: absolute;\n    inset: 0;\n}\n\n#ibx-city-canvas canvas {\n    display: block;\n    width: 100%;\n    height: 100%;\n}\n\n@media (max-width: 768px) {\n    .ibx-city-3d {\n        height: 480px;\n    }\n}\n<\/style>\n\n<script type=\"module\">\nimport * as THREE from 'https:\/\/cdn.jsdelivr.net\/npm\/three@0.179.1\/build\/three.module.js';\n\nconst container = document.getElementById('ibx-city-canvas');\n\nif (container) {\n\n    \/* =========================\n       SCENE\n    ========================= *\/\n\n    const scene = new THREE.Scene();\n\n    const camera = new THREE.PerspectiveCamera(\n        32,\n        container.clientWidth \/ container.clientHeight,\n        0.1,\n        200\n    );\n\n    camera.position.set(15, 12, 17);\n    camera.lookAt(0, 1.5, 0);\n\n\n    \/* =========================\n       RENDERER\n    ========================= *\/\n\n    const renderer = new THREE.WebGLRenderer({\n        antialias: true,\n        alpha: true\n    });\n\n    renderer.setPixelRatio(\n        Math.min(window.devicePixelRatio, 2)\n    );\n\n    renderer.setSize(\n        container.clientWidth,\n        container.clientHeight\n    );\n\n    renderer.shadowMap.enabled = true;\n    renderer.shadowMap.type = THREE.PCFSoftShadowMap;\n    renderer.outputColorSpace = THREE.SRGBColorSpace;\n\n    container.appendChild(renderer.domElement);\n\n\n    \/* =========================\n       VERLICHTING\n    ========================= *\/\n\n    const hemi = new THREE.HemisphereLight(\n        0xffffff,\n        0x91a08f,\n        2.4\n    );\n\n    scene.add(hemi);\n\n    const sun = new THREE.DirectionalLight(\n        0xffffff,\n        3\n    );\n\n    sun.position.set(10, 16, 12);\n    sun.castShadow = true;\n    sun.shadow.mapSize.set(2048, 2048);\n\n    scene.add(sun);\n\n\n    \/* =========================\n       MATERIALEN\n    ========================= *\/\n\n    const roadMaterial = new THREE.MeshStandardMaterial({\n        color: 0x555b60,\n        roughness: 0.95\n    });\n\n    const sidewalkMaterial = new THREE.MeshStandardMaterial({\n        color: 0xc9c9c6,\n        roughness: 0.95\n    });\n\n    const grassMaterial = new THREE.MeshStandardMaterial({\n        color: 0x76936b,\n        roughness: 1\n    });\n\n    const whiteMaterial = new THREE.MeshStandardMaterial({\n        color: 0xeeeeea,\n        roughness: 0.8\n    });\n\n    const brickMaterial = new THREE.MeshStandardMaterial({\n        color: 0xb47859,\n        roughness: 0.9\n    });\n\n    const lightBrickMaterial = new THREE.MeshStandardMaterial({\n        color: 0xd2c5b2,\n        roughness: 0.9\n    });\n\n    const darkMaterial = new THREE.MeshStandardMaterial({\n        color: 0x354b6a,\n        roughness: 0.55\n    });\n\n    const roofMaterial = new THREE.MeshStandardMaterial({\n        color: 0x3d4145,\n        roughness: 0.85\n    });\n\n    const glassMaterial = new THREE.MeshPhysicalMaterial({\n        color: 0x8fb6c7,\n        transparent: true,\n        opacity: 0.5,\n        roughness: 0.2\n    });\n\n    const greenMaterial = new THREE.MeshStandardMaterial({\n        color: 0x617d56,\n        roughness: 1\n    });\n\n\n    \/* =========================\n       HOOFDGROEP\n    ========================= *\/\n\n    const city = new THREE.Group();\n\n    city.rotation.y = -0.45;\n\n    scene.add(city);\n\n\n    \/* =========================\n       HELPERS\n    ========================= *\/\n\n    function box(\n        width,\n        height,\n        depth,\n        material,\n        x,\n        y,\n        z,\n        parent = city\n    ) {\n\n        const mesh = new THREE.Mesh(\n            new THREE.BoxGeometry(\n                width,\n                height,\n                depth\n            ),\n            material\n        );\n\n        mesh.position.set(x, y, z);\n\n        mesh.castShadow = true;\n        mesh.receiveShadow = true;\n\n        parent.add(mesh);\n\n        return mesh;\n    }\n\n\n    function addWindow(\n        parent,\n        x,\n        y,\n        z,\n        width = 0.5,\n        height = 0.7,\n        rotationY = 0\n    ) {\n\n        const windowMesh = new THREE.Mesh(\n            new THREE.BoxGeometry(\n                width,\n                height,\n                0.05\n            ),\n            glassMaterial\n        );\n\n        windowMesh.position.set(\n            x,\n            y,\n            z\n        );\n\n        windowMesh.rotation.y = rotationY;\n\n        parent.add(windowMesh);\n    }\n\n\n    \/* =========================\n       ONDERGROND\n    ========================= *\/\n\n    box(\n        14,\n        0.2,\n        12,\n        grassMaterial,\n        0,\n        -0.1,\n        0\n    );\n\n\n    \/* =========================\n       WEGEN\n    ========================= *\/\n\n    box(\n        14,\n        0.08,\n        2.2,\n        roadMaterial,\n        0,\n        0.03,\n        0\n    );\n\n    box(\n        2.4,\n        0.08,\n        12,\n        roadMaterial,\n        1,\n        0.035,\n        0\n    );\n\n\n    \/* =========================\n       STOEPEN\n    ========================= *\/\n\n    box(\n        14,\n        0.07,\n        0.7,\n        sidewalkMaterial,\n        0,\n        0.08,\n        1.45\n    );\n\n    box(\n        14,\n        0.07,\n        0.7,\n        sidewalkMaterial,\n        0,\n        0.08,\n        -1.45\n    );\n\n    box(\n        0.7,\n        0.07,\n        12,\n        sidewalkMaterial,\n        2.55,\n        0.08,\n        0\n    );\n\n    box(\n        0.7,\n        0.07,\n        12,\n        sidewalkMaterial,\n        -0.55,\n        0.08,\n        0\n    );\n\n\n    \/* =========================\n       WEGMARKERING\n    ========================= *\/\n\n    for (let x = -6; x <= 6; x += 1.5) {\n\n        box(\n            0.65,\n            0.02,\n            0.08,\n            whiteMaterial,\n            x,\n            0.09,\n            0\n        );\n\n    }\n\n    for (let z = -5; z <= 5; z += 1.5) {\n\n        box(\n            0.08,\n            0.02,\n            0.65,\n            whiteMaterial,\n            1,\n            0.09,\n            z\n        );\n\n    }\n\n\n    \/* =========================\n       GEBOUW HELPER\n    ========================= *\/\n\n    function createBuilding(\n        x,\n        z,\n        width,\n        depth,\n        height,\n        material\n    ) {\n\n        const group = new THREE.Group();\n\n        group.position.set(x, 0, z);\n\n        city.add(group);\n\n\n        \/* hoofdvolume *\/\n\n        box(\n            width,\n            height,\n            depth,\n            material,\n            0,\n            height \/ 2,\n            0,\n            group\n        );\n\n\n        \/* plat dak *\/\n\n        box(\n            width + 0.12,\n            0.15,\n            depth + 0.12,\n            roofMaterial,\n            0,\n            height + 0.08,\n            0,\n            group\n        );\n\n\n        \/* ramen voorzijde *\/\n\n        const floors = Math.max(\n            1,\n            Math.floor(height \/ 1.3)\n        );\n\n        const columns = Math.max(\n            2,\n            Math.floor(width \/ 1.2)\n        );\n\n        for (\n            let floor = 0;\n            floor < floors;\n            floor++\n        ) {\n\n            for (\n                let col = 0;\n                col < columns;\n                col++\n            ) {\n\n                const wx =\n                    -width \/ 2 +\n                    0.6 +\n                    col *\n                    (\n                        (width - 1.2) \/\n                        Math.max(columns - 1, 1)\n                    );\n\n                const wy =\n                    0.75 +\n                    floor * 1.15;\n\n                if (wy < height - 0.25) {\n\n                    addWindow(\n                        group,\n                        wx,\n                        wy,\n                        depth \/ 2 + 0.03,\n                        0.5,\n                        0.65\n                    );\n\n                }\n\n            }\n\n        }\n\n\n        \/* zijramen *\/\n\n        for (\n            let floor = 0;\n            floor < floors;\n            floor++\n        ) {\n\n            const wy =\n                0.75 +\n                floor * 1.15;\n\n            if (wy < height - 0.25) {\n\n                const windowMesh = new THREE.Mesh(\n                    new THREE.BoxGeometry(\n                        0.5,\n                        0.65,\n                        0.05\n                    ),\n                    glassMaterial\n                );\n\n                windowMesh.position.set(\n                    width \/ 2 + 0.03,\n                    wy,\n                    0\n                );\n\n                windowMesh.rotation.y =\n                    Math.PI \/ 2;\n\n                group.add(windowMesh);\n\n            }\n\n        }\n\n        return group;\n    }\n\n\n    \/* =========================\n       STADSBLOKKEN\n    ========================= *\/\n\n    createBuilding(\n        -4.8,\n        -3.8,\n        2.5,\n        2,\n        3.8,\n        brickMaterial\n    );\n\n    createBuilding(\n        -1.8,\n        -3.8,\n        2.2,\n        2,\n        5.2,\n        lightBrickMaterial\n    );\n\n    createBuilding(\n        4.5,\n        -3.7,\n        2.8,\n        2.2,\n        4.5,\n        brickMaterial\n    );\n\n    createBuilding(\n        5.2,\n        3.7,\n        2.2,\n        2.4,\n        5.8,\n        lightBrickMaterial\n    );\n\n    createBuilding(\n        -4.7,\n        3.6,\n        3,\n        2.4,\n        3.5,\n        lightBrickMaterial\n    );\n\n    createBuilding(\n        -1.8,\n        3.8,\n        2,\n        2.1,\n        4.7,\n        brickMaterial\n    );\n\n\n    \/* =========================\n       HOGER ACCENTGEBOUW\n    ========================= *\/\n\n    const tower = createBuilding(\n        4.3,\n        0,\n        2,\n        2.1,\n        7,\n        darkMaterial\n    );\n\n\n    \/* =========================\n       KLEINE WONINGEN\n    ========================= *\/\n\n    function smallHouse(\n        x,\n        z,\n        rotation = 0\n    ) {\n\n        const group =\n            new THREE.Group();\n\n        group.position.set(x, 0, z);\n        group.rotation.y = rotation;\n\n        city.add(group);\n\n\n        box(\n            1.8,\n            1.8,\n            1.7,\n            whiteMaterial,\n            0,\n            0.9,\n            0,\n            group\n        );\n\n\n        const roofGeometry =\n            new THREE.ConeGeometry(\n                1.45,\n                1.2,\n                4\n            );\n\n        const roof =\n            new THREE.Mesh(\n                roofGeometry,\n                roofMaterial\n            );\n\n        roof.rotation.y =\n            Math.PI \/ 4;\n\n        roof.position.set(\n            0,\n            2.35,\n            0\n        );\n\n        roof.castShadow = true;\n\n        group.add(roof);\n\n\n        addWindow(\n            group,\n            -0.45,\n            1,\n            0.88,\n            0.45,\n            0.6\n        );\n\n        addWindow(\n            group,\n            0.45,\n            1,\n            0.88,\n            0.45,\n            0.6\n        );\n\n\n        box(\n            0.45,\n            1,\n            0.07,\n            darkMaterial,\n            0,\n            0.55,\n            0.9,\n            group\n        );\n\n    }\n\n    smallHouse(-5.5, 0.3);\n    smallHouse(-3.4, 0.3);\n    smallHouse(-5.5, -0.7);\n    smallHouse(-3.4, -0.7);\n\n\n    \/* =========================\n       PARKJE\n    ========================= *\/\n\n    box(\n        2.5,\n        0.05,\n        2.3,\n        greenMaterial,\n        4.7,\n        0.12,\n        1.1\n    );\n\n\n    \/* =========================\n       BOMEN\n    ========================= *\/\n\n    function tree(\n        x,\n        z,\n        scale = 1\n    ) {\n\n        box(\n            0.16 * scale,\n            1.3 * scale,\n            0.16 * scale,\n            new THREE.MeshStandardMaterial({\n                color: 0x795739,\n                roughness: 1\n            }),\n            x,\n            0.65 * scale,\n            z\n        );\n\n\n        const crown =\n            new THREE.Mesh(\n                new THREE.SphereGeometry(\n                    0.55 * scale,\n                    18,\n                    14\n                ),\n                greenMaterial\n            );\n\n        crown.position.set(\n            x,\n            1.6 * scale,\n            z\n        );\n\n        crown.scale.y = 1.15;\n        crown.castShadow = true;\n\n        city.add(crown);\n\n    }\n\n\n    tree(3.8, 1.1, 0.9);\n    tree(5.6, 1.1, 0.8);\n    tree(4.7, 2, 0.7);\n\n    tree(-6, 2.1, 0.7);\n    tree(-2.8, 2.1, 0.65);\n    tree(6, -1.8, 0.7);\n    tree(-5.7, -2.1, 0.7);\n\n\n    \/* =========================\n       STRAATMEUBILAIR\n    ========================= *\/\n\n    function lampPost(x, z) {\n\n        box(\n            0.07,\n            1.7,\n            0.07,\n            darkMaterial,\n            x,\n            0.85,\n            z\n        );\n\n        box(\n            0.28,\n            0.1,\n            0.18,\n            whiteMaterial,\n            x,\n            1.72,\n            z\n        );\n\n    }\n\n    lampPost(-2, 1.65);\n    lampPost(3.4, 1.65);\n    lampPost(-4, -1.65);\n    lampPost(5.5, -1.65);\n\n\n    \/* =========================\n       MUISINTERACTIE\n    ========================= *\/\n\n    let targetRotationY = -0.45;\n    let targetRotationX = 0;\n\n    let currentRotationY = -0.45;\n    let currentRotationX = 0;\n\n\n    container.addEventListener(\n        'mousemove',\n        event => {\n\n            const rect =\n                container.getBoundingClientRect();\n\n            const x =\n                (\n                    event.clientX -\n                    rect.left\n                ) \/ rect.width;\n\n            const y =\n                (\n                    event.clientY -\n                    rect.top\n                ) \/ rect.height;\n\n\n            targetRotationY =\n                -0.45 +\n                (x - 0.5) * 1.05;\n\n            targetRotationX =\n                (y - 0.5) * 0.12;\n\n        }\n    );\n\n\n    container.addEventListener(\n        'mouseleave',\n        () => {\n\n            targetRotationY = -0.45;\n            targetRotationX = 0;\n\n        }\n    );\n\n\n    \/* =========================\n       ANIMATIE\n    ========================= *\/\n\n    let time = 0;\n\n    const mobile =\n        window.matchMedia(\n            '(hover: none)'\n        );\n\n    const reduceMotion =\n        window.matchMedia(\n            '(prefers-reduced-motion: reduce)'\n        ).matches;\n\n\n    function animate() {\n\n        requestAnimationFrame(animate);\n\n        time += 0.01;\n\n\n        if (\n            mobile.matches &&\n            !reduceMotion\n        ) {\n\n            targetRotationY =\n                -0.45 +\n                Math.sin(time * 0.3) * 0.18;\n\n        }\n\n\n        currentRotationY +=\n            (\n                targetRotationY -\n                currentRotationY\n            ) * 0.04;\n\n        currentRotationX +=\n            (\n                targetRotationX -\n                currentRotationX\n            ) * 0.04;\n\n\n        city.rotation.y =\n            currentRotationY;\n\n        city.rotation.x =\n            currentRotationX;\n\n\n        renderer.render(\n            scene,\n            camera\n        );\n\n    }\n\n    animate();\n\n\n    \/* =========================\n       RESPONSIVE\n    ========================= *\/\n\n    function resize() {\n\n        const width =\n            container.clientWidth;\n\n        const height =\n            container.clientHeight;\n\n        camera.aspect =\n            width \/ height;\n\n        camera.updateProjectionMatrix();\n\n        renderer.setSize(\n            width,\n            height,\n            false\n        );\n\n    }\n\n    window.addEventListener(\n        'resize',\n        resize\n    );\n\n}\n\n<\/script>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-group alignfull has-background is-layout-constrained wp-block-group-is-layout-constrained\" style=\"background-color:#0d1117;padding-top:80px;padding-bottom:80px\">\n<div class=\"wp-block-columns are-vertically-aligned-bottom is-layout-flex wp-container-core-columns-is-layout-0cdee44b wp-block-columns-is-layout-flex\" style=\"margin-bottom:56px\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p class=\"has-text-color wp-block-paragraph\" style=\"color:#f59e0b;margin-top:0;margin-bottom:12px;font-size:12px;font-weight:700;letter-spacing:4px;text-transform:uppercase\">Our Work<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-text-color\" style=\"color:#ffffff;margin-top:0;margin-bottom:0;padding-top:0;padding-bottom:0;font-weight:700;text-transform:uppercase\">FEATURED PROJECTS<\/h2>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-vertically-aligned-bottom is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-buttons is-content-justification-right is-layout-flex wp-container-core-buttons-is-layout-a25c111d wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link has-text-color has-background wp-element-button\" href=\"#\" style=\"border-width:0px;border-radius:0px;color:#f59e0b;background-color:transparent;font-weight:700;letter-spacing:2px;text-transform:uppercase\">View All Projects \u2192<\/a><\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-794e3cfa wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-cover has-custom-content-position is-position-bottom-left\" style=\"padding-top:24px;padding-right:24px;padding-bottom:24px;padding-left:24px;min-height:520px;aspect-ratio:unset;\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"533\" class=\"wp-block-cover__image-background wp-image-203 size-full\" alt=\"\" src=\"https:\/\/citybrix.ai\/wp-content\/uploads\/2026\/05\/photo-1460317442991-0ec209397118_converted.jpg\" data-object-fit=\"cover\" srcset=\"https:\/\/citybrix.ai\/wp-content\/uploads\/2026\/05\/photo-1460317442991-0ec209397118_converted.jpg 800w, https:\/\/citybrix.ai\/wp-content\/uploads\/2026\/05\/photo-1460317442991-0ec209397118_converted-300x200.jpg 300w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><span aria-hidden=\"true\" class=\"wp-block-cover__background has-black-background-color has-background-dim-60 has-background-dim\"><\/span><div class=\"wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow\">\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-794e3cfa wp-block-group-is-layout-flex\">\n<p class=\"has-text-color has-background wp-block-paragraph\" style=\"color:#000000;background-color:#f59e0b;margin-top:0;margin-bottom:0;padding-top:4px;padding-right:12px;padding-bottom:4px;padding-left:12px;font-size:11px;font-weight:700;letter-spacing:2px;text-transform:uppercase\">Residential<\/p>\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading has-text-color\" style=\"color:#ffffff;margin-top:8px;margin-bottom:4px;padding-top:0;padding-bottom:0;font-size:22px;font-weight:700\">Riverside Towers<\/h3>\n\n\n\n<p class=\"has-text-color wp-block-paragraph\" style=\"color:#9ca3af;margin-top:0;font-size:14px\">Warsaw \u00b7 2023<\/p>\n<\/div><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-cover has-custom-content-position is-position-bottom-left\" style=\"padding-top:24px;padding-right:24px;padding-bottom:24px;padding-left:24px;min-height:520px;aspect-ratio:unset;\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"533\" class=\"wp-block-cover__image-background wp-image-206 size-full\" alt=\"\" src=\"https:\/\/citybrix.ai\/wp-content\/uploads\/2026\/05\/photo-1486325212027-8081e485255e_converted.jpg\" data-object-fit=\"cover\" srcset=\"https:\/\/citybrix.ai\/wp-content\/uploads\/2026\/05\/photo-1486325212027-8081e485255e_converted.jpg 800w, https:\/\/citybrix.ai\/wp-content\/uploads\/2026\/05\/photo-1486325212027-8081e485255e_converted-300x200.jpg 300w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><span aria-hidden=\"true\" class=\"wp-block-cover__background has-black-background-color has-background-dim-60 has-background-dim\"><\/span><div class=\"wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow\">\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-794e3cfa wp-block-group-is-layout-flex\">\n<p class=\"has-text-color has-background wp-block-paragraph\" style=\"color:#000000;background-color:#f59e0b;margin-top:0;margin-bottom:0;padding-top:4px;padding-right:12px;padding-bottom:4px;padding-left:12px;font-size:11px;font-weight:700;letter-spacing:2px;text-transform:uppercase\">Commercial<\/p>\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading has-text-color\" style=\"color:#ffffff;margin-top:8px;margin-bottom:4px;padding-top:0;padding-bottom:0;font-size:22px;font-weight:700\">Centrum Business Park<\/h3>\n\n\n\n<p class=\"has-text-color wp-block-paragraph\" style=\"color:#9ca3af;margin-top:0;font-size:14px\">Krak\u00f3w \u00b7 2022<\/p>\n<\/div><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-cover has-custom-content-position is-position-bottom-left\" style=\"padding-top:24px;padding-right:24px;padding-bottom:24px;padding-left:24px;min-height:520px;aspect-ratio:unset;\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"533\" class=\"wp-block-cover__image-background wp-image-201 size-full\" alt=\"\" src=\"https:\/\/citybrix.ai\/wp-content\/uploads\/2026\/05\/photo-1558618666-fcd25c85cd64_converted.jpg\" data-object-fit=\"cover\" srcset=\"https:\/\/citybrix.ai\/wp-content\/uploads\/2026\/05\/photo-1558618666-fcd25c85cd64_converted.jpg 800w, https:\/\/citybrix.ai\/wp-content\/uploads\/2026\/05\/photo-1558618666-fcd25c85cd64_converted-300x200.jpg 300w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><span aria-hidden=\"true\" class=\"wp-block-cover__background has-black-background-color has-background-dim-60 has-background-dim\"><\/span><div class=\"wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow\">\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-794e3cfa wp-block-group-is-layout-flex\">\n<p class=\"has-text-color has-background wp-block-paragraph\" style=\"color:#000000;background-color:#f59e0b;margin-top:0;margin-bottom:0;padding-top:4px;padding-right:12px;padding-bottom:4px;padding-left:12px;font-size:11px;font-weight:700;letter-spacing:2px;text-transform:uppercase\">Infrastructure<\/p>\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading has-text-color\" style=\"color:#ffffff;margin-top:8px;margin-bottom:4px;padding-top:0;padding-bottom:0;font-size:22px;font-weight:700\">North Ring Bypass<\/h3>\n\n\n\n<p class=\"has-text-color wp-block-paragraph\" style=\"color:#9ca3af;margin-top:0;font-size:14px\">Pozna\u0144 \u00b7 2024<\/p>\n<\/div><\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-group alignfull has-background is-layout-constrained wp-block-group-is-layout-constrained\" style=\"background-color:#ffffff;padding-top:96px;padding-bottom:96px\">\n<div class=\"wp-block-group is-layout-flow wp-block-group-is-layout-flow\" style=\"margin-bottom:64px\">\n<p class=\"has-text-align-center has-text-color wp-block-paragraph\" style=\"color:#f59e0b;margin-bottom:16px;font-size:12px;font-weight:700;letter-spacing:4px;text-transform:uppercase\">How We Work<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-center has-text-color\" style=\"color:#111827;margin-top:0;padding-top:0;padding-bottom:0;font-weight:700;text-transform:uppercase\">OUR PROCESS<\/h2>\n<\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-794e3cfa wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-group is-layout-flow wp-block-group-is-layout-flow\" style=\"padding-top:0;padding-right:24px;padding-bottom:0;padding-left:24px\">\n<h3 class=\"wp-block-heading has-text-align-center has-text-color\" style=\"color:#f59e0b;margin-top:0;margin-bottom:16px;font-size:56px;font-weight:700\">01<\/h3>\n\n\n\n<h4 class=\"wp-block-heading has-text-align-center has-text-color\" style=\"color:#111827;margin-top:0;margin-bottom:12px;font-size:16px;font-weight:700;text-transform:uppercase\">Consultation<\/h4>\n\n\n\n<p class=\"has-text-align-center has-text-color wp-block-paragraph\" style=\"color:#6b7280;font-size:14px\">We start by deeply understanding your goals, constraints, and vision through structured discovery sessions.<\/p>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-group is-layout-flow wp-block-group-is-layout-flow\" style=\"padding-top:0;padding-right:24px;padding-bottom:0;padding-left:24px\">\n<h3 class=\"wp-block-heading has-text-align-center has-text-color\" style=\"color:#f59e0b;margin-top:0;margin-bottom:16px;font-size:56px;font-weight:700\">02<\/h3>\n\n\n\n<h4 class=\"wp-block-heading has-text-align-center has-text-color\" style=\"color:#111827;margin-top:0;margin-bottom:12px;font-size:16px;font-weight:700;text-transform:uppercase\">Planning<\/h4>\n\n\n\n<p class=\"has-text-align-center has-text-color wp-block-paragraph\" style=\"color:#6b7280;font-size:14px\">Detailed project plans, schedules, and budgets are prepared with full transparency and stakeholder alignment.<\/p>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-group is-layout-flow wp-block-group-is-layout-flow\" style=\"padding-top:0;padding-right:24px;padding-bottom:0;padding-left:24px\">\n<h3 class=\"wp-block-heading has-text-align-center has-text-color\" style=\"color:#f59e0b;margin-top:0;margin-bottom:16px;font-size:56px;font-weight:700\">03<\/h3>\n\n\n\n<h4 class=\"wp-block-heading has-text-align-center has-text-color\" style=\"color:#111827;margin-top:0;margin-bottom:12px;font-size:16px;font-weight:700;text-transform:uppercase\">Construction<\/h4>\n\n\n\n<p class=\"has-text-align-center has-text-color wp-block-paragraph\" style=\"color:#6b7280;font-size:14px\">Our expert teams execute with precision, backed by rigorous quality and safety protocols at every stage.<\/p>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-group is-layout-flow wp-block-group-is-layout-flow\" style=\"padding-top:0;padding-right:24px;padding-bottom:0;padding-left:24px\">\n<h3 class=\"wp-block-heading has-text-align-center has-text-color\" style=\"color:#f59e0b;margin-top:0;margin-bottom:16px;font-size:56px;font-weight:700\">04<\/h3>\n\n\n\n<h4 class=\"wp-block-heading has-text-align-center has-text-color\" style=\"color:#111827;margin-top:0;margin-bottom:12px;font-size:16px;font-weight:700;text-transform:uppercase\">Handover<\/h4>\n\n\n\n<p class=\"has-text-align-center has-text-color wp-block-paragraph\" style=\"color:#6b7280;font-size:14px\">Every project is delivered with full documentation, warranty support, and post-completion care included.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-group alignfull has-background is-layout-constrained wp-block-group-is-layout-constrained\" style=\"background-color:#111827;padding-top:96px;padding-bottom:96px\">\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-794e3cfa wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<h3 class=\"wp-block-heading has-text-align-center has-text-color\" style=\"color:#ffffff;margin-top:0;margin-bottom:4px;font-size:clamp(48px,6vw,80px);font-weight:700\">\u20ac285<mark style=\"background-color:rgba(0,0,0,0);color:#f59e0b\" class=\"has-inline-color\">M<\/mark><\/h3>\n\n\n\n<p class=\"has-text-align-center has-text-color wp-block-paragraph\" style=\"color:#6b7280;margin-top:0;font-size:11px;letter-spacing:3px;text-transform:uppercase\">Annual Revenue<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<h3 class=\"wp-block-heading has-text-align-center has-text-color\" style=\"color:#ffffff;margin-top:0;margin-bottom:4px;font-size:clamp(48px,6vw,80px);font-weight:700\">\u20ac510<mark style=\"background-color:rgba(0,0,0,0);color:#f59e0b\" class=\"has-inline-color\">M<\/mark><\/h3>\n\n\n\n<p class=\"has-text-align-center has-text-color wp-block-paragraph\" style=\"color:#6b7280;margin-top:0;font-size:11px;letter-spacing:3px;text-transform:uppercase\">Order Backlog<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<h3 class=\"wp-block-heading has-text-align-center has-text-color\" style=\"color:#ffffff;margin-top:0;margin-bottom:4px;font-size:clamp(48px,6vw,80px);font-weight:700\">98<mark style=\"background-color:rgba(0,0,0,0);color:#f59e0b\" class=\"has-inline-color\">%<\/mark><\/h3>\n\n\n\n<p class=\"has-text-align-center has-text-color wp-block-paragraph\" style=\"color:#6b7280;margin-top:0;font-size:11px;letter-spacing:3px;text-transform:uppercase\">On-Time Delivery<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<h3 class=\"wp-block-heading has-text-align-center has-text-color\" style=\"color:#ffffff;margin-top:0;margin-bottom:4px;font-size:clamp(48px,6vw,80px);font-weight:700\">47<\/h3>\n\n\n\n<p class=\"has-text-align-center has-text-color wp-block-paragraph\" style=\"color:#6b7280;margin-top:0;font-size:11px;letter-spacing:3px;text-transform:uppercase\">Active Projects<\/p>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-group alignfull has-background is-layout-constrained wp-block-group-is-layout-constrained\" style=\"background-color:#fafaf9;padding-top:96px;padding-bottom:96px\">\n<div class=\"wp-block-group is-layout-flow wp-block-group-is-layout-flow\" style=\"margin-bottom:64px\">\n<p class=\"has-text-align-center has-text-color wp-block-paragraph\" style=\"color:#f59e0b;margin-bottom:16px;font-size:12px;font-weight:700;letter-spacing:4px;text-transform:uppercase\">Client Reviews<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-center has-text-color\" style=\"color:#111827;margin-top:0;font-weight:700;text-transform:uppercase\">WHAT OUR CLIENTS SAY<\/h2>\n<\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-75692be7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-group has-border-color has-background is-layout-flow wp-block-group-is-layout-flow\" style=\"border-color:#f3f4f6;border-width:1px;background-color:#ffffff;padding-top:40px;padding-right:40px;padding-bottom:40px;padding-left:40px\">\n<p class=\"has-text-color wp-block-paragraph\" style=\"color:#f59e0b;margin-top:0;margin-bottom:24px;font-size:20px\">\u2605\u2605\u2605\u2605\u2605<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u201cForma delivered our 18-floor residential complex three weeks ahead of schedule. Their attention to detail and commitment to quality is genuinely unmatched in this industry.\u201d<\/p>\n\n\n\n<hr class=\"wp-block-separator has-text-color has-alpha-channel-opacity has-background is-style-wide\" style=\"background-color:#f3f4f6;color:#f3f4f6\"\/>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-bf6a20eb wp-block-columns-is-layout-flex\" style=\"margin-top:24px\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:60px\">\n<figure class=\"wp-block-image size-full is-resized has-custom-border\"><img loading=\"lazy\" decoding=\"async\" width=\"400\" height=\"267\" src=\"https:\/\/citybrix.ai\/wp-content\/uploads\/2026\/05\/photo-1472099645785-5658abf4ff4e_converted.jpg\" alt=\"\" class=\"wp-image-205\" style=\"border-radius:50%;aspect-ratio:1;object-fit:cover;width:50px;height:auto\" srcset=\"https:\/\/citybrix.ai\/wp-content\/uploads\/2026\/05\/photo-1472099645785-5658abf4ff4e_converted.jpg 400w, https:\/\/citybrix.ai\/wp-content\/uploads\/2026\/05\/photo-1472099645785-5658abf4ff4e_converted-300x200.jpg 300w\" sizes=\"auto, (max-width: 400px) 100vw, 400px\" \/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p class=\"has-text-color wp-block-paragraph\" style=\"color:#111827;margin-top:0;margin-bottom:2px;font-size:14px;font-weight:700\">Tomasz B\u0142aszczyk<\/p>\n\n\n\n<p class=\"has-text-color wp-block-paragraph\" style=\"color:#9ca3af;margin-top:0;font-size:13px\">CEO, Vistula Properties<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-group has-border-color has-background is-layout-flow wp-block-group-is-layout-flow\" style=\"border-color:#f3f4f6;border-width:1px;background-color:#ffffff;padding-top:40px;padding-right:40px;padding-bottom:40px;padding-left:40px\">\n<p class=\"has-text-color wp-block-paragraph\" style=\"color:#f59e0b;margin-top:0;margin-bottom:24px;font-size:20px\">\u2605\u2605\u2605\u2605\u2605<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u201cWe trusted Forma with our most complex infrastructure project to date. The result exceeded expectations on every single metric \u2014 delivered on time, within budget.\u201d<\/p>\n\n\n\n<hr class=\"wp-block-separator has-text-color has-alpha-channel-opacity has-background is-style-wide\" style=\"background-color:#f3f4f6;color:#f3f4f6\"\/>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-bf6a20eb wp-block-columns-is-layout-flex\" style=\"margin-top:24px\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:60px\">\n<figure class=\"wp-block-image size-full is-resized has-custom-border\"><img loading=\"lazy\" decoding=\"async\" width=\"400\" height=\"267\" src=\"https:\/\/citybrix.ai\/wp-content\/uploads\/2026\/05\/photo-1472099645785-5658abf4ff4e_converted.jpg\" alt=\"\" class=\"wp-image-205\" style=\"border-radius:50%;aspect-ratio:1;object-fit:cover;width:50px;height:auto\" srcset=\"https:\/\/citybrix.ai\/wp-content\/uploads\/2026\/05\/photo-1472099645785-5658abf4ff4e_converted.jpg 400w, https:\/\/citybrix.ai\/wp-content\/uploads\/2026\/05\/photo-1472099645785-5658abf4ff4e_converted-300x200.jpg 300w\" sizes=\"auto, (max-width: 400px) 100vw, 400px\" \/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p class=\"has-text-color wp-block-paragraph\" style=\"color:#111827;margin-top:0;margin-bottom:2px;font-size:14px;font-weight:700\">Anna Malinowska<\/p>\n\n\n\n<p class=\"has-text-color wp-block-paragraph\" style=\"color:#9ca3af;margin-top:0;font-size:13px\">Director, Polish Road Authority<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-cover alignfull\" style=\"min-height:500px;aspect-ratio:unset;\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" class=\"wp-block-cover__image-background wp-image-198 size-large\" alt=\"\" src=\"https:\/\/inspiro.wpzoom.com\/construction\/wp-content\/uploads\/sites\/9\/2026\/05\/photo-1503387762-592deb58ef4e_converted-1024x576.jpg\" data-object-fit=\"cover\" srcset=\"https:\/\/citybrix.ai\/wp-content\/uploads\/2026\/05\/photo-1503387762-592deb58ef4e_converted-1024x576.jpg 1024w, https:\/\/citybrix.ai\/wp-content\/uploads\/2026\/05\/photo-1503387762-592deb58ef4e_converted-300x169.jpg 300w, https:\/\/citybrix.ai\/wp-content\/uploads\/2026\/05\/photo-1503387762-592deb58ef4e_converted.jpg 2000w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><span aria-hidden=\"true\" class=\"wp-block-cover__background has-background-dim-70 has-background-dim\" style=\"background-color:#0b0b0b\"><\/span><div class=\"wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow\">\n<p class=\"has-text-align-center has-text-color wp-block-paragraph\" style=\"color:#f59e0b;margin-bottom:16px;font-size:12px;font-weight:700;letter-spacing:4px;text-transform:uppercase\">Ready to Start?<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-center has-text-color\" style=\"color:#ffffff;margin-top:0;margin-bottom:24px;font-size:clamp(32px,5vw,64px);font-weight:700;text-transform:uppercase\">HAVE A PROJECT IN MIND?<\/h2>\n\n\n\n<p class=\"has-text-align-center has-text-color wp-block-paragraph\" style=\"color:#9ca3af;margin-bottom:40px;font-size:18px\">Let\u2019s discuss your requirements and see how Forma can bring your construction vision to life \u2014 on time, on budget.<\/p>\n\n\n\n<div class=\"wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-4d6f48bf wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link has-text-color has-background wp-element-button\" href=\"#\" style=\"border-radius:0px;color:#000000;background-color:#f59e0b;padding-top:16px;padding-right:40px;padding-bottom:16px;padding-left:40px;font-weight:700;letter-spacing:2px;text-transform:uppercase\">Contact Us Today \u2192<\/a><\/div>\n\n\n\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link has-text-color has-background has-border-color wp-element-button\" href=\"#\" style=\"border-color:rgba(255,255,255,0.3);border-width:2px;border-radius:0px;color:#ffffff;background-color:transparent;padding-top:14px;padding-right:40px;padding-bottom:14px;padding-left:40px;font-weight:700;letter-spacing:2px;text-transform:uppercase\">Investor Relations<\/a><\/div>\n<\/div>\n<\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>25+ Years Experience 400+ Projects Completed 12 Countries 800+ Professionals 25+ Years of Excellence About Forma TRUSTED CONSTRUCTION PARTNER SINCE 1998 Forma Construction Group is one of Poland\u2019s leading general contractors, with a proven track record in residential, commercial, and infrastructure projects across Europe. Our integrated approach combines decades of expertise with modern construction methods [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page-templates\/homepage-builder-bb.php","meta":{"_eb_attr":"","footnotes":""},"class_list":["post-2","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/citybrix.ai\/index.php?rest_route=\/wp\/v2\/pages\/2","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/citybrix.ai\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/citybrix.ai\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/citybrix.ai\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/citybrix.ai\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2"}],"version-history":[{"count":7,"href":"https:\/\/citybrix.ai\/index.php?rest_route=\/wp\/v2\/pages\/2\/revisions"}],"predecessor-version":[{"id":10179,"href":"https:\/\/citybrix.ai\/index.php?rest_route=\/wp\/v2\/pages\/2\/revisions\/10179"}],"wp:attachment":[{"href":"https:\/\/citybrix.ai\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}