{
  "version": 3,
  "sources": ["/cdn/shop/t/23/assets/cw-theme-buttons-20261103.js?cw=20261103-buttons"],
  "sourcesContent": ["(() => {\n  const entries = new Map();\n  const aliases = new Map();\n  const paths = new Map();\n  const safePath = value => {\n    try {\n      const url = new URL(value, location.origin);\n      return url.origin === location.origin && /^\\/products\\/[a-z0-9-]+\\/?$/.test(url.pathname) ? url.pathname.replace(/\\/$/, '') : '';\n    } catch (_) { return ''; }\n  };\n  let products = [];\n  let legacy = {};\n  let labels = {};\n  try { products = JSON.parse(document.querySelector('[data-cw-shortlist-catalogue]')?.textContent || '[]'); } catch (_) {}\n  try { legacy = JSON.parse(document.querySelector('[data-cw-enquiry-catalogue]')?.textContent || '{}'); } catch (_) {}\n  try { labels = JSON.parse(document.querySelector('[data-cw-shortlist-labels]')?.textContent || '{}'); } catch (_) {}\n  for (const product of Array.isArray(products) ? products : []) {\n    if (!/^\\d+$/.test(product.id || '') || !product.title || !safePath(product.url)) continue;\n    const key = `P-${product.id}`;\n    const item = { key, id: product.id, sku: String(product.sku || '').slice(0,80), title: String(product.title).slice(0,160), url: safePath(product.url) };\n    entries.set(key, item);\n    paths.set(item.url, key);\n    aliases.set(key, key);\n    if (/^[A-Z0-9][A-Z0-9-]{1,79}$/i.test(item.sku)) {\n      const alias = item.sku.toUpperCase();\n      aliases.set(alias, aliases.has(alias) ? null : key);\n    }\n  }\n  for (const [sku, product] of Object.entries(legacy)) {\n    if (!/^CD-\\d{3}$/.test(sku) || !product?.title) continue;\n    const key = paths.get(safePath(product.url)) || aliases.get(sku) || sku;\n    if (!entries.has(key)) entries.set(key, { key, id:'', sku, title:String(product.title).slice(0,160), url:safePath(product.url) });\n    aliases.set(sku,key);\n  }\n  const resolve = value => {\n    const token = typeof value === 'string' ? value.trim().toUpperCase() : '';\n    return entries.get(aliases.get(token) || token) || null;\n  };\n  const fromItem = item => {\n    if (!item || typeof item !== 'object') return null;\n    const byPath = entries.get(paths.get(safePath(item.url)));\n    return resolve(item.key || (item.id ? `P-${item.id}` : '')) || byPath || resolve(item.sku);\n  };\n  window.CwShortlist = { entries, resolve, fromItem, labels };\n})();\n\nconst buildShortlistEnquiryUrl = (contactHref, skus, origin) => {\n  const fallback = new URL('/pages/contact', origin);\n  let url;\n  try {\n    url = new URL(contactHref || fallback.pathname, origin);\n  } catch (_) {\n    url = fallback;\n  }\n  if (url.origin !== fallback.origin) url = fallback;\n  url.searchParams.set('shortlist', skus.join(','));\n  return url.toString();\n};\n\n(() => {\n  const header = document.querySelector('[data-cw-header]');\n  if (!header) return;\n\n  const button = header.querySelector('[data-cw-menu-button]');\n  const navigation = header.querySelector('[data-cw-nav]');\n  const overlay = header.querySelector('[data-cw-nav-overlay]');\n  const label = header.querySelector('[data-cw-menu-label]');\n  const mobileQuery = window.matchMedia('(max-width: 899px)');\n  const focusableSelector = 'a[href], summary, button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n\n  if (!button || !navigation || !overlay) return;\n\n  const closeMenu = (restoreFocus = false) => {\n    button.setAttribute('aria-expanded', 'false');\n    navigation.classList.remove('is-open');\n    overlay.hidden = true;\n    document.body.classList.remove('cw-menu-open');\n    if (label) label.textContent = 'Open menu';\n    if (restoreFocus) button.focus();\n  };\n\n  const openMenu = () => {\n    button.setAttribute('aria-expanded', 'true');\n    navigation.classList.add('is-open');\n    overlay.hidden = false;\n    document.body.classList.add('cw-menu-open');\n    if (label) label.textContent = 'Close menu';\n    const firstLink = navigation.querySelector('a, summary, button');\n    if (firstLink) firstLink.focus();\n  };\n\n  const trapMenuFocus = (event) => {\n    if (event.key !== 'Tab' || button.getAttribute('aria-expanded') !== 'true' || !mobileQuery.matches) return;\n    const focusable = [button, ...navigation.querySelectorAll(focusableSelector)].filter((element) => !element.hidden && element.getAttribute('aria-hidden') !== 'true');\n    if (focusable.length === 0) return;\n    const first = focusable[0];\n    const last = focusable[focusable.length - 1];\n\n    if (event.shiftKey && document.activeElement === first) {\n      event.preventDefault();\n      last.focus();\n    } else if (!event.shiftKey && document.activeElement === last) {\n      event.preventDefault();\n      first.focus();\n    } else if (!focusable.includes(document.activeElement)) {\n      event.preventDefault();\n      first.focus();\n    }\n  };\n\n  button.addEventListener('click', () => {\n    if (button.getAttribute('aria-expanded') === 'true') closeMenu();\n    else openMenu();\n  });\n\n  overlay.addEventListener('click', () => closeMenu(true));\n\n  navigation.addEventListener('click', (event) => {\n    if (event.target.closest('a') && window.matchMedia('(max-width: 899px)').matches) {\n      closeMenu();\n    }\n  });\n\n  document.addEventListener('keydown', (event) => {\n    if (event.key === 'Escape' && button.getAttribute('aria-expanded') === 'true') {\n      closeMenu(true);\n      return;\n    }\n    trapMenuFocus(event);\n  });\n\n  window.addEventListener('resize', () => {\n    if (window.innerWidth >= 900 && button.getAttribute('aria-expanded') === 'true') {\n      closeMenu();\n    }\n  });\n})();\n\n(() => {\n  const videos = Array.from(document.querySelectorAll('[data-cw-mission-video]'));\n  if (!videos.length) return;\n\n  const reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)');\n  const connection = navigator.connection || navigator.mozConnection || navigator.webkitConnection;\n  const toggles = Array.from(document.querySelectorAll('[data-cw-mission-toggle]'));\n  let observer = null;\n\n  const motionAllowed = () => {\n    const effectiveType = connection?.effectiveType || '';\n    return !reducedMotion.matches && !connection?.saveData && !/(^|-)2g$/i.test(effectiveType);\n  };\n\n  const controlledVideo = (toggle) => {\n    const targetId = toggle.getAttribute('aria-controls') || '';\n    return targetId ? document.getElementById(targetId) : null;\n  };\n\n  const updateToggle = (video) => {\n    const isPlaying = !video.paused && !video.ended;\n    toggles.forEach((toggle) => {\n      if (controlledVideo(toggle) !== video) return;\n      toggle.setAttribute('aria-pressed', String(isPlaying));\n      const label = toggle.querySelector('[data-cw-mission-toggle-label]');\n      if (label) label.textContent = isPlaying ? 'Pause motion' : 'Play motion';\n    });\n  };\n\n  const hydrate = (video) => {\n    if (video.dataset.cwMissionReady === 'true') return;\n    video.querySelectorAll('source[data-src]').forEach((source) => {\n      source.src = source.dataset.src;\n      source.removeAttribute('data-src');\n    });\n    video.dataset.cwMissionReady = 'true';\n    video.load();\n  };\n\n  const pauseOthers = (except = null) => {\n    videos.forEach((video) => {\n      if (video === except) return;\n      video.pause();\n      updateToggle(video);\n    });\n  };\n\n  const playVideo = (video, userInitiated) => {\n    if (!userInitiated && video.dataset.cwMissionUserPaused === 'true') return;\n    hydrate(video);\n    pauseOthers(video);\n    const attempt = video.play();\n    if (attempt && typeof attempt.then === 'function') {\n      attempt.then(() => updateToggle(video)).catch(() => updateToggle(video));\n    }\n  };\n\n  videos.forEach((video) => {\n    video.muted = true;\n    video.addEventListener('play', () => updateToggle(video));\n    video.addEventListener('pause', () => updateToggle(video));\n    video.addEventListener('error', () => {\n      video.pause();\n      updateToggle(video);\n    });\n    updateToggle(video);\n  });\n\n  toggles.forEach((toggle) => {\n    const video = controlledVideo(toggle);\n    if (!video) return;\n    toggle.hidden = false;\n    toggle.addEventListener('click', () => {\n      if (video.paused || video.ended) {\n        video.dataset.cwMissionUserPaused = 'false';\n        playVideo(video, true);\n      } else {\n        video.dataset.cwMissionUserPaused = 'true';\n        video.pause();\n        updateToggle(video);\n      }\n    });\n  });\n\n  const configureMotion = () => {\n    if (observer) observer.disconnect();\n    observer = null;\n    pauseOthers();\n    if (!motionAllowed() || document.hidden || !('IntersectionObserver' in window)) return;\n\n    observer = new IntersectionObserver((entries) => {\n      entries.forEach((entry) => {\n        if (entry.isIntersecting && entry.intersectionRatio >= 0.45) {\n          playVideo(entry.target, false);\n        } else {\n          entry.target.pause();\n          updateToggle(entry.target);\n        }\n      });\n    }, { threshold: [0, 0.45, 0.8] });\n\n    videos.forEach((video) => observer.observe(video));\n  };\n\n  configureMotion();\n  if (typeof reducedMotion.addEventListener === 'function') reducedMotion.addEventListener('change', configureMotion);\n  else if (typeof reducedMotion.addListener === 'function') reducedMotion.addListener(configureMotion);\n  if (connection && typeof connection.addEventListener === 'function') connection.addEventListener('change', configureMotion);\n  document.addEventListener('visibilitychange', configureMotion);\n  window.addEventListener('pagehide', () => pauseOthers());\n})();\n\n(() => {\n  const instances = new WeakMap();\n\n  const elementsWithin = (root, selector) => {\n    const elements = root.querySelectorAll ? Array.from(root.querySelectorAll(selector)) : [];\n    if (root instanceof Element && root.matches(selector)) elements.unshift(root);\n    return elements;\n  };\n\n  const initCarousel = (carousel) => {\n    if (instances.has(carousel)) return;\n\n    const hero = carousel.closest('.cw-hero');\n    const track = carousel.querySelector('.cw-hero__slides');\n    const slides = Array.from(carousel.querySelectorAll('[data-cw-hero-slide]'));\n    if (!hero || !track || slides.length < 2) return;\n\n    const pause = hero.querySelector('[data-cw-hero-pause]');\n    const pauseLabel = pause?.querySelector('[data-cw-hero-pause-label]');\n    const status = carousel.querySelector('[data-cw-hero-status]') || hero.querySelector('[data-cw-hero-status]');\n    const reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)');\n    const connection = navigator.connection || navigator.mozConnection || navigator.webkitConnection;\n    const cleanups = [];\n    let activeIndex = Math.max(0, slides.findIndex((slide) => slide.classList.contains('is-active')));\n    let trackPosition = activeIndex + 1;\n    let timer = null;\n    let transitionTimer = null;\n    let transitioning = false;\n    let userPaused = false;\n    let pointerPaused = false;\n    let focusPaused = false;\n    let inViewport = true;\n    let pointerStartX = null;\n    let pointerStartedOnInteractive = false;\n\n    const addListener = (target, type, listener) => {\n      if (!target?.addEventListener) return;\n      target.addEventListener(type, listener);\n      cleanups.push(() => target.removeEventListener(type, listener));\n    };\n\n    const addMediaListener = (query, listener) => {\n      if (typeof query.addEventListener === 'function') {\n        query.addEventListener('change', listener);\n        cleanups.push(() => query.removeEventListener('change', listener));\n      } else if (typeof query.addListener === 'function') {\n        query.addListener(listener);\n        cleanups.push(() => query.removeListener(listener));\n      }\n    };\n\n    const motionAllowed = () => !reducedMotion.matches && !connection?.saveData;\n    const normalizeIndex = (index) => (index + slides.length) % slides.length;\n\n    const cloneSlide = (source) => {\n      const clone = source.cloneNode(true);\n      clone.removeAttribute('data-cw-hero-slide');\n      clone.setAttribute('data-cw-hero-clone', '');\n      clone.removeAttribute('role');\n      clone.removeAttribute('aria-roledescription');\n      clone.removeAttribute('aria-label');\n      clone.setAttribute('aria-hidden', 'true');\n      clone.classList.remove('is-active');\n      clone.querySelectorAll('[id]').forEach((element) => element.removeAttribute('id'));\n      const image = clone.querySelector('img');\n      if (image) {\n        image.loading = 'lazy';\n        image.removeAttribute('fetchpriority');\n        image.alt = '';\n      }\n      return clone;\n    };\n\n    const firstClone = cloneSlide(slides[0]);\n    const lastClone = cloneSlide(slides[slides.length - 1]);\n    track.prepend(lastClone);\n    track.append(firstClone);\n    carousel.classList.add('is-cw-ready');\n\n    const clearTimer = () => {\n      if (timer) window.clearTimeout(timer);\n      timer = null;\n    };\n\n    const clearTransitionTimer = () => {\n      if (transitionTimer) window.clearTimeout(transitionTimer);\n      transitionTimer = null;\n    };\n\n    const syncSlides = () => {\n      carousel.dataset.cwHeroActive = String(activeIndex);\n      slides.forEach((slide, slideIndex) => {\n        const active = slideIndex === activeIndex;\n        slide.classList.toggle('is-active', active);\n        slide.setAttribute('aria-hidden', String(!active));\n      });\n    };\n\n    const setTrackPosition = (position, animate) => {\n      track.classList.toggle('is-transitioning', animate);\n      track.style.transform = `translate3d(${-100 * position}%, 0, 0)`;\n    };\n\n    const schedule = () => {\n      clearTimer();\n      if (!motionAllowed() || userPaused || pointerPaused || focusPaused || !inViewport || document.hidden) return;\n      timer = window.setTimeout(() => advance(1, false), 3000);\n    };\n\n    const syncPauseControl = () => {\n      const available = motionAllowed();\n      carousel.dataset.cwHeroUserPaused = String(userPaused);\n      carousel.setAttribute('aria-label', userPaused\n        ? 'Featured porcelain carousel, paused. Tap or press Space to play; use Left and Right Arrow keys to browse.'\n        : 'Featured porcelain carousel. Tap or press Space to pause; use Left and Right Arrow keys to browse.');\n      if (pause) {\n        pause.hidden = !available;\n        pause.setAttribute('aria-pressed', String(userPaused));\n        pause.setAttribute('aria-label', userPaused ? 'Play carousel' : 'Pause carousel');\n        if (pauseLabel) pauseLabel.textContent = userPaused ? 'Play carousel' : 'Pause carousel';\n      }\n    };\n\n    const toggleUserPause = () => {\n      userPaused = !userPaused;\n      syncPauseControl();\n      if (status) status.textContent = userPaused ? 'Carousel paused.' : 'Carousel ready to play.';\n      schedule();\n    };\n\n    const finishTransition = () => {\n      clearTransitionTimer();\n      if (trackPosition === 0) trackPosition = slides.length;\n      if (trackPosition === slides.length + 1) trackPosition = 1;\n      transitioning = false;\n      setTrackPosition(trackPosition, false);\n      schedule();\n    };\n\n    function advance(delta, announce = true) {\n      if (transitioning || !delta) return;\n      clearTimer();\n      activeIndex = normalizeIndex(activeIndex + delta);\n      trackPosition += delta;\n      syncSlides();\n      if (announce && status) status.textContent = `View ${activeIndex + 1} of ${slides.length}.`;\n\n      const animate = motionAllowed();\n      transitioning = animate;\n      setTrackPosition(trackPosition, animate);\n      if (animate) {\n        clearTransitionTimer();\n        transitionTimer = window.setTimeout(finishTransition, 1120);\n      } else {\n        finishTransition();\n      }\n    }\n\n    const jumpTo = (index, announce = true) => {\n      clearTimer();\n      clearTransitionTimer();\n      transitioning = false;\n      activeIndex = normalizeIndex(index);\n      trackPosition = activeIndex + 1;\n      syncSlides();\n      setTrackPosition(trackPosition, false);\n      if (announce && status) status.textContent = `View ${activeIndex + 1} of ${slides.length}.`;\n      schedule();\n    };\n\n    if (pause) {\n      addListener(pause, 'click', toggleUserPause);\n    }\n\n    addListener(track, 'transitionend', (event) => {\n      if (event.propertyName !== 'transform' || !transitioning) return;\n      finishTransition();\n    });\n    addListener(carousel, 'keydown', (event) => {\n      if (event.target !== carousel) return;\n      if (event.key === 'ArrowLeft') {\n        event.preventDefault();\n        advance(-1);\n      } else if (event.key === 'ArrowRight') {\n        event.preventDefault();\n        advance(1);\n      } else if (event.key === 'Home') {\n        event.preventDefault();\n        jumpTo(0);\n      } else if (event.key === 'End') {\n        event.preventDefault();\n        jumpTo(slides.length - 1);\n      } else if (event.key === ' ' || event.key === 'Spacebar') {\n        event.preventDefault();\n        toggleUserPause();\n      }\n    });\n    addListener(carousel, 'pointerdown', (event) => {\n      if (!event.isPrimary || event.pointerType === 'mouse') return;\n      pointerStartedOnInteractive = event.target instanceof Element && Boolean(event.target.closest('a, button'));\n      if (pointerStartedOnInteractive) return;\n      pointerStartX = event.clientX;\n      pointerPaused = true;\n      clearTimer();\n      try { carousel.setPointerCapture(event.pointerId); } catch {}\n    });\n    addListener(carousel, 'pointerup', (event) => {\n      if (pointerStartX === null) return;\n      const distance = event.clientX - pointerStartX;\n      pointerStartX = null;\n      pointerPaused = false;\n      try { carousel.releasePointerCapture(event.pointerId); } catch {}\n      if (Math.abs(distance) < 36) {\n        if (!pointerStartedOnInteractive) {\n          toggleUserPause();\n          if (!userPaused) {\n            focusPaused = false;\n            carousel.blur();\n            schedule();\n          }\n        }\n        pointerStartedOnInteractive = false;\n        return;\n      }\n      pointerStartedOnInteractive = false;\n      advance(distance > 0 ? -1 : 1);\n    });\n    addListener(carousel, 'pointercancel', () => {\n      pointerStartX = null;\n      pointerStartedOnInteractive = false;\n      pointerPaused = false;\n      schedule();\n    });\n\n    addListener(carousel, 'pointerenter', (event) => {\n      if (event.pointerType && event.pointerType !== 'mouse') return;\n      pointerPaused = true;\n      clearTimer();\n    });\n    addListener(carousel, 'pointerleave', (event) => {\n      if (event.pointerType && event.pointerType !== 'mouse') return;\n      pointerPaused = false;\n      schedule();\n    });\n    addListener(carousel, 'focusin', () => {\n      focusPaused = true;\n      clearTimer();\n    });\n    addListener(carousel, 'focusout', (event) => {\n      if (event.relatedTarget && carousel.contains(event.relatedTarget)) return;\n      focusPaused = false;\n      schedule();\n    });\n\n    const configureMotion = () => {\n      clearTimer();\n      clearTransitionTimer();\n      transitioning = false;\n      trackPosition = activeIndex + 1;\n      setTrackPosition(trackPosition, false);\n      carousel.dataset.cwHeroMotion = motionAllowed() ? 'auto' : 'reduced';\n      syncPauseControl();\n      schedule();\n    };\n\n    addListener(document, 'visibilitychange', configureMotion);\n    addListener(window, 'pagehide', clearTimer);\n    addMediaListener(reducedMotion, configureMotion);\n    if (connection?.addEventListener) addListener(connection, 'change', configureMotion);\n\n    let intersectionObserver = null;\n    if ('IntersectionObserver' in window) {\n      intersectionObserver = new IntersectionObserver((entries) => {\n        const entry = entries[0];\n        inViewport = Boolean(entry?.isIntersecting && entry.intersectionRatio > 0.05);\n        if (inViewport) schedule();\n        else clearTimer();\n      }, { threshold: [0, 0.05, 0.2] });\n      intersectionObserver.observe(carousel);\n    }\n\n    const destroy = () => {\n      clearTimer();\n      clearTransitionTimer();\n      intersectionObserver?.disconnect();\n      cleanups.splice(0).forEach((cleanup) => cleanup());\n      firstClone.remove();\n      lastClone.remove();\n      track.classList.remove('is-transitioning');\n      track.style.removeProperty('transform');\n      carousel.classList.remove('is-cw-ready');\n      instances.delete(carousel);\n    };\n\n    instances.set(carousel, { destroy });\n    carousel.dataset.cwHeroMotion = motionAllowed() ? 'auto' : 'reduced';\n    setTrackPosition(trackPosition, false);\n    syncSlides();\n    syncPauseControl();\n    schedule();\n  };\n\n  const initWithin = (root) => {\n    elementsWithin(root, '[data-cw-hero-carousel]').forEach(initCarousel);\n  };\n\n  const destroyWithin = (root) => {\n    elementsWithin(root, '[data-cw-hero-carousel]').forEach((carousel) => instances.get(carousel)?.destroy());\n  };\n\n  initWithin(document);\n  document.addEventListener('shopify:section:load', (event) => initWithin(event.target));\n  document.addEventListener('shopify:section:unload', (event) => destroyWithin(event.target));\n})();\n\n(() => {\n  const initializedCards = new WeakSet();\n  const reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)');\n  const hoverCapable = window.matchMedia('(hover: hover) and (pointer: fine)');\n  const connection = navigator.connection || navigator.mozConnection || navigator.webkitConnection;\n  const storyObserver = 'IntersectionObserver' in window\n    ? new IntersectionObserver((entries) => {\n        entries.forEach((entry) => {\n          if (entry.isIntersecting) return;\n          entry.target.pause();\n          updateToggle(entry.target);\n        });\n      }, { threshold: 0.05 })\n    : null;\n\n  const elementsWithin = (root, selector) => {\n    const elements = root.querySelectorAll ? Array.from(root.querySelectorAll(selector)) : [];\n    if (root instanceof Element && root.matches(selector)) elements.unshift(root);\n    return elements;\n  };\n\n  const videos = () => Array.from(document.querySelectorAll('[data-cw-story-video]'));\n\n  const controlledVideo = (toggle) => {\n    const targetId = toggle.getAttribute('aria-controls') || '';\n    return targetId ? document.getElementById(targetId) : null;\n  };\n\n  const hydrate = (video) => {\n    if (video.dataset.cwStoryReady === 'true') return;\n    video.querySelectorAll('source[data-src]').forEach((source) => {\n      source.src = source.dataset.src;\n      source.removeAttribute('data-src');\n    });\n    video.dataset.cwStoryReady = 'true';\n    video.load();\n  };\n\n  const updateToggle = (video) => {\n    const playing = !video.paused && !video.ended;\n    const hoverPlaying = playing && video.dataset.cwStoryPlayOrigin === 'hover';\n    const card = video.closest('.cw-follow-card');\n    const toggles = card ? Array.from(card.querySelectorAll('[data-cw-story-toggle]')) : [];\n    video.classList.toggle('is-playing', playing);\n    if (card) {\n      card.classList.toggle('is-playing', playing);\n      card.classList.toggle('is-hover-playing', hoverPlaying);\n    }\n    toggles.forEach((toggle) => {\n      if (controlledVideo(toggle) !== video) return;\n      toggle.setAttribute('aria-pressed', String(playing));\n      toggle.classList.toggle('is-playing', playing);\n      const label = toggle.querySelector('[data-cw-story-toggle-label]');\n      if (label) label.textContent = playing ? 'Pause film' : 'Play film';\n    });\n    if (!playing) delete video.dataset.cwStoryPlayOrigin;\n  };\n\n  const pauseAll = (except = null) => {\n    videos().forEach((video) => {\n      if (video === except) return;\n      video.pause();\n      updateToggle(video);\n    });\n  };\n\n  const automaticHoverAllowed = () => {\n    const effectiveType = connection?.effectiveType || '';\n    return hoverCapable.matches && !reducedMotion.matches && !connection?.saveData && !/(^|-)2g$/i.test(effectiveType) && !document.hidden;\n  };\n\n  const playVideo = (video, origin) => {\n    hydrate(video);\n    pauseAll(video);\n    video.dataset.cwStoryPlayOrigin = origin;\n    const attempt = video.play();\n    if (attempt && typeof attempt.then === 'function') {\n      attempt.then(() => updateToggle(video)).catch(() => {\n        if (video.dataset.cwStoryPlayOrigin === origin) delete video.dataset.cwStoryPlayOrigin;\n        updateToggle(video);\n      });\n    }\n  };\n\n  const initCard = (card) => {\n    const video = card.querySelector('[data-cw-story-video]');\n    const toggle = card.querySelector('[data-cw-story-toggle]');\n    if (!video || !toggle || controlledVideo(toggle) !== video) return;\n    if (initializedCards.has(card)) {\n      storyObserver?.observe(video);\n      updateToggle(video);\n      return;\n    }\n\n    initializedCards.add(card);\n    video.muted = true;\n    video.addEventListener('play', () => updateToggle(video));\n    video.addEventListener('pause', () => updateToggle(video));\n    video.addEventListener('ended', () => updateToggle(video));\n    video.addEventListener('error', () => {\n      delete video.dataset.cwStoryPlayOrigin;\n      updateToggle(video);\n    });\n    toggle.addEventListener('click', () => {\n      if (video.paused || video.ended) {\n        playVideo(video, 'explicit');\n      } else {\n        video.pause();\n        updateToggle(video);\n      }\n    });\n\n    card.addEventListener('pointerenter', (event) => {\n      if (event.pointerType === 'touch' || !automaticHoverAllowed()) return;\n      playVideo(video, 'hover');\n    });\n    card.addEventListener('pointerleave', (event) => {\n      if (event.pointerType === 'touch' || !hoverCapable.matches) return;\n      video.pause();\n      updateToggle(video);\n    });\n\n    if (storyObserver) storyObserver.observe(video);\n    updateToggle(video);\n  };\n\n  const initWithin = (root) => elementsWithin(root, '.cw-follow-card').forEach(initCard);\n\n  const pauseAutomaticPlayback = () => {\n    videos().forEach((video) => {\n      if (video.dataset.cwStoryPlayOrigin !== 'hover') return;\n      video.pause();\n      updateToggle(video);\n    });\n  };\n\n  const addMediaListener = (query, listener) => {\n    if (typeof query.addEventListener === 'function') query.addEventListener('change', listener);\n    else if (typeof query.addListener === 'function') query.addListener(listener);\n  };\n\n  document.addEventListener('visibilitychange', () => {\n    if (document.hidden) pauseAll();\n  });\n  window.addEventListener('pagehide', () => pauseAll());\n  addMediaListener(reducedMotion, pauseAutomaticPlayback);\n  addMediaListener(hoverCapable, pauseAutomaticPlayback);\n  if (connection?.addEventListener) connection.addEventListener('change', pauseAutomaticPlayback);\n\n  initWithin(document);\n  document.addEventListener('shopify:section:load', (event) => initWithin(event.target));\n  document.addEventListener('shopify:section:unload', (event) => {\n    elementsWithin(event.target, '.cw-follow-card').forEach((card) => {\n      const video = card.querySelector('[data-cw-story-video]');\n      if (video) {\n        video.pause();\n        storyObserver?.unobserve(video);\n      }\n    });\n  });\n})();\n\n(() => {\n  const selector = '[data-cw-reveal]';\n  const reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)');\n  const initialized = new WeakSet();\n  let observer = null;\n  let revealFrame = 0;\n  let revealPulseTimer = 0;\n  let revealPulseStopTimer = 0;\n\n  const queryWithin = (root, targetSelector) => {\n    const elements = root.querySelectorAll ? Array.from(root.querySelectorAll(targetSelector)) : [];\n    if (root instanceof Element && root.matches(targetSelector)) elements.unshift(root);\n    return elements;\n  };\n\n  const markRevealTarget = (element, kind) => {\n    if (!element.hasAttribute('data-cw-reveal')) element.setAttribute('data-cw-reveal', '');\n    if (!element.hasAttribute('data-cw-reveal-kind')) element.setAttribute('data-cw-reveal-kind', kind);\n  };\n\n  const markRuntimeTargets = (root) => {\n    const targetGroups = [\n      ['.cw-mission__media', 'media'],\n      ['.cw-mission__copy', 'text'],\n      ['.cw-featured-works .cw-section-head', 'text'],\n      ['.cw-featured-works .cw-work-card', 'media'],\n      ['.cw-services .cw-section-head', 'text'],\n      ['.cw-services .cw-service-card', 'media'],\n      ['.cw-home-enquiry__art img', 'media']\n    ];\n\n    targetGroups.forEach(([targetSelector, kind]) => {\n      queryWithin(root, targetSelector).forEach((element) => markRevealTarget(element, kind));\n    });\n\n    queryWithin(root, '.cw-home-enquiry').forEach((section) => {\n      const namedTargets = Array.from(section.querySelectorAll('.cw-home-enquiry__copy, .cw-home-enquiry__form'));\n      if (namedTargets.length) {\n        namedTargets.forEach((element) => markRevealTarget(element, 'text'));\n        return;\n      }\n\n      const grid = section.querySelector('.cw-home-enquiry__grid');\n      if (!grid) return;\n      Array.from(grid.children)\n        .filter((element) => element.matches('div, form'))\n        .forEach((element) => markRevealTarget(element, 'text'));\n    });\n  };\n\n  const elementsWithin = (root) => queryWithin(root, selector);\n\n  const reveal = (element) => {\n    element.classList.remove('is-reveal-pending');\n    element.classList.add('is-cw-revealed');\n    observer?.unobserve(element);\n  };\n\n  const revealPassedTargets = () => {\n    if (!observer || reducedMotion.matches) return;\n    const revealBoundary = Math.max(0, window.innerHeight * 0.9);\n    elementsWithin(document).forEach((element) => {\n      if (!element.classList.contains('is-reveal-pending')) return;\n      if (element.getBoundingClientRect().top <= revealBoundary) reveal(element);\n    });\n  };\n\n  const runRevealFrame = () => {\n    revealFrame = 0;\n    revealPassedTargets();\n  };\n\n  const scheduleRevealCheck = () => {\n    if (revealFrame) return;\n    revealFrame = window.requestAnimationFrame(runRevealFrame);\n  };\n\n  const stopRevealPulse = () => {\n    if (revealPulseTimer) window.clearInterval(revealPulseTimer);\n    if (revealPulseStopTimer) window.clearTimeout(revealPulseStopTimer);\n    revealPulseTimer = 0;\n    revealPulseStopTimer = 0;\n    revealPassedTargets();\n  };\n\n  const scheduleSustainedRevealCheck = () => {\n    if (!observer || reducedMotion.matches) return;\n    scheduleRevealCheck();\n    if (!revealPulseTimer) {\n      revealPulseTimer = window.setInterval(revealPassedTargets, 180);\n    }\n    if (revealPulseStopTimer) window.clearTimeout(revealPulseStopTimer);\n    revealPulseStopTimer = window.setTimeout(stopRevealPulse, 1800);\n  };\n\n  const ensureObserver = () => {\n    if (observer || reducedMotion.matches || !('IntersectionObserver' in window)) return observer;\n    observer = new IntersectionObserver((entries) => {\n      entries.forEach((entry) => {\n        const passedViewport = Boolean(entry.rootBounds)\n          && entry.boundingClientRect.top <= entry.rootBounds.bottom;\n        if (!entry.isIntersecting && !passedViewport) return;\n        reveal(entry.target);\n      });\n    }, { rootMargin: '0px 0px -10% 0px', threshold: 0.12 });\n    return observer;\n  };\n\n  const initWithin = (root) => {\n    markRuntimeTargets(root);\n    const elements = elementsWithin(root);\n    const activeObserver = ensureObserver();\n    if (!activeObserver) {\n      document.documentElement.classList.remove('cw-reveal-ready');\n      elements.forEach((element) => {\n        initialized.add(element);\n        reveal(element);\n      });\n      return;\n    }\n\n    elements.forEach((element) => {\n      if (initialized.has(element)) return;\n      initialized.add(element);\n      if (element.classList.contains('is-cw-revealed')) return;\n      element.classList.add('is-reveal-pending');\n      activeObserver.observe(element);\n    });\n    document.documentElement.classList.add('cw-reveal-ready');\n    scheduleRevealCheck();\n  };\n\n  const configureMotion = () => {\n    if (reducedMotion.matches || !('IntersectionObserver' in window)) {\n      stopRevealPulse();\n      observer?.disconnect();\n      observer = null;\n      document.documentElement.classList.remove('cw-reveal-ready');\n      elementsWithin(document).forEach(reveal);\n      return;\n    }\n    initWithin(document);\n  };\n\n  window.addEventListener('scroll', scheduleSustainedRevealCheck, { passive: true });\n  window.addEventListener('resize', scheduleSustainedRevealCheck, { passive: true });\n  window.addEventListener('scrollend', stopRevealPulse, { passive: true });\n  window.addEventListener('pagehide', stopRevealPulse);\n  initWithin(document);\n  if (typeof reducedMotion.addEventListener === 'function') reducedMotion.addEventListener('change', configureMotion);\n  else if (typeof reducedMotion.addListener === 'function') reducedMotion.addListener(configureMotion);\n  document.addEventListener('shopify:section:load', (event) => initWithin(event.target));\n  document.addEventListener('shopify:section:unload', (event) => {\n    elementsWithin(event.target).forEach((element) => {\n      observer?.unobserve(element);\n      initialized.delete(element);\n      element.classList.remove('is-reveal-pending');\n    });\n  });\n})();\n\n(() => {\n  const form = document.querySelector('[data-cw-work-filters]');\n  const grid = document.querySelector('[data-cw-work-grid]');\n  if (!form || !grid) return;\n\n  const cards = Array.from(grid.querySelectorAll('[data-cw-work-card]'));\n  const status = form.querySelector('[data-cw-filter-status]');\n  const empty = document.querySelector('[data-cw-filter-empty]');\n  const more = document.querySelector('[data-cw-work-more]');\n  const tools = document.querySelector('[data-cw-work-tools]');\n  const compactQuery = window.matchMedia('(max-width: 639px)');\n  const normalize = (value) => String(value || '').trim().toLocaleLowerCase();\n  let mobileExpanded = false;\n  const collectionSelect = form.elements.namedItem('work-collection');\n  const collectionNames = { 'the-origin': 'The Origin \u00B7 \u6E90\u00B7\u9752\u82B1', 'bloom-bond': 'Bloom & Bond \u00B7 \u82B1\u610F\u53CC\u751F', 'landscape-presence': 'Landscape Presence \u00B7 \u5C71\u6CB3\u5165\u5883', 'the-gilded-court': 'The Gilded Court \u00B7 \u91D1\u8F89\u6BBF\u5802', 'symbolic-creatures': 'Symbolic Creatures \u00B7 \u745E\u517D\u7075\u8C61' };\n  const readCollection = () => {\n    const params = new URLSearchParams(window.location.search);\n    const name = params.getAll('collection').length === 1 ? collectionNames[params.get('collection')] : '';\n    if (collectionSelect) collectionSelect.value = typeof name === 'string' ? name : '';\n  };\n  const writeCollection = () => {\n    const url = new URL(window.location.href);\n    const slug = Object.keys(collectionNames).find(key => collectionNames[key] === collectionSelect?.value);\n    url.searchParams.delete('collection');\n    if (slug) url.searchParams.set('collection', slug);\n    window.history.replaceState(null, '', url);\n  };\n  readCollection();\n\n\n  const syncTools = () => {\n    if (!tools) return;\n    if (compactQuery.matches) tools.removeAttribute('open');\n    else tools.setAttribute('open', '');\n  };\n\n  const applyFilters = () => {\n    const data = new FormData(form);\n    const search = normalize(data.get('work-search'));\n    const collection = String(data.get('work-collection') || '');\n    const category = String(data.get('work-category') || '');\n    const price = String(data.get('work-price') || '');\n    const sort = String(data.get('work-sort') || 'curated');\n\n    const matches = new Map();\n    cards.forEach((card) => {\n      const value = Number(card.dataset.cwPriceValue || 0);\n      const priceMatch =\n        !price ||\n        (price === 'under-1500' && value > 0 && value < 1500) ||\n        (price === '1500-3000' && value >= 1500 && value <= 3000) ||\n        (price === 'over-3000' && value > 3000) ||\n        (price === 'request' && card.dataset.cwPrice === 'request');\n      const visible =\n        (!search || normalize(card.dataset.cwTitle).includes(search)) &&\n        (!collection || card.dataset.cwCollection === collection) &&\n        (!category || card.dataset.cwCategory === category) &&\n        priceMatch;\n      matches.set(card, visible);\n    });\n\n    const sorted = [...cards].sort((a, b) => {\n      const priceA = Number(a.dataset.cwPriceValue || 0);\n      const priceB = Number(b.dataset.cwPriceValue || 0);\n      const titleA = normalize(a.dataset.cwTitle);\n      const titleB = normalize(b.dataset.cwTitle);\n      if (sort === 'price-asc') return (priceA || Number.MAX_SAFE_INTEGER) - (priceB || Number.MAX_SAFE_INTEGER);\n      if (sort === 'price-desc') return priceB - priceA;\n      if (sort === 'title-asc') return titleA.localeCompare(titleB);\n      if (sort === 'title-desc') return titleB.localeCompare(titleA);\n      return Number(a.dataset.cwCuratedIndex || 999) - Number(b.dataset.cwCuratedIndex || 999);\n    });\n    sorted.forEach((card) => grid.appendChild(card));\n\n    const matched = sorted.filter((card) => matches.get(card));\n    const hasActiveFilter = Boolean(search || collection || category || price || sort !== 'curated');\n    const isLimited = compactQuery.matches && !hasActiveFilter && !mobileExpanded && matched.length > 8;\n    matched.forEach((card, index) => {\n      card.hidden = isLimited && index >= 8;\n    });\n    cards.filter((card) => !matches.get(card)).forEach((card) => {\n      card.hidden = true;\n    });\n\n    grid.classList.toggle('is-curated-order', sort === 'curated');\n    if (more) {\n      more.hidden = !(compactQuery.matches && !hasActiveFilter && matched.length > 8);\n      more.setAttribute('aria-expanded', String(mobileExpanded));\n      more.textContent = mobileExpanded ? 'Show fewer works' : 'View more works';\n    }\n    if (status) {\n      if (isLimited) status.textContent = `Showing 8 of ${matched.length} works.`;\n      else status.textContent = matched.length === cards.length ? 'All works are shown.' : `${matched.length} ${matched.length === 1 ? 'work' : 'works'} shown.`;\n    }\n    const active = document.querySelector('[data-cw-active-collection]');\n    if (active) { active.hidden = !collection; active.textContent = collection ? `Collection: ${collection}` : ''; }\n    if (empty) empty.hidden = matched.length !== 0;\n  };\n\n  form.addEventListener('input', applyFilters);\n  form.addEventListener('change', () => { writeCollection(); applyFilters(); });\n  window.addEventListener('popstate', () => { readCollection(); applyFilters(); });\n  form.addEventListener('submit', (event) => {\n    event.preventDefault();\n    applyFilters();\n  });\n  form.addEventListener('reset', () => {\n    mobileExpanded = false;\n    window.requestAnimationFrame(() => { writeCollection(); applyFilters(); });\n  });\n  if (more) {\n    more.addEventListener('click', () => {\n      mobileExpanded = !mobileExpanded;\n      applyFilters();\n    });\n  }\n  compactQuery.addEventListener('change', () => {\n    mobileExpanded = false;\n    syncTools();\n    applyFilters();\n  });\n  syncTools();\n  applyFilters();\n})();\n\n(() => {\n  const api = window.CwShortlist;\n  if (!api) return;\n  const buttons = [...document.querySelectorAll('[data-cw-shortlist-toggle]')];\n  const panel = document.querySelector('[data-cw-shortlist-panel]');\n  if (!buttons.length && !panel) return;\n  const storageKey = 'crafted-wonders-shortlist-v1';\n  const limit = 12;\n  const labels = api.labels;\n  const resolveButton = button => api.fromItem({ sku:button.dataset.cwSku, url:button.dataset.cwPieceUrl });\n  const canonicalize = values => {\n    const seen = new Set();\n    return (Array.isArray(values) ? values : []).map(api.fromItem).filter(item => {\n      if (!item || seen.has(item.key)) return false;\n      seen.add(item.key);return true;\n    }).slice(0,limit).map(item => ({...item}));\n  };\n  let items = [];\n  try { items = canonicalize(JSON.parse(localStorage.getItem(storageKey) || '[]')); } catch (_) {}\n  const feedback = (message, button) => {\n    document.querySelectorAll('[data-cw-shortlist-status],[data-cw-product-action-status]').forEach(el=>el.textContent=message);\n    if (!button) return;\n    let status = button.nextElementSibling;\n    if (!status?.hasAttribute('data-cw-shortlist-feedback')) {\n      status=document.createElement('p');status.setAttribute('data-cw-shortlist-feedback','');status.setAttribute('role','status');status.setAttribute('aria-live','polite');status.className='cw-shortlist-feedback';\n      button.after(status);\n    }\n    status.replaceChildren(document.createTextNode(message+' '));\n    if (items.length) {const link=document.createElement('a');link.href='/collections/works#shortlist';link.textContent=labels.view;status.append(link);}\n  };\n  const persist = next => {\n    try { localStorage.setItem(storageKey,JSON.stringify(next));items=next;return true; } catch (_) { return false; }\n  };\n  const params = new URLSearchParams(location.search);\n  if (panel && params.has('shortlist')) {\n    const raw=params.get('shortlist') || '';\n    const tokens=raw.split(',');\n    if (params.getAll('shortlist').length===1 && raw.length<=512 && tokens.length<=limit) {\n      const imported=canonicalize(tokens.map(key=>({key})));\n      if (imported.length) {if(!persist(imported))items=imported;}\n    }\n  }\n  const previewParams = url => {\n    const preview=params.get('preview_theme_id');\n    if (/^\\d+$/.test(preview || '')) url.searchParams.set('preview_theme_id',preview);\n    return url;\n  };\n  const render = () => {\n    const keys=new Set(items.map(item=>item.key));\n    for(const button of buttons){\n      const item=resolveButton(button);const saved=!!item&&keys.has(item.key);\n      button.setAttribute('aria-pressed',String(saved));button.textContent=saved?labels.saved:labels.save;\n      button.setAttribute('aria-label',(saved?labels.removeLabel:labels.saveLabel).replace('{title}',item?.title||button.dataset.cwPieceTitle||labels.thisWork));\n    }\n    if(!panel)return;\n    panel.hidden=!items.length;\n    const list=panel.querySelector('[data-cw-shortlist-items]');\n    if(list){list.replaceChildren();for(const item of items){const li=document.createElement('li');const text=item.title+(item.sku?` (${item.sku})`:'');if(item.url){const a=document.createElement('a');a.href=previewParams(new URL(item.url,location.origin)).toString();a.textContent=text;li.append(a);}else li.textContent=text;list.append(li);}}\n    const enquiry=panel.querySelector('[data-cw-shortlist-enquire]');\n    if(enquiry){enquiry.href=previewParams(new URL(buildShortlistEnquiryUrl(panel.dataset.cwContactUrl,items.map(x=>x.key),location.origin))).toString();}\n    const email=panel.querySelector('[data-cw-shortlist-email]');\n    if(email){email.href=`mailto:${panel.dataset.contactEmail||'contact@craftedwondersart.com'}?subject=${encodeURIComponent('Crafted Wonders shortlist enquiry')}&body=${encodeURIComponent(items.map(x=>`${x.title}${x.sku?' ('+x.sku+')':''} \u2014 ${x.url}`).join('\\n'))}`;}\n  };\n  for(const button of buttons)button.addEventListener('click',()=>{\n    const item=resolveButton(button);\n    if(!item){feedback(labels.unavailable,button);return;}\n    const saved=items.some(x=>x.key===item.key);\n    if(!saved&&items.length>=limit){feedback(labels.limit,button);return;}\n    const next=saved?items.filter(x=>x.key!==item.key):[...items,{...item}];\n    if(!persist(next)){feedback(labels.storageError,button);return;}\n    render();feedback((saved?labels.removed:labels.added).replace('{title}',item.title),button);\n  });\n  const copyText=async(value,button)=>{\n    try{await navigator.clipboard.writeText(value);return true;}catch(_){}\n    const input=document.createElement('textarea');input.value=value;input.readOnly=true;input.style.cssText='position:fixed;left:-9999px';document.body.append(input);input.select();let copied=false;\n    try{copied=document.execCommand('copy');}catch(_){}finally{input.remove();button.focus({preventScroll:true});}return copied;\n  };\n  panel?.querySelector('[data-cw-shortlist-copy]')?.addEventListener('click',async event=>{\n    if(!items.length)return;\n    const url=previewParams(new URL('/collections/works',location.origin));url.searchParams.set('shortlist',items.map(x=>x.key).join(','));url.hash='shortlist';\n    const copied=await copyText(url.toString(),event.currentTarget);feedback(copied?labels.copied:labels.copyError,event.currentTarget);\n  });\n  panel?.querySelector('[data-cw-shortlist-clear]')?.addEventListener('click',event=>{\n    if(!persist([])){feedback(labels.storageError,event.currentTarget);return;}\n    render();document.querySelectorAll('[data-cw-shortlist-feedback]').forEach(el=>el.remove());feedback(labels.cleared,buttons.find(b=>b.getClientRects().length));\n  });\n  window.addEventListener('storage',event=>{if(event.key!==storageKey)return;try{items=canonicalize(JSON.parse(event.newValue||'[]'));render();}catch(_){}});\n  const reveal=()=>{if(panel&&!panel.hidden&&location.hash==='#shortlist'){panel.scrollIntoView({block:'start'});panel.querySelector('h2[tabindex=\"-1\"]')?.focus({preventScroll:true});}};\n  render();requestAnimationFrame(reveal);window.addEventListener('hashchange',reveal);\n})();\n\n\n(() => {\n  const buttons = Array.from(document.querySelectorAll('[data-cw-share]'));\n  if (!buttons.length) return;\n  const status = document.querySelector('[data-cw-product-action-status]');\n\n  buttons.forEach((button) => {\n    button.addEventListener('click', async () => {\n      const title = button.dataset.shareTitle || document.title;\n      const url = button.dataset.shareUrl || window.location.href;\n      try {\n        if (navigator.share) {\n          await navigator.share({ title, url });\n          if (status) status.textContent = 'Shared.';\n          return;\n        }\n        await navigator.clipboard.writeText(url);\n        if (status) status.textContent = 'Page link copied.';\n      } catch (error) {\n        if (error && error.name === 'AbortError') return;\n        if (status) status.textContent = 'Use the browser address bar to copy this page link.';\n      }\n    });\n  });\n})();\n\n(() => {\n  const dialog = document.querySelector('[data-cw-image-viewer]');\n  const triggers = Array.from(document.querySelectorAll('[data-cw-image-viewer-trigger]'));\n  if (!dialog || !triggers.length) return;\n\n  const image = dialog.querySelector('[data-cw-image-viewer-image]');\n  const caption = dialog.querySelector('[data-cw-image-viewer-caption]');\n  const surface = dialog.querySelector('[data-cw-image-viewer-surface]');\n  const figure = dialog.querySelector('[data-cw-image-viewer-figure]');\n  const closeButton = dialog.querySelector('[data-cw-image-viewer-close]');\n  const previousButton = dialog.querySelector('[data-cw-image-viewer-previous]');\n  const nextButton = dialog.querySelector('[data-cw-image-viewer-next]');\n  const focusableSelector = 'button:not([disabled]):not([hidden]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n  if (!image || !caption || !surface || !figure || !closeButton || !previousButton || !nextButton) return;\n\n  let activeIndex = 0;\n  let returnFocus = null;\n\n  const normalizeIndex = (index) => (index + triggers.length) % triggers.length;\n\n  const renderImage = (index) => {\n    activeIndex = normalizeIndex(index);\n    const trigger = triggers[activeIndex];\n    const source = trigger.dataset.cwImageSrc || '';\n    const alt = trigger.dataset.cwImageAlt || '';\n    if (!source) return false;\n    image.src = source;\n    image.alt = alt;\n    caption.textContent = alt;\n    dialog.dataset.cwImageIndex = String(activeIndex);\n    return true;\n  };\n\n  const releaseViewer = () => {\n    document.documentElement.classList.remove('cw-image-viewer-open');\n    document.body.classList.remove('cw-image-viewer-open');\n    image.removeAttribute('src');\n    image.alt = '';\n    caption.textContent = '';\n    delete dialog.dataset.cwImageIndex;\n    const focusTarget = returnFocus;\n    returnFocus = null;\n    if (focusTarget?.isConnected) {\n      window.requestAnimationFrame(() => focusTarget.focus({ preventScroll: true }));\n    }\n  };\n\n  const closeViewer = () => {\n    if (dialog.open && typeof dialog.close === 'function') dialog.close();\n    else {\n      dialog.removeAttribute('open');\n      releaseViewer();\n    }\n  };\n\n  const openViewer = (trigger, index) => {\n    returnFocus = trigger;\n    if (!renderImage(index)) return;\n    document.documentElement.classList.add('cw-image-viewer-open');\n    document.body.classList.add('cw-image-viewer-open');\n    if (typeof dialog.showModal === 'function') dialog.showModal();\n    else dialog.setAttribute('open', '');\n    closeButton.focus({ preventScroll: true });\n  };\n\n  triggers.forEach((trigger, index) => {\n    trigger.addEventListener('click', () => openViewer(trigger, index));\n  });\n\n  const hasMultipleImages = triggers.length > 1;\n  previousButton.hidden = !hasMultipleImages;\n  nextButton.hidden = !hasMultipleImages;\n  previousButton.addEventListener('click', () => renderImage(activeIndex - 1));\n  nextButton.addEventListener('click', () => renderImage(activeIndex + 1));\n  closeButton.addEventListener('click', closeViewer);\n\n  dialog.addEventListener('click', (event) => {\n    if (event.target === dialog || event.target === surface || event.target === figure) closeViewer();\n  });\n\n  dialog.addEventListener('cancel', (event) => {\n    event.preventDefault();\n    closeViewer();\n  });\n\n  dialog.addEventListener('close', releaseViewer);\n\n  dialog.addEventListener('keydown', (event) => {\n    if (event.key === 'ArrowLeft') {\n      event.preventDefault();\n      renderImage(activeIndex - 1);\n      return;\n    }\n    if (event.key === 'ArrowRight') {\n      event.preventDefault();\n      renderImage(activeIndex + 1);\n      return;\n    }\n    if (event.key !== 'Tab') return;\n\n    const focusable = Array.from(dialog.querySelectorAll(focusableSelector)).filter((element) => element.getClientRects().length > 0);\n    if (!focusable.length) return;\n    const first = focusable[0];\n    const last = focusable[focusable.length - 1];\n    if (event.shiftKey && document.activeElement === first) {\n      event.preventDefault();\n      last.focus();\n    } else if (!event.shiftKey && document.activeElement === last) {\n      event.preventDefault();\n      first.focus();\n    } else if (!focusable.includes(document.activeElement)) {\n      event.preventDefault();\n      first.focus();\n    }\n  });\n})();\n\n(() => {\n  const controls = Array.from(document.querySelectorAll('.cw-rail-controls'));\n  if (!controls.length) return;\n\n  controls.forEach((control) => {\n    const previous = control.querySelector('[data-cw-rail-prev]');\n    const next = control.querySelector('[data-cw-rail-next]');\n    const targetId = (previous || next)?.getAttribute('aria-controls');\n    const rail = targetId ? document.getElementById(targetId) : null;\n    if (!rail) return;\n\n    const move = (direction) => {\n      const firstCard = rail.firstElementChild;\n      const step = firstCard ? firstCard.getBoundingClientRect().width + 16 : rail.clientWidth * 0.82;\n      rail.scrollBy({ left: direction * step, behavior: 'smooth' });\n    };\n\n    if (previous) previous.addEventListener('click', () => move(-1));\n    if (next) next.addEventListener('click', () => move(1));\n  });\n})();\n\n(() => {\n  const article = document.querySelector('[data-cw-article-handle]');\n  const body = article?.querySelector('.cw-article__body');\n  if (!article || !body) return;\n\n  const handle = article.dataset.cwArticleHandle;\n  const knownHandles = new Set([\n    'at-working-distance',\n    'three-distances-for-seeing-a-piece',\n    'motif-notes',\n    'clay-and-kiln-in-two-printed-leaves',\n    'jingdezhen-handicraft-porcelain-industry-sites'\n  ]);\n\n  article.querySelectorAll('a[href]').forEach((link) => {\n    const href = link.getAttribute('href')?.trim() || '';\n    if (!/^https?:\\/\\//i.test(href)) return;\n    const rel = new Set((link.getAttribute('rel') || '').split(/\\s+/).filter(Boolean));\n    rel.add('noopener');\n    link.setAttribute('target', '_blank');\n    link.setAttribute('rel', Array.from(rel).join(' '));\n  });\n\n  if (!knownHandles.has(handle) || body.classList.contains('is-enhanced')) return;\n\n  const normalizeText = (value) => String(value || '').replace(/\\s+/g, ' ').trim();\n  const directChildren = () => Array.from(body.children);\n  const matches = (node, specification) => {\n    if (!node || node.parentElement !== body || node.tagName.toLowerCase() !== specification.tag) return false;\n    if (specification.figureId && node.dataset.cwFigureId !== specification.figureId) return false;\n    if (Object.hasOwn(specification, 'text') && normalizeText(node.textContent) !== specification.text) return false;\n    return true;\n  };\n  const findRun = (specifications) => {\n    const firstMatches = directChildren().filter((node) => matches(node, specifications[0]));\n    if (firstMatches.length !== 1) return null;\n    const nodes = [firstMatches[0]];\n    for (let index = 1; index < specifications.length; index += 1) {\n      const candidate = nodes[index - 1].nextElementSibling;\n      if (!matches(candidate, specifications[index])) return null;\n      nodes.push(candidate);\n    }\n    return nodes;\n  };\n  const textNode = (tag, text) => ({ tag, text });\n  const figureNode = (figureId) => ({ tag: 'figure', figureId });\n\n  const nextBlocks = {\n    'at-working-distance': ['Return to the object', 'See where line and colour settle on the finished form.'],\n    'three-distances-for-seeing-a-piece': ['Continue with the work', 'Turn the vase through its room, form and detail views.'],\n    'motif-notes': ['Continue looking', 'Follow colour, form and motif through the collection.'],\n    'clay-and-kiln-in-two-printed-leaves': ['Continue looking', 'See today\u2019s workshop at working distance.'],\n    'jingdezhen-handicraft-porcelain-industry-sites': ['Continue looking', 'See the hand, kiln and surface at working distance.']\n  };\n  const sourceHeadings = {\n    'at-working-distance': 'Film note',\n    'motif-notes': 'Image and attribution note',\n    'clay-and-kiln-in-two-printed-leaves': 'Source and image note',\n    'jingdezhen-handicraft-porcelain-industry-sites': 'Further reading'\n  };\n\n  const expectedNext = nextBlocks[handle];\n  const nextRun = expectedNext\n    ? findRun([textNode('p', expectedNext[0]), textNode('h2', expectedNext[1])])\n    : null;\n  if (expectedNext && !nextRun) return;\n\n  const expectedSourceHeading = sourceHeadings[handle];\n  const sourceRun = expectedSourceHeading\n    ? findRun([textNode('h2', expectedSourceHeading), { tag: 'p' }])\n    : null;\n  if (expectedSourceHeading && !sourceRun) return;\n\n  let featureRuns = [];\n  let motifRuns = [];\n  let archiveRun = null;\n  let inlineHero = null;\n\n  if (handle === 'at-working-distance') {\n    const features = [\n      ['001', '01 \u00B7 At the rim', 'A line that has to travel', 'One hand steadies the form while the brush follows the rim. The mark stays narrow even as the surface turns away from the eye.'],\n      ['002', '02 \u00B7 Broad curve', 'Across a broad curve', 'The hand reaches across a larger body. A line that looks short from the front continues beyond the visible side.'],\n      ['003', '03 \u00B7 Small form', 'A smaller turn', 'On a smaller body, the surface turns back quickly. Repeated marks gather into a tighter rhythm around the curve.'],\n      ['004', '04 \u00B7 Colour field', 'Colour beside the line', 'A fine brush moves through a dense blue-green field. Colour, white ground and narrow lines remain distinct at this distance.']\n    ];\n    featureRuns = features.map(([number, kicker, heading, copy]) =>\n      findRun([\n        figureNode(`at-working-distance-figure-${number}`),\n        textNode('p', kicker),\n        textNode('h2', heading),\n        textNode('p', copy)\n      ])\n    );\n    if (featureRuns.some((run) => !run)) return;\n  }\n\n  if (handle === 'three-distances-for-seeing-a-piece') {\n    const features = [\n      ['001', '01', 'Across the room', 'From farther back, the rounded body and narrow neck arrive before the painted scene. The silhouette carries the first impression.'],\n      ['002', '02', 'The whole form', 'Closer in, the landscape begins to circle the body. Architecture, distant hills and water share the same curved field.'],\n      ['003', '03', 'Up close', 'At the nearest view, small shifts in line and density take over. The curve edits the scene, revealing one passage while carrying another out of sight.']\n    ];\n    featureRuns = features.map(([number, kicker, heading, copy]) =>\n      findRun([\n        figureNode(`three-distances-for-seeing-a-piece-figure-${number}`),\n        textNode('p', kicker),\n        textNode('h2', heading),\n        textNode('p', copy)\n      ])\n    );\n    if (featureRuns.some((run) => !run)) return;\n  }\n\n  if (handle === 'motif-notes') {\n    const motifs = [\n      ['001', '002', '01 \u00B7 Motif Note', 'Butterfly', 'Placed beside one another, spacing and direction come forward before any fixed reading of the motif.'],\n      ['003', '004', '02 \u00B7 Motif Note', 'Deer', 'The first image centres one animal. The second lets many figures move through a continuous landscape.'],\n      ['005', '006', '03 \u00B7 Motif Note', 'Lily', 'The porcelain keeps the flowers close to a small curved form; the screen lets them rise through a much wider field.']\n    ];\n    motifRuns = motifs.map(([workNumber, referenceNumber, kicker, heading, copy]) =>\n      findRun([\n        textNode('p', kicker),\n        textNode('h2', heading),\n        textNode('p', copy),\n        figureNode(`motif-notes-figure-${workNumber}`),\n        figureNode(`motif-notes-figure-${referenceNumber}`)\n      ])\n    );\n    if (motifRuns.some((run) => !run)) return;\n  }\n\n  if (handle === 'clay-and-kiln-in-two-printed-leaves') {\n    archiveRun = findRun([\n      figureNode('clay-and-kiln-in-two-printed-leaves-figure-001'),\n      figureNode('clay-and-kiln-in-two-printed-leaves-figure-002')\n    ]);\n    if (!archiveRun) return;\n  }\n\n  if (handle === 'jingdezhen-handicraft-porcelain-industry-sites') {\n    const inlineHeroRun = findRun([figureNode('jingdezhen-handicraft-porcelain-industry-sites-figure-001')]);\n    if (!inlineHeroRun) return;\n    [inlineHero] = inlineHeroRun;\n  }\n\n  const allMovableNodes = [...featureRuns.flat(), ...motifRuns.flat(), ...(archiveRun || []), ...(nextRun || []), ...(sourceRun || [])];\n  if (new Set(allMovableNodes).size !== allMovableNodes.length) return;\n\n  const wrapFeature = (nodes, type, index) => {\n    const [figure, kicker, heading, copy] = nodes;\n    const section = document.createElement('section');\n    const copyPanel = document.createElement('div');\n    const headingId = heading.id || `${handle}-${type}-${index + 1}-title`;\n    section.className = `cw-article-feature cw-article-feature--${type}`;\n    section.setAttribute('aria-labelledby', headingId);\n    heading.id = headingId;\n    kicker.classList.add('cw-kicker');\n    copyPanel.className = 'cw-article-feature__copy';\n    body.insertBefore(section, figure);\n    section.appendChild(figure);\n    copyPanel.append(kicker, heading, copy);\n    section.appendChild(copyPanel);\n  };\n\n  if (handle === 'at-working-distance') {\n    featureRuns.forEach((run, index) => wrapFeature(run, 'working', index));\n  } else if (handle === 'three-distances-for-seeing-a-piece') {\n    featureRuns.forEach((run, index) => wrapFeature(run, 'distance', index));\n  } else if (handle === 'motif-notes') {\n    motifRuns.forEach((nodes, index) => {\n      const [kicker, heading, copy, workFigure, referenceFigure] = nodes;\n      const motif = document.createElement('article');\n      const copyPanel = document.createElement('div');\n      const media = document.createElement('div');\n      const headingId = heading.id || `${handle}-motif-${index + 1}-title`;\n      motif.className = 'cw-motif-note';\n      motif.setAttribute('aria-labelledby', headingId);\n      heading.id = headingId;\n      kicker.classList.add('cw-kicker');\n      copyPanel.className = 'cw-motif-note__copy';\n      media.className = 'cw-motif-note__media';\n      body.insertBefore(motif, kicker);\n      copyPanel.append(kicker, heading, copy);\n      media.append(workFigure, referenceFigure);\n      motif.append(copyPanel, media);\n    });\n  } else if (archiveRun) {\n    const archivePair = document.createElement('div');\n    archivePair.className = 'cw-article-archive-pair';\n    body.insertBefore(archivePair, archiveRun[0]);\n    archivePair.append(...archiveRun);\n  } else if (inlineHero) {\n    inlineHero.classList.add('cw-article-inline-hero');\n    inlineHero.setAttribute('data-cw-inline-hero', '');\n  }\n\n  if (nextRun) {\n    const [kicker, heading] = nextRun;\n    const next = document.createElement('aside');\n    const headingId = heading.id || `${handle}-next-title`;\n    next.className = 'cw-article-next';\n    next.setAttribute('aria-labelledby', headingId);\n    heading.id = headingId;\n    kicker.classList.add('cw-kicker');\n    body.insertBefore(next, kicker);\n    next.append(kicker, heading);\n  }\n\n  if (sourceRun) {\n    const [heading, copy] = sourceRun;\n    const sources = document.createElement('section');\n    const headingId = heading.id || `${handle}-sources-title`;\n    sources.className = 'cw-article-sources';\n    sources.setAttribute('aria-labelledby', headingId);\n    heading.id = headingId;\n    body.insertBefore(sources, heading);\n    sources.append(heading, copy);\n  }\n\n  body.classList.add('is-enhanced');\n})();\n\n/* Shopify Cookie Banner API: https://shopify.dev/docs/api/customer-privacy#showing-the-preferences-modal */\n(() => {\n  const bound = new WeakSet();\n  const available = () => typeof window.privacyBanner?.showPreferences === 'function';\n\n  const syncControls = () => {\n    document.querySelectorAll('[data-cw-cookie-preferences]').forEach((button) => {\n      button.hidden = !available();\n      if (bound.has(button)) return;\n      bound.add(button);\n      button.addEventListener('click', async () => {\n        if (button.disabled) return;\n        if (!available()) {\n          button.hidden = true;\n          return;\n        }\n        button.disabled = true;\n        try {\n          await window.privacyBanner.showPreferences();\n        } catch {\n          button.hidden = true;\n        } finally {\n          button.disabled = false;\n        }\n      });\n    });\n  };\n\n  syncControls();\n  document.addEventListener('DOMContentLoaded', syncControls, { once: true });\n  document.addEventListener('shopify:section:load', syncControls);\n  document.addEventListener('visitorConsentCollected', syncControls);\n  window.addEventListener('load', syncControls, { once: true });\n  document.addEventListener('load', (event) => {\n    if (event.target?.tagName === 'SCRIPT' && /\\/privacy-banner\\/storefront-banner\\.js(?:\\?|$)/.test(event.target.src)) {\n      syncControls();\n    }\n  }, true);\n})();\n\n/* Product gallery 2.6.3 / 20260908-product-02 */\n(() => {\n  const enhance = () => document.querySelectorAll('[data-cw-product-version=\"2.6.3\"]').forEach(product => {\n    const gallery = product.querySelector('.cw-product__gallery');\n    if (!gallery || gallery.dataset.cwGalleryReady) return;\n    const figures = [...gallery.querySelectorAll('.cw-product__media')];\n    const triggers = figures.map(figure => figure.querySelector('[data-cw-image-viewer-trigger]'));\n    if (!figures.length || triggers.some(trigger => !trigger)) return;\n    const rail = document.createElement('div');\n    rail.className = 'cw-product-thumbnails';\n    rail.setAttribute('role', 'group');\n    rail.setAttribute('aria-label', 'Choose a view');\n    const caption = document.createElement('p');\n    caption.className = 'cw-product-gallery-caption';\n    caption.setAttribute('aria-live', 'polite');\n    const select = index => {\n      figures.forEach((figure, i) => { figure.hidden = i !== index; });\n      [...rail.children].forEach((button, i) => button.setAttribute('aria-pressed', String(i === index)));\n      caption.textContent = triggers[index].dataset.cwImageAlt;\n    };\n    triggers.forEach((trigger, index) => {\n      const button = document.createElement('button');\n      button.type = 'button';\n      button.setAttribute('aria-label', `Show view ${index + 1}: ${trigger.dataset.cwImageAlt}`);\n      const source = trigger.querySelector('img');\n      const image = source.cloneNode();\n      image.alt = '';\n      image.loading = 'lazy';\n      image.removeAttribute('fetchpriority');\n      image.sizes = '70px';\n      button.append(image);\n      button.addEventListener('click', () => select(index));\n      button.addEventListener('keydown', event => {\n        if (!['ArrowLeft', 'ArrowRight', 'Home', 'End'].includes(event.key)) return;\n        event.preventDefault();\n        const next = event.key === 'Home' ? 0 : event.key === 'End' ? triggers.length - 1 : (index + (event.key === 'ArrowRight' ? 1 : -1) + triggers.length) % triggers.length;\n        select(next);\n        rail.children[next].focus();\n      });\n      rail.append(button);\n    });\n    gallery.append(rail, caption);\n    gallery.dataset.cwGalleryReady = 'true';\n    select(0);\n  });\n  enhance();\n  document.addEventListener('shopify:section:load', enhance);\n})();\n\n(() => {\n  const bound = new WeakSet();\n  const bind = () => document.querySelectorAll('[data-cw-product]').forEach(product => {\n    const dialog=product.querySelector('[data-cw-image-viewer]');\n    if(!dialog)return;\n    const triggers=[...product.querySelectorAll('[data-cw-image-viewer-trigger]')];\n    product.querySelectorAll('[data-cw-detail-index]').forEach(button=>{\n      if(bound.has(button))return;\n      const trigger=triggers[Number(button.dataset.cwDetailIndex)];\n      if(!trigger)return;\n      bound.add(button);\n      button.addEventListener('click',()=>{\n        dialog.addEventListener('close',()=>requestAnimationFrame(()=>button.focus({preventScroll:true})),{once:true});\n        trigger.click();\n      });\n    });\n  });\n  bind();document.addEventListener('shopify:section:load',bind);\n})();\n"],
  "mappings": "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",
  "names": []
}
