{"id":484025,"date":"2026-09-17T19:13:54","date_gmt":"2026-09-17T17:13:54","guid":{"rendered":"https:\/\/www.miomiorun.com\/garmin-finder-2\/"},"modified":"2026-09-17T19:13:54","modified_gmt":"2026-09-17T17:13:54","slug":"garmin-finder-2","status":"publish","type":"page","link":"https:\/\/www.miomiorun.com\/es\/garmin-finder-2\/","title":{"rendered":"Garmin Finder"},"content":{"rendered":"<style>\n.mmr-garmin-finder-embed{--bg:#07090d;--panel:#11151d;--panel2:#181e29;--text:#f5f7fb;--muted:#9aa4b4;--line:rgba(255,255,255,.10);--accent:#c9ff39;--danger:#ff7b72;--radius:24px}\n.mmr-garmin-finder-embed,.mmr-garmin-finder-embed *{box-sizing:border-box}.mmr-garmin-finder-embed{background:var(--bg);color:var(--text);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,\"Segoe UI\",sans-serif}.mmr-garmin-finder-embed button,.mmr-garmin-finder-embed a{font:inherit}.gf-shell{max-width:1500px;margin:0 auto;padding:22px 22px 100px}.gf-top{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:24px}.gf-brand{display:flex;align-items:center;gap:11px;font-size:13px;font-weight:800;letter-spacing:.16em;text-transform:uppercase}.gf-dot{width:11px;height:11px;background:var(--accent);border-radius:50%;box-shadow:0 0 20px rgba(201,255,57,.6)}.gf-close{color:var(--muted);text-decoration:none;border:1px solid var(--line);padding:10px 14px;border-radius:999px}.gf-hero{text-align:center;max-width:860px;margin:36px auto 28px}.gf-kicker{color:var(--accent);font-size:12px;font-weight:900;text-transform:uppercase;letter-spacing:.18em}.gf-hero h1{font-size:clamp(38px,6vw,78px);line-height:.96;margin:14px 0 18px;letter-spacing:-.055em}.gf-hero p{font-size:clamp(16px,2vw,21px);line-height:1.55;color:var(--muted);margin:0 auto;max-width:720px}.gf-stage{display:grid;grid-template-columns:minmax(300px,390px) 1fr;gap:26px;align-items:start;margin-top:34px}.gf-panel{position:sticky;top:18px;background:rgba(17,21,29,.88);backdrop-filter:blur(18px);border:1px solid var(--line);border-radius:var(--radius);padding:24px;box-shadow:0 22px 80px rgba(0,0,0,.32)}.gf-step{font-size:12px;color:var(--accent);font-weight:900;letter-spacing:.14em;text-transform:uppercase;margin-bottom:10px}.gf-q{font-size:28px;line-height:1.08;font-weight:800;letter-spacing:-.035em;margin:0 0 10px}.gf-help{color:var(--muted);line-height:1.45;font-size:14px;margin-bottom:20px}.gf-options{display:grid;gap:10px}.gf-option{appearance:none;width:100%;text-align:left;color:var(--text);background:#0c1017;border:1px solid var(--line);border-radius:16px;padding:15px 16px;cursor:pointer;transition:.2s ease}.gf-option:hover{transform:translateY(-1px);border-color:rgba(201,255,57,.5)}.gf-option strong{display:block;font-size:15px}.gf-option span{display:block;color:var(--muted);font-size:12px;margin-top:4px}.gf-option.is-selected{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent) inset;background:rgba(201,255,57,.08)}.gf-controls{display:flex;gap:10px;margin-top:18px}.gf-btn{border:0;border-radius:999px;padding:12px 17px;font-weight:800;cursor:pointer}.gf-btn-main{background:var(--accent);color:#0a0d10}.gf-btn-ghost{background:#202632;color:#fff}.gf-btn[disabled]{opacity:.35;cursor:not-allowed}.gf-progress{height:4px;background:#202630;border-radius:99px;overflow:hidden;margin-bottom:20px}.gf-progress>i{display:block;height:100%;background:var(--accent);width:0;transition:.35s ease}.gf-note{margin-top:15px;padding:12px 13px;background:rgba(255,255,255,.04);border-radius:14px;color:var(--muted);font-size:12px;line-height:1.45}.gf-count{display:flex;justify-content:space-between;align-items:end;margin:0 0 14px}.gf-count strong{font-size:34px;letter-spacing:-.04em}.gf-count span{color:var(--muted);font-size:13px}.gf-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(205px,1fr));gap:14px;align-items:stretch}.gf-card{position:relative;overflow:hidden;background:linear-gradient(180deg,#151b24,#0e1218);border:1px solid var(--line);border-radius:21px;min-height:310px;padding:15px;display:flex;flex-direction:column;transition:opacity .35s ease,transform .35s ease,border-color .35s ease,filter .35s ease;order:500}.gf-card.is-soft{opacity:.34;filter:saturate(.45);transform:scale(.965)}.gf-card.is-out{opacity:.08;filter:grayscale(1);transform:scale(.94);pointer-events:none}.gf-card.is-best{border-color:rgba(201,255,57,.55);box-shadow:0 0 0 1px rgba(201,255,57,.2) inset}.gf-img{height:150px;display:flex;align-items:center;justify-content:center;margin-bottom:11px}.gf-img img{max-height:145px;max-width:100%;object-fit:contain;filter:drop-shadow(0 12px 18px rgba(0,0,0,.25))}.gf-family{font-size:10px;text-transform:uppercase;letter-spacing:.14em;color:var(--muted);font-weight:800}.gf-name{font-size:16px;font-weight:800;line-height:1.16;margin:5px 0 8px}.gf-price{margin-top:auto;font-size:18px;font-weight:850}.gf-score{position:absolute;right:12px;top:12px;background:#090d12;border:1px solid var(--line);padding:6px 8px;border-radius:99px;font-size:10px;font-weight:800;color:var(--muted)}.gf-results{display:none}.gf-results.is-on{display:block}.gf-result-head{max-width:850px;margin:20px auto 28px;text-align:center}.gf-result-head h2{font-size:clamp(34px,5vw,62px);margin:8px 0 12px;letter-spacing:-.05em}.gf-result-head p{color:var(--muted);font-size:17px;line-height:1.55}.gf-picks{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;max-width:1150px;margin:0 auto}.gf-pick{background:#111720;border:1px solid var(--line);border-radius:26px;padding:22px;display:flex;flex-direction:column;min-height:470px}.gf-pick-role{color:var(--accent);text-transform:uppercase;font-size:11px;font-weight:900;letter-spacing:.14em}.gf-pick img{height:175px;width:100%;object-fit:contain;margin:10px 0}.gf-pick h3{font-size:24px;line-height:1.05;margin:4px 0 9px;letter-spacing:-.035em}.gf-pick-price{font-size:22px;font-weight:850;margin-bottom:12px}.gf-reasons{display:grid;gap:8px;color:#c7cfda;font-size:13px;line-height:1.4;margin:0 0 18px;padding:0;list-style:none}.gf-reasons li:before{content:'\u2713';color:var(--accent);font-weight:900;margin-right:7px}.gf-actions{margin-top:auto;display:grid;grid-template-columns:1fr 1fr;gap:8px}.gf-actions a{text-align:center;text-decoration:none;border-radius:999px;padding:11px 10px;font-size:12px;font-weight:850}.gf-lab{background:var(--accent);color:#071000}.gf-pdp{background:#222a35;color:#fff}.gf-warning{max-width:860px;margin:0 auto 20px;padding:14px 16px;border:1px solid rgba(255,123,114,.35);background:rgba(255,123,114,.08);border-radius:15px;color:#ffd4d0;display:none}.gf-warning.is-on{display:block}.gf-restart{display:block;margin:28px auto 0;border:1px solid var(--line);background:transparent;color:#fff;padding:12px 18px;border-radius:999px;cursor:pointer}.gf-empty{padding:45px;text-align:center;color:var(--muted)}\n@media(max-width:900px){.gf-shell{padding:14px 14px 70px}.gf-stage{grid-template-columns:1fr}.gf-panel{position:relative;top:0}.gf-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.gf-card{min-height:265px}.gf-img{height:120px}.gf-img img{max-height:115px}.gf-picks{grid-template-columns:1fr}.gf-hero{margin-top:22px}.gf-q{font-size:24px}}\n@media(max-width:480px){.gf-grid{gap:9px}.gf-card{padding:11px;border-radius:17px;min-height:240px}.gf-img{height:105px}.gf-img img{max-height:100px}.gf-name{font-size:14px}.gf-price{font-size:16px}.gf-score{display:none}}\n\n\/* v0.2 visual stage: products first, question below *\/\n.gf-stage{display:flex;flex-direction:column;gap:24px;margin-top:24px}\n.gf-products{order:1;width:100%}\n.gf-panel{order:2;position:relative;top:auto;width:min(980px,100%);margin:0 auto;background:rgba(17,21,29,.92);padding:24px 28px}\n.gf-count{justify-content:center;gap:10px;align-items:baseline;margin:0 0 8px}.gf-count strong{font-size:24px}.gf-count span{font-size:12px}\n.gf-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(105px,1fr));gap:10px;align-items:center;min-height:190px}\n.gf-card{min-height:170px;height:170px;padding:6px;background:transparent;border:1px solid transparent;border-radius:18px;justify-content:center;overflow:visible;transition:opacity .38s ease,transform .38s ease,filter .38s ease;}\n.gf-card:hover{background:rgba(255,255,255,.025)}\n.gf-img{height:158px;margin:0}.gf-img img{max-height:150px;max-width:100%;transition:transform .35s ease;filter:drop-shadow(0 16px 20px rgba(0,0,0,.32))}.gf-card:hover .gf-img img{transform:translateY(-3px) scale(1.03)}\n.gf-family,.gf-name,.gf-price,.gf-score{display:none!important}\n.gf-card.is-best{border-color:transparent;box-shadow:none}.gf-card.is-soft{opacity:.28;filter:saturate(.35);transform:scale(.9)}.gf-card.is-out{opacity:.07;filter:grayscale(1);transform:scale(.78);pointer-events:none}\n.gf-q{text-align:center;font-size:clamp(25px,3vw,38px);margin-bottom:8px}.gf-help{text-align:center;max-width:680px;margin:0 auto 20px}.gf-step{text-align:center}.gf-options{display:flex;flex-wrap:wrap;justify-content:center;gap:10px}.gf-option{width:auto;min-width:170px;max-width:260px;text-align:center;flex:1 1 180px}.gf-controls{justify-content:center}.gf-note{text-align:center;max-width:760px;margin:15px auto 0}.gf-progress{max-width:760px;margin:0 auto 20px}\n.gf-hero{margin:24px auto 12px}.gf-hero h1{font-size:clamp(34px,5vw,64px)}.gf-hero p{font-size:16px}\n@media(max-width:900px){.gf-stage{display:flex}.gf-panel{padding:20px 16px}.gf-grid{display:flex;overflow-x:auto;scroll-snap-type:x proximity;min-height:155px;padding:0 8px 8px;gap:6px;scrollbar-width:none}.gf-grid::-webkit-scrollbar{display:none}.gf-card{flex:0 0 112px;width:112px;height:145px;min-height:145px;scroll-snap-align:center}.gf-img{height:138px}.gf-img img{max-height:130px}.gf-options{display:grid;grid-template-columns:1fr 1fr}.gf-option{width:100%;min-width:0;max-width:none}.gf-hero{margin-top:16px}.gf-hero p{font-size:14px}.gf-count{margin-bottom:4px}}\n@media(max-width:480px){.gf-card{flex-basis:96px;width:96px;min-height:130px;height:130px;padding:3px}.gf-img{height:124px}.gf-img img{max-height:116px}.gf-options{grid-template-columns:1fr}.gf-q{font-size:25px}.gf-panel{border-radius:20px}.gf-hero h1{font-size:38px}.gf-hero p{display:none}}\n\n\n\/* v0.3 showroom wall: white-on-white product universe *\/\n.mmr-garmin-finder-embed{--bg:#fff;--panel:#fff;--panel2:#f5f6f7;--text:#11151a;--muted:#66707b;--line:rgba(12,18,24,.12);--accent:#9fd900;--danger:#d94b45}\n.mmr-garmin-finder-embed{background:#fff!important;color:var(--text)!important}\n.mmr-garmin-finder-embed{background:#fff!important}\n.gf-shell{max-width:1680px;padding:18px 28px 80px}\n.gf-top{margin-bottom:4px}.gf-brand{color:#171b20}.gf-dot{box-shadow:none}.gf-close{color:#58616b;background:#fff}\n.gf-hero{margin:12px auto 8px}.gf-kicker{color:#76a800}.gf-hero h1{font-size:clamp(30px,4vw,54px);margin:8px 0 8px;line-height:1;letter-spacing:-.045em}.gf-hero p{font-size:14px;max-width:650px;color:#707984}\n.gf-stage{gap:12px;margin-top:8px}.gf-products{min-height:390px;display:flex;flex-direction:column;justify-content:center}\n.gf-count{margin:0 0 4px}.gf-count strong{font-size:20px;color:#15191e}.gf-count span{color:#7b848e}\n.gf-grid{display:flex;flex-wrap:wrap;justify-content:center;align-items:center;align-content:center;gap:0 0;min-height:350px;transition:all .45s ease;padding:0 10px}\n.gf-card{display:flex;flex:0 1 130px;width:130px;height:165px;min-height:165px;padding:0;margin:0 -4px;background:#fff!important;border:0!important;border-radius:0!important;overflow:hidden;align-items:center;justify-content:center;order:0!important;transition:opacity .28s ease,transform .38s cubic-bezier(.2,.8,.2,1),width .45s ease,flex-basis .45s ease,margin .45s ease}\n.gf-img{width:100%;height:100%;margin:0;background:#fff;display:flex;align-items:center;justify-content:center;overflow:hidden}\n.gf-img img{display:block;width:100%;height:100%;max-width:100%;max-height:100%;object-fit:contain;filter:none!important;mix-blend-mode:multiply;transition:transform .35s ease}\n.gf-card:hover{background:#fff!important}.gf-card:hover .gf-img img{transform:scale(1.06)}\n.gf-card.is-soft{opacity:.48;filter:none;transform:scale(.94)}\n.gf-card.is-out{display:none!important}\n.gf-card.is-best{box-shadow:none!important}\n.gf-panel{width:min(980px,100%);background:#fff!important;border:1px solid #e3e6e8;box-shadow:0 14px 44px rgba(19,27,35,.08);color:#15191e;padding:18px 26px 20px;border-radius:22px}\n.gf-progress{height:3px;background:#edf0f1;margin-bottom:14px}.gf-step{color:#78a900;margin-bottom:7px}.gf-q{font-size:clamp(24px,2.5vw,34px);color:#11151a}.gf-help{color:#6d7680;margin-bottom:15px}\n.gf-option{color:#15191e;background:#fff;border-color:#dfe3e6;padding:12px 15px}.gf-option:hover{border-color:#9fd900;background:#fbfff3}.gf-option span{color:#77808a}.gf-option.is-selected{border-color:#9fd900;background:#f6ffe1;box-shadow:0 0 0 1px #9fd900 inset}\n.gf-btn-main{background:#b7ed1e;color:#101600}.gf-btn-ghost{background:#eef1f2;color:#303840}.gf-note{background:#f6f7f8;color:#747d86;padding:9px 12px}.gf-progress>i{background:#a8df13}\n.gf-results{color:#f5f7fb}.gf-results.is-on{background:#07090d;margin:0 -28px -80px;padding:42px 28px 80px;min-height:100vh}.gf-result-head p{color:#9aa4b4}.gf-pick{background:#111720;border-color:rgba(255,255,255,.10)}.gf-pick-role{color:#c9ff39}.gf-reasons{color:#c7cfda}.gf-reasons li:before{color:#c9ff39}.gf-lab{background:#c9ff39}.gf-restart{color:#fff;border-color:rgba(255,255,255,.15)}\n@media(min-width:1200px){.gf-card{flex-basis:145px;width:145px;height:178px}.gf-grid{min-height:375px}.gf-products{min-height:405px}}\n@media(max-width:900px){.gf-shell{padding:12px 12px 60px}.gf-hero{margin-top:8px}.gf-products{min-height:220px}.gf-grid{display:flex;flex-wrap:nowrap;justify-content:flex-start;overflow-x:auto;min-height:190px;padding:0 4px 8px;gap:0}.gf-card{display:flex;flex:0 0 135px;width:135px;height:180px;min-height:180px;margin:0 -7px}.gf-card.is-out{display:none!important}.gf-panel{padding:17px 14px}.gf-results.is-on{margin:0 -12px -60px;padding:34px 14px 60px}}\n@media(max-width:480px){.gf-hero h1{font-size:31px}.gf-products{min-height:185px}.gf-grid{min-height:165px}.gf-card{flex-basis:118px;width:118px;height:158px;min-height:158px}.gf-count strong{font-size:18px}}\n\n\n\/* === Finder 0.4: single-row showroom, full viewport, MioMioRun palette === *\/\n.mmr-garmin-finder-embed{--mmr-navy:#242f5d;--mmr-pink:#d21774;--mmr-ink:#151923;--mmr-muted:#6f7783;--mmr-line:#e6e8ed}\n.mmr-garmin-finder-embed{height:100svh;min-height:100svh;overflow:hidden;background:#fff!important;color:var(--mmr-ink)!important}\n.mmr-garmin-finder-embed{min-height:100svh;background:#fff!important}\n.gf-shell{height:100vh;max-width:none;margin:0;padding:10px 22px 12px;display:flex;flex-direction:column;overflow:hidden;background:#fff}\n.gf-top{height:32px;min-height:32px;margin:0;align-items:center}\n.gf-brand{color:var(--mmr-navy);font-size:11px;letter-spacing:.12em}.gf-dot{background:var(--mmr-pink);box-shadow:none;width:8px;height:8px}.gf-close{color:#707784;border-color:#e5e7eb;padding:6px 10px;font-size:11px}\n.gf-hero{flex:0 0 auto;max-width:none;width:100%;margin:4px auto 2px;text-align:center}.gf-kicker{display:none}.gf-hero h1{font-size:clamp(24px,2.6vw,39px);line-height:1;margin:0;color:var(--mmr-navy);letter-spacing:-.04em}.gf-hero p{display:none}\n.gf-stage{flex:1;min-height:0;display:flex!important;flex-direction:column;gap:6px;margin:0;align-items:stretch;overflow:hidden}\n.gf-products{flex:1 1 auto;min-height:0!important;display:flex;flex-direction:column;justify-content:center;overflow:hidden;padding:0;margin:0}\n.gf-count{height:20px;min-height:20px;margin:0 0 1px;justify-content:center;align-items:center;gap:6px}.gf-count strong{font-size:14px;color:var(--mmr-navy);letter-spacing:0}.gf-count span{font-size:10px;color:#8a9099}\n.gf-grid{--cardW:150px;--cardH:min(39vh,350px);display:flex!important;flex-wrap:nowrap!important;align-items:center;justify-content:flex-start;gap:0!important;width:max-content;max-width:none;min-height:0!important;height:var(--cardH);padding:0!important;margin:0;position:relative;left:50%;transform:translateX(-50%);overflow:visible!important;transition:width .45s ease,transform .45s ease}\n.gf-card{display:flex!important;flex:0 0 var(--cardW)!important;width:var(--cardW)!important;height:var(--cardH)!important;min-height:0!important;margin:0 -9px!important;padding:0!important;background:transparent!important;border:0!important;border-radius:0!important;overflow:visible!important;align-items:center;justify-content:center;transition:opacity .35s ease,transform .45s cubic-bezier(.2,.75,.25,1),width .45s ease,flex-basis .45s ease!important;order:500}\n.gf-card.is-out{display:none!important}.gf-card.is-soft{opacity:.35;transform:scale(.92)}.gf-card.is-best{box-shadow:none!important}\n.gf-img{width:100%;height:100%!important;margin:0!important;display:flex;align-items:center;justify-content:center}.gf-img img{width:100%;height:100%;max-width:100%!important;max-height:100%!important;object-fit:contain;filter:none!important;mix-blend-mode:multiply}\n.gf-family,.gf-name,.gf-price,.gf-score{display:none!important}\n.gf-panel{flex:0 0 auto;width:min(1180px,96vw);max-height:31vh;min-height:175px;margin:0 auto;background:#fff!important;border:1px solid var(--mmr-line)!important;border-radius:18px!important;box-shadow:0 9px 30px rgba(36,47,93,.07)!important;color:var(--mmr-ink)!important;padding:10px 18px 11px!important;overflow:hidden;position:relative!important;top:auto!important}\n.gf-progress{height:2px;margin:0 0 6px;background:#eceef3}.gf-progress>i{background:var(--mmr-pink)!important}.gf-step{color:var(--mmr-pink)!important;font-size:9px;margin:0 0 3px;letter-spacing:.12em}.gf-q{font-size:clamp(19px,2vw,28px)!important;line-height:1.02;margin:0 0 4px;color:var(--mmr-navy)!important}.gf-help{font-size:11px;line-height:1.25;color:#777e88;margin:0 0 7px}\n.gf-options{display:flex!important;flex-wrap:nowrap;justify-content:center;gap:7px;overflow-x:auto;padding-bottom:1px}.gf-option{flex:1 1 0;min-width:150px;max-width:270px;text-align:center;padding:8px 10px!important;border-radius:12px!important;background:#fff;color:var(--mmr-ink);border-color:#dde1e8}.gf-option:hover{border-color:var(--mmr-pink);background:#fff8fc;transform:none}.gf-option.is-selected{border-color:var(--mmr-pink)!important;background:#fff5fa!important;box-shadow:0 0 0 1px var(--mmr-pink) inset!important}.gf-option strong{font-size:12px}.gf-option span{font-size:9px;margin-top:2px;line-height:1.15;color:#7b818a}\n.gf-controls{justify-content:center;gap:7px;margin-top:7px}.gf-btn{padding:7px 13px;font-size:10px}.gf-btn-main{background:var(--mmr-pink)!important;color:#fff!important}.gf-btn-ghost{background:#eef0f5!important;color:var(--mmr-navy)!important}.gf-note{display:none!important}\n.gf-results{display:none!important}\n.gf-final{display:none;height:100%;overflow:hidden}.gf-final.is-on{display:flex;flex-direction:column}.gf-final-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:7px}.gf-final-head strong{color:var(--mmr-navy);font-size:18px;letter-spacing:-.02em}.gf-final-head span{color:#747b86;font-size:10px}.gf-final-warning{font-size:10px;color:#a13a55;background:#fff3f7;border:1px solid #f4c7d8;border-radius:9px;padding:6px 8px;margin-bottom:6px}\n.gf-final-picks{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;min-height:0}.gf-final-pick{min-width:0;border-left:3px solid var(--mmr-navy);padding:3px 10px 2px;background:#fafbfc;border-radius:8px}.gf-final-pick:first-child{border-left-color:var(--mmr-pink)}.gf-final-role{font-size:8px;text-transform:uppercase;letter-spacing:.12em;font-weight:900;color:var(--mmr-pink)}.gf-final-name{font-size:15px;font-weight:850;line-height:1.05;color:var(--mmr-navy);margin:2px 0}.gf-final-price{font-size:14px;font-weight:850;margin-bottom:3px}.gf-final-reasons{margin:0 0 5px;padding:0;list-style:none;font-size:9px;color:#59616d;line-height:1.25}.gf-final-reasons li{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.gf-final-reasons li:before{content:'\u2022';color:var(--mmr-pink);font-weight:900;margin-right:4px}.gf-final-actions{display:flex;gap:5px}.gf-final-actions a,.gf-final-restart{font-size:9px;font-weight:850;text-decoration:none;border-radius:999px;padding:5px 8px}.gf-final-lab{background:var(--mmr-pink);color:#fff}.gf-final-pdp{background:var(--mmr-navy);color:#fff}.gf-final-restart{border:1px solid #dce0e8;background:#fff;color:var(--mmr-navy);cursor:pointer;margin-left:auto}\n@media(max-width:900px){.mmr-garmin-finder-embed{overflow:hidden}.gf-shell{padding:7px 8px 8px}.gf-top{height:28px;min-height:28px}.gf-brand{font-size:9px}.gf-hero{margin:2px 0}.gf-hero h1{font-size:21px}.gf-products{min-height:0!important}.gf-grid{--cardW:118px;--cardH:min(37vh,270px);height:var(--cardH);overflow:visible!important}.gf-card{flex-basis:var(--cardW)!important;width:var(--cardW)!important;height:var(--cardH)!important;margin:0 -7px!important}.gf-panel{width:100%;max-height:36vh;min-height:190px;padding:8px 9px 9px!important}.gf-options{justify-content:flex-start;overflow-x:auto}.gf-option{flex:0 0 44vw;min-width:135px}.gf-final-picks{grid-template-columns:1fr;overflow:auto;gap:4px}.gf-final-pick{padding:4px 8px}.gf-final-head strong{font-size:15px}.gf-final-name{font-size:13px}.gf-final-reasons{display:none}.gf-final-actions a{font-size:8px}}\n@media(max-height:760px) and (min-width:901px){.gf-grid{--cardH:min(36vh,270px)}.gf-panel{max-height:32vh;min-height:160px}.gf-option{padding:6px 9px!important}.gf-help{margin-bottom:5px}.gf-controls{margin-top:5px}}\n\n\n\/* === Finder 0.5: larger showroom + result text aligned to products === *\/\n.gf-top{height:26px;min-height:26px}.gf-hero{margin:0 auto}.gf-hero h1{font-size:clamp(22px,2.25vw,34px)}\n.gf-products{justify-content:center}.gf-count{height:16px;min-height:16px;margin:0}.gf-count strong{font-size:12px}.gf-count span{font-size:9px}\n.gf-grid{--cardW:190px;--cardH:min(54vh,500px);height:var(--cardH)}\n.gf-card{margin:0 -15px!important}.gf-img img{transform:scale(1.18);transform-origin:center center}\n.gf-panel{width:min(1320px,98vw);max-height:27vh;min-height:152px;padding:8px 14px 9px!important}\n.gf-progress{margin-bottom:4px}.gf-step{margin-bottom:2px}.gf-q{font-size:clamp(18px,1.7vw,25px)!important;margin-bottom:2px}.gf-help{margin-bottom:5px;font-size:10px}.gf-option{padding:7px 9px!important}.gf-controls{margin-top:5px}\n.gf-final{justify-content:flex-start}.gf-final-head{margin-bottom:5px}.gf-final-picks{display:flex;justify-content:center;gap:0;width:100%;overflow:visible}.gf-final-pick{flex:0 0 var(--finalW,220px);width:var(--finalW,220px);margin:0 var(--finalGap,-6px);padding:3px 8px 2px;background:transparent;border-radius:0;border-left:0;border-top:2px solid var(--mmr-navy);text-align:center}.gf-final-pick:first-child{border-top-color:var(--mmr-pink)}.gf-final-reasons li{white-space:normal}.gf-final-actions{justify-content:center}\n@media(min-width:1200px){.gf-grid{--cardH:min(56vh,540px)}}\n@media(max-height:760px) and (min-width:901px){.gf-grid{--cardH:min(49vh,390px)}.gf-panel{min-height:145px;max-height:29vh}.gf-img img{transform:scale(1.14)}}\n@media(max-width:900px){.gf-grid{--cardH:min(43vh,330px)}.gf-card{margin:0 -10px!important}.gf-img img{transform:scale(1.12)}.gf-panel{min-height:180px;max-height:38vh}.gf-final-picks{overflow-x:auto;justify-content:flex-start}.gf-final-pick{flex:0 0 72vw;width:72vw;text-align:left}.gf-final-actions{justify-content:flex-start}}\n\n\n\/* === Finder 0.6: fewer\/larger products, never overlap; final cards grow around the same products === *\/\n.gf-products{overflow:hidden!important}\n.gf-grid{gap:clamp(10px,1.25vw,22px)!important;overflow:visible!important;transition:transform .48s cubic-bezier(.2,.75,.25,1),width .48s ease,height .48s ease!important}\n.gf-card{margin:0!important;overflow:visible!important;transition:opacity .3s ease,transform .48s cubic-bezier(.2,.75,.25,1),width .48s ease,flex-basis .48s ease,height .48s ease,border-color .35s ease,box-shadow .35s ease,padding .35s ease!important}\n.gf-img{overflow:visible!important}\n.gf-img img{transform:scale(1.08)!important;transition:transform .48s cubic-bezier(.2,.75,.25,1)!important}\n.gf-card:hover .gf-img img{transform:scale(1.11)!important}\n.gf-stage.is-final{gap:0!important}\n.gf-stage.is-final .gf-panel{flex:0 0 auto;min-height:0!important;max-height:none!important;height:auto!important;padding:0!important;border:0!important;box-shadow:none!important;background:transparent!important;overflow:visible!important;margin-top:4px}\n.gf-stage.is-final .gf-products{flex:1 1 auto;justify-content:center!important;overflow:hidden!important}\n.gf-stage.is-final .gf-count{display:none!important}\n.gf-grid.is-final{--cardH:min(72vh,660px);height:var(--cardH)!important;align-items:stretch!important;justify-content:center!important;gap:clamp(12px,1.45vw,26px)!important;width:max-content!important;max-width:none!important}\n.gf-grid.is-final .gf-card{display:none!important}\n.gf-grid.is-final .gf-card.is-final-card{display:flex!important;flex-direction:column!important;align-items:stretch!important;justify-content:flex-start!important;height:var(--cardH)!important;min-height:0!important;background:#fff!important;border:1px solid #e3e6eb!important;border-radius:20px!important;padding:10px 12px 12px!important;box-shadow:0 10px 28px rgba(36,47,93,.07)!important;overflow:hidden!important}\n.gf-grid.is-final .gf-card.is-final-card:first-of-type{border-color:#e8bfd3!important;box-shadow:0 10px 30px rgba(210,23,116,.08)!important}\n.gf-grid.is-final .gf-card.is-final-card .gf-img{height:min(38vh,350px)!important;flex:0 0 min(38vh,350px)!important;margin:0!important}\n.gf-grid.is-final .gf-card.is-final-card .gf-img img{transform:scale(1.04)!important}\n.gf-card-detail{display:none}\n.gf-card.is-final-card .gf-card-detail{display:flex;flex:1 1 auto;min-height:0;flex-direction:column;text-align:left;padding:2px 4px 0}\n.gf-card-detail-role{font-size:8px;text-transform:uppercase;letter-spacing:.12em;font-weight:900;color:var(--mmr-pink);margin-bottom:3px}\n.gf-card-detail-name{font-size:clamp(15px,1.35vw,20px);font-weight:850;line-height:1.05;color:var(--mmr-navy);margin:0 0 3px}\n.gf-card-detail-price{font-size:clamp(14px,1.1vw,18px);font-weight:850;color:var(--mmr-ink);margin-bottom:6px}\n.gf-card-detail-reasons{margin:0 0 8px;padding:0;list-style:none;font-size:9px;color:#5f6670;line-height:1.28}\n.gf-card-detail-reasons li{margin:0 0 2px}.gf-card-detail-reasons li:before{content:'\u2022';color:var(--mmr-pink);font-weight:900;margin-right:4px}\n.gf-plan{margin:4px 0 8px;text-align:left}.gf-plan-label{font-size:7px;font-weight:900;letter-spacing:.11em;text-transform:uppercase;color:#8a909a;margin-bottom:3px}.gf-plan-line{font-size:9px;line-height:1.3;color:#4f5661}.gf-plan-plus{margin-top:4px;padding-top:4px;border-top:1px solid #eceef2;color:var(--mmr-navy);font-weight:800}.gf-plan-plus b{color:var(--mmr-pink)}\n.gf-card-detail-actions{display:flex;gap:6px;margin-top:auto}.gf-card-detail-actions a{flex:1 1 0;text-align:center;text-decoration:none;border-radius:999px;padding:6px 7px;font-size:9px;font-weight:850}.gf-card-detail-lab{background:var(--mmr-pink);color:#fff}.gf-card-detail-pdp{background:var(--mmr-navy);color:#fff}\n.gf-final{height:auto!important;overflow:visible!important}.gf-final.is-on{display:flex!important;flex-direction:row!important;align-items:center;justify-content:center;gap:10px;padding:4px 0 0}.gf-final-head{width:100%;margin:0!important;justify-content:center!important}.gf-final-head>div{display:flex;align-items:baseline;gap:6px}.gf-final-head strong{font-size:12px}.gf-final-head span{font-size:9px}.gf-final-warning{position:fixed;left:50%;bottom:10px;transform:translateX(-50%);z-index:5;max-width:760px;margin:0;font-size:9px}.gf-final-picks{display:none!important}.gf-final-restart{margin-left:8px!important;font-size:9px!important;padding:5px 9px!important}\n@media(min-width:1200px){.gf-grid.is-final .gf-card.is-final-card .gf-img{height:min(40vh,380px)!important;flex-basis:min(40vh,380px)!important}}\n@media(max-height:760px) and (min-width:901px){.gf-grid.is-final{--cardH:min(70vh,525px)}.gf-grid.is-final .gf-card.is-final-card .gf-img{height:min(34vh,260px)!important;flex-basis:min(34vh,260px)!important}.gf-card-detail-reasons{font-size:8px;margin-bottom:5px}.gf-card-detail-actions a{padding:5px 6px}}\n@media(max-width:900px){.gf-grid{gap:10px!important}.gf-card{margin:0!important}.gf-img img{transform:scale(1.05)!important}.gf-grid.is-final{--cardH:min(72vh,600px);justify-content:flex-start!important;overflow-x:auto!important;left:0!important;transform:none!important;padding:0 8px!important}.gf-grid.is-final .gf-card.is-final-card{flex:0 0 78vw!important;width:78vw!important}.gf-grid.is-final .gf-card.is-final-card .gf-img{height:min(34vh,290px)!important;flex-basis:min(34vh,290px)!important}.gf-card-detail-reasons{font-size:10px}.gf-plan-label{font-size:6px}.gf-plan-line{font-size:7px}.gf-final.is-on{padding-top:2px}}\n\n\/* === Finder 0.7: larger desktop objects + two-row mobile wall === *\/\n@media(min-width:901px){\n  .gf-grid{gap:clamp(14px,1.45vw,26px)!important}\n  .gf-img img{transform:scale(1.10)!important}\n  .gf-card:hover .gf-img img{transform:scale(1.12)!important}\n}\n@media(max-width:900px){\n  .mmr-garmin-finder-embed{height:100svh;min-height:100svh;overflow:hidden!important}\n  .gf-shell{height:100dvh;min-height:100dvh;padding:5px 7px 6px!important}\n  .gf-top{height:24px!important;min-height:24px!important}\n  .gf-brand{font-size:8px!important}.gf-close{font-size:9px!important;padding:4px 7px!important}\n  .gf-hero{margin:1px 0 0!important;flex:0 0 auto}.gf-hero h1{font-size:18px!important;line-height:1!important}\n  .gf-stage{flex:1 1 auto!important;min-height:0!important;gap:4px!important;overflow:hidden!important}\n  .gf-products{flex:1 1 47%!important;min-height:0!important;overflow:hidden!important;justify-content:center!important}\n  .gf-count{height:15px!important;min-height:15px!important;margin:0!important}.gf-count strong{font-size:11px!important}.gf-count span{font-size:8px!important}\n  .gf-grid:not(.is-final){\n    --mobileCol:104px;\n    display:grid!important;\n    grid-template-rows:repeat(2,minmax(0,1fr))!important;\n    grid-auto-flow:column!important;\n    grid-auto-columns:var(--mobileCol)!important;\n    align-items:center!important;\n    justify-content:start!important;\n    gap:2px 5px!important;\n    width:100%!important;\n    height:min(41vh,320px)!important;\n    min-height:0!important;\n    left:0!important;transform:none!important;\n    overflow-x:auto!important;overflow-y:hidden!important;\n    padding:0 8px 3px!important;\n    scroll-snap-type:x proximity;\n    scrollbar-width:none;\n  }\n  .gf-grid:not(.is-final)::-webkit-scrollbar{display:none}\n  .gf-grid:not(.is-final) .gf-card{\n    width:var(--mobileCol)!important;\n    max-width:var(--mobileCol)!important;\n    min-width:var(--mobileCol)!important;\n    height:100%!important;\n    min-height:0!important;\n    flex:none!important;\n    margin:0!important;\n    scroll-snap-align:center;\n    overflow:hidden!important;\n  }\n  .gf-grid:not(.is-final) .gf-img{height:100%!important;overflow:hidden!important}\n  .gf-grid:not(.is-final) .gf-img img{width:100%!important;height:100%!important;object-fit:contain!important;transform:scale(1.04)!important}\n  .gf-panel{\n    flex:0 0 auto!important;\n    width:100%!important;\n    height:auto!important;\n    min-height:0!important;\n    max-height:44vh!important;\n    padding:7px 8px 7px!important;\n    border-radius:14px!important;\n    overflow:hidden!important;\n  }\n  .gf-progress{margin:0 0 3px!important}.gf-step{font-size:7px!important;margin:0 0 2px!important}\n  .gf-q{font-size:17px!important;line-height:1.04!important;margin:0 0 2px!important}\n  .gf-help{font-size:8px!important;line-height:1.15!important;margin:0 0 5px!important}\n  .gf-options{display:grid!important;grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:4px!important;overflow:visible!important;padding:0!important}\n  .gf-option{width:100%!important;min-width:0!important;max-width:none!important;padding:6px 5px!important;border-radius:9px!important}\n  .gf-option strong{font-size:9px!important;line-height:1.05!important}.gf-option span{font-size:7px!important;line-height:1.05!important;margin-top:1px!important}\n  .gf-controls{margin-top:5px!important;gap:5px!important}.gf-btn{padding:5px 9px!important;font-size:8px!important}\n}\n@media(max-width:430px) and (max-height:740px){\n  .gf-products{flex-basis:43%!important}\n  .gf-grid:not(.is-final){height:min(36vh,250px)!important;--mobileCol:92px}\n  .gf-panel{max-height:48vh!important}\n  .gf-hero h1{font-size:16px!important}\n}\n\n\n\n\/* === Finder 0.8: 3-row mobile wall + 2x2 final reveal, all visible === *\/\n@media(max-width:900px){\n  .gf-products{flex:1 1 50%!important}\n  .gf-grid:not(.is-final){\n    --mobileCol:88px!important;\n    grid-template-rows:repeat(3,minmax(0,1fr))!important;\n    grid-auto-columns:var(--mobileCol)!important;\n    height:min(43vh,330px)!important;\n    gap:2px 4px!important;\n    padding:0 6px 3px!important;\n  }\n  .gf-grid:not(.is-final) .gf-card{\n    width:var(--mobileCol)!important;\n    min-width:var(--mobileCol)!important;\n    max-width:var(--mobileCol)!important;\n  }\n  .gf-grid:not(.is-final) .gf-img img{transform:scale(1.07)!important}\n  .gf-panel{max-height:41vh!important}\n\n  \/* Final: no horizontal carousel. The four survivors become a 2x2 board. *\/\n  .gf-stage.is-final{overflow:hidden!important}\n  .gf-stage.is-final .gf-products{flex:1 1 auto!important;min-height:0!important;overflow:hidden!important;justify-content:center!important}\n  .gf-grid.is-final{\n    --cardH:auto!important;\n    display:grid!important;\n    grid-template-columns:repeat(2,minmax(0,1fr))!important;\n    grid-template-rows:repeat(2,minmax(0,1fr))!important;\n    width:100%!important;\n    height:min(82vh,690px)!important;\n    max-height:calc(100dvh - 78px)!important;\n    gap:6px!important;\n    overflow:hidden!important;\n    padding:2px!important;\n    left:0!important;\n    transform:none!important;\n    align-items:stretch!important;\n    justify-content:stretch!important;\n  }\n  .gf-grid.is-final .gf-card.is-final-card{\n    width:100%!important;\n    min-width:0!important;\n    max-width:none!important;\n    height:100%!important;\n    min-height:0!important;\n    flex:none!important;\n    padding:6px 7px 7px!important;\n    border-radius:13px!important;\n    box-shadow:0 5px 16px rgba(36,47,93,.055)!important;\n  }\n  .gf-grid.is-final .gf-card.is-final-card .gf-img{\n    height:auto!important;\n    flex:0 0 44%!important;\n    min-height:0!important;\n    margin:0!important;\n  }\n  .gf-grid.is-final .gf-card.is-final-card .gf-img img{\n    width:100%!important;\n    height:100%!important;\n    max-height:none!important;\n    object-fit:contain!important;\n    transform:scale(1.03)!important;\n  }\n  .gf-card.is-final-card .gf-card-detail{padding:0 1px!important;overflow:hidden!important}\n  .gf-card-detail-role{font-size:6px!important;line-height:1.05!important;margin-bottom:1px!important;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n  .gf-card-detail-name{font-size:11px!important;line-height:1.02!important;margin:0 0 1px!important}\n  .gf-card-detail-price{font-size:10px!important;line-height:1!important;margin-bottom:2px!important}\n  .gf-card-detail-reasons{font-size:7px!important;line-height:1.12!important;margin:0 0 3px!important;display:block!important;max-height:2.4em;overflow:hidden}\n  .gf-card-detail-reasons li{margin:0 0 1px!important}\n  .gf-card-detail-actions{gap:3px!important;margin-top:auto!important}\n  .gf-card-detail-actions a{font-size:6.5px!important;padding:4px 3px!important;white-space:nowrap!important}\n  .gf-final.is-on{padding:0!important;min-height:20px!important}\n  .gf-final-head{justify-content:space-between!important;padding-top:1px!important}\n  .gf-final-head strong{font-size:9px!important}.gf-final-head span{font-size:7px!important}\n  .gf-final-restart{font-size:7px!important;padding:3px 6px!important;margin-left:4px!important}\n}\n@media(max-width:430px) and (max-height:740px){\n  .gf-grid:not(.is-final){--mobileCol:78px!important;height:min(40vh,280px)!important}\n  .gf-panel{max-height:44vh!important}\n  .gf-grid.is-final{height:calc(100dvh - 72px)!important;max-height:calc(100dvh - 72px)!important;gap:4px!important}\n  .gf-grid.is-final .gf-card.is-final-card{padding:5px!important}\n  .gf-grid.is-final .gf-card.is-final-card .gf-img{flex-basis:42%!important}\n  .gf-card-detail-reasons{font-size:6.5px!important;max-height:2.25em!important}\n}\n\n\/* === 1.7.16 Finder readability pass === *\/\n@media(min-width:901px){\n  .gf-count strong{font-size:28px!important}.gf-count span{font-size:14px!important}\n  .gf-step{font-size:11px!important}\n  .gf-q{font-size:clamp(22px,2vw,30px)!important;line-height:1.08!important}\n  .gf-help{font-size:13px!important;line-height:1.4!important;margin-bottom:10px!important}\n  .gf-option{padding:10px 12px!important}\n  .gf-option strong{font-size:14px!important;line-height:1.15!important}\n  .gf-option span{font-size:11px!important;line-height:1.25!important;margin-top:3px!important}\n  .gf-btn{font-size:11px!important;padding:7px 12px!important}\n  .gf-card-detail-role{font-size:10px!important;line-height:1.15!important;margin-bottom:4px!important}\n  .gf-card-detail-name{font-size:clamp(17px,1.45vw,21px)!important;line-height:1.08!important}\n  .gf-card-detail-price{font-size:clamp(16px,1.2vw,19px)!important;margin-bottom:7px!important}\n  .gf-card-detail-reasons{font-size:11px!important;line-height:1.38!important;margin-bottom:8px!important}\n  .gf-card-detail-actions a{font-size:10px!important;padding:7px 8px!important}\n  .gf-final-head strong{font-size:12px!important}.gf-final-head span{font-size:10px!important}\n}\n@media(max-width:900px){\n  .gf-step{font-size:9px!important}.gf-q{font-size:19px!important}\n  .gf-help{font-size:10px!important;line-height:1.25!important}\n  .gf-option strong{font-size:11px!important}.gf-option span{font-size:9px!important;line-height:1.15!important}\n  .gf-btn{font-size:9px!important}\n  .gf-card-detail-role{font-size:7.5px!important}.gf-card-detail-name{font-size:12px!important}.gf-card-detail-price{font-size:11px!important}\n  .gf-card-detail-reasons{font-size:8px!important;line-height:1.2!important;max-height:2.5em!important}\n  .gf-card-detail-actions a{font-size:7.5px!important}\n}\n\n\n\/* === 1.7.17: square showroom geometry (desktop, selection only) ===\n * Keep the selection-stage product viewport square on desktop.\n * Final result cards and mobile wall are intentionally untouched.\n *\/\n@media(min-width:901px){\n  .gf-stage:not(.is-final) .gf-products{justify-content:center!important}\n  \/* 1.7.18: visually centre the live count in the breathing room between title and wall. *\/\n  .gf-stage:not(.is-final) .gf-count{transform:translateY(-24px)!important}\n  .gf-stage:not(.is-final) .gf-count{flex:0 0 20px!important;height:20px!important;min-height:20px!important;position:relative;z-index:2}\n  .gf-stage:not(.is-final) .gf-grid{height:var(--cardW)!important;min-height:var(--cardW)!important;max-height:var(--cardW)!important;flex:0 0 var(--cardW)!important}\n  .gf-stage:not(.is-final) .gf-card{height:var(--cardW)!important;min-height:var(--cardW)!important;max-height:var(--cardW)!important;aspect-ratio:1\/1!important}\n  .gf-stage:not(.is-final) .gf-img{height:100%!important;aspect-ratio:1\/1!important}\n}\n\n\n\/* 1.7.21: semantic Watch training tier + existing opt-in diagnostics (?mmr_garmin_debug=1). *\/\n.gf-debug{margin:14px auto 0;max-width:980px;border:1px solid #dfe3ef;border-radius:12px;background:#fff;padding:10px 12px;font-size:12px;color:#18244d}.gf-debug summary{cursor:pointer;font-weight:800;font-size:13px}.gf-debug-scroll{overflow:auto;margin-top:9px}.gf-debug table{width:100%;border-collapse:collapse;white-space:nowrap}.gf-debug th,.gf-debug td{padding:6px 8px;border-bottom:1px solid #edf0f6;text-align:left}.gf-debug th{font-size:11px;text-transform:uppercase;letter-spacing:.03em}.gf-debug-answers{margin-top:8px;font-size:10px;overflow-wrap:anywhere;color:#68708b}\n\n\/* 1.7.26: real WordPress-page shell. The Finder owns one viewport, but never styles the site body\/header\/footer. *\/\n.mmr-garmin-finder-embed{width:100vw;max-width:100vw;margin-left:calc(50% - 50vw);position:relative;overflow:hidden}\nbody.page-garmin-finder .page-title,body.page-garmin-finder .page-header,body.page-garmin-finder .entry-title{display:none!important}\nbody.page-garmin-finder .site-main,body.page-garmin-finder .content-area,body.page-garmin-finder article,body.page-garmin-finder .entry-content{margin-top:0!important;margin-bottom:0!important;padding-top:0!important;padding-bottom:0!important}\n\n\/* 1.7.30: viewport focus. The site header stays above the Finder; on entry we scroll the Finder to the top and give it the full viewport. *\/\nbody.page-garmin-finder .mmr-garmin-finder-embed{height:100svh!important;min-height:560px!important;scroll-margin-top:0!important}\nbody.page-garmin-finder .gf-shell{height:100%!important;min-height:0!important;padding-top:6px!important;padding-bottom:8px!important}\nbody.page-garmin-finder .gf-top{height:24px!important;min-height:24px!important}\nbody.page-garmin-finder .gf-hero{margin:0 auto!important}\nbody.page-garmin-finder .gf-stage{gap:3px!important}\nbody.page-garmin-finder .gf-stage:not(.is-final) .gf-count{transform:translateY(-12px)!important}\nbody.page-garmin-finder .gf-panel{padding-top:8px!important;padding-bottom:8px!important}\n@media(max-width:900px){\n body.page-garmin-finder .mmr-garmin-finder-embed{height:100dvh!important;min-height:500px!important;scroll-margin-top:0!important}\n body.page-garmin-finder .gf-shell{padding:5px 8px 6px!important}\n body.page-garmin-finder .gf-top{height:23px!important;min-height:23px!important}\n body.page-garmin-finder .gf-hero{margin:0!important}\n body.page-garmin-finder .gf-stage{gap:2px!important}\n body.page-garmin-finder .gf-products{flex-basis:46%!important}\n body.page-garmin-finder .gf-grid:not(.is-final){height:min(39vh,300px)!important}\n body.page-garmin-finder .gf-panel{max-height:42vh!important;padding:6px 8px!important}\n body.page-garmin-finder #gfNext{display:none!important}\n}\n<\/style>\n<div class=\"mmr-garmin-finder-embed\"><div class=\"gf-shell\">\n  <div class=\"gf-top\"><div class=\"gf-brand\"><i class=\"gf-dot\"><\/i>MioMioRun \u00b7 Garmin Finder<\/div><a class=\"gf-close\" href=\"https:\/\/www.miomiorun.com\/es\/\">Chiudi<\/a><\/div>\n  <section class=\"gf-hero\" id=\"gfHero\"><div class=\"gf-kicker\">Garmin Finder<\/div><h1>Troviamo il Garmin giusto per te.<\/h1><p>Guarda la selezione cambiare mentre rispondi. All\u2019inizio niente nomi e niente prezzi: prima capiamo cosa ti serve.<\/p><\/section>\n  <section class=\"gf-stage\" id=\"gfStage\">\n    <div class=\"gf-products\">\n      <div class=\"gf-count\"><strong id=\"gfCount\">0<\/strong><span id=\"gfCountLabel\">Garmin disponibili ora<\/span><\/div>\n      <div class=\"gf-grid\" id=\"gfGrid\"><\/div>\n    <\/div>\n    <aside class=\"gf-panel\">\n      <div id=\"gfQuestionUI\">\n        <div class=\"gf-progress\"><i id=\"gfProgress\"><\/i><\/div>\n        <div class=\"gf-step\" id=\"gfStep\">PASSO 1<\/div>\n        <h2 class=\"gf-q\" id=\"gfQuestion\"><\/h2>\n        <div class=\"gf-help\" id=\"gfHelp\"><\/div>\n        <div class=\"gf-options\" id=\"gfOptions\"><\/div>\n        <div class=\"gf-controls\"><button class=\"gf-btn gf-btn-ghost\" id=\"gfBack\" type=\"button\">Indietro<\/button><button class=\"gf-btn gf-btn-main\" id=\"gfNext\" type=\"button\">Continua<\/button><\/div>\n        <div class=\"gf-note\" id=\"gfNote\">Le preferenze riordinano la selezione. I requisiti fanno uscire solo ci\u00f2 che davvero non pu\u00f2 soddisfarli. Nome e prezzo arrivano alla fine.<\/div>\n      <\/div>\n      <div class=\"gf-final\" id=\"gfFinal\"><\/div>\n    <\/aside>\n  <\/section>\n  <section class=\"gf-results\" id=\"gfResults\">\n    <div class=\"gf-result-head\"><div class=\"gf-kicker\">RISULTATO<\/div><h2>Non un vincitore. Una scelta spiegata.<\/h2><p id=\"gfResultIntro\"><\/p><\/div>\n    <div class=\"gf-warning\" id=\"gfWarning\"><\/div>\n    <div class=\"gf-picks\" id=\"gfPicks\"><\/div>\n    <button class=\"gf-restart\" id=\"gfRestart\" type=\"button\">Ricomincia<\/button>\n  <\/section>\n<\/div><\/div>\n<script>\n(()=>{\nconst PRODUCTS=[{\"id\":119163,\"name\":\"eTrex SE\",\"url\":\"https:\/\/www.miomiorun.com\/prodotto\/etrex-se\/\",\"image\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2023\/05\/garmin-etrex-SE-010-02734-00-300x300.jpg\",\"image_large\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2023\/05\/garmin-etrex-SE-010-02734-00-300x300.jpg\",\"class\":\"handheld\",\"family\":\"etrex\",\"price\":139,\"price_max\":139,\"features\":{\"navigation_level\":1,\"maps\":false,\"touchscreen\":false,\"inreach\":false,\"satellite_messaging\":false,\"sos\":false,\"multiband\":false,\"barometric_altimeter\":false,\"battery_hours\":null}},{\"id\":40196,\"name\":\"Smart Varia UT800\",\"url\":\"https:\/\/www.miomiorun.com\/en\/product\/garmin-front-light-smart-varia-ut800\/\",\"image\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2021\/09\/garmin-ut800-010-01673-00-300x300.jpg\",\"image_large\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2021\/09\/garmin-ut800-010-01673-00-300x300.jpg\",\"class\":\"radar\",\"family\":\"varia\",\"price\":149,\"price_max\":149,\"features\":{\"front_light\":true,\"rear_light\":false,\"radar\":false,\"light\":true,\"camera\":false,\"advanced_radar\":false,\"brake_light\":false,\"incident_recording\":false,\"phone_compatible\":false,\"edge_compatible\":true,\"battery_hours\":null}},{\"id\":23264,\"name\":\"Varia\u2122 RTL515 Bike Radar\",\"url\":\"https:\/\/www.miomiorun.com\/en\/product\/garmin-varia-rtl515-bike-radar\/\",\"image\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2020\/05\/garmin-varia-RTL-515-010-02375-00-300x300.jpg\",\"image_large\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2020\/05\/garmin-varia-RTL-515-010-02375-00-300x300.jpg\",\"class\":\"radar\",\"family\":\"varia\",\"price\":149,\"price_max\":149,\"features\":{\"front_light\":false,\"rear_light\":true,\"radar\":true,\"light\":true,\"camera\":false,\"advanced_radar\":false,\"brake_light\":false,\"incident_recording\":false,\"phone_compatible\":true,\"edge_compatible\":true,\"battery_hours\":null}},{\"id\":159264,\"name\":\"Forerunner 165\",\"url\":\"https:\/\/www.miomiorun.com\/prodotto\/forerunner-165\/\",\"image\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2024\/02\/garmin-Forerunner-165-music-turchese-010-02863-32-300x300.webp\",\"image_large\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2024\/02\/garmin-Forerunner-165-music-turchese-010-02863-32-300x300.webp\",\"class\":\"watch\",\"family\":\"forerunner\",\"price\":187,\"price_max\":219,\"features\":{\"maps\":false,\"navigation_level\":1,\"ecg\":false,\"barometric_altimeter\":true,\"amoled\":true,\"touchscreen\":true,\"sleep\":true,\"music\":true,\"calls\":false,\"flashlight\":false,\"multiband\":true,\"training_level\":3,\"training_tier\":1,\"health_level\":3,\"battery_hours\":null,\"inreach\":false,\"lte\":false,\"solar\":false,\"sapphire\":false,\"titanium_case\":false,\"green_flashlight\":false,\"garmin_epic\":false,\"stamina_curves\":false,\"stamina_zones\":false,\"storage_gb\":4,\"display_nits\":null}},{\"id\":459181,\"name\":\"Cirqa Smart Band\",\"url\":\"https:\/\/www.miomiorun.com\/prodotto\/cirqa-smart-band\/\",\"image\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2026\/07\/Garmin-Cirqa-black-S-M-010-04675-10-300x300.webp\",\"image_large\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2026\/07\/Garmin-Cirqa-black-S-M-010-04675-10-300x300.webp\",\"class\":\"smart_band\",\"family\":\"cirqa\",\"price\":199,\"price_max\":199,\"features\":{\"maps\":false,\"navigation_level\":0,\"ecg\":false,\"barometric_altimeter\":false,\"amoled\":false,\"touchscreen\":false,\"sleep\":true,\"music\":false,\"calls\":false,\"flashlight\":false,\"multiband\":false,\"training_level\":4,\"training_tier\":0,\"health_level\":3,\"battery_hours\":null,\"inreach\":false,\"lte\":false,\"solar\":false,\"sapphire\":false,\"titanium_case\":false,\"green_flashlight\":false,\"garmin_epic\":false,\"stamina_curves\":false,\"stamina_zones\":false,\"storage_gb\":null,\"display_nits\":null}},{\"id\":439927,\"name\":\"Forerunner 70\",\"url\":\"https:\/\/www.miomiorun.com\/prodotto\/forerunner-70\/\",\"image\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2026\/05\/Garmin-Forerunner-70-300x300.webp\",\"image_large\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2026\/05\/Garmin-Forerunner-70-300x300.webp\",\"class\":\"watch\",\"family\":\"forerunner\",\"price\":225,\"price_max\":225,\"features\":{\"maps\":false,\"navigation_level\":1,\"ecg\":false,\"barometric_altimeter\":false,\"amoled\":true,\"touchscreen\":true,\"sleep\":true,\"music\":true,\"calls\":false,\"flashlight\":false,\"multiband\":true,\"training_level\":4,\"training_tier\":2,\"health_level\":3,\"battery_hours\":null,\"inreach\":false,\"lte\":false,\"solar\":false,\"sapphire\":false,\"titanium_case\":false,\"green_flashlight\":false,\"garmin_epic\":false,\"stamina_curves\":false,\"stamina_zones\":false,\"storage_gb\":null,\"display_nits\":null}},{\"id\":119109,\"name\":\"Edge 540\",\"url\":\"https:\/\/www.miomiorun.com\/prodotto\/edge-540\/\",\"image\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2023\/05\/garmin-Edge-540-base-010-02694-01-300x300.jpg\",\"image_large\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2023\/05\/garmin-Edge-540-base-010-02694-01-300x300.jpg\",\"class\":\"bike_computer\",\"family\":\"edge\",\"price\":249,\"price_max\":249,\"features\":{\"touchscreen\":false,\"display_inches\":null,\"navigation_level\":3,\"maps\":true,\"climbpro\":true,\"power_guide\":true,\"stamina\":true,\"training_status\":true,\"training_load\":true,\"cycling_dynamics\":true,\"mtb_dynamics\":false,\"speaker\":false,\"garmin_pay\":false,\"solar\":false,\"battery_hours\":null}},{\"id\":310567,\"name\":\"Vivoactive 6\",\"url\":\"https:\/\/www.miomiorun.com\/prodotto\/vivoactive-6\/\",\"image\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2025\/05\/garmin-Vivoactive-6-black-slate-010-02985-00-300x300.webp\",\"image_large\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2025\/05\/garmin-Vivoactive-6-black-slate-010-02985-00-300x300.webp\",\"class\":\"watch\",\"family\":\"vivoactive\",\"price\":259,\"price_max\":259,\"features\":{\"maps\":false,\"navigation_level\":0,\"ecg\":false,\"barometric_altimeter\":false,\"amoled\":true,\"touchscreen\":true,\"sleep\":true,\"music\":true,\"calls\":false,\"flashlight\":false,\"multiband\":true,\"training_level\":3,\"training_tier\":1,\"health_level\":3,\"battery_hours\":null,\"inreach\":false,\"lte\":false,\"solar\":false,\"sapphire\":false,\"titanium_case\":false,\"green_flashlight\":false,\"garmin_epic\":false,\"stamina_curves\":false,\"stamina_zones\":false,\"storage_gb\":8,\"display_nits\":null}},{\"id\":441799,\"name\":\"Forerunner 170\",\"url\":\"https:\/\/www.miomiorun.com\/prodotto\/forerunner-170\/\",\"image\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2026\/05\/Garmin-Forerunner-170-black-amp-yellow-010-03920-00-300x300.webp\",\"image_large\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2026\/05\/Garmin-Forerunner-170-black-amp-yellow-010-03920-00-300x300.webp\",\"class\":\"watch\",\"family\":\"forerunner\",\"price\":269,\"price_max\":269,\"features\":{\"maps\":false,\"navigation_level\":1,\"ecg\":false,\"barometric_altimeter\":true,\"amoled\":true,\"touchscreen\":true,\"sleep\":true,\"music\":true,\"calls\":false,\"flashlight\":false,\"multiband\":true,\"training_level\":4,\"training_tier\":2,\"health_level\":3,\"battery_hours\":null,\"inreach\":false,\"lte\":false,\"solar\":false,\"sapphire\":false,\"titanium_case\":false,\"green_flashlight\":false,\"garmin_epic\":false,\"stamina_curves\":false,\"stamina_zones\":false,\"storage_gb\":4,\"display_nits\":null}},{\"id\":420832,\"name\":\"Varia\u2122 RearVue 820\",\"url\":\"https:\/\/www.miomiorun.com\/prodotto\/varia-rearvue-820\/\",\"image\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2026\/03\/garmin-VARIA-820-010-03180-00-300x300.webp\",\"image_large\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2026\/03\/garmin-VARIA-820-010-03180-00-300x300.webp\",\"class\":\"radar\",\"family\":\"varia\",\"price\":299,\"price_max\":299,\"features\":{\"front_light\":false,\"rear_light\":true,\"radar\":true,\"light\":true,\"camera\":false,\"advanced_radar\":true,\"brake_light\":true,\"incident_recording\":false,\"phone_compatible\":false,\"edge_compatible\":false,\"battery_hours\":null}},{\"id\":119127,\"name\":\"Edge 840\",\"url\":\"https:\/\/www.miomiorun.com\/prodotto\/edge-840\/\",\"image\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2023\/05\/garmin-Edge-540-base-010-02694-01-300x300.jpg\",\"image_large\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2023\/05\/garmin-Edge-540-base-010-02694-01-300x300.jpg\",\"class\":\"bike_computer\",\"family\":\"edge\",\"price\":299,\"price_max\":299,\"features\":{\"touchscreen\":true,\"display_inches\":null,\"navigation_level\":3,\"maps\":true,\"climbpro\":true,\"power_guide\":true,\"stamina\":true,\"training_status\":true,\"training_load\":true,\"cycling_dynamics\":true,\"mtb_dynamics\":false,\"speaker\":false,\"garmin_pay\":false,\"solar\":false,\"battery_hours\":null}},{\"id\":357722,\"name\":\"Edge MTB\",\"url\":\"https:\/\/www.miomiorun.com\/prodotto\/edge-mtb\/\",\"image\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2025\/10\/garmin-Edge-MTB-010-02993-10-300x300.webp\",\"image_large\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2025\/10\/garmin-Edge-MTB-010-02993-10-300x300.webp\",\"class\":\"bike_computer\",\"family\":\"edge\",\"price\":319,\"price_max\":319,\"features\":{\"touchscreen\":false,\"display_inches\":2.13,\"navigation_level\":3,\"maps\":true,\"climbpro\":true,\"power_guide\":false,\"stamina\":false,\"training_status\":false,\"training_load\":true,\"cycling_dynamics\":true,\"mtb_dynamics\":false,\"speaker\":false,\"garmin_pay\":false,\"solar\":false,\"battery_hours\":null}},{\"id\":440580,\"name\":\"Forerunner 170 music\",\"url\":\"https:\/\/www.miomiorun.com\/prodotto\/forerunner-170-music\/\",\"image\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2026\/05\/Garmin-Forerunner-170-music-Whitestone-010-03920-11-300x300.webp\",\"image_large\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2026\/05\/Garmin-Forerunner-170-music-Whitestone-010-03920-11-300x300.webp\",\"class\":\"watch\",\"family\":\"forerunner\",\"price\":325,\"price_max\":325,\"features\":{\"maps\":false,\"navigation_level\":1,\"ecg\":false,\"barometric_altimeter\":true,\"amoled\":true,\"touchscreen\":true,\"sleep\":true,\"music\":true,\"calls\":false,\"flashlight\":false,\"multiband\":true,\"training_level\":4,\"training_tier\":2,\"health_level\":3,\"battery_hours\":null,\"inreach\":false,\"lte\":false,\"solar\":false,\"sapphire\":false,\"titanium_case\":false,\"green_flashlight\":false,\"garmin_epic\":false,\"stamina_curves\":false,\"stamina_zones\":false,\"storage_gb\":4,\"display_nits\":null}},{\"id\":31913,\"name\":\"Venu 2\",\"url\":\"https:\/\/www.miomiorun.com\/en\/product\/garmin-venu-2\/\",\"image\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2023\/09\/garmin-Venu-2-Plus-leather-010-02430-21-300x300.jpg\",\"image_large\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2023\/09\/garmin-Venu-2-Plus-leather-010-02430-21-300x300.jpg\",\"class\":\"watch\",\"family\":\"venu\",\"price\":335,\"price_max\":335,\"features\":{\"maps\":false,\"navigation_level\":0,\"ecg\":false,\"barometric_altimeter\":true,\"amoled\":true,\"touchscreen\":true,\"sleep\":true,\"music\":true,\"calls\":false,\"flashlight\":false,\"multiband\":true,\"training_level\":1,\"training_tier\":1,\"health_level\":3,\"battery_hours\":null,\"inreach\":false,\"lte\":false,\"solar\":false,\"sapphire\":false,\"titanium_case\":false,\"green_flashlight\":false,\"garmin_epic\":false,\"stamina_curves\":false,\"stamina_zones\":false,\"storage_gb\":null,\"display_nits\":null}},{\"id\":112640,\"name\":\"Forerunner 265\",\"url\":\"https:\/\/www.miomiorun.com\/prodotto\/forerunner-265\/\",\"image\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2023\/03\/garmin-Forerunner-265-black-010-02810-10-300x300.jpg\",\"image_large\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2023\/03\/garmin-Forerunner-265-black-010-02810-10-300x300.jpg\",\"class\":\"watch\",\"family\":\"forerunner\",\"price\":345,\"price_max\":345,\"features\":{\"maps\":false,\"navigation_level\":1,\"ecg\":false,\"barometric_altimeter\":true,\"amoled\":true,\"touchscreen\":true,\"sleep\":true,\"music\":true,\"calls\":false,\"flashlight\":false,\"multiband\":true,\"training_level\":3,\"training_tier\":3,\"health_level\":3,\"battery_hours\":null,\"inreach\":false,\"lte\":false,\"solar\":false,\"sapphire\":false,\"titanium_case\":false,\"green_flashlight\":false,\"garmin_epic\":false,\"stamina_curves\":false,\"stamina_zones\":false,\"storage_gb\":8,\"display_nits\":null}},{\"id\":257994,\"name\":\"Instinct 3\",\"url\":\"https:\/\/www.miomiorun.com\/prodotto\/instinct-3\/\",\"image\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2025\/02\/garmin-Instinct-3-amoled-50mm-black-010-03020-00-300x300.webp\",\"image_large\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2025\/02\/garmin-Instinct-3-amoled-50mm-black-010-03020-00-300x300.webp\",\"class\":\"watch\",\"family\":\"instinct\",\"price\":359,\"price_max\":399,\"features\":{\"maps\":false,\"navigation_level\":1,\"ecg\":false,\"barometric_altimeter\":true,\"amoled\":true,\"touchscreen\":false,\"sleep\":true,\"music\":true,\"calls\":false,\"flashlight\":false,\"multiband\":true,\"training_level\":4,\"training_tier\":3,\"health_level\":3,\"battery_hours\":null,\"inreach\":false,\"lte\":false,\"solar\":true,\"sapphire\":false,\"titanium_case\":false,\"green_flashlight\":false,\"garmin_epic\":false,\"stamina_curves\":false,\"stamina_zones\":false,\"storage_gb\":4,\"display_nits\":null}},{\"id\":345351,\"name\":\"Edge 550\",\"url\":\"https:\/\/www.miomiorun.com\/prodotto\/edge-550\/\",\"image\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2025\/09\/garmin-Edge-550-010-03022-01-300x300.webp\",\"image_large\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2025\/09\/garmin-Edge-550-010-03022-01-300x300.webp\",\"class\":\"bike_computer\",\"family\":\"edge\",\"price\":369,\"price_max\":369,\"features\":{\"touchscreen\":false,\"display_inches\":null,\"navigation_level\":3,\"maps\":true,\"climbpro\":true,\"power_guide\":true,\"stamina\":true,\"training_status\":true,\"training_load\":true,\"cycling_dynamics\":true,\"mtb_dynamics\":false,\"speaker\":false,\"garmin_pay\":false,\"solar\":false,\"battery_hours\":null}},{\"id\":386412,\"name\":\"eTrex Touch\",\"url\":\"https:\/\/www.miomiorun.com\/prodotto\/etrex-touch\/\",\"image\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2026\/01\/garmin-eTrex-Touch-010-02940-01-300x300.webp\",\"image_large\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2026\/01\/garmin-eTrex-Touch-010-02940-01-300x300.webp\",\"class\":\"handheld\",\"family\":\"etrex\",\"price\":399,\"price_max\":399,\"features\":{\"navigation_level\":3,\"maps\":true,\"touchscreen\":true,\"inreach\":false,\"satellite_messaging\":false,\"sos\":false,\"multiband\":true,\"barometric_altimeter\":true,\"battery_hours\":null}},{\"id\":313118,\"name\":\"Forerunner 570\",\"url\":\"https:\/\/www.miomiorun.com\/prodotto\/forerunner-570\/\",\"image\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2025\/05\/garmin-Forerunner-570-47mm-black-010-02971-00-300x300.webp\",\"image_large\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2025\/05\/garmin-Forerunner-570-47mm-black-010-02971-00-300x300.webp\",\"class\":\"watch\",\"family\":\"forerunner\",\"price\":419,\"price_max\":419,\"features\":{\"maps\":false,\"navigation_level\":1,\"ecg\":false,\"barometric_altimeter\":true,\"amoled\":true,\"touchscreen\":true,\"sleep\":true,\"music\":true,\"calls\":true,\"flashlight\":false,\"multiband\":true,\"training_level\":4,\"training_tier\":4,\"health_level\":3,\"battery_hours\":null,\"inreach\":false,\"lte\":false,\"solar\":false,\"sapphire\":false,\"titanium_case\":false,\"green_flashlight\":false,\"garmin_epic\":false,\"stamina_curves\":false,\"stamina_zones\":false,\"storage_gb\":8,\"display_nits\":null}},{\"id\":356057,\"name\":\"Venu 4\",\"url\":\"https:\/\/www.miomiorun.com\/prodotto\/venu-4\/\",\"image\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2025\/10\/garmin-Venu-4-45mm-black-010-03014-00-300x300.webp\",\"image_large\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2025\/10\/garmin-Venu-4-45mm-black-010-03014-00-300x300.webp\",\"class\":\"watch\",\"family\":\"venu\",\"price\":422,\"price_max\":422,\"features\":{\"maps\":false,\"navigation_level\":1,\"ecg\":true,\"barometric_altimeter\":true,\"amoled\":true,\"touchscreen\":true,\"sleep\":true,\"music\":true,\"calls\":true,\"flashlight\":false,\"multiband\":true,\"training_level\":4,\"training_tier\":1,\"health_level\":4,\"battery_hours\":null,\"inreach\":false,\"lte\":false,\"solar\":false,\"sapphire\":false,\"titanium_case\":false,\"green_flashlight\":false,\"garmin_epic\":false,\"stamina_curves\":false,\"stamina_zones\":false,\"storage_gb\":8,\"display_nits\":null}},{\"id\":74018,\"name\":\"Edge 1040 Solar\",\"url\":\"https:\/\/www.miomiorun.com\/en\/product\/edge-1040-solar\/\",\"image\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2022\/06\/garmin-EDGE-1040-SOLAR-010-02503-21-300x300.webp\",\"image_large\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2022\/06\/garmin-EDGE-1040-SOLAR-010-02503-21-300x300.webp\",\"class\":\"bike_computer\",\"family\":\"edge\",\"price\":439,\"price_max\":439,\"features\":{\"touchscreen\":true,\"display_inches\":3.5,\"navigation_level\":3,\"maps\":true,\"climbpro\":true,\"power_guide\":true,\"stamina\":true,\"training_status\":true,\"training_load\":true,\"cycling_dynamics\":true,\"mtb_dynamics\":false,\"speaker\":false,\"garmin_pay\":false,\"solar\":true,\"battery_hours\":null}},{\"id\":345352,\"name\":\"Edge 850\",\"url\":\"https:\/\/www.miomiorun.com\/prodotto\/edge-850\/\",\"image\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2025\/09\/garmin-EDGE-850-010-03023-01-300x300.webp\",\"image_large\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2025\/09\/garmin-EDGE-850-010-03023-01-300x300.webp\",\"class\":\"bike_computer\",\"family\":\"edge\",\"price\":459,\"price_max\":459,\"features\":{\"touchscreen\":true,\"display_inches\":2.7,\"navigation_level\":3,\"maps\":true,\"climbpro\":true,\"power_guide\":true,\"stamina\":true,\"training_status\":true,\"training_load\":true,\"cycling_dynamics\":true,\"mtb_dynamics\":false,\"speaker\":true,\"garmin_pay\":true,\"solar\":false,\"battery_hours\":null}},{\"id\":118970,\"name\":\"Forerunner 965\",\"url\":\"https:\/\/www.miomiorun.com\/prodotto\/forerunner-965\/\",\"image\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2023\/05\/garmin-FORERUNNER-965-AMP-YELLOW-010-02809-12-300x300.jpg\",\"image_large\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2023\/05\/garmin-FORERUNNER-965-AMP-YELLOW-010-02809-12-300x300.jpg\",\"class\":\"watch\",\"family\":\"forerunner\",\"price\":459,\"price_max\":459,\"features\":{\"maps\":false,\"navigation_level\":2,\"ecg\":false,\"barometric_altimeter\":true,\"amoled\":true,\"touchscreen\":true,\"sleep\":true,\"music\":true,\"calls\":false,\"flashlight\":false,\"multiband\":true,\"training_level\":4,\"training_tier\":5,\"health_level\":3,\"battery_hours\":null,\"inreach\":false,\"lte\":false,\"solar\":false,\"sapphire\":false,\"titanium_case\":false,\"green_flashlight\":false,\"garmin_epic\":false,\"stamina_curves\":false,\"stamina_zones\":false,\"storage_gb\":32,\"display_nits\":null}},{\"id\":359198,\"name\":\"Rally RS110\",\"url\":\"https:\/\/www.miomiorun.com\/prodotto\/rally-rs110\/\",\"image\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2025\/10\/garmin-Rally-RS110-010-02875-11-300x300.webp\",\"image_large\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2025\/10\/garmin-Rally-RS110-010-02875-11-300x300.webp\",\"class\":\"power_meter\",\"family\":\"rally\",\"price\":489,\"price_max\":489,\"features\":{\"dual_sided\":false,\"cycling_dynamics\":false,\"cadence\":false,\"upgradeable\":false,\"spd\":true,\"spd_sl\":true,\"look_keo\":false,\"battery_hours\":null}},{\"id\":359171,\"name\":\"Rally\u2122 RK110\",\"url\":\"https:\/\/www.miomiorun.com\/prodotto\/rally-rk110\/\",\"image\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2025\/10\/garmin-Rally-RK110-010-02875-01-300x300.webp\",\"image_large\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2025\/10\/garmin-Rally-RK110-010-02875-01-300x300.webp\",\"class\":\"power_meter\",\"family\":\"rally\",\"price\":489,\"price_max\":489,\"features\":{\"dual_sided\":false,\"cycling_dynamics\":false,\"cadence\":false,\"upgradeable\":false,\"spd\":false,\"spd_sl\":false,\"look_keo\":true,\"battery_hours\":null}},{\"id\":442352,\"name\":\"Inreach mini 3 Plus\",\"url\":\"https:\/\/www.miomiorun.com\/prodotto\/inreach-mini-3-plus\/\",\"image\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2026\/05\/Garmin-InReach-Mini-3-Plus-010-03387-10-300x300.webp\",\"image_large\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2026\/05\/Garmin-InReach-Mini-3-Plus-010-03387-10-300x300.webp\",\"class\":\"inreach\",\"family\":\"inreach\",\"price\":499,\"price_max\":499,\"features\":{\"navigation_level\":1,\"maps\":false,\"touchscreen\":true,\"inreach\":true,\"satellite_messaging\":false,\"sos\":true,\"multiband\":true,\"barometric_altimeter\":false,\"battery_hours\":null}},{\"id\":359205,\"name\":\"GPSMAP H1\",\"url\":\"https:\/\/www.miomiorun.com\/prodotto\/gpsmap-h1\/\",\"image\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2025\/10\/garmin-GPSMAP-H1-010-02920-01-300x300.webp\",\"image_large\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2025\/10\/garmin-GPSMAP-H1-010-02920-01-300x300.webp\",\"class\":\"handheld\",\"family\":\"gpsmap\",\"price\":519,\"price_max\":519,\"features\":{\"navigation_level\":3,\"maps\":true,\"touchscreen\":true,\"inreach\":true,\"satellite_messaging\":false,\"sos\":false,\"multiband\":true,\"barometric_altimeter\":true,\"battery_hours\":null}},{\"id\":380179,\"name\":\"Rally XC110\",\"url\":\"https:\/\/www.miomiorun.com\/prodotto\/rally-xc110\/\",\"image\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2025\/12\/garmin-Rally-XC110-010-02875-21-300x300.webp\",\"image_large\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2025\/12\/garmin-Rally-XC110-010-02875-21-300x300.webp\",\"class\":\"power_meter\",\"family\":\"rally\",\"price\":579,\"price_max\":579,\"features\":{\"dual_sided\":false,\"cycling_dynamics\":false,\"cadence\":false,\"upgradeable\":false,\"spd\":true,\"spd_sl\":false,\"look_keo\":false,\"battery_hours\":null}},{\"id\":190398,\"name\":\"Edge 1050\",\"url\":\"https:\/\/www.miomiorun.com\/prodotto\/edge-1050\/\",\"image\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2024\/07\/garmin-Edge-1050-010-02890-01-300x300.webp\",\"image_large\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2024\/07\/garmin-Edge-1050-010-02890-01-300x300.webp\",\"class\":\"bike_computer\",\"family\":\"edge\",\"price\":579,\"price_max\":579,\"features\":{\"touchscreen\":true,\"display_inches\":null,\"navigation_level\":3,\"maps\":true,\"climbpro\":true,\"power_guide\":true,\"stamina\":true,\"training_status\":true,\"training_load\":true,\"cycling_dynamics\":true,\"mtb_dynamics\":false,\"speaker\":true,\"garmin_pay\":true,\"solar\":false,\"battery_hours\":null}},{\"id\":313082,\"name\":\"Forerunner 970\",\"url\":\"https:\/\/www.miomiorun.com\/prodotto\/forerunner-970\/\",\"image\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2025\/05\/garmin-Forerunner-970-black-amp-yellow-010-02969-10-300x300.webp\",\"image_large\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2025\/05\/garmin-Forerunner-970-black-amp-yellow-010-02969-10-300x300.webp\",\"class\":\"watch\",\"family\":\"forerunner\",\"price\":615,\"price_max\":615,\"features\":{\"maps\":true,\"navigation_level\":3,\"ecg\":true,\"barometric_altimeter\":true,\"amoled\":true,\"touchscreen\":true,\"sleep\":true,\"music\":true,\"calls\":true,\"flashlight\":false,\"multiband\":true,\"training_level\":4,\"training_tier\":6,\"health_level\":4,\"battery_hours\":null,\"inreach\":false,\"lte\":false,\"solar\":false,\"sapphire\":true,\"titanium_case\":false,\"green_flashlight\":false,\"garmin_epic\":false,\"stamina_curves\":false,\"stamina_zones\":false,\"storage_gb\":32,\"display_nits\":null}},{\"id\":359163,\"name\":\"Rally RK210\",\"url\":\"https:\/\/www.miomiorun.com\/prodotto\/rally-rk210\/\",\"image\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2025\/10\/garmin-Rally-RK210-010-02875-00-300x300.webp\",\"image_large\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2025\/10\/garmin-Rally-RK210-010-02875-00-300x300.webp\",\"class\":\"power_meter\",\"family\":\"rally\",\"price\":699,\"price_max\":699,\"features\":{\"dual_sided\":true,\"cycling_dynamics\":true,\"cadence\":false,\"upgradeable\":false,\"spd\":false,\"spd_sl\":false,\"look_keo\":true,\"battery_hours\":null}},{\"id\":196124,\"name\":\"Fenix 8\",\"url\":\"https:\/\/www.miomiorun.com\/prodotto\/fenix-8\/\",\"image\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2024\/08\/Garmin-Fenix-8-amoled-47mm-carbon-gray-300x300.webp\",\"image_large\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2024\/08\/Garmin-Fenix-8-amoled-47mm-carbon-gray-300x300.webp\",\"class\":\"watch\",\"family\":\"fenix\",\"price\":699,\"price_max\":799,\"features\":{\"maps\":true,\"navigation_level\":3,\"ecg\":false,\"barometric_altimeter\":true,\"amoled\":true,\"touchscreen\":true,\"sleep\":true,\"music\":true,\"calls\":true,\"flashlight\":false,\"multiband\":true,\"training_level\":4,\"training_tier\":5,\"health_level\":3,\"battery_hours\":null,\"inreach\":false,\"lte\":false,\"solar\":true,\"sapphire\":true,\"titanium_case\":false,\"green_flashlight\":false,\"garmin_epic\":false,\"stamina_curves\":false,\"stamina_zones\":false,\"storage_gb\":32,\"display_nits\":null}},{\"id\":359204,\"name\":\"GPSMAP H1i Plus\",\"url\":\"https:\/\/www.miomiorun.com\/prodotto\/gpsmap-h1i-plus\/\",\"image\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2025\/10\/garmin-GPSMAP-H1i-Plus-010-02921-01-300x300.webp\",\"image_large\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2025\/10\/garmin-GPSMAP-H1i-Plus-010-02921-01-300x300.webp\",\"class\":\"inreach\",\"family\":\"gpsmap\",\"price\":799,\"price_max\":799,\"features\":{\"navigation_level\":3,\"maps\":true,\"touchscreen\":true,\"inreach\":true,\"satellite_messaging\":false,\"sos\":true,\"multiband\":true,\"barometric_altimeter\":true,\"battery_hours\":null}},{\"id\":359178,\"name\":\"Rally XC210\",\"url\":\"https:\/\/www.miomiorun.com\/prodotto\/rally-xc210\/\",\"image\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2025\/10\/garmin-Rally-XC210-010-02875-20-300x300.webp\",\"image_large\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2025\/10\/garmin-Rally-XC210-010-02875-20-300x300.webp\",\"class\":\"power_meter\",\"family\":\"rally\",\"price\":899,\"price_max\":899,\"features\":{\"dual_sided\":true,\"cycling_dynamics\":true,\"cadence\":false,\"upgradeable\":false,\"spd\":true,\"spd_sl\":false,\"look_keo\":false,\"battery_hours\":null}},{\"id\":357863,\"name\":\"Rally RK\/XC210\",\"url\":\"https:\/\/www.miomiorun.com\/prodotto\/rally-rk-xc210\/\",\"image\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2025\/10\/garmin-Rally-RK-XC210-010-02875-02-300x300.webp\",\"image_large\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2025\/10\/garmin-Rally-RK-XC210-010-02875-02-300x300.webp\",\"class\":\"power_meter\",\"family\":\"rally\",\"price\":949,\"price_max\":949,\"features\":{\"dual_sided\":true,\"cycling_dynamics\":true,\"cadence\":false,\"upgradeable\":false,\"spd\":true,\"spd_sl\":false,\"look_keo\":true,\"battery_hours\":null}},{\"id\":357858,\"name\":\"Rally RS\/XC210\",\"url\":\"https:\/\/www.miomiorun.com\/prodotto\/rally-rs-xc210\/\",\"image\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2025\/10\/garmin-Rally-RS-XC210-010-02875-12-300x300.webp\",\"image_large\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2025\/10\/garmin-Rally-RS-XC210-010-02875-12-300x300.webp\",\"class\":\"power_meter\",\"family\":\"rally\",\"price\":999,\"price_max\":999,\"features\":{\"dual_sided\":true,\"cycling_dynamics\":true,\"cadence\":false,\"upgradeable\":false,\"spd\":true,\"spd_sl\":true,\"look_keo\":false,\"battery_hours\":null}},{\"id\":467885,\"name\":\"Fenix 9\",\"url\":\"https:\/\/www.miomiorun.com\/prodotto\/fenix-9\/\",\"image\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2026\/08\/Garmin-Fenix-9-47mm-black-DLC-010-04762-11-300x300.webp\",\"image_large\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2026\/08\/Garmin-Fenix-9-47mm-black-DLC-010-04762-11-300x300.webp\",\"class\":\"watch\",\"family\":\"fenix\",\"price\":1049,\"price_max\":1149,\"features\":{\"maps\":true,\"navigation_level\":3,\"ecg\":false,\"barometric_altimeter\":true,\"amoled\":true,\"touchscreen\":true,\"sleep\":true,\"music\":true,\"calls\":true,\"flashlight\":false,\"multiband\":true,\"training_level\":4,\"training_tier\":5,\"health_level\":3,\"battery_hours\":null,\"inreach\":false,\"lte\":false,\"solar\":false,\"sapphire\":true,\"titanium_case\":false,\"green_flashlight\":false,\"garmin_epic\":true,\"stamina_curves\":false,\"stamina_zones\":false,\"storage_gb\":64,\"display_nits\":null}},{\"id\":483963,\"name\":\"Fenix 9 Pro\",\"url\":\"https:\/\/www.miomiorun.com\/prodotto\/fenix-9-pro\/\",\"image\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2026\/09\/Garmin-Fenix-9-Pro-47mm-carbon-black-010-04336-16-300x300.webp\",\"image_large\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2026\/09\/Garmin-Fenix-9-Pro-47mm-carbon-black-010-04336-16-300x300.webp\",\"class\":\"watch\",\"family\":\"fenix\",\"price\":1149,\"price_max\":1149,\"features\":{\"maps\":true,\"navigation_level\":3,\"ecg\":true,\"barometric_altimeter\":true,\"amoled\":true,\"touchscreen\":true,\"sleep\":true,\"music\":true,\"calls\":true,\"flashlight\":false,\"multiband\":true,\"training_level\":4,\"training_tier\":5,\"health_level\":4,\"battery_hours\":null,\"inreach\":false,\"lte\":false,\"solar\":false,\"sapphire\":true,\"titanium_case\":false,\"green_flashlight\":false,\"garmin_epic\":true,\"stamina_curves\":false,\"stamina_zones\":false,\"storage_gb\":64,\"display_nits\":3000}},{\"id\":467897,\"name\":\"Fenix 9 Pro inReach\u00ae\",\"url\":\"https:\/\/www.miomiorun.com\/prodotto\/fenix-9-pro-inreach\/\",\"image\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2026\/08\/Garmin-Fenix-9-Pro-inReach-47mm-autumn-orange-010-04336-01-300x300.webp\",\"image_large\":\"https:\/\/www.miomiorun.com\/app\/uploads\/2026\/08\/Garmin-Fenix-9-Pro-inReach-47mm-autumn-orange-010-04336-01-300x300.webp\",\"class\":\"watch\",\"family\":\"fenix\",\"price\":1199,\"price_max\":1249,\"features\":{\"maps\":true,\"navigation_level\":3,\"ecg\":false,\"barometric_altimeter\":true,\"amoled\":true,\"touchscreen\":true,\"sleep\":true,\"music\":true,\"calls\":true,\"flashlight\":false,\"multiband\":true,\"training_level\":4,\"training_tier\":5,\"health_level\":3,\"battery_hours\":null,\"inreach\":true,\"lte\":true,\"solar\":false,\"sapphire\":true,\"titanium_case\":false,\"green_flashlight\":false,\"garmin_epic\":true,\"stamina_curves\":false,\"stamina_zones\":false,\"storage_gb\":64,\"display_nits\":3000}}];\nconst CURRENCY=\"&euro;\";\nconst $=s=>document.querySelector(s);\nconst esc=s=>String(s??'').replace(\/[&<>'\"]\/g,c=>({'&':'&amp;','<':'&lt;','>':'&gt;',\"'\":'&#039;','\"':'&quot;'}[c]));\nconst money=n=>new Intl.NumberFormat('it-IT',{style:'currency',currency:'EUR',maximumFractionDigits:0}).format(n||0);\nconst clsLabel={watch:'Orologi sportivi',smart_band:'Smart band',bike_computer:'Ciclocomputer Edge',radar:'Luci \/ radar Varia',power_meter:'Misuratori Rally',handheld:'GPS outdoor',inreach:'GPS \/ inReach'};\nconst classGroup=p=>p.class==='smart_band'?'watch':(p.class==='inreach'?'handheld':p.class);\nconst val=(p,k)=>p.features&&Object.prototype.hasOwnProperty.call(p.features,k)?p.features[k]:null;\nlet answers={},history=[],current=null,selected=null,finished=false;\n\nconst MMR_GF_ANALYTICS={\n session:(sessionStorage.getItem('mmr_gf_session')||(()=>{const v='gf_'+Date.now().toString(36)+'_'+Math.random().toString(36).slice(2,9);sessionStorage.setItem('mmr_gf_session',v);return v;})()),\n sent:new Set(),\n send(event,data={}){try{const body=new URLSearchParams({action:'mmr_finder_event',nonce:'68e6cbef30',session_id:this.session,finder_type:'garmin',event_type:event,entry_point:(new URLSearchParams(location.search).get('mmr_entry')||'direct'),page_url:location.href,language:(document.documentElement.lang||'it').slice(0,5),universe:String((window.answers&&window.answers.universe)||answers.universe||''),step_key:String((window.current&&window.current.id)||current?.id||''),product_id:String(data.product_id||0),product_role:String(data.product_role||''),payload:JSON.stringify(data)});navigator.sendBeacon?navigator.sendBeacon('https:\/\/www.miomiorun.com\/wp\/wp-admin\/admin-ajax.php',body):fetch('https:\/\/www.miomiorun.com\/wp\/wp-admin\/admin-ajax.php',{method:'POST',credentials:'same-origin',body,keepalive:true});}catch(e){}},\n once(key,event,data={}){if(this.sent.has(key))return;this.sent.add(key);this.send(event,data)}\n};\nMMR_GF_ANALYTICS.once('open','finder_open',{referrer:document.referrer||''});\n\nconst cards=new Map();\nfunction buildGrid(){\n const grid=$('#gfGrid');grid.innerHTML='';\n const frag=document.createDocumentFragment();\n PRODUCTS.forEach((p,i)=>{\n   const el=document.createElement('article');el.className='gf-card';el.dataset.id=p.id;\n   \/\/ Keep the selection wall intentionally lean: image only. Names\/prices\/details are\n   \/\/ created only for the final 3\u20134 cards. This cuts DOM work substantially.\n   const eager=i<6?'eager':'lazy', priority=i<4?'high':'low';\n   el.innerHTML=`<div class=\"gf-img\"><img loading=\"${eager}\" decoding=\"async\" fetchpriority=\"${priority}\" src=\"${esc(p.image)}\" alt=\"\"><\/div>`;\n   frag.appendChild(el);cards.set(p.id,el);\n });\n grid.appendChild(frag);\n}\nfunction initialQuestion(){\n const groups=[...new Set(PRODUCTS.map(classGroup))];\n const opts=[];\n if(groups.includes('watch'))opts.push({v:'watch',t:'Orologio \/ smart band',d:'Corsa, sport, salute e uso quotidiano'});\n if(groups.includes('bike_computer'))opts.push({v:'bike_computer',t:'Ciclismo \u00b7 Edge',d:'Navigazione, allenamento e dati sulla bici'});\n if(groups.includes('radar'))opts.push({v:'radar',t:'Luci e sicurezza \u00b7 Varia',d:'Luce anteriore oppure luce\/radar posteriore'});\n if(groups.includes('power_meter'))opts.push({v:'power_meter',t:'Potenza \u00b7 Rally',d:'Pedali e misurazione della potenza'});\n if(groups.includes('handheld'))opts.push({v:'handheld',t:'Outdoor \/ GPS \/ inReach',d:'Navigazione, escursioni e comunicazione satellitare'});\n return {id:'universe',kind:'requirement',title:'Che tipo di Garmin stai cercando?',help:'La prima risposta definisce l\u2019universo. Tutto il resto si adatter\u00e0 ai prodotti disponibili l\u00ec dentro.',options:opts};\n}\nfunction universe(){const u=answers.universe;return PRODUCTS.filter(p=>classGroup(p)===u);}\nfunction compatiblePool(ignoreBudget=true){\n let pool=universe();\n for(const [id,a] of Object.entries(answers)){\n   if(id==='universe'||id==='budget'||id==='budget_mode')continue;\n   const q=questionById(id,pool,true); if(!q||q.kind!=='requirement'||a==='any'||a===false)continue;\n   if(q.feature) pool=pool.filter(p=>featureMeets(p,q,a));\n }\n return pool;\n}\nfunction featureMeets(p,q,a){\n const x=val(p,q.feature);\n if(q.test)return q.test(p,a);\n if(q.level)return Number(x||0)>=Number(a||0);\n return a===true?x===true:a===false?true:true;\n}\nfunction featureVaries(pool,feature){const vals=[...new Set(pool.map(p=>JSON.stringify(val(p,feature))))];return vals.length>1 && vals.some(v=>v!=='null');}\nfunction anyTrue(pool,feature){return pool.some(p=>val(p,feature)===true)}\nfunction anyFalse(pool,feature){return pool.some(p=>val(p,feature)!==true)}\nfunction maxNum(pool,feature){return Math.max(0,...pool.map(p=>Number(val(p,feature)||0)))}\nfunction minNum(pool,feature){const a=pool.map(p=>Number(val(p,feature)||0)).filter(n=>n>0);return a.length?Math.min(...a):0}\n\nfunction defsFor(pool){\n const u=answers.universe; const q=[];\n if(u==='watch'){\n   const fam=[...new Set(pool.map(p=>p.family))];\n   const goal=answers.watch_goal||null;\n   if(pool.length>1) q.push({id:'watch_goal',kind:'preference',title:'Che cosa deve fare meglio?',help:'Partiamo dall\u2019uso principale: il Finder user\u00e0 poi solo le domande che possono davvero cambiare la scelta.',options:[{v:'running',t:'Corsa e allenamento',d:'Priorit\u00e0 a metriche, precisione GPS e strumenti sportivi'},{v:'outdoor',t:'Outdoor e avventura',d:'Mappe, autonomia e funzioni utili fuori strada'},{v:'wellness',t:'Salute e quotidiano',d:'Benessere, display e funzioni smart'},{v:'balanced',t:'Un po\u2019 di tutto',d:'Cerco il miglior equilibrio senza inseguire il top'}]});\n\n   \/\/ WATCH 1.6: questions are goal-aware. A wellness user should not be forced through\n   \/\/ outdoor questions, and vice versa. Requirements remain hard; preferences only rank.\n   if(goal&&['running','outdoor','balanced'].includes(goal)&&featureVaries(pool,'maps')&&anyTrue(pool,'maps'))\n     q.push({id:'maps',feature:'maps',kind:'requirement',title:'Ti servono mappe complete sul polso?',help:'Se dici s\u00ec, la cartografia diventa un requisito vero. Se dici no, non premiamo automaticamente gli orologi pi\u00f9 costosi che la includono.',options:[{v:true,t:'S\u00ec, le voglio',d:'Voglio consultare vere mappe direttamente dall\u2019orologio'},{v:false,t:'No, non sono indispensabili',d:'Indicazioni e navigazione essenziale possono bastare'}]});\n\n   if(goal&&['running','balanced'].includes(goal)&&featureVaries(pool,'training_level')&&maxNum(pool,'training_level')>=3)\n     q.push({id:'training',feature:'training_level',level:true,kind:'preference',title:'Quanto deve essere evoluto per l\u2019allenamento?',help:'Serve soprattutto a evitare di proporti un top di gamma se le funzioni extra non ti servono.',options:[{v:2,t:'Essenziale',d:'Allenamenti e metriche principali, senza inseguire tutto'},{v:3,t:'Avanzato',d:'Carico, stato allenamento e analisi pi\u00f9 complete'},{v:4,t:'Voglio il massimo',d:'Gli strumenti training pi\u00f9 evoluti hanno davvero valore per me'}]});\n\n   if(goal&&['wellness','balanced'].includes(goal)&&featureVaries(pool,'health_level')&&maxNum(pool,'health_level')>=3)\n     q.push({id:'health',feature:'health_level',level:true,kind:'preference',title:'Quanto contano salute e benessere?',help:'Pi\u00f9 funzioni salute non significa automaticamente scelta migliore: dipende da quanto le useresti.',options:[{v:2,t:'Le basi mi bastano',d:'Sonno, stress e monitoraggio quotidiano essenziale'},{v:3,t:'Le uso spesso',d:'Voglio una lettura pi\u00f9 completa del mio stato'},{v:4,t:'Sono una priorit\u00e0',d:'Premia i modelli con il pacchetto salute pi\u00f9 ricco'}]});\n\n   if(goal&&['running','outdoor'].includes(goal)&&featureVaries(pool,'multiband')&&anyTrue(pool,'multiband'))\n     q.push({id:'multiband',feature:'multiband',kind:'preference',title:'Quanto conta la precisione GPS in condizioni difficili?',help:'Il GNSS multibanda \u00e8 utile soprattutto tra palazzi, boschi e montagne: non lo trattiamo come necessario per tutti.',options:[{v:true,t:'Molto',d:'Corro o mi muovo spesso dove il segnale \u00e8 complicato'},{v:false,t:'Non \u00e8 una priorit\u00e0',d:'Preferisco non pagare extra solo per questo'}]});\n\n   if(goal==='outdoor'&&featureVaries(pool,'flashlight')&&anyTrue(pool,'flashlight'))\n     q.push({id:'flashlight',feature:'flashlight',kind:'preference',title:'La torcia integrata ti sarebbe davvero utile?',help:'\u00c8 un extra molto concreto outdoor, ma non deve trascinarti su un modello premium se non la useresti.',options:[{v:true,t:'S\u00ec, la userei',d:'Premia i modelli che la includono'},{v:false,t:'No',d:'Non voglio pagarla se non mi serve'}]});\n\n   if(goal&&['wellness','balanced'].includes(goal)&&featureVaries(pool,'amoled'))\n     q.push({id:'amoled',feature:'amoled',kind:'preference',title:'Quanto conta un display AMOLED?',help:'\u00c8 una preferenza d\u2019uso quotidiano, non un requisito tecnico.',options:[{v:true,t:'Molto',d:'Voglio uno schermo brillante e piacevole tutti i giorni'},{v:false,t:'Poco',d:'Valuto serenamente anche altre tecnologie'}]});\n\n   if(goal&&['wellness','balanced'].includes(goal)&&featureVaries(pool,'calls')&&anyTrue(pool,'calls'))\n     q.push({id:'calls',feature:'calls',kind:'preference',title:'Ti interessa rispondere alle chiamate dal polso?',help:'Serve a capire se microfono e altoparlante hanno valore per te oppure sono solo costo in pi\u00f9.',options:[{v:true,t:'S\u00ec',d:'\u00c8 una funzione smart che userei'},{v:false,t:'No',d:'Non influenza la scelta'}]});\n\n   if(goal==='running'&&featureVaries(pool,'music')&&anyTrue(pool,'music'))\n     q.push({id:'music',feature:'music',kind:'preference',title:'Vuoi lasciare a casa il telefono quando corri?',help:'Se ascolti musica dall\u2019orologio, premiamo i modelli che la gestiscono direttamente.',options:[{v:true,t:'S\u00ec, voglio la musica',d:'La musica sull\u2019orologio mi \u00e8 utile'},{v:false,t:'No',d:'Corro col telefono o senza musica'}]});\n\n   if(goal&&['wellness','balanced'].includes(goal)&&featureVaries(pool,'ecg')&&anyTrue(pool,'ecg'))\n     q.push({id:'ecg',feature:'ecg',kind:'requirement',title:'La funzione ECG \u00e8 indispensabile?',help:'Solo se rispondi s\u00ec diventa un filtro rigido. Altrimenti non penalizziamo gli ottimi modelli che non la includono.',options:[{v:true,t:'S\u00ec, la voglio',d:'L\u2019ECG diventa un requisito'},{v:false,t:'No',d:'Non deve decidere la scelta'}]});\n } else if(u==='bike_computer'){\n   const goal=answers.edge_goal||null;\n   q.push({id:'edge_goal',kind:'preference',title:'Che cosa conta di pi\u00f9 sul tuo Edge?',help:'Serve a capire che tipo di ciclocomputer stai cercando prima di confrontare le singole funzioni.',options:[{v:'navigation',t:'Navigazione e semplicit\u00e0',d:'Mappe chiare e utilizzo immediato'},{v:'training',t:'Allenamento e performance',d:'Dati, carico e strumenti per allenarmi meglio'},{v:'mtb',t:'MTB e off-road',d:'Funzioni dedicate alla guida fuori strada'},{v:'endurance',t:'Lunghe distanze e autonomia',d:'Voglio ridurre al minimo il pensiero della batteria'},{v:'balanced',t:'Un po\u2019 di tutto',d:'Cerco il miglior equilibrio senza inseguire ogni extra'}]});\n   if(featureVaries(pool,'touchscreen'))q.push({id:'touchscreen',feature:'touchscreen',kind:'preference',title:'Quanto conta il touchscreen?',help:'\u00c8 una differenza d\u2019uso concreta: se non ti interessa, non deve spingerti automaticamente verso una fascia pi\u00f9 alta.',options:[{v:true,t:'Lo preferisco',d:'Voglio interagire direttamente sul display'},{v:false,t:'I tasti vanno benissimo',d:'Non pagherei di pi\u00f9 solo per il touch'}]});\n   if(goal&&['training','balanced'].includes(goal)&&featureVaries(pool,'training_status'))q.push({id:'edge_training',feature:'training_status',kind:'preference',title:'Quanto contano gli strumenti di allenamento?',help:'Premiamo le funzioni performance solo se hanno davvero valore nel tuo utilizzo.',options:[{v:true,t:'Molto',d:'Training Status, carico e strumenti performance mi interessano'},{v:false,t:'Poco',d:'Non devono guidare la scelta'}]});\n   if(goal==='mtb'&&featureVaries(pool,'mtb_dynamics')&&anyTrue(pool,'mtb_dynamics'))q.push({id:'edge_mtb',feature:'mtb_dynamics',kind:'preference',title:'Vuoi funzioni specifiche per MTB?',help:'Se le useresti davvero, diventano una ragione concreta per preferire un Edge pi\u00f9 orientato all\u2019off-road.',options:[{v:true,t:'S\u00ec',d:'Le funzioni MTB per me contano'},{v:false,t:'Non sono decisive',d:'Valuto soprattutto il resto'}]});\n   if(goal&&['training','balanced'].includes(goal)&&featureVaries(pool,'power_guide')&&anyTrue(pool,'power_guide'))q.push({id:'power_guide',feature:'power_guide',kind:'preference',title:'Ti interessa Power Guide?',help:'\u00c8 utile per gestire lo sforzo, ma non deve diventare un vantaggio automatico se non la useresti.',options:[{v:true,t:'S\u00ec',d:'La userei per gestire meglio lo sforzo'},{v:false,t:'No',d:'Non influenza la scelta'}]});\n   if(featureVaries(pool,'speaker')&&anyTrue(pool,'speaker'))q.push({id:'speaker',feature:'speaker',kind:'preference',title:'Ti interessa lo speaker integrato?',help:'\u00c8 un extra premium: lo premiamo soltanto se per te ha valore.',options:[{v:true,t:'S\u00ec',d:'\u00c8 una funzione che userei'},{v:false,t:'No',d:'Non pagherei di pi\u00f9 per questo'}]});\n   if(goal&&['endurance','balanced'].includes(goal)&&featureVaries(pool,'solar')&&anyTrue(pool,'solar'))q.push({id:'solar',feature:'solar',kind:'preference',title:'Quanto conta massimizzare l\u2019autonomia con il Solar?',help:'Il Solar ha senso soprattutto sulle uscite molto lunghe: non lo trattiamo come upgrade universale.',options:[{v:true,t:'Molto',d:'Autonomia e lunghe distanze sono una priorit\u00e0'},{v:false,t:'Poco',d:'L\u2019autonomia standard mi basta'}]});\n } else if(u==='radar'){\n   \/\/ Varia contains both FRONT lights and REAR safety devices. Direction comes first.\n   if(featureVaries(pool,'front_light')||featureVaries(pool,'rear_light'))q.push({id:'varia_position',feature:'front_light',kind:'requirement',title:'Cerchi una luce anteriore o una soluzione posteriore?',help:'I Varia non sono tutti radar: davanti trovi la luce, dietro trovi luce e \u2014 sui modelli compatibili \u2014 rilevamento radar.',options:[{v:'front',t:'Anteriore',d:'Voglio illuminare la strada davanti a me'},{v:'rear',t:'Posteriore',d:'Voglio visibilit\u00e0 e sicurezza verso i veicoli che arrivano da dietro'}],test:(p,a)=>a==='front'?val(p,'front_light')===true:val(p,'rear_light')===true});\n   \/\/ Once REAR has been chosen, distinguish the two current propositions by radar depth.\n   if(answers.varia_position==='rear'&&featureVaries(pool,'advanced_radar')&&anyTrue(pool,'advanced_radar'))q.push({id:'varia_radar_level',feature:'advanced_radar',kind:'preference',title:'Quanto vuoi evoluto il radar posteriore?',help:'Entrambi rilevano i veicoli in avvicinamento; il livello pi\u00f9 evoluto aggiunge una lettura pi\u00f9 ricca della situazione dietro di te.',options:[{v:false,t:'Essenziale',d:'Mi basta sapere che un veicolo si sta avvicinando'},{v:true,t:'Pi\u00f9 evoluto',d:'Voglio un rilevamento pi\u00f9 avanzato e pi\u00f9 informazioni sui veicoli'}]});\n   if(answers.varia_position==='rear'&&featureVaries(pool,'camera')&&anyTrue(pool,'camera'))q.push({id:'camera',feature:'camera',kind:'requirement',title:'Vuoi anche la videocamera?',help:'Se s\u00ec, la registrazione video diventa un requisito vero.',options:[{v:true,t:'S\u00ec, anche videocamera',d:'Voglio registrare ci\u00f2 che accade dietro'},{v:false,t:'No',d:'Radar e luce sono sufficienti'}]});\n } else if(u==='power_meter'){\n   \/\/ Rally: the customer only chooses the cleat they actually use. Bundles that\n   \/\/ support that cleat plus another platform remain eligible and explain the extra\n   \/\/ compatibility in the result card; bundle versatility is not a fourth answer.\n   const cleats=[];\n   if(anyTrue(pool,'spd'))cleats.push({v:'spd',t:'SPD \/ MTB',d:'Uso tacchette Shimano SPD'});\n   if(anyTrue(pool,'spd_sl'))cleats.push({v:'spd_sl',t:'SPD-SL',d:'Uso tacchette strada Shimano SPD-SL'});\n   if(anyTrue(pool,'look_keo'))cleats.push({v:'look_keo',t:'LOOK KEO',d:'Uso tacchette LOOK KEO'});\n   if(cleats.length>1)q.push({id:'cleat',kind:'requirement',title:'Che tipo di tacchetta utilizzi?',help:'Scegli semplicemente la tacchetta che usi oggi. Nei risultati ti segnaliamo noi eventuali bundle compatibili anche con un\u2019altra piattaforma.',options:cleats,test:(p,a)=>val(p,a)===true});\n   if(featureVaries(pool,'dual_sided'))q.push({id:'dual',feature:'dual_sided',kind:'requirement',title:'Quanto dettaglio vuoi nella misurazione?',help:'Se scegli bilaterale, la misurazione separata destra\/sinistra diventa un requisito vero. Se il budget non basta, te lo diciamo invece di sostituirla con un modello singolo lato.',options:[{v:false,t:'Singolo lato',d:'Mi basta una misurazione pi\u00f9 essenziale'},{v:true,t:'Bilaterale',d:'Voglio distinguere gamba destra e sinistra'}]});\n } else if(u==='handheld'){\n   \/\/ Handheld: keep the useful feature questions, but first understand the job.\n   \/\/ This avoids making inReach the definition of the whole category while\n   \/\/ preserving the compact flow that already worked reasonably well.\n   q.push({id:'h_use',kind:'preference',title:'Come pensi di usarlo?',help:'Partiamo dal tipo di utilizzo; poi affinamo la scelta con comunicazione, interfaccia e cartografia.',options:[{v:'essential',t:'Navigazione essenziale',d:'Mi serve soprattutto orientarmi e seguire la traccia'},{v:'maps',t:'Escursioni con mappe',d:'Voglio cartografia e una consultazione pi\u00f9 completa sul dispositivo'},{v:'advanced',t:'Outdoor avanzato',d:'Cerco uno strumento pi\u00f9 completo per uscite impegnative e frequenti'}]});\n   if(featureVaries(pool,'inreach')&&anyTrue(pool,'inreach'))q.push({id:'inreach',feature:'inreach',kind:'requirement',title:'Vuoi poter comunicare anche senza copertura cellulare?',help:'Se s\u00ec, la comunicazione satellitare inReach diventa un requisito reale.',options:[{v:true,t:'S\u00ec, voglio inReach',d:'Messaggi e SOS satellitare sono importanti'},{v:false,t:'No',d:'Mi basta la navigazione GPS'}]});\n   if(featureVaries(pool,'touchscreen'))q.push({id:'h_touch',feature:'touchscreen',kind:'preference',title:'Come preferisci utilizzarlo?',help:'Touch e tasti sono due esperienze diverse: scegli quella che preferisci, senza trasformarla in un requisito assoluto.',options:[{v:true,t:'Touchscreen',d:'Preferisco interagire direttamente sul display'},{v:false,t:'Tasti fisici',d:'Preferisco controlli tradizionali e immediati'}]});\n   if(featureVaries(pool,'maps')&&anyTrue(pool,'maps'))q.push({id:'h_maps',feature:'maps',kind:'requirement',title:'Quanto contano le mappe sul dispositivo?',help:'Se sono essenziali, la cartografia completa diventa un requisito; altrimenti lasciamo aperte anche le soluzioni pi\u00f9 semplici.',options:[{v:true,t:'Sono essenziali',d:'Voglio cartografia completa sul dispositivo'},{v:false,t:'Non sono decisive',d:'Pu\u00f2 bastarmi una navigazione pi\u00f9 semplice'}]});\n }\n return q;\n}\nfunction questionById(id,pool){return defsFor(pool||universe()).find(q=>q.id===id)||null}\nfunction budgetQuestion(pool){\n if(!pool.length)return null; const prices=pool.map(p=>p.price).filter(Boolean).sort((a,b)=>a-b); if(!prices.length)return null;\n const min=prices[0],max=prices[prices.length-1]; if(max-min<60)return null;\n const cuts=[200,300,400,500,700,1000].filter(x=>x>min&&x<max); const opts=cuts.slice(0,4).map(x=>({v:x,t:`Massimo ${money(x)}`,d:'Posso restare entro questa cifra'})); opts.push({v:0,t:'Non \u00e8 un vincolo',d:'Preferisco scegliere in base al prodotto'});\n return {id:'budget',kind:'constraint',title:'Quanto vuoi spendere al massimo?',help:'Lo chiediamo alla fine per non farci guidare dal prezzo prima delle esigenze.',options:opts};\n}\nfunction budgetModeQuestion(){if(!answers.budget)return null;return {id:'budget_mode',kind:'constraint',title:'Quel budget \u00e8 rigido?',help:'Se \u00e8 elastico possiamo mostrarti anche un upgrade sensato, senza nasconderlo.',options:[{v:'strict',t:'S\u00ec, non voglio superarlo',d:'Il prezzo diventa un vincolo'},{v:'soft',t:'Posso salire se ne vale la pena',d:'Gli over-budget restano visibili come upgrade'}]};}\nfunction nextQuestion(){\n if(!answers.universe)return initialQuestion();\n const pool=compatiblePool(); const defs=defsFor(pool);\n for(const q of defs)if(!Object.prototype.hasOwnProperty.call(answers,q.id))return q;\n const b=budgetQuestion(pool); if(b&&!Object.prototype.hasOwnProperty.call(answers,'budget'))return b;\n const bm=budgetModeQuestion(); if(bm&&!Object.prototype.hasOwnProperty.call(answers,'budget_mode'))return bm;\n return null;\n}\nfunction preferenceProfile(){\n let restraint=0, ambition=0;\n for(const [id,a] of Object.entries(answers)){\n  if(id==='universe'||id==='budget'||id==='budget_mode')continue;\n  const q=questionById(id,universe()); if(!q||q.kind!=='preference')continue;\n  if(q.level){const n=Number(a||0); if(n<=2)restraint+=2; else if(n>=4)ambition+=2; else ambition+=.5; continue;}\n  if(a===false)restraint+=1; else if(a===true)ambition+=1;\n  if(id==='watch_goal'&&a==='balanced')restraint+=.5;\n }\n const budget=Number(answers.budget||0);\n if(budget>0){\n   const prices=universe().map(p=>Number(p.price||0)).filter(Boolean).sort((a,b)=>a-b);\n   if(prices.length){const lo=prices[0],hi=prices[prices.length-1],span=Math.max(1,hi-lo);const pos=(budget-lo)\/span;if(pos<.35)restraint+=2;else if(pos>.72)ambition+=1;}\n }\n return {restraint,ambition,low:restraint>=ambition+1.5};\n}\nfunction watchGoalFit(p,goal){\n const fam=String(p.family||'');\n const matrix={\n   running:{forerunner:7,fenix:4.5,instinct:2.5,venu:2,vivoactive:1.5,cirqa:.5},\n   outdoor:{fenix:7,instinct:6,forerunner:2.5,venu:.5,vivoactive:.5,cirqa:0},\n   wellness:{venu:7,vivoactive:6,cirqa:5,fenix:2.5,forerunner:2,instinct:.5},\n   balanced:{forerunner:4.5,venu:4.5,vivoactive:4,fenix:4,instinct:3,cirqa:2.5}\n };\n let score=(matrix[goal]&&matrix[goal][fam])||0;\n const training=Number(val(p,'training_level')||0), health=Number(val(p,'health_level')||0), batt=Number(val(p,'battery_hours')||0);\n if(goal==='running'){\n   score+=Math.min(2,Math.max(0,training-2)*.75);\n   \/\/ 1.7.21: watches can share the same public training_level while sitting at very\n   \/\/ different depths in the Forerunner range. training_tier is a semantic tie-breaker,\n   \/\/ not a hard filter and not a proxy for price.\n   const tier=Number(val(p,'training_tier')||0);\n   if(fam==='forerunner')score+=Math.min(6,tier*1.15);\n   if(val(p,'multiband')===true)score+=.75;\n }\n if(goal==='outdoor'){\n   if(val(p,'maps')===true)score+=1.5;\n   if(val(p,'multiband')===true)score+=1.25;\n   if(val(p,'flashlight')===true)score+=.75;\n   \/\/ Autonomy matters outdoors, but only as a modest tie-breaker: hours alone must\n   \/\/ never make an expensive watch beat a better-fitting family.\n   if(batt>=40)score+=1.25; else if(batt>=24)score+=.6;\n }\n if(goal==='wellness'){\n   score+=Math.min(2,Math.max(0,health-2)*.8);\n   if(val(p,'amoled')===true)score+=.8;\n   if(val(p,'calls')===true)score+=.5;\n }\n if(goal==='balanced'){\n   score+=Math.min(1,Math.max(0,training-2)*.35)+Math.min(1,Math.max(0,health-2)*.35);\n }\n return score;\n}\nfunction edgeGoalFit(p,goal){\n let score=0; const has=k=>val(p,k)===true, batt=Number(val(p,'battery_hours')||0);\n if(goal==='navigation'){ if(has('maps'))score+=3; if(has('touchscreen'))score+=1; }\n if(goal==='training'){ if(has('training_status'))score+=3; if(has('training_load'))score+=2; if(has('power_guide'))score+=1.5; if(has('stamina'))score+=1; }\n if(goal==='mtb'){ if(has('mtb_dynamics'))score+=4; if(has('maps'))score+=1.5; }\n if(goal==='endurance'){ if(has('solar'))score+=3; if(batt>=20)score+=2; else if(batt>=12)score+=1; }\n if(goal==='balanced'){ if(has('maps'))score+=1; if(has('training_status'))score+=1; if(has('touchscreen'))score+=.5; if(batt>=15)score+=.5; }\n return score;\n}\nfunction handheldUseFit(p,goal){\n let score=0; const has=k=>val(p,k)===true; const nav=Number(val(p,'navigation_level')||0);\n if(goal==='essential'){\n   if(nav>0&&nav<=2)score+=3;\n   if(!has('maps'))score+=2;\n   if(has('inreach'))score-=.5;\n }\n if(goal==='maps'){\n   if(has('maps'))score+=4;\n   if(has('touchscreen'))score+=1;\n   if(nav>=2)score+=1;\n }\n if(goal==='advanced'){\n   if(nav>=3)score+=3;\n   if(has('maps'))score+=2;\n   if(has('multiband'))score+=1.5;\n   if(has('barometric_altimeter'))score+=1;\n }\n return score;\n}\nfunction scoreProduct(p){\n let score=0,hard=true,reasons=[]; const pref=preferenceProfile();\n for(const [id,a] of Object.entries(answers)){\n  if(id==='universe'||id==='budget'||id==='budget_mode')continue;\n  const q=questionById(id,universe()); if(!q)continue;\n  if(q.id==='watch_goal'){\n    score+=watchGoalFit(p,a);\n    if(a==='running'&&p.family==='forerunner')reasons.push('famiglia particolarmente centrata sulla corsa');\n    if(a==='outdoor'&&['fenix','instinct'].includes(p.family))reasons.push('profilo forte per outdoor e avventura');\n    if(a==='wellness'&&['venu','vivoactive','cirqa'].includes(p.family))reasons.push('profilo centrato su salute e quotidiano');\n    if(a==='balanced')reasons.push('profilo equilibrato per uso misto');\n    continue;\n  }\n  if(q.id==='edge_goal'){\n    score+=edgeGoalFit(p,a);\n    if(a==='navigation'&&val(p,'maps')===true)reasons.push('profilo centrato su navigazione e semplicit\u00e0');\n    if(a==='training'&&val(p,'training_status')===true)reasons.push('profilo forte per allenamento e performance');\n    if(a==='mtb'&&val(p,'mtb_dynamics')===true)reasons.push('profilo orientato alla MTB');\n    if(a==='endurance'&&(val(p,'solar')===true||Number(val(p,'battery_hours')||0)>=20))reasons.push('profilo adatto a lunghe distanze e autonomia');\n    continue;\n  }\n  if(q.id==='h_use'){\n    score+=handheldUseFit(p,a);\n    if(a==='essential')reasons.push('profilo adatto a navigazione essenziale');\n    if(a==='maps'&&val(p,'maps')===true)reasons.push('profilo centrato su cartografia ed escursioni');\n    if(a==='advanced')reasons.push('profilo orientato a un uso outdoor pi\u00f9 completo');\n    continue;\n  }\n  if(q.id==='varia_position'){const ok=a==='front'?val(p,'front_light')===true:val(p,'rear_light')===true;if(!ok)hard=false;else{score+=10;reasons.push(a==='front'?'luce anteriore':'soluzione posteriore');}continue;}\n  if(q.id==='cleat'){const ok=val(p,a)===true;if(!ok)hard=false;else{score+=8;reasons.push('compatibile con la tua tacchetta');}continue;}\n  const x=val(p,q.feature);\n  if(q.kind==='requirement'&&a===true){if(x===true||(q.level&&Number(x)>=Number(a))){score+=8;}else hard=false;continue;}\n  if(q.kind==='preference'){\n    if(q.level){\n      const n=Number(x||0),wanted=Number(a||0);\n      \/\/ Watch training is a true 2\/3\/4 hierarchy. \"Essenziale\" rewards level 2 and\n      \/\/ deliberately avoids letting richer watches win just because they contain more.\n      \/\/ \"Avanzato\" strongly prefers 3+, with level 4 earning a meaningful extra push;\n      \/\/ \"Voglio il massimo\" makes level 4 the clear target.\n      if(q.id==='training'){\n        if(wanted<=2){ if(n===2)score+=7; else if(n===1)score+=2; else if(n>=3)score+=pref.low?-2:1; else score-=3; }\n        else if(wanted===3){ if(n===3)score+=8; else if(n>=4)score+=11; else if(n===2)score-=5; else score-=8; }\n        else { if(n>=4)score+=14; else if(n===3)score-=6; else score-=10; }\n      } else if(n>=wanted){score+=4; if(n>wanted&&!pref.low)score+=Math.min(2,n-wanted); if(n>wanted&&pref.low)score-=Math.min(2,(n-wanted)*1.25);}else score-=2;\n    }\n    else if(a===true&&x===true)score+=4;\n    else if(a===false&&x===false)score+=1;\n    else if(a===false&&x===true&&pref.low)score-=.75;\n  }\n }\n const budget=Number(answers.budget||0); const over=budget>0?Math.max(0,p.price-budget):0;\n if(budget&&answers.budget_mode==='strict'&&over>0)hard=false;\n if(budget&&!over)score+=3;\n if(budget&&over>0&&answers.budget_mode==='soft'){\n   \/\/ An elastic budget permits an upgrade, but it must earn its price.\n   score-=Math.min(pref.low?12:8,(over\/Math.max(80,budget))*18);\n }\n \/\/ If the answers clearly point to an essential\/value solution, do not let unused\n \/\/ premium equipment win merely because the product has more features.\n if(pref.low){\n   const prices=universe().map(x=>Number(x.price||0)).filter(Boolean); const floor=prices.length?Math.min(...prices):p.price;\n   score-=Math.max(0,(p.price-floor)\/100)*1.15;\n }\n return {score,hard,reasons:[...new Set(reasons)].slice(0,4),over,pref};\n}\nfunction updateGrid(){\n const u=answers.universe; const hasUniverse=!!u; let active=0;\n const states=PRODUCTS.map(p=>{\n   if(!hasUniverse){active++;return {p,out:false,best:false,order:500};}\n   if(classGroup(p)!==u)return {p,out:true,best:false,order:900};\n   const s=scoreProduct(p); if(s.hard)active++;\n   return {p,out:!s.hard,best:s.hard&&s.score>0,order:Math.round(400-s.score*10)};\n });\n const grid=$('#gfGrid'); grid.classList.remove('is-final'); $('#gfStage').classList.remove('is-final');\n requestAnimationFrame(()=>{\n   states.forEach(st=>{\n     const el=cards.get(st.p.id); if(!el)return;\n     el.className='gf-card'; el.style.order=st.order;\n     if(st.out)el.classList.add('is-out'); else if(st.best)el.classList.add('is-best');\n   });\n });\n const vw=Math.max(320,window.innerWidth-32);\n \/\/ Deliberately keep products large. When there are many, the row extends beyond\n \/\/ the viewport instead of shrinking\/overlapping every image to make all of them fit.\n let cardW;\n if(active>=9) cardW=Math.max(220,Math.min(300,vw*.225));\n else if(active>=6) cardW=Math.max(245,Math.min(325,vw*.255));\n else if(active>=4) cardW=Math.max(270,Math.min(350,vw*.28));\n else cardW=Math.max(300,Math.min(385,vw*.32));\n if(!hasUniverse) cardW=Math.max(220,Math.min(300,vw*.225));\n if(window.innerWidth<=900) cardW=104;\n grid.style.setProperty('--cardW',Math.round(cardW)+'px');\n $('#gfCount').textContent=hasUniverse?active:PRODUCTS.length; $('#gfCountLabel').textContent=hasUniverse?'compatibili con i requisiti fin qui':'Garmin disponibili ora';\n}\nfunction renderQuestion(){\n current=nextQuestion(); selected=null;\n if(!current){showResults();return;}\n MMR_GF_ANALYTICS.send('step_view',{step:current.id,answered:Object.keys(answers).length});\n const answered=Object.keys(answers).length; $('#gfStep').textContent=`PASSO ${answered+1}`; $('#gfQuestion').textContent=current.title; $('#gfHelp').textContent=current.help||'';\n const box=$('#gfOptions');box.innerHTML=''; current.options.forEach(o=>{const b=document.createElement('button');b.type='button';b.className='gf-option';b.innerHTML=`<strong>${esc(o.t)}<\/strong><span>${esc(o.d||'')}<\/span>`;b.onclick=()=>{selected=o.v;box.querySelectorAll('.gf-option').forEach(x=>x.classList.remove('is-selected'));b.classList.add('is-selected');$('#gfNext').disabled=false;if(window.matchMedia('(max-width: 900px)').matches){box.querySelectorAll('.gf-option').forEach(x=>x.disabled=true);setTimeout(()=>{if(selected!==null)goNext();},240);}};box.appendChild(b)});\n $('#gfNext').disabled=true; $('#gfBack').disabled=history.length===0; const approx=Math.min(92,(answered\/(answered+4))*100); $('#gfProgress').style.width=approx+'%'; updateGrid();\n}\nfunction goNext(){if(selected===null)return; MMR_GF_ANALYTICS.send('step_answer',{step:current.id,value:selected}); history.push({...answers}); answers[current.id]=selected; renderQuestion();}\nfunction goBack(){if(!history.length)return;answers=history.pop();renderQuestion();}\nfunction resultFeatureDefs(){\n const u=answers.universe;\n if(u==='watch')return [\n  ['maps','mappe complete'],['ecg','ECG'],['amoled','display AMOLED'],['touchscreen','touchscreen'],['music','musica'],['calls','chiamate'],['flashlight','torcia integrata'],['multiband','GNSS multibanda'],['inreach','connettivit\u00e0 inReach'],['lte','LTE'],['solar','ricarica Solar'],['sapphire','vetro zaffiro'],['titanium_case','cassa in titanio'],['green_flashlight','torcia verde'],['garmin_epic','Garmin Epic'],['stamina_curves','Stamina Curves'],['stamina_zones','Stamina Zones'],['training_level','training avanzato',4],['health_level','funzioni salute avanzate',4]\n ];\n if(u==='bike_computer')return [\n  ['maps','cartografia'],['touchscreen','touchscreen'],['climbpro','ClimbPro'],['power_guide','Power Guide'],['stamina','Stamina'],['training_status','Training Status'],['training_load','carico di allenamento'],['cycling_dynamics','dinamiche ciclismo'],['mtb_dynamics','dinamiche MTB'],['speaker','speaker'],['garmin_pay','Garmin Pay'],['solar','ricarica Solar']\n ];\n if(u==='radar')return [['front_light','luce anteriore'],['rear_light','luce posteriore'],['radar','radar posteriore'],['advanced_radar','radar evoluto'],['brake_light','luce di stop'],['camera','videocamera']];\n if(u==='power_meter')return [['dual_sided','misurazione bilaterale'],['cycling_dynamics','dinamiche ciclismo'],['cadence','cadenza'],['upgradeable','possibilit\u00e0 di upgrade'],['spd','SPD'],['spd_sl','SPD-SL'],['look_keo','LOOK KEO']];\n if(u==='handheld')return [['maps','cartografia'],['touchscreen','touchscreen'],['inreach','inReach'],['multiband','GNSS multibanda'],['barometric_altimeter','altimetro barometrico']];\n return [];\n}\nfunction featureSet(p){\n const out=[];\n for(const d of resultFeatureDefs()){\n  const [k,label,min]=d,x=val(p,k);\n  if(min?Number(x||0)>=min:x===true)out.push({key:k,label});\n }\n return out;\n}\nfunction featureKeys(p){return new Set(featureSet(p).map(x=>x.key));}\nfunction dynamicSpecs(p){\n const out=[];\n const display=Number(val(p,'display_inches')||0);\n const batt=Number(val(p,'battery_hours')||0);\n if(display>0)out.push({key:'display_inches',label:`display ${String(display).replace('.',',')}\u2033`,num:display});\n if(batt>0)out.push({key:'battery_hours',label:`fino a ${Math.round(batt)} h di autonomia`,num:batt});\n const storage=Number(val(p,'storage_gb')||0), nits=Number(val(p,'display_nits')||0);\n if(storage>0)out.push({key:'storage_gb',label:`${Math.round(storage)} GB di memoria`,num:storage});\n if(nits>0)out.push({key:'display_nits',label:`display fino a ${Math.round(nits)} nit`,num:nits});\n return out;\n}\nfunction requestedLabels(p){\n const out=[];\n for(const [id,a] of Object.entries(answers)){\n  if(id==='universe'||id==='budget'||id==='budget_mode'||id==='watch_goal')continue;\n  const q=questionById(id,universe()); if(!q||!q.feature)continue;\n  const x=val(p,q.feature);\n  if((a===true&&x===true)||(q.level&&Number(x||0)>=Number(a||0))){\n   const def=resultFeatureDefs().find(d=>d[0]===q.feature);if(def)out.push({key:def[0],label:def[1]});\n  }\n }\n return [...new Map(out.map(x=>[x.key,x])).values()];\n}\nfunction planPriority(p){\n const requested=new Set(requestedLabels(p).map(x=>x.key));\n const base=featureSet(p);\n return base.sort((a,b)=>(requested.has(a.key)?0:1)-(requested.has(b.key)?0:1));\n}\nfunction isFeatureSuperset(current,previous){\n const cur=featureKeys(current), prev=featureKeys(previous);\n for(const k of prev)if(!cur.has(k))return false;\n \/\/ Numeric capabilities must not become worse when we claim \u201cCome X\u201d.\n for(const k of ['display_inches','battery_hours','storage_gb','display_nits']){\n  const a=Number(val(current,k)||0), b=Number(val(previous,k)||0);\n  if(b>0&&a>0&&a+0.001<b)return false;\n }\n return true;\n}\nfunction addedFeatures(current,previous){\n const prev=featureKeys(previous);\n const out=planPriority(current).filter(x=>!prev.has(x.key));\n const curDyn=dynamicSpecs(current), prevDyn=Object.fromEntries(dynamicSpecs(previous).map(x=>[x.key,x]));\n for(const x of curDyn){\n  const old=prevDyn[x.key];\n  if(!old || Number(x.num)>Number(old.num)+0.01)out.push(x);\n }\n return out;\n}\nfunction progressivePlan(p,previous){\n const requested=requestedLabels(p), ordered=planPriority(p), dynamic=dynamicSpecs(p);\n if(previous&&isFeatureSuperset(p,previous)){\n   const plus=addedFeatures(p,previous).slice(0,4);\n   return {base:`Come ${previous.name}`,include:[],plus:plus.map(x=>x.label),requested:[]};\n }\n \/\/ Base\/alternative: show what the user actually asked for first, then the most\n \/\/ meaningful product capabilities. This avoids generic \u201ccompatibile con...\u201d copy.\n const chosen=[];\n const push=x=>{if(x&&!chosen.some(y=>y.key===x.key))chosen.push(x)};\n requested.forEach(push); ordered.forEach(push); dynamic.forEach(push);\n return {base:'Include',include:chosen.slice(0,4).map(x=>x.label),plus:[],requested:[]};\n}\nfunction chainFinalPicks(picks){\n if(!picks.length)return [];\n const remaining=[...picks].sort((a,b)=>a.x.p.price-b.x.p.price||b.x.score-a.x.score);\n const chain=[remaining.shift()];\n while(remaining.length){\n  const prev=chain[chain.length-1].x.p;\n  const supers=remaining.filter(z=>isFeatureSuperset(z.x.p,prev));\n  let next;\n  if(supers.length){\n   \/\/ Prefer the smallest sensible step up, like adjacent software plans.\n   supers.sort((a,b)=>{\n    const da=addedFeatures(a.x.p,prev).length, db=addedFeatures(b.x.p,prev).length;\n    return da-db || a.x.p.price-b.x.p.price || b.x.score-a.x.score;\n   });\n   next=supers[0];\n  }else{\n   \/\/ No clean inheritance path: start a new \u201cInclude\u201d card instead of implying\n   \/\/ features that the product does not have.\n   next=remaining[0];\n  }\n  chain.push(next); remaining.splice(remaining.indexOf(next),1);\n }\n return chain;\n}\nfunction watchExplanation(p,role,context){\n const goal=answers.watch_goal||'balanced';\n const has=(k)=>val(p,k)===true;\n const level=(k)=>Number(val(p,k)||0);\n const family=String(p.family||'');\n const traits=[];\n const add=(condition,text)=>{if(condition&&!traits.includes(text))traits.push(text);};\n\n \/\/ Only mention capabilities that are both relevant to the path and really present.\n if(goal==='running'){\n  add(level('training_level')>=4,'training avanzato');\n  add(level('training_level')===3,'strumenti di allenamento completi');\n  add(has('multiband')&&answers.multiband===true,'GNSS multibanda');\n  add(has('maps')&&answers.maps===true,'mappe');\n  add(has('music')&&answers.music===true,'musica dal polso');\n }else if(goal==='outdoor'){\n  add(has('maps')&&answers.maps===true,'mappe');\n  add(has('multiband')&&answers.multiband===true,'GNSS multibanda');\n  add(has('flashlight')&&answers.flashlight===true,'torcia integrata');\n  add(Number(val(p,'battery_hours')||0)>=24,'autonomia per uscite lunghe');\n }else if(goal==='wellness'){\n  add(level('health_level')>=4,'funzioni salute avanzate');\n  add(has('ecg')&&answers.ecg===true,'ECG');\n  add(has('calls')&&answers.calls===true,'chiamate dal polso');\n  add(has('amoled')&&answers.amoled===true,'display AMOLED');\n }else{\n  add(level('training_level')>=3,'buone funzioni sportive');\n  add(level('health_level')>=3,'monitoraggio salute completo');\n  add(has('amoled')&&answers.amoled===true,'display AMOLED');\n }\n const featureText=traits.slice(0,3).join(', ');\n const withFeatures=(base)=>featureText?`${base}, con ${featureText}.`:`${base}.`;\n\n \/\/ Running \/ Forerunner uses the role as the narrative source of truth.\n \/\/ This deliberately avoids letting card order rewrite the meaning of a role:\n \/\/ intelligent + primary are autonomous, upgrade compares with the primary, and\n \/\/ alternatives explain their own direction. Ranking\/roles are read-only here.\n const allPicks=(context&&context.picks?context.picks:[]);\n if(goal==='running'&&family==='forerunner'){\n   const primaryItem=allPicks.find(z=>z.role==='La scelta pi\u00f9 adatta'&&z.x&&z.x.p&&z.x.p.id!==p.id);\n   const primary=primaryItem?primaryItem.x.p:null;\n   if(role==='La scelta intelligente'){\n     return withFeatures('Copre bene corsa e allenamento senza spingerti verso una fascia pi\u00f9 alta del necessario');\n   }\n   if(role==='La scelta pi\u00f9 adatta'){\n     return withFeatures('\u00c8 il pi\u00f9 centrato sulla corsa e sul livello di allenamento che hai descritto');\n   }\n   if(role==='L\u2019upgrade'){\n     if(primary){\n       const labels=[];\n       const addLabel=t=>{if(t&&!labels.includes(t)&&labels.length<2)labels.push(t)};\n       const curTraining=Number(val(p,'training_level')||0), baseTraining=Number(val(primary,'training_level')||0);\n       const curTier=Number(val(p,'training_tier')||0), baseTier=Number(val(primary,'training_tier')||0);\n       if(curTraining>baseTraining||curTier>baseTier)addLabel('strumenti di allenamento pi\u00f9 evoluti');\n       if(val(p,'calls')===true&&val(primary,'calls')!==true)addLabel('chiamate dal polso');\n       if(val(p,'maps')===true&&val(primary,'maps')!==true)addLabel('mappe complete');\n       if(val(p,'multiband')===true&&val(primary,'multiband')!==true)addLabel('GNSS multibanda');\n       if(labels.length===1)return `Rispetto a ${primary.name} aggiunge ${labels[0]}: \u00e8 il motivo concreto per salire di livello.`;\n       if(labels.length===2){\n         if(labels.includes('strumenti di allenamento pi\u00f9 evoluti')&&labels.includes('chiamate dal polso')){\n           return `Il salto da ${primary.name} ha senso se vuoi spingere di pi\u00f9 sull\u2019allenamento: ${p.name} sale al livello training pi\u00f9 completo del Finder e aggiunge le chiamate dal polso.`;\n         }\n         return `Rispetto a ${primary.name} aggiunge ${labels[0]} e ${labels[1]}: sono le differenze che rendono sensato il salto.`;\n       }\n     }\n     return withFeatures('\u00c8 l\u2019upgrade per chi vuole spingere pi\u00f9 in alto corsa e allenamento');\n   }\n   \/\/ A runner alternative is not automatically the previous card + one feature.\n   \/\/ If it is materially deeper than the primary, say so without changing its role.\n   if(primary){\n     const curTraining=Number(val(p,'training_level')||0), baseTraining=Number(val(primary,'training_level')||0);\n     const curTier=Number(val(p,'training_tier')||0), baseTier=Number(val(primary,'training_tier')||0);\n     if(curTraining>baseTraining||curTier>baseTier){\n       return withFeatures('Resta una scelta da runner pi\u00f9 profonda sul piano dell\u2019allenamento, ma con un equilibrio diverso tra dotazione e prezzo');\n     }\n   }\n   return withFeatures('Resta una scelta da runner, ma con un equilibrio diverso tra prezzo e profondit\u00e0 delle funzioni di allenamento');\n }\n\n \/\/ Same-family narrative is intentionally one-way for the other Watch paths.\n \/\/ The FIRST product of a family explains why that family belongs in the selection.\n \/\/ Only later products of the same family explain what they add to the previous one.\n const currentIndex=allPicks.findIndex(z=>z.x&&z.x.p&&z.x.p.id===p.id);\n const previousSameFamily=currentIndex>0\n   ? allPicks.slice(0,currentIndex).map(z=>z.x.p).reverse().find(x=>String(x.family||'')===family)||null\n   : null;\n const usefulDelta=(current,previous)=>{\n   const delta=addedFeatures(current,previous), labels=[];\n   const addLabel=(text)=>{if(text&&!labels.includes(text)&&labels.length<2)labels.push(text)};\n   const hasDelta=(k)=>delta.some(x=>x.key===k);\n   const curNum=(k)=>Number(val(current,k)||0), oldNum=(k)=>Number(val(previous,k)||0);\n   if(hasDelta('ecg'))addLabel('ECG');\n   if(hasDelta('maps'))addLabel('mappe complete');\n   if(hasDelta('multiband'))addLabel('GNSS multibanda');\n   if(hasDelta('flashlight'))addLabel('torcia integrata');\n   if(hasDelta('solar'))addLabel('ricarica Solar');\n   if(hasDelta('sapphire'))addLabel('vetro zaffiro');\n   if(hasDelta('titanium_case'))addLabel('cassa in titanio');\n   if(hasDelta('green_flashlight'))addLabel('torcia con luce verde');\n   if(hasDelta('garmin_epic'))addLabel('Garmin Epic');\n   if(hasDelta('stamina_curves'))addLabel('Stamina Curves');\n   if(hasDelta('stamina_zones'))addLabel('Stamina Zones');\n   if(hasDelta('calls'))addLabel('chiamate dal polso');\n   if(hasDelta('music'))addLabel('musica dal polso');\n   if(hasDelta('touchscreen'))addLabel('touchscreen');\n   if(hasDelta('amoled'))addLabel('display AMOLED');\n   if(hasDelta('storage_gb')&&curNum('storage_gb')>oldNum('storage_gb'))addLabel(`${Math.round(curNum('storage_gb'))} GB di memoria`);\n   if(hasDelta('display_nits')&&curNum('display_nits')>oldNum('display_nits'))addLabel('display pi\u00f9 luminoso');\n   if(curNum('battery_hours')>0&&oldNum('battery_hours')>0&&curNum('battery_hours')>=oldNum('battery_hours')*1.15)addLabel('pi\u00f9 autonomia');\n   if(curNum('training_level')>oldNum('training_level'))addLabel('strumenti di allenamento pi\u00f9 evoluti');\n   if(curNum('health_level')>oldNum('health_level'))addLabel('funzioni salute pi\u00f9 complete');\n   return labels.slice(0,2);\n };\n if(previousSameFamily){\n   const pname=String(p.name||'').toLowerCase();\n   if(has('inreach')||pname.includes('inreach')){\n     return `Rispetto a ${previousSameFamily.name} aggiunge le funzioni inReach per comunicazione e sicurezza anche lontano dal telefono.`;\n   }\n   const labels=usefulDelta(p,previousSameFamily);\n   if(labels.length===1)return `Rispetto a ${previousSameFamily.name} aggiunge ${labels[0]}, mantenendo la stessa impostazione di fondo.`;\n   if(labels.length===2)return `Rispetto a ${previousSameFamily.name} aggiunge ${labels[0]} e ${labels[1]}, mantenendo la stessa impostazione di fondo.`;\n   \/\/ No reliable delta: do not reverse-compare the earlier model with this one.\n   \/\/ Fall through to the role\/goal explanation.\n }\n\n if(role==='La scelta pi\u00f9 adatta'){\n  if(goal==='running')return withFeatures('\u00c8 il pi\u00f9 centrato sulla corsa e sull\u2019allenamento che hai descritto');\n  if(goal==='outdoor')return withFeatures('\u00c8 il pi\u00f9 centrato su outdoor e avventura per le priorit\u00e0 che hai indicato');\n  if(goal==='wellness')return withFeatures('\u00c8 il pi\u00f9 centrato su salute e uso quotidiano');\n  return withFeatures('\u00c8 quello che bilancia meglio sport, quotidiano e priorit\u00e0 che hai indicato');\n }\n if(role==='La scelta intelligente'){\n  if(goal==='running')return withFeatures('Copre bene ci\u00f2 che ti serve per correre senza spingerti verso funzioni premium non prioritarie');\n  if(goal==='outdoor')return withFeatures('Copre le esigenze outdoor che hai indicato senza farti salire inutilmente di fascia');\n  if(goal==='wellness')return withFeatures('Copre bene salute e quotidiano senza farti pagare soprattutto per funzioni sportive avanzate');\n  return withFeatures('Copre bene le tue priorit\u00e0 evitando extra che non hai indicato come importanti');\n }\n if(role==='L\u2019upgrade'){\n  if(goal==='running')return withFeatures('Vale il salto di prezzo soprattutto se vuoi spingere pi\u00f9 in alto corsa e allenamento');\n  if(goal==='outdoor')return withFeatures('Vale il salto di prezzo se vuoi un\u2019impostazione pi\u00f9 completa per outdoor e avventura');\n  if(goal==='wellness')return withFeatures('Vale il salto di prezzo se vuoi pi\u00f9 funzioni smart e salute rispetto alla scelta principale');\n  return withFeatures('Vale il salto di prezzo solo se vuoi davvero pi\u00f9 dotazione rispetto alla scelta principale');\n }\n\n \/\/ Alternatives explain the different direction they take, instead of pretending\n \/\/ that one watch is simply the previous watch plus a feature.\n if(goal==='wellness'){\n  if(family==='forerunner')return withFeatures('Pi\u00f9 orientato a corsa e allenamento: sceglilo se le funzioni sportive contano pi\u00f9 del wellness');\n  if(['fenix','instinct'].includes(family))return withFeatures('Pi\u00f9 orientato a sport e outdoor: sceglilo se robustezza e attivit\u00e0 contano pi\u00f9 dell\u2019uso quotidiano');\n  if(['venu','vivoactive','cirqa'].includes(family))return withFeatures('Resta centrato su salute e quotidiano, ma con un equilibrio diverso tra funzioni smart e sportive');\n }\n if(goal==='running'){\n  if(['venu','vivoactive','cirqa'].includes(family))return withFeatures('Pi\u00f9 orientato a quotidiano e wellness: sceglilo se questi aspetti contano quasi quanto la corsa');\n  if(['fenix','instinct'].includes(family))return withFeatures('Pi\u00f9 orientato a outdoor e multisport: sceglilo se vuoi affiancare alla corsa un uso pi\u00f9 avventuroso');\n  if(family==='forerunner')return withFeatures('Resta una scelta da runner, ma con un equilibrio diverso tra prezzo e profondit\u00e0 delle funzioni di allenamento');\n }\n if(goal==='outdoor'){\n  if(family==='forerunner')return withFeatures('Pi\u00f9 orientato a corsa e allenamento: sceglilo se l\u2019outdoor non \u00e8 la tua priorit\u00e0 assoluta');\n  if(['venu','vivoactive','cirqa'].includes(family))return withFeatures('Pi\u00f9 orientato a quotidiano e wellness: sceglilo se vuoi meno specializzazione outdoor');\n  if(['fenix','instinct'].includes(family))return withFeatures('Resta una scelta outdoor, con un equilibrio diverso tra dotazione, autonomia e prezzo');\n }\n return withFeatures('\u00c8 un\u2019alternativa valida se preferisci un equilibrio diverso tra sport, quotidiano e prezzo');\n}\nfunction edgeExplanation(p,role,context){\n const goal=answers.edge_goal||'balanced', picks=(context&&context.picks)||[];\n const has=k=>val(p,k)===true;\n const edgeDelta=(cur,prev)=>{\n  const out=[], add=t=>{if(t&&!out.includes(t)&&out.length<2)out.push(t)};\n  const curHas=k=>val(cur,k)===true, oldHas=k=>val(prev,k)===true;\n  if(curHas('touchscreen')&&!oldHas('touchscreen'))add('il touchscreen');\n  if(!curHas('touchscreen')&&oldHas('touchscreen'))add('rinuncia al touchscreen');\n  if(curHas('speaker')&&!oldHas('speaker'))add('lo speaker integrato');\n  if(curHas('garmin_pay')&&!oldHas('garmin_pay'))add('Garmin Pay');\n  if(curHas('solar')&&!oldHas('solar'))add('la ricarica Solar');\n  if(curHas('mtb_dynamics')&&!oldHas('mtb_dynamics'))add('funzioni MTB dedicate');\n  if(curHas('training_status')&&!oldHas('training_status'))add('strumenti di allenamento pi\u00f9 completi');\n  if(curHas('power_guide')&&!oldHas('power_guide'))add('Power Guide');\n  const cb=Number(val(cur,'battery_hours')||0), pb=Number(val(prev,'battery_hours')||0);\n  if(cb>0&&pb>0&&cb>=pb*1.2)add('pi\u00f9 autonomia');\n  const cd=Number(val(cur,'display_inches')||0), pd=Number(val(prev,'display_inches')||0);\n  if(cd>0&&pd>0&&cd>=pd+.25)add('un display pi\u00f9 grande');\n  return out;\n };\n \/\/ A direct comparison is useful only for a real upgrade. Alternatives are not\n \/\/ forced into a ladder: they explain their own direction instead of comparing\n \/\/ themselves with whichever card happens to precede them.\n if(role==='L\u2019upgrade'){\n  const primaryItem=picks.find(z=>z.role==='La scelta pi\u00f9 adatta'&&z.x&&z.x.p&&z.x.p.id!==p.id);\n  const baseline=primaryItem?primaryItem.x.p:null;\n  if(baseline){\n   const d=edgeDelta(p,baseline);\n   if(d.length===1){\n    if(d[0].startsWith('rinuncia'))return `Rispetto a ${baseline.name} ${d[0]}: \u00e8 un cambio di impostazione, non un semplice salto di gamma.`;\n    return `Rispetto a ${baseline.name} aggiunge ${d[0]}: \u00e8 il motivo pi\u00f9 concreto per salire di livello.`;\n   }\n   if(d.length===2){\n    const loss=d.find(x=>x.startsWith('rinuncia'));\n    if(loss){const gain=d.find(x=>x!==loss);return `Rispetto a ${baseline.name} ${loss}${gain?`, ma aggiunge ${gain}`:''}: ha senso solo se questo scambio risponde meglio alle tue priorit\u00e0.`;}\n    return `Rispetto a ${baseline.name} aggiunge ${d[0]} e ${d[1]}: sono le differenze che giustificano davvero il salto.`;\n   }\n  }\n  if(has('solar')&&goal==='endurance')return 'Ha senso salire qui soprattutto se autonomia e lunghe distanze sono davvero una priorit\u00e0.';\n  return '\u00c8 la proposta pi\u00f9 ricca tra quelle emerse, da scegliere se useresti davvero la dotazione aggiuntiva.';\n }\n if(role==='La scelta pi\u00f9 adatta'){\n  if(goal==='navigation')return '\u00c8 quello che centra meglio navigazione e facilit\u00e0 d\u2019uso tra le opzioni emerse.';\n  if(goal==='training')return '\u00c8 quello che centra meglio allenamento e dati performance tra le opzioni emerse.';\n  if(goal==='mtb')return '\u00c8 quello pi\u00f9 coerente con un utilizzo MTB e off-road tra le opzioni emerse.';\n  if(goal==='endurance')return '\u00c8 quello pi\u00f9 centrato su lunghe distanze e autonomia tra le opzioni emerse.';\n  return '\u00c8 quello che offre l\u2019equilibrio pi\u00f9 convincente tra navigazione, allenamento e utilizzo quotidiano.';\n }\n if(role==='La scelta intelligente')return 'Copre bene le priorit\u00e0 che hai indicato senza farti pagare soprattutto per extra non decisivi.';\n \/\/ Stand-alone alternatives: describe why the product is here, not how it differs\n \/\/ from an unrelated Edge shown immediately before it.\n const name=String(p.name||'').toLowerCase();\n if(name.includes('mtb')||has('mtb_dynamics'))return '\u00c8 l\u2019alternativa pi\u00f9 orientata alla MTB e all\u2019off-road, se vuoi privilegiare questo tipo di utilizzo.';\n if(has('solar'))return 'Punta soprattutto su autonomia e ricarica Solar: ha senso se le uscite lunghe pesano pi\u00f9 degli extra da uso quotidiano.';\n if(has('training_status')&&has('power_guide'))return 'Punta di pi\u00f9 sugli strumenti di allenamento e su Power Guide, per chi vuole leggere e gestire meglio lo sforzo.';\n if(has('training_status'))return '\u00c8 pi\u00f9 orientato all\u2019allenamento e ai dati performance, con un equilibrio diverso tra funzioni e prezzo.';\n if(has('touchscreen')&&(has('speaker')||has('garmin_pay')))return 'Privilegia un\u2019interazione pi\u00f9 completa nell\u2019uso quotidiano, con touchscreen e funzioni smart aggiuntive.';\n if(goal==='navigation')return '\u00c8 un\u2019alternativa valida se preferisci un equilibrio diverso tra interfaccia, navigazione e prezzo.';\n if(goal==='training')return '\u00c8 un\u2019alternativa valida se vuoi spostare l\u2019equilibrio verso allenamento e dati performance.';\n if(goal==='mtb')return '\u00c8 un\u2019alternativa valida se cerchi un equilibrio diverso tra off-road, navigazione e prezzo.';\n if(goal==='endurance')return '\u00c8 un\u2019alternativa valida se vuoi bilanciare in modo diverso autonomia, navigazione e prezzo.';\n return '\u00c8 un\u2019alternativa sensata se preferisci un equilibrio diverso tra funzioni, autonomia e prezzo.';\n}\n\nfunction specialistExplanation(p,role,context){\n const group=classGroup(p), picks=(context&&context.picks)||[];\n const has=k=>val(p,k)===true;\n const primaryItem=picks.find(z=>z.role==='La scelta pi\u00f9 adatta'&&z.x&&z.x.p&&z.x.p.id!==p.id);\n const base=primaryItem?primaryItem.x.p:null;\n const delta=(cur,prev,defs)=>{\n  const out=[]; const add=t=>{if(t&&!out.includes(t)&&out.length<2)out.push(t)};\n  for(const [k,label] of defs){if(hasOwn(cur,k)&&val(cur,k)===true&&val(prev,k)!==true)add(label)}\n  const cb=Number(val(cur,'battery_hours')||0),pb=Number(val(prev,'battery_hours')||0);\n  if(cb>0&&pb>0&&cb>=pb*1.25)add('pi\u00f9 autonomia');\n  return out;\n };\n const hasOwn=(obj,k)=>obj&&obj.features&&Object.prototype.hasOwnProperty.call(obj.features,k);\n if(group==='radar'){\n  const front=has('front_light'), rear=has('rear_light'), radar=has('radar'), advanced=has('advanced_radar'), brake=has('brake_light');\n  \/\/ Front and rear Varia solve different jobs: never narrate them as comparable radar tiers.\n  if(front&&!rear){\n   if(role==='La scelta pi\u00f9 adatta')return '\u00c8 la scelta Varia anteriore: illumina la strada davanti a te e risponde direttamente alla richiesta di una luce frontale.';\n   return '\u00c8 la proposta Varia per l\u2019anteriore: una luce frontale, non un radar posteriore.';\n  }\n  if(rear){\n   if(advanced){\n    if(role==='La scelta pi\u00f9 adatta')return '\u00c8 il Varia posteriore pi\u00f9 evoluto: unisce luce e radar avanzato, con una lettura pi\u00f9 ricca dei veicoli che arrivano da dietro.';\n    if(role==='L\u2019upgrade'&&base&&val(base,'advanced_radar')!==true)return `Rispetto a ${base.name} porta il radar a un livello pi\u00f9 evoluto${brake?' e aggiunge la funzione luce di stop':''}: \u00e8 questa la ragione concreta per salire.`;\n    return `\u00c8 l\u2019alternativa posteriore pi\u00f9 evoluta: radar avanzato${brake?' e funzione luce di stop':''}, oltre alla luce posteriore.`;\n   }\n   if(radar){\n    if(role==='La scelta pi\u00f9 adatta')return '\u00c8 la scelta posteriore pi\u00f9 essenziale: abbina luce e radar per avvisarti dei veicoli in avvicinamento da dietro.';\n    if(role==='La scelta intelligente')return 'Copre il bisogno posteriore con luce e radar, senza pagare per il livello di rilevamento pi\u00f9 evoluto.';\n    return '\u00c8 l\u2019alternativa posteriore pi\u00f9 semplice: luce e radar per rilevare i veicoli in avvicinamento, senza gli extra del modello pi\u00f9 evoluto.';\n   }\n   return '\u00c8 una luce posteriore Varia: migliora la visibilit\u00e0 da dietro, senza funzioni radar.';\n  }\n  return '\u00c8 una soluzione Varia dedicata alla visibilit\u00e0 in bici.';\n }\n if(group==='power_meter'){\n  const cleat=answers.cleat;\n  const platform=cleat==='spd'?'SPD':(cleat==='spd_sl'?'SPD-SL':(cleat==='look_keo'?'LOOK KEO':''));\n  const supported=[['spd','SPD'],['spd_sl','SPD-SL'],['look_keo','LOOK KEO']].filter(([k])=>has(k)).map(([,label])=>label);\n  const extras=supported.filter(label=>label!==platform);\n  const isDual=has('dual_sided');\n  const extraText=extras.length?extras.join(' e '):'';\n\n  \/\/ The primary card answers the user's request directly. Bundle versatility is\n  \/\/ explained only when it exists; it never changes the role on its own.\n  if(role==='La scelta pi\u00f9 adatta'){\n   if(isDual){\n    if(extras.length)return `Centra la richiesta con misurazione bilaterale e tacchetta ${platform}; in pi\u00f9 il bundle permette di passare anche a ${extraText}.`;\n    return `Centra la richiesta con tacchetta ${platform} e misurazione bilaterale, separando i dati della gamba destra e sinistra.`;\n   }\n   if(extras.length)return `Centra la richiesta con tacchetta ${platform} e misurazione singola; il bundle aggiunge anche la compatibilit\u00e0 ${extraText}.`;\n   return `Centra la richiesta con tacchetta ${platform} e misurazione singola, senza farti pagare il doppio sensore.`;\n  }\n\n  if(role==='La scelta intelligente'){\n   if(extras.length)return `Mantiene la tacchetta ${platform} con una configurazione pi\u00f9 essenziale; il bundle consente anche di passare a ${extraText}.`;\n   return `Mantiene la tacchetta ${platform} con una configurazione pi\u00f9 essenziale, se non ti serve distinguere destra e sinistra.`;\n  }\n\n  \/\/ An upgrade exists only when ranking has already established that bilateral\n  \/\/ measurement is relevant. The card explains the functional step, while price stays visible above.\n  if(role==='L\u2019upgrade'&&base&&isDual&&val(base,'dual_sided')!==true){\n   if(extras.length)return `Aggiunge la misurazione bilaterale, con dati separati destra\/sinistra; il bundle permette inoltre di passare anche a ${extraText}.`;\n   return `Aggiunge la misurazione bilaterale, con dati separati della gamba destra e sinistra.`;\n  }\n\n  \/\/ Alternatives explain their functional value. Price is already visible in the card\n  \/\/ and is deliberately not repeated in the narrative.\n  if(isDual){\n   if(base&&extras.length)return `Mantiene la compatibilit\u00e0 ${platform}, aggiunge la misurazione bilaterale e il bundle permette anche di passare a ${extraText}.`;\n   if(base)return `Aggiunge la misurazione bilaterale, separando i dati della gamba destra e sinistra.`;\n   if(extras.length)return `Abbina misurazione bilaterale e compatibilit\u00e0 ${platform}; il bundle permette anche di passare a ${extraText}.`;\n   return `Misura separatamente destra e sinistra per offrire pi\u00f9 dettaglio sulla pedalata.`;\n  }\n  if(base&&extras.length)return `Mantiene la misurazione singola e la compatibilit\u00e0 ${platform}; il bundle aggiunge la possibilit\u00e0 di passare anche a ${extraText}.`;\n  if(extras.length)return `Mantiene la misurazione singola e aggiunge la possibilit\u00e0 di passare anche a tacchette ${extraText}.`;\n  return `\u00c8 l\u2019alternativa pi\u00f9 semplice con tacchetta ${platform}, senza il costo della misurazione bilaterale.`;\n }\n if(group==='handheld'){\n  const name=String(p.name||'').toLowerCase();\n  const isEtrexSE=name.includes('etrex se');\n  const isEtrexTouch=name.includes('etrex touch');\n  const isH1i=name.includes('h1i')||name.includes('inreach');\n  const isH1=!isH1i&&(name.includes('gpsmap h1')||name.includes(' h1'));\n  const wantsInreach=answers.inreach===true;\n  const wantsMaps=answers.h_maps===true||answers.h_use==='maps'||answers.h_use==='advanced';\n  const wantsTouch=answers.h_touch===true;\n\n  \/\/ Name-first product identities keep the explanation stable even when a PDP\n  \/\/ mentions sibling models. Answers decide relevance; they do not rewrite identity.\n  if(role==='La scelta pi\u00f9 adatta'){\n   if(isH1i&&wantsInreach)return '\u00c8 quello che centra meglio la richiesta: navigazione outdoor completa e comunicazione satellitare inReach anche senza copertura cellulare.';\n   if(isH1)return wantsMaps\n     ? '\u00c8 quello che centra meglio la richiesta per navigazione outdoor e cartografia, senza aggiungere funzioni satellitari che non servono al percorso scelto.'\n     : '\u00c8 quello che centra meglio la richiesta per un utilizzo outdoor evoluto, con un equilibrio completo tra navigazione e controlli sul campo.';\n   if(isEtrexTouch)return '\u00c8 quello che centra meglio la richiesta se vuoi mappe e consultazione pi\u00f9 immediata sul dispositivo, con interfaccia touchscreen.';\n   if(isEtrexSE)return '\u00c8 quello che centra meglio la richiesta se cerchi soprattutto navigazione essenziale, semplicit\u00e0 e autonomia senza funzioni superflue.';\n  }\n\n  if(role==='La scelta intelligente'){\n   if(isEtrexSE)return 'Punta sull\u2019essenziale: orientamento e navigazione GPS in una soluzione semplice, senza pagare per cartografia avanzata o comunicazione satellitare.';\n   if(isEtrexTouch)return 'Mantiene un approccio pi\u00f9 semplice dei GPSMAP, ma aggiunge mappe e touchscreen per una consultazione pi\u00f9 immediata sul campo.';\n   if(isH1)return 'Offre navigazione outdoor evoluta e cartografia senza spingerti verso la comunicazione satellitare inReach.';\n  }\n\n  if(isH1i){\n   if(wantsInreach)return 'Aggiunge la comunicazione satellitare inReach: messaggi e SOS restano disponibili anche quando manca la copertura cellulare.';\n   return '\u00c8 l\u2019alternativa con comunicazione satellitare inReach integrata, utile se vuoi mantenere messaggi e SOS disponibili anche fuori copertura.';\n  }\n  if(isH1){\n   if(wantsInreach)return 'Punta su navigazione e cartografia outdoor, ma senza la comunicazione satellitare inReach richiesta nel percorso.';\n   return 'Punta su navigazione e cartografia outdoor avanzate, senza aggiungere la componente satellitare inReach.';\n  }\n  if(isEtrexTouch){\n   if(wantsTouch||wantsMaps)return 'Punta su mappe e touchscreen: una soluzione pi\u00f9 immediata da consultare rispetto a un GPS outdoor essenziale.';\n   return '\u00c8 l\u2019alternativa che privilegia mappe e touchscreen, se vuoi una consultazione pi\u00f9 visuale sul dispositivo.';\n  }\n  if(isEtrexSE)return '\u00c8 la proposta pi\u00f9 essenziale della selezione: navigazione GPS semplice, senza cartografia avanzata o comunicazione satellitare.';\n\n  if(role==='L\u2019upgrade'&&base){const d=delta(p,base,[['inreach','la comunicazione satellitare inReach'],['maps','la cartografia completa'],['touchscreen','il touchscreen'],['multiband','il GNSS multibanda'],['barometric_altimeter','l\u2019altimetro barometrico']]);if(d.length)return `Rispetto a ${base.name} aggiunge ${d.join(' e ')}: sono le differenze concrete rispetto alla scelta principale.`;}\n  if(has('inreach'))return 'Aggiunge comunicazione satellitare inReach per messaggi e SOS anche lontano dalla copertura telefonica.';\n  if(has('maps')&&has('touchscreen'))return 'Punta su cartografia e touchscreen per una navigazione pi\u00f9 visuale sul campo.';\n  if(has('multiband'))return '\u00c8 pi\u00f9 orientato alla precisione di posizionamento in ambienti difficili, grazie al GNSS multibanda.';\n  return '\u00c8 un\u2019alternativa pi\u00f9 essenziale per chi cerca soprattutto navigazione GPS outdoor.';\n }\n return '\u00c8 una delle alternative pi\u00f9 coerenti con le priorit\u00e0 che hai indicato.';\n}\n\nfunction explanationHtml(p,role,plan){\n const group=classGroup(p);\n if(group==='watch'){\n  const sentence=watchExplanation(p,role,window.__gfExplainContext||null);\n  return `<div class=\"gf-plan gf-explanation gf-explanation-single\"><div class=\"gf-plan-line\">${esc(sentence)}<\/div><\/div>`;\n }\n if(group==='bike_computer'){\n  const sentence=edgeExplanation(p,role,window.__gfExplainContext||null);\n  return `<div class=\"gf-plan gf-explanation gf-explanation-single\"><div class=\"gf-plan-line\">${esc(sentence)}<\/div><\/div>`;\n }\n if(['radar','power_meter','handheld'].includes(group)){\n  const sentence=specialistExplanation(p,role,window.__gfExplainContext||null);\n  return `<div class=\"gf-plan gf-explanation gf-explanation-single\"><div class=\"gf-plan-line\">${esc(sentence)}<\/div><\/div>`;\n }\n return planHtml(plan);\n}\nfunction planHtml(plan){\n let h=`<div class=\"gf-plan\"><div class=\"gf-plan-label\">${esc(plan.base)}<\/div>`;\n if(plan.include&&plan.include.length)h+=`<div class=\"gf-plan-line\">${plan.include.map(esc).join(' \u00b7 ')}<\/div>`;\n if(plan.plus&&plan.plus.length)h+=`<div class=\"gf-plan-line gf-plan-plus\"><b>+<\/b> ${plan.plus.map(esc).join(' \u00b7 ')}<\/div>`;\n h+='<\/div>'; return h;\n}\nfunction showResults(){\n finished=true;\n const pool=universe(); const scored=pool.map(p=>({p,...scoreProduct(p)})).sort((a,b)=>b.score-a.score||a.p.price-b.p.price);\n let compatible=scored.filter(x=>x.hard); const strict=answers.budget_mode==='strict'&&Number(answers.budget)>0; let warning='';\n if(!compatible.length&&strict){\n   compatible=scored.filter(x=>{const oldB=answers.budget,oldM=answers.budget_mode;answers.budget=0;answers.budget_mode='soft';const z=scoreProduct(x.p);answers.budget=oldB;answers.budget_mode=oldM;return z.hard;});\n   if(compatible.length){compatible.sort((a,b)=>a.p.price-b.p.price);warning=`Con ${money(answers.budget)} non c\u2019\u00e8 oggi un modello che rispetta insieme budget e requisiti richiesti. Non sostituiamo una caratteristica richiesta con un prodotto meno adatto: il primo modello che rispetta i requisiti parte da ${money(compatible[0].p.price)}.`;}\n }\n if(!compatible.length)compatible=scored.slice(0,4);\n const pref=preferenceProfile();\n const isWatchRunning=answers.universe==='watch'&&answers.watch_goal==='running';\n const wantedTraining=Number(answers.training||0);\n \/\/ 1.7.22: the Watch training answer now has a semantic minimum tier.\n \/\/ 'Avanzato' starts at tier 3 (e.g. the 265 depth); 'Voglio il massimo' starts at tier 5.\n \/\/ training_level still describes feature richness, while training_tier describes depth in the running range.\n const wantedTrainingTier=isWatchRunning?(wantedTraining>=4?5:(wantedTraining>=3?3:0)):0;\n \/\/ WATCH 1.7.18: training level is a shortlist direction, not just another score bonus.\n \/\/ If the runner explicitly asks for Advanced\/Maximum training, the primary choice must\n \/\/ come from watches that actually reach that level. Lower-tier watches may still appear\n \/\/ as a deliberate value option, but they cannot occupy most of the final shortlist.\n let primaryPool=compatible;\n if(isWatchRunning&&wantedTraining>=3){\n   const atLevel=compatible.filter(x=>Number(val(x.p,'training_level')||0)>=wantedTraining&&Number(val(x.p,'training_tier')||0)>=wantedTrainingTier);\n   if(atLevel.length)primaryPool=atLevel;\n }\n \/\/ Value-aware primary choice: when the answers point low, a small score advantage\n \/\/ cannot justify a large jump in price. For an explicit advanced-training request,\n \/\/ however, value is evaluated inside the requested training tier.\n let best=primaryPool[0]||compatible[0];\n if(pref.low&&primaryPool.length){\n   const top=primaryPool[0].score;\n   const near=primaryPool.filter(x=>x.score>=top-3).sort((a,b)=>a.p.price-b.p.price||b.score-a.score);\n   if(near.length)best=near[0];\n }\n let cheaper=best?compatible.filter(x=>x.p.price<best.p.price&&x.score>=best.score-4).sort((a,b)=>a.p.price-b.p.price||b.score-a.score)[0]:null;\n if(isWatchRunning&&wantedTraining>=3&&best){\n   \/\/ One leaner watch is useful as the value comparison, but it must still be a real\n   \/\/ running watch with at least the essential training tier. Smart bands do not belong\n   \/\/ in this shortlist merely because they are inexpensive.\n   const valueCandidates=compatible.filter(x=>x.p.id!==best.p.id&&x.p.price<best.p.price&&String(x.p.family||'')==='forerunner'&&Number(val(x.p,'training_level')||0)>=2);\n   cheaper=valueCandidates.sort((a,b)=>b.score-a.score||a.p.price-b.p.price)[0]||null;\n }\n\n \/\/ \u201cUpgrade\u201d is a semantic role, not simply \u201ca dearer product with a similar score\u201d.\n \/\/ For Edge, the candidate must add at least one capability that matters for the\n \/\/ user's stated goal\/preferences, without stepping backwards on those same priorities.\n function edgeUpgradeMerit(candidate,base){\n   if(!candidate||!base||classGroup(candidate)!=='bike_computer'||classGroup(base)!=='bike_computer')return 0;\n   const goal=answers.edge_goal||'balanced';\n   const goalKeys={\n     navigation:['maps','touchscreen','display_inches'],\n     training:['training_status','training_load','power_guide','stamina','cycling_dynamics'],\n     mtb:['mtb_dynamics','maps'],\n     endurance:['solar','battery_hours'],\n     balanced:['maps','training_status','touchscreen','battery_hours']\n   };\n   const wanted=new Set(goalKeys[goal]||goalKeys.balanced);\n   for(const [id,a] of Object.entries(answers)){\n     const q=questionById(id,universe());\n     if(q&&q.feature&&(a===true||(q.level&&Number(a)>0)))wanted.add(q.feature);\n   }\n   let merit=0;\n   for(const k of wanted){\n     const a=val(base,k), b=val(candidate,k);\n     if(k==='battery_hours'||k==='display_inches'){\n       const av=Number(a||0),bv=Number(b||0);\n       if(av>0&&bv>0&&bv+0.001<av)return 0;\n       if(bv>av+0.01)merit+=k==='battery_hours'?2:1;\n       continue;\n     }\n     if(a===true&&b!==true)return 0;\n     if(a!==true&&b===true)merit+=2;\n   }\n   return merit;\n }\n\n function rallyUpgradeMerit(candidate,base){\n   if(!candidate||!base||classGroup(candidate)!=='power_meter'||classGroup(base)!=='power_meter')return 0;\n   let merit=0;\n   \/\/ Bilateral is an upgrade only when the user actually asked for that extra detail.\n   if(answers.dual===true&&val(candidate,'dual_sided')===true&&val(base,'dual_sided')!==true)merit+=4;\n   \/\/ Extra cleat compatibility is useful context, but never creates an upgrade by itself.\n   return merit;\n }\n\n let upgrade=null;\n if(best&&!strict){\n   const ceiling=Number(answers.budget||0); const maxJump=pref.low?Math.max(80,best.p.price*.22):Math.max(150,best.p.price*.40);\n   let candidates=compatible.filter(x=>x.p.price>best.p.price&&x.p.price-best.p.price<=maxJump&&x.score>=best.score-2);\n   if(classGroup(best.p)==='bike_computer'){\n     candidates=candidates.map(x=>({x,merit:edgeUpgradeMerit(x.p,best.p)})).filter(z=>z.merit>0)\n       .sort((a,b)=>b.merit-a.merit||b.x.score-a.x.score||(a.x.p.price-best.p.price)-(b.x.p.price-best.p.price));\n     upgrade=candidates.length?candidates[0].x:null;\n   }else if(classGroup(best.p)==='power_meter'){\n     candidates=candidates.map(x=>({x,merit:rallyUpgradeMerit(x.p,best.p)})).filter(z=>z.merit>0)\n       .sort((a,b)=>b.merit-a.merit||b.x.score-a.x.score||(a.x.p.price-best.p.price)-(b.x.p.price-best.p.price));\n     upgrade=candidates.length?candidates[0].x:null;\n   }else if(classGroup(best.p)==='watch'&&isWatchRunning&&wantedTraining>=3){\n     \/\/ For running, an upgrade must preserve the requested training tier and preferably\n     \/\/ deepen it. A soft budget may surface one genuinely stronger watch beyond the usual\n     \/\/ 30% cap; price alone never creates the role.\n     const bestTier=Number(val(best.p,'training_tier')||0);\n     const watchCandidates=compatible.filter(x=>x.p.id!==best.p.id&&x.p.price>best.p.price&&Number(val(x.p,'training_level')||0)>=wantedTraining&&Number(val(x.p,'training_tier')||0)>=wantedTrainingTier);\n     upgrade=watchCandidates.sort((a,b)=>{\n       const tierA=Number(val(a.p,'training_tier')||0),tierB=Number(val(b.p,'training_tier')||0);\n       const deeperA=tierA>bestTier?1:0,deeperB=tierB>bestTier?1:0;\n       if(deeperA!==deeperB)return deeperB-deeperA;\n       \/\/ Once both are genuine deeper options, relevance\/price decide; the highest tier\n       \/\/ must not automatically win just because it is the most expensive watch.\n       return b.score-a.score||(a.p.price-best.p.price)-(b.p.price-best.p.price);\n     })[0]||null;\n   }else{\n     upgrade=candidates.sort((a,b)=>b.score-a.score||(a.p.price-best.p.price)-(b.p.price-best.p.price))[0]||null;\n   }\n   if(ceiling&&answers.budget_mode==='soft'&&upgrade&&upgrade.p.price>ceiling*1.30&&!(classGroup(best.p)==='watch'&&isWatchRunning&&wantedTraining>=3))upgrade=null;\n }\n const picks=[];\n if(cheaper&&cheaper.p.id!==best.p.id)picks.push({role:'La scelta intelligente',x:cheaper});\n if(best)picks.push({role:'La scelta pi\u00f9 adatta',x:best});\n if(upgrade&&upgrade.p.id!==best.p.id&&!picks.some(z=>z.x.p.id===upgrade.p.id))picks.push({role:'L\u2019upgrade',x:upgrade});\n const alternativePool=(isWatchRunning&&wantedTraining>=3)\n   ? compatible.slice().sort((a,b)=>{\n       const am=(Number(val(a.p,'training_level')||0)>=wantedTraining&&Number(val(a.p,'training_tier')||0)>=wantedTrainingTier)?1:0;\n       const bm=(Number(val(b.p,'training_level')||0)>=wantedTraining&&Number(val(b.p,'training_tier')||0)>=wantedTrainingTier)?1:0;\n       if(am!==bm)return bm-am;\n       if(am&&bm){\n         const at=Number(val(a.p,'training_tier')||0),bt=Number(val(b.p,'training_tier')||0);\n         return b.score-a.score||bt-at||a.p.price-b.p.price;\n       }\n       const af=String(a.p.family||'')==='forerunner'?1:0,bf=String(b.p.family||'')==='forerunner'?1:0;\n       return bf-af||b.score-a.score||a.p.price-b.p.price;\n     })\n   : compatible.slice().sort((a,b)=>a.p.price-b.p.price);\n for(const x of alternativePool)if(picks.length<4&&!picks.some(z=>z.x.p.id===x.p.id))picks.push({role:'Alternativa',x});\n \/\/ Present like software plans: from the leaner solution to the richer one, so every\n \/\/ card can explain what it adds to the previous proposal.\n const finalPicks=chainFinalPicks(picks.slice(0,4));\n finalPicks.forEach((z,i)=>{\n   const group=classGroup(z.x.p);\n   z.plan=(['watch','bike_computer','radar','power_meter','handheld'].includes(group))?null:progressivePlan(z.x.p,i?finalPicks[i-1].x.p:null);\n });\n \/\/ Read-only context used by the Watch\/Edge explanation layers. Ranking remains independent.\n window.__gfExplainContext={picks:finalPicks};\n const pickIds=new Set(finalPicks.map(z=>z.x.p.id));\n $('#gfQuestionUI').style.display='none'; $('#gfStage').classList.add('is-final'); const grid=$('#gfGrid'); grid.classList.add('is-final');\n cards.forEach((el,id)=>{\n   el.classList.remove('is-best','is-soft');\n   if(!pickIds.has(id)){el.classList.add('is-out');el.classList.remove('is-final-card');const d=el.querySelector('.gf-card-detail');if(d)d.remove();return;}\n   el.classList.remove('is-out'); el.classList.add('is-final-card');\n   const item=finalPicks.find(z=>z.x.p.id===id); const {role,x,plan}=item; const p=x.p;\n   const finalImg=el.querySelector('.gf-img img');\n   if(finalImg&&p.image_large&&finalImg.src!==p.image_large){ finalImg.src=p.image_large; finalImg.loading='eager'; finalImg.fetchPriority='high'; }\n   const lab=new URL(p.url,location.origin); lab.searchParams.set('mmr_lab_open','1');lab.searchParams.set('mmr_lab_source','garmin_finder');lab.searchParams.set('mmr_lab_score',String(Math.max(0,Math.round(x.score))));\n   const d=document.createElement('div'); d.className='gf-card-detail';\n   d.innerHTML=`<div class=\"gf-card-detail-role\">${esc(role)}<\/div><div class=\"gf-card-detail-name\">${esc(p.name)}<\/div><div class=\"gf-card-detail-price\">${money(p.price)}<\/div>${explanationHtml(p,role,plan)}<div class=\"gf-card-detail-actions\"><a class=\"gf-card-detail-lab\" href=\"${esc(lab.toString())}\">Esplora nel LAB<\/a><a class=\"gf-card-detail-pdp\" href=\"${esc(p.url)}\">Vai al prodotto<\/a><\/div>`;\n   const old=el.querySelector('.gf-card-detail'); if(old)old.remove(); el.appendChild(d); d.querySelectorAll('a').forEach(a=>a.addEventListener('click',()=>{MMR_GF_ANALYTICS.send('product_click',{product_id:p.id,product_name:p.name,product_role:role,destination:a.classList.contains('gf-card-detail-lab')?'lab':'pdp',price:p.price});try{localStorage.setItem('mmr_finder_attr',JSON.stringify({finder_type:'garmin',session_id:MMR_GF_ANALYTICS.session,product_id:p.id,product_role:role,ts:Date.now()}));document.cookie='mmr_finder_attr='+encodeURIComponent(localStorage.getItem('mmr_finder_attr'))+'; path=\/; max-age=604800; SameSite=Lax';}catch(e){}}));\n });\n const final=$('#gfFinal'); final.classList.add('is-on'); const intro=`${pool.length} prodotti acquistabili confrontati`;\n const debugOn=new URLSearchParams(location.search).get('mmr_garmin_debug')==='1';\n let debugHtml='';\n if(debugOn&&answers.universe==='watch'){\n   const rows=scored.slice(0,18).map((z,i)=>{\n     const tr=Number(val(z.p,'training_level')||0), nav=Number(val(z.p,'navigation_level')||0);\n     const flags=[];\n     if(!z.hard)flags.push('ESCLUSO');\n     if(Number(answers.budget||0)>0&&z.p.price>Number(answers.budget||0))flags.push('over budget');\n     if(finalPicks.some(q=>q.x.p.id===z.p.id))flags.push('FINAL');\n     return `<tr><td>${i+1}<\/td><td>${esc(z.p.name)}<\/td><td>${esc(z.p.family||'')}<\/td><td>${tr}<\/td><td>${nav}<\/td><td>${money(z.p.price)}<\/td><td>${Number(z.score).toFixed(1)}<\/td><td>${esc(flags.join(' \u00b7 ')||'ok')}<\/td><\/tr>`;\n   }).join('');\n   debugHtml=`<details class=\"gf-debug\" open><summary>Diagnostica Watch \u2014 candidati prima della shortlist<\/summary><div class=\"gf-debug-scroll\"><table><thead><tr><th>#<\/th><th>Prodotto<\/th><th>Famiglia<\/th><th>Training<\/th><th>Nav<\/th><th>Prezzo<\/th><th>Score<\/th><th>Stato<\/th><\/tr><\/thead><tbody>${rows}<\/tbody><\/table><\/div><div class=\"gf-debug-answers\">Risposte: ${esc(JSON.stringify(answers))}<\/div><\/details>`;\n   console.group('MMR Garmin Finder \u2014 Watch diagnostics');\n   console.table(scored.slice(0,18).map(z=>({name:z.p.name,family:z.p.family,training:Number(val(z.p,'training_level')||0),tier:Number(val(z.p,'training_tier')||0),navigation:Number(val(z.p,'navigation_level')||0),price:z.p.price,score:Number(z.score.toFixed(1)),hard:z.hard,final:finalPicks.some(q=>q.x.p.id===z.p.id)})));\n   console.log('answers',answers); console.groupEnd();\n }\n MMR_GF_ANALYTICS.once('complete','finder_complete',{answers:answers,warning:warning||'',products:finalPicks.map(z=>({id:z.x.p.id,name:z.x.p.name,role:z.role,price:z.x.p.price}))});\n final.innerHTML=`<div class=\"gf-final-head\"><div><strong>La selezione finale.<\/strong><span>${esc(intro)}<\/span><\/div><button class=\"gf-final-restart\" id=\"gfRestartInline\" type=\"button\">Ricomincia<\/button><\/div>${warning?`<div class=\"gf-final-warning\">${esc(warning)}<\/div>`:''}${debugHtml}`;\n $('#gfRestartInline').onclick=restart;\n}\nfunction restart(){answers={};history=[];current=null;selected=null;finished=false;$('#gfQuestionUI').style.display='block';$('#gfFinal').classList.remove('is-on');$('#gfFinal').innerHTML='';$('#gfStage').classList.remove('is-final');$('#gfGrid').classList.remove('is-final');cards.forEach(el=>{el.style.opacity='';el.classList.remove('is-final-card');const d=el.querySelector('.gf-card-detail');if(d)d.remove();});renderQuestion();}\n$('#gfNext').onclick=goNext;$('#gfBack').onclick=goBack;\nwindow.addEventListener('resize',()=>{if(!finished)updateGrid();},{passive:true});\nfunction focusFinderViewport(){\n  if(!document.body.classList.contains('page-garmin-finder')) return;\n  const root=document.querySelector('.mmr-garmin-finder-embed');\n  if(!root) return;\n  const reduce=window.matchMedia&&window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n  requestAnimationFrame(()=>requestAnimationFrame(()=>{\n    const top=root.getBoundingClientRect().top+window.scrollY;\n    if(Math.abs(window.scrollY-top)>2) window.scrollTo({top:Math.max(0,top),behavior:reduce?'auto':'smooth'});\n  }));\n}\nbuildGrid();renderQuestion();\nif(document.readyState==='loading') document.addEventListener('DOMContentLoaded',()=>setTimeout(focusFinderViewport,80),{once:true});\nelse setTimeout(focusFinderViewport,80);\n})();\n<\/script>","protected":false},"excerpt":{"rendered":"","protected":false},"author":3102,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"inline_featured_image":[],"footnotes":""},"class_list":["post-484025","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Garmin Finder - MioMioRun<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.miomiorun.com\/es\/garmin-finder-2\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Garmin Finder - MioMioRun\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.miomiorun.com\/es\/garmin-finder-2\/\" \/>\n<meta property=\"og:site_name\" content=\"MioMioRun\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/miomiorun\/\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.miomiorun.com\/es\/garmin-finder-2\/\",\"url\":\"https:\/\/www.miomiorun.com\/es\/garmin-finder-2\/\",\"name\":\"Garmin Finder - MioMioRun\",\"isPartOf\":{\"@id\":\"https:\/\/www.miomiorun.com\/es\/#website\"},\"datePublished\":\"2026-09-17T17:13:54+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.miomiorun.com\/es\/garmin-finder-2\/#breadcrumb\"},\"inLanguage\":\"es-ES\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.miomiorun.com\/es\/garmin-finder-2\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.miomiorun.com\/es\/garmin-finder-2\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.miomiorun.com\/es\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Garmin Finder\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.miomiorun.com\/es\/#website\",\"url\":\"https:\/\/www.miomiorun.com\/es\/\",\"name\":\"MioMioRun\",\"description\":\"Tienda 100% running y trail\",\"publisher\":{\"@id\":\"https:\/\/www.miomiorun.com\/es\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.miomiorun.com\/es\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es-ES\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.miomiorun.com\/es\/#organization\",\"name\":\"MioMio Run\",\"url\":\"https:\/\/www.miomiorun.com\/es\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es-ES\",\"@id\":\"https:\/\/www.miomiorun.com\/es\/#\/schema\/logo\/image\/\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"MioMio Run\"},\"image\":{\"@id\":\"https:\/\/www.miomiorun.com\/es\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/miomiorun\/\",\"https:\/\/www.instagram.com\/miomiorun\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Garmin Finder - MioMioRun","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.miomiorun.com\/es\/garmin-finder-2\/","og_locale":"es_ES","og_type":"article","og_title":"Garmin Finder - MioMioRun","og_url":"https:\/\/www.miomiorun.com\/es\/garmin-finder-2\/","og_site_name":"MioMioRun","article_publisher":"https:\/\/www.facebook.com\/miomiorun\/","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.miomiorun.com\/es\/garmin-finder-2\/","url":"https:\/\/www.miomiorun.com\/es\/garmin-finder-2\/","name":"Garmin Finder - MioMioRun","isPartOf":{"@id":"https:\/\/www.miomiorun.com\/es\/#website"},"datePublished":"2026-09-17T17:13:54+00:00","breadcrumb":{"@id":"https:\/\/www.miomiorun.com\/es\/garmin-finder-2\/#breadcrumb"},"inLanguage":"es-ES","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.miomiorun.com\/es\/garmin-finder-2\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.miomiorun.com\/es\/garmin-finder-2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.miomiorun.com\/es\/"},{"@type":"ListItem","position":2,"name":"Garmin Finder"}]},{"@type":"WebSite","@id":"https:\/\/www.miomiorun.com\/es\/#website","url":"https:\/\/www.miomiorun.com\/es\/","name":"MioMioRun","description":"Tienda 100% running y trail","publisher":{"@id":"https:\/\/www.miomiorun.com\/es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.miomiorun.com\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es-ES"},{"@type":"Organization","@id":"https:\/\/www.miomiorun.com\/es\/#organization","name":"MioMio Run","url":"https:\/\/www.miomiorun.com\/es\/","logo":{"@type":"ImageObject","inLanguage":"es-ES","@id":"https:\/\/www.miomiorun.com\/es\/#\/schema\/logo\/image\/","url":"","contentUrl":"","caption":"MioMio Run"},"image":{"@id":"https:\/\/www.miomiorun.com\/es\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/miomiorun\/","https:\/\/www.instagram.com\/miomiorun\/"]}]}},"_links":{"self":[{"href":"https:\/\/www.miomiorun.com\/es\/wp-json\/wp\/v2\/pages\/484025","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.miomiorun.com\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.miomiorun.com\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.miomiorun.com\/es\/wp-json\/wp\/v2\/users\/3102"}],"replies":[{"embeddable":true,"href":"https:\/\/www.miomiorun.com\/es\/wp-json\/wp\/v2\/comments?post=484025"}],"version-history":[{"count":0,"href":"https:\/\/www.miomiorun.com\/es\/wp-json\/wp\/v2\/pages\/484025\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.miomiorun.com\/es\/wp-json\/wp\/v2\/media?parent=484025"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}