{
  "version": 3,
  "sources": ["/cdn/shop/t/5/assets/custom-css-framing.js?psv=css-framing-20260817"],
  "sourcesContent": ["(() => {\n  const root = document.querySelector('[data-ps-product]');\n  const preview = root?.querySelector('[data-ps-art-preview]');\n  const canvas = preview?.querySelector('[data-pdp-print-preview]');\n  const composition = preview?.querySelector('[data-ps-css-frame]');\n  const mat = preview?.querySelector('[data-ps-css-mat]');\n  const artwork = preview?.querySelector('[data-ps-css-artwork]');\n  const image = preview?.querySelector('[data-ps-main-image]');\n  if (!root || !preview || !canvas || !composition || !mat || !artwork || !image) return;\n\n  const colors = {\n    beige: '#e6dfca', black: '#111111', blue: '#38558d', brass: '#c3ad73',\n    'dark-oak': '#654634', green: '#278e53', grey: '#c9c7bf', lavender: '#d9cbe8',\n    'light-blue': '#9fc8db', mint: '#74c79d', oak: '#a77b49', orange: '#ff8038',\n    petrol: '#577486', pink: '#ead0c2', plum: '#6e3e4c', red: '#c9584f',\n    white: '#ffffff', yellow: '#f4cf65',\n  };\n  let state = { passepartout: null, frame: null, active: false };\n  let resizeFrame = 0;\n\n  const clamp = (value, minimum, maximum) => Math.min(maximum, Math.max(minimum, value));\n  const colorFor = (styleSlug = '') => colors[styleSlug]\n    || colors[styleSlug.replace(/-(wood|alu)$/, '')]\n    || '#b8bbba';\n  const materialFor = (styleSlug = '') => styleSlug.endsWith('-alu') ? 'alu' : 'wood';\n\n  const fitComposition = () => {\n    resizeFrame = 0;\n    // Use layout size (not transform-scaled bounds) so size-scale transforms don't shrink the art twice.\n    const bounds = { width: canvas.offsetWidth || canvas.getBoundingClientRect().width, height: canvas.offsetHeight || canvas.getBoundingClientRect().height };\n    if (!bounds.width || !bounds.height) return;\n    const hasFrame = Boolean(state.active && state.frame);\n    const hasMat = Boolean(state.active && state.passepartout);\n    const shortestSide = Math.min(bounds.width, bounds.height);\n    const frameWidth = hasFrame ? clamp(shortestSide * .018, 6, 14) : 0;\n    const matWidth = hasMat ? clamp(shortestSide * .065, 16, 44) : 0;\n    const inset = 2 * (frameWidth + matWidth);\n    const availableWidth = Math.max(40, bounds.width * .88 - inset);\n    const availableHeight = Math.max(40, bounds.height * .88 - inset);\n    const declaredWidth = Number(image.getAttribute('width'));\n    const declaredHeight = Number(image.getAttribute('height'));\n    const declaredRatio = preview.hasAttribute('data-pf-initial-artwork-size')\n      && declaredWidth > 0 && declaredHeight > 0\n      ? declaredWidth / declaredHeight : 1;\n    const ratio = image.naturalWidth > 0 && image.naturalHeight > 0\n      ? image.naturalWidth / image.naturalHeight\n      : declaredRatio;\n    let artWidth = availableWidth;\n    let artHeight = artWidth / ratio;\n    if (artHeight > availableHeight) {\n      artHeight = availableHeight;\n      artWidth = artHeight * ratio;\n    }\n    composition.style.setProperty('--ps-css-mat-box-width', `${Math.round((artWidth + 2 * matWidth) * 100) / 100}px`);\n    composition.style.setProperty('--ps-css-mat-box-height', `${Math.round((artHeight + 2 * matWidth) * 100) / 100}px`);\n    composition.style.setProperty('--ps-css-frame-width', `${Math.round(frameWidth * 100) / 100}px`);\n    mat.style.setProperty('--ps-css-mat-width', `${Math.round(matWidth * 100) / 100}px`);\n    root.dispatchEvent(new CustomEvent('product:css-frame-rendered', {\n      detail: { artWidth, artHeight, frameWidth, matWidth, ratio },\n    }));\n  };\n\n  const scheduleFit = () => {\n    if (resizeFrame) cancelAnimationFrame(resizeFrame);\n    resizeFrame = requestAnimationFrame(fitComposition);\n  };\n\n  const render = () => {\n    const hasFrame = Boolean(state.active && state.frame);\n    const hasMat = Boolean(state.active && state.passepartout);\n    const frameSlug = state.frame?.styleSlug || '';\n    const matSlug = state.passepartout?.styleSlug || '';\n    composition.dataset.hasFrame = String(hasFrame);\n    composition.dataset.frameMaterial = hasFrame ? materialFor(frameSlug) : '';\n    composition.dataset.frameStyle = hasFrame ? frameSlug : '';\n    composition.style.setProperty('--ps-css-frame-color', colorFor(frameSlug));\n    mat.dataset.hasMat = String(hasMat);\n    mat.dataset.matStyle = hasMat ? matSlug : '';\n    mat.style.setProperty('--ps-css-mat-color', colorFor(matSlug));\n    canvas.dataset.hasFrame = String(hasFrame);\n    canvas.dataset.hasPassepartout = String(hasMat);\n    scheduleFit();\n  };\n\n  image.addEventListener('load', scheduleFit);\n  root.addEventListener('product:preview-orientation', scheduleFit);\n  if ('ResizeObserver' in window) new ResizeObserver(scheduleFit).observe(canvas);\n  else window.addEventListener('resize', scheduleFit, { passive: true });\n\n  root.productFramePreview = {\n    update(nextState = {}) {\n      state = { ...state, ...nextState };\n      render();\n    },\n    fit: scheduleFit,\n  };\n\n  const productContext = root.dataset.psProductContext || 'custom';\n  window.dataLayer?.push({\n    event: 'css_framing_preview_initialized',\n    product_context: productContext,\n    render_mode: root.dataset.psFramingRenderMode || 'css',\n  });\n  if (productContext === 'custom') {\n    window.dataLayer?.push({\n      event: 'custom_css_framing_initialized',\n      render_mode: root.dataset.psFramingRenderMode || 'css',\n    });\n  }\n\n  render();\n})();\n"],
  "mappings": "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",
  "names": []
}
