@oh-my-pi/omp-stats 18.3.5 → 18.4.0
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/CHANGELOG.md +16 -0
- package/README.md +13 -11
- package/build.ts +5 -49
- package/dist/client/index.css +1 -1
- package/dist/client/index.html +2 -2
- package/dist/client/index.js +105 -126
- package/dist/types/aggregator.d.ts +25 -22
- package/dist/types/client/api.d.ts +11 -7
- package/dist/types/client/app/LiveChip.d.ts +2 -0
- package/dist/types/client/app/Shell.d.ts +16 -0
- package/dist/types/client/app/ThemeToggle.d.ts +1 -0
- package/dist/types/client/app/nav.d.ts +18 -0
- package/dist/types/client/charts/BarList.d.ts +17 -0
- package/dist/types/client/charts/Chart.d.ts +49 -0
- package/dist/types/client/charts/Legend.d.ts +16 -0
- package/dist/types/client/charts/ShareBar.d.ts +11 -0
- package/dist/types/client/charts/Sparkline.d.ts +11 -0
- package/dist/types/client/charts/TimeChart.d.ts +9 -0
- package/dist/types/client/charts/index.d.ts +7 -0
- package/dist/types/client/charts/types.d.ts +25 -0
- package/dist/types/client/charts/useWidth.d.ts +3 -0
- package/dist/types/client/data/colors.d.ts +25 -0
- package/dist/types/client/data/formatters.d.ts +9 -1
- package/dist/types/client/data/live.d.ts +29 -0
- package/dist/types/client/data/query.d.ts +35 -0
- package/dist/types/client/data/range.d.ts +31 -0
- package/dist/types/client/data/series.d.ts +28 -0
- package/dist/types/client/data/useHashRoute.d.ts +18 -4
- package/dist/types/client/data/view-models.d.ts +111 -28
- package/dist/types/client/index.d.ts +0 -1
- package/dist/types/client/routes/CostsRoute.d.ts +2 -2
- package/dist/types/client/routes/ErrorsRoute.d.ts +2 -2
- package/dist/types/client/routes/FrustrationRoute.d.ts +7 -0
- package/dist/types/client/routes/GainRoute.d.ts +1 -2
- package/dist/types/client/routes/ModelsRoute.d.ts +2 -2
- package/dist/types/client/routes/OverviewRoute.d.ts +1 -2
- package/dist/types/client/routes/ProjectsRoute.d.ts +2 -2
- package/dist/types/client/routes/ProvidersRoute.d.ts +2 -2
- package/dist/types/client/routes/RequestsRoute.d.ts +1 -2
- package/dist/types/client/routes/ToolsRoute.d.ts +2 -2
- package/dist/types/client/routes/TracesRoute.d.ts +2 -2
- package/dist/types/client/routes/index.d.ts +1 -1
- package/dist/types/client/traces/AggregatesPanel.d.ts +4 -3
- package/dist/types/client/traces/SummaryStrip.d.ts +2 -2
- package/dist/types/client/traces/trace-colors.d.ts +18 -12
- package/dist/types/client/ui/Badge.d.ts +19 -0
- package/dist/types/client/ui/Card.d.ts +25 -0
- package/dist/types/client/ui/Drawer.d.ts +25 -0
- package/dist/types/client/ui/JsonBlock.d.ts +2 -2
- package/dist/types/client/ui/Modal.d.ts +23 -0
- package/dist/types/client/ui/RequestDrawer.d.ts +10 -1
- package/dist/types/client/ui/SearchInput.d.ts +8 -0
- package/dist/types/client/ui/Segmented.d.ts +15 -0
- package/dist/types/client/ui/Stat.d.ts +36 -0
- package/dist/types/client/ui/States.d.ts +41 -0
- package/dist/types/client/ui/Table.d.ts +48 -0
- package/dist/types/client/ui/index.d.ts +9 -10
- package/dist/types/db.d.ts +90 -106
- package/dist/types/frustration.d.ts +70 -0
- package/dist/types/index.d.ts +3 -1
- package/dist/types/live.d.ts +30 -0
- package/dist/types/rollup.d.ts +115 -0
- package/dist/types/server.d.ts +6 -1
- package/dist/types/shared-types.d.ts +116 -56
- package/dist/types/types.d.ts +4 -0
- package/dist/types/user-metrics.d.ts +8 -0
- package/package.json +7 -13
- package/src/aggregator.ts +276 -211
- package/src/client/App.tsx +38 -80
- package/src/client/api.ts +65 -7
- package/src/client/app/LiveChip.tsx +97 -0
- package/src/client/app/Shell.tsx +181 -0
- package/src/client/app/ThemeToggle.tsx +5 -2
- package/src/client/app/nav.ts +78 -0
- package/src/client/charts/BarList.tsx +48 -0
- package/src/client/charts/Chart.tsx +388 -0
- package/src/client/charts/Legend.tsx +61 -0
- package/src/client/charts/ShareBar.tsx +26 -0
- package/src/client/charts/Sparkline.tsx +38 -0
- package/src/client/charts/TimeChart.tsx +22 -0
- package/src/client/charts/index.ts +7 -0
- package/src/client/charts/types.ts +27 -0
- package/src/client/charts/useWidth.ts +19 -0
- package/src/client/data/colors.ts +45 -0
- package/src/client/data/formatters.ts +30 -9
- package/src/client/data/live.tsx +85 -0
- package/src/client/data/query.ts +166 -0
- package/src/client/data/range.ts +82 -0
- package/src/client/data/series.ts +85 -0
- package/src/client/data/useHashRoute.ts +41 -83
- package/src/client/data/view-models.ts +347 -140
- package/src/client/index.tsx +3 -6
- package/src/client/routes/CostsRoute.tsx +394 -222
- package/src/client/routes/ErrorsRoute.tsx +401 -98
- package/src/client/routes/FrustrationRoute.tsx +924 -0
- package/src/client/routes/GainRoute.tsx +209 -206
- package/src/client/routes/ModelsRoute.tsx +540 -431
- package/src/client/routes/OverviewRoute.tsx +283 -311
- package/src/client/routes/ProjectsRoute.tsx +298 -156
- package/src/client/routes/ProvidersRoute.tsx +948 -416
- package/src/client/routes/RequestsRoute.tsx +295 -107
- package/src/client/routes/ToolsRoute.tsx +495 -398
- package/src/client/routes/TracesRoute.tsx +136 -117
- package/src/client/routes/costs.css +24 -0
- package/src/client/routes/errors.css +60 -0
- package/src/client/routes/frustration.css +123 -0
- package/src/client/routes/index.ts +1 -1
- package/src/client/routes/models.css +43 -0
- package/src/client/routes/projects.css +6 -0
- package/src/client/routes/providers.css +28 -0
- package/src/client/routes/tools.css +14 -0
- package/src/client/styles.css +1396 -1299
- package/src/client/traces/AggregatesPanel.tsx +55 -74
- package/src/client/traces/Minimap.tsx +6 -15
- package/src/client/traces/SpanDrawer.tsx +128 -194
- package/src/client/traces/SummaryStrip.tsx +21 -24
- package/src/client/traces/TimelineCanvas.tsx +27 -44
- package/src/client/traces/TraceView.tsx +175 -130
- package/src/client/traces/TranscriptList.tsx +13 -41
- package/src/client/traces/trace-colors.ts +60 -53
- package/src/client/traces/traces.css +279 -0
- package/src/client/ui/Badge.tsx +29 -0
- package/src/client/ui/Card.tsx +61 -0
- package/src/client/ui/Drawer.tsx +93 -0
- package/src/client/ui/JsonBlock.tsx +26 -44
- package/src/client/ui/Modal.tsx +106 -0
- package/src/client/ui/RequestDrawer.tsx +163 -188
- package/src/client/ui/SearchInput.tsx +25 -0
- package/src/client/ui/Segmented.tsx +61 -0
- package/src/client/ui/Stat.tsx +104 -0
- package/src/client/ui/States.tsx +81 -0
- package/src/client/ui/Table.tsx +229 -0
- package/src/client/ui/index.ts +9 -10
- package/src/client/ui/modal.css +54 -0
- package/src/client/ui/request-drawer.css +40 -0
- package/src/db.ts +379 -983
- package/src/frustration.ts +473 -0
- package/src/index.ts +22 -22
- package/src/live.ts +259 -0
- package/src/parser.ts +55 -66
- package/src/rollup.ts +951 -0
- package/src/server.ts +123 -40
- package/src/shared-types.ts +120 -56
- package/src/trace.ts +14 -7
- package/src/types.ts +4 -0
- package/src/user-metrics.ts +13 -0
- package/dist/client/styles.css +0 -1976
- package/dist/types/client/app/AppLayout.d.ts +0 -16
- package/dist/types/client/app/NavRail.d.ts +0 -7
- package/dist/types/client/app/RangeControl.d.ts +0 -7
- package/dist/types/client/app/SyncButton.d.ts +0 -14
- package/dist/types/client/app/TopBar.d.ts +0 -15
- package/dist/types/client/app/routes.d.ts +0 -12
- package/dist/types/client/components/AgentTokenShare.d.ts +0 -5
- package/dist/types/client/components/chart-shared.d.ts +0 -178
- package/dist/types/client/components/models-table-shared.d.ts +0 -175
- package/dist/types/client/components/range-meta.d.ts +0 -21
- package/dist/types/client/data/charts.d.ts +0 -1
- package/dist/types/client/data/useResource.d.ts +0 -13
- package/dist/types/client/routes/BehaviorRoute.d.ts +0 -7
- package/dist/types/client/ui/AsyncBoundary.d.ts +0 -12
- package/dist/types/client/ui/DataTable.d.ts +0 -17
- package/dist/types/client/ui/EmptyState.d.ts +0 -7
- package/dist/types/client/ui/ErrorState.d.ts +0 -6
- package/dist/types/client/ui/MetricCluster.d.ts +0 -5
- package/dist/types/client/ui/Panel.d.ts +0 -7
- package/dist/types/client/ui/SegmentedControl.d.ts +0 -12
- package/dist/types/client/ui/Skeleton.d.ts +0 -8
- package/dist/types/client/ui/StatusPill.d.ts +0 -7
- package/src/client/app/AppLayout.tsx +0 -93
- package/src/client/app/NavRail.tsx +0 -44
- package/src/client/app/RangeControl.tsx +0 -39
- package/src/client/app/SyncButton.tsx +0 -75
- package/src/client/app/TopBar.tsx +0 -73
- package/src/client/app/routes.ts +0 -93
- package/src/client/components/AgentTokenShare.tsx +0 -68
- package/src/client/components/chart-shared.tsx +0 -273
- package/src/client/components/models-table-shared.tsx +0 -255
- package/src/client/components/range-meta.ts +0 -73
- package/src/client/data/charts.ts +0 -14
- package/src/client/data/useResource.ts +0 -154
- package/src/client/routes/BehaviorRoute.tsx +0 -623
- package/src/client/ui/AsyncBoundary.tsx +0 -54
- package/src/client/ui/DataTable.tsx +0 -122
- package/src/client/ui/EmptyState.tsx +0 -16
- package/src/client/ui/ErrorState.tsx +0 -25
- package/src/client/ui/MetricCluster.tsx +0 -92
- package/src/client/ui/Panel.tsx +0 -24
- package/src/client/ui/SegmentedControl.tsx +0 -36
- package/src/client/ui/Skeleton.tsx +0 -17
- package/src/client/ui/StatusPill.tsx +0 -15
- package/tailwind.config.js +0 -40
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,22 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [18.4.0] - 2026-09-28
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
|
|
9
|
+
- Redesigned the dashboard: new layout, navigation (`g` + letter to jump, `1`–`6` to pick a range), sortable tables and in-house charts on every page
|
|
10
|
+
- The dashboard opens immediately and ingests sessions in the background, most recent activity first, with live progress in the header; pages update as data lands and new session activity appears within seconds
|
|
11
|
+
- Switching time ranges is now near-instant: range queries read hourly rollups instead of scanning every request (seconds → milliseconds on large histories)
|
|
12
|
+
- Frustration judge runs now scale how many requests they keep in flight (up to 256, backing off on rate limits and retrying after a short delay) and save verdicts in batches; the progress line shows the rate and requests in flight
|
|
13
|
+
- Provider subscription windows load separately from the rest of the Providers page, and the Projects page lists the 2,000 busiest folders
|
|
14
|
+
- Replaced the dashboard's Behavior page with a Frustration page showing, per model version, how often users are annoyed, annoyed at the assistant, and angry at it; a button judges unclassified messages with the host's `judge` model (after a cost estimate) and the chart refines live as verdicts arrive
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
|
|
18
|
+
- Made session-statistics synchronization atomic to prevent duplicate entries when synchronization is interrupted.
|
|
19
|
+
- Improved the speed and reliability of initial and repeat `omp stats` imports, including large session histories and already-indexed histories.
|
|
20
|
+
|
|
5
21
|
## [18.2.9] - 2026-09-22
|
|
6
22
|
|
|
7
23
|
### Fixed
|
package/README.md
CHANGED
|
@@ -5,9 +5,9 @@ Local observability dashboard for AI usage statistics.
|
|
|
5
5
|
## Features
|
|
6
6
|
|
|
7
7
|
- **Session log parsing**: Reads JSONL session logs from `~/.omp/agent/sessions/`
|
|
8
|
-
- **SQLite aggregation**:
|
|
9
|
-
- **
|
|
10
|
-
- **Incremental sync**: Only processes new/modified log entries
|
|
8
|
+
- **SQLite aggregation**: Stats storage in `bun:sqlite`, with hourly rollups so any range queries in milliseconds
|
|
9
|
+
- **Live web dashboard**: Opens instantly, ingests sessions in the background (newest first) and streams progress and updates to the page
|
|
10
|
+
- **Incremental sync**: Only processes new/modified log entries; a watcher re-syncs transcripts as they are written
|
|
11
11
|
|
|
12
12
|
## Metrics Tracked
|
|
13
13
|
|
|
@@ -63,22 +63,24 @@ console.log(stats.byModel[0].avgTokensPerSecond);
|
|
|
63
63
|
| `GET /api/stats/models` | Per-model statistics |
|
|
64
64
|
| `GET /api/stats/folders` | Per-folder/project statistics |
|
|
65
65
|
| `GET /api/stats/timeseries` | Hourly time series data |
|
|
66
|
-
| `GET /api/
|
|
66
|
+
| `GET /api/events` | Server-sent live status: sync progress, data version, rollup backlog |
|
|
67
|
+
| `GET /api/status` | Current live status (same shape as the events) |
|
|
68
|
+
| `POST /api/sync` | Start a background sync; progress arrives on `/api/events` |
|
|
67
69
|
|
|
68
70
|
## Data Storage
|
|
69
71
|
|
|
70
72
|
- **Session logs**: `~/.omp/agent/sessions/` (JSONL files)
|
|
71
73
|
- **Stats database**: `~/.omp/stats.db` (SQLite)
|
|
72
74
|
|
|
73
|
-
|
|
75
|
+
Synchronization fetches file metadata and saved cursors in bounded batches and overlaps transcript reads, including on macOS without worker threads. Statistics and cursors commit atomically; unchanged files are skipped, and interrupted batches are retried without double-counting usage.
|
|
76
|
+
|
|
77
|
+
Full reconciliation replays still scan every transcript. Unchanged transcripts retain their indexed rows while missing or stale records and unfinished links are repaired; modified transcripts are rebuilt. Parsing discards message bodies after extracting statistics rather than retaining entire decoded transcripts.
|
|
74
78
|
|
|
75
|
-
|
|
79
|
+
Range queries read `message_rollup` / `tool_rollup` / `session_rollup`, maintained from the raw tables: triggers mark touched hours and transcripts dirty (from any omp process), and the dashboard re-rolls them newest-first in short transactions. Reads stay exact by aggregating the few dirty hours raw; during an initial build the header shows the indexing backlog.
|
|
80
|
+
|
|
81
|
+
## Dashboard
|
|
76
82
|
|
|
77
|
-
|
|
78
|
-
- Time series chart showing requests and errors over time
|
|
79
|
-
- Per-model breakdown table
|
|
80
|
-
- Per-folder breakdown table
|
|
81
|
-
- Auto-refresh every 30 seconds
|
|
83
|
+
Pages: Overview, Models, Providers, Costs, Requests, Errors, Traces, Tools, Frustration, Projects and Gain. `1`–`6` pick the time range; `g` then a letter jumps to a page. Every page revalidates when the live data version moves, so there is no refresh button.
|
|
82
84
|
|
|
83
85
|
## License
|
|
84
86
|
|
package/build.ts
CHANGED
|
@@ -1,54 +1,10 @@
|
|
|
1
1
|
import * as fs from "node:fs/promises";
|
|
2
|
-
import * as path from "node:path";
|
|
3
|
-
import { compile } from "@tailwindcss/node";
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Extract Tailwind class names from source files by scanning for className attributes.
|
|
7
|
-
*/
|
|
8
|
-
async function extractTailwindClasses(dir: string): Promise<Set<string>> {
|
|
9
|
-
const classes = new Set<string>();
|
|
10
|
-
const classPattern = /className\s*=\s*["'`]([^"'`]+)["'`]/g;
|
|
11
|
-
|
|
12
|
-
async function scanDir(currentDir: string): Promise<void> {
|
|
13
|
-
const entries = await fs.readdir(currentDir, { withFileTypes: true });
|
|
14
|
-
for (const entry of entries) {
|
|
15
|
-
const fullPath = path.join(currentDir, entry.name);
|
|
16
|
-
if (entry.isDirectory()) {
|
|
17
|
-
await scanDir(fullPath);
|
|
18
|
-
} else if (entry.isFile() && /\.(tsx|ts|jsx|js)$/.test(entry.name)) {
|
|
19
|
-
const content = await Bun.file(fullPath).text();
|
|
20
|
-
const matches = content.matchAll(classPattern);
|
|
21
|
-
for (const match of matches) {
|
|
22
|
-
for (const cls of match[1].split(/\s+/)) {
|
|
23
|
-
if (cls) classes.add(cls);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
await scanDir(dir);
|
|
31
|
-
return classes;
|
|
32
|
-
}
|
|
33
2
|
|
|
34
3
|
// Clean dist
|
|
35
4
|
await fs.rm("./dist/client", { recursive: true, force: true });
|
|
36
5
|
|
|
37
|
-
//
|
|
38
|
-
console.log("Building
|
|
39
|
-
const sourceCss = await Bun.file("./src/client/styles.css").text();
|
|
40
|
-
const candidates = await extractTailwindClasses("./src/client");
|
|
41
|
-
const baseDir = path.resolve("./src/client");
|
|
42
|
-
|
|
43
|
-
const compiler = await compile(sourceCss, {
|
|
44
|
-
base: baseDir,
|
|
45
|
-
onDependency: () => {},
|
|
46
|
-
});
|
|
47
|
-
const tailwindOutput = compiler.build([...candidates]);
|
|
48
|
-
await Bun.write("./dist/client/styles.css", tailwindOutput);
|
|
49
|
-
|
|
50
|
-
// Build React app
|
|
51
|
-
console.log("Building React app...");
|
|
6
|
+
// Bundle the React app. CSS imported from TSX modules is emitted alongside as index.css.
|
|
7
|
+
console.log("Building dashboard client...");
|
|
52
8
|
const result = await Bun.build({
|
|
53
9
|
entrypoints: ["./src/client/index.tsx"],
|
|
54
10
|
outdir: "./dist/client",
|
|
@@ -64,13 +20,13 @@ if (!result.success) {
|
|
|
64
20
|
process.exit(1);
|
|
65
21
|
}
|
|
66
22
|
|
|
67
|
-
//
|
|
23
|
+
// The inline script applies the persisted theme before first paint (no flash).
|
|
68
24
|
const indexHtml = `<!DOCTYPE html>
|
|
69
25
|
<html lang="en">
|
|
70
26
|
<head>
|
|
71
27
|
<meta charset="UTF-8">
|
|
72
28
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
73
|
-
<title>
|
|
29
|
+
<title>omp stats</title>
|
|
74
30
|
<script>
|
|
75
31
|
(function () {
|
|
76
32
|
try {
|
|
@@ -82,7 +38,7 @@ const indexHtml = `<!DOCTYPE html>
|
|
|
82
38
|
} catch (e) {}
|
|
83
39
|
})();
|
|
84
40
|
</script>
|
|
85
|
-
<link rel="stylesheet" href="
|
|
41
|
+
<link rel="stylesheet" href="index.css">
|
|
86
42
|
</head>
|
|
87
43
|
<body>
|
|
88
44
|
<div id="root"></div>
|
package/dist/client/index.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer theme,base,components,utilities;@layer theme{@theme default{--font-sans: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue","Noto Sans",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"; --font-serif: ui-serif,Georgia,Cambria,"Times New Roman",Times,serif; --font-mono: ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace; --color-red-50: oklch(97.1% .013 17.38); --color-red-100: oklch(93.6% .032 17.717); --color-red-200: oklch(88.5% .062 18.334); --color-red-300: oklch(80.8% .114 19.571); --color-red-400: oklch(70.4% .191 22.216); --color-red-500: oklch(63.7% .237 25.331); --color-red-600: oklch(57.7% .245 27.325); --color-red-700: oklch(50.5% .213 27.518); --color-red-800: oklch(44.4% .177 26.899); --color-red-900: oklch(39.6% .141 25.723); --color-red-950: oklch(25.8% .092 26.042); --color-orange-50: oklch(98% .016 73.684); --color-orange-100: oklch(95.4% .038 75.164); --color-orange-200: oklch(90.1% .076 70.697); --color-orange-300: oklch(83.7% .128 66.29); --color-orange-400: oklch(75% .183 55.934); --color-orange-500: oklch(70.5% .213 47.604); --color-orange-600: oklch(64.6% .222 41.116); --color-orange-700: oklch(55.3% .195 38.402); --color-orange-800: oklch(47% .157 37.304); --color-orange-900: oklch(40.8% .123 38.172); --color-orange-950: oklch(26.6% .079 36.259); --color-amber-50: oklch(98.7% .022 95.277); --color-amber-100: oklch(96.2% .059 95.617); --color-amber-200: oklch(92.4% .12 95.746); --color-amber-300: oklch(87.9% .169 91.605); --color-amber-400: oklch(82.8% .189 84.429); --color-amber-500: oklch(76.9% .188 70.08); --color-amber-600: oklch(66.6% .179 58.318); --color-amber-700: oklch(55.5% .163 48.998); --color-amber-800: oklch(47.3% .137 46.201); --color-amber-900: oklch(41.4% .112 45.904); --color-amber-950: oklch(27.9% .077 45.635); --color-yellow-50: oklch(98.7% .026 102.212); --color-yellow-100: oklch(97.3% .071 103.193); --color-yellow-200: oklch(94.5% .129 101.54); --color-yellow-300: oklch(90.5% .182 98.111); --color-yellow-400: oklch(85.2% .199 91.936); --color-yellow-500: oklch(79.5% .184 86.047); --color-yellow-600: oklch(68.1% .162 75.834); --color-yellow-700: oklch(55.4% .135 66.442); --color-yellow-800: oklch(47.6% .114 61.907); --color-yellow-900: oklch(42.1% .095 57.708); --color-yellow-950: oklch(28.6% .066 53.813); --color-lime-50: oklch(98.6% .031 120.757); --color-lime-100: oklch(96.7% .067 122.328); --color-lime-200: oklch(93.8% .127 124.321); --color-lime-300: oklch(89.7% .196 126.665); --color-lime-400: oklch(84.1% .238 128.85); --color-lime-500: oklch(76.8% .233 130.85); --color-lime-600: oklch(64.8% .2 131.684); --color-lime-700: oklch(53.2% .157 131.589); --color-lime-800: oklch(45.3% .124 130.933); --color-lime-900: oklch(40.5% .101 131.063); --color-lime-950: oklch(27.4% .072 132.109); --color-green-50: oklch(98.2% .018 155.826); --color-green-100: oklch(96.2% .044 156.743); --color-green-200: oklch(92.5% .084 155.995); --color-green-300: oklch(87.1% .15 154.449); --color-green-400: oklch(79.2% .209 151.711); --color-green-500: oklch(72.3% .219 149.579); --color-green-600: oklch(62.7% .194 149.214); --color-green-700: oklch(52.7% .154 150.069); --color-green-800: oklch(44.8% .119 151.328); --color-green-900: oklch(39.3% .095 152.535); --color-green-950: oklch(26.6% .065 152.934); --color-emerald-50: oklch(97.9% .021 166.113); --color-emerald-100: oklch(95% .052 163.051); --color-emerald-200: oklch(90.5% .093 164.15); --color-emerald-300: oklch(84.5% .143 164.978); --color-emerald-400: oklch(76.5% .177 163.223); --color-emerald-500: oklch(69.6% .17 162.48); --color-emerald-600: oklch(59.6% .145 163.225); --color-emerald-700: oklch(50.8% .118 165.612); --color-emerald-800: oklch(43.2% .095 166.913); --color-emerald-900: oklch(37.8% .077 168.94); --color-emerald-950: oklch(26.2% .051 172.552); --color-teal-50: oklch(98.4% .014 180.72); --color-teal-100: oklch(95.3% .051 180.801); --color-teal-200: oklch(91% .096 180.426); --color-teal-300: oklch(85.5% .138 181.071); --color-teal-400: oklch(77.7% .152 181.912); --color-teal-500: oklch(70.4% .14 182.503); --color-teal-600: oklch(60% .118 184.704); --color-teal-700: oklch(51.1% .096 186.391); --color-teal-800: oklch(43.7% .078 188.216); --color-teal-900: oklch(38.6% .063 188.416); --color-teal-950: oklch(27.7% .046 192.524); --color-cyan-50: oklch(98.4% .019 200.873); --color-cyan-100: oklch(95.6% .045 203.388); --color-cyan-200: oklch(91.7% .08 205.041); --color-cyan-300: oklch(86.5% .127 207.078); --color-cyan-400: oklch(78.9% .154 211.53); --color-cyan-500: oklch(71.5% .143 215.221); --color-cyan-600: oklch(60.9% .126 221.723); --color-cyan-700: oklch(52% .105 223.128); --color-cyan-800: oklch(45% .085 224.283); --color-cyan-900: oklch(39.8% .07 227.392); --color-cyan-950: oklch(30.2% .056 229.695); --color-sky-50: oklch(97.7% .013 236.62); --color-sky-100: oklch(95.1% .026 236.824); --color-sky-200: oklch(90.1% .058 230.902); --color-sky-300: oklch(82.8% .111 230.318); --color-sky-400: oklch(74.6% .16 232.661); --color-sky-500: oklch(68.5% .169 237.323); --color-sky-600: oklch(58.8% .158 241.966); --color-sky-700: oklch(50% .134 242.749); --color-sky-800: oklch(44.3% .11 240.79); --color-sky-900: oklch(39.1% .09 240.876); --color-sky-950: oklch(29.3% .066 243.157); --color-blue-50: oklch(97% .014 254.604); --color-blue-100: oklch(93.2% .032 255.585); --color-blue-200: oklch(88.2% .059 254.128); --color-blue-300: oklch(80.9% .105 251.813); --color-blue-400: oklch(70.7% .165 254.624); --color-blue-500: oklch(62.3% .214 259.815); --color-blue-600: oklch(54.6% .245 262.881); --color-blue-700: oklch(48.8% .243 264.376); --color-blue-800: oklch(42.4% .199 265.638); --color-blue-900: oklch(37.9% .146 265.522); --color-blue-950: oklch(28.2% .091 267.935); --color-indigo-50: oklch(96.2% .018 272.314); --color-indigo-100: oklch(93% .034 272.788); --color-indigo-200: oklch(87% .065 274.039); --color-indigo-300: oklch(78.5% .115 274.713); --color-indigo-400: oklch(67.3% .182 276.935); --color-indigo-500: oklch(58.5% .233 277.117); --color-indigo-600: oklch(51.1% .262 276.966); --color-indigo-700: oklch(45.7% .24 277.023); --color-indigo-800: oklch(39.8% .195 277.366); --color-indigo-900: oklch(35.9% .144 278.697); --color-indigo-950: oklch(25.7% .09 281.288); --color-violet-50: oklch(96.9% .016 293.756); --color-violet-100: oklch(94.3% .029 294.588); --color-violet-200: oklch(89.4% .057 293.283); --color-violet-300: oklch(81.1% .111 293.571); --color-violet-400: oklch(70.2% .183 293.541); --color-violet-500: oklch(60.6% .25 292.717); --color-violet-600: oklch(54.1% .281 293.009); --color-violet-700: oklch(49.1% .27 292.581); --color-violet-800: oklch(43.2% .232 292.759); --color-violet-900: oklch(38% .189 293.745); --color-violet-950: oklch(28.3% .141 291.089); --color-purple-50: oklch(97.7% .014 308.299); --color-purple-100: oklch(94.6% .033 307.174); --color-purple-200: oklch(90.2% .063 306.703); --color-purple-300: oklch(82.7% .119 306.383); --color-purple-400: oklch(71.4% .203 305.504); --color-purple-500: oklch(62.7% .265 303.9); --color-purple-600: oklch(55.8% .288 302.321); --color-purple-700: oklch(49.6% .265 301.924); --color-purple-800: oklch(43.8% .218 303.724); --color-purple-900: oklch(38.1% .176 304.987); --color-purple-950: oklch(29.1% .149 302.717); --color-fuchsia-50: oklch(97.7% .017 320.058); --color-fuchsia-100: oklch(95.2% .037 318.852); --color-fuchsia-200: oklch(90.3% .076 319.62); --color-fuchsia-300: oklch(83.3% .145 321.434); --color-fuchsia-400: oklch(74% .238 322.16); --color-fuchsia-500: oklch(66.7% .295 322.15); --color-fuchsia-600: oklch(59.1% .293 322.896); --color-fuchsia-700: oklch(51.8% .253 323.949); --color-fuchsia-800: oklch(45.2% .211 324.591); --color-fuchsia-900: oklch(40.1% .17 325.612); --color-fuchsia-950: oklch(29.3% .136 325.661); --color-pink-50: oklch(97.1% .014 343.198); --color-pink-100: oklch(94.8% .028 342.258); --color-pink-200: oklch(89.9% .061 343.231); --color-pink-300: oklch(82.3% .12 346.018); --color-pink-400: oklch(71.8% .202 349.761); --color-pink-500: oklch(65.6% .241 354.308); --color-pink-600: oklch(59.2% .249 .584); --color-pink-700: oklch(52.5% .223 3.958); --color-pink-800: oklch(45.9% .187 3.815); --color-pink-900: oklch(40.8% .153 2.432); --color-pink-950: oklch(28.4% .109 3.907); --color-rose-50: oklch(96.9% .015 12.422); --color-rose-100: oklch(94.1% .03 12.58); --color-rose-200: oklch(89.2% .058 10.001); --color-rose-300: oklch(81% .117 11.638); --color-rose-400: oklch(71.2% .194 13.428); --color-rose-500: oklch(64.5% .246 16.439); --color-rose-600: oklch(58.6% .253 17.585); --color-rose-700: oklch(51.4% .222 16.935); --color-rose-800: oklch(45.5% .188 13.697); --color-rose-900: oklch(41% .159 10.272); --color-rose-950: oklch(27.1% .105 12.094); --color-slate-50: oklch(98.4% .003 247.858); --color-slate-100: oklch(96.8% .007 247.896); --color-slate-200: oklch(92.9% .013 255.508); --color-slate-300: oklch(86.9% .022 252.894); --color-slate-400: oklch(70.4% .04 256.788); --color-slate-500: oklch(55.4% .046 257.417); --color-slate-600: oklch(44.6% .043 257.281); --color-slate-700: oklch(37.2% .044 257.287); --color-slate-800: oklch(27.9% .041 260.031); --color-slate-900: oklch(20.8% .042 265.755); --color-slate-950: oklch(12.9% .042 264.695); --color-gray-50: oklch(98.5% .002 247.839); --color-gray-100: oklch(96.7% .003 264.542); --color-gray-200: oklch(92.8% .006 264.531); --color-gray-300: oklch(87.2% .01 258.338); --color-gray-400: oklch(70.7% .022 261.325); --color-gray-500: oklch(55.1% .027 264.364); --color-gray-600: oklch(44.6% .03 256.802); --color-gray-700: oklch(37.3% .034 259.733); --color-gray-800: oklch(27.8% .033 256.848); --color-gray-900: oklch(21% .034 264.665); --color-gray-950: oklch(13% .028 261.692); --color-zinc-50: oklch(98.5% 0 none); --color-zinc-100: oklch(96.7% .001 286.375); --color-zinc-200: oklch(92% .004 286.32); --color-zinc-300: oklch(87.1% .006 286.286); --color-zinc-400: oklch(70.5% .015 286.067); --color-zinc-500: oklch(55.2% .016 285.938); --color-zinc-600: oklch(44.2% .017 285.786); --color-zinc-700: oklch(37% .013 285.805); --color-zinc-800: oklch(27.4% .006 286.033); --color-zinc-900: oklch(21% .006 285.885); --color-zinc-950: oklch(14.1% .005 285.823); --color-neutral-50: oklch(98.5% 0 none); --color-neutral-100: oklch(97% 0 none); --color-neutral-200: oklch(92.2% 0 none); --color-neutral-300: oklch(87% 0 none); --color-neutral-400: oklch(70.8% 0 none); --color-neutral-500: oklch(55.6% 0 none); --color-neutral-600: oklch(43.9% 0 none); --color-neutral-700: oklch(37.1% 0 none); --color-neutral-800: oklch(26.9% 0 none); --color-neutral-900: oklch(20.5% 0 none); --color-neutral-950: oklch(14.5% 0 none); --color-stone-50: oklch(98.5% .001 106.423); --color-stone-100: oklch(97% .001 106.424); --color-stone-200: oklch(92.3% .003 48.717); --color-stone-300: oklch(86.9% .005 56.366); --color-stone-400: oklch(70.9% .01 56.259); --color-stone-500: oklch(55.3% .013 58.071); --color-stone-600: oklch(44.4% .011 73.639); --color-stone-700: oklch(37.4% .01 67.558); --color-stone-800: oklch(26.8% .007 34.298); --color-stone-900: oklch(21.6% .006 56.043); --color-stone-950: oklch(14.7% .004 49.25); --color-mauve-50: oklch(98.5% 0 none); --color-mauve-100: oklch(96% .003 325.6); --color-mauve-200: oklch(92.2% .005 325.62); --color-mauve-300: oklch(86.5% .012 325.68); --color-mauve-400: oklch(71.1% .019 323.02); --color-mauve-500: oklch(54.2% .034 322.5); --color-mauve-600: oklch(43.5% .029 321.78); --color-mauve-700: oklch(36.4% .029 323.89); --color-mauve-800: oklch(26.3% .024 320.12); --color-mauve-900: oklch(21.2% .019 322.12); --color-mauve-950: oklch(14.5% .008 326); --color-olive-50: oklch(98.8% .003 106.5); --color-olive-100: oklch(96.6% .005 106.5); --color-olive-200: oklch(93% .007 106.5); --color-olive-300: oklch(88% .011 106.6); --color-olive-400: oklch(73.7% .021 106.9); --color-olive-500: oklch(58% .031 107.3); --color-olive-600: oklch(46.6% .025 107.3); --color-olive-700: oklch(39.4% .023 107.4); --color-olive-800: oklch(28.6% .016 107.4); --color-olive-900: oklch(22.8% .013 107.4); --color-olive-950: oklch(15.3% .006 107.1); --color-mist-50: oklch(98.7% .002 197.1); --color-mist-100: oklch(96.3% .002 197.1); --color-mist-200: oklch(92.5% .005 214.3); --color-mist-300: oklch(87.2% .007 219.6); --color-mist-400: oklch(72.3% .014 214.4); --color-mist-500: oklch(56% .021 213.5); --color-mist-600: oklch(45% .017 213.2); --color-mist-700: oklch(37.8% .015 216); --color-mist-800: oklch(27.5% .011 216.9); --color-mist-900: oklch(21.8% .008 223.9); --color-mist-950: oklch(14.8% .004 228.8); --color-taupe-50: oklch(98.6% .002 67.8); --color-taupe-100: oklch(96% .002 17.2); --color-taupe-200: oklch(92.2% .005 34.3); --color-taupe-300: oklch(86.8% .007 39.5); --color-taupe-400: oklch(71.4% .014 41.2); --color-taupe-500: oklch(54.7% .021 43.1); --color-taupe-600: oklch(43.8% .017 39.3); --color-taupe-700: oklch(36.7% .016 35.7); --color-taupe-800: oklch(26.8% .011 36.5); --color-taupe-900: oklch(21.4% .009 43.1); --color-taupe-950: oklch(14.7% .004 49.3); --color-black: #000; --color-white: #fff; --spacing: .25rem; --breakpoint-sm: 40rem; --breakpoint-md: 48rem; --breakpoint-lg: 64rem; --breakpoint-xl: 80rem; --breakpoint-2xl: 96rem; --container-3xs: 16rem; --container-2xs: 18rem; --container-xs: 20rem; --container-sm: 24rem; --container-md: 28rem; --container-lg: 32rem; --container-xl: 36rem; --container-2xl: 42rem; --container-3xl: 48rem; --container-4xl: 56rem; --container-5xl: 64rem; --container-6xl: 72rem; --container-7xl: 80rem; --text-xs: .75rem; --text-xs--line-height: calc(1/.75); --text-sm: .875rem; --text-sm--line-height: calc(1.25/.875); --text-base: 1rem; --text-base--line-height: calc(1.5/1); --text-lg: 1.125rem; --text-lg--line-height: calc(1.75/1.125); --text-xl: 1.25rem; --text-xl--line-height: calc(1.75/1.25); --text-2xl: 1.5rem; --text-2xl--line-height: calc(2/1.5); --text-3xl: 1.875rem; --text-3xl--line-height: calc(2.25/1.875); --text-4xl: 2.25rem; --text-4xl--line-height: calc(2.5/2.25); --text-5xl: 3rem; --text-5xl--line-height: 1; --text-6xl: 3.75rem; --text-6xl--line-height: 1; --text-7xl: 4.5rem; --text-7xl--line-height: 1; --text-8xl: 6rem; --text-8xl--line-height: 1; --text-9xl: 8rem; --text-9xl--line-height: 1; --font-weight-thin: 100; --font-weight-extralight: 200; --font-weight-light: 300; --font-weight-normal: 400; --font-weight-medium: 500; --font-weight-semibold: 600; --font-weight-bold: 700; --font-weight-extrabold: 800; --font-weight-black: 900; --tracking-tighter: -.05em; --tracking-tight: -.025em; --tracking-normal: 0em; --tracking-wide: .025em; --tracking-wider: .05em; --tracking-widest: .1em; --leading-tight: 1.25; --leading-snug: 1.375; --leading-normal: 1.5; --leading-relaxed: 1.625; --leading-loose: 2; --radius-xs: .125rem; --radius-sm: .25rem; --radius-md: .375rem; --radius-lg: .5rem; --radius-xl: .75rem; --radius-2xl: 1rem; --radius-3xl: 1.5rem; --radius-4xl: 2rem; --shadow-2xs: 0 1px #0000000d; --shadow-xs: 0 1px 2px 0 #0000000d; --shadow-sm: 0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a; --shadow-md: 0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a; --shadow-lg: 0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a; --shadow-xl: 0 20px 25px -5px #0000001a,0 8px 10px -6px #0000001a; --shadow-2xl: 0 25px 50px -12px #00000040; --inset-shadow-2xs: inset 0 1px #0000000d; --inset-shadow-xs: inset 0 1px 1px #0000000d; --inset-shadow-sm: inset 0 2px 4px #0000000d; --drop-shadow-xs: 0 1px 1px #0000000d; --drop-shadow-sm: 0 1px 2px #00000026; --drop-shadow-md: 0 3px 3px #0000001f; --drop-shadow-lg: 0 4px 4px #00000026; --drop-shadow-xl: 0 9px 7px #0000001a; --drop-shadow-2xl: 0 25px 25px #00000026; --text-shadow-2xs: 0px 1px 0px #00000026; --text-shadow-xs: 0px 1px 1px #0003; --text-shadow-sm: 0px 1px 0px #00000013,0px 1px 1px #00000013,0px 2px 2px #00000013; --text-shadow-md: 0px 1px 1px #0000001a,0px 1px 2px #0000001a,0px 2px 4px #0000001a; --text-shadow-lg: 0px 1px 2px #0000001a,0px 3px 2px #0000001a,0px 4px 8px #0000001a; --ease-in: cubic-bezier(.4,0,1,1); --ease-out: cubic-bezier(0,0,.2,1); --ease-in-out: cubic-bezier(.4,0,.2,1); --animate-spin: spin 1s linear infinite; --animate-ping: ping 1s cubic-bezier(0,0,.2,1)infinite; --animate-pulse: pulse 2s cubic-bezier(.4,0,.6,1)infinite; --animate-bounce: bounce 1s infinite; @keyframes spin { to { transform: rotate(360deg); }}@keyframes ping { 75%,100% { transform: scale(2); opacity: 0; }}@keyframes pulse { 50% { opacity: .5; }}@keyframes bounce { 0%,100% { transform: translateY(-25%); animation-timing-function: cubic-bezier(.8,0,1,1); }50% { transform: none; animation-timing-function: cubic-bezier(0,0,.2,1); }}--blur-xs: 4px; --blur-sm: 8px; --blur-md: 12px; --blur-lg: 16px; --blur-xl: 24px; --blur-2xl: 40px; --blur-3xl: 64px; --perspective-dramatic: 100px; --perspective-near: 300px; --perspective-normal: 500px; --perspective-midrange: 800px; --perspective-distant: 1200px; --aspect-video: 16/9; --default-transition-duration: .15s; --default-transition-timing-function: cubic-bezier(.4,0,.2,1); --default-font-family: --theme(--font-sans,initial); --default-font-feature-settings: --theme(--font-sans--font-feature-settings,initial); --default-font-variation-settings: --theme(--font-sans--font-variation-settings,initial); --default-mono-font-family: --theme(--font-mono,initial); --default-mono-font-feature-settings: --theme(--font-mono--font-feature-settings,initial); --default-mono-font-variation-settings: --theme(--font-mono--font-variation-settings,initial);}@theme default inline reference{--blur: 8px; --shadow: 0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a; --shadow-inner: inset 0 2px 4px 0 #0000000d; --drop-shadow: 0 1px 2px #0000001a,0 1px 1px #0000000f; --radius: .25rem; --max-width-prose: 65ch;}}@layer base{*,:after,:before{box-sizing:border-box;border:0 solid;margin:0;padding:0}::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::-webkit-file-upload-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:--theme(--default-font-family,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue","Noto Sans",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:--theme(--default-font-feature-settings,normal);font-variation-settings:--theme(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{color:inherit;border-top-width:1px;height:0}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;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:--theme(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:--theme(--default-mono-font-feature-settings,normal);font-variation-settings:--theme(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{position:relative;vertical-align:baseline;font-size:75%;line-height:0}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::-webkit-file-upload-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:-webkit-any([multiple],[size])) optgroup{font-weight:bolder}:where(select:-moz-any([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:-webkit-any([multiple],[size])) optgroup option{padding-inline-start:20px}:where(select:-moz-any([multiple],[size])) optgroup option{padding-inline-start:20px}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::-webkit-file-upload-button{margin-inline-end:4px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports ( not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{text-align:inherit;min-height:1lh}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block-start:0;padding-block-end:0}::-webkit-datetime-edit-year-field{padding-block-start:0;padding-block-end:0}::-webkit-datetime-edit-month-field{padding-block-start:0;padding-block-end:0}::-webkit-datetime-edit-day-field{padding-block-start:0;padding-block-end:0}::-webkit-datetime-edit-hour-field{padding-block-start:0;padding-block-end:0}::-webkit-datetime-edit-minute-field{padding-block-start:0;padding-block-end:0}::-webkit-datetime-edit-second-field{padding-block-start:0;padding-block-end:0}::-webkit-datetime-edit-millisecond-field{padding-block-start:0;padding-block-end:0}::-webkit-datetime-edit-meridiem-field{padding-block-start:0;padding-block-end:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button{appearance:button}input:where([type=button],[type=reset],[type=submit]){appearance:button}::-webkit-file-upload-button{appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer utilities{@tailwind utilities;}:root{--buncss-light: ;--buncss-dark:initial;color-scheme:dark;--page:oklch(.16 .02 307);--surface:oklch(.19 .022 307);--surface-2:oklch(.235 .026 307);--border:oklch(1 0 0/9%);--border-strong:oklch(1 0 0/13%);--text:oklch(.92 .01 307);--muted:oklch(.71 .016 307);--dim:oklch(.53 .018 307);--accent:oklch(.674 .23 341);--accent-fg:oklch(.2 .07 341);--accent-muted:oklch(.674 .23 341/18%);--link:oklch(.817 .112 205);--success:oklch(.76 .14 150);--danger:oklch(.66 .19 25);--warning:oklch(.79 .14 85);--text-primary:var(--text);--text-secondary:var(--muted);--text-muted:var(--dim);--border-subtle:var(--border);--accent-red:var(--danger);--accent-green:var(--success);--accent-cyan:var(--link);--bg-hover:var(--surface-2);--bg-elevated:var(--surface-2);--select-chevron:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23999' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");--radius-sm:3px;--radius-md:6px;--radius-lg:8px}@media (prefers-color-scheme:light){:root:not([data-theme]){--buncss-light:initial;--buncss-dark: ;color-scheme:light;--page:oklch(.985 .004 307);--surface:oklch(1 0 0);--surface-2:oklch(.965 .006 307);--border:oklch(0 0 0/10%);--border-strong:oklch(0 0 0/15%);--text:oklch(.26 .03 307);--muted:oklch(.46 .03 307);--dim:oklch(.58 .025 307);--accent:oklch(.62 .23 341);--accent-fg:oklch(.99 .01 341);--accent-muted:oklch(.62 .23 341/14%);--link:oklch(.58 .13 230);--success:oklch(.55 .13 150);--danger:oklch(.55 .19 25);--select-chevron:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23555' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");--warning:oklch(.6 .13 85)}}[data-theme=light]{--buncss-light:initial;--buncss-dark: ;color-scheme:light;--page:oklch(.985 .004 307);--surface:oklch(1 0 0);--surface-2:oklch(.965 .006 307);--border:oklch(0 0 0/10%);--border-strong:oklch(0 0 0/15%);--text:oklch(.26 .03 307);--muted:oklch(.46 .03 307);--dim:oklch(.58 .025 307);--accent:oklch(.62 .23 341);--accent-fg:oklch(.99 .01 341);--accent-muted:oklch(.62 .23 341/14%);--link:oklch(.58 .13 230);--success:oklch(.55 .13 150);--danger:oklch(.55 .19 25);--select-chevron:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23555' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");--warning:oklch(.6 .13 85)}@layer base{*{box-sizing:border-box}html{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{background:var(--page);color:var(--text);min-height:100vh;margin:0;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif}button:focus-visible{outline:2px solid var(--link);outline-offset:2px}a:focus-visible{outline:2px solid var(--link);outline-offset:2px}[tabindex]:focus-visible{outline:2px solid var(--link);outline-offset:2px}}.stats-app-container{display:flex;background:var(--page);color:var(--text);min-height:100vh}.stats-nav-rail{background:var(--surface);border-right:1px solid var(--border);display:flex;flex-direction:column;flex-shrink:0;width:240px}.stats-desktop-nav{display:flex}@media (max-width:1023px){.stats-desktop-nav{display:none}}.stats-nav-rail-header{border-bottom:1px solid var(--border);display:flex;align-items: center;height:56px;padding:20px 24px}.stats-logo-container{display:flex;flex-direction:column}.stats-logo-text{letter-spacing:.1em;color:var(--text);font-size:14px;font-weight:700}.stats-logo-subtext{text-transform:uppercase;letter-spacing:.05em;color:var(--muted);font-size:10px}.stats-nav-rail-menu{display:flex;flex-direction:column;flex:1;gap:4px;padding:16px 12px}.stats-nav-rail-item{display:flex;color:var(--muted);border-radius:var(--radius-md);cursor:pointer;text-align:left;background:0 0;border:none;align-items: center;gap:12px;padding:10px 16px;transition:all .15s;font-size:13px;font-weight:500}.stats-nav-rail-item:hover{color:var(--text);background:var(--surface-2)}.stats-nav-rail-item[data-active=true]{color:var(--accent);background:var(--accent-muted);position:relative}.stats-nav-rail-item[data-active=true]:before{content:"";position:absolute;background:var(--accent);border-radius:0 3px 3px 0;width:3px;height:18px;top:50%;left:0;transform:translateY(-50%)}.stats-nav-rail-item-icon{flex-shrink:0}.stats-nav-rail-footer{border-top:1px solid var(--border);padding:16px 24px}.stats-version-tag{color:var(--dim);font-size:11px}.stats-main-pane{display:flex;flex-direction:column;flex:1;min-width:0}.stats-top-bar{background:var(--surface);border-bottom:1px solid var(--border);display:flex;justify-content:space-between;align-items: center;height:56px;padding:0 24px}@media (max-width:767px){.stats-top-bar{flex-wrap:wrap;gap:12px;height:auto;min-height:56px;padding:8px 16px}}.stats-top-bar-left{display:flex;align-items: center;gap:12px}.stats-mobile-menu-btn{display:none;color:var(--text);cursor:pointer;background:0 0;border:none;padding:4px}@media (max-width:1023px){.stats-mobile-menu-btn{display:inline-flex;justify-content:center;align-items: center}}.stats-page-title{color:var(--text);margin:0;font-size:16px;font-weight:600}.stats-top-bar-right{display:flex;align-items: center;gap:16px}@media (max-width:767px){.stats-top-bar-right{justify-content:space-between;gap:8px;width:100%}}.stats-top-bar-meta{display:flex;align-items: center}.stats-last-updated{color:var(--dim);font-variant-numeric:tabular-nums;font-size:11px}.stats-content-area{overflow-y:auto;flex:1}.stats-content-inner{display:flex;flex-direction:column;gap:24px;max-width:1560px;margin:0 auto;padding:24px}@media (max-width:767px){.stats-content-inner{gap:16px;padding:16px}}.stats-mobile-drawer-overlay{position:fixed;backdrop-filter:none;z-index:100;background:#0006;inset:0}.stats-mobile-drawer{position:absolute;background:var(--surface);border-right:1px solid var(--border);display:flex;z-index:101;animation:.2s ease-out slideIn;flex-direction:column;width:260px;top:0;bottom:0;left:0}@keyframes slideIn{0%{transform:translate(-100%)}to{transform:translate(0)}}.stats-mobile-drawer-header{display:flex;border-bottom:1px solid var(--border);justify-content:space-between;align-items: center;height:56px;padding:0 16px 0 24px}.stats-mobile-nav{display:flex;height:calc(100% - 56px)}.stats-button{display:inline-flex;border-radius:var(--radius-md);cursor:pointer;border:1px solid #0000;justify-content:center;align-items: center;gap:8px;padding:8px 14px;transition:all .15s;font-family:inherit;font-size:13px;font-weight:500}.stats-button:active:not(:disabled){transform:translateY(1px)}.stats-button-primary{background:var(--accent);color:var(--accent-fg)}.stats-button-primary:hover:not(:disabled){opacity:.9}.stats-button-primary:disabled{opacity:.5;cursor:not-allowed}.stats-button-secondary{background:var(--surface-2);color:var(--text);border-color:var(--border)}.stats-button-secondary:hover:not(:disabled){background:var(--border)}.stats-button-secondary:disabled{opacity:.5;cursor:not-allowed}.stats-range-control{display:flex;background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius-md);padding:2px}.stats-range-control-btn{color:var(--muted);border-radius:var(--radius-sm);cursor:pointer;background:0 0;border:none;padding:4px 10px;transition:all .1s;font-size:12px;font-weight:500}.stats-range-control-btn:hover{color:var(--text)}.stats-range-control-btn[data-active=true]{color:var(--text);background:var(--surface);box-shadow:0 1px 2px #0000002e}.stats-select{appearance:none;color:var(--text);background-color:var(--surface-2);background-image:var(--select-chevron);border:1px solid var(--border);border-radius:var(--radius-md);cursor:pointer;text-overflow:ellipsis;background-position:right 10px center;background-repeat:no-repeat;max-width:100%;padding:6px 28px 6px 12px;transition:border-color .15s,background-color .15s;font-family:inherit;font-size:13px;font-weight:500}.stats-select:hover:not(:disabled){border-color:var(--border-strong);background-color:var(--bg-hover)}.stats-select:focus-visible{outline:2px solid var(--link);outline-offset:1px}.stats-select:disabled{opacity:.5;cursor:not-allowed}@media (pointer:coarse){.stats-select{font-size:16px}}.stats-select option{background-color:var(--surface);color:var(--text)}@media (forced-colors:active){.stats-select{appearance:auto}}.stats-sync-container{display:flex;align-items: center;gap:12px}.stats-sync-status-msg{font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:200px;font-size:11px}.stats-sync-status-msg[data-type=success]{color:var(--success)}.stats-sync-status-msg[data-type=error]{color:var(--danger)}.stats-sync-icon{flex-shrink:0}.stats-spin{animation:1s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.stats-panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);display:flex;flex-direction:column}.stats-panel-header{border-bottom:1px solid var(--border);display:flex;justify-content:space-between;align-items: center;gap:16px;padding:16px 20px}@media (max-width:480px){.stats-panel-header{flex-direction:column;align-items: flex-start;gap:8px}}.stats-panel-header-titles{display:flex;flex-direction:column}.stats-panel-title{color:var(--text);margin:0;font-size:14px;font-weight:600}.stats-panel-subtitle{color:var(--muted);margin:2px 0 0;font-size:12px}.stats-panel-actions{display:flex;align-items: center;gap:12px}.stats-panel-body{padding:20px}.stats-metric-cluster{display:flex;flex-direction:column;gap:16px}.stats-metric-primary-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:16px}@media (max-width:1023px){.stats-metric-primary-grid{grid-template-columns:repeat(2,1fr)}}@media (max-width:480px){.stats-metric-primary-grid{grid-template-columns:1fr}}.stats-metric-secondary-grid{display:grid;grid-template-columns:repeat(8,1fr);gap:12px}@media (max-width:1279px){.stats-metric-secondary-grid{grid-template-columns:repeat(4,1fr)}}@media (max-width:767px){.stats-metric-secondary-grid{grid-template-columns:repeat(2,1fr)}}.stats-metric-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);display:flex;flex-direction:column;justify-content:space-between;padding:16px}.stats-metric-card.primary{padding:20px 18px}.stats-metric-card.primary .stats-metric-label{color:var(--accent)}.stats-metric-card.secondary{padding:12px 14px}.stats-metric-label{text-transform:uppercase;letter-spacing:.05em;color:var(--muted);margin-bottom:8px;font-size:11px;font-weight:600}.stats-metric-value{color:var(--text);font-variant-numeric:tabular-nums;font-size:20px;font-weight:700}.stats-metric-card.secondary .stats-metric-value{font-size:15px;font-weight:600}.stats-table-wrapper{width:100%}.stats-table-container{overflow-x:auto;width:100%}.stats-table{border-collapse:collapse;font-variant-numeric:tabular-nums;width:100%;font-size:13px}.stats-table-th{text-transform:uppercase;letter-spacing:.05em;color:var(--muted);border-bottom:2px solid var(--border);padding:12px 16px;font-size:11px;font-weight:600}.stats-table-td{border-bottom:1px solid var(--border);color:var(--text);padding:10px 16px}.stats-table-tr{background:0 0}.stats-table-tr-clickable{cursor:pointer;transition:background .12s,box-shadow .12s}.stats-table-tr-clickable:hover{background:var(--surface-2);box-shadow:inset 2px 0 0 var(--accent)}.stats-text-left{text-align:left}.stats-text-right{text-align:right}.stats-table-empty{text-align:center;color:var(--muted);border:1px dashed var(--border);border-radius:var(--radius-lg);padding:40px;font-size:13px}.stats-progress-bar-track{background:var(--surface-2);overflow:hidden;border-radius:999px}.stats-progress-bar-fill{border-radius:inherit;height:100%;transition:width .18s}.stats-progress-bar-fill[data-variant=link]{background:var(--link)}.stats-progress-bar-fill[data-variant=success]{background:var(--success)}.stats-table-mobile-only{display:none}.stats-table-desktop-only{overflow-x:auto;width:100%}@media (max-width:767px){.stats-table-desktop-only{display:none}.stats-table-mobile-only{display:block}}.stats-table-mobile-list{display:flex;flex-direction:column;gap:12px}.stats-table-mobile-card-wrapper{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);padding:14px}.stats-status-pill{display:inline-flex;border-radius:100px;justify-content:center;align-items: center;padding:2px 8px;font-size:11px;font-weight:600;line-height:1.2}.stats-status-pill[data-variant=success]{background:color-mix(in srgb,var(--success)18%,transparent);color:var(--success)}.stats-status-pill[data-variant=danger]{background:color-mix(in srgb,var(--danger)18%,transparent);color:var(--danger)}.stats-status-pill[data-variant=warning]{background:color-mix(in srgb,var(--warning)18%,transparent);color:var(--warning)}.stats-status-pill[data-variant=info]{background:color-mix(in srgb,var(--link)18%,transparent);color:var(--link)}.stats-status-pill[data-variant=default]{background:var(--surface-2);color:var(--muted)}.stats-segmented-control{display:flex;background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius-md);gap:2px;padding:2px}.stats-segmented-control-btn{color:var(--muted);border-radius:var(--radius-sm);cursor:pointer;white-space:nowrap;background:0 0;border:none;padding:6px 12px;transition:all .1s;font-size:12px;font-weight:500}.stats-segmented-control-btn:hover{color:var(--text)}.stats-segmented-control-btn[data-active=true]{color:var(--text);background:var(--surface);box-shadow:0 1px 2px #0000002e}.stats-drawer-overlay{position:fixed;z-index:100;display:flex;background:#00000080;justify-content:flex-end;inset:0}.stats-drawer{background:var(--surface);border-left:1px solid var(--border);display:flex;animation:.25s cubic-bezier(.16,1,.3,1) drawerSlide;flex-direction:column;width:600px;max-width:100%;height:100%;box-shadow:-4px 0 24px #00000040}@keyframes drawerSlide{0%{transform:translate(100%)}to{transform:translate(0)}}.stats-drawer-header{border-bottom:1px solid var(--border);display:flex;background:var(--surface);flex-shrink:0;justify-content:space-between;align-items: center;height:56px;padding:0 24px}.stats-drawer-header-left{display:flex;align-items:baseline;gap:12px}.stats-drawer-title{color:var(--text);margin:0;font-size:15px;font-weight:600}.stats-drawer-id{color:var(--muted);font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:11px}.stats-drawer-close-btn{color:var(--muted);cursor:pointer;display:inline-flex;border-radius:var(--radius-sm);background:0 0;border:none;justify-content:center;align-items: center;padding:4px;transition:all .1s}.stats-drawer-close-btn:hover{color:var(--text);background:var(--surface-2)}.stats-drawer-body{overflow-y:auto;flex:1;padding:24px}.stats-drawer-content{display:flex;flex-direction:column;gap:24px}.stats-drawer-status-card{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius-lg);padding:16px}.stats-drawer-status-row{display:flex;justify-content:space-between;align-items: flex-start;gap:16px}.stats-drawer-model{color:var(--text);font-size:16px;font-weight:700}.stats-drawer-provider{color:var(--muted);margin-top:2px;font-size:12px}.stats-drawer-error-block{border-top:1px solid var(--border);margin-top:14px;padding-top:12px}.stats-drawer-error-label{text-transform:uppercase;letter-spacing:.05em;color:var(--danger);margin-bottom:4px;font-size:11px;font-weight:600}.stats-drawer-error-text{color:var(--text);white-space:pre-wrap;word-break:break-all;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:12px}.stats-drawer-metrics-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}.stats-drawer-metric-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);display:flex;flex-direction:column;justify-content:center;padding:14px}.stats-drawer-metric-label{display:flex;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);align-items: center;gap:6px;margin-bottom:6px;font-size:11px;font-weight:600}.stats-drawer-metric-icon{color:var(--dim)}.stats-drawer-metric-value{color:var(--text);font-variant-numeric:tabular-nums;font-size:16px;font-weight:700}.stats-drawer-metric-sub{color:var(--muted);font-variant-numeric:tabular-nums;margin-top:2px;font-size:11px}.stats-drawer-json-blocks{display:flex;flex-direction:column;gap:16px}.stats-json-block{border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--surface);overflow:hidden}.stats-json-block-header{background:var(--surface-2);border-bottom:1px solid var(--border);display:flex;cursor:pointer;user-select:none;justify-content:space-between;align-items: center;padding:10px 16px;font-size:12px;font-weight:600}.stats-json-block-header:hover{background:var(--border)}.stats-json-block-title{color:var(--text)}.stats-json-block-toggle-indicator{color:var(--muted)}.stats-json-block-content-wrapper{background:var(--page);overflow-x:auto;padding:16px}.stats-json-block-content{color:var(--text);margin:0;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:12px;line-height:1.5}.stats-skeleton{background:var(--surface-2);position:relative;overflow:hidden;border-radius:var(--radius-sm)}.stats-skeleton[data-variant=text]{height:14px;margin-top:4px;margin-bottom:4px}.stats-skeleton[data-variant=circle]{border-radius:50%}.stats-skeleton:after{content:"";position:absolute;animation:1.5s infinite shimmer;background:linear-gradient(90deg,#0000 0%,#ffffff0d 50%,#0000 100%);inset:0;transform:translate(-100%)}@media (prefers-color-scheme:light){.stats-skeleton:after{background:linear-gradient(90deg,#0000 0%,#00000008 50%,#0000 100%)}}@keyframes shimmer{to{transform:translate(100%)}}@media (prefers-reduced-motion:reduce){.stats-skeleton:after{animation:none}}.stats-boundary-skeleton{border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--surface);padding:20px}.stats-empty-state,.stats-error-state{display:flex;text-align:center;background:var(--surface);border:1px dashed var(--border);border-radius:var(--radius-lg);flex-direction:column;justify-content:center;align-items: center;padding:48px 24px}.stats-empty-state-message{color:var(--muted);margin:0;font-size:13px}.stats-error-state-content{max-width:360px}.stats-error-state-title{color:var(--text);margin:0 0 8px;font-size:14px;font-weight:600}.stats-error-state-message{color:var(--danger);word-break:break-word;margin:0 0 16px;font-size:12px}.stats-error-state-btn{margin:0 auto}.stats-text-primary{color:var(--text)}.stats-text-secondary{color:var(--muted)}.stats-text-muted{color:var(--dim)}.stats-text-warning{color:var(--warning)}.stats-text-xs{font-size:12px}.stats-font-medium{font-weight:500}.stats-font-semibold{font-weight:600}*{scrollbar-width:thin;scrollbar-color:var(--border-strong)transparent}*::-webkit-scrollbar{width:10px;height:10px}*::-webkit-scrollbar-track{background:0 0}*::-webkit-scrollbar-thumb{background:var(--border-strong);background-clip:padding-box;border:2px solid #0000;border-radius:999px}*::-webkit-scrollbar-thumb:hover{background:var(--dim);background-clip:padding-box;border:2px solid #0000}*::-webkit-scrollbar-corner{background:0 0}@media (prefers-reduced-motion:reduce){.stats-button,.stats-table-tr-clickable,.stats-nav-rail-item,.stats-range-control-btn,.stats-segmented-control-btn{transition:none}.stats-button:active:not(:disabled){transform:none}.stats-mobile-drawer,.stats-drawer{animation:none}}.stats-logo-container{display:grid;grid-template-columns:auto 1fr;align-items: center;column-gap:10px}.stats-logo-container:before{content:"";grid-row:1/3;background:linear-gradient(135deg,#ed4abf 0%,#9b4dff 50%,#5ad8e6 100%);border-radius:4px;width:16px;height:16px}.stats-logo-text,.stats-logo-subtext{grid-column:2}.stats-json-actions{display:flex;align-items: center;gap:12px}.stats-json-copy-btn{display:inline-flex;color:var(--muted);border:1px solid var(--border);border-radius:var(--radius-sm);cursor:pointer;background:0 0;align-items: center;gap:5px;padding:3px 8px;transition:color .12s,background .12s;font-family:inherit;font-size:11px;font-weight:600}.stats-json-copy-btn:hover{color:var(--text);background:var(--surface-2)}.stats-empty-state-icon{color:var(--dim);margin-bottom:12px}@media (prefers-reduced-motion:reduce){.stats-json-copy-btn{transition:none}}.stats-theme-toggle{display:inline-flex;border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);color:var(--muted);cursor:pointer;flex-shrink:0;justify-content:center;align-items: center;width:32px;height:32px;transition:color .14s,background .14s,border-color .14s}.stats-theme-toggle:hover{color:var(--text);border-color:var(--border-strong)}@media (prefers-reduced-motion:reduce){.stats-theme-toggle{transition:none}}.stats-trace-view{display:flex;flex-direction:column;gap:14px}.stats-trace-header{display:flex;flex-wrap:wrap;align-items: center;gap:12px;min-width:0}.stats-trace-back{display:inline-flex;color:var(--muted);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);cursor:pointer;align-items: center;gap:6px;padding:6px 12px;transition:color .14s,border-color .14s;font-size:12px}.stats-trace-back:hover{color:var(--text);border-color:var(--border-strong)}.stats-trace-back:focus-visible{outline:2px solid var(--link);outline-offset:2px}.stats-trace-title{color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;margin:0;font-size:15px;font-weight:600}.stats-trace-cwd{color:var(--dim);border:1px solid var(--border);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-radius:999px;max-width:280px;padding:3px 10px;font-size:11px}.stats-trace-summary{display:flex;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden;flex-wrap:wrap}.stats-trace-summary-cell{display:flex;border-right:1px solid var(--border);flex-direction:column;gap:3px;min-width:76px;padding:10px 16px}.stats-trace-summary-cell:last-child{border-right:none}.stats-trace-summary-label{text-transform:uppercase;letter-spacing:.07em;color:var(--dim);font-size:9px}.stats-trace-summary-value{color:var(--text);font-variant-numeric:tabular-nums;font-size:13px;font-weight:500}.stats-trace-toolbar{display:flex;flex-wrap:wrap;align-items: center;gap:12px}.stats-trace-toolbar-hint{color:var(--dim);margin-left:auto;font-size:10px}.stats-trace-input{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);color:var(--text);padding:6px 10px;font-family:inherit;font-size:12px}@media (pointer:coarse){.stats-trace-input{font-size:16px}}.stats-trace-input::-webkit-search-cancel-button{filter:invert(1)}@media (prefers-color-scheme:light){:root:not([data-theme]) .stats-trace-input::-webkit-search-cancel-button{filter:none}}[data-theme=light] .stats-trace-input::-webkit-search-cancel-button{filter:none}.stats-trace-input:focus-visible{outline:2px solid var(--link);outline-offset:1px}.stats-trace-input::placeholder{color:var(--dim)}.stats-trace-check{display:inline-flex;color:var(--muted);cursor:pointer;user-select:none;align-items: center;gap:6px;font-size:12px}.stats-trace-check input[type=checkbox]{accent-color:var(--accent)}.stats-trace-icon-btn{display:inline-flex;border:1px solid var(--border);border-radius:var(--radius-md);color:var(--muted);cursor:pointer;background:0 0;justify-content:center;align-items: center;width:26px;height:26px;transition:color .14s,border-color .14s}.stats-trace-icon-btn:hover:not(:disabled){color:var(--text);border-color:var(--border-strong)}.stats-trace-icon-btn:focus-visible{outline:2px solid var(--link);outline-offset:2px}.stats-trace-icon-btn:disabled{opacity:.4;cursor:default}.stats-trace-timeline-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);display:flex;flex-direction:column;gap:10px;padding:12px}.stats-trace-timeline{position:relative;display:flex;overflow-y:auto;overflow-x:hidden;max-height:560px}.stats-trace-canvas{cursor:grab;outline:none;touch-action:none;border-radius:var(--radius-sm)}.stats-trace-canvas:focus-visible{outline:2px solid var(--link);outline-offset:2px}.stats-trace-canvas:active{cursor:grabbing}.stats-trace-chevron{display:inline-flex;cursor:pointer;color:var(--muted);background:0 0;border:none;padding:0}.stats-trace-chevron:hover{color:var(--text)}.stats-trace-gutter-track{color:var(--text);font-size:11px;font-weight:500}.stats-trace-gutter-model{color:var(--dim);font-size:9px}.stats-trace-gutter-lane{position:absolute;color:var(--dim);text-transform:uppercase;letter-spacing:.08em;font-size:8px}.stats-trace-list{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);overflow-y:auto;height:340px}.stats-trace-row{display:flex;border:none;border-bottom:1px solid var(--border);text-align:left;cursor:pointer;background:0 0;align-items: center;gap:10px;width:100%;height:28px;padding:0 12px;transition:background .1s}.stats-trace-row:hover{background:var(--bg-hover)}.stats-trace-row:focus-visible{outline:2px solid var(--link);outline-offset:-2px}.stats-trace-row[data-selected=true]{background:var(--accent-muted)}.stats-trace-row-static{cursor:default}.stats-trace-row-static:hover{background:0 0}.stats-trace-kind{text-transform:uppercase;letter-spacing:.06em;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-radius:3px;flex-shrink:0;width:58px;padding:2px 0;font-size:8px}.stats-trace-row-meta{color:var(--dim);font-variant-numeric:tabular-nums;display:flex;flex-shrink:0;gap:10px;margin-left:auto;font-size:10px}@media (prefers-reduced-motion:reduce){.stats-trace-back,.stats-trace-icon-btn,.stats-trace-row{transition:none}}
|
|
1
|
+
:root,[data-theme=dark]{--buncss-light: ;--buncss-dark:initial;color-scheme:dark;--bg:#000;--panel:#09090a;--card:#0e0e10;--raised:#17171a;--overlay:#0e0e10c7;--hover:#ffffff09;--press:#ffffff0f;--selected:#ffffff13;--line-1:#ffffff0f;--line-2:#ffffff17;--line-3:#ffffff24;--line-4:#ffffff38;--ink-1:#ededef;--ink-2:#a0a0a8;--ink-3:#6c6c74;--ink-4:#46464c;--ink-inverse:#0a0a0b;--accent-a:#5ad8e6;--accent-b:#ed4abf;--accent:#f068c8;--accent-soft:#ed4abf24;--accent-line:#ed4abf59;--accent-gradient:linear-gradient(100deg,var(--accent-a),var(--accent-b));--focus:#5ad8e6;--ok:#3ecf8e;--ok-soft:#3ecf8e21;--warn:#f5a524;--warn-soft:#f5a52421;--bad:#ff6166;--bad-soft:#ff616621;--live:#3ecf8e;--chart-grid:#ffffff0e;--chart-axis:#5c5c64;--chart-cursor:#ffffff0d;--chart-primary:#5ad8e6;--chart-secondary:#ed4abf;--shadow-1:0 1px 0 #ffffff08 inset,0 1px 2px #00000080;--shadow-2:0 8px 24px #0000008c,0 1px 0 #ffffff0d inset;--shadow-3:0 24px 64px #000000b3,0 1px 0 #ffffff0f inset}[data-theme=light]{--buncss-light:initial;--buncss-dark: ;color-scheme:light;--bg:#f2f2f3;--panel:#fff;--card:#fff;--raised:#f6f6f7;--overlay:#fffc;--hover:#00000008;--press:#0000000d;--selected:#0000000f;--line-1:#0000000f;--line-2:#00000017;--line-3:#00000024;--line-4:#00000038;--ink-1:#151518;--ink-2:#5a5a63;--ink-3:#8b8b94;--ink-4:#b9b9c0;--ink-inverse:#fff;--accent-a:#1fa9bb;--accent-b:#d42ea3;--accent:#c42596;--accent-soft:#d42ea31a;--accent-line:#d42ea34d;--focus:#1fa9bb;--ok:#12a36b;--ok-soft:#12a36b1c;--warn:#c77c02;--warn-soft:#c77c021c;--bad:#dc3a40;--bad-soft:#dc3a401a;--live:#12a36b;--chart-grid:#0000000f;--chart-axis:#9a9aa2;--chart-cursor:#0000000a;--chart-primary:#1fa9bb;--chart-secondary:#d42ea3;--shadow-1:0 1px 2px #0000000a;--shadow-2:0 8px 24px #0000001a;--shadow-3:0 24px 64px #00000029}:root{--font-sans:"Inter var","Inter",ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;--font-mono:ui-monospace,"SF Mono","JetBrains Mono","Fira Code",Menlo,Consolas,monospace;--r-chip:6px;--r-control:8px;--r-card:12px;--r-panel:16px;--r-pill:999px;--topbar-h:52px;--sidebar-w:224px;--gutter:28px;--ease:cubic-bezier(.2,0,0,1);--ease-out:cubic-bezier(.16,1,.3,1);--dur-1:.12s;--dur-2:.2s;--dur-3:.36s;--stagger:40ms}*,*:before,*:after{box-sizing:border-box}html,body{margin:0;padding:0}html{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility;background:var(--bg)}body{font-family:var(--font-sans);color:var(--ink-1);background:var(--bg);font-feature-settings:"cv11","ss01";min-height:100dvh;font-size:13.5px;line-height:1.5}h1,h2,h3,h4,p,ul,ol,figure{margin:0;padding:0}ul,ol{list-style:none}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer;background:0 0;border:0;padding:0}button:disabled{cursor:default}a{color:inherit;text-decoration:none}svg{display:block;flex-shrink:0}table{border-collapse:collapse;border-spacing:0}code,pre,kbd{font-family:var(--font-mono)}::selection{background:var(--accent-soft);color:var(--ink-1)}:focus-visible{outline:2px solid var(--focus);outline-offset:2px;border-radius:4px}[hidden]{display:none!important}*{scrollbar-width:thin;scrollbar-color:var(--line-3)transparent}.mono{font-family:var(--font-mono);font-size:.93em}.num{font-family:var(--font-mono);font-variant-numeric:tabular-nums;letter-spacing:-.01em;font-size:.93em}.muted{color:var(--ink-2)}.dim{color:var(--ink-3)}.micro{color:var(--ink-3);font-size:12px;font-weight:500;line-height:1.4}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.tone-ok{color:var(--ok)}.tone-warn{color:var(--warn)}.tone-bad{color:var(--bad)}.tone-accent{color:var(--accent)}.gradient-text{background:var(--accent-gradient);color:#0000;-webkit-background-clip:text;background-clip:text}@keyframes rise{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}@keyframes fade{0%{opacity:0}to{opacity:1}}@keyframes ping{0%{transform:scale(1);opacity:.7}80%,to{transform:scale(2.6);opacity:0}}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}@keyframes indeterminate{0%{transform:translate(-100%)}to{transform:translate(250%)}}@keyframes spin{to{transform:rotate(360deg)}}@keyframes flash{0%{color:var(--accent-a)}to{color:inherit}}.rise{animation:rise var(--dur-3)var(--ease-out)backwards;animation-delay:calc(var(--i,0)*var(--stagger))}.spin{animation:.9s linear infinite spin}@media (prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:1ms!important;animation-delay:0s!important;transition-duration:1ms!important}}.shell-ambient{position:fixed;pointer-events:none;z-index:0;background:radial-gradient(60rem 28rem at 12% -10%,color-mix(in srgb,var(--accent-a)7%,transparent),transparent 70%),radial-gradient(50rem 26rem at 95% -12%,color-mix(in srgb,var(--accent-b)6%,transparent),transparent 70%);inset:0}.topbar{position:fixed;height:var(--topbar-h);z-index:40;display:flex;background:color-mix(in srgb,var(--bg)72%,transparent);backdrop-filter:blur(14px)saturate(160%);-webkit-backdrop-filter:blur(14px)saturate(160%);transition:border-color var(--dur-2)var(--ease);border-bottom:1px solid #0000;align-items: center;gap:12px;padding:0 14px 0 18px;top:0;left:0;right:0}.topbar[data-scrolled=true]{border-bottom-color:var(--line-1)}.topbar-brand{display:flex;min-width:calc(var(--sidebar-w) - 18px);letter-spacing:-.01em;align-items: center;gap:10px;font-weight:600}.topbar-mark{display:block;flex:none}.topbar-slash{color:var(--ink-4);font-size:18px;font-weight:300}.topbar-title{color:var(--ink-1);white-space:nowrap;font-weight:500}.topbar-spacer{flex:1}.topbar-actions{display:flex;align-items: center;gap:8px}.topbar-menu{display:none}.topbar-progress{position:absolute;overflow:hidden;pointer-events:none;height:2px;bottom:-1px;left:0;right:0}.topbar-progress-fill{background:var(--accent-gradient);transition:width var(--dur-3)var(--ease);box-shadow:0 0 12px var(--accent-b);height:100%}.topbar-progress-fill[data-indeterminate=true]{animation:indeterminate 1.2s var(--ease)infinite;width:40%!important}.sidebar{position:fixed;top:var(--topbar-h);width:var(--sidebar-w);overflow-y:auto;scrollbar-width:none;display:flex;z-index:30;flex-direction:column;gap:18px;padding:8px 10px 14px;bottom:0;left:0}.sidebar::-webkit-scrollbar{display:none}.nav-group{display:flex;flex-direction:column;gap:1px}.nav-heading{color:var(--ink-3);padding:0 10px 6px;font-size:12px;font-weight:500}.nav-row{display:flex;border-radius:var(--r-control);color:var(--ink-2);text-align:left;transition:background var(--dur-1)var(--ease),color var(--dur-1)var(--ease);align-items: center;gap:10px;width:100%;height:32px;padding:0 10px;font-weight:450}.nav-row:hover{background:var(--hover);color:var(--ink-1)}.nav-row:active{transform:scale(.99)}.nav-row[data-active=true]{background:var(--selected);color:var(--ink-1)}.nav-row svg{color:var(--ink-3);transition:color var(--dur-1)var(--ease)}.nav-row[data-active=true] svg{color:var(--accent)}.nav-row-label{flex:1}.nav-row kbd{color:var(--ink-4);opacity:0;transition:opacity var(--dur-1)var(--ease);font-size:10.5px}.nav-row:hover kbd{opacity:1}.sidebar-foot{border-radius:var(--r-card);border:1px solid var(--line-1);background:var(--card);display:flex;flex-direction:column;gap:6px;margin-top:auto;padding:10px}.shell-panel{position:relative;z-index:1;margin:var(--topbar-h)8px 8px var(--sidebar-w);min-height:calc(100dvh - var(--topbar-h) - 8px);background:var(--panel);border-radius:var(--r-panel);border:1px solid var(--line-1);box-shadow:var(--shadow-1);overflow:clip}.shell-content{padding:26px var(--gutter)48px;max-width:1560px;margin:0 auto}.drawer-scrim{position:fixed;z-index:60;animation:fade var(--dur-2)var(--ease)both;background:#00000080;inset:0}@media (max-width:1360px){:root{--sidebar-w:204px;--gutter:22px}}@media (max-width:900px){:root{--gutter:16px}.topbar-brand{min-width:0}.topbar-menu{display:inline-flex}.sidebar{z-index:70;background:var(--overlay);backdrop-filter:blur(18px)saturate(160%);-webkit-backdrop-filter:blur(18px)saturate(160%);border-right:1px solid var(--line-2);transition:transform var(--dur-3)var(--ease-out);width:260px;padding-top:16px;top:0;transform:translate(-102%)}.sidebar[data-open=true]{box-shadow:var(--shadow-3);transform:none}.shell-panel{margin-left:8px}.topbar-hide-narrow{display:none!important}}.page{display:flex;flex-direction:column;gap:20px}.page-header{display:flex;flex-wrap:wrap;justify-content:space-between;align-items: flex-end;gap:16px;padding-bottom:4px}.page-title{letter-spacing:-.02em;font-size:22px;font-weight:600;line-height:1.2}.page-description{color:var(--ink-2);max-width:72ch;margin-top:4px}.page-actions{display:flex;flex-wrap:wrap;align-items: center;gap:8px}.grid{display:grid;gap:16px}.grid-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-main-side{grid-template-columns:minmax(0,2fr)minmax(0,1fr)}@media (max-width:1100px){.grid-2,.grid-3,.grid-main-side{grid-template-columns:minmax(0,1fr)}}.row{display:flex;align-items: center;gap:8px;min-width:0}.stack{display:flex;flex-direction:column;gap:4px;min-width:0}.card{position:relative;border-radius:var(--r-card);background:linear-gradient(var(--card),var(--card))padding-box,linear-gradient(180deg,var(--line-3),var(--line-1)40%)border-box;box-shadow:var(--shadow-1);display:flex;border:1px solid #0000;flex-direction:column;min-width:0}.card-header{display:flex;flex-wrap:wrap;justify-content:space-between;align-items: flex-start;gap:12px;padding:14px 16px 0}.card-titles{display:flex;flex-direction:column;gap:2px;min-width:0}.card-title{letter-spacing:-.005em;display:flex;align-items: center;gap:8px;font-size:14px;font-weight:550}.card-description{color:var(--ink-3);font-size:12.5px}.card-actions{display:flex;flex-wrap:wrap;align-items: center;gap:6px}.card-body{flex:1;min-width:0;padding:14px 16px 16px}.card-body[data-flush=true]{padding:10px 0 0}.card-footer{border-top:1px solid var(--line-1);color:var(--ink-3);display:flex;justify-content:space-between;align-items: center;gap:8px;padding:10px 16px;font-size:12.5px}.stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(var(--stat-min,170px),1fr));border-radius:var(--r-card);background:linear-gradient(var(--card),var(--card))padding-box,linear-gradient(180deg,var(--line-3),var(--line-1)40%)border-box;box-shadow:var(--shadow-1);overflow:hidden;border:1px solid #0000}.stat{position:relative;display:flex;box-shadow:1px 0 0 var(--line-1),0 1px 0 var(--line-1);flex-direction:column;gap:6px;min-width:0;padding:14px 16px 12px}.stat-label{color:var(--ink-2);display:flex;align-items: center;gap:6px;font-size:12.5px;font-weight:500}.stat-value{letter-spacing:-.025em;font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:24px;font-weight:550;line-height:1.15}.stat[data-size=sm] .stat-value{font-size:18px}.stat-value[data-flash=true]{animation:flash .9s var(--ease)both}.stat-foot{display:flex;color:var(--ink-3);align-items: center;gap:8px;min-height:18px;font-size:12px}.stat-spark{height:28px;margin-top:2px}.delta{display:inline-flex;font-family:var(--font-mono);border-radius:var(--r-pill);background:var(--raised);color:var(--ink-2);align-items: center;gap:2px;padding:1px 6px;font-size:11.5px;font-weight:500}.delta[data-tone=good]{color:var(--ok);background:var(--ok-soft)}.delta[data-tone=bad]{color:var(--bad);background:var(--bad-soft)}.btn{display:inline-flex;border-radius:var(--r-control);white-space:nowrap;border:1px solid var(--line-2);background:var(--raised);color:var(--ink-1);transition:background var(--dur-1)var(--ease),border-color var(--dur-1)var(--ease),transform var(--dur-1)var(--ease);justify-content:center;align-items: center;gap:6px;height:30px;padding:0 12px;font-size:13px;font-weight:500}.btn:hover:not(:disabled){border-color:var(--line-3);background:color-mix(in srgb,var(--raised)80%,var(--ink-1)6%)}.btn:active:not(:disabled){transform:scale(.97)}.btn:disabled{opacity:.5}.btn[data-variant=primary]{background:var(--ink-1);color:var(--ink-inverse);border-color:#0000}.btn[data-variant=primary]:hover:not(:disabled){background:color-mix(in srgb,var(--ink-1)88%,transparent)}.btn[data-variant=accent]{background:var(--accent-gradient);color:#fff;border-color:#0000}.btn[data-variant=ghost]{color:var(--ink-2);background:0 0;border-color:#0000}.btn[data-variant=ghost]:hover:not(:disabled){background:var(--hover);color:var(--ink-1)}.btn[data-variant=danger]{background:var(--bad-soft);color:var(--bad);border-color:color-mix(in srgb,var(--bad)30%,transparent)}.btn[data-size=sm]{height:26px;padding:0 9px;font-size:12.5px}.btn[data-icon=true]{width:30px;padding:0}.btn[data-icon=true][data-size=sm]{width:26px}.input{border-radius:var(--r-control);border:1px solid var(--line-2);background:var(--card);color:var(--ink-1);transition:border-color var(--dur-1)var(--ease);min-width:0;height:30px;padding:0 10px;font-size:13px}.input::placeholder{color:var(--ink-3)}.input:hover{border-color:var(--line-3)}.input:focus{outline:none;border-color:var(--focus);box-shadow:0 0 0 3px color-mix(in srgb,var(--focus)18%,transparent)}.search{position:relative;display:inline-flex;align-items: center}.search svg{position:absolute;color:var(--ink-3);pointer-events:none;left:9px}.search .input{width:240px;padding-left:30px}select.input{appearance:none;cursor:pointer;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23888' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");background-position:right 9px center;background-repeat:no-repeat;padding-right:28px}.check{display:inline-flex;color:var(--ink-2);cursor:pointer;user-select:none;align-items: center;gap:6px;font-size:12.5px}.check input{accent-color:var(--accent)}.segmented{position:relative;display:inline-flex;border-radius:var(--r-control);background:var(--card);border:1px solid var(--line-2);isolation:isolate;align-items: center;gap:0;padding:2px}.segmented-thumb{position:absolute;background:var(--raised);border:1px solid var(--line-3);transition:left var(--dur-2)var(--ease-out),width var(--dur-2)var(--ease-out);z-index:-1;border-radius:6px;top:2px;bottom:2px;box-shadow:0 1px 2px #00000040}.segmented-option{color:var(--ink-3);white-space:nowrap;display:inline-flex;transition:color var(--dur-1)var(--ease);border-radius:6px;align-items: center;gap:6px;height:24px;padding:0 10px;font-size:12.5px;font-weight:500}.segmented-option:hover,.segmented-option[data-active=true]{color:var(--ink-1)}.segmented[data-size=sm] .segmented-option{height:22px;padding:0 8px;font-size:12px}.tabs{display:flex;border-bottom:1px solid var(--line-1);align-items: center;gap:16px;padding:0 16px}.tab{position:relative;color:var(--ink-3);display:inline-flex;align-items: center;gap:6px;height:36px;font-size:13px;font-weight:500}.tab:hover,.tab[data-active=true]{color:var(--ink-1)}.tab[data-active=true]:after{content:"";position:absolute;background:var(--accent-gradient);border-radius:2px;height:2px;bottom:-1px;left:0;right:0}.kbd{display:inline-flex;border:1px solid var(--line-2);background:var(--card);font-family:var(--font-mono);color:var(--ink-3);border-radius:5px;justify-content:center;align-items: center;min-width:18px;height:18px;padding:0 4px;font-size:10.5px}.badge{display:inline-flex;border-radius:var(--r-pill);white-space:nowrap;background:var(--raised);color:var(--ink-2);border:1px solid var(--line-1);align-items: center;gap:5px;height:20px;padding:0 8px;font-size:11.5px;font-weight:500}.badge[data-tone=ok]{background:var(--ok-soft);color:var(--ok);border-color:#0000}.badge[data-tone=warn]{background:var(--warn-soft);color:var(--warn);border-color:#0000}.badge[data-tone=bad]{background:var(--bad-soft);color:var(--bad);border-color:#0000}.badge[data-tone=accent]{background:var(--accent-soft);color:var(--accent);border-color:#0000}.badge[data-mono=true]{font-family:var(--font-mono);font-size:11px}.dot{position:relative;display:inline-block;background:var(--ink-3);border-radius:50%;flex-shrink:0;width:8px;height:8px}.dot[data-tone=ok],.dot[data-tone=live]{background:var(--live)}.dot[data-tone=warn]{background:var(--warn)}.dot[data-tone=bad]{background:var(--bad)}.dot[data-tone=accent]{background:var(--accent)}.dot[data-pulse=true]:after{content:"";position:absolute;background:inherit;animation:ping 1.6s var(--ease-out)infinite;border-radius:50%;inset:0}.swatch{display:inline-block;border-radius:2px;flex-shrink:0;width:8px;height:8px}.table-wrap{overflow-x:auto;min-width:0}.table{width:100%;font-size:13px}.table th{position:sticky;z-index:1;text-align:left;color:var(--ink-3);white-space:nowrap;background:var(--card);border-bottom:1px solid var(--line-1);user-select:none;padding:8px 12px;font-size:12px;font-weight:500;top:0}.table th:first-child,.table td:first-child{padding-left:16px}.table th:last-child,.table td:last-child{padding-right:16px}.table th[data-sortable=true]{cursor:pointer}.table th[data-sortable=true]:hover,.table th[data-sorted]{color:var(--ink-1)}.table th .sort-arrow{display:inline-block;opacity:.8;vertical-align:-1px;margin-left:4px}.table td{border-bottom:1px solid var(--line-1);vertical-align:middle;white-space:nowrap;padding:9px 12px}.table tbody tr:last-child td{border-bottom:0}.table tbody tr{transition:background var(--dur-1)var(--ease)}.table tbody tr:hover{background:var(--hover)}.table tbody tr[data-clickable=true]{cursor:pointer}.table tbody tr[data-selected=true]{background:var(--selected)}.table [data-align=right]{text-align:right}.table [data-align=center]{text-align:center}.table td[data-wrap=true]{white-space:normal}.table[data-dense=true] td{padding-top:6px;padding-bottom:6px}.table-more{display:flex;border-top:1px solid var(--line-1);justify-content:center;align-items: center;gap:8px;padding:10px}.cell-primary{color:var(--ink-1);font-weight:500}.cell-secondary{color:var(--ink-3);font-size:12px}.meter{position:relative;background:var(--line-1);overflow:hidden;border-radius:2px;min-width:48px;height:4px}.meter-fill{position:absolute;background:var(--chart-primary);transition:width var(--dur-3)var(--ease-out);border-radius:2px;inset:0 auto 0 0}.meter-cell{display:flex;justify-content:flex-end;align-items: center;gap:10px}.meter-cell .meter{width:64px}.empty{display:flex;text-align:center;color:var(--ink-3);flex-direction:column;justify-content:center;align-items: center;gap:6px;min-height:140px;padding:40px 16px}.empty svg{color:var(--ink-4);margin-bottom:4px}.empty-title{color:var(--ink-2);font-weight:500}.empty-hint{max-width:44ch;font-size:12.5px}.error-state{display:flex;border-radius:var(--r-control);background:var(--bad-soft);color:var(--bad);align-items: center;gap:12px;margin:12px 16px;padding:12px 14px;font-size:13px}.error-state-message{overflow-wrap:anywhere;flex:1;min-width:0}.skeleton{background:linear-gradient(90deg,var(--line-1)0%,var(--line-2)50%,var(--line-1)100%);animation:1.6s linear infinite shimmer;background-size:200% 100%;border-radius:6px}[data-stale=true]{opacity:.55;transition:opacity var(--dur-2)var(--ease)}[data-stale=false]{transition:opacity var(--dur-2)var(--ease)}.drawer{position:fixed;width:min(var(--drawer-w,560px),calc(100vw - 16px));z-index:61;display:flex;border-radius:var(--r-panel);border:1px solid var(--line-2);background:var(--overlay);backdrop-filter:blur(20px)saturate(170%);-webkit-backdrop-filter:blur(20px)saturate(170%);box-shadow:var(--shadow-3);animation:drawer-in var(--dur-3)var(--ease-out)both;overflow:hidden;flex-direction:column;top:8px;bottom:8px;right:8px}@keyframes drawer-in{0%{transform:translate(24px);opacity:0}to{transform:none;opacity:1}}.drawer-header{display:flex;border-bottom:1px solid var(--line-1);align-items: flex-start;gap:12px;padding:16px 16px 12px 20px}.drawer-titles{overflow-wrap:anywhere;flex:1;min-width:0}.drawer-title{letter-spacing:-.01em;font-size:15px;font-weight:600}.drawer-subtitle{color:var(--ink-3);margin-top:2px;font-size:12.5px}.drawer-body{overflow-y:auto;display:flex;flex-direction:column;flex:1;gap:18px;padding:16px 20px 24px}.kv{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:12px 16px}.kv-item{display:flex;flex-direction:column;gap:2px;min-width:0}.kv-key{color:var(--ink-3);font-size:12px}.kv-value{font-family:var(--font-mono);color:var(--ink-1);overflow-wrap:anywhere;font-size:12.5px}.section-label{color:var(--ink-3);margin-bottom:8px;font-size:12px;font-weight:500}.code-block{border-radius:var(--r-control);border:1px solid var(--line-1);background:var(--card);font-family:var(--font-mono);color:var(--ink-2);overflow:auto;white-space:pre-wrap;overflow-wrap:anywhere;max-height:480px;margin:0;padding:12px 14px;font-size:12px;line-height:1.55}.live-chip{display:inline-flex;border-radius:var(--r-pill);border:1px solid var(--line-2);background:var(--card);color:var(--ink-2);white-space:nowrap;transition:border-color var(--dur-1)var(--ease);align-items: center;gap:8px;height:30px;padding:0 10px 0 11px;font-size:12.5px}.live-chip:hover{border-color:var(--line-3);color:var(--ink-1)}.live-chip-count{font-family:var(--font-mono);color:var(--ink-3);font-size:11.5px}.chart{position:relative;user-select:none;width:100%;min-width:0}.chart svg{overflow:visible}.chart-axis text{fill:var(--chart-axis);font-family:var(--font-mono);font-size:10.5px}.chart-grid line{stroke:var(--chart-grid);shape-rendering:crispEdges}.chart-baseline{stroke:var(--line-3);shape-rendering:crispEdges}.chart-cursor{fill:var(--chart-cursor)}.chart-bar{shape-rendering:crispEdges;transition:opacity var(--dur-1)var(--ease)}.chart[data-hovering=true] .chart-bar[data-hover=false]{opacity:.45}.chart-line{fill:none;stroke-width:1.5;stroke-linejoin:round;stroke-linecap:round;vector-effect:non-scaling-stroke}.chart-empty{position:absolute;display:flex;color:var(--ink-3);justify-content:center;align-items: center;font-size:12.5px;inset:0}.chart-tooltip{position:absolute;z-index:20;pointer-events:none;border-radius:var(--r-control);border:1px solid var(--line-2);background:var(--overlay);backdrop-filter:blur(14px)saturate(160%);-webkit-backdrop-filter:blur(14px)saturate(160%);box-shadow:var(--shadow-2);min-width:160px;max-width:280px;padding:8px 10px;transition:left 60ms linear,top 60ms linear;font-size:12px;top:0}.chart-tooltip-title{font-family:var(--font-mono);color:var(--ink-3);margin-bottom:6px;font-size:11px}.chart-tooltip-row{display:flex;align-items: center;gap:8px;line-height:1.7}.chart-tooltip-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink-2);flex:1;min-width:0}.chart-tooltip-value{font-family:var(--font-mono);font-variant-numeric:tabular-nums;color:var(--ink-1)}.chart-tooltip-total{border-top:1px solid var(--line-1);margin-top:4px;padding-top:4px}.legend{display:flex;color:var(--ink-2);flex-wrap:wrap;gap:4px 14px;font-size:12px}.legend-item{display:inline-flex;transition:opacity var(--dur-1)var(--ease);align-items: center;gap:6px;max-width:240px}button.legend-item:hover{color:var(--ink-1)}.legend-item[data-off=true]{opacity:.38}.legend-value{font-family:var(--font-mono);color:var(--ink-3);font-size:11.5px}.sparkline path.area{opacity:.16}.share-bar{display:flex;overflow:hidden;background:var(--line-1);border-radius:3px;gap:2px;width:100%;height:8px}.share-bar-seg{transition:flex-grow var(--dur-3)var(--ease-out);min-width:2px;height:100%}.bar-list{display:flex;flex-direction:column;gap:2px}.bar-list-row{position:relative;display:flex;text-align:left;isolation:isolate;border-radius:6px;align-items: center;gap:10px;width:100%;height:30px;padding:0 8px}button.bar-list-row:hover{background:var(--hover)}.bar-list-fill{position:absolute;z-index:-1;opacity:.16;transition:width var(--dur-3)var(--ease-out);border-radius:5px;top:3px;bottom:3px;left:0}.bar-list-label{display:flex;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;flex:1;align-items: center;gap:8px;min-width:0}.bar-list-value{font-family:var(--font-mono);font-variant-numeric:tabular-nums;color:var(--ink-2);font-size:12px}.modal-overlay{position:fixed;z-index:80;display:flex;animation:fade var(--dur-2)var(--ease)both;background:#0000008c;justify-content:center;align-items: center;padding:16px;inset:0}.modal{border-radius:var(--r-panel);border:1px solid var(--line-2);background:var(--overlay);backdrop-filter:blur(20px)saturate(170%);-webkit-backdrop-filter:blur(20px)saturate(170%);box-shadow:var(--shadow-3);animation:rise var(--dur-3)var(--ease-out)both;overflow:hidden;width:min(480px,100%)}.modal-header{display:flex;justify-content:space-between;align-items: center;gap:12px;padding:14px 14px 10px 18px}.modal-title{letter-spacing:-.01em;font-size:15px;font-weight:600}.modal-body{color:var(--ink-2);display:flex;flex-direction:column;gap:10px;padding:4px 18px 16px}.modal-footer{display:flex;border-top:1px solid var(--line-1);background:color-mix(in srgb,var(--card)60%,transparent);justify-content:flex-end;gap:8px;padding:12px 18px}.costs-components{display:flex;flex-direction:column}.costs-component-row{display:grid;grid-template-columns:minmax(0,1fr)auto 56px;border-bottom:1px solid var(--line-1);align-items: center;gap:12px;padding:7px 0}.costs-component-share{text-align:right}.costs-component-total{border-bottom:0;font-weight:500}.errors-signature{display:-webkit-box;-webkit-line-clamp:2;overflow:hidden;font-family:var(--font-mono);color:var(--ink-1);overflow-wrap:anywhere;-webkit-box-orient:vertical;font-size:12px;line-height:1.5}.errors-message{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--font-mono);color:var(--bad);max-width:520px;font-size:12px}.errors-filter{max-width:260px}.errors-filter .truncate{min-width:0}.errors-detail{display:flex;background:var(--hover);border-bottom:1px solid var(--line-1);flex-direction:column;gap:10px;padding:4px 16px 14px}.errors-detail-message{color:var(--ink-1);max-height:200px}.errors-detail-meta{display:flex;flex-wrap:wrap;justify-content:space-between;align-items: center;gap:8px;font-size:12.5px}.errors-detail-models{display:flex;flex-wrap:wrap;gap:6px}.frustration-judge{gap:10px;font-size:13px}.frustration-spacer{flex:1}.frustration-progress{gap:8px}.frustration-progress-head{gap:10px}.frustration-progress-track{border-radius:3px;height:6px}.frustration-progress-fill{background:var(--accent-gradient);border-radius:3px}.frustration-progress-meta{flex-wrap:wrap;gap:4px 18px}.frustration-quote{display:flex;border:1px solid var(--line-2);border-radius:var(--r-control);background:var(--hover);flex-direction:column;gap:2px;padding:12px 14px}.frustration-quote-value{color:var(--ink-1);font-size:22px;font-weight:600}.frustration-chart-body{gap:14px}.frustration-classes{overflow-x:auto;scrollbar-width:none}.frustration-filters{flex-wrap:wrap;align-items: flex-start;gap:8px 16px}.frustration-filters .legend{flex:320px}.frustration-key{border-top:1px solid var(--line-1);color:var(--ink-3);padding-top:10px}.frustration-key .frustration-key-wide{max-width:none}.frustration-key-swatch[data-variant=assistant]{background:var(--ink-2)}.frustration-key-swatch[data-variant=angry]{background:color-mix(in srgb,var(--ink-2)55%,black)}.frustration-key-swatch[data-variant=other]{background:color-mix(in srgb,var(--ink-2)32%,transparent)}.frustration-key-swatch[data-variant=hatch]{background:repeating-linear-gradient(45deg,var(--ink-2)0 1.6px,color-mix(in srgb,var(--ink-2)14%,transparent)1.6px 3.5px)}.frustration-key-line{background:var(--ink-1);border-radius:1px;width:12px;height:2px}.frustration-chart-empty{display:flex;justify-content:center;align-items: center;height:340px}.frustration-tooltip-extra{display:flex;flex-direction:column;gap:2px}.frustration-judged{justify-content:flex-end;gap:6px}.models-chevron{display:inline-flex;color:var(--ink-3);transition:transform var(--dur-2)var(--ease)}.models-chevron[data-open=true]{color:var(--ink-1);transform:rotate(90deg)}.models-detail{display:grid;grid-template-columns:minmax(260px,340px)minmax(0,1fr);background:var(--panel);border-bottom:1px solid var(--line-1);animation:rise var(--dur-3)var(--ease-out)both;gap:24px;padding:16px 16px 18px 44px}.models-detail-facts{display:flex;flex-direction:column;gap:16px;min-width:0}.models-detail-chart{display:flex;flex-direction:column;gap:10px;min-width:0}@media (max-width:1100px){.models-detail{grid-template-columns:minmax(0,1fr);padding-left:16px}}.projects-folder{gap:8px;min-width:0;max-width:280px}.providers-select{max-width:220px}.providers-mix{display:flex;background:var(--bg);border-top:1px solid var(--line-1);flex-direction:column;gap:10px;padding:12px 16px 14px}.providers-swatch-slot{display:inline-flex;flex:none;width:10px}.providers-account{max-width:280px}.providers-accounts{border-top:1px solid var(--line-1);margin:0 -16px -16px}.request-drawer-error{--rd-tone:var(--bad);--rd-tone-soft:var(--bad-soft);border-radius:var(--r-control);border:1px solid color-mix(in srgb,var(--rd-tone)35%,transparent);background:var(--rd-tone-soft);padding:10px 12px 12px}.request-drawer-error[data-tone=warn]{--rd-tone:var(--warn);--rd-tone-soft:var(--warn-soft)}.request-drawer-error-label{color:var(--rd-tone);margin-bottom:6px;font-size:12px;font-weight:550}.request-drawer-error-text{font-family:var(--font-mono);color:var(--ink-1);white-space:pre-wrap;overflow-wrap:anywhere;overflow:auto;max-height:240px;margin:0;font-size:12px;line-height:1.55}.request-drawer-file{display:flex;flex-direction:column;gap:2px;margin-top:12px}.tools-filter{width:200px}.tools-name{max-width:220px}.tools-share{display:inline-block;text-align:right;min-width:32px;margin-left:8px}.traces-models{display:inline-flex;color:var(--ink-2);align-items: center;gap:6px;min-width:0;max-width:220px}.traces-title{display:block;max-width:720px}.traces-spin{animation:.9s linear infinite traces-spin}@keyframes traces-spin{to{transform:rotate(360deg)}}.traces-toolbar{display:flex;flex-wrap:wrap;align-items: center;gap:12px}.traces-check{display:inline-flex;color:var(--ink-2);cursor:pointer;user-select:none;align-items: center;gap:6px;font-size:12.5px}.traces-check input{accent-color:var(--accent);margin:0}.traces-search{display:inline-flex;align-items: center;gap:4px}.traces-match-count{text-align:center;min-width:36px;font-size:12px}.traces-legend{display:inline-flex;color:var(--ink-2);flex-wrap:wrap;gap:12px;margin-left:auto;font-size:12px}.traces-legend-item{display:inline-flex;align-items: center;gap:6px}.traces-minimap{display:block;cursor:crosshair;border-radius:var(--r-chip);border:1px solid var(--line-2);background:var(--panel);touch-action:none;width:100%}.traces-timeline{position:relative;display:flex;overflow-y:auto;overflow-x:hidden;border-top:1px solid var(--line-1);max-height:560px}.traces-canvas{cursor:grab;outline:none;touch-action:none}.traces-canvas:focus-visible{outline:1px solid var(--focus);outline-offset:-1px;border-radius:var(--r-chip)}.traces-canvas:active{cursor:grabbing}.traces-chevron{display:inline-flex;cursor:pointer;color:var(--ink-3);background:0 0;border:none;border-radius:4px;padding:0}.traces-chevron:hover{color:var(--ink-1)}.traces-chevron:focus-visible{outline:2px solid var(--focus)}.traces-gutter-track{color:var(--ink-1);font-size:12px;font-weight:500}.traces-gutter-model{color:var(--ink-3);font-size:10.5px}.traces-gutter-lane{position:absolute;color:var(--ink-3);font-size:10.5px}.traces-tooltip{position:fixed;z-index:60;pointer-events:none;background:var(--overlay);backdrop-filter:blur(12px);border:1px solid var(--line-3);border-radius:var(--r-control);box-shadow:var(--shadow-2);max-width:300px;padding:8px 10px;font-size:12px;line-height:1.5}.traces-tooltip-title{color:var(--ink-1);font-weight:500}.traces-tooltip-detail{color:var(--ink-2);word-break:break-word}.traces-list{overflow-y:auto;height:340px}.traces-row{display:flex;border:none;border-bottom:1px solid var(--line-1);color:inherit;font:inherit;text-align:left;cursor:pointer;transition:background var(--dur-1)var(--ease);background:0 0;align-items: center;gap:10px;width:100%;height:28px;padding:0 16px}.traces-row:hover{background:var(--hover)}.traces-row:focus-visible{outline:2px solid var(--focus);outline-offset:-2px}.traces-row[data-selected=true]{background:var(--selected);box-shadow:inset 2px 0 0 var(--accent)}.traces-row[data-static=true]{cursor:default}.traces-row[data-static=true]:hover{background:0 0}.traces-kind{border-radius:var(--r-chip);text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink-1);background:color-mix(in srgb,var(--traces-kind-color)18%,transparent);box-shadow:inset 2px 0 0 var(--traces-kind-color);flex-shrink:0;width:72px;padding:1px 0;font-size:11px;font-weight:500}.traces-row-track{color:var(--ink-3);flex-shrink:0;max-width:110px;font-size:11px}.traces-row-label{color:var(--ink-1);flex-shrink:1;min-width:0;font-size:12.5px}.traces-row-detail{color:var(--ink-3);flex:1;min-width:0;font-size:12px}.traces-row-meta{display:inline-flex;color:var(--ink-3);flex-shrink:0;gap:12px;margin-left:auto;font-size:11.5px}.traces-drawer{gap:16px}.traces-pre{white-space:pre-wrap;word-break:break-word;margin:0}.traces-pre[data-scroll=true]{overflow-y:auto;max-height:360px}
|
package/dist/client/index.html
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8">
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
-
<title>
|
|
6
|
+
<title>omp stats</title>
|
|
7
7
|
<script>
|
|
8
8
|
(function () {
|
|
9
9
|
try {
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
} catch (e) {}
|
|
16
16
|
})();
|
|
17
17
|
</script>
|
|
18
|
-
<link rel="stylesheet" href="
|
|
18
|
+
<link rel="stylesheet" href="index.css">
|
|
19
19
|
</head>
|
|
20
20
|
<body>
|
|
21
21
|
<div id="root"></div>
|