{{product.name}}
{{product.quantity}} at ${{product.cost}} - {{product.options}}
My Account
Login
Signup
Shopping Cart
Shopping Cart
View Cart
Total:
Search Site
Shop
By Category
All
Accessories
Men's Footwear
Men's Run Apparel
Women's Footwear
Women's Run Apparel
SALE
Socks
Unisex Footwear
Gift Cards
Contact
Find Your Shoe
Type to search. Use arrow keys to navigate results. Press enter to view all results.
Cancel
Popular Searches
Top Brands
Top Categories
Top Suggestions
Searching...
Start Typing to Search
Your Recent Searches:
Hmmm... We didn't find any matches
Modify your search and try again
SALE
{{product.name}}
{{product.brandName}}
{{product.price}}
<!doctype html> <html lang="en" data-theme="light"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"> <title>Find Your Shoe</title> <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Barlow+Condensed:wght@500;600;700&family=Barlow:wght@400;500;600&display=swap"> <style> :root{ --bg:#eef1f3; --surface:#ffffff; --fg:#14212b; --muted:#566570; --line:#d3dbe0; --accent:#e0431b; --accent-fg:#ffffff; --teal:#0f766e; --teal-bg:#d8efec; --warn-bg:#fdeadf; --warn:#9a3412; --band:#14212b; --band-fg:#fff; --display:'Barlow Condensed','Arial Narrow',sans-serif; --body:'Barlow','Helvetica Neue',Arial,sans-serif; } @media (prefers-color-scheme: dark){:root:not([data-theme="light"]){ --bg:#0f171d; --surface:#18232b; --fg:#eaf0f3; --muted:#9db0bb; --line:#2b3a44; --accent:#ff6a3d; --accent-fg:#14212b; --teal:#4fd1c5; --teal-bg:#12312f; --warn-bg:#3a2415; --warn:#ffb58a; --band:#0a1115; --band-fg:#eaf0f3; color-scheme:dark}} :root[data-theme="dark"]{ --bg:#0f171d; --surface:#18232b; --fg:#eaf0f3; --muted:#9db0bb; --line:#2b3a44; --accent:#ff6a3d; --accent-fg:#14212b; --teal:#4fd1c5; --teal-bg:#12312f; --warn-bg:#3a2415; --warn:#ffb58a; --band:#0a1115; --band-fg:#eaf0f3; color-scheme:dark} *{box-sizing:border-box} body{margin:0;background:var(--bg);color:var(--fg);font-family:var(--body);font-size:16px;line-height:1.5;padding-block:28px 56px;padding-left:max(16px,env(safe-area-inset-left,0px));padding-right:max(16px,env(safe-area-inset-right,0px))} .wrap{max-width:760px;margin:0 auto;display:flex;flex-direction:column;gap:20px} header{display:flex;flex-direction:column;gap:6px} .eyebrow{font-family:var(--display);font-weight:600;letter-spacing:.14em;text-transform:uppercase;font-size:14px;color:var(--accent)} h1{font-family:var(--display);font-weight:700;font-size:clamp(40px,9vw,64px);line-height:.95;margin:0;text-wrap:balance;text-transform:uppercase} .lede{color:var(--muted);margin:0;max-width:56ch} .track{display:flex;gap:4px} .track i{flex:1;height:6px;background:var(--line);border-radius:2px} .track i.on{background:var(--accent)} .card{background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:22px} .q{font-family:var(--display);font-weight:600;font-size:clamp(26px,6vw,34px);line-height:1.05;margin:0 0 6px;text-wrap:balance} .hint{color:var(--muted);margin:0 0 16px;font-size:15px} .opts{display:grid;gap:10px} .opt{all:unset;box-sizing:border-box;cursor:pointer;display:flex;flex-direction:column;gap:2px;padding:14px 16px;border:1.5px solid var(--line);border-radius:8px;background:var(--bg)} .opt:hover{border-color:var(--accent)} .opt:focus-visible,.btn:focus-visible,.link:focus-visible,.tip button:focus-visible{outline:3px solid var(--accent);outline-offset:2px} .opt b{font-weight:600} .opt span{color:var(--muted);font-size:14px} .opt[aria-pressed="true"]{border-color:var(--accent);background:var(--surface);box-shadow:inset 0 0 0 1px var(--accent)} .nav{display:flex;justify-content:space-between;align-items:center;margin-top:18px;gap:12px} .btn{all:unset;box-sizing:border-box;cursor:pointer;font-weight:600;padding:12px 20px;border-radius:8px;background:var(--accent);color:var(--accent-fg);text-align:center} .btn.ghost{background:transparent;color:var(--muted);padding:12px 4px} .btn[disabled]{opacity:.4;cursor:default} .visit{margin-top:16px;padding:10px 14px;border-left:4px solid var(--accent);background:var(--bg);font-size:14px;color:var(--muted);border-radius:0 8px 8px 0} .visit b{color:var(--fg)} .tip{position:relative;display:inline-block} .tip button{all:unset;cursor:help;display:inline-grid;place-items:center;width:20px;height:20px;border-radius:50%;background:var(--accent);color:var(--accent-fg);font-size:13px;font-weight:700;margin-left:6px;vertical-align:middle} .tip .bubble{display:none;position:absolute;z-index:5;left:-8px;top:28px;width:min(320px,80vw);padding:10px 12px;border-radius:8px;background:var(--band);color:var(--band-fg);font:400 14px/1.4 var(--body);box-shadow:0 6px 20px rgba(0,0,0,.25)} .tip:hover .bubble,.tip.open .bubble,.tip:focus-within .bubble{display:block} .results{display:flex;flex-direction:column;gap:16px} .pick{display:grid;grid-template-columns:auto 1fr;gap:6px 16px} .rank{font-family:var(--display);font-weight:700;font-size:56px;line-height:.9;color:var(--accent)} .pick h3{font-family:var(--display);font-weight:700;font-size:30px;line-height:1;margin:0;text-transform:uppercase} .pick .brand{font-family:var(--display);letter-spacing:.1em;text-transform:uppercase;color:var(--muted);font-weight:600;font-size:14px} .pick p{margin:8px 0 0;min-width:0} .badges{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px} .badge{font-size:13px;font-weight:600;padding:3px 10px;border-radius:999px;background:var(--teal-bg);color:var(--teal)} .badge.ship{background:var(--warn-bg);color:var(--warn)} .badge.n{background:var(--bg);color:var(--muted)} .pick .actions{grid-column:1/-1;display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-top:12px} .note{font-size:14px;color:var(--muted)} .link{color:var(--fg);font-weight:600;text-underline-offset:3px} .callout{background:var(--band);color:var(--band-fg);border-radius:10px;padding:22px} .callout h2{font-family:var(--display);font-size:clamp(26px,6vw,34px);line-height:1.05;margin:0 0 12px;text-transform:uppercase} .callout ul{margin:0;padding:0;list-style:none;display:grid;gap:12px} .callout li{display:grid;grid-template-columns:auto 1fr;gap:12px;align-items:baseline} .callout li b{font-family:var(--display);font-size:26px;color:var(--accent);line-height:1} .chips{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px} .chip{font-size:13px;font-weight:600;padding:4px 12px;border-radius:999px;border:1px solid var(--line);background:var(--bg)} .sample{font-size:13px;color:var(--muted);border-top:1px solid var(--line);padding-top:14px;margin-top:4px} .save{display:flex;flex-direction:column;gap:10px} textarea{width:100%;min-height:120px;resize:vertical;font:inherit;font-size:14px;background:var(--bg);color:var(--fg);border:1px solid var(--line);border-radius:8px;padding:10px} .row{display:flex;gap:10px;flex-wrap:wrap} .tbd{font-size:12px;font-weight:600;color:var(--warn);background:var(--warn-bg);padding:1px 8px;border-radius:999px;margin-left:6px} @media (prefers-reduced-motion:no-preference){.card{animation:rise .25s ease-out}@keyframes rise{from{transform:translateY(6px);opacity:.4}to{transform:none;opacity:1}}} </style></head><body> <div class="wrap" id="app"> <header> <div class="eyebrow">Second Wind Run Co. Riverton, Utah</div> <h1>Find your shoe</h1> <p class="lede">A few quick questions. Get five or more matches: shoes on our shelves and shoes we can ship. Then try them on.</p> </header> <div class="track" id="track" aria-hidden="true"></div> <main id="stage"></main> </div> <script> /* shoe data (auto-refreshed daily from the live shop; refreshed 2026-10-28): [brand, model, type, cushion 1-3, tags, men's id, women's id, spare, from price, wide sizes, in store, ships from brand, activities (r run, w walk, g gym), toe box (-1 snug, 0 average, 1 roomy, 2 very roomy)] */ const D=[ /*DATA-START*/ ["brooks","Ghost 18","Neutral",2,"daily",6715219,6807849,0,150,0,1,1,"rw",0], ["brooks","Ghost Max 4","Neutral",3,"walk daily plush",6722197,6722194,0,165,0,0,1,"rw",0], ["brooks","Ghost Max Slip Resistant","Neutral",3,"walk daily plush",6882025,6882027,0,175,0,0,1,"w",0], ["brooks","Glycerin 23","Neutral",3,"daily long",5952375,6807846,0,175,0,1,1,"r",0], ["brooks","Glycerin GTS 23","Stability",3,"daily long support",5952376,5949043,0,180,0,1,1,"r",0], ["brooks","Glycerin Max 2","Neutral",3,"long recovery",5818088,5818087,0,200,0,0,1,"r",0], ["brooks","Launch 12","Neutral",1,"daily tempo",6054170,6054176,0,120,0,0,1,"r",0], ["brooks","Revel 9","Neutral",2,"daily easy",6874924,6695602,0,100,0,0,1,"r",0], ["brooks","Hyperion Max 4","Speed",2,"tempo race",6715224,7097919,0,200,0,1,1,"r",0], ["brooks","Hyperion Elite 6","Racing",2,"race",7150584,7150584,0,275,0,0,1,"r",0], ["brooks","Adrenaline GTS","Stability",2,"daily support",6871824,7097940,0,155,0,1,1,"r",0], ["brooks","Beast / Ariel","Stability",3,"daily support",6365776,6365774,0,170,0,0,1,"rw",0], ["brooks","Addiction Walker 2","Stability",2,"walk support",627332,627349,0,130,0,0,1,"w",0], ["brooks","Addiction GTS 15","Stability",2,"walk support",2272990,2272989,0,140,0,0,1,"w",0], ["brooks","Cascadia","Trail",2,"trail",6732354,6732361,0,160,0,0,1,"r",0], ["brooks","Ghost Trail","Trail",2,"trail",0,5725325,0,150,0,0,1,"r",0], ["hoka","Clifton 11","Neutral",3,"daily",6757055,6898910,0,155,1,1,1,"r",0], ["hoka","Bondi 9","Neutral",3,"long recovery",4337700,4337675,0,175,1,1,1,"r",0], ["hoka","Mach 7","Neutral",2,"daily tempo",6777500,6138493,0,145,1,1,1,"r",0], ["hoka","Mach X 3","Speed",2,"tempo race",6777494,6777493,0,190,0,1,1,"r",0], ["hoka","Rocket X 3","Speed",2,"race",6895671,6895671,0,250,0,0,1,"r",0], ["hoka","Arahi 9","Stability",2,"daily support",7101733,7101735,0,155,1,1,1,"r",0], ["hoka","Arahi 8","Stability",2,"daily support",6290429,6564567,0,150,1,1,1,"r",0], ["hoka","Gaviota 6","Stability",3,"daily long support",6616335,6650786,0,180,1,0,1,"r",0], ["hoka","Skyward X 2","Neutral",3,"long recovery",7065965,6650780,0,225,0,0,1,"r",0], ["hoka","Stinson 8","Neutral",3,"daily long trail",6829160,6824161,0,180,0,0,1,"r",0], ["hoka","Speedgoat 7","Trail",2,"trail",6290431,6286265,0,155,1,1,1,"r",0], ["hoka","Challenger 8","Trail",2,"trail",7055431,7117365,0,155,1,0,1,"r",0], ["hoka","Mafate 5","Trail",3,"trail long",6633804,7055436,0,185,0,0,1,"r",0], ["hoka","Torrent 5","Trail",1,"trail tempo",7065972,7065971,0,130,0,0,1,"r",0], ["hoka","Tecton X 4","Trail",2,"trail race",6880491,6880490,0,275,0,0,1,"r",0], ["hoka","Zinal 3","Trail",1,"trail tempo",6650800,6650798,0,150,0,0,1,"r",0], ["hoka","Transport 2","Neutral",2,"walk daily",6625655,6625646,0,155,0,0,1,"w",0], ["hoka","Transport Hike","Neutral",2,"walk hike",5680125,5680121,0,190,0,0,1,"w",0], ["saucony","Ride 19","Neutral",2,"daily",5870515,6715268,0,145,1,1,1,"r",1], ["saucony","Triumph 24","Neutral",3,"daily long",6715256,6715257,0,170,1,1,1,"r",1], ["saucony","Kinvara 16","Neutral",1,"daily tempo",6142413,5848277,0,130,0,0,1,"r",1], ["saucony","Guide 19","Stability",2,"daily support",6715263,6096938,0,150,1,1,1,"r",1], ["saucony","Hurricane 26","Stability",3,"daily long support",6715259,6715260,0,170,0,1,1,"r",1], ["saucony","Omni 23 ST","Stability",2,"daily support",6142419,0,0,170,1,0,1,"r",1], ["saucony","Endorphin Speed 6","Speed",2,"tempo race",7097955,7097956,0,175,0,1,0,"r",1], ["saucony","Endorphin Pro 5","Speed",2,"race",6245078,6245057,0,240,0,0,1,"r",1], ["saucony","Endorphin Azura","Neutral",3,"daily",6715261,6183213,0,150,0,1,1,"r",1], ["saucony","Peregrine","Trail",2,"trail",5919805,6163759,0,150,1,1,1,"r",1], ["saucony","Xodus Ultra 4","Trail",3,"trail long",6156605,6163748,0,170,0,0,1,"r",1], ["saucony","Integrity Metro","Neutral",2,"walk daily",6125842,6163754,0,100,1,0,1,"w",1], ["asics","Gel-Cumulus 28","Neutral",2,"daily",6814161,6813582,0,145,0,1,1,"r",-1], ["asics","Gel-Nimbus 28","Neutral",3,"daily long",6814154,6813563,0,170,0,1,1,"r",-1], ["asics","Novablast 6","Neutral",2,"daily tempo",6814856,7071050,0,155,1,1,1,"r",-1], ["asics","Gel-Kayano 33","Stability",3,"daily support",6814116,0,0,170,1,1,1,"r",-1], ["asics","Glideride Max 2","Neutral",3,"daily long",6850924,0,0,170,1,0,1,"r",-1], ["asics","Megablast","Speed",2,"race",7140252,7140252,0,225,0,1,0,"r",-1], ["asics","Noosa Tri 16","Speed",2,"tempo race",6850870,0,0,135,0,0,1,"r",-1], ["asics","Trabuco Max 5","Trail",3,"trail",6850997,0,0,170,0,0,1,"r",-1], ["on","Cloudsurfer 3","Neutral",2,"daily",7101814,7101816,0,170,0,1,0,"r",0], ["on","Cloudsurfer 2","Neutral",2,"daily",5970383,4429403,0,160,1,1,1,"r",0], ["on","Cloudsurfer Next","Speed",2,"tempo race",6792658,6722244,0,150,0,0,1,"r",0], ["on","Cloudmonster 3","Neutral",3,"daily long",6117173,7097926,0,190,0,1,0,"r",0], ["on","Cloudrunner 3","Stability",2,"daily support",6391598,5971040,0,160,1,1,1,"r",0], ["on","Cloud 6","Neutral",2,"daily",7065987,7145459,0,160,1,0,1,"rw",0], ["on","Cloudswift 4","Neutral",2,"daily walk",6743781,6722264,0,170,0,0,1,"rw",0], ["on","Cloud X 5","Neutral",2,"gym train",7122222,7065991,0,160,0,0,1,"gw",0], ["on","Cloudvista 3","Trail",2,"trail",7122224,7071039,0,160,0,0,1,"r",0], ["on","Cloudsurfer Trail 2","Trail",2,"trail",6391596,5314435,0,160,0,1,1,"r",0], ["on","Cloudultra 3","Trail",3,"trail long",6722286,6722275,0,190,0,0,1,"r",0], ["mizuno","Neo Zen 2","Neutral",2,"daily easy",5871109,5871110,0,160,0,1,1,"r",-1], ["mizuno","Neo Vista 3","Neutral",3,"daily tempo",6670054,6670056,0,200,0,1,1,"r",-1], ["mizuno","Sky Prime","Neutral",3,"long recovery",7082572,7093002,0,200,0,0,1,"r",-1], ["mizuno","Wave Rider 30","Neutral",2,"daily",7093001,6674174,0,150,1,1,1,"r",-1], ["mizuno","Wave Sky 9","Neutral",3,"daily long",5413905,5413904,0,180,1,1,1,"r",-1], ["mizuno","Wave Inspire 22","Stability",2,"daily support",6347624,5870512,0,150,1,1,1,"r",-1], ["mizuno","Wave Horizon 9","Stability",3,"daily long support",6066675,7076259,0,180,1,1,1,"r",-1], ["mizuno","Wave Prophecy 15","Stability",3,"long support",6670048,6674167,0,250,0,0,1,"r",-1], ["mizuno","Wave Rebellion Flash 3","Speed",2,"tempo race",6674142,6674156,0,180,0,0,1,"r",-1], ["mizuno","Wave Rebellion Pro 3","Speed",2,"race tempo",6674141,6674141,0,250,0,0,1,"r",-1], ["mizuno","Hyperwarp Elite","Racing",2,"race",6663704,6663704,0,275,0,0,1,"r",-1], ["mizuno","Hyperwarp Pro","Speed",2,"race tempo",6663702,6663702,0,250,0,0,1,"r",-1], ["altra","Experience Flow 3","Neutral",2,"daily zero",6029003,6832067,0,145,0,1,1,"r",2], ["altra","Torin 9","Neutral",3,"daily zero",6736832,7112414,0,160,1,1,1,"r",2], ["altra","FWD Via 2","Neutral",2,"daily zero",5720494,5720501,0,165,0,0,1,"r",2], ["altra","Escalante 5","Neutral",2,"daily zero",7099355,6736833,0,140,0,0,1,"r",2], ["altra","Olympus 7","Neutral",3,"daily long zero",6972019,6829155,0,195,0,0,1,"r",2], ["altra","Vanish Pulse","Speed",1,"tempo zero",7027217,6908274,0,150,0,0,1,"r",2], ["altra","Vanish Carbon 2","Racing",1,"race zero",6365781,6377065,0,240,0,0,1,"r",2], ["altra","Lone Peak 9","Trail",2,"trail zero",5987455,6830336,0,140,1,1,1,"r",2], ["altra","Timp 6","Trail",3,"trail zero",6908262,7099358,0,165,0,0,1,"r",2], ["altra","Experience Wild 3","Trail",2,"trail zero",6830277,6029014,0,150,0,1,1,"r",2], ["altra","Superior 7","Trail",1,"trail tempo zero",4712234,4712236,0,120,0,0,1,"r",2], ["altra","Voyager","Neutral",1,"walk zero",7033263,6446998,0,155,0,0,1,"w",2], ["altra","Solstice XT 3","Gym",2,"gym train zero",4107324,4130823,0,130,0,0,1,"g",2], ["nike","Metcon 10","Gym",2,"gym train",7097346,7097364,0,155,0,0,1,"g",-1], ["nike","Vomero Plus","Neutral",3,"daily long recovery",7097379,7097380,0,180,1,1,1,"r",-1], ["nike","Vomero 18","Neutral",3,"daily long",7132652,0,0,155,0,0,1,"r",-1], ["nike","Structure 26","Stability",2,"daily support",7097343,7097341,0,145,0,0,1,"r",-1], ["nike","Pegasus Plus 2","Neutral",2,"daily tempo",7111832,7097952,0,170,0,1,0,"r",-1], ["nike","Wildhorse 10","Trail",2,"trail",7097339,7097338,0,165,0,0,1,"r",-1], ["topo","Aura 2","Stability",3,"daily support walk",7097881,7097886,0,170,0,1,0,"rw",2], ["topo","Phantom 4","Neutral",3,"daily long walk",7097880,7097885,0,150,0,1,0,"rw",2], ["topo","Ultraventure 5","Trail",3,"trail",7097882,7097887,0,155,0,1,0,"r",2], ["salomon","Speedcross 6","Trail",2,"trail",7097906,7097905,0,150,0,1,0,"r",0], ["salomon","Ultra Glide 4","Trail",2,"trail long",7097907,7150112,0,160,0,1,0,"r",0], ["salomon","Aero Blaze 4","Neutral",2,"daily tempo",7097903,7097904,0,140,0,1,0,"r",0] /*DATA-END*/ ].map(a=>({brand:a[0],name:a[1],type:a[2],cush:a[3],tags:a[4].split(' '),m:a[5],w:a[6],price:a[8],wide:!!a[9],store:!!a[10],ship:!!a[11],act:a[12],toe:a[13]})); const BRAND={brooks:"Brooks",hoka:"HOKA",saucony:"Saucony",asics:"Asics",on:"On",mizuno:"Mizuno",altra:"Altra",nike:"Nike",topo:"Topo",salomon:"Salomon"}; const NICHE={topo:1,salomon:1}; /* brands with no RELAY footwear feed: nudge them into results */ const ROTATION_URL=""; /* TODO: paste the link to "Why You May Benefit from a Shoe Rotation" */ const NICE={daily:"everyday miles",long:"long runs",tempo:"faster days",race:"race day",trail:"trails",support:"extra support",recovery:"recovery days",easy:"easy runs",walk:"walking",gym:"the gym",train:"training"}; const VISIT=function(t){return '<div class="visit"><b>'+(t||'Not sure?')+'</b> Come in for a foot scan and gait check. Well tell you in minutes.</div>'}; /* ---- questions. show(A) decides whether a question applies to this person ---- */ const run=A=>A.act==='run', walk=A=>A.act==='walk', gym=A=>A.act==='gym'; const Q=[ {k:"act",q:"What will you use these shoes for most?",h:"Pick the one you do the most.",o:[["walk","Walking and everyday wear","Errands, work, travel, long days on your feet"],["run","Running","Roads, trails, treadmills"],["gym","Gym workouts","CrossFit, lifting, classes"]]}, {k:"fit",q:"Mens or womens sizing?",h:"This opens the right version of each shoe.",o:[["m","Mens","Standard width is D"],["w","Womens","Standard width is B"]]}, {k:"pain",show:walk,q:"Do your feet or legs hurt in your current shoes?",h:"Any pain counts: heels, arches, shins, knees.",o:[["yes","Yes","Something aches by the end of the day"],["no","No","Im comfortable"]],visit:"Hurting and not sure why?"}, {k:"pron",show:walk,q:"Do you have balance or <span class=\"tip\"><span>pronation</span><button type=\"button\" aria-label=\"What is pronation?\">?</button><span class=\"bubble\" role=\"tooltip\">Pronation is how your foot rolls inward as you step. A little is normal. Too much can strain your arches, shins and knees.</span></span> issues?",h:"Do your ankles roll in, or do you feel wobbly?",o:[["yes","Yes","Show me stable, supportive shoes"],["no","No","Show me neutral shoes"],["unsure","Not sure","Well show a mix"]],visit:"Unsure?"}, {k:"pinch",show:walk,q:"Do your toes or midfoot feel pinched, tight or numb?",h:"That usually means the shoe is too narrow up front.",o:[["yes","Yes","Give me room to spread out"],["no","No","Fit is fine"]],visit:"Numb toes?"}, {k:"miles",show:run,q:"How many miles do you run a week?",h:"A rough number is fine.",o:[["1","Under 10","Getting started or keeping it casual"],["2","10 to 25","Steady weekly runner"],["3","25 to 40","Serious training"],["4","40 or more","High mileage"]]}, {k:"rot",show:run,q:"One pair of shoes, or a rotation?",h:"Rotating pairs can help your shoes last longer and keep your legs fresher.",o:[["one","One pair","Everything runs in the same shoe"],["rot","Two or more","I already rotate"]]}, {k:"use",show:run,q:"What is this shoe for?",h:"Think about the shoe youll grab most.",o:[["easy","Easy and daily miles","Training runs, group runs, recovery"],["tempo","Faster training","Tempo runs, intervals, workouts"],["race","Race day","A shoe for goal races"]]}, {k:"terrain",show:run,q:"Roads or trails?",h:"Pick where you spend the most time.",o:[["road","Roads, paths and treadmills","Pavement and concrete"],["trail","Trails","Dirt, rock and mixed terrain"]]}, {k:"support",show:run,q:"Do you need extra support?",h:"Stability shoes help guide a foot that rolls inward.",o:[["neutral","No, neutral is fine","No flat-foot fatigue or rolling in"],["stab","Yes, stability","Flat feet, ankles that roll in, or I was told to"],["unsure","Not sure","Well show a mix"]],visit:"Unsure?"}, {k:"gtype",show:gym,q:"What kind of workouts?",h:"This changes how much cushion and flat stability you want.",o:[["lift","Lifting and CrossFit","Flat, stable and grippy"],["mix","Classes, HIIT and cardio","Bounce and comfort for jumps and reps"],["both","Gym plus running","One shoe for the gym and the road"]]}, {k:"cush",q:"How should it feel underfoot?",h:"No wrong answer. Pick what you like.",o:[[3,"Plush and soft","A lot of cushion between you and the ground"],[2,"Balanced","Cushioned with some snap"],[1,"Firm and quick","Closer to the ground, more responsive"]]}, {k:"width",q:"How wide is your forefoot?",h:"The ball of your foot and your toes. Be direct.",o:[["narrow","Narrow","Heels slip or the front feels loose"],["avg","Average","Most shoes fit"],["wide","Wide","Toes feel squeezed or you wear wide sizes"]],visit:"Unsure?"} ]; function toTop(){window.scrollTo(0,0);try{if(window.frameElement)window.frameElement.scrollIntoView()}catch(e){}} const A={};let step=0; const stage=document.getElementById('stage'),track=document.getElementById('track'); const vis=()=>Q.filter(q=>!q.show||q.show(A)); const cur=()=>vis()[step]; function drawTrack(){const n=vis().length;track.innerHTML=vis().map((_,i)=>'<i class="'+(i<=step?'on':'')+'"></i>').join('')} function ask(){ const list=vis(),q=list[step];drawTrack(); stage.innerHTML='<section class="card"><h2 class="q">'+q.q+'</h2><p class="hint">'+q.h+'</p><div class="opts" role="group" aria-label="Choose one">'+ q.o.map((o,i)=>'<button type="button" class="opt" id="opt'+i+'" aria-pressed="'+(A[q.k]===o[0]?'true':'false')+'" data-i="'+i+'"><b>'+o[1]+'</b><span>'+o[2]+'</span></button>').join('')+ '</div>'+(q.visit?VISIT(q.visit):'')+'<div class="nav"><button type="button" class="btn ghost" id="back"'+(step===0?' hidden':'')+'>Back</button><button type="button" class="btn" id="next" '+(A[q.k]===undefined?'disabled':'')+'>'+(step===list.length-1?'Show my shoes':'Next')+'</button></div></section>'; stage.querySelectorAll('.opt').forEach(b=>b.onclick=()=>{A[q.k]=q.o[+b.dataset.i][0];ask();document.getElementById('opt'+b.dataset.i).focus()}); stage.querySelectorAll('.tip button').forEach(b=>b.onclick=e=>{e.preventDefault();b.parentNode.classList.toggle('open')}); document.getElementById('back').onclick=()=>{step--;ask()}; document.getElementById('next').onclick=()=>{if(step<vis().length-1){step++;ask()}else showResults()}; } /* ---- scoring ---- */ function hard(s){ if(A.act==='walk') return s.act.includes('w'); if(A.act==='gym') return s.act.includes('g'); if(!s.act.includes('r')) return false; const fast=s.type==='Speed'||s.type==='Racing'; if(A.terrain==='trail') return s.type==='Trail'; if(s.type==='Trail') return false; if(A.use==='easy' && fast) return false; if(A.use==='race' && !fast) return false; if(A.support==='neutral' && s.type==='Stability') return false; return true; } function score(s){ let sc=0; const fast=s.type==='Speed'||s.type==='Racing'; if(A.act==='run'){ if(A.use==='easy') sc+= s.tags.some(t=>['daily','long','easy','recovery'].includes(t))?2:0; if(A.use==='tempo'){ sc+= s.tags.includes('tempo')?3:0; sc+= fast?2:0; } if(A.use==='race'){ sc+= s.tags.includes('race')?4:0; sc+=2; } if(A.support==='stab') sc+= s.type==='Stability'?5:(fast?0:-2); if(A.support==='unsure'&&s.type==='Stability') sc+=0.5; const mi=+A.miles; /* more miles = more cushion and daily-trainer comfort */ if(mi>=3 && s.cush>=2) sc+=0.5*(mi-2); if(mi>=3 && s.tags.includes('daily')) sc+=0.5; if(mi===1 && s.cush===3) sc+=0.25; if(A.rot==='one' && s.tags.includes('daily')) sc+=1; /* single-shoe runners need a do-it-all */ if(A.rot==='rot' && (fast||s.tags.includes('tempo'))) sc+=0.5; } if(A.act==='walk'){ if(A.pron==='yes') sc+= s.type==='Stability'?5:-1; if(A.pron==='no') sc+= s.type==='Stability'?-3:1; if(A.pron==='unsure'&&s.type==='Stability') sc+=0.5; if(A.pain==='yes' && s.cush===3) sc+=1.5; if(s.tags.includes('walk')) sc+=1.5; } if(A.act==='gym'){ if(A.gtype==='lift'){ sc+= s.type==='Gym'?4:-1; if(s.cush===1) sc+=1 } if(A.gtype==='mix'){ sc+= s.type==='Gym'?3:0; sc+= s.tags.includes('train')?1:0 } if(A.gtype==='both'){ sc+= s.act.includes('r')&&s.act.includes('g')?3:s.type==='Gym'?1:0 } } sc+= 3-Math.abs(s.cush-A.cush)*1.5; /* forefoot width and brand fit: Mizuno/Asics/Nike run snug; Saucony a touch roomy; Altra/Topo roomy toe box */ const wide = A.width==='wide' || A.pinch==='yes'; if(wide){ sc+= s.toe===2?3: s.toe===1?1.5: s.toe===-1?-2:0; if(s.wide) sc+=1.5; } else if(A.width==='narrow'){ sc+= s.toe===-1?1.5: s.toe===2?-2: s.toe===1?-0.5:0; } else { sc+= s.toe===0?0.5: s.toe===2?-0.5:0; } if(s.store) sc+=1; if(NICHE[s.brand]) sc+=0.75; return sc; } function reason(s){ const cl={1:"a firm, quick ride",2:"balanced cushioning",3:"plush cushioning"}[s.cush]; const use={Neutral:"a neutral shoe",Stability:"a stability shoe",Speed:"a fast-day shoe",Racing:"a racing shoe",Trail:"a trail shoe",Gym:"a training shoe"}[s.type]; const bits=[cl]; if(s.type==='Stability') bits.push("built-in support"); if(s.toe===2) bits.push("a roomy toe box"); const t=s.tags.filter(x=>NICE[x]&&x!=='daily').map(x=>NICE[x]); let txt=s.name+" is "+use+" with "+bits.join(" and ")+"."; if(t.length) txt+=" Best for "+t.slice(0,2).join(" and ")+"."; return txt; } function pickSet(){ const gid=A.fit==='w'?'w':'m'; const all=D.filter(s=>s[gid]).map(s=>({s,sc:score(s),ok:hard(s)})); let pool=all.filter(x=>x.ok).sort((a,b)=>b.sc-a.sc); const vers=[]; /* fallback: versatile shoes that also fit the activity */ if(pool.length<5){ const have=new Set(pool.map(x=>x.s.name)); all.filter(x=>!x.ok && !have.has(x.s.name) && x.s.type!=='Trail' && x.s.act.length>1).sort((a,b)=>b.sc-a.sc).forEach(x=>{x.vers=true;vers.push(x)}); pool=pool.concat(vers); } const N=Math.min(6,pool.length), picks=[], bc={}; for(const x of pool){ if(picks.length>=N)break; bc[x.s.brand]=(bc[x.s.brand]||0); if(bc[x.s.brand]<2){picks.push(x);bc[x.s.brand]++} } const rest=()=>pool.filter(x=>!picks.includes(x)); const cnt=(f)=>picks.filter(f).length; /* at least 2 in-store shoes */ while(cnt(x=>x.s.store)<2){ const cand=rest().find(x=>x.s.store&&(bc[x.s.brand]||0)<2); if(!cand)break; const out=[...picks].reverse().find((x,i)=>!x.s.store); if(!out)break; picks.splice(picks.indexOf(out),1); bc[out.s.brand]--; picks.push(cand); bc[cand.s.brand]=(bc[cand.s.brand]||0)+1; } /* at least 3 brands */ while(new Set(picks.map(x=>x.s.brand)).size<3){ const have=new Set(picks.map(x=>x.s.brand)); const cand=rest().find(x=>!have.has(x.s.brand)); if(!cand)break; const over=[...picks].reverse().find(x=>bc[x.s.brand]>1); if(!over)break; picks.splice(picks.indexOf(over),1); bc[over.s.brand]--; picks.push(cand); bc[cand.s.brand]=1; } /* value pick: at least one match under $160 (not for race day) */ const CHEAP=160; if(A.use!=='race' && !picks.some(x=>x.s.price<CHEAP)){ const cand=rest().find(x=>x.s.price<CHEAP&&!x.vers&&(bc[x.s.brand]||0)<2) || rest().find(x=>x.s.price<CHEAP&&!x.vers); if(cand){ const keepStore=cnt(x=>x.s.store)<=2; const out=[...picks].reverse().find(x=>(!keepStore||!x.s.store||cand.s.store)&&(new Set(picks.filter(y=>y!==x).map(y=>y.s.brand).concat(cand.s.brand)).size>=3)); if(out){picks.splice(picks.indexOf(out),1);bc[out.s.brand]--;picks.push(cand);bc[cand.s.brand]=(bc[cand.s.brand]||0)+1} } } picks.sort((a,b)=>(a.vers?1:0)-(b.vers?1:0)||b.sc-a.sc); return {picks,gid}; } function showResults(){ drawTrack(); const {picks,gid}=pickSet(); const fitName=A.fit==='w'?"womens":"mens"; const text=['Find Your Shoe results ('+fitName+')'].concat(picks.map((p,i)=>(i+1)+'. '+BRAND[p.s.brand]+' '+p.s.name+' from $'+p.s.price+' - '+(p.s.store?'in store':'ships from our brand partner'))).concat(['Show this to a fitter at Second Wind Run Co. in Riverton.']).join('\n'); const wideOn=A.width==='wide'||A.pinch==='yes'; let html='<section class="results" aria-live="polite"><div class="card"><h2 class="q">Your '+picks.length+' best matches</h2><p class="hint">Based on your answers. '+picks.filter(p=>p.s.store).length+' are on our shelves now. Try them on and well check the fit with you.</p></div>'; if(!picks.length) html+='<div class="card"><p>No clean match for that mix. Come in and a fitter will work through it with you.</p></div>'; picks.forEach((p,i)=>{ const s=p.s,id=s[gid]; html+='<article class="card pick"><div class="rank" aria-hidden="true">'+(i+1)+'</div><div><div class="brand">'+BRAND[s.brand]+'</div><h3>'+s.name+'</h3>'+ '<p>'+reason(s)+'</p><div class="badges"><span class="badge n">from $'+s.price+'</span>'+ (s.store?'<span class="badge">In the store now</span>':'')+ (!s.store&&s.ship?'<span class="badge ship">Ships from our brand partner</span>':'')+ (s.store&&s.ship?'<span class="badge n">More colors ship to you</span>':'')+ (p.vers?'<span class="badge n">Versatile pick</span>':'')+ (wideOn&&s.toe>=1?'<span class="badge">Roomy toe box</span>':'')+ (A.width==='narrow'&&s.toe===-1?'<span class="badge">Snug, narrower fit</span>':'')+ (wideOn?(s.wide?'<span class="badge n">Wide sizes available</span>':''):'')+ '</div></div><div class="actions"><a class="btn" href="https://shop.secondwindrun.com/product/'+id+'/'+s.name.replace(/[^A-Za-z0-9]+/g,'-')+'" target="_blank" rel="noopener">See it in the shop</a>'+ '<span class="note">'+(s.store?'Try it on in Riverton, or have it shipped.':'We order it in for you, with pickup or shipping.')+' Free shipping over $100.</span></div></article>'}); const rotLink=ROTATION_URL?'<a class="link" href="'+ROTATION_URL+'" target="_blank" rel="noopener">Why You May Benefit from a Shoe Rotation</a>':''; if(A.act==='run') html+='<div class="card"><h2 class="q" style="font-size:26px">'+(A.rot==='one'?'Running in one pair?':'Already rotating?')+'</h2><p class="note" style="font-size:16px">'+(A.rot==='one'?'A second pair can make both last longer and keep your legs fresher. Mix a daily trainer with a faster or softer shoe.':'Good. Pair a daily trainer with something faster or softer and youll get more from every pair.')+'</p>'+(rotLink?'<p style="margin:8px 0 0">Read: '+rotLink+'</p>':'')+'</div>'; html+='<div class="callout"><h2>Why buy from Second Wind</h2><ul>'+ '<li><b>34x</b><span>Based on our return history, shoppers are 34x more likely to return a shoe bought online from big-box or brand sites.</span></li>'+ '<li><b>30 days</b><span>Swap for a different shoe from any brand we carry, or take store credit.</span></li>'+ '<li><b>Local</b><span>Your purchase keeps a Utah running business going and funds more community events.</span></li></ul></div>'; const have=[...new Set(D.map(s=>s.brand))].map(b=>'<span class="chip">'+BRAND[b]+'</span>').join(''); html+='<div class="card"><h2 class="q" style="font-size:26px">Not seeing your brand?</h2><p class="note" style="font-size:16px">We carry more than we can show here. Ask us about all of these in store, plus more.</p><div class="chips">'+have+'</div></div>'; html+='<div class="card save"><h2 class="q" style="font-size:26px">Take these with you</h2><textarea id="out" readonly aria-label="Your results">'+text+'</textarea><div class="row"><button type="button" class="btn" id="copy">Copy results</button><button type="button" class="btn ghost" id="again">Start over</button></div><div class="note" id="msg" role="status"></div>'+ '<p class="sample">Matches use shoes live in the shop today. Copy your results and show them to a fitter in the store.</p></div></section>'; stage.innerHTML=html; document.getElementById('again').onclick=()=>{for(const k in A)delete A[k];step=0;ask();toTop()}; document.getElementById('copy').onclick=async()=>{const m=document.getElementById('msg'),t=document.getElementById('out'); try{await navigator.clipboard.writeText(t.value);m.textContent='Copied.'}catch(e){t.focus();t.select();m.textContent='Select the text and copy it.'}}; toTop(); } ask(); </script> </body></html>
Processing, Please be patient
Don't Tap Back or Close the Window!
This could cause the order to duplicate or fail.