{
  "version": 3,
  "sources": ["/cdn/shop/t/12/assets/pf-mobile-purchase-20260929.js?psv=20261031-pdp003"],
  "sourcesContent": ["/* Mobile purchase presentation only. The original form owns variants and cart writes. */\n(() => {\n  'use strict';\n  const root = document.querySelector('[data-ps-product-context=\"default\"]');\n  const bar = root?.querySelector('[data-ps-sticky-atc]');\n  const form = root?.querySelector('.ps-form');\n  const primary = form?.querySelector('[data-ps-add-button]');\n  if (!bar || !form || !primary || bar.dataset.mobilePurchaseReady) return;\n  bar.dataset.mobilePurchaseReady = 'true';\n\n  const mobile = window.matchMedia('(max-width: 767px)');\n  const reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)');\n  const price = form.querySelector('[data-ps-price]');\n  const heading = form.querySelector('h1');\n  const priceAnchor = document.createComment('Mobile price original position');\n  price?.before(priceAnchor);\n  const action = bar.querySelector('[data-ps-sticky-button]');\n  const actionLabel = bar.querySelector('[data-ps-sticky-label]');\n  const amount = bar.querySelector('[data-ps-sticky-price]');\n  const size = bar.querySelector('[data-ps-sticky-size]');\n  const groups = [...form.querySelectorAll('[data-ps-option-group]')];\n  const sizeGroup = groups.find((group) => /size/i.test(group.getAttribute('aria-label') || ''));\n  let primaryVisible = false;\n  let frame = 0;\n  let observer;\n  let observedHeight = 0;\n  let submitting = false;\n\n  const setText = (node, value) => { if (node && node.textContent !== value) node.textContent = value; };\n  const missingGroup = () => groups.find((group) => !group.querySelector('input:checked'));\n  const overlayOpen = () => document.documentElement.classList.contains('is-cart-drawer-open')\n    || document.documentElement.classList.contains('is-mobile-menu-open')\n    || document.body.classList.contains('ps-size-guide-is-open');\n  const show = (visible) => {\n    if (bar.hidden === !visible) return;\n    bar.hidden = !visible;\n    bar.setAttribute('aria-hidden', String(!visible));\n  };\n\n  const sync = () => {\n    frame = 0;\n    const missing = missingGroup();\n    setText(amount, price?.querySelector('.ps-price__current')?.textContent || '');\n    const selectedSize = sizeGroup?.querySelector('input:checked')?.value;\n    setText(size, selectedSize ? `${selectedSize} \u00B7 Edit` : groups.length ? 'Choose options' : 'One size');\n    size.disabled = !groups.length;\n    size.setAttribute('aria-label', selectedSize ? `Change size, currently ${selectedSize}` : 'Choose options');\n    setText(actionLabel, missing ? 'Choose options' : primary.querySelector('[data-ps-add-label]')?.textContent || 'Add to cart');\n    action.disabled = submitting || (!missing && primary.disabled);\n    action.setAttribute('aria-busy', String(submitting));\n    // PAF-MOBILE-PDP-001: geometric check every frame (IO alone misses fast flings that jump past the button).\n    const pr = primary.getBoundingClientRect();\n    const passed = pr.height > 0 ? pr.bottom < 120 : !primaryVisible;\n    const foot = document.querySelector('[data-pf-site-footer]');\n    const footerIn = foot ? foot.getBoundingClientRect().top < window.innerHeight : false;\n    const on = mobile.matches && passed && !footerIn && !overlayOpen();\n    show(on);\n    document.body.classList.toggle('ps-sticky-atc-on', on);\n  };\n  const schedule = () => { if (!frame) frame = window.requestAnimationFrame(sync); };\n\n  const observePrimary = () => {\n    observer?.disconnect();\n    const height = Math.ceil(bar.getBoundingClientRect().height) || observedHeight || 86;\n    observedHeight = height;\n    document.body.style.setProperty('--ps-mobile-purchase-height', `${height}px`);\n    if (!('IntersectionObserver' in window)) { show(false); return; }\n    observer = new IntersectionObserver(([entry]) => {\n      primaryVisible = entry.isIntersecting || entry.boundingClientRect.top > 0;\n      schedule();\n    }, { rootMargin: `-120px 0px -${height}px 0px`, threshold: 0 });\n    observer.observe(primary);\n  };\n\n  const placePrice = () => {\n    // Move the existing node, never clone it: all price/variant subscribers stay attached.\n    // Keep natural order\n    document.body.classList.toggle('ps-mobile-purchase-ready', mobile.matches);\n    primaryVisible = true;\n    sync();\n    observePrimary();\n  };\n\n  const chooseOptions = () => {\n    const group = missingGroup() || sizeGroup || groups[0];\n    if (!group) return;\n    group.scrollIntoView({ block: 'center', behavior: reducedMotion.matches ? 'instant' : 'smooth' });\n    const input = group.querySelector('input:checked') || group.querySelector('input:not(:disabled)');\n    input?.focus({ preventScroll: true });\n    root.dispatchEvent(new CustomEvent('product:mobile-purchase-action', { detail: { action: 'choose_options' } }));\n  };\n  size.addEventListener('click', chooseOptions);\n  action.addEventListener('click', () => {\n    if (!mobile.matches || action.disabled || overlayOpen()) return;\n    if (missingGroup()) { chooseOptions(); return; }\n    if (primary.disabled || !form.reportValidity()) return;\n    // No timeout or second cart implementation: normal submit validation and listeners run once.\n    submitting = true;\n    sync();\n    root.dispatchEvent(new CustomEvent('product:mobile-purchase-action', { detail: { action: 'add_to_cart' } }));\n    primary.click();\n    queueMicrotask(() => { submitting = false; schedule(); });\n  });\n\n  const stateObserver = new MutationObserver(schedule);\n  if (price) stateObserver.observe(price, { childList: true, subtree: true, characterData: true });\n  stateObserver.observe(primary, { attributes: true, attributeFilter: ['disabled'], childList: true, subtree: true, characterData: true });\n  const overlayObserver = new MutationObserver(schedule);\n  overlayObserver.observe(document.documentElement, { attributes: true, attributeFilter: ['class'] });\n  overlayObserver.observe(document.body, { attributes: true, attributeFilter: ['class'] });\n  const guide = root.querySelector('[data-ps-size-guide-modal]');\n  if (guide) overlayObserver.observe(guide, { attributes: true, attributeFilter: ['hidden'] });\n  form.addEventListener('change', schedule);\n  window.addEventListener('scroll', schedule, { passive: true });\n  window.addEventListener('resize', schedule, { passive: true });\n  root.addEventListener('product:variant-change', schedule);\n  root.addEventListener('product:framing-price-change', schedule);\n  mobile.addEventListener('change', placePrice);\n  window.addEventListener('pageshow', placePrice);\n  const resize = 'ResizeObserver' in window ? new ResizeObserver(() => {\n    const height = Math.ceil(bar.getBoundingClientRect().height);\n    if (height && height !== observedHeight) observePrimary();\n  }) : null;\n  resize?.observe(bar);\n  placePrice();\n  const cleanup = (event) => {\n    if (!event.target.contains(root)) return;\n    observer?.disconnect();\n    resize?.disconnect();\n    stateObserver.disconnect();\n    overlayObserver.disconnect();\n    mobile.removeEventListener('change', placePrice);\n    window.removeEventListener('pageshow', placePrice);\n    window.cancelAnimationFrame(frame);\n    document.body.classList.remove('ps-mobile-purchase-ready');\n    document.body.style.removeProperty('--ps-mobile-purchase-height');\n    document.removeEventListener('shopify:section:unload', cleanup);\n  };\n  document.addEventListener('shopify:section:unload', cleanup);\n})();\n\n\n/* ==========================================================================\n   1:1 POSTERY PDP CONTROLLER FOR POSTERANDFORM (Poster | Canvas + Room Scenes + Live Size Scaling)\n   ========================================================================== */\n(() => {\n  const root = document.querySelector('[data-ps-product]');\n  const form = root?.querySelector('.ps-form');\n  const preview = root?.querySelector('[data-ps-art-preview]');\n  const mainMedia = root?.querySelector('.ps-main-media');\n  const thumbRail = root?.querySelector('[data-ps-thumbnail-rail]');\n  if (!root || !form || !preview || !mainMedia) return;\n\n  const isMobile = () => window.matchMedia('(max-width: 960px)').matches;\n\n  // 1. Set Room Scene background CSS variables from existing assets\n  const sampleAssetEl = document.querySelector('link[href*=\"pf-postery-1to1.css\"]');\n  const assetHref = sampleAssetEl?.getAttribute('href') || '';\n  const cdnBase = assetHref.split('pf-postery-1to1.css')[0] || '';\n  if (cdnBase) {\n    const bgSuffix = isMobile() ? '_1000x' : '';\n    mainMedia.style.setProperty('--pf-bg-sofa', `url(\"${cdnBase}dw-room-bg-sofa${bgSuffix}.jpg\")`);\n    mainMedia.style.setProperty('--pf-bg-dining', `url(\"${cdnBase}dw-room-bg-dining${bgSuffix}.jpg\")`);\n    mainMedia.style.setProperty('--pf-bg-sideboard', `url(\"${cdnBase}dw-room-bg-sideboard${bgSuffix}.jpg\")`);\n  }\n  mainMedia.setAttribute('data-pf-room-scene', 'none');\n  mainMedia.setAttribute('data-pf-mode', 'poster');\n  // Expose the artwork URL so CSS can draw the canvas sides with the image wrapping around the edge\n  const pfArtImg = root.querySelector('.ps-css-artwork img, [data-ps-main-image]');\n  const syncPfArtUrl = () => {\n    const u = pfArtImg && (pfArtImg.currentSrc || pfArtImg.src);\n    if (u) {\n      mainMedia.style.setProperty('--pf-art-url', `url(\"${u}\")`);\n      const slotEl = root.querySelector('[data-pf-split-slot]');\n      if (slotEl) slotEl.style.setProperty('--pf-art-url', `url(\"${u}\")`);\n    }\n  };\n  if (pfArtImg) pfArtImg.addEventListener('load', syncPfArtUrl);\n  syncPfArtUrl();\n\n  // 2. Inject 3 Interactive Room Scene Thumbnails (`sofa`, `dining`, `sideboard`) into thumbRail\n  const mainImg = root.querySelector('[data-ps-main-image]');\n  const artThumbBtn = thumbRail?.querySelector('[data-media-role=\"artwork\"]') || thumbRail?.querySelectorAll('[data-ps-media]')?.[1] || thumbRail?.querySelector('[data-ps-media]');\n  const artSrc = artThumbBtn?.dataset?.mediaSrc || mainImg?.src || '';\n\n  if (thumbRail && cdnBase && artSrc) {\n    const existingThumbs = [...thumbRail.querySelectorAll('[data-ps-media]')];\n    if (existingThumbs.length > 1) {\n      if (artThumbBtn) artThumbBtn.click();\n      existingThumbs.forEach((t) => {\n        if (t !== artThumbBtn) t.style.display = 'none';\n      });\n    }\n    const scenes = [\n      { key: 'sofa', title: 'Room view: Living room', bg: `${cdnBase}dw-room-bg-sofa_200x.jpg` },\n      { key: 'dining', title: 'Room view: Dining space', bg: `${cdnBase}dw-room-bg-dining_200x.jpg` },\n      { key: 'sideboard', title: 'Room view: Sideboard', bg: `${cdnBase}dw-room-bg-sideboard_200x.jpg` },\n    ];\n    scenes.forEach((sc) => {\n      const btn = document.createElement('button');\n      btn.type = 'button';\n      btn.className = 'ps-thumbnail pf-room-thumb';\n      btn.dataset.pfRoomTrigger = sc.key;\n      btn.title = sc.title;\n      btn.innerHTML = `<span class=\"pf-room-thumb__bg\" style=\"background-image:url('${sc.bg}')\"><span class=\"pf-room-thumb__art\"><img src=\"${artSrc}\" alt=\"${sc.title}\" loading=\"lazy\"></span></span>`;\n      btn.addEventListener('click', (e) => {\n        e.preventDefault();\n        e.stopPropagation();\n        thumbRail.querySelectorAll('.ps-thumbnail').forEach((t) => t.classList.remove('is-active'));\n        btn.classList.add('is-active');\n        mainMedia.setAttribute('data-pf-room-scene', sc.key);\n        root.dispatchEvent(new CustomEvent('product:show-custom-preview'));\n        window.requestAnimationFrame(() => root.productFramePreview?.fit?.());\n      });\n      thumbRail.appendChild(btn);\n    });\n\n    existingThumbs.forEach((t) => {\n      t.addEventListener('click', () => {\n        thumbRail.querySelectorAll('.pf-room-thumb').forEach((rt) => rt.classList.remove('is-active'));\n        mainMedia.setAttribute('data-pf-room-scene', 'none');\n        window.requestAnimationFrame(() => root.productFramePreview?.fit?.());\n      });\n    });\n\n    // Stage arrows: cycle only the visible slides (flat artwork + 3 room scenes), never the hidden media.\n    const visibleSlides = () => [artThumbBtn, ...thumbRail.querySelectorAll('.pf-room-thumb')].filter(Boolean);\n    root.querySelectorAll('[data-ps-media-direction]').forEach((arrow) => {\n      arrow.addEventListener('click', (e) => {\n        const list = visibleSlides();\n        if (!list.length) return;\n        e.preventDefault();\n        e.stopImmediatePropagation();\n        const cur = list.findIndex((t) => t.classList.contains('is-active'));\n        const dir = Number(arrow.dataset.psMediaDirection) || 1;\n        const next = list[((cur < 0 ? 0 : cur) + dir + list.length) % list.length];\n        next.click();\n      }, true);\n    });\n  }\n\n  // 3. Inject Postery Header (`PosterAndForm Studio` + `200g` icon) & Title Suffix (`Poster` / `Canvas`)\n  const h1 = form.querySelector('h1');\n  if (h1 && !form.querySelector('.pf-postery-head')) {\n    const baseTitle = h1.textContent.trim().replace(/\\s+(Art Print|Canvas Print|Poster|Canvas)$/i, '');\n    h1.innerHTML = `${baseTitle} <span data-pf-title-suffix>Art Print</span>`;\n    const headWrap = document.createElement('div');\n    headWrap.className = 'pf-postery-head';\n    headWrap.innerHTML = `\n      <div class=\"pf-postery-head__top\">\n        <span class=\"pf-postery-head__fsc\" title=\"200gsm matte fine art paper\">\n          <svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#2d6a4f\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 3 6 11h4l-2 6h8l-2-6h4L12 3z\"/><path d=\"M12 17v4\"/></svg>\n          <small>200g</small>\n        </span>\n      </div>\n    `;\n    h1.before(headWrap);\n    // PAF v3: vendor line removed; title and 200g badge share one row.\n    const headTop = headWrap.querySelector('.pf-postery-head__top');\n    headTop.prepend(h1);\n  }\n\n  // 4. Inject Poster | Canvas Segmented Tabs + 3 Postery Rounded Selector Pills right above `.ps-buy-buttons`\n  const buyButtons = form.querySelector('.ps-buy-buttons');\n  const pillsWrap = document.createElement('div');\n  pillsWrap.className = 'pf-postery-pills';\n  pillsWrap.innerHTML = `\n    <div class=\"pf-postery-tabs\" role=\"tablist\" aria-label=\"Select format\">\n      <button type=\"button\" role=\"tab\" class=\"pf-postery-tab is-active\" aria-selected=\"true\" data-pf-mode-tab=\"poster\">Poster</button>\n      <button type=\"button\" role=\"tab\" class=\"pf-postery-tab\" aria-selected=\"false\" data-pf-mode-tab=\"canvas\">Canvas</button>\n    </div>\n    <button type=\"button\" class=\"pf-postery-pill\" data-pf-open-tab=\"size\">\n      <span class=\"pf-postery-pill__label\">Size</span>\n      <span class=\"pf-postery-pill__val\">\n        <svg viewBox=\"0 0 24 24\" width=\"15\" height=\"15\" fill=\"none\" stroke=\"#333\" stroke-width=\"1.8\"><path d=\"M21.3 15.3a2.4 2.4 0 0 1 0 3.4l-2.6 2.6a2.4 2.4 0 0 1-3.4 0L2.7 8.7a2.41 2.41 0 0 1 0-3.4l2.6-2.6a2.41 2.41 0 0 1 3.4 0Z\"/><path d=\"m14.5 12.5 2-2\"/><path d=\"m11.5 9.5 2-2\"/><path d=\"m8.5 6.5 2-2\"/></svg>\n        <strong data-pf-pill-size-val>${(root.querySelector('.ps-config-options--size input:checked')?.value || '').replace(/</g, '&lt;')}</strong>\n      </span>\n      <span class=\"pf-postery-pill__right\">\n        <span data-pf-pill-size-price></span>\n        <svg class=\"pf-postery-pill__chev\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><polyline points=\"9 18 15 12 9 6\"></polyline></svg>\n      </span>\n    </button>\n    <button type=\"button\" class=\"pf-postery-pill\" data-pf-open-tab=\"passepartout\" data-pf-poster-only>\n      <span class=\"pf-postery-pill__label\">Passepartout</span>\n      <span class=\"pf-postery-pill__val\">\n        <span class=\"pf-postery-pill__swatch pf-postery-pill__swatch--none\" data-pf-pill-pp-swatch></span>\n        <strong data-pf-pill-pp-val>No passepartout</strong>\n      </span>\n      <span class=\"pf-postery-pill__right\">\n        <span data-pf-pill-pp-price></span>\n        <svg class=\"pf-postery-pill__chev\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><polyline points=\"9 18 15 12 9 6\"></polyline></svg>\n      </span>\n    </button>\n    <button type=\"button\" class=\"pf-postery-pill\" data-pf-open-tab=\"frame\" data-pf-poster-only>\n      <span class=\"pf-postery-pill__label\">Frame</span>\n      <span class=\"pf-postery-pill__val\">\n        <span class=\"pf-postery-pill__swatch pf-postery-pill__swatch--none\" data-pf-pill-fr-swatch></span>\n        <strong data-pf-pill-fr-val>No frame</strong>\n      </span>\n      <span class=\"pf-postery-pill__right\">\n        <span data-pf-pill-fr-price></span>\n        <svg class=\"pf-postery-pill__chev\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><polyline points=\"9 18 15 12 9 6\"></polyline></svg>\n      </span>\n    </button>\n    <div class=\"pf-postery-pill pf-postery-pill--static\" data-pf-canvas-only hidden>\n      <span class=\"pf-postery-pill__label\">Format</span>\n      <span class=\"pf-postery-pill__val\">\n        <strong>Frameless canvas</strong>\n      </span>\n      <span class=\"pf-postery-pill__right\">\n        <strong data-pf-pill-canvas-price></strong>\n      </span>\n    </div>\n  `;\n  if (buyButtons) buyButtons.before(pillsWrap);\n\n  // 5. Inject Postery Lower Right Blocks (2x2 USPs, Warm Sand Promo Box, Inline Description, Meta Accordion Links)\n  const isUS = (window.Shopify?.country === 'US' || window.Shopify?.currency?.active === 'USD');\n  const descPlain = root.querySelector('.ps-short-description')?.textContent?.trim() || 'Printed to order on 200gsm archival matte fine art paper or gallery-wrapped stretched canvas using fade-resistant pigment inks.';\n  const extraWrap = document.createElement('div');\n  extraWrap.className = 'pf-postery-extra';\n  extraWrap.innerHTML = `\n    <div class=\"dw-postery-usps\">\n      <div class=\"dw-postery-usp\"><span class=\"dw-postery-usp__icon\">\u2713</span><span>In stock \u00B7 Made to order</span></div>\n      <div class=\"dw-postery-usp\"><span class=\"dw-postery-usp__icon\">\u2713</span><span>30-day easy returns</span></div>\n      <div class=\"dw-postery-usp\"><span class=\"dw-postery-usp__icon\">\u2713</span><span>Dispatched within 48h</span></div>\n      <div class=\"dw-postery-usp\"><span class=\"dw-postery-usp__icon\">\u2713</span><span>${isUS ? 'Free US shipping $49+' : 'Free tracked UK delivery'}</span></div>\n    </div>\n    <div class=\"dw-postery-promo-box\">\n      <strong>Buy 2 prints, get 1 free</strong>\n      <p>Add any 3 prints to your bag \u2014 the lowest-priced print is automatically free</p>\n      <small>${isUS ? 'Free US shipping over $49 \u00B7 5\u20137 business days delivery' : 'Free UK delivery on every order \u00B7 5\u20137 business days delivery'}</small>\n    </div>\n    <div class=\"dw-postery-inline-desc\">\n      <p class=\"dw-postery-inline-desc__text is-clamped\">${descPlain}</p>\n      <button type=\"button\" class=\"dw-postery-inline-desc__more\" onclick=\"const p=this.previousElementSibling;const c=p.classList.toggle('is-clamped');this.textContent=c?'Read more':'Show less';\">Read more</button>\n    </div>\n    <div class=\"dw-postery-meta-links\">\n      <details class=\"dw-postery-meta-item\">\n        <summary><span>DETAILS &amp; MATERIALS</span><svg viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\"><polyline points=\"9 18 15 12 9 6\"></polyline></svg></summary>\n        <div class=\"dw-postery-meta-body\">\n          <p>Printed on 200gsm uncoated archival matte fine art paper with fade-resistant pigment inks for deep colour and zero glare. Available as an unframed poster, with a printed passepartout and solid black wood frame, or as a frameless 3D gallery-wrapped stretched canvas.</p>\n        </div>\n      </details>\n      <details class=\"dw-postery-meta-item\">\n        <summary><span>DELIVERY &amp; RETURNS</span><svg viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\"><polyline points=\"9 18 15 12 9 6\"></polyline></svg></summary>\n        <div class=\"dw-postery-meta-body\">\n          <p>Dispatched within 48 hours, tracked delivery in 5\u20137 business days. ${isUS ? '$5.95 flat-rate US shipping (free over $49).' : 'Free UK delivery on every order.'} 30-day returns on unused prints. Contact: support@posterandform.com</p>\n        </div>\n      </details>\n    </div>\n  `;\n  if (buyButtons) buyButtons.after(extraWrap);\n\n  // 6. Sync Pills, Mode Tabs & Size Scaling with current selection\n  const variantsNode = document.querySelector('[data-ps-variants]');\n  const variants = variantsNode ? JSON.parse(variantsNode.textContent) : [];\n  const moneyFmt = (cents) => new Intl.NumberFormat(document.documentElement.lang || 'en-GB', { style: 'currency', currency: window.Shopify?.currency?.active || 'GBP' }).format(Number(cents || 0) / 100);\n\n  const getScaleStep = (sz = '') => {\n    const s = sz.toLowerCase();\n    if (s.includes('100x140') || s.includes('100\u00D7140')) return 's5';\n    if (s.includes('70x100') || s.includes('70\u00D7100') || s.includes('60x80') || s.includes('a1')) return 's4';\n    if (s.includes('50x70') || s.includes('50\u00D770') || s.includes('a2')) return 's3';\n    if (s.includes('30x40') || s.includes('30\u00D740') || s.includes('40x50') || s.includes('a3')) return 's2';\n    return 's1';\n  };\n\n  const syncPillsAndStage = () => {\n    const st = root.productFraming?.getState?.();\n    const mode = st?.mode || 'poster';\n    const checkedSizeInput = root.querySelector('.ps-config-options--size input:checked');\n    const curSize = st?.currentSize || checkedSizeInput?.value || 'A4 (21\u00D729,7 cm)';\n    const curVar = variants.find((v) => v.options && v.options.includes(curSize)) || variants[0];\n\n    // Update Title Suffix (`Poster` vs `Canvas`)\n    const suffixEl = form.querySelector('[data-pf-title-suffix]');\n    if (suffixEl) suffixEl.textContent = mode === 'canvas' ? 'Canvas' : 'Art Print';\n\n    // Update Mode Tabs & Visibility of Poster vs Canvas pills\n    pillsWrap.querySelectorAll('[data-pf-mode-tab]').forEach((tab) => {\n      const active = tab.dataset.pfModeTab === mode;\n      tab.classList.toggle('is-active', active);\n      tab.setAttribute('aria-selected', String(active));\n    });\n    pillsWrap.querySelectorAll('[data-pf-poster-only]').forEach((el) => { el.hidden = mode === 'canvas'; });\n    pillsWrap.querySelectorAll('[data-pf-canvas-only]').forEach((el) => { el.hidden = mode !== 'canvas'; });\n    mainMedia.setAttribute('data-pf-mode', mode);\n    const splitSlot = root.querySelector('[data-pf-split-slot]');\n    if (splitSlot) {\n      splitSlot.setAttribute('data-pf-mode', mode);\n      const artUrl = mainMedia.style.getPropertyValue('--pf-art-url');\n      if (artUrl) splitSlot.style.setProperty('--pf-art-url', artUrl);\n    }\n\n    // Update Size Pill\n    const sizeValEl = pillsWrap.querySelector('[data-pf-pill-size-val]');\n    const sizePriceEl = pillsWrap.querySelector('[data-pf-pill-size-price]');\n    if (sizeValEl) sizeValEl.textContent = curSize;\n    if (sizePriceEl && curVar) sizePriceEl.textContent = moneyFmt(curVar.price);\n\n    // Update Canvas Pill (price only from the market-aware catalog; never a hardcoded placeholder)\n    const canvasPriceEl = pillsWrap.querySelector('[data-pf-pill-canvas-price]');\n    if (canvasPriceEl) {\n      canvasPriceEl.textContent = (mode === 'canvas' && st?.canvasRow?.formattedPrice) ? `+${st.canvasRow.formattedPrice}` : '';\n    }\n\n    // Update Passepartout Pill\n    const ppValEl = pillsWrap.querySelector('[data-pf-pill-pp-val]');\n    const ppPriceEl = pillsWrap.querySelector('[data-pf-pill-pp-price]');\n    const ppSwatchEl = pillsWrap.querySelector('[data-pf-pill-pp-swatch]');\n    const selPp = st?.selected?.passepartout;\n    if (ppValEl) ppValEl.textContent = selPp ? `${selPp.style} passepartout` : 'No passepartout';\n    // 1:1 with DaylightWalls: nothing selected => no surcharge shown at all\n    if (ppPriceEl) ppPriceEl.textContent = (selPp && selPp.formattedPrice) ? `+${selPp.formattedPrice}` : '';\n    if (ppSwatchEl) {\n      if (selPp) {\n        ppSwatchEl.className = 'pf-postery-pill__swatch';\n        ppSwatchEl.style.setProperty('--pf-pill-swatch', st.swatchFor(selPp.styleSlug));\n      } else {\n        ppSwatchEl.className = 'pf-postery-pill__swatch pf-postery-pill__swatch--none';\n      }\n    }\n\n    // Update Frame Pill (filter out Frameless Canvas from Frame rows!)\n    const frValEl = pillsWrap.querySelector('[data-pf-pill-fr-val]');\n    const frPriceEl = pillsWrap.querySelector('[data-pf-pill-fr-price]');\n    const frSwatchEl = pillsWrap.querySelector('[data-pf-pill-fr-swatch]');\n    const selFr = st?.selected?.frame;\n    if (frValEl) frValEl.textContent = selFr ? `${selFr.style} frame` : 'No frame';\n    // 1:1 with DaylightWalls: nothing selected => no surcharge shown at all\n    if (frPriceEl) frPriceEl.textContent = (selFr && selFr.formattedPrice) ? `+${selFr.formattedPrice}` : '';\n    if (frSwatchEl) {\n      if (selFr) {\n        frSwatchEl.className = 'pf-postery-pill__swatch';\n        frSwatchEl.style.setProperty('--pf-pill-swatch', '#181818');\n      } else {\n        frSwatchEl.className = 'pf-postery-pill__swatch pf-postery-pill__swatch--none';\n      }\n    }\n\n    // Update Stage Size Scale & Label\n    mainMedia.setAttribute('data-pf-size-scale', getScaleStep(curSize));\n    mainMedia.setAttribute('data-pf-size-label', curSize);\n  };\n\n  // Bind Poster | Canvas Mode Tabs\n  pillsWrap.querySelectorAll('[data-pf-mode-tab]').forEach((tab) => {\n    tab.addEventListener('click', () => {\n      const nextMode = tab.dataset.pfModeTab || 'poster';\n      root.productFraming?.setMode?.(nextMode);\n      syncPillsAndStage();\n    });\n  });\n\n  // 7. Drawer / Split-Screen Bottom Sheet Modal\n  const previewHome = document.createComment('pf-preview-home');\n  preview.before(previewHome);\n\n  const modal = document.createElement('div');\n  modal.className = 'pf-split-modal';\n  modal.hidden = true;\n  modal.innerHTML = `\n    <div class=\"pf-split-modal__stage\">\n      <div class=\"pf-split-modal__preview-slot\" data-pf-split-slot></div>\n      <div class=\"pf-split-modal__caption\" data-pf-split-caption>Live preview \u00B7 Tap options below</div>\n    </div>\n    <div class=\"pf-split-modal__sheet\">\n      <div class=\"pf-split-modal__header\">\n        <div class=\"pf-split-modal__tabs\">\n          <button type=\"button\" class=\"pf-split-modal__tab\" data-pf-tab=\"size\">Size</button>\n          <button type=\"button\" class=\"pf-split-modal__tab\" data-pf-tab=\"passepartout\">Passepartout</button>\n          <button type=\"button\" class=\"pf-split-modal__tab\" data-pf-tab=\"frame\">Frame</button>\n        </div>\n        <button type=\"button\" class=\"pf-split-modal__done\" data-pf-split-close>Done \u2715</button>\n      </div>\n      <div class=\"pf-split-modal__body\" data-pf-split-body></div>\n    </div>\n  `;\n  root.appendChild(modal);\n\n  const slot = modal.querySelector('[data-pf-split-slot]');\n  const caption = modal.querySelector('[data-pf-split-caption]');\n  const body = modal.querySelector('[data-pf-split-body]');\n  const tabs = [...modal.querySelectorAll('[data-pf-tab]')];\n\n  const updateCaption = () => {\n    const st = root.productFraming?.getState?.();\n    const priceText = root.querySelector('.ps-price__current')?.textContent?.trim() || '';\n    if (!st) { caption.textContent = priceText; return; }\n    if (st.mode === 'canvas') {\n      caption.textContent = `${st.currentSize} \u00B7 Frameless stretched canvas \u2014 ${priceText}`;\n      return;\n    }\n    const pp = st.selected.passepartout ? `${st.selected.passepartout.style} passepartout` : 'No passepartout';\n    const fr = st.selected.frame ? `${st.selected.frame.style} frame` : 'No frame';\n    caption.textContent = `${st.currentSize} \u00B7 ${pp} \u00B7 ${fr} \u2014 ${priceText}`;\n  };\n\n  const renderTab = (tabName) => {\n    const st = root.productFraming?.getState?.();\n    const isCanvas = st?.mode === 'canvas';\n    tabs.forEach((t) => {\n      if (t.dataset.pfTab !== 'size') t.hidden = isCanvas;\n      t.classList.toggle('is-active', t.dataset.pfTab === tabName);\n    });\n    body.replaceChildren();\n\n    if (tabName === 'size') {\n      const sizeInputs = [...root.querySelectorAll('.ps-config-options--size input[type=\"radio\"]')];\n      sizeInputs.forEach((inp) => {\n        const vObj = variants.find((v) => v.options && v.options.includes(inp.value));\n        const canvasAdd = isCanvas && typeof st?.canvasPriceForSize === 'function' ? Number(st.canvasPriceForSize(inp.value) || 0) : 0;\n        const card = document.createElement('button');\n        card.type = 'button';\n        card.className = `pf-split-card${inp.checked ? ' is-selected' : ''}`;\n        card.innerHTML = `\n          <span class=\"pf-split-card__meta\">\n            <span class=\"pf-split-card__title\">${inp.value}</span>\n            <span class=\"pf-split-card__price\">${vObj ? moneyFmt(Number(vObj.price) + canvasAdd) : ''}</span>\n          </span>\n        `;\n        card.addEventListener('click', () => {\n          inp.checked = true;\n          inp.dispatchEvent(new Event('change', { bubbles: true }));\n          syncPillsAndStage();\n          renderTab('size');\n          updateCaption();\n          window.setTimeout(() => root.productFramePreview?.fit?.(), 50);\n        });\n        body.appendChild(card);\n      });\n      if (isCanvas) {\n        const note = document.createElement('p');\n        note.className = 'pf-split-note';\n        note.textContent = 'Frameless stretched canvas on a wooden stretcher bar, ready to hang. Prices include the canvas.';\n        body.appendChild(note);\n      }\n      return;\n    }\n\n    if (!st) return;\n    const rows = tabName === 'passepartout' ? st.passepartoutRows : (st.frameRows || []).filter((r) => r.styleSlug === 'black-wood');\n    const currentSel = st.selected[tabName];\n\n    const noneCard = document.createElement('button');\n    noneCard.type = 'button';\n    noneCard.className = `pf-split-card${!currentSel ? ' is-selected' : ''}`;\n    noneCard.innerHTML = `\n      <span class=\"pf-split-card__swatch pf-split-card__swatch--none\"></span>\n      <span class=\"pf-split-card__meta\">\n        <span class=\"pf-split-card__title\">${tabName === 'passepartout' ? 'No passepartout' : 'No frame'}</span>\n        <span class=\"pf-split-card__sub\">${tabName === 'passepartout' ? 'Full-bleed artwork' : 'Unframed print'}</span>\n      </span>\n    `;\n    noneCard.addEventListener('click', () => {\n      root.productFraming.selectOption(tabName, null);\n      syncPillsAndStage();\n      renderTab(tabName);\n      updateCaption();\n      window.setTimeout(() => root.productFramePreview?.fit?.(), 50);\n    });\n    body.appendChild(noneCard);\n\n    rows.forEach((row) => {\n      const isSel = String(currentSel?.id) === String(row.id);\n      const card = document.createElement('button');\n      card.type = 'button';\n      card.className = `pf-split-card${isSel ? ' is-selected' : ''}`;\n      const swatchColor = st.swatchFor(row.styleSlug);\n      card.innerHTML = `\n        <span class=\"pf-split-card__swatch\" style=\"--pf-swatch:${swatchColor}\"></span>\n        <span class=\"pf-split-card__meta\">\n          <span class=\"pf-split-card__title\">${row.style}</span>\n          <span class=\"pf-split-card__sub\">${tabName === 'passepartout' ? 'Printed border' : st.currentSize}</span>\n          <span class=\"pf-split-card__price\">+${row.formattedPrice}</span>\n        </span>\n      `;\n      card.addEventListener('click', () => {\n        root.productFraming.selectOption(tabName, row.id);\n        syncPillsAndStage();\n        renderTab(tabName);\n        updateCaption();\n        window.setTimeout(() => root.productFramePreview?.fit?.(), 50);\n      });\n      body.appendChild(card);\n    });\n  };\n\n  const openModal = (initialTab = 'size') => {\n    if (isMobile()) {\n      slot.appendChild(preview);\n    }\n    modal.hidden = false;\n    document.documentElement.style.overflow = 'hidden';\n    window.requestAnimationFrame(() => {\n      root.productFramePreview?.fit?.();\n      renderTab(initialTab);\n      updateCaption();\n    });\n  };\n\n  const closeModal = () => {\n    if (modal.hidden) return;\n    if (slot.contains(preview)) {\n      previewHome.after(preview);\n    }\n    modal.hidden = true;\n    document.documentElement.style.overflow = '';\n    window.requestAnimationFrame(() => {\n      root.productFramePreview?.fit?.();\n      if (isMobile()) {\n        const top = mainMedia.getBoundingClientRect().top + window.scrollY - 70;\n        window.scrollTo({ top: Math.max(0, top), behavior: 'smooth' });\n      }\n    });\n  };\n\n  tabs.forEach((t) => t.addEventListener('click', () => renderTab(t.dataset.pfTab)));\n  modal.querySelector('[data-pf-split-close]')?.addEventListener('click', closeModal);\n  modal.addEventListener('click', (e) => { if (e.target === modal) closeModal(); });\n\n  pillsWrap.querySelectorAll('[data-pf-open-tab]').forEach((btn) => {\n    btn.addEventListener('click', () => openModal(btn.dataset.pfOpenTab || 'size'));\n  });\n\n  const stickySizeBtn = root.querySelector('[data-ps-sticky-size]');\n  stickySizeBtn?.addEventListener('click', (e) => {\n    e.preventDefault();\n    e.stopImmediatePropagation();\n    openModal('size');\n  }, true);\n\n  const safeSyncPills = () => {\n    try { syncPillsAndStage(); } catch (error) { console.error('PF pill sync failed.', error); }\n  };\n  root.addEventListener('product:variant-change', safeSyncPills);\n  root.addEventListener('product:framing-price-change', safeSyncPills);\n  // Keep re-syncing until the framing catalog (market-aware prices) is actually available, so slow\n  // connections never get stuck on the initial empty/placeholder pill state.\n  let pillSyncTries = 0;\n  const syncPillsUntilReady = () => {\n    safeSyncPills();\n    const st = root.productFraming?.getState?.();\n    const ready = Boolean(st && ((st.passepartoutRows || []).length || (st.frameRows || []).length));\n    if (!ready && pillSyncTries++ < 60) window.setTimeout(syncPillsUntilReady, 250);\n  };\n  syncPillsUntilReady();\n})();\n\n\n/* PAF-ROOM-SCENE-002: keep the room-scene print (art + mat + frame) inside each scene's clear wall area.\n   SKY = top of the furniture per 5%-wide column band, as a fraction of the 1024x1536 scene photo (measured from the photos).\n   Wall box = from 6% below the top of the stage down to the furniture under the print minus a 3% gap.\n   Size i is drawn at min(theme size, F[i] x wall box), so sizes still step up visibly and the largest is capped by the wall. */\n(function () {\n  var SKY = {\n    sofa:      [.513,.550,.583,.792,.710,.711,.711,.711,.712,.712,.712,.712,.712,.711,.710,.711,.712,.712,.711,.711],\n    dining:    [.684,.684,.684,.688,.694,.704,.702,.683,.675,.660,.657,.625,.621,.621,.641,.704,.692,.686,.683,.683],\n    sideboard: [.663,.662,.567,.547,.547,.592,.668,.667,.665,.664,.664,.664,.664,.550,.502,.487,.501,.489,.500,.518]\n  };\n  var F = { s1: .46, s2: .56, s3: .68, s4: .82, s5: .96 };\n  var IW = 1024, IH = 1536, TOP = .06, GAP = .03, SIDE = 12;\n  function pct(v, d) { var m = /(-?[\\d.]+)%/.exec(v || ''); return m ? parseFloat(m[1]) / 100 : d; }\n  function apply(media) {\n    var frame = media.querySelector('.ps-css-frame'), preview = media.querySelector('.ps-print-preview');\n    if (!frame || !preview) return;\n    var sky = SKY[media.getAttribute('data-pf-room-scene')];\n    frame.style.removeProperty('translate'); frame.style.removeProperty('scale');\n    if (!sky) { media.removeAttribute('data-pf-wall-cap'); thinFrame(media, frame); return; }\n    var els = [preview, media.querySelector('.print-preview__inner'), frame].filter(Boolean);\n    var trs = els.map(function (e) { var v = e.style.transition; e.style.setProperty('transition', 'none', 'important'); return v; });\n    function restore() { els.forEach(function (e, i) { e.style.removeProperty('transition'); if (trs[i]) e.style.transition = trs[i]; }); }\n    var box = media.getBoundingClientRect(), r0 = frame.getBoundingClientRect();\n    if (!r0.width || !r0.height || !frame.offsetWidth) { restore(); return; }\n    var sp = r0.width / frame.offsetWidth;\n    var W = box.width, H = box.height, cs = getComputedStyle(media);\n    var c = Math.max(W / IW, H / IH), dw = IW * c, dh = IH * c;\n    var ox = (W - dw) * pct(cs.backgroundPositionX, .5), oy = (H - dh) * pct(cs.backgroundPositionY, 1);\n    function furniture(w) {\n      var L = H, x0 = W / 2 - w / 2, x1 = W / 2 + w / 2;\n      for (var b = 0; b < 20; b++) {\n        var bx0 = ox + dw * b / 20, bx1 = ox + dw * (b + 1) / 20;\n        if (bx1 >= x0 && bx0 <= x1) L = Math.min(L, oy + dh * sky[b]);\n      }\n      return L;\n    }\n    var a = r0.width / r0.height, top = H * TOP, f = F[media.getAttribute('data-pf-size-scale')] || F.s1;\n    var ht = Math.min(r0.height, f * (H - top));\n    for (var i = 0; i < 6; i++) {\n      var maxH = Math.min(furniture(Math.max(ht * a, 1)) - H * GAP - top, (W - 2 * SIDE) / a);\n      ht = Math.min(ht, f * maxH); // only shrink: a narrower print can only see the same or lower furniture\n    }\n    ht = Math.max(ht, 8);\n    var k = ht / r0.height;\n    // scale first, then measure and translate (translate is the outermost of the frame's own transforms, so 1 local px = sp screen px)\n    frame.style.setProperty('scale', k.toFixed(4));\n    var r1 = frame.getBoundingClientRect();\n    var tx = (box.left + W / 2 - r1.width / 2) - r1.left, ty = (box.top + top) - r1.top;\n    frame.style.setProperty('translate', (tx / sp).toFixed(2) + 'px ' + (ty / sp).toFixed(2) + 'px');\n    restore();\n    media.setAttribute('data-pf-wall-cap', k.toFixed(3));\n    thinFrame(media, frame);\n  }\n  /* PAF-FRAME-004: realistic moulding width. ~2cm moulding relative to the print's short side (A4 = 21cm ... 100x140 = 100cm),\n     measured on the rendered artwork, clamped per viewport: <768px 3-5px, <1000px 3-5px, else 4-6px, and never above 4.5% of the print's short side. Same for all frame colours. */\n  function thinFrame(media, frame) {\n    if (frame.dataset.hasFrame !== 'true') { media.removeAttribute('data-pf-frame-px'); return; }\n    var art = frame.querySelector('.ps-css-artwork'); if (!art) return;\n    var label = media.getAttribute('data-pf-size-label') || '';\n    var nums = (label.match(/\\d+(?:[.,]\\d+)?/g) || []).map(function (n) { return parseFloat(n.replace(',', '.')); }).filter(function (n) { return n >= 10; });\n    var shortCm = /A4/i.test(label) ? 21 : /A3/i.test(label) ? 29.7 : (nums.length ? Math.min.apply(null, nums) : 30);\n    var ar = art.getBoundingClientRect(), fr = frame.getBoundingClientRect();\n    if (!ar.width || !frame.offsetWidth) return;\n    var vw = window.innerWidth, lo = vw < 768 ? 3 : vw < 1000 ? 3 : 4, hi = vw < 768 ? 5 : vw < 1000 ? 5 : 6;\n    var shortPx = Math.min(ar.width, ar.height);\n    var px = Math.max(lo, Math.min(hi, shortPx * 2 / shortCm));\n    px = Math.min(px, Math.max(1.5, shortPx * .045)); // never more than ~4.5% of the print's short side (keeps small room-scene prints light)\n    var sc = fr.width / frame.offsetWidth; // total transform scale on the frame (size tier x wall cap)\n    var local = (px / sc).toFixed(2) + 'px';\n    var curLocal = parseFloat(frame.style.getPropertyValue('--ps-css-frame-width')) || 0;\n    if (Math.abs(curLocal - parseFloat(local)) > 0.05 || frame.style.getPropertyPriority('--ps-css-frame-width') !== 'important')\n      frame.style.setProperty('--ps-css-frame-width', local, 'important');\n    media.setAttribute('data-pf-frame-px', px.toFixed(1));\n  }\n  function init() {\n    document.querySelectorAll('.ps-main-media').forEach(function (media) {\n      var t, obs; function frame() { return media.querySelector('.ps-css-frame'); }\n      function run() { apply(media); obs.takeRecords(); }\n      function q() { clearTimeout(t); t = setTimeout(run, 40); }\n      obs = new MutationObserver(q);\n      obs.observe(media, { attributes: true, subtree: true, attributeFilter: ['data-pf-room-scene', 'data-pf-size-scale', 'data-has-frame', 'style', 'class', 'src'] });\n      window.addEventListener('resize', q);\n      media.addEventListener('transitionend', function (e) { if (e.target !== frame() || e.propertyName === 'padding-top') q(); });\n      document.addEventListener('product:css-frame-rendered', q, true);\n      q();\n    });\n  }\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', init); else init();\n})();\n\n\n/* PAF-THUMB-003: mirror the main preview's frame/mat state onto the room-scene thumbnails. */\n(function () {\n  function sync() {\n    var f = document.querySelector('.ps-main-media .ps-css-frame'); if (!f) return;\n    var m = f.querySelector('.ps-css-mat');\n    var hasFrame = f.dataset.hasFrame === 'true', hasMat = !!(m && m.dataset.hasMat === 'true');\n    var fc = getComputedStyle(f).getPropertyValue('--ps-css-frame-color').trim() || '#181818';\n    var mc = (m ? getComputedStyle(m).backgroundColor : '#fff').replace(/rgba\\((\\d+),\\s*(\\d+),\\s*(\\d+),\\s*[\\d.]+\\)/, 'rgb($1, $2, $3)'); // mat colour may be read mid-fade\n    document.querySelectorAll('.pf-room-thumb__art').forEach(function (a) {\n      if (a.dataset.pfThumbFrame !== String(hasFrame)) a.dataset.pfThumbFrame = String(hasFrame);\n      if (a.dataset.pfThumbMat !== String(hasMat)) a.dataset.pfThumbMat = String(hasMat);\n      if (a.style.getPropertyValue('--pf-thumb-frame') !== fc) a.style.setProperty('--pf-thumb-frame', fc);\n      if (a.style.getPropertyValue('--pf-thumb-mat') !== mc) a.style.setProperty('--pf-thumb-mat', mc);\n    });\n  }\n  function init() {\n    var t; function q() { clearTimeout(t); t = setTimeout(sync, 30); }\n    var root = document.querySelector('.ps-main-media');\n    if (root) new MutationObserver(q).observe(root, { attributes: true, subtree: true, attributeFilter: ['data-has-frame', 'data-has-mat', 'data-mat-style', 'data-frame-style'] });\n    var rail = document.querySelector('[data-ps-thumbnail-rail]');\n    if (rail) new MutationObserver(q).observe(rail, { childList: true, subtree: true });\n    q(); setTimeout(sync, 1500);\n  }\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', init); else init();\n})();\n"],
  "mappings": "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",
  "names": ["i"]
}
