Update
Browse files- .DS_Store +0 -0
- index.html +451 -19
- static/ris.js +36 -0
- style.css +0 -28
.DS_Store
ADDED
|
Binary file (6.15 kB). View file
|
|
|
index.html
CHANGED
|
@@ -1,19 +1,451 @@
|
|
| 1 |
-
<!
|
| 2 |
-
<html>
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!DOCTYPE html>
|
| 2 |
+
<html lang="en" class="dark">
|
| 3 |
+
<head>
|
| 4 |
+
<meta charset="UTF-8">
|
| 5 |
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 6 |
+
<title>Athlete Performance Visualization</title>
|
| 7 |
+
<script src="https://cdn.tailwindcss.com"></script>
|
| 8 |
+
<script src="https://cdn.plot.ly/plotly-3.0.0.min.js" charset="utf-8"></script>
|
| 9 |
+
<script src="static/ris.js"></script>
|
| 10 |
+
<!-- Add highlight.js for code syntax highlighting -->
|
| 11 |
+
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/atom-one-dark.min.css">
|
| 12 |
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js"></script>
|
| 13 |
+
<!-- Add Excel/Sheets language support -->
|
| 14 |
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/javascript.min.js"></script>
|
| 15 |
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/excel.min.js"></script>
|
| 16 |
+
<script>
|
| 17 |
+
tailwind.config = {
|
| 18 |
+
darkMode: 'class',
|
| 19 |
+
theme: {
|
| 20 |
+
extend: {
|
| 21 |
+
colors: {
|
| 22 |
+
dark: {
|
| 23 |
+
100: '#0F0F0F',
|
| 24 |
+
200: '#1A1A1A',
|
| 25 |
+
300: '#2A2A2A',
|
| 26 |
+
400: '#3A3A3A',
|
| 27 |
+
},
|
| 28 |
+
accent: {
|
| 29 |
+
100: '#6366F1',
|
| 30 |
+
200: '#4F46E5',
|
| 31 |
+
}
|
| 32 |
+
},
|
| 33 |
+
fontFamily: {
|
| 34 |
+
sans: ['Inter', 'system-ui', 'sans-serif'],
|
| 35 |
+
},
|
| 36 |
+
}
|
| 37 |
+
}
|
| 38 |
+
}
|
| 39 |
+
</script>
|
| 40 |
+
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap">
|
| 41 |
+
<style>
|
| 42 |
+
body {
|
| 43 |
+
font-family: 'Inter', sans-serif;
|
| 44 |
+
}
|
| 45 |
+
|
| 46 |
+
/* Custom scrollbar */
|
| 47 |
+
::-webkit-scrollbar {
|
| 48 |
+
width: 6px;
|
| 49 |
+
height: 6px;
|
| 50 |
+
}
|
| 51 |
+
::-webkit-scrollbar-track {
|
| 52 |
+
background: #1A1A1A;
|
| 53 |
+
}
|
| 54 |
+
::-webkit-scrollbar-thumb {
|
| 55 |
+
background: #3A3A3A;
|
| 56 |
+
border-radius: 6px;
|
| 57 |
+
}
|
| 58 |
+
::-webkit-scrollbar-thumb:hover {
|
| 59 |
+
background: #4A4A4A;
|
| 60 |
+
}
|
| 61 |
+
|
| 62 |
+
/* Plot container styling */
|
| 63 |
+
.plot-container {
|
| 64 |
+
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
|
| 65 |
+
}
|
| 66 |
+
|
| 67 |
+
/* Custom tooltip styling */
|
| 68 |
+
.js-plotly-plot .plotly .hoverlayer .hover {
|
| 69 |
+
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.4) !important;
|
| 70 |
+
}
|
| 71 |
+
|
| 72 |
+
/* Code blocks styling */
|
| 73 |
+
.hljs {
|
| 74 |
+
background: #1A1A1A !important;
|
| 75 |
+
border-radius: 4px;
|
| 76 |
+
padding: 1rem !important;
|
| 77 |
+
font-size: 0.8rem !important;
|
| 78 |
+
}
|
| 79 |
+
|
| 80 |
+
.code-block-wrapper {
|
| 81 |
+
position: relative;
|
| 82 |
+
}
|
| 83 |
+
|
| 84 |
+
.copy-button {
|
| 85 |
+
position: absolute;
|
| 86 |
+
top: 8px;
|
| 87 |
+
right: 8px;
|
| 88 |
+
background: #3A3A3A;
|
| 89 |
+
border: none;
|
| 90 |
+
border-radius: 4px;
|
| 91 |
+
color: #e2e8f0;
|
| 92 |
+
padding: 2px 8px;
|
| 93 |
+
font-size: 12px;
|
| 94 |
+
cursor: pointer;
|
| 95 |
+
opacity: 0;
|
| 96 |
+
transition: opacity 0.2s;
|
| 97 |
+
}
|
| 98 |
+
|
| 99 |
+
.code-block-wrapper:hover .copy-button {
|
| 100 |
+
opacity: 1;
|
| 101 |
+
}
|
| 102 |
+
|
| 103 |
+
.copy-button:hover {
|
| 104 |
+
background: #4F46E5;
|
| 105 |
+
}
|
| 106 |
+
</style>
|
| 107 |
+
</head>
|
| 108 |
+
<body class="bg-dark-100 text-gray-200 min-h-screen leading-relaxed">
|
| 109 |
+
<main class="container mx-auto px-6 py-4 max-w-9xl">
|
| 110 |
+
<header class="mb-5 mx-2 md:mx-14">
|
| 111 |
+
<h2 class="text-2xl md:text-3xl font-bold text-white text-pretty">Relative Index for Streetlifting - 2025 Edition</h2>
|
| 112 |
+
<p class="text-xs italic">Created by Waris Radji & Mathieu Ardouin.</p>
|
| 113 |
+
</header>
|
| 114 |
+
<div class="p-5 md:mx-14">
|
| 115 |
+
<h3 class="text-xl font-medium mb-2 text-white">What is the RIS Score?</h3>
|
| 116 |
+
<p class="text-gray-200 text-sm md:text-base">
|
| 117 |
+
The Relative Index for Streetlifting (RIS) is a scoring system that makes fair comparisons possible between athletes of different weights and <i class="text-gray-400">genders</i>. 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 all categories in streetlifting competitions.
|
| 118 |
+
</p>
|
| 119 |
+
</div>
|
| 120 |
+
|
| 121 |
+
<div class="w-full">
|
| 122 |
+
<!-- RIS Calculator Section -->
|
| 123 |
+
<div class="px-5 rounded-md max-w-2xl mx-auto">
|
| 124 |
+
<h3 class="text-xl font-medium mb-4 text-white">Calculate your RIS Score</h3>
|
| 125 |
+
|
| 126 |
+
<div class="flex flex-col space-y-4">
|
| 127 |
+
<!-- Total input -->
|
| 128 |
+
<div>
|
| 129 |
+
<label class="block mb-1 text-white">Total (kg)</label>
|
| 130 |
+
<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">
|
| 131 |
+
</div>
|
| 132 |
+
|
| 133 |
+
<!-- Bodyweight input -->
|
| 134 |
+
<div>
|
| 135 |
+
<label class="block mb-1 text-white">Body Weight (kg)</label>
|
| 136 |
+
<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">
|
| 137 |
+
</div>
|
| 138 |
+
|
| 139 |
+
<!-- Gender selection -->
|
| 140 |
+
<div>
|
| 141 |
+
<label class="block mb-1 text-white">Gender</label>
|
| 142 |
+
<div class="flex space-x-6 mt-2">
|
| 143 |
+
<label class="inline-flex items-center">
|
| 144 |
+
<input type="radio" name="gender" value="male" class="hidden peer" checked>
|
| 145 |
+
<span class="w-4 h-4 border rounded-full border-red-600 inline-block mr-2 peer-checked:bg-red-600"></span>
|
| 146 |
+
<span class="text-white">♂ Men</span>
|
| 147 |
+
</label>
|
| 148 |
+
<label class="inline-flex items-center">
|
| 149 |
+
<input type="radio" name="gender" value="female" class="hidden peer">
|
| 150 |
+
<span class="w-4 h-4 border rounded-full border-white inline-block mr-2 peer-checked:bg-white"></span>
|
| 151 |
+
<span class="text-white">♀ Women</span>
|
| 152 |
+
</label>
|
| 153 |
+
</div>
|
| 154 |
+
</div>
|
| 155 |
+
|
| 156 |
+
<!-- Calculate button -->
|
| 157 |
+
<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">
|
| 158 |
+
Calculate
|
| 159 |
+
</button>
|
| 160 |
+
|
| 161 |
+
<!-- Result -->
|
| 162 |
+
<div class="flex justify-center items-center mt-4">
|
| 163 |
+
<div id="ris-result" class="text-7xl font-bold text-red-600">0.00</div>
|
| 164 |
+
</div>
|
| 165 |
+
</div>
|
| 166 |
+
</div>
|
| 167 |
+
</div>
|
| 168 |
+
|
| 169 |
+
<div class="p-5 md:mx-14 mt-8">
|
| 170 |
+
<h3 class="text-xl font-medium mb-2 text-white">Data Analysis</h3>
|
| 171 |
+
<p class="text-gray-200 text-sm md:text-base">
|
| 172 |
+
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 regression analysis—a statistical technique that identifies the relationship between these variables by finding the curve that best fits the data points. 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 method will be released soon.</i>
|
| 173 |
+
</p>
|
| 174 |
+
</div>
|
| 175 |
+
|
| 176 |
+
<div class="grid grid-cols-1 lg:grid-cols-2 gap-8 mt-8">
|
| 177 |
+
<div id="men-plot" class="w-full h-[500px]"></div>
|
| 178 |
+
<div id="women-plot" class="w-full h-[500px]"></div>
|
| 179 |
+
</div>
|
| 180 |
+
|
| 181 |
+
<div class="p-5 md:mx-14">
|
| 182 |
+
<p class="text-gray-400 text-xs md:text-sm">
|
| 183 |
+
This visualization shows the relationship between body weight (x-axis) and total performance score (y-axis)
|
| 184 |
+
for athletes across different weight classes. The size of each point represents the total score, with larger
|
| 185 |
+
points indicating higher scores. Hover over points to see detailed athlete information.
|
| 186 |
+
</p>
|
| 187 |
+
</div>
|
| 188 |
+
|
| 189 |
+
<!-- Integration Section -->
|
| 190 |
+
<div class="p-5 md:mx-14 mt-8">
|
| 191 |
+
<h3 class="text-xl font-medium mb-4 text-white">Integration</h3>
|
| 192 |
+
<p class="text-gray-200 text-sm md:text-base mb-4">
|
| 193 |
+
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.
|
| 194 |
+
</p>
|
| 195 |
+
|
| 196 |
+
<div class="mb-6">
|
| 197 |
+
<h4 class="text-lg font-medium mb-2 text-white">Constants</h4>
|
| 198 |
+
<p class="text-gray-200 text-xs mb-3">These values are the mathematical constants derived from our regression analysis of elite athlete data:</p>
|
| 199 |
+
<table id="constants-table" class="w-full text-left">
|
| 200 |
+
<thead>
|
| 201 |
+
<tr>
|
| 202 |
+
<th class="text-white py-2">Constant</th>
|
| 203 |
+
<th class="text-white py-2">Men</th>
|
| 204 |
+
<th class="text-white py-2">Women</th>
|
| 205 |
+
</tr>
|
| 206 |
+
</thead>
|
| 207 |
+
<tbody>
|
| 208 |
+
<!-- Table rows will be populated via JavaScript -->
|
| 209 |
+
</tbody>
|
| 210 |
+
</table>
|
| 211 |
+
</div>
|
| 212 |
+
|
| 213 |
+
<div class="mb-6">
|
| 214 |
+
<h4 class="text-lg font-medium mb-2 text-white">Formula</h4>
|
| 215 |
+
<!-- MathJax formula -->
|
| 216 |
+
<script type="text/javascript" async
|
| 217 |
+
src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/MathJax.js?config=TeX-MML-AM_CHTML">
|
| 218 |
+
</script>
|
| 219 |
+
<div>
|
| 220 |
+
\[
|
| 221 |
+
\text{RIS} = \text{Total} \times \frac{100}{A + \frac{K - A}{1 + Q \cdot e^{-B \cdot (\text{BW} - v)}}}
|
| 222 |
+
\]
|
| 223 |
+
</div>
|
| 224 |
+
<p class="text-gray-400 text-xs mt-2">
|
| 225 |
+
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.
|
| 226 |
+
</p>
|
| 227 |
+
</div>
|
| 228 |
+
|
| 229 |
+
<div class="mb-6">
|
| 230 |
+
<h4 class="text-lg font-medium mb-2 text-white">Microsoft Excel</h4>
|
| 231 |
+
<p class="text-gray-200 text-xs 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>
|
| 232 |
+
<p class="text-white mb-1">For Men:</p>
|
| 233 |
+
<div class="mb-3 code-block-wrapper">
|
| 234 |
+
<pre><code id="excel-men-formula" class="excel"></code></pre>
|
| 235 |
+
<button class="copy-button" data-target="excel-men-formula">Copy</button>
|
| 236 |
+
</div>
|
| 237 |
+
<p class="text-white mb-1">For Women:</p>
|
| 238 |
+
<div class="code-block-wrapper">
|
| 239 |
+
<pre><code id="excel-women-formula" class="excel"></code></pre>
|
| 240 |
+
<button class="copy-button" data-target="excel-women-formula">Copy</button>
|
| 241 |
+
</div>
|
| 242 |
+
<p class="text-gray-400 text-xs mt-2">
|
| 243 |
+
Assuming A2 = Body Weight in kg, B2 = Total in kg
|
| 244 |
+
</p>
|
| 245 |
+
</div>
|
| 246 |
+
|
| 247 |
+
<div>
|
| 248 |
+
<h4 class="text-lg font-medium mb-2 text-white">Google Sheets</h4>
|
| 249 |
+
<p class="text-gray-200 text-xs mb-2">For a more convenient implementation in Google Sheets, you can create custom functions that calculate RIS scores with a single function call:</p>
|
| 250 |
+
<p class="text-gray-200 text-sm mt-4 mb-2">Creating a Custom Function:</p>
|
| 251 |
+
<ol class="text-xs text-gray-300 list-decimal pl-4 space-y-1 mb-2">
|
| 252 |
+
<li>Open your Google Sheet</li>
|
| 253 |
+
<li>Go to Extensions → Apps Script</li>
|
| 254 |
+
<li>Paste the following code (constants are automatically filled from the current RIS.js file):</li>
|
| 255 |
+
</ol>
|
| 256 |
+
<div class="code-block-wrapper">
|
| 257 |
+
<pre><code id="google-sheets-code" class="javascript"></code></pre>
|
| 258 |
+
<button class="copy-button" data-target="google-sheets-code">Copy</button>
|
| 259 |
+
</div>
|
| 260 |
+
<p class="text-xs text-gray-300 mt-2">After saving the script, you can use the functions directly in your sheet:</p>
|
| 261 |
+
<ul class="text-xs text-gray-300 list-disc pl-4 space-y-1 mt-1">
|
| 262 |
+
<li><code>=RIS_MEN(A2, B2)</code> - where A2 is body weight and B2 is total weight for male athletes</li>
|
| 263 |
+
<li><code>=RIS_WOMEN(A2, B2)</code> - where A2 is body weight and B2 is total weight for female athletes</li>
|
| 264 |
+
</ul>
|
| 265 |
+
</div>
|
| 266 |
+
</div>
|
| 267 |
+
|
| 268 |
+
</main>
|
| 269 |
+
|
| 270 |
+
<footer class="mt-auto py-6 border-t border-dark-300 text-center text-gray-500 text-sm">
|
| 271 |
+
<div class="container mx-auto px-6">
|
| 272 |
+
</div>
|
| 273 |
+
</footer>
|
| 274 |
+
|
| 275 |
+
<script>
|
| 276 |
+
document.addEventListener('DOMContentLoaded', function() {
|
| 277 |
+
// Parse the JSON data for the graphs
|
| 278 |
+
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": "9nRvULxDd0AWRtqtK213QB62NYIRmXdA+QbD5XfHd0BuXR/YZPh3QMPv+bPZK3hAwsYmqdJheED93wpCRpp4QGxawvkk1XhARvWO6FgSeUB0ZAaMxVF5QKlEEbBHk3lA7JINfbXWeUA4R1Gu3ht6QE454fKMYnpANQGEeISqekCCL36fhPN6QOLgWdNIPXtAZMZAg4mHe0DgSsgy/dF7QG+ivJpZHHxAMOeU0FRmfEDA6Npqpq98QJ4b/ZgI+HxA8Gq0JTk/fUBqdFNc+oR9QB414MoTyX1A//Ck3FILfkDYZc5Ki0t+QBy5kWKXiX5A/CQVIljFfkAGYtoutf5+QJTpn6mcNX9AilKN5AJqf0AmxgUB4pt/QJIFr3o5y39AXtglpQ34f0CKssOQMxGAQAJpPCgpJYBAD0ldYu83gEAkZNRcj0mAQOMPLUgTWoBAp/mxKoZpgEDDXlao83eAQOWrFNBnhYBAsJX07u6RgEDQDblolZ2AQO4VD5ZnqIBAOaz4p3GygECi4xmQv7uAQL6AgO1cxIBA0PF2/VTMgEA3+vCPstOAQGnSIf9/2oBA18/PKcfggEDKBwBwkeaAQOsWnLHn64BAia+8TtLwgEAlVkwpWfWAQLRtvqeD+YBANiKfuFj9gED2s8jW3gCBQIgDEg4cBIFAwPVQABYHgUDmUZHq0QmBQK0bZqpUDIFARSRAw6IOgUDEq7hjwBCBQOh5wmqxEoFAUN+2bHkUgUCapDa4GxaBQK4X2VqbF4FAFTalJfsYgUDkcFKxPRqBQHC+T2JlG4FAq6mQbHQcgUBk1yDXbB2BQHIWf39QHoFARojBHCEfgUAdyYRC4B+BQKA/qGOPIIFAfOfZ1C8hgUA2BfTOwiGBQKY+L3FJIoFAmpUrw8QigUDJu9K2NSOBQBkqFiqdI4FAJlOL6PsjgUAlM+isUiSBQMpmYiKiJIFAtdjy5eokgUDP+X+HLSWBQE5d8IpqJYFArnUnaaIlgUCiFO6Q1SWBQIk1yGcEJoFARoC5Si8mgUCi2fmOViaBQM4+m4J6JoFANBMibZsmgUA="}, "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)"}}, "yaxis": {"anchor": "x", "domain": [0.0, 1.0], "title": {"text": "Total Value"}}, "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"}};
|
| 279 |
+
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": "R24p8xXHZ0D8QB6SLepnQEiZvF0yDmhAmY4iuR8zaEBk0koX8FhoQDyhz/acf2hAjJJ93x6naEAap9xhbc9oQOTG0Bh/+GhAuJJsrUkiaUDmFQrdwUxpQNubtIHbd2lAbtnlnImjaUDu6I5kvs9pQHOCW1Jr/GlAw50TNYEpakDQjPVD8FZqQAfk2DOohGpAd3fhTZiyakBQloGHr+BqQKLAg5vcDmtA1YzOIw49a0BzgJGzMmtrQLJih/E4mWtAsxn6sQ/Ha0DkeDUQpvRrQCx9GYfrIWxA1C+BCNBObECUpTkTRHtsQO0YTMc4p2xAWrpm+J/SbEDWOzk+bP1sQC4RpAKRJ21AGJSjjQJRbUCobOoOtnltQEqKKKWhoW1ALGQFY7zIbUCK7dxR/u5tQIqBVnJgFG5A9OHzutw4bkCwJrwUblxuQEYdK1YQf25AJhWRPMCgbkACdRFke8FuQA3Fbz5A4W5AICzbCA4Ab0DYy+fA5B1vQMEM5BjFOm9ArOW1a7BWb0AIl2mwqHFvQKJSmG2wi29AX/fJrMqkb0AegvHt+rxvQOwyIBtF1G9AKr2HfK3qb0BtH3BWHABwQOaeIcd1CnBAlsvEn2UUcEAYmBuJ7h1wQL4qfkATJ3BAbgtpk9YvcECNSFpbOzhwQEkA/nlEQHBATtKp1fRHcEBo9SVWT09wQPEDwuFWVnBAdgazWg5dcEA81LeceGNwQHuKAHuYaXBAuppVvnBvcECRxHojBHVwQKI0yllVenBAG/cDAmd/cEAm7k2tO4RwQG2JYNzViHBAxZHc/jeNcECGecZyZJFwQBLFI4RdlXBAu0a3bCWZcEDxE9lTvpxwQF5GZ04qoHBA6MnMXmujcEDspht1g6ZwQGpmOG90qXBAi1sUGUCscEA0yvQs6K5wQHQNxVNusXBAsQlyJdSzcEDRXU0pG7ZwQKfrdtZEuHBAEnNLlFK6cED2G9e6RbxwQN3pSpMfvnBAjjB0WOG/cEAfOzU3jMFwQGNv/k4hw3BA4E1HsqHEcEDHwgZnDsZwQB5PKmdox3BALaILobDIcEA="}, "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)"}}, "yaxis": {"anchor": "x", "domain": [0.0, 1.0], "title": {"text": "Total Value"}}, "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"}};
|
| 280 |
+
|
| 281 |
+
// Configuration for both plots
|
| 282 |
+
const config = {
|
| 283 |
+
responsive: true,
|
| 284 |
+
displaylogo: false,
|
| 285 |
+
displayModeBar: false
|
| 286 |
+
};
|
| 287 |
+
|
| 288 |
+
// Check for data and render plots
|
| 289 |
+
if (Object.keys(menData).length > 0) {
|
| 290 |
+
Plotly.newPlot('men-plot', menData.data, menData.layout, config);
|
| 291 |
+
} else {
|
| 292 |
+
document.getElementById('men-plot').innerHTML =
|
| 293 |
+
'<div class="flex h-full items-center justify-center"><p>No data available</p></div>';
|
| 294 |
+
}
|
| 295 |
+
|
| 296 |
+
if (Object.keys(womenData).length > 0) {
|
| 297 |
+
Plotly.newPlot('women-plot', womenData.data, womenData.layout, config);
|
| 298 |
+
} else {
|
| 299 |
+
document.getElementById('women-plot').innerHTML =
|
| 300 |
+
'<div class="flex h-full items-center justify-center"><p>No data available</p></div>';
|
| 301 |
+
}
|
| 302 |
+
|
| 303 |
+
// RIS Calculator functionality
|
| 304 |
+
const totalInput = document.getElementById('total-input');
|
| 305 |
+
const bodyweightInput = document.getElementById('bodyweight-input');
|
| 306 |
+
const calculateBtn = document.getElementById('calculate-btn');
|
| 307 |
+
const risResult = document.getElementById('ris-result');
|
| 308 |
+
|
| 309 |
+
// Calculate RIS score
|
| 310 |
+
calculateBtn.addEventListener('click', function() {
|
| 311 |
+
const gender = document.querySelector('input[name="gender"]:checked').value;
|
| 312 |
+
const bodyweight = parseFloat(bodyweightInput.value) || 0;
|
| 313 |
+
const total = parseFloat(totalInput.value) || 0;
|
| 314 |
+
|
| 315 |
+
if (bodyweight <= 0 || total <= 0) {
|
| 316 |
+
risResult.textContent = '0.00';
|
| 317 |
+
return;
|
| 318 |
+
}
|
| 319 |
+
|
| 320 |
+
let risScore;
|
| 321 |
+
if (gender === 'male') {
|
| 322 |
+
// Calculate using men constants from ris.js
|
| 323 |
+
risScore = risIndex(bodyweight,
|
| 324 |
+
men_const[0],
|
| 325 |
+
men_const[1],
|
| 326 |
+
men_const[2],
|
| 327 |
+
men_const[3],
|
| 328 |
+
men_const[4]) * total;
|
| 329 |
+
} else {
|
| 330 |
+
// Calculate using women constants from ris.js
|
| 331 |
+
risScore = risIndex(bodyweight,
|
| 332 |
+
women_const[0],
|
| 333 |
+
women_const[1],
|
| 334 |
+
women_const[2],
|
| 335 |
+
women_const[3],
|
| 336 |
+
women_const[4]) * total;
|
| 337 |
+
}
|
| 338 |
+
|
| 339 |
+
risResult.textContent = risScore.toFixed(2);
|
| 340 |
+
});
|
| 341 |
+
|
| 342 |
+
// Populate constants table from ris.js
|
| 343 |
+
if (typeof men_const !== 'undefined' && typeof women_const !== 'undefined') {
|
| 344 |
+
const table = document.getElementById('constants-table');
|
| 345 |
+
const tbody = table.querySelector('tbody');
|
| 346 |
+
|
| 347 |
+
// Labels for the constants
|
| 348 |
+
const labels = ['A', 'K', 'B', 'v', 'Q'];
|
| 349 |
+
|
| 350 |
+
// Create a row for each constant
|
| 351 |
+
for (let i = 0; i < 5; i++) {
|
| 352 |
+
const row = document.createElement('tr');
|
| 353 |
+
row.className = 'border-t border-dark-300';
|
| 354 |
+
|
| 355 |
+
// Constant name
|
| 356 |
+
const nameCell = document.createElement('td');
|
| 357 |
+
nameCell.className = 'py-2 text-gray-300';
|
| 358 |
+
nameCell.textContent = labels[i];
|
| 359 |
+
row.appendChild(nameCell);
|
| 360 |
+
|
| 361 |
+
// Men value
|
| 362 |
+
const menCell = document.createElement('td');
|
| 363 |
+
menCell.className = 'py-2 text-gray-300';
|
| 364 |
+
menCell.textContent = men_const[i];
|
| 365 |
+
row.appendChild(menCell);
|
| 366 |
+
|
| 367 |
+
// Women value
|
| 368 |
+
const womenCell = document.createElement('td');
|
| 369 |
+
womenCell.className = 'py-2 text-gray-300';
|
| 370 |
+
womenCell.textContent = women_const[i];
|
| 371 |
+
row.appendChild(womenCell);
|
| 372 |
+
|
| 373 |
+
tbody.appendChild(row);
|
| 374 |
+
}
|
| 375 |
+
|
| 376 |
+
// Generate Excel formula for men
|
| 377 |
+
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]}))))`;
|
| 378 |
+
document.getElementById('excel-men-formula').textContent = excelMenFormula;
|
| 379 |
+
|
| 380 |
+
// Generate Excel formula for women
|
| 381 |
+
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]}))))`;
|
| 382 |
+
document.getElementById('excel-women-formula').textContent = excelWomenFormula;
|
| 383 |
+
|
| 384 |
+
// Generate Google Sheets code
|
| 385 |
+
const googleSheetsCode = `/**
|
| 386 |
+
* Calculates RIS score for male athletes
|
| 387 |
+
*
|
| 388 |
+
* @param {number} bodyweight The athlete's body weight in kg
|
| 389 |
+
* @param {number} total The total weight lifted in kg
|
| 390 |
+
* @return {number} The RIS score
|
| 391 |
+
* @customfunction
|
| 392 |
+
*/
|
| 393 |
+
function RIS_MEN(bodyweight, total) {
|
| 394 |
+
var A = ${men_const[0]};
|
| 395 |
+
var K = ${men_const[1]};
|
| 396 |
+
var B = ${men_const[2]};
|
| 397 |
+
var v = ${men_const[3]};
|
| 398 |
+
var Q = ${men_const[4]};
|
| 399 |
+
|
| 400 |
+
return total * 100 / (A + (K - A) / (1 + Q * Math.exp(-B * (bodyweight - v))));
|
| 401 |
+
}
|
| 402 |
+
|
| 403 |
+
/**
|
| 404 |
+
* Calculates RIS score for female athletes
|
| 405 |
+
*
|
| 406 |
+
* @param {number} bodyweight The athlete's body weight in kg
|
| 407 |
+
* @param {number} total The total weight lifted in kg
|
| 408 |
+
* @return {number} The RIS score
|
| 409 |
+
* @customfunction
|
| 410 |
+
*/
|
| 411 |
+
function RIS_WOMEN(bodyweight, total) {
|
| 412 |
+
var A = ${women_const[0]};
|
| 413 |
+
var K = ${women_const[1]};
|
| 414 |
+
var B = ${women_const[2]};
|
| 415 |
+
var v = ${women_const[3]};
|
| 416 |
+
var Q = ${women_const[4]};
|
| 417 |
+
|
| 418 |
+
return total * 100 / (A + (K - A) / (1 + Q * Math.exp(-B * (bodyweight - v))));
|
| 419 |
+
}`;
|
| 420 |
+
document.getElementById('google-sheets-code').textContent = googleSheetsCode;
|
| 421 |
+
|
| 422 |
+
// Initialize syntax highlighting
|
| 423 |
+
hljs.highlightAll();
|
| 424 |
+
|
| 425 |
+
// Setup copy buttons
|
| 426 |
+
const copyButtons = document.querySelectorAll('.copy-button');
|
| 427 |
+
copyButtons.forEach(button => {
|
| 428 |
+
button.addEventListener('click', function() {
|
| 429 |
+
const targetId = this.getAttribute('data-target');
|
| 430 |
+
const codeElement = document.getElementById(targetId);
|
| 431 |
+
const textToCopy = codeElement.textContent;
|
| 432 |
+
|
| 433 |
+
navigator.clipboard.writeText(textToCopy).then(() => {
|
| 434 |
+
// Change button text to indicate successful copy
|
| 435 |
+
const originalText = this.textContent;
|
| 436 |
+
this.textContent = 'Copied!';
|
| 437 |
+
this.style.background = '#10B981'; // Success green
|
| 438 |
+
|
| 439 |
+
// Reset button text after a moment
|
| 440 |
+
setTimeout(() => {
|
| 441 |
+
this.textContent = originalText;
|
| 442 |
+
this.style.background = '';
|
| 443 |
+
}, 2000);
|
| 444 |
+
});
|
| 445 |
+
});
|
| 446 |
+
});
|
| 447 |
+
}
|
| 448 |
+
});
|
| 449 |
+
</script>
|
| 450 |
+
</body>
|
| 451 |
+
</html>
|
static/ris.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
// RIS Index Calculator
|
| 2 |
+
// Generated parameters from curve fitting
|
| 3 |
+
const men_const = [338.33, 549.0, 0.10868, 74.099, 0.53215];
|
| 4 |
+
const women_const = [163.67, 270.0, 0.12446, 55.349, 0.47922];
|
| 5 |
+
|
| 6 |
+
/**
|
| 7 |
+
* Calculate the RIS (Relative Intensity Scale) index
|
| 8 |
+
* @param {x} - The input value (typically age)
|
| 9 |
+
* @param {A} - Lower asymptote
|
| 10 |
+
* @param {K} - Upper asymptote
|
| 11 |
+
* @param {B} - Growth rate
|
| 12 |
+
* @param {v} - Midpoint/shift
|
| 13 |
+
* @param {Q} - Related to initial value
|
| 14 |
+
* @returns {number} The RIS index value (0-100)
|
| 15 |
+
*/
|
| 16 |
+
function risIndex(x, A, K, B, v, Q) {
|
| 17 |
+
return 100 / (A + (K - A) / (1 + Q * Math.exp(-B * (x - v))));
|
| 18 |
+
}
|
| 19 |
+
|
| 20 |
+
/**
|
| 21 |
+
* Calculate the RIS index for men
|
| 22 |
+
* @param {x} - The input value (typically age)
|
| 23 |
+
* @returns {number} The RIS index value for men (0-100)
|
| 24 |
+
*/
|
| 25 |
+
function menRisIndex(x) {
|
| 26 |
+
return risIndex(x, men_const[0], men_const[1], men_const[2], men_const[3], men_const[4]);
|
| 27 |
+
}
|
| 28 |
+
|
| 29 |
+
/**
|
| 30 |
+
* Calculate the RIS index for women
|
| 31 |
+
* @param {x} - The input value (typically age)
|
| 32 |
+
* @returns {number} The RIS index value for women (0-100)
|
| 33 |
+
*/
|
| 34 |
+
function womenRisIndex(x) {
|
| 35 |
+
return risIndex(x, women_const[0], men_const[1], women_const[2], women_const[3], women_const[4]);
|
| 36 |
+
}
|
style.css
DELETED
|
@@ -1,28 +0,0 @@
|
|
| 1 |
-
body {
|
| 2 |
-
padding: 2rem;
|
| 3 |
-
font-family: -apple-system, BlinkMacSystemFont, "Arial", sans-serif;
|
| 4 |
-
}
|
| 5 |
-
|
| 6 |
-
h1 {
|
| 7 |
-
font-size: 16px;
|
| 8 |
-
margin-top: 0;
|
| 9 |
-
}
|
| 10 |
-
|
| 11 |
-
p {
|
| 12 |
-
color: rgb(107, 114, 128);
|
| 13 |
-
font-size: 15px;
|
| 14 |
-
margin-bottom: 10px;
|
| 15 |
-
margin-top: 5px;
|
| 16 |
-
}
|
| 17 |
-
|
| 18 |
-
.card {
|
| 19 |
-
max-width: 620px;
|
| 20 |
-
margin: 0 auto;
|
| 21 |
-
padding: 16px;
|
| 22 |
-
border: 1px solid lightgray;
|
| 23 |
-
border-radius: 16px;
|
| 24 |
-
}
|
| 25 |
-
|
| 26 |
-
.card p:last-child {
|
| 27 |
-
margin-bottom: 0;
|
| 28 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|