{
  "version": 3,
  "sources": ["/cdn/shop/t/542/assets/massimo-ozel-olcu-ar-v137.js?massimo_ar_build=v409-lasis-family-20260611"],
  "sourcesContent": ["(function () {\n  \"use strict\";\n\n  var BUILD = \"massimo-ar-v135-inset-fix\";\n  var TEMPLATE_VIEW = \"massimo-ozel-olcu-v396\";\n  var THREE_VER = \"0.160.0\";\n  var TEXTURE_TARGET_PX = 2048;\n  var USDZ_TEXTURE_TARGET_PX = 2048;\n  var LIVE_CANVAS_TARGET_PX = 2048;\n  var CORDOBA_STRICT_TEXTURE_TARGET_PX = 2048;\n  var CORDOBA_STRICT_TEXTURE_TARGET_PX_MAX = 3072;\n  var CORDOBA_STRICT_RENDER_TARGET_PX = 3072;\n  var CORDOBA_USDZ_SIZE_GUARD_BYTES = 18 * 1024 * 1024;\n  var DEFAULT_API_BASE = \"https://dolcevita-ar.haydarerkaya.workers.dev\";\n  var API_BASE = String(window.__MASSIMO_AR_API_BASE__ || window.__AR_API_BASE__ || DEFAULT_API_BASE).replace(/\\/+$/, \"\");\n  var rootNode = null;\n  var threeMods = null;\n  var qrLib = null;\n  var modelViewerReady = false;\n  var activeSnapshot = null;\n  var activeResult = null;\n  var delegatedClickBound = false;\n  var buttonObserver = null;\n  var buttonInjectTimer = null;\n  var buttonRetryUntil = 0;\n  var modalObserver = null;\n  var initObserver = null;\n  var initRetryTimer = null;\n  var initInFlight = false;\n  var initialized = false;\n  var lastModalBodyHtml = \"\";\n\n  window.__MASSIMO_AR_BUILD__ = BUILD;\n\n  var ALLOWED_PRODUCT_HANDLES = {\n    \"massimo-carpet-cordoba-110\": true,\n    \"massimo-carpet-lasis-3821-ozel-olcu\": true\n  };\n\n  var LIVE_TEMPLATE_SHAPE_PRESETS = {\n    \"amorf-orkide\": {\n      label: \"Orkide\",\n      radiusMin: 0.48,\n      radiusMax: 1.02,\n      radii: [\n        0.590, 0.573, 0.559, 0.546, 0.533, 0.524, 0.520, 0.525, 0.538, 0.556,\n        0.578, 0.604, 0.633, 0.666, 0.703, 0.747, 0.799, 0.857, 0.913, 0.958,\n        0.980, 0.975, 0.942, 0.889, 0.824, 0.760, 0.706, 0.662, 0.628, 0.602,\n        0.583, 0.571, 0.566, 0.568, 0.579, 0.599, 0.622, 0.645, 0.665, 0.680,\n        0.691, 0.700, 0.709, 0.722, 0.742, 0.772, 0.809, 0.845, 0.873, 0.887,\n        0.882, 0.858, 0.820, 0.773, 0.725, 0.683, 0.651, 0.628, 0.611, 0.597\n      ]\n    }\n  };\n\n  var MATERIAL_PRESETS = {\n    lasis: { thicknessM: 0.009, bumpScale: 0.0085, normalScale: 0.14, roughness: 0.88, pileTextureStrength: 0.08, heightNoiseStrength: 0.08, pileLiftM: 0.0006, sideDarken: 0.66 },\n    barceleno: { thicknessM: 0.009, bumpScale: 0.008, normalScale: 0.13, roughness: 0.87, pileTextureStrength: 0.07, heightNoiseStrength: 0.07, pileLiftM: 0.0005, sideDarken: 0.66 },\n    ibiza: { thicknessM: 0.008, bumpScale: 0.0075, normalScale: 0.13, roughness: 0.88, pileTextureStrength: 0.07, heightNoiseStrength: 0.07, pileLiftM: 0.0005, sideDarken: 0.66 },\n    toledo: { thicknessM: 0.009, bumpScale: 0.0088, normalScale: 0.14, roughness: 0.88, pileTextureStrength: 0.08, heightNoiseStrength: 0.08, pileLiftM: 0.0006, sideDarken: 0.66 },\n    madrid: { thicknessM: 0.009, bumpScale: 0.008, normalScale: 0.13, roughness: 0.87, pileTextureStrength: 0.07, heightNoiseStrength: 0.07, pileLiftM: 0.0005, sideDarken: 0.66 },\n    cordoba: { thicknessM: 0.0155, bumpScale: 0.014, normalScale: 0.20, roughness: 0.97, pileTextureStrength: 0.08, heightNoiseStrength: 0.12, pileLiftM: 0.00075, sideDarken: 0.92 },\n    lima: { thicknessM: 0.008, bumpScale: 0.0075, normalScale: 0.13, roughness: 0.89, pileTextureStrength: 0.07, heightNoiseStrength: 0.07, pileLiftM: 0.0005, sideDarken: 0.66 },\n    fallback: { thicknessM: 0.009, bumpScale: 0.008, normalScale: 0.13, roughness: 0.88, pileTextureStrength: 0.07, heightNoiseStrength: 0.07, pileLiftM: 0.0005, sideDarken: 0.66 }\n  };\n\n  var AR_PROFILE_VERSION = \"live-pattern-profile-v2\";\n  var AR_LIVE_CALIBRATION_VERSION = \"live-reference-v30\";\n  var AR_QUALITY_PROFILES = {\n    fallback: {\n      repeatScaleX: 1,\n      repeatScaleY: 1,\n      brightness: 1,\n      contrast: 1,\n      saturation: 1,\n      warmth: 0,\n      grayMix: 0,\n      pileTextureStrengthScale: 1,\n      normalScaleMultiplier: 1,\n      repeatMaxX: 34,\n      repeatMaxY: 48,\n      nativeRepeatScaleX: 1,\n      nativeRepeatScaleY: 1,\n      nativeBrightness: 1,\n      nativeContrast: 1,\n      nativeSaturation: 1,\n      nativeWarmth: 0,\n      nativeGrayMix: 0,\n      nativeExposure: 1.02,\n      exposure: 1.02\n    },\n    lasis: {\n      repeatScaleX: 1.65,\n      repeatScaleY: 1.65,\n      brightness: 0.90,\n      contrast: 0.98,\n      saturation: 0.92,\n      warmth: -7,\n      grayMix: 0.10,\n      pileTextureStrengthScale: 0.38,\n      normalScaleMultiplier: 0.66,\n      repeatMaxX: 96,\n      repeatMaxY: 140,\n      textureMinTileSize: 18,\n      bodyDetailStrength: 0.46,\n      baseToneStrength: 0.02,\n      textureDetailStrength: 0.024,\n      textureChromaDetailStrength: 0.014,\n      textureDetailMix: 0.038,\n      textureSharpen: 0.22,\n      nativeRepeatScaleX: 3.00,\n      nativeRepeatScaleY: 3.00,\n      nativeTextureMinTileSize: 12,\n      nativeBodyDetailStrength: 0.14,\n      nativeBaseToneStrength: 0,\n      nativeTextureDetailStrength: 0.008,\n      nativeTextureChromaDetailStrength: 0.004,\n      nativeTextureDetailMix: 0.014,\n      nativeTextureSharpen: 0.10,\n      nativePileTextureStrengthScale: 0.12,\n      nativeNormalScaleMultiplier: 0.34,\n      nativeBrightness: 0.80,\n      nativeContrast: 0.92,\n      nativeSaturation: 0.88,\n      nativeWarmth: -12,\n      nativeGrayMix: 0.16,\n      nativeExposure: 0.86,\n      exposure: 0.96\n    },\n    barceleno: {\n      repeatScaleX: 1.20,\n      repeatScaleY: 1.20,\n      brightness: 0.93,\n      contrast: 1.01,\n      saturation: 0.94,\n      warmth: -4,\n      grayMix: 0.06,\n      pileTextureStrengthScale: 0.74,\n      normalScaleMultiplier: 0.92,\n      repeatMaxX: 64,\n      repeatMaxY: 92,\n      textureMinTileSize: 26,\n      bodyDetailStrength: 0.70,\n      textureDetailStrength: 0.045,\n      textureChromaDetailStrength: 0.026,\n      textureDetailMix: 0.065,\n      textureSharpen: 0.38,\n      nativeRepeatScaleX: 1.55,\n      nativeRepeatScaleY: 1.55,\n      nativeTextureMinTileSize: 22,\n      nativeBodyDetailStrength: 0.58,\n      nativeTextureDetailStrength: 0.032,\n      nativeTextureChromaDetailStrength: 0.018,\n      nativeTextureDetailMix: 0.052,\n      nativeTextureSharpen: 0.32,\n      nativePileTextureStrengthScale: 0.40,\n      nativeNormalScaleMultiplier: 0.70,\n      nativeBrightness: 0.84,\n      nativeContrast: 1.04,\n      nativeSaturation: 0.90,\n      nativeWarmth: -8,\n      nativeGrayMix: 0.12,\n      nativeExposure: 0.90,\n      exposure: 0.98\n    },\n    ibiza: {\n      repeatScaleX: 1.18,\n      repeatScaleY: 1.18,\n      brightness: 0.94,\n      contrast: 1.01,\n      saturation: 0.95,\n      warmth: -3,\n      grayMix: 0.05,\n      pileTextureStrengthScale: 0.78,\n      normalScaleMultiplier: 0.94,\n      repeatMaxX: 60,\n      repeatMaxY: 86,\n      textureMinTileSize: 28,\n      bodyDetailStrength: 0.74,\n      textureDetailStrength: 0.048,\n      textureChromaDetailStrength: 0.028,\n      textureDetailMix: 0.07,\n      textureSharpen: 0.40,\n      nativeRepeatScaleX: 1.48,\n      nativeRepeatScaleY: 1.48,\n      nativeTextureMinTileSize: 22,\n      nativeBodyDetailStrength: 0.62,\n      nativeTextureDetailStrength: 0.034,\n      nativeTextureChromaDetailStrength: 0.020,\n      nativeTextureDetailMix: 0.055,\n      nativeTextureSharpen: 0.34,\n      nativePileTextureStrengthScale: 0.44,\n      nativeNormalScaleMultiplier: 0.74,\n      nativeBrightness: 0.86,\n      nativeContrast: 1.03,\n      nativeSaturation: 0.91,\n      nativeWarmth: -7,\n      nativeGrayMix: 0.10,\n      nativeExposure: 0.92,\n      exposure: 0.99\n    },\n    toledo: {\n      repeatScaleX: 1.20,\n      repeatScaleY: 1.20,\n      brightness: 0.93,\n      contrast: 1.01,\n      saturation: 0.94,\n      warmth: -4,\n      grayMix: 0.06,\n      pileTextureStrengthScale: 0.74,\n      normalScaleMultiplier: 0.92,\n      repeatMaxX: 64,\n      repeatMaxY: 92,\n      textureMinTileSize: 26,\n      bodyDetailStrength: 0.70,\n      textureDetailStrength: 0.045,\n      textureChromaDetailStrength: 0.026,\n      textureDetailMix: 0.065,\n      textureSharpen: 0.38,\n      nativeRepeatScaleX: 1.55,\n      nativeRepeatScaleY: 1.55,\n      nativeTextureMinTileSize: 22,\n      nativeBodyDetailStrength: 0.58,\n      nativeTextureDetailStrength: 0.032,\n      nativeTextureChromaDetailStrength: 0.018,\n      nativeTextureDetailMix: 0.052,\n      nativeTextureSharpen: 0.32,\n      nativePileTextureStrengthScale: 0.40,\n      nativeNormalScaleMultiplier: 0.70,\n      nativeBrightness: 0.84,\n      nativeContrast: 1.04,\n      nativeSaturation: 0.90,\n      nativeWarmth: -8,\n      nativeGrayMix: 0.12,\n      nativeExposure: 0.90,\n      exposure: 0.98\n    },\n    madrid: {\n      repeatScaleX: 1.18,\n      repeatScaleY: 1.18,\n      brightness: 0.94,\n      contrast: 1.01,\n      saturation: 0.95,\n      warmth: -3,\n      grayMix: 0.05,\n      pileTextureStrengthScale: 0.78,\n      normalScaleMultiplier: 0.94,\n      repeatMaxX: 60,\n      repeatMaxY: 86,\n      textureMinTileSize: 28,\n      bodyDetailStrength: 0.74,\n      textureDetailStrength: 0.048,\n      textureChromaDetailStrength: 0.028,\n      textureDetailMix: 0.07,\n      textureSharpen: 0.40,\n      nativeRepeatScaleX: 1.48,\n      nativeRepeatScaleY: 1.48,\n      nativeTextureMinTileSize: 22,\n      nativeBodyDetailStrength: 0.62,\n      nativeTextureDetailStrength: 0.034,\n      nativeTextureChromaDetailStrength: 0.020,\n      nativeTextureDetailMix: 0.055,\n      nativeTextureSharpen: 0.34,\n      nativePileTextureStrengthScale: 0.44,\n      nativeNormalScaleMultiplier: 0.74,\n      nativeBrightness: 0.86,\n      nativeContrast: 1.03,\n      nativeSaturation: 0.91,\n      nativeWarmth: -7,\n      nativeGrayMix: 0.10,\n      nativeExposure: 0.92,\n      exposure: 0.99\n    },\n    lima: {\n      repeatScaleX: 1.16,\n      repeatScaleY: 1.16,\n      brightness: 0.94,\n      contrast: 1.01,\n      saturation: 0.95,\n      warmth: -3,\n      grayMix: 0.05,\n      pileTextureStrengthScale: 0.80,\n      normalScaleMultiplier: 0.95,\n      repeatMaxX: 58,\n      repeatMaxY: 84,\n      textureMinTileSize: 28,\n      bodyDetailStrength: 0.76,\n      textureDetailStrength: 0.048,\n      textureChromaDetailStrength: 0.028,\n      textureDetailMix: 0.07,\n      textureSharpen: 0.40,\n      nativeRepeatScaleX: 1.44,\n      nativeRepeatScaleY: 1.44,\n      nativeTextureMinTileSize: 22,\n      nativeBodyDetailStrength: 0.64,\n      nativeTextureDetailStrength: 0.035,\n      nativeTextureChromaDetailStrength: 0.020,\n      nativeTextureDetailMix: 0.056,\n      nativeTextureSharpen: 0.34,\n      nativePileTextureStrengthScale: 0.46,\n      nativeNormalScaleMultiplier: 0.76,\n      nativeBrightness: 0.87,\n      nativeContrast: 1.03,\n      nativeSaturation: 0.92,\n      nativeWarmth: -6,\n      nativeGrayMix: 0.09,\n      nativeExposure: 0.93,\n      exposure: 0.99\n    },\n    cordoba: {\n      repeatScaleX: 1,\n      repeatScaleY: 1,\n      brightness: 1,\n      contrast: 1,\n      saturation: 1,\n      warmth: 0,\n      grayMix: 0,\n      pileTextureStrengthScale: 1,\n      normalScaleMultiplier: 1,\n      repeatMaxX: 34,\n      repeatMaxY: 48,\n      nativeRepeatScaleX: 1,\n      nativeRepeatScaleY: 1,\n      nativeBrightness: 1,\n      nativeContrast: 1,\n      nativeSaturation: 1,\n      nativeWarmth: 0,\n      nativeGrayMix: 0,\n      nativeExposure: 1.02,\n      exposure: 1.02\n    }\n  };\n\n  var AR_PATTERN_CALIBRATIONS = {\n    \"lasis/3812\": {\n      calibrationId: \"auto-photo-3812-v1-20260611\",\n      referenceSource: \"pattern-photo-auto-3812\",\n      profileVersion: AR_LIVE_CALIBRATION_VERSION,\n      locked: false,\n      metrics: {\n        targetBodyRgb: { r: 152, g: 143, b: 132 },\n        targetBlueMinusRed: -29,\n        acceptance: { deltaE: 8, rowPeriodTolerancePx: 3, borderReportedSeparately: true }\n      },\n      profile: {\n        physicalPatternImage: \"https://cdn.shopify.com/s/files/1/0511/6257/9115/files/3812-lbeige-3812_35a0f8f6-6664-49bf-8023-4d5fcf141a14.jpg\",\n        nativePhysicalPatternImage: \"https://cdn.shopify.com/s/files/1/0511/6257/9115/files/3812-lbeige-3812_35a0f8f6-6664-49bf-8023-4d5fcf141a14.jpg\",\n        physicalPatternImageWidth: 1000,\n        nativePhysicalPatternImageWidth: 1000,\n        renderPipeline: \"\",\n        nativeRenderPipeline: \"\",\n        nativeTextureSourceInsetPct: 0,\n        bodyTextureSurfaceMode: \"repeat\",\n        nativeBodyTextureSurfaceMode: \"repeat\",\n        nativeBodyOverrideImage: \"https://cdn.shopify.com/s/files/1/0511/6257/9115/files/3812-lbeige-3812_35a0f8f6-6664-49bf-8023-4d5fcf141a14.jpg\",\n        nativeBodyOverrideInsetXPct: 0.034,\n        nativeBodyOverrideInsetYPct: 0.025,\n        nativeBodyOverrideFit: \"horizontal-profile\",\n        nativeBodyOverrideLineBasisPx: 192,\n        nativeBodyOverrideProfileGain: 1.9,\n      nativeBodyOverrideProfileSynthetic: true,\n      nativeBodyOverrideSynthDarkRgb: { r: 85, g: 70, b: 55 },\n      nativeBodyOverrideSynthLightRgb: { r: 250, g: 245, b: 236 },\n      nativeBodyOverrideSynthLightDuty: 0.50,\n      synthLineBreakupLumaMin: 167,\n      synthLineBreakupMinPx: 14,\n      synthLineBreakupMaxPx: 60,\n      synthLineBreakupDuty: 0.70,\n      synthLineBreakupDimLo: 0.58,\n      synthLineBreakupDimHi: 0.82,\n      nativeEmissiveThreshold: 167,\n      nativeEmissiveScale: 0.74,\n      nativeBodyOverrideSynthPeriodOutPx: 8,\n        nativeBodyOverrideFiberMix: 0.28,\n        nativeBodyOverrideRepeatY: 8,\n        nativeBodyOverrideMirrorY: true,\n        nativeBodyOverrideTileSourceY0Pct: 0.010,\n        nativeBodyOverrideTileSourceY1Pct: 0.990,\n        nativeBodyOverrideRotateDeg: 90,\n        nativeBodyOverrideSmoothing: true,\n        repeatScaleX: 1.65,\n        repeatScaleY: 1.65,\n        repeatMaxX: 150,\n        repeatMaxY: 220,\n        textureMinTileSize: 16,\n        bodyDetailStrength: 0.40,\n        baseToneStrength: 0.015,\n        textureDetailStrength: 0.038,\n        textureChromaDetailStrength: 0.022,\n        textureDetailMix: 0.048,\n        textureSharpen: 0.28,\n        textureMicroDetailStrength: 0.18,\n        textureMicroDetailLowPassRatio: 0.045,\n        pileTextureStrengthScale: 0.34,\n        normalScaleMultiplier: 0.60,\n        brightness: 0.96,\n        contrast: 1.00,\n        saturation: 0.86,\n        warmth: 0,\n        grayMix: 0.16,\n        rgbShiftR: 0,\n        rgbShiftG: 0,\n        rgbShiftB: 0,\n        nativeTextureRepeatX: 17.0,\n        nativeTextureRepeatY: 253.0,\n        nativeRepeatScaleX: 1,\n        nativeRepeatScaleY: 1,\n        nativeTextureMinTileSize: 2,\n        nativeBodyDetailStrength: 0.02,\n        nativeBaseToneStrength: 0,\n        nativeTextureDetailStrength: 0.19,\n        nativeTextureChromaDetailStrength: 0.028,\n        nativeTextureToneStrength: 1,\n        nativeTextureColorStrength: 1,\n        nativeTextureContrastRatio: 0.85,\n        nativeMaxTextureContrastRatio: 1.32,\n        nativeMaxTextureContrastBoost: 1.75,\n        nativeTextureLowPassRatio: 0.010,\n        nativeTextureDetailMix: 0.034,\n        nativeTextureSharpen: 0.52,\n        nativeTextureMicroDetailStrength: 0.30,\n        nativeTextureMicroDetailLowPassRatio: 0.030,\n        nativePileTextureStrengthScale: 0,\n        nativeNormalScaleMultiplier: 0.04,\n        nativeBumpScale: 0.0007,\n        nativeHeightNoiseStrength: 0.002,\n        nativePileLiftM: 0.00012,\n        nativeThicknessM: 0.0042,\n        nativeBevelSizeMultiplier: 0.24,\n        nativeBevelThicknessMultiplier: 0.30,\n        nativeFloorLiftM: -0.0002,\n        nativeSideAtlasWidthPct: 0.024,\n        nativeBordurDepthPct: 0.026,\n        nativeBiyeDepthPct: 0.010,\n        nativeBiyeToBordurRatio: 0.38,\n        nativeBordurCoverSafetyPx: 0,\n        nativeSoftBordurInnerEdge: true,\n        nativeBordurInnerEdgeAlpha: 0.16,\n        nativeBordurInnerEdgeWidth: 0.70,\n        nativeEdgeMirrorRight: true,\n      nativeDisableBordurInsetStitches: false,\n        nativePreserveAlpha: true,\n        nativeAlphaMaskThreshold: 48,\n        nativeBrightness: 0.97,\n        nativeContrast: 0.98,\n        nativeSaturation: 0.86,\n        nativeWarmth: 0,\n        nativeGrayMix: 0.14,\n        nativeRgbShiftR: 0,\n        nativeRgbShiftG: 0,\n        nativeRgbShiftB: 0,\n        nativeExposure: 1.00,\n        exposure: 1\n      }\n    },\n    // [LASIS-FAMILY v137] otomatik foto-kalibrasyon (gercek referans yok; VARSAYIM: shift=0, gorunum dili 3821)\n    \"lasis/3816\": {\n      calibrationId: \"auto-photo-3816-v1-20260611\",\n      referenceSource: \"pattern-photo-auto-3816\",\n      profileVersion: AR_LIVE_CALIBRATION_VERSION,\n      locked: false,\n      metrics: {\n        targetBodyRgb: { r: 106, g: 104, b: 101 },\n        targetBlueMinusRed: -6,\n        acceptance: { deltaE: 8, rowPeriodTolerancePx: 3, borderReportedSeparately: true }\n      },\n      profile: {\n        physicalPatternImage: \"https://cdn.shopify.com/s/files/1/0511/6257/9115/files/3816-grey-beige-3816.jpg\",\n        nativePhysicalPatternImage: \"https://cdn.shopify.com/s/files/1/0511/6257/9115/files/3816-grey-beige-3816.jpg\",\n        physicalPatternImageWidth: 1000,\n        nativePhysicalPatternImageWidth: 1000,\n        renderPipeline: \"\",\n        nativeRenderPipeline: \"\",\n        nativeTextureSourceInsetPct: 0,\n        bodyTextureSurfaceMode: \"repeat\",\n        nativeBodyTextureSurfaceMode: \"repeat\",\n        nativeBodyOverrideImage: \"https://cdn.shopify.com/s/files/1/0511/6257/9115/files/3816-grey-beige-3816.jpg\",\n        nativeBodyOverrideInsetXPct: 0.034,\n        nativeBodyOverrideInsetYPct: 0.025,\n        nativeBodyOverrideFit: \"horizontal-profile\",\n        nativeBodyOverrideLineBasisPx: 260,\n        nativeBodyOverrideProfileGain: 1.9,\n      nativeBodyOverrideProfileSynthetic: true,\n      nativeBodyOverrideSynthDarkRgb: { r: 24, g: 22, b: 21 },\n      nativeBodyOverrideSynthLightRgb: { r: 210, g: 206, b: 202 },\n      nativeBodyOverrideSynthLightDuty: 0.50,\n      synthLineBreakupLumaMin: 124,\n      synthLineBreakupMinPx: 14,\n      synthLineBreakupMaxPx: 60,\n      synthLineBreakupDuty: 0.70,\n      synthLineBreakupDimLo: 0.58,\n      synthLineBreakupDimHi: 0.82,\n      nativeEmissiveThreshold: 124,\n      nativeEmissiveScale: 0.74,\n      nativeBodyOverrideSynthPeriodOutPx: 8,\n        nativeBodyOverrideFiberMix: 0.28,\n        nativeBodyOverrideRepeatY: 8,\n        nativeBodyOverrideMirrorY: true,\n        nativeBodyOverrideTileSourceY0Pct: 0.010,\n        nativeBodyOverrideTileSourceY1Pct: 0.990,\n        nativeBodyOverrideRotateDeg: 90,\n        nativeBodyOverrideSmoothing: true,\n        repeatScaleX: 1.65,\n        repeatScaleY: 1.65,\n        repeatMaxX: 150,\n        repeatMaxY: 220,\n        textureMinTileSize: 16,\n        bodyDetailStrength: 0.40,\n        baseToneStrength: 0.015,\n        textureDetailStrength: 0.038,\n        textureChromaDetailStrength: 0.022,\n        textureDetailMix: 0.048,\n        textureSharpen: 0.28,\n        textureMicroDetailStrength: 0.18,\n        textureMicroDetailLowPassRatio: 0.045,\n        pileTextureStrengthScale: 0.34,\n        normalScaleMultiplier: 0.60,\n        brightness: 0.96,\n        contrast: 1.00,\n        saturation: 0.86,\n        warmth: 0,\n        grayMix: 0.16,\n        rgbShiftR: 0,\n        rgbShiftG: 0,\n        rgbShiftB: 0,\n        nativeTextureRepeatX: 17.0,\n        nativeTextureRepeatY: 253.0,\n        nativeRepeatScaleX: 1,\n        nativeRepeatScaleY: 1,\n        nativeTextureMinTileSize: 2,\n        nativeBodyDetailStrength: 0.02,\n        nativeBaseToneStrength: 0,\n        nativeTextureDetailStrength: 0.19,\n        nativeTextureChromaDetailStrength: 0.028,\n        nativeTextureToneStrength: 1,\n        nativeTextureColorStrength: 1,\n        nativeTextureContrastRatio: 0.85,\n        nativeMaxTextureContrastRatio: 1.32,\n        nativeMaxTextureContrastBoost: 1.75,\n        nativeTextureLowPassRatio: 0.010,\n        nativeTextureDetailMix: 0.034,\n        nativeTextureSharpen: 0.52,\n        nativeTextureMicroDetailStrength: 0.30,\n        nativeTextureMicroDetailLowPassRatio: 0.030,\n        nativePileTextureStrengthScale: 0,\n        nativeNormalScaleMultiplier: 0.04,\n        nativeBumpScale: 0.0007,\n        nativeHeightNoiseStrength: 0.002,\n        nativePileLiftM: 0.00012,\n        nativeThicknessM: 0.0042,\n        nativeBevelSizeMultiplier: 0.24,\n        nativeBevelThicknessMultiplier: 0.30,\n        nativeFloorLiftM: -0.0002,\n        nativeSideAtlasWidthPct: 0.024,\n        nativeBordurDepthPct: 0.026,\n        nativeBiyeDepthPct: 0.010,\n        nativeBiyeToBordurRatio: 0.38,\n        nativeBordurCoverSafetyPx: 0,\n        nativeSoftBordurInnerEdge: true,\n        nativeBordurInnerEdgeAlpha: 0.16,\n        nativeBordurInnerEdgeWidth: 0.70,\n        nativeEdgeMirrorRight: true,\n      nativeDisableBordurInsetStitches: false,\n        nativePreserveAlpha: true,\n        nativeAlphaMaskThreshold: 48,\n        nativeBrightness: 0.97,\n        nativeContrast: 0.98,\n        nativeSaturation: 0.86,\n        nativeWarmth: 0,\n        nativeGrayMix: 0.14,\n        nativeRgbShiftR: 0,\n        nativeRgbShiftG: 0,\n        nativeRgbShiftB: 0,\n        nativeExposure: 1.00,\n        exposure: 1\n      }\n    },\n    // [LASIS-FAMILY v137] otomatik foto-kalibrasyon (gercek referans yok; VARSAYIM: shift=0, gorunum dili 3821)\n    \"lasis/3883\": {\n      calibrationId: \"auto-photo-3883-v1-20260611\",\n      referenceSource: \"pattern-photo-auto-3883\",\n      profileVersion: AR_LIVE_CALIBRATION_VERSION,\n      locked: false,\n      metrics: {\n        targetBodyRgb: { r: 145, g: 133, b: 121 },\n        targetBlueMinusRed: -38,\n        acceptance: { deltaE: 8, rowPeriodTolerancePx: 3, borderReportedSeparately: true }\n      },\n      profile: {\n        physicalPatternImage: \"https://cdn.shopify.com/s/files/1/0511/6257/9115/files/3883-oat-3883_be7486b8-9a2b-496c-a263-12cf880ab475.jpg\",\n        nativePhysicalPatternImage: \"https://cdn.shopify.com/s/files/1/0511/6257/9115/files/3883-oat-3883_be7486b8-9a2b-496c-a263-12cf880ab475.jpg\",\n        physicalPatternImageWidth: 1000,\n        nativePhysicalPatternImageWidth: 1000,\n        renderPipeline: \"\",\n        nativeRenderPipeline: \"\",\n        nativeTextureSourceInsetPct: 0,\n        bodyTextureSurfaceMode: \"repeat\",\n        nativeBodyTextureSurfaceMode: \"repeat\",\n        nativeBodyOverrideImage: \"https://cdn.shopify.com/s/files/1/0511/6257/9115/files/3883-oat-3883_be7486b8-9a2b-496c-a263-12cf880ab475.jpg\",\n        nativeBodyOverrideInsetXPct: 0.034,\n        nativeBodyOverrideInsetYPct: 0.025,\n        nativeBodyOverrideFit: \"horizontal-profile\",\n        nativeBodyOverrideLineBasisPx: 324,\n        nativeBodyOverrideProfileGain: 1.9,\n      nativeBodyOverrideProfileSynthetic: true,\n      nativeBodyOverrideSynthDarkRgb: { r: 71, g: 55, b: 40 },\n      nativeBodyOverrideSynthLightRgb: { r: 248, g: 238, b: 225 },\n      nativeBodyOverrideSynthLightDuty: 0.50,\n      synthLineBreakupLumaMin: 157,\n      synthLineBreakupMinPx: 14,\n      synthLineBreakupMaxPx: 60,\n      synthLineBreakupDuty: 0.70,\n      synthLineBreakupDimLo: 0.58,\n      synthLineBreakupDimHi: 0.82,\n      nativeEmissiveThreshold: 157,\n      nativeEmissiveScale: 0.74,\n      nativeBodyOverrideSynthPeriodOutPx: 8,\n        nativeBodyOverrideFiberMix: 0.28,\n        nativeBodyOverrideRepeatY: 8,\n        nativeBodyOverrideMirrorY: true,\n        nativeBodyOverrideTileSourceY0Pct: 0.010,\n        nativeBodyOverrideTileSourceY1Pct: 0.990,\n        nativeBodyOverrideRotateDeg: 90,\n        nativeBodyOverrideSmoothing: true,\n        repeatScaleX: 1.65,\n        repeatScaleY: 1.65,\n        repeatMaxX: 150,\n        repeatMaxY: 220,\n        textureMinTileSize: 16,\n        bodyDetailStrength: 0.40,\n        baseToneStrength: 0.015,\n        textureDetailStrength: 0.038,\n        textureChromaDetailStrength: 0.022,\n        textureDetailMix: 0.048,\n        textureSharpen: 0.28,\n        textureMicroDetailStrength: 0.18,\n        textureMicroDetailLowPassRatio: 0.045,\n        pileTextureStrengthScale: 0.34,\n        normalScaleMultiplier: 0.60,\n        brightness: 0.96,\n        contrast: 1.00,\n        saturation: 0.86,\n        warmth: 0,\n        grayMix: 0.16,\n        rgbShiftR: 0,\n        rgbShiftG: 0,\n        rgbShiftB: 0,\n        nativeTextureRepeatX: 17.0,\n        nativeTextureRepeatY: 253.0,\n        nativeRepeatScaleX: 1,\n        nativeRepeatScaleY: 1,\n        nativeTextureMinTileSize: 2,\n        nativeBodyDetailStrength: 0.02,\n        nativeBaseToneStrength: 0,\n        nativeTextureDetailStrength: 0.19,\n        nativeTextureChromaDetailStrength: 0.028,\n        nativeTextureToneStrength: 1,\n        nativeTextureColorStrength: 1,\n        nativeTextureContrastRatio: 0.85,\n        nativeMaxTextureContrastRatio: 1.32,\n        nativeMaxTextureContrastBoost: 1.75,\n        nativeTextureLowPassRatio: 0.010,\n        nativeTextureDetailMix: 0.034,\n        nativeTextureSharpen: 0.52,\n        nativeTextureMicroDetailStrength: 0.30,\n        nativeTextureMicroDetailLowPassRatio: 0.030,\n        nativePileTextureStrengthScale: 0,\n        nativeNormalScaleMultiplier: 0.04,\n        nativeBumpScale: 0.0007,\n        nativeHeightNoiseStrength: 0.002,\n        nativePileLiftM: 0.00012,\n        nativeThicknessM: 0.0042,\n        nativeBevelSizeMultiplier: 0.24,\n        nativeBevelThicknessMultiplier: 0.30,\n        nativeFloorLiftM: -0.0002,\n        nativeSideAtlasWidthPct: 0.024,\n        nativeBordurDepthPct: 0.026,\n        nativeBiyeDepthPct: 0.010,\n        nativeBiyeToBordurRatio: 0.38,\n        nativeBordurCoverSafetyPx: 0,\n        nativeSoftBordurInnerEdge: true,\n        nativeBordurInnerEdgeAlpha: 0.16,\n        nativeBordurInnerEdgeWidth: 0.70,\n        nativeEdgeMirrorRight: true,\n      nativeDisableBordurInsetStitches: false,\n        nativePreserveAlpha: true,\n        nativeAlphaMaskThreshold: 48,\n        nativeBrightness: 0.97,\n        nativeContrast: 0.98,\n        nativeSaturation: 0.86,\n        nativeWarmth: 0,\n        nativeGrayMix: 0.14,\n        nativeRgbShiftR: 0,\n        nativeRgbShiftG: 0,\n        nativeRgbShiftB: 0,\n        nativeExposure: 1.00,\n        exposure: 1\n      }\n    },\n    // [LASIS-FAMILY v137] otomatik foto-kalibrasyon (gercek referans yok; VARSAYIM: shift=0, gorunum dili 3821),\n    \"lasis/3821\": {\n      calibrationId: \"live-ref-lasis-3821-20260611-synth-v48-inset\",\n      referenceSource: \"whatsapp-20260606-094109-panel-2-physical-crop\",\n      profileVersion: AR_LIVE_CALIBRATION_VERSION,\n      locked: true,\n      metrics: {\n        targetBodyLab: { l: 68.0, a: -1.5, b: -6.5 },\n        targetBodyRgb: { r: 152, g: 150, b: 148 },\n        targetBlueMinusRed: 0.2,\n        targetLumaStd: 48,\n        targetNearRowPeriodPx: 8,\n        targetMidRowPeriodPx: 8,\n        targetGradientMean: 10.20,\n        targetBorderRgb: { r: 126.54, g: 131.12, b: 138.35 },\n        targetBorderLumaStd: 33.65,\n        acceptance: { deltaE: 5, rowPeriodTolerancePx: 3, borderReportedSeparately: true }\n      },\n      profile: {\n        physicalPatternImage: \"https://cdn.shopify.com/s/files/1/0511/6257/9115/files/3821-platina-3821_45534797-489e-45db-a1dd-5e9b31326d7e.jpg\",\n        nativePhysicalPatternImage: \"https://cdn.shopify.com/s/files/1/0511/6257/9115/files/3821-platina-3821_45534797-489e-45db-a1dd-5e9b31326d7e.jpg\",\n        physicalPatternImageWidth: 1400,\n        nativePhysicalPatternImageWidth: 1400,\n        renderPipeline: \"\",\n        nativeRenderPipeline: \"\",\n        nativeTextureSourceInsetPct: 0,\n        bodyTextureSurfaceMode: \"repeat\",\n        nativeBodyTextureSurfaceMode: \"repeat\",\n        nativeBodyOverrideImage: \"https://cdn.shopify.com/s/files/1/0511/6257/9115/files/3821-platina-3821_45534797-489e-45db-a1dd-5e9b31326d7e.jpg\",\n        nativeBodyOverrideInsetXPct: 0.034,\n        nativeBodyOverrideInsetYPct: 0.025,\n        nativeBodyOverrideFit: \"horizontal-profile\",\n        nativeBodyOverrideLineBasisPx: 191,\n        nativeBodyOverrideProfileGain: 1.9,\n      nativeBodyOverrideProfileSynthetic: true,\n      nativeBodyOverrideSynthDarkRgb: { r: 80, g: 82, b: 86 },\n      nativeBodyOverrideSynthLightRgb: { r: 250, g: 252, b: 255 },\n      nativeBodyOverrideSynthLightDuty: 0.50,\n      synthLineBreakupLumaMin: 170,\n      synthLineBreakupMinPx: 14,\n      synthLineBreakupMaxPx: 60,\n      synthLineBreakupDuty: 0.70,\n      synthLineBreakupDimLo: 0.58,\n      synthLineBreakupDimHi: 0.82,\n      nativeEmissiveThreshold: 170,\n      nativeEmissiveScale: 0.74,\n      nativeBodyOverrideSynthPeriodOutPx: 8,\n        nativeBodyOverrideFiberMix: 0.28,\n        nativeBodyOverrideRepeatY: 8,\n        nativeBodyOverrideMirrorY: true,\n        nativeBodyOverrideTileSourceY0Pct: 0.010,\n        nativeBodyOverrideTileSourceY1Pct: 0.990,\n        nativeBodyOverrideRotateDeg: 90,\n        nativeBodyOverrideSmoothing: true,\n        repeatScaleX: 1.65,\n        repeatScaleY: 1.65,\n        repeatMaxX: 150,\n        repeatMaxY: 220,\n        textureMinTileSize: 16,\n        bodyDetailStrength: 0.40,\n        baseToneStrength: 0.015,\n        textureDetailStrength: 0.038,\n        textureChromaDetailStrength: 0.022,\n        textureDetailMix: 0.048,\n        textureSharpen: 0.28,\n        textureMicroDetailStrength: 0.18,\n        textureMicroDetailLowPassRatio: 0.045,\n        pileTextureStrengthScale: 0.34,\n        normalScaleMultiplier: 0.60,\n        brightness: 0.96,\n        contrast: 1.00,\n        saturation: 0.86,\n        warmth: -3,\n        grayMix: 0.16,\n        rgbShiftR: -4,\n        rgbShiftG: -1,\n        rgbShiftB: 3,\n        nativeTextureRepeatX: 17.0,\n        nativeTextureRepeatY: 253.0,\n        nativeRepeatScaleX: 1,\n        nativeRepeatScaleY: 1,\n        nativeTextureMinTileSize: 2,\n        nativeBodyDetailStrength: 0.02,\n        nativeBaseToneStrength: 0,\n        nativeTextureDetailStrength: 0.19,\n        nativeTextureChromaDetailStrength: 0.028,\n        nativeTextureToneStrength: 1,\n        nativeTextureColorStrength: 1,\n        nativeTextureContrastRatio: 0.85,\n        nativeMaxTextureContrastRatio: 1.32,\n        nativeMaxTextureContrastBoost: 1.75,\n        nativeTextureLowPassRatio: 0.010,\n        nativeTextureDetailMix: 0.034,\n        nativeTextureSharpen: 0.52,\n        nativeTextureMicroDetailStrength: 0.30,\n        nativeTextureMicroDetailLowPassRatio: 0.030,\n        nativePileTextureStrengthScale: 0,\n        nativeNormalScaleMultiplier: 0.04,\n        nativeBumpScale: 0.0007,\n        nativeHeightNoiseStrength: 0.002,\n        nativePileLiftM: 0.00012,\n        nativeThicknessM: 0.0042,\n        nativeBevelSizeMultiplier: 0.24,\n        nativeBevelThicknessMultiplier: 0.30,\n        nativeFloorLiftM: -0.0002,\n        nativeSideAtlasWidthPct: 0.024,\n        nativeBordurDepthPct: 0.026,\n        nativeBiyeDepthPct: 0.010,\n        nativeBiyeToBordurRatio: 0.38,\n        nativeBordurCoverSafetyPx: 0,\n        nativeSoftBordurInnerEdge: true,\n        nativeBordurInnerEdgeAlpha: 0.16,\n        nativeBordurInnerEdgeWidth: 0.70,\n        nativeEdgeMirrorRight: true,\n      nativeDisableBordurInsetStitches: false,\n        nativePreserveAlpha: true,\n        nativeAlphaMaskThreshold: 48,\n        nativeBrightness: 0.97,\n        nativeContrast: 0.98,\n        nativeSaturation: 0.86,\n        nativeWarmth: 0,\n        nativeGrayMix: 0.14,\n        nativeRgbShiftR: -4,\n        nativeRgbShiftG: -1,\n        nativeRgbShiftB: 4,\n        nativeExposure: 1.00,\n        exposure: 1\n      }\n    }\n  };\n\n  var FLOOR_ANCHOR = {\n    visibleThicknessRatio: 1,\n    minVisibleThicknessM: 0.0025,\n    maxVisibleThicknessM: 0.006,\n    sinkBelowFloorM: 0.0004\n  };\n\n  function $(root, selector) {\n    return root && root.querySelector(selector);\n  }\n\n  function escapeHtml(value) {\n    return String(value == null ? \"\" : value)\n      .replace(/&/g, \"&amp;\")\n      .replace(/</g, \"&lt;\")\n      .replace(/>/g, \"&gt;\")\n      .replace(/\"/g, \"&quot;\")\n      .replace(/'/g, \"&#39;\");\n  }\n\n  function normalizeMediaUrl(value) {\n    var src = String(value || \"\").trim();\n    if (!src) return \"\";\n    if (/^\\/\\//.test(src)) return (location.protocol === \"http:\" ? \"http:\" : \"https:\") + src;\n    if (/^\\//.test(src)) return location.origin + src;\n    return src;\n  }\n\n  function resolveProductVideos(snapshot) {\n    var urls = [];\n    function add(value) {\n      var src = normalizeMediaUrl(value);\n      if (src && urls.indexOf(src) < 0) urls.push(src);\n    }\n    var config = snapshot && snapshot.config || {};\n    [\"productVideos\", \"videos\", \"videoUrls\"].forEach(function (key) {\n      if (Array.isArray(config[key])) config[key].forEach(add);\n    });\n    [\"productVideo\", \"videoUrl\", \"video\"].forEach(function (key) {\n      if (config[key]) add(config[key]);\n    });\n    Array.prototype.slice.call(document.querySelectorAll(\"video source, video[src], source[type*='mp4']\")).forEach(function (node) {\n      add(node.currentSrc || node.src || node.getAttribute(\"src\"));\n    });\n    return urls;\n  }\n\n  function normalizeCode(value) {\n    return String(value || \"\").toLowerCase().trim()\n      .replace(/[^a-z0-9]+/g, \"-\")\n      .replace(/^-+|-+$/g, \"\");\n  }\n\n  function arQualityProfileKey(source) {\n    source = source || {};\n    var config = source.config || {};\n    var state = source.state || {};\n    var signals = [\n      source.qualityCode,\n      source.qualityLabel,\n      source.handle,\n      source.title,\n      source.patternCode,\n      config.qualityCode,\n      config.qualityLabel,\n      config.quality,\n      config.handle,\n      config.productHandle,\n      config.shopifyHandle,\n      config.title,\n      state.qualityCode,\n      state.qualityLabel,\n      state.quality,\n      state.productHandle,\n      currentProductHandle(null),\n      document.title\n    ].map(normalizeCode).join(\" \");\n    if (signals.indexOf(\"lasis\") >= 0) return \"lasis\";\n    if (signals.indexOf(\"barceleno\") >= 0 || signals.indexOf(\"barcelona\") >= 0) return \"barceleno\";\n    if (signals.indexOf(\"ibiza\") >= 0) return \"ibiza\";\n    if (signals.indexOf(\"toledo\") >= 0) return \"toledo\";\n    if (signals.indexOf(\"madrid\") >= 0) return \"madrid\";\n    if (signals.indexOf(\"cordoba\") >= 0) return \"cordoba\";\n    if (signals.indexOf(\"lima\") >= 0) return \"lima\";\n    return \"fallback\";\n  }\n\n  function arPatternCode(source) {\n    source = source || {};\n    var config = source.config || {};\n    var state = source.state || {};\n    var candidates = [\n      source.patternCode,\n      state.patternCode,\n      state.pattern,\n      config.patternCode,\n      config.pattern,\n      config.key,\n      config.productKey,\n      source.handle,\n      config.handle,\n      config.productHandle,\n      config.shopifyHandle,\n      state.productHandle,\n      source.title,\n      config.title,\n      document.title\n    ];\n    for (var i = 0; i < candidates.length; i++) {\n      var raw = String(candidates[i] || \"\").trim();\n      if (!raw) continue;\n      if (/^\\d{2,5}$/.test(raw)) return raw;\n      var normalized = normalizeCode(raw);\n      var match = normalized.match(/(?:^|-)(\\d{2,5})(?:-|$)/);\n      if (match && match[1]) return match[1];\n    }\n    return \"\";\n  }\n\n  function arPatternCalibrationKey(source) {\n    var quality = arQualityProfileKey(source);\n    var pattern = arPatternCode(source);\n    if (!quality || quality === \"fallback\" || !pattern) return \"\";\n    return quality + \"/\" + pattern;\n  }\n\n  function arPatternCalibration(source) {\n    var key = arPatternCalibrationKey(source);\n    return key && AR_PATTERN_CALIBRATIONS[key] || null;\n  }\n\n  function arMissingCalibrationMessage(profile, source) {\n    profile = profile || {};\n    source = source || {};\n    var key = profile.calibrationKey || arPatternCalibrationKey(source) || profile.key || \"bilinmeyen\";\n    return \"Canli fiziksel referans kalibrasyonu yok: \" + key + \". Mock, procedural veya giydirme fallback kullanilmadi; bu desen icin AR modeli uretilmedi.\";\n  }\n\n  function arQualityProfile(source) {\n    var key = arQualityProfileKey(source);\n    var calibrationKey = arPatternCalibrationKey(source);\n    var calibration = arPatternCalibration(source);\n    var profile = Object.assign({}, AR_QUALITY_PROFILES.fallback, AR_QUALITY_PROFILES[key] || {});\n    profile.key = key;\n    profile.version = AR_PROFILE_VERSION;\n    profile.calibrationKey = calibrationKey;\n    if (key !== \"cordoba\" && !calibration) {\n      profile.calibrationMissing = true;\n      profile.strictLiveCalibration = false;\n      return profile;\n    }\n    if (calibration) {\n      profile = Object.assign(profile, calibration.profile || {});\n      profile.key = key;\n      profile.version = AR_PROFILE_VERSION;\n      profile.calibrationKey = calibrationKey;\n      profile.calibrationId = calibration.calibrationId;\n      profile.calibrationVersion = calibration.profileVersion || AR_LIVE_CALIBRATION_VERSION;\n      profile.referenceSource = calibration.referenceSource;\n      profile.referenceMetrics = calibration.metrics || null;\n      profile.strictLiveCalibration = true;\n      profile.calibrationMissing = false;\n      profile.lockedCalibration = calibration.locked !== false;\n    }\n    return profile;\n  }\n\n  function assertLiveCalibrationForAr(source, profile) {\n    source = source || {};\n    profile = profile || arQualityProfile(source);\n    if (source.strictExact) return profile;\n    if (profile.strictLiveCalibration && !profile.calibrationMissing && profile.calibrationId) return profile;\n    throw new Error(arMissingCalibrationMessage(profile, source));\n  }\n\n  function arProfileForSnapshot(snapshot) {\n    if (snapshot && snapshot.arProfile) {\n      return Object.assign({}, AR_QUALITY_PROFILES.fallback, snapshot.arProfile);\n    }\n    return arQualityProfile(snapshot);\n  }\n\n  function nativeArOutputProfile(profile, options) {\n    profile = Object.assign({}, AR_QUALITY_PROFILES.fallback, profile || {});\n    options = options || {};\n    if (!options.nativeAr && !options.forUsdz) return profile;\n    var out = Object.assign({}, profile);\n    [\n      [\"nativeBrightness\", \"brightness\"],\n      [\"nativeContrast\", \"contrast\"],\n      [\"nativeSaturation\", \"saturation\"],\n      [\"nativeWarmth\", \"warmth\"],\n      [\"nativeGrayMix\", \"grayMix\"],\n      [\"nativeRgbShiftR\", \"rgbShiftR\"],\n      [\"nativeRgbShiftG\", \"rgbShiftG\"],\n      [\"nativeRgbShiftB\", \"rgbShiftB\"],\n      [\"nativePileTextureStrengthScale\", \"pileTextureStrengthScale\"],\n      [\"nativeNormalScaleMultiplier\", \"normalScaleMultiplier\"],\n      [\"nativeBumpScale\", \"bumpScale\"],\n      [\"nativeHeightNoiseStrength\", \"heightNoiseStrength\"],\n      [\"nativePileLiftM\", \"pileLiftM\"],\n      [\"nativeThicknessM\", \"thicknessM\"],\n      [\"nativeBevelSizeMultiplier\", \"bevelSizeMultiplier\"],\n      [\"nativeBevelThicknessMultiplier\", \"bevelThicknessMultiplier\"],\n      [\"nativeFloorLiftM\", \"floorLiftM\"],\n      [\"nativeSideAtlasWidthPct\", \"sideAtlasWidthPct\"],\n      [\"nativeExposure\", \"exposure\"],\n      [\"nativeEmissiveThreshold\", \"emissiveThreshold\"],\n      [\"nativeEmissiveScale\", \"emissiveScale\"]\n    ].forEach(function (pair) {\n      var value = Number(profile[pair[0]]);\n      if (Number.isFinite(value)) out[pair[1]] = value;\n    });\n    return out;\n  }\n\n  function assignFiniteOption(target, key, value) {\n    var n = Number(value);\n    if (Number.isFinite(n)) target[key] = n;\n  }\n\n  function assignProfileTextureOptions(target, profile, nativeMode) {\n    var pairs = [\n      [\"textureMinTileSize\", \"nativeTextureMinTileSize\", \"textureMinTileSize\"],\n      [\"textureMinTileSize\", \"nativeTextureMinTileSize\", \"bodyTextureMinTileSize\"],\n      [\"bodyDetailStrength\", \"nativeBodyDetailStrength\", \"bodyDetailStrength\"],\n      [\"baseToneStrength\", \"nativeBaseToneStrength\", \"baseToneStrength\"],\n      [\"textureLowPassRatio\", \"nativeTextureLowPassRatio\", \"textureLowPassRatio\"],\n      [\"textureDetailStrength\", \"nativeTextureDetailStrength\", \"textureDetailStrength\"],\n      [\"textureChromaDetailStrength\", \"nativeTextureChromaDetailStrength\", \"textureChromaDetailStrength\"],\n      [\"textureToneStrength\", \"nativeTextureToneStrength\", \"textureToneStrength\"],\n      [\"textureColorStrength\", \"nativeTextureColorStrength\", \"textureColorStrength\"],\n      [\"textureContrastRatio\", \"nativeTextureContrastRatio\", \"textureContrastRatio\"],\n      [\"maxTextureContrastRatio\", \"nativeMaxTextureContrastRatio\", \"maxTextureContrastRatio\"],\n      [\"maxTextureContrastBoost\", \"nativeMaxTextureContrastBoost\", \"maxTextureContrastBoost\"],\n      [\"maxColorCorrection\", \"nativeMaxColorCorrection\", \"maxColorCorrection\"],\n      [\"renderLightnessLift\", \"nativeRenderLightnessLift\", \"renderLightnessLift\"],\n      [\"textureDetailMix\", \"nativeTextureDetailMix\", \"textureDetailMix\"],\n      [\"textureSharpen\", \"nativeTextureSharpen\", \"textureSharpen\"],\n      [\"textureMicroDetailStrength\", \"nativeTextureMicroDetailStrength\", \"textureMicroDetailStrength\"],\n      [\"textureMicroDetailLowPassRatio\", \"nativeTextureMicroDetailLowPassRatio\", \"textureMicroDetailLowPassRatio\"]\n    ];\n    pairs.forEach(function (pair) {\n      var source = nativeMode && Number.isFinite(Number(profile[pair[1]])) ? profile[pair[1]] : profile[pair[0]];\n      assignFiniteOption(target, pair[2], source);\n    });\n  }\n\n  function assignProfileEdgeOptions(target, profile, nativeMode) {\n    var pairs = [\n      [\"bordurDepthPct\", \"nativeBordurDepthPct\", \"bordurDepthPct\"],\n      [\"biyeDepthPct\", \"nativeBiyeDepthPct\", \"biyeDepthPct\"],\n      [\"biyeToBordurRatio\", \"nativeBiyeToBordurRatio\", \"biyeToBordurRatio\"],\n      [\"bordurCoverSafetyPx\", \"nativeBordurCoverSafetyPx\", \"bordurCoverSafetyPx\"],\n      [\"bordurInnerEdgeAlpha\", \"nativeBordurInnerEdgeAlpha\", \"bordurInnerEdgeAlpha\"],\n      [\"bordurInnerEdgeWidth\", \"nativeBordurInnerEdgeWidth\", \"bordurInnerEdgeWidth\"]\n    ];\n    pairs.forEach(function (pair) {\n      var source = nativeMode && Number.isFinite(Number(profile[pair[1]])) ? profile[pair[1]] : profile[pair[0]];\n      assignFiniteOption(target, pair[2], source);\n    });\n    [\n      [\"softBordurInnerEdge\", \"nativeSoftBordurInnerEdge\"],\n      [\"disableBordurInsetStitches\", \"nativeDisableBordurInsetStitches\"]\n    ].forEach(function (pair) {\n      var key = nativeMode && Object.prototype.hasOwnProperty.call(profile, pair[1]) ? pair[1] : pair[0];\n      if (Object.prototype.hasOwnProperty.call(profile, key)) target[pair[0]] = !!profile[key];\n    });\n  }\n\n  function arRepeatSourceValue(config, preview, key, fallback) {\n    config = config || {};\n    var params = config.previewParams || {};\n    var optionKey = key === \"x\" ? \"textureRepeatX\" : \"textureRepeatY\";\n    var arKey = key === \"x\" ? \"arTextureRepeatX\" : \"arTextureRepeatY\";\n    var zoomKey = key === \"x\" ? \"zoomTextureRepeatX\" : \"zoomTextureRepeatY\";\n    var candidates = [\n      config[arKey],\n      params[arKey],\n      config[zoomKey],\n      params[zoomKey],\n      config[optionKey],\n      params[optionKey],\n      preview && preview.options && preview.options[optionKey]\n    ];\n    for (var i = 0; i < candidates.length; i++) {\n      var n = Number(candidates[i]);\n      if (Number.isFinite(n) && n > 0) return n;\n    }\n    return fallback;\n  }\n\n  function arRenderOptionsForProfile(config, state, preview) {\n    var source = { config: config, state: state, title: document.title, handle: currentProductHandle(null) };\n    var profile = assertLiveCalibrationForAr(source);\n    var baseX = arRepeatSourceValue(config, preview, \"x\", 0);\n    var baseY = arRepeatSourceValue(config, preview, \"y\", 0);\n    var options = {\n      arQualityProfileKey: profile.key,\n      arQualityProfileVersion: profile.version,\n      __massimoStrictLiveCalibration: !!profile.strictLiveCalibration,\n      __massimoArCalibrationId: profile.calibrationId || \"\",\n      strictArAssets: true\n    };\n    if (profile.key !== \"fallback\" && profile.key !== \"cordoba\") {\n      options.bodyTextureSurfaceMode = \"repeat\";\n      options.__massimoArDistanceTexture = true;\n      options.__massimoArProfileKey = profile.key;\n      options.__massimoArCalibrationKey = profile.calibrationKey || \"\";\n      options.__massimoArRepeatMaxX = Math.max(1.2, Math.min(180, Number(profile.repeatMaxX) || 34));\n      options.__massimoArRepeatMaxY = Math.max(1.2, Math.min(240, Number(profile.repeatMaxY) || 48));\n      if (profile.key === \"lasis\") options.__massimoLasisFineArTexture = true;\n    }\n    var nativeMode = isIOS() || isAndroid();\n    assignProfileTextureOptions(options, profile, nativeMode);\n    assignProfileEdgeOptions(options, profile, nativeMode);\n    var profilePatternImage = nativeMode && profile.nativePhysicalPatternImage\n      ? profile.nativePhysicalPatternImage\n      : profile.physicalPatternImage;\n    var profilePatternWidth = nativeMode && Number(profile.nativePhysicalPatternImageWidth) > 0\n      ? Number(profile.nativePhysicalPatternImageWidth)\n      : Number(profile.physicalPatternImageWidth) || 2048;\n    if (profilePatternImage) {\n      options.patternImage = sizedShopifyImageUrl(profilePatternImage, profilePatternWidth);\n      options.detailPatternImage = options.patternImage;\n      options.__massimoPhysicalPatternImage = profilePatternImage;\n    }\n    var profileSurfaceModeKey = nativeMode && Object.prototype.hasOwnProperty.call(profile, \"nativeBodyTextureSurfaceMode\")\n      ? \"nativeBodyTextureSurfaceMode\"\n      : \"bodyTextureSurfaceMode\";\n    if (Object.prototype.hasOwnProperty.call(profile, profileSurfaceModeKey)) {\n      options.bodyTextureSurfaceMode = String(profile[profileSurfaceModeKey] || \"\");\n    }\n    var profilePipelineKey = nativeMode && Object.prototype.hasOwnProperty.call(profile, \"nativeRenderPipeline\")\n      ? \"nativeRenderPipeline\"\n      : \"renderPipeline\";\n    if (Object.prototype.hasOwnProperty.call(profile, profilePipelineKey)) {\n      options.renderPipeline = String(profile[profilePipelineKey] || \"\");\n    }\n    var sourceInsetKey = nativeMode && Object.prototype.hasOwnProperty.call(profile, \"nativeTextureSourceInsetPct\")\n      ? \"nativeTextureSourceInsetPct\"\n      : \"textureSourceInsetPct\";\n    if (Object.prototype.hasOwnProperty.call(profile, sourceInsetKey)) {\n      assignFiniteOption(options, \"textureSourceInsetPct\", profile[sourceInsetKey]);\n    }\n    var repeatScaleX = nativeMode && Number(profile.nativeRepeatScaleX) > 0\n      ? Number(profile.nativeRepeatScaleX)\n      : Number(profile.repeatScaleX) || 1;\n    var repeatScaleY = nativeMode && Number(profile.nativeRepeatScaleY) > 0\n      ? Number(profile.nativeRepeatScaleY)\n      : Number(profile.repeatScaleY) || 1;\n    var directRepeatX = nativeMode && Number(profile.nativeTextureRepeatX) > 0\n      ? Number(profile.nativeTextureRepeatX)\n      : Number(profile.textureRepeatX);\n    var directRepeatY = nativeMode && Number(profile.nativeTextureRepeatY) > 0\n      ? Number(profile.nativeTextureRepeatY)\n      : Number(profile.textureRepeatY);\n    if (directRepeatX > 0) {\n      options.textureRepeatX = Math.max(1.2, Math.min(180, directRepeatX));\n      options.bodyTextureRepeatX = options.textureRepeatX;\n    } else if (baseX > 0) {\n      options.textureRepeatX = Math.max(1.2, Math.min(180, baseX * repeatScaleX));\n      options.bodyTextureRepeatX = options.textureRepeatX;\n    }\n    if (directRepeatY > 0) {\n      options.textureRepeatY = Math.max(1.2, Math.min(240, directRepeatY));\n      options.bodyTextureRepeatY = options.textureRepeatY;\n    } else if (baseY > 0) {\n      options.textureRepeatY = Math.max(1.2, Math.min(240, baseY * repeatScaleY));\n      options.bodyTextureRepeatY = options.textureRepeatY;\n    }\n    return options;\n  }\n\n  var EDGE_FABRIC_SWATCHES = {\n    \"canvas-02\": \"#1f2327\",\n    \"canvas-06\": \"#8f9aa4\",\n    \"canvas-14\": \"#b8c2c0\",\n    \"canvas-24\": \"#8d8f8c\",\n    \"canvas-26\": \"#72859b\",\n    \"canvas-33\": \"#8f2441\",\n    \"canvas-47\": \"#20314a\",\n    \"canvas-48\": \"#7f8750\",\n    \"canvas-49\": \"#9f6355\",\n    \"canvas-64\": \"#7c807f\",\n    \"canvas-66\": \"#5f6b73\",\n    \"canvas-84\": \"#4d3d3b\",\n    \"alcantara-02\": \"#c3b6a5\",\n    \"alcantara-05\": \"#9b8c7b\",\n    \"alcantara-09\": \"#776f67\",\n    \"alcantara-11\": \"#b0a596\",\n    \"alcantara-16\": \"#d2c5b4\",\n    \"alcantara-17\": \"#8a7969\",\n    \"alcantara-19\": \"#665c54\",\n    \"alcantara-20\": \"#a18f7d\"\n  };\n\n  function cssHexToInt(value) {\n    var text = String(value || \"\").trim();\n    var match = text.match(/^#?([0-9a-f]{6})$/i);\n    return match ? parseInt(match[1], 16) : null;\n  }\n\n  function pushFabricCandidates(list, value) {\n    if (!value) return;\n    if (typeof value === \"string\") {\n      list.push(value);\n      return;\n    }\n    if (typeof value !== \"object\") return;\n    [\"id\", \"key\", \"code\", \"label\", \"familyLabel\", \"sourceFilename\"].forEach(function (key) {\n      if (value[key]) list.push(value[key]);\n    });\n  }\n\n  function edgeFabricSwatchHex(snapshot) {\n    var direct = cssHexToInt(snapshot && (snapshot.fabricColor || snapshot.edgeFabricColor));\n    if (direct != null) return direct;\n    var candidates = [];\n    pushFabricCandidates(candidates, snapshot && snapshot.fabricKey);\n    pushFabricCandidates(candidates, snapshot && snapshot.fabricLabel);\n    pushFabricCandidates(candidates, snapshot && snapshot.edgeFabricKey);\n    pushFabricCandidates(candidates, snapshot && snapshot.edgeFabricLabel);\n    pushFabricCandidates(candidates, snapshot && snapshot.state && snapshot.state.fabricSummary);\n    pushFabricCandidates(candidates, snapshot && snapshot.state && snapshot.state.fabric);\n    pushFabricCandidates(candidates, snapshot && snapshot.last && snapshot.last.fabric);\n    pushFabricCandidates(candidates, snapshot && snapshot.last && snapshot.last.fabricLabel);\n    for (var i = 0; i < candidates.length; i++) {\n      var key = normalizeCode(candidates[i]);\n      if (EDGE_FABRIC_SWATCHES[key]) return cssHexToInt(EDGE_FABRIC_SWATCHES[key]);\n      var canvasMatch = key.match(/^canvas-?(\\d{1,2})$/);\n      if (canvasMatch) {\n        var canvasKey = \"canvas-\" + (\"0\" + canvasMatch[1]).slice(-2);\n        if (EDGE_FABRIC_SWATCHES[canvasKey]) return cssHexToInt(EDGE_FABRIC_SWATCHES[canvasKey]);\n      }\n      var alcantaraMatch = key.match(/^alcantara-?(\\d{1,2})$/);\n      if (alcantaraMatch) {\n        var alcantaraKey = \"alcantara-\" + (\"0\" + alcantaraMatch[1]).slice(-2);\n        if (EDGE_FABRIC_SWATCHES[alcantaraKey]) return cssHexToInt(EDGE_FABRIC_SWATCHES[alcantaraKey]);\n      }\n    }\n    return null;\n  }\n\n  function currentRoot() {\n    var liveRoot = document.querySelector(\"[data-massimo-ozel-olcu]\");\n    if (!rootNode || !document.documentElement.contains(rootNode)) rootNode = liveRoot;\n    return rootNode || liveRoot;\n  }\n\n  function currentProductHandle(api) {\n    var config = api && api.getConfig ? api.getConfig() || {} : {};\n    var state = api && api.getState ? api.getState() || {} : {};\n    var root = currentRoot();\n    var candidates = [\n      config.handle,\n      config.productHandle,\n      config.shopifyHandle,\n      state.handle,\n      state.productHandle,\n      root && root.getAttribute(\"data-product-handle\"),\n      root && root.getAttribute(\"data-handle\")\n    ];\n    var match = String(location.pathname || \"\").match(/\\/products\\/([^/?#]+)/i);\n    if (match) candidates.push(match[1]);\n    for (var i = 0; i < candidates.length; i++) {\n      var handle = normalizeCode(candidates[i]);\n      if (handle) return handle;\n    }\n    return \"\";\n  }\n\n  function sizedShopifyImageUrl(src, width) {\n    var value = String(src || \"\").trim();\n    var target = Math.max(0, Math.round(Number(width) || 0));\n    if (!value || !target) return value;\n    try {\n      var url = new URL(value, location.href);\n      if (/cdn\\.shopify\\.com|dolcevitahali\\.com/i.test(url.hostname)) {\n        url.searchParams.set(\"width\", String(target));\n        return url.toString();\n      }\n    } catch (err) {}\n    return value;\n  }\n\n  function optionNumber(config, key, fallback) {\n    var params = config && config.previewParams || {};\n    var value = params && Object.prototype.hasOwnProperty.call(params, key) ? params[key] : config && config[key];\n    var n = Number(value);\n    return Number.isFinite(n) ? n : fallback;\n  }\n\n  function pickPreviewBaseImage(config) {\n    var images = config && Array.isArray(config.productImages) ? config.productImages : [];\n    return config && (config.sourceImage || config.displayImage) || images[0] || \"\";\n  }\n\n  function pickCordobaPileTextureUrl(config) {\n    config = config || {};\n    var profile = config.materialProfile || {};\n    var images = Array.isArray(config.productImages) ? config.productImages : [];\n    var index = Number.isFinite(Number(profile.pileTextureImageIndex)) ? Number(profile.pileTextureImageIndex) : 1;\n    return images[index] || config.patternImage || images[1] || images[0] || \"\";\n  }\n\n  function cordobaMaterialProfile(config) {\n    var profile = config && config.materialProfile || {};\n    return {\n      totalThicknessM: Number(profile.totalThicknessM) || 0.0155,\n      surface: profile.surface || \"1/10-cut-pile\",\n      fiber: profile.fiber || \"polyamide\",\n      backing: profile.backing || \"Cosyback\",\n      yarnWeightGm2: Number(profile.yarnWeightGm2) || 1970,\n      totalWeightGm2: Number(profile.totalWeightGm2) || 3070,\n      pileTextureImageIndex: Number.isFinite(Number(profile.pileTextureImageIndex)) ? Number(profile.pileTextureImageIndex) : 1,\n      strictArAssets: profile.strictArAssets !== false\n    };\n  }\n\n  function isCordobaStrictConfig(config, state, qualityCode) {\n    var quality = normalizeCode(qualityCode || config && (config.qualityCode || config.qualityLabel) || state && state.qualityCode || \"\");\n    if (quality !== \"cordoba\") return false;\n    var profile = config && config.materialProfile || {};\n    return profile.strictArAssets !== false;\n  }\n\n  function isCordobaStrictSnapshot(snapshot) {\n    if (!snapshot) return false;\n    var quality = normalizeCode(snapshot.qualityCode || snapshot.qualityLabel || snapshot.handle || \"\");\n    return quality === \"cordoba\" && !!snapshot.strictExact;\n  }\n\n  function cordobaArRenderOptions(config, preview) {\n    var sourceWidth = optionNumber(config, \"arSourceImageWidth\", CORDOBA_STRICT_RENDER_TARGET_PX);\n    var textureWidth = optionNumber(config, \"arTextureImageWidth\", CORDOBA_STRICT_RENDER_TARGET_PX);\n    var pileUrl = pickCordobaPileTextureUrl(config);\n    return {\n      strictArAssets: true,\n      sourceImage: sizedShopifyImageUrl(pickPreviewBaseImage(config) || preview && preview.sourceImage, sourceWidth),\n      patternImage: sizedShopifyImageUrl(pileUrl || preview && preview.patternImage, textureWidth),\n      detailPatternImage: sizedShopifyImageUrl(pileUrl || preview && preview.detailPatternImage || preview && preview.patternImage, textureWidth),\n      detailPatternStrength: optionNumber(config, \"arDetailPatternStrength\", optionNumber(config, \"detailPatternStrength\", 0)),\n      textureRepeatX: optionNumber(config, \"arTextureRepeatX\", optionNumber(config, \"zoomTextureRepeatX\", optionNumber(config, \"textureRepeatX\", 16))),\n      textureRepeatY: optionNumber(config, \"arTextureRepeatY\", optionNumber(config, \"zoomTextureRepeatY\", optionNumber(config, \"textureRepeatY\", 23))),\n      textureMicroDetailStrength: optionNumber(config, \"arTextureMicroDetailStrength\", optionNumber(config, \"zoomTextureMicroDetailStrength\", optionNumber(config, \"textureMicroDetailStrength\", 0))),\n      textureMicroDetailLowPassRatio: optionNumber(config, \"arTextureMicroDetailLowPassRatio\", optionNumber(config, \"textureMicroDetailLowPassRatio\", 0.055)),\n      highResolutionImageWidth: Math.max(sourceWidth, textureWidth),\n      maxCanvasWidth: CORDOBA_STRICT_RENDER_TARGET_PX,\n      maxCanvasHeight: CORDOBA_STRICT_RENDER_TARGET_PX\n    };\n  }\n\n  function isAllowedProduct(api) {\n    if (window.__MASSIMO_AR_ALLOW_ALL__ === true) return true;\n    return !!ALLOWED_PRODUCT_HANDLES[currentProductHandle(api)];\n  }\n\n  function formatCm(value) {\n    var n = Number(value);\n    if (!Number.isFinite(n)) return \"\";\n    if (Math.abs(n - Math.round(n)) < 0.05) return String(Math.round(n));\n    return String(Math.round(n * 10) / 10).replace(\".\", \",\");\n  }\n\n  function normalizeShape(value) {\n    var shape = String(value || \"dikdortgen\").toLowerCase();\n    if (shape === \"daire\" || shape === \"circle\") return \"yuvarlak\";\n    if (shape === \"ellipse\") return \"oval\";\n    if (shape === \"organic\") return \"amorf\";\n    if (shape === \"amorf\" || shape === \"yuvarlak\" || shape === \"oval\") return shape;\n    return \"dikdortgen\";\n  }\n\n  function isAmorfShape(value) {\n    return normalizeShape(value) === \"amorf\";\n  }\n\n  function isCordobaPetalProduct(handle, quality, title, pattern) {\n    var handleCode = normalizeCode(handle);\n    var qualityCode = normalizeCode(quality);\n    var titleCode = normalizeCode(title);\n    var patternCode = normalizeCode(pattern);\n    return handleCode === \"massimo-carpet-cordoba-110\"\n      || (qualityCode === \"cordoba\" && patternCode === \"110\")\n      || (titleCode.indexOf(\"cordoba\") >= 0 && titleCode.indexOf(\"110\") >= 0);\n  }\n\n  function isCordobaPetalSnapshot(snapshot) {\n    if (!snapshot) return false;\n    return isCordobaPetalProduct(\n      snapshot.handle,\n      snapshot.qualityCode || snapshot.qualityLabel,\n      snapshot.title,\n      snapshot.patternCode\n    );\n  }\n\n  function displayedDesignShape(root, state, last) {\n    var summaryText = \"\";\n    var summaryNode = root && (\n      $(root, \"[data-massimo-summary]\")\n      || $(root, \".massimo-oo__summary\")\n      || $(root, \".massimo-oo__meta\")\n    );\n    if (summaryNode) summaryText = summaryNode.textContent || \"\";\n    if (!summaryText && root) summaryText = root.textContent || \"\";\n    var normalizedSummary = normalizeCode(summaryText);\n    if (normalizedSummary.indexOf(\"tasarim-amorf\") >= 0 || normalizedSummary.indexOf(\"amorf-orkide\") >= 0) return \"amorf\";\n    if (normalizedSummary.indexOf(\"tasarim-oval\") >= 0) return \"oval\";\n    if (normalizedSummary.indexOf(\"tasarim-yuvarlak\") >= 0) return \"yuvarlak\";\n    if (normalizedSummary.indexOf(\"tasarim-dikdortgen\") >= 0) return \"dikdortgen\";\n    var candidates = [\n      state && state.shapeType,\n      state && state.shape && state.shape.type,\n      last && last.shapeType,\n      last && last.shape && last.shape.type\n    ];\n    for (var i = 0; i < candidates.length; i++) {\n      var shape = normalizeShape(candidates[i]);\n      if (shape && shape !== \"dikdortgen\") return shape;\n    }\n    return \"\";\n  }\n\n  function shapeLabel(shape) {\n    var labels = {\n      dikdortgen: \"Dikd\u00F6rtgen\",\n      amorf: \"Amorf\",\n      yuvarlak: \"Yuvarlak\",\n      oval: \"Oval\"\n    };\n    return labels[normalizeShape(shape)] || labels.dikdortgen;\n  }\n\n  function finiteNumber(value, fallback) {\n    var n = Number(value);\n    return Number.isFinite(n) ? n : fallback;\n  }\n\n  function clampNumber(value, min, max) {\n    return Math.max(min, Math.min(max, finiteNumber(value, min)));\n  }\n\n  function normalizeShapePoints(points) {\n    if (!Array.isArray(points) || points.length < 3) return null;\n    var out = [];\n    points.forEach(function (point) {\n      var px = Array.isArray(point) ? Number(point[0]) : Number(point && point.x);\n      var py = Array.isArray(point) ? Number(point[1]) : Number(point && point.y);\n      if (!Number.isFinite(px) || !Number.isFinite(py)) return;\n      out.push([clampNumber(px, -0.25, 1.25), clampNumber(py, -0.25, 1.25)]);\n    });\n    return out.length >= 3 ? out : null;\n  }\n\n  function shapePointExtents(points) {\n    points = normalizeShapePoints(points);\n    if (!points) return { minX: -0.5, maxX: 0.5, minY: -0.5, maxY: 0.5, width: 1, height: 1 };\n    var minX = Infinity;\n    var maxX = -Infinity;\n    var minY = Infinity;\n    var maxY = -Infinity;\n    points.forEach(function (point) {\n      var x = finiteNumber(point[0], 0.5) - 0.5;\n      var y = finiteNumber(point[1], 0.5) - 0.5;\n      if (x < minX) minX = x;\n      if (x > maxX) maxX = x;\n      if (y < minY) minY = y;\n      if (y > maxY) maxY = y;\n    });\n    if (!isFinite(minX) || !isFinite(maxX) || !isFinite(minY) || !isFinite(maxY)) {\n      return { minX: -0.5, maxX: 0.5, minY: -0.5, maxY: 0.5, width: 1, height: 1 };\n    }\n    return {\n      minX: minX,\n      maxX: maxX,\n      minY: minY,\n      maxY: maxY,\n      width: Math.max(0.001, maxX - minX),\n      height: Math.max(0.001, maxY - minY)\n    };\n  }\n\n  function shapeRadiusAt(radii, angle) {\n    if (!Array.isArray(radii) || !radii.length) return 1;\n    var tau = Math.PI * 2;\n    var t = ((angle + tau) % tau) / tau * radii.length;\n    var i0 = Math.floor(t) % radii.length;\n    var i1 = (i0 + 1) % radii.length;\n    var f = t - Math.floor(t);\n    return finiteNumber(radii[i0], 1) * (1 - f) + finiteNumber(radii[i1], 1) * f;\n  }\n\n  function shapeUnitExtents(radii) {\n    var steps = 720;\n    var minX = Infinity;\n    var maxX = -Infinity;\n    var minY = Infinity;\n    var maxY = -Infinity;\n    for (var i = 0; i < steps; i++) {\n      var angle = (Math.PI * 2 * i) / steps;\n      var radial = shapeRadiusAt(radii, angle);\n      var x = Math.cos(angle) * radial;\n      var y = Math.sin(angle) * radial;\n      if (x < minX) minX = x;\n      if (x > maxX) maxX = x;\n      if (y < minY) minY = y;\n      if (y > maxY) maxY = y;\n    }\n    if (!isFinite(minX) || !isFinite(maxX) || !isFinite(minY) || !isFinite(maxY)) {\n      return { minX: -1, maxX: 1, minY: -1, maxY: 1, width: 2, height: 2 };\n    }\n    return {\n      minX: minX,\n      maxX: maxX,\n      minY: minY,\n      maxY: maxY,\n      width: Math.max(0.001, maxX - minX),\n      height: Math.max(0.001, maxY - minY)\n    };\n  }\n\n  function softenClosedPathPoints(points, factor, passes) {\n    if (!Array.isArray(points) || points.length < 3) return points;\n    var current = points.slice(0);\n    var f = clampNumber(factor, 0.04, 0.32);\n    var repeat = Math.max(0, Math.min(3, Math.round(finiteNumber(passes, 1))));\n    for (var pass = 0; pass < repeat; pass++) {\n      var next = [];\n      for (var i = 0; i < current.length; i++) {\n        var a = current[i];\n        var b = current[(i + 1) % current.length];\n        next.push({\n          x: a.x * (1 - f) + b.x * f,\n          y: a.y * (1 - f) + b.y * f\n        });\n        next.push({\n          x: a.x * f + b.x * (1 - f),\n          y: a.y * f + b.y * (1 - f)\n        });\n      }\n      current = next;\n    }\n    return current;\n  }\n\n  function normalizeShapeRadii(radii, minRadius, maxRadius) {\n    if (!Array.isArray(radii) || radii.length < 8) return null;\n    var min = finiteNumber(minRadius, 0.66);\n    var max = finiteNumber(maxRadius, 1.12);\n    return radii.map(function (radius) {\n      return clampNumber(radius, min, max);\n    });\n  }\n\n  function amorfPathPoints(shapePayload, width, height, flipY) {\n    shapePayload = shapePayload || {};\n    var normalized = normalizeShapePoints(shapePayload.points);\n    var points;\n    var ext;\n    var tension = normalized ? 0.82 : 0.78;\n\n    if (normalized) {\n      ext = shapePointExtents(normalized);\n      points = normalized.map(function (point) {\n        return { x: finiteNumber(point[0], 0.5) - 0.5, y: finiteNumber(point[1], 0.5) - 0.5 };\n      });\n    } else {\n      var radii = normalizeShapeRadii(shapePayload.radii, shapePayload.radiusMin, shapePayload.radiusMax);\n      if (!radii) return null;\n      ext = shapeUnitExtents(radii);\n      points = radii.map(function (radius, index) {\n        var angle = (index / radii.length) * Math.PI * 2;\n        var radial = clampNumber(radius, 0.66, 1.12);\n        return {\n          x: Math.cos(angle) * radial,\n          y: Math.sin(angle) * radial\n        };\n      });\n      points = softenClosedPathPoints(points, 0.18, 1);\n    }\n\n    var scaleX = width / Math.max(0.001, ext.width);\n    var scaleY = height / Math.max(0.001, ext.height);\n    var centerX = -((ext.minX + ext.maxX) / 2) * scaleX;\n    var centerY = -((ext.minY + ext.maxY) / 2) * scaleY;\n    return {\n      points: points.map(function (point) {\n        var x = centerX + point.x * scaleX;\n        var y = centerY + point.y * scaleY;\n        return { x: x, y: flipY ? -y : y };\n      }),\n      tension: tension\n    };\n  }\n\n  function silhouettePathPoints(snapshot, width, height) {\n    var points = snapshot && snapshot.arMask && snapshot.arMask.silhouettePoints;\n    if (!Array.isArray(points) || points.length < 3) return null;\n    return {\n      points: points.map(function (point) {\n        var nx = Array.isArray(point) ? finiteNumber(point[0], 0.5) : finiteNumber(point && point.nx, 0.5);\n        var ny = Array.isArray(point) ? finiteNumber(point[1], 0.5) : finiteNumber(point && point.ny, 0.5);\n        return {\n          x: (clampNumber(nx, -0.05, 1.05) - 0.5) * width,\n          y: (0.5 - clampNumber(ny, -0.05, 1.05)) * height\n        };\n      })\n    };\n  }\n\n  function amorfPresetPointCount(shapePayload) {\n    shapePayload = shapePayload || {};\n    var normalized = normalizeShapePoints(shapePayload.points);\n    if (normalized) return normalized.length;\n    var radii = normalizeShapeRadii(shapePayload.radii, shapePayload.radiusMin, shapePayload.radiusMax);\n    return radii ? radii.length : 0;\n  }\n\n  function appendSmoothCanvasPath(ctx, points, tension) {\n    if (!points || points.length < 3) return false;\n    var t = clampNumber(tension, 0.2, 1.15);\n    ctx.moveTo(points[0].x, points[0].y);\n    for (var i = 0; i < points.length; i++) {\n      var p0 = points[(i - 1 + points.length) % points.length];\n      var p1 = points[i];\n      var p2 = points[(i + 1) % points.length];\n      var p3 = points[(i + 2) % points.length];\n      var c1x = p1.x + (p2.x - p0.x) * t / 6;\n      var c1y = p1.y + (p2.y - p0.y) * t / 6;\n      var c2x = p2.x - (p3.x - p1.x) * t / 6;\n      var c2y = p2.y - (p3.y - p1.y) * t / 6;\n      ctx.bezierCurveTo(c1x, c1y, c2x, c2y, p2.x, p2.y);\n    }\n    ctx.closePath();\n    return true;\n  }\n\n  function appendSmoothThreePath(shape, points, tension) {\n    if (!points || points.length < 3) return false;\n    var t = clampNumber(tension, 0.2, 1.15);\n    shape.moveTo(points[0].x, points[0].y);\n    for (var i = 0; i < points.length; i++) {\n      var p0 = points[(i - 1 + points.length) % points.length];\n      var p1 = points[i];\n      var p2 = points[(i + 1) % points.length];\n      var p3 = points[(i + 2) % points.length];\n      var c1x = p1.x + (p2.x - p0.x) * t / 6;\n      var c1y = p1.y + (p2.y - p0.y) * t / 6;\n      var c2x = p2.x - (p3.x - p1.x) * t / 6;\n      var c2y = p2.y - (p3.y - p1.y) * t / 6;\n      shape.bezierCurveTo(c1x, c1y, c2x, c2y, p2.x, p2.y);\n    }\n    shape.closePath();\n    return true;\n  }\n\n  function appendLinearThreePath(shape, points) {\n    if (!points || points.length < 3) return false;\n    shape.moveTo(points[0].x, points[0].y);\n    for (var i = 1; i < points.length; i++) {\n      shape.lineTo(points[i].x, points[i].y);\n    }\n    shape.closePath();\n    return true;\n  }\n\n  function resolveShapePayload(state, last) {\n    var stateShape = state && state.shape || {};\n    var lastShape = last && last.shape || {};\n    var shape = Object.assign({}, lastShape, stateShape);\n    if (!shape.type && state && state.shapeType) shape.type = state.shapeType;\n    if (!shape.presetKey && state && state.shapePresetKey) shape.presetKey = state.shapePresetKey;\n    if (!shape.presetLabel && state && state.shapePresetLabel) shape.presetLabel = state.shapePresetLabel;\n    if ((!Array.isArray(shape.points) || shape.points.length < 3) && Array.isArray(lastShape.points)) {\n      shape.points = lastShape.points;\n    }\n    if ((!Array.isArray(shape.radii) || shape.radii.length < 8) && Array.isArray(lastShape.radii)) {\n      shape.radii = lastShape.radii;\n    }\n    if ((!Array.isArray(shape.radii) || shape.radii.length < 8) && state && Array.isArray(state.shapeRadii)) {\n      shape.radii = state.shapeRadii;\n    }\n    return shape;\n  }\n\n  function isMobile() {\n    return /iPhone|iPad|iPod|Android/i.test(navigator.userAgent || \"\");\n  }\n\n  function isIOS() {\n    return /iPhone|iPad|iPod/i.test(navigator.userAgent || \"\");\n  }\n\n  function isAndroid() {\n    return /Android/i.test(navigator.userAgent || \"\");\n  }\n\n  function clonePlain(value) {\n    if (!value) return {};\n    try { return JSON.parse(JSON.stringify(value)); }\n    catch (err) { return Object.assign({}, value); }\n  }\n\n  function embeddedConfig(root) {\n    if (root && root.__massimoConfig) return clonePlain(root.__massimoConfig);\n    var node = document.querySelector(\"script[data-massimo-config]\");\n    if (!node) return {};\n    try { return JSON.parse(node.textContent || \"{}\"); }\n    catch (err) { return {}; }\n  }\n\n  function previewCanvas(root) {\n    return root && (\n      $(root, \"[data-massimo-preview-canvas]\")\n      || $(root, \"canvas.massimo-oo__canvas\")\n      || $(\"canvas[data-massimo-preview-canvas]\")\n    );\n  }\n\n  function cloneCanvasElement(canvas, maxSide) {\n    if (!canvas || !canvas.width || !canvas.height) return null;\n    var out = document.createElement(\"canvas\");\n    var limit = Number(maxSide) || 0;\n    var scale = limit > 0 ? Math.min(1, limit / Math.max(canvas.width, canvas.height)) : 1;\n    out.width = Math.max(1, Math.round(canvas.width * scale));\n    out.height = Math.max(1, Math.round(canvas.height * scale));\n    var ctx = out.getContext(\"2d\");\n    ctx.imageSmoothingEnabled = true;\n    ctx.imageSmoothingQuality = \"high\";\n    ctx.drawImage(canvas, 0, 0, out.width, out.height);\n    return out;\n  }\n\n  function isLasis3821State(state, config) {\n    var quality = normalizeCode(state && state.qualityCode || config && config.qualityCode || \"\");\n    var pattern = normalizeCode(state && state.patternCode || config && config.patternCode || \"\");\n    return quality === \"lasis\" && pattern === \"3821\";\n  }\n\n  function softenLasisArCanvas(canvas, state, config) {\n    if (!canvas || !canvas.width || !canvas.height || !isLasis3821State(state, config)) return canvas;\n    return canvas;\n  }\n\n  function liveApiFallback() {\n    var root = currentRoot();\n    var canvas = previewCanvas(root);\n    var last = window.__MASSIMO_OZEL_OLCU_LAST__ || null;\n    if (!root || !canvas) return null;\n\n    function readConfig() {\n      return embeddedConfig(root);\n    }\n\n    function liveTemplateShapePayload(shapeType, widthCm, lengthCm, currentLast) {\n      if (shapeType !== \"amorf\" || !currentLast) return null;\n      var candidates = [\n        currentLast.shapePreset,\n        currentLast.shapePresetKey,\n        currentLast.designTemplateId,\n        currentLast.design && currentLast.design.templateId,\n        currentLast.shape && currentLast.shape.presetKey\n      ];\n      for (var i = 0; i < candidates.length; i++) {\n        var key = normalizeCode(candidates[i]);\n        if (!key) continue;\n        var preset = LIVE_TEMPLATE_SHAPE_PRESETS[key];\n        if (!preset) continue;\n        return {\n          type: \"amorf\",\n          widthCm: widthCm,\n          lengthCm: lengthCm,\n          presetKey: key,\n          presetLabel: preset.label || key,\n          points: preset.points || null,\n          radii: Array.isArray(preset.radii) ? preset.radii.slice() : null,\n          radiusMin: preset.radiusMin,\n          radiusMax: preset.radiusMax,\n          templateDerived: true\n        };\n      }\n      return null;\n    }\n\n    function liveShapePayload(shapeType, widthCm, lengthCm, currentLast) {\n      var lastShape = currentLast.shape || {};\n      if (shapeType === \"amorf\" && (!lastShape.points && !lastShape.radii)) {\n        var templatePayload = liveTemplateShapePayload(shapeType, widthCm, lengthCm, currentLast);\n        if (templatePayload) return templatePayload;\n        var presets = window.MassimoOzelOlcuShape && window.MassimoOzelOlcuShape.getPresetList\n          ? window.MassimoOzelOlcuShape.getPresetList() || []\n          : [];\n        var presetKey = currentLast.shapePreset || \"\";\n        var preset = presets.filter(function (item) { return item && item.key === presetKey; })[0] || presets[0] || {};\n        return {\n          type: shapeType,\n          widthCm: widthCm,\n          lengthCm: lengthCm,\n          presetKey: preset.key || presetKey || \"organik\",\n          presetLabel: preset.label || presetKey || \"Organik\",\n          points: preset.points || null,\n          radii: preset.radii || null\n        };\n      }\n      return {\n        type: shapeType,\n        widthCm: widthCm,\n        lengthCm: lengthCm,\n        presetKey: currentLast.shapePreset || lastShape.presetKey || \"\",\n        presetLabel: currentLast.shapePreset || lastShape.presetLabel || \"\",\n        points: lastShape.points || null,\n        radii: lastShape.radii || null\n      };\n    }\n\n    function readState() {\n      var config = readConfig();\n      var currentLast = window.__MASSIMO_OZEL_OLCU_LAST__ || {};\n      var design = currentLast.design || {};\n      var bounds = currentLast.bounds || {};\n      var activeCanvas = previewCanvas(root) || canvas;\n      var widthCm = Number(design.widthCm || currentLast.widthCm || config.defaultWidthCm || 160);\n      var lengthCm = Number(design.lengthCm || currentLast.lengthCm || config.defaultLengthCm || 230);\n      var shapeType = normalizeShape((root.dataset && root.dataset.shape) || currentLast.shapeType || \"dikdortgen\");\n      var edgeType = (root.dataset && root.dataset.edge) || currentLast.edgeType || config.defaultEdge || \"biye\";\n      var shape = liveShapePayload(shapeType, widthCm, lengthCm, currentLast);\n      var selectedFabric = currentLast.fabric || currentLast.fabricSummary || null;\n      var fabricSummary = typeof selectedFabric === \"object\" && selectedFabric\n        ? {\n          id: selectedFabric.id || selectedFabric.key || selectedFabric.code || currentLast.fabricId || \"\",\n          label: selectedFabric.label || currentLast.fabricLabel || selectedFabric.id || \"\",\n          image: selectedFabric.image || currentLast.fabricImage || \"\",\n          color: selectedFabric.color || currentLast.fabricColor || \"\"\n        }\n        : {\n          id: String(selectedFabric || currentLast.fabricId || \"\"),\n          label: String(currentLast.fabricLabel || selectedFabric || \"\"),\n          image: String(currentLast.fabricImage || \"\"),\n          color: String(currentLast.fabricColor || \"\")\n        };\n      var geometry = {\n        boundsPx: { x: 0, y: 0, w: activeCanvas.width, h: activeCanvas.height },\n        shapeBoundsPx: {\n          x: Number(bounds.x) || 0,\n          y: Number(bounds.y) || 0,\n          w: Number(bounds.w) || activeCanvas.width,\n          h: Number(bounds.h) || activeCanvas.height\n        },\n        visibleWidthCm: widthCm,\n        visibleLengthCm: lengthCm,\n        orderWidthCm: widthCm,\n        orderLengthCm: lengthCm\n      };\n      return {\n        shapeType: shapeType,\n        edgeType: edgeType,\n        edgeLabel: config.edgeTypes && config.edgeTypes[edgeType] && config.edgeTypes[edgeType].label || edgeType,\n        width: widthCm,\n        length: lengthCm,\n        qualityCode: config.qualityCode || config.quality || \"\",\n        qualityLabel: config.qualityLabel || config.qualityCode || config.quality || \"\",\n        patternCode: currentLast.patternCode || design.patternCode || currentLast.pattern || config.patternCode || config.pattern || \"\",\n        fabricSummary: fabricSummary,\n        outputGeometry: geometry,\n        shape: shape\n      };\n    }\n\n    function readLast() {\n      var state = readState();\n      var currentLast = clonePlain(window.__MASSIMO_OZEL_OLCU_LAST__ || {});\n      currentLast.outputGeometry = currentLast.outputGeometry || state.outputGeometry;\n      currentLast.shapeType = currentLast.shapeType || state.shapeType;\n      currentLast.edgeType = currentLast.edgeType || state.edgeType;\n      currentLast.shape = currentLast.shape || state.shape;\n      return currentLast;\n    }\n\n    return {\n      version: \"live-fallback\",\n      getRoot: function () { return root; },\n      getConfig: readConfig,\n      getState: readState,\n      getPreviewCanvas: function () { return previewCanvas(root) || canvas; },\n      getLastRender: readLast,\n      ensurePreviewFresh: function () { return Promise.resolve(readLast()); },\n      getArPreviewCanvas: function () {\n        var activeCanvas = previewCanvas(root) || canvas;\n        var state = readState();\n        var preview = root.__massimoPreview || null;\n        var config = readConfig();\n        var strictCordoba = isCordobaStrictConfig(config, state, config.qualityCode || state.qualityCode);\n        var liveProfile = null;\n        if (!strictCordoba) {\n          liveProfile = assertLiveCalibrationForAr({\n            config: config,\n            state: state,\n            handle: currentProductHandle(null),\n            title: document.title,\n            qualityCode: config.qualityCode || state.qualityCode,\n            patternCode: config.patternCode || state.patternCode\n          });\n        }\n        if (strictCordoba && preview && typeof preview.renderArSurface === \"function\") {\n          preview.shape = state.shape;\n          preview.edgeType = state.edgeType;\n          return preview.renderArSurface(cordobaArRenderOptions(config, preview)).then(function (render) {\n            var renderCanvas = render && render.canvas ? render.canvas : null;\n            if (!renderCanvas) throw new Error(\"Cordoba strict AR temiz render \u00FCretemedi.\");\n            return Object.assign({}, render, {\n              fallbackUsed: false,\n              sourceMode: render.sourceMode || \"massimo-preview-transparent-ar\",\n              matchesDressingRender: true,\n              strictExact: true,\n              canvasWidth: renderCanvas.width || 0,\n              canvasHeight: renderCanvas.height || 0,\n              renderTargetSide: Math.max(renderCanvas.width || 0, renderCanvas.height || 0),\n              requestedImageWidth: CORDOBA_STRICT_RENDER_TARGET_PX\n            });\n          });\n        }\n        if (isAmorfShape(state.shapeType) && !(liveProfile && liveProfile.strictLiveCalibration)) {\n          var renderCanvas = softenLasisArCanvas(cloneCanvasElement(activeCanvas, LIVE_CANVAS_TARGET_PX), state, config);\n          return Promise.resolve({\n            canvas: renderCanvas,\n            last: readLast(),\n            fallbackUsed: false,\n            sourceMode: \"live-visible-preview-canvas\",\n            matchesDressingRender: true,\n            canvasWidth: renderCanvas.width,\n            canvasHeight: renderCanvas.height,\n            renderTargetSide: Math.max(renderCanvas.width, renderCanvas.height),\n            requestedImageWidth: Math.max(renderCanvas.width, renderCanvas.height)\n          });\n        }\n        if (preview && typeof preview.renderArSurface === \"function\") {\n          preview.shape = state.shape;\n          preview.edgeType = state.edgeType;\n          return preview.renderArSurface(arRenderOptionsForProfile(config, state, preview)).then(function (render) {\n            var renderCanvas = softenLasisArCanvas(render && render.canvas ? render.canvas : cloneCanvasElement(activeCanvas), state, config);\n            var renderLast = render && render.last ? render.last : readLast();\n            renderLast.outputGeometry = renderLast.outputGeometry || state.outputGeometry;\n            renderLast.shape = renderLast.shape || state.shape;\n            renderLast.shapeType = state.shapeType;\n            renderLast.edgeType = state.edgeType;\n            return {\n              canvas: renderCanvas,\n              last: renderLast,\n              fallbackUsed: false,\n              sourceMode: \"live-render-ar-surface\",\n              matchesDressingRender: true,\n              canvasWidth: renderCanvas && renderCanvas.width || activeCanvas.width,\n              canvasHeight: renderCanvas && renderCanvas.height || activeCanvas.height,\n              renderTargetSide: Math.max(activeCanvas.width, activeCanvas.height),\n              requestedImageWidth: Math.max(activeCanvas.width, activeCanvas.height)\n            };\n          });\n        }\n        if (liveProfile && liveProfile.strictLiveCalibration) {\n          return Promise.reject(new Error(\"Strict canli AR kalibrasyonu renderArSurface gerektirir; giydirme canvas fallback kullanilmadi.\"));\n        }\n        return Promise.resolve({\n          canvas: softenLasisArCanvas(cloneCanvasElement(activeCanvas), state, config),\n          last: readLast(),\n          fallbackUsed: false,\n          sourceMode: \"live-preview-canvas\",\n          matchesDressingRender: true,\n          canvasWidth: activeCanvas.width,\n          canvasHeight: activeCanvas.height,\n          renderTargetSide: Math.max(activeCanvas.width, activeCanvas.height),\n          requestedImageWidth: Math.max(activeCanvas.width, activeCanvas.height)\n        });\n      }\n    };\n  }\n\n  function getApi() {\n    return window.__MASSIMO_OZEL_OLCU_API__ || window.MassimoOzelOlcuUI || liveApiFallback();\n  }\n\n  function waitForApi(timeoutMs) {\n    var start = Date.now();\n    return new Promise(function (resolve) {\n      (function tick() {\n        var api = getApi();\n        if (api && api.getPreviewCanvas && api.getState) {\n          resolve(api);\n          return;\n        }\n        if (Date.now() - start > timeoutMs) {\n          resolve(api || null);\n          return;\n        }\n        setTimeout(tick, 80);\n      })();\n    });\n  }\n\n  function injectStyles() {\n    if (document.getElementById(\"massimo-ar-css\")) return;\n    var style = document.createElement(\"style\");\n    style.id = \"massimo-ar-css\";\n    style.textContent = [\n      \".massimo-ar-btn{display:flex;align-items:center;justify-content:center;gap:10px;width:100%;margin-top:10px;padding:14px 16px;border:1px solid #171717;background:#171717;color:#fff;border-radius:8px;font:inherit;font-size:14px;font-weight:700;line-height:1.2;cursor:pointer;transition:transform .15s ease,box-shadow .2s ease,background .2s ease;}\",\n      \".massimo-ar-btn:hover{transform:translateY(-1px);box-shadow:0 10px 24px rgba(0,0,0,.18);background:#242424;}\",\n      \".massimo-ar-btn:active{transform:translateY(0);box-shadow:none;}\",\n      \".massimo-ar-btn[disabled]{opacity:.55;cursor:wait;transform:none;box-shadow:none;}\",\n      \".massimo-ar-btn svg{width:19px;height:19px;flex:0 0 auto;}\",\n      \".massimo-ar-btn__text{display:flex;flex-direction:column;align-items:flex-start;gap:2px;min-width:0;}\",\n      \".massimo-ar-btn__text strong{font-size:14px;font-weight:800;letter-spacing:0;}\",\n      \".massimo-ar-btn__text span{font-size:11px;font-weight:600;color:rgba(255,255,255,.72);letter-spacing:0;}\",\n      \".massimo-ar-modal{position:fixed;inset:0;z-index:100020;display:none;align-items:center;justify-content:center;padding:20px;background:rgba(8,8,10,.76);backdrop-filter:blur(8px);}\",\n      \".massimo-ar-modal.is-open{display:flex;}\",\n      \".massimo-ar-dialog{position:relative;width:min(1120px,calc(100vw - 40px));max-height:calc(100dvh - 32px);overflow:auto;background:#fff;color:#171717;border-radius:12px;box-shadow:0 28px 80px rgba(0,0,0,.42);}\",\n      \".massimo-ar-close{position:absolute;top:12px;right:12px;z-index:4;width:36px;height:36px;border:1px solid rgba(0,0,0,.1);border-radius:50%;background:rgba(255,255,255,.9);color:#171717;font-size:22px;line-height:1;cursor:pointer;}\",\n      \".massimo-ar-head{padding:22px 26px 12px;border-bottom:1px solid #ece8df;}\",\n      \".massimo-ar-kicker{font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:#9b7a31;margin-bottom:5px;}\",\n      \".massimo-ar-title{margin:0;font-size:21px;font-weight:850;letter-spacing:0;color:#171717;}\",\n      \".massimo-ar-sub{margin:5px 42px 0 0;font-size:13px;line-height:1.45;color:#626262;}\",\n      \".massimo-ar-body{padding:16px 24px 22px;}\",\n      \".massimo-ar-work{display:grid;grid-template-columns:minmax(0,720px) minmax(260px,320px);gap:16px;align-items:start;justify-content:center;}\",\n      \".massimo-ar-main{display:flex;min-width:0;flex-direction:column;gap:12px;}\",\n      \".massimo-ar-stage{position:relative;height:clamp(240px,34vh,360px);min-height:0;border:1px solid #e8e3d8;border-radius:8px;overflow:hidden;background:#f7f4ed;display:flex;align-items:center;justify-content:center;}\",\n      \".massimo-ar-stage--portrait{height:clamp(340px,48vh,500px);}\",\n      \".massimo-ar-stage img{width:auto;height:auto;max-width:97%;max-height:97%;object-fit:contain;display:block;filter:drop-shadow(0 10px 18px rgba(40,35,28,.18));}\",\n      \".massimo-ar-stage video{width:100%;height:100%;object-fit:cover;display:block;background:#111;}\",\n      \".massimo-ar-stage--split{display:grid;grid-template-columns:1.05fr .95fr;gap:8px;padding:8px;align-items:stretch;}\",\n      \".massimo-ar-stage--compact{height:clamp(160px,22vh,220px);min-height:0;margin-bottom:0;}\",\n      \".massimo-ar-stage--compact.massimo-ar-stage--split{height:clamp(160px,22vh,220px);min-height:0;}\",\n      \".massimo-ar-stage__panel{position:relative;min-width:0;height:100%;min-height:0;overflow:hidden;border-radius:7px;background:#fff;box-shadow:inset 0 0 0 1px rgba(0,0,0,.06);}\",\n      \".massimo-ar-stage--compact .massimo-ar-stage__panel{min-height:0;}\",\n      \".massimo-ar-stage__panel--video{background:#111;}\",\n      \".massimo-ar-stage__panel--rug{display:flex;align-items:center;justify-content:center;background:linear-gradient(145deg,#fbfaf6,#efe9de);}\",\n      \".massimo-ar-stage__panel--rug img{width:auto;height:auto;max-width:94%;max-height:94%;object-fit:contain;padding:0;filter:drop-shadow(0 12px 20px rgba(0,0,0,.16));}\",\n      \".massimo-ar-stage__label{position:absolute;left:10px;top:10px;z-index:2;padding:6px 8px;border-radius:999px;background:rgba(255,255,255,.88);color:#171717;font-size:10px;font-weight:850;letter-spacing:.05em;text-transform:uppercase;box-shadow:0 8px 22px rgba(0,0,0,.12);}\",\n      \".massimo-ar-stage__panel--video .massimo-ar-stage__label{background:rgba(17,17,17,.62);color:#fff;}\",\n      \".massimo-ar-stage__overlay{position:absolute;left:14px;right:14px;bottom:14px;display:flex;align-items:center;gap:10px;padding:11px 12px;border-radius:8px;background:rgba(255,255,255,.9);box-shadow:0 10px 30px rgba(0,0,0,.12);font-size:13px;color:#333;}\",\n      \".massimo-ar-spin{width:22px;height:22px;border-radius:50%;border:3px solid rgba(155,122,49,.2);border-top-color:#9b7a31;animation:massimo-ar-spin .8s linear infinite;flex:0 0 auto;}\",\n      \".massimo-ar-loading{display:flex;align-items:center;gap:10px;padding:12px 13px;border:1px solid #eee8dd;border-radius:8px;background:#fbfaf7;color:#333;font-size:13px;line-height:1.35;}\",\n      \"@keyframes massimo-ar-spin{to{transform:rotate(360deg);}}\",\n      \".massimo-ar-side{display:flex;flex-direction:column;gap:12px;}\",\n      \".massimo-ar-cards{display:grid;grid-template-columns:1fr 1fr;gap:10px;}\",\n      \".massimo-ar-card{border:1px solid #eee8dd;border-radius:8px;background:#fff;padding:12px;min-height:76px;}\",\n      \".massimo-ar-card span{display:block;margin-bottom:4px;font-size:10px;font-weight:800;letter-spacing:.07em;text-transform:uppercase;color:#9b7a31;}\",\n      \".massimo-ar-card strong{display:block;font-size:14px;font-weight:800;color:#171717;line-height:1.25;}\",\n      \".massimo-ar-card em{display:block;margin-top:4px;font-style:normal;font-size:12px;line-height:1.35;color:#666;}\",\n      \".massimo-ar-note{border-radius:8px;background:#f6f3ed;padding:13px 14px;font-size:13px;line-height:1.45;color:#4c463b;}\",\n      \".massimo-ar-error{border:1px solid #f0b4a9;background:#fff4f1;color:#8f2414;border-radius:8px;padding:14px 15px;font-size:13px;line-height:1.45;}\",\n      \".massimo-ar-actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:12px;}\",\n      \".massimo-ar-action{display:inline-flex;align-items:center;justify-content:center;min-height:44px;padding:12px 16px;border-radius:8px;border:1px solid #171717;background:#171717;color:#fff;font-size:14px;font-weight:800;text-decoration:none;cursor:pointer;}\",\n      \".massimo-ar-action--light{background:#fff;color:#171717;border-color:#d9d0c0;}\",\n      \".massimo-ar-model-wrap{position:relative;width:100%;}\",\n      \".massimo-ar-modal model-viewer.massimo-ar-model{display:block!important;position:relative!important;width:100%!important;height:clamp(360px,52vh,560px)!important;min-height:340px!important;overflow:visible!important;pointer-events:auto!important;background:linear-gradient(145deg,#fbfaf6,#eee5d7)!important;border:1px solid #e8e3d8;border-radius:8px;box-shadow:inset 0 1px 0 rgba(255,255,255,.8);}\",\n      \".massimo-ar-model-wrap--flat-preview .massimo-ar-model{opacity:1;pointer-events:auto;}\",\n      \".massimo-ar-flat-preview{position:absolute;inset:0;z-index:2;display:flex;align-items:center;justify-content:center;overflow:hidden;border:1px solid #e8e3d8;border-radius:8px;background:#f7f4ed;pointer-events:none;}\",\n      \".massimo-ar-flat-preview img{display:block;width:auto;height:auto;max-width:96%;max-height:96%;object-fit:contain;filter:drop-shadow(0 12px 22px rgba(0,0,0,.16));}\",\n      \".massimo-ar-qr{display:flex;flex-direction:column;gap:10px;align-items:flex-start;margin-top:0;padding:14px;border:1px solid #eee8dd;border-radius:8px;background:#fbfaf7;}\",\n      \".massimo-ar-qr img{width:132px;height:132px;flex:0 0 auto;align-self:center;border:1px solid #eee;background:#fff;border-radius:6px;padding:7px;}\",\n      \".massimo-ar-qr strong{display:block;margin-bottom:4px;font-size:14px;color:#171717;}\",\n      \".massimo-ar-qr p{margin:0;font-size:13px;line-height:1.45;color:#565656;}\",\n      \".massimo-ar-foot{margin-top:9px;font-size:11px;line-height:1.35;color:#777;text-align:center;}\",\n      \"@media(max-width:760px){.massimo-ar-modal{padding:0;align-items:flex-end;}.massimo-ar-dialog{width:100%;max-height:100dvh;border-radius:12px 12px 0 0;}.massimo-ar-close{top:10px;right:10px;}.massimo-ar-head{padding:16px 16px 9px;}.massimo-ar-title{font-size:19px;}.massimo-ar-sub{margin-right:38px;font-size:12px;}.massimo-ar-body{padding:10px 12px calc(14px + env(safe-area-inset-bottom));}.massimo-ar-work{display:block;}.massimo-ar-stage{min-height:236px;margin-bottom:10px;}.massimo-ar-stage--portrait{height:min(52vh,440px);min-height:320px;}.massimo-ar-stage--split{grid-template-columns:1fr .88fr;gap:6px;padding:6px;min-height:236px;}.massimo-ar-stage--compact,.massimo-ar-stage--compact.massimo-ar-stage--split{min-height:188px;}.massimo-ar-stage__panel{min-height:224px;border-radius:7px;}.massimo-ar-stage--compact .massimo-ar-stage__panel{min-height:176px;}.massimo-ar-stage__label{left:7px;top:7px;padding:5px 7px;font-size:9px;}.massimo-ar-stage__overlay{left:8px;right:8px;bottom:8px;padding:8px 9px;font-size:12px;}.massimo-ar-actions{position:sticky;bottom:0;z-index:3;margin-top:10px;padding-top:8px;background:linear-gradient(to bottom,rgba(255,255,255,0),#fff 34%);}.massimo-ar-action{width:100%;min-height:48px;}.massimo-ar-cards{grid-template-columns:1fr 1fr;gap:8px;}.massimo-ar-card{min-height:66px;padding:10px;}.massimo-ar-card strong{font-size:13px;}.massimo-ar-card em{font-size:11px;}.massimo-ar-note{font-size:12px;padding:11px 12px;}.massimo-ar-modal model-viewer.massimo-ar-model{height:min(58vh,520px)!important;min-height:340px!important;}.massimo-ar-qr{display:none;}}\",\n      \"@media(max-width:390px){.massimo-ar-stage--split{grid-template-columns:1fr .82fr;}.massimo-ar-stage{min-height:220px;}.massimo-ar-stage__panel{min-height:208px;}.massimo-ar-cards{grid-template-columns:1fr;}.massimo-ar-modal model-viewer.massimo-ar-model{height:min(52vh,430px)!important;min-height:300px!important;}}\"\n    ].join(\"\");\n    document.head.appendChild(style);\n  }\n\n  function arButtonSubtitle() {\n    var root = currentRoot();\n    var config = embeddedConfig(root);\n    var quality = normalizeCode(config && (config.qualityCode || config.qualityLabel || config.handle) || location.pathname || \"\");\n    if (quality.indexOf(\"cordoba\") >= 0) return \"Cordoba 4K doku \u00B7 1:1 AR\";\n    if (quality.indexOf(\"lasis\") >= 0) return \"Lasis doku \u00B7 1:1 AR\";\n    return \"Se\u00E7ili doku \u00B7 1:1 AR\";\n  }\n\n  function injectButton() {\n    var root = currentRoot();\n    if (!root) return false;\n    if ($(root, \"[data-massimo-ar-button]\")) return true;\n    var anchor = $(root, \"[data-massimo-save]\") || $(root, \"[data-massimo-add]\");\n    if (!anchor) return false;\n    var btn = document.createElement(\"button\");\n    btn.type = \"button\";\n    btn.className = \"massimo-ar-btn\";\n    btn.setAttribute(\"data-massimo-ar-button\", \"\");\n    btn.innerHTML = [\n      '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">',\n      '<path d=\"M12 3 4.5 7.2 12 11.4l7.5-4.2L12 3Z\"></path>',\n      '<path d=\"M4.5 7.2v8.5L12 20l7.5-4.3V7.2\"></path>',\n      '<path d=\"M12 11.4V20\"></path>',\n      '</svg>',\n      '<span class=\"massimo-ar-btn__text\"><strong>AR - Hal\u0131y\u0131 Odan\u0131zda G\u00F6r</strong><span>' + escapeHtml(arButtonSubtitle()) + '</span></span>'\n    ].join(\"\");\n    btn.addEventListener(\"click\", handleArButtonClick);\n    anchor.insertAdjacentElement(\"afterend\", btn);\n    return true;\n  }\n\n  function handleArButtonClick(event) {\n    if (event && event.preventDefault) event.preventDefault();\n    onArClick();\n  }\n\n  function scheduleButtonInject(delayMs) {\n    if (buttonInjectTimer) clearTimeout(buttonInjectTimer);\n    buttonInjectTimer = setTimeout(function () {\n      buttonInjectTimer = null;\n      var ok = injectButton();\n      if (!ok && Date.now() < buttonRetryUntil) scheduleButtonInject(280);\n    }, delayMs || 80);\n  }\n\n  function bindDelegatedClick() {\n    if (delegatedClickBound) return;\n    delegatedClickBound = true;\n    document.addEventListener(\"click\", function (event) {\n      var target = event.target && event.target.closest ? event.target.closest(\"[data-massimo-ar-button]\") : null;\n      var root = target && target.closest ? target.closest(\"[data-massimo-ozel-olcu]\") : currentRoot();\n      if (!target || !root) return;\n      if (!rootNode || !document.documentElement.contains(rootNode)) rootNode = root;\n      handleArButtonClick(event);\n    });\n  }\n\n  function observeButtonSlot() {\n    var root = currentRoot();\n    if (!root || !window.MutationObserver) return;\n    if (buttonObserver && buttonObserver.__massimoRoot !== root) {\n      buttonObserver.disconnect();\n      buttonObserver = null;\n    }\n    if (buttonObserver) return;\n    buttonObserver = new MutationObserver(scheduleButtonInject);\n    buttonObserver.__massimoRoot = root;\n    buttonObserver.observe(root, { childList: true, subtree: true });\n  }\n\n  function ensureModal() {\n    var modal = document.getElementById(\"massimo-ar-modal\");\n    if (modal) return modal;\n    modal = document.createElement(\"div\");\n    modal.id = \"massimo-ar-modal\";\n    modal.className = \"massimo-ar-modal\";\n    modal.innerHTML = [\n      '<div class=\"massimo-ar-dialog\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"massimo-ar-title\">',\n      '<button type=\"button\" class=\"massimo-ar-close\" data-massimo-ar-close aria-label=\"Kapat\">&times;</button>',\n      '<div class=\"massimo-ar-head\">',\n      '<div class=\"massimo-ar-kicker\">Massimo AR</div>',\n      '<h2 class=\"massimo-ar-title\" id=\"massimo-ar-title\">Hal\u0131y\u0131 Evinizde G\u00F6r\u00FCn</h2>',\n      '<p class=\"massimo-ar-sub\">Se\u00E7ti\u011Finiz Massimo hal\u0131y\u0131 telefon kameras\u0131yla 1:1 \u00F6l\u00E7ekte zemine yerle\u015Ftirin.</p>',\n      '</div>',\n      '<div class=\"massimo-ar-body\" id=\"massimo-ar-body\"></div>',\n      '</div>'\n    ].join(\"\");\n    document.body.appendChild(modal);\n    modal.addEventListener(\"click\", function (event) {\n      if (event.target === modal) closeModal();\n    });\n    $(modal, \"[data-massimo-ar-close]\").addEventListener(\"click\", closeModal);\n    if (lastModalBodyHtml) {\n      var body = $(modal, \"#massimo-ar-body\");\n      if (body) body.innerHTML = lastModalBodyHtml;\n    }\n    return modal;\n  }\n\n  function startModalObserver() {\n    if (modalObserver || !window.MutationObserver) return;\n    modalObserver = new MutationObserver(function () {\n      if (!document.documentElement.classList.contains(\"massimo-ar-open\")) return;\n      if (document.getElementById(\"massimo-ar-modal\")) return;\n      ensureModal().classList.add(\"is-open\");\n    });\n    modalObserver.observe(document.documentElement, { childList: true, subtree: true });\n  }\n\n  function openModal() {\n    startModalObserver();\n    ensureModal().classList.add(\"is-open\");\n    document.documentElement.classList.add(\"massimo-ar-open\");\n  }\n\n  function closeModal() {\n    var modal = document.getElementById(\"massimo-ar-modal\");\n    if (modal) modal.classList.remove(\"is-open\");\n    document.documentElement.classList.remove(\"massimo-ar-open\");\n  }\n\n  function bodyEl() {\n    ensureModal();\n    return document.getElementById(\"massimo-ar-body\");\n  }\n\n  function playModalVideos() {\n    setTimeout(function () {\n      Array.prototype.slice.call(document.querySelectorAll(\"#massimo-ar-modal video\")).forEach(function (video) {\n        try {\n          video.muted = true;\n          video.playsInline = true;\n          var promise = video.play && video.play();\n          if (promise && promise.catch) promise.catch(function () {});\n        } catch (err) {}\n      });\n    }, 30);\n  }\n\n  function setBody(html) {\n    lastModalBodyHtml = html || \"\";\n    var body = bodyEl();\n    if (body) body.innerHTML = html;\n    playModalVideos();\n  }\n\n  function isPortraitStageSnapshot(snapshot) {\n    if (!snapshot) return false;\n    var width = Number(snapshot.widthCm || snapshot.visibleWidthCm || 0);\n    var length = Number(snapshot.lengthCm || snapshot.visibleLengthCm || 0);\n    if (!Number.isFinite(width) || !Number.isFinite(length) || width <= 0 || length <= 0) return false;\n    if (normalizeShape(snapshot.shapeType) === \"yuvarlak\") return false;\n    return length > width * 1.12;\n  }\n\n  function stageMediaHtml(snapshot, compact) {\n    var videos = resolveProductVideos(snapshot);\n    var preview = snapshot && snapshot.previewDataUrl ? snapshot.previewDataUrl : \"\";\n    var stageClass = \"massimo-ar-stage\" + (compact ? \" massimo-ar-stage--compact\" : \"\");\n    if (!compact && isPortraitStageSnapshot(snapshot)) stageClass += \" massimo-ar-stage--portrait\";\n    if (videos.length && preview) {\n      return [\n        '<div class=\"' + stageClass + ' massimo-ar-stage--split\">',\n        '<div class=\"massimo-ar-stage__panel massimo-ar-stage__panel--video\">',\n        '<span class=\"massimo-ar-stage__label\">\u00DCr\u00FCn Videosu</span>',\n        '<video src=\"' + escapeHtml(videos[0]) + '\" autoplay muted loop playsinline preload=\"auto\" controlslist=\"nodownload noplaybackrate\" disablepictureinpicture></video>',\n        '</div>',\n      '<div class=\"massimo-ar-stage__panel massimo-ar-stage__panel--rug\">',\n      '<span class=\"massimo-ar-stage__label\">Se\u00E7ti\u011Finiz Hal\u0131</span>',\n      '<img src=\"' + escapeHtml(preview) + '\" alt=\"Tasarlad\u0131\u011F\u0131n\u0131z Massimo hal\u0131 \u00F6nizlemesi\">',\n      '</div>',\n      '</div>'\n    ].join(\"\");\n  }\n  if (videos.length) {\n      return [\n      '<div class=\"' + stageClass + '\">',\n      '<video src=\"' + escapeHtml(videos[0]) + '\" autoplay muted loop playsinline preload=\"auto\" controlslist=\"nodownload noplaybackrate\" disablepictureinpicture></video>',\n      '</div>'\n    ].join(\"\");\n  }\n  if (preview) {\n    return [\n      '<div class=\"' + stageClass + '\">',\n      '<img src=\"' + escapeHtml(preview) + '\" alt=\"Tasarlad\u0131\u011F\u0131n\u0131z Massimo hal\u0131 \u00F6nizlemesi\">',\n      '</div>'\n    ].join(\"\");\n  }\n  return '<div class=\"' + stageClass + '\"><div class=\"massimo-ar-spin\" aria-hidden=\"true\"></div></div>';\n}\n\n  function featureCards(snapshot) {\n    var quality = snapshot && (snapshot.qualityLabel || snapshot.qualityCode) || \"Massimo\";\n    var qualityCode = normalizeCode(quality);\n    var textureTitle = qualityCode === \"cordoba\" ? \"Kal\u0131n Cordoba hav\u0131\" : (qualityCode === \"lasis\" ? \"Lasis hav\u0131\" : \"Se\u00E7ili kalite hav\u0131\");\n    var textureNote = qualityCode === \"cordoba\" ? \"Yumu\u015Fak kenar, bump ve p\u00FCt\u00FCrl\u00FC y\u00FCzey\" : \"Se\u00E7ili kalite dokusu, yumu\u015Fak kenar ve p\u00FCt\u00FCrl\u00FC y\u00FCzey\";\n    var pattern = snapshot && snapshot.patternCode ? snapshot.patternCode : \"\";\n    var dims = snapshot ? (formatCm(snapshot.widthCm) + \" x \" + formatCm(snapshot.lengthCm) + \" cm\") : \"\";\n    var shape = snapshot ? shapeLabel(snapshot.shapeType) : \"\";\n    var edge = snapshot && snapshot.edgeLabel ? snapshot.edgeLabel : \"\";\n    var fabric = snapshot && snapshot.fabricLabel ? snapshot.fabricLabel : \"\";\n    return [\n      '<div class=\"massimo-ar-cards\">',\n      '<div class=\"massimo-ar-card\"><span>Kalite</span><strong>' + escapeHtml(String(quality).toUpperCase()) + '</strong><em>' + escapeHtml(pattern || \"Se\u00E7ili desen\") + '</em></div>',\n      '<div class=\"massimo-ar-card\"><span>\u00D6l\u00E7\u00FC</span><strong>' + escapeHtml(dims) + '</strong><em>' + escapeHtml(shape) + '</em></div>',\n      '<div class=\"massimo-ar-card\"><span>Kenar</span><strong>' + escapeHtml(edge || \"Massimo\") + '</strong><em>' + escapeHtml(fabric || \"Se\u00E7ili kartela\") + '</em></div>',\n      '<div class=\"massimo-ar-card\"><span>Doku</span><strong>' + escapeHtml(textureTitle) + '</strong><em>' + escapeHtml(textureNote) + '</em></div>',\n      '</div>'\n    ].join(\"\");\n  }\n\n  function setLoading(status, snapshot) {\n    snapshot = snapshot || activeSnapshot;\n    if (!snapshot) {\n      setBody('<div class=\"massimo-ar-error\" style=\"border-color:#eee;background:#fbfaf7;color:#444;\"><strong>Haz\u0131rlan\u0131yor</strong><br>' + escapeHtml(status || \"Massimo AR haz\u0131rlan\u0131yor...\") + '</div>');\n      return;\n    }\n    setBody([\n      '<div class=\"massimo-ar-work\">',\n      '<div class=\"massimo-ar-main\">',\n      stageMediaHtml(snapshot),\n      '<div class=\"massimo-ar-loading\"><span class=\"massimo-ar-spin\" aria-hidden=\"true\"></span><span>' + escapeHtml(status || \"Massimo AR haz\u0131rlan\u0131yor...\") + '</span></div>',\n      '</div>',\n      '<div class=\"massimo-ar-side\">',\n      featureCards(snapshot),\n      '<div class=\"massimo-ar-note\">Model, bu sayfadaki Massimo \u00F6nizlemesinden \u00FCretilir. Dolce Vita AR dosyalar\u0131 veya tasar\u0131m state\u2019i kullan\u0131lmaz.</div>',\n      '</div>',\n      '</div>'\n    ].join(\"\"));\n  }\n\n  function setError(message) {\n    setBody('<div class=\"massimo-ar-error\"><strong>AR haz\u0131rlanamad\u0131.</strong><br>' + escapeHtml(message || \"Beklenmeyen bir hata olu\u015Ftu.\") + '</div>');\n  }\n\n  function getButton() {\n    var root = currentRoot();\n    return root && $(root, \"[data-massimo-ar-button]\");\n  }\n\n  function clampCrop(crop, canvas) {\n    if (!crop || !canvas) return { x: 0, y: 0, w: canvas.width, h: canvas.height };\n    var x = Math.max(0, Math.min(canvas.width - 1, Math.floor(Number(crop.x) || 0)));\n    var y = Math.max(0, Math.min(canvas.height - 1, Math.floor(Number(crop.y) || 0)));\n    var w = Math.max(1, Math.min(canvas.width - x, Math.ceil(Number(crop.w) || canvas.width)));\n    var h = Math.max(1, Math.min(canvas.height - y, Math.ceil(Number(crop.h) || canvas.height)));\n    return { x: x, y: y, w: w, h: h };\n  }\n\n  function expandCrop(crop, canvas, padPx) {\n    if (!crop || !canvas) return clampCrop(crop, canvas);\n    var pad = Math.max(0, Math.round(Number(padPx) || 0));\n    return clampCrop({\n      x: (Number(crop.x) || 0) - pad,\n      y: (Number(crop.y) || 0) - pad,\n      w: (Number(crop.w) || canvas.width) + pad * 2,\n      h: (Number(crop.h) || canvas.height) + pad * 2\n    }, canvas);\n  }\n\n  function pixelBrightness(r, g, b) {\n    return (r + g + b) / 3;\n  }\n\n  function sampleEdgeBackground(data, w, h) {\n    var step = Math.max(1, Math.round(Math.min(w, h) / 96));\n    var r = 0;\n    var g = 0;\n    var b = 0;\n    var n = 0;\n    function add(x, y) {\n      var i = (y * w + x) * 4;\n      r += data[i];\n      g += data[i + 1];\n      b += data[i + 2];\n      n++;\n    }\n    for (var x = 0; x < w; x += step) {\n      add(x, 0);\n      add(x, h - 1);\n    }\n    for (var y = 0; y < h; y += step) {\n      add(0, y);\n      add(w - 1, y);\n    }\n    if (!n) return { r: 248, g: 247, b: 243, br: 246 };\n    r /= n;\n    g /= n;\n    b /= n;\n    return { r: r, g: g, b: b, br: pixelBrightness(r, g, b) };\n  }\n\n  function isEdgeBackgroundPixel(data, idx, bg) {\n    var r = data[idx];\n    var g = data[idx + 1];\n    var b = data[idx + 2];\n    var a = data[idx + 3];\n    if (a < 16) return true;\n    var max = Math.max(r, g, b);\n    var min = Math.min(r, g, b);\n    var br = pixelBrightness(r, g, b);\n    var neutral = (max - min) < 34;\n    var brightBg = br >= 238 && neutral;\n    var dr = r - bg.r;\n    var dg = g - bg.g;\n    var db = b - bg.b;\n    var closeToEdgeColor = (dr * dr + dg * dg + db * db) < 36 * 36;\n    return brightBg || (closeToEdgeColor && br >= bg.br - 38);\n  }\n\n  function applyRenderedSilhouetteAlpha(canvas) {\n    if (!canvas || !canvas.width || !canvas.height) return false;\n    try {\n      var w = canvas.width;\n      var h = canvas.height;\n      var ctx = canvas.getContext(\"2d\", { willReadFrequently: true });\n      var image = ctx.getImageData(0, 0, w, h);\n      var data = image.data;\n      var bg = sampleEdgeBackground(data, w, h);\n      var outside = new Uint8Array(w * h);\n      var queue = [];\n      var head = 0;\n      function seed(x, y) {\n        var p = y * w + x;\n        if (outside[p]) return;\n        if (!isEdgeBackgroundPixel(data, p * 4, bg)) return;\n        outside[p] = 1;\n        queue.push(p);\n      }\n      for (var sx = 0; sx < w; sx++) {\n        seed(sx, 0);\n        seed(sx, h - 1);\n      }\n      for (var sy = 1; sy < h - 1; sy++) {\n        seed(0, sy);\n        seed(w - 1, sy);\n      }\n      while (head < queue.length) {\n        var p = queue[head++];\n        var px = p % w;\n        var py = Math.floor(p / w);\n        for (var dy = -1; dy <= 1; dy++) {\n          for (var dx = -1; dx <= 1; dx++) {\n            if (!dx && !dy) continue;\n            var nx = px + dx;\n            var ny = py + dy;\n            if (nx < 0 || nx >= w || ny < 0 || ny >= h) continue;\n            var ni = ny * w + nx;\n            if (outside[ni]) continue;\n            if (isEdgeBackgroundPixel(data, ni * 4, bg)) {\n              outside[ni] = 1;\n              queue.push(ni);\n            }\n          }\n        }\n      }\n      var kept = 0;\n      for (var i = 0; i < outside.length; i++) {\n        if (outside[i]) {\n          var di = i * 4;\n          data[di] = 0;\n          data[di + 1] = 0;\n          data[di + 2] = 0;\n          data[di + 3] = 0;\n        } else {\n          kept++;\n        }\n      }\n      var coverage = kept / Math.max(1, outside.length);\n      if (coverage < 0.08 || coverage > 0.94) return false;\n      ctx.putImageData(image, 0, 0);\n      stripLowAlpha(canvas, 24);\n      canvas.__massimoRenderedSilhouette = { coverage: coverage, backgroundCoverage: queue.length / Math.max(1, outside.length) };\n      return true;\n    } catch (err) {\n      return false;\n    }\n  }\n\n  function alphaCoverage(canvas, alphaThreshold) {\n    var thr = Number(alphaThreshold) || 96;\n    if (!canvas || !canvas.width || !canvas.height) return 0;\n    try {\n      var w = canvas.width;\n      var h = canvas.height;\n      var ctx = canvas.getContext(\"2d\", { willReadFrequently: true });\n      var data = ctx.getImageData(0, 0, w, h).data;\n      var step = Math.max(1, Math.floor(Math.min(w, h) / 640));\n      var kept = 0;\n      var total = 0;\n      for (var y = 0; y < h; y += step) {\n        for (var x = 0; x < w; x += step) {\n          total++;\n          if (data[(y * w + x) * 4 + 3] > thr) kept++;\n        }\n      }\n      return kept / Math.max(1, total);\n    } catch (err) {\n      return 0;\n    }\n  }\n\n  function normalizeSilhouetteUnitPoints(points) {\n    if (!Array.isArray(points) || points.length < 3) return [];\n    var minX = Infinity;\n    var minY = Infinity;\n    var maxX = -Infinity;\n    var maxY = -Infinity;\n    points.forEach(function (point) {\n      var nx = finiteNumber(point && point.nx, 0.5);\n      var ny = finiteNumber(point && point.ny, 0.5);\n      if (nx < minX) minX = nx;\n      if (nx > maxX) maxX = nx;\n      if (ny < minY) minY = ny;\n      if (ny > maxY) maxY = ny;\n    });\n    var rangeX = maxX - minX;\n    var rangeY = maxY - minY;\n    if (!(rangeX > 0.001 && rangeY > 0.001)) return points;\n    return points.map(function (point) {\n      return {\n        nx: clampNumber((finiteNumber(point && point.nx, 0.5) - minX) / rangeX, 0, 1),\n        ny: clampNumber((finiteNumber(point && point.ny, 0.5) - minY) / rangeY, 0, 1)\n      };\n    });\n  }\n\n  function buildAmorfArMaskArtifact(canvas, sourceMode) {\n    if (!canvas || !canvas.width || !canvas.height) return null;\n    var coverage = alphaCoverage(canvas, 220);\n    if (coverage < 0.04 || coverage > 0.985) return null;\n    var silhouette = traceAlphaSilhouette(canvas, 220);\n    var alphaBBox = measureAlphaBBox(canvas, 220, -2);\n    var silhouettePoints = silhouette && silhouette.points && silhouette.points.length >= 16\n      ? normalizeSilhouetteUnitPoints(silhouette.points)\n      : [];\n    return {\n      source: sourceMode || \"displayed-preview-alpha\",\n      edgeTreatment: \"top-texture\",\n      alphaBBox: alphaBBox,\n      alphaCrop: canvas.__massimoAlphaCrop || null,\n      coverage: coverage,\n      silhouetteAspect: silhouette ? silhouette.aspect : null,\n      silhouettePointCount: silhouettePoints.length,\n      silhouettePoints: silhouettePoints,\n      silhouetteScaleLocked: silhouettePoints.length >= 16,\n      silhouetteSource: silhouette ? silhouette.source : \"\",\n      meshSource: \"pending\",\n      proceduralFallback: false\n    };\n  }\n\n  function drawShapeMask(ctx, width, height, shapeType, shapePayload) {\n    shapeType = normalizeShape(shapeType);\n    ctx.beginPath();\n    if (shapeType === \"oval\") {\n      ctx.ellipse(width / 2, height / 2, width / 2, height / 2, 0, 0, Math.PI * 2);\n      ctx.fill();\n      return;\n    }\n    if (shapeType === \"yuvarlak\") {\n      var r = Math.min(width, height) / 2;\n      ctx.arc(width / 2, height / 2, r, 0, Math.PI * 2);\n      ctx.fill();\n      return;\n    }\n    if (shapeType === \"amorf\") {\n      var amorf = amorfPathPoints(shapePayload, width, height, false);\n      if (amorf && appendSmoothCanvasPath(ctx, amorf.points.map(function (point) {\n        return { x: width / 2 + point.x, y: height / 2 + point.y };\n      }), amorf.tension)) {\n        ctx.fill();\n        return;\n      }\n    }\n    ctx.rect(0, 0, width, height);\n    ctx.fill();\n  }\n\n  function drawShapeMaskInCrop(ctx, crop, last, state, shapeType) {\n    if (!ctx || !ctx.canvas || !crop) return false;\n    shapeType = normalizeShape(shapeType);\n    if (shapeType === \"dikdortgen\") return false;\n    var shapeInfo = (last && last.shape) || {};\n    var geometry = (last && last.outputGeometry) || (state && state.outputGeometry) || {};\n    var bounds = shapeInfo && shapeInfo.w && shapeInfo.h\n      ? shapeInfo\n      : (geometry && geometry.shapeBoundsPx) || null;\n    if (!bounds) return false;\n    var x = finiteNumber(bounds.x, crop.x) - finiteNumber(crop.x, 0);\n    var y = finiteNumber(bounds.y, crop.y) - finiteNumber(crop.y, 0);\n    var w = finiteNumber(bounds.w, crop.w);\n    var h = finiteNumber(bounds.h, crop.h);\n    if (!(w > 2 && h > 2)) return false;\n    var inset = Math.max(1, Math.round(Math.min(w, h) * 0.0025));\n    x += inset;\n    y += inset;\n    w = Math.max(1, w - inset * 2);\n    h = Math.max(1, h - inset * 2);\n    ctx.save();\n    ctx.beginPath();\n    if (shapeType === \"oval\" || shapeType === \"yuvarlak\") {\n      var rx = shapeType === \"yuvarlak\" ? Math.min(w, h) / 2 : w / 2;\n      var ry = shapeType === \"yuvarlak\" ? Math.min(w, h) / 2 : h / 2;\n      ctx.ellipse(x + w / 2, y + h / 2, rx, ry, 0, 0, Math.PI * 2);\n      ctx.closePath();\n    } else {\n      var amorf = amorfPathPoints(resolveShapePayload(state, last), w, h, false);\n      if (!amorf || !appendSmoothCanvasPath(ctx, amorf.points.map(function (point) {\n        return { x: x + w / 2 + point.x, y: y + h / 2 + point.y };\n      }), amorf.tension)) {\n        ctx.restore();\n        return false;\n      }\n    }\n    ctx.globalCompositeOperation = \"destination-in\";\n    ctx.fillStyle = \"#000\";\n    ctx.fill();\n    ctx.restore();\n    return true;\n  }\n\n  function arEdgeTypeForSnapshot(last, state) {\n    return String(\n      state && state.edgeType ||\n      last && last.edgeType ||\n      last && last.edgeLabel ||\n      \"\"\n    ).toLowerCase().replace(/\\s+/g, \"_\");\n  }\n\n  function arRectEdgeSafePadPx(crop, last, state) {\n    if (!crop || !(crop.w > 24 && crop.h > 24)) return 0;\n    var edgeType = arEdgeTypeForSnapshot(last, state);\n    if (!edgeType || edgeType === \"overlok\") return 0;\n    var minSide = Math.min(crop.w, crop.h);\n    var metrics = last && last.edgeMetrics || state && state.edgeMetrics || {};\n    var visualDepth = Number(metrics.visualDepth || metrics.rawDepth || 0);\n    var base = edgeType === \"biye\" ? minSide * 0.010 : minSide * 0.014;\n    var fromMetrics = visualDepth > 0\n      ? visualDepth * (edgeType === \"biye\" ? 0.42 : 0.34)\n      : base;\n    var minPad = edgeType === \"biye\" ? 7 : 10;\n    var maxPad = Math.max(minPad, Math.round(minSide * (edgeType === \"biye\" ? 0.018 : 0.026)));\n    return Math.max(minPad, Math.min(maxPad, Math.round(fromMetrics)));\n  }\n\n  function rgbaFromHexInt(hex, alpha) {\n    if (hex == null) return \"\";\n    var r = (hex >> 16) & 255;\n    var g = (hex >> 8) & 255;\n    var b = hex & 255;\n    return \"rgba(\" + r + \",\" + g + \",\" + b + \",\" + Math.max(0, Math.min(1, alpha == null ? 1 : alpha)) + \")\";\n  }\n\n  function addRectArEdgeSafePadding(canvas, crop, last, state) {\n    var pad = arRectEdgeSafePadPx(crop, last, state);\n    if (!canvas || !canvas.width || !canvas.height || !pad) return canvas;\n    var w = canvas.width;\n    var h = canvas.height;\n    var band = Math.max(2, Math.min(Math.round(Math.min(w, h) * 0.045), pad * 2));\n    var out = document.createElement(\"canvas\");\n    out.width = w + pad * 2;\n    out.height = h + pad * 2;\n    var ctx = out.getContext(\"2d\");\n    ctx.imageSmoothingEnabled = true;\n    ctx.imageSmoothingQuality = \"high\";\n\n    // AR preview/model textures need a little breathing room at the physical edge.\n    // Use the real rendered edge pixels, not a procedural replacement.\n    ctx.drawImage(canvas, 0, 0, w, band, pad, 0, w, pad);\n    ctx.drawImage(canvas, 0, h - band, w, band, pad, h + pad, w, pad);\n    ctx.drawImage(canvas, 0, 0, band, h, 0, pad, pad, h);\n    ctx.drawImage(canvas, w - band, 0, band, h, w + pad, pad, pad, h);\n    ctx.drawImage(canvas, 0, 0, band, band, 0, 0, pad, pad);\n    ctx.drawImage(canvas, w - band, 0, band, band, w + pad, 0, pad, pad);\n    ctx.drawImage(canvas, 0, h - band, band, band, 0, h + pad, pad, pad);\n    ctx.drawImage(canvas, w - band, h - band, band, band, w + pad, h + pad, pad, pad);\n    ctx.drawImage(canvas, pad, pad);\n\n    var selectedHex = edgeFabricSwatchHex({\n      state: state,\n      last: last,\n      fabricColor: state && state.fabricSummary && state.fabricSummary.color || last && (last.fabricColor || last.edgeFabricColor) || \"\",\n      fabricKey: state && state.fabricSummary && state.fabricSummary.id || last && (last.fabric || last.fabricLabel) || \"\"\n    });\n    if (selectedHex == null) selectedHex = sampleBindingEdgeHex(canvas, 0x8f9aa4);\n    if (selectedHex != null) {\n      ctx.save();\n      var edgeType = arEdgeTypeForSnapshot(last, state);\n      var edgeAlpha = edgeType === \"biye\" ? 0.38 : 0.34;\n      var outerBand = Math.max(2, Math.min(Math.round(pad * 0.58), Math.round(Math.min(w, h) * 0.016)));\n      ctx.fillStyle = rgbaFromHexInt(selectedHex, edgeAlpha);\n      ctx.fillRect(0, 0, out.width, outerBand);\n      ctx.fillRect(0, out.height - outerBand, out.width, outerBand);\n      ctx.fillRect(0, 0, outerBand, out.height);\n      ctx.fillRect(out.width - outerBand, 0, outerBand, out.height);\n      ctx.strokeStyle = rgbaFromHexInt(selectedHex, 0.62);\n      ctx.lineWidth = Math.max(1.2, Math.min(3.2, pad * 0.14));\n      ctx.strokeRect(pad * 0.5, pad * 0.5, w + pad, h + pad);\n      ctx.strokeStyle = rgbaFromHexInt(selectedHex, 0.28);\n      ctx.lineWidth = Math.max(1, Math.min(2.4, pad * 0.10));\n      ctx.strokeRect(pad + 0.5, pad + 0.5, w - 1, h - 1);\n      ctx.restore();\n    }\n    out.__massimoArEdgeSafePadding = {\n      padPx: pad,\n      edgeType: arEdgeTypeForSnapshot(last, state),\n      edgeHighlightHex: selectedHex,\n      source: \"rendered-edge-pixel-extension\"\n    };\n    return out;\n  }\n\n  function rectCropCoverage(crop, canvas) {\n    if (!crop || !canvas || !(canvas.width > 0 && canvas.height > 0)) return 0;\n    var clamped = clampCrop(crop, canvas);\n    return (clamped.w * clamped.h) / Math.max(1, canvas.width * canvas.height);\n  }\n\n  function rectCropEdgeGap(crop, canvas) {\n    if (!crop || !canvas) return { x: Infinity, y: Infinity };\n    var clamped = clampCrop(crop, canvas);\n    return {\n      x: Math.max(clamped.x, canvas.width - (clamped.x + clamped.w)),\n      y: Math.max(clamped.y, canvas.height - (clamped.y + clamped.h))\n    };\n  }\n\n  function chooseRectCropForCanvas(canvas, geometry, last) {\n    var geometryCrop = geometry && geometry.boundsPx;\n    var renderCrop = last && last.bounds;\n    if (!geometryCrop) return renderCrop;\n    if (!renderCrop) return geometryCrop;\n\n    var geometryGap = rectCropEdgeGap(geometryCrop, canvas);\n    var renderGap = rectCropEdgeGap(renderCrop, canvas);\n    var geometryCoverage = rectCropCoverage(geometryCrop, canvas);\n    var renderCoverage = rectCropCoverage(renderCrop, canvas);\n    var geometryMissesCurrentCanvas =\n      geometryGap.x > canvas.width * 0.045 ||\n      geometryGap.y > canvas.height * 0.045 ||\n      geometryCoverage < 0.88;\n\n    // renderArSurface can return a larger canvas while outputGeometry keeps\n    // visible-preview coordinates. Prefer render-local bounds in that case.\n    if (geometryMissesCurrentCanvas && renderCoverage > geometryCoverage * 1.04 && renderGap.x < canvas.width * 0.05) {\n      return renderCrop;\n    }\n    return geometryCrop;\n  }\n\n  function cropPreviewCanvas(canvas, last, state) {\n    if (!canvas || !canvas.width || !canvas.height) return null;\n    var geometry = (last && last.outputGeometry) || (state && state.outputGeometry) || {};\n    var shapeType = normalizeShape((state && (state.shapeType || state.shape && state.shape.type)) || (last && last.shapeType));\n    var crop = isAmorfShape(shapeType)\n      ? clampCrop(null, canvas)\n      : clampCrop(shapeType === \"dikdortgen\" ? chooseRectCropForCanvas(canvas, geometry, last) : (geometry.boundsPx || last && last.bounds), canvas);\n    var out = document.createElement(\"canvas\");\n    out.width = crop.w;\n    out.height = crop.h;\n    var ctx = out.getContext(\"2d\");\n    ctx.imageSmoothingEnabled = true;\n    ctx.imageSmoothingQuality = \"high\";\n    ctx.drawImage(canvas, crop.x, crop.y, crop.w, crop.h, 0, 0, crop.w, crop.h);\n\n    if (isAmorfShape(shapeType)) {\n      var alphaReady = applyRenderedSilhouetteAlpha(out);\n      var alphaSource = alphaReady ? \"displayed-preview-flood-fill\" : \"displayed-preview-alpha\";\n      if (!alphaReady) {\n        ctx.save();\n        ctx.globalCompositeOperation = \"destination-in\";\n        ctx.fillStyle = \"#000\";\n        drawShapeMask(ctx, out.width, out.height, shapeType, resolveShapePayload(state, last));\n        ctx.restore();\n        alphaSource = \"displayed-preview-shape-mask\";\n      }\n      stripLowAlpha(out, 96);\n      out = cropCanvasToAlphaBBox(out, 96, 2);\n      var arMask = buildAmorfArMaskArtifact(out, alphaSource);\n      if (arMask) out.__massimoArMask = arMask;\n      else out.__massimoArMaskError = alphaReady ? \"alpha-silhouette-trace-failed\" : \"rendered-silhouette-alpha-failed\";\n      return out;\n    }\n\n    if (shapeType !== \"dikdortgen\") {\n      if (!drawShapeMaskInCrop(ctx, crop, last, state, shapeType)) {\n        ctx.save();\n        ctx.globalCompositeOperation = \"destination-in\";\n        ctx.fillStyle = \"#000\";\n        drawShapeMask(ctx, out.width, out.height, shapeType, resolveShapePayload(state, last));\n        ctx.restore();\n      }\n      stripLowAlpha(out, shapeType === \"amorf\" ? 96 : 32);\n      if (shapeType === \"amorf\") out = cropCanvasToAlphaBBox(out, 96, 2);\n    }\n    if (shapeType === \"dikdortgen\") {\n      if (isLasis3821State(state, last && (last.config || last.productConfig || last))) {\n        out.__massimoArEdgeSafePadding = {\n          skipped: true,\n          reason: \"lasis-3821-solid-cutout-no-extra-background\"\n        };\n      } else {\n        out = addRectArEdgeSafePadding(out, crop, last, state);\n      }\n    }\n    return out;\n  }\n\n  function stripLowAlpha(canvas, threshold) {\n    if (!canvas || !canvas.width || !canvas.height) return canvas;\n    var thr = Number(threshold) || 96;\n    try {\n      var ctx = canvas.getContext(\"2d\", { willReadFrequently: true });\n      var image = ctx.getImageData(0, 0, canvas.width, canvas.height);\n      var data = image.data;\n      for (var i = 0; i < data.length; i += 4) {\n        if (data[i + 3] < thr) {\n          data[i] = 0;\n          data[i + 1] = 0;\n          data[i + 2] = 0;\n          data[i + 3] = 0;\n        }\n      }\n      ctx.putImageData(image, 0, 0);\n    } catch (err) {}\n    return canvas;\n  }\n\n  function traceAlphaSilhouette(canvas, alphaThreshold) {\n    var thr = Number(alphaThreshold) || 96;\n    if (!canvas || !canvas.width || !canvas.height) return null;\n    var srcW = canvas.width;\n    var srcH = canvas.height;\n    var maxDim = 768;\n    var scale = Math.min(maxDim / srcW, maxDim / srcH, 1);\n    var w = Math.max(8, Math.round(srcW * scale));\n    var h = Math.max(8, Math.round(srcH * scale));\n    var work = document.createElement(\"canvas\");\n    work.width = w;\n    work.height = h;\n    var wctx = work.getContext(\"2d\", { willReadFrequently: true });\n    wctx.drawImage(canvas, 0, 0, w, h);\n    var data = wctx.getImageData(0, 0, w, h).data;\n    var mask = new Uint8Array(w * h);\n    var minX = w;\n    var minY = h;\n    var maxX = -1;\n    var maxY = -1;\n    for (var y = 0; y < h; y++) {\n      for (var x = 0; x < w; x++) {\n        if (data[(y * w + x) * 4 + 3] > thr) {\n          mask[y * w + x] = 1;\n          if (x < minX) minX = x;\n          if (y < minY) minY = y;\n          if (x > maxX) maxX = x;\n          if (y > maxY) maxY = y;\n        }\n      }\n    }\n    if (maxX < 0) return null;\n\n    var sumX = 0;\n    var sumY = 0;\n    var count = 0;\n    for (var my = minY; my <= maxY; my++) {\n      for (var mx = minX; mx <= maxX; mx++) {\n        if (!mask[my * w + mx]) continue;\n        sumX += mx;\n        sumY += my;\n        count++;\n      }\n    }\n    if (!count) return null;\n\n    var centerX = sumX / count;\n    var centerY = sumY / count;\n    if (!mask[Math.round(centerY) * w + Math.round(centerX)]) {\n      centerX = (minX + maxX) / 2;\n      centerY = (minY + maxY) / 2;\n    }\n\n    function hasAlpha(px, py) {\n      var ix = Math.max(0, Math.min(w - 1, Math.round(px)));\n      var iy = Math.max(0, Math.min(h - 1, Math.round(py)));\n      return !!mask[iy * w + ix];\n    }\n\n    var samples = 256;\n    var contour = [];\n    var diag = Math.sqrt(w * w + h * h);\n    var stepPx = 0.55;\n    for (var aIndex = 0; aIndex < samples; aIndex++) {\n      var angle = (aIndex / samples) * Math.PI * 2;\n      var dx = Math.cos(angle);\n      var dy = Math.sin(angle);\n      var lastInside = null;\n      var seenInside = false;\n      var maxR = diag;\n      for (var r = 0; r <= maxR; r += stepPx) {\n        var px = centerX + dx * r;\n        var py = centerY + dy * r;\n        if (px < 0 || px >= w || py < 0 || py >= h) break;\n        if (hasAlpha(px, py)) {\n          seenInside = true;\n          lastInside = { x: px, y: py };\n        } else if (seenInside) {\n          break;\n        }\n      }\n      if (lastInside) contour.push(lastInside);\n    }\n    if (contour.length < 16) return null;\n\n    var bw = (maxX - minX) || 1;\n    var bh = (maxY - minY) || 1;\n    return {\n      source: \"alpha-radial-silhouette\",\n      points: contour.map(function (point) {\n        return {\n          nx: clampNumber((point.x - minX) / bw, 0, 1),\n          ny: clampNumber((point.y - minY) / bh, 0, 1)\n        };\n      }),\n      aspect: bw / bh\n    };\n  }\n\n  function measureAlphaBBox(canvas, alphaThreshold, padPx) {\n    var thr = Number(alphaThreshold) || 96;\n    if (!canvas || !canvas.width || !canvas.height) return { uMin: 0, uMax: 1, vMin: 0, vMax: 1, opaque: true };\n    try {\n      var w = canvas.width;\n      var h = canvas.height;\n      var ctx = canvas.getContext(\"2d\", { willReadFrequently: true });\n      var data = ctx.getImageData(0, 0, w, h).data;\n      var minX = w;\n      var minY = h;\n      var maxX = -1;\n      var maxY = -1;\n      var step = Math.max(1, Math.floor(Math.min(w, h) / 512));\n      for (var y = 0; y < h; y += step) {\n        for (var x = 0; x < w; x += step) {\n          var a = data[(y * w + x) * 4 + 3];\n          if (a > thr) {\n            if (x < minX) minX = x;\n            if (x > maxX) maxX = x;\n            if (y < minY) minY = y;\n            if (y > maxY) maxY = y;\n          }\n        }\n      }\n      if (maxX < 0) return { uMin: 0, uMax: 1, vMin: 0, vMax: 1, opaque: true };\n      var pad = padPx == null ? step : padPx;\n      minX = Math.max(0, minX - pad);\n      minY = Math.max(0, minY - pad);\n      maxX = Math.min(w - 1, maxX + pad);\n      maxY = Math.min(h - 1, maxY + pad);\n      if (maxX <= minX || maxY <= minY) return { uMin: 0, uMax: 1, vMin: 0, vMax: 1, opaque: true };\n      return {\n        uMin: minX / w,\n        uMax: (maxX + 1) / w,\n        vMin: minY / h,\n        vMax: (maxY + 1) / h,\n        opaque: false\n      };\n    } catch (err) {\n      return { uMin: 0, uMax: 1, vMin: 0, vMax: 1, opaque: true };\n    }\n  }\n\n  function cropCanvasToAlphaBBox(canvas, alphaThreshold, padPx) {\n    var thr = Number(alphaThreshold) || 96;\n    if (!canvas || !canvas.width || !canvas.height) return canvas;\n    try {\n      var w = canvas.width;\n      var h = canvas.height;\n      var ctx = canvas.getContext(\"2d\", { willReadFrequently: true });\n      var data = ctx.getImageData(0, 0, w, h).data;\n      var minX = w;\n      var minY = h;\n      var maxX = -1;\n      var maxY = -1;\n      var step = Math.max(1, Math.floor(Math.min(w, h) / 768));\n      for (var y = 0; y < h; y += step) {\n        for (var x = 0; x < w; x += step) {\n          if (data[(y * w + x) * 4 + 3] <= thr) continue;\n          if (x < minX) minX = x;\n          if (x > maxX) maxX = x;\n          if (y < minY) minY = y;\n          if (y > maxY) maxY = y;\n        }\n      }\n      if (maxX < 0) return canvas;\n      var pad = Math.max(0, Math.round(Number(padPx) || 0));\n      minX = Math.max(0, minX - pad);\n      minY = Math.max(0, minY - pad);\n      maxX = Math.min(w - 1, maxX + pad);\n      maxY = Math.min(h - 1, maxY + pad);\n      var cropW = Math.max(1, maxX - minX + 1);\n      var cropH = Math.max(1, maxY - minY + 1);\n      if (minX <= 0 && minY <= 0 && cropW >= w && cropH >= h) return canvas;\n      var out = document.createElement(\"canvas\");\n      out.width = cropW;\n      out.height = cropH;\n      var octx = out.getContext(\"2d\");\n      octx.imageSmoothingEnabled = true;\n      octx.imageSmoothingQuality = \"high\";\n      octx.drawImage(canvas, minX, minY, cropW, cropH, 0, 0, cropW, cropH);\n      out.__massimoAlphaCrop = { x: minX, y: minY, w: cropW, h: cropH, threshold: thr };\n      return out;\n    } catch (err) {\n      return canvas;\n    }\n  }\n\n  function bleedUsdzEdgePixels(data, width, height, alphaThreshold, maxPasses) {\n    var total = width * height;\n    var thr = Number(alphaThreshold) || 220;\n    var filled = new Uint8Array(total);\n    var remaining = 0;\n    for (var i = 0; i < total; i++) {\n      if (data[i * 4 + 3] >= thr) filled[i] = 1;\n      else remaining++;\n    }\n    if (!remaining || remaining === total) return 0;\n    var passes = Math.max(3, Math.min(16, Math.round(Number(maxPasses) || 8)));\n    var changedTotal = 0;\n    for (var pass = 0; pass < passes; pass++) {\n      var indices = [];\n      var colors = [];\n      for (var y = 0; y < height; y++) {\n        for (var x = 0; x < width; x++) {\n          var idx = y * width + x;\n          if (filled[idx]) continue;\n          var r = 0;\n          var g = 0;\n          var b = 0;\n          var count = 0;\n          for (var dy = -1; dy <= 1; dy++) {\n            for (var dx = -1; dx <= 1; dx++) {\n              if (!dx && !dy) continue;\n              var nx = x + dx;\n              var ny = y + dy;\n              if (nx < 0 || nx >= width || ny < 0 || ny >= height) continue;\n              var ni = ny * width + nx;\n              if (!filled[ni]) continue;\n              var di = ni * 4;\n              r += data[di];\n              g += data[di + 1];\n              b += data[di + 2];\n              count++;\n            }\n          }\n          if (!count) continue;\n          indices.push(idx);\n          colors.push(Math.round(r / count), Math.round(g / count), Math.round(b / count));\n        }\n      }\n      if (!indices.length) break;\n      for (var j = 0; j < indices.length; j++) {\n        var target = indices[j];\n        var ti = target * 4;\n        var ci = j * 3;\n        data[ti] = colors[ci];\n        data[ti + 1] = colors[ci + 1];\n        data[ti + 2] = colors[ci + 2];\n        data[ti + 3] = thr;\n        filled[target] = 1;\n      }\n      changedTotal += indices.length;\n    }\n    return changedTotal;\n  }\n\n  function preprocessForUsdz(srcCanvas, options) {\n    if (!srcCanvas || !srcCanvas.width || !srcCanvas.height) return srcCanvas;\n    options = options || {};\n    var preserveAlpha = options.preserveAlpha === true;\n    var alphaMaskThreshold = Math.max(1, Math.min(254, Math.round(Number(options.alphaMaskThreshold) || 48)));\n    var out = document.createElement(\"canvas\");\n    out.width = srcCanvas.width;\n    out.height = srcCanvas.height;\n    var ctx = out.getContext(\"2d\", { willReadFrequently: true });\n    ctx.drawImage(srcCanvas, 0, 0);\n    try {\n      var image = ctx.getImageData(0, 0, out.width, out.height);\n      var data = image.data;\n      var rSum = 0;\n      var gSum = 0;\n      var bSum = 0;\n      var count = 0;\n      for (var i = 0; i < data.length; i += 16) {\n        if (data[i + 3] > 220) {\n          rSum += data[i];\n          gSum += data[i + 1];\n          bSum += data[i + 2];\n          count++;\n        }\n      }\n      var rAvg = count ? Math.round(rSum / count) : 128;\n      var gAvg = count ? Math.round(gSum / count) : 128;\n      var bAvg = count ? Math.round(bSum / count) : 128;\n      var bleedPasses = Math.min(16, Math.max(6, Math.round(Math.min(out.width, out.height) / 110)));\n      bleedUsdzEdgePixels(data, out.width, out.height, 220, bleedPasses);\n      for (var j = 0; j < data.length; j += 4) {\n        if (preserveAlpha) {\n          if (data[j + 3] < alphaMaskThreshold) {\n            data[j] = rAvg;\n            data[j + 1] = gAvg;\n            data[j + 2] = bAvg;\n            data[j + 3] = 0;\n          } else {\n            data[j + 3] = 255;\n          }\n        } else {\n          if (data[j + 3] < 220) {\n            data[j] = rAvg;\n            data[j + 1] = gAvg;\n            data[j + 2] = bAvg;\n          }\n          data[j + 3] = 255;\n        }\n      }\n      ctx.putImageData(image, 0, 0);\n    } catch (err) {}\n    return out;\n  }\n\n  function upscaleCanvas(source, targetPx) {\n    if (!source || !source.width || !source.height) return source;\n    var maxSide = Math.max(source.width, source.height);\n    var scale = Math.min(targetPx / maxSide, 4);\n    if (scale <= 1.05) return source;\n    var out = document.createElement(\"canvas\");\n    out.width = Math.round(source.width * scale);\n    out.height = Math.round(source.height * scale);\n    var ctx = out.getContext(\"2d\");\n    ctx.imageSmoothingEnabled = true;\n    ctx.imageSmoothingQuality = \"high\";\n    ctx.drawImage(source, 0, 0, out.width, out.height);\n    return out;\n  }\n\n  function resizeCanvasToMaxSide(source, targetPx) {\n    if (!source || !source.width || !source.height) return source;\n    var target = Math.max(1, Math.round(Number(targetPx) || 0));\n    if (!target) return source;\n    var maxSide = Math.max(source.width, source.height);\n    var scale = target / Math.max(1, maxSide);\n    if (Math.abs(scale - 1) < 0.045) return source;\n    scale = Math.max(0.08, Math.min(4, scale));\n    var out = document.createElement(\"canvas\");\n    out.width = Math.max(1, Math.round(source.width * scale));\n    out.height = Math.max(1, Math.round(source.height * scale));\n    var ctx = out.getContext(\"2d\");\n    ctx.imageSmoothingEnabled = true;\n    ctx.imageSmoothingQuality = \"high\";\n    ctx.drawImage(source, 0, 0, out.width, out.height);\n    return out;\n  }\n\n  function buildSourceDetailTextureCanvas(source, amount) {\n    if (!source || !source.width || !source.height) return source;\n    var strength = Math.max(0, Math.min(0.72, Number(amount) || 0));\n    if (strength <= 0) return source;\n    var out = document.createElement(\"canvas\");\n    out.width = source.width;\n    out.height = source.height;\n    var ctx = out.getContext(\"2d\", { willReadFrequently: true });\n    ctx.drawImage(source, 0, 0);\n    var image = ctx.getImageData(0, 0, out.width, out.height);\n    var data = image.data;\n    var src = new Uint8ClampedArray(data);\n    var w = out.width;\n    var h = out.height;\n    function lumAt(x, y) {\n      x = Math.max(0, Math.min(w - 1, x));\n      y = Math.max(0, Math.min(h - 1, y));\n      var p = (y * w + x) * 4;\n      if (src[p + 3] < 24) return 128;\n      return src[p] * 0.2126 + src[p + 1] * 0.7152 + src[p + 2] * 0.0722;\n    }\n    for (var y = 0; y < h; y++) {\n      for (var x = 0; x < w; x++) {\n        var i = (y * w + x) * 4;\n        if (src[i + 3] < 24) continue;\n        var center = lumAt(x, y);\n        var blur = (\n          lumAt(x - 2, y) + lumAt(x + 2, y) +\n          lumAt(x, y - 2) + lumAt(x, y + 2) +\n          lumAt(x - 1, y - 1) + lumAt(x + 1, y + 1)\n        ) / 6;\n        var detail = (center - blur) * strength;\n        var localContrast = (center - 128) * 0.035 * strength;\n        data[i] = clampByte(src[i] + detail + localContrast);\n        data[i + 1] = clampByte(src[i + 1] + detail + localContrast);\n        data[i + 2] = clampByte(src[i + 2] + detail + localContrast);\n        data[i + 3] = src[i + 3];\n      }\n    }\n    ctx.putImageData(image, 0, 0);\n    return out;\n  }\n\n  function previewDataUrl(canvas) {\n    if (!canvas) return \"\";\n    var maxSide = 900;\n    var scale = Math.min(maxSide / Math.max(canvas.width, canvas.height), 1);\n    var out = document.createElement(\"canvas\");\n    out.width = Math.max(1, Math.round(canvas.width * scale));\n    out.height = Math.max(1, Math.round(canvas.height * scale));\n    var ctx = out.getContext(\"2d\");\n    // [PREVIEW-SMOOTH v129] Masaustu modal onizlemesi: varsayilan 'low' kalite kucultme\n    // 2048px dokudaki ince cizgileri kalin seritlere cevirip bantlasma yaratiyordu.\n    ctx.imageSmoothingEnabled = true;\n    ctx.imageSmoothingQuality = \"high\";\n    ctx.drawImage(canvas, 0, 0, out.width, out.height);\n    try { return out.toDataURL(\"image/webp\", 0.86); }\n    catch (err) {\n      try { return out.toDataURL(\"image/png\"); }\n      catch (err2) { return \"\"; }\n    }\n  }\n\n  function textureFingerprint(canvas) {\n    if (!canvas) return \"\";\n    var maxSide = 512;\n    var scale = Math.min(maxSide / Math.max(canvas.width, canvas.height), 1);\n    var out = document.createElement(\"canvas\");\n    out.width = Math.max(1, Math.round(canvas.width * scale));\n    out.height = Math.max(1, Math.round(canvas.height * scale));\n    var ctx = out.getContext(\"2d\");\n    ctx.drawImage(canvas, 0, 0, out.width, out.height);\n    try { return out.toDataURL(\"image/webp\", 0.72); }\n    catch (err) {\n      try { return out.toDataURL(\"image/png\"); }\n      catch (err2) { return \"canvas:\" + out.width + \"x\" + out.height; }\n    }\n  }\n\n  function lastRenderShape(last, state) {\n    var candidates = [\n      last && last.shapeType,\n      last && last.shape && last.shape.type,\n      state && state.shapeType,\n      state && state.shape && state.shape.type\n    ];\n    for (var i = 0; i < candidates.length; i++) {\n      var shape = normalizeShape(candidates[i]);\n      if (shape) return shape;\n    }\n    return \"\";\n  }\n\n  async function waitForDisplayedDesignReady(api, root, timeoutMs) {\n    var start = Date.now();\n    var timeout = Number(timeoutMs) || 7000;\n    var lastDisplayed = \"\";\n    var lastShape = \"\";\n    while (Date.now() - start < timeout) {\n      var state = api && api.getState ? api.getState() || {} : {};\n      var last = api && api.getLastRender ? api.getLastRender() || {} : window.__MASSIMO_OZEL_OLCU_LAST__ || {};\n      var displayed = displayedDesignShape(root, state, last) || normalizeShape(root && root.dataset && root.dataset.shape);\n      lastDisplayed = displayed || lastDisplayed;\n      lastShape = lastRenderShape(last, state) || lastShape;\n      var canvas = api && api.getPreviewCanvas ? api.getPreviewCanvas() : previewCanvas(root);\n      var ready = !!canvas && (!displayed || lastShape === displayed || (displayed === \"dikdortgen\" && (!lastShape || lastShape === \"dikdortgen\")));\n      if (ready) return true;\n      if (api && api.ensurePreviewFresh) {\n        try { await api.ensurePreviewFresh(); } catch (err) {}\n      }\n      await new Promise(function (resolve) { setTimeout(resolve, 180); });\n    }\n    console.warn(\"[MassimoAR] Tasarim renderi henuz secili sekille eslesmedi.\", {\n      displayedShape: lastDisplayed,\n      lastShape: lastShape\n    });\n    return false;\n  }\n\n  async function prepareSnapshot() {\n    var api = getApi();\n    if (!api) throw new Error(\"Massimo \u00F6nizleme API haz\u0131r de\u011Fil.\");\n    if (api.ensurePreviewFresh) await api.ensurePreviewFresh();\n    var state = api.getState ? api.getState() || {} : {};\n    var config = api.getConfig ? api.getConfig() || {} : {};\n    var root = currentRoot();\n    var preview = root && root.__massimoPreview || null;\n    var domShapeType = root && root.dataset ? normalizeShape(root.dataset.shape) : \"\";\n    var requestedShapeType = normalizeShape(domShapeType || state.shapeType || state.shape && state.shape.type);\n    var requestedAmorf = isAmorfShape(requestedShapeType);\n    var designReady = await waitForDisplayedDesignReady(api, root, requestedAmorf ? 2200 : 8000);\n    if (!designReady && !requestedAmorf) {\n      throw new Error(\"Tasar\u0131m render\u0131 haz\u0131r de\u011Fil. Hal\u0131 \u00F6nizlemesi tamamland\u0131ktan sonra AR'yi tekrar a\u00E7\u0131n.\");\n    }\n    state = api.getState ? api.getState() || {} : state;\n    var domEdgeType = root && root.dataset ? String(root.dataset.edge || \"\") : \"\";\n    if (domShapeType && domShapeType !== \"dikdortgen\") state.shapeType = domShapeType;\n    if (domEdgeType) state.edgeType = domEdgeType;\n    var earlyQualityCode = config.qualityCode || state.qualityCode || \"\";\n    var earlyPatternCode = state.patternCode || state.pattern || config.patternCode || config.pattern || \"\";\n    var earlyHandle = config.handle || config.productHandle || config.shopifyHandle || currentProductHandle(api);\n    var earlyTitle = config.title || document.querySelector(\".massimo-oo__title,h1\") && document.querySelector(\".massimo-oo__title,h1\").textContent || document.title || \"Massimo\";\n    var earlyStrictExact = isCordobaStrictConfig(config, state, earlyQualityCode);\n    var earlyArProfile = earlyStrictExact ? null : assertLiveCalibrationForAr({\n      config: config,\n      state: state,\n      handle: earlyHandle,\n      title: earlyTitle,\n      qualityCode: earlyQualityCode,\n      patternCode: earlyPatternCode,\n      strictExact: earlyStrictExact\n    });\n    var forceVisibleCanvasForAmorf = isAmorfShape(domShapeType || state.shapeType || state.shape && state.shape.type) && !earlyStrictExact && !(earlyArProfile && earlyArProfile.strictLiveCalibration);\n    var arRender = null;\n    if (earlyStrictExact && preview && typeof preview.renderArSurface === \"function\") {\n      preview.shape = state.shape || preview.shape;\n      preview.edgeType = state.edgeType || preview.edgeType;\n      try {\n        arRender = await preview.renderArSurface(cordobaArRenderOptions(config, preview));\n      } catch (err) {\n        throw new Error(\"Cordoba strict AR temiz y\u00FCksek \u00E7\u00F6z\u00FCn\u00FCrl\u00FCkl\u00FC render \u00FCretilemedi: \" + (err && err.message || err));\n      }\n    }\n    if (!forceVisibleCanvasForAmorf && api.getArPreviewCanvas) {\n      try {\n        arRender = arRender || await api.getArPreviewCanvas();\n      } catch (err) {\n        if (earlyStrictExact || earlyArProfile && earlyArProfile.strictLiveCalibration) throw err;\n        console.warn(\"[MassimoAR] Temiz AR render kullanilamadi, mevcut preview'e donuluyor.\", err);\n      }\n    }\n    var last = arRender && arRender.last\n      ? arRender.last\n      : (api.getLastRender ? api.getLastRender() || {} : window.__MASSIMO_OZEL_OLCU_LAST__ || {});\n    var displayedShape = displayedDesignShape(root, state, last);\n    if (displayedShape) state.shapeType = displayedShape;\n    if (isAmorfShape(displayedShape || domShapeType || state.shapeType)) {\n      var visibleCanvas = previewCanvas(root) || (api.getPreviewCanvas ? api.getPreviewCanvas() : null);\n      if (visibleCanvas && !earlyStrictExact && !(earlyArProfile && earlyArProfile.strictLiveCalibration)) {\n        var visibleRenderCanvas = cloneCanvasElement(visibleCanvas, LIVE_CANVAS_TARGET_PX);\n        arRender = {\n          canvas: visibleRenderCanvas,\n          last: last,\n          fallbackUsed: false,\n          sourceMode: \"visible-design-canvas-for-amorf\",\n          matchesDressingRender: true,\n          designIgnoredForAr: false,\n          canvasWidth: visibleRenderCanvas.width,\n          canvasHeight: visibleRenderCanvas.height,\n          renderTargetSide: Math.max(visibleRenderCanvas.width, visibleRenderCanvas.height),\n          requestedImageWidth: Math.max(visibleRenderCanvas.width, visibleRenderCanvas.height)\n        };\n      }\n    }\n    var canvas = arRender && arRender.canvas\n      ? arRender.canvas\n      : (api.getPreviewCanvas ? api.getPreviewCanvas() : null);\n    if (isLasis3821State(state, config)) {\n      canvas = softenLasisArCanvas(arRender && arRender.canvas ? canvas : cloneCanvasElement(canvas, LIVE_CANVAS_TARGET_PX), state, config);\n      if (arRender) arRender.canvas = canvas;\n    }\n    var textureCanvas = cropPreviewCanvas(canvas, last, state);\n    if (!textureCanvas) throw new Error(\"Massimo hal\u0131 \u00F6nizlemesi hen\u00FCz haz\u0131r de\u011Fil.\");\n    if (earlyStrictExact && (!arRender || arRender.fallbackUsed || arRender.sourceMode !== \"massimo-preview-transparent-ar\")) {\n      throw new Error(\"Cordoba strict AR temiz transparent render d\u0131\u015F\u0131nda kaynak kabul etmez.\");\n    }\n    if (earlyArProfile && earlyArProfile.strictLiveCalibration) {\n      var allowedSource = arRender && (arRender.sourceMode === \"live-render-ar-surface\" || arRender.sourceMode === \"massimo-preview-transparent-ar\");\n      if (!allowedSource || arRender.fallbackUsed) {\n        throw new Error(\"Canli kalibre AR sadece temiz renderArSurface kaynagini kabul eder; giydirme/mock fallback reddedildi.\");\n      }\n    }\n\n    var shape = resolveShapePayload(state, last);\n    var geometry = last.outputGeometry || state.outputGeometry || {};\n    var shapeType = normalizeShape(displayedShape || (domShapeType && domShapeType !== \"dikdortgen\" ? domShapeType : (state.shapeType || shape.type || last.shapeType)));\n    var qualityCode = earlyQualityCode;\n    var patternCode = earlyPatternCode;\n    var strictExact = earlyStrictExact;\n    var materialProfile = strictExact ? cordobaMaterialProfile(config) : null;\n    var pileTextureUrl = strictExact ? sizedShopifyImageUrl(pickCordobaPileTextureUrl(config), CORDOBA_STRICT_RENDER_TARGET_PX) : \"\";\n    var handle = earlyHandle;\n    var title = earlyTitle;\n    var arProfile = earlyArProfile || arQualityProfile({\n      config: config,\n      state: state,\n      handle: handle,\n      title: title,\n      qualityCode: qualityCode,\n\t      qualityLabel: config.qualityLabel || qualityCode,\n\t      patternCode: patternCode,\n\t      strictExact: strictExact\n\t    });\n    if (!strictExact) assertLiveCalibrationForAr({ config: config, state: state, handle: handle, title: title, qualityCode: qualityCode, patternCode: patternCode }, arProfile);\n    var useNativeLiveTexture = !strictExact && arProfile && arProfile.strictLiveCalibration;\n    var nativeProfile = nativeArOutputProfile(arProfile, {\n      nativeAr: useNativeLiveTexture || isIOS() || isAndroid(),\n      forUsdz: useNativeLiveTexture\n    });\n    if (!strictExact && (useNativeLiveTexture || isIOS() || isAndroid())) {\n      textureCanvas = await applyNativeBodyTextureOverride(textureCanvas, nativeProfile);\n    }\n    var arPreviewCanvas = applyArTextureCalibration(\n      textureCanvas,\n      nativeProfile\n    );\n    if (isLasis3821State(state, config)) {\n      textureCanvas = softenLasisArCanvas(textureCanvas, state, config);\n      arPreviewCanvas = softenLasisArCanvas(arPreviewCanvas, state, config);\n    }\n    if (shapeType === \"amorf\") {\n\t      shapeType = \"amorf\";\n\t      state.shapeType = \"amorf\";\n      shape.type = \"amorf\";\n    }\n    state.shapeType = shapeType;\n    var widthCm = Number(geometry.visibleWidthCm || geometry.orderWidthCm || shape.widthCm || state.width || 160);\n    var lengthCm = Number(geometry.visibleLengthCm || geometry.orderLengthCm || shape.lengthCm || state.length || 230);\n    if (shapeType === \"yuvarlak\") {\n      var diameter = Math.min(widthCm, lengthCm);\n      widthCm = diameter;\n      lengthCm = diameter;\n    }\n    var arMask = textureCanvas.__massimoArMask || null;\n    var meshSource = \"\";\n    var meshPointCount = 0;\n    if (isAmorfShape(shapeType)) {\n      if (arMask && arMask.alphaBBox && Array.isArray(arMask.silhouettePoints) && arMask.silhouettePoints.length >= 16) {\n        meshSource = \"alpha-silhouette-contour\";\n        meshPointCount = arMask.silhouettePoints.length;\n      } else {\n        if (strictExact || arProfile && arProfile.strictLiveCalibration) {\n          throw new Error(\"Strict canl\u0131 AR amorf alpha s\u0131n\u0131r\u0131 \u00E7\u0131kar\u0131lamad\u0131; fallback model \u00FCretilmedi.\");\n        }\n        meshSource = \"parametric-petal-plush\";\n        meshPointCount = 14;\n        arMask = {\n          source: \"parametric-petal-fallback\",\n          edgeTreatment: \"top-texture\",\n          alphaBBox: { uMin: 0, uMax: 1, vMin: 0, vMax: 1, opaque: true },\n          coverage: 0.72,\n          silhouettePointCount: 0,\n          silhouettePoints: [],\n          meshSource: meshSource,\n          meshPointCount: meshPointCount,\n          proceduralFallback: true\n        };\n      }\n      arMask.meshSource = meshSource;\n      arMask.meshPointCount = meshPointCount;\n      arMask.shapePresetKey = shape.presetKey || \"\";\n      arMask.shapePresetLabel = shape.presetLabel || \"\";\n    }\n\n    var fabricSummary = state.fabricSummary || {};\n    var fabricSource = fabricSummary.id || fabricSummary.key || fabricSummary.code || fabricSummary.label || last.fabric || last.fabricLabel || \"\";\n    var fabricColor = fabricSummary.color || last.fabricColor || last.edgeFabricColor || \"\";\n    if (!fabricColor && last.fabric && typeof last.fabric === \"object\") fabricColor = last.fabric.color || \"\";\n    var edgeLabel = state.edgeLabel || state.edgeType || \"\";\n    var snapshot = {\n      config: config,\n      state: state,\n\t      last: last,\n\t      textureCanvas: textureCanvas,\n\t      previewDataUrl: previewDataUrl(arPreviewCanvas),\n\t      arPreviewCalibration: arPreviewCanvas && arPreviewCanvas.__massimoArCalibration || null,\n\t      textureHashData: textureFingerprint(textureCanvas),\n      widthCm: widthCm,\n      lengthCm: lengthCm,\n      shapeType: shapeType,\n      shapePayload: shape,\n      arMask: arMask,\n      alphaBBox: arMask && arMask.alphaBBox || null,\n      coverage: arMask && arMask.coverage || null,\n      edgeTreatment: isAmorfShape(shapeType) ? \"top-texture\" : \"standard-side\",\n      nativeArMode: isAmorfShape(shapeType) ? \"prebuilt-alpha-usdz\" : \"prebuilt-usdz\",\n      meshSource: meshSource,\n      meshPointCount: meshPointCount,\n      edgeType: domEdgeType || state.edgeType || last.edgeType || \"\",\n      edgeLabel: edgeLabel,\n      fabricLabel: fabricSummary.label || \"\",\n      fabricKey: fabricSource,\n      fabricColor: fabricColor,\n      qualityCode: qualityCode,\n      qualityLabel: config.qualityLabel || qualityCode || \"Massimo\",\n      patternCode: patternCode,\n      handle: handle,\n      title: title,\n      arProfileKey: arProfile.key,\n      arProfile: arProfile,\n      arCalibrationId: arProfile.calibrationId || \"\",\n      arCalibrationKey: arProfile.calibrationKey || \"\",\n      arCalibrationVersion: arProfile.calibrationVersion || \"\",\n      arReferenceSource: arProfile.referenceSource || \"\",\n      arReferenceMetrics: arProfile.referenceMetrics || null,\n      strictExact: strictExact,\n      materialProfile: materialProfile,\n      totalThicknessM: strictExact ? materialProfile.totalThicknessM : null,\n      textureTargetPx: strictExact ? chooseTextureTargetPx({\n        strictExact: true,\n        qualityCode: qualityCode,\n        textureCanvas: textureCanvas,\n        arSource: arRender ? { renderTargetSide: arRender.renderTargetSide || 0 } : null\n      }, { forUsdz: true }) : (isIOS() ? USDZ_TEXTURE_TARGET_PX : TEXTURE_TARGET_PX),\n      pileTextureUrl: pileTextureUrl,\n      designAssignments: arRender && Array.isArray(arRender.strictAssignments) ? arRender.strictAssignments : [],\n      arSource: arRender ? {\n        fallbackUsed: !!arRender.fallbackUsed,\n        designIgnoredForAr: !!arRender.designIgnoredForAr,\n        matchesDressingRender: !!arRender.matchesDressingRender,\n        explicitDesignAssignments: arRender.explicitDesignAssignments || 0,\n        sourceMode: arRender.sourceMode || \"\",\n        canvasWidth: arRender.canvasWidth || 0,\n        canvasHeight: arRender.canvasHeight || 0,\n        renderTargetSide: arRender.renderTargetSide || 0,\n        requestedImageWidth: arRender.requestedImageWidth || 0,\n        error: arRender.error || \"\"\n      } : null\n    };\n    activeSnapshot = snapshot;\n    window.__MASSIMO_AR_ACTIVE_SNAPSHOT__ = snapshot;\n    return snapshot;\n  }\n\n  function materialPreset(qualityCode) {\n    return MATERIAL_PRESETS[normalizeCode(qualityCode)] || MATERIAL_PRESETS.fallback;\n  }\n\n  function chooseTextureTargetPx(snapshot, options) {\n    options = options || {};\n    if (isCordobaStrictSnapshot(snapshot)) {\n      var sourceMax = Math.max(\n        snapshot && snapshot.textureCanvas && snapshot.textureCanvas.width || 0,\n        snapshot && snapshot.textureCanvas && snapshot.textureCanvas.height || 0,\n        snapshot && snapshot.arSource && snapshot.arSource.renderTargetSide || 0\n      );\n      if (sourceMax >= CORDOBA_STRICT_TEXTURE_TARGET_PX_MAX * 0.86) {\n        return CORDOBA_STRICT_TEXTURE_TARGET_PX_MAX;\n      }\n      return CORDOBA_STRICT_TEXTURE_TARGET_PX;\n    }\n    return options.forUsdz ? USDZ_TEXTURE_TARGET_PX : TEXTURE_TARGET_PX;\n  }\n\n  function floorAnchorPreset(preset) {\n    var sourceThickness = Number(preset && preset.thicknessM) || MATERIAL_PRESETS.fallback.thicknessM;\n    var visibleThickness = Math.max(\n      FLOOR_ANCHOR.minVisibleThicknessM,\n      Math.min(FLOOR_ANCHOR.maxVisibleThicknessM, sourceThickness * FLOOR_ANCHOR.visibleThicknessRatio)\n    );\n    var sink = Math.min(FLOOR_ANCHOR.sinkBelowFloorM, visibleThickness * 0.36);\n    return {\n      visibleThicknessM: visibleThickness,\n      sinkBelowFloorM: sink\n    };\n  }\n\n  function clampByte(value) {\n    return Math.max(0, Math.min(255, Math.round(value)));\n  }\n\n  function textileNoise01(x, y, salt) {\n    var n = (Math.imul((x | 0) + (salt | 0), 374761393) ^ Math.imul((y | 0) + ((salt || 1) * 3), 668265263)) >>> 0;\n    n = (n ^ (n >>> 13)) >>> 0;\n    n = Math.imul(n, 1274126177) >>> 0;\n    return ((n ^ (n >>> 16)) >>> 0) / 4294967295;\n  }\n\n  function loadArImage(src) {\n    return new Promise(function (resolve, reject) {\n      if (!src) return reject(new Error(\"AR body override source missing\"));\n      var img = new Image();\n      if (/^(https?:)?\\/\\//i.test(src)) img.crossOrigin = \"anonymous\";\n      img.onload = function () { resolve(img); };\n      img.onerror = function () { reject(new Error(\"AR body override image load failed: \" + src)); };\n      img.src = src;\n    });\n  }\n\n  function drawImageCoverRect(ctx, img, x, y, w, h) {\n    var iw = Number(img && (img.naturalWidth || img.width)) || 0;\n    var ih = Number(img && (img.naturalHeight || img.height)) || 0;\n    if (!ctx || iw < 1 || ih < 1 || w < 1 || h < 1) return false;\n    var scale = Math.max(w / iw, h / ih);\n    var dw = iw * scale;\n    var dh = ih * scale;\n    var dx = x + (w - dw) / 2;\n    var dy = y + (h - dh) / 2;\n    ctx.drawImage(img, dx, dy, dw, dh);\n    return true;\n  }\n\n  function rotateArImageSource(img, degrees) {\n    var angle = ((Math.round(Number(degrees) || 0) % 360) + 360) % 360;\n    if (!angle || !img) return img;\n    var iw = Number(img.naturalWidth || img.width || 0);\n    var ih = Number(img.naturalHeight || img.height || 0);\n    if (!(iw > 0) || !(ih > 0)) return img;\n    var swap = angle === 90 || angle === 270;\n    var out = document.createElement(\"canvas\");\n    out.width = swap ? ih : iw;\n    out.height = swap ? iw : ih;\n    var ctx = out.getContext(\"2d\");\n    ctx.imageSmoothingEnabled = false;\n    ctx.translate(out.width / 2, out.height / 2);\n    ctx.rotate(angle * Math.PI / 180);\n    ctx.drawImage(img, -iw / 2, -ih / 2, iw, ih);\n    return out;\n  }\n\n  function drawHorizontalProfileTexture(ctx, img, x, y, w, h, profile) {\n    var iw = Number(img && (img.naturalWidth || img.width)) || 0;\n    var ih = Number(img && (img.naturalHeight || img.height)) || 0;\n    w = Math.max(1, Math.round(w));\n    h = Math.max(1, Math.round(h));\n    if (!ctx || iw < 2 || ih < 2 || w < 2 || h < 2) return false;\n    var src = document.createElement(\"canvas\");\n    src.width = iw;\n    src.height = ih;\n    var sctx = src.getContext(\"2d\", { willReadFrequently: true });\n    sctx.imageSmoothingEnabled = false;\n    sctx.drawImage(img, 0, 0, iw, ih);\n    var srcData = sctx.getImageData(0, 0, iw, ih).data;\n    var sourceXs = [];\n    var ranges = Array.isArray(profile.nativeBodyOverrideProfileRanges) ? profile.nativeBodyOverrideProfileRanges : [];\n    for (var ri = 0; ri < ranges.length; ri++) {\n      var range = ranges[ri] || [];\n      var startPct = Math.max(0, Math.min(1, Number(range[0]) || 0));\n      var endPct = Math.max(0, Math.min(1, Number(range[1]) || 0));\n      var startX = Math.max(0, Math.min(iw - 1, Math.round(iw * Math.min(startPct, endPct))));\n      var endX = Math.max(startX + 1, Math.min(iw, Math.round(iw * Math.max(startPct, endPct))));\n      for (var rx = startX; rx < endX; rx++) sourceXs.push(rx);\n    }\n    if (!sourceXs.length) {\n      for (var allX = 0; allX < iw; allX++) sourceXs.push(allX);\n    }\n    var profileW = sourceXs.length;\n    var col = new Float32Array(profileW * 3);\n    var globalR = 0;\n    var globalG = 0;\n    var globalB = 0;\n    var minY = Math.max(0, Math.round(ih * 0.06));\n    var maxY = Math.max(minY + 1, Math.round(ih * 0.94));\n    var samplesY = Math.max(1, maxY - minY);\n    for (var sx = 0; sx < profileW; sx++) {\n      var sourceColumnX = sourceXs[sx];\n      var sr = 0;\n      var sg = 0;\n      var sb = 0;\n      for (var sy = minY; sy < maxY; sy++) {\n        var si = (sy * iw + sourceColumnX) * 4;\n        sr += srcData[si];\n        sg += srcData[si + 1];\n        sb += srcData[si + 2];\n      }\n      col[sx * 3] = sr / samplesY;\n      col[sx * 3 + 1] = sg / samplesY;\n      col[sx * 3 + 2] = sb / samplesY;\n      globalR += col[sx * 3];\n      globalG += col[sx * 3 + 1];\n      globalB += col[sx * 3 + 2];\n    }\n    globalR /= profileW;\n    globalG /= profileW;\n    globalB /= profileW;\n    // [SYNTH-RIB v40] Opt-in: profil kaynak fotograftan KOPYALANMAZ, matematiksel uretilir.\n    // Kaynak kiri (parcali kalin cizgiler, blok varyasyonu, kenar lekeleri) sifirlanir.\n    if (profile.nativeBodyOverrideProfileSynthetic === true) {\n      var synD = profile.nativeBodyOverrideSynthDarkRgb || { r: 126, g: 124, b: 123 };\n      var synL = profile.nativeBodyOverrideSynthLightRgb || { r: 233, g: 230, b: 228 };\n      var synDuty = Math.max(0.2, Math.min(0.6, Number(profile.nativeBodyOverrideSynthLightDuty) || 0.42));\n      var synSoft = Math.max(0.04, Math.min(0.3, Number(profile.nativeBodyOverrideSynthSoftPct) || 0.12));\n      var synOutPx = Math.max(4, Math.min(24, Number(profile.nativeBodyOverrideSynthPeriodOutPx) || 8));\n      var synBasis = Math.max(32, Number(profile.nativeBodyOverrideLineBasisPx) || 191);\n      var synPeriod = Math.max(6, Math.round(profileW * synOutPx / synBasis));\n      var synSeed = 1234567;\n      var synRand = function () { synSeed = (synSeed * 1664525 + 1013904223) >>> 0; return synSeed / 4294967296; };\n      for (var syI = 0; syI < profileW; syI++) {\n        var ph = (syI % synPeriod) / synPeriod;\n        var lightStart = 1 - synDuty;\n        var tEdge;\n        if (ph < lightStart - synSoft) tEdge = 0;\n        else if (ph < lightStart) tEdge = (ph - (lightStart - synSoft)) / synSoft;\n        else if (ph < 1 - synSoft) tEdge = 1;\n        else tEdge = 1 - (ph - (1 - synSoft)) / synSoft;\n        var jit = (synRand() - 0.5) * 4; // v42: satir-arasi jitter mipmap bantlasmasi yapiyordu\n        var ci3 = syI * 3;\n        col[ci3] = clampByte(synD.r + (synL.r - synD.r) * tEdge + jit);\n        col[ci3 + 1] = clampByte(synD.g + (synL.g - synD.g) * tEdge + jit);\n        col[ci3 + 2] = clampByte(synD.b + (synL.b - synD.b) * tEdge + jit);\n      }\n    } else\n    if (profile.nativeBodyOverrideProfileDetrend !== false) {\n      var windowPx = Math.max(7, Math.min(151, Math.round(Number(profile.nativeBodyOverrideProfileDetrendWindowPx) || 55)));\n      if (windowPx % 2 === 0) windowPx += 1;\n      var half = Math.floor(windowPx / 2);\n      var gain = Math.max(0.6, Math.min(2.4, Number(profile.nativeBodyOverrideProfileGain) || 1.4));\n      var detrended = new Float32Array(profileW * 3);\n      for (var dxp = 0; dxp < profileW; dxp++) {\n        var lr = 0;\n        var lg = 0;\n        var lb = 0;\n        var count = 0;\n        for (var k = -half; k <= half; k++) {\n          var px = (dxp + k + profileW) % profileW;\n          lr += col[px * 3];\n          lg += col[px * 3 + 1];\n          lb += col[px * 3 + 2];\n          count++;\n        }\n        var ci = dxp * 3;\n        detrended[ci] = clampByte(globalR + (col[ci] - lr / count) * gain);\n        detrended[ci + 1] = clampByte(globalG + (col[ci + 1] - lg / count) * gain);\n        detrended[ci + 2] = clampByte(globalB + (col[ci + 2] - lb / count) * gain);\n      }\n      col = detrended;\n    }\n    // [DUTY-GAMMA v36] Aydinlik dagilim asimetrisi (opt-in): gamma>1 koyu bantlari genisletir,\n    // parlak cukur cizgilerini ince tepelere indirger (gercek dokuma duty-cycle'i). Default 1 = etkisiz.\n    var dutyGamma = Math.max(0.5, Math.min(3, Number(profile.nativeBodyOverrideProfileGamma) || 1));\n    if (Math.abs(dutyGamma - 1) > 0.01) {\n      var gMin = 255, gMax = 0, gi, gy;\n      for (gi = 0; gi < profileW; gi++) {\n        gy = col[gi * 3] * 0.2126 + col[gi * 3 + 1] * 0.7152 + col[gi * 3 + 2] * 0.0722;\n        if (gy < gMin) gMin = gy;\n        if (gy > gMax) gMax = gy;\n      }\n      var gRange = Math.max(1, gMax - gMin);\n      for (gi = 0; gi < profileW; gi++) {\n        var gci = gi * 3;\n        var gYol = col[gci] * 0.2126 + col[gci + 1] * 0.7152 + col[gci + 2] * 0.0722;\n        if (gYol <= 0.5) continue;\n        var gT = Math.max(0, Math.min(1, (gYol - gMin) / gRange));\n        var gScale = (gMin + Math.pow(gT, dutyGamma) * gRange) / gYol;\n        col[gci] = clampByte(col[gci] * gScale);\n        col[gci + 1] = clampByte(col[gci + 1] * gScale);\n        col[gci + 2] = clampByte(col[gci + 2] * gScale);\n      }\n    }\n    // [DUTY-ERODE v38] 1D gri-erozyon (opt-in): parlak tepeleri yap\u0131sal daraltir, koyu vadileri genisletir.\n    var dutyErode = Math.max(0, Math.min(3, Math.round(Number(profile.nativeBodyOverrideProfileErodePx) || 0)));\n    for (var deIt = 0; deIt < dutyErode; deIt++) {\n      var eroded = new Float32Array(col);\n      for (var ei = 0; ei < profileW; ei++) {\n        var eL = (ei - 1 + profileW) % profileW;\n        var eR = (ei + 1) % profileW;\n        var yC = col[ei * 3] * 0.2126 + col[ei * 3 + 1] * 0.7152 + col[ei * 3 + 2] * 0.0722;\n        var yL = col[eL * 3] * 0.2126 + col[eL * 3 + 1] * 0.7152 + col[eL * 3 + 2] * 0.0722;\n        var yR = col[eR * 3] * 0.2126 + col[eR * 3 + 1] * 0.7152 + col[eR * 3 + 2] * 0.0722;\n        var pick = ei;\n        var yBest = yC;\n        if (yL < yBest) { pick = eL; yBest = yL; }\n        if (yR < yBest) { pick = eR; }\n        eroded[ei * 3] = col[pick * 3];\n        eroded[ei * 3 + 1] = col[pick * 3 + 1];\n        eroded[ei * 3 + 2] = col[pick * 3 + 2];\n      }\n      col = eroded;\n    }\n    // [WRAP-FADE v39] Profil dairesel tekrarinin bas-son sureksizligi her lineBasis'te yatay cizgi uretiyordu;\n    // basi, sonun uzantisiyla harmanla (genel guvenli: tum horizontal-profile kullanicilari).\n    var wfN = Math.max(4, Math.min(32, Math.round(profileW * 0.05)));\n    if (profileW > wfN * 3) {\n      for (var wfI = 0; wfI < wfN; wfI++) {\n        var wfT = (wfI + 0.5) / wfN;\n        var wfSrc = (profileW - wfN + wfI) * 3;\n        var wfDst = wfI * 3;\n        col[wfDst] = col[wfDst] * wfT + col[wfSrc] * (1 - wfT);\n        col[wfDst + 1] = col[wfDst + 1] * wfT + col[wfSrc + 1] * (1 - wfT);\n        col[wfDst + 2] = col[wfDst + 2] * wfT + col[wfSrc + 2] * (1 - wfT);\n      }\n    }\n    var mix = Math.max(0, Math.min(0.45, Number(profile.nativeBodyOverrideFiberMix) || 0.22));\n    var lineBasis = Math.max(1, Number(profile.nativeBodyOverrideLineBasisPx) || Math.max(w, h));\n    var lineScale = profileW / lineBasis;\n    var out = ctx.createImageData(w, h);\n    var outData = out.data;\n    for (var dy = 0; dy < h; dy++) {\n      var sourceX = ((dy * lineScale) % profileW + profileW) % profileW;\n      var x0 = Math.floor(sourceX);\n      var x1 = (x0 + 1) % profileW;\n      var t = sourceX - x0;\n      var c0 = x0 * 3;\n      var c1 = x1 * 3;\n      var pr = col[c0] * (1 - t) + col[c1] * t;\n      var pg = col[c0 + 1] * (1 - t) + col[c1 + 1] * t;\n      var pb = col[c0 + 2] * (1 - t) + col[c1 + 2] * t;\n      // [LINE-BREAKUP v132] Acik fitil boyunca segmentli parlama (gercek iplik bukumu gorunumu).\n      // Opt-in: synthLineBreakup* profil alanlari yoksa buOn=false, davranis birebir eski.\n      var buMinPx = Math.max(2, Math.round(Number(profile.synthLineBreakupMinPx) || 0));\n      var buMaxPx = Math.max(buMinPx + 1, Math.round(Number(profile.synthLineBreakupMaxPx) || 0));\n      var buDuty = Math.max(0, Math.min(1, Number(profile.synthLineBreakupDuty) || 0));\n      var buDimLo = Math.max(0.2, Math.min(1, Number(profile.synthLineBreakupDimLo) || 0.6));\n      var buDimHi = Math.max(buDimLo, Math.min(1, Number(profile.synthLineBreakupDimHi) || 0.85));\n      var buLumaMin = Number(profile.synthLineBreakupLumaMin) || 1e9;\n      var buOn = buDuty > 0 && (pr * 0.2126 + pg * 0.7152 + pb * 0.0722) >= buLumaMin;\n      var buSeed = ((dy * 2654435761) ^ 0x9E3779B9) >>> 0;\n      var buRand = function () { buSeed = (buSeed * 1664525 + 1013904223) >>> 0; return buSeed / 4294967296; };\n      var buLeft = 0;\n      var buF = 1;\n      for (var dx = 0; dx < w; dx++) {\n        var srcY = Math.max(0, Math.min(ih - 1, Math.round((dx / Math.max(1, w - 1)) * (ih - 1))));\n        var local = (srcY * iw + sourceXs[x0]) * 4;\n        var oi = (dy * w + dx) * 4;\n        var bf = 1;\n        if (buOn) {\n          if (buLeft <= 0) {\n            buLeft = buMinPx + Math.floor(buRand() * (buMaxPx - buMinPx));\n            buF = buRand() < buDuty ? (0.94 + buRand() * 0.06) : (buDimLo + buRand() * (buDimHi - buDimLo));\n          }\n          buLeft--;\n          bf = buF;\n        }\n        outData[oi] = clampByte(pr * bf * (1 - mix) + srcData[local] * mix);\n        outData[oi + 1] = clampByte(pg * bf * (1 - mix) + srcData[local + 1] * mix);\n        outData[oi + 2] = clampByte(pb * bf * (1 - mix) + srcData[local + 2] * mix);\n        outData[oi + 3] = 255;\n      }\n    }\n    ctx.putImageData(out, Math.round(x), Math.round(y));\n    return true;\n  }\n\n  async function applyNativeBodyTextureOverride(canvas, profile) {\n    if (!canvas || !canvas.width || !canvas.height || !profile || !profile.nativeBodyOverrideImage) return canvas;\n    var img = rotateArImageSource(await loadArImage(profile.nativeBodyOverrideImage), profile.nativeBodyOverrideRotateDeg);\n    var xInset = Math.max(0, Math.min(0.22, Number(profile.nativeBodyOverrideInsetXPct) || 0.055));\n    var yInset = Math.max(0, Math.min(0.22, Number(profile.nativeBodyOverrideInsetYPct) || 0.045));\n    var x = Math.round(canvas.width * xInset);\n    var y = Math.round(canvas.height * yInset);\n    var w = Math.max(1, canvas.width - x * 2);\n    var h = Math.max(1, canvas.height - y * 2);\n    var ctx = canvas.getContext(\"2d\", { willReadFrequently: true });\n    ctx.save();\n    ctx.beginPath();\n    ctx.rect(x, y, w, h);\n    ctx.clip();\n    ctx.imageSmoothingEnabled = profile.nativeBodyOverrideSmoothing !== false;\n    if (ctx.imageSmoothingEnabled) ctx.imageSmoothingQuality = \"high\";\n    var fitMode = String(profile.nativeBodyOverrideFit || \"\").toLowerCase();\n    if (fitMode === \"stretch\") {\n      ctx.drawImage(img, x, y, w, h);\n    } else if (fitMode === \"tile-y\") {\n      var repeatY = Math.max(1, Math.min(8, Number(profile.nativeBodyOverrideRepeatY) || 1));\n      var tileH = h / repeatY;\n      var mirrorY = profile.nativeBodyOverrideMirrorY === true;\n      var iw = Number(img.naturalWidth || img.width || 0);\n      var ih = Number(img.naturalHeight || img.height || 0);\n      var sourceY0Pct = Math.max(0, Math.min(0.98, Number(profile.nativeBodyOverrideTileSourceY0Pct) || 0));\n      var sourceY1Pct = Math.max(sourceY0Pct + 0.01, Math.min(1, Number(profile.nativeBodyOverrideTileSourceY1Pct) || 1));\n      var sy0 = Math.round(ih * sourceY0Pct);\n      var sh = Math.max(1, Math.round(ih * sourceY1Pct) - sy0);\n      for (var ry = 0; ry < Math.ceil(repeatY); ry++) {\n        var drawY = y + ry * tileH;\n        if (mirrorY && ry % 2) {\n          ctx.save();\n          ctx.translate(x, drawY + tileH);\n          ctx.scale(1, -1);\n          ctx.drawImage(img, 0, sy0, iw, sh, 0, 0, w, tileH + 1);\n          ctx.restore();\n        } else {\n          ctx.drawImage(img, 0, sy0, iw, sh, x, drawY, w, tileH + 1);\n        }\n      }\n    } else if (fitMode === \"horizontal-profile\") {\n      drawHorizontalProfileTexture(ctx, img, x, y, w, h, profile);\n    } else if (fitMode === \"fit-x-tile-y\") {\n      var scaledH = Math.max(1, Math.round(img.height * (w / Math.max(1, img.width))));\n      var startY = y - (scaledH - (y % scaledH));\n      for (var ty = startY; ty < y + h; ty += scaledH) {\n        ctx.drawImage(img, x, ty, w, scaledH);\n      }\n    } else if (fitMode === \"preserve-line-scale\") {\n      var lineScale = w / Math.max(1, img.height);\n      var scaledW = Math.max(1, Math.round(img.width * lineScale));\n      var scaledH2 = Math.max(h, Math.round(img.height * lineScale));\n      var startX = x - (scaledW - (x % scaledW));\n      var offsetY = y - Math.round((scaledH2 - h) * 0.50);\n      for (var tx = startX; tx < x + w; tx += scaledW) {\n        ctx.drawImage(img, tx, offsetY, scaledW, scaledH2);\n      }\n    } else {\n      drawImageCoverRect(ctx, img, x, y, w, h);\n    }\n    ctx.restore();\n    canvas.__massimoNativeBodyOverride = {\n      source: profile.nativeBodyOverrideImage,\n      x: x,\n      y: y,\n      width: w,\n      height: h,\n      build: BUILD,\n      calibrationId: profile.calibrationId || \"\"\n    };\n    return canvas;\n  }\n\n  function applyArTextureCalibration(source, profile) {\n    profile = Object.assign({}, AR_QUALITY_PROFILES.fallback, profile || {});\n    var needsColor = Math.abs((Number(profile.brightness) || 1) - 1) > 0.001\n      || Math.abs((Number(profile.contrast) || 1) - 1) > 0.001\n      || Math.abs((Number(profile.saturation) || 1) - 1) > 0.001\n      || Math.abs(Number(profile.warmth) || 0) > 0.001\n      || Math.abs(Number(profile.grayMix) || 0) > 0.001\n      || Math.abs(Number(profile.rgbShiftR) || 0) > 0.001\n      || Math.abs(Number(profile.rgbShiftG) || 0) > 0.001\n      || Math.abs(Number(profile.rgbShiftB) || 0) > 0.001;\n    if (!source || !source.width || !source.height || !needsColor) return source;\n    var out = document.createElement(\"canvas\");\n    out.width = source.width;\n    out.height = source.height;\n    var ctx = out.getContext(\"2d\", { willReadFrequently: true });\n    ctx.drawImage(source, 0, 0);\n    try {\n      var image = ctx.getImageData(0, 0, out.width, out.height);\n      var data = image.data;\n      var brightness = Number(profile.brightness) || 1;\n      var contrast = Number(profile.contrast) || 1;\n      var saturation = Number(profile.saturation) || 1;\n      var warmth = Number(profile.warmth) || 0;\n      var grayMix = Math.max(0, Math.min(0.45, Number(profile.grayMix) || 0));\n      var rgbShiftR = Number(profile.rgbShiftR) || 0;\n      var rgbShiftG = Number(profile.rgbShiftG) || 0;\n      var rgbShiftB = Number(profile.rgbShiftB) || 0;\n      for (var i = 0; i < data.length; i += 4) {\n        if (data[i + 3] < 24) continue;\n        var r = data[i];\n        var g = data[i + 1];\n        var b = data[i + 2];\n        var y = r * 0.2126 + g * 0.7152 + b * 0.0722;\n        r = y + (r - y) * saturation;\n        g = y + (g - y) * saturation;\n        b = y + (b - y) * saturation;\n        if (grayMix > 0) {\n          r = r * (1 - grayMix) + y * grayMix;\n          g = g * (1 - grayMix) + y * grayMix;\n          b = b * (1 - grayMix) + y * grayMix;\n        }\n        r = (r - 128) * contrast + 128;\n        g = (g - 128) * contrast + 128;\n        b = (b - 128) * contrast + 128;\n        r = r * brightness + warmth;\n        g = g * brightness + warmth * 0.25;\n        b = b * brightness - warmth * 0.45;\n        data[i] = clampByte(r + rgbShiftR);\n        data[i + 1] = clampByte(g + rgbShiftG);\n        data[i + 2] = clampByte(b + rgbShiftB);\n      }\n      ctx.putImageData(image, 0, 0);\n      out.__massimoArCalibration = {\n        profileKey: profile.key || \"fallback\",\n        version: profile.version || AR_PROFILE_VERSION,\n        brightness: brightness,\n        contrast: contrast,\n        saturation: saturation,\n        warmth: warmth,\n        grayMix: grayMix,\n        rgbShiftR: rgbShiftR,\n        rgbShiftG: rgbShiftG,\n        rgbShiftB: rgbShiftB,\n        calibrationId: profile.calibrationId || \"\",\n        calibrationKey: profile.calibrationKey || \"\"\n      };\n    } catch (err) {\n      return source;\n    }\n    return out;\n  }\n\n  function buildPileTextureCanvas(source, preset) {\n    var strength = Number(preset && preset.pileTextureStrength) || 0;\n    if (!source || !source.width || !source.height || strength <= 0) return source;\n    var out = document.createElement(\"canvas\");\n    out.width = source.width;\n    out.height = source.height;\n    var ctx = out.getContext(\"2d\", { willReadFrequently: true });\n    ctx.drawImage(source, 0, 0);\n    var image = ctx.getImageData(0, 0, out.width, out.height);\n    var data = image.data;\n    var w = out.width;\n    var h = out.height;\n    for (var y = 0; y < h; y++) {\n      for (var x = 0; x < w; x++) {\n        var i = (y * w + x) * 4;\n        var a = data[i + 3];\n        if (a < 24) continue;\n        var fine = textileNoise01(x, y, 17) - 0.5;\n        var tuft = textileNoise01(x >> 2, y >> 2, 43) - 0.5;\n        var broadTuft = textileNoise01(x >> 4, y >> 4, 71) - 0.5;\n        var strandA = Math.sin((x * 0.42 + y * 1.85) + textileNoise01(x >> 3, y >> 3, 89) * 2.4);\n        var strandB = Math.sin((x * 1.35 - y * 0.26) * 0.58);\n        var nap = Math.sin((x + y) * 0.055 + textileNoise01(x >> 5, y >> 5, 177) * 4.2);\n        var lift = Math.max(0, textileNoise01(x >> 1, y >> 1, 313) - 0.54) * 38 * strength;\n        var shade = (fine * 52 + tuft * 62 + broadTuft * 42 + strandA * 18 + strandB * 12 + nap * 20) * strength;\n        data[i] = clampByte(data[i] + shade + lift + (textileNoise01(x, y, 91) - 0.5) * 22 * strength);\n        data[i + 1] = clampByte(data[i + 1] + shade + lift * 0.82 + (textileNoise01(x, y, 123) - 0.5) * 18 * strength);\n        data[i + 2] = clampByte(data[i + 2] + shade * 0.9 + lift * 0.66 + (textileNoise01(x, y, 151) - 0.5) * 16 * strength);\n      }\n    }\n    ctx.putImageData(image, 0, 0);\n    return out;\n  }\n\n  function buildHeightCanvas(source, preset) {\n    var out = document.createElement(\"canvas\");\n    out.width = source.width;\n    out.height = source.height;\n    var ctx = out.getContext(\"2d\", { willReadFrequently: true });\n    ctx.drawImage(source, 0, 0);\n    var image = ctx.getImageData(0, 0, out.width, out.height);\n    var data = image.data;\n    var w = out.width;\n    var h = out.height;\n    var noiseStrength = Number(preset && preset.heightNoiseStrength) || 0.08;\n    for (var y = 0; y < h; y++) {\n      for (var x = 0; x < w; x++) {\n        var i = (y * w + x) * 4;\n        if (data[i + 3] < 24) {\n          data[i] = 0;\n          data[i + 1] = 0;\n          data[i + 2] = 0;\n          data[i + 3] = 0;\n          continue;\n        }\n        var lum = data[i] * 0.2126 + data[i + 1] * 0.7152 + data[i + 2] * 0.0722;\n        var fine = textileNoise01(x, y, 211) - 0.5;\n        var tuft = textileNoise01(x >> 3, y >> 3, 251) - 0.5;\n        var strand = ((((x * 5 + y * 13) & 63) / 63) - 0.5);\n        var softRidge = Math.sin((x * 0.58 + y * 1.74) * 0.8);\n        var height = 146 + (lum - 128) * 0.55\n          + fine * 190 * noiseStrength\n          + tuft * 130 * noiseStrength\n          + strand * 90 * noiseStrength\n          + softRidge * 70 * noiseStrength;\n        height = clampByte(height);\n        data[i] = height;\n        data[i + 1] = height;\n        data[i + 2] = height;\n        data[i + 3] = 255;\n      }\n    }\n    ctx.putImageData(image, 0, 0);\n    return out;\n  }\n\n  function buildNormalCanvas(heightCanvas, preset) {\n    if (!heightCanvas || !heightCanvas.width || !heightCanvas.height) return heightCanvas;\n    var w = heightCanvas.width;\n    var h = heightCanvas.height;\n    var srcCtx = heightCanvas.getContext(\"2d\", { willReadFrequently: true });\n    var src = srcCtx.getImageData(0, 0, w, h);\n    var srcData = src.data;\n    var out = document.createElement(\"canvas\");\n    out.width = w;\n    out.height = h;\n    var ctx = out.getContext(\"2d\", { willReadFrequently: true });\n    var image = ctx.createImageData(w, h);\n    var data = image.data;\n    var strength = Math.max(0.05, Number(preset && preset.normalScale) || 0.13) * 3.2;\n\n    function sample(ix, iy) {\n      ix = Math.max(0, Math.min(w - 1, ix));\n      iy = Math.max(0, Math.min(h - 1, iy));\n      var p = (iy * w + ix) * 4;\n      if (srcData[p + 3] < 24) return 0.5;\n      return srcData[p] / 255;\n    }\n\n    for (var y = 0; y < h; y++) {\n      for (var x = 0; x < w; x++) {\n        var i = (y * w + x) * 4;\n        if (srcData[i + 3] < 24) {\n          data[i] = 128;\n          data[i + 1] = 128;\n          data[i + 2] = 255;\n          data[i + 3] = 0;\n          continue;\n        }\n        var dx = sample(x + 1, y) - sample(x - 1, y);\n        var dy = sample(x, y + 1) - sample(x, y - 1);\n        var nx = -dx * strength;\n        var ny = -dy * strength;\n        var nz = 1;\n        var invLen = 1 / Math.sqrt(nx * nx + ny * ny + nz * nz);\n        nx *= invLen;\n        ny *= invLen;\n        nz *= invLen;\n        data[i] = clampByte((nx * 0.5 + 0.5) * 255);\n        data[i + 1] = clampByte((ny * 0.5 + 0.5) * 255);\n        data[i + 2] = clampByte((nz * 0.5 + 0.5) * 255);\n        data[i + 3] = 255;\n      }\n    }\n    ctx.putImageData(image, 0, 0);\n    return out;\n  }\n\n  function averageOpaqueHex(canvas, darken) {\n    if (!canvas || !canvas.width || !canvas.height) return 0x4b453e;\n    darken = Number(darken) || 0.64;\n    try {\n      var ctx = canvas.getContext(\"2d\", { willReadFrequently: true });\n      var image = ctx.getImageData(0, 0, canvas.width, canvas.height);\n      var data = image.data;\n      var step = Math.max(1, Math.floor(Math.min(canvas.width, canvas.height) / 180));\n      var r = 0;\n      var g = 0;\n      var b = 0;\n      var count = 0;\n      for (var y = 0; y < canvas.height; y += step) {\n        for (var x = 0; x < canvas.width; x += step) {\n          var i = (y * canvas.width + x) * 4;\n          if (data[i + 3] < 180) continue;\n          r += data[i];\n          g += data[i + 1];\n          b += data[i + 2];\n          count++;\n        }\n      }\n      if (!count) return 0x4b453e;\n      r = clampByte((r / count) * darken);\n      g = clampByte((g / count) * darken);\n      b = clampByte((b / count) * darken);\n      return (r << 16) | (g << 8) | b;\n    } catch (err) {\n      return 0x4b453e;\n    }\n  }\n\n  function softRugSideHex(canvas, darken) {\n    var hex = averageOpaqueHex(canvas, Math.max(0.9, Number(darken) || 0.9));\n    var r = (hex >> 16) & 255;\n    var g = (hex >> 8) & 255;\n    var b = hex & 255;\n    var base = { r: 142, g: 134, b: 124 };\n    var mix = 0.34;\n    r = clampByte(r * mix + base.r * (1 - mix));\n    g = clampByte(g * mix + base.g * (1 - mix));\n    b = clampByte(b * mix + base.b * (1 - mix));\n    return (r << 16) | (g << 8) | b;\n  }\n\n  function sampleBindingEdgeHex(canvas, fallbackHex) {\n    fallbackHex = fallbackHex || 0x819298;\n    if (!canvas || !canvas.width || !canvas.height) return fallbackHex;\n    try {\n      var ctx = canvas.getContext(\"2d\", { willReadFrequently: true });\n      var image = ctx.getImageData(0, 0, canvas.width, canvas.height);\n      var data = image.data;\n      var w = canvas.width;\n      var h = canvas.height;\n      var band = Math.max(5, Math.round(Math.min(w, h) * 0.035));\n      var r = 0;\n      var g = 0;\n      var b = 0;\n      var count = 0;\n      var step = Math.max(1, Math.floor(Math.min(w, h) / 260));\n      for (var y = 0; y < h; y += step) {\n        for (var x = 0; x < w; x += step) {\n          if (x > band && y > band && x < w - band && y < h - band) continue;\n          var i = (y * w + x) * 4;\n          if (data[i + 3] < 150) continue;\n          var lum = data[i] * 0.2126 + data[i + 1] * 0.7152 + data[i + 2] * 0.0722;\n          if (lum > 226) continue;\n          r += data[i];\n          g += data[i + 1];\n          b += data[i + 2];\n          count++;\n        }\n      }\n      if (count < 12) return fallbackHex;\n      r = clampByte(r / count);\n      g = clampByte(g / count);\n      b = clampByte(b / count);\n      return (r << 16) | (g << 8) | b;\n    } catch (err) {\n      return fallbackHex;\n    }\n  }\n\n  function buildRugSideTextureCanvas(hex, preset, depthM, isCordoba) {\n    var w = 384;\n    var h = 1024;\n    var out = document.createElement(\"canvas\");\n    out.width = w;\n    out.height = h;\n    var ctx = out.getContext(\"2d\", { willReadFrequently: true });\n    var image = ctx.createImageData(w, h);\n    var data = image.data;\n    var r = (hex >> 16) & 255;\n    var g = (hex >> 8) & 255;\n    var b = hex & 255;\n    var strength = isCordoba ? 1.12 : 0.78;\n    var thicknessShade = Math.max(0.55, Math.min(1.2, Number(depthM || 0.012) / 0.0155));\n    for (var y = 0; y < h; y++) {\n      var v = y / Math.max(1, h - 1);\n      var topCushion = Math.max(0, 1 - v / 0.18);\n      var backingShade = Math.max(0, (v - 0.76) / 0.24);\n      for (var x = 0; x < w; x++) {\n        var i = (y * w + x) * 4;\n        var strand = Math.sin(x * 0.74 + textileNoise01(x >> 2, y >> 5, 571) * 3.5);\n        var fine = textileNoise01(x, y, 593) - 0.5;\n        var tuft = textileNoise01(x >> 2, y >> 3, 617) - 0.5;\n        var verticalFiber = textileNoise01(x >> 1, y >> 1, 641) - 0.5;\n        var sideLayer = Math.sin(y * 0.055 + textileNoise01(x >> 4, y >> 5, 653) * 4.2);\n        var shade = (strand * 17 + fine * 32 + tuft * 42 + verticalFiber * 28 + sideLayer * 9) * strength * thicknessShade;\n        shade += topCushion * 18 * strength;\n        shade -= backingShade * 22;\n        data[i] = clampByte(r + shade);\n        data[i + 1] = clampByte(g + shade * 0.92);\n        data[i + 2] = clampByte(b + shade * 0.84);\n        data[i + 3] = 255;\n      }\n    }\n    ctx.putImageData(image, 0, 0);\n    return out;\n  }\n\n  function buildUsdzTextureAtlas(topCanvas, sideCanvas, profile) {\n    if (!topCanvas || !topCanvas.width || !topCanvas.height || !sideCanvas) {\n      return { canvas: topCanvas, topUMax: 1, sideUStart: 0, sideUSpan: 1 };\n    }\n    profile = profile || {};\n    var sidePct = Math.max(0.024, Math.min(0.06, Number(profile.sideAtlasWidthPct) || 0.06));\n    var minSideW = sidePct < 0.045 ? 40 : 64;\n    var sideW = Math.max(minSideW, Math.min(160, Math.round(topCanvas.width * sidePct)));\n    var guardW = 8; // [ATLAS-GUARD v39] top|side sinir kanamasi (mipmap) bordur yaninda acik serit yapiyordu\n    var out = document.createElement(\"canvas\");\n    out.width = topCanvas.width + guardW + sideW;\n    out.height = topCanvas.height;\n    var ctx = out.getContext(\"2d\");\n    ctx.imageSmoothingEnabled = true;\n    ctx.imageSmoothingQuality = \"high\";\n    ctx.drawImage(topCanvas, 0, 0, topCanvas.width, topCanvas.height);\n    ctx.drawImage(topCanvas, topCanvas.width - 1, 0, 1, topCanvas.height, topCanvas.width, 0, Math.ceil(guardW / 2), topCanvas.height);\n    ctx.drawImage(sideCanvas, 0, 0, 1, sideCanvas.height, topCanvas.width + Math.ceil(guardW / 2), 0, Math.floor(guardW / 2), topCanvas.height);\n    ctx.drawImage(sideCanvas, topCanvas.width + guardW, 0, sideW, topCanvas.height);\n    return {\n      canvas: out,\n      topUMax: topCanvas.width / out.width,\n      sideUStart: (topCanvas.width + guardW) / out.width,\n      sideUSpan: sideW / out.width\n    };\n  }\n\n  function buildAlphaMapCanvas(source) {\n    var out = document.createElement(\"canvas\");\n    out.width = source.width;\n    out.height = source.height;\n    var ctx = out.getContext(\"2d\", { willReadFrequently: true });\n    ctx.drawImage(source, 0, 0);\n    var image = ctx.getImageData(0, 0, out.width, out.height);\n    var data = image.data;\n    for (var i = 0; i < data.length; i += 4) {\n      var a = data[i + 3];\n      data[i] = a;\n      data[i + 1] = a;\n      data[i + 2] = a;\n      data[i + 3] = 255;\n    }\n    ctx.putImageData(image, 0, 0);\n    return out;\n  }\n\n  function makeThreeShape(THREE, snapshot, textureCanvas) {\n    var shape = new THREE.Shape();\n    var type = normalizeShape(snapshot.shapeType);\n    var widthM = Math.max(0.1, Number(snapshot.widthCm || 160) / 100);\n    var lengthM = Math.max(0.1, Number(snapshot.lengthCm || 230) / 100);\n    var halfW = widthM / 2;\n    var halfL = lengthM / 2;\n\n    if (type === \"oval\" || type === \"yuvarlak\") {\n      var radiusX = type === \"yuvarlak\" ? Math.min(halfW, halfL) : halfW;\n      var radiusY = type === \"yuvarlak\" ? Math.min(halfW, halfL) : halfL;\n      for (var i = 0; i <= 128; i++) {\n        var a = (i / 128) * Math.PI * 2;\n        var x = Math.cos(a) * radiusX;\n        var y = Math.sin(a) * radiusY;\n        if (i === 0) shape.moveTo(x, y);\n        else shape.lineTo(x, y);\n      }\n      shape.closePath();\n      return shape;\n    }\n\n    if (type === \"amorf\") {\n      var amorf = silhouettePathPoints(snapshot, widthM, lengthM);\n      if (amorf && appendLinearThreePath(shape, amorf.points)) {\n        shape.userData = {\n          massimoSource: \"alpha-silhouette-contour\",\n          pointCount: amorf.points.length,\n          maskSource: snapshot.arMask && snapshot.arMask.source || \"\"\n        };\n        return shape;\n      }\n      throw new Error(\"Massimo amorf AR alpha s\u0131n\u0131r\u0131 \u00E7\u0131kar\u0131lamad\u0131.\");\n    }\n\n    var r = Math.min(0.018, Math.min(widthM, lengthM) / 18);\n    shape.moveTo(-halfW + r, -halfL);\n    shape.lineTo(halfW - r, -halfL);\n    shape.quadraticCurveTo(halfW, -halfL, halfW, -halfL + r);\n    shape.lineTo(halfW, halfL - r);\n    shape.quadraticCurveTo(halfW, halfL, halfW - r, halfL);\n    shape.lineTo(-halfW + r, halfL);\n    shape.quadraticCurveTo(-halfW, halfL, -halfW, halfL - r);\n    shape.lineTo(-halfW, -halfL + r);\n    shape.quadraticCurveTo(-halfW, -halfL, -halfW + r, -halfL);\n    return shape;\n  }\n\n  function assignTopUv(THREE, geometry, alphaBbox) {\n    alphaBbox = alphaBbox || { uMin: 0, uMax: 1, vMin: 0, vMax: 1 };\n    geometry.computeBoundingBox();\n    var bb = geometry.boundingBox;\n    var bbW = (bb.max.x - bb.min.x) || 1;\n    var bbH = (bb.max.y - bb.min.y) || 1;\n    var uMin = finiteNumber(alphaBbox.uMin, 0);\n    var uMax = finiteNumber(alphaBbox.uMax, 1);\n    var vMin = finiteNumber(alphaBbox.vMin, 0);\n    var vMax = finiteNumber(alphaBbox.vMax, 1);\n    var uW = Math.max(0.001, uMax - uMin);\n    var vH = Math.max(0.001, vMax - vMin);\n    var position = geometry.attributes.position;\n    var uv = [];\n    for (var i = 0; i < position.count; i++) {\n      var x = position.getX(i);\n      var y = position.getY(i);\n      var sN = (x - bb.min.x) / bbW;\n      var tN = 1 - ((y - bb.min.y) / bbH);\n      uv.push(uMin + sN * uW);\n      uv.push(vMin + tN * vH);\n    }\n    geometry.setAttribute(\"uv\", new THREE.Float32BufferAttribute(uv, 2));\n  }\n\n  function remapTopUvToAtlas(geometry, topUMax) {\n    if (!geometry || !geometry.attributes || !geometry.attributes.uv || !(topUMax > 0) || topUMax >= 0.999) return;\n    var groups = geometry.groups || [];\n    var uv = geometry.attributes.uv;\n    var index = geometry.index;\n    if (!groups.length) {\n      for (var a = 0; a < uv.count; a++) uv.setX(a, uv.getX(a) * topUMax);\n      uv.needsUpdate = true;\n      return;\n    }\n    for (var g = 0; g < groups.length; g++) {\n      var group = groups[g];\n      if (group.materialIndex === 1) continue;\n      var end = group.start + group.count;\n      for (var i = group.start; i < end; i++) {\n        var vi = index ? index.getX(i) : i;\n        uv.setX(vi, uv.getX(vi) * topUMax);\n      }\n    }\n    uv.needsUpdate = true;\n  }\n\n  function assignSideUvFromDepth(geometry, depthM, sideUStart, sideUSpan) {\n    if (!geometry || !geometry.attributes || !geometry.attributes.position || !geometry.attributes.uv) return;\n    var groups = geometry.groups || [];\n    if (!groups.length) return;\n    var position = geometry.attributes.position;\n    var uv = geometry.attributes.uv;\n    var index = geometry.index;\n    var depth = Math.max(0.001, Number(depthM) || 0.01);\n    var uStart = Number(sideUStart);\n    var uSpan = Number(sideUSpan);\n    if (!Number.isFinite(uStart)) uStart = 0;\n    if (!Number.isFinite(uSpan) || uSpan <= 0) uSpan = 1;\n    for (var g = 0; g < groups.length; g++) {\n      var group = groups[g];\n      if (group.materialIndex !== 1) continue;\n      var end = group.start + group.count;\n      for (var i = group.start; i < end; i++) {\n        var vi = index ? index.getX(i) : i;\n        var x = position.getX(vi);\n        var y = position.getY(vi);\n        var z = position.getZ(vi);\n        var u = (x * 1.91 + y * 2.37) * 0.35;\n        u = u - Math.floor(u);\n        uv.setXY(vi, uStart + u * uSpan, 1 - Math.max(0, Math.min(1, z / depth)));\n      }\n    }\n    uv.needsUpdate = true;\n  }\n\n  function applyPileVertexLift(geometry, preset, depthM) {\n    var liftM = Number(preset && preset.pileLiftM) || 0;\n    if (!geometry || !geometry.attributes || !geometry.attributes.position || liftM <= 0) return;\n    geometry.computeBoundingBox();\n    var bb = geometry.boundingBox;\n    var topY = bb.max.y;\n    var band = Math.max(0.001, Number(depthM || 0.01) * 0.58);\n    var position = geometry.attributes.position;\n    for (var i = 0; i < position.count; i++) {\n      var y = position.getY(i);\n      var topRatio = 1 - Math.min(1, Math.max(0, (topY - y) / band));\n      if (topRatio <= 0) continue;\n      var x = position.getX(i);\n      var z = position.getZ(i);\n      var n = textileNoise01(Math.round((x + 8) * 280), Math.round((z + 8) * 280), 307);\n      position.setY(i, y + liftM * topRatio * (0.36 + n * 0.64));\n    }\n    position.needsUpdate = true;\n  }\n\n  function applyCordobaSourceHeightBake(geometry, textureCanvas, depthM) {\n    if (!geometry || !geometry.attributes || !geometry.attributes.position || !geometry.attributes.uv) return;\n    if (!textureCanvas || !textureCanvas.width || !textureCanvas.height) return;\n    geometry.computeBoundingBox();\n    var bb = geometry.boundingBox;\n    var topY = bb.max.y;\n    var depth = Math.max(0.001, Number(depthM) || 0.0155);\n    var band = Math.max(0.001, depth * 0.20);\n    var ctx = textureCanvas.getContext(\"2d\", { willReadFrequently: true });\n    var image = ctx.getImageData(0, 0, textureCanvas.width, textureCanvas.height);\n    var data = image.data;\n    var w = textureCanvas.width;\n    var h = textureCanvas.height;\n    var position = geometry.attributes.position;\n    var uv = geometry.attributes.uv;\n    function sampleHeight(u, v) {\n      var x = Math.max(0, Math.min(w - 1, Math.round(u * (w - 1))));\n      var y = Math.max(0, Math.min(h - 1, Math.round(v * (h - 1))));\n      var i = (y * w + x) * 4;\n      if (data[i + 3] < 24) return 0;\n      var lum = (data[i] * 0.2126 + data[i + 1] * 0.7152 + data[i + 2] * 0.0722) / 255;\n      var fiber = textileNoise01(x >> 1, y >> 1, 883) - 0.5;\n      return (lum - 0.5) * 0.00052 + fiber * 0.00016;\n    }\n    for (var i = 0; i < position.count; i++) {\n      var y = position.getY(i);\n      var topRatio = 1 - Math.min(1, Math.max(0, (topY - y) / band));\n      if (topRatio <= 0) continue;\n      var lift = sampleHeight(uv.getX(i), uv.getY(i)) * topRatio;\n      position.setY(i, y + lift);\n    }\n    position.needsUpdate = true;\n    geometry.computeVertexNormals();\n  }\n\n  function applyNativeSoftEdgeGeometry(geometry, depthM, isCordoba, isAmorf) {\n    if (!geometry || !geometry.attributes || !geometry.attributes.position) return;\n    if (!isCordoba) return;\n    if (!geometry.attributes.normal) geometry.computeVertexNormals();\n    geometry.computeBoundingBox();\n    var bb = geometry.boundingBox;\n    var topY = bb.max.y;\n    var bottomY = bb.min.y;\n    var depth = Math.max(0.001, Number(depthM) || (topY - bottomY) || 0.012);\n    var position = geometry.attributes.position;\n    var normal = geometry.attributes.normal;\n    var outwardMax = isAmorf ? 0.00055 : 0.00038;\n    var topLipMax = isAmorf ? 0.00042 : 0.00028;\n    for (var i = 0; i < position.count; i++) {\n      var nx = normal.getX(i);\n      var ny = normal.getY(i);\n      var nz = normal.getZ(i);\n      var sideRatio = 1 - Math.min(1, Math.abs(ny) * 1.45);\n      if (sideRatio <= 0.02) continue;\n      var x = position.getX(i);\n      var y = position.getY(i);\n      var z = position.getZ(i);\n      var heightRatio = Math.max(0, Math.min(1, (y - bottomY) / depth));\n      var sideNoise = textileNoise01(Math.round((x + 6) * 850), Math.round((z + 6) * 850), 701) - 0.5;\n      var rib = Math.sin((x * 41.0 + z * 37.0) + textileNoise01(Math.round(x * 95), Math.round(z * 95), 719) * 3.4);\n      var cushion = Math.pow(Math.max(0, heightRatio), 0.58);\n      var outward = (0.00012 + cushion * outwardMax + sideNoise * 0.00012 + rib * 0.00008) * sideRatio;\n      var verticalNap = (textileNoise01(Math.round((x + 4) * 520), Math.round((z + 4) * 520), 733) - 0.5) * 0.00022 * sideRatio;\n      if (heightRatio > 0.62) verticalNap += (heightRatio - 0.62) * topLipMax * sideRatio;\n      position.setXYZ(i, x + nx * outward, y + verticalNap, z + nz * outward);\n    }\n    position.needsUpdate = true;\n    geometry.computeVertexNormals();\n  }\n\n  function fitVisibleThickness(geometry, targetM) {\n    if (!geometry || !geometry.attributes || !geometry.attributes.position) return;\n    var target = Number(targetM);\n    if (!Number.isFinite(target) || target <= 0) return;\n    geometry.computeBoundingBox();\n    var bb = geometry.boundingBox;\n    if (!bb) return;\n    var minY = bb.min.y;\n    var span = bb.max.y - bb.min.y;\n    if (!Number.isFinite(span) || span <= 0) return;\n    var scale = target / span;\n    var position = geometry.attributes.position;\n    for (var i = 0; i < position.count; i++) {\n      position.setY(i, (position.getY(i) - minY) * scale);\n    }\n    position.needsUpdate = true;\n    geometry.computeVertexNormals();\n    geometry.computeBoundingBox();\n    geometry.computeBoundingSphere();\n  }\n\n  function shouldUsePetalPlushModel(snapshot) {\n    if (!snapshot) return false;\n    if (isCordobaPetalSnapshot(snapshot)) return false;\n    if (!isAmorfShape(snapshot.shapeType)) return false;\n    var quality = normalizeCode(snapshot.qualityCode || snapshot.qualityLabel || snapshot.handle || \"\");\n    var presetKey = normalizeCode(snapshot.shapePayload && snapshot.shapePayload.presetKey || \"\");\n    var presetLabel = normalizeCode(snapshot.shapePayload && snapshot.shapePayload.presetLabel || \"\");\n    var title = normalizeCode(snapshot.title || \"\");\n    return quality === \"cordoba\"\n      || presetKey.indexOf(\"cicek\") >= 0\n      || presetKey.indexOf(\"petal\") >= 0\n      || presetKey.indexOf(\"papatya\") >= 0\n      || presetLabel.indexOf(\"cicek\") >= 0\n      || presetLabel.indexOf(\"petal\") >= 0\n      || presetLabel.indexOf(\"papatya\") >= 0\n      || title.indexOf(\"cordoba\") >= 0;\n  }\n\n  function sampleOpaqueHex(canvas, nx, ny, fallbackHex) {\n    if (!canvas || !canvas.width || !canvas.height) return fallbackHex || 0x8a7a62;\n    try {\n      var ctx = canvas.getContext(\"2d\", { willReadFrequently: true });\n      var cx = Math.max(0, Math.min(canvas.width - 1, Math.round(nx * (canvas.width - 1))));\n      var cy = Math.max(0, Math.min(canvas.height - 1, Math.round(ny * (canvas.height - 1))));\n      var radius = Math.max(4, Math.round(Math.min(canvas.width, canvas.height) * 0.025));\n      var x0 = Math.max(0, cx - radius);\n      var y0 = Math.max(0, cy - radius);\n      var x1 = Math.min(canvas.width - 1, cx + radius);\n      var y1 = Math.min(canvas.height - 1, cy + radius);\n      var image = ctx.getImageData(x0, y0, Math.max(1, x1 - x0 + 1), Math.max(1, y1 - y0 + 1));\n      var data = image.data;\n      var r = 0;\n      var g = 0;\n      var b = 0;\n      var count = 0;\n      for (var i = 0; i < data.length; i += 4) {\n        if (data[i + 3] < 120) continue;\n        r += data[i];\n        g += data[i + 1];\n        b += data[i + 2];\n        count++;\n      }\n      if (!count) return fallbackHex || 0x8a7a62;\n      r = clampByte(r / count);\n      g = clampByte(g / count);\n      b = clampByte(b / count);\n      return (r << 16) | (g << 8) | b;\n    } catch (err) {\n      return fallbackHex || 0x8a7a62;\n    }\n  }\n\n  function blendHex(sampledHex, paletteHex, paletteWeight) {\n    var sr = (sampledHex >> 16) & 255;\n    var sg = (sampledHex >> 8) & 255;\n    var sb = sampledHex & 255;\n    var pr = (paletteHex >> 16) & 255;\n    var pg = (paletteHex >> 8) & 255;\n    var pb = paletteHex & 255;\n    var w = clampNumber(paletteWeight, 0, 1);\n    var r = clampByte(sr * (1 - w) + pr * w);\n    var g = clampByte(sg * (1 - w) + pg * w);\n    var b = clampByte(sb * (1 - w) + pb * w);\n    return (r << 16) | (g << 8) | b;\n  }\n\n  function livelyPetalHex(sampledHex, paletteHex) {\n    var r = (sampledHex >> 16) & 255;\n    var g = (sampledHex >> 8) & 255;\n    var b = sampledHex & 255;\n    var max = Math.max(r, g, b);\n    var min = Math.min(r, g, b);\n    var luma = r * 0.2126 + g * 0.7152 + b * 0.0722;\n    var washed = luma > 178 || (max - min) < 24;\n    return blendHex(sampledHex, paletteHex, washed ? 0.74 : 0.36);\n  }\n\n  function makePileSwatchCanvas(hex, preset, salt) {\n    var size = 512;\n    var out = document.createElement(\"canvas\");\n    out.width = size;\n    out.height = size;\n    var ctx = out.getContext(\"2d\", { willReadFrequently: true });\n    var r = (hex >> 16) & 255;\n    var g = (hex >> 8) & 255;\n    var b = hex & 255;\n    var image = ctx.createImageData(size, size);\n    var data = image.data;\n    var strength = Math.max(0.28, Number(preset && preset.pileTextureStrength) || 0.42);\n    for (var y = 0; y < size; y++) {\n      for (var x = 0; x < size; x++) {\n        var i = (y * size + x) * 4;\n        var fine = textileNoise01(x, y, 200 + salt) - 0.5;\n        var tuft = textileNoise01(x >> 2, y >> 2, 240 + salt) - 0.5;\n        var ridge = Math.sin(x * 0.55 + y * 1.18 + salt) * 0.5;\n        var nap = Math.sin((x + y) * 0.045 + textileNoise01(x >> 4, y >> 4, 280 + salt) * 5.2);\n        var shade = (fine * 46 + tuft * 58 + ridge * 16 + nap * 22) * strength;\n        data[i] = clampByte(r + shade);\n        data[i + 1] = clampByte(g + shade * 0.94);\n        data[i + 2] = clampByte(b + shade * 0.86);\n        data[i + 3] = 255;\n      }\n    }\n    ctx.putImageData(image, 0, 0);\n    return out;\n  }\n\n  // [EMISSIVE-PEAK v133] Esikli emissive haritasi: sadece parlak iplik tepeleri\n  // isiktan bagimsiz parlar (Quick Look IBL diffuse'u ~x0.78 eziyor; gercek beyaz\n  // iplik spekulerle 244+ patliyor). Esik alti (govde, yan serit) emissive=0 kalir.\n  function buildEmissivePeakCanvas(srcCanvas, threshold, scale) {\n    var out = document.createElement(\"canvas\");\n    out.width = srcCanvas.width;\n    out.height = srcCanvas.height;\n    var ctx = out.getContext(\"2d\", { willReadFrequently: true });\n    ctx.drawImage(srcCanvas, 0, 0);\n    var image = ctx.getImageData(0, 0, out.width, out.height);\n    var data = image.data;\n    for (var i = 0; i < data.length; i += 4) {\n      data[i] = clampByte((data[i] - threshold) * scale);\n      data[i + 1] = clampByte((data[i + 1] - threshold) * scale);\n      data[i + 2] = clampByte((data[i + 2] - threshold) * scale);\n      data[i + 3] = 255;\n    }\n    ctx.putImageData(image, 0, 0);\n    return out;\n  }\n\n  function makePetalShape(THREE, width, length, wobble) {\n    var shape = new THREE.Shape();\n    var steps = 96;\n    for (var i = 0; i <= steps; i++) {\n      var t = (i / steps) * Math.PI * 2;\n      var y = Math.cos(t) * length * 0.5;\n      var edge = Math.pow(Math.max(0, 1 - Math.abs(y) / (length * 0.5)), 0.42);\n      var side = Math.sin(t) >= 0 ? 1 : -1;\n      var waist = 1 - 0.16 * Math.cos(t * 2 + wobble);\n      var organic = 1 + 0.055 * Math.sin(t * 3 + wobble) + 0.035 * Math.sin(t * 5 - wobble);\n      var x = side * width * 0.5 * edge * waist * organic;\n      if (i === 0) shape.moveTo(x, y);\n      else shape.lineTo(x, y);\n    }\n    shape.closePath();\n    return shape;\n  }\n\n  function makePetalMaterial(THREE, hex, preset, salt) {\n    var swatch = makePileSwatchCanvas(hex, preset, salt);\n    var pile = buildPileTextureCanvas(swatch, preset);\n    var height = buildHeightCanvas(pile, preset);\n    var normalCanvas = buildNormalCanvas(height, preset);\n    var map = new THREE.CanvasTexture(pile);\n    map.colorSpace = THREE.SRGBColorSpace || map.colorSpace;\n    map.anisotropy = 8;\n    map.needsUpdate = true;\n    var normal = new THREE.CanvasTexture(normalCanvas);\n    normal.anisotropy = 8;\n    normal.needsUpdate = true;\n    var normalStrength = Math.max(0.22, Number(preset.normalScale) || 0.32);\n    return new THREE.MeshStandardMaterial({\n      map: map,\n      normalMap: normal,\n      normalScale: new THREE.Vector2(normalStrength, normalStrength),\n      roughness: 0.97,\n      metalness: 0,\n      side: THREE.FrontSide\n    });\n  }\n\n  function addPetalMesh(THREE, scene, material, width, length, height, angle, radius, index) {\n    var shape = makePetalShape(THREE, width, length, index * 0.71);\n    var geometry = new THREE.ExtrudeGeometry(shape, {\n      depth: height,\n      bevelEnabled: true,\n      bevelThickness: Math.min(height * 0.42, 0.012),\n      bevelSize: Math.min(width * 0.08, 0.026),\n      bevelSegments: 8,\n      curveSegments: 24,\n      steps: 1\n    });\n    geometry.rotateX(-Math.PI / 2);\n    assignPetalPlanarUv(THREE, geometry);\n    geometry.computeVertexNormals();\n    var mesh = new THREE.Mesh(geometry, material);\n    var dirX = Math.sin(angle);\n    var dirZ = Math.cos(angle);\n    mesh.position.set(dirX * radius, 0, dirZ * radius);\n    mesh.rotation.y = angle + Math.PI;\n    mesh.castShadow = true;\n    mesh.receiveShadow = true;\n    scene.add(mesh);\n    return mesh;\n  }\n\n  function assignPetalPlanarUv(THREE, geometry) {\n    if (!geometry || !geometry.attributes || !geometry.attributes.position) return;\n    geometry.computeBoundingBox();\n    var box = geometry.boundingBox;\n    if (!box) return;\n    var minX = box.min.x;\n    var maxX = box.max.x;\n    var minZ = box.min.z;\n    var maxZ = box.max.z;\n    var spanX = Math.max(0.001, maxX - minX);\n    var spanZ = Math.max(0.001, maxZ - minZ);\n    var pos = geometry.attributes.position;\n    var uv = [];\n    for (var i = 0; i < pos.count; i++) {\n      uv.push((pos.getX(i) - minX) / spanX, (pos.getZ(i) - minZ) / spanZ);\n    }\n    geometry.setAttribute(\"uv\", new THREE.Float32BufferAttribute(uv, 2));\n  }\n\n  function makeUsdzDoubleFaceGeometry(THREE, source) {\n    if (!source || !source.attributes || !source.attributes.position) return source;\n    var base = source.index ? source.toNonIndexed() : source.clone();\n    if (!base.attributes.normal) base.computeVertexNormals();\n    var position = base.attributes.position;\n    var count = position.count;\n    var output = new THREE.BufferGeometry();\n    Object.keys(base.attributes).forEach(function (name) {\n      var attr = base.attributes[name];\n      var itemSize = attr.itemSize || 1;\n      var sourceArray = attr.array;\n      var next = new sourceArray.constructor(sourceArray.length * 2);\n      next.set(sourceArray, 0);\n      var offset = sourceArray.length;\n      for (var tri = 0; tri < count; tri += 3) {\n        for (var local = 0; local < 3; local++) {\n          var srcIndex = tri + (local === 0 ? 0 : (local === 1 ? 2 : 1));\n          var dstIndex = tri + local;\n          for (var k = 0; k < itemSize; k++) {\n            var value = attr.getComponent(srcIndex, k);\n            next[offset + dstIndex * itemSize + k] = name === \"normal\" ? -value : value;\n          }\n        }\n      }\n      output.setAttribute(name, new THREE.BufferAttribute(next, itemSize, attr.normalized));\n    });\n    var groups = base.groups && base.groups.length ? base.groups : [{ start: 0, count: count, materialIndex: 0 }];\n    output.clearGroups();\n    for (var g = 0; g < groups.length; g++) {\n      output.addGroup(groups[g].start, groups[g].count, groups[g].materialIndex || 0);\n    }\n    for (var rg = 0; rg < groups.length; rg++) {\n      output.addGroup(count + groups[rg].start, groups[rg].count, groups[rg].materialIndex || 0);\n    }\n    output.computeBoundingBox();\n    output.computeBoundingSphere();\n    return output;\n  }\n\n  function assignVertexColorsFromCanvas(THREE, geometry, canvas, fallbackHex) {\n    if (!geometry || !geometry.attributes || !geometry.attributes.position || !canvas || !canvas.width || !canvas.height) return;\n    var uv = geometry.attributes.uv;\n    if (!uv) return;\n    fallbackHex = fallbackHex || 0xb8b0a4;\n    var fallbackR = ((fallbackHex >> 16) & 255) / 255;\n    var fallbackG = ((fallbackHex >> 8) & 255) / 255;\n    var fallbackB = (fallbackHex & 255) / 255;\n    try {\n      var ctx = canvas.getContext(\"2d\", { willReadFrequently: true });\n      var image = ctx.getImageData(0, 0, canvas.width, canvas.height);\n      var data = image.data;\n      var colors = [];\n      for (var i = 0; i < uv.count; i++) {\n        var u = Math.max(0, Math.min(1, uv.getX(i)));\n        var v = Math.max(0, Math.min(1, uv.getY(i)));\n        var x = Math.max(0, Math.min(canvas.width - 1, Math.round(u * (canvas.width - 1))));\n        var y = Math.max(0, Math.min(canvas.height - 1, Math.round(v * (canvas.height - 1))));\n        var p = (y * canvas.width + x) * 4;\n        var alpha = data[p + 3] / 255;\n        if (alpha > 0.08) {\n          colors.push((data[p] / 255) * alpha + fallbackR * (1 - alpha));\n          colors.push((data[p + 1] / 255) * alpha + fallbackG * (1 - alpha));\n          colors.push((data[p + 2] / 255) * alpha + fallbackB * (1 - alpha));\n        } else {\n          colors.push(fallbackR, fallbackG, fallbackB);\n        }\n      }\n      geometry.setAttribute(\"color\", new THREE.Float32BufferAttribute(colors, 3));\n    } catch (err) {}\n  }\n\n  function buildPetalPlushScene(mods, snapshot, pileCanvas, preset) {\n    var THREE = mods.THREE;\n    var scene = new THREE.Scene();\n    scene.name = \"Massimo_AR_Petal_Plush_\" + normalizeCode(snapshot.qualityCode || \"cordoba\");\n    scene.userData = {\n      massimoArBuild: BUILD,\n      unit: \"meter\",\n      floorAnchored: true,\n      edgeTreatment: \"petal-plush\",\n      visualTreatment: \"rounded-petal-3d-cordoba-hav\",\n      nativeArMode: \"prebuilt-alpha-usdz\"\n    };\n    var widthM = Math.max(0.8, Number(snapshot.widthCm || 160) / 100);\n    var lengthM = Math.max(1.0, Number(snapshot.lengthCm || 230) / 100);\n    var scale = Math.min(widthM, lengthM) / 2.15;\n    var petalCount = 10;\n    var petalWidth = scale * 0.54;\n    var petalLength = scale * 0.96;\n    var petalHeight = 0.022;\n    var paletteFallback = [0x263222, 0x8b531f, 0x6a7330, 0xe6d3aa, 0x30352e, 0x9c6728, 0x6d7a3c, 0x1f2a20, 0xb8752a, 0x465134];\n    for (var i = 0; i < petalCount; i++) {\n      var angle = (i / petalCount) * Math.PI * 2;\n      var nx = 0.5 + Math.sin(angle) * 0.32;\n      var ny = 0.5 - Math.cos(angle) * 0.32;\n      var fallbackColor = paletteFallback[i % paletteFallback.length];\n      var color = livelyPetalHex(sampleOpaqueHex(pileCanvas, nx, ny, fallbackColor), fallbackColor);\n      var mat = makePetalMaterial(THREE, color, preset, i + 1);\n      var radius = scale * (0.42 + (i % 2) * 0.035);\n      addPetalMesh(THREE, scene, mat, petalWidth * (i % 3 === 0 ? 1.08 : 1), petalLength * (i % 2 ? 0.92 : 1.04), petalHeight, angle, radius, i);\n    }\n    var centerColors = [\n      livelyPetalHex(sampleOpaqueHex(pileCanvas, 0.50, 0.50, 0xd9c79a), 0xd9c79a),\n      livelyPetalHex(sampleOpaqueHex(pileCanvas, 0.42, 0.48, 0x5b5f4d), 0x5b5f4d),\n      livelyPetalHex(sampleOpaqueHex(pileCanvas, 0.58, 0.53, 0x33372e), 0x33372e)\n    ];\n    for (var c = 0; c < 3; c++) {\n      var cMat = makePetalMaterial(THREE, centerColors[c], preset, 50 + c);\n      addPetalMesh(THREE, scene, cMat, scale * (c === 0 ? 0.58 : 0.44), scale * (c === 0 ? 0.46 : 0.38), 0.024 + c * 0.001, c * 2.1, scale * (c === 0 ? 0.02 : 0.18), 60 + c);\n    }\n    scene.add(new THREE.AmbientLight(0xfff5df, 1.2));\n    scene.add(new THREE.HemisphereLight(0xffedcf, 0xbba98a, 1.08));\n    var key = new THREE.DirectionalLight(0xfff2d6, 2.9);\n    key.position.set(-2.2, 4.4, 2.6);\n    key.castShadow = true;\n    scene.add(key);\n    var fill = new THREE.DirectionalLight(0xd7e7ff, 0.85);\n    fill.position.set(2.8, 2.2, -2.0);\n    scene.add(fill);\n    return scene;\n  }\n\n  function buildScene(mods, snapshot, options) {\n    options = options || {};\n    var THREE = mods.THREE;\n    var arProfile = arProfileForSnapshot(snapshot);\n    var outputProfile = nativeArOutputProfile(arProfile, options);\n    var preset = Object.assign({}, materialPreset(snapshot.qualityCode));\n    [\"bumpScale\", \"heightNoiseStrength\", \"pileLiftM\", \"thicknessM\", \"sideDarken\"].forEach(function (key) {\n      var value = Number(outputProfile[key]);\n      if (Number.isFinite(value)) preset[key] = value;\n    });\n    preset.pileTextureStrength = (Number(preset.pileTextureStrength) || 0) * (Number(outputProfile.pileTextureStrengthScale) || 1);\n    preset.normalScale = (Number(preset.normalScale) || 0.13) * (Number(outputProfile.normalScaleMultiplier) || 1);\n    var shapeType = normalizeShape(snapshot.shapeType);\n    var isAmorf = isAmorfShape(shapeType);\n    var strictCordoba = isCordobaStrictSnapshot(snapshot);\n    var textureTargetPx = Math.max(1, Math.round(Number(options.textureTargetPxOverride) || chooseTextureTargetPx(snapshot, options)));\n    var alphaCanvas = strictCordoba\n      ? resizeCanvasToMaxSide(snapshot.textureCanvas, textureTargetPx)\n      : upscaleCanvas(snapshot.textureCanvas, textureTargetPx);\n    var pileCanvas = strictCordoba\n      ? buildSourceDetailTextureCanvas(alphaCanvas, options.forUsdz ? 0.46 : 0.32)\n      : buildPileTextureCanvas(alphaCanvas, preset);\n    pileCanvas = applyArTextureCalibration(pileCanvas, outputProfile);\n    // [EDGE-SEAL v2 2026-06-11] Kenar muhurleme \u2014 bolgesel ve guvenli:\n    // serit ara canvas'a kopyalanir, clearRect + source-over ile basilir ('copy' TUM canvasi siliyordu!).\n    try {\n      var esW = pileCanvas.width, esH = pileCanvas.height, esB = 6;\n      if (esW > 4 * esB && esH > 4 * esB) {\n        var esCtx = pileCanvas.getContext(\"2d\", { willReadFrequently: true });\n        var esCopy = function (sx, sy, sw, sh, dx, dy, dw, dh) {\n          var t = document.createElement(\"canvas\");\n          t.width = Math.max(1, dw); t.height = Math.max(1, dh);\n          t.getContext(\"2d\").drawImage(pileCanvas, sx, sy, sw, sh, 0, 0, dw, dh);\n          esCtx.clearRect(dx, dy, dw, dh);\n          esCtx.drawImage(t, dx, dy);\n        };\n        // [EDGE-REPAIR v35] Kaynak kirli sag kenar: SOL temiz kenar dikey serit olarak AYNALANIP saga basilir (opt-in).\n        if (outputProfile && outputProfile.nativeEdgeMirrorRight) {\n          var erBand = Math.max(8, Math.round(esW * (Number(outputProfile.nativeEdgeMirrorRightPct) || 0.042)));\n          var erT = document.createElement(\"canvas\");\n          erT.width = erBand; erT.height = esH;\n          var erC = erT.getContext(\"2d\");\n          erC.translate(erBand, 0); erC.scale(-1, 1);\n          erC.drawImage(pileCanvas, 0, 0, erBand, esH, 0, 0, erBand, esH);\n          esCtx.clearRect(esW - erBand, 0, erBand, esH);\n          esCtx.drawImage(erT, esW - erBand, 0);\n        }\n        esCopy(esB, esB, esW - 2 * esB, 1, esB, 0, esW - 2 * esB, esB);\n        esCopy(esB, esH - esB - 1, esW - 2 * esB, 1, esB, esH - esB, esW - 2 * esB, esB);\n        esCopy(esB, esB, 1, esH - 2 * esB, 0, esB, esB, esH - 2 * esB);\n        esCopy(esW - esB - 1, esB, 1, esH - 2 * esB, esW - esB, esB, esB, esH - 2 * esB);\n        esCopy(esB, esB, 1, 1, 0, 0, esB, esB);\n        esCopy(esW - esB - 1, esB, 1, 1, esW - esB, 0, esB, esB);\n        esCopy(esB, esH - esB - 1, 1, 1, 0, esH - esB, esB, esB);\n        esCopy(esW - esB - 1, esH - esB - 1, 1, 1, esW - esB, esH - esB, esB, esB);\n      }\n    } catch (esErr) { /* seal asla render kirmaz */ }\n    // [CALIB-GUARD 2026-06-10] Acceptance enforcement: nihai doku kilitli referans\n    // metriklerinden saparsa sessiz kalma - console.warn + global rapor.\n    try {\n      var calibGuardRef = snapshot.arReferenceMetrics || (arProfile && arProfile.referenceMetrics) || null;\n      if (calibGuardRef && calibGuardRef.targetBodyRgb && pileCanvas && pileCanvas.width > 64) {\n        var cgCtx = pileCanvas.getContext(\"2d\", { willReadFrequently: true });\n        var cgW = pileCanvas.width, cgH = pileCanvas.height;\n        var cgData = cgCtx.getImageData(Math.floor(cgW * 0.3), Math.floor(cgH * 0.3), Math.floor(cgW * 0.4), Math.floor(cgH * 0.4)).data;\n        var cgR = 0, cgG = 0, cgB = 0, cgN = 0;\n        for (var cgI = 0; cgI < cgData.length; cgI += 32) {\n          if (cgData[cgI + 3] > 200) { cgR += cgData[cgI]; cgG += cgData[cgI + 1]; cgB += cgData[cgI + 2]; cgN++; }\n        }\n        if (cgN > 100) {\n          cgR /= cgN; cgG /= cgN; cgB /= cgN;\n          var cgTarget = calibGuardRef.targetBodyRgb;\n          var cgDelta = Math.max(Math.abs(cgR - cgTarget.r), Math.abs(cgG - cgTarget.g), Math.abs(cgB - cgTarget.b));\n          var cgBmrDelta = (cgB - cgR) - (Number(calibGuardRef.targetBlueMinusRed) || 0);\n          var cgPass = cgDelta <= 14 && Math.abs(cgBmrDelta) <= 10;\n          var cgReport = {\n            pass: cgPass,\n            bodyRgb: [Math.round(cgR * 10) / 10, Math.round(cgG * 10) / 10, Math.round(cgB * 10) / 10],\n            targetRgb: [cgTarget.r, cgTarget.g, cgTarget.b],\n            maxChannelDelta: Math.round(cgDelta * 10) / 10,\n            blueMinusRedDelta: Math.round(cgBmrDelta * 100) / 100,\n            calibrationId: snapshot.arCalibrationId || \"\",\n            forUsdz: !!options.forUsdz,\n            build: BUILD\n          };\n          window.__MASSIMO_AR_ACCEPTANCE__ = cgReport;\n          if (!cgPass) {\n            console.warn(\"[MASSIMO-AR][CALIB-GUARD] Nihai AR dokusu kilitli kalibrasyon hedefinden sapti:\", cgReport);\n          }\n        }\n      }\n    } catch (cgErr) { /* guard render akisini asla kirmaz */ }\n    var preserveTextureAlpha = options.forUsdz && outputProfile.nativePreserveAlpha === true;\n    var alphaMaskThreshold = Number(outputProfile.nativeAlphaMaskThreshold) || 48;\n    var textureCanvas = isAmorf || options.forUsdz\n      ? preprocessForUsdz(pileCanvas, { preserveAlpha: preserveTextureAlpha, alphaMaskThreshold: alphaMaskThreshold })\n      : pileCanvas;\n    var heightCanvas = buildHeightCanvas(pileCanvas, preset);\n    var normalCanvas = buildNormalCanvas(heightCanvas, preset);\n    var widthM = Math.max(0.1, Number(snapshot.widthCm || 160) / 100);\n    var lengthM = Math.max(0.1, Number(snapshot.lengthCm || 230) / 100);\n    if (shouldUsePetalPlushModel(snapshot)) {\n      return buildPetalPlushScene(mods, snapshot, pileCanvas, preset);\n    }\n    if (shapeType === \"yuvarlak\") {\n      var diameter = Math.min(widthM, lengthM);\n      widthM = diameter;\n      lengthM = diameter;\n    }\n\n    var isCordoba = normalizeCode(snapshot.qualityCode || snapshot.qualityLabel || \"\") === \"cordoba\";\n    var selectedBindingHex = edgeFabricSwatchHex(snapshot);\n    var fallbackBindingHex = selectedBindingHex != null\n      ? selectedBindingHex\n      : (isCordoba && isAmorf ? 0x8f9aa4 : (isAmorf ? 0x819298 : softRugSideHex(pileCanvas, preset.sideDarken)));\n    var sideHex = selectedBindingHex != null ? selectedBindingHex : sampleBindingEdgeHex(textureCanvas, fallbackBindingHex);\n    var sideCanvas = buildRugSideTextureCanvas(sideHex, preset, isCordoba ? 0.0155 : preset.thicknessM, isCordoba);\n    var usdzAtlas = options.forUsdz ? buildUsdzTextureAtlas(textureCanvas, sideCanvas, outputProfile) : null;\n    var mapCanvas = usdzAtlas && usdzAtlas.canvas ? usdzAtlas.canvas : textureCanvas;\n    snapshot.textureTargetPx = textureTargetPx;\n    snapshot.textureCanvasWidth = textureCanvas.width || 0;\n    snapshot.textureCanvasHeight = textureCanvas.height || 0;\n    if (usdzAtlas) {\n      snapshot.textureAtlasWidthPx = mapCanvas.width || 0;\n      snapshot.textureAtlasHeightPx = mapCanvas.height || 0;\n      snapshot.textureAtlasTopWidthPx = textureCanvas.width || 0;\n      snapshot.textureAtlasSideWidthPx = Math.max(0, (mapCanvas.width || 0) - (textureCanvas.width || 0));\n    }\n    var map = new THREE.CanvasTexture(mapCanvas);\n    map.colorSpace = THREE.SRGBColorSpace || map.colorSpace;\n    map.anisotropy = 8;\n    map.needsUpdate = true;\n    var normal = new THREE.CanvasTexture(normalCanvas);\n    normal.anisotropy = 8;\n    normal.needsUpdate = true;\n    var normalStrength = Math.max(0.05, Number(preset.normalScale) || 0.13);\n    var usdzFallbackHex = sampleOpaqueHex(pileCanvas, 0.5, 0.5, 0xb8b0a4);\n    var materialAlphaTest = preserveTextureAlpha ? 0.50 : 0;\n    var material = options.forUsdz\n      ? new THREE.MeshStandardMaterial({\n        color: 0xffffff,\n        map: map,\n        roughness: 0.96,\n        metalness: 0,\n        transparent: false,\n        alphaTest: materialAlphaTest,\n        depthWrite: true,\n        vertexColors: true,\n        side: THREE.FrontSide\n      })\n      : new THREE.MeshStandardMaterial({\n        map: map,\n        normalMap: normal,\n        normalScale: new THREE.Vector2(normalStrength, normalStrength),\n        roughness: preset.roughness,\n        metalness: 0,\n        transparent: false,\n        alphaTest: materialAlphaTest,\n        depthWrite: true,\n        side: THREE.FrontSide\n      });\n    // [EMISSIVE-PEAK v133] Opt-in: outputProfile.emissiveScale > 0 ise parlak tepeler emissive.\n    // mapCanvas kullanilir (USDZ atlasinda UV'ler birebir ortusur; atlas yan seridi esik alti -> sonuk).\n    var emissiveScaleV = Math.max(0, Math.min(1.5, Number(outputProfile.emissiveScale) || 0));\n    // [EMISSIVE-PROBE v134] Tani izi: bu blok kosuyor mu, scale geliyor mu?\n    // scale>0 ise emissiveMap connect; degilse USDZ'de gorunmez duz iz (0x010101).\n    // USDA'da hicbir emissive satiri yoksa -> bu JS kullaniciya hic ulasmamis (CDN).\n    try {\n      window.__MASSIMO_AR_EMISSIVE__ = {\n        build: BUILD,\n        forUsdz: !!options.forUsdz,\n        scale: emissiveScaleV,\n        threshold: Number(outputProfile.emissiveThreshold) || null\n      };\n      console.log(\"[MASSIMO-AR][EMISSIVE-PROBE]\", JSON.stringify(window.__MASSIMO_AR_EMISSIVE__));\n    } catch (epErr) {}\n    if (options.forUsdz && !(emissiveScaleV > 0)) {\n      material.emissive = new THREE.Color(0x010101);\n      material.needsUpdate = true;\n    }\n    if (emissiveScaleV > 0) {\n      var emissiveThresholdV = Math.max(1, Math.min(254, Math.round(Number(outputProfile.emissiveThreshold) || 170)));\n      var emissiveCanvas = buildEmissivePeakCanvas(mapCanvas, emissiveThresholdV, emissiveScaleV);\n      var emissiveMapTex = new THREE.CanvasTexture(emissiveCanvas);\n      emissiveMapTex.colorSpace = THREE.SRGBColorSpace || emissiveMapTex.colorSpace;\n      emissiveMapTex.anisotropy = 8;\n      emissiveMapTex.needsUpdate = true;\n      material.emissive = new THREE.Color(1, 1, 1);\n      material.emissiveMap = emissiveMapTex;\n      material.needsUpdate = true;\n    }\n    var sideMap = new THREE.CanvasTexture(sideCanvas);\n    sideMap.colorSpace = THREE.SRGBColorSpace || sideMap.colorSpace;\n    sideMap.anisotropy = 8;\n    sideMap.needsUpdate = true;\n    var sideMaterial = new THREE.MeshStandardMaterial({\n      color: 0xffffff,\n      map: sideMap,\n      roughness: 0.99,\n      metalness: 0,\n      side: THREE.DoubleSide\n    });\n\n    var shape = makeThreeShape(THREE, snapshot, alphaCanvas);\n    var explicitThickness = Number.isFinite(Number(outputProfile.thicknessM));\n    var depthM = isCordoba ? 0.0155 : Math.max(explicitThickness ? 0.0035 : 0.007, Math.min(explicitThickness ? 0.012 : 0.014, Number(preset.thicknessM) || 0.009));\n    var bevelSizeMultiplier = Math.max(0.18, Math.min(1, Number(outputProfile.bevelSizeMultiplier) || 1));\n    var bevelThicknessMultiplier = Math.max(0.18, Math.min(1, Number(outputProfile.bevelThicknessMultiplier) || 1));\n    var bevelSize = (isCordoba\n      ? Math.min(0.0032, Math.min(widthM, lengthM) * 0.0022, depthM * 0.22)\n      : Math.min(0.014, Math.min(widthM, lengthM) * 0.008, depthM * 0.72)) * (isCordoba ? 1 : bevelSizeMultiplier);\n    var bevelThickness = (isCordoba ? Math.min(0.0011, depthM * 0.08) : Math.min(0.005, depthM * 0.32)) * (isCordoba ? 1 : bevelThicknessMultiplier);\n    var geometry = new THREE.ExtrudeGeometry(shape, {\n      depth: depthM,\n      bevelEnabled: true,\n      bevelThickness: bevelThickness,\n      bevelSize: bevelSize,\n      bevelSegments: isCordoba ? 2 : 5,\n      curveSegments: isAmorf ? 32 : 18,\n      steps: 1\n    });\n    if (geometry.index) geometry = geometry.toNonIndexed();\n    assignTopUv(THREE, geometry, isAmorf && snapshot.alphaBBox ? snapshot.alphaBBox : measureAlphaBBox(alphaCanvas, 220, -2));\n    if (usdzAtlas) remapTopUvToAtlas(geometry, usdzAtlas.topUMax);\n    assignSideUvFromDepth(geometry, depthM, usdzAtlas && usdzAtlas.sideUStart, usdzAtlas && usdzAtlas.sideUSpan);\n    if (options.forUsdz) assignVertexColorsFromCanvas(THREE, geometry, mapCanvas, usdzFallbackHex);\n    geometry.rotateX(-Math.PI / 2);\n    applyPileVertexLift(geometry, preset, depthM);\n    if (strictCordoba && options.forUsdz) applyCordobaSourceHeightBake(geometry, textureCanvas, depthM);\n    if (options.forUsdz) applyNativeSoftEdgeGeometry(geometry, depthM, isCordoba, isAmorf);\n    if (isCordoba) fitVisibleThickness(geometry, 0.0155);\n    var floorLiftM = Number.isFinite(Number(outputProfile.floorLiftM)) ? Math.max(-0.0025, Math.min(0.001, Number(outputProfile.floorLiftM))) : 0.0005;\n    geometry.translate(0, floorLiftM, 0);\n    geometry.computeVertexNormals();\n    geometry.computeBoundingBox();\n\n    if (options.forUsdz) {\n      geometry = makeUsdzDoubleFaceGeometry(THREE, geometry);\n      geometry.clearGroups();\n      geometry.addGroup(0, geometry.attributes.position.count, 0);\n    }\n    var meshMaterial = options.forUsdz ? material : [material, sideMaterial];\n    var mesh = new THREE.Mesh(geometry, meshMaterial);\n    mesh.name = \"Massimo_AR_Rug\";\n    mesh.castShadow = true;\n    mesh.receiveShadow = true;\n    mesh.userData = {\n      massimoAr: true,\n      floorAnchored: true,\n      visibleThicknessM: depthM,\n      sinkBelowFloorM: Math.max(0, -floorLiftM),\n      edgeTreatment: isAmorf ? \"biye-side-atlas\" : \"standard-side\",\n      visualTreatment: isAmorf ? \"exact-design-plush-rug-body\" : \"woven-textile-rug-body\"\n    };\n\n    var scene = new THREE.Scene();\n    scene.name = \"Massimo_AR_\" + normalizeCode(snapshot.qualityCode || \"rug\");\n    scene.userData = {\n      massimoArBuild: BUILD,\n      unit: \"meter\",\n      floorAnchored: true,\n      edgeTreatment: isAmorf ? \"biye-side-atlas\" : \"standard-side\",\n      visualTreatment: isAmorf ? \"exact-design-plush-rug-body\" : \"woven-textile-rug-body\",\n      nativeArMode: isAmorf ? \"prebuilt-alpha-usdz\" : \"prebuilt-usdz\"\n    };\n    scene.add(mesh);\n    scene.add(new THREE.AmbientLight(0xffffff, 1.05));\n    scene.add(new THREE.HemisphereLight(0xfff7eb, 0xd8c4a5, 0.85));\n    var light = new THREE.DirectionalLight(0xffffff, 2.35);\n    light.position.set(-1.8, 4.2, 2.4);\n    light.castShadow = true;\n    scene.add(light);\n    return scene;\n  }\n\n  async function loadThree() {\n    if (threeMods) return threeMods;\n    var base = \"https://esm.sh/three@\" + THREE_VER;\n    var THREE = await import(base);\n    var GLTFExporter = (await import(base + \"/examples/jsm/exporters/GLTFExporter.js\")).GLTFExporter;\n    var USDZExporter;\n    try {\n      // [USDZ-RES v39] Patch'li exporter (maxTexture 2048; orijinal r160 sabit 1024 ile dokuyu eritiyor)\n      USDZExporter = (await import(\"https://cdn.shopify.com/s/files/1/0511/6257/9115/t/537/assets/massimo-usdz-exporter-2048.mjs?v=1781174308\")).USDZExporter;\n    } catch (usdzImpErr) {\n      console.warn(\"[MASSIMO-AR] patch'li USDZ exporter yuklenemedi, orijinale dusuluyor:\", usdzImpErr && usdzImpErr.message);\n      USDZExporter = (await import(base + \"/examples/jsm/exporters/USDZExporter.js\")).USDZExporter;\n    }\n    threeMods = { THREE: THREE, GLTFExporter: GLTFExporter, USDZExporter: USDZExporter };\n    return threeMods;\n  }\n\n  async function loadModelViewer() {\n    if (modelViewerReady || customElements.get(\"model-viewer\")) {\n      modelViewerReady = true;\n      return;\n    }\n    await import(\"https://cdn.jsdelivr.net/npm/@google/model-viewer@3.5.0/dist/model-viewer.js\");\n    await new Promise(function (resolve) {\n      var start = Date.now();\n      (function tick() {\n        if (customElements.get(\"model-viewer\")) {\n          modelViewerReady = true;\n          resolve();\n          return;\n        }\n        if (Date.now() - start > 8000) {\n          resolve();\n          return;\n        }\n        setTimeout(tick, 80);\n      })();\n    });\n  }\n\n  async function loadQR() {\n    if (qrLib) return qrLib;\n    qrLib = await import(\"https://esm.sh/qrcode@1.5.3\");\n    return qrLib;\n  }\n\n  function qrFallbackUrl(value) {\n    return \"https://quickchart.io/qr?size=280&margin=1&text=\" + encodeURIComponent(value || location.href);\n  }\n\n  async function exportGLB(mods, scene) {\n    return new Promise(function (resolve, reject) {\n      var exporter = new mods.GLTFExporter();\n      exporter.parse(scene, function (result) {\n        if (result instanceof ArrayBuffer) {\n          resolve(new Blob([result], { type: \"model/gltf-binary\" }));\n        } else {\n          reject(new Error(\"GLB sonucu binary de\u011Fil.\"));\n        }\n      }, function (error) {\n        reject(error);\n      }, { binary: true, embedImages: true, includeCustomExtensions: false });\n    });\n  }\n\n  async function exportUSDZ(mods, scene) {\n    var exporter = new mods.USDZExporter();\n    var fn = typeof exporter.parseAsync === \"function\"\n      ? exporter.parseAsync.bind(exporter)\n      : exporter.parse.bind(exporter);\n    var arrayBuffer = await fn(scene, { maxTextureSize: 2048 }); // [USDZ-RES v39] exporter default 1024 dokuyu eritiyordu (moire/hasir)\n    return new Blob([arrayBuffer], { type: \"model/vnd.usdz+zip\" });\n  }\n\n  async function sha256Hex(input) {\n    if (window.crypto && crypto.subtle && window.TextEncoder) {\n      var bytes = new TextEncoder().encode(input);\n      var digest = await crypto.subtle.digest(\"SHA-256\", bytes);\n      return Array.prototype.map.call(new Uint8Array(digest), function (b) {\n        return b.toString(16).padStart(2, \"0\");\n      }).join(\"\");\n    }\n    var h = 2166136261;\n    for (var i = 0; i < input.length; i++) {\n      h ^= input.charCodeAt(i);\n      h = Math.imul(h, 16777619);\n    }\n    return (\"00000000\" + (h >>> 0).toString(16)).slice(-8) + String(input.length);\n  }\n\n  async function buildHash(snapshot) {\n    var hashInput = JSON.stringify({\n      namespace: \"massimo-ar\",\n      version: BUILD,\n      qualityCode: snapshot.qualityCode,\n      patternCode: snapshot.patternCode,\n      handle: snapshot.handle,\n      widthCm: Math.round(snapshot.widthCm * 10),\n      lengthCm: Math.round(snapshot.lengthCm * 10),\n      shapeType: snapshot.shapeType,\n      shapePayload: snapshot.shapePayload,\n      shapePresetKey: snapshot.shapePayload && snapshot.shapePayload.presetKey || \"\",\n      shapePresetLabel: snapshot.shapePayload && snapshot.shapePayload.presetLabel || \"\",\n      materialProfile: \"cordoba-closeup-texture-v72\",\n      arProfileVersion: AR_PROFILE_VERSION,\n      arProfileKey: snapshot.arProfileKey || snapshot.arProfile && snapshot.arProfile.key || \"\",\n      arCalibrationVersion: snapshot.arCalibrationVersion || \"\",\n      arCalibrationId: snapshot.arCalibrationId || \"\",\n      arCalibrationKey: snapshot.arCalibrationKey || \"\",\n      arReferenceSource: snapshot.arReferenceSource || \"\",\n      arReferenceMetrics: snapshot.arReferenceMetrics || null,\n      arProfile: snapshot.arProfile || null,\n      strictExact: !!snapshot.strictExact,\n      textureTargetPx: snapshot.textureTargetPx || 0,\n      pileTextureUrl: snapshot.pileTextureUrl || \"\",\n      amorfMode: shouldUsePetalPlushModel(snapshot) ? \"petal-plush-rounded-3d\" : (isAmorfShape(snapshot.shapeType) ? \"top-texture-biye-side-atlas-usdz\" : \"\"),\n      edgeTreatment: snapshot.edgeTreatment || \"\",\n      nativeArMode: snapshot.nativeArMode || \"\",\n      meshSource: snapshot.meshSource || \"\",\n      meshPointCount: snapshot.meshPointCount || 0,\n      alphaBBox: snapshot.alphaBBox || null,\n      coverage: snapshot.coverage || null,\n      maskSource: snapshot.arMask && snapshot.arMask.source || \"\",\n      silhouettePointCount: snapshot.arMask && snapshot.arMask.silhouettePointCount || 0,\n      edgeType: snapshot.edgeType,\n      fabricLabel: snapshot.fabricLabel,\n      fabricKey: snapshot.fabricKey,\n      fabricColor: snapshot.fabricColor,\n      texture: snapshot.textureHashData\n    });\n    return (await sha256Hex(hashInput)).slice(0, 32);\n  }\n\n  async function arCheck(hash) {\n    var res = await fetch(API_BASE + \"/api/ar/check\", {\n      method: \"POST\",\n      headers: { \"Content-Type\": \"application/json\", \"Accept\": \"application/json\" },\n      body: JSON.stringify({ hash: hash, namespace: \"massimo-ar\", version: BUILD })\n    });\n    if (!res.ok) throw new Error(\"AR cache kontrol\u00FC ba\u015Far\u0131s\u0131z: HTTP \" + res.status);\n    return res.json();\n  }\n\n  async function arUpload(hash, type, blob) {\n    var res = await fetch(API_BASE + \"/api/ar/upload/\" + encodeURIComponent(hash) + \".\" + type, {\n      method: \"PUT\",\n      body: blob\n    });\n    if (!res.ok) throw new Error(\"AR modeli y\u00FCklenemedi (\" + type + \", HTTP \" + res.status + \")\");\n    var json = await res.json().catch(function () { return {}; });\n    if (json && json.ok === false) throw new Error(json.error || \"AR modeli y\u00FCklenemedi (\" + type + \")\");\n    return json.assetURL || json.url || json[type] || \"\";\n  }\n\n  function fullAssetUrl(value) {\n    if (!value) return \"\";\n    if (/^https?:\\/\\//i.test(value)) return value;\n    return API_BASE + String(value);\n  }\n\n  function resultFromCache(hash, cache) {\n    cache = cache || {};\n    return {\n      hash: hash,\n      glb: fullAssetUrl(cache.glb || cache.glbURL || cache.glbUrl || cache.assetGLB || \"\"),\n      usdz: fullAssetUrl(cache.usdz || cache.usdzURL || cache.usdzUrl || cache.assetUSDZ || \"\")\n    };\n  }\n\n  function requiredAssetTypes() {\n    if (isIOS()) return { glb: false, usdz: true };\n    if (isAndroid()) return { glb: true, usdz: false };\n    return { glb: true, usdz: true };\n  }\n\n  async function ensureAssets(snapshot) {\n    var hash = await buildHash(snapshot);\n    var required = requiredAssetTypes();\n    setLoading(\"\u00D6nbellek kontrol ediliyor...\", snapshot);\n    var cached = resultFromCache(hash, await arCheck(hash));\n    var glbURL = cached.glb;\n    var usdzURL = cached.usdz;\n    if ((required.glb && !glbURL) || (required.usdz && !usdzURL)) {\n      setLoading(\"Massimo hal\u0131n\u0131z 4K dokuyla 3D modele d\u00F6n\u00FC\u015Ft\u00FCr\u00FCl\u00FCyor...\", snapshot);\n      var mods = await loadThree();\n      if (required.glb && !glbURL) {\n        setLoading(\"Android ve web i\u00E7in GLB modeli \u00FCretiliyor...\", snapshot);\n        var glbBlob = await exportGLB(mods, buildScene(mods, snapshot, { forUsdz: false, nativeAr: isAndroid() }));\n        glbURL = fullAssetUrl(await arUpload(hash, \"glb\", glbBlob));\n      }\n\t      if (required.usdz && !usdzURL) {\n\t        setLoading(\"iPhone i\u00E7in USDZ modeli \u00FCretiliyor...\", snapshot);\n\t        var usdzTarget = chooseTextureTargetPx(snapshot, { forUsdz: true });\n\t        var usdzBlob = await exportUSDZ(mods, buildScene(mods, snapshot, { forUsdz: true, nativeAr: true, textureTargetPxOverride: usdzTarget }));\n\t        if (isCordobaStrictSnapshot(snapshot) && usdzTarget > CORDOBA_STRICT_TEXTURE_TARGET_PX && usdzBlob.size > CORDOBA_USDZ_SIZE_GUARD_BYTES) {\n\t          usdzTarget = CORDOBA_STRICT_TEXTURE_TARGET_PX;\n\t          snapshot.textureTargetPx = usdzTarget;\n\t          setLoading(\"iPhone i\u00E7in 2K ger\u00E7ek doku paketi optimize ediliyor...\", snapshot);\n\t\t          usdzBlob = await exportUSDZ(mods, buildScene(mods, snapshot, { forUsdz: true, nativeAr: true, textureTargetPxOverride: usdzTarget }));\n\t        }\n\t        try {\n\t          usdzURL = fullAssetUrl(await arUpload(hash, \"usdz\", usdzBlob));\n\t        } catch (err) {\n\t          if (!isCordobaStrictSnapshot(snapshot) || usdzTarget <= CORDOBA_STRICT_TEXTURE_TARGET_PX || !/HTTP 413/i.test(err && err.message || \"\")) throw err;\n\t          usdzTarget = CORDOBA_STRICT_TEXTURE_TARGET_PX;\n\t          snapshot.textureTargetPx = usdzTarget;\n\t          setLoading(\"iPhone i\u00E7in 2K ger\u00E7ek doku paketi yeniden haz\u0131rlan\u0131yor...\", snapshot);\n\t\t          usdzBlob = await exportUSDZ(mods, buildScene(mods, snapshot, { forUsdz: true, nativeAr: true, textureTargetPxOverride: usdzTarget }));\n\t          usdzURL = fullAssetUrl(await arUpload(hash, \"usdz\", usdzBlob));\n\t        }\n\t      }\n    }\n    activeResult = { hash: hash, glb: glbURL, usdz: usdzURL };\n    window.__MASSIMO_AR_LAST_RESULT__ = activeResult;\n    return activeResult;\n  }\n\n  function queryState(snapshot, result) {\n    var params = new URLSearchParams();\n    params.set(\"massimoAr\", \"1\");\n    params.set(\"h\", result.hash);\n    params.set(\"v\", BUILD);\n    params.set(\"mode\", snapshot.edgeTreatment || (isAmorfShape(snapshot.shapeType) ? \"top-texture\" : \"standard-side\"));\n    params.set(\"native\", snapshot.nativeArMode || (isAmorfShape(snapshot.shapeType) ? \"prebuilt-alpha-usdz\" : \"prebuilt-usdz\"));\n    params.set(\"w\", String(Math.round(snapshot.widthCm || 0)));\n    params.set(\"l\", String(Math.round(snapshot.lengthCm || 0)));\n    params.set(\"sh\", snapshot.shapeType || \"\");\n    params.set(\"q\", snapshot.qualityCode || \"\");\n    params.set(\"p\", snapshot.patternCode || \"\");\n    params.set(\"e\", snapshot.edgeType || \"\");\n    return params.toString();\n  }\n\n  function androidSceneViewerUrl(result) {\n    var params = new URLSearchParams();\n    params.set(\"file\", result.glb);\n    params.set(\"mode\", \"ar_preferred\");\n    params.set(\"resizable\", \"false\");\n    params.set(\"disable_occlusion\", \"false\");\n    params.set(\"title\", \"Massimo AR\");\n    return \"intent://arvr.google.com/scene-viewer/1.1?\" + params.toString()\n      + \"#Intent;scheme=https;package=com.google.ar.core;action=android.intent.action.VIEW;S.browser_fallback_url=\"\n      + encodeURIComponent(result.glb) + \";end;\";\n  }\n\n  function shouldUseGeneratedIosUsdz(snapshot) {\n    return false;\n  }\n\n  function shouldUseFlatMobilePreview(snapshot) {\n    return false;\n  }\n\n  function flatPreviewOverlayHtml(snapshot) {\n    return \"\";\n  }\n\n  function cacheBustedUsdzUrl(result, snapshot) {\n    var url = result && result.usdz || \"\";\n    if (!url) return \"\";\n    try {\n      var parsed = new URL(url, location.href);\n      parsed.searchParams.set(\"massimo_ar_build\", BUILD);\n      parsed.searchParams.set(\"native\", snapshot && snapshot.nativeArMode || \"prebuilt-usdz\");\n      parsed.searchParams.set(\"t\", result.hash || BUILD);\n      return parsed.toString();\n    } catch (err) {\n      var sep = url.indexOf(\"?\") >= 0 ? \"&\" : \"?\";\n      return url + sep + \"massimo_ar_build=\" + encodeURIComponent(BUILD)\n        + \"&native=\" + encodeURIComponent(snapshot && snapshot.nativeArMode || \"prebuilt-usdz\")\n        + \"&t=\" + encodeURIComponent(result.hash || BUILD);\n    }\n  }\n\n  function launchNativeAR(result, snapshot) {\n    if (!result) return;\n    snapshot = snapshot || activeSnapshot || {};\n    var mv = document.getElementById(\"massimo-ar-model\");\n    if (mv && typeof mv.activateAR === \"function\") {\n      try {\n        mv.activateAR();\n        return;\n      } catch (err) {\n        console.warn(\"[Massimo AR] model-viewer native launch failed; using direct native link\", err);\n      }\n    }\n    if (isIOS()) {\n      var link = document.createElement(\"a\");\n      link.rel = \"ar\";\n      link.href = cacheBustedUsdzUrl(result, snapshot);\n      var img = document.createElement(\"img\");\n      img.alt = \"\";\n      img.style.cssText = \"width:1px;height:1px;display:none\";\n      link.appendChild(img);\n      document.body.appendChild(link);\n      link.click();\n      setTimeout(function () { link.remove(); }, 120);\n      return;\n    }\n    if (isAndroid()) {\n      window.location.href = androidSceneViewerUrl(result);\n      return;\n    }\n  }\n\n  async function renderViewer(snapshot, result) {\n    setLoading(\"AR \u00F6nizleme a\u00E7\u0131l\u0131yor...\", snapshot);\n    await loadModelViewer();\n    var dims = formatCm(snapshot.widthCm) + \" x \" + formatCm(snapshot.lengthCm) + \" cm\";\n    var alt = \"Massimo hali AR modeli - \" + dims + \" - \" + shapeLabel(snapshot.shapeType);\n    var iosSrcAttr = shouldUseGeneratedIosUsdz(snapshot)\n      ? \"\"\n      : ' ios-src=\"' + escapeHtml(cacheBustedUsdzUrl(result, snapshot)) + '\"';\n    var flatPreviewClass = shouldUseFlatMobilePreview(snapshot) ? \" massimo-ar-model-wrap--flat-preview\" : \"\";\n    var modelExposure = Math.max(0.72, Math.min(1.12, Number(nativeArOutputProfile(arProfileForSnapshot(snapshot), { nativeAr: isIOS() || isAndroid() }).exposure) || 1.02));\n    var nativeModelHtml = result.glb ? [\n      '<div class=\"massimo-ar-model-wrap' + flatPreviewClass + '\">',\n      '<model-viewer id=\"massimo-ar-model\" class=\"massimo-ar-model\" alt=\"' + escapeHtml(alt) + '\"',\n      ' src=\"' + escapeHtml(result.glb) + '\"',\n      iosSrcAttr,\n      ' ar ar-modes=\"webxr scene-viewer quick-look\" quick-look-browsers=\"safari chrome\" ar-placement=\"floor\"',\n      ' camera-controls touch-action=\"pan-y\" disable-pan reveal=\"auto\" loading=\"eager\"',\n      ' camera-orbit=\"0deg 0deg auto\" min-camera-orbit=\"-180deg 0deg auto\" max-camera-orbit=\"180deg 70deg auto\"',\n      ' field-of-view=\"24deg\" min-field-of-view=\"20deg\" max-field-of-view=\"42deg\"',\n      ' shadow-intensity=\"0.5\" shadow-softness=\"0.92\" exposure=\"' + String(Math.round(modelExposure * 0.90 * 100) / 100) + '\" environment-image=\"legacy\"', // [VIEWER-LIGHT v136] masaustu render: x0.90 + legacy cevre (soluk+mavi fix); model hash'e etkisiz\n      ' ar-scale=\"fixed\" xr-environment interaction-prompt=\"none\">',\n      '</model-viewer>',\n      flatPreviewOverlayHtml(snapshot),\n      '</div>'\n    ].join(\"\") : stageMediaHtml(snapshot, false);\n    var compactMobileView = isMobile() && Math.min(Number(window.innerWidth) || 9999, (window.screen && Number(window.screen.width)) || 9999) < 900; // [QR-FIX 2026-06-11] genis ekranda QR'li duzen\n    var modelHtml = nativeModelHtml; // masaustunde de 3D viewer goster\n    var finalMediaHtml = resolveProductVideos(snapshot).length\n      ? stageMediaHtml(snapshot, true)\n      : \"\";\n\n    if (compactMobileView) {\n      setBody([\n        '<div class=\"massimo-ar-work\">',\n        '<div class=\"massimo-ar-main\">',\n        modelHtml,\n        '<div class=\"massimo-ar-actions\"><button type=\"button\" class=\"massimo-ar-action\" id=\"massimo-ar-launch\">Hal\u0131y\u0131 AR\u2019da A\u00E7</button></div>',\n        '<div class=\"massimo-ar-foot\">Butona bast\u0131\u011F\u0131n\u0131zda telefon kameras\u0131yla 1:1 \u00F6l\u00E7ekte zemine oturan AR a\u00E7\u0131l\u0131r.</div>',\n        '</div>',\n        '<div class=\"massimo-ar-side\">',\n        featureCards(snapshot),\n        '<div class=\"massimo-ar-note\">Bu model Massimo se\u00E7iminize \u00F6zel hash ile \u00F6nbelle\u011Fe al\u0131nd\u0131; se\u00E7ili kalite ve kenar bilgisiyle \u00FCretildi.</div>',\n        '</div>',\n        '</div>'\n      ].join(\"\"));\n      var launch = document.getElementById(\"massimo-ar-launch\");\n      if (launch) launch.addEventListener(\"click\", function () { launchNativeAR(result, snapshot); });\n      return;\n    }\n\n    var qrParams = new URLSearchParams(location.search || \"\");\n    qrParams.set(\"view\", TEMPLATE_VIEW);\n    new URLSearchParams(queryState(snapshot, result)).forEach(function (value, key) {\n      qrParams.set(key, value);\n    });\n    var qrTarget = location.origin + location.pathname + \"?\" + qrParams.toString();\n    var qrPng = \"\";\n    try {\n      var qr = await loadQR();\n      qrPng = await qr.toDataURL(qrTarget, {\n        width: 280,\n        margin: 1,\n        color: { dark: \"#171717\", light: \"#ffffff\" }\n      });\n    } catch (err) {\n      qrPng = qrFallbackUrl(qrTarget);\n    }\n    setBody([\n      '<div class=\"massimo-ar-work\">',\n      '<div class=\"massimo-ar-main\">',\n      finalMediaHtml,\n      modelHtml,\n      '</div>',\n      '<div class=\"massimo-ar-side\">',\n      featureCards(snapshot),\n      '<div class=\"massimo-ar-qr\">',\n      qrPng ? '<img src=\"' + qrPng + '\" alt=\"Massimo AR QR kod\">' : '<div style=\"width:128px;height:128px;display:flex;align-items:center;justify-content:center;border:1px solid #eee;border-radius:6px;font-size:12px;color:#777;\">QR yok</div>',\n      '<div><strong>Telefonunuzla okutun</strong><p>Ayn\u0131 Massimo AR modelini telefonda a\u00E7ar. Telefonda AR butonuna bas\u0131nca hal\u0131y\u0131 odan\u0131zda 1:1 \u00F6l\u00E7ekte g\u00F6r\u00FCrs\u00FCn\u00FCz.</p></div>',\n      '</div>',\n      '<div class=\"massimo-ar-note\">Masa\u00FCst\u00FCnde se\u00E7ili hal\u0131 \u00F6nizlemesi, telefonda native AR a\u00E7\u0131l\u0131r. Model cache anahtar\u0131 Massimo\u2019ya \u00F6zeldir ve se\u00E7ili kalite doku s\u00FCr\u00FCm\u00FCn\u00FC kullan\u0131r.</div>',\n      '</div>',\n      '</div>'\n    ].join(\"\"));\n  }\n\n  async function generateAndShow() {\n    var snapshot = await prepareSnapshot();\n    setLoading(\"Massimo AR haz\u0131rlan\u0131yor...\", snapshot);\n    var result = await ensureAssets(snapshot);\n    await renderViewer(snapshot, result);\n  }\n\n  async function openCachedFromQuery(params) {\n    var hash = params.get(\"h\") || params.get(\"hash\") || \"\";\n    var queryBuild = params.get(\"v\") || params.get(\"build\") || \"\";\n    var queryMode = params.get(\"mode\") || \"\";\n    var queryShape = normalizeShape(params.get(\"sh\") || \"dikdortgen\");\n    if (!hash || queryBuild !== BUILD || (isAmorfShape(queryShape) && queryMode !== \"top-texture\")) {\n      await generateAndShow();\n      return;\n    }\n    var snapshot = {\n      config: {},\n      state: {},\n      last: {},\n      previewDataUrl: \"\",\n      widthCm: Number(params.get(\"w\") || 160),\n      lengthCm: Number(params.get(\"l\") || 230),\n      shapeType: queryShape,\n      shapePayload: {},\n      edgeTreatment: isAmorfShape(queryShape) ? \"top-texture\" : \"standard-side\",\n      edgeType: params.get(\"e\") || \"\",\n      edgeLabel: params.get(\"e\") || \"\",\n      fabricLabel: \"\",\n      qualityCode: params.get(\"q\") || \"Massimo\",\n      qualityLabel: params.get(\"q\") || \"Massimo\",\n      patternCode: params.get(\"p\") || \"\",\n      nativeArMode: params.get(\"native\") || (isAmorfShape(queryShape) ? \"prebuilt-alpha-usdz\" : \"prebuilt-usdz\"),\n      handle: \"\",\n      title: \"Massimo\"\n    };\n    activeSnapshot = snapshot;\n    setLoading(\"Telefon i\u00E7in AR dosyalar\u0131 al\u0131n\u0131yor...\", snapshot);\n    var result = resultFromCache(hash, await arCheck(hash));\n    if (!result.glb || !result.usdz) {\n      await generateAndShow();\n      return;\n    }\n    activeResult = result;\n    window.__MASSIMO_AR_LAST_RESULT__ = result;\n    await renderViewer(snapshot, result);\n  }\n\n  async function onArClick() {\n    var btn = getButton();\n    if (btn && btn.disabled) {\n      openModal();\n      if (!lastModalBodyHtml) setLoading(\"Haz\u0131rlan\u0131yor...\");\n      return;\n    }\n    openModal();\n    if (btn) btn.disabled = true;\n    try {\n      setLoading(\"Haz\u0131rlan\u0131yor...\");\n      await generateAndShow();\n    } catch (err) {\n      console.error(\"[MassimoAR]\", err);\n      setError(err && err.message ? err.message : String(err));\n    } finally {\n      if (btn) btn.disabled = false;\n    }\n  }\n\n  function paramsRequestAr() {\n    var params = new URLSearchParams(window.location.search || \"\");\n    return params.get(\"massimoAr\") === \"1\" || params.get(\"massimo_ar\") === \"1\" ? params : null;\n  }\n\n  function stopInitObserver() {\n    if (initObserver) initObserver.disconnect();\n    initObserver = null;\n    if (initRetryTimer) clearTimeout(initRetryTimer);\n    initRetryTimer = null;\n  }\n\n  function scheduleInitRetry(delayMs) {\n    if (initialized || initRetryTimer) return;\n    if (!initObserver && window.MutationObserver) {\n      initObserver = new MutationObserver(function () {\n        scheduleInitRetry(120);\n      });\n      initObserver.observe(document.documentElement, { childList: true, subtree: true });\n    }\n    initRetryTimer = setTimeout(function () {\n      initRetryTimer = null;\n      init();\n    }, delayMs || 180);\n  }\n\n  async function init() {\n    if (initialized || initInFlight) return;\n    initInFlight = true;\n    rootNode = currentRoot();\n    try {\n      if (!rootNode) {\n        scheduleInitRetry(180);\n        return;\n      }\n      var api = await waitForApi(9000);\n      if (!api || !api.getPreviewCanvas || !api.getState) {\n        scheduleInitRetry(260);\n        return;\n      }\n      if (!isAllowedProduct(api)) return;\n      initialized = true;\n      stopInitObserver();\n      window.__MASSIMO_AR_OPEN__ = onArClick;\n      injectStyles();\n      bindDelegatedClick();\n      buttonRetryUntil = Date.now() + 20000;\n      injectButton();\n      scheduleButtonInject(240);\n      observeButtonSlot();\n      var params = paramsRequestAr();\n      if (params) {\n        setTimeout(function () {\n          openModal();\n          openCachedFromQuery(params).catch(function (err) {\n            console.error(\"[MassimoAR]\", err);\n            setError(err && err.message ? err.message : String(err));\n          });\n        }, 250);\n      }\n    } finally {\n      initInFlight = false;\n    }\n  }\n\n  document.addEventListener(\"keydown\", function (event) {\n    if (event.key === \"Escape\") closeModal();\n  });\n\n  if (document.readyState === \"loading\") {\n    document.addEventListener(\"DOMContentLoaded\", init);\n  } else {\n    init();\n  }\n})();\n"],
  "mappings": "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",
  "names": ["renderCanvas", "x", "y", "p", "px", "py", "i"]
}
