{"id":2457,"date":"2026-02-15T14:58:04","date_gmt":"2026-02-15T14:58:04","guid":{"rendered":"https:\/\/vibrastudio.ch\/?page_id=2457"},"modified":"2026-03-01T18:33:50","modified_gmt":"2026-03-01T17:33:50","slug":"2457-2","status":"publish","type":"page","link":"https:\/\/vibrastudio.ch\/?page_id=2457","title":{"rendered":"Services"},"content":{"rendered":"\n<div class=\"wp-block-cover alignwide is-light\" style=\"min-height:154px;aspect-ratio:unset;\"><span aria-hidden=\"true\" class=\"wp-block-cover__background has-background-dim-0 has-background-dim\"><\/span><div class=\"wp-block-cover__inner-container has-global-padding is-layout-constrained wp-block-cover-is-layout-constrained\">\n<div id=\"webgl-shader-container\" style=\"\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100vw;\n  height: 100vh;\n  z-index: -1;\n  pointer-events: none;\n\"><\/div>\n\n<div style=\"position: relative; z-index: 1;\"><\/div>\n\n<script type=\"module\">\ndocument.addEventListener('DOMContentLoaded', function () {\n  const container = document.getElementById('webgl-shader-container');\n  if (!container) return;\n\n  const canvas = document.createElement('canvas');\n  canvas.style.cssText = `\n    position: absolute;\n    display: block;\n    left: 0;\n    top: 0;\n  `;\n  container.appendChild(canvas);\n\n  const gl = canvas.getContext('webgl2');\n  if (!gl) {\n    container.style.display = 'none';\n    return;\n  }\n\n  const isMobilePortrait = () => {\n    const isMobile = window.matchMedia && window.matchMedia('(pointer: coarse)').matches;\n    return isMobile && window.innerHeight > window.innerWidth;\n  };\n\n  const applyCanvasLayout = () => {\n    const dpr = window.devicePixelRatio || 1;\n    const w = window.innerWidth;\n    const h = window.innerHeight;\n\n    if (isMobilePortrait()) {\n      \/\/ Render swapped (so the shader sees landscape), then rotate the canvas.\n      canvas.width  = Math.round(h * dpr);\n      canvas.height = Math.round(w * dpr);\n\n      canvas.style.width  = `${h}px`;\n      canvas.style.height = `${w}px`;\n\n      canvas.style.left = '50%';\n      canvas.style.top  = '50%';\n      canvas.style.transformOrigin = 'center';\n      canvas.style.transform = 'translate(-50%, -50%) rotate(90deg)';\n    } else {\n      \/\/ Normal desktop \/ landscape\n      canvas.width  = Math.round(w * dpr);\n      canvas.height = Math.round(h * dpr);\n\n      canvas.style.width  = `${w}px`;\n      canvas.style.height = `${h}px`;\n\n      canvas.style.left = '0';\n      canvas.style.top  = '0';\n      canvas.style.transform = 'none';\n    }\n\n    gl.viewport(0, 0, canvas.width, canvas.height);\n  };\n\n  window.addEventListener('resize', () => requestAnimationFrame(applyCanvasLayout));\n  window.addEventListener('orientationchange', () => setTimeout(applyCanvasLayout, 150));\n  applyCanvasLayout();\n\n  const vertexShader = `#version 300 es\n  in vec2 position;\n  out vec2 v_uv;\n  void main() {\n    gl_Position = vec4(position, 0.0, 1.0);\n    v_uv = position * 0.5 + 0.5;\n  }`;\n\n  \/\/ \u2705 UNCHANGED shader (your original)\n  const fragmentShader = `#version 300 es\n  precision highp float;\n\n  in vec2 v_uv;\n  out vec4 fragColor;\n\n  uniform float u_time;\n  uniform vec2 u_resolution;\n  uniform vec2 u_mouse;\n  uniform vec2 u_mouseDir;\n  uniform float u_mouseSpeed;\n  uniform sampler2D u_texture;\n  uniform float u_lastMouseTime;\n  uniform vec2 u_lastMousePos;\n\n  vec2 hash22(vec2 p) {\n    p = vec2(\n      dot(p, vec2(127.1, 311.7)),\n      dot(p, vec2(269.5, 183.3))\n    );\n    return -1.0 + 2.0 * fract(sin(p) * 43758.5453123);\n  }\n\n  float gnoise(vec2 p) {\n    vec2 i = floor(p);\n    vec2 f = fract(p);\n    vec2 u = f*f*(3.0-2.0*f);\n    return mix(\n      mix(dot(hash22(i + vec2(0.0,0.0)), f - vec2(0.0,0.0)),\n          dot(hash22(i + vec2(1.0,0.0)), f - vec2(1.0,0.0)), u.x),\n      mix(dot(hash22(i + vec2(0.0,1.0)), f - vec2(0.0,1.0)),\n          dot(hash22(i + vec2(1.0,1.0)), f - vec2(1.0,1.0)), u.x),\n      u.y\n    );\n  }\n\n  float fbm(vec2 p){\n    float v = 0.0;\n    float a = 0.5;\n    for(int i = 0; i < 5; i++){\n      v += a * gnoise(p);\n      p = p * 2.0;\n      a *= 0.5;\n    }\n    return v;\n  }\n\n  void main() {\n    ivec2 texSize = textureSize(u_texture, 0);\n    float textureAspect = float(texSize.x) \/ float(texSize.y);\n    float screenAspect = u_resolution.x \/ u_resolution.y;\n\n    vec2 uv = v_uv;\n    float scale = screenAspect \/ textureAspect;\n    uv.y = (uv.y - 0.5) \/ scale + 0.5;\n\n    vec2 p = uv * 2.6;\n\n    float t = u_time * 0.01;\n    vec2 warp = vec2(\n      fbm(p + vec2(0.0, 1.7) + t),\n      fbm(p + vec2(9.2, 3.4) - t)\n    );\n\n    float n = fbm(p + warp * 2.3);\n    float ang = n * 6.2831853;\n    vec2 flow = vec2(cos(ang), sin(ang));\n\n    vec2 totalDisplacement = flow * 0.6;\n\n    if (u_mouse.x > 0.0 && u_mouse.y > 0.0) {\n      vec2 mouse = u_mouse \/ u_resolution;\n      mouse.y = (mouse.y - 0.5) \/ scale + 0.5;\n\n      float brushRadius = 0.1;\n\n      vec2 strokeDir = u_mouseDir;\n      float dirLen = length(strokeDir);\n      if (dirLen < 0.0001) strokeDir = vec2(1.0, 0.0);\n      else strokeDir \/= dirLen;\n\n      vec2 strokeTan = vec2(-strokeDir.y, strokeDir.x);\n\n      vec2 d = uv - mouse;\n      float along  = dot(d, strokeDir);\n      float across = dot(d, strokeTan);\n\n      float ell = (along*along)\/(brushRadius*brushRadius) + (across*across)\/(brushRadius*brushRadius);\n\n      float strokeMask = clamp(1.0 - ell, 0.0, 1.0);\n      strokeMask = pow(strokeMask, 2.2);\n\n      totalDisplacement += strokeDir * strokeMask * 0.4;\n    }\n\n    if (u_lastMousePos.x > 0.0 && u_lastMousePos.y > 0.0) {\n      vec2 lastMouse = u_lastMousePos \/ u_resolution;\n      lastMouse.y = (lastMouse.y - 0.5) \/ scale + 0.5;\n\n      float dist = distance(uv, lastMouse);\n      float brushRadius = .2;\n\n      if (dist < brushRadius) {\n        float normalizedDist = dist \/ brushRadius;\n        float falloff = pow(1.0 - normalizedDist, 1.5);\n\n        float timeSinceLastMouse = u_time - u_lastMouseTime;\n        float fade = clamp(1.0 - timeSinceLastMouse \/ 10.0, 0.0, 1.0);\n\n        if (fade > 0.0) {\n          vec2 dir = normalize(uv - lastMouse);\n          vec2 tangent = vec2(-dir.y, dir.x);\n          totalDisplacement += (dir * 1.0 + tangent * 0.2) * falloff * 0.1 * fade;\n        }\n      }\n    }\n\n    vec2 distortedUV = uv - totalDisplacement;\n    fragColor = texture(u_texture, distortedUV);\n  }`;\n\n  function compileShader(source, type) {\n    const shader = gl.createShader(type);\n    gl.shaderSource(shader, source);\n    gl.compileShader(shader);\n    if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n      console.error('Shader compile error:', gl.getShaderInfoLog(shader));\n      gl.deleteShader(shader);\n      return null;\n    }\n    return shader;\n  }\n\n  const program = gl.createProgram();\n  const vs = compileShader(vertexShader, gl.VERTEX_SHADER);\n  const fs = compileShader(fragmentShader, gl.FRAGMENT_SHADER);\n  gl.attachShader(program, vs);\n  gl.attachShader(program, fs);\n  gl.linkProgram(program);\n\n  if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n    console.error('Program link error:', gl.getProgramInfoLog(program));\n  }\n\n  const vertices = new Float32Array([-1,-1, 1,-1, -1,1, 1,1]);\n  const vertexBuffer = gl.createBuffer();\n  gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);\n  gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);\n\n  gl.useProgram(program);\n\n  const positionLoc = gl.getAttribLocation(program, 'position');\n  const timeLoc = gl.getUniformLocation(program, 'u_time');\n  const resolutionLoc = gl.getUniformLocation(program, 'u_resolution');\n  const mouseLoc = gl.getUniformLocation(program, 'u_mouse');\n  const mouseDirLoc = gl.getUniformLocation(program, 'u_mouseDir');\n  const mouseSpeedLoc = gl.getUniformLocation(program, 'u_mouseSpeed');\n  const textureLoc = gl.getUniformLocation(program, 'u_texture');\n  const lastMouseTimeLoc = gl.getUniformLocation(program, 'u_lastMouseTime');\n  const lastMousePosLoc = gl.getUniformLocation(program, 'u_lastMousePos');\n\n  const vao = gl.createVertexArray();\n  gl.bindVertexArray(vao);\n  gl.enableVertexAttribArray(positionLoc);\n  gl.vertexAttribPointer(positionLoc, 2, gl.FLOAT, false, 0, 0);\n\n  const texture = gl.createTexture();\n  gl.bindTexture(gl.TEXTURE_2D, texture);\n  gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, new Uint8Array([255,255,255,255]));\n  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n\n  const image = new Image();\n  image.crossOrigin = 'anonymous';\n  image.onload = function () {\n    gl.bindTexture(gl.TEXTURE_2D, texture);\n    gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);\n  };\n  image.src = 'https:\/\/vibrastudio.ch\/wp-content\/uploads\/2026\/02\/ShaderImgMosaic2.jpg';\n\n  let mouseX = 0, mouseY = 0;\n  let lastMouseX = 0, lastMouseY = 0, lastMouseTime = 0;\n  let mouseActive = false;\n\n  let prevMouseX = 0, prevMouseY = 0;\n  let mouseDirX = 1, mouseDirY = 0;\n  let mouseSpeed = 0;\n\n  const DIR_SMOOTH = 0.15;\n  const SPD_SMOOTH = 0.20;\n  const SPEED_SCALE = 1200;\n\n  document.addEventListener('mousemove', (e) => {\n    const dpr = window.devicePixelRatio || 1;\n\n    const newX = e.clientX * dpr;\n    const newY = (window.innerHeight - e.clientY) * dpr;\n\n    const dx = newX - prevMouseX;\n    const dy = newY - prevMouseY;\n\n    prevMouseX = newX;\n    prevMouseY = newY;\n\n    const len = Math.hypot(dx, dy);\n\n    if (len > 0.5) {\n      const ndx = dx \/ len;\n      const ndy = dy \/ len;\n\n      mouseDirX = mouseDirX * (1 - DIR_SMOOTH) + ndx * DIR_SMOOTH;\n      mouseDirY = mouseDirY * (1 - DIR_SMOOTH) + ndy * DIR_SMOOTH;\n\n      const dlen = Math.hypot(mouseDirX, mouseDirY) || 1;\n      mouseDirX \/= dlen;\n      mouseDirY \/= dlen;\n    }\n\n    const instSpeed = Math.min(1, len \/ SPEED_SCALE);\n    mouseSpeed = mouseSpeed * (1 - SPD_SMOOTH) + instSpeed * SPD_SMOOTH;\n\n    mouseX = newX;\n    mouseY = newY;\n\n    lastMouseX = mouseX;\n    lastMouseY = mouseY;\n    lastMouseTime = performance.now() \/ 1000;\n    mouseActive = true;\n  });\n\n  document.addEventListener('mouseleave', () => { mouseActive = false; });\n  document.addEventListener('mouseenter', () => { mouseActive = true; });\n\n  let startTime = Date.now();\n\n  function animate() {\n    const currentTime = (Date.now() - startTime) * 0.001;\n\n    gl.clearColor(0, 0, 0, 0);\n    gl.clear(gl.COLOR_BUFFER_BIT);\n\n    gl.useProgram(program);\n    gl.bindVertexArray(vao);\n\n    gl.uniform1f(timeLoc, currentTime);\n    gl.uniform2f(resolutionLoc, canvas.width, canvas.height);\n\n    if (mouseActive && mouseX > 0 && mouseY > 0) {\n      gl.uniform2f(mouseLoc, mouseX, mouseY);\n      gl.uniform2f(mouseDirLoc, mouseDirX, mouseDirY);\n      gl.uniform1f(mouseSpeedLoc, mouseSpeed);\n    } else {\n      gl.uniform2f(mouseLoc, -1, -1);\n      gl.uniform2f(mouseDirLoc, 1, 0);\n      gl.uniform1f(mouseSpeedLoc, 0);\n    }\n\n    gl.uniform1f(lastMouseTimeLoc, lastMouseTime);\n    gl.uniform2f(lastMousePosLoc, lastMouseX, lastMouseY);\n\n    gl.activeTexture(gl.TEXTURE0);\n    gl.bindTexture(gl.TEXTURE_2D, texture);\n    gl.uniform1i(textureLoc, 0);\n\n    gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n    requestAnimationFrame(animate);\n  }\n\n  requestAnimationFrame(animate);\n});\n<\/script>\n\n\n\n<div class=\"wp-block-columns alignwide is-not-stacked-on-mobile is-layout-flex wp-container-core-columns-is-layout-1c3c8fb3 wp-block-columns-is-layout-flex\" style=\"margin-top:0;margin-bottom:0;padding-top:0;padding-right:var(--wp--preset--spacing--30);padding-bottom:0;padding-left:0\">\n<div class=\"wp-block-column is-vertically-aligned-bottom agl agl-fadeCSS agl-in-duration-500 agl-in-distance-1 is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:5%\">\n<h1 class=\"wp-block-heading has-text-align-right has-contrast-color has-text-color has-link-color has-large-font-size wp-elements-259def865eec823bfb6f7084d81cb2e7\" style=\"writing-mode:vertical-rl\"><strong>Services<\/strong><\/h1>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-vertically-aligned-bottom agl agl-fadeCSS agl-in-duration-500 agl-in-distance-1 is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:5%\"><\/div>\n\n\n\n<div class=\"wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow\" style=\"padding-right:0;padding-left:0;flex-basis:100%\">\n<p class=\"has-text-align-left is-style-default has-text-color has-link-color agl agl-slideCSS agl-in-distance-1 wp-elements-af86972333c95901c2ed9bac7dda3d45\" style=\"color:#ffffff;font-size:clamp(33.419px, 2.089rem + ((1vw - 3.2px) * 2.769), 60px);\"><strong>Game Development<\/strong><\/p>\n\n\n\n<p class=\"has-text-align-center is-style-default has-text-color has-link-color agl agl-slideCSS agl-in-delay-150 agl-in-distance-1 wp-elements-88eceb526ef0081c1617440f8240a778\" style=\"color:#ffffff;font-size:clamp(33.419px, 2.089rem + ((1vw - 3.2px) * 2.769), 60px);\"><strong>Light Art Installations<\/strong><\/p>\n\n\n\n<p class=\"has-text-align-right is-style-default has-text-color has-link-color agl agl-slideCSS agl-in-delay-300 agl-in-distance-1 wp-elements-d6e91acecb6352ed094afc19128847f6\" style=\"color:#ffffff;font-size:clamp(33.419px, 2.089rem + ((1vw - 3.2px) * 2.769), 60px);\"><strong>Concert Visuals<\/strong><\/p>\n\n\n\n<p class=\"has-text-align-right is-style-default agl agl-slideCSS agl-in-delay-500 agl-in-distance-1\" style=\"font-size:clamp(18.959px, 1.185rem + ((1vw - 3.2px) * 1.15), 30px);\"><mark style=\"background-color:rgba(0, 0, 0, 0);color:#e04500\" class=\"has-inline-color\"><strong>&#8230;CAN&#8217;T WAIT TO GET STARTED.<\/strong><\/mark><\/p>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-group alignfull has-global-padding is-layout-constrained wp-block-group-is-layout-constrained\">\n<div class=\"wp-block-group alignfull agl agl-fadeCSS agl-in-duration-500 agl-in-delay-2000 agl-in-distance-1 has-global-padding is-layout-constrained wp-container-core-group-is-layout-7db9d80f wp-block-group-is-layout-constrained\" style=\"padding-right:0;padding-left:0\">\n<div class=\"wp-block-columns alignwide is-layout-flex wp-container-core-columns-is-layout-9268e81d wp-block-columns-is-layout-flex\" style=\"border-top-left-radius:20px;border-top-right-radius:20px;border-bottom-left-radius:20px;border-bottom-right-radius:20px;margin-top:var(--wp--preset--spacing--10);margin-bottom:var(--wp--preset--spacing--10);padding-top:0;padding-right:0;padding-bottom:0;padding-left:0\">\n<div class=\"wp-block-column has-global-padding is-content-justification-left is-layout-constrained wp-container-core-column-is-layout-4f15e8fe wp-block-column-is-layout-constrained\" style=\"flex-basis:31%\"><\/div>\n\n\n\n<div class=\"wp-block-column is-vertically-aligned-top has-base-background-color has-background has-global-padding is-content-justification-left is-layout-constrained wp-container-core-column-is-layout-8a6b3ef9 wp-block-column-is-layout-constrained\" style=\"border-top-left-radius:20px;border-top-right-radius:20px;border-bottom-left-radius:20px;border-bottom-right-radius:20px;padding-top:var(--wp--preset--spacing--10);padding-right:var(--wp--preset--spacing--10);padding-bottom:var(--wp--preset--spacing--10);padding-left:var(--wp--preset--spacing--10);flex-basis:70%\">\n<div class=\"wp-block-columns alignfull is-layout-flex wp-container-core-columns-is-layout-a75f95b3 wp-block-columns-is-layout-flex\" style=\"margin-top:0;margin-bottom:0;padding-right:var(--wp--preset--spacing--10);padding-left:var(--wp--preset--spacing--10)\">\n<div class=\"wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:70%\">\n<p class=\"has-text-align-left has-text-color has-link-color wp-elements-505b15e2caefbf9d2cb94159b55bb277\" style=\"color:#ffffff\"><strong>Based in Switzerland. Available for selected projects<\/strong>.<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"padding-right:var(--wp--preset--spacing--20);flex-basis:30%\">\n<div class=\"wp-block-buttons is-content-justification-right is-layout-flex wp-container-core-buttons-is-layout-5b03baad wp-block-buttons-is-layout-flex\" style=\"padding-top:0;padding-right:0;padding-bottom:0;padding-left:0\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"mailto:roger@vibrastudio.ch\" target=\"_blank\" rel=\"noreferrer noopener\">Contact<\/a><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-group alignwide has-base-background-color has-background has-global-padding is-layout-constrained wp-container-core-group-is-layout-8adaa8bf wp-block-group-is-layout-constrained\" style=\"border-top-left-radius:20px;border-top-right-radius:20px;border-bottom-left-radius:20px;border-bottom-right-radius:20px;margin-top:0;margin-bottom:0;padding-top:var(--wp--preset--spacing--30);padding-right:var(--wp--preset--spacing--30);padding-bottom:var(--wp--preset--spacing--30);padding-left:var(--wp--preset--spacing--30)\">\n<div class=\"wp-block-columns alignwide is-layout-flex wp-container-core-columns-is-layout-98fb3ab0 wp-block-columns-is-layout-flex\" style=\"border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-left-radius:0px;border-bottom-right-radius:0px;padding-top:0;padding-right:0;padding-bottom:0;padding-left:0\">\n<div class=\"wp-block-column has-global-padding is-content-justification-left is-layout-constrained wp-container-core-column-is-layout-4f15e8fe wp-block-column-is-layout-constrained\" style=\"flex-basis:30%\">\n<h2 class=\"wp-block-heading has-text-align-left has-contrast-color has-text-color has-link-color wp-elements-0da9d6dbaf29837b7e46877c134feacc\"><strong>Game development<\/strong><\/h2>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-container-core-column-is-layout-92c44e9e wp-block-column-is-layout-flow\" style=\"padding-top:0;padding-bottom:0;flex-basis:70%\">\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-a85f4655 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<p class=\"has-text-color has-link-color wp-elements-63324652c75ee3a27e9d349ef7d07041\" style=\"color:#ffffff\"><strong>Location Based | PC | Console | VR \/ XR | Mobile<\/strong><br>As a member of Stray Fawn Studio since its foundation, I\u2019ve contributed to multiple successful titles across PC, console, and mobile. An experience that strongly influences my work as VIBRA. Using game development as my toolset and experience at live events I build bridges between the virtual and physical world.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: true, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion alignwide is-layout-flow wp-block-accordion-is-layout-flow\" style=\"padding-right:0;padding-left:0\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-5&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-custom-color-2-color has-text-color has-link-color has-body-font-family has-medium-font-size wp-elements-dd4892f053120776e836ba2926efcdca\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-5-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-5\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><span class=\"wp-block-accordion-heading__toggle-title\"><strong>Selected works<\/strong><\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-5\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-5-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<div class=\"wp-block-group is-layout-grid wp-container-core-group-is-layout-4746a33a wp-block-group-is-layout-grid\" style=\"margin-top:0;margin-bottom:0;padding-top:0;padding-bottom:0\">\n<div class=\"wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-ce155fab wp-block-group-is-layout-flex\">\n<div class=\"wp-block-group portfolio-wrapper has-global-padding is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image is-style-rounded is-style-rounded--1\"><a href=\"https:\/\/vibrastudio.ch\/?page_id=337\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"400\" src=\"https:\/\/vibrastudio.ch\/wp-content\/uploads\/2026\/02\/ShowcaseTheWanderingVillageStrayFawnStudio-1.jpg\" alt=\"\" class=\"wp-image-1042\" srcset=\"https:\/\/vibrastudio.ch\/wp-content\/uploads\/2026\/02\/ShowcaseTheWanderingVillageStrayFawnStudio-1.jpg 300w, https:\/\/vibrastudio.ch\/wp-content\/uploads\/2026\/02\/ShowcaseTheWanderingVillageStrayFawnStudio-1-225x300.jpg 225w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/figure>\n<\/div>\n\n\n\n<p class=\"has-text-align-center has-text-color has-link-color has-medium-font-size wp-elements-29dbaec7d609243b3a44fdb84398c90c\" style=\"color:#ffffff\"><strong>The Wandering Village<\/strong><\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-ce155fab wp-block-group-is-layout-flex\">\n<div class=\"wp-block-group portfolio-wrapper has-global-padding is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image is-style-rounded is-style-rounded--2\"><a href=\"https:\/\/vibrastudio.ch\/?page_id=432\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"400\" src=\"https:\/\/vibrastudio.ch\/wp-content\/uploads\/2026\/02\/ShowcaseNimbatusTheSpaceDroneConstructor.jpg\" alt=\"\" class=\"wp-image-1023\" srcset=\"https:\/\/vibrastudio.ch\/wp-content\/uploads\/2026\/02\/ShowcaseNimbatusTheSpaceDroneConstructor.jpg 300w, https:\/\/vibrastudio.ch\/wp-content\/uploads\/2026\/02\/ShowcaseNimbatusTheSpaceDroneConstructor-225x300.jpg 225w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/figure>\n<\/div>\n\n\n\n<p class=\"has-text-align-center has-text-color has-link-color has-medium-font-size wp-elements-2132960c9b867538e892f525460c087b\" style=\"color:#ffffff\"><strong>Nimbatus &#8211; The Space Drone Constructor<\/strong><\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-ce155fab wp-block-group-is-layout-flex\">\n<div class=\"wp-block-group portfolio-wrapper has-global-padding is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image is-style-rounded is-style-rounded--3\"><a href=\"https:\/\/vibrastudio.ch\/?page_id=488\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"400\" src=\"https:\/\/vibrastudio.ch\/wp-content\/uploads\/2026\/02\/ShowcaseVirtuAllalin.jpg\" alt=\"\" class=\"wp-image-1033\" srcset=\"https:\/\/vibrastudio.ch\/wp-content\/uploads\/2026\/02\/ShowcaseVirtuAllalin.jpg 300w, https:\/\/vibrastudio.ch\/wp-content\/uploads\/2026\/02\/ShowcaseVirtuAllalin-225x300.jpg 225w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/figure>\n<\/div>\n\n\n\n<p class=\"has-text-align-center has-text-color has-link-color has-medium-font-size wp-elements-921bd7dfbc3b9953c97c40a9a159df55\" style=\"color:#ffffff\"><strong>VirtuAllalin<\/strong><\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-ce155fab wp-block-group-is-layout-flex\">\n<div class=\"wp-block-group portfolio-wrapper has-global-padding is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image is-style-rounded is-style-rounded--4\"><a href=\"https:\/\/vibrastudio.ch\/?page_id=456\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"400\" src=\"https:\/\/vibrastudio.ch\/wp-content\/uploads\/2026\/02\/ShowcaseNicheAGeneticsSurvivalGame.jpg\" alt=\"\" class=\"wp-image-1020\" srcset=\"https:\/\/vibrastudio.ch\/wp-content\/uploads\/2026\/02\/ShowcaseNicheAGeneticsSurvivalGame.jpg 300w, https:\/\/vibrastudio.ch\/wp-content\/uploads\/2026\/02\/ShowcaseNicheAGeneticsSurvivalGame-225x300.jpg 225w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/figure>\n<\/div>\n\n\n\n<p class=\"has-text-align-center has-text-color has-link-color has-medium-font-size wp-elements-b81a81c7a274ec00dbf21a8390f46337\" style=\"color:#ffffff\"><strong>Niche &#8211; A genetics survival game<\/strong><\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-group alignwide has-base-background-color has-background has-global-padding is-layout-constrained wp-container-core-group-is-layout-2f70d104 wp-block-group-is-layout-constrained\" style=\"border-top-left-radius:20px;border-top-right-radius:20px;border-bottom-left-radius:20px;border-bottom-right-radius:20px;padding-top:var(--wp--preset--spacing--30);padding-right:var(--wp--preset--spacing--30);padding-bottom:var(--wp--preset--spacing--30);padding-left:var(--wp--preset--spacing--30)\">\n<div class=\"wp-block-columns alignwide is-layout-flex wp-container-core-columns-is-layout-98fb3ab0 wp-block-columns-is-layout-flex\" style=\"border-top-left-radius:20px;border-top-right-radius:20px;border-bottom-left-radius:20px;border-bottom-right-radius:20px;padding-top:0;padding-right:0;padding-bottom:0;padding-left:0\">\n<div class=\"wp-block-column has-global-padding is-content-justification-left is-layout-constrained wp-container-core-column-is-layout-4f15e8fe wp-block-column-is-layout-constrained\" style=\"flex-basis:30%\">\n<h2 class=\"wp-block-heading has-text-align-left has-contrast-color has-text-color has-link-color wp-elements-577fd3a37b5d972e8d2b9f1254a4a0f3\"><strong>Light Art Installations<\/strong><\/h2>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-container-core-column-is-layout-92c44e9e wp-block-column-is-layout-flow\" style=\"padding-top:0;padding-bottom:0;flex-basis:70%\">\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-a85f4655 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<p class=\"has-text-color has-link-color wp-elements-a604b7b138bd8e58820f74e4462e2b8f\" style=\"color:#ffffff\"><strong>Interactive Installation | Projection Mapping | Animation<\/strong><br>When winter comes and the days get shorter, Light Festival season begins and I get to shine. I&#8217;m passionate about light art as every installation comes with its own challenges, from new inventions in unusual spaces to technical limitations. Solving them is one part of the magic. The other is seeing visitors stop in awe, interact, and share a moment of joy.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: true, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion alignwide is-layout-flow wp-block-accordion-is-layout-flow\" style=\"padding-right:0;padding-left:0\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-10&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-custom-color-2-color has-text-color has-link-color has-body-font-family has-medium-font-size wp-elements-dd4892f053120776e836ba2926efcdca\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-10-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-10\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><span class=\"wp-block-accordion-heading__toggle-title\"><strong>Selected works<\/strong><\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-10\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-10-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<div class=\"wp-block-group is-layout-grid wp-container-core-group-is-layout-4746a33a wp-block-group-is-layout-grid\" style=\"margin-top:0;margin-bottom:0;padding-top:0;padding-bottom:0\">\n<div class=\"wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-ce155fab wp-block-group-is-layout-flex\">\n<div class=\"wp-block-group portfolio-wrapper has-global-padding is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image size-full is-style-rounded is-style-rounded--6\"><a href=\"https:\/\/vibrastudio.ch\/?page_id=268\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"400\" src=\"https:\/\/vibrastudio.ch\/wp-content\/uploads\/2026\/02\/ShowcaseWuselhain-1.jpg\" alt=\"\" class=\"wp-image-1039\" srcset=\"https:\/\/vibrastudio.ch\/wp-content\/uploads\/2026\/02\/ShowcaseWuselhain-1.jpg 300w, https:\/\/vibrastudio.ch\/wp-content\/uploads\/2026\/02\/ShowcaseWuselhain-1-225x300.jpg 225w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/figure>\n<\/div>\n\n\n\n<p class=\"has-text-align-center has-text-color has-link-color has-medium-font-size wp-elements-3fc04f1642c53ba807af924a1a1a84e5\" style=\"color:#ffffff\"><strong>Der Wuselhain<\/strong><\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-ce155fab wp-block-group-is-layout-flex\">\n<div class=\"wp-block-group portfolio-wrapper has-global-padding is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image size-full is-style-rounded is-style-rounded--7\"><a href=\"https:\/\/vibrastudio.ch\/?page_id=668\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"400\" src=\"https:\/\/vibrastudio.ch\/wp-content\/uploads\/2026\/02\/ShowcaseLowendenkmal.jpg\" alt=\"\" class=\"wp-image-1021\" srcset=\"https:\/\/vibrastudio.ch\/wp-content\/uploads\/2026\/02\/ShowcaseLowendenkmal.jpg 300w, https:\/\/vibrastudio.ch\/wp-content\/uploads\/2026\/02\/ShowcaseLowendenkmal-225x300.jpg 225w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/figure>\n<\/div>\n\n\n\n<p class=\"has-text-align-center has-text-color has-link-color has-medium-font-size wp-elements-1f4016fb9e56439913186e0e2f173a22\" style=\"color:#ffffff\"><strong>Concrete Jungle<\/strong><\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-ce155fab wp-block-group-is-layout-flex\">\n<div class=\"wp-block-group portfolio-wrapper has-global-padding is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image size-full is-style-rounded is-style-rounded--8\"><a href=\"https:\/\/vibrastudio.ch\/?page_id=530\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"400\" src=\"https:\/\/vibrastudio.ch\/wp-content\/uploads\/2026\/02\/ShowcaseFrostorchester.jpg\" alt=\"\" class=\"wp-image-1031\" srcset=\"https:\/\/vibrastudio.ch\/wp-content\/uploads\/2026\/02\/ShowcaseFrostorchester.jpg 300w, https:\/\/vibrastudio.ch\/wp-content\/uploads\/2026\/02\/ShowcaseFrostorchester-225x300.jpg 225w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/figure>\n<\/div>\n\n\n\n<p class=\"has-text-align-center has-text-color has-link-color has-medium-font-size wp-elements-4fdf52f783e3dade91e846aeff3cd755\" style=\"color:#ffffff\"><strong>Frostorchester<\/strong><\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-ce155fab wp-block-group-is-layout-flex\">\n<div class=\"wp-block-group portfolio-wrapper has-global-padding is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image size-full is-style-rounded is-style-rounded--9\"><a href=\"https:\/\/vibrastudio.ch\/?page_id=808\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"400\" src=\"https:\/\/vibrastudio.ch\/wp-content\/uploads\/2026\/02\/ShowcaseTorbogenLuzernLilu.jpg\" alt=\"\" class=\"wp-image-1014\" srcset=\"https:\/\/vibrastudio.ch\/wp-content\/uploads\/2026\/02\/ShowcaseTorbogenLuzernLilu.jpg 300w, https:\/\/vibrastudio.ch\/wp-content\/uploads\/2026\/02\/ShowcaseTorbogenLuzernLilu-225x300.jpg 225w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/figure>\n<\/div>\n\n\n\n<p class=\"has-text-align-center has-text-color has-link-color has-medium-font-size wp-elements-6e790f33d3570aecd7e7cd2c0f02259c\" style=\"color:#ffffff\"><strong>Torbogen Luzern<\/strong><\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-group alignwide has-base-background-color has-background has-global-padding is-layout-constrained wp-container-core-group-is-layout-466948bd wp-block-group-is-layout-constrained\" style=\"border-top-left-radius:20px;border-top-right-radius:20px;border-bottom-left-radius:20px;border-bottom-right-radius:20px;padding-top:var(--wp--preset--spacing--30);padding-right:var(--wp--preset--spacing--30);padding-bottom:var(--wp--preset--spacing--30);padding-left:var(--wp--preset--spacing--30)\">\n<div class=\"wp-block-columns alignwide is-layout-flex wp-container-core-columns-is-layout-98fb3ab0 wp-block-columns-is-layout-flex\" style=\"border-top-left-radius:20px;border-top-right-radius:20px;border-bottom-left-radius:20px;border-bottom-right-radius:20px;padding-top:0;padding-right:0;padding-bottom:0;padding-left:0\">\n<div class=\"wp-block-column has-global-padding is-content-justification-left is-layout-constrained wp-container-core-column-is-layout-4f15e8fe wp-block-column-is-layout-constrained\" style=\"flex-basis:30%\">\n<h2 class=\"wp-block-heading has-text-align-left has-contrast-color has-text-color has-link-color wp-elements-9fdb29b5378c69a90fe21c9cad15d2c5\"><strong>Concert Visuals<\/strong><\/h2>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-container-core-column-is-layout-92c44e9e wp-block-column-is-layout-flow\" style=\"padding-top:0;padding-bottom:0;flex-basis:70%\">\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-a85f4655 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<p class=\"has-text-color has-link-color wp-elements-7cd5fdde30498043bfe97fe6fed4ea4a\" style=\"color:#ffffff\"><strong>Festival | Club | Concert | Rave<\/strong><br>From underground venues to the biggest stages, I\u2019ve built years of experience creating live visuals through long nights, often with short preparation time. Today, I handpick special occasions and give each show the time it deserves. Less routine, more intention, and unforgettable moments for both the audience and myself.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: true, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion alignwide is-layout-flow wp-block-accordion-is-layout-flow\" style=\"padding-right:0;padding-left:0\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-15&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-custom-color-2-color has-text-color has-link-color has-body-font-family has-medium-font-size wp-elements-dd4892f053120776e836ba2926efcdca\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-15-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-15\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><span class=\"wp-block-accordion-heading__toggle-title\"><strong>Selected works<\/strong><\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-15\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-15-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<div class=\"wp-block-group is-layout-grid wp-container-core-group-is-layout-4746a33a wp-block-group-is-layout-grid\" style=\"margin-top:0;margin-bottom:0;padding-top:0;padding-bottom:0\">\n<div class=\"wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-ce155fab wp-block-group-is-layout-flex\">\n<div class=\"wp-block-group portfolio-wrapper has-global-padding is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image size-full is-style-rounded is-style-rounded--11\"><a href=\"https:\/\/vibrastudio.ch\/?page_id=577\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"400\" src=\"https:\/\/vibrastudio.ch\/wp-content\/uploads\/2026\/02\/ShowcaseStreetParadeMainStage.jpg\" alt=\"\" class=\"wp-image-1029\" srcset=\"https:\/\/vibrastudio.ch\/wp-content\/uploads\/2026\/02\/ShowcaseStreetParadeMainStage.jpg 300w, https:\/\/vibrastudio.ch\/wp-content\/uploads\/2026\/02\/ShowcaseStreetParadeMainStage-225x300.jpg 225w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/figure>\n<\/div>\n\n\n\n<p class=\"has-text-align-center has-text-color has-link-color has-medium-font-size wp-elements-c69cceb8caac1e38d448f199d30e495b\" style=\"color:#ffffff\"><strong>Street Parade<\/strong><\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-ce155fab wp-block-group-is-layout-flex\">\n<div class=\"wp-block-group portfolio-wrapper has-global-padding is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image size-full is-style-rounded is-style-rounded--12\"><a href=\"https:\/\/vibrastudio.ch\/?page_id=697\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"400\" src=\"https:\/\/vibrastudio.ch\/wp-content\/uploads\/2026\/02\/ShowcaseMax.jpg\" alt=\"\" class=\"wp-image-1018\" srcset=\"https:\/\/vibrastudio.ch\/wp-content\/uploads\/2026\/02\/ShowcaseMax.jpg 300w, https:\/\/vibrastudio.ch\/wp-content\/uploads\/2026\/02\/ShowcaseMax-225x300.jpg 225w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/figure>\n<\/div>\n\n\n\n<p class=\"has-text-align-center has-text-color has-link-color has-medium-font-size wp-elements-c399fe0fcabc259152ee54a76bc18f3e\" style=\"color:#ffffff\"><strong>M\u00e4x Club<\/strong><\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-ce155fab wp-block-group-is-layout-flex\">\n<div class=\"wp-block-group portfolio-wrapper has-global-padding is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image size-full is-style-rounded is-style-rounded--13\"><a href=\"https:\/\/vibrastudio.ch\/?page_id=828\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"400\" src=\"https:\/\/vibrastudio.ch\/wp-content\/uploads\/2026\/02\/ShowcaseTerrazzzaHorsesPark.jpg\" alt=\"\" class=\"wp-image-1013\" srcset=\"https:\/\/vibrastudio.ch\/wp-content\/uploads\/2026\/02\/ShowcaseTerrazzzaHorsesPark.jpg 300w, https:\/\/vibrastudio.ch\/wp-content\/uploads\/2026\/02\/ShowcaseTerrazzzaHorsesPark-225x300.jpg 225w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/figure>\n<\/div>\n\n\n\n<p class=\"has-text-align-center has-text-color has-link-color has-medium-font-size wp-elements-34e2f4ad46facbe69d3880ce37e6316e\" style=\"color:#ffffff\"><strong>Terrazzza<\/strong><\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-ce155fab wp-block-group-is-layout-flex\">\n<div class=\"wp-block-group portfolio-wrapper has-global-padding is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image size-full is-style-rounded is-style-rounded--14\"><a href=\"https:\/\/vibrastudio.ch\/?page_id=757\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"400\" src=\"https:\/\/vibrastudio.ch\/wp-content\/uploads\/2026\/02\/ShowcaseSunIceStMoritz.jpg\" alt=\"\" class=\"wp-image-1016\" srcset=\"https:\/\/vibrastudio.ch\/wp-content\/uploads\/2026\/02\/ShowcaseSunIceStMoritz.jpg 300w, https:\/\/vibrastudio.ch\/wp-content\/uploads\/2026\/02\/ShowcaseSunIceStMoritz-225x300.jpg 225w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/figure>\n<\/div>\n\n\n\n<p class=\"has-text-align-center has-text-color has-link-color has-medium-font-size wp-elements-fc68205e12f21cb5e023fc21ef695911\" style=\"color:#ffffff\"><strong>SunIce Festival<\/strong><\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-group alignwide has-base-background-color has-background has-global-padding is-layout-constrained wp-container-core-group-is-layout-466948bd wp-block-group-is-layout-constrained\" style=\"border-top-left-radius:20px;border-top-right-radius:20px;border-bottom-left-radius:20px;border-bottom-right-radius:20px;padding-top:var(--wp--preset--spacing--30);padding-right:var(--wp--preset--spacing--30);padding-bottom:var(--wp--preset--spacing--30);padding-left:var(--wp--preset--spacing--30)\">\n<div class=\"wp-block-columns alignwide is-layout-flex wp-container-core-columns-is-layout-98fb3ab0 wp-block-columns-is-layout-flex\" style=\"border-top-left-radius:20px;border-top-right-radius:20px;border-bottom-left-radius:20px;border-bottom-right-radius:20px;padding-top:0;padding-right:0;padding-bottom:0;padding-left:0\">\n<div class=\"wp-block-column has-global-padding is-content-justification-left is-layout-constrained wp-container-core-column-is-layout-4f15e8fe wp-block-column-is-layout-constrained\" style=\"flex-basis:30%\">\n<h2 class=\"wp-block-heading has-text-align-left has-contrast-color has-text-color has-link-color wp-elements-958eb72dc34f941ca9f0ef2d21e633ab\"><strong>Tools &amp; Skills<\/strong><\/h2>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-container-core-column-is-layout-92c44e9e wp-block-column-is-layout-flow\" style=\"padding-top:0;padding-bottom:0;flex-basis:70%\">\n<div class=\"wp-block-columns awards-columns is-layout-flex wp-container-core-columns-is-layout-a85f4655 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:50%\">\n<p class=\"has-text-align-right wp-container-content-9cfa9a5a\"><mark style=\"background-color:rgba(0, 0, 0, 0);color:#cfbbe9\" class=\"has-inline-color\">Live Performance<\/mark><\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:50%\">\n<p class=\"wp-container-content-9cfa9a5a\"><mark style=\"background-color:rgba(0, 0, 0, 0);color:#ffffff\" class=\"has-inline-color\"><mark style=\"background-color:rgba(0, 0, 0, 0);color:#ffffff\" class=\"has-inline-color\">Resolume, Wire, Live Cam<\/mark><\/mark><\/p>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns awards-columns is-layout-flex wp-container-core-columns-is-layout-a85f4655 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:50%\">\n<p class=\"has-text-align-right wp-container-content-9cfa9a5a\"><mark style=\"background-color:rgba(0, 0, 0, 0);color:#cfbbe9\" class=\"has-inline-color\">Real-Time &amp; Interactive<\/mark><\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:50%\">\n<p class=\"wp-container-content-9cfa9a5a\"><mark style=\"background-color:rgba(0, 0, 0, 0);color:#ffffff\" class=\"has-inline-color\">Unity Engine<\/mark><\/p>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns awards-columns is-layout-flex wp-container-core-columns-is-layout-a85f4655 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:50%\">\n<p class=\"has-text-align-right wp-container-content-9cfa9a5a\"><mark style=\"background-color:rgba(0, 0, 0, 0);color:#cfbbe9\" class=\"has-inline-color\">Technical Integration<\/mark><\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:50%\">\n<p class=\"wp-container-content-9cfa9a5a\"><mark style=\"background-color:rgba(0, 0, 0, 0);color:#ffffff\" class=\"has-inline-color\">C#, DMX, Art-Net<\/mark><\/p>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns awards-columns is-layout-flex wp-container-core-columns-is-layout-a85f4655 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:50%\">\n<p class=\"has-text-align-right wp-container-content-9cfa9a5a\"><mark style=\"background-color:rgba(0, 0, 0, 0);color:#cfbbe9\" class=\"has-inline-color\">Design<\/mark><\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:50%\">\n<p class=\"wp-container-content-9cfa9a5a\"><mark style=\"background-color:rgba(0, 0, 0, 0);color:#ffffff\" class=\"has-inline-color\">Adobe Suite<\/mark><\/p>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns awards-columns is-layout-flex wp-container-core-columns-is-layout-a85f4655 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:50%\">\n<p class=\"has-text-align-right wp-container-content-9cfa9a5a\"><mark style=\"background-color:rgba(0, 0, 0, 0);color:#cfbbe9\" class=\"has-inline-color\">3D<\/mark><\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:50%\">\n<p class=\"has-text-color has-link-color wp-elements-5305c22a204b2dbceca47dc597435f9d wp-container-content-9cfa9a5a\" style=\"color:#ffffff\"><mark style=\"background-color:rgba(0, 0, 0, 0);color:#ffffff\" class=\"has-inline-color\">Blender, C4D, ZBrush, Nomad Sculpt, RizomUV, TopoGun<\/mark> <\/p>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns awards-columns is-layout-flex wp-container-core-columns-is-layout-a85f4655 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:50%\">\n<p class=\"has-text-align-right wp-container-content-9cfa9a5a\"><mark style=\"background-color:rgba(0, 0, 0, 0);color:#cfbbe9\" class=\"has-inline-color\">2D<\/mark><\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:50%\">\n<p class=\"has-text-color has-link-color wp-elements-01cd05916e27a8f7a4fdcab0b009075c wp-container-content-9cfa9a5a\" style=\"color:#ffffff\"><mark style=\"background-color:rgba(0, 0, 0, 0);color:#ffffff\" class=\"has-inline-color\">Infinity Painter, Rough Animator<\/mark>, Substance Painter, Substance Designer, Traditional<\/p>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns awards-columns is-layout-flex wp-container-core-columns-is-layout-a85f4655 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:50%\">\n<p class=\"has-text-align-right wp-container-content-9cfa9a5a\"><mark style=\"background-color:rgba(0, 0, 0, 0);color:#cfbbe9\" class=\"has-inline-color\">Core focus<\/mark><\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:50%\">\n<p class=\"has-text-color has-link-color wp-elements-ab9638472c94ea033d3f71c59bfb1fac wp-container-content-9cfa9a5a\" style=\"color:#ffffff\">User experience, <mark style=\"background-color:rgba(0, 0, 0, 0);color:#ffffff\" class=\"has-inline-color\">Technical Art, Illustration, Sculpting, Frame by Fra<\/mark>me<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div><\/div>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-2457","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/vibrastudio.ch\/index.php?rest_route=\/wp\/v2\/pages\/2457","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vibrastudio.ch\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/vibrastudio.ch\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/vibrastudio.ch\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vibrastudio.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2457"}],"version-history":[{"count":157,"href":"https:\/\/vibrastudio.ch\/index.php?rest_route=\/wp\/v2\/pages\/2457\/revisions"}],"predecessor-version":[{"id":3006,"href":"https:\/\/vibrastudio.ch\/index.php?rest_route=\/wp\/v2\/pages\/2457\/revisions\/3006"}],"wp:attachment":[{"href":"https:\/\/vibrastudio.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2457"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}