hex-audit 0.5.2 → 0.5.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dashboard/.next/BUILD_ID +1 -1
- package/dashboard/.next/app-build-manifest.json +22 -13
- package/dashboard/.next/app-path-routes-manifest.json +1 -1
- package/dashboard/.next/build-manifest.json +4 -4
- package/dashboard/.next/next-minimal-server.js.nft.json +1 -1
- package/dashboard/.next/next-server.js.nft.json +1 -1
- package/dashboard/.next/prerender-manifest.js +1 -1
- package/dashboard/.next/prerender-manifest.json +1 -1
- package/dashboard/.next/routes-manifest.json +1 -1
- package/dashboard/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/server/app/_not-found.html +1 -1
- package/dashboard/.next/server/app/_not-found.rsc +4 -4
- package/dashboard/.next/server/app/access/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/server/app/api/notes/record/route.js +9 -0
- package/dashboard/.next/server/app/api/notes/record/route.js.nft.json +1 -0
- package/dashboard/.next/server/app/api/notes/route.js +3 -0
- package/dashboard/.next/server/app/api/notes/route.js.nft.json +1 -0
- package/dashboard/.next/server/app/api/progress/route.js +1 -1
- package/dashboard/.next/server/app/calls/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/server/app/conformance/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/server/app/diagram/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/server/app/diagram.html +1 -1
- package/dashboard/.next/server/app/diagram.rsc +4 -4
- package/dashboard/.next/server/app/flows/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/server/app/flows.html +1 -1
- package/dashboard/.next/server/app/flows.rsc +4 -4
- package/dashboard/.next/server/app/functions/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/server/app/issues/page.js +28 -5
- package/dashboard/.next/server/app/issues/page.js.nft.json +1 -1
- package/dashboard/.next/server/app/issues/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/server/app/notes/page.js +22 -0
- package/dashboard/.next/server/app/notes/page.js.nft.json +1 -0
- package/dashboard/.next/server/app/notes/page_client-reference-manifest.js +1 -0
- package/dashboard/.next/server/app/overleaf/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/server/app/page.js +2 -2
- package/dashboard/.next/server/app/page.js.nft.json +1 -1
- package/dashboard/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/server/app/progress/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/server/app/stats/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/server/app-paths-manifest.json +5 -2
- package/dashboard/.next/server/chunks/494.js +1 -0
- package/dashboard/.next/server/chunks/530.js +1 -1
- package/dashboard/.next/server/functions-config-manifest.json +1 -1
- package/dashboard/.next/server/middleware-build-manifest.js +1 -1
- package/dashboard/.next/server/pages/404.html +1 -1
- package/dashboard/.next/server/pages/500.html +1 -1
- package/dashboard/.next/server/server-reference-manifest.js +1 -1
- package/dashboard/.next/server/server-reference-manifest.json +1 -1
- package/dashboard/.next/static/chunks/app/issues/page-abb062e4cf118340.js +1 -0
- package/dashboard/.next/static/chunks/app/{layout-23765c356f43208c.js → layout-a95b696089e278c3.js} +1 -1
- package/dashboard/.next/static/chunks/app/notes/page-bc458d3e1639c526.js +1 -0
- package/dashboard/.next/static/chunks/app/{page-a0f25953d4457935.js → page-1226422e170d8895.js} +1 -1
- package/dashboard/.next/static/chunks/{main-8f1e837090aef5cf.js → main-a6cc6e599cefa893.js} +1 -1
- package/dashboard/.next/static/css/23b3f575e87bea75.css +3 -0
- package/dashboard/app/api/notes/record/route.ts +52 -0
- package/dashboard/app/api/notes/route.ts +25 -0
- package/dashboard/app/issues/IssuesBoardClient.tsx +68 -22
- package/dashboard/app/layout.tsx +2 -2
- package/dashboard/app/notes/NotesClient.tsx +284 -0
- package/dashboard/app/notes/page.tsx +44 -0
- package/dashboard/components/DashboardLayout.tsx +25 -2
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/skills/diane.md +82 -35
- package/package.json +1 -1
- package/dashboard/.next/static/chunks/app/issues/page-6bfbf80884d3c9d8.js +0 -1
- package/dashboard/.next/static/css/9c84313d0484b74f.css +0 -3
- /package/dashboard/.next/static/{QeyYu_4EslVR8FTiyQpNs → JIjye0HUTWALF3gbtaZF8}/_buildManifest.js +0 -0
- /package/dashboard/.next/static/{QeyYu_4EslVR8FTiyQpNs → JIjye0HUTWALF3gbtaZF8}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { getOutputDirPath, readJsonFile } from '@/lib/data';
|
|
2
|
+
import { readNotesIndex, readNote } from '../../../src/core/notes';
|
|
3
|
+
import { NotesClient } from './NotesClient';
|
|
4
|
+
|
|
5
|
+
// Read .hex/notes at request time (see app/stats/page.tsx for the rationale).
|
|
6
|
+
export const dynamic = 'force-dynamic';
|
|
7
|
+
|
|
8
|
+
interface PerContract {
|
|
9
|
+
contract: string;
|
|
10
|
+
type: string;
|
|
11
|
+
file: string;
|
|
12
|
+
}
|
|
13
|
+
interface Stats {
|
|
14
|
+
per_contract?: PerContract[];
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export default function NotesPage() {
|
|
18
|
+
const dir = getOutputDirPath();
|
|
19
|
+
const index = readNotesIndex(dir);
|
|
20
|
+
const general = readNote(dir, 'general');
|
|
21
|
+
const contractNotes = index.contracts.map((name) => ({ name, body: readNote(dir, name) }));
|
|
22
|
+
|
|
23
|
+
// Dropdown options: contracts in scope (from stats) ∪ contracts that already
|
|
24
|
+
// have notes, so the auditor can record against any contract immediately.
|
|
25
|
+
const stats = readJsonFile<Stats>('stats.json');
|
|
26
|
+
const scope = (stats?.per_contract ?? [])
|
|
27
|
+
.filter((c) => c.type === 'contract')
|
|
28
|
+
.map((c) => c.contract);
|
|
29
|
+
const options = Array.from(new Set([...scope, ...index.contracts])).sort();
|
|
30
|
+
const unprocessed = index.sessions.filter((s) => !s.processed).length;
|
|
31
|
+
|
|
32
|
+
return (
|
|
33
|
+
<div>
|
|
34
|
+
<h2 className="mb-sp-5 text-title font-semibold text-text-primary">Notes</h2>
|
|
35
|
+
<NotesClient
|
|
36
|
+
general={general}
|
|
37
|
+
contractNotes={contractNotes}
|
|
38
|
+
contractOptions={options}
|
|
39
|
+
activeContract={index.active_contract}
|
|
40
|
+
unprocessedCount={unprocessed}
|
|
41
|
+
/>
|
|
42
|
+
</div>
|
|
43
|
+
);
|
|
44
|
+
}
|
|
@@ -242,6 +242,24 @@ function IconFindings(p: React.SVGProps<SVGSVGElement>) {
|
|
|
242
242
|
</svg>
|
|
243
243
|
);
|
|
244
244
|
}
|
|
245
|
+
function IconNotes(p: React.SVGProps<SVGSVGElement>) {
|
|
246
|
+
return (
|
|
247
|
+
<svg
|
|
248
|
+
{...p}
|
|
249
|
+
aria-hidden="true"
|
|
250
|
+
viewBox="0 0 24 24"
|
|
251
|
+
fill="none"
|
|
252
|
+
stroke="currentColor"
|
|
253
|
+
strokeWidth={1.5}
|
|
254
|
+
>
|
|
255
|
+
<path
|
|
256
|
+
strokeLinecap="round"
|
|
257
|
+
strokeLinejoin="round"
|
|
258
|
+
d="M16.862 4.487l1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L10.582 16.07a4.5 4.5 0 0 1-1.897 1.13L6 18l.8-2.685a4.5 4.5 0 0 1 1.13-1.897l8.932-8.931Zm0 0L19.5 7.125M18 14v4.75A2.25 2.25 0 0 1 15.75 21H5.25A2.25 2.25 0 0 1 3 18.75V8.25A2.25 2.25 0 0 1 5.25 6H10"
|
|
259
|
+
/>
|
|
260
|
+
</svg>
|
|
261
|
+
);
|
|
262
|
+
}
|
|
245
263
|
function IconMenu(p: React.SVGProps<SVGSVGElement>) {
|
|
246
264
|
return (
|
|
247
265
|
<svg
|
|
@@ -317,7 +335,10 @@ const NAV_GROUPS = [
|
|
|
317
335
|
},
|
|
318
336
|
{
|
|
319
337
|
label: 'Reasoning',
|
|
320
|
-
items: [
|
|
338
|
+
items: [
|
|
339
|
+
{ href: '/conformance', label: 'Spec Conformance', icon: IconSpec },
|
|
340
|
+
{ href: '/notes', label: 'Notes', icon: IconNotes },
|
|
341
|
+
],
|
|
321
342
|
},
|
|
322
343
|
{
|
|
323
344
|
label: 'Visual',
|
|
@@ -455,7 +476,9 @@ export function DashboardLayout({
|
|
|
455
476
|
|
|
456
477
|
{/* Main content */}
|
|
457
478
|
<main className="min-h-screen bg-surface-0 p-6 pt-16 md:ml-[220px] md:pt-6">
|
|
458
|
-
<div className=
|
|
479
|
+
<div className={`mx-auto ${pathname === '/issues' ? 'max-w-none' : 'max-w-6xl'}`}>
|
|
480
|
+
{children}
|
|
481
|
+
</div>
|
|
459
482
|
</main>
|
|
460
483
|
</div>
|
|
461
484
|
);
|
package/dist/index.js
CHANGED
|
@@ -19,6 +19,7 @@ import { doctorCommand } from './commands/doctor.js';
|
|
|
19
19
|
import { aiStatusCommand } from './commands/ai-status.js';
|
|
20
20
|
import { updateCommand } from './commands/update.js';
|
|
21
21
|
import { issueCommand } from './commands/issue.js';
|
|
22
|
+
import { noteCommand } from './commands/note.js';
|
|
22
23
|
// Single source of truth for the version: package.json (always shipped at the
|
|
23
24
|
// package root, one dir up from dist/index.js). Avoids drift between the npm
|
|
24
25
|
// version and what `hex --version` reports.
|
|
@@ -46,5 +47,6 @@ program.addCommand(doctorCommand);
|
|
|
46
47
|
program.addCommand(aiStatusCommand);
|
|
47
48
|
program.addCommand(updateCommand);
|
|
48
49
|
program.addCommand(issueCommand);
|
|
50
|
+
program.addCommand(noteCommand);
|
|
49
51
|
program.parse();
|
|
50
52
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,8EAA8E;AAC9E,6EAA6E;AAC7E,4CAA4C;AAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAC3C,CAAC;AAEzB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,KAAK,CAAC;KACX,WAAW,CAAC,kDAAkD,CAAC;KAC/D,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAExB,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;AACvC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;AACxC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;AACrC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAEhC,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
package/dist/skills/diane.md
CHANGED
|
@@ -1,14 +1,22 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: "Diane — your audit recorder. Ingest
|
|
2
|
+
description: "Diane — your audit recorder. Ingest voice narration into a living per-contract profile (Description / Questions / Leads), route spoken triggers, and answer questions from the codebase."
|
|
3
3
|
---
|
|
4
4
|
|
|
5
5
|
# Skill: Diane
|
|
6
6
|
|
|
7
7
|
**Recommended model:** Sonnet
|
|
8
8
|
|
|
9
|
-
You are **Diane**, the auditor's
|
|
9
|
+
You are **Diane**, the auditor's **pair auditor** — the Twin Peaks framing: the auditor narrates their thought process aloud while reading a contract, and you are Diane, a sharp second set of eyes who organizes their reasoning into a living profile **and audits alongside them**. You don't just record — you read the code, check what they claim, and speak up. The auditor records narration from the dashboard **Notes** tab (Record button + contract dropdown); the recording is transcribed locally and lands as a *session*. This skill picks up that session and processes it.
|
|
10
10
|
|
|
11
|
-
Persona: attentive,
|
|
11
|
+
Persona: attentive, candid, direct. Be concise. Confirm briefly when the auditor is right; push back with `file:line` evidence when they're wrong or have missed something. Never flatter, never challenge without grounds, never narrate your own process at length. **Address the auditor directly and impersonally — never by name.**
|
|
12
|
+
|
|
13
|
+
**Note style — always schematic and concise:**
|
|
14
|
+
- Terse bullets, one idea each — not prose paragraphs.
|
|
15
|
+
- Focus on visual notes as much as on the text.
|
|
16
|
+
- When noting flows or complex processes, break them down into steps: 1..., 2..., 3...
|
|
17
|
+
- Cite `file:line` for anything code-specific.
|
|
18
|
+
- Include a fenced code snippet only when a line or two genuinely clarifies the point. Use sparingly — most notes need none.
|
|
19
|
+
- Answers and challenges follow the same rule: a tight bullet, `file:line`, no preamble.
|
|
12
20
|
|
|
13
21
|
## Step 1 — Pick up the latest narration
|
|
14
22
|
|
|
@@ -33,54 +41,93 @@ Read `text` and split it into discrete thoughts. For each, classify it as a **tr
|
|
|
33
41
|
|
|
34
42
|
When a unit is ambiguous, treat it as a note (the safe default — nothing is lost, and the auditor can re-narrate a real instruction).
|
|
35
43
|
|
|
36
|
-
## Step 3 —
|
|
44
|
+
## Step 3 — Verify & challenge (the pair-audit pass)
|
|
45
|
+
|
|
46
|
+
This is what makes you a pair auditor, not a stenographer. For **every checkable claim** in the narration — how a function behaves, a value, an invariant, "this is safe because…" — open the relevant source (Read / Grep over the project scope) and check it. Classify each:
|
|
47
|
+
|
|
48
|
+
- **Confirmed** → record it as fact in the profile; a brief ✓ is enough, don't clutter.
|
|
49
|
+
- **Wrong** → record the **correct** behavior in Description, flagged with a `⚠` callout naming the contradiction + `file:line` (e.g. `⚠ you said rounds down; rounds UP (Vault.sol:88)`).
|
|
50
|
+
- **Incomplete / missed** → add to **Leads** (e.g. an unchecked return, a missing bound or zero-check, an edge case the auditor walked past), noting they didn't mention it.
|
|
51
|
+
- **Interesting angle** you spot independently → **Leads**, phrased as a hypothesis to investigate.
|
|
52
|
+
|
|
53
|
+
Push back only with concrete, code-grounded evidence — never contrarian for its own sake. If a claim isn't checkable from the code, note it as an assumption rather than asserting it true or false.
|
|
37
54
|
|
|
38
|
-
|
|
55
|
+
## Step 4 — Route the triggers
|
|
39
56
|
|
|
40
|
-
|
|
57
|
+
All three edit the same living profile; Step 5 covers the merge mechanics (read the doc → edit → write it back).
|
|
58
|
+
|
|
59
|
+
**create a finding** → invoke the existing `/write-finding` skill, prefilled from the narration (the affected contract/function and the auditor's stated impact). Let that skill own duplicate-checking and the board write. After it returns, find the matching bullet in **Leads** and mark it resolved — strike it through and append the id, rather than deleting it (audit trail): `- ~~<lead>~~ → logged <H-NNN>`. If no lead existed for it, no-op.
|
|
60
|
+
|
|
61
|
+
**answer a question** → answer it yourself using codebase access (Read / Grep over the project scope), or search online for things you're unsure about. Be concrete, concise, and cite `file:line`. Record it in the **Questions** section as a single inline bullet:
|
|
41
62
|
|
|
42
63
|
```
|
|
43
|
-
**
|
|
44
|
-
**A:** <your answer, with file:line references>
|
|
64
|
+
- <question>? **Answer**: <concise answer, with file:line>
|
|
45
65
|
```
|
|
46
66
|
|
|
47
|
-
|
|
67
|
+
If it answers a question already open in that list, fill that bullet in place — don't add a duplicate. Never write a separate `**Q:**` / `**A:**` block.
|
|
48
68
|
|
|
49
|
-
|
|
69
|
+
**search online** → use WebSearch, read the most relevant result, and fold it into wherever it belongs — an answer in **Questions**, a point in **Description**, or a **Leads** bullet — with the source link. No standalone block.
|
|
50
70
|
|
|
51
|
-
|
|
71
|
+
## Step 5 — Update the contract profile
|
|
52
72
|
|
|
53
|
-
|
|
54
|
-
## <ts>
|
|
73
|
+
Notes for a contract live in **one growing profile**, not per-session blocks. Each run: read the current profile, merge the session's thought-units **and your Step 3 verification** into the right place, write the whole doc back. **Clean up** filler, repetition, and false starts — keep the reasoning, not the disfluency.
|
|
55
74
|
|
|
56
|
-
|
|
57
|
-
- …
|
|
75
|
+
The profile has three sections (create whatever's missing; add a subsection or entry only when there's something to say):
|
|
58
76
|
|
|
59
|
-
|
|
60
|
-
|
|
77
|
+
````markdown
|
|
78
|
+
# <Contract>.sol
|
|
61
79
|
|
|
62
|
-
|
|
63
|
-
- … (suspected issues not yet ready to be findings)
|
|
80
|
+
## Description
|
|
64
81
|
|
|
65
|
-
###
|
|
66
|
-
-
|
|
67
|
-
```
|
|
82
|
+
### Purpose
|
|
83
|
+
- <what it's for>
|
|
68
84
|
|
|
69
|
-
|
|
85
|
+
### Inheritance
|
|
86
|
+
- <base contracts / interfaces>
|
|
70
87
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
## <ts>
|
|
88
|
+
### Storage
|
|
89
|
+
- `name` (type) — role / notes
|
|
74
90
|
|
|
75
|
-
###
|
|
76
|
-
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
91
|
+
### Roles & Modifiers
|
|
92
|
+
- `onlyOwner` — gates X, Y
|
|
93
|
+
|
|
94
|
+
### Functions
|
|
95
|
+
#### deposit(assets, receiver) — external
|
|
96
|
+
- Purpose: pull assets, mint shares
|
|
97
|
+
- Access: anyone
|
|
98
|
+
- Effects: transferFrom → _mint → totalAssets +=
|
|
99
|
+
- Notes: pulls before state update
|
|
100
|
+
- Notes: ⚠ you said rounds down; rounds UP (Vault.sol:88)
|
|
101
|
+
|
|
102
|
+
## Questions
|
|
103
|
+
- <question>? **Answer**: <concise answer> (file:line)
|
|
104
|
+
- <question>? (open — no answer requested yet)
|
|
105
|
+
|
|
106
|
+
## Leads
|
|
107
|
+
- <lead> — why it might be an issue
|
|
108
|
+
- setFee has no upper bound (Vault.sol:120) — you didn't mention it
|
|
109
|
+
- ~~<promoted lead>~~ → logged H-007
|
|
110
|
+
````
|
|
111
|
+
|
|
112
|
+
- **Description** = how the contract works (verified truth), built top-to-bottom. Each function the auditor walks through gets a `#### name(args) — visibility` entry using the **Purpose / Access / Effects / Notes** template, inserted in **source order**. When your Step 3 check contradicts the auditor, the relevant `Notes:` line carries the `⚠ …(file:line)` callout.
|
|
113
|
+
- **Questions** = the running Q&A list (Step 4).
|
|
114
|
+
- **Leads** = things worth investigating that could become findings — including the misses and interesting angles you surfaced in Step 3 (Step 4 strikes them through when promoted).
|
|
115
|
+
|
|
116
|
+
Merge mechanics:
|
|
117
|
+
|
|
118
|
+
1. Read the current profile (empty on first run):
|
|
119
|
+
```bash
|
|
120
|
+
npx hex note read "<contract>" > /tmp/diane_<ts>.md
|
|
121
|
+
```
|
|
122
|
+
2. Edit `/tmp/diane_<ts>.md` **in place**: scaffold the skeleton if it was empty; otherwise refine existing entries and add new ones where they belong (fill a Storage row, flesh out a function's Effects, answer an open question, add a lead). Do **not** append a dated block, and do **not** duplicate something already captured — sharpen it instead.
|
|
123
|
+
3. Write the whole doc back:
|
|
124
|
+
```bash
|
|
125
|
+
npx hex note write "<contract>" --body-file /tmp/diane_<ts>.md
|
|
126
|
+
```
|
|
80
127
|
|
|
81
|
-
`<contract>` is the session's `contract` value verbatim (e.g. `Vault.sol`).
|
|
128
|
+
`<contract>` is the session's `contract` value verbatim (e.g. `Vault.sol`). Cross-cutting remarks go to `general`, which uses the same three sections but a free-form Description (no per-function list).
|
|
82
129
|
|
|
83
|
-
## Step
|
|
130
|
+
## Step 6 — Close the loop & deliver the verdict
|
|
84
131
|
|
|
85
132
|
Mark the session processed so it isn't ingested again:
|
|
86
133
|
|
|
@@ -88,9 +135,9 @@ Mark the session processed so it isn't ingested again:
|
|
|
88
135
|
npx hex note session mark-processed "<file>"
|
|
89
136
|
```
|
|
90
137
|
|
|
91
|
-
Then
|
|
138
|
+
Then deliver a candid **pair-audit verdict** — lead with the substance (corrections, misses, what holds up), then the housekeeping. Cite `file:line`. Don't manufacture pushback when the narration is sound — confirming is a valid verdict. Address the auditor directly, never by name. Example:
|
|
92
139
|
|
|
93
|
-
> "
|
|
140
|
+
> "Two corrections: previewWithdraw rounds **up**, not down (Vault.sol:88); and `setFee` has no upper bound (Vault.sol:120), which you didn't flag — added as a lead. Your reentrancy read on `deposit` checks out. Profile updated, session marked processed."
|
|
94
141
|
|
|
95
142
|
## Notes
|
|
96
143
|
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4521],{4260:function(e,t,a){Promise.resolve().then(a.bind(a,7063))},7063:function(e,t,a){"use strict";a.d(t,{IssuesBoardClient:function(){return x}});var n=a(7821),r=a(8078),i=a(3924);let s={Critical:"bg-[var(--critical)]/18 text-[var(--critical)]",High:"bg-[var(--high)]/18 text-[var(--high)]",Medium:"bg-[var(--medium)]/18 text-[var(--medium)]",Low:"bg-[var(--low)]/18 text-[var(--low)]",Info:"bg-[var(--info)]/18 text-[var(--info)]"};function o(e){var t;let{severity:a}=e,r=null!==(t=s[a])&&void 0!==t?t:s.Info;return(0,n.jsx)("span",{className:"inline-flex items-center rounded-md px-2 py-0.5 text-caption font-medium ".concat(r),children:a})}let l=[{id:"potential",label:"Potential",description:"Awaiting validation"},{id:"verified",label:"Verified",description:"Confirmed, ready to push"},{id:"synced",label:"Synced to GitHub",description:"On GitHub — edit there, not here"},{id:"invalid",label:"Invalid",description:"Rejected after review"},{id:"duplicate",label:"Duplicate",description:"Covered by another entry"}],c={Critical:0,High:1,Medium:2,Low:3,Info:4},d=["Critical","High","Medium","Low","Info"],u=["Fixed","Mitigated","Acknowledged","Not Fixed","Unresolved"];function x(e){var t;let{issues:a,formatCtx:s={}}=e,[o,d]=(0,r.useState)(a),[u,x]=(0,r.useState)(null),[f,b]=(0,r.useState)("all");(0,r.useEffect)(()=>{d(a)},[a]);let h=(0,i.Dy)((0,i.VT)(i.we,{activationConstraint:{distance:4}})),y=(0,r.useMemo)(()=>"all"===f?o:o.filter(e=>e.source===f),[o,f]),g=(0,r.useMemo)(()=>{let e={potential:[],verified:[],synced:[],invalid:[],duplicate:[]};for(let t of y)e[t.column].push(t);for(let t of Object.values(e))t.sort((e,t)=>{var a,n;return(null!==(a=c[e.severity])&&void 0!==a?a:5)-(null!==(n=c[t.severity])&&void 0!==n?n:5)||e.id.localeCompare(t.id)});return e},[y]),j=(0,r.useMemo)(()=>{let e={potential:0,verified:0,synced:0,invalid:0,duplicate:0};for(let t of o)e[t.column]++;return e},[o]),N=(0,r.useCallback)(async(e,t)=>{d(a=>a.map(a=>a.id===e?{...a,column:t,status:function(e){switch(e){case"potential":return"pending_validation";case"verified":return"verified";case"synced":return"synced";case"invalid":return"rejected";case"duplicate":return"duplicate"}}(t),duplicate_of:"duplicate"===t?a.duplicate_of:null}:a));try{let a=await fetch("/api/issues/".concat(encodeURIComponent(e),"/move"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({column:t})});if(!a.ok){var n;let e=await a.json().catch(()=>({}));throw Error(null!==(n=e.error)&&void 0!==n?n:"move failed")}}catch(t){console.error(t),d(t=>t.map(t=>{var n;return t.id===e&&null!==(n=a.find(t=>t.id===e))&&void 0!==n?n:t}))}},[a]),w=(0,r.useCallback)(async(e,t)=>{d(a=>a.map(a=>a.id===e?{...a,...t}:a));try{let n=await fetch("/api/issues/".concat(encodeURIComponent(e)),{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});if(!n.ok){var a;let e=await n.json().catch(()=>({}));throw Error(null!==(a=e.error)&&void 0!==a?a:"update failed")}}catch(e){console.error(e)}},[]),_=null!==(t=o.find(e=>e.id===u))&&void 0!==t?t:null;return(0,n.jsxs)("div",{children:[(0,n.jsxs)("header",{className:"mb-6 flex flex-wrap items-end justify-between gap-3",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("h1",{className:"text-title font-semibold text-text-primary",children:"Issues"}),(0,n.jsxs)("p",{className:"mt-1 text-body text-text-secondary",children:[o.length," total — ",j.potential," potential, ",j.verified," verified,"," ",j.synced," synced, ",j.invalid," invalid, ",j.duplicate," duplicate. Drag a card between columns; click to edit. Synced cards are read-only (edit on GitHub)."]})]}),(0,n.jsx)(m,{value:f,onChange:b})]}),(0,n.jsx)(i.LB,{sensors:h,onDragEnd:e=>{let{active:t,over:a}=e;if(!a)return;let n=a.id,r=t.id,i=o.find(e=>e.id===r);i&&i.column!==n&&"synced"!==n&&"synced"!==i.column&&N(r,n)},children:(0,n.jsx)("div",{className:"grid grid-cols-1 gap-3 md:grid-cols-2 xl:grid-cols-5",children:l.map(e=>(0,n.jsx)(p,{column:e,issues:g[e.id],onOpen:x},e.id))})}),_&&(0,n.jsx)(v,{issue:_,formatCtx:s,onClose:()=>x(null),onSave:e=>w(_.id,e)})]})}function m(e){let{value:t,onChange:a}=e;return(0,n.jsx)("div",{className:"flex flex-wrap gap-1.5",children:[{id:"all",label:"All sources"},{id:"manual",label:"Manual"},{id:"auditagent",label:"AuditAgent"},{id:"conformance",label:"Conformance"},{id:"github",label:"GitHub"}].map(e=>{let r=t===e.id;return(0,n.jsx)("button",{type:"button",onClick:()=>a(e.id),className:"rounded-md px-2.5 py-1 text-caption font-medium ".concat(r?"bg-accent text-surface-0":"bg-surface-2 text-text-secondary hover:text-text-primary"),children:e.label},e.id)})})}function p(e){let{column:t,issues:a,onOpen:r}=e,{isOver:s,setNodeRef:o}=(0,i.Zj)({id:t.id,disabled:"synced"===t.id});return(0,n.jsxs)("section",{ref:o,"aria-label":t.label,className:"flex flex-col gap-2 rounded-lg border bg-surface-1 p-3 transition-colors ".concat(s?"border-accent bg-surface-2":"border-border-subtle"),children:[(0,n.jsxs)("header",{className:"flex items-baseline justify-between",children:[(0,n.jsx)("h2",{className:"text-heading font-medium text-text-primary",children:t.label}),(0,n.jsx)("span",{className:"text-caption text-text-tertiary",children:a.length})]}),(0,n.jsx)("p",{className:"text-caption text-text-tertiary",children:t.description}),(0,n.jsxs)("div",{className:"mt-1 flex flex-col gap-2",children:[a.map(e=>(0,n.jsx)(f,{issue:e,onOpen:r},e.id)),0===a.length&&(0,n.jsx)("div",{className:"rounded-md border border-dashed border-border-subtle py-6 text-center text-caption text-text-tertiary",children:"Empty"})]})]})}function f(e){let{issue:t,onOpen:a}=e,r="synced"===t.column,{attributes:s,listeners:l,setNodeRef:c,isDragging:d,transform:u}=(0,i.O1)({id:t.id,disabled:r}),x=u?{transform:"translate3d(".concat(u.x,"px, ").concat(u.y,"px, 0)"),zIndex:30}:{};return(0,n.jsxs)("article",{ref:c,style:x,...r?{}:s,...r?{}:l,onClick:e=>{u||(e.stopPropagation(),a(t.id))},className:"group rounded-md border bg-surface-0 p-3 text-left ".concat(r?"cursor-pointer":"cursor-grab active:cursor-grabbing"," ").concat(d?"border-accent shadow-lg":"border-border-subtle hover:border-border-default"),children:[(0,n.jsxs)("div",{className:"flex items-start justify-between gap-2",children:[(0,n.jsx)("span",{className:"font-mono text-caption text-text-tertiary",children:t.id}),(0,n.jsx)(o,{severity:t.severity})]}),(0,n.jsx)("h3",{className:"mt-1 text-body font-medium text-text-primary line-clamp-2",children:t.title}),(0,n.jsxs)("div",{className:"mt-2 flex flex-wrap items-center gap-1.5 text-caption",children:[(0,n.jsx)(b,{source:t.source}),(0,n.jsx)(h,{issue:t}),t.duplicate_of&&(0,n.jsxs)("span",{className:"rounded-md bg-surface-2 px-1.5 py-0.5 text-text-secondary",children:["dup of ",t.duplicate_of]}),"passing"===t.poc_status&&(0,n.jsx)("span",{className:"rounded-md bg-[var(--low)]/15 px-1.5 py-0.5 text-[var(--low)]",children:"PoC ✓"}),"failing"===t.poc_status&&(0,n.jsx)("span",{className:"rounded-md bg-[var(--critical)]/15 px-1.5 py-0.5 text-[var(--critical)]",children:"PoC ✕"}),t.resolution&&(0,n.jsx)("span",{className:"rounded-md bg-surface-2 px-1.5 py-0.5 text-text-secondary",children:t.resolution})]}),t.match_signals&&(0,n.jsx)("div",{className:"mt-2 text-caption text-text-tertiary",children:(0,n.jsx)("span",{className:"font-mono",children:[t.match_signals.contract?"contract":null,t.match_signals.function?"function":null,"different"!==t.match_signals.root_cause?"rc:".concat(t.match_signals.root_cause):null,"different"!==t.match_signals.attack_vector?"av:".concat(t.match_signals.attack_vector):null].filter(Boolean).join(" \xb7 ")})})]})}function b(e){var t;let{source:a}=e;return(0,n.jsx)("span",{className:"rounded-md bg-surface-2 px-1.5 py-0.5 text-text-tertiary",children:null!==(t=({manual:"Manual",auditagent:"AuditAgent",conformance:"Conformance",github:"GitHub"})[a])&&void 0!==t?t:a})}function h(e){var t,a;let{issue:r}=e,i=null!==(t=r.sync_state)&&void 0!==t?t:"none";if("none"===i)return null;if("unsynced"===i)return(0,n.jsx)("span",{title:"Run /sync-issues to push verified findings to GitHub.",className:"rounded-md border border-dashed border-border-default px-1.5 py-0.5 text-text-tertiary",children:"GH unsynced"});if("conflict"===i)return(0,n.jsx)("span",{title:"Local and remote diverged. Re-run /sync-issues to reconcile.",className:"rounded-md bg-[var(--critical)]/15 px-1.5 py-0.5 text-[var(--critical)]",children:"GH conflict"});let s="synced_closed"===i,o="GH #".concat(null!==(a=r.github_issue_number)&&void 0!==a?a:"?"," ").concat(s?"closed":"open"),l=s?"bg-surface-2 text-text-tertiary":"bg-[var(--low)]/15 text-[var(--low)]";return r.github_issue_url?(0,n.jsx)("a",{href:r.github_issue_url,target:"_blank",rel:"noopener noreferrer",onClick:e=>e.stopPropagation(),className:"rounded-md px-1.5 py-0.5 hover:underline ".concat(l),children:o}):(0,n.jsx)("span",{className:"rounded-md px-1.5 py-0.5 ".concat(l),children:o})}function v(e){var t,a,i;let{issue:s,formatCtx:o,onClose:l,onSave:c}=e,[x,m]=(0,r.useState)(s.title),[p,f]=(0,r.useState)(s.severity),[v,g]=(0,r.useState)(s.description),[j,N]=(0,r.useState)(s.recommendation),[w,_]=(0,r.useState)(null!==(t=s.resolution)&&void 0!==t?t:""),[C,k]=(0,r.useState)(null!==(a=s.update_from_client)&&void 0!==a?a:""),[S,H]=(0,r.useState)(!1),[M,E]=(0,r.useState)(!1),G=(0,r.useRef)(null),I="synced"===s.status;(0,r.useEffect)(()=>{var e;null===(e=G.current)||void 0===e||e.focus()},[]);let O=async()=>{let e=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return"## [".concat(e.severity,"] ").concat(e.title,"\n\n").concat(function(e,t){var a;let n=new Set,r=e.code_locations.map(e=>e.file).filter(e=>e&&!n.has(e)&&n.add(e)).map(e=>(function(e,t){if(t.repositoryUrl&&t.commit){let a=t.repositoryUrl.replace(/\/+$/,"");return"[`".concat(e,"`](").concat(a,"/blob/").concat(t.commit,"/").concat(e,")")}return"[`".concat(e,"`]()")})(e,t)).join(", "),i=e.resolution||"Unresolved",s=null!==(a=e.update_from_client)&&void 0!==a?a:"";return["**File(s)**: ".concat(r),"","**Description**: ".concat(function(e){if(!e)return e;let t=!1,a="";return e.split("\n").map(e=>{let n=e.match(/^\s*(```+|~~~+)/);if(n)return t?n[1][0]===a&&(t=!1,a=""):(t=!0,a=n[1][0]),e;if(t)return e;let r=e.match(/^\s*#{1,6}\s+(.*\S)\s*$/);return r?"**".concat(r[1],"**"):/^\s*(-{3,}|\*{3,}|_{3,})\s*$/.test(e)?"":e}).join("\n")}(e.description)),"","**Recommendation(s)**: ".concat(e.recommendation),"","**Status**: ".concat(i),"","**Update from the client**: ".concat(s)].join("\n")}(e,t),"\n\n---\n")}({...s,title:x,severity:p,description:v,recommendation:j,resolution:w||void 0,update_from_client:C||void 0},o);try{await navigator.clipboard.writeText(e),E(!0),setTimeout(()=>E(!1),1500)}catch(e){}},R=async()=>{H(!0),await c({title:x,severity:p,description:v,recommendation:j,resolution:w||void 0,update_from_client:C||void 0}),H(!1),l()};return(0,n.jsx)("div",{ref:G,tabIndex:-1,className:"fixed inset-0 z-50 flex items-center justify-center p-4 outline-none",style:{background:"var(--overlay-bg)"},onClick:l,onKeyDown:e=>{"Escape"===e.key&&l()},children:(0,n.jsxs)("div",{role:"dialog","aria-modal":"true","aria-label":"Edit issue ".concat(s.id),className:"relative flex max-h-[90vh] w-full max-w-2xl flex-col overflow-hidden border border-border-emphasis bg-surface-1 shadow-2xl",style:{borderRadius:"var(--radius-md)",boxShadow:"var(--shadow-accent)"},onClick:e=>e.stopPropagation(),children:[(0,n.jsxs)("div",{className:"flex items-center justify-between border-b border-border-default bg-surface-2 px-4 py-3",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2 text-caption",children:[(0,n.jsx)("span",{className:"font-mono text-body text-text-tertiary",children:s.id}),(0,n.jsx)(b,{source:s.source}),(0,n.jsx)(h,{issue:s})]}),(0,n.jsx)("button",{type:"button",onClick:l,"aria-label":"Close",className:"rounded p-1 text-text-tertiary hover:bg-surface-3 hover:text-text-primary",children:(0,n.jsx)("svg",{className:"h-5 w-5","aria-hidden":"true",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:(0,n.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 18L18 6M6 6l12 12"})})})]}),(0,n.jsxs)("div",{className:"flex-1 overflow-y-auto p-4",children:[I&&(0,n.jsxs)("div",{className:"mb-4 rounded-md border border-border-default bg-surface-2 px-3 py-2 text-caption text-text-secondary",children:["This issue is synced to GitHub and is read-only here. Edit it on GitHub, then run"," ",(0,n.jsx)("span",{className:"font-mono",children:"/sync-issues"})," to pull the changes back."]}),(0,n.jsx)(y,{label:"Title",children:(0,n.jsx)("input",{type:"text",value:x,onChange:e=>m(e.target.value),disabled:I,className:"w-full rounded-md border border-border-default bg-surface-0 px-3 py-2 text-body text-text-primary focus:border-accent focus:outline-none disabled:opacity-60"})}),(0,n.jsxs)("div",{className:"mt-3 grid grid-cols-2 gap-3",children:[(0,n.jsx)(y,{label:"Severity",children:(0,n.jsx)("select",{value:p,onChange:e=>f(e.target.value),disabled:I,className:"w-full rounded-md border border-border-default bg-surface-0 px-3 py-2 text-body text-text-primary focus:border-accent focus:outline-none disabled:opacity-60",children:d.map(e=>(0,n.jsx)("option",{value:e,children:e},e))})}),(0,n.jsx)(y,{label:"Resolution (verified only)",children:(0,n.jsxs)("select",{value:w,onChange:e=>_(e.target.value),disabled:I,className:"w-full rounded-md border border-border-default bg-surface-0 px-3 py-2 text-body text-text-primary focus:border-accent focus:outline-none disabled:opacity-60",children:[(0,n.jsx)("option",{value:"",children:"— none —"}),u.map(e=>(0,n.jsx)("option",{value:e,children:e},e))]})})]}),(0,n.jsx)(y,{label:"Description",className:"mt-3",children:(0,n.jsx)("textarea",{value:v,onChange:e=>g(e.target.value),rows:8,disabled:I,className:"w-full rounded-md border border-border-default bg-surface-0 px-3 py-2 font-mono text-caption text-text-primary focus:border-accent focus:outline-none disabled:opacity-60"})}),(0,n.jsx)(y,{label:"Recommendation",className:"mt-3",children:(0,n.jsx)("textarea",{value:j,onChange:e=>N(e.target.value),rows:4,disabled:I,className:"w-full rounded-md border border-border-default bg-surface-0 px-3 py-2 font-mono text-caption text-text-primary focus:border-accent focus:outline-none disabled:opacity-60"})}),(0,n.jsx)(y,{label:"Update from the client",className:"mt-3",children:(0,n.jsx)("textarea",{value:C,onChange:e=>k(e.target.value),rows:4,disabled:I,placeholder:"How the client responded — used by /generate-overleaf.",className:"w-full rounded-md border border-border-default bg-surface-0 px-3 py-2 font-mono text-caption text-text-primary focus:border-accent focus:outline-none disabled:opacity-60"})}),s.code_locations.length>0&&(0,n.jsxs)("div",{className:"mt-4",children:[(0,n.jsx)("div",{className:"mb-1 text-caption font-medium text-text-tertiary",children:"Code locations"}),(0,n.jsx)("ul",{className:"space-y-1 font-mono text-caption text-text-secondary",children:s.code_locations.map((e,t)=>(0,n.jsx)("li",{children:e.file},"".concat(e.file,"-").concat(t)))})]}),s.match_signals&&(0,n.jsxs)("div",{className:"mt-4",children:[(0,n.jsx)("div",{className:"mb-1 text-caption font-medium text-text-tertiary",children:"Duplicate signals"}),(0,n.jsx)("p",{className:"text-caption text-text-secondary",children:null!==(i=s.reasoning)&&void 0!==i?i:"Matched against another entry."}),(0,n.jsxs)("div",{className:"mt-1 flex flex-wrap gap-1.5 font-mono text-caption text-text-tertiary",children:[(0,n.jsxs)("span",{children:["contract: ",s.match_signals.contract?"✓":"—"]}),(0,n.jsxs)("span",{children:["function: ",s.match_signals.function?"✓":"—"]}),(0,n.jsxs)("span",{children:["root_cause: ",s.match_signals.root_cause]}),(0,n.jsxs)("span",{children:["attack_vector: ",s.match_signals.attack_vector]})]})]})]}),(0,n.jsxs)("div",{className:"flex items-center justify-between gap-2 border-t border-border-default bg-surface-2 px-4 py-3",children:[(0,n.jsx)("button",{type:"button",onClick:O,className:"rounded-md border border-border-default px-3 py-1.5 text-body text-text-secondary hover:bg-surface-3 hover:text-text-primary",children:M?"Copied!":"Copy as HackMD"}),(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)("button",{type:"button",onClick:l,className:"rounded-md px-3 py-1.5 text-body text-text-secondary hover:text-text-primary",children:I?"Close":"Cancel"}),!I&&(0,n.jsx)("button",{type:"button",onClick:R,disabled:S,className:"rounded-md bg-accent px-3 py-1.5 text-body font-medium text-surface-0 hover:bg-accent-secondary disabled:opacity-50",children:S?"Saving…":"Save"})]})]})]})})}function y(e){let{label:t,className:a,children:r}=e;return(0,n.jsxs)("label",{className:"block ".concat(null!=a?a:""),children:[(0,n.jsx)("span",{className:"mb-1 block text-caption font-medium text-text-tertiary",children:t}),r]})}}},function(e){e.O(0,[3924,7115,3205,1744],function(){return e(e.s=4260)}),_N_E=e.O()}]);
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*
|
|
2
|
-
! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com
|
|
3
|
-
*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:var(--font-sans);font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:var(--font-mono);font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);text-decoration:underline;font-weight:500}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{font-weight:400;color:var(--tw-prose-counters)}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-style:italic;color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"\201C""\201D""\2018""\2019";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:900;color:inherit}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:800;color:inherit}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-top:2em;margin-bottom:2em}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-family:inherit;color:var(--tw-prose-kbd);box-shadow:0 0 0 1px var(--tw-prose-kbd-shadows),0 3px 0 var(--tw-prose-kbd-shadows);font-size:.875em;border-radius:.3125rem;padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;padding-inline-start:.375em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-weight:600;font-size:.875em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:"`"}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);overflow-x:auto;font-weight:400;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding-top:.8571429em;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-inline-start:1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:transparent;border-width:0;border-radius:0;padding:0;font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){width:100%;table-layout:auto;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;vertical-align:bottom;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body:#374151;--tw-prose-headings:#111827;--tw-prose-lead:#4b5563;--tw-prose-links:#111827;--tw-prose-bold:#111827;--tw-prose-counters:#6b7280;--tw-prose-bullets:#d1d5db;--tw-prose-hr:#e5e7eb;--tw-prose-quotes:#111827;--tw-prose-quote-borders:#e5e7eb;--tw-prose-captions:#6b7280;--tw-prose-kbd:#111827;--tw-prose-kbd-shadows:rgba(17,24,39,.1);--tw-prose-code:#111827;--tw-prose-pre-code:#e5e7eb;--tw-prose-pre-bg:#1f2937;--tw-prose-th-borders:#d1d5db;--tw-prose-td-borders:#e5e7eb;--tw-prose-invert-body:#d1d5db;--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:#9ca3af;--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:#9ca3af;--tw-prose-invert-bullets:#4b5563;--tw-prose-invert-hr:#374151;--tw-prose-invert-quotes:#f3f4f6;--tw-prose-invert-quote-borders:#374151;--tw-prose-invert-captions:#9ca3af;--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:hsla(0,0%,100%,.1);--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:#d1d5db;--tw-prose-invert-pre-bg:rgba(0,0,0,.5);--tw-prose-invert-th-borders:#4b5563;--tw-prose-invert-td-borders:#374151;font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.5714286em;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.visible{visibility:visible}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.bottom-3{bottom:.75rem}.bottom-full{bottom:100%}.left-0{left:0}.left-1\/2{left:50%}.left-3{left:.75rem}.right-3{right:.75rem}.top-0{top:0}.top-3{top:.75rem}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.z-\[60\]{z-index:60}.z-\[9000\]{z-index:9000}.mx-auto{margin-left:auto;margin-right:auto}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-sp-2{margin-bottom:var(--space-2)}.mb-sp-3{margin-bottom:var(--space-3)}.mb-sp-4{margin-bottom:var(--space-4)}.mb-sp-5{margin-bottom:var(--space-5)}.mb-sp-6{margin-bottom:var(--space-6)}.ml-1{margin-left:.25rem}.ml-1\.5{margin-left:.375rem}.ml-2{margin-left:.5rem}.ml-auto{margin-left:auto}.mr-4{margin-right:1rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.mt-sp-2{margin-top:var(--space-2)}.mt-sp-3{margin-top:var(--space-3)}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-12{height:3rem}.h-2\.5{height:.625rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-9{height:2.25rem}.h-\[600px\]{height:600px}.h-\[700px\]{height:700px}.h-full{height:100%}.h-screen{height:100vh}.max-h-72{max-height:18rem}.max-h-\[70vh\]{max-height:70vh}.max-h-\[80vh\]{max-height:80vh}.max-h-\[90vh\]{max-height:90vh}.min-h-9{min-height:2.25rem}.min-h-screen{min-height:100vh}.w-1\.5{width:.375rem}.w-10{width:2.5rem}.w-12{width:3rem}.w-2\.5{width:.625rem}.w-24{width:6rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-32{width:8rem}.w-4{width:1rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-8{width:2rem}.w-\[220px\]{width:220px}.w-full{width:100%}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-6xl{max-width:72rem}.max-w-\[200px\]{max-width:200px}.max-w-lg{max-width:32rem}.max-w-none{max-width:none}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.-translate-x-full{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-full{--tw-translate-x:-100%}.translate-x-0{--tw-translate-x:0px}.rotate-180,.translate-x-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate:180deg}.rotate-90{--tw-rotate:90deg}.rotate-90,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes spin{to{transform:rotate(1turn)}}.animate-spin{animation:spin 1s linear infinite}.cursor-grab{cursor:grab}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-sp-2{gap:var(--space-2)}.gap-sp-3{gap:var(--space-3)}.gap-sp-4{gap:var(--space-4)}.gap-x-3{-moz-column-gap:.75rem;column-gap:.75rem}.gap-y-1{row-gap:.25rem}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-border-subtle>:not([hidden])~:not([hidden]){border-color:var(--border-subtle)}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis}.truncate,.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-\[var\(--accent\)\],.border-accent{border-color:var(--accent)}.border-border-default{border-color:var(--border-default)}.border-border-emphasis{border-color:var(--border-emphasis)}.border-border-subtle{border-color:var(--border-subtle)}.bg-\[var\(--accent\)\]{background-color:var(--accent)}.bg-\[var\(--critical\)\]{background-color:var(--critical)}.bg-\[var\(--medium\)\]{background-color:var(--medium)}.bg-\[var\(--success\)\]{background-color:var(--success)}.bg-accent{background-color:var(--accent)}.bg-accent-subtle{background-color:var(--accent-subtle)}.bg-surface-0{background-color:var(--surface-0)}.bg-surface-1{background-color:var(--surface-1)}.bg-surface-2{background-color:var(--surface-2)}.bg-surface-3{background-color:var(--surface-3)}.bg-text-tertiary{background-color:var(--text-tertiary)}.bg-transparent{background-color:transparent}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-sp-4{padding:var(--space-4)}.p-sp-6{padding:var(--space-6)}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-sp-3{padding-left:var(--space-3);padding-right:var(--space-3)}.px-sp-4{padding-left:var(--space-4);padding-right:var(--space-4)}.px-sp-5{padding-left:var(--space-5);padding-right:var(--space-5)}.px-sp-6{padding-left:var(--space-6);padding-right:var(--space-6)}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-sp-2{padding-top:var(--space-2);padding-bottom:var(--space-2)}.py-sp-3{padding-top:var(--space-3);padding-bottom:var(--space-3)}.py-sp-4{padding-top:var(--space-4);padding-bottom:var(--space-4)}.py-sp-6{padding-top:var(--space-6);padding-bottom:var(--space-6)}.py-sp-8{padding-top:var(--space-8);padding-bottom:var(--space-8)}.pb-4{padding-bottom:1rem}.pt-16{padding-top:4rem}.pt-6{padding-top:1.5rem}.pt-\[12vh\]{padding-top:12vh}.pt-sp-2{padding-top:var(--space-2)}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-top{vertical-align:top}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.text-\[11px\]{font-size:11px}.text-body{font-size:14px;line-height:1.55;font-weight:400}.text-caption{font-size:12px;line-height:1.4;font-weight:400}.text-display{font-size:28px;line-height:1.2;font-weight:600}.text-heading{font-size:15px;line-height:1.4;font-weight:500}.text-title{font-size:20px;line-height:1.3;font-weight:600}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-relaxed{line-height:1.625}.tracking-wider{letter-spacing:.05em}.text-\[var\(--critical\)\]{color:var(--critical)}.text-\[var\(--high\)\]{color:var(--high)}.text-\[var\(--info\)\]{color:var(--info)}.text-\[var\(--low\)\]{color:var(--low)}.text-\[var\(--medium\)\]{color:var(--medium)}.text-\[var\(--neutral\)\]{color:var(--neutral)}.text-\[var\(--success\)\]{color:var(--success)}.text-accent{color:var(--accent)}.text-severity-critical{color:var(--critical)}.text-surface-0{color:var(--surface-0)}.text-text-primary{color:var(--text-primary)}.text-text-secondary{color:var(--text-secondary)}.text-text-tertiary{color:var(--text-tertiary)}.placeholder-text-tertiary::-moz-placeholder{color:var(--text-tertiary)}.placeholder-text-tertiary::placeholder{color:var(--text-tertiary)}.opacity-20{opacity:.2}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-75{opacity:.75}.opacity-90{opacity:.9}.shadow-2xl{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)}.shadow-2xl,.shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:var(--shadow-lg);--tw-shadow-colored:var(--shadow-lg)}.shadow-sm{--tw-shadow:var(--shadow-sm);--tw-shadow-colored:var(--shadow-sm);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}:root{--critical:oklch(0.58 0.22 25);--high:oklch(0.68 0.16 55);--medium:oklch(0.72 0.14 85);--low:oklch(0.58 0.14 250);--info:oklch(0.55 0.01 265);--success:oklch(0.60 0.16 145);--neutral:oklch(0.50 0.005 265);--font-sans:"Manrope",system-ui,-apple-system,sans-serif;--font-mono:"JetBrains Mono",ui-monospace,"SF Mono",monospace;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:24px;--space-6:32px;--space-8:48px;--radius-sm:6px;--radius-md:8px;--radius-lg:12px;--overlay-bg:oklch(0.08 0.005 265/0.75);--shadow-sm:0 1px 2px oklch(0 0 0/0.05);--shadow-md:0 2px 8px oklch(0 0 0/0.08),0 1px 2px oklch(0 0 0/0.04);--shadow-lg:0 8px 24px oklch(0 0 0/0.12),0 2px 8px oklch(0 0 0/0.06)}[data-theme=dark]{--surface-0:oklch(0.13 0.005 265);--surface-1:oklch(0.17 0.006 265);--surface-2:oklch(0.21 0.006 265);--surface-3:oklch(0.26 0.006 265);--border-subtle:oklch(0.28 0.005 265/0.5);--border-default:oklch(0.32 0.006 265/0.55);--border-emphasis:oklch(0.42 0.01 265/0.65);--text-primary:oklch(0.93 0.005 265);--text-secondary:oklch(0.65 0.01 265);--text-tertiary:oklch(0.48 0.008 265);--accent:oklch(0.58 0.19 265);--accent-subtle:oklch(0.58 0.19 265/0.10);--accent-secondary:oklch(0.68 0.14 265);--accent-warm:oklch(0.68 0.16 55)}[data-theme=light]{--surface-0:oklch(0.97 0.003 265);--surface-1:oklch(1 0 0);--surface-2:oklch(0.96 0.004 265);--surface-3:oklch(0.93 0.005 265);--border-subtle:oklch(0.85 0.005 265/0.5);--border-default:oklch(0.80 0.006 265/0.45);--border-emphasis:oklch(0.70 0.01 265/0.5);--text-primary:oklch(0.15 0.01 265);--text-secondary:oklch(0.42 0.01 265);--text-tertiary:oklch(0.60 0.008 265);--accent:oklch(0.48 0.22 265);--accent-subtle:oklch(0.48 0.22 265/0.08);--accent-secondary:oklch(0.55 0.18 265);--accent-warm:oklch(0.58 0.16 55)}body{font-family:var(--font-sans);color:var(--text-primary);background:var(--surface-0);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:14px;line-height:1.55}.font-mono,code,pre{font-family:var(--font-mono)}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.transition-colors,[role=button],a,button,input,select,textarea{transition:color .2s ease,background-color .2s ease,border-color .2s ease,opacity .2s ease,box-shadow .2s ease}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--border-default);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:var(--border-emphasis)}@keyframes fade-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.stagger>*{opacity:0;animation:fade-in .3s ease-out forwards}.stagger>:first-child{animation-delay:.03s}.stagger>:nth-child(2){animation-delay:.06s}.stagger>:nth-child(3){animation-delay:.09s}.stagger>:nth-child(4){animation-delay:.12s}.stagger>:nth-child(5){animation-delay:.15s}.stagger>:nth-child(6){animation-delay:.18s}.stagger>:nth-child(7){animation-delay:.21s}.stagger>:nth-child(8){animation-delay:.24s}@keyframes scale-in{0%{opacity:0;transform:scale(.92)}to{opacity:1;transform:scale(1)}}.scale-in{animation:scale-in .35s ease-out forwards}.mermaid svg{background:transparent!important}.first\:mt-0:first-child{margin-top:0}.hover\:border-\[var\(--accent\)\]:hover{border-color:var(--accent)}.hover\:border-border-default:hover{border-color:var(--border-default)}.hover\:bg-accent-secondary:hover{background-color:var(--accent-secondary)}.hover\:bg-surface-2:hover{background-color:var(--surface-2)}.hover\:bg-surface-3:hover{background-color:var(--surface-3)}.hover\:text-text-primary:hover{color:var(--text-primary)}.hover\:text-text-secondary:hover{color:var(--text-secondary)}.hover\:underline:hover{text-decoration-line:underline}.focus\:border-accent:focus{border-color:var(--accent)}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus-visible\:outline:focus-visible{outline-style:solid}.focus-visible\:outline-2:focus-visible{outline-width:2px}.focus-visible\:-outline-offset-2:focus-visible{outline-offset:-2px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\:outline-accent:focus-visible{outline-color:var(--accent)}.active\:cursor-grabbing:active{cursor:grabbing}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-60:disabled{opacity:.6}.group:hover .group-hover\:text-accent{color:var(--accent)}.prose-headings\:text-text-primary :is(:where(h1,h2,h3,h4,h5,h6,th):not(:where([class~=not-prose],[class~=not-prose] *))){color:var(--text-primary)}.prose-p\:text-text-secondary :is(:where(p):not(:where([class~=not-prose],[class~=not-prose] *))){color:var(--text-secondary)}.prose-a\:text-accent :is(:where(a):not(:where([class~=not-prose],[class~=not-prose] *))){color:var(--accent)}.prose-a\:no-underline :is(:where(a):not(:where([class~=not-prose],[class~=not-prose] *))){text-decoration-line:none}.hover\:prose-a\:underline :is(:where(a):not(:where([class~=not-prose],[class~=not-prose] *))):hover{text-decoration-line:underline}.prose-blockquote\:border-border-emphasis :is(:where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *))){border-color:var(--border-emphasis)}.prose-blockquote\:text-text-secondary :is(:where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *))){color:var(--text-secondary)}.prose-strong\:text-text-primary :is(:where(strong):not(:where([class~=not-prose],[class~=not-prose] *))){color:var(--text-primary)}.prose-code\:text-accent :is(:where(code):not(:where([class~=not-prose],[class~=not-prose] *))){color:var(--accent)}.prose-code\:before\:content-none :is(:where(code):not(:where([class~=not-prose],[class~=not-prose] *))):before{--tw-content:none;content:var(--tw-content)}.prose-code\:after\:content-none :is(:where(code):not(:where([class~=not-prose],[class~=not-prose] *))):after{--tw-content:none;content:var(--tw-content)}.prose-pre\:border :is(:where(pre):not(:where([class~=not-prose],[class~=not-prose] *))){border-width:1px}.prose-pre\:border-border-default :is(:where(pre):not(:where([class~=not-prose],[class~=not-prose] *))){border-color:var(--border-default)}.prose-pre\:bg-surface-0 :is(:where(pre):not(:where([class~=not-prose],[class~=not-prose] *))){background-color:var(--surface-0)}.prose-li\:text-text-secondary :is(:where(li):not(:where([class~=not-prose],[class~=not-prose] *))){color:var(--text-secondary)}.prose-th\:text-text-primary :is(:where(th):not(:where([class~=not-prose],[class~=not-prose] *))){color:var(--text-primary)}.prose-td\:text-text-secondary :is(:where(td):not(:where([class~=not-prose],[class~=not-prose] *))){color:var(--text-secondary)}.prose-hr\:border-border-default :is(:where(hr):not(:where([class~=not-prose],[class~=not-prose] *))){border-color:var(--border-default)}@media (min-width:640px){.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media (min-width:768px){.md\:ml-\[220px\]{margin-left:220px}.md\:hidden{display:none}.md\:translate-x-0{--tw-translate-x:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:pt-6{padding-top:1.5rem}}@media (min-width:1024px){.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}}@media (min-width:1280px){.xl\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}}@font-face{font-family:__Manrope_73ee6c;font-style:normal;font-weight:200 800;font-display:swap;src:url(/_next/static/media/438aa629764e75f3-s.woff2) format("woff2");unicode-range:u+0460-052f,u+1c80-1c8a,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-family:__Manrope_73ee6c;font-style:normal;font-weight:200 800;font-display:swap;src:url(/_next/static/media/875ae681bfde4580-s.woff2) format("woff2");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-family:__Manrope_73ee6c;font-style:normal;font-weight:200 800;font-display:swap;src:url(/_next/static/media/51251f8b9793cdb3-s.woff2) format("woff2");unicode-range:u+0370-0377,u+037a-037f,u+0384-038a,u+038c,u+038e-03a1,u+03a3-03ff}@font-face{font-family:__Manrope_73ee6c;font-style:normal;font-weight:200 800;font-display:swap;src:url(/_next/static/media/e857b654a2caa584-s.woff2) format("woff2");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-family:__Manrope_73ee6c;font-style:normal;font-weight:200 800;font-display:swap;src:url(/_next/static/media/cc978ac5ee68c2b6-s.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:__Manrope_73ee6c;font-style:normal;font-weight:200 800;font-display:swap;src:url(/_next/static/media/4c9affa5bc8f420e-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:__Manrope_Fallback_73ee6c;src:local("Arial");ascent-override:103.31%;descent-override:29.07%;line-gap-override:0.00%;size-adjust:103.19%}.__className_73ee6c{font-family:__Manrope_73ee6c,__Manrope_Fallback_73ee6c;font-style:normal}.__variable_73ee6c{--font-sans:"__Manrope_73ee6c","__Manrope_Fallback_73ee6c"}@font-face{font-family:__JetBrains_Mono_3c557b;font-style:normal;font-weight:100 800;font-display:swap;src:url(/_next/static/media/886030b0b59bc5a7-s.woff2) format("woff2");unicode-range:u+0460-052f,u+1c80-1c8a,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-family:__JetBrains_Mono_3c557b;font-style:normal;font-weight:100 800;font-display:swap;src:url(/_next/static/media/0aa834ed78bf6d07-s.woff2) format("woff2");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-family:__JetBrains_Mono_3c557b;font-style:normal;font-weight:100 800;font-display:swap;src:url(/_next/static/media/67957d42bae0796d-s.woff2) format("woff2");unicode-range:u+0370-0377,u+037a-037f,u+0384-038a,u+038c,u+038e-03a1,u+03a3-03ff}@font-face{font-family:__JetBrains_Mono_3c557b;font-style:normal;font-weight:100 800;font-display:swap;src:url(/_next/static/media/f911b923c6adde36-s.woff2) format("woff2");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-family:__JetBrains_Mono_3c557b;font-style:normal;font-weight:100 800;font-display:swap;src:url(/_next/static/media/939c4f875ee75fbb-s.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:__JetBrains_Mono_3c557b;font-style:normal;font-weight:100 800;font-display:swap;src:url(/_next/static/media/bb3ef058b751a6ad-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:__JetBrains_Mono_Fallback_3c557b;src:local("Arial");ascent-override:75.79%;descent-override:22.29%;line-gap-override:0.00%;size-adjust:134.59%}.__className_3c557b{font-family:__JetBrains_Mono_3c557b,__JetBrains_Mono_Fallback_3c557b;font-style:normal}.__variable_3c557b{--font-mono:"__JetBrains_Mono_3c557b","__JetBrains_Mono_Fallback_3c557b"}
|
/package/dashboard/.next/static/{QeyYu_4EslVR8FTiyQpNs → JIjye0HUTWALF3gbtaZF8}/_buildManifest.js
RENAMED
|
File without changes
|
/package/dashboard/.next/static/{QeyYu_4EslVR8FTiyQpNs → JIjye0HUTWALF3gbtaZF8}/_ssgManifest.js
RENAMED
|
File without changes
|