{"id":2,"date":"2026-01-03T12:54:16","date_gmt":"2026-01-03T12:54:16","guid":{"rendered":"https:\/\/vibrastudio.ch\/?page_id=2"},"modified":"2026-03-16T13:29:40","modified_gmt":"2026-03-16T12:29:40","slug":"about-me","status":"publish","type":"page","link":"https:\/\/vibrastudio.ch\/?page_id=2","title":{"rendered":"About me"},"content":{"rendered":"\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-cover alignfull is-light\" style=\"margin-top:0;margin-bottom:0;padding-top:0;padding-right:0;padding-bottom:0;padding-left:0;min-height:20%;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-container-core-cover-is-layout-4adc878f wp-block-cover-is-layout-constrained\">\n<div class=\"wp-block-columns alignwide is-not-stacked-on-mobile is-layout-flex wp-container-core-columns-is-layout-4bd44da7 wp-block-columns-is-layout-flex\" style=\"margin-top:0;margin-bottom:0;padding-top:0;padding-right:0;padding-bottom:0;padding-left:0\">\n<div class=\"wp-block-column is-vertically-aligned-bottom has-global-padding is-content-justification-left is-layout-constrained wp-container-core-column-is-layout-812a8b9b wp-block-column-is-layout-constrained\" 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-1932d7dbf934fe3a5d30711231666a5a\" style=\"writing-mode:vertical-rl\"><strong>About me<\/strong><\/h1>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-vertically-aligned-center is-layout-flow wp-container-core-column-is-layout-0a808d5a wp-block-column-is-layout-flow\" style=\"padding-right:var(--wp--preset--spacing--30);padding-left:var(--wp--preset--spacing--30);flex-basis:66%\">\n<h2 class=\"wp-block-heading alignwide has-text-align-left is-style-default has-body-font-family agl agl-slideCSSRight agl-in-duration-1000 agl-in-distance-1\" style=\"border-style:none;border-width:0px;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;font-size:clamp(33.419px, 2.089rem + ((1vw - 3.2px) * 2.769), 60px);font-style:normal;font-weight:700;letter-spacing:0px;line-height:1\"><mark style=\"background-color:rgba(0, 0, 0, 0);color:#ffffff\" class=\"has-inline-color\">NICE TO<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0);color:#ffffff\" class=\"has-inline-color\">MEET YOU<\/mark><\/h2>\n\n\n\n<h2 class=\"wp-block-heading alignwide has-text-align-right is-style-default has-body-font-family agl agl-slideCSSRight agl-in-duration-1000 agl-in-delay-1200 agl-in-distance-1\" style=\"border-style:none;border-width:0px;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;font-size:clamp(18.959px, 1.185rem + ((1vw - 3.2px) * 1.15), 30px);font-style:normal;font-weight:700;letter-spacing:0px;line-height:1\"><mark style=\"background-color:rgba(0, 0, 0, 0);color:#e04500\" class=\"has-inline-color\">&#8230;CAN&#8217;T WAIT TO GET IN TOUCH.<\/mark><\/h2>\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:33%\">\n<figure class=\"wp-block-image alignfull size-large has-custom-border is-style-rounded is-style-rounded--1\" style=\"margin-top:0;margin-right:0;margin-bottom:0;margin-left:0\"><img loading=\"lazy\" decoding=\"async\" width=\"683\" height=\"1024\" src=\"https:\/\/vibrastudio.ch\/wp-content\/uploads\/2026\/02\/Roger-2024-683x1024.jpg\" alt=\"\" class=\"wp-image-2662\" style=\"border-style:none;border-width:0px\" srcset=\"https:\/\/vibrastudio.ch\/wp-content\/uploads\/2026\/02\/Roger-2024-683x1024.jpg 683w, https:\/\/vibrastudio.ch\/wp-content\/uploads\/2026\/02\/Roger-2024-200x300.jpg 200w, https:\/\/vibrastudio.ch\/wp-content\/uploads\/2026\/02\/Roger-2024.jpg 720w\" sizes=\"auto, (max-width: 683px) 100vw, 683px\" \/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-group alignwide has-global-padding is-content-justification-left is-layout-constrained wp-container-core-group-is-layout-1ad27c61 wp-block-group-is-layout-constrained\" style=\"padding-right:0;padding-left:0\">\n<div class=\"wp-block-columns alignwide is-not-stacked-on-mobile has-base-background-color has-background is-layout-flex wp-container-core-columns-is-layout-e0ae969c 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:var(--wp--preset--spacing--30);padding-right:0;padding-bottom:var(--wp--preset--spacing--30);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-941349ba wp-block-column-is-layout-constrained\" style=\"border-top-left-radius:30px;border-top-right-radius:30px;border-bottom-left-radius:30px;border-bottom-right-radius:30px;padding-right:var(--wp--preset--spacing--30);padding-left:var(--wp--preset--spacing--30);flex-basis:100%\">\n<p class=\"has-text-align-left has-text-color has-link-color wp-elements-2479a5a8a0fbcd5bde18990034951b78\" style=\"color:#ffffff;font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.708), 1.3rem);\"><mark style=\"background-color:rgba(0, 0, 0, 0);color:#ffffff\" class=\"has-inline-color\"><strong>Hello, please let me introduce myself.<\/strong><\/mark><br><br><mark style=\"background-color:rgba(0, 0, 0, 0);color:#ffffff\" class=\"has-inline-color\">I\u2019m a game developer, VJ, and light artist based in Schaffhausen, Switzerland.<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0);color:#ffffff\" class=\"has-inline-color\">Whenever I\u2019m not at <a href=\"https:\/\/strayfawnstudio.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Stray Fawn Studio<\/a>, I make space for other creative output &#8211; experimental prototypes, freelance work and collaborations with partners.<br>Some may know me from <a href=\"http:\/\/www.nachtlicht.cc\" target=\"_blank\" rel=\"noreferrer noopener\">Nachtlicht<\/a> and <a href=\"http:\/\/www.recklesscollective.com\" target=\"_blank\" rel=\"noreferrer noopener\">Reckless Collective<\/a>, others may have heard me playing the bass at a local jam session<\/mark> or even seen me sketching at a Drink&#8217;n&#8217;Draw event.<br><br>Have a project in mind? I\u2019d love to hear about it.<\/p>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns alignwide has-base-background-color has-background is-layout-flex wp-container-core-columns-is-layout-6944c02c 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: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-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-b1670ce8d3569ce4e6f8a0408efd1c4c\"><strong>Contact<\/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:50%\"><\/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-align-left has-link-color has-medium-font-size wp-elements-36088f23dff64b53be57fcb7af20d346 wp-container-content-9cfa9a5a\" style=\"font-style:normal;font-weight:100\"><mark style=\"background-color:rgba(0, 0, 0, 0);color:#ffffff\" class=\"has-inline-color\"><a href=\"mailto:roger@vibrastudio.ch\">roger@vibrastudio.ch<\/a><\/mark><\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns alignwide has-base-background-color has-background is-layout-flex wp-container-core-columns-is-layout-6944c02c 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: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-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-c0f268c671e5a9727c9d830e2a1ea274\"><strong>Awards &amp; Recognition<\/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:#e04500\" class=\"has-inline-color\">2017 <\/mark><mark style=\"background-color:rgba(0, 0, 0, 0);color:#ffffff\" class=\"has-inline-color\">BIG Festival<\/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\">Niche &#8211; Best Educational Finalist<\/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:#e04500\" class=\"has-inline-color\">2018 <\/mark><mark style=\"background-color:rgba(0, 0, 0, 0);color:#ffffff\" class=\"has-inline-color\">Swiss Game Awards<\/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\">Niche &#8211; Audience Choice Winner<\/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:#e04500\" class=\"has-inline-color\">2018 <\/mark><mark style=\"background-color:rgba(0, 0, 0, 0);color:#ffffff\" class=\"has-inline-color\">FantocheVJ Battle<\/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\">Winner VJ Battle<\/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:#e04500\" class=\"has-inline-color\">2018 <\/mark><mark style=\"background-color:rgba(0, 0, 0, 0);color:#ffffff\" class=\"has-inline-color\">GDC Play<\/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\">Nimbatus &#8211; Winner Best in Play<\/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:#e04500\" class=\"has-inline-color\">2018 <\/mark><mark style=\"background-color:rgba(0, 0, 0, 0);color:#ffffff\" class=\"has-inline-color\">GDC Pitch Competition<\/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\">Nimbatus &#8211; Winner Best Pitch<\/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:#e04500\" class=\"has-inline-color\">2018 <\/mark><mark style=\"background-color:rgba(0, 0, 0, 0);color:#ffffff\" class=\"has-inline-color\">Tencent Games Creative Competition <\/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\">Nimbatus &#8211; Winner Innovation in Games<\/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:#e04500\" class=\"has-inline-color\">2019 <\/mark><mark style=\"background-color:rgba(0, 0, 0, 0);color:#ffffff\" class=\"has-inline-color\">Deutscher Entwicklerpreis<\/mark><mark style=\"background-color:rgba(0, 0, 0, 0);color:#ffffff\" class=\"has-inline-color\"><\/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\">The Wandering Village &#8211; Best Indie Game Nomination<\/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:#e04500\" class=\"has-inline-color\">2020 <\/mark><mark style=\"background-color:rgba(0, 0, 0, 0);color:#ffffff\" class=\"has-inline-color\">Swiss Game Awards<\/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\">Nimbatus &#8211; Best Swiss Game<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0);color:#ffffff\" class=\"has-inline-color\">Winner <\/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:#e04500\" class=\"has-inline-color\">2022 <\/mark><mark style=\"background-color:rgba(0, 0, 0, 0);color:#ffffff\" class=\"has-inline-color\">Deutscher Entwicklerpreis<\/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\">The Wandering Village &#8211; Bestes  Deutsches Spiel<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0);color:#ffffff\" class=\"has-inline-color\">Winner <\/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:#e04500\" class=\"has-inline-color\">2022 <\/mark><mark style=\"background-color:rgba(0, 0, 0, 0);color:#ffffff\" class=\"has-inline-color\">DevGAMM<\/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\">Grand Prize Winner<\/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:#e04500\" class=\"has-inline-color\">2023 <\/mark><mark style=\"background-color:rgba(0, 0, 0, 0);color:#ffffff\" class=\"has-inline-color\">Swiss Game Awards<\/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\">The Wandering Village &#8211; Excellence Award Winner<\/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:#e04500\" class=\"has-inline-color\">2023 <\/mark><mark style=\"background-color:rgba(0, 0, 0, 0);color:#ffffff\" class=\"has-inline-color\">FantocheVJ Battle<\/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\">Juror<\/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:#e04500\" class=\"has-inline-color\">2025 <\/mark><mark style=\"background-color:rgba(0, 0, 0, 0);color:#ffffff\" class=\"has-inline-color\">Best of Swiss Apps<\/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\">VirtuAllalin &#8211; Extended Interaction<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0);color:#ffffff\" class=\"has-inline-color\">Winner<\/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:#e04500\" class=\"has-inline-color\">2026 <\/mark><mark style=\"background-color:rgba(0, 0, 0, 0);color:#ffffff\" class=\"has-inline-color\">Taipei Game Show<\/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\">Best Visual Art Finalist<\/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:#e04500\" class=\"has-inline-color\">2026 <\/mark><mark style=\"background-color:rgba(0, 0, 0, 0);color:#ffffff\" class=\"has-inline-color\">Light Festival Lucerne<\/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\">Light Artist Panel Talk<\/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:#e04500\" class=\"has-inline-color\">2026 <\/mark><mark style=\"background-color:rgba(0, 0, 0, 0);color:#ffffff\" class=\"has-inline-color\">Independent Games Festival<\/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\">The Wandering Village &#8211; WINGS Finalist<\/mark><\/p>\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":1,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-2","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/vibrastudio.ch\/index.php?rest_route=\/wp\/v2\/pages\/2","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=2"}],"version-history":[{"count":196,"href":"https:\/\/vibrastudio.ch\/index.php?rest_route=\/wp\/v2\/pages\/2\/revisions"}],"predecessor-version":[{"id":3030,"href":"https:\/\/vibrastudio.ch\/index.php?rest_route=\/wp\/v2\/pages\/2\/revisions\/3030"}],"wp:attachment":[{"href":"https:\/\/vibrastudio.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}