liukqchoco04 commited on
Commit
66d9b20
·
verified ·
1 Parent(s): 2837c05

Upload 5 files

Browse files
Files changed (5) hide show
  1. README.md +9 -5
  2. app.js +479 -0
  3. data.json +634 -0
  4. index.html +317 -17
  5. styles.css +1987 -0
README.md CHANGED
@@ -1,12 +1,16 @@
1
  ---
2
- title: Leaderboard
3
- emoji: 🏆
4
- colorFrom: green
5
- colorTo: red
6
  sdk: static
7
  pinned: false
8
  license: mit
9
  short_description: Official StreamAV-Bench leaderboard.
10
  ---
11
 
12
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
1
  ---
2
+ title: StreamAV-Bench Leaderboard
3
+ emoji: 📡
4
+ colorFrom: blue
5
+ colorTo: green
6
  sdk: static
7
  pinned: false
8
  license: mit
9
  short_description: Official StreamAV-Bench leaderboard.
10
  ---
11
 
12
+ # StreamAV-Bench Leaderboard
13
+
14
+ Official metric-wise leaderboard for **StreamAV-Bench: A Comprehensive Benchmark for Streaming Audio-Video Generation**.
15
+
16
+ The page is a static Hugging Face Space. Published results and metric metadata are maintained in `data.json`. The primary explorer preserves the paper's 32 core metrics, while four adjusted sensitivity diagnostics are presented in a separate view.
app.js ADDED
@@ -0,0 +1,479 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ const state = {
2
+ data: null,
3
+ track: "shared",
4
+ category: "quality",
5
+ sortMetric: "va",
6
+ sortDirection: "desc",
7
+ query: "",
8
+ paradigm: "all",
9
+ access: "all"
10
+ };
11
+
12
+ const elements = {
13
+ trackTabs: document.querySelector("#track-tabs"),
14
+ trackDescription: document.querySelector("#track-description"),
15
+ categoryTabs: document.querySelector("#category-tabs"),
16
+ categoryTitle: document.querySelector("#category-title"),
17
+ categoryDescription: document.querySelector("#category-description"),
18
+ tablePanel: document.querySelector(".table-panel"),
19
+ tableKicker: document.querySelector("#table-kicker"),
20
+ rankingLabel: document.querySelector("#ranking-label"),
21
+ table: document.querySelector("#leaderboard-table"),
22
+ tableStatus: document.querySelector("#table-status"),
23
+ contextCopy: document.querySelector("#context-copy"),
24
+ search: document.querySelector("#model-search"),
25
+ metricSelect: document.querySelector("#metric-select"),
26
+ paradigm: document.querySelector("#paradigm-filter"),
27
+ access: document.querySelector("#access-filter"),
28
+ reset: document.querySelector("#reset-filters"),
29
+ download: document.querySelector("#download-csv"),
30
+ metricGuide: document.querySelector("#metric-guide"),
31
+ error: document.querySelector("#data-error")
32
+ };
33
+
34
+ const directionFor = (metric) => metric.direction === "higher" ? "desc" : "asc";
35
+
36
+ const escapeHtml = (value) => String(value)
37
+ .replaceAll("&", "&")
38
+ .replaceAll("<", "&lt;")
39
+ .replaceAll(">", "&gt;")
40
+ .replaceAll('"', "&quot;")
41
+ .replaceAll("'", "&#039;");
42
+
43
+ function formatScore(value) {
44
+ if (value === null || value === undefined) return "—";
45
+ return Number(value).toFixed(state.data.meta.publishedPrecision);
46
+ }
47
+
48
+ function currentCategory() {
49
+ return state.data.categories.find((category) => category.id === state.category);
50
+ }
51
+
52
+ function currentMetric() {
53
+ return state.data.metrics[state.sortMetric];
54
+ }
55
+
56
+ function applyLink(id, url, readyLabel, pendingLabel) {
57
+ const link = document.querySelector(`#${id}`);
58
+ if (!link) return;
59
+
60
+ if (url) {
61
+ link.href = url;
62
+ link.target = "_blank";
63
+ link.rel = "noopener noreferrer";
64
+ link.classList.remove("is-disabled");
65
+ link.removeAttribute("aria-disabled");
66
+ const status = link.querySelector("[data-link-status]");
67
+ if (status) status.textContent = readyLabel;
68
+ } else {
69
+ link.removeAttribute("href");
70
+ link.classList.add("is-disabled");
71
+ link.setAttribute("aria-disabled", "true");
72
+ const status = link.querySelector("[data-link-status]");
73
+ if (status) status.textContent = pendingLabel;
74
+ }
75
+ }
76
+
77
+ function renderMeta() {
78
+ const { meta } = state.data;
79
+ document.title = meta.title;
80
+ document.querySelector("#hero-tagline").textContent = meta.tagline;
81
+ document.querySelector("#hero-description").textContent = meta.description;
82
+ document.querySelector("#release-label").textContent = meta.release;
83
+ document.querySelector("#stat-systems").textContent = meta.systemCount;
84
+ document.querySelector("#stat-metrics").textContent = meta.metricCount;
85
+ document.querySelector("#stat-scenarios").textContent = meta.scenarioCount;
86
+ document.querySelector("#stat-duration").textContent = `${meta.durationSeconds}s`;
87
+
88
+ applyLink("project-link", meta.links.project, "Project page", "Coming soon");
89
+ applyLink("code-link", meta.links.code, "Code repository", "Coming soon");
90
+ applyLink("paper-link", meta.links.paper, "Read paper", "Paper coming soon");
91
+ applyLink("dataset-link", meta.links.dataset, "Open dataset", "Dataset coming soon");
92
+
93
+ const submitLink = document.querySelector("#submission-link");
94
+ if (meta.links.submission) {
95
+ submitLink.href = meta.links.submission;
96
+ submitLink.target = "_blank";
97
+ submitLink.rel = "noopener noreferrer";
98
+ submitLink.classList.remove("is-disabled");
99
+ submitLink.removeAttribute("aria-disabled");
100
+ submitLink.querySelector("span").textContent = "Open submission form";
101
+ } else {
102
+ submitLink.removeAttribute("href");
103
+ submitLink.classList.add("is-disabled");
104
+ submitLink.setAttribute("aria-disabled", "true");
105
+ submitLink.querySelector("span").textContent = "Submission form coming soon";
106
+ }
107
+ }
108
+
109
+ function renderTrackTabs() {
110
+ elements.trackTabs.innerHTML = state.data.tracks.map((track) => {
111
+ const active = track.id === state.track;
112
+ return `
113
+ <button
114
+ class="track-tab ${active ? "is-active" : ""}"
115
+ type="button"
116
+ role="tab"
117
+ aria-selected="${active}"
118
+ data-track="${escapeHtml(track.id)}"
119
+ >
120
+ <span>${escapeHtml(track.label)}</span>
121
+ <b>${escapeHtml(track.badge || track.count)}</b>
122
+ </button>
123
+ `;
124
+ }).join("");
125
+
126
+ const activeTrack = state.data.tracks.find((track) => track.id === state.track);
127
+ elements.trackDescription.textContent = activeTrack.description;
128
+
129
+ elements.trackTabs.querySelectorAll("[data-track]").forEach((button) => {
130
+ button.addEventListener("click", () => {
131
+ state.track = button.dataset.track;
132
+ const firstCategory = state.data.categories.find((category) => category.track === state.track);
133
+ state.category = firstCategory.id;
134
+ state.sortMetric = firstCategory.defaultMetric;
135
+ state.sortDirection = directionFor(state.data.metrics[state.sortMetric]);
136
+ render();
137
+ });
138
+ });
139
+ }
140
+
141
+ function renderCategoryTabs() {
142
+ const categories = state.data.categories.filter((category) => category.track === state.track);
143
+ elements.categoryTabs.innerHTML = categories.map((category) => {
144
+ const active = category.id === state.category;
145
+ return `
146
+ <button
147
+ class="category-tab ${active ? "is-active" : ""}"
148
+ type="button"
149
+ aria-pressed="${active}"
150
+ data-category="${escapeHtml(category.id)}"
151
+ >
152
+ ${escapeHtml(category.label)}
153
+ </button>
154
+ `;
155
+ }).join("");
156
+
157
+ elements.categoryTabs.querySelectorAll("[data-category]").forEach((button) => {
158
+ button.addEventListener("click", () => {
159
+ const category = state.data.categories.find((item) => item.id === button.dataset.category);
160
+ state.category = category.id;
161
+ state.sortMetric = category.defaultMetric;
162
+ state.sortDirection = directionFor(state.data.metrics[state.sortMetric]);
163
+ render();
164
+ });
165
+ });
166
+ }
167
+
168
+ function renderMetricSelect() {
169
+ const category = currentCategory();
170
+ elements.metricSelect.innerHTML = category.metrics.map((metricKey) => {
171
+ const metric = state.data.metrics[metricKey];
172
+ const direction = metric.direction === "higher" ? "↑" : "↓";
173
+ return `<option value="${escapeHtml(metricKey)}">${escapeHtml(metric.abbr)} ${direction} · ${escapeHtml(metric.name)}</option>`;
174
+ }).join("");
175
+ elements.metricSelect.value = state.sortMetric;
176
+ }
177
+
178
+ function compareScores(a, b, metricKey, direction) {
179
+ const aValue = a.scores[metricKey];
180
+ const bValue = b.scores[metricKey];
181
+
182
+ if (aValue === null && bValue === null) return a.name.localeCompare(b.name);
183
+ if (aValue === null) return 1;
184
+ if (bValue === null) return -1;
185
+
186
+ const difference = direction === "desc" ? bValue - aValue : aValue - bValue;
187
+ return difference || a.name.localeCompare(b.name);
188
+ }
189
+
190
+ function buildRankMap(metricKey) {
191
+ const metric = state.data.metrics[metricKey];
192
+ const sortedValues = state.data.models
193
+ .map((model) => model.scores[metricKey])
194
+ .filter((value) => value !== null)
195
+ .sort((a, b) => metric.direction === "higher" ? b - a : a - b);
196
+
197
+ const ranks = new Map();
198
+ sortedValues.forEach((value, index) => {
199
+ if (!ranks.has(value)) ranks.set(value, index + 1);
200
+ });
201
+ return ranks;
202
+ }
203
+
204
+ function filteredModels() {
205
+ const query = state.query.trim().toLocaleLowerCase();
206
+ return state.data.models
207
+ .filter((model) => !query || model.name.toLocaleLowerCase().includes(query))
208
+ .filter((model) => state.paradigm === "all" || model.paradigm === state.paradigm)
209
+ .filter((model) => state.access === "all" || model.access === state.access)
210
+ .sort((a, b) => compareScores(a, b, state.sortMetric, state.sortDirection));
211
+ }
212
+
213
+ function renderTable() {
214
+ const category = currentCategory();
215
+ const metric = currentMetric();
216
+ const models = filteredModels();
217
+ const rankMap = buildRankMap(state.sortMetric);
218
+ const arrow = state.sortDirection === "desc" ? "↓" : "↑";
219
+ const preferredDirection = metric.direction === "higher" ? "Higher is better" : "Lower is better";
220
+ const isDiagnostics = state.track === "diagnostics";
221
+
222
+ elements.tablePanel.classList.toggle("is-diagnostics", isDiagnostics);
223
+ elements.tableKicker.textContent = isDiagnostics ? "Adjusted sensitivity analysis" : "Metric-wise ranking";
224
+ elements.categoryTitle.textContent = category.label;
225
+ elements.categoryDescription.textContent = category.description;
226
+ elements.rankingLabel.innerHTML = `
227
+ Ranked by <strong>${escapeHtml(metric.name)}</strong>
228
+ <span>${preferredDirection}</span>
229
+ `;
230
+ elements.contextCopy.innerHTML = isDiagnostics
231
+ ? `
232
+ <p><strong>Diagnostic status.</strong> These four adjusted diagnostics are reported separately from the 32 core metrics. They complement—rather than replace—PVRL, PARL, and HDF, and they are not combined into an overall score.</p>
233
+ <p>SA-PVRL and SA-PARL assign the 30-second cap to unachieved targets. CA-HDF-A and CA-HDF-L normalize conditional HDF to [0,1] and assign zero when the required source state was not established.</p>
234
+ `
235
+ : `
236
+ <p><strong>Reading the ranks.</strong> Click any metric header to rank by that metric. Published three-decimal ties use competition ranking (for example, 1, 1, 3). PVRL and PARL are conditional on successful target achievement and should be read with PVUAR and PAUAR.</p>
237
+ <p>HDF is evaluated only when its required source state was established. NBC, FPS, and TTFC are unavailable for PixVerse R1, HappyOyster, and Odyssey-2 because their web interfaces do not expose the required traces.</p>
238
+ `;
239
+
240
+ const metricHeaders = category.metrics.map((metricKey) => {
241
+ const item = state.data.metrics[metricKey];
242
+ const active = metricKey === state.sortMetric;
243
+ const ariaSort = active
244
+ ? (state.sortDirection === "desc" ? "descending" : "ascending")
245
+ : "none";
246
+ return `
247
+ <th scope="col" aria-sort="${ariaSort}" class="metric-column ${active ? "is-sorted" : ""}">
248
+ <button type="button" data-sort="${escapeHtml(metricKey)}" title="Sort by ${escapeHtml(item.name)}">
249
+ <span>${escapeHtml(item.abbr)}</span>
250
+ <i aria-hidden="true">${active ? arrow : "↕"}</i>
251
+ <small>${item.direction === "higher" ? "higher" : "lower"}</small>
252
+ </button>
253
+ </th>
254
+ `;
255
+ }).join("");
256
+
257
+ const rows = models.map((model) => {
258
+ const sortedValue = model.scores[state.sortMetric];
259
+ const rank = sortedValue === null ? null : rankMap.get(sortedValue);
260
+ const rankClass = rank !== null && rank <= 3 ? ` rank-${rank}` : "";
261
+ const cells = category.metrics.map((metricKey) => {
262
+ const value = model.scores[metricKey];
263
+ const metricRankMap = buildMetricRankMap(metricKey);
264
+ const cellRank = value === null ? null : metricRankMap.get(value);
265
+ const rankClass = cellRank === 1 ? "is-best" : cellRank === 2 ? "is-runner-up" : "";
266
+ const sortedClass = metricKey === state.sortMetric ? "is-sorted" : "";
267
+ const metricInfo = state.data.metrics[metricKey];
268
+ const unit = value !== null && metricInfo.unit ? ` ${metricInfo.unit}` : "";
269
+ const unavailableReason = value === null
270
+ ? "Unavailable because the official web interface does not expose model-native boundaries or reliable generation-time traces."
271
+ : "";
272
+ return `
273
+ <td
274
+ class="score-cell ${rankClass} ${sortedClass}"
275
+ data-label="${escapeHtml(metricInfo.abbr)}"
276
+ ${unavailableReason ? `title="${escapeHtml(unavailableReason)}"` : ""}
277
+ >
278
+ ${value === null
279
+ ? `<span aria-hidden="true">—</span><span class="sr-only">${escapeHtml(unavailableReason)}</span>`
280
+ : `<span>${formatScore(value)}</span>${unit ? `<small>${escapeHtml(unit.trim())}</small>` : ""}`
281
+ }
282
+ </td>
283
+ `;
284
+ }).join("");
285
+
286
+ return `
287
+ <tr>
288
+ <td class="rank-cell" data-label="Rank">
289
+ ${rank === null ? "—" : `<span class="rank-badge${rankClass}">${rank}</span>`}
290
+ </td>
291
+ <th scope="row" class="model-cell">
292
+ <a href="${escapeHtml(model.reference)}" target="_blank" rel="noopener noreferrer">
293
+ <span>${escapeHtml(model.name)}</span><i aria-hidden="true">↗</i>
294
+ </a>
295
+ <small>${model.paradigm === "Cascaded" ? "with HunyuanVideo-Foley" : "native audio-video"}</small>
296
+ </th>
297
+ <td class="meta-cell" data-label="Paradigm">
298
+ <span class="tag tag-${model.paradigm === "Native joint" ? "native" : "cascaded"}">${escapeHtml(model.paradigm)}</span>
299
+ </td>
300
+ <td class="meta-cell" data-label="Access">
301
+ <span class="access-dot access-${model.access.toLowerCase()}"></span>${escapeHtml(model.access)}
302
+ </td>
303
+ ${cells}
304
+ </tr>
305
+ `;
306
+ }).join("");
307
+
308
+ elements.table.innerHTML = `
309
+ <thead>
310
+ <tr>
311
+ <th scope="col" class="rank-heading">#</th>
312
+ <th scope="col" class="model-heading">System</th>
313
+ <th scope="col">Paradigm</th>
314
+ <th scope="col">Access</th>
315
+ ${metricHeaders}
316
+ </tr>
317
+ </thead>
318
+ <tbody>
319
+ ${rows || `
320
+ <tr>
321
+ <td class="empty-row" colspan="${4 + category.metrics.length}">
322
+ No systems match the current filters.
323
+ </td>
324
+ </tr>
325
+ `}
326
+ </tbody>
327
+ `;
328
+
329
+ elements.tableStatus.textContent = `${models.length} of ${state.data.models.length} systems · global ranks use published three-decimal scores`;
330
+
331
+ elements.table.querySelectorAll("[data-sort]").forEach((button) => {
332
+ button.addEventListener("click", () => {
333
+ const metricKey = button.dataset.sort;
334
+ if (state.sortMetric === metricKey) {
335
+ state.sortDirection = state.sortDirection === "desc" ? "asc" : "desc";
336
+ } else {
337
+ state.sortMetric = metricKey;
338
+ state.sortDirection = directionFor(state.data.metrics[metricKey]);
339
+ }
340
+ elements.metricSelect.value = state.sortMetric;
341
+ renderTable();
342
+ renderMetricGuide();
343
+ });
344
+ });
345
+ }
346
+
347
+ function buildMetricRankMap(metricKey) {
348
+ const item = state.data.metrics[metricKey];
349
+ const values = state.data.models
350
+ .map((model) => model.scores[metricKey])
351
+ .filter((value) => value !== null)
352
+ .sort((a, b) => item.direction === "higher" ? b - a : a - b);
353
+ return new Map([...new Set(values)].map((value, index) => [value, index + 1]));
354
+ }
355
+
356
+ function renderMetricGuide() {
357
+ const category = currentCategory();
358
+ elements.metricGuide.innerHTML = category.metrics.map((metricKey) => {
359
+ const metric = state.data.metrics[metricKey];
360
+ const active = metricKey === state.sortMetric;
361
+ return `
362
+ <article class="metric-card ${active ? "is-active" : ""}">
363
+ <button type="button" data-metric-card="${escapeHtml(metricKey)}" aria-label="Rank by ${escapeHtml(metric.name)}">
364
+ <span class="metric-abbr">${escapeHtml(metric.abbr)}</span>
365
+ <span class="direction direction-${metric.direction}">
366
+ ${metric.direction === "higher" ? "↑ Higher" : "↓ Lower"}
367
+ </span>
368
+ </button>
369
+ <h3>${escapeHtml(metric.name)}</h3>
370
+ <p>${escapeHtml(metric.description)}</p>
371
+ <dl>
372
+ <div><dt>Scale</dt><dd>${escapeHtml(metric.range)}${metric.unit ? ` · ${escapeHtml(metric.unit)}` : ""}</dd></div>
373
+ <div><dt>Evaluator</dt><dd>${escapeHtml(metric.evaluator)}</dd></div>
374
+ </dl>
375
+ </article>
376
+ `;
377
+ }).join("");
378
+
379
+ elements.metricGuide.querySelectorAll("[data-metric-card]").forEach((button) => {
380
+ button.addEventListener("click", () => {
381
+ state.sortMetric = button.dataset.metricCard;
382
+ state.sortDirection = directionFor(state.data.metrics[state.sortMetric]);
383
+ elements.metricSelect.value = state.sortMetric;
384
+ renderTable();
385
+ renderMetricGuide();
386
+ document.querySelector("#leaderboard").scrollIntoView({ behavior: "smooth", block: "start" });
387
+ });
388
+ });
389
+ }
390
+
391
+ function csvCell(value) {
392
+ const stringValue = value === null || value === undefined ? "" : String(value);
393
+ return `"${stringValue.replaceAll('"', '""')}"`;
394
+ }
395
+
396
+ function downloadCurrentView() {
397
+ const category = currentCategory();
398
+ const models = filteredModels();
399
+ const headers = ["System", "Paradigm", "Access", ...category.metrics.map((key) => state.data.metrics[key].abbr)];
400
+ const lines = [
401
+ headers.map(csvCell).join(","),
402
+ ...models.map((model) => [
403
+ model.name,
404
+ model.paradigm,
405
+ model.access,
406
+ ...category.metrics.map((key) => model.scores[key])
407
+ ].map(csvCell).join(","))
408
+ ];
409
+
410
+ const blob = new Blob([`\uFEFF${lines.join("\n")}`], { type: "text/csv;charset=utf-8" });
411
+ const url = URL.createObjectURL(blob);
412
+ const anchor = document.createElement("a");
413
+ anchor.href = url;
414
+ anchor.download = `streamav-bench-${category.id}.csv`;
415
+ document.body.appendChild(anchor);
416
+ anchor.click();
417
+ anchor.remove();
418
+ URL.revokeObjectURL(url);
419
+ }
420
+
421
+ function resetFilters() {
422
+ state.query = "";
423
+ state.paradigm = "all";
424
+ state.access = "all";
425
+ elements.search.value = "";
426
+ elements.paradigm.value = "all";
427
+ elements.access.value = "all";
428
+ renderTable();
429
+ }
430
+
431
+ function bindControls() {
432
+ elements.search.addEventListener("input", (event) => {
433
+ state.query = event.target.value;
434
+ renderTable();
435
+ });
436
+ elements.metricSelect.addEventListener("change", (event) => {
437
+ state.sortMetric = event.target.value;
438
+ state.sortDirection = directionFor(state.data.metrics[state.sortMetric]);
439
+ renderTable();
440
+ renderMetricGuide();
441
+ });
442
+ elements.paradigm.addEventListener("change", (event) => {
443
+ state.paradigm = event.target.value;
444
+ renderTable();
445
+ });
446
+ elements.access.addEventListener("change", (event) => {
447
+ state.access = event.target.value;
448
+ renderTable();
449
+ });
450
+ elements.reset.addEventListener("click", resetFilters);
451
+ elements.download.addEventListener("click", downloadCurrentView);
452
+ }
453
+
454
+ function render() {
455
+ renderTrackTabs();
456
+ renderCategoryTabs();
457
+ renderMetricSelect();
458
+ renderTable();
459
+ renderMetricGuide();
460
+ }
461
+
462
+ async function init() {
463
+ try {
464
+ const response = await fetch("./data.json", { cache: "no-store" });
465
+ if (!response.ok) throw new Error(`Data request failed with status ${response.status}`);
466
+ state.data = await response.json();
467
+ state.sortDirection = directionFor(state.data.metrics[state.sortMetric]);
468
+ renderMeta();
469
+ bindControls();
470
+ render();
471
+ document.documentElement.classList.add("is-ready");
472
+ } catch (error) {
473
+ console.error(error);
474
+ elements.error.hidden = false;
475
+ elements.error.querySelector("p").textContent = "The leaderboard data could not be loaded. Please refresh the page or try again later.";
476
+ }
477
+ }
478
+
479
+ init();
data.json ADDED
@@ -0,0 +1,634 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "meta": {
3
+ "title": "StreamAV-Bench Leaderboard",
4
+ "tagline": "Streaming systems, evaluated while they run.",
5
+ "description": "Official metric-wise results for streaming audio-video generation across progressive and interactive evaluation tracks.",
6
+ "release": "Initial benchmark release",
7
+ "systemCount": 13,
8
+ "metricCount": 32,
9
+ "scenarioCount": 320,
10
+ "durationSeconds": 180,
11
+ "publishedPrecision": 3,
12
+ "links": {
13
+ "project": "https://liukqchoco.github.io/StreamAVBench/",
14
+ "code": "https://github.com/liukqchoco/StreamAVBench-Code",
15
+ "paper": "",
16
+ "dataset": "",
17
+ "submission": ""
18
+ }
19
+ },
20
+ "tracks": [
21
+ {
22
+ "id": "shared",
23
+ "label": "Shared",
24
+ "count": 9,
25
+ "description": "Quality, alignment, continuity, and efficiency metrics applied across both tracks."
26
+ },
27
+ {
28
+ "id": "progressive",
29
+ "label": "Progressive",
30
+ "count": 12,
31
+ "description": "Instruction adherence and long-horizon stability under one global prompt."
32
+ },
33
+ {
34
+ "id": "interactive",
35
+ "label": "Interactive",
36
+ "count": 11,
37
+ "description": "Runtime-update response, state retention, and reuse under prompt updates."
38
+ },
39
+ {
40
+ "id": "diagnostics",
41
+ "label": "Diagnostics",
42
+ "count": 4,
43
+ "description": "Success- and coverage-adjusted diagnostics that jointly account for update success and source-state coverage."
44
+ }
45
+ ],
46
+ "categories": [
47
+ {
48
+ "id": "quality",
49
+ "track": "shared",
50
+ "label": "Quality & Alignment",
51
+ "shortLabel": "Quality",
52
+ "description": "Perceptual quality and semantic or temporal correspondence between audio and video.",
53
+ "defaultMetric": "va",
54
+ "metrics": ["va", "vq", "pq", "aq", "avalign", "avsync"]
55
+ },
56
+ {
57
+ "id": "streaming",
58
+ "track": "shared",
59
+ "label": "Continuity & Efficiency",
60
+ "shortLabel": "Streaming",
61
+ "description": "Technical continuity at native generation boundaries, throughput, and startup latency.",
62
+ "defaultMetric": "nbc",
63
+ "metrics": ["nbc", "fps", "ttfc"]
64
+ },
65
+ {
66
+ "id": "adherence",
67
+ "track": "progressive",
68
+ "label": "Instruction Adherence",
69
+ "shortLabel": "Adherence",
70
+ "description": "Full-rollout fulfillment and endpoint drift for fixed visual and audio requirements.",
71
+ "defaultMetric": "vif",
72
+ "metrics": ["vif", "aif", "vid", "aid"]
73
+ },
74
+ {
75
+ "id": "stability",
76
+ "track": "progressive",
77
+ "label": "Long-Horizon Stability",
78
+ "shortLabel": "Stability",
79
+ "description": "Quality drift, visual consistency, and audio-video drift over the 180-second rollout.",
80
+ "defaultMetric": "va_d",
81
+ "metrics": ["va_d", "vq_d", "pq_d", "aq_d", "sc", "bc", "avalign_d", "avsync_d"]
82
+ },
83
+ {
84
+ "id": "response",
85
+ "track": "interactive",
86
+ "label": "Interactive Response",
87
+ "shortLabel": "Response",
88
+ "description": "Update fulfillment, transition continuity, achievement rate, and successful-response latency.",
89
+ "defaultMetric": "vuf",
90
+ "metrics": ["vuf", "auf", "pvc", "pac", "pvuar", "pauar", "pvrl", "parl"]
91
+ },
92
+ {
93
+ "id": "state",
94
+ "track": "interactive",
95
+ "label": "State Retention & Reuse",
96
+ "shortLabel": "State",
97
+ "description": "Preservation of untargeted states and correct reuse of information established earlier.",
98
+ "defaultMetric": "vsr",
99
+ "metrics": ["vsr", "asr", "hdf"]
100
+ },
101
+ {
102
+ "id": "adjusted",
103
+ "track": "diagnostics",
104
+ "label": "Success & Coverage Adjustments",
105
+ "shortLabel": "Adjusted",
106
+ "description": "Adjusted diagnostics that penalize unachieved updates and unestablished dependency sources; these are reported separately from the 32 core metrics.",
107
+ "defaultMetric": "sa_pvrl",
108
+ "metrics": ["sa_pvrl", "sa_parl", "ca_hdf_a", "ca_hdf_l"]
109
+ }
110
+ ],
111
+ "metrics": {
112
+ "va": {
113
+ "abbr": "VA",
114
+ "name": "Visual Aesthetics",
115
+ "direction": "higher",
116
+ "range": "[0, 1]",
117
+ "unit": "",
118
+ "evaluator": "LAION Aesthetic Predictor",
119
+ "description": "Perceptual visual appeal, averaged over six 30-second intervals."
120
+ },
121
+ "vq": {
122
+ "abbr": "VQ",
123
+ "name": "Visual Quality",
124
+ "direction": "higher",
125
+ "range": "1–5",
126
+ "unit": "",
127
+ "evaluator": "Gemini 3.1 Pro",
128
+ "description": "Visual fidelity, subject integrity, motion naturalness, and artifact control."
129
+ },
130
+ "pq": {
131
+ "abbr": "PQ",
132
+ "name": "Production Quality",
133
+ "direction": "higher",
134
+ "range": "Original evaluator scale",
135
+ "unit": "",
136
+ "evaluator": "Audiobox Aesthetics",
137
+ "description": "Perceptual and production fidelity of the generated audio."
138
+ },
139
+ "aq": {
140
+ "abbr": "AQ",
141
+ "name": "Audio Quality",
142
+ "direction": "higher",
143
+ "range": "1–5",
144
+ "unit": "",
145
+ "evaluator": "Gemini 3.1 Pro",
146
+ "description": "Audio naturalness and artifact control."
147
+ },
148
+ "avalign": {
149
+ "abbr": "AVAlign",
150
+ "name": "Audio-Video Alignment",
151
+ "direction": "higher",
152
+ "range": "Cosine similarity",
153
+ "unit": "",
154
+ "evaluator": "ImageBind",
155
+ "description": "Semantic correspondence between generated audio and visual content."
156
+ },
157
+ "avsync": {
158
+ "abbr": "AVSync",
159
+ "name": "Audio-Video Synchronization",
160
+ "direction": "lower",
161
+ "range": "≥ 0",
162
+ "unit": "s",
163
+ "evaluator": "Synchformer",
164
+ "description": "Absolute predicted temporal offset between audio and video."
165
+ },
166
+ "nbc": {
167
+ "abbr": "NBC",
168
+ "name": "Native Boundary Continuity",
169
+ "direction": "higher",
170
+ "range": "[0, 100]",
171
+ "unit": "",
172
+ "evaluator": "Deterministic artifact detector",
173
+ "description": "Continuity at model-native generation-unit boundaries, accounting for black frames, repetition, freezing, and flashes."
174
+ },
175
+ "fps": {
176
+ "abbr": "FPS",
177
+ "name": "Frames per Second",
178
+ "direction": "higher",
179
+ "range": "≥ 0",
180
+ "unit": "fps",
181
+ "evaluator": "Runtime measurement",
182
+ "description": "Generated video frames per unit generation time under the default recommended configuration."
183
+ },
184
+ "ttfc": {
185
+ "abbr": "TTFC",
186
+ "name": "Time to First Chunk",
187
+ "direction": "lower",
188
+ "range": "≥ 0",
189
+ "unit": "s",
190
+ "evaluator": "Runtime measurement",
191
+ "description": "Elapsed time from receiving a generation request to producing the first output chunk."
192
+ },
193
+ "vif": {
194
+ "abbr": "VIF",
195
+ "name": "Video Instruction Fulfillment",
196
+ "direction": "higher",
197
+ "range": "1–5",
198
+ "unit": "",
199
+ "evaluator": "Gemini 3.1 Pro + case checklist",
200
+ "description": "Completeness of visual requirements over the full progressive output."
201
+ },
202
+ "aif": {
203
+ "abbr": "AIF",
204
+ "name": "Audio Instruction Fulfillment",
205
+ "direction": "higher",
206
+ "range": "1–5",
207
+ "unit": "",
208
+ "evaluator": "Gemini 3.1 Pro + case checklist",
209
+ "description": "Completeness of audio requirements over the full progressive output."
210
+ },
211
+ "vid": {
212
+ "abbr": "VID",
213
+ "name": "Video Instruction Drift",
214
+ "direction": "lower",
215
+ "range": "[0, 4]",
216
+ "unit": "",
217
+ "evaluator": "Gemini 3.1 Pro + case checklist",
218
+ "description": "Absolute change in visual instruction adherence between the first and last intervals."
219
+ },
220
+ "aid": {
221
+ "abbr": "AID",
222
+ "name": "Audio Instruction Drift",
223
+ "direction": "lower",
224
+ "range": "[0, 4]",
225
+ "unit": "",
226
+ "evaluator": "Gemini 3.1 Pro + case checklist",
227
+ "description": "Absolute change in audio instruction adherence between the first and last intervals."
228
+ },
229
+ "va_d": {
230
+ "abbr": "VA-D",
231
+ "name": "Visual Aesthetics Drift",
232
+ "direction": "lower",
233
+ "range": "VA units",
234
+ "unit": "",
235
+ "evaluator": "LAION Aesthetic Predictor",
236
+ "description": "Absolute change in visual aesthetics between the first and last intervals."
237
+ },
238
+ "vq_d": {
239
+ "abbr": "VQ-D",
240
+ "name": "Visual Quality Drift",
241
+ "direction": "lower",
242
+ "range": "VQ units",
243
+ "unit": "",
244
+ "evaluator": "Gemini 3.1 Pro",
245
+ "description": "Absolute change in visual quality between the first and last intervals."
246
+ },
247
+ "pq_d": {
248
+ "abbr": "PQ-D",
249
+ "name": "Production Quality Drift",
250
+ "direction": "lower",
251
+ "range": "PQ units",
252
+ "unit": "",
253
+ "evaluator": "Audiobox Aesthetics",
254
+ "description": "Absolute change in production quality between the first and last intervals."
255
+ },
256
+ "aq_d": {
257
+ "abbr": "AQ-D",
258
+ "name": "Audio Quality Drift",
259
+ "direction": "lower",
260
+ "range": "AQ units",
261
+ "unit": "",
262
+ "evaluator": "Gemini 3.1 Pro",
263
+ "description": "Absolute change in audio quality between the first and last intervals."
264
+ },
265
+ "sc": {
266
+ "abbr": "SC",
267
+ "name": "Subject Consistency",
268
+ "direction": "higher",
269
+ "range": "Original evaluator scale",
270
+ "unit": "",
271
+ "evaluator": "VBench-Long protocol",
272
+ "description": "Temporal consistency of subject appearance over the generated sequence."
273
+ },
274
+ "bc": {
275
+ "abbr": "BC",
276
+ "name": "Background Consistency",
277
+ "direction": "higher",
278
+ "range": "Original evaluator scale",
279
+ "unit": "",
280
+ "evaluator": "VBench-Long protocol",
281
+ "description": "Temporal consistency of background scenes over the generated sequence."
282
+ },
283
+ "avalign_d": {
284
+ "abbr": "AVAlign-D",
285
+ "name": "Audio-Video Alignment Drift",
286
+ "direction": "lower",
287
+ "range": "AVAlign units",
288
+ "unit": "",
289
+ "evaluator": "ImageBind",
290
+ "description": "Absolute change in audio-video semantic correspondence between the first and last intervals."
291
+ },
292
+ "avsync_d": {
293
+ "abbr": "AVSync-D",
294
+ "name": "Audio-Video Synchronization Drift",
295
+ "direction": "lower",
296
+ "range": "AVSync units",
297
+ "unit": "s",
298
+ "evaluator": "Synchformer",
299
+ "description": "Absolute change in audio-video synchronization offset between the first and last intervals."
300
+ },
301
+ "vuf": {
302
+ "abbr": "VUF",
303
+ "name": "Video Update Fulfillment",
304
+ "direction": "higher",
305
+ "range": "1–5",
306
+ "unit": "",
307
+ "evaluator": "Gemini 3.1 Pro + update checklist",
308
+ "description": "Completeness of each runtime update's visual targets."
309
+ },
310
+ "auf": {
311
+ "abbr": "AUF",
312
+ "name": "Audio Update Fulfillment",
313
+ "direction": "higher",
314
+ "range": "1–5",
315
+ "unit": "",
316
+ "evaluator": "Gemini 3.1 Pro + update checklist",
317
+ "description": "Completeness of each runtime update's audio targets."
318
+ },
319
+ "pvc": {
320
+ "abbr": "PVC",
321
+ "name": "Prompt-Based Visual Continuity",
322
+ "direction": "higher",
323
+ "range": "1–5",
324
+ "unit": "",
325
+ "evaluator": "Boundary detector + Gemini 3.1 Pro",
326
+ "description": "Visual continuity across prompt-update boundaries while allowing requested changes."
327
+ },
328
+ "pac": {
329
+ "abbr": "PAC",
330
+ "name": "Prompt-Based Audio Continuity",
331
+ "direction": "higher",
332
+ "range": "1–5",
333
+ "unit": "",
334
+ "evaluator": "Gemini 3.1 Pro",
335
+ "description": "Audio continuity across prompt-update boundaries while allowing requested changes."
336
+ },
337
+ "pvuar": {
338
+ "abbr": "PVUAR",
339
+ "name": "Prompt-Based Visual Update Achievement Rate",
340
+ "direction": "higher",
341
+ "range": "[0, 1]",
342
+ "unit": "",
343
+ "evaluator": "Gemini 3.1 Pro + update checklist",
344
+ "description": "Fraction of applicable visual updates whose core target is clearly realized."
345
+ },
346
+ "pauar": {
347
+ "abbr": "PAUAR",
348
+ "name": "Prompt-Based Audio Update Achievement Rate",
349
+ "direction": "higher",
350
+ "range": "[0, 1]",
351
+ "unit": "",
352
+ "evaluator": "Gemini 3.1 Pro + update checklist",
353
+ "description": "Fraction of applicable audio updates whose core target is clearly realized."
354
+ },
355
+ "pvrl": {
356
+ "abbr": "PVRL",
357
+ "name": "Prompt-Based Visual Response Latency",
358
+ "direction": "lower",
359
+ "range": "Media time",
360
+ "unit": "s",
361
+ "evaluator": "Media-time measurement",
362
+ "description": "Conditional latency to the first clear realization of an achieved visual target."
363
+ },
364
+ "parl": {
365
+ "abbr": "PARL",
366
+ "name": "Prompt-Based Audio Response Latency",
367
+ "direction": "lower",
368
+ "range": "Media time",
369
+ "unit": "s",
370
+ "evaluator": "Media-time measurement",
371
+ "description": "Conditional latency to the first clear realization of an achieved audio target."
372
+ },
373
+ "vsr": {
374
+ "abbr": "VSR",
375
+ "name": "Visual State Retention",
376
+ "direction": "higher",
377
+ "range": "1–5",
378
+ "unit": "",
379
+ "evaluator": "Gemini 3.1 Pro",
380
+ "description": "Preservation of subject appearance and environment after accounting for requested changes."
381
+ },
382
+ "asr": {
383
+ "abbr": "ASR",
384
+ "name": "Audio State Retention",
385
+ "direction": "higher",
386
+ "range": "1–5",
387
+ "unit": "",
388
+ "evaluator": "Gemini 3.1 Pro",
389
+ "description": "Preservation of recurring music, ambience, and persistent sounds not targeted by an update."
390
+ },
391
+ "hdf": {
392
+ "abbr": "HDF",
393
+ "name": "History-Dependency Following",
394
+ "direction": "higher",
395
+ "range": "1–5",
396
+ "unit": "",
397
+ "evaluator": "Gemini 3.1 Pro",
398
+ "description": "Correct execution of updates using relevant earlier states, evaluated only when the required source state was established."
399
+ },
400
+ "sa_pvrl": {
401
+ "abbr": "SA-PVRL",
402
+ "name": "Success-Adjusted Visual Response Latency",
403
+ "direction": "lower",
404
+ "range": "[0, 30]",
405
+ "unit": "s",
406
+ "evaluator": "Achievement-adjusted media-time measurement",
407
+ "description": "Visual response latency with the 30-second observation-window cap assigned to every unachieved target."
408
+ },
409
+ "sa_parl": {
410
+ "abbr": "SA-PARL",
411
+ "name": "Success-Adjusted Audio Response Latency",
412
+ "direction": "lower",
413
+ "range": "[0, 30]",
414
+ "unit": "s",
415
+ "evaluator": "Achievement-adjusted media-time measurement",
416
+ "description": "Audio response latency with the 30-second observation-window cap assigned to every unachieved target."
417
+ },
418
+ "ca_hdf_a": {
419
+ "abbr": "CA-HDF-A",
420
+ "name": "Coverage-Adjusted Adjacent HDF",
421
+ "direction": "higher",
422
+ "range": "[0, 1]",
423
+ "unit": "",
424
+ "evaluator": "Source establishment + normalized conditional HDF",
425
+ "description": "Adjacent-dependency quality normalized to [0,1], with unestablished source states assigned zero."
426
+ },
427
+ "ca_hdf_l": {
428
+ "abbr": "CA-HDF-L",
429
+ "name": "Coverage-Adjusted Long-Range HDF",
430
+ "direction": "higher",
431
+ "range": "[0, 1]",
432
+ "unit": "",
433
+ "evaluator": "Source establishment + normalized conditional HDF",
434
+ "description": "Long-range dependency quality normalized to [0,1], with unestablished source states assigned zero."
435
+ }
436
+ },
437
+ "models": [
438
+ {
439
+ "name": "PixVerse R1",
440
+ "paradigm": "Native joint",
441
+ "access": "Web",
442
+ "reference": "https://pixverse.ai/en/blog/pixverse-launches-r1-real-time-world-model",
443
+ "scores": {
444
+ "va": 0.529, "vq": 2.428, "pq": 6.348, "aq": 2.810, "avalign": 0.234, "avsync": 0.855,
445
+ "nbc": null, "fps": null, "ttfc": null,
446
+ "vif": 2.976, "aif": 2.511, "vid": 0.484, "aid": 0.425,
447
+ "va_d": 0.032, "vq_d": 0.253, "pq_d": 0.421, "aq_d": 0.626, "sc": 0.907, "bc": 0.930, "avalign_d": 0.065, "avsync_d": 0.579,
448
+ "vuf": 2.573, "auf": 2.895, "pvc": 4.278, "pac": 2.544, "pvuar": 0.350, "pauar": 0.466, "pvrl": 12.992, "parl": 10.352,
449
+ "vsr": 2.430, "asr": 4.108, "hdf": 2.461,
450
+ "sa_pvrl": 24.011, "sa_parl": 20.855, "ca_hdf_a": 0.232, "ca_hdf_l": 0.234
451
+ }
452
+ },
453
+ {
454
+ "name": "HappyOyster",
455
+ "paradigm": "Native joint",
456
+ "access": "Web",
457
+ "reference": "https://www.alizila.com/alibaba-launches-happyoyster-a-world-model-product-for-real-time-immersive-creation-and-interaction/",
458
+ "scores": {
459
+ "va": 0.529, "vq": 2.785, "pq": 6.817, "aq": 3.157, "avalign": 0.206, "avsync": 1.044,
460
+ "nbc": null, "fps": null, "ttfc": null,
461
+ "vif": 3.565, "aif": 2.692, "vid": 0.510, "aid": 0.508,
462
+ "va_d": 0.032, "vq_d": 0.417, "pq_d": 0.623, "aq_d": 0.411, "sc": 0.904, "bc": 0.934, "avalign_d": 0.077, "avsync_d": 0.534,
463
+ "vuf": 2.975, "auf": 2.879, "pvc": 3.744, "pac": 3.509, "pvuar": 0.518, "pauar": 0.488, "pvrl": 14.484, "parl": 13.621,
464
+ "vsr": 2.799, "asr": 3.772, "hdf": 2.817,
465
+ "sa_pvrl": 21.991, "sa_parl": 21.861, "ca_hdf_a": 0.354, "ca_hdf_l": 0.306
466
+ }
467
+ },
468
+ {
469
+ "name": "OmniForcing",
470
+ "paradigm": "Native joint",
471
+ "access": "Open",
472
+ "reference": "https://arxiv.org/abs/2603.11647",
473
+ "scores": {
474
+ "va": 0.554, "vq": 2.374, "pq": 6.351, "aq": 2.528, "avalign": 0.119, "avsync": 1.423,
475
+ "nbc": 98.808, "fps": 12.799, "ttfc": 3.998,
476
+ "vif": 2.423, "aif": 2.343, "vid": 0.572, "aid": 0.277,
477
+ "va_d": 0.083, "vq_d": 0.273, "pq_d": 0.429, "aq_d": 0.506, "sc": 0.962, "bc": 0.953, "avalign_d": 0.081, "avsync_d": 0.479,
478
+ "vuf": 1.848, "auf": 2.242, "pvc": 4.161, "pac": 3.369, "pvuar": 0.053, "pauar": 0.316, "pvrl": 13.295, "parl": 7.925,
479
+ "vsr": 2.624, "asr": 3.388, "hdf": 2.487,
480
+ "sa_pvrl": 29.128, "sa_parl": 23.046, "ca_hdf_a": 0.136, "ca_hdf_l": 0.109
481
+ }
482
+ },
483
+ {
484
+ "name": "Odyssey-2",
485
+ "paradigm": "Cascaded",
486
+ "access": "Web",
487
+ "reference": "https://odyssey.ml/introducing-odyssey-2",
488
+ "scores": {
489
+ "va": 0.531, "vq": 2.820, "pq": 6.426, "aq": 2.659, "avalign": 0.260, "avsync": 0.946,
490
+ "nbc": null, "fps": null, "ttfc": null,
491
+ "vif": 3.106, "aif": 2.778, "vid": 0.500, "aid": 0.566,
492
+ "va_d": 0.040, "vq_d": 0.463, "pq_d": 0.362, "aq_d": 0.456, "sc": 0.976, "bc": 0.966, "avalign_d": 0.064, "avsync_d": 0.548,
493
+ "vuf": 2.408, "auf": 2.244, "pvc": 3.919, "pac": 1.749, "pvuar": 0.274, "pauar": 0.308, "pvrl": 18.758, "parl": 15.733,
494
+ "vsr": 2.836, "asr": 2.707, "hdf": 2.554,
495
+ "sa_pvrl": 26.838, "sa_parl": 25.611, "ca_hdf_a": 0.196, "ca_hdf_l": 0.168
496
+ }
497
+ },
498
+ {
499
+ "name": "Self-Forcing",
500
+ "paradigm": "Cascaded",
501
+ "access": "Open",
502
+ "reference": "https://arxiv.org/abs/2506.08009",
503
+ "scores": {
504
+ "va": 0.585, "vq": 2.753, "pq": 6.453, "aq": 2.623, "avalign": 0.256, "avsync": 0.919,
505
+ "nbc": 94.359, "fps": 15.628, "ttfc": 1.278,
506
+ "vif": 3.019, "aif": 2.810, "vid": 0.373, "aid": 0.457,
507
+ "va_d": 0.025, "vq_d": 0.323, "pq_d": 0.341, "aq_d": 0.488, "sc": 0.981, "bc": 0.969, "avalign_d": 0.054, "avsync_d": 0.476,
508
+ "vuf": 2.237, "auf": 2.339, "pvc": 3.912, "pac": 1.784, "pvuar": 0.185, "pauar": 0.334, "pvrl": 14.164, "parl": 12.369,
509
+ "vsr": 2.851, "asr": 2.813, "hdf": 2.348,
510
+ "sa_pvrl": 27.081, "sa_parl": 24.156, "ca_hdf_a": 0.206, "ca_hdf_l": 0.169
511
+ }
512
+ },
513
+ {
514
+ "name": "LongLive",
515
+ "paradigm": "Cascaded",
516
+ "access": "Open",
517
+ "reference": "https://arxiv.org/abs/2509.22622",
518
+ "scores": {
519
+ "va": 0.605, "vq": 2.768, "pq": 6.459, "aq": 2.696, "avalign": 0.272, "avsync": 0.969,
520
+ "nbc": 85.418, "fps": 10.125, "ttfc": 1.381,
521
+ "vif": 3.164, "aif": 2.814, "vid": 0.317, "aid": 0.581,
522
+ "va_d": 0.023, "vq_d": 0.367, "pq_d": 0.280, "aq_d": 0.475, "sc": 0.986, "bc": 0.973, "avalign_d": 0.052, "avsync_d": 0.476,
523
+ "vuf": 2.341, "auf": 2.138, "pvc": 3.631, "pac": 1.809, "pvuar": 0.241, "pauar": 0.266, "pvrl": 11.792, "parl": 13.078,
524
+ "vsr": 2.724, "asr": 2.712, "hdf": 2.212,
525
+ "sa_pvrl": 25.575, "sa_parl": 25.490, "ca_hdf_a": 0.186, "ca_hdf_l": 0.187
526
+ }
527
+ },
528
+ {
529
+ "name": "Rolling-Forcing",
530
+ "paradigm": "Cascaded",
531
+ "access": "Open",
532
+ "reference": "https://arxiv.org/abs/2509.25161",
533
+ "scores": {
534
+ "va": 0.572, "vq": 2.757, "pq": 6.393, "aq": 2.673, "avalign": 0.265, "avsync": 1.078,
535
+ "nbc": 96.657, "fps": 10.603, "ttfc": 2.962,
536
+ "vif": 3.009, "aif": 2.858, "vid": 0.425, "aid": 0.474,
537
+ "va_d": 0.043, "vq_d": 0.427, "pq_d": 0.329, "aq_d": 0.425, "sc": 0.980, "bc": 0.966, "avalign_d": 0.064, "avsync_d": 0.506,
538
+ "vuf": 2.315, "auf": 2.221, "pvc": 4.086, "pac": 1.800, "pvuar": 0.217, "pauar": 0.298, "pvrl": 13.234, "parl": 12.820,
539
+ "vsr": 2.542, "asr": 2.597, "hdf": 2.502,
540
+ "sa_pvrl": 26.355, "sa_parl": 24.941, "ca_hdf_a": 0.250, "ca_hdf_l": 0.155
541
+ }
542
+ },
543
+ {
544
+ "name": "Deep Forcing",
545
+ "paradigm": "Cascaded",
546
+ "access": "Open",
547
+ "reference": "https://arxiv.org/abs/2512.05081",
548
+ "scores": {
549
+ "va": 0.597, "vq": 2.632, "pq": 6.523, "aq": 2.668, "avalign": 0.280, "avsync": 0.878,
550
+ "nbc": 92.482, "fps": 11.065, "ttfc": 1.397,
551
+ "vif": 3.041, "aif": 2.629, "vid": 0.359, "aid": 0.545,
552
+ "va_d": 0.023, "vq_d": 0.334, "pq_d": 0.289, "aq_d": 0.497, "sc": 0.979, "bc": 0.967, "avalign_d": 0.062, "avsync_d": 0.553,
553
+ "vuf": 2.295, "auf": 2.146, "pvc": 3.879, "pac": 1.770, "pvuar": 0.220, "pauar": 0.288, "pvrl": 13.433, "parl": 12.650,
554
+ "vsr": 2.449, "asr": 2.601, "hdf": 2.206,
555
+ "sa_pvrl": 26.420, "sa_parl": 25.024, "ca_hdf_a": 0.181, "ca_hdf_l": 0.150
556
+ }
557
+ },
558
+ {
559
+ "name": "MemFlow",
560
+ "paradigm": "Cascaded",
561
+ "access": "Open",
562
+ "reference": "https://arxiv.org/abs/2512.14699",
563
+ "scores": {
564
+ "va": 0.600, "vq": 2.836, "pq": 6.407, "aq": 2.651, "avalign": 0.269, "avsync": 1.035,
565
+ "nbc": 87.724, "fps": 10.840, "ttfc": 1.343,
566
+ "vif": 3.142, "aif": 2.854, "vid": 0.333, "aid": 0.492,
567
+ "va_d": 0.028, "vq_d": 0.502, "pq_d": 0.319, "aq_d": 0.503, "sc": 0.986, "bc": 0.972, "avalign_d": 0.054, "avsync_d": 0.474,
568
+ "vuf": 2.309, "auf": 2.286, "pvc": 3.630, "pac": 1.880, "pvuar": 0.217, "pauar": 0.326, "pvrl": 13.698, "parl": 13.154,
569
+ "vsr": 2.961, "asr": 2.879, "hdf": 2.385,
570
+ "sa_pvrl": 26.503, "sa_parl": 24.433, "ca_hdf_a": 0.200, "ca_hdf_l": 0.216
571
+ }
572
+ },
573
+ {
574
+ "name": "Causal-Forcing",
575
+ "paradigm": "Cascaded",
576
+ "access": "Open",
577
+ "reference": "https://arxiv.org/abs/2602.02214",
578
+ "scores": {
579
+ "va": 0.556, "vq": 2.397, "pq": 6.383, "aq": 2.714, "avalign": 0.280, "avsync": 1.093,
580
+ "nbc": 99.558, "fps": 15.421, "ttfc": 1.284,
581
+ "vif": 2.834, "aif": 2.729, "vid": 0.364, "aid": 0.615,
582
+ "va_d": 0.030, "vq_d": 0.189, "pq_d": 0.320, "aq_d": 0.509, "sc": 0.952, "bc": 0.946, "avalign_d": 0.058, "avsync_d": 0.491,
583
+ "vuf": 2.284, "auf": 2.165, "pvc": 4.218, "pac": 1.715, "pvuar": 0.219, "pauar": 0.283, "pvrl": 14.032, "parl": 12.680,
584
+ "vsr": 2.218, "asr": 2.468, "hdf": 2.357,
585
+ "sa_pvrl": 26.497, "sa_parl": 25.117, "ca_hdf_a": 0.184, "ca_hdf_l": 0.188
586
+ }
587
+ },
588
+ {
589
+ "name": "Helios",
590
+ "paradigm": "Cascaded",
591
+ "access": "Open",
592
+ "reference": "https://arxiv.org/abs/2603.04379",
593
+ "scores": {
594
+ "va": 0.470, "vq": 2.176, "pq": 6.241, "aq": 2.521, "avalign": 0.200, "avsync": 0.927,
595
+ "nbc": 83.657, "fps": 10.231, "ttfc": 8.059,
596
+ "vif": 2.977, "aif": 2.712, "vid": 0.694, "aid": 0.566,
597
+ "va_d": 0.149, "vq_d": 0.306, "pq_d": 0.649, "aq_d": 0.513, "sc": 0.967, "bc": 0.967, "avalign_d": 0.115, "avsync_d": 0.514,
598
+ "vuf": 2.253, "auf": 2.461, "pvc": 3.317, "pac": 1.644, "pvuar": 0.197, "pauar": 0.354, "pvrl": 14.043, "parl": 12.207,
599
+ "vsr": 2.405, "asr": 1.985, "hdf": 2.478,
600
+ "sa_pvrl": 26.841, "sa_parl": 23.712, "ca_hdf_a": 0.202, "ca_hdf_l": 0.181
601
+ }
602
+ },
603
+ {
604
+ "name": "SWIFT",
605
+ "paradigm": "Cascaded",
606
+ "access": "Open",
607
+ "reference": "https://arxiv.org/abs/2605.09442",
608
+ "scores": {
609
+ "va": 0.605, "vq": 2.735, "pq": 6.483, "aq": 2.680, "avalign": 0.270, "avsync": 0.970,
610
+ "nbc": 87.043, "fps": 12.359, "ttfc": 1.496,
611
+ "vif": 3.152, "aif": 2.887, "vid": 0.305, "aid": 0.515,
612
+ "va_d": 0.022, "vq_d": 0.411, "pq_d": 0.272, "aq_d": 0.463, "sc": 0.986, "bc": 0.973, "avalign_d": 0.049, "avsync_d": 0.501,
613
+ "vuf": 2.357, "auf": 2.102, "pvc": 3.615, "pac": 1.856, "pvuar": 0.246, "pauar": 0.276, "pvrl": 10.340, "parl": 12.094,
614
+ "vsr": 2.609, "asr": 2.705, "hdf": 2.322,
615
+ "sa_pvrl": 25.150, "sa_parl": 25.195, "ca_hdf_a": 0.192, "ca_hdf_l": 0.232
616
+ }
617
+ },
618
+ {
619
+ "name": "IAMFlow",
620
+ "paradigm": "Cascaded",
621
+ "access": "Open",
622
+ "reference": "https://arxiv.org/abs/2605.18733",
623
+ "scores": {
624
+ "va": 0.602, "vq": 2.840, "pq": 6.415, "aq": 2.625, "avalign": 0.268, "avsync": 1.016,
625
+ "nbc": 86.957, "fps": 6.049, "ttfc": 1.772,
626
+ "vif": 3.192, "aif": 2.789, "vid": 0.302, "aid": 0.600,
627
+ "va_d": 0.023, "vq_d": 0.425, "pq_d": 0.331, "aq_d": 0.563, "sc": 0.986, "bc": 0.973, "avalign_d": 0.057, "avsync_d": 0.490,
628
+ "vuf": 2.319, "auf": 2.190, "pvc": 3.655, "pac": 1.819, "pvuar": 0.222, "pauar": 0.297, "pvrl": 11.683, "parl": 13.001,
629
+ "vsr": 2.836, "asr": 2.903, "hdf": 2.424,
630
+ "sa_pvrl": 25.976, "sa_parl": 24.936, "ca_hdf_a": 0.213, "ca_hdf_l": 0.183
631
+ }
632
+ }
633
+ ]
634
+ }
index.html CHANGED
@@ -1,19 +1,319 @@
1
  <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width" />
6
- <title>My static Space</title>
7
- <link rel="stylesheet" href="style.css" />
8
- </head>
9
- <body>
10
- <div class="card">
11
- <h1>Welcome to your static Space!</h1>
12
- <p>You can modify this app directly by editing <i>index.html</i> in the Files and versions tab.</p>
13
- <p>
14
- Also don't forget to check the
15
- <a href="https://huggingface.co/docs/hub/spaces" target="_blank">Spaces documentation</a>.
16
- </p>
17
- </div>
18
- </body>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
  </html>
 
1
  <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <meta name="description" content="Official StreamAV-Bench leaderboard for streaming audio-video generation.">
7
+ <meta name="theme-color" content="#f5f2ea">
8
+ <meta property="og:title" content="StreamAV-Bench Leaderboard">
9
+ <meta property="og:description" content="Metric-wise evaluation of streaming audio-video generation systems.">
10
+ <meta property="og:type" content="website">
11
+ <title>StreamAV-Bench Leaderboard</title>
12
+ <link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64'%3E%3Crect width='64' height='64' rx='16' fill='%2318231f'/%3E%3Cpath d='M12 35h8l4-14 7 28 7-37 5 23h9' fill='none' stroke='%23fffef9' stroke-width='5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E">
13
+ <link rel="preconnect" href="https://fonts.googleapis.com">
14
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
15
+ <link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=DM+Serif+Display&display=swap" rel="stylesheet">
16
+ <link rel="stylesheet" href="styles.css">
17
+ <script src="app.js" defer></script>
18
+ </head>
19
+ <body>
20
+ <a class="skip-link" href="#leaderboard">Skip to leaderboard</a>
21
+
22
+ <header class="site-header">
23
+ <div class="shell header-inner">
24
+ <a class="brand" id="project-link" href="https://liukqchoco.github.io/StreamAVBench/" target="_blank" rel="noopener noreferrer">
25
+ <svg class="brand-mark" viewBox="0 0 42 42" role="img" aria-label="StreamAV-Bench">
26
+ <rect x="1" y="1" width="40" height="40" rx="11" fill="currentColor"/>
27
+ <path d="M9 23h4l2.6-7 4.2 14L24 11l3.4 12H33" fill="none" stroke="#fffdf7" stroke-width="2.8" stroke-linecap="round" stroke-linejoin="round"/>
28
+ <circle cx="33" cy="23" r="2.2" fill="#ef9b77"/>
29
+ </svg>
30
+ <span>
31
+ <strong>StreamAV-Bench</strong>
32
+ <small>Leaderboard</small>
33
+ </span>
34
+ </a>
35
+
36
+ <nav aria-label="Primary navigation">
37
+ <a href="#leaderboard">Results</a>
38
+ <a href="#metrics">Metrics</a>
39
+ <a href="#submission">Submit</a>
40
+ <a class="nav-project" href="https://liukqchoco.github.io/StreamAVBench/" target="_blank" rel="noopener noreferrer">
41
+ Project <span aria-hidden="true">↗</span>
42
+ </a>
43
+ </nav>
44
+ </div>
45
+ </header>
46
+
47
+ <main>
48
+ <section class="hero">
49
+ <div class="hero-grid" aria-hidden="true"></div>
50
+ <div class="hero-orb hero-orb-one" aria-hidden="true"></div>
51
+ <div class="hero-orb hero-orb-two" aria-hidden="true"></div>
52
+ <div class="shell hero-inner">
53
+ <div class="hero-copy">
54
+ <p class="eyebrow"><span></span><b id="release-label">Initial benchmark release</b></p>
55
+ <h1>StreamAV-Bench <em>Leaderboard</em></h1>
56
+ <p class="hero-tagline" id="hero-tagline">Streaming systems, evaluated while they run.</p>
57
+ <p class="hero-description" id="hero-description">
58
+ Official metric-wise results for streaming audio-video generation across progressive and interactive evaluation tracks.
59
+ </p>
60
+ <div class="hero-actions">
61
+ <a class="button button-primary" href="#leaderboard">
62
+ Explore results <span aria-hidden="true">↓</span>
63
+ </a>
64
+ <a class="button button-secondary" href="#submission">
65
+ Submit a system <span aria-hidden="true">→</span>
66
+ </a>
67
+ </div>
68
+ </div>
69
+
70
+ <div class="stream-card">
71
+ <div class="stream-card-header">
72
+ <span>Evaluation signal</span>
73
+ <i><b></b> 180-second rollout</i>
74
+ </div>
75
+ <div class="signal-group signal-progressive">
76
+ <div class="signal-label">
77
+ <strong>Progressive</strong>
78
+ <small>one global prompt</small>
79
+ </div>
80
+ <div class="signal-track">
81
+ <span style="--level: 82%"></span>
82
+ <span style="--level: 76%"></span>
83
+ <span style="--level: 70%"></span>
84
+ <span style="--level: 66%"></span>
85
+ <span style="--level: 59%"></span>
86
+ <span style="--level: 54%"></span>
87
+ </div>
88
+ <div class="signal-times"><span>0</span><span>60</span><span>120</span><span>180s</span></div>
89
+ </div>
90
+ <div class="signal-divider"><span>committed history</span></div>
91
+ <div class="signal-group signal-interactive">
92
+ <div class="signal-label">
93
+ <strong>Interactive</strong>
94
+ <small>five runtime updates</small>
95
+ </div>
96
+ <div class="update-track">
97
+ <span>P0</span><i></i><span>U1</span><i></i><span>U2</span><i></i><span>U3</span><i></i><span>U4</span><i></i><span>U5</span>
98
+ </div>
99
+ <div class="response-line">
100
+ <b style="--delay: 18%"></b>
101
+ <b style="--delay: 42%"></b>
102
+ <b style="--delay: 31%"></b>
103
+ <b style="--delay: 54%"></b>
104
+ <b style="--delay: 38%"></b>
105
+ </div>
106
+ </div>
107
+ <p class="stream-card-note"><span>◆</span> Scores expose change over time—not only the final output.</p>
108
+ </div>
109
+ </div>
110
+ </section>
111
+
112
+ <section class="stat-band" aria-label="Benchmark statistics">
113
+ <div class="shell stats">
114
+ <div><strong id="stat-systems">13</strong><span>evaluated systems</span></div>
115
+ <div><strong id="stat-metrics">32</strong><span>core metrics</span></div>
116
+ <div><strong>2</strong><span>streaming tracks</span></div>
117
+ <div><strong id="stat-scenarios">320</strong><span>verified scenarios</span></div>
118
+ <div><strong id="stat-duration">180s</strong><span>continuous generation</span></div>
119
+ </div>
120
+ </section>
121
+
122
+ <section class="section leaderboard-section" id="leaderboard">
123
+ <div class="shell">
124
+ <div class="section-heading split-heading">
125
+ <div>
126
+ <p class="kicker">Official results</p>
127
+ <h2>Compare one capability at a time.</h2>
128
+ </div>
129
+ <div class="heading-note">
130
+ <span class="note-icon">≠</span>
131
+ <p><strong>No aggregate score.</strong> StreamAV-Bench reports complementary capabilities without introducing an unsupported weighted composite.</p>
132
+ </div>
133
+ </div>
134
+
135
+ <div class="explorer">
136
+ <div class="track-switcher">
137
+ <div class="track-tabs" id="track-tabs" role="tablist" aria-label="Evaluation views"></div>
138
+ <p id="track-description">Quality, alignment, continuity, and efficiency metrics applied across both tracks.</p>
139
+ </div>
140
+
141
+ <div class="category-bar">
142
+ <span>View</span>
143
+ <div class="category-tabs" id="category-tabs" aria-label="Metric categories"></div>
144
+ </div>
145
+
146
+ <div class="table-panel">
147
+ <div class="table-panel-header">
148
+ <div>
149
+ <p class="table-kicker" id="table-kicker">Metric-wise ranking</p>
150
+ <h3 id="category-title">Quality &amp; Alignment</h3>
151
+ <p id="category-description">Perceptual quality and semantic or temporal correspondence between audio and video.</p>
152
+ </div>
153
+ <p class="ranking-label" id="ranking-label">Ranked by <strong>Visual Aesthetics</strong><span>Higher is better</span></p>
154
+ </div>
155
+
156
+ <div class="toolbar">
157
+ <label class="search-control">
158
+ <span class="sr-only">Search systems</span>
159
+ <svg viewBox="0 0 24 24" aria-hidden="true"><circle cx="11" cy="11" r="6.5"></circle><path d="m16 16 4 4"></path></svg>
160
+ <input id="model-search" type="search" placeholder="Search systems…" autocomplete="off">
161
+ </label>
162
+ <label class="metric-select-control">
163
+ <span>Rank by</span>
164
+ <select id="metric-select" aria-label="Select the metric used to rank systems"></select>
165
+ </label>
166
+ <label>
167
+ <span>Paradigm</span>
168
+ <select id="paradigm-filter">
169
+ <option value="all">All paradigms</option>
170
+ <option value="Native joint">Native joint</option>
171
+ <option value="Cascaded">Cascaded</option>
172
+ </select>
173
+ </label>
174
+ <label>
175
+ <span>Access</span>
176
+ <select id="access-filter">
177
+ <option value="all">All access</option>
178
+ <option value="Open">Open</option>
179
+ <option value="Web">Web</option>
180
+ </select>
181
+ </label>
182
+ <button class="tool-button" id="reset-filters" type="button" title="Reset filters">
183
+ <span aria-hidden="true">↺</span> Reset
184
+ </button>
185
+ <button class="tool-button download-button" id="download-csv" type="button">
186
+ <span aria-hidden="true">↓</span> CSV
187
+ </button>
188
+ </div>
189
+
190
+ <div class="data-error" id="data-error" role="alert" hidden>
191
+ <strong>Leaderboard unavailable</strong>
192
+ <p>The leaderboard data could not be loaded.</p>
193
+ </div>
194
+
195
+ <div class="table-scroll" tabindex="0" aria-label="Scrollable leaderboard table">
196
+ <table id="leaderboard-table">
197
+ <caption class="sr-only">StreamAV-Bench system results</caption>
198
+ </table>
199
+ </div>
200
+
201
+ <div class="table-footer">
202
+ <p id="table-status" aria-live="polite">13 of 13 systems</p>
203
+ <div class="legend" aria-label="Cell highlighting legend">
204
+ <span><i class="legend-best"></i> Best published value</span>
205
+ <span><i class="legend-second"></i> Second distinct value</span>
206
+ <span><b>—</b> Unavailable</span>
207
+ </div>
208
+ </div>
209
+ </div>
210
+
211
+ <div class="evidence-note">
212
+ <span aria-hidden="true">i</span>
213
+ <div id="context-copy">
214
+ <p><strong>Reading the ranks.</strong> Click any metric header to rank by that metric. Published three-decimal ties use competition ranking (for example, 1, 1, 3). PVRL and PARL are conditional on successful target achievement and should be read with PVUAR and PAUAR.</p>
215
+ <p>HDF is evaluated only when its required source state was established. NBC, FPS, and TTFC are unavailable for PixVerse R1, HappyOyster, and Odyssey-2 because their web interfaces do not expose the required traces.</p>
216
+ </div>
217
+ </div>
218
+ </div>
219
+ </div>
220
+ </section>
221
+
222
+ <section class="section metrics-section" id="metrics">
223
+ <div class="shell">
224
+ <div class="section-heading split-heading">
225
+ <div>
226
+ <p class="kicker">Metric guide</p>
227
+ <h2>Know what each number measures.</h2>
228
+ </div>
229
+ <p class="section-intro">The cards update with the selected leaderboard category. Choose a card to rank the table by that metric.</p>
230
+ </div>
231
+ <div class="metric-guide" id="metric-guide"></div>
232
+ </div>
233
+ </section>
234
+
235
+ <section class="section protocol-section">
236
+ <div class="shell">
237
+ <div class="section-heading">
238
+ <p class="kicker">How to read StreamAV-Bench</p>
239
+ <h2>Performance is a profile, not a single number.</h2>
240
+ </div>
241
+ <div class="protocol-grid">
242
+ <article>
243
+ <span>01</span>
244
+ <h3>Start with the regime</h3>
245
+ <p>Use Progressive for fixed-prompt long-horizon behavior and Interactive for runtime response, retention, and reuse.</p>
246
+ </article>
247
+ <article>
248
+ <span>02</span>
249
+ <h3>Pair level with change</h3>
250
+ <p>High quality or fulfillment can coexist with temporal drift. Read absolute scores alongside their drift counterparts.</p>
251
+ </article>
252
+ <article>
253
+ <span>03</span>
254
+ <h3>Pair success with speed</h3>
255
+ <p>Low conditional latency does not guarantee reliable updates. Read response latency together with achievement rate.</p>
256
+ </article>
257
+ </div>
258
+ </div>
259
+ </section>
260
+
261
+ <section class="section submission-section" id="submission">
262
+ <div class="shell submission-grid">
263
+ <div>
264
+ <p class="kicker">Join the leaderboard</p>
265
+ <h2>Submit results for manual verification.</h2>
266
+ <p class="submission-copy">The initial leaderboard uses a review-first process so that model configuration, benchmark coverage, and reported values can be checked before publication.</p>
267
+ <a class="button button-primary submission-button is-disabled" id="submission-link" aria-disabled="true">
268
+ <span>Submission form coming soon</span><b aria-hidden="true">↗</b>
269
+ </a>
270
+ </div>
271
+ <ol class="submission-steps">
272
+ <li><span>1</span><div><strong>Run the official protocol</strong><p>Evaluate the applicable StreamAV-Bench tracks and retain the per-case outputs.</p></div></li>
273
+ <li><span>2</span><div><strong>Package model metadata</strong><p>Include the model version, access mode, generation configuration, and metric results.</p></div></li>
274
+ <li><span>3</span><div><strong>Pass manual review</strong><p>The benchmark team verifies completeness and consistency before updating the public table.</p></div></li>
275
+ </ol>
276
+ </div>
277
+ </section>
278
+
279
+ <section class="resource-band" aria-label="Project resources">
280
+ <div class="shell resources">
281
+ <a id="paper-link" class="resource-link is-disabled" aria-disabled="true">
282
+ <span class="resource-symbol">▤</span>
283
+ <span><strong>Paper</strong><small data-link-status>Paper coming soon</small></span>
284
+ <b aria-hidden="true">—</b>
285
+ </a>
286
+ <a id="code-link" class="resource-link" href="https://github.com/liukqchoco/StreamAVBench-Code" target="_blank" rel="noopener noreferrer">
287
+ <span class="resource-symbol">&lt;/&gt;</span>
288
+ <span><strong>Code</strong><small data-link-status>Code repository</small></span>
289
+ <b aria-hidden="true">↗</b>
290
+ </a>
291
+ <a id="dataset-link" class="resource-link is-disabled" aria-disabled="true">
292
+ <span class="resource-symbol">≋</span>
293
+ <span><strong>Dataset</strong><small data-link-status>Dataset coming soon</small></span>
294
+ <b aria-hidden="true">—</b>
295
+ </a>
296
+ </div>
297
+ </section>
298
+ </main>
299
+
300
+ <footer>
301
+ <div class="shell footer-inner">
302
+ <div class="footer-brand">
303
+ <svg class="brand-mark" viewBox="0 0 42 42" aria-hidden="true">
304
+ <rect x="1" y="1" width="40" height="40" rx="11" fill="currentColor"/>
305
+ <path d="M9 23h4l2.6-7 4.2 14L24 11l3.4 12H33" fill="none" stroke="#fffdf7" stroke-width="2.8" stroke-linecap="round" stroke-linejoin="round"/>
306
+ <circle cx="33" cy="23" r="2.2" fill="#ef9b77"/>
307
+ </svg>
308
+ <span><strong>StreamAV-Bench</strong><small>Persistent · responsive · synchronized</small></span>
309
+ </div>
310
+ <p>Official benchmark results. Scores are reproduced from the final paper tables.</p>
311
+ <a href="#leaderboard">Back to results ↑</a>
312
+ </div>
313
+ </footer>
314
+
315
+ <noscript>
316
+ <div class="noscript">JavaScript is required to render and sort the leaderboard.</div>
317
+ </noscript>
318
+ </body>
319
  </html>
styles.css ADDED
@@ -0,0 +1,1987 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ :root {
2
+ --ink: #18231f;
3
+ --ink-2: #2d3934;
4
+ --ink-soft: #5c6863;
5
+ --paper: #f7f5ef;
6
+ --paper-deep: #eeebe1;
7
+ --white: #fffef9;
8
+ --line: rgba(24, 35, 31, 0.14);
9
+ --line-strong: rgba(24, 35, 31, 0.26);
10
+ --blue: #4b7bec;
11
+ --blue-soft: #e6efff;
12
+ --green: #6f9659;
13
+ --green-soft: #e8f0df;
14
+ --coral: #cc664e;
15
+ --coral-soft: #fae9e1;
16
+ --purple: #7969ad;
17
+ --purple-soft: #eee9fa;
18
+ --gold: #c88b2f;
19
+ --gold-soft: #fff4d8;
20
+ --silver: #71818a;
21
+ --silver-soft: #edf2f4;
22
+ --radius: 20px;
23
+ --shadow: 0 26px 90px rgba(47, 58, 49, 0.1);
24
+ --sans: "DM Sans", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
25
+ --serif: "DM Serif Display", Georgia, serif;
26
+ }
27
+
28
+ * {
29
+ box-sizing: border-box;
30
+ }
31
+
32
+ html {
33
+ scroll-behavior: smooth;
34
+ scroll-padding-top: 88px;
35
+ }
36
+
37
+ body {
38
+ margin: 0;
39
+ color: var(--ink);
40
+ background: var(--paper);
41
+ font-family: var(--sans);
42
+ font-size: 16px;
43
+ line-height: 1.6;
44
+ -webkit-font-smoothing: antialiased;
45
+ text-rendering: optimizeLegibility;
46
+ }
47
+
48
+ button,
49
+ input,
50
+ select {
51
+ color: inherit;
52
+ font: inherit;
53
+ }
54
+
55
+ button,
56
+ a {
57
+ -webkit-tap-highlight-color: transparent;
58
+ }
59
+
60
+ button {
61
+ cursor: pointer;
62
+ }
63
+
64
+ a {
65
+ color: inherit;
66
+ text-decoration: none;
67
+ }
68
+
69
+ h1,
70
+ h2,
71
+ h3,
72
+ p {
73
+ margin-top: 0;
74
+ }
75
+
76
+ .shell {
77
+ width: min(1320px, calc(100% - 56px));
78
+ margin-inline: auto;
79
+ }
80
+
81
+ .sr-only {
82
+ position: absolute;
83
+ width: 1px;
84
+ height: 1px;
85
+ padding: 0;
86
+ margin: -1px;
87
+ overflow: hidden;
88
+ clip: rect(0, 0, 0, 0);
89
+ white-space: nowrap;
90
+ border: 0;
91
+ }
92
+
93
+ .skip-link {
94
+ position: fixed;
95
+ z-index: 1000;
96
+ top: 12px;
97
+ left: 12px;
98
+ padding: 9px 14px;
99
+ color: var(--white);
100
+ background: var(--ink);
101
+ border-radius: 9px;
102
+ transform: translateY(-180%);
103
+ }
104
+
105
+ .skip-link:focus {
106
+ transform: translateY(0);
107
+ }
108
+
109
+ .site-header {
110
+ position: sticky;
111
+ z-index: 100;
112
+ top: 0;
113
+ height: 74px;
114
+ background: rgba(247, 245, 239, 0.9);
115
+ border-bottom: 1px solid var(--line);
116
+ backdrop-filter: blur(18px);
117
+ }
118
+
119
+ .header-inner {
120
+ display: flex;
121
+ align-items: center;
122
+ justify-content: space-between;
123
+ height: 100%;
124
+ }
125
+
126
+ .brand,
127
+ .footer-brand {
128
+ display: inline-flex;
129
+ align-items: center;
130
+ gap: 11px;
131
+ }
132
+
133
+ .brand-mark {
134
+ width: 36px;
135
+ height: 36px;
136
+ color: var(--ink);
137
+ flex: none;
138
+ }
139
+
140
+ .brand > span,
141
+ .footer-brand > span {
142
+ display: flex;
143
+ flex-direction: column;
144
+ line-height: 1.15;
145
+ }
146
+
147
+ .brand strong,
148
+ .footer-brand strong {
149
+ font-size: 14px;
150
+ letter-spacing: -0.02em;
151
+ }
152
+
153
+ .brand small,
154
+ .footer-brand small {
155
+ margin-top: 3px;
156
+ color: var(--ink-soft);
157
+ font-size: 10px;
158
+ font-weight: 600;
159
+ letter-spacing: 0.1em;
160
+ text-transform: uppercase;
161
+ }
162
+
163
+ .site-header nav {
164
+ display: flex;
165
+ align-items: center;
166
+ gap: 30px;
167
+ color: var(--ink-soft);
168
+ font-size: 13px;
169
+ font-weight: 700;
170
+ }
171
+
172
+ .site-header nav a {
173
+ transition: color 150ms ease;
174
+ }
175
+
176
+ .site-header nav a:hover {
177
+ color: var(--ink);
178
+ }
179
+
180
+ .site-header .nav-project {
181
+ padding: 9px 15px;
182
+ color: var(--ink);
183
+ border: 1px solid var(--line-strong);
184
+ border-radius: 999px;
185
+ }
186
+
187
+ .hero {
188
+ position: relative;
189
+ padding: 70px 0 64px;
190
+ overflow: hidden;
191
+ }
192
+
193
+ .hero-grid {
194
+ position: absolute;
195
+ inset: 0;
196
+ background:
197
+ linear-gradient(rgba(24, 35, 31, 0.037) 1px, transparent 1px),
198
+ linear-gradient(90deg, rgba(24, 35, 31, 0.037) 1px, transparent 1px);
199
+ background-size: 48px 48px;
200
+ mask-image: linear-gradient(to bottom, #000, transparent 94%);
201
+ pointer-events: none;
202
+ }
203
+
204
+ .hero-orb {
205
+ position: absolute;
206
+ border-radius: 50%;
207
+ filter: blur(2px);
208
+ pointer-events: none;
209
+ }
210
+
211
+ .hero-orb-one {
212
+ top: -80px;
213
+ right: -90px;
214
+ width: 360px;
215
+ height: 360px;
216
+ background: var(--blue-soft);
217
+ opacity: 0.75;
218
+ }
219
+
220
+ .hero-orb-two {
221
+ bottom: -150px;
222
+ left: -130px;
223
+ width: 330px;
224
+ height: 330px;
225
+ background: var(--coral-soft);
226
+ opacity: 0.8;
227
+ }
228
+
229
+ .hero-inner {
230
+ position: relative;
231
+ display: grid;
232
+ grid-template-columns: minmax(0, 1.05fr) minmax(400px, 0.9fr);
233
+ align-items: center;
234
+ gap: 64px;
235
+ }
236
+
237
+ .eyebrow,
238
+ .kicker,
239
+ .table-kicker {
240
+ color: var(--coral);
241
+ font-size: 11px;
242
+ font-weight: 700;
243
+ letter-spacing: 0.13em;
244
+ text-transform: uppercase;
245
+ }
246
+
247
+ .eyebrow {
248
+ display: inline-flex;
249
+ align-items: center;
250
+ gap: 9px;
251
+ margin-bottom: 18px;
252
+ padding: 7px 12px;
253
+ color: var(--ink-soft);
254
+ background: rgba(255, 254, 249, 0.72);
255
+ border: 1px solid var(--line);
256
+ border-radius: 999px;
257
+ letter-spacing: 0.08em;
258
+ }
259
+
260
+ .eyebrow span {
261
+ width: 7px;
262
+ height: 7px;
263
+ background: var(--coral);
264
+ border-radius: 50%;
265
+ box-shadow: 0 0 0 4px rgba(204, 102, 78, 0.13);
266
+ }
267
+
268
+ .eyebrow b {
269
+ font-weight: 700;
270
+ }
271
+
272
+ .hero h1 {
273
+ max-width: 760px;
274
+ margin-bottom: 20px;
275
+ font-family: var(--serif);
276
+ font-size: clamp(56px, 6.4vw, 90px);
277
+ font-weight: 400;
278
+ line-height: 0.93;
279
+ letter-spacing: -0.055em;
280
+ }
281
+
282
+ .hero h1 em {
283
+ display: block;
284
+ color: var(--blue);
285
+ font-weight: inherit;
286
+ }
287
+
288
+ .hero-tagline {
289
+ margin-bottom: 12px;
290
+ font-size: clamp(20px, 2vw, 28px);
291
+ font-weight: 600;
292
+ letter-spacing: -0.035em;
293
+ }
294
+
295
+ .hero-description {
296
+ max-width: 650px;
297
+ margin-bottom: 24px;
298
+ color: var(--ink-soft);
299
+ font-size: 17px;
300
+ }
301
+
302
+ .hero-actions {
303
+ display: flex;
304
+ flex-wrap: wrap;
305
+ gap: 10px;
306
+ }
307
+
308
+ .button {
309
+ display: inline-flex;
310
+ align-items: center;
311
+ justify-content: center;
312
+ gap: 14px;
313
+ min-height: 48px;
314
+ padding: 11px 18px;
315
+ border: 1px solid var(--line-strong);
316
+ border-radius: 12px;
317
+ font-size: 13px;
318
+ font-weight: 700;
319
+ transition: transform 150ms ease, box-shadow 150ms ease, background 150ms ease;
320
+ }
321
+
322
+ .button:hover:not(.is-disabled) {
323
+ transform: translateY(-2px);
324
+ }
325
+
326
+ .button-primary {
327
+ color: var(--paper);
328
+ background: var(--ink);
329
+ border-color: var(--ink);
330
+ box-shadow: 0 10px 24px rgba(24, 35, 31, 0.16);
331
+ }
332
+
333
+ .button-secondary {
334
+ background: rgba(255, 254, 249, 0.7);
335
+ }
336
+
337
+ .stream-card {
338
+ position: relative;
339
+ min-height: 410px;
340
+ padding: 20px;
341
+ background: rgba(255, 254, 249, 0.9);
342
+ border: 1px solid var(--line);
343
+ border-radius: 28px;
344
+ box-shadow: var(--shadow);
345
+ }
346
+
347
+ .stream-card::before {
348
+ position: absolute;
349
+ z-index: -1;
350
+ inset: 22px -18px -18px 22px;
351
+ content: "";
352
+ background: var(--green-soft);
353
+ border-radius: 28px;
354
+ transform: rotate(2deg);
355
+ }
356
+
357
+ .stream-card-header {
358
+ display: flex;
359
+ align-items: center;
360
+ justify-content: space-between;
361
+ padding-bottom: 14px;
362
+ border-bottom: 1px solid var(--line);
363
+ color: var(--ink-soft);
364
+ font-size: 11px;
365
+ font-weight: 700;
366
+ letter-spacing: 0.08em;
367
+ text-transform: uppercase;
368
+ }
369
+
370
+ .stream-card-header i {
371
+ display: flex;
372
+ align-items: center;
373
+ gap: 6px;
374
+ font-size: 9px;
375
+ font-style: normal;
376
+ }
377
+
378
+ .stream-card-header i b {
379
+ width: 7px;
380
+ height: 7px;
381
+ background: var(--green);
382
+ border-radius: 50%;
383
+ box-shadow: 0 0 0 4px rgba(111, 150, 89, 0.12);
384
+ }
385
+
386
+ .signal-group {
387
+ padding: 21px 6px;
388
+ }
389
+
390
+ .signal-label {
391
+ display: flex;
392
+ align-items: baseline;
393
+ justify-content: space-between;
394
+ margin-bottom: 12px;
395
+ }
396
+
397
+ .signal-label strong {
398
+ font-size: 15px;
399
+ }
400
+
401
+ .signal-label small {
402
+ color: var(--ink-soft);
403
+ font-size: 10px;
404
+ font-weight: 600;
405
+ }
406
+
407
+ .signal-track {
408
+ display: grid;
409
+ grid-template-columns: repeat(6, 1fr);
410
+ align-items: end;
411
+ gap: 7px;
412
+ height: 68px;
413
+ padding: 10px;
414
+ background: var(--green-soft);
415
+ border-radius: 13px;
416
+ }
417
+
418
+ .signal-track span {
419
+ position: relative;
420
+ height: var(--level);
421
+ background: var(--green);
422
+ border-radius: 5px 5px 2px 2px;
423
+ }
424
+
425
+ .signal-track span::after {
426
+ position: absolute;
427
+ inset: 7px 4px auto;
428
+ height: 2px;
429
+ content: "";
430
+ background: rgba(255, 255, 255, 0.48);
431
+ border-radius: 999px;
432
+ }
433
+
434
+ .signal-times {
435
+ display: flex;
436
+ justify-content: space-between;
437
+ margin-top: 8px;
438
+ color: var(--ink-soft);
439
+ font-size: 8px;
440
+ font-weight: 600;
441
+ }
442
+
443
+ .signal-divider {
444
+ display: flex;
445
+ align-items: center;
446
+ gap: 10px;
447
+ color: var(--ink-soft);
448
+ font-size: 8px;
449
+ font-weight: 700;
450
+ letter-spacing: 0.09em;
451
+ text-transform: uppercase;
452
+ }
453
+
454
+ .signal-divider::before,
455
+ .signal-divider::after {
456
+ height: 1px;
457
+ content: "";
458
+ background: var(--line);
459
+ flex: 1;
460
+ }
461
+
462
+ .update-track {
463
+ display: flex;
464
+ align-items: center;
465
+ }
466
+
467
+ .update-track span {
468
+ display: grid;
469
+ width: 32px;
470
+ height: 32px;
471
+ place-items: center;
472
+ color: white;
473
+ background: var(--blue);
474
+ border-radius: 8px;
475
+ font-size: 9px;
476
+ font-weight: 700;
477
+ }
478
+
479
+ .update-track span:first-child {
480
+ background: var(--ink);
481
+ }
482
+
483
+ .update-track span:nth-of-type(3) {
484
+ background: var(--purple);
485
+ }
486
+
487
+ .update-track span:nth-of-type(4) {
488
+ background: var(--green);
489
+ }
490
+
491
+ .update-track span:nth-of-type(5) {
492
+ background: var(--coral);
493
+ }
494
+
495
+ .update-track span:nth-of-type(6) {
496
+ color: var(--ink);
497
+ background: #edb755;
498
+ }
499
+
500
+ .update-track i {
501
+ height: 2px;
502
+ background: var(--line-strong);
503
+ flex: 1;
504
+ }
505
+
506
+ .response-line {
507
+ display: grid;
508
+ grid-template-columns: repeat(5, 1fr);
509
+ gap: 9px;
510
+ margin: 11px 16px 0 48px;
511
+ }
512
+
513
+ .response-line b {
514
+ position: relative;
515
+ height: 5px;
516
+ overflow: hidden;
517
+ background: var(--blue-soft);
518
+ border-radius: 99px;
519
+ }
520
+
521
+ .response-line b::after {
522
+ position: absolute;
523
+ inset: 0 var(--delay) 0 0;
524
+ content: "";
525
+ background: var(--blue);
526
+ border-radius: inherit;
527
+ }
528
+
529
+ .stream-card-note {
530
+ display: flex;
531
+ align-items: center;
532
+ gap: 9px;
533
+ margin: 3px 7px 0;
534
+ padding: 11px 14px;
535
+ color: var(--ink-soft);
536
+ background: var(--paper);
537
+ border-radius: 11px;
538
+ font-size: 10px;
539
+ font-weight: 600;
540
+ }
541
+
542
+ .stream-card-note span {
543
+ color: var(--coral);
544
+ }
545
+
546
+ .stat-band {
547
+ color: var(--paper);
548
+ background: var(--ink);
549
+ }
550
+
551
+ .stats {
552
+ display: grid;
553
+ grid-template-columns: repeat(5, 1fr);
554
+ padding: 32px 0;
555
+ }
556
+
557
+ .stats > div {
558
+ display: flex;
559
+ flex-direction: column;
560
+ align-items: center;
561
+ border-right: 1px solid rgba(255, 255, 255, 0.14);
562
+ text-align: center;
563
+ }
564
+
565
+ .stats > div:last-child {
566
+ border-right: 0;
567
+ }
568
+
569
+ .stats strong {
570
+ font-family: var(--serif);
571
+ font-size: clamp(32px, 3.4vw, 48px);
572
+ font-weight: 400;
573
+ line-height: 1;
574
+ }
575
+
576
+ .stats span {
577
+ margin-top: 7px;
578
+ color: rgba(255, 255, 255, 0.58);
579
+ font-size: 9px;
580
+ font-weight: 700;
581
+ letter-spacing: 0.09em;
582
+ text-transform: uppercase;
583
+ }
584
+
585
+ .section {
586
+ padding: 112px 0;
587
+ }
588
+
589
+ .leaderboard-section {
590
+ padding-top: 84px;
591
+ }
592
+
593
+ .leaderboard-section .section-heading {
594
+ margin-bottom: 40px;
595
+ }
596
+
597
+ .section-heading {
598
+ max-width: 840px;
599
+ margin-bottom: 54px;
600
+ }
601
+
602
+ .section-heading .kicker {
603
+ margin-bottom: 16px;
604
+ }
605
+
606
+ .section-heading h2 {
607
+ margin-bottom: 0;
608
+ font-family: var(--serif);
609
+ font-size: clamp(40px, 5vw, 66px);
610
+ font-weight: 400;
611
+ line-height: 1.02;
612
+ letter-spacing: -0.04em;
613
+ }
614
+
615
+ .split-heading {
616
+ display: grid;
617
+ grid-template-columns: minmax(0, 1.15fr) minmax(310px, 0.65fr);
618
+ align-items: end;
619
+ gap: 80px;
620
+ max-width: none;
621
+ }
622
+
623
+ .heading-note {
624
+ display: grid;
625
+ grid-template-columns: auto 1fr;
626
+ gap: 14px;
627
+ align-items: start;
628
+ padding: 17px;
629
+ background: var(--coral-soft);
630
+ border: 1px solid rgba(204, 102, 78, 0.18);
631
+ border-radius: 14px;
632
+ }
633
+
634
+ .heading-note .note-icon {
635
+ display: grid;
636
+ width: 30px;
637
+ height: 30px;
638
+ place-items: center;
639
+ color: var(--coral);
640
+ background: var(--white);
641
+ border-radius: 8px;
642
+ font-family: var(--serif);
643
+ font-size: 20px;
644
+ }
645
+
646
+ .heading-note p {
647
+ margin: 0;
648
+ color: var(--ink-soft);
649
+ font-size: 12px;
650
+ line-height: 1.55;
651
+ }
652
+
653
+ .heading-note strong {
654
+ color: var(--ink);
655
+ }
656
+
657
+ .explorer {
658
+ display: grid;
659
+ gap: 18px;
660
+ }
661
+
662
+ .track-switcher {
663
+ display: grid;
664
+ grid-template-columns: minmax(460px, 0.9fr) 1fr;
665
+ align-items: center;
666
+ gap: 34px;
667
+ padding: 13px;
668
+ background: var(--paper-deep);
669
+ border: 1px solid var(--line);
670
+ border-radius: 18px;
671
+ }
672
+
673
+ .track-tabs {
674
+ display: grid;
675
+ grid-template-columns: repeat(4, 1fr);
676
+ gap: 7px;
677
+ }
678
+
679
+ .track-tab {
680
+ display: flex;
681
+ align-items: center;
682
+ justify-content: space-between;
683
+ gap: 8px;
684
+ min-height: 48px;
685
+ padding: 9px 12px;
686
+ color: var(--ink-soft);
687
+ background: transparent;
688
+ border: 1px solid transparent;
689
+ border-radius: 11px;
690
+ font-size: 12px;
691
+ font-weight: 700;
692
+ }
693
+
694
+ .track-tab b {
695
+ display: grid;
696
+ width: auto;
697
+ min-width: 24px;
698
+ height: 24px;
699
+ padding: 0 5px;
700
+ place-items: center;
701
+ color: var(--ink-soft);
702
+ background: rgba(255, 255, 255, 0.55);
703
+ border-radius: 7px;
704
+ font-size: 9px;
705
+ }
706
+
707
+ .track-tab.is-active {
708
+ color: var(--ink);
709
+ background: var(--white);
710
+ border-color: var(--line);
711
+ box-shadow: 0 8px 20px rgba(47, 58, 49, 0.06);
712
+ }
713
+
714
+ .track-tab.is-active b {
715
+ color: var(--blue);
716
+ background: var(--blue-soft);
717
+ }
718
+
719
+ .track-tab[data-track="diagnostics"].is-active b {
720
+ color: var(--purple);
721
+ background: var(--purple-soft);
722
+ }
723
+
724
+ .track-switcher > p {
725
+ margin: 0;
726
+ padding-right: 18px;
727
+ color: var(--ink-soft);
728
+ font-size: 12px;
729
+ }
730
+
731
+ .category-bar {
732
+ display: flex;
733
+ align-items: center;
734
+ gap: 18px;
735
+ min-height: 46px;
736
+ padding: 0 6px;
737
+ }
738
+
739
+ .category-bar > span {
740
+ color: var(--ink-soft);
741
+ font-size: 10px;
742
+ font-weight: 700;
743
+ letter-spacing: 0.1em;
744
+ text-transform: uppercase;
745
+ }
746
+
747
+ .category-tabs {
748
+ display: flex;
749
+ flex-wrap: wrap;
750
+ gap: 8px;
751
+ }
752
+
753
+ .category-tab {
754
+ padding: 8px 13px;
755
+ color: var(--ink-soft);
756
+ background: transparent;
757
+ border: 1px solid var(--line);
758
+ border-radius: 999px;
759
+ font-size: 11px;
760
+ font-weight: 700;
761
+ }
762
+
763
+ .category-tab.is-active {
764
+ color: var(--paper);
765
+ background: var(--ink);
766
+ border-color: var(--ink);
767
+ }
768
+
769
+ .table-panel {
770
+ overflow: hidden;
771
+ background: var(--white);
772
+ border: 1px solid var(--line);
773
+ border-radius: 24px;
774
+ box-shadow: var(--shadow);
775
+ }
776
+
777
+ .table-panel.is-diagnostics {
778
+ border-color: rgba(121, 105, 173, 0.34);
779
+ }
780
+
781
+ .table-panel.is-diagnostics .table-kicker {
782
+ color: var(--purple);
783
+ }
784
+
785
+ .table-panel-header {
786
+ display: flex;
787
+ align-items: end;
788
+ justify-content: space-between;
789
+ gap: 30px;
790
+ padding: 28px 30px 24px;
791
+ }
792
+
793
+ .table-panel-header > div {
794
+ max-width: 720px;
795
+ }
796
+
797
+ .table-kicker {
798
+ margin-bottom: 7px;
799
+ }
800
+
801
+ .table-panel-header h3 {
802
+ margin-bottom: 5px;
803
+ font-family: var(--serif);
804
+ font-size: 32px;
805
+ font-weight: 400;
806
+ line-height: 1.1;
807
+ letter-spacing: -0.03em;
808
+ }
809
+
810
+ .table-panel-header > div > p:last-child {
811
+ margin: 0;
812
+ color: var(--ink-soft);
813
+ font-size: 12px;
814
+ }
815
+
816
+ .ranking-label {
817
+ display: flex;
818
+ flex-direction: column;
819
+ align-items: end;
820
+ margin: 0;
821
+ color: var(--ink-soft);
822
+ font-size: 10px;
823
+ }
824
+
825
+ .ranking-label strong {
826
+ color: var(--ink);
827
+ font-size: 13px;
828
+ }
829
+
830
+ .ranking-label span {
831
+ margin-top: 2px;
832
+ color: var(--green);
833
+ font-weight: 700;
834
+ }
835
+
836
+ .toolbar {
837
+ display: grid;
838
+ grid-template-columns: minmax(180px, 1fr) minmax(190px, 1fr) 150px 130px auto auto;
839
+ gap: 9px;
840
+ padding: 15px 20px;
841
+ background: var(--paper);
842
+ border-top: 1px solid var(--line);
843
+ border-bottom: 1px solid var(--line);
844
+ }
845
+
846
+ .toolbar label {
847
+ position: relative;
848
+ }
849
+
850
+ .toolbar label > span:not(.sr-only) {
851
+ position: absolute;
852
+ z-index: 1;
853
+ top: 5px;
854
+ left: 12px;
855
+ color: var(--ink-soft);
856
+ font-size: 8px;
857
+ font-weight: 700;
858
+ letter-spacing: 0.08em;
859
+ pointer-events: none;
860
+ text-transform: uppercase;
861
+ }
862
+
863
+ .toolbar input,
864
+ .toolbar select,
865
+ .tool-button {
866
+ width: 100%;
867
+ height: 44px;
868
+ background: var(--white);
869
+ border: 1px solid var(--line);
870
+ border-radius: 10px;
871
+ outline: none;
872
+ font-size: 11px;
873
+ font-weight: 600;
874
+ }
875
+
876
+ .toolbar select {
877
+ padding: 14px 30px 3px 11px;
878
+ }
879
+
880
+ .toolbar .metric-select-control > span {
881
+ color: var(--blue);
882
+ }
883
+
884
+ .metric-select-control select {
885
+ background: var(--blue-soft);
886
+ border-color: rgba(75, 123, 236, 0.28);
887
+ }
888
+
889
+ .search-control svg {
890
+ position: absolute;
891
+ top: 13px;
892
+ left: 13px;
893
+ width: 18px;
894
+ fill: none;
895
+ stroke: var(--ink-soft);
896
+ stroke-linecap: round;
897
+ stroke-width: 1.8;
898
+ }
899
+
900
+ .search-control input {
901
+ padding: 0 12px 0 40px;
902
+ }
903
+
904
+ .toolbar input:focus,
905
+ .toolbar select:focus,
906
+ .tool-button:focus-visible,
907
+ .track-tab:focus-visible,
908
+ .category-tab:focus-visible,
909
+ .metric-card button:focus-visible {
910
+ border-color: var(--blue);
911
+ box-shadow: 0 0 0 3px rgba(75, 123, 236, 0.15);
912
+ }
913
+
914
+ .tool-button {
915
+ width: auto;
916
+ min-width: 78px;
917
+ padding: 0 12px;
918
+ }
919
+
920
+ .download-button {
921
+ color: var(--paper);
922
+ background: var(--ink);
923
+ border-color: var(--ink);
924
+ }
925
+
926
+ .table-scroll {
927
+ overflow-x: auto;
928
+ outline: none;
929
+ scrollbar-color: var(--line-strong) transparent;
930
+ scrollbar-width: thin;
931
+ }
932
+
933
+ .table-scroll:focus-visible {
934
+ box-shadow: inset 0 0 0 3px rgba(75, 123, 236, 0.16);
935
+ }
936
+
937
+ table {
938
+ width: 100%;
939
+ min-width: 1050px;
940
+ border-collapse: separate;
941
+ border-spacing: 0;
942
+ font-variant-numeric: tabular-nums;
943
+ }
944
+
945
+ thead th {
946
+ position: sticky;
947
+ z-index: 3;
948
+ top: 0;
949
+ height: 62px;
950
+ padding: 0 13px;
951
+ color: var(--ink-soft);
952
+ background: var(--white);
953
+ border-bottom: 1px solid var(--line-strong);
954
+ font-size: 9px;
955
+ font-weight: 700;
956
+ letter-spacing: 0.06em;
957
+ text-align: left;
958
+ text-transform: uppercase;
959
+ white-space: nowrap;
960
+ }
961
+
962
+ thead th.metric-column {
963
+ min-width: 86px;
964
+ padding: 0;
965
+ text-align: center;
966
+ }
967
+
968
+ .metric-column button {
969
+ display: grid;
970
+ grid-template-columns: auto auto;
971
+ align-content: center;
972
+ justify-content: center;
973
+ gap: 0 6px;
974
+ width: 100%;
975
+ height: 61px;
976
+ padding: 0 8px;
977
+ color: inherit;
978
+ background: transparent;
979
+ border: 0;
980
+ }
981
+
982
+ .metric-column button span {
983
+ color: var(--ink);
984
+ font-size: 11px;
985
+ letter-spacing: 0;
986
+ text-transform: none;
987
+ }
988
+
989
+ .metric-column button i {
990
+ color: var(--ink-soft);
991
+ font-size: 10px;
992
+ font-style: normal;
993
+ }
994
+
995
+ .metric-column button small {
996
+ grid-column: 1 / -1;
997
+ margin-top: 2px;
998
+ color: var(--ink-soft);
999
+ font-size: 7px;
1000
+ letter-spacing: 0.07em;
1001
+ text-transform: uppercase;
1002
+ }
1003
+
1004
+ thead th.is-sorted {
1005
+ background: var(--blue-soft);
1006
+ }
1007
+
1008
+ thead th.is-sorted button span,
1009
+ thead th.is-sorted button i {
1010
+ color: var(--blue);
1011
+ }
1012
+
1013
+ tbody th,
1014
+ tbody td {
1015
+ height: 70px;
1016
+ padding: 11px 13px;
1017
+ background: var(--white);
1018
+ border-bottom: 1px solid var(--line);
1019
+ font-size: 12px;
1020
+ text-align: left;
1021
+ }
1022
+
1023
+ tbody tr:last-child th,
1024
+ tbody tr:last-child td {
1025
+ border-bottom: 0;
1026
+ }
1027
+
1028
+ tbody tr:hover th,
1029
+ tbody tr:hover td {
1030
+ background: #fbfaf5;
1031
+ }
1032
+
1033
+ .rank-heading,
1034
+ .rank-cell {
1035
+ position: sticky;
1036
+ z-index: 5;
1037
+ left: 0;
1038
+ width: 54px;
1039
+ min-width: 54px;
1040
+ text-align: center;
1041
+ }
1042
+
1043
+ .model-heading,
1044
+ .model-cell {
1045
+ position: sticky;
1046
+ z-index: 4;
1047
+ left: 54px;
1048
+ width: 184px;
1049
+ min-width: 184px;
1050
+ box-shadow: 1px 0 0 var(--line);
1051
+ }
1052
+
1053
+ thead .rank-heading,
1054
+ thead .model-heading {
1055
+ z-index: 8;
1056
+ }
1057
+
1058
+ .rank-badge {
1059
+ display: inline-grid;
1060
+ width: 27px;
1061
+ height: 27px;
1062
+ place-items: center;
1063
+ color: var(--ink-soft);
1064
+ background: var(--paper);
1065
+ border-radius: 8px;
1066
+ font-size: 10px;
1067
+ font-weight: 700;
1068
+ }
1069
+
1070
+ .rank-badge.rank-1 {
1071
+ color: #8b5b17;
1072
+ background: var(--gold-soft);
1073
+ }
1074
+
1075
+ .rank-badge.rank-2 {
1076
+ color: #53636c;
1077
+ background: var(--silver-soft);
1078
+ }
1079
+
1080
+ .rank-badge.rank-3 {
1081
+ color: #9d5848;
1082
+ background: var(--coral-soft);
1083
+ }
1084
+
1085
+ .model-cell a {
1086
+ display: inline-flex;
1087
+ align-items: center;
1088
+ gap: 5px;
1089
+ font-size: 12px;
1090
+ font-weight: 700;
1091
+ }
1092
+
1093
+ .model-cell a i {
1094
+ color: var(--blue);
1095
+ font-size: 9px;
1096
+ font-style: normal;
1097
+ }
1098
+
1099
+ .model-cell small {
1100
+ display: block;
1101
+ max-width: 160px;
1102
+ margin-top: 3px;
1103
+ overflow: hidden;
1104
+ color: var(--ink-soft);
1105
+ font-size: 8px;
1106
+ font-weight: 500;
1107
+ text-overflow: ellipsis;
1108
+ white-space: nowrap;
1109
+ }
1110
+
1111
+ .meta-cell {
1112
+ min-width: 104px;
1113
+ color: var(--ink-soft);
1114
+ white-space: nowrap;
1115
+ }
1116
+
1117
+ .tag {
1118
+ display: inline-block;
1119
+ padding: 5px 8px;
1120
+ border-radius: 7px;
1121
+ font-size: 8px;
1122
+ font-weight: 700;
1123
+ letter-spacing: 0.03em;
1124
+ text-transform: uppercase;
1125
+ }
1126
+
1127
+ .tag-native {
1128
+ color: #3a609e;
1129
+ background: var(--blue-soft);
1130
+ }
1131
+
1132
+ .tag-cascaded {
1133
+ color: #557741;
1134
+ background: var(--green-soft);
1135
+ }
1136
+
1137
+ .access-dot {
1138
+ display: inline-block;
1139
+ width: 6px;
1140
+ height: 6px;
1141
+ margin-right: 6px;
1142
+ background: var(--green);
1143
+ border-radius: 50%;
1144
+ }
1145
+
1146
+ .access-web {
1147
+ background: var(--coral);
1148
+ }
1149
+
1150
+ .score-cell {
1151
+ min-width: 86px;
1152
+ text-align: center;
1153
+ white-space: nowrap;
1154
+ }
1155
+
1156
+ .score-cell span {
1157
+ font-size: 11px;
1158
+ font-weight: 600;
1159
+ }
1160
+
1161
+ .score-cell small {
1162
+ margin-left: 2px;
1163
+ color: var(--ink-soft);
1164
+ font-size: 7px;
1165
+ }
1166
+
1167
+ .score-cell.is-sorted {
1168
+ background: rgba(230, 239, 255, 0.5);
1169
+ }
1170
+
1171
+ .score-cell.is-best span {
1172
+ display: inline-block;
1173
+ padding: 4px 7px;
1174
+ color: #8b5b17;
1175
+ background: var(--gold-soft);
1176
+ border-radius: 7px;
1177
+ font-weight: 700;
1178
+ }
1179
+
1180
+ .score-cell.is-runner-up span {
1181
+ color: #596b74;
1182
+ font-weight: 700;
1183
+ text-decoration: underline;
1184
+ text-decoration-color: #b0bdc4;
1185
+ text-decoration-thickness: 2px;
1186
+ text-underline-offset: 4px;
1187
+ }
1188
+
1189
+ .empty-row {
1190
+ height: 180px;
1191
+ color: var(--ink-soft);
1192
+ text-align: center;
1193
+ }
1194
+
1195
+ .table-footer {
1196
+ display: flex;
1197
+ align-items: center;
1198
+ justify-content: space-between;
1199
+ gap: 20px;
1200
+ min-height: 54px;
1201
+ padding: 10px 22px;
1202
+ color: var(--ink-soft);
1203
+ background: var(--paper);
1204
+ border-top: 1px solid var(--line);
1205
+ font-size: 9px;
1206
+ font-weight: 600;
1207
+ }
1208
+
1209
+ .table-footer p {
1210
+ margin: 0;
1211
+ }
1212
+
1213
+ .legend {
1214
+ display: flex;
1215
+ flex-wrap: wrap;
1216
+ justify-content: flex-end;
1217
+ gap: 15px;
1218
+ }
1219
+
1220
+ .legend span {
1221
+ display: inline-flex;
1222
+ align-items: center;
1223
+ gap: 6px;
1224
+ }
1225
+
1226
+ .legend i {
1227
+ display: inline-block;
1228
+ width: 10px;
1229
+ height: 10px;
1230
+ border-radius: 3px;
1231
+ }
1232
+
1233
+ .legend-best {
1234
+ background: var(--gold-soft);
1235
+ border: 1px solid rgba(200, 139, 47, 0.4);
1236
+ }
1237
+
1238
+ .legend-second {
1239
+ background: var(--silver-soft);
1240
+ border-bottom: 2px solid #b0bdc4;
1241
+ }
1242
+
1243
+ .evidence-note {
1244
+ display: grid;
1245
+ grid-template-columns: auto 1fr;
1246
+ gap: 12px;
1247
+ align-items: start;
1248
+ padding: 16px 18px;
1249
+ color: var(--ink-soft);
1250
+ background: rgba(230, 239, 255, 0.65);
1251
+ border: 1px solid rgba(75, 123, 236, 0.16);
1252
+ border-radius: 14px;
1253
+ }
1254
+
1255
+ .evidence-note > span {
1256
+ display: grid;
1257
+ width: 24px;
1258
+ height: 24px;
1259
+ place-items: center;
1260
+ color: var(--blue);
1261
+ background: var(--white);
1262
+ border-radius: 50%;
1263
+ font-family: var(--serif);
1264
+ font-size: 13px;
1265
+ font-weight: 700;
1266
+ }
1267
+
1268
+ .evidence-note p {
1269
+ margin: 1px 0 0;
1270
+ font-size: 11px;
1271
+ }
1272
+
1273
+ .evidence-note p + p {
1274
+ margin-top: 7px;
1275
+ }
1276
+
1277
+ .evidence-note strong {
1278
+ color: var(--ink);
1279
+ }
1280
+
1281
+ .data-error {
1282
+ margin: 20px;
1283
+ padding: 16px;
1284
+ color: #8e3e2b;
1285
+ background: var(--coral-soft);
1286
+ border: 1px solid rgba(204, 102, 78, 0.22);
1287
+ border-radius: 12px;
1288
+ }
1289
+
1290
+ .data-error p {
1291
+ margin: 4px 0 0;
1292
+ font-size: 12px;
1293
+ }
1294
+
1295
+ .metrics-section {
1296
+ color: var(--paper);
1297
+ background: var(--ink);
1298
+ }
1299
+
1300
+ .metrics-section .section-intro {
1301
+ margin: 0 0 5px;
1302
+ color: rgba(255, 255, 255, 0.56);
1303
+ font-size: 16px;
1304
+ }
1305
+
1306
+ .metric-guide {
1307
+ display: grid;
1308
+ grid-template-columns: repeat(3, minmax(0, 1fr));
1309
+ gap: 13px;
1310
+ }
1311
+
1312
+ .metric-card {
1313
+ min-height: 270px;
1314
+ padding: 22px;
1315
+ color: var(--ink);
1316
+ background: var(--white);
1317
+ border: 2px solid transparent;
1318
+ border-radius: 18px;
1319
+ transition: transform 150ms ease, border-color 150ms ease;
1320
+ }
1321
+
1322
+ .metric-card:hover {
1323
+ transform: translateY(-3px);
1324
+ }
1325
+
1326
+ .metric-card.is-active {
1327
+ background: var(--blue-soft);
1328
+ border-color: var(--blue);
1329
+ }
1330
+
1331
+ .metric-card > button {
1332
+ display: flex;
1333
+ align-items: center;
1334
+ justify-content: space-between;
1335
+ width: 100%;
1336
+ margin-bottom: 30px;
1337
+ padding: 0;
1338
+ background: transparent;
1339
+ border: 0;
1340
+ }
1341
+
1342
+ .metric-abbr {
1343
+ padding: 6px 9px;
1344
+ color: var(--ink);
1345
+ background: var(--paper);
1346
+ border-radius: 7px;
1347
+ font-size: 10px;
1348
+ font-weight: 800;
1349
+ letter-spacing: 0.04em;
1350
+ }
1351
+
1352
+ .metric-card.is-active .metric-abbr {
1353
+ color: var(--blue);
1354
+ background: var(--white);
1355
+ }
1356
+
1357
+ .direction {
1358
+ padding: 5px 8px;
1359
+ border-radius: 999px;
1360
+ font-size: 8px;
1361
+ font-weight: 700;
1362
+ letter-spacing: 0.05em;
1363
+ text-transform: uppercase;
1364
+ }
1365
+
1366
+ .direction-higher {
1367
+ color: #557741;
1368
+ background: var(--green-soft);
1369
+ }
1370
+
1371
+ .direction-lower {
1372
+ color: #a34f3c;
1373
+ background: var(--coral-soft);
1374
+ }
1375
+
1376
+ .metric-card h3 {
1377
+ margin-bottom: 8px;
1378
+ font-size: 18px;
1379
+ line-height: 1.2;
1380
+ letter-spacing: -0.025em;
1381
+ }
1382
+
1383
+ .metric-card > p {
1384
+ min-height: 58px;
1385
+ margin-bottom: 20px;
1386
+ color: var(--ink-soft);
1387
+ font-size: 11px;
1388
+ }
1389
+
1390
+ .metric-card dl {
1391
+ display: grid;
1392
+ gap: 7px;
1393
+ margin: 0;
1394
+ padding-top: 15px;
1395
+ border-top: 1px solid var(--line);
1396
+ }
1397
+
1398
+ .metric-card dl div {
1399
+ display: grid;
1400
+ grid-template-columns: 65px 1fr;
1401
+ gap: 10px;
1402
+ }
1403
+
1404
+ .metric-card dt {
1405
+ color: var(--ink-soft);
1406
+ font-size: 8px;
1407
+ font-weight: 700;
1408
+ letter-spacing: 0.08em;
1409
+ text-transform: uppercase;
1410
+ }
1411
+
1412
+ .metric-card dd {
1413
+ margin: 0;
1414
+ font-size: 9px;
1415
+ font-weight: 600;
1416
+ text-align: right;
1417
+ }
1418
+
1419
+ .protocol-section {
1420
+ background: var(--paper-deep);
1421
+ }
1422
+
1423
+ .protocol-grid {
1424
+ display: grid;
1425
+ grid-template-columns: repeat(3, 1fr);
1426
+ gap: 16px;
1427
+ }
1428
+
1429
+ .protocol-grid article {
1430
+ min-height: 280px;
1431
+ padding: 28px;
1432
+ background: var(--white);
1433
+ border: 1px solid var(--line);
1434
+ border-radius: 20px;
1435
+ }
1436
+
1437
+ .protocol-grid article:nth-child(2) {
1438
+ background: var(--green-soft);
1439
+ }
1440
+
1441
+ .protocol-grid article:nth-child(3) {
1442
+ background: var(--blue-soft);
1443
+ }
1444
+
1445
+ .protocol-grid article > span {
1446
+ display: block;
1447
+ margin-bottom: 70px;
1448
+ color: var(--coral);
1449
+ font-family: var(--serif);
1450
+ font-size: 24px;
1451
+ }
1452
+
1453
+ .protocol-grid h3 {
1454
+ margin-bottom: 10px;
1455
+ font-size: 22px;
1456
+ letter-spacing: -0.03em;
1457
+ }
1458
+
1459
+ .protocol-grid p {
1460
+ margin: 0;
1461
+ color: var(--ink-soft);
1462
+ font-size: 13px;
1463
+ }
1464
+
1465
+ .submission-section {
1466
+ background: var(--coral-soft);
1467
+ }
1468
+
1469
+ .submission-grid {
1470
+ display: grid;
1471
+ grid-template-columns: minmax(0, 0.85fr) minmax(430px, 1fr);
1472
+ gap: 100px;
1473
+ align-items: center;
1474
+ }
1475
+
1476
+ .submission-section h2 {
1477
+ max-width: 600px;
1478
+ margin-bottom: 22px;
1479
+ font-family: var(--serif);
1480
+ font-size: clamp(42px, 5vw, 65px);
1481
+ font-weight: 400;
1482
+ line-height: 1.02;
1483
+ letter-spacing: -0.04em;
1484
+ }
1485
+
1486
+ .submission-copy {
1487
+ max-width: 620px;
1488
+ margin-bottom: 28px;
1489
+ color: var(--ink-soft);
1490
+ font-size: 16px;
1491
+ }
1492
+
1493
+ .submission-button {
1494
+ min-width: 220px;
1495
+ }
1496
+
1497
+ .is-disabled {
1498
+ cursor: default;
1499
+ opacity: 0.56;
1500
+ pointer-events: none;
1501
+ }
1502
+
1503
+ .submission-steps {
1504
+ display: grid;
1505
+ gap: 9px;
1506
+ margin: 0;
1507
+ padding: 0;
1508
+ list-style: none;
1509
+ }
1510
+
1511
+ .submission-steps li {
1512
+ display: grid;
1513
+ grid-template-columns: auto 1fr;
1514
+ gap: 16px;
1515
+ padding: 19px;
1516
+ background: rgba(255, 254, 249, 0.78);
1517
+ border: 1px solid rgba(204, 102, 78, 0.18);
1518
+ border-radius: 15px;
1519
+ }
1520
+
1521
+ .submission-steps li > span {
1522
+ display: grid;
1523
+ width: 36px;
1524
+ height: 36px;
1525
+ place-items: center;
1526
+ color: var(--coral);
1527
+ background: var(--coral-soft);
1528
+ border-radius: 10px;
1529
+ font-family: var(--serif);
1530
+ font-size: 18px;
1531
+ }
1532
+
1533
+ .submission-steps strong {
1534
+ font-size: 13px;
1535
+ }
1536
+
1537
+ .submission-steps p {
1538
+ margin: 3px 0 0;
1539
+ color: var(--ink-soft);
1540
+ font-size: 11px;
1541
+ }
1542
+
1543
+ .resource-band {
1544
+ padding: 24px 0;
1545
+ color: var(--paper);
1546
+ background: var(--ink);
1547
+ border-bottom: 1px solid rgba(255, 255, 255, 0.11);
1548
+ }
1549
+
1550
+ .resources {
1551
+ display: grid;
1552
+ grid-template-columns: repeat(3, 1fr);
1553
+ gap: 10px;
1554
+ }
1555
+
1556
+ .resource-link {
1557
+ display: grid;
1558
+ grid-template-columns: auto 1fr auto;
1559
+ align-items: center;
1560
+ gap: 13px;
1561
+ min-height: 70px;
1562
+ padding: 12px 15px;
1563
+ background: rgba(255, 255, 255, 0.055);
1564
+ border: 1px solid rgba(255, 255, 255, 0.11);
1565
+ border-radius: 13px;
1566
+ transition: background 150ms ease, transform 150ms ease;
1567
+ }
1568
+
1569
+ .resource-link:hover:not(.is-disabled) {
1570
+ background: rgba(255, 255, 255, 0.09);
1571
+ transform: translateY(-2px);
1572
+ }
1573
+
1574
+ .resource-symbol {
1575
+ display: grid;
1576
+ width: 34px;
1577
+ height: 34px;
1578
+ place-items: center;
1579
+ color: var(--ink);
1580
+ background: var(--paper);
1581
+ border-radius: 9px;
1582
+ font-size: 11px;
1583
+ font-weight: 700;
1584
+ }
1585
+
1586
+ .resource-link > span:nth-child(2) {
1587
+ display: flex;
1588
+ flex-direction: column;
1589
+ }
1590
+
1591
+ .resource-link strong {
1592
+ font-size: 12px;
1593
+ }
1594
+
1595
+ .resource-link small {
1596
+ margin-top: 2px;
1597
+ color: rgba(255, 255, 255, 0.48);
1598
+ font-size: 9px;
1599
+ }
1600
+
1601
+ .resource-link > b {
1602
+ color: rgba(255, 255, 255, 0.46);
1603
+ font-size: 11px;
1604
+ }
1605
+
1606
+ footer {
1607
+ padding: 34px 0;
1608
+ color: var(--paper);
1609
+ background: #101815;
1610
+ }
1611
+
1612
+ .footer-inner {
1613
+ display: grid;
1614
+ grid-template-columns: auto 1fr auto;
1615
+ align-items: center;
1616
+ gap: 30px;
1617
+ }
1618
+
1619
+ .footer-brand .brand-mark {
1620
+ color: var(--paper);
1621
+ }
1622
+
1623
+ .footer-brand small {
1624
+ color: rgba(255, 255, 255, 0.46);
1625
+ }
1626
+
1627
+ .footer-inner > p {
1628
+ margin: 0;
1629
+ color: rgba(255, 255, 255, 0.46);
1630
+ font-size: 10px;
1631
+ text-align: center;
1632
+ }
1633
+
1634
+ .footer-inner > a {
1635
+ font-size: 10px;
1636
+ font-weight: 700;
1637
+ }
1638
+
1639
+ .noscript {
1640
+ position: fixed;
1641
+ z-index: 1000;
1642
+ right: 20px;
1643
+ bottom: 20px;
1644
+ padding: 12px 16px;
1645
+ color: white;
1646
+ background: #a34f3c;
1647
+ border-radius: 10px;
1648
+ font-size: 12px;
1649
+ }
1650
+
1651
+ @media (max-width: 1080px) {
1652
+ .hero-inner {
1653
+ grid-template-columns: minmax(0, 1fr) minmax(360px, 0.8fr);
1654
+ gap: 52px;
1655
+ }
1656
+
1657
+ .toolbar {
1658
+ grid-template-columns: minmax(0, 1.2fr) minmax(0, 1.2fr) minmax(130px, 0.8fr);
1659
+ }
1660
+
1661
+ .tool-button {
1662
+ width: 100%;
1663
+ }
1664
+
1665
+ .metric-guide {
1666
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1667
+ }
1668
+ }
1669
+
1670
+ @media (max-width: 860px) {
1671
+ .shell {
1672
+ width: min(100% - 36px, 1320px);
1673
+ }
1674
+
1675
+ .site-header nav > a:not(.nav-project) {
1676
+ display: none;
1677
+ }
1678
+
1679
+ .hero {
1680
+ padding: 60px 0;
1681
+ }
1682
+
1683
+ .hero-inner,
1684
+ .split-heading,
1685
+ .track-switcher,
1686
+ .submission-grid {
1687
+ grid-template-columns: 1fr;
1688
+ }
1689
+
1690
+ .hero-inner {
1691
+ gap: 40px;
1692
+ }
1693
+
1694
+ .hero-copy {
1695
+ text-align: center;
1696
+ }
1697
+
1698
+ .hero h1,
1699
+ .hero-description {
1700
+ margin-right: auto;
1701
+ margin-left: auto;
1702
+ }
1703
+
1704
+ .eyebrow {
1705
+ margin-right: auto;
1706
+ margin-left: auto;
1707
+ }
1708
+
1709
+ .hero-actions {
1710
+ justify-content: center;
1711
+ }
1712
+
1713
+ .stream-card {
1714
+ width: min(100%, 600px);
1715
+ min-height: auto;
1716
+ margin: 0 auto;
1717
+ }
1718
+
1719
+ .stats {
1720
+ grid-template-columns: repeat(3, 1fr);
1721
+ gap: 28px 0;
1722
+ }
1723
+
1724
+ .stats > div:nth-child(3) {
1725
+ border-right: 0;
1726
+ }
1727
+
1728
+ .section {
1729
+ padding: 88px 0;
1730
+ }
1731
+
1732
+ .split-heading {
1733
+ align-items: start;
1734
+ gap: 28px;
1735
+ }
1736
+
1737
+ .heading-note {
1738
+ max-width: 600px;
1739
+ }
1740
+
1741
+ .track-switcher {
1742
+ gap: 16px;
1743
+ }
1744
+
1745
+ .track-switcher > p {
1746
+ padding: 0 8px 7px;
1747
+ }
1748
+
1749
+ .toolbar {
1750
+ grid-template-columns: 1fr 1fr;
1751
+ }
1752
+
1753
+ .search-control,
1754
+ .metric-select-control {
1755
+ grid-column: 1 / -1;
1756
+ }
1757
+
1758
+ .protocol-grid {
1759
+ grid-template-columns: 1fr;
1760
+ }
1761
+
1762
+ .protocol-grid article {
1763
+ min-height: 220px;
1764
+ }
1765
+
1766
+ .protocol-grid article > span {
1767
+ margin-bottom: 45px;
1768
+ }
1769
+
1770
+ .submission-grid {
1771
+ gap: 52px;
1772
+ }
1773
+
1774
+ .resources {
1775
+ grid-template-columns: 1fr;
1776
+ }
1777
+
1778
+ .footer-inner {
1779
+ grid-template-columns: 1fr;
1780
+ justify-items: center;
1781
+ }
1782
+ }
1783
+
1784
+ @media (max-width: 600px) {
1785
+ .shell {
1786
+ width: min(100% - 24px, 1320px);
1787
+ }
1788
+
1789
+ .site-header {
1790
+ height: 66px;
1791
+ }
1792
+
1793
+ .brand-mark {
1794
+ width: 32px;
1795
+ height: 32px;
1796
+ }
1797
+
1798
+ .site-header .nav-project {
1799
+ padding: 7px 11px;
1800
+ font-size: 10px;
1801
+ }
1802
+
1803
+ .hero {
1804
+ padding: 48px 0 52px;
1805
+ }
1806
+
1807
+ .hero h1 {
1808
+ font-size: clamp(52px, 16vw, 76px);
1809
+ }
1810
+
1811
+ .hero-tagline {
1812
+ font-size: 20px;
1813
+ }
1814
+
1815
+ .hero-description {
1816
+ font-size: 14px;
1817
+ }
1818
+
1819
+ .hero-actions {
1820
+ display: grid;
1821
+ }
1822
+
1823
+ .stream-card {
1824
+ padding: 17px;
1825
+ border-radius: 20px;
1826
+ }
1827
+
1828
+ .stream-card::before {
1829
+ display: none;
1830
+ }
1831
+
1832
+ .stream-card-header {
1833
+ gap: 15px;
1834
+ font-size: 9px;
1835
+ }
1836
+
1837
+ .signal-group {
1838
+ padding: 20px 2px;
1839
+ }
1840
+
1841
+ .update-track span {
1842
+ width: 27px;
1843
+ height: 27px;
1844
+ font-size: 8px;
1845
+ }
1846
+
1847
+ .stats {
1848
+ grid-template-columns: 1fr 1fr;
1849
+ }
1850
+
1851
+ .stats > div {
1852
+ border-right: 0;
1853
+ }
1854
+
1855
+ .stats > div:last-child {
1856
+ grid-column: 1 / -1;
1857
+ }
1858
+
1859
+ .section {
1860
+ padding: 72px 0;
1861
+ }
1862
+
1863
+ .section-heading {
1864
+ margin-bottom: 40px;
1865
+ }
1866
+
1867
+ .section-heading h2 {
1868
+ font-size: 40px;
1869
+ }
1870
+
1871
+ .track-switcher {
1872
+ padding: 8px;
1873
+ }
1874
+
1875
+ .track-tabs {
1876
+ gap: 4px;
1877
+ }
1878
+
1879
+ .track-tab {
1880
+ justify-content: center;
1881
+ min-height: 46px;
1882
+ padding: 7px;
1883
+ }
1884
+
1885
+ .track-tab b {
1886
+ display: none;
1887
+ }
1888
+
1889
+ .category-bar {
1890
+ align-items: flex-start;
1891
+ flex-direction: column;
1892
+ gap: 8px;
1893
+ padding: 3px;
1894
+ }
1895
+
1896
+ .category-tabs {
1897
+ width: 100%;
1898
+ }
1899
+
1900
+ .category-tab {
1901
+ flex: 1;
1902
+ }
1903
+
1904
+ .table-panel {
1905
+ border-radius: 17px;
1906
+ }
1907
+
1908
+ .table-panel-header {
1909
+ align-items: start;
1910
+ flex-direction: column;
1911
+ padding: 22px 18px 18px;
1912
+ }
1913
+
1914
+ .table-panel-header h3 {
1915
+ font-size: 28px;
1916
+ }
1917
+
1918
+ .ranking-label {
1919
+ align-items: start;
1920
+ }
1921
+
1922
+ .toolbar {
1923
+ grid-template-columns: 1fr 1fr;
1924
+ padding: 12px;
1925
+ }
1926
+
1927
+ .search-control {
1928
+ grid-column: 1 / -1;
1929
+ }
1930
+
1931
+ .tool-button {
1932
+ min-width: 0;
1933
+ }
1934
+
1935
+ .model-heading,
1936
+ .model-cell {
1937
+ width: 155px;
1938
+ min-width: 155px;
1939
+ }
1940
+
1941
+ .model-cell small {
1942
+ max-width: 132px;
1943
+ }
1944
+
1945
+ .table-footer {
1946
+ align-items: start;
1947
+ flex-direction: column;
1948
+ padding: 14px 16px;
1949
+ }
1950
+
1951
+ .legend {
1952
+ justify-content: flex-start;
1953
+ }
1954
+
1955
+ .metric-guide {
1956
+ grid-template-columns: 1fr;
1957
+ }
1958
+
1959
+ .metric-card {
1960
+ min-height: auto;
1961
+ }
1962
+
1963
+ .protocol-grid article {
1964
+ min-height: 200px;
1965
+ padding: 23px;
1966
+ }
1967
+
1968
+ .submission-section h2 {
1969
+ font-size: 42px;
1970
+ }
1971
+
1972
+ .submission-steps li {
1973
+ padding: 15px;
1974
+ }
1975
+ }
1976
+
1977
+ @media (prefers-reduced-motion: reduce) {
1978
+ html {
1979
+ scroll-behavior: auto;
1980
+ }
1981
+
1982
+ *,
1983
+ *::before,
1984
+ *::after {
1985
+ transition-duration: 0.01ms !important;
1986
+ }
1987
+ }