MARGINE/LABCALCOLA →

STRADA · GRAVEL · MTB — SECONDI PER EURO

Ogni componente ha un prezzo in secondi.

Componenti di bici disposti in griglia su fondo grigio: copertone, catena, sella, reggisella, cambio, ceraCOPERTONI −3'24" · 35 €CERA −1'06" · 30 €REGGISELLA −0'04"SELLA −0'05"PULEGGE −0'46"
FIG. 01 — Cinque componenti e un flacone di cera sul banco, un giro gravel da 62 km. Verde = conviene, bianco = briciole.

Stesse gambe, stessi watt: i secondi li trovi nella bici. Dici quanto vuoi spendere in più e MARGINE ti dice cosa comprare prima, calcolato sul giro che fai davvero.

Trova i tuoi secondi

GRATIS · SENZA REGISTRAZIONE

TAB. 01 — GIRO DI ESEMPIO, DUE MODI DI SPENDERE

OPZIONECOSTOGUADAGNO€ / S
Piano MARGINE290 €−7'55"0,61
Ruote in carbonio top1.890 €−0'46"41

Con il piano un secondo costa 61 centesimi. Con le ruote top, 41 €.

Come funziona

INPUTLa tua bici, il tuo giroCarica il file FIT o GPX: lo leggiamo nel browser e non lascia il telefono. Niente file? Descrivi il giro: distanza, dislivello, profilo e fondo.
VINCOLOBudget o obiettivoQuanto vuoi spendere in più, oppure quanti secondi vuoi limare.
OUTPUTLa scala dei guadagniGli upgrade in fila per secondi per euro, ognuno con forbice e fonte.
Gabbia del cambio con pulegge maggiorate in alluminio
FIG. 02 — Pulegge maggiorate. Il produttore dichiara fino a 3 W; un test indipendente ne ha misurati 1,76. Sul giro di esempio: tra 0 e −1'33".

I marginal gains, contati senza sconti.

Movimento ceramico, viteria in titanio, pulegge, telaio: ci sono tutti, ognuno con il suo prezzo in secondi. Spesso il guadagno è piccolo, e te lo diciamo.

Protocollo

  • Ogni numero ha forbice e fonte: misurato, stimato o dichiarato.
  • Nessun marchio paga per comparire: l’ordine lo fanno i secondi per euro.
  • Il tuo file non lascia il telefono: lo leggiamo nel browser e non lo salviamo.

RISULTATO DI ESEMPIO, CIRCA

−8'00"

E sulla tua bici?

Trova i tuoi secondi
MARGINE/LABCALCOLATORE

LE TUE INFO · DUE MINUTI

Due minuti e ti diciamo dove mettere i soldi.

1La tua bici

Pesala con una bilancia pesavaligie, con le borracce e le borse che porti di solito: anche a occhio va bene.

Le tue ruote

Il peso è facoltativo: lo trovi sulla scheda del produttore, ed è quello delle sole ruote, senza gomme, cassetta e dischi. Se non lo inserisci, per l’alluminio contiamo ruote di serie da circa 1,9 kg; per il carbonio solo la differenza di profilo.

Cosa hai già montatoBICI DI SERIE

Spunta quello che hai già, sulla bici o addosso: lo togliamo dalla scala. Se non spunti niente, partiamo da una bici di serie.

2Il tuo giro

Da Strava: apri l’uscita dal sito, non dall’app, menu ··· ed “Esporta originale”. Da Garmin Connect, sempre dal sito: icona a ingranaggio ed “Esporta originale” (arriva uno .zip, va bene così). Da Wahoo: nell’app apri l’uscita dalla cronologia e condividi il file .fit, oppure copialo dal ciclocomputer via USB.

Il file non lascia il tuo telefono o computer: lo leggiamo nel browser, usiamo solo tracciato, tempo e potenza, e non lo salviamo da nessuna parte.

Profilo

Il file dice dove sei passato, non su che fondo: questo diccelo tu.

3Tu

Il tuo peso senza bici: per casco, scarpe e abbigliamento aggiungiamo noi 1,5 kg.

Velocità media oppure potenza media: se conosci la potenza che terrai in gara, usala.

Come stai in sella

Per l’aria conta più di qualunque componente: scegli quella che tieni per gran parte del giro.

I miei numeri (facoltativo)

Se li conosci da un test, inserisci CdA e Crr: sostituiscono le nostre stime per posizione e fondo.

4Cosa cambieresti comunque

Spunta quello che è consumato e cambieresti comunque: per quei componenti contiamo solo quanto spendi in più rispetto a un ricambio normale.

GRATIS · SENZA REGISTRAZIONE

var SRCDATA={copertoni:{src:1,maint:"Le gomme più scorrevoli hanno battistrada e carcassa più sottili. Nei test di foratura di Bicycle Rolling Resistance prendono 35–50 punti, contro 70–95 delle gomme robuste, e in genere durano meno km."},tubeless:{src:1,maint:"Il lattice va rabboccato ogni 2–6 mesi, più spesso col caldo, e conviene smontare e pulire il copertone ogni 12–18 mesi.",single:!0},catena:{src:1,maint:"La cera va rifatta ogni 300 km circa su strada asciutta (i produttori indicano da 300 a 1000 km), ogni 6–8 ore fuoristrada e subito dopo la pioggia. La prima volta la catena va sgrassata a fondo."},casco:{src:1},abbigliamento:{src:1},body:{src:1},body_top:{src:1,single:!0},copriscarpe:{src:1},calze:{src:1},borraccia:{src:1},pulegge:{src:1,maint:"I sistemi maggiorati perdono meno anche con catena sporca (circa +0,7 W contro +1,3 W delle pulegge di serie), ma il vantaggio resta solo se catena e cuscinetti sono tenuti puliti."},ruote:{src:1},ruote_top:{src:1},manubrio:{src:1},cockpit:{src:1},portaborraccia:{src:1},nastro:{src:1},manopole:{src:1},dischi:{src:1,maint:"Vanno sostituiti sotto lo spessore minimo indicato dal produttore, di solito 1,5–1,55 mm: un disco leggero da 1,8 mm ha quindi circa 0,3 mm di margine di usura."},perni:{src:1},sella:{src:1},reggisella:{src:1},cassetta:{src:1},viteria:{src:1,maint:"Le viti in titanio vanno montate con pasta antigrippaggio e alla coppia indicata."},pedivelle:{src:1},pedali:{src:1},bb:{src:1,maint:"Con piste in acciaio, secondo un'analisi indipendente le sfere ceramiche segnano le piste dopo circa 600 km e poi l'attrito sale. Un produttore consiglia una manutenzione una o due volte l'anno."},mozzi:{src:1,maint:"Con piste in acciaio, secondo un’analisi indipendente le sfere ceramiche segnano le piste dopo circa 600 km e poi l’attrito supera quello dei buoni cuscinetti in acciaio.",single:!0},forcella:{src:1,maint:"I produttori indicano una manutenzione leggera ogni 30–50 ore e una revisione completa ogni 100–200 ore, o almeno una volta l’anno; gli intervalli cambiano da marca a marca."},ammortizzatore:{src:1,maint:"Intervalli simili alla forcella: manutenzione leggera ogni 30–50 ore e revisione completa ogni 100–200 ore, o almeno una volta l’anno."},gruppo:{src:1},telaio:{src:1}},MG=function(){"use strict";var e=1.2;function a(a){e=a&&a.rho?a.rho:1.2}function t(e,a){var t=Math.PI/180,i=(a.lat-e.lat)*t,o=(a.lon-e.lon)*t,n=Math.sin(i/2)*Math.sin(i/2)+Math.cos(e.lat*t)*Math.cos(a.lat*t)*Math.sin(o/2)*Math.sin(o/2);return 12742e3*Math.asin(Math.sqrt(n))}function i(e){var a,t,i=[];for(a=0;a0&&r<120?(n.d-o.d)/r:0)}var l=e.some(function(e){return void 0!==e.p});function c(a,t){if(l){for(var i=0,o=0,n=a;n<=t;n++)void 0!==e[n].p&&(i+=e[n].p,o++);return o>0&&i/o>50}var r=e[t].d-e[a].d;return r>0&&(e[t].ele-e[a].ele)/r>-.01}var s=0,u=i[0],d=i[0],p=0,m=0;for(t=1;td&&(d=g,m=t),d-g>.5||t===i.length-1?(d-u>=1&&u>=0&&c(p,m)&&(s+=(d*d-u*u)/2),u=g,d=g,p=t,m=t):gs?d=m:u=m}return Math.min(u,r)}function n(e,a,t,i,n,r){for(var l=0,c=0;c=0?t.rCap:1/0,o=t.sterA||0;return(1-o)*Math.min(e,Math.max(0,i-a))+o*e}function g(e){var a=function(e){return Math.max(0,e.cost)/e.s},t={};e.forEach(function(e){t[e.id]=e});var i=function(e){return e.base&&t[e.base]?Math.max(a(e),a(t[e.base])):a(e)};return e.sort(function(e,a){return i(e)-i(a)||(e.base===a.id?1:a.base===e.id?-1:0)})}var f={fermo:"Peso fermo",cerchio:"Sul cerchio",mozzo:"Vicino al mozzo",gomma:"Gomme",attrito:"Attrito",aria:"Aria"};function v(e,a){var t=(h(e.gOld)||0)-(h(e.gNew)||0),i=t/1e3*a.perKg,o=i,n=i,r=i,l=h(e.rf)>=0?h(e.rf):"cerchio"===e.kind||"gomma"===e.kind?1:0;if(l>0&&a.accJ&&a.t){var c=l*t/1e3*a.accJ/a.t*a.perW;n+=c/2,r+=c,t<0&&(o=i+c,r=i)}if("gomma"===e.kind&&h(e.wOld)>0&&h(e.wNew)>0){var s=1e3*((h(e.wOld)-h(e.wNew))/(416.925*8.06))*a.perCrr;o+=.75*s,n+=s,r+=1.25*s}if("attrito"===e.kind&&h(e.w)&&h(e.wAtP)>0){var u=h(e.w)*a.P/h(e.wAtP)*a.perW;o+=u,n+=u,r+=u}if("aria"===e.kind){var d=1e3*(h(e.cda)?h(e.cda):h(e.w)&&h(e.wAtV)>0?2*h(e.w)/(1.2*Math.pow(h(e.wAtV)/3.6,3)):0)*a.perCdA,p=a.kA||[1,1,1];o+=d*p[0],n+=d*p[1],r+=d*p[2]}var m=Math.round(h(e.price)||0),g=Math.round(h(e.anyway)||0);if(o>r){var v=o;o=r,r=v}return{id:e.id,name:e.name||"Il tuo componente",art:e.name||"il tuo componente",conf:"tuo dato",custom:!0,kind:e.kind,kindName:f[e.kind],why:(e.part?e.part+" · ":"")+f[e.kind]+" · dati inseriti da te"+(t?" · "+(t>0?t+" g in meno":-t+" g in più"):"")+".",price:m,anyway:g,cost:Math.max(0,m-g),s:Math.round(n),lo:Math.round(o),hi:Math.round(r)}}function h(e){var a=parseFloat(String(null==e?"":e).replace(",","."));return isNaN(a)?NaN:a}return{parseFIT:function(e){var a=new DataView(e),t=a.getUint8(0);if(t<12||".FIT"!==String.fromCharCode(a.getUint8(8),a.getUint8(9),a.getUint8(10),a.getUint8(11)))throw new Error("Non sembra un file FIT.");for(var i=Math.min(t+a.getUint32(4,!0),e.byteLength),o=t,n={},r=[],l=null,c={0:1,1:1,2:1,3:2,4:2,5:4,6:4,7:1,8:4,9:8,10:1,11:2,12:4,13:1,14:8,15:8,16:8};o>5&3];if(!d)throw new Error("FIT non valido.");if(null!==l){var p=(-32&l)+u;u<(31&l)&&(p+=32),l=p}var m=I(d,o);o+=d.len,20===d.gmn&&(void 0===m.ts&&(m.ts=l),r.push(m))}else{var g=15&s;if(64&s){o++;var f=0===a.getUint8(o++),v=a.getUint16(o,f);o+=2;for(var h=a.getUint8(o++),b=[],w=0,y=0;y4)){var n=function(e,t,i,o){var n=31&i;return 1===t?1===n?a.getInt8(e):a.getUint8(e):2===t?3===n?a.getInt16(e,o):a.getUint16(e,o):4===t?5===n?a.getInt32(e,o):8===n?a.getFloat32(e,o):a.getUint32(e,o):null}(t+o.o,o.s,o.b,e.le);if(null!==n)if(!(1===o.s&&255===n||2===o.s&&(65535===n||32767===n)||4===o.s&&(4294967295===n||2147483647===n||-2147483648===n)))switch(o.n){case 253:i.ts=n;break;case 0:i.lat=180*n/2147483648;break;case 1:i.lon=180*n/2147483648;break;case 2:void 0===i.ele&&(i.ele=n/5-500);break;case 78:i.ele=n/5-500;break;case 5:i.d=n/100;break;case 7:i.p=n}}}),i)}return r.map(function(e){return{t:void 0!==e.ts?e.ts:null,lat:e.lat,lon:e.lon,ele:e.ele,d:e.d,p:e.p}})},parseGPX:function(e){var a=(new DOMParser).parseFromString(e,"application/xml");if(a.getElementsByTagName("parsererror").length)throw new Error("Non sembra un file GPX.");var t=a.getElementsByTagName("trkpt");t.length||(t=a.getElementsByTagName("rtept"));for(var i=[],o=0;o0&&(a+=t(e[o-1],e[o])),e[o].d=a);for(var n=0,r=0,l=0,c=null!==e[0].t&&null!==e[e.length-1].t,s=1;s0&&u<60&&d/u>1&&(n+=u,void 0!==e[s].p&&(r+=e[s].p*u,l+=u))}for(var p=e[e.length-1].d-e[0].d,m=Math.max(2,Math.floor(p/50)),g=[],f=0,v=0;v<=m;v++){for(var h=e[0].d+50*v;fb.d?(h-b.d)/(w.d-b.d):0;g.push(b.ele+Math.max(0,Math.min(1,y))*(w.ele-b.ele))}for(var M=g.map(function(e,a){for(var t=Math.max(0,a-2),i=Math.min(g.length-1,a+2),o=0,n=t;n<=i;n++)o+=g[n];return o/(i-t+1)}),x=[],k=0,C=1;C0&&(k+=I),x.push(Math.max(-.25,Math.min(.25,I/50)))}var S=g.reduce(function(e,a){return e+a},0)/g.length;return{km:p/1e3,dplus:k,grades:x,movingS:n>600?n:null,avgP:l>600?r/l:null,accJ:c?i(e):null,ele:S,rho:1.225*Math.exp(-Math.max(0,S)/10400)}},describedRoute:function(e,a,t,i){var o=1e3*e,n=o*t,r=o*i,l=r/1e3*10,c=Math.max(0,a-l),s=n>0?c/(n/2):0,u=[];function d(e,a){for(var t=Math.round(a/50),i=0;ie?l=u:c=u}return(l+c)/2}(l,i,o,r,s,c),d=n(u,i,o,r,s,c);return{P:u,t:d,accJ:t.accJ||null,rho:e,perW:d-n(u+1,i,o,r,s,c),perKg:d-n(u,i-1,o,r,s,c),perCdA:(d-n(u,i,o-.002,r,s,c))/2,perCrr:2*(d-n(u,i,o,r-5e-4,s,c))}},buildItems:function(e,a){var t=e.type,i=[],o={};(e.custom||[]).forEach(function(e){e.replaces&&(o[e.replaces]=1)}),r.forEach(function(n){if(!(n.types.indexOf(t)<0||o[n.id])&&("disco"!==n.needs||e.disco)&&("full"!==n.needs||!1!==e.mtbFull)&&("tubeless"!==n.id||"tubeless"!==e.camere)&&("catena"!==n.id||!e.cerata)&&("ruote"!==n.id&&"ruote"!==n.base||"carbonio"!==e.ruote||"alto"!==a.rprof&&("m"!==t||a.rw))&&(!e.owned||!e.owned[n.id])){var l="tubeless"===n.id&&"tpu"===e.camere?.3:1,c=p(n,t,a,0,l),s=p(n,t,a,1,l),u=p(n,t,a,2,l),g="tubeless"===n.id?function(e,a,t){for(var i=r.filter(function(e){return"copertoni"===e.id})[0],o=r.filter(function(e){return"tubeless"===e.id})[0],n=d(i.rt[a.tyre||"normali"],e),l=d(o.r,e),c=a.rCap>=0?a.rCap:1/0,s=[],u=0;u<3;u++){var p=d(o.gm,e);s.push(m(l[u]*t,Math.min(n[u],c),a)*a.perCrr+(p?p[u]/1e3*a.perKg:0))}var g=s.map(function(e){return Math.max(0,Math.round(e))});return{lo:g[0],s:g[1],hi:g[2],dlo:Math.min.apply(null,g),dhi:Math.max.apply(null,g)}}(t,a,l):null,f=e.prices&&e.prices[n.id]>=0?Math.round(e.prices[n.id]):n.price[t],v=n.anywayKey&&e.anyway[n.anywayKey]?n.anyway[t]:0,h=n.confRt&&n.confRt[t]&&n.confRt[t][a.tyre||"normali"]||n.conf;"ruote"===n.id&&("m"===t||"carbonio"===e.ruote&&"basso"===(a.rprof||"basso"))&&(h="stimato"),i.push({id:n.id,srcOf:n.srcOf,name:n.name,art:n.art,conf:h,why:"object"==typeof n.why?n.why[t]:n.why,alt:n.alt,maint:n.maint,src:n.src,single:n.single,price:f,anyway:v,cost:Math.max(0,f-v),s:Math.max(0,Math.round(s)),lo:Math.max(0,Math.round(c)),hi:Math.max(0,Math.round(u)),joint:g})}}),i=function(e,a,t,i){var o=e.slice();return e.forEach(function(e){var t=r.filter(function(a){return a.id===e.id})[0];if(t&&t.base){var n=o.indexOf(e),l=o.filter(function(e){return e.id===t.base})[0],c=r.filter(function(e){return e.id===t.base})[0],s=a.prices&&a.prices[t.base]>=0?Math.round(a.prices[t.base]):c.price[i];if(l&&l.s>0){var u=e.price-l.price;if(e.s<=0||u<=0)return void o.splice(n,1);o[n]=Object.assign({},e,{cost:u,base:t.base,up:t.up,total:l.s+e.s})}else if(l){var d=l.s+e.s;if(d<=0)return void o.splice(n,1);o[n]=Object.assign({},e,{s:d,lo:Math.max(0,l.lo+e.lo),hi:Math.max(0,l.hi+e.hi),total:d})}else a.owned&&a.owned[t.base]&&e.s>0?o[n]=t.addon?Object.assign({},e,{name:t.addon,price:Math.max(0,e.price-s),cost:Math.max(0,e.price-s),total:e.s}):Object.assign({},e,{total:e.s}):o.splice(n,1)}}),o}(i,e,0,t),(e.custom||[]).forEach(function(e){var t=v(e,a);t&&i.push(t)});var n=s(a,t),c=null===n?0:n-d(l.tw,t)[1],f="m"===t?0:u(a,t,{basso:l.cp.basso,medio:l.cp.medio,alto:l.cp.alto},[2,4,6])[1],h=Math.round(c/1e3*a.perKg+f*a.perCdA*(a.kA?a.kA[1]:1));return{items:g(i.filter(function(e){return e.s>0})),losers:i.filter(function(e){return e.s<=0}),all:i,top:{cost:l.price,s:h}}},customItem:v,timeAtPower:function(e,t,i,o,r,l){return a(e),n(r,t,i,o,e.grades,l)},verify:function(e,t,i,o,r,l){var c=e.concat(t),s=c.every(function(e){return e.avgP&&e.movingS}),u=s?c.reduce(function(e,a){return e+a.avgP},0)/c.length:null,d=c[0],p=[];function m(e){return e.movingS?((Math.abs(e.km-d.km)/d.km>.05||Math.abs(e.dplus-d.dplus)>Math.max(60,.2*d.dplus))&&p.push("percorso"),a(e),s?e.movingS*n(u,i,o,r,e.grades,l)/n(e.avgP,i,o,r,e.grades,l):e.movingS):null}var g=e.map(m).filter(function(e){return e}),f=t.map(m).filter(function(e){return e});function v(e){var a=e.reduce(function(e,a){return e+a},0)/e.length,t=e.length>1?Math.sqrt(e.reduce(function(e,t){return e+(t-a)*(t-a)},0)/(e.length-1)):null;return{mu:a,sd:t,n:e.length}}if(!g.length||!f.length)return null;var h=v(g),b=v(f),w=null!==h.sd&&null!==b.sd?Math.sqrt(h.sd*h.sd/h.n+b.sd*b.sd/b.n):null,y=null;if(w){var M=h.sd*h.sd/h.n,x=b.sd*b.sd/b.n,k=(M+x)*(M+x)/(M*M/(h.n-1)+x*x/(b.n-1)),C=[[1,12.71],[2,4.3],[3,3.18],[4,2.78],[5,2.57],[6,2.45],[7,2.36],[8,2.31],[9,2.26],[10,2.23],[12,2.18],[15,2.13],[20,2.09],[30,2.04],[60,2]];y=1.96;for(var I=C.length-1;I>=0;I--)if(k>=C[I][0]){y=I===C.length-1&&k>60?1.98:C[I][1];break}k<1&&(y=12.71)}else 0===w&&(y=2);return{gain:h.mu-b.mu,se:w,tq:y,before:h,after:b,withPower:s,Pref:u,routeWarn:p.length>0,ref:d}},planBudget:function(e,a){for(var t=0,i=0;i0&&c.length){var s=Math.floor(l),u=[new Array(s+1).fill(0)];c.forEach(function(e,a){for(var t=u[a],i=t.slice(),o=e.cost;o<=s;o++)t[o-e.cost]+e.s>i[o]&&(i[o]=t[o-e.cost]+e.s);u.push(i)});for(var d=u[c.length],p=d.indexOf(d[s]),m=c.length;m>0;m--)u[m][p]!==u[m-1][p]&&(r.push(c[m-1]),p-=c[m-1].cost);r.reverse()}return{prefix:o,next:e[i]||null,fill:r,left:l}},planGoal:function(e,a){var t={};e.forEach(function(e){e.base&&(t[e.base]=e)});var i=e.filter(function(e){return!e.base}).map(function(e){return(t[e.id]?[[e],[e,t[e.id]]]:[[e]]).map(function(e){return{it:e,s:e.reduce(function(e,a){return e+a.s},0),c:e.reduce(function(e,a){return e+a.cost},0)}})}),o=i.length,n=e.reduce(function(e,a){return e+a.s},0),r=[new Array(n+1).fill(1/0)],l=[];r[0][0]=0;for(var c=0;c=0?v:m,w=[],y=o;y>0;y--){var M=l[y-1][b];M>=0&&(w=w.concat(i[y-1][M].it),b-=i[y-1][M].s)}return w.sort(function(a,t){return e.indexOf(a)-e.indexOf(t)})},sortLadder:g,CAT:r,TYPE_NAME:{s:"strada",g:"gravel",m:"MTB"},KIND:f}}();!function(){"use strict";var e=document.getElementById("mgc");if(e&&!e.dataset.ready){e.dataset.ready="1";var a=function(e){return document.getElementById(e)},t=function(e){var a=parseFloat(String(e).replace(",","."));return isNaN(a)?NaN:a},i=function(e){return String(e).replace(/[&<>"]/g,function(e){return{"&":"&","<":"<",">":">",'"':"""}[e]})},o=function(e){return String(Math.round(e)).replace(/\B(?=(\d{3})+(?!\d))/g,".")+" €"},n=function(e){return e=Math.round(e),Math.floor(e/60)+"'"+String(e%60).padStart(2,"0")+'"'},r=function(e){return"−"+n(e)},l=function(e,a){var t=e/a;return t<10?t.toFixed(2).replace(".",",")+" €":o(t)},c=function(e){return e>=60?10*Math.round(e/10):5*Math.round(e/5)},s=function(e){var a=Math.round(e/60);return Math.floor(a/60)+" h "+String(a%60).padStart(2,"0")+"’"},u={s:{bike:"8,6",km:"80",dplus:"900",prof:"ondulato",ster:0,fondo:"compatto",vel:"28"},g:{bike:"10,4",km:"62",dplus:"780",prof:"ondulato",ster:70,fondo:"compatto",vel:"23,5"},m:{bike:"11,9",km:"35",dplus:"900",prof:"montagna",ster:90,fondo:"smosso",vel:"14"}},d=[{id:"pianura",name:"Pianura",q:[10,20,70],pts:"0,21 22,21 30,19 38,21 70,21 78,20 86,21 120,21"},{id:"ondulato",name:"Ondulato",q:[20,60,20],pts:"0,21 10,17 18,21 26,15 34,21 42,16 50,21 60,7 70,21 80,16 88,21 96,17 104,21 120,21"},{id:"collinare",name:"Collinare",q:[40,40,20],pts:"0,23 16,23 36,8 52,23 62,19 70,23 90,6 106,23 120,23"},{id:"montagna",name:"Montagna",q:[70,20,10],pts:"0,25 8,25 36,3 58,25 66,22 74,25 100,4 120,25"}],p={s:{alta:.4,media:.36,bassa:.33},g:{alta:.44,media:.4,bassa:.36},m:{alta:.55,media:.5,bassa:.46}},m={compatto:.01,smosso:.016,tecnico:.025},g={veloci:.004,normali:.0055,robuste:.007},f={s:60,g:45,m:35},v={cambi:[.6,.7,.8],ruota:[.55,.65,.75],grande:[.05,.1,.3]},h=[{g:"TRASMISSIONE E CUSCINETTI",ids:["catena","pulegge","bb","mozzi","pedivelle","cassetta","gruppo"]},{g:"TELAIO E COMPONENTI",ids:["manubrio","cockpit","nastro","manopole","sella","reggisella","pedali","portaborraccia","viteria","perni","dischi","forcella","ammortizzatore","telaio"]},{g:"ABBIGLIAMENTO E ACCESSORI",ids:["casco","abbigliamento","body","copriscarpe","calze","borraccia"]}],b={catena:"Catena cerata",pulegge:"Pulegge maggiorate",bb:"Movimento centrale ceramico",mozzi:"Cuscinetti ceramici nei mozzi",pedivelle:"Guarnitura in carbonio",cassetta:"Pacco pignoni di gamma alta",gruppo:"Gruppo top di gamma",manubrio:"Manubrio integrato aero",cockpit:"Manubrio in carbonio",nastro:"Nastro manubrio leggero",manopole:"Manopole in schiuma",sella:"Sella in carbonio",reggisella:"Reggisella in carbonio",pedali:"Pedali leggeri",portaborraccia:"Portaborraccia in carbonio",viteria:"Viteria in titanio",perni:"Perni passanti leggeri",dischi:"Dischi freno leggeri",forcella:"Forcella leggera",ammortizzatore:"Ammortizzatore leggero",telaio:"Telaio leggero",casco:"Casco aero",abbigliamento:"Maglia e pantaloncino aderenti",body:"Body da gara",copriscarpe:"Copriscarpe aero",calze:"Calze aero",borraccia:"Borraccia aero"},w=[{k:"gomme",id:"copertoni",n:"Gomme"},{k:"camere",id:"tubeless",n:"Camere d’aria"},{k:"cassetta",id:"cassetta",n:"Pacco pignoni"},{k:"corone",id:"pedivelle",n:"Corone"},{k:"dischi",id:"dischi",n:"Dischi freno"},{k:"pulegge",id:"pulegge",n:"Pulegge del cambio"},{k:"bb",id:"bb",n:"Movimento centrale"},{k:"tacchette",id:"pedali",n:"Tacchette"},{k:"nastro",id:"nastro",n:"Nastro manubrio"},{k:"manopole",id:"manopole",n:"Manopole"},{k:"casco",id:"casco",n:"Casco"}],y=["viteria","sella","reggisella","nastro","portaborraccia","pedivelle","manopole","cassetta","cockpit","mozzi","bb"],M=[0,50,100,150,200,250,300,400,500,750,1e3,1250,1500,2e3,2500,3e3,4e3,5e3,1/0],x={type:"g",src:"file",prof:"ondulato",fondo:"compatto",pos:"media",pace:"vel",dtype:"cambi",mode:"budget",budgetIdx:6,goalIdx:11,useLeft:!1,track:null,fileName:"",prices:{},owned:{},aw:{},custom:[],ab:{A:{},B:{}},nextId:1},k=null;document.addEventListener("click",function(e){var a,t,i,o=e.target.closest&&e.target.closest("a[data-f]");o&&(a=o.getAttribute("data-f"),t=0,i=setInterval(function(){if(++t>40)return clearInterval(i);var e=document.getElementById(a);if(e){var o=e.closest("details");o&&!o.open&&(o.open=!0),e.offsetParent&&e.getBoundingClientRect().height&&(clearInterval(i),setTimeout(function(){e.scrollIntoView({block:"center"}),e.style.transition="background-color .8s, box-shadow .8s",e.style.backgroundColor="#D4F04C",e.style.boxShadow="0 0 0 8px #D4F04C",setTimeout(function(){e.style.backgroundColor="",e.style.boxShadow=""},1800)},450))}},100))});var C="Hai trovato un’offerta o hai già un componente in mente? Dicci cos’è, quanto pesa, quanto pesa quello che toglieresti e quanto costa: lo mettiamo in scala con gli altri, calcolato sul tuo giro.",I={fermo:"Non gira: conta solo il peso. Un grammo qui vale come un grammo sul ciclista o nella borraccia.",cerchio:"Gira lontano dal mozzo. A velocità costante pesa come il resto; quando acceleri va anche messo in rotazione, e lì può contare fino al doppio. Se carichi il file del giro calcoliamo quanto acceleri davvero; descrivendo il giro contiamo solo il peso.",mozzo:"Gira, ma vicino al centro: per metterlo in rotazione serve una piccola frazione dell’energia di un peso uguale sul cerchio. Lo contiamo come peso fermo.",gomma:"Se conosci la resistenza al rotolamento misurata da Bicycle Rolling Resistance (watt per gomma), inseriscila per la gomma che hai e per quella nuova, alla stessa pressione: la convertiamo per il tuo giro, contando la stessa gomma davanti e dietro. I test sono su rullo a 29 km/h con 42,5 kg per gomma: su asfalto l’ordine tra le gomme di solito resta, ma i watt cambiano; su sterrato prendili come indicativi.",attrito:"Watt persi nella trasmissione o nei cuscinetti. Per la catena le perdite crescono più o meno con la potenza: dicci a quanti watt sono state misurate e le riportiamo alla tua. Pulegge, movimento centrale e cuscinetti dipendono poco dalla tua potenza: li usiamo così come sono.",aria:"Inserisci i watt in meno e la velocità a cui sono stati misurati: li riportiamo al tuo giro, perché la potenza per vincere l’aria cresce con il cubo della velocità."},S="Hai trovato un prezzo migliore? Cambialo qui: la scala si riordina.",A="Metti a confronto due pacchetti: spunta A e B accanto agli upgrade. Vedi quale rende di più sul tuo giro e quanto costa ogni secondo.",z="Carica il percorso della gara che prepari: calcoliamo gli stessi upgrade lì, alla stessa potenza media del tuo giro.",T="Hai montato un upgrade? Carica le uscite fatte prima e dopo sullo stesso percorso. Riportiamo i tempi alla stessa potenza media e confrontiamo il guadagno misurato con la nostra stima.",E="Servono file con potenza: senza, il confronto è solo indicativo. Vento, temperatura, traffico e gruppo cambiano i tempi più di molti upgrade: almeno 3 uscite prima e 3 dopo, in giornate simili e con lo stesso misuratore di potenza. Per guadagni piccoli ne servono molte di più.",P=[{g:"Peso fermo",k:"fermo",p:[["Telaio"],["Forcella"],["Sella"],["Reggisella"],["Reggisella telescopico"],["Manubrio"],["Attacco manubrio"],["Pinze e pompe dei freni"],["Leve e comandi"],["Cambio e deragliatore"],["Pedivelle"],["Pedali"],["Ammortizzatore"],["Perni passanti"],["Portaborraccia"],["Viteria"],["Borse e accessori"],["Altro componente fermo"]]},{g:"Gira sul cerchio",k:"cerchio",p:[["Ruote complete",1],["Cerchi",1],["Copertoni",1],["Camere d’aria",1],["Lattice o inserti",1],["Raggi",.37],["Altro sul cerchio",1]]},{g:"Gira vicino al mozzo",k:"mozzo",p:[["Dischi dei freni",0],["Mozzi",0],["Pacco pignoni",0]]},{g:"Gomme con dati di rotolamento",k:"gomma",p:[["Copertoni con watt da test",1]]},{g:"Attrito",k:"attrito",p:[["Catena o lubrificazione",0,1],["Pulegge del cambio",0,0],["Movimento centrale",0,0],["Cuscinetti delle ruote",0,0],["Altro attrito",0,1]]},{g:"Aria",k:"aria",p:[["Casco"],["Body o maglia"],["Calze o copriscarpe"],["Manubrio aero"],["Ruote ad alto profilo",1],["Borracce e portaborraccia aero"],["Altro per l’aria"]]}],N={"Ruote complete":"Non sappiamo quanta parte della differenza sta sul cerchio: il valore alto della forbice la conta tutta lì.",Raggi:"I raggi vanno dal mozzo al cerchio: per la rotazione contano circa un terzo di un peso uguale sul cerchio.","Ruote ad alto profilo":"Inserisci anche i pesi: contiamo sia l’aria sia la massa che gira.","Pulegge del cambio":"Qui la catena è tirata dalla molla del cambio, non dalla tua pedalata: usiamo i watt così come sono.","Movimento centrale":"Qui i watt dipendono poco dalla tua potenza: li usiamo così come sono, quindi meglio se misurati in condizioni vicine alle tue.","Cuscinetti delle ruote":"Qui i watt dipendono dalla velocità più che dalla potenza: li usiamo così come sono, quindi meglio se misurati a una velocità vicina alla tua."},L={Telaio:"telaio",Forcella:"forcella",Sella:"sella",Reggisella:"reggisella",Manubrio:"manubrio|cockpit","Attacco manubrio":"cockpit|manubrio","Leve e comandi":"gruppo","Cambio e deragliatore":"gruppo",Pedivelle:"pedivelle",Pedali:"pedali",Ammortizzatore:"ammortizzatore",Portaborraccia:"portaborraccia",Viteria:"viteria","Ruote complete":"ruote",Cerchi:"ruote",Copertoni:"copertoni","Camere d’aria":"tubeless","Dischi dei freni":"dischi","Pacco pignoni":"cassetta","Perni passanti":"perni","Copertoni con watt da test":"copertoni","Catena o lubrificazione":"catena","Pulegge del cambio":"pulegge","Movimento centrale":"bb","Cuscinetti delle ruote":"mozzi",Casco:"casco","Body o maglia":"body|abbigliamento","Calze o copriscarpe":"calze|copriscarpe","Manubrio aero":"manubrio","Ruote ad alto profilo":"ruote","Borracce e portaborraccia aero":"borraccia"};e.addEventListener("change",function(e){var i=e.target;if("u-kind"!==i.id){if(i.dataset.own)return i.checked?x.owned[i.dataset.own]=!0:delete x.owned[i.dataset.own],q(),void(k&&!a("c-plan").hidden&&ce());if(i.dataset.aw)i.checked?x.aw[i.dataset.aw]=!0:delete x.aw[i.dataset.aw];else{if("c-freni"!==i.id&&"c-full"!==i.id&&"c-camere"!==i.id){if(i.dataset.price){var o=t(i.value);return o>=0?x.prices[i.dataset.price]=Math.round(o):delete x.prices[i.dataset.price],void ce()}return i.dataset.ab?(i.checked?x.ab[i.dataset.ab][i.dataset.id]=!0:delete x.ab[i.dataset.ab][i.dataset.id],void ue()):"r2-file"===i.id&&i.files[0]?(n=i.files[0],a("r2-file-lbl").textContent="Lettura di "+n.name+"…",void me([n],function(e,t){if(e.length){var i=e[0],o=MG.timeAtPower(i,k.m,k.cda,k.crr,k.S.P,k.vmax),r=MG.sensitivities(i,k.m,k.cda,k.crr,o,k.vmax);r.kA=k.kA,r.tyre=k.S.tyre,r.rCap=k.S.rCap,r.sterA=k.S.sterA,r.rw=k.S.rw,r.rmat=k.S.rmat,r.rprof=k.S.rprof,k.r2={route:i,time:o,S:r},a("r2-file-lbl").textContent=n.name,de(),ue()}else a("r2-file-lbl").textContent="Non riusciamo a leggere "+n.name+". Riprova con un altro file."})):void("v-before"!==i.id&&"v-after"!==i.id||!i.files.length||(a(i.id+"-lbl").textContent=("v-before"===i.id?"Prima: ":"Dopo: ")+i.files.length+(1===i.files.length?" uscita":" uscite")));var n}G()}}else le()}),e.addEventListener("click",function(e){var o,r,l,c=e.target.closest("button");c&&("u-add"===c.id?function(){var e=ee(a("u-kind").value),i=e.k,o={id:"u"+x.nextId,name:a("u-name").value.trim()||e.n,part:e.n,kind:i,gOld:a("u-gold").value,gNew:a("u-gnew").value,price:a("u-price").value,anyway:a("u-any").value,replaces:a("u-rep").value};void 0!==e.rf&&(o.rf=e.rf),"gomma"===i&&(o.wOld=a("u-wold").value,o.wNew=a("u-wnew").value),"attrito"===i&&(o.w=a("u-w1").value,o.wAtP=e.sc?a("u-wp").value:k.S.P),"aria"===i&&(o.w=a("u-w2").value,o.wAtV=a("u-wv").value);var n=[],r=t(o.gOld),l=t(o.gNew),c=t(o.price);(o.gOld||o.gNew)&&(isNaN(r)||isNaN(l)||r<0||l<0||r>2e4||l>2e4)&&n.push("i due pesi (in grammi)"),c>=0||n.push("il prezzo"),"gomma"!==i||!o.wOld&&!o.wNew||t(o.wOld)>0&&t(o.wNew)>0||n.push("i watt delle due gomme"),"attrito"!==i||t(o.w)>0&&t(o.wAtP)>=50||n.push("watt in meno e potenza del test"),"aria"!==i||t(o.w)>0&&t(o.wAtV)>=10||n.push("watt in meno e velocità del test"),o.gOld&&o.gNew||!("fermo"===i||"cerchio"===i||"mozzo"===i||"aria"===i&&e.rf)||n.push("i due pesi"),"gomma"!==i||o.wOld||o.gOld||n.push("i watt o i pesi delle due gomme"),a("u-err").textContent=n.length?"Controlla "+n.join(", ")+".":"",n.length||(o.gOld||(o.gOld=0,o.gNew=0),x.nextId++,x.custom.push(o),["u-name","u-gold","u-gnew","u-wold","u-wnew","u-w1","u-w2","u-price"].forEach(function(e){a(e).value=""}),a("u-any").value=0,ce(),Y(ee(a("u-kind").value)))}():c.dataset.del?(x.custom=x.custom.filter(function(e){return e.id!==c.dataset.del}),delete x.ab.A[c.dataset.del],delete x.ab.B[c.dataset.del],ce()):"v-go"===c.id&&(o=a("v-before").files,r=a("v-after").files,l=a("v-out"),o.length&&r.length?(l.innerHTML='

LETTURA DEI FILE…

',me(o,function(e,t){me(r,function(o,r){var c=t.concat(r);if(e.length&&o.length){var s=MG.verify(e,o,k.m,k.cda,k.crr,k.vmax);if(s){var u=s.ref,d=s.Pref?MG.timeAtPower(u,k.m,k.cda,k.crr,s.Pref,k.vmax):u.movingS,p=MG.sensitivities(u,k.m,k.cda,k.crr,d,k.vmax);p.kA=k.kA,p.tyre=k.S.tyre,p.rCap=k.S.rCap,p.sterA=k.S.sterA,p.rw=k.S.rw,p.rmat=k.S.rmat,p.rprof=k.S.rprof;var m,g=MG.buildItems(W({owned:{}}),p).all.filter(function(e){return e.id===a("v-item").value})[0],f=Math.round(s.gain),v=s.se,h=null!==v?s.tq*v:null;if(null===v)m="Con una sola uscita per lato non possiamo dire quanto è affidabile: aggiungine altre.";else{var b=f-h,w=f+h;m=g&&h>Math.max(60,2*Math.abs(g.s))?"Troppa differenza tra le uscite per dire qualcosa.":w<0?"Le uscite dopo sono più lente: può essere l’upgrade, o giornate diverse.":b<=0?g&&w>=g.lo?"Compatibile con la stima, ma anche con nessun guadagno: servono più uscite per distinguere.":"Compatibile anche con nessun guadagno: servono più uscite per distinguere.":g?w>=g.lo&&b<=g.hi?"Compatibile con la stima: la differenza sta dentro l’incertezza delle tue uscite.":b>g.hi?"Sopra la stima: le tue uscite dicono più di quanto prevedevamo. Può essere l’upgrade, o giornate diverse.":"Sotto la stima: le tue uscite dicono meno di quanto prevedevamo. Può essere l’upgrade, o giornate diverse.":""}l.innerHTML='

MISURATO SULLE TUE USCITE

'+K(f)+(null!==h?' ± '+n(h)+"":"")+""+(g?"Nostra stima per "+i(g.art)+" su questo percorso: tra "+K(g.lo)+" e "+K(g.hi)+".
":"")+""+m+'

'+s.before.n+(1===s.before.n?" USCITA":" USCITE")+" PRIMA · "+s.after.n+" DOPO"+(s.withPower?" · TEMPI RIPORTATI A "+Math.round(s.Pref)+" W":" · SENZA POTENZA: SOLO INDICATIVO")+(s.routeWarn?" · ATTENZIONE: I PERCORSI NON COINCIDONO":"")+(c.length?" · FILE NON LETTI: "+i(c.join(", ")):"")+"

"}else l.innerHTML='

Nei file mancano i tempi: servono uscite registrate, non percorsi.

'}else l.innerHTML='

Non riusciamo a leggere i file'+(c.length?": "+i(c.join(", ")):"")+".

"})})):l.innerHTML='

Carica almeno un’uscita prima e una dopo.

'))}),e.addEventListener("click",function(i){var o=i.target.closest("button");if(o&&e.contains(o)){var n=o.closest(".c-seg");if(n){var r=n.dataset.k,l=o.dataset.v;return"type"===r?void(l!==x.type&&O(l)):(x[r]=l,"mode"===r?(V(),void Z()):void F())}if(o.dataset.p)return U(o.dataset.p),void F();if("c-go"===o.id){var c=function(){var e,i=x.type,o=[],n=t(a("c-rider").value),r=t(a("c-bike").value),l=t(a("c-vel").value);if(n>=35&&n<=160||o.push("il tuo peso"),r>=5&&r<=25||o.push("il peso della bici"),"file"===x.src){if(!x.track)return"Carica un file FIT o GPX, oppure descrivi il giro.";e=x.track}else{var c=t(a("c-km").value),s=t(a("c-dplus").value),u=t(a("c-psd").value),d=t(a("c-pmix").value),h=t(a("c-ppiano").value);c>=5&&c<=400||o.push("la distanza"),s>=0&&s<=8e3||o.push("il dislivello"),u+d+h!==100&&o.push("il profilo (deve fare 100%)"),o.length||(e=MG.describedRoute(c,s,u/100,d/100))}var b=+a("c-ster").value/100,w="m"===i?.008:g[a("c-tyre").value]||.0055,y=(1-b)*w+b*m[x.fondo],M=p[i][x.pos],C=n+r+1.5,I=f[i]/3.6,S=+a("c-draft").value/100,A=t(a("c-cda").value),z=t(a("c-crr").value);a("c-cda").value.trim()&&(A>=.15&&A<=.8?M=A:o.push("il CdA (tra 0,15 e 0,8)")),a("c-crr").value.trim()&&(z>=.0015&&z<=.05?y=z:o.push("il Crr (tra 0,0015 e 0,05)"));var T=v[x.dtype].map(function(e){return 1-S*(1-e)}),E=M;M*=T[1];var P=e&&e.movingS;if(!P&&e)if("pow"===x.pace){var N=t(a("c-pow").value);N>=50&&N<=600?P=MG.timeAtPower(e,C,M,y,N,I):o.push("la potenza media")}else l>=5&&l<=50?P=e.km/l*3600:o.push("la velocità media");var L=a("c-rw").value.trim()?t(a("c-rw").value):null;if(null===L||L>=800&&L<=4e3||o.push("il peso delle ruote (tra 800 e 4.000 g)"),o.length)return"Controlla "+o.join(", ")+".";var R=MG.sensitivities(e,C,M,y,P,I);R.kA=T,R.tyre=a("c-tyre").value;var O=!!a("c-crr").value.trim();R.rCap=Math.max(0,1e3*((O?y:w)-.003)),R.sterA=O?0:b,R.rw=L,R.rmat=a("c-ruote").value,R.rprof="m"===i?"basso":a("c-rprof").value;var U={type:i,disco:"disco"===a("c-freni").value,mtbFull:"full"===a("c-full").value,camere:a("c-camere").value,ruote:a("c-ruote").value,cerata:!1,anyway:Object.assign({},x.aw,"tubeless"===a("c-camere").value?{camere:!1}:{})};return k={S:R,route:e,timeS:P,cfg:U,ster:b,m:C,cda:M,cdaSolo:E,share:S,kA:T,crr:y,vmax:I,r2:null},H(),null}();if(a("c-err").textContent=c||"",c)return;return a("c-info").hidden=!0,a("c-plan").hidden=!1,x.useLeft=!1,R("mode"),V(),Z(),re(),void e.scrollIntoView({behavior:"smooth",block:"start"})}"c-back"===o.id&&(a("c-plan").hidden=!0,a("c-info").hidden=!1,e.scrollIntoView({behavior:"smooth",block:"start"}))}}),["c-psd","c-pmix","c-ppiano"].forEach(function(e){a(e).addEventListener("input",function(){x.prof="misura",B(),F()})}),["c-km","c-dplus","c-ster","c-draft"].forEach(function(e){a(e).addEventListener("input",F)}),a("c-file").addEventListener("change",function(){var e;this.files[0]&&(e=this.files[0],x.fileName=e.name,a("c-file-lbl").textContent="Lettura di "+e.name+"…",a("c-err").textContent="",j(e,function(t){x.track=t,a("c-file-lbl").innerHTML=i(e.name)+'
'+t.km.toFixed(1).replace(".",",")+" KM · "+Math.round(t.dplus)+" M D+"+(t.movingS?" · "+s(t.movingS)+" IN MOVIMENTO":" · SENZA TEMPI")+(t.avgP?" · "+Math.round(t.avgP)+" W MEDI":"")+"",F()},function(e){x.track=null,a("c-file-lbl").textContent="Scegli un file FIT, GPX o ZIP",a("c-err").textContent=e&&e.message||"Non riusciamo a leggere il file.",F()}))}),a("c-slider").addEventListener("input",function(){"budget"===x.mode?x.budgetIdx=+this.value:x.goalIdx=+this.value,x.useLeft=!1,Q(),Z()}),O("g",!0),document.fonts&&document.fonts.load&&(document.fonts.load('700 40px "Space Grotesk"'),document.fonts.load('400 20px "IBM Plex Mono"'))}function R(a){e.querySelectorAll('.c-seg[data-k="'+a+'"] button').forEach(function(e){e.setAttribute("aria-pressed",String(e.dataset.v===x[a]))})}function O(t,i){x.type=t,e.dataset.type=t;var o=u[t];a("c-bike").value=o.bike,a("c-km").value=o.km,a("c-dplus").value=o.dplus,a("c-vel").value=o.vel,a("c-ster").value=o.ster,x.fondo=o.fondo,U(o.prof),i&&(a("c-rider").value="74"),R("type"),R("fondo"),F()}function U(e){x.prof=e;var t=d.filter(function(a){return a.id===e})[0];t&&(a("c-psd").value=t.q[0],a("c-pmix").value=t.q[1],a("c-ppiano").value=t.q[2]),B()}function B(){a("c-prof").innerHTML=d.map(function(e){return'"}).join("")}function G(){var e=x.type,t="disco"===a("c-freni").value,i="full"===a("c-full").value,o=function(a){var o=MG.CAT.filter(function(e){return e.id===a})[0];return o&&o.types.indexOf(e)>=0&&!("disco"===o.needs&&!t)&&!("full"===o.needs&&!i)};a("c-have").innerHTML=h.map(function(e){var a=e.ids.filter(o);return a.length?'
'+e.g+'
'+a.map(function(e){return'"}).join("")+"
":""}).join(""),q(),a("c-aw").innerHTML=w.filter(function(e){return o(e.id)&&!("camere"===e.k&&"tubeless"===a("c-camere").value)}).map(function(e){return'"}).join("")}function q(){var t=e.querySelectorAll("#c-have input:checked").length;a("c-have-n").textContent=t?t+(1===t?" SPUNTATO":" SPUNTATI"):"BICI DI SERIE"}function F(){G();var i="file"===x.src;a("c-file-box").hidden=!i,a("c-desc-box").hidden=i;var o=!!(i&&x.track&&x.track.movingS);a("c-pace").hidden=o,a("c-pace-help").hidden=o,a("c-vel-wrap").hidden=o||"vel"!==x.pace,a("c-pow-wrap").hidden=o||"pow"!==x.pace,a("c-ster-help").hidden=!i;var n=+a("c-ster").value;a("c-ster-out").textContent=0===n?"Solo asfalto":n+"%",e.querySelector('.c-seg[data-k="fondo"]').hidden=0===n;var r=t(a("c-psd").value),l=t(a("c-pmix").value),c=r+l+t(a("c-ppiano").value),s=a("c-split-out"),u=t(a("c-km").value),d=t(a("c-dplus").value);if(100!==c)s.textContent="Il totale fa "+(isNaN(c)?"?":c)+"%: deve fare 100%.",s.className="c-mono-s c-warn";else{var p=u*r/100/2,m=Math.max(0,d-u*l/100*10),g=p>0?m/(10*p):0;s.className="c-mono-s"+(g>15?" c-warn":""),s.textContent=p>0&&m>0?"LE TUE SALITE: CIRCA "+p.toFixed(1).replace(".",",")+" KM AL "+g.toFixed(1).replace(".",",")+"%"+(g>15?" · CONTROLLA I DATI":""):"SALITE: QUASI NIENTE"}var f=+a("c-draft").value;a("c-draft-out").textContent=0===f?"Mai, vado da solo":f+"%",a("c-draft-help").innerHTML='A ruota sposti meno aria: dietro un altro corridore circa il 30–40% in meno, al centro di un gruppo grande fino al 90–95% in meno. Così contano meno la tua posizione e gli upgrade aerodinamici; per questi è un’approssimazione, perché non abbiamo trovato misure dirette. Se esci da solo, lascia a zero. Consulta le fonti.',a("c-dtype").hidden=0===f,R("dtype"),R("src"),R("fondo"),R("pos"),R("type"),R("pace")}function D(e,a){return"undefined"==typeof DecompressionStream?Promise.reject(new Error("Questo browser non apre i file compressi: estrai prima il file FIT.")):new Response(new Blob([e]).stream().pipeThrough(new DecompressionStream(a))).arrayBuffer()}function j(e,a,t){var i=new FileReader;i.onerror=function(){t(new Error("Non riusciamo a leggere il file."))},i.onload=function(){try{var o,n=i.result,r=new Uint8Array(n);o=80===r[0]&&75===r[1]?function(e){var a,t=new Uint8Array(e),i=new DataView(e),o=new TextDecoder,n=-1;for(a=t.length-22;a>=Math.max(0,t.length-65557);a--)if(101010256===i.getUint32(a,!0)){n=a;break}if(n<0)return Promise.reject(new Error("Lo .zip è danneggiato."));a=n;for(var r=i.getUint16(a+10,!0),l=i.getUint32(a+16,!0),c=0;c11&&".FIT"===String.fromCharCode(a[8],a[9],a[10],a[11]);return MG.trackToRoute(t?MG.parseFIT(e.buf):MG.parseGPX((new TextDecoder).decode(a)))}).then(a,t)}catch(e){t(e)}},i.readAsArrayBuffer(e)}function W(e){var a=Object.assign({},k.cfg,{prices:x.prices,owned:x.owned,custom:x.custom});return e?Object.assign(a,e):a}function H(){var e=MG.buildItems(W(),k.S);k.items=e.items,k.all=e.all,k.losers=e.losers,k.top=e.top}function K(e){return e>0?r(e):e<0?"+"+n(-e):'0"'}function V(){var e=a("c-slider");if("budget"===x.mode)e.max=M.length-1,e.value=x.budgetIdx,a("c-slider-lbl").textContent="Quanto vuoi spendere in più";else{var t=k.items.reduce(function(e,a){return e+a.s},0),i=Math.max(0,Math.floor(t/15)-1);x.goalIdx=Math.min(x.goalIdx,i),e.max=i,e.value=x.goalIdx,a("c-slider-lbl").textContent="Quanti secondi vuoi guadagnare"}Q()}function Q(){a("c-slider-out").textContent="budget"===x.mode?isFinite(M[x.budgetIdx])?o(M[x.budgetIdx]):"Senza limite":r(15*(x.goalIdx+1)),a("c-slider").setAttribute("aria-valuetext",a("c-slider-out").textContent)}function X(e){return e.length<2?e.join(""):e.slice(0,-1).join(", ")+" e "+e[e.length-1]}function Z(){var e,t=k,n=t.items,u=t.S,d="",p=[],m=null,g=0;if("budget"===x.mode){var f=M[x.budgetIdx],h=MG.planBudget(n,f);e=h.prefix.slice(),p=h.fill,m=h.next,g=h.left,x.useLeft&&p.length&&(e=e.concat(p))}else e=MG.planGoal(n,15*(x.goalIdx+1))||[];var b=function(e,a){return e.some(function(e){return e.id===a})};if(b(e,"copertoni")&&b(e,"tubeless")){var w=n.map(function(e){return"tubeless"===e.id&&e.joint&&(e.joint.s0});if(w=MG.sortLadder(w),"budget"===x.mode){var C=MG.planBudget(w,M[x.budgetIdx]);e=C.prefix.slice(),p=C.fill,m=C.next,g=C.left,x.useLeft&&p.length&&(e=e.concat(p))}else e=MG.planGoal(w,15*(x.goalIdx+1))||[];b(e,"copertoni")||(e=e.map(function(e){return"tubeless"===e.id?n.filter(function(e){return"tubeless"===e.id})[0]:e}))}var I=e.reduce(function(e,a){return e+a.s},0),S=e.reduce(function(e,a){return e+a.lo},0),A=e.reduce(function(e,a){return e+a.hi},0),z=e.reduce(function(e,a){return e+a.cost},0),T=e.reduce(function(e,a){return e+a.price},0);if(t.plan=e,t.sec=I,t.spent=z,t.lo=S,t.hi=A,d+='

'+("budget"===x.mode?"CON "+(isFinite(M[x.budgetIdx])?o(M[x.budgetIdx]).toUpperCase():"BUDGET LIBERO")+" GUADAGNI CIRCA":"PER ARRIVARCI TI SERVONO")+"

",e.length?(d+='

'+r(c(I))+'

FORBICE: TRA '+K(S)+" E "+K(A)+"

",d+='

'+("budget"===x.mode?"Con "+o(z)+" in più di quanto avresti speso comunque.":"Ti costa "+o(z)+" in più di quanto avresti speso comunque.")+(T!==z?" Alla cassa: "+o(T)+".":"")+"

",d+='

SOMMA DEI GRADINI '+r(I)+" SU "+t.route.km.toFixed(0)+' KM

',d+='
'+e.map(function(e,a){return function(e,a){var t=e.base?o(e.cost)+" in più "+e.up+" · alla cassa "+o(e.price):e.anyway?o(e.cost)+" in più · alla cassa "+o(e.price):o(e.price);return'
'+a+". "+i(e.name)+""+r(e.s)+'
'+t+"TRA "+K(void 0!==e.dlo?e.dlo:e.lo)+" E "+K(void 0!==e.dhi?e.dhi:e.hi)+''+e.conf.toUpperCase()+'

'+i(e.why).replace("{totale}",r(e.total||e.s))+"

"+(e.maint?'

Manutenzione e durata. '+i(e.maint)+"

":"")+(e.alt?'

ALTERNATIVA: '+i(e.alt.name)+" · "+i(e.alt.meta)+"

":"")+(e.src?'

Consulta le fonti

':"")+"
"}(e,a+1)}).join("")+"
"):d+='

'+(n.length?"Con questo budget non ci sta nessun gradino: il primo, "+i(n[0].art)+", costa "+o(n[0].cost)+".":"Non troviamo upgrade utili con questi dati.")+"

","budget"===x.mode&&p.length&&!x.useLeft){var E=p.reduce(function(e,a){return e+a.cost},0),P=p.reduce(function(e,a){return e+a.s},0);d+='
Con i '+o(g)+" che ti avanzano ci stanno "+i(X(p.map(function(e){return e.art})))+" ("+o(E)+", "+r(P)+"). "+(m?"Ogni secondo ti costerebbe "+l(E,P)+", contro "+l(m.cost,m.s)+" del prossimo gradino: se punti a quello, conviene metterli da parte.":"")+'
'}if("budget"===x.mode&&m&&(d+='
Prossimo gradino: '+i(m.name)+", "+o(m.cost)+" per "+r(m.s)+". Ti mancano "+o(m.cost-g)+".
"),"carbonio"!==t.cfg.ruote&&e.length){var N=t.top.s>0?I/t.top.s:0;d+='

IL CONFRONTO

Le ruote in carbonio top da '+o(t.top.cost)+" sul tuo giro valgono "+r(t.top.s)+"."+(N>1.05?" Il tuo piano rende "+N.toFixed(1).replace(".",",")+" volte tanto"+(z

"}e.length&&(d+='

La card da condividere

Un’immagine 9:16 con il tuo piano, pronta per le storie o per il gruppetto.

');var L={};e.forEach(function(e){L[e.id]=1}),d+='
Tutta la scala · '+n.length+" gradini"+n.map(function(e){return""}).join("")+"
UpgradeCostoSecondi€/s
"+i(e.name)+(e.base?" · in più "+e.up:"")+""+o(e.cost)+""+r(e.s)+""+l(e.cost,e.s).replace(" €","")+"
";var R,O=(t.all||[]).filter(function(e){return y.indexOf(e.id)>=0&&e.s>0&&e.s<=15}).sort(function(e,a){return y.indexOf(e.id)-y.indexOf(a.id)}).slice(0,3);O.length&&(d+='
Per la bellezza. Il cronometro non vede tutto. '+i((R=X(O.map(function(e){return e.name.toLowerCase().replace(/ · .*/,"")+" "+r(e.s)}))).charAt(0).toUpperCase()+R.slice(1))+": sul tuo giro valgono pochi secondi, ma la bici cambia faccia. Se ogni volta che apri il garage ti viene voglia di uscire, il guadagno vero è lì, e nessuna galleria del vento lo misura.
"),d+='
Come abbiamo calcolato. Abbiamo simulato il tuo giro: '+t.route.km.toFixed(1).replace(".",",")+" km, "+Math.round(t.route.dplus)+" m di dislivello in "+s(t.timeS)+", circa "+Math.round(u.P)+" W. Qui 1 kg in meno vale "+Math.round(u.perKg)+" s, 1 W di attrito "+Math.round(u.perW)+" s, 0,001 di CdA "+(u.perCdA*(u.kA?u.kA[1]:1)).toFixed(1).replace(".",",")+" s."+(t.share>0?" Stai a ruota per il "+Math.round(100*t.share)+"% del giro: lì contiamo circa il "+Math.round(100*(1-v[x.dtype][1]))+"% di aria in meno, per te e per gli upgrade aerodinamici.":"")+' Metodo e fonti.
Quale modello? Non facciamo nomi e nessun marchio ci paga. Per scegliere il prodotto guarda i test indipendenti: li trovi qui.
';var U=a("t-own");U&&a("c-tools").insertBefore(U,a("c-tools").firstChild),a("c-out").innerHTML=d,ne();var B=a("c-useleft");B&&B.addEventListener("change",function(){x.useLeft=B.checked,Z()}),e.length&&(!function(){var e=a("c-card");if(!e)return;var t=e.getContext("2d"),i=1080,n=1920,l=66,s=k,u="carbonio"!==s.cfg.ruote&&s.sec>s.top.s&&s.spento&&l?(e.fillText(l,t,c),l=a,c+=n):l=i}),l&&e.fillText(l,t,c);return c+n}(t,"sul mio giro, con "+o(s.spent)+" in più. Stima tra "+K(s.lo)+" e "+K(s.hi)+"."+(u?" Le ruote nuove possono aspettare.":""),l,g,i-2*l,60)+20;var M=s.plan.slice().sort(function(e,a){return a.s-e.s}).slice(0,5),x=84,C=M.length*x+(u?x:0);if(t.fillStyle="#F7F7F8",t.fillRect(l,g,i-2*l,C),t.strokeStyle="#0B0C0E",t.lineWidth=3,t.strokeRect(l,g,i-2*l,C),M.forEach(function(e,a){var o=g+a*x;a&&(t.strokeStyle="#C9CCD1",t.lineWidth=2,t.beginPath(),t.moveTo(l,o),t.lineTo(i-l,o),t.stroke()),t.fillStyle="#0B0C0E",t.font='400 38px "Space Grotesk"',t.fillText(e.name.length>34?e.name.slice(0,33)+"…":e.name,l+30,o+55),t.textAlign="right",t.font='600 38px "IBM Plex Mono"',t.fillText(r(e.s),i-l-30,o+55),t.textAlign="left"}),u){var I=g+M.length*x;t.fillStyle="#E8E9EB",t.fillRect(l+2,I,i-2*l-4,x-2),t.strokeStyle="#0B0C0E",t.lineWidth=3,t.beginPath(),t.moveTo(l,I),t.lineTo(i-l,I),t.stroke(),t.fillStyle="#5E636B",t.font='400 38px "Space Grotesk"';var S="Ruote in carbonio top · "+o(s.top.cost);t.fillText(S,l+30,I+55);var A=t.measureText(S).width;t.fillRect(l+30,I+42,A,3),t.textAlign="right",t.font='600 38px "IBM Plex Mono"';var z=r(s.top.s);t.fillText(z,i-l-30,I+55);var T=t.measureText(z).width;t.fillRect(i-l-30-T,I+42,T,3),t.textAlign="left"}t.fillStyle="#0B0C0E",t.fillRect(l,n-170,i-2*l,104),t.fillStyle="#F7F7F8",t.font='600 40px "Space Grotesk"',t.fillText("E tu quanti ne trovi? →",l+30,n-104)}(),a("c-dl").addEventListener("click",J),a("c-share").addEventListener("click",$)),a("r2-out")&&de(),a("c-ride").textContent="IL TUO GIRO · "+t.route.km.toFixed(0)+" KM · "+Math.round(t.route.dplus)+" M · "+s(t.timeS).toUpperCase()+" · "+MG.TYPE_NAME[t.cfg.type].toUpperCase()}function _(e){a("c-card").toBlob(e,"image/png")}function J(){_(function(e){var a=document.createElement("a");a.href=URL.createObjectURL(e),a.download="margine-card.png",document.body.appendChild(a),a.click(),setTimeout(function(){URL.revokeObjectURL(a.href),a.remove()},1e3)})}function $(){_(function(e){var a=new File([e],"margine-card.png",{type:"image/png"});navigator.canShare&&navigator.canShare({files:[a]})?navigator.share({files:[a],text:"Ho trovato circa "+r(c(k.sec))+" sul mio giro."}).catch(function(){}):J()})}function Y(e){var t=a("u-rep"),o={},n=MG.buildItems(W({owned:{},custom:[]}),k.S).all;n.forEach(function(e){o[e.id]=1}),t.innerHTML=''+n.map(function(e){return'"}).join("");var r=(L[e.n]||"").split("|").filter(function(e){return o[e]})[0];t.value=r||""}function ee(e){var a=String(e).split("."),t=P[+a[0]],i=t.p[+a[1]];return{k:t.k,g:t.g,n:i[0],rf:i[1],sc:i[2]}}function ae(e,a,t,i,o){return'"+(a?""+a+"":"")+""}function te(e,a){return'"}function ie(e,a,t){return'
'+a+'
'+t+"
"}function oe(e,a,t){return'"}function ne(){var e=a("t-own"),t=a("c-own-slot");e&&t&&e.parentNode!==t&&t.appendChild(e)}function re(){var e,t=P.map(function(e,a){return''+e.p.map(function(e,t){return'"}).join("")+""}).join("");a("c-tools").innerHTML=ie("t-own","Aggiungi un componente tuo",'

'+C+"

"+te("Nome",ae("u-name","","text",void 0,"es. ruote da 45 mm"))+'

'+te("Quello che hai",ae("u-gold","g","numeric"))+te("Quello nuovo",ae("u-gnew","g","numeric"))+'
'+te("Gomma che hai",ae("u-wold","W","decimal"))+te("Gomma nuova",ae("u-wnew","W","decimal"))+'
'+te("Watt in meno",ae("u-w1","W","decimal"))+'
'+te("Watt in meno",ae("u-w2","W","decimal"))+te("Misurati a",ae("u-wv","km/h","decimal",40))+'

Se il tuo componente prende il posto di un gradino della scala, togliamo quel gradino: non puoi montare due paia di gomme.

'+te("Prezzo",ae("u-price","€","numeric"))+te("Spenderesti comunque",ae("u-any","€","numeric",0))+'
')+ie("t-scala","I tuoi prezzi",'

'+S+'

')+ie("t-ab","Confronto A/B",'

'+A+'

UpgradeSecondiAB
')+ie("t-r2","Su un altro percorso",'

'+z+"

"+oe("r2-file","Carica il percorso (FIT, GPX o ZIP)")+'
')+ie("t-ver","Verifica sul campo",'

'+T+'

'+oe("v-before","Uscite prima (FIT, GPX o ZIP)",!0)+oe("v-after","Uscite dopo (FIT, GPX o ZIP)",!0)+'

'+E+'

I file restano sul tuo dispositivo: il confronto si fa nel browser.

'),le(),se(),e=MG.buildItems(W({custom:[]}),k.S).all,a("s-list").innerHTML=e.map(function(e){var a=x.prices[e.id]>=0?x.prices[e.id]:e.price;return'
'+i(e.name)+'€
'}).join(""),ue(),de(),pe(),ne()}function le(){var e=ee(a("u-kind").value),t=e.k;a("u-help").textContent=I[t]+(N[e.n]?" "+N[e.n]:""),a("u-gomma").hidden="gomma"!==t,a("u-attrito").hidden="attrito"!==t,a("u-aria").hidden="aria"!==t,a("u-wp-f").hidden=!e.sc,Y(e),"Ruote complete"===e.n&&k&&k.S.rw&&!a("u-gold").value&&(a("u-gold").value=k.S.rw),a("u-gtitle").textContent="attrito"===t||"aria"===t&&!e.rf?"Pesi (facoltativi)":"gomma"===t?"Pesi (facoltativi: servono per contare la rotazione)":"Pesi"}function ce(){H(),V(),Z(),se(),ue(),de(),pe()}function se(){a("u-list").innerHTML=x.custom.map(function(e){var a,t=(a=e.id,(k.all||[]).filter(function(e){return e.id===a})[0]),n=t?t.s:0;return'
'+i(e.name)+'
'+i(e.part!==e.name?e.part+" · ":"").toUpperCase()+MG.KIND[e.kind].toUpperCase()+" · "+K(n)+" · "+o(t?t.cost:0)+(n<=0?" · TI FA PERDERE TEMPO":"")+(e.replaces?"
AL POSTO DI: "+i(function(e){var a=MG.CAT.filter(function(a){return a.id===e})[0];return a?a.name:e}(e.replaces)).toUpperCase():"")+'
'}).join("")}function ue(){var e=(k.all||[]).filter(function(e){return 0!==e.s}).sort(function(e,a){return a.s-e.s});a("ab-body").innerHTML=e.map(function(e){return""+i(e.name)+""+K(e.s)+''}).join("");var t=k.r2?MG.buildItems(W(),k.r2.S).all:null;function r(a){var i=e.filter(function(e){return x.ab[a][e.id]}),o=0,n=0,r=0;return i.forEach(function(e){if(o+=e.s,n+=e.cost,t){var a=t.filter(function(a){return a.id===e.id})[0];a&&(r+=a.s)}}),{n:i.length,s:o,c:n,s2:r}}var c=r("A"),s=r("B");if(c.n||s.n){var u=s.s-c.s,d=s.c-c.c,p="";c.n&&s.n&&(p=0===u?"A e B rendono uguale sul tuo giro.":(u>0?"B":"A")+" rende "+n(Math.abs(u))+" in più"+(0===d?", allo stesso prezzo.":" e costa "+o(Math.abs(d))+(d>0==u>0?" in più.":" in meno."))),a("ab-out").innerHTML=m("A",c)+"
"+m("B",s)+(p?"

"+p:"")}else a("ab-out").innerHTML="Spunta almeno un upgrade in A o in B.";function m(e,a){return""+e+" · "+K(a.s)+" · "+o(a.c)+(a.s>0?" · "+l(a.c,a.s)+" al secondo":"")+(t?" · sull’altro percorso "+K(a.s2):"")}}function de(){var e=a("r2-out");if(e)if(k.r2){var t=k.r2,o=MG.buildItems(W(),t.S).all,n={};o.forEach(function(e){n[e.id]=e});var l=(k.plan||[]).reduce(function(e,a){return e+(n[a.id]?n[a.id].s:0)},0);e.innerHTML='
'+r(l)+"Il tuo piano su questo percorso ("+t.route.km.toFixed(0)+" km, "+Math.round(t.route.dplus)+" m, "+s(t.time)+" a "+Math.round(k.S.P)+" W). Sul tuo giro vale "+r(k.sec||0)+".
"+k.items.slice(0,12).map(function(e){return""}).join("")+"
UpgradeTuo giroQui
"+i(e.name)+""+K(e.s)+""+(n[e.id]?K(n[e.id].s):"–")+"
"}else e.innerHTML=""}function pe(){var e=a("v-item");if(e){var t=e.value,o=MG.buildItems(W({owned:{}}),k.S).all.filter(function(e){return e.s>0});e.innerHTML=o.map(function(e){return'"}).join(""),t&&o.some(function(e){return e.id===t})&&(e.value=t)}}function me(e,a){var t=[],i=[],o=e.length;o?Array.prototype.forEach.call(e,function(e){function n(){0===--o&&a(t,i)}j(e,function(e){t.push(e),n()},function(){i.push(e.name),n()})}):a(t,i)}}();
MARGINE/LABMETODO

COME ORDINIAMO

Prima i secondi che costano meno.

MARGINE non vende niente e nessun marchio paga per comparire. L’ordine della scala lo decidono solo i secondi che ogni euro ti fa guadagnare, sul giro che fai davvero.

  1. 01Simuliamo il tuo giroDal file FIT o GPX, o dai dati che inserisci, ricaviamo pendenze, tempo in movimento e la potenza media che serve per fare quel giro con la tua bici.
  2. 02Misuriamo ogni upgrade in fisica, non in promesseOgni upgrade è descritto da quello che cambia davvero: grammi in meno, watt di attrito in meno, aria (CdA) in meno, rotolamento (Crr) in meno.
  3. 03Lo trasformiamo in secondiSul giro gravel di esempio, 62 km e 780 m di dislivello, 1 kg vale circa 45 secondi e 1 W di attrito circa 30. Su strada pesa di più l’aria, in MTB il peso.
  4. 04Contiamo il costo veroSe un componente andava cambiato comunque, conta solo quello che spendi in più. Poi mettiamo tutto in fila per euro al secondo.
  5. 05Diciamo quanto siamo sicuriOgni numero ha una forbice, un’etichetta e le sue fonti, tutte in questa pagina: misurato (test indipendenti), stimato (calcolo da pesi e dati tipici), dichiarato (dati del produttore). Dove esistono più fonti le incrociamo, e usiamo solo fonti che chiunque può aprire.
Cosa resta fuori. Posizione in sella e prolunghe da crono valgono tanto, ma quanto rendono dipende dal tuo corpo e da dove pedali: per questo non le mettiamo in scala. I prezzi sono fasce indicative, senza marchi.
Il peso che gira. In salita regolare e a velocità costante un grammo sul cerchio pesa come tutti gli altri. Quando acceleri va anche messo in rotazione e può costare fino al doppio: parte di quell’energia ti torna quando smetti di pedalare, il resto si perde quando freni. Per questo lo calcoliamo solo dal file del giro, da come acceleri davvero, e lo mostriamo come forbice: da zero, se ti torna tutta, al massimo, se la perdi tutta frenando. Dischi, mozzi e pignoni girano così vicino al centro che l’effetto è minimo: per noi sono peso fermo.

Le fonti principali

DATI AGGIORNATI ALL’11 NOVEMBRE 2026 · REGISTRO DEI DATI

Tutte le fonti, voce per voce

Solo pagine pubbliche, aperte una per una. I dati dei produttori sono indicati come tali; i test riservati agli abbonati non li usiamo.

Per scegliere il modello

Non facciamo nomi e nessun marchio ci paga. Quando sai quale upgrade ti conviene, per scegliere il prodotto guarda i test indipendenti:

Trova i tuoi secondi← Torna alla home
MARGINE/LABCHI SIAMO

CHI C’È DIETRO

Un progetto indipendente, con le regole in chiaro.

MARGINE è nato da un ciclista che voleva sapere dove mettere i soldi prima di spenderli. Non vende componenti, non lavora per nessun marchio e non chiede registrazioni.

  1. 01Nessuno paga per comparireL’ordine della scala lo decidono solo i secondi e gli euro. Nessun marchio può comprare una posizione, togliere un upgrade o cambiare un numero.
  2. 02Se un giorno ci saranno link per acquistareSaranno segnalati come tali e non cambieranno mai la scala né i numeri. Lo scriveremo qui prima di attivarli.
  3. 03Ogni numero ha le sue fontiPer ogni upgrade trovi la forbice, l’etichetta (misurato, stimato, dichiarato) e i link alle fonti. Usiamo solo fonti che chiunque può aprire, e dove ne esistono più d’una le incrociamo.
  4. 04Correggiamo in pubblicoQuando un dato cambia lo trovi nel registro qui sotto, con la data e il motivo.

Registro dei dati

DATI AGGIORNATI ALL’11 NOVEMBRE 2026

  • 11 NOV 2026
    Prima versione pubblica del catalogo: 32 upgrade per strada, gravel e MTB, ognuno con forbice, etichetta e fonti.
Hai trovato un errore? Se hai un test, una misura o una fonte che smentisce un nostro numero, scrivici a ⟦EMAIL⟧ con il link. Se regge, correggiamo e lo segniamo nel registro.
Trova i tuoi secondi← Torna alla home
MARGINE/LABNOTE LEGALI

NOTE LEGALI, CONDIZIONI D’USO E PRIVACY

Tutte le regole, in una pagina.

Qui trovi le condizioni d’uso del sito e l’informativa privacy ai sensi dell’art. 13 del Regolamento (UE) 2016/679 (GDPR). In breve: i tuoi giri restano tuoi. Niente account, niente moduli, niente profilazione, nessuno strumento di statistica o di pubblicità.

Titolare del trattamento

Luca Mariani. Contatto per ogni richiesta sulla privacy: ⟦EMAIL⟧. Non è nominato un responsabile della protezione dei dati, perché non è obbligatorio per questo sito.

I file e i dati che inserisci

I file FIT, GPX o ZIP che carichi vengono letti dal tuo browser, sul tuo telefono o computer. Non vengono inviati a noi né ad altri e non vengono salvati: chiusa la pagina, spariscono. Lo stesso vale per i dati che scrivi nel calcolatore (peso, velocità, potenza, prezzi, componenti tuoi) e per la card da condividere, che viene creata sul tuo dispositivo. Il calcolo avviene tutto lì: nessuna profilazione e nessuna decisione automatizzata che ti riguardi.

Dati di navigazione e hosting

Le pagine sono ospitate da Carrd Inc. (Stati Uniti), che tratta i dati per nostro conto come responsabile del trattamento (art. 28 GDPR) in base al suo accordo sul trattamento dei dati. Come ogni server, registra dati tecnici delle visite, per esempio indirizzo IP, data e ora, tipo di browser. Carrd si serve di Amazon Web Services e Cloudflare, anch’essi negli Stati Uniti. Il trasferimento fuori dall’Unione europea è coperto dalle clausole contrattuali standard approvate dalla Commissione europea (art. 46 GDPR), previste in quell’accordo.

Finalità: far funzionare il sito e proteggerlo da abusi. Base giuridica: legittimo interesse del titolare (art. 6, par. 1, lett. f GDPR). Conservazione: Carrd non indica un periodo preciso; il suo accordo sul trattamento prevede che i dati siano trattati per la durata del servizio. Senza questi dati tecnici il sito non può essere mostrato.

Cookie e statistiche

Il sito non usa cookie di profilazione né strumenti di statistica o pubblicità, e le statistiche di Carrd non sono attive. Eventuali cookie strettamente tecnici dell’hosting servono solo a mostrare le pagine e non richiedono consenso: per questo non trovi un banner.

Caratteri tipografici

I caratteri arrivano da Bunny Fonts (BunnyWay d.o.o., Unione europea). Per scaricarli il tuo browser si collega ai suoi server, che dichiara di non registrare né conservare gli indirizzi IP. Base giuridica: legittimo interesse a mostrare il sito correttamente.

Se ci scrivi

Se ci mandi un’email, per segnalare un errore o per un diritto privacy, usiamo il tuo indirizzo e il contenuto del messaggio solo per risponderti. Base giuridica: per le segnalazioni, il nostro legittimo interesse a correggere i dati (art. 6, par. 1, lett. f GDPR); per le richieste sui tuoi diritti, l’obbligo di legge di risponderti (art. 6, par. 1, lett. c GDPR). I messaggi passano dal fornitore della casella di posta, che li tratta per nostro conto. Conserviamo il messaggio per il tempo necessario a gestirlo e al massimo 12 mesi dalla chiusura. Scriverci è facoltativo.

Link esterni

Fonti e test indipendenti si aprono su altri siti, con le loro regole sulla privacy.

I tuoi diritti

Puoi chiedere accesso ai tuoi dati, rettifica, cancellazione, limitazione e portabilità, e opporti al trattamento basato sul legittimo interesse (artt. 15–22 GDPR), scrivendo al contatto qui sopra. Rispondiamo entro un mese. Puoi anche fare reclamo al Garante per la protezione dei dati personali.

Condizioni d’uso

Stime, non promesse. I numeri vengono da un modello fisico e da test pubblici, con le loro forbici. Il tempo che guadagni davvero dipende da te, dal meteo, dal percorso e dal gruppo.

Non è consulenza tecnica. Freni, ruote, forcella, manubrio, attacco manubrio e reggisella sono componenti di sicurezza: controlla la compatibilità, rispetta coppie di serraggio e limiti del produttore, o fai montare da un meccanico.

Costo vero. Il prezzo di ogni upgrade non comprende manutenzione e ricambi: dove contano, li trovi nella scheda del componente.

Prezzi indicativi. Sono fasce tipiche, senza marchi. Non abbiamo rapporti commerciali con produttori o negozi: se un giorno ci saranno, li segnaleremo come previsto nella pagina Chi siamo.

Fonti. I dati citati appartengono ai loro autori: ne riportiamo solo i numeri essenziali, come fatti, con il link alla fonte. Nomi e marchi citati appartengono ai rispettivi titolari.

Immagini. Le fotografie del sito e della card sono immagini illustrative generate con intelligenza artificiale: non ritraggono prodotti reali.

Contenuti del sito. Testi, grafica, catalogo e calcolatore sono protetti dal diritto d’autore. Puoi condividere i link e la tua card; non puoi copiare il catalogo o il calcolatore.

Nessuna garanzia. Il sito è gratuito e offerto così com’è. Nei limiti consentiti dalla legge non rispondiamo delle decisioni di acquisto prese sulla base delle stime. Si applica la legge italiana.

ULTIMO AGGIORNAMENTO: 11 NOVEMBRE 2026

← Torna alla home