{
  "version": 3,
  "sources": ["/cdn/shop/t/29/assets/uv-vto.js?nocache=1794430313945"],
  "sourcesContent": ["/* Ultraviole \u2013 Sanal Deneme (virtual try-on)\n   Y\u00FCz takibi: MediaPipe Face Landmarker (taray\u0131c\u0131da \u00E7al\u0131\u015F\u0131r, g\u00F6r\u00FCnt\u00FC hi\u00E7bir yere g\u00F6nderilmez)\n   G\u00F6zl\u00FCk g\u00F6rseli: \u00FCr\u00FCn\u00FCn tam kar\u015F\u0131dan (\u2026__fr) foto\u011Fraf\u0131, arka plan\u0131 taray\u0131c\u0131da temizlenir. */\n(function () {\n  if (window.UVVTO) return;\n\n  var MP_VER = '0.10.14';\n  var MP_BASE = 'https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@' + MP_VER;\n  var MODEL_URL = 'https://storage.googleapis.com/mediapipe-models/face_landmarker/face_landmarker/float16/1/face_landmarker.task';\n\n  // Oturtma ayarlar\u0131\n  // IRIS_MM: insan irisinin \u00E7ap\u0131 (~11,7 mm) \u2013 y\u00FCz\u00FCn ger\u00E7ek \u00F6l\u00E7\u00FCs\u00FCn\u00FC bulmak i\u00E7in cetvel olarak kullan\u0131l\u0131r\n  // ANCHOR_Y: burun bo\u015Flu\u011Fu bulunamazsa burun kemerine gelecek noktan\u0131n g\u00F6rselin \u00FCst\u00FCnden oran\u0131\n  // SHADOW: y\u00FCzdeki g\u00F6lgenin koyulu\u011Fu\n  var CFG = { IRIS_MM: 11.7, ANCHOR_Y: 0.38, DEFAULT_MM: 140, SHADOW: 0.22 };\n\n  // Model baz\u0131nda g\u00F6zl\u00FC\u011F\u00FCn \u00F6nden toplam geni\u015Fli\u011Fi (mm, yakla\u015F\u0131k). \u00D6zelden genele s\u0131ral\u0131.\n  var FRAME_MM = [\n    ['sutro lite sweep', 140], ['sutro lite s ', 133], ['sutro s ', 133], ['sutro lite', 139], ['sutro', 142],\n    ['radar ev xs', 124], ['radar ev s ', 131], ['radar ev', 138], ['radar plate', 138],\n    ['sphaera', 140], ['kato', 146], ['meta hstn', 141], ['hstn', 140],\n    ['holbrook xxl', 150], ['holbrook xl', 145], ['holbrook xs', 124], ['holbrook', 138],\n    ['frogskins xxs', 118], ['frogskins xs', 126], ['frogskins', 139],\n    ['plantaris', 142], ['bxtr', 140], ['eye jacket', 141], ['latch', 140], ['encoder', 141], ['clifden', 145],\n    ['pitchman', 138], ['m2 frame xl', 143], ['neoforma', 140], ['terraforma', 141], ['stunt devil', 139],\n    ['hydra', 139], ['corridor', 141], ['actuator', 140], ['ojector', 141], ['rslv', 139], ['manorburn', 138],\n    ['resistor', 122], ['youth', 124], ['xxs', 118]\n  ];\n  function frameMM(title) {\n    var t = ' ' + String(title || '').toLowerCase().replace(/\\s+/g, ' ') + ' ';\n    for (var i = 0; i < FRAME_MM.length; i++) if (t.indexOf(FRAME_MM[i][0]) > -1) return FRAME_MM[i][1];\n    return CFG.DEFAULT_MM;\n  }\n\n  var visionPromise = null;\n  var landmarker = null;\n  var landmarkerMode = null;\n  var glassesCache = {};\n  var frontCache = {};\n\n  /* ---------------- MediaPipe ---------------- */\n  // Not: Shopify JS dosyalar\u0131n\u0131 k\u00FC\u00E7\u00FCltirken dinamik mod\u00FCl \u00E7a\u011Fr\u0131s\u0131n\u0131 bozuyor; mod\u00FCl\u00FC <script type=\"module\"> ile y\u00FCkl\u00FCyoruz.\n  function importVision() {\n    return new Promise(function (resolve, reject) {\n      if (window.__uvVision) return resolve(window.__uvVision);\n      var done = false;\n      window.addEventListener('uv-vision-ready', function () { done = true; resolve(window.__uvVision); }, { once: true });\n      var s = document.createElement('script');\n      s.type = 'module';\n      s.textContent = 'import * as m from \"' + MP_BASE + '/vision_bundle.mjs\"; window.__uvVision = m; window.dispatchEvent(new Event(\"uv-vision-ready\"));';\n      document.head.appendChild(s);\n      setTimeout(function () { if (!done) reject(new Error('vision timeout')); }, 45000);\n    });\n  }\n\n  function loadVision() {\n    if (!visionPromise) {\n      visionPromise = importVision().then(function (vision) {\n        return vision.FilesetResolver.forVisionTasks(MP_BASE + '/wasm').then(function (fileset) {\n          var make = function (delegate) {\n            return vision.FaceLandmarker.createFromOptions(fileset, {\n              baseOptions: { modelAssetPath: MODEL_URL, delegate: delegate },\n              runningMode: 'VIDEO',\n              numFaces: 1\n            });\n          };\n          return make('GPU').catch(function () { return make('CPU'); });\n        });\n      }).then(function (lm) { landmarker = lm; landmarkerMode = 'VIDEO'; return lm; });\n      visionPromise.catch(function () { visionPromise = null; });\n    }\n    return visionPromise;\n  }\n\n  function setMode(mode) {\n    if (landmarkerMode !== mode) {\n      landmarker.setOptions({ runningMode: mode });\n      landmarkerMode = mode;\n    }\n  }\n\n  /* ---------------- G\u00F6zl\u00FCk g\u00F6rselini haz\u0131rla (arka plan temizleme) ---------------- */\n  function loadImage(url) {\n    return new Promise(function (resolve, reject) {\n      var img = new Image();\n      if (!/^\\/\\/|^https?:/.test(url) || new URL(url, location.href).origin !== location.origin) img.crossOrigin = 'anonymous';\n      img.onload = function () { resolve(img); };\n      img.onerror = reject;\n      img.src = url;\n    });\n  }\n\n  function smoothArr(a, r) {\n    var out = new Float32Array(a.length), n = a.length;\n    for (var i = 0; i < n; i++) {\n      var s = 0, c = 0;\n      for (var j = Math.max(0, i - r); j <= Math.min(n - 1, i + r); j++) { s += a[j]; c++; }\n      out[i] = s / c;\n    }\n    return out;\n  }\n\n  function isTransparent(d, W, H) {\n    var tr = 0, n = 0, x, y;\n    for (x = 0; x < W; x += 2) { n += 2; if (d[x * 4 + 3] < 16) tr++; if (d[((H - 1) * W + x) * 4 + 3] < 16) tr++; }\n    for (y = 0; y < H; y += 2) { n += 2; if (d[(y * W) * 4 + 3] < 16) tr++; if (d[(y * W + W - 1) * 4 + 3] < 16) tr++; }\n    return tr / n > 0.9;\n  }\n\n  function opaqueBox(d, W, H) {\n    var x0 = W, y0 = H, x1 = -1, y1 = -1, x, y;\n    var rc = new Int32Array(H), minRow = Math.max(3, Math.round(W * 0.004));\n    for (y = 0; y < H; y++) for (x = 0; x < W; x++) if (d[(y * W + x) * 4 + 3] > 200) rc[y]++;\n    for (y = 0; y < H; y++) if (rc[y] >= minRow) { if (y < y0) y0 = y; if (y > y1) y1 = y; }\n    for (y = y0; y <= y1; y++) for (x = 0; x < W; x++) if (d[(y * W + x) * 4 + 3] > 200) { if (x < x0) x0 = x; if (x > x1) x1 = x; }\n    if (x1 < 0) return { x0: 0, y0: 0, x1: W - 1, y1: H - 1 };\n    return { x0: x0, y0: y0, x1: x1, y1: y1 };\n  }\n\n  // \u00D6n (tam kar\u015F\u0131dan) g\u00F6rseli bul: \u015Feffaf arka planl\u0131, geni\u015F ve sa\u011F-sol simetrik olan g\u00F6rsel\n  function symmetryOf(url) {\n    return loadImage(url).then(function (img) {\n      var W = 240, H = Math.max(1, Math.round(img.naturalHeight * W / img.naturalWidth));\n      var c = document.createElement('canvas'); c.width = W; c.height = H;\n      var x = c.getContext('2d', { willReadFrequently: true }); x.drawImage(img, 0, 0, W, H);\n      var d = x.getImageData(0, 0, W, H).data;\n      if (!isTransparent(d, W, H)) return -1;\n      var bb = opaqueBox(d, W, H);\n      if ((bb.x1 - bb.x0 + 1) / (bb.y1 - bb.y0 + 1) < 1.6) return -1;\n      var inter = 0, uni = 0;\n      for (var yy = bb.y0; yy <= bb.y1; yy++) for (var xx = bb.x0; xx <= bb.x1; xx++) {\n        var a = d[(yy * W + xx) * 4 + 3] > 200, b = d[(yy * W + (bb.x0 + bb.x1 - xx)) * 4 + 3] > 200;\n        if (a && b) inter++; if (a || b) uni++;\n      }\n      return uni ? inter / uni : -1;\n    }).catch(function () { return -1; });\n  }\n\n  function small(url) { return url.indexOf('width=') > -1 ? url.replace(/width=\\d+/, 'width=400') : url + (url.indexOf('?') > -1 ? '&' : '?') + 'width=400'; }\n\n  function resolveFront(item) {\n    if (item.f) return Promise.resolve(item.f);\n    var key = item.u;\n    if (frontCache[key]) return frontCache[key];\n    var imgs = item.imgs || [];\n    var scores = [];\n    frontCache[key] = imgs.reduce(function (pr, url) {\n      return pr.then(function (best) {\n        return symmetryOf(small(url)).then(function (s) { scores.push({ s: s, url: url }); return s > best.s ? { s: s, url: url } : best; });\n      });\n    }, Promise.resolve({ s: 0, url: null })).then(function (best) {\n      item.f = best.s >= 0.95 ? best.url : null;\n      // yan g\u00F6rsel aday\u0131: \u015Feffaf, geni\u015F ve en az simetrik olan\n      if (!item.s) {\n        var side = scores.filter(function (x) { return x.s >= 0 && x.s < 0.35 && x.url !== item.f; }).sort(function (a, b) { return a.s - b.s; })[0];\n        if (side) item.s = side.url;\n      }\n      return item.f;\n    });\n    return frontCache[key];\n  }\n\n  /* ---------------- Sap: \u00FCr\u00FCn\u00FCn yan foto\u011Fraf\u0131ndan kesilir ---------------- */\n  // Luxottica yan foto\u011Fraf\u0131nda (lt) \u00F6n k\u0131s\u0131m bir u\u00E7ta, iki sap di\u011Fer uca uzan\u0131r; kamera hafif yukar\u0131da oldu\u011Fu i\u00E7in\n  // kameraya yak\u0131n sap alttad\u0131r. Yak\u0131n sap\u0131n g\u00F6vdesi b\u00FCt\u00FCn olarak (delikli/\u00E7ift kollu saplar dahil) al\u0131n\u0131r, sonra\n  // kendi kal\u0131nl\u0131k band\u0131nda \u00F6ne do\u011Fru takip edilir. Kal\u0131nl\u0131k kademeli artarsa (sap mente\u015Feye do\u011Fru geni\u015Fler, logolu k\u0131s\u0131m)\n  // devam edilir; birden s\u0131\u00E7rarsa sap cama/\u00E7er\u00E7eveye kar\u0131\u015Fm\u0131\u015Ft\u0131r, oras\u0131 mente\u015Fedir. B\u00F6ylece logo dahil sap ger\u00E7ek yerinde kal\u0131r.\n  var armCache = {};\n  var ARM_ALPHA = 115;   // \u015Feffaf \u00E7er\u00E7evelerin sap\u0131n\u0131 da yakalar, yerdeki yans\u0131may\u0131 almaz\n  function prepareArm(url) {\n    if (!url) return Promise.resolve(null);\n    if (armCache[url]) return armCache[url];\n    armCache[url] = loadImage(url).then(function (img) {\n      var W = Math.min(1000, img.naturalWidth), H = Math.round(img.naturalHeight * W / img.naturalWidth);\n      var cv = document.createElement('canvas'); cv.width = W; cv.height = H;\n      var cx = cv.getContext('2d', { willReadFrequently: true });\n      cx.drawImage(img, 0, 0, W, H);\n      var d = cx.getImageData(0, 0, W, H).data, N = W * H, x, y, i;\n      if (!isTransparent(d, W, H)) return null;\n      var op = new Uint8Array(N);\n      for (i = 0; i < N; i++) op[i] = d[i * 4 + 3] > ARM_ALPHA ? 1 : 0;\n      // her s\u00FCtundaki opak par\u00E7alar: [\u00FCst, alt, ortalama saydaml\u0131k]\n      var runs = new Array(W), cnt = new Int32Array(W);\n      for (x = 0; x < W; x++) {\n        var r = [], s0 = 0; y = 0;\n        while (y < H) {\n          if (op[y * W + x]) {\n            var y0 = y, sa = 0;\n            while (y < H && op[y * W + x]) { sa += d[(y * W + x) * 4 + 3]; y++; }\n            if (y - y0 >= 2) { r.push([y0, y - 1, sa / (y - y0)]); s0 += y - y0; }\n          } else y++;\n        }\n        runs[x] = r; cnt[x] = s0;\n      }\n      var x0 = 0, x1 = W - 1;\n      while (x0 < W && !cnt[x0]) x0++;\n      while (x1 > 0 && !cnt[x1]) x1--;\n      if (x1 - x0 < W * 0.3) return null;\n      var q = Math.round((x1 - x0) * 0.2), sl = 0, sr = 0;\n      for (i = 0; i < q; i++) { sl += cnt[x0 + i]; sr += cnt[x1 - i]; }\n      var lf = sl >= sr, dir = lf ? 1 : -1, fs = lf ? x0 : x1, tip = lf ? x1 : x0, span = Math.abs(tip - fs);\n      function behind(a, b) { return lf ? a > b : a < b; }   // a, b'den daha geride (kulak taraf\u0131nda) m\u0131\n\n      // 1) sap g\u00F6vdeleri: \u00F6n u\u00E7tan %50 gerideki ba\u011Fl\u0131 bile\u015Fenler\n      var bx = Math.round(fs + dir * span * 0.5);\n      function inB(xx) { return lf ? xx >= bx : xx <= bx; }\n      var lab = new Int32Array(N), comps = [], nl = 0, stack = [];\n      for (y = 0; y < H; y++) for (x = 0; x < W; x++) {\n        var k0 = y * W + x;\n        if (!op[k0] || lab[k0] || !inB(x)) continue;\n        nl++; lab[k0] = nl; stack.length = 0; stack.push(k0);\n        var area = 0, mnx = W, mxx = 0, sy = 0, sa2 = 0;\n        while (stack.length) {\n          var k = stack.pop(), ky = (k / W) | 0, kx = k - ky * W;\n          area++; sy += ky; sa2 += d[k * 4 + 3];\n          if (kx < mnx) mnx = kx; if (kx > mxx) mxx = kx;\n          if (kx > 0 && op[k - 1] && !lab[k - 1] && inB(kx - 1)) { lab[k - 1] = nl; stack.push(k - 1); }\n          if (kx < W - 1 && op[k + 1] && !lab[k + 1] && inB(kx + 1)) { lab[k + 1] = nl; stack.push(k + 1); }\n          if (ky > 0 && op[k - W] && !lab[k - W]) { lab[k - W] = nl; stack.push(k - W); }\n          if (ky < H - 1 && op[k + W] && !lab[k + W]) { lab[k + W] = nl; stack.push(k + W); }\n        }\n        comps.push({ l: nl, area: area, x0: mnx, x1: mxx, cy: sy / area, ma: sa2 / area });\n      }\n      var big = comps.filter(function (cp) { return cp.area > 150 && cp.ma > 160 && cp.x1 - cp.x0 > span * 0.2; })\n        .sort(function (a, b) { return b.cy - a.cy; });\n      if (!big.length) return null;\n      var mask = new Uint8Array(N), startCol, band = null;\n      function maskBand(xx) { var t = -1, b = -1; for (var yy = 0; yy < H; yy++) if (mask[yy * W + xx]) { if (t < 0) t = yy; b = yy; } return t < 0 ? null : [t, b]; }\n      if (big.length >= 2) {\n        // iki sap ayr\u0131: alttaki (yak\u0131n) sap\u0131n g\u00F6vdesi\n        var L0 = big[0].l;\n        for (i = 0; i < N; i++) if (lab[i] === L0) mask[i] = 1;\n        startCol = lf ? big[0].x0 : big[0].x1;\n      } else {\n        // iki sap foto\u011Frafta birbirine de\u011Fiyor/\u00E7aprazlan\u0131yor: alttaki sap u\u00E7tan s\u00FCrekli takip edilir\n        var st = null;\n        for (var t2 = 0; t2 < 60 && !st; t2++) {\n          var xs = Math.round(fs + dir * span * 0.55) + dir * t2;\n          var cand = runs[xs].filter(function (rr) { return rr[1] - rr[0] < H * 0.12 && rr[2] > 170; });\n          if (cand.length) st = { x: xs, run: cand.reduce(function (a, b) { return a[0] + a[1] > b[0] + b[1] ? a : b; }) };\n        }\n        if (!st) return null;\n        var pv = st.run;\n        for (x = st.x; lf ? x <= tip : x >= tip; x += dir) {\n          var best = null, bo = -1;\n          runs[x].forEach(function (rr) { var o = Math.min(rr[1], pv[1] + 2) - Math.max(rr[0], pv[0] - 2); if (o > bo) { bo = o; best = rr; } });\n          if (bo < 0) break;\n          var seg = [Math.max(best[0], pv[0] - 2), Math.min(best[1], pv[1] + 2)];   // ani s\u0131\u00E7ramalar (\u00F6b\u00FCr sap) al\u0131nmaz\n          for (y = seg[0]; y <= seg[1]; y++) if (op[y * W + x]) mask[y * W + x] = 1;\n          pv = seg;\n        }\n        startCol = st.x;\n      }\n      for (var t3 = 0; t3 < 8 && !band; t3++) { band = maskBand(startCol + dir * t3); if (band) startCol += dir * t3; }\n      if (!band) return null;\n\n      // 2) g\u00F6vdeden mente\u015Feye do\u011Fru bant takibi\n      var hinge = startCol, prevH = band[1] - band[0], h0 = prevH, hist = [band];\n      for (x = startCol - dir; lf ? x >= fs : x <= fs; x -= dir) {\n        var n = hist.length, slope = n > 8 ? ((hist[n - 1][0] + hist[n - 1][1]) - (hist[n - 8][0] + hist[n - 8][1])) / 14 : 0;\n        var pT = band[0] + slope, pB = band[1] + slope;\n        var ov = runs[x].filter(function (rr) { return rr[1] >= pT - 3 && rr[0] <= pB + 3 && rr[2] > 140; });\n        if (!ov.length) break;\n        var nb0 = Infinity, nb1 = -Infinity;\n        ov.forEach(function (rr) { if (rr[0] < nb0) nb0 = rr[0]; if (rr[1] > nb1) nb1 = rr[1]; });\n        var nh = nb1 - nb0, tol = Math.max(6, prevH * 0.4);\n        if (nh > prevH + Math.max(6, prevH * 0.35) || nb0 < pT - tol || nb1 > pB + tol) break;   // s\u0131\u00E7rama: mente\u015Fe\n        // bant yava\u015F geni\u015Fleyebilir (sap mente\u015Feye do\u011Fru kal\u0131nla\u015F\u0131r) ama cama/\u00E7er\u00E7eveye s\u0131zmas\u0131n\n        nb0 = Math.max(nb0, Math.floor(pT - 1)); nb1 = Math.min(nb1, Math.ceil(pB + 1));\n        if (nb1 - nb0 > h0 * 2.2) break;\n        for (y = nb0; y <= nb1; y++) if (op[y * W + x]) mask[y * W + x] = 1;\n        band = [nb0, nb1]; prevH = nb1 - nb0; hist.push(band); hinge = x;\n      }\n      // mente\u015Fe cam\u0131n hemen dibindeyse ya da sap \u00E7ok k\u0131saysa bu g\u00F6rsel ger\u00E7ek bir yan g\u00F6rsel de\u011Fildir\n      if (Math.abs(hinge - fs) < span * 0.06) return null;\n      // mente\u015Fenin \u00F6n\u00FCnde kalan par\u00E7alar\u0131 at\n      for (y = 0; y < H; y++) for (x = 0; x < W; x++) if (mask[y * W + x] && behind(hinge, x)) mask[y * W + x] = 0;\n\n      // 3) sap g\u00F6rseli: maske + 2 piksel kenar yumu\u015Fakl\u0131\u011F\u0131\n      var ax0 = W, ax1 = -1, ay0 = H, ay1 = -1;\n      for (y = 0; y < H; y++) for (x = 0; x < W; x++) if (mask[y * W + x]) { if (x < ax0) ax0 = x; if (x > ax1) ax1 = x; if (y < ay0) ay0 = y; if (y > ay1) ay1 = y; }\n      if (ax1 - ax0 < span * 0.35) return null;\n      ax0 = Math.max(0, ax0 - 2); ay0 = Math.max(0, ay0 - 2); ax1 = Math.min(W - 1, ax1 + 2); ay1 = Math.min(H - 1, ay1 + 2);\n      var aw = ax1 - ax0 + 1, ah = ay1 - ay0 + 1, m2 = new Uint8Array(aw * ah);\n      for (y = 0; y < ah; y++) for (x = 0; x < aw; x++) if (mask[(y + ay0) * W + x + ax0]) m2[y * aw + x] = 1;\n      for (var it = 0; it < 2; it++) {\n        var m3 = m2.slice();\n        for (y = 1; y < ah - 1; y++) for (x = 1; x < aw - 1; x++) if (!m2[y * aw + x] && (m2[y * aw + x - 1] || m2[y * aw + x + 1] || m2[(y - 1) * aw + x] || m2[(y + 1) * aw + x]) && behind(x + ax0, hinge - dir)) m3[y * aw + x] = 1;\n        m2 = m3;\n      }\n      var sp = document.createElement('canvas'); sp.width = aw; sp.height = ah;\n      var sc = sp.getContext('2d'), sid = sc.createImageData(aw, ah), sd = sid.data;\n      for (y = 0; y < ah; y++) for (x = 0; x < aw; x++) {\n        if (!m2[y * aw + x]) continue;\n        var p = ((y + ay0) * W + x + ax0) * 4, o = (y * aw + x) * 4;\n        sd[o] = d[p]; sd[o + 1] = d[p + 1]; sd[o + 2] = d[p + 2]; sd[o + 3] = d[p + 3];\n      }\n      sc.putImageData(sid, 0, 0);\n      // kulak taraf\u0131ndaki u\u00E7: sap kula\u011F\u0131n arkas\u0131na ge\u00E7iyormu\u015F gibi yumu\u015Fak\u00E7a kaybolur\n      sc.globalCompositeOperation = 'destination-out';\n      var gx0 = lf ? aw * 0.76 : aw * 0.24, gx1 = lf ? aw : 0;\n      var gr = sc.createLinearGradient(gx0, 0, gx1, 0);\n      gr.addColorStop(0, 'rgba(0,0,0,0)'); gr.addColorStop(1, 'rgba(0,0,0,1)');\n      sc.fillStyle = gr; sc.fillRect(0, 0, aw, ah);\n\n      // 4) mente\u015Fedeki orta nokta, sap\u0131n e\u011Fimi ve cam profilinin y\u00FCksekli\u011Fi\n      function centerAt(fr) {\n        var kx = Math.round(hinge + dir * fr * Math.abs(tip - hinge)), s1 = 0, n1 = 0;\n        for (var k2 = kx - 3; k2 <= kx + 3; k2++) { if (k2 < 0 || k2 >= W) continue; for (var yy = 0; yy < H; yy++) if (mask[yy * W + k2]) { s1 += yy; n1++; } }\n        return { x: kx - ax0, y: (n1 ? s1 / n1 : (ay0 + ay1) / 2) - ay0 };\n      }\n      var cA = centerAt(0.02), cB = centerAt(0.6);\n      var top = H, bot = 0, pe = Math.round(fs + (hinge - fs) * 0.6);\n      for (x = Math.min(fs, pe); x <= Math.max(fs, pe); x++) runs[x].forEach(function (r2) { if (r2[0] < top) top = r2[0]; if (r2[1] > bot) bot = r2[1]; });\n      return {\n        sprite: sp, sx: cA.x, sy: cA.y, slope: Math.atan2(cB.y - cA.y, Math.abs(cB.x - cA.x)), dir: dir,\n        len: Math.max(1, Math.abs(tip - hinge)), depthPx: Math.abs(hinge - fs), profH: Math.max(1, bot - top + 1)\n      };\n    }).catch(function () { return null; });\n    return armCache[url];\n  }\n\n  function prepareGlasses(url) {\n    if (glassesCache[url]) return glassesCache[url];\n    glassesCache[url] = loadImage(url).then(function (img) {\n      var W = Math.min(1000, img.naturalWidth), H = Math.round(img.naturalHeight * W / img.naturalWidth);\n      var cv = document.createElement('canvas'); cv.width = W; cv.height = H;\n      var ctx = cv.getContext('2d', { willReadFrequently: true });\n      ctx.drawImage(img, 0, 0, W, H);\n      var id = ctx.getImageData(0, 0, W, H), d = id.data;\n\n      // 1) \u015Eeffaf arka planl\u0131 g\u00F6rsel: opak pikseller g\u00F6zl\u00FCk, yar\u0131 saydam alt k\u0131s\u0131m g\u00F6lge/yans\u0131ma \u2192 k\u0131rp\n      if (isTransparent(d, W, H)) {\n        var bb = opaqueBox(d, W, H);\n        var o = document.createElement('canvas');\n        o.width = bb.x1 - bb.x0 + 1; o.height = bb.y1 - bb.y0 + 1;\n        o.getContext('2d').drawImage(cv, bb.x0, bb.y0, o.width, o.height, 0, 0, o.width, o.height);\n        return o;\n      }\n\n      // 2) D\u00FCz arka planl\u0131 g\u00F6rsel: kenarlardan arka plan rengini \u00E7\u0131kar (gri degrade i\u00E7in Coons yamas\u0131)\n      var band = Math.max(2, Math.round(W * 0.01));\n      function edgeRow(y0) { var ch = [new Float32Array(W), new Float32Array(W), new Float32Array(W)];\n        for (var x = 0; x < W; x++) for (var k = 0; k < 3; k++) { var s = 0; for (var b = 0; b < band; b++) s += d[((y0 + (y0 ? -b : b)) * W + x) * 4 + k]; ch[k][x] = s / band; }\n        return ch.map(function (a) { return smoothArr(a, 20); }); }\n      function edgeCol(x0) { var ch = [new Float32Array(H), new Float32Array(H), new Float32Array(H)];\n        for (var y = 0; y < H; y++) for (var k = 0; k < 3; k++) { var s = 0; for (var b = 0; b < band; b++) s += d[(y * W + x0 + (x0 ? -b : b)) * 4 + k]; ch[k][y] = s / band; }\n        return ch.map(function (a) { return smoothArr(a, 20); }); }\n      var T = edgeRow(0), B = edgeRow(H - 1), L = edgeCol(0), R = edgeCol(W - 1);\n\n      var alpha = new Float32Array(W * H);\n      var bgc = new Float32Array(W * H * 3);\n      for (var y = 0; y < H; y++) {\n        var v = y / (H - 1);\n        for (var x = 0; x < W; x++) {\n          var u = x / (W - 1), i = y * W + x, p = i * 4, dmax = 0, lp = 0, lb = 0;\n          for (var k = 0; k < 3; k++) {\n            var bg = (1 - v) * T[k][x] + v * B[k][x] + (1 - u) * L[k][y] + u * R[k][y]\n              - ((1 - u) * (1 - v) * T[k][0] + u * (1 - v) * T[k][W - 1] + (1 - u) * v * B[k][0] + u * v * B[k][W - 1]);\n            bgc[i * 3 + k] = bg;\n            var df = Math.abs(d[p + k] - bg); if (df > dmax) dmax = df;\n            lp += d[p + k]; lb += bg;\n          }\n          var brighter = (lp - lb) / 3;\n          var a = (dmax - 10) / 38;\n          if (brighter > 5) a = Math.max(a, (brighter - 3) / 9);\n          alpha[i] = a < 0 ? 0 : a > 1 ? 1 : a;\n        }\n      }\n\n      // G\u00FC\u00E7l\u00FC (kesin g\u00F6zl\u00FCk) piksellerin s\u0131n\u0131r kutusu \u2013 yans\u0131ma/g\u00F6lgeyi d\u0131\u015Far\u0131da b\u0131rak\u0131r\n      var minX = W, minY = H, maxX = -1, maxY = -1;\n      var rowCount = new Int32Array(H);\n      for (y = 0; y < H; y++) for (x = 0; x < W; x++) if (alpha[y * W + x] > 0.92) rowCount[y]++;\n      var minRow = Math.max(3, Math.round(W * 0.004));\n      for (y = 0; y < H; y++) if (rowCount[y] >= minRow) { if (y < minY) minY = y; if (y > maxY) maxY = y; }\n      for (y = minY; y <= maxY; y++) for (x = 0; x < W; x++) if (alpha[y * W + x] > 0.92) { if (x < minX) minX = x; if (x > maxX) maxX = x; }\n      if (maxX < 0) { minX = 0; minY = 0; maxX = W - 1; maxY = H - 1; }\n      var pad = 2;\n      minX = Math.max(0, minX - pad); minY = Math.max(0, minY - pad); maxX = Math.min(W - 1, maxX + pad); maxY = Math.min(H - 1, maxY + pad);\n\n      // Renkten arka plan\u0131 ay\u0131kla (yar\u0131 saydam kenarlar gri kalmas\u0131n)\n      for (i = 0; i < W * H; i++) {\n        var yy = (i / W) | 0, xx = i - yy * W, A = alpha[i];\n        p = i * 4;\n        if (xx < minX || xx > maxX || yy < minY || yy > maxY || A <= 0) { d[p + 3] = 0; continue; }\n        if (A < 1) for (k = 0; k < 3; k++) { var c = (d[p + k] - (1 - A) * bgc[i * 3 + k]) / A; d[p + k] = c < 0 ? 0 : c > 255 ? 255 : c; }\n        d[p + 3] = Math.round(A * 255);\n      }\n      ctx.putImageData(id, 0, 0);\n\n      var out = document.createElement('canvas');\n      out.width = maxX - minX + 1; out.height = maxY - minY + 1;\n      out.getContext('2d').drawImage(cv, minX, minY, out.width, out.height, 0, 0, out.width, out.height);\n      return out;\n    });\n    glassesCache[url] = glassesCache[url].then(finalizeGlasses);\n    glassesCache[url].catch(function () { delete glassesCache[url]; });\n    return glassesCache[url];\n  }\n\n  // Burun bo\u015Flu\u011Fu baz\u0131 \u00F6n g\u00F6rsellerde gri burun pedleriyle dolu (\u00F6r. Plantaris): y\u00FCze konunca burnun \u00FCst\u00FCnde gri bir\n  // blok gibi durur. Orta \u00E7izgide alttan yukar\u0131 do\u011Fru renksiz (gri) ve yukar\u0131 do\u011Fru daralan b\u00F6lge burun pedidir; ortas\u0131\n  // saydamla\u015Ft\u0131r\u0131l\u0131r (burun g\u00F6r\u00FCn\u00FCr), kenarlar\u0131na do\u011Fru (pedlerin burnun yanlar\u0131na oturdu\u011Fu yer) hafif\u00E7e g\u00F6r\u00FCn\u00FCr kal\u0131r.\n  // B\u00F6lgenin tepesi (k\u00F6pr\u00FCn\u00FCn hemen alt\u0131) burun kemerine oturacak nokta olarak d\u00F6ner; bulunamazsa null.\n  function noseZone(d, w, h, cx, yEnd) {\n    var xL = Math.round(w * 0.25), xR = Math.round(w * 0.75), gap = Math.max(4, Math.round(w * 0.015)), Lc = 0, x, y, k, i;\n    function lum(p) { return (d[p] + d[p + 1] + d[p + 2]) / 3; }\n    function neutral(p) { return d[p + 3] >= 120 && Math.max(d[p], d[p + 1], d[p + 2]) - Math.min(d[p], d[p + 1], d[p + 2]) <= 22; }\n    function member(p) { return neutral(p) && Math.abs(lum(p) - Lc) <= 40; }\n    // bir sat\u0131rdaki ped b\u00F6lgesi: ortadan iki yana, k\u00FC\u00E7\u00FCk bo\u015Fluklar\u0131 (ek yeri \u00E7izgisi vb.) atlayarak\n    function seg(yy) {\n      var a = -1, b = -1, miss, xx;\n      for (xx = cx, miss = 0; xx >= xL; xx--) { if (member((yy * w + xx) * 4)) { a = xx; miss = 0; } else if (++miss > gap) break; }\n      for (xx = cx, miss = 0; xx <= xR; xx++) { if (member((yy * w + xx) * 4)) { b = xx; miss = 0; } else if (++miss > gap) break; }\n      if (a < 0 || b < 0) return null;\n      return [yy, a, b, a - xL < gap || xR - b < gap];\n    }\n    // \u00E7ekirdek sat\u0131r: b\u00F6lgenin ortalar\u0131nda, iki yan\u0131 camla s\u0131n\u0131rl\u0131, makul geni\u015Flikte\n    var core = null, fr = [0.65, 0.6, 0.7, 0.55, 0.75];\n    for (i = 0; i < fr.length && !core; i++) {\n      y = Math.round(h * fr[i]);\n      if (y > yEnd) continue;\n      var ls = [];\n      for (x = cx - Math.round(w * 0.02); x <= cx + Math.round(w * 0.02); x++) { var p = (y * w + x) * 4; if (neutral(p)) ls.push(lum(p)); }\n      if (ls.length < 3) continue;\n      ls.sort(function (m, n) { return m - n; }); Lc = ls[ls.length >> 1];\n      var s = seg(y);\n      if (s && !s[3] && s[2] - s[1] + 1 <= w * 0.3 && s[2] - s[1] + 1 >= w * 0.015) core = s;\n    }\n    if (!core) return null;\n    // yukar\u0131: ped k\u00F6pr\u00FCye do\u011Fru daral\u0131r; yeniden geni\u015Flerse \u00FCst \u00E7ubu\u011Fa gelinmi\u015Ftir\n    var up = [core], mn = core[2] - core[1] + 1;\n    for (y = core[0] - 1; y > h * 0.12; y--) {\n      var su = seg(y);\n      if (!su || su[3]) break;\n      var wd = su[2] - su[1] + 1;\n      if (wd > mn * 1.4 + 4) break;\n      up.push(su); if (wd < mn) mn = wd;\n    }\n    var topK = up.length - 1;\n    for (k = 0; k < up.length; k++) if (up[k][2] - up[k][1] + 1 <= mn * 1.15 + 1) { topK = k; break; }\n    // a\u015Fa\u011F\u0131: alt uca kadar; yana ta\u015Fan \u00E7er\u00E7eve kenar\u0131 al\u0131nmaz\n    var down = [], prev = core;\n    for (y = core[0] + 1; y <= yEnd; y++) {\n      var sd = seg(y);\n      if (!sd) break;\n      sd = [y, Math.max(sd[1], prev[1] - 3), Math.min(sd[2], prev[2] + 3)];\n      down.push(sd); prev = sd;\n    }\n    var zone = up.slice(0, topK + 1).concat(down), topY = up[topK][0], zoneH = prev[0] - topY, maxW = 0;\n    for (k = 0; k < zone.length; k++) maxW = Math.max(maxW, zone[k][2] - zone[k][1] + 1);\n    if (topY < h * 0.2 || topY > h * 0.65 || zoneH < h * 0.12 || maxW > w * 0.34) return null;\n    for (k = 0; k < zone.length; k++) {\n      var r = zone[k], t = (r[0] - topY) / zoneH, ramp = Math.min(1, t / 0.15), mid = (r[1] + r[2]) / 2, half = (r[2] - r[1]) / 2 + 0.5;\n      for (x = r[1]; x <= r[2]; x++) {\n        var u = Math.abs(x - mid) / half, f = 0.12 + 0.6 * u * u;\n        d[(r[0] * w + x) * 4 + 3] *= 1 - ramp * (1 - f);\n      }\n    }\n    return topY / h;\n  }\n\n  // G\u00F6rselden \u00F6l\u00E7\u00FCler: burun bo\u015Flu\u011Funun tepesi (burun kemerine oturacak nokta), sap mente\u015Fesi, sap rengi, g\u00F6lge\n  function finalizeGlasses(g) {\n    var w = g.width, h = g.height, gctx = g.getContext('2d'), gid = gctx.getImageData(0, 0, w, h), d = gid.data;\n    function A(x, y) { return d[(y * w + x) * 4 + 3]; }\n    var cx = Math.round(w / 2), x, y, i;\n    // burun k\u00F6pr\u00FCs\u00FCn\u00FCn alt ucu: orta s\u00FCtunda yukar\u0131dan ilk opak par\u00E7an\u0131n bitti\u011Fi yer (k\u00FC\u00E7\u00FCk k\u0131r\u0131nt\u0131lar say\u0131lmaz)\n    var minRun = Math.max(2, Math.round(h * 0.02)), ends = [];\n    [cx - 2, cx, cx + 2].forEach(function (xx) {\n      var s = -1;\n      for (var yy = 0; yy <= h; yy++) {\n        var o = yy < h && A(xx, yy) > 40;\n        if (o && s < 0) s = yy;\n        if (!o && s >= 0) { if (yy - s >= minRun) { ends.push(yy - 1); return; } s = -1; }\n      }\n    });\n    ends.sort(function (m, n) { return m - n; });\n    var apex = ends.length >= 2 ? ends[ends.length >> 1] / h : null;\n    if (apex !== null && apex > 0.65) {\n      // orta s\u00FCtun a\u015Fa\u011F\u0131ya kadar dolu: ya kalkan cam ya da burun pedi\n      apex = noseZone(d, w, h, cx, ends[ends.length >> 1]);\n      if (apex !== null) gctx.putImageData(gid, 0, 0);\n    } else if (apex !== null && apex < 0.1) apex = null;\n    // mente\u015Fe: en d\u0131\u015F s\u00FCtunlardaki ilk opak sat\u0131r\u0131n biraz alt\u0131\n    var band = Math.max(2, Math.round(w * 0.03)), tops = [];\n    [0, 1].forEach(function (side) {\n      for (y = 0; y < h; y++) {\n        var hit = false;\n        for (i = 0; i < band && !hit; i++) { x = side ? w - 1 - i : i; if (A(x, y) > 180) hit = true; }\n        if (hit) { tops.push(y / h); return; }\n      }\n    });\n    var hinge = tops.length ? Math.min(0.5, (tops[0] + (tops[1] || tops[0])) / 2 + 0.07) : 0.25;\n    // sap rengi: \u00FCst \u00E7er\u00E7eve \u00E7ubu\u011Funun rengi\n    var rs = [], gs = [], bs = [];\n    for (y = 0; y < Math.max(2, Math.round(h * 0.08)); y++) for (x = Math.round(w * 0.2); x < Math.round(w * 0.8); x += 3) {\n      var p = (y * w + x) * 4;\n      if (d[p + 3] > 200) { rs.push(d[p]); gs.push(d[p + 1]); bs.push(d[p + 2]); }\n    }\n    function med(a) { if (!a.length) return 40; a.sort(function (m, n) { return m - n; }); return a[a.length >> 1]; }\n    g.uv = { apex: apex, hinge: hinge, color: [med(rs), med(gs), med(bs)] };\n    // yumu\u015Fak g\u00F6lge (bir kez haz\u0131rlan\u0131r)\n    try {\n      var pad = Math.round(w * 0.05), sc = document.createElement('canvas');\n      sc.width = w + pad * 2; sc.height = h + pad * 2;\n      var sx = sc.getContext('2d');\n      if ('filter' in sx) {\n        sx.filter = 'blur(' + Math.round(w * 0.018) + 'px) brightness(0)';\n        sx.drawImage(g, pad, pad);\n        g.uvShadow = sc; g.uvShadowPad = pad;\n      }\n    } catch (e) {}\n    return g;\n  }\n\n  /* ---------------- Y\u00FCze yerle\u015Ftirme (3B kafa y\u00F6n\u00FC) ---------------- */\n  // Landmark'lar\u0131n 3B konumlar\u0131ndan kafan\u0131n sa\u011F ve a\u015Fa\u011F\u0131 eksenlerini \u00E7\u0131kar\u0131r; g\u00F6zl\u00FCk, burun k\u00F6pr\u00FCs\u00FC d\u00FCzleminde\n  // bu eksenlere g\u00F6re \u00E7izilir. B\u00F6ylece kafa sa\u011Fa-sola d\u00F6n\u00FCnce g\u00F6zl\u00FCk de y\u00FCzle birlikte d\u00F6ner, kaymaz.\n  function v3(a, b, k) { return [a[0] + b[0] * k, a[1] + b[1] * k, a[2] + b[2] * k]; }\n  function sub3(a, b) { return [a[0] - b[0], a[1] - b[1], a[2] - b[2]]; }\n  function dot3(a, b) { return a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; }\n  function len3(a) { return Math.sqrt(dot3(a, a)); }\n  function nrm3(a) { var l = len3(a) || 1; return [a[0] / l, a[1] / l, a[2] / l]; }\n  function cross3(a, b) { return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]]; }\n\n  function computePose(lm, W, H, mirror) {\n    function P(i) { var x = lm[i].x * W; return [mirror ? W - x : x, lm[i].y * H, lm[i].z * W]; }\n    function mid(a, b) { return [(a[0] + b[0]) / 2, (a[1] + b[1]) / 2, (a[2] + b[2]) / 2]; }\n    var tA = P(127), tB = P(356);\n    if (tA[0] > tB[0]) { var t = tA; tA = tB; tB = t; }\n    var r = nrm3(sub3(tB, tA));\n    var up = sub3(P(10), P(152));\n    var u = nrm3(v3(up, r, -dot3(up, r)));\n    var n = cross3(r, u);\n    var eyeMid = mid(mid(P(33), P(133)), mid(P(362), P(263)));\n    var C = v3(eyeMid, n, dot3(sub3(P(168), eyeMid), n));   // g\u00F6z hizas\u0131, burun k\u00F6pr\u00FCs\u00FC derinli\u011Finde\n    if (dot3(n, sub3(P(1), mid(tA, tB))) < 0) n = [-n[0], -n[1], -n[2]];   // n: kameraya do\u011Fru (ileri)\n    var iris = 0;\n    if (lm.length > 477) {\n      iris = (len3(sub3(P(469), P(471))) + len3(sub3(P(470), P(472))) + len3(sub3(P(474), P(476))) + len3(sub3(P(475), P(477)))) / 4;\n    }\n    // kulak hizas\u0131: \u015Fakak (127/356) ile yanak kenar\u0131 (234/454) aras\u0131; sap bu noktaya do\u011Fru uzan\u0131r\n    var cA = P(234), cB = P(454);\n    if (cA[0] > cB[0]) { var t2 = cA; cA = cB; cB = t2; }\n    var eL = [(tA[0] + cA[0]) / 2, (tA[1] + cA[1]) / 2], eR = [(tB[0] + cB[0]) / 2, (tB[1] + cB[1]) / 2];\n    return { C: C, N: P(6), r: r, d: [-u[0], -u[1], -u[2]], f: n, face: len3(sub3(tB, tA)), iris: iris, eL: eL, eR: eR };\n  }\n\n  // Ki\u015Finin y\u00FCz geni\u015Fli\u011Fi (mm): iris \u00E7ap\u0131ndan \u00F6l\u00E7\u00FCl\u00FCr, s\u0131n\u0131rlar i\u00E7inde tutulur\n  function faceMMOf(pose) {\n    if (!pose.iris) return 140;\n    var mm = pose.face / pose.iris * CFG.IRIS_MM;\n    return Math.max(118, Math.min(165, mm));\n  }\n\n  // G\u00F6zl\u00FCk g\u00F6rselini y\u00FCze yerle\u015Ftiren d\u00F6n\u00FC\u015F\u00FCm:\n  // [a,b,c,d,e,f] g\u00F6rsel \u2192 ekran, [6] ekrandaki geni\u015Flik, [7,8] derinlik (geri) y\u00F6n\u00FC, [9,10] sol/sa\u011F sap g\u00F6r\u00FCn\u00FCrl\u00FC\u011F\u00FC,\n  // [11] kulak hizas\u0131n\u0131n g\u00F6rsel ortas\u0131na uzakl\u0131\u011F\u0131 (g\u00F6rsel pikseli), [12..15] sol/sa\u011F kulak hizas\u0131 (ekran)\n  function affineFor(g, pose, mm, faceMM) {\n    var wpx = mm / faceMM * pose.face, s = wpx / g.width;\n    var a = pose.r[0] * s, b = pose.r[1] * s, c = pose.d[0] * s, d = pose.d[1] * s;\n    var info = g.uv || {};\n    // burun bo\u015Flu\u011Funun tepesi burun kemerine (landmark 6) oturur; bulunamazsa sabit oran\n    var ax = g.width / 2, ay = (info.apex != null ? info.apex : CFG.ANCHOR_Y) * g.height;\n    var e = pose.N[0] - a * ax - c * ay;\n    var f = pose.N[1] - b * ax - d * ay;\n    function vis(z) { var v = (z - 0.05) / 0.15; return v < 0 ? 0 : v > 1 ? 1 : v; }\n    return [a, b, c, d, e, f, wpx, pose.f[0] * s, pose.f[1] * s, vis(pose.r[2]), vis(-pose.r[2]), (pose.face * 0.5) / s,\n      pose.eL[0], pose.eL[1], pose.eR[0], pose.eR[1]];\n  }\n\n  // H\u0131za duyarl\u0131 yumu\u015Fatma: dururken titremeyi al\u0131r, h\u0131zl\u0131 harekette gecikme yapmaz\n  function smoothAffine(prev, next) {\n    if (!prev) return next;\n    var move = Math.hypot(next[4] - prev[4], next[5] - prev[5]) / Math.max(1, next[6]);\n    var turn = Math.abs(next[0] - prev[0]) + Math.abs(next[1] - prev[1]);\n    var k = Math.min(1, 0.35 + move * 9 + turn * 6);\n    var o = [];\n    for (var i = 0; i < next.length; i++) o[i] = prev[i] + (next[i] - prev[i]) * k;\n    return o;\n  }\n\n  // G\u00F6rsel koordinat\u0131 (tx, ty) ve geriye do\u011Fru derinlik (tz) \u2192 ekran\n  function proj(m, tx, ty, tz, dx, dy) {\n    return [m[0] * tx + m[2] * ty + m[4] - m[7] * tz - (dx || 0), m[1] * tx + m[3] * ty + m[5] - m[8] * tz - (dy || 0)];\n  }\n\n  // Kavis derinli\u011Fi (g\u00F6rsel pikseli): yan foto\u011Fraftan \u00F6l\u00E7\u00FCl\u00FCr, yoksa varsay\u0131lan\n  function wrapDepth(g, arm) {\n    var w = g.width;\n    if (arm) {\n      var k = g.height / arm.profH;\n      return Math.max(0.04 * w, Math.min(0.22 * w, arm.depthPx * k));\n    }\n    return 0.12 * w;\n  }\n\n  // \u00D6n y\u00FCz: dikey \u015Feritlere b\u00F6l\u00FCn\u00FCp kavisli y\u00FCzey gibi \u00E7izilir (kafa d\u00F6n\u00FCnce kenarlar do\u011Fal bi\u00E7imde daral\u0131r)\n  function drawFront(ctx, g, m, dx, dy, depth) {\n    var w = g.width, h = g.height, half = w / 2, n = 24;\n    for (var i = 0; i < n; i++) {\n      var xa = Math.floor(i * w / n), xb = Math.min(w, Math.floor((i + 1) * w / n) + 1), xm = (xa + xb) / 2;\n      var t = (xm - half) / half, z = depth * t * t, zp = depth * 2 * t / half;\n      ctx.setTransform(m[0] - m[7] * zp, m[1] - m[8] * zp, m[2], m[3], m[4] - m[7] * (z - zp * xm) - dx, m[5] - m[8] * (z - zp * xm) - dy);\n      ctx.drawImage(g, xa, 0, xb - xa, h, xa, 0, xb - xa, h);\n    }\n  }\n\n  // Sap: yan foto\u011Fraftaki sap, mente\u015Feden kula\u011Fa do\u011Fru yerle\u015Ftirilir. Y\u00F6n, y\u00FCz\u00FCn kulak hizas\u0131ndaki noktalar\u0131na g\u00F6re\n  // belirlenir (kamera derinlik tahmini kafa e\u011Fikken sapabildi\u011Fi i\u00E7in); bu nokta sap\u0131n ~%45'ine denk gelir, sap kula\u011F\u0131n\n  // arkas\u0131na do\u011Fru devam edip yumu\u015Fak\u00E7a kaybolur.\n  var EAR_FRAC = 0.45;\n  function drawArm(ctx, g, m, side, dx, dy, arm, depth) {\n    var vis = side ? m[10] : m[9];\n    if (vis <= 0 || !arm) return;\n    var k = g.height / arm.profH, sgn = side ? -1 : 1, inward = 0.1;\n    var hingeY = ((g.uv && g.uv.hinge) || 0.3) * g.height;\n    var o = proj(m, side ? g.width : 0, hingeY, depth, dx, dy);\n    // 3B geri y\u00F6n (yedek) \u2013 sap pikseli ba\u015F\u0131na ekran vekt\u00F6r\u00FC\n    var bx = (m[0] * sgn * inward - m[7]) * k, by = (m[1] * sgn * inward - m[8]) * k, bl = Math.hypot(bx, by) || 1;\n    // kulak hizas\u0131 hedefi\n    var ex = (side ? m[14] : m[12]) - dx, ey = (side ? m[15] : m[13]) - dy;\n    var vx = ex - o[0], vy = ey - o[1], vl = Math.hypot(vx, vy), reach = arm.len * EAR_FRAC;\n    var ux = bx, uy = by;\n    if (vl > 1 && (vx * bx + vy * by) / (vl * bl) > 0.2) {\n      var mag = Math.max(0.6 * bl * reach, Math.min(1.6 * bl * reach, vl)) / reach;\n      ux = vx / vl * mag; uy = vy / vl * mag;\n    }\n    var Vx = m[2] * k, Vy = m[3] * k;\n    // sap g\u00F6rselindeki eksen (foto\u011Fraftaki e\u011Fim) ve ona dik y\u00F6n\n    var sl = arm.slope, dr = arm.dir, axx = dr * Math.cos(sl), axy = Math.sin(sl), nx = -dr * Math.sin(sl), ny = Math.cos(sl);\n    var ac = axx * arm.sx + axy * arm.sy, nc = nx * arm.sx + ny * arm.sy;\n    ctx.globalAlpha = vis;\n    ctx.setTransform(ux * axx + Vx * nx, uy * axx + Vy * nx, ux * axy + Vx * ny, uy * axy + Vy * ny,\n      o[0] - (ux * ac + Vx * nc), o[1] - (uy * ac + Vy * nc));\n    ctx.drawImage(arm.sprite, 0, 0);\n  }\n\n  function drawGlasses(ctx, g, m, dx, dy, arm) {\n    dx = dx || 0; dy = dy || 0;\n    var depth = wrapDepth(g, arm);\n    ctx.save();\n    drawArm(ctx, g, m, 0, dx, dy, arm, depth);\n    drawArm(ctx, g, m, 1, dx, dy, arm, depth);\n    if (g.uvShadow) {\n      // g\u00F6zl\u00FC\u011F\u00FCn y\u00FCze d\u00FC\u015Fen g\u00F6lgesi: biraz a\u015Fa\u011F\u0131da ve geride\n      var off = g.height * 0.06, pad = g.uvShadowPad;\n      ctx.globalAlpha = CFG.SHADOW;\n      ctx.setTransform(m[0], m[1], m[2], m[3], m[4] - dx + m[2] * off - m[7] * off * 0.3, m[5] - dy + m[3] * off - m[8] * off * 0.3);\n      ctx.drawImage(g.uvShadow, -pad, -pad);\n    }\n    ctx.globalAlpha = 1;\n    drawFront(ctx, g, m, dx, dy, depth);\n    ctx.restore();\n  }\n\n  /* ---------------- Aray\u00FCz ---------------- */\n  var ICON_CAM = '<svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" aria-hidden=\"true\"><path d=\"M4 8h3l2-2.5h6L17 8h3v11H4z\"/><circle cx=\"12\" cy=\"13\" r=\"3.6\"/></svg>';\n  var ICON_UP = '<svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" aria-hidden=\"true\"><path d=\"M12 16V4M7 9l5-5 5 5M4 20h16\"/></svg>';\n  var ICON_VID = '<svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" aria-hidden=\"true\"><rect x=\"3\" y=\"6\" width=\"13\" height=\"12\" rx=\"2\"/><path d=\"M16 10l5-3v10l-5-3\"/></svg>';\n\n  var ui = null;\n  var state = { stream: null, raf: 0, aff: null, faceMM: 0, glasses: null, arm: null, mm: 140, items: [], active: 0, mode: 'live', photo: null, lastTs: -1, lostFrames: 0 };\n\n  function el(tag, cls, html) { var e = document.createElement(tag); if (cls) e.className = cls; if (html != null) e.innerHTML = html; return e; }\n\n  function buildUI() {\n    if (ui) return ui;\n    var root = el('div', 'uv-vto');\n    root.setAttribute('role', 'dialog'); root.setAttribute('aria-modal', 'true'); root.setAttribute('aria-label', 'Sanal Deneme');\n    root.hidden = true;\n    root.innerHTML =\n      '<div class=\"uv-vto__panel\">' +\n        '<div class=\"uv-vto__head\"><div class=\"uv-vto__title\"><strong><i class=\"uv-vto__dot\"></i>Sanal Deneme</strong><span class=\"uv-vto__name\"></span></div>' +\n        '<button type=\"button\" class=\"uv-vto__close\" aria-label=\"Kapat\">&times;</button></div>' +\n        '<div class=\"uv-vto__stage\"><canvas class=\"uv-vto__canvas\"></canvas><video class=\"uv-vto__video\" playsinline muted></video>' +\n          '<div class=\"uv-vto__status\"><span class=\"uv-vto__spinner\"></span><span class=\"uv-vto__msg\">Haz\u0131rlan\u0131yor\u2026</span></div>' +\n          '<a class=\"uv-vto__goto\" href=\"#\" hidden>Bu \u00FCr\u00FCne git \u2192</a>' +\n        '</div>' +\n        '<div class=\"uv-vto__swatches\" hidden></div>' +\n        '<div class=\"uv-vto__controls\">' +\n          '<div class=\"uv-vto__actions\">' +\n            '<button type=\"button\" class=\"uv-vto__btn uv-vto__live\" hidden>' + ICON_VID + '<span>Canl\u0131</span></button>' +\n            '<label class=\"uv-vto__btn uv-vto__upload\">' + ICON_UP + '<span>Foto\u011Fraf y\u00FCkle</span><input type=\"file\" accept=\"image/*\" hidden></label>' +\n            '<button type=\"button\" class=\"uv-vto__btn uv-vto__btn--primary uv-vto__shot\">' + ICON_CAM + '<span>Foto\u011Fraf \u00E7ek</span></button>' +\n          '</div>' +\n        '</div>' +\n        '<div class=\"uv-vto__info\">' +\n          '<svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"9.5\"/><path d=\"M12 11v6M12 7.5v.5\"/></svg>' +\n          '<p><strong>Sanal deneme bir \u00F6n izlemedir.</strong> G\u00F6zl\u00FC\u011F\u00FCn rengi, boyutu ve y\u00FCz\u00FCn\u00FCze oturu\u015Fu kamera, \u0131\u015F\u0131k ve a\u00E7\u0131ya g\u00F6re ger\u00E7ekte farkl\u0131 g\u00F6r\u00FCnebilir. En do\u011Fru deneyim i\u00E7in \u00FCr\u00FCn\u00FC \u0130zmir Kar\u015F\u0131yaka ma\u011Fazam\u0131zda deneyebilirsiniz.</p>' +\n        '</div>' +\n        '<p class=\"uv-vto__note\">G\u00F6r\u00FCnt\u00FCn\u00FCz yaln\u0131zca cihaz\u0131n\u0131zda i\u015Flenir; hi\u00E7bir yere g\u00F6nderilmez ve kaydedilmez.</p>' +\n      '</div>';\n    document.body.appendChild(root);\n    ui = {\n      root: root,\n      canvas: root.querySelector('.uv-vto__canvas'),\n      video: root.querySelector('.uv-vto__video'),\n      status: root.querySelector('.uv-vto__status'),\n      msg: root.querySelector('.uv-vto__msg'),\n      spinner: root.querySelector('.uv-vto__spinner'),\n      name: root.querySelector('.uv-vto__name'),\n      swatches: root.querySelector('.uv-vto__swatches'),\n      file: root.querySelector('.uv-vto__upload input'),\n      shot: root.querySelector('.uv-vto__shot'),\n      live: root.querySelector('.uv-vto__live'),\n      goto: root.querySelector('.uv-vto__goto')\n    };\n    ui.ctx = ui.canvas.getContext('2d');\n    root.querySelector('.uv-vto__close').addEventListener('click', close);\n    root.addEventListener('click', function (e) { if (e.target === root) close(); });\n    document.addEventListener('keydown', function (e) { if (e.key === 'Escape' && !root.hidden) close(); });\n    ui.file.addEventListener('change', function () { var f = ui.file.files && ui.file.files[0]; if (f) usePhoto(f); ui.file.value = ''; });\n    ui.shot.addEventListener('click', snapshot);\n    ui.live.addEventListener('click', function () { startCamera(); });\n    return ui;\n  }\n\n  function setStatus(text, spin) {\n    if (!text) { ui.status.hidden = true; return; }\n    ui.status.hidden = false; ui.msg.textContent = text; ui.spinner.hidden = !spin;\n  }\n\n  function renderSwatches() {\n    var items = state.items;\n    ui.swatches.innerHTML = '';\n    if (items.length < 2) { ui.swatches.hidden = true; return; }\n    ui.swatches.hidden = false;\n    items.forEach(function (it, idx) {\n      var b = el('button', 'uv-vto__swatch' + (idx === state.active ? ' is-active' : ''));\n      b.type = 'button'; b.title = it.t; b.setAttribute('aria-label', it.t);\n      var im = el('img'); im.src = it.th; im.alt = ''; im.loading = 'lazy'; b.appendChild(im);\n      b.addEventListener('click', function () { selectItem(idx); });\n      ui.swatches.appendChild(b);\n    });\n  }\n\n  function selectItem(idx) {\n    state.active = idx;\n    var it = state.items[idx];\n    ui.name.textContent = it.t;\n    [].forEach.call(ui.swatches.children, function (b, i) { b.classList.toggle('is-active', i === idx); });\n    if (it.current) { ui.goto.hidden = true; } else { ui.goto.hidden = false; ui.goto.href = it.u; }\n    return resolveFront(it).then(function (url) {\n      if (!url) { hideSwatch(idx); return; }\n      return prepareGlasses(url).then(function (g) {\n        if (state.active === idx) { state.glasses = g; state.arm = null; state.mm = frameMM(it.t); state.aff = null; if (state.mode === 'photo') renderPhoto(); }\n        return prepareArm(it.s).then(function (arm) {\n          if (state.active === idx) { state.arm = arm; if (state.mode === 'photo') renderPhoto(); }\n        });\n      });\n    }).catch(function () { setStatus('Bu \u00FCr\u00FCn\u00FCn g\u00F6rseli y\u00FCklenemedi.', false); });\n  }\n\n  function hideSwatch(idx) {\n    var b = ui.swatches.children[idx];\n    if (b) b.hidden = true;\n  }\n\n  // Di\u011Fer renklerin \u00F6n g\u00F6rsellerini arka planda haz\u0131rla; uygun g\u00F6rseli olmayanlar\u0131 gizle\n  function warmSwatches() {\n    state.items.reduce(function (pr, it, idx) {\n      return pr.then(function () {\n        if (ui.root.hidden) return;\n        return resolveFront(it).then(function (url) { if (!url) hideSwatch(idx); });\n      });\n    }, Promise.resolve());\n  }\n\n  function fitCanvas(w, h) {\n    if (ui.canvas.width !== w || ui.canvas.height !== h) { ui.canvas.width = w; ui.canvas.height = h; }\n  }\n\n  function stopCamera() {\n    cancelAnimationFrame(state.raf); state.raf = 0;\n    if (state.stream) { state.stream.getTracks().forEach(function (t) { t.stop(); }); state.stream = null; }\n    ui.video.srcObject = null;\n  }\n\n  function startCamera() {\n    stopCamera();\n    state.mode = 'live'; state.aff = null; state.photo = null; ui.live.hidden = true;\n    if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) {\n      setStatus('Taray\u0131c\u0131n\u0131z kameray\u0131 desteklemiyor. \u201CFoto\u011Fraf y\u00FCkle\u201D ile deneyebilirsiniz.', false);\n      return Promise.resolve();\n    }\n    setStatus('Kamera izni bekleniyor\u2026', true);\n    return navigator.mediaDevices.getUserMedia({ video: { facingMode: 'user', width: { ideal: 1280 }, height: { ideal: 720 } }, audio: false })\n      .then(function (stream) {\n        if (ui.root.hidden) { stream.getTracks().forEach(function (t) { t.stop(); }); return; }\n        state.stream = stream;\n        ui.video.srcObject = stream;\n        return ui.video.play().then(function () {\n          setStatus('Y\u00FCz takibi y\u00FCkleniyor\u2026', true);\n          return loadVision();\n        }).then(function () {\n          if (state.mode !== 'live' || !state.stream) return;\n          setStatus('Y\u00FCz\u00FCn\u00FCz\u00FC kameraya hizalay\u0131n', false);\n          loop();\n        });\n      })\n      .catch(function (err) {\n        console.warn('[UVVTO]', err);\n        var denied = err && (err.name === 'NotAllowedError' || err.name === 'SecurityError');\n        setStatus(denied ? 'Kamera izni verilmedi. Taray\u0131c\u0131 ayarlar\u0131ndan izin verebilir ya da \u201CFoto\u011Fraf y\u00FCkle\u201D ile deneyebilirsiniz.'\n                         : 'Kamera a\u00E7\u0131lamad\u0131. \u201CFoto\u011Fraf y\u00FCkle\u201D ile deneyebilirsiniz.', false);\n      });\n  }\n\n  function loop() {\n    var v = ui.video;\n    if (state.mode !== 'live' || !state.stream) return;\n    if (v.readyState >= 2 && v.videoWidth) {\n      var W = v.videoWidth, H = v.videoHeight;\n      fitCanvas(W, H);\n      var ctx = ui.ctx;\n      ctx.save(); ctx.translate(W, 0); ctx.scale(-1, 1); ctx.drawImage(v, 0, 0, W, H); ctx.restore();\n      var ts = performance.now();\n      if (ts <= state.lastTs) ts = state.lastTs + 1;\n      state.lastTs = ts;\n      try {\n        setMode('VIDEO');\n        var res = landmarker.detectForVideo(v, ts);\n        var lm = res && res.faceLandmarks && res.faceLandmarks[0];\n        if (lm && state.glasses) {\n          state.lostFrames = 0;\n          var pose = computePose(lm, W, H, true);\n          // y\u00FCz \u00F6l\u00E7\u00FCs\u00FC ki\u015Fiye \u00F6zel: ilk karelerden h\u0131zl\u0131, sonra yava\u015F \u00F6\u011Frenilir\n          var fm = faceMMOf(pose);\n          state.faceMM = state.faceMM ? state.faceMM + (fm - state.faceMM) * 0.04 : fm;\n          state.aff = smoothAffine(state.aff, affineFor(state.glasses, pose, state.mm, state.faceMM));\n          if (!ui.status.hidden) setStatus('');\n        } else if (!lm && ++state.lostFrames > 8) {\n          state.aff = null;\n          setStatus('Y\u00FCz\u00FCn\u00FCz\u00FC kameraya hizalay\u0131n', false);\n        }\n      } catch (e) { console.warn('[UVVTO]', e); }\n      if (state.aff && state.glasses) drawGlasses(ctx, state.glasses, state.aff, 0, 0, state.arm);\n    }\n    state.raf = requestAnimationFrame(loop);\n  }\n\n  function usePhoto(file) {\n    stopCamera();\n    state.mode = 'photo'; ui.live.hidden = false;\n    setStatus('Foto\u011Fraf i\u015Fleniyor\u2026', true);\n    var url = URL.createObjectURL(file);\n    return loadImage(url).then(function (img) { return usePhotoImage(img); })\n      .finally(function () { URL.revokeObjectURL(url); });\n  }\n\n  function usePhotoImage(img) {\n    var max = 1400, sc = Math.min(1, max / Math.max(img.naturalWidth, img.naturalHeight));\n    var c = document.createElement('canvas');\n    c.width = Math.round(img.naturalWidth * sc); c.height = Math.round(img.naturalHeight * sc);\n    c.getContext('2d').drawImage(img, 0, 0, c.width, c.height);\n    state.photo = { canvas: c, pose: null };\n    return loadVision().then(function () {\n      setMode('IMAGE');\n      var res = landmarker.detect(c);\n      var lm = res && res.faceLandmarks && res.faceLandmarks[0];\n      state.photo.pose = lm ? computePose(lm, c.width, c.height, false) : null;\n      setStatus(lm ? '' : 'Foto\u011Frafta y\u00FCz bulunamad\u0131. Y\u00FCz\u00FCn\u00FCz\u00FCn net ve kar\u015F\u0131dan g\u00F6r\u00FCnd\u00FC\u011F\u00FC bir foto\u011Fraf deneyin.', false);\n      renderPhoto();\n    }).catch(function (e) { console.warn('[UVVTO]', e); setStatus('Foto\u011Fraf i\u015Flenemedi.', false); });\n  }\n\n  // Foto\u011Fraf modunda y\u00FCz\u00FC kadraja al (boy foto\u011Fraflar\u0131nda y\u00FCz k\u00FC\u00E7\u00FCk kalmas\u0131n)\n  function renderPhoto() {\n    var ph = state.photo; if (!ph) return;\n    var src = ph.canvas, pose = ph.pose, sx = 0, sy = 0, sw = src.width, sh = src.height;\n    if (pose) {\n      var stage = ui.canvas.parentNode;\n      var ar = (stage.clientWidth / Math.max(1, stage.clientHeight)) || 0.75;\n      sw = Math.min(src.width, pose.face * 2.8); sh = sw / ar;\n      if (sh > src.height) { sh = src.height; sw = Math.min(src.width, sh * ar); }\n      sx = Math.max(0, Math.min(src.width - sw, pose.C[0] - sw / 2));\n      sy = Math.max(0, Math.min(src.height - sh, pose.C[1] - sh * 0.42));\n    }\n    var w = Math.round(sw), h = Math.round(sh);\n    fitCanvas(w, h);\n    ui.ctx.drawImage(src, sx, sy, sw, sh, 0, 0, w, h);\n    if (pose && state.glasses) drawGlasses(ui.ctx, state.glasses, affineFor(state.glasses, pose, state.mm, faceMMOf(pose)), sx, sy, state.arm);\n  }\n\n  function snapshot() {\n    var src = ui.canvas;\n    if (!src.width) return;\n    var c = document.createElement('canvas'); c.width = src.width; c.height = src.height;\n    var x = c.getContext('2d'); x.drawImage(src, 0, 0);\n    var fs = Math.max(14, Math.round(c.width * 0.026));\n    x.font = '400 ' + fs + 'px ' + getComputedStyle(document.body).fontFamily;\n    if ('letterSpacing' in x) x.letterSpacing = Math.round(fs * 0.18) + 'px';\n    x.textAlign = 'right'; x.textBaseline = 'bottom';\n    x.fillStyle = 'rgba(0,0,0,.45)'; x.fillText('ULTRAVIOLE.COM', c.width - fs * 0.8 + 1, c.height - fs * 0.6 + 1);\n    x.fillStyle = '#fff'; x.fillText('ULTRAVIOLE.COM', c.width - fs * 0.8, c.height - fs * 0.6);\n    c.toBlob(function (blob) {\n      if (!blob) return;\n      var name = 'ultraviole-sanal-deneme.jpg';\n      var file = null;\n      try { file = new File([blob], name, { type: 'image/jpeg' }); } catch (e) {}\n      if (file && navigator.canShare && navigator.canShare({ files: [file] })) {\n        navigator.share({ files: [file], title: 'Ultraviole Sanal Deneme' }).catch(function () {});\n      } else {\n        var a = document.createElement('a'); a.href = URL.createObjectURL(blob); a.download = name;\n        document.body.appendChild(a); a.click(); setTimeout(function () { URL.revokeObjectURL(a.href); a.remove(); }, 1000);\n      }\n    }, 'image/jpeg', 0.92);\n  }\n\n  function open(data) {\n    buildUI();\n    state.items = (data && data.items) || [];\n    if (!state.items.length) return;\n    state.active = 0; state.glasses = null; state.arm = null; state.faceMM = 0;\n    ui.root.hidden = false;\n    document.documentElement.classList.add('uv-vto-lock');\n    renderSwatches();\n    selectItem(0).then(warmSwatches);\n    loadVision().catch(function (e) { console.warn('[UVVTO]', e); setStatus('Sanal deneme y\u00FCklenemedi. Ba\u011Flant\u0131n\u0131z\u0131 kontrol edip tekrar deneyin.', false); });\n    startCamera();\n  }\n\n  function close() {\n    if (!ui) return;\n    stopCamera();\n    state.mode = 'closed';\n    ui.root.hidden = true;\n    document.documentElement.classList.remove('uv-vto-lock');\n  }\n\n  document.addEventListener('click', function (e) {\n    var btn = e.target.closest && e.target.closest('[data-uv-vto-open]');\n    if (!btn) return;\n    e.preventDefault();\n    var holder = document.getElementById(btn.getAttribute('data-uv-vto-open'));\n    var data = null;\n    try { data = JSON.parse(holder.textContent); } catch (err) { return; }\n    open(data);\n  });\n\n  /* Butonlar\u0131 \u00FCr\u00FCn sayfas\u0131na yerle\u015Ftir */\n  var GLASSES_SVG = '<svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.7\" aria-hidden=\"true\"><path d=\"M2 10.5h3.2M18.8 10.5H22\"/><path d=\"M5 9.5c0-1 .6-1.5 1.6-1.5h3.6c1 0 1.6.6 1.6 1.6v1.6c0 2-1.4 3.6-3.4 3.6S5 13.2 5 11.2zM12.2 9.6c0-1 .6-1.6 1.6-1.6h3.6c1 0 1.6.5 1.6 1.5v1.7c0 2-1.4 3.6-3.4 3.6s-3.4-1.6-3.4-3.6z\"/></svg>';\n  function mount() {\n    var data = document.getElementById('uv-vto-data');\n    if (!data) return;\n    var parsed; try { parsed = JSON.parse(data.textContent); } catch (e) { return; }\n    var first = parsed.items && parsed.items[0];\n    if (!first) return;\n    if (first.f) { mountButtons(data); return; }\n    // \u00D6n g\u00F6rsel ad\u0131 standart de\u011Filse sayfa y\u00FCklendikten sonra otomatik bul\n    var run = function () {\n      resolveFront(first).then(function (url) {\n        if (!url) return;\n        parsed.items[0].f = url;\n        data.textContent = JSON.stringify(parsed);\n        mountButtons(data);\n      });\n    };\n    var later = function () { if (window.requestIdleCallback) window.requestIdleCallback(run, { timeout: 2500 }); else setTimeout(run, 300); };\n    if (document.readyState === 'complete') later(); else window.addEventListener('load', later);\n  }\n\n  function mountButtons(data) {\n    var pid = data.getAttribute('data-product-id');\n    var gallery = document.querySelector('product-gallery[form^=\"product-form-' + pid + '-\"]') || document.querySelector('#main product-gallery');\n    if (gallery && !gallery.querySelector('.uv-vto-pill')) {\n      var pill = el('button', 'uv-vto-pill', GLASSES_SVG + '<span>Sanal Dene</span>');\n      pill.type = 'button'; pill.setAttribute('data-uv-vto-open', 'uv-vto-data');\n      gallery.appendChild(pill);\n    }\n    // \"Y\u00FCz\u00FCnde dene\": teman\u0131n Sepete Ekle butonuyla ayn\u0131 s\u0131n\u0131flar, sat\u0131n alma butonlar\u0131n\u0131n alt\u0131nda ayn\u0131 aral\u0131kla\n    var bb = document.querySelector('buy-buttons[form^=\"product-form-' + pid + '-\"]') || document.querySelector('#main .product-info buy-buttons');\n    if (bb && !bb.querySelector('.uv-vto-btn')) {\n      var atc = bb.querySelector('button[type=\"submit\"]');\n      var b = el('button', ((atc && atc.className) || 'button button--outline w-full') + ' uv-vto-btn', 'Y\u00FCz\u00FCnde dene');\n      b.type = 'button'; b.setAttribute('data-uv-vto-open', 'uv-vto-data');\n      bb.appendChild(b);\n    }\n  }\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', mount); else mount();\n\n  // Kullan\u0131c\u0131 butona yakla\u015F\u0131nca kaynaklara \u00F6nceden ba\u011Flan\n  document.addEventListener('pointerover', function warm(e) {\n    if (e.target.closest && e.target.closest('[data-uv-vto-open]')) {\n      document.removeEventListener('pointerover', warm);\n      var l = document.createElement('link'); l.rel = 'preconnect'; l.href = 'https://cdn.jsdelivr.net'; l.crossOrigin = ''; document.head.appendChild(l);\n    }\n  });\n\n  window.UVVTO = { open: open, close: close, prepareGlasses: prepareGlasses, prepareArm: prepareArm, resolveFront: resolveFront, computePose: computePose, affineFor: affineFor, faceMMOf: faceMMOf, frameMM: frameMM, drawGlasses: drawGlasses, loadVision: loadVision, usePhotoImage: usePhotoImage, cfg: CFG, _state: state };\n})();\n"],
  "mappings": "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",
  "names": ["o", "kx", "x", "k", "a", "y", "p"]
}
