{
  "version": 3,
  "sources": ["/cdn/shop/t/70/assets/cz-pdp-shared.js?cz_sync=20261023T1900"],
  "sourcesContent": ["(() => {\n  const source = document.getElementById('cz-pdp-shared-config');\n  if (!source || window.czPdpShared) return;\n  let config;\n  try { config = JSON.parse(source.textContent); } catch (_) { return; }\n  if (!config || !config.productId || !config.kind) return;\n  const productForm = document.querySelector(`.product-form[data-product-id=\"${config.productId}\"]`);\n  if (!productForm) {\n    if (source.dataset.czPdpSharedWaiting) return;\n    source.dataset.czPdpSharedWaiting = 'true';\n    const scriptUrl = document.currentScript?.src;\n    const retry = new MutationObserver(() => {\n      if (!document.querySelector(`.product-form[data-product-id=\"${config.productId}\"]`)) return;\n      retry.disconnect();\n      delete source.dataset.czPdpSharedWaiting;\n      if (!scriptUrl || window.czPdpShared) return;\n      const script = document.createElement('script');\n      script.src = scriptUrl;\n      script.addEventListener('load', () => script.remove(), {once: true});\n      document.head.append(script);\n    });\n    const observe = () => retry.observe(document.body, {childList: true, subtree: true});\n    if (document.body) observe();\n    else document.addEventListener('DOMContentLoaded', observe, {once: true});\n    setTimeout(() => retry.disconnect(), 30000);\n    return;\n  }\n  source.dataset.czPdpMaster = config.master || config.kind;\n  source.dataset.czPdpProfile = config.profile || config.kind;\n  document.documentElement.dataset.czPdpMaster = config.master || config.kind;\n  document.documentElement.dataset.czPdpProfile = config.profile || config.kind;\n  productForm.dataset.czPdpMaster = config.master || config.kind;\n  productForm.dataset.czPdpProfile = config.profile || config.kind;\n\n  const DRAPERY_COMPONENT_VERSION = 'drapery-guided-v4';\n  const textValue = (value, fallback, max = 1200) => {\n    const text = typeof value === 'string' ? value.trim() : '';\n    return (text || fallback).slice(0, max);\n  };\n  const safeUrl = (value, fallback) => {\n    const candidate = textValue(value, fallback, 1200);\n    try {\n      const url = new URL(candidate, window.location.origin);\n      return ['http:', 'https:'].includes(url.protocol) ? candidate : fallback;\n    } catch (_) { return fallback; }\n  };\n  const productTemplate = (value, fallback) => {\n    const template = textValue(value, fallback, 180);\n    return template.includes('{product}') ? template : fallback;\n  };\n  let OPERABLE_PRESENTATION = {};\n  try { OPERABLE_PRESENTATION = JSON.parse(document.getElementById('cz-drapery-operable-presentation')?.textContent || '{}'); }\n  catch (_) { OPERABLE_PRESENTATION = {}; }\n  const chapterDefaults = Object.freeze({\n    meet: Object.freeze({kind: 'meet', titleSource: 'meetName', titlePrefix: 'Meet'}),\n    tools: Object.freeze({kind: 'tools', title: 'Helpful tools'}),\n    homes: Object.freeze({kind: 'homes', title: 'Real Home Inspiration', nestedTitle: true}),\n    hardware: Object.freeze({kind: 'hardware', title: 'Hardware for your header'}),\n    reviews: Object.freeze({kind: 'reviews', title: 'Reviews'}),\n    support: Object.freeze({kind: 'support', title: 'FAQs'})\n  });\n  const defaultChapterOrder = Object.keys(chapterDefaults);\n  const requestedChapterOrder = Array.isArray(OPERABLE_PRESENTATION.chapterOrder) ? OPERABLE_PRESENTATION.chapterOrder : [];\n  const chapterOrder = requestedChapterOrder.length === defaultChapterOrder.length\n    && new Set(requestedChapterOrder).size === defaultChapterOrder.length\n    && requestedChapterOrder.every(kind => defaultChapterOrder.includes(kind))\n    ? requestedChapterOrder : defaultChapterOrder;\n  const chapterCopy = OPERABLE_PRESENTATION.chapters || {};\n  const chapterDefinition = kind => {\n    const fallback = chapterDefaults[kind];\n    if (kind === 'meet') return Object.freeze({...fallback, titlePrefix: textValue(chapterCopy.meetPrefix, fallback.titlePrefix, 80)});\n    return Object.freeze({...fallback, title: textValue(chapterCopy[kind], fallback.title, 120)});\n  };\n  const DRAPERY_PAGE_STRUCTURE = Object.freeze({\n    version: 'drapery-page-v2',\n    chapters: Object.freeze(chapterOrder.map(chapterDefinition)),\n    navigation: Object.freeze([\n      Object.freeze({key: 'customize', target: 'customize'}),\n      Object.freeze({key: 'details', target: 'details'}),\n      Object.freeze({key: 'gallery', target: 'homes'}),\n      Object.freeze({key: 'reviews', target: 'reviews'})\n    ])\n  });\n  const DRAPERY_POLICY = Object.freeze({\n    behavior: Object.freeze({openNextStep: true}),\n    style: Object.freeze({stepBorderWidth: '1px', stepBorderColor: '#ddd8d3'})\n  });\n  const groupCopy = OPERABLE_PRESENTATION.groups || {};\n  const helpCopy = (key, defaults) => {\n    const source = groupCopy[key]?.help || {};\n    const result = {...defaults};\n    ['label', 'title', 'text', 'linkText', 'toolText', 'drawerTitle', 'drawerIntro', 'drawerLinkText'].forEach(field => {\n      if (field in defaults) result[field] = textValue(source[field], defaults[field], field.includes('text') || field.includes('Intro') ? 1200 : 180);\n    });\n    ['href', 'drawerHref'].forEach(field => {\n      if (field in defaults) result[field] = safeUrl(source[field], defaults[field]);\n    });\n    return Object.freeze(result);\n  };\n  const DRAPERY_GROUP_PRESENTATION = Object.freeze({\n    color: Object.freeze({title: textValue(groupCopy.color?.title, 'Color', 80)}),\n    header: Object.freeze({\n      title: textValue(groupCopy.header?.title, 'Header', 80),\n      help: helpCopy('header', {kind: 'header', label: 'About Header Style', title: 'Header Style', text: 'Compare header styles and choose the construction that works with your hardware.', href: '/pages/header', linkText: 'View the Header Guide', drawerTitle: 'Header Guidelines', drawerIntro: 'Explore each header style to find the look and hardware that suit your curtains.', drawerHref: '/pages/header', drawerLinkText: 'View full header guide'})\n    }),\n    size: Object.freeze({\n      title: textValue(groupCopy.size?.title, 'Size', 80),\n      help: helpCopy('size', {kind: 'size', label: 'About Size', title: 'Size', text: 'Choose the guide that matches your Header Style and Header Type. Width and Length are the finished measurements for one panel.', href: '/pages/drapery-measurement', linkText: 'Use Measurement Tool', toolText: 'Open Measurement Tool'})\n    }),\n    lining: Object.freeze({\n      title: textValue(groupCopy.lining?.title, 'Lining', 80),\n      help: helpCopy('lining', {kind: 'liner', label: 'About Lining', title: 'Lining', text: 'Compare lining choices for light control, privacy, insulation, and drape.', href: '/pages/liner', linkText: 'View the Liner Guide', drawerTitle: 'Lining Guidelines', drawerIntro: 'A liner is an extra fabric layer sewn to the back of your curtain. It adds body and helps with light control, privacy and insulation.', drawerHref: '/pages/liner', drawerLinkText: 'View full liner guide'})\n    }),\n    accessories: Object.freeze({\n      title: textValue(groupCopy.accessories?.title, 'Accessories & extras', 80),\n      help: helpCopy('accessories', {kind: 'accessories', label: 'About Accessories & extras', title: 'Accessories & extras', text: 'Choose the optional finishing details that fit your room and installation.'})\n    }),\n    'size-protection': Object.freeze({\n      title: textValue(groupCopy['size-protection']?.title, 'Size Protection', 80),\n      help: helpCopy('size-protection', {kind: 'size-protection', label: 'About Size Protection', title: 'Size Protection', text: 'Review the available size protection option before completing the configuration.'})\n    }),\n    'included-benefits': Object.freeze({\n      // Capability preset: applied only when a verified product profile explicitly declares this key.\n      title: textValue(groupCopy['included-benefits']?.title, 'Included benefits', 80),\n      emptySummary: 'Included',\n      help: helpCopy('included-benefits', {kind: 'included-benefits', label: 'About Included benefits', title: 'Included benefits', text: 'Lifetime Limited Warranty and adjustable hooks are included at no added charge; this custom curtain is sold per panel.'})\n    })\n  });\n  const sampleCopy = OPERABLE_PRESENTATION.samples || {};\n  const DRAPERY_SAMPLE_PRESENTATION = Object.freeze({\n    prefix: '',\n    dialogId: 'cz-drapery-samples',\n    dialogTitleId: 'cz-drapery-samples-title',\n    swatches: Object.freeze({\n      order: Object.freeze({defaultLabel: textValue(sampleCopy.orderDefault, 'Order Free Swatches', 180), productLabel: productTemplate(sampleCopy.orderProduct, 'Order {product} Swatches')}),\n      view: Object.freeze({defaultLabel: textValue(sampleCopy.viewDefault, 'View Swatches', 180), productLabel: productTemplate(sampleCopy.viewProduct, 'View {product} Swatches')}),\n      empty: Object.freeze({defaultLabel: textValue(sampleCopy.emptyDefault, 'View Swatch Options', 180), productLabel: productTemplate(sampleCopy.emptyProduct, 'View {product} Swatch Options')})\n    }),\n    booklet: Object.freeze({\n      addLabel: productTemplate(sampleCopy.bookletAdd, 'Buy {product} Booklet'),\n      removeLabel: productTemplate(sampleCopy.bookletRemove, 'Remove {product} Booklet'),\n      unavailableLabel: productTemplate(sampleCopy.bookletUnavailable, '{product} Booklet Unavailable')\n    })\n  });\n  const sampleLabel = (template, subject = '') => DRAPERY_SAMPLE_PRESENTATION.prefix + template.replace('{product}', subject.trim());\n  const composeDraperySampleActions = actions => {\n    if (!actions || typeof actions !== 'object') return undefined;\n    const composed = {};\n    const swatches = actions.swatches;\n    const swatchPresentation = swatches && DRAPERY_SAMPLE_PRESENTATION.swatches[swatches.intent];\n    if (swatchPresentation) {\n      const subject = typeof swatches.subject === 'string' ? swatches.subject.trim() : '';\n      composed.swatches = {\n        intent: swatches.intent,\n        subject,\n        mode: 'dialog',\n        dialogId: DRAPERY_SAMPLE_PRESENTATION.dialogId,\n        dialogTitleId: DRAPERY_SAMPLE_PRESENTATION.dialogTitleId,\n        label: DRAPERY_SAMPLE_PRESENTATION.prefix + (subject ? swatchPresentation.productLabel.replace('{product}', subject) : swatchPresentation.defaultLabel)\n      };\n    }\n    const bookletSubject = typeof actions.booklet?.subject === 'string' ? actions.booklet.subject.trim() : '';\n    if (bookletSubject) {\n      composed.booklet = {\n        subject: bookletSubject,\n        mode: 'cart-toggle',\n        label: sampleLabel(DRAPERY_SAMPLE_PRESENTATION.booklet.addLabel, bookletSubject),\n        removeLabel: sampleLabel(DRAPERY_SAMPLE_PRESENTATION.booklet.removeLabel, bookletSubject),\n        unavailableLabel: sampleLabel(DRAPERY_SAMPLE_PRESENTATION.booklet.unavailableLabel, bookletSubject)\n      };\n    }\n    return Object.keys(composed).length ? composed : undefined;\n  };\n  const syncDraperySampleActions = (root, actions, enabled) => {\n    if (!root || !enabled || !actions?.swatches) return null;\n    let sampleLinks = root.querySelector('.cz-fabric-sample-links')\n      || (root.previousElementSibling?.matches('.cz-fabric-sample-links') ? root.previousElementSibling : null);\n    if (!sampleLinks) {\n      sampleLinks = document.createElement('div');\n      sampleLinks.className = 'cz-fabric-sample-links';\n    }\n    const syncAction = (action, kind) => {\n      const attribute = kind === 'swatches' ? 'czOrderSwatches' : 'czBuyBooklet';\n      let control = sampleLinks.querySelector(`[data-${kind === 'swatches' ? 'cz-order-swatches' : 'cz-buy-booklet'}]`);\n      if (!action) {\n        control?.remove();\n        return;\n      }\n      if (!control) {\n        control = document.createElement(action.mode === 'link' ? 'a' : 'button');\n        sampleLinks.append(control);\n      }\n      if (control.tagName === 'BUTTON') {\n        control.type = 'button';\n        control.dataset[attribute] = '';\n        if (action.mode === 'dialog') {\n          control.setAttribute('aria-haspopup', 'dialog');\n          control.setAttribute('aria-controls', action.dialogId);\n        } else {\n          control.removeAttribute('aria-haspopup');\n          control.removeAttribute('aria-controls');\n        }\n      } else {\n        control.href = action.href;\n      }\n      control.dataset.czSampleAction = kind;\n      control.dataset.czSampleLabel = action.label;\n      if (action.removeLabel) control.dataset.czSampleRemoveLabel = action.removeLabel;\n      else delete control.dataset.czSampleRemoveLabel;\n      if (action.unavailableLabel) control.dataset.czSampleUnavailableLabel = action.unavailableLabel;\n      else delete control.dataset.czSampleUnavailableLabel;\n      let label = action.label;\n      if (kind === 'booklet') {\n        if (['Adding\u2026', 'Removing\u2026'].includes(control.textContent)) return;\n        const priceSuffix = control.dataset.czSamplePriceSuffix || '';\n        if (action.available === false && control.dataset.czBookletAction !== 'remove') control.disabled = true;\n        label = control.dataset.czBookletAction === 'remove'\n          ? action.removeLabel\n          : action.available === false ? action.unavailableLabel : action.label + priceSuffix;\n      }\n      if (control.textContent !== label) control.textContent = label;\n    };\n    const dialog = document.getElementById(actions.swatches.dialogId);\n    const hasProductSamples = Boolean(dialog?.querySelector('[data-cz-add-sample]'));\n    const emptyPresentation = DRAPERY_SAMPLE_PRESENTATION.swatches.empty;\n    const swatches = !hasProductSamples && actions.swatches.intent === 'order'\n      ? {...actions.swatches, label: DRAPERY_SAMPLE_PRESENTATION.prefix + (actions.swatches.subject ? emptyPresentation.productLabel.replace('{product}', actions.swatches.subject) : emptyPresentation.defaultLabel)}\n      : actions.swatches;\n    let bookletData;\n    try { bookletData = JSON.parse(document.getElementById('cz-drapery-booklet-data')?.textContent || '{}'); }\n    catch (_) { bookletData = {}; }\n    // Keep a mapped Roman Booklet control in the action row while its product\n    // data is loading. The Roman runtime hides it until a real variant is\n    // ready, then reapplies the label, price and cart state. Drapery keeps its\n    // existing rule: an unpublished Booklet is removed from the action row.\n    const keepsDeferredBooklet = Boolean(root.closest?.('[data-cz-roman-unified]'));\n    const existingBooklet = sampleLinks.querySelector('[data-cz-buy-booklet]');\n    const booklet = actions.booklet && (\n      bookletData.id\n      || existingBooklet?.dataset.czBookletAction === 'remove'\n      || keepsDeferredBooklet\n    )\n      ? {...actions.booklet, available: Boolean(bookletData.id) && bookletData.available === true}\n      : undefined;\n    syncAction(swatches, 'swatches');\n    syncAction(booklet, 'booklet');\n    const dialogTitle = document.getElementById(swatches.dialogTitleId);\n    if (dialogTitle && dialogTitle.textContent !== swatches.label) dialogTitle.textContent = swatches.label;\n    let status = sampleLinks.querySelector('[data-cz-sample-status]');\n    if (!status) {\n      status = document.createElement('p');\n      status.dataset.czSampleStatus = '';\n      status.setAttribute('role', 'status');\n      status.setAttribute('aria-live', 'polite');\n      sampleLinks.append(status);\n    }\n    // YMQ can remount the Roman action row before the async Booklet mapping\n    // arrives. In that order the pre-existing full-width status node would sit\n    // between Swatches and Booklet and push Booklet outside the visible row.\n    // Keep both customer actions first; status feedback follows them.\n    if (keepsDeferredBooklet) sampleLinks.append(status);\n    return sampleLinks;\n  };\n  const DRAPERY_GROUP_ORDER = Object.freeze(['color', 'header', 'size', 'lining', 'accessories']);\n  const DRAPERY_PROTECTION = Object.freeze({\n    fieldId: '262941tem1',\n    addValueId: '262941tem1_1',\n    declineValueId: '262941tem1_2'\n  });\n  const composeDraperyGroups = groups => (groups || []).map(group => {\n    const shared = DRAPERY_GROUP_PRESENTATION[group.key];\n    if (!shared) return {...group, ids: [...(group.ids || [])], help: group.help ? {...group.help} : group.help};\n    const {title: _legacyTitle, help: _legacyHelp, presentationTitle, ...productFacts} = group;\n    return {\n      ...productFacts,\n      ...shared,\n      title: textValue(presentationTitle, shared.title, 80),\n      ids: [...(group.ids || [])],\n      help: shared.help ? {...shared.help} : undefined\n    };\n  });\n  const collectionDisplayName = value => (value || '').trim().replace(/\\s+(?:Linen|Cotton|Wool|Velvet)$/i, '');\n  const syncCollectionDisplayNames = collection => {\n    if (!collection) return;\n    collection.querySelectorAll('.ymq-option-label').forEach(label => {\n      const input = label.querySelector('input[type=\"radio\"]');\n      const visibleName = label.querySelector('.ymq-option-value');\n      if (!input || !visibleName) return;\n      const fullName = input.value.trim();\n      const shortName = collectionDisplayName(fullName);\n      if (visibleName.textContent !== shortName) visibleName.textContent = shortName;\n      label.title = fullName;\n    });\n    const selected = collection.querySelector('input[type=\"radio\"]:checked:not(:disabled)');\n    const selectedName = collection.querySelector('.ymq-option-title-right-name');\n    const selectedDisplay = collection.querySelector('.ymq-option-title-right');\n    const shortSelectedName = collectionDisplayName(selected?.value);\n    if (selectedName && selectedName.textContent !== shortSelectedName) selectedName.textContent = shortSelectedName;\n    if (selectedDisplay) selectedDisplay.dataset.czCollectionDisplay = shortSelectedName;\n    if (!collection._czCollectionNamesObserver) {\n      collection._czCollectionNamesObserver = new MutationObserver(() => requestAnimationFrame(() => syncCollectionDisplayNames(collection)));\n      collection._czCollectionNamesObserver.observe(collection, {childList: true, subtree: true, characterData: true});\n    }\n  };\n  const setupMobileColorDisclosure = root => {\n    if (!root) return;\n    root.querySelectorAll('[ymq-option-label^=\"Color\"]').forEach((colorBox, boxIndex) => {\n      const list = colorBox.querySelector('.ymq-option-value-info');\n      const items = [...(list?.querySelectorAll(':scope > .ymq-option-value-item') || [])]\n        .filter(item => !item.hidden);\n      const needsDisclosure = items.length > 8;\n      colorBox.classList.toggle('cz-color-mobile-overflow', needsDisclosure);\n      items.forEach((item, index) => {\n        item.style.setProperty('--cz-color-mobile-column', String(index + 1));\n      });\n      let button = colorBox.querySelector('.cz-color-disclosure');\n      let progress = colorBox.querySelector('.cz-color-scroll-progress');\n      const teardownProgress = () => {\n        progress?.remove();\n        if (list?._czColorScrollHandler) list.removeEventListener('scroll', list._czColorScrollHandler);\n        list?._czColorProgressObserver?.disconnect();\n        if (list) {\n          delete list._czColorScrollHandler;\n          delete list._czColorProgressObserver;\n        }\n      };\n      if (!needsDisclosure) {\n        button?.remove();\n        teardownProgress();\n        colorBox.classList.remove('cz-color-expanded');\n        list?.removeAttribute('tabindex');\n        list?.removeAttribute('aria-label');\n        return;\n      }\n      if (!list.id) list.id = `cz-color-swatches-${boxIndex + 1}`;\n      list.tabIndex = 0;\n      list.setAttribute('aria-label', 'Color options. Swipe left or right to see more colors.');\n      if (!progress) {\n        progress = document.createElement('div');\n        progress.className = 'cz-color-scroll-progress';\n        progress.setAttribute('aria-hidden', 'true');\n        progress.innerHTML = '<span></span>';\n        list.after(progress);\n      }\n      const updateProgress = () => {\n        const maxScroll = Math.max(0, list.scrollWidth - list.clientWidth);\n        const trackWidth = progress.clientWidth;\n        const thumb = progress.firstElementChild;\n        if (!thumb || !trackWidth) return;\n        const thumbWidth = Math.max(44, Math.round(trackWidth * Math.min(1, list.clientWidth / list.scrollWidth)));\n        const offset = maxScroll ? Math.round((trackWidth - thumbWidth) * (list.scrollLeft / maxScroll)) : 0;\n        thumb.style.width = `${thumbWidth}px`;\n        thumb.style.transform = `translateX(${offset}px)`;\n      };\n      if (!list._czColorScrollHandler) {\n        list._czColorScrollHandler = () => requestAnimationFrame(updateProgress);\n        list.addEventListener('scroll', list._czColorScrollHandler, {passive: true});\n        if ('ResizeObserver' in window) {\n          list._czColorProgressObserver = new ResizeObserver(updateProgress);\n          list._czColorProgressObserver.observe(list);\n        }\n      }\n      if (!button) {\n        button = document.createElement('button');\n        button.type = 'button';\n        button.className = 'cz-color-disclosure';\n        button.setAttribute('aria-expanded', 'false');\n        button.addEventListener('click', () => {\n          const expanded = button.getAttribute('aria-expanded') !== 'true';\n          button.setAttribute('aria-expanded', String(expanded));\n          colorBox.classList.toggle('cz-color-expanded', expanded);\n          button.textContent = expanded ? 'Collapse Colors' : 'Expand Colors';\n          if (!expanded) list.scrollLeft = 0;\n          requestAnimationFrame(updateProgress);\n        });\n      }\n      progress.after(button);\n      button.setAttribute('aria-controls', list.id);\n      button.textContent = button.getAttribute('aria-expanded') === 'true' ? 'Collapse Colors' : 'Expand Colors';\n      requestAnimationFrame(updateProgress);\n    });\n  };\n  const discoverAdaptiveDraperyProfile = root => {\n    if (!root) return false;\n    const adaptive = config.features?.adaptiveFieldDiscovery === true;\n    const boxes = [...root.querySelectorAll('.ymq-options-box[ymq-option-id]')];\n    if (!boxes.length) return false;\n    const normalized = value => (value || '').replace(/\\s+/g, ' ').trim();\n    const meta = box => ({\n      box,\n      id: box.getAttribute('ymq-option-id') || '',\n      label: normalized(box.getAttribute('ymq-option-label')),\n      text: normalized(box.textContent)\n    });\n    const entries = boxes.map(meta).filter(entry => entry.id);\n    const matches = (entry, pattern) => pattern.test(`${entry.label} ${entry.text}`);\n    const radioValues = entry => [...entry.box.querySelectorAll('input[type=\"radio\"]')]\n      .map(input => normalized(input.value).split('|')[0].trim())\n      .filter(Boolean);\n    const softTopValuePattern = /^(?:Pinch Pleat with Back Tab|Tab Top|Tab Top with Bow|Back Tab|Rod Pocket)$/i;\n    const hasCompleteSoftTopValues = values => new Set(\n      values\n        .filter(value => softTopValuePattern.test(value))\n        .map(value => value.toLowerCase())\n    ).size === 5;\n    const standaloneSoftTopStyle = entries.find(entry => {\n      if (!/^header style(?: \\(.*\\))?$/i.test(entry.label) && !/^track$/i.test(entry.label)) return false;\n      const values = radioValues(entry);\n      return values.length === 5 && hasCompleteSoftTopValues(values);\n    });\n    const flattenedHeaderStyle = entries.find(entry => entry.box.dataset.czFlattenedSoftTopField === 'true');\n    const mergedHeaderStyle = flattenedHeaderStyle || entries.find(entry => {\n      if (!/^header style(?: \\(.*\\))?$/i.test(entry.label) && !/^track$/i.test(entry.label)) return false;\n      const values = radioValues(entry);\n      const completeSoftTop = hasCompleteSoftTopValues(values);\n      return values.some(value => /^(?:Double|Triple) Pleat\\b|^Goblet$/i.test(value))\n        && values.some(value => /^Grommet$/i.test(value))\n        && (values.some(value => /^Soft Top$/i.test(value)) || completeSoftTop);\n    });\n    const mergedHeaderValues = mergedHeaderStyle ? radioValues(mergedHeaderStyle) : [];\n    const hasFlattenedSoftTop = Boolean(mergedHeaderStyle && (\n      mergedHeaderStyle.box.dataset.czFlattenedSoftTopField === 'true'\n      || (!mergedHeaderValues.some(value => /^Soft Top$/i.test(value))\n        && hasCompleteSoftTopValues(mergedHeaderValues))\n    ));\n    if (hasFlattenedSoftTop) {\n      config.flattenedSoftTop = {\n        headerStyleId: mergedHeaderStyle.id,\n        fieldId: `${mergedHeaderStyle.id}__cz_soft`\n      };\n    } else if (adaptive) {\n      delete config.flattenedSoftTop;\n    }\n    const redundantHeaderParents = mergedHeaderStyle ? entries.filter(entry => {\n      if (!/^header$/i.test(entry.label)) return false;\n      const values = radioValues(entry);\n      return values.length >= 2 && values.every(value => /^(?:Pleated Drapery|Grommet Drapery|Soft Top Drapery)$/i.test(value));\n    }) : [];\n    if (redundantHeaderParents.length) {\n      config.retiredOptionIds = [...new Set([\n        ...(config.retiredOptionIds || []),\n        ...redundantHeaderParents.map(entry => entry.id)\n      ])];\n    }\n    const protection = entries.filter(entry => matches(entry, /\\b(?:fit|size) protection\\b/i));\n    const size = entries.filter(entry => !protection.includes(entry) && (\n      /^(?:(?:single panel )?order )?(?:width|length)(?: fraction)?(?: \\(.*\\))?$/i.test(entry.label)\n      || /^(?:width|length) fraction/i.test(entry.label)\n      || /^(?:dpm|measurement)$/i.test(entry.label)\n      || /(?:measurement tool|single panel order width is)/i.test(entry.text)\n    ));\n    const header = entries.filter(entry => !protection.includes(entry) && !size.includes(entry) && !redundantHeaderParents.includes(entry) && (\n      /^(?:header style(?: \\(.*\\))?|header type|grommet color|header|track|runner)$/i.test(entry.label)\n      || /more about (?:the )?header/i.test(entry.text)\n    ));\n    const lining = entries.filter(entry => !protection.includes(entry) && !size.includes(entry) && !header.includes(entry) && (\n      /^(?:lining|liner)$/i.test(entry.label)\n      || /more about (?:the )?(?:lining|liner)/i.test(entry.text)\n    ));\n    const colorGuidance = entries.filter(entry => !protection.includes(entry) && !size.includes(entry) && !header.includes(entry) && !lining.includes(entry) && (\n      /^colors vary\\b/i.test(entry.text)\n      || /^(?:sample booklet|\u6837\u54C1\u518C)$/i.test(entry.label)\n    ));\n    const nativeColor = entries.filter(entry => /^color(?:\\b|-)/i.test(entry.label));\n    const collectionEntries = entries.filter(entry => /^collection$/i.test(entry.label));\n    const collectionPrefixes = collectionEntries\n      .map(entry => entry.id.match(/^(\\d+)tem/)?.[1]).filter(Boolean);\n    const collectionFields = entries.filter(entry => collectionPrefixes.some(prefix => entry.id.startsWith(`${prefix}tem`)));\n    const collectionDependentFields = collectionFields.filter(entry => !collectionEntries.includes(entry));\n    collectionEntries.forEach(entry => { entry.box.dataset.czUngroupedAllowed = 'collection'; });\n    collectionDependentFields.forEach(entry => { delete entry.box.dataset.czUngroupedAllowed; });\n    if (collectionFields.length) root.dataset.czDraperyHasCollection = 'true';\n    const assigned = new Set([...protection, ...size, ...header, ...lining, ...colorGuidance, ...nativeColor, ...collectionFields]);\n    const accessories = entries.filter(entry => !assigned.has(entry));\n    const ids = list => [...new Set(list.map(entry => entry.id).filter(Boolean))];\n    const groupIds = {\n      color: ids([...collectionDependentFields, ...nativeColor, ...colorGuidance]),\n      header: [...new Set([...ids(header), config.flattenedSoftTop?.fieldId].filter(Boolean))],\n      size: ids(size),\n      lining: ids(lining),\n      accessories: ids(accessories)\n    };\n    Object.entries(groupIds).forEach(([key, value]) => {\n      const group = config.groups.find(candidate => candidate.key === key);\n      if (!group) return;\n      group.ids = adaptive ? value : [...new Set([...(group.ids || []), ...value])];\n      group.ids = group.ids.filter(id => !collectionEntries.some(entry => entry.id === id));\n    });\n    const first = predicate => entries.find(predicate)?.id || '';\n    const all = predicate => entries.filter(predicate).map(entry => entry.id);\n    const headerTypeEntries = entries.filter(entry => /^header type$/i.test(entry.label));\n    const headerTypeValues = radioValues;\n    const headerTypeByValue = pattern => headerTypeEntries.find(entry =>\n      headerTypeValues(entry).some(value => pattern.test(value))\n    )?.id || '';\n    const headerSoft = config.flattenedSoftTop?.fieldId || headerTypeByValue(softTopValuePattern);\n    const headerTriple = headerTypeByValue(/^Triple\\s+(?:Pinch|Tailor|French)\\b/i);\n    const remainingHeaderTypes = headerTypeEntries\n      .map(entry => entry.id)\n      .filter(id => id !== headerSoft && id !== headerTriple);\n    const headerDouble = remainingHeaderTypes[0] || '';\n    const lengths = all(entry => /(?:single panel )?order length/i.test(entry.label));\n    const discoveredFields = {\n      headerStyle: mergedHeaderStyle?.id || standaloneSoftTopStyle?.id || first(entry => /^header style(?: \\(.*\\))?$/i.test(entry.label)) || first(entry => /^track$/i.test(entry.label)),\n      headerMeta: first(entry => /more about (?:the )?header/i.test(entry.text)),\n      headerDouble,\n      headerTriple: headerTriple || remainingHeaderTypes[1] || '',\n      headerSoft,\n      headerGrommet: first(entry => /^grommet color$/i.test(entry.label)),\n      rings: first(entry => /^rings$/i.test(entry.label)),\n      ringsDescription: first(entry => /inner diameter of the ring/i.test(entry.text)),\n      ringsCalculator: first(entry => /how many rings/i.test(entry.text)),\n      width: first(entry => /(?:single panel )?order width/i.test(entry.label) && !/fraction/i.test(entry.label)),\n      widthFraction: first(entry => /^width fraction/i.test(entry.label)),\n      length: lengths[0] || '',\n      alternateLength: lengths[1] || '',\n      lengthFraction: first(entry => /^length fraction/i.test(entry.label)),\n      dimensionMeta: first(entry => /(?:measurement tool|single panel order width is)/i.test(entry.text)),\n      lining: first(entry => /^lining$/i.test(entry.label)),\n      liningMeta: first(entry => /more about (?:the )?(?:lining|liner)/i.test(entry.text)),\n      memory: first(entry => /^memory shape$/i.test(entry.label)),\n      memoryMeta: first(entry => /more about memory shape/i.test(entry.text)),\n      hooks: first(entry => /adjustable hooks included/i.test(entry.text)),\n      tieback: first(entry => /^tieback$/i.test(entry.label)),\n      room: first(entry => /^room description/i.test(entry.label)),\n      warranty: first(entry => /lifetime limited warranty/i.test(entry.text)),\n      soldPerPanel: first(entry => /sold per panel/i.test(entry.text)),\n      protection: protection[0]?.id || ''\n    };\n    config.fields ||= {};\n    Object.entries(discoveredFields).forEach(([name, id]) => {\n      if (adaptive || !config.fields[name]) config.fields[name] = id;\n    });\n    root.dataset.czDraperyProfileReconciled = 'ready';\n    if (adaptive) root.dataset.czAdaptiveDraperyProfile = 'ready';\n    ensureFlattenedSoftTopFields(root);\n    return Boolean(config.fields.headerStyle && config.fields.width && config.fields.length);\n  };\n  const groupDefinition = (groups, key) => groups?.find(group => group.key === key);\n  const groupIndex = (groups, key) => groups?.findIndex(group => group.key === key) ?? -1;\n  const nextGroupIndex = (groups, key) => {\n    const index = groupIndex(groups, key);\n    return index >= 0 && index < groups.length - 1 ? index + 1 : -1;\n  };\n  const continueLabel = (groups, key) => {\n    const definition = groupDefinition(groups, key);\n    return definition ? `Continue to ${definition.title}` : '';\n  };\n  const realDraperyProtectionBox = root => {\n    if (!root) return null;\n    const box = root.querySelector(`[ymq-option-id=\"${DRAPERY_PROTECTION.fieldId}\"]`);\n    if (!box) return null;\n    const add = box.querySelector(`input[ymq-option-value-id=\"${DRAPERY_PROTECTION.addValueId}\"][value=\"Add protection\"]`);\n    const decline = box.querySelector(`input[ymq-option-value-id=\"${DRAPERY_PROTECTION.declineValueId}\"][value=\"No thanks\"]`);\n    return add && decline ? box : null;\n  };\n  const bindOptionMedia = (root, media) => {\n    if (!root || !media || typeof media !== 'object') return 0;\n    let bound = 0;\n    root.querySelectorAll('.ymq-option-label').forEach(label => {\n      const asset = media[label.querySelector('input[type=\"radio\"]')?.value];\n      const image = label.querySelector('.ymq-option-swatches-image');\n      if (!asset?.url || !image) return;\n      if (image.getAttribute('src') !== asset.url) image.src = asset.url;\n      if (asset.alt && image.alt !== asset.alt) image.alt = asset.alt;\n      bound += 1;\n    });\n    return bound;\n  };\n  const flattenedSoftTopPattern = /^(?:Pinch Pleat with Back Tab|Tab Top|Tab Top with Bow|Back Tab|Rod Pocket)$/i;\n  const flattenedSoftTopImage = 'https://cdn.shopify.com/s/files/1/0862/2506/0158/files/rod_pocket_8af2e651-4f57-4a97-813e-1b0c05d68d8c.webp?v=1776148722';\n  const setFlattenedSoftTopVisibility = (softBox, visible) => {\n    if (!softBox) return;\n    softBox.hidden = !visible;\n    softBox.setAttribute('aria-hidden', String(!visible));\n  };\n  const setFlattenedConditionalVisibility = (box, visible) => {\n    if (!box) return;\n    box.classList.toggle('ymq-option-condition-hide', !visible);\n    box.setAttribute('aria-hidden', String(!visible));\n  };\n  const hideFlattenedNativeHeaderDependents = root => {\n    ['headerDouble', 'headerTriple', 'headerGrommet'].forEach(name => {\n      const id = config.fields?.[name];\n      if (!id) return;\n      setFlattenedConditionalVisibility(root.querySelector(`[ymq-option-id=\"${CSS.escape(id)}\"]`), false);\n    });\n  };\n  const clearRadioSelection = inputs => inputs.forEach(input => {\n    input.checked = false;\n    input.removeAttribute('checked');\n    input.removeAttribute('ymq-option-checked');\n  });\n  const ensureFlattenedSoftTopFields = root => {\n    const spec = config.flattenedSoftTop;\n    if (!root || !spec?.headerStyleId || !spec?.fieldId) return root;\n    const parent = root.querySelector(`[ymq-option-id=\"${CSS.escape(spec.headerStyleId)}\"]`);\n    const parentGrid = parent?.querySelector('.ymq-option-value-info');\n    if (!parent || !parentGrid) return root;\n    parent.dataset.czFlattenedSoftTopField = 'true';\n    let softBox = root.querySelector(`[ymq-option-id=\"${CSS.escape(spec.fieldId)}\"]`);\n    if (!softBox) {\n      softBox = document.createElement('div');\n      softBox.className = 'ymq-options-box ymq-option-col-100 cz-flattened-soft-top-types';\n      softBox.setAttribute('ymq-option-id', spec.fieldId);\n      softBox.setAttribute('ymq-option-label', 'Header Type');\n      softBox.innerHTML = '<div class=\"ymq-option-title\"><span class=\"ymq_lable\">Header Type</span></div><div class=\"ymq-option-value-info\"></div>';\n      parent.after(softBox);\n    }\n    const softGrid = softBox.querySelector('.ymq-option-value-info');\n    softGrid?.classList.add('cz-header-grid');\n    const grommetColorBox = [...root.querySelectorAll('.ymq-options-box')].find(box =>\n      /^grommet color$/i.test(box.getAttribute('ymq-option-label') || box.querySelector('.ymq_lable')?.textContent?.trim() || '')\n    );\n    const sourceItems = [...parentGrid.querySelectorAll('.ymq-option-value-item')].filter(item => {\n      const input = item.querySelector('input[type=\"radio\"]');\n      return input && flattenedSoftTopPattern.test(input.value.split('|')[0].trim());\n    });\n    let virtualItem = parentGrid.querySelector('[data-cz-virtual-soft-top-item]');\n    if (!virtualItem && sourceItems.length) {\n      virtualItem = sourceItems[0].cloneNode(true);\n      virtualItem.dataset.czVirtualSoftTopItem = '';\n      const virtualInput = virtualItem.querySelector('input[type=\"radio\"]');\n      [...virtualInput.attributes].forEach(attribute => {\n        if (attribute.name.startsWith('ymq-option-')) virtualInput.removeAttribute(attribute.name);\n      });\n      virtualInput.classList.add('cz-virtual-header-style-input');\n      virtualInput.value = 'Soft Top';\n      virtualInput.dataset.czVirtualSoftTop = '';\n      virtualInput.checked = false;\n      virtualInput.removeAttribute('checked');\n      const virtualImage = virtualItem.querySelector('.ymq-option-swatches-image');\n      if (virtualImage) {\n        virtualImage.src = flattenedSoftTopImage;\n        virtualImage.removeAttribute('srcset');\n        virtualImage.alt = 'Soft Top';\n      }\n      virtualItem.querySelectorAll('.ymq-option-value, .cz-header-name').forEach(label => { label.textContent = 'Soft Top'; });\n      virtualItem.querySelectorAll('.ymq-option-price, .ymq-option-value-price').forEach(price => price.remove());\n      parentGrid.append(virtualItem);\n    }\n    sourceItems.forEach(item => {\n      const sourceInput = item.querySelector('input[type=\"radio\"]');\n      if (!sourceInput) return;\n      item.dataset.czFlattenedSoftSource = '';\n      item.hidden = true;\n      const value = sourceInput.value.split('|')[0].trim();\n      let proxyItem = [...softGrid.querySelectorAll('[data-cz-soft-proxy-item]')].find(candidate =>\n        candidate.querySelector('[data-cz-soft-source-value]')?.dataset.czSoftSourceValue === value\n      );\n      if (!proxyItem) {\n        proxyItem = item.cloneNode(true);\n        proxyItem.hidden = false;\n        proxyItem.dataset.czSoftProxyItem = '';\n        delete proxyItem.dataset.czFlattenedSoftSource;\n        proxyItem.querySelectorAll('[id]').forEach(element => element.removeAttribute('id'));\n        proxyItem.querySelectorAll('[for]').forEach(element => element.removeAttribute('for'));\n        const proxyInput = proxyItem.querySelector('input[type=\"radio\"]');\n        [...proxyInput.attributes].forEach(attribute => {\n          if (attribute.name.startsWith('ymq-option-')) proxyInput.removeAttribute(attribute.name);\n        });\n        proxyInput.classList.add('cz-virtual-header-soft-input');\n        proxyInput.name = spec.fieldId;\n        proxyInput.dataset.czSoftSourceValue = value;\n        proxyInput.checked = sourceInput.checked;\n        proxyInput.removeAttribute('checked');\n        softGrid.append(proxyItem);\n      }\n      const proxyInput = proxyItem.querySelector('[data-cz-soft-source-value]');\n      if (proxyInput) proxyInput.checked = sourceInput.checked;\n    });\n    const virtualInput = virtualItem?.querySelector('[data-cz-virtual-soft-top]');\n    const sourceSelected = sourceItems.some(item => item.querySelector('input[type=\"radio\"]')?.checked);\n    const grommetSelected = [...parent.querySelectorAll('input[type=\"radio\"]:checked')].some(input =>\n      /^grommet$/i.test(input.value.split('|')[0].trim())\n    );\n    virtualItem?.classList.toggle('cz-logical-selected', sourceSelected);\n    const softActive = Boolean(virtualInput?.checked || sourceSelected);\n    setFlattenedSoftTopVisibility(softBox, softActive);\n    setFlattenedConditionalVisibility(grommetColorBox, grommetSelected);\n    if (softActive) hideFlattenedNativeHeaderDependents(root);\n    if (!root._czFlattenedSoftTopBound) {\n      root._czFlattenedSoftTopBound = true;\n      root.addEventListener('click', event => {\n        const current = config.flattenedSoftTop;\n        const input = event.target.closest?.('.ymq-option-label')?.querySelector('input[type=\"radio\"]') || event.target.closest?.('input[type=\"radio\"]');\n        if (!current || !input) return;\n        const currentParent = root.querySelector(`[ymq-option-id=\"${CSS.escape(current.headerStyleId)}\"]`);\n        const currentSoftBox = root.querySelector(`[ymq-option-id=\"${CSS.escape(current.fieldId)}\"]`);\n        const currentVirtual = currentParent?.querySelector('[data-cz-virtual-soft-top]');\n        if (!currentParent || !currentSoftBox || !currentVirtual) return;\n        const currentGrommetColorBox = [...root.querySelectorAll('.ymq-options-box')].find(box =>\n          /^grommet color$/i.test(box.getAttribute('ymq-option-label') || box.querySelector('.ymq_lable')?.textContent?.trim() || '')\n        );\n        const softSources = [...currentParent.querySelectorAll('[data-cz-flattened-soft-source] input[type=\"radio\"]')];\n        const softProxies = [...currentSoftBox.querySelectorAll('[data-cz-soft-source-value]')];\n        const syncSoftProxy = source => {\n          const value = source?.value.split('|')[0].trim();\n          softProxies.forEach(proxy => { proxy.checked = proxy.dataset.czSoftSourceValue === value && source.checked; });\n        };\n        if (input === currentVirtual) {\n          clearRadioSelection([...currentParent.querySelectorAll('input[type=\"radio\"]:checked:not([data-cz-virtual-soft-top])')]);\n          clearRadioSelection(softProxies);\n          currentVirtual.checked = true;\n          currentVirtual.closest('[data-cz-virtual-soft-top-item]')?.classList.remove('cz-logical-selected');\n          setFlattenedSoftTopVisibility(currentSoftBox, true);\n          hideFlattenedNativeHeaderDependents(root);\n        } else if (currentSoftBox.contains(input)) {\n          const source = softSources.find(candidate => candidate.value.split('|')[0].trim() === input.dataset.czSoftSourceValue);\n          setFlattenedSoftTopVisibility(currentSoftBox, true);\n          hideFlattenedNativeHeaderDependents(root);\n          if (source && !source.checked) source.click();\n          currentVirtual.closest('[data-cz-virtual-soft-top-item]')?.classList.toggle('cz-logical-selected', Boolean(source?.checked));\n          syncSoftProxy(source);\n        } else if (input.closest('[data-cz-flattened-soft-source]')) {\n          setFlattenedSoftTopVisibility(currentSoftBox, true);\n          hideFlattenedNativeHeaderDependents(root);\n          currentVirtual.closest('[data-cz-virtual-soft-top-item]')?.classList.toggle('cz-logical-selected', input.checked);\n          syncSoftProxy(input);\n        } else if (currentParent.contains(input)) {\n          currentVirtual.checked = false;\n          currentVirtual.closest('[data-cz-virtual-soft-top-item]')?.classList.remove('cz-logical-selected');\n          clearRadioSelection(softSources);\n          clearRadioSelection(softProxies);\n          setFlattenedSoftTopVisibility(currentSoftBox, false);\n          const grommetSelected = /^grommet$/i.test(input.value.split('|')[0].trim());\n          setFlattenedConditionalVisibility(currentGrommetColorBox, grommetSelected);\n        }\n      }, true);\n    }\n    return root;\n  };\n  if ((config.master || config.kind) === 'drapery') {\n    const baseGroups = (config.groups || []).filter(group => !['size-protection', 'included-benefits'].includes(group.key));\n    config = {\n      ...config,\n      fields: {...(config.fields || {}), protection: DRAPERY_PROTECTION.fieldId},\n      features: {...(config.features || {}), sizeProtection: true},\n      protection: DRAPERY_PROTECTION,\n      groups: composeDraperyGroups(baseGroups),\n      sampleActions: composeDraperySampleActions(config.sampleActions)\n    };\n    const keys = config.groups.map(group => group.key);\n    const stablePrefix = DRAPERY_GROUP_ORDER.every((key, index) => keys[index] === key);\n    const uniqueKeys = new Set(keys).size === keys.length;\n    const finalKey = keys[DRAPERY_GROUP_ORDER.length];\n    const supportedLength = keys.length === DRAPERY_GROUP_ORDER.length\n      || (keys.length === DRAPERY_GROUP_ORDER.length + 1 && ['size-protection', 'included-benefits'].includes(finalKey));\n    const compactPositions = keys.map(key => DRAPERY_GROUP_ORDER.indexOf(key));\n    const compactOrder = compactPositions.every((position, index) => position >= 0 && (!index || position > compactPositions[index - 1]));\n    if (config.controller === 'compact-drapery') {\n      if (!keys.length || !uniqueKeys || !compactOrder) return;\n    } else if (!stablePrefix || !uniqueKeys || !supportedLength) return;\n  }\n  if ((config.master || config.kind) === 'drapery') {\n    productForm.style.setProperty('--cz-drapery-step-border-width', DRAPERY_POLICY.style.stepBorderWidth);\n    productForm.style.setProperty('--cz-drapery-step-border-color', DRAPERY_POLICY.style.stepBorderColor);\n  }\n\n  const engine = {\n    config,\n    master: config.master || config.kind,\n    draperyPolicy: DRAPERY_POLICY,\n    presentation: Object.freeze({\n      detailsEntryLabel: textValue(OPERABLE_PRESENTATION.detailsEntryLabel, 'Product details & guides', 180),\n      realHomesTitle: textValue(chapterCopy.homes, 'Real Home Inspiration', 180)\n    }),\n    draperyGroupPresentation: DRAPERY_GROUP_PRESENTATION,\n    draperySamplePresentation: DRAPERY_SAMPLE_PRESENTATION,\n    composeDraperyGroups,\n    composeDraperySampleActions,\n    discoverAdaptiveDraperyProfile,\n    ensureFlattenedSoftTopFields,\n    syncSampleActions(root) {\n      return syncDraperySampleActions(root, config.sampleActions, config.features?.sampleActions);\n    },\n    bindOptionMedia,\n    setupMobileColorDisclosure,\n    realProtectionBox(root) {\n      return realDraperyProtectionBox(root);\n    },\n    enableSizeProtection(root) {\n      const box = realDraperyProtectionBox(root);\n      if (!box || groupDefinition(config.groups, 'size-protection')) return box;\n      config.groups.push(composeDraperyGroups([{\n        key: 'size-protection',\n        ids: [DRAPERY_PROTECTION.fieldId],\n        optional: true\n      }])[0]);\n      return box;\n    },\n    groupDefinition(key) {\n      return groupDefinition(config.groups, key);\n    },\n    groupIndex(key) {\n      return groupIndex(config.groups, key);\n    },\n    nextGroupIndex(key) {\n      return nextGroupIndex(config.groups, key);\n    },\n    continueLabel(key) {\n      return continueLabel(config.groups, key);\n    },\n    pageStructure: (config.master || config.kind) === 'drapery' ? DRAPERY_PAGE_STRUCTURE : null,\n    chapterTitle(kind) {\n      const definition = engine.pageStructure?.chapters.find(chapter => chapter.kind === kind);\n      if (!definition) return '';\n      if (!definition.titleSource) return definition.title;\n      const prefix = definition.titlePrefix || '';\n      const subject = config[definition.titleSource] || '';\n      return [prefix, subject].filter(Boolean).join(' ');\n    },\n    chapterDefinitions() {\n      if (engine.pageStructure) {\n        return engine.pageStructure.chapters.map(definition => ({\n          kind: definition.kind,\n          title: definition.nestedTitle ? null : engine.chapterTitle(definition.kind)\n        }));\n      }\n      const definitions = Array.isArray(config.chapters) ? config.chapters : [];\n      const seen = new Set();\n      return definitions.filter(definition => {\n        if (!definition || typeof definition.kind !== 'string' || seen.has(definition.kind)) return false;\n        seen.add(definition.kind);\n        return true;\n      });\n    },\n    chapter(kind, title, product = config.kind) {\n      const namespace = engine.master === 'drapery' ? 'tarryn' : product;\n      const node = document.createElement('section');\n      node.id = `cz-${namespace}-chapter-${kind}`;\n      node.className = `cz-pdp-chapter cz-${namespace}-chapter cz-${namespace}-chapter--${kind}`;\n      if (engine.master === 'drapery') node.dataset.czComponentSource = 'tarryn-whole-page-master-v1';\n      node.dataset.czChapter = kind;\n      if (title) {\n        const heading = document.createElement('h2');\n        if (engine.master === 'drapery') heading.className = 'cz-chapter-heading';\n        heading.textContent = title;\n        node.append(heading);\n      }\n      return node;\n    },\n    mountChapters(main, definitions = engine.chapterDefinitions(), product = config.kind) {\n      if (!main || main.dataset.czPdpChaptersMounted) return null;\n      const chapters = definitions.map(({kind, title}) => engine.chapter(kind, title, product));\n      main.dataset.czChapter = 'customize';\n      main.dataset.czPdpChaptersMounted = product;\n      main.after(...chapters);\n      return Object.fromEntries(chapters.map((node) => [node.dataset.czChapter, node]));\n    },\n    step(index, title, product = config.kind, key = '') {\n      const node = document.createElement('section');\n      node.className = `cz-pdp-step cz-${product}-step`;\n      node.dataset.czStep = String(index);\n      if (key) node.dataset.czStepKey = key;\n      node.dataset.czComponentSource = DRAPERY_COMPONENT_VERSION;\n      if (engine.master === 'drapery') node.classList.add('cz-config-step');\n      const heading = document.createElement('h3');\n      heading.className = 'cz-pdp-step-heading';\n      if (engine.master === 'drapery') heading.classList.add('cz-config-heading');\n      const button = document.createElement('button');\n      button.type = 'button';\n      button.className = 'cz-pdp-step-toggle';\n      if (engine.master === 'drapery') button.classList.add('cz-config-toggle');\n      if (product === 'rylan') { button.classList.add('cz-rylan-option-step'); button.dataset.czRylanGroup = String(index); }\n      button.setAttribute('aria-expanded', 'false');\n      button.setAttribute('aria-controls', engine.master === 'drapery' ? `cz-config-panel-${index}` : `cz-${product}-step-panel-${index}`);\n      const number = document.createElement('span');\n      number.className = 'cz-pdp-step-number';\n      number.classList.add(engine.master === 'drapery' ? 'cz-config-number' : 'cz-rylan-option-step__number');\n      number.textContent = String(index + 1);\n      const label = document.createElement('span');\n      label.className = 'cz-pdp-step-label';\n      label.classList.add(engine.master === 'drapery' ? 'cz-config-label' : 'cz-rylan-option-step__label');\n      const name = document.createElement('span');\n      name.className = 'cz-pdp-step-title';\n      name.classList.add(engine.master === 'drapery' ? 'cz-config-title' : 'cz-rylan-option-step__title');\n      name.textContent = title;\n      const summary = document.createElement('span');\n      summary.className = 'cz-pdp-step-summary';\n      summary.classList.add(engine.master === 'drapery' ? 'cz-config-summary' : 'cz-rylan-option-step__summary');\n      label.append(name, summary);\n      const symbol = document.createElement('span');\n      symbol.className = 'cz-pdp-step-symbol';\n      symbol.classList.add(engine.master === 'drapery' ? 'cz-config-symbol' : 'cz-rylan-option-step__symbol');\n      symbol.setAttribute('aria-hidden', 'true');\n      button.append(number, label, symbol);\n      heading.append(button);\n      const panel = document.createElement('div');\n      panel.className = 'cz-pdp-step-panel';\n      if (engine.master === 'drapery') panel.classList.add('cz-config-panel');\n      panel.id = engine.master === 'drapery' ? `cz-config-panel-${index}` : `cz-${product}-step-panel-${index}`;\n      panel.hidden = true;\n      const error = document.createElement('p');\n      error.className = 'cz-pdp-step-error';\n      if (engine.master === 'drapery') error.classList.add('cz-config-error');\n      error.setAttribute('role', 'alert');\n      error.hidden = true;\n      panel.append(error);\n      node.append(heading, panel);\n      return node;\n    },\n    stepHelp(heading, definition, index, options = {}) {\n      if (!heading || !definition?.help) return null;\n      let button = heading.querySelector(':scope > .cz-step-help');\n      if (!button) {\n        button = document.createElement('button');\n        button.type = 'button';\n        button.className = 'cz-pdp-step-help cz-step-help';\n        button.dataset.czComponentSource = DRAPERY_COMPONENT_VERSION;\n        button.innerHTML = '<span class=\"cz-help-icon\" aria-hidden=\"true\">?</span>';\n        heading.append(button);\n      }\n      if (options.className) button.classList.add(options.className);\n      const help = definition.help;\n      button.dataset.czHelpKind = options.kind || help.kind || `step-${index + 1}`;\n      button.setAttribute('aria-label', options.label || help.label || `About ${definition.title}`);\n      button.setAttribute('aria-haspopup', 'dialog');\n      if (options.ariaControls) button.setAttribute('aria-controls', options.ariaControls);\n      const position = () => {\n        const title = heading.querySelector('.cz-config-title');\n        if (!title?.getBoundingClientRect().width) return;\n        const headingRect = heading.getBoundingClientRect();\n        const titleRect = title.getBoundingClientRect();\n        button.style.left = `${Math.max(0, Math.min(titleRect.right - headingRect.left + 6, headingRect.width - 40))}px`;\n        button.style.top = `${titleRect.top - headingRect.top + titleRect.height / 2}px`;\n      };\n      requestAnimationFrame(position);\n      if (!heading.dataset.czSharedHelpObserved && window.ResizeObserver) {\n        heading.dataset.czSharedHelpObserved = 'true';\n        new ResizeObserver(position).observe(heading);\n      }\n      return button;\n    },\n    continueButton(label, className = '') {\n      const button = document.createElement('button');\n      button.type = 'button';\n      button.className = ['cz-pdp-step-continue', className].filter(Boolean).join(' ');\n      button.dataset.czComponentSource = DRAPERY_COMPONENT_VERSION;\n      button.textContent = label;\n      return button;\n    },\n    activate(root, index, selectors = {}) {\n      const stepSelector = selectors.step || '.cz-pdp-step';\n      const toggleSelector = selectors.toggle || '.cz-pdp-step-toggle';\n      const panelSelector = selectors.panel || '.cz-pdp-step-panel';\n      root.querySelectorAll(stepSelector).forEach((step) => {\n        const active = Number(step.dataset.czStep) === index;\n        const toggle = step.querySelector(toggleSelector);\n        const panel = step.querySelector(panelSelector);\n        if (toggle && toggle.getAttribute('aria-expanded') !== String(active)) toggle.setAttribute('aria-expanded', String(active));\n        if (panel && panel.hidden === active) panel.hidden = !active;\n      });\n    },\n    controller(root, options) {\n      let active = options.initial ?? 0;\n      const apply = (index, focus = false) => {\n        active = index;\n        if (options.apply) options.apply(index);\n        else engine.activate(root, index);\n        if (focus && index >= 0) options.position?.(index);\n      };\n      return {\n        get active() { return active; },\n        open: apply,\n        toggle(index, focus = true) { apply(active === index ? -1 : index, focus); },\n        next(index) {\n          const count = typeof options.count === 'function' ? options.count() : options.count;\n          if (index < count - 1) apply(index + 1, true); else options.onComplete?.();\n        },\n        bind(button, index, focusOnClick = () => true) { button.addEventListener('click', (event) => {\n          options.beforeToggle?.();\n          if (options.onToggle) options.onToggle(index);\n          else this.toggle(index, focusOnClick(event));\n        }); }\n      };\n    },\n    guided(root, options) {\n      const definitions = options.definitions || config.groups || [];\n      const product = options.product || config.profile || config.kind;\n      root.classList.add('cz-pdp-guided-root');\n      root.dataset.czComponentSource = DRAPERY_COMPONENT_VERSION;\n      const controller = engine.controller(root, {\n        count: () => definitions.length,\n        initial: options.initial ?? 0,\n        onToggle: options.onToggle,\n        apply: options.apply || ((index) => engine.activate(root, index)),\n        position: options.position\n      });\n      const ensureStep = (index, title = definitions[index]?.title) => {\n        let step = root.querySelector(`.cz-pdp-step[data-cz-step=\"${index}\"]`);\n        if (step) {\n          if (definitions[index]?.key) step.dataset.czStepKey = definitions[index].key;\n        } else {\n          step = engine.step(index, title, product, definitions[index]?.key || '');\n          const outside = [...root.children].find((child) => !child.classList.contains('cz-pdp-step'));\n          root.insertBefore(step, outside || null);\n          controller.bind(step.querySelector('.cz-pdp-step-toggle'), index);\n        }\n        const collection = root.querySelector('.ymq-options-box[ymq-option-label=\"Collection\"]');\n        if (collection) {\n          syncCollectionDisplayNames(collection);\n          collection.classList.add('cz-collection-before-color');\n          collection.dataset.czCollectionBeforeColor = '';\n          const orderedSteps = [...root.querySelectorAll(':scope > .cz-pdp-step')]\n            .sort((left, right) => Number(left.dataset.czStep) - Number(right.dataset.czStep));\n          orderedSteps.forEach(node => root.append(node));\n          root.prepend(collection);\n        }\n        return step;\n      };\n      return {controller, ensureStep};\n    },\n    bindStepHelp(root, definitions) {\n      if (!root || root.dataset.czStepHelpBound) return;\n      root.dataset.czStepHelpBound = 'true';\n      root.addEventListener('click', (event) => {\n        const button = event.target.closest?.('.cz-step-help[data-cz-help-kind]');\n        if (!button || !root.contains(button) || button.classList.contains('cz-tarryn-help')) return;\n        const step = button.closest('.cz-pdp-step');\n        const definition = definitions[Number(step?.dataset.czStep)];\n        const help = definition?.help;\n        if (!help) return;\n        let dialog = document.getElementById('cz-pdp-step-help-dialog');\n        if (!dialog) {\n          dialog = document.createElement('dialog');\n          dialog.id = 'cz-pdp-step-help-dialog';\n          dialog.className = 'cz-pdp-step-help-dialog';\n          dialog.innerHTML = '<div class=\"cz-pdp-step-help-dialog__body\"><button type=\"button\" class=\"cz-pdp-step-help-dialog__close\" aria-label=\"Close\">\u00D7</button><h2></h2><p></p><a hidden></a></div>';\n          document.body.append(dialog);\n          dialog.querySelector('button').addEventListener('click', () => dialog.close());\n          dialog.addEventListener('click', (click) => { if (click.target === dialog) dialog.close(); });\n        }\n        const title = dialog.querySelector('h2');\n        const copy = dialog.querySelector('p');\n        const link = dialog.querySelector('a');\n        title.textContent = help.title || definition.title;\n        copy.textContent = help.text || '';\n        link.hidden = !help.href;\n        if (help.href) { link.href = help.href; link.textContent = help.linkText || 'View guide'; }\n        dialog.addEventListener('close', () => button.focus({preventScroll: true}), {once: true});\n        dialog.showModal();\n      });\n    },\n    activeBox(box, exclude = '') {\n      return !box.hidden && box.style.display !== 'none' && !box.classList.contains('ymq-option-condition-hide') &&\n        [...box.querySelectorAll('input, select, textarea')].some((input) => !input.disabled && input.type !== 'hidden' && (!exclude || !input.matches(exclude)));\n    },\n    values(box, exclude = '') {\n      return [...box.querySelectorAll('input:checked:not(:disabled), select:not(:disabled), textarea:not(:disabled), input.ymq-input-text:not(:disabled)')]\n        .filter((input) => !exclude || !input.matches(exclude))\n        .map((input) => input.value.trim()).filter(Boolean);\n    },\n    missingRequired(boxes, exclude = '') {\n      return boxes.find((box) => engine.activeBox(box, exclude) && /\\brequired\\b/.test(box.getAttribute('ymq-option-validate') || '') && !engine.values(box, exclude).length);\n    },\n    details(contents, titles) {\n      const info = document.createElement('div');\n      info.className = 'cz-pdp-info';\n      info.setAttribute('aria-label', 'Product information');\n      contents.forEach((content, index) => {\n        const item = document.createElement('details');\n        const summary = document.createElement('summary');\n        summary.textContent = titles[index] || `More information ${index + 1}`;\n        item.append(summary, content);\n        item.addEventListener('toggle', () => {\n          if (item.open) info.querySelectorAll('details').forEach((other) => { if (other !== item) other.open = false; });\n        });\n        info.append(item);\n      });\n      return info;\n    },\n    supportContact(root) {\n      if (!root) return false;\n      const popupOnly = config.master === 'drapery'\n        && (document.body.classList.contains('template-suffix-drapery-unified')\n          || ['11719366345022', '12044121178430', '12032865698110'].includes(String(config.productId)));\n      const form = root.querySelector('form.g-container');\n      if (!form) return false;\n      let card = root.querySelector('.cz-consult-card');\n      if (card?.czContactForm === form && form.hasAttribute('data-cz-contact-fields')) return true;\n      let button = card?.querySelector('button');\n      if (!card) {\n        card = document.createElement('div');\n        card.className = 'cz-consult-card';\n        card.dataset.czComponentSource = DRAPERY_COMPONENT_VERSION;\n        const heading = document.createElement('h2');\n        heading.textContent = 'We\u2019re here to help';\n        const intro = document.createElement('p');\n        intro.textContent = 'Questions about measurements, fabric or your order? Our team can help.';\n        button = document.createElement('button');\n        button.type = 'button';\n        button.textContent = 'Send a message';\n        button.setAttribute('aria-expanded', 'false');\n        const zoom = document.createElement('a');\n        zoom.href = '/products/complimentary-1-on-1-zoom-consultation';\n        zoom.textContent = 'Book a free Zoom consultation \u2192';\n        zoom.className = 'cz-tarryn-help';\n        zoom.dataset.czHelpKind = 'consultation';\n        zoom.setAttribute('aria-haspopup', 'dialog');\n        card.append(heading, intro, button, zoom);\n        form.before(card);\n        if (popupOnly) {\n          button.setAttribute('aria-haspopup', 'dialog');\n          window.addEventListener('cz-contact-state', event => {\n            button.setAttribute('aria-expanded', String(event.detail?.open === true));\n          });\n        }\n        button.addEventListener('click', () => {\n          const currentForm = root.querySelector('form.g-container');\n          if (popupOnly) {\n            if (currentForm) currentForm.hidden = true;\n            window.dispatchEvent(new CustomEvent('cz-contact-open', {detail: {source: 'launcher'}}));\n            return;\n          }\n          if (!currentForm) return;\n          currentForm.hidden = !currentForm.hidden;\n          button.setAttribute('aria-expanded', String(!currentForm.hidden));\n          button.textContent = currentForm.hidden ? 'Send a message' : 'Hide message form';\n          if (!currentForm.hidden) currentForm.querySelector('.cz-name-field input, input:not([type=\"hidden\"]), textarea')?.focus({preventScroll: true});\n        });\n      }\n      const formHost = form.closest('[id]');\n      if (popupOnly) button.setAttribute('aria-controls', 'cz-contact-dialog');\n      else if (formHost?.id) button.setAttribute('aria-controls', formHost.id);\n      card.czContactForm = form;\n      form.dataset.czContactFields = '';\n      form.hidden = true;\n      button.setAttribute('aria-expanded', 'false');\n      button.textContent = 'Send a message';\n      return true;\n    },\n    openDrawer(drawer, opener, closeButton, state) {\n      if (opener) state.opener = opener;\n      if (drawer.getAttribute('aria-hidden') === 'true') state.previousOverflow = document.body.style.overflow;\n      document.body.style.overflow = 'hidden';\n      drawer.setAttribute('aria-hidden', 'false');\n      drawer.classList.add('ymq-modal-open');\n      closeButton?.focus({preventScroll: true});\n    },\n    closeDrawer(drawer, state) {\n      drawer.setAttribute('aria-hidden', 'true');\n      drawer.classList.remove('ymq-modal-open');\n      document.body.style.overflow = state.previousOverflow || '';\n      state.opener?.focus({preventScroll: true});\n    },\n    bindDialog(dialog, closeButton, openers) {\n      let opener;\n      openers.forEach(({button, beforeOpen}) => button?.addEventListener('click', (event) => {\n        beforeOpen?.(event);\n        if (event.defaultPrevented && !beforeOpen) return;\n        opener = button;\n        if (!dialog.open) dialog.showModal();\n        closeButton?.focus({preventScroll: true});\n      }));\n      closeButton?.addEventListener('click', () => dialog.close());\n      dialog.addEventListener('click', (event) => { if (event.target === dialog) dialog.close(); });\n      dialog.addEventListener('close', () => opener?.focus({preventScroll: true}));\n    }\n  };\n  window.czPdpShared = engine;\n\n  if (config.features?.guidedOptions === true && config.features?.guidedAdapter === 'legacy-shared') {\n    const mountGuidedProfile = () => {\n      const root = document.querySelector(`ymq-option[ymq-option-product-id=\"${config.productId}\"]`);\n      const color = root?.querySelector('[ymq-option-label^=\"Color\"]');\n      const needsColor = config.groups.some(group => group.key === 'color' && ((group.ids || []).length || group.source === 'native-variants'));\n      const requiredIds = config.groups.filter(group => group.optional !== true).flatMap((group) => group.ids || []);\n      if (!root || (needsColor && !color) || requiredIds.some((id) => !root.querySelector(`[ymq-option-id=\"${id}\"]`))) return false;\n      if (root.dataset.czPdpGuidedReady) return true;\n      const guided = engine.guided(root, {definitions: config.groups, product: config.profile, initial: 0});\n      const steps = config.groups.map((group, index) => {\n        const step = guided.ensureStep(index, group.title);\n        const help = engine.stepHelp(step.querySelector('.cz-pdp-step-heading'), group, index);\n        if (engine.master === 'drapery' && help) {\n          help.classList.add('cz-tarryn-help');\n          help.setAttribute('aria-controls', 'cz-tarryn-help-drawer');\n        }\n        const panel = step.querySelector('.cz-pdp-step-panel');\n        const nodes = group.key === 'color'\n          ? [color, ...(group.ids || []).map((id) => root.querySelector(`[ymq-option-id=\"${id}\"]`)).filter(Boolean)]\n          : (group.ids || []).map((id) => root.querySelector(`[ymq-option-id=\"${id}\"]`)).filter(Boolean);\n        nodes.forEach((node) => { if (node.parentElement !== panel) panel.append(node); });\n        if (group.key === 'header') nodes.forEach((node) => {\n          node.querySelector('.ymq-option-value-info')?.classList.add('cz-header-grid');\n          node.querySelectorAll('.ymq-option-label').forEach((label) => {\n            const input = label.querySelector('input[type=\"radio\"]');\n            if (!input || !label.querySelector('img') || label.querySelector('.cz-header-name')) return;\n            const name = document.createElement('span');\n            name.className = 'cz-header-name';\n            name.textContent = input.value.split('|')[0].trim();\n            label.append(name);\n          });\n        });\n        if (index < config.groups.length - 1) {\n          let next = panel.querySelector(':scope > .cz-pdp-step-continue');\n          if (!next) {\n            next = engine.continueButton(`Continue to ${config.groups[index + 1].title}`);\n            next.addEventListener('click', () => {\n              if (!validateStep(index, true)) return;\n              guided.controller.next(index);\n            });\n            panel.append(next);\n          }\n        }\n        return step;\n      });\n      const boxesFor = (index) => [...steps[index].querySelectorAll('[ymq-option-id]')];\n      const focusTarget = (box) => {\n        const fields = [...(box?.querySelectorAll('select:not(:disabled), input:not([type=\"hidden\"]):not(:disabled), textarea:not(:disabled)') || [])];\n        const visible = fields.find((field) => field.getClientRects().length && getComputedStyle(field).visibility !== 'hidden');\n        if (visible) return visible;\n        if (box && !box.hasAttribute('tabindex')) box.tabIndex = -1;\n        return box;\n      };\n      const validateStep = (index, showError = false) => {\n        const missing = engine.missingRequired(boxesFor(index));\n        const error = steps[index].querySelector('.cz-pdp-step-error');\n        if (!missing) {\n          if (error) error.hidden = true;\n          return true;\n        }\n        if (showError && error) {\n          error.textContent = `Please complete ${config.groups[index].title.toLowerCase()} to continue.`;\n          error.hidden = false;\n          guided.controller.open(index, false);\n          focusTarget(missing)?.focus({preventScroll: true});\n        }\n        return false;\n      };\n      const updateSummaries = () => {\n        steps.forEach((step, index) => {\n          const values = boxesFor(index).flatMap((box) => engine.activeBox(box) ? engine.values(box).filter((value) => value !== '0') : []);\n          const summary = step.querySelector('.cz-pdp-step-summary');\n          if (summary) summary.textContent = [...new Set(values)].slice(0, 3).join(', ') || config.groups[index].emptySummary || '';\n        });\n      };\n      root.addEventListener('change', updateSummaries);\n      root.addEventListener('input', updateSummaries);\n      const conditionObserver = new MutationObserver(updateSummaries);\n      conditionObserver.observe(root, {attributes: true, attributeFilter: ['class', 'hidden'], subtree: true});\n      const add = productForm.querySelector('button[name=\"add\"], input[name=\"add\"], .product-form__submit');\n      add?.addEventListener('click', (event) => {\n        const invalid = config.groups.findIndex((_, index) => !validateStep(index));\n        if (invalid < 0) return;\n        event.preventDefault();\n        event.stopImmediatePropagation();\n        validateStep(invalid, true);\n      }, true);\n      engine.activate(root, 0);\n      engine.bindStepHelp(root, config.groups);\n      updateSummaries();\n      root.dataset.czPdpGuidedReady = config.profile;\n      return true;\n    };\n    if (!mountGuidedProfile()) {\n      const observer = new MutationObserver(() => { if (mountGuidedProfile()) observer.disconnect(); });\n      observer.observe(productForm, {childList: true, subtree: true});\n      setTimeout(() => observer.disconnect(), 30000);\n    }\n  }\n\n  if (config.swatchGuidance) {\n    const applySwatchGuidance = () => {\n      const box = document.querySelector(`.ymq-options-box[ymq-option-id=\"${config.swatchGuidance.optionId}\"] .ymq-option-custome-text`);\n      if (!box || box.dataset.czPdpGuidanceApplied) return false;\n      const paragraph = document.createElement('p');\n      const label = document.createElement('strong');\n      label.textContent = config.swatchGuidance.label;\n      const link = document.createElement('a');\n      link.href = config.swatchGuidance.href;\n      link.textContent = config.swatchGuidance.linkText;\n      paragraph.append(label, document.createTextNode(' \u2014 '), link, document.createTextNode(`. ${config.swatchGuidance.text}`));\n      box.replaceChildren(paragraph);\n      box.dataset.czPdpGuidanceApplied = 'true';\n      return true;\n    };\n    if (!applySwatchGuidance()) {\n      const observer = new MutationObserver(() => { if (applySwatchGuidance()) observer.disconnect(); });\n      observer.observe(productForm, {childList: true, subtree: true});\n      setTimeout(() => observer.disconnect(), 30000);\n    }\n  }\n\n  if (config.visibleFacts) {\n    const mountFacts = () => {\n      const material = [...productForm.querySelectorAll('strong')].find((node) => node.textContent.trim() === 'Material:');\n      const details = material?.closest('.metafield-rich_text_field');\n      if (!details || details.querySelector('[data-cz-pdp-profile-facts]')) return Boolean(details);\n      const facts = document.createElement('div');\n      facts.className = 'cz-pdp-profile-facts';\n      facts.dataset.czPdpProfileFacts = config.profile;\n      config.visibleFacts.forEach(({label, value}) => {\n        const row = document.createElement('p');\n        const term = document.createElement('strong');\n        term.textContent = `${label}:`;\n        row.append(term, document.createTextNode(` ${value}`));\n        facts.append(row);\n      });\n      material.parentElement.after(facts);\n      return true;\n    };\n    if (!mountFacts()) document.addEventListener('DOMContentLoaded', mountFacts, {once: true});\n  }\n})();\n"],
  "mappings": "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",
  "names": ["source", "virtualInput", "proxyInput", "grommetSelected"]
}
