Madeira Ative
ContactContacto
🏆
MIUT Analytics
17 editions · records · growth · countries · DNF rates17 edições · recordes · crescimento · países · taxas de desistência
📈
Key FactsFactos
Total distance, elevation & race countDistância total, desnível e contagem de corridas
📅
Event CalendarCalendário
Year wheel of all races & trail-only eventsRoda anual de todas as corridas e eventos de trail
🗺️
Trail MapMapa de Trilhos
Interactive heatmap of all race routesMapa interativo de todas as rotas
🏗️
Fun ComparisonsComparações Divertidas
Buildings climbed, steps taken, flat equivalentEdifícios escalados, degraus, equivalente plano
Difficulty ScatterDificuldade
Distance vs elevation gain for each raceDistância vs desnível de cada corrida
📊
Elevation & SteepnessDesnível e Inclinação
Gain bars + gradient comparison (1:X ratio)Barras de desnível + comparação de inclinação
🏔️
Elevation ProfilesPerfis de Elevação
GPX-based route profiles for each trailPerfis de rota GPX para cada trilho
🌍
All RacesTodas as Corridas
Growth, records, clubs, localities, loyalty, DNF, finish times & moreCrescimento, recordes, clubes, localidades, fidelidade, DNF e mais
🧪
Interactive PrototypesProtótipos Interativos
Race simulator · difficulty scores · race compare · shareable cards · world benchmarks · finish timelapse · country heatmapSimulador de corrida · scores de dificuldade · comparação · cartões · benchmarks mundiais · timelapse · mapa de países

Trail MapMapa de Trilhos

Annual Event CalendarCalendário Anual de Eventos

All EventsTodos os Eventos
Trail & UltraTrail & Ultra

Difficulty Map: Distance vs Elevation GainMapa de Dificuldade: Distância vs Desnível

Elevation & SteepnessDesnível e Inclinação

Fun ComparisonsComparações Divertidas

What does each race's elevation gain really feel like?O que o desnível de cada corrida realmente significa?

Elevation ProfilesPerfis de Elevação

MIUT — Madeira Island Ultra Trail

Loading MIUT data...

All Madeira Trail Races — AnalyticsTodas as Corridas de Trail da Madeira — Análise

Loading data...
'); } function downloadPdf() { var head = exportHead(), rows = exportRows(); var w = window.open('', '_blank'); if (!w) return; var th = head.map(function (h) { return '' + h + ''; }).join(''); var tb = rows.map(function (r) { return '' + r.slice(0, 8).map(function (c) { return '' + String(c).replace(/&/g, '&').replace(/'; }).join('') + ''; }).join(''); w.document.write('' + (TC.title || 'Trail Madeira') + '' + '' + '

' + (TC.title || '') + '

' + th.replace('', '') + '' + tb + '
' + ''); w.document.close(); setTimeout(function () { w.focus(); w.print(); }, 400); } function toggleFull() { document.querySelector('.trail-cal-dialog').classList.toggle('full'); document.getElementById('trailCalOverlay').classList.toggle('full-overlay'); } document.getElementById('trailCalMini').addEventListener('click', openModal); document.getElementById('trailCalClose').addEventListener('click', closeModal); document.getElementById('trailCalCsv').addEventListener('click', downloadCsv); document.getElementById('trailCalXls').addEventListener('click', downloadXls); document.getElementById('trailCalPdf').addEventListener('click', downloadPdf); document.getElementById('trailCalFull').addEventListener('click', toggleFull); document.getElementById('trailCalOverlay').addEventListener('click', function (e) { if (e.target === this) closeModal(); }); document.addEventListener('keydown', function (e) { if (e.key === 'Escape') closeModal(); }); window.addEventListener('trailcal:lang', function () { renderMini(); if (!document.getElementById('trailCalOverlay').hidden) renderTable(); }); fetch('trail_calendar.json').then(function (r) { return r.json(); }).then(function (d) { TC = d; renderMini(); if (location.hash === '#calendar') { var el = document.getElementById('trailCalMini'); if (el) { setTimeout(function () { el.scrollIntoView({ behavior: 'smooth', block: 'center' }); el.style.boxShadow = '0 0 0 3px #1F4D32'; setTimeout(function () { el.style.boxShadow = ''; }, 2200); }, 350); // charts above render for a few seconds and shift the layout — // silently re-anchor until the calendar sits in the viewport var tries = 0; var anchor = setInterval(function () { var vh = window.innerHeight || document.documentElement.clientHeight; if (vh > 0) { var r = el.getBoundingClientRect(); if (r.top < 0 || r.bottom > vh) el.scrollIntoView({ block: 'center' }); } if (++tries >= 8) clearInterval(anchor); }, 800); } } }); })();