{"id":34573,"date":"2026-10-12T12:56:53","date_gmt":"2026-10-12T12:56:53","guid":{"rendered":"https:\/\/cyclingdestination.cc\/uncategorized\/wat-trek-ik-aan-op-de-fiets"},"modified":"2026-10-12T12:56:53","modified_gmt":"2026-10-12T12:56:53","slug":"what-do-i-wear-on-the-bike","status":"publish","type":"post","link":"https:\/\/cyclingdestination.cc\/en\/tips\/wat-trek-ik-aan-op-de-fiets","title":{"rendered":"What should I wear on my bike? Clothing advice for all weather conditions"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Twaalf graden, droog en een beetje wind: korte mouwen met armstukken, of toch lange mouwen? En wat doe je met je voeten als het gaat regenen? Vul hieronder het weer en je rit in en je krijgt meteen een kledingadvies, van onderlaag tot overschoenen, met per onderdeel waarom het past.<\/p>\n\n\n<div class=\"cdwear\" data-config=\"{&quot;lang&quot;:&quot;en&quot;,&quot;ctaUrl&quot;:&quot;\\\/wanneer-gaan&quot;,&quot;sponsored&quot;:[],&quot;editorPlaceholder&quot;:false,&quot;weather&quot;:{&quot;provider&quot;:&quot;none&quot;}}\"><noscript><p style=\"padding:1rem\">This tool needs JavaScript.<\/p><\/noscript><\/div><style id=\"cd-wattrekikaan\">\/* CyclingDestination \u2013 \"Wat trek ik aan op de fiets?\" (mobile first). Brand colour #F2B82F, ink #0E0F0C, paper #F2F0E8. *\/\n.cdwear.cdwear{--cdw-volt:var(--volt,#F2B82F);--cdw-ink:var(--ink,#0E0F0C);--cdw-paper:var(--paper,#F2F0E8);--cdw-line:var(--line,#CFCDC2);--cdw-stone:#5E5D55;\n\tmax-width:860px;margin:2rem auto 3rem;border-radius:12px;overflow:hidden;background:var(--cdw-paper);border:1px solid var(--cdw-line);color:var(--cdw-ink);font-size:16px}\n.cdwear.cdwear *{box-sizing:border-box}\n\/* Reset inside the tool: page templates (e.g. the story lead paragraph) must not restyle it. Doubled class = higher specificity. *\/\n.cdwear.cdwear p,.cdwear.cdwear ul,.cdwear.cdwear ol,.cdwear.cdwear li{margin:0;font-size:inherit;line-height:1.45;letter-spacing:normal}\n.cdwear.cdwear ul,.cdwear.cdwear ol{padding:0}\n.cdwear.cdwear .cdw-top{background:var(--cdw-ink);color:var(--cdw-paper);padding:1.5rem 16px 1.25rem}\n.cdwear.cdwear .cdw-ey{font-family:var(--font-mono,Archivo),sans-serif;font-size:.72rem;letter-spacing:.14em;text-transform:uppercase;color:var(--cdw-volt);margin:0 0 .4rem}\n.cdwear.cdwear .cdw-h{font-family:var(--font-display,\"Barlow Condensed\"),sans-serif;font-weight:800;text-transform:uppercase;font-size:clamp(2rem,7vw,3rem);line-height:.95;margin:0 0 .6rem!important;color:var(--cdw-paper)!important}\n.cdwear.cdwear .cdw-sub{margin:0;opacity:.88;font-size:.95rem;color:var(--cdw-paper)}\n\n.cdwear.cdwear .cdw-form{padding:1.25rem 16px 1.5rem;display:grid;gap:1.1rem}\n.cdwear.cdwear .cdw-f{border:0;margin:0;padding:0;min-width:0}\n.cdwear.cdwear .cdw-f legend,.cdwear.cdwear .cdw-legend,.cdwear.cdwear .cdw-lab{display:block;font-family:var(--font-mono,Archivo),sans-serif;font-size:.75rem;letter-spacing:.1em;text-transform:uppercase;color:var(--cdw-stone);margin:0 0 .45rem;padding:0;font-weight:600}\n.cdwear.cdwear .cdw-seg{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px}\n.cdwear.cdwear .cdw-seg4{grid-template-columns:repeat(2,minmax(0,1fr))}\n.cdwear.cdwear .cdw-seg label{position:relative;display:block;margin:0}\n.cdwear.cdwear .cdw-seg input{position:absolute;opacity:0;inset:0;margin:0;cursor:pointer}\n.cdwear.cdwear .cdw-seg span{display:flex;align-items:center;justify-content:center;text-align:center;min-height:48px;padding:6px 8px;border:1.5px solid var(--cdw-line);border-radius:8px;background:#fff;\n\tfont-family:var(--font-display,\"Barlow Condensed\"),sans-serif;font-weight:700;font-size:1.05rem;text-transform:uppercase;line-height:1.1;transition:background .12s,border-color .12s}\n.cdwear.cdwear .cdw-seg input:hover+span{border-color:var(--cdw-ink)}\n.cdwear.cdwear .cdw-seg input:checked+span{background:var(--cdw-ink);border-color:var(--cdw-ink);color:var(--cdw-volt)}\n.cdwear.cdwear .cdw-seg input:focus-visible+span{outline:3px solid var(--cdw-volt);outline-offset:2px}\n\n.cdwear.cdwear .cdw-trow{display:flex;align-items:center;gap:12px}\n.cdwear.cdwear .cdw-range{flex:1;min-width:0;height:48px;accent-color:var(--cdw-ink);cursor:pointer}\n.cdwear.cdwear .cdw-tnum{display:inline-flex;align-items:center;gap:4px;font-family:var(--font-display,\"Barlow Condensed\"),sans-serif;font-weight:800;font-size:1.6rem}\n.cdwear.cdwear .cdw-tnum input{width:4.2ch;min-height:48px;padding:4px 6px;border:1.5px solid var(--cdw-line);border-radius:8px;background:#fff;font:inherit;text-align:right;color:var(--cdw-ink)}\n.cdwear.cdwear .cdw-tnum input[aria-invalid=\"true\"]{border-color:#B3261E;background:#FDECEA}\n.cdwear.cdwear .cdw-tnum input:focus-visible,.cdwear.cdwear .cdw-wx input:focus-visible{outline:3px solid var(--cdw-volt);outline-offset:2px}\n\n.cdwear.cdwear .cdw-btn,.cdwear.cdwear .cdw-btn2,.cdwear.cdwear .cdw-btn3{display:inline-flex;align-items:center;justify-content:center;min-height:52px;padding:0 22px;border-radius:8px;border:0;cursor:pointer;text-decoration:none!important;\n\tfont-family:var(--font-display,\"Barlow Condensed\"),sans-serif;font-weight:800;font-size:1.25rem;text-transform:uppercase;letter-spacing:.02em}\n.cdwear.cdwear .cdw-btn{background:var(--cdw-volt);color:var(--cdw-ink)!important}\n.cdwear.cdwear .cdw-btn:hover{background:var(--cdw-ink);color:var(--cdw-volt)!important}\n.cdwear.cdwear .cdw-btn2{background:var(--cdw-ink);color:var(--cdw-volt)!important;font-size:1.05rem;min-height:46px}\n.cdwear.cdwear .cdw-btn3{background:transparent;color:var(--cdw-ink)!important;border:1.5px solid var(--cdw-ink);font-size:1.05rem;min-height:46px}\n.cdwear.cdwear .cdw-btn:focus-visible,.cdwear.cdwear .cdw-btn2:focus-visible,.cdwear.cdwear .cdw-btn3:focus-visible,.cdwear.cdwear .cdw-tick:focus-visible{outline:3px solid var(--cdw-ink);outline-offset:3px}\n.cdwear.cdwear .cdw-form .cdw-btn{width:100%}\n.cdwear.cdwear .cdw-btn2[disabled]{opacity:.6;cursor:progress}\n\n.cdwear.cdwear .cdw-err{background:#FDECEA;border:1px solid #B3261E;color:#5F1410;border-radius:8px;padding:.7rem .9rem;font-size:.95rem}\n\n.cdwear.cdwear .cdw-wx{background:#fff;border:1px dashed var(--cdw-line);border-radius:8px;padding:.6rem .9rem}\n.cdwear.cdwear .cdw-wx summary{cursor:pointer;font-weight:700;min-height:32px;display:flex;align-items:center}\n.cdwear.cdwear .cdw-wx-in{display:grid;gap:.4rem;margin-top:.6rem}\n.cdwear.cdwear .cdw-wx input{min-height:46px;padding:6px 10px;border:1.5px solid var(--cdw-line);border-radius:8px;font:inherit;width:100%}\n.cdwear.cdwear .cdw-wx .cdw-btn2{margin-top:.3rem}\n.cdwear.cdwear .cdw-wxmsg{margin:.2rem 0 0;font-size:.9rem}.cdwear.cdwear .cdw-wxsrc{margin:0;font-size:.75rem;color:var(--cdw-stone)}\n.cdwear.cdwear.cdw-loading .cdw-wxmsg::before{content:\"\";display:inline-block;width:12px;height:12px;margin-right:6px;border:2px solid var(--cdw-ink);border-right-color:transparent;border-radius:50%;animation:cdwspin .8s linear infinite;vertical-align:-1px}\n@keyframes cdwspin{to{transform:rotate(360deg)}}\n\n.cdwear.cdwear .cdw-res{padding:0 16px}\n.cdwear.cdwear .cdw-res:empty{display:none}\n.cdwear.cdwear .cdw-card{background:#fff;border:2px solid var(--cdw-ink);border-radius:12px;overflow:hidden;margin:0 0 1rem;outline:none;scroll-margin-top:90px}\n.cdwear.cdwear .cdw-rh{background:var(--cdw-volt);padding:1rem 1rem .9rem}\n.cdwear.cdwear .cdw-cond{margin:0 0 .35rem;font-family:var(--font-mono,Archivo),sans-serif;font-size:.72rem;letter-spacing:.06em;text-transform:uppercase}\n.cdwear.cdwear .cdw-head{font-family:var(--font-display,\"Barlow Condensed\"),sans-serif;font-weight:800;text-transform:uppercase;font-size:clamp(1.5rem,5.5vw,2.1rem);line-height:1;margin:0 0 .35rem!important;color:var(--cdw-ink)!important}\n.cdwear.cdwear .cdw-feel{margin:0;font-weight:600;font-size:.95rem}\n.cdwear.cdwear .cdw-warn{margin:0;padding:.7rem 1rem .7rem 2rem;background:#FDECEA;color:#5F1410;font-size:.92rem}\n.cdwear.cdwear .cdw-border{margin:0;padding:.7rem 1rem;background:#FFF6DC;font-size:.92rem;border-bottom:1px solid var(--cdw-line)}\n.cdwear.cdwear .cdw-checkhint{margin:.8rem 1rem .2rem;font-family:var(--font-mono,Archivo),sans-serif;font-size:.68rem;letter-spacing:.1em;text-transform:uppercase;color:var(--cdw-stone)}\n.cdwear.cdwear .cdw-list{list-style:none;margin:0;padding:0 .5rem}\n.cdwear.cdwear .cdw-item{border-bottom:1px solid #ECEAE2;padding:.4rem .5rem .7rem}\n.cdwear.cdwear .cdw-item:last-child{border-bottom:0}\n.cdwear.cdwear .cdw-tick{display:grid;grid-template-columns:44px 1fr 28px;align-items:center;gap:10px;width:100%;padding:6px 0;border:0;background:none;text-align:left;cursor:pointer;color:inherit;font:inherit}\n.cdwear.cdwear .cdw-ic{display:flex;align-items:center;justify-content:center;width:44px;height:44px;border-radius:50%;background:var(--cdw-paper);color:var(--cdw-ink)}\n.cdwear.cdwear .cdw-ic svg{width:26px;height:26px}\n.cdwear.cdwear .cdw-txt{display:flex;flex-direction:column;gap:2px;min-width:0}\n.cdwear.cdwear .cdw-cat{font-family:var(--font-mono,Archivo),sans-serif;font-size:.68rem;letter-spacing:.1em;text-transform:uppercase;color:var(--cdw-stone)}\n.cdwear.cdwear .cdw-choice{font-weight:700;font-size:1.02rem;line-height:1.3}\n.cdwear.cdwear .cdw-box{width:26px;height:26px;border:2px solid var(--cdw-ink);border-radius:6px;position:relative}\n.cdwear.cdwear .cdw-item.done .cdw-box{background:var(--cdw-ink)}\n.cdwear.cdwear .cdw-item.done .cdw-box::after{content:\"\";position:absolute;left:7px;top:2px;width:7px;height:13px;border:solid var(--cdw-volt);border-width:0 3px 3px 0;transform:rotate(45deg)}\n.cdwear.cdwear .cdw-item.done .cdw-choice{text-decoration:line-through;text-decoration-color:var(--cdw-volt);text-decoration-thickness:3px}\n.cdwear.cdwear .cdw-why{margin:0 0 0 54px;font-size:.88rem;line-height:1.45;color:#3E3D38}\n.cdwear.cdwear .cdw-sec{padding:.4rem 1rem .2rem;border-top:1px solid #ECEAE2}\n.cdwear.cdwear .cdw-sec h4{font-family:var(--font-display,\"Barlow Condensed\"),sans-serif;font-weight:800;text-transform:uppercase;font-size:1.15rem;margin:.5rem 0 .3rem!important}\n.cdwear.cdwear .cdw-sec ul{margin:0 0 .5rem;padding-left:1.2rem;font-size:.92rem}\n.cdwear.cdwear .cdw-sec li{margin:.2rem 0}\n.cdwear.cdwear .cdw-note{margin:0;padding:.8rem 1rem;background:var(--cdw-paper);font-size:.85rem;color:#3E3D38;border-top:1px solid #ECEAE2}\n.cdwear.cdwear .cdw-brand{margin:0;padding:.5rem 1rem;background:var(--cdw-ink);color:var(--cdw-volt);font-family:var(--font-display,\"Barlow Condensed\"),sans-serif;font-weight:800;text-transform:uppercase;letter-spacing:.06em;font-size:.9rem;text-align:right}\n\n.cdwear.cdwear .cdw-actions{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin:0 0 1.25rem}\n.cdwear.cdwear .cdw-toast{font-size:.9rem;font-weight:600}\n.cdwear.cdwear .cdw-cta{margin:0 0 1.25rem}.cdwear.cdwear .cdw-cta .cdw-btn{width:100%}\n\n.cdwear.cdwear .cdw-sp{margin:0 0 1.5rem;padding:1rem;border:1px solid var(--cdw-line);border-radius:10px;background:#fff}\n.cdwear.cdwear .cdw-sp-l{display:inline-block;margin:0 0 .3rem;padding:2px 8px;border-radius:4px;background:var(--cdw-paper);border:1px solid var(--cdw-line);font-family:var(--font-mono,Archivo),sans-serif;font-size:.68rem;letter-spacing:.12em;text-transform:uppercase}\n.cdwear.cdwear .cdw-sp-n{margin:0 0 .8rem;font-size:.8rem;color:var(--cdw-stone)}\n.cdwear.cdwear .cdw-sp-g{display:grid;gap:10px}\n.cdwear.cdwear .cdw-sp-c{display:grid;grid-template-columns:72px 1fr;gap:12px;align-items:center;padding:8px;border:1px solid #ECEAE2;border-radius:8px;color:var(--cdw-ink)!important;text-decoration:none!important}\n.cdwear.cdwear .cdw-sp-c img{width:72px;height:72px;object-fit:cover;border-radius:6px}\n.cdwear.cdwear .cdw-sp-t{display:flex;flex-direction:column;gap:2px;font-size:.9rem}\n.cdwear.cdwear .cdw-sp-t em{font-style:normal;font-weight:700;color:var(--cdw-ink);text-decoration:underline;text-decoration-color:var(--cdw-volt);text-decoration-thickness:3px}\n.cdwear.cdwear .cdw-sp-ph{border-style:dashed;color:var(--cdw-stone);font-size:.9rem}\n\n@media (min-width:640px){\n\t.cdwear.cdwear .cdw-top{padding:1.75rem 1.5rem 1.4rem}\n\t.cdwear.cdwear .cdw-form{padding:1.5rem 1.5rem 1.75rem;grid-template-columns:1fr 1fr;column-gap:1.25rem}\n\t.cdwear.cdwear .cdw-temp,.cdwear.cdwear .cdw-err,.cdwear.cdwear .cdw-form .cdw-btn,.cdwear.cdwear .cdw-wx{grid-column:1\/-1}\n\t.cdwear.cdwear .cdw-seg4{grid-template-columns:repeat(4,minmax(0,1fr))}\n\t.cdwear.cdwear .cdw-res{padding:0 1.5rem}\n\t.cdwear.cdwear .cdw-cta .cdw-btn{width:auto}\n\t.cdwear.cdwear .cdw-sp-g{grid-template-columns:1fr 1fr}\n}\n@media (prefers-reduced-motion:reduce){.cdwear.cdwear *{transition:none!important;animation:none!important}}<\/style><script>\/*\n * CyclingDestination \u2013 \"Wat trek ik aan op de fiets?\" recommendation engine.\n * Pure rules, no DOM, no network. Used by ui.js in the browser and by tests\/engine.test.js (JavaScriptCore \/ any JS).\n *\n * recommend(input, lang) \u2192 { ok, errors, te, band, headline, items[], pack[], tips[], warnings[], borderline }\n * input: { temp (\u00b0C), cond: dry|cloudy|light_rain|heavy_rain, wind: calm|moderate|strong,\n *          type: road|gravel|mtb, duration: lt1|1to2|2to4|gt4, intensity: easy|moderate|hard }\n *\n * How it works: the air temperature is turned into a \"ride temperature\" (te): what it feels like on the bike once\n * effort, wind, wet, ride length and speed are taken into account. Clothing choices follow te in overlapping steps,\n * with extra rules for rain, wind, long rides and the ride type. Near a step boundary the result is flagged as\n * borderline, because one number never decides the perfect outfit.\n *\/\n(function (root) {\n\t'use strict';\n\n\tvar OPTIONS = {\n\t\tcond: ['dry', 'cloudy', 'light_rain', 'heavy_rain'],\n\t\twind: ['calm', 'moderate', 'strong'],\n\t\ttype: ['road', 'gravel', 'mtb'],\n\t\tduration: ['lt1', '1to2', '2to4', 'gt4'],\n\t\tintensity: ['easy', 'moderate', 'hard']\n\t};\n\tvar TEMP_MIN = -15, TEMP_MAX = 45;\n\n\t\/\/ Step boundaries of the ride temperature (\u00b0C) and their names.\n\tvar BANDS = [\n\t\t{ id: 'hot', min: 24 },\n\t\t{ id: 'summer', min: 18 },\n\t\t{ id: 'mild', min: 13 },\n\t\t{ id: 'cool', min: 8 },\n\t\t{ id: 'cold', min: 3 },\n\t\t{ id: 'winter', min: -Infinity }\n\t];\n\n\tfunction validate(input) {\n\t\tvar errors = [];\n\t\tif (!input || typeof input !== 'object') {\n\t\t\treturn ['input'];\n\t\t}\n\t\tvar t = input.temp;\n\t\tif (t === '' || t === null || t === undefined || typeof t === 'boolean' || isNaN(Number(t))) {\n\t\t\terrors.push('temp');\n\t\t} else if (Number(t) < TEMP_MIN || Number(t) > TEMP_MAX) {\n\t\t\terrors.push('temp_range');\n\t\t}\n\t\tObject.keys(OPTIONS).forEach(function (k) {\n\t\t\tif (OPTIONS[k].indexOf(input[k]) === -1) {\n\t\t\t\terrors.push(k);\n\t\t\t}\n\t\t});\n\t\treturn errors;\n\t}\n\n\t\/\/ Ride temperature: air temperature corrected for what the body feels on the bike.\n\tfunction rideTemp(i) {\n\t\tvar t = Number(i.temp);\n\t\tvar effort = { easy: -2, moderate: 0, hard: 3 }[i.intensity];\n\t\tvar windBase = { calm: 0, moderate: -2, strong: -4 }[i.wind];\n\t\tvar windShelter = { road: 1, gravel: 0.75, mtb: 0.5 }[i.type]; \/\/ forests and lower speeds shelter mountain bikers\n\t\tvar wet = { dry: 0, cloudy: -1, light_rain: -2, heavy_rain: -4 }[i.cond];\n\t\tvar length = { lt1: 1, '1to2': 0, '2to4': -1, gt4: -2 }[i.duration];\n\t\tvar speed = { road: -1, gravel: 0, mtb: 1 }[i.type]; \/\/ road: more airflow; MTB: slower, more bursts of effort\n\t\treturn Math.round((t + effort + windBase * windShelter + wet + length + speed) * 10) \/ 10;\n\t}\n\n\tfunction bandOf(te) {\n\t\tfor (var b = 0; b < BANDS.length; b++) {\n\t\t\tif (te >= BANDS[b].min) {\n\t\t\t\treturn BANDS[b].id;\n\t\t\t}\n\t\t}\n\t\treturn 'winter';\n\t}\n\n\t\/\/ Distance to the nearest step boundary used by the clothing rules.\n\tvar EDGES = [24, 22, 20, 18, 17, 16, 13, 12, 10, 8, 7, 6, 4, 3, 0];\n\tfunction nearEdge(te) {\n\t\tvar d = Infinity;\n\t\tEDGES.forEach(function (e) { d = Math.min(d, Math.abs(te - e)); });\n\t\treturn d;\n\t}\n\n\t\/* ---------- Clothing rules: each returns [choiceCode, reasonCode, params] ---------- *\/\n\n\tfunction base(te, c) {\n\t\tif (te >= 22) return ['base_none', 'r_base_none'];\n\t\tif (te >= 16) return ['base_mesh', 'r_base_mesh'];\n\t\tif (te >= 10) return ['base_short', c.wet ? 'r_base_short_wet' : 'r_base_short'];\n\t\tif (te >= 4) return ['base_long_merino', 'r_base_long_merino'];\n\t\treturn ['base_thermal', 'r_base_thermal'];\n\t}\n\n\tfunction jersey(te, c) {\n\t\tif (te >= 17) return [c.mtb ? 'jersey_short_mtb' : 'jersey_short', 'r_jersey_short'];\n\t\tif (te >= 12) return ['jersey_short_arms', 'r_jersey_short_arms'];\n\t\tif (te >= 7) return ['jersey_long', 'r_jersey_long'];\n\t\treturn ['jersey_thermal', 'r_jersey_thermal'];\n\t}\n\n\tfunction outer(te, c) {\n\t\tif (c.cond === 'heavy_rain') return [te >= 18 ? 'outer_rain_light' : 'outer_rain', te >= 18 ? 'r_outer_rain_warm' : 'r_outer_rain'];\n\t\tif (c.cond === 'light_rain') return te >= 15 ? ['outer_shell', 'r_outer_shell'] : ['outer_rain', 'r_outer_rain'];\n\t\tif (te < 4) return ['outer_winter', 'r_outer_winter'];\n\t\tif (te < 10) return ['outer_wind_jacket', 'r_outer_wind_jacket'];\n\t\tif (te < 17) return ['outer_vest', c.windy ? 'r_outer_vest_wind' : 'r_outer_vest'];\n\t\tif (te < 22 && (c.windy || c.long || c.descents)) return ['outer_vest_pocket', 'r_outer_vest_pocket'];\n\t\treturn ['outer_none', 'r_outer_none'];\n\t}\n\n\tfunction legs(te, c) {\n\t\tvar shorts = c.mtb ? 'legs_shorts_mtb' : 'legs_shorts';\n\t\tif (te >= 18) return [shorts, 'r_legs_shorts'];\n\t\tif (te >= 16 && c.intensity === 'hard') return [shorts, 'r_legs_shorts_hard'];\n\t\tif (te >= 13) return ['legs_knee', 'r_legs_knee'];\n\t\tif (te >= 8) return ['legs_leg', 'r_legs_leg'];\n\t\tif (c.wet) return ['legs_tights_wr', 'r_legs_tights_wr'];\n\t\treturn ['legs_tights', 'r_legs_tights'];\n\t}\n\n\tfunction gloves(te, c) {\n\t\tif (c.wet && te < 12) return ['gloves_waterproof', 'r_gloves_waterproof'];\n\t\tif (te >= 18) return c.mtb ? ['gloves_full_light', 'r_gloves_mtb'] : ['gloves_mitts', 'r_gloves_mitts'];\n\t\tif (te >= 12) return c.intensity === 'hard' && !c.mtb ? ['gloves_mitts', 'r_gloves_mitts_hard'] : ['gloves_full_light', 'r_gloves_full_light'];\n\t\tif (te >= 6) return ['gloves_wind', 'r_gloves_wind'];\n\t\tif (te >= 0) return ['gloves_thermal', 'r_gloves_thermal'];\n\t\treturn ['gloves_winter', 'r_gloves_winter'];\n\t}\n\n\tfunction feet(te, c) {\n\t\tvar walk = c.type !== 'road'; \/\/ gravel and MTB riders walk and push: overshoes wear out and slip\n\t\tif (c.wet) {\n\t\t\tif (walk) return ['feet_wp_socks', 'r_feet_wp_socks'];\n\t\t\treturn [te < 8 ? 'feet_overshoes_thermal_wp' : 'feet_overshoes_wp', 'r_feet_overshoes_wp'];\n\t\t}\n\t\tif (te >= 18) return ['feet_summer', 'r_feet_summer'];\n\t\tif (te >= 12) return (!walk && (c.windy || c.long)) ? ['feet_toecovers', 'r_feet_toecovers'] : ['feet_normal', 'r_feet_normal'];\n\t\tif (te >= 6) return walk ? ['feet_merino', 'r_feet_merino_walk'] : ['feet_merino_overshoes', 'r_feet_merino_overshoes'];\n\t\treturn walk ? ['feet_winter_walk', 'r_feet_winter_walk'] : ['feet_winter_overshoes', 'r_feet_winter_overshoes'];\n\t}\n\n\tfunction head(te, c) {\n\t\tif (c.wet && te >= 6) return ['head_cap_peak', 'r_head_cap_peak'];\n\t\tif (te >= 20) return [c.cond === 'dry' ? 'head_cap_sun' : 'head_none', c.cond === 'dry' ? 'r_head_cap_sun' : 'r_head_none'];\n\t\tif (te >= 13) return ['head_cap', 'r_head_cap'];\n\t\tif (te >= 6) return ['head_band', 'r_head_band'];\n\t\treturn ['head_skull', 'r_head_skull'];\n\t}\n\n\tfunction accessories(te, c) {\n\t\tvar a = [];\n\t\tvar lens = c.cond === 'dry' ? (c.mtb ? 'acc_glasses_light' : 'acc_glasses_tinted') : 'acc_glasses_clear';\n\t\ta.push([lens, c.cond === 'dry' ? (c.mtb ? 'r_acc_glasses_forest' : 'r_acc_glasses_tinted') : 'r_acc_glasses_clear']);\n\t\tif (te < 10) a.push(['acc_neck', 'r_acc_neck']);\n\t\tif (c.cond === 'dry' && Number(c.temp) >= 15) a.push(['acc_sunscreen', 'r_acc_sunscreen']);\n\t\tif (Number(c.temp) >= 26) a.push(['acc_bottles', 'r_acc_bottles']);\n\t\tif (c.cond === 'heavy_rain' && !c.mtb) a.push(['acc_mudguards', 'r_acc_mudguards']);\n\t\treturn a;\n\t}\n\n\tfunction packList(te, c, chosen) {\n\t\tvar p = [];\n\t\tvar outerCode = chosen.outer[0];\n\t\tif ((c.long || c.descents) && te >= 8 && te < 22 && outerCode === 'outer_none') p.push('pack_vest');\n\t\tif (c.cond === 'cloudy' && (c.long || c.duration === '1to2') && te >= 6) p.push('pack_shell');\n\t\tif (chosen.jersey[0] === 'jersey_short_arms' || chosen.legs[0] === 'legs_knee' || chosen.legs[0] === 'legs_leg') p.push('pack_warmers');\n\t\tif (c.wet && c.long) p.push('pack_gloves');\n\t\tif (c.long && te < 8) p.push('pack_dry_layer');\n\t\treturn p;\n\t}\n\n\tfunction tips(te, c) {\n\t\tvar t = [];\n\t\tif (c.descents) t.push('tip_descents');\n\t\tif (c.intensity === 'hard' && te < 13) t.push('tip_hard_cold');\n\t\tif (c.intensity === 'easy' && te < 13) t.push('tip_easy_cold');\n\t\tif (c.wet) t.push('tip_wet');\n\t\tif (c.mtb) t.push('tip_mtb');\n\t\treturn t;\n\t}\n\n\tfunction warnings(c) {\n\t\tvar w = [];\n\t\tvar temp = Number(c.temp);\n\t\tif (temp >= 32) w.push('warn_heat');\n\t\tif (temp <= 1 && (c.wet || c.cond === 'cloudy')) w.push('warn_ice');\n\t\tif (temp <= -8) w.push('warn_frost');\n\t\tif (c.wind === 'strong' && c.cond === 'heavy_rain') w.push('warn_storm');\n\t\treturn w;\n\t}\n\n\tfunction recommend(input, lang) {\n\t\tvar errors = validate(input);\n\t\tvar L = STR[lang] ? lang : 'nl';\n\t\tif (errors.length) {\n\t\t\treturn { ok: false, errors: errors, messages: errors.map(function (e) { return tr(L, 'err_' + e); }) };\n\t\t}\n\t\tvar te = rideTemp(input);\n\t\tvar c = {\n\t\t\ttemp: Number(input.temp), cond: input.cond, wind: input.wind, type: input.type, duration: input.duration,\n\t\t\tintensity: input.intensity,\n\t\t\twet: input.cond === 'light_rain' || input.cond === 'heavy_rain',\n\t\t\twindy: input.wind !== 'calm',\n\t\t\tlong: input.duration === '2to4' || input.duration === 'gt4',\n\t\t\tmtb: input.type === 'mtb',\n\t\t\tdescents: input.type !== 'mtb' && (input.duration === '2to4' || input.duration === 'gt4')\n\t\t};\n\t\tvar chosen = {\n\t\t\tbase: base(te, c), jersey: jersey(te, c), outer: outer(te, c), legs: legs(te, c),\n\t\t\tgloves: gloves(te, c), feet: feet(te, c), head: head(te, c)\n\t\t};\n\t\tvar order = ['base', 'jersey', 'outer', 'legs', 'gloves', 'feet', 'head'];\n\t\tvar items = order.map(function (k) {\n\t\t\treturn { id: k, title: tr(L, 'cat_' + k), code: chosen[k][0], choice: tr(L, chosen[k][0]), reason: tr(L, chosen[k][1]) };\n\t\t});\n\t\tvar acc = accessories(te, c);\n\t\titems.push({\n\t\t\tid: 'acc', title: tr(L, 'cat_acc'), code: acc.map(function (a) { return a[0]; }).join('+'),\n\t\t\tchoice: acc.map(function (a) { return tr(L, a[0]); }).join(' \u00b7 '),\n\t\t\treason: acc.map(function (a) { return tr(L, a[1]); }).join(' ')\n\t\t});\n\t\tvar band = bandOf(te);\n\t\tvar headline = tr(L, 'head_' + band) + (c.wet ? tr(L, 'head_wet') : '');\n\t\treturn {\n\t\t\tok: true, errors: [], te: te, band: band, headline: headline, items: items,\n\t\t\tpack: packList(te, c, chosen).map(function (k) { return { code: k, text: tr(L, k) }; }),\n\t\t\ttips: tips(te, c).map(function (k) { return { code: k, text: tr(L, k) }; }),\n\t\t\twarnings: warnings(c).map(function (k) { return { code: k, text: tr(L, k) }; }),\n\t\t\tborderline: nearEdge(te) <= 1,\n\t\t\tborderlineText: tr(L, 'borderline')\n\t\t};\n\t}\n\n\tfunction tr(lang, key) {\n\t\tvar s = (STR[lang] && STR[lang][key]) || STR.nl[key];\n\t\treturn s === undefined ? key : s;\n\t}\n\n\t\/* ---------- Texts ---------- *\/\n\tvar STR = {\n\t\tnl: {\n\t\t\tcat_base: 'Onderlaag', cat_jersey: 'Shirt', cat_outer: 'Jack of vest', cat_legs: 'Broek', cat_gloves: 'Handschoenen',\n\t\t\tcat_feet: 'Sokken en overschoenen', cat_head: 'Hoofd', cat_acc: 'Extra',\n\t\t\thead_hot: 'Warm: zo luchtig mogelijk', head_summer: 'Zomers: korte mouwen en korte broek',\n\t\t\thead_mild: 'Mild: korte mouwen met arm- en kniestukken', head_cool: 'Fris: lange mouwen en beenstukken',\n\t\t\thead_cold: 'Koud: winterbroek en een winddicht jack', head_winter: 'Winters: alles warm en winddicht',\n\t\t\thead_wet: ', met regenkleding',\n\t\t\tbase_none: 'Geen onderlaag, of een dun mesh-hemdje', r_base_none: 'Bij deze temperatuur wil je vooral je zweet kwijt; een mesh-hemdje voert vocht af zonder warmte toe te voegen.',\n\t\t\tbase_mesh: 'Dun mouwloos ondershirt', r_base_mesh: 'Houdt je huid droog als je zweet en voorkomt dat een nat shirt afkoelt in de afdaling of in de schaduw.',\n\t\t\tbase_short: 'Ondershirt met korte mouwen', r_base_short: 'Een extra laagje dat warmte vasthoudt en zweet afvoert, zonder dat je het te warm krijgt als je doortrapt.',\n\t\t\tr_base_short_wet: 'Kies merino of een synthetisch ondershirt: dat blijft warm, ook als het nat wordt.',\n\t\t\tbase_long_merino: 'Ondershirt met lange mouwen (merino)', r_base_long_merino: 'Merino isoleert ook als het vochtig wordt en ruikt minder; de basis voor koudere ritten.',\n\t\t\tbase_thermal: 'Dik thermisch ondershirt met lange mouwen', r_base_thermal: 'Bij deze kou is de onderste laag het belangrijkst: hij houdt de warmte bij je romp. Een winddichte voorkant helpt extra.',\n\t\t\tjersey_short: 'Fietsshirt met korte mouwen', jersey_short_mtb: 'Shirt met korte mouwen (los of aansluitend)',\n\t\t\tr_jersey_short: 'Ademend en luchtig; meer heb je niet nodig.',\n\t\t\tjersey_short_arms: 'Fietsshirt met korte mouwen + armstukken', r_jersey_short_arms: 'Armstukken kun je onderweg uittrekken en in je achterzak steken als het warmer wordt of als je hard gaat.',\n\t\t\tjersey_long: 'Fietsshirt met lange mouwen', r_jersey_long: 'Lange mouwen houden je armen warm in de rijwind, zonder dat je meteen een jack nodig hebt.',\n\t\t\tjersey_thermal: 'Thermisch shirt met lange mouwen (fleece aan de binnenkant)', r_jersey_thermal: 'Een geruwde binnenkant houdt een laagje warme lucht vast onder je jack.',\n\t\t\touter_none: 'Geen jack nodig', r_outer_none: 'Het is warm genoeg; een jack maakt je alleen nat van het zweet.',\n\t\t\touter_vest: 'Windvest (bodywarmer)', r_outer_vest: 'Een windvest houdt je borst en buik warm in de rijwind en laat je armen vrij; makkelijk op te bergen.',\n\t\t\tr_outer_vest_wind: 'Met deze wind koelt je romp snel af. Een windvest houdt de wind tegen en zit niet in de weg.',\n\t\t\touter_vest_pocket: 'Windvest in je achterzak', r_outer_vest_pocket: 'Overdag te warm om aan te trekken, maar handig voor lange afdalingen, tegenwind of als het later afkoelt.',\n\t\t\touter_wind_jacket: 'Winddicht jack (softshell of thermojack)', r_outer_wind_jacket: 'Onder 10 graden ritgevoel houdt een winddicht jack de kou buiten, vooral in de afdalingen.',\n\t\t\touter_winter: 'Gevoerd winterjack, winddicht', r_outer_winter: 'Een winterjack combineert isolatie en winddichtheid; met een goede onderlaag heb je dan genoeg.',\n\t\t\touter_shell: 'Lichte regenjas om op te bergen', r_outer_shell: 'Met deze temperatuur wordt een dikke regenjas te warm. Een dunne, ademende regenjas houdt de buien tegen en past in je achterzak.',\n\t\t\touter_rain: 'Waterdichte regenjas (getapete naden)', r_outer_rain: 'Nat en fris is de snelste manier om af te koelen. Een echte regenjas houdt je romp droog en warm.',\n\t\t\touter_rain_light: 'Lichte, ademende regenjas', r_outer_rain_warm: 'Het is warm, dus je zweet onder een regenjas. Kies een zo ademend mogelijk exemplaar, of accepteer dat je nat wordt en houd het luchtig.',\n\t\t\tlegs_shorts: 'Korte fietsbroek (bib short)', legs_shorts_mtb: 'Fietsbroek met binnenbroek of een korte MTB-broek', r_legs_shorts: 'Warm genoeg voor blote benen.',\n\t\t\tr_legs_shorts_hard: 'Je gaat hard, dus je benen maken genoeg warmte. Twijfel je, neem dan kniestukken mee.',\n\t\t\tlegs_knee: 'Korte broek + kniestukken', r_legs_knee: 'Je knie\u00ebn hebben weinig spieren en vet om warm te blijven; kniestukken beschermen de gewrichten en kun je onderweg uittrekken.',\n\t\t\tlegs_leg: 'Korte broek + beenstukken (of een driekwart broek)', r_legs_leg: 'Hele benen bedekt, maar flexibel: beenstukken kun je uittrekken als de zon doorkomt.',\n\t\t\tlegs_tights: 'Lange winterbroek (thermisch)', r_legs_tights: 'Bij deze kou wil je je benen helemaal bedekt met een geruwde, warme stof.',\n\t\t\tlegs_tights_wr: 'Lange winterbroek, waterafstotend', r_legs_tights_wr: 'Koud en nat: een waterafstotende winterbroek houdt de nattigheid langer buiten.',\n\t\t\tgloves_mitts: 'Korte handschoenen', r_gloves_mitts: 'Voor grip en demping, en ze beschermen je handen als je valt.',\n\t\t\tr_gloves_mitts_hard: 'Je gaat hard en je handen worden warm genoeg; neem dunne lange handschoenen mee voor de afdaling.',\n\t\t\tgloves_full_light: 'Dunne lange handschoenen', r_gloves_full_light: 'Je vingers koelen als eerste af in de rijwind. Dunne lange handschoenen zijn genoeg.',\n\t\t\tr_gloves_mtb: 'Lange vingers geven grip op de remmen en beschermen tegen takken en vallen.',\n\t\t\tgloves_wind: 'Winddichte handschoenen', r_gloves_wind: 'Winddicht is bij deze temperatuur belangrijker dan dik: de wind maakt je vingers stijf.',\n\t\t\tgloves_thermal: 'Thermische, winddichte handschoenen', r_gloves_thermal: 'Rond het vriespunt verlies je snel gevoel in je vingers; gevoerde handschoenen houden je schakelen en remmen veilig.',\n\t\t\tgloves_winter: 'Winterhandschoenen of kreeftenhandschoenen', r_gloves_winter: 'Onder nul houden handschoenen met twee vingers samen (kreeft) het warmst, en je kunt nog remmen.',\n\t\t\tgloves_waterproof: 'Waterdichte handschoenen (bijvoorbeeld neopreen)', r_gloves_waterproof: 'Natte handen in de kou worden snel gevoelloos. Neopreen blijft warm, ook als er water in komt.',\n\t\t\tfeet_summer: 'Dunne zomersokken', r_feet_summer: 'Ademende sokken voorkomen zweetvoeten.',\n\t\t\tfeet_normal: 'Gewone fietssokken', r_feet_normal: 'Genoeg voor deze temperatuur.',\n\t\t\tfeet_toecovers: 'Fietssokken + teencovers', r_feet_toecovers: 'Wind blaast door de ventilatiegaten van je schoenen. Teencovers houden je tenen warm en zijn klein op te bergen.',\n\t\t\tfeet_merino: 'Merino sokken', r_feet_merino_walk: 'Warm en blijft isoleren als ze vochtig worden; overschoenen zijn onpraktisch als je loopt of duwt.',\n\t\t\tfeet_merino_overshoes: 'Merino sokken + winddichte overschoenen', r_feet_merino_overshoes: 'Voeten bewegen weinig en koelen snel af; overschoenen houden de wind uit je schoenen.',\n\t\t\tfeet_winter_overshoes: 'Dikke wintersokken + gevoerde overschoenen (neopreen)', r_feet_winter_overshoes: 'Koude voeten bederven elke winterrit. Neopreen overschoenen houden wind en kou buiten.',\n\t\t\tfeet_winter_walk: 'Dikke merino sokken, liefst winterschoenen of waterdichte sokken', r_feet_winter_walk: 'Bij gravel en MTB loop je soms; winterschoenen of waterdichte sokken werken dan beter dan overschoenen.',\n\t\t\tfeet_wp_socks: 'Waterdichte sokken', r_feet_wp_socks: 'Overschoenen slijten snel als je loopt; waterdichte sokken houden je voeten warm, ook in plassen.',\n\t\t\tfeet_overshoes_wp: 'Waterdichte overschoenen', feet_overshoes_thermal_wp: 'Gevoerde, waterdichte overschoenen',\n\t\t\tr_feet_overshoes_wp: 'Water komt via de schoen en de zool naar binnen; overschoenen houden je voeten langer droog.',\n\t\t\thead_none: 'Niets extra onder je helm', r_head_none: 'Laat je hoofd zijn warmte kwijtraken.',\n\t\t\thead_cap_sun: 'Fietspetje (optioneel)', r_head_cap_sun: 'Een dun petje houdt zon en zweet uit je ogen.',\n\t\t\thead_cap: 'Fietspetje', r_head_cap: 'Een dun petje houdt je hoofd net wat warmer en het zweet uit je ogen.',\n\t\t\thead_cap_peak: 'Fietspetje met klep', r_head_cap_peak: 'De klep houdt de regen uit je ogen, ook met een bril op.',\n\t\t\thead_band: 'Hoofdband over je oren', r_head_band: 'Je oren zijn gevoelig voor wind; een hoofdband houdt ze warm zonder dat je hoofd te warm wordt.',\n\t\t\thead_skull: 'Thermische muts onder je helm (met oren)', r_head_skull: 'Je verliest veel warmte via je hoofd; een dunne muts past onder de helm.',\n\t\t\tacc_glasses_tinted: 'Fietsbril met getinte glazen', r_acc_glasses_tinted: 'Bescherming tegen zon, wind, insecten en opspattend gruis.',\n\t\t\tacc_glasses_light: 'Fietsbril met lichte of fotochrome glazen', r_acc_glasses_forest: 'In het bos wisselt het licht snel; lichte glazen houden zicht op de wortels.',\n\t\t\tacc_glasses_clear: 'Fietsbril met heldere of fotochrome glazen', r_acc_glasses_clear: 'Houdt regen, wind en vuil uit je ogen, ook als het donker is.',\n\t\t\tacc_neck: 'Nekwarmer (buff)', r_acc_neck: 'Sluit de kraag af waar de kou naar binnen komt en is makkelijk weg te stoppen.',\n\t\t\tacc_sunscreen: 'Zonnebrand', r_acc_sunscreen: 'Ook als het niet heet voelt, verbrand je snel op de fiets.',\n\t\t\tacc_bottles: 'Twee bidons met elektrolyten', r_acc_bottles: 'In de hitte verlies je veel vocht en zout.',\n\t\t\tacc_mudguards: 'Spatborden (als je fiets het toelaat)', r_acc_mudguards: 'Houden de ergste nattigheid van je rug en schoenen.',\n\t\t\tpack_vest: 'Een windvest of dun windjack voor de afdaling of als het afkoelt.',\n\t\t\tpack_shell: 'Een dunne regenjas, voor als de bewolking overgaat in een bui.',\n\t\t\tpack_warmers: 'Ruimte in je achterzak voor arm-, knie- of beenstukken als je ze uittrekt.',\n\t\t\tpack_gloves: 'Een tweede paar handschoenen: droge handschoenen halverwege maken een groot verschil.',\n\t\t\tpack_dry_layer: 'Een droog ondershirt of een extra laag voor de koffiestop.',\n\t\t\ttip_descents: 'Lange afdalingen: rits je jack of vest dicht bovenaan de klim, niet halverwege de afdaling.',\n\t\t\ttip_hard_cold: 'Je gaat hard: begin het eerste kwartier liever iets fris, dan raak je niet doorweekt van het zweet.',\n\t\t\ttip_easy_cold: 'Rustig rijden maakt weinig warmte: kies bij twijfel de warmere optie.',\n\t\t\ttip_wet: 'Nat wordt je toch een beetje; warm blijven is het doel, niet droog blijven.',\n\t\t\ttip_mtb: 'Op de MTB rij je langzamer en vaak beschut, maar bij een pech- of plaspauze koel je snel af; neem een extra laag mee.',\n\t\t\twarn_heat: 'Boven 32 graden: rijd vroeg of laat op de dag, drink veel en neem regelmatig schaduwpauzes.',\n\t\t\twarn_ice: 'Rond het vriespunt met vocht: let op gladheid, vooral op bruggen en in de schaduw.',\n\t\t\twarn_frost: 'Strenge vorst: overweeg een kortere rit of binnen trainen.',\n\t\t\twarn_storm: 'Harde wind met zware regen: kies een beschutte route of stel de rit uit.',\n\t\t\tborderline: 'Je zit op de grens tussen twee keuzes: kies de warmere optie en neem iets mee dat je kunt uittrekken.',\n\t\t\terr_input: 'Er ging iets mis met de invoer.', err_temp: 'Vul een temperatuur in.', err_temp_range: 'Kies een temperatuur tussen \u221215 en 45 \u00b0C.',\n\t\t\terr_cond: 'Kies het weer.', err_wind: 'Kies de wind.', err_type: 'Kies het soort rit.', err_duration: 'Kies hoe lang je rijdt.', err_intensity: 'Kies hoe hard je rijdt.'\n\t\t},\n\t\ten: {\n\t\t\tcat_base: 'Base layer', cat_jersey: 'Jersey', cat_outer: 'Jacket or vest', cat_legs: 'Shorts or tights', cat_gloves: 'Gloves',\n\t\t\tcat_feet: 'Socks and overshoes', cat_head: 'Headwear', cat_acc: 'Extras',\n\t\t\thead_hot: 'Hot: keep it as light as possible', head_summer: 'Summer kit: short sleeves and shorts',\n\t\t\thead_mild: 'Mild: short sleeves with arm and knee warmers', head_cool: 'Cool: long sleeves and leg warmers',\n\t\t\thead_cold: 'Cold: thermal tights and a windproof jacket', head_winter: 'Wintry: everything warm and windproof',\n\t\t\thead_wet: ', plus rain gear',\n\t\t\tbase_none: 'No base layer, or a thin mesh vest', r_base_none: 'At this temperature you mainly want to lose sweat; a mesh vest wicks moisture without adding warmth.',\n\t\t\tbase_mesh: 'Thin sleeveless base layer', r_base_mesh: 'Keeps your skin dry when you sweat, so a damp jersey doesn\\'t chill you on descents or in the shade.',\n\t\t\tbase_short: 'Short-sleeve base layer', r_base_short: 'An extra layer that holds warmth and moves sweat, without overheating when you push on.',\n\t\t\tr_base_short_wet: 'Choose merino or synthetic: it stays warm even when wet.',\n\t\t\tbase_long_merino: 'Long-sleeve merino base layer', r_base_long_merino: 'Merino insulates even when damp and smells less; the foundation for colder rides.',\n\t\t\tbase_thermal: 'Thick thermal long-sleeve base layer', r_base_thermal: 'In this cold the bottom layer matters most: it keeps warmth at your core. A windproof front helps even more.',\n\t\t\tjersey_short: 'Short-sleeve jersey', jersey_short_mtb: 'Short-sleeve top (loose or fitted)',\n\t\t\tr_jersey_short: 'Breathable and light; that\\'s all you need.',\n\t\t\tjersey_short_arms: 'Short-sleeve jersey + arm warmers', r_jersey_short_arms: 'Arm warmers come off and go in your pocket when it warms up or when you go hard.',\n\t\t\tjersey_long: 'Long-sleeve jersey', r_jersey_long: 'Long sleeves keep your arms warm in the airflow without needing a jacket yet.',\n\t\t\tjersey_thermal: 'Thermal long-sleeve jersey (fleece-lined)', r_jersey_thermal: 'A brushed lining traps a layer of warm air under your jacket.',\n\t\t\touter_none: 'No jacket needed', r_outer_none: 'It\\'s warm enough; a jacket would only make you sweaty.',\n\t\t\touter_vest: 'Wind vest (gilet)', r_outer_vest: 'A gilet keeps your chest and stomach warm in the airflow and leaves your arms free; easy to stow.',\n\t\t\tr_outer_vest_wind: 'In this wind your core cools fast. A gilet blocks it without getting in the way.',\n\t\t\touter_vest_pocket: 'Wind vest in your back pocket', r_outer_vest_pocket: 'Too warm to wear now, but handy for long descents, headwinds or when it cools later.',\n\t\t\touter_wind_jacket: 'Windproof jacket (softshell or thermal)', r_outer_wind_jacket: 'Below about 10\u00b0C on the bike, a windproof jacket keeps the cold out, especially downhill.',\n\t\t\touter_winter: 'Insulated windproof winter jacket', r_outer_winter: 'A winter jacket combines insulation and wind protection; with a good base layer that\\'s enough.',\n\t\t\touter_shell: 'Light packable rain jacket', r_outer_shell: 'A heavy rain jacket gets too warm at this temperature. A thin, breathable shell keeps showers off and fits in your pocket.',\n\t\t\touter_rain: 'Waterproof rain jacket (taped seams)', r_outer_rain: 'Wet and cool is the fastest way to get cold. A proper rain jacket keeps your core dry and warm.',\n\t\t\touter_rain_light: 'Light, breathable rain jacket', r_outer_rain_warm: 'It\\'s warm, so you\\'ll sweat under a rain jacket. Choose the most breathable one, or accept getting wet and stay light.',\n\t\t\tlegs_shorts: 'Bib shorts', legs_shorts_mtb: 'Liner shorts or baggy MTB shorts', r_legs_shorts: 'Warm enough for bare legs.',\n\t\t\tr_legs_shorts_hard: 'You\\'re riding hard, so your legs make plenty of heat. If in doubt, take knee warmers.',\n\t\t\tlegs_knee: 'Bib shorts + knee warmers', r_legs_knee: 'Knees have little muscle or fat to stay warm; knee warmers protect the joints and come off on the go.',\n\t\t\tlegs_leg: 'Bib shorts + leg warmers (or 3\/4 knickers)', r_legs_leg: 'Fully covered but flexible: leg warmers come off when the sun comes out.',\n\t\t\tlegs_tights: 'Thermal bib tights', r_legs_tights: 'In this cold you want your legs fully covered in a warm, brushed fabric.',\n\t\t\tlegs_tights_wr: 'Water-repellent thermal tights', r_legs_tights_wr: 'Cold and wet: water-repellent tights keep the wet out for longer.',\n\t\t\tgloves_mitts: 'Fingerless mitts', r_gloves_mitts: 'For grip and padding, and they protect your hands if you fall.',\n\t\t\tr_gloves_mitts_hard: 'You\\'re riding hard and your hands stay warm; take thin full-finger gloves for the descent.',\n\t\t\tgloves_full_light: 'Thin full-finger gloves', r_gloves_full_light: 'Fingers are the first to cool in the airflow. Thin full-finger gloves are enough.',\n\t\t\tr_gloves_mtb: 'Full fingers give grip on the brakes and protect against branches and falls.',\n\t\t\tgloves_wind: 'Windproof gloves', r_gloves_wind: 'At this temperature windproof matters more than thick: the wind makes your fingers stiff.',\n\t\t\tgloves_thermal: 'Thermal windproof gloves', r_gloves_thermal: 'Around freezing your fingers go numb fast; insulated gloves keep shifting and braking safe.',\n\t\t\tgloves_winter: 'Winter or lobster gloves', r_gloves_winter: 'Below zero, lobster gloves (fingers paired) are warmest and still let you brake.',\n\t\t\tgloves_waterproof: 'Waterproof gloves (e.g. neoprene)', r_gloves_waterproof: 'Wet hands in the cold go numb quickly. Neoprene stays warm even when water gets in.',\n\t\t\tfeet_summer: 'Thin summer socks', r_feet_summer: 'Breathable socks prevent sweaty feet.',\n\t\t\tfeet_normal: 'Regular cycling socks', r_feet_normal: 'Enough for this temperature.',\n\t\t\tfeet_toecovers: 'Cycling socks + toe covers', r_feet_toecovers: 'Wind blows through the vents in your shoes. Toe covers keep your toes warm and pack small.',\n\t\t\tfeet_merino: 'Merino socks', r_feet_merino_walk: 'Warm and still insulating when damp; overshoes are impractical when you walk or push.',\n\t\t\tfeet_merino_overshoes: 'Merino socks + windproof overshoes', r_feet_merino_overshoes: 'Feet barely move and cool quickly; overshoes keep the wind out of your shoes.',\n\t\t\tfeet_winter_overshoes: 'Thick winter socks + insulated (neoprene) overshoes', r_feet_winter_overshoes: 'Cold feet ruin any winter ride. Neoprene overshoes keep wind and cold out.',\n\t\t\tfeet_winter_walk: 'Thick merino socks, ideally winter shoes or waterproof socks', r_feet_winter_walk: 'On gravel and MTB you sometimes walk; winter shoes or waterproof socks work better than overshoes.',\n\t\t\tfeet_wp_socks: 'Waterproof socks', r_feet_wp_socks: 'Overshoes wear out fast when you walk; waterproof socks keep your feet warm, even in puddles.',\n\t\t\tfeet_overshoes_wp: 'Waterproof overshoes', feet_overshoes_thermal_wp: 'Insulated waterproof overshoes',\n\t\t\tr_feet_overshoes_wp: 'Water gets in through the shoe and sole; overshoes keep your feet dry for longer.',\n\t\t\thead_none: 'Nothing extra under your helmet', r_head_none: 'Let your head shed heat.',\n\t\t\thead_cap_sun: 'Cycling cap (optional)', r_head_cap_sun: 'A thin cap keeps sun and sweat out of your eyes.',\n\t\t\thead_cap: 'Cycling cap', r_head_cap: 'A thin cap keeps your head a little warmer and sweat out of your eyes.',\n\t\t\thead_cap_peak: 'Cycling cap with a peak', r_head_cap_peak: 'The peak keeps rain out of your eyes, even with glasses on.',\n\t\t\thead_band: 'Headband over your ears', r_head_band: 'Ears are sensitive to wind; a headband keeps them warm without overheating your head.',\n\t\t\thead_skull: 'Thermal skull cap under your helmet (covering ears)', r_head_skull: 'You lose a lot of heat through your head; a thin cap fits under the helmet.',\n\t\t\tacc_glasses_tinted: 'Glasses with tinted lenses', r_acc_glasses_tinted: 'Protection from sun, wind, insects and flying grit.',\n\t\t\tacc_glasses_light: 'Glasses with light or photochromic lenses', r_acc_glasses_forest: 'Light changes fast in the woods; light lenses keep the roots visible.',\n\t\t\tacc_glasses_clear: 'Glasses with clear or photochromic lenses', r_acc_glasses_clear: 'Keeps rain, wind and dirt out of your eyes, even in low light.',\n\t\t\tacc_neck: 'Neck warmer (buff)', r_acc_neck: 'Seals the collar where the cold gets in, and stows easily.',\n\t\t\tacc_sunscreen: 'Sunscreen', r_acc_sunscreen: 'Even when it doesn\\'t feel hot, you burn quickly on the bike.',\n\t\t\tacc_bottles: 'Two bottles with electrolytes', r_acc_bottles: 'In the heat you lose a lot of fluid and salt.',\n\t\t\tacc_mudguards: 'Mudguards (if your bike allows)', r_acc_mudguards: 'Keep the worst of the spray off your back and shoes.',\n\t\t\tpack_vest: 'A wind vest or thin wind jacket for the descent or when it cools.',\n\t\t\tpack_shell: 'A thin rain jacket, in case the clouds turn into a shower.',\n\t\t\tpack_warmers: 'Room in your back pocket for arm, knee or leg warmers when they come off.',\n\t\t\tpack_gloves: 'A second pair of gloves: dry gloves halfway make a big difference.',\n\t\t\tpack_dry_layer: 'A dry base layer or extra layer for the coffee stop.',\n\t\t\ttip_descents: 'Long descents: zip up at the top of the climb, not halfway down.',\n\t\t\ttip_hard_cold: 'You\\'re riding hard: start slightly cool for the first 15 minutes so you don\\'t get soaked in sweat.',\n\t\t\ttip_easy_cold: 'Riding easy makes little heat: if in doubt, choose the warmer option.',\n\t\t\ttip_wet: 'You\\'ll get a bit wet anyway; staying warm is the goal, not staying dry.',\n\t\t\ttip_mtb: 'On the MTB you ride slower and often sheltered, but you cool fast during a puncture or stop; take an extra layer.',\n\t\t\twarn_heat: 'Above 32\u00b0C: ride early or late, drink a lot and take regular shade breaks.',\n\t\t\twarn_ice: 'Around freezing with moisture: watch for ice, especially on bridges and in the shade.',\n\t\t\twarn_frost: 'Hard frost: consider a shorter ride or training indoors.',\n\t\t\twarn_storm: 'Strong wind with heavy rain: pick a sheltered route or postpone the ride.',\n\t\t\tborderline: 'You\\'re on the edge between two choices: go for the warmer option and take something you can take off.',\n\t\t\terr_input: 'Something went wrong with the input.', err_temp: 'Enter a temperature.', err_temp_range: 'Choose a temperature between \u221215 and 45 \u00b0C.',\n\t\t\terr_cond: 'Choose the weather.', err_wind: 'Choose the wind.', err_type: 'Choose your ride type.', err_duration: 'Choose how long you ride.', err_intensity: 'Choose how hard you ride.'\n\t\t}\n\t};\n\n\tvar api = { recommend: recommend, validate: validate, rideTemp: rideTemp, bandOf: bandOf, OPTIONS: OPTIONS, TEMP_MIN: TEMP_MIN, TEMP_MAX: TEMP_MAX, STR: STR };\n\troot.CDWear = api;\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tmodule.exports = api;\n\t}\n})(typeof window !== 'undefined' ? window : this);\n\/*\n * CyclingDestination \u2013 \"Wat trek ik aan op de fiets?\" user interface.\n * Needs engine.js (window.CDWear). Mounts on every element with class \"cdwear\" and reads its config from the\n * data-config attribute (JSON):\n *   { lang: 'nl'|'en', ctaUrl, sponsored: [{name, image, text, url, label?}], editorPlaceholder: bool,\n *     weather: { provider: 'none'|'open-meteo' } }\n * Weather: window.CDWearWeather is the integration point. A provider is { label, attribution,\n * fetch({ query, start: Date, hours }) \u2192 Promise<{ temp, cond, wind, place, time, source }> }. Manual input always works;\n * fetched values only fill the form and can be changed. Nothing is stored except the last inputs in localStorage.\n *\/\n(function () {\n\t'use strict';\n\tvar W = window.CDWear;\n\tif (!W) { return; }\n\n\t\/* ---------- Weather integration point ---------- *\/\n\tvar CDWearWeather = window.CDWearWeather = window.CDWearWeather || { providers: {} };\n\tCDWearWeather.register = function (name, impl) { CDWearWeather.providers[name] = impl; };\n\n\t\/\/ Open-Meteo (no API key). Off by default: their free API is for non-commercial use; switch it on in the snippet\n\t\/\/ config only when the terms fit (or replace it with a provider you have a contract with, via a server-side proxy).\n\tCDWearWeather.register('open-meteo', {\n\t\tlabel: 'Open-Meteo',\n\t\tattribution: 'Weerdata: Open-Meteo.com (CC BY 4.0)',\n\t\tfetch: function (o) {\n\t\t\tvar geo = 'https:\/\/geocoding-api.open-meteo.com\/v1\/search?count=1&format=json&language=' + (o.lang || 'nl') + '&name=' + encodeURIComponent(o.query);\n\t\t\treturn fetchJSON(geo).then(function (g) {\n\t\t\t\tif (!g.results || !g.results.length) { throw new Error('place'); }\n\t\t\t\tvar p = g.results[0];\n\t\t\t\tvar url = 'https:\/\/api.open-meteo.com\/v1\/forecast?latitude=' + p.latitude + '&longitude=' + p.longitude\n\t\t\t\t\t+ '&hourly=temperature_2m,precipitation,wind_speed_10m,cloud_cover&timezone=auto&forecast_days=7';\n\t\t\t\treturn fetchJSON(url).then(function (f) {\n\t\t\t\t\tvar h = f.hourly, want = localHourString(o.start), i = h.time.indexOf(want);\n\t\t\t\t\tif (i < 0) { throw new Error('time'); }\n\t\t\t\t\tvar j = Math.min(h.time.length, i + Math.max(1, o.hours || 1));\n\t\t\t\t\tvar temps = h.temperature_2m.slice(i, j), rain = h.precipitation.slice(i, j), wind = h.wind_speed_10m.slice(i, j), cloud = h.cloud_cover.slice(i, j);\n\t\t\t\t\tvar minT = Math.min.apply(null, temps), maxRain = Math.max.apply(null, rain), maxWind = Math.max.apply(null, wind), avgCloud = avg(cloud);\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttemp: Math.round(minT),\n\t\t\t\t\t\tcond: maxRain >= 2 ? 'heavy_rain' : maxRain >= 0.2 ? 'light_rain' : avgCloud >= 60 ? 'cloudy' : 'dry',\n\t\t\t\t\t\twind: maxWind >= 30 ? 'strong' : maxWind >= 15 ? 'moderate' : 'calm',\n\t\t\t\t\t\tplace: p.name + (p.country ? ', ' + p.country : ''),\n\t\t\t\t\t\ttime: want,\n\t\t\t\t\t\tsource: 'Open-Meteo'\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t});\n\n\tfunction fetchJSON(u) {\n\t\treturn fetch(u).then(function (r) { if (!r.ok) { throw new Error('http'); } return r.json(); });\n\t}\n\tfunction avg(a) { return a.reduce(function (s, x) { return s + x; }, 0) \/ (a.length || 1); }\n\tfunction pad(n) { return (n < 10 ? '0' : '') + n; }\n\tfunction localHourString(d) { return d.getFullYear() + '-' + pad(d.getMonth() + 1) + '-' + pad(d.getDate()) + 'T' + pad(d.getHours()) + ':00'; }\n\n\t\/* ---------- Texts ---------- *\/\n\tvar UI = {\n\t\tnl: {\n\t\t\tey: 'Kledingadvies', h: 'Wat trek ik aan op de fiets?', sub: 'Vul het weer en je rit in en krijg direct een kledingadvies, van onderlaag tot overschoenen.',\n\t\t\ttemp: 'Temperatuur', cond: 'Weer', wind: 'Wind', type: 'Soort rit', duration: 'Hoe lang', intensity: 'Hoe hard',\n\t\t\to: {\n\t\t\t\tdry: 'Droog', cloudy: 'Bewolkt', light_rain: 'Lichte regen', heavy_rain: 'Zware regen',\n\t\t\t\tcalm: 'Rustig', moderate: 'Matig', strong: 'Hard',\n\t\t\t\troad: 'Racefiets', gravel: 'Gravel', mtb: 'MTB',\n\t\t\t\tlt1: '< 1 uur', '1to2': '1\u20132 uur', '2to4': '2\u20134 uur', gt4: '> 4 uur',\n\t\t\t\teasy: 'Rustig', hard: 'Hard'\n\t\t\t},\n\t\t\tom: 'Gemiddeld',\n\t\t\tgo: 'Wat trek ik aan?', again: 'Pas aan', share: 'Deel dit advies', copied: 'Gekopieerd naar je klembord',\n\t\t\twx: 'Weer ophalen voor je rit', wxPlace: 'Plaats', wxStart: 'Start', wxGo: 'Haal weer op', wxBusy: 'Weer ophalen\u2026',\n\t\t\twxOk: 'Ingevuld met de verwachting voor %s om %t. Je kunt alles nog aanpassen.', wxErr: 'Het weer ophalen lukte niet. Vul het zelf in; dat werkt altijd.',\n\t\t\twxPlaceErr: 'Die plaats vonden we niet. Probeer een grotere plaats in de buurt.', wxTimeErr: 'Voor dat tijdstip is (nog) geen verwachting.',\n\t\t\trideTemp: 'Voelt op de fiets als ongeveer %d \u00b0C', pack: 'Neem mee', tips: 'Goed om te weten', note: 'Dit advies is een startpunt. Iedereen ervaart kou en warmte anders: pas het aan aan wat jij prettig vindt en aan het weer van het moment.',\n\t\t\tcheck: 'Afvinken tijdens het aankleden', cta: 'Vind je volgende fietsavontuur', sp: 'Gesponsord', spNote: 'Advertentie. Ons kledingadvies hierboven is onafhankelijk en staat hier los van.',\n\t\t\tspPh: 'Plek voor gesponsorde uitrusting (nog niet ingesteld; alleen zichtbaar voor redacteuren).', spGo: 'Bekijk',\n\t\t\terrHead: 'Even checken', shareTitle: 'Wat trek ik aan op de fiets?'\n\t\t},\n\t\ten: {\n\t\t\tey: 'What to wear', h: 'What should I wear cycling?', sub: 'Enter the weather and your ride and get kit advice straight away, from base layer to overshoes.',\n\t\t\ttemp: 'Temperature', cond: 'Conditions', wind: 'Wind', type: 'Ride type', duration: 'Duration', intensity: 'Intensity',\n\t\t\to: {\n\t\t\t\tdry: 'Dry', cloudy: 'Cloudy', light_rain: 'Light rain', heavy_rain: 'Heavy rain',\n\t\t\t\tcalm: 'Calm', moderate: 'Moderate', strong: 'Strong',\n\t\t\t\troad: 'Road', gravel: 'Gravel', mtb: 'MTB',\n\t\t\t\tlt1: '< 1 hour', '1to2': '1\u20132 hours', '2to4': '2\u20134 hours', gt4: '> 4 hours',\n\t\t\t\teasy: 'Easy', hard: 'Hard'\n\t\t\t},\n\t\t\tom: 'Moderate',\n\t\t\tgo: 'What should I wear?', again: 'Change', share: 'Share this advice', copied: 'Copied to your clipboard',\n\t\t\twx: 'Get the weather for your ride', wxPlace: 'Place', wxStart: 'Start', wxGo: 'Get weather', wxBusy: 'Getting weather\u2026',\n\t\t\twxOk: 'Filled in with the forecast for %s at %t. You can still change everything.', wxErr: 'Couldn\\'t get the weather. Enter it yourself; that always works.',\n\t\t\twxPlaceErr: 'We couldn\\'t find that place. Try a larger town nearby.', wxTimeErr: 'There is no forecast for that time (yet).',\n\t\t\trideTemp: 'Feels like about %d \u00b0C on the bike', pack: 'Take along', tips: 'Good to know', note: 'This advice is a starting point. Everyone feels cold and heat differently: adapt it to your own comfort and the actual conditions.',\n\t\t\tcheck: 'Tick off as you get dressed', cta: 'Find your next cycling adventure', sp: 'Sponsored', spNote: 'Advertisement. Our clothing advice above is independent of it.',\n\t\t\tspPh: 'Space for sponsored gear (not set up yet; only visible to editors).', spGo: 'View',\n\t\t\terrHead: 'Please check', shareTitle: 'What should I wear cycling?'\n\t\t}\n\t};\n\n\tvar ICON = {\n\t\tbase: '<path d=\"M8 3c0 2 1.8 3 4 3s4-1 4-3l2 1v17H6V4z\"\/>',\n\t\tjersey: '<path d=\"M8 3 3 6l2 4 2-1v12h10V9l2 1 2-4-5-3c0 2-1.8 3-4 3S8 5 8 3z\"\/>',\n\t\touter: '<path d=\"M8 3 3 6v15h5V9m8-6 5 3v15h-5V9M8 3c1 1.5 2.3 2 4 2s3-.5 4-2M12 5v16\"\/>',\n\t\tlegs: '<path d=\"M5 3h14l1 9-4 1-2-5-2 0-2 5-4-1z\"\/><path d=\"M8 13 7 21M16 13l1 8\"\/>',\n\t\tgloves: '<path d=\"M7 21v-6L5 10a1.5 1.5 0 0 1 2.6-1.5L9 10V4a1.5 1.5 0 0 1 3 0v6V3a1.5 1.5 0 0 1 3 0v7V5a1.5 1.5 0 0 1 3 0v10l-1 6z\"\/>',\n\t\tfeet: '<path d=\"M9 2h6v9l4 3a3 3 0 0 1-2 6H9a3 3 0 0 1-3-3V2z\"\/><path d=\"M9 6h6\"\/>',\n\t\thead: '<path d=\"M4 15a8 8 0 0 1 16 0z\"\/><path d=\"M4 15h18\"\/>',\n\t\tacc: '<circle cx=\"7\" cy=\"13\" r=\"3.5\"\/><circle cx=\"17\" cy=\"13\" r=\"3.5\"\/><path d=\"M10.5 13h3M3.5 12 2 9M20.5 12 22 9\"\/>'\n\t};\n\tfunction icon(id) { return '<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linejoin=\"round\" stroke-linecap=\"round\">' + (ICON[id] || '') + '<\/svg>'; }\n\tfunction esc(s) { return String(s === undefined || s === null ? '' : s).replace(\/[&<>\"']\/g, function (c) { return { '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;', \"'\": '&#39;' }[c]; }); }\n\n\tvar STORE = 'cdwear.v1';\n\tfunction load() { try { return JSON.parse(localStorage.getItem(STORE) || 'null'); } catch (e) { return null; } }\n\tfunction save(v) { try { localStorage.setItem(STORE, JSON.stringify(v)); } catch (e) { \/* private mode: ignore *\/ } }\n\n\tvar uid = 0;\n\n\tfunction mount(root) {\n\t\tvar cfg = {};\n\t\ttry { cfg = JSON.parse(root.getAttribute('data-config') || '{}'); } catch (e) { cfg = {}; }\n\t\tvar L = UI[cfg.lang] ? cfg.lang : 'nl', T = UI[L];\n\t\tvar provider = cfg.weather && cfg.weather.provider && CDWearWeather.providers[cfg.weather.provider];\n\t\tvar id = 'cdw' + (++uid);\n\t\tvar defaults = { temp: 12, cond: 'dry', wind: 'calm', type: 'road', duration: '1to2', intensity: 'moderate' };\n\t\tvar state = Object.assign({}, defaults, load() || {}, fromUrl());\n\n\t\tfunction seg(name) {\n\t\t\tvar opts = W.OPTIONS[name];\n\t\t\tvar h = '<fieldset class=\"cdw-f\"><legend>' + esc(T[name]) + '<\/legend><div class=\"cdw-seg' + (opts.length > 3 ? ' cdw-seg4' : '') + '\">';\n\t\t\topts.forEach(function (v) {\n\t\t\t\tvar lab = name === 'intensity' && v === 'moderate' ? T.om : T.o[v];\n\t\t\t\th += '<label><input type=\"radio\" name=\"' + id + '-' + name + '\" value=\"' + v + '\"' + (state[name] === v ? ' checked' : '') + '><span>' + esc(lab) + '<\/span><\/label>';\n\t\t\t});\n\t\t\treturn h + '<\/div><\/fieldset>';\n\t\t}\n\n\t\tvar wx = provider ? '<details class=\"cdw-wx\"><summary>' + esc(T.wx) + '<\/summary><div class=\"cdw-wx-in\">'\n\t\t\t+ '<label class=\"cdw-lab\" for=\"' + id + '-place\">' + esc(T.wxPlace) + '<\/label><input id=\"' + id + '-place\" type=\"text\" autocomplete=\"address-level2\" maxlength=\"80\">'\n\t\t\t+ '<label class=\"cdw-lab\" for=\"' + id + '-start\">' + esc(T.wxStart) + '<\/label><input id=\"' + id + '-start\" type=\"datetime-local\" step=\"3600\">'\n\t\t\t+ '<button type=\"button\" class=\"cdw-btn2 cdw-wxgo\">' + esc(T.wxGo) + '<\/button><p class=\"cdw-wxmsg\" role=\"status\"><\/p>'\n\t\t\t+ '<p class=\"cdw-wxsrc\">' + esc(provider.attribution || '') + '<\/p><\/div><\/details>' : '';\n\n\t\troot.innerHTML = '<div class=\"cdw-top\"><p class=\"cdw-ey\">' + esc(T.ey) + '<\/p><h2 class=\"cdw-h\">' + esc(T.h) + '<\/h2><p class=\"cdw-sub\">' + esc(T.sub) + '<\/p><\/div>'\n\t\t\t+ '<form class=\"cdw-form\" novalidate>' + wx\n\t\t\t+ '<div class=\"cdw-f cdw-temp\"><label class=\"cdw-legend\" for=\"' + id + '-t\">' + esc(T.temp) + '<\/label>'\n\t\t\t+ '<div class=\"cdw-trow\"><input id=\"' + id + '-tr\" class=\"cdw-range\" type=\"range\" min=\"' + W.TEMP_MIN + '\" max=\"' + W.TEMP_MAX + '\" step=\"1\" aria-label=\"' + esc(T.temp) + '\">'\n\t\t\t+ '<span class=\"cdw-tnum\"><input id=\"' + id + '-t\" type=\"number\" inputmode=\"numeric\" min=\"' + W.TEMP_MIN + '\" max=\"' + W.TEMP_MAX + '\" step=\"1\"><span aria-hidden=\"true\">\u00b0C<\/span><\/span><\/div><\/div>'\n\t\t\t+ seg('cond') + seg('wind') + seg('type') + seg('duration') + seg('intensity')\n\t\t\t+ '<div class=\"cdw-err\" role=\"alert\" hidden><\/div>'\n\t\t\t+ '<button type=\"submit\" class=\"cdw-btn\">' + esc(T.go) + '<\/button><\/form>'\n\t\t\t+ '<div class=\"cdw-res\" aria-live=\"polite\"><\/div>';\n\n\t\tvar form = root.querySelector('form'), range = root.querySelector('.cdw-range'), num = root.querySelector('#' + id + '-t');\n\t\tvar err = root.querySelector('.cdw-err'), res = root.querySelector('.cdw-res');\n\t\trange.value = num.value = state.temp;\n\t\trange.addEventListener('input', function () { num.value = range.value; });\n\t\tnum.addEventListener('input', function () { if (num.value !== '' && !isNaN(num.value)) { range.value = num.value; } });\n\n\t\tfunction read() {\n\t\t\tvar v = { temp: num.value === '' ? '' : Number(num.value) };\n\t\t\tObject.keys(W.OPTIONS).forEach(function (k) {\n\t\t\t\tvar c = form.querySelector('input[name=\"' + id + '-' + k + '\"]:checked');\n\t\t\t\tv[k] = c ? c.value : '';\n\t\t\t});\n\t\t\treturn v;\n\t\t}\n\t\tfunction write(v) {\n\t\t\tif (v.temp !== undefined) { num.value = range.value = v.temp; }\n\t\t\tObject.keys(W.OPTIONS).forEach(function (k) {\n\t\t\t\tvar c = form.querySelector('input[name=\"' + id + '-' + k + '\"][value=\"' + v[k] + '\"]');\n\t\t\t\tif (c) { c.checked = true; }\n\t\t\t});\n\t\t}\n\n\t\tform.addEventListener('submit', function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar v = read(), r = W.recommend(v, L);\n\t\t\tif (!r.ok) {\n\t\t\t\terr.hidden = false;\n\t\t\t\terr.innerHTML = '<strong>' + esc(T.errHead) + '<\/strong> ' + r.messages.map(esc).join(' ');\n\t\t\t\tnum.setAttribute('aria-invalid', r.errors.some(function (x) { return x.indexOf('temp') === 0; }) ? 'true' : 'false');\n\t\t\t\tvar firstBad = r.errors[0].indexOf('temp') === 0 ? num : form.querySelector('input[name=\"' + id + '-' + r.errors[0] + '\"]');\n\t\t\t\tif (firstBad) { firstBad.focus(); }\n\t\t\t\treturn;\n\t\t\t}\n\t\t\terr.hidden = true;\n\t\t\tnum.removeAttribute('aria-invalid');\n\t\t\tsave(v);\n\t\t\trender(v, r);\n\t\t});\n\n\t\t\/* ---------- weather ---------- *\/\n\t\tif (provider) {\n\t\t\tvar start = root.querySelector('#' + id + '-start'), place = root.querySelector('#' + id + '-place'), msg = root.querySelector('.cdw-wxmsg'), wbtn = root.querySelector('.cdw-wxgo');\n\t\t\tvar d = new Date(); d.setMinutes(0, 0, 0); d.setHours(d.getHours() + 1);\n\t\t\tstart.value = localHourString(d).slice(0, 16);\n\t\t\twbtn.addEventListener('click', function () {\n\t\t\t\tif (!place.value.trim()) { place.focus(); return; }\n\t\t\t\tvar hours = { lt1: 1, '1to2': 2, '2to4': 4, gt4: 6 }[read().duration] || 2;\n\t\t\t\twbtn.disabled = true; msg.textContent = T.wxBusy; root.classList.add('cdw-loading');\n\t\t\t\tprovider.fetch({ query: place.value.trim(), start: new Date(start.value), hours: hours, lang: L }).then(function (w) {\n\t\t\t\t\twrite({ temp: w.temp, cond: w.cond, wind: w.wind, type: read().type, duration: read().duration, intensity: read().intensity });\n\t\t\t\t\tmsg.textContent = T.wxOk.replace('%s', w.place).replace('%t', w.time.replace('T', ' '));\n\t\t\t\t}).catch(function (e) {\n\t\t\t\t\tmsg.textContent = e && e.message === 'place' ? T.wxPlaceErr : e && e.message === 'time' ? T.wxTimeErr : T.wxErr;\n\t\t\t\t}).then(function () { wbtn.disabled = false; root.classList.remove('cdw-loading'); });\n\t\t\t});\n\t\t}\n\n\t\t\/* ---------- result ---------- *\/\n\t\tfunction summary(v) {\n\t\t\treturn v.temp + ' \u00b0C \u00b7 ' + T.o[v.cond] + ' \u00b7 ' + T.wind + ' ' + T.o[v.wind].toLowerCase() + ' \u00b7 ' + T.o[v.type] + ' \u00b7 ' + T.o[v.duration] + ' \u00b7 ' + (v.intensity === 'moderate' ? T.om : T.o[v.intensity]).toLowerCase();\n\t\t}\n\n\t\tfunction render(v, r) {\n\t\t\tvar h = '<article class=\"cdw-card\" tabindex=\"-1\"><header class=\"cdw-rh\"><p class=\"cdw-cond\">' + esc(summary(v)) + '<\/p>'\n\t\t\t\t+ '<h3 class=\"cdw-head\">' + esc(r.headline) + '<\/h3><p class=\"cdw-feel\">' + esc(T.rideTemp.replace('%d', Math.round(r.te))) + '<\/p><\/header>';\n\t\t\tif (r.warnings.length) {\n\t\t\t\th += '<ul class=\"cdw-warn\">' + r.warnings.map(function (w) { return '<li>' + esc(w.text) + '<\/li>'; }).join('') + '<\/ul>';\n\t\t\t}\n\t\t\tif (r.borderline) { h += '<p class=\"cdw-border\">' + esc(r.borderlineText) + '<\/p>'; }\n\t\t\th += '<p class=\"cdw-checkhint\">' + esc(T.check) + '<\/p><ul class=\"cdw-list\">';\n\t\t\tr.items.forEach(function (it) {\n\t\t\t\th += '<li class=\"cdw-item\"><button type=\"button\" class=\"cdw-tick\" aria-pressed=\"false\"><span class=\"cdw-ic\">' + icon(it.id) + '<\/span>'\n\t\t\t\t\t+ '<span class=\"cdw-txt\"><span class=\"cdw-cat\">' + esc(it.title) + '<\/span><span class=\"cdw-choice\">' + esc(it.choice) + '<\/span><\/span><span class=\"cdw-box\" aria-hidden=\"true\"><\/span><\/button>'\n\t\t\t\t\t+ '<p class=\"cdw-why\">' + esc(it.reason) + '<\/p><\/li>';\n\t\t\t});\n\t\t\th += '<\/ul>';\n\t\t\tif (r.pack.length) {\n\t\t\t\th += '<div class=\"cdw-sec\"><h4>' + esc(T.pack) + '<\/h4><ul>' + r.pack.map(function (p) { return '<li>' + esc(p.text) + '<\/li>'; }).join('') + '<\/ul><\/div>';\n\t\t\t}\n\t\t\tif (r.tips.length) {\n\t\t\t\th += '<div class=\"cdw-sec\"><h4>' + esc(T.tips) + '<\/h4><ul>' + r.tips.map(function (p) { return '<li>' + esc(p.text) + '<\/li>'; }).join('') + '<\/ul><\/div>';\n\t\t\t}\n\t\t\th += '<p class=\"cdw-note\">' + esc(T.note) + '<\/p><p class=\"cdw-brand\">cyclingdestination.cc<\/p><\/article>';\n\t\t\th += '<div class=\"cdw-actions\"><button type=\"button\" class=\"cdw-btn2 cdw-share\">' + esc(T.share) + '<\/button><button type=\"button\" class=\"cdw-btn3 cdw-again\">' + esc(T.again) + '<\/button><span class=\"cdw-toast\" role=\"status\"><\/span><\/div>';\n\t\t\tif (cfg.ctaUrl) {\n\t\t\t\th += '<p class=\"cdw-cta\"><a class=\"cdw-btn\" href=\"' + esc(cfg.ctaUrl) + '\">' + esc(T.cta) + ' \u2192<\/a><\/p>';\n\t\t\t}\n\t\t\tvar sp = (cfg.sponsored || []).filter(function (s) { return s && s.name && s.url; });\n\t\t\tif (sp.length) {\n\t\t\t\th += '<aside class=\"cdw-sp\" aria-label=\"' + esc(T.sp) + '\"><p class=\"cdw-sp-l\">' + esc(T.sp) + '<\/p><p class=\"cdw-sp-n\">' + esc(T.spNote) + '<\/p><div class=\"cdw-sp-g\">';\n\t\t\t\tsp.forEach(function (s) {\n\t\t\t\t\th += '<a class=\"cdw-sp-c\" href=\"' + esc(s.url) + '\" target=\"_blank\" rel=\"sponsored nofollow noopener\">'\n\t\t\t\t\t\t+ (s.image ? '<img decoding=\"async\" src=\"' + esc(s.image) + '\" alt=\"\" loading=\"lazy\">' : '')\n\t\t\t\t\t\t+ '<span class=\"cdw-sp-t\"><strong>' + esc(s.name) + '<\/strong>' + (s.text ? '<span>' + esc(s.text) + '<\/span>' : '') + '<em>' + esc(s.label || T.spGo) + ' \u2197<\/em><\/span><\/a>';\n\t\t\t\t});\n\t\t\t\th += '<\/div><\/aside>';\n\t\t\t} else if (cfg.editorPlaceholder) {\n\t\t\t\th += '<aside class=\"cdw-sp cdw-sp-ph\"><p class=\"cdw-sp-l\">' + esc(T.sp) + '<\/p><p>' + esc(T.spPh) + '<\/p><\/aside>';\n\t\t\t}\n\t\t\tres.innerHTML = h;\n\t\t\tvar card = res.querySelector('.cdw-card');\n\t\t\tcard.focus({ preventScroll: true });\n\t\t\tcard.scrollIntoView({ behavior: 'smooth', block: 'start' });\n\t\t\tres.querySelectorAll('.cdw-tick').forEach(function (b) {\n\t\t\t\tb.addEventListener('click', function () { var on = b.getAttribute('aria-pressed') !== 'true'; b.setAttribute('aria-pressed', on); b.closest('.cdw-item').classList.toggle('done', on); });\n\t\t\t});\n\t\t\tres.querySelector('.cdw-again').addEventListener('click', function () { form.scrollIntoView({ behavior: 'smooth' }); num.focus({ preventScroll: true }); });\n\t\t\tres.querySelector('.cdw-share').addEventListener('click', function () { share(v, r); });\n\t\t}\n\n\t\tfunction share(v, r) {\n\t\t\tvar url = new URL(location.href);\n\t\t\t['t', 'c', 'w', 'r', 'd', 'i'].forEach(function (k) { url.searchParams.delete(k); });\n\t\t\turl.searchParams.set('t', v.temp); url.searchParams.set('c', v.cond); url.searchParams.set('w', v.wind);\n\t\t\turl.searchParams.set('r', v.type); url.searchParams.set('d', v.duration); url.searchParams.set('i', v.intensity);\n\t\t\turl.hash = id;\n\t\t\tvar text = summary(v) + '\\n' + r.headline + '\\n' + r.items.map(function (it) { return '\u2022 ' + it.title + ': ' + it.choice; }).join('\\n');\n\t\t\tvar toast = res.querySelector('.cdw-toast');\n\t\t\tif (navigator.share) {\n\t\t\t\tnavigator.share({ title: T.shareTitle, text: text, url: url.toString() }).catch(function () { \/* cancelled *\/ });\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar all = text + '\\n' + url.toString();\n\t\t\tvar done = function () { toast.textContent = T.copied; setTimeout(function () { toast.textContent = ''; }, 3000); };\n\t\t\tif (navigator.clipboard && navigator.clipboard.writeText) {\n\t\t\t\tnavigator.clipboard.writeText(all).then(done, function () { fallbackCopy(all); done(); });\n\t\t\t} else { fallbackCopy(all); done(); }\n\t\t}\n\n\t\t\/\/ Restore a shared link (?t=12&c=dry&w=calm&r=road&d=1to2&i=moderate) and show the result straight away.\n\t\tvar q = fromUrl();\n\t\troot.id = id;\n\t\tif (Object.keys(q).length >= 6) { form.requestSubmit ? form.requestSubmit() : form.dispatchEvent(new Event('submit', { cancelable: true })); }\n\t}\n\n\tfunction fromUrl() {\n\t\tvar q = new URLSearchParams(location.search), v = {};\n\t\tvar map = { t: 'temp', c: 'cond', w: 'wind', r: 'type', d: 'duration', i: 'intensity' };\n\t\tObject.keys(map).forEach(function (k) {\n\t\t\tvar x = q.get(k);\n\t\t\tif (x === null) { return; }\n\t\t\tif (k === 't') { if (!isNaN(Number(x))) { v.temp = Number(x); } } else if (W.OPTIONS[map[k]].indexOf(x) > -1) { v[map[k]] = x; }\n\t\t});\n\t\treturn v;\n\t}\n\n\tfunction fallbackCopy(s) {\n\t\tvar ta = document.createElement('textarea');\n\t\tta.value = s; ta.setAttribute('readonly', ''); ta.style.position = 'fixed'; ta.style.opacity = '0';\n\t\tdocument.body.appendChild(ta); ta.select();\n\t\ttry { document.execCommand('copy'); } catch (e) { \/* nothing more we can do *\/ }\n\t\tta.remove();\n\t}\n\n\tfunction init() { document.querySelectorAll('.cdwear:not([data-ready])').forEach(function (el) { el.setAttribute('data-ready', '1'); mount(el); }); }\n\tif (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); }\n})();<\/script>\n\n\n\n<h2 class=\"wp-block-heading\">Zo werkt het advies<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Op de fiets voelt het anders dan op de thermometer. Daarom rekent de tool eerst uit hoe warm het <em>op de fiets<\/em> voelt. Hard rijden maakt warmte, dus dan kleed je je lichter. Wind, regen en lange afdalingen koelen je juist af. Op de racefiets heb je meer rijwind dan op de MTB in het bos, en op een lange rit verandert het weer vaker en word je moe. Met die \u201crijtemperatuur\u201d kiest de tool per laag wat past, met extra regels voor regen, wind en lange ritten.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Drie gouden regels<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Liever iets te fris bij de start.<\/strong> Na tien minuten trappen ben je warm. Wie warm vertrekt, rijdt de rest van de rit in een nat shirt.<\/li>\n\n<li><strong>Lagen die je kunt uittrekken.<\/strong> Arm-, knie- en beenstukken en een windvest passen in je achterzak. Zo kleed je je onderweg bij of af.<\/li>\n\n<li><strong>Handen, voeten en oren eerst.<\/strong> Die koelen het snelst af. Een paar dunne handschoenen, teencovers of een hoofdband maken vaak meer verschil dan een dikker jack.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Het advies is een startpunt: iedereen ervaart kou en warmte anders. Twijfel je, kies dan de warmere optie en neem iets mee dat je kunt uittrekken. Op zoek naar de beste plek om in een bepaalde maand te fietsen? Kijk in onze <a href=\"\/wanneer-gaan\">fietsweer-planner<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Enter the weather and your route and get immediate clothing advice for your race bike, gravel bike or mountain bike: from undergarments to overshoes, with explanations for each layer.<\/p>","protected":false},"author":1,"featured_media":19517,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"cd_lat":"","cd_lng":"","footnotes":""},"categories":[348,121],"tags":[],"thema":[],"plek":[],"class_list":["post-34573","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-materiaal","category-tips"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Wat trek ik aan op de fiets? Kledingadvies per temperatuur<\/title>\n<meta name=\"description\" content=\"Welke fietskleding bij welke temperatuur? Vul het weer en je rit in en krijg direct advies voor racefiets, gravel en MTB: onderlaag, shirt, jack, broek, handschoenen en overschoenen.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cyclingdestination.cc\/en\/tips\/what-do-i-wear-on-the-bike\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Wat trek ik aan op de fiets? Kledingadvies per temperatuur\" \/>\n<meta property=\"og:description\" content=\"Welke fietskleding bij welke temperatuur? Vul het weer en je rit in en krijg direct advies voor racefiets, gravel en MTB: onderlaag, shirt, jack, broek, handschoenen en overschoenen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cyclingdestination.cc\/en\/tips\/what-do-i-wear-on-the-bike\/\" \/>\n<meta property=\"og:site_name\" content=\"Cycling Destination\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/cyclingdestination.cc\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-12T12:56:53+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cyclingdestination.cc\/wp-content\/uploads\/2026\/09\/Sella-Ronda-credits-Adam-Kolarski-scaled.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1618\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/><meta property=\"og:image\" content=\"https:\/\/cyclingdestination.cc\/wp-content\/uploads\/2024\/10\/Cyclingdestination-MerlijnSPhotography-8168.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1655\" \/>\n\t<meta property=\"og:image:height\" content=\"1103\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Sander Kolsloot\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Sander Kolsloot\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/cyclingdestination.cc\\\/tips\\\/wat-trek-ik-aan-op-de-fiets#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/cyclingdestination.cc\\\/tips\\\/wat-trek-ik-aan-op-de-fiets\"},\"author\":{\"name\":\"Sander Kolsloot\",\"@id\":\"https:\\\/\\\/cyclingdestination.cc\\\/#\\\/schema\\\/person\\\/ad620ef5894a78a5a7631c91bee52348\"},\"headline\":\"Wat trek ik aan op de fiets? Kledingadvies voor elk weer\",\"datePublished\":\"2026-10-12T12:56:53+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/cyclingdestination.cc\\\/tips\\\/wat-trek-ik-aan-op-de-fiets\"},\"wordCount\":278,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/cyclingdestination.cc\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/cyclingdestination.cc\\\/tips\\\/wat-trek-ik-aan-op-de-fiets#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/cyclingdestination.cc\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/Cyclingdestination-MerlijnSPhotography-8168.jpg\",\"articleSection\":[\"Materiaal\",\"Tips\"],\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/cyclingdestination.cc\\\/tips\\\/wat-trek-ik-aan-op-de-fiets#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/cyclingdestination.cc\\\/tips\\\/wat-trek-ik-aan-op-de-fiets\",\"url\":\"https:\\\/\\\/cyclingdestination.cc\\\/tips\\\/wat-trek-ik-aan-op-de-fiets\",\"name\":\"Wat trek ik aan op de fiets? Kledingadvies per temperatuur\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/cyclingdestination.cc\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/cyclingdestination.cc\\\/tips\\\/wat-trek-ik-aan-op-de-fiets#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/cyclingdestination.cc\\\/tips\\\/wat-trek-ik-aan-op-de-fiets#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/cyclingdestination.cc\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/Cyclingdestination-MerlijnSPhotography-8168.jpg\",\"datePublished\":\"2026-10-12T12:56:53+00:00\",\"description\":\"Welke fietskleding bij welke temperatuur? Vul het weer en je rit in en krijg direct advies voor racefiets, gravel en MTB: onderlaag, shirt, jack, broek, handschoenen en overschoenen.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/cyclingdestination.cc\\\/tips\\\/wat-trek-ik-aan-op-de-fiets#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/cyclingdestination.cc\\\/tips\\\/wat-trek-ik-aan-op-de-fiets\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/cyclingdestination.cc\\\/tips\\\/wat-trek-ik-aan-op-de-fiets#primaryimage\",\"url\":\"https:\\\/\\\/cyclingdestination.cc\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/Cyclingdestination-MerlijnSPhotography-8168.jpg\",\"contentUrl\":\"https:\\\/\\\/cyclingdestination.cc\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/Cyclingdestination-MerlijnSPhotography-8168.jpg\",\"width\":1655,\"height\":1103,\"caption\":\"Het regenjack &#8211; een topper!\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/cyclingdestination.cc\\\/tips\\\/wat-trek-ik-aan-op-de-fiets#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/cyclingdestination.cc\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Wat trek ik aan op de fiets? Kledingadvies voor elk weer\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/cyclingdestination.cc\\\/#website\",\"url\":\"https:\\\/\\\/cyclingdestination.cc\\\/\",\"name\":\"CyclingDestination\",\"description\":\"Begin jouw fietsavontuur hier\",\"publisher\":{\"@id\":\"https:\\\/\\\/cyclingdestination.cc\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/cyclingdestination.cc\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/cyclingdestination.cc\\\/#organization\",\"name\":\"CyclingDestination\",\"url\":\"https:\\\/\\\/cyclingdestination.cc\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/cyclingdestination.cc\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/cyclingdestination.cc\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/cyclingdestination_instagram-profiel_vDEF1.png\",\"contentUrl\":\"https:\\\/\\\/cyclingdestination.cc\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/cyclingdestination_instagram-profiel_vDEF1.png\",\"width\":375,\"height\":375,\"caption\":\"CyclingDestination\"},\"image\":{\"@id\":\"https:\\\/\\\/cyclingdestination.cc\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/cyclingdestination.cc\\\/\",\"https:\\\/\\\/www.instagram.com\\\/cyclingdestination.cc\\\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/cyclingdestination.cc\\\/#\\\/schema\\\/person\\\/ad620ef5894a78a5a7631c91bee52348\",\"name\":\"Sander Kolsloot\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/cyclingdestination.cc\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/cd-favicon-150x150.webp\",\"url\":\"https:\\\/\\\/cyclingdestination.cc\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/cd-favicon-150x150.webp\",\"contentUrl\":\"https:\\\/\\\/cyclingdestination.cc\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/cd-favicon-150x150.webp\",\"caption\":\"Sander Kolsloot\"},\"sameAs\":[\"http:\\\/\\\/cyclingdestination.cc\"],\"url\":\"https:\\\/\\\/cyclingdestination.cc\\\/en\\\/author\\\/admin\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"What should I wear on my bike? Clothing advice by temperature","description":"Which cycling clothing for which temperature? Fill in the weather and your ride details and get advice immediately for road, gravel and mountain bikes: undergarment, shirt, jacket, pants, gloves and overshoes.","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:\/\/cyclingdestination.cc\/en\/tips\/what-do-i-wear-on-the-bike\/","og_locale":"en_GB","og_type":"article","og_title":"Wat trek ik aan op de fiets? Kledingadvies per temperatuur","og_description":"Welke fietskleding bij welke temperatuur? Vul het weer en je rit in en krijg direct advies voor racefiets, gravel en MTB: onderlaag, shirt, jack, broek, handschoenen en overschoenen.","og_url":"https:\/\/cyclingdestination.cc\/en\/tips\/what-do-i-wear-on-the-bike\/","og_site_name":"Cycling Destination","article_publisher":"https:\/\/www.facebook.com\/cyclingdestination.cc\/","article_published_time":"2026-10-12T12:56:53+00:00","og_image":[{"width":2560,"height":1618,"url":"https:\/\/cyclingdestination.cc\/wp-content\/uploads\/2026\/09\/Sella-Ronda-credits-Adam-Kolarski-scaled.jpg","type":"image\/jpeg"},{"width":1655,"height":1103,"url":"https:\/\/cyclingdestination.cc\/wp-content\/uploads\/2024\/10\/Cyclingdestination-MerlijnSPhotography-8168.jpg","type":"image\/jpeg"}],"author":"Sander Kolsloot","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Sander Kolsloot","Estimated reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/cyclingdestination.cc\/tips\/wat-trek-ik-aan-op-de-fiets#article","isPartOf":{"@id":"https:\/\/cyclingdestination.cc\/tips\/wat-trek-ik-aan-op-de-fiets"},"author":{"name":"Sander Kolsloot","@id":"https:\/\/cyclingdestination.cc\/#\/schema\/person\/ad620ef5894a78a5a7631c91bee52348"},"headline":"Wat trek ik aan op de fiets? Kledingadvies voor elk weer","datePublished":"2026-10-12T12:56:53+00:00","mainEntityOfPage":{"@id":"https:\/\/cyclingdestination.cc\/tips\/wat-trek-ik-aan-op-de-fiets"},"wordCount":278,"commentCount":0,"publisher":{"@id":"https:\/\/cyclingdestination.cc\/#organization"},"image":{"@id":"https:\/\/cyclingdestination.cc\/tips\/wat-trek-ik-aan-op-de-fiets#primaryimage"},"thumbnailUrl":"https:\/\/cyclingdestination.cc\/wp-content\/uploads\/2024\/10\/Cyclingdestination-MerlijnSPhotography-8168.jpg","articleSection":["Materiaal","Tips"],"inLanguage":"en-GB","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/cyclingdestination.cc\/tips\/wat-trek-ik-aan-op-de-fiets#respond"]}]},{"@type":"WebPage","@id":"https:\/\/cyclingdestination.cc\/tips\/wat-trek-ik-aan-op-de-fiets","url":"https:\/\/cyclingdestination.cc\/tips\/wat-trek-ik-aan-op-de-fiets","name":"What should I wear on my bike? Clothing advice by temperature","isPartOf":{"@id":"https:\/\/cyclingdestination.cc\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cyclingdestination.cc\/tips\/wat-trek-ik-aan-op-de-fiets#primaryimage"},"image":{"@id":"https:\/\/cyclingdestination.cc\/tips\/wat-trek-ik-aan-op-de-fiets#primaryimage"},"thumbnailUrl":"https:\/\/cyclingdestination.cc\/wp-content\/uploads\/2024\/10\/Cyclingdestination-MerlijnSPhotography-8168.jpg","datePublished":"2026-10-12T12:56:53+00:00","description":"Which cycling clothing for which temperature? Fill in the weather and your ride details and get advice immediately for road, gravel and mountain bikes: undergarment, shirt, jacket, pants, gloves and overshoes.","breadcrumb":{"@id":"https:\/\/cyclingdestination.cc\/tips\/wat-trek-ik-aan-op-de-fiets#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cyclingdestination.cc\/tips\/wat-trek-ik-aan-op-de-fiets"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/cyclingdestination.cc\/tips\/wat-trek-ik-aan-op-de-fiets#primaryimage","url":"https:\/\/cyclingdestination.cc\/wp-content\/uploads\/2024\/10\/Cyclingdestination-MerlijnSPhotography-8168.jpg","contentUrl":"https:\/\/cyclingdestination.cc\/wp-content\/uploads\/2024\/10\/Cyclingdestination-MerlijnSPhotography-8168.jpg","width":1655,"height":1103,"caption":"Het regenjack &#8211; een topper!"},{"@type":"BreadcrumbList","@id":"https:\/\/cyclingdestination.cc\/tips\/wat-trek-ik-aan-op-de-fiets#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cyclingdestination.cc\/"},{"@type":"ListItem","position":2,"name":"Wat trek ik aan op de fiets? Kledingadvies voor elk weer"}]},{"@type":"WebSite","@id":"https:\/\/cyclingdestination.cc\/#website","url":"https:\/\/cyclingdestination.cc\/","name":"CyclingDestination","description":"Start your bike adventure here","publisher":{"@id":"https:\/\/cyclingdestination.cc\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cyclingdestination.cc\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Organization","@id":"https:\/\/cyclingdestination.cc\/#organization","name":"CyclingDestination","url":"https:\/\/cyclingdestination.cc\/","logo":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/cyclingdestination.cc\/#\/schema\/logo\/image\/","url":"https:\/\/cyclingdestination.cc\/wp-content\/uploads\/2026\/09\/cyclingdestination_instagram-profiel_vDEF1.png","contentUrl":"https:\/\/cyclingdestination.cc\/wp-content\/uploads\/2026\/09\/cyclingdestination_instagram-profiel_vDEF1.png","width":375,"height":375,"caption":"CyclingDestination"},"image":{"@id":"https:\/\/cyclingdestination.cc\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/cyclingdestination.cc\/","https:\/\/www.instagram.com\/cyclingdestination.cc\/"]},{"@type":"Person","@id":"https:\/\/cyclingdestination.cc\/#\/schema\/person\/ad620ef5894a78a5a7631c91bee52348","name":"Sander Kolsloot","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/cyclingdestination.cc\/wp-content\/uploads\/2026\/09\/cd-favicon-150x150.webp","url":"https:\/\/cyclingdestination.cc\/wp-content\/uploads\/2026\/09\/cd-favicon-150x150.webp","contentUrl":"https:\/\/cyclingdestination.cc\/wp-content\/uploads\/2026\/09\/cd-favicon-150x150.webp","caption":"Sander Kolsloot"},"sameAs":["http:\/\/cyclingdestination.cc"],"url":"https:\/\/cyclingdestination.cc\/en\/author\/admin"}]}},"_links":{"self":[{"href":"https:\/\/cyclingdestination.cc\/en\/wp-json\/wp\/v2\/posts\/34573","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cyclingdestination.cc\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cyclingdestination.cc\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cyclingdestination.cc\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cyclingdestination.cc\/en\/wp-json\/wp\/v2\/comments?post=34573"}],"version-history":[{"count":0,"href":"https:\/\/cyclingdestination.cc\/en\/wp-json\/wp\/v2\/posts\/34573\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cyclingdestination.cc\/en\/wp-json\/wp\/v2\/media\/19517"}],"wp:attachment":[{"href":"https:\/\/cyclingdestination.cc\/en\/wp-json\/wp\/v2\/media?parent=34573"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cyclingdestination.cc\/en\/wp-json\/wp\/v2\/categories?post=34573"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cyclingdestination.cc\/en\/wp-json\/wp\/v2\/tags?post=34573"},{"taxonomy":"thema","embeddable":true,"href":"https:\/\/cyclingdestination.cc\/en\/wp-json\/wp\/v2\/thema?post=34573"},{"taxonomy":"plek","embeddable":true,"href":"https:\/\/cyclingdestination.cc\/en\/wp-json\/wp\/v2\/plek?post=34573"}],"curies":[{"name":"Well played","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}