{
  "version": 3,
  "sources": ["/cdn/shop/t/3/assets/strap-form-preview.js?nc=1785892397428800700"],
  "sourcesContent": ["/* Adapter: bespoke form -> StrapBuilder preview. Values verified against the section's own\n     snippets: buckle radio value = full label with an em dash (\"Classic \u2014 Silver\"); thread &\n     edge radios carry the palette NAME; exact-palette layers sb-th-/sb-oth-/sb-eg-<handle>.png. */\n  document.addEventListener('DOMContentLoaded', function () {\n    var SB = window.StrapBuilder;\n    var stage = document.querySelector('[data-cspv-stage]');\n    if (!SB || !SB.MANIFEST || !SB.createRenderer || !stage) return;\n    var renderer = SB.createRenderer(stage);\n    // Only offer strap styles we have real assets for (per leather). The rest stay hidden until\n    // their layers are photographed/cut.\n    var STYLE_AVAIL = {\n      epsom: ['Classic', 'Micro Rally', 'Hybrid Rally', 'Rally (Large Holes)'],\n      ostrich: ['Classic', 'Micro Rally', 'Hybrid Rally', 'Rally (Large Holes)'],   // lo to: Flat sb-otfho3, Padded sb-otho3\n      'ostrich-quill': ['Classic', 'Micro Rally', 'Hybrid Rally', 'Rally (Large Holes)'],\n      nappa: ['Classic', 'Micro Rally', 'Hybrid Rally', 'Rally (Large Holes)'],   // canvas Layer: Smart Holes + Large Holes\n      lizard: ['Classic', 'Micro Rally', 'Hybrid Rally', 'Rally (Large Holes)'],\n      'alligator-patina': ['Classic', 'Micro Rally', 'Hybrid Rally', 'Rally (Large Holes)'],\n      alligator: ['Classic', 'Micro Rally', 'Hybrid Rally', 'Rally (Large Holes)'],\n      'vegtan-handdye': ['Classic', 'Micro Rally', 'Hybrid Rally'],\n      togo: ['Classic', 'Micro Rally', 'Hybrid Rally', 'Rally (Large Holes)'],\n      swift: ['Classic', 'Micro Rally', 'Hybrid Rally', 'Rally (Large Holes)'],   // 21/09: Micro/Hybrid/3 Holes/Middle/Wing Cut deu co ca hai bo\n      pueblo: ['Classic', 'Micro Rally', 'Hybrid Rally', 'Rally (Large Holes)']   // 29/10 Pueblo: du Micro/Hybrid/3 Holes\n    };\n    // Each rally style is a different punch pattern, so each needs its own underlay layer. The value\n    // here is the filename prefix appended to the leather's own prefix root; a leather that lacks a\n    // pattern simply does not list the style in STYLE_AVAIL above.\n    var RALLY_SUFFIX = { 'Micro Rally': '', 'Hybrid Rally': 'l', 'Rally (Large Holes)': '3' };\n    // Which set of masks a strap photo was shot against. Written out per family rather than derived\n    // from a root, because the two leathers were named by different hands: ostrich's variants keep\n    // the \"th\" of the plain prefix (sb-othbx-) and lizard's drop it (sb-lzbx-). A rule that guessed\n    // produced sb-obx- \u2014 a file that has never existed \u2014 and ostrich's box, double and precise\n    // stitches silently drew nothing.\n    // bk/mc/wc/ho3 belong here for the same reason: they are cut per CANVAS. Which buckle photo,\n    // which lug-end notch and which punched-hole die fit a strap is decided by the frame it was shot\n    // in, not by the animal. Listing them per family is what lets a newly re-shot leather inherit\n    // the whole set at once instead of growing another `leatherId === '...'` branch downstream.\n    var MASKS = {\n      '':   { th: 'sb-th-',   eg: 'sb-eg-',   holes: 'sb-holes'   },\n      'lz': { th: 'sb-lzth-', bx: 'sb-lzbx-',  db: 'sb-lzdb-',  pl: 'sb-lzpl-',  eg: 'sb-lzeg-', holes: 'sb-lzholes',\n              bk: 'sb-lzbk-', ho3: 'sb-lzho3.webp', mc: 'sb-lzmc.webp', wc: 'sb-lzwc.webp' },\n      // (tailRound), Pre-V doi lo oval (tailOval), Butterfly khong can lo -> an. Vi the base\n      // thang KHONG bake lo. Ban cong la anh chup co lo tron san - Pre-V/Butterfly + Curved\n      // Alligator Patina (23/09, chu shop): da nhuom xuyen nen KHONG co lop lot duoi lo (noUnderlay)\n      // - long lo giu TRANG nhu anh goc. Thay vao do la MEP LO, to cung mau Edge Colour voi duong\n      // bao than day. Hai thu nay gop CHUNG mot file theo kieu rally (egm/egl/eg3) va nam trong khe\n      // 'edge' - tuc DUOI lop holes: file mep lo la ban sao dia lo lech (-4,+3)px, dat tren thi no\n      // phu kin long lo, dat duoi thi phan lo ra chinh la be day mep cat. egUnder ghi nhan viec do\n      // va chan nhanh ve lai 'edgeholes' len tren (nhanh do danh cho ho co vien Rally lo to rieng).\n      // Dau cong: khong con anh chup rieng tung mau -> curvedCut (cap trang cat lom dau lug) nhu bo\n      // Epsom/Swift moi; vi the base KHONG bake lo duoi nua -> tailOnCurved.\n      'ap': { th: 'sb-apth-', bx: 'sb-apbx-', db: 'sb-apdb-', pl: 'sb-appl-', eg: 'sb-apeg-',\n              egm: 'sb-apegm-', egl: 'sb-apegl-', eg3: 'sb-apeg3-',\n              holes: 'sb-apholes', ho3: 'sb-apho3.webp', mc: 'sb-apmc.webp', wc: 'sb-apwc.webp',\n              bk: 'sb-apbk-', bkDeployant: 'sb-apbk-dp-',\n              tailRound: 'sb-apclh.webp', tailOval: 'sb-appvh.webp', tailOnCurved: true,\n              curvedCut: 'sb-apcv.webp', noUnderlay: true, egUnder: true },\n      // Ban PADDED: than rieng, vien mep rieng (day day hon), Precise-to-Lugs rieng, khoa rieng\n      // (do 23/09: Classic/Butterfly/Pre-V ban Padded lech that so voi Flat). Chi va lo rally dung\n      // CHUNG mask voi Flat theo lenh chu shop. Middle/Wing Cut khong khai: hai kieu do chi chay\n      // tren dang Flat, dau thang.\n      'app': { th: 'sb-apth-', bx: 'sb-apbx-', db: 'sb-apdb-', pl: 'sb-apppl-', eg: 'sb-appeg-',\n              egm: 'sb-appegm-', egl: 'sb-appegl-', eg3: 'sb-appeg3-',\n              holes: 'sb-apholes', ho3: 'sb-apho3.webp',\n              bk: 'sb-appbk-', bkDeployant: 'sb-apbk-dp-',\n              tailRound: 'sb-apclh.webp', tailOval: 'sb-appvh.webp', tailOnCurved: true,\n              curvedCut: 'sb-apcv.webp', noUnderlay: true, egUnder: true },\n      // Alligator (2026-08-06): base doi theo FORM (Flat/Padded) nen co HAI ho mask -\n      // 'al' cho Flat, 'alp' cho Padded (chi/khoa/lo duoi dung chung; vien + lot rally\n      // chi Pre-V doi lo oval - luat chu shop chot.\n      'al':  { th: 'sb-alth-', bx: 'sb-albx-', db: 'sb-aldb-', eg: 'sb-aleg-', eg3: 'sb-aleg3-', holes: 'sb-alholes',\n               ho3: 'sb-alho3.webp', mc: 'sb-almc.webp', bk: 'sb-albk-',\n               // tailOnCurved: base cong cua Alligator SACH lo (khac AP co lo chup san),\n               tailRound: 'sb-alclh.webp', tailOval: 'sb-alpvh.webp', tailOnCurved: true },\n      'alp': { th: 'sb-alth-', bx: 'sb-albx-', db: 'sb-aldb-', eg: 'sb-alpeg-', holes: 'sb-alpholes',\n               ho3: 'sb-alho3.webp', bk: 'sb-albk-',\n               tailRound: 'sb-alclh.webp', tailOval: 'sb-alpvh.webp', tailOnCurved: true },\n      // khoa) dung chung ca hai form. tailOnCurved: anh cong KHONG bake lo san.\n      // tailOnCurved bat lai 2026-08-11: chu shop da xuat lai \"Flat Main Curved\" SACH lo\n      'vt':  { th: 'sb-vtth-', bx: 'sb-vtbx-',  db: 'sb-vtdb-', pl: 'sb-vtpl-', eg: 'sb-vteg-', holes: 'sb-vtholes',\n               ho3: 'sb-vtho3.webp', mc: 'sb-vtmc.webp', wc: 'sb-vtwc.webp', bk: 'sb-vtbk-',\n               tailRound: 'sb-vtclh.webp', tailOval: 'sb-vtpvh.webp', tailOnCurved: true },\n      'vtp': { th: 'sb-vtth-', bx: 'sb-vtpbx-', db: 'sb-vtdb-', pl: 'sb-vtpl-', eg: 'sb-vteg-', holes: 'sb-vtholes',\n               ho3: 'sb-vtho3.webp', bk: 'sb-vtbk-',\n               tailRound: 'sb-vtclh.webp', tailOval: 'sb-vtpvh.webp', tailOnCurved: true },\n      // Ostrich dung lai 2026-08-15 (bo Brown Project). Ma dong 'ot' \u2014 tach khoi 'o' cu\n      // vi ten cu chong cheo (sb-oth- vua la stitch prefix vua giong base prefix).\n      // Canvas `Layer` (2026-08-15): khong co 3-lo / cat giua / cat canh, va CHUA co\n      // anh khoa Pre-V -> noPreV de engine ve rong thay vi doi file khong ton tai.\n      // 2026-09-16: Ostrich Leg co HAI bo anh doc lap, chup tu hai project khac nhau va lech\n      // nhau 24 px/1000 \u2014 khong bao gio dung chung mot khung: 'ot' = FLAT (file sb-otf*, lo 16/09),\n      // 'otp' = PADDED (file sb-ot* tu 15/08, GIU NGUYEN ten de khong dung vao bo dang chay).\n      // Flat khong co anh cong chup rieng -> curvedCut: lop phu trang cat dau lug, dung cho ca 10 mau.\n      // noPreV bo o ca hai: anh khoa Pre-V co du (do 16/09, khoa dung chan, lo oval dung cho).\n      'ot': { th: 'sb-otfth-', bx: 'sb-otfbx-', db: 'sb-otfdb-', pl: 'sb-otfpl-', eg: 'sb-otfeg-', eg3: 'sb-otfeg3-',\n              bk: 'sb-otfbk-', holes: 'sb-otfholes', ho3: 'sb-otfho3.webp', mc: 'sb-otfmc.webp', wc: 'sb-otfwc.webp',\n              curvedCut: 'sb-otfcv.webp',\n              tailRound: 'sb-otfclh.webp', tailOval: 'sb-otfpvh.webp', tailOnCurved: true },\n      'otp': { th: 'sb-otth-', bx: 'sb-otbx-', db: 'sb-otdb-', pl: 'sb-otpl-', eg: 'sb-oteg-', bk: 'sb-otbk-',\n               holes: 'sb-otholes', ho3: 'sb-otho3.webp',\n               tailRound: 'sb-otclh.webp', tailOval: 'sb-otpvh.webp', tailOnCurved: true },\n      // Ostrich Quill (2026-09-07). Chua co anh Curved/Padded va chua cat keeper ->\n      // engine tu lui ve base thang / bo Flat (luat fallback trong LEATHER-LINE-PLAYBOOK).\n      // Co du ca 3 kieu chi, vien rieng, 2 rally + lo to, lo duoi tron va oval Pre-V,\n      // nen KHONG dat noPreV. Mask deu trang phang tuyet doi (sd 0,0) -> di duong cssmask.\n      'oq': { th: 'sb-oqth-', bx: 'sb-oqbx-', db: 'sb-oqdb-', eg: 'sb-oqeg-', eg3: 'sb-oqeg3-',\n              holes: 'sb-oqholes', ho3: 'sb-oqho3.webp', mc: 'sb-oqmc.webp', bk: 'sb-oqbk-',\n              // Keeper bake 2026-09-07: hai khuyen cat roi (k1 tren, k2 duoi) nen khach doi\n              // mau tung cai duoc. Nguon la mot anh XAM co van; moi ban mau = xam x mau da,\n              // giu nguyen do sang tuong doi cua van. Khong dung ban 'kp' gop hai khuyen.\n              k1: 'sb-oqk1-', k2: 'sb-oqk2-',\n              k1ul: 'sb-oqk1-ul-', k2ul: 'sb-oqk2-ul-',\n              tailRound: 'sb-oqclh.webp', tailOval: 'sb-oqpvh.webp', tailOnCurved: true },\n      // Ostrich Quill PADDED (30/10, chu shop). 28 mau, nguon 1254 'Custom 2D/Ostrich Quill/padded' quy ve 1000 (day cao ~91,7% khung, bang Alligator Padded);\n      // MOI lop (base/mask/khoa) cung 1 khung -> cung 1 phep co+dich. Engine tu chon 'oqp' khi form Padded va mau co basePadded (dong ~777).\n      // Than SACH lo (clh/pvh). Khong co anh cong chup rieng -> curvedCut. Vien eg/eg3 dung lai bam silhouette (nguon Edge nam ngoai day toi 45px).\n      // Keeper nam san trong anh day (khong co k1/k2 cat roi) -> noKeeper: an truong Keeper khi Padded. Middle/Wing Cut chi chay tren Flat (khong khai).\n      // 'Precise to the Lugs' = 'in the lugs.webp' (net khau nam TRONG da; 'Lugs Stitch.webp' nam ngoai mep day nen khong dung).\n      'oqp': { th: 'sb-oqpth-', bx: 'sb-oqpbx-', db: 'sb-oqpdb-', pl: 'sb-oqppl-', eg: 'sb-oqpeg-', eg3: 'sb-oqpeg3-',\n               holes: 'sb-oqpholes', ho3: 'sb-oqpho3.webp', bk: 'sb-oqpbk-', bkDeployant: 'sb-oqpbk-dp-',\n               tailRound: 'sb-oqpclh.webp', tailOval: 'sb-oqppvh.webp', tailOnCurved: true, curvedCut: 'sb-oqpcv.webp', noKeeper: true },\n      // Nappa Calfskin (2026-09-08). Flat va Padded chup TREN HAI KHUNG KHAC NHAU \u2014\n      // do duoc lech tam 11-29 px/1000 (base 11, chi 15, lo duoi 29), nen BAT BUOC\n      // hai bo mask rieng, khong dung chung duoc mot bo nhu Ostrich Quill.\n      // Chua cat keeper cho Flat (chi Padded co anh) -> keeperCustom:!1 o manifest,\n      // vi co keeperOk doc theo DONG DA chu khong theo form; bat len thi khach chon\n      // Flat se doi sb-kb-<mau> ma bo do KHONG du mau (sb-kb-red khong ton tai).\n      // Co du ca Wing Cut lan Middle Cut, va co anh Curved End rieng cho tung form.\n      'np':  { th: 'sb-npth-', bx: 'sb-npbx-', db: 'sb-npdb-', pl: 'sb-nppl-', eg: 'sb-npeg-', eg3: 'sb-npeg3-',\n               holes: 'sb-npholes', ho3: 'sb-npho3.webp', mc: 'sb-npmc.webp', wc: 'sb-npwc.webp',\n               bk: 'sb-npbk-', tailRound: 'sb-npclh.webp', tailOval: 'sb-nppvh.webp', tailOnCurved: true },\n      'npp': { th: 'sb-nppth-', bx: 'sb-nppbx-', db: 'sb-nppdb-', pl: 'sb-npppl-', eg: 'sb-nppeg-', eg3: 'sb-nppeg3-',\n               holes: 'sb-nppholes', ho3: 'sb-nppho3.webp', mc: 'sb-nppmc.webp', wc: 'sb-nppwc.webp',\n               bk: 'sb-nppbk-', tailRound: 'sb-nppclh.webp', tailOval: 'sb-npppvh.webp', tailOnCurved: true },\n      // Epsom bo moi 19/09 (1254px, hai bo Flat 'ep' / Padded 'epp' DOC LAP, khong dung chung file nao):\n      // than SACH lo -> tailRound/tailOval (Holes Classic / PreV Classic); khong co anh cong chup rieng -> curvedCut (cap trang,\n      // nhu Ostrich Flat); eg3 = vien rieng cho Rally lo to. kp (keeper 2 vong cu) bo \u2014 chi con k1/k2 bake theo mau.\n      'ep': { th: 'sb-epth-', bx: 'sb-epbx-',  db: 'sb-epdb-',  pl: 'sb-eppl-',  eg: 'sb-epeg-', eg3: 'sb-epeg3-', holes: 'sb-epholes',\n              bk: 'sb-epbk-', ho3: 'sb-epho3.webp', mc: 'sb-epmc.webp', wc: 'sb-epwc.webp',\n              k1: 'sb-epk1-', k2: 'sb-epk2-', k1ul: 'sb-epk1-ul-', k2ul: 'sb-epk2-ul-',\n              tailRound: 'sb-epclh.webp', tailOval: 'sb-eppvh.webp', tailOnCurved: true, curvedCut: 'sb-epcv.webp' },\n      'epp': { th: 'sb-eppth-', bx: 'sb-eppbx-', db: 'sb-eppdb-', pl: 'sb-epppl-', eg: 'sb-eppeg-', eg3: 'sb-eppeg3-', holes: 'sb-eppholes',\n               bk: 'sb-eppbk-', ho3: 'sb-eppho3.webp', mc: 'sb-eppmc.webp', wc: 'sb-eppwc.webp',\n               k1: 'sb-eppk1-', k2: 'sb-eppk2-', k1ul: 'sb-eppk1-ul-', k2ul: 'sb-eppk2-ul-',\n               tailRound: 'sb-eppclh.webp', tailOval: 'sb-epppvh.webp', tailOnCurved: true, curvedCut: 'sb-eppcv.webp' },\n      // Togo (2026-08-31). eg3 la vien rieng cho Rally lo to: lo giua an mau nen\n      // vien phai cat khac. Chua bake keeper theo tung mau da -> keeperCustom:false.\n      'tg': { th: 'sb-tgth-', bx: 'sb-tgbx-', db: 'sb-tgdb-', pl: 'sb-tgpl-',\n              eg: 'sb-tgeg-', eg3: 'sb-tgeg3-', holes: 'sb-tgholes',\n              ho3: 'sb-tgho3.webp', mc: 'sb-tgmc.webp', wc: 'sb-tgwc.webp',\n              bk: 'sb-tgbk-',\n              k1: 'sb-tgk1-', k2: 'sb-tgk2-',\n              k1ul: 'sb-tgk1-ul-', k2ul: 'sb-tgk2-ul-',\n              // Anh nen (thang lan cong) deu SACH lo duoi -> ve lop nay len ca hai.\n              tailRound: 'sb-tgclh.webp', tailOval: 'sb-tgpvh.webp', tailOnCurved: true },\n      // Swift (21/09). Hai bo Flat 'sw' / Padded 'swp' DOC LAP (nguon 1254 / 1254+1500, quy ve 1000). Than sach lo -> tailRound/tailOval;\n      // khong co anh cong chup rieng -> curvedCut (cap trang) nhu Epsom bo moi. Padded KHONG co mask 'in the lugs' -> STITCH_AVAIL bo\n      // 'Precise to the Lugs' cho ca dong. eg3 = vien rieng cho Rally lo to. Keeper bake theo mau (bake_keeper.py NGUON sw/swp).\n      'sw':  { th: 'sb-swth-', bx: 'sb-swbx-', db: 'sb-swdb-', pl: 'sb-swpl-', eg: 'sb-sweg-', eg3: 'sb-sweg3-', holes: 'sb-swholes',\n               ho3: 'sb-swho3.webp', mc: 'sb-swmc.webp', wc: 'sb-swwc.webp', bk: 'sb-swbk-',\n               k1: 'sb-swk1-', k2: 'sb-swk2-', k1ul: 'sb-swk1-ul-', k2ul: 'sb-swk2-ul-',\n               tailRound: 'sb-swclh.webp', tailOval: 'sb-swpvh.webp', tailOnCurved: true, curvedCut: 'sb-swcv.webp' },\n      'swp': { th: 'sb-swpth-', bx: 'sb-swpbx-', db: 'sb-swpdb-', eg: 'sb-swpeg-', eg3: 'sb-swpeg3-', holes: 'sb-swpholes',\n               ho3: 'sb-swpho3.webp', mc: 'sb-swpmc.webp', wc: 'sb-swpwc.webp', bk: 'sb-swpbk-',\n               k1: 'sb-swpk1-', k2: 'sb-swpk2-', k1ul: 'sb-swpk1-ul-', k2ul: 'sb-swpk2-ul-',\n               tailRound: 'sb-swpclh.webp', tailOval: 'sb-swppvh.webp', tailOnCurved: true, curvedCut: 'sb-swpcv.webp' },\n      // Pueblo (29/10, chu shop). Chi FLAT, nguon 1254 (lop 1080/1024 deu la khung vuong day, quy ve 1000). 14 mau, anh day ChatGPT cung khung (lech <=1px).\n      // Khong co Padded/Curved chup rieng: Padded dung anh + mask Flat (khong chon 'pup'); dau cong = curvedCut. Than SACH lo (clh/pvh). Keeper bake san trong anh day\n      // (keeperCustom:!1). Chi/vien/lo rally nguon trang -> cssmask. Vien (eg/eg3) dung lai bam silhouette chung 14 mau (nguon cu nam NGOAI day 1-6px).\n      'pu': { th: 'sb-puth-', bx: 'sb-pubx-', db: 'sb-pudb-', pl: 'sb-pupl-', eg: 'sb-pueg-', eg3: 'sb-pueg3-', holes: 'sb-puholes',\n              ho3: 'sb-puho3.webp', mc: 'sb-pumc.webp', wc: 'sb-puwc.webp', bk: 'sb-pubk-', bkDeployant: 'sb-pubk-dp-',\n              tailRound: 'sb-puclh.webp', tailOval: 'sb-pupvh.webp', tailOnCurved: true, curvedCut: 'sb-pucv.webp' },\n      // Alligator FLAT bo moi (25/10, chu shop: \"clear het form flat cu, upload bo moi\"). Nguon 1254 quy ve 1000, chi co FLAT\n      // (khong co Padded/Curved chup rieng): thieu basePadded -> engine tu dung anh Flat + mask Flat (khong chon 'a3p'); dau cong = curvedCut.\n      // Than SACH lo (clh/pvh). Chi/vien/lo rally nguon trang -> cssmask. 'pl' (Precise to the Lugs) = Lugs Stitch.webp.\n      // Deployant (bkDeployant): file nguon 800px, da quy ve 1000 cung khung. Bo cu 'al'/'alp'/'a2'/'a2p' giu nguyen, khong mau nao tro toi.\n      'a3': { th: 'sb-a3th-', bx: 'sb-a3bx-', db: 'sb-a3db-', pl: 'sb-a3pl-', eg: 'sb-a3eg-', eg3: 'sb-a3eg3-', holes: 'sb-a3holes',\n              ho3: 'sb-a3ho3.webp', mc: 'sb-a3mc.webp', wc: 'sb-a3wc.webp', bk: 'sb-a3bk-', bkDeployant: 'sb-a3bk-dp-',\n              tailRound: 'sb-a3clh.webp', tailOval: 'sb-a3pvh.webp', tailOnCurved: true, curvedCut: 'sb-a3cv.webp' },\n      // 25/10: Padded cu cho 5 mau a3 khop mau (Black/Navy/Forest Green/Off White = bo a2 padded; Red = bo al padded). Bo mask Padded = nguyen bo cu:\n      // 'a3p' = 'a2p' (khung rieng), 'a3rp' = 'alp'. Red doi maskSet 'a3r' (Flat giong het 'a3') de Padded roi vao 'a3rp'. Mau khac khong co basePadded -> Padded = Flat.\n      'a3r': { th: 'sb-a3th-', bx: 'sb-a3bx-', db: 'sb-a3db-', pl: 'sb-a3pl-', eg: 'sb-a3eg-', eg3: 'sb-a3eg3-', holes: 'sb-a3holes',\n               ho3: 'sb-a3ho3.webp', mc: 'sb-a3mc.webp', wc: 'sb-a3wc.webp', bk: 'sb-a3bk-', bkDeployant: 'sb-a3bk-dp-',\n               tailRound: 'sb-a3clh.webp', tailOval: 'sb-a3pvh.webp', tailOnCurved: true, curvedCut: 'sb-a3cv.webp' },\n      'a3p': { th: 'sb-a2th-', bx: 'sb-a2bx-', db: 'sb-a2db-', eg: 'sb-a2eg-', eg3: 'sb-a2eg3-', holes: 'sb-a2holes',\n               ho3: 'sb-a2ho3.webp', mc: 'sb-a2mc.webp', wc: 'sb-a2wc.webp', bk: 'sb-a2bk-',\n               tailRound: 'sb-a2clh.webp', tailOval: 'sb-a2pvh.webp', tailOnCurved: true },\n      'a3rp': { th: 'sb-alth-', bx: 'sb-albx-', db: 'sb-aldb-', eg: 'sb-alpeg-', holes: 'sb-alpholes',\n               ho3: 'sb-alho3.webp', bk: 'sb-albk-',\n               tailRound: 'sb-alclh.webp', tailOval: 'sb-alpvh.webp', tailOnCurved: true },\n      // Alligator Padded, anh chup lai 2026-09-05 tren KHUNG RIENG. Do hop bao net:\n      // vien bo cu chay 0.040-0.966 chieu doc, bo nay 0.112-0.888 - lech ~9% canvas,\n      // nen KHONG dung chung mot mask nao voi 'al'/'alp'. Mau Red o lai maskSet 'al'.\n      // Chi khau: anh nen CO san duong khau trang, va mask chi (2026-09-05 15:37) trung\n      // khit len no - do that: to chi mau do len, do phu kin duong trang o ca hai mep.\n      // Nen KHONG can anh nen sach chi; lop chi mau ve de len la doi mau duoc.\n      // eg3 = vien rieng cho Rally lo to, dung co che Togo da chay.\n      // FLAT dung lai TOAN BO mask cua bo 'al': anh Flat moi (2026-09-05 16:0x, khung\n      // 1080^2, cao 0.911) nam dung khung bo Red cu (Edge Flat.png cao 0.911) - da ghep\n      // thu, vien/chi/lo/khoa bam khit. Nen khong sinh mask Flat rieng.\n      // eg3 (2026-09-07): vien rieng cho Rally lo to, ban FLAT. File nguon\n      // Allgator/Red/Edge 3 Holes.webp, khung 1080^2 - dung khung bo Flat.\n      'a2':  { th: 'sb-alth-', bx: 'sb-albx-', db: 'sb-aldb-', eg: 'sb-aleg-', eg3: 'sb-aleg3-', holes: 'sb-alholes',\n               ho3: 'sb-alho3.webp', mc: 'sb-almc.webp', bk: 'sb-albk-',\n               tailRound: 'sb-alclh.webp', tailOval: 'sb-alpvh.webp', tailOnCurved: true },\n      // PADDED co khung rieng -> bo mask rieng. Engine tu chon bang `fam + 'p'` (dong ~353).\n      'a2p': { th: 'sb-a2th-', bx: 'sb-a2bx-', db: 'sb-a2db-',\n              eg: 'sb-a2eg-', eg3: 'sb-a2eg3-', holes: 'sb-a2holes',\n              ho3: 'sb-a2ho3.webp', mc: 'sb-a2mc.webp', wc: 'sb-a2wc.webp', bk: 'sb-a2bk-',\n              // Anh nen SACH lo duoi -> ve lop lo len ca ban thang lan ban cong.\n              tailRound: 'sb-a2clh.webp', tailOval: 'sb-a2pvh.webp', tailOnCurved: true }\n    };\n    // A leather normally wears its own masks, but a COLOUR may override, and Epsom is why: its new\n    // hides were re-photographed on their own canvas and carry `maskSet: 'ep'`, while the handful\n    // shot years ago on the original frame keep the unnamed family. The override is per colour, so\n    // the two generations coexist on one leather until the last old photograph is replaced.\n    function maskFam(leatherId, colorDef) {\n      if (colorDef && colorDef.maskSet) return colorDef.maskSet;\n      return leatherId === 'lizard' ? 'lz' : (leatherId === 'ostrich' ? 'ot' : '');\n    }\n    var _prefetched = {};\n    var _lastSig = '';\n    /* 11/10 (QA #1 lan 7: \"bam Orange nhung khung 2D van Navy\", DEV 12/44, MAIN 0/44) \u2014 NGUYEN NHAN (tai hien do-ket.cjs + log tung buoc): renderer chi tai 1 lan moi URL va CACHE ca anh DECODE LOI.\n       Khach bam mau A -> render() goi huyWarm() cat anh warm dang bay (img.src=''); neu anh warm cua mau B (mau ke) dang o khoang decode() thi decode that bai, renderer van cache Image\n       RONG (naturalWidth 0) cho URL do -> lan bam B sau do: cache co nhung ok=false -> renderer tu thu lai 3 nhip (cung cache hong) roi bo, khung giu mau cu, sig khong doi nen refresh bo qua mai.\n       Bo trinh bay (adapter) khong sua duoc cache cua renderer -> TU PHUC HOI o day: moi luot ve co token (so thu tu); sau khi renderer thu xong (~3,4 s) neu luot ve MOI NHAT chua len khung\n       (lop khong khop file / an) thi ve lai voi URL phu ?r=<token> (khoa cache khac, mot lan tai moi) \u2014 nho de lan ve sau cua cung file cung dung URL phu; toi da 2 lan phuc hoi / sig. Khong sua renderer. */\n    try { if (performance.setResourceTimingBufferSize) performance.setResourceTimingBufferSize(800); } catch (e) { }   /* de daTai() thay du anh warm (mac dinh 250 muc) */\n    var _renderTok = 0, _lastRenderAt = 0, _healN = 0, _bust = {}, _healT = null;\n    function mapBust(layers) {\n      return layers.map(function (l) {\n        if (!_bust[l.src]) return l;\n        var c = {}; for (var k in l) c[k] = l[k];\n        var u = SB.assetUrl(l.src); c.src = u + (u.indexOf('?') >= 0 ? '&' : '?') + 'r=' + _bust[l.src];\n        return c;\n      });\n    }\n    function tepCua(u) { return String(u || '').split('|')[0].split('?')[0]; }\n    function khungKhop(layers) {   /* moi lop CAN VE da nam tren stage (dung file, khong an)? */\n      for (var i = 0; i < layers.length; i++) {\n        var l = layers[i], nd = stage.querySelector('[data-layer=\"' + l.layer + '\"]');\n        if (!nd) continue;\n        if (nd.hidden) return false;\n        var want = tepCua(SB.assetUrl(l.src)), has = tepCua(nd.getAttribute('data-src'));\n        if (want !== has) return false;\n      }\n      return true;\n    }\n    function daTai(u) {   /* trinh duyet DA tai xong file nay (Resource Timing) \u2014 anh co that nhung renderer khong dung duoc = cache hong, khong phai dang cho mang */\n      try { var f = tepCua(u), es = performance.getEntriesByType('resource'); for (var i = 0; i < es.length; i++) if (es[i].name.indexOf(f) === 0 && es[i].responseEnd > 0) return true; } catch (e) { }\n      return false;\n    }\n    function phucHoi(layers, sig, tok, nhanh) {\n      if (tok !== _renderTok || sig !== _lastSig) return;   /* da co luot ve moi hon / khach doi lua chon */\n      if (khungKhop(layers) || _healN >= 2) return;\n      if (nhanh) {   /* kiem som (0,9 s): chi phuc hoi neu MOI lop chua len deu la file da tai xong; con lai cho kiem 3,4 s (mang cham thi chua phai loi) */\n        var chua = layers.filter(function (l) { var nd = stage.querySelector('[data-layer=\"' + l.layer + '\"]'); return nd && (nd.hidden || tepCua(SB.assetUrl(l.src)) !== tepCua(nd.getAttribute('data-src'))); });\n        if (!chua.every(function (l) { return daTai(SB.assetUrl(l.src)); })) { _healT = setTimeout(function () { phucHoi(layers, sig, tok); }, 2500); return; }\n      }\n      _healN++;\n      layers.forEach(function (l) {\n        var nd = stage.querySelector('[data-layer=\"' + l.layer + '\"]');\n        if (!nd || nd.hidden || tepCua(SB.assetUrl(l.src)) !== tepCua(nd.getAttribute('data-src'))) _bust[l.src] = ++_renderTok;\n      });\n      var t2 = ++_renderTok; _lastRenderAt = Date.now();\n      try { renderer.render(mapBust(layers)); } catch (e) { if (window.console) console.warn('phucHoi loi:', e); }\n      lenPhucHoi(layers, sig, t2);\n    }\n    function lenPhucHoi(layers, sig, tok) { clearTimeout(_healT); _healT = setTimeout(function () { phucHoi(layers, sig, tok, true); }, 900); }\n    /* 20/09 LAM LAI (chu shop): vao trang ve NGAY mot bo lop mac dinh \u2014 builder: den Epsom Flat; bai san: mau cua chinh san pham\n       (input an, xem val()). Chua chon gi + khong deep-link -> ve mac dinh; da chon dong ma chua chon mau -> GIU khung dang hien. */\n    var MAC_DINH = { kind: 'Epsom Calfskin', colour: 'Black' };\n    /* 21/09: dong bao duoi truong Style of Strap khi kieu da chon bi loc (dong da / dang) -> tra ve Classic. Token --warn-* nhu ghi chu preview. */\n    var _baoT = null, _baoEl = null;\n    function baoStyle(msg, oGay) {\n      try {\n        var rd = document.querySelector('input[name=\"properties[Style of Strap]\"]'); var field = rd ? rd.closest('.cfield') : null;\n        if (!field) return;\n        if (!_baoEl) {\n          _baoEl = document.createElement('p'); _baoEl.className = 'cspv-bao-style'; _baoEl.setAttribute('role', 'status');\n          _baoEl.style.cssText = 'margin:.6rem 0 0;padding:.6rem 1rem;border-radius:8px;text-align:center;font-size:var(--t-caption,13px);line-height:1.45;background:var(--warn-bg,#fbf6e6);border:1px solid var(--warn-bd,#f0e6c4);color:var(--warn-ink,#8a6d1a)';\n          document.addEventListener('change', function (e) { var t = e.target; if (t && t.name === 'properties[Style of Strap]' && _baoEl) _baoEl.hidden = true; }, true);\n        }\n        /* 21/09 chieu (chu shop chot): MOBILE \u2014 dong bao dat NGAY DUOI o gay xung khac (Curved End) neu co, khong cuon (khung preview dinh 0-348px\n           de kin cho duoi Style of Strap). PC \u2014 giu duoi Style of Strap, cuon nhe khi lot duoi header dinh / duoi man. */\n        var pc = window.matchMedia('(min-width: 750px)').matches, host = (!pc && oGay && oGay.closest('.cfield')) || field;\n        if (_baoEl.parentNode !== host) host.appendChild(_baoEl);\n        _baoEl.textContent = msg; _baoEl.hidden = false;\n        if (pc) {\n          var rb = _baoEl.getBoundingClientRect(), canTren = parseFloat(getComputedStyle(_baoEl).scrollMarginTop) || 0;\n          if (rb.top < canTren) window.scrollBy({ top: rb.top - canTren, behavior: 'smooth' }); else if (rb.bottom > window.innerHeight) _baoEl.scrollIntoView({ block: 'nearest', behavior: 'smooth' });\n        }\n        clearTimeout(_baoT); _baoT = setTimeout(function () { if (_baoEl) _baoEl.hidden = true; }, 6000);\n      } catch (e) { if (window.console) console.warn('baoStyle loi:', e); }\n    }\n    /* 20/09 toi (chu shop sua muc 1): vao trang HIEN ANH CHUP THAT (gallery), preview KHONG hien. Bo lop mac dinh (builder: Epsom Black;\n       bai san: mau san pham) van duoc ve vao khung dang an de MOI bo nho dem. Preview chi bung ra khi khach TUONG TAC lam doi hinh:\n       builder = chon mau (chon da chua du \u2014 khung chua co gi cua dong do de hien); bai san = doi bat ky tuy chon ve (sig doi so voi\n       khung moi). Deep-link Custom-2D = hien ngay (khach den de xem cau hinh do). Bung ra SAU khi khung cua lua chon do ve xong \u2014\n       khong lo khung moi Epsom Black ra man hinh trong luc cho. Tu do preview o lai, doi theo lua chon. */\n    var _daMoi = false, _sigMoi = '', _daTuongTac = !!window.CSTRAP_DEEPLINK, _daHienLanDau = false;\n    /* 13/10 (A1): the hien lan dau \u2014 KHONG tu cuon trang (truoc: scrollTo 540px day o vua cham ra ngoai man). O khach vua cham (hoac phan tu moc) giu NGUYEN VI TRI tren man hinh:\n       do truoc / sau khi bo cuc doi, bu dung phan chenh MOT lan (scroll anchoring cua trinh duyet tat o .cstrap-section < 1100 \u2014 xem CSS overflow-anchor). */\n    function refDiem() {\n      var el = document.elementFromPoint(window.innerWidth / 2, Math.round(window.innerHeight * 0.7)); if (!el) return null;\n      var r = el.closest ? el.closest('.cfield, .ccolor, .cshape, .csum, h3, label') : null; return (r && r !== document.body) ? r : null;\n    }\n    function apHienThi(showPv, cuon) {\n      var ref = null, t0 = 0;\n      if (showPv && wrapEl && wrapEl.hidden && window.matchMedia('(max-width: 749px)').matches) { ref = (_oVuaBam && _oVuaBam.isConnected) ? _oVuaBam : refDiem(); if (ref) t0 = ref.getBoundingClientRect().top; }\n      apHienThi0(showPv, false);\n      if (ref && ref.isConnected) {\n        var d = ref.getBoundingClientRect().top - t0; if (Math.abs(d) > 1) window.scrollBy(0, d);\n        requestAnimationFrame(function () { if (ref.isConnected) { var d2 = ref.getBoundingClientRect().top - t0; if (Math.abs(d2) > 1) window.scrollBy(0, d2); } });   /* bu lan 2 sau khi bo cuc on dinh */\n      }\n    }\n    function apHienThi0(showPv, cuon) {\n      if (wrapEl) {\n        var pvVuaBat = showPv && wrapEl.hidden;\n        if (_noScrollOnce) { pvVuaBat = false; _noScrollOnce = false; }\n        wrapEl.hidden = !showPv;\n        var noteOut = document.querySelector('.cspv__note');\n        if (noteOut && !wrapEl.contains(noteOut)) noteOut.hidden = !showPv;\n        if (pvVuaBat && cuon && window.matchMedia('(max-width: 749px)').matches) {\n          requestAnimationFrame(function () {\n            var headAnchor = document.querySelector('.cstrap__head');\n            var y = headAnchor ? headAnchor.getBoundingClientRect().bottom + window.pageYOffset : wrapEl.getBoundingClientRect().top + window.pageYOffset;\n            window.scrollTo({ top: Math.max(0, y), behavior: 'smooth' });\n          });\n        }\n      }\n      var gridEl = document.querySelector('.cstrap');\n      if (gridEl) gridEl.classList.toggle('has-preview', showPv);\n      if (restoreBtn) restoreBtn.hidden = !(_daTuongTac && _pvHidden);\n      if (typeof ghiMini === 'function') ghiMini();\n      var g1 = document.querySelector('.cstrap__mainwrap'), g2 = document.querySelector('.cstrap__thumbs');\n      if (g1) g1.style.display = showPv ? 'none' : '';\n      if (g2) g2.style.display = showPv ? 'none' : '';\n      { var g0 = document.querySelector('.cstrap__media'); if (g0) { var muon0 = (window.matchMedia('(max-width: 749px)').matches && showPv) ? 'none' : ''; if (g0.style.display !== muon0) g0.style.display = muon0; } }   /* 11/10: tinh lai theo be rong HIEN TAI (>= 750 cot anh luon hien, gallery/thumbs an rieng) */\n      if (showPv) { _daHienLanDau = true; }\n    }\n    /* 11/10 dot 1 T2 (chu shop): khung LIVE (PC >= 990) khong cao hon man hinh. CSS cat anh nen o\n       100svh - header - 2.4rem - --cspv-over; --cspv-over = phan KHUNG quanh anh (padding + dai simulation 1-3 dong + margin) do that o day,\n       vi dai simulation xuong dong tuy be ngang cot. Do lai khi doi cua so, anh nen tai xong, dai doi chieu cao. Khong vong lap: over = cao khung - cao anh. */\n    /* 11/10 (chu shop, loi bao thieu): <1100 khung preview DINH tren cung va che muc thieu khi trang cuoi len. --cspv-dinh = day THUC cua khung dang dinh\n       (top dinh + cao); preview thu / an -> day header dinh. CSS scroll-margin-top cua o/muc + diToiThieu (engine) cuon sao nhan muc nam NGAY DUOI day nay (+12px).\n       PC (>= 1100): khong dat bien (khung nam ben canh, khong che). */\n    function datDinh() {\n      try {\n        var root = document.documentElement;\n        if (!window.matchMedia('(max-width: 749px)').matches) { if (root.style.getPropertyValue('--cspv-dinh')) root.style.removeProperty('--cspv-dinh'); return; }\n        var v = 0;\n        if (wrapEl && !wrapEl.hidden && wrapEl.getBoundingClientRect().height > 0) { var cs = getComputedStyle(wrapEl); v = (cs.position === 'sticky' || cs.position === 'fixed' ? (parseFloat(cs.top) || 0) : 0) + wrapEl.getBoundingClientRect().height; }\n        else { var hd = document.querySelector('.shopify-section-group-header-group'); if (hd) { var hs = getComputedStyle(hd); v = hs.position === 'sticky' || hs.position === 'fixed' ? hd.getBoundingClientRect().height : 0; } }\n        v = Math.round(v); if (root.style.getPropertyValue('--cspv-dinh') !== v + 'px') root.style.setProperty('--cspv-dinh', v + 'px');\n      } catch (e) { if (window.console) console.warn('datDinh loi:', e); }\n    }\n    (function () {\n      var t = 0, lai = function () { clearTimeout(t); t = setTimeout(datDinh, 60); };\n      window.addEventListener('resize', lai, { passive: true });\n      window.addEventListener('load', lai);\n      /* wrapEl duoc gan o cuoi file (var) -> gan quan sat sau khi script chay xong */\n      setTimeout(function () {\n        if (window.ResizeObserver && wrapEl) new ResizeObserver(lai).observe(wrapEl);\n        if (window.MutationObserver && wrapEl) new MutationObserver(lai).observe(wrapEl, { attributes: true, attributeFilter: ['hidden', 'style', 'class'] });\n        lai();\n      }, 0);\n    })();\n    /* CHOT #2 (16/09, chu shop giu cho B6 20/09): saveData bat hoac mang 2g/3g -> KHONG am gi (kho, dong dang chon, mau ke, re/cham).\n       Chi con dung nhung gi khach dang xem. Dung chung cho moi nhanh warm (lapLichAm, warmDong, moiKe). */\n    function mangChoAm() {\n      var cn = navigator.connection || {};\n      if (cn.saveData) return false;\n      if (/(^|-)2g$|(^|-)3g$|slow/i.test(cn.effectiveType || '')) return false;\n      return true;\n    }\n    // PHASE 01 (2026-08-17): swatch goc 140-230 KB/anh (anh 800px lam chip ~70px) -\n    // CDN Shopify ho tro ?width= tren asset theme (do thuc te: 185 KB -> 6 KB).\n    function swNho(f) {\n      var u = SB.assetUrl(f);\n      return u ? u + (u.indexOf('?') >= 0 ? '&' : '?') + 'width=160' : '';\n    }\n    // PHASE 02 (2026-08-17): mau chi bang CSS \u2014 co che mocgoods. File chi cua ta von la\n    // MAU PHANG + shading trong kenh alpha (script sinh: tint = hex phang x src_alpha),\n    // Chi ap cho dong da da kiem chung RGB phang (std 2-5/255, do 2026-08-17).\n    var CSSCHI = true;\n    // PHASE 03 (2026-08-19, chu shop \"mau chi va vien dung CSS goi ve\"): VIEN cung di\n    // duong cssmask \u2014 mask = file eg -white co san (mask chi dung kenh ALPHA nen file\n    // mau trang tai dung luon), mau = hex. Da do RGB phang (std 0-2.6/255) tren\n    // ep/lz/al/alp/ap/'' va mean RGB file khop hex bang duoi. vt/ot lech nhe (do\n    var CSSEG = true;\n    var CSSEG_FAM = { '': 1, ep: 1, epp: 1, lz: 1, al: 1, alp: 1, ap: 1, oq: 1 /* 2026-09-07: eg/eg3/holes nguon deu trang phang sd 0.0 */, oqp: 1 /* 30/10 Ostrich Quill Padded: eg/eg3 dung lai (alpha), holes nguon trang */,\n      np: 1, npp: 1 /* 2026-09-08 */, app: 1 /* 23/09: ban Padded dung chung nguon trang voi ap */, ot: 1 /* 2026-08-20: do sb-oeg-navy mean(39,50,80) khop #26324f, sb-oholes-red khop #cf2233 */,\n      otp: 1 /* 2026-09-16: bo padded tach khoa 'otp' \u2014 nguon y het bo cu nen giu nguyen duong cssmask */,\n      tg: 1 /* 2026-08-31: do sb-tgeg-red mean(209,34,51) khop #cf2233, sb-tgholes-red khop; sd 3.2-4.2/255 */,\n      // 2026-09-08: vegtan von KHONG bat, nen no doi 24 file vien + 24 file lo cho MOI kieu\n      // rally \u2014 va 36 trong so do chua bao gio ton tai. Hau qua khach thay duoc: chon vien\n      // Golden / Pink / Beige / Burgundy thi KHONG co gi hien ra, chi Black chay.\n      // Do lai nguon: sb-vteg-white sd 2.1, sb-vtholes-white sd 1.5, sb-vtholesl-white sd 3.0\n      // \u2014 deu phang, du dieu kien tint bang CSS. Bat len la 36 file thieu do khong con\n      // duoc goi den nua. (Vien do se doi tu (175,56,44) sang dung #cf2233 nhu moi dong khac.)\n      vt: 1, vtp: 1, sw: 1, swp: 1 /* 21/09 Swift: eg/eg3/holes/holesl nguon trang (255) sd 0 */,\n      a3: 1, a3r: 1, a3rp: 1 /* 25/10 Alligator Flat moi: eg/eg3/holes/holesl nguon trang (254-255) sd 0-7; a3rp = alp (Padded Red cu) */,\n      pu: 1 /* 29/10 Pueblo: eg/eg3/holes/holesl nguon trang */ };\n    var EG_HEX = { 'black': '#1c1c1c', 'golden': '#c9a227', 'red': '#cf2233', 'yellow': '#f5c518',\n      'pink': '#ef4d8f', 'blue': '#2b4ea2', 'green': '#2e8b45', 'grey': '#8f8f8f',\n      'beige': '#ddc9a3', 'white': '#f2efe9', 'orange': '#e07a1f', 'purple': '#8e44ad',\n      'brown': '#6b4423', 'turquoise': '#17a2a2', 'olive': '#6b7a2f', 'cream': '#e6d7b0',\n      'tan': '#b98a54', 'navy': '#26324f', 'light-blue': '#7fb6dd', 'royal-blue': '#2a4bab',\n      'dark-green': '#1f5233', 'burgundy': '#5c1f2b', 'light-pink': '#e6a6b6', 'dark-grey': '#4a4a4a' };\n    var CSSCHI_FAM = { ep: 1, epp: 1 /* 19/09 bo moi: mask trang (224,224,224) sd 0 */, lz: 1, ot: 1, otp: 1, vt: 1, ap: 1, app: 1 /* 23/09 */, al: 1, tg: 1 /* 2026-08-31: do sb-tgth-red mean(180,43,37) khop #b52c26, sd 4.4/255 */,\n      oq: 1 /* 2026-09-07: mask nguon RGB (255,255,255) sd 0.0 - phang tuyet doi */,\n      oqp: 1 /* 30/10 Ostrich Quill Padded: th/bx/db/pl nguon trang (254-255) */,\n      np: 1, npp: 1 /* 2026-09-08: vien/rally sd 0.0; chi sd 6-12 (co bong that) \u2014\n         cssmask lam phang bong do, chenh 4,7% tren 255, mat thuong khong thay,\n         doi lai 5 file thay vi 5 lop x 24 mau x 2 ho = 240 file */,\n      // 2026-09-08: 'vt' co trong bang tu lau nhung 'vtp' thi khong \u2014 nen day Flat cua\n      // vegtan tint chi bang CSS, con day Padded lai di doi 24 file anh cho tung mau chi\n      // (sb-vtth-*, sb-vtpbx-*, sb-vtdb-*, sb-vtpl-*), 56 file trong so do khong ton tai.\n      // Nguon deu phang (sd 1.6-2.0), va vtp dung chung th/db/pl voi vt \u2014 chi rieng bx la\n      // sb-vtpbx-white.webp, da co san.\n      vtp: 1,\n      sw: 1, swp: 1 /* 21/09 Swift: th/bx co bong (mean 244, sd 28) \u2014 cssmask lam phang nhu Nappa; db/eg/holes sd 0 */,\n      a3: 1, a3r: 1 /* 25/10 Alligator Flat moi: th/bx/db/pl nguon trang (255) sd 0 */,\n      pu: 1 /* 29/10 Pueblo: th/bx/db/pl nguon trang */ };\n    var TH_HEX = { 'black': '#1c1a19', 'white': '#f4f2ee', 'cream': '#e6d9bd', 'beige': '#d6c09c',\n      'yellow': '#ddb02a', 'orange': '#d67a29', 'red': '#b52c26', 'burgundy': '#5c1f2b',\n      'light-pink': '#e6a6b6', 'purple': '#69488c', 'royal-blue': '#2a4bab', 'blue': '#2f6fbf',\n      'light-blue': '#7fb6dd', 'aqua-blue': '#4bb8c9', 'turquoise': '#3fb3a6', 'mint': '#9fd6bb',\n      'green': '#2f8a45', 'dark-green': '#1f5233', 'olive': '#6b6a35', 'grey': '#8a8a8a',\n      'dark-grey': '#4a4a4a', 'light-brown': '#a97a4b', 'brown': '#6b4726', 'coke-brown': '#4a2b1c',\n      'caramel': '#eb9353' };\n    var KIND = { 'Epsom Calfskin': 'epsom', 'Ostrich': 'ostrich', 'Lizard': 'lizard', 'Alligator Patina': 'alligator-patina', 'Alligator': 'alligator', 'Hand-Dyed Vegtan': 'vegtan-handdye', 'Togo Calfskin': 'togo', 'Ostrich Quill': 'ostrich-quill', 'Nappa Calfskin': 'nappa', 'Swift Calfskin': 'swift', 'Pueblo': 'pueblo' };\n    var COLOR = { 'Navy': 'navy', 'Black': 'black', 'Orange': 'orange', 'Pink': 'pink', 'Turquoise': 'turquoise',\n                  'Brown': 'brown', 'Teal': 'teal', 'Green': 'green', 'White': 'white', 'Yellow': 'yellow', 'Gray': 'gray', 'Grey': 'gray', 'Blue': 'blue',\n                  /* 17/09: nhan doi Gray->Grey nhung id file van *-gray; handle(nhan) khong ra id nen phai map tay */\n                  'Blue Grey': 'blue-gray', 'Charcoal Grey': 'charcoal-gray', 'Dark Olive Grey': 'dark-olive-gray', 'Stone Grey': 'stone-gray', 'Taupe Grey': 'taupe-gray' };\n    var THREADS = ['Black','White','Cream','Beige','Yellow','Orange','Red','Burgundy','Light Pink','Purple','Royal Blue','Blue','Light Blue','Aqua Blue','Turquoise','Mint','Green','Dark Green','Olive','Grey','Dark Grey','Light Brown','Brown','Coke Brown'];\n    // Edge paint and hole lining read the same list, so a lining colour is always also an edge\n    // colour and \"match the underlay\" needs no separate layer files. Keep in step with\n    // `trim_palette` in the section. (The keeper is NOT on this list - it follows the hide.)\n    var TRIM = ['Black', 'Golden', 'Red', 'Yellow', 'Pink', 'Blue', 'Green', 'Grey', 'Beige', 'White', 'Orange', 'Purple', 'Brown', 'Turquoise', 'Olive', 'Cream', 'Tan', 'Navy',\n                'Light Blue', 'Royal Blue', 'Dark Green', 'Burgundy', 'Light Pink', 'Dark Grey'];\n    var EDGES = TRIM;\n    var UNDERS = TRIM;\n    function handle(n) { return (n || '').toLowerCase().replace(/ /g, '-'); }\n    function hexToRgb(h) {\n      h = (h || '').trim().replace('#', '');\n      if (h.length !== 6) return null;\n      return [parseInt(h.slice(0, 2), 16), parseInt(h.slice(2, 4), 16), parseInt(h.slice(4, 6), 16)];\n    }\n    function colorDefFor(state) {\n      var hit = null;\n      SB.selectors.leather(state).colors.forEach(function (c) { if (c.id === state.colorId) hit = c; });\n      return hit;\n    }\n    // sRGB -> CIELAB. Distance has to be measured where the EYE measures it: a weighted sum of RGB\n    // differences put an olive thread on a warm-grey hide, because grey and olive differ almost\n    // entirely in blue and blue was the channel that rule discounted. In Lab the same pair is far\n    // apart on b*, which is exactly the axis a person is reading when they call one grey and the\n    // other olive.\n    function rgbToLab(c) {\n      var v = c.map(function (x) {\n        x /= 255;\n        return x > 0.04045 ? Math.pow((x + 0.055) / 1.055, 2.4) : x / 12.92;\n      });\n      var X = (v[0] * 0.4124 + v[1] * 0.3576 + v[2] * 0.1805) / 0.95047;\n      var Y = (v[0] * 0.2126 + v[1] * 0.7152 + v[2] * 0.0722);\n      var Z = (v[0] * 0.0193 + v[1] * 0.1192 + v[2] * 0.9505) / 1.08883;\n      var f = function (t) { return t > 0.008856 ? Math.pow(t, 1 / 3) : (7.787 * t) + 16 / 116; };\n      X = f(X); Y = f(Y); Z = f(Z);\n      return [116 * Y - 16, 500 * (X - Y), 200 * (Y - Z)];\n    }\n    // \"Match leather\" has to become an actual thread, because the thread layers are pre-coloured\n    // images \u2014 there is no tone-on-tone thread mask. So pick the stocked thread nearest the hide's\n    // own colour.\n    function nearestThread(colorDef) {\n      if (!colorDef) return null;\n      var wantRgb = hexToRgb(colorDef.tone);\n      if (!wantRgb) return null;\n      var want = rgbToLab(wantRgb);\n      var best = null, bestD = Infinity;\n      document.querySelectorAll('[id^=\"cstitch-custom-\"] .ccolor').forEach(function (el) {\n        var input = el.querySelector('input');\n        if (!input) return;\n        var tile = el.querySelector('.ccolor__tile');\n        var got = hexToRgb(el.getAttribute('data-hex') || (tile && tile.style.getPropertyValue('--c')));\n        if (!got) return;\n        var lab = rgbToLab(got);\n        var d = Math.pow(want[0] - lab[0], 2) + Math.pow(want[1] - lab[1], 2) + Math.pow(want[2] - lab[2], 2);\n        if (d < bestD) { bestD = d; best = input.value; }\n      });\n      return best;\n    }\n    // Buckle layers are cut per CANVAS, not per leather: the file depends on which frame the strap\n    // was photographed in, so it is the mask family that decides \u2014 a leather re-shot on a shared\n    // canvas inherits that canvas's buckles the moment its colours carry the family. Families\n    // without their own set fall back to the original sb-buckle- photographs, and a finish with no\n    // layer returns null: the preview draws no buckle and the order still records the choice.\n    function buckleFile(v, fam) {\n      v = v || '';\n      var M = MASKS[fam] || {};\n      if (M.noBuckle) return null;   // khung chua co anh khoa: khong ve, khong muon khung khac\n      var own = !!M.bk;\n      if (own && M.noPreV && /Pre-?V/i.test(v)) return null;\n      // 23/09 (chu shop): khoa gap Deployant - hien tai CHI dong Alligator Patina co lop nay.\n      // Phai xet TRUOC cac nhanh mau ben duoi, khong thi /Gold/ nuot mat \"Deployant Clasp - Gold\".\n      // Ho khong khai bkDeployant tra null: preview khong ve khoa, khong muon khung cua ho khac.\n      if (/Deployant|Folding Clasp|Omega/i.test(v)) {\n        if (!M.bkDeployant) return null;\n        return M.bkDeployant + (/Gold/i.test(v) ? 'gold' : 'silver') + '.webp';\n      }\n      var bf = /^Butterfly/.test(v);\n      // \"Pre-V\" is the trade's generic name for this buckle shape. The branded names this list used\n      // to carry (and Hidden Clasp / Pin Gold) were retired with their options; a legacy value from\n      // an old cart simply matches nothing and draws no buckle.\n      if (/Pre-?V/i.test(v)) {\n        if (!own) return null;                      // only the newer canvases have Pre-V layers\n        if (/Gold/i.test(v)) return M.bk + 'pn-gold.webp';\n        if (/Silver/i.test(v)) return M.bk + 'pn-silver.webp';\n        if (/Black/i.test(v)) return M.bk + 'pn-black.webp';\n        return null;\n      }\n      var pre = own ? M.bk : 'sb-buckle-';\n      if (/Rose\\s*Gold/i.test(v)) return bf ? null : pre + (own ? 'rosegold' : 'rose-gold') + '.webp';\n      if (/Gold/i.test(v)) return pre + (bf ? 'bf-gold' : 'gold') + '.webp';\n      if (/Silver/i.test(v)) return pre + (bf ? 'bf-silver' : 'silver') + '.webp';\n      if (/Black/i.test(v)) return pre + (bf ? 'bf-black' : 'black') + '.webp';\n      return null;   // None\n    }\n    // A colour id is the label handled \u2014 \"Coral Orange\" -> \"coral-orange\" \u2014 so a leather can grow a\n    // chart of nineteen without nineteen more lines of map. COLOR stays for the older colours whose\n    // id does not follow from their label.\n    /* Nhan mau -> dinh nghia mau cua DONG DA dang chon. Khop LABEL truoc: cung chu \"Grey\" ma Togo\n       la id `grey`, Alligator la id `gray` - bang COLOR toan cuc khong phan biet duoc (vo 17/09:\n       doi nhan Gray->Grey lam Togo Grey mat base). COLOR/handle chi con la du phong cho link cu. */\n    function timMau(cols, name) {\n      var hit = null;\n      (cols || []).forEach(function (c) { if (c.label === name) hit = c; });\n      if (hit) return hit;\n      var want = COLOR[name] || handle(name);\n      (cols || []).forEach(function (c) { if (c.id === want) hit = c; });\n      return hit;\n    }\n    function colorIdFor(state, name) {\n      var c = timMau(SB.selectors.leather(state).colors, name);\n      return c ? c.id : null;\n    }\n    function val(n) {\n      var el = document.querySelector('[name=\"properties[' + n + ']\"]:checked');\n      if (el) return el.value;\n      el = document.querySelector('select[name=\"properties[' + n + ']\"]');\n      if (el) return el.value;\n      /* 20/09: bai san (custom-strap-form-v2, show_leather=false) in da + mau cua chinh san pham bang input an -> preview ve dung mau do */\n      el = document.querySelector('input[type=\"hidden\"][name=\"properties[' + n + ']\"]');\n      return el ? el.value : '';\n    }\n    var wrapEl = document.querySelector('[data-cspv-wrap]');\n    // The customer can put the preview away and get the product photographs back; the restore chip\n    // stands where the preview stood. Session-only state \u2014 a preference, not a setting.\n    /* 21/09 toi (chu shop): nut Hide ban cu (goc duoi phai, icon mui ten len thay chu) \u2014 bam = an khung, chip \"Show live preview\" mo lai. */\n    var hideBtn = document.querySelector('[data-cspv-hide]');\n    var restoreBtn = document.querySelector('[data-cspv-restore]');\n    var _pvHidden = false;\n    // form, card sticky se tu ghim ngay truoc mat ho; keo len la bat ho cuon lai tu dau.\n    var _noScrollOnce = false;\n    /* 13/10 (12.2): dien thoai DOC (< 750, khong phai man ngang) \u2014 bam x = THU thanh dinh (cung the, khong an), bam thanh / Show = MO. PC / ngang / tablet: nhu cu (an + chip). */\n    function moPortrait() { return window.matchMedia('(max-width: 749px)').matches; }\n    var _thu = false;\n    function ghiMini() {\n      if (!wrapEl) return;\n      var fr = wrapEl.querySelector('.cspv__frame'); if (!fr) return;\n      var mb = fr.querySelector('.cspv__mini');\n      if (!mb) { mb = document.createElement('span'); mb.className = 'cspv__mini'; mb.innerHTML = '<span class=\"cspv__sum\"></span><span class=\"cspv__pr\"></span>'; fr.appendChild(mb); }\n      var kind = (val('Kind of Leather') || '').replace(/\\s+Calfskin$/i, '').trim();\n      var tx = [kind, val('Colour'), val('Style of Strap')].filter(function (x) { return !!x; }).join(' \\u00B7 ') || 'Your strap';\n      var tot = document.querySelector('.csum [data-total]') || document.querySelector('.cstrap__tong');\n      var sum = mb.querySelector('.cspv__sum'), pr = mb.querySelector('.cspv__pr');\n      if (sum && sum.textContent !== tx) sum.textContent = tx;\n      var gia = tot && tot.textContent.trim() ? 'Total ' + tot.textContent.trim() : '';\n      if (pr && pr.textContent !== gia) pr.textContent = gia;\n    }\n    /* 13/10 (A5): cham anh preview = phong to (nut zoom van an; modal co san) \u2014 luc dang THU thi cham = mo lai the */\n    if (stage) { stage.style.cursor = 'zoom-in'; stage.addEventListener('click', function () { if (_thu) return; var zb = document.querySelector('[data-cspv-zoom]'); if (zb) zb.click(); }); }\n    function doiThu(muon) {\n      var ref = refDiem(), t0 = ref ? ref.getBoundingClientRect().top : 0;   /* 13/10 (A2): 1 phan tu moc, bu 1 lan (anchoring tat) -> lech 0 */\n      _thu = (muon == null) ? !_thu : !!muon;\n      wrapEl.classList.toggle('cspv--thu', _thu);\n      if (hideBtn) hideBtn.setAttribute('aria-label', _thu ? 'Show live preview' : 'Hide live preview');\n      ghiMini();\n      if (ref && ref.isConnected) { var d = ref.getBoundingClientRect().top - t0; if (Math.abs(d) > 1) window.scrollBy(0, d); }\n    }\n    if (hideBtn) hideBtn.addEventListener('click', function () { if (moPortrait() && wrapEl) { doiThu(); return; } _pvHidden = true; refresh(); });\n    if (wrapEl) wrapEl.addEventListener('click', function (e) { if (e.target && e.target.closest && e.target.closest('[data-cspv-hide]')) return; if (_thu && moPortrait()) doiThu(false); });\n    document.addEventListener('cstrap:tong', ghiMini);\n    ['change', 'click'].forEach(function (ev) { document.addEventListener(ev, function () { setTimeout(ghiMini, 90); setTimeout(ghiMini, 250); }, true); });\n    if (restoreBtn) restoreBtn.addEventListener('click', function () { _pvHidden = false; _noScrollOnce = true; refresh(); });\n    // Mobile / tablet (<= 989): the media column is only as tall as its content, so sticky can't travel. Reparent the\n    // preview card to the section wrapper (which spans the whole form) so it pins while scrolling.\n    /* 11/10 (loi resize / zoom, chu shop: \"lam khach bo khi vao dat\"): truoc day chi chay MOT LAN luc tai trang. Doi be rong qua moc 989 (keo cua so, xoay iPad,\n       chia doi man hinh, Ctrl -/+ doi be rong CSS) -> cot anh bi giau + LIVE ket trong cot an, hoac LIVE o cot form khi da len PC. Nay: ghi vi tri GOC cua the LIVE / dai simulation /\n       chip Show live preview luc tai, va relayoutPv() dat lai THEO CA HAI CHIEU (matchMedia 989 + 749 'change'): <= 989 dua LIVE xuong duoi tieu de (nhu cu); >= 990 tra ve DUNG cho goc,\n       cot anh hien lai. Khong dung toi lua chon / trang thai bung-thu preview (wrapEl.hidden). */\n    var _noteEl0 = wrapEl ? wrapEl.querySelector('.cspv__note') : null;\n    var _gocWrap = wrapEl ? { p: wrapEl.parentNode, prev: wrapEl.previousSibling } : null;\n    var _gocNote = _noteEl0 ? { p: _noteEl0.parentNode, prev: _noteEl0.previousSibling } : null;\n    var _gocRest = restoreBtn ? { p: restoreBtn.parentNode, prev: restoreBtn.previousSibling } : null;\n    /* 11/10 toi (sep): dang dien thoai (< 1100) the LIVE dinh trong VUNG CAC MUC CHON (.cstrap__pvzone = moi thu trong form TRUOC o tom tat \"Your strap\").\n       Het vung -> o tom tat + nut mua DAY ca the LIVE len nhu mot khung (sticky goc cua trinh duyet, khong JS cuon, khong giat). Chi boc lai DOM trong CUNG form -> FormData nguyen. */\n    var _formPv = document.querySelector('form[id^=\"cstrap-form-\"]');\n    function datLai(el, goc) {\n      if (!el || !goc || !goc.p) return;\n      var ref = (goc.prev && goc.prev.parentNode === goc.p) ? goc.prev.nextSibling : (goc.prev ? null : goc.p.firstChild);\n      if (ref === el) return;\n      goc.p.insertBefore(el, ref);\n    }\n    /* 11/10 (loi QA khach: khung LIVE sticky phu len vung mua o <= 749): khung LIVE chi duoc dinh TRONG vung cac muc chon. Khi khoi tom tat/nut mua (.csum, hoac hang mua) cham day khung LIVE\n       thi khung troi LEN theo trang (transform translateY am \u2014 khong doi bo cuc, khong CLS). Ap cho the LIVE + chip Show live preview (cung sticky). >= 750: cot anh o cot rieng, khong phu gi. */\n    /* (sua sau QA lan 6) luon so voi style THAT (khong dung bien theo doi) va GO transform khi khung an / khong sticky / >= 750 / khong co moc. */\n    /* 11/10 (iPhone that, khung GIAT khi cuon toi vung mua): BO transform theo su kien scroll (iOS ban scroll tre, khung nhay). Nay CSS THUAN: khoi tom tat / nut mua / mo ta\n       (csum, cbuyrow, ... trong form) dat position:relative + z-index tren khung LIVE + nen dac -> khung dinh nam NGUYEN CHO, khoi mua truot len DE LEN khung (khong JS, khong dich chuyen khung).\n       Ham nay chi con GO transform cu neu con sot. */\n    /* 13/10 (muc 16): bo cuc preview theo CAU TRUC Moc \u2014 MOT moc 749 / 750.\n       < 750 (dien thoai doc): the la 1 phan tu TRONG LUONG, chen NGAY TRUOC dau form builder, position: sticky (top = max(8, day header + 6) do capTop), dai simulation tach ra hop truoc form.\n       >= 750 (PC, iPad, dien thoai ngang): the o DAU CONG ANH ben trai (cho goc), sticky; mo -> an gallery, thu -> hien lai. */\n    var _formPv = document.querySelector('form[id^=\"cstrap-form-\"]');\n    function pvZone() {\n      if (!_formPv) return null;\n      var z = _formPv.querySelector('.cstrap__pvzone');\n      if (z && z.parentNode === _formPv) return z;\n      var moc = null;\n      for (var i = 0; i < _formPv.children.length; i++) { var c = _formPv.children[i]; if (c.classList.contains('csum') || c.classList.contains('cbuyrow')) { moc = c; break; } }\n      if (!moc) return null;\n      z = document.createElement('div'); z.className = 'cstrap__pvzone';\n      _formPv.insertBefore(z, _formPv.firstChild);\n      while (z.nextSibling && z.nextSibling !== moc) z.appendChild(z.nextSibling);\n      return z;\n    }\n    /* 13/10 (muc 22, ban co ban \u2014 cach Moc): MOT moc 749. < 750: the = phan tu trong luong, dau \"vung dinh\" (tu dau form toi TRUOC khoi tom tat / nut mua) nen the troi di khi toi khu mua (QA L1);\n       dai simulation = hop truoc form. >= 750: the o DAU cot anh (cho goc), dai simulation ngay duoi the; mo -> an gallery, thu -> hien lai. Goi lai khi resize / xoay (khong mat the). */\n    function relayoutPv() {\n      if (!wrapEl) return;\n      var mob = window.matchMedia('(max-width: 749px)').matches;\n      if (mob) {\n        var zone = pvZone() || _formPv || document.querySelector('form[id^=\"cstrap-form-\"]');\n        if (zone) {\n          if (zone.firstChild !== wrapEl) zone.insertBefore(wrapEl, zone.firstChild);\n          /* 13/10 (sep): < 750 dai simulation RA NGOAI the dinh, ngay DUOI the, trong luong trang (cuon di theo trang) */\n          if (_noteEl0 && _noteEl0.previousSibling !== wrapEl) zone.insertBefore(_noteEl0, wrapEl.nextSibling);\n          var _truocRest = _noteEl0 || wrapEl;\n          if (restoreBtn && restoreBtn.previousSibling !== _truocRest) zone.insertBefore(restoreBtn, _truocRest.nextSibling);\n        }\n      } else {\n        datLai(wrapEl, _gocWrap);\n        if (_noteEl0) datLai(_noteEl0, _gocNote);\n        if (restoreBtn) datLai(restoreBtn, _gocRest);\n        if (_thu) { _thu = false; wrapEl.classList.remove('cspv--thu'); }\n      }\n      var g0 = document.querySelector('.cstrap__media');\n      if (g0) { var muon = (mob && !wrapEl.hidden) ? 'none' : ''; if (g0.style.display !== muon) g0.style.display = muon; }\n    }\n    /* 13/10 (muc 24): boc stage trong 1 \"cua so\" (.cspv__win) de >= 750 phong day lap day vung anh (CSS) ma khong doi stage / renderer (stage van vuong). < 750: cua so display: contents (khong anh huong). */\n    function dungWin() {\n      if (!stage || !stage.parentNode || stage.parentNode.classList.contains('cspv__win')) return;\n      var w = document.createElement('div'); w.className = 'cspv__win';\n      stage.parentNode.insertBefore(w, stage); w.appendChild(stage);\n    }\n    dungWin();\n    relayoutPv();\n    (function () {\n      var cho = false, lai = function () { if (cho) return; cho = true; requestAnimationFrame(function () { cho = false; relayoutPv(); }); };\n      var m = window.matchMedia('(max-width: 749px)');\n      if (m.addEventListener) m.addEventListener('change', lai); else if (m.addListener) m.addListener(lai);\n      window.addEventListener('resize', lai, { passive: true });   /* Moc: moi lan resize / zoom / xoay dat cho lai (idempotent) */\n      window.addEventListener('orientationchange', lai);\n    })();\n    // Corner zoom -> 90vh viewer (a static clone of the current stage).\n    var zBtn = document.querySelector('[data-cspv-zoom]');\n    var zModal = document.querySelector('[data-cspv-modal]');\n    var zStage = zModal ? zModal.querySelector('[data-cspv-zstage]') : null;\n    if (zModal) document.body.appendChild(zModal);\n    /* B6-B (20/09, chu shop chot): zoom luon FILE NGUYEN (1254) \u2014 bo &width= cua tier tren src va mask-image cua ban sao;\n       re/cham/focus nut zoom thi am truoc ban nguyen cua cac lop dang hien (lan nen, low). */\n    function urlTho(u) { return (u || '').replace(/&width=[0-9]+/g, ''); }\n    function amThoZoom() {\n      try {\n        var urls = [];\n        [].slice.call(stage.querySelectorAll('[data-layer]')).forEach(function (el) {\n          if (el.hidden) return;\n          if (el.tagName === 'IMG') { var sr = el.getAttribute('data-src') || el.getAttribute('src'); if (sr) urls.push(urlTho(sr)); }\n          else { var m = el.style.maskImage || el.style.webkitMaskImage || ''; var a = m.indexOf('url(\"'), z = m.indexOf('\")'); if (a >= 0 && z > a) urls.push(urlTho(m.slice(a + 5, z))); }\n        });\n        if (renderer.amTho) renderer.amTho(urls);\n      } catch (e) { if (window.console) console.warn('amThoZoom loi:', e); }\n    }\n    function zOpen() {\n      if (!zStage) return;\n      zStage.innerHTML = '';\n      var clone = stage.cloneNode(true);\n      clone.removeAttribute('data-cspv-stage');\n      [].slice.call(clone.querySelectorAll('[data-layer]')).forEach(function (el) {\n        var sr = el.getAttribute('src'); if (sr && sr.indexOf('&width=') >= 0) el.setAttribute('src', urlTho(sr));\n        var st = el.getAttribute('style'); if (st && st.indexOf('&width=') >= 0) el.setAttribute('style', urlTho(st));\n      });\n      zStage.appendChild(clone);\n      zModal.hidden = false;\n      document.body.style.overflow = 'hidden';\n    }\n    function zClose() { zModal.hidden = true; document.body.style.overflow = ''; }\n    if (zBtn) zBtn.addEventListener('click', function (e) { e.stopPropagation(); zOpen(); });\n    if (zBtn) ['pointerenter', 'touchstart', 'focus'].forEach(function (ev) { zBtn.addEventListener(ev, amThoZoom, { passive: true }); });\n    if (zModal) {\n      zModal.addEventListener('click', function (e) { if (e.target === zModal) zClose(); });\n      zModal.querySelector('[data-cspv-close]').addEventListener('click', zClose);\n      document.addEventListener('keydown', function (e) { if (e.key === 'Escape' && !zModal.hidden) zClose(); });\n    }\n    /* 11/10 LAG B1: chi ghi DOM khi gia tri KHAC (ghi trung van sinh MutationObserver o engine -> do lai ca luoi). */\n    function dsp(el, v) { if (el && el.style.display !== v) el.style.display = v; }\n    function hid(el, v) { if (el && el.hidden !== v) el.hidden = v; }\n    function anCha(el) { for (var n = el; n && n !== document.body; n = n.parentElement) { if (n.hidden || n.style.display === 'none') return true; } return false; }   /* thay offsetParent (ep dan trang) */\n    /* 11/10 dot 1 (QA, sua T6a): bo 2D (khung mac dinh Epsom Black) tai TRUOC khi trang ranh, khong chan lan tai dau \u2014 sau window load + requestIdleCallback (timeout 3000)\n       HOAC ngay khi khach cham / re / focus vao form lan dau (pointerdown / pointerover / focusin / touchstart), cai nao toi truoc. Truoc: 2D chi tai khi chon mau\n       -> lan bung preview dau cham hon MAIN (390: 2,1 -> 2,6 s; 1440 Rally bam mau dau INP 116 -> 272 ms). */\n    var _warm2D = false, _warm2DDa = false;\n    function warm2D() {\n      if (_warm2DDa) return;\n      _warm2DDa = true; _warm2D = true;\n      try { refresh(); } catch (e) { if (window.console) console.warn('warm2D loi:', e); }\n    }\n    (function () {\n      var chay = function () { if (document.readyState === 'complete') { if (window.requestIdleCallback) window.requestIdleCallback(warm2D, { timeout: 3000 }); else setTimeout(warm2D, 1500); } else window.addEventListener('load', function () { if (window.requestIdleCallback) window.requestIdleCallback(warm2D, { timeout: 3000 }); else setTimeout(warm2D, 1500); }, { once: true }); };\n      chay();\n      var form = document.querySelector('.cstrap__form') || document.querySelector('.cstrap');\n      if (form) ['pointerdown', 'pointerover', 'focusin', 'touchstart'].forEach(function (ev) { form.addEventListener(ev, warm2D, { once: true, passive: true, capture: true }); });\n    })();\n    function refresh() {\n      // The preview appears only when there is a real photograph of THIS strap in THIS colour.\n      // A colour whose strap has not been shot yet simply leaves the product gallery up \u2014 the shop's\n      // own photographs are a better answer than a stand-in, and nothing on screen has to apologise\n      // for itself. Add a `base` to that colour in the manifest and its preview turns on by itself.\n      var leatherId = KIND[val('Kind of Leather')] || null;\n      var colourName = val('Colour');\n      var leaDef = null;\n      if (leatherId) SB.MANIFEST.leathers.forEach(function (l) { if (l.id === leatherId) leaDef = l; });\n      var pickedColor = (leaDef && colourName) ? timMau(leaDef.colors, colourName) : null;\n      var wantId = pickedColor ? pickedColor.id : (colourName ? (COLOR[colourName] || handle(colourName)) : null);\n      // tuong loi o Charcoal Plum / Royal Blue / Dark Rose).\n      var picked = !!(pickedColor && (pickedColor.base || pickedColor.baseCurved || pickedColor.swatch));\n      /* 21/09: Kind mac dinh Epsom in san -> leatherId da co ma chua co mau: van la khung MOI (an) \u2014 lay mau MAC_DINH neu dong do co, khong thi mau dau */\n      /* chi MOI khi khach CHUA tuong tac; da bung roi ma doi dong chua chon mau -> giu khung cu (khong tu ve mau dau thay khach) */\n      var macDinh = !picked && !colourName && !window.CSTRAP_DEEPLINK && !_daTuongTac && !!KIND[MAC_DINH.kind];\n      // Read once, up here: the style rail below needs both answers before the state is built.\n      var curvedEl = document.querySelector('select[id$=\"-curved-end\"]');\n      /* 21/09: Curved End la tile radio (builder + bai san v2); thang gia doi name radio thanh _curved-end nen val() khong thay -> doc theo [data-curved-end] */\n      var curvedRadio = curvedEl ? null : document.querySelector('[data-curved-end] input[type=\"radio\"]:checked');\n      var curvedPicked = /^Yes/i.test((curvedEl ? curvedEl.value : (curvedRadio ? curvedRadio.value : val('Curved End'))) || '');\n      // \"Padded\" is the disqualifier, not \"Flat\" the qualifier. The strap form starts unanswered,\n      // and hiding the cut styles until it was answered read as the styles not existing \u2014 a\n      // customer scrolling the rail before filling the form saw four cards and stopped looking.\n      // Unanswered means possible; the cards withdraw only once Padded (or a curved end) rules\n      // them out, and a cut already chosen then resets to Classic like any filtered style.\n      // A lined rally underlay is HELD BY its stitching: choose the vintage no-stitch style and\n      // there is nothing keeping the lining in, so the lined hole layers go with the thread. The\n      // punched-through large holes stay \u2014 a die cut needs no thread. Read early: the underlay\n      // picker below needs the answer.\n      var noStitchPicked = (val('Style of Stitches') || '').indexOf('No Stitches') === 0;\n      var formEl2 = document.querySelector('select[id$=\"-strap-form\"]');\n      var formPadded = !!formEl2 && /^Padded/.test(formEl2.value);   /* 09/10: Padded Domed / Square / Full ve nhu Padded */\n      /* builder: khach CHON MAU (khong phai khung mac dinh) = tuong tac -> preview duoc bung. Bai san: xet theo sig o duoi. */\n      if (picked && !macDinh && document.querySelector('input[type=\"radio\"][name=\"properties[Colour]\"]')) _daTuongTac = true;\n      var showPv = _daTuongTac && !_pvHidden;\n      /* Da hien lan dau (hoac dang muon an) -> ap ngay (nut Hide / Show live preview). Lan hien DAU tien: doi khung cua lua chon ve xong\n         (cuoi refresh) \u2014 khong lo khung moi mac dinh. */\n      if (_daHienLanDau || !showPv) apHienThi(showPv, false);\n\n      // Hide the style cards this leather has no real assets for; kick the selection back to Classic.\n      // Before a leather is picked every style stays visible; the filter applies only after.\n      // The two lug-end cuts are conditional on top of that: a Middle or Wing Cut is a notch cut\n      // into a FLAT lug end, so the cards appear only where that notch has been cut for the canvas\n      // (MASKS[fam].mc/.wc) and the form is Flat, never with a curved end \u2014 a curved cut-away end is not a strap the workshop makes. Switching to Padded\n      // or Curved with a cut selected kicks the choice back to Classic below.\n      var fam = maskFam(leatherId, pickedColor);\n      // Ho co ban PADDED rieng (Alligator: 'al' -> 'alp'): form Padded doi ca ho mask.\n      // 2026-09-08: chi doi ho khi MAU NAY that su co anh nen Padded. Mau chua chup Padded\n      // (vd Nappa Black) roi ve anh Flat o duoi; neu van lay mask Padded (khung rong hon\n      // 11-29 px/1000) thi duong chi ve han ra ngoai than day.\n      if (formPadded && MASKS[fam + 'p'] &&\n          pickedColor && (pickedColor.basePadded || pickedColor.basePaddedCurved)) fam = fam + 'p';\n      var FAM = MASKS[fam] || MASKS[''];\n      var avail = leatherId ? (STYLE_AVAIL[leatherId] || ['Classic']).slice() : null;\n      if (avail && !formPadded && !curvedPicked) {\n        /* 08/10 22:56 (chu shop): Middle / Wing Cut la kieu XUONG lam duoc tren MOI da Flat, dau thang \u2014 KHONG phu thuoc anh preview\n           (truoc: chua chon mau -> chua co mat na -> tu ve Classic khi khach go W/D). Chi Padded / Curved moi loai (o tren).\n           Da chua co anh khoet (MASKS[fam].mc/.wc) thi preview chi khong ve lop khoet (xem layers 'cut'). */\n        avail.push('Middle Cut');\n        avail.push('Wing Cut');\n      }\n      document.querySelectorAll('input[name=\"properties[Style of Strap]\"]').forEach(function (r) {\n        var on = !avail || avail.indexOf(r.value) > -1;\n        var card = r.closest('label');\n        if (card) dsp(card, on ? '' : 'none');\n        if (!on && r.checked) {\n          r.checked = false;\n          var c = document.querySelector('input[name=\"properties[Style of Strap]\"][value=\"Classic\"]');\n          if (c) c.checked = true;\n          /* 21/09 (chu shop): khong tra ve Classic am tham \u2014 bao mot dong duoi truong Style, tu an sau 6 s hoac khi khach chon lai */\n          var viDang = /Cut$/.test(r.value) && (formPadded || curvedPicked);\n          baoStyle(r.value + ' not available ' + (viDang ? (formPadded ? 'for a Padded strap' : 'with a curved end') : 'in this leather') + ' \\u2014 switched to Classic.',\n            (viDang && !formPadded) ? (document.querySelector('[data-curved-end]') || curvedEl) : null);\n        }\n      });\n      // Whether the strap HAS a lining is a fact about the form, not about whether a preview can be\n      // drawn \u2014 so it is settled here, above the early return. Left below it, the \"match the\n      // underlay\" option stayed on screen for every strap without holes: `refresh` bails out before\n      // reaching the hiding code whenever the chosen colour has no photograph, which is most of the\n      // time. A customer on a Classic strap was offered a lining colour that does not exist.\n      var _styleNow = val('Style of Strap') || '';\n      var hasUnderlay = /Rally/i.test(_styleNow) && !/Large Holes/i.test(_styleNow) && !noStitchPicked;\n      var MATCH_UL = 'Match underlay colour';\n      function ulGate(idSuffix) {\n        var g = document.querySelector('select[id$=\"' + idSuffix + '\"]');\n        if (!g) return null;\n        for (var oi = 0; oi < g.options.length; oi++) {\n          if (/^Match underlay/.test(g.options[oi].value)) {   /* 03/10: keeper \"Match underlay\" + edge \"Match underlay colour\" */\n            hid(g.options[oi], !hasUnderlay);\n            if (g.options[oi].disabled !== !hasUnderlay) g.options[oi].disabled = !hasUnderlay;\n          }\n        }\n        if (!hasUnderlay && /^Match underlay/.test(g.value)) {\n          g.value = 'Match leather';\n          g.dispatchEvent(new Event('change', { bubbles: true }));\n        }\n        return g;\n      }\n      // 2026-09-08: KHONG tu bung bang chi nua. Truoc day he chon mot kieu chi la doan nay ep\n      // o \"Stitch Colour\" sang \"Custom colour\", bung 24 o mau ra roi tick san Cream \u2014 nen o hien\n      // \"Cream\" ma ben duoi lai la mot bang mau dang mo, hai thu noi khac nhau.\n      //\n      // Chu shop chot: de y het nhu \"Edge Colour\" \u2014 hien dap an mac dinh, khach muon doi thi tu\n      // bam vao \"Custom colour\". Mot luat cho ca form, khong rieng o nao.\n      //\n      // Bo di van an toan: duoi kia `var thread = 'Cream'` la gia tri khoi tao, chi bi ghi de khi\n      // khach thuc su chon mot mau chi hoac chon \"Match leather\". Bang dong, khong tick gi thi\n      // preview van ve chi kem dung nhu truoc.\n      var scSel = document.querySelector('select[id$=\"-stitch-colour\"]');\n      // The gate selects DROP their name attribute while \"Custom\" is chosen (the form does this so\n      // the order carries one line, not two) \u2014 so never read them. A checked palette radio can only\n      // exist while its palette is open (the form unchecks them on \"Recommended\"), so the radio\n      // alone is the whole answer.\n\n      var kGate = ulGate('-keeper-colour');\n      var eGate = ulGate('-edge-colour');\n\n      // RONG -> PM.th undefined -> day ca tram URL \"undefined-*.webp\" 404 (retry x3)\n      if (leatherId) {\n        var fam0 = fam;\n        if (!fam0 || !MASKS[fam0]) {\n          var c0 = SB.selectors.leather({ leatherId: leatherId }).colors[0];\n          fam0 = maskFam(leatherId, c0);\n          if (formPadded && MASKS[fam0 + 'p']) fam0 = fam0 + 'p';\n        }\n        /* #2 (2026-09-16): CHUA chon mau thi HOAN warm, khong chay ngay. Waterfall 3G do\n           duoc: doi dong da -> warm bat dau o 86 ms va giu duong suot 2,9 s; khach bam mau\n           o ~1,0 s thi anh NEN phai xep sau ~20 mask dang bay (anh da bay khong nhuong nua)\n           -> nen ve o 2,96 s, vong xoay 1,3-2,2 s. Hoan lai: neu 2,5 s sau khach van chua\n           chon mau (dang doc bang mau) thi moi warm \u2014 luc do duong trong, warm khong hai ai;\n           con neu khach chon mau trong khoang do thi warm se chay SAU khi khung ve xong\n           (nhanh duoi cung cua refresh). */\n        /* 20/09 LAM LAI: khach vua chon DONG (chua chon mau) -> xep lich am dong do ngay (dot 1 than moi mau, dot 2 mask) \u2014 renderer chi\n           chay khi khung dau da ve + trang ranh, nen khong chen vao luot ve nao. Da chon mau thi nhanh sau render lo. */\n        if (!picked && fam0 && MASKS[fam0]) lapLichAm(leatherId, formPadded, curvedPicked, fam0);\n      }\n      if (!picked && macDinh) {\n        /* khung MAC DINH: chi phan ve dung Epsom Black; luoi mau / rail kieu / bo loc chi o tren van theo form (chua chon gi) */\n        if (!leatherId) leatherId = KIND[MAC_DINH.kind];\n        leaDef = null; SB.MANIFEST.leathers.forEach(function (l) { if (l.id === leatherId) leaDef = l; });\n        pickedColor = leaDef ? (timMau(leaDef.colors, MAC_DINH.colour) || (leaDef.colors || []).filter(function (c) { return c.base; })[0] || null) : null;\n        colourName = pickedColor ? pickedColor.label : MAC_DINH.colour;\n        picked = !!(pickedColor && (pickedColor.base || pickedColor.baseCurved || pickedColor.swatch));\n        fam = maskFam(leatherId, pickedColor);\n        if (formPadded && MASKS[fam + 'p'] && pickedColor && (pickedColor.basePadded || pickedColor.basePaddedCurved)) fam = fam + 'p';\n        FAM = MASKS[fam] || MASKS[''];\n      }\n      if (!picked) return;\n\n      var state = SB.createInitialState();\n      state.leatherId = leatherId;\n      state.colorId = colorIdFor(state, colourName) || SB.selectors.leather(state).colors[0].id;\n      var strapStyle = val('Style of Strap') || '';\n      state.style = /Rally/i.test(strapStyle) ? 'racingS' : 'classic';\n      // The three big holes are PUNCHED THROUGH, not lined: the layer is a fixed white cut-out (like\n      // the lug-end cuts) and there is no colour to choose. The small-hole rallies keep the lined\n      // construction and the underlay palette that goes with it.\n      var punchedHoles = strapStyle === 'Rally (Large Holes)' && !!FAM.ho3;\n      // Underlay colour picker appears only for lined Rally; radio name = palette colour name.\n      var uf = document.querySelector('[id^=\"cunderlay-field-\"]');\n      // 23/09 (chu shop): dong da nhuom xuyen (Alligator Patina) khong co lop lot -> an han o nay.\n      // Doc co tu MASKS cua ho dang dung, khong so ten dong da o day: doi ten dong la hong ngay.\n      var famU = MASKS[fam] || {};\n      var underlayOn = state.style === 'racingS' && !punchedHoles && !noStitchPicked && !famU.noUnderlay;\n      dsp(uf, underlayOn ? '' : 'none');\n      var un = val('Underlay Colour');\n      /* UNDERS da don len module scope (2026-08-20) - xem chu thich canh EDGES */\n      if (underlayOn && UNDERS.indexOf(un) === -1) {\n        var muon = (window.CSTRAP_DEEPLINK && window.CSTRAP_DEEPLINK_HOLE) || 'White';\n        var uw = document.querySelector('input[name=\"properties[Underlay Colour]\"][value=\"' + muon + '\"]')\n              || document.querySelector('input[name=\"properties[Underlay Colour]\"][value=\"White\"]');\n        if (uw) { uw.checked = true; un = uw.value; }   // default pre-selected: White\n      }\n      state.underlayColor = UNDERS.indexOf(un) > -1 ? handle(un) : 'white';\n      if (!underlayOn) {\n        var uc = document.querySelector('input[name=\"properties[Underlay Colour]\"]:checked');\n        if (uc) uc.checked = false;   // keep the order clean when the palette does not apply\n      }\n      state.keeperMode = 'match';\n      state.edgeMode = 'match';\n      // The keeper is cut from the SAME hide as the strap, so its palette IS the leather's own\n      // colour range (auto-derived from the manifest: add a leather colour -> keeper gains it),\n      // minus the strap colour itself \u2014 that one is just tone-on-tone (the photo already shows it).\n      var leaColors = SB.selectors.leather(state).colors;\n      var strapLabel = '';\n      leaColors.forEach(function (c) { if (c.id === state.colorId) strapLabel = c.label; });\n      // The two keeper loops are separate pieces of leather, so each gets its own palette and can\n      // be a different colour from the other \u2014 that is the whole point of cutting them apart. One\n      // builder fills both grids: same colours, different radio name.\n      // A lined rally puts a second colour on the strap \u2014 the lining under the holes \u2014 and the\n      // keeper is the piece most often cut to match it rather than the strap. So while that lining\n      // exists the palette gains one entry at the front for it, named after the colour it will\n      // actually be. It disappears with the lining, and a keeper still holding it falls back to the\n      // leather, because \"match the underlay\" means nothing on a strap with no underlay.\n      // The VALUE is fixed and the colour lives only in the text. Built the other way \u2014 value\n      // \"Match underlay (Red)\" \u2014 changing the lining to Green renamed the option, so the checked\n      // radio matched nothing on rebuild and the keeper silently reverted to the leather while the\n      // customer was only adjusting the lining. The order says \"Match underlay colour\" and the\n      // lining's own line says which colour, so nothing is lost by not repeating it.\n      // The lining colour used to be an extra swatch at the head of each palette. It is a gate\n      // option now \u2014 one answer for both loops, where the customer is already choosing \u2014 so the\n      // palettes hold nothing but leather again.\n      var UL_VALUE = 'Match underlay colour';\n      var ulLabel = null;\n      var ulTone = null;\n      if (underlayOn) {\n        (SB.MANIFEST.underlayColors || []).forEach(function (u) {\n          if (u.id === state.underlayColor) ulTone = u.hex;\n        });\n      }\n      var kSig = state.leatherId + '|' + strapLabel + '|' + (ulLabel || '');\n      function buildKeeperGrid(sel, prop) {\n        var g = document.querySelector(sel);\n        if (!g || g.getAttribute('data-ksig') === kSig) return;\n        // len nhau. Bang vien khong dinh vi no do Liquid in san, khong dung lai bang script.\n        //\n        var dangHien = !anCha(g);\n        var was = (document.querySelector('input[name=\"properties[' + prop + ']\"]:checked') || {}).value;\n        if (dangHien) g.setAttribute('data-ksig', kSig);\n        g.innerHTML = '';\n        var rows = leaColors.slice();\n        if (ulLabel) rows.unshift({ id: '__underlay', label: ulLabel, tone: ulTone || '#cccccc' });\n        rows.forEach(function (c) {\n          if (c.label === strapLabel) return;\n          var wrap = document.createElement('label');\n          wrap.className = 'ccolor'; wrap.title = c.label;\n          var input = document.createElement('input');\n          input.type = 'radio'; input.name = 'properties[' + prop + ']';\n          input.value = (c.id === '__underlay') ? UL_VALUE : c.label;\n          if (input.value === was) input.checked = true;\n          var tile = document.createElement('span');\n          // Flat square chip, but the hex is SAMPLED from the real leather photo \u2014 same colour code.\n          tile.className = 'ccolor__tile'; tile.style.setProperty('--c', c.tone);\n          var text = document.createElement('span');\n          text.className = 'ccolor__n'; text.textContent = c.label;\n          wrap.appendChild(input); wrap.appendChild(tile); wrap.appendChild(text);\n          g.appendChild(wrap);\n        });\n      }\n      buildKeeperGrid('[id^=\"ckeeper-custom-\"] .ccolor-grid', 'Custom Keeper Colour');\n      buildKeeperGrid('[id^=\"ckeeper2-custom-\"] .ccolor-grid', 'Custom Keeper 2 Colour');\n      // <=6 swatches fit one row; only bigger palettes need the second row.\n      // + grid MAU DA (2026-08-06): thieu no thi da 1 mau (Alligator Red) nam trong hop\n      document.querySelectorAll('[id^=\"cstitch-custom-\"] .ccolor-grid, [id^=\"cedge-custom-\"] .ccolor-grid, [id^=\"ckeeper-custom-\"] .ccolor-grid, [id^=\"cunderlay-field-\"] .ccolor-grid, [id^=\"cstrap-color-\"] .ccolor-grid').forEach(function (g) {\n        var nOne = g.getElementsByTagName('label').length;   /* chi tinh lai khi so o doi (luoi vua dung lai) */\n        if (g._nOne !== nOne) { g._nOne = nOne; g.classList.toggle('is-onerow', nOne <= 6); }\n      });\n      // \"Match underlay\" is not a leather colour, so it is baked from the lining palette instead \u2014\n      // same keeper, same grain, the lining's colour. The marker id keeps the two sets apart.\n      function keeperSrc(pre, preUl, id) {\n        return (id === '__underlay') ? (preUl + state.underlayColor + '.webp') : (pre + id + '.webp');\n      }\n      // Each loop resolves on its own: leave one on \"match leather\" and it simply keeps the colour\n      // in the photograph while the other takes the contrast colour. Answering neither is the\n      // tone-on-tone strap, which is what the base photo already is.\n      function keeperIdFor(prop) {\n        var want = val(prop), hit = null;\n        if (underlayOn && want === UL_VALUE) return '__underlay';\n        leaColors.forEach(function (c) { if (c.label === want && c.label !== strapLabel) hit = c.id; });\n        return hit;\n      }\n      // `keeperCustom: false` in the manifest means the leather has no keeper layers cut, so its\n      // keeper stays whatever the photograph shows. Reading the flag rather than naming leathers\n      // means a new leather is opted in by its manifest row alone.\n      var keeperOk = SB.selectors.leather(state).keeperCustom !== false && !FAM.noKeeper;\n      /* 30/10 Ostrich Quill Padded: keeper nam san trong anh day, khong co lop k1/k2. Truong Keeper bi an (keeperOk false) nhung o chon van giu gia tri cu\n         (vd 'Two colours' co gia cong them) -> tra ve lua chon dau (Match leather / As Pictured) de don khong mang gia tri va phi an. */\n      if (FAM.noKeeper && kGate && kGate.selectedIndex > -1 && /^(One colour|Two colours|Match underlay)/i.test(kGate.value)) {\n        for (var gi = 0; gi < kGate.options.length; gi++) {\n          if (/^(As Pictured|Match leather)/i.test(kGate.options[gi].value)) { kGate.selectedIndex = gi; kGate.dispatchEvent(new Event('change', { bubbles: true })); break; }\n        }\n      }\n      // Edge and keeper both offer to take the LINING's colour, and both call it the same thing \u2014\n      // \"Match underlay colour\", the exact words of the field that sets it. They were briefly two\n      // different phrases for one idea (\"match hole\", \"match underlay\"), which asks the customer to\n      // work out whether the hole and the underlay are the same thing. They are.\n      //\n      // The option exists only while there IS a lining, so it is pulled from the list on any strap\n      // without one, and a field still holding it falls back to the leather.\n      var kMatchHole = keeperOk && underlayOn && !!kGate && /^Match underlay/.test(kGate.value);   /* 03/10: ten moi */\n      var haiMau = !!kGate && /(different colour on each|two colours)/i.test(kGate.value);\n      var k2box = document.querySelector('[id^=\"ckeeper2-custom-\"]');\n      if (k2box) {\n        dsp(k2box, haiMau ? '' : 'none');\n        // hidden de CSS :has() ben section bat duoc (bang keeper 1 mau no full 6 cot).\n        hid(k2box, !haiMau);\n        // O bi an van nam trong form va van gui gia tri cu len don - tat han di cho sach.\n        var k2r = k2box.querySelectorAll('input[type=\"radio\"]');\n        for (var q = 0; q < k2r.length; q++) {\n          if (k2r[q].disabled !== !haiMau) k2r[q].disabled = !haiMau;\n          if (!haiMau && k2r[q].checked) k2r[q].checked = false;\n        }\n      }\n      var k1lab = document.querySelector('[id^=\"ckeeper1-box-\"] .cfield__label');\n      if (k1lab && k1lab.firstChild) {\n        var moi = haiMau ? 'Up loop' : 'Keeper colour - both loops';\n        if ((k1lab.firstChild.nodeValue || '').trim() !== moi) k1lab.firstChild.nodeValue = moi;\n      }\n      var kId1 = kMatchHole ? '__underlay' : (keeperOk ? keeperIdFor('Custom Keeper Colour') : null);\n      var kId2 = kMatchHole ? '__underlay'\n               : (keeperOk ? (haiMau ? keeperIdFor('Custom Keeper 2 Colour') : kId1) : null);\n      if (kId1 || kId2) {\n        state.keeperMode = 'custom';\n        state.keeperColor = kId1 || kId2;   // keeps resolveLayers emitting a keeper slot to fill\n      }\n\n      // Stitch-style cards: only what each leather has masks for (all visible pre-pick).\n      var STITCH_AVAIL = { epsom: ['Classic Stitches', 'Box Stitches', 'Classic Double Stitches', 'Precise to the Lugs', 'No Stitches (Vintage Style)'],\n                           ostrich: ['Classic Stitches', 'Box Stitches', 'Classic Double Stitches', 'Precise to the Lugs', 'No Stitches (Vintage Style)'],\n                           lizard: ['Classic Stitches', 'Box Stitches', 'Classic Double Stitches', 'Precise to the Lugs', 'No Stitches (Vintage Style)'],\n                           togo: ['Classic Stitches', 'Box Stitches', 'Classic Double Stitches', 'Precise to the Lugs', 'No Stitches (Vintage Style)'],\n                           nappa: ['Classic Stitches', 'Box Stitches', 'Classic Double Stitches', 'Precise to the Lugs', 'No Stitches (Vintage Style)'],\n                           swift: ['Classic Stitches', 'Box Stitches', 'Classic Double Stitches', 'No Stitches (Vintage Style)'] /* 21/09: Padded khong co mask pl */,\n                           pueblo: ['Classic Stitches', 'Box Stitches', 'Classic Double Stitches', 'Precise to the Lugs', 'No Stitches (Vintage Style)'],\n                           /* 23/09 (chu shop): Alligator Patina KHONG ban kieu khong chi. Dang chon No Stitches\n                              ma doi sang dong nay thi doan loc ben duoi tu tra ve Classic Stitches. */\n                           'alligator-patina': ['Classic Stitches', 'Box Stitches', 'Classic Double Stitches', 'Precise to the Lugs'] };\n      var savail = (leatherId && !macDinh) ? (STITCH_AVAIL[leatherId] || null) : null;   /* khung mac dinh khong loc rail cua form */\n      // Only the CLASSIC strap is made without stitching. Every other style needs thread \u2014 a lined\n      // rally's underlay hangs on it, the punched and cut styles are finished with it \u2014 so the\n      // vintage card exists only while Style of Strap is Classic (or still unanswered).\n      if (savail && strapStyle && strapStyle !== 'Classic') {\n        savail = savail.filter(function (x) { return x.indexOf('No Stitches') !== 0; });\n      }\n      document.querySelectorAll('input[name=\"properties[Style of Stitches]\"]').forEach(function (r) {\n        var on = !savail || savail.indexOf(r.value) > -1;\n        var card = r.closest('label');\n        if (card) dsp(card, on ? '' : 'none');\n        // A choice its style just outlawed falls back to Classic Stitches, the same way a filtered\n        // strap style falls back to Classic \u2014 never an unanswered required field under the customer.\n        if (!on && r.checked) {\n          r.checked = false;\n          var cs = document.querySelector('input[name=\"properties[Style of Stitches]\"][value=\"Classic Stitches\"]');\n          if (cs) cs.checked = true;\n        }\n      });\n      /* 23/09 (chu shop): hai o khoa Deployant chi hien voi dong da CO lop khoa do (hien tai chi\n         Alligator Patina). Dong khac ma chon phai thi preview ve khung trong \u2014 an han con hon de\n         khach bam roi khong thay gi. Dang chon ma doi sang dong khac -> ve Classic \u2014 Silver.\n         Chi chay khi luoi CO o khoa khac: bai chi ban khoa gap (template strap-deployant) thi an\n         het la khach khong con gi de chon. */\n      var coKhoaKhac = !!document.querySelector('input[name=\"properties[Buckle Finish]\"][value^=\"Classic\"]');\n      if (coKhoaKhac) {\n        var depOk = !!(MASKS[fam] || {}).bkDeployant;\n        document.querySelectorAll('input[name=\"properties[Buckle Finish]\"]').forEach(function (r) {\n          if (!/Deployant|Folding Clasp|Omega/i.test(r.value)) return;\n          var card = r.closest('label');\n          if (card) dsp(card, depOk ? '' : 'none');\n          if (!depOk && r.checked) {\n            r.checked = false;\n            var cs = document.querySelector('input[name=\"properties[Buckle Finish]\"][value=\"Classic \\u2014 Silver\"]');\n            if (cs) { cs.checked = true; cs.dispatchEvent(new Event('change', { bubbles: true })); }\n          }\n        });\n      }\n\n      // Keeper field hides for any leather whose keeper is not separately cut (same manifest flag).\n      var kf = document.querySelector('[id^=\"ckeeper-field-\"]');\n      dsp(kf, keeperOk ? '' : 'none');\n\n      var sstyle = val('Style of Stitches') || '';\n      var noStitch = sstyle.indexOf('No Stitches') === 0;\n      var tname = val('Thread Colour');\n      var customPicked = THREADS.indexOf(tname) > -1;\n      // Three answers, not two. Cream is the shop's house thread and the default; \"match leather\"\n      // is the tone-on-tone strap; custom is the palette. Match reads the hexes off the palette\n      // swatches themselves rather than carrying a second copy of the thread colours here \u2014 one\n      // list, in the Liquid, and this stays right when a colour is added to it.\n      var thread = 'Cream';\n      if (customPicked) thread = tname;\n      else if (scSel && /^Match underlay/i.test(scSel.value)) thread = scSel.dataset.chiThat || 'Cream';   /* 08/10 12:35: chi theo lot \u2014 mau do cstrap-rally.js tinh (ten trung / gan nhat) */\n      else if (scSel && /^Match/i.test(scSel.value)) thread = nearestThread(colorDefFor(state)) || 'Cream';\n      // Ho mask khong khai `th` la dong da bake san chi vao anh nen (Togo):\n      // ve them lop chi se doi mot file khong ton tai.\n      var hideStitch = noStitch || !FAM.th;\n\n      var ecn = val('Custom Edge Colour');\n      var edgeCustom = EDGES.indexOf(ecn) > -1;   // every leather now has its own edge mask cut\n      var edgeMatchUl = underlayOn && !!eGate && eGate.value === MATCH_UL;\n      var edgeOn = edgeCustom || edgeMatchUl;\n\n      var bk = buckleFile(val('Buckle Finish'), fam);\n      state.buckleId = 'silver';\n\n      // A curved end is a different cut, not a filter over the straight one, so it needs its own\n      // photograph. A leather that has one carries `baseCurved`; the rest keep showing the straight\n      // strap, which is still the right picture of the leather, colour and stitching they chose.\n      // Found by id, never by name: on a product where the end shape is priced, the section strips\n      // the select's name so the variant speaks for it in the order \u2014 a name lookup finds nothing\n      // there and the preview silently stopped curving the moment the option gained a price.\n      // curvedPicked was read at the top of refresh, where the style rail needed it first.\n      var colorDef = null;\n      SB.selectors.leather(state).colors.forEach(function (c) { if (c.id === state.colorId) colorDef = c; });\n      // fam/FAM were resolved from the same colour up top; reuse rather than recompute.\n      // Whichever end shape was answered, show the photograph that exists: most colours have both,\n      // some only the straight cut, one so far only the curved. Falling back the other way too means\n      // a colour is never gated out of the preview by the end shape \u2014 the leather, colour, stitching\n      // and edge on screen are all still exactly what was asked for.\n      // Form Padded co anh base RIENG (Alligator 2026-08-06): uu tien cap padded khi co.\n      var wantBase = null;\n      if (colorDef) {\n        if (formPadded && (colorDef.basePadded || colorDef.basePaddedCurved)) {\n          wantBase = curvedPicked ? (colorDef.basePaddedCurved || colorDef.basePadded)\n                                  : (colorDef.basePadded || colorDef.basePaddedCurved);\n        } else {\n          wantBase = curvedPicked ? (colorDef.baseCurved || colorDef.base)\n                                  : (colorDef.base || colorDef.baseCurved);\n        }\n      }\n      // Chua co anh day -> anh mieng da dong vai base, va lat nua bo HET lop phu:\n      // chi/vien/khoa dat len mot o vuong texture la sai vi tri het.\n      var swatchOnly = false;\n      if (!wantBase && colorDef && colorDef.swatch) { wantBase = colorDef.swatch; swatchOnly = true; }\n      var curvedBase = wantBase;\n\n      state = SB.normalizeState(state);\n      var layers = SB.resolveLayers(state).filter(function (l) {\n        // Custom keeper renders as ONE baked image (grey texture x sampled leather colour) so the\n        // result matches the real hide exactly; the blend-based keeperColor layer is dropped.\n        if (l.layer === 'keeperColor' && state.keeperMode === 'custom') return false;\n        if (l.layer === 'buckle' && !bk) return false;\n        if (l.layer === 'stitch' && hideStitch) return false;\n        if (l.layer === 'holes' && noStitchPicked && !punchedHoles) return false;\n        return true;\n      }).map(function (l) {\n        if (l.layer === 'base' && curvedBase) return { layer: 'base', kind: 'img', src: curvedBase, mo: moSwatch(colorDef) };\n        if (l.layer === 'buckle' && bk) return { layer: 'buckle', kind: 'img', src: bk };\n        // A keeper is cut from the hide the customer named, so it is baked per COLOUR per canvas:\n        // one image carrying that leather's own grain, tint and sheen. `k1`/`k2` are the two loops\n        // cut apart so they can be mixed; `kp` is the older both-loops-in-one bake, and a canvas\n        // with neither falls back to the original sb-kb- set.\n        if (l.layer === 'keeperTex' && state.keeperMode === 'custom') {\n          if (FAM.k1) return kId1 ? { layer: 'keeperTex', kind: 'img', src: keeperSrc(FAM.k1, FAM.k1ul, kId1) } : null;\n          return { layer: 'keeperTex', kind: 'img',\n                   src: FAM.kp ? FAM.kp + state.keeperColor + '.webp' : 'sb-kb-' + state.keeperColor + '.webp' };\n        }\n        // Each rally pattern is a different punch, so each has its own underlay cut. The style card\n        // names the pattern and RALLY_SUFFIX turns that name into the file: sb-lzholes- (micro),\n        // -l (hybrid), -3 (large holes). The strap style IS the hole size; there is no second field.\n        if (l.layer === 'holes') {\n          if (punchedHoles) return { layer: 'holes', kind: 'img', src: FAM.ho3 };\n          var hroot = FAM.holes;\n          var suf = RALLY_SUFFIX[strapStyle] || '';\n          // 23/09 (chu shop): dong da nhuom xuyen khong co lop lot - long lo giu dung mau TRANG\n          // cua file goc, khong to theo gi ca. Ve thang bang img thay vi cssmask.\n          if (FAM.noUnderlay) return { layer: 'holes', kind: 'img', src: hroot + suf + '-white.webp' };\n          var uHx = EG_HEX[state.underlayColor];\n          if (CSSEG && SB.RENDERER_CSSMASK && CSSEG_FAM[fam] && uHx) {\n            return { layer: 'holes', kind: 'cssmask', src: hroot + suf + '-white.webp', color: uHx };\n          }\n          return { layer: 'holes', kind: 'img', src: hroot + suf + '-' + state.underlayColor + '.webp' };\n        }\n        if (l.layer === 'stitch') {\n          var M = FAM;\n          var pre = M.th;\n          if (sstyle.indexOf('Box') === 0) pre = M.bx || M.th;\n          else if (sstyle.indexOf('Classic Double') === 0) pre = M.db || M.th;\n          else if (sstyle.indexOf('Precise') === 0) pre = M.pl || M.th;\n          // mau = hex. Khong co hex (mau la?) hoac dong da chua kiem chung -> img cu.\n          var hx = TH_HEX[handle(thread)];\n          if (CSSCHI && SB.RENDERER_CSSMASK && CSSCHI_FAM[fam] && hx) {\n            return { layer: 'stitch', kind: 'cssmask', src: pre + 'white.webp', color: hx };\n          }\n          return { layer: 'stitch', kind: 'img', src: pre + handle(thread) + '.webp' };\n        }\n        return l;\n      }).filter(Boolean);\n      // Loop 2 rides its own layer so the two never share a node and can differ freely.\n      if (FAM.k2 && kId2) layers.push({ layer: 'keeper2', kind: 'img', src: keeperSrc(FAM.k2, FAM.k2ul, kId2) });\n      // Lo duoi doi theo KHOA (rieng ho co tailRound - hien tai 'ap'): tron mac dinh,\n      // Pre-V lo oval, Butterfly khong lo. Chi ap len base THANG - ban cong da co lo\n      // chup san trong anh.\n      if (FAM.tailRound && (!curvedPicked || FAM.tailOnCurved)) {\n        // lo tron classic LUON hien; chi chon Pre-V moi thay bang lo oval.\n        var bkv2 = val('Buckle Finish') || '';\n        var tailSrc = /Pre-?V/i.test(bkv2) ? FAM.tailOval : FAM.tailRound;\n        layers.push({ layer: 'tailholes', kind: 'img', src: tailSrc });\n      }\n      // resolveLayers builds the base from the colour's own `base` and drops any layer with no file,\n      // so a colour photographed in ONE end shape only (curved so far) arrived here with no base at\n      // all \u2014 stitching and buckle floating on nothing. The shape fallback above already knows which\n      // photograph to use; put it back before the edge splices in at index 1.\n      var hasBase = false;\n      layers.forEach(function (l) { if (l.layer === 'base') hasBase = true; });\n      if (!hasBase && wantBase) layers.unshift({ layer: 'base', kind: 'img', src: wantBase, mo: moSwatch(colorDef) });\n      if (edgeOn) {\n        var egName = edgeMatchUl ? state.underlayColor : handle(ecn);\n        var egHx = EG_HEX[egName];\n        // Rally lo to co the can vien cat khac (lo giua an mau) \u2014 dung eg3 khi ho co.\n        // 23/09: ho nao co file vien rieng cho tung kieu rally (egm/egl/eg3) thi dung dung file do -\n        // no chua CA duong bao than day LAN mep lo, mot mau Edge Colour cho ca hai. Ho khong khai\n        // (moi dong da cu) roi xuong dung luat cu y nguyen: eg3 cho Rally lo to, con lai eg.\n        var EG_KIEU = { 'Micro Rally': 'egm', 'Hybrid Rally': 'egl', 'Rally (Large Holes)': 'eg3' };\n        var egK = EG_KIEU[strapStyle];\n        var egPre = (egK && FAM[egK]) ? FAM[egK] : ((punchedHoles && FAM.eg3) ? FAM.eg3 : FAM.eg);\n        // PHASE 03: doi mau vien = doi 1 dong CSS, 0 request (nhu mau chi).\n        if (CSSEG && SB.RENDERER_CSSMASK && CSSEG_FAM[fam] && egHx) {\n          layers.splice(1, 0, { layer: 'edge', kind: 'cssmask', src: egPre + 'white.webp', color: egHx });\n        } else {\n          layers.splice(1, 0, { layer: 'edge', kind: 'img', src: egPre + egName + '.webp' });\n        }\n        /*\n          Rally lo to: file eg3 chua CA duong bao LAN vong cung quanh mieng lo - do that\n          tren 'Edge 3 Holes.webp': net nam o ban kinh 31..37 quanh tam lo, dung vanh ngoai.\n          Nhung `layerOrder` xep \"edge\" TRUOC \"holes\", nen dia lo (ho3, ban kinh 37) phu kin\n          vong cung do. Ket qua: khach doi mau vien, mieng lo van trang.\n          Ve lai chinh file do mot lan nua duoi ten lop \"edgeholes\" - lop nay dung SAU \"holes\"\n          nen vong cung noi len tren mieng lo. Duong bao bi ve hai lan, cung file cung mau,\n          nen khong doi gi. Dong da nao khong co eg3 thi khong phat lop nay.\n        */\n        // egUnder: mep lo cua ho nay phai nam DUOI long lo (xem chu thich o MASKS ap) - ve lai\n        // len tren la phu kin long lo, ra cai lo dac mau vien. Ho cu khong co co nay, chay nhu cu.\n        if (punchedHoles && FAM.eg3 && !FAM.egUnder) {\n          if (CSSEG && SB.RENDERER_CSSMASK && CSSEG_FAM[fam] && egHx) {\n            layers.push({ layer: 'edgeholes', kind: 'cssmask', src: FAM.eg3 + 'white.webp', color: egHx });\n          } else {\n            layers.push({ layer: 'edgeholes', kind: 'img', src: FAM.eg3 + egName + '.webp' });\n          }\n        }\n      }\n      // The lug-end cuts render as WHITE overlays: the stage and the base photograph share a white\n      // ground, so painting the notch white reads as leather cut away. Last in the stack \u2014 the notch\n      // must also erase any stitching drawn through it, and it sits nowhere near the buckle.\n      if (!curvedPicked) {\n        if (strapStyle === 'Middle Cut' && FAM.mc) layers.push({ layer: 'cut', kind: 'img', src: FAM.mc });\n        else if (strapStyle === 'Wing Cut' && FAM.wc) layers.push({ layer: 'cut', kind: 'img', src: FAM.wc });\n      } else if (FAM.curvedCut) {\n        // Dau lug cong: ho nao co anh cong chup rieng thi da doi base o tren. Bo nao khong co\n        // (Ostrich Flat) thi cat bang lop phu trang \u2014 cung khe 'cut' nen no xoa luon chi/vien\n        // chay qua goc, dung voi cho da da bi cat bo.\n        layers.push({ layer: 'cut', kind: 'img', src: FAM.curvedCut });\n      }\n      if (swatchOnly) layers = layers.filter(function (l) { return l.layer === 'base'; });\n      // Skip identical re-renders (the safety interval would otherwise abort in-flight image loads).\n      // sig phai mang ca MAU (2026-08-18): lop cssmask co src bat bien (mask -white dung\n      var sig = layers.map(function (l) { return l.layer + ':' + l.src + (l.color ? '#' + l.color : ''); }).join(',');\n      // P1: anh chup trang thai cho moiKe() (preload to hop ke khi khach re/cham).\n      _ke = { lid: state.leatherId, fam: fam, FAM: FAM, formPadded: formPadded, curved: curvedPicked,\n              colorDef: colorDef, leaColors: leaColors, UL_VALUE: UL_VALUE, underlayOn: underlayOn,\n              underlay: state.underlayColor, thread: handle(thread), edgeOn: edgeOn, punched: punchedHoles };\n      /* khung MOI (lan ve dau, dang an): ghi sig; ve sau bat ky luot ve nao khac sig moi = khach da doi hinh (bai san: doi tuy chon) */\n      /* 21/09 (Style of Strap len dau builder): khung MAC DINH doi sig vi khach chon kieu/dang TRUOC khi chon da+mau -> chi ve lai khung moi\n         (an) de moi them mask, KHONG bung \u2014 bung van cho tuong tac that (chon mau) hoac bai san doi hinh. */\n      if (_daMoi && sig !== _sigMoi && !macDinh) _daTuongTac = true;\n      var hienLanDau = _daTuongTac && !_pvHidden && !_daHienLanDau;\n      var srcBaseMuon = null; layers.forEach(function (l) { if (l.layer === 'base') srcBaseMuon = l.src; });\n      var khungDung = function () {   /* khung trong stage da la khung khach chon? (base data-src khop \u2014 so theo TEN FILE, URL phu ?r= van tinh) \u2014 khong bung khung moi mac dinh */\n        var bb = stage.querySelector('[data-layer=base]'); if (!bb || !srcBaseMuon) return false;\n        return tepCua(bb.getAttribute('data-src')) === tepCua(SB.assetUrl(srcBaseMuon));\n      };\n      var hienKhiDung = function () { requestAnimationFrame(function () { if (!_daHienLanDau && khungDung()) apHienThi(true, true); }); };\n      if (sig === _lastSig) {   /* cung sig: dang ve / da ve \u2014 tru khi renderer da bo cuoc (anh cache hong) thi ve lai (tu phuc hoi) */\n        if (_lastRenderAt && Date.now() - _lastRenderAt > 3400 && !khungKhop(layers)) phucHoi(layers, sig, _renderTok);\n        if (hienLanDau) hienKhiDung(); return;\n      }   /* refresh lap lai trong luc khung dang ve: chi hien khi khung da dung */\n      /* 11/10 dot 1 T6(a) (chu shop): khung MAC DINH (khach chua chon mau, khong deep-link) KHONG ve san vao stage an nua \u2014 anh 2D chi tai khi khach\n         chon mau (hoac bam Show live preview). Truoc day ve san Epsom Black luc vao trang (+ preload o strap-live-preview.liquid): ton ~1 anh nen + mask\n         lam nghen mang di dong. Khong dat _lastSig/_daMoi o day de lan ve DAU TIEN la khung khach chon. */\n      if (macDinh && !_warm2D) return;\n      _lastSig = sig;\n      /* #2 (2026-09-16): warm cua dong da cho khung VE XONG roi moi chay. Doi dong da keo\n         34 file (~0,43 MB): 10 o swatch + ~20 mask + anh nen. Tha het cung luc thi tren 3G\n         anh nen \u2014 thu duy nhat khach dang cho \u2014 ve o ~2,9 s. Cho xong roi warm: anh nen di\n         mot minh. Neu render khong tra Promise (ban engine cu) thi lui ve cach cu. */\n      _healN = 0; _lastRenderAt = Date.now(); var _tok = ++_renderTok;\n      var _ve = renderer.render(mapBust(layers));\n      lenPhucHoi(layers, sig, _tok);\n      if (!_daMoi) { _daMoi = true; _sigMoi = sig; }\n      if (hienLanDau) { if (_ve && _ve.then) _ve.then(hienKhiDung, hienKhiDung); else hienKhiDung(); }\n      // #1 (2026-09-16): khach thu mau thi di DOC luoi, nen mau ke chinh la mau sap bam.\n      // Am san nen cua 2-3 o ke sau khi luot ve nay xong -> lan bam ke tiep khong ton\n      // request nao. Hang thap, va renderer.prefetch tu nhuong khi co render that dang cho.\n      // Warm every selectable layer for this leather once, so later picks swap instantly.\n      // Keyed by leather AND family: one leather can straddle two canvases while it is being\n      // re-photographed, and warming only the first family a customer touched left the second\n      // one's masks cold.\n      /* #2b: CHUA chon mau thi KHONG warm. Truoc day doi dong da la warm chay ngay (refresh\n         cua lan doi KIND, luc chua co mau nao duoc chon) \u2014 20 mask ~0,25 MB bay truoc, roi\n         khach bam mau thi anh NEN phai xep hang sau chung: tren 3G nen ve o ~2,9 s. Anh da\n         BAY thi khong nhuong duoc nua, nen phai chan tu goc: co mau roi, ve xong roi, moi warm. */\n      if (wantBase && !swatchOnly && !macDinh) {   /* khung mac dinh builder chi MOI bo lop cua no, khong am dong nao (khach chua chon) */\n        var _lid = state.leatherId, _fam = fam, _pad = formPadded, _cur = curvedPicked;\n        var _lap = function () { lapLichAm(_lid, _pad, _cur, _fam); };\n        if (_ve && _ve.then) _ve.then(function () { setTimeout(_lap, 250); }, _lap);\n        else _lap();\n      }\n    }\n    /* 20/09 toi: nho O khach vua bam (label) de danh dau \"dang tai\" len chinh no khi renderer bao (thay vong xoay giua khung) */\n    var _oVuaBam = null;\n    /* 11/10 LAG B1/F1: click + input + change cua MOT cu bam truoc day moi cai hen 1 refresh (3 lan/bam, ~75-95 ms moi lan o 4x). Gop: mot refresh,\n       40 ms sau su kien CUOI (khong chay khi dang chong su kien). */\n    var _rfT = null;\n    function lichRefresh() { clearTimeout(_rfT); _rfT = setTimeout(function () { _rfT = null; refresh(); }, 40); }\n    ['change', 'input', 'click'].forEach(function (ev) {\n      document.addEventListener(ev, function (e) { var t = e.target; var lb = t && t.closest ? t.closest('label') : null; if (lb) _oVuaBam = lb; huyAmLuoi(); lichRefresh(); }, true);\n    });\n    var _oDangTai = null;\n    stage.addEventListener('cspv:dangtai', function (e) {\n      try {\n        var on = !!(e.detail && e.detail.on);\n        if (_oDangTai) { _oDangTai.classList.remove('cspv-dang-tai'); _oDangTai = null; }\n        if (on && _oVuaBam) { _oVuaBam.classList.add('cspv-dang-tai'); _oDangTai = _oVuaBam; }\n      } catch (x) { if (window.console) console.warn('cspv:dangtai loi:', x); }\n    });\n    /* 11/10 LAG B1/F2: BO setInterval(refresh, 2500) (544 ms CPU / 10 s ngoi yen + keo MutationObserver o engine). Engine luon bao doi bang su kien 'change'\n       (da bat o tren, capture) nen chi can vai lan an toan sau khi vao trang (engine dung luoi tre) + khi trang khoi phuc tu bfcache. */\n    [1500, 4000, 9000, 16000].forEach(function (ms) { setTimeout(refresh, ms); });\n    window.addEventListener('pageshow', function (e) { if (e.persisted) refresh(); });\n    // 20/09 LAM LAI: warm bam luong khach (dot 1-4) \u2014 xem lapLichAm(). B6 \"am ca kho\" (20/09 sang) bi chu shop bac, da go.\n    // P1 (2026-09-15): BO warm toan kho luc vao trang (96 swatch +4 s, 96 base +12 s = 6,7 MB\n    // desktop). Vao trang khong am gi; chon da -> warmDong (mask chung ~0,2 MB); re/cham -> moiKe.\n    var _ke = null;\n    /* #1: am nen cua cac o mau KE o dang chon. Chi 2-3 file, hang thap, hoan 350 ms de\n       khong chen vao chinh luot render vua goi. Ton trong Save-Data cua khach: bat thi thoi.\n       Huy neu khach doi lua chon khac (refresh goi lai -> clearTimeout). */\n    /* #5 (2026-09-16) + 19/09 (chu shop chot sau buoc A): trang RANH thi am san NEN \u2014 truoc het cac mau DANG HIEN cua dong\n       da dang xem (lan UU TIEN, dau hang), roi NHO GIOT TIEP MOI DONG DA KHAC (than theo dang dang chon + mask dung chung, LAN NEN:\n       <= 1 anh bay, nghi 1,5 s sau moi cu bam, hoan 9 s / cu bam dau \u2014 renderer),\n       requestIdleCallback, KHONG HUY \u2014 chi dung khi roi trang. Dich: sau 30 s tren trang >= 90 % cu bam roi vao ca \"da am\"\n       (< 80 ms), khong con 293 ms dung im. Giu: (1) khong co requestIdleCallback -> bo; (3) saveData / 2g-3g -> KHONG am;\n       hang doi nam trong renderer (3 anh / 150 ms, nhuong render that). Hoan 2 s sau khi ve xong moi bat dau. */\n    /* 19/09: hoist ra ngoai refresh() de amLuoiKhiRanh (am cac dong khac) goi duoc \u2014 truoc nam trong refresh nen ReferenceError bi try/catch nuot. */\n    /* B6 (20/09): guard theo LAN \u2014 bo da xep o lan NEN (am ca kho) ma nay dong duoc chon (lan uu tien) thi xep lai o 'dau':\n       renderer.prefetch se keo tung URL tu hang nen len dau hang uu tien. Da o uu tien roi thi thoi. */\n    function canAm(key, lan) {\n      var cu = _prefetched[key];\n      if (cu === 'ut' || (cu && lan === 'nen')) return false;\n      _prefetched[key] = lan === 'nen' ? 'nen' : 'ut';\n      return true;\n    }\n    function warmDong(lid, famX, lan, phan) {   /* lan: 'nen' = lan nen; mac dinh lan uu tien. phan: 'mask' | 'khoa' | undefined = ca hai */\n    try {\n    if (!lid || !famX || !MASKS[famX]) return;\n    if (!mangChoAm()) return;   /* chot #2 */\n    var PM = MASKS[famX] || MASKS[''];\n    /* 19/09 (chu shop, muc 3): MASK trang (~6 KB, dung chung moi mau cua dong) am SOM cho ca dong cung nhom; KHOA (anh ~12 KB x 10)\n       va THAN dong khac de lan nen sau 9 s. Guard rieng tung phan de am mask som roi sau van bo sung khoa. */\n    if (phan !== 'khoa' && canAm(lid + '|' + famX + '|mask', lan)) {\n      var pf = [];\n      // P1 (2026-09-15): chi am mask DUNG CHUNG cua dong da (~20 file, ~0,2 MB): chi/vien/lo\n      // trang (cssmask), ho3, mc/wc, lo duoi, khoa. Base/keeper/swatch tung mau KHONG am nua\n      // (Epsom 24 mau x 4 file = 4 MB) - base cua mau khach re/cham duoc nap o moiKe().\n      if (CSSCHI && SB.RENDERER_CSSMASK && CSSCHI_FAM[famX]) {\n        ['th', 'bx', 'db', 'pl'].forEach(function (k2) { if (PM[k2]) pf.push(PM[k2] + 'white.webp'); });\n      } else if (PM.th) pf.push(PM.th + 'cream.webp');   /* 20/09: ho chua di cssmask (alp) \u2014 chi mac dinh Cream de khung dau khong lanh (Alligator Padded 706 ms) */\n      if (CSSEG && SB.RENDERER_CSSMASK && CSSEG_FAM[famX]) {\n        if (PM.eg) pf.push(PM.eg + 'white.webp');\n        if (PM.eg3) pf.push(PM.eg3 + 'white.webp');\n        if (PM.egm) pf.push(PM.egm + 'white.webp');\n        if (PM.egl) pf.push(PM.egl + 'white.webp');\n        (STYLE_AVAIL[lid] || []).forEach(function (st) {\n          var suf = RALLY_SUFFIX[st];\n          if (suf === undefined || st === 'Rally (Large Holes)') return;\n          pf.push(PM.holes + suf + '-white.webp');\n        });\n      }\n      if (PM.ho3) pf.push(PM.ho3);\n      if (PM.mc) pf.push(PM.mc, PM.wc);\n      if (PM.tailRound) pf.push(PM.tailRound, PM.tailOval);\n      if (PM.curvedCut) pf.push(PM.curvedCut);\n      renderer.prefetch(pf, lan === 'nen' ? 'nen' : (lan === 'dau' ? 'dau' : undefined));   /* mac dinh = CUOI lan uu tien (dot 2 sau dot 1) */\n    }\n    if (phan !== 'mask' && canAm(lid + '|' + famX + '|khoa', lan)) {\n      var pk = [];\n      if (PM.bk) (PM.noPreV ? ['silver', 'gold', 'rosegold', 'black', 'bf-silver', 'bf-gold', 'bf-black']\n                            : ['silver', 'gold', 'rosegold', 'black', 'bf-silver', 'bf-gold', 'bf-black', 'pn-silver', 'pn-gold', 'pn-black'])\n        .forEach(function (n) { pk.push(PM.bk + n + '.webp'); });\n      else pk.push('sb-buckle-silver.webp', 'sb-buckle-gold.webp', 'sb-buckle-rose-gold.webp', 'sb-buckle-black.webp', 'sb-buckle-bf-silver.webp', 'sb-buckle-bf-gold.webp', 'sb-buckle-bf-black.webp');\n      renderer.prefetch(pk, lan === 'nen' ? 'nen' : (lan === 'dau' ? 'dau' : undefined));\n    }\n    } catch (e) { if (window.console) console.warn('warmDong loi (bo qua):', e); }\n    }\n    var _amDaLen = {};\n    /* 21/09 (chu shop): warm CHI bat dau SAU tuong tac dau tien cua khach voi form \u2014 cham/bam/phim/focus bat ky o nao, re chuot vao khu form,\n       hoac CUON toi khu form (co scroll + form vao khung nhin). Khach chi luot qua roi di khong ton 1 MB. Lich am lap truoc do (Kind mac dinh\n       Epsom luc vao trang) duoc GIU LAI va chay ngay khi co tuong tac; doi dong truoc khi cham -> chi giu lich moi nhat. Khung moi (3 file) van tai. */\n    var _tuongTacForm = false, _lichCho = null, _daCuon = false;\n    function tuongTacDau(e) {\n      if (_tuongTacForm) return;\n      /* chi su kien THAT cua khach (isTrusted) \u2014 engine ban 'change' tong hop luc init (Kind mac dinh, Stitch Colour) khong tinh */\n      if (e && e.isTrusted === false) return;\n      _tuongTacForm = true;\n      if (_lichCho) { var l = _lichCho; _lichCho = null; lapLichAm(l[0], l[1], l[2], l[3]); }\n    }\n    (function () {\n      var root = document.querySelector('.cstrap-section') || document.body;\n      ['pointerdown', 'touchstart', 'keydown', 'focusin', 'change', 'pointerover'].forEach(function (ev) {\n        root.addEventListener(ev, tuongTacDau, { capture: true, passive: true });\n      });\n      var form = root.querySelector('form') || root;\n      var thay = false;\n      if (window.IntersectionObserver) {\n        var io = new IntersectionObserver(function (es) { es.forEach(function (e) { if (e.isIntersecting) { thay = true; if (_daCuon) tuongTacDau(); } }); }, { threshold: 0.15 });\n        io.observe(form);\n      }\n      /* scroll TRANG (khong capture: scroll cua rail/ luoi ben trong khong tinh \u2014 luc init cac rail tu chinh scrollLeft) */\n      window.addEventListener('scroll', function (e) { if (e && e.target !== document && e.target !== document.documentElement && e.target !== window) return; _daCuon = true; if (thay) tuongTacDau(); }, { passive: true });\n    })();\n    function huyAmLuoi() { /* renderer.huyWarm() chay trong render(): cat anh warm dang bay, xep lai dau hang (chot #3) */ }\n    /* 20/09 LAM LAI (chu shop bac B6 warm ca kho) \u2014 lich am BAM LUONG KHACH, moi (dong | dang) lap MOT lan, renderer chi chay\n       sau khi KHUNG DAU ve xong + trang ranh (ric) + khong render dang cho + 1,5 s sau cu bam cuoi; 2g/3g/saveData -> khong xep gi.\n         dot 1: THAN moi mau cua dong dang xem (dang dang dung)      -> lan uu tien, dau hang\n         dot 2: MASK (chi, vien, lo, lo duoi, cat) cua dong dang xem  -> lan uu tien, cuoi hang\n         dot 3: THAN dong da CUNG NHOM (dang nam trong select Kind of Leather, vd Regular: Vegtan/Togo/Nappa), cung dang -> lan nen\n                (chi chay khi lan uu tien da can). Chot 20/09: KHONG warm than dong ngoai nhom \u2014 doi sang do 188-395 ms, khong dang 3-4 MB.\n         dot 4: KHOA dong dang xem; MASK dong cung nhom                -> lan nen\n       KHONG am Padded / cong (ke ca dong dang xem) va khoa dong khac \u2014 hoan toi khi khach chon dang/dong do (lapLichAm lai voi khoa moi):\n       do 20/09 lan 1: them \"cac dang khac cua dong dang xem\" -> 11 MB/60 s o DPR3, chu shop da bac muc do nay. */\n    function lapLichAm(lid, padded, curved, fam) {\n      try {\n        if (!lid || !mangChoAm()) return;   /* 20/09 toi: khong con doi ric \u2014 renderer tu hoan sau load khi trinh duyet khong co (Safari) */\n        if (!_tuongTacForm) { _lichCho = [lid, padded, curved, fam]; return; }   /* 21/09: chua cham form -> giu lich, chay khi cham */\n        var khoa = lid + '|' + (padded ? 'p' : 'f') + (curved ? 'c' : 't');\n        if (_amDaLen[khoa]) return;\n        _amDaLen[khoa] = true;\n        var lea = SB.selectors.leather({ leatherId: lid }); var mau = (lea && lea.colors) || [];\n        var coPadded = mau.some(function (c) { return c.basePadded || c.basePaddedCurved; });\n        var fam0 = maskFam(lid, mau[0]);\n        if (!fam || !MASKS[fam]) { fam = fam0; if (padded && MASKS[fam + 'p'] && coPadded) fam = fam + 'p'; }\n        /* trang co gi cho khach doi? BAI SAN (custom-strap-form-v2, show_leather=false) khong co luoi mau, khong co select dong ->\n           khong am mau khac / dong khac (vo nghia, 7 MB); chi am mask + khoa + cac dang (Flat/Padded/cong) cua DUNG mau nay. */\n        var coLuoiMau = !!document.querySelector('input[type=\"radio\"][name=\"properties[Colour]\"]');   /* radio \u2014 bai san chi co input an */\n        var selKind = document.querySelector('select[id$=\"kind-of-leather\"]'), coChonDong = !!selKind;\n        /* dot 1 */\n        var d1 = []; if (coLuoiMau) mau.forEach(function (c) { var b = baseCua(c, padded, curved); if (b) d1.push(b); });\n        if (d1.length) renderer.prefetch(d1, 'dau');\n        /* dot 2 */\n        if (fam && MASKS[fam]) warmDong(lid, fam, undefined, 'mask');\n        if (!coLuoiMau) {\n          var cdHien = (_ke && _ke.colorDef) || null, dCac = [];\n          if (cdHien) [cdHien.base, cdHien.basePadded, cdHien.baseCurved, cdHien.basePaddedCurved].forEach(function (x) { if (x) dCac.push(x); });\n          if (dCac.length) renderer.prefetch(dCac, 'nen');\n          if (fam0 && MASKS[fam0 + 'p'] && coPadded && fam !== fam0 + 'p') warmDong(lid, fam0 + 'p', 'nen', 'mask');\n          if (fam0 && MASKS[fam0] && fam !== fam0) warmDong(lid, fam0, 'nen', 'mask');\n        }\n        /* dot 3 */\n        var cungNhom = {};\n        if (selKind) [].slice.call(selKind.options).forEach(function (o) { if (o.value) cungNhom[o.value] = true; });\n        var khac = coChonDong ? ((SB.MANIFEST && SB.MANIFEST.leathers) || []).filter(function (l) { return l && l.id !== lid && cungNhom[l.label]; }) : [];\n        var d3 = []; khac.forEach(function (l) { (l.colors || []).forEach(function (c) { var b = baseCua(c, padded, curved); if (b) d3.push(b); }); });\n        if (d3.length) renderer.prefetch(d3, 'nen');\n        /* dot 4 */\n        if (fam && MASKS[fam]) warmDong(lid, fam, 'nen', 'khoa');\n        khac.forEach(function (l) {\n          var fk = maskFam(l.id, (l.colors || [])[0]);\n          if (padded && MASKS[fk + 'p'] && (l.colors || []).some(function (c) { return c.basePadded || c.basePaddedCurved; })) fk = fk + 'p';\n          if (fk && MASKS[fk]) warmDong(l.id, fk, 'nen', 'mask');\n        });\n      } catch (e) { if (window.console) console.warn('lapLichAm loi:', e); }\n    }\n    /* B6-C (20/09): anh MO tuc thi cho than lanh = swatch cua o mau khach vua bam (dang hien tren luoi -> da trong cache, 0 request);\n       renderer lam mo dam, thay bang than width=150 khi ve, roi khung that. Khong co o -> swNho(swatch) -> khong co thi thoi.\n       Khong nam trong sig (chi la goi y hien tam). */\n    function moSwatch(colorDef) {\n      try {\n        var ck = document.querySelector('input[name=\"properties[Colour]\"]:checked');\n        var lb = ck ? ((ck.closest ? ck.closest('label') : null) || ck.parentElement) : null;\n        var im = lb ? lb.querySelector('img') : null;\n        /* chi khi chip DA tai (khach vua bam vao no thi da tai); chua tai -> null: renderer giu khung cu nguyen ven toi khi than 150 ve\n           (do 20/09: chip lazy ngoai man hinh chua tai -> doi nac 1 lau hon nac 2). */\n        if (im && im.complete && im.naturalWidth > 0 && (im.currentSrc || im.src)) return im.currentSrc || im.src;\n        return null;\n      } catch (e) { if (window.console) console.warn('moSwatch loi:', e); return null; }\n    }\n    function baseCua(c, padded, curved) {\n      if (!c) return null;\n      if (padded && (c.basePadded || c.basePaddedCurved)) return curved ? (c.basePaddedCurved || c.basePadded) : (c.basePadded || c.basePaddedCurved);\n      return curved ? (c.baseCurved || c.base) : (c.base || c.baseCurved);\n    }\n    // Preload TO HOP KE: khach re chuot >=120 ms / cham / focus vao mot lua chon -> nap truoc\n    // 1-3 file ma lua chon do se can voi trang thai hien tai. Dung renderer.prefetch (hang thap,\n    // da cache thi bo qua) nen re qua nhieu o cung khong tai trung.\n    function moiKe(el) {\n      try {\n        if (!mangChoAm()) return;   /* chot #2 */\n        var K = _ke; if (!K || !K.lid || !el || !el.closest) return;\n        var FAM = K.FAM, pf = [];\n        var lab = el.closest('label'), inp = lab ? lab.querySelector('input[type=\"radio\"]') : null;\n        var sel = el.tagName === 'SELECT' ? el : el.closest('select');\n        if (inp) {\n          var name = inp.name || '', v = inp.value || '';\n          if (/\\[Colour\\]/.test(name)) {\n            var cd = timMau(SB.selectors.leather({ leatherId: K.lid }).colors, v);\n            var b = baseCua(cd, K.formPadded, K.curved); if (b) pf.push(b);\n          } else if (/Custom Keeper( 2)? Colour/.test(name)) {\n            var hai = / 2 /.test(name), pre = hai ? (FAM.k2 || FAM.k1) : FAM.k1, preUl = hai ? (FAM.k2ul || FAM.k1ul) : FAM.k1ul;\n            if (v === K.UL_VALUE) { if (K.underlayOn && preUl) pf.push(preUl + K.underlay + '.webp'); }\n            else { var kid = null; (K.leaColors || []).forEach(function (c) { if (c.label === v) kid = c.id; });\n              if (kid) pf.push(pre ? pre + kid + '.webp' : (FAM.kp ? FAM.kp + kid + '.webp' : 'sb-kb-' + kid + '.webp')); }\n          } else if (/Style of Stitches/.test(name)) {\n            var pre2 = FAM.th;\n            if (v.indexOf('Box') === 0) pre2 = FAM.bx || FAM.th; else if (v.indexOf('Classic Double') === 0) pre2 = FAM.db || FAM.th; else if (v.indexOf('Precise') === 0) pre2 = FAM.pl || FAM.th;\n            if (pre2 && v.indexOf('No Stitches') !== 0) pf.push(pre2 + ((CSSCHI && SB.RENDERER_CSSMASK && CSSCHI_FAM[K.fam]) ? 'white' : K.thread) + '.webp');\n          } else if (/Style of Strap/.test(name)) {\n            var cssEg = CSSEG && SB.RENDERER_CSSMASK && CSSEG_FAM[K.fam];\n            if (v === 'Rally (Large Holes)') { if (FAM.ho3) pf.push(FAM.ho3); if (K.edgeOn && FAM.eg3) pf.push(FAM.eg3 + (cssEg ? 'white' : 'black') + '.webp'); }\n            else if (K.edgeOn && v === 'Micro Rally' && FAM.egm) pf.push(FAM.egm + 'white.webp');\n            else if (K.edgeOn && v === 'Hybrid Rally' && FAM.egl) pf.push(FAM.egl + 'white.webp');\n            else if (v === 'Middle Cut') { if (FAM.mc) pf.push(FAM.mc); }\n            else if (v === 'Wing Cut') { if (FAM.wc) pf.push(FAM.wc); }\n            else if (RALLY_SUFFIX[v] !== undefined && FAM.holes) pf.push(FAM.holes + RALLY_SUFFIX[v] + '-' + (cssEg ? 'white' : K.underlay) + '.webp');\n          } else if (/Buckle Finish/.test(name)) {\n            var bkf = buckleFile(v, K.fam); if (bkf) pf.push(bkf);\n            if (FAM.tailRound) pf.push(/Pre-?V/i.test(v) ? FAM.tailOval : FAM.tailRound);\n          }\n        } else if (sel && /-curved-end$|-strap-form$/.test(sel.id || '') && K.colorDef) {\n          // O dau day / dang day: chua biet khach chon gi -> nap base thay the (toi da 2 file).\n          var alt1 = baseCua(K.colorDef, K.formPadded, !K.curved), alt2 = baseCua(K.colorDef, !K.formPadded, K.curved);\n          if (alt1) pf.push(alt1); if (alt2) pf.push(alt2);\n        }\n        if (pf.length) renderer.prefetch(pf, true);   /* 19/09: khach re/cham = dau hang */\n      } catch (e) { if (window.console) console.warn('moiKe loi:', e); }\n    }\n    var _reT = null, _reEl = null;\n    document.addEventListener('mouseover', function (e) {\n      var t = e.target; if (!t || !t.closest) return;\n      var hit = t.closest('label, select'); if (!hit || hit === _reEl) return;\n      _reEl = hit; clearTimeout(_reT); _reT = setTimeout(function () { moiKe(hit); }, 120);\n    }, true);\n    document.addEventListener('mouseout', function (e) { if (e.target === _reEl) { clearTimeout(_reT); _reEl = null; } }, true);\n    document.addEventListener('touchstart', function (e) { var t = e.target; if (t && t.closest) moiKe(t.closest('label, select')); }, { capture: true, passive: true });\n    document.addEventListener('focusin', function (e) { var t = e.target; if (t && t.closest) moiKe(t.closest('label, select')); }, true);\n    document.addEventListener('change', function (e) {\n      var t = e.target;\n      if (!t || t.tagName !== 'SELECT' || !/kind-of-leather|skin-of-leather/.test(t.id || '')) return;\n      var thu = 0;\n      var cho = setInterval(function () {\n        var g = document.querySelector('[id^=\"cstrap-color-\"]');\n        if (g) {\n          if (window.CSTRAP_DEEPLINK) { clearInterval(cho); return; }\n          var ck = g.querySelector('input:checked');\n          if (ck) { ck.checked = false; ck.dispatchEvent(new Event('change', { bubbles: true })); }\n          clearInterval(cho);\n          return;\n        }\n        if (++thu > 20) clearInterval(cho);\n      }, 150);\n    }, true);\n\n    refresh();\n  });\n\n"],
  "mappings": "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",
  "names": []
}
