Urdatorn commited on
Commit
0c4147f
·
1 Parent(s): 24700e8

Rebuild leaderboard with SvelteKit 5

Browse files
.gitignore ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ node_modules/
2
+ .svelte-kit/
3
+ build/
4
+ .vite/
5
+ *.log
NOTICE ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ Sphragis Leaderboard
2
+ Copyright 2026 Albin Thörn Cleland
3
+
4
+ This product adapts interface patterns from leaderboard-frontend:
5
+ https://github.com/embeddings-benchmark/leaderboard-frontend
6
+ Copyright the leaderboard-frontend contributors, licensed under Apache-2.0.
README.md CHANGED
@@ -4,9 +4,14 @@ emoji: 🥇
4
  colorFrom: green
5
  colorTo: indigo
6
  sdk: static
 
 
7
  pinned: true
8
  license: apache-2.0
9
  short_description: Leaderboard for Ancient Greek author attribution
 
 
 
10
  tags:
11
  - leaderboard
12
  - authorship-attribution
@@ -15,17 +20,23 @@ tags:
15
 
16
  # Sphragis Leaderboard
17
 
18
- A serverless HTML leaderboard for the nine Sphragis Ancient Greek
19
- authorship-attribution tasks. It runs entirely in the visitor's browser and
20
- does not require Python, Pyodide, CPU, or GPU Space hardware.
21
 
22
- Scores are embedded in `index.html` and are test macro-F1 percentages. Add one
23
- row per reproducible model configuration. If validation
24
  produces statistically or numerically tied candidates, report every tied test
25
  result (or a range); never select a winner using the test split.
26
 
27
- To test locally, serve the repository over HTTP and open the displayed URL:
28
 
29
  ```bash
30
- python3 -m http.server 8000
 
31
  ```
 
 
 
 
 
 
4
  colorFrom: green
5
  colorTo: indigo
6
  sdk: static
7
+ app_build_command: npm run build
8
+ app_file: build/index.html
9
  pinned: true
10
  license: apache-2.0
11
  short_description: Leaderboard for Ancient Greek author attribution
12
+ fullWidth: true
13
+ datasets:
14
+ - Urdatorn/sphragis
15
  tags:
16
  - leaderboard
17
  - authorship-attribution
 
20
 
21
  # Sphragis Leaderboard
22
 
23
+ A statically generated SvelteKit + TypeScript leaderboard for the nine Sphragis
24
+ Ancient Greek authorship-attribution tasks. The UI uses Svelte 5 runes and runs
25
+ without Python, CPU, or GPU Space hardware.
26
 
27
+ Scores are typed in `src/lib/data.ts` and are test macro-F1 percentages. Add
28
+ one row per reproducible model configuration. If validation
29
  produces statistically or numerically tied candidates, report every tied test
30
  result (or a range); never select a winner using the test split.
31
 
32
+ Install and run locally:
33
 
34
  ```bash
35
+ npm ci
36
+ npm run dev
37
  ```
38
+
39
+ The table interaction and visual architecture adapt patterns from the
40
+ Apache-2.0-licensed
41
+ [`embeddings-benchmark/leaderboard-frontend`](https://github.com/embeddings-benchmark/leaderboard-frontend).
42
+ See `NOTICE` for attribution.
index.html DELETED
@@ -1,241 +0,0 @@
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
- <title>Sphragis benchmark leaderboard</title>
7
- <meta name="description" content="Leaderboard for the Sphragis Ancient Greek authorship-attribution benchmark." />
8
- <style>
9
- :root {
10
- color-scheme: light dark;
11
- --background: #ffffff;
12
- --panel: #ffffff;
13
- --text: #171717;
14
- --muted: #656565;
15
- --border: #e5e7eb;
16
- --header: #f7f7f8;
17
- --input: #ffffff;
18
- --focus: #2563eb;
19
- --shadow: 0 1px 2px rgb(0 0 0 / 5%);
20
- }
21
-
22
- @media (prefers-color-scheme: dark) {
23
- :root {
24
- --background: #0b0f19;
25
- --panel: #111827;
26
- --text: #f3f4f6;
27
- --muted: #a1a1aa;
28
- --border: #303744;
29
- --header: #1b2432;
30
- --input: #111827;
31
- --focus: #60a5fa;
32
- --shadow: none;
33
- }
34
- }
35
-
36
- * { box-sizing: border-box; }
37
-
38
- body {
39
- margin: 0;
40
- background: var(--background);
41
- color: var(--text);
42
- font: 15px/1.55 ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
43
- }
44
-
45
- main {
46
- width: min(100% - 32px, 1440px);
47
- margin: 0 auto;
48
- padding: 40px 0 64px;
49
- }
50
-
51
- h1 { margin: 0 0 14px; font-size: clamp(1.8rem, 4vw, 2.35rem); line-height: 1.2; }
52
- h2 { margin: 34px 0 12px; font-size: 1.2rem; }
53
- p { max-width: 880px; margin: 10px 0; }
54
- a { color: var(--focus); }
55
- code { font-size: 0.92em; }
56
-
57
- .toolbar {
58
- display: flex;
59
- align-items: center;
60
- justify-content: flex-end;
61
- margin: 28px 0 10px;
62
- }
63
-
64
- label {
65
- position: absolute;
66
- width: 1px;
67
- height: 1px;
68
- padding: 0;
69
- margin: -1px;
70
- overflow: hidden;
71
- clip: rect(0, 0, 0, 0);
72
- white-space: nowrap;
73
- border: 0;
74
- }
75
-
76
- input[type="search"] {
77
- width: min(100%, 320px);
78
- border: 1px solid var(--border);
79
- border-radius: 8px;
80
- background: var(--input);
81
- color: var(--text);
82
- padding: 9px 12px;
83
- font: inherit;
84
- box-shadow: var(--shadow);
85
- }
86
-
87
- input[type="search"]:focus {
88
- outline: 2px solid var(--focus);
89
- outline-offset: 1px;
90
- }
91
-
92
- .table-wrap {
93
- overflow-x: auto;
94
- border: 1px solid var(--border);
95
- border-radius: 9px;
96
- background: var(--panel);
97
- box-shadow: var(--shadow);
98
- }
99
-
100
- table { width: 100%; border-collapse: collapse; white-space: nowrap; }
101
- th, td { padding: 11px 13px; border-right: 1px solid var(--border); border-bottom: 1px solid var(--border); text-align: left; }
102
- th:last-child, td:last-child { border-right: 0; }
103
- tbody tr:last-child td { border-bottom: 0; }
104
- th { background: var(--header); font-size: 0.86rem; font-weight: 650; }
105
- td { font-size: 0.9rem; }
106
- tbody tr:hover { background: color-mix(in srgb, var(--focus) 5%, transparent); }
107
- .empty { display: none; padding: 18px; color: var(--muted); text-align: center; }
108
- .resource-list { margin: 8px 0; padding-left: 22px; }
109
- </style>
110
- </head>
111
- <body>
112
- <main>
113
- <h1>Sphragis benchmark leaderboard</h1>
114
- <p>
115
- Author attribution for Ancient Greek prose, sentence-aligned verse, and
116
- metrical lines. Every score is <strong>test macro-F1 (%)</strong>. The suffix is the
117
- number of sentences—or lines for <code>verse_metre</code>—in each evaluation example.
118
- </p>
119
- <p>
120
- Models are compared on the fixed, provenance-preserving Sphragis splits.
121
- Validation selects checkpoints and hyperparameters; test results are reported
122
- without using test performance to break validation ties.
123
- </p>
124
-
125
- <div class="toolbar">
126
- <label for="table-search">Filter leaderboard</label>
127
- <input id="table-search" type="search" placeholder="Filter leaderboard…" autocomplete="off" />
128
- </div>
129
-
130
- <div class="table-wrap">
131
- <table id="leaderboard">
132
- <thead>
133
- <tr>
134
- <th>Model</th>
135
- <th>Representation / classifier</th>
136
- <th>Prose 1</th>
137
- <th>Prose 10</th>
138
- <th>Prose 100</th>
139
- <th>Verse sentence 1</th>
140
- <th>Verse sentence 10</th>
141
- <th>Verse sentence 100</th>
142
- <th>Verse metre 1</th>
143
- <th>Verse metre 10</th>
144
- <th>Verse metre 100</th>
145
- <th>Status</th>
146
- </tr>
147
- </thead>
148
- <tbody>
149
- <tr>
150
- <td>bowphs/GreBerta</td>
151
- <td>Frozen mean-pooled embeddings + MLP</td>
152
- <td>83.50</td>
153
- <td>96.36</td>
154
- <td>97.69</td>
155
- <td>74.63</td>
156
- <td>80.77</td>
157
- <td>92.51–100.00†</td>
158
- <td>78.85</td>
159
- <td>92.52</td>
160
- <td>96.10‡</td>
161
- <td>Verse 100 exploratory</td>
162
- </tr>
163
- <tr>
164
- <td>Ericu950/SyllaMoBert-grc-v1</td>
165
- <td>Frozen syllable-token embeddings + MLP</td>
166
- <td>77.03</td>
167
- <td>95.43</td>
168
- <td>86.30–94.27§</td>
169
- <td>77.93</td>
170
- <td>86.27</td>
171
- <td>78.46–92.51¶</td>
172
- <td>74.41</td>
173
- <td>91.06</td>
174
- <td>88.44–100.00‖</td>
175
- <td>Complete; validation ties reported</td>
176
- </tr>
177
- </tbody>
178
- </table>
179
- <div id="empty-message" class="empty">No leaderboard rows match this filter.</div>
180
- </div>
181
-
182
- <h2>Notes</h2>
183
- <p>
184
- † Four GreBerta heads tied at validation macro-F1 1.0000 for
185
- <code>verse_sentence_100</code>. Their test macro-F1 scores were
186
- <strong>92.82, 100.00, 100.00, and 92.51</strong>, so the table reports the full
187
- <strong>92.51–100.00</strong> range rather than choosing the best test result.
188
- </p>
189
- <p>
190
- ‡ Four GreBerta heads tied at validation macro-F1 1.0000 for
191
- <code>verse_metre_100</code>; all four obtained test macro-F1 <strong>96.10</strong>.
192
- </p>
193
- <p>
194
- The variable-chunk GreBerta <code>_100</code> repair experiment is marked exploratory
195
- because its design followed inspection of an earlier <code>_100</code> test failure.
196
- </p>
197
- <p>
198
- § Two SyllaMoBert heads tied at repartitioned validation macro-F1 1.0000 for
199
- <code>prose_100</code>. Test macro-F1 was <strong>94.27</strong> at learning rate
200
- <code>3e-4</code> and <strong>86.30</strong> at <code>1e-3</code>.
201
- </p>
202
- <p>
203
- ¶ Four SyllaMoBert heads tied at both repartitioned and official validation
204
- macro-F1 1.0000 for <code>verse_sentence_100</code>. Test macro-F1 was
205
- <strong>92.51, 92.51, 78.46, and 92.51</strong> at learning rates
206
- <code>3e-5</code>, <code>1e-4</code>, <code>3e-4</code>, and <code>1e-3</code>.
207
- </p>
208
- <p>
209
- ‖ All five SyllaMoBert learning rates tied at repartitioned validation macro-F1
210
- 1.0000 for <code>verse_metre_100</code>. Their test macro-F1 scores were
211
- <strong>100.00, 100.00, 100.00, 88.44, and 96.10</strong>, so the complete range
212
- is reported without selecting by test performance.
213
- </p>
214
-
215
- <h2>Benchmark resources</h2>
216
- <ul class="resource-list">
217
- <li><a href="https://huggingface.co/datasets/Urdatorn/sphragis">Dataset</a></li>
218
- <li><a href="https://github.com/Urdatorn/sphragis_models">Model implementations</a></li>
219
- </ul>
220
- </main>
221
-
222
- <script>
223
- const search = document.querySelector("#table-search");
224
- const rows = [...document.querySelectorAll("#leaderboard tbody tr")];
225
- const empty = document.querySelector("#empty-message");
226
-
227
- search.addEventListener("input", () => {
228
- const query = search.value.trim().toLocaleLowerCase();
229
- let visible = 0;
230
-
231
- for (const row of rows) {
232
- const matches = row.textContent.toLocaleLowerCase().includes(query);
233
- row.hidden = !matches;
234
- visible += Number(matches);
235
- }
236
-
237
- empty.style.display = visible ? "none" : "block";
238
- });
239
- </script>
240
- </body>
241
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
package-lock.json ADDED
@@ -0,0 +1,1655 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "sphragis-leaderboard",
3
+ "version": "1.0.0",
4
+ "lockfileVersion": 3,
5
+ "requires": true,
6
+ "packages": {
7
+ "": {
8
+ "name": "sphragis-leaderboard",
9
+ "version": "1.0.0",
10
+ "devDependencies": {
11
+ "@sveltejs/adapter-static": "^3.0.9",
12
+ "@sveltejs/kit": "^2.37.0",
13
+ "@sveltejs/vite-plugin-svelte": "^6.1.0",
14
+ "svelte": "^5.38.7",
15
+ "svelte-check": "^4.3.1",
16
+ "typescript": "^5.9.2",
17
+ "vite": "^7.1.5"
18
+ },
19
+ "engines": {
20
+ "node": ">=20"
21
+ }
22
+ },
23
+ "node_modules/@esbuild/aix-ppc64": {
24
+ "version": "0.28.2",
25
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.2.tgz",
26
+ "integrity": "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==",
27
+ "cpu": [
28
+ "ppc64"
29
+ ],
30
+ "dev": true,
31
+ "license": "MIT",
32
+ "optional": true,
33
+ "os": [
34
+ "aix"
35
+ ],
36
+ "engines": {
37
+ "node": ">=18"
38
+ }
39
+ },
40
+ "node_modules/@esbuild/android-arm": {
41
+ "version": "0.28.2",
42
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.2.tgz",
43
+ "integrity": "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==",
44
+ "cpu": [
45
+ "arm"
46
+ ],
47
+ "dev": true,
48
+ "license": "MIT",
49
+ "optional": true,
50
+ "os": [
51
+ "android"
52
+ ],
53
+ "engines": {
54
+ "node": ">=18"
55
+ }
56
+ },
57
+ "node_modules/@esbuild/android-arm64": {
58
+ "version": "0.28.2",
59
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.2.tgz",
60
+ "integrity": "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==",
61
+ "cpu": [
62
+ "arm64"
63
+ ],
64
+ "dev": true,
65
+ "license": "MIT",
66
+ "optional": true,
67
+ "os": [
68
+ "android"
69
+ ],
70
+ "engines": {
71
+ "node": ">=18"
72
+ }
73
+ },
74
+ "node_modules/@esbuild/android-x64": {
75
+ "version": "0.28.2",
76
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.2.tgz",
77
+ "integrity": "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==",
78
+ "cpu": [
79
+ "x64"
80
+ ],
81
+ "dev": true,
82
+ "license": "MIT",
83
+ "optional": true,
84
+ "os": [
85
+ "android"
86
+ ],
87
+ "engines": {
88
+ "node": ">=18"
89
+ }
90
+ },
91
+ "node_modules/@esbuild/darwin-arm64": {
92
+ "version": "0.28.2",
93
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.2.tgz",
94
+ "integrity": "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==",
95
+ "cpu": [
96
+ "arm64"
97
+ ],
98
+ "dev": true,
99
+ "license": "MIT",
100
+ "optional": true,
101
+ "os": [
102
+ "darwin"
103
+ ],
104
+ "engines": {
105
+ "node": ">=18"
106
+ }
107
+ },
108
+ "node_modules/@esbuild/darwin-x64": {
109
+ "version": "0.28.2",
110
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.2.tgz",
111
+ "integrity": "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==",
112
+ "cpu": [
113
+ "x64"
114
+ ],
115
+ "dev": true,
116
+ "license": "MIT",
117
+ "optional": true,
118
+ "os": [
119
+ "darwin"
120
+ ],
121
+ "engines": {
122
+ "node": ">=18"
123
+ }
124
+ },
125
+ "node_modules/@esbuild/freebsd-arm64": {
126
+ "version": "0.28.2",
127
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.2.tgz",
128
+ "integrity": "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==",
129
+ "cpu": [
130
+ "arm64"
131
+ ],
132
+ "dev": true,
133
+ "license": "MIT",
134
+ "optional": true,
135
+ "os": [
136
+ "freebsd"
137
+ ],
138
+ "engines": {
139
+ "node": ">=18"
140
+ }
141
+ },
142
+ "node_modules/@esbuild/freebsd-x64": {
143
+ "version": "0.28.2",
144
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.2.tgz",
145
+ "integrity": "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==",
146
+ "cpu": [
147
+ "x64"
148
+ ],
149
+ "dev": true,
150
+ "license": "MIT",
151
+ "optional": true,
152
+ "os": [
153
+ "freebsd"
154
+ ],
155
+ "engines": {
156
+ "node": ">=18"
157
+ }
158
+ },
159
+ "node_modules/@esbuild/linux-arm": {
160
+ "version": "0.28.2",
161
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.2.tgz",
162
+ "integrity": "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==",
163
+ "cpu": [
164
+ "arm"
165
+ ],
166
+ "dev": true,
167
+ "license": "MIT",
168
+ "optional": true,
169
+ "os": [
170
+ "linux"
171
+ ],
172
+ "engines": {
173
+ "node": ">=18"
174
+ }
175
+ },
176
+ "node_modules/@esbuild/linux-arm64": {
177
+ "version": "0.28.2",
178
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.2.tgz",
179
+ "integrity": "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==",
180
+ "cpu": [
181
+ "arm64"
182
+ ],
183
+ "dev": true,
184
+ "license": "MIT",
185
+ "optional": true,
186
+ "os": [
187
+ "linux"
188
+ ],
189
+ "engines": {
190
+ "node": ">=18"
191
+ }
192
+ },
193
+ "node_modules/@esbuild/linux-ia32": {
194
+ "version": "0.28.2",
195
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.2.tgz",
196
+ "integrity": "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==",
197
+ "cpu": [
198
+ "ia32"
199
+ ],
200
+ "dev": true,
201
+ "license": "MIT",
202
+ "optional": true,
203
+ "os": [
204
+ "linux"
205
+ ],
206
+ "engines": {
207
+ "node": ">=18"
208
+ }
209
+ },
210
+ "node_modules/@esbuild/linux-loong64": {
211
+ "version": "0.28.2",
212
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.2.tgz",
213
+ "integrity": "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==",
214
+ "cpu": [
215
+ "loong64"
216
+ ],
217
+ "dev": true,
218
+ "license": "MIT",
219
+ "optional": true,
220
+ "os": [
221
+ "linux"
222
+ ],
223
+ "engines": {
224
+ "node": ">=18"
225
+ }
226
+ },
227
+ "node_modules/@esbuild/linux-mips64el": {
228
+ "version": "0.28.2",
229
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.2.tgz",
230
+ "integrity": "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==",
231
+ "cpu": [
232
+ "mips64el"
233
+ ],
234
+ "dev": true,
235
+ "license": "MIT",
236
+ "optional": true,
237
+ "os": [
238
+ "linux"
239
+ ],
240
+ "engines": {
241
+ "node": ">=18"
242
+ }
243
+ },
244
+ "node_modules/@esbuild/linux-ppc64": {
245
+ "version": "0.28.2",
246
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.2.tgz",
247
+ "integrity": "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==",
248
+ "cpu": [
249
+ "ppc64"
250
+ ],
251
+ "dev": true,
252
+ "license": "MIT",
253
+ "optional": true,
254
+ "os": [
255
+ "linux"
256
+ ],
257
+ "engines": {
258
+ "node": ">=18"
259
+ }
260
+ },
261
+ "node_modules/@esbuild/linux-riscv64": {
262
+ "version": "0.28.2",
263
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.2.tgz",
264
+ "integrity": "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==",
265
+ "cpu": [
266
+ "riscv64"
267
+ ],
268
+ "dev": true,
269
+ "license": "MIT",
270
+ "optional": true,
271
+ "os": [
272
+ "linux"
273
+ ],
274
+ "engines": {
275
+ "node": ">=18"
276
+ }
277
+ },
278
+ "node_modules/@esbuild/linux-s390x": {
279
+ "version": "0.28.2",
280
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.2.tgz",
281
+ "integrity": "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==",
282
+ "cpu": [
283
+ "s390x"
284
+ ],
285
+ "dev": true,
286
+ "license": "MIT",
287
+ "optional": true,
288
+ "os": [
289
+ "linux"
290
+ ],
291
+ "engines": {
292
+ "node": ">=18"
293
+ }
294
+ },
295
+ "node_modules/@esbuild/linux-x64": {
296
+ "version": "0.28.2",
297
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.2.tgz",
298
+ "integrity": "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==",
299
+ "cpu": [
300
+ "x64"
301
+ ],
302
+ "dev": true,
303
+ "license": "MIT",
304
+ "optional": true,
305
+ "os": [
306
+ "linux"
307
+ ],
308
+ "engines": {
309
+ "node": ">=18"
310
+ }
311
+ },
312
+ "node_modules/@esbuild/netbsd-arm64": {
313
+ "version": "0.28.2",
314
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.2.tgz",
315
+ "integrity": "sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==",
316
+ "cpu": [
317
+ "arm64"
318
+ ],
319
+ "dev": true,
320
+ "license": "MIT",
321
+ "optional": true,
322
+ "os": [
323
+ "netbsd"
324
+ ],
325
+ "engines": {
326
+ "node": ">=18"
327
+ }
328
+ },
329
+ "node_modules/@esbuild/netbsd-x64": {
330
+ "version": "0.28.2",
331
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.2.tgz",
332
+ "integrity": "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==",
333
+ "cpu": [
334
+ "x64"
335
+ ],
336
+ "dev": true,
337
+ "license": "MIT",
338
+ "optional": true,
339
+ "os": [
340
+ "netbsd"
341
+ ],
342
+ "engines": {
343
+ "node": ">=18"
344
+ }
345
+ },
346
+ "node_modules/@esbuild/openbsd-arm64": {
347
+ "version": "0.28.2",
348
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.2.tgz",
349
+ "integrity": "sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==",
350
+ "cpu": [
351
+ "arm64"
352
+ ],
353
+ "dev": true,
354
+ "license": "MIT",
355
+ "optional": true,
356
+ "os": [
357
+ "openbsd"
358
+ ],
359
+ "engines": {
360
+ "node": ">=18"
361
+ }
362
+ },
363
+ "node_modules/@esbuild/openbsd-x64": {
364
+ "version": "0.28.2",
365
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.2.tgz",
366
+ "integrity": "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==",
367
+ "cpu": [
368
+ "x64"
369
+ ],
370
+ "dev": true,
371
+ "license": "MIT",
372
+ "optional": true,
373
+ "os": [
374
+ "openbsd"
375
+ ],
376
+ "engines": {
377
+ "node": ">=18"
378
+ }
379
+ },
380
+ "node_modules/@esbuild/openharmony-arm64": {
381
+ "version": "0.28.2",
382
+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.2.tgz",
383
+ "integrity": "sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==",
384
+ "cpu": [
385
+ "arm64"
386
+ ],
387
+ "dev": true,
388
+ "license": "MIT",
389
+ "optional": true,
390
+ "os": [
391
+ "openharmony"
392
+ ],
393
+ "engines": {
394
+ "node": ">=18"
395
+ }
396
+ },
397
+ "node_modules/@esbuild/sunos-x64": {
398
+ "version": "0.28.2",
399
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.2.tgz",
400
+ "integrity": "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==",
401
+ "cpu": [
402
+ "x64"
403
+ ],
404
+ "dev": true,
405
+ "license": "MIT",
406
+ "optional": true,
407
+ "os": [
408
+ "sunos"
409
+ ],
410
+ "engines": {
411
+ "node": ">=18"
412
+ }
413
+ },
414
+ "node_modules/@esbuild/win32-arm64": {
415
+ "version": "0.28.2",
416
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.2.tgz",
417
+ "integrity": "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==",
418
+ "cpu": [
419
+ "arm64"
420
+ ],
421
+ "dev": true,
422
+ "license": "MIT",
423
+ "optional": true,
424
+ "os": [
425
+ "win32"
426
+ ],
427
+ "engines": {
428
+ "node": ">=18"
429
+ }
430
+ },
431
+ "node_modules/@esbuild/win32-ia32": {
432
+ "version": "0.28.2",
433
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.2.tgz",
434
+ "integrity": "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==",
435
+ "cpu": [
436
+ "ia32"
437
+ ],
438
+ "dev": true,
439
+ "license": "MIT",
440
+ "optional": true,
441
+ "os": [
442
+ "win32"
443
+ ],
444
+ "engines": {
445
+ "node": ">=18"
446
+ }
447
+ },
448
+ "node_modules/@esbuild/win32-x64": {
449
+ "version": "0.28.2",
450
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.2.tgz",
451
+ "integrity": "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==",
452
+ "cpu": [
453
+ "x64"
454
+ ],
455
+ "dev": true,
456
+ "license": "MIT",
457
+ "optional": true,
458
+ "os": [
459
+ "win32"
460
+ ],
461
+ "engines": {
462
+ "node": ">=18"
463
+ }
464
+ },
465
+ "node_modules/@jridgewell/gen-mapping": {
466
+ "version": "0.3.13",
467
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
468
+ "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
469
+ "dev": true,
470
+ "license": "MIT",
471
+ "dependencies": {
472
+ "@jridgewell/sourcemap-codec": "^1.5.0",
473
+ "@jridgewell/trace-mapping": "^0.3.24"
474
+ }
475
+ },
476
+ "node_modules/@jridgewell/remapping": {
477
+ "version": "2.3.5",
478
+ "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
479
+ "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
480
+ "dev": true,
481
+ "license": "MIT",
482
+ "dependencies": {
483
+ "@jridgewell/gen-mapping": "^0.3.5",
484
+ "@jridgewell/trace-mapping": "^0.3.24"
485
+ }
486
+ },
487
+ "node_modules/@jridgewell/resolve-uri": {
488
+ "version": "3.1.2",
489
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
490
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
491
+ "dev": true,
492
+ "license": "MIT",
493
+ "engines": {
494
+ "node": ">=6.0.0"
495
+ }
496
+ },
497
+ "node_modules/@jridgewell/sourcemap-codec": {
498
+ "version": "1.5.5",
499
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
500
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
501
+ "dev": true,
502
+ "license": "MIT"
503
+ },
504
+ "node_modules/@jridgewell/trace-mapping": {
505
+ "version": "0.3.31",
506
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
507
+ "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
508
+ "dev": true,
509
+ "license": "MIT",
510
+ "dependencies": {
511
+ "@jridgewell/resolve-uri": "^3.1.0",
512
+ "@jridgewell/sourcemap-codec": "^1.4.14"
513
+ }
514
+ },
515
+ "node_modules/@napi-rs/lzma-linux-x64-gnu": {
516
+ "version": "1.5.1",
517
+ "resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-x64-gnu/-/lzma-linux-x64-gnu-1.5.1.tgz",
518
+ "integrity": "sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==",
519
+ "cpu": [
520
+ "x64"
521
+ ],
522
+ "dev": true,
523
+ "license": "MIT",
524
+ "optional": true,
525
+ "os": [
526
+ "linux"
527
+ ],
528
+ "engines": {
529
+ "node": "^22.20 || ^24.12 || >=25"
530
+ }
531
+ },
532
+ "node_modules/@polka/url": {
533
+ "version": "1.0.0-next.29",
534
+ "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz",
535
+ "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==",
536
+ "dev": true,
537
+ "license": "MIT"
538
+ },
539
+ "node_modules/@rollup/rollup-android-arm-eabi": {
540
+ "version": "4.62.5",
541
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.5.tgz",
542
+ "integrity": "sha512-jfkGfTwhQpsiSckPF8r9bU3pn3vyd72NlWaO+TgEO6WPSDnUhXzrNYCHBMOYj0ACaUgjm6eERLF+XV9a6RstoA==",
543
+ "cpu": [
544
+ "arm"
545
+ ],
546
+ "dev": true,
547
+ "license": "MIT",
548
+ "optional": true,
549
+ "os": [
550
+ "android"
551
+ ]
552
+ },
553
+ "node_modules/@rollup/rollup-android-arm64": {
554
+ "version": "4.62.5",
555
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.5.tgz",
556
+ "integrity": "sha512-oGVqyQlxnrz9/ty89oHpU857VUHEl5/Xu4R2lS+aivCTrNnSsbiENzTnNaBsjxH0CNWGPhzHArOLFwo+oKXveA==",
557
+ "cpu": [
558
+ "arm64"
559
+ ],
560
+ "dev": true,
561
+ "license": "MIT",
562
+ "optional": true,
563
+ "os": [
564
+ "android"
565
+ ]
566
+ },
567
+ "node_modules/@rollup/rollup-darwin-arm64": {
568
+ "version": "4.62.5",
569
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.5.tgz",
570
+ "integrity": "sha512-bW7B8xMEq8n99Q3ieEcPRGuphurdZAaFzQc9Efyyw3FL6DZO6pMy9xhdN+kBoD7Sy05xNXSr4OyPPnpkYriS/A==",
571
+ "cpu": [
572
+ "arm64"
573
+ ],
574
+ "dev": true,
575
+ "license": "MIT",
576
+ "optional": true,
577
+ "os": [
578
+ "darwin"
579
+ ]
580
+ },
581
+ "node_modules/@rollup/rollup-darwin-x64": {
582
+ "version": "4.62.5",
583
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.5.tgz",
584
+ "integrity": "sha512-YSwBS86QeHOGlrxJ1PSOIZSkzRL/JmKeunhc+lV6M1a6En8QuVCD/T/qIA0J4Gd2Y86RIOBYrLcOUtqGh9+/1w==",
585
+ "cpu": [
586
+ "x64"
587
+ ],
588
+ "dev": true,
589
+ "license": "MIT",
590
+ "optional": true,
591
+ "os": [
592
+ "darwin"
593
+ ]
594
+ },
595
+ "node_modules/@rollup/rollup-freebsd-arm64": {
596
+ "version": "4.62.5",
597
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.5.tgz",
598
+ "integrity": "sha512-2fST8lILgl7cKbme/1KDdPCmbXbG+gqoV3bHp19L0ypX/3akYMBVdOunPleRCwonoLnXOZ/0F+Mt/v8POFmfcQ==",
599
+ "cpu": [
600
+ "arm64"
601
+ ],
602
+ "dev": true,
603
+ "license": "MIT",
604
+ "optional": true,
605
+ "os": [
606
+ "freebsd"
607
+ ]
608
+ },
609
+ "node_modules/@rollup/rollup-freebsd-x64": {
610
+ "version": "4.62.5",
611
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.5.tgz",
612
+ "integrity": "sha512-cpIxQCP9J+EVad0a6LO1kY3ZGODlk80VlI+2I96B8xMcdHZ4pLVhfQ49JFpYqjPF91FFkQWftf57YlDcTiw9yQ==",
613
+ "cpu": [
614
+ "x64"
615
+ ],
616
+ "dev": true,
617
+ "license": "MIT",
618
+ "optional": true,
619
+ "os": [
620
+ "freebsd"
621
+ ]
622
+ },
623
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
624
+ "version": "4.62.5",
625
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.5.tgz",
626
+ "integrity": "sha512-r9fGh3eFs3e/udWh5ZjXQtxiYK/xoFxQaYR/cELxac/Udkl5Th+IsFm0CX3Kl9hmUH/we7EoMpjJgeQNnE0+IA==",
627
+ "cpu": [
628
+ "arm"
629
+ ],
630
+ "dev": true,
631
+ "license": "MIT",
632
+ "optional": true,
633
+ "os": [
634
+ "linux"
635
+ ]
636
+ },
637
+ "node_modules/@rollup/rollup-linux-arm-musleabihf": {
638
+ "version": "4.62.5",
639
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.5.tgz",
640
+ "integrity": "sha512-xdvFdp7OM6KLJviJT2g/YuRSUjnZgGHk4RNgwIbN7X6cPugOucV60DdHXWzsBVCUdrGb6qSXnJQrrAKMmQuj3Q==",
641
+ "cpu": [
642
+ "arm"
643
+ ],
644
+ "dev": true,
645
+ "license": "MIT",
646
+ "optional": true,
647
+ "os": [
648
+ "linux"
649
+ ]
650
+ },
651
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
652
+ "version": "4.62.5",
653
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.5.tgz",
654
+ "integrity": "sha512-rRqILAndyzHzP7T9NFQrq+4HFWNhqkqkKur7eiBpfLmz01PO0JKx5Vchu3YllE4YXI/Ftgq/szrDWg5GJ0mI8g==",
655
+ "cpu": [
656
+ "arm64"
657
+ ],
658
+ "dev": true,
659
+ "license": "MIT",
660
+ "optional": true,
661
+ "os": [
662
+ "linux"
663
+ ]
664
+ },
665
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
666
+ "version": "4.62.5",
667
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.5.tgz",
668
+ "integrity": "sha512-Gf4X3qVMucayUvux6aXXPgXovocSFUC0rrffDuPI/S2nHhNMhjcZxsrAFYCOF350PRreW1XwzFj3CT/3bKsWCw==",
669
+ "cpu": [
670
+ "arm64"
671
+ ],
672
+ "dev": true,
673
+ "license": "MIT",
674
+ "optional": true,
675
+ "os": [
676
+ "linux"
677
+ ]
678
+ },
679
+ "node_modules/@rollup/rollup-linux-loong64-gnu": {
680
+ "version": "4.62.5",
681
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.5.tgz",
682
+ "integrity": "sha512-+s5qA0TNM0qm8PK/a5gt/1Hpx+NV08uSuCncvhziIlQzT6AEV2fnUQo7eBtFTFO0nA9scauvoR2HusfXmQnO4w==",
683
+ "cpu": [
684
+ "loong64"
685
+ ],
686
+ "dev": true,
687
+ "license": "MIT",
688
+ "optional": true,
689
+ "os": [
690
+ "linux"
691
+ ]
692
+ },
693
+ "node_modules/@rollup/rollup-linux-loong64-musl": {
694
+ "version": "4.62.5",
695
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.5.tgz",
696
+ "integrity": "sha512-ybb6QvWwWJCbBWqERpc8K3pYVGIrXlG8MEQ8IIuJY6Y9KdHQxoFoNyfkAOtKn1VHu3KuLidXvwrvGR1mEjeWCw==",
697
+ "cpu": [
698
+ "loong64"
699
+ ],
700
+ "dev": true,
701
+ "license": "MIT",
702
+ "optional": true,
703
+ "os": [
704
+ "linux"
705
+ ]
706
+ },
707
+ "node_modules/@rollup/rollup-linux-ppc64-gnu": {
708
+ "version": "4.62.5",
709
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.5.tgz",
710
+ "integrity": "sha512-nZb1DtnOyhCmYvsC8A2CwOkopVg+IS1+fPUa7rMOAXtNw5+lLCLLPqd6XAiNrGtoQKsbvIBOwsHnBH/3wnb4HQ==",
711
+ "cpu": [
712
+ "ppc64"
713
+ ],
714
+ "dev": true,
715
+ "license": "MIT",
716
+ "optional": true,
717
+ "os": [
718
+ "linux"
719
+ ]
720
+ },
721
+ "node_modules/@rollup/rollup-linux-ppc64-musl": {
722
+ "version": "4.62.5",
723
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.5.tgz",
724
+ "integrity": "sha512-yMbj63Sp89ryrXLWyz+sy+fYD2HpOnMCLGbe4Oa1smclFSUukdtD/BgdiHaAetJNb74URD8U4hM+qG5KVzMEkg==",
725
+ "cpu": [
726
+ "ppc64"
727
+ ],
728
+ "dev": true,
729
+ "license": "MIT",
730
+ "optional": true,
731
+ "os": [
732
+ "linux"
733
+ ]
734
+ },
735
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
736
+ "version": "4.62.5",
737
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.5.tgz",
738
+ "integrity": "sha512-mhoan3OJw2kYV/e1jtIdmvUZgyBFeA6zGWsOswmR0Tg19TQbowZuR+JMLID6spbbBN7Zee2ejrgmy3+FxGrIdA==",
739
+ "cpu": [
740
+ "riscv64"
741
+ ],
742
+ "dev": true,
743
+ "license": "MIT",
744
+ "optional": true,
745
+ "os": [
746
+ "linux"
747
+ ]
748
+ },
749
+ "node_modules/@rollup/rollup-linux-riscv64-musl": {
750
+ "version": "4.62.5",
751
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.5.tgz",
752
+ "integrity": "sha512-5ZTLmjWbb1VZdjuyhe83K/8QO0/h11midQCBP+X5OYn32ra7eOBoM0ZqtaY4nkgNsYgmdVhMYPoyVPTjUpHf3w==",
753
+ "cpu": [
754
+ "riscv64"
755
+ ],
756
+ "dev": true,
757
+ "license": "MIT",
758
+ "optional": true,
759
+ "os": [
760
+ "linux"
761
+ ]
762
+ },
763
+ "node_modules/@rollup/rollup-linux-s390x-gnu": {
764
+ "version": "4.62.5",
765
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.5.tgz",
766
+ "integrity": "sha512-m53kG+br6PGxOTmgBEM2DHSDs9RVjsyEbUwjJPJGTFm1grWOG8EKJggDCTb60unD4Tjby8fi7/m9XfkEWasVWg==",
767
+ "cpu": [
768
+ "s390x"
769
+ ],
770
+ "dev": true,
771
+ "license": "MIT",
772
+ "optional": true,
773
+ "os": [
774
+ "linux"
775
+ ]
776
+ },
777
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
778
+ "version": "4.62.5",
779
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.5.tgz",
780
+ "integrity": "sha512-6RHPJR1g/uvdYU8uXBnfq3nlqyZCP82Fr6NHgfGoaIeSh0YEqnX/x6uA9MmJJbnSH7swqX4F+CkGdUF+6doiQA==",
781
+ "cpu": [
782
+ "x64"
783
+ ],
784
+ "dev": true,
785
+ "license": "MIT",
786
+ "optional": true,
787
+ "os": [
788
+ "linux"
789
+ ]
790
+ },
791
+ "node_modules/@rollup/rollup-linux-x64-musl": {
792
+ "version": "4.62.5",
793
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.5.tgz",
794
+ "integrity": "sha512-xs+OXQtEXgpXT0DmA5+U3qnRZHdCST/5HRQxS8wSPZTUZN/EMWeHuSIod32LQklTBZBV9DyfncKBQ8n5V3eFdw==",
795
+ "cpu": [
796
+ "x64"
797
+ ],
798
+ "dev": true,
799
+ "license": "MIT",
800
+ "optional": true,
801
+ "os": [
802
+ "linux"
803
+ ]
804
+ },
805
+ "node_modules/@rollup/rollup-openbsd-x64": {
806
+ "version": "4.62.5",
807
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.5.tgz",
808
+ "integrity": "sha512-e7hD+sl3s+mcLQDZ8pbudBVsdG6r5yN4w3LqG2TJ8sQHDpblWj5lrJs/3m01Cvlxbt4x13zu5thLjgypgtkYzw==",
809
+ "cpu": [
810
+ "x64"
811
+ ],
812
+ "dev": true,
813
+ "license": "MIT",
814
+ "optional": true,
815
+ "os": [
816
+ "openbsd"
817
+ ]
818
+ },
819
+ "node_modules/@rollup/rollup-openharmony-arm64": {
820
+ "version": "4.62.5",
821
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.5.tgz",
822
+ "integrity": "sha512-GiyJaCf+WpMub/17aPcKk27QMl5W6f+KhdPTjlFOn5akH5Wa/DCM9Stdx5cDfmasyKB08MqpVQ1uJE2RkkpbXg==",
823
+ "cpu": [
824
+ "arm64"
825
+ ],
826
+ "dev": true,
827
+ "license": "MIT",
828
+ "optional": true,
829
+ "os": [
830
+ "openharmony"
831
+ ]
832
+ },
833
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
834
+ "version": "4.62.5",
835
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.5.tgz",
836
+ "integrity": "sha512-+OQ8U2DdoEfXl8T4Fb18AjmEwbXMerKDKCL8yCPAYhKCEEKoul7rkbeGCBFCbAlaGaa7pmtRTpkAJM2LE/i5FA==",
837
+ "cpu": [
838
+ "arm64"
839
+ ],
840
+ "dev": true,
841
+ "license": "MIT",
842
+ "optional": true,
843
+ "os": [
844
+ "win32"
845
+ ]
846
+ },
847
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
848
+ "version": "4.62.5",
849
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.5.tgz",
850
+ "integrity": "sha512-KanvAZrPKbDBFwrgiU9yEVpQoox9QPV1WZOXX7HudJQY+eSlu82CtWxDU8WtuRRvtN5EGkLczkd6Y6DTcvm9wA==",
851
+ "cpu": [
852
+ "ia32"
853
+ ],
854
+ "dev": true,
855
+ "license": "MIT",
856
+ "optional": true,
857
+ "os": [
858
+ "win32"
859
+ ]
860
+ },
861
+ "node_modules/@rollup/rollup-win32-x64-gnu": {
862
+ "version": "4.62.5",
863
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.5.tgz",
864
+ "integrity": "sha512-1aC3UEWTtRl3RK3VpDJ/Tqk1XI4SLTmXIthAq6wRWo8XiSXJNd+VprJM4/1P4+i6HIaFEFlVi9sTTziniD2tOQ==",
865
+ "cpu": [
866
+ "x64"
867
+ ],
868
+ "dev": true,
869
+ "license": "MIT",
870
+ "optional": true,
871
+ "os": [
872
+ "win32"
873
+ ]
874
+ },
875
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
876
+ "version": "4.62.5",
877
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.5.tgz",
878
+ "integrity": "sha512-/gDJaRs4gl0NPIwqCz+6PkpmhhjRAD2j6P4rSNHBzUkO3naEx2mIU0pRle1vUNRQ7mE/+8OOeXLTv/J56FKiQg==",
879
+ "cpu": [
880
+ "x64"
881
+ ],
882
+ "dev": true,
883
+ "license": "MIT",
884
+ "optional": true,
885
+ "os": [
886
+ "win32"
887
+ ]
888
+ },
889
+ "node_modules/@standard-schema/spec": {
890
+ "version": "1.1.0",
891
+ "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz",
892
+ "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==",
893
+ "dev": true,
894
+ "license": "MIT"
895
+ },
896
+ "node_modules/@sveltejs/acorn-typescript": {
897
+ "version": "1.0.13",
898
+ "resolved": "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.13.tgz",
899
+ "integrity": "sha512-wgKggnhZVL9Bfx1OaKKTrYY9BFRk6C8UAkQNUcIv1+llzYrIqy+RZm5HPKzn0NpEBvTVhTqB4kQyllZywsRBRQ==",
900
+ "dev": true,
901
+ "license": "MIT",
902
+ "peerDependencies": {
903
+ "acorn": "^8.9.0"
904
+ }
905
+ },
906
+ "node_modules/@sveltejs/adapter-static": {
907
+ "version": "3.0.10",
908
+ "resolved": "https://registry.npmjs.org/@sveltejs/adapter-static/-/adapter-static-3.0.10.tgz",
909
+ "integrity": "sha512-7D9lYFWJmB7zxZyTE/qxjksvMqzMuYrrsyh1f4AlZqeZeACPRySjbC3aFiY55wb1tWUaKOQG9PVbm74JcN2Iew==",
910
+ "dev": true,
911
+ "license": "MIT",
912
+ "peerDependencies": {
913
+ "@sveltejs/kit": "^2.0.0"
914
+ }
915
+ },
916
+ "node_modules/@sveltejs/kit": {
917
+ "version": "2.70.3",
918
+ "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.70.3.tgz",
919
+ "integrity": "sha512-UDvEYuZqAMbfB/oXIoqKvbKcb7YczK5zYrzmsGV1zRJk03jntwp8dXiYoIJotxAndsKvcPFtx9H1GRSKFdSHgg==",
920
+ "dev": true,
921
+ "license": "MIT",
922
+ "dependencies": {
923
+ "@standard-schema/spec": "^1.0.0",
924
+ "@sveltejs/acorn-typescript": "^1.0.9",
925
+ "@types/cookie": "^0.6.0",
926
+ "acorn": "^8.16.0",
927
+ "cookie": "^0.6.0",
928
+ "devalue": "^5.8.1",
929
+ "esm-env": "^1.2.2",
930
+ "kleur": "^4.1.5",
931
+ "magic-string": "^0.30.5",
932
+ "mrmime": "^2.0.0",
933
+ "set-cookie-parser": "^3.0.0",
934
+ "sirv": "^3.0.0"
935
+ },
936
+ "bin": {
937
+ "svelte-kit": "svelte-kit.js"
938
+ },
939
+ "engines": {
940
+ "node": ">=18.13"
941
+ },
942
+ "peerDependencies": {
943
+ "@opentelemetry/api": "^1.0.0",
944
+ "@sveltejs/vite-plugin-svelte": "^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0 || ^7.0.0",
945
+ "svelte": "^4.0.0 || ^5.0.0-next.0",
946
+ "typescript": "^5.3.3 || ^6.0.0",
947
+ "vite": "^5.0.3 || ^6.0.0 || ^7.0.0-beta.0 || ^8.0.0"
948
+ },
949
+ "peerDependenciesMeta": {
950
+ "@opentelemetry/api": {
951
+ "optional": true
952
+ },
953
+ "typescript": {
954
+ "optional": true
955
+ }
956
+ }
957
+ },
958
+ "node_modules/@sveltejs/load-config": {
959
+ "version": "0.2.3",
960
+ "resolved": "https://registry.npmjs.org/@sveltejs/load-config/-/load-config-0.2.3.tgz",
961
+ "integrity": "sha512-VT3qmUb8pRV2QrZjd8iAmtg8lf4W0TIjZbvXtz5MKei/q96teWZgGJyyidJzOjzZzvdq616eSRVeMYIQChUTAQ==",
962
+ "dev": true,
963
+ "license": "MIT",
964
+ "engines": {
965
+ "node": ">= 18.0.0"
966
+ }
967
+ },
968
+ "node_modules/@sveltejs/vite-plugin-svelte": {
969
+ "version": "6.2.4",
970
+ "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-6.2.4.tgz",
971
+ "integrity": "sha512-ou/d51QSdTyN26D7h6dSpusAKaZkAiGM55/AKYi+9AGZw7q85hElbjK3kEyzXHhLSnRISHOYzVge6x0jRZ7DXA==",
972
+ "dev": true,
973
+ "license": "MIT",
974
+ "dependencies": {
975
+ "@sveltejs/vite-plugin-svelte-inspector": "^5.0.0",
976
+ "deepmerge": "^4.3.1",
977
+ "magic-string": "^0.30.21",
978
+ "obug": "^2.1.0",
979
+ "vitefu": "^1.1.1"
980
+ },
981
+ "engines": {
982
+ "node": "^20.19 || ^22.12 || >=24"
983
+ },
984
+ "peerDependencies": {
985
+ "svelte": "^5.0.0",
986
+ "vite": "^6.3.0 || ^7.0.0"
987
+ }
988
+ },
989
+ "node_modules/@sveltejs/vite-plugin-svelte-inspector": {
990
+ "version": "5.0.2",
991
+ "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-5.0.2.tgz",
992
+ "integrity": "sha512-TZzRTcEtZffICSAoZGkPSl6Etsj2torOVrx6Uw0KpXxrec9Gg6jFWQ60Q3+LmNGfZSxHRCZL7vXVZIWmuV50Ig==",
993
+ "dev": true,
994
+ "license": "MIT",
995
+ "dependencies": {
996
+ "obug": "^2.1.0"
997
+ },
998
+ "engines": {
999
+ "node": "^20.19 || ^22.12 || >=24"
1000
+ },
1001
+ "peerDependencies": {
1002
+ "@sveltejs/vite-plugin-svelte": "^6.0.0-next.0",
1003
+ "svelte": "^5.0.0",
1004
+ "vite": "^6.3.0 || ^7.0.0"
1005
+ }
1006
+ },
1007
+ "node_modules/@types/cookie": {
1008
+ "version": "0.6.0",
1009
+ "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz",
1010
+ "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==",
1011
+ "dev": true,
1012
+ "license": "MIT"
1013
+ },
1014
+ "node_modules/@types/estree": {
1015
+ "version": "1.0.9",
1016
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz",
1017
+ "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==",
1018
+ "dev": true,
1019
+ "license": "MIT"
1020
+ },
1021
+ "node_modules/@types/trusted-types": {
1022
+ "version": "2.0.7",
1023
+ "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz",
1024
+ "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==",
1025
+ "dev": true,
1026
+ "license": "MIT"
1027
+ },
1028
+ "node_modules/acorn": {
1029
+ "version": "8.18.0",
1030
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.18.0.tgz",
1031
+ "integrity": "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==",
1032
+ "dev": true,
1033
+ "license": "MIT",
1034
+ "bin": {
1035
+ "acorn": "bin/acorn"
1036
+ },
1037
+ "engines": {
1038
+ "node": ">=0.4.0"
1039
+ }
1040
+ },
1041
+ "node_modules/aria-query": {
1042
+ "version": "5.3.1",
1043
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.1.tgz",
1044
+ "integrity": "sha512-Z/ZeOgVl7bcSYZ/u/rh0fOpvEpq//LZmdbkXyc7syVzjPAhfOa9ebsdTSjEBDU4vs5nC98Kfduj1uFo0qyET3g==",
1045
+ "dev": true,
1046
+ "license": "Apache-2.0",
1047
+ "engines": {
1048
+ "node": ">= 0.4"
1049
+ }
1050
+ },
1051
+ "node_modules/axobject-query": {
1052
+ "version": "4.1.0",
1053
+ "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz",
1054
+ "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==",
1055
+ "dev": true,
1056
+ "license": "Apache-2.0",
1057
+ "engines": {
1058
+ "node": ">= 0.4"
1059
+ }
1060
+ },
1061
+ "node_modules/chokidar": {
1062
+ "version": "4.0.3",
1063
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
1064
+ "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
1065
+ "dev": true,
1066
+ "license": "MIT",
1067
+ "dependencies": {
1068
+ "readdirp": "^4.0.1"
1069
+ },
1070
+ "engines": {
1071
+ "node": ">= 14.16.0"
1072
+ },
1073
+ "funding": {
1074
+ "url": "https://paulmillr.com/funding/"
1075
+ }
1076
+ },
1077
+ "node_modules/clsx": {
1078
+ "version": "2.1.1",
1079
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
1080
+ "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
1081
+ "dev": true,
1082
+ "license": "MIT",
1083
+ "engines": {
1084
+ "node": ">=6"
1085
+ }
1086
+ },
1087
+ "node_modules/cookie": {
1088
+ "version": "0.6.0",
1089
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
1090
+ "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
1091
+ "dev": true,
1092
+ "license": "MIT",
1093
+ "engines": {
1094
+ "node": ">= 0.6"
1095
+ }
1096
+ },
1097
+ "node_modules/deepmerge": {
1098
+ "version": "4.3.1",
1099
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
1100
+ "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
1101
+ "dev": true,
1102
+ "license": "MIT",
1103
+ "engines": {
1104
+ "node": ">=0.10.0"
1105
+ }
1106
+ },
1107
+ "node_modules/devalue": {
1108
+ "version": "5.9.1",
1109
+ "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.9.1.tgz",
1110
+ "integrity": "sha512-+17vil3EVQRzvtDJSFuTWEb8XJRvXqAiV3qZyQWD398QeXUa6CxsUyMdD1fxzEhUrd4FojitFz7lhIHBTlV4fw==",
1111
+ "dev": true,
1112
+ "license": "MIT"
1113
+ },
1114
+ "node_modules/esbuild": {
1115
+ "version": "0.28.2",
1116
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz",
1117
+ "integrity": "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==",
1118
+ "dev": true,
1119
+ "hasInstallScript": true,
1120
+ "license": "MIT",
1121
+ "bin": {
1122
+ "esbuild": "bin/esbuild"
1123
+ },
1124
+ "engines": {
1125
+ "node": ">=18"
1126
+ },
1127
+ "optionalDependencies": {
1128
+ "@esbuild/aix-ppc64": "0.28.2",
1129
+ "@esbuild/android-arm": "0.28.2",
1130
+ "@esbuild/android-arm64": "0.28.2",
1131
+ "@esbuild/android-x64": "0.28.2",
1132
+ "@esbuild/darwin-arm64": "0.28.2",
1133
+ "@esbuild/darwin-x64": "0.28.2",
1134
+ "@esbuild/freebsd-arm64": "0.28.2",
1135
+ "@esbuild/freebsd-x64": "0.28.2",
1136
+ "@esbuild/linux-arm": "0.28.2",
1137
+ "@esbuild/linux-arm64": "0.28.2",
1138
+ "@esbuild/linux-ia32": "0.28.2",
1139
+ "@esbuild/linux-loong64": "0.28.2",
1140
+ "@esbuild/linux-mips64el": "0.28.2",
1141
+ "@esbuild/linux-ppc64": "0.28.2",
1142
+ "@esbuild/linux-riscv64": "0.28.2",
1143
+ "@esbuild/linux-s390x": "0.28.2",
1144
+ "@esbuild/linux-x64": "0.28.2",
1145
+ "@esbuild/netbsd-arm64": "0.28.2",
1146
+ "@esbuild/netbsd-x64": "0.28.2",
1147
+ "@esbuild/openbsd-arm64": "0.28.2",
1148
+ "@esbuild/openbsd-x64": "0.28.2",
1149
+ "@esbuild/openharmony-arm64": "0.28.2",
1150
+ "@esbuild/sunos-x64": "0.28.2",
1151
+ "@esbuild/win32-arm64": "0.28.2",
1152
+ "@esbuild/win32-ia32": "0.28.2",
1153
+ "@esbuild/win32-x64": "0.28.2"
1154
+ }
1155
+ },
1156
+ "node_modules/esm-env": {
1157
+ "version": "1.2.2",
1158
+ "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz",
1159
+ "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==",
1160
+ "dev": true,
1161
+ "license": "MIT"
1162
+ },
1163
+ "node_modules/esrap": {
1164
+ "version": "2.3.5",
1165
+ "resolved": "https://registry.npmjs.org/esrap/-/esrap-2.3.5.tgz",
1166
+ "integrity": "sha512-KciPkeZZX8srrh6xELzLR2cBaWOzgBQ4CwggO6Dh/KMlrfOcIcfyXCVy/Vvc3/OlS5gvFOd5tcxUYuaGM8o45A==",
1167
+ "dev": true,
1168
+ "license": "MIT",
1169
+ "dependencies": {
1170
+ "@jridgewell/sourcemap-codec": "^1.4.15"
1171
+ },
1172
+ "peerDependencies": {
1173
+ "@typescript-eslint/types": "^8.2.0"
1174
+ },
1175
+ "peerDependenciesMeta": {
1176
+ "@typescript-eslint/types": {
1177
+ "optional": true
1178
+ }
1179
+ }
1180
+ },
1181
+ "node_modules/fdir": {
1182
+ "version": "6.5.0",
1183
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
1184
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
1185
+ "dev": true,
1186
+ "license": "MIT",
1187
+ "engines": {
1188
+ "node": ">=12.0.0"
1189
+ },
1190
+ "peerDependencies": {
1191
+ "picomatch": "^3 || ^4"
1192
+ },
1193
+ "peerDependenciesMeta": {
1194
+ "picomatch": {
1195
+ "optional": true
1196
+ }
1197
+ }
1198
+ },
1199
+ "node_modules/fsevents": {
1200
+ "version": "2.3.3",
1201
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
1202
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
1203
+ "dev": true,
1204
+ "hasInstallScript": true,
1205
+ "license": "MIT",
1206
+ "optional": true,
1207
+ "os": [
1208
+ "darwin"
1209
+ ],
1210
+ "engines": {
1211
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
1212
+ }
1213
+ },
1214
+ "node_modules/is-reference": {
1215
+ "version": "3.0.3",
1216
+ "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz",
1217
+ "integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==",
1218
+ "dev": true,
1219
+ "license": "MIT",
1220
+ "dependencies": {
1221
+ "@types/estree": "^1.0.6"
1222
+ }
1223
+ },
1224
+ "node_modules/kleur": {
1225
+ "version": "4.1.5",
1226
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
1227
+ "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==",
1228
+ "dev": true,
1229
+ "license": "MIT",
1230
+ "engines": {
1231
+ "node": ">=6"
1232
+ }
1233
+ },
1234
+ "node_modules/locate-character": {
1235
+ "version": "3.0.0",
1236
+ "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz",
1237
+ "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==",
1238
+ "dev": true,
1239
+ "license": "MIT"
1240
+ },
1241
+ "node_modules/magic-string": {
1242
+ "version": "0.30.21",
1243
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
1244
+ "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
1245
+ "dev": true,
1246
+ "license": "MIT",
1247
+ "dependencies": {
1248
+ "@jridgewell/sourcemap-codec": "^1.5.5"
1249
+ }
1250
+ },
1251
+ "node_modules/mri": {
1252
+ "version": "1.2.0",
1253
+ "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz",
1254
+ "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==",
1255
+ "dev": true,
1256
+ "license": "MIT",
1257
+ "engines": {
1258
+ "node": ">=4"
1259
+ }
1260
+ },
1261
+ "node_modules/mrmime": {
1262
+ "version": "2.0.1",
1263
+ "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz",
1264
+ "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==",
1265
+ "dev": true,
1266
+ "license": "MIT",
1267
+ "engines": {
1268
+ "node": ">=10"
1269
+ }
1270
+ },
1271
+ "node_modules/nanoid": {
1272
+ "version": "3.3.18",
1273
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz",
1274
+ "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==",
1275
+ "dev": true,
1276
+ "funding": [
1277
+ {
1278
+ "type": "github",
1279
+ "url": "https://github.com/sponsors/ai"
1280
+ }
1281
+ ],
1282
+ "license": "MIT",
1283
+ "bin": {
1284
+ "nanoid": "bin/nanoid.cjs"
1285
+ },
1286
+ "engines": {
1287
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
1288
+ }
1289
+ },
1290
+ "node_modules/obug": {
1291
+ "version": "2.1.4",
1292
+ "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.4.tgz",
1293
+ "integrity": "sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==",
1294
+ "dev": true,
1295
+ "funding": [
1296
+ "https://github.com/sponsors/sxzz",
1297
+ "https://opencollective.com/debug"
1298
+ ],
1299
+ "license": "MIT",
1300
+ "engines": {
1301
+ "node": ">=12.20.0"
1302
+ }
1303
+ },
1304
+ "node_modules/picocolors": {
1305
+ "version": "1.1.1",
1306
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
1307
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
1308
+ "dev": true,
1309
+ "license": "ISC"
1310
+ },
1311
+ "node_modules/picomatch": {
1312
+ "version": "4.0.5",
1313
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz",
1314
+ "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==",
1315
+ "dev": true,
1316
+ "license": "MIT",
1317
+ "engines": {
1318
+ "node": ">=12"
1319
+ },
1320
+ "funding": {
1321
+ "url": "https://github.com/sponsors/jonschlinkert"
1322
+ }
1323
+ },
1324
+ "node_modules/postcss": {
1325
+ "version": "8.5.26",
1326
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz",
1327
+ "integrity": "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==",
1328
+ "dev": true,
1329
+ "funding": [
1330
+ {
1331
+ "type": "opencollective",
1332
+ "url": "https://opencollective.com/postcss/"
1333
+ },
1334
+ {
1335
+ "type": "tidelift",
1336
+ "url": "https://tidelift.com/funding/github/npm/postcss"
1337
+ },
1338
+ {
1339
+ "type": "github",
1340
+ "url": "https://github.com/sponsors/ai"
1341
+ }
1342
+ ],
1343
+ "license": "MIT",
1344
+ "dependencies": {
1345
+ "nanoid": "^3.3.17",
1346
+ "picocolors": "^1.1.1",
1347
+ "source-map-js": "^1.2.1"
1348
+ },
1349
+ "engines": {
1350
+ "node": "^10 || ^12 || >=14"
1351
+ }
1352
+ },
1353
+ "node_modules/readdirp": {
1354
+ "version": "4.1.2",
1355
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
1356
+ "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
1357
+ "dev": true,
1358
+ "license": "MIT",
1359
+ "engines": {
1360
+ "node": ">= 14.18.0"
1361
+ },
1362
+ "funding": {
1363
+ "type": "individual",
1364
+ "url": "https://paulmillr.com/funding/"
1365
+ }
1366
+ },
1367
+ "node_modules/rollup": {
1368
+ "version": "4.62.5",
1369
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.5.tgz",
1370
+ "integrity": "sha512-/tqMfgP7GPA3PHhCmuiS4vIjrSVhHLgY++i+dhbG462euyAj7FpM4D9uq1X3BgjlqRdpcOrYhcQtfiQLNc8tqw==",
1371
+ "dev": true,
1372
+ "license": "MIT",
1373
+ "dependencies": {
1374
+ "@types/estree": "1.0.9"
1375
+ },
1376
+ "bin": {
1377
+ "rollup": "dist/bin/rollup"
1378
+ },
1379
+ "engines": {
1380
+ "node": ">=18.0.0",
1381
+ "npm": ">=8.0.0"
1382
+ },
1383
+ "optionalDependencies": {
1384
+ "@napi-rs/lzma-linux-x64-gnu": "1.5.1",
1385
+ "@rollup/rollup-android-arm-eabi": "4.62.5",
1386
+ "@rollup/rollup-android-arm64": "4.62.5",
1387
+ "@rollup/rollup-darwin-arm64": "4.62.5",
1388
+ "@rollup/rollup-darwin-x64": "4.62.5",
1389
+ "@rollup/rollup-freebsd-arm64": "4.62.5",
1390
+ "@rollup/rollup-freebsd-x64": "4.62.5",
1391
+ "@rollup/rollup-linux-arm-gnueabihf": "4.62.5",
1392
+ "@rollup/rollup-linux-arm-musleabihf": "4.62.5",
1393
+ "@rollup/rollup-linux-arm64-gnu": "4.62.5",
1394
+ "@rollup/rollup-linux-arm64-musl": "4.62.5",
1395
+ "@rollup/rollup-linux-loong64-gnu": "4.62.5",
1396
+ "@rollup/rollup-linux-loong64-musl": "4.62.5",
1397
+ "@rollup/rollup-linux-ppc64-gnu": "4.62.5",
1398
+ "@rollup/rollup-linux-ppc64-musl": "4.62.5",
1399
+ "@rollup/rollup-linux-riscv64-gnu": "4.62.5",
1400
+ "@rollup/rollup-linux-riscv64-musl": "4.62.5",
1401
+ "@rollup/rollup-linux-s390x-gnu": "4.62.5",
1402
+ "@rollup/rollup-linux-x64-gnu": "4.62.5",
1403
+ "@rollup/rollup-linux-x64-musl": "4.62.5",
1404
+ "@rollup/rollup-openbsd-x64": "4.62.5",
1405
+ "@rollup/rollup-openharmony-arm64": "4.62.5",
1406
+ "@rollup/rollup-win32-arm64-msvc": "4.62.5",
1407
+ "@rollup/rollup-win32-ia32-msvc": "4.62.5",
1408
+ "@rollup/rollup-win32-x64-gnu": "4.62.5",
1409
+ "@rollup/rollup-win32-x64-msvc": "4.62.5",
1410
+ "fsevents": "~2.3.2"
1411
+ }
1412
+ },
1413
+ "node_modules/sade": {
1414
+ "version": "1.8.1",
1415
+ "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz",
1416
+ "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==",
1417
+ "dev": true,
1418
+ "license": "MIT",
1419
+ "dependencies": {
1420
+ "mri": "^1.1.0"
1421
+ },
1422
+ "engines": {
1423
+ "node": ">=6"
1424
+ }
1425
+ },
1426
+ "node_modules/set-cookie-parser": {
1427
+ "version": "3.1.2",
1428
+ "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-3.1.2.tgz",
1429
+ "integrity": "sha512-5/r/lTwbJ3zQ+qwdUFZYeRNqda7P5HD8zQKqlSjdGt1/S0cjLAphHusj4Y58ahDtWn/g32xrIS58/ikOvwl0Lw==",
1430
+ "dev": true,
1431
+ "license": "MIT"
1432
+ },
1433
+ "node_modules/sirv": {
1434
+ "version": "3.0.2",
1435
+ "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.2.tgz",
1436
+ "integrity": "sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==",
1437
+ "dev": true,
1438
+ "license": "MIT",
1439
+ "dependencies": {
1440
+ "@polka/url": "^1.0.0-next.24",
1441
+ "mrmime": "^2.0.0",
1442
+ "totalist": "^3.0.0"
1443
+ },
1444
+ "engines": {
1445
+ "node": ">=18"
1446
+ }
1447
+ },
1448
+ "node_modules/source-map-js": {
1449
+ "version": "1.2.1",
1450
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
1451
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
1452
+ "dev": true,
1453
+ "license": "BSD-3-Clause",
1454
+ "engines": {
1455
+ "node": ">=0.10.0"
1456
+ }
1457
+ },
1458
+ "node_modules/svelte": {
1459
+ "version": "5.56.10",
1460
+ "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.56.10.tgz",
1461
+ "integrity": "sha512-Lcxbj8I/KAbpY+VjtY4ENQBV0dDCipfGAhqb51XQZ67CIQqXgsv/8dPkbILaj4Fb6/b6JAEM/PIVbILXgDQy2g==",
1462
+ "dev": true,
1463
+ "license": "MIT",
1464
+ "dependencies": {
1465
+ "@jridgewell/remapping": "^2.3.4",
1466
+ "@jridgewell/sourcemap-codec": "^1.5.0",
1467
+ "@sveltejs/acorn-typescript": "^1.0.10",
1468
+ "@types/estree": "^1.0.5",
1469
+ "@types/trusted-types": "^2.0.7",
1470
+ "acorn": "^8.12.1",
1471
+ "aria-query": "5.3.1",
1472
+ "axobject-query": "^4.1.0",
1473
+ "clsx": "^2.1.1",
1474
+ "devalue": "^5.8.1",
1475
+ "esm-env": "^1.2.1",
1476
+ "esrap": "^2.2.12",
1477
+ "is-reference": "^3.0.3",
1478
+ "locate-character": "^3.0.0",
1479
+ "magic-string": "^0.30.11",
1480
+ "zimmerframe": "^1.1.2"
1481
+ },
1482
+ "engines": {
1483
+ "node": ">=18"
1484
+ }
1485
+ },
1486
+ "node_modules/svelte-check": {
1487
+ "version": "4.7.6",
1488
+ "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-4.7.6.tgz",
1489
+ "integrity": "sha512-t2scM//ZuVbSY/T2w6FSBw1v9s2NEmh/g+sy1lqtosW5ylBV5AF4wFb1Ts9Kf3MbfPDUDJDZ9L436YT0SPTdvw==",
1490
+ "dev": true,
1491
+ "license": "MIT",
1492
+ "dependencies": {
1493
+ "@jridgewell/trace-mapping": "^0.3.25",
1494
+ "@sveltejs/load-config": "^0.2.3",
1495
+ "chokidar": "^4.0.1",
1496
+ "fdir": "^6.2.0",
1497
+ "picocolors": "^1.0.0",
1498
+ "sade": "^1.7.4"
1499
+ },
1500
+ "bin": {
1501
+ "svelte-check": "bin/svelte-check"
1502
+ },
1503
+ "engines": {
1504
+ "node": ">= 18.0.0"
1505
+ },
1506
+ "peerDependencies": {
1507
+ "svelte": "^4.0.0 || ^5.0.0-next.0",
1508
+ "typescript": "^5.0.0 || ^6.0.0"
1509
+ }
1510
+ },
1511
+ "node_modules/tinyglobby": {
1512
+ "version": "0.2.17",
1513
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz",
1514
+ "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==",
1515
+ "dev": true,
1516
+ "license": "MIT",
1517
+ "dependencies": {
1518
+ "fdir": "^6.5.0",
1519
+ "picomatch": "^4.0.4"
1520
+ },
1521
+ "engines": {
1522
+ "node": ">=12.0.0"
1523
+ },
1524
+ "funding": {
1525
+ "url": "https://github.com/sponsors/SuperchupuDev"
1526
+ }
1527
+ },
1528
+ "node_modules/totalist": {
1529
+ "version": "3.0.1",
1530
+ "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz",
1531
+ "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==",
1532
+ "dev": true,
1533
+ "license": "MIT",
1534
+ "engines": {
1535
+ "node": ">=6"
1536
+ }
1537
+ },
1538
+ "node_modules/typescript": {
1539
+ "version": "5.9.3",
1540
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
1541
+ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
1542
+ "dev": true,
1543
+ "license": "Apache-2.0",
1544
+ "bin": {
1545
+ "tsc": "bin/tsc",
1546
+ "tsserver": "bin/tsserver"
1547
+ },
1548
+ "engines": {
1549
+ "node": ">=14.17"
1550
+ }
1551
+ },
1552
+ "node_modules/vite": {
1553
+ "version": "7.3.6",
1554
+ "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.6.tgz",
1555
+ "integrity": "sha512-4XP60spRGjSZFf1qYH+dJIkK2znL3zQfl9KkOV9MkkRR/3Dls0dxaBsQPTloEc5BLXWPL9vsOxopxyKoMmDueg==",
1556
+ "dev": true,
1557
+ "license": "MIT",
1558
+ "dependencies": {
1559
+ "esbuild": "^0.27.0 || ^0.28.0",
1560
+ "fdir": "^6.5.0",
1561
+ "picomatch": "^4.0.3",
1562
+ "postcss": "^8.5.6",
1563
+ "rollup": "^4.43.0",
1564
+ "tinyglobby": "^0.2.15"
1565
+ },
1566
+ "bin": {
1567
+ "vite": "bin/vite.js"
1568
+ },
1569
+ "engines": {
1570
+ "node": "^20.19.0 || >=22.12.0"
1571
+ },
1572
+ "funding": {
1573
+ "url": "https://github.com/vitejs/vite?sponsor=1"
1574
+ },
1575
+ "optionalDependencies": {
1576
+ "fsevents": "~2.3.3"
1577
+ },
1578
+ "peerDependencies": {
1579
+ "@types/node": "^20.19.0 || >=22.12.0",
1580
+ "jiti": ">=1.21.0",
1581
+ "less": "^4.0.0",
1582
+ "lightningcss": "^1.21.0",
1583
+ "sass": "^1.70.0",
1584
+ "sass-embedded": "^1.70.0",
1585
+ "stylus": ">=0.54.8",
1586
+ "sugarss": "^5.0.0",
1587
+ "terser": "^5.16.0",
1588
+ "tsx": "^4.8.1",
1589
+ "yaml": "^2.4.2"
1590
+ },
1591
+ "peerDependenciesMeta": {
1592
+ "@types/node": {
1593
+ "optional": true
1594
+ },
1595
+ "jiti": {
1596
+ "optional": true
1597
+ },
1598
+ "less": {
1599
+ "optional": true
1600
+ },
1601
+ "lightningcss": {
1602
+ "optional": true
1603
+ },
1604
+ "sass": {
1605
+ "optional": true
1606
+ },
1607
+ "sass-embedded": {
1608
+ "optional": true
1609
+ },
1610
+ "stylus": {
1611
+ "optional": true
1612
+ },
1613
+ "sugarss": {
1614
+ "optional": true
1615
+ },
1616
+ "terser": {
1617
+ "optional": true
1618
+ },
1619
+ "tsx": {
1620
+ "optional": true
1621
+ },
1622
+ "yaml": {
1623
+ "optional": true
1624
+ }
1625
+ }
1626
+ },
1627
+ "node_modules/vitefu": {
1628
+ "version": "1.1.3",
1629
+ "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.3.tgz",
1630
+ "integrity": "sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg==",
1631
+ "dev": true,
1632
+ "license": "MIT",
1633
+ "workspaces": [
1634
+ "tests/deps/*",
1635
+ "tests/projects/*",
1636
+ "tests/projects/workspace/packages/*"
1637
+ ],
1638
+ "peerDependencies": {
1639
+ "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0"
1640
+ },
1641
+ "peerDependenciesMeta": {
1642
+ "vite": {
1643
+ "optional": true
1644
+ }
1645
+ }
1646
+ },
1647
+ "node_modules/zimmerframe": {
1648
+ "version": "1.1.4",
1649
+ "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.4.tgz",
1650
+ "integrity": "sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==",
1651
+ "dev": true,
1652
+ "license": "MIT"
1653
+ }
1654
+ }
1655
+ }
package.json ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "sphragis-leaderboard",
3
+ "private": true,
4
+ "version": "1.0.0",
5
+ "type": "module",
6
+ "scripts": {
7
+ "dev": "vite dev",
8
+ "build": "vite build",
9
+ "preview": "vite preview",
10
+ "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json"
11
+ },
12
+ "devDependencies": {
13
+ "@sveltejs/adapter-static": "^3.0.9",
14
+ "@sveltejs/kit": "^2.37.0",
15
+ "@sveltejs/vite-plugin-svelte": "^6.1.0",
16
+ "svelte": "^5.38.7",
17
+ "svelte-check": "^4.3.1",
18
+ "typescript": "^5.9.2",
19
+ "vite": "^7.1.5"
20
+ },
21
+ "engines": {
22
+ "node": ">=20"
23
+ }
24
+ }
src/app.css ADDED
@@ -0,0 +1,169 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @import url('https://fonts.googleapis.com/css2?family=DM+Mono:wght@400;500&family=Manrope:wght@400;500;600;700&display=swap');
2
+
3
+ :root {
4
+ font-family: 'Manrope', sans-serif;
5
+ color: #24231f;
6
+ background: #f7f5ef;
7
+ font-synthesis: none;
8
+ --page: #f7f5ef;
9
+ --surface: #fffef9;
10
+ --surface-muted: #efede6;
11
+ --row-alt: #f8f6f0;
12
+ --text: #24231f;
13
+ --text-muted: #67645b;
14
+ --text-subtle: #928e82;
15
+ --border: #dedbd1;
16
+ --border-strong: #c6c1b4;
17
+ --primary: #255c47;
18
+ --primary-strong: #174532;
19
+ --primary-soft: #dfece5;
20
+ --accent: #d86b3c;
21
+ --shadow-sm: 0 1px 2px rgb(42 39 31 / 5%);
22
+ }
23
+
24
+ :root[data-theme='dark'] {
25
+ color-scheme: dark;
26
+ --page: #161814;
27
+ --surface: #1d201b;
28
+ --surface-muted: #272b24;
29
+ --row-alt: #22251f;
30
+ --text: #f2f0e9;
31
+ --text-muted: #b4b1a7;
32
+ --text-subtle: #89877f;
33
+ --border: #383c34;
34
+ --border-strong: #4b5046;
35
+ --primary: #7fc4a2;
36
+ --primary-strong: #a6d9bf;
37
+ --primary-soft: #253d31;
38
+ --accent: #ef936d;
39
+ --shadow-sm: none;
40
+ }
41
+
42
+ * { box-sizing: border-box; }
43
+ html { scroll-behavior: smooth; background: var(--page); }
44
+ body { margin: 0; min-width: 320px; background: var(--page); color: var(--text); }
45
+ button, input { font: inherit; }
46
+ a { color: inherit; }
47
+
48
+ .topbar {
49
+ display: flex;
50
+ align-items: center;
51
+ justify-content: space-between;
52
+ min-height: 68px;
53
+ padding: 0 max(24px, calc((100vw - 1400px) / 2));
54
+ border-bottom: 1px solid var(--border);
55
+ background: color-mix(in srgb, var(--page) 92%, transparent);
56
+ }
57
+
58
+ .brand { display: inline-flex; align-items: center; gap: 10px; font-weight: 700; text-decoration: none; letter-spacing: -0.02em; }
59
+ .brand-mark { display: grid; place-items: center; width: 30px; height: 30px; border-radius: 50%; background: var(--primary); color: var(--page); font: 500 16px 'DM Mono', monospace; }
60
+ nav { display: flex; align-items: center; gap: 24px; }
61
+ nav a { color: var(--text-muted); font-size: 13px; font-weight: 600; text-decoration: none; }
62
+ nav a:hover { color: var(--text); }
63
+ .theme-toggle { width: 34px; height: 34px; border: 1px solid var(--border); border-radius: 50%; background: var(--surface); color: var(--text); cursor: pointer; }
64
+
65
+ main { width: min(100% - 48px, 1400px); margin: 0 auto; }
66
+ .hero { display: grid; grid-template-columns: minmax(0, 1fr) 290px; gap: clamp(48px, 10vw, 150px); align-items: end; padding: 86px 0 76px; }
67
+ .eyebrow { margin: 0 0 14px; color: var(--primary); font: 500 11px 'DM Mono', monospace; letter-spacing: 0.15em; text-transform: uppercase; }
68
+ .hero h1 { max-width: 850px; margin: 0; font-size: clamp(42px, 6vw, 78px); font-weight: 500; letter-spacing: -0.055em; line-height: 0.98; }
69
+ .lede { max-width: 760px; margin: 28px 0 0; color: var(--text-muted); font-size: clamp(16px, 2vw, 19px); line-height: 1.65; }
70
+ .hero-actions { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 32px; }
71
+ .hero-actions a { display: inline-flex; align-items: center; gap: 20px; padding: 12px 17px; border-radius: 6px; font-size: 13px; font-weight: 600; text-decoration: none; }
72
+ .primary-action { background: var(--primary); color: var(--page); }
73
+ .secondary-action { border: 1px solid var(--border-strong); background: var(--surface); }
74
+ .hero-stat { padding: 27px; border: 1px solid var(--border); border-radius: 10px; background: var(--surface); box-shadow: var(--shadow-sm); }
75
+ .stat-number { display: block; color: var(--primary); font: 500 68px/1 'DM Mono', monospace; letter-spacing: -0.08em; }
76
+ .stat-label { display: block; margin-top: 8px; font-weight: 700; }
77
+ .stat-rule { height: 1px; margin: 24px 0; background: var(--border); }
78
+ .stat-detail { color: var(--text-muted); font-size: 12px; line-height: 1.6; }
79
+
80
+ .info-grid { display: grid; grid-template-columns: repeat(3, 1fr); border-block: 1px solid var(--border); }
81
+ .info-grid article { position: relative; padding: 34px 38px 36px 0; }
82
+ .info-grid article + article { padding-left: 38px; border-left: 1px solid var(--border); }
83
+ .card-index { color: var(--accent); font: 500 11px 'DM Mono', monospace; }
84
+ .info-grid h2 { margin: 24px 0 9px; font-size: 17px; letter-spacing: -0.02em; }
85
+ .info-grid p { margin: 0; color: var(--text-muted); font-size: 13px; line-height: 1.65; }
86
+
87
+ .leaderboard-section { padding: 82px 0 74px; }
88
+ .section-heading { display: flex; align-items: end; justify-content: space-between; gap: 24px; margin-bottom: 26px; }
89
+ .section-heading h2, .methodology h2 { margin: 0; font-size: clamp(27px, 4vw, 40px); font-weight: 500; letter-spacing: -0.045em; }
90
+ .result-count { color: var(--text-subtle); font: 500 11px 'DM Mono', monospace; text-transform: uppercase; }
91
+ .controls { display: flex; align-items: center; justify-content: space-between; gap: 16px; margin-bottom: 13px; }
92
+ .search-field { display: flex; align-items: center; gap: 8px; width: 280px; height: 38px; padding: 0 11px; border: 1px solid var(--border); border-radius: 6px; background: var(--surface); color: var(--text-subtle); }
93
+ .search-field input { min-width: 0; width: 100%; border: 0; outline: 0; background: transparent; color: var(--text); font-size: 13px; }
94
+ .segments { display: flex; gap: 3px; padding: 3px; border: 1px solid var(--border); border-radius: 7px; background: var(--surface-muted); }
95
+ .segments button { padding: 6px 10px; border: 0; border-radius: 4px; background: transparent; color: var(--text-muted); font-size: 11px; font-weight: 600; cursor: pointer; }
96
+ .segments button.active { background: var(--surface); color: var(--text); box-shadow: var(--shadow-sm); }
97
+
98
+ .table-scroll { overflow-x: auto; border: 1px solid var(--border); border-radius: 8px; background: var(--surface); box-shadow: var(--shadow-sm); overscroll-behavior-x: contain; }
99
+ table { min-width: 1120px; width: 100%; border-collapse: separate; border-spacing: 0; font-size: 12px; }
100
+ th, td { border-bottom: 1px solid var(--border); white-space: nowrap; text-align: left; }
101
+ thead th { position: sticky; top: 0; z-index: 2; padding: 0; background: var(--surface-muted); color: var(--text-muted); font-weight: 600; }
102
+ .group-row th { border-bottom: 1px solid var(--border-strong); }
103
+ .task-group { padding: 8px 12px; text-align: center; color: var(--text-subtle); font: 500 10px 'DM Mono', monospace; letter-spacing: 0.09em; text-transform: uppercase; }
104
+ tbody th, tbody td { padding: 12px; }
105
+ tbody tr:nth-child(even) :is(th, td) { background: var(--row-alt); }
106
+ tbody tr:hover :is(th, td) { box-shadow: inset 0 0 0 100vmax color-mix(in srgb, var(--primary) 6%, transparent); }
107
+ tbody tr:last-child :is(th, td) { border-bottom: 0; }
108
+ .sticky { position: sticky; z-index: 1; background: var(--surface); }
109
+ thead .sticky { z-index: 4; background: var(--surface-muted); }
110
+ .model-column { left: 0; min-width: 170px; }
111
+ .representation-column { left: 170px; min-width: 285px; max-width: 320px; border-right: 1px solid var(--border-strong); overflow: hidden; text-overflow: ellipsis; }
112
+ .owner { color: var(--text-subtle); font-weight: 400; }
113
+ .score-header { min-width: 100px; }
114
+ .score-cell { text-align: right; font: 500 12px 'DM Mono', monospace; background-image: linear-gradient(90deg, color-mix(in srgb, var(--primary) 12%, transparent) var(--score), transparent var(--score)); }
115
+ .status-column { min-width: 190px; border-left: 1px solid var(--border-strong); }
116
+ .status-cell { border-left: 1px solid var(--border-strong); }
117
+ .status-badge { padding: 4px 7px; border: 1px solid color-mix(in srgb, var(--accent) 35%, var(--border)); border-radius: 4px; background: color-mix(in srgb, var(--accent) 8%, var(--surface)); color: var(--text-muted); font-size: 10px; }
118
+ .empty { padding: 28px; color: var(--text-muted); text-align: center; }
119
+ .sort-button { all: unset; display: inline-flex; align-items: center; justify-content: flex-end; gap: 5px; width: 100%; min-height: 38px; padding: 7px 10px; box-sizing: border-box; cursor: pointer; transition: background 0.12s, color 0.12s; }
120
+ .sort-button.left { justify-content: flex-start; }
121
+ .sort-button:hover { background: var(--primary-soft); color: var(--text); }
122
+ .sort-button:focus-visible { outline: 2px solid var(--primary); outline-offset: -2px; }
123
+ .sort-icon { color: var(--text-subtle); font: 500 10px 'DM Mono', monospace; opacity: 0.45; }
124
+ .sort-icon.active { color: var(--primary); opacity: 1; }
125
+ .tip-wrap { position: relative; display: inline-flex; }
126
+ .info-dot { display: inline-grid; place-items: center; width: 15px; height: 15px; padding: 0; border: 1px solid var(--border-strong); border-radius: 50%; background: var(--surface); color: var(--text-muted); font: 700 9px/1 'Manrope', sans-serif; cursor: help; }
127
+ .tooltip { position: fixed; z-index: 50; top: var(--tip-y); left: var(--tip-x); display: grid; gap: 5px; width: 250px; padding: 11px 12px; border: 1px solid var(--border-strong); border-radius: 6px; background: var(--text); color: var(--page); box-shadow: 0 12px 30px rgb(0 0 0 / 18%); font-size: 11px; font-weight: 400; line-height: 1.45; white-space: normal; transform: translateX(-50%); }
128
+ .tooltip strong { font-size: 11px; }
129
+ .table-caption { display: flex; align-items: center; gap: 6px; margin: 11px 2px 0; color: var(--text-subtle); font-size: 11px; }
130
+ .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; }
131
+
132
+ .methodology { display: grid; grid-template-columns: minmax(250px, 0.8fr) minmax(0, 1.4fr); gap: 80px; padding: 68px 0 88px; border-top: 1px solid var(--border); }
133
+ .notes { border-top: 1px solid var(--border-strong); }
134
+ details { border-bottom: 1px solid var(--border); }
135
+ summary { display: flex; align-items: center; gap: 14px; padding: 18px 2px; font-size: 13px; font-weight: 700; cursor: pointer; list-style: none; }
136
+ summary::-webkit-details-marker { display: none; }
137
+ summary span { color: var(--accent); font: 500 15px 'DM Mono', monospace; }
138
+ details p { margin: 0; padding: 0 2px 20px 30px; color: var(--text-muted); font-size: 13px; line-height: 1.7; }
139
+ code { font-family: 'DM Mono', monospace; font-size: 0.92em; }
140
+
141
+ footer { display: flex; justify-content: space-between; gap: 24px; padding: 25px max(24px, calc((100vw - 1400px) / 2)); border-top: 1px solid var(--border); color: var(--text-subtle); font-size: 10px; }
142
+ footer p { margin: 0; }
143
+
144
+ @media (max-width: 900px) {
145
+ .hero { grid-template-columns: 1fr; padding-top: 60px; }
146
+ .hero-stat { max-width: 360px; }
147
+ .info-grid { grid-template-columns: 1fr; }
148
+ .info-grid article, .info-grid article + article { padding: 26px 0; border-left: 0; border-bottom: 1px solid var(--border); }
149
+ .info-grid article:last-child { border-bottom: 0; }
150
+ .controls { align-items: stretch; flex-direction: column; }
151
+ .search-field { width: 100%; }
152
+ .segments { overflow-x: auto; }
153
+ .segments button { flex: 0 0 auto; }
154
+ .methodology { grid-template-columns: 1fr; gap: 36px; }
155
+ }
156
+
157
+ @media (max-width: 640px) {
158
+ main { width: min(100% - 28px, 1400px); }
159
+ .topbar { padding-inline: 14px; }
160
+ nav { gap: 12px; }
161
+ nav a { display: none; }
162
+ .hero { padding: 48px 0 54px; }
163
+ .hero h1 { font-size: 44px; }
164
+ .leaderboard-section { padding-block: 60px; }
165
+ .sticky, thead .sticky { position: static; }
166
+ .model-column { min-width: 145px; }
167
+ .representation-column { min-width: 230px; }
168
+ footer { flex-direction: column; }
169
+ }
src/app.html ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
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="theme-color" content="#f7f5ef" />
7
+ %sveltekit.head%
8
+ </head>
9
+ <body data-sveltekit-preload-data="hover">
10
+ <div style="display: contents">%sveltekit.body%</div>
11
+ </body>
12
+ </html>
src/lib/components/InfoTip.svelte ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <script lang="ts">
2
+ interface Props {
3
+ title: string;
4
+ text: string;
5
+ }
6
+
7
+ let { title, text }: Props = $props();
8
+ let open = $state(false);
9
+ let button: HTMLButtonElement;
10
+ let x = $state(0);
11
+ let y = $state(0);
12
+
13
+ function show(): void {
14
+ const rect = button.getBoundingClientRect();
15
+ x = Math.min(Math.max(rect.left + rect.width / 2, 140), window.innerWidth - 140);
16
+ y = rect.bottom + 9;
17
+ open = true;
18
+ }
19
+ </script>
20
+
21
+ <span class="tip-wrap" role="presentation" onpointerleave={() => (open = false)}>
22
+ <button
23
+ class="info-dot"
24
+ bind:this={button}
25
+ type="button"
26
+ aria-label={`About ${title}`}
27
+ aria-expanded={open}
28
+ onclick={(event) => {
29
+ event.stopPropagation();
30
+ if (open) open = false;
31
+ else show();
32
+ }}
33
+ onpointerenter={show}
34
+ onfocus={show}
35
+ onblur={() => (open = false)}
36
+ >?</button>
37
+ {#if open}
38
+ <span class="tooltip" role="tooltip" style={`--tip-x: ${x}px; --tip-y: ${y}px`}>
39
+ <strong>{title}</strong>
40
+ <span>{text}</span>
41
+ </span>
42
+ {/if}
43
+ </span>
src/lib/components/LeaderboardTable.svelte ADDED
@@ -0,0 +1,111 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <script lang="ts">
2
+ import { displayScore, numericScore, results, taskColumns, type ResultRow, type TaskKey } from '$lib/data';
3
+ import InfoTip from './InfoTip.svelte';
4
+ import SortHeader from './SortHeader.svelte';
5
+
6
+ type SortDirection = 'asc' | 'desc';
7
+ type Group = 'All tasks' | 'Prose' | 'Verse · sentences' | 'Verse · metre';
8
+
9
+ const groups: Group[] = ['All tasks', 'Prose', 'Verse · sentences', 'Verse · metre'];
10
+ let query = $state('');
11
+ let group = $state<Group>('All tasks');
12
+ let sortField = $state('model');
13
+ let sortDirection = $state<SortDirection>('asc');
14
+
15
+ let columns = $derived(group === 'All tasks' ? taskColumns : taskColumns.filter((column) => column.group === group));
16
+ let filteredRows = $derived(
17
+ results.filter((row) => `${row.model} ${row.representation} ${row.status}`.toLocaleLowerCase().includes(query.trim().toLocaleLowerCase()))
18
+ );
19
+ let sortedRows = $derived.by(() => {
20
+ const direction = sortDirection === 'asc' ? 1 : -1;
21
+ return [...filteredRows].sort((a, b) => compare(a, b, sortField) * direction);
22
+ });
23
+
24
+ function compare(a: ResultRow, b: ResultRow, field: string): number {
25
+ if (field === 'model') return a.model.localeCompare(b.model);
26
+ if (field === 'representation') return a.representation.localeCompare(b.representation);
27
+ if (field === 'status') return a.status.localeCompare(b.status);
28
+ return numericScore(a.scores[field as TaskKey]) - numericScore(b.scores[field as TaskKey]);
29
+ }
30
+
31
+ function sort(field: string): void {
32
+ if (sortField === field) sortDirection = sortDirection === 'asc' ? 'desc' : 'asc';
33
+ else {
34
+ sortField = field;
35
+ sortDirection = field === 'model' || field === 'representation' || field === 'status' ? 'asc' : 'desc';
36
+ }
37
+ }
38
+ </script>
39
+
40
+ <section class="leaderboard-section" aria-labelledby="results-heading">
41
+ <div class="section-heading">
42
+ <div>
43
+ <p class="eyebrow">Benchmark results</p>
44
+ <h2 id="results-heading">Model comparison</h2>
45
+ </div>
46
+ <p class="result-count">{filteredRows.length} {filteredRows.length === 1 ? 'model' : 'models'}</p>
47
+ </div>
48
+
49
+ <div class="controls">
50
+ <label class="search-field">
51
+ <span class="sr-only">Search models</span>
52
+ <span aria-hidden="true">⌕</span>
53
+ <input bind:value={query} type="search" placeholder="Search models…" />
54
+ </label>
55
+ <div class="segments" aria-label="Task group">
56
+ {#each groups as item}
57
+ <button class:active={group === item} type="button" onclick={() => (group = item)}>{item}</button>
58
+ {/each}
59
+ </div>
60
+ </div>
61
+
62
+ <div class="table-scroll">
63
+ <table>
64
+ <thead>
65
+ <tr class="group-row">
66
+ <th class="sticky model-column" rowspan="2">
67
+ <SortHeader label="Model" field="model" activeField={sortField} direction={sortDirection} align="left" info="Model repository or identifier." onclick={sort} />
68
+ </th>
69
+ <th class="sticky representation-column" rowspan="2">
70
+ <SortHeader label="Representation / classifier" field="representation" activeField={sortField} direction={sortDirection} align="left" info="The frozen or trained representation and downstream attribution classifier." onclick={sort} />
71
+ </th>
72
+ {#each ['Prose', 'Verse · sentences', 'Verse · metre'] as taskGroup}
73
+ {@const count = columns.filter((column) => column.group === taskGroup).length}
74
+ {#if count > 0}<th class="task-group" colspan={count}>{taskGroup}</th>{/if}
75
+ {/each}
76
+ <th rowspan="2" class="status-column">
77
+ <SortHeader label="Status" field="status" activeField={sortField} direction={sortDirection} align="left" info="Methodological qualification attached to this model configuration." onclick={sort} />
78
+ </th>
79
+ </tr>
80
+ <tr>
81
+ {#each columns as column}
82
+ <th class="score-header">
83
+ <SortHeader label={column.shortLabel} field={column.key} activeField={sortField} direction={sortDirection} info={column.description} onclick={sort} />
84
+ </th>
85
+ {/each}
86
+ </tr>
87
+ </thead>
88
+ <tbody>
89
+ {#each sortedRows as row}
90
+ {@const [owner, name] = row.model.split('/')}
91
+ <tr>
92
+ <th class="sticky model-column" scope="row">
93
+ <span class="owner">{owner}/</span><strong>{name}</strong>
94
+ </th>
95
+ <td class="sticky representation-column">{row.representation}</td>
96
+ {#each columns as column}
97
+ {@const score = row.scores[column.key]}
98
+ <td class="score-cell" style={`--score: ${numericScore(score)}%`}>
99
+ {displayScore(score)}
100
+ </td>
101
+ {/each}
102
+ <td class="status-cell"><span class="status-badge">{row.status}</span></td>
103
+ </tr>
104
+ {:else}
105
+ <tr><td class="empty" colspan={columns.length + 3}>No models match your search.</td></tr>
106
+ {/each}
107
+ </tbody>
108
+ </table>
109
+ </div>
110
+ <p class="table-caption"><InfoTip title="Scores" text="All values are held-out test macro-F1 percentages. Higher is better. Click any column heading to sort." /> All scores are test macro-F1 (%). Higher is better.</p>
111
+ </section>
src/lib/components/SortHeader.svelte ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <script lang="ts">
2
+ import InfoTip from './InfoTip.svelte';
3
+
4
+ interface Props {
5
+ label: string;
6
+ field: string;
7
+ activeField: string;
8
+ direction: 'asc' | 'desc';
9
+ align?: 'left' | 'right';
10
+ info?: string;
11
+ onclick: (field: string) => void;
12
+ }
13
+
14
+ let { label, field, activeField, direction, align = 'right', info, onclick }: Props = $props();
15
+ let active = $derived(activeField === field);
16
+ let icon = $derived(active ? (direction === 'asc' ? '↑' : '↓') : '↕');
17
+ </script>
18
+
19
+ <button class:left={align === 'left'} class="sort-button" type="button" onclick={() => onclick(field)}>
20
+ <span>{label}</span>
21
+ {#if info}<InfoTip title={label} text={info} />{/if}
22
+ <span class:active class="sort-icon" aria-hidden="true">{icon}</span>
23
+ </button>
src/lib/data.ts ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ export type TaskKey =
2
+ | 'prose1'
3
+ | 'prose10'
4
+ | 'prose100'
5
+ | 'verseSentence1'
6
+ | 'verseSentence10'
7
+ | 'verseSentence100'
8
+ | 'verseMetre1'
9
+ | 'verseMetre10'
10
+ | 'verseMetre100';
11
+
12
+ export type Score = number | { display: string; sortValue: number; note: 'dagger' | 'double-dagger' };
13
+
14
+ export interface ResultRow {
15
+ model: string;
16
+ representation: string;
17
+ status: string;
18
+ scores: Record<TaskKey, Score>;
19
+ }
20
+
21
+ export interface TaskColumn {
22
+ key: TaskKey;
23
+ label: string;
24
+ shortLabel: string;
25
+ group: 'Prose' | 'Verse · sentences' | 'Verse · metre';
26
+ unit: string;
27
+ description: string;
28
+ }
29
+
30
+ export const taskColumns: TaskColumn[] = [
31
+ { key: 'prose1', label: 'Prose · 1 sentence', shortLabel: '1 sent.', group: 'Prose', unit: '1 sentence', description: 'Macro-F1 on single-sentence Ancient Greek prose examples.' },
32
+ { key: 'prose10', label: 'Prose · 10 sentences', shortLabel: '10 sent.', group: 'Prose', unit: '10 sentences', description: 'Macro-F1 on ten-sentence Ancient Greek prose chunks.' },
33
+ { key: 'prose100', label: 'Prose · 100 sentences', shortLabel: '100 sent.', group: 'Prose', unit: '100 sentences', description: 'Macro-F1 on one-hundred-sentence Ancient Greek prose chunks.' },
34
+ { key: 'verseSentence1', label: 'Verse · 1 sentence', shortLabel: '1 sent.', group: 'Verse · sentences', unit: '1 sentence', description: 'Macro-F1 on sentence-aligned Ancient Greek verse examples.' },
35
+ { key: 'verseSentence10', label: 'Verse · 10 sentences', shortLabel: '10 sent.', group: 'Verse · sentences', unit: '10 sentences', description: 'Macro-F1 on ten-sentence, sentence-aligned verse chunks.' },
36
+ { key: 'verseSentence100', label: 'Verse · 100 sentences', shortLabel: '100 sent.', group: 'Verse · sentences', unit: '100 sentences', description: 'Macro-F1 on one-hundred-sentence verse chunks. A dagger marks tied validation-selected heads with differing test scores.' },
37
+ { key: 'verseMetre1', label: 'Metre · 1 line', shortLabel: '1 line', group: 'Verse · metre', unit: '1 metrical line', description: 'Macro-F1 on individual Ancient Greek metrical lines.' },
38
+ { key: 'verseMetre10', label: 'Metre · 10 lines', shortLabel: '10 lines', group: 'Verse · metre', unit: '10 metrical lines', description: 'Macro-F1 on ten-line metrical chunks.' },
39
+ { key: 'verseMetre100', label: 'Metre · 100 lines', shortLabel: '100 lines', group: 'Verse · metre', unit: '100 metrical lines', description: 'Macro-F1 on one-hundred-line metrical chunks. A double dagger marks tied validation-selected heads.' }
40
+ ];
41
+
42
+ export const results: ResultRow[] = [
43
+ {
44
+ model: 'bowphs/GreBerta',
45
+ representation: 'Frozen mean-pooled embeddings + MLP',
46
+ status: 'Verse 100 exploratory',
47
+ scores: {
48
+ prose1: 83.5,
49
+ prose10: 96.36,
50
+ prose100: 97.69,
51
+ verseSentence1: 74.63,
52
+ verseSentence10: 80.77,
53
+ verseSentence100: { display: '92.51–100.00†', sortValue: 92.51, note: 'dagger' },
54
+ verseMetre1: 78.85,
55
+ verseMetre10: 92.52,
56
+ verseMetre100: { display: '96.10‡', sortValue: 96.1, note: 'double-dagger' }
57
+ }
58
+ }
59
+ ];
60
+
61
+ export function numericScore(score: Score): number {
62
+ return typeof score === 'number' ? score : score.sortValue;
63
+ }
64
+
65
+ export function displayScore(score: Score): string {
66
+ return typeof score === 'number' ? score.toFixed(2) : score.display;
67
+ }
src/routes/+layout.svelte ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ <script lang="ts">
2
+ import '../app.css';
3
+
4
+ let { children } = $props();
5
+ </script>
6
+
7
+ {@render children()}
src/routes/+layout.ts ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ export const prerender = true;
2
+ export const ssr = true;
src/routes/+page.svelte ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <script lang="ts">
2
+ import LeaderboardTable from '$lib/components/LeaderboardTable.svelte';
3
+
4
+ let dark = $state(false);
5
+
6
+ function toggleTheme(): void {
7
+ dark = !dark;
8
+ document.documentElement.dataset.theme = dark ? 'dark' : 'light';
9
+ }
10
+ </script>
11
+
12
+ <svelte:head>
13
+ <title>Sphragis benchmark leaderboard</title>
14
+ <meta name="description" content="Reproducible Ancient Greek authorship-attribution benchmark results across prose and verse." />
15
+ </svelte:head>
16
+
17
+ <header class="topbar">
18
+ <a class="brand" href="/" aria-label="Sphragis leaderboard home">
19
+ <span class="brand-mark">Σ</span>
20
+ <span>Sphragis</span>
21
+ </a>
22
+ <nav aria-label="Resources">
23
+ <a href="https://huggingface.co/datasets/Urdatorn/sphragis">Dataset</a>
24
+ <a href="https://github.com/Urdatorn/sphragis_models">Models</a>
25
+ <button class="theme-toggle" type="button" onclick={toggleTheme} aria-label="Toggle color theme">{dark ? '☀' : '☾'}</button>
26
+ </nav>
27
+ </header>
28
+
29
+ <main>
30
+ <section class="hero">
31
+ <div class="hero-copy">
32
+ <p class="eyebrow">Ancient Greek authorship attribution</p>
33
+ <h1>A clear view of what identifies an author.</h1>
34
+ <p class="lede">Compare models across fixed, provenance-preserving prose and verse tasks. Every result is selected on validation data and reported once on the untouched test split.</p>
35
+ <div class="hero-actions">
36
+ <a class="primary-action" href="#results-heading">Explore results <span>↓</span></a>
37
+ <a class="secondary-action" href="https://huggingface.co/datasets/Urdatorn/sphragis">View dataset ↗</a>
38
+ </div>
39
+ </div>
40
+ <div class="hero-stat" aria-label="Benchmark scope">
41
+ <span class="stat-number">9</span>
42
+ <span class="stat-label">fixed benchmark tasks</span>
43
+ <div class="stat-rule"></div>
44
+ <span class="stat-detail">3 prose · 3 sentence-aligned verse · 3 metrical verse</span>
45
+ </div>
46
+ </section>
47
+
48
+ <section class="info-grid" aria-label="Benchmark principles">
49
+ <article><span class="card-index">01</span><h2>One metric</h2><p>Test macro-F1 (%) makes class-balanced attribution performance directly comparable across tasks.</p></article>
50
+ <article><span class="card-index">02</span><h2>Three scales</h2><p>Measure evidence at 1, 10, and 100 sentences—or metrical lines—without mixing evaluation units.</p></article>
51
+ <article><span class="card-index">03</span><h2>Test stays untouched</h2><p>Validation selects checkpoints and hyperparameters. Test scores never break validation ties.</p></article>
52
+ </section>
53
+
54
+ <LeaderboardTable />
55
+
56
+ <section class="methodology">
57
+ <div><p class="eyebrow">Reading the table</p><h2>Ties and exploratory results</h2></div>
58
+ <div class="notes">
59
+ <details open><summary><span>†</span> Verse sentence · 100</summary><p>Four GreBerta heads tied at validation macro-F1 1.0000. Their test scores were <strong>92.82, 100.00, 100.00, and 92.51</strong>, so the table reports the full 92.51–100.00 range rather than choosing the best test result.</p></details>
60
+ <details><summary><span>‡</span> Verse metre · 100</summary><p>Four GreBerta heads tied at validation macro-F1 1.0000; all four obtained test macro-F1 <strong>96.10</strong>.</p></details>
61
+ <details><summary><span>◇</span> Exploratory designation</summary><p>The variable-chunk GreBerta <code>_100</code> repair experiment is exploratory because its design followed inspection of an earlier <code>_100</code> test failure.</p></details>
62
+ </div>
63
+ </section>
64
+ </main>
65
+
66
+ <footer>
67
+ <p>Sphragis · Ancient Greek authorship attribution</p>
68
+ <p>Interface patterns adapted from the Apache-2.0 <a href="https://github.com/embeddings-benchmark/leaderboard-frontend">MTEB leaderboard frontend</a>.</p>
69
+ </footer>
svelte.config.js ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import adapter from '@sveltejs/adapter-static';
2
+
3
+ /** @type {import('@sveltejs/kit').Config} */
4
+ const config = {
5
+ compilerOptions: {
6
+ runes: true
7
+ },
8
+ kit: {
9
+ adapter: adapter({
10
+ pages: 'build',
11
+ assets: 'build',
12
+ fallback: '404.html',
13
+ strict: true
14
+ })
15
+ }
16
+ };
17
+
18
+ export default config;
tsconfig.json ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "extends": "./.svelte-kit/tsconfig.json",
3
+ "compilerOptions": {
4
+ "allowJs": true,
5
+ "checkJs": true,
6
+ "esModuleInterop": true,
7
+ "forceConsistentCasingInFileNames": true,
8
+ "resolveJsonModule": true,
9
+ "skipLibCheck": true,
10
+ "sourceMap": true,
11
+ "strict": true,
12
+ "moduleResolution": "bundler"
13
+ }
14
+ }
vite.config.ts ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ import { sveltekit } from '@sveltejs/kit/vite';
2
+ import { defineConfig } from 'vite';
3
+
4
+ export default defineConfig({
5
+ plugins: [sveltekit()]
6
+ });