{"version":3,"sources":["../src/utils.ts","../src/constants.ts","../src/gradient/webgl-context.ts","../src/minigl/attribute.ts","../src/minigl/mesh.ts","../src/minigl/material.ts","../src/minigl/plane-geometry.ts","../src/minigl/uniform.ts","../src/minigl/index.ts","../src/shaders.ts","../src/gradient/instance-timers.ts","../src/gradient/mesh-gradient.ts"],"names":["normalizeColor","hexCode","red","green","blue","hslToHex","hIn","s","l","hp","c","x","r1","g1","b1","m","r","g","b","parseHexColor","hexValue","trimmed","body","expanded","parsed","genRandomColors","rand","colors","i","h","MAX_FRAME_DELTA","DEFAULT_ANIMATION_SPEED","LOADED_CLASS_DELAY","RESIZE_THROTTLE_DELAY","DEFAULT_DENSITY","DEFAULT_ZOOM","DEFAULT_ROTATION","DEFAULT_PRESET_NAME","DEFAULT_WIREFRAME","DEFAULT_PAUSE_OBSERVER_OPTIONS","DEFAULT_ACTIVE_TOGGLE_COLORS","DEFAULT_APPEARANCE_MODE","DEFAULT_APPEARANCE_DURATION","DEFAULT_TRANSITION_DURATION","DEFAULT_AMP","DEFAULT_SEED","DEFAULT_FREQ_X","DEFAULT_FREQ_Y","SMALL_SCREEN_SHADOW_POWER","LARGE_SCREEN_SHADOW_POWER","SMALL_SCREEN_WIDTH_THRESHOLD","DEFAULT_FALLBACK_COLORS","CSS_GRADIENT_VARS","DEFAULT_ACTIVE_COLORS","DEBUG_QUERY_STRING","DEFAULT_ATTRIBUTES","acquireWebGLContext","canvas","contextAttributes","attrs","probeWebGLSupport","MiniGlAttribute","gl","config","__publicField","name","program","location","MiniGlMesh","host","geometry","material","e","attribute","item","MiniGlMaterial","vertexShaders","fragments","uniforms","getShaderByType","type","source","shader","getUniformVariableDeclarations","u","shaderKind","uniform","value","prefix","context","n","k","v","MiniGlPlaneGeometry","width","height","orientation","yy","xx","vi","o","segmentWidth","segmentHeight","yIndex","ty","xIndex","rx","MiniGlUniform","ctx","fn","length","arr","nameNoPrefix","members","memberName","memberUniform","lenSuffix","MiniGl","options","isDebugEnabled","self","args","message","currentTime","timestamp","padding","boundGl","runtime","vertexShader","fragmentShader","identityMatrix","cssWidth","cssHeight","pixelRatio","safePr","bufW","bufH","y","z","near","far","mesh","noise","blend","vertex","fragment","SHADERS","InstanceTimers","ms","id","t","U_TIME_WRAP","MeshGradient","selector","opt","forcedPr","toggleColors","transition","patch","entries","key","cold","touched","resizeNeeded","toggle","pr","cfg","merged","freq","base","first","stack","idx","wrapper","global","vert","layer","gen","duration","speed","enabled","contextLost","defaultProperties","delta","event","err","error","rect","xc","yc","cap","fallback","entry","isIntersecting","minigl","minInterval","resolve","reject","startTime","checkCssVars","elapsed","interval","color","colorValue","cssVars","cssPropertyName","randomColors"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { MeshGradientColorsConfig, Vec3 } from './types';\n\n/**\n * Converts HEX color to normalized RGB array (0-1)\n * @param hexCode - HEX color code\n * @returns RGB array [r, g, b] in range 0-1\n */\nexport function normalizeColor(hexCode: number): Vec3 {\n  const red = ((hexCode >> 16) & 255) / 255;\n  const green = ((hexCode >> 8) & 255) / 255;\n  const blue = (255 & hexCode) / 255;\n\n  return [red, green, blue];\n}\n\n/** HSL (0–360, 0–1, 0–1) → sRGB hex `#rrggbb`. */\nfunction hslToHex(hIn: number, s: number, l: number): string {\n  const h = ((hIn % 360) + 360) % 360;\n  const hp = h / 60;\n  const c = (1 - Math.abs(2 * l - 1)) * s;\n  const x = c * (1 - Math.abs((hp % 2) - 1));\n  let r1 = 0;\n  let g1 = 0;\n  let b1 = 0;\n\n  if (hp >= 0 && hp < 1) [r1, g1, b1] = [c, x, 0];\n  else if (hp < 2) [r1, g1, b1] = [x, c, 0];\n  else if (hp < 3) [r1, g1, b1] = [0, c, x];\n  else if (hp < 4) [r1, g1, b1] = [0, x, c];\n  else if (hp < 5) [r1, g1, b1] = [x, 0, c];\n  else [r1, g1, b1] = [c, 0, x];\n\n  const m = l - c / 2;\n  const r = Math.round((r1 + m) * 255);\n  const g = Math.round((g1 + m) * 255);\n  const b = Math.round((b1 + m) * 255);\n\n  return `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${b.toString(16).padStart(2, '0')}`;\n}\n\n/**\n * Parses hex color string and handles different formats\n * @param hexValue - hex color value from CSS\n * @returns parsed integer or null if invalid\n */\nexport function parseHexColor(hexValue: string): number | null {\n  const trimmed = hexValue.trim();\n\n  if (!(trimmed && trimmed.startsWith('#'))) return null;\n\n  const body = trimmed.slice(1);\n\n  /** #RGB → #RRGGBB */\n  if (body.length === 3) {\n    const expanded = body\n      .split('')\n      .map((c) => c + c)\n      .join('');\n\n    const parsed = Number.parseInt(expanded, 16);\n\n    return Number.isFinite(parsed) ? parsed : null;\n  }\n\n  /** #RRGGBB or #RRGGBBAA (alpha ignored for mesh colors) */\n  if (body.length === 8) {\n    const parsed = Number.parseInt(body.slice(0, 6), 16);\n\n    return Number.isFinite(parsed) ? parsed : null;\n  }\n\n  if (body.length === 6) {\n    const parsed = Number.parseInt(body, 16);\n\n    return Number.isFinite(parsed) ? parsed : null;\n  }\n\n  return null;\n}\n\n/**\n * Generates four saturated colors in hex (HSL-based for more pleasing palettes).\n */\nexport function genRandomColors(rand: () => number = Math.random): MeshGradientColorsConfig {\n  const colors: string[] = [];\n\n  for (let i = 0; i < 4; i++) {\n    const h = rand() * 360;\n    const s = 0.55 + rand() * 0.35;\n    const l = 0.42 + rand() * 0.22;\n\n    colors.push(hslToHex(h, s, l));\n  }\n\n  return colors as MeshGradientColorsConfig;\n}\n","import type { MeshGradientToggleColorsConfig, Vec4 } from './types';\n\n// Animation and timing constants\nexport const DEFAULT_TIME_VALUE = 1253106;\nexport const MAX_FRAME_DELTA = 1000 / 15; // 15 FPS limit\nexport const DEFAULT_ANIMATION_SPEED = 1.0;\n\nexport const LOADED_CLASS_DELAY = 3000;\n\n// Resize throttling constants\nexport const RESIZE_THROTTLE_DELAY = 300; // milliseconds\n\n// Gradient configuration constants\nexport const DEFAULT_DENSITY: [number, number] = [0.06, 0.16];\nexport const DEFAULT_ZOOM = 1;\nexport const DEFAULT_ROTATION = 0;\nexport const DEFAULT_PRESET_NAME = '';\nexport const DEFAULT_WIREFRAME = false;\n\nexport const DEFAULT_PAUSE_OBSERVER_OPTIONS: IntersectionObserverInit = {\n  root: null,\n  rootMargin: '0px',\n  threshold: 0.05,\n};\n\nexport const DEFAULT_ACTIVE_TOGGLE_COLORS: MeshGradientToggleColorsConfig = {\n  1: true,\n  2: true,\n  3: true,\n  4: true,\n};\n\nexport const DEFAULT_APPEARANCE_MODE = 'smooth';\nexport const DEFAULT_APPEARANCE_DURATION = 300;\nexport const DEFAULT_TRANSITION_DURATION = 300;\n\n// Noise and animation constants\nexport const DEFAULT_AMP = 320;\nexport const DEFAULT_SEED = 5;\nexport const DEFAULT_FREQ_X = 14e-5;\nexport const DEFAULT_FREQ_Y = 29e-5;\nexport const DEFAULT_FREQ_DELTA = 1e-5;\n\nexport const SMALL_SCREEN_SHADOW_POWER = 5;\nexport const LARGE_SCREEN_SHADOW_POWER = 6;\nexport const SMALL_SCREEN_WIDTH_THRESHOLD = 600;\n\n// Default colors (fallback when CSS vars are not available)\nexport const DEFAULT_FALLBACK_COLORS = [16711680, 16711680, 16711935, 65280, 255];\n\n// CSS variable names\nexport const CSS_GRADIENT_VARS = [\n  '--mesh-gradient-color-1',\n  '--mesh-gradient-color-2',\n  '--mesh-gradient-color-3',\n  '--mesh-gradient-color-4',\n] as const;\n\n// Active colors default\nexport const DEFAULT_ACTIVE_COLORS: Vec4 = [1, 1, 1, 1];\n\n// WebGL debug query\nexport const DEBUG_QUERY_STRING = 'debug=webgl';\n","/** Default WebGL context attributes merged with user overrides. */\nconst DEFAULT_ATTRIBUTES: WebGLContextAttributes = {\n  alpha: true,\n  antialias: true,\n  premultipliedAlpha: true,\n  preserveDrawingBuffer: false,\n};\n\n/**\n * Returns a usable WebGL1-compatible rendering context (`webgl2` first — same shaders work on compliant browsers — then legacy).\n */\nexport function acquireWebGLContext(canvas: HTMLCanvasElement, contextAttributes?: WebGLContextAttributes): WebGLRenderingContext | null {\n  const attrs = { ...DEFAULT_ATTRIBUTES, ...contextAttributes };\n\n  return (\n    (canvas.getContext('webgl2', attrs) as WebGLRenderingContext | null) ??\n    (canvas.getContext('webgl', attrs) as WebGLRenderingContext | null) ??\n    (canvas.getContext('experimental-webgl', attrs) as WebGLRenderingContext | null)\n  );\n}\n\n/** Feature-detect without throwing (SSR-safe when guarded by caller). */\nexport function probeWebGLSupport(contextAttributes?: WebGLContextAttributes): boolean {\n  if (typeof document === 'undefined') return false;\n  try {\n    const canvas = document.createElement('canvas');\n    const ctx = acquireWebGLContext(canvas, {\n      ...contextAttributes,\n      failIfMajorPerformanceCaveat: false,\n    });\n\n    return ctx !== null;\n  } catch {\n    return false;\n  }\n}\n","import type { MiniGlAttribute as MiniGlAttributeIface, AttributeConfig } from '../types';\n\nexport class MiniGlAttribute implements MiniGlAttributeIface {\n  private readonly gl: WebGLRenderingContext;\n  type: number;\n  normalized: boolean;\n  buffer: WebGLBuffer | null;\n  target: number;\n  size: number;\n  values?: Float32Array | Uint16Array;\n\n  constructor(gl: WebGLRenderingContext, config: AttributeConfig) {\n    this.gl = gl;\n    this.type = gl.FLOAT;\n    this.normalized = false;\n    this.buffer = gl.createBuffer();\n    this.target = config.target ?? gl.ARRAY_BUFFER;\n    this.size = config.size ?? 1;\n    if (config.type !== undefined) {\n      this.type = config.type;\n    }\n    this.update();\n  }\n\n  update(): void {\n    if (typeof this.values !== 'undefined') {\n      const gl = this.gl;\n\n      gl.bindBuffer(this.target, this.buffer);\n      gl.bufferData(this.target, this.values, gl.STATIC_DRAW);\n    }\n  }\n\n  attach(name: string, program: WebGLProgram): number {\n    const gl = this.gl;\n    const location = gl.getAttribLocation(program, name);\n\n    if (this.target === gl.ARRAY_BUFFER) {\n      gl.enableVertexAttribArray(location);\n      gl.vertexAttribPointer(location, this.size, this.type, this.normalized, 0, 0);\n    }\n\n    return location;\n  }\n\n  use(location: number): void {\n    const gl = this.gl;\n\n    gl.bindBuffer(this.target, this.buffer);\n    if (this.target === gl.ARRAY_BUFFER) {\n      gl.enableVertexAttribArray(location);\n      gl.vertexAttribPointer(location, this.size, this.type, this.normalized, 0, 0);\n    }\n  }\n}\n","import type {\n  MiniGlMesh as MiniGlMeshIface,\n  MiniGlMaterial as MiniGlMaterialIface,\n  MiniGlPlaneGeometry as MiniGlPlaneGeometryIface,\n  MiniGlAttribute as MiniGlAttributeIface,\n  MiniGlUniform as MiniGlUniformIface,\n} from '../types';\nimport type { MiniGlRuntime } from './runtime';\n\nexport class MiniGlMesh implements MiniGlMeshIface {\n  geometry: MiniGlPlaneGeometryIface;\n  material: MiniGlMaterialIface;\n  wireframe: boolean = false;\n  attributeInstances: Array<{\n    attribute: MiniGlAttributeIface;\n    location: number;\n  }> = [];\n\n  private readonly gl: WebGLRenderingContext;\n  private readonly host: MiniGlRuntime;\n  private readonly debugFn: (...args: string[]) => void;\n\n  constructor(host: MiniGlRuntime, geometry: MiniGlPlaneGeometryIface, material: MiniGlMaterialIface) {\n    this.host = host;\n    this.gl = host.gl;\n    this.debugFn = host.debug;\n\n    this.geometry = geometry;\n    this.material = material;\n    this.wireframe = false;\n    this.attributeInstances = [];\n\n    Object.entries(this.geometry.attributes).forEach(([e, attribute]) => {\n      this.attributeInstances.push({\n        attribute,\n        location: attribute.attach(e, this.material.program),\n      });\n    });\n\n    this.host.meshes.push(this);\n    this.debugFn('Mesh.constructor');\n  }\n\n  draw(): void {\n    const gl = this.gl;\n\n    gl.useProgram(this.material.program);\n    this.material.uniformInstances.forEach((item: { uniform: MiniGlUniformIface; location: WebGLUniformLocation | null }) =>\n      item.uniform.update(item.location),\n    );\n    this.attributeInstances.forEach(({ attribute, location }) => attribute.use(location));\n    gl.drawElements(this.wireframe ? gl.LINES : gl.TRIANGLES, this.geometry.attributes.index.values?.length || 0, gl.UNSIGNED_SHORT, 0);\n  }\n\n  remove(): void {\n    this.host.meshes = this.host.meshes.filter((m) => m !== this);\n  }\n}\n","import type { MiniGlMaterial as MiniGlMaterialIface, MiniGlUniform as MiniGlUniformIface } from '../types';\nimport type { MiniGlRuntime } from './runtime';\n\nexport class MiniGlMaterial implements MiniGlMaterialIface {\n  vertexSource: string;\n  Source: string;\n  vertexShader!: WebGLShader;\n  fragmentShader!: WebGLShader;\n  program!: WebGLProgram;\n  uniforms: Record<string, MiniGlUniformIface>;\n  uniformInstances: Array<{\n    uniform: MiniGlUniformIface;\n    location: WebGLUniformLocation | null;\n  }>;\n\n  private readonly gl: WebGLRenderingContext;\n  private readonly debugFn: (...args: string[]) => void;\n\n  constructor(host: MiniGlRuntime, vertexShaders: string, fragments: string, uniforms: Record<string, MiniGlUniformIface> = {}) {\n    this.gl = host.gl;\n    this.debugFn = host.debug;\n    const gl = this.gl;\n\n    this.uniforms = uniforms;\n    this.uniformInstances = [];\n\n    const getShaderByType = (type: number, source: string): WebGLShader => {\n      const shader = gl.createShader(type);\n\n      if (!shader) throw new Error('Cannot create shader');\n      gl.shaderSource(shader, source);\n      gl.compileShader(shader);\n      if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n        // eslint-disable-next-line no-console\n        console.error(gl.getShaderInfoLog(shader));\n      }\n      this.debugFn('Material.compileShaderSource', source);\n\n      return shader;\n    };\n\n    const getUniformVariableDeclarations = (u: Record<string, MiniGlUniformIface>, shaderKind: 'vertex' | 'fragment') =>\n      Object.entries(u)\n        .map(([uniform, value]) => value.getDeclaration(uniform, shaderKind))\n        .join('\\n');\n\n    const prefix = `\n              precision highp float;\n            `;\n\n    this.vertexSource = `${prefix}\n              attribute vec4 position;\n              attribute vec2 uv;\n              attribute vec2 uvNorm;\n              ${getUniformVariableDeclarations(host.commonUniforms, 'vertex')}\n              ${getUniformVariableDeclarations(uniforms, 'vertex')}\n              ${vertexShaders}\n            `;\n\n    this.Source = `${prefix}\n              ${getUniformVariableDeclarations(host.commonUniforms, 'fragment')}\n              ${getUniformVariableDeclarations(uniforms, 'fragment')}\n              ${fragments}\n            `;\n\n    this.vertexShader = getShaderByType(gl.VERTEX_SHADER, this.vertexSource);\n    this.fragmentShader = getShaderByType(gl.FRAGMENT_SHADER, this.Source);\n\n    const program = gl.createProgram();\n\n    if (!program) throw new Error('Cannot create program');\n    this.program = program;\n    gl.attachShader(this.program, this.vertexShader);\n    gl.attachShader(this.program, this.fragmentShader);\n    gl.linkProgram(this.program);\n    if (!gl.getProgramParameter(this.program, gl.LINK_STATUS)) {\n      // eslint-disable-next-line no-console\n      console.error(gl.getProgramInfoLog(this.program));\n    }\n    gl.useProgram(this.program);\n\n    this.attachUniforms(undefined, host.commonUniforms);\n    this.attachUniforms(undefined, this.uniforms);\n  }\n\n  attachUniforms(name: string | undefined, uniforms: MiniGlUniformIface | Record<string, MiniGlUniformIface>): void {\n    const material = this;\n    const context = this.gl;\n\n    if (typeof name === 'undefined') {\n      if (uniforms && typeof uniforms === 'object' && !('type' in uniforms)) {\n        Object.entries(uniforms as Record<string, MiniGlUniformIface>).forEach(([n, uniform]) => {\n          material.attachUniforms(n, uniform);\n        });\n\n        return;\n      }\n    }\n\n    const uniform = uniforms as MiniGlUniformIface;\n\n    if (uniform.type === 'array') {\n      (uniform.value as MiniGlUniformIface[]).forEach((u: MiniGlUniformIface, i: number) => {\n        material.attachUniforms(`${name}[${i}]`, u);\n      });\n\n      return;\n    }\n\n    if (uniform.type === 'struct') {\n      Object.entries(uniform.value as Record<string, MiniGlUniformIface>).forEach(([k, v]) => {\n        material.attachUniforms(`${name}.${k}`, v);\n      });\n\n      return;\n    }\n\n    this.debugFn('Material.attachUniforms', name || '', uniform.type);\n    material.uniformInstances.push({\n      uniform,\n      location: context.getUniformLocation(material.program, name!),\n    });\n  }\n}\n","import type { MiniGlPlaneGeometry as MiniGlPlaneGeometryIface, MiniGlAttribute as MiniGlAttributeIface } from '../types';\nimport type { MiniGlRuntime } from './runtime';\n\nimport { MiniGlAttribute } from './attribute';\n\nexport class MiniGlPlaneGeometry implements MiniGlPlaneGeometryIface {\n  attributes: {\n    position: MiniGlAttributeIface;\n    uv: MiniGlAttributeIface;\n    uvNorm: MiniGlAttributeIface;\n    index: MiniGlAttributeIface;\n    [k: string]: MiniGlAttributeIface;\n  };\n  xSegCount!: number;\n  ySegCount!: number;\n  vertexCount!: number;\n  quadCount!: number;\n  width!: number;\n  height!: number;\n  orientation!: string;\n\n  private readonly gl: WebGLRenderingContext;\n  private readonly debugFn: (...args: string[]) => void;\n\n  constructor(host: MiniGlRuntime, width: number = 1, height: number = 1, n: number = 1, i: number = 1, orientation: string = 'xz') {\n    this.gl = host.gl;\n    this.debugFn = host.debug;\n    const gl = this.gl;\n\n    this.attributes = {\n      position: new MiniGlAttribute(gl, {\n        target: gl.ARRAY_BUFFER,\n        size: 3,\n      }),\n      uv: new MiniGlAttribute(gl, {\n        target: gl.ARRAY_BUFFER,\n        size: 2,\n      }),\n      uvNorm: new MiniGlAttribute(gl, {\n        target: gl.ARRAY_BUFFER,\n        size: 2,\n      }),\n      index: new MiniGlAttribute(gl, {\n        target: gl.ELEMENT_ARRAY_BUFFER,\n        size: 3,\n        type: gl.UNSIGNED_SHORT,\n      }),\n    };\n    this.setTopology(n, i);\n    this.setSize(width, height, orientation);\n  }\n\n  setTopology(e: number = 1, t: number = 1): void {\n    this.xSegCount = e;\n    this.ySegCount = t;\n    this.vertexCount = (this.xSegCount + 1) * (this.ySegCount + 1);\n    this.quadCount = this.xSegCount * this.ySegCount * 2;\n    this.attributes.uv.values = new Float32Array(2 * this.vertexCount);\n    this.attributes.uvNorm.values = new Float32Array(2 * this.vertexCount);\n    this.attributes.index.values = new Uint16Array(3 * this.quadCount);\n\n    for (let yy = 0; yy <= this.ySegCount; yy++) {\n      for (let xx = 0; xx <= this.xSegCount; xx++) {\n        const vi = yy * (this.xSegCount + 1) + xx;\n\n        this.attributes.uv.values[2 * vi] = xx / this.xSegCount;\n        this.attributes.uv.values[2 * vi + 1] = 1 - yy / this.ySegCount;\n\n        this.attributes.uvNorm.values[2 * vi] = (xx / this.xSegCount) * 2 - 1;\n        this.attributes.uvNorm.values[2 * vi + 1] = 1 - (yy / this.ySegCount) * 2;\n\n        if (xx < this.xSegCount && yy < this.ySegCount) {\n          const s = yy * this.xSegCount + xx;\n\n          this.attributes.index.values[6 * s] = vi;\n          this.attributes.index.values[6 * s + 1] = vi + 1 + this.xSegCount;\n          this.attributes.index.values[6 * s + 2] = vi + 1;\n          this.attributes.index.values[6 * s + 3] = vi + 1;\n          this.attributes.index.values[6 * s + 4] = vi + 1 + this.xSegCount;\n          this.attributes.index.values[6 * s + 5] = vi + 2 + this.xSegCount;\n        }\n      }\n    }\n\n    this.attributes.uv.update();\n    this.attributes.uvNorm.update();\n    this.attributes.index.update();\n    this.debugFn('Geometry.setTopology');\n  }\n\n  setSize(width: number = 1, height: number = 1, orientation: string = 'xz'): void {\n    this.width = width;\n    this.height = height;\n    this.orientation = orientation;\n\n    if (!(this.attributes.position.values && this.attributes.position.values.length === 3 * this.vertexCount)) {\n      this.attributes.position.values = new Float32Array(3 * this.vertexCount);\n    }\n\n    const o = width / -2;\n    const r = height / -2;\n    const segmentWidth = width / this.xSegCount;\n    const segmentHeight = height / this.ySegCount;\n\n    for (let yIndex = 0; yIndex <= this.ySegCount; yIndex++) {\n      const ty = r + yIndex * segmentHeight;\n\n      for (let xIndex = 0; xIndex <= this.xSegCount; xIndex++) {\n        const rx = o + xIndex * segmentWidth;\n        const l = yIndex * (this.xSegCount + 1) + xIndex;\n\n        this.attributes.position.values[3 * l + 'xyz'.indexOf(orientation[0])] = rx;\n        this.attributes.position.values[3 * l + 'xyz'.indexOf(orientation[1])] = -ty;\n      }\n    }\n\n    this.attributes.position.update();\n    this.debugFn('Geometry.setSize');\n  }\n}\n","import type { MiniGlUniform as MiniGlUniformIface, UniformConfig } from '../types';\n\nexport class MiniGlUniform implements MiniGlUniformIface {\n  private readonly gl: WebGLRenderingContext;\n  type: string;\n  value: unknown;\n  transpose?: boolean;\n  excludeFrom?: 'vertex' | 'fragment';\n  typeFn: string;\n\n  constructor(gl: WebGLRenderingContext, config: UniformConfig) {\n    this.gl = gl;\n    this.type = 'float';\n    Object.assign(this, config);\n    this.typeFn =\n      (\n        {\n          float: '1f',\n          int: '1i',\n          vec2: '2fv',\n          vec3: '3fv',\n          vec4: '4fv',\n          mat4: 'Matrix4fv',\n        } as Record<string, string>\n      )[this.type] || '1f';\n  }\n\n  update(location?: WebGLUniformLocation | null): void {\n    if (typeof this.value === 'undefined') return;\n\n    const ctx = this.gl;\n\n    if (this.typeFn.startsWith('Matrix')) {\n      const fn = (ctx as unknown as Record<string, (...args: unknown[]) => void>)['uniform' + this.typeFn];\n\n      if (typeof fn === 'function') {\n        fn.call(ctx, location, this.transpose ?? false, this.value);\n      }\n\n      return;\n    }\n\n    const fn = (ctx as unknown as Record<string, (...args: unknown[]) => void>)['uniform' + this.typeFn];\n\n    if (typeof fn === 'function') {\n      fn.call(ctx, location, this.value);\n    }\n  }\n\n  getDeclaration(name: string, type: 'vertex' | 'fragment', length: number = 0): string {\n    if (this.excludeFrom === type) return '';\n\n    if (this.type === 'array') {\n      const arr = this.value as MiniGlUniformIface[];\n      const first = arr[0];\n      const innerDecl = first.getDeclaration(name, type, arr.length);\n\n      return innerDecl + `\\nconst int ${name}_length = ${arr.length};`;\n    }\n\n    if (this.type === 'struct') {\n      let nameNoPrefix = name.replace(/^u_/, '');\n\n      nameNoPrefix = nameNoPrefix.charAt(0).toUpperCase() + nameNoPrefix.slice(1);\n      const members = Object.entries(this.value as Record<string, MiniGlUniformIface>)\n        .map(([memberName, memberUniform]) => memberUniform.getDeclaration(memberName, type).replace(/^uniform\\s*/, ''))\n        .join('\\n');\n      const lenSuffix = length > 0 ? `[${length}]` : '';\n\n      return `struct ${nameNoPrefix} {\\n${members}\\n};\\nuniform ${nameNoPrefix} ${name}${lenSuffix};`;\n    }\n\n    const lenSuffix = length > 0 ? `[${length}]` : '';\n\n    return `uniform ${this.type} ${name}${lenSuffix};`;\n  }\n}\n","import type {\n  MiniGlUniform,\n  MiniGlMesh,\n  MiniGlPlaneGeometry,\n  MiniGlMaterial,\n  MiniGlUniformConstructor,\n  MiniGlAttributeConstructor,\n  MiniGlPlaneGeometryConstructor,\n  MiniGlMaterialConstructor,\n  MiniGlMeshConstructor,\n  UniformConfig,\n  AttributeConfig,\n} from '../types';\nimport type { MiniGlRuntime } from './runtime';\n\nimport * as CORE_CONSTANTS from '../constants';\nimport { acquireWebGLContext } from '../gradient/webgl-context';\n\nimport { MiniGlAttribute as MiniGlAttributeBase } from './attribute';\nimport { MiniGlMesh as MiniGlMeshBase } from './mesh';\nimport { MiniGlMaterial as MiniGlMaterialBase } from './material';\nimport { MiniGlPlaneGeometry as MiniGlPlaneGeometryBase } from './plane-geometry';\nimport { MiniGlUniform as MiniGlUniformBase } from './uniform';\n\nexport interface MiniGlInitOptions {\n  debug?: boolean;\n  contextAttributes?: WebGLContextAttributes;\n}\n\n/** Essential WebGL functionality wrapper — meshes, shaders, uniforms. */\nexport class MiniGl implements MiniGlRuntime {\n  readonly canvas: HTMLCanvasElement;\n  readonly gl: WebGLRenderingContext;\n  meshes: MiniGlMesh[] = [];\n\n  lastDebugMsg?: Date;\n  debug: (...args: string[]) => void;\n\n  commonUniforms!: Record<string, MiniGlUniform>;\n\n  Uniform!: MiniGlUniformConstructor;\n  Attribute!: MiniGlAttributeConstructor;\n  PlaneGeometry!: MiniGlPlaneGeometryConstructor;\n  Material!: MiniGlMaterialConstructor;\n  Mesh!: MiniGlMeshConstructor;\n\n  /** Logical (CSS-pixel) extents for projection; buffer may be larger when DPR > 1. */\n  logicalWidth = 640;\n  logicalHeight = 480;\n\n  constructor(canvas: HTMLCanvasElement, options?: MiniGlInitOptions) {\n    const isDebugEnabled = document.location.search.toLowerCase().includes(CORE_CONSTANTS.DEBUG_QUERY_STRING);\n\n    this.canvas = canvas;\n    const gl = acquireWebGLContext(canvas, options?.contextAttributes);\n\n    if (!gl) throw new Error('WebGL not supported');\n    this.gl = gl;\n\n    const self = this;\n\n    this.lastDebugMsg = undefined;\n\n    this.debug =\n      options?.debug && isDebugEnabled\n        ? function debugLog(...args: string[]) {\n            const message = args[0] || '';\n            const currentTime = new Date();\n\n            if (!self.lastDebugMsg || currentTime.getTime() - self.lastDebugMsg.getTime() > 1000) {\n              // eslint-disable-next-line no-console\n              console.log('---');\n            }\n\n            const timestamp = currentTime.toLocaleTimeString();\n            const padding = Array(Math.max(0, 32 - message.length)).join(' ');\n\n            // eslint-disable-next-line no-console\n            console.log(timestamp + padding + message + ': ', ...args.slice(1));\n\n            self.lastDebugMsg = currentTime;\n          }\n        : () => {};\n\n    const boundGl = this.gl;\n    const runtime: MiniGlRuntime = this;\n\n    this.Uniform = class extends MiniGlUniformBase {\n      constructor(config: UniformConfig) {\n        super(boundGl, config);\n      }\n    } as unknown as MiniGlUniformConstructor;\n\n    this.Attribute = class extends MiniGlAttributeBase {\n      constructor(config: AttributeConfig) {\n        super(boundGl, config);\n      }\n    } as unknown as MiniGlAttributeConstructor;\n\n    this.Material = class extends MiniGlMaterialBase {\n      constructor(vertexShader: string, fragmentShader: string, uniforms?: Record<string, MiniGlUniform>) {\n        super(runtime, vertexShader, fragmentShader, uniforms);\n      }\n    } as unknown as MiniGlMaterialConstructor;\n\n    this.PlaneGeometry = class extends MiniGlPlaneGeometryBase {\n      constructor(width = 1, height = 1, n = 1, i = 1, orientation = 'xz') {\n        super(runtime, width, height, n, i, orientation);\n      }\n    } as unknown as MiniGlPlaneGeometryConstructor;\n\n    this.Mesh = class extends MiniGlMeshBase {\n      constructor(geometry: MiniGlPlaneGeometry, material: MiniGlMaterial) {\n        super(runtime, geometry, material);\n      }\n    } as unknown as MiniGlMeshConstructor;\n\n    const identityMatrix = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\n\n    this.commonUniforms = {\n      projectionMatrix: new this.Uniform({ type: 'mat4', value: identityMatrix }),\n      modelViewMatrix: new this.Uniform({ type: 'mat4', value: identityMatrix }),\n      resolution: new this.Uniform({ type: 'vec2', value: [1, 1] }),\n      bufferResolution: new this.Uniform({ type: 'vec2', value: [1, 1] }),\n      aspectRatio: new this.Uniform({ type: 'float', value: 1 }),\n    };\n  }\n\n  /**\n   * @param cssWidth - Layout width in CSS pixels (orthographic mesh space)\n   * @param cssHeight - Layout height in CSS pixels\n   * @param pixelRatio - Backing-store scale for HiDPI (does not affect logical mesh extents)\n   */\n  setSize(cssWidth: number = 640, cssHeight: number = 480, pixelRatio: number = 1): void {\n    const safePr = pixelRatio > 0 ? pixelRatio : 1;\n    const bufW = Math.max(1, Math.round(cssWidth * safePr));\n    const bufH = Math.max(1, Math.round(cssHeight * safePr));\n\n    this.logicalWidth = cssWidth;\n    this.logicalHeight = cssHeight;\n\n    this.canvas.width = bufW;\n    this.canvas.height = bufH;\n\n    // Do not set canvas.style width/height: pixel sizes override author CSS (e.g. `width: 100%`) and\n    // prevent responsive layout + ResizeObserver updates. Logical size must come from layout/CSS;\n    // backing-store size is bufW/bufH only.\n\n    this.gl.viewport(0, 0, bufW, bufH);\n\n    this.commonUniforms.resolution.value = [cssWidth, cssHeight];\n    this.commonUniforms.bufferResolution.value = [bufW, bufH];\n    this.commonUniforms.aspectRatio.value = cssWidth / cssHeight;\n\n    this.debug('MiniGL.setSize');\n  }\n\n  setOrthographicCamera(x = 0, y = 0, z = 0, near = -2000, far = 2000): void {\n    const width = this.logicalWidth;\n    const height = this.logicalHeight;\n\n    this.commonUniforms.projectionMatrix.value = [2 / width, 0, 0, 0, 0, 2 / height, 0, 0, 0, 0, 2 / (near - far), 0, x, y, z, 1];\n\n    this.debug('setOrthographicCamera');\n  }\n\n  render(): void {\n    this.gl.clearColor(0, 0, 0, 0);\n    this.gl.clearDepth(1);\n    this.meshes.forEach((mesh) => mesh.draw());\n  }\n}\n","const noise = `\nvec3 mod289(vec3 x){return x-floor(x*(1.0/289.0))*289.0;}\nvec4 mod289(vec4 x){return x-floor(x*(1.0/289.0))*289.0;}\nvec4 permute(vec4 x){return mod289(((x*34.0)+1.0)*x);}\nvec4 taylorInvSqrt(vec4 r){return 1.79284291400159-0.85373472095314*r;}\nfloat snoise(vec3 v){const vec2 C=vec2(1.0/6.0,1.0/3.0);const vec4 D=vec4(0.0,0.5,1.0,2.0);vec3 i=floor(v+dot(v,C.yyy));vec3 x0=v-i+dot(i,C.xxx);vec3 g=step(x0.yzx,x0.xyz);vec3 l=1.0-g;vec3 i1=min(g.xyz,l.zxy);vec3 i2=max(g.xyz,l.zxy);vec3 x1=x0-i1+C.xxx;vec3 x2=x0-i2+C.yyy;vec3 x3=x0-D.yyy;i=mod289(i);vec4 p=permute(permute(permute(i.z+vec4(0.0,i1.z,i2.z,1.0))+i.y+vec4(0.0,i1.y,i2.y,1.0))+i.x+vec4(0.0,i1.x,i2.x,1.0));float n_=0.142857142857;vec3 ns=n_*D.wyz-D.xzx;vec4 j=p-49.0*floor(p*ns.z*ns.z);vec4 x_=floor(j*ns.z);vec4 y_=floor(j-7.0*x_);vec4 x=x_*ns.x+ns.yyyy;vec4 y=y_*ns.x+ns.yyyy;vec4 h=1.0-abs(x)-abs(y);vec4 b0=vec4(x.xy,y.xy);vec4 b1=vec4(x.zw,y.zw);vec4 s0=floor(b0)*2.0+1.0;vec4 s1=floor(b1)*2.0+1.0;vec4 sh=-step(h,vec4(0.0));vec4 a0=b0.xzyw+s0.xzyw*sh.xxyy;vec4 a1=b1.xzyw+s1.xzyw*sh.zzww;vec3 p0=vec3(a0.xy,h.x);vec3 p1=vec3(a0.zw,h.y);vec3 p2=vec3(a1.xy,h.z);vec3 p3=vec3(a1.zw,h.w);vec4 norm=taylorInvSqrt(vec4(dot(p0,p0),dot(p1,p1),dot(p2,p2),dot(p3,p3)));p0*=norm.x;p1*=norm.y;p2*=norm.z;p3*=norm.w;vec4 m=max(0.6-vec4(dot(x0,x0),dot(x1,x1),dot(x2,x2),dot(x3,x3)),0.0);m=m*m;return 42.0*dot(m*m,vec4(dot(p0,x0),dot(p1,x1),dot(p2,x2),dot(p3,x3)));}\n`.trim();\n\nconst blend = `\nvec3 blendNormal(vec3 base,vec3 blend){return blend;}\nvec3 blendNormal(vec3 base,vec3 blend,float opacity){return(blendNormal(base,blend)*opacity+base*(1.0-opacity));}\n`.trim();\n\nconst vertex = `\nvarying vec3 v_color;\nvoid main(){\n  float time=u_time*u_global.noiseSpeed;\n  vec2 noiseCoord=resolution*uvNorm*u_global.noiseFreq;\n  vec2 st=1.-uvNorm.xy;\n  float tilt=resolution.y/2.0*uvNorm.y;\n  float incline=resolution.x*uvNorm.x/2.0*u_vertDeform.incline;\n  float offset=resolution.x/2.0*u_vertDeform.incline*mix(u_vertDeform.offsetBottom,u_vertDeform.offsetTop,uv.y);\n  float noise=snoise(vec3(noiseCoord.x*u_vertDeform.noiseFreq.x+time*u_vertDeform.noiseFlow,noiseCoord.y*u_vertDeform.noiseFreq.y,time*u_vertDeform.noiseSpeed+u_vertDeform.noiseSeed))*u_vertDeform.noiseAmp;\n  noise*=1.0-pow(abs(uvNorm.y),2.0);\n  noise=max(0.0,noise);\n  vec3 pos=vec3(position.x,position.y+tilt+incline+noise-offset,position.z);\n  if(u_active_colors[0]==1.){v_color=u_baseColor;}\n  for(int i=0;i<u_waveLayers_length;i++){\n    if(u_active_colors[i+1]==1.){\n      WaveLayers layer=u_waveLayers[i];\n      float noise=smoothstep(layer.noiseFloor,layer.noiseCeil,snoise(vec3(noiseCoord.x*layer.noiseFreq.x+time*layer.noiseFlow,noiseCoord.y*layer.noiseFreq.y,time*layer.noiseSpeed+layer.noiseSeed))/2.0+0.5);\n      v_color=blendNormal(v_color,layer.color,pow(noise,4.));\n    }\n  }\n  gl_Position=projectionMatrix*modelViewMatrix*vec4(pos,1.0);\n}\n`.trim();\n\nconst fragment = `\nvarying vec3 v_color;\nvoid main(){\n  vec3 color=v_color;\n  if(u_darken_top==1.0){\n    vec2 st=gl_FragCoord.xy/bufferResolution.xy;\n    color.g-=pow(st.y+sin(-12.0)*st.x,u_shadow_power)*0.4;\n  }\n  gl_FragColor=vec4(color,1.0);\n}\n`.trim();\n\nexport const SHADERS = {\n  vertex,\n  noise,\n  blend,\n  fragment,\n} as const;\n","/**\n * Tracks timeouts and the main animation frame loop for clean teardown.\n */\nexport class InstanceTimers {\n  private readonly timeouts = new Set<number>();\n  private rafHandle: number | null = null;\n\n  setTimeoutMs(fn: () => void, ms: number): number {\n    const id = window.setTimeout(() => {\n      this.timeouts.delete(id);\n      fn();\n    }, ms);\n\n    this.timeouts.add(id);\n\n    return id;\n  }\n\n  clearTimeoutMs(id?: number): void {\n    if (id === undefined) return;\n    window.clearTimeout(id);\n    this.timeouts.delete(id);\n  }\n\n  clearAllTimeouts(): void {\n    for (const id of this.timeouts) {\n      window.clearTimeout(id);\n    }\n    this.timeouts.clear();\n  }\n\n  setAnimationLoop(fn: FrameRequestCallback): number {\n    this.cancelAnimationFrame();\n    const id = window.requestAnimationFrame((t) => {\n      this.rafHandle = null;\n      fn(t);\n    });\n\n    this.rafHandle = id;\n\n    return id;\n  }\n\n  cancelAnimationFrame(): void {\n    if (this.rafHandle != null) {\n      window.cancelAnimationFrame(this.rafHandle);\n      this.rafHandle = null;\n    }\n  }\n\n  clearAll(): void {\n    this.clearAllTimeouts();\n    this.cancelAnimationFrame();\n  }\n}\n","import type {\n  Vec3,\n  Vec4,\n  MiniGlUniform,\n  MiniGlMesh,\n  MiniGlMaterial,\n  MiniGlPlaneGeometry,\n  GradientConfig,\n  ShaderFiles,\n  MeshGradientOptions,\n  MeshGradientUpdateOptions,\n  MeshGradientColorsConfig,\n  MeshGradientInitOptions,\n  MeshGradientCallbacks,\n  MeshGradientReducedMotion,\n} from '../types';\n\nimport { normalizeColor, parseHexColor, genRandomColors } from '../utils';\nimport { MiniGl } from '../minigl';\nimport { SHADERS } from '../shaders';\nimport * as CONSTANTS from '../constants';\n\nimport { InstanceTimers } from './instance-timers';\nimport { probeWebGLSupport } from './webgl-context';\n\ntype InitOptions = MeshGradientOptions & MeshGradientInitOptions;\n\nconst U_TIME_WRAP = 1e7;\n\n/**\n * Gradient class for creating animated mesh gradients\n * Manages WebGL rendering of animated gradient effects\n */\nexport class MeshGradient {\n  public static isSupported(contextAttributes?: WebGLContextAttributes): boolean {\n    return probeWebGLSupport(contextAttributes);\n  }\n\n  /**\n   * Whether the gradient is been initialized by calling `init` method.\n   * @default false\n   */\n  public isInitialized = false;\n  private destroyed = false;\n  private instanceTimers = new InstanceTimers();\n\n  /** Serializes chained fade transitions from `update` */\n  private fadeGeneration = 0;\n  private pollCssVarsCanceled = false;\n  private animationRafId: number | null = null;\n\n  private resizeObserver?: ResizeObserver;\n\n  /** Backing-store scale for `MiniGl#setSize(cssW, cssH, pr)`. */\n  private pixelRatioBacking = 1;\n  /** Optional FPS cap (`targetFps` option). */\n  private targetFpsCap?: number;\n  private skipEveryOtherFrame = true;\n  private lastFpsGateTime = 0;\n\n  /** Last successful `init` / merged options snapshot for context restore */\n  private lastInitOptions: InitOptions = {};\n\n  /** Runtime hooks */\n  private callbacks?: MeshGradientCallbacks;\n  private allowDocumentFallback = false;\n  private darkenTopFromOptions?: boolean;\n\n  /** @see MeshGradientOptions['webglContextAttributes'] — stored per init */\n  private webGlUserAttributes?: WebGLContextAttributes;\n  /** @see MeshGradientOptions['useLegacyLoadedClassBehavior'] */\n  private useLegacyLoadedClass = true;\n  /** @see MeshGradientOptions['maxSegments'] */\n  private maxSegments?: number;\n\n  private reducedMotion: MeshGradientReducedMotion = 'auto';\n\n  private el?: HTMLCanvasElement | null;\n  private amp = CONSTANTS.DEFAULT_AMP;\n  private seed = CONSTANTS.DEFAULT_SEED;\n  private freqX = CONSTANTS.DEFAULT_FREQ_X;\n  private freqY = CONSTANTS.DEFAULT_FREQ_Y;\n  /** Offset added to `freqY` in the `noiseFreq` uniform when `frequency` is an object with `delta` (0 by default). */\n  private freqDelta = 0;\n  private activeColors: Vec4 = CONSTANTS.DEFAULT_ACTIVE_COLORS;\n  private isStatic = false;\n  private animationSpeed = CONSTANTS.DEFAULT_ANIMATION_SPEED;\n  private autoPauseOnInvisible = true; // Auto pause when gradient goes out of viewport\n\n  private minigl?: MiniGl;\n\n  private angle: number = 0;\n  private isLoadedClass: boolean = false;\n\n  private resizeTimeout?: number;\n  private resizeDelay: number = CONSTANTS.RESIZE_THROTTLE_DELAY;\n  private isIntersecting: boolean = false;\n\n  private wasPlayingBeforeInvisible = false; // Animation state before going out of viewport\n  private intersectionObserver?: IntersectionObserver; // Observer for tracking visibility\n  // @ts-ignore\n  private pauseObserverOptions: IntersectionObserverInit = CONSTANTS.DEFAULT_PAUSE_OBSERVER_OPTIONS;\n  private width?: number;\n  private height?: number;\n\n  private shaderFiles?: ShaderFiles;\n  private vertexShader?: string;\n  private sectionColors?: Vec3[];\n  private configColors?: MeshGradientColorsConfig; // Colors from configuration with priority over CSS vars\n  private appearanceMode: 'smooth' | 'default' = CONSTANTS.DEFAULT_APPEARANCE_MODE;\n  private appearanceDuration = CONSTANTS.DEFAULT_APPEARANCE_DURATION;\n  private computedCanvasStyle?: CSSStyleDeclaration;\n  private conf?: GradientConfig;\n  private uniforms?: Record<string, MiniGlUniform>;\n  private mesh?: MiniGlMesh;\n  private material?: MiniGlMaterial;\n  private geometry?: MiniGlPlaneGeometry;\n  private t = CONSTANTS.DEFAULT_TIME_VALUE;\n  private last = 0;\n  private frame = 0;\n\n  private xSegCount?: number;\n  private ySegCount?: number;\n\n  constructor() {\n    this.animateFrame = this.animateFrame.bind(this);\n    this.onResizeDebounced = this.onResizeDebounced.bind(this);\n    this.onVisibility = this.onVisibility.bind(this);\n    this.handleContextLost = this.handleContextLost.bind(this);\n    this.handleContextRestored = this.handleContextRestored.bind(this);\n    this.initializeProperties();\n  }\n\n  public init(selector: string | HTMLCanvasElement, options?: InitOptions): MeshGradient {\n    const opt = options ?? {};\n\n    this.destroyed = false;\n    this.pollCssVarsCanceled = false;\n    this.lastInitOptions = { ...this.lastInitOptions, ...opt };\n\n    this.allowDocumentFallback = opt.allowDocumentCanvasFallback ?? false;\n\n    const forcedPr = opt.pixelRatio;\n\n    this.pixelRatioBacking =\n      forcedPr !== undefined && forcedPr > 0\n        ? forcedPr\n        : typeof window !== 'undefined' && typeof window.devicePixelRatio === 'number'\n          ? Math.min(window.devicePixelRatio, 2)\n          : 1;\n\n    this.targetFpsCap = typeof opt.targetFps === 'number' && opt.targetFps > 0 ? opt.targetFps : undefined;\n    this.skipEveryOtherFrame = this.targetFpsCap === undefined;\n    this.lastFpsGateTime = 0;\n\n    this.reducedMotion = opt.reducedMotion ?? 'auto';\n    this.callbacks = opt.callbacks;\n    this.darkenTopFromOptions = opt.darkenTop;\n    this.webGlUserAttributes = opt.webglContextAttributes;\n    this.useLegacyLoadedClass = opt.useLegacyLoadedClassBehavior ?? true;\n    this.maxSegments = opt.maxSegments;\n\n    this.seed = opt.seed ?? Math.random() * 100;\n    this.isStatic = opt.isStatic ?? false;\n    this.animationSpeed = opt.animationSpeed ?? CONSTANTS.DEFAULT_ANIMATION_SPEED;\n    this.resizeDelay = opt.resizeDelay ?? CONSTANTS.RESIZE_THROTTLE_DELAY;\n\n    if (typeof opt.frequency === 'number') {\n      this.freqX = opt.frequency;\n      this.freqY = opt.frequency;\n      this.freqDelta = 0;\n    } else {\n      this.freqX = opt.frequency?.x ?? CONSTANTS.DEFAULT_FREQ_X;\n      this.freqY = opt.frequency?.y ?? CONSTANTS.DEFAULT_FREQ_Y;\n      this.freqDelta = opt.frequency?.delta ?? 0;\n    }\n\n    const toggleColors = {\n      ...CONSTANTS.DEFAULT_ACTIVE_TOGGLE_COLORS,\n      ...opt.activeColors,\n    };\n\n    this.activeColors = [toggleColors[1] ? 1 : 0, toggleColors[2] ? 1 : 0, toggleColors[3] ? 1 : 0, toggleColors[4] ? 1 : 0];\n\n    this.configColors = opt.colors ?? (opt.cssVariablesFallback ? undefined : genRandomColors());\n\n    this.appearanceMode = opt.appearance ?? CONSTANTS.DEFAULT_APPEARANCE_MODE;\n    this.appearanceDuration = opt.appearanceDuration ?? CONSTANTS.DEFAULT_APPEARANCE_DURATION;\n\n    this.pauseObserverOptions = {\n      ...CONSTANTS.DEFAULT_PAUSE_OBSERVER_OPTIONS,\n      ...opt.pauseObserverOptions,\n    };\n\n    this.autoPauseOnInvisible = opt.pauseOnOutsideViewport ?? true;\n\n    this.conf = {\n      presetName: opt.presetName ?? CONSTANTS.DEFAULT_PRESET_NAME,\n      wireframe: opt.wireframe ?? CONSTANTS.DEFAULT_WIREFRAME,\n      zoom: opt.zoom ?? CONSTANTS.DEFAULT_ZOOM,\n      rotation: opt.rotation ?? CONSTANTS.DEFAULT_ROTATION,\n      density: opt.density ? ([...opt.density] as [number, number]) : ([...CONSTANTS.DEFAULT_DENSITY] as [number, number]),\n      playing: true,\n    };\n\n    this.el = typeof selector === 'string' ? (document.querySelector(selector) as HTMLCanvasElement | null) : selector;\n\n    void this.connect();\n\n    return this;\n  }\n\n  /**\n   * Completely destroys the gradient and cleans up all resources.\n   * This method should be called when the gradient is no longer needed\n   */\n  public destroy(): void {\n    this.pollCssVarsCanceled = true;\n    this.fadeGeneration++;\n\n    this.instanceTimers.clearAll();\n\n    if (this.animationRafId !== null) {\n      cancelAnimationFrame(this.animationRafId);\n      this.animationRafId = null;\n    }\n\n    this.stopAnimationAndTimers();\n    this.disconnect();\n    this.removeCssClasses();\n    this.cleanupWebGLResources();\n    this.clearObjectReferences();\n    this.initializeProperties();\n\n    this.isInitialized = false;\n    this.destroyed = true;\n  }\n\n  /**\n   * Updates the gradient with new configuration. Supports fade transition if enabled.\n   * @param config - New configuration options\n   */\n  public update(config?: MeshGradientOptions & MeshGradientUpdateOptions) {\n    if (!this.el) return;\n    const transition = config?.transition ?? true;\n\n    if (!transition && config && this.isInitialized && this.tryApplyHotPatch(config)) {\n      Object.assign(this.lastInitOptions, config);\n\n      return;\n    }\n\n    if (transition) {\n      void this.updateWithFadeTransition(Object.assign({}, this.lastInitOptions, config ?? {}));\n    } else {\n      const canvas = this.el as HTMLCanvasElement;\n\n      this.destroy();\n      this.init(canvas, { ...config, appearance: 'default' });\n    }\n  }\n\n  /**\n   * Fast path — colors / booleans / animation seed without tearing down GL.\n   * Returns false when shader rebuild or sizing changes are needed.\n   */\n  private tryApplyHotPatch(patch: MeshGradientOptions & MeshGradientUpdateOptions): boolean {\n    if (!this.mesh || !this.uniforms) return false;\n\n    const entries = Object.entries(patch).filter(([key]) => key !== 'transition' && key !== 'transitionDuration');\n\n    if (entries.length === 0) {\n      return true;\n    }\n\n    const cold = new Set([\n      'webglContextAttributes',\n      'callbacks',\n      'useLegacyLoadedClassBehavior',\n      'allowDocumentCanvasFallback',\n      'appearance',\n      'appearanceDuration',\n      'cssVariablesFallback',\n    ]);\n\n    if (entries.some(([key]) => cold.has(key))) {\n      return false;\n    }\n\n    let touched = false;\n    let resizeNeeded = false;\n\n    if (patch.colors) {\n      this.configColors = patch.colors;\n      this.initGradientColors();\n      this.patchUniformColors();\n      touched = true;\n    }\n\n    if (patch.activeColors) {\n      const toggle = {\n        ...CONSTANTS.DEFAULT_ACTIVE_TOGGLE_COLORS,\n        ...patch.activeColors,\n      };\n\n      this.activeColors = [toggle[1] ? 1 : 0, toggle[2] ? 1 : 0, toggle[3] ? 1 : 0, toggle[4] ? 1 : 0] as Vec4;\n      const u = this.uniforms.u_active_colors;\n\n      if (u) u.value = this.activeColors;\n      touched = true;\n    }\n\n    if (patch.frequency !== undefined) {\n      if (typeof patch.frequency === 'number') {\n        this.freqX = patch.frequency;\n        this.freqY = patch.frequency;\n        this.freqDelta = 0;\n      } else {\n        this.freqX = patch.frequency?.x ?? CONSTANTS.DEFAULT_FREQ_X;\n        this.freqY = patch.frequency?.y ?? CONSTANTS.DEFAULT_FREQ_Y;\n        this.freqDelta = patch.frequency?.delta ?? 0;\n      }\n      this.patchGlobalNoiseFreq();\n      touched = true;\n    }\n\n    if (patch.seed !== undefined) {\n      this.seed = patch.seed ?? Math.random() * 100;\n      this.patchNoiseSeedUniforms();\n      touched = true;\n    }\n\n    if (patch.animationSpeed !== undefined) {\n      this.animationSpeed = patch.animationSpeed;\n      touched = true;\n    }\n\n    if (patch.resizeDelay !== undefined) {\n      this.resizeDelay = patch.resizeDelay;\n      touched = true;\n    }\n\n    if (patch.targetFps !== undefined) {\n      this.targetFpsCap = patch.targetFps && patch.targetFps > 0 ? patch.targetFps : undefined;\n      this.skipEveryOtherFrame = this.targetFpsCap === undefined;\n      this.lastFpsGateTime = 0;\n      touched = true;\n    }\n\n    if (patch.reducedMotion !== undefined) {\n      this.reducedMotion = patch.reducedMotion;\n      touched = true;\n    }\n\n    if (patch.darkenTop !== undefined) {\n      this.darkenTopFromOptions = patch.darkenTop;\n      const u = this.uniforms.u_darken_top;\n\n      if (u) u.value = patch.darkenTop ? 1 : 0;\n      touched = true;\n    }\n\n    if (patch.maxSegments !== undefined) {\n      this.maxSegments = patch.maxSegments;\n      resizeNeeded = true;\n      touched = true;\n    }\n\n    if (patch.pixelRatio !== undefined) {\n      const pr = patch.pixelRatio;\n\n      this.pixelRatioBacking =\n        pr !== undefined && pr > 0\n          ? pr\n          : typeof window !== 'undefined' && typeof window.devicePixelRatio === 'number'\n            ? Math.min(window.devicePixelRatio, 2)\n            : 1;\n      resizeNeeded = true;\n      touched = true;\n    }\n\n    if (patch.density) {\n      if (this.conf) {\n        this.conf.density = [...patch.density];\n      }\n      resizeNeeded = true;\n      touched = true;\n    }\n\n    if (patch.wireframe !== undefined && this.conf) {\n      this.conf.wireframe = patch.wireframe;\n      touched = true;\n    }\n\n    if (patch.zoom !== undefined && this.conf) {\n      this.conf.zoom = patch.zoom;\n      touched = true;\n    }\n\n    if (patch.rotation !== undefined && this.conf) {\n      this.conf.rotation = patch.rotation;\n      touched = true;\n    }\n\n    if (patch.presetName !== undefined && this.conf) {\n      this.conf.presetName = patch.presetName;\n      touched = true;\n    }\n\n    if (patch.pauseOnOutsideViewport !== undefined && patch.pauseOnOutsideViewport !== this.autoPauseOnInvisible) {\n      this.toggleAutoPause(patch.pauseOnOutsideViewport);\n      touched = true;\n    }\n\n    if (patch.isStatic !== undefined) {\n      this.isStatic = patch.isStatic;\n      touched = true;\n    }\n\n    if (!touched) return false;\n\n    if (resizeNeeded) {\n      void this.performResize();\n    }\n\n    return true;\n  }\n\n  public setColors(colors: MeshGradientColorsConfig): void {\n    this.configColors = colors;\n    this.initGradientColors();\n    this.patchUniformColors();\n    this.minigl?.render();\n  }\n\n  public setActiveColors(cfg: MeshGradientOptions['activeColors']): void {\n    if (!cfg) return;\n    const merged = {\n      ...CONSTANTS.DEFAULT_ACTIVE_TOGGLE_COLORS,\n      ...cfg,\n    };\n\n    this.activeColors = [merged[1] ? 1 : 0, merged[2] ? 1 : 0, merged[3] ? 1 : 0, merged[4] ? 1 : 0] as Vec4;\n\n    const u = this.uniforms?.u_active_colors;\n\n    if (u) {\n      u.value = this.activeColors;\n    }\n\n    this.minigl?.render();\n  }\n\n  public setFrequency(freq: MeshGradientOptions['frequency']): void {\n    if (typeof freq === 'number') {\n      this.freqX = freq;\n      this.freqY = freq;\n      this.freqDelta = 0;\n    } else {\n      this.freqX = freq?.x ?? CONSTANTS.DEFAULT_FREQ_X;\n      this.freqY = freq?.y ?? CONSTANTS.DEFAULT_FREQ_Y;\n      this.freqDelta = freq?.delta ?? 0;\n    }\n\n    this.patchGlobalNoiseFreq();\n    this.minigl?.render();\n  }\n\n  public setSeed(value: number | undefined): void {\n    this.seed = value ?? Math.random() * 100;\n    this.patchNoiseSeedUniforms();\n    this.minigl?.render();\n  }\n\n  private patchUniformColors(): void {\n    if (!this.uniforms || !this.sectionColors?.length) return;\n\n    const base = this.uniforms.u_baseColor;\n    const first = this.sectionColors[0];\n\n    if (base && first) {\n      base.value = first;\n    }\n\n    const stack = this.uniforms.u_waveLayers.value as MiniGlUniform[];\n\n    for (let idx = 0; idx + 1 < this.sectionColors.length; idx++) {\n      const wrapper = stack[idx]?.value;\n\n      if (wrapper && typeof wrapper === 'object' && 'color' in wrapper) {\n        ((wrapper as { color: MiniGlUniform }).color as MiniGlUniform).value = this.sectionColors[idx + 1];\n      }\n    }\n  }\n\n  private patchGlobalNoiseFreq(): void {\n    const global = this.uniforms?.u_global?.value;\n\n    if (global && typeof global === 'object' && 'noiseFreq' in global) {\n      ((global as { noiseFreq: MiniGlUniform }).noiseFreq as MiniGlUniform).value = [this.freqX, this.freqY + this.freqDelta];\n    }\n  }\n\n  private patchNoiseSeedUniforms(): void {\n    const vert = this.uniforms?.u_vertDeform?.value;\n\n    if (vert && typeof vert === 'object' && 'noiseSeed' in vert) {\n      ((vert as { noiseSeed: MiniGlUniform }).noiseSeed as MiniGlUniform).value = this.seed;\n    }\n\n    const stack = this.uniforms?.u_waveLayers?.value as MiniGlUniform[] | undefined;\n\n    if (!stack) return;\n\n    for (let e = 1; e < (this.sectionColors?.length ?? 0); e++) {\n      const layer = stack[e - 1]?.value;\n\n      if (layer && typeof layer === 'object' && 'noiseSeed' in layer) {\n        ((layer as { noiseSeed: MiniGlUniform }).noiseSeed as MiniGlUniform).value = this.seed + 10 * e;\n      }\n    }\n  }\n\n  /**\n   * Updates gradient with smooth fade transition\n   * @param config - New configuration options\n   */\n  private updateWithFadeTransition(config: MeshGradientOptions & MeshGradientUpdateOptions) {\n    if (!this.el) return;\n\n    const gen = ++this.fadeGeneration;\n    const duration = config.transitionDuration ?? CONSTANTS.DEFAULT_TRANSITION_DURATION;\n    const canvas = this.el;\n\n    canvas.style.transition = `opacity ${duration}ms ease-in-out`;\n    canvas.style.opacity = '1';\n\n    requestAnimationFrame(() => {\n      if (gen === this.fadeGeneration) {\n        canvas.style.opacity = '0';\n      }\n    });\n\n    this.instanceTimers.setTimeoutMs(() => {\n      if (gen !== this.fadeGeneration) return;\n\n      this.destroy();\n      this.init(canvas, config);\n\n      if (this.el) {\n        this.el.style.opacity = '0';\n        this.el.style.transition = `opacity ${duration}ms ease-in-out`;\n\n        requestAnimationFrame(() => {\n          if (this.el) {\n            this.el.style.opacity = '';\n          }\n        });\n\n        this.instanceTimers.setTimeoutMs(() => {\n          if (this.el) {\n            this.el.style.transition = '';\n            this.el.style.opacity = '';\n          }\n        }, duration);\n      }\n    }, duration);\n  }\n\n  /**\n   * Manually start gradient animation\n   */\n  public play(): void {\n    if (!this.conf) return;\n\n    this.conf.playing = true;\n    this.scheduleAnimate();\n  }\n\n  private scheduleAnimate(): void {\n    if (this.animationRafId !== null) {\n      cancelAnimationFrame(this.animationRafId);\n      this.animationRafId = null;\n    }\n    this.animationRafId = requestAnimationFrame(this.animateFrame);\n  }\n\n  /**\n   * Manually pause gradient animation\n   */\n  public pause(): void {\n    if (!this.conf) return;\n\n    this.conf.playing = false;\n  }\n\n  /**\n   * Set animation speed multiplier\n   * @param speed - Speed multiplier (1.0 is normal speed, 0.5 is half speed, 2.0 is double speed)\n   */\n  public setAnimationSpeed(speed: number): void {\n    if (speed <= 0) {\n      throw new Error('Animation speed must be greater than 0');\n    }\n    this.animationSpeed = speed;\n  }\n\n  /**\n   * Get current animation speed multiplier\n   * @returns Current animation speed\n   */\n  public getAnimationSpeed(): number {\n    return this.animationSpeed;\n  }\n\n  /**\n   * Enable or disable auto-pause when gradient goes out of viewport\n   * @param enabled - Whether to enable auto-pause functionality\n   */\n  public toggleAutoPause(enabled: boolean): void {\n    this.autoPauseOnInvisible = enabled;\n\n    if (!enabled && this.intersectionObserver) {\n      this.intersectionObserver.disconnect();\n      this.intersectionObserver = undefined;\n      if (!this.isIntersecting && this.wasPlayingBeforeInvisible) {\n        this.play();\n        this.wasPlayingBeforeInvisible = false;\n      }\n    } else if (enabled && this.el && !this.intersectionObserver) {\n      this.initIntersectionObserver();\n    }\n  }\n\n  /**\n   * Stops animation and clears all active timers\n   */\n  private stopAnimationAndTimers(): void {\n    this.pause();\n    if (this.resizeTimeout) {\n      clearTimeout(this.resizeTimeout);\n      this.resizeTimeout = undefined;\n    }\n  }\n\n  /**\n   * Removes CSS classes from canvas and its parent\n   */\n  private removeCssClasses(): void {\n    if (this.el) {\n      this.el.classList.remove('isLoaded');\n      if (this.el.parentElement) {\n        this.el.parentElement.classList.remove('isLoaded');\n      }\n    }\n  }\n\n  /**\n   * Cleans up all WebGL resources including shaders, buffers, and context\n   */\n  private cleanupWebGLResources(contextLost = false): void {\n    if (this.mesh && !contextLost) {\n      this.mesh.remove();\n    }\n    this.mesh = undefined;\n\n    if (!this.minigl || contextLost) {\n      this.material = undefined;\n      this.geometry = undefined;\n      this.uniforms = undefined;\n      this.minigl = undefined;\n\n      return;\n    }\n\n    this.cleanupMiniGlMeshes();\n    this.cleanupWebGLContext();\n    this.clearCanvasAsFallback();\n\n    this.material = undefined;\n    this.geometry = undefined;\n    this.uniforms = undefined;\n    this.minigl = undefined;\n  }\n\n  /**\n   * Cleans up all meshes from MiniGL\n   */\n  private cleanupMiniGlMeshes(): void {\n    if (!this.minigl) return;\n\n    this.minigl.meshes.forEach((mesh) => {\n      if (mesh.remove) mesh.remove();\n    });\n    this.minigl.meshes = [];\n  }\n\n  /**\n   * Cleans up WebGL context, shaders and buffers\n   */\n  private cleanupWebGLContext(): void {\n    if (!this.minigl?.gl) return;\n\n    const gl = this.minigl.gl;\n\n    // Clear the canvas completely\n    gl.clearColor(0.0, 0.0, 0.0, 0.0);\n    gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);\n\n    this.deleteShaders(gl);\n    this.deleteBuffers(gl);\n  }\n\n  /**\n   * Deletes shaders and program from WebGL context\n   */\n  private deleteShaders(gl: WebGLRenderingContext): void {\n    if (!this.material) return;\n\n    if (this.material.vertexShader) {\n      gl.deleteShader(this.material.vertexShader);\n    }\n    if (this.material.fragmentShader) {\n      gl.deleteShader(this.material.fragmentShader);\n    }\n    if (this.material.program) {\n      gl.deleteProgram(this.material.program);\n    }\n  }\n\n  /**\n   * Deletes geometry buffers from WebGL context\n   */\n  private deleteBuffers(gl: WebGLRenderingContext): void {\n    if (!this.geometry?.attributes) return;\n\n    Object.values(this.geometry.attributes).forEach((attribute) => {\n      if (attribute.buffer) {\n        gl.deleteBuffer(attribute.buffer);\n      }\n    });\n  }\n\n  /**\n   * Clears canvas using 2D context as fallback\n   */\n  private clearCanvasAsFallback(): void {\n    if (!this.minigl?.canvas) return;\n\n    const canvas = this.minigl.canvas;\n    const ctx = canvas.getContext('2d');\n\n    if (ctx) {\n      ctx.clearRect(0, 0, canvas.width, canvas.height);\n    }\n  }\n\n  /**\n   * Clears all object references to prevent memory leaks\n   */\n  private clearObjectReferences(): void {\n    this.el = null;\n    this.minigl = undefined;\n    this.mesh = undefined;\n    this.material = undefined;\n    this.geometry = undefined;\n    this.uniforms = undefined;\n    this.shaderFiles = undefined;\n    this.vertexShader = undefined;\n    this.sectionColors = undefined;\n    this.configColors = undefined;\n    this.computedCanvasStyle = undefined;\n    this.conf = undefined;\n  }\n\n  /**\n   * Initialize all gradient properties with default values via `Object.assign`.\n   */\n  private initializeProperties(): void {\n    const defaultProperties = {\n      // Core properties\n      el: undefined as HTMLCanvasElement | null | undefined,\n      minigl: undefined as MiniGl | undefined,\n\n      // State properties\n      angle: 0,\n      isLoadedClass: false,\n      isInitialized: false,\n      resizeTimeout: undefined as number | undefined,\n      resizeDelay: CONSTANTS.RESIZE_THROTTLE_DELAY,\n      isIntersecting: false,\n\n      // Rendering properties\n      shaderFiles: undefined as ShaderFiles | undefined,\n      vertexShader: undefined as string | undefined,\n      sectionColors: undefined as Vec3[] | undefined,\n      configColors: undefined as MeshGradientColorsConfig | undefined,\n      appearanceMode: CONSTANTS.DEFAULT_APPEARANCE_MODE as 'smooth' | 'default',\n      appearanceDuration: CONSTANTS.DEFAULT_APPEARANCE_DURATION,\n      computedCanvasStyle: undefined as CSSStyleDeclaration | undefined,\n      conf: undefined as GradientConfig | undefined,\n      uniforms: undefined as Record<string, MiniGlUniform> | undefined,\n      mesh: undefined as MiniGlMesh | undefined,\n      material: undefined as MiniGlMaterial | undefined,\n      geometry: undefined as MiniGlPlaneGeometry | undefined,\n\n      // Animation properties\n      t: CONSTANTS.DEFAULT_TIME_VALUE,\n      last: 0,\n      frame: 0,\n\n      // Dimension properties\n      width: undefined as number | undefined,\n      height: undefined as number | undefined,\n      xSegCount: undefined as number | undefined,\n      ySegCount: undefined as number | undefined,\n\n      // Effects properties\n      amp: CONSTANTS.DEFAULT_AMP,\n      seed: CONSTANTS.DEFAULT_SEED,\n      freqX: CONSTANTS.DEFAULT_FREQ_X,\n      freqY: CONSTANTS.DEFAULT_FREQ_Y,\n      freqDelta: 0,\n      activeColors: [...CONSTANTS.DEFAULT_ACTIVE_COLORS] as Vec4,\n      animationSpeed: CONSTANTS.DEFAULT_ANIMATION_SPEED,\n      autoPauseOnInvisible: true,\n\n      destroyed: false,\n      pollCssVarsCanceled: false,\n      fadeGeneration: 0,\n      animationRafId: null as number | null,\n      lastInitOptions: {} as InitOptions,\n      pixelRatioBacking: 1,\n      targetFpsCap: undefined as number | undefined,\n      skipEveryOtherFrame: true,\n      lastFpsGateTime: 0,\n      callbacks: undefined as MeshGradientCallbacks | undefined,\n      allowDocumentFallback: false,\n      darkenTopFromOptions: undefined as boolean | undefined,\n      webGlUserAttributes: undefined as WebGLContextAttributes | undefined,\n      useLegacyLoadedClass: true,\n      maxSegments: undefined as number | undefined,\n      reducedMotion: 'auto' as MeshGradientReducedMotion,\n    };\n\n    this.instanceTimers.clearAll();\n    Object.assign(this, defaultProperties);\n  }\n\n  private onResizeDebounced(): void {\n    if (this.resizeTimeout) {\n      clearTimeout(this.resizeTimeout);\n    }\n\n    this.resizeTimeout = window.setTimeout(() => {\n      this.performResize();\n    }, this.resizeDelay) as unknown as number;\n  }\n\n  private motionIsStaticEffective(): boolean {\n    if (this.reducedMotion === 'ignore') {\n      return this.isStatic;\n    }\n\n    if (this.reducedMotion === 'force-static') {\n      return true;\n    }\n\n    try {\n      return (\n        this.isStatic ||\n        (typeof window !== 'undefined' &&\n          typeof window.matchMedia === 'function' &&\n          window.matchMedia('(prefers-reduced-motion: reduce)').matches)\n      );\n    } catch {\n      return this.isStatic;\n    }\n  }\n\n  private animateFrame(e: number): void {\n    this.animationRafId = null;\n\n    if (!this.shouldSkipFrame(e)) {\n      const delta = Math.min(e - this.last, CONSTANTS.MAX_FRAME_DELTA) * this.animationSpeed;\n\n      this.t = (((this.t + delta) % U_TIME_WRAP) + U_TIME_WRAP) % U_TIME_WRAP;\n      this.last = e;\n\n      if (this.mesh?.material?.uniforms?.u_time) {\n        this.mesh.material.uniforms.u_time.value = this.t;\n      }\n      if (this.minigl) {\n        this.minigl.render();\n      }\n    }\n\n    if (this.last !== 0 && this.motionIsStaticEffective()) {\n      if (this.minigl) {\n        this.minigl.render();\n      }\n      this.disconnect();\n\n      return;\n    }\n\n    this.frame += 1;\n\n    if (this.conf?.playing) {\n      this.scheduleAnimate();\n    }\n  }\n\n  private addIsLoadedClass(): void {\n    if (!this.isLoadedClass) {\n      this.isLoadedClass = true;\n\n      if (this.el) {\n        if (this.appearanceMode === 'smooth') {\n          this.el.style.opacity = '0';\n          this.el.style.transition = `opacity ${this.appearanceDuration}ms ease-in-out`;\n\n          requestAnimationFrame(() => {\n            if (this.el) {\n              this.el.style.opacity = '1';\n            }\n          });\n\n          this.instanceTimers.setTimeoutMs(() => {\n            if (this.el) {\n              this.el.style.transition = '';\n              this.el.style.opacity = '';\n            }\n          }, this.appearanceDuration);\n        }\n\n        if (this.useLegacyLoadedClass) {\n          this.el.classList.add('isLoaded');\n        }\n      }\n\n      if (this.useLegacyLoadedClass) {\n        this.instanceTimers.setTimeoutMs(() => {\n          if (this.el?.parentElement) {\n            this.el.parentElement.classList.add('isLoaded');\n          }\n        }, CONSTANTS.LOADED_CLASS_DELAY);\n      }\n    }\n\n    try {\n      this.callbacks?.onReady?.();\n    } catch {\n      /** user callback */\n    }\n  }\n\n  private onVisibility(): void {\n    if (!document.hidden) {\n      this.last = 0;\n      this.lastFpsGateTime = 0;\n    }\n    if (!document.hidden && this.conf?.playing && this.animationRafId === null) {\n      this.scheduleAnimate();\n    }\n  }\n\n  private handleContextLost(event: Event): void {\n    event.preventDefault?.();\n    this.pause();\n\n    if (this.animationRafId !== null) {\n      cancelAnimationFrame(this.animationRafId);\n      this.animationRafId = null;\n    }\n\n    this.cleanupWebGLResources(true);\n\n    try {\n      this.callbacks?.onError?.(new Error('WebGL context lost'));\n    } catch {\n      /** user callback */\n    }\n  }\n\n  private handleContextRestored(): void {\n    if (this.destroyed || !this.el) return;\n\n    try {\n      this.detachLayoutListeners();\n      this.mountMiniGl();\n      this.initMesh();\n      this.performResize();\n      this.attachLayoutListeners();\n      this.play();\n    } catch (err) {\n      const error = err instanceof Error ? err : new Error(String(err));\n\n      this.callbacks?.onError?.(error);\n    }\n  }\n\n  private mountMiniGl(): void {\n    if (!this.el) throw new Error('MeshGradient: canvas missing');\n\n    this.minigl = new MiniGl(this.el, {\n      debug: true,\n      contextAttributes: this.webGlUserAttributes,\n    });\n  }\n\n  private attachLayoutListeners(): void {\n    window.addEventListener('resize', this.onResizeDebounced);\n\n    if (typeof document !== 'undefined') {\n      document.addEventListener('visibilitychange', this.onVisibility);\n    }\n\n    if (this.el && typeof ResizeObserver !== 'undefined') {\n      this.resizeObserver?.disconnect();\n      this.resizeObserver = new ResizeObserver(() => this.onResizeDebounced());\n      this.resizeObserver.observe(this.el);\n    }\n  }\n\n  private detachLayoutListeners(): void {\n    window.removeEventListener('resize', this.onResizeDebounced);\n\n    if (typeof document !== 'undefined') {\n      document.removeEventListener('visibilitychange', this.onVisibility);\n    }\n\n    if (this.resizeObserver && this.el) {\n      try {\n        this.resizeObserver.unobserve(this.el);\n      } catch {\n        /** ignore */\n      }\n      this.resizeObserver.disconnect();\n      this.resizeObserver = undefined;\n    }\n  }\n\n  /**\n   * Performs actual resize operations (used by debounced resize handler)\n   */\n  private performResize(): void {\n    if (this.el) {\n      const rect = this.el.getBoundingClientRect();\n\n      this.width = rect.width;\n      this.height = rect.height;\n    }\n    if (this.minigl && this.width && this.height) {\n      this.minigl.setSize(this.width, this.height, this.pixelRatioBacking);\n      this.minigl.setOrthographicCamera();\n    }\n\n    let xc = Math.ceil((this.width as number) * (this.conf ? this.conf.density[0] : CONSTANTS.DEFAULT_DENSITY[0]));\n    let yc = Math.ceil((this.height || 0) * (this.conf ? this.conf.density[1] : CONSTANTS.DEFAULT_DENSITY[1]));\n\n    const cap = this.maxSegments;\n\n    if (typeof cap === 'number' && cap > 0) {\n      xc = Math.min(xc, cap);\n      yc = Math.min(yc, cap);\n    }\n\n    this.xSegCount = Math.max(xc, 1);\n    this.ySegCount = Math.max(yc, 1);\n\n    if (this.mesh && this.mesh.geometry) {\n      this.mesh.geometry.setTopology(this.xSegCount as number, this.ySegCount as number);\n      this.mesh.geometry.setSize(this.width as number, this.height || 0);\n    }\n    if (this.mesh && this.mesh.material && this.mesh.material.uniforms && this.mesh.material.uniforms.u_shadow_power) {\n      this.mesh.material.uniforms.u_shadow_power.value =\n        this.width! < CONSTANTS.SMALL_SCREEN_WIDTH_THRESHOLD ? CONSTANTS.SMALL_SCREEN_SHADOW_POWER : CONSTANTS.LARGE_SCREEN_SHADOW_POWER;\n    }\n\n    try {\n      this.callbacks?.onResize?.({ cssWidth: this.width ?? 0, cssHeight: this.height ?? 0 });\n    } catch {\n      /** user callback */\n    }\n  }\n\n  /**\n   * Establishes WebGL connection and initializes shaders\n   */\n  private async connect(): Promise<void> {\n    this.shaderFiles = SHADERS;\n\n    if (!this.el && this.allowDocumentFallback) {\n      const fallback = document.querySelector('canvas');\n\n      if (fallback) {\n        this.el = fallback as HTMLCanvasElement;\n      }\n    }\n\n    if (!this.el) {\n      try {\n        this.callbacks?.onError?.(new Error('MeshGradient: canvas element not found'));\n      } catch {\n        /** noop */\n      }\n\n      return;\n    }\n\n    const rect = this.el.getBoundingClientRect();\n\n    this.width = rect.width;\n    this.height = rect.height;\n\n    if (this.appearanceMode === 'smooth') {\n      this.el.style.opacity = '0';\n    }\n\n    this.mountMiniGl();\n\n    this.el.addEventListener('webglcontextlost', this.handleContextLost as EventListener, false);\n    this.el.addEventListener('webglcontextrestored', this.handleContextRestored as EventListener, false);\n\n    this.initIntersectionObserver();\n    this.isInitialized = true;\n\n    requestAnimationFrame(() => {\n      if (this.el) {\n        this.computedCanvasStyle = getComputedStyle(this.el);\n        void this.waitForCssVars();\n      }\n    });\n  }\n\n  private disconnect() {\n    if (this.intersectionObserver) {\n      this.intersectionObserver.disconnect();\n      this.intersectionObserver = undefined;\n    }\n\n    this.detachLayoutListeners();\n\n    if (this.el) {\n      this.el.removeEventListener('webglcontextlost', this.handleContextLost as EventListener);\n      this.el.removeEventListener('webglcontextrestored', this.handleContextRestored as EventListener);\n    }\n  }\n\n  /**\n   * Initialize intersection observer for auto-pause functionality\n   */\n  private initIntersectionObserver(): void {\n    if (!this.el || !this.autoPauseOnInvisible) return;\n\n    const options = this.pauseObserverOptions;\n\n    this.intersectionObserver = new IntersectionObserver((entries) => {\n      entries.forEach((entry) => {\n        const isIntersecting = entry.isIntersecting;\n\n        if (this.isIntersecting !== isIntersecting) {\n          this.isIntersecting = isIntersecting;\n\n          if (this.autoPauseOnInvisible && this.conf) {\n            if (isIntersecting) {\n              // Element became visible - resume if was playing before\n              if (this.wasPlayingBeforeInvisible) {\n                this.play();\n                this.wasPlayingBeforeInvisible = false;\n              }\n            } else {\n              // Element became invisible - pause if currently playing\n              if (this.conf.playing) {\n                this.wasPlayingBeforeInvisible = true;\n                this.pause();\n              }\n            }\n          }\n        }\n      });\n    }, options);\n\n    this.intersectionObserver.observe(this.el);\n  }\n\n  private initMaterial(): MiniGlMaterial {\n    if (!this.minigl) throw new Error('MiniGl not initialized');\n\n    const minigl = this.minigl;\n\n    this.uniforms = {\n      ...this.createBasicUniforms(minigl),\n      ...this.createGlobalUniform(minigl),\n      ...this.createVertexDeformUniform(minigl),\n      ...this.createColorUniforms(minigl),\n    };\n\n    this.createWaveLayersUniforms(minigl);\n    this.buildVertexShader();\n\n    return new this.minigl.Material(this.vertexShader!, this.shaderFiles!.fragment, this.uniforms);\n  }\n\n  /**\n   * Creates basic uniforms (time, shadow, darken, active colors)\n   */\n  private createBasicUniforms(minigl: Pick<MiniGl, 'Uniform'>) {\n    return {\n      u_time: new minigl.Uniform({ value: 0 }),\n      u_shadow_power: new minigl.Uniform({ value: 5 }),\n      u_darken_top: new minigl.Uniform({\n        value: !!(this.darkenTopFromOptions || this.el?.dataset?.jsDarkenTop === '') ? 1 : 0,\n      }),\n      u_active_colors: new minigl.Uniform({\n        value: this.activeColors,\n        type: 'vec4',\n      }),\n    };\n  }\n\n  /**\n   * Creates global uniform with noise frequency and speed settings\n   */\n  private createGlobalUniform(minigl: Pick<MiniGl, 'Uniform'>) {\n    return {\n      u_global: new minigl.Uniform({\n        value: {\n          noiseFreq: new minigl.Uniform({\n            value: [this.freqX, this.freqY + this.freqDelta],\n            type: 'vec2',\n          }),\n          noiseSpeed: new minigl.Uniform({ value: 5e-6 }),\n        },\n        type: 'struct',\n      }),\n    };\n  }\n\n  /**\n   * Creates vertex deformation uniform for geometry animation\n   */\n  private createVertexDeformUniform(minigl: Pick<MiniGl, 'Uniform'>) {\n    return {\n      u_vertDeform: new minigl.Uniform({\n        value: {\n          incline: new minigl.Uniform({\n            value: Math.sin(this.angle) / Math.cos(this.angle),\n          }),\n          offsetTop: new minigl.Uniform({ value: -0.5 }),\n          offsetBottom: new minigl.Uniform({ value: -0.5 }),\n          noiseFreq: new minigl.Uniform({\n            value: [3, 4],\n            type: 'vec2',\n          }),\n          noiseAmp: new minigl.Uniform({ value: this.amp }),\n          noiseSpeed: new minigl.Uniform({ value: 10 }),\n          noiseFlow: new minigl.Uniform({ value: 3 }),\n          noiseSeed: new minigl.Uniform({ value: this.seed }),\n        },\n        type: 'struct',\n        excludeFrom: 'fragment',\n      }),\n    };\n  }\n\n  /**\n   * Creates color uniforms for base color and wave layers\n   */\n  private createColorUniforms(minigl: Pick<MiniGl, 'Uniform'>) {\n    return {\n      u_baseColor: new minigl.Uniform({\n        value: (this.sectionColors && this.sectionColors[0]) || [1, 0, 0],\n        type: 'vec3',\n        excludeFrom: 'fragment',\n      }),\n      u_waveLayers: new minigl.Uniform({\n        value: [],\n        excludeFrom: 'fragment',\n        type: 'array',\n      }),\n    };\n  }\n\n  /**\n   * Creates wave layers uniforms for multi-color gradient effects\n   */\n  private createWaveLayersUniforms(minigl: Pick<MiniGl, 'Uniform'>): void {\n    if (!this.uniforms || !this.sectionColors) return;\n\n    for (let e = 1; e < this.sectionColors.length; e += 1) {\n      (this.uniforms.u_waveLayers.value as MiniGlUniform[]).push(\n        new minigl.Uniform({\n          type: 'struct',\n          value: {\n            color: new minigl.Uniform({\n              value: this.sectionColors[e],\n              type: 'vec3',\n            }),\n            noiseFreq: new minigl.Uniform({\n              value: [2 + e / this.sectionColors.length, 3 + e / this.sectionColors.length],\n              type: 'vec2',\n            }),\n            noiseSpeed: new minigl.Uniform({\n              value: 11 + 0.3 * e,\n            }),\n            noiseFlow: new minigl.Uniform({\n              value: 6.5 + 0.3 * e,\n            }),\n            noiseSeed: new minigl.Uniform({\n              value: this.seed + 10 * e,\n            }),\n            noiseFloor: new minigl.Uniform({ value: 0.1 }),\n            noiseCeil: new minigl.Uniform({\n              value: 0.63 + 0.07 * e,\n            }),\n          },\n        }),\n      );\n    }\n  }\n\n  /**\n   * Builds vertex shader by combining noise, blend, and vertex shader files\n   */\n  private buildVertexShader(): void {\n    this.vertexShader = [this.shaderFiles!.noise, this.shaderFiles!.blend, this.shaderFiles!.vertex].join('\\n\\n');\n  }\n\n  /**\n   * Initialize mesh with material and geometry\n   */\n  private initMesh() {\n    const minigl = this.minigl;\n\n    if (!minigl) throw new Error('MiniGl not initialized');\n\n    this.material = this.initMaterial();\n    this.geometry = new minigl.PlaneGeometry();\n    this.mesh = new minigl.Mesh(this.geometry, this.material);\n    if (this.conf) {\n      this.mesh.wireframe = this.conf.wireframe;\n    }\n  }\n\n  /**\n   * Determines if current frame should be skipped for performance\n   * @param e - Current time\n   * @returns true if frame should be skipped\n   */\n  private shouldSkipFrame(e: number): boolean {\n    if (!!window.document.hidden || !(this.conf && this.conf.playing)) {\n      return true;\n    }\n\n    if (this.skipEveryOtherFrame && this.frame % 2 === 0) {\n      return true;\n    }\n\n    const cap = this.targetFpsCap;\n\n    if (typeof cap === 'number' && cap > 0) {\n      const minInterval = 1000 / cap;\n\n      if (this.lastFpsGateTime !== 0 && e - this.lastFpsGateTime < minInterval) {\n        return true;\n      }\n      this.lastFpsGateTime = e;\n    }\n\n    return false;\n  }\n\n  /**\n   * Initialize gradient system - colors, mesh, and animation\n   */\n  private initSystem() {\n    this.initGradientColors();\n    this.initMesh();\n    this.performResize();\n    this.attachLayoutListeners();\n    this.scheduleAnimate();\n  }\n\n  /**\n   * Waits for CSS variables to be loaded before initializing\n   * Uses Promise-based approach with timeout instead of recursive retries\n   */\n  private async waitForCssVars(): Promise<void> {\n    // If colors are provided in config, skip CSS variable waiting\n    if (this.configColors) {\n      this.initSystem();\n      this.addIsLoadedClass();\n\n      return;\n    }\n\n    // Check if CSS vars are already available\n    if (this.areCssVarsLoaded()) {\n      this.initSystem();\n      this.addIsLoadedClass();\n\n      return;\n    }\n\n    // Wait for CSS vars with timeout\n    try {\n      await this.pollForCssVars();\n      this.initSystem();\n      this.addIsLoadedClass();\n    } catch {\n      // Fallback to default colors if timeout\n      this.useFallbackColors();\n      this.initSystem();\n    }\n  }\n\n  /**\n   * Checks if CSS variables are loaded and contain valid color values\n   */\n  private areCssVarsLoaded(): boolean {\n    return Boolean(\n      this.computedCanvasStyle && this.computedCanvasStyle.getPropertyValue(CONSTANTS.CSS_GRADIENT_VARS[0]).indexOf('#') !== -1,\n    );\n  }\n\n  /**\n   * Polls for CSS variables with exponential backoff and timeout\n   */\n  private pollForCssVars(): Promise<void> {\n    return new Promise((resolve, reject) => {\n      const maxWaitTime = 3000;\n      const checkInterval = 50;\n      const startTime = Date.now();\n\n      const checkCssVars = () => {\n        if (this.pollCssVarsCanceled) {\n          reject(new Error('MeshGradient: poll canceled'));\n\n          return;\n        }\n\n        if (this.areCssVarsLoaded()) {\n          resolve();\n\n          return;\n        }\n\n        if (Date.now() - startTime > maxWaitTime) {\n          reject(new Error('CSS variables timeout'));\n\n          return;\n        }\n\n        const elapsed = Date.now() - startTime;\n        const interval = Math.min(checkInterval + elapsed / 20, 200);\n\n        this.instanceTimers.setTimeoutMs(checkCssVars, interval);\n      };\n\n      checkCssVars();\n    });\n  }\n\n  /**\n   * Uses fallback colors when CSS variables are not available\n   */\n  private useFallbackColors(): void {\n    this.sectionColors = CONSTANTS.DEFAULT_FALLBACK_COLORS.map((n) => normalizeColor(n));\n  }\n\n  /**\n   * Initialize gradient colors with fallback priority:\n   * 1. Colors from configuration (highest priority)\n   * 2. Colors from CSS variables\n   * 3. Random generated colors (fallback if neither above are available)\n   */\n  private initGradientColors() {\n    // If colors are provided in config, use them with priority\n    if (this.configColors) {\n      this.sectionColors = this.configColors\n        .map((hexValue) => parseHexColor(hexValue))\n        .filter((color): color is number => color !== null)\n        .map((colorValue) => normalizeColor(colorValue));\n\n      return;\n    }\n\n    // Fallback to CSS variables\n    const cssVars = CONSTANTS.CSS_GRADIENT_VARS;\n\n    this.sectionColors = cssVars\n      .map((cssPropertyName) => {\n        const hexValue = this.computedCanvasStyle ? this.computedCanvasStyle.getPropertyValue(cssPropertyName) : '';\n\n        return parseHexColor(hexValue);\n      })\n      .filter((color): color is number => color !== null)\n      .map((colorValue) => normalizeColor(colorValue));\n\n    // Final fallback to random colors if no colors were found\n    if (!this.sectionColors || this.sectionColors.length === 0) {\n      const randomColors = genRandomColors();\n\n      this.sectionColors = randomColors\n        .map((hexValue) => parseHexColor(hexValue))\n        .filter((color): color is number => color !== null)\n        .map((colorValue) => normalizeColor(colorValue));\n    }\n  }\n}\n"]}