Remove accidentally committed compiled JS files overriding TSX files and rebuild dashboard
Browse files- dashboard/src/App.js +0 -11
- dashboard/src/api.js +0 -6
- dashboard/src/components/EventFeed.js +0 -9
- dashboard/src/components/EventRow.js +0 -19
- dashboard/src/components/Header.js +0 -17
- dashboard/src/components/Leaderboard.js +0 -23
- dashboard/src/components/LeaderboardTable.js +0 -11
- dashboard/src/components/ScoreBadge.js +0 -11
- dashboard/src/components/StatCard.js +0 -5
- dashboard/src/components/StatsRow.js +0 -19
- dashboard/src/hooks/useWebSocket.js +0 -56
- dashboard/src/main.js +0 -18
- dashboard/src/stores/eventStore.js +0 -8
- dashboard/src/types.js +0 -1
- static/dashboard/assets/{index-B4sMAwyk.js → index-756xQEYX.js} +2 -2
- static/dashboard/assets/{index-DDkttNE1.css → index-B51822Cd.css} +1 -1
- static/dashboard/index.html +2 -2
dashboard/src/App.js
DELETED
|
@@ -1,11 +0,0 @@
|
|
| 1 |
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
| 2 |
-
import Header from "./components/Header";
|
| 3 |
-
import StatsRow from "./components/StatsRow";
|
| 4 |
-
import Leaderboard from "./components/Leaderboard";
|
| 5 |
-
import EventFeed from "./components/EventFeed";
|
| 6 |
-
import { useWebSocket } from "./hooks/useWebSocket";
|
| 7 |
-
const App = () => {
|
| 8 |
-
useWebSocket();
|
| 9 |
-
return (_jsx("div", { className: "min-h-screen", style: { backgroundColor: "var(--color-bg)" }, children: _jsxs("div", { className: "max-w-7xl mx-auto px-6 py-10 space-y-10", children: [_jsx(Header, {}), _jsx(StatsRow, {}), _jsxs("div", { className: "grid grid-cols-1 lg:grid-cols-3 gap-8", children: [_jsx("div", { className: "lg:col-span-2", children: _jsx(Leaderboard, {}) }), _jsx("div", { className: "lg:col-span-1", children: _jsx(EventFeed, {}) })] })] }) }));
|
| 10 |
-
};
|
| 11 |
-
export default App;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dashboard/src/api.js
DELETED
|
@@ -1,6 +0,0 @@
|
|
| 1 |
-
const BASE = import.meta.env.DEV ? "/api" : "";
|
| 2 |
-
export const fetchHealth = () => fetch(`${BASE}/health`).then(r => r.json());
|
| 3 |
-
export const fetchStats = () => fetch(`${BASE}/stats`).then(r => r.json());
|
| 4 |
-
export const fetchLeaderboard = (taskId, limit = 10) => fetch(`${BASE}/leaderboard?task_id=${taskId}&limit=${limit}`)
|
| 5 |
-
.then(r => r.json())
|
| 6 |
-
.then(data => data.entries || []);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dashboard/src/components/EventFeed.js
DELETED
|
@@ -1,9 +0,0 @@
|
|
| 1 |
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
| 2 |
-
import { Zap, Trash2 } from "lucide-react";
|
| 3 |
-
import { useEventStore } from "../stores/eventStore";
|
| 4 |
-
import EventRow from "./EventRow";
|
| 5 |
-
const EventFeed = () => {
|
| 6 |
-
const { events, clear, connected } = useEventStore();
|
| 7 |
-
return (_jsxs("div", { className: "bg-white rounded-3xl overflow-hidden flex flex-col h-[600px]", style: { border: "1px solid var(--color-border)" }, children: [_jsxs("div", { className: "px-7 py-5 flex items-center justify-between", style: { borderBottom: "1px solid var(--color-border)" }, children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx("div", { className: `p-2 rounded-xl ${connected ? "bg-amber-50" : "bg-zinc-100"}`, children: _jsx(Zap, { className: `w-5 h-5 ${connected ? "text-amber-600" : "text-zinc-400"}` }) }), _jsx("h2", { className: "text-lg font-extrabold tracking-tight", style: { color: "var(--color-heading)" }, children: "Live Feed" })] }), _jsx("button", { onClick: clear, className: "p-2.5 hover:bg-zinc-100 rounded-xl transition-colors", style: { color: "var(--color-muted)" }, title: "Clear Feed", children: _jsx(Trash2, { className: "w-4 h-4" }) })] }), _jsxs("div", { className: "flex-1 overflow-auto p-5 space-y-3", children: [!connected && (_jsxs("div", { className: "flex flex-col items-center justify-center h-full space-y-4 text-center", children: [_jsx("div", { className: "p-5 bg-zinc-50 rounded-2xl", children: _jsx(Zap, { className: "w-10 h-10 text-zinc-200 animate-pulse" }) }), _jsx("p", { className: "text-[11px] uppercase tracking-[0.15em] font-bold", style: { color: "var(--color-muted)" }, children: "Connecting to live stream..." })] })), connected && events.length === 0 && (_jsxs("div", { className: "flex flex-col items-center justify-center h-full space-y-4 text-center", children: [_jsx("div", { className: "p-5 bg-zinc-50 rounded-2xl", children: _jsx(Zap, { className: "w-10 h-10 text-zinc-200" }) }), _jsxs("div", { className: "space-y-1.5", children: [_jsx("p", { className: "text-[11px] font-bold uppercase tracking-[0.15em]", style: { color: "var(--color-muted)" }, children: "Monitoring activity" }), _jsx("p", { className: "text-[11px] max-w-[180px] leading-relaxed", style: { color: "var(--color-muted)" }, children: "Evaluation events will appear here in real-time." })] })] })), events.map((event, idx) => (_jsx(EventRow, { event: event }, idx)))] })] }));
|
| 8 |
-
};
|
| 9 |
-
export default EventFeed;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dashboard/src/components/EventRow.js
DELETED
|
@@ -1,19 +0,0 @@
|
|
| 1 |
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
| 2 |
-
import { clsx } from "clsx";
|
| 3 |
-
const EventRow = ({ event }) => {
|
| 4 |
-
const time = new Date(event.timestamp).toLocaleTimeString([], {
|
| 5 |
-
hour12: false,
|
| 6 |
-
hour: "2-digit",
|
| 7 |
-
minute: "2-digit",
|
| 8 |
-
second: "2-digit",
|
| 9 |
-
});
|
| 10 |
-
return (_jsxs("div", { className: "rounded-2xl p-4 transition-all duration-200 hover:shadow-sm animate-fade-slide-in", style: {
|
| 11 |
-
backgroundColor: "#fafafa",
|
| 12 |
-
border: "1px solid var(--color-border)",
|
| 13 |
-
}, children: [_jsxs("div", { className: "flex items-center justify-between mb-2", children: [_jsx("span", { className: "text-[10px] tabular-nums font-bold uppercase tracking-wider", style: { color: "var(--color-muted)" }, children: time }), _jsx("span", { className: "text-[10px] font-mono font-bold bg-indigo-50 text-indigo-600 px-2 py-0.5 rounded-md", children: event.episode_id.slice(0, 8) })] }), _jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-sm font-semibold capitalize truncate max-w-[140px]", style: { color: "var(--color-heading)" }, children: event.type }), _jsxs("span", { className: clsx("text-xs font-bold font-mono px-2.5 py-1 rounded-full", event.reward > 0
|
| 14 |
-
? "text-emerald-700 bg-emerald-50"
|
| 15 |
-
: event.reward < 0
|
| 16 |
-
? "text-red-600 bg-red-50"
|
| 17 |
-
: "text-zinc-500 bg-zinc-100"), children: [event.reward > 0 ? "+" : "", event.reward.toFixed(2)] })] })] }));
|
| 18 |
-
};
|
| 19 |
-
export default EventRow;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dashboard/src/components/Header.js
DELETED
|
@@ -1,17 +0,0 @@
|
|
| 1 |
-
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
| 2 |
-
import { useQuery } from "@tanstack/react-query";
|
| 3 |
-
import { Wifi, WifiOff } from "lucide-react";
|
| 4 |
-
import { fetchHealth } from "../api";
|
| 5 |
-
import { clsx } from "clsx";
|
| 6 |
-
const Header = () => {
|
| 7 |
-
const { data: health } = useQuery({
|
| 8 |
-
queryKey: ["health"],
|
| 9 |
-
queryFn: fetchHealth,
|
| 10 |
-
refetchInterval: 10_000,
|
| 11 |
-
});
|
| 12 |
-
const isConnected = health?.status === "ok";
|
| 13 |
-
return (_jsxs("header", { className: "flex items-center justify-between pb-2", children: [_jsx("div", { className: "flex items-center gap-6", children: _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("img", { src: "/dashboard/logo.svg", className: "h-[38px] w-auto", alt: "CodeLens." }), _jsx("div", { className: "h-5 w-px bg-zinc-200 hidden sm:block mx-2" }), _jsx("p", { className: "text-[10px] font-mono font-bold uppercase tracking-[0.3em] hidden sm:block pt-1 opacity-40 group-hover:opacity-60 transition-opacity", style: { color: "var(--color-heading)" }, children: "Evaluation" })] }) }), _jsx("div", { className: clsx("flex items-center gap-2 px-4 py-2 rounded-full text-xs font-semibold tracking-wide uppercase transition-all", isConnected
|
| 14 |
-
? "bg-emerald-50 text-emerald-600 ring-1 ring-emerald-200"
|
| 15 |
-
: "bg-red-50 text-red-500 ring-1 ring-red-200"), children: isConnected ? (_jsxs(_Fragment, { children: [_jsx(Wifi, { className: "w-3.5 h-3.5" }), _jsx("span", { children: "Connected" })] })) : (_jsxs(_Fragment, { children: [_jsx(WifiOff, { className: "w-3.5 h-3.5" }), _jsx("span", { children: "Offline" })] })) })] }));
|
| 16 |
-
};
|
| 17 |
-
export default Header;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dashboard/src/components/Leaderboard.js
DELETED
|
@@ -1,23 +0,0 @@
|
|
| 1 |
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
| 2 |
-
import { useState } from "react";
|
| 3 |
-
import { useQuery } from "@tanstack/react-query";
|
| 4 |
-
import { Trophy, RefreshCw } from "lucide-react";
|
| 5 |
-
import { fetchLeaderboard } from "../api";
|
| 6 |
-
import LeaderboardTable from "./LeaderboardTable";
|
| 7 |
-
import { clsx } from "clsx";
|
| 8 |
-
const Leaderboard = () => {
|
| 9 |
-
const [activeTab, setActiveTab] = useState("bug_detection");
|
| 10 |
-
const { data: entries, isLoading, refetch, isRefetching } = useQuery({
|
| 11 |
-
queryKey: ["leaderboard", activeTab],
|
| 12 |
-
queryFn: () => fetchLeaderboard(activeTab),
|
| 13 |
-
});
|
| 14 |
-
const tabs = [
|
| 15 |
-
{ id: "bug_detection", label: "Bug Detection" },
|
| 16 |
-
{ id: "security_audit", label: "Security Audit" },
|
| 17 |
-
{ id: "architectural_review", label: "Arch. Review" },
|
| 18 |
-
];
|
| 19 |
-
return (_jsxs("div", { className: "bg-white rounded-3xl overflow-hidden flex flex-col h-[600px]", style: { border: "1px solid var(--color-border)" }, children: [_jsxs("div", { className: "px-7 py-5 flex items-center justify-between", style: { borderBottom: "1px solid var(--color-border)" }, children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx("div", { className: "p-2 bg-amber-50 rounded-xl", children: _jsx(Trophy, { className: "w-5 h-5 text-amber-600" }) }), _jsx("h2", { className: "text-lg font-extrabold tracking-tight", style: { color: "var(--color-heading)" }, children: "Leaderboard" })] }), _jsx("button", { onClick: () => refetch(), disabled: isLoading || isRefetching, className: "p-2.5 hover:bg-zinc-100 rounded-xl transition-colors disabled:opacity-40", style: { color: "var(--color-muted)" }, children: _jsx(RefreshCw, { className: clsx("w-4 h-4", (isLoading || isRefetching) && "animate-spin") }) })] }), _jsx("div", { className: "px-7", style: { borderBottom: "1px solid var(--color-border)" }, children: _jsx("div", { className: "flex gap-6 overflow-x-auto", children: tabs.map((tab) => (_jsxs("button", { onClick: () => setActiveTab(tab.id), className: clsx("py-3.5 text-sm font-semibold transition-all relative whitespace-nowrap", activeTab === tab.id
|
| 20 |
-
? "text-zinc-900"
|
| 21 |
-
: "text-zinc-400 hover:text-zinc-600"), children: [tab.label, activeTab === tab.id && (_jsx("div", { className: "absolute bottom-0 left-0 right-0 h-[2px] bg-zinc-900 rounded-full" }))] }, tab.id))) }) }), _jsx("div", { className: "flex-1 overflow-auto", children: isLoading ? (_jsxs("div", { className: "flex items-center justify-center h-full gap-3", style: { color: "var(--color-muted)" }, children: [_jsx(RefreshCw, { className: "w-5 h-5 animate-spin" }), _jsx("span", { className: "text-sm font-medium", children: "Loading entries..." })] })) : entries && entries.length > 0 ? (_jsx(LeaderboardTable, { entries: entries })) : (_jsxs("div", { className: "flex flex-col items-center justify-center h-full space-y-4", children: [_jsx("div", { className: "p-5 bg-zinc-50 rounded-2xl", children: _jsx(Trophy, { className: "w-10 h-10 text-zinc-200" }) }), _jsx("p", { className: "text-xs font-bold uppercase tracking-[0.15em]", style: { color: "var(--color-muted)" }, children: "No rankings yet" })] })) })] }));
|
| 22 |
-
};
|
| 23 |
-
export default Leaderboard;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dashboard/src/components/LeaderboardTable.js
DELETED
|
@@ -1,11 +0,0 @@
|
|
| 1 |
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
| 2 |
-
import ScoreBadge from "./ScoreBadge";
|
| 3 |
-
const LeaderboardTable = ({ entries }) => {
|
| 4 |
-
return (_jsxs("table", { className: "w-full text-left border-collapse", children: [_jsx("thead", { children: _jsxs("tr", { style: { borderBottom: "1px solid var(--color-border)" }, children: [_jsx("th", { className: "px-7 py-4 text-[10px] font-bold uppercase tracking-[0.12em]", style: { color: "var(--color-muted)" }, children: "Rank" }), _jsx("th", { className: "px-7 py-4 text-[10px] font-bold uppercase tracking-[0.12em]", style: { color: "var(--color-muted)" }, children: "Agent" }), _jsx("th", { className: "px-7 py-4 text-[10px] font-bold uppercase tracking-[0.12em] text-center", style: { color: "var(--color-muted)" }, children: "Score" }), _jsx("th", { className: "px-7 py-4 text-[10px] font-bold uppercase tracking-[0.12em] text-right", style: { color: "var(--color-muted)" }, children: "Seed" }), _jsx("th", { className: "px-7 py-4 text-[10px] font-bold uppercase tracking-[0.12em] text-right", style: { color: "var(--color-muted)" }, children: "Submitted" })] }) }), _jsx("tbody", { children: entries.map((entry, idx) => (_jsxs("tr", { className: "group hover:bg-zinc-50/80 transition-colors tabular-nums", style: { borderBottom: "1px solid var(--color-border)" }, children: [_jsx("td", { className: "px-7 py-5", children: idx < 3 ? (_jsx("span", { className: `
|
| 5 |
-
inline-flex items-center justify-center w-7 h-7 rounded-lg text-xs font-extrabold
|
| 6 |
-
${idx === 0 ? "bg-amber-50 text-amber-600" : ""}
|
| 7 |
-
${idx === 1 ? "bg-zinc-100 text-zinc-500" : ""}
|
| 8 |
-
${idx === 2 ? "bg-orange-50 text-orange-500" : ""}
|
| 9 |
-
`, children: entry.rank })) : (_jsx("span", { className: "text-sm font-semibold pl-2", style: { color: "var(--color-muted)" }, children: entry.rank })) }), _jsx("td", { className: "px-7 py-5", children: _jsx("span", { className: "font-semibold group-hover:text-zinc-900 transition-colors", style: { color: "var(--color-heading)" }, children: entry.agent_name }) }), _jsx("td", { className: "px-7 py-5 text-center", children: _jsx(ScoreBadge, { score: entry.score }) }), _jsx("td", { className: "px-7 py-5 text-right text-sm font-mono", style: { color: "var(--color-muted)" }, children: entry.seed }), _jsx("td", { className: "px-7 py-5 text-right text-xs", style: { color: "var(--color-muted)" }, children: new Date(entry.submitted_at).toLocaleDateString() })] }, idx))) })] }));
|
| 10 |
-
};
|
| 11 |
-
export default LeaderboardTable;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dashboard/src/components/ScoreBadge.js
DELETED
|
@@ -1,11 +0,0 @@
|
|
| 1 |
-
import { jsx as _jsx } from "react/jsx-runtime";
|
| 2 |
-
import { clsx } from "clsx";
|
| 3 |
-
const ScoreBadge = ({ score }) => {
|
| 4 |
-
const colorClass = score >= 0.8
|
| 5 |
-
? "text-emerald-700 bg-emerald-50 ring-1 ring-emerald-200"
|
| 6 |
-
: score >= 0.5
|
| 7 |
-
? "text-amber-700 bg-amber-50 ring-1 ring-amber-200"
|
| 8 |
-
: "text-red-600 bg-red-50 ring-1 ring-red-200";
|
| 9 |
-
return (_jsx("span", { className: clsx("inline-flex items-center px-3 py-1 rounded-full text-xs font-bold tabular-nums", colorClass), children: score.toFixed(2) }));
|
| 10 |
-
};
|
| 11 |
-
export default ScoreBadge;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dashboard/src/components/StatCard.js
DELETED
|
@@ -1,5 +0,0 @@
|
|
| 1 |
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
| 2 |
-
const StatCard = ({ label, value, icon, iconBg }) => {
|
| 3 |
-
return (_jsxs("div", { className: "bg-white rounded-3xl p-7 transition-all duration-200 hover:shadow-lg hover:-translate-y-0.5 group", style: { border: "1px solid var(--color-border)" }, children: [_jsxs("div", { className: "flex items-start justify-between mb-5", children: [_jsx("p", { className: "text-[11px] font-bold uppercase tracking-[0.12em]", style: { color: "var(--color-muted)" }, children: label }), _jsx("div", { className: `p-2.5 rounded-xl transition-transform group-hover:scale-110 ${iconBg}`, children: icon })] }), _jsx("h3", { className: "text-4xl font-extrabold tracking-tight tabular-nums", style: { color: "var(--color-heading)" }, children: value })] }));
|
| 4 |
-
};
|
| 5 |
-
export default StatCard;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dashboard/src/components/StatsRow.js
DELETED
|
@@ -1,19 +0,0 @@
|
|
| 1 |
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
| 2 |
-
import { useQuery } from "@tanstack/react-query";
|
| 3 |
-
import { Trophy, Zap, Activity } from "lucide-react";
|
| 4 |
-
import { fetchStats, fetchHealth } from "../api";
|
| 5 |
-
import StatCard from "./StatCard";
|
| 6 |
-
const StatsRow = () => {
|
| 7 |
-
const { data: stats } = useQuery({
|
| 8 |
-
queryKey: ["stats"],
|
| 9 |
-
queryFn: fetchStats,
|
| 10 |
-
refetchInterval: 30_000,
|
| 11 |
-
});
|
| 12 |
-
const { data: health } = useQuery({
|
| 13 |
-
queryKey: ["health"],
|
| 14 |
-
queryFn: fetchHealth,
|
| 15 |
-
refetchInterval: 10_000,
|
| 16 |
-
});
|
| 17 |
-
return (_jsxs("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-6", children: [_jsx(StatCard, { label: "Total Episodes", value: stats?.total_episodes ?? 0, icon: _jsx(Trophy, { className: "w-5 h-5 text-amber-600" }), iconBg: "bg-amber-50" }), _jsx(StatCard, { label: "Avg. Score", value: stats?.avg_score?.toFixed(2) ?? "0.00", icon: _jsx(Zap, { className: "w-5 h-5 text-blue-600" }), iconBg: "bg-blue-50" }), _jsx(StatCard, { label: "Active Episodes", value: health?.active_episodes ?? 0, icon: _jsx(Activity, { className: "w-5 h-5 text-emerald-600" }), iconBg: "bg-emerald-50" })] }));
|
| 18 |
-
};
|
| 19 |
-
export default StatsRow;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dashboard/src/hooks/useWebSocket.js
DELETED
|
@@ -1,56 +0,0 @@
|
|
| 1 |
-
import { useEffect, useRef } from "react";
|
| 2 |
-
import { useEventStore } from "../stores/eventStore";
|
| 3 |
-
export function useWebSocket() {
|
| 4 |
-
const { push, setConnected } = useEventStore();
|
| 5 |
-
const reconnectTimeout = useRef(null);
|
| 6 |
-
useEffect(() => {
|
| 7 |
-
let socket = null;
|
| 8 |
-
let isMounted = true;
|
| 9 |
-
function connect() {
|
| 10 |
-
if (reconnectTimeout.current)
|
| 11 |
-
clearTimeout(reconnectTimeout.current);
|
| 12 |
-
const protocol = window.location.protocol === "https:" ? "wss:" : "ws:";
|
| 13 |
-
const host = import.meta.env.DEV ? "localhost:7860" : window.location.host;
|
| 14 |
-
const url = `${protocol}//${host}/ws/events`;
|
| 15 |
-
socket = new WebSocket(url);
|
| 16 |
-
socket.onopen = () => {
|
| 17 |
-
if (!isMounted)
|
| 18 |
-
return;
|
| 19 |
-
setConnected(true);
|
| 20 |
-
console.log("WebSocket connected");
|
| 21 |
-
};
|
| 22 |
-
socket.onmessage = (event) => {
|
| 23 |
-
if (!isMounted)
|
| 24 |
-
return;
|
| 25 |
-
try {
|
| 26 |
-
const data = JSON.parse(event.data);
|
| 27 |
-
push({
|
| 28 |
-
...data,
|
| 29 |
-
timestamp: new Date().toISOString(),
|
| 30 |
-
});
|
| 31 |
-
}
|
| 32 |
-
catch (err) {
|
| 33 |
-
console.error("Failed to parse WS message", err);
|
| 34 |
-
}
|
| 35 |
-
};
|
| 36 |
-
socket.onclose = () => {
|
| 37 |
-
if (!isMounted)
|
| 38 |
-
return;
|
| 39 |
-
setConnected(false);
|
| 40 |
-
console.log("WebSocket closed, reconnecting in 3s...");
|
| 41 |
-
reconnectTimeout.current = setTimeout(connect, 3000);
|
| 42 |
-
};
|
| 43 |
-
socket.onerror = (err) => {
|
| 44 |
-
console.error("WebSocket error", err);
|
| 45 |
-
socket?.close();
|
| 46 |
-
};
|
| 47 |
-
}
|
| 48 |
-
connect();
|
| 49 |
-
return () => {
|
| 50 |
-
isMounted = false;
|
| 51 |
-
if (reconnectTimeout.current)
|
| 52 |
-
clearTimeout(reconnectTimeout.current);
|
| 53 |
-
socket?.close();
|
| 54 |
-
};
|
| 55 |
-
}, [push, setConnected]);
|
| 56 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dashboard/src/main.js
DELETED
|
@@ -1,18 +0,0 @@
|
|
| 1 |
-
import { jsx as _jsx } from "react/jsx-runtime";
|
| 2 |
-
import React from "react";
|
| 3 |
-
import ReactDOM from "react-dom/client";
|
| 4 |
-
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
|
| 5 |
-
import "@fontsource/inter/400.css";
|
| 6 |
-
import "@fontsource/inter/600.css";
|
| 7 |
-
import "@fontsource/inter/700.css";
|
| 8 |
-
import "./index.css";
|
| 9 |
-
import App from "./App";
|
| 10 |
-
const queryClient = new QueryClient({
|
| 11 |
-
defaultOptions: {
|
| 12 |
-
queries: {
|
| 13 |
-
refetchOnWindowFocus: false,
|
| 14 |
-
retry: 1,
|
| 15 |
-
},
|
| 16 |
-
},
|
| 17 |
-
});
|
| 18 |
-
ReactDOM.createRoot(document.getElementById("root")).render(_jsx(React.StrictMode, { children: _jsx(QueryClientProvider, { client: queryClient, children: _jsx(App, {}) }) }));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dashboard/src/stores/eventStore.js
DELETED
|
@@ -1,8 +0,0 @@
|
|
| 1 |
-
import { create } from "zustand";
|
| 2 |
-
export const useEventStore = create((set) => ({
|
| 3 |
-
events: [],
|
| 4 |
-
connected: false,
|
| 5 |
-
push: (e) => set((s) => ({ events: [e, ...s.events].slice(0, 20) })),
|
| 6 |
-
clear: () => set({ events: [] }),
|
| 7 |
-
setConnected: (v) => set({ connected: v }),
|
| 8 |
-
}));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dashboard/src/types.js
DELETED
|
@@ -1 +0,0 @@
|
|
| 1 |
-
export {};
|
|
|
|
|
|
static/dashboard/assets/{index-B4sMAwyk.js → index-756xQEYX.js}
RENAMED
|
@@ -101,9 +101,9 @@ Error generating stack: `+a.message+`
|
|
| 101 |
*
|
| 102 |
* This source code is licensed under the ISC license.
|
| 103 |
* See the LICENSE file in the root directory of this source tree.
|
| 104 |
-
*/const U1=[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]],lc=Ua("Zap",U1),Ps="",$y=()=>fetch(`${Ps}/health`).then(c=>c.json()),C1=()=>fetch(`${Ps}/stats`).then(c=>c.json()),R1=(c,i=10)=>fetch(`${Ps}/leaderboard?task_id=${c}&limit=${i}`).then(r=>r.json()).then(r=>r.entries||[]);function Iy(c){var i,r,s="";if(typeof c=="string"||typeof c=="number")s+=c;else if(typeof c=="object")if(Array.isArray(c)){var g=c.length;for(i=0;i<g;i++)c[i]&&(r=Iy(c[i]))&&(s&&(s+=" "),s+=r)}else for(r in c)c[r]&&(s&&(s+=" "),s+=r);return s}function Dn(){for(var c,i,r=0,s="",g=arguments.length;r<g;r++)(c=arguments[r])&&(i=Iy(c))&&(s&&(s+=" "),s+=i);return s}const j1=()=>{const{data:c}=uc({queryKey:["health"],queryFn:$y,refetchInterval:1e4}),i=(c==null?void 0:c.status)==="ok";return D.jsxs("header",{className:"flex items-center justify-between pb-2",children:[D.jsx("div",{className:"flex items-center gap-6",children:D.jsxs("div",{className:"flex items-center gap-2",children:[D.jsx("img",{src:
|
| 105 |
inline-flex items-center justify-center w-7 h-7 rounded-lg text-xs font-extrabold
|
| 106 |
${r===0?"bg-amber-50 text-amber-600":""}
|
| 107 |
${r===1?"bg-zinc-100 text-zinc-500":""}
|
| 108 |
${r===2?"bg-orange-50 text-orange-500":""}
|
| 109 |
-
`,children:i.rank}):D.jsx("span",{className:"text-sm font-semibold pl-2",style:{color:"var(--color-muted)"},children:i.rank})}),D.jsx("td",{className:"px-7 py-5",children:D.jsx("span",{className:"font-semibold group-hover:text-zinc-900 transition-colors",style:{color:"var(--color-heading)"},children:i.agent_name})}),D.jsx("td",{className:"px-7 py-5 text-center",children:D.jsx(
|
|
|
|
| 101 |
*
|
| 102 |
* This source code is licensed under the ISC license.
|
| 103 |
* See the LICENSE file in the root directory of this source tree.
|
| 104 |
+
*/const U1=[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]],lc=Ua("Zap",U1),Ps="",$y=()=>fetch(`${Ps}/health`).then(c=>c.json()),C1=()=>fetch(`${Ps}/stats`).then(c=>c.json()),R1=(c,i=10)=>fetch(`${Ps}/leaderboard?task_id=${c}&limit=${i}`).then(r=>r.json()).then(r=>r.entries||[]);function Iy(c){var i,r,s="";if(typeof c=="string"||typeof c=="number")s+=c;else if(typeof c=="object")if(Array.isArray(c)){var g=c.length;for(i=0;i<g;i++)c[i]&&(r=Iy(c[i]))&&(s&&(s+=" "),s+=r)}else for(r in c)c[r]&&(s&&(s+=" "),s+=r);return s}function Dn(){for(var c,i,r=0,s="",g=arguments.length;r<g;r++)(c=arguments[r])&&(i=Iy(c))&&(s&&(s+=" "),s+=i);return s}const j1="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwIiBoZWlnaHQ9IjUwIiB2aWV3Qm94PSItMTAgLTUgMjAwIDUwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogIDxyZWN0IHg9Ii0xMCIgeT0iLTUiIHdpZHRoPSIyMDAiIGhlaWdodD0iNTAiIHJ4PSI4IiBmaWxsPSIjZmZmZmZmIiAvPgogIDx0ZXh0IHg9IjAiIHk9IjMyIiBmb250LWZhbWlseT0iLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnSW50ZXInLCAnU2Vnb2UgVUknLCBSb2JvdG8sIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWYiIGZvbnQtd2VpZ2h0PSI5MDAiIGZvbnQtc2l6ZT0iMzYiIGZpbGw9IiMwOTA5MGIiIGxldHRlci1zcGFjaW5nPSItMC4wM2VtIj5Db2RlbGVuczx0c3BhbiBmaWxsPSIjZWY0NDQ0Ij4uPC90c3Bhbj48L3RleHQ+Cjwvc3ZnPgo=",H1=()=>{const{data:c}=uc({queryKey:["health"],queryFn:$y,refetchInterval:1e4}),i=(c==null?void 0:c.status)==="ok";return D.jsxs("header",{className:"flex items-center justify-between pb-2",children:[D.jsx("div",{className:"flex items-center gap-6",children:D.jsxs("div",{className:"flex items-center gap-2",children:[D.jsx("img",{src:j1,className:"h-[38px] w-auto",alt:"CodeLens."}),D.jsx("div",{className:"h-5 w-px bg-zinc-200 hidden sm:block mx-2"}),D.jsx("p",{className:"text-[10px] font-mono font-bold uppercase tracking-[0.3em] hidden sm:block pt-1 opacity-40 group-hover:opacity-60 transition-opacity",style:{color:"var(--color-heading)"},children:"Evaluation"})]})}),D.jsx("div",{className:Dn("flex items-center gap-2 px-4 py-2 rounded-full text-xs font-semibold tracking-wide uppercase transition-all",i?"bg-emerald-50 text-emerald-600 ring-1 ring-emerald-200":"bg-red-50 text-red-500 ring-1 ring-red-200"),children:i?D.jsxs(D.Fragment,{children:[D.jsx(N1,{className:"w-3.5 h-3.5"}),D.jsx("span",{children:"Connected"})]}):D.jsxs(D.Fragment,{children:[D.jsx(_1,{className:"w-3.5 h-3.5"}),D.jsx("span",{children:"Offline"})]})})]})},Us=({label:c,value:i,icon:r,iconBg:s})=>D.jsxs("div",{className:"bg-white rounded-3xl p-7 transition-all duration-200 hover:shadow-lg hover:-translate-y-0.5 group",style:{border:"1px solid var(--color-border)"},children:[D.jsxs("div",{className:"flex items-start justify-between mb-5",children:[D.jsx("p",{className:"text-[11px] font-bold uppercase tracking-[0.12em]",style:{color:"var(--color-muted)"},children:c}),D.jsx("div",{className:`p-2.5 rounded-xl transition-transform group-hover:scale-110 ${s}`,children:r})]}),D.jsx("h3",{className:"text-4xl font-extrabold tracking-tight tabular-nums",style:{color:"var(--color-heading)"},children:i})]}),q1=()=>{var r;const{data:c}=uc({queryKey:["stats"],queryFn:C1,refetchInterval:3e4}),{data:i}=uc({queryKey:["health"],queryFn:$y,refetchInterval:1e4});return D.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6",children:[D.jsx(Us,{label:"Total Episodes",value:(c==null?void 0:c.total_episodes)??0,icon:D.jsx(ws,{className:"w-5 h-5 text-amber-600"}),iconBg:"bg-amber-50"}),D.jsx(Us,{label:"Avg. Score",value:((r=c==null?void 0:c.avg_score)==null?void 0:r.toFixed(2))??"0.00",icon:D.jsx(lc,{className:"w-5 h-5 text-blue-600"}),iconBg:"bg-blue-50"}),D.jsx(Us,{label:"Active Episodes",value:(i==null?void 0:i.active_episodes)??0,icon:D.jsx(T1,{className:"w-5 h-5 text-emerald-600"}),iconBg:"bg-emerald-50"})]})},Q1=({score:c})=>{const i=c>=.8?"text-emerald-700 bg-emerald-50 ring-1 ring-emerald-200":c>=.5?"text-amber-700 bg-amber-50 ring-1 ring-amber-200":"text-red-600 bg-red-50 ring-1 ring-red-200";return D.jsx("span",{className:Dn("inline-flex items-center px-3 py-1 rounded-full text-xs font-bold tabular-nums",i),children:c.toFixed(2)})},B1=({entries:c})=>D.jsxs("table",{className:"w-full text-left border-collapse",children:[D.jsx("thead",{children:D.jsxs("tr",{style:{borderBottom:"1px solid var(--color-border)"},children:[D.jsx("th",{className:"px-7 py-4 text-[10px] font-bold uppercase tracking-[0.12em]",style:{color:"var(--color-muted)"},children:"Rank"}),D.jsx("th",{className:"px-7 py-4 text-[10px] font-bold uppercase tracking-[0.12em]",style:{color:"var(--color-muted)"},children:"Agent"}),D.jsx("th",{className:"px-7 py-4 text-[10px] font-bold uppercase tracking-[0.12em] text-center",style:{color:"var(--color-muted)"},children:"Score"}),D.jsx("th",{className:"px-7 py-4 text-[10px] font-bold uppercase tracking-[0.12em] text-right",style:{color:"var(--color-muted)"},children:"Seed"}),D.jsx("th",{className:"px-7 py-4 text-[10px] font-bold uppercase tracking-[0.12em] text-right",style:{color:"var(--color-muted)"},children:"Submitted"})]})}),D.jsx("tbody",{children:c.map((i,r)=>D.jsxs("tr",{className:"group hover:bg-zinc-50/80 transition-colors tabular-nums",style:{borderBottom:"1px solid var(--color-border)"},children:[D.jsx("td",{className:"px-7 py-5",children:r<3?D.jsx("span",{className:`
|
| 105 |
inline-flex items-center justify-center w-7 h-7 rounded-lg text-xs font-extrabold
|
| 106 |
${r===0?"bg-amber-50 text-amber-600":""}
|
| 107 |
${r===1?"bg-zinc-100 text-zinc-500":""}
|
| 108 |
${r===2?"bg-orange-50 text-orange-500":""}
|
| 109 |
+
`,children:i.rank}):D.jsx("span",{className:"text-sm font-semibold pl-2",style:{color:"var(--color-muted)"},children:i.rank})}),D.jsx("td",{className:"px-7 py-5",children:D.jsx("span",{className:"font-semibold group-hover:text-zinc-900 transition-colors",style:{color:"var(--color-heading)"},children:i.agent_name})}),D.jsx("td",{className:"px-7 py-5 text-center",children:D.jsx(Q1,{score:i.score})}),D.jsx("td",{className:"px-7 py-5 text-right text-sm font-mono",style:{color:"var(--color-muted)"},children:i.seed}),D.jsx("td",{className:"px-7 py-5 text-right text-xs",style:{color:"var(--color-muted)"},children:new Date(i.submitted_at).toLocaleDateString()})]},r))})]}),Y1=()=>{const[c,i]=Gt.useState("bug_detection"),{data:r,isLoading:s,refetch:g,isRefetching:O}=uc({queryKey:["leaderboard",c],queryFn:()=>R1(c)}),R=[{id:"bug_detection",label:"Bug Detection"},{id:"security_audit",label:"Security Audit"},{id:"architectural_review",label:"Arch. Review"}];return D.jsxs("div",{className:"bg-white rounded-3xl overflow-hidden flex flex-col h-[600px]",style:{border:"1px solid var(--color-border)"},children:[D.jsxs("div",{className:"px-7 py-5 flex items-center justify-between",style:{borderBottom:"1px solid var(--color-border)"},children:[D.jsxs("div",{className:"flex items-center gap-3",children:[D.jsx("div",{className:"p-2 bg-amber-50 rounded-xl",children:D.jsx(ws,{className:"w-5 h-5 text-amber-600"})}),D.jsx("h2",{className:"text-lg font-extrabold tracking-tight",style:{color:"var(--color-heading)"},children:"Leaderboard"})]}),D.jsx("button",{onClick:()=>g(),disabled:s||O,className:"p-2.5 hover:bg-zinc-100 rounded-xl transition-colors disabled:opacity-40",style:{color:"var(--color-muted)"},children:D.jsx(Ay,{className:Dn("w-4 h-4",(s||O)&&"animate-spin")})})]}),D.jsx("div",{className:"px-7",style:{borderBottom:"1px solid var(--color-border)"},children:D.jsx("div",{className:"flex gap-6 overflow-x-auto",children:R.map(C=>D.jsxs("button",{onClick:()=>i(C.id),className:Dn("py-3.5 text-sm font-semibold transition-all relative whitespace-nowrap",c===C.id?"text-zinc-900":"text-zinc-400 hover:text-zinc-600"),children:[C.label,c===C.id&&D.jsx("div",{className:"absolute bottom-0 left-0 right-0 h-[2px] bg-zinc-900 rounded-full"})]},C.id))})}),D.jsx("div",{className:"flex-1 overflow-auto",children:s?D.jsxs("div",{className:"flex items-center justify-center h-full gap-3",style:{color:"var(--color-muted)"},children:[D.jsx(Ay,{className:"w-5 h-5 animate-spin"}),D.jsx("span",{className:"text-sm font-medium",children:"Loading entries..."})]}):r&&r.length>0?D.jsx(B1,{entries:r}):D.jsxs("div",{className:"flex flex-col items-center justify-center h-full space-y-4",children:[D.jsx("div",{className:"p-5 bg-zinc-50 rounded-2xl",children:D.jsx(ws,{className:"w-10 h-10 text-zinc-200"})}),D.jsx("p",{className:"text-xs font-bold uppercase tracking-[0.15em]",style:{color:"var(--color-muted)"},children:"No rankings yet"})]})})]})},Oy=c=>{let i;const r=new Set,s=(E,q)=>{const U=typeof E=="function"?E(i):E;if(!Object.is(U,i)){const L=i;i=q??(typeof U!="object"||U===null)?U:Object.assign({},i,U),r.forEach(V=>V(i,L))}},g=()=>i,C={setState:s,getState:g,getInitialState:()=>N,subscribe:E=>(r.add(E),()=>r.delete(E))},N=i=c(s,g,C);return C},G1=(c=>c?Oy(c):Oy),X1=c=>c;function Z1(c,i=X1){const r=An.useSyncExternalStore(c.subscribe,An.useCallback(()=>i(c.getState()),[c,i]),An.useCallback(()=>i(c.getInitialState()),[c,i]));return An.useDebugValue(r),r}const My=c=>{const i=G1(c),r=s=>Z1(i,s);return Object.assign(r,i),r},L1=(c=>c?My(c):My),Py=L1(c=>({events:[],connected:!1,push:i=>c(r=>({events:[i,...r.events].slice(0,20)})),clear:()=>c({events:[]}),setConnected:i=>c({connected:i})})),V1=({event:c})=>{const i=new Date(c.timestamp).toLocaleTimeString([],{hour12:!1,hour:"2-digit",minute:"2-digit",second:"2-digit"});return D.jsxs("div",{className:"rounded-2xl p-4 transition-all duration-200 hover:shadow-sm animate-fade-slide-in",style:{backgroundColor:"#fafafa",border:"1px solid var(--color-border)"},children:[D.jsxs("div",{className:"flex items-center justify-between mb-2",children:[D.jsx("span",{className:"text-[10px] tabular-nums font-bold uppercase tracking-wider",style:{color:"var(--color-muted)"},children:i}),D.jsx("span",{className:"text-[10px] font-mono font-bold bg-indigo-50 text-indigo-600 px-2 py-0.5 rounded-md",children:c.episode_id.slice(0,8)})]}),D.jsxs("div",{className:"flex items-center justify-between",children:[D.jsx("span",{className:"text-sm font-semibold capitalize truncate max-w-[140px]",style:{color:"var(--color-heading)"},children:c.type}),D.jsxs("span",{className:Dn("text-xs font-bold font-mono px-2.5 py-1 rounded-full",c.reward>0?"text-emerald-700 bg-emerald-50":c.reward<0?"text-red-600 bg-red-50":"text-zinc-500 bg-zinc-100"),children:[c.reward>0?"+":"",c.reward.toFixed(2)]})]})]})},K1=()=>{const{events:c,clear:i,connected:r}=Py();return D.jsxs("div",{className:"bg-white rounded-3xl overflow-hidden flex flex-col h-[600px]",style:{border:"1px solid var(--color-border)"},children:[D.jsxs("div",{className:"px-7 py-5 flex items-center justify-between",style:{borderBottom:"1px solid var(--color-border)"},children:[D.jsxs("div",{className:"flex items-center gap-3",children:[D.jsx("div",{className:`p-2 rounded-xl ${r?"bg-amber-50":"bg-zinc-100"}`,children:D.jsx(lc,{className:`w-5 h-5 ${r?"text-amber-600":"text-zinc-400"}`})}),D.jsx("h2",{className:"text-lg font-extrabold tracking-tight",style:{color:"var(--color-heading)"},children:"Live Feed"})]}),D.jsx("button",{onClick:i,className:"p-2.5 hover:bg-zinc-100 rounded-xl transition-colors",style:{color:"var(--color-muted)"},title:"Clear Feed",children:D.jsx(O1,{className:"w-4 h-4"})})]}),D.jsxs("div",{className:"flex-1 overflow-auto p-5 space-y-3",children:[!r&&D.jsxs("div",{className:"flex flex-col items-center justify-center h-full space-y-4 text-center",children:[D.jsx("div",{className:"p-5 bg-zinc-50 rounded-2xl",children:D.jsx(lc,{className:"w-10 h-10 text-zinc-200 animate-pulse"})}),D.jsx("p",{className:"text-[11px] uppercase tracking-[0.15em] font-bold",style:{color:"var(--color-muted)"},children:"Connecting to live stream..."})]}),r&&c.length===0&&D.jsxs("div",{className:"flex flex-col items-center justify-center h-full space-y-4 text-center",children:[D.jsx("div",{className:"p-5 bg-zinc-50 rounded-2xl",children:D.jsx(lc,{className:"w-10 h-10 text-zinc-200"})}),D.jsxs("div",{className:"space-y-1.5",children:[D.jsx("p",{className:"text-[11px] font-bold uppercase tracking-[0.15em]",style:{color:"var(--color-muted)"},children:"Monitoring activity"}),D.jsx("p",{className:"text-[11px] max-w-[180px] leading-relaxed",style:{color:"var(--color-muted)"},children:"Evaluation events will appear here in real-time."})]})]}),c.map((s,g)=>D.jsx(V1,{event:s},g))]})]})};function w1(){const{push:c,setConnected:i}=Py(),r=Gt.useRef(null);Gt.useEffect(()=>{let s=null,g=!0;function O(){r.current&&clearTimeout(r.current);const R=window.location.protocol==="https:"?"wss:":"ws:",C=window.location.host,N=`${R}//${C}/ws/events`;s=new WebSocket(N),s.onopen=()=>{g&&(i(!0),console.log("WebSocket connected"))},s.onmessage=E=>{if(g)try{const q=JSON.parse(E.data);c({...q,timestamp:new Date().toISOString()})}catch(q){console.error("Failed to parse WS message",q)}},s.onclose=()=>{g&&(i(!1),console.log("WebSocket closed, reconnecting in 3s..."),r.current=setTimeout(O,3e3))},s.onerror=E=>{console.error("WebSocket error",E),s==null||s.close()}}return O(),()=>{g=!1,r.current&&clearTimeout(r.current),s==null||s.close()}},[c,i])}const J1=()=>(w1(),D.jsx("div",{className:"min-h-screen",style:{backgroundColor:"var(--color-bg)"},children:D.jsxs("div",{className:"max-w-7xl mx-auto px-6 py-10 space-y-10",children:[D.jsx(H1,{}),D.jsx(q1,{}),D.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-8",children:[D.jsx("div",{className:"lg:col-span-2",children:D.jsx(Y1,{})}),D.jsx("div",{className:"lg:col-span-1",children:D.jsx(K1,{})})]})]})})),F1=new u1({defaultOptions:{queries:{refetchOnWindowFocus:!1,retry:1}}});Rv.createRoot(document.getElementById("root")).render(D.jsx(An.StrictMode,{children:D.jsx(i1,{client:F1,children:D.jsx(J1,{})})}));
|
static/dashboard/assets/{index-DDkttNE1.css → index-B51822Cd.css}
RENAMED
|
@@ -1 +1 @@
|
|
| 1 |
-
@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:400;src:url(./inter-cyrillic-ext-400-normal-BQZuk6qB.woff2) format("woff2"),url(./inter-cyrillic-ext-400-normal-DQukG94-.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:400;src:url(./inter-cyrillic-400-normal-obahsSVq.woff2) format("woff2"),url(./inter-cyrillic-400-normal-HOLc17fK.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:400;src:url(./inter-greek-ext-400-normal-DGGRlc-M.woff2) format("woff2"),url(./inter-greek-ext-400-normal-KugGGMne.woff) format("woff");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:400;src:url(./inter-greek-400-normal-B4URO6DV.woff2) format("woff2"),url(./inter-greek-400-normal-q2sYcFCs.woff) format("woff");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:400;src:url(./inter-vietnamese-400-normal-DMkecbls.woff2) format("woff2"),url(./inter-vietnamese-400-normal-Bbgyi5SW.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:400;src:url(./inter-latin-ext-400-normal-C1nco2VV.woff2) format("woff2"),url(./inter-latin-ext-400-normal-77YHD8bZ.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:400;src:url(./inter-latin-400-normal-C38fXH4l.woff2) format("woff2"),url(./inter-latin-400-normal-CyCys3Eg.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:600;src:url(./inter-cyrillic-ext-600-normal-Dfes3d0z.woff2) format("woff2"),url(./inter-cyrillic-ext-600-normal-Bcila6Z-.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:600;src:url(./inter-cyrillic-600-normal-CWCymEST.woff2) format("woff2"),url(./inter-cyrillic-600-normal-4D_pXhcN.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:600;src:url(./inter-greek-ext-600-normal-DRtmH8MT.woff2) format("woff2"),url(./inter-greek-ext-600-normal-B8X0CLgF.woff) format("woff");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:600;src:url(./inter-greek-600-normal-plRanbMR.woff2) format("woff2"),url(./inter-greek-600-normal-BZpKdvQh.woff) format("woff");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:600;src:url(./inter-vietnamese-600-normal-Cc8MFFhd.woff2) format("woff2"),url(./inter-vietnamese-600-normal-BuLX-rYi.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:600;src:url(./inter-latin-ext-600-normal-D2bJ5OIk.woff2) format("woff2"),url(./inter-latin-ext-600-normal-CIVaiw4L.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:600;src:url(./inter-latin-600-normal-LgqL8muc.woff2) format("woff2"),url(./inter-latin-600-normal-CiBQ2DWP.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:700;src:url(./inter-cyrillic-ext-700-normal-BjwYoWNd.woff2) format("woff2"),url(./inter-cyrillic-ext-700-normal-LO58E6JB.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:700;src:url(./inter-cyrillic-700-normal-CjBOestx.woff2) format("woff2"),url(./inter-cyrillic-700-normal-DrXBdSj3.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:700;src:url(./inter-greek-ext-700-normal-qfdV9bQt.woff2) format("woff2"),url(./inter-greek-ext-700-normal-BoQ6DsYi.woff) format("woff");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:700;src:url(./inter-greek-700-normal-C3JjAnD8.woff2) format("woff2"),url(./inter-greek-700-normal-BUv2fZ6O.woff) format("woff");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:700;src:url(./inter-vietnamese-700-normal-DlLaEgI2.woff2) format("woff2"),url(./inter-vietnamese-700-normal-BZaoP0fm.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:700;src:url(./inter-latin-ext-700-normal-Ca8adRJv.woff2) format("woff2"),url(./inter-latin-ext-700-normal-TidjK2hL.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:700;src:url(./inter-latin-700-normal-Yt3aPRUw.woff2) format("woff2"),url(./inter-latin-700-normal-BLAVimhd.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-duration:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--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-200:oklch(88.5% .062 18.334);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-orange-50:oklch(98% .016 73.684);--color-orange-500:oklch(70.5% .213 47.604);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-emerald-50:oklch(97.9% .021 166.113);--color-emerald-200:oklch(90.5% .093 164.15);--color-emerald-600:oklch(59.6% .145 163.225);--color-emerald-700:oklch(50.8% .118 165.612);--color-blue-50:oklch(97% .014 254.604);--color-blue-600:oklch(54.6% .245 262.881);--color-indigo-50:oklch(96.2% .018 272.314);--color-indigo-600:oklch(51.1% .262 276.966);--color-zinc-50:oklch(98.5% 0 0);--color-zinc-100:oklch(96.7% .001 286.375);--color-zinc-200:oklch(92% .004 286.32);--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-900:oklch(21% .006 285.885);--color-white:#fff;--spacing:.25rem;--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-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{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%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}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}::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:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance: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 components;@layer utilities{.absolute{position:absolute}.relative{position:relative}.right-0{right:calc(var(--spacing) * 0)}.bottom-0{bottom:calc(var(--spacing) * 0)}.left-0{left:calc(var(--spacing) * 0)}.mx-2{margin-inline:calc(var(--spacing) * 2)}.mx-auto{margin-inline:auto}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-5{margin-bottom:calc(var(--spacing) * 5)}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-flex{display:inline-flex}.table{display:table}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-7{height:calc(var(--spacing) * 7)}.h-10{height:calc(var(--spacing) * 10)}.h-\[2px\]{height:2px}.h-\[38px\]{height:38px}.h-\[600px\]{height:600px}.h-full{height:100%}.min-h-screen{min-height:100vh}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-7{width:calc(var(--spacing) * 7)}.w-10{width:calc(var(--spacing) * 10)}.w-auto{width:auto}.w-full{width:100%}.w-px{width:1px}.max-w-7xl{max-width:var(--container-7xl)}.max-w-\[140px\]{max-width:140px}.max-w-\[180px\]{max-width:180px}.flex-1{flex:1}.border-collapse{border-collapse:collapse}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.flex-col{flex-direction:column}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-8{gap:calc(var(--spacing) * 8)}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-10>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 10) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 10) * calc(1 - var(--tw-space-y-reverse)))}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.bg-amber-50{background-color:var(--color-amber-50)}.bg-blue-50{background-color:var(--color-blue-50)}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-indigo-50{background-color:var(--color-indigo-50)}.bg-orange-50{background-color:var(--color-orange-50)}.bg-red-50{background-color:var(--color-red-50)}.bg-white{background-color:var(--color-white)}.bg-zinc-50{background-color:var(--color-zinc-50)}.bg-zinc-100{background-color:var(--color-zinc-100)}.bg-zinc-200{background-color:var(--color-zinc-200)}.bg-zinc-900{background-color:var(--color-zinc-900)}.p-2{padding:calc(var(--spacing) * 2)}.p-2\.5{padding:calc(var(--spacing) * 2.5)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-7{padding:calc(var(--spacing) * 7)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-7{padding-inline:calc(var(--spacing) * 7)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3\.5{padding-block:calc(var(--spacing) * 3.5)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-10{padding-block:calc(var(--spacing) * 10)}.pt-1{padding-top:calc(var(--spacing) * 1)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pl-2{padding-left:calc(var(--spacing) * 2)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.3em\]{--tw-tracking:.3em;letter-spacing:.3em}.tracking-\[0\.12em\]{--tw-tracking:.12em;letter-spacing:.12em}.tracking-\[0\.15em\]{--tw-tracking:.15em;letter-spacing:.15em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.whitespace-nowrap{white-space:nowrap}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-blue-600{color:var(--color-blue-600)}.text-emerald-600{color:var(--color-emerald-600)}.text-emerald-700{color:var(--color-emerald-700)}.text-indigo-600{color:var(--color-indigo-600)}.text-orange-500{color:var(--color-orange-500)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-zinc-200{color:var(--color-zinc-200)}.text-zinc-400{color:var(--color-zinc-400)}.text-zinc-500{color:var(--color-zinc-500)}.text-zinc-900{color:var(--color-zinc-900)}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.opacity-40{opacity:.4}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-amber-200{--tw-ring-color:var(--color-amber-200)}.ring-emerald-200{--tw-ring-color:var(--color-emerald-200)}.ring-red-200{--tw-ring-color:var(--color-red-200)}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}@media(hover:hover){.group-hover\:scale-110:is(:where(.group):hover *){--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.group-hover\:text-zinc-900:is(:where(.group):hover *){color:var(--color-zinc-900)}.group-hover\:opacity-60:is(:where(.group):hover *){opacity:.6}.hover\:-translate-y-0\.5:hover{--tw-translate-y:calc(var(--spacing) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y)}.hover\:bg-zinc-50\/80:hover{background-color:#fafafacc}@supports (color:color-mix(in lab,red,red)){.hover\:bg-zinc-50\/80:hover{background-color:color-mix(in oklab,var(--color-zinc-50) 80%,transparent)}}.hover\:bg-zinc-100:hover{background-color:var(--color-zinc-100)}.hover\:text-zinc-600:hover{color:var(--color-zinc-600)}.hover\:shadow-lg:hover{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-sm:hover{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.disabled\:opacity-40:disabled{opacity:.4}@media(min-width:40rem){.sm\:block{display:block}}@media(min-width:48rem){.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media(min-width:64rem){.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-2{grid-column:span 2/span 2}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}}:root{--color-bg:#f4f4f5;--color-surface:#fff;--color-border:#e4e4e7;--color-heading:#09090b;--color-body:#52525b;--color-muted:#a1a1aa;--color-accent:#6366f1;--color-success:#22c55e;--color-warning:#f59e0b;--color-danger:#ef4444}*{box-sizing:border-box}body{background-color:var(--color-bg);color:var(--color-body);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Inter,system-ui,-apple-system,BlinkMacSystemFont,sans-serif}::-webkit-scrollbar{width:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:#d4d4d8;border-radius:999px}::-webkit-scrollbar-thumb:hover{background:#a1a1aa}@keyframes fadeSlideIn{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}.animate-fade-slide-in{animation:.3s ease-out forwards fadeSlideIn}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-duration{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}
|
|
|
|
| 1 |
+
@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:400;src:url(./inter-cyrillic-ext-400-normal-BQZuk6qB.woff2) format("woff2"),url(./inter-cyrillic-ext-400-normal-DQukG94-.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:400;src:url(./inter-cyrillic-400-normal-obahsSVq.woff2) format("woff2"),url(./inter-cyrillic-400-normal-HOLc17fK.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:400;src:url(./inter-greek-ext-400-normal-DGGRlc-M.woff2) format("woff2"),url(./inter-greek-ext-400-normal-KugGGMne.woff) format("woff");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:400;src:url(./inter-greek-400-normal-B4URO6DV.woff2) format("woff2"),url(./inter-greek-400-normal-q2sYcFCs.woff) format("woff");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:400;src:url(./inter-vietnamese-400-normal-DMkecbls.woff2) format("woff2"),url(./inter-vietnamese-400-normal-Bbgyi5SW.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:400;src:url(./inter-latin-ext-400-normal-C1nco2VV.woff2) format("woff2"),url(./inter-latin-ext-400-normal-77YHD8bZ.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:400;src:url(./inter-latin-400-normal-C38fXH4l.woff2) format("woff2"),url(./inter-latin-400-normal-CyCys3Eg.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:600;src:url(./inter-cyrillic-ext-600-normal-Dfes3d0z.woff2) format("woff2"),url(./inter-cyrillic-ext-600-normal-Bcila6Z-.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:600;src:url(./inter-cyrillic-600-normal-CWCymEST.woff2) format("woff2"),url(./inter-cyrillic-600-normal-4D_pXhcN.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:600;src:url(./inter-greek-ext-600-normal-DRtmH8MT.woff2) format("woff2"),url(./inter-greek-ext-600-normal-B8X0CLgF.woff) format("woff");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:600;src:url(./inter-greek-600-normal-plRanbMR.woff2) format("woff2"),url(./inter-greek-600-normal-BZpKdvQh.woff) format("woff");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:600;src:url(./inter-vietnamese-600-normal-Cc8MFFhd.woff2) format("woff2"),url(./inter-vietnamese-600-normal-BuLX-rYi.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:600;src:url(./inter-latin-ext-600-normal-D2bJ5OIk.woff2) format("woff2"),url(./inter-latin-ext-600-normal-CIVaiw4L.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:600;src:url(./inter-latin-600-normal-LgqL8muc.woff2) format("woff2"),url(./inter-latin-600-normal-CiBQ2DWP.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:700;src:url(./inter-cyrillic-ext-700-normal-BjwYoWNd.woff2) format("woff2"),url(./inter-cyrillic-ext-700-normal-LO58E6JB.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:700;src:url(./inter-cyrillic-700-normal-CjBOestx.woff2) format("woff2"),url(./inter-cyrillic-700-normal-DrXBdSj3.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:700;src:url(./inter-greek-ext-700-normal-qfdV9bQt.woff2) format("woff2"),url(./inter-greek-ext-700-normal-BoQ6DsYi.woff) format("woff");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:700;src:url(./inter-greek-700-normal-C3JjAnD8.woff2) format("woff2"),url(./inter-greek-700-normal-BUv2fZ6O.woff) format("woff");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:700;src:url(./inter-vietnamese-700-normal-DlLaEgI2.woff2) format("woff2"),url(./inter-vietnamese-700-normal-BZaoP0fm.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:700;src:url(./inter-latin-ext-700-normal-Ca8adRJv.woff2) format("woff2"),url(./inter-latin-ext-700-normal-TidjK2hL.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:700;src:url(./inter-latin-700-normal-Yt3aPRUw.woff2) format("woff2"),url(./inter-latin-700-normal-BLAVimhd.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-duration:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--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-200:oklch(88.5% .062 18.334);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-orange-50:oklch(98% .016 73.684);--color-orange-500:oklch(70.5% .213 47.604);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-emerald-50:oklch(97.9% .021 166.113);--color-emerald-200:oklch(90.5% .093 164.15);--color-emerald-600:oklch(59.6% .145 163.225);--color-emerald-700:oklch(50.8% .118 165.612);--color-blue-50:oklch(97% .014 254.604);--color-blue-600:oklch(54.6% .245 262.881);--color-indigo-50:oklch(96.2% .018 272.314);--color-indigo-600:oklch(51.1% .262 276.966);--color-zinc-50:oklch(98.5% 0 0);--color-zinc-100:oklch(96.7% .001 286.375);--color-zinc-200:oklch(92% .004 286.32);--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-900:oklch(21% .006 285.885);--color-white:#fff;--spacing:.25rem;--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-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{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%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}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}::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:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance: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 components;@layer utilities{.absolute{position:absolute}.relative{position:relative}.right-0{right:calc(var(--spacing) * 0)}.bottom-0{bottom:calc(var(--spacing) * 0)}.left-0{left:calc(var(--spacing) * 0)}.mx-2{margin-inline:calc(var(--spacing) * 2)}.mx-auto{margin-inline:auto}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-5{margin-bottom:calc(var(--spacing) * 5)}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-flex{display:inline-flex}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-7{height:calc(var(--spacing) * 7)}.h-10{height:calc(var(--spacing) * 10)}.h-\[2px\]{height:2px}.h-\[38px\]{height:38px}.h-\[600px\]{height:600px}.h-full{height:100%}.min-h-screen{min-height:100vh}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-7{width:calc(var(--spacing) * 7)}.w-10{width:calc(var(--spacing) * 10)}.w-auto{width:auto}.w-full{width:100%}.w-px{width:1px}.max-w-7xl{max-width:var(--container-7xl)}.max-w-\[140px\]{max-width:140px}.max-w-\[180px\]{max-width:180px}.flex-1{flex:1}.border-collapse{border-collapse:collapse}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.flex-col{flex-direction:column}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-8{gap:calc(var(--spacing) * 8)}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-10>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 10) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 10) * calc(1 - var(--tw-space-y-reverse)))}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.bg-amber-50{background-color:var(--color-amber-50)}.bg-blue-50{background-color:var(--color-blue-50)}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-indigo-50{background-color:var(--color-indigo-50)}.bg-orange-50{background-color:var(--color-orange-50)}.bg-red-50{background-color:var(--color-red-50)}.bg-white{background-color:var(--color-white)}.bg-zinc-50{background-color:var(--color-zinc-50)}.bg-zinc-100{background-color:var(--color-zinc-100)}.bg-zinc-200{background-color:var(--color-zinc-200)}.bg-zinc-900{background-color:var(--color-zinc-900)}.p-2{padding:calc(var(--spacing) * 2)}.p-2\.5{padding:calc(var(--spacing) * 2.5)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-7{padding:calc(var(--spacing) * 7)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-7{padding-inline:calc(var(--spacing) * 7)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3\.5{padding-block:calc(var(--spacing) * 3.5)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-10{padding-block:calc(var(--spacing) * 10)}.pt-1{padding-top:calc(var(--spacing) * 1)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pl-2{padding-left:calc(var(--spacing) * 2)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.3em\]{--tw-tracking:.3em;letter-spacing:.3em}.tracking-\[0\.12em\]{--tw-tracking:.12em;letter-spacing:.12em}.tracking-\[0\.15em\]{--tw-tracking:.15em;letter-spacing:.15em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.whitespace-nowrap{white-space:nowrap}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-blue-600{color:var(--color-blue-600)}.text-emerald-600{color:var(--color-emerald-600)}.text-emerald-700{color:var(--color-emerald-700)}.text-indigo-600{color:var(--color-indigo-600)}.text-orange-500{color:var(--color-orange-500)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-zinc-200{color:var(--color-zinc-200)}.text-zinc-400{color:var(--color-zinc-400)}.text-zinc-500{color:var(--color-zinc-500)}.text-zinc-900{color:var(--color-zinc-900)}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.opacity-40{opacity:.4}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-amber-200{--tw-ring-color:var(--color-amber-200)}.ring-emerald-200{--tw-ring-color:var(--color-emerald-200)}.ring-red-200{--tw-ring-color:var(--color-red-200)}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}@media(hover:hover){.group-hover\:scale-110:is(:where(.group):hover *){--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.group-hover\:text-zinc-900:is(:where(.group):hover *){color:var(--color-zinc-900)}.group-hover\:opacity-60:is(:where(.group):hover *){opacity:.6}.hover\:-translate-y-0\.5:hover{--tw-translate-y:calc(var(--spacing) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y)}.hover\:bg-zinc-50\/80:hover{background-color:#fafafacc}@supports (color:color-mix(in lab,red,red)){.hover\:bg-zinc-50\/80:hover{background-color:color-mix(in oklab,var(--color-zinc-50) 80%,transparent)}}.hover\:bg-zinc-100:hover{background-color:var(--color-zinc-100)}.hover\:text-zinc-600:hover{color:var(--color-zinc-600)}.hover\:shadow-lg:hover{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-sm:hover{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.disabled\:opacity-40:disabled{opacity:.4}@media(min-width:40rem){.sm\:block{display:block}}@media(min-width:48rem){.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media(min-width:64rem){.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-2{grid-column:span 2/span 2}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}}:root{--color-bg:#f4f4f5;--color-surface:#fff;--color-border:#e4e4e7;--color-heading:#09090b;--color-body:#52525b;--color-muted:#a1a1aa;--color-accent:#6366f1;--color-success:#22c55e;--color-warning:#f59e0b;--color-danger:#ef4444}*{box-sizing:border-box}body{background-color:var(--color-bg);color:var(--color-body);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Inter,system-ui,-apple-system,BlinkMacSystemFont,sans-serif}::-webkit-scrollbar{width:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:#d4d4d8;border-radius:999px}::-webkit-scrollbar-thumb:hover{background:#a1a1aa}@keyframes fadeSlideIn{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}.animate-fade-slide-in{animation:.3s ease-out forwards fadeSlideIn}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-duration{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}
|
static/dashboard/index.html
CHANGED
|
@@ -6,8 +6,8 @@
|
|
| 6 |
<title>CodeLens Dashboard</title>
|
| 7 |
<meta name="description" content="CodeLens Evaluation Dashboard — Live leaderboard, stats, and real-time event feed." />
|
| 8 |
<link rel="icon" type="image/svg+xml" href="./favicon.svg" />
|
| 9 |
-
<script type="module" crossorigin src="./assets/index-
|
| 10 |
-
<link rel="stylesheet" crossorigin href="./assets/index-
|
| 11 |
</head>
|
| 12 |
<body>
|
| 13 |
<div id="root"></div>
|
|
|
|
| 6 |
<title>CodeLens Dashboard</title>
|
| 7 |
<meta name="description" content="CodeLens Evaluation Dashboard — Live leaderboard, stats, and real-time event feed." />
|
| 8 |
<link rel="icon" type="image/svg+xml" href="./favicon.svg" />
|
| 9 |
+
<script type="module" crossorigin src="./assets/index-756xQEYX.js"></script>
|
| 10 |
+
<link rel="stylesheet" crossorigin href="./assets/index-B51822Cd.css">
|
| 11 |
</head>
|
| 12 |
<body>
|
| 13 |
<div id="root"></div>
|