{
  "version": 3,
  "sources": ["/cdn/shop/t/8/assets/smoof-qhs-product-view-v1.js?check=263final"],
  "sourcesContent": ["(() => {\n  'use strict';\n\n  if (window.__smoofStandingProductViewV1) return;\n\n  const PROFILE = window.SmoofProductProfiles?.current;\n  const PRESENTATION = PROFILE?.scene?.presentation;\n  const PROFILE_ADAPTER_ENABLED = PROFILE?.orientation === 'standing' ||\n    PRESENTATION?.adapter === 'homography-product';\n  if (!PRESENTATION?.enabled || !PROFILE_ADAPTER_ENABLED) return;\n\n  window.__smoofStandingProductViewV1 = true;\n  window.__smoofQhsProductViewV1 = true;\n\n  const VERSION = 'standing-product-view-v1.31.0';\n  const SCRIPT_URL = document.currentScript?.src || '';\n  const ROOT = document.documentElement;\n  const APERTURE_GEOMETRY = PRESENTATION.apertureGeometry;\n  const EDITOR_BASE_GEOMETRY = PRESENTATION.editorBaseGeometry || {\n    left: -23.02, top: -23.02, width: 146.04, height: 146.04\n  };\n  const ARTWORK_SURFACE_RATIO = Number(PRESENTATION.artworkSurfaceRatio) || 0.7068;\n  const PRINT_CLIP_RADIUS_RATIO = 0.3525;\n  const ARTWORK_OVERSCAN = Number(PRESENTATION.artworkOverscan) || 1;\n  const CONFIGURED_FRONT_ARTWORK_SCALE = Number(PRESENTATION.frontArtworkScale) || 1;\n  const THREE_QUARTER_ARTWORK_OVERSCAN = Number(PRESENTATION.threeQuarterArtworkOverscan) || 1;\n  const THREE_QUARTER_VIEW_SCALE = Number(PRESENTATION.threeQuarterViewScale) || 1.3;\n  const BASE_SHADOW_MODE = PRESENTATION.baseShadowMode === 'asset' ? 'asset' : 'runtime';\n  const PROJECTION = PRESENTATION.projection || {};\n  const CALIBRATION_MODE = new URLSearchParams(window.location.search).get('smoof_calibrate');\n  const CALIBRATION_ENABLED = CALIBRATION_MODE === 'standing-3q';\n  const FRONT_CALIBRATION_ENABLED = CALIBRATION_MODE === 'standing-front';\n  const CALIBRATION_STORAGE_KEY = `smoof-standing-calibration:${PROJECTION.calibrationId || PROFILE.id}`;\n  const FRONT_CALIBRATION_STORAGE_KEY = `smoof-standing-front-scale:${PROFILE.id}`;\n  const BASE_OBJECT_BOUNDS = Object.freeze(PRESENTATION.baseObjectBounds || {\n    front: Object.freeze({ left: 21.65, top: 21.4, width: 56.65, height: 57 }),\n    threeQuarter: Object.freeze({ left: 25.35, top: 21.55, width: 49.35, height: 56.95 })\n  });\n  const ASSET_PREFIX = String(PRESENTATION.assetPrefix || PROFILE.id || 'standing');\n  const PROFILE_ASSETS = PRESENTATION.assets\n    ? Object.freeze(Object.fromEntries(\n        Object.entries(PRESENTATION.assets).map(([key, value]) => [\n          key,\n          Object.freeze({\n            front: assetUrl(String(value?.front || '')),\n            threeQuarter: assetUrl(String(value?.threeQuarter || ''))\n          })\n        ])\n      ))\n    : null;\n  const ASSETS = Object.freeze(\n    Object.fromEntries(['oak', 'earth', 'obsidian'].map(wood => [\n      wood,\n      Object.freeze({\n        front: assetUrl(`${ASSET_PREFIX}_${wood}_front.png`),\n        threeQuarter: assetUrl(`${ASSET_PREFIX}_${wood}_3q.png`)\n      })\n    ]))\n  );\n\n  let threeQuarterActive = CALIBRATION_ENABLED;\n  let activeSurface = 'front';\n  let renderTimer = 0;\n  let renderRevision = 0;\n  let artworkObjectUrl = '';\n  let lastWood = '';\n  let calibrationCorners = readCalibrationCorners();\n  let frontArtworkScale = readFrontArtworkScale();\n  let designRenderer = window.SmoofDesignRenderer || null;\n  const presentationLayerStyles = new WeakMap();\n  const PRESENTATION_LAYER_SELECTORS = Object.freeze([\n    'canvas',\n    '[data-smoof-payment-frame]',\n    '[data-smoof-qr-frame]',\n    '[data-smoof-nfc-frame]',\n    '[data-smoof-movable-logo]',\n    '[data-smoof-qr-white-panel]',\n    '[data-smoof-native-arrow-eraser-overlay]',\n    '[data-smoof-arrow-overlay]',\n    '[data-smoof-text-overlay]',\n    '[data-smoof-logo-duplicate-overlay]',\n    '[data-smoof-number-brand-overlay]',\n    '[data-smoof-custom-pictogram-layer]',\n    '[data-smoof-vector-preview]'\n  ]);\n\n  function assetUrl(name) {\n    if (!SCRIPT_URL) return name;\n    const url = new URL(name, SCRIPT_URL);\n    const assetVersion = String(PRESENTATION.assetVersion || '').trim();\n    if (assetVersion) url.searchParams.set('smoof_asset', assetVersion);\n    return url.href;\n  }\n\n  function normalized(value) {\n    return String(value || '')\n      .toLowerCase()\n      .normalize('NFD')\n      .replace(/[\\u0300-\\u036f]/g, '')\n      .replace(/\\s+/g, ' ')\n      .trim();\n  }\n\n  function isEnglish() {\n    return normalized(document.documentElement.lang).startsWith('en');\n  }\n\n  function selectedWood() {\n    const state = window.SmoofProductVariant?.get?.() || {};\n    const values = [state.woodCode, state.materialCode];\n\n    document.querySelectorAll(\n      'variant-picker input[type=\"radio\"]:checked, variant-selects input[type=\"radio\"]:checked, ' +\n      'variant-picker select, variant-selects select, form[action*=\"/cart/add\"] select[name^=\"options\"]'\n    ).forEach(control => {\n      values.push(control.value || '');\n      values.push(control.selectedOptions?.[0]?.textContent || '');\n      values.push(control.closest('label')?.textContent || '');\n    });\n\n    const text = normalized(values.join(' '));\n    if (text.includes('obsidian') || text.includes('schwarz')) return 'obsidian';\n    if (text.includes('earth') || text.includes('braun') || text.includes('dunkel')) return 'earth';\n    return 'oak';\n  }\n\n  function editorRoot() {\n    return document.querySelector('.po-livePreview-root');\n  }\n\n  function stage() {\n    return document.querySelector('.po-livePreview-stage .konvajs-content');\n  }\n\n  function ensureStyles() {\n    if (document.querySelector('[data-smoof-qhs-view-styles]')) return;\n    const style = document.createElement('style');\n    style.dataset.smoofQhsViewStyles = VERSION;\n    style.textContent = `\n      [data-smoof-qhs-product-view] {\n        position: absolute; inset: 0; overflow: hidden; background: #fff; pointer-events: none;\n      }\n      [data-smoof-qhs-product-view] > img { position: absolute; display: block; pointer-events: none; user-select: none; }\n      [data-smoof-qhs-base-shadow] { position: absolute; pointer-events: none; }\n      [data-smoof-qhs-base-shadow] { z-index: 1; background: transparent; }\n      [data-smoof-qhs-artwork] { z-index: 2; object-fit: fill; }\n      [data-smoof-qhs-gloss] {\n        position: absolute; z-index: 4; overflow: visible; pointer-events: none;\n        transform-origin: 0 0;\n      }\n      [data-smoof-qhs-product-view][data-smoof-profile-id=\"base-rhs-wood-double\"]\n        [data-smoof-qhs-gloss],\n      [data-smoof-qhs-product-view][data-smoof-profile-id=\"base-qhs-wood-double\"]\n        [data-smoof-qhs-gloss] {\n        z-index: 2;\n      }\n      [data-smoof-qhs-product-view][data-smoof-profile-id=\"base-rml-stainless-epoxy-single\"]\n        [data-smoof-qhs-gloss] {\n        z-index: 2;\n      }\n      [data-smoof-qhs-product-view][data-smoof-profile-id=\"base-rhl-wood-single\"]\n        [data-smoof-qhs-gloss] {\n        z-index: 2;\n      }\n      [data-smoof-qhs-product-view][data-smoof-profile-id=\"base-qhl-wood-single\"]\n        [data-smoof-qhs-gloss] {\n        z-index: 2;\n      }\n      [data-smoof-qhs-base] { z-index: 3; max-width: none !important; object-fit: contain; }\n      [data-smoof-qhs-standard-dome] {\n        position: absolute; overflow: hidden; border-radius: 50%; pointer-events: none;\n      }\n      [data-smoof-qhs-standard-dome],\n      [data-smoof-qhs-standard-depth],\n      [data-smoof-qhs-standard-wash],\n      [data-smoof-qhs-standard-highlight],\n      [data-smoof-qhs-standard-rim] { display: block !important; }\n      [data-smoof-qhs-standard-depth] {\n        position: absolute; inset: 0; border-radius: 50%; pointer-events: none;\n        background: radial-gradient(circle at 50% 44%, transparent 0%, transparent 76%,\n          rgba(20,25,34,.025) 84%, rgba(20,25,34,.12) 97%, rgba(20,25,34,.17) 100%);\n        box-shadow: inset 0 3px 5px rgba(255,255,255,.28),\n          inset 0 -9px 16px rgba(20,25,34,.1);\n      }\n      [data-smoof-qhs-standard-wash] {\n        position: absolute; inset: 0; border-radius: 50%; pointer-events: none;\n        background: radial-gradient(ellipse at 24% 1%, rgba(255,255,255,.58) 0%,\n          rgba(255,255,255,.24) 8%, rgba(255,255,255,.07) 17%, transparent 27%);\n        mix-blend-mode: screen; opacity: .76; transition: transform 180ms ease-out;\n      }\n      [data-smoof-qhs-standard-highlight] {\n        position: absolute; left: 5%; top: 3%; width: 90%; height: 90%; box-sizing: border-box;\n        border-radius: 50%; border-top: 4px solid rgba(255,255,255,.82);\n        border-left: 1px solid rgba(255,255,255,.2);\n        border-right: 1px solid rgba(255,255,255,.1);\n        background: transparent; filter: blur(1px); mix-blend-mode: screen; opacity: .86;\n        transform: rotate(-7deg); transform-origin: center;\n        transition: transform 180ms ease-out, opacity 180ms ease-out; pointer-events: none;\n      }\n      [data-smoof-qhs-standard-highlight]::after {\n        content: \"\"; position: absolute; inset: 3.5%; box-sizing: border-box;\n        border-radius: 50%; border-top: 1.5px solid rgba(255,255,255,.74);\n        background: transparent; filter: blur(.45px); opacity: .9;\n      }\n      [data-smoof-qhs-standard-rim] {\n        position: absolute; inset: 0; box-sizing: border-box; pointer-events: none;\n        border: 1px solid rgba(255,255,255,.34); border-radius: 50%;\n        box-shadow: inset 0 0 0 2px rgba(20,25,34,.08),\n          inset 0 0 0 5px rgba(255,255,255,.075),\n          inset 2px 3px 5px rgba(255,255,255,.24),\n          inset -3px -5px 8px rgba(20,25,34,.1);\n      }\n      html[data-smoof-qhs-mode=\"product\"] [data-smoof-qhs-product-view] {\n        z-index: 73; background: transparent;\n      }\n      html[data-smoof-qhs-mode] .product__media { background-color: #fff !important; }\n      html[data-smoof-product-profile=\"base-rml-stainless-epoxy-single\"][data-smoof-qhs-mode=\"product\"]\n        .product__media { background-color: transparent !important; }\n      html[data-smoof-product-profile=\"base-rhl-wood-single\"][data-smoof-qhs-mode]\n        [data-smoof-qhs-product-view][data-smoof-preserve-native-front=\"true\"][data-smoof-view=\"front\"] {\n        display: none !important;\n      }\n      html[data-smoof-product-profile=\"base-rhl-wood-single\"][data-smoof-qhs-mode]\n        [data-smoof-product-scene-base] { display: none !important; }\n      html[data-smoof-product-profile=\"base-qhl-wood-single\"][data-smoof-qhs-mode]\n        [data-smoof-product-scene-base] { display: none !important; }\n      slider-element[data-smoof-standing-editor-slider] > .product__media-list {\n        visibility: hidden !important; opacity: 0 !important; pointer-events: none !important;\n      }\n      [data-smoof-standing-editor-viewport] { background: #fff !important; }\n      [data-smoof-standing-editor-viewport] > .indicators { display: none !important; }\n      html[data-smoof-qhs-mode=\"product\"] [data-smoof-background-base] {\n        clip-path: circle(35.34% at 50% 50%);\n        -webkit-clip-path: circle(35.34% at 50% 50%);\n      }\n      html[data-smoof-qhs-mode=\"print\"] [data-smoof-qhs-product-view] { display: none !important; }\n      html[data-smoof-qhs-mode] [data-smoof-surface-overlay] { display: none !important; }\n      html[data-smoof-qhs-mode=\"three-quarter\"] [data-smoof-qhs-product-view] {\n        z-index: 2147483500; pointer-events: auto; background: #fff;\n      }\n      html[data-smoof-qhs-mode=\"three-quarter\"] [data-smoof-standing-live-canvas] {\n        opacity: 0 !important;\n      }\n      [data-smoof-qhs-3d-toggle] {\n        appearance: none; border: 0; border-radius: 9px; background: transparent; color: #171719;\n        height: 34px; min-height: 34px; padding: 0 12px; display: block;\n        font-family: inherit; font-size: 12px; font-weight: 650; line-height: normal; white-space: nowrap; cursor: pointer;\n        transition: background-color .16s ease, color .16s ease, transform .16s ease;\n      }\n      [data-smoof-qhs-3d-toggle][data-smoof-ui-tone=\"dark\"] { color: #f7f7f8; }\n      [data-smoof-qhs-3d-toggle]:hover:not(:disabled) { background: rgba(127,127,127,.16); transform: translateY(-1px); }\n      [data-smoof-qhs-3d-toggle][aria-pressed=\"true\"] {\n        background: rgb(31,31,33); color: #fff; box-shadow: 0 3px 9px rgba(0,0,0,.14);\n      }\n      [data-smoof-qhs-3d-toggle][data-smoof-ui-tone=\"dark\"][aria-pressed=\"true\"] {\n        background: rgba(255,255,255,.14); color: #fff;\n      }\n      [data-smoof-qhs-3d-toggle]:disabled { opacity: .42; cursor: default; }\n      html[data-smoof-qhs-mode] [data-smoof-product-profile-scene],\n      html[data-smoof-qhs-mode] [data-smoof-product-profile-badge] { display: none !important; }\n      [data-smoof-standing-calibration-grid] {\n        position: absolute; z-index: 8; pointer-events: none; max-width: none !important;\n        transform-origin: 0 0; opacity: .82; mix-blend-mode: multiply;\n      }\n      [data-smoof-standing-calibration-handle] {\n        position: absolute; z-index: 9; width: 22px; height: 22px; margin: -11px 0 0 -11px;\n        border: 3px solid #fff; border-radius: 50%; background: #ff2d8d;\n        box-shadow: 0 2px 10px rgba(0,0,0,.32); pointer-events: auto; cursor: grab;\n        touch-action: none;\n      }\n      [data-smoof-standing-calibration-handle]::after {\n        content: attr(data-label); position: absolute; left: 15px; top: -7px;\n        padding: 3px 6px; border-radius: 5px; background: #171719; color: #fff;\n        font: 700 11px/1.2 system-ui, sans-serif; white-space: nowrap;\n      }\n      [data-smoof-standing-calibration-panel] {\n        position: fixed; z-index: 2147483646; right: 18px; bottom: 18px; width: min(390px, calc(100vw - 36px));\n        padding: 14px; border-radius: 14px; background: rgba(24,24,26,.96); color: #fff;\n        box-shadow: 0 12px 40px rgba(0,0,0,.28); font: 13px/1.4 system-ui, sans-serif;\n      }\n      [data-smoof-standing-calibration-panel] strong { display: block; margin-bottom: 5px; font-size: 15px; }\n      [data-smoof-standing-calibration-panel] textarea {\n        width: 100%; min-height: 92px; margin: 10px 0; padding: 8px; box-sizing: border-box;\n        border: 1px solid #555; border-radius: 8px; background: #0d0d0e; color: #fff;\n        font: 11px/1.35 ui-monospace, SFMono-Regular, Menlo, monospace; resize: vertical;\n      }\n      [data-smoof-standing-calibration-panel] button {\n        min-height: 34px; margin-right: 7px; padding: 0 11px; border: 0; border-radius: 8px;\n        background: #fff; color: #111; font: 700 12px/1 system-ui, sans-serif; cursor: pointer;\n      }\n      [data-smoof-standing-front-calibration-panel] input[type=\"range\"] {\n        width: 100%; margin: 13px 0 8px; accent-color: #ff2d8d;\n      }\n      [data-smoof-standing-front-calibration-panel] output {\n        display: block; margin-bottom: 10px; font: 800 18px/1 system-ui, sans-serif;\n      }\n    `;\n    document.head.appendChild(style);\n  }\n\n  function ensureThreeQuarterToggle() {\n    document.querySelector('[data-smoof-qhs-view-controls]')?.remove();\n    let switcher = document.querySelector('[data-smoof-surface-switcher]');\n    if (!switcher && PRESENTATION.singleSurfaceToolbar === true) {\n      const host = document.querySelector('[data-smoof-ui-commandbar-host]');\n      if (host) {\n        host.dataset.smoofSurfaceHost = 'true';\n        switcher = document.createElement('section');\n        switcher.dataset.smoofSurfaceSwitcher = 'true';\n        switcher.dataset.smoofSingleSurfacePresentation = 'true';\n        switcher.dataset.smoofEditorItem = 'modern-ui-control';\n        switcher.setAttribute('aria-label', isEnglish() ? 'Product view' : 'Produktansicht');\n        host.appendChild(switcher);\n      }\n    }\n    if (!switcher) return null;\n\n    const existing = [...switcher.querySelectorAll(\n      '[data-smoof-qhs-3d-toggle], [data-smoof-qhs3d-toggle]'\n    )];\n    let button = existing.shift() || null;\n    existing.forEach(duplicate => duplicate.remove());\n    if (button) {\n      button.removeAttribute('data-smoof-qhs3d-toggle');\n      button.setAttribute('data-smoof-qhs-3d-toggle', VERSION);\n      bindThreeQuarterToggle(button);\n      syncToggleTone(button, switcher);\n      return button;\n    }\n\n    button = document.createElement('button');\n    button.type = 'button';\n    button.setAttribute('data-smoof-qhs-3d-toggle', VERSION);\n    button.textContent = '3D-Ansicht';\n    bindThreeQuarterToggle(button);\n    switcher.appendChild(button);\n    syncToggleTone(button, switcher);\n    return button;\n  }\n\n  function bindThreeQuarterToggle(button) {\n    if (!button || window.__smoofStandingProductViewToggle === VERSION) return;\n    Object.defineProperty(window, '__smoofStandingProductViewToggle', {\n      configurable: true,\n      value: VERSION\n    });\n    window.addEventListener('click', async event => {\n      const button = event.target?.closest?.('[data-smoof-qhs-3d-toggle]');\n      if (!button) return;\n      if (button.disabled) return;\n      designRenderer = window.SmoofDesignRenderer || designRenderer;\n      if (threeQuarterActive) {\n        threeQuarterActive = false;\n        render();\n        return;\n      }\n\n      button.disabled = true;\n      const blob = await captureArtworkBlob();\n      threeQuarterActive = true;\n      render();\n      button.disabled = false;\n\n      if (blob) {\n        applyArtworkBlob(blob);\n      } else {\n        scheduleArtwork(true);\n      }\n    }, true);\n  }\n\n  function syncToggleTone(button, switcher) {\n    const color = getComputedStyle(switcher).backgroundColor.match(/[\\d.]+/g)?.map(Number) || [];\n    const [red = 255, green = 255, blue = 255] = color;\n    const luminance = red * .2126 + green * .7152 + blue * .0722;\n    button.dataset.smoofUiTone = luminance < 128 ? 'dark' : 'light';\n  }\n\n  function isolateProductGallery() {\n    const slider = editorRoot()?.closest('slider-element');\n    if (!slider) return;\n    slider.setAttribute('data-smoof-standing-editor-slider', VERSION);\n    slider.parentElement?.setAttribute('data-smoof-standing-editor-viewport', VERSION);\n  }\n\n  function presentationLayers(targetStage) {\n    return [...targetStage.querySelectorAll(PRESENTATION_LAYER_SELECTORS.join(','))]\n      .filter(element => !element.closest('[data-smoof-qhs-product-view]'))\n      .filter(element => !element.parentElement?.closest('[data-smoof-qhs-product-view]'))\n      .filter((element, index, elements) => !elements.some((candidate, candidateIndex) =>\n        candidateIndex !== index && candidate.contains(element)\n      ));\n  }\n\n  function rememberPresentationLayerStyle(element) {\n    if (presentationLayerStyles.has(element)) return;\n    const properties = ['transform', 'transform-origin', 'clip-path', '-webkit-clip-path', 'opacity'];\n    presentationLayerStyles.set(element, Object.fromEntries(properties.map(property => [\n      property,\n      {\n        value: element.style.getPropertyValue(property),\n        priority: element.style.getPropertyPriority(property)\n      }\n    ])));\n  }\n\n  function restorePresentationLayerStyle(element) {\n    const original = presentationLayerStyles.get(element);\n    if (!original) return;\n    Object.entries(original).forEach(([property, state]) => {\n      if (state.value) element.style.setProperty(property, state.value, state.priority);\n      else element.style.removeProperty(property);\n    });\n  }\n\n  function tagPresentationLayers(targetStage) {\n    presentationLayers(targetStage).forEach(element => {\n      rememberPresentationLayerStyle(element);\n      element.dataset.smoofStandingArtworkLayer = VERSION;\n      if (element.tagName === 'CANVAS') element.dataset.smoofStandingLiveCanvas = VERSION;\n    });\n  }\n\n  function syncArtworkPresentation(targetStage, mode) {\n    presentationLayers(targetStage).forEach(element => {\n      rememberPresentationLayerStyle(element);\n      restorePresentationLayerStyle(element);\n\n      if (mode === 'product') {\n        const original = presentationLayerStyles.get(element)?.transform?.value || '';\n        const baseTransform = original && original !== 'none' ? `${original} ` : '';\n        const originX = targetStage.clientWidth / 2 - element.offsetLeft;\n        const originY = targetStage.clientHeight / 2 - element.offsetTop;\n        element.style.setProperty('transform-origin', `${originX}px ${originY}px`, 'important');\n        element.style.setProperty('transform', `${baseTransform}scale(${frontArtworkScale})`, 'important');\n        element.style.setProperty('opacity', '1', 'important');\n        if (element.tagName === 'CANVAS') {\n          element.style.setProperty('clip-path', 'circle(35.34% at 50% 50%)', 'important');\n          element.style.setProperty('-webkit-clip-path', 'circle(35.34% at 50% 50%)', 'important');\n        }\n      } else if (mode === 'three-quarter') {\n        element.style.setProperty('opacity', '0', 'important');\n      }\n    });\n  }\n\n  function ensureScene(targetStage) {\n    let scene = targetStage.querySelector('[data-smoof-qhs-product-view]');\n    if (scene) return scene;\n\n    scene = document.createElement('div');\n    scene.dataset.smoofQhsProductView = VERSION;\n    scene.dataset.smoofProfileId = PROFILE.id;\n    scene.dataset.smoofPreserveNativeFront = String(PRESENTATION.preserveNativeFront === true);\n    scene.setAttribute('aria-hidden', 'true');\n\n    const baseShadow = document.createElement('div');\n    baseShadow.dataset.smoofQhsBaseShadow = 'true';\n\n    const artwork = document.createElement('img');\n    artwork.dataset.smoofQhsArtwork = 'true';\n    artwork.alt = '';\n    artwork.decoding = 'async';\n\n    const base = document.createElement('img');\n    base.dataset.smoofQhsBase = 'true';\n    base.alt = '';\n    base.decoding = 'async';\n    base.draggable = false;\n\n    const gloss = document.createElement('div');\n    gloss.dataset.smoofQhsGloss = 'true';\n\n    const dome = document.createElement('div');\n    dome.dataset.smoofQhsStandardDome = 'true';\n    const depth = document.createElement('div');\n    depth.dataset.smoofQhsStandardDepth = 'true';\n    const wash = document.createElement('div');\n    wash.dataset.smoofQhsStandardWash = 'true';\n    const highlight = document.createElement('div');\n    highlight.dataset.smoofQhsStandardHighlight = 'true';\n    const rim = document.createElement('div');\n    rim.dataset.smoofQhsStandardRim = 'true';\n    dome.append(depth, wash, highlight, rim);\n    gloss.appendChild(dome);\n    applyGeometry(dome, printCircleGeometry());\n    bindStandardGlossPointer(targetStage);\n\n    scene.append(baseShadow, artwork, base, gloss);\n    targetStage.prepend(scene);\n    return scene;\n  }\n\n  function bindStandardGlossPointer(targetStage) {\n    if (targetStage.dataset.smoofStandingGlossPointer) return;\n    targetStage.dataset.smoofStandingGlossPointer = VERSION;\n    let pending = false;\n\n    const reset = () => {\n      const wash = targetStage.querySelector('[data-smoof-qhs-standard-wash]');\n      const highlight = targetStage.querySelector('[data-smoof-qhs-standard-highlight]');\n      if (wash) wash.style.transform = 'translate(0px, 0px)';\n      if (highlight) {\n        highlight.style.transform = 'translate(0px, 0px) rotate(-7deg)';\n        highlight.style.opacity = '.86';\n      }\n    };\n\n    targetStage.addEventListener('pointermove', event => {\n      if (pending || !window.matchMedia('(hover: hover) and (pointer: fine)').matches) return;\n      pending = true;\n      requestAnimationFrame(() => {\n        pending = false;\n        const rect = targetStage.getBoundingClientRect();\n        const wash = targetStage.querySelector('[data-smoof-qhs-standard-wash]');\n        const highlight = targetStage.querySelector('[data-smoof-qhs-standard-highlight]');\n        if (!rect.width || !rect.height || !wash || !highlight) return;\n        const x = (event.clientX - rect.left) / rect.width - .5;\n        const y = (event.clientY - rect.top) / rect.height - .5;\n        wash.style.transform = `translate(${x * 5}px, ${y * 4}px)`;\n        highlight.style.transform = `translate(${x * 4}px, ${y * 3}px) rotate(-7deg)`;\n        highlight.style.opacity = String(.84 + Math.max(-.05, Math.min(.07, -y * .1)));\n      });\n    }, { passive: true });\n    targetStage.addEventListener('pointerleave', reset, { passive: true });\n    reset();\n  }\n\n  function isProductPresentation() {\n    return editorRoot()?.dataset.smoofProductPresentation !== 'print' &&\n      ROOT.dataset.smoofProductPresentation !== 'print';\n  }\n\n  function updateThreeQuarterToggle(button, productPresentation) {\n    if (!button) return;\n    const label = isEnglish()\n      ? (threeQuarterActive ? 'Show frontal product view' : 'Show 3D view')\n      : (threeQuarterActive ? 'Frontalansicht anzeigen' : '3D-Ansicht anzeigen');\n    button.setAttribute('aria-label', label);\n    button.setAttribute('title', label);\n    button.setAttribute('aria-pressed', String(threeQuarterActive && productPresentation));\n    button.disabled = !productPresentation || FRONT_CALIBRATION_ENABLED;\n  }\n\n  function expandedGeometry(geometry, factor) {\n    const width = geometry.width * factor;\n    const height = geometry.height * factor;\n    return {\n      left: geometry.left - (width - geometry.width) / 2,\n      top: geometry.top - (height - geometry.height) / 2,\n      width,\n      height\n    };\n  }\n\n  function scaledGeometry(geometry, factor) {\n    return {\n      ...geometry,\n      left: 50 + (geometry.left - 50) * factor,\n      top: 50 + (geometry.top - 50) * factor,\n      width: geometry.width * factor,\n      height: geometry.height * factor\n    };\n  }\n\n  function artworkGeometry(aperture) {\n    return expandedGeometry({\n      left: aperture.left - (aperture.width / ARTWORK_SURFACE_RATIO - aperture.width) / 2,\n      top: aperture.top - (aperture.height / ARTWORK_SURFACE_RATIO - aperture.height) / 2,\n      width: aperture.width / ARTWORK_SURFACE_RATIO,\n      height: aperture.height / ARTWORK_SURFACE_RATIO\n    }, ARTWORK_OVERSCAN);\n  }\n\n  function childGeometry(parent, child) {\n    return {\n      left: parent.left + parent.width * child.left / 100,\n      top: parent.top + parent.height * child.top / 100,\n      width: parent.width * child.width / 100,\n      height: parent.height * child.height / 100\n    };\n  }\n\n  function applyGeometry(element, geometry) {\n    Object.assign(element.style, {\n      left: `${geometry.left}%`,\n      top: `${geometry.top}%`,\n      width: `${geometry.width}%`,\n      height: `${geometry.height}%`\n    });\n  }\n\n  function validCorners(value) {\n    return Array.isArray(value) && value.length === 4 && value.every(point =>\n      Array.isArray(point) && point.length === 2 && point.every(Number.isFinite)\n    );\n  }\n\n  function printCircleGeometry() {\n    const diameter = PRINT_CLIP_RADIUS_RATIO * 200;\n    return {\n      left: 50 - diameter / 2,\n      top: 50 - diameter / 2,\n      width: diameter,\n      height: diameter\n    };\n  }\n\n  function readCalibrationCorners() {\n    if (CALIBRATION_ENABLED) {\n      try {\n        const stored = JSON.parse(window.localStorage.getItem(CALIBRATION_STORAGE_KEY) || 'null');\n        if (validCorners(stored)) return stored;\n      } catch (_error) {}\n    }\n    const configured = PROJECTION.threeQuarterCorners;\n    if (validCorners(configured)) return configured.map(point => [...point]);\n    const seed = PROJECTION.calibrationSeedCorners;\n    return validCorners(seed) ? seed.map(point => [...point]) : null;\n  }\n\n  function readFrontArtworkScale() {\n    if (FRONT_CALIBRATION_ENABLED) {\n      const stored = Number(window.localStorage.getItem(FRONT_CALIBRATION_STORAGE_KEY));\n      if (Number.isFinite(stored) && stored >= .45 && stored <= 1.15) return stored;\n    }\n    return CONFIGURED_FRONT_ARTWORK_SCALE;\n  }\n\n  function activeProjectionCorners() {\n    if (CALIBRATION_ENABLED) return calibrationCorners;\n    return validCorners(PROJECTION.threeQuarterCorners) ? PROJECTION.threeQuarterCorners : null;\n  }\n\n  function presentationProjectionCorners(corners, stageWidth) {\n    if (!validCorners(corners) || CALIBRATION_ENABLED) return corners;\n    const edgeBleedPx = Math.max(0, Number(PROJECTION.edgeBleedPx) || 0);\n    if (!edgeBleedPx || !stageWidth) return corners;\n    const bleedPercent = edgeBleedPx / stageWidth * 100;\n    return corners.map(([x, y], index) => [\n      x + (index === 0 || index === 3 ? -bleedPercent : bleedPercent),\n      y\n    ]);\n  }\n\n  function solveLinearSystem(matrix, vector) {\n    const size = vector.length;\n    const rows = matrix.map((row, index) => [...row, vector[index]]);\n    for (let column = 0; column < size; column += 1) {\n      let pivot = column;\n      for (let row = column + 1; row < size; row += 1) {\n        if (Math.abs(rows[row][column]) > Math.abs(rows[pivot][column])) pivot = row;\n      }\n      if (Math.abs(rows[pivot][column]) < 1e-9) return null;\n      [rows[column], rows[pivot]] = [rows[pivot], rows[column]];\n      const divisor = rows[column][column];\n      for (let item = column; item <= size; item += 1) rows[column][item] /= divisor;\n      for (let row = 0; row < size; row += 1) {\n        if (row === column) continue;\n        const factor = rows[row][column];\n        for (let item = column; item <= size; item += 1) {\n          rows[row][item] -= factor * rows[column][item];\n        }\n      }\n    }\n    return rows.map(row => row[size]);\n  }\n\n  function homographyCoefficients(corners, width, height, sourceGeometry) {\n    if (!validCorners(corners) || !width || !height) return null;\n    const geometry = sourceGeometry || { left: 0, top: 0, width: 100, height: 100 };\n    const left = width * geometry.left / 100;\n    const top = height * geometry.top / 100;\n    const right = width * (geometry.left + geometry.width) / 100;\n    const bottom = height * (geometry.top + geometry.height) / 100;\n    const source = [[left, top], [right, top], [right, bottom], [left, bottom]];\n    const target = corners.map(([x, y]) => [width * x / 100, height * y / 100]);\n    const matrix = [];\n    const vector = [];\n    source.forEach(([x, y], index) => {\n      const [u, v] = target[index];\n      matrix.push([x, y, 1, 0, 0, 0, -u * x, -u * y]);\n      vector.push(u);\n      matrix.push([0, 0, 0, x, y, 1, -v * x, -v * y]);\n      vector.push(v);\n    });\n    return solveLinearSystem(matrix, vector);\n  }\n\n  function homographyMatrix3d(corners, width, height, sourceGeometry) {\n    const h = homographyCoefficients(corners, width, height, sourceGeometry);\n    if (!h) return null;\n    return [\n      h[0], h[3], 0, h[6],\n      h[1], h[4], 0, h[7],\n      0, 0, 1, 0,\n      h[2], h[5], 0, 1\n    ];\n  }\n\n  function applyProjectiveTransform(element, corners, width, height, sourceGeometry) {\n    const matrix = homographyMatrix3d(corners, width, height, sourceGeometry);\n    if (!matrix) return false;\n    Object.assign(element.style, {\n      left: '0px', top: '0px', width: `${width}px`, height: `${height}px`,\n      clipPath: 'none', webkitClipPath: 'none', transformOrigin: '0 0',\n      transform: `matrix3d(${matrix.map(value => Number(value.toFixed(10))).join(',')})`\n    });\n    return true;\n  }\n\n  function calibrationGridUrl() {\n    const lines = [];\n    for (let value = 100; value < 1000; value += 100) {\n      const major = value === 500;\n      lines.push(`<path d=\"M${value} 10V990M10 ${value}H990\" stroke=\"${major ? '#ff2d8d' : '#00a7ff'}\" stroke-width=\"${major ? 9 : 4}\"/>`);\n    }\n    const svg = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1000 1000\">\n      <circle cx=\"500\" cy=\"500\" r=\"352.5\" fill=\"rgba(255,255,255,.16)\" stroke=\"#ff2d8d\" stroke-width=\"8\"/>\n      <g clip-path=\"url(#c)\">${lines.join('')}</g>\n      <defs><clipPath id=\"c\"><circle cx=\"500\" cy=\"500\" r=\"352.5\"/></clipPath></defs>\n      <text x=\"500\" y=\"173\" text-anchor=\"middle\" fill=\"#171719\" font-family=\"system-ui\" font-size=\"28\" font-weight=\"800\">EXAKTER EDITOR-KREIS</text>\n      <text x=\"835\" y=\"510\" text-anchor=\"end\" fill=\"#171719\" font-family=\"system-ui\" font-size=\"26\" font-weight=\"800\">RECHTS</text>\n    </svg>`;\n    return `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svg)}`;\n  }\n\n  function calibrationPayload() {\n    return {\n      engine: 'homography-v1',\n      profileId: PROFILE.id,\n      calibrationId: PROJECTION.calibrationId || PROFILE.id,\n      sourceGeometry: 'print-circle',\n      threeQuarterCorners: calibrationCorners.map(point => point.map(value => Number(value.toFixed(4))))\n    };\n  }\n\n  function updateCalibrationPanel() {\n    const panel = document.querySelector('[data-smoof-standing-calibration-panel]');\n    const textarea = panel?.querySelector('textarea');\n    if (textarea) textarea.value = JSON.stringify(calibrationPayload(), null, 2);\n  }\n\n  function saveCalibration() {\n    window.localStorage.setItem(CALIBRATION_STORAGE_KEY, JSON.stringify(calibrationCorners));\n    updateCalibrationPanel();\n  }\n\n  function ensureCalibrationPanel() {\n    if (!CALIBRATION_ENABLED || document.querySelector('[data-smoof-standing-calibration-panel]')) return;\n    const panel = document.createElement('div');\n    panel.dataset.smoofStandingCalibrationPanel = VERSION;\n    panel.innerHTML = `<strong>3D-Fl\u00E4che kalibrieren</strong>\n      <span>Die vier pinken Punkte verschieben. Raster und Motiv verwenden exakt denselben ausgeschnittenen Editor-Kreis.</span>\n      <textarea readonly aria-label=\"Kalibrierungswerte\"></textarea>\n      <button type=\"button\" data-copy>Werte kopieren</button>\n      <button type=\"button\" data-reset>Zur\u00FCcksetzen</button>`;\n    panel.querySelector('[data-copy]').addEventListener('click', async () => {\n      const text = JSON.stringify(calibrationPayload(), null, 2);\n      try { await navigator.clipboard.writeText(text); } catch (_error) {\n        const textarea = panel.querySelector('textarea');\n        textarea.select();\n        document.execCommand('copy');\n      }\n    });\n    panel.querySelector('[data-reset]').addEventListener('click', () => {\n      const seed = PROJECTION.calibrationSeedCorners;\n      if (!validCorners(seed)) return;\n      calibrationCorners = seed.map(point => [...point]);\n      saveCalibration();\n      render();\n    });\n    document.body.appendChild(panel);\n    updateCalibrationPanel();\n  }\n\n  function frontCalibrationPayload() {\n    return {\n      profileId: PROFILE.id,\n      calibrationId: `${PROFILE.id}-front-scale-v1`,\n      frontArtworkScale: Number(frontArtworkScale.toFixed(4))\n    };\n  }\n\n  function ensureFrontCalibrationPanel() {\n    if (!FRONT_CALIBRATION_ENABLED || document.querySelector('[data-smoof-standing-front-calibration-panel]')) return;\n    const panel = document.createElement('div');\n    panel.dataset.smoofStandingCalibrationPanel = VERSION;\n    panel.dataset.smoofStandingFrontCalibrationPanel = VERSION;\n    panel.innerHTML = `<strong>Frontgr\u00F6\u00DFe kalibrieren</strong>\n      <span>Regler verschieben, bis die Druckfl\u00E4che exakt in der runden BASE sitzt.</span>\n      <input type=\"range\" min=\"0.45\" max=\"1.15\" step=\"0.005\" aria-label=\"Frontgr\u00F6\u00DFe\">\n      <output></output>\n      <textarea readonly aria-label=\"Kalibrierungswerte\"></textarea>\n      <button type=\"button\" data-copy>Werte kopieren</button>\n      <button type=\"button\" data-reset>Zur\u00FCcksetzen</button>`;\n    const input = panel.querySelector('input');\n    const output = panel.querySelector('output');\n    const textarea = panel.querySelector('textarea');\n    const update = () => {\n      input.value = String(frontArtworkScale);\n      output.value = `${(frontArtworkScale * 100).toFixed(1)} %`;\n      textarea.value = JSON.stringify(frontCalibrationPayload(), null, 2);\n    };\n    input.addEventListener('input', () => {\n      frontArtworkScale = Number(input.value);\n      window.localStorage.setItem(FRONT_CALIBRATION_STORAGE_KEY, String(frontArtworkScale));\n      render();\n      update();\n    });\n    panel.querySelector('[data-copy]').addEventListener('click', async () => {\n      const text = JSON.stringify(frontCalibrationPayload(), null, 2);\n      try { await navigator.clipboard.writeText(text); } catch (_error) {\n        textarea.select();\n        document.execCommand('copy');\n      }\n    });\n    panel.querySelector('[data-reset]').addEventListener('click', () => {\n      frontArtworkScale = CONFIGURED_FRONT_ARTWORK_SCALE;\n      window.localStorage.removeItem(FRONT_CALIBRATION_STORAGE_KEY);\n      render();\n      update();\n    });\n    document.body.appendChild(panel);\n    update();\n  }\n\n  function ensureCalibrationOverlay(scene, corners, width, height, sourceGeometry) {\n    if (!CALIBRATION_ENABLED || !validCorners(corners)) return;\n    let grid = scene.querySelector('[data-smoof-standing-calibration-grid]');\n    if (!grid) {\n      grid = document.createElement('img');\n      grid.dataset.smoofStandingCalibrationGrid = VERSION;\n      grid.alt = '';\n      grid.src = calibrationGridUrl();\n      scene.appendChild(grid);\n    }\n    applyProjectiveTransform(grid, corners, width, height, sourceGeometry);\n\n    const labels = ['OL', 'OR', 'UR', 'UL'];\n    corners.forEach((point, index) => {\n      let handle = scene.querySelector(`[data-smoof-standing-calibration-handle=\"${index}\"]`);\n      if (!handle) {\n        handle = document.createElement('button');\n        handle.type = 'button';\n        handle.dataset.smoofStandingCalibrationHandle = String(index);\n        handle.dataset.label = labels[index];\n        handle.setAttribute('aria-label', `Kalibrierungspunkt ${labels[index]}`);\n        handle.addEventListener('pointerdown', event => {\n          event.preventDefault();\n          const move = moveEvent => {\n            const rect = scene.getBoundingClientRect();\n            calibrationCorners[index] = [\n              Math.max(0, Math.min(100, (moveEvent.clientX - rect.left) / rect.width * 100)),\n              Math.max(0, Math.min(100, (moveEvent.clientY - rect.top) / rect.height * 100))\n            ];\n            saveCalibration();\n            render();\n          };\n          const up = () => {\n            window.removeEventListener('pointermove', move, true);\n            window.removeEventListener('pointerup', up, true);\n          };\n          window.addEventListener('pointermove', move, true);\n          window.addEventListener('pointerup', up, true);\n        });\n        scene.appendChild(handle);\n      }\n      handle.style.left = `${point[0]}%`;\n      handle.style.top = `${point[1]}%`;\n    });\n    ensureCalibrationPanel();\n  }\n\n  function suppressLegacyScene(targetStage) {\n    targetStage.querySelectorAll(\n      '[data-smoof-product-profile-scene], [data-smoof-product-profile-badge]'\n    ).forEach(element => {\n      if (!element.closest('[data-smoof-qhs-product-view]')) {\n        element.style.setProperty('display', 'none', 'important');\n      }\n    });\n  }\n\n  function updateScene(scene, mode) {\n    const wood = selectedWood();\n    const selectedAssetSet = PROFILE_ASSETS?.[wood] || PROFILE_ASSETS?.default || ASSETS[wood];\n    const view = mode === 'three-quarter' ? 'threeQuarter' : 'front';\n    const rawAperture = APERTURE_GEOMETRY[view];\n    const aperture = mode === 'three-quarter'\n      ? scaledGeometry(rawAperture, THREE_QUARTER_VIEW_SCALE)\n      : rawAperture;\n    const projectedArtwork = expandedGeometry(\n      artworkGeometry(aperture),\n      mode === 'three-quarter' ? THREE_QUARTER_ARTWORK_OVERSCAN : 1\n    );\n    const editorAperture = childGeometry(EDITOR_BASE_GEOMETRY, APERTURE_GEOMETRY.front);\n    const frontPlane = scaledGeometry({ left: 0, top: 0, width: 100, height: 100 }, frontArtworkScale);\n    const baseGeometry = mode === 'product'\n      ? EDITOR_BASE_GEOMETRY\n      : scaledGeometry(\n          { left: 0, top: 0, width: 100, height: 100 },\n          THREE_QUARTER_VIEW_SCALE\n        );\n    const base = scene.querySelector('[data-smoof-qhs-base]');\n    const artwork = scene.querySelector('[data-smoof-qhs-artwork]');\n    const gloss = scene.querySelector('[data-smoof-qhs-gloss]');\n    const baseShadow = scene.querySelector('[data-smoof-qhs-base-shadow]');\n    const artworkRotationDeg = Number(\n      mode === 'three-quarter'\n        ? (rawAperture.artworkRotationDeg ?? rawAperture.rotationDeg)\n        : 0\n    ) || 0;\n    const artworkTransform = artworkRotationDeg ? `rotate(${artworkRotationDeg}deg)` : 'none';\n    const stageWidth = scene.clientWidth || 562;\n    const stageHeight = scene.clientHeight || stageWidth;\n    const projectionCorners = mode === 'three-quarter'\n      ? presentationProjectionCorners(activeProjectionCorners(), stageWidth)\n      : null;\n\n    base.src = selectedAssetSet[view];\n    base.dataset.smoofWood = wood;\n    scene.dataset.smoofSurface = activeSurface;\n    scene.dataset.smoofView = view;\n    artwork.style.display = mode === 'product' ? 'none' : 'block';\n\n    let projectionSource;\n    if (projectionCorners) {\n      artwork.style.objectFit = 'fill';\n      projectionSource = PROJECTION.sourceGeometry === 'print-circle'\n        ? printCircleGeometry()\n        : (PROJECTION.sourceGeometry === 'editor-trim'\n            ? expandedGeometry(editorAperture, 1 / THREE_QUARTER_ARTWORK_OVERSCAN)\n            : undefined);\n      applyProjectiveTransform(\n        artwork,\n        projectionCorners,\n        stageWidth,\n        stageHeight,\n        projectionSource\n      );\n    } else if (mode === 'product') {\n      applyGeometry(artwork, frontPlane);\n      artwork.style.clipPath = 'none';\n      artwork.style.webkitClipPath = 'none';\n      artwork.style.transformOrigin = '50% 50%';\n      artwork.style.transform = 'none';\n    } else {\n      applyGeometry(artwork, projectedArtwork);\n      artwork.style.clipPath = 'ellipse(35.34% 35.34% at 50% 50%)';\n      artwork.style.webkitClipPath = 'ellipse(35.34% 35.34% at 50% 50%)';\n      artwork.style.transformOrigin = '50% 50%';\n      artwork.style.transform = artworkTransform;\n    }\n\n    if (mode === 'three-quarter' && projectionCorners) {\n      applyProjectiveTransform(gloss, projectionCorners, stageWidth, stageHeight, projectionSource);\n    } else if (mode === 'product') {\n      applyGeometry(gloss, frontPlane);\n      gloss.style.transformOrigin = '50% 50%';\n      gloss.style.transform = 'none';\n    } else {\n      applyGeometry(gloss, { left: 0, top: 0, width: 100, height: 100 });\n      gloss.style.transform = 'none';\n    }\n    gloss.style.filter = 'none';\n\n    applyGeometry(base, baseGeometry);\n    base.style.filter = 'none';\n\n    if (BASE_SHADOW_MODE === 'asset') {\n      baseShadow.style.display = 'none';\n      baseShadow.style.boxShadow = 'none';\n    } else {\n      baseShadow.style.display = 'block';\n      applyGeometry(baseShadow, childGeometry(baseGeometry, BASE_OBJECT_BOUNDS[view]));\n      baseShadow.style.borderRadius = mode === 'three-quarter' ? '16% 13% 15% 17%' : '12%';\n      baseShadow.style.backgroundColor = 'rgba(255,255,255,.01)';\n      baseShadow.style.boxShadow =\n        `0 ${stageWidth * .022}px ${stageWidth * .055}px ${stageWidth * -.012}px rgba(16,24,40,.20), ` +\n        `0 ${stageWidth * .006}px ${stageWidth * .018}px ${stageWidth * -.004}px rgba(16,24,40,.13)`;\n    }\n\n    if (mode === 'three-quarter' && projectionCorners) {\n      ensureCalibrationOverlay(scene, projectionCorners, stageWidth, stageHeight, projectionSource);\n    }\n\n    const assetKey = wood;\n    if (assetKey !== lastWood) {\n      lastWood = assetKey;\n      Object.values(selectedAssetSet).forEach(url => {\n        const preload = new Image();\n        preload.src = url;\n      });\n    }\n  }\n\n  function render() {\n    const root = editorRoot();\n    const targetStage = stage();\n    if (!root || !targetStage) return;\n\n    ensureStyles();\n    isolateProductGallery();\n    tagPresentationLayers(targetStage);\n    const productPresentation = isProductPresentation();\n    if (!productPresentation) threeQuarterActive = false;\n    const mode = !productPresentation ? 'print' : (threeQuarterActive ? 'three-quarter' : 'product');\n    const threeQuarterToggle = ensureThreeQuarterToggle();\n    const scene = ensureScene(targetStage);\n    suppressLegacyScene(targetStage);\n    ROOT.dataset.smoofQhsMode = mode;\n    ensureFrontCalibrationPanel();\n    updateThreeQuarterToggle(threeQuarterToggle, productPresentation);\n    updateScene(scene, mode);\n    syncArtworkPresentation(targetStage, mode);\n  }\n\n  function scheduleArtwork(immediate = false) {\n    if (!isProductPresentation() || !threeQuarterActive) {\n      clearTimeout(renderTimer);\n      renderTimer = 0;\n      return;\n    }\n    if (renderTimer) return;\n    renderTimer = window.setTimeout(() => {\n      renderTimer = 0;\n      renderArtwork();\n    }, immediate ? 0 : 120);\n  }\n\n  async function renderArtwork() {\n    const revision = ++renderRevision;\n    const blob = await captureArtworkBlob();\n\n    try {\n      if (!blob) {\n        window.setTimeout(() => scheduleArtwork(), 120);\n        return;\n      }\n      if (revision !== renderRevision || !isProductPresentation()) return;\n      applyArtworkBlob(blob);\n    } catch (error) {\n      console.error('SMOOF QHS product preview failed', error);\n    }\n  }\n\n  async function captureArtworkBlob() {\n    const renderer = window.SmoofDesignRenderer || designRenderer;\n    if (renderer) designRenderer = renderer;\n    let blob = null;\n\n    if (renderer?.renderPng) {\n      try {\n        const bytes = await renderer.renderPng();\n        if (bytes instanceof Blob) {\n          blob = bytes.size ? bytes : null;\n        } else if (bytes instanceof ArrayBuffer || ArrayBuffer.isView(bytes)) {\n          blob = bytes.byteLength ? new Blob([bytes], { type: 'image/png' }) : null;\n        }\n      } catch (error) {\n        console.warn('SMOOF standing vector capture unavailable; using editor canvas', error);\n      }\n    }\n\n    if (!blob) {\n      try {\n        blob = await renderStageCanvasBlob();\n      } catch (error) {\n        console.warn('SMOOF standing canvas capture failed', error);\n      }\n    }\n\n    if (!blob) return null;\n    try {\n      return await clipProofToPrintCircle(blob);\n    } catch (error) {\n      console.warn('SMOOF standing artwork clipping failed', error);\n      return null;\n    }\n  }\n\n  function applyArtworkBlob(blob) {\n    if (!blob) return false;\n    const artwork = stage()?.querySelector('[data-smoof-qhs-artwork]');\n    if (!artwork) return false;\n\n    const url = URL.createObjectURL(blob);\n    const previous = artworkObjectUrl;\n    artworkObjectUrl = url;\n    artwork.src = url;\n    ROOT.dataset.smoofStandingArtworkReady = 'true';\n    if (previous) URL.revokeObjectURL(previous);\n    return true;\n  }\n\n  async function clipProofToPrintCircle(blob) {\n    const sourceUrl = URL.createObjectURL(blob);\n    const image = new Image();\n    image.decoding = 'sync';\n\n    try {\n      await new Promise((resolve, reject) => {\n        image.onload = resolve;\n        image.onerror = () => reject(new Error('Rendered design could not be clipped'));\n        image.src = sourceUrl;\n      });\n\n      const width = image.naturalWidth || image.width;\n      const height = image.naturalHeight || image.height;\n      const output = document.createElement('canvas');\n      output.width = width;\n      output.height = height;\n      const context = output.getContext('2d', { alpha: true });\n      if (!context) return null;\n\n      context.clearRect(0, 0, width, height);\n      context.save();\n      context.beginPath();\n      context.arc(\n        width / 2,\n        height / 2,\n        Math.min(width, height) * PRINT_CLIP_RADIUS_RATIO,\n        0,\n        Math.PI * 2\n      );\n      context.clip();\n      context.drawImage(image, 0, 0, width, height);\n      context.restore();\n\n      return await new Promise(resolve => output.toBlob(resolve, 'image/png'));\n    } finally {\n      URL.revokeObjectURL(sourceUrl);\n    }\n  }\n\n  async function renderStageCanvasBlob() {\n    const targetStage = stage();\n    if (!targetStage) return null;\n    const canvases = [...targetStage.querySelectorAll(':scope > canvas')]\n      .filter(canvas => canvas.width > 0 && canvas.height > 0);\n    if (!canvases.length) return null;\n\n    const width = Math.max(...canvases.map(canvas => canvas.width));\n    const height = Math.max(...canvases.map(canvas => canvas.height));\n    const output = document.createElement('canvas');\n    output.width = width;\n    output.height = height;\n    const context = output.getContext('2d');\n    if (!context) return null;\n\n    canvases.forEach(canvas => {\n      context.drawImage(canvas, 0, 0, width, height);\n    });\n\n    return new Promise(resolve => output.toBlob(resolve, 'image/png'));\n  }\n\n  function scheduleRender() {\n    requestAnimationFrame(() => {\n      render();\n      scheduleArtwork();\n    });\n  }\n\n  window.addEventListener('smoof:surface-change', event => {\n    activeSurface = event.detail?.surface === 'back' ? 'back' : 'front';\n    scheduleRender();\n  });\n  window.addEventListener('smoof:shopify-variant-change', scheduleRender);\n  window.addEventListener('smoof:editor-reset', scheduleRender);\n  document.addEventListener('input', scheduleRender, true);\n  document.addEventListener('change', scheduleRender, true);\n  new MutationObserver(scheduleRender).observe(document.body, { childList: true, subtree: true });\n  new MutationObserver(scheduleRender).observe(ROOT, {\n    attributes: true,\n    attributeFilter: ['data-smoof-product-presentation']\n  });\n  ROOT.dataset.smoofStandingToggleRebind = VERSION;\n  const toggleRebindTimer = window.setInterval(() => {\n    const button = document.querySelector('[data-smoof-qhs-3d-toggle]');\n    if (!button) return;\n    bindThreeQuarterToggle(button);\n  }, 250);\n  window.addEventListener('pagehide', () => window.clearInterval(toggleRebindTimer), { once: true });\n\n  Object.values(ASSETS).flatMap(Object.values).forEach(url => {\n    const preload = new Image();\n    preload.decoding = 'async';\n    preload.src = url;\n  });\n\n  ROOT.dataset.smoofQhsProductViewVersion = VERSION;\n  ROOT.dataset.smoofStandingProductViewVersion = VERSION;\n  if (CALIBRATION_ENABLED || FRONT_CALIBRATION_ENABLED) ROOT.dataset.smoofStandingCalibration = CALIBRATION_MODE;\n  render();\n  scheduleArtwork(true);\n})();\n"],
  "mappings": "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",
  "names": ["button"]
}
