{"title":"MEN'S SHORTS","description":"\u003cp\u003eMen's training shorts in durable stretch fabric that moves with you.\u003c\/p\u003e","products":[{"product_id":"genesis-5-mesh-short","title":"GENESIS 5\" MESH SHORT","description":"\u003cp\u003eBuilt for the ones who show up. Breathable single-layer mesh that dries fast and holds its shape session after session.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e 100% Polyester | 250gsm | Single layer mesh\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Standard | True to size\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eModel:\u003c\/strong\u003e 6'0\" | 200 lbs | Wearing size Large\u003c\/p\u003e","brand":"Visionary Fitness Store","offers":[{"title":"S \/ Lakers","offer_id":47694312112366,"sku":null,"price":35.0,"currency_code":"USD","in_stock":true},{"title":"M \/ Lakers","offer_id":47694312308974,"sku":null,"price":35.0,"currency_code":"USD","in_stock":true},{"title":"L \/ Lakers","offer_id":47694312505582,"sku":null,"price":35.0,"currency_code":"USD","in_stock":true},{"title":"XL \/ Lakers","offer_id":47694312702190,"sku":null,"price":35.0,"currency_code":"USD","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0796\/2578\/1486\/files\/5_e4cf80f3-32cc-42db-ae8d-62efb7cc44ba.jpg?v=1771886949"},{"product_id":"legacy-5-liner-short","title":"Legacy 5' Liner Short","description":"\u003cp\u003eBuilt for every type of training. Lightweight, fast drying, and made to keep up session after session.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e 100% Polyester | Lightweight\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Standard | True to size\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eModel:\u003c\/strong\u003e 6'0\" | 200 lbs | Wearing size Large\u003c\/p\u003e","brand":"Visionary Fitness Store","offers":[{"title":"XS \/ White Camo","offer_id":47694328824046,"sku":null,"price":25.0,"currency_code":"USD","in_stock":true},{"title":"S \/ White Camo","offer_id":47694328955118,"sku":null,"price":25.0,"currency_code":"USD","in_stock":true},{"title":"M \/ White Camo","offer_id":47694329086190,"sku":null,"price":25.0,"currency_code":"USD","in_stock":true},{"title":"L \/ White Camo","offer_id":47694329217262,"sku":null,"price":25.0,"currency_code":"USD","in_stock":true},{"title":"XL \/ White Camo","offer_id":47694329348334,"sku":null,"price":25.0,"currency_code":"USD","in_stock":true},{"title":"XXL \/ White Camo","offer_id":47694329479406,"sku":null,"price":25.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0796\/2578\/1486\/files\/5_f33f1218-dea8-405e-89b5-851fd2c372b1.jpg?v=1771887479"},{"product_id":"blackout-5-polyester-short","title":"BLACKOUT 5\" POLYESTER SHORT","description":"\u003cp\u003eBuilt for every type of training. Lightweight, fast drying, and made to keep up session after session.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e 100% Polyester | Lightweight\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Standard | True to size\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eModel:\u003c\/strong\u003e 6'0\" | 200 lbs | Wearing size Large\u003c\/p\u003e","brand":"Visionary Fitness Store","offers":[{"title":"XS \/ Black","offer_id":47694333051118,"sku":null,"price":28.0,"currency_code":"USD","in_stock":true},{"title":"S \/ Black","offer_id":47694333116654,"sku":null,"price":28.0,"currency_code":"USD","in_stock":true},{"title":"M \/ Black","offer_id":47694333182190,"sku":null,"price":28.0,"currency_code":"USD","in_stock":true},{"title":"L \/ Black","offer_id":47694333247726,"sku":null,"price":28.0,"currency_code":"USD","in_stock":true},{"title":"XL \/ Black","offer_id":47694333313262,"sku":null,"price":28.0,"currency_code":"USD","in_stock":true},{"title":"XXL \/ Black","offer_id":47694333378798,"sku":null,"price":28.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0796\/2578\/1486\/files\/WHITEBACKDROPWOMENSLEGGINGS.png?v=1771887503"},{"product_id":"serenity-5-mesh-short","title":"Serenity 5\" Mesh Short","description":"\u003cp\u003eBuilt for the ones who show up. Breathable single-layer mesh that dries fast and holds its shape session after session.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e 100% Polyester | 250gsm | Single layer mesh\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Standard | True to size\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eModel:\u003c\/strong\u003e 6'0\" | 200 lbs | Wearing size Large\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eMade to Order\u003c\/strong\u003e — this piece is produced just for you. Please see our \u003ca href=\"https:\/\/visionaryfitness.shop\/policies\/shipping-policy\" target=\"_blank\" rel=\"noopener\"\u003eShipping Policy\u003c\/a\u003e for current production \u0026amp; delivery timelines.\u003c\/p\u003e","brand":"Visionary Fitness Store","offers":[{"title":"S \/ Purple","offer_id":47694334034158,"sku":null,"price":35.0,"currency_code":"USD","in_stock":false},{"title":"M \/ Purple","offer_id":47694334099694,"sku":null,"price":35.0,"currency_code":"USD","in_stock":false},{"title":"L \/ Purple","offer_id":47694334165230,"sku":null,"price":35.0,"currency_code":"USD","in_stock":false},{"title":"XL \/ Purple","offer_id":47694334230766,"sku":null,"price":35.0,"currency_code":"USD","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0796\/2578\/1486\/files\/13_bec869ca-0f19-46ff-9ca2-1cc12ec98d39.jpg?v=1771887491"},{"product_id":"4-polyester-short","title":"4\" POLYESTER SHORT","description":"\u003cp\u003eBuilt for every type of training. Lightweight, fast drying, and made to keep up session after session.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e 100% Polyester | Lightweight\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Standard | True to size\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eModel:\u003c\/strong\u003e 6'0\" | 200 lbs | Wearing size Large\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eMade to Order\u003c\/strong\u003e — this piece is produced just for you. Please see our \u003ca href=\"https:\/\/visionaryfitness.shop\/policies\/shipping-policy\" target=\"_blank\" rel=\"noopener\"\u003eShipping Policy\u003c\/a\u003e for current production \u0026amp; delivery timelines.\u003c\/p\u003e","brand":"Visionary Fitness Store","offers":[{"title":"XS \/ Black","offer_id":47694334296302,"sku":null,"price":28.0,"currency_code":"USD","in_stock":true},{"title":"S \/ Black","offer_id":47694334361838,"sku":null,"price":28.0,"currency_code":"USD","in_stock":true},{"title":"M \/ Black","offer_id":47694334427374,"sku":null,"price":28.0,"currency_code":"USD","in_stock":true},{"title":"L \/ Black","offer_id":47694334492910,"sku":null,"price":28.0,"currency_code":"USD","in_stock":true},{"title":"XL \/ Black","offer_id":47694334558446,"sku":null,"price":28.0,"currency_code":"USD","in_stock":true},{"title":"XXL \/ Black","offer_id":47694334623982,"sku":null,"price":28.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0796\/2578\/1486\/files\/15_d4541e44-4c64-4152-b8c8-0fad31c937d3.jpg?v=1771887493"},{"product_id":"black-5-eclipse-short","title":"Eclipse Mesh Short 5''","description":"\u003cp\u003eBuilt for the ones who show up. Breathable single-layer mesh that dries fast and holds its shape session after session.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e 100% Polyester | 250gsm | Single layer mesh\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Standard | True to size\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eModel:\u003c\/strong\u003e 6'0\" | 200 lbs | Wearing size Large\u003c\/p\u003e","brand":"Visionary Fitness Store","offers":[{"title":"S","offer_id":47694334951662,"sku":null,"price":35.0,"currency_code":"USD","in_stock":true},{"title":"M","offer_id":47694335017198,"sku":null,"price":35.0,"currency_code":"USD","in_stock":true},{"title":"L","offer_id":47694335082734,"sku":null,"price":35.0,"currency_code":"USD","in_stock":true},{"title":"XL","offer_id":47694335148270,"sku":null,"price":35.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0796\/2578\/1486\/files\/hf_20261111_151851_f065c5ce-1681-4f6c-866a-43ed934118af.png?v=1794410977"},{"product_id":"sacrifice-5-mesh-short","title":"SACRIFICE 5\" MESH SHORT","description":"\u003cp\u003eBuilt for the ones who show up. Breathable single-layer mesh that dries fast and holds its shape session after session.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e 100% Polyester | 250gsm | Single layer mesh\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Standard | True to size\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eModel:\u003c\/strong\u003e 6'0\" | 200 lbs | Wearing size Large\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eMade to Order\u003c\/strong\u003e — this piece is produced just for you. Please see our \u003ca href=\"https:\/\/visionaryfitness.shop\/policies\/shipping-policy\" target=\"_blank\" rel=\"noopener\"\u003eShipping Policy\u003c\/a\u003e for current production \u0026amp; delivery timelines.\u003c\/p\u003e","brand":"Visionary Fitness Store","offers":[{"title":"S \/ White","offer_id":47694335836398,"sku":null,"price":35.0,"currency_code":"USD","in_stock":false},{"title":"S \/ Black","offer_id":47694335869166,"sku":null,"price":35.0,"currency_code":"USD","in_stock":false},{"title":"M \/ White","offer_id":47694335901934,"sku":null,"price":35.0,"currency_code":"USD","in_stock":false},{"title":"M \/ Black","offer_id":47694335934702,"sku":null,"price":35.0,"currency_code":"USD","in_stock":false},{"title":"L \/ White","offer_id":47694335967470,"sku":null,"price":35.0,"currency_code":"USD","in_stock":false},{"title":"L \/ Black","offer_id":47694336000238,"sku":null,"price":35.0,"currency_code":"USD","in_stock":false},{"title":"XL \/ White","offer_id":47694336033006,"sku":null,"price":35.0,"currency_code":"USD","in_stock":false},{"title":"XL \/ Black","offer_id":47694336065774,"sku":null,"price":35.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0796\/2578\/1486\/files\/hf_20261111_160049_6ec62e4d-e3c8-4bf4-8212-f268ac609e5f.png?v=1794412958"},{"product_id":"signature-5-mesh-short-1","title":"SIGNATURE 5\" MESH SHORT","description":"\u003cp\u003eBuilt for the ones who show up. Breathable single-layer mesh that dries fast and holds its shape session after session.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e 100% Polyester | 250gsm | Single layer mesh\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Standard | True to size\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eModel:\u003c\/strong\u003e 6'0\" | 200 lbs | Wearing size Large\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eMade to Order\u003c\/strong\u003e — this piece is produced just for you. Please see our \u003ca href=\"https:\/\/visionaryfitness.shop\/policies\/shipping-policy\" target=\"_blank\" rel=\"noopener\"\u003eShipping Policy\u003c\/a\u003e for current production \u0026amp; delivery timelines.\u003c\/p\u003e","brand":"Visionary Fitness Store","offers":[{"title":"S \/ Black","offer_id":47694336491758,"sku":null,"price":35.0,"currency_code":"USD","in_stock":true},{"title":"M \/ Black","offer_id":47694336590062,"sku":null,"price":35.0,"currency_code":"USD","in_stock":true},{"title":"L \/ Black","offer_id":47694336688366,"sku":null,"price":35.0,"currency_code":"USD","in_stock":false},{"title":"XL \/ Black","offer_id":47694336786670,"sku":null,"price":35.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0796\/2578\/1486\/files\/5.png?v=1785375408"},{"product_id":"monogram-5-mesh-short","title":"MONOGRAM 5\" MESH SHORT","description":"\u003cp\u003eBuilt for the ones who show up. Breathable single-layer mesh that dries fast and holds its shape session after session.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e 100% Polyester | 250gsm | Single layer mesh\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Standard | True to size\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eModel:\u003c\/strong\u003e 6'0\" | 200 lbs | Wearing size Large\u003c\/p\u003e","brand":"Visionary Fitness Store","offers":[{"title":"S \/ Forest","offer_id":47694338162926,"sku":null,"price":35.0,"currency_code":"USD","in_stock":true},{"title":"M \/ Forest","offer_id":47694338359534,"sku":null,"price":35.0,"currency_code":"USD","in_stock":true},{"title":"L \/ Forest","offer_id":47694338556142,"sku":null,"price":35.0,"currency_code":"USD","in_stock":true},{"title":"XL \/ Forest","offer_id":47694338752750,"sku":null,"price":35.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0796\/2578\/1486\/files\/30.png?v=1773273334"},{"product_id":"vital-5-mesh-short","title":"VITAL 5\" MESH SHORT","description":"\u003cp\u003e\u003cstrong\u003eAbout This Piece\u003c\/strong\u003e\u003c\/p\u003e\n\n\u003cp\u003eBuilt for the ones who show up. Our mesh shorts are constructed from 100% single layer polyester mesh that breathes through every rep, dries fast, and holds its shape session after session. Comfortable enough for everyday wear, clean enough for anywhere.\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e 100% Polyester | 250gsm | Single layer mesh\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Standard | True to size\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eModel:\u003c\/strong\u003e 6'0\" | 200 lbs | Wearing size Large\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eCare:\u003c\/strong\u003e Cold wash only. Hang dry. No high heat. Do not bleach.\u003c\/p\u003e\n\u003c!-- VF-SIZE-GUIDE START --\u003e\n\u003chr\u003e\n\u003ch3\u003eSize guide\u003c\/h3\u003e\n\u003cdiv class=\"vf-size\" data-chart=\"mesh-shorts\" data-name='VITAL 5\" MESH SHORT'\u003e\u003c\/div\u003e\n\u003cscript\u003e\n(function(){\n  if (window.__vfSizeGuide) { window.__vfSizeGuide.scan(); return; }\n\n  \/* ---- shared charts (edit measurements here, in ONE place) ----\n     girth = the column used to recommend a size.\n     flat  = measurement taken laid flat \/ half body, so we double it\n             when matching to a customer's real body measurement.        *\/\n  var CHARTS = {\n    'stringers': {name:'Stringer', fit:'true to size', metric:'chest',\n      cols:['Chest','Length'],\n      rows:[['S',90,68],['M',94,70],['L',98,72],['XL',102,74],['XXL',106,76]]},\n    'defy-blackout-tank': {name:'Defy \/ Blackout Tank', fit:'fitted', metric:'chest',\n      cols:['Chest','Length'],\n      rows:[['XS',76,63],['S',78,65],['M',80,67],['L',85,69],['XL',90,71],['XXL',92,73]]},\n    'core-vantage-tank': {name:'Core \/ Vantage Tank', fit:'fitted', metric:'chest', flat:true,\n      cols:['Chest','Length'],\n      rows:[['XS',47,66],['S',49,68],['M',51,70],['L',53,72],['XL',55,74],['XXL',57,76]]},\n    'oversized-tees': {name:'Oversized Tee', fit:'oversized', metric:'chest',\n      cols:['Chest','Length','Sleeve'],\n      rows:[['XS',108,69,22],['S',112,71,23],['M',116,73,24],['L',120,75,25],['XL',124,77,26],['XXL',126,79,27]]},\n    'muscle-compression-tees': {name:'Muscle \/ Compression Tee', fit:'fitted', metric:'chest',\n      cols:['Chest','Length','Sleeve'],\n      rows:[['XS',80,63,27],['S',84,65,28],['M',88,67,29],['L',92,69,30],['XL',96,71,31],['XXL',100,73,32]]},\n    'longsleeve-compression-tee': {name:'Longsleeve Compression Tee', fit:'fitted', metric:'chest',\n      cols:['Chest','Length','Sleeve'],\n      rows:[['XS',105,70,63],['S',107,72,64],['M',112,74,65],['L',117,76,66],['XL',122,78,67],['XXL',127,80,68]]},\n\n    'legacy-liner-shorts': {name:'Legacy Liner Shorts', fit:'regular', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',70,45,100],['M',74,46,104],['L',78,47,108],['XL',82,48,112],['XXL',86,49,116]]},\n    'vital-running-shorts': {name:'Vital Running Shorts', fit:'regular', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',72,45,101],['M',74,46,104],['L',76,47,108],['XL',78,48,112],['XXL',80,49,116]]},\n    'mesh-shorts': {name:'Mesh Shorts', fit:'athletic \/ true to size', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',71.1,39.4,105.9],['M',74.9,40.6,110],['L',78,41.4,113.8],['XL',81,42.4,117.9],['XXL',85.1,43.4,121.9]]},\n    'stride-vantage-shorts': {name:'Stride \/ Vantage Shorts', fit:'lined', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['XS',71,33,49],['S',74,34.5,51],['M',76,36,53],['L',78,38,55],['XL',83,40,57],['XXL',86,42,59]]},\n    'defy-cotton-shorts': {name:'Defy Cotton Shorts', fit:'regular', metric:'waist',\n      note:'Length \u0026 hip on this chart look swapped from Molly — confirm before going live.',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',72,108,42],['M',76,112,43],['L',80,116,44],['XL',84,122,45.5],['XXL',88,128,47]]},\n    'sweatpants': {name:'Sweatpants', fit:'relaxed', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',66,99,58],['M',69,101,60],['L',72,103,62],['XL',75,105,64],['XXL',78,107,66]]},\n\n    'revival-bra': {name:'Revival Bra', fit:'compression', metric:'bust',\n      cols:['Bust','Length','Hem'],\n      rows:[['S',68,33,56],['M',72,34,60],['L',76,35,64]]},\n    'revival-booty-shorts': {name:'Revival Booty Shorts', fit:'high-waist', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',58,34,72],['M',62,36,76],['L',68,38,80]]},\n    'serenity-leggings': {name:'Serenity Leggings', fit:'high-stretch', metric:'waist', flat:true,\n      note:'High-stretch. Waist \u0026 hip are relaxed (laid-flat) numbers — the fabric expands well past these.',\n      cols:['Waist','Length','Hip'],\n      rows:[['XS',25.5,78,31],['S',28,79,33.5],['M',30.5,80,36],['L',33,81,38.5],['XL',35.5,82,41]]}\n  };\n\n  var CSS = ''\n  + '@import url(\\'https:\/\/fonts.googleapis.com\/css2?family=Archivo:wght@400;500;600;800\u0026display=swap\\');'\n  + '.vf-size{--paper:#0b0b0b;--card:#171717;--ink:#ffffff;--muted:#a1a099;--line:#2a2a28;'\n  + '--line-strong:#3d3d3a;--accent:#5c78ff;--accent-soft:#1b2350;'\n  + \"--font:'Archivo',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;\"\n  + 'font-family:var(--font);color:var(--ink);background:var(--paper);line-height:1.4;'\n  + '-webkit-font-smoothing:antialiased;box-sizing:border-box;max-width:620px;margin:22px auto;'\n  + 'padding:clamp(16px,4vw,28px);border:1px solid var(--line-strong);border-radius:3px;}'\n  + '.vf-size *,.vf-size *::before,.vf-size *::after{box-sizing:border-box;}'\n  + '.vf-size button{font-family:inherit;cursor:pointer;}'\n  + '.vf-hd{display:flex;justify-content:space-between;align-items:flex-start;gap:14px;flex-wrap:wrap;'\n  + 'border-bottom:2px solid var(--ink);padding-bottom:12px;}'\n  + '.vf-ey{font-weight:800;letter-spacing:.14em;font-size:11px;text-transform:uppercase;color:var(--muted);}'\n  + '.vf-ey b{color:var(--accent);}'\n  + '.vf-nm{font-weight:800;font-size:clamp(22px,5vw,30px);line-height:1;letter-spacing:-.01em;margin:3px 0 0;}'\n  + '.vf-fit{font-size:12px;color:var(--muted);border:1px solid var(--line-strong);padding:3px 9px;'\n  + 'border-radius:2px;white-space:nowrap;margin-top:2px;}'\n  + '.vf-units{display:inline-flex;align-items:center;gap:16px;flex-shrink:0;}'\n  + '.vf-u{font-size:12px;font-weight:700;letter-spacing:.1em;color:var(--muted);cursor:pointer;'\n  + 'padding-bottom:3px;border-bottom:2px solid transparent;user-select:none;line-height:1;}'\n  + '.vf-u[aria-pressed=\"true\"]{color:var(--ink);border-bottom-color:var(--accent);}'\n  + '.vf-find{background:var(--card);border:1.5px solid var(--ink);border-radius:3px;padding:16px;margin-top:18px;}'\n  + '.vf-fh{display:flex;justify-content:space-between;align-items:baseline;gap:8px;flex-wrap:wrap;}'\n  + '.vf-ft{font-weight:800;font-size:14px;}'\n  + '.vf-ask{font-size:13px;color:var(--muted);} .vf-ask b{color:var(--ink);font-weight:600;}'\n  + '.vf-ro{display:flex;align-items:flex-end;gap:14px;margin:14px 0 2px;flex-wrap:wrap;}'\n  + '.vf-num{display:flex;align-items:baseline;border:1.5px solid var(--line-strong);border-radius:2px;'\n  + 'background:var(--paper);padding:6px 9px;}'\n  + '.vf-num input{all:unset;width:82px;font-family:inherit;font-weight:800;font-size:23px;color:var(--ink);'\n  + 'font-variant-numeric:tabular-nums;}'\n  + '.vf-num span{font-size:12px;font-weight:600;color:var(--muted);margin-left:2px;}'\n  + '.vf-res{flex:1;min-width:140px;font-size:13px;color:var(--muted);}'\n  + '.vf-big{display:inline-block;background:var(--accent);color:#fff;font-weight:800;font-size:14px;'\n  + 'padding:4px 12px;border-radius:2px;letter-spacing:.03em;}'\n  + '.vf-rn{margin-top:6px;font-size:12px;color:var(--muted);}'\n  + '.vf-ruler{margin-top:12px;}'\n  + '.vf-ticks{position:relative;height:15px;margin:0 8px 2px;}'\n  + '.vf-ticks i{position:absolute;top:0;width:1px;background:var(--line-strong);}'\n  + '.vf-ticks i.maj{height:15px;background:var(--muted);} .vf-ticks i.min{height:7px;}'\n  + '.vf-rg{-webkit-appearance:none;appearance:none;width:100%;height:4px;background:var(--ink);outline:none;margin:2px 0 0;}'\n  + '.vf-rg::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:20px;height:28px;'\n  + 'background:var(--accent);border:2px solid #fff;border-radius:2px;box-shadow:0 1px 3px rgba(0,0,0,.25);}'\n  + '.vf-rg::-moz-range-thumb{width:20px;height:28px;background:var(--accent);border:2px solid #fff;border-radius:2px;}'\n  + '.vf-scale{display:flex;justify-content:space-between;color:var(--muted);font-size:11px;'\n  + 'font-variant-numeric:tabular-nums;margin-top:5px;padding:0 2px;}'\n  + '.vf-tw{margin-top:18px;overflow-x:auto;-webkit-overflow-scrolling:touch;}'\n  + '.vf-tb{width:100%;border-collapse:collapse;font-variant-numeric:tabular-nums;min-width:300px;}'\n  + '.vf-tb th{font-size:10px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);border:0;'\n  + 'text-align:right;padding:0 0 9px;border-bottom:2px solid var(--ink);}'\n  + '.vf-tb th:first-child{text-align:left;}'\n  + '.vf-tb td{font-size:14px;padding:11px 0;border:0;border-bottom:1px solid var(--line);text-align:right;font-weight:500;}'\n  + '.vf-tb td:first-child{text-align:left;font-weight:800;font-size:15px;}'\n  + '.vf-tb tr.on td{background:var(--accent-soft);border-bottom-color:var(--accent);}'\n  + '.vf-tb tr.on td:first-child{color:var(--accent);position:relative;}'\n  + '.vf-tb tr.on td:first-child::before{content:\"\";position:absolute;left:-14px;top:0;bottom:0;width:4px;background:var(--accent);}'\n  + '.vf-cap{font-size:11px;color:var(--muted);margin-top:9px;text-align:right;}'\n  + '.vf-note{font-size:12px;color:var(--muted);margin-top:10px;font-style:italic;}'\n  + '.vf-how{margin-top:16px;border-top:1px solid var(--line);padding-top:14px;}'\n  + '.vf-how summary{font-size:13px;font-weight:600;cursor:pointer;list-style:none;display:flex;align-items:center;gap:8px;}'\n  + '.vf-how summary::-webkit-details-marker{display:none;}'\n  + '.vf-how summary::before{content:\"+\";width:15px;font-weight:800;color:var(--accent);}'\n  + '.vf-how[open] summary::before{content:\"\\\\2013\";}'\n  + '.vf-how ul{margin:11px 0 0;padding:0;list-style:none;font-size:13px;color:var(--muted);}'\n  + '.vf-how li{padding:4px 0 4px 15px;position:relative;} .vf-how li b{color:var(--ink);font-weight:600;}'\n  + '.vf-how li::before{content:\"\";position:absolute;left:0;top:11px;width:6px;height:1px;background:var(--muted);}'\n  + '@media(max-width:560px){'\n  + '.vf-size{padding:16px;}'\n  + '.vf-hd{padding-bottom:11px;}'\n  + '.vf-nm{font-size:21px;}'\n  + '.vf-find{padding:14px;}'\n  + '.vf-fh{gap:4px;}'\n  + '.vf-num input{width:72px;font-size:20px;}'\n  + '.vf-num span{font-size:11px;}'\n  + '.vf-ft{font-size:13px;} .vf-ask{font-size:12px;}'\n  + '.vf-res{min-width:120px;font-size:12px;}'\n  + '.vf-tb{min-width:0;} .vf-tw{overflow-x:visible;}'\n  + '.vf-tb td{font-size:13px;padding:10px 0;} .vf-tb td:first-child{font-size:14px;}'\n  + '.vf-tb th{font-size:9px;letter-spacing:.06em;}'\n  + '.vf-cap{font-size:10px;}'\n  + '.vf-tb tr.on td:first-child::before{left:-10px;width:3px;}'\n  + '}';\n\n  function injectCSS(){\n    if(document.getElementById('vf-size-css'))return;\n    var s=document.createElement('style'); s.id='vf-size-css'; s.textContent=CSS;\n    document.head.appendChild(s);\n  }\n\n  function init(mount){\n    var chart = CHARTS[mount.getAttribute('data-chart')];\n    if(!chart){ mount.innerHTML='\u003cp style=\"font:13px sans-serif;color:#a00\"\u003eSize chart not found.\u003c\/p\u003e'; return; }\n    var name = mount.getAttribute('data-name') || chart.name;\n\n    var unit='in', userCm=null;\n    var toIn=function(cm){return Math.round((cm\/2.54)*10)\/10;};\n    var disp=function(cm){return unit==='in'?toIn(cm):cm;};\n    var eGirth=function(r){return chart.flat?r[1]*2:r[1];};\n\n    mount.innerHTML=''\n      +'\u003cdiv class=\"vf-hd\"\u003e\u003cdiv\u003e'\n      +'\u003cdiv class=\"vf-ey\"\u003eVisionary \u003cb\u003e\/\u003c\/b\u003e size guide\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-nm\"\u003e\u003c\/div\u003e\u003cdiv class=\"vf-fit\"\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-units\" role=\"group\" aria-label=\"Units\"\u003e'\n      +'\u003cspan class=\"vf-u\" data-u=\"in\" role=\"button\" tabindex=\"0\" aria-pressed=\"true\"\u003eIN\u003c\/span\u003e'\n      +'\u003cspan class=\"vf-u\" data-u=\"cm\" role=\"button\" tabindex=\"0\" aria-pressed=\"false\"\u003eCM\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-find\"\u003e\u003cdiv class=\"vf-fh\"\u003e\u003cdiv class=\"vf-ft\"\u003eFind your fit\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-ask\"\u003eEnter your \u003cb class=\"vf-metric\"\u003e\u003c\/b\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-ro\"\u003e\u003cdiv class=\"vf-num\"\u003e\u003cinput class=\"vf-input\" type=\"number\" inputmode=\"decimal\" step=\"0.5\" value=\"0\"\u003e\u003cspan class=\"vf-iu\"\u003ein\u003c\/span\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-res\"\u003eWe recommend \u003cspan class=\"vf-big vf-rec\"\u003e\\u2013\u003c\/span\u003e\u003cdiv class=\"vf-rn\"\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-ruler\"\u003e\u003cdiv class=\"vf-ticks\"\u003e\u003c\/div\u003e'\n      +'\u003cinput class=\"vf-rg\" type=\"range\" step=\"0.5\"\u003e\u003cdiv class=\"vf-scale\"\u003e\u003cspan class=\"vf-mn\"\u003e\u003c\/span\u003e\u003cspan class=\"vf-mx\"\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-tw\"\u003e\u003ctable class=\"vf-tb\"\u003e\u003cthead\u003e\u003ctr class=\"vf-th\"\u003e\u003c\/tr\u003e\u003c\/thead\u003e\u003ctbody class=\"vf-tbd\"\u003e\u003c\/tbody\u003e\u003c\/table\u003e\u003cdiv class=\"vf-cap\"\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-note\"\u003e\u003c\/div\u003e'\n      +'\u003cdetails class=\"vf-how\"\u003e\u003csummary\u003eHow to measure\u003c\/summary\u003e\u003cul\u003e'\n      +'\u003cli\u003e\u003cb\u003eChest \/ bust\u003c\/b\u003e \\u2014 around the fullest part, tape level under the arms, relaxed.\u003c\/li\u003e'\n      +'\u003cli\u003e\u003cb\u003eWaist\u003c\/b\u003e \\u2014 around your natural waistline, roughly at the belly button.\u003c\/li\u003e'\n      +'\u003cli\u003e\u003cb\u003eLength\u003c\/b\u003e \\u2014 from the highest shoulder seam straight down to the hem.\u003c\/li\u003e'\n      +'\u003cli\u003eBetween sizes? Size up for a looser fit, down for a closer one.\u003c\/li\u003e\u003c\/ul\u003e\u003c\/details\u003e';\n\n    var q=function(s){return mount.querySelector(s);};\n    q('.vf-nm').textContent=name;\n    q('.vf-fit').textContent=chart.fit;\n    q('.vf-metric').textContent=chart.metric;\n\n    function recommend(cm){\n      if(cm==null)return null; var best=null,bd=1e9;\n      chart.rows.forEach(function(r){var d=Math.abs(eGirth(r)-cm); if(d\u003cbd){bd=d;best=r[0];}});\n      return best;\n    }\n    function girthRange(){\n      var v=chart.rows.map(eGirth); return [Math.round(Math.min.apply(null,v)-8), Math.round(Math.max.apply(null,v)+8)];\n    }\n    function ticks(mn,mx){\n      var t=q('.vf-ticks'); t.innerHTML=''; var span=mx-mn; if(span\u003c=0)return;\n      var step=unit==='in'?1:2, maj=unit==='in'?5:10;\n      for(var v=Math.ceil(mn); v\u003c=mx; v+=step){\n        var i=document.createElement('i'); i.className=(Math.round(v)%maj===0)?'maj':'min';\n        i.style.left=((v-mn)\/span*100)+'%'; t.appendChild(i);\n      }\n    }\n    function table(){\n      var b=q('.vf-tbd'); b.innerHTML=''; var rec=recommend(userCm);\n      chart.rows.forEach(function(r){\n        var tr=document.createElement('tr'); if(r[0]===rec)tr.className='on';\n        var td0=document.createElement('td'); td0.textContent=r[0]; tr.appendChild(td0);\n        for(var i=1;i\u003cr.length;i++){var td=document.createElement('td'); td.textContent=disp(r[i]); tr.appendChild(td);}\n        b.appendChild(tr);\n      });\n    }\n    function rec(){\n      var s=recommend(userCm); q('.vf-rec').textContent=s||'\\u2013'; var n=q('.vf-rn');\n      if(!s){n.textContent='';return;}\n      var row=chart.rows.filter(function(r){return r[0]===s;})[0], g=eGirth(row), c=userCm-g, m;\n      if(Math.abs(c)\u003c=2)m='Right in range for this piece.';\n      else if(c\u003e0)m='Near the top of this size \\u2014 size up for more room.';\n      else m='Comfortable, with a little room to spare.';\n      n.textContent=m;\n    }\n    function render(){\n      var thr=q('.vf-th'); thr.innerHTML='\u003cth\u003eSize\u003c\/th\u003e';\n      chart.cols.forEach(function(c){var th=document.createElement('th');th.textContent=c;thr.appendChild(th);});\n      var rr=girthRange(), mn=unit==='in'?toIn(rr[0]):rr[0], mx=unit==='in'?toIn(rr[1]):rr[1];\n      var rg=q('.vf-rg'); rg.min=mn; rg.max=mx;\n      q('.vf-mn').textContent=mn+(unit==='in'?'\"':''); q('.vf-mx').textContent=mx+(unit==='in'?'\"':'');\n      q('.vf-iu').textContent=unit==='in'?'in':'cm';\n      if(userCm==null){var mid=chart.rows[Math.floor(chart.rows.length\/2)]; userCm=eGirth(mid);}\n      var ud=disp(userCm); q('.vf-input').value=ud; rg.value=Math.min(mx,Math.max(mn,ud));\n      ticks(mn,mx); table(); rec();\n      q('.vf-cap').textContent='Measurements in '+(unit==='in'?'inches':'centimetres')+'.';\n      q('.vf-note').textContent=chart.note?('* '+chart.note):'';\n    }\n\n    mount.querySelectorAll('.vf-u').forEach(function(bt){\n      var go=function(){ unit=bt.getAttribute('data-u');\n        mount.querySelectorAll('.vf-u').forEach(function(x){x.setAttribute('aria-pressed',x===bt?'true':'false');});\n        render(); };\n      bt.onclick=go;\n      bt.onkeydown=function(e){ if(e.key==='Enter'||e.key===' '){e.preventDefault();go();} };\n    });\n    q('.vf-rg').addEventListener('input',function(){var v=parseFloat(this.value);userCm=unit==='in'?v*2.54:v;q('.vf-input').value=v;table();rec();});\n    q('.vf-input').addEventListener('input',function(){var v=parseFloat(this.value);if(isNaN(v))return;userCm=unit==='in'?v*2.54:v;\n      var rg=q('.vf-rg');rg.value=Math.min(parseFloat(rg.max),Math.max(parseFloat(rg.min),v));table();rec();});\n\n    render(); mount.setAttribute('data-vf-ready','1');\n  }\n\n  function scan(){ injectCSS(); document.querySelectorAll('.vf-size[data-chart]:not([data-vf-ready])').forEach(init); }\n  window.__vfSizeGuide={scan:scan,charts:CHARTS};\n  if(document.readyState==='loading') document.addEventListener('DOMContentLoaded',scan); else scan();\n})();\n\u003c\/script\u003e\n\u003c!-- VF-SIZE-GUIDE END --\u003e","brand":"Visionary Fitness Store","offers":[{"title":"S \/ White","offer_id":47694338949358,"sku":null,"price":35.0,"currency_code":"USD","in_stock":true},{"title":"M \/ White","offer_id":47694339145966,"sku":null,"price":35.0,"currency_code":"USD","in_stock":false},{"title":"L \/ White","offer_id":47694339342574,"sku":null,"price":35.0,"currency_code":"USD","in_stock":true},{"title":"XL \/ White","offer_id":47694339539182,"sku":null,"price":35.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0796\/2578\/1486\/files\/12_7c65bcb8-85a3-40b4-af9e-bf2eb68edf54.png?v=1773297969"},{"product_id":"vital-5-running-short","title":"VITAL 5\" RUNNING SHORT","description":"\u003cp\u003e\u003cstrong\u003eAbout This Piece\u003c\/strong\u003e\u003c\/p\u003e\n\n\u003cp\u003eBuilt for every type of training. Our athletic shorts are lightweight, fast drying, and constructed to hold up session after session. Whether you are running, lifting, or just living in them, these are the shorts that keep up without slowing you down. True to size.\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e 100% Polyester | Lightweight\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Standard | True to size\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eModel:\u003c\/strong\u003e 6'0\" | 200 lbs | Wearing size Large\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eCare:\u003c\/strong\u003e Cold wash only. Hang dry. No high heat. Do not bleach.\u003c\/p\u003e\n\u003c!-- VF-SIZE-GUIDE START --\u003e\n\u003chr\u003e\n\u003ch3\u003eSize guide\u003c\/h3\u003e\n\u003cdiv class=\"vf-size\" data-chart=\"vital-running-shorts\" data-name='VITAL 5\" RUNNING SHORT'\u003e\u003c\/div\u003e\n\u003cscript\u003e\n(function(){\n  if (window.__vfSizeGuide) { window.__vfSizeGuide.scan(); return; }\n\n  \/* ---- shared charts (edit measurements here, in ONE place) ----\n     girth = the column used to recommend a size.\n     flat  = measurement taken laid flat \/ half body, so we double it\n             when matching to a customer's real body measurement.        *\/\n  var CHARTS = {\n    'stringers': {name:'Stringer', fit:'true to size', metric:'chest',\n      cols:['Chest','Length'],\n      rows:[['S',90,68],['M',94,70],['L',98,72],['XL',102,74],['XXL',106,76]]},\n    'defy-blackout-tank': {name:'Defy \/ Blackout Tank', fit:'fitted', metric:'chest',\n      cols:['Chest','Length'],\n      rows:[['XS',76,63],['S',78,65],['M',80,67],['L',85,69],['XL',90,71],['XXL',92,73]]},\n    'core-vantage-tank': {name:'Core \/ Vantage Tank', fit:'fitted', metric:'chest', flat:true,\n      cols:['Chest','Length'],\n      rows:[['XS',47,66],['S',49,68],['M',51,70],['L',53,72],['XL',55,74],['XXL',57,76]]},\n    'oversized-tees': {name:'Oversized Tee', fit:'oversized', metric:'chest',\n      cols:['Chest','Length','Sleeve'],\n      rows:[['XS',108,69,22],['S',112,71,23],['M',116,73,24],['L',120,75,25],['XL',124,77,26],['XXL',126,79,27]]},\n    'muscle-compression-tees': {name:'Muscle \/ Compression Tee', fit:'fitted', metric:'chest',\n      cols:['Chest','Length','Sleeve'],\n      rows:[['XS',80,63,27],['S',84,65,28],['M',88,67,29],['L',92,69,30],['XL',96,71,31],['XXL',100,73,32]]},\n    'longsleeve-compression-tee': {name:'Longsleeve Compression Tee', fit:'fitted', metric:'chest',\n      cols:['Chest','Length','Sleeve'],\n      rows:[['XS',105,70,63],['S',107,72,64],['M',112,74,65],['L',117,76,66],['XL',122,78,67],['XXL',127,80,68]]},\n\n    'legacy-liner-shorts': {name:'Legacy Liner Shorts', fit:'regular', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',70,45,100],['M',74,46,104],['L',78,47,108],['XL',82,48,112],['XXL',86,49,116]]},\n    'vital-running-shorts': {name:'Vital Running Shorts', fit:'regular', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',72,45,101],['M',74,46,104],['L',76,47,108],['XL',78,48,112],['XXL',80,49,116]]},\n    'mesh-shorts': {name:'Mesh Shorts', fit:'athletic \/ true to size', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',71.1,39.4,105.9],['M',74.9,40.6,110],['L',78,41.4,113.8],['XL',81,42.4,117.9],['XXL',85.1,43.4,121.9]]},\n    'stride-vantage-shorts': {name:'Stride \/ Vantage Shorts', fit:'lined', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['XS',71,33,49],['S',74,34.5,51],['M',76,36,53],['L',78,38,55],['XL',83,40,57],['XXL',86,42,59]]},\n    'defy-cotton-shorts': {name:'Defy Cotton Shorts', fit:'regular', metric:'waist',\n      note:'Length \u0026 hip on this chart look swapped from Molly — confirm before going live.',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',72,108,42],['M',76,112,43],['L',80,116,44],['XL',84,122,45.5],['XXL',88,128,47]]},\n    'sweatpants': {name:'Sweatpants', fit:'relaxed', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',66,99,58],['M',69,101,60],['L',72,103,62],['XL',75,105,64],['XXL',78,107,66]]},\n\n    'revival-bra': {name:'Revival Bra', fit:'compression', metric:'bust',\n      cols:['Bust','Length','Hem'],\n      rows:[['S',68,33,56],['M',72,34,60],['L',76,35,64]]},\n    'revival-booty-shorts': {name:'Revival Booty Shorts', fit:'high-waist', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',58,34,72],['M',62,36,76],['L',68,38,80]]},\n    'serenity-leggings': {name:'Serenity Leggings', fit:'high-stretch', metric:'waist', flat:true,\n      note:'High-stretch. Waist \u0026 hip are relaxed (laid-flat) numbers — the fabric expands well past these.',\n      cols:['Waist','Length','Hip'],\n      rows:[['XS',25.5,78,31],['S',28,79,33.5],['M',30.5,80,36],['L',33,81,38.5],['XL',35.5,82,41]]}\n  };\n\n  var CSS = ''\n  + '@import url(\\'https:\/\/fonts.googleapis.com\/css2?family=Archivo:wght@400;500;600;800\u0026display=swap\\');'\n  + '.vf-size{--paper:#0b0b0b;--card:#171717;--ink:#ffffff;--muted:#a1a099;--line:#2a2a28;'\n  + '--line-strong:#3d3d3a;--accent:#5c78ff;--accent-soft:#1b2350;'\n  + \"--font:'Archivo',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;\"\n  + 'font-family:var(--font);color:var(--ink);background:var(--paper);line-height:1.4;'\n  + '-webkit-font-smoothing:antialiased;box-sizing:border-box;max-width:620px;margin:22px auto;'\n  + 'padding:clamp(16px,4vw,28px);border:1px solid var(--line-strong);border-radius:3px;}'\n  + '.vf-size *,.vf-size *::before,.vf-size *::after{box-sizing:border-box;}'\n  + '.vf-size button{font-family:inherit;cursor:pointer;}'\n  + '.vf-hd{display:flex;justify-content:space-between;align-items:flex-start;gap:14px;flex-wrap:wrap;'\n  + 'border-bottom:2px solid var(--ink);padding-bottom:12px;}'\n  + '.vf-ey{font-weight:800;letter-spacing:.14em;font-size:11px;text-transform:uppercase;color:var(--muted);}'\n  + '.vf-ey b{color:var(--accent);}'\n  + '.vf-nm{font-weight:800;font-size:clamp(22px,5vw,30px);line-height:1;letter-spacing:-.01em;margin:3px 0 0;}'\n  + '.vf-fit{font-size:12px;color:var(--muted);border:1px solid var(--line-strong);padding:3px 9px;'\n  + 'border-radius:2px;white-space:nowrap;margin-top:2px;}'\n  + '.vf-units{display:inline-flex;align-items:center;gap:16px;flex-shrink:0;}'\n  + '.vf-u{font-size:12px;font-weight:700;letter-spacing:.1em;color:var(--muted);cursor:pointer;'\n  + 'padding-bottom:3px;border-bottom:2px solid transparent;user-select:none;line-height:1;}'\n  + '.vf-u[aria-pressed=\"true\"]{color:var(--ink);border-bottom-color:var(--accent);}'\n  + '.vf-find{background:var(--card);border:1.5px solid var(--ink);border-radius:3px;padding:16px;margin-top:18px;}'\n  + '.vf-fh{display:flex;justify-content:space-between;align-items:baseline;gap:8px;flex-wrap:wrap;}'\n  + '.vf-ft{font-weight:800;font-size:14px;}'\n  + '.vf-ask{font-size:13px;color:var(--muted);} .vf-ask b{color:var(--ink);font-weight:600;}'\n  + '.vf-ro{display:flex;align-items:flex-end;gap:14px;margin:14px 0 2px;flex-wrap:wrap;}'\n  + '.vf-num{display:flex;align-items:baseline;border:1.5px solid var(--line-strong);border-radius:2px;'\n  + 'background:var(--paper);padding:6px 9px;}'\n  + '.vf-num input{all:unset;width:82px;font-family:inherit;font-weight:800;font-size:23px;color:var(--ink);'\n  + 'font-variant-numeric:tabular-nums;}'\n  + '.vf-num span{font-size:12px;font-weight:600;color:var(--muted);margin-left:2px;}'\n  + '.vf-res{flex:1;min-width:140px;font-size:13px;color:var(--muted);}'\n  + '.vf-big{display:inline-block;background:var(--accent);color:#fff;font-weight:800;font-size:14px;'\n  + 'padding:4px 12px;border-radius:2px;letter-spacing:.03em;}'\n  + '.vf-rn{margin-top:6px;font-size:12px;color:var(--muted);}'\n  + '.vf-ruler{margin-top:12px;}'\n  + '.vf-ticks{position:relative;height:15px;margin:0 8px 2px;}'\n  + '.vf-ticks i{position:absolute;top:0;width:1px;background:var(--line-strong);}'\n  + '.vf-ticks i.maj{height:15px;background:var(--muted);} .vf-ticks i.min{height:7px;}'\n  + '.vf-rg{-webkit-appearance:none;appearance:none;width:100%;height:4px;background:var(--ink);outline:none;margin:2px 0 0;}'\n  + '.vf-rg::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:20px;height:28px;'\n  + 'background:var(--accent);border:2px solid #fff;border-radius:2px;box-shadow:0 1px 3px rgba(0,0,0,.25);}'\n  + '.vf-rg::-moz-range-thumb{width:20px;height:28px;background:var(--accent);border:2px solid #fff;border-radius:2px;}'\n  + '.vf-scale{display:flex;justify-content:space-between;color:var(--muted);font-size:11px;'\n  + 'font-variant-numeric:tabular-nums;margin-top:5px;padding:0 2px;}'\n  + '.vf-tw{margin-top:18px;overflow-x:auto;-webkit-overflow-scrolling:touch;}'\n  + '.vf-tb{width:100%;border-collapse:collapse;font-variant-numeric:tabular-nums;min-width:300px;}'\n  + '.vf-tb th{font-size:10px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);border:0;'\n  + 'text-align:right;padding:0 0 9px;border-bottom:2px solid var(--ink);}'\n  + '.vf-tb th:first-child{text-align:left;}'\n  + '.vf-tb td{font-size:14px;padding:11px 0;border:0;border-bottom:1px solid var(--line);text-align:right;font-weight:500;}'\n  + '.vf-tb td:first-child{text-align:left;font-weight:800;font-size:15px;}'\n  + '.vf-tb tr.on td{background:var(--accent-soft);border-bottom-color:var(--accent);}'\n  + '.vf-tb tr.on td:first-child{color:var(--accent);position:relative;}'\n  + '.vf-tb tr.on td:first-child::before{content:\"\";position:absolute;left:-14px;top:0;bottom:0;width:4px;background:var(--accent);}'\n  + '.vf-cap{font-size:11px;color:var(--muted);margin-top:9px;text-align:right;}'\n  + '.vf-note{font-size:12px;color:var(--muted);margin-top:10px;font-style:italic;}'\n  + '.vf-how{margin-top:16px;border-top:1px solid var(--line);padding-top:14px;}'\n  + '.vf-how summary{font-size:13px;font-weight:600;cursor:pointer;list-style:none;display:flex;align-items:center;gap:8px;}'\n  + '.vf-how summary::-webkit-details-marker{display:none;}'\n  + '.vf-how summary::before{content:\"+\";width:15px;font-weight:800;color:var(--accent);}'\n  + '.vf-how[open] summary::before{content:\"\\\\2013\";}'\n  + '.vf-how ul{margin:11px 0 0;padding:0;list-style:none;font-size:13px;color:var(--muted);}'\n  + '.vf-how li{padding:4px 0 4px 15px;position:relative;} .vf-how li b{color:var(--ink);font-weight:600;}'\n  + '.vf-how li::before{content:\"\";position:absolute;left:0;top:11px;width:6px;height:1px;background:var(--muted);}'\n  + '@media(max-width:560px){'\n  + '.vf-size{padding:16px;}'\n  + '.vf-hd{padding-bottom:11px;}'\n  + '.vf-nm{font-size:21px;}'\n  + '.vf-find{padding:14px;}'\n  + '.vf-fh{gap:4px;}'\n  + '.vf-num input{width:72px;font-size:20px;}'\n  + '.vf-num span{font-size:11px;}'\n  + '.vf-ft{font-size:13px;} .vf-ask{font-size:12px;}'\n  + '.vf-res{min-width:120px;font-size:12px;}'\n  + '.vf-tb{min-width:0;} .vf-tw{overflow-x:visible;}'\n  + '.vf-tb td{font-size:13px;padding:10px 0;} .vf-tb td:first-child{font-size:14px;}'\n  + '.vf-tb th{font-size:9px;letter-spacing:.06em;}'\n  + '.vf-cap{font-size:10px;}'\n  + '.vf-tb tr.on td:first-child::before{left:-10px;width:3px;}'\n  + '}';\n\n  function injectCSS(){\n    if(document.getElementById('vf-size-css'))return;\n    var s=document.createElement('style'); s.id='vf-size-css'; s.textContent=CSS;\n    document.head.appendChild(s);\n  }\n\n  function init(mount){\n    var chart = CHARTS[mount.getAttribute('data-chart')];\n    if(!chart){ mount.innerHTML='\u003cp style=\"font:13px sans-serif;color:#a00\"\u003eSize chart not found.\u003c\/p\u003e'; return; }\n    var name = mount.getAttribute('data-name') || chart.name;\n\n    var unit='in', userCm=null;\n    var toIn=function(cm){return Math.round((cm\/2.54)*10)\/10;};\n    var disp=function(cm){return unit==='in'?toIn(cm):cm;};\n    var eGirth=function(r){return chart.flat?r[1]*2:r[1];};\n\n    mount.innerHTML=''\n      +'\u003cdiv class=\"vf-hd\"\u003e\u003cdiv\u003e'\n      +'\u003cdiv class=\"vf-ey\"\u003eVisionary \u003cb\u003e\/\u003c\/b\u003e size guide\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-nm\"\u003e\u003c\/div\u003e\u003cdiv class=\"vf-fit\"\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-units\" role=\"group\" aria-label=\"Units\"\u003e'\n      +'\u003cspan class=\"vf-u\" data-u=\"in\" role=\"button\" tabindex=\"0\" aria-pressed=\"true\"\u003eIN\u003c\/span\u003e'\n      +'\u003cspan class=\"vf-u\" data-u=\"cm\" role=\"button\" tabindex=\"0\" aria-pressed=\"false\"\u003eCM\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-find\"\u003e\u003cdiv class=\"vf-fh\"\u003e\u003cdiv class=\"vf-ft\"\u003eFind your fit\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-ask\"\u003eEnter your \u003cb class=\"vf-metric\"\u003e\u003c\/b\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-ro\"\u003e\u003cdiv class=\"vf-num\"\u003e\u003cinput class=\"vf-input\" type=\"number\" inputmode=\"decimal\" step=\"0.5\" value=\"0\"\u003e\u003cspan class=\"vf-iu\"\u003ein\u003c\/span\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-res\"\u003eWe recommend \u003cspan class=\"vf-big vf-rec\"\u003e\\u2013\u003c\/span\u003e\u003cdiv class=\"vf-rn\"\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-ruler\"\u003e\u003cdiv class=\"vf-ticks\"\u003e\u003c\/div\u003e'\n      +'\u003cinput class=\"vf-rg\" type=\"range\" step=\"0.5\"\u003e\u003cdiv class=\"vf-scale\"\u003e\u003cspan class=\"vf-mn\"\u003e\u003c\/span\u003e\u003cspan class=\"vf-mx\"\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-tw\"\u003e\u003ctable class=\"vf-tb\"\u003e\u003cthead\u003e\u003ctr class=\"vf-th\"\u003e\u003c\/tr\u003e\u003c\/thead\u003e\u003ctbody class=\"vf-tbd\"\u003e\u003c\/tbody\u003e\u003c\/table\u003e\u003cdiv class=\"vf-cap\"\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-note\"\u003e\u003c\/div\u003e'\n      +'\u003cdetails class=\"vf-how\"\u003e\u003csummary\u003eHow to measure\u003c\/summary\u003e\u003cul\u003e'\n      +'\u003cli\u003e\u003cb\u003eChest \/ bust\u003c\/b\u003e \\u2014 around the fullest part, tape level under the arms, relaxed.\u003c\/li\u003e'\n      +'\u003cli\u003e\u003cb\u003eWaist\u003c\/b\u003e \\u2014 around your natural waistline, roughly at the belly button.\u003c\/li\u003e'\n      +'\u003cli\u003e\u003cb\u003eLength\u003c\/b\u003e \\u2014 from the highest shoulder seam straight down to the hem.\u003c\/li\u003e'\n      +'\u003cli\u003eBetween sizes? Size up for a looser fit, down for a closer one.\u003c\/li\u003e\u003c\/ul\u003e\u003c\/details\u003e';\n\n    var q=function(s){return mount.querySelector(s);};\n    q('.vf-nm').textContent=name;\n    q('.vf-fit').textContent=chart.fit;\n    q('.vf-metric').textContent=chart.metric;\n\n    function recommend(cm){\n      if(cm==null)return null; var best=null,bd=1e9;\n      chart.rows.forEach(function(r){var d=Math.abs(eGirth(r)-cm); if(d\u003cbd){bd=d;best=r[0];}});\n      return best;\n    }\n    function girthRange(){\n      var v=chart.rows.map(eGirth); return [Math.round(Math.min.apply(null,v)-8), Math.round(Math.max.apply(null,v)+8)];\n    }\n    function ticks(mn,mx){\n      var t=q('.vf-ticks'); t.innerHTML=''; var span=mx-mn; if(span\u003c=0)return;\n      var step=unit==='in'?1:2, maj=unit==='in'?5:10;\n      for(var v=Math.ceil(mn); v\u003c=mx; v+=step){\n        var i=document.createElement('i'); i.className=(Math.round(v)%maj===0)?'maj':'min';\n        i.style.left=((v-mn)\/span*100)+'%'; t.appendChild(i);\n      }\n    }\n    function table(){\n      var b=q('.vf-tbd'); b.innerHTML=''; var rec=recommend(userCm);\n      chart.rows.forEach(function(r){\n        var tr=document.createElement('tr'); if(r[0]===rec)tr.className='on';\n        var td0=document.createElement('td'); td0.textContent=r[0]; tr.appendChild(td0);\n        for(var i=1;i\u003cr.length;i++){var td=document.createElement('td'); td.textContent=disp(r[i]); tr.appendChild(td);}\n        b.appendChild(tr);\n      });\n    }\n    function rec(){\n      var s=recommend(userCm); q('.vf-rec').textContent=s||'\\u2013'; var n=q('.vf-rn');\n      if(!s){n.textContent='';return;}\n      var row=chart.rows.filter(function(r){return r[0]===s;})[0], g=eGirth(row), c=userCm-g, m;\n      if(Math.abs(c)\u003c=2)m='Right in range for this piece.';\n      else if(c\u003e0)m='Near the top of this size \\u2014 size up for more room.';\n      else m='Comfortable, with a little room to spare.';\n      n.textContent=m;\n    }\n    function render(){\n      var thr=q('.vf-th'); thr.innerHTML='\u003cth\u003eSize\u003c\/th\u003e';\n      chart.cols.forEach(function(c){var th=document.createElement('th');th.textContent=c;thr.appendChild(th);});\n      var rr=girthRange(), mn=unit==='in'?toIn(rr[0]):rr[0], mx=unit==='in'?toIn(rr[1]):rr[1];\n      var rg=q('.vf-rg'); rg.min=mn; rg.max=mx;\n      q('.vf-mn').textContent=mn+(unit==='in'?'\"':''); q('.vf-mx').textContent=mx+(unit==='in'?'\"':'');\n      q('.vf-iu').textContent=unit==='in'?'in':'cm';\n      if(userCm==null){var mid=chart.rows[Math.floor(chart.rows.length\/2)]; userCm=eGirth(mid);}\n      var ud=disp(userCm); q('.vf-input').value=ud; rg.value=Math.min(mx,Math.max(mn,ud));\n      ticks(mn,mx); table(); rec();\n      q('.vf-cap').textContent='Measurements in '+(unit==='in'?'inches':'centimetres')+'.';\n      q('.vf-note').textContent=chart.note?('* '+chart.note):'';\n    }\n\n    mount.querySelectorAll('.vf-u').forEach(function(bt){\n      var go=function(){ unit=bt.getAttribute('data-u');\n        mount.querySelectorAll('.vf-u').forEach(function(x){x.setAttribute('aria-pressed',x===bt?'true':'false');});\n        render(); };\n      bt.onclick=go;\n      bt.onkeydown=function(e){ if(e.key==='Enter'||e.key===' '){e.preventDefault();go();} };\n    });\n    q('.vf-rg').addEventListener('input',function(){var v=parseFloat(this.value);userCm=unit==='in'?v*2.54:v;q('.vf-input').value=v;table();rec();});\n    q('.vf-input').addEventListener('input',function(){var v=parseFloat(this.value);if(isNaN(v))return;userCm=unit==='in'?v*2.54:v;\n      var rg=q('.vf-rg');rg.value=Math.min(parseFloat(rg.max),Math.max(parseFloat(rg.min),v));table();rec();});\n\n    render(); mount.setAttribute('data-vf-ready','1');\n  }\n\n  function scan(){ injectCSS(); document.querySelectorAll('.vf-size[data-chart]:not([data-vf-ready])').forEach(init); }\n  window.__vfSizeGuide={scan:scan,charts:CHARTS};\n  if(document.readyState==='loading') document.addEventListener('DOMContentLoaded',scan); else scan();\n})();\n\u003c\/script\u003e\n\u003c!-- VF-SIZE-GUIDE END --\u003e","brand":"Visionary Fitness Store","offers":[{"title":"XS \/ Ice Grey","offer_id":47694339735790,"sku":null,"price":28.0,"currency_code":"USD","in_stock":true},{"title":"S \/ Ice Grey","offer_id":47694339866862,"sku":null,"price":28.0,"currency_code":"USD","in_stock":true},{"title":"M \/ Ice Grey","offer_id":47694339997934,"sku":null,"price":28.0,"currency_code":"USD","in_stock":true},{"title":"L \/ Ice Grey","offer_id":47694340129006,"sku":null,"price":28.0,"currency_code":"USD","in_stock":true},{"title":"XL \/ Ice Grey","offer_id":47694340260078,"sku":null,"price":28.0,"currency_code":"USD","in_stock":true},{"title":"XXL \/ Ice Grey","offer_id":47694340391150,"sku":null,"price":28.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0796\/2578\/1486\/files\/4_a96e5b91-c821-4445-b68a-dcc78dd52621.png?v=1773297725"},{"product_id":"defy-5-cotton-short","title":"DEFY 5\" COTTON SHORT","description":"\u003cp\u003e\u003cstrong\u003eAbout This Piece\u003c\/strong\u003e\u003c\/p\u003e\n\n\u003cp\u003eBuilt for every type of training. Our athletic shorts are lightweight, fast drying, and constructed to hold up session after session. Whether you are running, lifting, or just living in them, these are the shorts that keep up without slowing you down. True to size.\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e 100% Polyester | Lightweight\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Standard | True to size\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eModel:\u003c\/strong\u003e 6'0\" | 200 lbs | Wearing size Large\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eCare:\u003c\/strong\u003e Cold wash only. Hang dry. No high heat. Do not bleach.\u003c\/p\u003e\n\u003c!-- VF-SIZE-GUIDE START --\u003e\n\u003chr\u003e\n\u003ch3\u003eSize guide\u003c\/h3\u003e\n\u003cdiv class=\"vf-size\" data-chart=\"defy-cotton-shorts\" data-name='DEFY 5\" COTTON SHORT'\u003e\u003c\/div\u003e\n\u003cscript\u003e\n(function(){\n  if (window.__vfSizeGuide) { window.__vfSizeGuide.scan(); return; }\n\n  \/* ---- shared charts (edit measurements here, in ONE place) ----\n     girth = the column used to recommend a size.\n     flat  = measurement taken laid flat \/ half body, so we double it\n             when matching to a customer's real body measurement.        *\/\n  var CHARTS = {\n    'stringers': {name:'Stringer', fit:'true to size', metric:'chest',\n      cols:['Chest','Length'],\n      rows:[['S',90,68],['M',94,70],['L',98,72],['XL',102,74],['XXL',106,76]]},\n    'defy-blackout-tank': {name:'Defy \/ Blackout Tank', fit:'fitted', metric:'chest',\n      cols:['Chest','Length'],\n      rows:[['XS',76,63],['S',78,65],['M',80,67],['L',85,69],['XL',90,71],['XXL',92,73]]},\n    'core-vantage-tank': {name:'Core \/ Vantage Tank', fit:'fitted', metric:'chest', flat:true,\n      cols:['Chest','Length'],\n      rows:[['XS',47,66],['S',49,68],['M',51,70],['L',53,72],['XL',55,74],['XXL',57,76]]},\n    'oversized-tees': {name:'Oversized Tee', fit:'oversized', metric:'chest',\n      cols:['Chest','Length','Sleeve'],\n      rows:[['XS',108,69,22],['S',112,71,23],['M',116,73,24],['L',120,75,25],['XL',124,77,26],['XXL',126,79,27]]},\n    'muscle-compression-tees': {name:'Muscle \/ Compression Tee', fit:'fitted', metric:'chest',\n      cols:['Chest','Length','Sleeve'],\n      rows:[['XS',80,63,27],['S',84,65,28],['M',88,67,29],['L',92,69,30],['XL',96,71,31],['XXL',100,73,32]]},\n    'longsleeve-compression-tee': {name:'Longsleeve Compression Tee', fit:'fitted', metric:'chest',\n      cols:['Chest','Length','Sleeve'],\n      rows:[['XS',105,70,63],['S',107,72,64],['M',112,74,65],['L',117,76,66],['XL',122,78,67],['XXL',127,80,68]]},\n\n    'legacy-liner-shorts': {name:'Legacy Liner Shorts', fit:'regular', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',70,45,100],['M',74,46,104],['L',78,47,108],['XL',82,48,112],['XXL',86,49,116]]},\n    'vital-running-shorts': {name:'Vital Running Shorts', fit:'regular', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',72,45,101],['M',74,46,104],['L',76,47,108],['XL',78,48,112],['XXL',80,49,116]]},\n    'mesh-shorts': {name:'Mesh Shorts', fit:'athletic \/ true to size', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',71.1,39.4,105.9],['M',74.9,40.6,110],['L',78,41.4,113.8],['XL',81,42.4,117.9],['XXL',85.1,43.4,121.9]]},\n    'stride-vantage-shorts': {name:'Stride \/ Vantage Shorts', fit:'lined', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['XS',71,33,49],['S',74,34.5,51],['M',76,36,53],['L',78,38,55],['XL',83,40,57],['XXL',86,42,59]]},\n    'defy-cotton-shorts': {name:'Defy Cotton Shorts', fit:'regular', metric:'waist',\n      note:'Length \u0026 hip on this chart look swapped from Molly — confirm before going live.',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',72,108,42],['M',76,112,43],['L',80,116,44],['XL',84,122,45.5],['XXL',88,128,47]]},\n    'sweatpants': {name:'Sweatpants', fit:'relaxed', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',66,99,58],['M',69,101,60],['L',72,103,62],['XL',75,105,64],['XXL',78,107,66]]},\n\n    'revival-bra': {name:'Revival Bra', fit:'compression', metric:'bust',\n      cols:['Bust','Length','Hem'],\n      rows:[['S',68,33,56],['M',72,34,60],['L',76,35,64]]},\n    'revival-booty-shorts': {name:'Revival Booty Shorts', fit:'high-waist', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',58,34,72],['M',62,36,76],['L',68,38,80]]},\n    'serenity-leggings': {name:'Serenity Leggings', fit:'high-stretch', metric:'waist', flat:true,\n      note:'High-stretch. Waist \u0026 hip are relaxed (laid-flat) numbers — the fabric expands well past these.',\n      cols:['Waist','Length','Hip'],\n      rows:[['XS',25.5,78,31],['S',28,79,33.5],['M',30.5,80,36],['L',33,81,38.5],['XL',35.5,82,41]]}\n  };\n\n  var CSS = ''\n  + '@import url(\\'https:\/\/fonts.googleapis.com\/css2?family=Archivo:wght@400;500;600;800\u0026display=swap\\');'\n  + '.vf-size{--paper:#0b0b0b;--card:#171717;--ink:#ffffff;--muted:#a1a099;--line:#2a2a28;'\n  + '--line-strong:#3d3d3a;--accent:#5c78ff;--accent-soft:#1b2350;'\n  + \"--font:'Archivo',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;\"\n  + 'font-family:var(--font);color:var(--ink);background:var(--paper);line-height:1.4;'\n  + '-webkit-font-smoothing:antialiased;box-sizing:border-box;max-width:620px;margin:22px auto;'\n  + 'padding:clamp(16px,4vw,28px);border:1px solid var(--line-strong);border-radius:3px;}'\n  + '.vf-size *,.vf-size *::before,.vf-size *::after{box-sizing:border-box;}'\n  + '.vf-size button{font-family:inherit;cursor:pointer;}'\n  + '.vf-hd{display:flex;justify-content:space-between;align-items:flex-start;gap:14px;flex-wrap:wrap;'\n  + 'border-bottom:2px solid var(--ink);padding-bottom:12px;}'\n  + '.vf-ey{font-weight:800;letter-spacing:.14em;font-size:11px;text-transform:uppercase;color:var(--muted);}'\n  + '.vf-ey b{color:var(--accent);}'\n  + '.vf-nm{font-weight:800;font-size:clamp(22px,5vw,30px);line-height:1;letter-spacing:-.01em;margin:3px 0 0;}'\n  + '.vf-fit{font-size:12px;color:var(--muted);border:1px solid var(--line-strong);padding:3px 9px;'\n  + 'border-radius:2px;white-space:nowrap;margin-top:2px;}'\n  + '.vf-units{display:inline-flex;align-items:center;gap:16px;flex-shrink:0;}'\n  + '.vf-u{font-size:12px;font-weight:700;letter-spacing:.1em;color:var(--muted);cursor:pointer;'\n  + 'padding-bottom:3px;border-bottom:2px solid transparent;user-select:none;line-height:1;}'\n  + '.vf-u[aria-pressed=\"true\"]{color:var(--ink);border-bottom-color:var(--accent);}'\n  + '.vf-find{background:var(--card);border:1.5px solid var(--ink);border-radius:3px;padding:16px;margin-top:18px;}'\n  + '.vf-fh{display:flex;justify-content:space-between;align-items:baseline;gap:8px;flex-wrap:wrap;}'\n  + '.vf-ft{font-weight:800;font-size:14px;}'\n  + '.vf-ask{font-size:13px;color:var(--muted);} .vf-ask b{color:var(--ink);font-weight:600;}'\n  + '.vf-ro{display:flex;align-items:flex-end;gap:14px;margin:14px 0 2px;flex-wrap:wrap;}'\n  + '.vf-num{display:flex;align-items:baseline;border:1.5px solid var(--line-strong);border-radius:2px;'\n  + 'background:var(--paper);padding:6px 9px;}'\n  + '.vf-num input{all:unset;width:82px;font-family:inherit;font-weight:800;font-size:23px;color:var(--ink);'\n  + 'font-variant-numeric:tabular-nums;}'\n  + '.vf-num span{font-size:12px;font-weight:600;color:var(--muted);margin-left:2px;}'\n  + '.vf-res{flex:1;min-width:140px;font-size:13px;color:var(--muted);}'\n  + '.vf-big{display:inline-block;background:var(--accent);color:#fff;font-weight:800;font-size:14px;'\n  + 'padding:4px 12px;border-radius:2px;letter-spacing:.03em;}'\n  + '.vf-rn{margin-top:6px;font-size:12px;color:var(--muted);}'\n  + '.vf-ruler{margin-top:12px;}'\n  + '.vf-ticks{position:relative;height:15px;margin:0 8px 2px;}'\n  + '.vf-ticks i{position:absolute;top:0;width:1px;background:var(--line-strong);}'\n  + '.vf-ticks i.maj{height:15px;background:var(--muted);} .vf-ticks i.min{height:7px;}'\n  + '.vf-rg{-webkit-appearance:none;appearance:none;width:100%;height:4px;background:var(--ink);outline:none;margin:2px 0 0;}'\n  + '.vf-rg::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:20px;height:28px;'\n  + 'background:var(--accent);border:2px solid #fff;border-radius:2px;box-shadow:0 1px 3px rgba(0,0,0,.25);}'\n  + '.vf-rg::-moz-range-thumb{width:20px;height:28px;background:var(--accent);border:2px solid #fff;border-radius:2px;}'\n  + '.vf-scale{display:flex;justify-content:space-between;color:var(--muted);font-size:11px;'\n  + 'font-variant-numeric:tabular-nums;margin-top:5px;padding:0 2px;}'\n  + '.vf-tw{margin-top:18px;overflow-x:auto;-webkit-overflow-scrolling:touch;}'\n  + '.vf-tb{width:100%;border-collapse:collapse;font-variant-numeric:tabular-nums;min-width:300px;}'\n  + '.vf-tb th{font-size:10px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);border:0;'\n  + 'text-align:right;padding:0 0 9px;border-bottom:2px solid var(--ink);}'\n  + '.vf-tb th:first-child{text-align:left;}'\n  + '.vf-tb td{font-size:14px;padding:11px 0;border:0;border-bottom:1px solid var(--line);text-align:right;font-weight:500;}'\n  + '.vf-tb td:first-child{text-align:left;font-weight:800;font-size:15px;}'\n  + '.vf-tb tr.on td{background:var(--accent-soft);border-bottom-color:var(--accent);}'\n  + '.vf-tb tr.on td:first-child{color:var(--accent);position:relative;}'\n  + '.vf-tb tr.on td:first-child::before{content:\"\";position:absolute;left:-14px;top:0;bottom:0;width:4px;background:var(--accent);}'\n  + '.vf-cap{font-size:11px;color:var(--muted);margin-top:9px;text-align:right;}'\n  + '.vf-note{font-size:12px;color:var(--muted);margin-top:10px;font-style:italic;}'\n  + '.vf-how{margin-top:16px;border-top:1px solid var(--line);padding-top:14px;}'\n  + '.vf-how summary{font-size:13px;font-weight:600;cursor:pointer;list-style:none;display:flex;align-items:center;gap:8px;}'\n  + '.vf-how summary::-webkit-details-marker{display:none;}'\n  + '.vf-how summary::before{content:\"+\";width:15px;font-weight:800;color:var(--accent);}'\n  + '.vf-how[open] summary::before{content:\"\\\\2013\";}'\n  + '.vf-how ul{margin:11px 0 0;padding:0;list-style:none;font-size:13px;color:var(--muted);}'\n  + '.vf-how li{padding:4px 0 4px 15px;position:relative;} .vf-how li b{color:var(--ink);font-weight:600;}'\n  + '.vf-how li::before{content:\"\";position:absolute;left:0;top:11px;width:6px;height:1px;background:var(--muted);}'\n  + '@media(max-width:560px){'\n  + '.vf-size{padding:16px;}'\n  + '.vf-hd{padding-bottom:11px;}'\n  + '.vf-nm{font-size:21px;}'\n  + '.vf-find{padding:14px;}'\n  + '.vf-fh{gap:4px;}'\n  + '.vf-num input{width:72px;font-size:20px;}'\n  + '.vf-num span{font-size:11px;}'\n  + '.vf-ft{font-size:13px;} .vf-ask{font-size:12px;}'\n  + '.vf-res{min-width:120px;font-size:12px;}'\n  + '.vf-tb{min-width:0;} .vf-tw{overflow-x:visible;}'\n  + '.vf-tb td{font-size:13px;padding:10px 0;} .vf-tb td:first-child{font-size:14px;}'\n  + '.vf-tb th{font-size:9px;letter-spacing:.06em;}'\n  + '.vf-cap{font-size:10px;}'\n  + '.vf-tb tr.on td:first-child::before{left:-10px;width:3px;}'\n  + '}';\n\n  function injectCSS(){\n    if(document.getElementById('vf-size-css'))return;\n    var s=document.createElement('style'); s.id='vf-size-css'; s.textContent=CSS;\n    document.head.appendChild(s);\n  }\n\n  function init(mount){\n    var chart = CHARTS[mount.getAttribute('data-chart')];\n    if(!chart){ mount.innerHTML='\u003cp style=\"font:13px sans-serif;color:#a00\"\u003eSize chart not found.\u003c\/p\u003e'; return; }\n    var name = mount.getAttribute('data-name') || chart.name;\n\n    var unit='in', userCm=null;\n    var toIn=function(cm){return Math.round((cm\/2.54)*10)\/10;};\n    var disp=function(cm){return unit==='in'?toIn(cm):cm;};\n    var eGirth=function(r){return chart.flat?r[1]*2:r[1];};\n\n    mount.innerHTML=''\n      +'\u003cdiv class=\"vf-hd\"\u003e\u003cdiv\u003e'\n      +'\u003cdiv class=\"vf-ey\"\u003eVisionary \u003cb\u003e\/\u003c\/b\u003e size guide\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-nm\"\u003e\u003c\/div\u003e\u003cdiv class=\"vf-fit\"\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-units\" role=\"group\" aria-label=\"Units\"\u003e'\n      +'\u003cspan class=\"vf-u\" data-u=\"in\" role=\"button\" tabindex=\"0\" aria-pressed=\"true\"\u003eIN\u003c\/span\u003e'\n      +'\u003cspan class=\"vf-u\" data-u=\"cm\" role=\"button\" tabindex=\"0\" aria-pressed=\"false\"\u003eCM\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-find\"\u003e\u003cdiv class=\"vf-fh\"\u003e\u003cdiv class=\"vf-ft\"\u003eFind your fit\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-ask\"\u003eEnter your \u003cb class=\"vf-metric\"\u003e\u003c\/b\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-ro\"\u003e\u003cdiv class=\"vf-num\"\u003e\u003cinput class=\"vf-input\" type=\"number\" inputmode=\"decimal\" step=\"0.5\" value=\"0\"\u003e\u003cspan class=\"vf-iu\"\u003ein\u003c\/span\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-res\"\u003eWe recommend \u003cspan class=\"vf-big vf-rec\"\u003e\\u2013\u003c\/span\u003e\u003cdiv class=\"vf-rn\"\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-ruler\"\u003e\u003cdiv class=\"vf-ticks\"\u003e\u003c\/div\u003e'\n      +'\u003cinput class=\"vf-rg\" type=\"range\" step=\"0.5\"\u003e\u003cdiv class=\"vf-scale\"\u003e\u003cspan class=\"vf-mn\"\u003e\u003c\/span\u003e\u003cspan class=\"vf-mx\"\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-tw\"\u003e\u003ctable class=\"vf-tb\"\u003e\u003cthead\u003e\u003ctr class=\"vf-th\"\u003e\u003c\/tr\u003e\u003c\/thead\u003e\u003ctbody class=\"vf-tbd\"\u003e\u003c\/tbody\u003e\u003c\/table\u003e\u003cdiv class=\"vf-cap\"\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-note\"\u003e\u003c\/div\u003e'\n      +'\u003cdetails class=\"vf-how\"\u003e\u003csummary\u003eHow to measure\u003c\/summary\u003e\u003cul\u003e'\n      +'\u003cli\u003e\u003cb\u003eChest \/ bust\u003c\/b\u003e \\u2014 around the fullest part, tape level under the arms, relaxed.\u003c\/li\u003e'\n      +'\u003cli\u003e\u003cb\u003eWaist\u003c\/b\u003e \\u2014 around your natural waistline, roughly at the belly button.\u003c\/li\u003e'\n      +'\u003cli\u003e\u003cb\u003eLength\u003c\/b\u003e \\u2014 from the highest shoulder seam straight down to the hem.\u003c\/li\u003e'\n      +'\u003cli\u003eBetween sizes? Size up for a looser fit, down for a closer one.\u003c\/li\u003e\u003c\/ul\u003e\u003c\/details\u003e';\n\n    var q=function(s){return mount.querySelector(s);};\n    q('.vf-nm').textContent=name;\n    q('.vf-fit').textContent=chart.fit;\n    q('.vf-metric').textContent=chart.metric;\n\n    function recommend(cm){\n      if(cm==null)return null; var best=null,bd=1e9;\n      chart.rows.forEach(function(r){var d=Math.abs(eGirth(r)-cm); if(d\u003cbd){bd=d;best=r[0];}});\n      return best;\n    }\n    function girthRange(){\n      var v=chart.rows.map(eGirth); return [Math.round(Math.min.apply(null,v)-8), Math.round(Math.max.apply(null,v)+8)];\n    }\n    function ticks(mn,mx){\n      var t=q('.vf-ticks'); t.innerHTML=''; var span=mx-mn; if(span\u003c=0)return;\n      var step=unit==='in'?1:2, maj=unit==='in'?5:10;\n      for(var v=Math.ceil(mn); v\u003c=mx; v+=step){\n        var i=document.createElement('i'); i.className=(Math.round(v)%maj===0)?'maj':'min';\n        i.style.left=((v-mn)\/span*100)+'%'; t.appendChild(i);\n      }\n    }\n    function table(){\n      var b=q('.vf-tbd'); b.innerHTML=''; var rec=recommend(userCm);\n      chart.rows.forEach(function(r){\n        var tr=document.createElement('tr'); if(r[0]===rec)tr.className='on';\n        var td0=document.createElement('td'); td0.textContent=r[0]; tr.appendChild(td0);\n        for(var i=1;i\u003cr.length;i++){var td=document.createElement('td'); td.textContent=disp(r[i]); tr.appendChild(td);}\n        b.appendChild(tr);\n      });\n    }\n    function rec(){\n      var s=recommend(userCm); q('.vf-rec').textContent=s||'\\u2013'; var n=q('.vf-rn');\n      if(!s){n.textContent='';return;}\n      var row=chart.rows.filter(function(r){return r[0]===s;})[0], g=eGirth(row), c=userCm-g, m;\n      if(Math.abs(c)\u003c=2)m='Right in range for this piece.';\n      else if(c\u003e0)m='Near the top of this size \\u2014 size up for more room.';\n      else m='Comfortable, with a little room to spare.';\n      n.textContent=m;\n    }\n    function render(){\n      var thr=q('.vf-th'); thr.innerHTML='\u003cth\u003eSize\u003c\/th\u003e';\n      chart.cols.forEach(function(c){var th=document.createElement('th');th.textContent=c;thr.appendChild(th);});\n      var rr=girthRange(), mn=unit==='in'?toIn(rr[0]):rr[0], mx=unit==='in'?toIn(rr[1]):rr[1];\n      var rg=q('.vf-rg'); rg.min=mn; rg.max=mx;\n      q('.vf-mn').textContent=mn+(unit==='in'?'\"':''); q('.vf-mx').textContent=mx+(unit==='in'?'\"':'');\n      q('.vf-iu').textContent=unit==='in'?'in':'cm';\n      if(userCm==null){var mid=chart.rows[Math.floor(chart.rows.length\/2)]; userCm=eGirth(mid);}\n      var ud=disp(userCm); q('.vf-input').value=ud; rg.value=Math.min(mx,Math.max(mn,ud));\n      ticks(mn,mx); table(); rec();\n      q('.vf-cap').textContent='Measurements in '+(unit==='in'?'inches':'centimetres')+'.';\n      q('.vf-note').textContent=chart.note?('* '+chart.note):'';\n    }\n\n    mount.querySelectorAll('.vf-u').forEach(function(bt){\n      var go=function(){ unit=bt.getAttribute('data-u');\n        mount.querySelectorAll('.vf-u').forEach(function(x){x.setAttribute('aria-pressed',x===bt?'true':'false');});\n        render(); };\n      bt.onclick=go;\n      bt.onkeydown=function(e){ if(e.key==='Enter'||e.key===' '){e.preventDefault();go();} };\n    });\n    q('.vf-rg').addEventListener('input',function(){var v=parseFloat(this.value);userCm=unit==='in'?v*2.54:v;q('.vf-input').value=v;table();rec();});\n    q('.vf-input').addEventListener('input',function(){var v=parseFloat(this.value);if(isNaN(v))return;userCm=unit==='in'?v*2.54:v;\n      var rg=q('.vf-rg');rg.value=Math.min(parseFloat(rg.max),Math.max(parseFloat(rg.min),v));table();rec();});\n\n    render(); mount.setAttribute('data-vf-ready','1');\n  }\n\n  function scan(){ injectCSS(); document.querySelectorAll('.vf-size[data-chart]:not([data-vf-ready])').forEach(init); }\n  window.__vfSizeGuide={scan:scan,charts:CHARTS};\n  if(document.readyState==='loading') document.addEventListener('DOMContentLoaded',scan); else scan();\n})();\n\u003c\/script\u003e\n\u003c!-- VF-SIZE-GUIDE END --\u003e","brand":"Visionary Fitness Store","offers":[{"title":"XS \/ White","offer_id":47694340522222,"sku":null,"price":32.0,"currency_code":"USD","in_stock":true},{"title":"S \/ White","offer_id":47694340653294,"sku":null,"price":32.0,"currency_code":"USD","in_stock":true},{"title":"M \/ White","offer_id":47694340784366,"sku":null,"price":32.0,"currency_code":"USD","in_stock":true},{"title":"L \/ White","offer_id":47694340915438,"sku":null,"price":32.0,"currency_code":"USD","in_stock":true},{"title":"XL \/ White","offer_id":47694341046510,"sku":null,"price":32.0,"currency_code":"USD","in_stock":true},{"title":"XXL \/ White","offer_id":47694341177582,"sku":null,"price":32.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0796\/2578\/1486\/files\/6_1450fcf8-4d3c-40c7-969b-34a9edb077ed.png?v=1773297524"},{"product_id":"fear-average-5-mesh-short","title":"FEAR AVERAGE  5\" MESH SHORT","description":"\u003cp\u003e\u003cstrong\u003eAbout This Piece\u003c\/strong\u003e\u003c\/p\u003e\n\n\u003cp\u003eBuilt for the ones who show up. Our mesh shorts are constructed from 100% single layer polyester mesh that breathes through every rep, dries fast, and holds its shape session after session. Comfortable enough for everyday wear, clean enough for anywhere.\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e 100% Polyester | 250gsm | Single layer mesh\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Standard | True to size\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eModel:\u003c\/strong\u003e 6'0\" | 200 lbs | Wearing size Large\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eCare:\u003c\/strong\u003e Cold wash only. Hang dry. No high heat. Do not bleach.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eMade to Order\u003c\/strong\u003e — this piece is produced just for you. Please see our \u003ca href=\"https:\/\/visionaryfitness.shop\/policies\/shipping-policy\" target=\"_blank\" rel=\"noopener\"\u003eShipping Policy\u003c\/a\u003e for current production \u0026amp; delivery timelines.\u003c\/p\u003e\n\u003c!-- VF-SIZE-GUIDE START --\u003e\n\u003chr\u003e\n\u003ch3\u003eSize guide\u003c\/h3\u003e\n\u003cdiv class=\"vf-size\" data-chart=\"mesh-shorts\" data-name='FEAR AVERAGE  5\" MESH SHORT'\u003e\u003c\/div\u003e\n\u003cscript\u003e\n(function(){\n  if (window.__vfSizeGuide) { window.__vfSizeGuide.scan(); return; }\n\n  \/* ---- shared charts (edit measurements here, in ONE place) ----\n     girth = the column used to recommend a size.\n     flat  = measurement taken laid flat \/ half body, so we double it\n             when matching to a customer's real body measurement.        *\/\n  var CHARTS = {\n    'stringers': {name:'Stringer', fit:'true to size', metric:'chest',\n      cols:['Chest','Length'],\n      rows:[['S',90,68],['M',94,70],['L',98,72],['XL',102,74],['XXL',106,76]]},\n    'defy-blackout-tank': {name:'Defy \/ Blackout Tank', fit:'fitted', metric:'chest',\n      cols:['Chest','Length'],\n      rows:[['XS',76,63],['S',78,65],['M',80,67],['L',85,69],['XL',90,71],['XXL',92,73]]},\n    'core-vantage-tank': {name:'Core \/ Vantage Tank', fit:'fitted', metric:'chest', flat:true,\n      cols:['Chest','Length'],\n      rows:[['XS',47,66],['S',49,68],['M',51,70],['L',53,72],['XL',55,74],['XXL',57,76]]},\n    'oversized-tees': {name:'Oversized Tee', fit:'oversized', metric:'chest',\n      cols:['Chest','Length','Sleeve'],\n      rows:[['XS',108,69,22],['S',112,71,23],['M',116,73,24],['L',120,75,25],['XL',124,77,26],['XXL',126,79,27]]},\n    'muscle-compression-tees': {name:'Muscle \/ Compression Tee', fit:'fitted', metric:'chest',\n      cols:['Chest','Length','Sleeve'],\n      rows:[['XS',80,63,27],['S',84,65,28],['M',88,67,29],['L',92,69,30],['XL',96,71,31],['XXL',100,73,32]]},\n    'longsleeve-compression-tee': {name:'Longsleeve Compression Tee', fit:'fitted', metric:'chest',\n      cols:['Chest','Length','Sleeve'],\n      rows:[['XS',105,70,63],['S',107,72,64],['M',112,74,65],['L',117,76,66],['XL',122,78,67],['XXL',127,80,68]]},\n\n    'legacy-liner-shorts': {name:'Legacy Liner Shorts', fit:'regular', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',70,45,100],['M',74,46,104],['L',78,47,108],['XL',82,48,112],['XXL',86,49,116]]},\n    'vital-running-shorts': {name:'Vital Running Shorts', fit:'regular', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',72,45,101],['M',74,46,104],['L',76,47,108],['XL',78,48,112],['XXL',80,49,116]]},\n    'mesh-shorts': {name:'Mesh Shorts', fit:'athletic \/ true to size', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',71.1,39.4,105.9],['M',74.9,40.6,110],['L',78,41.4,113.8],['XL',81,42.4,117.9],['XXL',85.1,43.4,121.9]]},\n    'stride-vantage-shorts': {name:'Stride \/ Vantage Shorts', fit:'lined', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['XS',71,33,49],['S',74,34.5,51],['M',76,36,53],['L',78,38,55],['XL',83,40,57],['XXL',86,42,59]]},\n    'defy-cotton-shorts': {name:'Defy Cotton Shorts', fit:'regular', metric:'waist',\n      note:'Length \u0026 hip on this chart look swapped from Molly — confirm before going live.',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',72,108,42],['M',76,112,43],['L',80,116,44],['XL',84,122,45.5],['XXL',88,128,47]]},\n    'sweatpants': {name:'Sweatpants', fit:'relaxed', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',66,99,58],['M',69,101,60],['L',72,103,62],['XL',75,105,64],['XXL',78,107,66]]},\n\n    'revival-bra': {name:'Revival Bra', fit:'compression', metric:'bust',\n      cols:['Bust','Length','Hem'],\n      rows:[['S',68,33,56],['M',72,34,60],['L',76,35,64]]},\n    'revival-booty-shorts': {name:'Revival Booty Shorts', fit:'high-waist', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',58,34,72],['M',62,36,76],['L',68,38,80]]},\n    'serenity-leggings': {name:'Serenity Leggings', fit:'high-stretch', metric:'waist', flat:true,\n      note:'High-stretch. Waist \u0026 hip are relaxed (laid-flat) numbers — the fabric expands well past these.',\n      cols:['Waist','Length','Hip'],\n      rows:[['XS',25.5,78,31],['S',28,79,33.5],['M',30.5,80,36],['L',33,81,38.5],['XL',35.5,82,41]]}\n  };\n\n  var CSS = ''\n  + '@import url(\\'https:\/\/fonts.googleapis.com\/css2?family=Archivo:wght@400;500;600;800\u0026display=swap\\');'\n  + '.vf-size{--paper:#0b0b0b;--card:#171717;--ink:#ffffff;--muted:#a1a099;--line:#2a2a28;'\n  + '--line-strong:#3d3d3a;--accent:#5c78ff;--accent-soft:#1b2350;'\n  + \"--font:'Archivo',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;\"\n  + 'font-family:var(--font);color:var(--ink);background:var(--paper);line-height:1.4;'\n  + '-webkit-font-smoothing:antialiased;box-sizing:border-box;max-width:620px;margin:22px auto;'\n  + 'padding:clamp(16px,4vw,28px);border:1px solid var(--line-strong);border-radius:3px;}'\n  + '.vf-size *,.vf-size *::before,.vf-size *::after{box-sizing:border-box;}'\n  + '.vf-size button{font-family:inherit;cursor:pointer;}'\n  + '.vf-hd{display:flex;justify-content:space-between;align-items:flex-start;gap:14px;flex-wrap:wrap;'\n  + 'border-bottom:2px solid var(--ink);padding-bottom:12px;}'\n  + '.vf-ey{font-weight:800;letter-spacing:.14em;font-size:11px;text-transform:uppercase;color:var(--muted);}'\n  + '.vf-ey b{color:var(--accent);}'\n  + '.vf-nm{font-weight:800;font-size:clamp(22px,5vw,30px);line-height:1;letter-spacing:-.01em;margin:3px 0 0;}'\n  + '.vf-fit{font-size:12px;color:var(--muted);border:1px solid var(--line-strong);padding:3px 9px;'\n  + 'border-radius:2px;white-space:nowrap;margin-top:2px;}'\n  + '.vf-units{display:inline-flex;align-items:center;gap:16px;flex-shrink:0;}'\n  + '.vf-u{font-size:12px;font-weight:700;letter-spacing:.1em;color:var(--muted);cursor:pointer;'\n  + 'padding-bottom:3px;border-bottom:2px solid transparent;user-select:none;line-height:1;}'\n  + '.vf-u[aria-pressed=\"true\"]{color:var(--ink);border-bottom-color:var(--accent);}'\n  + '.vf-find{background:var(--card);border:1.5px solid var(--ink);border-radius:3px;padding:16px;margin-top:18px;}'\n  + '.vf-fh{display:flex;justify-content:space-between;align-items:baseline;gap:8px;flex-wrap:wrap;}'\n  + '.vf-ft{font-weight:800;font-size:14px;}'\n  + '.vf-ask{font-size:13px;color:var(--muted);} .vf-ask b{color:var(--ink);font-weight:600;}'\n  + '.vf-ro{display:flex;align-items:flex-end;gap:14px;margin:14px 0 2px;flex-wrap:wrap;}'\n  + '.vf-num{display:flex;align-items:baseline;border:1.5px solid var(--line-strong);border-radius:2px;'\n  + 'background:var(--paper);padding:6px 9px;}'\n  + '.vf-num input{all:unset;width:82px;font-family:inherit;font-weight:800;font-size:23px;color:var(--ink);'\n  + 'font-variant-numeric:tabular-nums;}'\n  + '.vf-num span{font-size:12px;font-weight:600;color:var(--muted);margin-left:2px;}'\n  + '.vf-res{flex:1;min-width:140px;font-size:13px;color:var(--muted);}'\n  + '.vf-big{display:inline-block;background:var(--accent);color:#fff;font-weight:800;font-size:14px;'\n  + 'padding:4px 12px;border-radius:2px;letter-spacing:.03em;}'\n  + '.vf-rn{margin-top:6px;font-size:12px;color:var(--muted);}'\n  + '.vf-ruler{margin-top:12px;}'\n  + '.vf-ticks{position:relative;height:15px;margin:0 8px 2px;}'\n  + '.vf-ticks i{position:absolute;top:0;width:1px;background:var(--line-strong);}'\n  + '.vf-ticks i.maj{height:15px;background:var(--muted);} .vf-ticks i.min{height:7px;}'\n  + '.vf-rg{-webkit-appearance:none;appearance:none;width:100%;height:4px;background:var(--ink);outline:none;margin:2px 0 0;}'\n  + '.vf-rg::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:20px;height:28px;'\n  + 'background:var(--accent);border:2px solid #fff;border-radius:2px;box-shadow:0 1px 3px rgba(0,0,0,.25);}'\n  + '.vf-rg::-moz-range-thumb{width:20px;height:28px;background:var(--accent);border:2px solid #fff;border-radius:2px;}'\n  + '.vf-scale{display:flex;justify-content:space-between;color:var(--muted);font-size:11px;'\n  + 'font-variant-numeric:tabular-nums;margin-top:5px;padding:0 2px;}'\n  + '.vf-tw{margin-top:18px;overflow-x:auto;-webkit-overflow-scrolling:touch;}'\n  + '.vf-tb{width:100%;border-collapse:collapse;font-variant-numeric:tabular-nums;min-width:300px;}'\n  + '.vf-tb th{font-size:10px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);border:0;'\n  + 'text-align:right;padding:0 0 9px;border-bottom:2px solid var(--ink);}'\n  + '.vf-tb th:first-child{text-align:left;}'\n  + '.vf-tb td{font-size:14px;padding:11px 0;border:0;border-bottom:1px solid var(--line);text-align:right;font-weight:500;}'\n  + '.vf-tb td:first-child{text-align:left;font-weight:800;font-size:15px;}'\n  + '.vf-tb tr.on td{background:var(--accent-soft);border-bottom-color:var(--accent);}'\n  + '.vf-tb tr.on td:first-child{color:var(--accent);position:relative;}'\n  + '.vf-tb tr.on td:first-child::before{content:\"\";position:absolute;left:-14px;top:0;bottom:0;width:4px;background:var(--accent);}'\n  + '.vf-cap{font-size:11px;color:var(--muted);margin-top:9px;text-align:right;}'\n  + '.vf-note{font-size:12px;color:var(--muted);margin-top:10px;font-style:italic;}'\n  + '.vf-how{margin-top:16px;border-top:1px solid var(--line);padding-top:14px;}'\n  + '.vf-how summary{font-size:13px;font-weight:600;cursor:pointer;list-style:none;display:flex;align-items:center;gap:8px;}'\n  + '.vf-how summary::-webkit-details-marker{display:none;}'\n  + '.vf-how summary::before{content:\"+\";width:15px;font-weight:800;color:var(--accent);}'\n  + '.vf-how[open] summary::before{content:\"\\\\2013\";}'\n  + '.vf-how ul{margin:11px 0 0;padding:0;list-style:none;font-size:13px;color:var(--muted);}'\n  + '.vf-how li{padding:4px 0 4px 15px;position:relative;} .vf-how li b{color:var(--ink);font-weight:600;}'\n  + '.vf-how li::before{content:\"\";position:absolute;left:0;top:11px;width:6px;height:1px;background:var(--muted);}'\n  + '@media(max-width:560px){'\n  + '.vf-size{padding:16px;}'\n  + '.vf-hd{padding-bottom:11px;}'\n  + '.vf-nm{font-size:21px;}'\n  + '.vf-find{padding:14px;}'\n  + '.vf-fh{gap:4px;}'\n  + '.vf-num input{width:72px;font-size:20px;}'\n  + '.vf-num span{font-size:11px;}'\n  + '.vf-ft{font-size:13px;} .vf-ask{font-size:12px;}'\n  + '.vf-res{min-width:120px;font-size:12px;}'\n  + '.vf-tb{min-width:0;} .vf-tw{overflow-x:visible;}'\n  + '.vf-tb td{font-size:13px;padding:10px 0;} .vf-tb td:first-child{font-size:14px;}'\n  + '.vf-tb th{font-size:9px;letter-spacing:.06em;}'\n  + '.vf-cap{font-size:10px;}'\n  + '.vf-tb tr.on td:first-child::before{left:-10px;width:3px;}'\n  + '}';\n\n  function injectCSS(){\n    if(document.getElementById('vf-size-css'))return;\n    var s=document.createElement('style'); s.id='vf-size-css'; s.textContent=CSS;\n    document.head.appendChild(s);\n  }\n\n  function init(mount){\n    var chart = CHARTS[mount.getAttribute('data-chart')];\n    if(!chart){ mount.innerHTML='\u003cp style=\"font:13px sans-serif;color:#a00\"\u003eSize chart not found.\u003c\/p\u003e'; return; }\n    var name = mount.getAttribute('data-name') || chart.name;\n\n    var unit='in', userCm=null;\n    var toIn=function(cm){return Math.round((cm\/2.54)*10)\/10;};\n    var disp=function(cm){return unit==='in'?toIn(cm):cm;};\n    var eGirth=function(r){return chart.flat?r[1]*2:r[1];};\n\n    mount.innerHTML=''\n      +'\u003cdiv class=\"vf-hd\"\u003e\u003cdiv\u003e'\n      +'\u003cdiv class=\"vf-ey\"\u003eVisionary \u003cb\u003e\/\u003c\/b\u003e size guide\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-nm\"\u003e\u003c\/div\u003e\u003cdiv class=\"vf-fit\"\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-units\" role=\"group\" aria-label=\"Units\"\u003e'\n      +'\u003cspan class=\"vf-u\" data-u=\"in\" role=\"button\" tabindex=\"0\" aria-pressed=\"true\"\u003eIN\u003c\/span\u003e'\n      +'\u003cspan class=\"vf-u\" data-u=\"cm\" role=\"button\" tabindex=\"0\" aria-pressed=\"false\"\u003eCM\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-find\"\u003e\u003cdiv class=\"vf-fh\"\u003e\u003cdiv class=\"vf-ft\"\u003eFind your fit\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-ask\"\u003eEnter your \u003cb class=\"vf-metric\"\u003e\u003c\/b\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-ro\"\u003e\u003cdiv class=\"vf-num\"\u003e\u003cinput class=\"vf-input\" type=\"number\" inputmode=\"decimal\" step=\"0.5\" value=\"0\"\u003e\u003cspan class=\"vf-iu\"\u003ein\u003c\/span\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-res\"\u003eWe recommend \u003cspan class=\"vf-big vf-rec\"\u003e\\u2013\u003c\/span\u003e\u003cdiv class=\"vf-rn\"\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-ruler\"\u003e\u003cdiv class=\"vf-ticks\"\u003e\u003c\/div\u003e'\n      +'\u003cinput class=\"vf-rg\" type=\"range\" step=\"0.5\"\u003e\u003cdiv class=\"vf-scale\"\u003e\u003cspan class=\"vf-mn\"\u003e\u003c\/span\u003e\u003cspan class=\"vf-mx\"\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-tw\"\u003e\u003ctable class=\"vf-tb\"\u003e\u003cthead\u003e\u003ctr class=\"vf-th\"\u003e\u003c\/tr\u003e\u003c\/thead\u003e\u003ctbody class=\"vf-tbd\"\u003e\u003c\/tbody\u003e\u003c\/table\u003e\u003cdiv class=\"vf-cap\"\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-note\"\u003e\u003c\/div\u003e'\n      +'\u003cdetails class=\"vf-how\"\u003e\u003csummary\u003eHow to measure\u003c\/summary\u003e\u003cul\u003e'\n      +'\u003cli\u003e\u003cb\u003eChest \/ bust\u003c\/b\u003e \\u2014 around the fullest part, tape level under the arms, relaxed.\u003c\/li\u003e'\n      +'\u003cli\u003e\u003cb\u003eWaist\u003c\/b\u003e \\u2014 around your natural waistline, roughly at the belly button.\u003c\/li\u003e'\n      +'\u003cli\u003e\u003cb\u003eLength\u003c\/b\u003e \\u2014 from the highest shoulder seam straight down to the hem.\u003c\/li\u003e'\n      +'\u003cli\u003eBetween sizes? Size up for a looser fit, down for a closer one.\u003c\/li\u003e\u003c\/ul\u003e\u003c\/details\u003e';\n\n    var q=function(s){return mount.querySelector(s);};\n    q('.vf-nm').textContent=name;\n    q('.vf-fit').textContent=chart.fit;\n    q('.vf-metric').textContent=chart.metric;\n\n    function recommend(cm){\n      if(cm==null)return null; var best=null,bd=1e9;\n      chart.rows.forEach(function(r){var d=Math.abs(eGirth(r)-cm); if(d\u003cbd){bd=d;best=r[0];}});\n      return best;\n    }\n    function girthRange(){\n      var v=chart.rows.map(eGirth); return [Math.round(Math.min.apply(null,v)-8), Math.round(Math.max.apply(null,v)+8)];\n    }\n    function ticks(mn,mx){\n      var t=q('.vf-ticks'); t.innerHTML=''; var span=mx-mn; if(span\u003c=0)return;\n      var step=unit==='in'?1:2, maj=unit==='in'?5:10;\n      for(var v=Math.ceil(mn); v\u003c=mx; v+=step){\n        var i=document.createElement('i'); i.className=(Math.round(v)%maj===0)?'maj':'min';\n        i.style.left=((v-mn)\/span*100)+'%'; t.appendChild(i);\n      }\n    }\n    function table(){\n      var b=q('.vf-tbd'); b.innerHTML=''; var rec=recommend(userCm);\n      chart.rows.forEach(function(r){\n        var tr=document.createElement('tr'); if(r[0]===rec)tr.className='on';\n        var td0=document.createElement('td'); td0.textContent=r[0]; tr.appendChild(td0);\n        for(var i=1;i\u003cr.length;i++){var td=document.createElement('td'); td.textContent=disp(r[i]); tr.appendChild(td);}\n        b.appendChild(tr);\n      });\n    }\n    function rec(){\n      var s=recommend(userCm); q('.vf-rec').textContent=s||'\\u2013'; var n=q('.vf-rn');\n      if(!s){n.textContent='';return;}\n      var row=chart.rows.filter(function(r){return r[0]===s;})[0], g=eGirth(row), c=userCm-g, m;\n      if(Math.abs(c)\u003c=2)m='Right in range for this piece.';\n      else if(c\u003e0)m='Near the top of this size \\u2014 size up for more room.';\n      else m='Comfortable, with a little room to spare.';\n      n.textContent=m;\n    }\n    function render(){\n      var thr=q('.vf-th'); thr.innerHTML='\u003cth\u003eSize\u003c\/th\u003e';\n      chart.cols.forEach(function(c){var th=document.createElement('th');th.textContent=c;thr.appendChild(th);});\n      var rr=girthRange(), mn=unit==='in'?toIn(rr[0]):rr[0], mx=unit==='in'?toIn(rr[1]):rr[1];\n      var rg=q('.vf-rg'); rg.min=mn; rg.max=mx;\n      q('.vf-mn').textContent=mn+(unit==='in'?'\"':''); q('.vf-mx').textContent=mx+(unit==='in'?'\"':'');\n      q('.vf-iu').textContent=unit==='in'?'in':'cm';\n      if(userCm==null){var mid=chart.rows[Math.floor(chart.rows.length\/2)]; userCm=eGirth(mid);}\n      var ud=disp(userCm); q('.vf-input').value=ud; rg.value=Math.min(mx,Math.max(mn,ud));\n      ticks(mn,mx); table(); rec();\n      q('.vf-cap').textContent='Measurements in '+(unit==='in'?'inches':'centimetres')+'.';\n      q('.vf-note').textContent=chart.note?('* '+chart.note):'';\n    }\n\n    mount.querySelectorAll('.vf-u').forEach(function(bt){\n      var go=function(){ unit=bt.getAttribute('data-u');\n        mount.querySelectorAll('.vf-u').forEach(function(x){x.setAttribute('aria-pressed',x===bt?'true':'false');});\n        render(); };\n      bt.onclick=go;\n      bt.onkeydown=function(e){ if(e.key==='Enter'||e.key===' '){e.preventDefault();go();} };\n    });\n    q('.vf-rg').addEventListener('input',function(){var v=parseFloat(this.value);userCm=unit==='in'?v*2.54:v;q('.vf-input').value=v;table();rec();});\n    q('.vf-input').addEventListener('input',function(){var v=parseFloat(this.value);if(isNaN(v))return;userCm=unit==='in'?v*2.54:v;\n      var rg=q('.vf-rg');rg.value=Math.min(parseFloat(rg.max),Math.max(parseFloat(rg.min),v));table();rec();});\n\n    render(); mount.setAttribute('data-vf-ready','1');\n  }\n\n  function scan(){ injectCSS(); document.querySelectorAll('.vf-size[data-chart]:not([data-vf-ready])').forEach(init); }\n  window.__vfSizeGuide={scan:scan,charts:CHARTS};\n  if(document.readyState==='loading') document.addEventListener('DOMContentLoaded',scan); else scan();\n})();\n\u003c\/script\u003e\n\u003c!-- VF-SIZE-GUIDE END --\u003e","brand":"Visionary Fitness Store","offers":[{"title":"S \/ White","offer_id":47763623969006,"sku":null,"price":35.0,"currency_code":"USD","in_stock":false},{"title":"M \/ White","offer_id":47763624165614,"sku":null,"price":35.0,"currency_code":"USD","in_stock":true},{"title":"L \/ White","offer_id":47763624362222,"sku":null,"price":35.0,"currency_code":"USD","in_stock":true},{"title":"XL \/ White","offer_id":47763624558830,"sku":null,"price":35.0,"currency_code":"USD","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0796\/2578\/1486\/files\/v1_5.png?v=1773265339"},{"product_id":"i-am-5-mesh-short-copy","title":"\"I AM\"  5\" MESH SHORT","description":"\u003cp\u003e\u003cstrong\u003eAbout This Piece\u003c\/strong\u003e\u003c\/p\u003e\n\n\u003cp\u003eBuilt for the ones who show up. Our mesh shorts are constructed from 100% single layer polyester mesh that breathes through every rep, dries fast, and holds its shape session after session. Comfortable enough for everyday wear, clean enough for anywhere.\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e 100% Polyester | 250gsm | Single layer mesh\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Standard | True to size\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eModel:\u003c\/strong\u003e 6'0\" | 200 lbs | Wearing size Large\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eCare:\u003c\/strong\u003e Cold wash only. Hang dry. No high heat. Do not bleach.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eMade to Order\u003c\/strong\u003e — this piece is produced just for you. Please see our \u003ca href=\"https:\/\/visionaryfitness.shop\/policies\/shipping-policy\" target=\"_blank\" rel=\"noopener\"\u003eShipping Policy\u003c\/a\u003e for current production \u0026amp; delivery timelines.\u003c\/p\u003e\n\u003c!-- VF-SIZE-GUIDE START --\u003e\n\u003chr\u003e\n\u003ch3\u003eSize guide\u003c\/h3\u003e\n\u003cdiv class=\"vf-size\" data-chart=\"mesh-shorts\" data-name='\"I AM\"  5\" MESH SHORT'\u003e\u003c\/div\u003e\n\u003cscript\u003e\n(function(){\n  if (window.__vfSizeGuide) { window.__vfSizeGuide.scan(); return; }\n\n  \/* ---- shared charts (edit measurements here, in ONE place) ----\n     girth = the column used to recommend a size.\n     flat  = measurement taken laid flat \/ half body, so we double it\n             when matching to a customer's real body measurement.        *\/\n  var CHARTS = {\n    'stringers': {name:'Stringer', fit:'true to size', metric:'chest',\n      cols:['Chest','Length'],\n      rows:[['S',90,68],['M',94,70],['L',98,72],['XL',102,74],['XXL',106,76]]},\n    'defy-blackout-tank': {name:'Defy \/ Blackout Tank', fit:'fitted', metric:'chest',\n      cols:['Chest','Length'],\n      rows:[['XS',76,63],['S',78,65],['M',80,67],['L',85,69],['XL',90,71],['XXL',92,73]]},\n    'core-vantage-tank': {name:'Core \/ Vantage Tank', fit:'fitted', metric:'chest', flat:true,\n      cols:['Chest','Length'],\n      rows:[['XS',47,66],['S',49,68],['M',51,70],['L',53,72],['XL',55,74],['XXL',57,76]]},\n    'oversized-tees': {name:'Oversized Tee', fit:'oversized', metric:'chest',\n      cols:['Chest','Length','Sleeve'],\n      rows:[['XS',108,69,22],['S',112,71,23],['M',116,73,24],['L',120,75,25],['XL',124,77,26],['XXL',126,79,27]]},\n    'muscle-compression-tees': {name:'Muscle \/ Compression Tee', fit:'fitted', metric:'chest',\n      cols:['Chest','Length','Sleeve'],\n      rows:[['XS',80,63,27],['S',84,65,28],['M',88,67,29],['L',92,69,30],['XL',96,71,31],['XXL',100,73,32]]},\n    'longsleeve-compression-tee': {name:'Longsleeve Compression Tee', fit:'fitted', metric:'chest',\n      cols:['Chest','Length','Sleeve'],\n      rows:[['XS',105,70,63],['S',107,72,64],['M',112,74,65],['L',117,76,66],['XL',122,78,67],['XXL',127,80,68]]},\n\n    'legacy-liner-shorts': {name:'Legacy Liner Shorts', fit:'regular', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',70,45,100],['M',74,46,104],['L',78,47,108],['XL',82,48,112],['XXL',86,49,116]]},\n    'vital-running-shorts': {name:'Vital Running Shorts', fit:'regular', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',72,45,101],['M',74,46,104],['L',76,47,108],['XL',78,48,112],['XXL',80,49,116]]},\n    'mesh-shorts': {name:'Mesh Shorts', fit:'athletic \/ true to size', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',71.1,39.4,105.9],['M',74.9,40.6,110],['L',78,41.4,113.8],['XL',81,42.4,117.9],['XXL',85.1,43.4,121.9]]},\n    'stride-vantage-shorts': {name:'Stride \/ Vantage Shorts', fit:'lined', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['XS',71,33,49],['S',74,34.5,51],['M',76,36,53],['L',78,38,55],['XL',83,40,57],['XXL',86,42,59]]},\n    'defy-cotton-shorts': {name:'Defy Cotton Shorts', fit:'regular', metric:'waist',\n      note:'Length \u0026 hip on this chart look swapped from Molly — confirm before going live.',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',72,108,42],['M',76,112,43],['L',80,116,44],['XL',84,122,45.5],['XXL',88,128,47]]},\n    'sweatpants': {name:'Sweatpants', fit:'relaxed', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',66,99,58],['M',69,101,60],['L',72,103,62],['XL',75,105,64],['XXL',78,107,66]]},\n\n    'revival-bra': {name:'Revival Bra', fit:'compression', metric:'bust',\n      cols:['Bust','Length','Hem'],\n      rows:[['S',68,33,56],['M',72,34,60],['L',76,35,64]]},\n    'revival-booty-shorts': {name:'Revival Booty Shorts', fit:'high-waist', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',58,34,72],['M',62,36,76],['L',68,38,80]]},\n    'serenity-leggings': {name:'Serenity Leggings', fit:'high-stretch', metric:'waist', flat:true,\n      note:'High-stretch. Waist \u0026 hip are relaxed (laid-flat) numbers — the fabric expands well past these.',\n      cols:['Waist','Length','Hip'],\n      rows:[['XS',25.5,78,31],['S',28,79,33.5],['M',30.5,80,36],['L',33,81,38.5],['XL',35.5,82,41]]}\n  };\n\n  var CSS = ''\n  + '@import url(\\'https:\/\/fonts.googleapis.com\/css2?family=Archivo:wght@400;500;600;800\u0026display=swap\\');'\n  + '.vf-size{--paper:#0b0b0b;--card:#171717;--ink:#ffffff;--muted:#a1a099;--line:#2a2a28;'\n  + '--line-strong:#3d3d3a;--accent:#5c78ff;--accent-soft:#1b2350;'\n  + \"--font:'Archivo',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;\"\n  + 'font-family:var(--font);color:var(--ink);background:var(--paper);line-height:1.4;'\n  + '-webkit-font-smoothing:antialiased;box-sizing:border-box;max-width:620px;margin:22px auto;'\n  + 'padding:clamp(16px,4vw,28px);border:1px solid var(--line-strong);border-radius:3px;}'\n  + '.vf-size *,.vf-size *::before,.vf-size *::after{box-sizing:border-box;}'\n  + '.vf-size button{font-family:inherit;cursor:pointer;}'\n  + '.vf-hd{display:flex;justify-content:space-between;align-items:flex-start;gap:14px;flex-wrap:wrap;'\n  + 'border-bottom:2px solid var(--ink);padding-bottom:12px;}'\n  + '.vf-ey{font-weight:800;letter-spacing:.14em;font-size:11px;text-transform:uppercase;color:var(--muted);}'\n  + '.vf-ey b{color:var(--accent);}'\n  + '.vf-nm{font-weight:800;font-size:clamp(22px,5vw,30px);line-height:1;letter-spacing:-.01em;margin:3px 0 0;}'\n  + '.vf-fit{font-size:12px;color:var(--muted);border:1px solid var(--line-strong);padding:3px 9px;'\n  + 'border-radius:2px;white-space:nowrap;margin-top:2px;}'\n  + '.vf-units{display:inline-flex;align-items:center;gap:16px;flex-shrink:0;}'\n  + '.vf-u{font-size:12px;font-weight:700;letter-spacing:.1em;color:var(--muted);cursor:pointer;'\n  + 'padding-bottom:3px;border-bottom:2px solid transparent;user-select:none;line-height:1;}'\n  + '.vf-u[aria-pressed=\"true\"]{color:var(--ink);border-bottom-color:var(--accent);}'\n  + '.vf-find{background:var(--card);border:1.5px solid var(--ink);border-radius:3px;padding:16px;margin-top:18px;}'\n  + '.vf-fh{display:flex;justify-content:space-between;align-items:baseline;gap:8px;flex-wrap:wrap;}'\n  + '.vf-ft{font-weight:800;font-size:14px;}'\n  + '.vf-ask{font-size:13px;color:var(--muted);} .vf-ask b{color:var(--ink);font-weight:600;}'\n  + '.vf-ro{display:flex;align-items:flex-end;gap:14px;margin:14px 0 2px;flex-wrap:wrap;}'\n  + '.vf-num{display:flex;align-items:baseline;border:1.5px solid var(--line-strong);border-radius:2px;'\n  + 'background:var(--paper);padding:6px 9px;}'\n  + '.vf-num input{all:unset;width:82px;font-family:inherit;font-weight:800;font-size:23px;color:var(--ink);'\n  + 'font-variant-numeric:tabular-nums;}'\n  + '.vf-num span{font-size:12px;font-weight:600;color:var(--muted);margin-left:2px;}'\n  + '.vf-res{flex:1;min-width:140px;font-size:13px;color:var(--muted);}'\n  + '.vf-big{display:inline-block;background:var(--accent);color:#fff;font-weight:800;font-size:14px;'\n  + 'padding:4px 12px;border-radius:2px;letter-spacing:.03em;}'\n  + '.vf-rn{margin-top:6px;font-size:12px;color:var(--muted);}'\n  + '.vf-ruler{margin-top:12px;}'\n  + '.vf-ticks{position:relative;height:15px;margin:0 8px 2px;}'\n  + '.vf-ticks i{position:absolute;top:0;width:1px;background:var(--line-strong);}'\n  + '.vf-ticks i.maj{height:15px;background:var(--muted);} .vf-ticks i.min{height:7px;}'\n  + '.vf-rg{-webkit-appearance:none;appearance:none;width:100%;height:4px;background:var(--ink);outline:none;margin:2px 0 0;}'\n  + '.vf-rg::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:20px;height:28px;'\n  + 'background:var(--accent);border:2px solid #fff;border-radius:2px;box-shadow:0 1px 3px rgba(0,0,0,.25);}'\n  + '.vf-rg::-moz-range-thumb{width:20px;height:28px;background:var(--accent);border:2px solid #fff;border-radius:2px;}'\n  + '.vf-scale{display:flex;justify-content:space-between;color:var(--muted);font-size:11px;'\n  + 'font-variant-numeric:tabular-nums;margin-top:5px;padding:0 2px;}'\n  + '.vf-tw{margin-top:18px;overflow-x:auto;-webkit-overflow-scrolling:touch;}'\n  + '.vf-tb{width:100%;border-collapse:collapse;font-variant-numeric:tabular-nums;min-width:300px;}'\n  + '.vf-tb th{font-size:10px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);border:0;'\n  + 'text-align:right;padding:0 0 9px;border-bottom:2px solid var(--ink);}'\n  + '.vf-tb th:first-child{text-align:left;}'\n  + '.vf-tb td{font-size:14px;padding:11px 0;border:0;border-bottom:1px solid var(--line);text-align:right;font-weight:500;}'\n  + '.vf-tb td:first-child{text-align:left;font-weight:800;font-size:15px;}'\n  + '.vf-tb tr.on td{background:var(--accent-soft);border-bottom-color:var(--accent);}'\n  + '.vf-tb tr.on td:first-child{color:var(--accent);position:relative;}'\n  + '.vf-tb tr.on td:first-child::before{content:\"\";position:absolute;left:-14px;top:0;bottom:0;width:4px;background:var(--accent);}'\n  + '.vf-cap{font-size:11px;color:var(--muted);margin-top:9px;text-align:right;}'\n  + '.vf-note{font-size:12px;color:var(--muted);margin-top:10px;font-style:italic;}'\n  + '.vf-how{margin-top:16px;border-top:1px solid var(--line);padding-top:14px;}'\n  + '.vf-how summary{font-size:13px;font-weight:600;cursor:pointer;list-style:none;display:flex;align-items:center;gap:8px;}'\n  + '.vf-how summary::-webkit-details-marker{display:none;}'\n  + '.vf-how summary::before{content:\"+\";width:15px;font-weight:800;color:var(--accent);}'\n  + '.vf-how[open] summary::before{content:\"\\\\2013\";}'\n  + '.vf-how ul{margin:11px 0 0;padding:0;list-style:none;font-size:13px;color:var(--muted);}'\n  + '.vf-how li{padding:4px 0 4px 15px;position:relative;} .vf-how li b{color:var(--ink);font-weight:600;}'\n  + '.vf-how li::before{content:\"\";position:absolute;left:0;top:11px;width:6px;height:1px;background:var(--muted);}'\n  + '@media(max-width:560px){'\n  + '.vf-size{padding:16px;}'\n  + '.vf-hd{padding-bottom:11px;}'\n  + '.vf-nm{font-size:21px;}'\n  + '.vf-find{padding:14px;}'\n  + '.vf-fh{gap:4px;}'\n  + '.vf-num input{width:72px;font-size:20px;}'\n  + '.vf-num span{font-size:11px;}'\n  + '.vf-ft{font-size:13px;} .vf-ask{font-size:12px;}'\n  + '.vf-res{min-width:120px;font-size:12px;}'\n  + '.vf-tb{min-width:0;} .vf-tw{overflow-x:visible;}'\n  + '.vf-tb td{font-size:13px;padding:10px 0;} .vf-tb td:first-child{font-size:14px;}'\n  + '.vf-tb th{font-size:9px;letter-spacing:.06em;}'\n  + '.vf-cap{font-size:10px;}'\n  + '.vf-tb tr.on td:first-child::before{left:-10px;width:3px;}'\n  + '}';\n\n  function injectCSS(){\n    if(document.getElementById('vf-size-css'))return;\n    var s=document.createElement('style'); s.id='vf-size-css'; s.textContent=CSS;\n    document.head.appendChild(s);\n  }\n\n  function init(mount){\n    var chart = CHARTS[mount.getAttribute('data-chart')];\n    if(!chart){ mount.innerHTML='\u003cp style=\"font:13px sans-serif;color:#a00\"\u003eSize chart not found.\u003c\/p\u003e'; return; }\n    var name = mount.getAttribute('data-name') || chart.name;\n\n    var unit='in', userCm=null;\n    var toIn=function(cm){return Math.round((cm\/2.54)*10)\/10;};\n    var disp=function(cm){return unit==='in'?toIn(cm):cm;};\n    var eGirth=function(r){return chart.flat?r[1]*2:r[1];};\n\n    mount.innerHTML=''\n      +'\u003cdiv class=\"vf-hd\"\u003e\u003cdiv\u003e'\n      +'\u003cdiv class=\"vf-ey\"\u003eVisionary \u003cb\u003e\/\u003c\/b\u003e size guide\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-nm\"\u003e\u003c\/div\u003e\u003cdiv class=\"vf-fit\"\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-units\" role=\"group\" aria-label=\"Units\"\u003e'\n      +'\u003cspan class=\"vf-u\" data-u=\"in\" role=\"button\" tabindex=\"0\" aria-pressed=\"true\"\u003eIN\u003c\/span\u003e'\n      +'\u003cspan class=\"vf-u\" data-u=\"cm\" role=\"button\" tabindex=\"0\" aria-pressed=\"false\"\u003eCM\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-find\"\u003e\u003cdiv class=\"vf-fh\"\u003e\u003cdiv class=\"vf-ft\"\u003eFind your fit\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-ask\"\u003eEnter your \u003cb class=\"vf-metric\"\u003e\u003c\/b\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-ro\"\u003e\u003cdiv class=\"vf-num\"\u003e\u003cinput class=\"vf-input\" type=\"number\" inputmode=\"decimal\" step=\"0.5\" value=\"0\"\u003e\u003cspan class=\"vf-iu\"\u003ein\u003c\/span\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-res\"\u003eWe recommend \u003cspan class=\"vf-big vf-rec\"\u003e\\u2013\u003c\/span\u003e\u003cdiv class=\"vf-rn\"\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-ruler\"\u003e\u003cdiv class=\"vf-ticks\"\u003e\u003c\/div\u003e'\n      +'\u003cinput class=\"vf-rg\" type=\"range\" step=\"0.5\"\u003e\u003cdiv class=\"vf-scale\"\u003e\u003cspan class=\"vf-mn\"\u003e\u003c\/span\u003e\u003cspan class=\"vf-mx\"\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-tw\"\u003e\u003ctable class=\"vf-tb\"\u003e\u003cthead\u003e\u003ctr class=\"vf-th\"\u003e\u003c\/tr\u003e\u003c\/thead\u003e\u003ctbody class=\"vf-tbd\"\u003e\u003c\/tbody\u003e\u003c\/table\u003e\u003cdiv class=\"vf-cap\"\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-note\"\u003e\u003c\/div\u003e'\n      +'\u003cdetails class=\"vf-how\"\u003e\u003csummary\u003eHow to measure\u003c\/summary\u003e\u003cul\u003e'\n      +'\u003cli\u003e\u003cb\u003eChest \/ bust\u003c\/b\u003e \\u2014 around the fullest part, tape level under the arms, relaxed.\u003c\/li\u003e'\n      +'\u003cli\u003e\u003cb\u003eWaist\u003c\/b\u003e \\u2014 around your natural waistline, roughly at the belly button.\u003c\/li\u003e'\n      +'\u003cli\u003e\u003cb\u003eLength\u003c\/b\u003e \\u2014 from the highest shoulder seam straight down to the hem.\u003c\/li\u003e'\n      +'\u003cli\u003eBetween sizes? Size up for a looser fit, down for a closer one.\u003c\/li\u003e\u003c\/ul\u003e\u003c\/details\u003e';\n\n    var q=function(s){return mount.querySelector(s);};\n    q('.vf-nm').textContent=name;\n    q('.vf-fit').textContent=chart.fit;\n    q('.vf-metric').textContent=chart.metric;\n\n    function recommend(cm){\n      if(cm==null)return null; var best=null,bd=1e9;\n      chart.rows.forEach(function(r){var d=Math.abs(eGirth(r)-cm); if(d\u003cbd){bd=d;best=r[0];}});\n      return best;\n    }\n    function girthRange(){\n      var v=chart.rows.map(eGirth); return [Math.round(Math.min.apply(null,v)-8), Math.round(Math.max.apply(null,v)+8)];\n    }\n    function ticks(mn,mx){\n      var t=q('.vf-ticks'); t.innerHTML=''; var span=mx-mn; if(span\u003c=0)return;\n      var step=unit==='in'?1:2, maj=unit==='in'?5:10;\n      for(var v=Math.ceil(mn); v\u003c=mx; v+=step){\n        var i=document.createElement('i'); i.className=(Math.round(v)%maj===0)?'maj':'min';\n        i.style.left=((v-mn)\/span*100)+'%'; t.appendChild(i);\n      }\n    }\n    function table(){\n      var b=q('.vf-tbd'); b.innerHTML=''; var rec=recommend(userCm);\n      chart.rows.forEach(function(r){\n        var tr=document.createElement('tr'); if(r[0]===rec)tr.className='on';\n        var td0=document.createElement('td'); td0.textContent=r[0]; tr.appendChild(td0);\n        for(var i=1;i\u003cr.length;i++){var td=document.createElement('td'); td.textContent=disp(r[i]); tr.appendChild(td);}\n        b.appendChild(tr);\n      });\n    }\n    function rec(){\n      var s=recommend(userCm); q('.vf-rec').textContent=s||'\\u2013'; var n=q('.vf-rn');\n      if(!s){n.textContent='';return;}\n      var row=chart.rows.filter(function(r){return r[0]===s;})[0], g=eGirth(row), c=userCm-g, m;\n      if(Math.abs(c)\u003c=2)m='Right in range for this piece.';\n      else if(c\u003e0)m='Near the top of this size \\u2014 size up for more room.';\n      else m='Comfortable, with a little room to spare.';\n      n.textContent=m;\n    }\n    function render(){\n      var thr=q('.vf-th'); thr.innerHTML='\u003cth\u003eSize\u003c\/th\u003e';\n      chart.cols.forEach(function(c){var th=document.createElement('th');th.textContent=c;thr.appendChild(th);});\n      var rr=girthRange(), mn=unit==='in'?toIn(rr[0]):rr[0], mx=unit==='in'?toIn(rr[1]):rr[1];\n      var rg=q('.vf-rg'); rg.min=mn; rg.max=mx;\n      q('.vf-mn').textContent=mn+(unit==='in'?'\"':''); q('.vf-mx').textContent=mx+(unit==='in'?'\"':'');\n      q('.vf-iu').textContent=unit==='in'?'in':'cm';\n      if(userCm==null){var mid=chart.rows[Math.floor(chart.rows.length\/2)]; userCm=eGirth(mid);}\n      var ud=disp(userCm); q('.vf-input').value=ud; rg.value=Math.min(mx,Math.max(mn,ud));\n      ticks(mn,mx); table(); rec();\n      q('.vf-cap').textContent='Measurements in '+(unit==='in'?'inches':'centimetres')+'.';\n      q('.vf-note').textContent=chart.note?('* '+chart.note):'';\n    }\n\n    mount.querySelectorAll('.vf-u').forEach(function(bt){\n      var go=function(){ unit=bt.getAttribute('data-u');\n        mount.querySelectorAll('.vf-u').forEach(function(x){x.setAttribute('aria-pressed',x===bt?'true':'false');});\n        render(); };\n      bt.onclick=go;\n      bt.onkeydown=function(e){ if(e.key==='Enter'||e.key===' '){e.preventDefault();go();} };\n    });\n    q('.vf-rg').addEventListener('input',function(){var v=parseFloat(this.value);userCm=unit==='in'?v*2.54:v;q('.vf-input').value=v;table();rec();});\n    q('.vf-input').addEventListener('input',function(){var v=parseFloat(this.value);if(isNaN(v))return;userCm=unit==='in'?v*2.54:v;\n      var rg=q('.vf-rg');rg.value=Math.min(parseFloat(rg.max),Math.max(parseFloat(rg.min),v));table();rec();});\n\n    render(); mount.setAttribute('data-vf-ready','1');\n  }\n\n  function scan(){ injectCSS(); document.querySelectorAll('.vf-size[data-chart]:not([data-vf-ready])').forEach(init); }\n  window.__vfSizeGuide={scan:scan,charts:CHARTS};\n  if(document.readyState==='loading') document.addEventListener('DOMContentLoaded',scan); else scan();\n})();\n\u003c\/script\u003e\n\u003c!-- VF-SIZE-GUIDE END --\u003e","brand":"Visionary Fitness Store","offers":[{"title":"S \/ White","offer_id":47763625148654,"sku":null,"price":35.0,"currency_code":"USD","in_stock":true},{"title":"M \/ White","offer_id":47763625279726,"sku":null,"price":35.0,"currency_code":"USD","in_stock":false},{"title":"L \/ White","offer_id":47763625410798,"sku":null,"price":35.0,"currency_code":"USD","in_stock":false},{"title":"XL \/ White","offer_id":47763625541870,"sku":null,"price":35.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0796\/2578\/1486\/files\/v1_930636b6-ca52-45b4-be87-71aec6aae260.png?v=1773265339"},{"product_id":"vantage-5-shorts","title":"Vantage 5\" Shorts","description":"\u003cp\u003e\u003cstrong\u003eAbout This Piece\u003c\/strong\u003e\u003c\/p\u003e\n\n\u003cp\u003eThe short that goes the distance. A clean 5\" cut with a locked-in liner and four-way stretch that moves with every stride, sprint, and set. Lightweight enough to disappear on you, built well enough to outlast the season. Warm-up to the walk home.\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e 100% Polyester | Lined | 4-way stretch\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Athletic | 5\" inseam | True to size\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eModel:\u003c\/strong\u003e 6'0\" | 200 lbs | Wearing size Large\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eCare:\u003c\/strong\u003e Cold wash only. Hang dry. No high heat. Do not bleach.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eMade to Order\u003c\/strong\u003e — this piece is produced just for you. Please see our \u003ca href=\"https:\/\/visionaryfitness.shop\/policies\/shipping-policy\" target=\"_blank\" rel=\"noopener\"\u003eShipping Policy\u003c\/a\u003e for current production \u0026amp; delivery timelines.\u003c\/p\u003e\n\u003c!-- VF-SIZE-GUIDE START --\u003e\n\u003chr\u003e\n\u003ch3\u003eSize guide\u003c\/h3\u003e\n\u003cdiv class=\"vf-size\" data-chart=\"stride-vantage-shorts\" data-name='Vantage 5\" Shorts'\u003e\u003c\/div\u003e\n\u003cscript\u003e\n(function(){\n  if (window.__vfSizeGuide) { window.__vfSizeGuide.scan(); return; }\n\n  \/* ---- shared charts (edit measurements here, in ONE place) ----\n     girth = the column used to recommend a size.\n     flat  = measurement taken laid flat \/ half body, so we double it\n             when matching to a customer's real body measurement.        *\/\n  var CHARTS = {\n    'stringers': {name:'Stringer', fit:'true to size', metric:'chest',\n      cols:['Chest','Length'],\n      rows:[['S',90,68],['M',94,70],['L',98,72],['XL',102,74],['XXL',106,76]]},\n    'defy-blackout-tank': {name:'Defy \/ Blackout Tank', fit:'fitted', metric:'chest',\n      cols:['Chest','Length'],\n      rows:[['XS',76,63],['S',78,65],['M',80,67],['L',85,69],['XL',90,71],['XXL',92,73]]},\n    'core-vantage-tank': {name:'Core \/ Vantage Tank', fit:'fitted', metric:'chest', flat:true,\n      cols:['Chest','Length'],\n      rows:[['XS',47,66],['S',49,68],['M',51,70],['L',53,72],['XL',55,74],['XXL',57,76]]},\n    'oversized-tees': {name:'Oversized Tee', fit:'oversized', metric:'chest',\n      cols:['Chest','Length','Sleeve'],\n      rows:[['XS',108,69,22],['S',112,71,23],['M',116,73,24],['L',120,75,25],['XL',124,77,26],['XXL',126,79,27]]},\n    'muscle-compression-tees': {name:'Muscle \/ Compression Tee', fit:'fitted', metric:'chest',\n      cols:['Chest','Length','Sleeve'],\n      rows:[['XS',80,63,27],['S',84,65,28],['M',88,67,29],['L',92,69,30],['XL',96,71,31],['XXL',100,73,32]]},\n    'longsleeve-compression-tee': {name:'Longsleeve Compression Tee', fit:'fitted', metric:'chest',\n      cols:['Chest','Length','Sleeve'],\n      rows:[['XS',105,70,63],['S',107,72,64],['M',112,74,65],['L',117,76,66],['XL',122,78,67],['XXL',127,80,68]]},\n\n    'legacy-liner-shorts': {name:'Legacy Liner Shorts', fit:'regular', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',70,45,100],['M',74,46,104],['L',78,47,108],['XL',82,48,112],['XXL',86,49,116]]},\n    'vital-running-shorts': {name:'Vital Running Shorts', fit:'regular', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',72,45,101],['M',74,46,104],['L',76,47,108],['XL',78,48,112],['XXL',80,49,116]]},\n    'mesh-shorts': {name:'Mesh Shorts', fit:'athletic \/ true to size', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',71.1,39.4,105.9],['M',74.9,40.6,110],['L',78,41.4,113.8],['XL',81,42.4,117.9],['XXL',85.1,43.4,121.9]]},\n    'stride-vantage-shorts': {name:'Stride \/ Vantage Shorts', fit:'lined', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['XS',71,33,49],['S',74,34.5,51],['M',76,36,53],['L',78,38,55],['XL',83,40,57],['XXL',86,42,59]]},\n    'defy-cotton-shorts': {name:'Defy Cotton Shorts', fit:'regular', metric:'waist',\n      note:'Length \u0026 hip on this chart look swapped from Molly — confirm before going live.',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',72,108,42],['M',76,112,43],['L',80,116,44],['XL',84,122,45.5],['XXL',88,128,47]]},\n    'sweatpants': {name:'Sweatpants', fit:'relaxed', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',66,99,58],['M',69,101,60],['L',72,103,62],['XL',75,105,64],['XXL',78,107,66]]},\n\n    'revival-bra': {name:'Revival Bra', fit:'compression', metric:'bust',\n      cols:['Bust','Length','Hem'],\n      rows:[['S',68,33,56],['M',72,34,60],['L',76,35,64]]},\n    'revival-booty-shorts': {name:'Revival Booty Shorts', fit:'high-waist', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',58,34,72],['M',62,36,76],['L',68,38,80]]},\n    'serenity-leggings': {name:'Serenity Leggings', fit:'high-stretch', metric:'waist', flat:true,\n      note:'High-stretch. Waist \u0026 hip are relaxed (laid-flat) numbers — the fabric expands well past these.',\n      cols:['Waist','Length','Hip'],\n      rows:[['XS',25.5,78,31],['S',28,79,33.5],['M',30.5,80,36],['L',33,81,38.5],['XL',35.5,82,41]]}\n  };\n\n  var CSS = ''\n  + '@import url(\\'https:\/\/fonts.googleapis.com\/css2?family=Archivo:wght@400;500;600;800\u0026display=swap\\');'\n  + '.vf-size{--paper:#0b0b0b;--card:#171717;--ink:#ffffff;--muted:#a1a099;--line:#2a2a28;'\n  + '--line-strong:#3d3d3a;--accent:#5c78ff;--accent-soft:#1b2350;'\n  + \"--font:'Archivo',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;\"\n  + 'font-family:var(--font);color:var(--ink);background:var(--paper);line-height:1.4;'\n  + '-webkit-font-smoothing:antialiased;box-sizing:border-box;max-width:620px;margin:22px auto;'\n  + 'padding:clamp(16px,4vw,28px);border:1px solid var(--line-strong);border-radius:3px;}'\n  + '.vf-size *,.vf-size *::before,.vf-size *::after{box-sizing:border-box;}'\n  + '.vf-size button{font-family:inherit;cursor:pointer;}'\n  + '.vf-hd{display:flex;justify-content:space-between;align-items:flex-start;gap:14px;flex-wrap:wrap;'\n  + 'border-bottom:2px solid var(--ink);padding-bottom:12px;}'\n  + '.vf-ey{font-weight:800;letter-spacing:.14em;font-size:11px;text-transform:uppercase;color:var(--muted);}'\n  + '.vf-ey b{color:var(--accent);}'\n  + '.vf-nm{font-weight:800;font-size:clamp(22px,5vw,30px);line-height:1;letter-spacing:-.01em;margin:3px 0 0;}'\n  + '.vf-fit{font-size:12px;color:var(--muted);border:1px solid var(--line-strong);padding:3px 9px;'\n  + 'border-radius:2px;white-space:nowrap;margin-top:2px;}'\n  + '.vf-units{display:inline-flex;align-items:center;gap:16px;flex-shrink:0;}'\n  + '.vf-u{font-size:12px;font-weight:700;letter-spacing:.1em;color:var(--muted);cursor:pointer;'\n  + 'padding-bottom:3px;border-bottom:2px solid transparent;user-select:none;line-height:1;}'\n  + '.vf-u[aria-pressed=\"true\"]{color:var(--ink);border-bottom-color:var(--accent);}'\n  + '.vf-find{background:var(--card);border:1.5px solid var(--ink);border-radius:3px;padding:16px;margin-top:18px;}'\n  + '.vf-fh{display:flex;justify-content:space-between;align-items:baseline;gap:8px;flex-wrap:wrap;}'\n  + '.vf-ft{font-weight:800;font-size:14px;}'\n  + '.vf-ask{font-size:13px;color:var(--muted);} .vf-ask b{color:var(--ink);font-weight:600;}'\n  + '.vf-ro{display:flex;align-items:flex-end;gap:14px;margin:14px 0 2px;flex-wrap:wrap;}'\n  + '.vf-num{display:flex;align-items:baseline;border:1.5px solid var(--line-strong);border-radius:2px;'\n  + 'background:var(--paper);padding:6px 9px;}'\n  + '.vf-num input{all:unset;width:82px;font-family:inherit;font-weight:800;font-size:23px;color:var(--ink);'\n  + 'font-variant-numeric:tabular-nums;}'\n  + '.vf-num span{font-size:12px;font-weight:600;color:var(--muted);margin-left:2px;}'\n  + '.vf-res{flex:1;min-width:140px;font-size:13px;color:var(--muted);}'\n  + '.vf-big{display:inline-block;background:var(--accent);color:#fff;font-weight:800;font-size:14px;'\n  + 'padding:4px 12px;border-radius:2px;letter-spacing:.03em;}'\n  + '.vf-rn{margin-top:6px;font-size:12px;color:var(--muted);}'\n  + '.vf-ruler{margin-top:12px;}'\n  + '.vf-ticks{position:relative;height:15px;margin:0 8px 2px;}'\n  + '.vf-ticks i{position:absolute;top:0;width:1px;background:var(--line-strong);}'\n  + '.vf-ticks i.maj{height:15px;background:var(--muted);} .vf-ticks i.min{height:7px;}'\n  + '.vf-rg{-webkit-appearance:none;appearance:none;width:100%;height:4px;background:var(--ink);outline:none;margin:2px 0 0;}'\n  + '.vf-rg::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:20px;height:28px;'\n  + 'background:var(--accent);border:2px solid #fff;border-radius:2px;box-shadow:0 1px 3px rgba(0,0,0,.25);}'\n  + '.vf-rg::-moz-range-thumb{width:20px;height:28px;background:var(--accent);border:2px solid #fff;border-radius:2px;}'\n  + '.vf-scale{display:flex;justify-content:space-between;color:var(--muted);font-size:11px;'\n  + 'font-variant-numeric:tabular-nums;margin-top:5px;padding:0 2px;}'\n  + '.vf-tw{margin-top:18px;overflow-x:auto;-webkit-overflow-scrolling:touch;}'\n  + '.vf-tb{width:100%;border-collapse:collapse;font-variant-numeric:tabular-nums;min-width:300px;}'\n  + '.vf-tb th{font-size:10px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);border:0;'\n  + 'text-align:right;padding:0 0 9px;border-bottom:2px solid var(--ink);}'\n  + '.vf-tb th:first-child{text-align:left;}'\n  + '.vf-tb td{font-size:14px;padding:11px 0;border:0;border-bottom:1px solid var(--line);text-align:right;font-weight:500;}'\n  + '.vf-tb td:first-child{text-align:left;font-weight:800;font-size:15px;}'\n  + '.vf-tb tr.on td{background:var(--accent-soft);border-bottom-color:var(--accent);}'\n  + '.vf-tb tr.on td:first-child{color:var(--accent);position:relative;}'\n  + '.vf-tb tr.on td:first-child::before{content:\"\";position:absolute;left:-14px;top:0;bottom:0;width:4px;background:var(--accent);}'\n  + '.vf-cap{font-size:11px;color:var(--muted);margin-top:9px;text-align:right;}'\n  + '.vf-note{font-size:12px;color:var(--muted);margin-top:10px;font-style:italic;}'\n  + '.vf-how{margin-top:16px;border-top:1px solid var(--line);padding-top:14px;}'\n  + '.vf-how summary{font-size:13px;font-weight:600;cursor:pointer;list-style:none;display:flex;align-items:center;gap:8px;}'\n  + '.vf-how summary::-webkit-details-marker{display:none;}'\n  + '.vf-how summary::before{content:\"+\";width:15px;font-weight:800;color:var(--accent);}'\n  + '.vf-how[open] summary::before{content:\"\\\\2013\";}'\n  + '.vf-how ul{margin:11px 0 0;padding:0;list-style:none;font-size:13px;color:var(--muted);}'\n  + '.vf-how li{padding:4px 0 4px 15px;position:relative;} .vf-how li b{color:var(--ink);font-weight:600;}'\n  + '.vf-how li::before{content:\"\";position:absolute;left:0;top:11px;width:6px;height:1px;background:var(--muted);}'\n  + '@media(max-width:560px){'\n  + '.vf-size{padding:16px;}'\n  + '.vf-hd{padding-bottom:11px;}'\n  + '.vf-nm{font-size:21px;}'\n  + '.vf-find{padding:14px;}'\n  + '.vf-fh{gap:4px;}'\n  + '.vf-num input{width:72px;font-size:20px;}'\n  + '.vf-num span{font-size:11px;}'\n  + '.vf-ft{font-size:13px;} .vf-ask{font-size:12px;}'\n  + '.vf-res{min-width:120px;font-size:12px;}'\n  + '.vf-tb{min-width:0;} .vf-tw{overflow-x:visible;}'\n  + '.vf-tb td{font-size:13px;padding:10px 0;} .vf-tb td:first-child{font-size:14px;}'\n  + '.vf-tb th{font-size:9px;letter-spacing:.06em;}'\n  + '.vf-cap{font-size:10px;}'\n  + '.vf-tb tr.on td:first-child::before{left:-10px;width:3px;}'\n  + '}';\n\n  function injectCSS(){\n    if(document.getElementById('vf-size-css'))return;\n    var s=document.createElement('style'); s.id='vf-size-css'; s.textContent=CSS;\n    document.head.appendChild(s);\n  }\n\n  function init(mount){\n    var chart = CHARTS[mount.getAttribute('data-chart')];\n    if(!chart){ mount.innerHTML='\u003cp style=\"font:13px sans-serif;color:#a00\"\u003eSize chart not found.\u003c\/p\u003e'; return; }\n    var name = mount.getAttribute('data-name') || chart.name;\n\n    var unit='in', userCm=null;\n    var toIn=function(cm){return Math.round((cm\/2.54)*10)\/10;};\n    var disp=function(cm){return unit==='in'?toIn(cm):cm;};\n    var eGirth=function(r){return chart.flat?r[1]*2:r[1];};\n\n    mount.innerHTML=''\n      +'\u003cdiv class=\"vf-hd\"\u003e\u003cdiv\u003e'\n      +'\u003cdiv class=\"vf-ey\"\u003eVisionary \u003cb\u003e\/\u003c\/b\u003e size guide\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-nm\"\u003e\u003c\/div\u003e\u003cdiv class=\"vf-fit\"\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-units\" role=\"group\" aria-label=\"Units\"\u003e'\n      +'\u003cspan class=\"vf-u\" data-u=\"in\" role=\"button\" tabindex=\"0\" aria-pressed=\"true\"\u003eIN\u003c\/span\u003e'\n      +'\u003cspan class=\"vf-u\" data-u=\"cm\" role=\"button\" tabindex=\"0\" aria-pressed=\"false\"\u003eCM\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-find\"\u003e\u003cdiv class=\"vf-fh\"\u003e\u003cdiv class=\"vf-ft\"\u003eFind your fit\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-ask\"\u003eEnter your \u003cb class=\"vf-metric\"\u003e\u003c\/b\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-ro\"\u003e\u003cdiv class=\"vf-num\"\u003e\u003cinput class=\"vf-input\" type=\"number\" inputmode=\"decimal\" step=\"0.5\" value=\"0\"\u003e\u003cspan class=\"vf-iu\"\u003ein\u003c\/span\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-res\"\u003eWe recommend \u003cspan class=\"vf-big vf-rec\"\u003e\\u2013\u003c\/span\u003e\u003cdiv class=\"vf-rn\"\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-ruler\"\u003e\u003cdiv class=\"vf-ticks\"\u003e\u003c\/div\u003e'\n      +'\u003cinput class=\"vf-rg\" type=\"range\" step=\"0.5\"\u003e\u003cdiv class=\"vf-scale\"\u003e\u003cspan class=\"vf-mn\"\u003e\u003c\/span\u003e\u003cspan class=\"vf-mx\"\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-tw\"\u003e\u003ctable class=\"vf-tb\"\u003e\u003cthead\u003e\u003ctr class=\"vf-th\"\u003e\u003c\/tr\u003e\u003c\/thead\u003e\u003ctbody class=\"vf-tbd\"\u003e\u003c\/tbody\u003e\u003c\/table\u003e\u003cdiv class=\"vf-cap\"\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-note\"\u003e\u003c\/div\u003e'\n      +'\u003cdetails class=\"vf-how\"\u003e\u003csummary\u003eHow to measure\u003c\/summary\u003e\u003cul\u003e'\n      +'\u003cli\u003e\u003cb\u003eChest \/ bust\u003c\/b\u003e \\u2014 around the fullest part, tape level under the arms, relaxed.\u003c\/li\u003e'\n      +'\u003cli\u003e\u003cb\u003eWaist\u003c\/b\u003e \\u2014 around your natural waistline, roughly at the belly button.\u003c\/li\u003e'\n      +'\u003cli\u003e\u003cb\u003eLength\u003c\/b\u003e \\u2014 from the highest shoulder seam straight down to the hem.\u003c\/li\u003e'\n      +'\u003cli\u003eBetween sizes? Size up for a looser fit, down for a closer one.\u003c\/li\u003e\u003c\/ul\u003e\u003c\/details\u003e';\n\n    var q=function(s){return mount.querySelector(s);};\n    q('.vf-nm').textContent=name;\n    q('.vf-fit').textContent=chart.fit;\n    q('.vf-metric').textContent=chart.metric;\n\n    function recommend(cm){\n      if(cm==null)return null; var best=null,bd=1e9;\n      chart.rows.forEach(function(r){var d=Math.abs(eGirth(r)-cm); if(d\u003cbd){bd=d;best=r[0];}});\n      return best;\n    }\n    function girthRange(){\n      var v=chart.rows.map(eGirth); return [Math.round(Math.min.apply(null,v)-8), Math.round(Math.max.apply(null,v)+8)];\n    }\n    function ticks(mn,mx){\n      var t=q('.vf-ticks'); t.innerHTML=''; var span=mx-mn; if(span\u003c=0)return;\n      var step=unit==='in'?1:2, maj=unit==='in'?5:10;\n      for(var v=Math.ceil(mn); v\u003c=mx; v+=step){\n        var i=document.createElement('i'); i.className=(Math.round(v)%maj===0)?'maj':'min';\n        i.style.left=((v-mn)\/span*100)+'%'; t.appendChild(i);\n      }\n    }\n    function table(){\n      var b=q('.vf-tbd'); b.innerHTML=''; var rec=recommend(userCm);\n      chart.rows.forEach(function(r){\n        var tr=document.createElement('tr'); if(r[0]===rec)tr.className='on';\n        var td0=document.createElement('td'); td0.textContent=r[0]; tr.appendChild(td0);\n        for(var i=1;i\u003cr.length;i++){var td=document.createElement('td'); td.textContent=disp(r[i]); tr.appendChild(td);}\n        b.appendChild(tr);\n      });\n    }\n    function rec(){\n      var s=recommend(userCm); q('.vf-rec').textContent=s||'\\u2013'; var n=q('.vf-rn');\n      if(!s){n.textContent='';return;}\n      var row=chart.rows.filter(function(r){return r[0]===s;})[0], g=eGirth(row), c=userCm-g, m;\n      if(Math.abs(c)\u003c=2)m='Right in range for this piece.';\n      else if(c\u003e0)m='Near the top of this size \\u2014 size up for more room.';\n      else m='Comfortable, with a little room to spare.';\n      n.textContent=m;\n    }\n    function render(){\n      var thr=q('.vf-th'); thr.innerHTML='\u003cth\u003eSize\u003c\/th\u003e';\n      chart.cols.forEach(function(c){var th=document.createElement('th');th.textContent=c;thr.appendChild(th);});\n      var rr=girthRange(), mn=unit==='in'?toIn(rr[0]):rr[0], mx=unit==='in'?toIn(rr[1]):rr[1];\n      var rg=q('.vf-rg'); rg.min=mn; rg.max=mx;\n      q('.vf-mn').textContent=mn+(unit==='in'?'\"':''); q('.vf-mx').textContent=mx+(unit==='in'?'\"':'');\n      q('.vf-iu').textContent=unit==='in'?'in':'cm';\n      if(userCm==null){var mid=chart.rows[Math.floor(chart.rows.length\/2)]; userCm=eGirth(mid);}\n      var ud=disp(userCm); q('.vf-input').value=ud; rg.value=Math.min(mx,Math.max(mn,ud));\n      ticks(mn,mx); table(); rec();\n      q('.vf-cap').textContent='Measurements in '+(unit==='in'?'inches':'centimetres')+'.';\n      q('.vf-note').textContent=chart.note?('* '+chart.note):'';\n    }\n\n    mount.querySelectorAll('.vf-u').forEach(function(bt){\n      var go=function(){ unit=bt.getAttribute('data-u');\n        mount.querySelectorAll('.vf-u').forEach(function(x){x.setAttribute('aria-pressed',x===bt?'true':'false');});\n        render(); };\n      bt.onclick=go;\n      bt.onkeydown=function(e){ if(e.key==='Enter'||e.key===' '){e.preventDefault();go();} };\n    });\n    q('.vf-rg').addEventListener('input',function(){var v=parseFloat(this.value);userCm=unit==='in'?v*2.54:v;q('.vf-input').value=v;table();rec();});\n    q('.vf-input').addEventListener('input',function(){var v=parseFloat(this.value);if(isNaN(v))return;userCm=unit==='in'?v*2.54:v;\n      var rg=q('.vf-rg');rg.value=Math.min(parseFloat(rg.max),Math.max(parseFloat(rg.min),v));table();rec();});\n\n    render(); mount.setAttribute('data-vf-ready','1');\n  }\n\n  function scan(){ injectCSS(); document.querySelectorAll('.vf-size[data-chart]:not([data-vf-ready])').forEach(init); }\n  window.__vfSizeGuide={scan:scan,charts:CHARTS};\n  if(document.readyState==='loading') document.addEventListener('DOMContentLoaded',scan); else scan();\n})();\n\u003c\/script\u003e\n\u003c!-- VF-SIZE-GUIDE END --\u003e","brand":"Visionary Fitness","offers":[{"title":"S \/ Black","offer_id":49394975539438,"sku":"VF-VTG-SHT-BLK-S","price":40.0,"currency_code":"USD","in_stock":true},{"title":"M \/ Black","offer_id":49394975637742,"sku":"VF-VTG-SHT-BLK-M","price":40.0,"currency_code":"USD","in_stock":true},{"title":"L \/ Black","offer_id":49394975736046,"sku":"VF-VTG-SHT-BLK-L","price":40.0,"currency_code":"USD","in_stock":true},{"title":"XL \/ Black","offer_id":49394975834350,"sku":"VF-VTG-SHT-BLK-XL","price":40.0,"currency_code":"USD","in_stock":true},{"title":"XXL \/ Black","offer_id":49394975932654,"sku":"VF-VTG-SHT-BLK-2XL","price":40.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0796\/2578\/1486\/files\/Vantage_5__Shorts_Purple_Front.png?v=1786398027"},{"product_id":"stride-5-shorts","title":"Stride 5\" Shorts","description":"\u003cp\u003e\u003cstrong\u003eAbout This Piece\u003c\/strong\u003e\u003c\/p\u003e\n\n\u003cp\u003eYour everyday 5\". Lightweight, breathable, and cut for full range through every step. The pair you reach for on repeat because it just works. Built for training, made for the rest of the day too.\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e 100% Polyester | Lined | Lightweight\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Athletic | 5\" inseam | True to size\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eModel:\u003c\/strong\u003e 6'0\" | 200 lbs | Wearing size Large\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eCare:\u003c\/strong\u003e Cold wash only. Hang dry. No high heat. Do not bleach.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eMade to Order\u003c\/strong\u003e — this piece is produced just for you. Please see our \u003ca href=\"https:\/\/visionaryfitness.shop\/policies\/shipping-policy\" target=\"_blank\" rel=\"noopener\"\u003eShipping Policy\u003c\/a\u003e for current production \u0026amp; delivery timelines.\u003c\/p\u003e\n\u003c!-- VF-SIZE-GUIDE START --\u003e\n\u003chr\u003e\n\u003ch3\u003eSize guide\u003c\/h3\u003e\n\u003cdiv class=\"vf-size\" data-chart=\"stride-vantage-shorts\" data-name='Stride 5\" Shorts'\u003e\u003c\/div\u003e\n\u003cscript\u003e\n(function(){\n  if (window.__vfSizeGuide) { window.__vfSizeGuide.scan(); return; }\n\n  \/* ---- shared charts (edit measurements here, in ONE place) ----\n     girth = the column used to recommend a size.\n     flat  = measurement taken laid flat \/ half body, so we double it\n             when matching to a customer's real body measurement.        *\/\n  var CHARTS = {\n    'stringers': {name:'Stringer', fit:'true to size', metric:'chest',\n      cols:['Chest','Length'],\n      rows:[['S',90,68],['M',94,70],['L',98,72],['XL',102,74],['XXL',106,76]]},\n    'defy-blackout-tank': {name:'Defy \/ Blackout Tank', fit:'fitted', metric:'chest',\n      cols:['Chest','Length'],\n      rows:[['XS',76,63],['S',78,65],['M',80,67],['L',85,69],['XL',90,71],['XXL',92,73]]},\n    'core-vantage-tank': {name:'Core \/ Vantage Tank', fit:'fitted', metric:'chest', flat:true,\n      cols:['Chest','Length'],\n      rows:[['XS',47,66],['S',49,68],['M',51,70],['L',53,72],['XL',55,74],['XXL',57,76]]},\n    'oversized-tees': {name:'Oversized Tee', fit:'oversized', metric:'chest',\n      cols:['Chest','Length','Sleeve'],\n      rows:[['XS',108,69,22],['S',112,71,23],['M',116,73,24],['L',120,75,25],['XL',124,77,26],['XXL',126,79,27]]},\n    'muscle-compression-tees': {name:'Muscle \/ Compression Tee', fit:'fitted', metric:'chest',\n      cols:['Chest','Length','Sleeve'],\n      rows:[['XS',80,63,27],['S',84,65,28],['M',88,67,29],['L',92,69,30],['XL',96,71,31],['XXL',100,73,32]]},\n    'longsleeve-compression-tee': {name:'Longsleeve Compression Tee', fit:'fitted', metric:'chest',\n      cols:['Chest','Length','Sleeve'],\n      rows:[['XS',105,70,63],['S',107,72,64],['M',112,74,65],['L',117,76,66],['XL',122,78,67],['XXL',127,80,68]]},\n\n    'legacy-liner-shorts': {name:'Legacy Liner Shorts', fit:'regular', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',70,45,100],['M',74,46,104],['L',78,47,108],['XL',82,48,112],['XXL',86,49,116]]},\n    'vital-running-shorts': {name:'Vital Running Shorts', fit:'regular', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',72,45,101],['M',74,46,104],['L',76,47,108],['XL',78,48,112],['XXL',80,49,116]]},\n    'mesh-shorts': {name:'Mesh Shorts', fit:'athletic \/ true to size', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',71.1,39.4,105.9],['M',74.9,40.6,110],['L',78,41.4,113.8],['XL',81,42.4,117.9],['XXL',85.1,43.4,121.9]]},\n    'stride-vantage-shorts': {name:'Stride \/ Vantage Shorts', fit:'lined', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['XS',71,33,49],['S',74,34.5,51],['M',76,36,53],['L',78,38,55],['XL',83,40,57],['XXL',86,42,59]]},\n    'defy-cotton-shorts': {name:'Defy Cotton Shorts', fit:'regular', metric:'waist',\n      note:'Length \u0026 hip on this chart look swapped from Molly — confirm before going live.',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',72,108,42],['M',76,112,43],['L',80,116,44],['XL',84,122,45.5],['XXL',88,128,47]]},\n    'sweatpants': {name:'Sweatpants', fit:'relaxed', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',66,99,58],['M',69,101,60],['L',72,103,62],['XL',75,105,64],['XXL',78,107,66]]},\n\n    'revival-bra': {name:'Revival Bra', fit:'compression', metric:'bust',\n      cols:['Bust','Length','Hem'],\n      rows:[['S',68,33,56],['M',72,34,60],['L',76,35,64]]},\n    'revival-booty-shorts': {name:'Revival Booty Shorts', fit:'high-waist', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',58,34,72],['M',62,36,76],['L',68,38,80]]},\n    'serenity-leggings': {name:'Serenity Leggings', fit:'high-stretch', metric:'waist', flat:true,\n      note:'High-stretch. Waist \u0026 hip are relaxed (laid-flat) numbers — the fabric expands well past these.',\n      cols:['Waist','Length','Hip'],\n      rows:[['XS',25.5,78,31],['S',28,79,33.5],['M',30.5,80,36],['L',33,81,38.5],['XL',35.5,82,41]]}\n  };\n\n  var CSS = ''\n  + '@import url(\\'https:\/\/fonts.googleapis.com\/css2?family=Archivo:wght@400;500;600;800\u0026display=swap\\');'\n  + '.vf-size{--paper:#0b0b0b;--card:#171717;--ink:#ffffff;--muted:#a1a099;--line:#2a2a28;'\n  + '--line-strong:#3d3d3a;--accent:#5c78ff;--accent-soft:#1b2350;'\n  + \"--font:'Archivo',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;\"\n  + 'font-family:var(--font);color:var(--ink);background:var(--paper);line-height:1.4;'\n  + '-webkit-font-smoothing:antialiased;box-sizing:border-box;max-width:620px;margin:22px auto;'\n  + 'padding:clamp(16px,4vw,28px);border:1px solid var(--line-strong);border-radius:3px;}'\n  + '.vf-size *,.vf-size *::before,.vf-size *::after{box-sizing:border-box;}'\n  + '.vf-size button{font-family:inherit;cursor:pointer;}'\n  + '.vf-hd{display:flex;justify-content:space-between;align-items:flex-start;gap:14px;flex-wrap:wrap;'\n  + 'border-bottom:2px solid var(--ink);padding-bottom:12px;}'\n  + '.vf-ey{font-weight:800;letter-spacing:.14em;font-size:11px;text-transform:uppercase;color:var(--muted);}'\n  + '.vf-ey b{color:var(--accent);}'\n  + '.vf-nm{font-weight:800;font-size:clamp(22px,5vw,30px);line-height:1;letter-spacing:-.01em;margin:3px 0 0;}'\n  + '.vf-fit{font-size:12px;color:var(--muted);border:1px solid var(--line-strong);padding:3px 9px;'\n  + 'border-radius:2px;white-space:nowrap;margin-top:2px;}'\n  + '.vf-units{display:inline-flex;align-items:center;gap:16px;flex-shrink:0;}'\n  + '.vf-u{font-size:12px;font-weight:700;letter-spacing:.1em;color:var(--muted);cursor:pointer;'\n  + 'padding-bottom:3px;border-bottom:2px solid transparent;user-select:none;line-height:1;}'\n  + '.vf-u[aria-pressed=\"true\"]{color:var(--ink);border-bottom-color:var(--accent);}'\n  + '.vf-find{background:var(--card);border:1.5px solid var(--ink);border-radius:3px;padding:16px;margin-top:18px;}'\n  + '.vf-fh{display:flex;justify-content:space-between;align-items:baseline;gap:8px;flex-wrap:wrap;}'\n  + '.vf-ft{font-weight:800;font-size:14px;}'\n  + '.vf-ask{font-size:13px;color:var(--muted);} .vf-ask b{color:var(--ink);font-weight:600;}'\n  + '.vf-ro{display:flex;align-items:flex-end;gap:14px;margin:14px 0 2px;flex-wrap:wrap;}'\n  + '.vf-num{display:flex;align-items:baseline;border:1.5px solid var(--line-strong);border-radius:2px;'\n  + 'background:var(--paper);padding:6px 9px;}'\n  + '.vf-num input{all:unset;width:82px;font-family:inherit;font-weight:800;font-size:23px;color:var(--ink);'\n  + 'font-variant-numeric:tabular-nums;}'\n  + '.vf-num span{font-size:12px;font-weight:600;color:var(--muted);margin-left:2px;}'\n  + '.vf-res{flex:1;min-width:140px;font-size:13px;color:var(--muted);}'\n  + '.vf-big{display:inline-block;background:var(--accent);color:#fff;font-weight:800;font-size:14px;'\n  + 'padding:4px 12px;border-radius:2px;letter-spacing:.03em;}'\n  + '.vf-rn{margin-top:6px;font-size:12px;color:var(--muted);}'\n  + '.vf-ruler{margin-top:12px;}'\n  + '.vf-ticks{position:relative;height:15px;margin:0 8px 2px;}'\n  + '.vf-ticks i{position:absolute;top:0;width:1px;background:var(--line-strong);}'\n  + '.vf-ticks i.maj{height:15px;background:var(--muted);} .vf-ticks i.min{height:7px;}'\n  + '.vf-rg{-webkit-appearance:none;appearance:none;width:100%;height:4px;background:var(--ink);outline:none;margin:2px 0 0;}'\n  + '.vf-rg::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:20px;height:28px;'\n  + 'background:var(--accent);border:2px solid #fff;border-radius:2px;box-shadow:0 1px 3px rgba(0,0,0,.25);}'\n  + '.vf-rg::-moz-range-thumb{width:20px;height:28px;background:var(--accent);border:2px solid #fff;border-radius:2px;}'\n  + '.vf-scale{display:flex;justify-content:space-between;color:var(--muted);font-size:11px;'\n  + 'font-variant-numeric:tabular-nums;margin-top:5px;padding:0 2px;}'\n  + '.vf-tw{margin-top:18px;overflow-x:auto;-webkit-overflow-scrolling:touch;}'\n  + '.vf-tb{width:100%;border-collapse:collapse;font-variant-numeric:tabular-nums;min-width:300px;}'\n  + '.vf-tb th{font-size:10px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);border:0;'\n  + 'text-align:right;padding:0 0 9px;border-bottom:2px solid var(--ink);}'\n  + '.vf-tb th:first-child{text-align:left;}'\n  + '.vf-tb td{font-size:14px;padding:11px 0;border:0;border-bottom:1px solid var(--line);text-align:right;font-weight:500;}'\n  + '.vf-tb td:first-child{text-align:left;font-weight:800;font-size:15px;}'\n  + '.vf-tb tr.on td{background:var(--accent-soft);border-bottom-color:var(--accent);}'\n  + '.vf-tb tr.on td:first-child{color:var(--accent);position:relative;}'\n  + '.vf-tb tr.on td:first-child::before{content:\"\";position:absolute;left:-14px;top:0;bottom:0;width:4px;background:var(--accent);}'\n  + '.vf-cap{font-size:11px;color:var(--muted);margin-top:9px;text-align:right;}'\n  + '.vf-note{font-size:12px;color:var(--muted);margin-top:10px;font-style:italic;}'\n  + '.vf-how{margin-top:16px;border-top:1px solid var(--line);padding-top:14px;}'\n  + '.vf-how summary{font-size:13px;font-weight:600;cursor:pointer;list-style:none;display:flex;align-items:center;gap:8px;}'\n  + '.vf-how summary::-webkit-details-marker{display:none;}'\n  + '.vf-how summary::before{content:\"+\";width:15px;font-weight:800;color:var(--accent);}'\n  + '.vf-how[open] summary::before{content:\"\\\\2013\";}'\n  + '.vf-how ul{margin:11px 0 0;padding:0;list-style:none;font-size:13px;color:var(--muted);}'\n  + '.vf-how li{padding:4px 0 4px 15px;position:relative;} .vf-how li b{color:var(--ink);font-weight:600;}'\n  + '.vf-how li::before{content:\"\";position:absolute;left:0;top:11px;width:6px;height:1px;background:var(--muted);}'\n  + '@media(max-width:560px){'\n  + '.vf-size{padding:16px;}'\n  + '.vf-hd{padding-bottom:11px;}'\n  + '.vf-nm{font-size:21px;}'\n  + '.vf-find{padding:14px;}'\n  + '.vf-fh{gap:4px;}'\n  + '.vf-num input{width:72px;font-size:20px;}'\n  + '.vf-num span{font-size:11px;}'\n  + '.vf-ft{font-size:13px;} .vf-ask{font-size:12px;}'\n  + '.vf-res{min-width:120px;font-size:12px;}'\n  + '.vf-tb{min-width:0;} .vf-tw{overflow-x:visible;}'\n  + '.vf-tb td{font-size:13px;padding:10px 0;} .vf-tb td:first-child{font-size:14px;}'\n  + '.vf-tb th{font-size:9px;letter-spacing:.06em;}'\n  + '.vf-cap{font-size:10px;}'\n  + '.vf-tb tr.on td:first-child::before{left:-10px;width:3px;}'\n  + '}';\n\n  function injectCSS(){\n    if(document.getElementById('vf-size-css'))return;\n    var s=document.createElement('style'); s.id='vf-size-css'; s.textContent=CSS;\n    document.head.appendChild(s);\n  }\n\n  function init(mount){\n    var chart = CHARTS[mount.getAttribute('data-chart')];\n    if(!chart){ mount.innerHTML='\u003cp style=\"font:13px sans-serif;color:#a00\"\u003eSize chart not found.\u003c\/p\u003e'; return; }\n    var name = mount.getAttribute('data-name') || chart.name;\n\n    var unit='in', userCm=null;\n    var toIn=function(cm){return Math.round((cm\/2.54)*10)\/10;};\n    var disp=function(cm){return unit==='in'?toIn(cm):cm;};\n    var eGirth=function(r){return chart.flat?r[1]*2:r[1];};\n\n    mount.innerHTML=''\n      +'\u003cdiv class=\"vf-hd\"\u003e\u003cdiv\u003e'\n      +'\u003cdiv class=\"vf-ey\"\u003eVisionary \u003cb\u003e\/\u003c\/b\u003e size guide\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-nm\"\u003e\u003c\/div\u003e\u003cdiv class=\"vf-fit\"\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-units\" role=\"group\" aria-label=\"Units\"\u003e'\n      +'\u003cspan class=\"vf-u\" data-u=\"in\" role=\"button\" tabindex=\"0\" aria-pressed=\"true\"\u003eIN\u003c\/span\u003e'\n      +'\u003cspan class=\"vf-u\" data-u=\"cm\" role=\"button\" tabindex=\"0\" aria-pressed=\"false\"\u003eCM\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-find\"\u003e\u003cdiv class=\"vf-fh\"\u003e\u003cdiv class=\"vf-ft\"\u003eFind your fit\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-ask\"\u003eEnter your \u003cb class=\"vf-metric\"\u003e\u003c\/b\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-ro\"\u003e\u003cdiv class=\"vf-num\"\u003e\u003cinput class=\"vf-input\" type=\"number\" inputmode=\"decimal\" step=\"0.5\" value=\"0\"\u003e\u003cspan class=\"vf-iu\"\u003ein\u003c\/span\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-res\"\u003eWe recommend \u003cspan class=\"vf-big vf-rec\"\u003e\\u2013\u003c\/span\u003e\u003cdiv class=\"vf-rn\"\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-ruler\"\u003e\u003cdiv class=\"vf-ticks\"\u003e\u003c\/div\u003e'\n      +'\u003cinput class=\"vf-rg\" type=\"range\" step=\"0.5\"\u003e\u003cdiv class=\"vf-scale\"\u003e\u003cspan class=\"vf-mn\"\u003e\u003c\/span\u003e\u003cspan class=\"vf-mx\"\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-tw\"\u003e\u003ctable class=\"vf-tb\"\u003e\u003cthead\u003e\u003ctr class=\"vf-th\"\u003e\u003c\/tr\u003e\u003c\/thead\u003e\u003ctbody class=\"vf-tbd\"\u003e\u003c\/tbody\u003e\u003c\/table\u003e\u003cdiv class=\"vf-cap\"\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-note\"\u003e\u003c\/div\u003e'\n      +'\u003cdetails class=\"vf-how\"\u003e\u003csummary\u003eHow to measure\u003c\/summary\u003e\u003cul\u003e'\n      +'\u003cli\u003e\u003cb\u003eChest \/ bust\u003c\/b\u003e \\u2014 around the fullest part, tape level under the arms, relaxed.\u003c\/li\u003e'\n      +'\u003cli\u003e\u003cb\u003eWaist\u003c\/b\u003e \\u2014 around your natural waistline, roughly at the belly button.\u003c\/li\u003e'\n      +'\u003cli\u003e\u003cb\u003eLength\u003c\/b\u003e \\u2014 from the highest shoulder seam straight down to the hem.\u003c\/li\u003e'\n      +'\u003cli\u003eBetween sizes? Size up for a looser fit, down for a closer one.\u003c\/li\u003e\u003c\/ul\u003e\u003c\/details\u003e';\n\n    var q=function(s){return mount.querySelector(s);};\n    q('.vf-nm').textContent=name;\n    q('.vf-fit').textContent=chart.fit;\n    q('.vf-metric').textContent=chart.metric;\n\n    function recommend(cm){\n      if(cm==null)return null; var best=null,bd=1e9;\n      chart.rows.forEach(function(r){var d=Math.abs(eGirth(r)-cm); if(d\u003cbd){bd=d;best=r[0];}});\n      return best;\n    }\n    function girthRange(){\n      var v=chart.rows.map(eGirth); return [Math.round(Math.min.apply(null,v)-8), Math.round(Math.max.apply(null,v)+8)];\n    }\n    function ticks(mn,mx){\n      var t=q('.vf-ticks'); t.innerHTML=''; var span=mx-mn; if(span\u003c=0)return;\n      var step=unit==='in'?1:2, maj=unit==='in'?5:10;\n      for(var v=Math.ceil(mn); v\u003c=mx; v+=step){\n        var i=document.createElement('i'); i.className=(Math.round(v)%maj===0)?'maj':'min';\n        i.style.left=((v-mn)\/span*100)+'%'; t.appendChild(i);\n      }\n    }\n    function table(){\n      var b=q('.vf-tbd'); b.innerHTML=''; var rec=recommend(userCm);\n      chart.rows.forEach(function(r){\n        var tr=document.createElement('tr'); if(r[0]===rec)tr.className='on';\n        var td0=document.createElement('td'); td0.textContent=r[0]; tr.appendChild(td0);\n        for(var i=1;i\u003cr.length;i++){var td=document.createElement('td'); td.textContent=disp(r[i]); tr.appendChild(td);}\n        b.appendChild(tr);\n      });\n    }\n    function rec(){\n      var s=recommend(userCm); q('.vf-rec').textContent=s||'\\u2013'; var n=q('.vf-rn');\n      if(!s){n.textContent='';return;}\n      var row=chart.rows.filter(function(r){return r[0]===s;})[0], g=eGirth(row), c=userCm-g, m;\n      if(Math.abs(c)\u003c=2)m='Right in range for this piece.';\n      else if(c\u003e0)m='Near the top of this size \\u2014 size up for more room.';\n      else m='Comfortable, with a little room to spare.';\n      n.textContent=m;\n    }\n    function render(){\n      var thr=q('.vf-th'); thr.innerHTML='\u003cth\u003eSize\u003c\/th\u003e';\n      chart.cols.forEach(function(c){var th=document.createElement('th');th.textContent=c;thr.appendChild(th);});\n      var rr=girthRange(), mn=unit==='in'?toIn(rr[0]):rr[0], mx=unit==='in'?toIn(rr[1]):rr[1];\n      var rg=q('.vf-rg'); rg.min=mn; rg.max=mx;\n      q('.vf-mn').textContent=mn+(unit==='in'?'\"':''); q('.vf-mx').textContent=mx+(unit==='in'?'\"':'');\n      q('.vf-iu').textContent=unit==='in'?'in':'cm';\n      if(userCm==null){var mid=chart.rows[Math.floor(chart.rows.length\/2)]; userCm=eGirth(mid);}\n      var ud=disp(userCm); q('.vf-input').value=ud; rg.value=Math.min(mx,Math.max(mn,ud));\n      ticks(mn,mx); table(); rec();\n      q('.vf-cap').textContent='Measurements in '+(unit==='in'?'inches':'centimetres')+'.';\n      q('.vf-note').textContent=chart.note?('* '+chart.note):'';\n    }\n\n    mount.querySelectorAll('.vf-u').forEach(function(bt){\n      var go=function(){ unit=bt.getAttribute('data-u');\n        mount.querySelectorAll('.vf-u').forEach(function(x){x.setAttribute('aria-pressed',x===bt?'true':'false');});\n        render(); };\n      bt.onclick=go;\n      bt.onkeydown=function(e){ if(e.key==='Enter'||e.key===' '){e.preventDefault();go();} };\n    });\n    q('.vf-rg').addEventListener('input',function(){var v=parseFloat(this.value);userCm=unit==='in'?v*2.54:v;q('.vf-input').value=v;table();rec();});\n    q('.vf-input').addEventListener('input',function(){var v=parseFloat(this.value);if(isNaN(v))return;userCm=unit==='in'?v*2.54:v;\n      var rg=q('.vf-rg');rg.value=Math.min(parseFloat(rg.max),Math.max(parseFloat(rg.min),v));table();rec();});\n\n    render(); mount.setAttribute('data-vf-ready','1');\n  }\n\n  function scan(){ injectCSS(); document.querySelectorAll('.vf-size[data-chart]:not([data-vf-ready])').forEach(init); }\n  window.__vfSizeGuide={scan:scan,charts:CHARTS};\n  if(document.readyState==='loading') document.addEventListener('DOMContentLoaded',scan); else scan();\n})();\n\u003c\/script\u003e\n\u003c!-- VF-SIZE-GUIDE END --\u003e","brand":"Visionary Fitness","offers":[{"title":"S \/ Black","offer_id":49394976653550,"sku":"VF-STR-SHT-BLK-S","price":40.0,"currency_code":"USD","in_stock":true},{"title":"M \/ Black","offer_id":49394976751854,"sku":"VF-STR-SHT-BLK-M","price":40.0,"currency_code":"USD","in_stock":true},{"title":"L \/ Black","offer_id":49394976850158,"sku":"VF-STR-SHT-BLK-L","price":40.0,"currency_code":"USD","in_stock":true},{"title":"XL \/ Black","offer_id":49394976948462,"sku":"VF-STR-SHT-BLK-XL","price":40.0,"currency_code":"USD","in_stock":true},{"title":"XXL \/ Black","offer_id":49394977046766,"sku":"VF-STR-SHT-BLK-2XL","price":40.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0796\/2578\/1486\/files\/Stride_5__Shorts_Black_Front.png?v=1786398041"},{"product_id":"more-than-an-athlete-mesh-shorts","title":"More Than An Athlete Mesh Shorts","description":"\u003cp\u003e\u003cstrong\u003eAbout This Piece\u003c\/strong\u003e\u003c\/p\u003e\n\n\u003cp\u003eMore than a pair of shorts. Breathable single-layer mesh built to keep you cool when the work gets hot, with a clean cut that moves how you move. Lightweight, unrestrictive, and made for the ones who don't clock out. On the court, in the gym, everywhere in between.\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e 100% Polyester | 250gsm | Single layer mesh\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Athletic | True to size\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eModel:\u003c\/strong\u003e 6'0\" | 200 lbs | Wearing size Large\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eCare:\u003c\/strong\u003e Cold wash only. Hang dry. No high heat. Do not bleach.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eMade to Order\u003c\/strong\u003e — this piece is produced just for you. Please see our \u003ca href=\"https:\/\/visionaryfitness.shop\/policies\/shipping-policy\" target=\"_blank\" rel=\"noopener\"\u003eShipping Policy\u003c\/a\u003e for current production \u0026amp; delivery timelines.\u003c\/p\u003e\n\u003c!-- VF-SIZE-GUIDE START --\u003e\n\u003chr\u003e\n\u003ch3\u003eSize guide\u003c\/h3\u003e\n\u003cdiv class=\"vf-size\" data-chart=\"mesh-shorts\" data-name=\"More Than An Athlete Mesh Shorts\"\u003e\u003c\/div\u003e\n\u003cscript\u003e\n(function(){\n  if (window.__vfSizeGuide) { window.__vfSizeGuide.scan(); return; }\n\n  \/* ---- shared charts (edit measurements here, in ONE place) ----\n     girth = the column used to recommend a size.\n     flat  = measurement taken laid flat \/ half body, so we double it\n             when matching to a customer's real body measurement.        *\/\n  var CHARTS = {\n    'stringers': {name:'Stringer', fit:'true to size', metric:'chest',\n      cols:['Chest','Length'],\n      rows:[['S',90,68],['M',94,70],['L',98,72],['XL',102,74],['XXL',106,76]]},\n    'defy-blackout-tank': {name:'Defy \/ Blackout Tank', fit:'fitted', metric:'chest',\n      cols:['Chest','Length'],\n      rows:[['XS',76,63],['S',78,65],['M',80,67],['L',85,69],['XL',90,71],['XXL',92,73]]},\n    'core-vantage-tank': {name:'Core \/ Vantage Tank', fit:'fitted', metric:'chest', flat:true,\n      cols:['Chest','Length'],\n      rows:[['XS',47,66],['S',49,68],['M',51,70],['L',53,72],['XL',55,74],['XXL',57,76]]},\n    'oversized-tees': {name:'Oversized Tee', fit:'oversized', metric:'chest',\n      cols:['Chest','Length','Sleeve'],\n      rows:[['XS',108,69,22],['S',112,71,23],['M',116,73,24],['L',120,75,25],['XL',124,77,26],['XXL',126,79,27]]},\n    'muscle-compression-tees': {name:'Muscle \/ Compression Tee', fit:'fitted', metric:'chest',\n      cols:['Chest','Length','Sleeve'],\n      rows:[['XS',80,63,27],['S',84,65,28],['M',88,67,29],['L',92,69,30],['XL',96,71,31],['XXL',100,73,32]]},\n    'longsleeve-compression-tee': {name:'Longsleeve Compression Tee', fit:'fitted', metric:'chest',\n      cols:['Chest','Length','Sleeve'],\n      rows:[['XS',105,70,63],['S',107,72,64],['M',112,74,65],['L',117,76,66],['XL',122,78,67],['XXL',127,80,68]]},\n\n    'legacy-liner-shorts': {name:'Legacy Liner Shorts', fit:'regular', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',70,45,100],['M',74,46,104],['L',78,47,108],['XL',82,48,112],['XXL',86,49,116]]},\n    'vital-running-shorts': {name:'Vital Running Shorts', fit:'regular', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',72,45,101],['M',74,46,104],['L',76,47,108],['XL',78,48,112],['XXL',80,49,116]]},\n    'mesh-shorts': {name:'Mesh Shorts', fit:'athletic \/ true to size', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',71.1,39.4,105.9],['M',74.9,40.6,110],['L',78,41.4,113.8],['XL',81,42.4,117.9],['XXL',85.1,43.4,121.9]]},\n    'stride-vantage-shorts': {name:'Stride \/ Vantage Shorts', fit:'lined', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['XS',71,33,49],['S',74,34.5,51],['M',76,36,53],['L',78,38,55],['XL',83,40,57],['XXL',86,42,59]]},\n    'defy-cotton-shorts': {name:'Defy Cotton Shorts', fit:'regular', metric:'waist',\n      note:'Length \u0026 hip on this chart look swapped from Molly — confirm before going live.',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',72,108,42],['M',76,112,43],['L',80,116,44],['XL',84,122,45.5],['XXL',88,128,47]]},\n    'sweatpants': {name:'Sweatpants', fit:'relaxed', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',66,99,58],['M',69,101,60],['L',72,103,62],['XL',75,105,64],['XXL',78,107,66]]},\n\n    'revival-bra': {name:'Revival Bra', fit:'compression', metric:'bust',\n      cols:['Bust','Length','Hem'],\n      rows:[['S',68,33,56],['M',72,34,60],['L',76,35,64]]},\n    'revival-booty-shorts': {name:'Revival Booty Shorts', fit:'high-waist', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',58,34,72],['M',62,36,76],['L',68,38,80]]},\n    'serenity-leggings': {name:'Serenity Leggings', fit:'high-stretch', metric:'waist', flat:true,\n      note:'High-stretch. Waist \u0026 hip are relaxed (laid-flat) numbers — the fabric expands well past these.',\n      cols:['Waist','Length','Hip'],\n      rows:[['XS',25.5,78,31],['S',28,79,33.5],['M',30.5,80,36],['L',33,81,38.5],['XL',35.5,82,41]]}\n  };\n\n  var CSS = ''\n  + '@import url(\\'https:\/\/fonts.googleapis.com\/css2?family=Archivo:wght@400;500;600;800\u0026display=swap\\');'\n  + '.vf-size{--paper:#0b0b0b;--card:#171717;--ink:#ffffff;--muted:#a1a099;--line:#2a2a28;'\n  + '--line-strong:#3d3d3a;--accent:#5c78ff;--accent-soft:#1b2350;'\n  + \"--font:'Archivo',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;\"\n  + 'font-family:var(--font);color:var(--ink);background:var(--paper);line-height:1.4;'\n  + '-webkit-font-smoothing:antialiased;box-sizing:border-box;max-width:620px;margin:22px auto;'\n  + 'padding:clamp(16px,4vw,28px);border:1px solid var(--line-strong);border-radius:3px;}'\n  + '.vf-size *,.vf-size *::before,.vf-size *::after{box-sizing:border-box;}'\n  + '.vf-size button{font-family:inherit;cursor:pointer;}'\n  + '.vf-hd{display:flex;justify-content:space-between;align-items:flex-start;gap:14px;flex-wrap:wrap;'\n  + 'border-bottom:2px solid var(--ink);padding-bottom:12px;}'\n  + '.vf-ey{font-weight:800;letter-spacing:.14em;font-size:11px;text-transform:uppercase;color:var(--muted);}'\n  + '.vf-ey b{color:var(--accent);}'\n  + '.vf-nm{font-weight:800;font-size:clamp(22px,5vw,30px);line-height:1;letter-spacing:-.01em;margin:3px 0 0;}'\n  + '.vf-fit{font-size:12px;color:var(--muted);border:1px solid var(--line-strong);padding:3px 9px;'\n  + 'border-radius:2px;white-space:nowrap;margin-top:2px;}'\n  + '.vf-units{display:inline-flex;align-items:center;gap:16px;flex-shrink:0;}'\n  + '.vf-u{font-size:12px;font-weight:700;letter-spacing:.1em;color:var(--muted);cursor:pointer;'\n  + 'padding-bottom:3px;border-bottom:2px solid transparent;user-select:none;line-height:1;}'\n  + '.vf-u[aria-pressed=\"true\"]{color:var(--ink);border-bottom-color:var(--accent);}'\n  + '.vf-find{background:var(--card);border:1.5px solid var(--ink);border-radius:3px;padding:16px;margin-top:18px;}'\n  + '.vf-fh{display:flex;justify-content:space-between;align-items:baseline;gap:8px;flex-wrap:wrap;}'\n  + '.vf-ft{font-weight:800;font-size:14px;}'\n  + '.vf-ask{font-size:13px;color:var(--muted);} .vf-ask b{color:var(--ink);font-weight:600;}'\n  + '.vf-ro{display:flex;align-items:flex-end;gap:14px;margin:14px 0 2px;flex-wrap:wrap;}'\n  + '.vf-num{display:flex;align-items:baseline;border:1.5px solid var(--line-strong);border-radius:2px;'\n  + 'background:var(--paper);padding:6px 9px;}'\n  + '.vf-num input{all:unset;width:82px;font-family:inherit;font-weight:800;font-size:23px;color:var(--ink);'\n  + 'font-variant-numeric:tabular-nums;}'\n  + '.vf-num span{font-size:12px;font-weight:600;color:var(--muted);margin-left:2px;}'\n  + '.vf-res{flex:1;min-width:140px;font-size:13px;color:var(--muted);}'\n  + '.vf-big{display:inline-block;background:var(--accent);color:#fff;font-weight:800;font-size:14px;'\n  + 'padding:4px 12px;border-radius:2px;letter-spacing:.03em;}'\n  + '.vf-rn{margin-top:6px;font-size:12px;color:var(--muted);}'\n  + '.vf-ruler{margin-top:12px;}'\n  + '.vf-ticks{position:relative;height:15px;margin:0 8px 2px;}'\n  + '.vf-ticks i{position:absolute;top:0;width:1px;background:var(--line-strong);}'\n  + '.vf-ticks i.maj{height:15px;background:var(--muted);} .vf-ticks i.min{height:7px;}'\n  + '.vf-rg{-webkit-appearance:none;appearance:none;width:100%;height:4px;background:var(--ink);outline:none;margin:2px 0 0;}'\n  + '.vf-rg::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:20px;height:28px;'\n  + 'background:var(--accent);border:2px solid #fff;border-radius:2px;box-shadow:0 1px 3px rgba(0,0,0,.25);}'\n  + '.vf-rg::-moz-range-thumb{width:20px;height:28px;background:var(--accent);border:2px solid #fff;border-radius:2px;}'\n  + '.vf-scale{display:flex;justify-content:space-between;color:var(--muted);font-size:11px;'\n  + 'font-variant-numeric:tabular-nums;margin-top:5px;padding:0 2px;}'\n  + '.vf-tw{margin-top:18px;overflow-x:auto;-webkit-overflow-scrolling:touch;}'\n  + '.vf-tb{width:100%;border-collapse:collapse;font-variant-numeric:tabular-nums;min-width:300px;}'\n  + '.vf-tb th{font-size:10px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);border:0;'\n  + 'text-align:right;padding:0 0 9px;border-bottom:2px solid var(--ink);}'\n  + '.vf-tb th:first-child{text-align:left;}'\n  + '.vf-tb td{font-size:14px;padding:11px 0;border:0;border-bottom:1px solid var(--line);text-align:right;font-weight:500;}'\n  + '.vf-tb td:first-child{text-align:left;font-weight:800;font-size:15px;}'\n  + '.vf-tb tr.on td{background:var(--accent-soft);border-bottom-color:var(--accent);}'\n  + '.vf-tb tr.on td:first-child{color:var(--accent);position:relative;}'\n  + '.vf-tb tr.on td:first-child::before{content:\"\";position:absolute;left:-14px;top:0;bottom:0;width:4px;background:var(--accent);}'\n  + '.vf-cap{font-size:11px;color:var(--muted);margin-top:9px;text-align:right;}'\n  + '.vf-note{font-size:12px;color:var(--muted);margin-top:10px;font-style:italic;}'\n  + '.vf-how{margin-top:16px;border-top:1px solid var(--line);padding-top:14px;}'\n  + '.vf-how summary{font-size:13px;font-weight:600;cursor:pointer;list-style:none;display:flex;align-items:center;gap:8px;}'\n  + '.vf-how summary::-webkit-details-marker{display:none;}'\n  + '.vf-how summary::before{content:\"+\";width:15px;font-weight:800;color:var(--accent);}'\n  + '.vf-how[open] summary::before{content:\"\\\\2013\";}'\n  + '.vf-how ul{margin:11px 0 0;padding:0;list-style:none;font-size:13px;color:var(--muted);}'\n  + '.vf-how li{padding:4px 0 4px 15px;position:relative;} .vf-how li b{color:var(--ink);font-weight:600;}'\n  + '.vf-how li::before{content:\"\";position:absolute;left:0;top:11px;width:6px;height:1px;background:var(--muted);}'\n  + '@media(max-width:560px){'\n  + '.vf-size{padding:16px;}'\n  + '.vf-hd{padding-bottom:11px;}'\n  + '.vf-nm{font-size:21px;}'\n  + '.vf-find{padding:14px;}'\n  + '.vf-fh{gap:4px;}'\n  + '.vf-num input{width:72px;font-size:20px;}'\n  + '.vf-num span{font-size:11px;}'\n  + '.vf-ft{font-size:13px;} .vf-ask{font-size:12px;}'\n  + '.vf-res{min-width:120px;font-size:12px;}'\n  + '.vf-tb{min-width:0;} .vf-tw{overflow-x:visible;}'\n  + '.vf-tb td{font-size:13px;padding:10px 0;} .vf-tb td:first-child{font-size:14px;}'\n  + '.vf-tb th{font-size:9px;letter-spacing:.06em;}'\n  + '.vf-cap{font-size:10px;}'\n  + '.vf-tb tr.on td:first-child::before{left:-10px;width:3px;}'\n  + '}';\n\n  function injectCSS(){\n    if(document.getElementById('vf-size-css'))return;\n    var s=document.createElement('style'); s.id='vf-size-css'; s.textContent=CSS;\n    document.head.appendChild(s);\n  }\n\n  function init(mount){\n    var chart = CHARTS[mount.getAttribute('data-chart')];\n    if(!chart){ mount.innerHTML='\u003cp style=\"font:13px sans-serif;color:#a00\"\u003eSize chart not found.\u003c\/p\u003e'; return; }\n    var name = mount.getAttribute('data-name') || chart.name;\n\n    var unit='in', userCm=null;\n    var toIn=function(cm){return Math.round((cm\/2.54)*10)\/10;};\n    var disp=function(cm){return unit==='in'?toIn(cm):cm;};\n    var eGirth=function(r){return chart.flat?r[1]*2:r[1];};\n\n    mount.innerHTML=''\n      +'\u003cdiv class=\"vf-hd\"\u003e\u003cdiv\u003e'\n      +'\u003cdiv class=\"vf-ey\"\u003eVisionary \u003cb\u003e\/\u003c\/b\u003e size guide\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-nm\"\u003e\u003c\/div\u003e\u003cdiv class=\"vf-fit\"\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-units\" role=\"group\" aria-label=\"Units\"\u003e'\n      +'\u003cspan class=\"vf-u\" data-u=\"in\" role=\"button\" tabindex=\"0\" aria-pressed=\"true\"\u003eIN\u003c\/span\u003e'\n      +'\u003cspan class=\"vf-u\" data-u=\"cm\" role=\"button\" tabindex=\"0\" aria-pressed=\"false\"\u003eCM\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-find\"\u003e\u003cdiv class=\"vf-fh\"\u003e\u003cdiv class=\"vf-ft\"\u003eFind your fit\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-ask\"\u003eEnter your \u003cb class=\"vf-metric\"\u003e\u003c\/b\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-ro\"\u003e\u003cdiv class=\"vf-num\"\u003e\u003cinput class=\"vf-input\" type=\"number\" inputmode=\"decimal\" step=\"0.5\" value=\"0\"\u003e\u003cspan class=\"vf-iu\"\u003ein\u003c\/span\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-res\"\u003eWe recommend \u003cspan class=\"vf-big vf-rec\"\u003e\\u2013\u003c\/span\u003e\u003cdiv class=\"vf-rn\"\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-ruler\"\u003e\u003cdiv class=\"vf-ticks\"\u003e\u003c\/div\u003e'\n      +'\u003cinput class=\"vf-rg\" type=\"range\" step=\"0.5\"\u003e\u003cdiv class=\"vf-scale\"\u003e\u003cspan class=\"vf-mn\"\u003e\u003c\/span\u003e\u003cspan class=\"vf-mx\"\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-tw\"\u003e\u003ctable class=\"vf-tb\"\u003e\u003cthead\u003e\u003ctr class=\"vf-th\"\u003e\u003c\/tr\u003e\u003c\/thead\u003e\u003ctbody class=\"vf-tbd\"\u003e\u003c\/tbody\u003e\u003c\/table\u003e\u003cdiv class=\"vf-cap\"\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-note\"\u003e\u003c\/div\u003e'\n      +'\u003cdetails class=\"vf-how\"\u003e\u003csummary\u003eHow to measure\u003c\/summary\u003e\u003cul\u003e'\n      +'\u003cli\u003e\u003cb\u003eChest \/ bust\u003c\/b\u003e \\u2014 around the fullest part, tape level under the arms, relaxed.\u003c\/li\u003e'\n      +'\u003cli\u003e\u003cb\u003eWaist\u003c\/b\u003e \\u2014 around your natural waistline, roughly at the belly button.\u003c\/li\u003e'\n      +'\u003cli\u003e\u003cb\u003eLength\u003c\/b\u003e \\u2014 from the highest shoulder seam straight down to the hem.\u003c\/li\u003e'\n      +'\u003cli\u003eBetween sizes? Size up for a looser fit, down for a closer one.\u003c\/li\u003e\u003c\/ul\u003e\u003c\/details\u003e';\n\n    var q=function(s){return mount.querySelector(s);};\n    q('.vf-nm').textContent=name;\n    q('.vf-fit').textContent=chart.fit;\n    q('.vf-metric').textContent=chart.metric;\n\n    function recommend(cm){\n      if(cm==null)return null; var best=null,bd=1e9;\n      chart.rows.forEach(function(r){var d=Math.abs(eGirth(r)-cm); if(d\u003cbd){bd=d;best=r[0];}});\n      return best;\n    }\n    function girthRange(){\n      var v=chart.rows.map(eGirth); return [Math.round(Math.min.apply(null,v)-8), Math.round(Math.max.apply(null,v)+8)];\n    }\n    function ticks(mn,mx){\n      var t=q('.vf-ticks'); t.innerHTML=''; var span=mx-mn; if(span\u003c=0)return;\n      var step=unit==='in'?1:2, maj=unit==='in'?5:10;\n      for(var v=Math.ceil(mn); v\u003c=mx; v+=step){\n        var i=document.createElement('i'); i.className=(Math.round(v)%maj===0)?'maj':'min';\n        i.style.left=((v-mn)\/span*100)+'%'; t.appendChild(i);\n      }\n    }\n    function table(){\n      var b=q('.vf-tbd'); b.innerHTML=''; var rec=recommend(userCm);\n      chart.rows.forEach(function(r){\n        var tr=document.createElement('tr'); if(r[0]===rec)tr.className='on';\n        var td0=document.createElement('td'); td0.textContent=r[0]; tr.appendChild(td0);\n        for(var i=1;i\u003cr.length;i++){var td=document.createElement('td'); td.textContent=disp(r[i]); tr.appendChild(td);}\n        b.appendChild(tr);\n      });\n    }\n    function rec(){\n      var s=recommend(userCm); q('.vf-rec').textContent=s||'\\u2013'; var n=q('.vf-rn');\n      if(!s){n.textContent='';return;}\n      var row=chart.rows.filter(function(r){return r[0]===s;})[0], g=eGirth(row), c=userCm-g, m;\n      if(Math.abs(c)\u003c=2)m='Right in range for this piece.';\n      else if(c\u003e0)m='Near the top of this size \\u2014 size up for more room.';\n      else m='Comfortable, with a little room to spare.';\n      n.textContent=m;\n    }\n    function render(){\n      var thr=q('.vf-th'); thr.innerHTML='\u003cth\u003eSize\u003c\/th\u003e';\n      chart.cols.forEach(function(c){var th=document.createElement('th');th.textContent=c;thr.appendChild(th);});\n      var rr=girthRange(), mn=unit==='in'?toIn(rr[0]):rr[0], mx=unit==='in'?toIn(rr[1]):rr[1];\n      var rg=q('.vf-rg'); rg.min=mn; rg.max=mx;\n      q('.vf-mn').textContent=mn+(unit==='in'?'\"':''); q('.vf-mx').textContent=mx+(unit==='in'?'\"':'');\n      q('.vf-iu').textContent=unit==='in'?'in':'cm';\n      if(userCm==null){var mid=chart.rows[Math.floor(chart.rows.length\/2)]; userCm=eGirth(mid);}\n      var ud=disp(userCm); q('.vf-input').value=ud; rg.value=Math.min(mx,Math.max(mn,ud));\n      ticks(mn,mx); table(); rec();\n      q('.vf-cap').textContent='Measurements in '+(unit==='in'?'inches':'centimetres')+'.';\n      q('.vf-note').textContent=chart.note?('* '+chart.note):'';\n    }\n\n    mount.querySelectorAll('.vf-u').forEach(function(bt){\n      var go=function(){ unit=bt.getAttribute('data-u');\n        mount.querySelectorAll('.vf-u').forEach(function(x){x.setAttribute('aria-pressed',x===bt?'true':'false');});\n        render(); };\n      bt.onclick=go;\n      bt.onkeydown=function(e){ if(e.key==='Enter'||e.key===' '){e.preventDefault();go();} };\n    });\n    q('.vf-rg').addEventListener('input',function(){var v=parseFloat(this.value);userCm=unit==='in'?v*2.54:v;q('.vf-input').value=v;table();rec();});\n    q('.vf-input').addEventListener('input',function(){var v=parseFloat(this.value);if(isNaN(v))return;userCm=unit==='in'?v*2.54:v;\n      var rg=q('.vf-rg');rg.value=Math.min(parseFloat(rg.max),Math.max(parseFloat(rg.min),v));table();rec();});\n\n    render(); mount.setAttribute('data-vf-ready','1');\n  }\n\n  function scan(){ injectCSS(); document.querySelectorAll('.vf-size[data-chart]:not([data-vf-ready])').forEach(init); }\n  window.__vfSizeGuide={scan:scan,charts:CHARTS};\n  if(document.readyState==='loading') document.addEventListener('DOMContentLoaded',scan); else scan();\n})();\n\u003c\/script\u003e\n\u003c!-- VF-SIZE-GUIDE END --\u003e","brand":"Visionary Fitness","offers":[{"title":"S \/ Black","offer_id":49402825539822,"sku":"VF-MTA-SHT-BLK-S","price":40.0,"currency_code":"USD","in_stock":true},{"title":"M \/ Black","offer_id":49402825605358,"sku":"VF-MTA-SHT-BLK-M","price":40.0,"currency_code":"USD","in_stock":true},{"title":"L \/ Black","offer_id":49402825670894,"sku":"VF-MTA-SHT-BLK-L","price":40.0,"currency_code":"USD","in_stock":true},{"title":"XL \/ Black","offer_id":49402825736430,"sku":"VF-MTA-SHT-BLK-XL","price":40.0,"currency_code":"USD","in_stock":true},{"title":"XXL \/ Black","offer_id":49402825801966,"sku":"VF-MTA-SHT-BLK-2XL","price":40.0,"currency_code":"USD","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0796\/2578\/1486\/files\/v1_516f563e-68b3-4409-a396-59a3b4d3b59d.png?v=1786485051"},{"product_id":"signature-5-short","title":"Ambition Athletic Shorts 5''","description":"\u003cp\u003e\u003cstrong\u003eBreathe through it.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eA single-layer 5\" mesh short built for airflow and range of motion. Lightweight 250gsm mesh, elastic drawcord waist, true to size.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eFeatures\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e5\" inseam\u003c\/li\u003e\n\u003cli\u003e100% polyester mesh, 250gsm\u003c\/li\u003e\n\u003cli\u003eSingle-layer, breathable\u003c\/li\u003e\n\u003cli\u003eElastic drawcord waist\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e 100% polyester, 250gsm single-layer mesh\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e True to size\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eCare:\u003c\/strong\u003e Cool wash separately (30°C) · Cool tumble dry · Do not dry clean or bleach · Cool iron\u003c\/p\u003e\n\u003c!-- VF-SIZE-GUIDE START --\u003e\n\u003chr\u003e\n\u003ch3\u003eSize guide\u003c\/h3\u003e\n\u003cdiv class=\"vf-size\" data-chart=\"mesh-shorts\" data-name='Signature 5\" Short'\u003e\u003c\/div\u003e\n\u003cscript\u003e\n(function(){\n  if (window.__vfSizeGuide) { window.__vfSizeGuide.scan(); return; }\n\n  \/* ---- shared charts (edit measurements here, in ONE place) ----\n     girth = the column used to recommend a size.\n     flat  = measurement taken laid flat \/ half body, so we double it\n             when matching to a customer's real body measurement.        *\/\n  var CHARTS = {\n    'stringers': {name:'Stringer', fit:'true to size', metric:'chest',\n      cols:['Chest','Length'],\n      rows:[['S',90,68],['M',94,70],['L',98,72],['XL',102,74],['XXL',106,76]]},\n    'defy-blackout-tank': {name:'Defy \/ Blackout Tank', fit:'fitted', metric:'chest',\n      cols:['Chest','Length'],\n      rows:[['XS',76,63],['S',78,65],['M',80,67],['L',85,69],['XL',90,71],['XXL',92,73]]},\n    'core-vantage-tank': {name:'Core \/ Vantage Tank', fit:'fitted', metric:'chest', flat:true,\n      cols:['Chest','Length'],\n      rows:[['XS',47,66],['S',49,68],['M',51,70],['L',53,72],['XL',55,74],['XXL',57,76]]},\n    'oversized-tees': {name:'Oversized Tee', fit:'oversized', metric:'chest',\n      cols:['Chest','Length','Sleeve'],\n      rows:[['XS',108,69,22],['S',112,71,23],['M',116,73,24],['L',120,75,25],['XL',124,77,26],['XXL',126,79,27]]},\n    'muscle-compression-tees': {name:'Muscle \/ Compression Tee', fit:'fitted', metric:'chest',\n      cols:['Chest','Length','Sleeve'],\n      rows:[['XS',80,63,27],['S',84,65,28],['M',88,67,29],['L',92,69,30],['XL',96,71,31],['XXL',100,73,32]]},\n    'longsleeve-compression-tee': {name:'Longsleeve Compression Tee', fit:'fitted', metric:'chest',\n      cols:['Chest','Length','Sleeve'],\n      rows:[['XS',105,70,63],['S',107,72,64],['M',112,74,65],['L',117,76,66],['XL',122,78,67],['XXL',127,80,68]]},\n\n    'legacy-liner-shorts': {name:'Legacy Liner Shorts', fit:'regular', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',70,45,100],['M',74,46,104],['L',78,47,108],['XL',82,48,112],['XXL',86,49,116]]},\n    'vital-running-shorts': {name:'Vital Running Shorts', fit:'regular', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',72,45,101],['M',74,46,104],['L',76,47,108],['XL',78,48,112],['XXL',80,49,116]]},\n    'mesh-shorts': {name:'Mesh Shorts', fit:'athletic \/ true to size', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',71.1,39.4,105.9],['M',74.9,40.6,110],['L',78,41.4,113.8],['XL',81,42.4,117.9],['XXL',85.1,43.4,121.9]]},\n    'stride-vantage-shorts': {name:'Stride \/ Vantage Shorts', fit:'lined', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['XS',71,33,49],['S',74,34.5,51],['M',76,36,53],['L',78,38,55],['XL',83,40,57],['XXL',86,42,59]]},\n    'defy-cotton-shorts': {name:'Defy Cotton Shorts', fit:'regular', metric:'waist',\n      note:'Length \u0026 hip on this chart look swapped from Molly — confirm before going live.',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',72,108,42],['M',76,112,43],['L',80,116,44],['XL',84,122,45.5],['XXL',88,128,47]]},\n    'sweatpants': {name:'Sweatpants', fit:'relaxed', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',66,99,58],['M',69,101,60],['L',72,103,62],['XL',75,105,64],['XXL',78,107,66]]},\n\n    'revival-bra': {name:'Revival Bra', fit:'compression', metric:'bust',\n      cols:['Bust','Length','Hem'],\n      rows:[['S',68,33,56],['M',72,34,60],['L',76,35,64]]},\n    'revival-booty-shorts': {name:'Revival Booty Shorts', fit:'high-waist', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',58,34,72],['M',62,36,76],['L',68,38,80]]},\n    'serenity-leggings': {name:'Serenity Leggings', fit:'high-stretch', metric:'waist', flat:true,\n      note:'High-stretch. Waist \u0026 hip are relaxed (laid-flat) numbers — the fabric expands well past these.',\n      cols:['Waist','Length','Hip'],\n      rows:[['XS',25.5,78,31],['S',28,79,33.5],['M',30.5,80,36],['L',33,81,38.5],['XL',35.5,82,41]]},\n\n    'core-bratop': {name:'Bra \/ Top', fit:'true to size', metric:'bust',\n      cols:['Bust','UK','US'],\n      rows:[['XS',86.4,'4-6','0-2'],['S',91.4,'8-10','4-6'],['M',96.5,'12-14','8-10'],['L',102.1,'16-18','12-14'],['XL',106.9,'20-22','16-18']]},\n    'core-shorts': {name:'Shorts', fit:'true to size', metric:'waist',\n      cols:['Waist','Hip','Inseam','UK','US'],\n      rows:[['XS',63.5,88.9,11.4,'4-6','0-2'],['S',69.9,96.5,11.4,'8-10','4-6'],['M',76.2,104.1,11.4,'12-14','8-10'],['L',83.8,110.5,11.4,'16-18','12-14'],['XL',92.7,118.1,11.4,'20-22','16-18']]},\n    'core-leggings': {name:'Leggings', fit:'true to size', metric:'waist',\n      cols:['Waist','Hip','UK','US'],\n      rows:[['XS',63.5,88.9,'4-6','0-2'],['S',69.9,96.5,'8-10','4-6'],['M',76.2,104.1,'12-14','8-10'],['L',83.8,110.5,'16-18','12-14'],['XL',92.7,118.1,'20-22','16-18']]},\n    'core-flares': {name:'Flare Leggings', fit:'true to size', metric:'waist',\n      cols:['Waist','Hip','Inside leg','UK','US'],\n      rows:[['XS',63.5,88.9,71.9,'4-6','0-2'],['S',69.9,96.5,72.9,'8-10','4-6'],['M',76.2,104.1,73.9,'12-14','8-10'],['L',83.8,110.5,74.9,'16-18','12-14'],['XL',92.7,118.1,75.9,'20-22','16-18']]},\n    'ambition-zip': {name:'Zip Up', fit:'relaxed', metric:'chest',\n      note:'Estimated from a standard zip-up block \\u2014 confirm against your sample before relying on it.',\n      cols:['Chest','Length','Sleeve'],\n      rows:[['S',112,68,63],['M',118,70,64],['L',124,72,65],['XL',130,74,66],['XXL',136,76,67]]}\n  };\n\n  var CSS = ''\n  + '@import url(\\'https:\/\/fonts.googleapis.com\/css2?family=Archivo:wght@400;500;600;800\u0026display=swap\\');'\n  + '.vf-size{--paper:#0b0b0b;--card:#171717;--ink:#ffffff;--muted:#a1a099;--line:#2a2a28;'\n  + '--line-strong:#3d3d3a;--accent:#5c78ff;--accent-soft:#1b2350;'\n  + \"--font:'Archivo',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;\"\n  + 'font-family:var(--font);color:var(--ink);background:var(--paper);line-height:1.4;'\n  + '-webkit-font-smoothing:antialiased;box-sizing:border-box;max-width:620px;margin:22px auto;'\n  + 'padding:clamp(16px,4vw,28px);border:1px solid var(--line-strong);border-radius:3px;}'\n  + '.vf-size *,.vf-size *::before,.vf-size *::after{box-sizing:border-box;}'\n  + '.vf-size button{font-family:inherit;cursor:pointer;}'\n  + '.vf-hd{display:flex;justify-content:space-between;align-items:flex-start;gap:14px;flex-wrap:wrap;'\n  + 'border-bottom:2px solid var(--ink);padding-bottom:12px;}'\n  + '.vf-ey{font-weight:800;letter-spacing:.14em;font-size:11px;text-transform:uppercase;color:var(--muted);}'\n  + '.vf-ey b{color:var(--accent);}'\n  + '.vf-nm{font-weight:800;font-size:clamp(22px,5vw,30px);line-height:1;letter-spacing:-.01em;margin:3px 0 0;}'\n  + '.vf-fit{font-size:12px;color:var(--muted);border:1px solid var(--line-strong);padding:3px 9px;'\n  + 'border-radius:2px;white-space:nowrap;margin-top:2px;}'\n  + '.vf-units{display:inline-flex;align-items:center;gap:16px;flex-shrink:0;}'\n  + '.vf-u{font-size:12px;font-weight:700;letter-spacing:.1em;color:var(--muted);cursor:pointer;'\n  + 'padding-bottom:3px;border-bottom:2px solid transparent;user-select:none;line-height:1;}'\n  + '.vf-u[aria-pressed=\"true\"]{color:var(--ink);border-bottom-color:var(--accent);}'\n  + '.vf-find{background:var(--card);border:1.5px solid var(--ink);border-radius:3px;padding:16px;margin-top:18px;}'\n  + '.vf-fh{display:flex;justify-content:space-between;align-items:baseline;gap:8px;flex-wrap:wrap;}'\n  + '.vf-ft{font-weight:800;font-size:14px;}'\n  + '.vf-ask{font-size:13px;color:var(--muted);} .vf-ask b{color:var(--ink);font-weight:600;}'\n  + '.vf-ro{display:flex;align-items:flex-end;gap:14px;margin:14px 0 2px;flex-wrap:wrap;}'\n  + '.vf-num{display:flex;align-items:baseline;border:1.5px solid var(--line-strong);border-radius:2px;'\n  + 'background:var(--paper);padding:6px 9px;}'\n  + '.vf-num input{all:unset;width:82px;font-family:inherit;font-weight:800;font-size:23px;color:var(--ink);'\n  + 'font-variant-numeric:tabular-nums;}'\n  + '.vf-num span{font-size:12px;font-weight:600;color:var(--muted);margin-left:2px;}'\n  + '.vf-res{flex:1;min-width:140px;font-size:13px;color:var(--muted);}'\n  + '.vf-big{display:inline-block;background:var(--accent);color:#fff;font-weight:800;font-size:14px;'\n  + 'padding:4px 12px;border-radius:2px;letter-spacing:.03em;}'\n  + '.vf-rn{margin-top:6px;font-size:12px;color:var(--muted);}'\n  + '.vf-ruler{margin-top:12px;}'\n  + '.vf-ticks{position:relative;height:15px;margin:0 8px 2px;}'\n  + '.vf-ticks i{position:absolute;top:0;width:1px;background:var(--line-strong);}'\n  + '.vf-ticks i.maj{height:15px;background:var(--muted);} .vf-ticks i.min{height:7px;}'\n  + '.vf-rg{-webkit-appearance:none;appearance:none;width:100%;height:4px;background:var(--ink);outline:none;margin:2px 0 0;}'\n  + '.vf-rg::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:20px;height:28px;'\n  + 'background:var(--accent);border:2px solid #fff;border-radius:2px;box-shadow:0 1px 3px rgba(0,0,0,.25);}'\n  + '.vf-rg::-moz-range-thumb{width:20px;height:28px;background:var(--accent);border:2px solid #fff;border-radius:2px;}'\n  + '.vf-scale{display:flex;justify-content:space-between;color:var(--muted);font-size:11px;'\n  + 'font-variant-numeric:tabular-nums;margin-top:5px;padding:0 2px;}'\n  + '.vf-tw{margin-top:18px;overflow-x:auto;-webkit-overflow-scrolling:touch;}'\n  + '.vf-tb{width:100%;border-collapse:collapse;font-variant-numeric:tabular-nums;min-width:300px;}'\n  + '.vf-tb th{font-size:10px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);border:0;'\n  + 'text-align:right;padding:0 0 9px;border-bottom:2px solid var(--ink);}'\n  + '.vf-tb th:first-child{text-align:left;}'\n  + '.vf-tb td{font-size:14px;padding:11px 0;border:0;border-bottom:1px solid var(--line);text-align:right;font-weight:500;}'\n  + '.vf-tb td:first-child{text-align:left;font-weight:800;font-size:15px;}'\n  + '.vf-tb tr.on td{background:var(--accent-soft);border-bottom-color:var(--accent);}'\n  + '.vf-tb tr.on td:first-child{color:var(--accent);position:relative;}'\n  + '.vf-tb tr.on td:first-child::before{content:\"\";position:absolute;left:-14px;top:0;bottom:0;width:4px;background:var(--accent);}'\n  + '.vf-cap{font-size:11px;color:var(--muted);margin-top:9px;text-align:right;}'\n  + '.vf-note{font-size:12px;color:var(--muted);margin-top:10px;font-style:italic;}'\n  + '.vf-how{margin-top:16px;border-top:1px solid var(--line);padding-top:14px;}'\n  + '.vf-how summary{font-size:13px;font-weight:600;cursor:pointer;list-style:none;display:flex;align-items:center;gap:8px;}'\n  + '.vf-how summary::-webkit-details-marker{display:none;}'\n  + '.vf-how summary::before{content:\"+\";width:15px;font-weight:800;color:var(--accent);}'\n  + '.vf-how[open] summary::before{content:\"\\\\2013\";}'\n  + '.vf-how ul{margin:11px 0 0;padding:0;list-style:none;font-size:13px;color:var(--muted);}'\n  + '.vf-how li{padding:4px 0 4px 15px;position:relative;} .vf-how li b{color:var(--ink);font-weight:600;}'\n  + '.vf-how li::before{content:\"\";position:absolute;left:0;top:11px;width:6px;height:1px;background:var(--muted);}'\n  + '@media(max-width:560px){'\n  + '.vf-size{padding:16px;}'\n  + '.vf-hd{padding-bottom:11px;}'\n  + '.vf-nm{font-size:21px;}'\n  + '.vf-find{padding:14px;}'\n  + '.vf-fh{gap:4px;}'\n  + '.vf-num input{width:72px;font-size:20px;}'\n  + '.vf-num span{font-size:11px;}'\n  + '.vf-ft{font-size:13px;} .vf-ask{font-size:12px;}'\n  + '.vf-res{min-width:120px;font-size:12px;}'\n  + '.vf-tb{min-width:0;} .vf-tw{overflow-x:visible;}'\n  + '.vf-tb td{font-size:13px;padding:10px 0;} .vf-tb td:first-child{font-size:14px;}'\n  + '.vf-tb th{font-size:9px;letter-spacing:.06em;}'\n  + '.vf-cap{font-size:10px;}'\n  + '.vf-tb tr.on td:first-child::before{left:-10px;width:3px;}'\n  + '}';\n\n  function injectCSS(){\n    if(document.getElementById('vf-size-css'))return;\n    var s=document.createElement('style'); s.id='vf-size-css'; s.textContent=CSS;\n    document.head.appendChild(s);\n  }\n\n  function init(mount){\n    var chart = CHARTS[mount.getAttribute('data-chart')];\n    if(!chart){ mount.innerHTML='\u003cp style=\"font:13px sans-serif;color:#a00\"\u003eSize chart not found.\u003c\/p\u003e'; return; }\n    var name = mount.getAttribute('data-name') || chart.name;\n\n    var unit='in', userCm=null;\n    var toIn=function(cm){return Math.round((cm\/2.54)*10)\/10;};\n    var disp=function(cm){return unit==='in'?toIn(cm):cm;};\n    var eGirth=function(r){return chart.flat?r[1]*2:r[1];};\n\n    mount.innerHTML=''\n      +'\u003cdiv class=\"vf-hd\"\u003e\u003cdiv\u003e'\n      +'\u003cdiv class=\"vf-ey\"\u003eVisionary \u003cb\u003e\/\u003c\/b\u003e size guide\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-nm\"\u003e\u003c\/div\u003e\u003cdiv class=\"vf-fit\"\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-units\" role=\"group\" aria-label=\"Units\"\u003e'\n      +'\u003cspan class=\"vf-u\" data-u=\"in\" role=\"button\" tabindex=\"0\" aria-pressed=\"true\"\u003eIN\u003c\/span\u003e'\n      +'\u003cspan class=\"vf-u\" data-u=\"cm\" role=\"button\" tabindex=\"0\" aria-pressed=\"false\"\u003eCM\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-find\"\u003e\u003cdiv class=\"vf-fh\"\u003e\u003cdiv class=\"vf-ft\"\u003eFind your fit\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-ask\"\u003eEnter your \u003cb class=\"vf-metric\"\u003e\u003c\/b\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-ro\"\u003e\u003cdiv class=\"vf-num\"\u003e\u003cinput class=\"vf-input\" type=\"number\" inputmode=\"decimal\" step=\"0.5\" value=\"0\"\u003e\u003cspan class=\"vf-iu\"\u003ein\u003c\/span\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-res\"\u003eWe recommend \u003cspan class=\"vf-big vf-rec\"\u003e\\u2013\u003c\/span\u003e\u003cdiv class=\"vf-rn\"\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-ruler\"\u003e\u003cdiv class=\"vf-ticks\"\u003e\u003c\/div\u003e'\n      +'\u003cinput class=\"vf-rg\" type=\"range\" step=\"0.5\"\u003e\u003cdiv class=\"vf-scale\"\u003e\u003cspan class=\"vf-mn\"\u003e\u003c\/span\u003e\u003cspan class=\"vf-mx\"\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-tw\"\u003e\u003ctable class=\"vf-tb\"\u003e\u003cthead\u003e\u003ctr class=\"vf-th\"\u003e\u003c\/tr\u003e\u003c\/thead\u003e\u003ctbody class=\"vf-tbd\"\u003e\u003c\/tbody\u003e\u003c\/table\u003e\u003cdiv class=\"vf-cap\"\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-note\"\u003e\u003c\/div\u003e'\n      +'\u003cdetails class=\"vf-how\"\u003e\u003csummary\u003eHow to measure\u003c\/summary\u003e\u003cul\u003e'\n      +'\u003cli\u003e\u003cb\u003eChest \/ bust\u003c\/b\u003e \\u2014 around the fullest part, tape level under the arms, relaxed.\u003c\/li\u003e'\n      +'\u003cli\u003e\u003cb\u003eWaist\u003c\/b\u003e \\u2014 around your natural waistline, roughly at the belly button.\u003c\/li\u003e'\n      +'\u003cli\u003e\u003cb\u003eLength\u003c\/b\u003e \\u2014 from the highest shoulder seam straight down to the hem.\u003c\/li\u003e'\n      +'\u003cli\u003eBetween sizes? Size up for a looser fit, down for a closer one.\u003c\/li\u003e\u003c\/ul\u003e\u003c\/details\u003e';\n\n    var q=function(s){return mount.querySelector(s);};\n    q('.vf-nm').textContent=name;\n    q('.vf-fit').textContent=chart.fit;\n    q('.vf-metric').textContent=chart.metric;\n\n    function recommend(cm){\n      if(cm==null)return null; var best=null,bd=1e9;\n      chart.rows.forEach(function(r){var d=Math.abs(eGirth(r)-cm); if(d\u003cbd){bd=d;best=r[0];}});\n      return best;\n    }\n    function girthRange(){\n      var v=chart.rows.map(eGirth); return [Math.round(Math.min.apply(null,v)-8), Math.round(Math.max.apply(null,v)+8)];\n    }\n    function ticks(mn,mx){\n      var t=q('.vf-ticks'); t.innerHTML=''; var span=mx-mn; if(span\u003c=0)return;\n      var step=unit==='in'?1:2, maj=unit==='in'?5:10;\n      for(var v=Math.ceil(mn); v\u003c=mx; v+=step){\n        var i=document.createElement('i'); i.className=(Math.round(v)%maj===0)?'maj':'min';\n        i.style.left=((v-mn)\/span*100)+'%'; t.appendChild(i);\n      }\n    }\n    function table(){\n      var b=q('.vf-tbd'); b.innerHTML=''; var rec=recommend(userCm);\n      chart.rows.forEach(function(r){\n        var tr=document.createElement('tr'); if(r[0]===rec)tr.className='on';\n        var td0=document.createElement('td'); td0.textContent=r[0]; tr.appendChild(td0);\n        for(var i=1;i\u003cr.length;i++){var td=document.createElement('td'); td.textContent=(typeof r[i]==='number')?disp(r[i]):r[i]; tr.appendChild(td);}\n        b.appendChild(tr);\n      });\n    }\n    function rec(){\n      var s=recommend(userCm); q('.vf-rec').textContent=s||'\\u2013'; var n=q('.vf-rn');\n      if(!s){n.textContent='';return;}\n      var row=chart.rows.filter(function(r){return r[0]===s;})[0], g=eGirth(row), c=userCm-g, m;\n      if(Math.abs(c)\u003c=2)m='Right in range for this piece.';\n      else if(c\u003e0)m='Near the top of this size \\u2014 size up for more room.';\n      else m='Comfortable, with a little room to spare.';\n      n.textContent=m;\n    }\n    function render(){\n      var thr=q('.vf-th'); thr.innerHTML='\u003cth\u003eSize\u003c\/th\u003e';\n      chart.cols.forEach(function(c){var th=document.createElement('th');th.textContent=c;thr.appendChild(th);});\n      var rr=girthRange(), mn=unit==='in'?toIn(rr[0]):rr[0], mx=unit==='in'?toIn(rr[1]):rr[1];\n      var rg=q('.vf-rg'); rg.min=mn; rg.max=mx;\n      q('.vf-mn').textContent=mn+(unit==='in'?'\"':''); q('.vf-mx').textContent=mx+(unit==='in'?'\"':'');\n      q('.vf-iu').textContent=unit==='in'?'in':'cm';\n      if(userCm==null){var mid=chart.rows[Math.floor(chart.rows.length\/2)]; userCm=eGirth(mid);}\n      var ud=disp(userCm); q('.vf-input').value=ud; rg.value=Math.min(mx,Math.max(mn,ud));\n      ticks(mn,mx); table(); rec();\n      q('.vf-cap').textContent='Measurements in '+(unit==='in'?'inches':'centimetres')+'.';\n      q('.vf-note').textContent=chart.note?('* '+chart.note):'';\n    }\n\n    mount.querySelectorAll('.vf-u').forEach(function(bt){\n      var go=function(){ unit=bt.getAttribute('data-u');\n        mount.querySelectorAll('.vf-u').forEach(function(x){x.setAttribute('aria-pressed',x===bt?'true':'false');});\n        render(); };\n      bt.onclick=go;\n      bt.onkeydown=function(e){ if(e.key==='Enter'||e.key===' '){e.preventDefault();go();} };\n    });\n    q('.vf-rg').addEventListener('input',function(){var v=parseFloat(this.value);userCm=unit==='in'?v*2.54:v;q('.vf-input').value=v;table();rec();});\n    q('.vf-input').addEventListener('input',function(){var v=parseFloat(this.value);if(isNaN(v))return;userCm=unit==='in'?v*2.54:v;\n      var rg=q('.vf-rg');rg.value=Math.min(parseFloat(rg.max),Math.max(parseFloat(rg.min),v));table();rec();});\n\n    render(); mount.setAttribute('data-vf-ready','1');\n  }\n\n  function scan(){ injectCSS(); document.querySelectorAll('.vf-size[data-chart]:not([data-vf-ready])').forEach(init); }\n  window.__vfSizeGuide={scan:scan,charts:CHARTS};\n  if(document.readyState==='loading') document.addEventListener('DOMContentLoaded',scan); else scan();\n})();\n\u003c\/script\u003e\n\u003c!-- VF-SIZE-GUIDE END --\u003e","brand":"Visionary Fitness Store","offers":[{"title":"S","offer_id":49925529043182,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"M","offer_id":49925529075950,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"L","offer_id":49925529108718,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"XL","offer_id":49925529141486,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"XXL","offer_id":49925529174254,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0796\/2578\/1486\/files\/hf_20261111_054833_0c082924-8460-411b-ad1b-948ab3c84cc6.png?v=1794376797"},{"product_id":"signature-5-short-1","title":"Ambition Athletic Shorts 5''","description":"\u003cp\u003e\u003cstrong\u003eBreathe through it.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eA single-layer 5\" mesh short built for airflow and range of motion. Lightweight 250gsm mesh, elastic drawcord waist, true to size.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eFeatures\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e5\" inseam\u003c\/li\u003e\n\u003cli\u003e100% polyester mesh, 250gsm\u003c\/li\u003e\n\u003cli\u003eSingle-layer, breathable\u003c\/li\u003e\n\u003cli\u003eElastic drawcord waist\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e 100% polyester, 250gsm single-layer mesh\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e True to size\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eCare:\u003c\/strong\u003e Cool wash separately (30°C) · Cool tumble dry · Do not dry clean or bleach · Cool iron\u003c\/p\u003e\n\u003c!-- VF-SIZE-GUIDE START --\u003e\n\u003chr\u003e\n\u003ch3\u003eSize guide\u003c\/h3\u003e\n\u003cdiv class=\"vf-size\" data-chart=\"mesh-shorts\" data-name='Signature 5\" Short'\u003e\u003c\/div\u003e\n\u003cscript\u003e\n(function(){\n  if (window.__vfSizeGuide) { window.__vfSizeGuide.scan(); return; }\n\n  \/* ---- shared charts (edit measurements here, in ONE place) ----\n     girth = the column used to recommend a size.\n     flat  = measurement taken laid flat \/ half body, so we double it\n             when matching to a customer's real body measurement.        *\/\n  var CHARTS = {\n    'stringers': {name:'Stringer', fit:'true to size', metric:'chest',\n      cols:['Chest','Length'],\n      rows:[['S',90,68],['M',94,70],['L',98,72],['XL',102,74],['XXL',106,76]]},\n    'defy-blackout-tank': {name:'Defy \/ Blackout Tank', fit:'fitted', metric:'chest',\n      cols:['Chest','Length'],\n      rows:[['XS',76,63],['S',78,65],['M',80,67],['L',85,69],['XL',90,71],['XXL',92,73]]},\n    'core-vantage-tank': {name:'Core \/ Vantage Tank', fit:'fitted', metric:'chest', flat:true,\n      cols:['Chest','Length'],\n      rows:[['XS',47,66],['S',49,68],['M',51,70],['L',53,72],['XL',55,74],['XXL',57,76]]},\n    'oversized-tees': {name:'Oversized Tee', fit:'oversized', metric:'chest',\n      cols:['Chest','Length','Sleeve'],\n      rows:[['XS',108,69,22],['S',112,71,23],['M',116,73,24],['L',120,75,25],['XL',124,77,26],['XXL',126,79,27]]},\n    'muscle-compression-tees': {name:'Muscle \/ Compression Tee', fit:'fitted', metric:'chest',\n      cols:['Chest','Length','Sleeve'],\n      rows:[['XS',80,63,27],['S',84,65,28],['M',88,67,29],['L',92,69,30],['XL',96,71,31],['XXL',100,73,32]]},\n    'longsleeve-compression-tee': {name:'Longsleeve Compression Tee', fit:'fitted', metric:'chest',\n      cols:['Chest','Length','Sleeve'],\n      rows:[['XS',105,70,63],['S',107,72,64],['M',112,74,65],['L',117,76,66],['XL',122,78,67],['XXL',127,80,68]]},\n\n    'legacy-liner-shorts': {name:'Legacy Liner Shorts', fit:'regular', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',70,45,100],['M',74,46,104],['L',78,47,108],['XL',82,48,112],['XXL',86,49,116]]},\n    'vital-running-shorts': {name:'Vital Running Shorts', fit:'regular', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',72,45,101],['M',74,46,104],['L',76,47,108],['XL',78,48,112],['XXL',80,49,116]]},\n    'mesh-shorts': {name:'Mesh Shorts', fit:'athletic \/ true to size', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',71.1,39.4,105.9],['M',74.9,40.6,110],['L',78,41.4,113.8],['XL',81,42.4,117.9],['XXL',85.1,43.4,121.9]]},\n    'stride-vantage-shorts': {name:'Stride \/ Vantage Shorts', fit:'lined', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['XS',71,33,49],['S',74,34.5,51],['M',76,36,53],['L',78,38,55],['XL',83,40,57],['XXL',86,42,59]]},\n    'defy-cotton-shorts': {name:'Defy Cotton Shorts', fit:'regular', metric:'waist',\n      note:'Length \u0026 hip on this chart look swapped from Molly — confirm before going live.',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',72,108,42],['M',76,112,43],['L',80,116,44],['XL',84,122,45.5],['XXL',88,128,47]]},\n    'sweatpants': {name:'Sweatpants', fit:'relaxed', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',66,99,58],['M',69,101,60],['L',72,103,62],['XL',75,105,64],['XXL',78,107,66]]},\n\n    'revival-bra': {name:'Revival Bra', fit:'compression', metric:'bust',\n      cols:['Bust','Length','Hem'],\n      rows:[['S',68,33,56],['M',72,34,60],['L',76,35,64]]},\n    'revival-booty-shorts': {name:'Revival Booty Shorts', fit:'high-waist', metric:'waist',\n      cols:['Waist','Length','Hip'],\n      rows:[['S',58,34,72],['M',62,36,76],['L',68,38,80]]},\n    'serenity-leggings': {name:'Serenity Leggings', fit:'high-stretch', metric:'waist', flat:true,\n      note:'High-stretch. Waist \u0026 hip are relaxed (laid-flat) numbers — the fabric expands well past these.',\n      cols:['Waist','Length','Hip'],\n      rows:[['XS',25.5,78,31],['S',28,79,33.5],['M',30.5,80,36],['L',33,81,38.5],['XL',35.5,82,41]]},\n\n    'core-bratop': {name:'Bra \/ Top', fit:'true to size', metric:'bust',\n      cols:['Bust','UK','US'],\n      rows:[['XS',86.4,'4-6','0-2'],['S',91.4,'8-10','4-6'],['M',96.5,'12-14','8-10'],['L',102.1,'16-18','12-14'],['XL',106.9,'20-22','16-18']]},\n    'core-shorts': {name:'Shorts', fit:'true to size', metric:'waist',\n      cols:['Waist','Hip','Inseam','UK','US'],\n      rows:[['XS',63.5,88.9,11.4,'4-6','0-2'],['S',69.9,96.5,11.4,'8-10','4-6'],['M',76.2,104.1,11.4,'12-14','8-10'],['L',83.8,110.5,11.4,'16-18','12-14'],['XL',92.7,118.1,11.4,'20-22','16-18']]},\n    'core-leggings': {name:'Leggings', fit:'true to size', metric:'waist',\n      cols:['Waist','Hip','UK','US'],\n      rows:[['XS',63.5,88.9,'4-6','0-2'],['S',69.9,96.5,'8-10','4-6'],['M',76.2,104.1,'12-14','8-10'],['L',83.8,110.5,'16-18','12-14'],['XL',92.7,118.1,'20-22','16-18']]},\n    'core-flares': {name:'Flare Leggings', fit:'true to size', metric:'waist',\n      cols:['Waist','Hip','Inside leg','UK','US'],\n      rows:[['XS',63.5,88.9,71.9,'4-6','0-2'],['S',69.9,96.5,72.9,'8-10','4-6'],['M',76.2,104.1,73.9,'12-14','8-10'],['L',83.8,110.5,74.9,'16-18','12-14'],['XL',92.7,118.1,75.9,'20-22','16-18']]},\n    'ambition-zip': {name:'Zip Up', fit:'relaxed', metric:'chest',\n      note:'Estimated from a standard zip-up block \\u2014 confirm against your sample before relying on it.',\n      cols:['Chest','Length','Sleeve'],\n      rows:[['S',112,68,63],['M',118,70,64],['L',124,72,65],['XL',130,74,66],['XXL',136,76,67]]}\n  };\n\n  var CSS = ''\n  + '@import url(\\'https:\/\/fonts.googleapis.com\/css2?family=Archivo:wght@400;500;600;800\u0026display=swap\\');'\n  + '.vf-size{--paper:#0b0b0b;--card:#171717;--ink:#ffffff;--muted:#a1a099;--line:#2a2a28;'\n  + '--line-strong:#3d3d3a;--accent:#5c78ff;--accent-soft:#1b2350;'\n  + \"--font:'Archivo',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;\"\n  + 'font-family:var(--font);color:var(--ink);background:var(--paper);line-height:1.4;'\n  + '-webkit-font-smoothing:antialiased;box-sizing:border-box;max-width:620px;margin:22px auto;'\n  + 'padding:clamp(16px,4vw,28px);border:1px solid var(--line-strong);border-radius:3px;}'\n  + '.vf-size *,.vf-size *::before,.vf-size *::after{box-sizing:border-box;}'\n  + '.vf-size button{font-family:inherit;cursor:pointer;}'\n  + '.vf-hd{display:flex;justify-content:space-between;align-items:flex-start;gap:14px;flex-wrap:wrap;'\n  + 'border-bottom:2px solid var(--ink);padding-bottom:12px;}'\n  + '.vf-ey{font-weight:800;letter-spacing:.14em;font-size:11px;text-transform:uppercase;color:var(--muted);}'\n  + '.vf-ey b{color:var(--accent);}'\n  + '.vf-nm{font-weight:800;font-size:clamp(22px,5vw,30px);line-height:1;letter-spacing:-.01em;margin:3px 0 0;}'\n  + '.vf-fit{font-size:12px;color:var(--muted);border:1px solid var(--line-strong);padding:3px 9px;'\n  + 'border-radius:2px;white-space:nowrap;margin-top:2px;}'\n  + '.vf-units{display:inline-flex;align-items:center;gap:16px;flex-shrink:0;}'\n  + '.vf-u{font-size:12px;font-weight:700;letter-spacing:.1em;color:var(--muted);cursor:pointer;'\n  + 'padding-bottom:3px;border-bottom:2px solid transparent;user-select:none;line-height:1;}'\n  + '.vf-u[aria-pressed=\"true\"]{color:var(--ink);border-bottom-color:var(--accent);}'\n  + '.vf-find{background:var(--card);border:1.5px solid var(--ink);border-radius:3px;padding:16px;margin-top:18px;}'\n  + '.vf-fh{display:flex;justify-content:space-between;align-items:baseline;gap:8px;flex-wrap:wrap;}'\n  + '.vf-ft{font-weight:800;font-size:14px;}'\n  + '.vf-ask{font-size:13px;color:var(--muted);} .vf-ask b{color:var(--ink);font-weight:600;}'\n  + '.vf-ro{display:flex;align-items:flex-end;gap:14px;margin:14px 0 2px;flex-wrap:wrap;}'\n  + '.vf-num{display:flex;align-items:baseline;border:1.5px solid var(--line-strong);border-radius:2px;'\n  + 'background:var(--paper);padding:6px 9px;}'\n  + '.vf-num input{all:unset;width:82px;font-family:inherit;font-weight:800;font-size:23px;color:var(--ink);'\n  + 'font-variant-numeric:tabular-nums;}'\n  + '.vf-num span{font-size:12px;font-weight:600;color:var(--muted);margin-left:2px;}'\n  + '.vf-res{flex:1;min-width:140px;font-size:13px;color:var(--muted);}'\n  + '.vf-big{display:inline-block;background:var(--accent);color:#fff;font-weight:800;font-size:14px;'\n  + 'padding:4px 12px;border-radius:2px;letter-spacing:.03em;}'\n  + '.vf-rn{margin-top:6px;font-size:12px;color:var(--muted);}'\n  + '.vf-ruler{margin-top:12px;}'\n  + '.vf-ticks{position:relative;height:15px;margin:0 8px 2px;}'\n  + '.vf-ticks i{position:absolute;top:0;width:1px;background:var(--line-strong);}'\n  + '.vf-ticks i.maj{height:15px;background:var(--muted);} .vf-ticks i.min{height:7px;}'\n  + '.vf-rg{-webkit-appearance:none;appearance:none;width:100%;height:4px;background:var(--ink);outline:none;margin:2px 0 0;}'\n  + '.vf-rg::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:20px;height:28px;'\n  + 'background:var(--accent);border:2px solid #fff;border-radius:2px;box-shadow:0 1px 3px rgba(0,0,0,.25);}'\n  + '.vf-rg::-moz-range-thumb{width:20px;height:28px;background:var(--accent);border:2px solid #fff;border-radius:2px;}'\n  + '.vf-scale{display:flex;justify-content:space-between;color:var(--muted);font-size:11px;'\n  + 'font-variant-numeric:tabular-nums;margin-top:5px;padding:0 2px;}'\n  + '.vf-tw{margin-top:18px;overflow-x:auto;-webkit-overflow-scrolling:touch;}'\n  + '.vf-tb{width:100%;border-collapse:collapse;font-variant-numeric:tabular-nums;min-width:300px;}'\n  + '.vf-tb th{font-size:10px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);border:0;'\n  + 'text-align:right;padding:0 0 9px;border-bottom:2px solid var(--ink);}'\n  + '.vf-tb th:first-child{text-align:left;}'\n  + '.vf-tb td{font-size:14px;padding:11px 0;border:0;border-bottom:1px solid var(--line);text-align:right;font-weight:500;}'\n  + '.vf-tb td:first-child{text-align:left;font-weight:800;font-size:15px;}'\n  + '.vf-tb tr.on td{background:var(--accent-soft);border-bottom-color:var(--accent);}'\n  + '.vf-tb tr.on td:first-child{color:var(--accent);position:relative;}'\n  + '.vf-tb tr.on td:first-child::before{content:\"\";position:absolute;left:-14px;top:0;bottom:0;width:4px;background:var(--accent);}'\n  + '.vf-cap{font-size:11px;color:var(--muted);margin-top:9px;text-align:right;}'\n  + '.vf-note{font-size:12px;color:var(--muted);margin-top:10px;font-style:italic;}'\n  + '.vf-how{margin-top:16px;border-top:1px solid var(--line);padding-top:14px;}'\n  + '.vf-how summary{font-size:13px;font-weight:600;cursor:pointer;list-style:none;display:flex;align-items:center;gap:8px;}'\n  + '.vf-how summary::-webkit-details-marker{display:none;}'\n  + '.vf-how summary::before{content:\"+\";width:15px;font-weight:800;color:var(--accent);}'\n  + '.vf-how[open] summary::before{content:\"\\\\2013\";}'\n  + '.vf-how ul{margin:11px 0 0;padding:0;list-style:none;font-size:13px;color:var(--muted);}'\n  + '.vf-how li{padding:4px 0 4px 15px;position:relative;} .vf-how li b{color:var(--ink);font-weight:600;}'\n  + '.vf-how li::before{content:\"\";position:absolute;left:0;top:11px;width:6px;height:1px;background:var(--muted);}'\n  + '@media(max-width:560px){'\n  + '.vf-size{padding:16px;}'\n  + '.vf-hd{padding-bottom:11px;}'\n  + '.vf-nm{font-size:21px;}'\n  + '.vf-find{padding:14px;}'\n  + '.vf-fh{gap:4px;}'\n  + '.vf-num input{width:72px;font-size:20px;}'\n  + '.vf-num span{font-size:11px;}'\n  + '.vf-ft{font-size:13px;} .vf-ask{font-size:12px;}'\n  + '.vf-res{min-width:120px;font-size:12px;}'\n  + '.vf-tb{min-width:0;} .vf-tw{overflow-x:visible;}'\n  + '.vf-tb td{font-size:13px;padding:10px 0;} .vf-tb td:first-child{font-size:14px;}'\n  + '.vf-tb th{font-size:9px;letter-spacing:.06em;}'\n  + '.vf-cap{font-size:10px;}'\n  + '.vf-tb tr.on td:first-child::before{left:-10px;width:3px;}'\n  + '}';\n\n  function injectCSS(){\n    if(document.getElementById('vf-size-css'))return;\n    var s=document.createElement('style'); s.id='vf-size-css'; s.textContent=CSS;\n    document.head.appendChild(s);\n  }\n\n  function init(mount){\n    var chart = CHARTS[mount.getAttribute('data-chart')];\n    if(!chart){ mount.innerHTML='\u003cp style=\"font:13px sans-serif;color:#a00\"\u003eSize chart not found.\u003c\/p\u003e'; return; }\n    var name = mount.getAttribute('data-name') || chart.name;\n\n    var unit='in', userCm=null;\n    var toIn=function(cm){return Math.round((cm\/2.54)*10)\/10;};\n    var disp=function(cm){return unit==='in'?toIn(cm):cm;};\n    var eGirth=function(r){return chart.flat?r[1]*2:r[1];};\n\n    mount.innerHTML=''\n      +'\u003cdiv class=\"vf-hd\"\u003e\u003cdiv\u003e'\n      +'\u003cdiv class=\"vf-ey\"\u003eVisionary \u003cb\u003e\/\u003c\/b\u003e size guide\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-nm\"\u003e\u003c\/div\u003e\u003cdiv class=\"vf-fit\"\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-units\" role=\"group\" aria-label=\"Units\"\u003e'\n      +'\u003cspan class=\"vf-u\" data-u=\"in\" role=\"button\" tabindex=\"0\" aria-pressed=\"true\"\u003eIN\u003c\/span\u003e'\n      +'\u003cspan class=\"vf-u\" data-u=\"cm\" role=\"button\" tabindex=\"0\" aria-pressed=\"false\"\u003eCM\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-find\"\u003e\u003cdiv class=\"vf-fh\"\u003e\u003cdiv class=\"vf-ft\"\u003eFind your fit\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-ask\"\u003eEnter your \u003cb class=\"vf-metric\"\u003e\u003c\/b\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-ro\"\u003e\u003cdiv class=\"vf-num\"\u003e\u003cinput class=\"vf-input\" type=\"number\" inputmode=\"decimal\" step=\"0.5\" value=\"0\"\u003e\u003cspan class=\"vf-iu\"\u003ein\u003c\/span\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-res\"\u003eWe recommend \u003cspan class=\"vf-big vf-rec\"\u003e\\u2013\u003c\/span\u003e\u003cdiv class=\"vf-rn\"\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-ruler\"\u003e\u003cdiv class=\"vf-ticks\"\u003e\u003c\/div\u003e'\n      +'\u003cinput class=\"vf-rg\" type=\"range\" step=\"0.5\"\u003e\u003cdiv class=\"vf-scale\"\u003e\u003cspan class=\"vf-mn\"\u003e\u003c\/span\u003e\u003cspan class=\"vf-mx\"\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-tw\"\u003e\u003ctable class=\"vf-tb\"\u003e\u003cthead\u003e\u003ctr class=\"vf-th\"\u003e\u003c\/tr\u003e\u003c\/thead\u003e\u003ctbody class=\"vf-tbd\"\u003e\u003c\/tbody\u003e\u003c\/table\u003e\u003cdiv class=\"vf-cap\"\u003e\u003c\/div\u003e\u003c\/div\u003e'\n      +'\u003cdiv class=\"vf-note\"\u003e\u003c\/div\u003e'\n      +'\u003cdetails class=\"vf-how\"\u003e\u003csummary\u003eHow to measure\u003c\/summary\u003e\u003cul\u003e'\n      +'\u003cli\u003e\u003cb\u003eChest \/ bust\u003c\/b\u003e \\u2014 around the fullest part, tape level under the arms, relaxed.\u003c\/li\u003e'\n      +'\u003cli\u003e\u003cb\u003eWaist\u003c\/b\u003e \\u2014 around your natural waistline, roughly at the belly button.\u003c\/li\u003e'\n      +'\u003cli\u003e\u003cb\u003eLength\u003c\/b\u003e \\u2014 from the highest shoulder seam straight down to the hem.\u003c\/li\u003e'\n      +'\u003cli\u003eBetween sizes? Size up for a looser fit, down for a closer one.\u003c\/li\u003e\u003c\/ul\u003e\u003c\/details\u003e';\n\n    var q=function(s){return mount.querySelector(s);};\n    q('.vf-nm').textContent=name;\n    q('.vf-fit').textContent=chart.fit;\n    q('.vf-metric').textContent=chart.metric;\n\n    function recommend(cm){\n      if(cm==null)return null; var best=null,bd=1e9;\n      chart.rows.forEach(function(r){var d=Math.abs(eGirth(r)-cm); if(d\u003cbd){bd=d;best=r[0];}});\n      return best;\n    }\n    function girthRange(){\n      var v=chart.rows.map(eGirth); return [Math.round(Math.min.apply(null,v)-8), Math.round(Math.max.apply(null,v)+8)];\n    }\n    function ticks(mn,mx){\n      var t=q('.vf-ticks'); t.innerHTML=''; var span=mx-mn; if(span\u003c=0)return;\n      var step=unit==='in'?1:2, maj=unit==='in'?5:10;\n      for(var v=Math.ceil(mn); v\u003c=mx; v+=step){\n        var i=document.createElement('i'); i.className=(Math.round(v)%maj===0)?'maj':'min';\n        i.style.left=((v-mn)\/span*100)+'%'; t.appendChild(i);\n      }\n    }\n    function table(){\n      var b=q('.vf-tbd'); b.innerHTML=''; var rec=recommend(userCm);\n      chart.rows.forEach(function(r){\n        var tr=document.createElement('tr'); if(r[0]===rec)tr.className='on';\n        var td0=document.createElement('td'); td0.textContent=r[0]; tr.appendChild(td0);\n        for(var i=1;i\u003cr.length;i++){var td=document.createElement('td'); td.textContent=(typeof r[i]==='number')?disp(r[i]):r[i]; tr.appendChild(td);}\n        b.appendChild(tr);\n      });\n    }\n    function rec(){\n      var s=recommend(userCm); q('.vf-rec').textContent=s||'\\u2013'; var n=q('.vf-rn');\n      if(!s){n.textContent='';return;}\n      var row=chart.rows.filter(function(r){return r[0]===s;})[0], g=eGirth(row), c=userCm-g, m;\n      if(Math.abs(c)\u003c=2)m='Right in range for this piece.';\n      else if(c\u003e0)m='Near the top of this size \\u2014 size up for more room.';\n      else m='Comfortable, with a little room to spare.';\n      n.textContent=m;\n    }\n    function render(){\n      var thr=q('.vf-th'); thr.innerHTML='\u003cth\u003eSize\u003c\/th\u003e';\n      chart.cols.forEach(function(c){var th=document.createElement('th');th.textContent=c;thr.appendChild(th);});\n      var rr=girthRange(), mn=unit==='in'?toIn(rr[0]):rr[0], mx=unit==='in'?toIn(rr[1]):rr[1];\n      var rg=q('.vf-rg'); rg.min=mn; rg.max=mx;\n      q('.vf-mn').textContent=mn+(unit==='in'?'\"':''); q('.vf-mx').textContent=mx+(unit==='in'?'\"':'');\n      q('.vf-iu').textContent=unit==='in'?'in':'cm';\n      if(userCm==null){var mid=chart.rows[Math.floor(chart.rows.length\/2)]; userCm=eGirth(mid);}\n      var ud=disp(userCm); q('.vf-input').value=ud; rg.value=Math.min(mx,Math.max(mn,ud));\n      ticks(mn,mx); table(); rec();\n      q('.vf-cap').textContent='Measurements in '+(unit==='in'?'inches':'centimetres')+'.';\n      q('.vf-note').textContent=chart.note?('* '+chart.note):'';\n    }\n\n    mount.querySelectorAll('.vf-u').forEach(function(bt){\n      var go=function(){ unit=bt.getAttribute('data-u');\n        mount.querySelectorAll('.vf-u').forEach(function(x){x.setAttribute('aria-pressed',x===bt?'true':'false');});\n        render(); };\n      bt.onclick=go;\n      bt.onkeydown=function(e){ if(e.key==='Enter'||e.key===' '){e.preventDefault();go();} };\n    });\n    q('.vf-rg').addEventListener('input',function(){var v=parseFloat(this.value);userCm=unit==='in'?v*2.54:v;q('.vf-input').value=v;table();rec();});\n    q('.vf-input').addEventListener('input',function(){var v=parseFloat(this.value);if(isNaN(v))return;userCm=unit==='in'?v*2.54:v;\n      var rg=q('.vf-rg');rg.value=Math.min(parseFloat(rg.max),Math.max(parseFloat(rg.min),v));table();rec();});\n\n    render(); mount.setAttribute('data-vf-ready','1');\n  }\n\n  function scan(){ injectCSS(); document.querySelectorAll('.vf-size[data-chart]:not([data-vf-ready])').forEach(init); }\n  window.__vfSizeGuide={scan:scan,charts:CHARTS};\n  if(document.readyState==='loading') document.addEventListener('DOMContentLoaded',scan); else scan();\n})();\n\u003c\/script\u003e\n\u003c!-- VF-SIZE-GUIDE END --\u003e","brand":"Visionary Fitness Store","offers":[{"title":"S","offer_id":50013549068526,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"M","offer_id":50013549101294,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"L","offer_id":50013549134062,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"XL","offer_id":50013549166830,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"XXL","offer_id":50013549199598,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0796\/2578\/1486\/files\/hf_20261111_054819_ac52c394-76c1-4c1f-898d-553ed2793ca2.png?v=1794376907"},{"product_id":"eclipse-mesh-short-5-copy","title":"Eclipse Mesh Short 5''","description":"\u003cp\u003eBuilt for the ones who show up. Breathable single-layer mesh that dries fast and holds its shape session after session.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e 100% Polyester | 250gsm | Single layer mesh\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Standard | True to size\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eModel:\u003c\/strong\u003e 6'0\" | 200 lbs | Wearing size Large\u003c\/p\u003e","brand":"Visionary Fitness Store","offers":[{"title":"S","offer_id":50019418177774,"sku":null,"price":35.0,"currency_code":"USD","in_stock":false},{"title":"M","offer_id":50019418210542,"sku":null,"price":35.0,"currency_code":"USD","in_stock":false},{"title":"L","offer_id":50019418243310,"sku":null,"price":35.0,"currency_code":"USD","in_stock":false},{"title":"XL","offer_id":50019418276078,"sku":null,"price":35.0,"currency_code":"USD","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0796\/2578\/1486\/files\/hf_20261111_152457_e0ad7638-5337-478f-8d58-528a44503637.png?v=1794411258"},{"product_id":"sacrifice-5-mesh-short-1","title":"SACRIFICE 5\" MESH SHORT","description":"\u003cp\u003eBuilt for the ones who show up. Breathable single-layer mesh that dries fast and holds its shape session after session.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e 100% Polyester | 250gsm | Single layer mesh\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Standard | True to size\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eModel:\u003c\/strong\u003e 6'0\" | 200 lbs | Wearing size Large\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eMade to Order\u003c\/strong\u003e — this piece is produced just for you. Please see our \u003ca href=\"https:\/\/visionaryfitness.shop\/policies\/shipping-policy\" target=\"_blank\" rel=\"noopener\"\u003eShipping Policy\u003c\/a\u003e for current production \u0026amp; delivery timelines.\u003c\/p\u003e","brand":"Visionary Fitness Store","offers":[{"title":"S \/ White","offer_id":50019610820846,"sku":null,"price":35.0,"currency_code":"USD","in_stock":false},{"title":"S \/ Black","offer_id":50019610853614,"sku":null,"price":35.0,"currency_code":"USD","in_stock":false},{"title":"M \/ White","offer_id":50019610886382,"sku":null,"price":35.0,"currency_code":"USD","in_stock":false},{"title":"M \/ Black","offer_id":50019610919150,"sku":null,"price":35.0,"currency_code":"USD","in_stock":false},{"title":"L \/ White","offer_id":50019610951918,"sku":null,"price":35.0,"currency_code":"USD","in_stock":false},{"title":"L \/ Black","offer_id":50019610984686,"sku":null,"price":35.0,"currency_code":"USD","in_stock":false},{"title":"XL \/ White","offer_id":50019611017454,"sku":null,"price":35.0,"currency_code":"USD","in_stock":false},{"title":"XL \/ Black","offer_id":50019611050222,"sku":null,"price":35.0,"currency_code":"USD","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0796\/2578\/1486\/files\/hf_20261111_155908_5c305d3d-ab9f-4a9a-a180-e21b48b0fe94.png?v=1794412958"}],"url":"https:\/\/visionaryfitness.shop\/collections\/mens-training-shorts.oembed","provider":"Visionary Fitness ","version":"1.0","type":"link"}