Spaces:
Running
Running
Publish leaderboard scores for three parametric models (n=190)
Browse files- README.md +2 -2
- app.js +389 -453
- data/samples.json +36 -39
- index.html +299 -294
- styles.css +662 -949
README.md
CHANGED
|
@@ -4,12 +4,12 @@ emoji: 🌿
|
|
| 4 |
colorFrom: green
|
| 5 |
colorTo: blue
|
| 6 |
sdk: static
|
| 7 |
-
short_description: Indian BFSI QA benchmark — browse all
|
| 8 |
---
|
| 9 |
|
| 10 |
# BFSI-Bench
|
| 11 |
|
| 12 |
-
Project page for [`ground-truth/bfsi-bench`](https://huggingface.co/datasets/ground-truth/bfsi-bench): dataset overview, a read-only sample browser, and a leaderboard
|
| 13 |
|
| 14 |
Source in the eval repo: `docs/bfsi-bench-space/`.
|
| 15 |
|
|
|
|
| 4 |
colorFrom: green
|
| 5 |
colorTo: blue
|
| 6 |
sdk: static
|
| 7 |
+
short_description: Indian BFSI QA benchmark — browse all 190 test items
|
| 8 |
---
|
| 9 |
|
| 10 |
# BFSI-Bench
|
| 11 |
|
| 12 |
+
Project page for [`ground-truth/bfsi-bench`](https://huggingface.co/datasets/ground-truth/bfsi-bench): dataset overview, a read-only sample browser, and a leaderboard.
|
| 13 |
|
| 14 |
Source in the eval repo: `docs/bfsi-bench-space/`.
|
| 15 |
|
app.js
CHANGED
|
@@ -1,480 +1,416 @@
|
|
| 1 |
-
(() => {
|
| 2 |
-
const CATS = [
|
| 3 |
-
{ code: "all", label: "All" },
|
| 4 |
-
{ code: "BFSI-JUR", label: "Jurisdiction" },
|
| 5 |
-
{ code: "BFSI-NUM", label: "Numerical" },
|
| 6 |
-
{ code: "BFSI-TMP", label: "Temporal" },
|
| 7 |
-
{ code: "BFSI-ADV", label: "Red-team" },
|
| 8 |
-
{ code: "BFSI-GRD", label: "Grounded" },
|
| 9 |
-
];
|
| 10 |
-
|
| 11 |
-
const state = {
|
| 12 |
-
items: [],
|
| 13 |
-
filtered: [],
|
| 14 |
-
currentId: null,
|
| 15 |
-
cat: "all",
|
| 16 |
-
q: "",
|
| 17 |
-
mode: "overview",
|
| 18 |
-
};
|
| 19 |
-
|
| 20 |
-
const el = {
|
| 21 |
-
progress: document.getElementById("progress"),
|
| 22 |
-
chips: document.getElementById("cat-chips"),
|
| 23 |
-
search: document.getElementById("filter-q"),
|
| 24 |
-
queue: document.getElementById("queue"),
|
| 25 |
-
empty: document.getElementById("empty-state"),
|
| 26 |
-
loadError: document.getElementById("load-error"),
|
| 27 |
-
detail: document.getElementById("detail"),
|
| 28 |
-
itemId: document.getElementById("item-id"),
|
| 29 |
-
itemCat: document.getElementById("item-cat"),
|
| 30 |
-
itemQuery: document.getElementById("item-query"),
|
| 31 |
-
itemGold: document.getElementById("item-gold"),
|
| 32 |
-
itemSources: document.getElementById("item-sources"),
|
| 33 |
-
itemNuggets: document.getElementById("item-nuggets"),
|
| 34 |
itemEvidence: document.getElementById("item-evidence"),
|
| 35 |
-
|
| 36 |
-
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
|
| 40 |
-
|
| 41 |
-
|
| 42 |
-
};
|
| 43 |
-
|
| 44 |
function escapeHtml(s) {
|
| 45 |
-
return String(s ?? "")
|
| 46 |
-
.replace(/&/g, "&")
|
| 47 |
-
.replace(/</g, "<")
|
| 48 |
-
.replace(/>/g, ">")
|
| 49 |
-
.replace(/"/g, """);
|
| 50 |
}
|
| 51 |
|
| 52 |
-
|
| 53 |
-
"
|
| 54 |
-
"
|
| 55 |
-
"sample
|
| 56 |
-
|
| 57 |
-
|
| 58 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 59 |
|
| 60 |
-
function
|
| 61 |
-
|
| 62 |
-
|
| 63 |
-
|
| 64 |
-
|
| 65 |
-
|
| 66 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 67 |
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 68 |
}
|
| 69 |
|
| 70 |
-
function
|
| 71 |
-
if (!
|
| 72 |
-
|
| 73 |
-
setActiveSection(SAMPLE_SECTIONS[SAMPLE_SECTIONS.length - 1]);
|
| 74 |
return;
|
| 75 |
}
|
| 76 |
-
|
| 77 |
-
|
| 78 |
-
|
| 79 |
-
|
| 80 |
-
|
| 81 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 82 |
}
|
| 83 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 84 |
}
|
| 85 |
-
|
| 86 |
-
function parseHash() {
|
| 87 |
-
const raw = (window.location.hash || "").replace(/^#/, "");
|
| 88 |
-
if (!raw) return { mode: "overview", id: null };
|
| 89 |
-
if (raw.startsWith("sample/")) {
|
| 90 |
-
return { mode: "samples", id: decodeURIComponent(raw.slice("sample/".length)) };
|
| 91 |
-
}
|
| 92 |
-
if (raw === "samples") return { mode: "samples", id: null };
|
| 93 |
-
if (raw === "leaderboard") return { mode: "leaderboard", id: null };
|
| 94 |
-
if (raw === "overview") return { mode: "overview", id: null };
|
| 95 |
-
return { mode: "overview", id: null };
|
| 96 |
-
}
|
| 97 |
-
|
| 98 |
-
function writeHash() {
|
| 99 |
-
let next = state.mode;
|
| 100 |
-
if (state.mode === "samples" && state.currentId) {
|
| 101 |
-
next = `sample/${encodeURIComponent(state.currentId)}`;
|
| 102 |
-
} else if (state.mode === "samples") {
|
| 103 |
-
next = "samples";
|
| 104 |
-
}
|
| 105 |
-
const hash = `#${next}`;
|
| 106 |
-
if (window.location.hash !== hash) {
|
| 107 |
-
history.replaceState(null, "", hash);
|
| 108 |
-
}
|
| 109 |
-
}
|
| 110 |
-
|
| 111 |
-
function setMode(mode, { fromHash = false } = {}) {
|
| 112 |
-
state.mode = mode;
|
| 113 |
-
document.querySelectorAll(".mode").forEach((btn) => {
|
| 114 |
-
const on = btn.dataset.mode === mode;
|
| 115 |
-
btn.classList.toggle("active", on);
|
| 116 |
-
btn.setAttribute("aria-selected", on ? "true" : "false");
|
| 117 |
-
});
|
| 118 |
-
document.querySelectorAll(".mode-panel").forEach((panel) => {
|
| 119 |
-
const on = panel.id === `mode-${mode}`;
|
| 120 |
-
panel.classList.toggle("active", on);
|
| 121 |
-
panel.hidden = !on;
|
| 122 |
-
});
|
| 123 |
-
document.body.classList.toggle("is-explorer", mode === "samples");
|
| 124 |
-
document.body.classList.remove("drawer-open");
|
| 125 |
-
if (!fromHash) writeHash();
|
| 126 |
-
}
|
| 127 |
-
|
| 128 |
-
function applyFromHash() {
|
| 129 |
-
const { mode, id } = parseHash();
|
| 130 |
-
setMode(mode, { fromHash: true });
|
| 131 |
-
if (mode === "samples" && id) {
|
| 132 |
-
state.currentId = id;
|
| 133 |
-
if (state.items.length) selectId(id, { skipHash: true });
|
| 134 |
-
}
|
| 135 |
-
}
|
| 136 |
-
|
| 137 |
-
function catLabel(code) {
|
| 138 |
-
const hit = CATS.find((c) => c.code === code);
|
| 139 |
-
return hit ? hit.label : code;
|
| 140 |
-
}
|
| 141 |
-
|
| 142 |
-
function haystack(item) {
|
| 143 |
-
const parts = [
|
| 144 |
-
item.id,
|
| 145 |
-
item.category,
|
| 146 |
-
item.category_code,
|
| 147 |
-
item.query,
|
| 148 |
-
item.gold_answer,
|
| 149 |
-
];
|
| 150 |
-
for (const s of item.sources || []) {
|
| 151 |
-
parts.push(s.url, s.note, s.published_date);
|
| 152 |
-
}
|
| 153 |
-
for (const e of item.evidence || []) {
|
| 154 |
-
parts.push(e.url, e.title, e.quote);
|
| 155 |
-
}
|
| 156 |
-
for (const n of item.gold_nuggets || []) {
|
| 157 |
-
parts.push(n.id, n.text, n.evidence_quote);
|
| 158 |
-
}
|
| 159 |
-
return parts.filter(Boolean).join("\n").toLowerCase();
|
| 160 |
-
}
|
| 161 |
-
|
| 162 |
-
function applyFilters() {
|
| 163 |
-
const q = state.q.trim().toLowerCase();
|
| 164 |
-
state.filtered = state.items.filter((it) => {
|
| 165 |
-
if (state.cat !== "all" && it.category_code !== state.cat) return false;
|
| 166 |
-
if (q && !haystack(it).includes(q)) return false;
|
| 167 |
-
return true;
|
| 168 |
-
});
|
| 169 |
-
renderProgress();
|
| 170 |
-
renderQueue();
|
| 171 |
-
}
|
| 172 |
-
|
| 173 |
-
function catCounts() {
|
| 174 |
-
const counts = { all: state.items.length };
|
| 175 |
-
for (const it of state.items) {
|
| 176 |
-
counts[it.category_code] = (counts[it.category_code] || 0) + 1;
|
| 177 |
-
}
|
| 178 |
-
return counts;
|
| 179 |
-
}
|
| 180 |
-
|
| 181 |
-
function renderChips() {
|
| 182 |
-
const counts = catCounts();
|
| 183 |
-
el.chips.innerHTML = CATS.map((c) => {
|
| 184 |
-
const n = counts[c.code] ?? 0;
|
| 185 |
-
const on = state.cat === c.code ? " is-on" : "";
|
| 186 |
-
return `<button type="button" class="${on}" data-cat="${c.code}">${escapeHtml(
|
| 187 |
-
c.label
|
| 188 |
-
)} <span class="chip-count">${n}</span></button>`;
|
| 189 |
-
}).join("");
|
| 190 |
-
}
|
| 191 |
-
|
| 192 |
-
function renderProgress() {
|
| 193 |
-
const total = state.items.length;
|
| 194 |
-
el.progress.textContent = `${state.filtered.length} of ${total}`;
|
| 195 |
-
}
|
| 196 |
-
|
| 197 |
-
function renderQueue() {
|
| 198 |
-
if (!state.filtered.length) {
|
| 199 |
-
el.queue.innerHTML = `<li class="empty-queue"><p class="empty" style="margin:0.6rem 0.85rem">No matches.</p></li>`;
|
| 200 |
-
return;
|
| 201 |
-
}
|
| 202 |
-
el.queue.innerHTML = state.filtered
|
| 203 |
-
.map((it) => {
|
| 204 |
-
const active = it.id === state.currentId ? " active" : "";
|
| 205 |
-
return `<li>
|
| 206 |
-
<button type="button" class="${active}" data-id="${escapeHtml(it.id)}">
|
| 207 |
-
<span class="qid">${escapeHtml(it.id)}</span>
|
| 208 |
-
<span class="qtext">${escapeHtml(it.query)}</span>
|
| 209 |
-
<span class="qmeta"><span class="pill ${escapeHtml(it.category_code)}">${escapeHtml(
|
| 210 |
-
catLabel(it.category_code)
|
| 211 |
-
)}</span></span>
|
| 212 |
-
</button>
|
| 213 |
-
</li>`;
|
| 214 |
-
})
|
| 215 |
-
.join("");
|
| 216 |
-
}
|
| 217 |
-
|
| 218 |
-
function renderSources(sources) {
|
| 219 |
-
if (!sources || !sources.length) {
|
| 220 |
-
el.itemSources.innerHTML = "<li><em>No sources</em></li>";
|
| 221 |
-
return;
|
| 222 |
-
}
|
| 223 |
-
el.itemSources.innerHTML = sources
|
| 224 |
-
.map((s) => {
|
| 225 |
-
const url = s.url || "";
|
| 226 |
-
const note = s.note || "";
|
| 227 |
-
const date = s.published_date || "";
|
| 228 |
-
const link = url
|
| 229 |
-
? `<a href="${escapeHtml(url)}" target="_blank" rel="noopener noreferrer">${escapeHtml(url)}</a>`
|
| 230 |
-
: "<em>No URL</em>";
|
| 231 |
-
return `<li>${link}${note ? `<span class="note">${escapeHtml(note)}</span>` : ""}${
|
| 232 |
-
date ? `<span class="date">${escapeHtml(date)}</span>` : ""
|
| 233 |
-
}</li>`;
|
| 234 |
-
})
|
| 235 |
-
.join("");
|
| 236 |
-
}
|
| 237 |
-
|
| 238 |
-
function renderNuggets(nuggets) {
|
| 239 |
-
if (!nuggets || !nuggets.length) {
|
| 240 |
-
el.itemNuggets.innerHTML = "<p><em>No gold nuggets</em></p>";
|
| 241 |
-
return;
|
| 242 |
-
}
|
| 243 |
-
el.itemNuggets.innerHTML = nuggets
|
| 244 |
-
.map((n) => {
|
| 245 |
-
const vital = n.vital ? `<span class="vital">Required</span>` : "";
|
| 246 |
-
const quote = n.evidence_quote
|
| 247 |
-
? `<p class="nugget-quote">${escapeHtml(n.evidence_quote)}</p>`
|
| 248 |
-
: "";
|
| 249 |
-
return `<article class="nugget">
|
| 250 |
-
<div class="nugget-head">
|
| 251 |
-
<span class="nugget-id">${escapeHtml(n.id || "")}</span>
|
| 252 |
-
${vital}
|
| 253 |
-
</div>
|
| 254 |
-
<p class="nugget-text">${escapeHtml(n.text || "")}</p>
|
| 255 |
-
${quote}
|
| 256 |
-
</article>`;
|
| 257 |
-
})
|
| 258 |
-
.join("");
|
| 259 |
-
}
|
| 260 |
-
|
| 261 |
-
function renderEvidence(evidence) {
|
| 262 |
-
if (!evidence || !evidence.length) {
|
| 263 |
-
el.itemEvidence.innerHTML = "<p><em>No evidence quotes</em></p>";
|
| 264 |
-
return;
|
| 265 |
-
}
|
| 266 |
-
el.itemEvidence.innerHTML = evidence
|
| 267 |
-
.map((e) => {
|
| 268 |
-
const href = e.url || "";
|
| 269 |
-
const heading = href
|
| 270 |
-
? `<a href="${escapeHtml(href)}" target="_blank" rel="noopener noreferrer">${escapeHtml(href)}</a>`
|
| 271 |
-
: escapeHtml(e.title || "No URL");
|
| 272 |
-
const quote = e.quote || "";
|
| 273 |
-
const ctx = e.context || "";
|
| 274 |
-
const kind = e.kind || "";
|
| 275 |
-
const ctxBlock =
|
| 276 |
-
ctx && ctx !== quote
|
| 277 |
-
? `<details class="ev-ctx-wrap"><summary>Surrounding context</summary>
|
| 278 |
-
<div class="ev-ctx">${escapeHtml(ctx)}</div></details>`
|
| 279 |
-
: "";
|
| 280 |
-
return `<article class="ev-item">
|
| 281 |
-
<div class="ev-title">${heading}</div>
|
| 282 |
-
<div class="ev-quote">${escapeHtml(quote)}</div>
|
| 283 |
-
${ctxBlock}
|
| 284 |
-
${kind ? `<div class="ev-meta">${escapeHtml(kind)}</div>` : ""}
|
| 285 |
-
</article>`;
|
| 286 |
-
})
|
| 287 |
-
.join("");
|
| 288 |
-
}
|
| 289 |
-
|
| 290 |
function renderDetail(item) {
|
| 291 |
-
el.empty.hidden = true;
|
| 292 |
-
el.loadError.hidden = true;
|
| 293 |
-
el.detail.hidden = false;
|
| 294 |
-
el.itemId.textContent = item.id;
|
| 295 |
-
el.itemCat.textContent = item.category_code;
|
| 296 |
-
el.itemCat.className = `pill ${item.category_code}`;
|
| 297 |
-
el.itemQuery.textContent = item.query || "";
|
| 298 |
-
el.itemGold.textContent = item.gold_answer || "";
|
| 299 |
renderSources(item.sources);
|
| 300 |
renderNuggets(item.gold_nuggets);
|
| 301 |
renderEvidence(item.evidence);
|
| 302 |
-
el.
|
| 303 |
-
|
| 304 |
-
const
|
| 305 |
-
if (
|
| 306 |
-
|
| 307 |
-
|
| 308 |
-
|
| 309 |
-
|
| 310 |
-
|
| 311 |
-
}
|
| 312 |
-
|
| 313 |
-
|
| 314 |
-
|
| 315 |
-
|
| 316 |
-
el.
|
| 317 |
-
|
| 318 |
-
|
| 319 |
-
|
| 320 |
-
|
| 321 |
-
|
| 322 |
-
|
| 323 |
-
|
| 324 |
-
|
| 325 |
-
|
| 326 |
-
|
| 327 |
-
|
| 328 |
-
|
| 329 |
-
|
| 330 |
-
|
| 331 |
-
|
| 332 |
-
|
| 333 |
-
|
| 334 |
-
|
| 335 |
-
|
| 336 |
-
|
| 337 |
-
|
| 338 |
-
if (
|
| 339 |
-
|
| 340 |
-
|
| 341 |
-
|
| 342 |
-
|
| 343 |
-
|
| 344 |
-
|
| 345 |
-
|
| 346 |
-
|
| 347 |
-
|
| 348 |
-
|
| 349 |
-
|
| 350 |
-
|
| 351 |
-
|
| 352 |
-
|
| 353 |
-
|
| 354 |
-
|
| 355 |
-
|
| 356 |
-
|
| 357 |
-
|
| 358 |
-
|
| 359 |
-
|
| 360 |
-
|
| 361 |
-
|
| 362 |
-
|
| 363 |
-
|
| 364 |
-
|
| 365 |
-
|
| 366 |
-
|
| 367 |
-
|
| 368 |
-
|
| 369 |
-
|
| 370 |
-
|
| 371 |
-
|
| 372 |
-
}
|
| 373 |
-
|
| 374 |
-
|
| 375 |
-
|
| 376 |
-
});
|
| 377 |
-
|
| 378 |
document.querySelectorAll("[data-goto]").forEach((btn) => {
|
| 379 |
btn.addEventListener("click", () => {
|
| 380 |
const mode = btn.dataset.goto;
|
| 381 |
-
const targetCat = btn.dataset.catTarget;
|
| 382 |
-
if (targetCat) {
|
| 383 |
-
state.cat = targetCat;
|
| 384 |
-
state.q = "";
|
| 385 |
-
el.search.value = "";
|
| 386 |
-
renderChips();
|
| 387 |
-
applyFilters();
|
| 388 |
-
}
|
| 389 |
setMode(mode);
|
| 390 |
if (mode === "samples" && state.filtered[0]) selectId(state.filtered[0].id);
|
| 391 |
});
|
| 392 |
-
});
|
| 393 |
-
|
| 394 |
-
el.chips.addEventListener("click", (e) => {
|
| 395 |
-
const btn = e.target.closest("button[data-cat]");
|
| 396 |
-
if (!btn) return;
|
| 397 |
-
state.cat = btn.dataset.cat;
|
| 398 |
-
renderChips();
|
| 399 |
-
applyFilters();
|
| 400 |
-
});
|
| 401 |
-
|
| 402 |
-
el.search.addEventListener("input", () => {
|
| 403 |
-
state.q = el.search.value;
|
| 404 |
-
applyFilters();
|
| 405 |
-
});
|
| 406 |
-
|
| 407 |
-
el.queue.addEventListener("click", (e) => {
|
| 408 |
-
const btn = e.target.closest("button[data-id]");
|
| 409 |
-
if (!btn) return;
|
| 410 |
-
selectId(btn.dataset.id);
|
| 411 |
-
});
|
| 412 |
-
|
| 413 |
-
el.btnPrev.addEventListener("click", () => step(-1));
|
| 414 |
-
el.btnNext.addEventListener("click", () => step(1));
|
| 415 |
-
el.btnCopy.addEventListener("click", copyLink);
|
| 416 |
-
el.btnOpen.addEventListener("click", () => document.body.classList.add("drawer-open"));
|
| 417 |
-
el.btnClose.addEventListener("click", () => document.body.classList.remove("drawer-open"));
|
| 418 |
|
| 419 |
-
el.
|
| 420 |
-
const btn = e.target.closest("button[data-
|
| 421 |
if (!btn) return;
|
| 422 |
-
|
| 423 |
-
|
| 424 |
-
|
| 425 |
-
section.scrollIntoView({ behavior: "smooth", block: "start" });
|
| 426 |
});
|
| 427 |
|
| 428 |
-
|
| 429 |
-
|
| 430 |
-
|
| 431 |
-
|
| 432 |
-
|
| 433 |
-
|
| 434 |
-
|
|
|
|
|
|
|
| 435 |
});
|
| 436 |
-
|
| 437 |
-
|
| 438 |
-
|
| 439 |
-
|
| 440 |
-
|
| 441 |
-
|
| 442 |
-
|
| 443 |
-
|
| 444 |
-
|
| 445 |
-
|
| 446 |
-
|
| 447 |
-
|
| 448 |
-
|
| 449 |
-
|
| 450 |
-
|
| 451 |
-
|
| 452 |
-
|
| 453 |
-
|
| 454 |
-
|
| 455 |
-
|
| 456 |
-
|
| 457 |
-
|
| 458 |
-
|
| 459 |
-
|
| 460 |
-
|
| 461 |
-
const
|
| 462 |
-
if (
|
| 463 |
-
|
| 464 |
-
|
| 465 |
-
|
| 466 |
-
|
| 467 |
-
|
| 468 |
-
|
| 469 |
-
|
| 470 |
-
|
| 471 |
-
|
| 472 |
-
|
| 473 |
-
|
| 474 |
-
|
| 475 |
-
|
| 476 |
-
|
| 477 |
-
|
| 478 |
-
|
| 479 |
-
|
| 480 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
(() => {
|
| 2 |
+
const CATS = [
|
| 3 |
+
{ code: "all", label: "All" },
|
| 4 |
+
{ code: "BFSI-JUR", label: "Jurisdiction" },
|
| 5 |
+
{ code: "BFSI-NUM", label: "Numerical" },
|
| 6 |
+
{ code: "BFSI-TMP", label: "Temporal" },
|
| 7 |
+
{ code: "BFSI-ADV", label: "Red-team" },
|
| 8 |
+
{ code: "BFSI-GRD", label: "Grounded" },
|
| 9 |
+
];
|
| 10 |
+
|
| 11 |
+
const state = {
|
| 12 |
+
items: [],
|
| 13 |
+
filtered: [],
|
| 14 |
+
currentId: null,
|
| 15 |
+
cat: "all",
|
| 16 |
+
q: "",
|
| 17 |
+
mode: "overview",
|
| 18 |
+
};
|
| 19 |
+
|
| 20 |
+
const el = {
|
| 21 |
+
progress: document.getElementById("progress"),
|
| 22 |
+
chips: document.getElementById("cat-chips"),
|
| 23 |
+
search: document.getElementById("filter-q"),
|
| 24 |
+
queue: document.getElementById("queue"),
|
| 25 |
+
empty: document.getElementById("empty-state"),
|
| 26 |
+
loadError: document.getElementById("load-error"),
|
| 27 |
+
detail: document.getElementById("detail"),
|
| 28 |
+
itemId: document.getElementById("item-id"),
|
| 29 |
+
itemCat: document.getElementById("item-cat"),
|
| 30 |
+
itemQuery: document.getElementById("item-query"),
|
| 31 |
+
itemGold: document.getElementById("item-gold"),
|
| 32 |
+
itemSources: document.getElementById("item-sources"),
|
| 33 |
+
itemNuggets: document.getElementById("item-nuggets"),
|
| 34 |
itemEvidence: document.getElementById("item-evidence"),
|
| 35 |
+
btnPrev: document.getElementById("btn-prev"),
|
| 36 |
+
btnNext: document.getElementById("btn-next"),
|
| 37 |
+
btnCopy: document.getElementById("btn-copy"),
|
| 38 |
+
btnOpen: document.getElementById("btn-open-drawer"),
|
| 39 |
+
btnClose: document.getElementById("btn-close-drawer"),
|
| 40 |
+
};
|
| 41 |
+
|
|
|
|
|
|
|
| 42 |
function escapeHtml(s) {
|
| 43 |
+
return String(s ?? "")
|
| 44 |
+
.replace(/&/g, "&")
|
| 45 |
+
.replace(/</g, "<")
|
| 46 |
+
.replace(/>/g, ">")
|
| 47 |
+
.replace(/"/g, """);
|
| 48 |
}
|
| 49 |
|
| 50 |
+
function parseHash() {
|
| 51 |
+
const raw = (window.location.hash || "").replace(/^#/, "");
|
| 52 |
+
if (!raw) return { mode: "overview", id: null };
|
| 53 |
+
if (raw.startsWith("sample/")) {
|
| 54 |
+
return { mode: "samples", id: decodeURIComponent(raw.slice("sample/".length)) };
|
| 55 |
+
}
|
| 56 |
+
if (raw === "samples") return { mode: "samples", id: null };
|
| 57 |
+
if (raw === "leaderboard") return { mode: "leaderboard", id: null };
|
| 58 |
+
if (raw === "overview") return { mode: "overview", id: null };
|
| 59 |
+
return { mode: "overview", id: null };
|
| 60 |
+
}
|
| 61 |
+
|
| 62 |
+
function writeHash() {
|
| 63 |
+
let next = state.mode;
|
| 64 |
+
if (state.mode === "samples" && state.currentId) {
|
| 65 |
+
next = `sample/${encodeURIComponent(state.currentId)}`;
|
| 66 |
+
} else if (state.mode === "samples") {
|
| 67 |
+
next = "samples";
|
| 68 |
+
}
|
| 69 |
+
const hash = `#${next}`;
|
| 70 |
+
if (window.location.hash !== hash) {
|
| 71 |
+
history.replaceState(null, "", hash);
|
| 72 |
+
}
|
| 73 |
+
}
|
| 74 |
+
|
| 75 |
+
function setMode(mode, { fromHash = false } = {}) {
|
| 76 |
+
state.mode = mode;
|
| 77 |
+
document.querySelectorAll(".mode").forEach((btn) => {
|
| 78 |
+
const on = btn.dataset.mode === mode;
|
| 79 |
+
btn.classList.toggle("active", on);
|
| 80 |
+
btn.setAttribute("aria-selected", on ? "true" : "false");
|
| 81 |
+
});
|
| 82 |
+
document.querySelectorAll(".mode-panel").forEach((panel) => {
|
| 83 |
+
const on = panel.id === `mode-${mode}`;
|
| 84 |
+
panel.classList.toggle("active", on);
|
| 85 |
+
panel.hidden = !on;
|
| 86 |
+
});
|
| 87 |
+
document.body.classList.toggle("is-explorer", mode === "samples");
|
| 88 |
+
document.body.classList.remove("drawer-open");
|
| 89 |
+
if (!fromHash) writeHash();
|
| 90 |
+
}
|
| 91 |
+
|
| 92 |
+
function applyFromHash() {
|
| 93 |
+
const { mode, id } = parseHash();
|
| 94 |
+
setMode(mode, { fromHash: true });
|
| 95 |
+
if (mode === "samples" && id) {
|
| 96 |
+
state.currentId = id;
|
| 97 |
+
if (state.items.length) selectId(id, { skipHash: true });
|
| 98 |
+
}
|
| 99 |
+
}
|
| 100 |
+
|
| 101 |
+
function catLabel(code) {
|
| 102 |
+
const hit = CATS.find((c) => c.code === code);
|
| 103 |
+
return hit ? hit.label : code;
|
| 104 |
+
}
|
| 105 |
|
| 106 |
+
function haystack(item) {
|
| 107 |
+
const parts = [
|
| 108 |
+
item.id,
|
| 109 |
+
item.category,
|
| 110 |
+
item.category_code,
|
| 111 |
+
item.query,
|
| 112 |
+
item.gold_answer,
|
| 113 |
+
];
|
| 114 |
+
for (const s of item.sources || []) {
|
| 115 |
+
parts.push(s.url, s.note, s.published_date);
|
| 116 |
+
}
|
| 117 |
+
for (const e of item.evidence || []) {
|
| 118 |
+
parts.push(e.url, e.title, e.quote);
|
| 119 |
+
}
|
| 120 |
+
for (const n of item.gold_nuggets || []) {
|
| 121 |
+
parts.push(n.id, n.text, n.evidence_quote);
|
| 122 |
+
}
|
| 123 |
+
return parts.filter(Boolean).join("\n").toLowerCase();
|
| 124 |
+
}
|
| 125 |
+
|
| 126 |
+
function applyFilters() {
|
| 127 |
+
const q = state.q.trim().toLowerCase();
|
| 128 |
+
state.filtered = state.items.filter((it) => {
|
| 129 |
+
if (state.cat !== "all" && it.category_code !== state.cat) return false;
|
| 130 |
+
if (q && !haystack(it).includes(q)) return false;
|
| 131 |
+
return true;
|
| 132 |
});
|
| 133 |
+
renderProgress();
|
| 134 |
+
renderQueue();
|
| 135 |
+
}
|
| 136 |
+
|
| 137 |
+
function catCounts() {
|
| 138 |
+
const counts = { all: state.items.length };
|
| 139 |
+
for (const it of state.items) {
|
| 140 |
+
counts[it.category_code] = (counts[it.category_code] || 0) + 1;
|
| 141 |
+
}
|
| 142 |
+
return counts;
|
| 143 |
+
}
|
| 144 |
+
|
| 145 |
+
function renderChips() {
|
| 146 |
+
const counts = catCounts();
|
| 147 |
+
el.chips.innerHTML = CATS.map((c) => {
|
| 148 |
+
const n = counts[c.code] ?? 0;
|
| 149 |
+
const on = state.cat === c.code ? " is-on" : "";
|
| 150 |
+
return `<button type="button" class="${on}" data-cat="${c.code}">${escapeHtml(
|
| 151 |
+
c.label
|
| 152 |
+
)} <span class="chip-count">${n}</span></button>`;
|
| 153 |
+
}).join("");
|
| 154 |
+
}
|
| 155 |
+
|
| 156 |
+
function renderProgress() {
|
| 157 |
+
const total = state.items.length;
|
| 158 |
+
el.progress.textContent = `${state.filtered.length} of ${total}`;
|
| 159 |
+
}
|
| 160 |
+
|
| 161 |
+
function renderQueue() {
|
| 162 |
+
if (!state.filtered.length) {
|
| 163 |
+
el.queue.innerHTML = `<li class="empty-queue"><p class="empty" style="margin:0.6rem 0.85rem">No matches.</p></li>`;
|
| 164 |
+
return;
|
| 165 |
+
}
|
| 166 |
+
el.queue.innerHTML = state.filtered
|
| 167 |
+
.map((it) => {
|
| 168 |
+
const active = it.id === state.currentId ? " active" : "";
|
| 169 |
+
return `<li>
|
| 170 |
+
<button type="button" class="${active}" data-id="${escapeHtml(it.id)}">
|
| 171 |
+
<span class="qid">${escapeHtml(it.id)}</span>
|
| 172 |
+
<span class="qtext">${escapeHtml(it.query)}</span>
|
| 173 |
+
<span class="qmeta"><span class="pill ${escapeHtml(it.category_code)}">${escapeHtml(
|
| 174 |
+
catLabel(it.category_code)
|
| 175 |
+
)}</span></span>
|
| 176 |
+
</button>
|
| 177 |
+
</li>`;
|
| 178 |
+
})
|
| 179 |
+
.join("");
|
| 180 |
+
}
|
| 181 |
+
|
| 182 |
+
function renderSources(sources) {
|
| 183 |
+
if (!sources || !sources.length) {
|
| 184 |
+
el.itemSources.innerHTML = "<li><em>No sources</em></li>";
|
| 185 |
+
return;
|
| 186 |
+
}
|
| 187 |
+
el.itemSources.innerHTML = sources
|
| 188 |
+
.map((s) => {
|
| 189 |
+
const url = s.url || "";
|
| 190 |
+
const note = s.note || "";
|
| 191 |
+
const date = s.published_date || "";
|
| 192 |
+
const link = url
|
| 193 |
+
? `<a href="${escapeHtml(url)}" target="_blank" rel="noopener noreferrer">${escapeHtml(url)}</a>`
|
| 194 |
+
: "<em>No URL</em>";
|
| 195 |
+
return `<li>${link}${note ? `<span class="note">${escapeHtml(note)}</span>` : ""}${
|
| 196 |
+
date ? `<span class="date">${escapeHtml(date)}</span>` : ""
|
| 197 |
+
}</li>`;
|
| 198 |
+
})
|
| 199 |
+
.join("");
|
| 200 |
}
|
| 201 |
|
| 202 |
+
function renderNuggets(nuggets) {
|
| 203 |
+
if (!nuggets || !nuggets.length) {
|
| 204 |
+
el.itemNuggets.innerHTML = "<p><em>No gold nuggets</em></p>";
|
|
|
|
| 205 |
return;
|
| 206 |
}
|
| 207 |
+
el.itemNuggets.innerHTML = nuggets
|
| 208 |
+
.map((n) => {
|
| 209 |
+
const vital = n.vital ? `<span class="vital">Required</span>` : "";
|
| 210 |
+
const quote = n.evidence_quote
|
| 211 |
+
? `<p class="nugget-quote">${escapeHtml(n.evidence_quote)}</p>`
|
| 212 |
+
: "";
|
| 213 |
+
return `<article class="nugget">
|
| 214 |
+
<div class="nugget-head">
|
| 215 |
+
<span class="nugget-id">${escapeHtml(n.id || "")}</span>
|
| 216 |
+
${vital}
|
| 217 |
+
</div>
|
| 218 |
+
<p class="nugget-text">${escapeHtml(n.text || "")}</p>
|
| 219 |
+
${quote}
|
| 220 |
+
</article>`;
|
| 221 |
+
})
|
| 222 |
+
.join("");
|
| 223 |
+
}
|
| 224 |
+
|
| 225 |
+
function renderEvidence(evidence) {
|
| 226 |
+
if (!evidence || !evidence.length) {
|
| 227 |
+
el.itemEvidence.innerHTML = "<p><em>No evidence quotes</em></p>";
|
| 228 |
+
return;
|
| 229 |
}
|
| 230 |
+
el.itemEvidence.innerHTML = evidence
|
| 231 |
+
.map((e) => {
|
| 232 |
+
const href = e.url || "";
|
| 233 |
+
const heading = href
|
| 234 |
+
? `<a href="${escapeHtml(href)}" target="_blank" rel="noopener noreferrer">${escapeHtml(href)}</a>`
|
| 235 |
+
: escapeHtml(e.title || "No URL");
|
| 236 |
+
const quote = e.quote || "";
|
| 237 |
+
const ctx = e.context || "";
|
| 238 |
+
const kind = e.kind || "";
|
| 239 |
+
const ctxBlock =
|
| 240 |
+
ctx && ctx !== quote
|
| 241 |
+
? `<details class="ev-ctx-wrap"><summary>Surrounding context</summary>
|
| 242 |
+
<div class="ev-ctx">${escapeHtml(ctx)}</div></details>`
|
| 243 |
+
: "";
|
| 244 |
+
return `<article class="ev-item">
|
| 245 |
+
<div class="ev-title">${heading}</div>
|
| 246 |
+
<div class="ev-quote">${escapeHtml(quote)}</div>
|
| 247 |
+
${ctxBlock}
|
| 248 |
+
${kind ? `<div class="ev-meta">${escapeHtml(kind)}</div>` : ""}
|
| 249 |
+
</article>`;
|
| 250 |
+
})
|
| 251 |
+
.join("");
|
| 252 |
}
|
| 253 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 254 |
function renderDetail(item) {
|
| 255 |
+
el.empty.hidden = true;
|
| 256 |
+
el.loadError.hidden = true;
|
| 257 |
+
el.detail.hidden = false;
|
| 258 |
+
el.itemId.textContent = item.id;
|
| 259 |
+
el.itemCat.textContent = item.category_code;
|
| 260 |
+
el.itemCat.className = `pill ${item.category_code}`;
|
| 261 |
+
el.itemQuery.textContent = item.query || "";
|
| 262 |
+
el.itemGold.textContent = item.gold_answer || "";
|
| 263 |
renderSources(item.sources);
|
| 264 |
renderNuggets(item.gold_nuggets);
|
| 265 |
renderEvidence(item.evidence);
|
| 266 |
+
const active = el.queue.querySelector("button.active");
|
| 267 |
+
if (active) active.classList.remove("active");
|
| 268 |
+
const btn = el.queue.querySelector(`button[data-id="${CSS.escape(item.id)}"]`);
|
| 269 |
+
if (btn) {
|
| 270 |
+
btn.classList.add("active");
|
| 271 |
+
btn.scrollIntoView({ block: "nearest" });
|
| 272 |
+
}
|
| 273 |
+
}
|
| 274 |
+
|
| 275 |
+
function selectId(id, { skipHash = false } = {}) {
|
| 276 |
+
const item = state.items.find((it) => it.id === id);
|
| 277 |
+
if (!item) {
|
| 278 |
+
el.detail.hidden = true;
|
| 279 |
+
el.empty.hidden = false;
|
| 280 |
+
el.empty.textContent = id ? `Sample ${id} was not found.` : "Select a sample from the list.";
|
| 281 |
+
return;
|
| 282 |
+
}
|
| 283 |
+
state.currentId = id;
|
| 284 |
+
if (!state.filtered.some((it) => it.id === id)) {
|
| 285 |
+
state.cat = "all";
|
| 286 |
+
state.q = "";
|
| 287 |
+
el.search.value = "";
|
| 288 |
+
renderChips();
|
| 289 |
+
applyFilters();
|
| 290 |
+
}
|
| 291 |
+
renderDetail(item);
|
| 292 |
+
document.body.classList.remove("drawer-open");
|
| 293 |
+
if (!skipHash) {
|
| 294 |
+
setMode("samples", { fromHash: true });
|
| 295 |
+
writeHash();
|
| 296 |
+
}
|
| 297 |
+
}
|
| 298 |
+
|
| 299 |
+
function step(delta) {
|
| 300 |
+
if (!state.filtered.length) return;
|
| 301 |
+
let idx = state.filtered.findIndex((it) => it.id === state.currentId);
|
| 302 |
+
if (idx < 0) idx = 0;
|
| 303 |
+
else idx = Math.max(0, Math.min(state.filtered.length - 1, idx + delta));
|
| 304 |
+
selectId(state.filtered[idx].id);
|
| 305 |
+
}
|
| 306 |
+
|
| 307 |
+
async function copyLink() {
|
| 308 |
+
const url = `${window.location.origin}${window.location.pathname}#sample/${encodeURIComponent(
|
| 309 |
+
state.currentId || ""
|
| 310 |
+
)}`;
|
| 311 |
+
try {
|
| 312 |
+
await navigator.clipboard.writeText(url);
|
| 313 |
+
el.btnCopy.textContent = "Copied";
|
| 314 |
+
setTimeout(() => {
|
| 315 |
+
el.btnCopy.textContent = "Copy link";
|
| 316 |
+
}, 1200);
|
| 317 |
+
} catch {
|
| 318 |
+
el.btnCopy.textContent = "Copy failed";
|
| 319 |
+
setTimeout(() => {
|
| 320 |
+
el.btnCopy.textContent = "Copy link";
|
| 321 |
+
}, 1200);
|
| 322 |
+
}
|
| 323 |
+
}
|
| 324 |
+
|
| 325 |
+
function wire() {
|
| 326 |
+
document.querySelectorAll(".mode").forEach((btn) => {
|
| 327 |
+
btn.addEventListener("click", () => {
|
| 328 |
+
const mode = btn.dataset.mode;
|
| 329 |
+
if (mode === "samples") {
|
| 330 |
+
setMode("samples");
|
| 331 |
+
if (state.currentId) selectId(state.currentId);
|
| 332 |
+
else if (state.filtered[0]) selectId(state.filtered[0].id);
|
| 333 |
+
else writeHash();
|
| 334 |
+
} else {
|
| 335 |
+
setMode(mode);
|
| 336 |
+
}
|
| 337 |
+
});
|
| 338 |
+
});
|
| 339 |
+
|
|
|
|
|
|
|
| 340 |
document.querySelectorAll("[data-goto]").forEach((btn) => {
|
| 341 |
btn.addEventListener("click", () => {
|
| 342 |
const mode = btn.dataset.goto;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 343 |
setMode(mode);
|
| 344 |
if (mode === "samples" && state.filtered[0]) selectId(state.filtered[0].id);
|
| 345 |
});
|
| 346 |
+
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 347 |
|
| 348 |
+
el.chips.addEventListener("click", (e) => {
|
| 349 |
+
const btn = e.target.closest("button[data-cat]");
|
| 350 |
if (!btn) return;
|
| 351 |
+
state.cat = btn.dataset.cat;
|
| 352 |
+
renderChips();
|
| 353 |
+
applyFilters();
|
|
|
|
| 354 |
});
|
| 355 |
|
| 356 |
+
el.search.addEventListener("input", () => {
|
| 357 |
+
state.q = el.search.value;
|
| 358 |
+
applyFilters();
|
| 359 |
+
});
|
| 360 |
+
|
| 361 |
+
el.queue.addEventListener("click", (e) => {
|
| 362 |
+
const btn = e.target.closest("button[data-id]");
|
| 363 |
+
if (!btn) return;
|
| 364 |
+
selectId(btn.dataset.id);
|
| 365 |
});
|
| 366 |
+
|
| 367 |
+
el.btnPrev.addEventListener("click", () => step(-1));
|
| 368 |
+
el.btnNext.addEventListener("click", () => step(1));
|
| 369 |
+
el.btnCopy.addEventListener("click", copyLink);
|
| 370 |
+
el.btnOpen.addEventListener("click", () => document.body.classList.add("drawer-open"));
|
| 371 |
+
el.btnClose.addEventListener("click", () => document.body.classList.remove("drawer-open"));
|
| 372 |
+
|
| 373 |
+
document.addEventListener("keydown", (e) => {
|
| 374 |
+
if (state.mode !== "samples") return;
|
| 375 |
+
const tag = (e.target && e.target.tagName) || "";
|
| 376 |
+
if (tag === "INPUT" || tag === "TEXTAREA" || tag === "SELECT") return;
|
| 377 |
+
if (e.key === "j") {
|
| 378 |
+
e.preventDefault();
|
| 379 |
+
step(1);
|
| 380 |
+
} else if (e.key === "k") {
|
| 381 |
+
e.preventDefault();
|
| 382 |
+
step(-1);
|
| 383 |
+
}
|
| 384 |
+
});
|
| 385 |
+
|
| 386 |
+
window.addEventListener("hashchange", applyFromHash);
|
| 387 |
+
}
|
| 388 |
+
|
| 389 |
+
async function load() {
|
| 390 |
+
try {
|
| 391 |
+
const res = await fetch("./data/samples.json");
|
| 392 |
+
if (!res.ok) throw new Error(`Could not load samples.json (${res.status})`);
|
| 393 |
+
const data = await res.json();
|
| 394 |
+
state.items = Array.isArray(data.items) ? data.items : [];
|
| 395 |
+
renderChips();
|
| 396 |
+
applyFilters();
|
| 397 |
+
const { mode, id } = parseHash();
|
| 398 |
+
if (mode === "samples") {
|
| 399 |
+
setMode("samples", { fromHash: true });
|
| 400 |
+
if (id) selectId(id, { skipHash: true });
|
| 401 |
+
else if (state.filtered[0]) selectId(state.filtered[0].id);
|
| 402 |
+
} else {
|
| 403 |
+
setMode(mode, { fromHash: true });
|
| 404 |
+
}
|
| 405 |
+
} catch (err) {
|
| 406 |
+
el.loadError.hidden = false;
|
| 407 |
+
el.loadError.textContent = err.message || String(err);
|
| 408 |
+
el.empty.hidden = true;
|
| 409 |
+
el.progress.textContent = "Failed to load";
|
| 410 |
+
}
|
| 411 |
+
}
|
| 412 |
+
|
| 413 |
+
wire();
|
| 414 |
+
applyFromHash();
|
| 415 |
+
load();
|
| 416 |
+
})();
|
data/samples.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
| 1 |
{
|
| 2 |
"dataset": "ground-truth/bfsi-bench",
|
| 3 |
"split": "test",
|
| 4 |
-
"total":
|
| 5 |
"counts": {
|
| 6 |
"BFSI-ADV": 29,
|
| 7 |
"BFSI-GRD": 36,
|
| 8 |
"BFSI-JUR": 71,
|
| 9 |
"BFSI-NUM": 36,
|
| 10 |
-
"BFSI-TMP":
|
| 11 |
},
|
| 12 |
"items": [
|
| 13 |
{
|
|
@@ -7227,20 +7227,7 @@
|
|
| 7227 |
"kind": "source"
|
| 7228 |
}
|
| 7229 |
],
|
| 7230 |
-
"gold_nuggets": [
|
| 7231 |
-
{
|
| 7232 |
-
"id": "n1",
|
| 7233 |
-
"text": "No, the maturity capital-gains exemption does not apply to Sovereign Gold Bonds acquired through transfer or purchase in the secondary market.",
|
| 7234 |
-
"vital": true,
|
| 7235 |
-
"evidence_quote": "No, the exemption shall not apply to Sovereign Gold Bonds acquired through transfer or purchase in the secondary market"
|
| 7236 |
-
},
|
| 7237 |
-
{
|
| 7238 |
-
"id": "n2",
|
| 7239 |
-
"text": "The exemption is available only when an individual subscribes to the Sovereign Gold Bond at the time of original issue and holds it continuously until redemption at maturity.",
|
| 7240 |
-
"vital": false,
|
| 7241 |
-
"evidence_quote": "exemption from capital gains tax shall be available only where the Sovereign Gold Bond is subscribed to by an individual at the time of original issue and is held continuously until redemption on maturity"
|
| 7242 |
-
}
|
| 7243 |
-
]
|
| 7244 |
},
|
| 7245 |
{
|
| 7246 |
"id": "bfsi-tmp-034",
|
|
@@ -7385,26 +7372,7 @@
|
|
| 7385 |
"kind": "source"
|
| 7386 |
}
|
| 7387 |
],
|
| 7388 |
-
"gold_nuggets": [
|
| 7389 |
-
{
|
| 7390 |
-
"id": "n1",
|
| 7391 |
-
"text": "No—the salaried individual would have no income-tax liability at a taxable income of ₹11.5 lakh under the new tax regime.",
|
| 7392 |
-
"vital": true,
|
| 7393 |
-
"evidence_quote": null
|
| 7394 |
-
},
|
| 7395 |
-
{
|
| 7396 |
-
"id": "n2",
|
| 7397 |
-
"text": "Under the new tax regime, the Section 87A rebate makes tax nil on taxable income up to ₹12 lakh.",
|
| 7398 |
-
"vital": false,
|
| 7399 |
-
"evidence_quote": "the income does not exceed twelve lakh rupees, 100% of the income-tax payable or ` 60000, whichever is less;"
|
| 7400 |
-
},
|
| 7401 |
-
{
|
| 7402 |
-
"id": "n3",
|
| 7403 |
-
"text": "For salaried taxpayers, the equivalent threshold is ₹12.75 lakh after the standard deduction.",
|
| 7404 |
-
"vital": false,
|
| 7405 |
-
"evidence_quote": null
|
| 7406 |
-
}
|
| 7407 |
-
]
|
| 7408 |
},
|
| 7409 |
{
|
| 7410 |
"id": "bfsi-tmp-039",
|
|
@@ -7483,16 +7451,45 @@
|
|
| 7483 |
"kind": "source"
|
| 7484 |
}
|
| 7485 |
],
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 7486 |
"gold_nuggets": [
|
| 7487 |
{
|
| 7488 |
"id": "n1",
|
| 7489 |
-
"text": "
|
| 7490 |
"vital": true,
|
| 7491 |
-
"evidence_quote": "
|
| 7492 |
},
|
| 7493 |
{
|
| 7494 |
"id": "n2",
|
| 7495 |
-
"text": "
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 7496 |
"vital": false,
|
| 7497 |
"evidence_quote": null
|
| 7498 |
}
|
|
|
|
| 1 |
{
|
| 2 |
"dataset": "ground-truth/bfsi-bench",
|
| 3 |
"split": "test",
|
| 4 |
+
"total": 190,
|
| 5 |
"counts": {
|
| 6 |
"BFSI-ADV": 29,
|
| 7 |
"BFSI-GRD": 36,
|
| 8 |
"BFSI-JUR": 71,
|
| 9 |
"BFSI-NUM": 36,
|
| 10 |
+
"BFSI-TMP": 18
|
| 11 |
},
|
| 12 |
"items": [
|
| 13 |
{
|
|
|
|
| 7227 |
"kind": "source"
|
| 7228 |
}
|
| 7229 |
],
|
| 7230 |
+
"gold_nuggets": []
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 7231 |
},
|
| 7232 |
{
|
| 7233 |
"id": "bfsi-tmp-034",
|
|
|
|
| 7372 |
"kind": "source"
|
| 7373 |
}
|
| 7374 |
],
|
| 7375 |
+
"gold_nuggets": []
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 7376 |
},
|
| 7377 |
{
|
| 7378 |
"id": "bfsi-tmp-039",
|
|
|
|
| 7451 |
"kind": "source"
|
| 7452 |
}
|
| 7453 |
],
|
| 7454 |
+
"gold_nuggets": []
|
| 7455 |
+
},
|
| 7456 |
+
{
|
| 7457 |
+
"id": "bfsi-tmp-041",
|
| 7458 |
+
"category": "Temporal Logic",
|
| 7459 |
+
"category_code": "BFSI-TMP",
|
| 7460 |
+
"query": "As a small business owner, I deduct tax at source on payments I make to contractors and professionals. Which section should I be citing on my TDS challans and returns for this?",
|
| 7461 |
+
"gold_answer": "For payments made on or after 1 April 2026, cite Section 393 of the Income Tax Act, 2025, which consolidates the erstwhile TDS provisions (Sections 192 to 196D of the 1961 Act, including Section 194C for contractors and Section 194J for professionals) into a single structured section with sub-clauses covering rates and thresholds for each payment type. TDS rates themselves are unchanged - only the section reference and challan/return codes change.",
|
| 7462 |
+
"sources": [
|
| 7463 |
+
{
|
| 7464 |
+
"url": "https://www.incometaxindia.gov.in/w/section-393-5",
|
| 7465 |
+
"note": null
|
| 7466 |
+
}
|
| 7467 |
+
],
|
| 7468 |
+
"evidence": [
|
| 7469 |
+
{
|
| 7470 |
+
"url": "https://www.incometaxindia.gov.in/w/section-393-5",
|
| 7471 |
+
"title": "incometaxindia.gov.in/section-393-5",
|
| 7472 |
+
"quote": "Challan-cum-statement of deduction of tax under\n[section 393(1)](https://www.incometaxindia.gov.in/w/section-393-5#)\nof the Income-tax Act 2025 Payments to contractors referred to in section 393(1)[Table: Sl. No. 6(i)] Fees for professional or technical services referred to in section 393(1)[Table: Sl. No. 6(iii)]",
|
| 7473 |
+
"context": "[Advanced Search](https://www.incometaxindia.gov.in/advanced-search)\n2\n\nDue Dates\n\n06 May 2026\nDue date for deposit of Tax deducted/collected for the month of April, 2026. However, all sum deducted/collected by an office of the government shall be paid to the credit of the Central Government on the same day where tax is paid without production of a challan.\n29 May 2026\nChallan-cum-statement of deduction of tax under\n[section 393(1)](https://www.incometaxindia.gov.in/w/section-393-5#)\nof the Income-tax Act 2025\n[\nTable Sl. No. 2(i), 3(i), 6(ii) & 8(vi) in the month of April, 2026\nGo to Tax Calendar\nMenu\n\\\n\nDue Dates\n\n- [Home](https://www.incometaxindia.gov.in/en/home?doAsUserId=P8dqHo7GMNv%2FXYXPfeJIUA%3D%3D%3FcategoryId%3D10191473%3FcategoryId%3D%3FcategoryId%3D40193%3FcategoryId%3D%3FcategoryId%3D40193%3FcategoryId%3D10191473%3FcategoryId%3D40193%3FcategoryId%3D%3FcategoryId%3D39787%3FcategoryId%3D%3FcategoryId%3D39787%3FcategoryId%3D40193%3FcategoryId%3D39787%3FcategoryId%3D40193%3FcategoryId%3D%3FcategoryId%3D39787%3FcategoryId%3D39787%3FcategoryId%3D%3FcategoryId%3D10191473%3FcategoryId%3D39787%3FcategoryId%3D40193%3FcategoryId%3D%3FcategoryId%3D%3FcategoryId%3D%3FcategoryId%3D39787) \\\n- About Us \\\n- Tax Laws & Rules \\\n\nDue Dates\n\n- [Take Online Oath](https://www.incometaxindia.gov.in/en/take-online-oath?doAsUserId=P8dqHo7GMNv%2FXYXPfeJIUA%3D%3D%3FcategoryId%3D10191473%3FcategoryId%3D%3FcategoryId%3D40193%3FcategoryId%3D%3FcategoryId%3D40193%3FcategoryId%3D10191473%3FcategoryId%3D40193%3FcategoryId%3D%3FcategoryId%3D39787%3FcategoryId%3D%3FcategoryId%3D39787%3FcategoryId%3D40193%3FcategoryId%3D39787%3FcategoryId%3D40193%3FcategoryId%3D%3FcategoryId%3D39787%3FcategoryId%3D39787%3FcategoryId%3D%3FcategoryId%3D10191473%3FcategoryId%3D39787%3FcategoryId%3D40193%3FcategoryId%3D%3FcategoryId%3D%3FcategoryId%3D%3FcategoryId%3D39787) 2 \\\n\nDue Dates\\\n\n06 May 2026\nDue date for deposit of Tax deducted/collected for the month of April, 2026. However, all sum deducted/collected by an office of the government shall be paid to the credit of the Central Government on the same day where tax is paid without production of a challan.\n29 May 2026\nChallan-cum-statement of deduction of tax under\n[section 393(1)](https://www.incometaxindia.gov.in/w/section-393-5#)\nof the Income-tax Act 2025\n[\nTable Sl. No. 2(i), 3(i), 6(ii) & 8(vi) in the month of April, 2026\nGo to Tax Calendar\nClose\n[Advanced Search](https://www.incometaxindia.gov.in/advanced-search)",
|
| 7474 |
+
"kind": "source"
|
| 7475 |
+
}
|
| 7476 |
+
],
|
| 7477 |
"gold_nuggets": [
|
| 7478 |
{
|
| 7479 |
"id": "n1",
|
| 7480 |
+
"text": "For payments made on or after 1 April 2026, cite Section 393 of the Income Tax Act, 2025 on TDS challans and returns.",
|
| 7481 |
"vital": true,
|
| 7482 |
+
"evidence_quote": "Challan-cum-statement of deduction of tax under [section 393(1)] of the Income-tax Act 2025"
|
| 7483 |
},
|
| 7484 |
{
|
| 7485 |
"id": "n2",
|
| 7486 |
+
"text": "Section 393 covers both payments to contractors and fees for professional or technical services.",
|
| 7487 |
+
"vital": true,
|
| 7488 |
+
"evidence_quote": "Payments to contractors referred to in section 393(1)[Table: Sl. No. 6(i)]. Fees for professional or technical services referred to in section 393(1)[Table: Sl. No. 6(iii)]."
|
| 7489 |
+
},
|
| 7490 |
+
{
|
| 7491 |
+
"id": "n3",
|
| 7492 |
+
"text": "The TDS rates remain unchanged; only the section reference and challan/return codes change.",
|
| 7493 |
"vital": false,
|
| 7494 |
"evidence_quote": null
|
| 7495 |
}
|
index.html
CHANGED
|
@@ -1,270 +1,268 @@
|
|
| 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>BFSI-Bench — GroundTruth</title>
|
| 7 |
-
<meta
|
| 8 |
-
name="description"
|
| 9 |
-
content="BFSI-Bench tests how well language models answer questions about India’s banking, financial services, and insurance rules."
|
| 10 |
-
/>
|
| 11 |
-
<link rel="icon" href="./assets/gt-
|
| 12 |
-
<link rel="
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
|
| 24 |
-
</
|
| 25 |
-
<
|
| 26 |
-
|
| 27 |
-
|
| 28 |
-
<
|
| 29 |
-
|
| 30 |
-
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
<
|
| 34 |
-
|
| 35 |
-
|
| 36 |
-
<
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
|
| 40 |
-
|
| 41 |
-
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 42 |
<header class="hero">
|
| 43 |
-
<
|
| 44 |
-
|
| 45 |
-
|
| 46 |
-
|
| 47 |
-
|
| 48 |
-
|
| 49 |
-
|
| 50 |
-
|
| 51 |
-
|
| 52 |
-
|
| 53 |
-
|
| 54 |
-
<
|
| 55 |
-
|
| 56 |
-
|
| 57 |
-
|
| 58 |
-
|
| 59 |
-
|
| 60 |
-
|
| 61 |
-
|
| 62 |
-
|
| 63 |
-
|
| 64 |
-
|
| 65 |
-
|
| 66 |
-
|
| 67 |
-
|
| 68 |
-
|
| 69 |
-
</
|
| 70 |
-
<div class="overview-note-art" aria-hidden="true"></div>
|
| 71 |
</header>
|
| 72 |
|
| 73 |
-
<
|
| 74 |
-
<span>Primary-source grounded</span>
|
| 75 |
-
<span>Fact-level scoring</span>
|
| 76 |
-
<span>India-specific by design</span>
|
| 77 |
-
</div>
|
| 78 |
-
|
| 79 |
-
<section class="prose">
|
| 80 |
<h2>What’s in the set</h2>
|
| 81 |
<p>
|
| 82 |
-
There are
|
| 83 |
answers, then checked them against official Indian sources. You can open every
|
| 84 |
sample on this page.
|
| 85 |
</p>
|
| 86 |
-
<p>
|
| 87 |
-
The download does not include full source documents. Each sample has source links,
|
| 88 |
-
short quotes, and a list of facts used when we score a model.
|
| 89 |
-
</p>
|
| 90 |
-
</section>
|
| 91 |
-
|
| 92 |
-
<section>
|
| 93 |
<h2>The five question types</h2>
|
| 94 |
-
<p class="section-lead">
|
| 95 |
-
Every question has one label. The number is how many items sit in that group.
|
| 96 |
-
</p>
|
| 97 |
-
<div class="cat-grid">
|
| 98 |
-
<
|
| 99 |
-
<
|
| 100 |
-
<
|
| 101 |
-
<
|
| 102 |
Use Indian rules, or ask which country the user means, instead of defaulting to
|
| 103 |
U.S. or EU law.
|
| 104 |
-
</
|
| 105 |
-
|
| 106 |
-
<
|
| 107 |
-
|
| 108 |
-
<
|
| 109 |
-
<
|
| 110 |
-
|
| 111 |
-
|
| 112 |
-
|
| 113 |
-
|
| 114 |
-
<
|
| 115 |
-
|
| 116 |
-
|
| 117 |
-
<
|
| 118 |
-
|
| 119 |
-
|
| 120 |
-
<span class="cat-code">Red-team · 29 questions</span>
|
| 121 |
-
<span class="cat-title">Red-Team Evasion</span>
|
| 122 |
-
<span class="cat-desc">
|
| 123 |
Refuse illegal financial workarounds and point people to legitimate channels.
|
| 124 |
-
</
|
| 125 |
-
|
| 126 |
-
<
|
| 127 |
-
|
| 128 |
-
<
|
| 129 |
-
<
|
| 130 |
-
|
| 131 |
-
|
| 132 |
-
|
| 133 |
-
|
| 134 |
-
<
|
| 135 |
-
|
| 136 |
-
<section>
|
| 137 |
<h2>Fields in a sample</h2>
|
| 138 |
<p class="section-lead">
|
| 139 |
On Hugging Face these are column names. Here is what they mean.
|
| 140 |
-
</p>
|
| 141 |
-
<div class="table-wrap">
|
| 142 |
-
<table class="data-table">
|
| 143 |
-
<thead>
|
| 144 |
-
<tr>
|
| 145 |
-
<th>You see</th>
|
| 146 |
-
<th>What it is</th>
|
| 147 |
-
</tr>
|
| 148 |
-
</thead>
|
| 149 |
-
<tbody>
|
| 150 |
-
<tr>
|
| 151 |
-
<td>Id</td>
|
| 152 |
-
<td>A stable name for the item, such as <code>bfsi-jur-001</code></td>
|
| 153 |
-
</tr>
|
| 154 |
-
<tr>
|
| 155 |
-
<td>Question</td>
|
| 156 |
-
<td>The prompt we send the model</td>
|
| 157 |
-
</tr>
|
| 158 |
-
<tr>
|
| 159 |
-
<td>Expert answer</td>
|
| 160 |
-
<td>The reference answer written by a domain expert</td>
|
| 161 |
-
</tr>
|
| 162 |
-
<tr>
|
| 163 |
-
<td>Facts</td>
|
| 164 |
-
<td>Short claims we check in a model’s reply. Some are marked required.</td>
|
| 165 |
-
</tr>
|
| 166 |
-
<tr>
|
| 167 |
-
<td>Sources</td>
|
| 168 |
-
<td>Official page links, a short note, and a publication date when we have one</td>
|
| 169 |
-
</tr>
|
| 170 |
-
<tr>
|
| 171 |
-
<td>Evidence</td>
|
| 172 |
-
<td>Quoted spans from those pages, plus a bit of surrounding text</td>
|
| 173 |
-
</tr>
|
| 174 |
-
</tbody>
|
| 175 |
-
</table>
|
| 176 |
-
</div>
|
| 177 |
-
</section>
|
| 178 |
-
|
| 179 |
-
<section class="prose">
|
| 180 |
<h2>Citation</h2>
|
| 181 |
-
<pre><code>@dataset{groundtruth2026bfsibench,
|
| 182 |
-
title={BFSI-Bench: Fact-Seeking Eval for Indian BFSI},
|
| 183 |
-
author={GroundTruth},
|
| 184 |
-
year={2026},
|
| 185 |
-
url={https://huggingface.co/datasets/ground-truth/bfsi-bench},
|
| 186 |
-
license={CC-BY-4.0}
|
| 187 |
-
}</code></pre>
|
| 188 |
-
<p>
|
| 189 |
-
Questions about this work:
|
| 190 |
-
<a href="mailto:miroojin@ground-truth.in">miroojin@ground-truth.in</a>
|
| 191 |
-
</p>
|
| 192 |
-
</section>
|
| 193 |
-
</article>
|
| 194 |
-
|
| 195 |
-
<footer class="foot">
|
| 196 |
-
<a class="foot-brand" href="https://ground-truth.in/" target="_blank" rel="noopener noreferrer">
|
| 197 |
-
<img src="./assets/gt-
|
| 198 |
-
|
| 199 |
-
<
|
| 200 |
-
|
| 201 |
-
|
| 202 |
-
|
| 203 |
-
|
| 204 |
-
|
| 205 |
-
|
| 206 |
-
|
| 207 |
-
|
| 208 |
-
|
| 209 |
-
|
| 210 |
-
|
| 211 |
-
|
| 212 |
-
|
| 213 |
-
|
| 214 |
-
<
|
| 215 |
-
<
|
| 216 |
-
|
| 217 |
-
<
|
| 218 |
-
|
| 219 |
-
|
| 220 |
-
|
| 221 |
-
|
| 222 |
-
<
|
| 223 |
-
|
| 224 |
-
<
|
| 225 |
-
|
| 226 |
-
|
| 227 |
-
<
|
| 228 |
-
|
| 229 |
-
|
| 230 |
-
|
| 231 |
-
|
| 232 |
-
<p class="empty
|
| 233 |
-
|
| 234 |
-
|
| 235 |
-
|
| 236 |
-
|
| 237 |
-
|
| 238 |
-
<
|
| 239 |
-
<span class="
|
| 240 |
-
|
| 241 |
-
<div
|
| 242 |
-
|
| 243 |
-
<button type="button" id="btn-
|
| 244 |
-
<button type="button" id="btn-
|
| 245 |
-
|
| 246 |
-
|
| 247 |
-
|
| 248 |
-
|
| 249 |
-
|
|
|
|
| 250 |
<h2>Question</h2>
|
| 251 |
<p class="body" id="item-query"></p>
|
| 252 |
</section>
|
| 253 |
-
<section class="
|
| 254 |
<h2>Expert answer</h2>
|
| 255 |
<p class="body gold" id="item-gold"></p>
|
| 256 |
</section>
|
| 257 |
-
<section class="
|
| 258 |
<h2>Sources</h2>
|
| 259 |
<p class="card-hint">Official pages this answer is based on.</p>
|
| 260 |
<ul class="sources" id="item-sources"></ul>
|
| 261 |
</section>
|
| 262 |
-
<section class="
|
| 263 |
<h2>Facts we score</h2>
|
| 264 |
<p class="card-hint">Required facts must be in a correct answer.</p>
|
| 265 |
<div class="nuggets" id="item-nuggets"></div>
|
| 266 |
</section>
|
| 267 |
-
<section class="
|
| 268 |
<h2>Evidence</h2>
|
| 269 |
<p class="card-hint">Quotes pulled from the source pages.</p>
|
| 270 |
<div class="evidence" id="item-evidence"></div>
|
|
@@ -272,38 +270,18 @@
|
|
| 272 |
</div>
|
| 273 |
</section>
|
| 274 |
</main>
|
| 275 |
-
|
| 276 |
-
<aside class="sample-outline" aria-label="Sample sections">
|
| 277 |
-
<p class="outline-label">On this sample</p>
|
| 278 |
-
<nav class="outline-nav" id="sample-outline">
|
| 279 |
-
<button type="button" class="active" data-section="sample-question" aria-current="true">Question</button>
|
| 280 |
-
<button type="button" data-section="sample-answer">Expert answer</button>
|
| 281 |
-
<button type="button" data-section="sample-sources">Sources</button>
|
| 282 |
-
<button type="button" data-section="sample-facts">Facts we score</button>
|
| 283 |
-
<button type="button" data-section="sample-evidence">Evidence</button>
|
| 284 |
-
</nav>
|
| 285 |
-
</aside>
|
| 286 |
</div>
|
| 287 |
</section>
|
| 288 |
-
|
| 289 |
-
<section class="mode-panel" id="mode-leaderboard" role="tabpanel" hidden>
|
| 290 |
-
<article class="overview">
|
| 291 |
-
<header class="hero hero-plain
|
| 292 |
-
<
|
| 293 |
-
|
| 294 |
-
|
| 295 |
-
|
| 296 |
-
|
| 297 |
-
|
| 298 |
-
</p>
|
| 299 |
-
</div>
|
| 300 |
-
<div class="leaderboard-artwork">
|
| 301 |
-
<div class="status-note" aria-label="Leaderboard status">
|
| 302 |
-
<span class="status-dot" aria-hidden="true"></span>
|
| 303 |
-
<strong>Evaluation in progress</strong>
|
| 304 |
-
<small>Results publishing shortly</small>
|
| 305 |
-
</div>
|
| 306 |
-
</div>
|
| 307 |
</header>
|
| 308 |
<section class="prose">
|
| 309 |
<h2>How we score</h2>
|
|
@@ -315,7 +293,9 @@
|
|
| 315 |
</section>
|
| 316 |
<div class="table-wrap">
|
| 317 |
<table class="data-table">
|
| 318 |
-
<caption>
|
|
|
|
|
|
|
| 319 |
<thead>
|
| 320 |
<tr>
|
| 321 |
<th>Model</th>
|
|
@@ -330,48 +310,73 @@
|
|
| 330 |
<tbody>
|
| 331 |
<tr>
|
| 332 |
<td><code>openai/gpt-5.6-sol</code></td>
|
| 333 |
-
<td class="num">
|
| 334 |
-
<td class="num">
|
|
|
|
|
|
|
|
|
|
|
|
|
| 335 |
</tr>
|
| 336 |
<tr>
|
| 337 |
<td><code>meta/muse-spark-1.2</code></td>
|
| 338 |
-
<td class="num">
|
| 339 |
-
<td class="num">
|
|
|
|
|
|
|
|
|
|
|
|
|
| 340 |
</tr>
|
| 341 |
<tr>
|
| 342 |
<td><code>openai/gpt-5</code></td>
|
| 343 |
-
<td class="num">—</td>
|
| 344 |
-
<td class="num">—</td>
|
|
|
|
|
|
|
|
|
|
|
|
|
| 345 |
</tr>
|
| 346 |
<tr>
|
| 347 |
<td><code>google/gemini-3.7-flash</code></td>
|
| 348 |
-
<td class="num">
|
| 349 |
-
<td class="num">
|
|
|
|
|
|
|
|
|
|
|
|
|
| 350 |
</tr>
|
| 351 |
<tr>
|
| 352 |
<td><code>meta/muse-glimmer-30b</code></td>
|
| 353 |
-
<td class="num">—</td>
|
| 354 |
-
<td class="num">—</td>
|
|
|
|
|
|
|
|
|
|
|
|
|
| 355 |
</tr>
|
| 356 |
<tr>
|
| 357 |
<td><code>google/gemma-4-31b-it</code></td>
|
| 358 |
-
<td class="num">—</td>
|
| 359 |
-
<td class="num">—</td>
|
|
|
|
|
|
|
|
|
|
|
|
|
| 360 |
</tr>
|
| 361 |
</tbody>
|
| 362 |
</table>
|
| 363 |
</div>
|
| 364 |
-
</article>
|
| 365 |
-
<footer class="foot">
|
| 366 |
-
<a class="foot-brand" href="https://ground-truth.in/" target="_blank" rel="noopener noreferrer">
|
| 367 |
-
<img src="./assets/gt-
|
| 368 |
-
|
| 369 |
-
<
|
| 370 |
-
|
| 371 |
-
|
| 372 |
-
|
| 373 |
-
|
| 374 |
-
|
| 375 |
-
<
|
| 376 |
-
|
| 377 |
-
</
|
|
|
|
|
|
| 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>BFSI-Bench — GroundTruth</title>
|
| 7 |
+
<meta
|
| 8 |
+
name="description"
|
| 9 |
+
content="BFSI-Bench tests how well language models answer questions about India’s banking, financial services, and insurance rules."
|
| 10 |
+
/>
|
| 11 |
+
<link rel="icon" href="./assets/gt-mark.svg" type="image/svg+xml" />
|
| 12 |
+
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
| 13 |
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
| 14 |
+
<link
|
| 15 |
+
href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Poppins:wght@500;600;700&family=IBM+Plex+Mono:wght@400;500&display=swap"
|
| 16 |
+
rel="stylesheet"
|
| 17 |
+
/>
|
| 18 |
+
<link rel="stylesheet" href="./styles.css" />
|
| 19 |
+
</head>
|
| 20 |
+
<body>
|
| 21 |
+
<div class="app" id="app">
|
| 22 |
+
<header class="top">
|
| 23 |
+
<a class="brand-lockup" href="https://ground-truth.in/" target="_blank" rel="noopener noreferrer">
|
| 24 |
+
<img class="brand-mark" src="./assets/gt-mark.svg" width="40" height="40" alt="GroundTruth" />
|
| 25 |
+
<span class="brand-text">
|
| 26 |
+
<span class="brand-name">GroundTruth</span>
|
| 27 |
+
<span class="brand-product">BFSI-Bench</span>
|
| 28 |
+
</span>
|
| 29 |
+
</a>
|
| 30 |
+
<nav class="mode-nav" role="tablist" aria-label="Site sections">
|
| 31 |
+
<button class="mode active" type="button" role="tab" aria-selected="true" data-mode="overview">
|
| 32 |
+
Overview
|
| 33 |
+
</button>
|
| 34 |
+
<button class="mode" type="button" role="tab" aria-selected="false" data-mode="samples">
|
| 35 |
+
Samples
|
| 36 |
+
</button>
|
| 37 |
+
<button class="mode" type="button" role="tab" aria-selected="false" data-mode="leaderboard">
|
| 38 |
+
Leaderboard
|
| 39 |
+
</button>
|
| 40 |
+
</nav>
|
| 41 |
+
<div class="top-links">
|
| 42 |
+
<a href="https://huggingface.co/datasets/ground-truth/bfsi-bench" target="_blank" rel="noopener noreferrer"
|
| 43 |
+
>Dataset</a
|
| 44 |
+
>
|
| 45 |
+
<a href="https://ground-truth.in/" target="_blank" rel="noopener noreferrer">ground-truth.in</a>
|
| 46 |
+
</div>
|
| 47 |
+
</header>
|
| 48 |
+
|
| 49 |
+
<section class="mode-panel active" id="mode-overview" role="tabpanel">
|
| 50 |
+
<article class="overview">
|
| 51 |
<header class="hero">
|
| 52 |
+
<p class="kicker">190 English questions · CC BY 4.0</p>
|
| 53 |
+
<h1>BFSI-Bench</h1>
|
| 54 |
+
<p class="deck">
|
| 55 |
+
BFSI-Bench tests how well language models answer questions about India’s banking,
|
| 56 |
+
financial services, and insurance (BFSI) rules.
|
| 57 |
+
</p>
|
| 58 |
+
<p class="deck">
|
| 59 |
+
The right answer often depends on circulars and regulations that change. Official
|
| 60 |
+
sources — sites like RBI, SEBI, and IRDAI — can be hard to find and keep current.
|
| 61 |
+
</p>
|
| 62 |
+
<p class="hero-actions">
|
| 63 |
+
<button type="button" class="btn-primary" data-goto="samples">Browse samples</button>
|
| 64 |
+
<a
|
| 65 |
+
class="btn-ghost"
|
| 66 |
+
href="https://ground-truth.in/blog/introducing-bfsi-bench"
|
| 67 |
+
target="_blank"
|
| 68 |
+
rel="noopener noreferrer"
|
| 69 |
+
>Read the blog</a
|
| 70 |
+
>
|
| 71 |
+
<a
|
| 72 |
+
class="btn-ghost"
|
| 73 |
+
href="https://huggingface.co/datasets/ground-truth/bfsi-bench"
|
| 74 |
+
target="_blank"
|
| 75 |
+
rel="noopener noreferrer"
|
| 76 |
+
>Open the Hugging Face dataset</a
|
| 77 |
+
>
|
| 78 |
+
</p>
|
|
|
|
| 79 |
</header>
|
| 80 |
|
| 81 |
+
<section class="prose">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 82 |
<h2>What’s in the set</h2>
|
| 83 |
<p>
|
| 84 |
+
There are 190 questions in English. Domain experts wrote the questions and the
|
| 85 |
answers, then checked them against official Indian sources. You can open every
|
| 86 |
sample on this page.
|
| 87 |
</p>
|
| 88 |
+
<p>
|
| 89 |
+
The download does not include full source documents. Each sample has source links,
|
| 90 |
+
short quotes, and a list of facts used when we score a model.
|
| 91 |
+
</p>
|
| 92 |
+
</section>
|
| 93 |
+
|
| 94 |
+
<section>
|
| 95 |
<h2>The five question types</h2>
|
| 96 |
+
<p class="section-lead">
|
| 97 |
+
Every question has one label. The number is how many items sit in that group.
|
| 98 |
+
</p>
|
| 99 |
+
<div class="cat-grid">
|
| 100 |
+
<article class="cat-card cat-jur">
|
| 101 |
+
<p class="cat-code">Jurisdiction · 71 questions</p>
|
| 102 |
+
<h3>Jurisdiction-Aware Compliance</h3>
|
| 103 |
+
<p>
|
| 104 |
Use Indian rules, or ask which country the user means, instead of defaulting to
|
| 105 |
U.S. or EU law.
|
| 106 |
+
</p>
|
| 107 |
+
</article>
|
| 108 |
+
<article class="cat-card cat-num">
|
| 109 |
+
<p class="cat-code">Numerical · 36 questions</p>
|
| 110 |
+
<h3>Numerical Reasoning</h3>
|
| 111 |
+
<p>Get the finance math right, including EMI, interest, and TDS.</p>
|
| 112 |
+
</article>
|
| 113 |
+
<article class="cat-card cat-tmp">
|
| 114 |
+
<p class="cat-code">Temporal · 17 questions</p>
|
| 115 |
+
<h3>Temporal Logic</h3>
|
| 116 |
+
<p>Prefer the rule that applies now when the question does not name a year.</p>
|
| 117 |
+
</article>
|
| 118 |
+
<article class="cat-card cat-adv">
|
| 119 |
+
<p class="cat-code">Red-team · 29 questions</p>
|
| 120 |
+
<h3>Red-Team Evasion</h3>
|
| 121 |
+
<p>
|
|
|
|
|
|
|
|
|
|
| 122 |
Refuse illegal financial workarounds and point people to legitimate channels.
|
| 123 |
+
</p>
|
| 124 |
+
</article>
|
| 125 |
+
<article class="cat-card cat-grd">
|
| 126 |
+
<p class="cat-code">Groundedness · 36 questions</p>
|
| 127 |
+
<h3>Groundedness</h3>
|
| 128 |
+
<p>Stick to the circular, scheme, or policy named in the question.</p>
|
| 129 |
+
</article>
|
| 130 |
+
</div>
|
| 131 |
+
</section>
|
| 132 |
+
|
| 133 |
+
<section>
|
|
|
|
|
|
|
| 134 |
<h2>Fields in a sample</h2>
|
| 135 |
<p class="section-lead">
|
| 136 |
On Hugging Face these are column names. Here is what they mean.
|
| 137 |
+
</p>
|
| 138 |
+
<div class="table-wrap">
|
| 139 |
+
<table class="data-table">
|
| 140 |
+
<thead>
|
| 141 |
+
<tr>
|
| 142 |
+
<th>You see</th>
|
| 143 |
+
<th>What it is</th>
|
| 144 |
+
</tr>
|
| 145 |
+
</thead>
|
| 146 |
+
<tbody>
|
| 147 |
+
<tr>
|
| 148 |
+
<td>Id</td>
|
| 149 |
+
<td>A stable name for the item, such as <code>bfsi-jur-001</code></td>
|
| 150 |
+
</tr>
|
| 151 |
+
<tr>
|
| 152 |
+
<td>Question</td>
|
| 153 |
+
<td>The prompt we send the model</td>
|
| 154 |
+
</tr>
|
| 155 |
+
<tr>
|
| 156 |
+
<td>Expert answer</td>
|
| 157 |
+
<td>The reference answer written by a domain expert</td>
|
| 158 |
+
</tr>
|
| 159 |
+
<tr>
|
| 160 |
+
<td>Facts</td>
|
| 161 |
+
<td>Short claims we check in a model’s reply. Some are marked required.</td>
|
| 162 |
+
</tr>
|
| 163 |
+
<tr>
|
| 164 |
+
<td>Sources</td>
|
| 165 |
+
<td>Official page links, a short note, and a publication date when we have one</td>
|
| 166 |
+
</tr>
|
| 167 |
+
<tr>
|
| 168 |
+
<td>Evidence</td>
|
| 169 |
+
<td>Quoted spans from those pages, plus a bit of surrounding text</td>
|
| 170 |
+
</tr>
|
| 171 |
+
</tbody>
|
| 172 |
+
</table>
|
| 173 |
+
</div>
|
| 174 |
+
</section>
|
| 175 |
+
|
| 176 |
+
<section class="prose">
|
| 177 |
<h2>Citation</h2>
|
| 178 |
+
<pre><code>@dataset{groundtruth2026bfsibench,
|
| 179 |
+
title={BFSI-Bench: Fact-Seeking Eval for Indian BFSI},
|
| 180 |
+
author={GroundTruth},
|
| 181 |
+
year={2026},
|
| 182 |
+
url={https://huggingface.co/datasets/ground-truth/bfsi-bench},
|
| 183 |
+
license={CC-BY-4.0}
|
| 184 |
+
}</code></pre>
|
| 185 |
+
<p>
|
| 186 |
+
Questions about this work:
|
| 187 |
+
<a href="mailto:miroojin@ground-truth.in">miroojin@ground-truth.in</a>
|
| 188 |
+
</p>
|
| 189 |
+
</section>
|
| 190 |
+
</article>
|
| 191 |
+
|
| 192 |
+
<footer class="foot">
|
| 193 |
+
<a class="foot-brand" href="https://ground-truth.in/" target="_blank" rel="noopener noreferrer">
|
| 194 |
+
<img src="./assets/gt-mark.svg" width="28" height="28" alt="" />
|
| 195 |
+
<span>GroundTruth</span>
|
| 196 |
+
</a>
|
| 197 |
+
<p>
|
| 198 |
+
<a href="https://ground-truth.in/" target="_blank" rel="noopener noreferrer">ground-truth.in</a>
|
| 199 |
+
·
|
| 200 |
+
<a href="https://huggingface.co/datasets/ground-truth/bfsi-bench" target="_blank" rel="noopener noreferrer"
|
| 201 |
+
>Hugging Face dataset</a
|
| 202 |
+
>
|
| 203 |
+
</p>
|
| 204 |
+
</footer>
|
| 205 |
+
</section>
|
| 206 |
+
|
| 207 |
+
<section class="mode-panel explorer-panel" id="mode-samples" role="tabpanel" hidden>
|
| 208 |
+
<div class="explorer" id="explorer">
|
| 209 |
+
<aside class="sidebar">
|
| 210 |
+
<header class="sidebar-head">
|
| 211 |
+
<h2>Samples</h2>
|
| 212 |
+
<p class="progress" id="progress">Loading…</p>
|
| 213 |
+
<button type="button" class="drawer-close" id="btn-close-drawer" hidden>Close list</button>
|
| 214 |
+
</header>
|
| 215 |
+
<div class="filters">
|
| 216 |
+
<label>
|
| 217 |
+
Search
|
| 218 |
+
<input type="search" id="filter-q" placeholder="Question, answer, or id…" autocomplete="off" />
|
| 219 |
+
</label>
|
| 220 |
+
<div class="filter-group">
|
| 221 |
+
<span class="filter-group-label">Question type</span>
|
| 222 |
+
<div class="filter-chips" id="cat-chips" role="group" aria-label="Question type"></div>
|
| 223 |
+
</div>
|
| 224 |
+
</div>
|
| 225 |
+
<ul class="queue" id="queue" aria-label="Sample list"></ul>
|
| 226 |
+
</aside>
|
| 227 |
+
|
| 228 |
+
<main class="detail-pane" id="main">
|
| 229 |
+
<p class="empty" id="empty-state">Pick a question from the list.</p>
|
| 230 |
+
<p class="empty error" id="load-error" hidden></p>
|
| 231 |
+
|
| 232 |
+
<section class="detail" id="detail" hidden>
|
| 233 |
+
<header class="detail-head">
|
| 234 |
+
<div class="meta">
|
| 235 |
+
<button type="button" class="drawer-open" id="btn-open-drawer">List</button>
|
| 236 |
+
<span class="id" id="item-id"></span>
|
| 237 |
+
<span class="pill" id="item-cat"></span>
|
| 238 |
+
</div>
|
| 239 |
+
<div class="nav-btns">
|
| 240 |
+
<button type="button" id="btn-prev" title="Previous (k)">← Prev</button>
|
| 241 |
+
<button type="button" id="btn-next" title="Next (j)">Next →</button>
|
| 242 |
+
<button type="button" id="btn-copy" title="Copy link">Copy link</button>
|
| 243 |
+
</div>
|
| 244 |
+
</header>
|
| 245 |
+
|
| 246 |
+
<div class="grid">
|
| 247 |
+
<section class="card span-2">
|
| 248 |
<h2>Question</h2>
|
| 249 |
<p class="body" id="item-query"></p>
|
| 250 |
</section>
|
| 251 |
+
<section class="card span-2">
|
| 252 |
<h2>Expert answer</h2>
|
| 253 |
<p class="body gold" id="item-gold"></p>
|
| 254 |
</section>
|
| 255 |
+
<section class="card">
|
| 256 |
<h2>Sources</h2>
|
| 257 |
<p class="card-hint">Official pages this answer is based on.</p>
|
| 258 |
<ul class="sources" id="item-sources"></ul>
|
| 259 |
</section>
|
| 260 |
+
<section class="card">
|
| 261 |
<h2>Facts we score</h2>
|
| 262 |
<p class="card-hint">Required facts must be in a correct answer.</p>
|
| 263 |
<div class="nuggets" id="item-nuggets"></div>
|
| 264 |
</section>
|
| 265 |
+
<section class="card span-2">
|
| 266 |
<h2>Evidence</h2>
|
| 267 |
<p class="card-hint">Quotes pulled from the source pages.</p>
|
| 268 |
<div class="evidence" id="item-evidence"></div>
|
|
|
|
| 270 |
</div>
|
| 271 |
</section>
|
| 272 |
</main>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 273 |
</div>
|
| 274 |
</section>
|
| 275 |
+
|
| 276 |
+
<section class="mode-panel" id="mode-leaderboard" role="tabpanel" hidden>
|
| 277 |
+
<article class="overview">
|
| 278 |
+
<header class="hero hero-plain">
|
| 279 |
+
<p class="kicker">Model scores</p>
|
| 280 |
+
<h1>Leaderboard</h1>
|
| 281 |
+
<p class="deck">
|
| 282 |
+
Parametric scores (no tools, no India system prompt) graded against gold nuggets
|
| 283 |
+
on the 190-item test split. Empty cells are not published yet.
|
| 284 |
+
</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 285 |
</header>
|
| 286 |
<section class="prose">
|
| 287 |
<h2>How we score</h2>
|
|
|
|
| 293 |
</section>
|
| 294 |
<div class="table-wrap">
|
| 295 |
<table class="data-table">
|
| 296 |
+
<caption>
|
| 297 |
+
Accuracy (%) · nugget grader · n=190
|
| 298 |
+
</caption>
|
| 299 |
<thead>
|
| 300 |
<tr>
|
| 301 |
<th>Model</th>
|
|
|
|
| 310 |
<tbody>
|
| 311 |
<tr>
|
| 312 |
<td><code>openai/gpt-5.6-sol</code></td>
|
| 313 |
+
<td class="num">86.32</td>
|
| 314 |
+
<td class="num">77.46</td>
|
| 315 |
+
<td class="num">100.0</td>
|
| 316 |
+
<td class="num">66.67</td>
|
| 317 |
+
<td class="num">93.1</td>
|
| 318 |
+
<td class="num">94.44</td>
|
| 319 |
</tr>
|
| 320 |
<tr>
|
| 321 |
<td><code>meta/muse-spark-1.2</code></td>
|
| 322 |
+
<td class="num">77.37</td>
|
| 323 |
+
<td class="num">56.34</td>
|
| 324 |
+
<td class="num">94.44</td>
|
| 325 |
+
<td class="num">61.11</td>
|
| 326 |
+
<td class="num">93.1</td>
|
| 327 |
+
<td class="num">97.22</td>
|
| 328 |
</tr>
|
| 329 |
<tr>
|
| 330 |
<td><code>openai/gpt-5</code></td>
|
| 331 |
+
<td class="num">—</td>
|
| 332 |
+
<td class="num">—</td>
|
| 333 |
+
<td class="num">—</td>
|
| 334 |
+
<td class="num">—</td>
|
| 335 |
+
<td class="num">—</td>
|
| 336 |
+
<td class="num">—</td>
|
| 337 |
</tr>
|
| 338 |
<tr>
|
| 339 |
<td><code>google/gemini-3.7-flash</code></td>
|
| 340 |
+
<td class="num">66.32</td>
|
| 341 |
+
<td class="num">43.66</td>
|
| 342 |
+
<td class="num">86.11</td>
|
| 343 |
+
<td class="num">50.0</td>
|
| 344 |
+
<td class="num">72.41</td>
|
| 345 |
+
<td class="num">94.44</td>
|
| 346 |
</tr>
|
| 347 |
<tr>
|
| 348 |
<td><code>meta/muse-glimmer-30b</code></td>
|
| 349 |
+
<td class="num">—</td>
|
| 350 |
+
<td class="num">—</td>
|
| 351 |
+
<td class="num">—</td>
|
| 352 |
+
<td class="num">—</td>
|
| 353 |
+
<td class="num">—</td>
|
| 354 |
+
<td class="num">—</td>
|
| 355 |
</tr>
|
| 356 |
<tr>
|
| 357 |
<td><code>google/gemma-4-31b-it</code></td>
|
| 358 |
+
<td class="num">—</td>
|
| 359 |
+
<td class="num">—</td>
|
| 360 |
+
<td class="num">—</td>
|
| 361 |
+
<td class="num">—</td>
|
| 362 |
+
<td class="num">—</td>
|
| 363 |
+
<td class="num">—</td>
|
| 364 |
</tr>
|
| 365 |
</tbody>
|
| 366 |
</table>
|
| 367 |
</div>
|
| 368 |
+
</article>
|
| 369 |
+
<footer class="foot">
|
| 370 |
+
<a class="foot-brand" href="https://ground-truth.in/" target="_blank" rel="noopener noreferrer">
|
| 371 |
+
<img src="./assets/gt-mark.svg" width="28" height="28" alt="" />
|
| 372 |
+
<span>GroundTruth</span>
|
| 373 |
+
</a>
|
| 374 |
+
<p>
|
| 375 |
+
<a href="https://ground-truth.in/" target="_blank" rel="noopener noreferrer">ground-truth.in</a>
|
| 376 |
+
</p>
|
| 377 |
+
</footer>
|
| 378 |
+
</section>
|
| 379 |
+
</div>
|
| 380 |
+
<script src="./app.js"></script>
|
| 381 |
+
</body>
|
| 382 |
+
</html>
|
styles.css
CHANGED
|
@@ -1,584 +1,443 @@
|
|
| 1 |
:root {
|
| 2 |
-
--bg: #
|
| 3 |
-
--bg-band: #
|
| 4 |
-
--ink: #
|
| 5 |
-
--muted: #
|
| 6 |
-
--line:
|
| 7 |
-
--line-dark: #767682;
|
| 8 |
--paper: #ffffff;
|
| 9 |
--accent: #48a47c;
|
| 10 |
-
--accent-deep: #
|
| 11 |
-
--artwork-green: #143b29;
|
| 12 |
--accent-blue: #363f8c;
|
| 13 |
-
--accent-mid: #
|
| 14 |
-
--accent-soft:
|
| 15 |
-
--jur: #193625;
|
| 16 |
-
--num: #3b5b88;
|
| 17 |
-
--tmp: #a85613;
|
| 18 |
-
--adv: #8a3d2a;
|
| 19 |
-
--grd: #363f8c;
|
| 20 |
-
--display: "
|
| 21 |
-
--sans: "
|
| 22 |
-
--mono: "
|
| 23 |
-
}
|
| 24 |
-
|
| 25 |
-
|
| 26 |
-
|
| 27 |
-
|
| 28 |
-
|
| 29 |
-
|
| 30 |
-
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
*,
|
| 34 |
-
*::before,
|
| 35 |
-
*::after {
|
| 36 |
-
box-sizing: border-box;
|
| 37 |
-
}
|
| 38 |
-
|
| 39 |
-
html,
|
| 40 |
body {
|
| 41 |
-
margin: 0;
|
| 42 |
-
height: 100%;
|
| 43 |
-
}
|
| 44 |
-
|
| 45 |
-
body {
|
| 46 |
-
color: var(--ink);
|
| 47 |
-
background: var(--bg);
|
| 48 |
-
font-family: var(--sans);
|
| 49 |
-
font-size:
|
| 50 |
line-height: 1.6;
|
| 51 |
-
|
| 52 |
-
|
| 53 |
-
|
| 54 |
-
|
| 55 |
-
|
| 56 |
-
|
| 57 |
-
|
| 58 |
-
|
| 59 |
-
|
| 60 |
-
|
| 61 |
-
|
| 62 |
-
|
| 63 |
-
|
| 64 |
-
|
| 65 |
-
|
| 66 |
-
|
| 67 |
-
|
| 68 |
-
|
| 69 |
-
|
| 70 |
-
|
| 71 |
-
|
| 72 |
-
|
| 73 |
-
|
| 74 |
-
|
| 75 |
-
|
| 76 |
-
|
| 77 |
-
flex-shrink: 0;
|
| 78 |
z-index: 20;
|
| 79 |
-
|
| 80 |
-
|
| 81 |
-
|
| 82 |
.brand-lockup {
|
| 83 |
display: inline-flex;
|
| 84 |
align-items: center;
|
| 85 |
-
gap: 0.
|
| 86 |
text-decoration: none;
|
| 87 |
color: inherit;
|
| 88 |
}
|
| 89 |
-
|
| 90 |
-
.brand-
|
| 91 |
display: block;
|
| 92 |
-
width:
|
| 93 |
-
height:
|
|
|
|
| 94 |
flex-shrink: 0;
|
| 95 |
}
|
| 96 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 97 |
.brand-product {
|
| 98 |
-
|
| 99 |
-
|
| 100 |
-
font-size: 0.78rem;
|
| 101 |
-
font-weight: 300;
|
| 102 |
color: var(--muted);
|
| 103 |
}
|
| 104 |
-
|
| 105 |
-
.mode-nav {
|
| 106 |
-
display: inline-flex;
|
| 107 |
-
gap: 0.15rem;
|
| 108 |
-
padding: 0.2rem;
|
| 109 |
-
background:
|
| 110 |
-
border-radius:
|
| 111 |
-
}
|
| 112 |
-
|
| 113 |
.mode {
|
| 114 |
-
border: 0;
|
| 115 |
-
background: transparent;
|
| 116 |
-
color: var(--muted);
|
| 117 |
-
font: inherit;
|
| 118 |
-
font-weight: 400;
|
| 119 |
-
font-size: 0.9rem;
|
| 120 |
-
padding: 0.45rem 0.9rem;
|
| 121 |
-
border-radius: 0;
|
| 122 |
-
border-bottom: 2px solid transparent;
|
| 123 |
-
cursor: pointer;
|
| 124 |
-
}
|
| 125 |
-
|
| 126 |
-
.mode.active {
|
| 127 |
background: transparent;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 128 |
color: var(--accent-deep);
|
| 129 |
-
|
| 130 |
-
|
| 131 |
-
|
| 132 |
-
.
|
| 133 |
-
.
|
| 134 |
-
.
|
| 135 |
-
.btn-
|
| 136 |
-
|
| 137 |
-
outline: 2px
|
| 138 |
-
|
| 139 |
-
|
| 140 |
-
|
| 141 |
-
|
| 142 |
-
|
| 143 |
-
|
| 144 |
-
|
| 145 |
-
|
| 146 |
-
|
| 147 |
.top-links a {
|
| 148 |
-
color: var(--accent-mid);
|
| 149 |
-
text-decoration: none;
|
| 150 |
-
font-weight:
|
| 151 |
-
}
|
| 152 |
-
|
| 153 |
-
.top-links a:hover {
|
| 154 |
-
color: var(--accent-deep);
|
| 155 |
-
text-decoration: underline;
|
| 156 |
-
}
|
| 157 |
-
|
| 158 |
-
.mode-panel[hidden] {
|
| 159 |
-
display: none !important;
|
| 160 |
-
}
|
| 161 |
-
|
| 162 |
-
.mode-panel:not(.explorer-panel) {
|
| 163 |
-
flex: 1;
|
| 164 |
-
}
|
| 165 |
-
|
| 166 |
-
#mode-overview,
|
| 167 |
-
#mode-leaderboard {
|
| 168 |
-
max-width: 1160px;
|
| 169 |
-
width: 100%;
|
| 170 |
-
margin: 0 auto;
|
| 171 |
-
padding: clamp(1.25rem, 3vw, 2.5rem) clamp(1rem, 3vw, 2rem) 3rem;
|
| 172 |
-
}
|
| 173 |
-
|
| 174 |
-
.hero {
|
| 175 |
-
display: grid;
|
| 176 |
-
grid-template-columns: 62% 38%;
|
| 177 |
-
gap: 0;
|
| 178 |
-
padding: 0;
|
| 179 |
-
min-height: 620px;
|
| 180 |
-
align-items: center;
|
| 181 |
-
border-radius: 0;
|
| 182 |
-
background: var(--artwork-green);
|
| 183 |
-
color: #f3f6f5;
|
| 184 |
-
margin-bottom: 0;
|
| 185 |
-
position: relative;
|
| 186 |
-
overflow: hidden;
|
| 187 |
}
|
| 188 |
|
| 189 |
-
.
|
| 190 |
-
|
| 191 |
-
|
| 192 |
-
|
| 193 |
-
|
| 194 |
-
|
| 195 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 196 |
}
|
| 197 |
|
| 198 |
-
.hero
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 199 |
|
| 200 |
-
.
|
| 201 |
-
|
| 202 |
-
min-height: 620px;
|
| 203 |
-
background: var(--artwork-green) url("assets/bfsi-note-collage-v1.webp") center center / cover no-repeat;
|
| 204 |
-
border-left: 1px solid rgba(255, 255, 255, 0.12);
|
| 205 |
}
|
| 206 |
|
| 207 |
-
.hero-artwork { min-height: 280px; }
|
| 208 |
-
.hero-artwork::before,
|
| 209 |
-
.hero-artwork::after { content: ""; position: absolute; border: 1px solid rgba(255, 255, 255, 0.32); border-radius: 32px; }
|
| 210 |
-
.hero-artwork::before { width: 72%; aspect-ratio: 1; right: 2%; top: 2%; }
|
| 211 |
-
.hero-artwork::after { width: 48%; aspect-ratio: 1; right: 34%; top: 30%; border-radius: 50%; background: rgba(150, 242, 197, 0.1); }
|
| 212 |
-
|
| 213 |
.kicker {
|
| 214 |
-
margin: 0 0 0.45rem;
|
| 215 |
-
font-size: 0.78rem;
|
| 216 |
-
letter-spacing: 0.06em;
|
| 217 |
-
text-transform: uppercase;
|
| 218 |
-
font-weight:
|
| 219 |
opacity: 0.82;
|
| 220 |
-
font-family: var(--mono);
|
| 221 |
}
|
| 222 |
|
| 223 |
-
.kicker span { color: #93d7b8; margin-right: 0.65rem; }
|
| 224 |
-
|
| 225 |
.hero h1 {
|
| 226 |
-
margin: 0;
|
| 227 |
-
font-family: var(--display);
|
| 228 |
-
|
| 229 |
-
|
| 230 |
-
|
| 231 |
-
letter-spacing: -0.035em;
|
| 232 |
-
line-height: 1.04;
|
| 233 |
-
}
|
| 234 |
-
|
| 235 |
-
.hero .deck {
|
| 236 |
-
max-width: none;
|
| 237 |
-
font-size: clamp(0.95rem, 1.25vw, 1.05rem);
|
| 238 |
-
line-height: 1.55;
|
| 239 |
-
margin: 2rem 0 0;
|
| 240 |
-
color: #e7eee9;
|
| 241 |
-
}
|
| 242 |
-
|
| 243 |
-
.hero-note {
|
| 244 |
-
max-width: 620px;
|
| 245 |
-
margin: 1rem 0 0;
|
| 246 |
-
color: #afbeb5;
|
| 247 |
-
font-size: 0.9rem;
|
| 248 |
-
line-height: 1.5;
|
| 249 |
}
|
| 250 |
|
| 251 |
-
.trust-strip { display: grid; grid-template-columns: repeat(3, 1fr); border: 1px solid var(--line); border-top: 0; margin-bottom: 4rem; background: var(--paper); }
|
| 252 |
-
.trust-strip span { padding: 1rem; text-align: center; color: var(--muted); font-family: var(--sans); font-size: .72rem; font-weight: 300; text-transform: uppercase; letter-spacing: .08em; border-right: 1px solid var(--line); }
|
| 253 |
-
.trust-strip span:last-child { border-right: 0; }
|
| 254 |
-
|
| 255 |
.hero .deck + .deck {
|
| 256 |
-
margin-top: 0.
|
| 257 |
-
}
|
| 258 |
-
|
| 259 |
-
.hero-actions {
|
| 260 |
-
display: flex;
|
| 261 |
-
flex-wrap: wrap;
|
| 262 |
-
gap: 0.6rem;
|
| 263 |
-
margin: 1.
|
| 264 |
-
}
|
| 265 |
-
|
| 266 |
.btn-primary,
|
| 267 |
.btn-ghost {
|
| 268 |
-
display: inline-flex;
|
| 269 |
-
align-items: center;
|
| 270 |
-
font: inherit;
|
| 271 |
-
font-weight:
|
| 272 |
-
font-size: 0.92rem;
|
| 273 |
-
padding: 0.45rem 0.95rem;
|
| 274 |
-
border-radius:
|
| 275 |
-
text-decoration: none;
|
| 276 |
-
cursor: pointer;
|
| 277 |
-
}
|
| 278 |
-
|
| 279 |
-
.btn-primary {
|
| 280 |
-
border:
|
| 281 |
background: var(--accent);
|
| 282 |
color: #fff;
|
| 283 |
-
|
| 284 |
-
|
| 285 |
-
|
| 286 |
-
|
| 287 |
-
|
| 288 |
-
|
| 289 |
-
|
| 290 |
-
|
| 291 |
-
|
| 292 |
-
|
| 293 |
-
|
| 294 |
-
|
| 295 |
-
background: rgba(255, 255, 255, 0.08);
|
| 296 |
-
}
|
| 297 |
-
|
| 298 |
.overview h2 {
|
| 299 |
font-family: var(--display);
|
| 300 |
-
font-size:
|
| 301 |
-
font-weight: 300;
|
| 302 |
-
color: var(--accent-deep);
|
| 303 |
-
line-height: 1.08;
|
| 304 |
-
letter-spacing: -0.025em;
|
| 305 |
margin: 0 0 0.75rem;
|
| 306 |
}
|
| 307 |
|
| 308 |
-
.
|
| 309 |
-
|
| 310 |
-
|
| 311 |
-
|
| 312 |
-
|
| 313 |
-
|
| 314 |
-
|
| 315 |
-
|
| 316 |
-
font-size: 0.
|
| 317 |
-
|
| 318 |
-
|
| 319 |
-
|
| 320 |
-
|
| 321 |
-
|
| 322 |
-
|
| 323 |
-
|
| 324 |
-
|
| 325 |
-
|
| 326 |
-
|
| 327 |
-
.prose
|
| 328 |
-
margin: 0 0
|
| 329 |
-
|
| 330 |
-
|
| 331 |
-
|
| 332 |
-
|
| 333 |
-
|
| 334 |
-
|
| 335 |
-
|
| 336 |
-
background: var(--paper);
|
| 337 |
-
color: var(--muted);
|
| 338 |
-
font-style: italic;
|
| 339 |
-
}
|
| 340 |
-
|
| 341 |
.prose pre,
|
| 342 |
.overview pre {
|
| 343 |
-
background:
|
| 344 |
-
color:
|
| 345 |
padding: 1rem 1.1rem;
|
| 346 |
-
border:
|
| 347 |
-
border-radius: 0;
|
| 348 |
overflow: auto;
|
| 349 |
-
font-family: var(--mono);
|
| 350 |
-
font-size: 0.78rem;
|
| 351 |
-
line-height: 1.5;
|
| 352 |
-
}
|
| 353 |
-
|
| 354 |
-
.prose code,
|
| 355 |
-
.data-table code {
|
| 356 |
-
font-family: var(--mono);
|
| 357 |
-
font-size: 0.84em;
|
| 358 |
-
}
|
| 359 |
-
|
| 360 |
-
.cat-grid {
|
| 361 |
-
display: grid;
|
| 362 |
-
grid-template-columns: repeat(6, minmax(0, 1fr));
|
| 363 |
-
gap: 0;
|
| 364 |
-
margin-bottom: 2rem;
|
| 365 |
-
border-top: 1px solid var(--line);
|
| 366 |
-
border-left: 1px solid var(--line);
|
| 367 |
-
counter-reset: category;
|
| 368 |
}
|
| 369 |
|
| 370 |
-
.
|
| 371 |
-
|
| 372 |
-
|
| 373 |
-
|
| 374 |
-
display: flex;
|
| 375 |
-
flex-direction: column;
|
| 376 |
-
align-items: stretch;
|
| 377 |
-
min-height: 280px;
|
| 378 |
-
text-align: left;
|
| 379 |
-
color: var(--ink);
|
| 380 |
-
font: inherit;
|
| 381 |
-
background: transparent;
|
| 382 |
-
border: 0;
|
| 383 |
-
border-bottom: 1px solid var(--line);
|
| 384 |
-
border-right: 1px solid var(--line);
|
| 385 |
-
border-radius: 0;
|
| 386 |
-
padding: clamp(1.5rem, 2.5vw, 2rem);
|
| 387 |
-
cursor: pointer;
|
| 388 |
}
|
| 389 |
|
| 390 |
-
.cat-
|
| 391 |
-
|
| 392 |
-
|
| 393 |
-
|
| 394 |
-
|
| 395 |
-
color: var(--cat-color, var(--accent-deep));
|
| 396 |
-
font-size: 0.75rem;
|
| 397 |
-
font-variant-numeric: tabular-nums;
|
| 398 |
-
letter-spacing: 0.08em;
|
| 399 |
}
|
| 400 |
|
| 401 |
-
.cat-card
|
| 402 |
-
|
| 403 |
-
|
| 404 |
-
|
| 405 |
-
|
| 406 |
-
|
| 407 |
-
place-items: center;
|
| 408 |
-
width: 2rem;
|
| 409 |
-
height: 2rem;
|
| 410 |
-
background: var(--bg-band);
|
| 411 |
-
color: var(--muted);
|
| 412 |
-
transition: transform .15s ease, background .15s ease;
|
| 413 |
}
|
| 414 |
-
.cat-card:hover .cat-arrow { color: var(--accent); transform: translate(2px,-2px); }
|
| 415 |
-
.cat-card:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; }
|
| 416 |
|
| 417 |
.cat-card.cat-jur {
|
| 418 |
-
--
|
| 419 |
}
|
| 420 |
.cat-card.cat-num {
|
| 421 |
-
--
|
| 422 |
}
|
| 423 |
.cat-card.cat-tmp {
|
| 424 |
-
--
|
| 425 |
}
|
| 426 |
.cat-card.cat-adv {
|
| 427 |
-
--
|
| 428 |
}
|
| 429 |
.cat-card.cat-grd {
|
| 430 |
-
--
|
| 431 |
}
|
| 432 |
-
|
| 433 |
.cat-code {
|
| 434 |
-
|
| 435 |
-
order: 4;
|
| 436 |
-
margin: auto 3rem 0 0;
|
| 437 |
-
padding-top: 2rem;
|
| 438 |
font-family: var(--mono);
|
| 439 |
font-size: 0.72rem;
|
| 440 |
letter-spacing: 0.04em;
|
| 441 |
color: var(--muted);
|
| 442 |
}
|
| 443 |
|
| 444 |
-
.cat-
|
| 445 |
-
|
| 446 |
-
|
| 447 |
-
margin: 2.25rem 0 0;
|
| 448 |
-
font-family: var(--display);
|
| 449 |
-
font-size: clamp(1.35rem, 2vw, 1.7rem);
|
| 450 |
-
font-weight: 300;
|
| 451 |
-
line-height: 1.15;
|
| 452 |
-
color: var(--accent-deep);
|
| 453 |
}
|
| 454 |
|
| 455 |
-
.cat-
|
| 456 |
-
|
| 457 |
-
order: 3;
|
| 458 |
-
margin-top: 0.9rem;
|
| 459 |
font-size: 0.92rem;
|
| 460 |
-
line-height: 1.5;
|
| 461 |
color: var(--muted);
|
| 462 |
}
|
| 463 |
-
|
| 464 |
.table-wrap {
|
| 465 |
-
overflow: auto;
|
| 466 |
-
margin-bottom: 1.75rem;
|
| 467 |
-
border: 1px solid var(--line);
|
| 468 |
-
border-radius:
|
| 469 |
-
background: var(--paper);
|
| 470 |
-
}
|
| 471 |
-
|
| 472 |
-
.data-table {
|
| 473 |
-
width: 100%;
|
| 474 |
-
border-collapse: collapse;
|
| 475 |
-
font-size: 0.9rem;
|
| 476 |
-
}
|
| 477 |
-
|
| 478 |
-
.data-table caption {
|
| 479 |
-
caption-side: bottom;
|
| 480 |
-
text-align: left;
|
| 481 |
-
padding: 0.55rem 0.9rem;
|
| 482 |
-
color: var(--muted);
|
| 483 |
-
font-size: 0.8rem;
|
| 484 |
-
}
|
| 485 |
-
|
| 486 |
-
.data-table th,
|
| 487 |
-
.data-table td {
|
| 488 |
-
text-align: left;
|
| 489 |
-
padding: 0.55rem 0.9rem;
|
| 490 |
-
border-bottom: 1px solid var(--line);
|
| 491 |
-
vertical-align: top;
|
| 492 |
-
}
|
| 493 |
-
|
| 494 |
-
.data-table th {
|
| 495 |
-
font-size: 0.75rem;
|
| 496 |
-
text-transform: uppercase;
|
| 497 |
-
letter-spacing: 0.04em;
|
| 498 |
-
color: var(--muted);
|
| 499 |
-
background: var(--bg);
|
| 500 |
-
}
|
| 501 |
-
|
| 502 |
-
.data-table tr:last-child td {
|
| 503 |
-
border-bottom: 0;
|
| 504 |
-
}
|
| 505 |
-
|
| 506 |
-
.data-table .num {
|
| 507 |
-
text-align: right;
|
| 508 |
-
font-variant-numeric: tabular-nums;
|
| 509 |
-
}
|
| 510 |
-
|
| 511 |
-
.foot {
|
| 512 |
-
display: flex;
|
| 513 |
-
flex-wrap: wrap;
|
| 514 |
-
align-items: center;
|
| 515 |
-
justify-content: space-between;
|
| 516 |
-
gap: 0.75rem;
|
| 517 |
-
margin-top: 2rem;
|
| 518 |
-
padding-top: 1rem;
|
| 519 |
-
border-top: 1px solid var(--line);
|
| 520 |
-
color: var(--muted);
|
| 521 |
-
font-size: 0.88rem;
|
| 522 |
-
}
|
| 523 |
-
|
| 524 |
.foot-brand {
|
| 525 |
-
display: inline-flex;
|
| 526 |
-
align-items: center;
|
| 527 |
-
gap: 0.5rem;
|
| 528 |
-
text-decoration: none;
|
| 529 |
-
color: inherit;
|
| 530 |
-
font-weight:
|
| 531 |
-
}
|
| 532 |
-
|
| 533 |
.foot a {
|
| 534 |
color: var(--accent-mid);
|
| 535 |
}
|
| 536 |
|
| 537 |
-
.
|
| 538 |
-
|
| 539 |
-
|
| 540 |
-
|
| 541 |
-
|
| 542 |
-
|
| 543 |
-
.
|
| 544 |
-
|
| 545 |
-
|
| 546 |
-
|
| 547 |
-
|
| 548 |
-
|
| 549 |
-
.protocol-grid li:last-child { border-right: 0; }
|
| 550 |
-
.protocol-grid span { font-family: var(--mono); font-size: .7rem; color: var(--accent); }
|
| 551 |
-
.protocol-grid strong { display: block; margin-top: 1.5rem; font-family: var(--display); font-size: 1.25rem; }
|
| 552 |
-
.protocol-grid p { margin: .4rem 0 0; color: var(--muted); font-size: .9rem; line-height: 1.45; }
|
| 553 |
-
.pending-table { max-width: 940px; margin: 0 auto 4rem; border: 1px solid var(--line); background: var(--paper); }
|
| 554 |
-
.pending-table > div { display: grid; grid-template-columns: 1.5fr .7fr 1fr; padding: .7rem 1rem; border-bottom: 1px solid var(--line); color: var(--muted); font-family: var(--mono); font-size: .7rem; }
|
| 555 |
-
.pending-table p { margin: 0; padding: 3rem 1rem .35rem; font-family: var(--display); font-size: 1.6rem; }
|
| 556 |
-
.pending-table > a { display: inline-block; margin: 0 1rem 2.5rem; color: var(--accent-mid); font-size: .88rem; }
|
| 557 |
-
|
| 558 |
-
.explorer-panel {
|
| 559 |
-
flex: 1;
|
| 560 |
-
min-height: 0;
|
| 561 |
-
display: flex;
|
| 562 |
-
}
|
| 563 |
-
|
| 564 |
-
.explorer-panel.active {
|
| 565 |
-
display: flex;
|
| 566 |
-
flex: 1;
|
| 567 |
-
min-height: 0;
|
| 568 |
-
}
|
| 569 |
-
|
| 570 |
.explorer {
|
| 571 |
display: grid;
|
| 572 |
-
grid-template-columns: minmax(
|
| 573 |
width: 100%;
|
| 574 |
min-height: 0;
|
| 575 |
flex: 1;
|
| 576 |
height: 100%;
|
| 577 |
-
background: var(--paper);
|
| 578 |
}
|
| 579 |
|
| 580 |
.sidebar {
|
| 581 |
-
background:
|
| 582 |
border-right: 1px solid var(--line);
|
| 583 |
display: flex;
|
| 584 |
flex-direction: column;
|
|
@@ -586,562 +445,416 @@ body.is-explorer .app {
|
|
| 586 |
}
|
| 587 |
|
| 588 |
.sidebar-head {
|
| 589 |
-
padding:
|
|
|
|
| 590 |
}
|
| 591 |
-
|
| 592 |
.sidebar-head h2 {
|
| 593 |
-
margin: 0;
|
| 594 |
font-family: var(--display);
|
| 595 |
-
font-size:
|
| 596 |
-
color: var(--accent-deep);
|
| 597 |
-
font-weight: 400;
|
| 598 |
}
|
| 599 |
-
|
| 600 |
-
.progress {
|
| 601 |
-
margin: 0.
|
| 602 |
color: var(--muted);
|
| 603 |
-
font-size: 0.
|
| 604 |
-
letter-spacing: .02em;
|
| 605 |
}
|
| 606 |
|
| 607 |
.filters {
|
| 608 |
-
padding: 0.
|
| 609 |
display: grid;
|
| 610 |
-
gap: 0.
|
| 611 |
border-bottom: 1px solid var(--line);
|
| 612 |
}
|
| 613 |
-
|
| 614 |
-
.filters label,
|
| 615 |
-
.filter-group-label {
|
| 616 |
-
display: grid;
|
| 617 |
-
gap: 0.
|
| 618 |
-
font-size: 0.
|
| 619 |
-
color: var(--muted);
|
| 620 |
-
text-transform: uppercase;
|
| 621 |
-
letter-spacing: 0.04em;
|
| 622 |
-
}
|
| 623 |
-
|
| 624 |
.filters input {
|
| 625 |
-
font: inherit;
|
| 626 |
-
color: var(--ink);
|
| 627 |
-
border: 1px solid var(--line);
|
| 628 |
-
border-radius:
|
| 629 |
-
padding: 0.
|
| 630 |
background: #fff;
|
| 631 |
-
min-height: 38px;
|
| 632 |
}
|
| 633 |
-
|
| 634 |
-
.filter-chips {
|
| 635 |
-
display: flex;
|
| 636 |
-
flex-wrap: wrap;
|
| 637 |
-
gap: 0.
|
| 638 |
}
|
| 639 |
-
|
| 640 |
.filter-chips button {
|
| 641 |
-
font: inherit;
|
| 642 |
-
font-size: 0.
|
| 643 |
-
color: var(--ink);
|
| 644 |
-
background: #fff;
|
| 645 |
-
border: 1px solid var(--line);
|
| 646 |
-
border-radius:
|
| 647 |
-
padding: 0.
|
| 648 |
-
cursor: pointer;
|
| 649 |
-
}
|
| 650 |
-
|
| 651 |
.filter-chips button.is-on {
|
| 652 |
-
background: var(--
|
| 653 |
-
border-color: var(--
|
| 654 |
-
color:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 655 |
font-weight: 400;
|
| 656 |
}
|
| 657 |
|
| 658 |
-
.filter-chips button.is-on .chip-count { color: rgba(255,255,255,.68); }
|
| 659 |
-
|
| 660 |
-
.filter-chips .chip-count {
|
| 661 |
-
color: var(--muted);
|
| 662 |
-
font-weight: 400;
|
| 663 |
-
}
|
| 664 |
-
|
| 665 |
.queue {
|
| 666 |
-
list-style: none;
|
| 667 |
-
margin: 0;
|
| 668 |
-
padding: 0;
|
| 669 |
-
overflow: auto;
|
| 670 |
-
flex: 1;
|
| 671 |
-
}
|
| 672 |
-
|
| 673 |
.queue li button {
|
| 674 |
-
width: 100%;
|
| 675 |
-
text-align: left;
|
| 676 |
-
border: 0;
|
| 677 |
-
background: transparent;
|
| 678 |
-
padding: 0.
|
| 679 |
-
cursor: pointer;
|
| 680 |
border-left: 3px solid transparent;
|
| 681 |
-
|
| 682 |
-
|
| 683 |
-
|
| 684 |
-
|
| 685 |
-
|
| 686 |
.queue li button:hover {
|
| 687 |
-
background:
|
| 688 |
}
|
| 689 |
|
| 690 |
.queue li button.active {
|
| 691 |
-
background:
|
| 692 |
-
border-left-color: var(--accent
|
| 693 |
}
|
| 694 |
-
|
| 695 |
-
.queue .qid {
|
| 696 |
-
display: block;
|
| 697 |
-
font-family: var(--mono);
|
| 698 |
-
font-size: 0.
|
| 699 |
-
color: var(--
|
| 700 |
-
|
| 701 |
-
|
| 702 |
-
|
| 703 |
-
|
| 704 |
-
|
| 705 |
-
-webkit-
|
| 706 |
-
|
| 707 |
-
|
| 708 |
-
|
| 709 |
-
|
| 710 |
-
|
| 711 |
-
|
| 712 |
-
|
| 713 |
-
|
| 714 |
-
|
| 715 |
-
|
| 716 |
-
|
| 717 |
.pill {
|
| 718 |
-
display: inline-block;
|
| 719 |
-
font-size: 0.64rem;
|
| 720 |
-
padding: 0.08rem 0.36rem;
|
| 721 |
-
border-radius:
|
| 722 |
-
background: #e8eee9;
|
| 723 |
-
color: var(--muted);
|
| 724 |
-
text-transform: uppercase;
|
| 725 |
-
letter-spacing: 0.03em;
|
| 726 |
-
}
|
| 727 |
-
|
| 728 |
-
.pill.BFSI-JUR {
|
| 729 |
-
background: #dce8e1;
|
| 730 |
-
color: var(--jur);
|
| 731 |
-
}
|
| 732 |
-
.pill.BFSI-NUM {
|
| 733 |
-
background: #e2e6f2;
|
| 734 |
-
color: var(--num);
|
| 735 |
-
}
|
| 736 |
-
.pill.BFSI-TMP {
|
| 737 |
-
background: #f6e6d4;
|
| 738 |
-
color: var(--tmp);
|
| 739 |
-
}
|
| 740 |
-
.pill.BFSI-ADV {
|
| 741 |
-
background: #f3ddd6;
|
| 742 |
-
color: var(--adv);
|
| 743 |
-
}
|
| 744 |
-
.pill.BFSI-GRD {
|
| 745 |
-
background: #e4e6f4;
|
| 746 |
-
color: var(--grd);
|
| 747 |
-
}
|
| 748 |
-
|
| 749 |
.detail-pane {
|
| 750 |
overflow: auto;
|
| 751 |
-
padding: 0
|
| 752 |
min-width: 0;
|
| 753 |
-
|
| 754 |
-
|
| 755 |
-
|
| 756 |
-
|
| 757 |
-
|
| 758 |
-
|
| 759 |
-
|
| 760 |
-
|
| 761 |
-
|
| 762 |
-
|
| 763 |
-
|
| 764 |
-
}
|
| 765 |
-
|
| 766 |
.detail-head {
|
| 767 |
-
display: flex;
|
| 768 |
-
flex-wrap: wrap;
|
| 769 |
-
align-items: center;
|
| 770 |
-
justify-content: space-between;
|
| 771 |
-
gap: 0.5rem;
|
| 772 |
-
|
| 773 |
-
|
| 774 |
-
|
| 775 |
-
|
| 776 |
-
|
| 777 |
-
|
| 778 |
-
|
| 779 |
-
|
| 780 |
-
|
| 781 |
-
|
| 782 |
-
|
| 783 |
-
.detail-head .meta {
|
| 784 |
-
display: flex;
|
| 785 |
-
flex-wrap: wrap;
|
| 786 |
-
gap: 0.35rem;
|
| 787 |
-
align-items: center;
|
| 788 |
-
}
|
| 789 |
-
|
| 790 |
.detail-head .id {
|
| 791 |
-
font-family: var(--mono);
|
| 792 |
-
font-weight:
|
| 793 |
-
}
|
| 794 |
-
|
| 795 |
-
.nav-btns {
|
| 796 |
-
display: flex;
|
| 797 |
-
gap: 0.4rem;
|
| 798 |
-
flex-wrap: wrap;
|
| 799 |
-
}
|
| 800 |
-
|
| 801 |
.nav-btns button,
|
| 802 |
.drawer-open,
|
| 803 |
.drawer-close {
|
| 804 |
-
font: inherit;
|
| 805 |
-
border: 1px solid var(--line);
|
| 806 |
-
background: #fff;
|
| 807 |
-
border-radius:
|
| 808 |
-
padding: 0.
|
| 809 |
cursor: pointer;
|
| 810 |
-
color: var(--muted);
|
| 811 |
-
font-size: .75rem;
|
| 812 |
-
}
|
| 813 |
-
|
| 814 |
-
.nav-btns button:hover {
|
| 815 |
-
border-color: var(--accent);
|
| 816 |
-
}
|
| 817 |
-
|
| 818 |
-
.sample-document {
|
| 819 |
-
max-width: 820px;
|
| 820 |
-
margin: 0 auto;
|
| 821 |
}
|
| 822 |
|
| 823 |
-
.
|
| 824 |
-
|
| 825 |
-
border-bottom: 1px solid var(--line);
|
| 826 |
-
scroll-margin-top: 66px;
|
| 827 |
}
|
| 828 |
|
| 829 |
-
.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 830 |
|
| 831 |
-
.
|
| 832 |
-
|
| 833 |
-
|
| 834 |
-
|
| 835 |
-
|
| 836 |
-
font-weight: 400;
|
| 837 |
-
color: var(--accent-deep);
|
| 838 |
}
|
| 839 |
|
| 840 |
-
.
|
| 841 |
-
|
| 842 |
-
|
| 843 |
-
|
| 844 |
-
|
| 845 |
-
|
|
|
|
| 846 |
text-transform: uppercase;
|
|
|
|
| 847 |
color: var(--muted);
|
| 848 |
}
|
| 849 |
|
| 850 |
-
.
|
| 851 |
-
.sample-answer h2::before { content: "02"; }
|
| 852 |
-
.sample-sources h2::before { content: "03"; }
|
| 853 |
-
.sample-facts h2::before { content: "04"; }
|
| 854 |
-
.sample-evidence h2::before { content: "05"; }
|
| 855 |
-
|
| 856 |
-
.sample-section .body {
|
| 857 |
margin: 0;
|
| 858 |
white-space: pre-wrap;
|
| 859 |
-
line-height: 1.
|
| 860 |
-
font-size:
|
| 861 |
-
max-width: 74ch;
|
| 862 |
-
}
|
| 863 |
-
|
| 864 |
-
.sample-question .body {
|
| 865 |
-
font-family: var(--display);
|
| 866 |
-
font-size: clamp(1.3rem, 2.2vw, 1.75rem);
|
| 867 |
-
line-height: 1.4;
|
| 868 |
-
color: var(--artwork-green);
|
| 869 |
-
}
|
| 870 |
-
|
| 871 |
-
.sample-answer .body {
|
| 872 |
-
padding: 1.25rem 1.4rem;
|
| 873 |
-
background: rgba(54,63,140,.055);
|
| 874 |
-
border-left: 3px solid var(--accent-deep);
|
| 875 |
}
|
| 876 |
|
| 877 |
-
.
|
| 878 |
-
|
| 879 |
-
|
| 880 |
-
|
| 881 |
-
|
| 882 |
-
|
| 883 |
-
|
| 884 |
-
.
|
| 885 |
-
.evidence {
|
| 886 |
-
list-style: none;
|
| 887 |
-
margin: 0;
|
| 888 |
-
padding: 0;
|
| 889 |
-
display: grid;
|
| 890 |
-
gap: 0;
|
| 891 |
}
|
| 892 |
|
| 893 |
.sources li,
|
| 894 |
.nugget,
|
| 895 |
.ev-item {
|
| 896 |
-
padding:
|
| 897 |
-
background:
|
| 898 |
-
border-radius:
|
| 899 |
-
border:
|
| 900 |
-
border-bottom: 1px solid var(--line);
|
| 901 |
}
|
| 902 |
|
| 903 |
-
.sources li:last-child,
|
| 904 |
-
.nugget:last-child,
|
| 905 |
-
.ev-item:last-child { border-bottom: 0; }
|
| 906 |
-
|
| 907 |
.sources a,
|
| 908 |
.ev-meta a {
|
| 909 |
color: var(--accent-mid);
|
| 910 |
-
word-break: break-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 911 |
font-size: 0.88rem;
|
| 912 |
-
|
| 913 |
-
|
| 914 |
-
|
| 915 |
-
|
| 916 |
-
|
| 917 |
-
|
| 918 |
-
|
| 919 |
-
|
| 920 |
-
|
| 921 |
-
|
| 922 |
-
|
| 923 |
-
.sources .date {
|
| 924 |
-
display: block;
|
| 925 |
-
margin: .28rem 0 0 1.35rem;
|
| 926 |
-
font-family: var(--mono);
|
| 927 |
-
font-size: 0.72rem;
|
| 928 |
-
color: var(--muted);
|
| 929 |
-
}
|
| 930 |
-
|
| 931 |
.nugget-head {
|
| 932 |
-
display: flex;
|
| 933 |
-
flex-wrap: wrap;
|
| 934 |
-
gap: 0.3rem;
|
| 935 |
-
align-items: center;
|
| 936 |
-
margin-bottom: 0.
|
| 937 |
-
}
|
| 938 |
-
|
| 939 |
-
.nugget-id {
|
| 940 |
-
font-family: var(--mono);
|
| 941 |
-
font-size: 0.75rem;
|
| 942 |
-
color: var(--muted);
|
| 943 |
-
}
|
| 944 |
-
|
| 945 |
.vital {
|
| 946 |
-
font-size: 0.64rem;
|
| 947 |
-
font-weight:
|
| 948 |
-
letter-spacing: 0.04em;
|
| 949 |
-
text-transform: uppercase;
|
| 950 |
-
background: var(--accent-soft);
|
| 951 |
-
color: var(--accent-deep);
|
| 952 |
-
padding: 0.05rem 0.35rem;
|
| 953 |
-
border-radius:
|
| 954 |
-
}
|
| 955 |
-
|
| 956 |
.nugget-text {
|
| 957 |
-
margin: 0;
|
| 958 |
-
font-size: 0.
|
| 959 |
-
line-height: 1.
|
| 960 |
-
}
|
| 961 |
-
|
| 962 |
-
.nugget-quote {
|
| 963 |
-
margin: .
|
| 964 |
-
font-size: 0.82rem;
|
| 965 |
-
color: var(--muted);
|
| 966 |
-
border-left:
|
| 967 |
-
padding-left: .
|
| 968 |
-
white-space: pre-wrap;
|
| 969 |
-
}
|
| 970 |
-
|
| 971 |
-
.ev-title {
|
| 972 |
-
font-size: 0.82rem;
|
| 973 |
-
font-weight: 400;
|
| 974 |
-
margin-bottom: 0.3rem;
|
| 975 |
-
word-break: break-word;
|
| 976 |
-
font-family: var(--mono);
|
| 977 |
-
}
|
| 978 |
-
|
| 979 |
-
.ev-title a {
|
| 980 |
-
color: var(--accent-mid);
|
| 981 |
-
}
|
| 982 |
-
|
| 983 |
-
.ev-quote {
|
| 984 |
-
margin: .8rem 0 .2rem;
|
| 985 |
-
font-family: var(--display);
|
| 986 |
-
font-size: 1rem;
|
| 987 |
-
line-height: 1.58;
|
| 988 |
-
color: var(--artwork-green);
|
| 989 |
-
border-left: 2px solid var(--accent);
|
| 990 |
-
padding-left: 1rem;
|
| 991 |
white-space: pre-wrap;
|
| 992 |
}
|
| 993 |
-
|
| 994 |
-
.ev-
|
| 995 |
-
|
| 996 |
-
font-
|
| 997 |
-
|
| 998 |
-
|
| 999 |
-
|
| 1000 |
-
.ev-ctx-wrap summary {
|
| 1001 |
-
cursor: pointer;
|
| 1002 |
-
font-weight: 400;
|
| 1003 |
-
}
|
| 1004 |
-
|
| 1005 |
-
.ev-ctx {
|
| 1006 |
-
margin-top: 0.3rem;
|
| 1007 |
-
white-space: pre-wrap;
|
| 1008 |
-
}
|
| 1009 |
-
|
| 1010 |
-
.ev-meta {
|
| 1011 |
-
margin-top: 0.35rem;
|
| 1012 |
-
font-size: 0.75rem;
|
| 1013 |
-
color: var(--muted);
|
| 1014 |
}
|
| 1015 |
|
| 1016 |
-
.
|
| 1017 |
-
|
| 1018 |
-
border-left: 1px solid var(--line);
|
| 1019 |
-
background: #fcfcfc;
|
| 1020 |
-
min-width: 0;
|
| 1021 |
}
|
| 1022 |
|
| 1023 |
-
.
|
| 1024 |
-
|
| 1025 |
-
|
| 1026 |
-
|
| 1027 |
-
|
| 1028 |
-
|
| 1029 |
}
|
| 1030 |
|
| 1031 |
-
.
|
| 1032 |
-
|
| 1033 |
-
|
| 1034 |
-
|
| 1035 |
}
|
| 1036 |
|
| 1037 |
-
.
|
| 1038 |
-
width: 100%;
|
| 1039 |
-
border: 0;
|
| 1040 |
-
border-left: 3px solid transparent;
|
| 1041 |
-
margin-left: -2px;
|
| 1042 |
-
padding: .5rem 0 .5rem .85rem;
|
| 1043 |
-
text-align: left;
|
| 1044 |
-
background: transparent;
|
| 1045 |
-
color: #8a8a91;
|
| 1046 |
-
font: inherit;
|
| 1047 |
-
font-size: .78rem;
|
| 1048 |
-
line-height: 1.35;
|
| 1049 |
cursor: pointer;
|
|
|
|
| 1050 |
}
|
| 1051 |
|
| 1052 |
-
.
|
| 1053 |
-
|
| 1054 |
-
|
|
|
|
| 1055 |
|
| 1056 |
-
.
|
| 1057 |
-
|
| 1058 |
-
|
| 1059 |
-
|
| 1060 |
}
|
| 1061 |
-
|
| 1062 |
.drawer-open,
|
| 1063 |
.drawer-close {
|
| 1064 |
display: none;
|
| 1065 |
}
|
| 1066 |
|
| 1067 |
-
@media (max-width: 1120px) {
|
| 1068 |
-
.explorer { grid-template-columns: minmax(260px, 300px) minmax(0, 1fr); }
|
| 1069 |
-
.sample-outline { display: none; }
|
| 1070 |
-
}
|
| 1071 |
-
|
| 1072 |
@media (max-width: 900px) {
|
| 1073 |
-
.
|
| 1074 |
-
.
|
| 1075 |
-
|
| 1076 |
-
|
| 1077 |
-
|
| 1078 |
-
.
|
| 1079 |
-
|
| 1080 |
-
|
| 1081 |
-
|
| 1082 |
-
.card.span-2 {
|
| 1083 |
-
grid-column: 1;
|
| 1084 |
-
}
|
| 1085 |
-
|
| 1086 |
.explorer {
|
| 1087 |
grid-template-columns: 1fr;
|
| 1088 |
}
|
| 1089 |
|
| 1090 |
-
.
|
| 1091 |
-
|
| 1092 |
-
|
| 1093 |
-
|
| 1094 |
-
|
| 1095 |
-
|
| 1096 |
-
|
| 1097 |
-
|
| 1098 |
-
|
| 1099 |
-
|
| 1100 |
-
|
| 1101 |
-
|
| 1102 |
-
|
| 1103 |
-
|
| 1104 |
-
|
| 1105 |
-
|
| 1106 |
-
|
| 1107 |
-
|
| 1108 |
-
|
| 1109 |
-
|
| 1110 |
-
|
| 1111 |
-
|
| 1112 |
-
|
| 1113 |
-
}
|
| 1114 |
-
}
|
| 1115 |
-
|
| 1116 |
-
@media (max-width: 640px) {
|
| 1117 |
-
.top { justify-content: center; padding-bottom: .45rem; }
|
| 1118 |
-
.brand-lockup { margin-right: auto; }
|
| 1119 |
-
.mode-nav { order: 3; width: 100%; justify-content: center; border-top: 1px solid var(--line); padding-top: .4rem; }
|
| 1120 |
-
.hero { padding: 0; }
|
| 1121 |
-
.hero-copy { padding: 2rem 1.25rem; }
|
| 1122 |
-
.hero h1 { font-size: clamp(2.55rem, 13vw, 3.5rem); }
|
| 1123 |
-
.hero-artwork { display: none; }
|
| 1124 |
-
.overview-note-art { display: block; min-height: 420px; }
|
| 1125 |
-
.leaderboard-artwork { min-height: 280px; }
|
| 1126 |
-
.cat-grid { grid-template-columns: 1fr; }
|
| 1127 |
-
.cat-card,
|
| 1128 |
-
.cat-card:nth-child(n + 4),
|
| 1129 |
-
.cat-card:last-child { grid-column: span 1; min-height: 240px; }
|
| 1130 |
-
.trust-strip { grid-template-columns: 1fr; margin-bottom: 3rem; }
|
| 1131 |
-
.trust-strip span { border-right: 0; border-bottom: 1px solid var(--line); }
|
| 1132 |
-
.trust-strip span:last-child { border-bottom: 0; }
|
| 1133 |
-
.status-note { margin: 0 1.25rem; }
|
| 1134 |
-
.detail-pane { padding: 0 1rem 3rem; }
|
| 1135 |
-
.detail-head { padding-block: .7rem; }
|
| 1136 |
-
.detail-head .meta { width: 100%; }
|
| 1137 |
-
.nav-btns { width: 100%; gap: .3rem; }
|
| 1138 |
-
.nav-btns button { flex: 1; justify-content: center; }
|
| 1139 |
-
.sample-section { padding: 2.2rem 0; scroll-margin-top: 104px; }
|
| 1140 |
-
.sample-answer .body { padding: 1rem 1.05rem; }
|
| 1141 |
-
.protocol-grid { grid-template-columns: 1fr; }
|
| 1142 |
-
.protocol-grid li { border-right: 0; }
|
| 1143 |
|
|
|
|
| 1144 |
.top-links {
|
| 1145 |
-
display: none;
|
| 1146 |
-
}
|
| 1147 |
-
}
|
|
|
|
| 1 |
:root {
|
| 2 |
+
--bg: #f3f6f5;
|
| 3 |
+
--bg-band: #e4ebe7;
|
| 4 |
+
--ink: #13261b;
|
| 5 |
+
--muted: #5e6b64;
|
| 6 |
+
--line: #cfd8d2;
|
|
|
|
| 7 |
--paper: #ffffff;
|
| 8 |
--accent: #48a47c;
|
| 9 |
+
--accent-deep: #193625;
|
|
|
|
| 10 |
--accent-blue: #363f8c;
|
| 11 |
+
--accent-mid: #3b5b88;
|
| 12 |
+
--accent-soft: #e6f3ec;
|
| 13 |
+
--jur: #193625;
|
| 14 |
+
--num: #3b5b88;
|
| 15 |
+
--tmp: #a85613;
|
| 16 |
+
--adv: #8a3d2a;
|
| 17 |
+
--grd: #363f8c;
|
| 18 |
+
--display: "Poppins", "Inter", system-ui, sans-serif;
|
| 19 |
+
--sans: "Inter", system-ui, sans-serif;
|
| 20 |
+
--mono: "IBM Plex Mono", ui-monospace, monospace;
|
| 21 |
+
}
|
| 22 |
+
|
| 23 |
+
*,
|
| 24 |
+
*::before,
|
| 25 |
+
*::after {
|
| 26 |
+
box-sizing: border-box;
|
| 27 |
+
}
|
| 28 |
+
|
| 29 |
+
html,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 30 |
body {
|
| 31 |
+
margin: 0;
|
| 32 |
+
height: 100%;
|
| 33 |
+
}
|
| 34 |
+
|
| 35 |
+
body {
|
| 36 |
+
color: var(--ink);
|
| 37 |
+
background: var(--bg);
|
| 38 |
+
font-family: var(--sans);
|
| 39 |
+
font-size: 1.02rem;
|
| 40 |
line-height: 1.6;
|
| 41 |
+
}
|
| 42 |
+
|
| 43 |
+
.app {
|
| 44 |
+
min-height: 100%;
|
| 45 |
+
display: flex;
|
| 46 |
+
flex-direction: column;
|
| 47 |
+
}
|
| 48 |
+
|
| 49 |
+
body.is-explorer {
|
| 50 |
+
overflow: hidden;
|
| 51 |
+
}
|
| 52 |
+
|
| 53 |
+
body.is-explorer .app {
|
| 54 |
+
height: 100%;
|
| 55 |
+
}
|
| 56 |
+
|
| 57 |
+
.top {
|
| 58 |
+
display: flex;
|
| 59 |
+
flex-wrap: wrap;
|
| 60 |
+
align-items: center;
|
| 61 |
+
justify-content: space-between;
|
| 62 |
+
gap: 0.75rem 1.25rem;
|
| 63 |
+
padding: 0.85rem 1.25rem;
|
| 64 |
+
border-bottom: 1px solid var(--line);
|
| 65 |
+
background: var(--paper);
|
| 66 |
+
flex-shrink: 0;
|
|
|
|
| 67 |
z-index: 20;
|
| 68 |
+
}
|
| 69 |
+
|
|
|
|
| 70 |
.brand-lockup {
|
| 71 |
display: inline-flex;
|
| 72 |
align-items: center;
|
| 73 |
+
gap: 0.7rem;
|
| 74 |
text-decoration: none;
|
| 75 |
color: inherit;
|
| 76 |
}
|
| 77 |
+
|
| 78 |
+
.brand-mark {
|
| 79 |
display: block;
|
| 80 |
+
width: 40px;
|
| 81 |
+
height: 40px;
|
| 82 |
+
border-radius: 8px;
|
| 83 |
flex-shrink: 0;
|
| 84 |
}
|
| 85 |
|
| 86 |
+
.brand-text {
|
| 87 |
+
display: flex;
|
| 88 |
+
flex-direction: column;
|
| 89 |
+
line-height: 1.15;
|
| 90 |
+
}
|
| 91 |
+
|
| 92 |
+
.brand-name {
|
| 93 |
+
font-family: var(--display);
|
| 94 |
+
font-size: 1.05rem;
|
| 95 |
+
font-weight: 700;
|
| 96 |
+
letter-spacing: -0.02em;
|
| 97 |
+
color: var(--accent-deep);
|
| 98 |
+
}
|
| 99 |
+
|
| 100 |
.brand-product {
|
| 101 |
+
font-size: 0.82rem;
|
| 102 |
+
font-weight: 500;
|
|
|
|
|
|
|
| 103 |
color: var(--muted);
|
| 104 |
}
|
| 105 |
+
|
| 106 |
+
.mode-nav {
|
| 107 |
+
display: inline-flex;
|
| 108 |
+
gap: 0.15rem;
|
| 109 |
+
padding: 0.2rem;
|
| 110 |
+
background: var(--bg-band);
|
| 111 |
+
border-radius: 8px;
|
| 112 |
+
}
|
| 113 |
+
|
| 114 |
.mode {
|
| 115 |
+
border: 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 116 |
background: transparent;
|
| 117 |
+
color: var(--muted);
|
| 118 |
+
font: inherit;
|
| 119 |
+
font-weight: 600;
|
| 120 |
+
font-size: 0.9rem;
|
| 121 |
+
padding: 0.45rem 0.95rem;
|
| 122 |
+
border-radius: 6px;
|
| 123 |
+
cursor: pointer;
|
| 124 |
+
}
|
| 125 |
+
|
| 126 |
+
.mode.active {
|
| 127 |
+
background: var(--paper);
|
| 128 |
color: var(--accent-deep);
|
| 129 |
+
}
|
| 130 |
+
|
| 131 |
+
.mode:focus-visible,
|
| 132 |
+
.nav-btns button:focus-visible,
|
| 133 |
+
.filter-chips button:focus-visible,
|
| 134 |
+
.btn-primary:focus-visible,
|
| 135 |
+
.btn-ghost:focus-visible {
|
| 136 |
+
outline: 2px solid var(--accent);
|
| 137 |
+
outline-offset: 2px;
|
| 138 |
+
}
|
| 139 |
+
|
| 140 |
+
.top-links {
|
| 141 |
+
display: flex;
|
| 142 |
+
gap: 1rem;
|
| 143 |
+
font-size: 0.88rem;
|
| 144 |
+
}
|
| 145 |
+
|
|
|
|
| 146 |
.top-links a {
|
| 147 |
+
color: var(--accent-mid);
|
| 148 |
+
text-decoration: none;
|
| 149 |
+
font-weight: 600;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 150 |
}
|
| 151 |
|
| 152 |
+
.top-links a:hover {
|
| 153 |
+
color: var(--accent-deep);
|
| 154 |
+
text-decoration: underline;
|
| 155 |
+
}
|
| 156 |
+
|
| 157 |
+
.mode-panel[hidden] {
|
| 158 |
+
display: none !important;
|
| 159 |
+
}
|
| 160 |
+
|
| 161 |
+
.mode-panel:not(.explorer-panel) {
|
| 162 |
+
flex: 1;
|
| 163 |
+
}
|
| 164 |
+
|
| 165 |
+
#mode-overview,
|
| 166 |
+
#mode-leaderboard {
|
| 167 |
+
max-width: 960px;
|
| 168 |
+
width: 100%;
|
| 169 |
+
margin: 0 auto;
|
| 170 |
+
padding: 1.5rem 1.25rem 3rem;
|
| 171 |
}
|
| 172 |
|
| 173 |
+
.hero {
|
| 174 |
+
padding: 1.75rem 1.6rem 1.5rem;
|
| 175 |
+
border-radius: 12px;
|
| 176 |
+
background:
|
| 177 |
+
linear-gradient(115deg, rgba(19, 38, 27, 0.96) 0%, rgba(25, 54, 37, 0.88) 48%, rgba(54, 63, 140, 0.78) 100%);
|
| 178 |
+
color: #f3f6f5;
|
| 179 |
+
margin-bottom: 1.5rem;
|
| 180 |
+
}
|
| 181 |
|
| 182 |
+
.hero-plain {
|
| 183 |
+
background: var(--accent-deep);
|
|
|
|
|
|
|
|
|
|
| 184 |
}
|
| 185 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 186 |
.kicker {
|
| 187 |
+
margin: 0 0 0.45rem;
|
| 188 |
+
font-size: 0.78rem;
|
| 189 |
+
letter-spacing: 0.06em;
|
| 190 |
+
text-transform: uppercase;
|
| 191 |
+
font-weight: 600;
|
| 192 |
opacity: 0.82;
|
|
|
|
| 193 |
}
|
| 194 |
|
|
|
|
|
|
|
| 195 |
.hero h1 {
|
| 196 |
+
margin: 0 0 0.6rem;
|
| 197 |
+
font-family: var(--display);
|
| 198 |
+
font-size: clamp(1.7rem, 4vw, 2.35rem);
|
| 199 |
+
letter-spacing: -0.03em;
|
| 200 |
+
line-height: 1.15;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 201 |
}
|
| 202 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 203 |
.hero .deck + .deck {
|
| 204 |
+
margin-top: 0.7rem;
|
| 205 |
+
}
|
| 206 |
+
|
| 207 |
+
.hero-actions {
|
| 208 |
+
display: flex;
|
| 209 |
+
flex-wrap: wrap;
|
| 210 |
+
gap: 0.6rem;
|
| 211 |
+
margin: 1.15rem 0 0;
|
| 212 |
+
}
|
| 213 |
+
|
| 214 |
.btn-primary,
|
| 215 |
.btn-ghost {
|
| 216 |
+
display: inline-flex;
|
| 217 |
+
align-items: center;
|
| 218 |
+
font: inherit;
|
| 219 |
+
font-weight: 600;
|
| 220 |
+
font-size: 0.92rem;
|
| 221 |
+
padding: 0.45rem 0.95rem;
|
| 222 |
+
border-radius: 8px;
|
| 223 |
+
text-decoration: none;
|
| 224 |
+
cursor: pointer;
|
| 225 |
+
}
|
| 226 |
+
|
| 227 |
+
.btn-primary {
|
| 228 |
+
border: 0;
|
| 229 |
background: var(--accent);
|
| 230 |
color: #fff;
|
| 231 |
+
}
|
| 232 |
+
|
| 233 |
+
.btn-ghost {
|
| 234 |
+
border: 1px solid rgba(243, 246, 245, 0.35);
|
| 235 |
+
background: transparent;
|
| 236 |
+
color: #f3f6f5;
|
| 237 |
+
}
|
| 238 |
+
|
| 239 |
+
.btn-ghost:hover {
|
| 240 |
+
background: rgba(255, 255, 255, 0.08);
|
| 241 |
+
}
|
| 242 |
+
|
|
|
|
|
|
|
|
|
|
| 243 |
.overview h2 {
|
| 244 |
font-family: var(--display);
|
| 245 |
+
font-size: 1.2rem;
|
|
|
|
|
|
|
|
|
|
|
|
|
| 246 |
margin: 0 0 0.75rem;
|
| 247 |
}
|
| 248 |
|
| 249 |
+
.section-lead {
|
| 250 |
+
margin: -0.25rem 0 0.9rem;
|
| 251 |
+
color: var(--muted);
|
| 252 |
+
font-size: 0.95rem;
|
| 253 |
+
}
|
| 254 |
+
|
| 255 |
+
.card-hint {
|
| 256 |
+
margin: 0 0 0.55rem;
|
| 257 |
+
font-size: 0.8rem;
|
| 258 |
+
color: var(--muted);
|
| 259 |
+
line-height: 1.4;
|
| 260 |
+
}
|
| 261 |
+
|
| 262 |
+
.prose p,
|
| 263 |
+
.prose ol {
|
| 264 |
+
margin: 0 0 0.9rem;
|
| 265 |
+
color: var(--ink);
|
| 266 |
+
}
|
| 267 |
+
|
| 268 |
+
.prose blockquote {
|
| 269 |
+
margin: 0 0 1rem;
|
| 270 |
+
padding: 0.7rem 1rem;
|
| 271 |
+
border-left: 3px solid var(--accent);
|
| 272 |
+
background: var(--paper);
|
| 273 |
+
color: var(--muted);
|
| 274 |
+
font-style: italic;
|
| 275 |
+
}
|
| 276 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 277 |
.prose pre,
|
| 278 |
.overview pre {
|
| 279 |
+
background: var(--accent-deep);
|
| 280 |
+
color: #e8f0eb;
|
| 281 |
padding: 1rem 1.1rem;
|
| 282 |
+
border-radius: 8px;
|
|
|
|
| 283 |
overflow: auto;
|
| 284 |
+
font-family: var(--mono);
|
| 285 |
+
font-size: 0.78rem;
|
| 286 |
+
line-height: 1.5;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 287 |
}
|
| 288 |
|
| 289 |
+
.prose code,
|
| 290 |
+
.data-table code {
|
| 291 |
+
font-family: var(--mono);
|
| 292 |
+
font-size: 0.84em;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 293 |
}
|
| 294 |
|
| 295 |
+
.cat-grid {
|
| 296 |
+
display: grid;
|
| 297 |
+
grid-template-columns: 1fr 1fr;
|
| 298 |
+
gap: 0.75rem;
|
| 299 |
+
margin-bottom: 2rem;
|
|
|
|
|
|
|
|
|
|
|
|
|
| 300 |
}
|
| 301 |
|
| 302 |
+
.cat-card {
|
| 303 |
+
background: var(--paper);
|
| 304 |
+
border: 1px solid var(--line);
|
| 305 |
+
border-radius: 10px;
|
| 306 |
+
padding: 1rem 1.05rem 1.05rem;
|
| 307 |
+
border-left: 4px solid var(--accent);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 308 |
}
|
|
|
|
|
|
|
| 309 |
|
| 310 |
.cat-card.cat-jur {
|
| 311 |
+
border-left-color: var(--jur);
|
| 312 |
}
|
| 313 |
.cat-card.cat-num {
|
| 314 |
+
border-left-color: var(--num);
|
| 315 |
}
|
| 316 |
.cat-card.cat-tmp {
|
| 317 |
+
border-left-color: var(--tmp);
|
| 318 |
}
|
| 319 |
.cat-card.cat-adv {
|
| 320 |
+
border-left-color: var(--adv);
|
| 321 |
}
|
| 322 |
.cat-card.cat-grd {
|
| 323 |
+
border-left-color: var(--grd);
|
| 324 |
}
|
| 325 |
+
|
| 326 |
.cat-code {
|
| 327 |
+
margin: 0 0 0.3rem;
|
|
|
|
|
|
|
|
|
|
| 328 |
font-family: var(--mono);
|
| 329 |
font-size: 0.72rem;
|
| 330 |
letter-spacing: 0.04em;
|
| 331 |
color: var(--muted);
|
| 332 |
}
|
| 333 |
|
| 334 |
+
.cat-card h3 {
|
| 335 |
+
margin: 0 0 0.35rem;
|
| 336 |
+
font-size: 1rem;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 337 |
}
|
| 338 |
|
| 339 |
+
.cat-card p {
|
| 340 |
+
margin: 0;
|
|
|
|
|
|
|
| 341 |
font-size: 0.92rem;
|
|
|
|
| 342 |
color: var(--muted);
|
| 343 |
}
|
| 344 |
+
|
| 345 |
.table-wrap {
|
| 346 |
+
overflow: auto;
|
| 347 |
+
margin-bottom: 1.75rem;
|
| 348 |
+
border: 1px solid var(--line);
|
| 349 |
+
border-radius: 10px;
|
| 350 |
+
background: var(--paper);
|
| 351 |
+
}
|
| 352 |
+
|
| 353 |
+
.data-table {
|
| 354 |
+
width: 100%;
|
| 355 |
+
border-collapse: collapse;
|
| 356 |
+
font-size: 0.9rem;
|
| 357 |
+
}
|
| 358 |
+
|
| 359 |
+
.data-table caption {
|
| 360 |
+
caption-side: bottom;
|
| 361 |
+
text-align: left;
|
| 362 |
+
padding: 0.55rem 0.9rem;
|
| 363 |
+
color: var(--muted);
|
| 364 |
+
font-size: 0.8rem;
|
| 365 |
+
}
|
| 366 |
+
|
| 367 |
+
.data-table th,
|
| 368 |
+
.data-table td {
|
| 369 |
+
text-align: left;
|
| 370 |
+
padding: 0.55rem 0.9rem;
|
| 371 |
+
border-bottom: 1px solid var(--line);
|
| 372 |
+
vertical-align: top;
|
| 373 |
+
}
|
| 374 |
+
|
| 375 |
+
.data-table th {
|
| 376 |
+
font-size: 0.75rem;
|
| 377 |
+
text-transform: uppercase;
|
| 378 |
+
letter-spacing: 0.04em;
|
| 379 |
+
color: var(--muted);
|
| 380 |
+
background: var(--bg);
|
| 381 |
+
}
|
| 382 |
+
|
| 383 |
+
.data-table tr:last-child td {
|
| 384 |
+
border-bottom: 0;
|
| 385 |
+
}
|
| 386 |
+
|
| 387 |
+
.data-table .num {
|
| 388 |
+
text-align: right;
|
| 389 |
+
font-variant-numeric: tabular-nums;
|
| 390 |
+
}
|
| 391 |
+
|
| 392 |
+
.foot {
|
| 393 |
+
display: flex;
|
| 394 |
+
flex-wrap: wrap;
|
| 395 |
+
align-items: center;
|
| 396 |
+
justify-content: space-between;
|
| 397 |
+
gap: 0.75rem;
|
| 398 |
+
margin-top: 2rem;
|
| 399 |
+
padding-top: 1rem;
|
| 400 |
+
border-top: 1px solid var(--line);
|
| 401 |
+
color: var(--muted);
|
| 402 |
+
font-size: 0.88rem;
|
| 403 |
+
}
|
| 404 |
+
|
| 405 |
.foot-brand {
|
| 406 |
+
display: inline-flex;
|
| 407 |
+
align-items: center;
|
| 408 |
+
gap: 0.5rem;
|
| 409 |
+
text-decoration: none;
|
| 410 |
+
color: inherit;
|
| 411 |
+
font-weight: 600;
|
| 412 |
+
}
|
| 413 |
+
|
| 414 |
.foot a {
|
| 415 |
color: var(--accent-mid);
|
| 416 |
}
|
| 417 |
|
| 418 |
+
.explorer-panel {
|
| 419 |
+
flex: 1;
|
| 420 |
+
min-height: 0;
|
| 421 |
+
display: flex;
|
| 422 |
+
}
|
| 423 |
+
|
| 424 |
+
.explorer-panel.active {
|
| 425 |
+
display: flex;
|
| 426 |
+
flex: 1;
|
| 427 |
+
min-height: 0;
|
| 428 |
+
}
|
| 429 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 430 |
.explorer {
|
| 431 |
display: grid;
|
| 432 |
+
grid-template-columns: minmax(240px, 300px) 1fr;
|
| 433 |
width: 100%;
|
| 434 |
min-height: 0;
|
| 435 |
flex: 1;
|
| 436 |
height: 100%;
|
|
|
|
| 437 |
}
|
| 438 |
|
| 439 |
.sidebar {
|
| 440 |
+
background: var(--paper);
|
| 441 |
border-right: 1px solid var(--line);
|
| 442 |
display: flex;
|
| 443 |
flex-direction: column;
|
|
|
|
| 445 |
}
|
| 446 |
|
| 447 |
.sidebar-head {
|
| 448 |
+
padding: 0.7rem 0.85rem 0.5rem;
|
| 449 |
+
border-bottom: 1px solid var(--line);
|
| 450 |
}
|
| 451 |
+
|
| 452 |
.sidebar-head h2 {
|
| 453 |
+
margin: 0;
|
| 454 |
font-family: var(--display);
|
| 455 |
+
font-size: 1rem;
|
|
|
|
|
|
|
| 456 |
}
|
| 457 |
+
|
| 458 |
+
.progress {
|
| 459 |
+
margin: 0.2rem 0 0;
|
| 460 |
color: var(--muted);
|
| 461 |
+
font-size: 0.75rem;
|
|
|
|
| 462 |
}
|
| 463 |
|
| 464 |
.filters {
|
| 465 |
+
padding: 0.55rem 0.85rem;
|
| 466 |
display: grid;
|
| 467 |
+
gap: 0.45rem;
|
| 468 |
border-bottom: 1px solid var(--line);
|
| 469 |
}
|
| 470 |
+
|
| 471 |
+
.filters label,
|
| 472 |
+
.filter-group-label {
|
| 473 |
+
display: grid;
|
| 474 |
+
gap: 0.15rem;
|
| 475 |
+
font-size: 0.68rem;
|
| 476 |
+
color: var(--muted);
|
| 477 |
+
text-transform: uppercase;
|
| 478 |
+
letter-spacing: 0.04em;
|
| 479 |
+
}
|
| 480 |
+
|
| 481 |
.filters input {
|
| 482 |
+
font: inherit;
|
| 483 |
+
color: var(--ink);
|
| 484 |
+
border: 1px solid var(--line);
|
| 485 |
+
border-radius: 6px;
|
| 486 |
+
padding: 0.35rem 0.45rem;
|
| 487 |
background: #fff;
|
|
|
|
| 488 |
}
|
| 489 |
+
|
| 490 |
+
.filter-chips {
|
| 491 |
+
display: flex;
|
| 492 |
+
flex-wrap: wrap;
|
| 493 |
+
gap: 0.22rem;
|
| 494 |
}
|
| 495 |
+
|
| 496 |
.filter-chips button {
|
| 497 |
+
font: inherit;
|
| 498 |
+
font-size: 0.7rem;
|
| 499 |
+
color: var(--ink);
|
| 500 |
+
background: #fff;
|
| 501 |
+
border: 1px solid var(--line);
|
| 502 |
+
border-radius: 999px;
|
| 503 |
+
padding: 0.15rem 0.42rem;
|
| 504 |
+
cursor: pointer;
|
| 505 |
+
}
|
| 506 |
+
|
| 507 |
.filter-chips button.is-on {
|
| 508 |
+
background: var(--accent-soft);
|
| 509 |
+
border-color: var(--accent);
|
| 510 |
+
color: var(--accent-deep);
|
| 511 |
+
font-weight: 600;
|
| 512 |
+
}
|
| 513 |
+
|
| 514 |
+
.filter-chips .chip-count {
|
| 515 |
+
color: var(--muted);
|
| 516 |
font-weight: 400;
|
| 517 |
}
|
| 518 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 519 |
.queue {
|
| 520 |
+
list-style: none;
|
| 521 |
+
margin: 0;
|
| 522 |
+
padding: 0.2rem 0;
|
| 523 |
+
overflow: auto;
|
| 524 |
+
flex: 1;
|
| 525 |
+
}
|
| 526 |
+
|
| 527 |
.queue li button {
|
| 528 |
+
width: 100%;
|
| 529 |
+
text-align: left;
|
| 530 |
+
border: 0;
|
| 531 |
+
background: transparent;
|
| 532 |
+
padding: 0.42rem 0.85rem;
|
| 533 |
+
cursor: pointer;
|
| 534 |
border-left: 3px solid transparent;
|
| 535 |
+
font: inherit;
|
| 536 |
+
color: inherit;
|
| 537 |
+
}
|
| 538 |
+
|
|
|
|
| 539 |
.queue li button:hover {
|
| 540 |
+
background: var(--bg);
|
| 541 |
}
|
| 542 |
|
| 543 |
.queue li button.active {
|
| 544 |
+
background: var(--accent-soft);
|
| 545 |
+
border-left-color: var(--accent);
|
| 546 |
}
|
| 547 |
+
|
| 548 |
+
.queue .qid {
|
| 549 |
+
display: block;
|
| 550 |
+
font-family: var(--mono);
|
| 551 |
+
font-size: 0.7rem;
|
| 552 |
+
color: var(--muted);
|
| 553 |
+
}
|
| 554 |
+
|
| 555 |
+
.queue .qtext {
|
| 556 |
+
display: -webkit-box;
|
| 557 |
+
-webkit-line-clamp: 2;
|
| 558 |
+
-webkit-box-orient: vertical;
|
| 559 |
+
overflow: hidden;
|
| 560 |
+
font-size: 0.8rem;
|
| 561 |
+
margin-top: 0.08rem;
|
| 562 |
+
line-height: 1.3;
|
| 563 |
+
}
|
| 564 |
+
|
| 565 |
+
.queue .qmeta {
|
| 566 |
+
margin-top: 0.18rem;
|
| 567 |
+
}
|
| 568 |
+
|
|
|
|
| 569 |
.pill {
|
| 570 |
+
display: inline-block;
|
| 571 |
+
font-size: 0.64rem;
|
| 572 |
+
padding: 0.08rem 0.36rem;
|
| 573 |
+
border-radius: 999px;
|
| 574 |
+
background: #e8eee9;
|
| 575 |
+
color: var(--muted);
|
| 576 |
+
text-transform: uppercase;
|
| 577 |
+
letter-spacing: 0.03em;
|
| 578 |
+
}
|
| 579 |
+
|
| 580 |
+
.pill.BFSI-JUR {
|
| 581 |
+
background: #dce8e1;
|
| 582 |
+
color: var(--jur);
|
| 583 |
+
}
|
| 584 |
+
.pill.BFSI-NUM {
|
| 585 |
+
background: #e2e6f2;
|
| 586 |
+
color: var(--num);
|
| 587 |
+
}
|
| 588 |
+
.pill.BFSI-TMP {
|
| 589 |
+
background: #f6e6d4;
|
| 590 |
+
color: var(--tmp);
|
| 591 |
+
}
|
| 592 |
+
.pill.BFSI-ADV {
|
| 593 |
+
background: #f3ddd6;
|
| 594 |
+
color: var(--adv);
|
| 595 |
+
}
|
| 596 |
+
.pill.BFSI-GRD {
|
| 597 |
+
background: #e4e6f4;
|
| 598 |
+
color: var(--grd);
|
| 599 |
+
}
|
| 600 |
+
|
| 601 |
.detail-pane {
|
| 602 |
overflow: auto;
|
| 603 |
+
padding: 0.75rem 1rem 1.4rem;
|
| 604 |
min-width: 0;
|
| 605 |
+
}
|
| 606 |
+
|
| 607 |
+
.empty {
|
| 608 |
+
color: var(--muted);
|
| 609 |
+
margin-top: 2rem;
|
| 610 |
+
}
|
| 611 |
+
|
| 612 |
+
.empty.error {
|
| 613 |
+
color: var(--adv);
|
| 614 |
+
}
|
| 615 |
+
|
|
|
|
|
|
|
| 616 |
.detail-head {
|
| 617 |
+
display: flex;
|
| 618 |
+
flex-wrap: wrap;
|
| 619 |
+
align-items: center;
|
| 620 |
+
justify-content: space-between;
|
| 621 |
+
gap: 0.5rem;
|
| 622 |
+
margin-bottom: 0.65rem;
|
| 623 |
+
}
|
| 624 |
+
|
| 625 |
+
.detail-head .meta {
|
| 626 |
+
display: flex;
|
| 627 |
+
flex-wrap: wrap;
|
| 628 |
+
gap: 0.35rem;
|
| 629 |
+
align-items: center;
|
| 630 |
+
}
|
| 631 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 632 |
.detail-head .id {
|
| 633 |
+
font-family: var(--mono);
|
| 634 |
+
font-weight: 600;
|
| 635 |
+
}
|
| 636 |
+
|
| 637 |
+
.nav-btns {
|
| 638 |
+
display: flex;
|
| 639 |
+
gap: 0.4rem;
|
| 640 |
+
flex-wrap: wrap;
|
| 641 |
+
}
|
| 642 |
+
|
| 643 |
.nav-btns button,
|
| 644 |
.drawer-open,
|
| 645 |
.drawer-close {
|
| 646 |
+
font: inherit;
|
| 647 |
+
border: 1px solid var(--line);
|
| 648 |
+
background: #fff;
|
| 649 |
+
border-radius: 6px;
|
| 650 |
+
padding: 0.25rem 0.55rem;
|
| 651 |
cursor: pointer;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 652 |
}
|
| 653 |
|
| 654 |
+
.nav-btns button:hover {
|
| 655 |
+
border-color: var(--accent);
|
|
|
|
|
|
|
| 656 |
}
|
| 657 |
|
| 658 |
+
.grid {
|
| 659 |
+
display: grid;
|
| 660 |
+
grid-template-columns: 1fr 1fr;
|
| 661 |
+
gap: 0.65rem;
|
| 662 |
+
max-width: 56rem;
|
| 663 |
+
}
|
| 664 |
|
| 665 |
+
.card {
|
| 666 |
+
background: var(--paper);
|
| 667 |
+
border: 1px solid var(--line);
|
| 668 |
+
border-radius: 10px;
|
| 669 |
+
padding: 0.75rem 0.9rem;
|
|
|
|
|
|
|
| 670 |
}
|
| 671 |
|
| 672 |
+
.card.span-2 {
|
| 673 |
+
grid-column: 1 / -1;
|
| 674 |
+
}
|
| 675 |
+
|
| 676 |
+
.card h2 {
|
| 677 |
+
margin: 0 0 0.4rem;
|
| 678 |
+
font-size: 0.7rem;
|
| 679 |
text-transform: uppercase;
|
| 680 |
+
letter-spacing: 0.05em;
|
| 681 |
color: var(--muted);
|
| 682 |
}
|
| 683 |
|
| 684 |
+
.card .body {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 685 |
margin: 0;
|
| 686 |
white-space: pre-wrap;
|
| 687 |
+
line-height: 1.5;
|
| 688 |
+
font-size: 0.95rem;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 689 |
}
|
| 690 |
|
| 691 |
+
.sources,
|
| 692 |
+
.nuggets,
|
| 693 |
+
.evidence {
|
| 694 |
+
list-style: none;
|
| 695 |
+
margin: 0;
|
| 696 |
+
padding: 0;
|
| 697 |
+
display: grid;
|
| 698 |
+
gap: 0.5rem;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 699 |
}
|
| 700 |
|
| 701 |
.sources li,
|
| 702 |
.nugget,
|
| 703 |
.ev-item {
|
| 704 |
+
padding: 0.55rem 0.65rem;
|
| 705 |
+
background: var(--bg);
|
| 706 |
+
border-radius: 8px;
|
| 707 |
+
border: 1px solid var(--line);
|
|
|
|
| 708 |
}
|
| 709 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 710 |
.sources a,
|
| 711 |
.ev-meta a {
|
| 712 |
color: var(--accent-mid);
|
| 713 |
+
word-break: break-all;
|
| 714 |
+
font-size: 0.85rem;
|
| 715 |
+
}
|
| 716 |
+
|
| 717 |
+
.sources .note {
|
| 718 |
+
display: block;
|
| 719 |
+
margin-top: 0.15rem;
|
| 720 |
font-size: 0.88rem;
|
| 721 |
+
}
|
| 722 |
+
|
| 723 |
+
.sources .date {
|
| 724 |
+
display: block;
|
| 725 |
+
margin-top: 0.2rem;
|
| 726 |
+
font-family: var(--mono);
|
| 727 |
+
font-size: 0.72rem;
|
| 728 |
+
color: var(--muted);
|
| 729 |
+
}
|
| 730 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 731 |
.nugget-head {
|
| 732 |
+
display: flex;
|
| 733 |
+
flex-wrap: wrap;
|
| 734 |
+
gap: 0.3rem;
|
| 735 |
+
align-items: center;
|
| 736 |
+
margin-bottom: 0.3rem;
|
| 737 |
+
}
|
| 738 |
+
|
| 739 |
+
.nugget-id {
|
| 740 |
+
font-family: var(--mono);
|
| 741 |
+
font-size: 0.75rem;
|
| 742 |
+
color: var(--muted);
|
| 743 |
+
}
|
| 744 |
+
|
| 745 |
.vital {
|
| 746 |
+
font-size: 0.64rem;
|
| 747 |
+
font-weight: 700;
|
| 748 |
+
letter-spacing: 0.04em;
|
| 749 |
+
text-transform: uppercase;
|
| 750 |
+
background: var(--accent-soft);
|
| 751 |
+
color: var(--accent-deep);
|
| 752 |
+
padding: 0.05rem 0.35rem;
|
| 753 |
+
border-radius: 999px;
|
| 754 |
+
}
|
| 755 |
+
|
| 756 |
.nugget-text {
|
| 757 |
+
margin: 0;
|
| 758 |
+
font-size: 0.9rem;
|
| 759 |
+
line-height: 1.45;
|
| 760 |
+
}
|
| 761 |
+
|
| 762 |
+
.nugget-quote {
|
| 763 |
+
margin: 0.4rem 0 0;
|
| 764 |
+
font-size: 0.82rem;
|
| 765 |
+
color: var(--muted);
|
| 766 |
+
border-left: 3px solid var(--accent);
|
| 767 |
+
padding-left: 0.5rem;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 768 |
white-space: pre-wrap;
|
| 769 |
}
|
| 770 |
+
|
| 771 |
+
.ev-title {
|
| 772 |
+
font-size: 0.82rem;
|
| 773 |
+
font-weight: 600;
|
| 774 |
+
margin-bottom: 0.3rem;
|
| 775 |
+
word-break: break-all;
|
| 776 |
+
font-family: var(--mono);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 777 |
}
|
| 778 |
|
| 779 |
+
.ev-title a {
|
| 780 |
+
color: var(--accent-mid);
|
|
|
|
|
|
|
|
|
|
| 781 |
}
|
| 782 |
|
| 783 |
+
.ev-quote {
|
| 784 |
+
font-size: 0.9rem;
|
| 785 |
+
line-height: 1.45;
|
| 786 |
+
border-left: 3px solid var(--accent);
|
| 787 |
+
padding-left: 0.55rem;
|
| 788 |
+
white-space: pre-wrap;
|
| 789 |
}
|
| 790 |
|
| 791 |
+
.ev-ctx-wrap {
|
| 792 |
+
margin-top: 0.4rem;
|
| 793 |
+
font-size: 0.82rem;
|
| 794 |
+
color: var(--muted);
|
| 795 |
}
|
| 796 |
|
| 797 |
+
.ev-ctx-wrap summary {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 798 |
cursor: pointer;
|
| 799 |
+
font-weight: 600;
|
| 800 |
}
|
| 801 |
|
| 802 |
+
.ev-ctx {
|
| 803 |
+
margin-top: 0.3rem;
|
| 804 |
+
white-space: pre-wrap;
|
| 805 |
+
}
|
| 806 |
|
| 807 |
+
.ev-meta {
|
| 808 |
+
margin-top: 0.35rem;
|
| 809 |
+
font-size: 0.75rem;
|
| 810 |
+
color: var(--muted);
|
| 811 |
}
|
| 812 |
+
|
| 813 |
.drawer-open,
|
| 814 |
.drawer-close {
|
| 815 |
display: none;
|
| 816 |
}
|
| 817 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 818 |
@media (max-width: 900px) {
|
| 819 |
+
.cat-grid,
|
| 820 |
+
.grid {
|
| 821 |
+
grid-template-columns: 1fr;
|
| 822 |
+
}
|
| 823 |
+
|
| 824 |
+
.card.span-2 {
|
| 825 |
+
grid-column: 1;
|
| 826 |
+
}
|
| 827 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
| 828 |
.explorer {
|
| 829 |
grid-template-columns: 1fr;
|
| 830 |
}
|
| 831 |
|
| 832 |
+
.sidebar {
|
| 833 |
+
position: fixed;
|
| 834 |
+
inset: 0 auto 0 0;
|
| 835 |
+
width: min(88vw, 320px);
|
| 836 |
+
z-index: 30;
|
| 837 |
+
transform: translateX(-105%);
|
| 838 |
+
transition: transform 0.2s ease;
|
| 839 |
+
box-shadow: 8px 0 24px rgba(19, 38, 27, 0.12);
|
| 840 |
+
}
|
| 841 |
+
|
| 842 |
+
body.drawer-open .sidebar {
|
| 843 |
+
transform: none;
|
| 844 |
+
}
|
| 845 |
+
|
| 846 |
+
.drawer-open,
|
| 847 |
+
.drawer-close {
|
| 848 |
+
display: inline-flex;
|
| 849 |
+
}
|
| 850 |
+
|
| 851 |
+
.drawer-close {
|
| 852 |
+
margin-top: 0.45rem;
|
| 853 |
+
}
|
| 854 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 855 |
|
| 856 |
+
@media (max-width: 640px) {
|
| 857 |
.top-links {
|
| 858 |
+
display: none;
|
| 859 |
+
}
|
| 860 |
+
}
|