|
<!DOCTYPE html> |
|
<html lang="en" class="dark"> |
|
<head> |
|
<meta charset="UTF-8"> |
|
<meta charset="UTF-8"> |
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
|
<title>RIS - Relative Index for Streetlifting | 2025 Edition Official Calculator</title> |
|
<meta name="description" content="Calculate your Relative Index for Streetlifting (RIS) score. The official 2025 calculator for fair comparison between athletes of different weights."> |
|
<meta name="keywords" content="RIS, Relative Index for Streetlifting, streetlifting, strength calculator, bodyweight ratio, strength comparison, RIS calculator"> |
|
<meta name="author" content="Waris Radji & Mathieu Ardoin"> |
|
|
|
|
|
<meta property="og:title" content="RIS - Relative Index for Streetlifting | 2025 Edition"> |
|
<meta property="og:description" content="Calculate your Relative Index for Streetlifting (RIS) score. The official 2025 calculator for fair comparison between athletes of different weights."> |
|
<meta property="og:type" content="website"> |
|
<meta property="og:url" content="https://warisradji.com/ris"> |
|
<script src="https://cdn.tailwindcss.com"></script> |
|
<script src="https://cdn.plot.ly/plotly-3.0.0.min.js" charset="utf-8"></script> |
|
<script src="static/ris.js"></script> |
|
|
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/atom-one-dark.min.css"> |
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js"></script> |
|
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/javascript.min.js"></script> |
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/excel.min.js"></script> |
|
<script> |
|
tailwind.config = { |
|
darkMode: 'class', |
|
theme: { |
|
extend: { |
|
colors: { |
|
dark: { |
|
100: '#0F0F0F', |
|
200: '#1A1A1A', |
|
300: '#2A2A2A', |
|
400: '#3A3A3A', |
|
}, |
|
accent: { |
|
100: '#6366F1', |
|
200: '#4F46E5', |
|
} |
|
}, |
|
fontFamily: { |
|
sans: ['Inter', 'system-ui', 'sans-serif'], |
|
}, |
|
} |
|
} |
|
} |
|
</script> |
|
<<link href="https://fonts.googleapis.com/css2?family=DM+Serif+Display&display=swap" rel="stylesheet"> |
|
<style> |
|
body { font-family: 'Roboto Flex', sans-serif; } |
|
h1, h2, h3 { font-family: 'DM Serif Display', serif; } |
|
|
|
|
|
::-webkit-scrollbar { |
|
width: 6px; |
|
height: 6px; |
|
} |
|
::-webkit-scrollbar-track { |
|
background: #1A1A1A; |
|
} |
|
::-webkit-scrollbar-thumb { |
|
background: #3A3A3A; |
|
border-radius: 6px; |
|
} |
|
::-webkit-scrollbar-thumb:hover { |
|
background: #4A4A4A; |
|
} |
|
|
|
|
|
.plot-container { |
|
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1); |
|
} |
|
|
|
|
|
.js-plotly-plot .plotly .hoverlayer .hover { |
|
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.4) !important; |
|
} |
|
|
|
|
|
.hljs { |
|
background: #1A1A1A !important; |
|
border-radius: 4px; |
|
padding: 1rem !important; |
|
font-size: 0.8rem !important; |
|
} |
|
|
|
.code-block-wrapper { |
|
position: relative; |
|
} |
|
|
|
.copy-button { |
|
position: absolute; |
|
top: 8px; |
|
right: 8px; |
|
background: #3A3A3A; |
|
border: none; |
|
border-radius: 4px; |
|
color: #e2e8f0; |
|
padding: 2px 8px; |
|
font-size: 12px; |
|
cursor: pointer; |
|
opacity: 0; |
|
transition: opacity 0.2s; |
|
} |
|
|
|
.code-block-wrapper:hover .copy-button { |
|
opacity: 1; |
|
} |
|
|
|
.copy-button:hover { |
|
background: #4F46E5; |
|
} |
|
</style> |
|
</head> |
|
<body class="bg-dark-100 text-gray-200 min-h-screen leading-relaxed"> |
|
<main class="container mx-auto px-6 py-4 max-w-9xl"> |
|
<header class="mb-5 mx-2 md:mx-14"> |
|
<h2 class="text-2xl md:text-3xl font-semibold text-white text-pretty">Relative Index for Streetlifting - 2025 Edition</h2> |
|
<p class="text-xs italic"> |
|
Created by |
|
<a href="https://www.instagram.com/riiswa" target="_blank" class="underline hover:text-blue-500">Waris Radji</a> |
|
& |
|
<a href="https://www.instagram.com/mat95.sw" target="_blank" class="underline hover:text-blue-500">Mathieu Ardoin</a>. |
|
</p> |
|
|
|
|
|
<nav class="mt-4 border-t border-dark-300 pt-3"> |
|
|
|
|
|
<div class="flex space-x-6 overflow-x-auto"> |
|
<a href="index.html#visualization" class="text-gray-300 hover:text-white nav-link">Visualization</a> |
|
<a href="index.html#integration" class="text-gray-300 hover:text-white nav-link">Integration</a> |
|
<a href="index.html#faq" class="text-gray-300 hover:text-white nav-link">FAQ</a> |
|
</div> |
|
</nav> |
|
</header> |
|
|
|
|
|
<div class="p-5 md:mx-14"> |
|
<p class="text-gray-200 text-sm md:text-base"> |
|
The Relative Index for Streetlifting (RIS) is a scoring system that makes fair comparisons possible between athletes of different weights within the same gender. The RIS is created using real competition data from top performers worldwide and shows how strong athletes are relative to their body weight. Each year, the system is updated with new competition results to stay current with how the sport is developing. The score directly shows how an athlete's performance measures up against the very best lifters at the same body weight. This gives athletes, coaches, and fans a reliable way to compare performances, establish records, and determine rankings across weight categories in streetlifting competitions, though it should be noted that current data limitations prevent accurate cross-gender comparisons. |
|
</p> |
|
</div> |
|
|
|
|
|
<div class="px-5 rounded-md max-w-2xl mx-auto"> |
|
<div class="flex flex-col space-y-4"> |
|
|
|
<div> |
|
<label class="block mb-1 text-white">Total (kg)</label> |
|
<input type="number" id="total-input" class="w-full bg-dark-100 border border-dark-300 text-white p-3 rounded-md" placeholder="0" min="0"> |
|
</div> |
|
|
|
|
|
<div> |
|
<label class="block mb-1 text-white">Body Weight (kg)</label> |
|
<input type="number" id="bodyweight-input" class="w-full bg-dark-100 border border-dark-300 text-white p-3 rounded-md" placeholder="0" min="0"> |
|
</div> |
|
|
|
|
|
<div> |
|
<label class="block mb-1 text-white">Gender</label> |
|
<div class="flex space-x-6 mt-2"> |
|
<label class="inline-flex items-center"> |
|
<input type="radio" name="gender" value="male" class="hidden peer" checked> |
|
<span class="w-4 h-4 border rounded-full border-red-600 inline-block mr-2 peer-checked:bg-red-600"></span> |
|
<span class="text-white">♂ Men</span> |
|
</label> |
|
<label class="inline-flex items-center"> |
|
<input type="radio" name="gender" value="female" class="hidden peer"> |
|
<span class="w-4 h-4 border rounded-full border-white inline-block mr-2 peer-checked:bg-white"></span> |
|
<span class="text-white">♀ Women</span> |
|
</label> |
|
</div> |
|
</div> |
|
|
|
|
|
<button id="calculate-btn" class="bg-red-700 hover:bg-red-800 text-white py-3 rounded-md text-center font-medium transition-colors w-full"> |
|
Calculate |
|
</button> |
|
|
|
|
|
<div class="flex flex-col justify-center items-center mt-4"> |
|
<div id="ris-result" class="text-7xl font-bold text-red-600">0.00</div> |
|
|
|
|
|
<div id="rank-buttons" class="mt-4 hidden"> |
|
<button id="show-on-curve-btn" class="bg-accent-100 hover:bg-accent-200 text-white py-2 px-4 rounded-md text-center font-medium transition-colors"> |
|
Show on Performance Curve |
|
</button> |
|
<button id="clear-curve-btn" class="bg-dark-300 hover:bg-dark-400 text-white py-2 px-4 rounded-md text-center font-medium transition-colors ml-2 hidden"> |
|
Clear |
|
</button> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
|
|
<script> |
|
document.addEventListener('DOMContentLoaded', function() { |
|
|
|
let menPlotOriginal = null; |
|
let womenPlotOriginal = null; |
|
|
|
|
|
let menPlotReady = false; |
|
let womenPlotReady = false; |
|
|
|
|
|
const calculateBtn = document.getElementById('calculate-btn'); |
|
const showOnCurveBtn = document.getElementById('show-on-curve-btn'); |
|
const clearCurveBtn = document.getElementById('clear-curve-btn'); |
|
const rankButtons = document.getElementById('rank-buttons'); |
|
const risResult = document.getElementById('ris-result'); |
|
|
|
|
|
function capturePlotData() { |
|
try { |
|
|
|
if (!menPlotReady && document.getElementById('men-plot')) { |
|
const menPlot = document.getElementById('men-plot'); |
|
if (menPlot.data && menPlot.data.length > 0) { |
|
menPlotOriginal = { |
|
data: JSON.parse(JSON.stringify(menPlot.data)), |
|
layout: JSON.parse(JSON.stringify(menPlot.layout)) |
|
}; |
|
menPlotReady = true; |
|
console.log('Men plot data captured'); |
|
} |
|
} |
|
|
|
|
|
if (!womenPlotReady && document.getElementById('women-plot')) { |
|
const womenPlot = document.getElementById('women-plot'); |
|
if (womenPlot.data && womenPlot.data.length > 0) { |
|
womenPlotOriginal = { |
|
data: JSON.parse(JSON.stringify(womenPlot.data)), |
|
layout: JSON.parse(JSON.stringify(womenPlot.layout)) |
|
}; |
|
womenPlotReady = true; |
|
console.log('Women plot data captured'); |
|
} |
|
} |
|
|
|
|
|
if (!menPlotReady || !womenPlotReady) { |
|
setTimeout(capturePlotData, 500); |
|
} |
|
} catch (e) { |
|
console.error('Error capturing plot data:', e); |
|
|
|
setTimeout(capturePlotData, 1000); |
|
} |
|
} |
|
|
|
|
|
setTimeout(capturePlotData, 1000); |
|
|
|
|
|
if (calculateBtn) { |
|
calculateBtn.addEventListener('click', function() { |
|
const bodyweight = parseFloat(document.getElementById('bodyweight-input').value) || 0; |
|
const total = parseFloat(document.getElementById('total-input').value) || 0; |
|
const gender = document.querySelector('input[name="gender"]:checked').value; |
|
|
|
if (bodyweight <= 0 || total <= 0) { |
|
risResult.textContent = '0.00'; |
|
rankButtons.classList.add('hidden'); |
|
clearCurveBtn.classList.add('hidden'); |
|
return; |
|
} |
|
|
|
let risScore; |
|
if (gender === 'male') { |
|
|
|
risScore = risIndex(bodyweight, |
|
men_const[0], |
|
men_const[1], |
|
men_const[2], |
|
men_const[3], |
|
men_const[4]) * total; |
|
} else { |
|
|
|
risScore = risIndex(bodyweight, |
|
women_const[0], |
|
women_const[1], |
|
women_const[2], |
|
women_const[3], |
|
women_const[4]) * total; |
|
} |
|
|
|
risResult.textContent = risScore.toFixed(2); |
|
|
|
|
|
rankButtons.classList.remove('hidden'); |
|
}); |
|
} |
|
|
|
if (showOnCurveBtn) { |
|
showOnCurveBtn.addEventListener('click', function() { |
|
const bodyweight = parseFloat(document.getElementById('bodyweight-input').value) || 0; |
|
const total = parseFloat(document.getElementById('total-input').value) || 0; |
|
const gender = document.querySelector('input[name="gender"]:checked').value; |
|
|
|
|
|
const plotId = gender === 'male' ? 'men-plot' : 'women-plot'; |
|
|
|
|
|
if ((plotId === 'men-plot' && !menPlotReady) || |
|
(plotId === 'women-plot' && !womenPlotReady)) { |
|
alert("Please wait, plot data is still loading."); |
|
return; |
|
} |
|
|
|
|
|
clearCurveBtn.classList.remove('hidden'); |
|
|
|
|
|
addUserPoint(plotId, bodyweight, total); |
|
|
|
|
|
document.getElementById(plotId).scrollIntoView({ |
|
behavior: 'smooth', |
|
block: 'center' |
|
}); |
|
}); |
|
} |
|
|
|
if (clearCurveBtn) { |
|
clearCurveBtn.addEventListener('click', function() { |
|
|
|
resetPlots(); |
|
|
|
|
|
this.classList.add('hidden'); |
|
}); |
|
} |
|
|
|
|
|
function resetPlots() { |
|
|
|
if (menPlotReady && document.getElementById('men-plot') && menPlotOriginal) { |
|
Plotly.react('men-plot', menPlotOriginal.data, menPlotOriginal.layout); |
|
} |
|
|
|
|
|
if (womenPlotReady && document.getElementById('women-plot') && womenPlotOriginal) { |
|
Plotly.react('women-plot', womenPlotOriginal.data, womenPlotOriginal.layout); |
|
} |
|
} |
|
|
|
|
|
function addUserPoint(plotId, bodyweight, total) { |
|
const plot = document.getElementById(plotId); |
|
if (!plot || !plot.data) return; |
|
|
|
|
|
const gender = plotId === 'men-plot' ? 'male' : 'female'; |
|
const constants = gender === 'male' ? men_const : women_const; |
|
|
|
|
|
const expectedTotal = 100 / risIndex(bodyweight, |
|
constants[0], |
|
constants[1], |
|
constants[2], |
|
constants[3], |
|
constants[4]); |
|
|
|
|
|
const existingData = JSON.parse(JSON.stringify(plot.data)); |
|
|
|
|
|
const userPoint = { |
|
x: [bodyweight], |
|
y: [total], |
|
mode: 'markers', |
|
type: 'scatter', |
|
marker: { |
|
size: 16, |
|
color: 'rgba(255, 0, 0, 0.8)', |
|
symbol: 'diamond', |
|
line: { |
|
color: 'white', |
|
width: 2 |
|
} |
|
}, |
|
name: 'Your Performance', |
|
hoverinfo: 'text', |
|
hovertext: `Your Performance:<br>Bodyweight: ${bodyweight}kg<br>Total: ${total}kg`, |
|
showlegend: false |
|
}; |
|
|
|
|
|
const expectedPoint = { |
|
x: [bodyweight], |
|
y: [expectedTotal], |
|
mode: 'markers', |
|
type: 'scatter', |
|
marker: { |
|
size: 12, |
|
color: 'rgba(255, 215, 0, 0.8)', |
|
symbol: 'circle', |
|
line: { |
|
color: 'white', |
|
width: 1 |
|
} |
|
}, |
|
name: 'Expected at 100 RIS', |
|
hoverinfo: 'text', |
|
hovertext: `Expected at 100 RIS:<br>Bodyweight: ${bodyweight}kg<br>Total: ${expectedTotal.toFixed(1)}kg`, |
|
showlegend: false |
|
}; |
|
|
|
|
|
const connectionLine = { |
|
x: [bodyweight, bodyweight], |
|
y: [total, expectedTotal], |
|
mode: 'lines', |
|
type: 'scatter', |
|
line: { |
|
color: 'rgba(255, 255, 255, 0.5)', |
|
width: 2, |
|
dash: 'dot' |
|
}, |
|
name: 'Connection Line', |
|
showlegend: false, |
|
hoverinfo: 'text', |
|
hovertext: `Performance Gap: ${Math.abs(total - expectedTotal).toFixed(1)}kg`, |
|
}; |
|
|
|
|
|
existingData.push(userPoint); |
|
existingData.push(expectedPoint); |
|
existingData.push(connectionLine); |
|
|
|
|
|
Plotly.react(plotId, existingData, plot.layout); |
|
|
|
|
|
const position = total > expectedTotal ? 'above' : 'below'; |
|
const emoji = total > expectedTotal ? '🔥' : '💪'; |
|
const message = total > expectedTotal ? |
|
`${emoji} You're ${((total/expectedTotal)*100-100).toFixed(1)}% above the elite curve!` : |
|
`${emoji} You're at ${((total/expectedTotal)*100).toFixed(1)}% of the elite curve`; |
|
|
|
|
|
const annotation = { |
|
x: bodyweight, |
|
y: total, |
|
xref: 'x', |
|
yref: 'y', |
|
text: message, |
|
showarrow: true, |
|
arrowhead: 2, |
|
arrowsize: 1, |
|
arrowcolor: 'red', |
|
ax: 0, |
|
ay: -40, |
|
font: { |
|
size: 12, |
|
color: 'white', |
|
family: 'Inter, sans-serif', |
|
}, |
|
bgcolor: 'rgba(0, 0, 0, 0.7)', |
|
bordercolor: 'red', |
|
borderwidth: 1, |
|
borderpad: 4, |
|
}; |
|
|
|
|
|
Plotly.relayout(plotId, { |
|
annotations: [annotation] |
|
}); |
|
} |
|
}); |
|
</script> |
|
|
|
<div class="p-5 md:mx-14 mt-8"> |
|
<h3 class="text-xl font-semibold mb-2 text-white" id="visualization">A data-driven approach</h3> |
|
<p class="text-gray-200 text-sm md:text-base"> |
|
The RIS scoring system is built on comprehensive data analysis of elite competition results. Data was collected from the <a href="https://www.allthingsstreetlifting.com/">All Things: Streetlifting</a> database, specifically examining the top 10 performers in each weight class who competed before 2025 in the All-4 competition format. Both bodyweight and total performance figures were analyzed using robust regression analysis—a statistical technique that identifies the relationship between these variables by finding the curve that best fits the data points, while taking in account outliers. In simple terms, this process revealed how lifting performance typically scales with bodyweight among top athletes, creating a function that expresses expected total performance based on bodyweight. This function was then normalized to create the RIS Score. <i>A research paper that describe the scientific methodology will be released soon.</i> |
|
</p> |
|
</div> |
|
|
|
<div class="grid grid-cols-1 lg:grid-cols-2 gap-8 mt-8"> |
|
<div id="men-plot" class="w-full h-[500px]"></div> |
|
<div id="women-plot" class="w-full h-[500px]"></div> |
|
</div> |
|
|
|
<div class="p-5 md:mx-14"> |
|
<p class="text-gray-400 text-xs md:text-sm"> |
|
This visualization shows the relationship between body weight (x-axis) and total performance score (y-axis) |
|
for athletes across different weight classes. The size of each point represents the total score, with larger |
|
points indicating higher scores. Hover over points to see detailed athlete information. |
|
</p> |
|
</div> |
|
|
|
|
|
<div class="p-5 md:mx-14 mt-8"> |
|
<h3 class="text-xl font-semibold mb-4 text-white" id="integration">Integration</h3> |
|
<p class="text-gray-200 text-sm md:text-base mb-4"> |
|
The RIS formula is available for free integration into any platform or application. You are welcome to use this scoring system without prior request for competitions, websites, apps, or analysis tools. We simply ask that you credit the creators of the RIS system in your implementation. |
|
</p> |
|
|
|
<div class="mb-6"> |
|
<table id="constants-table" class="w-full text-left"> |
|
<thead> |
|
<tr> |
|
<th class="text-white py-2">Constant</th> |
|
<th class="text-white py-2">Men</th> |
|
<th class="text-white py-2">Women</th> |
|
</tr> |
|
</thead> |
|
<tbody> |
|
|
|
</tbody> |
|
</table> |
|
</div> |
|
|
|
<div class="mb-6"> |
|
<p class="text-gray-200 text-sm md:text-base mb-4"> |
|
The formula is: |
|
</p> |
|
|
|
<script type="text/javascript" async |
|
src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/MathJax.js?config=TeX-MML-AM_CHTML"> |
|
</script> |
|
<div> |
|
\[ |
|
\text{RIS} = \text{Total} \times \frac{100}{A + \frac{K - A}{1 + Q \cdot e^{-B \cdot (\text{BW} - v)}}} |
|
\] |
|
</div> |
|
<p class="text-gray-400 text-xs mt-2"> |
|
where BW is body weight in kg, Total is the athlete's total lifted weight in kg, and A, K, B, v, Q are the gender-specific constants defined above. |
|
</p> |
|
</div> |
|
|
|
<div class="mb-6"> |
|
<h4 class="text-lg font-medium mb-2 text-white">Microsoft Excel</h4> |
|
<p class="text-gray-200 text-sm md:text-base mb-2">Copy these formulas directly into Excel to calculate RIS scores. The formula references cells A2 for body weight and B2 for total weight, but you can adjust these cell references as needed.</p> |
|
<p class="text-white mb-1">For Men:</p> |
|
<div class="mb-3 code-block-wrapper"> |
|
<pre><code id="excel-men-formula" class="excel"></code></pre> |
|
<button class="copy-button" data-target="excel-men-formula">Copy</button> |
|
</div> |
|
<p class="text-white mb-1">For Women:</p> |
|
<div class="code-block-wrapper"> |
|
<pre><code id="excel-women-formula" class="excel"></code></pre> |
|
<button class="copy-button" data-target="excel-women-formula">Copy</button> |
|
</div> |
|
<p class="text-gray-400 text-xs mt-2"> |
|
Assuming A2 = Body Weight in kg, B2 = Total in kg |
|
</p> |
|
</div> |
|
|
|
<div> |
|
<h4 class="text-lg font-medium mb-2 text-white">Google Sheets</h4> |
|
<p class="text-gray-200 text-xs mb-2 text-sm md:text-base">For a more convenient implementation in Google Sheets, you can create custom functions that calculate RIS scores with a single function call:</p> |
|
<ol class="text-sm md:text-base text-gray-300 list-decimal pl-4 space-y-1 mb-2"> |
|
<li>Open your Google Sheet</li> |
|
<li>Go to Extensions → Apps Script</li> |
|
<li>Paste the following code (constants are automatically filled from the current RIS.js file):</li> |
|
</ol> |
|
<div class="code-block-wrapper"> |
|
<pre><code id="google-sheets-code" class="javascript"></code></pre> |
|
<button class="copy-button" data-target="google-sheets-code">Copy</button> |
|
</div> |
|
<p class="text-sm md:text-base text-gray-300 mt-2">After saving the script, you can use the functions directly in your sheet:</p> |
|
<ul class="text-sm md:text-base text-gray-300 list-disc pl-4 space-y-1 mt-1"> |
|
<li><code>=RIS_MEN(A2, B2)</code> - where A2 is body weight and B2 is total weight for male athletes</li> |
|
<li><code>=RIS_WOMEN(A2, B2)</code> - where A2 is body weight and B2 is total weight for female athletes</li> |
|
</ul> |
|
</div> |
|
</div> |
|
|
|
|
|
<div class="p-5 md:mx-14 mt-8"> |
|
<h3 class="text-xl font-semibold mb-4 text-white" id="faq">Frequently Asked Questions</h3> |
|
|
|
<div class="space-y-4"> |
|
|
|
|
|
<div class="border-b border-dark-300 pb-4"> |
|
<button class="faq-toggle flex w-full justify-between items-center text-left focus:outline-none"> |
|
<span class="text-white font-medium">What's new in the 2025 Edition of RIS?</span> |
|
<svg class="faq-icon w-5 h-5 text-gray-400 transform transition-transform" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> |
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"></path> |
|
</svg> |
|
</button> |
|
<div class="faq-content hidden mt-2 text-gray-300 text-sm md:text-base"> |
|
<p>The 2025 Edition of the RIS includes several important updates while maintaining the core methodology:</p> |
|
<ul class="list-disc pl-5 mt-2 space-y-1"> |
|
<li>Integration of all competition data from 2024, providing a more current reflection of performance standards</li> |
|
<li>Inclusion of the new women's -52kg weight category, improving accuracy for lightweight female athletes</li> |
|
<li>Implementation of a more robust statistical method that better handles outliers in the data</li> |
|
</ul> |
|
<p class="mt-2">The fundamental approach remains unchanged, ensuring continuity with previous editions while offering improved accuracy based on the most recent competitive data.</p> |
|
</div> |
|
</div> |
|
|
|
|
|
<div class="border-b border-dark-300 pb-4"> |
|
<button class="faq-toggle flex w-full justify-between items-center text-left focus:outline-none"> |
|
<span class="text-white font-medium">Can I compare men's and women's scores with RIS?</span> |
|
<svg class="faq-icon w-5 h-5 text-gray-400 transform transition-transform" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> |
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"></path> |
|
</svg> |
|
</button> |
|
<div class="faq-content hidden mt-2 text-gray-300 text-sm md:text-base"> |
|
<p>Currently, the RIS system is designed to compare athletes within the same gender category. Due to significant differences in strength-to-weight ratio distributions between men and women and limited cross-gender competitive data, making accurate comparisons across genders is challenging with the current model. Each gender has its own set of reference data and constants used in the RIS formula to ensure fair and meaningful comparisons within the same gender group.</p> |
|
</div> |
|
</div> |
|
|
|
|
|
<div class="border-b border-dark-300 pb-4"> |
|
<button class="faq-toggle flex w-full justify-between items-center text-left focus:outline-none"> |
|
<span class="text-white font-medium">How often are the RIS constants updated?</span> |
|
<svg class="faq-icon w-5 h-5 text-gray-400 transform transition-transform" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> |
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"></path> |
|
</svg> |
|
</button> |
|
<div class="faq-content hidden mt-2 text-gray-300 text-sm md:text-base"> |
|
<p>The RIS constants are updated annually to incorporate the latest competition data. This ensures that the scoring system remains current with the evolving standards of performance in streetlifting. Each annual update is labeled with its year (e.g., "RIS 2025 Edition") to help users identify which version they're working with.</p> |
|
</div> |
|
</div> |
|
|
|
|
|
<div class="border-b border-dark-300 pb-4"> |
|
<button class="faq-toggle flex w-full justify-between items-center text-left focus:outline-none"> |
|
<span class="text-white font-medium">What is considered a "good" RIS score?</span> |
|
<svg class="faq-icon w-5 h-5 text-gray-400 transform transition-transform" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> |
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"></path> |
|
</svg> |
|
</button> |
|
<div class="faq-content hidden mt-2 text-gray-300 text-sm md:text-base"> |
|
<p>RIS scores typically fall within these ranges:</p> |
|
<ul class="list-disc pl-5 mt-2 space-y-1"> |
|
<li><strong>Below 70:</strong> Beginner to intermediate level</li> |
|
<li><strong>70-80:</strong> Advanced level</li> |
|
<li><strong>80-90:</strong> Elite level</li> |
|
<li><strong>Above 90:</strong> World-class level</li> |
|
</ul> |
|
<p class="mt-2">A score of 100 would indicate performance equivalent to the statistical average of top athletes in your weight class.</p> |
|
</div> |
|
</div> |
|
|
|
|
|
<div class="border-b border-dark-300 pb-4"> |
|
<button class="faq-toggle flex w-full justify-between items-center text-left focus:outline-none"> |
|
<span class="text-white font-medium">Can I use the RIS calculator for other strength sports?</span> |
|
<svg class="faq-icon w-5 h-5 text-gray-400 transform transition-transform" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> |
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"></path> |
|
</svg> |
|
</button> |
|
<div class="faq-content hidden mt-2 text-gray-300 text-sm md:text-base"> |
|
<p>The RIS was specifically developed for streetlifting using data from All-4 competitions. While the mathematical model could theoretically be applied to other strength sports, the constants would need to be recalculated using sport-specific data. Using the current RIS constants for other strength sports would not provide accurate comparisons.</p> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
|
|
|
|
<div class="p-5 md:mx-14 mt-8 rounded-md"> |
|
<h3 class="text-xl font-semibold mb-6 text-white text-center">Special Thanks</h3> |
|
<p class="text-center mb-6 text-sm md:text-base"> |
|
We extend our gratitude to the organizations that have made this research and calculator possible through their support and collaboration. |
|
</p> |
|
<div class="flex justify-center items-center space-x-12"> |
|
<div class="h-20 flex items-center justify-center"> |
|
<img src="static/img/fnsl.webp" alt="FNSL" class="h-20 w-auto object-contain grayscale hover:grayscale-0 transition-all duration-300 opacity-70 hover:opacity-100"> |
|
</div> |
|
<div class="h-20 flex items-center justify-center"> |
|
<img src="static/img/atsl.png" alt="All Things: Streetlifting" class="h-20 w-auto object-contain grayscale hover:grayscale-0 transition-all duration-300 opacity-70 hover:opacity-100"> |
|
</div> |
|
<div class="h-20 flex items-center justify-center"> |
|
<img src="static/img/final-rep.webp" alt="Final Rep" class="h-20 w-auto object-contain grayscale hover:grayscale-0 transition-all duration-300 opacity-70 hover:opacity-100"> |
|
</div> |
|
</div> |
|
</div> |
|
|
|
</main> |
|
|
|
<footer class="mt-auto py-6 border-t border-dark-300 text-center text-gray-500 text-sm"> |
|
<div class="container mx-auto px-6"> |
|
<div class="mb-4"> |
|
<p>© 2025 RIS Calculator. All Rights Reserved.</p> |
|
</div> |
|
<div class="flex justify-center space-x-4"> |
|
<a href="https://instagram.com/riiswa" target="_blank" class="text-gray-400 hover:text-white">Instagram</a> |
|
<a href="https://github.com/riiswa" target="_blank" class="text-gray-400 hover:text-white">GitHub</a> |
|
</div> |
|
</div> |
|
</footer> |
|
|
|
<script> |
|
document.addEventListener('DOMContentLoaded', function() { |
|
|
|
const menData = {"data": [{"customdata": {"dtype": "f8", "bdata": "AAAAAACAMUAAAAAAAEBQQAAAAAAAQF9AAAAAAACwbUAAAAAAACBEQAAAAAAAAFlAAAAAAABgXUAAAAAAACBnQAAAAAAAgDtAAAAAAABwUkAAAAAAAABhQAAAAAAAsGhAAAAAAAAAPkAAAAAAAABUQAAAAAAAgFtAAAAAAAAAaUAAAAAAAMA3QAAAAAAAkFBAAAAAAAAAXkAAAAAAAEBqQAAAAAAAADlAAAAAAABwUkAAAAAAAABeQAAAAAAAsGhAAAAAAAAAOUAAAAAAAMBSQAAAAAAAAFlAAAAAAADgakAAAAAAAAA+QAAAAAAAQFVAAAAAAACAW0AAAAAAAHBnQAAAAAAAwDxAAAAAAABgU0AAAAAAAABZQAAAAAAAAGlA", "shape": "9, 4"}, "hovertemplate": "<b>%{hovertext}</b><br><br>Weight Class=-66kg<br>Body Weight (kg)=%{x}<br>Total Value=%{y}<br>size_value=%{marker.size}<br>muscle_up_value=%{customdata[0]}<br>pull_value=%{customdata[1]}<br>dip_value=%{customdata[2]}<br>squat_value=%{customdata[3]}<extra></extra>", "hovertext": ["Owen Gayle", "Youssef Ashura Bouida", "Julien Capdeville", "Nana Boison", "Domenico Zezza", "Pablo Reveriego", "Alessio Ceragioli", "Florent Geschlecht", "Justin Herbert"], "legendgroup": "-66kg", "marker": {"color": "rgb(165,0,38)", "opacity": 0.7, "size": {"dtype": "f8", "bdata": "EgtH4VH2D0A4R8QtZEcPQOL0QXStBQ1A09JtwNeuCUDT0m3A164JQFsSEak3CwlA/x6Q0bbaCECQHqegCIQIQAAAAAAAAAhA"}, "sizemode": "area", "sizeref": 0.0375, "symbol": "circle"}, "mode": "markers", "name": "-66kg", "orientation": "v", "showlegend": true, "x": {"dtype": "f8", "bdata": "AAAAAACAUEAAAAAAAIBQQGdmZmZmJlBAAAAAAABAUEAAAAAAAE5QQAAAAAAAcFBAMzMzMzNTUEAAAAAAAIBQQM3MzMzMjE9A"}, "xaxis": "x", "y": {"dtype": "f8", "bdata": "AAAAAADQe0AAAAAAAKx7QAAAAAAALHtAAAAAAABAekAAAAAAAEB6QAAAAAAABHpAAAAAAADweUAAAAAAAMh5QAAAAAAAZHlA"}, "yaxis": "y", "type": "scatter"}, {"customdata": {"dtype": "f8", "bdata": "AAAAAAAgR0AAAAAAAABbQAAAAAAAsGNAAAAAAADgakAAAAAAAAA5QAAAAAAAoFRAAAAAAAC4YEAAAAAAAGBuQAAAAAAA4EBAAAAAAAAgV0AAAAAAABBjQAAAAAAAoGlAAAAAAAAAPkAAAAAAACBXQAAAAAAAcGJAAAAAAACwaEAAAAAAAEBAQAAAAAAAQFVAAAAAAABAYEAAAAAAAEBqQAAAAAAAwEJAAAAAAACgVEAAAAAAAOBfQAAAAAAAQGpAAAAAAAAAOUAAAAAAAEBQQAAAAAAAQF9AAAAAAAAQbkAAAAAAAMBCQAAAAAAAQFVAAAAAAACQYEAAAAAAAABpQAAAAAAAQD9AAAAAAAAAVEAAAAAAAABeQAAAAAAAgGtA", "shape": "9, 4"}, "hovertemplate": "<b>%{hovertext}</b><br><br>Weight Class=-73kg<br>Body Weight (kg)=%{x}<br>Total Value=%{y}<br>size_value=%{marker.size}<br>muscle_up_value=%{customdata[0]}<br>pull_value=%{customdata[1]}<br>dip_value=%{customdata[2]}<br>squat_value=%{customdata[3]}<extra></extra>", "hovertext": ["Aubin Chevillard", "Lorenzo Mazzi", "Fran\u00e7ois Li", "Vincenzo Santoro", "Giulio Torelli", "Luca Van Gremberghen", "Israelian Albert", "Lionel Da Silva", "Abderrahmen Dellaoui"], "legendgroup": "-73kg", "marker": {"color": "rgb(215,48,39)", "opacity": 0.7, "size": {"dtype": "f8", "bdata": "JOcEGGHqIEBjTKmSj14XQC6h+JueQhdAZbluPFLpE0Bzdq4YKA4SQHN2rhgoDhJASNsij060EUA4vVIPIJ4RQEOlicNr+xBA"}, "sizemode": "area", "sizeref": 0.0375, "symbol": "circle"}, "mode": "markers", "name": "-73kg", "orientation": "v", "showlegend": true, "x": {"dtype": "f8", "bdata": "MzMzMzMjUkDNzMzMzCxSQDMzMzMzI1JAAAAAAAAgUkAzMzMzMxNSQDMzMzMzI1JAMzMzMzMjUkAzMzMzMyNSQM3MzMzMLFJA"}, "xaxis": "x", "y": {"dtype": "f8", "bdata": "AAAAAAB2gEAAAAAAAER+QAAAAAAAPH5AAAAAAAA4fUAAAAAAAJh8QAAAAAAAmHxAAAAAAAB4fEAAAAAAAHB8QAAAAAAANHxA"}, "yaxis": "y", "type": "scatter"}, {"customdata": {"dtype": "f8", "bdata": "AAAAAAAAREAAAAAAAEBaQAAAAAAA0GFAAAAAAAAAbkAAAAAAAIBGQAAAAAAAwFdAAAAAAAAAZEAAAAAAAIBrQAAAAAAAgEFAAAAAAACAVkAAAAAAAGBjQAAAAAAAIGxAAAAAAAAAPkAAAAAAACBXQAAAAAAAAF5AAAAAAABocEAAAAAAAIA7QAAAAAAAQFVAAAAAAABgY0AAAAAAABBtQAAAAAAAAD5AAAAAAADAV0AAAAAAALBjQAAAAAAAMGtAAAAAAABAQEAAAAAAAMBSQAAAAAAAQF9AAAAAAABocEAAAAAAAEBAQAAAAAAAQFVAAAAAAADgYEAAAAAAALBtQAAAAAAAAD5AAAAAAACgVEAAAAAAAABkQAAAAAAAMGtAAAAAAACANkAAAAAAAKBOQAAAAAAAaGBAAAAAAAC4cEA=", "shape": "10, 4"}, "hovertemplate": "<b>%{hovertext}</b><br><br>Weight Class=-80kg<br>Body Weight (kg)=%{x}<br>Total Value=%{y}<br>size_value=%{marker.size}<br>muscle_up_value=%{customdata[0]}<br>pull_value=%{customdata[1]}<br>dip_value=%{customdata[2]}<br>squat_value=%{customdata[3]}<extra></extra>", "hovertext": ["Raul Teslevici", "Bartlomiej Orchowski", "Shakil Ahmed", "Tony D'Agostino", "Elder Paredes", "Dani\u00ebl Wassenaar", "Cristiano Bellorini", "Abderrahmen Dellaoui", "Carlos Garc\u00eda Pic\u00f3n", "Antonio Sparaneo"], "legendgroup": "-80kg", "marker": {"color": "rgb(244,109,67)", "opacity": 0.7, "size": {"dtype": "f8", "bdata": "OONZKIIEIUBM6IG+5gIgQFhwwjYbMhxAWHDCNhsyHEA8JceBO/saQDwlx4E7+xpA/I2PuIrMGUBNhIcaQ6YYQE2EhxpDphhAgMCTJin9FkA="}, "sizemode": "area", "sizeref": 0.0375, "symbol": "circle"}, "mode": "markers", "name": "-80kg", "orientation": "v", "showlegend": true, "x": {"dtype": "f8", "bdata": "w/UoXI/iU0DD9Shcj+JTQAAAAAAAwFNAw/UoXI/iU0DD9Shcj+JTQMP1KFyP4lNAmpmZmZnZU0DNzMzMzOxTQM3MzMzM7FNAmpmZmZn5U0A="}, "xaxis": "x", "y": {"dtype": "f8", "bdata": "AAAAAAB8gEAAAAAAAECAQAAAAAAAkH9AAAAAAACQf0AAAAAAAEB/QAAAAAAAQH9AAAAAAADwfkAAAAAAAKB+QAAAAAAAoH5AAAAAAAAofkA="}, "yaxis": "y", "type": "scatter"}, {"customdata": {"dtype": "f8", "bdata": "AAAAAACASkAAAAAAABBdQAAAAAAA0GZAAAAAAAAQbUAAAAAAAABEQAAAAAAAwFdAAAAAAAAgYkAAAAAAABhwQAAAAAAAAD5AAAAAAAAQWEAAAAAAAOBgQAAAAAAA+HBAAAAAAABARUAAAAAAAABeQAAAAAAAgGFAAAAAAADAbEAAAAAAACBCQAAAAAAAQFVAAAAAAACAYUAAAAAAAEBwQAAAAAAAADlAAAAAAADAV0AAAAAAACBiQAAAAAAA4G9AAAAAAAAANEAAAAAAAMBSQAAAAAAAwGJAAAAAAABAcEAAAAAAAEBAQAAAAAAAwFdAAAAAAAAgYkAAAAAAAHBsQAAAAAAAQEBAAAAAAADgVUAAAAAAACBiQAAAAAAAYG1AAAAAAADAQkAAAAAAAHBXQAAAAAAAQF9AAAAAAAAQbUA=", "shape": "10, 4"}, "hovertemplate": "<b>%{hovertext}</b><br><br>Weight Class=-87kg<br>Body Weight (kg)=%{x}<br>Total Value=%{y}<br>size_value=%{marker.size}<br>muscle_up_value=%{customdata[0]}<br>pull_value=%{customdata[1]}<br>dip_value=%{customdata[2]}<br>squat_value=%{customdata[3]}<extra></extra>", "hovertext": ["Pere Coll Fernandez", "Lucian Stanut", "Timo Wunnenberg", "Ludovic Adamantium", "Amedeo Pulcini", "Jan Walter", "Marc Altarriba Coronado", "Jos\u00e9 D'Almeida", "Kevin Gogo", "Diego Corazza"], "legendgroup": "-87kg", "marker": {"color": "rgb(253,174,97)", "opacity": 0.7, "size": {"dtype": "f8", "bdata": "Zh+ncuSYKUBX260niWgiQOt1MDuqvSFAR2stYcK0IUCy8hVIQy0gQEzogb7mAiBAWHDCNhsyHEA8JceBO/saQDwlx4E7+xpAFc7s7wheGEA="}, "sizemode": "area", "sizeref": 0.0375, "symbol": "circle"}, "mode": "markers", "name": "-87kg", "orientation": "v", "showlegend": true, "x": {"dtype": "f8", "bdata": "ZmZmZmamVUBmZmZmZqZVQGdmZmZmxlVANDMzMzOTVUDNzMzMzGxVQGZmZmZmplVAZmZmZmamVUAAAAAAAMBVQJqZmZmZuVVAZmZmZmamVUA="}, "xaxis": "x", "y": {"dtype": "f8", "bdata": "AAAAAABCgkAAAAAAAMyAQAAAAAAApoBAAAAAAACkgEAAAAAAAEqAQAAAAAAAQIBAAAAAAACQf0AAAAAAAEB/QAAAAAAAQH9AAAAAAACMfkA="}, "yaxis": "y", "type": "scatter"}, {"customdata": {"dtype": "f8", "bdata": "AAAAAADgRUAAAAAAADBbQAAAAAAAoGRAAAAAAABIckAAAAAAAABEQAAAAAAA4FpAAAAAAABAZUAAAAAAAJBvQAAAAAAAAD5AAAAAAAAgV0AAAAAAAJBlQAAAAAAA8G5AAAAAAAAAOUAAAAAAAMBSQAAAAAAAAGRAAAAAAACYcUAAAAAAAEBAQAAAAAAA4FVAAAAAAACIZkAAAAAAAGBtQAAAAAAAwEJAAAAAAACAW0AAAAAAACBiQAAAAAAAUG5AAAAAAAAAPkAAAAAAACBXQAAAAAAAgGFAAAAAAABwcEAAAAAAAEBAQAAAAAAAQFVAAAAAAADAYkAAAAAAAEBvQAAAAAAAgDZAAAAAAABAVUAAAAAAAMBiQAAAAAAA4G9AAAAAAABAQEAAAAAAACBSQAAAAAAAQGBAAAAAAAAIcUA=", "shape": "10, 4"}, "hovertemplate": "<b>%{hovertext}</b><br><br>Weight Class=-94kg<br>Body Weight (kg)=%{x}<br>Total Value=%{y}<br>size_value=%{marker.size}<br>muscle_up_value=%{customdata[0]}<br>pull_value=%{customdata[1]}<br>dip_value=%{customdata[2]}<br>squat_value=%{customdata[3]}<extra></extra>", "hovertext": ["Xavier Macias", "Dylan Baki Heurteux", "Th\u00e9o Goutte-Toquet", "Daniel Lisek Lis", "Badr Van Der Stoel", "Ludovic Adamantium", "Timo Wunnenberg", "Robin Stoltze", "Charlie Cameron", "Giovanni Lategana"], "legendgroup": "-94kg", "marker": {"color": "rgb(254,224,144)", "opacity": 0.7, "size": {"dtype": "f8", "bdata": "AAAAAAAALkAJ3p93qkonQEebcB7FHyNA54jqgtn6IkBqzUlZNBciQBkJoQ42DiJAqHem3wK/IEBibMqIwF0fQP33Vj1OEx5Aw43ws4vQHEA="}, "sizemode": "area", "sizeref": 0.0375, "symbol": "circle"}, "mode": "markers", "name": "-94kg", "orientation": "v", "showlegend": true, "x": {"dtype": "f8", "bdata": "vLu7u7sbV0AAAAAAAEBXQJqZmZmZGVdAmpmZmZl5V0C8u7u7uxtXQM3MzMzMDFdAvLu7u7sbV0CamZmZmTlXQLy7u7u7G1dAzczMzMyMVkA="}, "xaxis": "x", "y": {"dtype": "f8", "bdata": "AAAAAAAQg0AAAAAAANCBQAAAAAAA9IBAAAAAAADsgEAAAAAAALqAQAAAAAAAuIBAAAAAAABsgEAAAAAAACyAQAAAAAAABIBAAAAAAAC4f0A="}, "yaxis": "y", "type": "scatter"}, {"customdata": {"dtype": "f8", "bdata": "AAAAAAAA9D8AAAAAAIBWQAAAAAAAwGdAAAAAAADAckAAAAAAAAA0QAAAAAAAIFdAAAAAAADAYkAAAAAAAGBzQAAAAAAAADlAAAAAAABwV0AAAAAAALBjQAAAAAAAcHJAAAAAAAAANEAAAAAAAIBWQAAAAAAA4GVAAAAAAADQcUAAAAAAAIAmQAAAAAAA0FZAAAAAAAC4ZUAAAAAAAGhwQAAAAAAAAERAAAAAAACAVkAAAAAAACBiQAAAAAAA4G9AAAAAAAAAOUAAAAAAAEBVQAAAAAAAQGVAAAAAAAAAbkAAAAAAAIBGQAAAAAAAAFlAAAAAAACAYUAAAAAAAIBrQAAAAAAAABRAAAAAAAAgV0AAAAAAAOBgQAAAAAAA6HBAAAAAAACAMUAAAAAAAEBQQAAAAAAAoF5AAAAAAACocUA=", "shape": "10, 4"}, "hovertemplate": "<b>%{hovertext}</b><br><br>Weight Class=+94kg<br>Body Weight (kg)=%{x}<br>Total Value=%{y}<br>size_value=%{marker.size}<br>muscle_up_value=%{customdata[0]}<br>pull_value=%{customdata[1]}<br>dip_value=%{customdata[2]}<br>squat_value=%{customdata[3]}<extra></extra>", "hovertext": ["Valerio Naldi", "Jan Makula", "Leonardo Giliberto", "Tonio Zeidler", "Jovan Mastilovic", "Patryk Dzieniszewski", "Mohamad Houbbi", "Eugeniu Cretu", "Robin Meineke", "Jonas Mees"], "legendgroup": "+94kg", "marker": {"color": "rgb(255,255,191)", "opacity": 0.7, "size": {"dtype": "f8", "bdata": "MXriw5gaKUBKizMFbbAnQEXuFhNzfSdACd6fd6pKJ0DPKeLQBZYiQBBP5VIwXCFATOiBvuYCIEBYcMI2GzIcQK/o/N/JtBtA1p2RUloWGEA="}, "sizemode": "area", "sizeref": 0.0375, "symbol": "circle"}, "mode": "markers", "name": "+94kg", "orientation": "v", "showlegend": true, "x": {"dtype": "f8", "bdata": "ZmZmZmbmXkCamZmZmblaQD4K16Nwd1pAPgrXo3B3WkAAAAAAAABcQM3MzMzMbFhAUrgeheuhWEDNzMzMzIxZQAAAAAAAwFtAAAAAAADAV0A="}, "xaxis": "x", "y": {"dtype": "f8", "bdata": "AAAAAAAqgkAAAAAAAOSBQAAAAAAA2oFAAAAAAADQgUAAAAAAANaAQAAAAAAAkIBAAAAAAABAgEAAAAAAAJB/QAAAAAAAcH9AAAAAAAB4fkA="}, "yaxis": "y", "type": "scatter"}, {"hovertemplate": "Body Weight: %{x:.1f} kg<br>Predicted Total: %{y:.1f}<extra></extra>", "line": {"color": "white", "dash": "solid", "width": 3}, "mode": "lines", "name": "Trend", "x": {"dtype": "f8", "bdata": "AAAAwMyMSkBToNZv4fRKQKZArR/2XEtA+OCDzwrFS0BLgVp/Hy1MQJ4hMS80lUxA8MEH30j9TEBDYt6OXWVNQJYCtT5yzU1A6aKL7oY1TkA8Q2Kem51OQI7jOE6wBU9A4YMP/sRtT0A0JOat2dVPQENi3i73HlBAbbLJhgFTUECWArXeC4dQQL9SoDYWu1BA6aKLjiDvUEAS83bmKiNRQDxDYj41V1FAZZNNlj+LUUCO4zjuSb9RQLgzJEZU81FA4YMPnl4nUkAK1Pr1aFtSQDQk5k1zj1JAXXTRpX3DUkCGxLz9h/dSQLAUqFWSK1NA2WSTrZxfU0ACtX4Fp5NTQCwFal2xx1NAVlVVtbv7U0B/pUANxi9UQKj1K2XQY1RA0kUXvdqXVED7lQIV5ctUQCTm7Wzv/1RATjbZxPkzVUB3hsQcBGhVQKDWr3QOnFVAyiabzBjQVUDzdoYkIwRWQBzHcXwtOFZARhdd1DdsVkBvZ0gsQqBWQJi3M4RM1FZAwgcf3FYIV0DsVwo0YTxXQBWo9YtrcFdAPvjg43WkV0BoSMw7gNhXQJGYt5OKDFhAuuii65RAWEDkOI5Dn3RYQA2JeZupqFhANtlk87PcWEBgKVBLvhBZQIl5O6PIRFlAsskm+9J4WUDcGRJT3axZQAVq/arn4FlALrroAvIUWkBYCtRa/EhaQIJav7IGfVpAq6qqChGxWkDU+pViG+VaQP5KgbolGVtAJ5tsEjBNW0BQ61dqOoFbQHo7Q8JEtVtAo4suGk/pW0DM2xlyWR1cQPYrBcpjUVxAH3zwIW6FXEBIzNt5eLlcQHIcx9GC7VxAm2yyKY0hXUDFvJ2Bl1VdQO4MidmhiV1AF110May9XUBBrV+JtvFdQGr9SuHAJV5AlE02OctZXkC9nSGR1Y1eQObtDOnfwV5AED74QOr1XkA5juOY9ClfQGLezvD+XV9AjC66SAmSX0C1fqWgE8ZfQN7OkPgd+l9AhA8+KBQXYECYtzNUGTFgQK5fKYAeS2BAwgcfrCNlYEDWrxTYKH9gQOxXCgQumWBAAAAAMDOzYEA="}, "y": {"dtype": "f8", "bdata": "9g3fUjX3dkD9AdURXh13QHQi3egQRndA5Kyxc2Bxd0C7Kq/CW593QENxda8N0HdAkn6XL3wDeECHxXqqpzl4QLABY1iKcnhAm+pdsReueEBWGTzzO+x4QDrq68XbLHlAduNLBdRveUBrvNS2+bR5QO6uRzAa/HlAoIfecvtEekDcIl68XI96QNFR/Ez32npAyK5tXn8ne0DXqtVFpXR7QNym7rcWwntAF/nDJIAPfEDkivAejlx8QBiGosHuqHxAWqe3CFP0fECCdxwPcD59QOtQHykAh31AnsB70sPNfUCqoVVqghJ+QB7m+bkKVX5AP03SRTOVfkD4tltq2tJ+QDI9+EjmDX9A2nEOikRGf0DKQwL76Xt/QAz1MQ/Srn9Amr5LS/7ef0AJ5wvROgaAQEuCpeShG4BAY9AbRrwvgEBiv6eQk0KAQM2iPcMyVIBASmmt86VkgECC7NAH+nOAQEhOfHU8goBAMouMCXuPgEBIgCe2w5uAQBqWBmgkp4BAP0B54qqxgEDcIK2hZLuAQLoxtcJexIBAYwe+8KXMgEB0TNlWRtSAQElKzJVL24BApDtTvcDhgED5+FNIsOeAQFs9hRsk7YBAOXYbhiXygEAYHhhEvfaAQHiN5IHz+oBA2prs4M/+gEDaFvh8WQKBQIYGDPKWBYFAhGGlYo4IgUCGBid+RQuBQBSTW4fBDYFA5N/xWgcQgUC+IOB1GxKBQAggnvsBFIFAD9cqvL4VgUCDz9Q5VReBQE5cv67IGIFA8eAgEhwagUAqIDgdUhuBQCTz909tHIFA7udp9W8dgUB5I8knXB6BQESMV9QzH4FAbb/vvvgfgUA6qlaFrCCBQCbdT6JQIYFATtB3cOYhgUASYecsbyKBQHbRo/nrIoFA5obe310jgUAbsgfSxSOBQGTvtq0kJIFARM9sPXskgUC4FDA6yiSBQBtSCU0SJYFArGdfEFQlgUAWQTcRkCWBQKMJWdDGJYFAzOlcw/glgUBkPaFVJiaBQPAOLOlPJoFAEIR513UmgUCaxzhymCaBQGzg+AO4JoFAWMjG0NQmgUA="}, "type": "scatter"}], "layout": {"template": {"data": {"barpolar": [{"marker": {"line": {"color": "rgb(17,17,17)", "width": 0.5}, "pattern": {"fillmode": "overlay", "size": 10, "solidity": 0.2}}, "type": "barpolar"}], "bar": [{"error_x": {"color": "#f2f5fa"}, "error_y": {"color": "#f2f5fa"}, "marker": {"line": {"color": "rgb(17,17,17)", "width": 0.5}, "pattern": {"fillmode": "overlay", "size": 10, "solidity": 0.2}}, "type": "bar"}], "carpet": [{"aaxis": {"endlinecolor": "#A2B1C6", "gridcolor": "#506784", "linecolor": "#506784", "minorgridcolor": "#506784", "startlinecolor": "#A2B1C6"}, "baxis": {"endlinecolor": "#A2B1C6", "gridcolor": "#506784", "linecolor": "#506784", "minorgridcolor": "#506784", "startlinecolor": "#A2B1C6"}, "type": "carpet"}], "choropleth": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "choropleth"}], "contourcarpet": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "contourcarpet"}], "contour": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "contour"}], "heatmap": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "heatmap"}], "histogram2dcontour": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "histogram2dcontour"}], "histogram2d": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "histogram2d"}], "histogram": [{"marker": {"pattern": {"fillmode": "overlay", "size": 10, "solidity": 0.2}}, "type": "histogram"}], "mesh3d": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "mesh3d"}], "parcoords": [{"line": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "parcoords"}], "pie": [{"automargin": true, "type": "pie"}], "scatter3d": [{"line": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatter3d"}], "scattercarpet": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattercarpet"}], "scattergeo": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattergeo"}], "scattergl": [{"marker": {"line": {"color": "#283442"}}, "type": "scattergl"}], "scattermapbox": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattermapbox"}], "scattermap": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattermap"}], "scatterpolargl": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterpolargl"}], "scatterpolar": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterpolar"}], "scatter": [{"marker": {"line": {"color": "#283442"}}, "type": "scatter"}], "scatterternary": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterternary"}], "surface": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "surface"}], "table": [{"cells": {"fill": {"color": "#506784"}, "line": {"color": "rgb(17,17,17)"}}, "header": {"fill": {"color": "#2a3f5f"}, "line": {"color": "rgb(17,17,17)"}}, "type": "table"}]}, "layout": {"annotationdefaults": {"arrowcolor": "#f2f5fa", "arrowhead": 0, "arrowwidth": 1}, "autotypenumbers": "strict", "coloraxis": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "colorscale": {"diverging": [[0, "#8e0152"], [0.1, "#c51b7d"], [0.2, "#de77ae"], [0.3, "#f1b6da"], [0.4, "#fde0ef"], [0.5, "#f7f7f7"], [0.6, "#e6f5d0"], [0.7, "#b8e186"], [0.8, "#7fbc41"], [0.9, "#4d9221"], [1, "#276419"]], "sequential": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "sequentialminus": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]]}, "colorway": ["#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52"], "font": {"color": "#f2f5fa"}, "geo": {"bgcolor": "rgb(17,17,17)", "lakecolor": "rgb(17,17,17)", "landcolor": "rgb(17,17,17)", "showlakes": true, "showland": true, "subunitcolor": "#506784"}, "hoverlabel": {"align": "left"}, "hovermode": "closest", "mapbox": {"style": "dark"}, "paper_bgcolor": "rgb(17,17,17)", "plot_bgcolor": "rgb(17,17,17)", "polar": {"angularaxis": {"gridcolor": "#506784", "linecolor": "#506784", "ticks": ""}, "bgcolor": "rgb(17,17,17)", "radialaxis": {"gridcolor": "#506784", "linecolor": "#506784", "ticks": ""}}, "scene": {"xaxis": {"backgroundcolor": "rgb(17,17,17)", "gridcolor": "#506784", "gridwidth": 2, "linecolor": "#506784", "showbackground": true, "ticks": "", "zerolinecolor": "#C8D4E3"}, "yaxis": {"backgroundcolor": "rgb(17,17,17)", "gridcolor": "#506784", "gridwidth": 2, "linecolor": "#506784", "showbackground": true, "ticks": "", "zerolinecolor": "#C8D4E3"}, "zaxis": {"backgroundcolor": "rgb(17,17,17)", "gridcolor": "#506784", "gridwidth": 2, "linecolor": "#506784", "showbackground": true, "ticks": "", "zerolinecolor": "#C8D4E3"}}, "shapedefaults": {"line": {"color": "#f2f5fa"}}, "sliderdefaults": {"bgcolor": "#C8D4E3", "bordercolor": "rgb(17,17,17)", "borderwidth": 1, "tickwidth": 0}, "ternary": {"aaxis": {"gridcolor": "#506784", "linecolor": "#506784", "ticks": ""}, "baxis": {"gridcolor": "#506784", "linecolor": "#506784", "ticks": ""}, "bgcolor": "rgb(17,17,17)", "caxis": {"gridcolor": "#506784", "linecolor": "#506784", "ticks": ""}}, "title": {"x": 0.05}, "updatemenudefaults": {"bgcolor": "#506784", "borderwidth": 0}, "xaxis": {"automargin": true, "gridcolor": "#283442", "linecolor": "#506784", "ticks": "", "title": {"standoff": 15}, "zerolinecolor": "#283442", "zerolinewidth": 2}, "yaxis": {"automargin": true, "gridcolor": "#283442", "linecolor": "#506784", "ticks": "", "title": {"standoff": 15}, "zerolinecolor": "#283442", "zerolinewidth": 2}}}, "xaxis": {"anchor": "y", "domain": [0.0, 1.0], "title": {"text": "Body Weight (kg)"}, "fixedrange": true}, "yaxis": {"anchor": "x", "domain": [0.0, 1.0], "title": {"text": "Total Value"}, "fixedrange": true}, "legend": {"title": {"text": "Weight Class"}, "tracegroupgap": 0, "itemsizing": "constant", "orientation": "h", "yanchor": "bottom", "y": -0.25, "xanchor": "right", "x": 1}, "title": {"text": "Men", "x": 0.5}, "margin": {"l": 0, "r": 0, "t": 30, "b": 0}, "paper_bgcolor": "#0F0F0F", "plot_bgcolor": "#0F0F0F"}}; |
|
const womenData = {"data": [{"customdata": {"dtype": "f8", "bdata": "AAAAAACAK0AAAAAAAIBBQAAAAAAAgEtAAAAAAABAYEAAAAAAAAAkQAAAAAAAQEBAAAAAAAAgTEAAAAAAAJBgQAAAAAAAAC5AAAAAAAAAPkAAAAAAAEBKQAAAAAAAQF9AAAAAAAAAKUAAAAAAAABGQAAAAAAAgEtAAAAAAABAWkAAAAAAAAAkQAAAAAAAgEFAAAAAAABASkAAAAAAACBcQAAAAAAAAARAAAAAAABARUAAAAAAAGBIQAAAAAAAwFxAAAAAAAAAHkAAAAAAAMBCQAAAAAAAAElAAAAAAACAW0AAAAAAAAAkQAAAAAAAgDtAAAAAAACARkAAAAAAAABeQAAAAAAAAB5AAAAAAACANkAAAAAAAABJQAAAAAAAAF5AAAAAAAAA+D8AAAAAAIA2QAAAAAAAoElAAAAAAACgXkA=", "shape": "10, 4"}, "hovertemplate": "<b>%{hovertext}</b><br><br>Weight Class=-52kg<br>Body Weight (kg)=%{x}<br>Total Value=%{y}<br>size_value=%{marker.size}<br>muscle_up_value=%{customdata[0]}<br>pull_value=%{customdata[1]}<br>dip_value=%{customdata[2]}<br>squat_value=%{customdata[3]}<extra></extra>", "hovertext": ["Aurora Riccardi", "Ludivine Compain", "Ana\u00efs Lozano Rojas", "C\u00e9line Chatelain", "Clementine Griffo", "Mona Shafiei", "Eleni Christinaki", "Sarah Taylor", "Miriam Scheld", "Agathe Casanova"], "legendgroup": "-52kg", "marker": {"color": "rgb(165,0,38)", "opacity": 0.7, "size": {"dtype": "f8", "bdata": "9lPhWRUHFkCyE4FiYAAVQM6/0k5atxFAC99ibtOJD0CgMUa8G/sLQIS9yAgsYwtAuNHIbwHQCUBhBhagEfYIQKAKz6o4UAhAAAAAAAAACEA="}, "sizemode": "area", "sizeref": 0.0375, "symbol": "circle"}, "mode": "markers", "name": "-52kg", "orientation": "v", "showlegend": true, "x": {"dtype": "f8", "bdata": "mpmZmZnZSUDNzMzMzExJQN/d3d3dfUlA393d3d19SUBmZmZmZmZJQM3MzMzMTElA393d3d19SUDf3d3d3X1JQDMzMzMzs0lAZmZmZmZmSUA="}, "xaxis": "x", "y": {"dtype": "f8", "bdata": "AAAAAAA4bUAAAAAAAOhsQAAAAAAA0GtAAAAAAAAQa0AAAAAAAEBqQAAAAAAAGGpAAAAAAACgaUAAAAAAAFBpQAAAAAAAAGlAAAAAAAC4aEA="}, "yaxis": "y", "type": "scatter"}, {"customdata": {"dtype": "f8", "bdata": "AAAAAAAALkAAAAAAACBMQAAAAAAAAFRAAAAAAADgYEAAAAAAAIAmQAAAAAAAAD5AAAAAAABAUEAAAAAAAGBjQAAAAAAAAB5AAAAAAACAQUAAAAAAAEBQQAAAAAAAEGNAAAAAAAAANEAAAAAAACBHQAAAAAAAQFBAAAAAAADgX0AAAAAAAIA7QAAAAAAAwExAAAAAAABAUEAAAAAAAEBaQAAAAAAAAC5AAAAAAABARUAAAAAAAGBNQAAAAAAAQGBAAAAAAAAANEAAAAAAAABJQAAAAAAAAElAAAAAAAAAXkAAAAAAAIAxQAAAAAAAgEZAAAAAAABAT0AAAAAAAIBbQAAAAAAAgDFAAAAAAACARkAAAAAAAABJQAAAAAAAAF5AAAAAAAAAGUAAAAAAAKBEQAAAAAAAoElAAAAAAACQYEA=", "shape": "10, 4"}, "hovertemplate": "<b>%{hovertext}</b><br><br>Weight Class=-57kg<br>Body Weight (kg)=%{x}<br>Total Value=%{y}<br>size_value=%{marker.size}<br>muscle_up_value=%{customdata[0]}<br>pull_value=%{customdata[1]}<br>dip_value=%{customdata[2]}<br>squat_value=%{customdata[3]}<extra></extra>", "hovertext": ["Nadine Hettinga", "Sofia Cerdan Bes", "Julie Brion", "Margaux Sanchez", "Martha Lubczynski", "Julia L\u00e4ngerer", "Kara Smith", "Laura Garc\u00eda Bitrian", "Lylia Ammour", "Lorena Latrelle"], "legendgroup": "-57kg", "marker": {"color": "rgb(215,48,39)", "opacity": 0.7, "size": {"dtype": "f8", "bdata": "PxqXO1VTKUBUHPqP4r4hQLVkNpSJZiFAUGeAjBIPIUAMBvCTEA4gQIBvmcsyrhtAkIXnG9K/GECOnmuM8I0WQEaKRG6MghVAshOBYmAAFUA="}, "sizemode": "area", "sizeref": 0.0375, "symbol": "circle"}, "mode": "markers", "name": "-57kg", "orientation": "v", "showlegend": true, "x": {"dtype": "f8", "bdata": "i6/4iq/4S0BmZmZmZiZMQIuv+Iqv+EtAZmZmZmbmS0AAAAAAAABMQJqZmZmZGUtAzczMzMxMTECLr/iKr/hLQAAAAAAAgExAmpmZmZnZS0A="}, "xaxis": "x", "y": {"dtype": "f8", "bdata": "AAAAAADkcUAAAAAAAFRwQAAAAAAAQHBAAAAAAAAscEAAAAAAAOBvQAAAAAAAyG5AAAAAAAAAbkAAAAAAAGBtQAAAAAAAEG1AAAAAAADobEA="}, "yaxis": "y", "type": "scatter"}, {"customdata": {"dtype": "f8", "bdata": "AAAAAAAALkAAAAAAAKBEQAAAAAAAgFFAAAAAAADQYUAAAAAAAIArQAAAAAAA4EVAAAAAAADAUkAAAAAAAOBgQAAAAAAAABlAAAAAAACgREAAAAAAAABOQAAAAAAAwGJAAAAAAAAANEAAAAAAAIBGQAAAAAAAwExAAAAAAACQYEAAAAAAAMAyQAAAAAAAoERAAAAAAACgTkAAAAAAAOBfQAAAAAAAAClAAAAAAACgREAAAAAAAKBOQAAAAAAAQGBAAAAAAAAAKUAAAAAAAMBHQAAAAAAAgFFAAAAAAADAXEAAAAAAAIAxQAAAAAAAAD5AAAAAAABAT0AAAAAAAJBgQAAAAAAAAB5AAAAAAADgQEAAAAAAAIBLQAAAAAAAMGFAAAAAAAAAHkAAAAAAAABEQAAAAAAAgEtAAAAAAABAYEA=", "shape": "10, 4"}, "hovertemplate": "<b>%{hovertext}</b><br><br>Weight Class=-63kg<br>Body Weight (kg)=%{x}<br>Total Value=%{y}<br>size_value=%{marker.size}<br>muscle_up_value=%{customdata[0]}<br>pull_value=%{customdata[1]}<br>dip_value=%{customdata[2]}<br>squat_value=%{customdata[3]}<extra></extra>", "hovertext": ["Laura Garc\u00eda Bitrian", "Faye Butler", "Ines Marius", "Lylia Ammour", "Mar Martinez", "Jelena Mladenovic", "Gianna Webbe", "Nadine Schulz", "Veronika Martin\u010di\u010d", "Taru Riipinen"], "legendgroup": "-63kg", "marker": {"color": "rgb(244,109,67)", "opacity": 0.7, "size": {"dtype": "f8", "bdata": "bWhRsgjjI0AaKZjCkIUjQJJ1kMZ/uCBADAbwkxAOIECtY25iiugcQOqdl7wDFBtA6p2XvAMUG0AftC3BwOUZQPZT4VkVBxZAzkxFILtRGUA="}, "sizemode": "area", "sizeref": 0.0375, "symbol": "circle"}, "mode": "markers", "name": "-63kg", "orientation": "v", "showlegend": true, "x": {"dtype": "f8", "bdata": "oA7qoA7qTkAzMzMzMzNOQGZmZmZmJk9AzczMzMyMTkAzMzMzM/NOQJqZmZmZGU9AoA7qoA7qTkCamZmZmVlPQKAO6qAO6k5AmpmZmZkZT0A="}, "xaxis": "x", "y": {"dtype": "f8", "bdata": "AAAAAADMcEAAAAAAALhwQAAAAAAAGHBAAAAAAADgb0AAAAAAABhvQAAAAAAAoG5AAAAAAACgbkAAAAAAAFBuQAAAAAAAOG1AAAAAAAAobkA="}, "yaxis": "y", "type": "scatter"}, {"customdata": {"dtype": "f8", "bdata": "AAAAAABANUAAAAAAAGBIQAAAAAAAcFJAAAAAAADQYUAAAAAAAAAuQAAAAAAAIEJAAAAAAAAgUkAAAAAAAGBjQAAAAAAAACRAAAAAAADgQEAAAAAAAABOQAAAAAAAYGRAAAAAAABAMEAAAAAAAIBBQAAAAAAA0FJAAAAAAACAYUAAAAAAAIAmQAAAAAAAAElAAAAAAABAT0AAAAAAAIBhQAAAAAAAgDZAAAAAAACARkAAAAAAAIBLQAAAAAAAgGFAAAAAAAAAKUAAAAAAACBMQAAAAAAA4E9AAAAAAADgX0AAAAAAAAA0QAAAAAAAAERAAAAAAACAUUAAAAAAAEBgQAAAAAAAQDVAAAAAAAAASUAAAAAAAEBPQAAAAAAAoF5AAAAAAACANkAAAAAAAKBEQAAAAAAAYE1AAAAAAACQYEA=", "shape": "10, 4"}, "hovertemplate": "<b>%{hovertext}</b><br><br>Weight Class=-70kg<br>Body Weight (kg)=%{x}<br>Total Value=%{y}<br>size_value=%{marker.size}<br>muscle_up_value=%{customdata[0]}<br>pull_value=%{customdata[1]}<br>dip_value=%{customdata[2]}<br>squat_value=%{customdata[3]}<extra></extra>", "hovertext": ["Christina Fr\u00f6hlich", "Lynn Narings", "Milana Popovic", "Nadine Schulz", "Florence Wong", "Sarah Anyamele", "Danae Morgan", "Caroline Vernier", "Karla Ramsden", "Axelle Ditacroute"], "legendgroup": "-70kg", "marker": {"color": "rgb(253,174,97)", "opacity": 0.7, "size": {"dtype": "f8", "bdata": "PxqXO1VTKUCuPawH9OsmQKfZ6VXiTSNASyRQAmQ7I0Cul3ODMXIiQM7vk0MbGCJAtWQ2lIlmIUC1ZDaUiWYhQNjGiKLTYiBADAbwkxAOIEA="}, "sizemode": "area", "sizeref": 0.0375, "symbol": "circle"}, "mode": "markers", "name": "-70kg", "orientation": "v", "showlegend": true, "x": {"dtype": "f8", "bdata": "Z2ZmZmYGUUAzMzMzMzNRQKNwPQrXA1FAo3A9CtcDUUCjcD0K1wNRQDMzMzMzE1FAZmZmZmbmUECjcD0K1wNRQAAAAAAA4FBAo3A9CtcDUUA="}, "xaxis": "x", "y": {"dtype": "f8", "bdata": "AAAAAADkcUAAAAAAAGxxQAAAAAAArHBAAAAAAACocEAAAAAAAHxwQAAAAAAAaHBAAAAAAABAcEAAAAAAAEBwQAAAAAAABHBAAAAAAADgb0A="}, "yaxis": "y", "type": "scatter"}, {"customdata": {"dtype": "f8", "bdata": "AAAAAAAAOUAAAAAAAABEQAAAAAAA4FBAAAAAAADwZEAAAAAAAAAeQAAAAAAAQEVAAAAAAADAUkAAAAAAALBjQAAAAAAAAClAAAAAAADgSkAAAAAAAABOQAAAAAAAgGFAAAAAAAAAAAAAAAAAAEBAQAAAAAAAQEpAAAAAAAAAZEAAAAAAAAAUQAAAAAAAwEJAAAAAAABASkAAAAAAACBiQAAAAAAAAARAAAAAAABARUAAAAAAAIBRQAAAAAAAQF9AAAAAAACAJkAAAAAAAKBJQAAAAAAAIE1AAAAAAABgXUAAAAAAAAAEQAAAAAAAgEFAAAAAAACAS0AAAAAAAEBgQAAAAAAAABRAAAAAAABAQEAAAAAAAABJQAAAAAAAQGBAAAAAAAAAKUAAAAAAAIBBQAAAAAAAAElAAAAAAAAAXkA=", "shape": "10, 4"}, "hovertemplate": "<b>%{hovertext}</b><br><br>Weight Class=+70kg<br>Body Weight (kg)=%{x}<br>Total Value=%{y}<br>size_value=%{marker.size}<br>muscle_up_value=%{customdata[0]}<br>pull_value=%{customdata[1]}<br>dip_value=%{customdata[2]}<br>squat_value=%{customdata[3]}<extra></extra>", "hovertext": ["Sarah Anyamele", "Maria Gajevskaja", "Claudia Van Osch", "Elena Paradiso", "Judith Kleinhansl", "Katerina Najmanov\u00e1", "Malgorzata Luckner", "Anastasija Odzic", "Anais Dethier", "Eva-Sophie M\u00f6rschel"], "legendgroup": "+70kg", "marker": {"color": "rgb(254,224,144)", "opacity": 0.7, "size": {"dtype": "f8", "bdata": "AAAAAAAALkDfV5YePRwoQKv4U0juKCNA6p2XvAMUG0CQhecb0r8YQJCF5xvSvxhAtNvgpA0wGEDOv9JOWrcRQAsIa1IgExBACwhrUiATEEA="}, "sizemode": "area", "sizeref": 0.0375, "symbol": "circle"}, "mode": "markers", "name": "+70kg", "orientation": "v", "showlegend": true, "x": {"dtype": "f8", "bdata": "3d3d3d3lUUDd3d3d3eVRQN3d3d3d5VFAmpmZmZkpUkAzMzMzM3NSQN3d3d3d5VFAZmZmZmamUUBmZmZmZoZRQJqZmZmZ2VFAAAAAAADAUUA="}, "xaxis": "x", "y": {"dtype": "f8", "bdata": "AAAAAADAckAAAAAAAKhxQAAAAAAApHBAAAAAAACgbkAAAAAAAABuQAAAAAAAAG5AAAAAAADYbUAAAAAAANBrQAAAAAAAMGtAAAAAAAAwa0A="}, "yaxis": "y", "type": "scatter"}, {"hovertemplate": "Body Weight: %{x:.1f} kg<br>Predicted Total: %{y:.1f}<extra></extra>", "line": {"color": "white", "dash": "solid", "width": 3}, "mode": "lines", "name": "Trend", "x": {"dtype": "f8", "bdata": "AAAAwMxMREA++OCDp4REQHzwwUeCvERAuuiiC130RED44IPPNyxFQDbZZJMSZEVAdNFFV+2bRUCyySYbyNNFQPDBB9+iC0ZAL7roon1DRkBtsslmWHtGQKuqqiozs0ZA6aKL7g3rRkAnm2yy6CJHQGWTTXbDWkdAo4suOp6SR0Dhgw/+eMpHQB988MFTAkhAXXTRhS46SECbbLJJCXJIQNlkkw3kqUhAF1100b7hSEBWVVWVmRlJQJRNNll0UUlA0kUXHU+JSUAQPvjgKcFJQE422aQE+UlAjC66aN8wSkDKJpssumhKQAgffPCUoEpARhddtG/YSkCEDz54ShBLQMIHHzwlSEtAAAAAAACAS0A++ODD2rdLQHzwwYe170tAuuiiS5AnTED44IMPa19MQDbZZNNFl0xAdNFFlyDPTECyySZb+wZNQPDBBx/WPk1ALrro4rB2TUBsssmmi65NQKuqqmpm5k1A6aKLLkEeTkAnm2zyG1ZOQGWTTbb2jU5Ao4suetHFTkDhgw8+rP1OQB988AGHNU9AXXTRxWFtT0CbbLKJPKVPQNpkk00X3U9AjC66CHkKUECrqqpqZiZQQMomm8xTQlBA6aKLLkFeUEAIH3yQLnpQQCebbPIbllBARhddVAmyUEBlk0229s1QQIQPPhjk6VBAo4suetEFUUDCBx/cviFRQOGDDz6sPVFAAAAAoJlZUUAffPABh3VRQD744GN0kVFAXXTRxWGtUUB88MEnT8lRQJtssok85VFAuuii6ykBUkDZZJNNFx1SQPjgg68EOVJAGF10EfJUUkA22WRz33BSQFZVVdXMjFJAdNFFN7qoUkCUTTaZp8RSQLLJJvuU4FJA0kUXXYL8UkDwwQe/bxhTQBA++CBdNFNALrrogkpQU0BONtnkN2xTQGyyyUYliFNAjC66qBKkU0CrqqoKAMBTQMomm2zt21NA6aKLztr3U0AIH3wwyBNUQCebbJK1L1RARhdd9KJLVEBlk01WkGdUQIQPPrh9g1RAo4suGmufVEDCBx98WLtUQOGDD95F11RAAAAAQDPzVEA="}, "y": {"dtype": "f8", "bdata": "xFdfGNDTZkBsDH6BR/RmQGNza80QFmdAAnOfUS45Z0Az8QkjoV1nQK/Q7Ppog2dAxGwBHYSqZ0CpT3M/79JnQHB9QHWl/GdAGz6TG6AnaEDCQ6nK1lNoQCPe10o/gWhAnD00js2vaEAaUlmvc99oQE+BsvUhEGlANGCb38ZBaUDgJYkyT3RpQFxEUxGmp2lAK0WOGLXbaUDgtseAZBBqQPLYTEabRWpAQhUBVj97akBYnqa+NbFqQHUY3OVi52pAgFf3v6oda0CMGdAJ8VNrQDoqf4MZimtAUioPKwjAa0BZoxx2ofVrQKATa4nKKmxAruCDbWlfbECc7ok/ZZNsQFgIiF2mxmxALiOgjRb5bECch6QfoSptQA6nyAgzW21ARH88+bqKbUA8kqlrKbltQKZ+qq5w5m1ARit16IQSbkAOdwoVXD1uQFfsVP/tZm5Agr2xNTSPbkApPmz6KbZuQEk3vDDM225AgCbbRhkAb0AeGcQdESNvQIrlLe+0RG9AS5pIMgdlb0AOq71/C4RvQLhIZ3XGoW9AXfwmmj2+b0DOkjZCd9lvQDweQXR6829AVlnCZycGcEC1bZg5/hFwQK7ulPNFHXBAtO0mAwMocED8fyf1OTJwQLB9lmzvO3BA3DwoGihFcEDLU6K06E1wQFq1AvI1VnBAAERqgRRecEBYPMIFiWVwQGiJEhGYbHBAgih+IEZzcED1KtqYl3lwQIOV08OQf3BA0EyYzTWFcEDWX/fCiopwQEZM7Y+Tj3BAmkOR/lOUcECg+li2z5hwQJ4hqTsKnXBAMUOp7wahcECAblIQyaRwQHu6sLhTqHBAIFhQ4amrcEC6js9gzq5wQE6cj+zDsXBAGg1/GY20cEA1rfhcLLdwQBC/sg2kuXBA85+6ZPa7cECAeHl+Jb5wQOwCv1szwHBAJNPP4iHCcEBu5nTg8sNwQIWRCgmoxXBA3iyN+ULHcECSIKI4xchwQLgrnDcwynBABPd5U4XLcEBxMN7VxcxwQDiWAPbyzXBA0nqX2Q3PcECqarmVF9BwQBK3ti8R0XBACMHqnfvRcEA="}, "type": "scatter"}], "layout": {"template": {"data": {"barpolar": [{"marker": {"line": {"color": "rgb(17,17,17)", "width": 0.5}, "pattern": {"fillmode": "overlay", "size": 10, "solidity": 0.2}}, "type": "barpolar"}], "bar": [{"error_x": {"color": "#f2f5fa"}, "error_y": {"color": "#f2f5fa"}, "marker": {"line": {"color": "rgb(17,17,17)", "width": 0.5}, "pattern": {"fillmode": "overlay", "size": 10, "solidity": 0.2}}, "type": "bar"}], "carpet": [{"aaxis": {"endlinecolor": "#A2B1C6", "gridcolor": "#506784", "linecolor": "#506784", "minorgridcolor": "#506784", "startlinecolor": "#A2B1C6"}, "baxis": {"endlinecolor": "#A2B1C6", "gridcolor": "#506784", "linecolor": "#506784", "minorgridcolor": "#506784", "startlinecolor": "#A2B1C6"}, "type": "carpet"}], "choropleth": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "choropleth"}], "contourcarpet": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "contourcarpet"}], "contour": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "contour"}], "heatmap": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "heatmap"}], "histogram2dcontour": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "histogram2dcontour"}], "histogram2d": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "histogram2d"}], "histogram": [{"marker": {"pattern": {"fillmode": "overlay", "size": 10, "solidity": 0.2}}, "type": "histogram"}], "mesh3d": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "mesh3d"}], "parcoords": [{"line": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "parcoords"}], "pie": [{"automargin": true, "type": "pie"}], "scatter3d": [{"line": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatter3d"}], "scattercarpet": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattercarpet"}], "scattergeo": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattergeo"}], "scattergl": [{"marker": {"line": {"color": "#283442"}}, "type": "scattergl"}], "scattermapbox": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattermapbox"}], "scattermap": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattermap"}], "scatterpolargl": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterpolargl"}], "scatterpolar": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterpolar"}], "scatter": [{"marker": {"line": {"color": "#283442"}}, "type": "scatter"}], "scatterternary": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterternary"}], "surface": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "surface"}], "table": [{"cells": {"fill": {"color": "#506784"}, "line": {"color": "rgb(17,17,17)"}}, "header": {"fill": {"color": "#2a3f5f"}, "line": {"color": "rgb(17,17,17)"}}, "type": "table"}]}, "layout": {"annotationdefaults": {"arrowcolor": "#f2f5fa", "arrowhead": 0, "arrowwidth": 1}, "autotypenumbers": "strict", "coloraxis": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "colorscale": {"diverging": [[0, "#8e0152"], [0.1, "#c51b7d"], [0.2, "#de77ae"], [0.3, "#f1b6da"], [0.4, "#fde0ef"], [0.5, "#f7f7f7"], [0.6, "#e6f5d0"], [0.7, "#b8e186"], [0.8, "#7fbc41"], [0.9, "#4d9221"], [1, "#276419"]], "sequential": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "sequentialminus": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]]}, "colorway": ["#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52"], "font": {"color": "#f2f5fa"}, "geo": {"bgcolor": "rgb(17,17,17)", "lakecolor": "rgb(17,17,17)", "landcolor": "rgb(17,17,17)", "showlakes": true, "showland": true, "subunitcolor": "#506784"}, "hoverlabel": {"align": "left"}, "hovermode": "closest", "mapbox": {"style": "dark"}, "paper_bgcolor": "rgb(17,17,17)", "plot_bgcolor": "rgb(17,17,17)", "polar": {"angularaxis": {"gridcolor": "#506784", "linecolor": "#506784", "ticks": ""}, "bgcolor": "rgb(17,17,17)", "radialaxis": {"gridcolor": "#506784", "linecolor": "#506784", "ticks": ""}}, "scene": {"xaxis": {"backgroundcolor": "rgb(17,17,17)", "gridcolor": "#506784", "gridwidth": 2, "linecolor": "#506784", "showbackground": true, "ticks": "", "zerolinecolor": "#C8D4E3"}, "yaxis": {"backgroundcolor": "rgb(17,17,17)", "gridcolor": "#506784", "gridwidth": 2, "linecolor": "#506784", "showbackground": true, "ticks": "", "zerolinecolor": "#C8D4E3"}, "zaxis": {"backgroundcolor": "rgb(17,17,17)", "gridcolor": "#506784", "gridwidth": 2, "linecolor": "#506784", "showbackground": true, "ticks": "", "zerolinecolor": "#C8D4E3"}}, "shapedefaults": {"line": {"color": "#f2f5fa"}}, "sliderdefaults": {"bgcolor": "#C8D4E3", "bordercolor": "rgb(17,17,17)", "borderwidth": 1, "tickwidth": 0}, "ternary": {"aaxis": {"gridcolor": "#506784", "linecolor": "#506784", "ticks": ""}, "baxis": {"gridcolor": "#506784", "linecolor": "#506784", "ticks": ""}, "bgcolor": "rgb(17,17,17)", "caxis": {"gridcolor": "#506784", "linecolor": "#506784", "ticks": ""}}, "title": {"x": 0.05}, "updatemenudefaults": {"bgcolor": "#506784", "borderwidth": 0}, "xaxis": {"automargin": true, "gridcolor": "#283442", "linecolor": "#506784", "ticks": "", "title": {"standoff": 15}, "zerolinecolor": "#283442", "zerolinewidth": 2}, "yaxis": {"automargin": true, "gridcolor": "#283442", "linecolor": "#506784", "ticks": "", "title": {"standoff": 15}, "zerolinecolor": "#283442", "zerolinewidth": 2}}}, "xaxis": {"anchor": "y", "domain": [0.0, 1.0], "title": {"text": "Body Weight (kg)"}, "fixedrange": true}, "yaxis": {"anchor": "x", "domain": [0.0, 1.0], "title": {"text": "Total Value"}, "fixedrange": true}, "legend": {"title": {"text": "Weight Class"}, "tracegroupgap": 0, "itemsizing": "constant", "orientation": "h", "yanchor": "bottom", "y": -0.25, "xanchor": "right", "x": 1}, "title": {"text": "Women", "x": 0.5}, "margin": {"l": 0, "r": 0, "t": 30, "b": 0}, "paper_bgcolor": "#0F0F0F", "plot_bgcolor": "#0F0F0F"}}; |
|
|
|
|
|
const config = { |
|
responsive: true, |
|
displaylogo: false, |
|
displayModeBar: false |
|
}; |
|
|
|
|
|
if (Object.keys(menData).length > 0) { |
|
Plotly.newPlot('men-plot', menData.data, menData.layout, config); |
|
} else { |
|
document.getElementById('men-plot').innerHTML = |
|
'<div class="flex h-full items-center justify-center"><p>No data available</p></div>'; |
|
} |
|
|
|
if (Object.keys(womenData).length > 0) { |
|
Plotly.newPlot('women-plot', womenData.data, womenData.layout, config); |
|
} else { |
|
document.getElementById('women-plot').innerHTML = |
|
'<div class="flex h-full items-center justify-center"><p>No data available</p></div>'; |
|
} |
|
|
|
|
|
const totalInput = document.getElementById('total-input'); |
|
const bodyweightInput = document.getElementById('bodyweight-input'); |
|
const calculateBtn = document.getElementById('calculate-btn'); |
|
const risResult = document.getElementById('ris-result'); |
|
|
|
|
|
calculateBtn.addEventListener('click', function() { |
|
const gender = document.querySelector('input[name="gender"]:checked').value; |
|
const bodyweight = parseFloat(bodyweightInput.value) || 0; |
|
const total = parseFloat(totalInput.value) || 0; |
|
|
|
if (bodyweight <= 0 || total <= 0) { |
|
risResult.textContent = '0.00'; |
|
return; |
|
} |
|
|
|
let risScore; |
|
if (gender === 'male') { |
|
|
|
risScore = risIndex(bodyweight, |
|
men_const[0], |
|
men_const[1], |
|
men_const[2], |
|
men_const[3], |
|
men_const[4]) * total; |
|
} else { |
|
|
|
risScore = risIndex(bodyweight, |
|
women_const[0], |
|
women_const[1], |
|
women_const[2], |
|
women_const[3], |
|
women_const[4]) * total; |
|
} |
|
|
|
risResult.textContent = risScore.toFixed(2); |
|
}); |
|
|
|
|
|
if (typeof men_const !== 'undefined' && typeof women_const !== 'undefined') { |
|
const table = document.getElementById('constants-table'); |
|
const tbody = table.querySelector('tbody'); |
|
|
|
|
|
const labels = ['A', 'K', 'B', 'v', 'Q']; |
|
|
|
|
|
for (let i = 0; i < 5; i++) { |
|
const row = document.createElement('tr'); |
|
row.className = 'border-t border-dark-300'; |
|
|
|
|
|
const nameCell = document.createElement('td'); |
|
nameCell.className = 'py-2 text-gray-300'; |
|
nameCell.textContent = labels[i]; |
|
row.appendChild(nameCell); |
|
|
|
|
|
const menCell = document.createElement('td'); |
|
menCell.className = 'py-2 text-gray-300'; |
|
menCell.textContent = men_const[i]; |
|
row.appendChild(menCell); |
|
|
|
|
|
const womenCell = document.createElement('td'); |
|
womenCell.className = 'py-2 text-gray-300'; |
|
womenCell.textContent = women_const[i]; |
|
row.appendChild(womenCell); |
|
|
|
tbody.appendChild(row); |
|
} |
|
|
|
|
|
const excelMenFormula = `=B2*100/(${men_const[0]}+(${men_const[1]}-${men_const[0]})/(1+${men_const[4]}*EXP(-${men_const[2]}*(A2-${men_const[3]}))))`; |
|
document.getElementById('excel-men-formula').textContent = excelMenFormula; |
|
|
|
|
|
const excelWomenFormula = `=B2*100/(${women_const[0]}+(${women_const[1]}-${women_const[0]})/(1+${women_const[4]}*EXP(-${women_const[2]}*(A2-${women_const[3]}))))`; |
|
document.getElementById('excel-women-formula').textContent = excelWomenFormula; |
|
|
|
|
|
const googleSheetsCode = `/** |
|
* Calculates RIS score for male athletes |
|
* |
|
* @param {number} bodyweight The athlete's body weight in kg |
|
* @param {number} total The total weight lifted in kg |
|
* @return {number} The RIS score |
|
* @customfunction |
|
*/ |
|
function RIS_MEN(bodyweight, total) { |
|
var A = ${men_const[0]}; |
|
var K = ${men_const[1]}; |
|
var B = ${men_const[2]}; |
|
var v = ${men_const[3]}; |
|
var Q = ${men_const[4]}; |
|
|
|
return total * 100 / (A + (K - A) / (1 + Q * Math.exp(-B * (bodyweight - v)))); |
|
} |
|
|
|
/** |
|
* Calculates RIS score for female athletes |
|
* |
|
* @param {number} bodyweight The athlete's body weight in kg |
|
* @param {number} total The total weight lifted in kg |
|
* @return {number} The RIS score |
|
* @customfunction |
|
*/ |
|
function RIS_WOMEN(bodyweight, total) { |
|
var A = ${women_const[0]}; |
|
var K = ${women_const[1]}; |
|
var B = ${women_const[2]}; |
|
var v = ${women_const[3]}; |
|
var Q = ${women_const[4]}; |
|
|
|
return total * 100 / (A + (K - A) / (1 + Q * Math.exp(-B * (bodyweight - v)))); |
|
}`; |
|
document.getElementById('google-sheets-code').textContent = googleSheetsCode; |
|
|
|
|
|
hljs.highlightAll(); |
|
|
|
|
|
const copyButtons = document.querySelectorAll('.copy-button'); |
|
copyButtons.forEach(button => { |
|
button.addEventListener('click', function() { |
|
const targetId = this.getAttribute('data-target'); |
|
const codeElement = document.getElementById(targetId); |
|
const textToCopy = codeElement.textContent; |
|
|
|
navigator.clipboard.writeText(textToCopy).then(() => { |
|
|
|
const originalText = this.textContent; |
|
this.textContent = 'Copied!'; |
|
this.style.background = '#10B981'; |
|
|
|
|
|
setTimeout(() => { |
|
this.textContent = originalText; |
|
this.style.background = ''; |
|
}, 2000); |
|
}); |
|
}); |
|
}); |
|
} |
|
}); |
|
</script> |
|
<script> |
|
|
|
document.addEventListener('DOMContentLoaded', function() { |
|
|
|
const faqToggles = document.querySelectorAll('.faq-toggle'); |
|
|
|
faqToggles.forEach(toggle => { |
|
toggle.addEventListener('click', function() { |
|
const content = this.nextElementSibling; |
|
const icon = this.querySelector('.faq-icon'); |
|
|
|
|
|
content.classList.toggle('hidden'); |
|
|
|
|
|
if (content.classList.contains('hidden')) { |
|
icon.classList.remove('rotate-180'); |
|
} else { |
|
icon.classList.add('rotate-180'); |
|
} |
|
}); |
|
}); |
|
}); |
|
</script> |
|
|
|
<script> |
|
document.addEventListener('DOMContentLoaded', function() { |
|
|
|
const mobileNavButton = document.getElementById('mobile-nav-button'); |
|
const mobileNavMenu = document.getElementById('mobile-nav-menu'); |
|
const mobileNavIcon = document.getElementById('mobile-nav-icon'); |
|
|
|
if (mobileNavButton && mobileNavMenu) { |
|
mobileNavButton.addEventListener('click', function() { |
|
mobileNavMenu.classList.toggle('hidden'); |
|
mobileNavIcon.classList.toggle('rotate-180'); |
|
}); |
|
} |
|
|
|
|
|
const navLinks = document.querySelectorAll('.nav-link, #mobile-nav-menu a'); |
|
|
|
|
|
navLinks.forEach(link => { |
|
link.addEventListener('click', function(e) { |
|
e.preventDefault(); |
|
|
|
|
|
if (mobileNavMenu) { |
|
mobileNavMenu.classList.add('hidden'); |
|
if (mobileNavIcon) mobileNavIcon.classList.remove('rotate-180'); |
|
} |
|
|
|
|
|
const targetId = this.getAttribute('href'); |
|
const targetSection = document.querySelector(targetId); |
|
|
|
if (targetSection) { |
|
|
|
window.scrollTo({ |
|
top: targetSection.offsetTop - 20, |
|
behavior: 'smooth' |
|
}); |
|
|
|
|
|
navLinks.forEach(link => link.classList.remove('text-white', 'font-medium')); |
|
this.classList.add('text-white', 'font-medium'); |
|
} |
|
}); |
|
}); |
|
|
|
|
|
function highlightCurrentSection() { |
|
const sections = document.querySelectorAll('#intro, #calculator, #data-analysis, #visualization, #integration, #faq'); |
|
let currentSectionId = ''; |
|
|
|
sections.forEach(section => { |
|
const sectionTop = section.offsetTop; |
|
const sectionHeight = section.offsetHeight; |
|
|
|
if (window.scrollY >= (sectionTop - 100) && window.scrollY < (sectionTop + sectionHeight - 100)) { |
|
currentSectionId = '#' + section.getAttribute('id'); |
|
} |
|
}); |
|
|
|
navLinks.forEach(link => { |
|
if (link.getAttribute('href') === currentSectionId) { |
|
link.classList.add('text-white', 'font-medium'); |
|
link.classList.remove('text-gray-300'); |
|
} else { |
|
link.classList.remove('text-white', 'font-medium'); |
|
link.classList.add('text-gray-300'); |
|
} |
|
}); |
|
} |
|
|
|
|
|
window.addEventListener('scroll', highlightCurrentSection); |
|
|
|
|
|
highlightCurrentSection(); |
|
}); |
|
</script> |
|
</body> |
|
</html> |