{"product_id":"nfc-kartica-prilog-4","title":"🍒 Cherry Original","description":"\u003cdiv id=\"cherry-main-wrapper\" class=\"cherry-product-widgets\"\u003e\n  \u003cstyle\u003e\n    \/* 1. ROOT VARIJABLE ZA ELEGANTAN DIZAJN *\/\n    .cherry-product-widgets {\n      --ch-accent-light: #d16b82;\n      --ch-accent-dark: #b84c64;\n      --ch-accent-gradient: linear-gradient(135deg, var(--ch-accent-light) 0%, var(--ch-accent-dark) 100%);\n      --ch-accent-shadow: rgba(184, 76, 100, 0.25);\n      \n      --ch-dark: #6e0f1d;\n      --ch-text: #4a1515;\n      --ch-bg-soft: #fffafa;\n      --ch-border-light: rgba(184, 76, 100, 0.12);\n      \n      --ch-radius-lg: 16px;\n      --ch-radius-md: 14px;\n      --ch-radius-sm: 10px;\n      --ch-transition: all 0.3s cubic-bezier(0.25, 0.8, 0.25, 1);\n      \n      display: flex;\n      flex-direction: column;\n      gap: 14px;\n      margin-top: 24px;\n      margin-bottom: 24px; \n      font-family: inherit;\n    }\n\n    \/* 2. DUGMIĆI U JEDNOM REDU (NOVO) *\/\n    .ch-actions-row {\n      display: grid;\n      grid-template-columns: 1fr 1fr;\n      gap: 12px;\n    }\n\n    @media (max-width: 480px) {\n      \/* Na jako malim telefonima ih vraćamo u kolonu da tekst ne bi bio previše sitan *\/\n      .ch-actions-row {\n        grid-template-columns: 1fr;\n      }\n    }\n\n    .ch-action-col {\n      display: flex;\n      flex-direction: column;\n    }\n\n    .ch-btn-main {\n      width: 100%;\n      height: 100%; \/* Da oba dugmeta budu iste visine *\/\n      border: 1px solid rgba(255, 255, 255, 0.15);\n      outline: none;\n      cursor: pointer;\n      display: flex;\n      align-items: center;\n      justify-content: space-between;\n      gap: 8px;\n      padding: 16px 14px;\n      border-radius: var(--ch-radius-lg);\n      background: var(--ch-accent-gradient);\n      color: #ffffff;\n      box-shadow: 0 6px 16px rgba(184, 76, 100, 0.15), inset 0 1px 0 rgba(255, 255, 255, 0.1);\n      text-decoration: none !important;\n      transition: var(--ch-transition);\n      -webkit-appearance: none;\n      appearance: none;\n    }\n\n    .ch-btn-main:hover {\n      transform: translateY(-2px);\n      box-shadow: 0 10px 20px var(--ch-accent-shadow), inset 0 1px 0 rgba(255, 255, 255, 0.2);\n      filter: brightness(1.02);\n    }\n\n    .ch-btn-main:active {\n      transform: translateY(0);\n      box-shadow: 0 4px 10px var(--ch-accent-shadow);\n    }\n\n    .ch-btn-text {\n      text-align: left;\n      flex: 1 1 auto;\n      pointer-events: none;\n      text-shadow: 0 1px 2px rgba(0,0,0,0.08);\n    }\n\n    .ch-action-title {\n      display: block;\n      font-size: 14px;\n      font-weight: 700;\n      margin-bottom: 2px;\n      line-height: 1.2;\n    }\n\n    .ch-action-sub {\n      display: block;\n      font-size: 11px;\n      font-weight: 500;\n      opacity: 0.85;\n      line-height: 1.2;\n    }\n\n    .ch-chevron {\n      width: 10px;\n      height: 10px;\n      border-right: 2px solid rgba(255, 255, 255, 0.9);\n      border-bottom: 2px solid rgba(255, 255, 255, 0.9);\n      transform: rotate(45deg);\n      transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);\n      flex: 0 0 auto;\n      margin-left: 4px;\n      pointer-events: none;\n    }\n\n    .is-open .ch-chevron { transform: rotate(-135deg); }\n\n    \/* 3. OPIS PROIZVODA (\"READ MORE\") *\/\n    .ch-description-box {\n      border-radius: var(--ch-radius-lg);\n      background: linear-gradient(180deg, #ffffff, #fff7f7);\n      border: 1px solid var(--ch-border-light);\n      box-shadow: 0 4px 14px rgba(0, 0, 0, 0.03);\n      padding: 22px;\n      transition: var(--ch-transition);\n    }\n    \n    .ch-desc-title {\n      font-size: 16px;\n      font-weight: 700;\n      color: var(--ch-dark);\n      margin: 0 0 12px 0;\n    }\n\n    .ch-desc-content {\n      position: relative;\n      font-size: 14.5px;\n      line-height: 1.75;\n      color: var(--ch-text);\n      opacity: 0.9;\n      max-height: 130px;\n      overflow: hidden;\n      transition: max-height 0.4s ease;\n    }\n\n    .ch-desc-content::after {\n      content: \"\";\n      position: absolute;\n      bottom: 0; left: 0; right: 0;\n      height: 60px;\n      background: linear-gradient(to bottom, rgba(255, 247, 247, 0) 0%, #fff7f7 100%);\n      pointer-events: none;\n      transition: opacity 0.3s ease;\n    }\n\n    .ch-desc-content.is-expanded { max-height: 800px; }\n    .ch-desc-content.is-expanded::after { opacity: 0; }\n    .ch-desc-content p { margin: 0 0 12px 0; }\n    .ch-desc-content p:last-child { margin-bottom: 0; }\n\n    .ch-read-more-btn {\n      display: inline-flex;\n      align-items: center;\n      gap: 6px;\n      margin-top: 12px;\n      background: none;\n      border: none;\n      color: var(--ch-accent-dark);\n      font-size: 14px;\n      font-weight: 700;\n      cursor: pointer;\n      padding: 0;\n      outline: none;\n      transition: color 0.2s ease;\n    }\n    .ch-read-more-btn:hover { color: var(--ch-dark); }\n\n    \/* 4. UNUTRAŠNJI PANELI (NFC \/ QR) *\/\n    .ch-panel-wrapper {\n      background: #ffffff;\n      border-radius: var(--ch-radius-lg);\n      border: 1px solid var(--ch-border-light);\n      box-shadow: 0 8px 24px rgba(0, 0, 0, 0.04);\n      overflow: hidden;\n    }\n\n    .ch-panel {\n      padding: 24px;\n      animation: slideDown 0.3s ease forwards;\n    }\n    \n    @keyframes slideDown {\n      from { opacity: 0; transform: translateY(-8px); }\n      to { opacity: 1; transform: translateY(0); }\n    }\n\n    .ch-badge {\n      display: inline-block;\n      padding: 4px 10px;\n      border-radius: 6px;\n      background: rgba(184, 76, 100, 0.08);\n      color: var(--ch-accent-dark);\n      font-weight: 700;\n      font-size: 11px;\n      text-transform: uppercase;\n      letter-spacing: 0.5px;\n      margin-bottom: 12px;\n    }\n\n    .ch-title { color: var(--ch-dark); font-weight: 700; font-size: 16px; line-height: 1.3; margin: 0 0 6px; }\n    .ch-sub { color: rgba(74, 21, 21, 0.6); font-size: 13px; line-height: 1.4; margin: 0 0 20px; }\n\n    .ch-field-group { display: grid; gap: 16px; }\n    .ch-field label { display: block; font-size: 12.5px; font-weight: 600; margin-bottom: 8px; color: var(--ch-text); text-transform: uppercase; letter-spacing: 0.3px; opacity: 0.8; }\n    \n    .ch-field select, .ch-field input[type=\"text\"] {\n      width: 100%; padding: 14px 16px; border-radius: var(--ch-radius-sm); border: 1px solid #e8dbdb;\n      background: #fafafa; color: var(--ch-text); outline: none; font-family: inherit; font-size: 14.5px; \n      transition: var(--ch-transition); box-shadow: inset 0 2px 4px rgba(0,0,0,0.01);\n    }\n    .ch-field select:focus, .ch-field input[type=\"text\"]:focus {\n      background: #ffffff; border-color: var(--ch-accent-light); box-shadow: 0 0 0 4px rgba(209, 107, 130, 0.15);\n    }\n    .ch-hint { display: block; margin-top: 6px; font-size: 12px; opacity: 0.6; }\n\n    .ch-qr-input-hidden { position: absolute !important; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; }\n    .ch-qr-actions { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; margin-top: 8px; }\n    \n    .ch-btn-upload {\n      display: inline-flex; align-items: center; justify-content: center; gap: 8px;\n      padding: 12px 20px; border-radius: var(--ch-radius-sm); cursor: pointer;\n      background: var(--ch-bg-soft); color: var(--ch-accent-dark); font-weight: 600; font-size: 14px;\n      border: 1px solid var(--ch-accent-light); transition: var(--ch-transition);\n    }\n    .ch-btn-upload:hover { background: var(--ch-accent-light); color: #fff; }\n    \n    .ch-btn-remove {\n      appearance: none; background: transparent; color: #888; border: none; padding: 12px 4px; font-weight: 600; font-size: 13px; cursor: pointer;\n      transition: var(--ch-transition); text-decoration: underline;\n    }\n    .ch-btn-remove:hover { color: #d93025; }\n    \n    .ch-qr-preview-box {\n      margin-top: 20px; position: relative; height: 180px; border-radius: var(--ch-radius-md);\n      overflow: hidden; border: 2px dashed #e8dbdb; background: #fafafa;\n      display: flex; align-items: center; justify-content: center; flex-direction: column; text-align: center;\n      transition: var(--ch-transition);\n    }\n    .ch-qr-preview-box.has-image { border-style: solid; border-color: var(--ch-border-light); background: #ffffff; }\n    .ch-qr-img { width: 100%; height: 100%; object-fit: contain; padding: 10px; }\n    \n    .ch-qr-placeholder-icon { font-size: 32px; color: #d1b8b8; margin-bottom: 8px; }\n    .ch-qr-note { margin-top: 20px; color: rgba(74, 21, 21, 0.5); font-size: 12px; padding-top: 16px; border-top: 1px solid #f0e6e6; text-align: center; }\n\n    [hidden] { display: none !important; }\n\n  \u003c\/style\u003e\n\n  \u003cdiv class=\"ch-description-box\"\u003e\n    \u003ch3 class=\"ch-desc-title\"\u003eOpis proizvoda\u003c\/h3\u003e\n    \u003cdiv class=\"ch-desc-content\" id=\"chDescContent\"\u003e\n      \u003cp\u003e\u003cstrong\u003eCherryCard Classic\u003c\/strong\u003e je elegantno i profesionalno rešenje za digitalno umrežavanje. Kartica se štampa \u003cstrong\u003eUV štampačem\u003c\/strong\u003e, što omogućava precizne detalje, postojane boje i dugotrajnu otpornost na svakodnevno korišćenje.\u003c\/p\u003e\n      \u003cp\u003eDostupna je u \u003cstrong\u003e4 ekskluzivna CherryCard dizajna\u003c\/strong\u003e, kreirana u okviru našeg brenda — od čistog minimalizma do modernog i razigranog stila. Svaki dizajn je unikatan i odmah prepoznatljiv.\u003c\/p\u003e\n      \u003cp\u003eNa CherryCard Classic može se upisati sve što i na ostale CherryCard proizvode: \u003cstrong\u003ekontakt podaci\u003c\/strong\u003e, \u003cstrong\u003edruštvene mreže\u003c\/strong\u003e, \u003cstrong\u003eweb sajt\u003c\/strong\u003e, \u003cstrong\u003eonline prodavnica\u003c\/strong\u003e, \u003cstrong\u003eGoogle lokacija\u003c\/strong\u003e, \u003cstrong\u003eportfolio\u003c\/strong\u003e, \u003cstrong\u003ePDF fajlovi\u003c\/strong\u003e, \u003cstrong\u003emeniji\u003c\/strong\u003e i još mnogo toga.\u003c\/p\u003e\n      \u003cp\u003eJedan tap dovoljan je za trenutno deljenje svih važnih informacija — bez aplikacija i bez komplikacija. \u003cstrong\u003eKlasična forma. Digitalna moć.\u003c\/strong\u003e\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cbutton type=\"button\" class=\"ch-read-more-btn\" id=\"chReadMoreBtn\"\u003e\n      Pročitaj više ↓\n    \u003c\/button\u003e\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"ch-actions-row\"\u003e\n    \n    \u003cdiv id=\"cc-nfc-wrap\" class=\"ch-action-col\"\u003e\n      \u003cbutton type=\"button\" class=\"ch-btn-main\" id=\"ccNfcToggle\" aria-expanded=\"false\" aria-controls=\"ccNfcPanel\"\u003e\n        \u003cspan class=\"ch-btn-text\"\u003e\n          \u003cspan class=\"ch-action-title\"\u003ePodešavanje\u003c\/span\u003e\n          \u003cspan class=\"ch-action-sub\"\u003eVi podesite za mene\u003c\/span\u003e\n        \u003c\/span\u003e\n        \u003cspan class=\"ch-chevron\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n      \u003c\/button\u003e\n    \u003c\/div\u003e\n\n    \u003cdiv id=\"ch-qr-wrap\" class=\"ch-action-col\" data-ch-required=\"false\"\u003e\n      \u003cbutton type=\"button\" class=\"ch-btn-main\" id=\"chQrToggle\" aria-expanded=\"false\" aria-controls=\"chQrPanel\"\u003e\n        \u003cspan class=\"ch-btn-text\"\u003e\n          \u003cspan class=\"ch-action-title\"\u003eQR poleđina\u003c\/span\u003e\n          \u003cspan class=\"ch-action-sub\"\u003eOpcioni PNG fajl\u003c\/span\u003e\n        \u003c\/span\u003e\n        \u003cspan class=\"ch-chevron\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n      \u003c\/button\u003e\n    \u003c\/div\u003e\n\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"ch-panel-wrapper\" id=\"ccNfcPanel\" hidden\u003e\n    \u003cdiv class=\"ch-panel\"\u003e\n      \u003cdiv class=\"ch-badge\"\u003eNFC Podešavanje\u003c\/div\u003e\n      \u003ch3 class=\"ch-title\"\u003eŠta želiš da podeliš jednim dodirom?\u003c\/h3\u003e\n      \u003cp class=\"ch-sub\"\u003eIzaberi tip podatka i unesi vrednost ispod.\u003c\/p\u003e\n\n      \u003cdiv class=\"ch-field-group\"\u003e\n        \u003cdiv class=\"ch-field\"\u003e\n          \u003clabel for=\"ccNfcType\"\u003eTip Linka\u003c\/label\u003e\n          \u003cselect id=\"ccNfcType\"\u003e\n            \u003coption value=\"\"\u003e— Izaberi iz liste —\u003c\/option\u003e\n            \u003coption value=\"Website\"\u003eWebsite\u003c\/option\u003e\n            \u003coption value=\"Instagram\"\u003eInstagram\u003c\/option\u003e\n            \u003coption value=\"TikTok\"\u003eTikTok\u003c\/option\u003e\n            \u003coption value=\"WhatsApp\"\u003eWhatsApp\u003c\/option\u003e\n            \u003coption value=\"SMS\"\u003eSMS\u003c\/option\u003e\n            \u003coption value=\"Telefon\"\u003eTelefon\u003c\/option\u003e\n            \u003coption value=\"Email\"\u003eEmail\u003c\/option\u003e\n            \u003coption value=\"Google Maps\"\u003eGoogle Maps\u003c\/option\u003e\n            \u003coption value=\"Drugo\"\u003eDrugo\u003c\/option\u003e\n          \u003c\/select\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"ch-field\"\u003e\n          \u003clabel for=\"ccNfcValue\"\u003eTvoj Podatak\u003c\/label\u003e\n          \u003cinput id=\"ccNfcValue\" type=\"text\" placeholder=\"npr. https:\/\/tvoj-sajt.com ili @instagram\"\u003e\n          \u003cspan class=\"ch-hint\"\u003eUnesi samo jedan podatak za povezivanje.\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"ch-panel-wrapper\" id=\"chQrPanel\" hidden\u003e\n    \u003cdiv class=\"ch-panel\"\u003e\n      \u003ch3 class=\"ch-title\"\u003eImaš svoj QR kod?\u003c\/h3\u003e\n      \u003cp class=\"ch-sub\"\u003eOtpremi fajl u PNG formatu ukoliko želiš da ga odštampamo na poleđini kartice.\u003c\/p\u003e\n\n      \u003cinput class=\"ch-qr-input-hidden\" id=\"ch_qr_png\" type=\"file\" name=\"properties[QR PNG]\" accept=\"image\/png\"\u003e\n\n      \u003cdiv class=\"ch-qr-actions\"\u003e\n        \u003clabel class=\"ch-btn-upload\" for=\"ch_qr_png\"\u003e\n          \u003cspan aria-hidden=\"true\"\u003e⇪\u003c\/span\u003e Dodaj PNG fajl\n        \u003c\/label\u003e\n        \u003cbutton class=\"ch-btn-remove\" type=\"button\" id=\"chQrRemove\" hidden\u003eObriši fajl\u003c\/button\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"ch-qr-preview-box\" id=\"chQrPreviewBox\" hidden\u003e\n        \u003cdiv id=\"chQrPlaceholder\" style=\"padding: 20px;\"\u003e\n          \u003cdiv class=\"ch-qr-placeholder-icon\"\u003e▣\u003c\/div\u003e\n          \u003cdiv style=\"font-weight: 700; font-size: 13px; color: var(--ch-dark);\"\u003ePregled koda\u003c\/div\u003e\n          \u003cdiv style=\"font-size: 12px; opacity: 0.6; margin-top: 4px;\"\u003ePrikazaće se ovde\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cimg class=\"ch-qr-img\" id=\"chQrImg\" alt=\"Preview QR PNG\" hidden\u003e\n      \u003c\/div\u003e\n      \n      \u003cdiv id=\"chQrMeta\" style=\"margin-top: 14px; font-size: 13px; font-weight: 600; color: var(--ch-dark); text-align: center;\" hidden\u003e\u003c\/div\u003e\n      \u003cdiv class=\"ch-qr-note\"\u003eQR kod nije obavezan. Kartica je potpuno funkcionalna i bez njega zahvaljujući NFC tehnologiji.\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n\u003c\/div\u003e\n\n\u003cscript\u003e\ndocument.addEventListener('DOMContentLoaded', () =\u003e {\n\n  const getProductForm = () =\u003e document.querySelector('product-form form[action*=\"\/cart\/add\"]') || document.querySelector('form[action*=\"\/cart\/add\"]');\n  const form = getProductForm();\n  const mainWrapper = document.getElementById('cherry-main-wrapper');\n\n  if (form \u0026\u0026 mainWrapper \u0026\u0026 !form.contains(mainWrapper)) {\n    const submitBtn = form.querySelector('button[type=\"submit\"], .product-form__submit');\n    if (submitBtn) {\n      submitBtn.parentElement.insertBefore(mainWrapper, submitBtn);\n    } else {\n      form.appendChild(mainWrapper);\n    }\n  }\n\n  if (mainWrapper) {\n    mainWrapper.addEventListener('click', (e) =\u003e {\n      \n      \/\/ Pročitaj Više dugme\n      const readMoreBtn = e.target.closest('#chReadMoreBtn');\n      if (readMoreBtn) {\n        e.preventDefault(); e.stopPropagation();\n        const content = document.getElementById('chDescContent');\n        const isExpanded = content.classList.contains('is-expanded');\n        \n        if (isExpanded) {\n          content.classList.remove('is-expanded');\n          readMoreBtn.innerHTML = 'Pročitaj više ↓';\n        } else {\n          content.classList.add('is-expanded');\n          readMoreBtn.innerHTML = 'Prikaži manje ↑';\n        }\n        return;\n      }\n\n      \/\/ NFC Toggle\n      const nfcBtn = e.target.closest('#ccNfcToggle');\n      if (nfcBtn) {\n        e.preventDefault(); e.stopPropagation();\n        const panel = document.getElementById('ccNfcPanel');\n        const isOpen = nfcBtn.getAttribute('aria-expanded') === 'true';\n        \n        nfcBtn.setAttribute('aria-expanded', !isOpen);\n        if(panel) panel.hidden = isOpen;\n        document.getElementById('cc-nfc-wrap').classList.toggle('is-open', !isOpen);\n        \n        \/\/ ZATVORI QR AKO JE OTVOREN (Akordion efekat)\n        if (!isOpen) {\n          document.getElementById('chQrToggle').setAttribute('aria-expanded', 'false');\n          document.getElementById('chQrPanel').hidden = true;\n          document.getElementById('ch-qr-wrap').classList.remove('is-open');\n        }\n        return;\n      }\n\n      \/\/ QR Toggle\n      const qrBtn = e.target.closest('#chQrToggle');\n      if (qrBtn) {\n        e.preventDefault(); e.stopPropagation();\n        const panel = document.getElementById('chQrPanel');\n        const isOpen = qrBtn.getAttribute('aria-expanded') === 'true';\n        \n        qrBtn.setAttribute('aria-expanded', !isOpen);\n        if(panel) panel.hidden = isOpen;\n        document.getElementById('ch-qr-wrap').classList.toggle('is-open', !isOpen);\n\n        \/\/ ZATVORI NFC AKO JE OTVOREN (Akordion efekat)\n        if (!isOpen) {\n          document.getElementById('ccNfcToggle').setAttribute('aria-expanded', 'false');\n          document.getElementById('ccNfcPanel').hidden = true;\n          document.getElementById('cc-nfc-wrap').classList.remove('is-open');\n        }\n        return;\n      }\n\n      \/\/ Brisanje fajla\n      const removeBtn = e.target.closest('#chQrRemove');\n      if (removeBtn) {\n        e.preventDefault(); e.stopPropagation();\n        clearQr();\n        return;\n      }\n    });\n  }\n\n  \/\/ NFC Hidden Inputs sinhronizacija\n  if (form \u0026\u0026 mainWrapper) {\n    const typeSel = document.getElementById('ccNfcType');\n    const valueInp = document.getElementById('ccNfcValue');\n\n    const ensureHidden = (key) =\u003e {\n      let el = form.querySelector(`input[type=\"hidden\"][name=\"properties[${key}]\"]`);\n      if (!el) {\n        el = document.createElement('input'); el.type = 'hidden'; el.name = `properties[${key}]`;\n        form.appendChild(el);\n      }\n      return el;\n    };\n\n    const syncNfc = () =\u003e {\n      if(typeSel) ensureHidden('NFC tip').value = (typeSel.value || '').trim();\n      if(valueInp) ensureHidden('Unesi podatak').value = (valueInp.value || '').trim();\n    };\n\n    if(typeSel) typeSel.addEventListener('change', syncNfc);\n    if(valueInp) valueInp.addEventListener('input', syncNfc);\n    form.addEventListener('submit', syncNfc, true);\n  }\n\n  \/\/ QR Logika slika\n  const clearQr = () =\u003e {\n    const qrInput = document.getElementById('ch_qr_png');\n    const qrRemoveBtn = document.getElementById('chQrRemove');\n    const qrPreviewBox = document.getElementById('chQrPreviewBox');\n    const qrImg = document.getElementById('chQrImg');\n    const qrPlaceholder = document.getElementById('chQrPlaceholder');\n    const qrMeta = document.getElementById('chQrMeta');\n\n    if(qrInput) qrInput.value = '';\n    if(qrRemoveBtn) qrRemoveBtn.hidden = true;\n    if(qrPreviewBox) { qrPreviewBox.hidden = true; qrPreviewBox.classList.remove('has-image'); }\n    if(qrImg) { qrImg.hidden = true; qrImg.src = ''; }\n    if(qrPlaceholder) qrPlaceholder.hidden = false;\n    if(qrMeta) { qrMeta.hidden = true; qrMeta.textContent = ''; }\n  };\n\n  const qrInputEl = document.getElementById('ch_qr_png');\n  if (qrInputEl) {\n    qrInputEl.addEventListener('change', (e) =\u003e {\n      const file = e.target.files[0];\n      if (!file) { clearQr(); return; }\n      if (file.type !== 'image\/png') { alert('Molimo uploadujte PNG fajl (.png).'); clearQr(); return; }\n\n      const qrRemoveBtn = document.getElementById('chQrRemove');\n      const qrPreviewBox = document.getElementById('chQrPreviewBox');\n      const qrImg = document.getElementById('chQrImg');\n      const qrPlaceholder = document.getElementById('chQrPlaceholder');\n      const qrMeta = document.getElementById('chQrMeta');\n\n      if(qrRemoveBtn) qrRemoveBtn.hidden = false;\n      if(qrPreviewBox) { qrPreviewBox.hidden = false; qrPreviewBox.classList.add('has-image'); }\n      if(qrMeta) { qrMeta.hidden = false; qrMeta.textContent = `${file.name} (${(file.size \/ 1024).toFixed(1)} KB)`; }\n      \n      if(qrImg \u0026\u0026 qrPlaceholder) {\n        const url = URL.createObjectURL(file);\n        qrImg.src = url; qrImg.hidden = false; qrPlaceholder.hidden = true;\n        qrImg.onload = () =\u003e URL.revokeObjectURL(url);\n      }\n    });\n  }\n\n  \/\/ Shopify Upload Hack\n  const attachMultipartHack = () =\u003e {\n    if(!form) return false;\n    const btn = form.querySelector('button[name=\"add\"], button[type=\"submit\"], .product-form__submit');\n    if(!btn || btn.__chBound) return false;\n    btn.__chBound = true;\n\n    btn.addEventListener('click', function(e) {\n      const liveQrInput = document.getElementById('ch_qr_png');\n      const hasFile = liveQrInput \u0026\u0026 liveQrInput.files \u0026\u0026 liveQrInput.files[0];\n      if (!hasFile) return;\n\n      e.preventDefault(); e.stopImmediatePropagation(); e.stopPropagation();\n\n      const variantId = form.querySelector('input[name=\"id\"]')?.value || new URLSearchParams(window.location.search).get('variant');\n      const qty = form.querySelector('input[name=\"quantity\"]')?.value || '1';\n\n      if (!variantId) { alert('Greška: Varijanta nije pronađena.'); return; }\n\n      const tempForm = document.createElement('form');\n      tempForm.method = 'POST'; tempForm.action = '\/cart\/add'; tempForm.enctype = 'multipart\/form-data'; tempForm.style.display = 'none';\n      tempForm.innerHTML = `\u003cinput type=\"hidden\" name=\"return_to\" value=\"\/cart\"\u003e\u003cinput type=\"hidden\" name=\"id\" value=\"${variantId}\"\u003e\u003cinput type=\"hidden\" name=\"quantity\" value=\"${qty}\"\u003e`;\n\n      const props = form.querySelectorAll('input[name^=\"properties[\"]');\n      props.forEach(p =\u003e {\n        if(p.type !== 'file' \u0026\u0026 p.value) {\n          const h = document.createElement('input'); h.type = 'hidden'; h.name = p.name; h.value = p.value; tempForm.appendChild(h);\n        }\n      });\n\n      tempForm.appendChild(liveQrInput); document.body.appendChild(tempForm); tempForm.submit(); \n    }, true);\n    return true;\n  };\n\n  let tries = 0;\n  const t = setInterval(() =\u003e { tries++; if (attachMultipartHack() || tries \u003e= 50) clearInterval(t); }, 150);\n\n});\n\u003c\/script\u003e","brand":"CherryCard","offers":[{"title":"Default Title","offer_id":46295304110238,"sku":null,"price":2500.0,"currency_code":"RSD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0737\/3170\/2942\/files\/kartice-4-01.jpg?v=1765957649","url":"https:\/\/cherrycard.rs\/en-rs\/products\/nfc-kartica-prilog-4","provider":"CherryCard","version":"1.0","type":"link"}