{"title":"MEN'S LIFESTYLE","description":"\u003cp\u003eMen's athleisure that goes from the gym to the street. Oversized tees, quarter zips, joggers and hoodies.\u003c\/p\u003e","products":[{"product_id":"blackout-oversized-tee-design-2","title":"SEEK DISCOMFORT OVERSIZED TEE","description":"\u003cp\u003eHeavyweight cotton. Drop shoulder. Built to last, holding its shape wash after wash.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e 100% Cotton | Heavyweight\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Oversized drop shoulder | Size down for a structured fit\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":47694333444334,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"M \/ Black","offer_id":47694333509870,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"L \/ Black","offer_id":47694333575406,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"XL \/ Black","offer_id":47694333640942,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"XXL \/ Black","offer_id":47694333706478,"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_170331_1ace5dee-4010-43b5-8a60-b7be0a453980.png?v=1794421200"},{"product_id":"blackout-oversized-tee-design-5","title":"STAPLE OVERSIZED TEE","description":"\u003cp\u003eHeavyweight cotton. Drop shoulder. Built to last, holding its shape wash after wash.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e 100% Cotton | Heavyweight\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Oversized drop shoulder | Size down for a structured fit\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 \/ Tan","offer_id":47694333739246,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"M \/ Tan","offer_id":47694333772014,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"L \/ Tan","offer_id":47694333804782,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"XL \/ Tan","offer_id":47694333837550,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"XXL \/ Tan","offer_id":47694333870318,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0796\/2578\/1486\/files\/7_05803676-1633-4996-a144-01fb04386609.jpg?v=1771887490"},{"product_id":"genesis-hoodie","title":"Genesis Hoodie","description":"\u003cp\u003eHeavyweight fleece, oversized silhouette, built to be worn for years.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e Heavyweight fleece blend\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Oversized. Size down for a structured fit.\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":"Black","offer_id":47694334689518,"sku":null,"price":75.0,"currency_code":"USD","in_stock":true},{"title":"Gun metal","offer_id":47694334820590,"sku":null,"price":75.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0796\/2578\/1486\/files\/hf_20261111_142402_ca895525-b602-4fc4-a922-2e725279cc3a.png?v=1794407790"},{"product_id":"sacrifice-oversized-tee","title":"Sacrifice Oversized Tee","description":"\u003cp\u003eHeavyweight cotton. Drop shoulder. Built to last, holding its shape wash after wash.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e 100% Cotton | Heavyweight\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Oversized drop shoulder | Size down for a structured fit\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":47694335246574,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"S \/ Black","offer_id":47694335312110,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"M \/ Black","offer_id":47694335377646,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"L \/ Black","offer_id":47694335443182,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"XL \/ Black","offer_id":47694335508718,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"XXL \/ Black","offer_id":47694335574254,"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_153714_1566a6a1-e05f-4522-bc71-2bb9ba0570ba.png?v=1794411750"},{"product_id":"vision-oversized-tee","title":"Vision Oversized Tee","description":"\u003cp\u003eHeavyweight cotton. Drop shoulder. Built to last, holding its shape wash after wash.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e 100% Cotton | Heavyweight\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Oversized drop shoulder | Size down for a structured fit\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":47694336131310,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"S \/ Black","offer_id":47694336196846,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"M \/ Black","offer_id":47694336262382,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"L \/ Black","offer_id":47694336327918,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"XL \/ Black","offer_id":47694336393454,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"XXL \/ Black","offer_id":47694336458990,"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_161830_4bf12da9-8b7c-48e5-af32-8b2e933618ea.png?v=1794414240"},{"product_id":"vf-oversized-tee","title":"Vital Oversized Tee","description":"\u003cp\u003eHeavyweight cotton. Drop shoulder. Built to last, holding its shape wash after wash.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e 100% Cotton | Heavyweight\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Oversized drop shoulder | Size down for a structured fit\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 \/ Tan","offer_id":47694336884974,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"S \/ Tan","offer_id":47694336950510,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"M \/ Tan","offer_id":47694337016046,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"L \/ Tan","offer_id":47694337081582,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"XL \/ Tan","offer_id":47694337147118,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"XXL \/ Tan","offer_id":47694337212654,"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_182557_3bce2cd7-eb0c-46aa-ba0b-f1f5423d2894.png?v=1794421663"},{"product_id":"defy-oversized-tee","title":"DEFY OVERSIZED TEE","description":"\u003cp\u003eHeavyweight cotton. Drop shoulder. Built to last, holding its shape wash after wash.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e 100% Cotton | Heavyweight\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Oversized drop shoulder | Size down for a structured fit\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 \/ Midnight Black","offer_id":47694337573102,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"S \/ Midnight Black","offer_id":47694337671406,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"M \/ Midnight Black","offer_id":47694337769710,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"L \/ Midnight Black","offer_id":47694337868014,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"XL \/ Midnight Black","offer_id":47694337966318,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"XXL \/ Midnight Black","offer_id":47694338064622,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0796\/2578\/1486\/files\/23.png?v=1773298414"},{"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":"oversized-tee-copy","title":"\"I AM\" Oversized Tee","description":"\u003cp\u003e\u003cstrong\u003eAbout This Piece\u003c\/strong\u003e\u003c\/p\u003e\n\n\u003cp\u003eHeavyweight cotton. Drop shoulder. Built to last. Our oversized tees are cut with a structured drop shoulder silhouette that holds its shape wash after wash. Substantial fabric, clean construction, and a fit that works as hard outside the gym as you do inside it. Size down if you prefer a relaxed structured look.\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e 100% Cotton | Heavyweight\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Oversized drop shoulder | Size down for a structured fit\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=\"oversized-tees\" data-name='\"I AM\" OVERSIZED TEE'\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 \/ Stone Olive","offer_id":47763574194414,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"S \/ Stone Olive","offer_id":47763574292718,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"M \/ Stone Olive","offer_id":47763574391022,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"L \/ Stone Olive","offer_id":47763574489326,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"XL \/ Stone Olive","offer_id":47763574587630,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"XXL \/ Stone Olive","offer_id":47763574685934,"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_224512_5237fd27-0f1e-4de4-b64f-e1a5e035374f.png?v=1794437541"},{"product_id":"retribution-oversized-tee","title":"“Retribution” Oversized Tee","description":"\u003cp\u003e\u003cstrong\u003eAbout This Piece\u003c\/strong\u003e\u003c\/p\u003e\n\n\u003cp\u003eHeavyweight cotton. Drop shoulder. Built to last. Our oversized tees are cut with a structured drop shoulder silhouette that holds its shape wash after wash. Substantial fabric, clean construction, and a fit that works as hard outside the gym as you do inside it. Size down if you prefer a relaxed structured look.\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e 100% Cotton | Heavyweight\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Oversized drop shoulder | Size down for a structured fit\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=\"oversized-tees\" data-name=\"RETRIBUTION OVERSIZED TEE\"\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 \/ Stone Olive","offer_id":47763578290414,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"S \/ Stone Olive","offer_id":47763578388718,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"M \/ Stone Olive","offer_id":47763578487022,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"L \/ Stone Olive","offer_id":47763578585326,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"XL \/ Stone Olive","offer_id":47763578683630,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"XXL \/ Stone Olive","offer_id":47763578781934,"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_223133_5c045349-9873-4b98-a151-ba204cc2203d.png?v=1794440010"},{"product_id":"fear-average-oversized-tee","title":"\"Fear Average\" Oversized Tee","description":"\u003cp\u003e\u003cstrong\u003eAbout This Piece\u003c\/strong\u003e\u003c\/p\u003e\n\n\u003cp\u003eHeavyweight cotton. Drop shoulder. Built to last. Our oversized tees are cut with a structured drop shoulder silhouette that holds its shape wash after wash. Substantial fabric, clean construction, and a fit that works as hard outside the gym as you do inside it. Size down if you prefer a relaxed structured look.\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e 100% Cotton | Heavyweight\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Oversized drop shoulder | Size down for a structured fit\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=\"oversized-tees\" data-name=\"FEAR AVERAGE OVERSIZED TEE\"\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 \/ Stone Olive","offer_id":47763580158190,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"S \/ Stone Olive","offer_id":47763580256494,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"M \/ Stone Olive","offer_id":47763580354798,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"L \/ Stone Olive","offer_id":47763580453102,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"XL \/ Stone Olive","offer_id":47763580551406,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"XXL \/ Stone Olive","offer_id":47763580649710,"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_223647_96a6a506-99d9-495c-825b-6765a41f646f.png?v=1794438026"},{"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":"vantage-sweatpants","title":"Vantage Sweatpants","description":"\u003cp\u003e\u003cstrong\u003eAbout This Piece\u003c\/strong\u003e\u003c\/p\u003e\n\n\u003cp\u003eOff-duty, done right. Heavyweight fleece with a relaxed fit and a tapered leg that keeps it clean. Warm enough for the walk in, comfortable enough to never take off. The pair you keep reaching for. Size down for a more fitted look.\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e Heavyweight fleece blend\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Relaxed | Tapered leg | Size down for a fitted look\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=\"sweatpants\" data-name=\"Vantage Sweatpants\"\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 \/ Cream","offer_id":49394979373294,"sku":"VF-VTG-SWP-CRM-S","price":70.0,"currency_code":"USD","in_stock":true},{"title":"M \/ Cream","offer_id":49394979471598,"sku":"VF-VTG-SWP-CRM-M","price":70.0,"currency_code":"USD","in_stock":true},{"title":"L \/ Cream","offer_id":49394979569902,"sku":"VF-VTG-SWP-CRM-L","price":70.0,"currency_code":"USD","in_stock":true},{"title":"XL \/ Cream","offer_id":49394979668206,"sku":"VF-VTG-SWP-CRM-XL","price":70.0,"currency_code":"USD","in_stock":true},{"title":"XXL \/ Cream","offer_id":49394979766510,"sku":"VF-VTG-SWP-CRM-2XL","price":70.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0796\/2578\/1486\/files\/Vantage_Sweatpants_Heather_Grey.png?v=1786398028"},{"product_id":"athlete-oversized-tee","title":"''More Than An Athlete'' Oversized Tee","description":"\u003cp\u003e\u003cstrong\u003eAbout This Piece\u003c\/strong\u003e\u003c\/p\u003e\n\n\u003cp\u003eHeavyweight cotton with a structured drop shoulder that holds its shape wash after wash. The Athlete tee wears clean on the floor and everywhere after, substantial fabric and a boxy oversized cut that lets the work speak for itself. Size down if you prefer a more structured fit.\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e 100% Cotton | Heavyweight\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Oversized drop shoulder | Size down for a structured fit\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=\"oversized-tees\" data-name=\"More Than An Athlete Oversized Tee\"\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":49416481767662,"sku":"VF-ATH-OTEE-BLK-S","price":45.0,"currency_code":"USD","in_stock":true},{"title":"M \/ Black","offer_id":49416481833198,"sku":"VF-ATH-OTEE-BLK-M","price":45.0,"currency_code":"USD","in_stock":true},{"title":"L \/ Black","offer_id":49416481898734,"sku":"VF-ATH-OTEE-BLK-L","price":45.0,"currency_code":"USD","in_stock":true},{"title":"XL \/ Black","offer_id":49416481964270,"sku":"VF-ATH-OTEE-BLK-XL","price":45.0,"currency_code":"USD","in_stock":true},{"title":"XXL \/ Black","offer_id":49416482029806,"sku":"VF-ATH-OTEE-BLK-2XL","price":45.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0796\/2578\/1486\/files\/hf_20261111_223333_9fb72800-d1df-4af7-bf98-fea89614df5e.png?v=1794438466"},{"product_id":"visionary-lifting-club-oversized-tee","title":"\"Visionary Lifting Club\" Oversized Tee","description":"\u003cp\u003e\u003cstrong\u003eAbout This Piece\u003c\/strong\u003e\u003c\/p\u003e\n\n\u003cp\u003eMembers welcome, effort required. Heavyweight cotton, drop shoulder, and a relaxed oversized cut built for the gym and the rest of your day. The Visionary Lifting Club tee holds its shape and its statement wash after wash. Size down for a more structured fit.\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e 100% Cotton | Heavyweight\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Oversized drop shoulder | Size down for a structured fit\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=\"oversized-tees\" data-name=\"Visionary Lifting Club Oversized Tee\"\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":49416482750702,"sku":"VF-VLC-OTEE-BLK-S","price":45.0,"currency_code":"USD","in_stock":true},{"title":"M \/ Black","offer_id":49416482816238,"sku":"VF-VLC-OTEE-BLK-M","price":45.0,"currency_code":"USD","in_stock":true},{"title":"L \/ Black","offer_id":49416482881774,"sku":"VF-VLC-OTEE-BLK-L","price":45.0,"currency_code":"USD","in_stock":true},{"title":"XL \/ Black","offer_id":49416482947310,"sku":"VF-VLC-OTEE-BLK-XL","price":45.0,"currency_code":"USD","in_stock":true},{"title":"XXL \/ Black","offer_id":49416483012846,"sku":"VF-VLC-OTEE-BLK-2XL","price":45.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0796\/2578\/1486\/files\/hf_20261111_221138_c76a58c0-e7aa-401e-a111-35339a255d89.png?v=1794435221"},{"product_id":"ambition-oversized-tee","title":"Ambition Oversized Tee","description":"\u003cp\u003e\u003cstrong\u003eHeavyweight. Street-ready.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eA heavyweight 100% cotton oversized tee with a dropped shoulder and a boxy, lived-in drape. Built to layer and built to last.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eFeatures\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eHeavyweight 100% cotton\u003c\/li\u003e\n\u003cli\u003eOversized drop-shoulder fit\u003c\/li\u003e\n\u003cli\u003eBoxy, structured drape\u003c\/li\u003e\n\u003cli\u003eRibbed crew neck\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e 100% cotton, heavyweight\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Oversized drop shoulder — size down for a closer fit\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=\"oversized-tees\" data-name=\"Ambition Oversized Tee\"\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":"XS","offer_id":49925527601390,"sku":null,"price":50.0,"currency_code":"USD","in_stock":true},{"title":"S","offer_id":49925527634158,"sku":null,"price":50.0,"currency_code":"USD","in_stock":true},{"title":"M","offer_id":49925527666926,"sku":null,"price":50.0,"currency_code":"USD","in_stock":true},{"title":"L","offer_id":49925527699694,"sku":null,"price":50.0,"currency_code":"USD","in_stock":true},{"title":"XL","offer_id":49925527732462,"sku":null,"price":50.0,"currency_code":"USD","in_stock":true},{"title":"XXL","offer_id":49925527765230,"sku":null,"price":50.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0796\/2578\/1486\/files\/hf_20261111_024000_97dd7ff3-ab0a-4add-97d3-1cba349780fc.png?v=1794365933"},{"product_id":"ambition-zip-up","title":"Ambition Zip Up","description":"\u003cp\u003e\u003cstrong\u003eLayer with intent.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eA heavyweight full-zip built for warm-ups, cool-downs and everything off the gym floor. Soft brushed interior, structured fit, full-length zip.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eFeatures\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eFull-length zip\u003c\/li\u003e\n\u003cli\u003eBrushed fleece interior\u003c\/li\u003e\n\u003cli\u003eStructured relaxed fit\u003c\/li\u003e\n\u003cli\u003eRibbed cuffs \u0026amp; hem\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e Heavyweight fleece blend\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Relaxed\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=\"ambition-zip\" data-name=\"Ambition Zip Up\"\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":49925527994606,"sku":null,"price":85.0,"currency_code":"USD","in_stock":true},{"title":"M","offer_id":49925528027374,"sku":null,"price":85.0,"currency_code":"USD","in_stock":true},{"title":"L","offer_id":49925528060142,"sku":null,"price":85.0,"currency_code":"USD","in_stock":true},{"title":"XL","offer_id":49925528092910,"sku":null,"price":85.0,"currency_code":"USD","in_stock":true},{"title":"XXL","offer_id":49925528125678,"sku":null,"price":85.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0796\/2578\/1486\/files\/hf_20261111_053105_b3355ae8-80ea-484d-830f-0a908c7918ca.png?v=1794375199"},{"product_id":"lc-jogger","title":"Ambition Joggers","description":"\u003cp\u003e\u003cstrong\u003eTapered. Everyday.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eA heavyweight fleece jogger with a tapered leg and a clean ribbed cuff. Soft enough to lounge in, sharp enough to wear out.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eFeatures\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eHeavyweight fleece\u003c\/li\u003e\n\u003cli\u003eTapered leg\u003c\/li\u003e\n\u003cli\u003eRibbed ankle cuff\u003c\/li\u003e\n\u003cli\u003eSide pockets\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e Heavyweight fleece blend\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Relaxed, tapered leg — size down for a fitted look\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=\"sweatpants\" data-name=\"LC Jogger\"\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":49925528322286,"sku":null,"price":69.0,"currency_code":"USD","in_stock":true},{"title":"M","offer_id":49925528355054,"sku":null,"price":69.0,"currency_code":"USD","in_stock":true},{"title":"L","offer_id":49925528387822,"sku":null,"price":69.0,"currency_code":"USD","in_stock":true},{"title":"XL","offer_id":49925528420590,"sku":null,"price":69.0,"currency_code":"USD","in_stock":true},{"title":"XXL","offer_id":49925528453358,"sku":null,"price":69.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0796\/2578\/1486\/files\/hf_20261111_053437_9412b557-2f90-4fdc-91f1-096c06457754.png?v=1794375707"},{"product_id":"ambition-oversized-tee-1","title":"Ambition Oversized Tee","description":"\u003cp\u003e\u003cstrong\u003eHeavyweight. Street-ready.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eA heavyweight 100% cotton oversized tee with a dropped shoulder and a boxy, lived-in drape. Built to layer and built to last.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eFeatures\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eHeavyweight 100% cotton\u003c\/li\u003e\n\u003cli\u003eOversized drop-shoulder fit\u003c\/li\u003e\n\u003cli\u003eBoxy, structured drape\u003c\/li\u003e\n\u003cli\u003eRibbed crew neck\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e 100% cotton, heavyweight\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Oversized drop shoulder — size down for a closer fit\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=\"oversized-tees\" data-name=\"Ambition Oversized Tee\"\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":"XS","offer_id":50013547528430,"sku":null,"price":50.0,"currency_code":"USD","in_stock":true},{"title":"S","offer_id":50013547561198,"sku":null,"price":50.0,"currency_code":"USD","in_stock":true},{"title":"M","offer_id":50013547593966,"sku":null,"price":50.0,"currency_code":"USD","in_stock":true},{"title":"L","offer_id":50013547626734,"sku":null,"price":50.0,"currency_code":"USD","in_stock":true},{"title":"XL","offer_id":50013547659502,"sku":null,"price":50.0,"currency_code":"USD","in_stock":true},{"title":"XXL","offer_id":50013547692270,"sku":null,"price":50.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0796\/2578\/1486\/files\/hf_20261111_022912_322e6bc8-0e94-4354-b6e3-a92c390e43e3.png?v=1794365364"},{"product_id":"ambition-zip-up-1","title":"Ambition Zip Up","description":"\u003cp\u003e\u003cstrong\u003eLayer with intent.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eA heavyweight full-zip built for warm-ups, cool-downs and everything off the gym floor. Soft brushed interior, structured fit, full-length zip.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eFeatures\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eFull-length zip\u003c\/li\u003e\n\u003cli\u003eBrushed fleece interior\u003c\/li\u003e\n\u003cli\u003eStructured relaxed fit\u003c\/li\u003e\n\u003cli\u003eRibbed cuffs \u0026amp; hem\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e Heavyweight fleece blend\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Relaxed\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=\"ambition-zip\" data-name=\"Ambition Zip Up\"\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":50013547954414,"sku":null,"price":85.0,"currency_code":"USD","in_stock":true},{"title":"M","offer_id":50013547987182,"sku":null,"price":85.0,"currency_code":"USD","in_stock":true},{"title":"L","offer_id":50013548019950,"sku":null,"price":85.0,"currency_code":"USD","in_stock":true},{"title":"XL","offer_id":50013548052718,"sku":null,"price":85.0,"currency_code":"USD","in_stock":true},{"title":"XXL","offer_id":50013548085486,"sku":null,"price":85.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0796\/2578\/1486\/files\/hf_20261111_032351_a4fea303-ad66-43a8-9610-3b4595bb89c9.png?v=1794374588"},{"product_id":"lc-jogger-1","title":"Ambition Joggers","description":"\u003cp\u003e\u003cstrong\u003eTapered. Everyday.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eA heavyweight fleece jogger with a tapered leg and a clean ribbed cuff. Soft enough to lounge in, sharp enough to wear out.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eFeatures\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eHeavyweight fleece\u003c\/li\u003e\n\u003cli\u003eTapered leg\u003c\/li\u003e\n\u003cli\u003eRibbed ankle cuff\u003c\/li\u003e\n\u003cli\u003eSide pockets\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e Heavyweight fleece blend\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Relaxed, tapered leg — size down for a fitted look\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=\"sweatpants\" data-name=\"LC Jogger\"\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":50013548347630,"sku":null,"price":69.0,"currency_code":"USD","in_stock":true},{"title":"M","offer_id":50013548380398,"sku":null,"price":69.0,"currency_code":"USD","in_stock":true},{"title":"L","offer_id":50013548413166,"sku":null,"price":69.0,"currency_code":"USD","in_stock":true},{"title":"XL","offer_id":50013548445934,"sku":null,"price":69.0,"currency_code":"USD","in_stock":true},{"title":"XXL","offer_id":50013548478702,"sku":null,"price":69.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0796\/2578\/1486\/files\/hf_20261111_053807_3f55e7b8-a679-4e6d-8fef-225988068aea.png?v=1794375774"},{"product_id":"genesis-hoodie-1","title":"Genesis Hoodie","description":"\u003cp\u003eHeavyweight fleece, oversized silhouette, built to be worn for years.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e Heavyweight fleece blend\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Oversized. Size down for a structured fit.\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 ","offers":[{"title":"S","offer_id":50018471739630,"sku":null,"price":75.0,"currency_code":"USD","in_stock":true},{"title":"M","offer_id":50018471772398,"sku":null,"price":75.0,"currency_code":"USD","in_stock":true},{"title":"L","offer_id":50018471805166,"sku":null,"price":75.0,"currency_code":"USD","in_stock":true},{"title":"XL","offer_id":50018471837934,"sku":null,"price":75.0,"currency_code":"USD","in_stock":true},{"title":"XXL","offer_id":50018471870702,"sku":null,"price":75.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0796\/2578\/1486\/files\/hf_20261111_142640_46e9493c-0340-4458-abfb-c1df77558b32.png?v=1794407972"},{"product_id":"sacrifice-oversized-tee-1","title":"Sacrifice Oversized Tee","description":"\u003cp\u003eHeavyweight cotton. Drop shoulder. Built to last, holding its shape wash after wash.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e 100% Cotton | Heavyweight\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Oversized drop shoulder | Size down for a structured fit\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","offer_id":50019579396334,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"S \/ White","offer_id":50019579461870,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"M \/ White","offer_id":50019579527406,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"L \/ White","offer_id":50019579592942,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"XL \/ White","offer_id":50019579658478,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"XXL \/ White","offer_id":50019579724014,"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_154751_19f7df5a-eb7d-4f73-bca9-cf440433314f.png?v=1794412359"},{"product_id":"vision-oversized-tee-1","title":"Vision Oversized Tee","description":"\u003cp\u003eHeavyweight cotton. Drop shoulder. Built to last, holding its shape wash after wash.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e 100% Cotton | Heavyweight\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Oversized drop shoulder | Size down for a structured fit\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","offer_id":50020733223150,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"S","offer_id":50020733288686,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"M","offer_id":50020733354222,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"L","offer_id":50020733419758,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"XL","offer_id":50020733485294,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"XXL","offer_id":50020733550830,"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_164712_1a7ca4c9-8459-46b4-ac96-8840c4a98673.png?v=1794415878"},{"product_id":"seek-discomfort-oversized-tee","title":"SEEK DISCOMFORT OVERSIZED TEE","description":"\u003cp\u003eHeavyweight cotton. Drop shoulder. Built to last, holding its shape wash after wash.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e 100% Cotton | Heavyweight\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Oversized drop shoulder | Size down for a structured fit\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 \/ Navy","offer_id":50021430198510,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"M \/ Navy","offer_id":50021430264046,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"L \/ Navy","offer_id":50021430329582,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"XL \/ Navy","offer_id":50021430395118,"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_170351_038e4635-542d-40d2-baef-18711aad1eef.png?v=1794421192"},{"product_id":"vital-oversized-tee","title":"VITAL OVERSIZED TEE","description":"\u003cp\u003eHeavyweight cotton. Drop shoulder. Built to last, holding its shape wash after wash.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e 100% Cotton | Heavyweight\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Oversized drop shoulder | Size down for a structured fit\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 \/ Washed Grey","offer_id":50021432983790,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"S \/ Washed Grey","offer_id":50021433049326,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"M \/ Washed Grey","offer_id":50021433114862,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"L \/ Washed Grey","offer_id":50021433180398,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"XL \/ Washed Grey","offer_id":50021433245934,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"XXL \/ Washed Grey","offer_id":50021433311470,"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_182629_56e087ae-29a1-4aa3-9c6a-13ee993973f6.png?v=1794421847"},{"product_id":"more-than-an-athlete-oversized-tee","title":"''More Than An Athlete'' Oversized Tee","description":"\u003cp\u003e\u003cstrong\u003eAbout This Piece\u003c\/strong\u003e\u003c\/p\u003e\n\n\u003cp\u003eHeavyweight cotton with a structured drop shoulder that holds its shape wash after wash. The Athlete tee wears clean on the floor and everywhere after, substantial fabric and a boxy oversized cut that lets the work speak for itself. Size down if you prefer a more structured fit.\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e 100% Cotton | Heavyweight\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Oversized drop shoulder | Size down for a structured fit\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=\"oversized-tees\" data-name=\"More Than An Athlete Oversized Tee\"\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 \/ White","offer_id":50021434228974,"sku":"VF-ATH-OTEE-WHT-S","price":45.0,"currency_code":"USD","in_stock":true},{"title":"M \/ White","offer_id":50021434294510,"sku":"VF-ATH-OTEE-WHT-M","price":45.0,"currency_code":"USD","in_stock":true},{"title":"L \/ White","offer_id":50021434360046,"sku":"VF-ATH-OTEE-WHT-L","price":45.0,"currency_code":"USD","in_stock":true},{"title":"XL \/ White","offer_id":50021434425582,"sku":"VF-ATH-OTEE-WHT-XL","price":45.0,"currency_code":"USD","in_stock":true},{"title":"XXL \/ White","offer_id":50021434491118,"sku":"VF-ATH-OTEE-WHT-2XL","price":45.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0796\/2578\/1486\/files\/hf_20261111_223342_edffd94c-e578-49f4-bce1-419a632a739b.png?v=1794438553"},{"product_id":"visionary-lifting-club-oversized-tee-1","title":"\"Visionary Lifting Club\" Oversized Tee","description":"\u003cp\u003e\u003cstrong\u003eAbout This Piece\u003c\/strong\u003e\u003c\/p\u003e\n\n\u003cp\u003eMembers welcome, effort required. Heavyweight cotton, drop shoulder, and a relaxed oversized cut built for the gym and the rest of your day. The Visionary Lifting Club tee holds its shape and its statement wash after wash. Size down for a more structured fit.\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e 100% Cotton | Heavyweight\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Oversized drop shoulder | Size down for a structured fit\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=\"oversized-tees\" data-name=\"Visionary Lifting Club Oversized Tee\"\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 \/ White","offer_id":50021434589422,"sku":"VF-VLC-OTEE-WHT-S","price":45.0,"currency_code":"USD","in_stock":true},{"title":"M \/ White","offer_id":50021434654958,"sku":"VF-VLC-OTEE-WHT-M","price":45.0,"currency_code":"USD","in_stock":true},{"title":"L \/ White","offer_id":50021434720494,"sku":"VF-VLC-OTEE-WHT-L","price":45.0,"currency_code":"USD","in_stock":true},{"title":"XL \/ White","offer_id":50021434786030,"sku":"VF-VLC-OTEE-WHT-XL","price":45.0,"currency_code":"USD","in_stock":true},{"title":"XXL \/ White","offer_id":50021434851566,"sku":"VF-VLC-OTEE-WHT-2XL","price":45.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0796\/2578\/1486\/files\/hf_20261111_221222_ebdd43b3-88de-46d9-a46c-bf9783c4aade.png?v=1794435351"},{"product_id":"i-am-oversized-tee","title":"\"I AM\" Oversized Tee","description":"\u003cp\u003e\u003cstrong\u003eAbout This Piece\u003c\/strong\u003e\u003c\/p\u003e\n\n\u003cp\u003eHeavyweight cotton. Drop shoulder. Built to last. Our oversized tees are cut with a structured drop shoulder silhouette that holds its shape wash after wash. Substantial fabric, clean construction, and a fit that works as hard outside the gym as you do inside it. Size down if you prefer a relaxed structured look.\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e 100% Cotton | Heavyweight\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Oversized drop shoulder | Size down for a structured fit\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=\"oversized-tees\" data-name='\"I AM\" OVERSIZED TEE'\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 \/ Sand Stone","offer_id":50021448876270,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"S \/ Sand Stone","offer_id":50021448974574,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"M \/ Sand Stone","offer_id":50021449072878,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"L \/ Sand Stone","offer_id":50021449171182,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"XL \/ Sand Stone","offer_id":50021449269486,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"XXL \/ Sand Stone","offer_id":50021449367790,"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_224522_7616760e-1dee-424f-b106-e26657d659a1.png?v=1794437544"},{"product_id":"i-am-oversized-tee-1","title":"\"I AM\" Oversized Tee","description":"\u003cp\u003e\u003cstrong\u003eAbout This Piece\u003c\/strong\u003e\u003c\/p\u003e\n\n\u003cp\u003eHeavyweight cotton. Drop shoulder. Built to last. Our oversized tees are cut with a structured drop shoulder silhouette that holds its shape wash after wash. Substantial fabric, clean construction, and a fit that works as hard outside the gym as you do inside it. Size down if you prefer a relaxed structured look.\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e 100% Cotton | Heavyweight\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Oversized drop shoulder | Size down for a structured fit\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=\"oversized-tees\" data-name='\"I AM\" OVERSIZED TEE'\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":50021449498862,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"S \/ White","offer_id":50021449597166,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"M \/ White","offer_id":50021449695470,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"L \/ White","offer_id":50021449793774,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"XL \/ White","offer_id":50021449892078,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"XXL \/ White","offer_id":50021449990382,"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_224530_a4c5610c-e193-436b-b6e7-d44a5b2514e2.png?v=1794437553"},{"product_id":"retribution-oversized-tee-1","title":"“Retribution” Oversized Tee","description":"\u003cp\u003e\u003cstrong\u003eAbout This Piece\u003c\/strong\u003e\u003c\/p\u003e\n\n\u003cp\u003eHeavyweight cotton. Drop shoulder. Built to last. Our oversized tees are cut with a structured drop shoulder silhouette that holds its shape wash after wash. Substantial fabric, clean construction, and a fit that works as hard outside the gym as you do inside it. Size down if you prefer a relaxed structured look.\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e 100% Cotton | Heavyweight\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Oversized drop shoulder | Size down for a structured fit\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=\"oversized-tees\" data-name=\"RETRIBUTION OVERSIZED TEE\"\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 \/ Sand Stone","offer_id":50021450055918,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"S \/ Sand Stone","offer_id":50021450154222,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"M \/ Sand Stone","offer_id":50021450252526,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"L \/ Sand Stone","offer_id":50021450350830,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"XL \/ Sand Stone","offer_id":50021450449134,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"XXL \/ Sand Stone","offer_id":50021450547438,"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_223129_0ed4a50b-3ef6-4ea5-bbb6-e5061be506c9.png?v=1794440060"},{"product_id":"retribution-oversized-tee-2","title":"“Retribution” Oversized Tee","description":"\u003cp\u003e\u003cstrong\u003eAbout This Piece\u003c\/strong\u003e\u003c\/p\u003e\n\n\u003cp\u003eHeavyweight cotton. Drop shoulder. Built to last. Our oversized tees are cut with a structured drop shoulder silhouette that holds its shape wash after wash. Substantial fabric, clean construction, and a fit that works as hard outside the gym as you do inside it. Size down if you prefer a relaxed structured look.\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e 100% Cotton | Heavyweight\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Oversized drop shoulder | Size down for a structured fit\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=\"oversized-tees\" data-name=\"RETRIBUTION OVERSIZED TEE\"\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":50021450744046,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"S \/ White","offer_id":50021450842350,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"M \/ White","offer_id":50021450940654,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"L \/ White","offer_id":50021451038958,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"XL \/ White","offer_id":50021451137262,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"XXL \/ White","offer_id":50021451235566,"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_223143_e570f33c-984c-4b3f-ac56-51b113c55b29.png?v=1794440162"},{"product_id":"fear-average-oversized-tee-1","title":"\"Fear Average\" Oversized Tee","description":"\u003cp\u003e\u003cstrong\u003eAbout This Piece\u003c\/strong\u003e\u003c\/p\u003e\n\n\u003cp\u003eHeavyweight cotton. Drop shoulder. Built to last. Our oversized tees are cut with a structured drop shoulder silhouette that holds its shape wash after wash. Substantial fabric, clean construction, and a fit that works as hard outside the gym as you do inside it. Size down if you prefer a relaxed structured look.\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e 100% Cotton | Heavyweight\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Oversized drop shoulder | Size down for a structured fit\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=\"oversized-tees\" data-name=\"FEAR AVERAGE OVERSIZED TEE\"\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 \/ Sand Stone","offer_id":50021476335854,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"S \/ Sand Stone","offer_id":50021476466926,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"M \/ Sand Stone","offer_id":50021476597998,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"L \/ Sand Stone","offer_id":50021476729070,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"XL \/ Sand Stone","offer_id":50021476860142,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"XXL \/ Sand Stone","offer_id":50021476991214,"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_223704_3ba0d6fa-3c23-4635-b0ed-290a184dbfaf.png?v=1794438030"},{"product_id":"fear-average-oversized-tee-2","title":"\"Fear Average\" Oversized Tee","description":"\u003cp\u003e\u003cstrong\u003eAbout This Piece\u003c\/strong\u003e\u003c\/p\u003e\n\n\u003cp\u003eHeavyweight cotton. Drop shoulder. Built to last. Our oversized tees are cut with a structured drop shoulder silhouette that holds its shape wash after wash. Substantial fabric, clean construction, and a fit that works as hard outside the gym as you do inside it. Size down if you prefer a relaxed structured look.\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e 100% Cotton | Heavyweight\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Oversized drop shoulder | Size down for a structured fit\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=\"oversized-tees\" data-name=\"FEAR AVERAGE OVERSIZED TEE\"\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":50021477187822,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"S \/ White","offer_id":50021477318894,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"M \/ White","offer_id":50021477449966,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"L \/ White","offer_id":50021477581038,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"XL \/ White","offer_id":50021477712110,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"XXL \/ White","offer_id":50021477843182,"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_223714_f8644418-c65b-4aee-8dac-c7b4914b95d4.png?v=1794438038"},{"product_id":"fear-average-oversized-tee-3","title":"\"Fear Average\" Oversized Tee","description":"\u003cp\u003e\u003cstrong\u003eAbout This Piece\u003c\/strong\u003e\u003c\/p\u003e\n\n\u003cp\u003eHeavyweight cotton. Drop shoulder. Built to last. Our oversized tees are cut with a structured drop shoulder silhouette that holds its shape wash after wash. Substantial fabric, clean construction, and a fit that works as hard outside the gym as you do inside it. Size down if you prefer a relaxed structured look.\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e 100% Cotton | Heavyweight\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eFit:\u003c\/strong\u003e Oversized drop shoulder | Size down for a structured fit\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=\"oversized-tees\" data-name=\"FEAR AVERAGE OVERSIZED TEE\"\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 \/ Black","offer_id":50021478007022,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"S \/ Black","offer_id":50021478138094,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"M \/ Black","offer_id":50021478269166,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"L \/ Black","offer_id":50021478400238,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"XL \/ Black","offer_id":50021478531310,"sku":null,"price":45.0,"currency_code":"USD","in_stock":true},{"title":"XXL \/ Black","offer_id":50021478662382,"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_223723_5cf7e479-7e0a-4f0a-be2e-eccc61bf0737.png?v=1794438049"}],"url":"https:\/\/visionaryfitness.shop\/collections\/men-hybrid.oembed","provider":"Visionary Fitness ","version":"1.0","type":"link"}