39918-vm/docs/benchmark_report.html
2026-05-06 17:53:23 +00:00

1031 lines
112 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" href="images/icon.ico" type="image/x-icon">
<title>Daniel Benchmark Report</title>
<script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.0/dist/chart.umd.min.js"></script>
<style>
@import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@300;400;500;700&display=swap');
:root {
--bg: #0e0f14;
--surface: #16181f;
--surface2: #1d1f28;
--border: #2a2d3a;
--text: #dde1f5;
--muted: #626880;
--exact: #7dd3fc;
--adjacent: #4ade80;
--within: #fb923c;
--miss: #ef4444;
--accent: #818cf8;
}
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
html { scroll-behavior: smooth; }
body {
background: var(--bg);
color: var(--text);
font-family: 'JetBrains Mono', monospace;
font-size: 14px;
line-height: 1.8;
}
a { color: var(--exact); text-decoration: none; }
a:hover { text-decoration: underline; }
.page {
max-width: 1100px;
margin: 0 auto;
padding: 0 32px;
}
/* ── Nav ─────────────────────────────────────────────────────────── */
nav {
border-bottom: 1px solid var(--border);
padding: 20px 0;
margin-bottom: 48px;
display: flex;
justify-content: space-between;
align-items: center;
}
.nav-logo { font-size: 16px; font-weight: 700; color: var(--text); }
.nav-logo span { color: var(--accent); }
.nav-links { display: flex; gap: 24px; list-style: none; }
.nav-links a {
font-size: 12px; color: var(--muted);
letter-spacing: 0.08em; text-transform: uppercase;
}
.nav-links a:hover { color: var(--text); text-decoration: none; }
/* ── Sections ────────────────────────────────────────────────────── */
section { margin-bottom: 48px; }
h1 {
font-size: 52px; font-weight: 700; color: var(--text);
line-height: 1.05; letter-spacing: -0.02em; margin-bottom: 8px;
}
h1 span { color: var(--accent); }
h2 {
font-size: 20px; font-weight: 700; color: var(--text);
margin-bottom: 20px; padding-bottom: 10px; border-bottom: 1px solid var(--border);
}
p { color: var(--muted); margin-bottom: 16px; max-width: 600px; }
.meta {
font-size: 11px; color: var(--muted); letter-spacing: 0.12em;
text-transform: uppercase; margin-bottom: 32px;
}
/* ── Buttons ─────────────────────────────────────────────────────── */
.btn {
display: inline-flex; align-items: center; gap: 8px;
padding: 10px 20px; font-family: 'JetBrains Mono', monospace;
font-size: 13px; cursor: pointer; border: 1px solid var(--border);
background: var(--surface); color: var(--text); text-decoration: none;
transition: border-color 0.15s, color 0.15s;
}
.btn:hover { border-color: var(--exact); color: var(--exact); text-decoration: none; }
/* ── Stat row ────────────────────────────────────────────────────── */
.stats-row {
display: flex; border: 1px solid var(--border); background: var(--surface);
margin-bottom: 12px;
}
.stat { flex: 1; padding: 20px 24px; border-right: 1px solid var(--border); }
.stat:last-child { border-right: none; }
.stat-val { font-size: 26px; font-weight: 700; display: block; line-height: 1; margin-bottom: 6px; }
.stat-lbl { font-size: 11px; color: var(--muted); letter-spacing: 0.08em; text-transform: uppercase; }
.stat-desc { font-size: 11px; color: var(--muted); opacity: 0.6; margin-top: 4px; line-height: 1.4; }
.c-exact { color: var(--exact); }
.c-adjacent { color: var(--adjacent); }
.c-within { color: var(--within); }
.c-miss { color: var(--miss); }
.c-accent { color: var(--accent); }
.c-muted { color: var(--muted); }
/* ── Chart grid ─────────────────────────────────────────────────── */
.charts { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin-bottom: 32px; }
.chart-box {
background: var(--surface);
border: 1px solid var(--border);
padding: 20px 24px;
}
.chart-box.full { grid-column: 1 / -1; }
.chart-wrap { position: relative; height: 340px; }
.chart-wrap.tall { height: 420px; }
.chart-title {
font-size: 11px; color: var(--muted); text-transform: uppercase;
letter-spacing: 0.08em; margin-bottom: 14px;
}
/* ── Table ──────────────────────────────────────────────────────── */
.tbl-wrap { overflow-x: auto; }
table { width: 100%; border-collapse: collapse; font-size: 13px; }
th, td { padding: 6px 10px; text-align: left; border-bottom: 1px solid var(--border); white-space: nowrap; }
th {
color: var(--muted); text-transform: uppercase; font-size: 11px;
letter-spacing: 0.08em; background: var(--surface); position: sticky; top: 0;
}
td.num { text-align: right; font-variant-numeric: tabular-nums; }
td.delta { font-weight: bold; }
td.song-name { max-width: 260px; overflow: hidden; text-overflow: ellipsis; }
td.err { color: var(--miss); }
tr:hover td { background: var(--surface); }
.flag.exact { color: var(--exact); font-weight: bold; }
.flag.adjacent { color: var(--adjacent); font-weight: bold; }
.flag.within { color: var(--within); font-weight: bold; }
.flag.miss { color: var(--miss); font-weight: bold; }
.row-miss td { opacity: 0.85; }
/* ── Dan / skillset tables ──────────────────────────────────────── */
.dan-table td.pos { color: var(--exact); }
.dan-table td.neg { color: var(--miss); }
.dan-table td.neutral { color: var(--adjacent); }
/* ── Filter bar ─────────────────────────────────────────────────── */
.filter-bar { display: flex; gap: 8px; margin-bottom: 10px; align-items: center; flex-wrap: wrap; }
.filter-bar label { color: var(--muted); font-size: 12px; }
.filter-bar input, .filter-bar select {
background: var(--surface); border: 1px solid var(--border); color: var(--text);
padding: 4px 8px; font-family: 'JetBrains Mono', monospace; font-size: 13px;
}
.filter-btn {
background: var(--surface); border: 1px solid var(--border); color: var(--accent);
padding: 4px 10px; cursor: pointer; font-family: 'JetBrains Mono', monospace; font-size: 13px;
}
.filter-btn:hover { background: var(--border); }
#filter-count { color: var(--muted); font-size: 11px; }
/* ── Footer ─────────────────────────────────────────────────────── */
footer {
border-top: 1px solid var(--border); padding: 24px 0 48px;
display: flex; justify-content: space-between;
}
footer p { font-size: 12px; color: var(--muted); margin: 0; max-width: 100%; }
/* ── Responsive ─────────────────────────────────────────────────── */
@media (max-width: 700px) {
h1 { font-size: 36px; }
.stats-row { flex-direction: column; }
.stat { border-right: none; border-bottom: 1px solid var(--border); }
.charts { grid-template-columns: 1fr; }
.nav-links { display: none; }
}
</style>
</head>
<body>
<div class="page">
<!-- Nav -->
<nav>
<div class="nav-logo">Daniel</div>
<ul class="nav-links">
<li><a href="index.html">← Back to Daniel</a></li>
</ul>
</nav>
<!-- Header -->
<section>
<h1>Benchmark Report</h1>
<p class="meta">145 maps · 0 errors · 2026-03-29 09:47</p>
<div class="stats-row">
<div class="stat">
<span class="stat-val c-exact">52.4%</span>
<div class="stat-lbl">Exact ±0.165</div>
<div class="stat-desc">Predicted the correct dan level and tier</div>
</div>
<div class="stat">
<span class="stat-val c-adjacent">37.2%</span>
<div class="stat-lbl">Adjacent ±0.495</div>
<div class="stat-desc">Off by one tier (e.g. Mid predicted as High)</div>
</div>
<div class="stat">
<span class="stat-val c-within">9.0%</span>
<div class="stat-lbl">Within ±1.0</div>
<div class="stat-desc">Within one full dan level of the expected tier</div>
</div>
<div class="stat">
<span class="stat-val c-miss">1.4%</span>
<div class="stat-lbl">Miss &gt;1.0</div>
<div class="stat-desc">More than one full dan level away from expected tier</div>
</div>
<div class="stat">
<span class="stat-val c-muted">145</span>
<div class="stat-lbl">Total Maps</div>
<div class="stat-desc">Number of beatmaps processed in this benchmark run</div>
</div>
</div>
<div class="stats-row">
<div class="stat">
<span class="stat-val c-exact">0.215</span>
<div class="stat-lbl">MAE</div>
<div class="stat-desc">Mean Absolute Error - average size of all errors ignoring direction</div>
</div>
<div class="stat">
<span class="stat-val c-exact">0.150</span>
<div class="stat-lbl">Median AE</div>
<div class="stat-desc">Median absolute error</div>
</div>
<div class="stat">
<span class="stat-val c-exact">0.304</span>
<div class="stat-lbl">Std Dev</div>
<div class="stat-desc">Standard deviation of errors</div>
</div>
<div class="stat">
<span class="stat-val c-accent">-0.003</span>
<div class="stat-lbl">Bias</div>
<div class="stat-desc">Average signed error</div>
</div>
<div class="stat">
<span class="stat-val c-adjacent">+0.900</span>
<div class="stat-lbl">Max Overrate</div>
<div class="stat-desc">Largest single overestimation (predicted too hard)</div>
</div>
<div class="stat">
<span class="stat-val c-miss">-1.380</span>
<div class="stat-lbl">Max Underrate</div>
<div class="stat-desc">Largest single underestimation (predicted too easy)</div>
</div>
</div>
</section>
<!-- Charts — Overall -->
<section>
<h2>Charts — Overall</h2>
<div class="charts">
<div class="chart-box">
<div class="chart-title">Accuracy breakdown</div>
<div class="chart-wrap"><canvas id="donut"></canvas></div>
</div>
<div class="chart-box">
<div class="chart-title">Per-dan accuracy % (stacked)</div>
<div class="chart-wrap"><canvas id="dan-bar"></canvas></div>
</div>
<div class="chart-box full">
<div class="chart-title">Δ numeric vs difficulty</div>
<div class="chart-wrap tall"><canvas id="delta-kde"></canvas></div>
</div>
<div class="chart-box full">
<div class="chart-title">Expected vs Predicted</div>
<div class="chart-wrap tall"><canvas id="scatter"></canvas></div>
</div>
<div class="chart-box full">
<div class="chart-title">Cumulative accuracy curve</div>
<div class="chart-wrap tall"><canvas id="cum-curve"></canvas></div>
</div>
<div class="chart-box full">
<div class="chart-title">Per-dan bias &amp; MAE</div>
<div class="chart-wrap"><canvas id="dan-bias"></canvas></div>
</div>
</div>
</section>
<!-- Charts — By Skillset -->
<section>
<h2>Charts — By Skillset</h2>
<div class="charts">
<div class="chart-box full">
<div class="chart-title">Per-skillset accuracy % (stacked)</div>
<div class="chart-wrap tall"><canvas id="sk-bar"></canvas></div>
</div>
<div class="chart-box full">
<div class="chart-title">Per-skillset bias &amp; MAE</div>
<div class="chart-wrap"><canvas id="sk-bias"></canvas></div>
</div>
<div class="chart-box">
<div class="chart-title">Scatter — Jack</div>
<div class="chart-wrap"><canvas id="scatter-jack"></canvas></div>
</div>
<div class="chart-box">
<div class="chart-title">Scatter — Tech</div>
<div class="chart-wrap"><canvas id="scatter-tech"></canvas></div>
</div>
<div class="chart-box">
<div class="chart-title">Scatter — Speed</div>
<div class="chart-wrap"><canvas id="scatter-speed"></canvas></div>
</div>
<div class="chart-box">
<div class="chart-title">Scatter — Stamina</div>
<div class="chart-wrap"><canvas id="scatter-stamina"></canvas></div>
</div>
</div>
</section>
<!-- Per-Dan Breakdown -->
<section>
<h2>Per-Dan Breakdown</h2>
<div class="tbl-wrap">
<table class="dan-table">
<thead><tr>
<th>Dan</th><th>N</th><th>Exact%</th><th>Adjacent%</th><th>Within%</th><th>Miss%</th><th>MAE</th><th>Bias</th>
</tr></thead>
<tbody>
<tr><td>Alpha</td><td>10</td><td class="pos">70.0%</td><td class="neutral">20.0%</td><td class="neutral">10.0%</td><td class="neg">0.0%</td><td>0.185</td><td class="pos">+0.091</td></tr>
<tr><td>Beta</td><td>12</td><td class="pos">41.7%</td><td class="neutral">50.0%</td><td class="neutral">8.3%</td><td class="neg">0.0%</td><td>0.264</td><td class="neg">-0.104</td></tr>
<tr><td>Gamma</td><td>25</td><td class="pos">44.0%</td><td class="neutral">36.0%</td><td class="neutral">20.0%</td><td class="neg">0.0%</td><td>0.250</td><td class="pos">+0.013</td></tr>
<tr><td>Delta</td><td>35</td><td class="pos">68.6%</td><td class="neutral">31.4%</td><td class="neutral">0.0%</td><td class="neg">0.0%</td><td>0.133</td><td class="neg">-0.029</td></tr>
<tr><td>Epsilon</td><td>33</td><td class="pos">51.5%</td><td class="neutral">39.4%</td><td class="neutral">9.1%</td><td class="neg">0.0%</td><td>0.201</td><td class="pos">+0.034</td></tr>
<tr><td>Zeta</td><td>22</td><td class="pos">31.8%</td><td class="neutral">45.5%</td><td class="neutral">13.6%</td><td class="neg">9.1%</td><td>0.333</td><td class="neg">-0.039</td></tr>
<tr><td>Eta</td><td>8</td><td class="pos">62.5%</td><td class="neutral">37.5%</td><td class="neutral">0.0%</td><td class="neg">0.0%</td><td>0.164</td><td class="pos">+0.046</td></tr>
</tbody>
</table>
</div>
</section>
<!-- Per-Skillset Breakdown -->
<section>
<h2>Per-Skillset Breakdown</h2>
<div class="tbl-wrap">
<table class="dan-table">
<thead><tr>
<th>Skillset</th><th>N</th><th>Exact%</th><th>Adjacent%</th><th>Within%</th><th>Miss%</th><th>MAE</th><th>Bias</th>
</tr></thead>
<tbody>
<tr><td>Jack</td><td>61</td><td class="pos">63.9%</td><td class="neutral">23.0%</td><td class="neutral">9.8%</td><td class="neg">3.3%</td><td>0.207</td><td class="neg">-0.021</td></tr>
<tr><td>Tech</td><td>27</td><td class="pos">48.1%</td><td class="neutral">48.1%</td><td class="neutral">3.7%</td><td class="neg">0.0%</td><td>0.187</td><td class="pos">+0.007</td></tr>
<tr><td>Speed</td><td>31</td><td class="pos">35.5%</td><td class="neutral">45.2%</td><td class="neutral">19.4%</td><td class="neg">0.0%</td><td>0.282</td><td class="pos">+0.098</td></tr>
<tr><td>Stamina</td><td>26</td><td class="pos">50.0%</td><td class="neutral">50.0%</td><td class="neutral">0.0%</td><td class="neg">0.0%</td><td>0.182</td><td class="neg">-0.092</td></tr>
</tbody>
</table>
</div>
</section>
<!-- Map Results -->
<section>
<h2>Map Results</h2>
<div class="filter-bar">
<label>Filter:</label>
<input type="text" id="search" placeholder="song name / tier…" oninput="filterTable()">
<select id="flag-filter" onchange="filterTable()">
<option value="">All flags</option>
<option value="exact">✓ Exact</option>
<option value="adjacent">~ Adjacent</option>
<option value="within">≈ Within</option>
<option value="miss">✗ Miss</option>
</select>
<select id="dan-filter" onchange="filterTable()">
<option value="">All dans</option>
<option value="Alpha">Alpha</option><option value="Beta">Beta</option><option value="Gamma">Gamma</option><option value="Delta">Delta</option><option value="Epsilon">Epsilon</option><option value="Zeta">Zeta</option><option value="Eta">Eta</option>
</select>
<select id="sk-filter" onchange="filterTable()">
<option value="">All skillsets</option>
<option value="jack">Jack</option><option value="tech">Tech</option><option value="speed">Speed</option><option value="stamina">Stamina</option>
</select>
<button class="filter-btn" onclick="clearFilters()">Clear</button>
<span id="filter-count"></span>
</div>
<div class="tbl-wrap">
<table id="results-table">
<thead><tr>
<th onclick="sortTable(0)" style="cursor:pointer">Song ▾</th>
<th onclick="sortTable(1)" style="cursor:pointer">Expected</th>
<th onclick="sortTable(2)" style="cursor:pointer">Got</th>
<th onclick="sortTable(3)" style="cursor:pointer">Skillset</th>
<th onclick="sortTable(4)" style="cursor:pointer">SR</th>
<th onclick="sortTable(5)" style="cursor:pointer">Numeric</th>
<th onclick="sortTable(6)" style="cursor:pointer">Δ</th>
<th>Flag</th>
</tr></thead>
<tbody id="results-body">
<tr class="row-exact" data-sk="jack"><td class="song-name" title="Alpha-mid-jack-dark_sambaland.osu">Dark Sambaland</td><td>Alpha Mid</td><td>Alpha Mid</td><td class="num sk-tag">jack</td><td class="num">6.592</td><td class="num">11.58</td><td class="num delta">+0.08</td><td class="flag exact"></td></tr>
<tr class="row-within" data-sk="speed"><td class="song-name" title="alpha-mid-speed-air(0.915).osu">Air (0.915x)</td><td>Alpha Mid</td><td>Beta Mid</td><td class="num sk-tag">speed</td><td class="num">6.937</td><td class="num">12.40</td><td class="num delta">+0.90</td><td class="flag within"></td></tr>
<tr class="row-exact" data-sk="speed"><td class="song-name" title="alpha-mid-speed-makiba.osu">Makiba</td><td>Alpha Mid</td><td>Alpha Mid</td><td class="num sk-tag">speed</td><td class="num">6.568</td><td class="num">11.52</td><td class="num delta">+0.02</td><td class="flag exact"></td></tr>
<tr class="row-exact" data-sk="stamina"><td class="song-name" title="alpha-mid-stamina-babel(1.3).osu">Babel (1.3x)</td><td>Alpha Mid</td><td>Alpha Mid</td><td class="num sk-tag">stamina</td><td class="num">6.514</td><td class="num">11.38</td><td class="num delta">-0.12</td><td class="flag exact"></td></tr>
<tr class="row-exact" data-sk="stamina"><td class="song-name" title="alpha-mid-stamina-lazorbeamz(1.0).osu">Lazorbeamz (1.0x)</td><td>Alpha Mid</td><td>Alpha Mid</td><td class="num sk-tag">stamina</td><td class="num">6.542</td><td class="num">11.45</td><td class="num delta">-0.05</td><td class="flag exact"></td></tr>
<tr class="row-exact" data-sk="tech"><td class="song-name" title="alpha-mid-tech-odoru(1.1).osu">Odoru (1.1x)</td><td>Alpha Mid</td><td>Alpha Mid</td><td class="num sk-tag">tech</td><td class="num">6.551</td><td class="num">11.47</td><td class="num delta">-0.03</td><td class="flag exact"></td></tr>
<tr class="row-adjacent" data-sk="speed"><td class="song-name" title="alpha-midhigh-speed-yasashisa_no_riyuu.osu">Yasashisa No Riyuu</td><td>Alpha Mid/High</td><td>Beta Low</td><td class="num sk-tag">speed</td><td class="num">6.782</td><td class="num">12.05</td><td class="num delta">+0.38</td><td class="flag adjacent">~</td></tr>
<tr class="row-exact" data-sk="speed"><td class="song-name" title="alpha-high-speed-yell(0.975).osu">Yell (0.975x)</td><td>Alpha High</td><td>Alpha High</td><td class="num sk-tag">speed</td><td class="num">6.689</td><td class="num">11.82</td><td class="num delta">-0.01</td><td class="flag exact"></td></tr>
<tr class="row-adjacent" data-sk="tech"><td class="song-name" title="alpha-high-tech-angel's_salad.osu">Angel'S Salad</td><td>Alpha High</td><td>Alpha Mid</td><td class="num sk-tag">tech</td><td class="num">6.615</td><td class="num">11.64</td><td class="num delta">-0.19</td><td class="flag adjacent">~</td></tr>
<tr class="row-exact" data-sk="tech"><td class="song-name" title="alpha-high-tech-bismuth_nebula.osu">Bismuth Nebula</td><td>Alpha High</td><td>Alpha High</td><td class="num sk-tag">tech</td><td class="num">6.663</td><td class="num">11.76</td><td class="num delta">-0.07</td><td class="flag exact"></td></tr>
<tr class="row-exact" data-sk="jack"><td class="song-name" title="Beta-mid-jack-paradigm_shift.osu">Paradigm Shift</td><td>Beta Mid</td><td>Beta Mid</td><td class="num sk-tag">jack</td><td class="num">6.937</td><td class="num">12.40</td><td class="num delta">-0.10</td><td class="flag exact"></td></tr>
<tr class="row-adjacent" data-sk="speed"><td class="song-name" title="beta-mid-speed-5Oul On D!Splay.osu">5Oul On D!Splay</td><td>Beta Mid</td><td>Beta Low</td><td class="num sk-tag">speed</td><td class="num">6.861</td><td class="num">12.23</td><td class="num delta">-0.27</td><td class="flag adjacent">~</td></tr>
<tr class="row-within" data-sk="speed"><td class="song-name" title="beta-mid-speed-amber_starlight.osu">Amber Starlight</td><td>Beta Mid</td><td>Alpha High</td><td class="num sk-tag">speed</td><td class="num">6.722</td><td class="num">11.90</td><td class="num delta">-0.60</td><td class="flag within"></td></tr>
<tr class="row-exact" data-sk="speed"><td class="song-name" title="beta-mid-speed-hideho(0.875).osu">Hideho (0.875x)</td><td>Beta Mid</td><td>Beta Mid</td><td class="num sk-tag">speed</td><td class="num">6.946</td><td class="num">12.41</td><td class="num delta">-0.09</td><td class="flag exact"></td></tr>
<tr class="row-adjacent" data-sk="speed"><td class="song-name" title="beta-mid-speed-uso_no_hibana(0.9).osu">Uso No Hibana (0.9x)</td><td>Beta Mid</td><td>Beta Low</td><td class="num sk-tag">speed</td><td class="num">6.897</td><td class="num">12.31</td><td class="num delta">-0.19</td><td class="flag adjacent">~</td></tr>
<tr class="row-adjacent" data-sk="stamina"><td class="song-name" title="beta-mid-stamina-cycle_hit(1.4).osu">Cycle Hit (1.4x)</td><td>Beta Mid</td><td>Beta High</td><td class="num sk-tag">stamina</td><td class="num">7.186</td><td class="num">12.95</td><td class="num delta">+0.45</td><td class="flag adjacent">~</td></tr>
<tr class="row-exact" data-sk="stamina"><td class="song-name" title="beta-mid-stamina-time_to_say_goodbye(1.0).osu">Time To Say Goodbye (1.0x)</td><td>Beta Mid</td><td>Beta Mid</td><td class="num sk-tag">stamina</td><td class="num">7.042</td><td class="num">12.63</td><td class="num delta">+0.13</td><td class="flag exact"></td></tr>
<tr class="row-adjacent" data-sk="tech"><td class="song-name" title="beta-mid-tech-blue_planet.osu">Blue Planet</td><td>Beta Mid</td><td>Beta High</td><td class="num sk-tag">tech</td><td class="num">7.126</td><td class="num">12.82</td><td class="num delta">+0.32</td><td class="flag adjacent">~</td></tr>
<tr class="row-adjacent" data-sk="tech"><td class="song-name" title="beta-mid-tech-psychology(1.15).osu">Psychology (1.15x)</td><td>Beta Mid</td><td>Beta Low</td><td class="num sk-tag">tech</td><td class="num">6.786</td><td class="num">12.06</td><td class="num delta">-0.44</td><td class="flag adjacent">~</td></tr>
<tr class="row-adjacent" data-sk="speed"><td class="song-name" title="beta-midhigh-speed-pastel_subliminal(0.9).osu">Pastel Subliminal (0.9x)</td><td>Beta Mid/High</td><td>Beta Low</td><td class="num sk-tag">speed</td><td class="num">6.872</td><td class="num">12.25</td><td class="num delta">-0.42</td><td class="flag adjacent">~</td></tr>
<tr class="row-exact" data-sk="speed"><td class="song-name" title="beta-high-speed-crystal_world_fracture(0.975x).osu">Crystal World Fracture</td><td>Beta High</td><td>Beta High</td><td class="num sk-tag">speed</td><td class="num">7.159</td><td class="num">12.89</td><td class="num delta">+0.06</td><td class="flag exact"></td></tr>
<tr class="row-exact" data-sk="stamina"><td class="song-name" title="beta-high-stamina-observation(1.2).osu">Observation (1.2x)</td><td>Beta High</td><td>Beta High</td><td class="num sk-tag">stamina</td><td class="num">7.089</td><td class="num">12.73</td><td class="num delta">-0.10</td><td class="flag exact"></td></tr>
<tr class="row-exact" data-sk="jack"><td class="song-name" title="Gamma-low-jack-hiasobi(1.1).osu">Hiasobi (1.1x)</td><td>Gamma Low</td><td>Gamma Low</td><td class="num sk-tag">jack</td><td class="num">7.279</td><td class="num">13.14</td><td class="num delta">-0.03</td><td class="flag exact"></td></tr>
<tr class="row-exact" data-sk="jack"><td class="song-name" title="Gamma-low-jack-reflect(1.05).osu">Reflect (1.05x)</td><td>Gamma Low</td><td>Gamma Low</td><td class="num sk-tag">jack</td><td class="num">7.212</td><td class="num">13.01</td><td class="num delta">-0.16</td><td class="flag exact"></td></tr>
<tr class="row-exact" data-sk="jack"><td class="song-name" title="gamma-low-jack-hustler.osu">Hustler</td><td>Gamma Low</td><td>Gamma Low</td><td class="num sk-tag">jack</td><td class="num">7.275</td><td class="num">13.14</td><td class="num delta">-0.03</td><td class="flag exact"></td></tr>
<tr class="row-adjacent" data-sk="stamina"><td class="song-name" title="gamma-low-stamina-anomaly(1.2).osu">Anomaly (1.2x)</td><td>Gamma Low</td><td>Beta High</td><td class="num sk-tag">stamina</td><td class="num">7.181</td><td class="num">12.94</td><td class="num delta">-0.23</td><td class="flag adjacent">~</td></tr>
<tr class="row-within" data-sk="tech"><td class="song-name" title="gamma-low-tech-tornado.osu">Tornado</td><td>Gamma Low</td><td>Beta Mid</td><td class="num sk-tag">tech</td><td class="num">6.999</td><td class="num">12.53</td><td class="num delta">-0.64</td><td class="flag within"></td></tr>
<tr class="row-within" data-sk="speed"><td class="song-name" title="gamma-lowmid-speed-sunnyshinyring.osu">Sunnyshinyring</td><td>Gamma Low/Mid</td><td>Gamma High</td><td class="num sk-tag">speed</td><td class="num">7.615</td><td class="num">13.83</td><td class="num delta">+0.50</td><td class="flag within"></td></tr>
<tr class="row-adjacent" data-sk="jack"><td class="song-name" title="Gamma-mid-jack-break(1.1).osu">Break (1.1x)</td><td>Gamma Mid</td><td>Gamma High</td><td class="num sk-tag">jack</td><td class="num">7.539</td><td class="num">13.67</td><td class="num delta">+0.17</td><td class="flag adjacent">~</td></tr>
<tr class="row-within" data-sk="jack"><td class="song-name" title="Gamma-mid-jack-captain_jack(1.2).osu">Captain Jack (1.2x)</td><td>Gamma Mid</td><td>Beta High</td><td class="num sk-tag">jack</td><td class="num">7.115</td><td class="num">12.79</td><td class="num delta">-0.71</td><td class="flag within"></td></tr>
<tr class="row-exact" data-sk="jack"><td class="song-name" title="Gamma-mid-jack-do_it_to_it(1.2).osu">Do It To It (1.2x)</td><td>Gamma Mid</td><td>Gamma Mid</td><td class="num sk-tag">jack</td><td class="num">7.394</td><td class="num">13.38</td><td class="num delta">-0.12</td><td class="flag exact"></td></tr>
<tr class="row-adjacent" data-sk="jack"><td class="song-name" title="gamma-mid-jack-everything_black.osu">Everything Black</td><td>Gamma Mid</td><td>Gamma High</td><td class="num sk-tag">jack</td><td class="num">7.600</td><td class="num">13.80</td><td class="num delta">+0.30</td><td class="flag adjacent">~</td></tr>
<tr class="row-within" data-sk="speed"><td class="song-name" title="gamma-mid-speed-credens(0.9).osu">Credens (0.9x)</td><td>Gamma Mid</td><td>Delta Low</td><td class="num sk-tag">speed</td><td class="num">7.761</td><td class="num">14.08</td><td class="num delta">+0.58</td><td class="flag within"></td></tr>
<tr class="row-adjacent" data-sk="speed"><td class="song-name" title="gamma-mid-speed-p8107(1.4).osu">P8107 (1.4x)</td><td>Gamma Mid</td><td>Gamma Mid</td><td class="num sk-tag">speed</td><td class="num">7.535</td><td class="num">13.67</td><td class="num delta">+0.17</td><td class="flag adjacent">~</td></tr>
<tr class="row-adjacent" data-sk="speed"><td class="song-name" title="gamma-mid-speed-reflec_streamz.osu">Reflec Streamz</td><td>Gamma Mid</td><td>Gamma High</td><td class="num sk-tag">speed</td><td class="num">7.562</td><td class="num">13.72</td><td class="num delta">+0.22</td><td class="flag adjacent">~</td></tr>
<tr class="row-exact" data-sk="stamina"><td class="song-name" title="gamma-mid-stamina-cyber_inductance(1.4).osu">Cyber Inductance (1.4x)</td><td>Gamma Mid</td><td>Gamma Mid</td><td class="num sk-tag">stamina</td><td class="num">7.504</td><td class="num">13.60</td><td class="num delta">+0.10</td><td class="flag exact"></td></tr>
<tr class="row-adjacent" data-sk="stamina"><td class="song-name" title="gamma-mid-stamina-phosphor(1.05).osu">Phosphor (1.05x)</td><td>Gamma Mid</td><td>Gamma Low</td><td class="num sk-tag">stamina</td><td class="num">7.239</td><td class="num">13.06</td><td class="num delta">-0.44</td><td class="flag adjacent">~</td></tr>
<tr class="row-adjacent" data-sk="stamina"><td class="song-name" title="gamma-mid-stamina-shinbatsu_o_tadori(1.05).osu">Shinbatsu O Tadori (1.05x)</td><td>Gamma Mid</td><td>Gamma High</td><td class="num sk-tag">stamina</td><td class="num">7.649</td><td class="num">13.90</td><td class="num delta">+0.40</td><td class="flag adjacent">~</td></tr>
<tr class="row-adjacent" data-sk="tech"><td class="song-name" title="gamma-mid-tech-icicle_stinger(1.1).osu">Icicle Stinger (1.1x)</td><td>Gamma Mid</td><td>Gamma High</td><td class="num sk-tag">tech</td><td class="num">7.553</td><td class="num">13.70</td><td class="num delta">+0.20</td><td class="flag adjacent">~</td></tr>
<tr class="row-exact" data-sk="tech"><td class="song-name" title="gamma-mid-tech-matusa_bomber(1.05).osu">Matusa Bomber (1.05x)</td><td>Gamma Mid</td><td>Gamma Mid</td><td class="num sk-tag">tech</td><td class="num">7.494</td><td class="num">13.58</td><td class="num delta">+0.08</td><td class="flag exact"></td></tr>
<tr class="row-within" data-sk="speed"><td class="song-name" title="gamma-midhigh-speed-childhoodfriend.osu">Childhoodfriend</td><td>Gamma Mid/High</td><td>Delta Low</td><td class="num sk-tag">speed</td><td class="num">7.872</td><td class="num">14.21</td><td class="num delta">+0.54</td><td class="flag within"></td></tr>
<tr class="row-exact" data-sk="speed"><td class="song-name" title="gamma-midhigh-speed-pureruby(1.08).osu">Pureruby (1.08x)</td><td>Gamma Mid/High</td><td>Gamma High</td><td class="num sk-tag">speed</td><td class="num">7.548</td><td class="num">13.69</td><td class="num delta">+0.02</td><td class="flag exact"></td></tr>
<tr class="row-adjacent" data-sk="stamina"><td class="song-name" title="gamma-high-stamina-amen_katagiri_generation(1.05).osu">Amen Katagiri Generation (1.05x)</td><td>Gamma High</td><td>Gamma Mid</td><td class="num sk-tag">stamina</td><td class="num">7.528</td><td class="num">13.65</td><td class="num delta">-0.18</td><td class="flag adjacent">~</td></tr>
<tr class="row-exact" data-sk="stamina"><td class="song-name" title="gamma-high-stamina-livestream(1.2).osu">Livestream (1.2x)</td><td>Gamma High</td><td>Gamma High</td><td class="num sk-tag">stamina</td><td class="num">7.550</td><td class="num">13.70</td><td class="num delta">-0.13</td><td class="flag exact"></td></tr>
<tr class="row-exact" data-sk="stamina"><td class="song-name" title="gamma-high-stamina-nuclear_star(1.3).osu">Nuclear Star (1.3x)</td><td>Gamma High</td><td>Gamma High</td><td class="num sk-tag">stamina</td><td class="num">7.538</td><td class="num">13.67</td><td class="num delta">-0.16</td><td class="flag exact"></td></tr>
<tr class="row-exact" data-sk="tech"><td class="song-name" title="gamma-high-tech-nhelv.osu">Nhelv</td><td>Gamma High</td><td>Gamma High</td><td class="num sk-tag">tech</td><td class="num">7.607</td><td class="num">13.81</td><td class="num delta">-0.02</td><td class="flag exact"></td></tr>
<tr class="row-exact" data-sk="tech"><td class="song-name" title="gamma-high-tech-playing_with_ruby(1.2).osu">Playing With Ruby (1.2x)</td><td>Gamma High</td><td>Gamma High</td><td class="num sk-tag">tech</td><td class="num">7.560</td><td class="num">13.72</td><td class="num delta">-0.11</td><td class="flag exact"></td></tr>
<tr class="row-exact" data-sk="jack"><td class="song-name" title="delta-low-jack-dat_phonk.osu">Dat Phonk</td><td>Delta Low</td><td>Delta Low</td><td class="num sk-tag">jack</td><td class="num">7.962</td><td class="num">14.32</td><td class="num delta">+0.15</td><td class="flag exact"></td></tr>
<tr class="row-exact" data-sk="jack"><td class="song-name" title="delta-low-jack-nijiiro_kekkai_signicial,.osu">Nijiiro Kekkai Signicial,</td><td>Delta Low</td><td>Delta Low</td><td class="num sk-tag">jack</td><td class="num">7.930</td><td class="num">14.28</td><td class="num delta">+0.11</td><td class="flag exact"></td></tr>
<tr class="row-exact" data-sk="speed"><td class="song-name" title="delta-low-speed-australia(1.3).osu">Australia (1.3x)</td><td>Delta Low</td><td>Delta Low</td><td class="num sk-tag">speed</td><td class="num">7.775</td><td class="num">14.09</td><td class="num delta">-0.08</td><td class="flag exact"></td></tr>
<tr class="row-exact" data-sk="speed"><td class="song-name" title="delta-low-speed-white_hair_little_swords_girl.osu">White Hair Little Swords Girl</td><td>Delta Low</td><td>Delta Low</td><td class="num sk-tag">speed</td><td class="num">7.959</td><td class="num">14.32</td><td class="num delta">+0.15</td><td class="flag exact"></td></tr>
<tr class="row-adjacent" data-sk="tech"><td class="song-name" title="delta-low-tech-fractal_vertex.osu">Fractal Vertex</td><td>Delta Low</td><td>Delta Mid</td><td class="num sk-tag">tech</td><td class="num">7.974</td><td class="num">14.34</td><td class="num delta">+0.17</td><td class="flag adjacent">~</td></tr>
<tr class="row-exact" data-sk="tech"><td class="song-name" title="delta-low-tech-kimiyo.osu">Kimiyo</td><td>Delta Low</td><td>Delta Low</td><td class="num sk-tag">tech</td><td class="num">7.892</td><td class="num">14.24</td><td class="num delta">+0.07</td><td class="flag exact"></td></tr>
<tr class="row-exact" data-sk="tech"><td class="song-name" title="delta-low-tech-shadows_of_cats(1.2).osu">Shadows Of Cats (1.2x)</td><td>Delta Low</td><td>Delta Low</td><td class="num sk-tag">tech</td><td class="num">7.795</td><td class="num">14.12</td><td class="num delta">-0.05</td><td class="flag exact"></td></tr>
<tr class="row-exact" data-sk="tech"><td class="song-name" title="delta-low-tech-still_into_you(1.2).osu">Still Into You (1.2x)</td><td>Delta Low</td><td>Delta Low</td><td class="num sk-tag">tech</td><td class="num">7.958</td><td class="num">14.32</td><td class="num delta">+0.15</td><td class="flag exact"></td></tr>
<tr class="row-exact" data-sk="speed"><td class="song-name" title="delta-lowmid-speed-nijuu(1.16).osu">Nijuu (1.16x)</td><td>Delta Low/Mid</td><td>Delta Mid</td><td class="num sk-tag">speed</td><td class="num">7.975</td><td class="num">14.34</td><td class="num delta">+0.01</td><td class="flag exact"></td></tr>
<tr class="row-exact" data-sk="jack"><td class="song-name" title="Delta-mid-Jack-drop_it_like_it's_hot.osu">Drop It Like It'S Hot</td><td>Delta Mid</td><td>Delta Mid</td><td class="num sk-tag">jack</td><td class="num">8.059</td><td class="num">14.44</td><td class="num delta">-0.06</td><td class="flag exact"></td></tr>
<tr class="row-adjacent" data-sk="jack"><td class="song-name" title="Delta-mid-jack-aquaris(1.3).osu">Aquaris (1.3x)</td><td>Delta Mid</td><td>Delta Low</td><td class="num sk-tag">jack</td><td class="num">7.810</td><td class="num">14.14</td><td class="num delta">-0.36</td><td class="flag adjacent">~</td></tr>
<tr class="row-exact" data-sk="jack"><td class="song-name" title="Delta-mid-jack-cant_give_it_up(1.1).osu">Cant Give It Up (1.1x)</td><td>Delta Mid</td><td>Delta Mid</td><td class="num sk-tag">jack</td><td class="num">8.107</td><td class="num">14.50</td><td class="num delta">+0.00</td><td class="flag exact"></td></tr>
<tr class="row-adjacent" data-sk="jack"><td class="song-name" title="Delta-mid-jack-give_it_to_dem.osu">Give It To Dem</td><td>Delta Mid</td><td>Delta High</td><td class="num sk-tag">jack</td><td class="num">8.264</td><td class="num">14.69</td><td class="num delta">+0.19</td><td class="flag adjacent">~</td></tr>
<tr class="row-exact" data-sk="jack"><td class="song-name" title="Delta-mid-jack-sakazuki(1.1).osu">Sakazuki (1.1x)</td><td>Delta Mid</td><td>Delta Mid</td><td class="num sk-tag">jack</td><td class="num">8.146</td><td class="num">14.55</td><td class="num delta">+0.05</td><td class="flag exact"></td></tr>
<tr class="row-exact" data-sk="jack"><td class="song-name" title="delta-mid-jack-bookmaker.osu">Bookmaker</td><td>Delta Mid</td><td>Delta Mid</td><td class="num sk-tag">jack</td><td class="num">8.031</td><td class="num">14.41</td><td class="num delta">-0.09</td><td class="flag exact"></td></tr>
<tr class="row-exact" data-sk="jack"><td class="song-name" title="delta-mid-jack-darling dance.osu">Darling Dance</td><td>Delta Mid</td><td>Delta Mid</td><td class="num sk-tag">jack</td><td class="num">8.132</td><td class="num">14.53</td><td class="num delta">+0.03</td><td class="flag exact"></td></tr>
<tr class="row-exact" data-sk="jack"><td class="song-name" title="delta-mid-jack-enough(1.1).osu">Enough (1.1x)</td><td>Delta Mid</td><td>Delta Mid</td><td class="num sk-tag">jack</td><td class="num">8.196</td><td class="num">14.61</td><td class="num delta">+0.11</td><td class="flag exact"></td></tr>
<tr class="row-exact" data-sk="jack"><td class="song-name" title="delta-mid-jack-land_of_fire(1.1).osu">Land Of Fire (1.1x)</td><td>Delta Mid</td><td>Delta Mid</td><td class="num sk-tag">jack</td><td class="num">7.993</td><td class="num">14.36</td><td class="num delta">-0.14</td><td class="flag exact"></td></tr>
<tr class="row-exact" data-sk="jack"><td class="song-name" title="delta-mid-jack-the_island_of_albatross.osu">The Island Of Albatross</td><td>Delta Mid</td><td>Delta Mid</td><td class="num sk-tag">jack</td><td class="num">8.180</td><td class="num">14.59</td><td class="num delta">+0.09</td><td class="flag exact"></td></tr>
<tr class="row-adjacent" data-sk="speed"><td class="song-name" title="delta-mid-speed-volcanic.osu">Volcanic</td><td>Delta Mid</td><td>Delta Low</td><td class="num sk-tag">speed</td><td class="num">7.756</td><td class="num">14.07</td><td class="num delta">-0.43</td><td class="flag adjacent">~</td></tr>
<tr class="row-adjacent" data-sk="stamina"><td class="song-name" title="delta-mid-stamina-excuse_my_rudeness(1.05).osu">Excuse My Rudeness (1.05x)</td><td>Delta Mid</td><td>Delta Low</td><td class="num sk-tag">stamina</td><td class="num">7.952</td><td class="num">14.31</td><td class="num delta">-0.19</td><td class="flag adjacent">~</td></tr>
<tr class="row-exact" data-sk="stamina"><td class="song-name" title="delta-mid-stamina-future_dominators(1.3).osu">Future Dominators (1.3x)</td><td>Delta Mid</td><td>Delta Mid</td><td class="num sk-tag">stamina</td><td class="num">8.057</td><td class="num">14.44</td><td class="num delta">-0.06</td><td class="flag exact"></td></tr>
<tr class="row-adjacent" data-sk="stamina"><td class="song-name" title="delta-mid-stamina-pacific_girls(1.4).osu">Pacific Girls (1.4x)</td><td>Delta Mid</td><td>Delta Low</td><td class="num sk-tag">stamina</td><td class="num">7.960</td><td class="num">14.32</td><td class="num delta">-0.18</td><td class="flag adjacent">~</td></tr>
<tr class="row-exact" data-sk="stamina"><td class="song-name" title="delta-mid-stamina-the_fool(1.3).osu">The Fool (1.3x)</td><td>Delta Mid</td><td>Delta Mid</td><td class="num sk-tag">stamina</td><td class="num">8.020</td><td class="num">14.39</td><td class="num delta">-0.11</td><td class="flag exact"></td></tr>
<tr class="row-adjacent" data-sk="stamina"><td class="song-name" title="delta-mid-stamina-villain_virus(1.05).osu">Villain Virus (1.05x)</td><td>Delta Mid</td><td>Delta Low</td><td class="num sk-tag">stamina</td><td class="num">7.947</td><td class="num">14.30</td><td class="num delta">-0.20</td><td class="flag adjacent">~</td></tr>
<tr class="row-adjacent" data-sk="stamina"><td class="song-name" title="delta-mid-stamina-walk_this_way(1.1).osu">Walk This Way (1.1x)</td><td>Delta Mid</td><td>Delta Low</td><td class="num sk-tag">stamina</td><td class="num">7.879</td><td class="num">14.22</td><td class="num delta">-0.28</td><td class="flag adjacent">~</td></tr>
<tr class="row-exact" data-sk="tech"><td class="song-name" title="delta-mid-tech-crescent_moon_island(1.05).osu">Crescent Moon Island (1.05x)</td><td>Delta Mid</td><td>Delta Mid</td><td class="num sk-tag">tech</td><td class="num">8.173</td><td class="num">14.58</td><td class="num delta">+0.08</td><td class="flag exact"></td></tr>
<tr class="row-exact" data-sk="tech"><td class="song-name" title="delta-mid-tech-gottasadae(1.25).osu">Gottasadae (1.25x)</td><td>Delta Mid</td><td>Delta Mid</td><td class="num sk-tag">tech</td><td class="num">8.152</td><td class="num">14.55</td><td class="num delta">+0.05</td><td class="flag exact"></td></tr>
<tr class="row-adjacent" data-sk="speed"><td class="song-name" title="delta-midhigh-speed-thinkofyou(1.15).osu">Thinkofyou (1.15x)</td><td>Delta Mid/High</td><td>Delta High</td><td class="num sk-tag">speed</td><td class="num">8.511</td><td class="num">14.99</td><td class="num delta">+0.32</td><td class="flag adjacent">~</td></tr>
<tr class="row-exact" data-sk="jack"><td class="song-name" title="delta-high-jack-heart_chrome(1.3).osu">Heart Chrome (1.3x)</td><td>Delta High</td><td>Delta High</td><td class="num sk-tag">jack</td><td class="num">8.384</td><td class="num">14.84</td><td class="num delta">+0.01</td><td class="flag exact"></td></tr>
<tr class="row-exact" data-sk="jack"><td class="song-name" title="delta-high-jack-please_chi.osu">Please Chi</td><td>Delta High</td><td>Delta High</td><td class="num sk-tag">jack</td><td class="num">8.326</td><td class="num">14.77</td><td class="num delta">-0.06</td><td class="flag exact"></td></tr>
<tr class="row-exact" data-sk="speed"><td class="song-name" title="delta-high-speed-apoplexy.osu">Apoplexy</td><td>Delta High</td><td>Delta High</td><td class="num sk-tag">speed</td><td class="num">8.268</td><td class="num">14.70</td><td class="num delta">-0.13</td><td class="flag exact"></td></tr>
<tr class="row-adjacent" data-sk="stamina"><td class="song-name" title="delta-high-stamina-k.y.a.f.a(1.25).osu">K.Y.A.F.A (1.25x)</td><td>Delta High</td><td>Delta Mid</td><td class="num sk-tag">stamina</td><td class="num">8.195</td><td class="num">14.61</td><td class="num delta">-0.22</td><td class="flag adjacent">~</td></tr>
<tr class="row-adjacent" data-sk="tech"><td class="song-name" title="delta-high-tech-bismuth_supernova.osu">Bismuth Supernova</td><td>Delta High</td><td>Delta Mid</td><td class="num sk-tag">tech</td><td class="num">8.224</td><td class="num">14.64</td><td class="num delta">-0.19</td><td class="flag adjacent">~</td></tr>
<tr class="row-exact" data-sk="tech"><td class="song-name" title="delta-high-tech-dimension_wars.osu">Dimension Wars</td><td>Delta High</td><td>Delta High</td><td class="num sk-tag">tech</td><td class="num">8.438</td><td class="num">14.90</td><td class="num delta">+0.07</td><td class="flag exact"></td></tr>
<tr class="row-exact" data-sk="jack"><td class="song-name" title="epsilon-low-jack-ghost_nova.osu">Ghost Nova</td><td>Epsilon Low</td><td>Epsilon Low</td><td class="num sk-tag">jack</td><td class="num">8.689</td><td class="num">15.22</td><td class="num delta">+0.05</td><td class="flag exact"></td></tr>
<tr class="row-exact" data-sk="jack"><td class="song-name" title="epsilon-low-jack-unmeiron.osu">Unmeiron</td><td>Epsilon Low</td><td>Epsilon Low</td><td class="num sk-tag">jack</td><td class="num">8.618</td><td class="num">15.13</td><td class="num delta">-0.04</td><td class="flag exact"></td></tr>
<tr class="row-exact" data-sk="speed"><td class="song-name" title="epsilon-low-speed-paradigmshift(1.15).osu">Paradigmshift (1.15x)</td><td>Epsilon Low</td><td>Epsilon Low</td><td class="num sk-tag">speed</td><td class="num">8.725</td><td class="num">15.27</td><td class="num delta">+0.10</td><td class="flag exact"></td></tr>
<tr class="row-exact" data-sk="stamina"><td class="song-name" title="epsilon-low-stamina-quadraphinix(1.6).osu">Quadraphinix (1.6x)</td><td>Epsilon Low</td><td>Epsilon Low</td><td class="num sk-tag">stamina</td><td class="num">8.632</td><td class="num">15.15</td><td class="num delta">-0.02</td><td class="flag exact"></td></tr>
<tr class="row-adjacent" data-sk="tech"><td class="song-name" title="epsilon-low-tech-bismuth_singularity.osu">Bismuth Singularity</td><td>Epsilon Low</td><td>Epsilon Mid</td><td class="num sk-tag">tech</td><td class="num">8.785</td><td class="num">15.35</td><td class="num delta">+0.18</td><td class="flag adjacent">~</td></tr>
<tr class="row-adjacent" data-sk="tech"><td class="song-name" title="epsilon-low-tech-looking_for_edge_of_ground(1.15).osu">Looking For Edge Of Ground (1.15x)</td><td>Epsilon Low</td><td>Delta High</td><td class="num sk-tag">tech</td><td class="num">8.424</td><td class="num">14.89</td><td class="num delta">-0.28</td><td class="flag adjacent">~</td></tr>
<tr class="row-adjacent" data-sk="tech"><td class="song-name" title="epsilon-low-tech-the_poetic_edda.osu">The Poetic Edda</td><td>Epsilon Low</td><td>Epsilon Mid</td><td class="num sk-tag">tech</td><td class="num">8.896</td><td class="num">15.49</td><td class="num delta">+0.32</td><td class="flag adjacent">~</td></tr>
<tr class="row-adjacent" data-sk="speed"><td class="song-name" title="epsilon-lowmid-speed-cyber_inductance(1.1).osu">Cyber Inductance (1.1x)</td><td>Epsilon Low/Mid</td><td>Epsilon Mid</td><td class="num sk-tag">speed</td><td class="num">8.906</td><td class="num">15.51</td><td class="num delta">+0.18</td><td class="flag adjacent">~</td></tr>
<tr class="row-exact" data-sk="jack"><td class="song-name" title="Epsilon-mid-jack-darling_dance(1.1).osu">Darling Dance (1.1x)</td><td>Epsilon Mid</td><td>Epsilon Mid</td><td class="num sk-tag">jack</td><td class="num">8.953</td><td class="num">15.57</td><td class="num delta">+0.07</td><td class="flag exact"></td></tr>
<tr class="row-within" data-sk="jack"><td class="song-name" title="Epsilon-mid-jack-goodtek.osu">Goodtek</td><td>Epsilon Mid</td><td>Epsilon Low</td><td class="num sk-tag">jack</td><td class="num">8.520</td><td class="num">15.00</td><td class="num delta">-0.50</td><td class="flag within"></td></tr>
<tr class="row-adjacent" data-sk="jack"><td class="song-name" title="Epsilon-mid-jack-rose_quartz(1.3).osu">Rose Quartz (1.3x)</td><td>Epsilon Mid</td><td>Epsilon Low</td><td class="num sk-tag">jack</td><td class="num">8.767</td><td class="num">15.33</td><td class="num delta">-0.17</td><td class="flag adjacent">~</td></tr>
<tr class="row-exact" data-sk="jack"><td class="song-name" title="Epsilon-mid-jack-satellite(1.1).osu">Satellite (1.1x)</td><td>Epsilon Mid</td><td>Epsilon Mid</td><td class="num sk-tag">jack</td><td class="num">8.871</td><td class="num">15.46</td><td class="num delta">-0.04</td><td class="flag exact"></td></tr>
<tr class="row-exact" data-sk="jack"><td class="song-name" title="epsilon-mid-jack-bad_cycle.osu">Bad Cycle</td><td>Epsilon Mid</td><td>Epsilon Mid</td><td class="num sk-tag">jack</td><td class="num">8.812</td><td class="num">15.39</td><td class="num delta">-0.11</td><td class="flag exact"></td></tr>
<tr class="row-adjacent" data-sk="jack"><td class="song-name" title="epsilon-mid-jack-break(1.3).osu">Break (1.3x)</td><td>Epsilon Mid</td><td>Epsilon High</td><td class="num sk-tag">jack</td><td class="num">9.055</td><td class="num">15.70</td><td class="num delta">+0.20</td><td class="flag adjacent">~</td></tr>
<tr class="row-adjacent" data-sk="jack"><td class="song-name" title="epsilon-mid-jack-gengaozo_noize_of_nocent.osu">Gengaozo Noize Of Nocent</td><td>Epsilon Mid</td><td>Epsilon Low</td><td class="num sk-tag">jack</td><td class="num">8.741</td><td class="num">15.29</td><td class="num delta">-0.21</td><td class="flag adjacent">~</td></tr>
<tr class="row-exact" data-sk="jack"><td class="song-name" title="epsilon-mid-jack-i_love_it(1.3).osu">I Love It (1.3x)</td><td>Epsilon Mid</td><td>Epsilon Mid</td><td class="num sk-tag">jack</td><td class="num">8.999</td><td class="num">15.63</td><td class="num delta">+0.13</td><td class="flag exact"></td></tr>
<tr class="row-adjacent" data-sk="jack"><td class="song-name" title="epsilon-mid-jack-pam(1.3).osu">Pam (1.3x)</td><td>Epsilon Mid</td><td>Epsilon High</td><td class="num sk-tag">jack</td><td class="num">9.221</td><td class="num">15.92</td><td class="num delta">+0.42</td><td class="flag adjacent">~</td></tr>
<tr class="row-exact" data-sk="jack"><td class="song-name" title="epsilon-mid-jack-psychology(1.1).osu">Psychology (1.1x)</td><td>Epsilon Mid</td><td>Epsilon Mid</td><td class="num sk-tag">jack</td><td class="num">8.959</td><td class="num">15.58</td><td class="num delta">+0.08</td><td class="flag exact"></td></tr>
<tr class="row-exact" data-sk="jack"><td class="song-name" title="epsilon-mid-jack-rigid paradise(1.05).osu">Rigid Paradise (1.05x)</td><td>Epsilon Mid</td><td>Epsilon Mid</td><td class="num sk-tag">jack</td><td class="num">8.977</td><td class="num">15.60</td><td class="num delta">+0.10</td><td class="flag exact"></td></tr>
<tr class="row-exact" data-sk="jack"><td class="song-name" title="epsilon-mid-jack-sakazuki(1.2).osu">Sakazuki (1.2x)</td><td>Epsilon Mid</td><td>Epsilon Mid</td><td class="num sk-tag">jack</td><td class="num">8.937</td><td class="num">15.55</td><td class="num delta">+0.05</td><td class="flag exact"></td></tr>
<tr class="row-within" data-sk="jack"><td class="song-name" title="epsilon-mid-jack-stronger.osu">Stronger</td><td>Epsilon Mid</td><td>Delta High</td><td class="num sk-tag">jack</td><td class="num">8.431</td><td class="num">14.89</td><td class="num delta">-0.61</td><td class="flag within"></td></tr>
<tr class="row-exact" data-sk="jack"><td class="song-name" title="epsilon-mid-jack-trouble_kuroneko(1.5).osu">Trouble Kuroneko (1.5x)</td><td>Epsilon Mid</td><td>Epsilon Mid</td><td class="num sk-tag">jack</td><td class="num">8.881</td><td class="num">15.47</td><td class="num delta">-0.03</td><td class="flag exact"></td></tr>
<tr class="row-within" data-sk="speed"><td class="song-name" title="epsilon-mid-speed-full_throttle.osu">Full Throttle</td><td>Epsilon Mid</td><td>Zeta Mid</td><td class="num sk-tag">speed</td><td class="num">9.474</td><td class="num">16.36</td><td class="num delta">+0.86</td><td class="flag within"></td></tr>
<tr class="row-adjacent" data-sk="speed"><td class="song-name" title="epsilon-mid-speed-mario_paint.osu">Mario Paint</td><td>Epsilon Mid</td><td>Epsilon High</td><td class="num sk-tag">speed</td><td class="num">9.158</td><td class="num">15.84</td><td class="num delta">+0.34</td><td class="flag adjacent">~</td></tr>
<tr class="row-exact" data-sk="stamina"><td class="song-name" title="epsilon-mid-stamina-the_empress(1.15).osu">The Empress (1.15x)</td><td>Epsilon Mid</td><td>Epsilon Mid</td><td class="num sk-tag">stamina</td><td class="num">8.881</td><td class="num">15.47</td><td class="num delta">-0.03</td><td class="flag exact"></td></tr>
<tr class="row-exact" data-sk="stamina"><td class="song-name" title="epsilon-mid-stamina-the_fate_of_remix(1.1).osu">The Fate Of Remix (1.1x)</td><td>Epsilon Mid</td><td>Epsilon Mid</td><td class="num sk-tag">stamina</td><td class="num">8.967</td><td class="num">15.59</td><td class="num delta">+0.09</td><td class="flag exact"></td></tr>
<tr class="row-adjacent" data-sk="stamina"><td class="song-name" title="epsilon-mid-stamina-the_hypocrisy(1.2).osu">The Hypocrisy (1.2x)</td><td>Epsilon Mid</td><td>Epsilon Low</td><td class="num sk-tag">stamina</td><td class="num">8.703</td><td class="num">15.24</td><td class="num delta">-0.26</td><td class="flag adjacent">~</td></tr>
<tr class="row-exact" data-sk="stamina"><td class="song-name" title="epsilon-mid-stamina-yuudachi_no_ribbon(1.2).osu">Yuudachi No Ribbon (1.2x)</td><td>Epsilon Mid</td><td>Epsilon Mid</td><td class="num sk-tag">stamina</td><td class="num">8.795</td><td class="num">15.36</td><td class="num delta">-0.14</td><td class="flag exact"></td></tr>
<tr class="row-adjacent" data-sk="tech"><td class="song-name" title="epsilon-mid-tech-forgotten(1.4).osu">Forgotten (1.4x)</td><td>Epsilon Mid</td><td>Epsilon High</td><td class="num sk-tag">tech</td><td class="num">9.218</td><td class="num">15.91</td><td class="num delta">+0.41</td><td class="flag adjacent">~</td></tr>
<tr class="row-exact" data-sk="jack"><td class="song-name" title="epsilon-high-jack-celestial_exploring.osu">Celestial Exploring</td><td>Epsilon High</td><td>Epsilon High</td><td class="num sk-tag">jack</td><td class="num">9.108</td><td class="num">15.77</td><td class="num delta">-0.06</td><td class="flag exact"></td></tr>
<tr class="row-exact" data-sk="jack"><td class="song-name" title="epsilon-high-jack-quevedo(1.3).osu">Quevedo (1.3x)</td><td>Epsilon High</td><td>Epsilon High</td><td class="num sk-tag">jack</td><td class="num">9.193</td><td class="num">15.88</td><td class="num delta">+0.05</td><td class="flag exact"></td></tr>
<tr class="row-adjacent" data-sk="speed"><td class="song-name" title="epsilon-high-speed-sentimental_crisis(1.55).osu">Sentimental Crisis (1.55x)</td><td>Epsilon High</td><td>Epsilon Mid</td><td class="num sk-tag">speed</td><td class="num">8.958</td><td class="num">15.58</td><td class="num delta">-0.25</td><td class="flag adjacent">~</td></tr>
<tr class="row-adjacent" data-sk="tech"><td class="song-name" title="epsilon-high-tech-dancer_in_the_smoke(1.3).osu">Dancer In The Smoke (1.3x)</td><td>Epsilon High</td><td>Zeta Low</td><td class="num sk-tag">tech</td><td class="num">9.324</td><td class="num">16.08</td><td class="num delta">+0.25</td><td class="flag adjacent">~</td></tr>
<tr class="row-exact" data-sk="jack"><td class="song-name" title="Zeta-low-jack-angel_dust.osu">Angel Dust</td><td>Zeta Low</td><td>Zeta Low</td><td class="num sk-tag">jack</td><td class="num">9.352</td><td class="num">16.13</td><td class="num delta">-0.04</td><td class="flag exact"></td></tr>
<tr class="row-exact" data-sk="jack"><td class="song-name" title="Zeta-mid-jack-i_love_it(1.4).osu">I Love It (1.4x)</td><td>Zeta Mid</td><td>Zeta Mid</td><td class="num sk-tag">jack</td><td class="num">9.609</td><td class="num">16.61</td><td class="num delta">+0.11</td><td class="flag exact"></td></tr>
<tr class="row-adjacent" data-sk="jack"><td class="song-name" title="Zeta-mid-jack-mutwa.osu">Mutwa</td><td>Zeta Mid</td><td>Zeta High</td><td class="num sk-tag">jack</td><td class="num">9.767</td><td class="num">16.91</td><td class="num delta">+0.41</td><td class="flag adjacent">~</td></tr>
<tr class="row-within" data-sk="jack"><td class="song-name" title="Zeta-mid-jack-observation(0.95).osu">Observation (0.95x)</td><td>Zeta Mid</td><td>Epsilon High</td><td class="num sk-tag">jack</td><td class="num">9.163</td><td class="num">15.84</td><td class="num delta">-0.66</td><td class="flag within"></td></tr>
<tr class="row-within" data-sk="jack"><td class="song-name" title="Zeta-mid-jack-promise(1.22).osu">Promise (1.22x)</td><td>Zeta Mid</td><td>Eta Low</td><td class="num sk-tag">jack</td><td class="num">9.829</td><td class="num">17.02</td><td class="num delta">+0.52</td><td class="flag within"></td></tr>
<tr class="row-within" data-sk="jack"><td class="song-name" title="Zeta-mid-jack-the_island_of_albatross(1.2).osu">The Island Of Albatross (1.2x)</td><td>Zeta Mid</td><td>Eta Low</td><td class="num sk-tag">jack</td><td class="num">9.849</td><td class="num">17.05</td><td class="num delta">+0.55</td><td class="flag within"></td></tr>
<tr class="row-miss" data-sk="jack"><td class="song-name" title="Zeta-mid-jack-truth_never_spoken(1.3).osu">Truth Never Spoken (1.3x)</td><td>Zeta Mid</td><td>Epsilon Mid</td><td class="num sk-tag">jack</td><td class="num">8.855</td><td class="num">15.44</td><td class="num delta">-1.06</td><td class="flag miss"></td></tr>
<tr class="row-miss" data-sk="jack"><td class="song-name" title="Zeta-mid-jack-vertex_beta.osu">Vertex Beta</td><td>Zeta Mid</td><td>Epsilon Low</td><td class="num sk-tag">jack</td><td class="num">8.611</td><td class="num">15.12</td><td class="num delta">-1.38</td><td class="flag miss"></td></tr>
<tr class="row-adjacent" data-sk="jack"><td class="song-name" title="zeta-mid-jack-cg901b(1.3).osu">Cg901B (1.3x)</td><td>Zeta Mid</td><td>Zeta High</td><td class="num sk-tag">jack</td><td class="num">9.648</td><td class="num">16.68</td><td class="num delta">+0.18</td><td class="flag adjacent">~</td></tr>
<tr class="row-exact" data-sk="jack"><td class="song-name" title="zeta-mid-jack-dark_sambaland_omega(1.2).osu">Dark Sambaland Omega (1.2x)</td><td>Zeta Mid</td><td>Zeta Mid</td><td class="num sk-tag">jack</td><td class="num">9.515</td><td class="num">16.43</td><td class="num delta">-0.07</td><td class="flag exact"></td></tr>
<tr class="row-adjacent" data-sk="jack"><td class="song-name" title="zeta-mid-jack-exile(1.1).osu">Exile (1.1x)</td><td>Zeta Mid</td><td>Zeta High</td><td class="num sk-tag">jack</td><td class="num">9.646</td><td class="num">16.68</td><td class="num delta">+0.18</td><td class="flag adjacent">~</td></tr>
<tr class="row-adjacent" data-sk="speed"><td class="song-name" title="zeta-mid-speed-]-[34#!.osu">]-[34#!</td><td>Zeta Mid</td><td>Zeta Low</td><td class="num sk-tag">speed</td><td class="num">9.424</td><td class="num">16.26</td><td class="num delta">-0.24</td><td class="flag adjacent">~</td></tr>
<tr class="row-adjacent" data-sk="speed"><td class="song-name" title="zeta-mid-speed-finixe.osu">Finixe</td><td>Zeta Mid</td><td>Zeta High</td><td class="num sk-tag">speed</td><td class="num">9.654</td><td class="num">16.69</td><td class="num delta">+0.19</td><td class="flag adjacent">~</td></tr>
<tr class="row-adjacent" data-sk="stamina"><td class="song-name" title="zeta-mid-stamina-nijuu(1.0).osu">Nijuu (1.0x)</td><td>Zeta Mid</td><td>Zeta Mid</td><td class="num sk-tag">stamina</td><td class="num">9.462</td><td class="num">16.33</td><td class="num delta">-0.17</td><td class="flag adjacent">~</td></tr>
<tr class="row-exact" data-sk="tech"><td class="song-name" title="zeta-mid-tech-apocalyptic_premonition(1.05).osu">Apocalyptic Premonition (1.05x)</td><td>Zeta Mid</td><td>Zeta Mid</td><td class="num sk-tag">tech</td><td class="num">9.567</td><td class="num">16.53</td><td class="num delta">+0.03</td><td class="flag exact"></td></tr>
<tr class="row-adjacent" data-sk="tech"><td class="song-name" title="zeta-mid-tech-weird_autumn(1.4).osu">Weird Autumn (1.4x)</td><td>Zeta Mid</td><td>Zeta Low</td><td class="num sk-tag">tech</td><td class="num">9.332</td><td class="num">16.09</td><td class="num delta">-0.41</td><td class="flag adjacent">~</td></tr>
<tr class="row-adjacent" data-sk="speed"><td class="song-name" title="zeta-midhigh-speed-twilightofthegods(1.3).osu">Twilightofthegods (1.3x)</td><td>Zeta Mid/High</td><td>Eta Low</td><td class="num sk-tag">speed</td><td class="num">9.834</td><td class="num">17.03</td><td class="num delta">+0.36</td><td class="flag adjacent">~</td></tr>
<tr class="row-exact" data-sk="jack"><td class="song-name" title="zeta-high-jack-anhedonia_gemini.osu">Anhedonia Gemini</td><td>Zeta High</td><td>Zeta High</td><td class="num sk-tag">jack</td><td class="num">9.793</td><td class="num">16.95</td><td class="num delta">+0.12</td><td class="flag exact"></td></tr>
<tr class="row-exact" data-sk="jack"><td class="song-name" title="zeta-high-jack-darling_dance(1.2).osu">Darling Dance (1.2x)</td><td>Zeta High</td><td>Zeta High</td><td class="num sk-tag">jack</td><td class="num">9.693</td><td class="num">16.77</td><td class="num delta">-0.06</td><td class="flag exact"></td></tr>
<tr class="row-exact" data-sk="jack"><td class="song-name" title="zeta-high-jack-day_by_day.osu">Day By Day</td><td>Zeta High</td><td>Zeta High</td><td class="num sk-tag">jack</td><td class="num">9.756</td><td class="num">16.88</td><td class="num delta">+0.05</td><td class="flag exact"></td></tr>
<tr class="row-adjacent" data-sk="jack"><td class="song-name" title="zeta-high-jack-decoy_omega.osu">Decoy Omega</td><td>Zeta High</td><td>Eta Low</td><td class="num sk-tag">jack</td><td class="num">9.876</td><td class="num">17.09</td><td class="num delta">+0.26</td><td class="flag adjacent">~</td></tr>
<tr class="row-adjacent" data-sk="jack"><td class="song-name" title="zeta-high-jack-melody_blooming_in_the_earth(1.5).osu">Melody Blooming In The Earth (1.5x)</td><td>Zeta High</td><td>Eta Low</td><td class="num sk-tag">jack</td><td class="num">9.881</td><td class="num">17.10</td><td class="num delta">+0.27</td><td class="flag adjacent">~</td></tr>
<tr class="row-exact" data-sk="jack"><td class="song-name" title="eta-low-jack-deep_down(1.35).osu">Deep Down (1.35x)</td><td>Eta Low</td><td>Eta Low</td><td class="num sk-tag">jack</td><td class="num">10.034</td><td class="num">17.33</td><td class="num delta">+0.16</td><td class="flag exact"></td></tr>
<tr class="row-exact" data-sk="jack"><td class="song-name" title="eta-low-jack-sendan_life_frawog(1.5).osu">Sendan Life Frawog (1.5x)</td><td>Eta Low</td><td>Eta Low</td><td class="num sk-tag">jack</td><td class="num">9.974</td><td class="num">17.24</td><td class="num delta">+0.07</td><td class="flag exact"></td></tr>
<tr class="row-exact" data-sk="tech"><td class="song-name" title="eta-low-tech-code_name_bravo.osu">Code Name Bravo</td><td>Eta Low</td><td>Eta Low</td><td class="num sk-tag">tech</td><td class="num">9.980</td><td class="num">17.25</td><td class="num delta">+0.08</td><td class="flag exact"></td></tr>
<tr class="row-adjacent" data-sk="jack"><td class="song-name" title="Eta-mid-jack-torment_payback.osu">Torment Payback</td><td>Eta Mid</td><td>Eta High</td><td class="num sk-tag">jack</td><td class="num">10.382</td><td class="num">17.86</td><td class="num delta">+0.36</td><td class="flag adjacent">~</td></tr>
<tr class="row-exact" data-sk="speed"><td class="song-name" title="eta-mid-speed-intersect_thunderbolt.osu">Intersect Thunderbolt</td><td>Eta Mid</td><td>Eta Mid</td><td class="num sk-tag">speed</td><td class="num">10.053</td><td class="num">17.36</td><td class="num delta">-0.14</td><td class="flag exact"></td></tr>
<tr class="row-adjacent" data-sk="stamina"><td class="song-name" title="eta-mid-stamina-collapse_of_ego.osu">Collapse Of Ego</td><td>Eta Mid</td><td>Eta Low</td><td class="num sk-tag">stamina</td><td class="num">9.959</td><td class="num">17.22</td><td class="num delta">-0.28</td><td class="flag adjacent">~</td></tr>
<tr class="row-adjacent" data-sk="tech"><td class="song-name" title="eta-mid-tech-exitium.osu">Exitium</td><td>Eta Mid</td><td>Eta High</td><td class="num sk-tag">tech</td><td class="num">10.255</td><td class="num">17.67</td><td class="num delta">+0.17</td><td class="flag adjacent">~</td></tr>
<tr class="row-exact" data-sk="jack"><td class="song-name" title="eta-high-jack-rip_me_apart.osu">Rip Me Apart</td><td>Eta High</td><td>Eta High</td><td class="num sk-tag">jack</td><td class="num">10.331</td><td class="num">17.78</td><td class="num delta">-0.05</td><td class="flag exact"></td></tr>
</tbody>
</table>
</div>
</section>
<!-- Footer -->
<footer>
<p>Daniel Benchmark Report</p>
<p>2026-03-29 09:47</p>
</footer>
</div>
<script>
// ── Chart data ────────────────────────────────────────────────────────────────
const scatterRaw = [{"x": 11.5, "y": 11.58, "color": "#22c55e", "flag": "exact", "sk": "jack", "song": "Dark Sambaland"}, {"x": 12.5, "y": 12.4, "color": "#22c55e", "flag": "exact", "sk": "jack", "song": "Paradigm Shift"}, {"x": 14.5, "y": 14.44, "color": "#22c55e", "flag": "exact", "sk": "jack", "song": "Drop It Like It'S Hot"}, {"x": 14.5, "y": 14.14, "color": "#94a3b8", "flag": "adjacent", "sk": "jack", "song": "Aquaris (1.3x)"}, {"x": 14.5, "y": 14.5, "color": "#22c55e", "flag": "exact", "sk": "jack", "song": "Cant Give It Up (1.1x)"}, {"x": 14.5, "y": 14.69, "color": "#94a3b8", "flag": "adjacent", "sk": "jack", "song": "Give It To Dem"}, {"x": 14.5, "y": 14.55, "color": "#22c55e", "flag": "exact", "sk": "jack", "song": "Sakazuki (1.1x)"}, {"x": 15.5, "y": 15.57, "color": "#22c55e", "flag": "exact", "sk": "jack", "song": "Darling Dance (1.1x)"}, {"x": 15.5, "y": 15.0, "color": "#94a3b8", "flag": "within", "sk": "jack", "song": "Goodtek"}, {"x": 15.5, "y": 15.33, "color": "#94a3b8", "flag": "adjacent", "sk": "jack", "song": "Rose Quartz (1.3x)"}, {"x": 15.5, "y": 15.46, "color": "#22c55e", "flag": "exact", "sk": "jack", "song": "Satellite (1.1x)"}, {"x": 17.5, "y": 17.86, "color": "#94a3b8", "flag": "adjacent", "sk": "jack", "song": "Torment Payback"}, {"x": 13.17, "y": 13.14, "color": "#22c55e", "flag": "exact", "sk": "jack", "song": "Hiasobi (1.1x)"}, {"x": 13.17, "y": 13.01, "color": "#22c55e", "flag": "exact", "sk": "jack", "song": "Reflect (1.05x)"}, {"x": 13.5, "y": 13.67, "color": "#94a3b8", "flag": "adjacent", "sk": "jack", "song": "Break (1.1x)"}, {"x": 13.5, "y": 12.79, "color": "#94a3b8", "flag": "within", "sk": "jack", "song": "Captain Jack (1.2x)"}, {"x": 13.5, "y": 13.38, "color": "#22c55e", "flag": "exact", "sk": "jack", "song": "Do It To It (1.2x)"}, {"x": 16.17, "y": 16.13, "color": "#22c55e", "flag": "exact", "sk": "jack", "song": "Angel Dust"}, {"x": 16.5, "y": 16.61, "color": "#22c55e", "flag": "exact", "sk": "jack", "song": "I Love It (1.4x)"}, {"x": 16.5, "y": 16.91, "color": "#94a3b8", "flag": "adjacent", "sk": "jack", "song": "Mutwa"}, {"x": 16.5, "y": 15.84, "color": "#94a3b8", "flag": "within", "sk": "jack", "song": "Observation (0.95x)"}, {"x": 16.5, "y": 17.02, "color": "#94a3b8", "flag": "within", "sk": "jack", "song": "Promise (1.22x)"}, {"x": 16.5, "y": 17.05, "color": "#94a3b8", "flag": "within", "sk": "jack", "song": "The Island Of Albatross (1.2x)"}, {"x": 16.5, "y": 15.44, "color": "#ef4444", "flag": "miss", "sk": "jack", "song": "Truth Never Spoken (1.3x)"}, {"x": 16.5, "y": 15.12, "color": "#ef4444", "flag": "miss", "sk": "jack", "song": "Vertex Beta"}, {"x": 11.83, "y": 11.82, "color": "#22c55e", "flag": "exact", "sk": "speed", "song": "Yell (0.975x)"}, {"x": 11.83, "y": 11.64, "color": "#94a3b8", "flag": "adjacent", "sk": "tech", "song": "Angel'S Salad"}, {"x": 11.83, "y": 11.76, "color": "#22c55e", "flag": "exact", "sk": "tech", "song": "Bismuth Nebula"}, {"x": 11.5, "y": 12.4, "color": "#94a3b8", "flag": "within", "sk": "speed", "song": "Air (0.915x)"}, {"x": 11.5, "y": 11.52, "color": "#22c55e", "flag": "exact", "sk": "speed", "song": "Makiba"}, {"x": 11.5, "y": 11.38, "color": "#22c55e", "flag": "exact", "sk": "stamina", "song": "Babel (1.3x)"}, {"x": 11.5, "y": 11.45, "color": "#22c55e", "flag": "exact", "sk": "stamina", "song": "Lazorbeamz (1.0x)"}, {"x": 11.5, "y": 11.47, "color": "#22c55e", "flag": "exact", "sk": "tech", "song": "Odoru (1.1x)"}, {"x": 11.67, "y": 12.05, "color": "#94a3b8", "flag": "adjacent", "sk": "speed", "song": "Yasashisa No Riyuu"}, {"x": 12.83, "y": 12.89, "color": "#22c55e", "flag": "exact", "sk": "speed", "song": "Crystal World Fracture"}, {"x": 12.83, "y": 12.73, "color": "#22c55e", "flag": "exact", "sk": "stamina", "song": "Observation (1.2x)"}, {"x": 12.5, "y": 12.23, "color": "#94a3b8", "flag": "adjacent", "sk": "speed", "song": "5Oul On D!Splay"}, {"x": 12.5, "y": 11.9, "color": "#94a3b8", "flag": "within", "sk": "speed", "song": "Amber Starlight"}, {"x": 12.5, "y": 12.41, "color": "#22c55e", "flag": "exact", "sk": "speed", "song": "Hideho (0.875x)"}, {"x": 12.5, "y": 12.31, "color": "#94a3b8", "flag": "adjacent", "sk": "speed", "song": "Uso No Hibana (0.9x)"}, {"x": 12.5, "y": 12.95, "color": "#94a3b8", "flag": "adjacent", "sk": "stamina", "song": "Cycle Hit (1.4x)"}, {"x": 12.5, "y": 12.63, "color": "#22c55e", "flag": "exact", "sk": "stamina", "song": "Time To Say Goodbye (1.0x)"}, {"x": 12.5, "y": 12.82, "color": "#94a3b8", "flag": "adjacent", "sk": "tech", "song": "Blue Planet"}, {"x": 12.5, "y": 12.06, "color": "#94a3b8", "flag": "adjacent", "sk": "tech", "song": "Psychology (1.15x)"}, {"x": 12.67, "y": 12.25, "color": "#94a3b8", "flag": "adjacent", "sk": "speed", "song": "Pastel Subliminal (0.9x)"}, {"x": 14.83, "y": 14.84, "color": "#22c55e", "flag": "exact", "sk": "jack", "song": "Heart Chrome (1.3x)"}, {"x": 14.83, "y": 14.77, "color": "#22c55e", "flag": "exact", "sk": "jack", "song": "Please Chi"}, {"x": 14.83, "y": 14.7, "color": "#22c55e", "flag": "exact", "sk": "speed", "song": "Apoplexy"}, {"x": 14.83, "y": 14.61, "color": "#94a3b8", "flag": "adjacent", "sk": "stamina", "song": "K.Y.A.F.A (1.25x)"}, {"x": 14.83, "y": 14.64, "color": "#94a3b8", "flag": "adjacent", "sk": "tech", "song": "Bismuth Supernova"}, {"x": 14.83, "y": 14.9, "color": "#22c55e", "flag": "exact", "sk": "tech", "song": "Dimension Wars"}, {"x": 14.17, "y": 14.32, "color": "#22c55e", "flag": "exact", "sk": "jack", "song": "Dat Phonk"}, {"x": 14.17, "y": 14.28, "color": "#22c55e", "flag": "exact", "sk": "jack", "song": "Nijiiro Kekkai Signicial,"}, {"x": 14.17, "y": 14.09, "color": "#22c55e", "flag": "exact", "sk": "speed", "song": "Australia (1.3x)"}, {"x": 14.17, "y": 14.32, "color": "#22c55e", "flag": "exact", "sk": "speed", "song": "White Hair Little Swords Girl"}, {"x": 14.17, "y": 14.34, "color": "#94a3b8", "flag": "adjacent", "sk": "tech", "song": "Fractal Vertex"}, {"x": 14.17, "y": 14.24, "color": "#22c55e", "flag": "exact", "sk": "tech", "song": "Kimiyo"}, {"x": 14.17, "y": 14.12, "color": "#22c55e", "flag": "exact", "sk": "tech", "song": "Shadows Of Cats (1.2x)"}, {"x": 14.17, "y": 14.32, "color": "#22c55e", "flag": "exact", "sk": "tech", "song": "Still Into You (1.2x)"}, {"x": 14.33, "y": 14.34, "color": "#22c55e", "flag": "exact", "sk": "speed", "song": "Nijuu (1.16x)"}, {"x": 14.5, "y": 14.41, "color": "#22c55e", "flag": "exact", "sk": "jack", "song": "Bookmaker"}, {"x": 14.5, "y": 14.53, "color": "#22c55e", "flag": "exact", "sk": "jack", "song": "Darling Dance"}, {"x": 14.5, "y": 14.61, "color": "#22c55e", "flag": "exact", "sk": "jack", "song": "Enough (1.1x)"}, {"x": 14.5, "y": 14.36, "color": "#22c55e", "flag": "exact", "sk": "jack", "song": "Land Of Fire (1.1x)"}, {"x": 14.5, "y": 14.59, "color": "#22c55e", "flag": "exact", "sk": "jack", "song": "The Island Of Albatross"}, {"x": 14.5, "y": 14.07, "color": "#94a3b8", "flag": "adjacent", "sk": "speed", "song": "Volcanic"}, {"x": 14.5, "y": 14.31, "color": "#94a3b8", "flag": "adjacent", "sk": "stamina", "song": "Excuse My Rudeness (1.05x)"}, {"x": 14.5, "y": 14.44, "color": "#22c55e", "flag": "exact", "sk": "stamina", "song": "Future Dominators (1.3x)"}, {"x": 14.5, "y": 14.32, "color": "#94a3b8", "flag": "adjacent", "sk": "stamina", "song": "Pacific Girls (1.4x)"}, {"x": 14.5, "y": 14.39, "color": "#22c55e", "flag": "exact", "sk": "stamina", "song": "The Fool (1.3x)"}, {"x": 14.5, "y": 14.3, "color": "#94a3b8", "flag": "adjacent", "sk": "stamina", "song": "Villain Virus (1.05x)"}, {"x": 14.5, "y": 14.22, "color": "#94a3b8", "flag": "adjacent", "sk": "stamina", "song": "Walk This Way (1.1x)"}, {"x": 14.5, "y": 14.58, "color": "#22c55e", "flag": "exact", "sk": "tech", "song": "Crescent Moon Island (1.05x)"}, {"x": 14.5, "y": 14.55, "color": "#22c55e", "flag": "exact", "sk": "tech", "song": "Gottasadae (1.25x)"}, {"x": 14.67, "y": 14.99, "color": "#94a3b8", "flag": "adjacent", "sk": "speed", "song": "Thinkofyou (1.15x)"}, {"x": 15.83, "y": 15.77, "color": "#22c55e", "flag": "exact", "sk": "jack", "song": "Celestial Exploring"}, {"x": 15.83, "y": 15.88, "color": "#22c55e", "flag": "exact", "sk": "jack", "song": "Quevedo (1.3x)"}, {"x": 15.83, "y": 15.58, "color": "#94a3b8", "flag": "adjacent", "sk": "speed", "song": "Sentimental Crisis (1.55x)"}, {"x": 15.83, "y": 16.08, "color": "#94a3b8", "flag": "adjacent", "sk": "tech", "song": "Dancer In The Smoke (1.3x)"}, {"x": 15.17, "y": 15.22, "color": "#22c55e", "flag": "exact", "sk": "jack", "song": "Ghost Nova"}, {"x": 15.17, "y": 15.13, "color": "#22c55e", "flag": "exact", "sk": "jack", "song": "Unmeiron"}, {"x": 15.17, "y": 15.27, "color": "#22c55e", "flag": "exact", "sk": "speed", "song": "Paradigmshift (1.15x)"}, {"x": 15.17, "y": 15.15, "color": "#22c55e", "flag": "exact", "sk": "stamina", "song": "Quadraphinix (1.6x)"}, {"x": 15.17, "y": 15.35, "color": "#94a3b8", "flag": "adjacent", "sk": "tech", "song": "Bismuth Singularity"}, {"x": 15.17, "y": 14.89, "color": "#94a3b8", "flag": "adjacent", "sk": "tech", "song": "Looking For Edge Of Ground (1.15x)"}, {"x": 15.17, "y": 15.49, "color": "#94a3b8", "flag": "adjacent", "sk": "tech", "song": "The Poetic Edda"}, {"x": 15.33, "y": 15.51, "color": "#94a3b8", "flag": "adjacent", "sk": "speed", "song": "Cyber Inductance (1.1x)"}, {"x": 15.5, "y": 15.39, "color": "#22c55e", "flag": "exact", "sk": "jack", "song": "Bad Cycle"}, {"x": 15.5, "y": 15.7, "color": "#94a3b8", "flag": "adjacent", "sk": "jack", "song": "Break (1.3x)"}, {"x": 15.5, "y": 15.29, "color": "#94a3b8", "flag": "adjacent", "sk": "jack", "song": "Gengaozo Noize Of Nocent"}, {"x": 15.5, "y": 15.63, "color": "#22c55e", "flag": "exact", "sk": "jack", "song": "I Love It (1.3x)"}, {"x": 15.5, "y": 15.92, "color": "#94a3b8", "flag": "adjacent", "sk": "jack", "song": "Pam (1.3x)"}, {"x": 15.5, "y": 15.58, "color": "#22c55e", "flag": "exact", "sk": "jack", "song": "Psychology (1.1x)"}, {"x": 15.5, "y": 15.6, "color": "#22c55e", "flag": "exact", "sk": "jack", "song": "Rigid Paradise (1.05x)"}, {"x": 15.5, "y": 15.55, "color": "#22c55e", "flag": "exact", "sk": "jack", "song": "Sakazuki (1.2x)"}, {"x": 15.5, "y": 14.89, "color": "#94a3b8", "flag": "within", "sk": "jack", "song": "Stronger"}, {"x": 15.5, "y": 15.47, "color": "#22c55e", "flag": "exact", "sk": "jack", "song": "Trouble Kuroneko (1.5x)"}, {"x": 15.5, "y": 16.36, "color": "#94a3b8", "flag": "within", "sk": "speed", "song": "Full Throttle"}, {"x": 15.5, "y": 15.84, "color": "#94a3b8", "flag": "adjacent", "sk": "speed", "song": "Mario Paint"}, {"x": 15.5, "y": 15.47, "color": "#22c55e", "flag": "exact", "sk": "stamina", "song": "The Empress (1.15x)"}, {"x": 15.5, "y": 15.59, "color": "#22c55e", "flag": "exact", "sk": "stamina", "song": "The Fate Of Remix (1.1x)"}, {"x": 15.5, "y": 15.24, "color": "#94a3b8", "flag": "adjacent", "sk": "stamina", "song": "The Hypocrisy (1.2x)"}, {"x": 15.5, "y": 15.36, "color": "#22c55e", "flag": "exact", "sk": "stamina", "song": "Yuudachi No Ribbon (1.2x)"}, {"x": 15.5, "y": 15.91, "color": "#94a3b8", "flag": "adjacent", "sk": "tech", "song": "Forgotten (1.4x)"}, {"x": 17.83, "y": 17.78, "color": "#22c55e", "flag": "exact", "sk": "jack", "song": "Rip Me Apart"}, {"x": 17.17, "y": 17.33, "color": "#22c55e", "flag": "exact", "sk": "jack", "song": "Deep Down (1.35x)"}, {"x": 17.17, "y": 17.24, "color": "#22c55e", "flag": "exact", "sk": "jack", "song": "Sendan Life Frawog (1.5x)"}, {"x": 17.17, "y": 17.25, "color": "#22c55e", "flag": "exact", "sk": "tech", "song": "Code Name Bravo"}, {"x": 17.5, "y": 17.36, "color": "#22c55e", "flag": "exact", "sk": "speed", "song": "Intersect Thunderbolt"}, {"x": 17.5, "y": 17.22, "color": "#94a3b8", "flag": "adjacent", "sk": "stamina", "song": "Collapse Of Ego"}, {"x": 17.5, "y": 17.67, "color": "#94a3b8", "flag": "adjacent", "sk": "tech", "song": "Exitium"}, {"x": 13.83, "y": 13.65, "color": "#94a3b8", "flag": "adjacent", "sk": "stamina", "song": "Amen Katagiri Generation (1.05x)"}, {"x": 13.83, "y": 13.7, "color": "#22c55e", "flag": "exact", "sk": "stamina", "song": "Livestream (1.2x)"}, {"x": 13.83, "y": 13.67, "color": "#22c55e", "flag": "exact", "sk": "stamina", "song": "Nuclear Star (1.3x)"}, {"x": 13.83, "y": 13.81, "color": "#22c55e", "flag": "exact", "sk": "tech", "song": "Nhelv"}, {"x": 13.83, "y": 13.72, "color": "#22c55e", "flag": "exact", "sk": "tech", "song": "Playing With Ruby (1.2x)"}, {"x": 13.17, "y": 13.14, "color": "#22c55e", "flag": "exact", "sk": "jack", "song": "Hustler"}, {"x": 13.17, "y": 12.94, "color": "#94a3b8", "flag": "adjacent", "sk": "stamina", "song": "Anomaly (1.2x)"}, {"x": 13.17, "y": 12.53, "color": "#94a3b8", "flag": "within", "sk": "tech", "song": "Tornado"}, {"x": 13.33, "y": 13.83, "color": "#94a3b8", "flag": "within", "sk": "speed", "song": "Sunnyshinyring"}, {"x": 13.5, "y": 13.8, "color": "#94a3b8", "flag": "adjacent", "sk": "jack", "song": "Everything Black"}, {"x": 13.5, "y": 14.08, "color": "#94a3b8", "flag": "within", "sk": "speed", "song": "Credens (0.9x)"}, {"x": 13.5, "y": 13.67, "color": "#94a3b8", "flag": "adjacent", "sk": "speed", "song": "P8107 (1.4x)"}, {"x": 13.5, "y": 13.72, "color": "#94a3b8", "flag": "adjacent", "sk": "speed", "song": "Reflec Streamz"}, {"x": 13.5, "y": 13.6, "color": "#22c55e", "flag": "exact", "sk": "stamina", "song": "Cyber Inductance (1.4x)"}, {"x": 13.5, "y": 13.06, "color": "#94a3b8", "flag": "adjacent", "sk": "stamina", "song": "Phosphor (1.05x)"}, {"x": 13.5, "y": 13.9, "color": "#94a3b8", "flag": "adjacent", "sk": "stamina", "song": "Shinbatsu O Tadori (1.05x)"}, {"x": 13.5, "y": 13.7, "color": "#94a3b8", "flag": "adjacent", "sk": "tech", "song": "Icicle Stinger (1.1x)"}, {"x": 13.5, "y": 13.58, "color": "#22c55e", "flag": "exact", "sk": "tech", "song": "Matusa Bomber (1.05x)"}, {"x": 13.67, "y": 14.21, "color": "#94a3b8", "flag": "within", "sk": "speed", "song": "Childhoodfriend"}, {"x": 13.67, "y": 13.69, "color": "#22c55e", "flag": "exact", "sk": "speed", "song": "Pureruby (1.08x)"}, {"x": 16.83, "y": 16.95, "color": "#22c55e", "flag": "exact", "sk": "jack", "song": "Anhedonia Gemini"}, {"x": 16.83, "y": 16.77, "color": "#22c55e", "flag": "exact", "sk": "jack", "song": "Darling Dance (1.2x)"}, {"x": 16.83, "y": 16.88, "color": "#22c55e", "flag": "exact", "sk": "jack", "song": "Day By Day"}, {"x": 16.83, "y": 17.09, "color": "#94a3b8", "flag": "adjacent", "sk": "jack", "song": "Decoy Omega"}, {"x": 16.83, "y": 17.1, "color": "#94a3b8", "flag": "adjacent", "sk": "jack", "song": "Melody Blooming In The Earth (1.5x)"}, {"x": 16.5, "y": 16.68, "color": "#94a3b8", "flag": "adjacent", "sk": "jack", "song": "Cg901B (1.3x)"}, {"x": 16.5, "y": 16.43, "color": "#22c55e", "flag": "exact", "sk": "jack", "song": "Dark Sambaland Omega (1.2x)"}, {"x": 16.5, "y": 16.68, "color": "#94a3b8", "flag": "adjacent", "sk": "jack", "song": "Exile (1.1x)"}, {"x": 16.5, "y": 16.26, "color": "#94a3b8", "flag": "adjacent", "sk": "speed", "song": "]-[34#!"}, {"x": 16.5, "y": 16.69, "color": "#94a3b8", "flag": "adjacent", "sk": "speed", "song": "Finixe"}, {"x": 16.5, "y": 16.33, "color": "#94a3b8", "flag": "adjacent", "sk": "stamina", "song": "Nijuu (1.0x)"}, {"x": 16.5, "y": 16.53, "color": "#22c55e", "flag": "exact", "sk": "tech", "song": "Apocalyptic Premonition (1.05x)"}, {"x": 16.5, "y": 16.09, "color": "#94a3b8", "flag": "adjacent", "sk": "tech", "song": "Weird Autumn (1.4x)"}, {"x": 16.67, "y": 17.03, "color": "#94a3b8", "flag": "adjacent", "sk": "speed", "song": "Twilightofthegods (1.3x)"}];
const swarmPoints = [{"x": 0.08, "y": 11.5, "flag": "exact", "name": "Dark Sambaland", "exp": "Alpha Mid"}, {"x": -0.1, "y": 12.5, "flag": "exact", "name": "Paradigm Shift", "exp": "Beta Mid"}, {"x": -0.06, "y": 14.5, "flag": "exact", "name": "Drop It Like It'S Hot", "exp": "Delta Mid"}, {"x": -0.36, "y": 14.5, "flag": "adjacent", "name": "Aquaris (1.3x)", "exp": "Delta Mid"}, {"x": 0.0, "y": 14.5, "flag": "exact", "name": "Cant Give It Up (1.1x)", "exp": "Delta Mid"}, {"x": 0.19, "y": 14.5, "flag": "adjacent", "name": "Give It To Dem", "exp": "Delta Mid"}, {"x": 0.05, "y": 14.5, "flag": "exact", "name": "Sakazuki (1.1x)", "exp": "Delta Mid"}, {"x": 0.07, "y": 15.5, "flag": "exact", "name": "Darling Dance (1.1x)", "exp": "Epsilon Mid"}, {"x": -0.5, "y": 15.5, "flag": "within", "name": "Goodtek", "exp": "Epsilon Mid"}, {"x": -0.17, "y": 15.5, "flag": "adjacent", "name": "Rose Quartz (1.3x)", "exp": "Epsilon Mid"}, {"x": -0.04, "y": 15.5, "flag": "exact", "name": "Satellite (1.1x)", "exp": "Epsilon Mid"}, {"x": 0.36, "y": 17.5, "flag": "adjacent", "name": "Torment Payback", "exp": "Eta Mid"}, {"x": -0.03, "y": 13.17, "flag": "exact", "name": "Hiasobi (1.1x)", "exp": "Gamma Low"}, {"x": -0.16, "y": 13.17, "flag": "exact", "name": "Reflect (1.05x)", "exp": "Gamma Low"}, {"x": 0.17, "y": 13.5, "flag": "adjacent", "name": "Break (1.1x)", "exp": "Gamma Mid"}, {"x": -0.71, "y": 13.5, "flag": "within", "name": "Captain Jack (1.2x)", "exp": "Gamma Mid"}, {"x": -0.12, "y": 13.5, "flag": "exact", "name": "Do It To It (1.2x)", "exp": "Gamma Mid"}, {"x": -0.04, "y": 16.17, "flag": "exact", "name": "Angel Dust", "exp": "Zeta Low"}, {"x": 0.11, "y": 16.5, "flag": "exact", "name": "I Love It (1.4x)", "exp": "Zeta Mid"}, {"x": 0.41, "y": 16.5, "flag": "adjacent", "name": "Mutwa", "exp": "Zeta Mid"}, {"x": -0.66, "y": 16.5, "flag": "within", "name": "Observation (0.95x)", "exp": "Zeta Mid"}, {"x": 0.52, "y": 16.5, "flag": "within", "name": "Promise (1.22x)", "exp": "Zeta Mid"}, {"x": 0.55, "y": 16.5, "flag": "within", "name": "The Island Of Albatross (1.2x)", "exp": "Zeta Mid"}, {"x": -1.06, "y": 16.5, "flag": "miss", "name": "Truth Never Spoken (1.3x)", "exp": "Zeta Mid"}, {"x": -1.38, "y": 16.5, "flag": "miss", "name": "Vertex Beta", "exp": "Zeta Mid"}, {"x": -0.01, "y": 11.83, "flag": "exact", "name": "Yell (0.975x)", "exp": "Alpha High"}, {"x": -0.19, "y": 11.83, "flag": "adjacent", "name": "Angel'S Salad", "exp": "Alpha High"}, {"x": -0.07, "y": 11.83, "flag": "exact", "name": "Bismuth Nebula", "exp": "Alpha High"}, {"x": 0.9, "y": 11.5, "flag": "within", "name": "Air (0.915x)", "exp": "Alpha Mid"}, {"x": 0.02, "y": 11.5, "flag": "exact", "name": "Makiba", "exp": "Alpha Mid"}, {"x": -0.12, "y": 11.5, "flag": "exact", "name": "Babel (1.3x)", "exp": "Alpha Mid"}, {"x": -0.05, "y": 11.5, "flag": "exact", "name": "Lazorbeamz (1.0x)", "exp": "Alpha Mid"}, {"x": -0.03, "y": 11.5, "flag": "exact", "name": "Odoru (1.1x)", "exp": "Alpha Mid"}, {"x": 0.38, "y": 11.67, "flag": "adjacent", "name": "Yasashisa No Riyuu", "exp": "Alpha Mid/High"}, {"x": 0.06, "y": 12.83, "flag": "exact", "name": "Crystal World Fracture", "exp": "Beta High"}, {"x": -0.1, "y": 12.83, "flag": "exact", "name": "Observation (1.2x)", "exp": "Beta High"}, {"x": -0.27, "y": 12.5, "flag": "adjacent", "name": "5Oul On D!Splay", "exp": "Beta Mid"}, {"x": -0.6, "y": 12.5, "flag": "within", "name": "Amber Starlight", "exp": "Beta Mid"}, {"x": -0.09, "y": 12.5, "flag": "exact", "name": "Hideho (0.875x)", "exp": "Beta Mid"}, {"x": -0.19, "y": 12.5, "flag": "adjacent", "name": "Uso No Hibana (0.9x)", "exp": "Beta Mid"}, {"x": 0.45, "y": 12.5, "flag": "adjacent", "name": "Cycle Hit (1.4x)", "exp": "Beta Mid"}, {"x": 0.13, "y": 12.5, "flag": "exact", "name": "Time To Say Goodbye (1.0x)", "exp": "Beta Mid"}, {"x": 0.32, "y": 12.5, "flag": "adjacent", "name": "Blue Planet", "exp": "Beta Mid"}, {"x": -0.44, "y": 12.5, "flag": "adjacent", "name": "Psychology (1.15x)", "exp": "Beta Mid"}, {"x": -0.42, "y": 12.67, "flag": "adjacent", "name": "Pastel Subliminal (0.9x)", "exp": "Beta Mid/High"}, {"x": 0.01, "y": 14.83, "flag": "exact", "name": "Heart Chrome (1.3x)", "exp": "Delta High"}, {"x": -0.06, "y": 14.83, "flag": "exact", "name": "Please Chi", "exp": "Delta High"}, {"x": -0.13, "y": 14.83, "flag": "exact", "name": "Apoplexy", "exp": "Delta High"}, {"x": -0.22, "y": 14.83, "flag": "adjacent", "name": "K.Y.A.F.A (1.25x)", "exp": "Delta High"}, {"x": -0.19, "y": 14.83, "flag": "adjacent", "name": "Bismuth Supernova", "exp": "Delta High"}, {"x": 0.07, "y": 14.83, "flag": "exact", "name": "Dimension Wars", "exp": "Delta High"}, {"x": 0.15, "y": 14.17, "flag": "exact", "name": "Dat Phonk", "exp": "Delta Low"}, {"x": 0.11, "y": 14.17, "flag": "exact", "name": "Nijiiro Kekkai Signicial,", "exp": "Delta Low"}, {"x": -0.08, "y": 14.17, "flag": "exact", "name": "Australia (1.3x)", "exp": "Delta Low"}, {"x": 0.15, "y": 14.17, "flag": "exact", "name": "White Hair Little Swords Girl", "exp": "Delta Low"}, {"x": 0.17, "y": 14.17, "flag": "adjacent", "name": "Fractal Vertex", "exp": "Delta Low"}, {"x": 0.07, "y": 14.17, "flag": "exact", "name": "Kimiyo", "exp": "Delta Low"}, {"x": -0.05, "y": 14.17, "flag": "exact", "name": "Shadows Of Cats (1.2x)", "exp": "Delta Low"}, {"x": 0.15, "y": 14.17, "flag": "exact", "name": "Still Into You (1.2x)", "exp": "Delta Low"}, {"x": 0.01, "y": 14.33, "flag": "exact", "name": "Nijuu (1.16x)", "exp": "Delta Low/Mid"}, {"x": -0.09, "y": 14.5, "flag": "exact", "name": "Bookmaker", "exp": "Delta Mid"}, {"x": 0.03, "y": 14.5, "flag": "exact", "name": "Darling Dance", "exp": "Delta Mid"}, {"x": 0.11, "y": 14.5, "flag": "exact", "name": "Enough (1.1x)", "exp": "Delta Mid"}, {"x": -0.14, "y": 14.5, "flag": "exact", "name": "Land Of Fire (1.1x)", "exp": "Delta Mid"}, {"x": 0.09, "y": 14.5, "flag": "exact", "name": "The Island Of Albatross", "exp": "Delta Mid"}, {"x": -0.43, "y": 14.5, "flag": "adjacent", "name": "Volcanic", "exp": "Delta Mid"}, {"x": -0.19, "y": 14.5, "flag": "adjacent", "name": "Excuse My Rudeness (1.05x)", "exp": "Delta Mid"}, {"x": -0.06, "y": 14.5, "flag": "exact", "name": "Future Dominators (1.3x)", "exp": "Delta Mid"}, {"x": -0.18, "y": 14.5, "flag": "adjacent", "name": "Pacific Girls (1.4x)", "exp": "Delta Mid"}, {"x": -0.11, "y": 14.5, "flag": "exact", "name": "The Fool (1.3x)", "exp": "Delta Mid"}, {"x": -0.2, "y": 14.5, "flag": "adjacent", "name": "Villain Virus (1.05x)", "exp": "Delta Mid"}, {"x": -0.28, "y": 14.5, "flag": "adjacent", "name": "Walk This Way (1.1x)", "exp": "Delta Mid"}, {"x": 0.08, "y": 14.5, "flag": "exact", "name": "Crescent Moon Island (1.05x)", "exp": "Delta Mid"}, {"x": 0.05, "y": 14.5, "flag": "exact", "name": "Gottasadae (1.25x)", "exp": "Delta Mid"}, {"x": 0.32, "y": 14.67, "flag": "adjacent", "name": "Thinkofyou (1.15x)", "exp": "Delta Mid/High"}, {"x": -0.06, "y": 15.83, "flag": "exact", "name": "Celestial Exploring", "exp": "Epsilon High"}, {"x": 0.05, "y": 15.83, "flag": "exact", "name": "Quevedo (1.3x)", "exp": "Epsilon High"}, {"x": -0.25, "y": 15.83, "flag": "adjacent", "name": "Sentimental Crisis (1.55x)", "exp": "Epsilon High"}, {"x": 0.25, "y": 15.83, "flag": "adjacent", "name": "Dancer In The Smoke (1.3x)", "exp": "Epsilon High"}, {"x": 0.05, "y": 15.17, "flag": "exact", "name": "Ghost Nova", "exp": "Epsilon Low"}, {"x": -0.04, "y": 15.17, "flag": "exact", "name": "Unmeiron", "exp": "Epsilon Low"}, {"x": 0.1, "y": 15.17, "flag": "exact", "name": "Paradigmshift (1.15x)", "exp": "Epsilon Low"}, {"x": -0.02, "y": 15.17, "flag": "exact", "name": "Quadraphinix (1.6x)", "exp": "Epsilon Low"}, {"x": 0.18, "y": 15.17, "flag": "adjacent", "name": "Bismuth Singularity", "exp": "Epsilon Low"}, {"x": -0.28, "y": 15.17, "flag": "adjacent", "name": "Looking For Edge Of Ground (1.15x)", "exp": "Epsilon Low"}, {"x": 0.32, "y": 15.17, "flag": "adjacent", "name": "The Poetic Edda", "exp": "Epsilon Low"}, {"x": 0.18, "y": 15.33, "flag": "adjacent", "name": "Cyber Inductance (1.1x)", "exp": "Epsilon Low/Mid"}, {"x": -0.11, "y": 15.5, "flag": "exact", "name": "Bad Cycle", "exp": "Epsilon Mid"}, {"x": 0.2, "y": 15.5, "flag": "adjacent", "name": "Break (1.3x)", "exp": "Epsilon Mid"}, {"x": -0.21, "y": 15.5, "flag": "adjacent", "name": "Gengaozo Noize Of Nocent", "exp": "Epsilon Mid"}, {"x": 0.13, "y": 15.5, "flag": "exact", "name": "I Love It (1.3x)", "exp": "Epsilon Mid"}, {"x": 0.42, "y": 15.5, "flag": "adjacent", "name": "Pam (1.3x)", "exp": "Epsilon Mid"}, {"x": 0.08, "y": 15.5, "flag": "exact", "name": "Psychology (1.1x)", "exp": "Epsilon Mid"}, {"x": 0.1, "y": 15.5, "flag": "exact", "name": "Rigid Paradise (1.05x)", "exp": "Epsilon Mid"}, {"x": 0.05, "y": 15.5, "flag": "exact", "name": "Sakazuki (1.2x)", "exp": "Epsilon Mid"}, {"x": -0.61, "y": 15.5, "flag": "within", "name": "Stronger", "exp": "Epsilon Mid"}, {"x": -0.03, "y": 15.5, "flag": "exact", "name": "Trouble Kuroneko (1.5x)", "exp": "Epsilon Mid"}, {"x": 0.86, "y": 15.5, "flag": "within", "name": "Full Throttle", "exp": "Epsilon Mid"}, {"x": 0.34, "y": 15.5, "flag": "adjacent", "name": "Mario Paint", "exp": "Epsilon Mid"}, {"x": -0.03, "y": 15.5, "flag": "exact", "name": "The Empress (1.15x)", "exp": "Epsilon Mid"}, {"x": 0.09, "y": 15.5, "flag": "exact", "name": "The Fate Of Remix (1.1x)", "exp": "Epsilon Mid"}, {"x": -0.26, "y": 15.5, "flag": "adjacent", "name": "The Hypocrisy (1.2x)", "exp": "Epsilon Mid"}, {"x": -0.14, "y": 15.5, "flag": "exact", "name": "Yuudachi No Ribbon (1.2x)", "exp": "Epsilon Mid"}, {"x": 0.41, "y": 15.5, "flag": "adjacent", "name": "Forgotten (1.4x)", "exp": "Epsilon Mid"}, {"x": -0.05, "y": 17.83, "flag": "exact", "name": "Rip Me Apart", "exp": "Eta High"}, {"x": 0.16, "y": 17.17, "flag": "exact", "name": "Deep Down (1.35x)", "exp": "Eta Low"}, {"x": 0.07, "y": 17.17, "flag": "exact", "name": "Sendan Life Frawog (1.5x)", "exp": "Eta Low"}, {"x": 0.08, "y": 17.17, "flag": "exact", "name": "Code Name Bravo", "exp": "Eta Low"}, {"x": -0.14, "y": 17.5, "flag": "exact", "name": "Intersect Thunderbolt", "exp": "Eta Mid"}, {"x": -0.28, "y": 17.5, "flag": "adjacent", "name": "Collapse Of Ego", "exp": "Eta Mid"}, {"x": 0.17, "y": 17.5, "flag": "adjacent", "name": "Exitium", "exp": "Eta Mid"}, {"x": -0.18, "y": 13.83, "flag": "adjacent", "name": "Amen Katagiri Generation (1.05x)", "exp": "Gamma High"}, {"x": -0.13, "y": 13.83, "flag": "exact", "name": "Livestream (1.2x)", "exp": "Gamma High"}, {"x": -0.16, "y": 13.83, "flag": "exact", "name": "Nuclear Star (1.3x)", "exp": "Gamma High"}, {"x": -0.02, "y": 13.83, "flag": "exact", "name": "Nhelv", "exp": "Gamma High"}, {"x": -0.11, "y": 13.83, "flag": "exact", "name": "Playing With Ruby (1.2x)", "exp": "Gamma High"}, {"x": -0.03, "y": 13.17, "flag": "exact", "name": "Hustler", "exp": "Gamma Low"}, {"x": -0.23, "y": 13.17, "flag": "adjacent", "name": "Anomaly (1.2x)", "exp": "Gamma Low"}, {"x": -0.64, "y": 13.17, "flag": "within", "name": "Tornado", "exp": "Gamma Low"}, {"x": 0.5, "y": 13.33, "flag": "within", "name": "Sunnyshinyring", "exp": "Gamma Low/Mid"}, {"x": 0.3, "y": 13.5, "flag": "adjacent", "name": "Everything Black", "exp": "Gamma Mid"}, {"x": 0.58, "y": 13.5, "flag": "within", "name": "Credens (0.9x)", "exp": "Gamma Mid"}, {"x": 0.17, "y": 13.5, "flag": "adjacent", "name": "P8107 (1.4x)", "exp": "Gamma Mid"}, {"x": 0.22, "y": 13.5, "flag": "adjacent", "name": "Reflec Streamz", "exp": "Gamma Mid"}, {"x": 0.1, "y": 13.5, "flag": "exact", "name": "Cyber Inductance (1.4x)", "exp": "Gamma Mid"}, {"x": -0.44, "y": 13.5, "flag": "adjacent", "name": "Phosphor (1.05x)", "exp": "Gamma Mid"}, {"x": 0.4, "y": 13.5, "flag": "adjacent", "name": "Shinbatsu O Tadori (1.05x)", "exp": "Gamma Mid"}, {"x": 0.2, "y": 13.5, "flag": "adjacent", "name": "Icicle Stinger (1.1x)", "exp": "Gamma Mid"}, {"x": 0.08, "y": 13.5, "flag": "exact", "name": "Matusa Bomber (1.05x)", "exp": "Gamma Mid"}, {"x": 0.54, "y": 13.67, "flag": "within", "name": "Childhoodfriend", "exp": "Gamma Mid/High"}, {"x": 0.02, "y": 13.67, "flag": "exact", "name": "Pureruby (1.08x)", "exp": "Gamma Mid/High"}, {"x": 0.12, "y": 16.83, "flag": "exact", "name": "Anhedonia Gemini", "exp": "Zeta High"}, {"x": -0.06, "y": 16.83, "flag": "exact", "name": "Darling Dance (1.2x)", "exp": "Zeta High"}, {"x": 0.05, "y": 16.83, "flag": "exact", "name": "Day By Day", "exp": "Zeta High"}, {"x": 0.26, "y": 16.83, "flag": "adjacent", "name": "Decoy Omega", "exp": "Zeta High"}, {"x": 0.27, "y": 16.83, "flag": "adjacent", "name": "Melody Blooming In The Earth (1.5x)", "exp": "Zeta High"}, {"x": 0.18, "y": 16.5, "flag": "adjacent", "name": "Cg901B (1.3x)", "exp": "Zeta Mid"}, {"x": -0.07, "y": 16.5, "flag": "exact", "name": "Dark Sambaland Omega (1.2x)", "exp": "Zeta Mid"}, {"x": 0.18, "y": 16.5, "flag": "adjacent", "name": "Exile (1.1x)", "exp": "Zeta Mid"}, {"x": -0.24, "y": 16.5, "flag": "adjacent", "name": "]-[34#!", "exp": "Zeta Mid"}, {"x": 0.19, "y": 16.5, "flag": "adjacent", "name": "Finixe", "exp": "Zeta Mid"}, {"x": -0.17, "y": 16.5, "flag": "adjacent", "name": "Nijuu (1.0x)", "exp": "Zeta Mid"}, {"x": 0.03, "y": 16.5, "flag": "exact", "name": "Apocalyptic Premonition (1.05x)", "exp": "Zeta Mid"}, {"x": -0.41, "y": 16.5, "flag": "adjacent", "name": "Weird Autumn (1.4x)", "exp": "Zeta Mid"}, {"x": 0.36, "y": 16.67, "flag": "adjacent", "name": "Twilightofthegods (1.3x)", "exp": "Zeta Mid/High"}];
const cumXs = [0.0, 0.0073, 0.0146, 0.0218, 0.0291, 0.0364, 0.0437, 0.051, 0.0583, 0.0655, 0.0728, 0.0801, 0.0874, 0.0947, 0.1019, 0.1092, 0.1165, 0.1238, 0.1311, 0.1383, 0.1456, 0.1529, 0.1602, 0.1675, 0.1748, 0.182, 0.1893, 0.1966, 0.2039, 0.2112, 0.2184, 0.2257, 0.233, 0.2403, 0.2476, 0.2548, 0.2621, 0.2694, 0.2767, 0.284, 0.2913, 0.2985, 0.3058, 0.3131, 0.3204, 0.3277, 0.3349, 0.3422, 0.3495, 0.3568, 0.3641, 0.3714, 0.3786, 0.3859, 0.3932, 0.4005, 0.4078, 0.415, 0.4223, 0.4296, 0.4369, 0.4442, 0.4514, 0.4587, 0.466, 0.4733, 0.4806, 0.4879, 0.4951, 0.5024, 0.5097, 0.517, 0.5243, 0.5315, 0.5388, 0.5461, 0.5534, 0.5607, 0.5679, 0.5752, 0.5825, 0.5898, 0.5971, 0.6044, 0.6116, 0.6189, 0.6262, 0.6335, 0.6408, 0.648, 0.6553, 0.6626, 0.6699, 0.6772, 0.6845, 0.6917, 0.699, 0.7063, 0.7136, 0.7209, 0.7281, 0.7354, 0.7427, 0.75, 0.7573, 0.7645, 0.7718, 0.7791, 0.7864, 0.7937, 0.801, 0.8082, 0.8155, 0.8228, 0.8301, 0.8374, 0.8446, 0.8519, 0.8592, 0.8665, 0.8738, 0.8811, 0.8883, 0.8956, 0.9029, 0.9102, 0.9175, 0.9247, 0.932, 0.9393, 0.9466, 0.9539, 0.9611, 0.9684, 0.9757, 0.983, 0.9903, 0.9976, 1.0048, 1.0121, 1.0194, 1.0267, 1.034, 1.0412, 1.0485, 1.0558, 1.0631, 1.0704, 1.0776, 1.0849, 1.0922, 1.0995, 1.1068, 1.1141, 1.1213, 1.1286, 1.1359, 1.1432, 1.1505, 1.1577, 1.165, 1.1723, 1.1796, 1.1869, 1.1942, 1.2014, 1.2087, 1.216, 1.2233, 1.2306, 1.2378, 1.2451, 1.2524, 1.2597, 1.267, 1.2742, 1.2815, 1.2888, 1.2961, 1.3034, 1.3107, 1.3179, 1.3252, 1.3325, 1.3398, 1.3471, 1.3543, 1.3616, 1.3689, 1.3762, 1.3835, 1.3907, 1.398, 1.4053, 1.4126, 1.4199, 1.4272, 1.4344, 1.4417, 1.449];
const cumYs = [0.69, 0.69, 2.76, 5.52, 5.52, 10.34, 12.41, 18.62, 18.62, 22.76, 26.9, 31.03, 31.03, 33.79, 37.24, 37.24, 41.38, 43.45, 46.21, 46.21, 48.28, 50.34, 52.41, 52.41, 56.55, 60.69, 60.69, 64.83, 66.9, 67.59, 67.59, 68.97, 69.66, 70.34, 70.34, 71.72, 73.1, 73.1, 74.48, 76.55, 76.55, 76.55, 77.24, 77.24, 79.31, 79.31, 79.31, 80.0, 80.0, 80.0, 82.07, 82.07, 82.07, 82.76, 82.76, 83.45, 83.45, 85.52, 86.9, 86.9, 87.59, 88.97, 89.66, 89.66, 89.66, 89.66, 89.66, 89.66, 89.66, 91.03, 91.03, 91.03, 91.72, 91.72, 91.72, 92.41, 93.1, 93.1, 93.1, 93.1, 93.79, 93.79, 93.79, 94.48, 95.17, 95.17, 95.17, 95.17, 95.86, 95.86, 95.86, 96.55, 96.55, 96.55, 96.55, 96.55, 96.55, 96.55, 97.24, 97.24, 97.24, 97.24, 97.24, 97.24, 97.24, 97.24, 97.24, 97.24, 97.24, 97.24, 97.24, 97.24, 97.24, 97.24, 97.24, 97.24, 97.24, 97.24, 97.24, 97.93, 97.93, 97.93, 97.93, 97.93, 98.62, 98.62, 98.62, 98.62, 98.62, 98.62, 98.62, 98.62, 98.62, 98.62, 98.62, 98.62, 98.62, 98.62, 98.62, 98.62, 98.62, 98.62, 98.62, 98.62, 98.62, 98.62, 99.31, 99.31, 99.31, 99.31, 99.31, 99.31, 99.31, 99.31, 99.31, 99.31, 99.31, 99.31, 99.31, 99.31, 99.31, 99.31, 99.31, 99.31, 99.31, 99.31, 99.31, 99.31, 99.31, 99.31, 99.31, 99.31, 99.31, 99.31, 99.31, 99.31, 99.31, 99.31, 99.31, 99.31, 99.31, 99.31, 99.31, 99.31, 99.31, 99.31, 99.31, 99.31, 99.31, 99.31, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0];
const cumThresh = [{"x": 0.165, "label": "Exact"}, {"x": 0.495, "label": "Adjacent"}, {"x": 1.0, "label": "Within"}];
const danLabels = ["Alpha", "Beta", "Gamma", "Delta", "Epsilon", "Zeta", "Eta"];
const danExact = [70.0, 41.7, 44.0, 68.6, 51.5, 31.8, 62.5];
const danAdjacent = [20.0, 50.0, 36.0, 31.4, 39.4, 45.5, 37.5];
const danWithin = [10.0, 8.3, 20.0, 0.0, 9.1, 13.6, 0.0];
const danMiss = [0.0, 0.0, 0.0, 0.0, 0.0, 9.1, 0.0];
const danBias = [0.091, -0.104, 0.013, -0.029, 0.034, -0.039, 0.046];
const danMae = [0.185, 0.264, 0.25, 0.133, 0.201, 0.333, 0.164];
const skLabels = ["jack", "tech", "speed", "stamina"];
const skExact = [63.9, 48.1, 35.5, 50.0];
const skAdjacent = [23.0, 48.1, 45.2, 50.0];
const skWithin = [9.8, 3.7, 19.4, 0.0];
const skMiss = [3.3, 0.0, 0.0, 0.0];
const skBias = [-0.021, 0.007, 0.098, -0.092];
const skMae = [0.207, 0.187, 0.282, 0.182];
const skN = [61, 27, 31, 26];
const C = {
bg: '#0e0f14', surface: '#16181f', border: '#2a2d3a',
text: '#dde1f5', muted: '#626880',
exact: '#7dd3fc', adjacent: '#4ade80', within: '#fb923c', miss: '#ef4444',
accent: '#818cf8'
};
Chart.defaults.color = C.muted;
Chart.defaults.borderColor = C.border;
Chart.defaults.font.family = "'JetBrains Mono', monospace";
Chart.defaults.font.size = 13;
Chart.defaults.maintainAspectRatio = false;
const DAN_SYMBOLS = {
11: 'α', 12: 'β', 13: 'γ',
14: 'δ', 15: 'ε', 16: 'ζ',
17: 'η', 18: 'θ'
};
function danLabel(v) {
const base = Math.floor(v);
const frac = Math.round((v - base) * 100) / 100;
if (frac === 0.5 && DAN_SYMBOLS[base]) return DAN_SYMBOLS[base];
return '';
}
const DAN_TICKS = [11.5, 12.5, 13.5, 14.5, 15.5, 16.5, 17.5, 18.5];
function makeScatterDatasets(filterSk) {
const pts = filterSk ? scatterRaw.filter(p => p.sk === filterSk) : scatterRaw;
return [
{ label: 'Exact', data: pts.filter(p=>p.flag==='exact') .map(p=>{return{x:p.x,y:p.y,song:p.song}}) , backgroundColor: C.exact +'cc', pointRadius: 5 },
{ label: 'Adjacent', data: pts.filter(p=>p.flag==='adjacent').map(p=>{return{x:p.x,y:p.y,song:p.song}}) , backgroundColor: C.adjacent+'cc', pointRadius: 5 },
{ label: 'Within', data: pts.filter(p=>p.flag==='within') .map(p=>{return{x:p.x,y:p.y,song:p.song}}) , backgroundColor: C.within +'cc', pointRadius: 5 },
{ label: 'Miss', data: pts.filter(p=>p.flag==='miss') .map(p=>{return{x:p.x,y:p.y,song:p.song}}) , backgroundColor: C.miss +'cc', pointRadius: 5 },
];
}
function scatterRange(filterSk) {
const pts = filterSk ? scatterRaw.filter(p => p.sk === filterSk) : scatterRaw;
if (!pts.length) return [10, 19];
const all = pts.map(p=>p.x).concat(pts.map(p=>p.y));
return [Math.min(...all) - 0.3, Math.max(...all) + 0.3];
}
function makeScatterChart(id, filterSk) {
const [sMin, sMax] = scatterRange(filterSk);
return new Chart(document.getElementById(id), {
type: 'scatter',
data: { datasets: makeScatterDatasets(filterSk) },
options: {
scales: {
x: {
title: {display:true, text:'Expected', color:C.muted},
min: sMin, max: sMax, grid: {color:C.border},
ticks: {
font: {size:17},
callback: v => danLabel(v)
},
afterBuildTicks: axis => {
axis.ticks = DAN_TICKS.filter(t => t >= sMin && t <= sMax).map(v => ({value:v}));
}
},
y: {
title: {display:true, text:'Predicted', color:C.muted},
min: sMin, max: sMax, grid: {color:C.border},
ticks: {
font: {size:17},
callback: v => danLabel(v)
},
afterBuildTicks: axis => {
axis.ticks = DAN_TICKS.filter(t => t >= sMin && t <= sMax).map(v => ({value:v}));
}
}
},
plugins: {
legend: { labels: { color: C.text } },
tooltip: { callbacks: { label: ctx => ` ${ctx.raw.song} — Exp: ${danLabel(ctx.parsed.x) || ctx.parsed.x.toFixed(2)} Got: ${danLabel(ctx.parsed.y) || ctx.parsed.y.toFixed(2)}` } }
}
},
plugins: [{
id: 'diag',
beforeDraw(chart) {
const {ctx, scales: {x, y}} = chart;
const mn = Math.max(x.min, y.min), mx = Math.min(x.max, y.max);
ctx.save(); ctx.strokeStyle = C.muted; ctx.setLineDash([4,4]); ctx.lineWidth = 1;
ctx.beginPath();
ctx.moveTo(x.getPixelForValue(mn), y.getPixelForValue(mn));
ctx.lineTo(x.getPixelForValue(mx), y.getPixelForValue(mx));
ctx.stroke(); ctx.restore();
}
}]
});
}
// ── Donut ─────────────────────────────────────────────────────────────────────
new Chart(document.getElementById('donut'), {
type: 'doughnut',
data: {
labels: ['Exact (±0.165)', 'Adjacent (±0.495)', 'Within (±1.0)', 'Miss (>1.0)'],
datasets: [{ data: [76, 54, 13, 2],
backgroundColor: [C.exact, C.adjacent, C.within, C.miss],
borderColor: C.bg, borderWidth: 3 }]
},
options: {
plugins: {
legend: { position: 'bottom', labels: { color: C.text } },
tooltip: { callbacks: { label: ctx => ` ${ctx.label}: ${ctx.raw} (${(100*ctx.raw/145).toFixed(1)}%)` } }
}
}
});
// ── Overall scatter ───────────────────────────────────────────────────────────
makeScatterChart('scatter', null);
// ── Delta vs difficulty scatter ───────────────────────────────────────────────
(function() {
const flagColor = {
exact: C.exact, adjacent: C.adjacent, within: C.within, miss: C.miss
};
const byFlag = ['exact','adjacent','within','miss'].map(f => ({
label: f.charAt(0).toUpperCase()+f.slice(1),
data: swarmPoints.filter(p=>p.flag===f).map(p=>{return{x:p.x,y:p.y,name:p.name,exp:p.exp}}) ,
backgroundColor: flagColor[f]+'cc',
pointRadius: 5,
pointHoverRadius: 7,
}));
const dxs = swarmPoints.map(p=>p.x);
const ext = dxs.length ? Math.max(Math.abs(Math.min(...dxs)), Math.abs(Math.max(...dxs)))*1.2 : 2;
const dys = swarmPoints.map(p=>p.y);
const yMin = dys.length ? Math.min(...dys)-0.3 : 11;
const yMax = dys.length ? Math.max(...dys)+0.3 : 19;
new Chart(document.getElementById('delta-kde'), {
type: 'scatter',
data: { datasets: byFlag },
options: {
plugins: {
legend: { labels: { color: C.text } },
tooltip: { callbacks: {
label: ctx => ` ${ctx.raw.name} (${ctx.raw.exp}) Δ=${ctx.parsed.x.toFixed(3)}`
}}
},
scales: {
x: {
type: 'linear', min: -ext, max: ext,
title: {display:true, text:'Δ numeric (got expected)', color:C.muted},
ticks: {maxTicksLimit:9, callback: v=>v.toFixed(2)},
grid: {color:C.border}
},
y: {
min: yMin, max: yMax,
title: {display:true, text:'Expected difficulty', color:C.muted},
grid: {color:C.border},
ticks: { font:{size:17}, callback: v => danLabel(v) },
afterBuildTicks: axis => {
axis.ticks = DAN_TICKS.filter(t => t >= yMin && t <= yMax).map(v => ({value:v}));
}
}
}
},
plugins: [{
id: 'delta-bands',
beforeDraw(chart) {
const {ctx, scales:{x}, chartArea:{top,bottom}} = chart;
const bands = [
{lo:-0.165, hi: 0.165, col:C.exact +'1e'},
{lo:-0.495, hi:-0.165, col:C.adjacent +'18'},
{lo: 0.165, hi: 0.495, col:C.adjacent +'18'},
{lo:-1.0, hi:-0.495, col:C.within +'14'},
{lo: 0.495, hi: 1.0, col:C.within +'14'},
];
ctx.save();
bands.forEach(b=>{
ctx.fillStyle=b.col;
ctx.fillRect(x.getPixelForValue(b.lo),top,x.getPixelForValue(b.hi)-x.getPixelForValue(b.lo),bottom-top);
});
[-1,-0.495,-0.165,0,0.165,0.495,1].forEach(v=>{
const px=x.getPixelForValue(v);
ctx.strokeStyle = v===0 ? C.muted+'99' : C.muted+'44';
ctx.lineWidth = v===0 ? 1.5 : 1;
ctx.setLineDash(v===0?[4,4]:[2,4]);
ctx.beginPath(); ctx.moveTo(px,top); ctx.lineTo(px,bottom); ctx.stroke();
});
ctx.restore();
}
}]
});
})();
// ── Cumulative accuracy curve ─────────────────────────────────────────────────
(function() {
const threshColors = {
'Exact': C.exact, 'Adjacent': C.adjacent, 'Within': C.within
};
new Chart(document.getElementById('cum-curve'), {
type: 'line',
data: {
labels: cumXs,
datasets: [{
label: '% maps within error',
data: cumYs,
borderColor: C.accent,
borderWidth: 2.5,
pointRadius: 0,
fill: true,
backgroundColor: (ctx) => {
const {chart} = ctx;
const {ctx: c, chartArea} = chart;
if (!chartArea) return C.accent + '22';
const grad = c.createLinearGradient(0, chartArea.top, 0, chartArea.bottom);
grad.addColorStop(0, C.accent + '55');
grad.addColorStop(1, C.accent + '05');
return grad;
},
tension: 0.3,
}]
},
options: {
plugins: {
legend: { display: false },
tooltip: {
callbacks: {
title: items => `Error ≤ ${parseFloat(items[0].label).toFixed(3)}`,
label: item => `${item.raw.toFixed(1)}% of maps`
}
}
},
scales: {
x: {
type: 'linear',
title: { display: true, text: 'Max |Δ numeric| tolerated', color: C.muted },
ticks: { maxTicksLimit: 8, callback: v => v.toFixed(2) },
grid: { color: C.border }
},
y: {
min: 0, max: 100,
title: { display: true, text: '% maps', color: C.muted },
ticks: { callback: v => v + '%' },
grid: { color: C.border }
}
}
},
plugins: [{
id: 'cum-markers',
afterDatasetsDraw(chart) {
const {ctx, scales: {x, y}, chartArea: {top, bottom}} = chart;
ctx.save();
cumThresh.forEach(t => {
const px = x.getPixelForValue(t.x);
const col = threshColors[t.label] || C.muted;
ctx.strokeStyle = col + 'aa';
ctx.lineWidth = 1.5;
ctx.setLineDash([4, 3]);
ctx.beginPath(); ctx.moveTo(px, top); ctx.lineTo(px, bottom); ctx.stroke();
ctx.setLineDash([]);
const idx = cumXs.findIndex(v => v >= t.x);
const pct = idx >= 0 ? cumYs[idx] : 100;
const py = y.getPixelForValue(pct);
ctx.fillStyle = col;
ctx.beginPath(); ctx.arc(px, py, 5, 0, Math.PI*2); ctx.fill();
ctx.fillStyle = col;
ctx.font = 'bold 11px monospace';
ctx.textAlign = 'left';
ctx.textBaseline= 'bottom';
ctx.fillText(`${t.label} ${pct.toFixed(0)}%`, px + 6, py - 3);
});
ctx.restore();
}
}]
});
})();
// ── Per-dan stacked bar ───────────────────────────────────────────────────────
const DAN_NAME_TO_SYM = {
'Alpha':'α','Beta':'β','Gamma':'γ','Delta':'δ',
'Epsilon':'ε','Zeta':'ζ','Eta':'η','Theta':'θ'
};
new Chart(document.getElementById('dan-bar'), {
type: 'bar',
data: {
labels: danLabels.map(d => DAN_NAME_TO_SYM[d] || d),
datasets: [
{ label: 'Exact %', data: danExact, backgroundColor: C.exact +'cc', stack: 's' },
{ label: 'Adjacent %', data: danAdjacent, backgroundColor: C.adjacent+'cc', stack: 's' },
{ label: 'Within %', data: danWithin, backgroundColor: C.within +'cc', stack: 's' },
{ label: 'Miss %', data: danMiss, backgroundColor: C.miss +'cc', stack: 's' },
]
},
options: {
plugins: { legend: { labels: { color: C.text } },
tooltip: { callbacks: { title: items => danLabels[items[0].dataIndex] } }
},
scales: {
x: { stacked:true, grid:{color:C.border}, ticks:{font:{size:18}} },
y: { stacked:true, max:100, title:{display:true, text:'%', color:C.muted}, grid:{color:C.border} }
}
}
});
// ── Per-dan bias/MAE ─────────────────────────────────────────────────────────
new Chart(document.getElementById('dan-bias'), {
type: 'bar',
data: {
labels: danLabels.map(d => DAN_NAME_TO_SYM[d] || d),
datasets: [
{ label: 'MAE', data: danMae, backgroundColor: C.accent+'aa', borderRadius: 3 },
{ label: 'Bias', data: danBias, backgroundColor: danBias.map(b => b >= 0 ? C.exact+'aa' : C.miss+'aa'), borderRadius: 3 },
]
},
options: {
plugins: { legend: { labels: { color: C.text } } },
scales: {
x: { grid:{color:C.border}, ticks:{font:{size:18}} },
y: { title:{display:true, text:'Δ numeric', color:C.muted}, grid:{color:C.border} }
}
}
});
// ── Per-skillset stacked bar ──────────────────────────────────────────────────
new Chart(document.getElementById('sk-bar'), {
type: 'bar',
data: {
labels: skLabels.map((s,i) => `${s.charAt(0).toUpperCase()+s.slice(1)} (n=${skN[i]})`),
datasets: [
{ label: 'Exact %', data: skExact, backgroundColor: C.exact +'cc', stack: 's' },
{ label: 'Adjacent %', data: skAdjacent, backgroundColor: C.adjacent+'cc', stack: 's' },
{ label: 'Within %', data: skWithin, backgroundColor: C.within +'cc', stack: 's' },
{ label: 'Miss %', data: skMiss, backgroundColor: C.miss +'cc', stack: 's' },
]
},
options: {
plugins: { legend: { labels: { color: C.text } } },
scales: {
x: { stacked:true, grid:{color:C.border} },
y: { stacked:true, max:100, title:{display:true, text:'%', color:C.muted}, grid:{color:C.border} }
}
}
});
// ── Per-skillset bias/MAE ─────────────────────────────────────────────────────
new Chart(document.getElementById('sk-bias'), {
type: 'bar',
data: {
labels: skLabels.map(s => s.charAt(0).toUpperCase()+s.slice(1)),
datasets: [
{ label: 'MAE', data: skMae, backgroundColor: C.accent+'aa', borderRadius: 3 },
{ label: 'Bias', data: skBias, backgroundColor: skBias.map(b => b >= 0 ? C.miss+'aa' : C.exact+'aa'), borderRadius: 3 },
]
},
options: {
plugins: { legend: { labels: { color: C.text } } },
scales: {
x: { grid:{color:C.border} },
y: { title:{display:true, text:'Δ numeric', color:C.muted}, grid:{color:C.border} }
}
}
});
// ── Per-skillset scatter plots ────────────────────────────────────────────────
makeScatterChart('scatter-jack', 'jack');
makeScatterChart('scatter-tech', 'tech');
makeScatterChart('scatter-speed', 'speed');
makeScatterChart('scatter-stamina', 'stamina');
// ── Table filter / sort ───────────────────────────────────────────────────────
function filterTable() {
const search = document.getElementById('search').value.toLowerCase();
const flag = document.getElementById('flag-filter').value;
const dan = document.getElementById('dan-filter').value;
const sk = document.getElementById('sk-filter').value;
const rows = document.querySelectorAll('#results-body tr');
let visible = 0;
rows.forEach(row => {
const cells = row.querySelectorAll('td');
const song = cells[0]?.textContent.toLowerCase() || '';
const expCell = cells[1]?.textContent.toLowerCase() || '';
const gotCell = cells[2]?.textContent.toLowerCase() || '';
const skCell = cells[3]?.textContent.toLowerCase() || '';
const flagVal = row.className.replace('row-', '').trim();
const matchS = !search || song.includes(search) || expCell.includes(search) || gotCell.includes(search);
const matchF = !flag || flagVal === flag;
const matchD = !dan || expCell.startsWith(dan.toLowerCase());
const matchSk = !sk || skCell === sk.toLowerCase();
const show = matchS && matchF && matchD && matchSk;
row.style.display = show ? '' : 'none';
if (show) visible++;
});
document.getElementById('filter-count').textContent = `${visible} shown`;
}
function clearFilters() {
document.getElementById('search').value = '';
document.getElementById('flag-filter').value = '';
document.getElementById('dan-filter').value = '';
document.getElementById('sk-filter').value = '';
filterTable();
}
let sortDir = {};
const DAN_SORT_ORDER = {
'alpha low':0,'alpha low/mid':1,'alpha mid':2,'alpha mid/high':3,'alpha high':4,
'beta low':5,'beta low/mid':6,'beta mid':7,'beta mid/high':8,'beta high':9,
'gamma low':10,'gamma low/mid':11,'gamma mid':12,'gamma mid/high':13,'gamma high':14,
'delta low':15,'delta low/mid':16,'delta mid':17,'delta mid/high':18,'delta high':19,
'epsilon low':20,'epsilon low/mid':21,'epsilon mid':22,'epsilon mid/high':23,'epsilon high':24,
'zeta low':25,'zeta low/mid':26,'zeta mid':27,'zeta mid/high':28,'zeta high':29,
'eta low':30,'eta low/mid':31,'eta mid':32,'eta mid/high':33,'eta high':34,
'theta low':35,'theta low/mid':36,'theta mid':37,'theta mid/high':38,'theta high':39
};
function danSortVal(s) {
const v = DAN_SORT_ORDER[s.toLowerCase()];
return v !== undefined ? v : 999;
}
function sortTable(col) {
const tbody = document.getElementById('results-body');
const rows = Array.from(tbody.querySelectorAll('tr'));
sortDir[col] = !sortDir[col];
// columns 1 (Expected) and 2 (Got) are dan labels
const isDanCol = (col === 1 || col === 2);
rows.sort((a, b) => {
const av = a.querySelectorAll('td')[col]?.textContent.trim() || '';
const bv = b.querySelectorAll('td')[col]?.textContent.trim() || '';
let cmp;
if (isDanCol) {
cmp = danSortVal(av) - danSortVal(bv);
} else {
const an = parseFloat(av), bn = parseFloat(bv);
cmp = isNaN(an) || isNaN(bn) ? av.localeCompare(bv) : an - bn;
}
return sortDir[col] ? cmp : -cmp;
});
rows.forEach(r => tbody.appendChild(r));
}
</script>
</body>
</html>