{"id":51,"date":"2026-07-09T07:32:19","date_gmt":"2026-07-09T07:32:19","guid":{"rendered":"https:\/\/panosky.com\/?page_id=51"},"modified":"2026-08-25T07:56:10","modified_gmt":"2026-08-25T07:56:10","slug":"home","status":"publish","type":"page","link":"https:\/\/panosky.com\/","title":{"rendered":"Home"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"51\" class=\"elementor elementor-51\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5dab4ab e-con e-atomic-element e-flexbox-base e-f82d849 \" data-id=\"5dab4ab\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"5dab4ab\" data-e-type=\"e-flexbox\" data-id=\"5dab4ab\">\n    <div class=\"elementor-element elementor-element-fb8e924 ps-fluid-hero e-flex e-con-boxed e-con e-parent\" data-id=\"fb8e924\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6b661b6 elementor-widget elementor-widget-heading\" data-id=\"6b661b6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">Your Front Door<br>Just Went <span class=\"animated-global\">Global.<\/span><\/h1>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3f546e5 elementor-widget elementor-widget-heading\" data-id=\"3f546e5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"pano-dot\">&bull;<\/span> Virtual Tours <span class=\"pano-dot\">&bull;<\/span> Google Maps <span class=\"pano-dot\">&bull;<\/span> Business Visibility<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ea882df panosky-cursor-glow elementor-widget elementor-widget-button\" data-id=\"ea882df\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"#\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">See Tour Here<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7e48ac9 elementor-widget elementor-widget-html\" data-id=\"7e48ac9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!--\r\n  PanoSky Physics Fluid Smoke \u2014 Elementor desktop widget\r\n\r\n  SETUP\r\n  1. Open your hero container in Elementor > Advanced > CSS Classes.\r\n  2. Add this class: ps-fluid-hero\r\n  3. Paste this entire file into one HTML widget inside that hero.\r\n\r\n  This version uses a real-time incompressible fluid solver:\r\n  velocity advection, divergence, pressure projection, vorticity and dye transport.\r\n  It creates only mouse-driven fluid smoke on a transparent canvas.\r\n-->\r\n\r\n<style>\r\n  .ps-fluid-hero {\r\n    position: relative;\r\n    overflow: hidden;\r\n    isolation: isolate;\r\n  }\r\n\r\n  .ps-fluid-hero > .ps-physics-smoke-canvas {\r\n    position: absolute;\r\n    inset: 0;\r\n    width: 100%;\r\n    height: 100%;\r\n    display: block;\r\n    pointer-events: none;\r\n    z-index: 1;\r\n  }\r\n\r\n  \/* Keeps Elementor content above the transparent smoke canvas. *\/\r\n  .ps-fluid-hero > .e-con-inner,\r\n  .ps-fluid-hero > .elementor-container,\r\n  .ps-fluid-hero > .elementor-widget-wrap,\r\n  .ps-fluid-hero > .elementor-element:not(.ps-physics-smoke-canvas) {\r\n    position: relative;\r\n    z-index: 2;\r\n  }\r\n\r\n  @media (max-width: 767px) {\r\n    .ps-fluid-hero > .ps-physics-smoke-canvas {\r\n      display: none !important;\r\n    }\r\n  }\r\n<\/style>\r\n\r\n<script>\r\n(() => {\r\n  'use strict';\r\n\r\n  \/* ================================================================\r\n     EASY SETTINGS\r\n     ================================================================ *\/\r\n  const SETTINGS = {\r\n    heroSelector: '.ps-fluid-hero',\r\n\r\n    \/\/ Smoke appearance\r\n    coreColor: '#4A70FF',\r\n    edgeColor: '#47E7FF',\r\n    opacity: 0.99,\r\n    blendMode: 'screen',        \/\/ Try: 'screen' or 'normal'\r\n    brushSize: 0.03,\r\n    smokeAmount: 0.12,\r\n    smokePersistence: 0.94,\r\n\r\n    \/\/ Fluid physics\r\n    mouseForce: 5,\r\n    velocityPersistence: 0.97,\r\n    curlStrength: 12,\r\n    pressureIterations: 30,\r\n    pressureDamping: 0.50,\r\n\r\n    \/\/ Quality \/ performance\r\n    simulationResolution: 200,\r\n    dyeResolution: 762,\r\n    canvasResolutionScale: 0.75,\r\n    maximumCanvasWidth: 1500,\r\n    mobileBreakpoint: 767\r\n  };\r\n\r\n  const INSTANCE_KEY = '__panoskyPhysicsSmoke';\r\n  const target = document.querySelector(SETTINGS.heroSelector);\r\n\r\n  if (!target) {\r\n    console.warn(\r\n      'PanoSky Physics Smoke: add the class \"ps-fluid-hero\" to the Elementor hero container.'\r\n    );\r\n    return;\r\n  }\r\n\r\n  const reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\r\n  const isMobile = window.innerWidth <= SETTINGS.mobileBreakpoint;\r\n  if (reducedMotion || isMobile) return;\r\n\r\n  if (target[INSTANCE_KEY] && target[INSTANCE_KEY].destroy) {\r\n    target[INSTANCE_KEY].destroy();\r\n  }\r\n\r\n  const canvas = document.createElement('canvas');\r\n  canvas.className = 'ps-physics-smoke-canvas';\r\n  canvas.style.mixBlendMode = SETTINGS.blendMode;\r\n  canvas.setAttribute('aria-hidden', 'true');\r\n  target.appendChild(canvas);\r\n\r\n  const gl = canvas.getContext('webgl2', {\r\n    alpha: true,\r\n    antialias: false,\r\n    depth: false,\r\n    stencil: false,\r\n    premultipliedAlpha: false,\r\n    preserveDrawingBuffer: false,\r\n    powerPreference: 'high-performance'\r\n  });\r\n\r\n  if (!gl || !gl.getExtension('EXT_color_buffer_float')) {\r\n    console.warn('PanoSky Physics Smoke requires WebGL 2 floating-point rendering.');\r\n    canvas.remove();\r\n    return;\r\n  }\r\n\r\n  gl.disable(gl.DEPTH_TEST);\r\n  gl.disable(gl.CULL_FACE);\r\n  gl.disable(gl.BLEND);\r\n  gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1);\r\n\r\n  const VERTEX_SHADER = `#version 300 es\r\n    precision highp float;\r\n\r\n    const vec2 POSITIONS[3] = vec2[3](\r\n      vec2(-1.0, -1.0),\r\n      vec2( 3.0, -1.0),\r\n      vec2(-1.0,  3.0)\r\n    );\r\n\r\n    out vec2 vUv;\r\n\r\n    void main() {\r\n      vec2 position = POSITIONS[gl_VertexID];\r\n      vUv = position * 0.5 + 0.5;\r\n      gl_Position = vec4(position, 0.0, 1.0);\r\n    }\r\n  `;\r\n\r\n  const COPY_SHADER = `#version 300 es\r\n    precision highp float;\r\n\r\n    uniform sampler2D uTexture;\r\n    uniform float uMultiplier;\r\n\r\n    in vec2 vUv;\r\n    out vec4 outColor;\r\n\r\n    void main() {\r\n      outColor = texture(uTexture, vUv) * uMultiplier;\r\n    }\r\n  `;\r\n\r\n  const SPLAT_SHADER = `#version 300 es\r\n    precision highp float;\r\n\r\n    uniform sampler2D uTarget;\r\n    uniform float uAspect;\r\n    uniform vec2 uPoint;\r\n    uniform vec3 uValue;\r\n    uniform float uRadius;\r\n\r\n    in vec2 vUv;\r\n    out vec4 outColor;\r\n\r\n    void main() {\r\n      vec2 offset = vUv - uPoint;\r\n      offset.x *= uAspect;\r\n\r\n      float gaussian = exp(-dot(offset, offset) \/ max(uRadius * uRadius, 0.000001));\r\n      vec3 base = texture(uTarget, vUv).xyz;\r\n      outColor = vec4(base + gaussian * uValue, 1.0);\r\n    }\r\n  `;\r\n\r\n  const CURL_SHADER = `#version 300 es\r\n    precision highp float;\r\n\r\n    uniform sampler2D uVelocity;\r\n    uniform vec2 uTexelSize;\r\n\r\n    in vec2 vUv;\r\n    out vec4 outColor;\r\n\r\n    void main() {\r\n      float left   = texture(uVelocity, vUv - vec2(uTexelSize.x, 0.0)).y;\r\n      float right  = texture(uVelocity, vUv + vec2(uTexelSize.x, 0.0)).y;\r\n      float bottom = texture(uVelocity, vUv - vec2(0.0, uTexelSize.y)).x;\r\n      float top    = texture(uVelocity, vUv + vec2(0.0, uTexelSize.y)).x;\r\n\r\n      float curl = 0.5 * (right - left - top + bottom);\r\n      outColor = vec4(curl, 0.0, 0.0, 1.0);\r\n    }\r\n  `;\r\n\r\n  const VORTICITY_SHADER = `#version 300 es\r\n    precision highp float;\r\n\r\n    uniform sampler2D uVelocity;\r\n    uniform sampler2D uCurl;\r\n    uniform vec2 uTexelSize;\r\n    uniform float uCurlStrength;\r\n    uniform float uDelta;\r\n\r\n    in vec2 vUv;\r\n    out vec4 outColor;\r\n\r\n    void main() {\r\n      float left   = abs(texture(uCurl, vUv - vec2(uTexelSize.x, 0.0)).x);\r\n      float right  = abs(texture(uCurl, vUv + vec2(uTexelSize.x, 0.0)).x);\r\n      float bottom = abs(texture(uCurl, vUv - vec2(0.0, uTexelSize.y)).x);\r\n      float top    = abs(texture(uCurl, vUv + vec2(0.0, uTexelSize.y)).x);\r\n      float center = texture(uCurl, vUv).x;\r\n\r\n      vec2 force = 0.5 * vec2(top - bottom, right - left);\r\n      force \/= length(force) + 0.0001;\r\n      force *= uCurlStrength * center;\r\n      force.y *= -1.0;\r\n\r\n      vec2 velocity = texture(uVelocity, vUv).xy;\r\n      velocity += force * uDelta;\r\n      velocity = clamp(velocity, vec2(-1000.0), vec2(1000.0));\r\n\r\n      outColor = vec4(velocity, 0.0, 1.0);\r\n    }\r\n  `;\r\n\r\n  const DIVERGENCE_SHADER = `#version 300 es\r\n    precision highp float;\r\n\r\n    uniform sampler2D uVelocity;\r\n    uniform vec2 uTexelSize;\r\n\r\n    in vec2 vUv;\r\n    out vec4 outColor;\r\n\r\n    void main() {\r\n      vec2 center = texture(uVelocity, vUv).xy;\r\n\r\n      float left = texture(\r\n        uVelocity,\r\n        max(vUv - vec2(uTexelSize.x, 0.0), vec2(0.0))\r\n      ).x;\r\n      float right = texture(\r\n        uVelocity,\r\n        min(vUv + vec2(uTexelSize.x, 0.0), vec2(1.0))\r\n      ).x;\r\n      float bottom = texture(\r\n        uVelocity,\r\n        max(vUv - vec2(0.0, uTexelSize.y), vec2(0.0))\r\n      ).y;\r\n      float top = texture(\r\n        uVelocity,\r\n        min(vUv + vec2(0.0, uTexelSize.y), vec2(1.0))\r\n      ).y;\r\n\r\n      if (vUv.x < uTexelSize.x) left = -center.x;\r\n      if (vUv.x > 1.0 - uTexelSize.x) right = -center.x;\r\n      if (vUv.y < uTexelSize.y) bottom = -center.y;\r\n      if (vUv.y > 1.0 - uTexelSize.y) top = -center.y;\r\n\r\n      float divergence = 0.5 * (right - left + top - bottom);\r\n      outColor = vec4(divergence, 0.0, 0.0, 1.0);\r\n    }\r\n  `;\r\n\r\n  const PRESSURE_SHADER = `#version 300 es\r\n    precision highp float;\r\n\r\n    uniform sampler2D uPressure;\r\n    uniform sampler2D uDivergence;\r\n    uniform vec2 uTexelSize;\r\n\r\n    in vec2 vUv;\r\n    out vec4 outColor;\r\n\r\n    void main() {\r\n      float left   = texture(uPressure, vUv - vec2(uTexelSize.x, 0.0)).x;\r\n      float right  = texture(uPressure, vUv + vec2(uTexelSize.x, 0.0)).x;\r\n      float bottom = texture(uPressure, vUv - vec2(0.0, uTexelSize.y)).x;\r\n      float top    = texture(uPressure, vUv + vec2(0.0, uTexelSize.y)).x;\r\n      float divergence = texture(uDivergence, vUv).x;\r\n\r\n      float pressure = (left + right + bottom + top - divergence) * 0.25;\r\n      outColor = vec4(pressure, 0.0, 0.0, 1.0);\r\n    }\r\n  `;\r\n\r\n  const GRADIENT_SHADER = `#version 300 es\r\n    precision highp float;\r\n\r\n    uniform sampler2D uPressure;\r\n    uniform sampler2D uVelocity;\r\n    uniform vec2 uTexelSize;\r\n\r\n    in vec2 vUv;\r\n    out vec4 outColor;\r\n\r\n    void main() {\r\n      float left   = texture(uPressure, vUv - vec2(uTexelSize.x, 0.0)).x;\r\n      float right  = texture(uPressure, vUv + vec2(uTexelSize.x, 0.0)).x;\r\n      float bottom = texture(uPressure, vUv - vec2(0.0, uTexelSize.y)).x;\r\n      float top    = texture(uPressure, vUv + vec2(0.0, uTexelSize.y)).x;\r\n\r\n      vec2 velocity = texture(uVelocity, vUv).xy;\r\n      velocity -= vec2(right - left, top - bottom) * 0.5;\r\n\r\n      outColor = vec4(velocity, 0.0, 1.0);\r\n    }\r\n  `;\r\n\r\n  const ADVECTION_SHADER = `#version 300 es\r\n    precision highp float;\r\n\r\n    uniform sampler2D uVelocity;\r\n    uniform sampler2D uSource;\r\n    uniform vec2 uVelocityTexelSize;\r\n    uniform vec2 uSourceTexelSize;\r\n    uniform float uDelta;\r\n    uniform float uDissipation;\r\n\r\n    in vec2 vUv;\r\n    out vec4 outColor;\r\n\r\n    vec4 bilerp(sampler2D textureSampler, vec2 uv, vec2 texelSize) {\r\n      vec2 grid = uv \/ texelSize - 0.5;\r\n      vec2 index = floor(grid);\r\n      vec2 fraction = fract(grid);\r\n      vec2 base = (index + 0.5) * texelSize;\r\n\r\n      vec4 a = texture(textureSampler, base);\r\n      vec4 b = texture(textureSampler, base + vec2(texelSize.x, 0.0));\r\n      vec4 c = texture(textureSampler, base + vec2(0.0, texelSize.y));\r\n      vec4 d = texture(textureSampler, base + texelSize);\r\n\r\n      return mix(mix(a, b, fraction.x), mix(c, d, fraction.x), fraction.y);\r\n    }\r\n\r\n    void main() {\r\n      vec2 velocity = bilerp(\r\n        uVelocity,\r\n        vUv,\r\n        uVelocityTexelSize\r\n      ).xy;\r\n\r\n      vec2 previousPosition = vUv - uDelta * velocity * uVelocityTexelSize;\r\n      previousPosition = clamp(\r\n        previousPosition,\r\n        uSourceTexelSize * 0.5,\r\n        vec2(1.0) - uSourceTexelSize * 0.5\r\n      );\r\n\r\n      vec4 transported = bilerp(\r\n        uSource,\r\n        previousPosition,\r\n        uSourceTexelSize\r\n      );\r\n\r\n      outColor = transported * uDissipation;\r\n    }\r\n  `;\r\n\r\n  const DISPLAY_SHADER = `#version 300 es\r\n    precision highp float;\r\n\r\n    uniform sampler2D uDye;\r\n    uniform vec2 uDyeTexelSize;\r\n    uniform float uOpacity;\r\n\r\n    in vec2 vUv;\r\n    out vec4 outColor;\r\n\r\n    vec4 bilerp(sampler2D textureSampler, vec2 uv, vec2 texelSize) {\r\n      vec2 grid = uv \/ texelSize - 0.5;\r\n      vec2 index = floor(grid);\r\n      vec2 fraction = fract(grid);\r\n      vec2 base = (index + 0.5) * texelSize;\r\n\r\n      vec4 a = texture(textureSampler, base);\r\n      vec4 b = texture(textureSampler, base + vec2(texelSize.x, 0.0));\r\n      vec4 c = texture(textureSampler, base + vec2(0.0, texelSize.y));\r\n      vec4 d = texture(textureSampler, base + texelSize);\r\n\r\n      return mix(mix(a, b, fraction.x), mix(c, d, fraction.x), fraction.y);\r\n    }\r\n\r\n    void main() {\r\n      vec3 dye = max(bilerp(uDye, vUv, uDyeTexelSize).rgb, vec3(0.0));\r\n      float density = max(dye.r, max(dye.g, dye.b));\r\n\r\n      \/\/ Filmic compression keeps the bright fluid body detailed.\r\n      vec3 color = vec3(1.0) - exp(-dye * 1.22);\r\n      color = pow(color, vec3(0.88));\r\n\r\n      float alpha = (1.0 - exp(-density * 1.55)) * uOpacity;\r\n      alpha = smoothstep(0.006, 0.94, alpha);\r\n\r\n      outColor = vec4(color, clamp(alpha, 0.0, 0.94));\r\n    }\r\n  `;\r\n\r\n  function compileShader(type, source) {\r\n    const shader = gl.createShader(type);\r\n    gl.shaderSource(shader, source);\r\n    gl.compileShader(shader);\r\n\r\n    if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\r\n      const message = gl.getShaderInfoLog(shader);\r\n      gl.deleteShader(shader);\r\n      throw new Error('PanoSky Physics Smoke shader error: ' + message);\r\n    }\r\n\r\n    return shader;\r\n  }\r\n\r\n  function createProgram(fragmentSource, uniformNames) {\r\n    const program = gl.createProgram();\r\n    const vertexShader = compileShader(gl.VERTEX_SHADER, VERTEX_SHADER);\r\n    const fragmentShader = compileShader(gl.FRAGMENT_SHADER, fragmentSource);\r\n\r\n    gl.attachShader(program, vertexShader);\r\n    gl.attachShader(program, fragmentShader);\r\n    gl.linkProgram(program);\r\n    gl.deleteShader(vertexShader);\r\n    gl.deleteShader(fragmentShader);\r\n\r\n    if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\r\n      const message = gl.getProgramInfoLog(program);\r\n      gl.deleteProgram(program);\r\n      throw new Error('PanoSky Physics Smoke program error: ' + message);\r\n    }\r\n\r\n    const uniforms = {};\r\n    uniformNames.forEach(name => {\r\n      uniforms[name] = gl.getUniformLocation(program, name);\r\n    });\r\n\r\n    return { program, uniforms };\r\n  }\r\n\r\n  const programs = {\r\n    copy: createProgram(COPY_SHADER, [\r\n      'uTexture',\r\n      'uMultiplier'\r\n    ]),\r\n    splat: createProgram(SPLAT_SHADER, [\r\n      'uTarget',\r\n      'uAspect',\r\n      'uPoint',\r\n      'uValue',\r\n      'uRadius'\r\n    ]),\r\n    curl: createProgram(CURL_SHADER, [\r\n      'uVelocity',\r\n      'uTexelSize'\r\n    ]),\r\n    vorticity: createProgram(VORTICITY_SHADER, [\r\n      'uVelocity',\r\n      'uCurl',\r\n      'uTexelSize',\r\n      'uCurlStrength',\r\n      'uDelta'\r\n    ]),\r\n    divergence: createProgram(DIVERGENCE_SHADER, [\r\n      'uVelocity',\r\n      'uTexelSize'\r\n    ]),\r\n    pressure: createProgram(PRESSURE_SHADER, [\r\n      'uPressure',\r\n      'uDivergence',\r\n      'uTexelSize'\r\n    ]),\r\n    gradient: createProgram(GRADIENT_SHADER, [\r\n      'uPressure',\r\n      'uVelocity',\r\n      'uTexelSize'\r\n    ]),\r\n    advection: createProgram(ADVECTION_SHADER, [\r\n      'uVelocity',\r\n      'uSource',\r\n      'uVelocityTexelSize',\r\n      'uSourceTexelSize',\r\n      'uDelta',\r\n      'uDissipation'\r\n    ]),\r\n    display: createProgram(DISPLAY_SHADER, [\r\n      'uDye',\r\n      'uDyeTexelSize',\r\n      'uOpacity'\r\n    ])\r\n  };\r\n\r\n  const vertexArray = gl.createVertexArray();\r\n  gl.bindVertexArray(vertexArray);\r\n\r\n  function hexToRgb(hex) {\r\n    const clean = hex.replace('#', '');\r\n    const expanded = clean.length === 3\r\n      ? clean.split('').map(character => character + character).join('')\r\n      : clean;\r\n    const value = parseInt(expanded, 16);\r\n\r\n    return [\r\n      ((value >> 16) & 255) \/ 255,\r\n      ((value >> 8) & 255) \/ 255,\r\n      (value & 255) \/ 255\r\n    ];\r\n  }\r\n\r\n  function mixColor(colorA, colorB, amount) {\r\n    return [\r\n      colorA[0] + (colorB[0] - colorA[0]) * amount,\r\n      colorA[1] + (colorB[1] - colorA[1]) * amount,\r\n      colorA[2] + (colorB[2] - colorA[2]) * amount\r\n    ];\r\n  }\r\n\r\n  const coreColor = hexToRgb(SETTINGS.coreColor);\r\n  const edgeColor = hexToRgb(SETTINGS.edgeColor);\r\n\r\n  function bindTexture(texture, unit) {\r\n    gl.activeTexture(gl.TEXTURE0 + unit);\r\n    gl.bindTexture(gl.TEXTURE_2D, texture);\r\n    return unit;\r\n  }\r\n\r\n  function getResolution(baseResolution) {\r\n    const width = Math.max(1, canvas.width);\r\n    const height = Math.max(1, canvas.height);\r\n    const aspect = width \/ height;\r\n\r\n    let resolutionWidth;\r\n    let resolutionHeight;\r\n\r\n    if (aspect >= 1) {\r\n      resolutionHeight = baseResolution;\r\n      resolutionWidth = Math.round(baseResolution * aspect);\r\n    } else {\r\n      resolutionWidth = baseResolution;\r\n      resolutionHeight = Math.round(baseResolution \/ aspect);\r\n    }\r\n\r\n    const maxDimension = 2048;\r\n    if (Math.max(resolutionWidth, resolutionHeight) > maxDimension) {\r\n      const scale = maxDimension \/ Math.max(resolutionWidth, resolutionHeight);\r\n      resolutionWidth = Math.round(resolutionWidth * scale);\r\n      resolutionHeight = Math.round(resolutionHeight * scale);\r\n    }\r\n\r\n    return {\r\n      width: Math.max(2, resolutionWidth),\r\n      height: Math.max(2, resolutionHeight)\r\n    };\r\n  }\r\n\r\n  function createFBO(width, height) {\r\n    const texture = gl.createTexture();\r\n    gl.bindTexture(gl.TEXTURE_2D, texture);\r\n    \/\/ Nearest sampling preserves the pressure and velocity calculations.\r\n    \/\/ The advection and display shaders perform their own bilinear filtering.\r\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\r\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\r\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\r\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\r\n    gl.texImage2D(\r\n      gl.TEXTURE_2D,\r\n      0,\r\n      gl.RGBA16F,\r\n      width,\r\n      height,\r\n      0,\r\n      gl.RGBA,\r\n      gl.HALF_FLOAT,\r\n      null\r\n    );\r\n\r\n    const framebuffer = gl.createFramebuffer();\r\n    gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);\r\n    gl.framebufferTexture2D(\r\n      gl.FRAMEBUFFER,\r\n      gl.COLOR_ATTACHMENT0,\r\n      gl.TEXTURE_2D,\r\n      texture,\r\n      0\r\n    );\r\n\r\n    if (gl.checkFramebufferStatus(gl.FRAMEBUFFER) !== gl.FRAMEBUFFER_COMPLETE) {\r\n      throw new Error('PanoSky Physics Smoke could not create a fluid framebuffer.');\r\n    }\r\n\r\n    gl.viewport(0, 0, width, height);\r\n    gl.clearColor(0, 0, 0, 0);\r\n    gl.clear(gl.COLOR_BUFFER_BIT);\r\n\r\n    return {\r\n      texture,\r\n      framebuffer,\r\n      width,\r\n      height,\r\n      texelX: 1 \/ width,\r\n      texelY: 1 \/ height\r\n    };\r\n  }\r\n\r\n  function createDoubleFBO(width, height) {\r\n    let read = createFBO(width, height);\r\n    let write = createFBO(width, height);\r\n\r\n    return {\r\n      get read() {\r\n        return read;\r\n      },\r\n      get write() {\r\n        return write;\r\n      },\r\n      swap() {\r\n        const temporary = read;\r\n        read = write;\r\n        write = temporary;\r\n      }\r\n    };\r\n  }\r\n\r\n  function deleteFBO(fbo) {\r\n    if (!fbo) return;\r\n    gl.deleteTexture(fbo.texture);\r\n    gl.deleteFramebuffer(fbo.framebuffer);\r\n  }\r\n\r\n  function deleteDoubleFBO(doubleFBO) {\r\n    if (!doubleFBO) return;\r\n    deleteFBO(doubleFBO.read);\r\n    deleteFBO(doubleFBO.write);\r\n  }\r\n\r\n  function drawTo(fbo) {\r\n    if (fbo) {\r\n      gl.bindFramebuffer(gl.FRAMEBUFFER, fbo.framebuffer);\r\n      gl.viewport(0, 0, fbo.width, fbo.height);\r\n    } else {\r\n      gl.bindFramebuffer(gl.FRAMEBUFFER, null);\r\n      gl.viewport(0, 0, canvas.width, canvas.height);\r\n    }\r\n\r\n    gl.drawArrays(gl.TRIANGLES, 0, 3);\r\n  }\r\n\r\n  let velocity = null;\r\n  let dye = null;\r\n  let pressure = null;\r\n  let divergence = null;\r\n  let curl = null;\r\n  let currentSimulationSize = '';\r\n  let currentDyeSize = '';\r\n\r\n  function releaseSimulation() {\r\n    deleteDoubleFBO(velocity);\r\n    deleteDoubleFBO(dye);\r\n    deleteDoubleFBO(pressure);\r\n    deleteFBO(divergence);\r\n    deleteFBO(curl);\r\n\r\n    velocity = null;\r\n    dye = null;\r\n    pressure = null;\r\n    divergence = null;\r\n    curl = null;\r\n  }\r\n\r\n  function initializeSimulation() {\r\n    const simulationSize = getResolution(SETTINGS.simulationResolution);\r\n    const dyeSize = getResolution(SETTINGS.dyeResolution);\r\n    const nextSimulationKey = simulationSize.width + 'x' + simulationSize.height;\r\n    const nextDyeKey = dyeSize.width + 'x' + dyeSize.height;\r\n\r\n    if (\r\n      velocity &&\r\n      currentSimulationSize === nextSimulationKey &&\r\n      currentDyeSize === nextDyeKey\r\n    ) {\r\n      return;\r\n    }\r\n\r\n    releaseSimulation();\r\n\r\n    velocity = createDoubleFBO(simulationSize.width, simulationSize.height);\r\n    pressure = createDoubleFBO(simulationSize.width, simulationSize.height);\r\n    divergence = createFBO(simulationSize.width, simulationSize.height);\r\n    curl = createFBO(simulationSize.width, simulationSize.height);\r\n    dye = createDoubleFBO(dyeSize.width, dyeSize.height);\r\n\r\n    currentSimulationSize = nextSimulationKey;\r\n    currentDyeSize = nextDyeKey;\r\n  }\r\n\r\n  function resizeCanvas() {\r\n    const bounds = target.getBoundingClientRect();\r\n    if (!bounds.width || !bounds.height) return false;\r\n\r\n    const resolutionScale = Math.min(\r\n      SETTINGS.canvasResolutionScale,\r\n      SETTINGS.maximumCanvasWidth \/ bounds.width\r\n    );\r\n\r\n    const width = Math.max(2, Math.round(bounds.width * resolutionScale));\r\n    const height = Math.max(2, Math.round(bounds.height * resolutionScale));\r\n\r\n    if (canvas.width === width && canvas.height === height) return false;\r\n\r\n    canvas.width = width;\r\n    canvas.height = height;\r\n    initializeSimulation();\r\n    return true;\r\n  }\r\n\r\n  const splatQueue = [];\r\n  const pointer = {\r\n    hasPosition: false,\r\n    clientX: 0,\r\n    clientY: 0\r\n  };\r\n\r\n  function addSplatSample(x, y, dx, dy, speed) {\r\n    splatQueue.push({ x, y, dx, dy, speed });\r\n    if (splatQueue.length > 90) {\r\n      splatQueue.splice(0, splatQueue.length - 90);\r\n    }\r\n  }\r\n\r\n  function handlePointerMove(event) {\r\n    if (event.pointerType && event.pointerType !== 'mouse') return;\r\n\r\n    const bounds = target.getBoundingClientRect();\r\n    if (!bounds.width || !bounds.height) return;\r\n\r\n    const currentX = event.clientX;\r\n    const currentY = event.clientY;\r\n\r\n    if (!pointer.hasPosition) {\r\n      pointer.hasPosition = true;\r\n      pointer.clientX = currentX;\r\n      pointer.clientY = currentY;\r\n\r\n      addSplatSample(\r\n        (currentX - bounds.left) \/ bounds.width,\r\n        1 - (currentY - bounds.top) \/ bounds.height,\r\n        0,\r\n        0,\r\n        0\r\n      );\r\n      return;\r\n    }\r\n\r\n    const totalDx = currentX - pointer.clientX;\r\n    const totalDy = currentY - pointer.clientY;\r\n    const distance = Math.sqrt(totalDx * totalDx + totalDy * totalDy);\r\n\r\n    if (distance < 0.25) return;\r\n\r\n    const brushPixels = Math.min(bounds.width, bounds.height) * SETTINGS.brushSize;\r\n    const spacing = Math.max(5, brushPixels * 0.22);\r\n    const steps = Math.min(14, Math.max(1, Math.ceil(distance \/ spacing)));\r\n\r\n    for (let index = 1; index <= steps; index++) {\r\n      const amount = index \/ steps;\r\n      const sampleX = pointer.clientX + totalDx * amount;\r\n      const sampleY = pointer.clientY + totalDy * amount;\r\n\r\n      addSplatSample(\r\n        (sampleX - bounds.left) \/ bounds.width,\r\n        1 - (sampleY - bounds.top) \/ bounds.height,\r\n        totalDx \/ steps,\r\n        -totalDy \/ steps,\r\n        distance \/ steps\r\n      );\r\n    }\r\n\r\n    pointer.clientX = currentX;\r\n    pointer.clientY = currentY;\r\n  }\r\n\r\n  function handlePointerLeave() {\r\n    pointer.hasPosition = false;\r\n  }\r\n\r\n  function applySplat(buffer, x, y, value, radius) {\r\n    const splat = programs.splat;\r\n    gl.useProgram(splat.program);\r\n\r\n    gl.uniform1i(\r\n      splat.uniforms.uTarget,\r\n      bindTexture(buffer.read.texture, 0)\r\n    );\r\n    gl.uniform1f(\r\n      splat.uniforms.uAspect,\r\n      canvas.width \/ canvas.height\r\n    );\r\n    gl.uniform2f(splat.uniforms.uPoint, x, y);\r\n    gl.uniform3f(splat.uniforms.uValue, value[0], value[1], value[2]);\r\n    gl.uniform1f(splat.uniforms.uRadius, radius);\r\n\r\n    drawTo(buffer.write);\r\n    buffer.swap();\r\n  }\r\n\r\n  function processSplats() {\r\n    if (!splatQueue.length) return;\r\n\r\n    while (splatQueue.length) {\r\n      const sample = splatQueue.shift();\r\n      const x = Math.max(0, Math.min(1, sample.x));\r\n      const y = Math.max(0, Math.min(1, sample.y));\r\n      const speedAmount = Math.min(1, sample.speed \/ 22);\r\n\r\n      const forceX = sample.dx * SETTINGS.mouseForce;\r\n      const forceY = sample.dy * SETTINGS.mouseForce;\r\n\r\n      applySplat(\r\n        velocity,\r\n        x,\r\n        y,\r\n        [forceX, forceY, 0],\r\n        SETTINGS.brushSize * 0.72\r\n      );\r\n\r\n      const smokeColor = mixColor(\r\n        edgeColor,\r\n        coreColor,\r\n        0.30 + speedAmount * 0.58\r\n      );\r\n      const amount = SETTINGS.smokeAmount * (0.56 + speedAmount * 0.82);\r\n\r\n      applySplat(\r\n        dye,\r\n        x,\r\n        y,\r\n        [\r\n          smokeColor[0] * amount,\r\n          smokeColor[1] * amount,\r\n          smokeColor[2] * amount\r\n        ],\r\n        SETTINGS.brushSize\r\n      );\r\n    }\r\n  }\r\n\r\n  function simulate(delta) {\r\n    const velocityTexelX = velocity.read.texelX;\r\n    const velocityTexelY = velocity.read.texelY;\r\n\r\n    \/\/ Curl of the current velocity field.\r\n    gl.useProgram(programs.curl.program);\r\n    gl.uniform1i(\r\n      programs.curl.uniforms.uVelocity,\r\n      bindTexture(velocity.read.texture, 0)\r\n    );\r\n    gl.uniform2f(\r\n      programs.curl.uniforms.uTexelSize,\r\n      velocityTexelX,\r\n      velocityTexelY\r\n    );\r\n    drawTo(curl);\r\n\r\n    \/\/ Vorticity confinement restores the rolling detail of real fluid.\r\n    gl.useProgram(programs.vorticity.program);\r\n    gl.uniform1i(\r\n      programs.vorticity.uniforms.uVelocity,\r\n      bindTexture(velocity.read.texture, 0)\r\n    );\r\n    gl.uniform1i(\r\n      programs.vorticity.uniforms.uCurl,\r\n      bindTexture(curl.texture, 1)\r\n    );\r\n    gl.uniform2f(\r\n      programs.vorticity.uniforms.uTexelSize,\r\n      velocityTexelX,\r\n      velocityTexelY\r\n    );\r\n    gl.uniform1f(\r\n      programs.vorticity.uniforms.uCurlStrength,\r\n      SETTINGS.curlStrength\r\n    );\r\n    gl.uniform1f(programs.vorticity.uniforms.uDelta, delta);\r\n    drawTo(velocity.write);\r\n    velocity.swap();\r\n\r\n    \/\/ Find velocity divergence.\r\n    gl.useProgram(programs.divergence.program);\r\n    gl.uniform1i(\r\n      programs.divergence.uniforms.uVelocity,\r\n      bindTexture(velocity.read.texture, 0)\r\n    );\r\n    gl.uniform2f(\r\n      programs.divergence.uniforms.uTexelSize,\r\n      velocityTexelX,\r\n      velocityTexelY\r\n    );\r\n    drawTo(divergence);\r\n\r\n    \/\/ Retain a little previous pressure for stability.\r\n    gl.useProgram(programs.copy.program);\r\n    gl.uniform1i(\r\n      programs.copy.uniforms.uTexture,\r\n      bindTexture(pressure.read.texture, 0)\r\n    );\r\n    gl.uniform1f(\r\n      programs.copy.uniforms.uMultiplier,\r\n      SETTINGS.pressureDamping\r\n    );\r\n    drawTo(pressure.write);\r\n    pressure.swap();\r\n\r\n    \/\/ Jacobi pressure iterations make the velocity incompressible.\r\n    gl.useProgram(programs.pressure.program);\r\n    gl.uniform1i(\r\n      programs.pressure.uniforms.uDivergence,\r\n      bindTexture(divergence.texture, 1)\r\n    );\r\n    gl.uniform2f(\r\n      programs.pressure.uniforms.uTexelSize,\r\n      velocityTexelX,\r\n      velocityTexelY\r\n    );\r\n\r\n    for (let iteration = 0; iteration < SETTINGS.pressureIterations; iteration++) {\r\n      gl.uniform1i(\r\n        programs.pressure.uniforms.uPressure,\r\n        bindTexture(pressure.read.texture, 0)\r\n      );\r\n      drawTo(pressure.write);\r\n      pressure.swap();\r\n    }\r\n\r\n    \/\/ Subtract the pressure gradient from velocity.\r\n    gl.useProgram(programs.gradient.program);\r\n    gl.uniform1i(\r\n      programs.gradient.uniforms.uPressure,\r\n      bindTexture(pressure.read.texture, 0)\r\n    );\r\n    gl.uniform1i(\r\n      programs.gradient.uniforms.uVelocity,\r\n      bindTexture(velocity.read.texture, 1)\r\n    );\r\n    gl.uniform2f(\r\n      programs.gradient.uniforms.uTexelSize,\r\n      velocityTexelX,\r\n      velocityTexelY\r\n    );\r\n    drawTo(velocity.write);\r\n    velocity.swap();\r\n\r\n    \/\/ Transport the velocity through itself.\r\n    gl.useProgram(programs.advection.program);\r\n    gl.uniform1i(\r\n      programs.advection.uniforms.uVelocity,\r\n      bindTexture(velocity.read.texture, 0)\r\n    );\r\n    gl.uniform1i(\r\n      programs.advection.uniforms.uSource,\r\n      bindTexture(velocity.read.texture, 1)\r\n    );\r\n    gl.uniform2f(\r\n      programs.advection.uniforms.uVelocityTexelSize,\r\n      velocityTexelX,\r\n      velocityTexelY\r\n    );\r\n    gl.uniform2f(\r\n      programs.advection.uniforms.uSourceTexelSize,\r\n      velocityTexelX,\r\n      velocityTexelY\r\n    );\r\n    gl.uniform1f(programs.advection.uniforms.uDelta, delta);\r\n    gl.uniform1f(\r\n      programs.advection.uniforms.uDissipation,\r\n      Math.pow(SETTINGS.velocityPersistence, delta * 60)\r\n    );\r\n    drawTo(velocity.write);\r\n    velocity.swap();\r\n\r\n    \/\/ Transport the colored smoke through the projected velocity field.\r\n    gl.useProgram(programs.advection.program);\r\n    gl.uniform1i(\r\n      programs.advection.uniforms.uVelocity,\r\n      bindTexture(velocity.read.texture, 0)\r\n    );\r\n    gl.uniform1i(\r\n      programs.advection.uniforms.uSource,\r\n      bindTexture(dye.read.texture, 1)\r\n    );\r\n    gl.uniform2f(\r\n      programs.advection.uniforms.uVelocityTexelSize,\r\n      velocityTexelX,\r\n      velocityTexelY\r\n    );\r\n    gl.uniform2f(\r\n      programs.advection.uniforms.uSourceTexelSize,\r\n      dye.read.texelX,\r\n      dye.read.texelY\r\n    );\r\n    gl.uniform1f(programs.advection.uniforms.uDelta, delta);\r\n    gl.uniform1f(\r\n      programs.advection.uniforms.uDissipation,\r\n      Math.pow(SETTINGS.smokePersistence, delta * 60)\r\n    );\r\n    drawTo(dye.write);\r\n    dye.swap();\r\n  }\r\n\r\n  function display() {\r\n    gl.bindFramebuffer(gl.FRAMEBUFFER, null);\r\n    gl.viewport(0, 0, canvas.width, canvas.height);\r\n    gl.clearColor(0, 0, 0, 0);\r\n    gl.clear(gl.COLOR_BUFFER_BIT);\r\n\r\n    gl.useProgram(programs.display.program);\r\n    gl.uniform1i(\r\n      programs.display.uniforms.uDye,\r\n      bindTexture(dye.read.texture, 0)\r\n    );\r\n    gl.uniform2f(\r\n      programs.display.uniforms.uDyeTexelSize,\r\n      dye.read.texelX,\r\n      dye.read.texelY\r\n    );\r\n    gl.uniform1f(programs.display.uniforms.uOpacity, SETTINGS.opacity);\r\n    drawTo(null);\r\n  }\r\n\r\n  let animationFrame = 0;\r\n  let lastTime = performance.now();\r\n  let visible = true;\r\n  let destroyed = false;\r\n\r\n  function frame(time) {\r\n    if (destroyed) return;\r\n    animationFrame = requestAnimationFrame(frame);\r\n\r\n    if (!visible || document.hidden) {\r\n      lastTime = time;\r\n      return;\r\n    }\r\n\r\n    resizeCanvas();\r\n    if (!velocity || !dye) return;\r\n\r\n    const delta = Math.min(0.025, Math.max(0.001, (time - lastTime) * 0.001));\r\n    lastTime = time;\r\n\r\n    processSplats();\r\n    simulate(delta);\r\n    display();\r\n  }\r\n\r\n  const resizeObserver = new ResizeObserver(() => {\r\n    resizeCanvas();\r\n  });\r\n  resizeObserver.observe(target);\r\n\r\n  const intersectionObserver = new IntersectionObserver(entries => {\r\n    visible = entries[0] ? entries[0].isIntersecting : true;\r\n    if (visible) lastTime = performance.now();\r\n  }, { threshold: 0.01 });\r\n  intersectionObserver.observe(target);\r\n\r\n  target.addEventListener('pointermove', handlePointerMove, { passive: true });\r\n  target.addEventListener('pointerleave', handlePointerLeave, { passive: true });\r\n\r\n  function destroy() {\r\n    if (destroyed) return;\r\n    destroyed = true;\r\n\r\n    cancelAnimationFrame(animationFrame);\r\n    resizeObserver.disconnect();\r\n    intersectionObserver.disconnect();\r\n    target.removeEventListener('pointermove', handlePointerMove);\r\n    target.removeEventListener('pointerleave', handlePointerLeave);\r\n\r\n    releaseSimulation();\r\n\r\n    Object.keys(programs).forEach(key => {\r\n      gl.deleteProgram(programs[key].program);\r\n    });\r\n\r\n    gl.deleteVertexArray(vertexArray);\r\n    canvas.remove();\r\n    delete target[INSTANCE_KEY];\r\n  }\r\n\r\n  target[INSTANCE_KEY] = {\r\n    destroy,\r\n    settings: SETTINGS\r\n  };\r\n\r\n  resizeCanvas();\r\n  animationFrame = requestAnimationFrame(frame);\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\n<\/div>\n<div class=\"elementor-element elementor-element-f626a47 e-con e-atomic-element e-flexbox-base e-7b6d0c7 \" data-id=\"f626a47\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"f626a47\" data-e-type=\"e-flexbox\" data-id=\"f626a47\">\n    \t\t<div class=\"elementor-element elementor-element-a14c466 elementor-widget elementor-widget-n-carousel\" data-id=\"a14c466\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;carousel_items&quot;:[{&quot;slide_title&quot;:&quot;Slide #2&quot;,&quot;_id&quot;:&quot;8b95227&quot;},{&quot;slide_title&quot;:&quot;Slide #2&quot;,&quot;_id&quot;:&quot;d8e3004&quot;},{&quot;slide_title&quot;:&quot;Slide #2&quot;,&quot;_id&quot;:&quot;daddcf2&quot;},{&quot;slide_title&quot;:&quot;Slide #2&quot;,&quot;_id&quot;:&quot;81593c8&quot;},{&quot;slide_title&quot;:&quot;Slide #2&quot;,&quot;_id&quot;:&quot;0627b4d&quot;},{&quot;slide_title&quot;:&quot;Slide #2&quot;,&quot;_id&quot;:&quot;8174f0f&quot;},{&quot;slide_title&quot;:&quot;Slide #2&quot;,&quot;_id&quot;:&quot;00cac47&quot;}],&quot;slides_to_show&quot;:&quot;5&quot;,&quot;slides_to_show_tablet&quot;:&quot;3&quot;,&quot;slides_to_show_mobile&quot;:&quot;2&quot;,&quot;autoplay_speed&quot;:0,&quot;speed&quot;:2000,&quot;image_spacing_custom&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;autoplay&quot;:&quot;yes&quot;,&quot;infinite&quot;:&quot;yes&quot;,&quot;offset_sides&quot;:&quot;none&quot;,&quot;image_spacing_custom_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;image_spacing_custom_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}\" data-widget_type=\"nested-carousel.default\">\n\t\t\t\t\t\t\t<div class=\"e-n-carousel swiper\" role=\"region\" aria-roledescription=\"carousel\" aria-label=\"Carousel\" dir=\"ltr\">\n\t\t\t<div class=\"swiper-wrapper\" aria-live=\"off\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" data-slide=\"1\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"1 of 7\">\n\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-6701697 frosted-glass-card e-flex e-con-boxed e-con e-child\" data-id=\"6701697\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b0be8b9 elementor-view-default elementor-position-block-start elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"b0be8b9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" data-name=\"map set\" width=\"64px\" height=\"60px\" viewBox=\"0 0 64 60\"><defs><linearGradient id=\"iconGradient\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"100%\"><stop offset=\"0%\" stop-color=\"#008BFF\"><\/stop><stop offset=\"100%\" stop-color=\"#50f5FF\"><\/stop><\/linearGradient><\/defs><style type=\"text\/css\">    .thicken {      fill: url(#iconGradient);      stroke: url(#iconGradient);      stroke-width: 1px;      stroke-linejoin: round;    }  <\/style><g class=\"thicken\"><path d=\"m62,11.5c0-4.21-6.29-7.76-16.84-9.49-.29-.05-.59.03-.81.22-.22.19-.35.47-.35.76v16.19c-3.56.51-7.6.81-12,.81s-8.44-.3-12-.81V3c0-.29-.13-.57-.35-.76-.22-.19-.52-.27-.81-.22C8.29,3.74,2,7.29,2,11.5c0,.11.02.23.03.34,0,.05-.03.1-.03.16v32c0,3.83,5.56,7.02,15.26,8.76.54.1,1.06-.26,1.16-.81.1-.54-.26-1.06-.81-1.16-9.41-1.69-13.62-4.63-13.62-6.8V15.79c4.64,4.06,16.6,6.21,28,6.21s23.36-2.15,28-6.21v28.21c0,2.17-4.21,5.11-13.62,6.8-.54.1-.91.62-.81,1.16.09.48.51.82.98.82.06,0,.12,0,.18-.02,9.7-1.74,15.26-4.93,15.26-8.76V12c0-.06-.02-.1-.03-.16,0-.11.03-.23.03-.34ZM18,4.19v14.62c-8.42-1.54-14-4.43-14-7.31s5.58-5.77,14-7.31Zm28,0c8.42,1.54,14,4.43,14,7.31s-5.58,5.77-14,7.31V4.19Z\"><\/path><path d=\"m41.22,51.68l-4.22-1.4v-2.81c1.9-1.27,3.31-3.25,3.8-5.6,1.26-.35,2.2-1.5,2.2-2.88v-4c0-1.49-1.09-2.72-2.52-2.95-.45-1.28-1.16-2.45-2.12-3.42-1.71-1.7-3.97-2.63-6.37-2.63-3.86,0-7.26,2.45-8.51,6.05-1.41.24-2.49,1.47-2.49,2.95v4c0,1.37.93,2.52,2.2,2.88.5,2.34,1.9,4.32,3.8,5.6v2.81l-4.22,1.4c-2.86.96-4.78,3.63-4.78,6.64v.68c0,1.65,1.35,3,3,3h22c1.65,0,3-1.35,3-3v-.68c0-3.01-1.92-5.68-4.78-6.64Zm-9.22-23.68c1.86,0,3.62.73,4.95,2.04.56.57,1.01,1.24,1.36,1.96h-12.62c1.14-2.4,3.57-4,6.32-4Zm-9,7c0-.55.45-1,1-1h15.75s0,0,0,0c0,0,0,0,0,0h.25c.55,0,1,.45,1,1v4c0,.55-.45,1-1,1h-5.59l-1.71-1.71c-.39-.39-1.02-.39-1.41,0l-1.71,1.71h-5.59c-.55,0-1-.45-1-1v-4Zm2.29,7h4.71c.27,0,.52-.11.71-.29l1.29-1.29,1.29,1.29c.19.19.44.29.71.29h4.71c-.87,2.92-3.57,5-6.71,5s-5.84-2.08-6.71-5Zm6.71,7c1.05,0,2.06-.19,3-.52v2.52c0,1.65-1.35,3-3,3s-3-1.35-3-3v-2.52c.94.33,1.95.52,3,.52Zm12,10c0,.55-.45,1-1,1h-22c-.55,0-1-.45-1-1v-.68c0-2.15,1.37-4.06,3.42-4.74l3.78-1.26c.58,2.11,2.5,3.68,4.8,3.68s4.22-1.57,4.8-3.68l3.78,1.26c2.04.68,3.42,2.59,3.42,4.74v.68Z\"><\/path><\/g><\/svg>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\t360 Virtual<br>Tours\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h3>\n\t\t\t\t\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" data-slide=\"2\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"2 of 7\">\n\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-3d784b9 e-flex e-con-boxed e-con e-child\" data-id=\"3d784b9\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f1fb2f0 elementor-view-default elementor-position-block-start elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"f1fb2f0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" data-name=\"map pin\" viewBox=\"0 0 105.93 122.88\"><defs><linearGradient id=\"iconGradient\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"100%\"><stop offset=\"0%\" stop-color=\"#008BFF\"><\/stop><stop offset=\"100%\" stop-color=\"#50f5FF\"><\/stop><\/linearGradient><\/defs><style type=\"text\/css\">    path, g { fill: url(#iconGradient); fill-rule:evenodd; }  <\/style><path d=\"M56.92,73.14a1.62,1.62,0,0,1-1.86.06A65.25,65.25,0,0,1,38.92,58.8,51.29,51.29,0,0,1,28.06,35.37C26.77,27.38,28,19.7,32,13.45a27,27,0,0,1,6-6.66A29.23,29.23,0,0,1,56.36,0,26,26,0,0,1,73.82,7.12a26,26,0,0,1,4.66,5.68c4.27,7,5.19,16,3.31,25.12A55.29,55.29,0,0,1,56.92,73.14Zm-19,.74V101.7l30.15,13V78.87a65.17,65.17,0,0,0,6.45-5.63v41.18l25-12.59v-56l-9.61,3.7a61.61,61.61,0,0,0,2.38-7.81l9.3-3.59A3.22,3.22,0,0,1,105.7,40a3.18,3.18,0,0,1,.22,1.16v62.7a3.23,3.23,0,0,1-2,3L72.72,122.53a3.23,3.23,0,0,1-2.92,0l-35-15.17L4.68,122.53a3.22,3.22,0,0,1-4.33-1.42A3.28,3.28,0,0,1,0,119.66V53.24a3.23,3.23,0,0,1,2.32-3.1L18.7,43.82a58.63,58.63,0,0,0,2.16,6.07L6.46,55.44v59l25-12.59V67.09a76.28,76.28,0,0,0,6.46,6.79ZM55.15,14.21A13.72,13.72,0,1,1,41.43,27.93,13.72,13.72,0,0,1,55.15,14.21Z\"><\/path><\/svg>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tGoogle Maps<br>Optimization\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h3>\n\t\t\t\t\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" data-slide=\"3\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"3 of 7\">\n\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-624bd6d e-flex e-con-boxed e-con e-child\" data-id=\"624bd6d\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9550f29 elementor-view-default elementor-position-block-start elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"9550f29\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"3.5 2 93.2 93.2\">version=\"1.1\" xml:space=\"preserve\" style=\"\" x=\"0px\" y=\"0px\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"2\"&gt;  <defs><linearGradient id=\"iconGradient\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"100%\"><stop offset=\"0%\" stop-color=\"#008BFF\"><\/stop><stop offset=\"100%\" stop-color=\"#50f5FF\"><\/stop><\/linearGradient><\/defs>  <style type=\"text\/css\">    path, g { fill: url(#iconGradient); }  <\/style> <path d=\"m24 17c-6.0508 0-11 4.9492-11 11s4.9492 11 11 11 11-4.9492 11-11-4.9492-11-11-11zm52 0c-6.0508 0-11 4.9492-11 11s4.9492 11 11 11 11-4.9492 11-11-4.9492-11-11-11zm-26 2c-7.1562 0-13 5.8438-13 13s5.8438 13 13 13 13-5.8438 13-13-5.8438-13-13-13zm-26 2c3.8906 0 7 3.1094 7 7s-3.1094 7-7 7-7-3.1094-7-7 3.1094-7 7-7zm52 0c3.8906 0 7 3.1094 7 7s-3.1094 7-7 7-7-3.1094-7-7 3.1094-7 7-7zm-26 2c4.9961 0 9 4.0078 9 9 0 4.9961-4.0039 9-9 9s-9-4.0039-9-9c0-4.9922 4.0039-9 9-9zm-22.809 18c-5.6836 0-11.262 0.71484-15.676 3.1055s-7.5156 6.7734-7.5156 12.918v11.094c0 0.39062 0.11328 0.77344 0.33203 1.1016 2.8711 4.3594 14.285 5.5039 18.539 5.7812 1.1016 0.074219 2.0547-0.76172 2.1289-1.8672 0.074219-1.1016-0.76172-2.0547-1.8672-2.125-1.3945-0.089843-11.762-0.85937-15.133-3.7695v-10.211c0-4.918 1.9922-7.5469 5.418-9.4023 3.4297-1.8555 8.4453-2.6211 13.77-2.6211 4.957 0 10.246 1.0742 13.844 3.0625 0.96875 0.53516 2.1836 0.18359 2.7188-0.78125s0.18359-2.1836-0.78125-2.7188c-4.4766-2.4766-10.273-3.5625-15.781-3.5625zm45.621 0c-5.5078 0-11.305 1.0859-15.781 3.5625-0.96484 0.53516-1.3164 1.75-0.78125 2.7188s1.75 1.3164 2.7188 0.78125c3.5977-1.9883 8.8867-3.0625 13.844-3.0625 5.3242 0 10.34 0.76562 13.77 2.6211 3.4297 1.8555 5.4219 4.4844 5.418 9.4023v10.211c-3.375 2.918-13.758 3.6836-15.133 3.7695-1.1016 0.070313-1.9375 1.0234-1.8672 2.125 0.070312 1.1016 1.0234 1.9375 2.1289 1.8672 4.2617-0.27734 15.672-1.4219 18.539-5.7812 0.21484-0.32812 0.33203-0.71094 0.33203-1.1016v-11.094c0-6.1445-3.1016-10.531-7.5156-12.918-4.4141-2.3906-9.9922-3.1055-15.676-3.1055zm-22.812 8c-6.0234 0-11.559 0.88281-15.824 3.2109-4.2656 2.3281-7.1758 6.4141-7.1758 11.789v13c0 0.81641 0.49609 1.5547 1.2578 1.8594 0 0 10.258 4.1445 21.742 4.1406 11.484 0 21.742-4.1406 21.742-4.1406 0.75781-0.30469 1.2578-1.0391 1.2578-1.8594v-13c0-5.3711-2.9141-9.457-7.1797-11.789-4.2656-2.3281-9.7969-3.2109-15.82-3.2109zm0 4c5.6133 0 10.578 0.90625 13.902 2.7266 3.3281 1.8164 5.0977 4.2305 5.0977 8.2734v11.535c-1.6953 0.63281-9.5547 3.4648-19 3.4648s-17.305-2.832-19-3.4648v-11.535c0-4.0469 1.7695-6.457 5.0938-8.2734 3.3281-1.8164 8.293-2.7266 13.906-2.7266z\"><\/path><\/svg>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tDigital Presence<br>Management\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h3>\n\t\t\t\t\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" data-slide=\"4\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"4 of 7\">\n\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2e67f57 e-flex e-con-boxed e-con e-child\" data-id=\"2e67f57\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4ed9ae4 elementor-view-default elementor-position-block-start elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"4ed9ae4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" xmlns:xlink=\"http:\/\/www.w3.org\/1999\/xlink\" viewBox=\"8 8 48 48\" xml:space=\"preserve\" style=\"\" x=\"0px\" y=\"0px\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"2\">  <defs>    <linearGradient id=\"iconGradient\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"100%\">      <stop offset=\"0%\" stop-color=\"#008BFF\"><\/stop>      <stop offset=\"100%\" stop-color=\"#50f5FF\"><\/stop>    <\/linearGradient>  <\/defs>  <style type=\"text\/css\">    path, g { fill: url(#iconGradient); }  <\/style>  <rect x=\"0\" y=\"0\" width=\"64\" height=\"64\" style=\"\" fill=\"none\"><\/rect>  <path d=\"M32,11c-11.59,0 -21,9.41 -21,21c-0,11.59 9.41,21 21,21c11.59,0 21,-9.41 21,-21c0,-11.59 -9.41,-21 -21,-21Zm-0,2c10.486,0 19,8.514 19,19c0,10.486 -8.514,19 -19,19c-10.486,0 -19,-8.514 -19,-19c-0,-10.486 8.514,-19 19,-19Z\"><\/path>  <path d=\"M32,19c-7.175,0 -13,5.825 -13,13c0,7.175 5.825,13 13,13c7.175,-0 13,-5.825 13,-13c-0,-7.175 -5.825,-13 -13,-13Zm0,2c6.071,0 11,4.929 11,11c-0,6.071 -4.929,11 -11,11c-6.071,0 -11,-4.929 -11,-11c0,-6.071 4.929,-11 11,-11Z\"><\/path>  <path d=\"M32,27c-2.76,0 -5,2.24 -5,5c0,2.76 2.24,5 5,5c2.76,-0 5,-2.24 5,-5c-0,-2.76 -2.24,-5 -5,-5Zm0,2c1.656,0 3,1.344 3,3c-0,1.656 -1.344,3 -3,3c-1.656,-0 -3,-1.344 -3,-3c0,-1.656 1.344,-3 3,-3Z\"><\/path>  <path d=\"M9,33l14,0c0.552,0 1,-0.448 1,-1c0,-0.552 -0.448,-1 -1,-1l-14,0c-0.552,0 -1,0.448 -1,1c0,0.552 0.448,1 1,1Z\"><\/path>  <path d=\"M33,55l0,-14c-0,-0.552 -0.448,-1 -1,-1c-0.552,0 -1,0.448 -1,1l0,14c-0,0.552 0.448,1 1,1c0.552,0 1,-0.448 1,-1Z\"><\/path>  <path d=\"M41,33l14,0c0.552,0 1,-0.448 1,-1c0,-0.552 -0.448,-1 -1,-1l-14,0c-0.552,0 -1,0.448 -1,1c0,0.552 0.448,1 1,1Z\"><\/path>  <path d=\"M33,23l0,-14c-0,-0.552 -0.448,-1 -1,-1c-0.552,0 -1,0.448 -1,1l0,14c-0,0.552 0.448,1 1,1c0.552,0 1,-0.448 1,-1Z\"><\/path><\/svg>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tLocation<br>Intelligence\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h3>\n\t\t\t\t\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" data-slide=\"5\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"5 of 7\">\n\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-34e183b e-flex e-con-boxed e-con e-child\" data-id=\"34e183b\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5b80e16 elementor-view-default elementor-position-block-start elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"5b80e16\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0.9 0.8 99 99\">version=\"1.1\" xml:space=\"preserve\" style=\"\" x=\"0px\" y=\"0px\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" stroke-linejoin=\"round\" stroke-miterlimit=\"2\"&gt;  <defs><linearGradient id=\"iconGradient\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"100%\"><stop offset=\"0%\" stop-color=\"#008BFF\"><\/stop><stop offset=\"100%\" stop-color=\"#50f5FF\"><\/stop><\/linearGradient><\/defs>  <style type=\"text\/css\">    path, g { fill: url(#iconGradient); }  <\/style>  <rect x=\"0\" y=\"0\" width=\"64\" height=\"64\" style=\"\" fill=\"none\"><\/rect> <path d=\"m98.434 88.156-6.7383-6.7422h-0.003906c-0.97656-0.97656-2.5586-0.97656-3.5352 0-0.97656 0.97656-0.97656 2.5586 0 3.5352l2.4727 2.4727h-77.219c-0.46094 0-0.83203-0.37109-0.83203-0.83203v-77.219l2.4727 2.4727c0.97656 0.97656 2.5586 0.97656 3.5352 0 0.97656-0.97656 0.97656-2.5586 0-3.5352l-6.7422-6.7422c-0.97656-0.97266-2.5586-0.97266-3.5352 0l-6.7422 6.7422c-0.94922 0.98047-0.93359 2.5391 0.027344 3.5039 0.96484 0.96484 2.5234 0.97656 3.5078 0.03125l2.4766-2.4766v77.223c0.003906 3.2188 2.6133 5.8281 5.832 5.832h77.223l-2.4766 2.4766c-0.48047 0.46875-0.75781 1.1094-0.76172 1.7773-0.003906 0.67188 0.25781 1.3164 0.73438 1.7891 0.47266 0.47656 1.1172 0.73828 1.7891 0.73438 0.66797-0.007813 1.3086-0.28516 1.7734-0.76562l6.7383-6.7422h0.003906c0.97266-0.97656 0.97266-2.5586 0-3.5352z\"><\/path> <path d=\"m84.594 36.125c1.3789 0 2.5-1.1211 2.5-2.5v-16.094 0.003906c-0.015625-0.20703-0.058594-0.40625-0.125-0.60156-0.015625-0.12109-0.042969-0.23828-0.082031-0.35156-0.066407-0.11328-0.14453-0.22656-0.22656-0.33203-0.09375-0.16406-0.20312-0.31641-0.33203-0.45703l-0.03125-0.042969c-0.10547-0.074219-0.21875-0.13672-0.33203-0.19141-0.42969-0.23828-0.89844-0.39453-1.3828-0.47266h-17.844c-1.3789 0-2.5 1.1211-2.5 2.5 0 1.3828 1.1211 2.5 2.5 2.5h12.137l-20.074 21.707h0.003907c-0.27344 0.29297-0.71484 0.35156-1.0547 0.14453l-14-8.6367c-2.0898-1.2852-4.7578-1.1328-6.6836 0.38672l-16.469 13.023c-0.51953 0.41016-0.85547 1.0117-0.93359 1.6719-0.078124 0.65625 0.10938 1.3203 0.52344 1.8398 0.85547 1.0859 2.4297 1.2695 3.5117 0.41016l16.477-13.031c0.27734-0.21484 0.65625-0.23828 0.95703-0.054687l14 8.6367c2.375 1.4609 5.4531 1.043 7.3516-1l19.609-21.219v9.668c0.003906 1.3789 1.1211 2.4922 2.5 2.4922z\"><\/path> <path d=\"m74.465 44.707v30.977c0 1.3789 1.1211 2.5 2.5 2.5 1.3828 0 2.5-1.1211 2.5-2.5v-30.977c0-1.3828-1.1172-2.5-2.5-2.5-1.3789 0-2.5 1.1172-2.5 2.5z\"><\/path> <path d=\"m55.863 57.25v18.434c0 1.3789 1.1211 2.5 2.5 2.5 1.3789 0 2.5-1.1211 2.5-2.5v-18.434c0-1.3789-1.1211-2.5-2.5-2.5-1.3789 0-2.5 1.1211-2.5 2.5z\"><\/path> <path d=\"m37.262 50.207v25.477c0 1.3789 1.1211 2.5 2.5 2.5 1.3828 0 2.5-1.1211 2.5-2.5v-25.477c0-1.3828-1.1172-2.5-2.5-2.5-1.3789 0-2.5 1.1172-2.5 2.5z\"><\/path> <path d=\"m19.668 62.91v12.797c0 1.3789 1.1172 2.5 2.5 2.5 1.3789 0 2.5-1.1211 2.5-2.5v-12.797c0-1.3828-1.1211-2.5-2.5-2.5-1.3828 0-2.5 1.1172-2.5 2.5z\"><\/path><\/svg>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tBusiness<br>Visibility\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h3>\n\t\t\t\t\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" data-slide=\"6\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"6 of 7\">\n\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-dcf98f5 e-flex e-con-boxed e-con e-child\" data-id=\"dcf98f5\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9aa3fb0 elementor-view-default elementor-position-block-start elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"9aa3fb0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" xmlns:xlink=\"http:\/\/www.w3.org\/1999\/xlink\" id=\"Layer_1\" x=\"0px\" y=\"0px\" width=\"100px\" height=\"100px\" viewBox=\"-6 0 135 100\" xml:space=\"preserve\">  <defs>    <linearGradient id=\"iconGradient\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"100%\">      <stop offset=\"0%\" stop-color=\"#008BFF\"><\/stop>      <stop offset=\"100%\" stop-color=\"#50f5FF\"><\/stop>    <\/linearGradient>  <\/defs>  <style type=\"text\/css\">    path, g { fill: url(#iconGradient); }  <\/style>  <g>    <path d=\"M5.535,15.447h98.221c1.527,0,2.891,0.62,3.883,1.611c0.99,0.991,1.611,2.396,1.611,3.882v70.134 c0,1.528-0.621,2.891-1.611,3.883c-0.082,0.082-0.166,0.165-0.289,0.247c-0.951,0.868-2.23,1.363-3.635,1.363H5.494 c-1.528,0-2.892-0.619-3.883-1.61S0,92.562,0,91.075V20.941c0-1.528,0.62-2.891,1.611-3.882s2.396-1.611,3.883-1.611H5.535 L5.535,15.447z M28.218,34.489c4.354,0,7.882,3.528,7.882,7.882s-3.528,7.883-7.882,7.883c-4.354,0-7.882-3.529-7.882-7.883 C20.335,38.018,23.864,34.489,28.218,34.489L28.218,34.489z M61.389,68.316l15.766-27.258l16.748,42.363l-78.165-0.001v-5.254 l6.57-0.327l6.567-16.093l3.282,11.496h9.855l8.537-22.004L61.389,68.316L61.389,68.316z M21.891,6.525 c-1.817,0-3.263-1.486-3.263-3.263C18.628,1.445,20.115,0,21.891,0h97.726c1.816,0,3.262,1.487,3.262,3.263v68.895 c0,1.818-1.486,3.264-3.262,3.264c-1.818,0-3.264-1.487-3.264-3.264V6.567H21.891V6.525L21.891,6.525z M102.723,21.974H6.567 v68.027h96.155V21.974L102.723,21.974z\"><\/path>  <\/g><\/svg>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tProfessional<br>HDR Photography\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h3>\n\t\t\t\t\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" data-slide=\"7\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"7 of 7\">\n\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4ff57de e-flex e-con-boxed e-con e-child\" data-id=\"4ff57de\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c13d1dc elementor-view-default elementor-position-block-start elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"c13d1dc\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" shape-rendering=\"geometricPrecision\" text-rendering=\"geometricPrecision\" image-rendering=\"optimizeQuality\" viewBox=\"-20 -35 550 550\"><defs><linearGradient id=\"iconGradient\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"100%\"><stop offset=\"0%\" stop-color=\"#008BFF\"><\/stop><stop offset=\"100%\" stop-color=\"#50f5FF\"><\/stop><\/linearGradient><\/defs><style type=\"text\/css\">    path, g { fill: url(#iconGradient); }  <\/style><path fill-rule=\"nonzero\" d=\"M97.632 0h316.737c26.86 0 51.272 10.989 68.953 28.673 17.696 17.691 28.679 42.115 28.679 68.959v273.293c0 26.84-10.995 51.255-28.683 68.946-17.69 17.69-42.111 28.682-68.949 28.682H97.632c-26.844 0-51.268-10.986-68.958-28.676C10.989 422.192 0 397.785 0 370.925V97.632c0-26.867 10.983-51.281 28.667-68.965C46.351 10.982 70.766 0 97.632 0zm141.826 357.792l-63.593 16.94 9.208-68.237 54.385 51.297zm39.666-161.167c1.638-1.889 5.019-2.755 7.347-1.101l48.183 43.829c2.038 2.039 1.956 5.168-.166 7.356l-81.207 95.581-54.328-51.3 80.171-94.365zM28.619 122.962H88.37l36.215-92.199c.286-.725.62-1.441.998-2.144H97.632c-18.963 0-36.218 7.77-48.73 20.283-12.512 12.512-20.283 29.767-20.283 48.73v25.33zm122.084-94.343l-37.057 94.343h108.691l36.129-91.983a19.68 19.68 0 011.116-2.36H150.703zm133.745 0l-37.054 94.343h105.793l36.214-92.199c.287-.725.621-1.441.999-2.144H284.448zm131.066.01l-37.051 94.333h104.919v-25.33c0-18.947-7.777-36.205-20.296-48.724-12.258-12.261-29.067-19.974-47.572-20.279zm67.868 122.946H28.619v219.35c0 18.956 7.777 36.204 20.289 48.717 12.519 12.519 29.777 20.292 48.724 20.292h316.737c18.941 0 36.195-7.78 48.714-20.299 12.519-12.518 20.299-29.773 20.299-48.71v-219.35z\"><\/path><\/svg>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tConcepts<br>&amp; Cinematography\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h3>\n\t\t\t\t\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\n<\/div>\n<div class=\"elementor-element elementor-element-92fb513 e-con e-atomic-element e-flexbox-base e-c42740d \" data-id=\"92fb513\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"92fb513\" data-e-type=\"e-flexbox\" data-id=\"92fb513\">\n    <div class=\"elementor-element elementor-element-e8ed223 ps-video-light-stage e-flex e-con-boxed e-con e-parent\" data-id=\"e8ed223\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-675b77e e-con-full e-flex e-con e-child\" data-id=\"675b77e\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c67dd1f elementor-invisible elementor-widget elementor-widget-heading\" data-id=\"c67dd1f\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeInUp&quot;}\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">The End of Online <span class=\"animated-guesswork\">Guesswork.<\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4122050 elementor-invisible elementor-widget elementor-widget-heading\" data-id=\"4122050\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeInUp&quot;,&quot;_animation_delay&quot;:200}\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Total transparency. Absolute trust. Faster Decisions.<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-796d880 elementor-invisible elementor-widget elementor-widget-text-editor\" data-id=\"796d880\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeInUp&quot;,&quot;_animation_delay&quot;:400}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Traditional photos and videos only tell half the story. PanoSky reveals the rest. Give your audience total control to explore every dimension in true-to-life detail, building unshakeable confidence before they ever step inside.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9ed26a3 elementor-widget elementor-widget-html\" data-id=\"9ed26a3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<script>\r\ndocument.addEventListener('DOMContentLoaded', () => {\r\n    const videoElements = document.querySelectorAll('.ps-video-target video');\r\n\r\n    if (videoElements.length === 0) return;\r\n\r\n    \/\/ Force inject the mobile-safe tags AND the loop command\r\n    videoElements.forEach(video => {\r\n        video.setAttribute('playsinline', '');\r\n        video.setAttribute('webkit-playsinline', ''); \r\n        video.muted = true; \r\n        video.loop = true; \/\/ <-- THE FIX: This forces the video to repeat endlessly\r\n    });\r\n\r\n    const observer = new IntersectionObserver((entries) => {\r\n        entries.forEach(entry => {\r\n            const video = entry.target;\r\n\r\n            if (entry.isIntersecting) {\r\n                video.currentTime = 0; \r\n                \r\n                let playPromise = video.play();\r\n                \r\n                if (playPromise !== undefined) {\r\n                    playPromise.catch(error => {\r\n                        console.log(\"Autoplay was prevented by mobile data saving\/Low Power Mode.\");\r\n                    });\r\n                }\r\n            } else {\r\n                video.pause();\r\n            }\r\n        });\r\n    }, {\r\n        threshold: 0.3 \r\n    });\r\n\r\n    videoElements.forEach(video => {\r\n        observer.observe(video);\r\n    });\r\n});\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e7ec8e4 elementor-widget elementor-widget-html\" data-id=\"e7ec8e4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\r\n\/* ============================================\r\n   PREVENT HORIZONTAL PAGE SCROLLING\r\n   ============================================ *\/\r\n\r\nhtml,\r\nbody {\r\n    overflow-x: clip;\r\n}\r\n\r\n\/* Fallback for browsers without overflow: clip *\/\r\n\r\n@supports not (overflow: clip) {\r\n    html,\r\n    body {\r\n        overflow-x: hidden;\r\n    }\r\n}\r\n\r\n\r\n\/* ============================================\r\n   SMOOTH MAGNIFIER EXPANSION\r\n   ============================================ *\/\r\n\r\n@property --ps-dot-lens-radius {\r\n    syntax: \"<length>\";\r\n    initial-value: 0px;\r\n    inherits: true;\r\n}\r\n\r\n\r\n\/* ============================================\r\n   PANOSKY DOT MAGNIFIER CONTROLS\r\n   ============================================ *\/\r\n\r\n.ps-video-light-stage {\r\n    \/* Normal spacing between dots *\/\r\n    --ps-dot-gap: 11px;\r\n\r\n    \/* Maximum spacing at the magnifier center *\/\r\n    --ps-dot-magnified-gap: 17px;\r\n\r\n    \/* Dot size stays unchanged *\/\r\n    --ps-dot-size: 0.4px;\r\n\r\n    \/* Normal and highlighted dot visibility *\/\r\n    --ps-dot-opacity: 0.17;\r\n    --ps-dot-highlight-opacity: 0.85;\r\n\r\n    \/* Magnifier radius *\/\r\n    --ps-dot-lens-size: 175px;\r\n\r\n    \/*\r\n       Magnification falloff:\r\n\r\n       Lower values spread the effect farther.\r\n       Higher values concentrate it near the center.\r\n    *\/\r\n    --ps-dot-falloff: 2.4;\r\n\r\n    \/* Cursor-follow smoothness *\/\r\n    --ps-dot-follow-speed: 0.14;\r\n\r\n    \/* Vertical extension beyond the container *\/\r\n    --ps-dot-overflow: 180px;\r\n\r\n    \/* Colors *\/\r\n    --ps-dot-rgb: 155, 180, 205;\r\n    --ps-dot-highlight-rgb: 80, 245, 255;\r\n    --ps-dot-glow-rgb: 0, 139, 255;\r\n\r\n    position: relative !important;\r\n\r\n    overflow: visible !important;\r\n\r\n    isolation: isolate;\r\n}\r\n\r\n\r\n\/* Let the dot effect extend outside Elementor wrappers *\/\r\n\r\n.ps-video-light-stage > .e-con-inner,\r\n.ps-video-light-stage > .elementor-container,\r\n.ps-video-light-stage > .elementor-widget-wrap {\r\n    overflow: visible !important;\r\n}\r\n\r\n\r\n\/* ============================================\r\n   FULL-WIDTH DOT FIELD\r\n   ============================================ *\/\r\n\r\n.ps-dot-magnifier-field {\r\n    --ps-pointer-x: 50%;\r\n    --ps-pointer-y: 50%;\r\n\r\n    --ps-dot-lens-radius: 0px;\r\n\r\n    position: absolute;\r\n\r\n    left: 50%;\r\n\r\n    top: calc(\r\n        -1 * var(--ps-dot-overflow)\r\n    );\r\n\r\n    width: 100vw;\r\n\r\n    height: calc(\r\n        100% +\r\n        var(--ps-dot-overflow) * 2\r\n    );\r\n\r\n    transform: translateX(-50%);\r\n\r\n    z-index: 0;\r\n\r\n    pointer-events: none;\r\n\r\n    overflow: visible;\r\n\r\n    transition:\r\n        --ps-dot-lens-radius\r\n        650ms\r\n        cubic-bezier(0.22, 1, 0.36, 1);\r\n}\r\n\r\n\r\n\/* Keep the video above the dot background *\/\r\n\r\n.ps-video-light-stage > .e-con-inner,\r\n.ps-video-light-stage > .elementor-widget,\r\n.ps-video-light-stage .ps-video-target {\r\n    position: relative;\r\n    z-index: 1;\r\n}\r\n\r\n\r\n\/* ============================================\r\n   SUBTLE BLUE AURA\r\n   ============================================ *\/\r\n\r\n.ps-dot-magnifier-field__aura {\r\n    position: absolute;\r\n\r\n    inset: 0;\r\n\r\n    z-index: 0;\r\n\r\n    pointer-events: none;\r\n\r\n    background:\r\n        radial-gradient(\r\n            circle\r\n                calc(\r\n                    var(--ps-dot-lens-radius) * 1.08\r\n                )\r\n                at\r\n                var(--ps-pointer-x)\r\n                var(--ps-pointer-y),\r\n\r\n            rgba(\r\n                var(--ps-dot-glow-rgb),\r\n                0.075\r\n            ) 0%,\r\n\r\n            rgba(\r\n                var(--ps-dot-glow-rgb),\r\n                0.032\r\n            ) 42%,\r\n\r\n            transparent 78%\r\n        );\r\n\r\n    opacity: 0;\r\n\r\n    transition:\r\n        opacity 420ms ease;\r\n}\r\n\r\n\r\n\/* ============================================\r\n   NORMAL DOT GRID\r\n   ============================================ *\/\r\n\r\n.ps-dot-magnifier-field__base {\r\n    position: absolute;\r\n\r\n    inset: 0;\r\n\r\n    z-index: 1;\r\n\r\n    pointer-events: none;\r\n\r\n    background-image:\r\n        radial-gradient(\r\n            circle,\r\n\r\n            rgba(\r\n                var(--ps-dot-rgb),\r\n                var(--ps-dot-opacity)\r\n            )\r\n                0\r\n                var(--ps-dot-size),\r\n\r\n            transparent\r\n                calc(\r\n                    var(--ps-dot-size) + 0.45px\r\n                )\r\n        );\r\n\r\n    background-size:\r\n        var(--ps-dot-gap)\r\n        var(--ps-dot-gap);\r\n\r\n    background-position: 0 0;\r\n\r\n    \/*\r\n       Fade the original grid within the lens so\r\n       the distorted dots can blend in smoothly.\r\n    *\/\r\n\r\n    -webkit-mask-image:\r\n        radial-gradient(\r\n            circle\r\n                var(--ps-dot-lens-radius)\r\n                at\r\n                var(--ps-pointer-x)\r\n                var(--ps-pointer-y),\r\n\r\n            transparent 0%,\r\n\r\n            transparent 46%,\r\n\r\n            rgba(0, 0, 0, 0.12) 63%,\r\n\r\n            rgba(0, 0, 0, 0.64) 84%,\r\n\r\n            #000 100%\r\n        ),\r\n\r\n        linear-gradient(\r\n            to bottom,\r\n\r\n            transparent 0%,\r\n\r\n            rgba(0, 0, 0, 0.76) 12%,\r\n\r\n            #000 24%,\r\n\r\n            #000 76%,\r\n\r\n            rgba(0, 0, 0, 0.76) 88%,\r\n\r\n            transparent 100%\r\n        );\r\n\r\n    -webkit-mask-composite: source-in;\r\n\r\n    mask-image:\r\n        radial-gradient(\r\n            circle\r\n                var(--ps-dot-lens-radius)\r\n                at\r\n                var(--ps-pointer-x)\r\n                var(--ps-pointer-y),\r\n\r\n            transparent 0%,\r\n\r\n            transparent 46%,\r\n\r\n            rgba(0, 0, 0, 0.12) 63%,\r\n\r\n            rgba(0, 0, 0, 0.64) 84%,\r\n\r\n            #000 100%\r\n        ),\r\n\r\n        linear-gradient(\r\n            to bottom,\r\n\r\n            transparent 0%,\r\n\r\n            rgba(0, 0, 0, 0.76) 12%,\r\n\r\n            #000 24%,\r\n\r\n            #000 76%,\r\n\r\n            rgba(0, 0, 0, 0.76) 88%,\r\n\r\n            transparent 100%\r\n        );\r\n\r\n    mask-composite: intersect;\r\n}\r\n\r\n\r\n\/* ============================================\r\n   CURSOR-FOLLOWING MAGNIFIER\r\n   ============================================ *\/\r\n\r\n.ps-dot-magnifier-field__lens {\r\n    position: absolute;\r\n\r\n    top: 0;\r\n    left: 0;\r\n\r\n    z-index: 2;\r\n\r\n    pointer-events: none;\r\n\r\n    opacity: 0;\r\n\r\n    transition:\r\n        opacity 360ms ease;\r\n\r\n    will-change: transform;\r\n}\r\n\r\n\r\n\/* Activate the magnifier *\/\r\n\r\n.ps-dot-magnifier-field.is-active {\r\n    --ps-dot-lens-radius:\r\n        var(--ps-dot-lens-size);\r\n}\r\n\r\n.ps-dot-magnifier-field.is-active\r\n.ps-dot-magnifier-field__lens {\r\n    opacity: 1;\r\n}\r\n\r\n.ps-dot-magnifier-field.is-active\r\n.ps-dot-magnifier-field__aura {\r\n    opacity: 1;\r\n}\r\n\r\n\r\n\/* ============================================\r\n   MOBILE SETTINGS\r\n   ============================================ *\/\r\n\r\n@media (max-width: 767px) {\r\n    .ps-video-light-stage {\r\n        --ps-dot-gap: 12px;\r\n\r\n        --ps-dot-magnified-gap: 17px;\r\n\r\n        --ps-dot-size: 0.72px;\r\n\r\n        --ps-dot-opacity: 0.13;\r\n\r\n        --ps-dot-overflow: 125px;\r\n\r\n        --ps-dot-lens-size: 125px;\r\n    }\r\n}\r\n\r\n\r\n\/* Touch devices show only the lightweight static grid *\/\r\n\r\n@media (hover: none), (pointer: coarse) {\r\n    .ps-dot-magnifier-field__lens,\r\n    .ps-dot-magnifier-field__aura {\r\n        display: none;\r\n    }\r\n}\r\n<\/style>\r\n\r\n\r\n<div\r\n    class=\"ps-dot-magnifier-field\"\r\n    aria-hidden=\"true\"\r\n>\r\n    <span\r\n        class=\"ps-dot-magnifier-field__aura\"\r\n    ><\/span>\r\n\r\n    <span\r\n        class=\"ps-dot-magnifier-field__base\"\r\n    ><\/span>\r\n\r\n    <canvas\r\n        class=\"ps-dot-magnifier-field__lens\"\r\n    ><\/canvas>\r\n<\/div>\r\n\r\n\r\n<script>\r\n(function () {\r\n    \"use strict\";\r\n\r\n    const currentScript =\r\n        document.currentScript;\r\n\r\n    if (!currentScript) {\r\n        return;\r\n    }\r\n\r\n    const field =\r\n        currentScript.previousElementSibling;\r\n\r\n    if (\r\n        !field ||\r\n        !field.classList.contains(\r\n            \"ps-dot-magnifier-field\"\r\n        )\r\n    ) {\r\n        return;\r\n    }\r\n\r\n    const stage =\r\n        currentScript.closest(\r\n            \".ps-video-light-stage\"\r\n        );\r\n\r\n    if (!stage) {\r\n        return;\r\n    }\r\n\r\n    stage.insertBefore(\r\n        field,\r\n        stage.firstChild\r\n    );\r\n\r\n    const supportsHover =\r\n        window.matchMedia(\r\n            \"(hover: hover) and (pointer: fine)\"\r\n        ).matches;\r\n\r\n    if (!supportsHover) {\r\n        return;\r\n    }\r\n\r\n    const lens =\r\n        field.querySelector(\r\n            \".ps-dot-magnifier-field__lens\"\r\n        );\r\n\r\n    const context =\r\n        lens.getContext(\r\n            \"2d\",\r\n            {\r\n                alpha: true\r\n            }\r\n        );\r\n\r\n    if (!context) {\r\n        return;\r\n    }\r\n\r\n    let settings;\r\n\r\n    let targetX = 0;\r\n    let targetY = 0;\r\n\r\n    let currentX = 0;\r\n    let currentY = 0;\r\n\r\n    let animationFrame = 0;\r\n\r\n    let active = false;\r\n\r\n    function clamp(\r\n        value,\r\n        minimum,\r\n        maximum\r\n    ) {\r\n        return Math.max(\r\n            minimum,\r\n            Math.min(\r\n                maximum,\r\n                value\r\n            )\r\n        );\r\n    }\r\n\r\n    function smoothstep(\r\n        edgeStart,\r\n        edgeEnd,\r\n        value\r\n    ) {\r\n        const amount =\r\n            clamp(\r\n                (\r\n                    value - edgeStart\r\n                ) \/\r\n                (\r\n                    edgeEnd - edgeStart\r\n                ),\r\n                0,\r\n                1\r\n            );\r\n\r\n        return (\r\n            amount *\r\n            amount *\r\n            (\r\n                3 - 2 * amount\r\n            )\r\n        );\r\n    }\r\n\r\n    function readNumber(\r\n        styles,\r\n        property,\r\n        fallback\r\n    ) {\r\n        const value =\r\n            parseFloat(\r\n                styles.getPropertyValue(\r\n                    property\r\n                )\r\n            );\r\n\r\n        return Number.isFinite(value)\r\n            ? value\r\n            : fallback;\r\n    }\r\n\r\n    function readSettings() {\r\n        const styles =\r\n            getComputedStyle(stage);\r\n\r\n        const gap =\r\n            readNumber(\r\n                styles,\r\n                \"--ps-dot-gap\",\r\n                11\r\n            );\r\n\r\n        const magnifiedGap =\r\n            readNumber(\r\n                styles,\r\n                \"--ps-dot-magnified-gap\",\r\n                17\r\n            );\r\n\r\n        const radius =\r\n            readNumber(\r\n                styles,\r\n                \"--ps-dot-lens-size\",\r\n                175\r\n            );\r\n\r\n        const dotSize =\r\n            readNumber(\r\n                styles,\r\n                \"--ps-dot-size\",\r\n                0.8\r\n            );\r\n\r\n        const opacity =\r\n            readNumber(\r\n                styles,\r\n                \"--ps-dot-highlight-opacity\",\r\n                0.85\r\n            );\r\n\r\n        const falloff =\r\n            readNumber(\r\n                styles,\r\n                \"--ps-dot-falloff\",\r\n                2.4\r\n            );\r\n\r\n        const followSpeed =\r\n            readNumber(\r\n                styles,\r\n                \"--ps-dot-follow-speed\",\r\n                0.14\r\n            );\r\n\r\n        const color =\r\n            styles\r\n                .getPropertyValue(\r\n                    \"--ps-dot-highlight-rgb\"\r\n                )\r\n                .trim() ||\r\n            \"80, 245, 255\";\r\n\r\n        settings = {\r\n            gap:\r\n                Math.max(\r\n                    5,\r\n                    gap\r\n                ),\r\n\r\n            radius:\r\n                Math.max(\r\n                    30,\r\n                    radius\r\n                ),\r\n\r\n            dotSize:\r\n                Math.max(\r\n                    0.3,\r\n                    dotSize\r\n                ),\r\n\r\n            opacity:\r\n                clamp(\r\n                    opacity,\r\n                    0,\r\n                    1\r\n                ),\r\n\r\n            falloff:\r\n                clamp(\r\n                    falloff,\r\n                    0.7,\r\n                    6\r\n                ),\r\n\r\n            followSpeed:\r\n                clamp(\r\n                    followSpeed,\r\n                    0.04,\r\n                    0.45\r\n                ),\r\n\r\n            magnification:\r\n                Math.max(\r\n                    0,\r\n                    magnifiedGap \/ gap - 1\r\n                ),\r\n\r\n            color:\r\n                color\r\n        };\r\n\r\n        configureCanvas();\r\n    }\r\n\r\n    function configureCanvas() {\r\n        const padding = 8;\r\n\r\n        const diameter =\r\n            Math.ceil(\r\n                (\r\n                    settings.radius +\r\n                    padding\r\n                ) * 2\r\n            );\r\n\r\n        const pixelRatio =\r\n            Math.min(\r\n                window.devicePixelRatio || 1,\r\n                1.6\r\n            );\r\n\r\n        lens.style.width =\r\n            diameter + \"px\";\r\n\r\n        lens.style.height =\r\n            diameter + \"px\";\r\n\r\n        lens.width =\r\n            Math.ceil(\r\n                diameter *\r\n                pixelRatio\r\n            );\r\n\r\n        lens.height =\r\n            Math.ceil(\r\n                diameter *\r\n                pixelRatio\r\n            );\r\n\r\n        context.setTransform(\r\n            pixelRatio,\r\n            0,\r\n            0,\r\n            pixelRatio,\r\n            0,\r\n            0\r\n        );\r\n\r\n        settings.padding =\r\n            padding;\r\n\r\n        settings.diameter =\r\n            diameter;\r\n    }\r\n\r\n    function updateLensPosition() {\r\n        field.style.setProperty(\r\n            \"--ps-pointer-x\",\r\n            currentX.toFixed(2) + \"px\"\r\n        );\r\n\r\n        field.style.setProperty(\r\n            \"--ps-pointer-y\",\r\n            currentY.toFixed(2) + \"px\"\r\n        );\r\n\r\n        const positionX =\r\n            currentX -\r\n            settings.radius -\r\n            settings.padding;\r\n\r\n        const positionY =\r\n            currentY -\r\n            settings.radius -\r\n            settings.padding;\r\n\r\n        lens.style.transform =\r\n            \"translate3d(\" +\r\n            positionX.toFixed(2) +\r\n            \"px,\" +\r\n            positionY.toFixed(2) +\r\n            \"px,0)\";\r\n    }\r\n\r\n    function drawDistortedDots() {\r\n        const radius =\r\n            settings.radius;\r\n\r\n        const center =\r\n            radius +\r\n            settings.padding;\r\n\r\n        const gap =\r\n            settings.gap;\r\n\r\n        const gridOffset =\r\n            gap \/ 2;\r\n\r\n        context.clearRect(\r\n            0,\r\n            0,\r\n            settings.diameter,\r\n            settings.diameter\r\n        );\r\n\r\n        context.save();\r\n\r\n        context.beginPath();\r\n\r\n        context.arc(\r\n            center,\r\n            center,\r\n            radius,\r\n            0,\r\n            Math.PI * 2\r\n        );\r\n\r\n        context.clip();\r\n\r\n        context.fillStyle =\r\n            \"rgb(\" +\r\n            settings.color +\r\n            \")\";\r\n\r\n        const startX =\r\n            Math.floor(\r\n                (\r\n                    currentX -\r\n                    radius -\r\n                    gridOffset\r\n                ) \/\r\n                gap\r\n            ) *\r\n            gap +\r\n            gridOffset;\r\n\r\n        const startY =\r\n            Math.floor(\r\n                (\r\n                    currentY -\r\n                    radius -\r\n                    gridOffset\r\n                ) \/\r\n                gap\r\n            ) *\r\n            gap +\r\n            gridOffset;\r\n\r\n        const endX =\r\n            currentX +\r\n            radius;\r\n\r\n        const endY =\r\n            currentY +\r\n            radius;\r\n\r\n        for (\r\n            let dotY = startY;\r\n            dotY <= endY;\r\n            dotY += gap\r\n        ) {\r\n            for (\r\n                let dotX = startX;\r\n                dotX <= endX;\r\n                dotX += gap\r\n            ) {\r\n                const offsetX =\r\n                    dotX -\r\n                    currentX;\r\n\r\n                const offsetY =\r\n                    dotY -\r\n                    currentY;\r\n\r\n                const distance =\r\n                    Math.sqrt(\r\n                        offsetX * offsetX +\r\n                        offsetY * offsetY\r\n                    );\r\n\r\n                if (\r\n                    distance >= radius\r\n                ) {\r\n                    continue;\r\n                }\r\n\r\n                const normalizedDistance =\r\n                    distance \/\r\n                    radius;\r\n\r\n                \/*\r\n                   Dot spacing is widest at the center\r\n                   and gradually returns to normal\r\n                   toward the edge of the magnifier.\r\n                *\/\r\n\r\n                const distortionFalloff =\r\n                    Math.pow(\r\n                        1 - normalizedDistance,\r\n                        settings.falloff\r\n                    );\r\n\r\n                const displacement =\r\n                    1 +\r\n\r\n                    settings.magnification *\r\n                    distortionFalloff;\r\n\r\n                const distortedX =\r\n                    center +\r\n                    offsetX *\r\n                    displacement;\r\n\r\n                const distortedY =\r\n                    center +\r\n                    offsetY *\r\n                    displacement;\r\n\r\n                const edgeFade =\r\n                    1 -\r\n\r\n                    smoothstep(\r\n                        0.54,\r\n                        1,\r\n                        normalizedDistance\r\n                    );\r\n\r\n                const centerBrightness =\r\n                    0.48 +\r\n\r\n                    (\r\n                        1 -\r\n                        normalizedDistance\r\n                    ) *\r\n                    0.52;\r\n\r\n                context.globalAlpha =\r\n                    settings.opacity *\r\n                    edgeFade *\r\n                    centerBrightness;\r\n\r\n                if (\r\n                    context.globalAlpha <\r\n                    0.015\r\n                ) {\r\n                    continue;\r\n                }\r\n\r\n                context.beginPath();\r\n\r\n                context.arc(\r\n                    distortedX,\r\n                    distortedY,\r\n                    settings.dotSize,\r\n                    0,\r\n                    Math.PI * 2\r\n                );\r\n\r\n                context.fill();\r\n            }\r\n        }\r\n\r\n        context.restore();\r\n    }\r\n\r\n    function render() {\r\n        updateLensPosition();\r\n\r\n        drawDistortedDots();\r\n    }\r\n\r\n    function animate() {\r\n        currentX +=\r\n            (\r\n                targetX -\r\n                currentX\r\n            ) *\r\n            settings.followSpeed;\r\n\r\n        currentY +=\r\n            (\r\n                targetY -\r\n                currentY\r\n            ) *\r\n            settings.followSpeed;\r\n\r\n        render();\r\n\r\n        const stillMoving =\r\n            Math.abs(\r\n                targetX -\r\n                currentX\r\n            ) > 0.12 ||\r\n\r\n            Math.abs(\r\n                targetY -\r\n                currentY\r\n            ) > 0.12;\r\n\r\n        if (\r\n            active &&\r\n            stillMoving\r\n        ) {\r\n            animationFrame =\r\n                requestAnimationFrame(\r\n                    animate\r\n                );\r\n        } else {\r\n            animationFrame = 0;\r\n        }\r\n    }\r\n\r\n    function deactivate() {\r\n        active = false;\r\n\r\n        field.classList.remove(\r\n            \"is-active\"\r\n        );\r\n\r\n        if (animationFrame) {\r\n            cancelAnimationFrame(\r\n                animationFrame\r\n            );\r\n\r\n            animationFrame = 0;\r\n        }\r\n    }\r\n\r\n    function handlePointerMove(\r\n        event\r\n    ) {\r\n        if (\r\n            event.pointerType ===\r\n            \"touch\"\r\n        ) {\r\n            return;\r\n        }\r\n\r\n        const bounds =\r\n            field.getBoundingClientRect();\r\n\r\n        const inside =\r\n            event.clientX >= bounds.left &&\r\n            event.clientX <= bounds.right &&\r\n            event.clientY >= bounds.top &&\r\n            event.clientY <= bounds.bottom;\r\n\r\n        if (!inside) {\r\n            if (active) {\r\n                deactivate();\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        targetX =\r\n            event.clientX -\r\n            bounds.left;\r\n\r\n        targetY =\r\n            event.clientY -\r\n            bounds.top;\r\n\r\n        if (!active) {\r\n            currentX =\r\n                targetX;\r\n\r\n            currentY =\r\n                targetY;\r\n\r\n            active = true;\r\n\r\n            render();\r\n\r\n            field.classList.add(\r\n                \"is-active\"\r\n            );\r\n        }\r\n\r\n        if (!animationFrame) {\r\n            animationFrame =\r\n                requestAnimationFrame(\r\n                    animate\r\n                );\r\n        }\r\n    }\r\n\r\n    function handleResize() {\r\n        readSettings();\r\n\r\n        if (active) {\r\n            render();\r\n        }\r\n    }\r\n\r\n    readSettings();\r\n\r\n    window.addEventListener(\r\n        \"pointermove\",\r\n        handlePointerMove,\r\n        {\r\n            passive: true\r\n        }\r\n    );\r\n\r\n    window.addEventListener(\r\n        \"resize\",\r\n        handleResize,\r\n        {\r\n            passive: true\r\n        }\r\n    );\r\n\r\n    document.addEventListener(\r\n        \"mouseleave\",\r\n        deactivate\r\n    );\r\n\r\n    window.addEventListener(\r\n        \"blur\",\r\n        deactivate\r\n    );\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-dba71c3 e-con-full e-flex e-con e-child\" data-id=\"dba71c3\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-45e74c5 ps-video-target elementor-invisible elementor-widget elementor-widget-video\" data-id=\"45e74c5\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;video_type&quot;:&quot;hosted&quot;,&quot;mute&quot;:&quot;yes&quot;,&quot;_animation&quot;:&quot;fadeInUp&quot;}\" data-widget_type=\"video.default\">\n\t\t\t\t\t\t\t<div class=\"e-hosted-video elementor-wrapper elementor-open-inline\">\n\t\t\t\t\t<video class=\"elementor-video\" src=\"https:\/\/panosky.com\/wp-content\/uploads\/2026\/08\/Web-intro-video-01.mp4\" preload=\"metadata\" muted=\"muted\" controlsList=\"nodownload\"><\/video>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\n<\/div>\n<div class=\"elementor-element elementor-element-a1f16da e-con e-atomic-element e-flexbox-base e-a1f16da-38c5981 \" data-id=\"a1f16da\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"a1f16da\" data-e-type=\"e-flexbox\" data-id=\"a1f16da\">\n    <div class=\"elementor-element elementor-element-69241ec e-flex e-con-boxed e-con e-parent\" data-id=\"69241ec\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-a3efc5f e-con-full e-flex e-con e-child\" data-id=\"a3efc5f\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7860f2d elementor-hidden-tablet elementor-hidden-mobile elementor-widget elementor-widget-spacer\" data-id=\"7860f2d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0e9c117 elementor-invisible elementor-widget elementor-widget-heading\" data-id=\"0e9c117\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeInUp&quot;}\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">From Screens to VR Headsets.<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6f175e4 elementor-invisible elementor-widget elementor-widget-heading\" data-id=\"6f175e4\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeInUp&quot;,&quot;_animation_delay&quot;:200}\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">The next generation of digital browsing.\n<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c3af9eb elementor-invisible elementor-widget elementor-widget-text-editor\" data-id=\"c3af9eb\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeInUp&quot;,&quot;_animation_delay&quot;:400}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Customers don&#8217;t want to view a static image\u2014they want to experience the space. Every PanoSky virtual tour is engineered to flow flawlessly across any device. By giving them total control, we turn passive scrolling into an unforgettable digital destination.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3b65919 panosky-cursor-glow elementor-invisible elementor-widget elementor-widget-button\" data-id=\"3b65919\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeInUp&quot;,&quot;_animation_delay&quot;:600}\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"#\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">See More Features<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\n<\/div>\n<div class=\"elementor-element elementor-element-587d11d e-con e-atomic-element e-flexbox-base e-587d11d-087df47 \" data-id=\"587d11d\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"587d11d\" data-e-type=\"e-flexbox\" data-id=\"587d11d\">\n    <div class=\"elementor-element elementor-element-4aeab9b e-flex e-con-boxed e-con e-parent\" data-id=\"4aeab9b\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-b50c6c2 e-con-full e-flex e-con e-child\" data-id=\"b50c6c2\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-44143ff elementor-invisible elementor-widget elementor-widget-image\" data-id=\"44143ff\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeInUp&quot;}\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"1024\" src=\"https:\/\/panosky.com\/wp-content\/uploads\/2026\/07\/ChatGPT-Image-Jul-15-2026-11_10_13-PM-1024x1024.png\" class=\"attachment-large size-large wp-image-779\" alt=\"\" srcset=\"https:\/\/panosky.com\/wp-content\/uploads\/2026\/07\/ChatGPT-Image-Jul-15-2026-11_10_13-PM-1024x1024.png 1024w, https:\/\/panosky.com\/wp-content\/uploads\/2026\/07\/ChatGPT-Image-Jul-15-2026-11_10_13-PM-300x300.png 300w, https:\/\/panosky.com\/wp-content\/uploads\/2026\/07\/ChatGPT-Image-Jul-15-2026-11_10_13-PM-150x150.png 150w, https:\/\/panosky.com\/wp-content\/uploads\/2026\/07\/ChatGPT-Image-Jul-15-2026-11_10_13-PM-768x768.png 768w, https:\/\/panosky.com\/wp-content\/uploads\/2026\/07\/ChatGPT-Image-Jul-15-2026-11_10_13-PM.png 1254w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-dbb7889 e-con-full e-flex e-con e-child\" data-id=\"dbb7889\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6da977d elementor-invisible elementor-widget elementor-widget-heading\" data-id=\"6da977d\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeInUp&quot;}\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Authorized <span class=\"animated-guesswork\">Google Maps<\/span> Integration.<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5b829b7 elementor-invisible elementor-widget elementor-widget-heading\" data-id=\"5b829b7\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeInUp&quot;,&quot;_animation_delay&quot;:200}\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Your space, directly on Google. <\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-38d468b elementor-invisible elementor-widget elementor-widget-text-editor\" data-id=\"38d468b\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeInUp&quot;,&quot;_animation_delay&quot;:400}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">As an authorised Google Maps Content Partner, PanoSky publishes your immersive 360\u00b0 experience and spatial data directly to Google Maps and your Business Profile\u2014creating a powerful first impression and instantly elevating your local ranking and visibility. <\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-261ac96 elementor-invisible elementor-widget elementor-widget-button\" data-id=\"261ac96\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeInUp&quot;,&quot;_animation_delay&quot;:600}\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"#\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Google Services<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\n<\/div>\n<div class=\"elementor-element elementor-element-3561f9f e-con e-atomic-element e-flexbox-base e-3561f9f-f4c9a64 \" data-id=\"3561f9f\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"3561f9f\" data-e-type=\"e-flexbox\" data-id=\"3561f9f\">\n    <div class=\"elementor-element elementor-element-7cd87c7 e-flex e-con-boxed e-con e-parent\" data-id=\"7cd87c7\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-4955650 e-con-full e-flex e-con e-child\" data-id=\"4955650\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e82f8a4 elementor-hidden-tablet elementor-hidden-mobile elementor-widget elementor-widget-spacer\" data-id=\"e82f8a4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-20834dc elementor-invisible elementor-widget elementor-widget-heading\" data-id=\"20834dc\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeInUp&quot;}\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Legendary <span class=\"animated-guesswork\">Hasselblad <\/span> Imaging.<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-06b1076 elementor-invisible elementor-widget elementor-widget-heading\" data-id=\"06b1076\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeInUp&quot;,&quot;_animation_delay&quot;:200}\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Precision optics. True-to-life colour. Immersive depth.\n<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c08cd00 elementor-invisible elementor-widget elementor-widget-text-editor\" data-id=\"c08cd00\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeInUp&quot;,&quot;_animation_delay&quot;:400}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Powered by the world&#8217;s most prestigious imaging technology, a combination of Hasselblad, Sony and DJI, we replicate physical environments with absolute visual fidelity. When your venue demands nothing less than perfection, this is the standard.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7a3e865 elementor-invisible elementor-widget elementor-widget-button\" data-id=\"7a3e865\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeInUp&quot;,&quot;_animation_delay&quot;:600}\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"#\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">See More Features<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\n<\/div>\n<div class=\"elementor-element elementor-element-36e2e8f e-con e-atomic-element e-flexbox-base e-36e2e8f-737c512 \" data-id=\"36e2e8f\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"36e2e8f\" data-e-type=\"e-flexbox\" data-id=\"36e2e8f\">\n    <div class=\"elementor-element elementor-element-5d81d67 e-con-full e-flex e-con e-parent\" data-id=\"5d81d67\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-102c35d elementor-pagination-type-bullets elementor-arrows-position-inside elementor-pagination-position-outside elementor-widget elementor-widget-n-carousel\" data-id=\"102c35d\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;carousel_items&quot;:[{&quot;slide_title&quot;:&quot;HDR&quot;,&quot;_id&quot;:&quot;c0cf102&quot;},{&quot;slide_title&quot;:&quot;Navigation&quot;,&quot;_id&quot;:&quot;368c4f8&quot;},{&quot;slide_title&quot;:&quot;Interactive elements&quot;,&quot;_id&quot;:&quot;bb11e26&quot;},{&quot;slide_title&quot;:&quot;Full coverage&quot;,&quot;_id&quot;:&quot;56f9f55&quot;}],&quot;offset_sides&quot;:&quot;both&quot;,&quot;offset_width&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:100,&quot;sizes&quot;:[]},&quot;offset_width_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:20,&quot;sizes&quot;:[]},&quot;image_spacing_custom&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:40,&quot;sizes&quot;:[]},&quot;autoplay_speed&quot;:400,&quot;speed&quot;:2500,&quot;slides_to_show_tablet&quot;:&quot;2&quot;,&quot;slides_to_show_mobile&quot;:&quot;1&quot;,&quot;autoplay&quot;:&quot;yes&quot;,&quot;infinite&quot;:&quot;yes&quot;,&quot;offset_width_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;arrows&quot;:&quot;yes&quot;,&quot;pagination&quot;:&quot;bullets&quot;,&quot;image_spacing_custom_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;image_spacing_custom_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}\" data-widget_type=\"nested-carousel.default\">\n\t\t\t\t\t\t\t<div class=\"e-n-carousel swiper\" role=\"region\" aria-roledescription=\"carousel\" aria-label=\"Carousel\" dir=\"ltr\">\n\t\t\t<div class=\"swiper-wrapper\" aria-live=\"off\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" data-slide=\"1\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"1 of 4\">\n\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-ffdfddb e-flex e-con-boxed e-con e-child\" data-id=\"ffdfddb\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-508b8a1 e-con-full e-flex e-con e-child\" data-id=\"508b8a1\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-e318c53 e-con-full e-flex e-con e-child\" data-id=\"e318c53\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c6041a5 elementor-widget elementor-widget-heading\" data-id=\"c6041a5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Industry-leading dynamic range<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba03837 elementor-widget elementor-widget-heading\" data-id=\"ba03837\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Perfect light.<br>\nEvery detail.<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e39bd2a elementor-widget elementor-widget-text-editor\" data-id=\"e39bd2a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Our tier-one camera systems capture the true spectrum of light and shadow\u2014a level of visual perfection standard cameras simply cannot touch.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" data-slide=\"2\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"2 of 4\">\n\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-835b1fd e-flex e-con-boxed e-con e-child\" data-id=\"835b1fd\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-6b0cb53 e-con-full e-flex e-con e-child\" data-id=\"6b0cb53\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-11a555b e-con-full e-flex e-con e-child\" data-id=\"11a555b\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-32865ab elementor-widget elementor-widget-heading\" data-id=\"32865ab\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Seamless Spatial Navigation.<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ab7de59 elementor-widget elementor-widget-heading\" data-id=\"ab7de59\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Explore freely. <br>Move effortlessly. <\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-90f0b2e elementor-widget elementor-widget-text-editor\" data-id=\"90f0b2e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">We engineer clean and fluid navigation that lets visitors experience your space intuitively, at their own pace and from every angle. <\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" data-slide=\"3\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"3 of 4\">\n\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-78d6971 e-flex e-con-boxed e-con e-child\" data-id=\"78d6971\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-66ebae7 e-con-full e-flex e-con e-child\" data-id=\"66ebae7\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-7f909ae e-con-full e-flex e-con e-child\" data-id=\"7f909ae\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-dd6ead1 elementor-widget elementor-widget-heading\" data-id=\"dd6ead1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Integrated Interactive Elements. <\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cee7bf4 elementor-widget elementor-widget-heading\" data-id=\"cee7bf4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Every feature,<br> just a click away. <\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-82743d5 elementor-widget elementor-widget-text-editor\" data-id=\"82743d5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">24\/7 sales engine. All elements and booking links integrate directly into the tour, we turn passive browsers into paying guests.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" data-slide=\"4\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"4 of 4\">\n\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-36726d7 e-flex e-con-boxed e-con e-child\" data-id=\"36726d7\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-f3fa574 e-con-full e-flex e-con e-child\" data-id=\"f3fa574\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-fff5a4c e-con-full e-flex e-con e-child\" data-id=\"fff5a4c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-68cda96 elementor-widget elementor-widget-heading\" data-id=\"68cda96\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">The Complete Spatial Picture. <\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-44cb2ee elementor-widget elementor-widget-heading\" data-id=\"44cb2ee\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">See everything.<br> Trust instantly.<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4b31c52 elementor-widget elementor-widget-text-editor\" data-id=\"4b31c52\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Ultra-high-resolution coverage reveals your entire space with exceptional clarity\u2014building trust before visitors ever arrive.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<div class=\"elementor-swiper-button elementor-swiper-button-prev\" role=\"button\" tabindex=\"0\" aria-label=\"Previous\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-eicon-chevron-left\" viewBox=\"0 0 1000 1000\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M646 125C629 125 613 133 604 142L308 442C296 454 292 471 292 487 292 504 296 521 308 533L604 854C617 867 629 875 646 875 663 875 679 871 692 858 704 846 713 829 713 812 713 796 708 779 692 767L438 487 692 225C700 217 708 204 708 187 708 171 704 154 692 142 675 129 663 125 646 125Z\"><\/path><\/svg>\t\t\t<\/div>\n\t\t\t<div class=\"elementor-swiper-button elementor-swiper-button-next\" role=\"button\" tabindex=\"0\" aria-label=\"Next\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-eicon-chevron-right\" viewBox=\"0 0 1000 1000\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M696 533C708 521 713 504 713 487 713 471 708 454 696 446L400 146C388 133 375 125 354 125 338 125 325 129 313 142 300 154 292 171 292 187 292 204 296 221 308 233L563 492 304 771C292 783 288 800 288 817 288 833 296 850 308 863 321 871 338 875 354 875 371 875 388 867 400 854L696 533Z\"><\/path><\/svg>\t\t\t<\/div>\n\t\t\t\t\t<div class=\"swiper-pagination\"><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\n<\/div>\n<div class=\"elementor-element elementor-element-8836e72 e-con e-atomic-element e-flexbox-base e-8c8e7f3 \" data-id=\"8836e72\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"8836e72\" data-e-type=\"e-flexbox\" data-id=\"8836e72\">\n    <div class=\"elementor-element elementor-element-76230a0 e-flex e-con-boxed e-con e-parent\" data-id=\"76230a0\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c4b346d elementor-widget elementor-widget-spacer\" data-id=\"c4b346d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4a37f3e elementor-widget elementor-widget-heading\" data-id=\"4a37f3e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">SPATIAL INTELLIGENCE<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-76a88a7 elementor-widget elementor-widget-heading\" data-id=\"76a88a7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Understand Every Interaction.<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-528acab elementor-widget elementor-widget-text-editor\" data-id=\"528acab\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Ordinary tours stop at imagery. PanoSky transforms your property into a living data engine that reveals exactly how clients interact with your real estate.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-7170ea9 e-con-full e-flex e-con e-child\" data-id=\"7170ea9\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-1293c70 e-con-full e-flex e-con e-child\" data-id=\"1293c70\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3740d7f elementor-widget elementor-widget-image\" data-id=\"3740d7f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/panosky.com\/wp-content\/uploads\/2026\/08\/heatmap-2-1024x576.jpg\" class=\"attachment-large size-large wp-image-2669\" alt=\"\" srcset=\"https:\/\/panosky.com\/wp-content\/uploads\/2026\/08\/heatmap-2-1024x576.jpg 1024w, https:\/\/panosky.com\/wp-content\/uploads\/2026\/08\/heatmap-2-300x169.jpg 300w, https:\/\/panosky.com\/wp-content\/uploads\/2026\/08\/heatmap-2-768x432.jpg 768w, https:\/\/panosky.com\/wp-content\/uploads\/2026\/08\/heatmap-2-1536x864.jpg 1536w, https:\/\/panosky.com\/wp-content\/uploads\/2026\/08\/heatmap-2.jpg 1672w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d026bd0 elementor-widget elementor-widget-heading\" data-id=\"d026bd0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Attention Heatmaps<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b29e336 elementor-widget elementor-widget-text-editor\" data-id=\"b29e336\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Instantly reveal the spaces, features, and focal points that draw the most attention.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-e114a99 e-con-full e-flex e-con e-child\" data-id=\"e114a99\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0b14d37 elementor-widget elementor-widget-image\" data-id=\"0b14d37\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/panosky.com\/wp-content\/uploads\/2026\/08\/insights-1024x576.jpg\" class=\"attachment-large size-large wp-image-2668\" alt=\"\" srcset=\"https:\/\/panosky.com\/wp-content\/uploads\/2026\/08\/insights-1024x576.jpg 1024w, https:\/\/panosky.com\/wp-content\/uploads\/2026\/08\/insights-300x169.jpg 300w, https:\/\/panosky.com\/wp-content\/uploads\/2026\/08\/insights-768x432.jpg 768w, https:\/\/panosky.com\/wp-content\/uploads\/2026\/08\/insights-1536x864.jpg 1536w, https:\/\/panosky.com\/wp-content\/uploads\/2026\/08\/insights.jpg 1672w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-380edbc elementor-widget elementor-widget-heading\" data-id=\"380edbc\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Engagement Analytics<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e460f0f elementor-widget elementor-widget-text-editor\" data-id=\"e460f0f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Track dwell time, interaction patterns, and visitor behavior through a clean performance dashboard.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\n<\/div>\n<div class=\"elementor-element elementor-element-a32690d e-con e-atomic-element e-flexbox-base e-513f380 \" data-id=\"a32690d\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"a32690d\" data-e-type=\"e-flexbox\" data-id=\"a32690d\">\n    <div class=\"elementor-element elementor-element-5373804 e-flex e-con-boxed e-con e-parent\" data-id=\"5373804\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d6cf062 elementor-widget elementor-widget-heading\" data-id=\"d6cf062\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">THE BUSINESS IMPACT<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-754c3b8 elementor-invisible elementor-widget elementor-widget-heading\" data-id=\"754c3b8\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeInUp&quot;}\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Immersive spaces. <span class=\"animated-guesswork\">More revenue. <\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5762758 elementor-widget elementor-widget-text-editor\" data-id=\"5762758\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Turn every visit into deeper attention, stronger trust, and faster decisions.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-664e215 elementor-align-center elementor-invisible elementor-widget elementor-widget-button\" data-id=\"664e215\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeInUp&quot;,&quot;_animation_delay&quot;:600}\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"#\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">See More Details<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-80a1afd elementor-hidden-desktop elementor-hidden-tablet elementor-widget elementor-widget-html\" data-id=\"80a1afd\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!--\r\n  PANOSKY \u2014 MESMERIZING 3D IMAGE CAROUSEL\r\n\r\n  USAGE\r\n  1. Paste this complete block into ONE Elementor HTML widget.\r\n  2. Search for \"REPLACE IMAGE LINK\" and paste your four image URLs.\r\n  3. The carousel uses Elementor global fonts and has a transparent background.\r\n\r\n  Recommended image format: transparent PNG, all using the same aspect ratio.\r\n  Your prepared PanoSky cards are 1536 \u00d7 1024 (3:2).\r\n\r\n  The reflection is automatically masked by each PNG's alpha channel. Replace\r\n  only the four <img decoding=\"async\" src=\"...\"> links; no separate mask link is required.\r\n-->\r\n\r\n<style>\r\n  .ps-m3d-carousel,\r\n  .ps-m3d-carousel * {\r\n    box-sizing: border-box;\r\n  }\r\n\r\n  .ps-m3d-carousel {\r\n    \/* =========================================================\r\n       GENERAL DESIGN CONTROLS\r\n       ========================================================= *\/\r\n    --ps-m3d-card-ratio: 3 \/ 2;\r\n    --ps-m3d-perspective: 1800px;\r\n    --ps-m3d-transition-speed: 1500ms;\r\n\r\n    \/* Alpha-masked glass reflection controls *\/\r\n    --ps-m3d-reflection-opacity: 0.05;\r\n    --ps-m3d-pointer-light-opacity: 0.45;\r\n    --ps-m3d-reflection-width: 34%;\r\n    --ps-m3d-reflection-speed: 3s;\r\n    --ps-m3d-image-shadow-opacity: 0.30;\r\n    --ps-m3d-image-saturation: 1.03;\r\n\r\n    \/* Full-bleed control: spans past Elementor's left\/right padding. *\/\r\n    --ps-m3d-full-bleed-width: 100vw;\r\n    --ps-m3d-full-bleed-half: 50vw;\r\n\r\n    --ps-m3d-accent: #50f5ff;\r\n    --ps-m3d-accent-rgb: 80, 245, 255;\r\n    --ps-m3d-blue: #008bff;\r\n    --ps-m3d-text: rgba(245, 249, 255, 0.94);\r\n    --ps-m3d-muted: rgba(203, 219, 239, 0.58);\r\n\r\n    \/* =========================================================\r\n       DESKTOP CONTROLS (1025px and wider)\r\n       Unitless geometry values below are pixels unless noted.\r\n       ========================================================= *\/\r\n    --ps-m3d-desktop-height: 460px;\r\n    --ps-m3d-desktop-card-width: 460px;\r\n    --ps-m3d-desktop-stage-bottom: 78px;\r\n    --ps-m3d-desktop-card-top: 55%;\r\n    --ps-m3d-desktop-side-distance-ratio: 0.31;\r\n    --ps-m3d-desktop-side-distance-max: 430;\r\n    --ps-m3d-desktop-side-y: 20;\r\n    --ps-m3d-desktop-side-z: -175;\r\n    --ps-m3d-desktop-side-rotation: 34;\r\n    --ps-m3d-desktop-side-scale: 0.78;\r\n    --ps-m3d-desktop-side-opacity: 0.72;\r\n    --ps-m3d-desktop-back-y: 46;\r\n    --ps-m3d-desktop-back-z: -470;\r\n    --ps-m3d-desktop-back-rotation: 10;\r\n    --ps-m3d-desktop-back-scale: 0.58;\r\n    --ps-m3d-desktop-back-opacity: 0.18;\r\n    --ps-m3d-desktop-back-blur: 2;\r\n    --ps-m3d-desktop-nav-width: 210px;\r\n    --ps-m3d-desktop-controls-bottom: 10px;\r\n\r\n    \/* =========================================================\r\n       TABLET CONTROLS (768px\u20131024px)\r\n       ========================================================= *\/\r\n    --ps-m3d-tablet-height: 340px;\r\n    --ps-m3d-tablet-card-width: 400px;\r\n    --ps-m3d-tablet-stage-bottom: 76px;\r\n    --ps-m3d-tablet-card-top: 60%;\r\n    --ps-m3d-tablet-side-distance-ratio: 0.35;\r\n    --ps-m3d-tablet-side-distance-max: 340;\r\n    --ps-m3d-tablet-side-y: 18;\r\n    --ps-m3d-tablet-side-z: -155;\r\n    --ps-m3d-tablet-side-rotation: 34;\r\n    --ps-m3d-tablet-side-scale: 0.78;\r\n    --ps-m3d-tablet-side-opacity: 0.72;\r\n    --ps-m3d-tablet-back-y: 40;\r\n    --ps-m3d-tablet-back-z: -410;\r\n    --ps-m3d-tablet-back-rotation: 10;\r\n    --ps-m3d-tablet-back-scale: 0.58;\r\n    --ps-m3d-tablet-back-opacity: 0.18;\r\n    --ps-m3d-tablet-back-blur: 2;\r\n    --ps-m3d-tablet-nav-width: 190px;\r\n    --ps-m3d-tablet-controls-bottom: 8px;\r\n\r\n    \/* =========================================================\r\n       MOBILE CONTROLS (767px and narrower)\r\n       Defaults intentionally preserve the desktop 3D composition.\r\n       ========================================================= *\/\r\n    --ps-m3d-mobile-height: 250px;\r\n    --ps-m3d-mobile-card-width: min(70vw, 400px);\r\n    --ps-m3d-mobile-stage-bottom: 68px;\r\n    --ps-m3d-mobile-card-top: 60%;\r\n    --ps-m3d-mobile-side-distance-ratio: 0.30;\r\n    --ps-m3d-mobile-side-distance-max: 210;\r\n    --ps-m3d-mobile-side-y: 16;\r\n    --ps-m3d-mobile-side-z: -140;\r\n    --ps-m3d-mobile-side-rotation: 34;\r\n    --ps-m3d-mobile-side-scale: 0.78;\r\n    --ps-m3d-mobile-side-opacity: 0.72;\r\n    --ps-m3d-mobile-back-y: 34;\r\n    --ps-m3d-mobile-back-z: -350;\r\n    --ps-m3d-mobile-back-rotation: 10;\r\n    --ps-m3d-mobile-back-scale: 0.58;\r\n    --ps-m3d-mobile-back-opacity: 0.18;\r\n    --ps-m3d-mobile-back-blur: 2;\r\n    --ps-m3d-mobile-nav-width: 150px;\r\n    --ps-m3d-mobile-controls-bottom: 4px;\r\n\r\n    \/* Active values: mapped to tablet\/mobile further below. *\/\r\n    --ps-m3d-height: var(--ps-m3d-desktop-height);\r\n    --ps-m3d-card-width: var(--ps-m3d-desktop-card-width);\r\n    --ps-m3d-stage-bottom: var(--ps-m3d-desktop-stage-bottom);\r\n    --ps-m3d-card-top: var(--ps-m3d-desktop-card-top);\r\n    --ps-m3d-side-distance-ratio: var(--ps-m3d-desktop-side-distance-ratio);\r\n    --ps-m3d-side-distance-max: var(--ps-m3d-desktop-side-distance-max);\r\n    --ps-m3d-side-y: var(--ps-m3d-desktop-side-y);\r\n    --ps-m3d-side-z: var(--ps-m3d-desktop-side-z);\r\n    --ps-m3d-side-rotation: var(--ps-m3d-desktop-side-rotation);\r\n    --ps-m3d-side-scale: var(--ps-m3d-desktop-side-scale);\r\n    --ps-m3d-side-opacity: var(--ps-m3d-desktop-side-opacity);\r\n    --ps-m3d-back-y: var(--ps-m3d-desktop-back-y);\r\n    --ps-m3d-back-z: var(--ps-m3d-desktop-back-z);\r\n    --ps-m3d-back-rotation: var(--ps-m3d-desktop-back-rotation);\r\n    --ps-m3d-back-scale: var(--ps-m3d-desktop-back-scale);\r\n    --ps-m3d-back-opacity: var(--ps-m3d-desktop-back-opacity);\r\n    --ps-m3d-back-blur: var(--ps-m3d-desktop-back-blur);\r\n    --ps-m3d-nav-width: var(--ps-m3d-desktop-nav-width);\r\n    --ps-m3d-controls-bottom: var(--ps-m3d-desktop-controls-bottom);\r\n\r\n    position: relative;\r\n    width: var(--ps-m3d-full-bleed-width);\r\n    max-width: var(--ps-m3d-full-bleed-width);\r\n    height: var(--ps-m3d-height);\r\n    margin-top: 0;\r\n    margin-right: calc(50% - var(--ps-m3d-full-bleed-half));\r\n    margin-bottom: 0;\r\n    margin-left: calc(50% - var(--ps-m3d-full-bleed-half));\r\n    padding: 0;\r\n    overflow: hidden;\r\n    background: transparent !important;\r\n    isolation: isolate;\r\n    perspective: var(--ps-m3d-perspective);\r\n    -webkit-tap-highlight-color: transparent;\r\n    touch-action: pan-y pinch-zoom;\r\n    user-select: none;\r\n\r\n    font-family: var(\r\n      --e-global-typography-primary-font-family,\r\n      inherit\r\n    );\r\n  }\r\n\r\n  \/* Applied only to the Elementor wrappers containing this module. *\/\r\n  .ps-m3d-overflow-host {\r\n    overflow: visible !important;\r\n  }\r\n\r\n  .ps-m3d-carousel:focus-visible {\r\n    outline: 1px solid rgba(var(--ps-m3d-accent-rgb), 0.65);\r\n    outline-offset: -2px;\r\n    border-radius: 24px;\r\n  }\r\n\r\n  \/* AMBIENT DEPTH -------------------------------------------- *\/\r\n  .ps-m3d-ambient,\r\n  .ps-m3d-orbit {\r\n    position: absolute;\r\n    z-index: 0;\r\n    left: 50%;\r\n    pointer-events: none;\r\n    transform-style: preserve-3d;\r\n  }\r\n\r\n  .ps-m3d-ambient {\r\n    top: 49%;\r\n    width: min(76%, 1020px);\r\n    height: 34%;\r\n    border-radius: 50%;\r\n    opacity: 0.78;\r\n    transform: translate(-50%, -50%) rotateX(69deg) translateZ(-280px);\r\n    background: radial-gradient(\r\n      ellipse at center,\r\n      rgba(var(--ps-m3d-accent-rgb), 0.24) 0%,\r\n      rgba(0, 139, 255, 0.10) 36%,\r\n      rgba(0, 46, 114, 0) 72%\r\n    );\r\n    filter: blur(22px);\r\n    animation: ps-m3d-ambient-breathe 6.5s ease-in-out infinite;\r\n  }\r\n\r\n  .ps-m3d-orbit {\r\n    top: 50%;\r\n    width: min(70%, 960px);\r\n    aspect-ratio: 2.4 \/ 1;\r\n    border: 1px solid rgba(var(--ps-m3d-accent-rgb), 0.12);\r\n    border-radius: 50%;\r\n    opacity: 0.62;\r\n    transform: translate(-50%, -50%) rotateX(67deg) translateZ(-250px);\r\n    box-shadow:\r\n      0 0 25px rgba(0, 139, 255, 0.08),\r\n      inset 0 0 25px rgba(var(--ps-m3d-accent-rgb), 0.05);\r\n  }\r\n\r\n  .ps-m3d-orbit::before,\r\n  .ps-m3d-orbit::after {\r\n    content: \"\";\r\n    position: absolute;\r\n    border-radius: 50%;\r\n  }\r\n\r\n  .ps-m3d-orbit::before {\r\n    inset: 11%;\r\n    border: 1px solid rgba(0, 139, 255, 0.09);\r\n  }\r\n\r\n  .ps-m3d-orbit::after {\r\n    top: 48%;\r\n    left: -4px;\r\n    width: 8px;\r\n    height: 8px;\r\n    background: var(--ps-m3d-accent);\r\n    box-shadow:\r\n      0 0 10px rgba(var(--ps-m3d-accent-rgb), 0.88),\r\n      0 0 24px rgba(var(--ps-m3d-accent-rgb), 0.35);\r\n    animation: ps-m3d-orbit-dot 7.5s ease-in-out infinite alternate;\r\n  }\r\n\r\n  \/* STAGE ---------------------------------------------------- *\/\r\n  .ps-m3d-stage {\r\n    position: absolute;\r\n    z-index: 2;\r\n    inset: 0 0 var(--ps-m3d-stage-bottom);\r\n    overflow: visible;\r\n    perspective: var(--ps-m3d-perspective);\r\n    transform-style: preserve-3d;\r\n  }\r\n\r\n  .ps-m3d-slide {\r\n    --ps-x: 0px;\r\n    --ps-y: 0px;\r\n    --ps-z: 0px;\r\n    --ps-ry: 0deg;\r\n    --ps-rz: 0deg;\r\n    --ps-scale: 1;\r\n    --ps-opacity: 1;\r\n    --ps-blur: 0px;\r\n\r\n    position: absolute;\r\n    z-index: 1;\r\n    top: var(--ps-m3d-card-top);\r\n    left: 50%;\r\n    width: var(--ps-m3d-card-width);\r\n    aspect-ratio: var(--ps-m3d-card-ratio);\r\n    opacity: var(--ps-opacity);\r\n    cursor: pointer;\r\n    pointer-events: auto;\r\n    transform-style: preserve-3d;\r\n    will-change: transform, opacity;\r\n    transform:\r\n      translate(-50%, -50%)\r\n      translate3d(var(--ps-x), var(--ps-y), var(--ps-z))\r\n      rotateY(var(--ps-ry))\r\n      rotateZ(var(--ps-rz))\r\n      scale(var(--ps-scale));\r\n    transition:\r\n      transform var(--ps-m3d-transition-speed) cubic-bezier(0.2, 0.82, 0.2, 1),\r\n      opacity 680ms ease,\r\n      filter 680ms ease;\r\n    filter: blur(var(--ps-blur));\r\n  }\r\n\r\n  .ps-m3d-carousel.is-dragging .ps-m3d-slide {\r\n    transition-duration: 70ms;\r\n    transition-timing-function: linear;\r\n    cursor: grabbing;\r\n  }\r\n\r\n  .ps-m3d-slide__float,\r\n  .ps-m3d-slide__tilt,\r\n  .ps-m3d-slide__surface {\r\n    position: relative;\r\n    width: 100%;\r\n    height: 100%;\r\n    transform-style: preserve-3d;\r\n  }\r\n\r\n  .ps-m3d-slide__float {\r\n    transform: translateZ(0);\r\n  }\r\n\r\n  .ps-m3d-slide.is-active .ps-m3d-slide__float {\r\n    animation: ps-m3d-card-float 5.2s ease-in-out infinite;\r\n  }\r\n\r\n  .ps-m3d-slide__tilt {\r\n    --ps-tilt-x: 0deg;\r\n    --ps-tilt-y: 0deg;\r\n    transform:\r\n      rotateX(var(--ps-tilt-x))\r\n      rotateY(var(--ps-tilt-y));\r\n    transition: transform 260ms cubic-bezier(0.2, 0.8, 0.2, 1);\r\n  }\r\n\r\n  .ps-m3d-carousel.is-dragging .ps-m3d-slide__tilt {\r\n    transition-duration: 120ms;\r\n  }\r\n\r\n  .ps-m3d-slide__surface {\r\n    --ps-light-x: 50%;\r\n    --ps-light-y: 42%;\r\n    overflow: visible;\r\n    border: 0;\r\n    border-radius: 0;\r\n    background: transparent;\r\n    box-shadow: none;\r\n    transform: translateZ(0);\r\n  }\r\n\r\n  .ps-m3d-slide.is-active .ps-m3d-slide__surface {\r\n    box-shadow: none;\r\n  }\r\n\r\n  .ps-m3d-slide__image,\r\n  .ps-m3d-slide__reflection {\r\n    position: absolute;\r\n    inset: 0;\r\n    display: block;\r\n    width: 100%;\r\n    height: 100%;\r\n    object-fit: contain;\r\n    object-position: center;\r\n    border: 0;\r\n    border-radius: 0;\r\n    pointer-events: none;\r\n  }\r\n\r\n  .ps-m3d-slide__image {\r\n    z-index: 1;\r\n    transform: translateZ(1px);\r\n    filter:\r\n      drop-shadow(0 22px 28px rgba(0, 4, 22, var(--ps-m3d-image-shadow-opacity)))\r\n      saturate(var(--ps-m3d-image-saturation));\r\n  }\r\n\r\n  .ps-m3d-slide.is-active .ps-m3d-slide__image {\r\n    filter:\r\n      drop-shadow(0 25px 34px rgba(0, 4, 22, var(--ps-m3d-image-shadow-opacity)))\r\n      saturate(calc(var(--ps-m3d-image-saturation) + 0.04))\r\n      brightness(1.025);\r\n  }\r\n\r\n  \/*\r\n     These are duplicate copies of the PNG created automatically in JS.\r\n     Because the copies retain the PNG alpha channel, their light can never\r\n     appear over transparent pixels. No artificial card frame is involved.\r\n  *\/\r\n  .ps-m3d-slide__reflection {\r\n    z-index: 3;\r\n    transform: translateZ(2px);\r\n    filter: brightness(2.15) saturate(0.20) contrast(0.82);\r\n    mix-blend-mode: screen;\r\n  }\r\n\r\n  .ps-m3d-slide__reflection--sweep {\r\n    opacity: 0;\r\n    -webkit-clip-path: polygon(\r\n      -55% 0,\r\n      calc(-55% + var(--ps-m3d-reflection-width)) 0,\r\n      calc(-67% + var(--ps-m3d-reflection-width)) 100%,\r\n      -67% 100%\r\n    );\r\n    clip-path: polygon(\r\n      -55% 0,\r\n      calc(-55% + var(--ps-m3d-reflection-width)) 0,\r\n      calc(-67% + var(--ps-m3d-reflection-width)) 100%,\r\n      -67% 100%\r\n    );\r\n  }\r\n\r\n  .ps-m3d-slide.is-active .ps-m3d-slide__reflection--sweep {\r\n    animation: ps-m3d-light-sweep var(--ps-m3d-reflection-speed) ease-in-out infinite;\r\n  }\r\n\r\n  .ps-m3d-slide__reflection--pointer {\r\n    opacity: var(--ps-m3d-pointer-light-opacity);\r\n    -webkit-mask-image: radial-gradient(\r\n      circle at var(--ps-light-x) var(--ps-light-y),\r\n      #000 0%,\r\n      rgba(0, 0, 0, 0.72) 13%,\r\n      transparent 36%\r\n    );\r\n    mask-image: radial-gradient(\r\n      circle at var(--ps-light-x) var(--ps-light-y),\r\n      #000 0%,\r\n      rgba(0, 0, 0, 0.72) 13%,\r\n      transparent 36%\r\n    );\r\n    -webkit-mask-repeat: no-repeat;\r\n    mask-repeat: no-repeat;\r\n  }\r\n\r\n  \/* CONTROLS ------------------------------------------------- *\/\r\n  .ps-m3d-controls {\r\n    position: absolute;\r\n    z-index: 20;\r\n    right: 0;\r\n    bottom: var(--ps-m3d-controls-bottom);\r\n    left: 0;\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    pointer-events: none;\r\n  }\r\n\r\n  .ps-m3d-navigation {\r\n    width: var(--ps-m3d-nav-width);\r\n    max-width: calc(100vw - 32px);\r\n    min-width: 0;\r\n    pointer-events: auto;\r\n  }\r\n\r\n  .ps-m3d-progress-wrap {\r\n    display: grid;\r\n    gap: 11px;\r\n    min-width: 0;\r\n  }\r\n\r\n  .ps-m3d-dots {\r\n    display: flex;\r\n    justify-content: center;\r\n    gap: 9px;\r\n  }\r\n\r\n  .ps-m3d-dot {\r\n    width: 6px;\r\n    height: 6px;\r\n    padding: 0;\r\n    border: 0;\r\n    border-radius: 999px;\r\n    background: rgba(191, 220, 244, 0.28);\r\n    cursor: pointer;\r\n    transition:\r\n      width 420ms cubic-bezier(0.2, 0.8, 0.2, 1),\r\n      background 280ms ease,\r\n      box-shadow 280ms ease;\r\n  }\r\n\r\n  .ps-m3d-dot.is-active {\r\n    width: 25px;\r\n    background: var(--ps-m3d-accent);\r\n    box-shadow: 0 0 12px rgba(var(--ps-m3d-accent-rgb), 0.58);\r\n  }\r\n\r\n  .ps-m3d-progress {\r\n    position: relative;\r\n    width: 100%;\r\n    height: 1px;\r\n    overflow: hidden;\r\n    border-radius: 999px;\r\n    background: rgba(185, 220, 247, 0.14);\r\n  }\r\n\r\n  .ps-m3d-progress__fill {\r\n    position: absolute;\r\n    inset: 0 auto 0 0;\r\n    width: 100%;\r\n    border-radius: inherit;\r\n    background: linear-gradient(\r\n      90deg,\r\n      var(--ps-m3d-blue),\r\n      var(--ps-m3d-accent)\r\n    );\r\n    box-shadow: 0 0 10px rgba(var(--ps-m3d-accent-rgb), 0.48);\r\n    transform: scaleX(0);\r\n    transform-origin: left center;\r\n  }\r\n\r\n  .ps-m3d-carousel.is-progressing .ps-m3d-progress__fill {\r\n    animation: ps-m3d-progress var(--ps-auto-delay, 5200ms) linear forwards;\r\n  }\r\n\r\n  .ps-m3d-carousel.is-paused .ps-m3d-progress__fill {\r\n    animation-play-state: paused;\r\n  }\r\n\r\n  \/* RESPONSIVE ----------------------------------------------- *\/\r\n  @media (min-width: 768px) and (max-width: 1024px) {\r\n    .ps-m3d-carousel {\r\n      --ps-m3d-height: var(--ps-m3d-tablet-height);\r\n      --ps-m3d-card-width: var(--ps-m3d-tablet-card-width);\r\n      --ps-m3d-stage-bottom: var(--ps-m3d-tablet-stage-bottom);\r\n      --ps-m3d-card-top: var(--ps-m3d-tablet-card-top);\r\n      --ps-m3d-side-distance-ratio: var(--ps-m3d-tablet-side-distance-ratio);\r\n      --ps-m3d-side-distance-max: var(--ps-m3d-tablet-side-distance-max);\r\n      --ps-m3d-side-y: var(--ps-m3d-tablet-side-y);\r\n      --ps-m3d-side-z: var(--ps-m3d-tablet-side-z);\r\n      --ps-m3d-side-rotation: var(--ps-m3d-tablet-side-rotation);\r\n      --ps-m3d-side-scale: var(--ps-m3d-tablet-side-scale);\r\n      --ps-m3d-side-opacity: var(--ps-m3d-tablet-side-opacity);\r\n      --ps-m3d-back-y: var(--ps-m3d-tablet-back-y);\r\n      --ps-m3d-back-z: var(--ps-m3d-tablet-back-z);\r\n      --ps-m3d-back-rotation: var(--ps-m3d-tablet-back-rotation);\r\n      --ps-m3d-back-scale: var(--ps-m3d-tablet-back-scale);\r\n      --ps-m3d-back-opacity: var(--ps-m3d-tablet-back-opacity);\r\n      --ps-m3d-back-blur: var(--ps-m3d-tablet-back-blur);\r\n      --ps-m3d-nav-width: var(--ps-m3d-tablet-nav-width);\r\n      --ps-m3d-controls-bottom: var(--ps-m3d-tablet-controls-bottom);\r\n    }\r\n  }\r\n\r\n  @media (max-width: 767px) {\r\n    .ps-m3d-carousel {\r\n      --ps-m3d-height: var(--ps-m3d-mobile-height);\r\n      --ps-m3d-card-width: var(--ps-m3d-mobile-card-width);\r\n      --ps-m3d-stage-bottom: var(--ps-m3d-mobile-stage-bottom);\r\n      --ps-m3d-card-top: var(--ps-m3d-mobile-card-top);\r\n      --ps-m3d-side-distance-ratio: var(--ps-m3d-mobile-side-distance-ratio);\r\n      --ps-m3d-side-distance-max: var(--ps-m3d-mobile-side-distance-max);\r\n      --ps-m3d-side-y: var(--ps-m3d-mobile-side-y);\r\n      --ps-m3d-side-z: var(--ps-m3d-mobile-side-z);\r\n      --ps-m3d-side-rotation: var(--ps-m3d-mobile-side-rotation);\r\n      --ps-m3d-side-scale: var(--ps-m3d-mobile-side-scale);\r\n      --ps-m3d-side-opacity: var(--ps-m3d-mobile-side-opacity);\r\n      --ps-m3d-back-y: var(--ps-m3d-mobile-back-y);\r\n      --ps-m3d-back-z: var(--ps-m3d-mobile-back-z);\r\n      --ps-m3d-back-rotation: var(--ps-m3d-mobile-back-rotation);\r\n      --ps-m3d-back-scale: var(--ps-m3d-mobile-back-scale);\r\n      --ps-m3d-back-opacity: var(--ps-m3d-mobile-back-opacity);\r\n      --ps-m3d-back-blur: var(--ps-m3d-mobile-back-blur);\r\n      --ps-m3d-nav-width: var(--ps-m3d-mobile-nav-width);\r\n      --ps-m3d-controls-bottom: var(--ps-m3d-mobile-controls-bottom);\r\n    }\r\n\r\n    .ps-m3d-dots {\r\n      gap: 7px;\r\n    }\r\n\r\n    .ps-m3d-dot {\r\n      width: 5px;\r\n      height: 5px;\r\n    }\r\n\r\n    .ps-m3d-dot.is-active {\r\n      width: 18px;\r\n    }\r\n\r\n    .ps-m3d-ambient {\r\n      width: 96%;\r\n      opacity: 0.52;\r\n    }\r\n\r\n    .ps-m3d-orbit {\r\n      width: 92%;\r\n      opacity: 0.38;\r\n    }\r\n  }\r\n\r\n  @media (prefers-reduced-motion: reduce) {\r\n    .ps-m3d-ambient,\r\n    .ps-m3d-orbit::after,\r\n    .ps-m3d-slide.is-active .ps-m3d-slide__float,\r\n    .ps-m3d-slide.is-active .ps-m3d-slide__reflection--sweep,\r\n    .ps-m3d-progress__fill {\r\n      animation: none !important;\r\n    }\r\n\r\n    .ps-m3d-slide {\r\n      transition-duration: 220ms;\r\n    }\r\n  }\r\n\r\n  \/* KEYFRAMES ----------------------------------------------- *\/\r\n  @keyframes ps-m3d-card-float {\r\n    0%, 100% {\r\n      transform: translate3d(0, 0, 0) rotateX(0deg);\r\n    }\r\n    50% {\r\n      transform: translate3d(0, -7px, 9px) rotateX(0.35deg);\r\n    }\r\n  }\r\n\r\n  @keyframes ps-m3d-light-sweep {\r\n    0%, 36% {\r\n      -webkit-clip-path: polygon(\r\n        -55% 0,\r\n        calc(-55% + var(--ps-m3d-reflection-width)) 0,\r\n        calc(-67% + var(--ps-m3d-reflection-width)) 100%,\r\n        -67% 100%\r\n      );\r\n      clip-path: polygon(\r\n        -55% 0,\r\n        calc(-55% + var(--ps-m3d-reflection-width)) 0,\r\n        calc(-67% + var(--ps-m3d-reflection-width)) 100%,\r\n        -67% 100%\r\n      );\r\n      opacity: 0;\r\n    }\r\n    45% {\r\n      opacity: var(--ps-m3d-reflection-opacity);\r\n    }\r\n    64% {\r\n      -webkit-clip-path: polygon(\r\n        110% 0,\r\n        calc(110% + var(--ps-m3d-reflection-width)) 0,\r\n        calc(98% + var(--ps-m3d-reflection-width)) 100%,\r\n        98% 100%\r\n      );\r\n      clip-path: polygon(\r\n        110% 0,\r\n        calc(110% + var(--ps-m3d-reflection-width)) 0,\r\n        calc(98% + var(--ps-m3d-reflection-width)) 100%,\r\n        98% 100%\r\n      );\r\n      opacity: 0;\r\n    }\r\n    100% {\r\n      -webkit-clip-path: polygon(\r\n        110% 0,\r\n        calc(110% + var(--ps-m3d-reflection-width)) 0,\r\n        calc(98% + var(--ps-m3d-reflection-width)) 100%,\r\n        98% 100%\r\n      );\r\n      clip-path: polygon(\r\n        110% 0,\r\n        calc(110% + var(--ps-m3d-reflection-width)) 0,\r\n        calc(98% + var(--ps-m3d-reflection-width)) 100%,\r\n        98% 100%\r\n      );\r\n      opacity: 0;\r\n    }\r\n  }\r\n\r\n  @keyframes ps-m3d-ambient-breathe {\r\n    0%, 100% {\r\n      opacity: 0.52;\r\n      filter: blur(24px);\r\n    }\r\n    50% {\r\n      opacity: 0.86;\r\n      filter: blur(18px);\r\n    }\r\n  }\r\n\r\n  @keyframes ps-m3d-orbit-dot {\r\n    0% {\r\n      left: -4px;\r\n      transform: scale(0.72);\r\n    }\r\n    100% {\r\n      left: calc(100% - 4px);\r\n      transform: scale(1);\r\n    }\r\n  }\r\n\r\n  @keyframes ps-m3d-progress {\r\n    from {\r\n      transform: scaleX(0);\r\n    }\r\n    to {\r\n      transform: scaleX(1);\r\n    }\r\n  }\r\n<\/style>\r\n\r\n<div\r\n  class=\"ps-m3d-carousel\"\r\n  data-ps-m3d-carousel\r\n  data-autoplay=\"true\"\r\n  data-autoplay-delay=\"2600\"\r\n  tabindex=\"0\"\r\n  role=\"region\"\r\n  aria-roledescription=\"carousel\"\r\n  aria-label=\"PanoSky business impact\"\r\n>\r\n  <div class=\"ps-m3d-ambient\" aria-hidden=\"true\"><\/div>\r\n  <div class=\"ps-m3d-orbit\" aria-hidden=\"true\"><\/div>\r\n\r\n  <div class=\"ps-m3d-stage\">\r\n    <!-- SLIDE 01 \u2014 REPLACE IMAGE LINK -->\r\n    <article class=\"ps-m3d-slide\" data-title=\"Weeks to Minutes\">\r\n      <div class=\"ps-m3d-slide__float\">\r\n        <div class=\"ps-m3d-slide__tilt\">\r\n          <div class=\"ps-m3d-slide__surface\">\r\n            <img class=\"ps-m3d-slide__image\"\r\n              src=\"https:\/\/panosky-website-media.b-cdn.net\/Web%20Images%20and%20videos\/Home%20page\/revenue-cards4.png?auto=format&amp;fit=crop&amp;w=1800&amp;q=90\"\r\n              alt=\"Weeks to Minutes\"\r\n              loading=\"eager\"\r\n              decoding=\"async\"\r\n              draggable=\"false\"\r\n            >\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/article>\r\n\r\n    <!-- SLIDE 02 \u2014 REPLACE IMAGE LINK -->\r\n    <article class=\"ps-m3d-slide\" data-title=\"More Attention\">\r\n      <div class=\"ps-m3d-slide__float\">\r\n        <div class=\"ps-m3d-slide__tilt\">\r\n          <div class=\"ps-m3d-slide__surface\">\r\n            <img class=\"ps-m3d-slide__image\"\r\n              src=\"https:\/\/panosky-website-media.b-cdn.net\/Web%20Images%20and%20videos\/Home%20page\/revenue-cards3.png?auto=format&amp;fit=crop&amp;w=1800&amp;q=90\"\r\n              alt=\"Up to five times more attention\"\r\n              loading=\"eager\"\r\n              decoding=\"async\"\r\n              draggable=\"false\"\r\n            >\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/article>\r\n\r\n    <!-- SLIDE 03 \u2014 REPLACE IMAGE LINK -->\r\n    <article class=\"ps-m3d-slide\" data-title=\"Zero Doubt\">\r\n      <div class=\"ps-m3d-slide__float\">\r\n        <div class=\"ps-m3d-slide__tilt\">\r\n          <div class=\"ps-m3d-slide__surface\">\r\n            <img class=\"ps-m3d-slide__image\"\r\n              src=\"https:\/\/panosky-website-media.b-cdn.net\/Web%20Images%20and%20videos\/Home%20page\/revenue-cards2.png?auto=format&amp;fit=crop&amp;w=1800&amp;q=90\"\r\n              alt=\"Zero Doubt\"\r\n              loading=\"eager\"\r\n              decoding=\"async\"\r\n              draggable=\"false\"\r\n            >\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/article>\r\n\r\n    <!-- SLIDE 04 \u2014 REPLACE IMAGE LINK -->\r\n    <article class=\"ps-m3d-slide\" data-title=\"One Asset Everywhere\">\r\n      <div class=\"ps-m3d-slide__float\">\r\n        <div class=\"ps-m3d-slide__tilt\">\r\n          <div class=\"ps-m3d-slide__surface\">\r\n            <img class=\"ps-m3d-slide__image\"\r\n              src=\"https:\/\/panosky-website-media.b-cdn.net\/Web%20Images%20and%20videos\/Home%20page\/revenue-cards1.png?auto=format&amp;fit=crop&amp;w=1800&amp;q=90\"\r\n              alt=\"One Asset Everywhere\"\r\n              loading=\"eager\"\r\n              decoding=\"async\"\r\n              draggable=\"false\"\r\n            >\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/article>\r\n  <\/div>\r\n\r\n  <div class=\"ps-m3d-controls\">\r\n    <div class=\"ps-m3d-navigation\">\r\n      <div class=\"ps-m3d-progress-wrap\">\r\n        <div class=\"ps-m3d-dots\" aria-label=\"Choose slide\"><\/div>\r\n        <div class=\"ps-m3d-progress\" aria-hidden=\"true\">\r\n          <span class=\"ps-m3d-progress__fill\"><\/span>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n<script>\r\n  (() => {\r\n    const carousels = document.querySelectorAll(\r\n      '.ps-m3d-carousel[data-ps-m3d-carousel]:not([data-ps-m3d-ready])'\r\n    );\r\n\r\n    carousels.forEach((root) => {\r\n      root.setAttribute('data-ps-m3d-ready', 'true');\r\n\r\n      \/* Allow this widget to escape Elementor's padded wrapper safely. *\/\r\n      let overflowHost = root.parentElement;\r\n      let overflowLevels = 0;\r\n      while (\r\n        overflowHost &&\r\n        overflowHost !== document.body &&\r\n        overflowLevels < 6\r\n      ) {\r\n        overflowHost.classList.add('ps-m3d-overflow-host');\r\n        overflowHost = overflowHost.parentElement;\r\n        overflowLevels += 1;\r\n      }\r\n\r\n      \/*\r\n       * clientWidth excludes the browser scrollbar, unlike 100vw. This keeps\r\n       * the full-bleed section flush to both viewport edges without creating\r\n       * unwanted horizontal page scrolling.\r\n       *\/\r\n      const syncFullBleedWidth = () => {\r\n        const viewportWidth = Math.max(\r\n          document.documentElement.clientWidth || window.innerWidth || 0,\r\n          320\r\n        );\r\n        root.style.setProperty('--ps-m3d-full-bleed-width', `${viewportWidth}px`);\r\n        root.style.setProperty('--ps-m3d-full-bleed-half', `${viewportWidth \/ 2}px`);\r\n      };\r\n\r\n      syncFullBleedWidth();\r\n\r\n      const stage = root.querySelector('.ps-m3d-stage');\r\n      const slides = Array.from(root.querySelectorAll('.ps-m3d-slide'));\r\n      const dotsWrap = root.querySelector('.ps-m3d-dots');\r\n      const progressFill = root.querySelector('.ps-m3d-progress__fill');\r\n\r\n      if (!stage || !dotsWrap || !progressFill || slides.length < 2) return;\r\n\r\n      const count = slides.length;\r\n      const prefersReducedMotion = window.matchMedia(\r\n        '(prefers-reduced-motion: reduce)'\r\n      );\r\n      const autoplayEnabled = root.dataset.autoplay !== 'false';\r\n      const autoplayDelay = Math.max(\r\n        1800,\r\n        Number.parseInt(root.dataset.autoplayDelay || '5200', 10) || 5200\r\n      );\r\n\r\n      let activeIndex = 0;\r\n      let direction = 1;\r\n      let autoplayTimer = null;\r\n      let resizeFrame = null;\r\n      let pointerId = null;\r\n      let startX = 0;\r\n      let startY = 0;\r\n      let dragX = 0;\r\n      let gesture = null;\r\n      let isDragging = false;\r\n      let inViewport = true;\r\n      let pauseState = null;\r\n      let suppressClickUntil = 0;\r\n\r\n      root.style.setProperty('--ps-auto-delay', `${autoplayDelay}ms`);\r\n\r\n      const dots = slides.map((slide, index) => {\r\n        const dot = document.createElement('button');\r\n        dot.type = 'button';\r\n        dot.className = 'ps-m3d-dot';\r\n        dot.setAttribute('aria-label', `Show slide ${index + 1}`);\r\n        dot.addEventListener('click', () => goTo(index, index > activeIndex ? 1 : -1));\r\n        dotsWrap.appendChild(dot);\r\n        return dot;\r\n      });\r\n\r\n      \/*\r\n       * Create two light-only copies of each card. The copies preserve the\r\n       * source PNG's alpha channel, so both reflections are naturally clipped\r\n       * to visible card pixels without needing a second mask URL.\r\n       *\/\r\n      const createReflection = (slide, modifier) => {\r\n        const image = slide.querySelector('.ps-m3d-slide__image');\r\n        const surface = slide.querySelector('.ps-m3d-slide__surface');\r\n        if (!image || !surface) return;\r\n\r\n        const reflection = image.cloneNode(true);\r\n        reflection.className = `ps-m3d-slide__reflection ps-m3d-slide__reflection--${modifier}`;\r\n        reflection.alt = '';\r\n        reflection.setAttribute('aria-hidden', 'true');\r\n        reflection.setAttribute('draggable', 'false');\r\n        reflection.removeAttribute('id');\r\n        surface.appendChild(reflection);\r\n      };\r\n\r\n      slides.forEach((slide) => {\r\n        createReflection(slide, 'sweep');\r\n        createReflection(slide, 'pointer');\r\n      });\r\n\r\n      const getOffset = (slideIndex) => {\r\n        let offset = (slideIndex - activeIndex + count) % count;\r\n        if (offset > count \/ 2) offset -= count;\r\n\r\n        if (count % 2 === 0 && offset === count \/ 2) {\r\n          offset = direction > 0 ? count \/ 2 : -count \/ 2;\r\n        }\r\n\r\n        return offset;\r\n      };\r\n\r\n      const render = (temporaryDrag = 0, restart = false) => {\r\n        const width = Math.max(\r\n          stage.clientWidth,\r\n          root.clientWidth,\r\n          document.documentElement.clientWidth || 0,\r\n          320\r\n        );\r\n        const rootStyles = window.getComputedStyle(root);\r\n        const readNumber = (property, fallback) => {\r\n          const value = Number.parseFloat(rootStyles.getPropertyValue(property));\r\n          return Number.isFinite(value) ? value : fallback;\r\n        };\r\n\r\n        const sideDistanceRatio = readNumber('--ps-m3d-side-distance-ratio', 0.31);\r\n        const sideDistanceMax = readNumber('--ps-m3d-side-distance-max', 430);\r\n        const sideDistance = Math.min(width * sideDistanceRatio, sideDistanceMax);\r\n        const sideY = readNumber('--ps-m3d-side-y', 20);\r\n        const sideZ = readNumber('--ps-m3d-side-z', -175);\r\n        const sideRotation = readNumber('--ps-m3d-side-rotation', 34);\r\n        const sideScale = readNumber('--ps-m3d-side-scale', 0.78);\r\n        const sideOpacity = readNumber('--ps-m3d-side-opacity', 0.72);\r\n        const backY = readNumber('--ps-m3d-back-y', 46);\r\n        const backZ = readNumber('--ps-m3d-back-z', -470);\r\n        const backRotation = readNumber('--ps-m3d-back-rotation', 10);\r\n        const backScale = readNumber('--ps-m3d-back-scale', 0.58);\r\n        const backOpacity = readNumber('--ps-m3d-back-opacity', 0.18);\r\n        const backBlur = readNumber('--ps-m3d-back-blur', 2);\r\n        const dragRatio = Math.max(-1, Math.min(1, temporaryDrag \/ Math.max(width * 0.32, 110)));\r\n\r\n        slides.forEach((slide, slideIndex) => {\r\n          const offset = getOffset(slideIndex);\r\n          const absoluteOffset = Math.abs(offset);\r\n          const sign = offset === 0 ? 0 : Math.sign(offset);\r\n\r\n          let x;\r\n          let y;\r\n          let z;\r\n          let rotationY;\r\n          let rotationZ;\r\n          let scale;\r\n          let opacity;\r\n          let blur;\r\n          let zIndex;\r\n\r\n          if (absoluteOffset === 0) {\r\n            x = temporaryDrag * 0.72;\r\n            y = Math.abs(dragRatio) * 7;\r\n            z = 125 - Math.abs(dragRatio) * 80;\r\n            rotationY = -dragRatio * 13;\r\n            rotationZ = dragRatio * 0.7;\r\n            scale = 1 - Math.abs(dragRatio) * 0.035;\r\n            opacity = 1;\r\n            blur = 0;\r\n            zIndex = 20;\r\n          } else if (absoluteOffset === 1) {\r\n            x = sign * sideDistance + temporaryDrag * 0.18;\r\n            y = sideY;\r\n            z = sideZ;\r\n            rotationY = sign * -sideRotation;\r\n            rotationZ = sign * -0.55;\r\n            scale = sideScale;\r\n            opacity = sideOpacity;\r\n            blur = 0;\r\n            zIndex = 10;\r\n          } else {\r\n            x = sign * sideDistance * 0.10 + temporaryDrag * 0.06;\r\n            y = backY;\r\n            z = backZ;\r\n            rotationY = sign * -backRotation;\r\n            rotationZ = sign * -0.3;\r\n            scale = backScale;\r\n            opacity = backOpacity;\r\n            blur = backBlur;\r\n            zIndex = 1;\r\n          }\r\n\r\n          slide.style.setProperty('--ps-x', `${x}px`);\r\n          slide.style.setProperty('--ps-y', `${y}px`);\r\n          slide.style.setProperty('--ps-z', `${z}px`);\r\n          slide.style.setProperty('--ps-ry', `${rotationY}deg`);\r\n          slide.style.setProperty('--ps-rz', `${rotationZ}deg`);\r\n          slide.style.setProperty('--ps-scale', scale);\r\n          slide.style.setProperty('--ps-opacity', opacity);\r\n          slide.style.setProperty('--ps-blur', `${blur}px`);\r\n          slide.style.zIndex = String(zIndex);\r\n\r\n          const isActive = absoluteOffset === 0;\r\n          slide.classList.toggle('is-active', isActive);\r\n          slide.setAttribute('aria-hidden', isActive ? 'false' : 'true');\r\n          slide.setAttribute(\r\n            'aria-label',\r\n            `${slideIndex + 1} of ${count}: ${slide.dataset.title || 'Carousel image'}`\r\n          );\r\n        });\r\n\r\n        dots.forEach((dot, dotIndex) => {\r\n          const selected = dotIndex === activeIndex;\r\n          dot.classList.toggle('is-active', selected);\r\n          dot.setAttribute('aria-current', selected ? 'true' : 'false');\r\n        });\r\n\r\n        if (restart) restartProgress();\r\n      };\r\n\r\n      const restartProgress = () => {\r\n        root.classList.remove('is-progressing');\r\n        progressFill.style.animation = 'none';\r\n        void progressFill.offsetWidth;\r\n        progressFill.style.animation = '';\r\n\r\n        if (autoplayEnabled && !prefersReducedMotion.matches) {\r\n          root.classList.add('is-progressing');\r\n        }\r\n      };\r\n\r\n      const shouldPause = () =>\r\n        isDragging ||\r\n        !inViewport ||\r\n        document.hidden ||\r\n        prefersReducedMotion.matches;\r\n\r\n      const syncPausedState = () => {\r\n        const paused = shouldPause();\r\n        const resumed = pauseState === true && paused === false;\r\n        pauseState = paused;\r\n        root.classList.toggle('is-paused', paused);\r\n\r\n        window.clearTimeout(autoplayTimer);\r\n        autoplayTimer = null;\r\n\r\n        if (autoplayEnabled && !paused) {\r\n          if (resumed) restartProgress();\r\n          autoplayTimer = window.setTimeout(() => {\r\n            goTo(activeIndex + 1, 1);\r\n          }, autoplayDelay);\r\n        }\r\n      };\r\n\r\n      function goTo(nextIndex, requestedDirection = 1) {\r\n        direction = requestedDirection >= 0 ? 1 : -1;\r\n        activeIndex = ((nextIndex % count) + count) % count;\r\n        dragX = 0;\r\n        resetTilt();\r\n        render(0, true);\r\n        syncPausedState();\r\n      }\r\n\r\n      const resetTilt = () => {\r\n        slides.forEach((slide) => {\r\n          const tilt = slide.querySelector('.ps-m3d-slide__tilt');\r\n          const surface = slide.querySelector('.ps-m3d-slide__surface');\r\n          if (tilt) {\r\n            tilt.style.setProperty('--ps-tilt-x', '0deg');\r\n            tilt.style.setProperty('--ps-tilt-y', '0deg');\r\n          }\r\n          if (surface) {\r\n            surface.style.setProperty('--ps-light-x', '50%');\r\n            surface.style.setProperty('--ps-light-y', '42%');\r\n          }\r\n        });\r\n      };\r\n\r\n      slides.forEach((slide, slideIndex) => {\r\n        slide.addEventListener('click', () => {\r\n          if (Date.now() < suppressClickUntil || Math.abs(dragX) > 8) return;\r\n          const offset = getOffset(slideIndex);\r\n          if (offset !== 0) goTo(slideIndex, offset > 0 ? 1 : -1);\r\n        });\r\n      });\r\n\r\n      root.addEventListener('keydown', (event) => {\r\n        if (event.key === 'ArrowLeft') {\r\n          event.preventDefault();\r\n          goTo(activeIndex - 1, -1);\r\n        }\r\n        if (event.key === 'ArrowRight') {\r\n          event.preventDefault();\r\n          goTo(activeIndex + 1, 1);\r\n        }\r\n      });\r\n\r\n      root.addEventListener('pointerdown', (event) => {\r\n        if (event.pointerType === 'mouse' && event.button !== 0) return;\r\n        if (event.target.closest('button')) return;\r\n\r\n        pointerId = event.pointerId;\r\n        startX = event.clientX;\r\n        startY = event.clientY;\r\n        dragX = 0;\r\n        gesture = null;\r\n      });\r\n\r\n      root.addEventListener('pointermove', (event) => {\r\n        if (pointerId === event.pointerId) {\r\n          const deltaX = event.clientX - startX;\r\n          const deltaY = event.clientY - startY;\r\n\r\n          if (!gesture && Math.hypot(deltaX, deltaY) > 9) {\r\n            gesture = Math.abs(deltaX) > Math.abs(deltaY) * 1.18 ? 'horizontal' : 'vertical';\r\n\r\n            if (gesture === 'horizontal') {\r\n              isDragging = true;\r\n              root.classList.add('is-dragging');\r\n              root.setPointerCapture?.(event.pointerId);\r\n              syncPausedState();\r\n            }\r\n          }\r\n\r\n          if (gesture === 'horizontal') {\r\n            event.preventDefault();\r\n            dragX = deltaX;\r\n            render(dragX, false);\r\n            return;\r\n          }\r\n        }\r\n\r\n        if (isDragging || pointerId !== null || prefersReducedMotion.matches) return;\r\n\r\n        const activeSlide = slides[activeIndex];\r\n        const surface = activeSlide?.querySelector('.ps-m3d-slide__surface');\r\n        const tilt = activeSlide?.querySelector('.ps-m3d-slide__tilt');\r\n        if (!surface || !tilt) return;\r\n\r\n        const rect = surface.getBoundingClientRect();\r\n        const inside =\r\n          event.clientX >= rect.left &&\r\n          event.clientX <= rect.right &&\r\n          event.clientY >= rect.top &&\r\n          event.clientY <= rect.bottom;\r\n\r\n        if (!inside) {\r\n          resetTilt();\r\n          return;\r\n        }\r\n\r\n        const localX = (event.clientX - rect.left) \/ rect.width;\r\n        const localY = (event.clientY - rect.top) \/ rect.height;\r\n        const tiltY = (localX - 0.5) * 7.5;\r\n        const tiltX = (0.5 - localY) * 6;\r\n\r\n        tilt.style.setProperty('--ps-tilt-x', `${tiltX.toFixed(2)}deg`);\r\n        tilt.style.setProperty('--ps-tilt-y', `${tiltY.toFixed(2)}deg`);\r\n        surface.style.setProperty('--ps-light-x', `${(localX * 100).toFixed(1)}%`);\r\n        surface.style.setProperty('--ps-light-y', `${(localY * 100).toFixed(1)}%`);\r\n      });\r\n\r\n      const endGesture = (event) => {\r\n        if (pointerId !== event.pointerId) return;\r\n\r\n        const wasHorizontal = gesture === 'horizontal';\r\n        const finalDrag = dragX;\r\n\r\n        if (wasHorizontal && Math.abs(finalDrag) > 8) {\r\n          suppressClickUntil = Date.now() + 380;\r\n        }\r\n\r\n        if (root.hasPointerCapture?.(event.pointerId)) {\r\n          root.releasePointerCapture?.(event.pointerId);\r\n        }\r\n\r\n        pointerId = null;\r\n        gesture = null;\r\n        isDragging = false;\r\n        root.classList.remove('is-dragging');\r\n\r\n        if (wasHorizontal && Math.abs(finalDrag) > Math.min(stage.clientWidth * 0.11, 86)) {\r\n          goTo(activeIndex + (finalDrag < 0 ? 1 : -1), finalDrag < 0 ? 1 : -1);\r\n        } else {\r\n          dragX = 0;\r\n          render(0, false);\r\n          syncPausedState();\r\n        }\r\n      };\r\n\r\n      root.addEventListener('pointerup', endGesture);\r\n      root.addEventListener('pointercancel', endGesture);\r\n      root.addEventListener('pointerleave', () => {\r\n        if (pointerId === null) resetTilt();\r\n      });\r\n\r\n      document.addEventListener('visibilitychange', syncPausedState);\r\n      prefersReducedMotion.addEventListener?.('change', () => {\r\n        restartProgress();\r\n        syncPausedState();\r\n      });\r\n\r\n      if ('IntersectionObserver' in window) {\r\n        const observer = new IntersectionObserver(\r\n          (entries) => {\r\n            entries.forEach((entry) => {\r\n              inViewport = entry.isIntersecting;\r\n              syncPausedState();\r\n            });\r\n          },\r\n          { threshold: 0.16 }\r\n        );\r\n        observer.observe(root);\r\n      }\r\n\r\n      if ('ResizeObserver' in window) {\r\n        const resizeObserver = new ResizeObserver(() => {\r\n          window.cancelAnimationFrame(resizeFrame);\r\n          resizeFrame = window.requestAnimationFrame(() => {\r\n            syncFullBleedWidth();\r\n            render(0, false);\r\n          });\r\n        });\r\n        resizeObserver.observe(root);\r\n      }\r\n\r\n      window.addEventListener('resize', () => {\r\n        window.cancelAnimationFrame(resizeFrame);\r\n        resizeFrame = window.requestAnimationFrame(() => {\r\n          syncFullBleedWidth();\r\n          render(0, false);\r\n        });\r\n      });\r\n\r\n      render(0, true);\r\n      syncPausedState();\r\n    });\r\n  })();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-96f3c6c elementor-hidden-mobile elementor-widget elementor-widget-html\" data-id=\"96f3c6c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- PanoSky 3D image-card carousel | Paste everything into one Elementor HTML widget -->\r\n<style>\r\n  .ps-card-carousel,\r\n  .ps-card-carousel * {\r\n    box-sizing: border-box;\r\n  }\r\n\r\n  .ps-card-carousel {\r\n    \/* =========================================================\r\n       DESKTOP CONTROLS\r\n       Edit these values to match your card artwork and layout.\r\n       No border or card background is added by this code.\r\n       ========================================================= *\/\r\n\r\n    --ps-stage-height: 540px;\r\n    --ps-stage-max-width: 1440px;\r\n    --ps-overflow-stage-width: 100vw;\r\n    --ps-stack-center-y: 45%;\r\n\r\n    \/* Use the natural width-to-height ratio of your PNG\/WebP files. *\/\r\n    --ps-card-width: 440px;\r\n    --ps-card-aspect: 1.586;\r\n\r\n    \/* FRONT CARD *\/\r\n    --ps-front-x: -200px;\r\n    --ps-front-y: 40px;\r\n    --ps-front-angle: -20deg;\r\n    --ps-front-scale: 1.3;\r\n\r\n    \/* SECOND CARD *\/\r\n    --ps-second-x: 50px;\r\n    --ps-second-y: 0px;\r\n    --ps-second-angle: -40deg;\r\n    --ps-second-scale: 1;\r\n\r\n    \/* THIRD CARD *\/\r\n    --ps-third-x: 250px;\r\n    --ps-third-y: -40px;\r\n    --ps-third-angle: -70deg;\r\n    --ps-third-scale: 0.8;\r\n\r\n    \/* BACK CARD *\/\r\n    --ps-back-x: 400px;\r\n    --ps-back-y: -120px;\r\n    --ps-back-angle: -110deg;\r\n    --ps-back-scale: 0.7;\r\n\r\n    \/* DEPTH \/ READABILITY *\/\r\n    --ps-second-blur: 1.6px;\r\n    --ps-third-blur: 3.2px;\r\n    --ps-back-blur: 5px;\r\n    --ps-second-opacity: 0.78;\r\n    --ps-third-opacity: 0.60;\r\n    --ps-back-opacity: 0.44;\r\n\r\n    \/* AUTO SLIDE *\/\r\n    --ps-cycle-duration: 1050ms;\r\n    --ps-autoplay-delay: 1500ms;\r\n    --ps-return-duration: 50ms;\r\n    --ps-mobile-cycle-duration: 1020ms;\r\n    --ps-mobile-return-duration: 50ms;\r\n    --ps-exit-distance: 78vw;\r\n    --ps-exit-y: 42px;\r\n    --ps-exit-angle: 30deg;\r\n    --ps-return-drop: 34px;\r\n    --ps-return-scale: 0.69;\r\n\r\n    \/* FLOAT \/ HOVER *\/\r\n    --ps-float-up: -7px;\r\n    --ps-float-speed: 3.4s;\r\n    --ps-hover-lift: -7px;\r\n    --ps-hover-scale: 1.018;\r\n    --ps-hover-tilt: 7deg;\r\n    --ps-section-parallax-x: 15px;\r\n    --ps-section-parallax-y: 11px;\r\n    --ps-drag-threshold: 28px;\r\n    --ps-drag-offset: 0px;\r\n    --ps-drag-offset-secondary: 0px;\r\n\r\n    \/* SHADOW \/ FRONT GLOW *\/\r\n    --ps-shadow: rgba(0, 0, 0, 0.48);\r\n    --ps-shadow-y: 27px;\r\n    --ps-shadow-blur: 31px;\r\n    --ps-glow-color: rgba(50, 183, 255, 0.50);\r\n    --ps-glow-strength: 0.94;\r\n    --ps-glow-min: 0.20;\r\n    --ps-shine-opacity: 0.31;\r\n    --ps-shine-speed: 4.8s;\r\n\r\n    \/* REPLAYING ENTRANCE ANIMATION *\/\r\n    --ps-entrance-duration: 300ms;\r\n    --ps-entrance-x: 16px;\r\n    --ps-entrance-y: 42px;\r\n    --ps-entrance-angle: -55deg;\r\n    --ps-entrance-scale: 0.72;\r\n    --ps-entrance-blur: 11px;\r\n    --ps-entrance-delay-back: 0ms;\r\n    --ps-entrance-delay-third: 95ms;\r\n    --ps-entrance-delay-second: 185ms;\r\n    --ps-entrance-delay-front: 280ms;\r\n\r\n    \/* BOTTOM CAROUSEL DOTS *\/\r\n    --ps-dots-bottom: 34px;\r\n    --ps-dots-gap: 10px;\r\n    --ps-dot-size: 6px;\r\n    --ps-dot-active-width: 22px;\r\n    --ps-dot-color: rgba(210, 226, 243, 0.35);\r\n    --ps-dot-active-color: #50d8ff;\r\n    --ps-dot-glow: rgba(80, 216, 255, 0.42);\r\n\r\n    width: 100%;\r\n    position: relative;\r\n    margin: 0;\r\n    padding: 0;\r\n    background: transparent !important;\r\n    isolation: isolate;\r\n    overflow: visible !important;\r\n    touch-action: pan-y;\r\n  }\r\n\r\n  .ps-card-carousel__stage {\r\n    width: min(var(--ps-overflow-stage-width), var(--ps-stage-max-width));\r\n    max-width: none;\r\n    height: var(--ps-stage-height);\r\n    position: relative;\r\n    left: 50%;\r\n    margin: 0;\r\n    overflow: visible !important;\r\n    transform: translate3d(-50%, 0, 0);\r\n    perspective: 1400px;\r\n    transform-style: preserve-3d;\r\n    touch-action: pan-y;\r\n    cursor: grab;\r\n    user-select: none;\r\n    -webkit-user-select: none;\r\n  }\r\n\r\n  .ps-card-carousel.is-dragging .ps-card-carousel__stage {\r\n    cursor: grabbing;\r\n  }\r\n\r\n  .ps-card-carousel__card {\r\n    --ps-x: 0px;\r\n    --ps-y: 0px;\r\n    --ps-angle: 0deg;\r\n    --ps-scale: 1;\r\n\r\n    width: var(--ps-card-width);\r\n    aspect-ratio: var(--ps-card-aspect);\r\n    position: absolute;\r\n    left: 50%;\r\n    top: var(--ps-stack-center-y);\r\n    margin: 0;\r\n    padding: 0;\r\n    border: 0;\r\n    background: transparent;\r\n    opacity: 1;\r\n    transform:\r\n      translate(-50%, -50%)\r\n      translate3d(var(--ps-x), var(--ps-y), 0)\r\n      rotateZ(var(--ps-angle))\r\n      scale(var(--ps-scale));\r\n    transform-origin: center center;\r\n    transition:\r\n      transform var(--ps-cycle-duration) cubic-bezier(0.76, 0, 0.18, 1),\r\n      opacity var(--ps-cycle-duration) ease;\r\n    backface-visibility: hidden;\r\n    -webkit-backface-visibility: hidden;\r\n    will-change: transform, opacity;\r\n  }\r\n\r\n  .ps-card-carousel__card[data-slot=\"0\"] {\r\n    --ps-x: var(--ps-front-x);\r\n    --ps-y: var(--ps-front-y);\r\n    --ps-angle: var(--ps-front-angle);\r\n    --ps-scale: var(--ps-front-scale);\r\n    z-index: 40;\r\n    opacity: 1;\r\n  }\r\n\r\n  .ps-card-carousel__card[data-slot=\"1\"] {\r\n    --ps-x: var(--ps-second-x);\r\n    --ps-y: var(--ps-second-y);\r\n    --ps-angle: var(--ps-second-angle);\r\n    --ps-scale: var(--ps-second-scale);\r\n    z-index: 30;\r\n    opacity: var(--ps-second-opacity);\r\n  }\r\n\r\n  .ps-card-carousel__card[data-slot=\"2\"] {\r\n    --ps-x: var(--ps-third-x);\r\n    --ps-y: var(--ps-third-y);\r\n    --ps-angle: var(--ps-third-angle);\r\n    --ps-scale: var(--ps-third-scale);\r\n    z-index: 20;\r\n    opacity: var(--ps-third-opacity);\r\n  }\r\n\r\n  .ps-card-carousel__card[data-slot=\"3\"] {\r\n    --ps-x: var(--ps-back-x);\r\n    --ps-y: var(--ps-back-y);\r\n    --ps-angle: var(--ps-back-angle);\r\n    --ps-scale: var(--ps-back-scale);\r\n    z-index: 10;\r\n    opacity: var(--ps-back-opacity);\r\n  }\r\n\r\n  .ps-card-carousel__depth,\r\n  .ps-card-carousel__float,\r\n  .ps-card-carousel__tilt,\r\n  .ps-card-carousel__visual,\r\n  .ps-card-carousel__image,\r\n  .ps-card-carousel__shine,\r\n  .ps-card-carousel__glow {\r\n    position: absolute;\r\n    inset: 0;\r\n    width: 100%;\r\n    height: 100%;\r\n    border: 0;\r\n    background-color: transparent;\r\n  }\r\n\r\n  .ps-card-carousel__depth {\r\n    transition: filter var(--ps-cycle-duration) cubic-bezier(0.76, 0, 0.18, 1);\r\n    transform: translate3d(0, 0, 0);\r\n    backface-visibility: hidden;\r\n    -webkit-backface-visibility: hidden;\r\n    will-change: filter;\r\n  }\r\n\r\n  .ps-card-carousel__card[data-slot=\"0\"] .ps-card-carousel__depth {\r\n    filter: blur(0) brightness(1) saturate(1);\r\n  }\r\n\r\n  .ps-card-carousel__card[data-slot=\"1\"] .ps-card-carousel__depth {\r\n    filter: blur(var(--ps-second-blur)) brightness(0.86) saturate(0.90);\r\n  }\r\n\r\n  .ps-card-carousel__card[data-slot=\"2\"] .ps-card-carousel__depth {\r\n    filter: blur(var(--ps-third-blur)) brightness(0.70) saturate(0.78);\r\n  }\r\n\r\n  .ps-card-carousel__card[data-slot=\"3\"] .ps-card-carousel__depth {\r\n    filter: blur(var(--ps-back-blur)) brightness(0.56) saturate(0.67);\r\n  }\r\n\r\n  .ps-card-carousel__float {\r\n    animation: ps-card-float var(--ps-float-speed) ease-in-out infinite;\r\n    will-change: transform;\r\n  }\r\n\r\n  .ps-card-carousel__card:nth-child(2) .ps-card-carousel__float {\r\n    animation-delay: -1.2s;\r\n  }\r\n\r\n  .ps-card-carousel__card:nth-child(3) .ps-card-carousel__float {\r\n    animation-delay: -2.5s;\r\n  }\r\n\r\n  .ps-card-carousel__card:nth-child(4) .ps-card-carousel__float {\r\n    animation-delay: -3.7s;\r\n  }\r\n\r\n  @keyframes ps-card-float {\r\n    0%, 100% { transform: translate3d(0, 0, 0); }\r\n    50% { transform: translate3d(0, var(--ps-float-up), 0); }\r\n  }\r\n\r\n  .ps-card-carousel__tilt {\r\n    --ps-rx: 0deg;\r\n    --ps-ry: 0deg;\r\n    --ps-live-x: 0px;\r\n    --ps-live-y: 0px;\r\n    --ps-card-drag-offset: 0px;\r\n    --ps-live-lift: 0px;\r\n    --ps-live-scale: 1;\r\n    transform:\r\n      perspective(900px)\r\n      rotateX(var(--ps-rx))\r\n      rotateY(var(--ps-ry))\r\n      translate3d(\r\n        calc(var(--ps-live-x) + var(--ps-card-drag-offset)),\r\n        calc(var(--ps-live-y) + var(--ps-live-lift)),\r\n        0\r\n      )\r\n      scale(var(--ps-live-scale));\r\n    transform-origin: center center;\r\n    transition: transform 360ms cubic-bezier(0.2, 0.8, 0.2, 1);\r\n    will-change: transform;\r\n  }\r\n\r\n  .ps-card-carousel.is-dragging .ps-card-carousel__card[data-slot=\"0\"] .ps-card-carousel__tilt {\r\n    --ps-card-drag-offset: var(--ps-drag-offset);\r\n    transition-duration: 75ms;\r\n  }\r\n\r\n  .ps-card-carousel.is-dragging .ps-card-carousel__card[data-slot=\"1\"] .ps-card-carousel__tilt {\r\n    --ps-card-drag-offset: var(--ps-drag-offset-secondary);\r\n    transition-duration: 90ms;\r\n  }\r\n\r\n  @media (hover: hover) and (pointer: fine) {\r\n    .ps-card-carousel__card:hover .ps-card-carousel__tilt {\r\n      --ps-live-lift: var(--ps-hover-lift);\r\n      --ps-live-scale: var(--ps-hover-scale);\r\n      transition-duration: 110ms;\r\n    }\r\n  }\r\n\r\n  .ps-card-carousel__visual {\r\n    transform: translateZ(0);\r\n  }\r\n\r\n  .ps-card-carousel__image {\r\n    z-index: 2;\r\n    background-image: var(--ps-card-image);\r\n    background-position: center;\r\n    background-repeat: no-repeat;\r\n    background-size: contain;\r\n    filter: drop-shadow(0 var(--ps-shadow-y) var(--ps-shadow-blur) var(--ps-shadow));\r\n    pointer-events: none;\r\n  }\r\n\r\n  \/* Alpha-aware glow: follows the visible PNG\/WebP artwork. *\/\r\n  .ps-card-carousel__glow {\r\n    z-index: 1;\r\n    background: var(--ps-glow-color);\r\n    opacity: 0;\r\n    filter: blur(26px);\r\n    transform: scale(0.94);\r\n    -webkit-mask-image: var(--ps-card-image);\r\n    mask-image: var(--ps-card-image);\r\n    -webkit-mask-position: center;\r\n    mask-position: center;\r\n    -webkit-mask-repeat: no-repeat;\r\n    mask-repeat: no-repeat;\r\n    -webkit-mask-size: contain;\r\n    mask-size: contain;\r\n    transition: opacity 500ms ease;\r\n    pointer-events: none;\r\n  }\r\n\r\n  .ps-card-carousel__card[data-slot=\"0\"] .ps-card-carousel__glow {\r\n    opacity: var(--ps-glow-strength);\r\n    animation: ps-card-glow 3.8s ease-in-out infinite;\r\n  }\r\n\r\n  @keyframes ps-card-glow {\r\n    0%, 100% { opacity: var(--ps-glow-min); transform: scale(0.93); }\r\n    50% { opacity: var(--ps-glow-strength); transform: scale(0.97); }\r\n  }\r\n\r\n  \/* Alpha-aware moving highlight: never shines across transparent pixels. *\/\r\n  .ps-card-carousel__shine {\r\n    z-index: 3;\r\n    opacity: 0;\r\n    overflow: hidden;\r\n    background:\r\n      linear-gradient(\r\n        108deg,\r\n        transparent 32%,\r\n        rgba(255, 255, 255, 0.05) 41%,\r\n        rgba(255, 255, 255, 0.72) 49%,\r\n        rgba(170, 232, 255, 0.20) 56%,\r\n        transparent 67%\r\n      );\r\n    background-size: 260% 100%;\r\n    background-position: 170% 0;\r\n    mix-blend-mode: screen;\r\n    -webkit-mask-image: var(--ps-card-image);\r\n    mask-image: var(--ps-card-image);\r\n    -webkit-mask-position: center;\r\n    mask-position: center;\r\n    -webkit-mask-repeat: no-repeat;\r\n    mask-repeat: no-repeat;\r\n    -webkit-mask-size: contain;\r\n    mask-size: contain;\r\n    pointer-events: none;\r\n  }\r\n\r\n  .ps-card-carousel__card[data-slot=\"0\"] .ps-card-carousel__shine {\r\n    opacity: var(--ps-shine-opacity);\r\n    animation: ps-card-shine var(--ps-shine-speed) cubic-bezier(0.42, 0, 0.24, 1) infinite;\r\n  }\r\n\r\n  @keyframes ps-card-shine {\r\n    0%, 15% { background-position: 170% 0; opacity: 0; }\r\n    23% { opacity: var(--ps-shine-opacity); }\r\n    47% { background-position: -80% 0; opacity: var(--ps-shine-opacity); }\r\n    55%, 100% { background-position: -80% 0; opacity: 0; }\r\n  }\r\n\r\n  \/* Main cycling movement. *\/\r\n  .ps-card-carousel.is-shifting .ps-card-carousel__card[data-slot=\"0\"] {\r\n    --ps-x: calc(var(--ps-front-x) - var(--ps-exit-distance));\r\n    --ps-y: calc(var(--ps-front-y) + var(--ps-exit-y));\r\n    --ps-angle: var(--ps-exit-angle);\r\n    --ps-scale: 0.91;\r\n    z-index: 50;\r\n    opacity: 0;\r\n    pointer-events: none;\r\n  }\r\n\r\n  .ps-card-carousel.is-shifting .ps-card-carousel__card[data-slot=\"1\"] {\r\n    --ps-x: var(--ps-front-x);\r\n    --ps-y: var(--ps-front-y);\r\n    --ps-angle: var(--ps-front-angle);\r\n    --ps-scale: var(--ps-front-scale);\r\n    z-index: 40;\r\n    opacity: 1;\r\n  }\r\n\r\n  .ps-card-carousel.is-shifting .ps-card-carousel__card[data-slot=\"2\"] {\r\n    --ps-x: var(--ps-second-x);\r\n    --ps-y: var(--ps-second-y);\r\n    --ps-angle: var(--ps-second-angle);\r\n    --ps-scale: var(--ps-second-scale);\r\n    z-index: 30;\r\n    opacity: var(--ps-second-opacity);\r\n  }\r\n\r\n  .ps-card-carousel.is-shifting .ps-card-carousel__card[data-slot=\"3\"] {\r\n    --ps-x: var(--ps-third-x);\r\n    --ps-y: var(--ps-third-y);\r\n    --ps-angle: var(--ps-third-angle);\r\n    --ps-scale: var(--ps-third-scale);\r\n    z-index: 20;\r\n    opacity: var(--ps-third-opacity);\r\n  }\r\n\r\n  .ps-card-carousel.is-shifting .ps-card-carousel__card[data-slot=\"1\"] .ps-card-carousel__depth {\r\n    filter: blur(0) brightness(1) saturate(1);\r\n  }\r\n\r\n  .ps-card-carousel.is-shifting .ps-card-carousel__card[data-slot=\"2\"] .ps-card-carousel__depth {\r\n    filter: blur(var(--ps-second-blur)) brightness(0.86) saturate(0.90);\r\n  }\r\n\r\n  .ps-card-carousel.is-shifting .ps-card-carousel__card[data-slot=\"3\"] .ps-card-carousel__depth {\r\n    filter: blur(var(--ps-third-blur)) brightness(0.70) saturate(0.78);\r\n  }\r\n\r\n  \/* A rightward drag walks the same four-card fan backward. *\/\r\n  .ps-card-carousel.is-reversing .ps-card-carousel__card[data-slot=\"0\"] {\r\n    --ps-x: var(--ps-second-x);\r\n    --ps-y: var(--ps-second-y);\r\n    --ps-angle: var(--ps-second-angle);\r\n    --ps-scale: var(--ps-second-scale);\r\n    z-index: 30;\r\n    opacity: var(--ps-second-opacity);\r\n  }\r\n\r\n  .ps-card-carousel.is-reversing .ps-card-carousel__card[data-slot=\"1\"] {\r\n    --ps-x: var(--ps-third-x);\r\n    --ps-y: var(--ps-third-y);\r\n    --ps-angle: var(--ps-third-angle);\r\n    --ps-scale: var(--ps-third-scale);\r\n    z-index: 20;\r\n    opacity: var(--ps-third-opacity);\r\n  }\r\n\r\n  .ps-card-carousel.is-reversing .ps-card-carousel__card[data-slot=\"2\"] {\r\n    --ps-x: var(--ps-back-x);\r\n    --ps-y: var(--ps-back-y);\r\n    --ps-angle: var(--ps-back-angle);\r\n    --ps-scale: var(--ps-back-scale);\r\n    z-index: 10;\r\n    opacity: var(--ps-back-opacity);\r\n  }\r\n\r\n  .ps-card-carousel.is-reversing .ps-card-carousel__card[data-slot=\"3\"] {\r\n    --ps-x: var(--ps-front-x);\r\n    --ps-y: var(--ps-front-y);\r\n    --ps-angle: var(--ps-front-angle);\r\n    --ps-scale: var(--ps-front-scale);\r\n    z-index: 45;\r\n    opacity: 1;\r\n  }\r\n\r\n  .ps-card-carousel.is-reversing .ps-card-carousel__card[data-slot=\"0\"] .ps-card-carousel__depth {\r\n    filter: blur(var(--ps-second-blur)) brightness(0.86) saturate(0.90);\r\n  }\r\n\r\n  .ps-card-carousel.is-reversing .ps-card-carousel__card[data-slot=\"1\"] .ps-card-carousel__depth {\r\n    filter: blur(var(--ps-third-blur)) brightness(0.70) saturate(0.78);\r\n  }\r\n\r\n  .ps-card-carousel.is-reversing .ps-card-carousel__card[data-slot=\"2\"] .ps-card-carousel__depth {\r\n    filter: blur(var(--ps-back-blur)) brightness(0.56) saturate(0.67);\r\n  }\r\n\r\n  .ps-card-carousel.is-reversing .ps-card-carousel__card[data-slot=\"3\"] .ps-card-carousel__depth {\r\n    filter: blur(0) brightness(1) saturate(1);\r\n  }\r\n\r\n  .ps-card-carousel__card.is-returning {\r\n    --ps-y: calc(var(--ps-back-y) + var(--ps-return-drop));\r\n    --ps-scale: var(--ps-return-scale);\r\n    opacity: 0 !important;\r\n  }\r\n\r\n  \/* Only the recycled card is snapped into place; its neighbors never blink. *\/\r\n  .ps-card-carousel__card.is-repositioning,\r\n  .ps-card-carousel__card.is-repositioning .ps-card-carousel__depth {\r\n    transition: none !important;\r\n  }\r\n\r\n  .ps-card-carousel.no-transition .ps-card-carousel__card,\r\n  .ps-card-carousel.no-transition .ps-card-carousel__depth {\r\n    transition: none !important;\r\n  }\r\n\r\n  \/* Four small, accessible indicators stay centered below the artwork. *\/\r\n  .ps-card-carousel__dots {\r\n    position: absolute;\r\n    left: 50%;\r\n    bottom: var(--ps-dots-bottom);\r\n    z-index: 80;\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    gap: var(--ps-dots-gap);\r\n    width: max-content;\r\n    margin: 0;\r\n    padding: 9px 11px;\r\n    background: transparent;\r\n    opacity: 1;\r\n    transform: translate3d(-50%, 0, 0);\r\n    transition:\r\n      opacity 520ms ease,\r\n      transform 700ms cubic-bezier(0.18, 0.8, 0.2, 1);\r\n  }\r\n\r\n  .ps-card-carousel__dot {\r\n    all: unset;\r\n    box-sizing: border-box !important;\r\n    position: relative;\r\n    display: block;\r\n    flex: 0 0 auto;\r\n    width: var(--ps-dot-size) !important;\r\n    min-width: 0 !important;\r\n    height: var(--ps-dot-size) !important;\r\n    margin: 0 !important;\r\n    padding: 0 !important;\r\n    border: 0 !important;\r\n    border-radius: 999px !important;\r\n    background: var(--ps-dot-color) !important;\r\n    box-shadow: none;\r\n    cursor: pointer;\r\n    transition:\r\n      width 420ms cubic-bezier(0.2, 0.8, 0.2, 1),\r\n      background-color 300ms ease,\r\n      box-shadow 300ms ease,\r\n      transform 240ms ease;\r\n  }\r\n\r\n  .ps-card-carousel__dot::before {\r\n    content: \"\";\r\n    position: absolute;\r\n    inset: -10px;\r\n    border-radius: 999px;\r\n  }\r\n\r\n  .ps-card-carousel__dot:hover {\r\n    transform: scale(1.18);\r\n  }\r\n\r\n  .ps-card-carousel__dot:focus-visible {\r\n    outline: 1px solid rgba(181, 235, 255, 0.9);\r\n    outline-offset: 5px;\r\n  }\r\n\r\n  .ps-card-carousel__dot.is-active {\r\n    width: var(--ps-dot-active-width) !important;\r\n    background: var(--ps-dot-active-color) !important;\r\n    box-shadow: 0 0 13px var(--ps-dot-glow);\r\n  }\r\n\r\n  \/* Cards gather in the middle, then softly fan out from back to front. *\/\r\n  .ps-card-carousel.is-pre-enter .ps-card-carousel__card {\r\n    --ps-x: var(--ps-entrance-x);\r\n    --ps-y: var(--ps-entrance-y);\r\n    --ps-angle: var(--ps-entrance-angle);\r\n    --ps-scale: var(--ps-entrance-scale);\r\n    opacity: 0 !important;\r\n    filter: blur(var(--ps-entrance-blur));\r\n  }\r\n\r\n  .ps-card-carousel.is-pre-enter .ps-card-carousel__dots {\r\n    opacity: 0;\r\n    transform: translate3d(-50%, 12px, 0);\r\n  }\r\n\r\n  .ps-card-carousel.is-entering .ps-card-carousel__card {\r\n    filter: blur(0);\r\n    transition:\r\n      transform var(--ps-entrance-duration) cubic-bezier(0.16, 0.84, 0.22, 1),\r\n      opacity var(--ps-entrance-duration) ease,\r\n      filter var(--ps-entrance-duration) ease;\r\n  }\r\n\r\n  .ps-card-carousel.is-entering .ps-card-carousel__card[data-slot=\"3\"] {\r\n    transition-delay: var(--ps-entrance-delay-back);\r\n  }\r\n\r\n  .ps-card-carousel.is-entering .ps-card-carousel__card[data-slot=\"2\"] {\r\n    transition-delay: var(--ps-entrance-delay-third);\r\n  }\r\n\r\n  .ps-card-carousel.is-entering .ps-card-carousel__card[data-slot=\"1\"] {\r\n    transition-delay: var(--ps-entrance-delay-second);\r\n  }\r\n\r\n  .ps-card-carousel.is-entering .ps-card-carousel__card[data-slot=\"0\"] {\r\n    transition-delay: var(--ps-entrance-delay-front);\r\n  }\r\n\r\n  .ps-card-carousel.is-entering .ps-card-carousel__dots {\r\n    transition-delay: var(--ps-entrance-delay-front);\r\n  }\r\n\r\n  \/* =========================================================\r\n     TABLET CONTROLS\r\n     ========================================================= *\/\r\n  @media (max-width: 1024px) {\r\n    .ps-card-carousel {\r\n      --ps-stage-height: 480px;\r\n      --ps-card-width: 350px;\r\n\r\n      --ps-front-x: -95px;\r\n      --ps-front-y: 35px;\r\n      --ps-front-angle: -20deg;\r\n      --ps-front-scale: 1.3;\r\n\r\n      --ps-second-x: 25px;\r\n      --ps-second-y: 0px;\r\n      --ps-second-angle: -40deg;\r\n      --ps-second-scale: 1;\r\n\r\n      --ps-third-x: 145px;\r\n      --ps-third-y: -37px;\r\n      --ps-third-angle: -70deg;\r\n      --ps-third-scale: 0.8;\r\n\r\n      --ps-back-x: 230px;\r\n      --ps-back-y: -90px;\r\n      --ps-back-angle: -110deg;\r\n      --ps-back-scale: 0.7;\r\n\r\n      --ps-dots-bottom: 28px;\r\n    }\r\n  }\r\n\r\n  \/* =========================================================\r\n     MOBILE CONTROLS\r\n     Greater overlap keeps the complete desktop composition.\r\n     ========================================================= *\/\r\n  @media (max-width: 767px) {\r\n    .ps-card-carousel {\r\n      --ps-stage-height: 260px;\r\n      --ps-card-width: min(60vw, 250px);\r\n      --ps-stack-center-y: 30%;\r\n\r\n      --ps-front-x: -15px;\r\n      --ps-front-y: 42px;\r\n      --ps-front-angle: -20deg;\r\n      --ps-front-scale: 1.5;\r\n\r\n      --ps-second-x: 50px;\r\n      --ps-second-y: 10px;\r\n      --ps-second-angle: -40deg;\r\n      --ps-second-scale: 1.1;\r\n\r\n      --ps-third-x: 80px;\r\n      --ps-third-y: -22px;\r\n      --ps-third-angle: -70deg;\r\n      --ps-third-scale: 0.9;\r\n\r\n      --ps-back-x: 95px;\r\n      --ps-back-y: -60px;\r\n      --ps-back-angle: -110deg;\r\n      --ps-back-scale: 0.7;\r\n\r\n      --ps-second-blur: 1px;\r\n      --ps-third-blur: 2px;\r\n      --ps-back-blur: 3.2px;\r\n      --ps-exit-distance: 112vw;\r\n      --ps-exit-y: 31px;\r\n      --ps-return-drop: 23px;\r\n      --ps-shadow-y: 20px;\r\n      --ps-shadow-blur: 24px;\r\n      --ps-float-up: -5px;\r\n      --ps-hover-lift: -4px;\r\n      --ps-entrance-x: 8px;\r\n      --ps-entrance-y: 28px;\r\n      --ps-entrance-scale: 0.64;\r\n      --ps-dots-bottom: 12px;\r\n      --ps-dots-gap: 9px;\r\n    }\r\n\r\n    \/* Lightweight mobile renderer: composited transform + opacity only. *\/\r\n    .ps-card-carousel__stage {\r\n      perspective: none;\r\n      transform-style: flat;\r\n    }\r\n\r\n    .ps-card-carousel__depth {\r\n      filter: none !important;\r\n      transition: none !important;\r\n    }\r\n\r\n    .ps-card-carousel__image {\r\n      filter: none !important;\r\n      box-shadow: none !important;\r\n    }\r\n\r\n    .ps-card-carousel__glow,\r\n    .ps-card-carousel__shine {\r\n      display: none !important;\r\n      animation: none !important;\r\n    }\r\n\r\n    .ps-card-carousel__float {\r\n      animation: none !important;\r\n      transform: translate3d(0, 0, 0) !important;\r\n    }\r\n\r\n    .ps-card-carousel__tilt {\r\n      transform: translate3d(var(--ps-card-drag-offset), 0, 0) !important;\r\n      transition: none !important;\r\n    }\r\n\r\n    .ps-card-carousel.is-pre-enter .ps-card-carousel__card,\r\n    .ps-card-carousel.is-entering .ps-card-carousel__card {\r\n      filter: none !important;\r\n    }\r\n\r\n    .ps-card-carousel.is-mobile-engine:not(.is-entering) .ps-card-carousel__card {\r\n      transition: none !important;\r\n    }\r\n  }\r\n\r\n  @media (prefers-reduced-motion: reduce) {\r\n    .ps-card-carousel__card,\r\n    .ps-card-carousel__depth,\r\n    .ps-card-carousel__tilt {\r\n      transition-duration: 1ms !important;\r\n    }\r\n\r\n    .ps-card-carousel__float,\r\n    .ps-card-carousel__shine,\r\n    .ps-card-carousel__glow {\r\n      animation: none !important;\r\n    }\r\n  }\r\n<\/style>\r\n\r\n<div class=\"ps-card-carousel is-pre-enter\" data-ps-card-carousel aria-label=\"Featured cards carousel\">\r\n  <div class=\"ps-card-carousel__stage\">\r\n\r\n    <!-- Replace ONLY the URL inside --ps-card-image on each card. -->\r\n    <article\r\n      class=\"ps-card-carousel__card\"\r\n      data-slot=\"0\"\r\n      aria-label=\"Card 1\"\r\n      style=\"--ps-card-image: url('https:\/\/panosky-website-media.b-cdn.net\/Web%20Images%20and%20videos\/Home%20page\/revenue-cards4.png');\"\r\n    >\r\n      <div class=\"ps-card-carousel__depth\">\r\n        <div class=\"ps-card-carousel__float\">\r\n          <div class=\"ps-card-carousel__tilt\">\r\n            <div class=\"ps-card-carousel__visual\">\r\n              <span class=\"ps-card-carousel__glow\"><\/span>\r\n              <span class=\"ps-card-carousel__image\" role=\"img\" aria-label=\"Card 1\"><\/span>\r\n              <span class=\"ps-card-carousel__shine\"><\/span>\r\n            <\/div>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/article>\r\n\r\n    <article\r\n      class=\"ps-card-carousel__card\"\r\n      data-slot=\"1\"\r\n      aria-label=\"Card 2\"\r\n      style=\"--ps-card-image: url('https:\/\/panosky-website-media.b-cdn.net\/Web%20Images%20and%20videos\/Home%20page\/revenue-cards3.png');\"\r\n    >\r\n      <div class=\"ps-card-carousel__depth\">\r\n        <div class=\"ps-card-carousel__float\">\r\n          <div class=\"ps-card-carousel__tilt\">\r\n            <div class=\"ps-card-carousel__visual\">\r\n              <span class=\"ps-card-carousel__glow\"><\/span>\r\n              <span class=\"ps-card-carousel__image\" role=\"img\" aria-label=\"Card 2\"><\/span>\r\n              <span class=\"ps-card-carousel__shine\"><\/span>\r\n            <\/div>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/article>\r\n\r\n    <article\r\n      class=\"ps-card-carousel__card\"\r\n      data-slot=\"2\"\r\n      aria-label=\"Card 3\"\r\n      style=\"--ps-card-image: url('https:\/\/panosky-website-media.b-cdn.net\/Web%20Images%20and%20videos\/Home%20page\/revenue-cards2.png');\"\r\n    >\r\n      <div class=\"ps-card-carousel__depth\">\r\n        <div class=\"ps-card-carousel__float\">\r\n          <div class=\"ps-card-carousel__tilt\">\r\n            <div class=\"ps-card-carousel__visual\">\r\n              <span class=\"ps-card-carousel__glow\"><\/span>\r\n              <span class=\"ps-card-carousel__image\" role=\"img\" aria-label=\"Card 3\"><\/span>\r\n              <span class=\"ps-card-carousel__shine\"><\/span>\r\n            <\/div>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/article>\r\n\r\n    <article\r\n      class=\"ps-card-carousel__card\"\r\n      data-slot=\"3\"\r\n      aria-label=\"Card 4\"\r\n      style=\"--ps-card-image: url('https:\/\/panosky-website-media.b-cdn.net\/Web%20Images%20and%20videos\/Home%20page\/revenue-cards1.png');\"\r\n    >\r\n      <div class=\"ps-card-carousel__depth\">\r\n        <div class=\"ps-card-carousel__float\">\r\n          <div class=\"ps-card-carousel__tilt\">\r\n            <div class=\"ps-card-carousel__visual\">\r\n              <span class=\"ps-card-carousel__glow\"><\/span>\r\n              <span class=\"ps-card-carousel__image\" role=\"img\" aria-label=\"Card 4\"><\/span>\r\n              <span class=\"ps-card-carousel__shine\"><\/span>\r\n            <\/div>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/article>\r\n\r\n    <div class=\"ps-card-carousel__dots\" role=\"group\" aria-label=\"Choose a carousel card\">\r\n      <button class=\"ps-card-carousel__dot is-active\" type=\"button\" data-ps-dot=\"0\" aria-label=\"Show card 1\" aria-current=\"true\"><\/button>\r\n      <button class=\"ps-card-carousel__dot\" type=\"button\" data-ps-dot=\"1\" aria-label=\"Show card 2\" aria-current=\"false\"><\/button>\r\n      <button class=\"ps-card-carousel__dot\" type=\"button\" data-ps-dot=\"2\" aria-label=\"Show card 3\" aria-current=\"false\"><\/button>\r\n      <button class=\"ps-card-carousel__dot\" type=\"button\" data-ps-dot=\"3\" aria-label=\"Show card 4\" aria-current=\"false\"><\/button>\r\n    <\/div>\r\n\r\n  <\/div>\r\n<\/div>\r\n\r\n<script>\r\n(() => {\r\n  'use strict';\r\n\r\n  const carousels = document.querySelectorAll('[data-ps-card-carousel]:not([data-ps-ready])');\r\n\r\n  carousels.forEach((root) => {\r\n    root.setAttribute('data-ps-ready', 'true');\r\n\r\n    const stage = root.querySelector('.ps-card-carousel__stage');\r\n    const cards = [...root.querySelectorAll('.ps-card-carousel__card')];\r\n    const dots = [...root.querySelectorAll('.ps-card-carousel__dot')];\r\n    const interactionRegion = root.closest('.elementor-section, .e-con, section') || root;\r\n    const reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)');\r\n    const mobileViewport = window.matchMedia('(max-width: 767px)');\r\n\r\n    let timer = 0;\r\n    let entranceTimer = 0;\r\n    let pointerFrame = 0;\r\n    let busy = false;\r\n    let entering = false;\r\n    let visible = false;\r\n    let pointerDown = false;\r\n    let dragging = false;\r\n    let activePointerId = null;\r\n    let latestPointer = null;\r\n    let pendingTarget = null;\r\n    let queuedSwipeDirection = null;\r\n    let touchStartX = 0;\r\n    let touchStartY = 0;\r\n\r\n    \/* Let the full-width artwork extend past Elementor widget\/container padding. *\/\r\n    const overflowSelectors = [\r\n      '.elementor-widget-container',\r\n      '.elementor-widget-html',\r\n      '.e-con-inner',\r\n      '.e-con',\r\n      '.elementor-section'\r\n    ];\r\n\r\n    overflowSelectors.forEach((selector) => {\r\n      const parent = root.closest(selector);\r\n      if (parent) parent.style.setProperty('overflow', 'visible', 'important');\r\n    });\r\n\r\n    cards.forEach((card, index) => {\r\n      card.dataset.cardIndex = String(index);\r\n    });\r\n\r\n    const cssTime = (name, fallback) => {\r\n      const raw = getComputedStyle(root).getPropertyValue(name).trim();\r\n      if (!raw) return fallback;\r\n      const value = parseFloat(raw);\r\n      if (!Number.isFinite(value)) return fallback;\r\n      return raw.endsWith('s') && !raw.endsWith('ms') ? value * 1000 : value;\r\n    };\r\n\r\n    const cssValue = (name, fallback = '') => (\r\n      getComputedStyle(root).getPropertyValue(name).trim() || fallback\r\n    );\r\n\r\n    const useMobileEngine = () => (\r\n      mobileViewport.matches && cards.every((card) => typeof card.animate === 'function')\r\n    );\r\n\r\n    const syncRenderer = () => {\r\n      root.classList.toggle('is-mobile-engine', useMobileEngine());\r\n    };\r\n\r\n    syncRenderer();\r\n\r\n    const shouldPause = () => (\r\n      entering ||\r\n      pointerDown ||\r\n      !visible ||\r\n      document.hidden ||\r\n      reducedMotion.matches\r\n    );\r\n\r\n    const clearTimer = () => {\r\n      window.clearTimeout(timer);\r\n      timer = 0;\r\n    };\r\n\r\n    const schedule = (customDelay) => {\r\n      clearTimer();\r\n      if (shouldPause()) return;\r\n      const delay = customDelay ?? cssTime('--ps-autoplay-delay', 1000);\r\n      timer = window.setTimeout(cycle, delay);\r\n    };\r\n\r\n    const currentIndex = () => {\r\n      const front = root.querySelector('.ps-card-carousel__card[data-slot=\"0\"]');\r\n      return Number(front.dataset.cardIndex);\r\n    };\r\n\r\n    const updateDots = (activeIndex = currentIndex()) => {\r\n      dots.forEach((dot, index) => {\r\n        const active = index === activeIndex;\r\n        dot.classList.toggle('is-active', active);\r\n        dot.setAttribute('aria-current', active ? 'true' : 'false');\r\n      });\r\n    };\r\n\r\n    const resetTilts = () => {\r\n      cards.forEach((card) => {\r\n        const tilt = card.querySelector('.ps-card-carousel__tilt');\r\n        tilt.style.setProperty('--ps-rx', '0deg');\r\n        tilt.style.setProperty('--ps-ry', '0deg');\r\n        tilt.style.setProperty('--ps-live-x', '0px');\r\n        tilt.style.setProperty('--ps-live-y', '0px');\r\n      });\r\n    };\r\n\r\n    const finishCycle = () => {\r\n      busy = false;\r\n\r\n      if (visible && root.classList.contains('is-pre-enter')) {\r\n        queuedSwipeDirection = null;\r\n        playEntrance();\r\n        return;\r\n      }\r\n\r\n      if (pointerDown) return;\r\n\r\n      if (queuedSwipeDirection !== null) {\r\n        const direction = queuedSwipeDirection;\r\n        queuedSwipeDirection = null;\r\n        cycle(direction);\r\n        return;\r\n      }\r\n\r\n      if (pendingTarget !== null && pendingTarget !== currentIndex()) {\r\n        schedule(110);\r\n        return;\r\n      }\r\n\r\n      pendingTarget = null;\r\n      schedule();\r\n    };\r\n\r\n    const mobileFrame = (slot, overrides = {}) => {\r\n      const names = ['front', 'second', 'third', 'back'];\r\n      const name = names[slot];\r\n      const x = overrides.x ?? cssValue(`--ps-${name}-x`, '0px');\r\n      const y = overrides.y ?? cssValue(`--ps-${name}-y`, '0px');\r\n      const angle = overrides.angle ?? cssValue(`--ps-${name}-angle`, '0deg');\r\n      const scale = overrides.scale ?? cssValue(`--ps-${name}-scale`, '1');\r\n      const opacity = overrides.opacity ?? (\r\n        slot === 0 ? '1' : cssValue(`--ps-${name}-opacity`, '1')\r\n      );\r\n\r\n      return {\r\n        transform: `translate(-50%, -50%) translate3d(${x}, ${y}, 0) rotateZ(${angle}) scale(${scale})`,\r\n        opacity\r\n      };\r\n    };\r\n\r\n    \/* Web Animations keeps mobile transitions on the transform\/opacity compositor. *\/\r\n    const runMobileCycle = ({ departing, second, third, back, reversing }) => {\r\n      const duration = cssTime('--ps-mobile-cycle-duration', 520);\r\n      const returnDuration = cssTime('--ps-mobile-return-duration', 210);\r\n      const options = {\r\n        duration,\r\n        easing: 'cubic-bezier(0.22, 0.72, 0.18, 1)',\r\n        fill: 'forwards'\r\n      };\r\n\r\n      const assignments = reversing\r\n        ? [[departing, 1], [second, 2], [third, 3], [back, 0]]\r\n        : [[second, 0], [third, 1], [back, 2]];\r\n\r\n      const animations = assignments.map(([card, target]) => (\r\n        card.animate([mobileFrame(Number(card.dataset.slot)), mobileFrame(target)], options)\r\n      ));\r\n\r\n      if (!reversing) {\r\n        const exiting = mobileFrame(0, {\r\n          x: `calc(${cssValue('--ps-front-x', '0px')} - ${cssValue('--ps-exit-distance', '100vw')})`,\r\n          y: `calc(${cssValue('--ps-front-y', '0px')} + ${cssValue('--ps-exit-y', '0px')})`,\r\n          angle: cssValue('--ps-exit-angle', '0deg'),\r\n          scale: '0.91',\r\n          opacity: '0'\r\n        });\r\n\r\n        animations.push(departing.animate([mobileFrame(0), exiting], options));\r\n      }\r\n\r\n      window.setTimeout(() => {\r\n        if (reversing) {\r\n          departing.dataset.slot = '1';\r\n          second.dataset.slot = '2';\r\n          third.dataset.slot = '3';\r\n          back.dataset.slot = '0';\r\n          animations.forEach((animation) => animation.cancel());\r\n          finishCycle();\r\n          return;\r\n        }\r\n\r\n        departing.classList.add('is-returning');\r\n        departing.dataset.slot = '3';\r\n        second.dataset.slot = '0';\r\n        third.dataset.slot = '1';\r\n        back.dataset.slot = '2';\r\n        animations.forEach((animation) => animation.cancel());\r\n\r\n        const returnFrom = mobileFrame(3, {\r\n          y: `calc(${cssValue('--ps-back-y', '0px')} + ${cssValue('--ps-return-drop', '0px')})`,\r\n          scale: cssValue('--ps-return-scale', '0.7'),\r\n          opacity: '0'\r\n        });\r\n\r\n        departing.classList.remove('is-returning');\r\n\r\n        const returnAnimation = departing.animate([returnFrom, mobileFrame(3)], {\r\n          duration: returnDuration,\r\n          easing: 'cubic-bezier(0.2, 0.75, 0.25, 1)',\r\n          fill: 'both'\r\n        });\r\n\r\n        window.setTimeout(() => {\r\n          returnAnimation.cancel();\r\n          finishCycle();\r\n        }, returnDuration);\r\n      }, duration);\r\n    };\r\n\r\n    const cycle = (direction = 1) => {\r\n      clearTimer();\r\n\r\n      const blocked = (\r\n        busy ||\r\n        entering ||\r\n        !visible ||\r\n        document.hidden ||\r\n        reducedMotion.matches ||\r\n        pointerDown\r\n      );\r\n\r\n      if (blocked) {\r\n        if (!pointerDown) schedule(350);\r\n        return;\r\n      }\r\n\r\n      busy = true;\r\n      resetTilts();\r\n\r\n      const departing = root.querySelector('.ps-card-carousel__card[data-slot=\"0\"]');\r\n      const second = root.querySelector('.ps-card-carousel__card[data-slot=\"1\"]');\r\n      const third = root.querySelector('.ps-card-carousel__card[data-slot=\"2\"]');\r\n      const back = root.querySelector('.ps-card-carousel__card[data-slot=\"3\"]');\r\n      const reversing = direction < 0;\r\n\r\n      updateDots(Number((reversing ? back : second).dataset.cardIndex));\r\n\r\n      if (useMobileEngine()) {\r\n        runMobileCycle({ departing, second, third, back, reversing });\r\n        return;\r\n      }\r\n\r\n      const cycleDuration = cssTime('--ps-cycle-duration', 1050);\r\n      const returnDuration = cssTime('--ps-return-duration', 650);\r\n\r\n      root.classList.add(reversing ? 'is-reversing' : 'is-shifting');\r\n\r\n      window.setTimeout(() => {\r\n        if (reversing) {\r\n          departing.dataset.slot = '1';\r\n          second.dataset.slot = '2';\r\n          third.dataset.slot = '3';\r\n          back.dataset.slot = '0';\r\n          root.classList.remove('is-reversing');\r\n        } else {\r\n          departing.classList.add('is-repositioning', 'is-returning');\r\n          departing.dataset.slot = '3';\r\n          second.dataset.slot = '0';\r\n          third.dataset.slot = '1';\r\n          back.dataset.slot = '2';\r\n\r\n          root.classList.remove('is-shifting');\r\n          void departing.offsetWidth;\r\n          departing.classList.remove('is-repositioning');\r\n\r\n          window.requestAnimationFrame(() => {\r\n            window.requestAnimationFrame(() => {\r\n              departing.classList.remove('is-returning');\r\n            });\r\n          });\r\n        }\r\n\r\n        window.setTimeout(\r\n          finishCycle,\r\n          reversing ? Math.min(returnDuration, 150) : returnDuration\r\n        );\r\n      }, cycleDuration);\r\n    };\r\n\r\n    const prepareEntrance = () => {\r\n      window.clearTimeout(entranceTimer);\r\n      entering = false;\r\n      root.classList.add('no-transition', 'is-pre-enter');\r\n      root.classList.remove('is-entering');\r\n      void root.offsetWidth;\r\n      root.classList.remove('no-transition');\r\n    };\r\n\r\n    const playEntrance = () => {\r\n      clearTimer();\r\n      window.clearTimeout(entranceTimer);\r\n\r\n      if (!visible) return;\r\n\r\n      if (reducedMotion.matches) {\r\n        root.classList.remove('is-pre-enter', 'is-entering');\r\n        entering = false;\r\n        return;\r\n      }\r\n\r\n      entering = true;\r\n      root.classList.add('no-transition', 'is-pre-enter');\r\n      root.classList.remove('is-entering');\r\n      void root.offsetWidth;\r\n      root.classList.remove('no-transition');\r\n\r\n      window.requestAnimationFrame(() => {\r\n        if (!visible) {\r\n          entering = false;\r\n          return;\r\n        }\r\n\r\n        root.classList.add('is-entering');\r\n        root.classList.remove('is-pre-enter');\r\n\r\n        const duration = cssTime('--ps-entrance-duration', 1050);\r\n        const lastDelay = cssTime('--ps-entrance-delay-front', 280);\r\n\r\n        entranceTimer = window.setTimeout(() => {\r\n          root.classList.remove('is-entering');\r\n          entering = false;\r\n          schedule();\r\n        }, duration + lastDelay + 70);\r\n      });\r\n    };\r\n\r\n    dots.forEach((dot) => {\r\n      dot.addEventListener('click', () => {\r\n        const target = Number(dot.dataset.psDot);\r\n\r\n        if (target === currentIndex()) {\r\n          pendingTarget = null;\r\n          schedule();\r\n          return;\r\n        }\r\n\r\n        pendingTarget = target;\r\n        if (!busy && !entering) cycle();\r\n      });\r\n    });\r\n\r\n    \/* The whole Elementor section influences every card; closer cards react more. *\/\r\n    const applySectionPointer = () => {\r\n      pointerFrame = 0;\r\n      if (!latestPointer || pointerDown || busy || entering) return;\r\n\r\n      const region = root.getBoundingClientRect();\r\n      const pointerX = latestPointer.x;\r\n      const pointerY = latestPointer.y;\r\n      const maxTilt = parseFloat(getComputedStyle(root).getPropertyValue('--ps-hover-tilt')) || 5;\r\n      const maxX = parseFloat(getComputedStyle(root).getPropertyValue('--ps-section-parallax-x')) || 15;\r\n      const maxY = parseFloat(getComputedStyle(root).getPropertyValue('--ps-section-parallax-y')) || 11;\r\n      const regionWidth = Math.max(region.width, 1);\r\n      const regionHeight = Math.max(region.height, 1);\r\n\r\n      cards.forEach((card) => {\r\n        const rect = card.getBoundingClientRect();\r\n        const centerX = rect.left + rect.width \/ 2;\r\n        const centerY = rect.top + rect.height \/ 2;\r\n        const nx = Math.max(-1, Math.min(1, (pointerX - centerX) \/ (regionWidth * 0.42)));\r\n        const ny = Math.max(-1, Math.min(1, (pointerY - centerY) \/ (regionHeight * 0.48)));\r\n        const distance = Math.hypot(pointerX - centerX, pointerY - centerY);\r\n        const radius = Math.max(rect.width, rect.height) * 1.75;\r\n        const proximity = Math.max(0.16, 1 - distance \/ Math.max(radius, 1));\r\n        const depthWeight = [1, 0.79, 0.62, 0.48][Number(card.dataset.slot)] || 0.48;\r\n        const influence = proximity * depthWeight;\r\n        const tilt = card.querySelector('.ps-card-carousel__tilt');\r\n\r\n        tilt.style.setProperty('--ps-rx', `${(-ny * maxTilt * influence).toFixed(2)}deg`);\r\n        tilt.style.setProperty('--ps-ry', `${(nx * maxTilt * influence).toFixed(2)}deg`);\r\n        tilt.style.setProperty('--ps-live-x', `${(nx * maxX * influence).toFixed(2)}px`);\r\n        tilt.style.setProperty('--ps-live-y', `${(ny * maxY * influence).toFixed(2)}px`);\r\n      });\r\n    };\r\n\r\n    interactionRegion.addEventListener('pointermove', (event) => {\r\n      if (event.pointerType === 'touch' || pointerDown) return;\r\n      latestPointer = { x: event.clientX, y: event.clientY };\r\n      if (!pointerFrame) pointerFrame = window.requestAnimationFrame(applySectionPointer);\r\n    }, { passive: true });\r\n\r\n    interactionRegion.addEventListener('pointerleave', () => {\r\n      latestPointer = null;\r\n      if (pointerFrame && window.cancelAnimationFrame) {\r\n        window.cancelAnimationFrame(pointerFrame);\r\n        pointerFrame = 0;\r\n      }\r\n      resetTilts();\r\n    }, { passive: true });\r\n\r\n    const clearDrag = () => {\r\n      dragging = false;\r\n      activePointerId = null;\r\n      root.classList.remove('is-dragging');\r\n      root.style.setProperty('--ps-drag-offset', '0px');\r\n      root.style.setProperty('--ps-drag-offset-secondary', '0px');\r\n    };\r\n\r\n    \/* One horizontal gesture anywhere in this HTML always switches exactly one card. *\/\r\n    root.addEventListener('pointerdown', (event) => {\r\n      if (event.pointerType === 'mouse' && event.button !== 0) return;\r\n      if (event.target.closest('.ps-card-carousel__dot')) return;\r\n      if (entering) return;\r\n\r\n      pointerDown = true;\r\n      dragging = false;\r\n      activePointerId = event.pointerId;\r\n      touchStartX = event.clientX;\r\n      touchStartY = event.clientY;\r\n      clearTimer();\r\n    }, { passive: true });\r\n\r\n    root.addEventListener('pointermove', (event) => {\r\n      if (!pointerDown || event.pointerId !== activePointerId) return;\r\n\r\n      const dx = event.clientX - touchStartX;\r\n      const dy = event.clientY - touchStartY;\r\n\r\n      if (!dragging && Math.abs(dx) > 8 && Math.abs(dx) > Math.abs(dy) * 1.15) {\r\n        dragging = true;\r\n        root.classList.add('is-dragging');\r\n        if (root.setPointerCapture) root.setPointerCapture(event.pointerId);\r\n      }\r\n\r\n      if (!dragging) return;\r\n      if (event.cancelable) event.preventDefault();\r\n\r\n      const follow = Math.max(-95, Math.min(95, dx * 0.34));\r\n      root.style.setProperty('--ps-drag-offset', `${follow.toFixed(1)}px`);\r\n      root.style.setProperty('--ps-drag-offset-secondary', `${(follow * 0.34).toFixed(1)}px`);\r\n    }, { passive: false });\r\n\r\n    root.addEventListener('pointerup', (event) => {\r\n      if (!pointerDown || event.pointerId !== activePointerId) return;\r\n\r\n      const dx = event.clientX - touchStartX;\r\n      const dy = event.clientY - touchStartY;\r\n      const threshold = parseFloat(getComputedStyle(root).getPropertyValue('--ps-drag-threshold')) || 28;\r\n      const shouldSwipe = dragging && Math.abs(dx) > threshold && Math.abs(dx) > Math.abs(dy) * 1.08;\r\n\r\n      pointerDown = false;\r\n      clearDrag();\r\n\r\n      if (shouldSwipe) {\r\n        const direction = dx > 0 ? -1 : 1;\r\n        pendingTarget = null;\r\n        clearTimer();\r\n\r\n        if (busy) queuedSwipeDirection = direction;\r\n        else cycle(direction);\r\n      } else if (!busy) {\r\n        schedule(450);\r\n      }\r\n    }, { passive: true });\r\n\r\n    root.addEventListener('pointercancel', () => {\r\n      pointerDown = false;\r\n      clearDrag();\r\n      if (!busy) schedule(450);\r\n    }, { passive: true });\r\n\r\n    document.addEventListener('visibilitychange', () => {\r\n      if (document.hidden) clearTimer();\r\n      else schedule(500);\r\n    });\r\n\r\n    if ('IntersectionObserver' in window) {\r\n      const observer = new IntersectionObserver((entries) => {\r\n        const entry = entries[0];\r\n        const arriving = entry.isIntersecting && entry.intersectionRatio >= 0.16;\r\n        const departing = !entry.isIntersecting || entry.intersectionRatio <= 0.04;\r\n\r\n        if (arriving && !visible) {\r\n          visible = true;\r\n          if (!busy) playEntrance();\r\n          return;\r\n        }\r\n\r\n        if (departing && visible) {\r\n          visible = false;\r\n          clearTimer();\r\n          prepareEntrance();\r\n        }\r\n      }, { threshold: [0, 0.04, 0.16] });\r\n\r\n      observer.observe(root);\r\n    } else {\r\n      visible = true;\r\n      playEntrance();\r\n    }\r\n\r\n    const motionChange = () => {\r\n      if (reducedMotion.matches) {\r\n        clearTimer();\r\n        window.clearTimeout(entranceTimer);\r\n        root.classList.remove('is-pre-enter', 'is-entering');\r\n        entering = false;\r\n      } else if (visible) {\r\n        playEntrance();\r\n      }\r\n    };\r\n\r\n    if (reducedMotion.addEventListener) {\r\n      reducedMotion.addEventListener('change', motionChange);\r\n    } else if (reducedMotion.addListener) {\r\n      reducedMotion.addListener(motionChange);\r\n    }\r\n\r\n    if (mobileViewport.addEventListener) {\r\n      mobileViewport.addEventListener('change', syncRenderer);\r\n    } else if (mobileViewport.addListener) {\r\n      mobileViewport.addListener(syncRenderer);\r\n    }\r\n\r\n    updateDots();\r\n  });\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\n<\/div>\n<div class=\"elementor-element elementor-element-3852b52 e-con e-atomic-element e-flexbox-base e-3852b52-c675f33 \" data-id=\"3852b52\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"3852b52\" data-e-type=\"e-flexbox\" data-id=\"3852b52\">\n    <div class=\"elementor-element elementor-element-9833be0 e-con-full e-flex e-con e-parent\" data-id=\"9833be0\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7d26ffc elementor-widget elementor-widget-html\" data-id=\"7d26ffc\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!--\r\n  PANOSKY \u2014 ENGINEERED FOR EVERY TEAM (Elementor HTML widget snippet)\r\n  Version 2.15\r\n\r\n  Paste this entire file into ONE Elementor HTML widget.\r\n-->\r\n\r\n<style>\r\n\/* ==========================================================\r\n   PANOSKY EASY CONTROL PANEL \u2014 EDIT ONLY THIS BLOCK\r\n\r\n   Your Elementor Global Typography IDs:\r\n   primary  = Primary (28)       secondary = Secondary (22)\r\n   text     = Body Text (18)     accent    = Accent Text (17)\r\n   34f8ef0  = Design Title (60)\r\n   85fbefb  = Hero Headline (50)\r\n   abebd36  = Accent Text Small (16)\r\n   10126b4  = Design Title mid (40)\r\n   3b5881b  = Extra Small (12)\r\n\r\n   Your Elementor Global Color IDs:\r\n   541fa18  = White              7655478 = Blue\r\n   text     = Body text          9670681 = Brand dark blue\r\n========================================================== *\/\r\n#panosky-team-engine-v2 {\r\n    \/* SECTION BACKGROUND \u2014 manual colors for the exact dark gradient. *\/\r\n    --ps-bg-a: #010b25;\r\n    --ps-bg-b: #00142f;\r\n    --ps-bg-c: #010c28;\r\n\r\n    \/* ======================================================\r\n       TEXT + UI COLORS \u2014 change any line independently.\r\n       You can use an Elementor global color:\r\n       var(--e-global-color-7655478, #009fff)\r\n       or a normal color: #009fff\r\n    ====================================================== *\/\r\n    --ps-color-main-heading: var(--e-global-color-541fa18, #ffffff);\r\n    --ps-color-main-accent: var(--e-global-color-7655478, #009fff);\r\n    --ps-color-department-heading: var(--e-global-color-541fa18, #ffffff);\r\n    --ps-color-body: var(--e-global-color-text, rgba(255, 255, 255, 0.6));\r\n    --ps-color-overline: var(--e-global-color-7655478, #009fff);\r\n    --ps-color-department-label: var(--e-global-color-7655478, #009fff);\r\n    --ps-color-number: var(--e-global-color-7655478, #009fff);\r\n    --ps-color-tag: var(--e-global-color-7655478, #009fff);\r\n    --ps-color-cta: var(--e-global-color-7655478, #009fff);\r\n    --ps-color-icon: var(--e-global-color-7655478, #009fff);\r\n    --ps-color-icon-active: var(--e-global-color-541fa18, #ffffff);\r\n\r\n    \/* Shared technical color aliases used by borders and animation. *\/\r\n    --ps-white: var(--ps-color-main-heading);\r\n    --ps-muted: var(--ps-color-body);\r\n    --ps-blue: var(--ps-color-department-label);\r\n    --ps-cyan: var(--ps-color-cta);\r\n\r\n    \/* ======================================================\r\n       ELEMENTOR GLOBAL TYPOGRAPHY BRIDGE\r\n\r\n       Main heading       \u2192 Design Title      (34f8ef0 \/ 60px)\r\n       Department heading \u2192 Primary           (primary \/ 28px)\r\n       Paragraph copy     \u2192 Body Text         (text \/ 18px)\r\n       Labels \/ UI        \u2192 Accent Text Small (abebd36 \/ 16px)\r\n       Boxed tags         \u2192 Extra Small       (3b5881b \/ 12px)\r\n       CTA                \u2192 Accent Text       (accent \/ 17px)\r\n\r\n       To switch a sector to another global style, replace the\r\n       ID in every line of that small group. Example: replace\r\n       34f8ef0 with 85fbefb to use Hero Headline instead.\r\n    ====================================================== *\/\r\n\r\n    \/* Main display heading *\/\r\n    --ps-display-family: var(--e-global-typography-34f8ef0-font-family, inherit);\r\n    --ps-display-size: var(--e-global-typography-34f8ef0-font-size, 60px);\r\n    --ps-display-weight: var(--e-global-typography-34f8ef0-font-weight, 700);\r\n    --ps-display-line-height: var(--e-global-typography-34f8ef0-line-height, 65px);\r\n    --ps-display-letter-spacing: var(--e-global-typography-34f8ef0-letter-spacing);\r\n    --ps-display-style: var(--e-global-typography-34f8ef0-font-style, normal);\r\n    --ps-display-transform: var(--e-global-typography-34f8ef0-text-transform, none);\r\n\r\n    \/* Department headings \u2014 Elementor Primary *\/\r\n    --ps-subheading-family: var(--e-global-typography-primary-font-family, inherit);\r\n    --ps-subheading-size: var(--e-global-typography-primary-font-size, 28px);\r\n    --ps-subheading-weight: var(--e-global-typography-primary-font-weight, 700);\r\n    --ps-subheading-line-height: var(--e-global-typography-primary-line-height, 1.2em);\r\n    --ps-subheading-letter-spacing: var(--e-global-typography-primary-letter-spacing, -0.5px);\r\n    --ps-subheading-style: var(--e-global-typography-primary-font-style, normal);\r\n    --ps-subheading-transform: var(--e-global-typography-primary-text-transform, none);\r\n\r\n    \/* Paragraphs and descriptive copy *\/\r\n    --ps-body-family: var(--e-global-typography-text-font-family, inherit);\r\n    --ps-body-size: var(--e-global-typography-text-font-size, 18px);\r\n    --ps-card-body-size: var(--e-global-typography-text-font-size, 15px);\r\n    --ps-body-weight: var(--e-global-typography-text-font-weight, 400);\r\n    --ps-body-line-height: var(--e-global-typography-text-line-height, 1.7);\r\n    --ps-card-body-line-height: var(--e-global-typography-text-line-height, 1.55);\r\n    --ps-body-letter-spacing: var(--e-global-typography-text-letter-spacing, normal);\r\n    --ps-body-style: var(--e-global-typography-text-font-style, normal);\r\n    --ps-body-transform: var(--e-global-typography-text-text-transform, none);\r\n\r\n    \/* Design titles, labels, numbers, tags and CTA *\/\r\n    --ps-ui-family: var(--e-global-typography-abebd36-font-family, inherit);\r\n    --ps-ui-weight: var(--e-global-typography-abebd36-font-weight, 400);\r\n    --ps-ui-line-height: var(--e-global-typography-abebd36-line-height, 1em);\r\n    --ps-ui-letter-spacing: var(--e-global-typography-abebd36-letter-spacing, 0px);\r\n    --ps-ui-style: var(--e-global-typography-abebd36-font-style, normal);\r\n    --ps-ui-transform: var(--e-global-typography-abebd36-text-transform, capitalize);\r\n    --ps-overline-size: var(--e-global-typography-abebd36-font-size, 16px);\r\n    --ps-label-size: var(--e-global-typography-abebd36-font-size, 16px);\r\n    --ps-number-size: var(--e-global-typography-abebd36-font-size, 16px);\r\n\r\n    \/* Boxed benefit tags \u2014 Elementor Extra Small *\/\r\n    --ps-tag-family: var(--e-global-typography-3b5881b-font-family, inherit);\r\n    --ps-tag-size: var(--e-global-typography-3b5881b-font-size, 12px);\r\n    --ps-tag-weight: var(--e-global-typography-3b5881b-font-weight, 400);\r\n    --ps-tag-line-height: var(--e-global-typography-3b5881b-line-height, 1em);\r\n    --ps-tag-letter-spacing: var(--e-global-typography-3b5881b-letter-spacing, 0px);\r\n    --ps-tag-style: var(--e-global-typography-3b5881b-font-style, normal);\r\n    --ps-tag-transform: var(--e-global-typography-3b5881b-text-transform, none);\r\n\r\n    \/* CTA uses the standard Accent Text global style. *\/\r\n    --ps-cta-family: var(--e-global-typography-accent-font-family, inherit);\r\n    --ps-cta-size: var(--e-global-typography-accent-font-size, 17px);\r\n    --ps-cta-weight: var(--e-global-typography-accent-font-weight, 400);\r\n    --ps-cta-line-height: var(--e-global-typography-accent-line-height, 1em);\r\n    --ps-cta-letter-spacing: var(--e-global-typography-accent-letter-spacing, 0px);\r\n    --ps-cta-style: var(--e-global-typography-accent-font-style, normal);\r\n    --ps-cta-transform: var(--e-global-typography-accent-text-transform, capitalize);\r\n\r\n    \/* CARD + CONNECTOR COLORS \u2014 manual visual-effect controls. *\/\r\n    --ps-line: rgba(100, 174, 255, 0.34);\r\n    --ps-card: rgba(3, 22, 52, 0.5);\r\n    --ps-card-active: rgba(6, 32, 70, 0.72);\r\n\r\n    \/* DESKTOP CONTENT RHYTHM \u2014 consistent spacing within every card. *\/\r\n    --ps-gap-label-title: 6px;\r\n    --ps-gap-title-copy: 6px;\r\n    --ps-gap-copy-tags: 10px;\r\n\r\n    \/* ================= END EASY CONTROL PANEL ================= *\/\r\n\r\n    position: relative;\r\n    isolation: isolate;\r\n    width: 100%;\r\n    overflow: hidden;\r\n    color: var(--ps-white);\r\n    background:\r\n        radial-gradient(ellipse 25% 82% at 40% 49%, rgba(8, 91, 210, 0.34) 0%, rgba(4, 53, 127, 0.16) 38%, transparent 72%),\r\n        radial-gradient(circle at 78% 48%, rgba(7, 54, 117, 0.09), transparent 42%),\r\n        linear-gradient(135deg, var(--ps-bg-a) 0%, var(--ps-bg-b) 54%, var(--ps-bg-c) 100%);\r\n    font-family: inherit;\r\n}\r\n\r\n#panosky-team-engine-v2,\r\n#panosky-team-engine-v2 *,\r\n#panosky-team-engine-v2 *::before,\r\n#panosky-team-engine-v2 *::after {\r\n    box-sizing: border-box;\r\n}\r\n\r\n\/* Prevent Elementor\/theme typography and button rules from altering the component. *\/\r\n#panosky-team-engine-v2 h2,\r\n#panosky-team-engine-v2 p,\r\n#panosky-team-engine-v2 ul {\r\n    margin: 0;\r\n    padding: 0;\r\n}\r\n\r\n#panosky-team-engine-v2 button {\r\n    margin: 0;\r\n    padding: 0;\r\n    color: inherit;\r\n    font: inherit;\r\n    text-align: left;\r\n    border: 0;\r\n    border-radius: 0;\r\n    outline: 0;\r\n    background: transparent;\r\n    box-shadow: none;\r\n    appearance: none;\r\n}\r\n\r\n#panosky-team-engine-v2 a {\r\n    font: inherit;\r\n    text-decoration: none;\r\n}\r\n\r\n#panosky-team-engine-v2 a:hover,\r\n#panosky-team-engine-v2 a:focus {\r\n    text-decoration: none;\r\n}\r\n\r\n#panosky-team-engine-v2 .ps-shell {\r\n    position: relative;\r\n    z-index: 2;\r\n    display: grid;\r\n    grid-template-columns: 470px 120px minmax(0, 1fr);\r\n    column-gap: 26px;\r\n    align-items: stretch;\r\n    width: 100%;\r\n    max-width: 1400px;\r\n    margin: 0 auto;\r\n    padding: 100px 48px;\r\n}\r\n\r\n\/* ==========================================================\r\n   INTRO\r\n========================================================== *\/\r\n#panosky-team-engine-v2 .ps-intro {\r\n    align-self: center;\r\n    min-width: 0;\r\n}\r\n\r\n#panosky-team-engine-v2 .ps-eyebrow {\r\n    position: relative;\r\n    margin-bottom: 58px;\r\n    color: var(--ps-color-overline);\r\n    font-size: 13px;\r\n    font-weight: 650;\r\n    line-height: 1.4;\r\n    letter-spacing: 0.23em;\r\n}\r\n\r\n#panosky-team-engine-v2 .ps-eyebrow::after {\r\n    content: \"\";\r\n    position: absolute;\r\n    bottom: -21px;\r\n    left: 0;\r\n    width: 39px;\r\n    height: 2px;\r\n    background: var(--ps-color-cta);\r\n    box-shadow: 0 0 13px rgba(41, 200, 255, 0.44);\r\n}\r\n\r\n#panosky-team-engine-v2 .ps-title {\r\n    color: var(--ps-color-main-heading);\r\n    font-size: 66px;\r\n    font-weight: 450;\r\n    line-height: 1;\r\n    letter-spacing: -0.045em;\r\n}\r\n\r\n#panosky-team-engine-v2 .ps-title-line,\r\n#panosky-team-engine-v2 .ps-title-accent {\r\n    display: block;\r\n    white-space: nowrap;\r\n}\r\n\r\n#panosky-team-engine-v2 .ps-title-accent {\r\n    margin-top: 7px;\r\n    color: var(--ps-color-main-accent);\r\n}\r\n\r\n#panosky-team-engine-v2 .ps-description {\r\n    max-width: 450px;\r\n    margin-top: 31px;\r\n    color: var(--ps-color-body);\r\n    font-size: 18px;\r\n    font-weight: 400;\r\n    line-height: 1.7;\r\n}\r\n\r\n#panosky-team-engine-v2 .ps-inline-cta {\r\n    display: inline-flex;\r\n    align-items: center;\r\n    gap: 15px;\r\n    margin-top: 37px;\r\n    padding: 6px 0 9px;\r\n    color: var(--ps-color-cta);\r\n    font-size: 16px;\r\n    font-weight: 600;\r\n    line-height: 1.3;\r\n    border-bottom: 1px solid var(--ps-color-cta);\r\n    transition: gap 240ms ease, color 240ms ease, border-color 240ms ease;\r\n}\r\n\r\n#panosky-team-engine-v2 .ps-inline-cta:hover,\r\n#panosky-team-engine-v2 .ps-inline-cta:focus-visible {\r\n    gap: 22px;\r\n    color: #b8efff;\r\n    border-color: #b8efff;\r\n}\r\n\r\n\/* ==========================================================\r\n   DESKTOP SPATIAL CORE\r\n   Node positions and branch widths are measured in JavaScript.\r\n========================================================== *\/\r\n#panosky-team-engine-v2 .ps-core-desktop {\r\n    position: relative;\r\n    align-self: stretch;\r\n    min-height: 560px;\r\n}\r\n\r\n#panosky-team-engine-v2 .ps-core-rail {\r\n    position: absolute;\r\n    top: 4px;\r\n    bottom: 4px;\r\n    left: 50%;\r\n    width: 54px;\r\n    transform: translateX(-50%);\r\n    overflow: visible;\r\n    border: 1px solid rgba(91, 173, 255, 0.42);\r\n    border-radius: 29px;\r\n    background:\r\n        linear-gradient(90deg, rgba(0, 18, 47, 0.56), rgba(14, 72, 151, 0.28) 50%, rgba(0, 17, 44, 0.58));\r\n    box-shadow:\r\n        inset 0 0 18px rgba(33, 127, 255, 0.12),\r\n        0 0 28px rgba(17, 105, 232, 0.13);\r\n}\r\n\r\n#panosky-team-engine-v2 .ps-core-rail::before {\r\n    content: \"\";\r\n    position: absolute;\r\n    z-index: 0;\r\n    top: 25px;\r\n    bottom: 25px;\r\n    left: 50%;\r\n    width: 1px;\r\n    transform: translateX(-50%);\r\n    background: repeating-linear-gradient(\r\n        to bottom,\r\n        rgba(123, 194, 255, 0.54) 0,\r\n        rgba(123, 194, 255, 0.54) 2px,\r\n        transparent 2px,\r\n        transparent 7px\r\n    );\r\n    filter: drop-shadow(0 0 4px rgba(46, 168, 255, 0.48));\r\n}\r\n\r\n#panosky-team-engine-v2 .ps-core-rail::after {\r\n    content: \"\";\r\n    position: absolute;\r\n    z-index: 0;\r\n    inset: 5px;\r\n    border-radius: 24px;\r\n    background: linear-gradient(90deg, transparent, rgba(57, 142, 255, 0.07), transparent);\r\n    pointer-events: none;\r\n}\r\n\r\n#panosky-team-engine-v2 .ps-core-cap {\r\n    position: absolute;\r\n    left: 50%;\r\n    width: 11px;\r\n    height: 11px;\r\n    transform: translateX(-50%);\r\n    border: 2px solid #d8f0ff;\r\n    border-radius: 50%;\r\n    background: var(--ps-blue);\r\n    box-shadow: 0 0 8px var(--ps-cyan), 0 0 21px rgba(41, 200, 255, 0.6);\r\n    z-index: 2;\r\n}\r\n\r\n#panosky-team-engine-v2 .ps-core-cap--top { top: 11px; }\r\n#panosky-team-engine-v2 .ps-core-cap--bottom { bottom: 11px; }\r\n\r\n#panosky-team-engine-v2 .ps-core-node {\r\n    --branch-width: 55px;\r\n    position: absolute;\r\n    left: 100%;\r\n    width: 6px;\r\n    height: 6px;\r\n    transform: translate(-50%, -50%);\r\n    border: 1px solid rgba(215, 242, 255, 0.84);\r\n    border-radius: 50%;\r\n    background: #80d9ff;\r\n    box-shadow: 0 0 5px rgba(41, 200, 255, 0.55);\r\n    z-index: 3;\r\n    transition: background 240ms ease, box-shadow 240ms ease, transform 240ms ease;\r\n}\r\n\r\n\/* Safe desktop positions before JavaScript measures the exact card centres.\r\n   The script replaces these values with pixel-perfect positions when ready. *\/\r\n#panosky-team-engine-v2 .ps-core-node[data-node=\"0\"] { top: 16%; }\r\n#panosky-team-engine-v2 .ps-core-node[data-node=\"1\"] { top: 50%; }\r\n#panosky-team-engine-v2 .ps-core-node[data-node=\"2\"] { top: 84%; }\r\n\r\n#panosky-team-engine-v2 .ps-core-node::after {\r\n    content: \"\";\r\n    position: absolute;\r\n    top: 50%;\r\n    left: 3px;\r\n    width: calc(var(--branch-width) - 3px);\r\n    height: 1px;\r\n    transform: translateY(-50%);\r\n    background: linear-gradient(90deg, rgba(108, 190, 255, 0.72), var(--ps-line));\r\n    transition: background 240ms ease, box-shadow 240ms ease;\r\n}\r\n\r\n#panosky-team-engine-v2 .ps-core-node::before {\r\n    content: \"\";\r\n    position: absolute;\r\n    top: 50%;\r\n    left: calc(3px + var(--branch-width) - 9px);\r\n    width: 18px;\r\n    height: 18px;\r\n    transform: translateY(-50%);\r\n    border: 2px solid rgba(126, 190, 255, 0.72);\r\n    border-radius: 50%;\r\n    background: #164477;\r\n    box-shadow:\r\n        inset 0 0 7px rgba(83, 175, 255, 0.16),\r\n        0 0 0 4px rgba(35, 127, 230, 0.07);\r\n    transition: background 240ms ease, border-color 240ms ease, box-shadow 240ms ease;\r\n}\r\n\r\n#panosky-team-engine-v2 .ps-core-node.is-active {\r\n    border-color: #e6f9ff;\r\n    background: #ecfbff;\r\n    transform: translate(-50%, -50%) scale(1.12);\r\n    box-shadow:\r\n        0 0 5px var(--ps-cyan),\r\n        0 0 11px rgba(41, 200, 255, 0.72);\r\n}\r\n\r\n#panosky-team-engine-v2 .ps-core-node.is-active::after {\r\n    background: rgba(78, 207, 255, 0.96);\r\n    box-shadow: 0 0 9px rgba(41, 200, 255, 0.62);\r\n}\r\n\r\n#panosky-team-engine-v2 .ps-core-node.is-active::before {\r\n    border-color: #dff7ff;\r\n    background: #eefcff;\r\n    box-shadow:\r\n        inset 0 0 7px rgba(64, 170, 255, 0.24),\r\n        0 0 0 5px rgba(41, 157, 255, 0.11),\r\n        0 0 8px var(--ps-cyan),\r\n        0 0 20px rgba(41, 200, 255, 0.76);\r\n}\r\n\r\n#panosky-team-engine-v2 .ps-core-mobile { display: none; }\r\n\r\n\/* ==========================================================\r\n   DEPARTMENTS\r\n========================================================== *\/\r\n#panosky-team-engine-v2 .ps-list {\r\n    display: flex;\r\n    flex-direction: column;\r\n    justify-content: center;\r\n    gap: 14px;\r\n    min-width: 0;\r\n}\r\n\r\n#panosky-team-engine-v2 .ps-department {\r\n    --ps-card-pad-x: 27px;\r\n    position: relative;\r\n    flex: 0 0 auto;\r\n    min-width: 0;\r\n    padding: 23px 27px 22px;\r\n    overflow: hidden;\r\n    border: 1px solid transparent;\r\n    border-radius: 16px;\r\n    background: transparent;\r\n    transition: border-color 260ms ease, background 260ms ease, box-shadow 260ms ease;\r\n}\r\n\r\n@media (min-width: 1025px) {\r\n    #panosky-team-engine-v2 .ps-department + .ps-department::before {\r\n        content: \"\";\r\n        position: absolute;\r\n        top: -8px;\r\n        right: 0;\r\n        left: 0;\r\n        height: 1px;\r\n        background: rgba(112, 170, 238, 0.17);\r\n    }\r\n}\r\n\r\n#panosky-team-engine-v2 .ps-department.is-active {\r\n    border-color: rgba(101, 174, 255, 0.5);\r\n    background:\r\n        radial-gradient(circle at 97% 100%, rgba(28, 174, 255, 0.15), transparent 29%),\r\n        radial-gradient(circle at 8% 10%, rgba(49, 124, 226, 0.1), transparent 34%),\r\n        linear-gradient(135deg, rgba(9, 42, 87, 0.78), var(--ps-card-active));\r\n    box-shadow:\r\n        inset 0 -1px 0 rgba(65, 210, 255, 0.7),\r\n        inset 0 1px 0 rgba(144, 194, 255, 0.08),\r\n        0 15px 46px rgba(0, 5, 24, 0.24);\r\n}\r\n\r\n\/* CSS hover fallback: keeps desktop\/tablet interaction responsive even while\r\n   Elementor is refreshing or delaying the component JavaScript. *\/\r\n@media (min-width: 768px) and (hover: hover) {\r\n    #panosky-team-engine-v2 .ps-list:hover .ps-department.is-active:not(:hover) {\r\n        border-color: transparent;\r\n        background: transparent;\r\n        box-shadow: none;\r\n    }\r\n\r\n    #panosky-team-engine-v2 .ps-department:hover {\r\n        border-color: rgba(101, 174, 255, 0.5);\r\n        background:\r\n            radial-gradient(circle at 97% 100%, rgba(28, 174, 255, 0.15), transparent 29%),\r\n            radial-gradient(circle at 8% 10%, rgba(49, 124, 226, 0.1), transparent 34%),\r\n            linear-gradient(135deg, rgba(9, 42, 87, 0.78), var(--ps-card-active));\r\n        box-shadow:\r\n            inset 0 -1px 0 rgba(65, 210, 255, 0.7),\r\n            inset 0 1px 0 rgba(144, 194, 255, 0.08),\r\n            0 15px 46px rgba(0, 5, 24, 0.24);\r\n    }\r\n\r\n    #panosky-team-engine-v2 .ps-list:hover .ps-department.is-active:not(:hover) .ps-icon {\r\n        color: var(--ps-color-icon);\r\n        border-color: rgba(121, 183, 255, 0.68);\r\n        box-shadow:\r\n            inset 0 0 25px rgba(31, 126, 255, 0.08),\r\n            0 0 20px rgba(35, 137, 255, 0.08);\r\n    }\r\n\r\n    #panosky-team-engine-v2 .ps-department:hover .ps-icon {\r\n        color: var(--ps-color-icon-active);\r\n        border-color: rgba(81, 205, 255, 0.92);\r\n        box-shadow:\r\n            inset 0 0 23px rgba(31, 126, 255, 0.13),\r\n            0 0 18px rgba(41, 200, 255, 0.11);\r\n    }\r\n}\r\n\r\n#panosky-team-engine-v2 .ps-trigger {\r\n    display: grid;\r\n    grid-template-columns: minmax(0, 1fr) 22px;\r\n    grid-template-areas:\r\n        \"label chevron\"\r\n        \"title chevron\";\r\n    column-gap: 17px;\r\n    row-gap: var(--ps-gap-label-title);\r\n    align-items: center;\r\n    align-content: center;\r\n    width: 100%;\r\n    min-height: 112px;\r\n    min-width: 0;\r\n    padding: 0 0 0 129px;\r\n    white-space: normal !important;\r\n    cursor: pointer;\r\n}\r\n\r\n\/* Lock the trigger geometry in every interaction state. This prevents\r\n   Elementor\/theme button-hover rules from removing its desktop offset. *\/\r\n#panosky-team-engine-v2 .ps-trigger:hover,\r\n#panosky-team-engine-v2 .ps-trigger:focus,\r\n#panosky-team-engine-v2 .ps-trigger:focus-visible,\r\n#panosky-team-engine-v2 .ps-trigger:active {\r\n    padding: 0 0 0 129px;\r\n}\r\n\r\n#panosky-team-engine-v2 .ps-number {\r\n    grid-area: number;\r\n    display: none;\r\n    align-self: start;\r\n    color: var(--ps-color-number);\r\n    font-size: 18px;\r\n    font-weight: 500;\r\n    line-height: 1;\r\n}\r\n\r\n#panosky-team-engine-v2 .ps-icon {\r\n    grid-area: icon;\r\n    position: absolute;\r\n    top: 50%;\r\n    left: var(--ps-card-pad-x);\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    width: 112px;\r\n    height: 112px;\r\n    transform: translateY(-50%);\r\n    color: var(--ps-color-icon);\r\n    border: 1px solid rgba(121, 183, 255, 0.68);\r\n    border-radius: 50%;\r\n    box-shadow:\r\n        inset 0 0 25px rgba(31, 126, 255, 0.08),\r\n        0 0 20px rgba(35, 137, 255, 0.08);\r\n    transition: color 240ms ease, border-color 240ms ease, box-shadow 240ms ease;\r\n}\r\n\r\n#panosky-team-engine-v2 .ps-icon svg {\r\n    display: block;\r\n    width: 56px;\r\n    height: 56px;\r\n}\r\n\r\n\/*\r\n * Elementor themes can apply a global fill to inline SVG paths.\r\n * These icons are intentionally line-only, so explicitly preserve\r\n * their stroke rendering and prevent theme styles from filling them.\r\n *\/\r\n#panosky-team-engine-v2 .ps-icon svg path,\r\n#panosky-team-engine-v2 .ps-icon svg circle,\r\n#panosky-team-engine-v2 .ps-icon svg rect,\r\n#panosky-team-engine-v2 .ps-icon svg polygon,\r\n#panosky-team-engine-v2 .ps-icon svg polyline,\r\n#panosky-team-engine-v2 .ps-icon svg line,\r\n#panosky-team-engine-v2 .ps-icon svg ellipse {\r\n    fill: none !important;\r\n    stroke: currentColor !important;\r\n    stroke-linecap: round !important;\r\n    stroke-linejoin: round !important;\r\n}\r\n\r\n#panosky-team-engine-v2 .ps-label {\r\n    grid-area: label;\r\n    min-width: 0;\r\n    color: var(--ps-color-department-label);\r\n    font-size: 12px;\r\n    font-weight: 650;\r\n    line-height: 1.4;\r\n    letter-spacing: 0.17em;\r\n}\r\n\r\n#panosky-team-engine-v2 .ps-dept-title {\r\n    grid-area: title;\r\n    display: block;\r\n    min-width: 0;\r\n    max-width: 100%;\r\n    color: var(--ps-color-department-heading);\r\n    font-size: clamp(23px, 1.65vw, 30px);\r\n    font-weight: 450;\r\n    line-height: 1.16;\r\n    letter-spacing: -0.025em;\r\n    white-space: normal !important;\r\n    overflow-wrap: break-word;\r\n    word-break: normal;\r\n}\r\n\r\n#panosky-team-engine-v2 .ps-chevron {\r\n    grid-area: chevron;\r\n    display: block;\r\n    width: 20px;\r\n    height: 20px;\r\n    color: var(--ps-color-icon);\r\n    transform: rotate(-90deg);\r\n    transition: color 240ms ease, transform 300ms ease;\r\n}\r\n\r\n#panosky-team-engine-v2 .ps-panel {\r\n    display: grid;\r\n    grid-template-rows: 1fr;\r\n    opacity: 1;\r\n}\r\n\r\n#panosky-team-engine-v2 .ps-panel-inner {\r\n    min-height: 0;\r\n    padding: var(--ps-gap-title-copy) 0 0 129px;\r\n    overflow: hidden;\r\n}\r\n\r\n#panosky-team-engine-v2 .ps-copy {\r\n    max-width: 590px;\r\n    color: var(--ps-color-body);\r\n    font-size: 15px;\r\n    font-weight: 400;\r\n    line-height: 1.55;\r\n}\r\n\r\n#panosky-team-engine-v2 .ps-tags {\r\n    display: flex;\r\n    flex-wrap: wrap;\r\n    gap: 8px;\r\n    margin-top: var(--ps-gap-copy-tags);\r\n    list-style: none;\r\n}\r\n\r\n#panosky-team-engine-v2 .ps-tags li {\r\n    padding: 5px 10px;\r\n    color: var(--ps-color-tag);\r\n    font-size: 10px;\r\n    font-weight: 650;\r\n    line-height: 1;\r\n    letter-spacing: 0.05em;\r\n    border: 1px solid rgba(105, 168, 245, 0.25);\r\n    border-radius: 4px;\r\n    background: rgba(2, 22, 52, 0.27);\r\n}\r\n\r\n#panosky-team-engine-v2 .ps-department.is-active .ps-icon {\r\n    color: var(--ps-color-icon-active);\r\n    border-color: rgba(81, 205, 255, 0.92);\r\n    box-shadow: inset 0 0 23px rgba(31, 126, 255, 0.13), 0 0 18px rgba(41, 200, 255, 0.11);\r\n}\r\n\r\n#panosky-team-engine-v2 .ps-department.is-active .ps-chevron { color: var(--ps-color-cta); }\r\n#panosky-team-engine-v2 .ps-mobile-cta { display: none; }\r\n\r\n\/* Keep the proven desktop\/tablet grid geometry intact while hiding only\r\n   the decorative end-arrow artwork. Mobile restores visible chevrons. *\/\r\n@media (min-width: 768px) {\r\n    #panosky-team-engine-v2 .ps-chevron {\r\n        visibility: hidden;\r\n        opacity: 0;\r\n        pointer-events: none;\r\n    }\r\n}\r\n\r\n\/* ==========================================================\r\n   COMPACT DESKTOP\r\n========================================================== *\/\r\n@media (max-width: 1280px) and (min-width: 1025px) {\r\n    #panosky-team-engine-v2 {\r\n        --ps-display-size: var(--e-global-typography-34f8ef0-font-size, 54px);\r\n        --ps-body-size: var(--e-global-typography-text-font-size, 17px);\r\n        --ps-card-body-size: var(--e-global-typography-text-font-size, 14px);\r\n    }\r\n\r\n    #panosky-team-engine-v2 .ps-shell {\r\n        grid-template-columns: 380px 92px minmax(0, 1fr);\r\n        column-gap: 20px;\r\n        padding: 86px 32px;\r\n    }\r\n\r\n    #panosky-team-engine-v2 .ps-title { font-size: 54px; }\r\n    #panosky-team-engine-v2 .ps-description { font-size: 17px; }\r\n    #panosky-team-engine-v2 .ps-department {\r\n        --ps-card-pad-x: 20px;\r\n        padding: 21px 20px;\r\n    }\r\n\r\n    #panosky-team-engine-v2 .ps-trigger {\r\n        grid-template-columns: minmax(0, 1fr) 20px;\r\n        column-gap: 12px;\r\n        min-height: 88px;\r\n        padding: 0 0 0 100px;\r\n    }\r\n\r\n    #panosky-team-engine-v2 .ps-trigger:hover,\r\n    #panosky-team-engine-v2 .ps-trigger:focus,\r\n    #panosky-team-engine-v2 .ps-trigger:focus-visible,\r\n    #panosky-team-engine-v2 .ps-trigger:active {\r\n        padding: 0 0 0 100px;\r\n    }\r\n\r\n    #panosky-team-engine-v2 .ps-icon { width: 88px; height: 88px; }\r\n    #panosky-team-engine-v2 .ps-icon svg { width: 44px; height: 44px; }\r\n    #panosky-team-engine-v2 .ps-dept-title { font-size: 23px; }\r\n    #panosky-team-engine-v2 .ps-panel-inner { padding-left: 100px; }\r\n    #panosky-team-engine-v2 .ps-copy { font-size: 14px; }\r\n}\r\n\r\n\/* ==========================================================\r\n   TABLET \/ STACKED CONNECTED LAYOUT\r\n========================================================== *\/\r\n@media (max-width: 1024px) {\r\n    #panosky-team-engine-v2 {\r\n        --ps-display-size: var(--e-global-typography-34f8ef0-font-size, 62px);\r\n        --ps-body-size: var(--e-global-typography-text-font-size, 18px);\r\n        --ps-card-body-size: var(--e-global-typography-text-font-size, 15px);\r\n        background:\r\n            radial-gradient(ellipse 92% 28% at 10% 43%, rgba(8, 91, 210, 0.22), transparent 70%),\r\n            radial-gradient(ellipse 84% 42% at 84% 68%, rgba(5, 49, 111, 0.1), transparent 74%),\r\n            linear-gradient(160deg, #010b25 0%, #00142f 54%, #010c28 100%);\r\n    }\r\n\r\n    #panosky-team-engine-v2 .ps-shell {\r\n        display: block;\r\n        max-width: 900px;\r\n        padding: 82px 32px 72px;\r\n    }\r\n\r\n    #panosky-team-engine-v2 .ps-intro { max-width: 690px; }\r\n    #panosky-team-engine-v2 .ps-title { font-size: 62px; }\r\n    #panosky-team-engine-v2 .ps-description { max-width: 620px; }\r\n    #panosky-team-engine-v2 .ps-core-desktop,\r\n    #panosky-team-engine-v2 .ps-desktop-cta { display: none; }\r\n\r\n    #panosky-team-engine-v2 .ps-core-mobile {\r\n        position: relative;\r\n        display: flex;\r\n        align-items: center;\r\n        width: 100%;\r\n        height: 51px;\r\n        margin-top: 38px;\r\n        padding: 0 22px 0 53px;\r\n        color: var(--ps-color-department-label);\r\n        font-size: 12px;\r\n        font-weight: 650;\r\n        line-height: 1;\r\n        letter-spacing: 0.2em;\r\n        white-space: nowrap;\r\n        border: 1px solid rgba(96, 176, 255, 0.62);\r\n        border-radius: 27px;\r\n        background:\r\n            linear-gradient(90deg, rgba(7, 45, 94, 0.55), rgba(2, 19, 47, 0.72));\r\n        box-shadow:\r\n            inset 0 0 18px rgba(42, 128, 255, 0.1),\r\n            0 0 24px rgba(18, 105, 229, 0.1);\r\n    }\r\n\r\n    #panosky-team-engine-v2 .ps-core-mobile-node {\r\n        position: absolute;\r\n        left: 13px;\r\n        width: 14px;\r\n        height: 14px;\r\n        border: 2px solid #d9f0ff;\r\n        border-radius: 50%;\r\n        background: var(--ps-color-icon);\r\n        box-shadow: 0 0 8px var(--ps-cyan), 0 0 20px rgba(41, 200, 255, 0.65);\r\n    }\r\n\r\n    #panosky-team-engine-v2 .ps-list {\r\n        position: relative;\r\n        justify-content: flex-start;\r\n        gap: 14px;\r\n        margin-top: 38px;\r\n        padding-left: 57px;\r\n    }\r\n\r\n    #panosky-team-engine-v2 .ps-list::before {\r\n        content: \"\";\r\n        position: absolute;\r\n        top: -38px;\r\n        bottom: 22px;\r\n        left: 13px;\r\n        width: 1px;\r\n        background: linear-gradient(to bottom, rgba(68, 178, 255, 0.9), rgba(95, 151, 225, 0.28));\r\n        box-shadow: 0 0 8px rgba(36, 147, 255, 0.22);\r\n        z-index: 0;\r\n    }\r\n\r\n    #panosky-team-engine-v2 .ps-department {\r\n        z-index: 1;\r\n        overflow: visible;\r\n        border-color: rgba(108, 170, 240, 0.25);\r\n        background: rgba(2, 19, 47, 0.62);\r\n    }\r\n\r\n    #panosky-team-engine-v2 .ps-department::before {\r\n        content: \"\";\r\n        position: absolute;\r\n        top: 43px;\r\n        left: -51px;\r\n        width: 14px;\r\n        height: 14px;\r\n        border: 2px solid rgba(201, 231, 255, 0.6);\r\n        border-radius: 50%;\r\n        background: #28578f;\r\n        box-shadow: 0 0 0 4px rgba(37, 119, 220, 0.08);\r\n        z-index: 3;\r\n        pointer-events: none;\r\n        transition: background 240ms ease, box-shadow 240ms ease;\r\n    }\r\n\r\n    #panosky-team-engine-v2 .ps-department::after {\r\n        content: \"\";\r\n        position: absolute;\r\n        top: 49px;\r\n        left: -37px;\r\n        width: 37px;\r\n        height: 1px;\r\n        background: rgba(96, 158, 233, 0.4);\r\n        box-shadow: 0 0 6px rgba(48, 142, 245, 0.18);\r\n        z-index: 2;\r\n        pointer-events: none;\r\n        transition: background 240ms ease, box-shadow 240ms ease;\r\n    }\r\n\r\n    #panosky-team-engine-v2 .ps-department.is-active::before {\r\n        border-color: #dff7ff;\r\n        background: #effbff;\r\n        box-shadow:\r\n            0 0 0 4px rgba(41, 157, 255, 0.13),\r\n            0 0 7px var(--ps-cyan),\r\n            0 0 18px rgba(41, 200, 255, 0.72);\r\n    }\r\n\r\n    #panosky-team-engine-v2 .ps-department.is-active::after {\r\n        background: var(--ps-cyan);\r\n        box-shadow: 0 0 9px rgba(41, 200, 255, 0.6);\r\n    }\r\n\r\n    \/* Numbers are intentionally mobile\/tablet-only. *\/\r\n    #panosky-team-engine-v2 .ps-number { display: block; }\r\n\r\n    #panosky-team-engine-v2 .ps-trigger {\r\n        grid-template-columns: 42px 88px minmax(0, 1fr) 22px;\r\n        grid-template-areas:\r\n            \"number icon label chevron\"\r\n            \"number icon title chevron\";\r\n        row-gap: 8px;\r\n        align-content: normal;\r\n        min-height: 0;\r\n        padding: 0;\r\n    }\r\n\r\n    #panosky-team-engine-v2 .ps-trigger:hover,\r\n    #panosky-team-engine-v2 .ps-trigger:focus,\r\n    #panosky-team-engine-v2 .ps-trigger:focus-visible,\r\n    #panosky-team-engine-v2 .ps-trigger:active {\r\n        padding: 0;\r\n    }\r\n\r\n    #panosky-team-engine-v2 .ps-icon {\r\n        position: static;\r\n        width: 88px;\r\n        height: 88px;\r\n        transform: none;\r\n    }\r\n\r\n    #panosky-team-engine-v2 .ps-icon svg {\r\n        width: 44px;\r\n        height: 44px;\r\n    }\r\n\r\n    #panosky-team-engine-v2 .ps-panel-inner {\r\n        padding-left: 164px;\r\n    }\r\n\r\n    #panosky-team-engine-v2 .ps-chevron { transform: rotate(-90deg); }\r\n\r\n    #panosky-team-engine-v2 .ps-mobile-cta {\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        gap: 16px;\r\n        width: 100%;\r\n        min-height: 55px;\r\n        margin-top: 28px;\r\n        padding: 13px 18px;\r\n        color: var(--ps-color-cta);\r\n        font-size: 17px;\r\n        font-weight: 600;\r\n        line-height: 1.3;\r\n        text-align: center;\r\n        border: 1px solid var(--ps-color-cta);\r\n        border-radius: 9px;\r\n        background: rgba(4, 30, 68, 0.34);\r\n    }\r\n}\r\n\r\n\/* ==========================================================\r\n   MOBILE ACCORDION\r\n========================================================== *\/\r\n@media (max-width: 767px) {\r\n    #panosky-team-engine-v2 {\r\n        --ps-display-size: var(--e-global-typography-34f8ef0-font-size, clamp(44px, 12.6vw, 52px));\r\n        --ps-body-size: var(--e-global-typography-text-font-size, 17px);\r\n        --ps-card-body-size: var(--e-global-typography-text-font-size, 15px);\r\n        --ps-ui-letter-spacing: var(--e-global-typography-abebd36-letter-spacing, 0.15em);\r\n        --ps-overline-size: var(--e-global-typography-abebd36-font-size, 11px);\r\n        --ps-label-size: var(--e-global-typography-abebd36-font-size, 10px);\r\n        --ps-number-size: var(--e-global-typography-abebd36-font-size, 20px);\r\n        --ps-cta-size: var(--e-global-typography-accent-font-size, 16px);\r\n    }\r\n\r\n    #panosky-team-engine-v2 .ps-shell { padding: 76px 20px 68px; }\r\n    #panosky-team-engine-v2 .ps-eyebrow { margin-bottom: 51px; font-size: 11px; letter-spacing: 0.19em; }\r\n    #panosky-team-engine-v2 .ps-eyebrow::after { bottom: -18px; width: 32px; }\r\n    #panosky-team-engine-v2 .ps-title { font-size: clamp(44px, 12.6vw, 52px); }\r\n    #panosky-team-engine-v2 .ps-description { margin-top: 27px; font-size: 17px; line-height: 1.64; }\r\n    #panosky-team-engine-v2 .ps-core-mobile { margin-top: 35px; font-size: 11px; letter-spacing: 0.18em; }\r\n\r\n    #panosky-team-engine-v2 .ps-list {\r\n        margin-top: 36px;\r\n        padding-left: 54px;\r\n    }\r\n\r\n    #panosky-team-engine-v2 .ps-list::before { top: -36px; }\r\n    #panosky-team-engine-v2 .ps-department { padding: 20px 16px; border-radius: 17px; }\r\n    #panosky-team-engine-v2 .ps-department::before { top: 45px; left: -48px; width: 13px; height: 13px; }\r\n    #panosky-team-engine-v2 .ps-department::after { top: 51px; left: -35px; width: 35px; }\r\n\r\n    #panosky-team-engine-v2 .ps-trigger {\r\n        grid-template-columns: 58px minmax(0, 1fr) 24px;\r\n        grid-template-areas:\r\n            \"number label chevron\"\r\n            \"icon title title\";\r\n        column-gap: 14px;\r\n        row-gap: 19px;\r\n        overflow: visible;\r\n        white-space: normal !important;\r\n    }\r\n\r\n    #panosky-team-engine-v2 .ps-number { align-self: center; font-size: 20px; }\r\n    #panosky-team-engine-v2 .ps-label { align-self: center; font-size: 10px; letter-spacing: 0.15em; }\r\n    #panosky-team-engine-v2 .ps-icon { align-self: start; width: 52px; height: 52px; }\r\n    #panosky-team-engine-v2 .ps-icon svg { width: 29px; height: 29px; }\r\n    #panosky-team-engine-v2 .ps-dept-title {\r\n        align-self: center;\r\n        width: 100%;\r\n        font-size: clamp(20px, 5.7vw, 24px);\r\n        line-height: 1.2;\r\n        white-space: normal !important;\r\n        overflow-wrap: break-word;\r\n        word-break: normal;\r\n    }\r\n    #panosky-team-engine-v2 .ps-chevron {\r\n        display: block;\r\n        visibility: visible;\r\n        opacity: 1;\r\n        pointer-events: auto;\r\n        align-self: center;\r\n        transform: rotate(0deg);\r\n    }\r\n    #panosky-team-engine-v2 .ps-department.is-active .ps-chevron { transform: rotate(180deg); }\r\n\r\n    #panosky-team-engine-v2 .ps-panel {\r\n        grid-template-rows: 0fr;\r\n        opacity: 0;\r\n        transition: grid-template-rows 370ms ease, opacity 270ms ease;\r\n    }\r\n\r\n    #panosky-team-engine-v2 .ps-department.is-active .ps-panel {\r\n        grid-template-rows: 1fr;\r\n        opacity: 1;\r\n    }\r\n\r\n    #panosky-team-engine-v2 .ps-panel-inner { padding: 0 0 0 72px; }\r\n    #panosky-team-engine-v2 .ps-department.is-active .ps-panel-inner { padding-top: 17px; }\r\n    #panosky-team-engine-v2 .ps-copy { font-size: 15px; }\r\n    #panosky-team-engine-v2 .ps-tags { gap: 7px; margin-top: 15px; }\r\n    #panosky-team-engine-v2 .ps-tags li { padding: 6px 8px; }\r\n    #panosky-team-engine-v2 .ps-mobile-cta { font-size: 16px; }\r\n}\r\n\r\n@media (max-width: 380px) {\r\n    #panosky-team-engine-v2 {\r\n        --ps-display-size: var(--e-global-typography-34f8ef0-font-size, 42px);\r\n        --ps-ui-letter-spacing: var(--e-global-typography-abebd36-letter-spacing, 0.13em);\r\n        --ps-label-size: var(--e-global-typography-abebd36-font-size, 10px);\r\n    }\r\n\r\n    #panosky-team-engine-v2 .ps-shell { padding-right: 16px; padding-left: 16px; }\r\n    #panosky-team-engine-v2 .ps-title { font-size: 42px; }\r\n    #panosky-team-engine-v2 .ps-core-mobile { padding-left: 46px; font-size: 10px; letter-spacing: 0.13em; }\r\n    #panosky-team-engine-v2 .ps-list { padding-left: 46px; }\r\n    #panosky-team-engine-v2 .ps-list::before { left: 11px; }\r\n    #panosky-team-engine-v2 .ps-department::before { left: -42px; }\r\n    #panosky-team-engine-v2 .ps-department::after { left: -29px; width: 29px; }\r\n    #panosky-team-engine-v2 .ps-trigger {\r\n        grid-template-columns: 52px minmax(0, 1fr) 20px;\r\n        column-gap: 12px;\r\n    }\r\n    #panosky-team-engine-v2 .ps-dept-title { font-size: 20px; }\r\n    #panosky-team-engine-v2 .ps-panel-inner { padding-left: 64px; }\r\n}\r\n\r\n\/* ==========================================================\r\n   APPLY ELEMENTOR GLOBAL TYPOGRAPHY TO EACH CONTENT SECTOR\r\n\r\n   This block intentionally appears after the responsive rules.\r\n   Elementor's global variables can therefore control desktop,\r\n   tablet and mobile values without losing the component layout.\r\n========================================================== *\/\r\n\r\n\/* Primary global typography: main section heading *\/\r\n#panosky-team-engine-v2 .ps-title {\r\n    font-family: var(--ps-display-family);\r\n    font-size: var(--ps-display-size);\r\n    font-weight: var(--ps-display-weight);\r\n    font-style: var(--ps-display-style);\r\n    line-height: var(--ps-display-line-height);\r\n    letter-spacing: var(--ps-display-letter-spacing);\r\n    text-transform: var(--ps-display-transform);\r\n}\r\n\r\n\/* Secondary global typography: department headings *\/\r\n#panosky-team-engine-v2 .ps-dept-title {\r\n    font-family: var(--ps-subheading-family);\r\n    font-size: var(--ps-subheading-size);\r\n    font-weight: var(--ps-subheading-weight);\r\n    font-style: var(--ps-subheading-style);\r\n    line-height: var(--ps-subheading-line-height);\r\n    letter-spacing: var(--ps-subheading-letter-spacing);\r\n    text-transform: var(--ps-subheading-transform);\r\n}\r\n\r\n\/* Text global typography: introduction and card paragraphs *\/\r\n#panosky-team-engine-v2 .ps-description,\r\n#panosky-team-engine-v2 .ps-copy {\r\n    font-family: var(--ps-body-family);\r\n    font-weight: var(--ps-body-weight);\r\n    font-style: var(--ps-body-style);\r\n    letter-spacing: var(--ps-body-letter-spacing);\r\n    text-transform: var(--ps-body-transform);\r\n}\r\n\r\n#panosky-team-engine-v2 .ps-description {\r\n    font-size: var(--ps-body-size);\r\n    line-height: var(--ps-body-line-height);\r\n}\r\n\r\n#panosky-team-engine-v2 .ps-copy {\r\n    font-size: var(--ps-card-body-size);\r\n    line-height: var(--ps-card-body-line-height);\r\n}\r\n\r\n\/* Accent global typography: design titles and UI labels *\/\r\n#panosky-team-engine-v2 .ps-eyebrow,\r\n#panosky-team-engine-v2 .ps-label,\r\n#panosky-team-engine-v2 .ps-number,\r\n#panosky-team-engine-v2 .ps-core-mobile {\r\n    font-family: var(--ps-ui-family);\r\n    font-weight: var(--ps-ui-weight);\r\n    font-style: var(--ps-ui-style);\r\n    line-height: var(--ps-ui-line-height);\r\n    letter-spacing: var(--ps-ui-letter-spacing);\r\n    text-transform: var(--ps-ui-transform);\r\n}\r\n\r\n#panosky-team-engine-v2 .ps-eyebrow { font-size: var(--ps-overline-size); }\r\n#panosky-team-engine-v2 .ps-label,\r\n#panosky-team-engine-v2 .ps-core-mobile { font-size: var(--ps-label-size); }\r\n#panosky-team-engine-v2 .ps-number { font-size: var(--ps-number-size); }\r\n\r\n\/* Extra Small global typography: boxed benefit tags *\/\r\n#panosky-team-engine-v2 .ps-tags li {\r\n    font-family: var(--ps-tag-family);\r\n    font-size: var(--ps-tag-size);\r\n    font-weight: var(--ps-tag-weight);\r\n    font-style: var(--ps-tag-style);\r\n    line-height: var(--ps-tag-line-height);\r\n    letter-spacing: var(--ps-tag-letter-spacing);\r\n    text-transform: var(--ps-tag-transform);\r\n}\r\n\r\n\/* Standard Accent Text global typography: CTA links and buttons *\/\r\n#panosky-team-engine-v2 .ps-inline-cta,\r\n#panosky-team-engine-v2 .ps-inline-cta:hover,\r\n#panosky-team-engine-v2 .ps-inline-cta:focus,\r\n#panosky-team-engine-v2 .ps-inline-cta:focus-visible,\r\n#panosky-team-engine-v2 .ps-mobile-cta,\r\n#panosky-team-engine-v2 .ps-mobile-cta:hover,\r\n#panosky-team-engine-v2 .ps-mobile-cta:focus,\r\n#panosky-team-engine-v2 .ps-mobile-cta:focus-visible {\r\n    font-family: var(--ps-cta-family);\r\n    font-size: var(--ps-cta-size);\r\n    font-weight: var(--ps-cta-weight);\r\n    font-style: var(--ps-cta-style);\r\n    line-height: var(--ps-cta-line-height);\r\n    letter-spacing: var(--ps-cta-letter-spacing);\r\n    text-transform: var(--ps-cta-transform);\r\n}\r\n\r\n\/* Keyboard accessibility *\/\r\n#panosky-team-engine-v2 a:focus-visible,\r\n#panosky-team-engine-v2 button:focus-visible {\r\n    outline: 2px solid var(--ps-cyan);\r\n    outline-offset: 4px;\r\n}\r\n\r\n@media (prefers-reduced-motion: reduce) {\r\n    #panosky-team-engine-v2 *,\r\n    #panosky-team-engine-v2 *::before,\r\n    #panosky-team-engine-v2 *::after {\r\n        transition-duration: 0.01ms !important;\r\n        animation-duration: 0.01ms !important;\r\n        scroll-behavior: auto !important;\r\n    }\r\n}\r\n<\/style>\r\n\r\n<section id=\"panosky-team-engine-v2\" aria-labelledby=\"ps-team-heading-v2\">\r\n    <div class=\"ps-shell\">\r\n\r\n        <div class=\"ps-intro\">\r\n            <p class=\"ps-eyebrow\">ONE PLATFORM. EVERY TEAM.<\/p>\r\n\r\n            <h2 class=\"ps-title\" id=\"ps-team-heading-v2\">\r\n                <span class=\"ps-title-line\">Engineered for<\/span>\r\n                <span class=\"ps-title-accent\">All Departments.<\/span>\r\n            <\/h2>\r\n\r\n            <p class=\"ps-description\">\r\n                One immersive spatial asset gives every department the clarity\r\n                to sell, operate and plan more effectively.\r\n            <\/p>\r\n\r\n            <a class=\"ps-inline-cta ps-desktop-cta\" href=\"#roi-matrix\">\r\n                Explore ROI by department <span aria-hidden=\"true\">\u2192<\/span>\r\n            <\/a>\r\n\r\n            <div class=\"ps-core-mobile\" aria-hidden=\"true\">\r\n                <span class=\"ps-core-mobile-node\"><\/span>\r\n                PANOSKY SPATIAL CORE\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <div class=\"ps-core-desktop\" aria-hidden=\"true\">\r\n            <div class=\"ps-core-rail\">\r\n                <span class=\"ps-core-cap ps-core-cap--top\"><\/span>\r\n                <span class=\"ps-core-node is-active\" data-node=\"0\"><\/span>\r\n                <span class=\"ps-core-node\" data-node=\"1\"><\/span>\r\n                <span class=\"ps-core-node\" data-node=\"2\"><\/span>\r\n                <span class=\"ps-core-cap ps-core-cap--bottom\"><\/span>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <div class=\"ps-list\">\r\n\r\n            <article class=\"ps-department is-active\" data-index=\"0\">\r\n                <button class=\"ps-trigger\" id=\"ps-trigger-marketing-v2\" type=\"button\"\r\n                    aria-expanded=\"true\" aria-controls=\"ps-panel-marketing-v2\">\r\n                    <span class=\"ps-number\">01<\/span>\r\n                    <span class=\"ps-icon\" aria-hidden=\"true\">\r\n                        <svg viewBox=\"0 0 48 48\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n                            stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n                            <path d=\"M8 35L19 24L27 31L40 17\"><\/path>\r\n                            <path d=\"M32 17H40V25\"><\/path>\r\n                        <\/svg>\r\n                    <\/span>\r\n                    <span class=\"ps-label\">MARKETING &amp; SALES<\/span>\r\n                    <span class=\"ps-dept-title\" role=\"heading\" aria-level=\"3\">Turn attention into action.<\/span>\r\n                    <svg class=\"ps-chevron\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n                        stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\r\n                        <path d=\"M5 8L12 15L19 8\"><\/path>\r\n                    <\/svg>\r\n                <\/button>\r\n                <div class=\"ps-panel\" id=\"ps-panel-marketing-v2\" role=\"region\"\r\n                    aria-labelledby=\"ps-trigger-marketing-v2\">\r\n                    <div class=\"ps-panel-inner\">\r\n                        <p class=\"ps-copy\">Extend engagement, reduce uncertainty and help global buyers book with confidence.<\/p>\r\n                        <ul class=\"ps-tags\">\r\n                            <li>LONGER ENGAGEMENT<\/li>\r\n                            <li>REMOTE CONVERSION<\/li>\r\n                            <li>GLOBAL REACH<\/li>\r\n                        <\/ul>\r\n                    <\/div>\r\n                <\/div>\r\n            <\/article>\r\n\r\n            <article class=\"ps-department\" data-index=\"1\">\r\n                <button class=\"ps-trigger\" id=\"ps-trigger-operations-v2\" type=\"button\"\r\n                    aria-expanded=\"false\" aria-controls=\"ps-panel-operations-v2\">\r\n                    <span class=\"ps-number\">02<\/span>\r\n                    <span class=\"ps-icon\" aria-hidden=\"true\">\r\n                        <svg viewBox=\"0 0 48 48\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\"\r\n                            stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n                            <path d=\"M8 10H31V20\"><\/path><path d=\"M8 10V37H26\"><\/path>\r\n                            <path d=\"M18 10V20\"><\/path><path d=\"M18 28V37\"><\/path>\r\n                            <path d=\"M18 20H29\"><\/path><path d=\"M18 28H27\"><\/path>\r\n                            <path d=\"M38 38C41 34.5 43 31.5 43 28.5C43 24.9 40.1 22 36.5 22C32.9 22 30 24.9 30 28.5C30 31.5 32 34.5 35 38L36.5 40L38 38Z\"><\/path>\r\n                            <circle cx=\"36.5\" cy=\"28.5\" r=\"2\"><\/circle>\r\n                        <\/svg>\r\n                    <\/span>\r\n                    <span class=\"ps-label\">OPERATIONS &amp; CX<\/span>\r\n                    <span class=\"ps-dept-title\" role=\"heading\" aria-level=\"3\">Replace site visits with instant access.<\/span>\r\n                    <svg class=\"ps-chevron\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n                        stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\r\n                        <path d=\"M5 8L12 15L19 8\"><\/path>\r\n                    <\/svg>\r\n                <\/button>\r\n                <div class=\"ps-panel\" id=\"ps-panel-operations-v2\" role=\"region\"\r\n                    aria-labelledby=\"ps-trigger-operations-v2\">\r\n                    <div class=\"ps-panel-inner\">\r\n                        <p class=\"ps-copy\">Share layouts, guide teams remotely and give customers clarity\u2014without coordinating another on-site visit.<\/p>\r\n                        <ul class=\"ps-tags\">\r\n                            <li>FEWER SITE VISITS<\/li>\r\n                            <li>FASTER COLLABORATION<\/li>\r\n                            <li>CLEARER EXPERIENCE<\/li>\r\n                        <\/ul>\r\n                    <\/div>\r\n                <\/div>\r\n            <\/article>\r\n\r\n            <article class=\"ps-department\" data-index=\"2\">\r\n                <button class=\"ps-trigger\" id=\"ps-trigger-finance-v2\" type=\"button\"\r\n                    aria-expanded=\"false\" aria-controls=\"ps-panel-finance-v2\">\r\n                    <span class=\"ps-number\">03<\/span>\r\n                    <span class=\"ps-icon\" aria-hidden=\"true\">\r\n                        <svg viewBox=\"0 0 48 48\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\"\r\n                            stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n                            <path d=\"M24 7L41 17L24 27L7 17L24 7Z\"><\/path>\r\n                            <path d=\"M10 24L24 32L38 24\"><\/path>\r\n                            <path d=\"M10 31L24 40L38 31\"><\/path>\r\n                        <\/svg>\r\n                    <\/span>\r\n                    <span class=\"ps-label\">FINANCE &amp; LEADERSHIP<\/span>\r\n                    <span class=\"ps-dept-title\" role=\"heading\" aria-level=\"3\">Build an asset that keeps working.<\/span>\r\n                    <svg class=\"ps-chevron\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n                        stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\r\n                        <path d=\"M5 8L12 15L19 8\"><\/path>\r\n                    <\/svg>\r\n                <\/button>\r\n                <div class=\"ps-panel\" id=\"ps-panel-finance-v2\" role=\"region\"\r\n                    aria-labelledby=\"ps-trigger-finance-v2\">\r\n                    <div class=\"ps-panel-inner\">\r\n                        <p class=\"ps-copy\">Capture once, publish across channels and create a reusable digital record for your entire portfolio.<\/p>\r\n                        <ul class=\"ps-tags\">\r\n                            <li>ONE CAPTURE<\/li>\r\n                            <li>MULTI-CHANNEL USE<\/li>\r\n                            <li>PORTFOLIO VALUE<\/li>\r\n                        <\/ul>\r\n                    <\/div>\r\n                <\/div>\r\n            <\/article>\r\n        <\/div>\r\n\r\n        <a class=\"ps-mobile-cta\" href=\"#roi-matrix\">\r\n            Explore ROI by department <span aria-hidden=\"true\">\u2192<\/span>\r\n        <\/a>\r\n    <\/div>\r\n<\/section>\r\n\r\n<script>\r\n(function () {\r\n    var ROOT_ID = \"panosky-team-engine-v2\";\r\n    var READY_VERSION = \"2.15\";\r\n    var MOBILE_ACCORDION = 767;\r\n    var DESKTOP_CORE = 1024;\r\n\r\n    function initialise(section) {\r\n        if (!section || section.dataset.psReady === READY_VERSION) return;\r\n        section.dataset.psReady = READY_VERSION;\r\n\r\n        var departments = Array.prototype.slice.call(section.querySelectorAll(\".ps-department\"));\r\n        var nodes = Array.prototype.slice.call(section.querySelectorAll(\".ps-core-node\"));\r\n        var core = section.querySelector(\".ps-core-desktop\");\r\n        var rail = section.querySelector(\".ps-core-rail\");\r\n        var list = section.querySelector(\".ps-list\");\r\n        var resizeFrame = null;\r\n\r\n        function activeDepartment() {\r\n            return section.querySelector(\".ps-department.is-active\") || departments[0];\r\n        }\r\n\r\n        function activate(selected) {\r\n            var selectedIndex = Number(selected.getAttribute(\"data-index\"));\r\n\r\n            departments.forEach(function (department) {\r\n                var chosen = department === selected;\r\n                var trigger = department.querySelector(\".ps-trigger\");\r\n                department.classList.toggle(\"is-active\", chosen);\r\n\r\n                if (window.innerWidth <= MOBILE_ACCORDION) {\r\n                    trigger.setAttribute(\"aria-expanded\", String(chosen));\r\n                } else {\r\n                    trigger.setAttribute(\"aria-expanded\", \"true\");\r\n                }\r\n            });\r\n\r\n            nodes.forEach(function (node, index) {\r\n                node.classList.toggle(\"is-active\", index === selectedIndex);\r\n            });\r\n\r\n            scheduleConnectorMeasurement();\r\n        }\r\n\r\n        function measureDesktopConnectors() {\r\n            if (window.innerWidth <= DESKTOP_CORE || !core || !rail || !list) return;\r\n\r\n            var railRect = rail.getBoundingClientRect();\r\n            var listRect = list.getBoundingClientRect();\r\n            \/*\r\n             * The small junction lives on the rail's right edge.\r\n             * The large glowing endpoint must land exactly on the card edge.\r\n             *\/\r\n            var branchWidth = Math.max(24, listRect.left - railRect.right);\r\n\r\n            departments.forEach(function (department, index) {\r\n                var node = nodes[index];\r\n                if (!node) return;\r\n\r\n                var cardRect = department.getBoundingClientRect();\r\n                var cardCentreY = cardRect.top + (cardRect.height \/ 2);\r\n                var nodeTop = cardCentreY - railRect.top;\r\n\r\n                node.style.top = nodeTop + \"px\";\r\n                node.style.setProperty(\"--branch-width\", branchWidth + \"px\");\r\n            });\r\n        }\r\n\r\n        function scheduleConnectorMeasurement() {\r\n            if (resizeFrame) window.cancelAnimationFrame(resizeFrame);\r\n            resizeFrame = window.requestAnimationFrame(measureDesktopConnectors);\r\n        }\r\n\r\n        function syncResponsiveMode() {\r\n            var current = activeDepartment();\r\n            activate(current);\r\n            scheduleConnectorMeasurement();\r\n        }\r\n\r\n        departments.forEach(function (department) {\r\n            var trigger = department.querySelector(\".ps-trigger\");\r\n\r\n            trigger.addEventListener(\"click\", function () {\r\n                activate(department);\r\n            });\r\n\r\n            department.addEventListener(\"mouseenter\", function () {\r\n                if (window.innerWidth > MOBILE_ACCORDION) activate(department);\r\n            });\r\n\r\n            trigger.addEventListener(\"focus\", function () {\r\n                if (window.innerWidth > MOBILE_ACCORDION) activate(department);\r\n            });\r\n        });\r\n\r\n        var resizeTimer;\r\n        window.addEventListener(\"resize\", function () {\r\n            window.clearTimeout(resizeTimer);\r\n            resizeTimer = window.setTimeout(syncResponsiveMode, 100);\r\n        });\r\n\r\n        window.addEventListener(\"load\", scheduleConnectorMeasurement, { once: true });\r\n\r\n        if (document.fonts && document.fonts.ready) {\r\n            document.fonts.ready.then(scheduleConnectorMeasurement);\r\n        }\r\n\r\n        if (window.ResizeObserver && list) {\r\n            var observer = new ResizeObserver(scheduleConnectorMeasurement);\r\n            observer.observe(list);\r\n        }\r\n\r\n        syncResponsiveMode();\r\n        window.setTimeout(scheduleConnectorMeasurement, 80);\r\n        window.setTimeout(scheduleConnectorMeasurement, 350);\r\n    }\r\n\r\n    function boot() {\r\n        \/* Attribute selection intentionally initializes every matching widget.\r\n           This remains reliable if Elementor temporarily leaves an older copy\r\n           in its editor DOM while refreshing the HTML widget. *\/\r\n        var sections = document.querySelectorAll('[id=\"' + ROOT_ID + '\"]');\r\n        Array.prototype.forEach.call(sections, initialise);\r\n    }\r\n\r\n    if (document.readyState === \"loading\") {\r\n        document.addEventListener(\"DOMContentLoaded\", boot, { once: true });\r\n    } else {\r\n        boot();\r\n    }\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\n<\/div>\n<div class=\"elementor-element elementor-element-e589531 e-con e-atomic-element e-flexbox-base e-d943375 \" data-id=\"e589531\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"e589531\" data-e-type=\"e-flexbox\" data-id=\"e589531\">\n    <div class=\"elementor-element elementor-element-ab78c68 ps-video-light-stage e-flex e-con-boxed e-con e-parent\" data-id=\"ab78c68\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f19238a elementor-invisible elementor-widget elementor-widget-heading\" data-id=\"f19238a\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeInUp&quot;}\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">It's time to<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-05222c2 elementor-invisible elementor-widget elementor-widget-heading\" data-id=\"05222c2\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeInUp&quot;}\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Show your venue<br>\nImmersively.\n<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bd6df5a elementor-widget elementor-widget-spacer\" data-id=\"bd6df5a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f714c0d elementor-align-center panosky-cursor-glow elementor-invisible elementor-widget elementor-widget-button\" data-id=\"f714c0d\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeInUp&quot;}\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"#\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Schedule a Consultation<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-838b819 elementor-widget elementor-widget-html\" data-id=\"838b819\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\r\n\/* ============================================\r\n   PREVENT HORIZONTAL PAGE SCROLLING\r\n   ============================================ *\/\r\n\r\nhtml,\r\nbody {\r\n    overflow-x: clip;\r\n}\r\n\r\n\/* Fallback for browsers without overflow: clip *\/\r\n\r\n@supports not (overflow: clip) {\r\n    html,\r\n    body {\r\n        overflow-x: hidden;\r\n    }\r\n}\r\n\r\n\r\n\/* ============================================\r\n   SMOOTH MAGNIFIER EXPANSION\r\n   ============================================ *\/\r\n\r\n@property --ps-dot-lens-radius {\r\n    syntax: \"<length>\";\r\n    initial-value: 0px;\r\n    inherits: true;\r\n}\r\n\r\n\r\n\/* ============================================\r\n   PANOSKY DOT MAGNIFIER CONTROLS\r\n   ============================================ *\/\r\n\r\n.ps-video-light-stage {\r\n    \/* Normal spacing between dots *\/\r\n    --ps-dot-gap: 11px;\r\n\r\n    \/* Maximum spacing at the magnifier center *\/\r\n    --ps-dot-magnified-gap: 17px;\r\n\r\n    \/* Dot size stays unchanged *\/\r\n    --ps-dot-size: 0.4px;\r\n\r\n    \/* Normal and highlighted dot visibility *\/\r\n    --ps-dot-opacity: 0.17;\r\n    --ps-dot-highlight-opacity: 0.85;\r\n\r\n    \/* Magnifier radius *\/\r\n    --ps-dot-lens-size: 175px;\r\n\r\n    \/*\r\n       Magnification falloff:\r\n\r\n       Lower values spread the effect farther.\r\n       Higher values concentrate it near the center.\r\n    *\/\r\n    --ps-dot-falloff: 2.4;\r\n\r\n    \/* Cursor-follow smoothness *\/\r\n    --ps-dot-follow-speed: 0.14;\r\n\r\n    \/* Vertical extension beyond the container *\/\r\n    --ps-dot-overflow: 180px;\r\n\r\n    \/* Colors *\/\r\n    --ps-dot-rgb: 155, 180, 205;\r\n    --ps-dot-highlight-rgb: 80, 245, 255;\r\n    --ps-dot-glow-rgb: 0, 139, 255;\r\n\r\n    position: relative !important;\r\n\r\n    overflow: visible !important;\r\n\r\n    isolation: isolate;\r\n}\r\n\r\n\r\n\/* Let the dot effect extend outside Elementor wrappers *\/\r\n\r\n.ps-video-light-stage > .e-con-inner,\r\n.ps-video-light-stage > .elementor-container,\r\n.ps-video-light-stage > .elementor-widget-wrap {\r\n    overflow: visible !important;\r\n}\r\n\r\n\r\n\/* ============================================\r\n   FULL-WIDTH DOT FIELD\r\n   ============================================ *\/\r\n\r\n.ps-dot-magnifier-field {\r\n    --ps-pointer-x: 50%;\r\n    --ps-pointer-y: 50%;\r\n\r\n    --ps-dot-lens-radius: 0px;\r\n\r\n    position: absolute;\r\n\r\n    left: 50%;\r\n\r\n    top: calc(\r\n        -1 * var(--ps-dot-overflow)\r\n    );\r\n\r\n    width: 100vw;\r\n\r\n    height: calc(\r\n        100% +\r\n        var(--ps-dot-overflow) * 2\r\n    );\r\n\r\n    transform: translateX(-50%);\r\n\r\n    z-index: 0;\r\n\r\n    pointer-events: none;\r\n\r\n    overflow: visible;\r\n\r\n    transition:\r\n        --ps-dot-lens-radius\r\n        650ms\r\n        cubic-bezier(0.22, 1, 0.36, 1);\r\n}\r\n\r\n\r\n\/* Keep the video above the dot background *\/\r\n\r\n.ps-video-light-stage > .e-con-inner,\r\n.ps-video-light-stage > .elementor-widget,\r\n.ps-video-light-stage .ps-video-target {\r\n    position: relative;\r\n    z-index: 1;\r\n}\r\n\r\n\r\n\/* ============================================\r\n   SUBTLE BLUE AURA\r\n   ============================================ *\/\r\n\r\n.ps-dot-magnifier-field__aura {\r\n    position: absolute;\r\n\r\n    inset: 0;\r\n\r\n    z-index: 0;\r\n\r\n    pointer-events: none;\r\n\r\n    background:\r\n        radial-gradient(\r\n            circle\r\n                calc(\r\n                    var(--ps-dot-lens-radius) * 1.08\r\n                )\r\n                at\r\n                var(--ps-pointer-x)\r\n                var(--ps-pointer-y),\r\n\r\n            rgba(\r\n                var(--ps-dot-glow-rgb),\r\n                0.075\r\n            ) 0%,\r\n\r\n            rgba(\r\n                var(--ps-dot-glow-rgb),\r\n                0.032\r\n            ) 42%,\r\n\r\n            transparent 78%\r\n        );\r\n\r\n    opacity: 0;\r\n\r\n    transition:\r\n        opacity 420ms ease;\r\n}\r\n\r\n\r\n\/* ============================================\r\n   NORMAL DOT GRID\r\n   ============================================ *\/\r\n\r\n.ps-dot-magnifier-field__base {\r\n    position: absolute;\r\n\r\n    inset: 0;\r\n\r\n    z-index: 1;\r\n\r\n    pointer-events: none;\r\n\r\n    background-image:\r\n        radial-gradient(\r\n            circle,\r\n\r\n            rgba(\r\n                var(--ps-dot-rgb),\r\n                var(--ps-dot-opacity)\r\n            )\r\n                0\r\n                var(--ps-dot-size),\r\n\r\n            transparent\r\n                calc(\r\n                    var(--ps-dot-size) + 0.45px\r\n                )\r\n        );\r\n\r\n    background-size:\r\n        var(--ps-dot-gap)\r\n        var(--ps-dot-gap);\r\n\r\n    background-position: 0 0;\r\n\r\n    \/*\r\n       Fade the original grid within the lens so\r\n       the distorted dots can blend in smoothly.\r\n    *\/\r\n\r\n    -webkit-mask-image:\r\n        radial-gradient(\r\n            circle\r\n                var(--ps-dot-lens-radius)\r\n                at\r\n                var(--ps-pointer-x)\r\n                var(--ps-pointer-y),\r\n\r\n            transparent 0%,\r\n\r\n            transparent 46%,\r\n\r\n            rgba(0, 0, 0, 0.12) 63%,\r\n\r\n            rgba(0, 0, 0, 0.64) 84%,\r\n\r\n            #000 100%\r\n        ),\r\n\r\n        linear-gradient(\r\n            to bottom,\r\n\r\n            transparent 0%,\r\n\r\n            rgba(0, 0, 0, 0.76) 12%,\r\n\r\n            #000 24%,\r\n\r\n            #000 76%,\r\n\r\n            rgba(0, 0, 0, 0.76) 88%,\r\n\r\n            transparent 100%\r\n        );\r\n\r\n    -webkit-mask-composite: source-in;\r\n\r\n    mask-image:\r\n        radial-gradient(\r\n            circle\r\n                var(--ps-dot-lens-radius)\r\n                at\r\n                var(--ps-pointer-x)\r\n                var(--ps-pointer-y),\r\n\r\n            transparent 0%,\r\n\r\n            transparent 46%,\r\n\r\n            rgba(0, 0, 0, 0.12) 63%,\r\n\r\n            rgba(0, 0, 0, 0.64) 84%,\r\n\r\n            #000 100%\r\n        ),\r\n\r\n        linear-gradient(\r\n            to bottom,\r\n\r\n            transparent 0%,\r\n\r\n            rgba(0, 0, 0, 0.76) 12%,\r\n\r\n            #000 24%,\r\n\r\n            #000 76%,\r\n\r\n            rgba(0, 0, 0, 0.76) 88%,\r\n\r\n            transparent 100%\r\n        );\r\n\r\n    mask-composite: intersect;\r\n}\r\n\r\n\r\n\/* ============================================\r\n   CURSOR-FOLLOWING MAGNIFIER\r\n   ============================================ *\/\r\n\r\n.ps-dot-magnifier-field__lens {\r\n    position: absolute;\r\n\r\n    top: 0;\r\n    left: 0;\r\n\r\n    z-index: 2;\r\n\r\n    pointer-events: none;\r\n\r\n    opacity: 0;\r\n\r\n    transition:\r\n        opacity 360ms ease;\r\n\r\n    will-change: transform;\r\n}\r\n\r\n\r\n\/* Activate the magnifier *\/\r\n\r\n.ps-dot-magnifier-field.is-active {\r\n    --ps-dot-lens-radius:\r\n        var(--ps-dot-lens-size);\r\n}\r\n\r\n.ps-dot-magnifier-field.is-active\r\n.ps-dot-magnifier-field__lens {\r\n    opacity: 1;\r\n}\r\n\r\n.ps-dot-magnifier-field.is-active\r\n.ps-dot-magnifier-field__aura {\r\n    opacity: 1;\r\n}\r\n\r\n\r\n\/* ============================================\r\n   MOBILE SETTINGS\r\n   ============================================ *\/\r\n\r\n@media (max-width: 767px) {\r\n    .ps-video-light-stage {\r\n        --ps-dot-gap: 12px;\r\n\r\n        --ps-dot-magnified-gap: 17px;\r\n\r\n        --ps-dot-size: 0.72px;\r\n\r\n        --ps-dot-opacity: 0.13;\r\n\r\n        --ps-dot-overflow: 125px;\r\n\r\n        --ps-dot-lens-size: 125px;\r\n    }\r\n}\r\n\r\n\r\n\/* Touch devices show only the lightweight static grid *\/\r\n\r\n@media (hover: none), (pointer: coarse) {\r\n    .ps-dot-magnifier-field__lens,\r\n    .ps-dot-magnifier-field__aura {\r\n        display: none;\r\n    }\r\n}\r\n<\/style>\r\n\r\n\r\n<div\r\n    class=\"ps-dot-magnifier-field\"\r\n    aria-hidden=\"true\"\r\n>\r\n    <span\r\n        class=\"ps-dot-magnifier-field__aura\"\r\n    ><\/span>\r\n\r\n    <span\r\n        class=\"ps-dot-magnifier-field__base\"\r\n    ><\/span>\r\n\r\n    <canvas\r\n        class=\"ps-dot-magnifier-field__lens\"\r\n    ><\/canvas>\r\n<\/div>\r\n\r\n\r\n<script>\r\n(function () {\r\n    \"use strict\";\r\n\r\n    const currentScript =\r\n        document.currentScript;\r\n\r\n    if (!currentScript) {\r\n        return;\r\n    }\r\n\r\n    const field =\r\n        currentScript.previousElementSibling;\r\n\r\n    if (\r\n        !field ||\r\n        !field.classList.contains(\r\n            \"ps-dot-magnifier-field\"\r\n        )\r\n    ) {\r\n        return;\r\n    }\r\n\r\n    const stage =\r\n        currentScript.closest(\r\n            \".ps-video-light-stage\"\r\n        );\r\n\r\n    if (!stage) {\r\n        return;\r\n    }\r\n\r\n    stage.insertBefore(\r\n        field,\r\n        stage.firstChild\r\n    );\r\n\r\n    const supportsHover =\r\n        window.matchMedia(\r\n            \"(hover: hover) and (pointer: fine)\"\r\n        ).matches;\r\n\r\n    if (!supportsHover) {\r\n        return;\r\n    }\r\n\r\n    const lens =\r\n        field.querySelector(\r\n            \".ps-dot-magnifier-field__lens\"\r\n        );\r\n\r\n    const context =\r\n        lens.getContext(\r\n            \"2d\",\r\n            {\r\n                alpha: true\r\n            }\r\n        );\r\n\r\n    if (!context) {\r\n        return;\r\n    }\r\n\r\n    let settings;\r\n\r\n    let targetX = 0;\r\n    let targetY = 0;\r\n\r\n    let currentX = 0;\r\n    let currentY = 0;\r\n\r\n    let animationFrame = 0;\r\n\r\n    let active = false;\r\n\r\n    function clamp(\r\n        value,\r\n        minimum,\r\n        maximum\r\n    ) {\r\n        return Math.max(\r\n            minimum,\r\n            Math.min(\r\n                maximum,\r\n                value\r\n            )\r\n        );\r\n    }\r\n\r\n    function smoothstep(\r\n        edgeStart,\r\n        edgeEnd,\r\n        value\r\n    ) {\r\n        const amount =\r\n            clamp(\r\n                (\r\n                    value - edgeStart\r\n                ) \/\r\n                (\r\n                    edgeEnd - edgeStart\r\n                ),\r\n                0,\r\n                1\r\n            );\r\n\r\n        return (\r\n            amount *\r\n            amount *\r\n            (\r\n                3 - 2 * amount\r\n            )\r\n        );\r\n    }\r\n\r\n    function readNumber(\r\n        styles,\r\n        property,\r\n        fallback\r\n    ) {\r\n        const value =\r\n            parseFloat(\r\n                styles.getPropertyValue(\r\n                    property\r\n                )\r\n            );\r\n\r\n        return Number.isFinite(value)\r\n            ? value\r\n            : fallback;\r\n    }\r\n\r\n    function readSettings() {\r\n        const styles =\r\n            getComputedStyle(stage);\r\n\r\n        const gap =\r\n            readNumber(\r\n                styles,\r\n                \"--ps-dot-gap\",\r\n                11\r\n            );\r\n\r\n        const magnifiedGap =\r\n            readNumber(\r\n                styles,\r\n                \"--ps-dot-magnified-gap\",\r\n                17\r\n            );\r\n\r\n        const radius =\r\n            readNumber(\r\n                styles,\r\n                \"--ps-dot-lens-size\",\r\n                175\r\n            );\r\n\r\n        const dotSize =\r\n            readNumber(\r\n                styles,\r\n                \"--ps-dot-size\",\r\n                0.8\r\n            );\r\n\r\n        const opacity =\r\n            readNumber(\r\n                styles,\r\n                \"--ps-dot-highlight-opacity\",\r\n                0.85\r\n            );\r\n\r\n        const falloff =\r\n            readNumber(\r\n                styles,\r\n                \"--ps-dot-falloff\",\r\n                2.4\r\n            );\r\n\r\n        const followSpeed =\r\n            readNumber(\r\n                styles,\r\n                \"--ps-dot-follow-speed\",\r\n                0.14\r\n            );\r\n\r\n        const color =\r\n            styles\r\n                .getPropertyValue(\r\n                    \"--ps-dot-highlight-rgb\"\r\n                )\r\n                .trim() ||\r\n            \"80, 245, 255\";\r\n\r\n        settings = {\r\n            gap:\r\n                Math.max(\r\n                    5,\r\n                    gap\r\n                ),\r\n\r\n            radius:\r\n                Math.max(\r\n                    30,\r\n                    radius\r\n                ),\r\n\r\n            dotSize:\r\n                Math.max(\r\n                    0.3,\r\n                    dotSize\r\n                ),\r\n\r\n            opacity:\r\n                clamp(\r\n                    opacity,\r\n                    0,\r\n                    1\r\n                ),\r\n\r\n            falloff:\r\n                clamp(\r\n                    falloff,\r\n                    0.7,\r\n                    6\r\n                ),\r\n\r\n            followSpeed:\r\n                clamp(\r\n                    followSpeed,\r\n                    0.04,\r\n                    0.45\r\n                ),\r\n\r\n            magnification:\r\n                Math.max(\r\n                    0,\r\n                    magnifiedGap \/ gap - 1\r\n                ),\r\n\r\n            color:\r\n                color\r\n        };\r\n\r\n        configureCanvas();\r\n    }\r\n\r\n    function configureCanvas() {\r\n        const padding = 8;\r\n\r\n        const diameter =\r\n            Math.ceil(\r\n                (\r\n                    settings.radius +\r\n                    padding\r\n                ) * 2\r\n            );\r\n\r\n        const pixelRatio =\r\n            Math.min(\r\n                window.devicePixelRatio || 1,\r\n                1.6\r\n            );\r\n\r\n        lens.style.width =\r\n            diameter + \"px\";\r\n\r\n        lens.style.height =\r\n            diameter + \"px\";\r\n\r\n        lens.width =\r\n            Math.ceil(\r\n                diameter *\r\n                pixelRatio\r\n            );\r\n\r\n        lens.height =\r\n            Math.ceil(\r\n                diameter *\r\n                pixelRatio\r\n            );\r\n\r\n        context.setTransform(\r\n            pixelRatio,\r\n            0,\r\n            0,\r\n            pixelRatio,\r\n            0,\r\n            0\r\n        );\r\n\r\n        settings.padding =\r\n            padding;\r\n\r\n        settings.diameter =\r\n            diameter;\r\n    }\r\n\r\n    function updateLensPosition() {\r\n        field.style.setProperty(\r\n            \"--ps-pointer-x\",\r\n            currentX.toFixed(2) + \"px\"\r\n        );\r\n\r\n        field.style.setProperty(\r\n            \"--ps-pointer-y\",\r\n            currentY.toFixed(2) + \"px\"\r\n        );\r\n\r\n        const positionX =\r\n            currentX -\r\n            settings.radius -\r\n            settings.padding;\r\n\r\n        const positionY =\r\n            currentY -\r\n            settings.radius -\r\n            settings.padding;\r\n\r\n        lens.style.transform =\r\n            \"translate3d(\" +\r\n            positionX.toFixed(2) +\r\n            \"px,\" +\r\n            positionY.toFixed(2) +\r\n            \"px,0)\";\r\n    }\r\n\r\n    function drawDistortedDots() {\r\n        const radius =\r\n            settings.radius;\r\n\r\n        const center =\r\n            radius +\r\n            settings.padding;\r\n\r\n        const gap =\r\n            settings.gap;\r\n\r\n        const gridOffset =\r\n            gap \/ 2;\r\n\r\n        context.clearRect(\r\n            0,\r\n            0,\r\n            settings.diameter,\r\n            settings.diameter\r\n        );\r\n\r\n        context.save();\r\n\r\n        context.beginPath();\r\n\r\n        context.arc(\r\n            center,\r\n            center,\r\n            radius,\r\n            0,\r\n            Math.PI * 2\r\n        );\r\n\r\n        context.clip();\r\n\r\n        context.fillStyle =\r\n            \"rgb(\" +\r\n            settings.color +\r\n            \")\";\r\n\r\n        const startX =\r\n            Math.floor(\r\n                (\r\n                    currentX -\r\n                    radius -\r\n                    gridOffset\r\n                ) \/\r\n                gap\r\n            ) *\r\n            gap +\r\n            gridOffset;\r\n\r\n        const startY =\r\n            Math.floor(\r\n                (\r\n                    currentY -\r\n                    radius -\r\n                    gridOffset\r\n                ) \/\r\n                gap\r\n            ) *\r\n            gap +\r\n            gridOffset;\r\n\r\n        const endX =\r\n            currentX +\r\n            radius;\r\n\r\n        const endY =\r\n            currentY +\r\n            radius;\r\n\r\n        for (\r\n            let dotY = startY;\r\n            dotY <= endY;\r\n            dotY += gap\r\n        ) {\r\n            for (\r\n                let dotX = startX;\r\n                dotX <= endX;\r\n                dotX += gap\r\n            ) {\r\n                const offsetX =\r\n                    dotX -\r\n                    currentX;\r\n\r\n                const offsetY =\r\n                    dotY -\r\n                    currentY;\r\n\r\n                const distance =\r\n                    Math.sqrt(\r\n                        offsetX * offsetX +\r\n                        offsetY * offsetY\r\n                    );\r\n\r\n                if (\r\n                    distance >= radius\r\n                ) {\r\n                    continue;\r\n                }\r\n\r\n                const normalizedDistance =\r\n                    distance \/\r\n                    radius;\r\n\r\n                \/*\r\n                   Dot spacing is widest at the center\r\n                   and gradually returns to normal\r\n                   toward the edge of the magnifier.\r\n                *\/\r\n\r\n                const distortionFalloff =\r\n                    Math.pow(\r\n                        1 - normalizedDistance,\r\n                        settings.falloff\r\n                    );\r\n\r\n                const displacement =\r\n                    1 +\r\n\r\n                    settings.magnification *\r\n                    distortionFalloff;\r\n\r\n                const distortedX =\r\n                    center +\r\n                    offsetX *\r\n                    displacement;\r\n\r\n                const distortedY =\r\n                    center +\r\n                    offsetY *\r\n                    displacement;\r\n\r\n                const edgeFade =\r\n                    1 -\r\n\r\n                    smoothstep(\r\n                        0.54,\r\n                        1,\r\n                        normalizedDistance\r\n                    );\r\n\r\n                const centerBrightness =\r\n                    0.48 +\r\n\r\n                    (\r\n                        1 -\r\n                        normalizedDistance\r\n                    ) *\r\n                    0.52;\r\n\r\n                context.globalAlpha =\r\n                    settings.opacity *\r\n                    edgeFade *\r\n                    centerBrightness;\r\n\r\n                if (\r\n                    context.globalAlpha <\r\n                    0.015\r\n                ) {\r\n                    continue;\r\n                }\r\n\r\n                context.beginPath();\r\n\r\n                context.arc(\r\n                    distortedX,\r\n                    distortedY,\r\n                    settings.dotSize,\r\n                    0,\r\n                    Math.PI * 2\r\n                );\r\n\r\n                context.fill();\r\n            }\r\n        }\r\n\r\n        context.restore();\r\n    }\r\n\r\n    function render() {\r\n        updateLensPosition();\r\n\r\n        drawDistortedDots();\r\n    }\r\n\r\n    function animate() {\r\n        currentX +=\r\n            (\r\n                targetX -\r\n                currentX\r\n            ) *\r\n            settings.followSpeed;\r\n\r\n        currentY +=\r\n            (\r\n                targetY -\r\n                currentY\r\n            ) *\r\n            settings.followSpeed;\r\n\r\n        render();\r\n\r\n        const stillMoving =\r\n            Math.abs(\r\n                targetX -\r\n                currentX\r\n            ) > 0.12 ||\r\n\r\n            Math.abs(\r\n                targetY -\r\n                currentY\r\n            ) > 0.12;\r\n\r\n        if (\r\n            active &&\r\n            stillMoving\r\n        ) {\r\n            animationFrame =\r\n                requestAnimationFrame(\r\n                    animate\r\n                );\r\n        } else {\r\n            animationFrame = 0;\r\n        }\r\n    }\r\n\r\n    function deactivate() {\r\n        active = false;\r\n\r\n        field.classList.remove(\r\n            \"is-active\"\r\n        );\r\n\r\n        if (animationFrame) {\r\n            cancelAnimationFrame(\r\n                animationFrame\r\n            );\r\n\r\n            animationFrame = 0;\r\n        }\r\n    }\r\n\r\n    function handlePointerMove(\r\n        event\r\n    ) {\r\n        if (\r\n            event.pointerType ===\r\n            \"touch\"\r\n        ) {\r\n            return;\r\n        }\r\n\r\n        const bounds =\r\n            field.getBoundingClientRect();\r\n\r\n        const inside =\r\n            event.clientX >= bounds.left &&\r\n            event.clientX <= bounds.right &&\r\n            event.clientY >= bounds.top &&\r\n            event.clientY <= bounds.bottom;\r\n\r\n        if (!inside) {\r\n            if (active) {\r\n                deactivate();\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        targetX =\r\n            event.clientX -\r\n            bounds.left;\r\n\r\n        targetY =\r\n            event.clientY -\r\n            bounds.top;\r\n\r\n        if (!active) {\r\n            currentX =\r\n                targetX;\r\n\r\n            currentY =\r\n                targetY;\r\n\r\n            active = true;\r\n\r\n            render();\r\n\r\n            field.classList.add(\r\n                \"is-active\"\r\n            );\r\n        }\r\n\r\n        if (!animationFrame) {\r\n            animationFrame =\r\n                requestAnimationFrame(\r\n                    animate\r\n                );\r\n        }\r\n    }\r\n\r\n    function handleResize() {\r\n        readSettings();\r\n\r\n        if (active) {\r\n            render();\r\n        }\r\n    }\r\n\r\n    readSettings();\r\n\r\n    window.addEventListener(\r\n        \"pointermove\",\r\n        handlePointerMove,\r\n        {\r\n            passive: true\r\n        }\r\n    );\r\n\r\n    window.addEventListener(\r\n        \"resize\",\r\n        handleResize,\r\n        {\r\n            passive: true\r\n        }\r\n    );\r\n\r\n    document.addEventListener(\r\n        \"mouseleave\",\r\n        deactivate\r\n    );\r\n\r\n    window.addEventListener(\r\n        \"blur\",\r\n        deactivate\r\n    );\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\n<\/div>\n\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Your Front DoorJust Went Global. &bull; Virtual Tours &bull; Google Maps &bull; Business Visibility See Tour Here 360 VirtualTours Google MapsOptimization version=&#8221;1.1&#8243; xml:space=&#8221;preserve&#8221; style=&#8221;&#8221; x=&#8221;0px&#8221; y=&#8221;0px&#8221; fill-rule=&#8221;evenodd&#8221; clip-rule=&#8221;evenodd&#8221; stroke-linejoin=&#8221;round&#8221; stroke-miterlimit=&#8221;2&#8243;&gt; Digital PresenceManagement LocationIntelligence version=&#8221;1.1&#8243; xml:space=&#8221;preserve&#8221; style=&#8221;&#8221; x=&#8221;0px&#8221; y=&#8221;0px&#8221; fill-rule=&#8221;evenodd&#8221; clip-rule=&#8221;evenodd&#8221; stroke-linejoin=&#8221;round&#8221; stroke-miterlimit=&#8221;2&#8243;&gt; BusinessVisibility ProfessionalHDR Photography Concepts&amp; Cinematography 360 VirtualTours Google MapsOptimization version=&#8221;1.1&#8243; xml:space=&#8221;preserve&#8221; style=&#8221;&#8221; x=&#8221;0px&#8221; [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":63,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"footnotes":""},"class_list":["post-51","page","type-page","status-publish","has-post-thumbnail","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Home - PanoSky Systems<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/panosky.com\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Home - PanoSky Systems\" \/>\n<meta property=\"og:description\" content=\"Your Front DoorJust Went Global. &bull; Virtual Tours &bull; Google Maps &bull; Business Visibility See Tour Here 360 VirtualTours Google MapsOptimization version=&#8221;1.1&#8243; xml:space=&#8221;preserve&#8221; style=&#8221;&#8221; x=&#8221;0px&#8221; y=&#8221;0px&#8221; fill-rule=&#8221;evenodd&#8221; clip-rule=&#8221;evenodd&#8221; stroke-linejoin=&#8221;round&#8221; stroke-miterlimit=&#8221;2&#8243;&gt; Digital PresenceManagement LocationIntelligence version=&#8221;1.1&#8243; xml:space=&#8221;preserve&#8221; style=&#8221;&#8221; x=&#8221;0px&#8221; y=&#8221;0px&#8221; fill-rule=&#8221;evenodd&#8221; clip-rule=&#8221;evenodd&#8221; stroke-linejoin=&#8221;round&#8221; stroke-miterlimit=&#8221;2&#8243;&gt; BusinessVisibility ProfessionalHDR Photography Concepts&amp; Cinematography 360 VirtualTours Google MapsOptimization version=&#8221;1.1&#8243; xml:space=&#8221;preserve&#8221; style=&#8221;&#8221; x=&#8221;0px&#8221; [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/panosky.com\/\" \/>\n<meta property=\"og:site_name\" content=\"PanoSky Systems\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-25T07:56:10+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/panosky.com\/wp-content\/uploads\/2026\/07\/Home.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"400\" \/>\n\t<meta property=\"og:image:height\" content=\"380\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"60 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/panosky.com\\\/\",\"url\":\"https:\\\/\\\/panosky.com\\\/\",\"name\":\"Home - PanoSky Systems\",\"isPartOf\":{\"@id\":\"http:\\\/\\\/beepano.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/panosky.com\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/panosky.com\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/panosky.com\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/Home.jpg\",\"datePublished\":\"2026-07-09T07:32:19+00:00\",\"dateModified\":\"2026-08-25T07:56:10+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/panosky.com\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/panosky.com\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/panosky.com\\\/#primaryimage\",\"url\":\"https:\\\/\\\/panosky.com\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/Home.jpg\",\"contentUrl\":\"https:\\\/\\\/panosky.com\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/Home.jpg\",\"width\":400,\"height\":380},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/panosky.com\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/panosky.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Home\"}]},{\"@type\":\"WebSite\",\"@id\":\"http:\\\/\\\/beepano.com\\\/#website\",\"url\":\"http:\\\/\\\/beepano.com\\\/\",\"name\":\"PanoSky Systems\",\"description\":\"\",\"publisher\":{\"@id\":\"http:\\\/\\\/beepano.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"http:\\\/\\\/beepano.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"http:\\\/\\\/beepano.com\\\/#organization\",\"name\":\"PanoSky Systems\",\"url\":\"http:\\\/\\\/beepano.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"http:\\\/\\\/beepano.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/panosky.com\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/PanoSky-Logo-for-website-temp-01-1.png\",\"contentUrl\":\"https:\\\/\\\/panosky.com\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/PanoSky-Logo-for-website-temp-01-1.png\",\"width\":1024,\"height\":221,\"caption\":\"PanoSky Systems\"},\"image\":{\"@id\":\"http:\\\/\\\/beepano.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Home - PanoSky Systems","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/panosky.com\/","og_locale":"en_US","og_type":"article","og_title":"Home - PanoSky Systems","og_description":"Your Front DoorJust Went Global. &bull; Virtual Tours &bull; Google Maps &bull; Business Visibility See Tour Here 360 VirtualTours Google MapsOptimization version=&#8221;1.1&#8243; xml:space=&#8221;preserve&#8221; style=&#8221;&#8221; x=&#8221;0px&#8221; y=&#8221;0px&#8221; fill-rule=&#8221;evenodd&#8221; clip-rule=&#8221;evenodd&#8221; stroke-linejoin=&#8221;round&#8221; stroke-miterlimit=&#8221;2&#8243;&gt; Digital PresenceManagement LocationIntelligence version=&#8221;1.1&#8243; xml:space=&#8221;preserve&#8221; style=&#8221;&#8221; x=&#8221;0px&#8221; y=&#8221;0px&#8221; fill-rule=&#8221;evenodd&#8221; clip-rule=&#8221;evenodd&#8221; stroke-linejoin=&#8221;round&#8221; stroke-miterlimit=&#8221;2&#8243;&gt; BusinessVisibility ProfessionalHDR Photography Concepts&amp; Cinematography 360 VirtualTours Google MapsOptimization version=&#8221;1.1&#8243; xml:space=&#8221;preserve&#8221; style=&#8221;&#8221; x=&#8221;0px&#8221; [&hellip;]","og_url":"https:\/\/panosky.com\/","og_site_name":"PanoSky Systems","article_modified_time":"2026-08-25T07:56:10+00:00","og_image":[{"width":400,"height":380,"url":"https:\/\/panosky.com\/wp-content\/uploads\/2026\/07\/Home.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"60 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/panosky.com\/","url":"https:\/\/panosky.com\/","name":"Home - PanoSky Systems","isPartOf":{"@id":"http:\/\/beepano.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/panosky.com\/#primaryimage"},"image":{"@id":"https:\/\/panosky.com\/#primaryimage"},"thumbnailUrl":"https:\/\/panosky.com\/wp-content\/uploads\/2026\/07\/Home.jpg","datePublished":"2026-07-09T07:32:19+00:00","dateModified":"2026-08-25T07:56:10+00:00","breadcrumb":{"@id":"https:\/\/panosky.com\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/panosky.com\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/panosky.com\/#primaryimage","url":"https:\/\/panosky.com\/wp-content\/uploads\/2026\/07\/Home.jpg","contentUrl":"https:\/\/panosky.com\/wp-content\/uploads\/2026\/07\/Home.jpg","width":400,"height":380},{"@type":"BreadcrumbList","@id":"https:\/\/panosky.com\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/panosky.com\/"},{"@type":"ListItem","position":2,"name":"Home"}]},{"@type":"WebSite","@id":"http:\/\/beepano.com\/#website","url":"http:\/\/beepano.com\/","name":"PanoSky Systems","description":"","publisher":{"@id":"http:\/\/beepano.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"http:\/\/beepano.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"http:\/\/beepano.com\/#organization","name":"PanoSky Systems","url":"http:\/\/beepano.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"http:\/\/beepano.com\/#\/schema\/logo\/image\/","url":"https:\/\/panosky.com\/wp-content\/uploads\/2026\/07\/PanoSky-Logo-for-website-temp-01-1.png","contentUrl":"https:\/\/panosky.com\/wp-content\/uploads\/2026\/07\/PanoSky-Logo-for-website-temp-01-1.png","width":1024,"height":221,"caption":"PanoSky Systems"},"image":{"@id":"http:\/\/beepano.com\/#\/schema\/logo\/image\/"}}]}},"brizy_media":[],"_links":{"self":[{"href":"https:\/\/panosky.com\/index.php?rest_route=\/wp\/v2\/pages\/51","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/panosky.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/panosky.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/panosky.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/panosky.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=51"}],"version-history":[{"count":5,"href":"https:\/\/panosky.com\/index.php?rest_route=\/wp\/v2\/pages\/51\/revisions"}],"predecessor-version":[{"id":2915,"href":"https:\/\/panosky.com\/index.php?rest_route=\/wp\/v2\/pages\/51\/revisions\/2915"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/panosky.com\/index.php?rest_route=\/wp\/v2\/media\/63"}],"wp:attachment":[{"href":"https:\/\/panosky.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=51"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}