{
  "version": 3,
  "sources": ["/cdn/shop/t/174/assets/cs-ring-lab.js?mobile-polish-check=20260906"],
  "sourcesContent": ["/* Optional final editorial item. No network requests or source-map mutations. */\n(function(root){\n'use strict';\nif(root.CorsailleEditorialOnHand?.revision===2)return;\nconst SCHEMA='corsaille.editorial-on-hand.v1',id=x=>String(x??'').split('/').pop(),hash=x=>/^[a-f0-9]{64}$/.test(x??''),units=['single','pair','ea','el'],families=['white','yellow','rose'];\nfunction safeImage(value){try{const u=new URL(value);return u.protocol==='https:'&&u.hostname==='cdn.shopify.com'&&!u.username&&!u.password&&/^\\/s\\/files\\/1\\/1002\\/7116\\/1688\\/files\\//.test(u.pathname)&&/\\.(?:webp|avif|jpe?g)$/i.test(u.pathname)&&!['height','crop','crop_width','crop_height'].some(k=>u.searchParams.has(k))?u.href:null;}catch{return null;}}\nconst canonical=value=>{const u=safeImage(value);return u?new URL(u).pathname:'';};\nfunction displayURL(image,width,dpr=1){const u=new URL(image.url),need=Math.max(1,Number(width)||600)*Math.min(2,Math.max(1,Number(dpr)||1));u.searchParams.set('width',String([480,720,960,1200,1600].find(n=>n>=need)||1600));return u.href;}\nfunction selectedUnit(native,variantId){const v=native?.product?.variants?.find(v=>id(v.id)===id(variantId))||native?.variant,labels=new Map([['Pereche','pair'],['Perechea','pair'],['Doar pentru ea','ea'],['Doar pentru el','el']]),matches=(v?.options??[]).filter(value=>labels.has(value));if(matches.length===1)return labels.get(matches[0]);if(matches.length>1)return null;return native?.dataset?.pairPurchase==='true'||native?.dataset?.pair==='true'?null:'single';}\nfunction resolve(manifest,handle,productId,variantId,ctx={}){try{\n const p=manifest?.products?.[handle],r=p?.editorial_on_hand_v1;\n if(!p||ctx.validated!==true||p.requiresGeometryReview||p.requiresComponentReview||p.requiresSampleSpecReview||!r||r.schema!==SCHEMA||r.enabled!==true||id(p.productId)!==id(productId)||id(r.product_id)!==id(productId)||r.handle!==handle||!/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(handle)||!/^[1-9]\\d*$/.test(id(productId))||(r.source_key!==null&&!/^cs-source-[a-f0-9]{20}$/.test(r.source_key))||(ctx.sourceKey&&ctx.sourceKey!==r.source_key)||!/^[a-z0-9][a-z0-9-]{0,63}$/.test(r.version)||!families.includes(r.pictured_family)||!units.includes(r.pictured_unit)||!units.includes(ctx.unit)||r.variant_units?.[id(variantId)]!==ctx.unit||!Object.prototype.hasOwnProperty.call(p.variants??{},id(variantId)))return null;\n if(JSON.stringify(Object.keys(r.variant_units??{}).sort())!==JSON.stringify(Object.keys(p.variants).sort())||!Object.values(r.variant_units).every(x=>units.includes(x)))return null;\n if(r.pictured_unit==='single'?ctx.unit!=='single':ctx.unit==='single'||(r.pictured_unit==='pair'?ctx.unit!=='pair':ctx.unit!=='pair'&&ctx.unit!==r.pictured_unit))return null;\n const refs=new Set(Object.values(p.groups??{}).flatMap(g=>(g.images??[]).map(i=>id(i.mediaId||i.sourceMediaId))).filter(Boolean));\n if(!Array.isArray(r.source_media_ids)||r.source_media_ids.length<2||new Set(r.source_media_ids).size!==r.source_media_ids.length||!r.source_media_ids.every(x=>/^[1-9]\\d*$/.test(x)&&refs.has(x)&&!(ctx.excludedIds??[]).includes(x))||!Array.isArray(r.source_sha256)||r.source_sha256.length!==r.source_media_ids.length||!r.source_sha256.every(hash))return null;\n const i=r.image,q=r.review;\n if(!i||i.representation!=='generated'||!safeImage(i.url)||!/^[1-9]\\d*$/.test(id(i.media_id))||!hash(i.sha256)||!Number.isInteger(i.width)||i.width<1200||i.width>4096||i.height!==i.width||q?.status!=='APPROVED'||q.product_identity!==true||q.geometry!==true||q.scale!==true||q.anatomy!==true||q.metal!==true||q.component_scope!==true||!hash(q.evidence_sha256)||q.output_sha256!==i.sha256)return null;\n const metal={white:'metal alb',yellow:'aur galben',rose:'aur roz'}[r.pictured_family],parts=['Pe m\u00E2n\u0103 \u00B7 ilustra\u021Bie editorial\u0103.'];\n if(r.pictured_family!==ctx.family)parts.push('\u00CEn imagine: '+metal+'.');\n if(['ea','el'].includes(r.pictured_unit)&&ctx.unit==='pair')parts.push('\u00CEn imagine: verigheta pentru '+(r.pictured_unit==='ea'?'ea':'el')+' din pereche.');\n if(r.pictured_unit==='pair'&&ctx.unit!=='pair')parts.push('Perechea \u00EEn imagine; selec\u021Bia ta include doar verigheta pentru '+(ctx.unit==='ea'?'ea':'el')+'.');\n const caption=parts.join(' ');\n return{kind:'image',url:safeImage(i.url),mediaId:id(i.media_id),width:i.width,height:i.height,role:'editorial-on-hand',representation:'generated',family:r.pictured_family,editorialSha256:i.sha256,picturedComponent:({ea:'her',el:'him',pair:'pair',single:'single'})[r.pictured_unit],editorialLabel:r.pictured_unit==='pair'?'Pe m\u00E2ini':'Pe m\u00E2n\u0103',editorialKey:id(productId)+':'+r.version+':'+i.sha256,editorialCaption:caption,alt:(ctx.title||handle.replace(/-/g,' '))+' \u2014 pe m\u00E2n\u0103, '+metal+'. '+caption};\n }catch{return null;}}\nconst COLLECTION_SCHEMA='corsaille.editorial-on-hand.v2',componentUnits={her:'ea',him:'el',pair:'pair',single:'single'};\nfunction resolveAll(manifest,handle,productId,variantId,ctx={}){\n const result=[],legacy=resolve(manifest,handle,productId,variantId,ctx);if(legacy)result.push(legacy);\n try{const p=manifest?.products?.[handle],set=p?.editorial_on_hand_v2;\n  if(!set||set.schema!==COLLECTION_SCHEMA||set.enabled!==true||id(set.product_id)!==id(productId)||set.handle!==handle||(p.editorial_on_hand_v1&&set.source_key!==p.editorial_on_hand_v1.source_key)||!Array.isArray(set.items)||!set.items.length||set.items.length>6||new Set(set.items.map(i=>i?.version)).size!==set.items.length)return result;\n  const permitted=['schema','enabled','product_id','handle','source_key','variant_units','items'];if(Object.keys(set).some(k=>!permitted.includes(k)))return result;\n  const additions=[];\n  for(const item of set.items){\n   if(!item||!Object.hasOwn(componentUnits,item.pictured_component)||Object.keys(item).some(k=>!['version','pictured_component','pictured_family','source_media_ids','source_sha256','image','review'].includes(k)))continue;\n   const r={schema:SCHEMA,enabled:true,product_id:set.product_id,handle:set.handle,source_key:set.source_key,variant_units:set.variant_units,version:item.version,pictured_unit:componentUnits[item.pictured_component],pictured_family:item.pictured_family,source_media_ids:item.source_media_ids,source_sha256:item.source_sha256,image:item.image,review:item.review};\n   const overlay={products:{[handle]:{...p,editorial_on_hand_v1:r}}},e=resolve(overlay,handle,productId,variantId,ctx);if(!e)continue;\n   if(item.pictured_component==='pair'){e.editorialCaption=e.editorialCaption.replace('Pe m\u00E2n\u0103 \u00B7','Pe m\u00E2ini \u00B7')+' \u00CEn imagine: verighetele perechii.';e.alt=(ctx.title||handle.replace(/-/g,' '))+' \u2014 '+e.editorialCaption;}\n   additions.push(e);\n  }\n  // Keep the couple portrait as the final chapter, regardless of upload order.\n  additions.sort((a,b)=>Number(a.picturedComponent==='pair')-Number(b.picturedComponent==='pair'));result.push(...additions);\n }catch{/* Optional malformed metadata cannot alter the original gallery. */}\n const unique=[];for(const e of result)if(!unique.some(x=>x.editorialKey===e.editorialKey||x.mediaId===e.mediaId||x.editorialSha256===e.editorialSha256||canonical(x.url)===canonical(e.url)))unique.push(e);return unique;\n}\nfunction sequenceKey(items){return JSON.stringify((items||[]).filter(i=>i.editorialKey).map(i=>[i.editorialKey,i.editorialCaption,i.alt]));}\nfunction append(items,manifest,handle,productId,variantId,ctx){\n if(!Array.isArray(items)||!items.length)return items;\n const original=items.filter(i=>!(i.role==='editorial-on-hand'&&i.editorialKey));if(!original.length)return original;\n const extra=resolveAll(manifest,handle,productId,variantId,ctx).filter(e=>!original.some(i=>canonical(i.url)===canonical(e.url)||id(i.mediaId||i.sourceMediaId)===e.mediaId));\n const result=[...original,...extra];return result.length===items.length&&result.every((i,n)=>i.url===items[n].url&&i.editorialKey===items[n].editorialKey&&i.editorialCaption===items[n].editorialCaption&&i.alt===items[n].alt)?items:result;\n}\nfunction appendVideo(controller,state,variantId){if(!state)return state;const n=controller.native,unit=state.unit||selectedUnit(n,variantId),items=append(state.items,controller.manifest,n?.dataset?.handle,controller.dataset.productId,variantId,{validated:true,sourceKey:controller.dataset.sourceKey,unit,family:state.family,title:n?.product?.title,excludedIds:(n?.dataset?.excludedMediaIds||'').split('|').filter(Boolean)});return items===state.items?state:{...state,items};}\nfunction paintNative(n){const i=n.images?.[n.activeImage];if(!i?.editorialKey)return;const label=n.querySelector('[data-image-label]'),note=n.querySelector('[data-media-note]'),caption=n.querySelector('[data-studio-caption]');if(label)label.textContent=i.editorialLabel||'Pe m\u00E2n\u0103';if(note)note.textContent=i.editorialCaption;if(caption){caption.textContent=i.editorialCaption;caption.hidden=false;}}\nfunction paintThumbnails(n){n.querySelectorAll('[data-image-index]').forEach(b=>{const i=n.images?.[Number(b.dataset.imageIndex)];if(!i?.editorialKey)return;b.setAttribute('aria-label',i.alt);const image=b.querySelector('img');if(image){image.loading='lazy';image.width=180;image.height=180;}});}\nfunction paintVideo(c){const i=c.current?.items?.[c.active];c.ui?.querySelectorAll('[data-vfg-index]').forEach(b=>{const frame=c.current.items[Number(b.dataset.vfgIndex)];if(frame?.editorialKey)b.setAttribute('aria-label',frame.alt);});if(!i?.editorialKey)return;c.photo.alt=i.alt;c.ui.querySelector('[data-vfg-label]').textContent=i.editorialLabel||'Pe m\u00E2n\u0103';c.ui.querySelector('[data-vfg-caption]').textContent=i.editorialCaption;}\nfunction zoom(c,i){const image=c.ui.querySelector('[data-vfg-enlarged]');image.alt=i?.editorialKey?i.alt:c.native?.mediaAlt?.(i)||c.native?.product?.title||'';c.dialog.setAttribute('aria-label',i?.editorialKey?i.alt:'Fotografie m\u0103rit\u0103');}\nroot.CorsailleEditorialOnHand=Object.freeze({schema:SCHEMA,collectionSchema:COLLECTION_SCHEMA,revision:2,resolve,resolveAll,sequenceKey,append,appendVideo,selectedUnit,displayURL,paintNative,paintThumbnails,paintVideo,zoom});\n})(typeof globalThis==='undefined'?window:globalThis);\r\n\r\n\n(() => {\n  if (customElements.get('corsaille-ring-lab')) return;\n  const norm = value => String(value || '').normalize('NFD').replace(/[\\u0300-\\u036f]/g, '').toLowerCase();\n  const esc = value => String(value ?? '').replace(/[&<>\"']/g, char => ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;', \"'\": '&#39;' }[char]));\n  const diamondStepIcon = \"<svg viewBox=\\\"0 0 32 32\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"1.15\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><path d=\\\"M4 11 10 5h12l6 6-12 16L4 11Z\\\"/><path d=\\\"M4 11h24M10 5l-1 6 7 16 7-16-1-6M10 5l6 6 6-6\\\"/></svg>\";\n  const sizingStepIcon = \"<svg viewBox=\\\"0 0 32 32\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"1.15\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" aria-hidden=\\\"true\\\" focusable=\\\"false\\\"><circle cx=\\\"16\\\" cy=\\\"11.5\\\" r=\\\"7.5\\\"/><circle cx=\\\"16\\\" cy=\\\"11.5\\\" r=\\\"5.1\\\" stroke-width=\\\".9\\\"/><rect x=\\\"3.5\\\" y=\\\"22.5\\\" width=\\\"25\\\" height=\\\"6\\\" rx=\\\".8\\\"/><path d=\\\"M8 22.5v2.2m4-2.2v3.2m4-3.2v2.2m4-2.2v3.2m4-3.2v2.2\\\"/></svg>\";\n  const metalFamily = value => window.CorsailleMetalMedia?.normalizeMetal(value).family || 'unknown';\n  const isQualityOption = option => /calit|quality|claritate|clarity/.test(norm(option.name || option));\n  const optionKind = (option, values) => {\n    const name = norm(option.name || option);\n    if (/marime|size|circumfer/.test(name)) return 'size';\n    if (/metal|material|aliaj/.test(name) || values.some(value => /14k|18k|platin|pt950/.test(norm(value)))) return 'metal';\n    return 'stone';\n  };\n  // One touch gesture policy for stills and the dynamically mounted video stage.\n  const bindGallerySwipe = (gallery, stateForStage, onIntent) => {\n    const abort = new AbortController();\n    const options = { passive: true, signal: abort.signal };\n    let gesture = null, suppressStage = null, suppressUntil = 0;\n    const stageFor = target => {\n      const stage = target?.closest?.('.cl-photo-stage');\n      return stage && gallery.contains(stage) ? stage : null;\n    };\n    const position = (touches, identifier) => Array.from(touches || []).find(touch => touch.identifier === identifier);\n    const track = touch => {\n      const dx = touch.clientX - gesture.x, dy = touch.clientY - gesture.y;\n      if (!gesture.axis && Math.max(Math.abs(dx), Math.abs(dy)) >= 12) {\n        gesture.axis = Math.abs(dx) > Math.abs(dy) * 1.25 ? 'horizontal' : 'vertical';\n      }\n      return { dx, dy };\n    };\n    gallery.addEventListener('touchstart', event => {\n      gesture = null;\n      if (event.touches.length !== 1) return;\n      const stage = stageFor(event.target), state = stage && stateForStage(stage);\n      if (!state) return;\n      const touch = event.touches[0];\n      gesture = { stage, key: state.key, identifier: touch.identifier, x: touch.clientX, y: touch.clientY, started: Date.now(), axis: null };\n      onIntent();\n    }, options);\n    gallery.addEventListener('touchmove', event => {\n      if (!gesture) return;\n      const touch = position(event.touches, gesture.identifier);\n      if (event.touches.length !== 1 || !touch) { gesture = null; return; }\n      track(touch);\n      // Vertical scrolling and pinch zoom stay entirely browser-owned.\n      if (gesture.axis === 'horizontal' && event.cancelable) event.preventDefault();\n    }, { ...options, passive: false });\n    gallery.addEventListener('touchcancel', () => { gesture = null; }, options);\n    gallery.addEventListener('touchend', event => {\n      if (!gesture) return;\n      const touch = position(event.changedTouches, gesture.identifier);\n      if (event.touches.length || !touch) { gesture = null; return; }\n      const { dx, dy } = track(touch), last = gesture;\n      gesture = null;\n      if (last.axis !== 'horizontal') return;\n      // A drag beginning on zoom/play must never become a trailing tap.\n      suppressStage = last.stage; suppressUntil = Date.now() + 500;\n      const state = stateForStage(last.stage);\n      if (state?.key !== last.key || Date.now() - last.started > 1500) return;\n      if (Math.abs(dx) >= 45 && Math.abs(dx) > Math.abs(dy) * 1.25) state.move(dx < 0 ? 1 : -1);\n    }, options);\n    gallery.addEventListener('click', event => {\n      if (event.detail !== 0 && Date.now() < suppressUntil && stageFor(event.target) === suppressStage) {\n        event.preventDefault(); event.stopImmediatePropagation();\n      }\n    }, { capture: true, signal: abort.signal });\n    return () => { gesture = null; abort.abort(); };\n  };\n  class RingLab extends HTMLElement {\n    mediaAlt(image) {\n      const clean = value => String(value ?? '').replace(/\\[cs-[^\\]]+\\]/g, '').replace(/\\s+/g, ' ').trim();\n      if (image?.representation === 'generated') {\n        const alt = clean(image.alt) || this.product.title;\n        return /ilustra\u021Bie/i.test(alt) ? alt : alt + ' \u00B7 ilustra\u021Bie de studio';\n      }\n      const mediaId = String(image?.sourceMediaId ?? image?.mediaId ?? image?.media_id ?? '').split('/').pop();\n      const filename = value => String(value ?? '').split('?')[0].split('/').pop();\n      const imageFile = filename(image?.url);\n      const source = this.product.media?.find(media => media.media_type === 'image' &&\n        ((mediaId && String(media.id) === mediaId) || (imageFile && filename(media.src || media.preview_image?.src) === imageFile)));\n      return clean(source?.alt) || clean(image?.alt) || this.product.title;\n    }\n    connectedCallback() {\n      if (this.dataset.handle === 'epure-oval') return;\n      if (this.ready) {\n        this.setupGalleryNavigation();\n        this.pendingImage = null;\n        this.setupSticky();\n        this.setupCTAGlare();\n        this.purchaseMotion = window.CorsaillePurchaseMotion?.attach(this);\n        this.loadMedia();\n        return;\n      }\n      this.ready = true;\n      this.product = JSON.parse(this.querySelector('[data-product-json]').textContent);\n      this.specs = JSON.parse(this.querySelector('[data-spec-json]')?.textContent || '{}');\n      this.variants = this.product.variants || [];\n      this.variant = this.variants.find(variant => String(variant.id) === this.dataset.selectedId) || this.variants[0];\n      this.selected = [...this.variant.options];\n      this.pairPurchase = window.CorsaillePairPurchase?.create(this);\n      if (this.dataset.pairPurchase === 'true' && !this.pairPurchase) {\n        this.ready = false;\n        this.querySelector('[data-product-form]').addEventListener('submit', event => event.preventDefault());\n        this.querySelector('[data-form-status]').textContent = 'Configura\u021Bia nu este disponibil\u0103 momentan.';\n        return;\n      }\n      this.setupSizing();\n      this.busy = false;\n      this.mediaRevision = 0;\n      this.viewRevision = 0;\n      this.imageLoads = new Map();\n      this.decodedImages = new Set();\n      this.setupPrices();\n      this.setupProductFacts();\n      this.options = this.product.options.map((option, index) => {\n        const values = [...new Set(this.variants.map(variant => variant.options[index]))].filter(value => !this.pairPurchase || index !== 1 || value !== 'F\u0103r\u0103 diamante');\n        return { name: option.name || option, index, values, kind: this.pairPurchase && index === 2 ? 'purchase' : optionKind(option, values) };\n      });\n      this.nativeSize = this.ringSizing ? this.options.find(option => option.kind === 'size' && option.values.every(value => /^\\s*(?:EU\\s*)?\\d{2}(?:[.,]\\d)?\\s*$/.test(value))) : null;\n      // Preserve the declared full-size source for zoom and reference identity.\n      // currentSrc may be a small responsive candidate chosen for this viewport.\n      this.referenceImages = [...this.querySelectorAll('[data-slide] img')].map(image => ({ url: image.src || image.currentSrc, alt: image.alt, role: 'reference', ...this.sampleMetadata(image) }));\n      this.images = [...this.referenceImages];\n      this.activeImage = Math.max(0, [...this.querySelectorAll('[data-slide]')].findIndex(slide => slide.classList.contains('is-active') && !slide.hidden));\n      this.buildOptions();\n      this.bind();\n      this.restoreSizes();\n      this.sync();\n      this.renderThumbnails();\n      this.loadMedia();\n      this.setupSticky();\n      this.setupGalleryCue();\n      this.setupCTAGlare();\n      this.purchaseMotion = window.CorsaillePurchaseMotion?.attach(this);\n      this.dataset.initialized = 'true';\n      this.querySelectorAll('[data-lab-link]').forEach(link => {\n        const url = new URL(link.href); const theme = new URL(location.href).searchParams.get('preview_theme_id');\n        if (theme) url.searchParams.set('preview_theme_id', theme);\n        link.href = url.href;\n      });\n    }\n    setupSizing() {\n      // Liquid binds category from exact family/type metadata, never the title.\n      // A commercial pair (for example earrings) is not two independently sized rings.\n      this.category = this.dataset.category || 'unknown';\n      this.ringSizing = ['engagement', 'wedding'].includes(this.category);\n      this.pair = this.ringSizing && this.dataset.sizingMode === 'ring-pair';\n      this.salePair = this.dataset.salePair === 'true';\n      this.sizes = this.ringSizing ? this.pair ? ['', ''] : [''] : [];\n    }\n    disconnectedCallback() {\n      this.gallerySwipeCleanup?.(); this.gallerySwipeCleanup = null;\n      this.galleryZoomObserver?.disconnect();\n      this.purchaseMotion?.destroy(); this.purchaseMotion = null;\n      this.observer?.disconnect();\n      this.galleryObserver?.disconnect();\n      this.mediaRevision++;\n      this.viewRevision++;\n      clearTimeout(this.mediaWarmTimer);\n      clearTimeout(this.galleryWarmTimer);\n      this.finishPriceAnimation(false);\n      this.suppressGalleryCue();\n      this.cancelCTAGlare(true);\n      window.removeEventListener('scroll', this.scrollHandler);\n      window.removeEventListener('resize', this.scrollHandler);\n    }\n    money(cents) { const currency = this.dataset.currency || 'RON'; return currency === 'RON' ? new Intl.NumberFormat('ro-RO', {maximumFractionDigits: cents % 100 ? 2 : 0}).format(cents / 100) + ' lei' : new Intl.NumberFormat('ro-RO', { style: 'currency', currency, maximumFractionDigits: cents % 100 ? 2 : 0 }).format(cents / 100); }\n    setupProductFacts() {\n      const priceRow = this.querySelector('.cl-identity .cl-price-row');\n      const dossier = this.querySelector('.cl-dossier');\n      if (!priceRow || !dossier || this.productFactsCarat) return;\n      // Reuse the dossier fragment used by the existing details-and-services rail.\n      if (!dossier.id) dossier.id = `cl-details-${this.dataset.handle}`;\n      if (!dossier.hasAttribute('tabindex')) dossier.setAttribute('tabindex', '-1');\n      const facts = document.createElement('div');\n      facts.className = 'cl-product-facts';\n      facts.dataset.productFacts = '';\n      const carat = document.createElement('span');\n      carat.dataset.productTotalCarat = '';\n      carat.hidden = true;\n      const details = document.createElement('a');\n      details.href = '#' + dossier.id;\n      details.textContent = 'Vezi fi\u0219a';\n      details.setAttribute('aria-label', 'Vezi fi\u0219a bijuteriei');\n      facts.append(carat, details);\n      priceRow.append(facts);\n      this.productFactsCarat = carat;\n    }\n    syncProductFacts(spec) {\n      if (!this.productFactsCarat) return;\n      // carat is the existing selected-variant TOTAL: the Liquid spec payload\n      // retains its verified / merchant working-estimate gate. Never infer it\n      // from a centre-stone option, product title, or shipping/metal weight.\n      const raw = typeof spec.carat === 'number' || typeof spec.carat === 'string' ? String(spec.carat) : '';\n      const clean = raw.replace(/^(?:aprox\\.?|\u2248)\\s*/i, '').trim();\n      const match = clean.match(/^(\\d+(?:[.,]\\d+)?)\\s*(?:ct)?$/i);\n      const value = match ? Number(match[1].replace(',', '.')) : NaN;\n      const available = Number.isFinite(value) && value > 0;\n      const scope = this.dataset.bridalSetScope === 'bridal-set-two-rings-same-size' ? ' \u00B7 ambele inele' : this.salePair ? ' \u00B7 pereche' : '';\n      this.productFactsCarat.hidden = !available;\n      this.productFactsCarat.textContent = available ? `Aprox. ${match[1].replace('.', ',')} ct \u00EEn total${scope}` : '';\n    }\n    setupPrices() {\n      this.priceNodes = [...this.querySelectorAll('[data-price],[data-sticky-price]')];\n      this.priceAccessible = this.priceNodes.map(node => {\n        // Animated intermediate amounts are visual only; the exact variant price remains readable.\n        node.setAttribute('aria-hidden', 'true');\n        node.dataset.priceDisplay = '';\n        const accessible = document.createElement('span');\n        accessible.className = 'cl-sr-only';\n        accessible.dataset.priceAccessible = '';\n        node.after(accessible);\n        return accessible;\n      });\n      this.querySelector('.cl-purchase-total')?.setAttribute('aria-live', 'off');\n      this.priceStatus = document.createElement('span');\n      this.priceStatus.className = 'cl-sr-only';\n      this.priceStatus.dataset.priceStatus = '';\n      this.priceStatus.setAttribute('role', 'status');\n      this.priceStatus.setAttribute('aria-live', 'polite');\n      this.priceStatus.setAttribute('aria-atomic', 'true');\n      this.append(this.priceStatus);\n      this.dataset.priceAnimating = 'false';\n    }\n    paintPrice(cents) {\n      this.displayedPrice = cents;\n      const text = this.money(cents);\n      this.priceNodes.forEach(node => { node.textContent = text; });\n    }\n    finishPriceAnimation(announce = true) {\n      cancelAnimationFrame(this.priceFrame);\n      this.priceFrame = null;\n      this.priceRevision = (this.priceRevision || 0) + 1;\n      this.dataset.priceAnimating = 'false';\n      if (Number.isFinite(this.priceTarget)) this.paintPrice(this.priceTarget);\n      if (announce && this.priceAnnouncementPending) this.priceStatus.textContent = `Totalul configura\u021Biei${this.salePair ? ' \u00B7 pereche' : ''}: ${this.money(this.priceTarget)}.`;\n      this.priceAnnouncementPending = false;\n    }\n    updatePrice() {\n      const target = Number(this.variant.price);\n      const variantId = String(this.variant.id);\n      if (!Number.isFinite(target)) return;\n      const first = this.priceVariantId == null;\n      const variantChanged = !first && this.priceVariantId !== variantId;\n      this.priceVariantId = variantId;\n      const exact = this.money(target);\n      this.priceAccessible.forEach(node => { if (node.textContent !== exact) node.textContent = exact; });\n      this.priceNodes.forEach(node => { node.dataset.priceCents = String(target); });\n      // Busy/size/summary synchronization must not restart an in-flight animation.\n      if (!first && target === this.priceTarget) return;\n      cancelAnimationFrame(this.priceFrame);\n      const revision = this.priceRevision = (this.priceRevision || 0) + 1;\n      const from = Number.isFinite(this.displayedPrice) ? this.displayedPrice : target;\n      this.priceTarget = target;\n      this.priceAnnouncementPending = variantChanged;\n      if (variantChanged) this.priceStatus.textContent = '';\n      if (first || !variantChanged || from === target) { this.finishPriceAnimation(); return; }\n      this.dataset.priceAnimating = 'true';\n      const started = performance.now();\n      const duration = 260;\n      const increment = from % 100 === 0 && target % 100 === 0 ? 100 : 1;\n      const tick = now => {\n        if (revision !== this.priceRevision) return;\n        const progress = Math.min(1, Math.max(0, (now - started) / duration));\n        if (progress === 1) { this.finishPriceAnimation(); return; }\n        const eased = 1 - Math.pow(1 - progress, 3);\n        this.paintPrice(Math.round((from + (target - from) * eased) / increment) * increment);\n        this.priceFrame = requestAnimationFrame(tick);\n      };\n      this.priceFrame = requestAnimationFrame(tick);\n    }\n    buildOptions() {\n      const ordered = [...this.options.filter(option => option.kind === 'purchase'), ...this.options.filter(option => option.kind === 'metal'), ...this.options.filter(option => !['metal', 'purchase'].includes(option.kind) && (!this.ringSizing || option.kind !== 'size'))];\n      let choiceSteps = 0;\n      this.querySelector('[data-options]').innerHTML = ordered.map(option => {\n        const label = option.kind === 'metal' ? 'Metalul' : isQualityOption(option) ? 'CULOARE & CLARITATE DIAMANTE' : option.name;\n        if (option.values.length === 1) {\n          const value = option.values[0];\n          // A fixed field is information, not an already-completed choice. Keep\n          // the real option value/form name without implying manufacturing approval.\n          const selfDescribing = norm(value).startsWith(norm(label)) && norm(label).length > 0;\n          return `<dl class=\"cl-fixed-option\" data-fixed-option=\"${option.index}\"><dt${selfDescribing ? ' class=\"cl-sr-only\"' : ''}>${esc(label)}</dt><dd><span data-fixed-option-value=\"${option.index}\">${esc(value)}</span><input type=\"hidden\" name=\"lab-option-${option.index}\" value=\"${esc(value)}\" data-fixed-option-input=\"${option.index}\"></dd></dl>`;\n        }\n        const step = choiceSteps++;\n        return `<details class=\"cl-step\" data-option-step=\"${option.index}\" ${step === 0 ? 'open' : ''}><summary><span class=\"cl-step-number${isQualityOption(option) ? ' cl-step-symbol' : ''}\"${isQualityOption(option) ? ' aria-hidden=\"true\"' : ''}>${isQualityOption(option) ? diamondStepIcon : String(step + 1).padStart(2, '0')}</span><span>${esc(label)}</span><strong class=\"cl-step-current\" data-option-current=\"${option.index}\"></strong><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.3\" aria-hidden=\"true\"><path d=\"M5 12h14M12 5v14\"/></svg></summary><div class=\"cl-step-content\"><fieldset class=\"cl-options-field\"><legend class=\"cl-sr-only\">${esc(option.name)}</legend><div class=\"cl-options-grid\">${option.values.map((value, vIndex) => `<div class=\"cl-choice\"><input class=\"cl-sr-only\" type=\"radio\" id=\"cl-${this.dataset.concept}-${option.index}-${vIndex}\" name=\"lab-option-${option.index}\" value=\"${esc(value)}\" data-option-index=\"${option.index}\"><label for=\"cl-${this.dataset.concept}-${option.index}-${vIndex}\" data-metal=\"${metalFamily(value)}\">${option.kind === 'metal' ? `<span class=\"cl-swatch cl-swatch-${metalFamily(value)}\" aria-hidden=\"true\"></span>` : ''}<span class=\"cl-value\">${esc(value)}</span><span class=\"cl-delta\" data-delta hidden></span><span class=\"cl-option-check\" aria-hidden=\"true\">\u2713</span></label></div>`).join('')}</div></fieldset></div></details>`;\n      }).join('');\n      const sizeStep = this.querySelector('[data-size-step]');\n      if (sizeStep) {\n        const sizingBadge = sizeStep.querySelector('.cl-step-number');\n        sizingBadge.innerHTML = sizingStepIcon;\n        sizingBadge.classList.add('cl-step-symbol');\n        sizingBadge.setAttribute('aria-hidden', 'true');\n        sizeStep.open = choiceSteps === 0;\n      }\n      this.querySelector('[data-reset]').hidden = choiceSteps === 0 && !sizeStep;\n      this.querySelectorAll('[data-option-step]').forEach(step => { const note = document.createElement('p'); note.className = 'cl-spec-note'; note.dataset.deltaBasis = step.dataset.optionStep; step.querySelector('.cl-step-content').append(note); });\n      this.querySelectorAll('.cl-step summary > svg').forEach(svg => { svg.innerHTML = '<path d=\"M5 12h14\"/><path class=\"cl-plus-vertical\" d=\"M12 5v14\"/>'; });\n      this.options.filter(isQualityOption).forEach(option => { const step = this.querySelector(`[data-option-step=\"${option.index}\"]`); if (!step) return; const help = document.createElement('button'); help.type = 'button'; help.className = 'cl-text-button'; help.dataset.qualityHelp = ''; help.textContent = 'Ce \u00EEnseamn\u0103 gradele?'; step.querySelector('.cl-step-content').append(help); });\n      const contact = document.querySelector('[data-ccv-whatsapp]');\n      if (contact?.href) {\n        const link = document.createElement('a'); link.href = contact.href; link.target = '_blank'; link.rel = 'noopener'; link.className = 'cl-advisor-link';\n        const icon = this.querySelector('template[data-advisor-icon]'); if (icon) link.append(icon.content.cloneNode(true));\n        const label = document.createElement('span'); label.textContent = '\u00CEntreab\u0103 un consilier'; link.append(label);\n        this.querySelector('.cl-services').append(link);\n      }\n      if (this.nativeSize) {\n        const offered = new Set(this.nativeSize.values.map(value => String(Number(value.replace(/EU\\s*/i, '').replace(',', '.')))));\n        this.querySelectorAll('[data-size]').forEach(button => { if (!offered.has(button.dataset.size)) button.hidden = true; });\n        this.querySelector('[data-requested-size-note]').hidden = true;\n      }\n    }\n    compatible(optionIndex, value) {\n      if (this.pairPurchase) return this.pairPurchase.compatible(optionIndex, value);\n      return this.variants.find(variant => variant.options.every((item, index) => index === optionIndex ? item === value : item === this.selected[index]));\n    }\n    bind() {\n      const gallery = this.querySelector('.cl-gallery');\n      gallery?.addEventListener('pointerdown', () => this.suppressGalleryCue(), { passive: true });\n      gallery?.addEventListener('keydown', () => this.suppressGalleryCue());\n      this.addEventListener('change', event => {\n        const input = event.target.closest('[data-option-index]');\n        if (!input) return;\n        const index = Number(input.dataset.optionIndex);\n        const candidate = this.compatible(index, input.value);\n        if (!candidate || !candidate.available) { this.sync(); return; }\n        this.variant = candidate; this.selected = [...candidate.options];\n        this.sync(); this.updateURL(); this.loadMedia();\n      });\n      this.addEventListener('click', event => {\n        if (event.target.closest('[data-image-index],[data-next],[data-prev],[data-dialog-next],[data-dialog-prev],[data-zoom]')) this.suppressGalleryCue();\n        const size = event.target.closest('[data-size]');\n        if (size) this.selectSize(size, event.isTrusted);\n        const thumbnail = event.target.closest('[data-image-index]');\n        if (thumbnail) this.showImage(Number(thumbnail.dataset.imageIndex));\n        if (event.target.closest('[data-next],[data-dialog-next]')) this.showImage((this.pendingImage ?? this.activeImage) + 1);\n        if (event.target.closest('[data-prev],[data-dialog-prev]')) this.showImage((this.pendingImage ?? this.activeImage) - 1);\n        if (event.target.closest('[data-zoom]') && this.images.length) { this.updateEnlarged(true); this.querySelector('[data-image-dialog]').showModal(); this.updateSticky(); }\n        if (event.target.closest('[data-size-help]')) { this.querySelector('[data-size-dialog]').showModal(); this.updateSticky(); }\n        if (event.target.closest('[data-quality-help]')) { this.querySelector('[data-quality-dialog]').showModal(); this.updateSticky(); }\n        if (event.target.closest('[data-close]')) event.target.closest('dialog').close();\n        if (event.target.closest('[data-reset]')) this.openFirstConfigurationStep();\n        if (event.target.closest('[data-sticky-action]')) {\n          if (!this.sizeReady()) this.focusMissingSize();\n          else this.querySelector('[data-product-form]').requestSubmit();\n        }\n      });\n      this.querySelector('[data-product-form]').addEventListener('submit', event => this.addToCart(event));\n      this.querySelectorAll('dialog').forEach(dialog => {\n        dialog.setAttribute('aria-label', dialog.hasAttribute('data-size-dialog') ? 'Ghid de m\u0103rimi EU' : dialog.hasAttribute('data-quality-dialog') ? 'Gradele diamantului' : 'Fotografii m\u0103rite ale crea\u021Biei');\n        dialog.addEventListener('click', event => { if (event.target === dialog) dialog.close(); });\n        dialog.addEventListener('close', () => this.updateSticky());\n      });\n      this.querySelector('[data-diameter]')?.addEventListener('input', event => {\n        const diameter = Number(event.target.value);\n        this.querySelector('[data-size-result]').textContent = diameter >= 15.6 && diameter <= 21.4 ? `Aprox. EU ${Math.round(diameter * Math.PI)} \u00B7 circumferin\u021B\u0103 ${(diameter * Math.PI).toFixed(1)} mm` : 'Introdu un diametru \u00EEntre 15,6 \u0219i 21,4 mm.';\n      });\n      this.setupGalleryNavigation();\n      this.querySelectorAll('details.cl-step').forEach(step => step.addEventListener('toggle', () => {\n        if (this.purchaseMotion) return;\n        if (step.open) this.querySelectorAll('details.cl-step').forEach(other => { if (other !== step) other.open = false; });\n      }));\n    }\n    setupGalleryNavigation() {\n      if (this.gallerySwipeCleanup) return;\n      const gallery = this.querySelector('.cl-gallery');\n      if (!gallery) return;\n      const magnifier = '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.35\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><circle cx=\"10.5\" cy=\"10.5\" r=\"6.5\"/><path d=\"m15.5 15.5 5 5M10.5 7.5v6M7.5 10.5h6\"/></svg>';\n      const normalizeZoom = () => gallery.querySelectorAll('[data-zoom],[data-vfg-zoom]').forEach(button => {\n        if (button.dataset.galleryZoom === 'magnifier') return;\n        button.innerHTML = magnifier; button.dataset.galleryZoom = 'magnifier';\n      });\n      normalizeZoom();\n      this.galleryZoomObserver = new MutationObserver(normalizeZoom);\n      this.galleryZoomObserver.observe(gallery, { childList: true });\n      this.gallerySwipeCleanup = bindGallerySwipe(gallery, stage => {\n        if (!gallery.contains(stage)) return null;\n        if (stage.classList.contains('cs-vfg__stage')) {\n          const controller = this.querySelector('corsaille-video-first');\n          if (!controller?.current || !controller.ui?.contains(stage)) return null;\n          return { key: `${this.variant.id}:${controller.current.family}:${controller.active}`, move: direction => controller.show(controller.active + direction) };\n        }\n        if (this.dataset.videoFirstReady === 'true' || !this.images.length) return null;\n        return { key: `${this.variant.id}:${this.mediaRevision}:${this.activeImage}`, move: direction => this.showImage((this.pendingImage ?? this.activeImage) + direction) };\n      }, () => this.suppressGalleryCue());\n    }\n    selectSize(button, userInitiated = false) {\n      if (this.pairPurchase && (button.disabled || button.hidden || button.closest('[data-size-field]').hidden)) return;\n      const wasReady = this.sizeReady();\n      const field = button.closest('[data-size-field]'); const fieldIndex = Number(field.dataset.sizeField) - 1; const size = button.dataset.size;\n      if (this.nativeSize && fieldIndex === 0) {\n        const value = this.nativeSize.values.find(value => Number(value.replace(/EU\\s*/i, '').replace(',', '.')) === Number(size));\n        const candidate = this.compatible(this.nativeSize.index, value);\n        if (!candidate?.available) return;\n        this.variant = candidate; this.selected = [...candidate.options];\n      }\n      this.sizes[fieldIndex] = size;\n      this.sync(); this.updateURL();\n      if (userInitiated && !wasReady && this.sizeReady()) {\n        const step = this.querySelector('[data-size-step]');\n        if (step) { step.open = false; step.querySelector('summary')?.focus({ preventScroll: true }); }\n        this.requestReadyGlare();\n        requestAnimationFrame(() => {\n          if (!this.isConnected || !this.sizeReady()) return;\n          const cta = this.querySelector('[data-submit]'), rect = cta?.getBoundingClientRect();\n          if (rect && (rect.top < 140 || rect.bottom > innerHeight - 24)) cta.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n        });\n      }\n    }\n    restoreSizes() {\n      const params = new URL(location.href).searchParams;\n      this.sizes = this.sizes.map((_, index) => {\n        const value = params.get(`size${index + 1}`) || '';\n        const field = this.querySelector(`[data-size-field=\"${index + 1}\"]`);\n        return [...field.querySelectorAll('[data-size]:not([hidden])')].some(button => button.dataset.size === value) ? value : '';\n      });\n      if (this.nativeSize && this.sizes[0] && Number(this.selected[this.nativeSize.index].replace(/EU\\s*/i, '').replace(',', '.')) !== Number(this.sizes[0])) this.sizes[0] = '';\n    }\n    openFirstConfigurationStep() { const step = this.querySelector('[data-option-step]') || this.querySelector('[data-size-step]'); if (step) { step.open = true; step.scrollIntoView({ behavior: 'smooth', block: 'center' }); } }\n    sizeReady() { return this.pairPurchase ? this.pairPurchase.ready() : this.sizes.every(Boolean); }\n    focusMissingSize() { const step = this.querySelector('[data-size-step]'); if (!step) return; step.open = true; const missing = (this.pairPurchase ? this.pairPurchase.active().find(index => !this.pairPurchase.validSize(index)) : this.sizes.findIndex(size => !size)) + 1; const field = step.querySelector(`[data-size-field=\"${missing}\"]`); if (!field) return; field.scrollIntoView({ behavior: 'smooth', block: 'center' }); field.querySelector('[data-size]:not([hidden]):not([disabled])')?.focus({ preventScroll: true }); }\n    syncTaxNote() {\n      const note = this.querySelector('[data-tax-note]');\n      if (!note) return;\n      const parts = [];\n      if (this.variant.taxable === true) {\n        if (this.dataset.taxesIncluded === 'true') parts.push('TVA inclus');\n        else if (this.dataset.taxesIncluded === 'false') parts.push('Taxele se calculeaz\u0103 la checkout');\n      }\n      if (this.salePair) parts.push('pre\u021B / pereche');\n      note.textContent = parts.join(' \u00B7 ');\n      note.hidden = !parts.length;\n    }\n    sync() {\n      this.pairPurchase?.beforeSync();\n      this.options.forEach(option => {\n        const candidates = option.values.map(value => this.compatible(option.index, value)).filter(variant => variant?.available);\n        const minimum = candidates.length ? Math.min(...candidates.map(variant => variant.price)) : null;\n        const basis = candidates.find(variant => variant.price === minimum)?.options[option.index];\n        const basisNote = this.querySelector(`[data-delta-basis=\"${option.index}\"]`); if (basisNote) basisNote.textContent = basis ? `Fa\u021B\u0103 de ${basis}, cu restul configura\u021Biei identic. Selec\u021Biile sunt deja incluse \u00EEn total.` : '';\n        this.querySelectorAll(`[data-option-index=\"${option.index}\"]`).forEach(input => {\n          const candidate = this.compatible(option.index, input.value); input.checked = input.value === this.selected[option.index]; input.disabled = this.busy || !candidate?.available;\n          const delta = input.nextElementSibling.querySelector('[data-delta]'); const amount = candidate && minimum != null ? candidate.price - minimum : 0;\n          delta.hidden = amount === 0 || !candidate?.available; delta.textContent = amount > 0 ? `+${this.money(amount)}` : '';\n          if (candidate) input.setAttribute('aria-label', `${input.value} \u00B7 total ${this.money(candidate.price)}`);\n        });\n        const current = this.querySelector(`[data-option-current=\"${option.index}\"]`); if (current) current.textContent = this.selected[option.index];\n        const fixedValue = this.querySelector(`[data-fixed-option-value=\"${option.index}\"]`); if (fixedValue) fixedValue.textContent = this.selected[option.index];\n        const fixedInput = this.querySelector(`[data-fixed-option-input=\"${option.index}\"]`); if (fixedInput) fixedInput.value = this.selected[option.index];\n      });\n      this.querySelectorAll('[data-size-field]').forEach((field, index) => {\n        field.querySelector('[data-size-property]').value = this.sizes[index];\n        field.querySelector('[data-size-value]').textContent = this.sizes[index] ? `EU ${this.sizes[index]}` : 'Nealeas\u0103';\n        field.querySelectorAll('[data-size]').forEach(button => {\n          button.setAttribute('aria-pressed', String(button.dataset.size === this.sizes[index]));\n          button.disabled = this.busy;\n          if (this.nativeSize && index === 0) { const value = this.nativeSize.values.find(value => Number(value.replace(/EU\\s*/i, '').replace(',', '.')) === Number(button.dataset.size)); button.disabled = this.busy || !this.compatible(this.nativeSize.index, value)?.available; }\n        });\n      });\n      const selectionText = this.selected.filter((value, index) => !this.ringSizing || this.options[index].kind !== 'size').join(' \u00B7 ');\n      const sizeText = this.pairPurchase ? this.pairPurchase.sizes().join(' \u00B7 ') : this.pair ? this.sizes.map((size, index) => `Inel ${index + 1}: ${size ? 'EU ' + size : 'de ales'}`).join(' \u00B7 ') : this.sizes[0] ? `EU ${this.sizes[0]}` : 'Alege m\u0103rimea EU';\n      const sizeSummary = this.querySelector('[data-size-summary]');\n      if (sizeSummary) sizeSummary.innerHTML = this.pair ? this.sizes.map((size,index) => `<span class=\"cl-size-unit\">Inel ${index+1}: ${size ? 'EU '+esc(size) : 'de ales'}</span>`).join(' ') : esc(sizeText);\n      const specSize = this.querySelector('[data-spec-size]'); if (specSize) specSize.textContent = sizeText;\n      this.querySelector('[data-sticky-size]').textContent = this.ringSizing ? sizeText : selectionText;\n      if (this.pair) {\n        // A ring label and its EU number form one readable unit, including at 320px.\n        const pairedUnits = this.sizes.map((size, index) => `<span class=\"cl-size-unit\">Inel ${index + 1}: ${size ? 'EU ' + esc(size) : 'de ales'}</span>`).join(' \u00B7 ');\n        if (specSize) specSize.innerHTML = pairedUnits;\n        this.querySelector('[data-sticky-size]').innerHTML = pairedUnits;\n      }\n      this.querySelector('[data-order-summary]').textContent = !this.ringSizing ? 'Configura\u021Bia selectat\u0103.' : this.sizeReady() ? sizeText : this.pair ? 'Dou\u0103 inele. Dou\u0103 m\u0103rimi.' : 'Confirm\u0103 m\u0103rimea pentru aceast\u0103 crea\u021Bie.';\n      this.querySelector('[data-selection]').textContent = selectionText;\n      this.updatePrice();\n      this.syncTaxNote();\n      this.querySelector('[data-variant-id]').value = this.variant.id;\n      const metalOption = this.options.find(option => option.kind === 'metal');\n      const metalValue = metalOption ? this.selected[metalOption.index] || '' : '';\n      const metalSpec = this.querySelector('[data-spec-metal]');\n      if (metalSpec) { metalSpec.textContent = metalValue; metalSpec.parentElement.hidden = !metalValue; }\n      this.querySelector('[data-spec-sku]').textContent = this.variants.find(variant => /^CR-[A-Z0-9-]+$/.test(variant.sku || ''))?.sku || this.product.handle;\n      const spec = this.specs[String(this.variant.id)] || {};\n      this.syncProductFacts(spec);\n      this.querySelectorAll('[data-spec-field]').forEach(node => { const value = spec[node.dataset.specField]; const clean = String(value ?? '').replace(/^(?:aprox\\.?|\u2248)\\s*/i, '').trim(); node.closest('div').hidden = !clean; node.textContent = clean ? `Aprox. ${clean}${/\\b(?:g|ct)\\b/i.test(clean) ? '' : ' ' + node.dataset.unit}` : ''; });\n      const caratOption = this.options.find(option => /carat|carataj/i.test(norm(option.name)));\n      const selectedCarat = this.querySelector('[data-spec-selected-carat]'); selectedCarat.parentElement.hidden = !caratOption; selectedCarat.textContent = caratOption ? this.selected[caratOption.index] : '';\n      const qualityOption = this.options.find(isQualityOption);\n      const selectedQuality = this.querySelector('[data-spec-quality]');\n      if (selectedQuality) { selectedQuality.parentElement.hidden = !qualityOption; selectedQuality.textContent = qualityOption ? this.selected[qualityOption.index] : ''; }\n      const label = !this.variant.available ? 'Indisponibil\u0103' : !this.sizeReady() ? this.pair ? 'Alege cele dou\u0103 m\u0103rimi' : 'Alege m\u0103rimea' : this.busy ? 'Se adaug\u0103\u2026' : 'Adaug\u0103 \u00EEn co\u0219';\n      this.querySelector('[data-submit]').disabled = this.busy || !this.variant.available;\n      this.querySelector('[data-submit-label]').textContent = label;\n      const sticky = this.querySelector('[data-sticky-action]'); sticky.firstChild.textContent = `${label} `; sticky.disabled = this.busy || !this.variant.available;\n      this.pairPurchase?.afterSync();\n      this.updateCTAGlare();\n    }\n    updateURL() {\n      const url = new URL(location.href); url.searchParams.set('variant', this.variant.id);\n      if (!this.ringSizing) { url.searchParams.delete('size1'); url.searchParams.delete('size2'); }\n      this.sizes.forEach((value, index) => { if (value && (!this.pairPurchase || this.pairPurchase.active().includes(index))) url.searchParams.set(`size${index + 1}`, value); else url.searchParams.delete(`size${index + 1}`); });\n      history.replaceState({}, '', url);\n    }\n    hybridMediaDelivery() { return this.dataset.concept === 'hybrid' && this.dataset.handle !== 'epure-oval'; }\n    mediaDeliveryURL(value) {\n      if (!this.hybridMediaDelivery()) return value;\n      try {\n        const url = new URL(value, window.location.href);\n        const ownShop = url.origin === window.location.origin && /^\\/cdn\\/shop\\/(?:t\\/\\d+\\/assets|files|products)\\//.test(url.pathname);\n        const shopifyFiles = url.hostname === 'cdn.shopify.com' && /^\\/s\\/files\\/[^?#]+\\/(?:files|products)\\//.test(url.pathname);\n        if (url.protocol !== 'https:' || url.username || url.password || !(ownShop || shopifyFiles) || !/\\.(?:webp|png|jpe?g|avif)$/i.test(url.pathname)) return value;\n        if (['height', 'crop', 'crop_width', 'crop_height'].some(key => url.searchParams.has(key))) return value;\n        const width = this.querySelector('.cl-photo-stage')?.clientWidth;\n        if (!(width > 0)) return value;\n        const needed = width * Math.min(3, Math.max(1, Number(window.devicePixelRatio) || 1));\n        let target = [720, 960, 1440, 1800].find(size => size >= needed) || 1800;\n        const existing = Number(url.searchParams.get('width'));\n        if (existing > 0) target = Math.min(target, existing);\n        // Preserve identity/version/crop: only request a smaller CDN derivative.\n        url.searchParams.set('width', String(target));\n        return url.href;\n      } catch { return value; }\n    }\n    prepareGalleryImages(images) {\n      return this.hybridMediaDelivery() ? images.map(image => ({ ...image, deliveryUrl: this.mediaDeliveryURL(image.url) })) : images;\n    }\n    galleryImageURL(image) { return image.editorialKey ? window.CorsailleEditorialOnHand.displayURL(image,this.querySelector(\".cl-photo-stage\")?.clientWidth,window.devicePixelRatio) : (this.hybridMediaDelivery() ? image.deliveryUrl || image.url : image.url); }\n    async decodeGalleryImage(image) {\n      const delivery = this.galleryImageURL(image);\n      try { await this.decodeImage(delivery); }\n      catch (error) {\n        if (delivery === image.url) throw error;\n        // One bounded master fallback; never show an undecoded replacement.\n        image.deliveryUrl = image.url;\n        await this.decodeImage(image.url);\n      }\n      if (this.hybridMediaDelivery() && this.querySelector('[data-image-dialog]')?.open && this.galleryImageURL(image) !== image.url) await this.decodeImage(image.url);\n    }\n    queueGalleryPreload() {\n      clearTimeout(this.galleryWarmTimer);\n      const connection = window.navigator?.connection;\n      if (!this.hybridMediaDelivery() || !this.isConnected || this.mediaPending || this.images.length < 2 || connection?.saveData || /(^|-)2g$|^3g$/.test(connection?.effectiveType || '')) return;\n      const images = this.images, revision = this.mediaRevision, active = this.activeImage;\n      // Only two adjacent views of the already-approved, selected gallery.\n      // Never fetch another colour's full gallery or a full-size zoom master.\n      const urls = [1, 2].slice(0, images.length - 1).map(offset => this.galleryImageURL(images[(active + offset) % images.length]));\n      this.galleryWarmTimer = setTimeout(async () => {\n        for (const url of new Set(urls)) {\n          if (!this.isConnected || this.mediaPending || revision !== this.mediaRevision || images !== this.images || active !== this.activeImage) return;\n          try { await this.decodeImage(url, 'low'); } catch { /* Optional warm-up never changes the displayed image or fallback. */ }\n        }\n      }, 120);\n    }\n    queueMetalPreload(manifest, studioManifest) {\n      const connection = window.navigator?.connection;\n      if (!this.hybridMediaDelivery() || this.mediaWarmScheduled || connection?.saveData || /(^|-)2g$|^3g$/.test(connection?.effectiveType || '') || this.dataset.supplierSample === 'true') return;\n      const excluded = new Set((this.dataset.excludedMediaIds || '').split('|').filter(Boolean));\n      const blocked = frame => [frame.mediaId || frame.media_id, frame.sourceMediaId].some(id => id && excluded.has(String(id).split('/').pop()));\n      const current = new Set(this.images.map(image => this.galleryImageURL(image)));\n      const families = new Set(), urls = [];\n      for (const variant of this.variants) {\n        if (!variant.available) continue;\n        const native = window.CorsailleMetalMedia?.resolve(manifest, this.product.handle, variant.id);\n        if (!native || native.requiresGeometryReview || native.requiresComponentReview || native.requiresSampleSpecReview) continue;\n        let studio = window.CorsailleStudioMedia?.resolve(studioManifest, this.product.handle, this.product.id, variant.id, manifest);\n        if (studio?.sourceMediaIds?.some(id => excluded.has(String(id).split('/').pop())) || studio?.images?.some(blocked)) studio = null;\n        const resolution = studio || native;\n        const frame = resolution.images?.find(image => image.role === 'hero') || resolution.images?.[0];\n        if (!frame || blocked(frame) || families.has(resolution.family)) continue;\n        families.add(resolution.family);\n        const source = frame.kind === 'theme_asset' ? `${this.dataset.assetBase}${frame.asset}` : frame.url;\n        const url = this.mediaDeliveryURL(source);\n        if (!url || current.has(url) || urls.includes(url)) continue;\n        urls.push(url);\n        if (urls.length === 2) break;\n      }\n      if (!urls.length) return;\n      this.mediaWarmScheduled = true;\n      const revision = this.mediaRevision;\n      // At most two alternative approved heroes, sequential and low priority.\n      this.mediaWarmTimer = setTimeout(async () => {\n        for (const url of urls) {\n          if (!this.isConnected || this.mediaPending || revision !== this.mediaRevision) return;\n          try { await this.decodeImage(url, 'low'); } catch { /* Optional warm-up never changes selection or fallback. */ }\n        }\n      }, 350);\n    }\n    decodeImage(url, priority = 'auto') {\n      if (this.imageLoads.has(url)) return this.imageLoads.get(url);\n      const pending = new Promise((resolve, reject) => {\n        const image = new Image();\n        if (this.hybridMediaDelivery()) { image.decoding = 'async'; image.fetchPriority = priority; }\n        let settled = false;\n        const finish = error => {\n          if (settled) return;\n          settled = true;\n          clearTimeout(timeout);\n          image.onload = image.onerror = null;\n          if (error) reject(error); else { this.decodedImages.add(url); resolve(); }\n        };\n        const timeout = setTimeout(() => finish(new Error('Imaginea nu a putut fi \u00EEnc\u0103rcat\u0103.')), 8000);\n        image.onerror = () => finish(new Error('Imaginea nu a putut fi \u00EEnc\u0103rcat\u0103.'));\n        image.onload = () => { if (!image.decode) finish(); };\n        image.src = url;\n        if (image.decode) image.decode().then(() => finish(), error => finish(error));\n        else if (image.complete && image.naturalWidth) finish();\n      }).catch(error => { this.imageLoads.delete(url); throw error; });\n      this.imageLoads.set(url, pending);\n      return pending;\n    }\n    matchingImage(images) {\n      const current = this.galleryAnchor || this.images[this.pendingImage ?? this.activeImage];\n      if (!current) return 0;\n      const sameURL = images.findIndex(image => image.url === current.url);\n      if (sameURL >= 0) return sameURL;\n      if (current.editorialKey) return 0;\n      // Generic reference labels do not establish that two photographs share an angle.\n      const sameRole = current.role && current.role !== 'reference' ? images.findIndex(image => image.role === current.role) : -1;\n      return sameRole >= 0 ? sameRole : 0;\n    }\n    updateGalleryLoading() {\n      const loading = Boolean(this.mediaPending || this.pendingImage != null);\n      this.dataset.galleryLoading = String(loading);\n      this.querySelector('[data-slides]').setAttribute('aria-busy', String(loading));\n    }\n    clearGallery(note, supplierSample = false) {\n      // An empty next selection must not leave the previous variant's image\n      // visible, including a zoomed frame or a pending navigation decode.\n      this.viewRevision++;\n      this.pendingImage = null; this.galleryAnchor = null; this.activeImage = 0;\n      this.images = []; this.mediaPending = false; this.mediaLoadingNote = ''; this.mediaNote = note; this.studioGallery = false;\n      this.dataset.mediaMode = 'reference'; this.dataset.galleryCue = 'false';\n      this.querySelector('[data-slides]').innerHTML = '';\n      this.renderThumbnails(); this.updateEnlarged();\n      const dialog = this.querySelector('[data-image-dialog]');\n      if (dialog.open) dialog.close();\n      this.querySelector('[data-media-note]').textContent = note;\n      this.querySelector('[data-image-label]').textContent = supplierSample ? 'Mostr\u0103 furnizor' : 'Detaliile crea\u021Biei';\n      this.syncStudioCaption();\n      this.updateGalleryLoading();\n    }\n    fetchStudioManifest() {\n      if (!this.dataset.studioMap) return Promise.resolve(null);\n      const controller = new AbortController();\n      const timeout = setTimeout(() => controller.abort(), 2500);\n      return fetch(this.dataset.studioMap, { signal: controller.signal }).then(response => response.ok ? response.json() : null)\n        .catch(() => null).finally(() => clearTimeout(timeout));\n    }\n    sampleMetadata(image) {\n      const metadata = {};\n      const notice = image?.sampleDisclosure || this.dataset.designSampleNotice;\n      if (image?.sourceSample === true || this.dataset.designSampleNotice) {\n        metadata.sourceSample = true;\n        if (typeof notice === 'string' && notice.trim()) metadata.sampleDisclosure = notice.trim();\n      }\n      if (image?.sourceSampleDisclosure && typeof image.sourceSampleDisclosure === 'object') {\n        metadata.sourceSampleDisclosure = { ...image.sourceSampleDisclosure };\n      }\n      return metadata;\n    }\n    sampleNoticeForImage(image) {\n      const disclosure = image?.sourceSampleDisclosure;\n      if (disclosure?.schema === 'corsaille.source-sample-disclosure.v1' &&\n          ['SOURCE_SAMPLE_INSCRIPTION_NOT_SELECTED_ALLOY', 'CONTEXTUAL_COMPANION_NOT_INCLUDED'].includes(disclosure.code) && disclosure.required === true) {\n        const text = image?.representation === 'generated' ? disclosure.visible_copy_ro : disclosure.native_copy_ro;\n        // The exact resolver pins this object. If unavailable/malformed, retain\n        // the server's product-specific sample notice; never guess an assay.\n        if (typeof text === 'string' && text.trim() &&\n            (image?.representation !== 'generated' || !/^Fotografie\\b/i.test(text.trim()))) return text.trim();\n      }\n      if (image?.sourceSample === true && typeof image.sampleDisclosure === 'string' && image.sampleDisclosure.trim()) return image.sampleDisclosure.trim();\n      return typeof this.dataset.designSampleNotice === 'string' ? this.dataset.designSampleNotice.trim() : '';\n    }\n    syncStudioCaption(extraNote = '') {\n      let caption = this.querySelector('[data-studio-caption]');\n      this.querySelectorAll('[data-slide] img').forEach((image, index) => {\n        image.dataset.studioHero = String(Boolean(this.studioGallery && this.images[index]?.role === 'hero' && this.images[index]?.representation === 'generated'));\n      });\n      const current = this.images[this.activeImage], generated = current?.representation === 'generated';\n      const notice = this.sampleNoticeForImage(current);\n      const referenceNotice = current?.referenceDisclosure || '';\n      // Some native-only products have no studio caption in their server HTML.\n      // A mixed-colour reference still needs the same visible notice in zoom.\n      if (!caption && (referenceNotice || generated || notice)) {\n        const dialog = this.querySelector('[data-image-dialog]');\n        if (dialog) {\n          caption = document.createElement('span');\n          caption.className = 'cl-studio-caption';\n          caption.setAttribute('data-studio-caption', '');\n          dialog.append(caption);\n        }\n      }\n      const sourceMetal = { white: 'metal alb', yellow: 'aur galben', rose: 'aur roz' }[current?.family];\n      const label = generated ? 'Ilustra\u021Bie de studio' : 'Fotografie-surs\u0103' + (sourceMetal ? ' \u00B7 ' + sourceMetal : '');\n      if (current && (this.studioGallery || generated)) this.querySelector('[data-image-label]').textContent = label;\n      else if (current && (notice || referenceNotice)) this.querySelector('[data-image-label]').textContent = 'Fotografie de referin\u021B\u0103';\n      else if (current && !this.mediaPending && this.mediaImageLabel) this.querySelector('[data-image-label]').textContent = this.mediaImageLabel;\n      if (caption) {\n        caption.hidden = !current || !(this.studioGallery || generated || notice || referenceNotice);\n        // Prefer one specific notice over a second near-identical sample sentence.\n        // A generated frame must never acquire a native-photograph caption.\n        caption.textContent = !current ? '' : notice ? generated && !/^Ilustra\u021Bie\\b/i.test(notice)\n          ? 'Ilustra\u021Bie generat\u0103 \u00B7 ' + notice : notice\n          : generated ? 'Ilustra\u021Bie generat\u0103 \u00B7 nu este fotografia unei variante fabricate.' : referenceNotice || (this.studioGallery ? label : '');\n        if (referenceNotice && notice && !caption.textContent.includes(referenceNotice)) caption.textContent += ' ' + referenceNotice;\n      }\n      const base = this.mediaPending && this.mediaLoadingNote ? this.mediaLoadingNote : this.mediaNote;\n      const parts = [base, notice, referenceNotice, extraNote].filter(text => typeof text === 'string' && text.trim());\n      const combined = [];\n      for (const text of parts) if (!combined.some(existing => existing.includes(text))) combined.push(text);\n      this.querySelector('[data-media-note]').textContent = combined.join(' ');\n      window.CorsailleEditorialOnHand.paintNative(this);\n    }\n\n    async loadMedia() {\n      const sampleReferenceNote = 'Fotografii ale mostrei furnizorului \u00B7 specifica\u021Bia aliajului fotografiat necesit\u0103 confirmare.';\n      const revision = ++this.mediaRevision;\n      this.mediaPending = true;\n      this.updateGalleryLoading();\n      const currentGenerated = this.images[this.activeImage]?.representation === 'generated';\n      this.querySelector('[data-image-label]').textContent = currentGenerated ? 'Ilustra\u021Bie de studio' : 'Imagine de referin\u021B\u0103';\n      this.mediaLoadingNote = this.dataset.supplierSample === 'true' ? sampleReferenceNote : currentGenerated ? 'Actualiz\u0103m prezentarea de studio \u00B7 imagini generate\u2026' : 'Actualiz\u0103m fotografiile configura\u021Biei\u2026';\n      this.syncStudioCaption();\n      this.dataset.mediaMode = 'loading';\n      if (!this.manifestPromise) this.manifestPromise = fetch(this.dataset.mediaMap).then(response => response.ok ? response.json() : null).catch(() => null);\n      if (!this.studioPromise) this.studioPromise = this.fetchStudioManifest();\n      const [manifest, studioManifest] = await Promise.all([this.manifestPromise, this.studioPromise]);\n      if (revision !== this.mediaRevision) return;\n      const originalResolution = window.CorsailleMetalMedia?.resolve(manifest, this.product.handle, this.variant.id);\n      // Current server decisions win over an old cached image map, for every\n      // product. Exact IDs avoid both filename guesses and prefix collisions.\n      const excludedIds = new Set((this.dataset.excludedMediaIds || '').split('|').filter(Boolean));\n      const eligible = image => ![image.mediaId || image.media_id, image.sourceMediaId].some(id => id && excludedIds.has(String(id).split('/').pop()));\n      const sourceHold = this.dataset.supplierSample === 'true' || originalResolution?.requiresGeometryReview || originalResolution?.requiresComponentReview || originalResolution?.requiresSampleSpecReview;\n      let studio = originalResolution && !sourceHold ? window.CorsailleStudioMedia?.resolve(studioManifest, this.product.handle, this.product.id, this.variant.id, manifest) : null;\n      if (studio?.sourceMediaIds?.some(id => excludedIds.has(id)) || studio?.images?.some(image => !eligible(image))) studio = null;\n      const resolved = studio || originalResolution;\n      const safeImages = (resolved?.images || []).filter(eligible);\n      const resolution = resolved ? { ...resolved, images: safeImages, referenceImages: (resolved.referenceImages || []).filter(eligible),\n        mode: safeImages.length === (resolved.images || []).length ? resolved.mode : safeImages.length ? 'matched-hero' : 'reference' } : resolved;\n      const supplierSample = this.dataset.supplierSample === 'true' || resolution?.requiresSampleSpecReview;\n      const family = resolution?.family;\n      let studioActive = resolution?.mode === 'studio-gallery';\n      let images = resolution?.images?.map(image => ({ url: image.kind === 'theme_asset' ? `${this.dataset.assetBase}${image.asset}` : image.url,\n        alt: this.mediaAlt(image), role: image.role, ...this.sampleMetadata(image), ...(image.representation ? { representation: image.representation, family: image.family || family } : {}) })) || [];\n      let note = 'Fotografii de referin\u021B\u0103 ale modelului.';\n      let isMatched = images.length > 0;\n      if (studioActive) {\n        const generated = images.filter(image => image.representation === 'generated').length;\n        const source = images.length - generated;\n        note = generated === 0 ? `Prezentare de studio \u00B7 ${source} fotografii-surs\u0103.`\n          : source === 0 ? `Prezentare de studio \u00B7 ${generated} imagini generate din fotografii-surs\u0103.`\n          : `Prezentare de studio \u00B7 ${generated === 1 ? 'ilustra\u021Bie generat\u0103' : generated + ' imagini generate'} \u0219i ${source} fotografii-surs\u0103.`;\n      }\n      else if (resolution?.mode === 'matched-gallery') note = `${family === 'yellow' ? 'Aur galben' : family === 'rose' ? 'Aur roz' : 'Metal alb'} \u00B7 ${images.length} perspective`;\n      else if (images.length) {\n        const matchedCount = images.length;\n        // An approved hero is not a complete gallery. Keep the product's exact\n        // existing source angles available, without claiming a colour match.\n        const references = resolution?.referenceImages?.length ? resolution.referenceImages : this.referenceImages;\n        const identity = url => String(url || '').replace(/^https?:/, '').split('?')[0];\n        const seen = new Set(images.map(image => identity(image.url)));\n        const referenceDisclosure = 'Fotografie de referin\u021B\u0103 \u00B7 culoarea poate diferi.';\n        for (const reference of references) {\n          const url = reference.kind === 'theme_asset' ? `${this.dataset.assetBase}${reference.asset}` : reference.url;\n          if (!url || !eligible(reference) || seen.has(identity(url))) continue;\n          seen.add(identity(url));\n          images.push({ url, alt: `${this.product.title} \u00B7 ${referenceDisclosure}`, role: 'reference', referenceDisclosure, ...this.sampleMetadata(reference) });\n        }\n        note = matchedCount > 1\n          ? `${matchedCount} perspective pentru culoarea selectat\u0103${images.some(image => image.referenceDisclosure) ? ' \u00B7 fotografii de referin\u021B\u0103 suplimentare.' : '.'}`\n          : images.some(image => image.referenceDisclosure)\n            ? 'Culoarea selectat\u0103 \u00EEn imaginea principal\u0103 \u00B7 celelalte fotografii sunt de referin\u021B\u0103.'\n            : 'Imaginea principal\u0103 corespunde culorii selectate.';\n      }\n      else {\n        images = resolution?.referenceImages?.length ? resolution.referenceImages.map(image => ({ url: image.url, alt: this.product.title, role: 'reference', ...this.sampleMetadata(image) })) : [...this.referenceImages];\n        if (resolution?.requiresGeometryReview) note = 'Fotografii de referin\u021B\u0103 \u00B7 propor\u021Biile pot varia cu configura\u021Bia aleas\u0103.';\n        if (resolution?.requiresComponentReview) note = 'Fotografii de referin\u021B\u0103 \u00B7 piesele incluse se confirm\u0103 \u00EEnainte de comand\u0103.';\n      }\n      // Server-side evidence also guards a failed or stale cached manifest.\n      if (supplierSample) {\n        // An older JSON map can still contain a newly excluded report/collage.\n        // When the current page identifies the sample, its filtered originals\n        // are authoritative even if a stale manifest offers more references.\n        images = this.dataset.supplierSample === 'true' ? this.referenceImages.map(image => ({ ...image, role: 'reference' }))\n          : resolution?.referenceImages?.length ? resolution.referenceImages.map(image => ({ url: image.url, alt: this.product.title, role: 'reference', ...this.sampleMetadata(image) })) : [...this.referenceImages];\n        isMatched = false; studioActive = false;\n        note = sampleReferenceNote;\n      }\n      if (isMatched && resolution?.sharesWhiteRepresentation) note += ' Reprezentare \u00EEn metal alb pentru platin\u0103.';\n      if (!images.length) {\n        this.clearGallery('Fotografiile modelului nu sunt disponibile momentan.', supplierSample);\n        return;\n      }\n      images = window.CorsailleEditorialOnHand.append(images,manifest,this.product.handle,this.product.id,this.variant.id,{validated:isMatched&&!sourceHold&&!supplierSample,sourceKey:this.dataset.sourceKey,unit:window.CorsailleEditorialOnHand.selectedUnit(this,this.variant.id),family,title:this.product.title,excludedIds:[...excludedIds]});\n      images = this.prepareGalleryImages(images);\n      const unchanged = images.length === this.images.length && images.every((image, index) => image.url === this.images[index].url && this.galleryImageURL(image) === this.galleryImageURL(this.images[index]));\n      let activeIndex = this.activeImage;\n      if (!unchanged && this.images[this.activeImage]?.editorialKey && !images.some(image => image.editorialKey === this.images[this.activeImage].editorialKey)) {\n        const editorialDialog = this.querySelector('[data-image-dialog]');\n        if (editorialDialog?.open) editorialDialog.close();\n      }\n      if (!unchanged) {\n        try {\n          // A shopper may choose another angle while the new metal loads; retain their latest intent.\n          do {\n            activeIndex = this.matchingImage(images);\n            await this.decodeGalleryImage(images[activeIndex]);\n            if (revision !== this.mediaRevision) return;\n          } while (activeIndex !== this.matchingImage(images));\n        } catch {\n          if (revision !== this.mediaRevision) return;\n          images = this.prepareGalleryImages([...this.referenceImages]); isMatched = false; studioActive = false;\n          note = supplierSample ? sampleReferenceNote : 'Fotografii de referin\u021B\u0103 \u00B7 imaginea culorii selectate nu este disponibil\u0103 momentan.';\n          activeIndex = this.matchingImage(images);\n          try { if (!images.length) throw new Error('No reference image'); await this.decodeGalleryImage(images[activeIndex]); }\n          catch {\n            if (revision !== this.mediaRevision) return;\n            this.clearGallery(note, supplierSample);\n            return;\n          }\n        }\n      }\n      if (revision !== this.mediaRevision) return;\n      this.studioGallery = studioActive;\n      if (!unchanged) {\n        this.viewRevision++;\n        this.pendingImage = null;\n        this.images = images; this.activeImage = activeIndex;\n        this.querySelector('[data-slides]').innerHTML = images.map((image, index) => `<figure class=\"cl-slide${index === activeIndex ? ' is-active' : ''}\" data-slide ${index !== activeIndex ? 'hidden' : ''}><img src=\"${esc(this.galleryImageURL(image))}\" alt=\"${esc(image.alt)}\" loading=\"${index !== activeIndex ? 'lazy' : 'eager'}\" decoding=\"async\"></figure>`).join('');\n        this.renderThumbnails(); this.applyImage(activeIndex);\n      } else {\n        // The same bytes may change from a matched source to a reference.\n        // Refresh provenance without replacing the array (pending navigation\n        // holds that identity) or mutating objects shared with SSR references.\n        images.forEach((image, index) => { this.images[index] = { ...image }; });\n        if (this.galleryAnchor) this.galleryAnchor = this.images.find(image => image.url === this.galleryAnchor.url) || this.galleryAnchor;\n      }\n      this.mediaNote = note; this.mediaLoadingNote = ''; this.mediaPending = false;\n      this.mediaImageLabel = isMatched ? family === 'yellow' ? 'Aur galben' : family === 'rose' ? 'Aur roz' : 'Metal alb' : supplierSample ? 'Mostr\u0103 furnizor' : 'Detaliile crea\u021Biei';\n      this.querySelector('[data-image-label]').textContent = this.mediaImageLabel;\n      this.syncStudioCaption();\n      this.dataset.mediaMode = isMatched ? resolution?.mode || 'reference' : 'reference';\n      this.updateGalleryLoading();\n      this.maybeCueGallery();\n      this.queueGalleryPreload();\n      this.queueMetalPreload(manifest, studioManifest);\n    }\n    thumbnailURL(value) {\n      // Deliver a small derivative, not a newly edited asset. Gallery/zoom URLs\n      // and every product, variant and source binding retain their master URL.\n      try {\n        if (!window.location?.href) return value;\n        const url = new URL(value, window.location.href);\n        const ownShop = url.origin === window.location.origin && /^\\/cdn\\/shop\\/(?:t\\/\\d+\\/assets|files|products)\\//.test(url.pathname);\n        const shopifyFiles = url.hostname === 'cdn.shopify.com' && /^\\/s\\/files\\/[^?#]+\\/(?:files|products)\\//.test(url.pathname);\n        if (url.protocol !== 'https:' || url.username || url.password || !(ownShop || shopifyFiles) || !/\\.(?:webp|png|jpe?g|avif)$/i.test(url.pathname)) return value;\n        // Preserve any deliberately cropped source exactly as supplied.\n        if (['height', 'crop', 'crop_width', 'crop_height'].some(key => url.searchParams.has(key))) return value;\n        url.searchParams.set('width', '180');\n        return url.href;\n      } catch { return value; }\n    }\n    renderThumbnails() {\n      this.querySelector('[data-zoom]').disabled = this.images.length === 0;\n      this.querySelector('[data-thumbnails]').innerHTML = this.images.map((image, index) => {\n        const thumbnail = this.thumbnailURL(image.url);\n        return `<button class=\"cl-thumb${index === this.activeImage ? ' is-active' : ''}\" type=\"button\" data-image-index=\"${index}\" aria-label=\"Fotografia ${index + 1}${image.referenceDisclosure ? ' \u00B7 de referin\u021B\u0103, culoarea poate diferi' : ''}\" aria-pressed=\"${index === this.activeImage}\"><img src=\"${esc(thumbnail)}\"${thumbnail !== image.url ? ` data-thumbnail-source=\"${esc(image.url)}\"` : ''} alt=\"\" loading=\"eager\" decoding=\"async\"></button>`;\n      }).join('');\n      window.CorsailleEditorialOnHand.paintThumbnails(this);\n      this.querySelectorAll('[data-thumbnail-source]').forEach(image => image.addEventListener('error', () => {\n        const original = image.dataset.thumbnailSource;\n        if (!original) return;\n        delete image.dataset.thumbnailSource;\n        image.dataset.thumbnailFallback = 'original';\n        image.src = original;\n      }, { once: true }));\n      this.querySelectorAll('.cl-gallery-controls,[data-thumbnails]').forEach(node => { node.hidden = this.images.length < 2; });\n      this.querySelectorAll('[data-dialog-prev],[data-dialog-next]').forEach(node => { node.hidden = this.images.length < 2; });\n      this.querySelector('[data-secondary]').innerHTML = this.images.slice(1, 3).map(image => `<img src=\"${esc(this.galleryImageURL(image))}\" alt=\"\" loading=\"lazy\">`).join('');\n      this.querySelector('[data-count]').textContent = `${this.images.length ? this.activeImage + 1 : 0} / ${this.images.length}`;\n      this.querySelectorAll('[data-next],[data-prev],[data-dialog-prev],[data-dialog-next]').forEach(button => { button.disabled = this.images.length < 2; });\n      this.querySelectorAll('[data-next],[data-dialog-next]').forEach(button => { button.dataset.galleryDirection = 'next'; });\n      this.querySelectorAll('[data-prev],[data-dialog-prev]').forEach(button => { button.dataset.galleryDirection = 'previous'; });\n    }\n    async showImage(index) {\n      if (!this.images.length) return false;\n      this.suppressGalleryCue();\n      const revision = ++this.viewRevision;\n      const images = this.images;\n      const next = ((index % images.length) + images.length) % images.length;\n      this.galleryAnchor = images[next];\n      if (next === this.activeImage) { this.pendingImage = null; this.updateGalleryLoading(); return true; }\n      this.pendingImage = next; this.updateGalleryLoading();\n      try { await this.decodeGalleryImage(images[next]); }\n      catch {\n        if (revision !== this.viewRevision || images !== this.images) return false;\n        this.pendingImage = null; this.galleryAnchor = images[this.activeImage]; this.updateGalleryLoading();\n        this.syncStudioCaption('Aceast\u0103 fotografie nu este disponibil\u0103 momentan. \u00CEncearc\u0103 din nou.');\n        return false;\n      }\n      if (revision !== this.viewRevision || images !== this.images) return false;\n      this.pendingImage = null;\n      if (this.hybridMediaDelivery()) {\n        const frame = this.querySelectorAll('[data-slide]')[next]?.querySelector('img');\n        if (frame) frame.src = this.galleryImageURL(images[next]);\n      }\n      this.applyImage(next); this.updateGalleryLoading();\n      this.queueGalleryPreload();\n      if (!this.mediaPending && this.mediaNote) this.syncStudioCaption();\n      return true;\n    }\n    applyImage(index) {\n      this.activeImage = index;\n      this.querySelectorAll('[data-slide]').forEach((slide, slideIndex) => { slide.hidden = slideIndex !== this.activeImage; slide.classList.toggle('is-active', !slide.hidden); });\n      this.querySelectorAll('[data-image-index]').forEach((button, buttonIndex) => { button.setAttribute('aria-pressed', String(buttonIndex === this.activeImage)); button.classList.toggle('is-active', buttonIndex === this.activeImage); });\n      this.querySelector('[data-count]').textContent = `${this.activeImage + 1} / ${this.images.length}`;\n      this.updateEnlarged();\n      this.syncStudioCaption();\n    }\n    updateEnlarged(force = false) {\n      const enlarged = this.querySelector('[data-enlarged]');\n      if (!this.images[this.activeImage]) { enlarged.removeAttribute('src'); return; }\n      if (this.hybridMediaDelivery() && !force && !this.querySelector('[data-image-dialog]')?.open) return;\n      enlarged.src = this.images[this.activeImage].url; enlarged.alt = this.images[this.activeImage].alt;\n    }\n    setupGalleryCue() {\n      this.dataset.galleryCue = 'false';\n      if (!('IntersectionObserver' in window)) return;\n      this.galleryObserver = new IntersectionObserver(entries => {\n        this.galleryVisible = entries.some(entry => entry.isIntersecting && entry.intersectionRatio >= .5);\n        this.maybeCueGallery();\n      }, { threshold: .5 });\n      this.galleryObserver.observe(this.querySelector('.cl-gallery'));\n    }\n    suppressGalleryCue() {\n      this.galleryCueUsed = true;\n      clearTimeout(this.galleryCueTimer);\n      this.dataset.galleryCue = 'false';\n      this.galleryObserver?.disconnect();\n    }\n    async maybeCueGallery() {\n      if (this.galleryCueUsed || this.galleryCuePending || !this.galleryVisible || this.mediaPending || this.images.length < 2) return;\n      this.galleryCuePending = true;\n      const images = this.images;\n      const first = this.galleryImageURL(images[this.activeImage]);\n      const second = images.map(image => this.galleryImageURL(image)).find(url => url !== first);\n      try {\n        if (!second) return;\n        await Promise.all([this.decodeImage(first), this.decodeImage(second)]);\n        if (this.galleryCueUsed || !this.galleryVisible || this.mediaPending || images !== this.images) return;\n        this.galleryCueUsed = true;\n        this.dataset.galleryCue = 'true';\n        this.galleryObserver?.disconnect();\n        this.galleryCueTimer = setTimeout(() => { this.dataset.galleryCue = 'false'; }, 650);\n      } catch { /* A failed optional preview never interrupts the gallery. */ }\n      finally { this.galleryCuePending = false; if (images !== this.images && !this.galleryCueUsed) this.maybeCueGallery(); }\n    }\n    setupCTAGlare() {\n      this.glareButton = this.querySelector('[data-submit]');\n      if (!this.glareButton || !('IntersectionObserver' in window) || (this.glareIntroUsed && this.glareReadyUsed)) return;\n      this.teardownCTAGlare();\n      this.glareVisible = false;\n      this.glareObserver = new IntersectionObserver(entries => {\n        this.glareVisible = entries.some(entry => entry.isIntersecting && entry.intersectionRatio >= .65);\n        this.updateCTAGlare();\n      }, { threshold: .65 });\n      this.glareObserver.observe(this.glareButton);\n      this.glareVisibilityHandler = () => this.updateCTAGlare();\n      document.addEventListener('visibilitychange', this.glareVisibilityHandler);\n      document.addEventListener('cs:overlay-change', this.glareVisibilityHandler);\n      this.glareModalObserver = new MutationObserver(() => this.updateCTAGlare());\n      this.glareModalObserver.observe(document.documentElement, { subtree: true, attributes: true, attributeFilter: ['open', 'hidden', 'inert', 'data-cs-overlay-open'] });\n      this.updateCTAGlare();\n    }\n    teardownCTAGlare() {\n      this.glareObserver?.disconnect(); this.glareObserver = null;\n      this.glareModalObserver?.disconnect(); this.glareModalObserver = null;\n      document.removeEventListener('visibilitychange', this.glareVisibilityHandler);\n      document.removeEventListener('cs:overlay-change', this.glareVisibilityHandler);\n    }\n    canShowCTAGlare() {\n      // Layout/scroll can change between observer deliveries, particularly when\n      // sizing opens. Never spend a one-shot cue on stale intersection state.\n      const rect = this.glareButton.getBoundingClientRect();\n      const visibleWidth = Math.max(0, Math.min(rect.right, innerWidth) - Math.max(rect.left, 0));\n      const visibleHeight = Math.max(0, Math.min(rect.bottom, innerHeight) - Math.max(rect.top, 0));\n      const visibleNow = rect.width > 0 && rect.height > 0 && visibleWidth * visibleHeight / (rect.width * rect.height) >= .65;\n      // Header overlays remain visible briefly after their coordinator unlocks the page.\n      const overlayOpen = window.CorsailleOverlayCoordinator?.current || document.documentElement.hasAttribute('data-cs-overlay-open')\n        || document.querySelector('dialog[open],[data-cs-menu]:not([hidden]),[data-cs-search-overlay]:not([hidden])');\n      return this.isConnected && this.glareVisible && visibleNow && !document.hidden && !this.busy && this.variant.available && !this.glareButton.disabled && !this.glareButton.closest('[inert]') && !overlayOpen;\n    }\n    cancelCTAGlare(consume = false) {\n      clearTimeout(this.glareIntroTimer); this.glareIntroTimer = null;\n      clearTimeout(this.glareEndTimer); this.glareEndTimer = null;\n      if (this.glareButton) delete this.glareButton.dataset.glare;\n      if (consume) {\n        this.glareIntroUsed = this.glareReadyUsed = true;\n        this.glareReadyPending = false;\n        this.teardownCTAGlare();\n      }\n    }\n    playCTAGlare(kind) {\n      if (!this.canShowCTAGlare()) return;\n      clearTimeout(this.glareIntroTimer); this.glareIntroTimer = null;\n      this.glareIntroUsed = true;\n      if (kind === 'ready') { this.glareReadyUsed = true; this.glareReadyPending = false; }\n      this.glareButton.dataset.glare = kind;\n      this.glareEndTimer = setTimeout(() => {\n        this.glareEndTimer = null;\n        delete this.glareButton.dataset.glare;\n        if (this.glareIntroUsed && this.glareReadyUsed) this.teardownCTAGlare();\n      }, 700);\n    }\n    requestReadyGlare() {\n      if (!this.glareButton || this.glareReadyUsed || this.glareReadyPending) return;\n      this.glareReadyPending = true;\n      this.glareIntroUsed = true;\n      clearTimeout(this.glareIntroTimer); this.glareIntroTimer = null;\n      if (this.glareButton.dataset.glare === 'intro' && this.canShowCTAGlare()) {\n        // Both CSS states share one animation: increase its strength, never restart the sweep.\n        this.glareReadyUsed = true; this.glareReadyPending = false;\n        this.glareButton.dataset.glare = 'ready';\n        return;\n      }\n      this.updateCTAGlare();\n    }\n    updateCTAGlare() {\n      if (!this.glareButton) return;\n      if (!this.isConnected || this.busy) { this.cancelCTAGlare(true); return; }\n      if (!this.canShowCTAGlare()) { this.cancelCTAGlare(); return; }\n      if (this.glareButton.dataset.glare) return;\n      if (this.glareReadyPending && !this.glareReadyUsed) { this.playCTAGlare('ready'); return; }\n      if (this.glareIntroUsed || this.glareIntroTimer) return;\n      this.glareIntroTimer = setTimeout(() => {\n        this.glareIntroTimer = null;\n        if (this.canShowCTAGlare()) this.playCTAGlare('intro');\n        else this.updateCTAGlare();\n      }, 1000);\n    }\n    setupSticky() {\n      this.scrollHandler = () => { if (this.scrollPending) return; this.scrollPending = true; requestAnimationFrame(() => { this.scrollPending = false; this.updateSticky(); }); };\n      window.addEventListener('scroll', this.scrollHandler, { passive: true }); window.addEventListener('resize', this.scrollHandler);\n      this.updateSticky();\n    }\n    updateSticky() {\n      const cta = this.querySelector('[data-submit]').getBoundingClientRect(); const footer = document.querySelector('footer'); const footerVisible = footer && footer.getBoundingClientRect().top < innerHeight;\n      this.querySelector('[data-sticky]').hidden = !(cta.bottom < 0 && !footerVisible && !document.querySelector('dialog[open]'));\n      this.updateCTAGlare();\n    }\n    async addToCart(event) {\n      event.preventDefault(); if (!this.variant.available || this.busy) return;\n      if (!this.sizeReady()) { this.focusMissingSize(); return; }\n      this.finishPriceAnimation();\n      const drawer = document.querySelector('cart-drawer');\n      const cartTrigger = event.submitter || (this.contains(document.activeElement) && document.activeElement.closest('[data-submit],[data-sticky-action]')) || this.querySelector('[data-submit]');\n      drawer?.setActiveElement?.(cartTrigger);\n      this.busy = true; this.sync(); const status = this.querySelector('[data-form-status]'); status.textContent = '';\n      const form = new FormData(this.querySelector('[data-product-form]'));\n      try {\n        this.pairPurchase?.prepareCart(form);\n        if (drawer?.getSectionsToRender) {\n          try { form.append('sections', drawer.getSectionsToRender().map(section => section.id).join(',')); form.append('sections_url', location.pathname); }\n          catch { /* Optional drawer preparation must not prevent the cart request. */ }\n        }\n        const root = window.Shopify?.routes?.root || '/';\n        const response = await fetch(`${root}cart/add.js`, { method: 'POST', body: form, headers: { Accept: 'application/json' } }); const result = await response.json();\n        if (!response.ok) throw new Error(result.description || 'Configura\u021Bia nu a putut fi ad\u0103ugat\u0103.');\n        status.textContent = 'Crea\u021Bia a fost ad\u0103ugat\u0103 \u00EEn co\u0219.';\n        const cartLink = document.createElement('a'); cartLink.href = `${root}cart`; cartLink.textContent = 'Vezi co\u0219ul'; status.append(' ', cartLink);\n        if (drawer?.renderContents && result.sections) { try { drawer.classList.remove('is-empty'); drawer.renderContents(result); } catch { /* The cart addition succeeded; keep its confirmation and working cart link. */ } }\n        window.CorsailleCartAddFeedback20260929?.added(result);\n      } catch (error) { status.textContent = error.message || '\u00CEncearc\u0103 din nou.'; }\n      finally { this.busy = false; this.sync(); }\n    }\n  }\n  customElements.define('corsaille-ring-lab', RingLab);\n})();\n"],
  "mappings": "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",
  "names": ["v", "i", "value"]
}
