@zhin.js/console 1.0.30 → 1.0.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -0
- package/client/src/layouts/dashboard.tsx +13 -2
- package/client/src/main.tsx +29 -7
- package/client/src/pages/dashboard-bots.tsx +2 -1
- package/client/src/pages/dashboard-home.tsx +3 -2
- package/client/src/pages/dashboard-logs.tsx +5 -4
- package/client/src/pages/dashboard-plugin-detail.tsx +2 -1
- package/client/src/pages/dashboard-plugins.tsx +2 -1
- package/client/src/pages/login.tsx +94 -0
- package/client/src/utils/auth.ts +38 -0
- package/dist/index.js +4 -4
- package/dist/style.css +2 -2
- package/package.json +5 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
# @zhin.js/console
|
|
2
2
|
|
|
3
|
+
## 1.0.32
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 432d0a5: fix: 鉴权优化
|
|
8
|
+
- Updated dependencies [432d0a5]
|
|
9
|
+
- Updated dependencies [6d94111]
|
|
10
|
+
- @zhin.js/http@1.0.29
|
|
11
|
+
- @zhin.js/core@1.0.36
|
|
12
|
+
- zhin.js@1.0.36
|
|
13
|
+
|
|
14
|
+
## 1.0.31
|
|
15
|
+
|
|
16
|
+
### Patch Changes
|
|
17
|
+
|
|
18
|
+
- Updated dependencies [8502351]
|
|
19
|
+
- @zhin.js/core@1.0.35
|
|
20
|
+
- zhin.js@1.0.35
|
|
21
|
+
- @zhin.js/http@1.0.28
|
|
22
|
+
|
|
3
23
|
## 1.0.30
|
|
4
24
|
|
|
5
25
|
### Patch Changes
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { Outlet, Link, useSelector, useDispatch, toggleSidebar, setActiveMenu } from "@zhin.js/client"
|
|
2
2
|
import { useMemo } from "react"
|
|
3
|
-
import { Menu, Search } from 'lucide-react'
|
|
3
|
+
import { Menu, Search, LogOut } from 'lucide-react'
|
|
4
4
|
import { cn } from "@zhin.js/client"
|
|
5
5
|
import { ThemeToggle } from "../components/ThemeToggle"
|
|
6
6
|
import { Button } from "../components/ui/button"
|
|
7
7
|
import { Input } from "../components/ui/input"
|
|
8
8
|
import { ScrollArea } from "../components/ui/scroll-area"
|
|
9
|
-
import {
|
|
9
|
+
import { clearToken } from "../utils/auth"
|
|
10
10
|
|
|
11
11
|
export default function DashboardLayout() {
|
|
12
12
|
const dispatch = useDispatch()
|
|
@@ -113,6 +113,17 @@ export default function DashboardLayout() {
|
|
|
113
113
|
{/* Right actions */}
|
|
114
114
|
<div className="flex items-center gap-1">
|
|
115
115
|
<ThemeToggle />
|
|
116
|
+
<Button
|
|
117
|
+
variant="ghost"
|
|
118
|
+
size="icon"
|
|
119
|
+
title="退出登录"
|
|
120
|
+
onClick={() => {
|
|
121
|
+
clearToken()
|
|
122
|
+
window.dispatchEvent(new CustomEvent('zhin:auth-required'))
|
|
123
|
+
}}
|
|
124
|
+
>
|
|
125
|
+
<LogOut className="h-4 w-4" />
|
|
126
|
+
</Button>
|
|
116
127
|
</div>
|
|
117
128
|
</header>
|
|
118
129
|
|
package/client/src/main.tsx
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { StrictMode, useEffect, useState } from 'react'
|
|
1
|
+
import { StrictMode, useCallback, useEffect, useState } from 'react'
|
|
2
2
|
import { createRoot } from 'react-dom/client'
|
|
3
3
|
import { Provider as ReduxProvider } from 'react-redux'
|
|
4
4
|
import { Home, Package, Bot, FileText } from 'lucide-react'
|
|
@@ -9,6 +9,8 @@ import DashboardPlugins from './pages/dashboard-plugins'
|
|
|
9
9
|
import DashboardPluginDetail from './pages/dashboard-plugin-detail'
|
|
10
10
|
import DashboardBots from './pages/dashboard-bots'
|
|
11
11
|
import DashboardLogs from './pages/dashboard-logs'
|
|
12
|
+
import LoginPage from './pages/login'
|
|
13
|
+
import { hasToken } from './utils/auth'
|
|
12
14
|
import './style.css'
|
|
13
15
|
import { PersistGate } from 'redux-persist/integration/react'
|
|
14
16
|
import { initializeTheme } from './theme'
|
|
@@ -17,7 +19,31 @@ import { TooltipProvider } from './components/ui/tooltip'
|
|
|
17
19
|
// Initialize theme on app load
|
|
18
20
|
initializeTheme()
|
|
19
21
|
|
|
20
|
-
//
|
|
22
|
+
// Auth guard + route initializer
|
|
23
|
+
function App() {
|
|
24
|
+
const [authed, setAuthed] = useState(hasToken())
|
|
25
|
+
|
|
26
|
+
const handleLogin = useCallback(() => setAuthed(true), [])
|
|
27
|
+
|
|
28
|
+
useEffect(() => {
|
|
29
|
+
const onAuthRequired = () => setAuthed(false)
|
|
30
|
+
window.addEventListener('zhin:auth-required', onAuthRequired)
|
|
31
|
+
return () => window.removeEventListener('zhin:auth-required', onAuthRequired)
|
|
32
|
+
}, [])
|
|
33
|
+
|
|
34
|
+
if (!authed) {
|
|
35
|
+
return <LoginPage onSuccess={handleLogin} />
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return (
|
|
39
|
+
<PersistGate loading={null} persistor={persistor}>
|
|
40
|
+
<ReduxProvider store={store}>
|
|
41
|
+
<RouteInitializer />
|
|
42
|
+
</ReduxProvider>
|
|
43
|
+
</PersistGate>
|
|
44
|
+
)
|
|
45
|
+
}
|
|
46
|
+
|
|
21
47
|
function RouteInitializer() {
|
|
22
48
|
useWebSocket()
|
|
23
49
|
|
|
@@ -108,11 +134,7 @@ createRoot(
|
|
|
108
134
|
).render(
|
|
109
135
|
<StrictMode>
|
|
110
136
|
<TooltipProvider>
|
|
111
|
-
<
|
|
112
|
-
<ReduxProvider store={store}>
|
|
113
|
-
<RouteInitializer />
|
|
114
|
-
</ReduxProvider>
|
|
115
|
-
</PersistGate>
|
|
137
|
+
<App />
|
|
116
138
|
</TooltipProvider>
|
|
117
139
|
</StrictMode>,
|
|
118
140
|
)
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { useEffect, useState } from 'react'
|
|
2
2
|
import { Bot, AlertCircle, Wifi, WifiOff, Activity, Package, Zap } from 'lucide-react'
|
|
3
|
+
import { apiFetch } from '../utils/auth'
|
|
3
4
|
import { Card, CardContent } from '../components/ui/card'
|
|
4
5
|
import { Badge } from '../components/ui/badge'
|
|
5
6
|
import { Alert, AlertDescription } from '../components/ui/alert'
|
|
@@ -26,7 +27,7 @@ export default function DashboardBots() {
|
|
|
26
27
|
|
|
27
28
|
const fetchBots = async () => {
|
|
28
29
|
try {
|
|
29
|
-
const res = await
|
|
30
|
+
const res = await apiFetch('/api/bots')
|
|
30
31
|
if (!res.ok) throw new Error('API 请求失败')
|
|
31
32
|
const data = await res.json()
|
|
32
33
|
if (data.success) { setBots(data.data); setError(null) }
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { useEffect, useState } from 'react'
|
|
2
2
|
import { useNavigate } from 'react-router'
|
|
3
3
|
import { Bot, AlertCircle, Activity, Package, Clock, Cpu, MemoryStick, FileText, TrendingUp } from 'lucide-react'
|
|
4
|
+
import { apiFetch } from '../utils/auth'
|
|
4
5
|
import { Card, CardContent, CardHeader, CardTitle, CardDescription } from '../components/ui/card'
|
|
5
6
|
import { Badge } from '../components/ui/badge'
|
|
6
7
|
import { Button } from '../components/ui/button'
|
|
@@ -40,8 +41,8 @@ export default function DashboardHome() {
|
|
|
40
41
|
const fetchData = async () => {
|
|
41
42
|
try {
|
|
42
43
|
const [statsRes, statusRes] = await Promise.all([
|
|
43
|
-
|
|
44
|
-
|
|
44
|
+
apiFetch('/api/stats'),
|
|
45
|
+
apiFetch('/api/system/status')
|
|
45
46
|
])
|
|
46
47
|
if (!statsRes.ok || !statusRes.ok) throw new Error('API 请求失败')
|
|
47
48
|
const statsData = await statsRes.json()
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { useEffect, useState, useRef } from 'react'
|
|
2
2
|
import { Info, AlertTriangle, XCircle, Circle, Trash2, RefreshCw, FileText, AlertCircle } from 'lucide-react'
|
|
3
|
+
import { apiFetch } from '../utils/auth'
|
|
3
4
|
import { Card, CardContent } from '../components/ui/card'
|
|
4
5
|
import { Badge } from '../components/ui/badge'
|
|
5
6
|
import { Button } from '../components/ui/button'
|
|
@@ -49,7 +50,7 @@ export default function DashboardLogs() {
|
|
|
49
50
|
const fetchLogs = async () => {
|
|
50
51
|
try {
|
|
51
52
|
const url = levelFilter === 'all' ? '/api/logs?limit=100' : `/api/logs?limit=100&level=${levelFilter}`
|
|
52
|
-
const res = await
|
|
53
|
+
const res = await apiFetch(url)
|
|
53
54
|
if (!res.ok) throw new Error('API 请求失败')
|
|
54
55
|
const data = await res.json()
|
|
55
56
|
if (data.success && Array.isArray(data.data)) { setLogs(data.data.reverse()); setError(null) }
|
|
@@ -62,7 +63,7 @@ export default function DashboardLogs() {
|
|
|
62
63
|
|
|
63
64
|
const fetchStats = async () => {
|
|
64
65
|
try {
|
|
65
|
-
const res = await
|
|
66
|
+
const res = await apiFetch('/api/logs/stats')
|
|
66
67
|
if (!res.ok) return
|
|
67
68
|
const data = await res.json()
|
|
68
69
|
if (data.success) setStats(data.data)
|
|
@@ -73,9 +74,9 @@ export default function DashboardLogs() {
|
|
|
73
74
|
const message = days ? `确定清理 ${days} 天前的日志吗?` : `确定只保留最近 ${maxRecords} 条日志吗?`
|
|
74
75
|
if (!confirm(message)) return
|
|
75
76
|
try {
|
|
76
|
-
const res = await
|
|
77
|
+
const res = await apiFetch('/api/logs/cleanup', {
|
|
77
78
|
method: 'POST', headers: { 'Content-Type': 'application/json' },
|
|
78
|
-
body: JSON.stringify({ days, maxRecords })
|
|
79
|
+
body: JSON.stringify({ days, maxRecords })
|
|
79
80
|
})
|
|
80
81
|
if (!res.ok) throw new Error('清理失败')
|
|
81
82
|
const data = await res.json()
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { useEffect, useState } from 'react'
|
|
2
2
|
import { useParams, useNavigate } from 'react-router'
|
|
3
3
|
import { ArrowLeft, AlertCircle, Package, Terminal, Box as IconBox, Layers, Clock, Database, Brain, Wrench, Shield, Settings, Plug, Server, type LucideIcon } from 'lucide-react'
|
|
4
|
+
import { apiFetch } from '../utils/auth'
|
|
4
5
|
import { PluginConfigForm } from '../components/PluginConfigForm'
|
|
5
6
|
import { Card, CardContent, CardHeader, CardTitle } from '../components/ui/card'
|
|
6
7
|
import { Badge } from '../components/ui/badge'
|
|
@@ -60,7 +61,7 @@ export default function DashboardPluginDetail() {
|
|
|
60
61
|
|
|
61
62
|
const fetchPluginDetail = async (pluginName: string) => {
|
|
62
63
|
try {
|
|
63
|
-
const res = await
|
|
64
|
+
const res = await apiFetch(`/api/plugins/${encodeURIComponent(pluginName)}`)
|
|
64
65
|
if (!res.ok) throw new Error('API 请求失败')
|
|
65
66
|
const data = await res.json()
|
|
66
67
|
if (data.success) { setPlugin(data.data); setError(null) }
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { useEffect, useState } from 'react'
|
|
2
2
|
import { useNavigate } from 'react-router'
|
|
3
3
|
import { AlertCircle, Package, Terminal, Box as IconBox, Layers, Clock, Brain, Wrench, Database, Shield, Settings, Plug, Server, type LucideIcon } from 'lucide-react'
|
|
4
|
+
import { apiFetch } from '../utils/auth'
|
|
4
5
|
import { Card, CardContent } from '../components/ui/card'
|
|
5
6
|
import { Badge } from '../components/ui/badge'
|
|
6
7
|
import { Alert, AlertDescription } from '../components/ui/alert'
|
|
@@ -56,7 +57,7 @@ export default function DashboardPlugins() {
|
|
|
56
57
|
|
|
57
58
|
const fetchPlugins = async () => {
|
|
58
59
|
try {
|
|
59
|
-
const res = await
|
|
60
|
+
const res = await apiFetch('/api/plugins')
|
|
60
61
|
if (!res.ok) throw new Error('API 请求失败')
|
|
61
62
|
const data = await res.json()
|
|
62
63
|
if (data.success) { setPlugins(data.data); setError(null) }
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { useState, useCallback } from 'react'
|
|
2
|
+
import { cn } from '@zhin.js/client'
|
|
3
|
+
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '../components/ui/card'
|
|
4
|
+
import { Input } from '../components/ui/input'
|
|
5
|
+
import { Button } from '../components/ui/button'
|
|
6
|
+
import { setToken } from '../utils/auth'
|
|
7
|
+
|
|
8
|
+
interface LoginPageProps {
|
|
9
|
+
onSuccess: () => void
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export default function LoginPage({ onSuccess }: LoginPageProps) {
|
|
13
|
+
const [token, setTokenValue] = useState('')
|
|
14
|
+
const [error, setError] = useState('')
|
|
15
|
+
const [loading, setLoading] = useState(false)
|
|
16
|
+
|
|
17
|
+
const handleLogin = useCallback(async () => {
|
|
18
|
+
const trimmed = token.trim()
|
|
19
|
+
if (!trimmed) {
|
|
20
|
+
setError('请输入 Token')
|
|
21
|
+
return
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
setLoading(true)
|
|
25
|
+
setError('')
|
|
26
|
+
|
|
27
|
+
try {
|
|
28
|
+
const res = await fetch('/api/system/status', {
|
|
29
|
+
headers: { Authorization: `Bearer ${trimmed}` },
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
if (res.ok) {
|
|
33
|
+
setToken(trimmed)
|
|
34
|
+
onSuccess()
|
|
35
|
+
} else if (res.status === 401) {
|
|
36
|
+
setError('Token 无效,请检查后重试')
|
|
37
|
+
} else {
|
|
38
|
+
setError(`验证失败 (HTTP ${res.status})`)
|
|
39
|
+
}
|
|
40
|
+
} catch {
|
|
41
|
+
setError('无法连接到服务器')
|
|
42
|
+
} finally {
|
|
43
|
+
setLoading(false)
|
|
44
|
+
}
|
|
45
|
+
}, [token, onSuccess])
|
|
46
|
+
|
|
47
|
+
return (
|
|
48
|
+
<div className="flex items-center justify-center min-h-screen bg-background">
|
|
49
|
+
<Card className={cn('w-full max-w-md mx-4')}>
|
|
50
|
+
<CardHeader className="text-center space-y-2">
|
|
51
|
+
<div className="flex items-center justify-center mx-auto w-12 h-12 rounded-xl bg-foreground text-background font-bold text-xl">
|
|
52
|
+
Z
|
|
53
|
+
</div>
|
|
54
|
+
<CardTitle className="text-xl">Zhin.js 控制台</CardTitle>
|
|
55
|
+
<CardDescription>
|
|
56
|
+
请输入 API Token 以访问管理面板
|
|
57
|
+
</CardDescription>
|
|
58
|
+
</CardHeader>
|
|
59
|
+
<CardContent>
|
|
60
|
+
<form
|
|
61
|
+
onSubmit={(e) => {
|
|
62
|
+
e.preventDefault()
|
|
63
|
+
handleLogin()
|
|
64
|
+
}}
|
|
65
|
+
className="space-y-4"
|
|
66
|
+
>
|
|
67
|
+
<div className="space-y-2">
|
|
68
|
+
<Input
|
|
69
|
+
type="password"
|
|
70
|
+
placeholder="API Token"
|
|
71
|
+
value={token}
|
|
72
|
+
onChange={(e) => {
|
|
73
|
+
setTokenValue(e.target.value)
|
|
74
|
+
if (error) setError('')
|
|
75
|
+
}}
|
|
76
|
+
autoFocus
|
|
77
|
+
/>
|
|
78
|
+
{error && (
|
|
79
|
+
<p className="text-sm text-destructive">{error}</p>
|
|
80
|
+
)}
|
|
81
|
+
</div>
|
|
82
|
+
<Button type="submit" className="w-full" disabled={loading}>
|
|
83
|
+
{loading ? '验证中...' : '登录'}
|
|
84
|
+
</Button>
|
|
85
|
+
<p className="text-xs text-center text-muted-foreground">
|
|
86
|
+
Token 位于 <code className="text-xs bg-muted px-1 rounded">.env</code> 文件的{' '}
|
|
87
|
+
<code className="text-xs bg-muted px-1 rounded">HTTP_TOKEN</code> 中
|
|
88
|
+
</p>
|
|
89
|
+
</form>
|
|
90
|
+
</CardContent>
|
|
91
|
+
</Card>
|
|
92
|
+
</div>
|
|
93
|
+
)
|
|
94
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
const TOKEN_KEY = 'zhin_api_token'
|
|
2
|
+
|
|
3
|
+
export function getToken(): string | null {
|
|
4
|
+
return localStorage.getItem(TOKEN_KEY)
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export function setToken(token: string): void {
|
|
8
|
+
localStorage.setItem(TOKEN_KEY, token)
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export function clearToken(): void {
|
|
12
|
+
localStorage.removeItem(TOKEN_KEY)
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function hasToken(): boolean {
|
|
16
|
+
return !!localStorage.getItem(TOKEN_KEY)
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Wrapper around fetch that automatically injects the API token.
|
|
21
|
+
* On 401, dispatches a custom event so the app can redirect to login.
|
|
22
|
+
*/
|
|
23
|
+
export async function apiFetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response> {
|
|
24
|
+
const token = getToken()
|
|
25
|
+
const headers = new Headers(init?.headers)
|
|
26
|
+
if (token) {
|
|
27
|
+
headers.set('Authorization', `Bearer ${token}`)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const res = await fetch(input, { ...init, headers })
|
|
31
|
+
|
|
32
|
+
if (res.status === 401) {
|
|
33
|
+
clearToken()
|
|
34
|
+
window.dispatchEvent(new CustomEvent('zhin:auth-required'))
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
return res
|
|
38
|
+
}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import{jsx as e,jsxs as a,Fragment as re}from"./react-jsx-runtime.js";import*as p from"./react.js";import at,{useState as y,useEffect as D,useMemo as st,useRef as nt,PureComponent as ct,StrictMode as lt}from"./react.js";import{createRoot as it}from"./react-dom-client.js";import{Moon as ot,Sun as dt,Menu as mt,Search as ut,AlertCircle as G,Package as E,Bot as Z,Activity as me,TrendingUp as ht,Clock as pe,Cpu as ft,MemoryStick as ie,FileText as ge,Server as xe,Plug as be,Settings as Ne,Shield as _e,Database as ae,Wrench as Le,Brain as Ee,Layers as ve,Box as Fe,Terminal as Me,ChevronDown as ye,ChevronUp as pt,Check as De,Code as Ve,Info as se,Lock as gt,Calendar as xt,List as Be,Trash2 as ue,Plus as bt,GitBranch as Nt,CheckCircle as vt,X as yt,Loader2 as wt,Save as St,ArrowLeft as je,Wifi as kt,WifiOff as Ct,Zap as Rt,RefreshCw as jt,Circle as It,XCircle as Ot,AlertTriangle as At,Home as Pt}from"./lucide-react.js";import{cn as g,useDispatch as Tt,useSelector as J,Link as $t,setActiveMenu as _t,toggleSidebar as Lt,Outlet as Et,useConfig as Ft,persistor as Mt,store as Dt,useWebSocket as Vt,addPage as Bt,DynamicRouter as zt}from"./client.js";import{cva as we}from"./cva.js";import{ScrollArea as q,Separator as Ut,Switch as Ie,Select as A,Accordion as K,Checkbox as Oe,Tooltip as X}from"./radix-ui.js";import{useNavigate as Se,useParams as Jt}from"./react-router.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const c of document.querySelectorAll('link[rel="modulepreload"]'))n(c);new MutationObserver(c=>{for(const l of c)if(l.type==="childList")for(const o of l.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&n(o)}).observe(document,{childList:!0,subtree:!0});function s(c){const l={};return c.integrity&&(l.integrity=c.integrity),c.referrerPolicy&&(l.referrerPolicy=c.referrerPolicy),c.crossOrigin==="use-credentials"?l.credentials="include":c.crossOrigin==="anonymous"?l.credentials="omit":l.credentials="same-origin",l}function n(c){if(c.ep)return;c.ep=!0;const l=s(c);fetch(c.href,l)}})();var oe={exports:{}},de={};var Ae;function Wt(){if(Ae)return de;Ae=1;var r=at;function t(i,m){return i===m&&(i!==0||1/i===1/m)||i!==i&&m!==m}var s=typeof Object.is=="function"?Object.is:t,n=r.useSyncExternalStore,c=r.useRef,l=r.useEffect,o=r.useMemo,d=r.useDebugValue;return de.useSyncExternalStoreWithSelector=function(i,m,u,S,N){var C=c(null);if(C.current===null){var R={hasValue:!1,value:null};C.current=R}else R=C.current;C=o(function(){function T(x){if(!$){if($=!0,M=x,x=S(x),N!==void 0&&R.hasValue){var b=R.value;if(N(b,x))return h=b}return h=x}if(b=h,s(M,x))return b;var O=S(x);return N!==void 0&&N(b,O)?(M=x,b):(M=x,h=O)}var $=!1,M,h,f=u===void 0?null:u;return[function(){return T(m())},f===null?void 0:function(){return T(f())}]},[m,u,S,N]);var j=n(i,C[0],C[1]);return l(function(){R.hasValue=!0,R.value=j},[j]),d(j),j},de}var Pe;function Gt(){return Pe||(Pe=1,oe.exports=Wt()),oe.exports}Gt();function Ht(r){r()}function qt(){let r=null,t=null;return{clear(){r=null,t=null},notify(){Ht(()=>{let s=r;for(;s;)s.callback(),s=s.next})},get(){const s=[];let n=r;for(;n;)s.push(n),n=n.next;return s},subscribe(s){let n=!0;const c=t={callback:s,next:null,prev:t};return c.prev?c.prev.next=c:r=c,function(){!n||r===null||(n=!1,c.next?c.next.prev=c.prev:t=c.prev,c.prev?c.prev.next=c.next:r=c.next)}}}}var Te={notify(){},get:()=>[]};function Zt(r,t){let s,n=Te,c=0,l=!1;function o(j){u();const T=n.subscribe(j);let $=!1;return()=>{$||($=!0,T(),S())}}function d(){n.notify()}function i(){R.onStateChange&&R.onStateChange()}function m(){return l}function u(){c++,s||(s=r.subscribe(i),n=qt())}function S(){c--,s&&c===0&&(s(),s=void 0,n.clear(),n=Te)}function N(){l||(l=!0,u())}function C(){l&&(l=!1,S())}const R={addNestedSub:o,notifyNestedSubs:d,handleChangeWrapper:i,isSubscribed:m,trySubscribe:N,tryUnsubscribe:C,getListeners:()=>n};return R}var Kt=()=>typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",Xt=Kt(),Qt=()=>typeof navigator<"u"&&navigator.product==="ReactNative",Yt=Qt(),er=()=>Xt||Yt?p.useLayoutEffect:p.useEffect,tr=er(),rr=Symbol.for("react-redux-context"),ar=typeof globalThis<"u"?globalThis:{};function sr(){if(!p.createContext)return{};const r=ar[rr]??=new Map;let t=r.get(p.createContext);return t||(t=p.createContext(null),r.set(p.createContext,t)),t}var nr=sr();function cr(r){const{children:t,context:s,serverState:n,store:c}=r,l=p.useMemo(()=>{const i=Zt(c);return{store:c,subscription:i,getServerState:n?()=>n:void 0}},[c,n]),o=p.useMemo(()=>c.getState(),[c]);tr(()=>{const{subscription:i}=l;return i.onStateChange=i.notifyNestedSubs,i.trySubscribe(),o!==c.getState()&&i.notifyNestedSubs(),()=>{i.tryUnsubscribe(),i.onStateChange=void 0}},[l,o]);const d=s||nr;return p.createElement(d.Provider,{value:l},t)}var lr=cr;const ir={light:{background:"0 0% 100%",foreground:"240 10% 3.9%",card:"0 0% 100%","card-foreground":"240 10% 3.9%",popover:"0 0% 100%","popover-foreground":"240 10% 3.9%",primary:"240 5.9% 10%","primary-foreground":"0 0% 98%",secondary:"240 4.8% 95.9%","secondary-foreground":"240 5.9% 10%",muted:"240 4.8% 95.9%","muted-foreground":"240 3.8% 46.1%",accent:"240 4.8% 95.9%","accent-foreground":"240 5.9% 10%",destructive:"0 84.2% 60.2%","destructive-foreground":"0 0% 98%",border:"240 5.9% 90%",input:"240 5.9% 90%",ring:"240 5.9% 10%",radius:"0.5rem","chart-1":"240 5.9% 10%","chart-2":"240 3.8% 46.1%","chart-3":"240 5.9% 90%","chart-4":"240 4.8% 95.9%","chart-5":"0 0% 100%",sidebar:"0 0% 98%","sidebar-foreground":"240 5.3% 26.1%","sidebar-primary":"240 5.9% 10%","sidebar-primary-foreground":"0 0% 98%","sidebar-accent":"240 4.8% 95.9%","sidebar-accent-foreground":"240 5.9% 10%","sidebar-border":"220 13% 91%","sidebar-ring":"240 5.9% 10%"},dark:{background:"240 10% 3.9%",foreground:"0 0% 98%",card:"240 10% 3.9%","card-foreground":"0 0% 98%",popover:"240 10% 3.9%","popover-foreground":"0 0% 98%",primary:"0 0% 98%","primary-foreground":"240 5.9% 10%",secondary:"240 3.7% 15.9%","secondary-foreground":"0 0% 98%",muted:"240 3.7% 15.9%","muted-foreground":"240 5% 64.9%",accent:"240 3.7% 15.9%","accent-foreground":"0 0% 98%",destructive:"0 62.8% 30.6%","destructive-foreground":"0 0% 98%",border:"240 3.7% 15.9%",input:"240 3.7% 15.9%",ring:"240 4.9% 83.9%",radius:"0.5rem","chart-1":"0 0% 98%","chart-2":"240 5% 64.9%","chart-3":"240 3.7% 15.9%","chart-4":"240 10% 3.9%","chart-5":"240 5.9% 10%",sidebar:"240 5.9% 10%","sidebar-foreground":"240 4.8% 95.9%","sidebar-primary":"0 0% 98%","sidebar-primary-foreground":"240 5.9% 10%","sidebar-accent":"240 3.7% 15.9%","sidebar-accent-foreground":"240 4.8% 95.9%","sidebar-border":"240 3.7% 15.9%","sidebar-ring":"240 4.9% 83.9%"}};function ze(r){const t=document.documentElement,s=ir[r];t.classList.remove("light","dark"),t.classList.add(r),Object.entries(s).forEach(([n,c])=>{t.style.setProperty(`--${n}`,c)}),localStorage.setItem("theme",r)}function Ue(){const r=localStorage.getItem("theme");return r&&(r==="light"||r==="dark")?r:window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}function or(){const r=Ue();return ze(r),r}function dr(){const[r,t]=y(Ue);return D(()=>{ze(r)},[r]),{theme:r,setTheme:t,toggleTheme:()=>{t(n=>n==="light"?"dark":"light")}}}function mr(){const{theme:r,toggleTheme:t}=dr();return e("button",{onClick:t,className:"p-2 hover:bg-accent rounded-lg transition-colors text-foreground",title:r==="light"?"切换到暗色模式":"切换到亮色模式",children:r==="light"?e(ot,{className:"w-5 h-5"}):e(dt,{className:"w-5 h-5"})})}const ur=we("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",{variants:{variant:{default:"bg-primary text-primary-foreground shadow hover:bg-primary/90",destructive:"bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90",outline:"border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2",sm:"h-8 rounded-md px-3 text-xs",lg:"h-10 rounded-md px-8",icon:"h-9 w-9"}},defaultVariants:{variant:"default",size:"default"}}),P=p.forwardRef(({className:r,variant:t,size:s,...n},c)=>e("button",{className:g(ur({variant:t,size:s,className:r})),ref:c,...n}));P.displayName="Button";const F=p.forwardRef(({className:r,type:t,...s},n)=>e("input",{type:t,className:g("flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50",r),ref:n,...s}));F.displayName="Input";const Je=p.forwardRef(({className:r,children:t,...s},n)=>a(q.Root,{ref:n,className:g("relative overflow-hidden",r),...s,children:[e(q.Viewport,{className:"h-full w-full rounded-[inherit]",children:t}),e(We,{}),e(q.Corner,{})]}));Je.displayName="ScrollArea";const We=p.forwardRef(({className:r,orientation:t="vertical",...s},n)=>e(q.Scrollbar,{ref:n,orientation:t,className:g("flex touch-none select-none transition-colors",t==="vertical"&&"h-full w-2.5 border-l border-l-transparent p-[1px]",t==="horizontal"&&"h-2.5 flex-col border-t border-t-transparent p-[1px]",r),...s,children:e(q.Thumb,{className:"relative flex-1 rounded-full bg-border"})}));We.displayName="ScrollBar";function hr(){const r=Tt(),t=J(l=>l.ui.sidebarOpen),s=J(l=>l.ui.activeMenu),n=J(l=>l.route.routes),c=st(()=>{const l=n.find(o=>o.key==="dashboard-layout");return!l||!l.children?[]:l.children.filter(o=>!o.meta?.hideInMenu&&o.key!=="dashboard-layout").map((o,d)=>({key:o.key||`menu-item-${d}`,title:o.title,index:o.index,icon:o.icon,href:o.path}))},[n]);return a("div",{className:"flex h-screen bg-background",children:[a("div",{className:g("flex flex-col border-r bg-sidebar transition-all duration-300",t?"w-64":"w-16"),children:[e("div",{className:"p-4 border-b",children:a("div",{className:g("flex items-center transition-all duration-300",t?"gap-3":"justify-center"),children:[e("div",{className:"flex items-center justify-center w-9 h-9 min-w-9 rounded-lg bg-foreground text-background font-bold text-lg",children:"Z"}),t&&a("div",{className:"flex flex-col",children:[e("span",{className:"text-base font-semibold",children:"Zhin.js"}),e("span",{className:"text-xs text-muted-foreground",children:"管理控制台"})]})]})}),e(Je,{className:"flex-1",children:e("div",{className:"p-2 space-y-1",children:c.map(l=>{const o=s===l.key;return a($t,{to:l.href,onClick:()=>r(_t(l.key)),className:g("menu-item",o&&"active",!t&&"justify-center px-2"),children:[e("span",{className:"shrink-0",children:l.icon}),t&&e("span",{className:"truncate",children:l.title})]},l.key)})})})]}),a("div",{className:"flex flex-col flex-1 overflow-hidden",children:[a("header",{className:"flex items-center justify-between h-14 px-4 border-b bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60",children:[a("div",{className:"flex items-center gap-3",children:[e(P,{variant:"ghost",size:"icon",onClick:()=>r(Lt()),children:e(mt,{className:"h-5 w-5"})}),a("div",{className:"flex flex-col",children:[e("h2",{className:"text-sm font-semibold",children:"控制台"}),e("span",{className:"text-xs text-muted-foreground",children:"欢迎回来"})]})]}),e("div",{className:"hidden md:flex flex-1 max-w-md mx-6",children:a("div",{className:"relative w-full",children:[e(ut,{className:"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground"}),e(F,{placeholder:"搜索功能、插件、设置...",className:"pl-9 bg-muted/50"})]})}),e("div",{className:"flex items-center gap-1",children:e(mr,{})})]}),e("main",{className:"flex-1 overflow-auto",children:e("div",{className:"max-w-7xl mx-auto p-6",children:e(Et,{})})})]})]})}const w=p.forwardRef(({className:r,...t},s)=>e("div",{ref:s,className:g("rounded-lg border bg-card text-card-foreground shadow-sm",r),...t}));w.displayName="Card";const _=p.forwardRef(({className:r,...t},s)=>e("div",{ref:s,className:g("flex flex-col space-y-1.5 p-6",r),...t}));_.displayName="CardHeader";const L=p.forwardRef(({className:r,...t},s)=>e("div",{ref:s,className:g("text-lg font-semibold leading-none tracking-tight",r),...t}));L.displayName="CardTitle";const Q=p.forwardRef(({className:r,...t},s)=>e("div",{ref:s,className:g("text-sm text-muted-foreground",r),...t}));Q.displayName="CardDescription";const k=p.forwardRef(({className:r,...t},s)=>e("div",{ref:s,className:g("p-6 pt-0",r),...t}));k.displayName="CardContent";const fr=p.forwardRef(({className:r,...t},s)=>e("div",{ref:s,className:g("flex items-center p-6 pt-0",r),...t}));fr.displayName="CardFooter";const pr=we("inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground shadow",secondary:"border-transparent bg-secondary text-secondary-foreground",destructive:"border-transparent bg-destructive text-destructive-foreground shadow",outline:"text-foreground",success:"border-transparent bg-emerald-100 text-emerald-800 dark:bg-emerald-900/30 dark:text-emerald-400",warning:"border-transparent bg-amber-100 text-amber-800 dark:bg-amber-900/30 dark:text-amber-400"}},defaultVariants:{variant:"default"}});function v({className:r,variant:t,...s}){return e("div",{className:g(pr({variant:t}),r),...s})}const gr=we("relative w-full rounded-lg border px-4 py-3 text-sm [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground [&>svg~*]:pl-7",{variants:{variant:{default:"bg-background text-foreground",destructive:"border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive",success:"border-emerald-200 bg-emerald-50 text-emerald-800 dark:border-emerald-800 dark:bg-emerald-950/50 dark:text-emerald-400 [&>svg]:text-emerald-600 dark:[&>svg]:text-emerald-400",warning:"border-amber-200 bg-amber-50 text-amber-800 dark:border-amber-800 dark:bg-amber-950/50 dark:text-amber-400 [&>svg]:text-amber-600 dark:[&>svg]:text-amber-400"}},defaultVariants:{variant:"default"}}),V=p.forwardRef(({className:r,variant:t,...s},n)=>e("div",{ref:n,role:"alert",className:g(gr({variant:t}),r),...s}));V.displayName="Alert";const xr=p.forwardRef(({className:r,...t},s)=>e("h5",{ref:s,className:g("mb-1 font-medium leading-none tracking-tight",r),...t}));xr.displayName="AlertTitle";const B=p.forwardRef(({className:r,...t},s)=>e("div",{ref:s,className:g("text-sm [&_p]:leading-relaxed",r),...t}));B.displayName="AlertDescription";function I({className:r,...t}){return e("div",{className:g("animate-pulse rounded-md bg-primary/10",r),...t})}function br(){const r=Se(),[t,s]=y(null),[n,c]=y(null),[l,o]=y(!0),[d,i]=y(null);D(()=>{m();const N=setInterval(m,5e3);return()=>clearInterval(N)},[]);const m=async()=>{try{const[N,C]=await Promise.all([fetch("/api/stats",{credentials:"include"}),fetch("/api/system/status",{credentials:"include"})]);if(!N.ok||!C.ok)throw new Error("API 请求失败");const R=await N.json(),j=await C.json();R.success&&j.success&&(s(R.data),c(j.data),i(null))}catch(N){i(N.message)}finally{o(!1)}},u=N=>{const C=Math.floor(N/86400),R=Math.floor(N%86400/3600),j=Math.floor(N%3600/60);return`${C}天 ${R}小时 ${j}分钟`},S=N=>`${(N/1024/1024).toFixed(2)} MB`;return l?a("div",{className:"space-y-6",children:[a("div",{children:[e(I,{className:"h-8 w-48"}),e(I,{className:"h-4 w-64 mt-2"})]}),e("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4",children:[...Array(4)].map((N,C)=>e(I,{className:"h-32"},C))})]}):d?e("div",{className:"flex items-center justify-center h-full",children:a(V,{variant:"destructive",className:"max-w-md",children:[e(G,{className:"h-4 w-4"}),a(B,{children:["加载失败: ",d]})]})}):a("div",{className:"space-y-6",children:[a("div",{children:[e("h1",{className:"text-2xl font-bold tracking-tight",children:"系统概览"}),e("p",{className:"text-muted-foreground",children:"实时监控您的机器人框架运行状态"})]}),a("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4",children:[a(w,{children:[a(_,{className:"flex flex-row items-center justify-between pb-2",children:[e(L,{className:"text-sm font-medium text-muted-foreground",children:"插件总数"}),e(E,{className:"h-4 w-4 text-muted-foreground"})]}),a(k,{children:[e("div",{className:"text-3xl font-bold",children:t?.plugins.total||0}),a("p",{className:"text-xs text-muted-foreground mt-1",children:[e(v,{variant:"secondary",className:"mr-1",children:t?.plugins.active||0}),"个活跃"]})]})]}),a(w,{children:[a(_,{className:"flex flex-row items-center justify-between pb-2",children:[e(L,{className:"text-sm font-medium text-muted-foreground",children:"机器人"}),e(Z,{className:"h-4 w-4 text-muted-foreground"})]}),a(k,{children:[e("div",{className:"text-3xl font-bold",children:t?.bots.total||0}),a("p",{className:"text-xs text-muted-foreground mt-1",children:[e(v,{variant:"success",className:"mr-1",children:t?.bots.online||0}),"个在线"]})]})]}),a(w,{children:[a(_,{className:"flex flex-row items-center justify-between pb-2",children:[e(L,{className:"text-sm font-medium text-muted-foreground",children:"命令数量"}),e(me,{className:"h-4 w-4 text-muted-foreground"})]}),a(k,{children:[e("div",{className:"text-3xl font-bold",children:t?.commands||0}),e("p",{className:"text-xs text-muted-foreground mt-1",children:"可用命令"})]})]}),a(w,{children:[a(_,{className:"flex flex-row items-center justify-between pb-2",children:[e(L,{className:"text-sm font-medium text-muted-foreground",children:"组件数量"}),e(ht,{className:"h-4 w-4 text-muted-foreground"})]}),a(k,{children:[e("div",{className:"text-3xl font-bold",children:t?.components||0}),e("p",{className:"text-xs text-muted-foreground mt-1",children:"已注册组件"})]})]})]}),a("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[a(w,{children:[a(_,{children:[e(L,{children:"系统信息"}),e(Q,{children:"服务器运行状态"})]}),a(k,{className:"space-y-3",children:[a("div",{className:"flex justify-between items-center",children:[a("div",{className:"flex items-center gap-2 text-sm",children:[e(pe,{className:"h-4 w-4 text-muted-foreground"}),"运行时间"]}),e(v,{variant:"secondary",children:n?u(n.uptime):"-"})]}),a("div",{className:"flex justify-between items-center",children:[a("div",{className:"flex items-center gap-2 text-sm",children:[e(ft,{className:"h-4 w-4 text-muted-foreground"}),"平台"]}),e(v,{variant:"secondary",children:n?.platform||"-"})]}),a("div",{className:"flex justify-between items-center",children:[a("div",{className:"flex items-center gap-2 text-sm",children:[e(me,{className:"h-4 w-4 text-muted-foreground"}),"Node 版本"]}),e(v,{variant:"secondary",children:n?.nodeVersion||"-"})]})]})]}),a(w,{children:[a(_,{children:[e(L,{children:"资源使用"}),e(Q,{children:"内存使用情况"})]}),a(k,{className:"space-y-3",children:[a("div",{className:"flex justify-between items-center",children:[a("div",{className:"flex items-center gap-2 text-sm",children:[e(ie,{className:"h-4 w-4 text-muted-foreground"}),"堆内存使用"]}),e(v,{variant:"secondary",children:t?`${t.memory.toFixed(2)} MB`:"-"})]}),a("div",{className:"flex justify-between items-center",children:[a("div",{className:"flex items-center gap-2 text-sm",children:[e(ie,{className:"h-4 w-4 text-muted-foreground"}),"总堆内存"]}),e(v,{variant:"secondary",children:n?S(n.memory.heapTotal):"-"})]}),a("div",{className:"flex justify-between items-center",children:[a("div",{className:"flex items-center gap-2 text-sm",children:[e(ie,{className:"h-4 w-4 text-muted-foreground"}),"RSS"]}),e(v,{variant:"secondary",children:n?S(n.memory.rss):"-"})]})]})]})]}),a(w,{children:[a(_,{children:[e(L,{children:"快速操作"}),e(Q,{children:"常用功能快捷入口"})]}),e(k,{children:a("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-3",children:[e(P,{variant:"outline",className:"h-auto p-4 justify-start",onClick:()=>r("/plugins"),children:a("div",{className:"flex flex-col items-start gap-1",children:[e(E,{className:"h-5 w-5 mb-1"}),e("span",{className:"font-medium",children:"插件管理"}),e("span",{className:"text-xs text-muted-foreground",children:"查看和管理插件"})]})}),e(P,{variant:"outline",className:"h-auto p-4 justify-start",onClick:()=>r("/bots"),children:a("div",{className:"flex flex-col items-start gap-1",children:[e(Z,{className:"h-5 w-5 mb-1"}),e("span",{className:"font-medium",children:"机器人状态"}),e("span",{className:"text-xs text-muted-foreground",children:"监控机器人运行"})]})}),e(P,{variant:"outline",className:"h-auto p-4 justify-start",onClick:()=>r("/logs"),children:a("div",{className:"flex flex-col items-start gap-1",children:[e(ge,{className:"h-5 w-5 mb-1"}),e("span",{className:"font-medium",children:"系统日志"}),e("span",{className:"text-xs text-muted-foreground",children:"查看运行日志"})]})})]})})]})]})}const W=p.forwardRef(({className:r,orientation:t="horizontal",decorative:s=!0,...n},c)=>e(Ut.Root,{ref:c,decorative:s,orientation:t,className:g("shrink-0 bg-border",t==="horizontal"?"h-[1px] w-full":"h-full w-[1px]",r),...n}));W.displayName="Separator";const Nr={Terminal:Me,Box:Fe,Layers:ve,Clock:pe,Brain:Ee,Wrench:Le,Database:ae,Shield:_e,Settings:Ne,Plug:be,Server:xe};function vr(r){return Nr[r]||E}function yr(){const r=Se(),[t,s]=y([]),[n,c]=y(!0),[l,o]=y(null);D(()=>{d();const i=setInterval(d,1e4);return()=>clearInterval(i)},[]);const d=async()=>{try{const i=await fetch("/api/plugins",{credentials:"include"});if(!i.ok)throw new Error("API 请求失败");const m=await i.json();if(m.success)s(m.data),o(null);else throw new Error("数据格式错误")}catch(i){o(i.message)}finally{c(!1)}};return n?a("div",{className:"space-y-4",children:[e(I,{className:"h-8 w-48"}),e("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3",children:[...Array(6)].map((i,m)=>e(I,{className:"h-40"},m))})]}):l?e("div",{className:"flex items-center justify-center h-full",children:a(V,{variant:"destructive",className:"max-w-md",children:[e(G,{className:"h-4 w-4"}),a(B,{children:["加载失败: ",l]})]})}):a("div",{className:"space-y-4",children:[a("div",{children:[e("h1",{className:"text-2xl font-bold tracking-tight",children:"插件管理"}),a("div",{className:"flex items-center gap-2 mt-1",children:[a("span",{className:"text-sm text-muted-foreground",children:["共 ",t.length," 个插件"]}),e(v,{variant:"success",children:t.filter(i=>i.status==="active").length}),e("span",{className:"text-sm text-muted-foreground",children:"个运行中"})]})]}),e("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3",children:t.map((i,m)=>e(w,{className:"cursor-pointer transition-all hover:shadow-md hover:-translate-y-0.5",onClick:()=>r(`/plugins/${encodeURIComponent(i.name)}`),children:a(k,{className:"p-4 space-y-3",children:[a("div",{className:"flex justify-between items-center",children:[a("div",{className:"flex items-center gap-2",children:[e("div",{className:"flex items-center justify-center w-8 h-8 rounded-md bg-secondary",children:e(E,{className:"w-4 h-4"})}),e("span",{className:"font-semibold text-sm",children:i.name})]}),e(v,{variant:i.status==="active"?"success":"secondary",children:i.status==="active"?"运行中":"已停止"})]}),e("p",{className:"text-xs text-muted-foreground line-clamp-2",children:i.description||"暂无描述"}),e(W,{}),i.features.length>0?e("div",{className:"grid gap-1",style:{gridTemplateColumns:`repeat(${Math.min(i.features.length,4)}, 1fr)`},children:i.features.map(u=>{const S=vr(u.icon);return a("div",{className:"flex flex-col items-center gap-0.5 rounded-md bg-secondary/50 p-1.5",children:[e(S,{className:"w-3 h-3 text-muted-foreground"}),e("span",{className:"text-sm font-bold",children:u.count}),e("span",{className:"text-[10px] text-muted-foreground",children:u.desc})]},u.name)})}):e("p",{className:"text-xs text-muted-foreground text-center py-1",children:"无注册功能"})]})},`${i.name}-${m}`))}),t.length===0&&e(w,{className:"mt-6",children:a(k,{className:"flex flex-col items-center gap-3 py-12",children:[e("div",{className:"flex items-center justify-center w-16 h-16 rounded-full bg-muted",children:e(E,{className:"w-8 h-8 text-muted-foreground"})}),e("h3",{className:"text-lg font-semibold",children:"暂无插件"}),e("p",{className:"text-sm text-muted-foreground",children:"请先安装并启用插件"})]})})]})}const z=p.forwardRef(({className:r,...t},s)=>e("textarea",{className:g("flex min-h-[60px] w-full rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50",r),ref:s,...t}));z.displayName="Textarea";const ke=p.forwardRef(({className:r,...t},s)=>e(Ie.Root,{className:g("peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input",r),...t,ref:s,children:e(Ie.Thumb,{className:g("pointer-events-none block h-4 w-4 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0")})}));ke.displayName="Switch";const Ce=A.Root;A.Group;const Re=A.Value,ne=p.forwardRef(({className:r,children:t,...s},n)=>a(A.Trigger,{ref:n,className:g("flex h-9 w-full items-center justify-between whitespace-nowrap rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-1 focus:ring-ring disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",r),...s,children:[t,e(A.Icon,{asChild:!0,children:e(ye,{className:"h-4 w-4 opacity-50"})})]}));ne.displayName="SelectTrigger";const Ge=p.forwardRef(({className:r,...t},s)=>e(A.ScrollUpButton,{ref:s,className:g("flex cursor-default items-center justify-center py-1",r),...t,children:e(pt,{className:"h-4 w-4"})}));Ge.displayName="SelectScrollUpButton";const He=p.forwardRef(({className:r,...t},s)=>e(A.ScrollDownButton,{ref:s,className:g("flex cursor-default items-center justify-center py-1",r),...t,children:e(ye,{className:"h-4 w-4"})}));He.displayName="SelectScrollDownButton";const ce=p.forwardRef(({className:r,children:t,position:s="popper",...n},c)=>e(A.Portal,{children:a(A.Content,{ref:c,className:g("relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",s==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",r),position:s,...n,children:[e(Ge,{}),e(A.Viewport,{className:g("p-1",s==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"),children:t}),e(He,{})]})}));ce.displayName="SelectContent";const U=p.forwardRef(({className:r,children:t,...s},n)=>a(A.Item,{ref:n,className:g("relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-2 pr-8 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",r),...s,children:[e("span",{className:"absolute right-2 flex h-3.5 w-3.5 items-center justify-center",children:e(A.ItemIndicator,{children:e(De,{className:"h-4 w-4"})})}),e(A.ItemText,{children:t})]}));U.displayName="SelectItem";const wr=p.forwardRef(({className:r,...t},s)=>e(A.Separator,{ref:s,className:g("-mx-1 my-1 h-px bg-muted",r),...t}));wr.displayName="SelectSeparator";function Sr({field:r,value:t,onChange:s}){return r.enum?a(Ce,{value:t?.toString()||"",onValueChange:s,children:[e(ne,{children:e(Re,{placeholder:"请选择"})}),e(ce,{children:r.enum.map(n=>e(U,{value:n.toString(),children:n.toString()},n))})]}):r.description?.includes("多行")||r.key?.includes("description")?e(z,{value:t||"",onChange:n=>s(n.target.value),placeholder:r.description||"请输入",rows:3}):e(F,{value:t||"",onChange:n=>s(n.target.value),placeholder:r.description||"请输入"})}function kr({field:r,value:t,onChange:s}){return e(F,{type:"number",value:t?.toString()||"",onChange:n=>s(parseFloat(n.target.value)||0),placeholder:r.description||"请输入数字",min:r.min,max:r.max})}function Cr({value:r,onChange:t}){return a("div",{className:"flex items-center gap-3 p-3 rounded-lg bg-muted/50 border",children:[e(ke,{checked:r===!0,onCheckedChange:t}),a("div",{className:"flex flex-col gap-0.5",children:[e("span",{className:`text-sm font-medium ${r?"text-emerald-600 dark:text-emerald-400":"text-muted-foreground"}`,children:r?"已启用":"已禁用"}),e("span",{className:"text-xs text-muted-foreground",children:r?"功能当前处于开启状态":"功能当前处于关闭状态"})]})]})}function Rr({field:r,value:t,onChange:s}){const n=typeof t=="number"?t:r.default||0;return a("div",{className:"p-3 rounded-lg bg-muted/50 border space-y-3",children:[a("div",{className:"flex items-center gap-3",children:[e("input",{type:"range",min:r.min||0,max:r.max||1,step:r.step||.01,value:n,onChange:c=>s(parseFloat(c.target.value)),className:"flex-1 h-2 rounded-lg appearance-none cursor-pointer bg-secondary"}),a("div",{className:"flex items-center gap-1",children:[e(F,{type:"number",className:"w-20 h-8 text-xs",value:(n*100).toFixed(0),onChange:c=>s(parseFloat(c.target.value)/100),min:(r.min||0)*100,max:(r.max||1)*100}),e("span",{className:"text-xs font-bold text-muted-foreground",children:"%"})]})]}),a("div",{className:"flex items-center justify-between",children:[e("span",{className:"text-xs text-muted-foreground",children:"当前值"}),a(v,{variant:"secondary",className:"font-mono",children:[(n*100).toFixed(1),"%"]})]})]})}function jr({field:r,value:t,onChange:s}){const n=t instanceof Date?t.toISOString().split("T")[0]:t||"";return a("div",{className:"relative",children:[e(xt,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground pointer-events-none"}),e(F,{type:"date",value:n,onChange:c=>s(new Date(c.target.value)),placeholder:r.description||"选择日期",className:"pl-9"})]})}function Ir({field:r,value:t,onChange:s}){const n=t instanceof RegExp?t.source:typeof t=="string"?t:"";return a("div",{className:"p-3 rounded-lg bg-amber-50 dark:bg-amber-950/20 border border-amber-200 dark:border-amber-800 space-y-2",children:[a("div",{className:"flex items-center gap-1",children:[e("span",{className:"text-sm font-bold text-amber-600 dark:text-amber-400",children:"/"}),e(F,{value:n,className:"font-mono text-sm",onChange:c=>{try{s(new RegExp(c.target.value))}catch{s(c.target.value)}},placeholder:r.description||"请输入正则表达式"}),e("span",{className:"text-sm font-bold text-amber-600 dark:text-amber-400",children:"/"})]}),a("p",{className:"flex items-center gap-1 text-xs text-amber-700 dark:text-amber-300",children:[e(se,{className:"w-3 h-3"})," 输入正则表达式模式 (省略斜杠)"]})]})}function Or({field:r,value:t}){const s=r.default||t;return a("div",{className:"flex items-center gap-3 p-3 rounded-lg bg-muted border",children:[e(gt,{className:"w-4 h-4 text-muted-foreground"}),e(v,{variant:"secondary",className:"font-mono",children:String(s)}),e("span",{className:"text-xs text-muted-foreground ml-auto",children:"(常量,不可修改)"})]})}function Ar({field:r,value:t,onChange:s}){return a("div",{className:"p-3 rounded-lg bg-muted/50 border space-y-2",children:[a("p",{className:"flex items-center gap-1 text-xs font-semibold text-muted-foreground",children:[e(Ve,{className:"w-3 h-3"})," JSON 格式输入"]}),e(z,{value:typeof t=="object"?JSON.stringify(t,null,2):String(t||""),onChange:n=>{try{s(JSON.parse(n.target.value))}catch{s(n.target.value)}},placeholder:r.description||"支持任意类型 (JSON 格式)",rows:4,className:"font-mono text-sm"}),a("p",{className:"flex items-center gap-1 text-xs text-muted-foreground",children:[e(se,{className:"w-3 h-3"})," 支持: 字符串、数字、布尔值、对象、数组"]})]})}function Pr({fieldName:r,field:t,value:s,onChange:n,onArrayItemChange:c,renderNestedField:l}){const o=Array.isArray(s)?s:[],d=t.inner||t.items;return d&&["string","number"].includes(d.type)?a("div",{className:"p-3 rounded-lg bg-muted/50 border space-y-2",children:[a("p",{className:"flex items-center gap-1 text-xs font-semibold text-muted-foreground",children:[e(Be,{className:"w-3 h-3"})," 列表输入 (每行一个值)"]}),e(z,{value:o.join(`
|
|
2
|
-
`),onChange:
|
|
1
|
+
import{jsx as e,jsxs as a,Fragment as ae}from"./react-jsx-runtime.js";import*as g from"./react.js";import lt,{useState as N,useEffect as F,useMemo as ot,useRef as it,useCallback as $e,PureComponent as dt,StrictMode as mt}from"./react.js";import{createRoot as ut}from"./react-dom-client.js";import{Moon as ht,Sun as ft,Menu as pt,Search as gt,LogOut as xt,AlertCircle as H,Package as z,Bot as X,Activity as he,TrendingUp as bt,Clock as xe,Cpu as Nt,MemoryStick as de,FileText as be,Server as Ne,Plug as ve,Settings as ye,Shield as Fe,Database as se,Wrench as ze,Brain as De,Layers as we,Box as Me,Terminal as Ve,ChevronDown as Se,ChevronUp as vt,Check as Be,Code as Ue,Info as ne,Lock as yt,Calendar as wt,List as Je,Trash2 as fe,Plus as St,GitBranch as kt,CheckCircle as Ct,X as Rt,Loader2 as jt,Save as It,ArrowLeft as Te,Wifi as Tt,WifiOff as At,Zap as Ot,RefreshCw as Pt,Circle as Et,XCircle as Lt,AlertTriangle as _t,Home as $t}from"./lucide-react.js";import{cn as f,useDispatch as Ft,useSelector as W,Link as zt,setActiveMenu as Dt,toggleSidebar as Mt,Outlet as Vt,useConfig as Bt,persistor as Ut,store as Jt,useWebSocket as Wt,addPage as qt,DynamicRouter as Ht}from"./client.js";import{cva as ke}from"./cva.js";import{ScrollArea as K,Separator as Gt,Switch as Ae,Select as O,Accordion as Y,Checkbox as Oe,Tooltip as Q}from"./radix-ui.js";import{useNavigate as Ce,useParams as Kt}from"./react-router.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const c of document.querySelectorAll('link[rel="modulepreload"]'))n(c);new MutationObserver(c=>{for(const l of c)if(l.type==="childList")for(const i of l.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&n(i)}).observe(document,{childList:!0,subtree:!0});function s(c){const l={};return c.integrity&&(l.integrity=c.integrity),c.referrerPolicy&&(l.referrerPolicy=c.referrerPolicy),c.crossOrigin==="use-credentials"?l.credentials="include":c.crossOrigin==="anonymous"?l.credentials="omit":l.credentials="same-origin",l}function n(c){if(c.ep)return;c.ep=!0;const l=s(c);fetch(c.href,l)}})();var me={exports:{}},ue={};var Pe;function Zt(){if(Pe)return ue;Pe=1;var r=lt;function t(o,m){return o===m&&(o!==0||1/o===1/m)||o!==o&&m!==m}var s=typeof Object.is=="function"?Object.is:t,n=r.useSyncExternalStore,c=r.useRef,l=r.useEffect,i=r.useMemo,d=r.useDebugValue;return ue.useSyncExternalStoreWithSelector=function(o,m,u,S,v){var C=c(null);if(C.current===null){var R={hasValue:!1,value:null};C.current=R}else R=C.current;C=i(function(){function P(x){if(!$){if($=!0,D=x,x=S(x),v!==void 0&&R.hasValue){var b=R.value;if(v(b,x))return h=b}return h=x}if(b=h,s(D,x))return b;var A=S(x);return v!==void 0&&v(b,A)?(D=x,b):(D=x,h=A)}var $=!1,D,h,p=u===void 0?null:u;return[function(){return P(m())},p===null?void 0:function(){return P(p())}]},[m,u,S,v]);var j=n(o,C[0],C[1]);return l(function(){R.hasValue=!0,R.value=j},[j]),d(j),j},ue}var Ee;function Xt(){return Ee||(Ee=1,me.exports=Zt()),me.exports}Xt();function Yt(r){r()}function Qt(){let r=null,t=null;return{clear(){r=null,t=null},notify(){Yt(()=>{let s=r;for(;s;)s.callback(),s=s.next})},get(){const s=[];let n=r;for(;n;)s.push(n),n=n.next;return s},subscribe(s){let n=!0;const c=t={callback:s,next:null,prev:t};return c.prev?c.prev.next=c:r=c,function(){!n||r===null||(n=!1,c.next?c.next.prev=c.prev:t=c.prev,c.prev?c.prev.next=c.next:r=c.next)}}}}var Le={notify(){},get:()=>[]};function er(r,t){let s,n=Le,c=0,l=!1;function i(j){u();const P=n.subscribe(j);let $=!1;return()=>{$||($=!0,P(),S())}}function d(){n.notify()}function o(){R.onStateChange&&R.onStateChange()}function m(){return l}function u(){c++,s||(s=r.subscribe(o),n=Qt())}function S(){c--,s&&c===0&&(s(),s=void 0,n.clear(),n=Le)}function v(){l||(l=!0,u())}function C(){l&&(l=!1,S())}const R={addNestedSub:i,notifyNestedSubs:d,handleChangeWrapper:o,isSubscribed:m,trySubscribe:v,tryUnsubscribe:C,getListeners:()=>n};return R}var tr=()=>typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",rr=tr(),ar=()=>typeof navigator<"u"&&navigator.product==="ReactNative",sr=ar(),nr=()=>rr||sr?g.useLayoutEffect:g.useEffect,cr=nr(),lr=Symbol.for("react-redux-context"),or=typeof globalThis<"u"?globalThis:{};function ir(){if(!g.createContext)return{};const r=or[lr]??=new Map;let t=r.get(g.createContext);return t||(t=g.createContext(null),r.set(g.createContext,t)),t}var dr=ir();function mr(r){const{children:t,context:s,serverState:n,store:c}=r,l=g.useMemo(()=>{const o=er(c);return{store:c,subscription:o,getServerState:n?()=>n:void 0}},[c,n]),i=g.useMemo(()=>c.getState(),[c]);cr(()=>{const{subscription:o}=l;return o.onStateChange=o.notifyNestedSubs,o.trySubscribe(),i!==c.getState()&&o.notifyNestedSubs(),()=>{o.tryUnsubscribe(),o.onStateChange=void 0}},[l,i]);const d=s||dr;return g.createElement(d.Provider,{value:l},t)}var ur=mr;const hr={light:{background:"0 0% 100%",foreground:"240 10% 3.9%",card:"0 0% 100%","card-foreground":"240 10% 3.9%",popover:"0 0% 100%","popover-foreground":"240 10% 3.9%",primary:"240 5.9% 10%","primary-foreground":"0 0% 98%",secondary:"240 4.8% 95.9%","secondary-foreground":"240 5.9% 10%",muted:"240 4.8% 95.9%","muted-foreground":"240 3.8% 46.1%",accent:"240 4.8% 95.9%","accent-foreground":"240 5.9% 10%",destructive:"0 84.2% 60.2%","destructive-foreground":"0 0% 98%",border:"240 5.9% 90%",input:"240 5.9% 90%",ring:"240 5.9% 10%",radius:"0.5rem","chart-1":"240 5.9% 10%","chart-2":"240 3.8% 46.1%","chart-3":"240 5.9% 90%","chart-4":"240 4.8% 95.9%","chart-5":"0 0% 100%",sidebar:"0 0% 98%","sidebar-foreground":"240 5.3% 26.1%","sidebar-primary":"240 5.9% 10%","sidebar-primary-foreground":"0 0% 98%","sidebar-accent":"240 4.8% 95.9%","sidebar-accent-foreground":"240 5.9% 10%","sidebar-border":"220 13% 91%","sidebar-ring":"240 5.9% 10%"},dark:{background:"240 10% 3.9%",foreground:"0 0% 98%",card:"240 10% 3.9%","card-foreground":"0 0% 98%",popover:"240 10% 3.9%","popover-foreground":"0 0% 98%",primary:"0 0% 98%","primary-foreground":"240 5.9% 10%",secondary:"240 3.7% 15.9%","secondary-foreground":"0 0% 98%",muted:"240 3.7% 15.9%","muted-foreground":"240 5% 64.9%",accent:"240 3.7% 15.9%","accent-foreground":"0 0% 98%",destructive:"0 62.8% 30.6%","destructive-foreground":"0 0% 98%",border:"240 3.7% 15.9%",input:"240 3.7% 15.9%",ring:"240 4.9% 83.9%",radius:"0.5rem","chart-1":"0 0% 98%","chart-2":"240 5% 64.9%","chart-3":"240 3.7% 15.9%","chart-4":"240 10% 3.9%","chart-5":"240 5.9% 10%",sidebar:"240 5.9% 10%","sidebar-foreground":"240 4.8% 95.9%","sidebar-primary":"0 0% 98%","sidebar-primary-foreground":"240 5.9% 10%","sidebar-accent":"240 3.7% 15.9%","sidebar-accent-foreground":"240 4.8% 95.9%","sidebar-border":"240 3.7% 15.9%","sidebar-ring":"240 4.9% 83.9%"}};function We(r){const t=document.documentElement,s=hr[r];t.classList.remove("light","dark"),t.classList.add(r),Object.entries(s).forEach(([n,c])=>{t.style.setProperty(`--${n}`,c)}),localStorage.setItem("theme",r)}function qe(){const r=localStorage.getItem("theme");return r&&(r==="light"||r==="dark")?r:window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}function fr(){const r=qe();return We(r),r}function pr(){const[r,t]=N(qe);return F(()=>{We(r)},[r]),{theme:r,setTheme:t,toggleTheme:()=>{t(n=>n==="light"?"dark":"light")}}}function gr(){const{theme:r,toggleTheme:t}=pr();return e("button",{onClick:t,className:"p-2 hover:bg-accent rounded-lg transition-colors text-foreground",title:r==="light"?"切换到暗色模式":"切换到亮色模式",children:r==="light"?e(ht,{className:"w-5 h-5"}):e(ft,{className:"w-5 h-5"})})}const xr=ke("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",{variants:{variant:{default:"bg-primary text-primary-foreground shadow hover:bg-primary/90",destructive:"bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90",outline:"border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2",sm:"h-8 rounded-md px-3 text-xs",lg:"h-10 rounded-md px-8",icon:"h-9 w-9"}},defaultVariants:{variant:"default",size:"default"}}),I=g.forwardRef(({className:r,variant:t,size:s,...n},c)=>e("button",{className:f(xr({variant:t,size:s,className:r})),ref:c,...n}));I.displayName="Button";const _=g.forwardRef(({className:r,type:t,...s},n)=>e("input",{type:t,className:f("flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50",r),ref:n,...s}));_.displayName="Input";const He=g.forwardRef(({className:r,children:t,...s},n)=>a(K.Root,{ref:n,className:f("relative overflow-hidden",r),...s,children:[e(K.Viewport,{className:"h-full w-full rounded-[inherit]",children:t}),e(Ge,{}),e(K.Corner,{})]}));He.displayName="ScrollArea";const Ge=g.forwardRef(({className:r,orientation:t="vertical",...s},n)=>e(K.Scrollbar,{ref:n,orientation:t,className:f("flex touch-none select-none transition-colors",t==="vertical"&&"h-full w-2.5 border-l border-l-transparent p-[1px]",t==="horizontal"&&"h-2.5 flex-col border-t border-t-transparent p-[1px]",r),...s,children:e(K.Thumb,{className:"relative flex-1 rounded-full bg-border"})}));Ge.displayName="ScrollBar";const ce="zhin_api_token";function br(){return localStorage.getItem(ce)}function Nr(r){localStorage.setItem(ce,r)}function Ke(){localStorage.removeItem(ce)}function vr(){return!!localStorage.getItem(ce)}async function M(r,t){const s=br(),n=new Headers(t?.headers);s&&n.set("Authorization",`Bearer ${s}`);const c=await fetch(r,{...t,headers:n});return c.status===401&&(Ke(),window.dispatchEvent(new CustomEvent("zhin:auth-required"))),c}function yr(){const r=Ft(),t=W(l=>l.ui.sidebarOpen),s=W(l=>l.ui.activeMenu),n=W(l=>l.route.routes),c=ot(()=>{const l=n.find(i=>i.key==="dashboard-layout");return!l||!l.children?[]:l.children.filter(i=>!i.meta?.hideInMenu&&i.key!=="dashboard-layout").map((i,d)=>({key:i.key||`menu-item-${d}`,title:i.title,index:i.index,icon:i.icon,href:i.path}))},[n]);return a("div",{className:"flex h-screen bg-background",children:[a("div",{className:f("flex flex-col border-r bg-sidebar transition-all duration-300",t?"w-64":"w-16"),children:[e("div",{className:"p-4 border-b",children:a("div",{className:f("flex items-center transition-all duration-300",t?"gap-3":"justify-center"),children:[e("div",{className:"flex items-center justify-center w-9 h-9 min-w-9 rounded-lg bg-foreground text-background font-bold text-lg",children:"Z"}),t&&a("div",{className:"flex flex-col",children:[e("span",{className:"text-base font-semibold",children:"Zhin.js"}),e("span",{className:"text-xs text-muted-foreground",children:"管理控制台"})]})]})}),e(He,{className:"flex-1",children:e("div",{className:"p-2 space-y-1",children:c.map(l=>{const i=s===l.key;return a(zt,{to:l.href,onClick:()=>r(Dt(l.key)),className:f("menu-item",i&&"active",!t&&"justify-center px-2"),children:[e("span",{className:"shrink-0",children:l.icon}),t&&e("span",{className:"truncate",children:l.title})]},l.key)})})})]}),a("div",{className:"flex flex-col flex-1 overflow-hidden",children:[a("header",{className:"flex items-center justify-between h-14 px-4 border-b bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60",children:[a("div",{className:"flex items-center gap-3",children:[e(I,{variant:"ghost",size:"icon",onClick:()=>r(Mt()),children:e(pt,{className:"h-5 w-5"})}),a("div",{className:"flex flex-col",children:[e("h2",{className:"text-sm font-semibold",children:"控制台"}),e("span",{className:"text-xs text-muted-foreground",children:"欢迎回来"})]})]}),e("div",{className:"hidden md:flex flex-1 max-w-md mx-6",children:a("div",{className:"relative w-full",children:[e(gt,{className:"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground"}),e(_,{placeholder:"搜索功能、插件、设置...",className:"pl-9 bg-muted/50"})]})}),a("div",{className:"flex items-center gap-1",children:[e(gr,{}),e(I,{variant:"ghost",size:"icon",title:"退出登录",onClick:()=>{Ke(),window.dispatchEvent(new CustomEvent("zhin:auth-required"))},children:e(xt,{className:"h-4 w-4"})})]})]}),e("main",{className:"flex-1 overflow-auto",children:e("div",{className:"max-w-7xl mx-auto p-6",children:e(Vt,{})})})]})]})}const w=g.forwardRef(({className:r,...t},s)=>e("div",{ref:s,className:f("rounded-lg border bg-card text-card-foreground shadow-sm",r),...t}));w.displayName="Card";const E=g.forwardRef(({className:r,...t},s)=>e("div",{ref:s,className:f("flex flex-col space-y-1.5 p-6",r),...t}));E.displayName="CardHeader";const L=g.forwardRef(({className:r,...t},s)=>e("div",{ref:s,className:f("text-lg font-semibold leading-none tracking-tight",r),...t}));L.displayName="CardTitle";const Z=g.forwardRef(({className:r,...t},s)=>e("div",{ref:s,className:f("text-sm text-muted-foreground",r),...t}));Z.displayName="CardDescription";const k=g.forwardRef(({className:r,...t},s)=>e("div",{ref:s,className:f("p-6 pt-0",r),...t}));k.displayName="CardContent";const wr=g.forwardRef(({className:r,...t},s)=>e("div",{ref:s,className:f("flex items-center p-6 pt-0",r),...t}));wr.displayName="CardFooter";const Sr=ke("inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground shadow",secondary:"border-transparent bg-secondary text-secondary-foreground",destructive:"border-transparent bg-destructive text-destructive-foreground shadow",outline:"text-foreground",success:"border-transparent bg-emerald-100 text-emerald-800 dark:bg-emerald-900/30 dark:text-emerald-400",warning:"border-transparent bg-amber-100 text-amber-800 dark:bg-amber-900/30 dark:text-amber-400"}},defaultVariants:{variant:"default"}});function y({className:r,variant:t,...s}){return e("div",{className:f(Sr({variant:t}),r),...s})}const kr=ke("relative w-full rounded-lg border px-4 py-3 text-sm [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground [&>svg~*]:pl-7",{variants:{variant:{default:"bg-background text-foreground",destructive:"border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive",success:"border-emerald-200 bg-emerald-50 text-emerald-800 dark:border-emerald-800 dark:bg-emerald-950/50 dark:text-emerald-400 [&>svg]:text-emerald-600 dark:[&>svg]:text-emerald-400",warning:"border-amber-200 bg-amber-50 text-amber-800 dark:border-amber-800 dark:bg-amber-950/50 dark:text-amber-400 [&>svg]:text-amber-600 dark:[&>svg]:text-amber-400"}},defaultVariants:{variant:"default"}}),V=g.forwardRef(({className:r,variant:t,...s},n)=>e("div",{ref:n,role:"alert",className:f(kr({variant:t}),r),...s}));V.displayName="Alert";const Cr=g.forwardRef(({className:r,...t},s)=>e("h5",{ref:s,className:f("mb-1 font-medium leading-none tracking-tight",r),...t}));Cr.displayName="AlertTitle";const B=g.forwardRef(({className:r,...t},s)=>e("div",{ref:s,className:f("text-sm [&_p]:leading-relaxed",r),...t}));B.displayName="AlertDescription";function T({className:r,...t}){return e("div",{className:f("animate-pulse rounded-md bg-primary/10",r),...t})}function Rr(){const r=Ce(),[t,s]=N(null),[n,c]=N(null),[l,i]=N(!0),[d,o]=N(null);F(()=>{m();const v=setInterval(m,5e3);return()=>clearInterval(v)},[]);const m=async()=>{try{const[v,C]=await Promise.all([M("/api/stats"),M("/api/system/status")]);if(!v.ok||!C.ok)throw new Error("API 请求失败");const R=await v.json(),j=await C.json();R.success&&j.success&&(s(R.data),c(j.data),o(null))}catch(v){o(v.message)}finally{i(!1)}},u=v=>{const C=Math.floor(v/86400),R=Math.floor(v%86400/3600),j=Math.floor(v%3600/60);return`${C}天 ${R}小时 ${j}分钟`},S=v=>`${(v/1024/1024).toFixed(2)} MB`;return l?a("div",{className:"space-y-6",children:[a("div",{children:[e(T,{className:"h-8 w-48"}),e(T,{className:"h-4 w-64 mt-2"})]}),e("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4",children:[...Array(4)].map((v,C)=>e(T,{className:"h-32"},C))})]}):d?e("div",{className:"flex items-center justify-center h-full",children:a(V,{variant:"destructive",className:"max-w-md",children:[e(H,{className:"h-4 w-4"}),a(B,{children:["加载失败: ",d]})]})}):a("div",{className:"space-y-6",children:[a("div",{children:[e("h1",{className:"text-2xl font-bold tracking-tight",children:"系统概览"}),e("p",{className:"text-muted-foreground",children:"实时监控您的机器人框架运行状态"})]}),a("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4",children:[a(w,{children:[a(E,{className:"flex flex-row items-center justify-between pb-2",children:[e(L,{className:"text-sm font-medium text-muted-foreground",children:"插件总数"}),e(z,{className:"h-4 w-4 text-muted-foreground"})]}),a(k,{children:[e("div",{className:"text-3xl font-bold",children:t?.plugins.total||0}),a("p",{className:"text-xs text-muted-foreground mt-1",children:[e(y,{variant:"secondary",className:"mr-1",children:t?.plugins.active||0}),"个活跃"]})]})]}),a(w,{children:[a(E,{className:"flex flex-row items-center justify-between pb-2",children:[e(L,{className:"text-sm font-medium text-muted-foreground",children:"机器人"}),e(X,{className:"h-4 w-4 text-muted-foreground"})]}),a(k,{children:[e("div",{className:"text-3xl font-bold",children:t?.bots.total||0}),a("p",{className:"text-xs text-muted-foreground mt-1",children:[e(y,{variant:"success",className:"mr-1",children:t?.bots.online||0}),"个在线"]})]})]}),a(w,{children:[a(E,{className:"flex flex-row items-center justify-between pb-2",children:[e(L,{className:"text-sm font-medium text-muted-foreground",children:"命令数量"}),e(he,{className:"h-4 w-4 text-muted-foreground"})]}),a(k,{children:[e("div",{className:"text-3xl font-bold",children:t?.commands||0}),e("p",{className:"text-xs text-muted-foreground mt-1",children:"可用命令"})]})]}),a(w,{children:[a(E,{className:"flex flex-row items-center justify-between pb-2",children:[e(L,{className:"text-sm font-medium text-muted-foreground",children:"组件数量"}),e(bt,{className:"h-4 w-4 text-muted-foreground"})]}),a(k,{children:[e("div",{className:"text-3xl font-bold",children:t?.components||0}),e("p",{className:"text-xs text-muted-foreground mt-1",children:"已注册组件"})]})]})]}),a("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[a(w,{children:[a(E,{children:[e(L,{children:"系统信息"}),e(Z,{children:"服务器运行状态"})]}),a(k,{className:"space-y-3",children:[a("div",{className:"flex justify-between items-center",children:[a("div",{className:"flex items-center gap-2 text-sm",children:[e(xe,{className:"h-4 w-4 text-muted-foreground"}),"运行时间"]}),e(y,{variant:"secondary",children:n?u(n.uptime):"-"})]}),a("div",{className:"flex justify-between items-center",children:[a("div",{className:"flex items-center gap-2 text-sm",children:[e(Nt,{className:"h-4 w-4 text-muted-foreground"}),"平台"]}),e(y,{variant:"secondary",children:n?.platform||"-"})]}),a("div",{className:"flex justify-between items-center",children:[a("div",{className:"flex items-center gap-2 text-sm",children:[e(he,{className:"h-4 w-4 text-muted-foreground"}),"Node 版本"]}),e(y,{variant:"secondary",children:n?.nodeVersion||"-"})]})]})]}),a(w,{children:[a(E,{children:[e(L,{children:"资源使用"}),e(Z,{children:"内存使用情况"})]}),a(k,{className:"space-y-3",children:[a("div",{className:"flex justify-between items-center",children:[a("div",{className:"flex items-center gap-2 text-sm",children:[e(de,{className:"h-4 w-4 text-muted-foreground"}),"堆内存使用"]}),e(y,{variant:"secondary",children:t?`${t.memory.toFixed(2)} MB`:"-"})]}),a("div",{className:"flex justify-between items-center",children:[a("div",{className:"flex items-center gap-2 text-sm",children:[e(de,{className:"h-4 w-4 text-muted-foreground"}),"总堆内存"]}),e(y,{variant:"secondary",children:n?S(n.memory.heapTotal):"-"})]}),a("div",{className:"flex justify-between items-center",children:[a("div",{className:"flex items-center gap-2 text-sm",children:[e(de,{className:"h-4 w-4 text-muted-foreground"}),"RSS"]}),e(y,{variant:"secondary",children:n?S(n.memory.rss):"-"})]})]})]})]}),a(w,{children:[a(E,{children:[e(L,{children:"快速操作"}),e(Z,{children:"常用功能快捷入口"})]}),e(k,{children:a("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-3",children:[e(I,{variant:"outline",className:"h-auto p-4 justify-start",onClick:()=>r("/plugins"),children:a("div",{className:"flex flex-col items-start gap-1",children:[e(z,{className:"h-5 w-5 mb-1"}),e("span",{className:"font-medium",children:"插件管理"}),e("span",{className:"text-xs text-muted-foreground",children:"查看和管理插件"})]})}),e(I,{variant:"outline",className:"h-auto p-4 justify-start",onClick:()=>r("/bots"),children:a("div",{className:"flex flex-col items-start gap-1",children:[e(X,{className:"h-5 w-5 mb-1"}),e("span",{className:"font-medium",children:"机器人状态"}),e("span",{className:"text-xs text-muted-foreground",children:"监控机器人运行"})]})}),e(I,{variant:"outline",className:"h-auto p-4 justify-start",onClick:()=>r("/logs"),children:a("div",{className:"flex flex-col items-start gap-1",children:[e(be,{className:"h-5 w-5 mb-1"}),e("span",{className:"font-medium",children:"系统日志"}),e("span",{className:"text-xs text-muted-foreground",children:"查看运行日志"})]})})]})})]})]})}const q=g.forwardRef(({className:r,orientation:t="horizontal",decorative:s=!0,...n},c)=>e(Gt.Root,{ref:c,decorative:s,orientation:t,className:f("shrink-0 bg-border",t==="horizontal"?"h-[1px] w-full":"h-full w-[1px]",r),...n}));q.displayName="Separator";const jr={Terminal:Ve,Box:Me,Layers:we,Clock:xe,Brain:De,Wrench:ze,Database:se,Shield:Fe,Settings:ye,Plug:ve,Server:Ne};function Ir(r){return jr[r]||z}function Tr(){const r=Ce(),[t,s]=N([]),[n,c]=N(!0),[l,i]=N(null);F(()=>{d();const o=setInterval(d,1e4);return()=>clearInterval(o)},[]);const d=async()=>{try{const o=await M("/api/plugins");if(!o.ok)throw new Error("API 请求失败");const m=await o.json();if(m.success)s(m.data),i(null);else throw new Error("数据格式错误")}catch(o){i(o.message)}finally{c(!1)}};return n?a("div",{className:"space-y-4",children:[e(T,{className:"h-8 w-48"}),e("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3",children:[...Array(6)].map((o,m)=>e(T,{className:"h-40"},m))})]}):l?e("div",{className:"flex items-center justify-center h-full",children:a(V,{variant:"destructive",className:"max-w-md",children:[e(H,{className:"h-4 w-4"}),a(B,{children:["加载失败: ",l]})]})}):a("div",{className:"space-y-4",children:[a("div",{children:[e("h1",{className:"text-2xl font-bold tracking-tight",children:"插件管理"}),a("div",{className:"flex items-center gap-2 mt-1",children:[a("span",{className:"text-sm text-muted-foreground",children:["共 ",t.length," 个插件"]}),e(y,{variant:"success",children:t.filter(o=>o.status==="active").length}),e("span",{className:"text-sm text-muted-foreground",children:"个运行中"})]})]}),e("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3",children:t.map((o,m)=>e(w,{className:"cursor-pointer transition-all hover:shadow-md hover:-translate-y-0.5",onClick:()=>r(`/plugins/${encodeURIComponent(o.name)}`),children:a(k,{className:"p-4 space-y-3",children:[a("div",{className:"flex justify-between items-center",children:[a("div",{className:"flex items-center gap-2",children:[e("div",{className:"flex items-center justify-center w-8 h-8 rounded-md bg-secondary",children:e(z,{className:"w-4 h-4"})}),e("span",{className:"font-semibold text-sm",children:o.name})]}),e(y,{variant:o.status==="active"?"success":"secondary",children:o.status==="active"?"运行中":"已停止"})]}),e("p",{className:"text-xs text-muted-foreground line-clamp-2",children:o.description||"暂无描述"}),e(q,{}),o.features.length>0?e("div",{className:"grid gap-1",style:{gridTemplateColumns:`repeat(${Math.min(o.features.length,4)}, 1fr)`},children:o.features.map(u=>{const S=Ir(u.icon);return a("div",{className:"flex flex-col items-center gap-0.5 rounded-md bg-secondary/50 p-1.5",children:[e(S,{className:"w-3 h-3 text-muted-foreground"}),e("span",{className:"text-sm font-bold",children:u.count}),e("span",{className:"text-[10px] text-muted-foreground",children:u.desc})]},u.name)})}):e("p",{className:"text-xs text-muted-foreground text-center py-1",children:"无注册功能"})]})},`${o.name}-${m}`))}),t.length===0&&e(w,{className:"mt-6",children:a(k,{className:"flex flex-col items-center gap-3 py-12",children:[e("div",{className:"flex items-center justify-center w-16 h-16 rounded-full bg-muted",children:e(z,{className:"w-8 h-8 text-muted-foreground"})}),e("h3",{className:"text-lg font-semibold",children:"暂无插件"}),e("p",{className:"text-sm text-muted-foreground",children:"请先安装并启用插件"})]})})]})}const U=g.forwardRef(({className:r,...t},s)=>e("textarea",{className:f("flex min-h-[60px] w-full rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50",r),ref:s,...t}));U.displayName="Textarea";const Re=g.forwardRef(({className:r,...t},s)=>e(Ae.Root,{className:f("peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input",r),...t,ref:s,children:e(Ae.Thumb,{className:f("pointer-events-none block h-4 w-4 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0")})}));Re.displayName="Switch";const je=O.Root;O.Group;const Ie=O.Value,le=g.forwardRef(({className:r,children:t,...s},n)=>a(O.Trigger,{ref:n,className:f("flex h-9 w-full items-center justify-between whitespace-nowrap rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-1 focus:ring-ring disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",r),...s,children:[t,e(O.Icon,{asChild:!0,children:e(Se,{className:"h-4 w-4 opacity-50"})})]}));le.displayName="SelectTrigger";const Ze=g.forwardRef(({className:r,...t},s)=>e(O.ScrollUpButton,{ref:s,className:f("flex cursor-default items-center justify-center py-1",r),...t,children:e(vt,{className:"h-4 w-4"})}));Ze.displayName="SelectScrollUpButton";const Xe=g.forwardRef(({className:r,...t},s)=>e(O.ScrollDownButton,{ref:s,className:f("flex cursor-default items-center justify-center py-1",r),...t,children:e(Se,{className:"h-4 w-4"})}));Xe.displayName="SelectScrollDownButton";const oe=g.forwardRef(({className:r,children:t,position:s="popper",...n},c)=>e(O.Portal,{children:a(O.Content,{ref:c,className:f("relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",s==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",r),position:s,...n,children:[e(Ze,{}),e(O.Viewport,{className:f("p-1",s==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"),children:t}),e(Xe,{})]})}));oe.displayName="SelectContent";const J=g.forwardRef(({className:r,children:t,...s},n)=>a(O.Item,{ref:n,className:f("relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-2 pr-8 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",r),...s,children:[e("span",{className:"absolute right-2 flex h-3.5 w-3.5 items-center justify-center",children:e(O.ItemIndicator,{children:e(Be,{className:"h-4 w-4"})})}),e(O.ItemText,{children:t})]}));J.displayName="SelectItem";const Ar=g.forwardRef(({className:r,...t},s)=>e(O.Separator,{ref:s,className:f("-mx-1 my-1 h-px bg-muted",r),...t}));Ar.displayName="SelectSeparator";function Or({field:r,value:t,onChange:s}){return r.enum?a(je,{value:t?.toString()||"",onValueChange:s,children:[e(le,{children:e(Ie,{placeholder:"请选择"})}),e(oe,{children:r.enum.map(n=>e(J,{value:n.toString(),children:n.toString()},n))})]}):r.description?.includes("多行")||r.key?.includes("description")?e(U,{value:t||"",onChange:n=>s(n.target.value),placeholder:r.description||"请输入",rows:3}):e(_,{value:t||"",onChange:n=>s(n.target.value),placeholder:r.description||"请输入"})}function Pr({field:r,value:t,onChange:s}){return e(_,{type:"number",value:t?.toString()||"",onChange:n=>s(parseFloat(n.target.value)||0),placeholder:r.description||"请输入数字",min:r.min,max:r.max})}function Er({value:r,onChange:t}){return a("div",{className:"flex items-center gap-3 p-3 rounded-lg bg-muted/50 border",children:[e(Re,{checked:r===!0,onCheckedChange:t}),a("div",{className:"flex flex-col gap-0.5",children:[e("span",{className:`text-sm font-medium ${r?"text-emerald-600 dark:text-emerald-400":"text-muted-foreground"}`,children:r?"已启用":"已禁用"}),e("span",{className:"text-xs text-muted-foreground",children:r?"功能当前处于开启状态":"功能当前处于关闭状态"})]})]})}function Lr({field:r,value:t,onChange:s}){const n=typeof t=="number"?t:r.default||0;return a("div",{className:"p-3 rounded-lg bg-muted/50 border space-y-3",children:[a("div",{className:"flex items-center gap-3",children:[e("input",{type:"range",min:r.min||0,max:r.max||1,step:r.step||.01,value:n,onChange:c=>s(parseFloat(c.target.value)),className:"flex-1 h-2 rounded-lg appearance-none cursor-pointer bg-secondary"}),a("div",{className:"flex items-center gap-1",children:[e(_,{type:"number",className:"w-20 h-8 text-xs",value:(n*100).toFixed(0),onChange:c=>s(parseFloat(c.target.value)/100),min:(r.min||0)*100,max:(r.max||1)*100}),e("span",{className:"text-xs font-bold text-muted-foreground",children:"%"})]})]}),a("div",{className:"flex items-center justify-between",children:[e("span",{className:"text-xs text-muted-foreground",children:"当前值"}),a(y,{variant:"secondary",className:"font-mono",children:[(n*100).toFixed(1),"%"]})]})]})}function _r({field:r,value:t,onChange:s}){const n=t instanceof Date?t.toISOString().split("T")[0]:t||"";return a("div",{className:"relative",children:[e(wt,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground pointer-events-none"}),e(_,{type:"date",value:n,onChange:c=>s(new Date(c.target.value)),placeholder:r.description||"选择日期",className:"pl-9"})]})}function $r({field:r,value:t,onChange:s}){const n=t instanceof RegExp?t.source:typeof t=="string"?t:"";return a("div",{className:"p-3 rounded-lg bg-amber-50 dark:bg-amber-950/20 border border-amber-200 dark:border-amber-800 space-y-2",children:[a("div",{className:"flex items-center gap-1",children:[e("span",{className:"text-sm font-bold text-amber-600 dark:text-amber-400",children:"/"}),e(_,{value:n,className:"font-mono text-sm",onChange:c=>{try{s(new RegExp(c.target.value))}catch{s(c.target.value)}},placeholder:r.description||"请输入正则表达式"}),e("span",{className:"text-sm font-bold text-amber-600 dark:text-amber-400",children:"/"})]}),a("p",{className:"flex items-center gap-1 text-xs text-amber-700 dark:text-amber-300",children:[e(ne,{className:"w-3 h-3"})," 输入正则表达式模式 (省略斜杠)"]})]})}function Fr({field:r,value:t}){const s=r.default||t;return a("div",{className:"flex items-center gap-3 p-3 rounded-lg bg-muted border",children:[e(yt,{className:"w-4 h-4 text-muted-foreground"}),e(y,{variant:"secondary",className:"font-mono",children:String(s)}),e("span",{className:"text-xs text-muted-foreground ml-auto",children:"(常量,不可修改)"})]})}function zr({field:r,value:t,onChange:s}){return a("div",{className:"p-3 rounded-lg bg-muted/50 border space-y-2",children:[a("p",{className:"flex items-center gap-1 text-xs font-semibold text-muted-foreground",children:[e(Ue,{className:"w-3 h-3"})," JSON 格式输入"]}),e(U,{value:typeof t=="object"?JSON.stringify(t,null,2):String(t||""),onChange:n=>{try{s(JSON.parse(n.target.value))}catch{s(n.target.value)}},placeholder:r.description||"支持任意类型 (JSON 格式)",rows:4,className:"font-mono text-sm"}),a("p",{className:"flex items-center gap-1 text-xs text-muted-foreground",children:[e(ne,{className:"w-3 h-3"})," 支持: 字符串、数字、布尔值、对象、数组"]})]})}function Dr({fieldName:r,field:t,value:s,onChange:n,onArrayItemChange:c,renderNestedField:l}){const i=Array.isArray(s)?s:[],d=t.inner||t.items;return d&&["string","number"].includes(d.type)?a("div",{className:"p-3 rounded-lg bg-muted/50 border space-y-2",children:[a("p",{className:"flex items-center gap-1 text-xs font-semibold text-muted-foreground",children:[e(Je,{className:"w-3 h-3"})," 列表输入 (每行一个值)"]}),e(U,{value:i.join(`
|
|
2
|
+
`),onChange:o=>{const m=o.target.value.split(`
|
|
3
3
|
`).filter(Boolean);n(d.type==="number"?m.map(u=>parseFloat(u)||0):m)},placeholder:`每行一个值
|
|
4
|
-
${t.description||""}`,rows:4,className:"font-mono text-sm"})]}):a("div",{className:"space-y-2",children:[
|
|
4
|
+
${t.description||""}`,rows:4,className:"font-mono text-sm"})]}):a("div",{className:"space-y-2",children:[i.map((o,m)=>e(w,{className:"group",children:a("div",{className:"p-3 space-y-2",children:[a("div",{className:"flex justify-between items-center",children:[e(y,{variant:"secondary",className:"font-mono",children:m+1}),e(I,{variant:"ghost",size:"sm",className:"opacity-0 group-hover:opacity-100 transition-opacity text-destructive",onClick:()=>n(i.filter((u,S)=>S!==m)),children:e(fe,{className:"w-3 h-3"})})]}),e("div",{className:"pl-2 border-l-2",children:d&&l(`${r}[${m}]`,d,o,u=>{c?.(r,m,u)})})]})},m)),a(I,{variant:"outline",size:"sm",className:"w-full border-dashed",onClick:()=>n([...i,d?.default||(d?.type==="object"?{}:"")]),children:[e(St,{className:"w-4 h-4 mr-1"})," 添加项"]})]})}function Mr({field:r,value:t,onChange:s}){return a("div",{className:"p-3 rounded-lg bg-muted/50 border space-y-2",children:[a("p",{className:"flex items-center gap-1 text-xs font-semibold text-muted-foreground",children:[e(Je,{className:"w-3 h-3"})," 数组输入 (每行一个值)"]}),e(U,{value:Array.isArray(t)?t.join(`
|
|
5
5
|
`):"",onChange:n=>s(n.target.value.split(`
|
|
6
6
|
`).filter(Boolean)),placeholder:`每行一个值
|
|
7
|
-
${r.description||""}`,rows:3,className:"font-mono text-sm"})]})}function $r({fieldName:r,field:t,value:s,onArrayItemChange:n,renderNestedField:c}){const l=Array.isArray(s)?s:[],o=t.list||[];return e("div",{className:"space-y-2",children:o.map((d,i)=>a("div",{className:"p-3 rounded-lg bg-muted/50 border space-y-2",children:[a(v,{variant:"secondary",className:"font-mono",children:["#",i+1]}),d.description&&e("p",{className:"text-xs text-muted-foreground",children:d.description}),e("div",{className:"mt-1",children:c(`${r}[${i}]`,d,l[i],m=>{n?.(r,i,m)})})]},i))})}function _r({fieldName:r,field:t,renderField:s}){const n=t.dict||t.properties||{};return a("div",{className:"rounded-lg border-2 bg-muted/30 overflow-hidden",children:[a("div",{className:"px-4 py-2 bg-muted border-b flex items-center gap-2",children:[e(E,{className:"w-4 h-4 text-muted-foreground"}),e("span",{className:"text-xs font-semibold text-muted-foreground",children:"对象"})]}),e("div",{className:"p-3 space-y-2",children:Object.entries(n).map(([c,l],o)=>a("div",{children:[a("div",{className:"p-3 rounded-md bg-background border space-y-1",children:[a("div",{className:"flex items-center gap-1",children:[e("span",{className:"text-sm font-semibold",children:l.key||c}),l.required&&e("span",{className:"text-destructive font-bold",children:"*"})]}),l.description&&e("p",{className:"text-xs text-muted-foreground",children:l.description}),e("div",{className:"mt-1",children:s(c,l,r)})]}),o<Object.entries(n).length-1&&e(W,{className:"my-2"})]},c))})]})}function Lr({field:r,value:t,onChange:s}){return a("div",{className:"p-3 rounded-lg bg-muted/50 border space-y-2",children:[a("p",{className:"flex items-center gap-1 text-xs font-semibold text-muted-foreground",children:[e(Ve,{className:"w-3 h-3"})," 键值对编辑"]}),e(z,{value:typeof t=="object"?JSON.stringify(t,null,2):t||"{}",onChange:n=>{try{s(JSON.parse(n.target.value))}catch{}},placeholder:r.description||"请输入 JSON 格式",rows:6,className:"font-mono text-sm"}),a("p",{className:"flex items-center gap-1 text-xs text-muted-foreground",children:[e(se,{className:"w-3 h-3"})," 键值对格式: ","{",'"key": "value"',"}"]})]})}function Er({field:r,value:t,onChange:s}){const n=r.list||[];if(n.length===0)return e(F,{value:t||"",onChange:l=>s(l.target.value),placeholder:r.description||"请输入值"});const c=n.map(l=>l.default||l.type);return a("div",{className:"p-3 rounded-lg bg-muted/50 border space-y-2",children:[a("p",{className:"flex items-center gap-1 text-xs font-semibold text-muted-foreground",children:[e(Nt,{className:"w-3 h-3"})," 联合类型"]}),a(Ce,{value:t?.toString()||"",onValueChange:s,children:[e(ne,{children:e(Re,{placeholder:"请选择"})}),e(ce,{children:c.map((l,o)=>e(U,{value:String(l),children:String(l)},o))})]})]})}function Fr({fieldName:r,field:t,value:s,onChange:n,renderNestedField:c}){const l=t.list||[];return a("div",{className:"rounded-lg border-2 bg-muted/30 overflow-hidden",children:[a("div",{className:"px-4 py-2 bg-muted border-b flex items-center gap-2",children:[e(ve,{className:"w-4 h-4 text-muted-foreground"}),e("span",{className:"text-xs font-semibold text-muted-foreground",children:"交叉类型"})]}),e("div",{className:"p-3 space-y-2",children:l.map((o,d)=>a("div",{className:"p-3 rounded-md bg-background border space-y-1",children:[o.description&&e("p",{className:"text-xs text-muted-foreground",children:o.description}),e("div",{className:"mt-1",children:c(`${r}[${d}]`,o,s,n)})]},d))})]})}function Mr(r){const{field:t}=r;switch(t.type){case"string":return e(Sr,{...r});case"number":case"integer":return e(kr,{...r});case"boolean":return e(Cr,{...r});case"percent":return e(Rr,{...r});case"date":return e(jr,{...r});case"regexp":return e(Ir,{...r});case"const":return e(Or,{...r});case"any":return e(Ar,{...r});case"list":return e(Pr,{...r});case"array":return e(Tr,{...r});case"tuple":return e($r,{...r});case"object":return e(_r,{...r});case"dict":return e(Lr,{...r});case"union":return e(Er,{...r});case"intersect":return e(Fr,{...r});default:return e(z,{value:typeof r.value=="object"?JSON.stringify(r.value,null,2):r.value||"",onChange:s=>{try{r.onChange(JSON.parse(s.target.value))}catch{r.onChange(s.target.value)}},placeholder:t.description||"请输入 JSON 格式",rows:4,className:"font-mono text-xs"})}}function qe({field:r,value:t,onChange:s}){switch(r.type){case"string":return e(F,{value:t||"",onChange:n=>s(n.target.value),placeholder:r.description||"请输入",className:"h-8 text-sm"});case"number":case"integer":return e(F,{type:"number",value:t?.toString()||"",onChange:n=>s(parseFloat(n.target.value)||0),placeholder:r.description||"请输入数字",min:r.min,max:r.max,className:"h-8 text-sm"});case"boolean":return a("div",{className:"flex items-center gap-2",children:[e(ke,{checked:t===!0,onCheckedChange:s}),e("span",{className:`text-sm ${t?"text-emerald-600 dark:text-emerald-400":"text-muted-foreground"}`,children:t?"已启用":"已禁用"})]});case"object":{const n=r.dict||r.properties||{};return e(w,{className:"p-2 space-y-2",children:Object.entries(n).map(([c,l])=>a("div",{className:"space-y-1",children:[e("span",{className:"text-xs font-semibold",children:c}),e(qe,{fieldName:c,field:l,value:t?.[c],onChange:o=>s({...t,[c]:o})})]},c))})}default:return e(z,{value:typeof t=="object"?JSON.stringify(t,null,2):t||"",onChange:n=>{try{s(JSON.parse(n.target.value))}catch{s(n.target.value)}},rows:3,className:"font-mono text-xs"})}}const Dr=K.Root,Ze=p.forwardRef(({className:r,...t},s)=>e(K.Item,{ref:s,className:g("border-b",r),...t}));Ze.displayName="AccordionItem";const Ke=p.forwardRef(({className:r,children:t,...s},n)=>e(K.Header,{className:"flex",children:a(K.Trigger,{ref:n,className:g("flex flex-1 items-center justify-between py-4 text-sm font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180",r),...s,children:[t,e(ye,{className:"h-4 w-4 shrink-0 text-muted-foreground transition-transform duration-200"})]})}));Ke.displayName="AccordionTrigger";const Xe=p.forwardRef(({className:r,children:t,...s},n)=>e(K.Content,{ref:n,className:"overflow-hidden text-sm data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down",...s,children:e("div",{className:g("pb-4 pt-0",r),children:t})}));Xe.displayName="AccordionContent";function Vr({pluginName:r,onSuccess:t}){const[s,n]=y({}),[c,l]=y(null),[o,d]=y(void 0),{config:i,schema:m,loading:u,error:S,connected:N,setConfig:C}=Ft(r);D(()=>{i&&n(i)},[i]);const R=async()=>{if(N)try{await C(s),l("配置已保存成功"),setTimeout(()=>{d(void 0),t?.(),l(null)},1500)}catch(f){console.error("保存配置失败:",f)}},j=(f,x)=>{n(b=>({...b,[f]:x}))},T=(f,x,b)=>{n(O=>({...O,[f]:{...O[f]||{},[x]:b}}))},$=(f,x,b)=>{n(O=>{const le=Array.isArray(O[f])?[...O[f]]:[];return le[x]=b,{...O,[f]:le}})},M=(f,x,b)=>{const O=b?s[b]?.[f]??x.default:s[f]??x.default;return e(Mr,{fieldName:f,field:x,value:O,onChange:b?H=>T(b,f,H):H=>j(f,H),parentPath:b,onNestedChange:T,onArrayItemChange:$,renderField:M,renderNestedField:(H,et,tt,rt)=>e(qe,{fieldName:H,field:et,value:tt,onChange:rt})})},h=m?.properties||m?.dict||{};return!m||!h||Object.keys(h).length===0?null:e(w,{className:"mt-4",children:e(Dr,{type:"single",collapsible:!0,value:o,onValueChange:d,children:a(Ze,{value:"config",className:"border-none",children:[e(Ke,{className:"px-4 hover:no-underline",children:a("div",{className:"flex items-center gap-2",children:[e(Ne,{className:"w-4 h-4"}),e("span",{className:"font-semibold",children:"插件配置"}),a(v,{variant:"secondary",children:[Object.keys(h).length," 项"]})]})}),a(Xe,{className:"px-4 pb-4",children:[c&&a(V,{variant:"success",className:"mb-3",children:[e(vt,{className:"h-4 w-4"}),e(B,{children:c})]}),S&&a(V,{variant:"destructive",className:"mb-3",children:[e(G,{className:"h-4 w-4"}),e(B,{children:S})]}),e("div",{className:"space-y-3",children:Object.entries(h).map(([f,x])=>{const b=x;return a("div",{className:"p-3 rounded-lg bg-muted/50 border space-y-2",children:[a("div",{className:"flex items-center gap-1",children:[e("span",{className:"text-sm font-semibold",children:b.key||f}),b.required&&e("span",{className:"text-destructive font-bold",children:"*"})]}),b.description&&e("p",{className:"text-xs text-muted-foreground",children:b.description}),e("div",{className:"mt-1",children:M(b.key||f,b)})]},f)})}),a("div",{className:"flex gap-2 justify-end mt-4 pt-3 border-t",children:[a(P,{variant:"outline",size:"sm",onClick:()=>d(void 0),disabled:u,children:[e(yt,{className:"w-4 h-4 mr-1"})," 取消"]}),e(P,{size:"sm",onClick:R,disabled:u,children:u?a(re,{children:[e(wt,{className:"w-4 h-4 mr-1 animate-spin"}),"保存中..."]}):a(re,{children:[e(St,{className:"w-4 h-4 mr-1"}),"保存配置"]})})]})]})]})})})}const Br={Terminal:Me,Box:Fe,Layers:ve,Clock:pe,Brain:Ee,Wrench:Le,Database:ae,Shield:_e,Settings:Ne,Plug:be,Server:xe};function $e(r){return Br[r]||E}function zr(){const{name:r}=Jt(),t=Se(),[s,n]=y(null),[c,l]=y(!0),[o,d]=y(null);D(()=>{r&&i(r)},[r]);const i=async m=>{try{const u=await fetch(`/api/plugins/${encodeURIComponent(m)}`,{credentials:"include"});if(!u.ok)throw new Error("API 请求失败");const S=await u.json();if(S.success)n(S.data),d(null);else throw new Error("数据格式错误")}catch(u){d(u.message)}finally{l(!1)}};return c?a("div",{className:"space-y-4",children:[e(I,{className:"h-8 w-24"}),a("div",{className:"flex items-center gap-3",children:[e(I,{className:"h-12 w-12 rounded-xl"}),a("div",{children:[e(I,{className:"h-6 w-48"}),e(I,{className:"h-4 w-64 mt-1"})]})]}),e("div",{className:"grid grid-cols-2 sm:grid-cols-3 md:grid-cols-6 gap-2",children:[...Array(6)].map((m,u)=>e(I,{className:"h-20"},u))})]}):o||!s?a("div",{children:[a(P,{variant:"ghost",onClick:()=>t("/plugins"),className:"mb-4",children:[e(je,{className:"w-4 h-4 mr-1"})," 返回"]}),a(V,{variant:"destructive",children:[e(G,{className:"h-4 w-4"}),a(B,{children:["加载失败: ",o||"插件不存在"]})]})]}):a("div",{className:"space-y-4",children:[a(P,{variant:"ghost",size:"sm",onClick:()=>t("/plugins"),children:[e(je,{className:"w-4 h-4 mr-1"})," 返回"]}),a("div",{className:"flex items-center gap-3",children:[e("div",{className:"flex items-center justify-center w-12 h-12 rounded-xl bg-secondary",children:e(E,{className:"w-6 h-6"})}),a("div",{children:[a("div",{className:"flex items-center gap-2",children:[e("h1",{className:"text-xl font-bold",children:s.name}),e(v,{variant:s.status==="active"?"success":"secondary",children:s.status==="active"?"运行中":"已停止"})]}),e("p",{className:"text-sm text-muted-foreground",children:s.description||"暂无描述"})]})]}),e(Vr,{pluginName:s.name,onSuccess:()=>{}}),e(W,{}),s.features.length>0&&a("div",{className:"grid grid-cols-2 sm:grid-cols-3 md:grid-cols-6 gap-2",children:[s.features.map(m=>{const u=$e(m.icon);return e(w,{children:a(k,{className:"flex flex-col items-center gap-1 p-3",children:[e(u,{className:"w-4 h-4 text-muted-foreground"}),e("span",{className:"text-2xl font-bold",children:m.count}),e("span",{className:"text-xs text-muted-foreground",children:m.desc})]})},m.name)}),s.contexts.length>0&&e(w,{children:a(k,{className:"flex flex-col items-center gap-1 p-3",children:[e(ae,{className:"w-4 h-4 text-muted-foreground"}),e("span",{className:"text-2xl font-bold",children:s.contexts.length}),e("span",{className:"text-xs text-muted-foreground",children:"上下文"})]})})]}),a("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-3",children:[s.features.map(m=>{if(m.items.length===0)return null;const u=$e(m.icon);return a(w,{children:[e(_,{className:"pb-2",children:a("div",{className:"flex items-center gap-2",children:[e(u,{className:"w-4 h-4 text-muted-foreground"}),e(L,{className:"text-base",children:m.desc}),e(v,{variant:"secondary",children:m.count})]})}),e(k,{children:e("div",{className:"max-h-60 overflow-y-auto pr-1 space-y-2",children:m.items.map((S,N)=>e(Ur,{featureName:m.name,item:S},N))})})]},m.name)}),s.contexts.length>0&&a(w,{children:[e(_,{className:"pb-2",children:a("div",{className:"flex items-center gap-2",children:[e(ae,{className:"w-4 h-4 text-muted-foreground"}),e(L,{className:"text-base",children:"上下文"}),e(v,{variant:"secondary",children:s.contexts.length})]})}),e(k,{children:e("div",{className:"max-h-60 overflow-y-auto pr-1 space-y-2",children:s.contexts.map((m,u)=>e("div",{className:"rounded-md bg-muted/50 p-2",children:e("code",{className:"text-sm",children:m.name})},u))})})]})]})]})}function Ur({featureName:r,item:t}){switch(r){case"command":return a("div",{className:"rounded-md bg-muted/50 p-3 space-y-1",children:[e("code",{className:"text-sm font-semibold",children:t.name}),t.desc?.map((s,n)=>e("p",{className:"text-xs text-muted-foreground",children:s},n)),t.usage&&t.usage.length>0&&a("div",{children:[e("span",{className:"text-xs font-semibold text-blue-600 dark:text-blue-400",children:"用法:"}),t.usage.map((s,n)=>e("code",{className:"block text-xs bg-muted rounded px-1 py-0.5 mt-0.5",children:s},n))]}),t.examples&&t.examples.length>0&&a("div",{children:[e("span",{className:"text-xs font-semibold text-emerald-600 dark:text-emerald-400",children:"示例:"}),t.examples.map((s,n)=>e("code",{className:"block text-xs bg-muted rounded px-1 py-0.5 mt-0.5",children:s},n))]})]});case"cron":return a("div",{className:"flex justify-between items-center rounded-md bg-muted/50 p-2",children:[e("code",{className:"text-sm",children:t.expression}),e(v,{variant:t.running?"success":"secondary",children:t.running?"运行中":"已停止"})]});case"tool":return a("div",{className:"rounded-md bg-muted/50 p-3 space-y-1",children:[e("code",{className:"text-sm font-semibold",children:t.name}),t.desc&&e("p",{className:"text-xs text-muted-foreground",children:t.desc}),t.platforms&&t.platforms.length>0&&e("div",{className:"flex gap-1 flex-wrap",children:t.platforms.map((s,n)=>e(v,{variant:"outline",className:"text-[10px]",children:s},n))})]});case"skill":return a("div",{className:"rounded-md bg-muted/50 p-3 space-y-1",children:[e("code",{className:"text-sm font-semibold",children:t.name}),t.desc&&e("p",{className:"text-xs text-muted-foreground",children:t.desc}),t.toolCount!=null&&a("span",{className:"text-xs text-muted-foreground",children:["工具: ",t.toolCount]})]});case"config":return a("div",{className:"flex justify-between items-center rounded-md bg-muted/50 p-2",children:[e("code",{className:"text-sm",children:t.name}),t.defaultValue!==void 0&&a("span",{className:"text-xs text-muted-foreground",children:["默认: ",JSON.stringify(t.defaultValue)]})]});case"permission":return e("div",{className:"rounded-md bg-muted/50 p-2",children:e("code",{className:"text-sm",children:t.name})});case"database":return e("div",{className:"rounded-md bg-muted/50 p-2",children:e("code",{className:"text-sm",children:t.name})});case"adapter":return a("div",{className:"rounded-md bg-muted/50 p-3 space-y-1",children:[a("div",{className:"flex items-center gap-2",children:[e(be,{className:"w-3.5 h-3.5 text-muted-foreground"}),e("code",{className:"text-sm font-semibold",children:t.name})]}),a("div",{className:"flex gap-3 text-xs text-muted-foreground",children:[a("span",{children:["Bot: ",t.bots??0]}),a("span",{children:["在线: ",t.online??0]}),t.tools>0&&a("span",{children:["工具: ",t.tools]})]})]});case"service":return a("div",{className:"rounded-md bg-muted/50 p-2 flex items-center gap-2",children:[e(xe,{className:"w-3.5 h-3.5 text-muted-foreground"}),e("code",{className:"text-sm",children:t.name}),t.desc&&t.desc!==t.name&&a("span",{className:"text-xs text-muted-foreground",children:["- ",t.desc]})]});default:return e("div",{className:"rounded-md bg-muted/50 p-2",children:e("code",{className:"text-sm",children:t.name||JSON.stringify(t)})})}}function Jr(){const[r,t]=y([]),[s,n]=y(!0),[c,l]=y(null);D(()=>{o();const d=setInterval(o,5e3);return()=>clearInterval(d)},[]);const o=async()=>{try{const d=await fetch("/api/bots",{credentials:"include"});if(!d.ok)throw new Error("API 请求失败");const i=await d.json();if(i.success)t(i.data),l(null);else throw new Error("数据格式错误")}catch(d){l(d.message)}finally{n(!1)}};return s?a("div",{className:"space-y-6",children:[e(I,{className:"h-8 w-48"}),e("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4",children:[...Array(3)].map((d,i)=>e(I,{className:"h-48"},i))})]}):c?e("div",{className:"flex items-center justify-center h-full",children:a(V,{variant:"destructive",className:"max-w-md",children:[e(G,{className:"h-4 w-4"}),a(B,{children:["加载失败: ",c]})]})}):a("div",{className:"space-y-6",children:[a("div",{children:[e("h1",{className:"text-2xl font-bold tracking-tight",children:"机器人管理"}),a("div",{className:"flex items-center gap-2 mt-1",children:[a("span",{className:"text-sm text-muted-foreground",children:["共 ",r.length," 个机器人,"]}),e(v,{variant:"success",children:r.filter(d=>d.connected).length}),e("span",{className:"text-sm text-muted-foreground",children:"个在线"})]})]}),e(W,{}),e("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4",children:r.map((d,i)=>e(w,{children:a(k,{className:"p-5 space-y-4",children:[a("div",{className:"flex justify-between items-center",children:[a("div",{className:"flex items-center gap-2",children:[e("div",{className:`p-2 rounded-md ${d.connected?"bg-emerald-100 dark:bg-emerald-900/30":"bg-muted"}`,children:e(Z,{className:`w-5 h-5 ${d.connected?"text-emerald-600 dark:text-emerald-400":"text-muted-foreground"}`})}),e("span",{className:"text-lg font-bold",children:d.name})]}),e("div",{className:"relative",children:e(v,{variant:d.connected?"success":"secondary",children:d.connected?a(re,{children:[e(kt,{className:"w-3 h-3 mr-1"}),"在线"]}):a(re,{children:[e(Ct,{className:"w-3 h-3 mr-1"}),"离线"]})})})]}),a("div",{className:"flex items-center gap-2",children:[e("span",{className:"text-sm text-muted-foreground",children:"适配器:"}),e(v,{variant:"outline",children:d.adapter})]}),e(W,{}),a("div",{className:"space-y-2",children:[a("div",{className:"flex justify-between items-center p-2 rounded-md bg-muted/50",children:[a("div",{className:"flex items-center gap-2 text-sm",children:[e(me,{className:`w-4 h-4 ${d.status==="online"?"text-emerald-500":"text-muted-foreground"}`}),e("span",{className:"text-muted-foreground",children:"运行状态"})]}),e(v,{variant:d.status==="online"?"success":"secondary",children:d.status==="online"?"运行中":"已停止"})]}),a("div",{className:"flex justify-between items-center p-2 rounded-md bg-muted/50",children:[a("div",{className:"flex items-center gap-2 text-sm",children:[e(E,{className:"w-4 h-4 text-muted-foreground"}),e("span",{className:"text-muted-foreground",children:"适配器类型"})]}),e("span",{className:"text-sm font-medium",children:d.adapter})]}),a("div",{className:"flex justify-between items-center p-2 rounded-md bg-muted/50",children:[a("div",{className:"flex items-center gap-2 text-sm",children:[e(Rt,{className:"w-4 h-4 text-muted-foreground"}),e("span",{className:"text-muted-foreground",children:"连接状态"})]}),e("span",{className:`text-sm font-medium ${d.connected?"text-emerald-600 dark:text-emerald-400":"text-muted-foreground"}`,children:d.connected?"已连接":"未连接"})]})]})]})},`${d.adapter}-${d.name}-${i}`))}),r.length===0&&e(w,{children:a(k,{className:"flex flex-col items-center gap-4 py-12",children:[e(Z,{className:"w-16 h-16 text-muted-foreground/30"}),a("div",{className:"text-center",children:[e("h3",{className:"text-lg font-semibold",children:"暂无机器人"}),e("p",{className:"text-sm text-muted-foreground",children:"请先配置并启动机器人"})]})]})})]})}const Qe=p.forwardRef(({className:r,...t},s)=>e(Oe.Root,{ref:s,className:g("peer h-4 w-4 shrink-0 rounded-sm border border-primary shadow focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground",r),...t,children:e(Oe.Indicator,{className:g("flex items-center justify-center text-current"),children:e(De,{className:"h-4 w-4"})})}));Qe.displayName="Checkbox";function Wr(){const[r,t]=y([]),[s,n]=y(null),[c,l]=y(!0),[o,d]=y(null),[i,m]=y("all"),[u,S]=y(!0),N=nt(null),[C,R]=y(0);D(()=>{j(),T();const h=setInterval(()=>{j(),T()},3e3);return()=>clearInterval(h)},[i]),D(()=>{u&&r.length>C&&N.current?.scrollIntoView({behavior:"smooth"}),R(r.length)},[r,u]);const j=async()=>{try{const h=i==="all"?"/api/logs?limit=100":`/api/logs?limit=100&level=${i}`,f=await fetch(h,{credentials:"include"});if(!f.ok)throw new Error("API 请求失败");const x=await f.json();x.success&&Array.isArray(x.data)&&(t(x.data.reverse()),d(null))}catch(h){d(h.message)}finally{l(!1)}},T=async()=>{try{const h=await fetch("/api/logs/stats",{credentials:"include"});if(!h.ok)return;const f=await h.json();f.success&&n(f.data)}catch(h){console.error("Failed to fetch stats:",h)}},$=async(h,f)=>{const x=h?`确定清理 ${h} 天前的日志吗?`:`确定只保留最近 ${f} 条日志吗?`;if(confirm(x))try{const b=await fetch("/api/logs/cleanup",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({days:h,maxRecords:f}),credentials:"include"});if(!b.ok)throw new Error("清理失败");const O=await b.json();O.success&&(alert(`成功清理 ${O.data.deletedCount} 条日志`),j(),T())}catch(b){alert(b.message)}},M=h=>{switch(h){case"info":return{border:"border-l-blue-500",badge:"default",icon:e(se,{className:"w-3 h-3"})};case"warn":return{border:"border-l-amber-500",badge:"warning",icon:e(At,{className:"w-3 h-3"})};case"error":return{border:"border-l-red-500",badge:"destructive",icon:e(Ot,{className:"w-3 h-3"})};default:return{border:"border-l-gray-500",badge:"secondary",icon:e(It,{className:"w-3 h-3"})}}};return c?a("div",{className:"space-y-4",children:[e(I,{className:"h-8 w-48"}),e("div",{className:"grid grid-cols-2 sm:grid-cols-4 gap-3",children:[...Array(4)].map((h,f)=>e(I,{className:"h-20"},f))}),e(I,{className:"h-96"})]}):a("div",{className:"space-y-4",children:[a("div",{children:[e("h1",{className:"text-2xl font-bold tracking-tight",children:"系统日志"}),e("p",{className:"text-sm text-muted-foreground",children:"实时查看系统运行日志"})]}),s&&a("div",{className:"grid grid-cols-2 sm:grid-cols-4 gap-3",children:[e(w,{children:a(k,{className:"flex flex-col items-center gap-1 p-4",children:[e("span",{className:"text-2xl font-bold",children:s.total}),e("span",{className:"text-xs text-muted-foreground",children:"总日志数"})]})}),e(w,{children:a(k,{className:"flex flex-col items-center gap-1 p-4",children:[e("span",{className:"text-2xl font-bold text-blue-600 dark:text-blue-400",children:s.byLevel.info||0}),e("span",{className:"text-xs text-muted-foreground",children:"Info"})]})}),e(w,{children:a(k,{className:"flex flex-col items-center gap-1 p-4",children:[e("span",{className:"text-2xl font-bold text-amber-600 dark:text-amber-400",children:s.byLevel.warn||0}),e("span",{className:"text-xs text-muted-foreground",children:"Warn"})]})}),e(w,{children:a(k,{className:"flex flex-col items-center gap-1 p-4",children:[e("span",{className:"text-2xl font-bold text-red-600 dark:text-red-400",children:s.byLevel.error||0}),e("span",{className:"text-xs text-muted-foreground",children:"Error"})]})})]}),e(w,{children:a(k,{className:"flex justify-between items-center p-3 flex-wrap gap-3",children:[a("div",{className:"flex items-center gap-3 flex-wrap",children:[a(Ce,{value:i,onValueChange:m,children:[e(ne,{className:"w-32",children:e(Re,{placeholder:"所有级别"})}),a(ce,{children:[e(U,{value:"all",children:"所有级别"}),e(U,{value:"info",children:"Info"}),e(U,{value:"warn",children:"Warn"}),e(U,{value:"error",children:"Error"})]})]}),a("div",{className:"flex items-center gap-2",children:[e(Qe,{id:"auto-scroll",checked:u,onCheckedChange:h=>S(h)}),e("label",{htmlFor:"auto-scroll",className:"text-sm cursor-pointer",children:"自动滚动"})]})]}),a("div",{className:"flex gap-2",children:[a(P,{variant:"outline",size:"sm",onClick:()=>$(7),children:[e(ue,{className:"w-3.5 h-3.5 mr-1"}),"清理7天前"]}),a(P,{variant:"outline",size:"sm",onClick:()=>$(void 0,5e3),children:[e(ue,{className:"w-3.5 h-3.5 mr-1"}),"保留5000条"]}),a(P,{variant:"outline",size:"sm",onClick:()=>j(),children:[e(jt,{className:"w-3.5 h-3.5 mr-1"}),"刷新"]})]})]})}),e(w,{children:e(k,{className:"p-4",children:a("div",{className:"max-h-[600px] overflow-y-auto rounded-md bg-muted/30 p-2 space-y-1.5",children:[o?a(V,{variant:"destructive",children:[e(G,{className:"h-4 w-4"}),a(B,{children:["加载失败: ",o]})]}):r.length===0?a("div",{className:"flex flex-col items-center gap-3 py-12",children:[e(ge,{className:"w-12 h-12 text-muted-foreground/30"}),e("span",{className:"text-sm text-muted-foreground",children:"暂无日志"})]}):r.map((h,f)=>{const x=M(h.level);return a("div",{className:g("p-3 rounded-md bg-background border-l-[3px]",x.border),children:[a("div",{className:"flex items-center gap-2 mb-1",children:[a(v,{variant:x.badge,className:"gap-1 text-[10px] px-1.5 py-0",children:[x.icon," ",h.level.toUpperCase()]}),e("span",{className:"text-[11px] text-muted-foreground",children:new Date(h.timestamp).toLocaleString()}),h.source&&e(v,{variant:"outline",className:"text-[10px] px-1.5 py-0",children:h.source})]}),e("p",{className:"text-sm font-mono whitespace-pre-wrap break-words",children:h.message})]},`${h.timestamp}-${f}`)}),e("div",{ref:N})]})})})]})}function Y(r){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Y=function(s){return typeof s}:Y=function(s){return s&&typeof Symbol=="function"&&s.constructor===Symbol&&s!==Symbol.prototype?"symbol":typeof s},Y(r)}function Gr(r,t){if(!(r instanceof t))throw new TypeError("Cannot call a class as a function")}function Hr(r,t){for(var s=0;s<t.length;s++){var n=t[s];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(r,n.key,n)}}function qr(r,t,s){return t&&Hr(r.prototype,t),r}function Zr(r,t){return t&&(Y(t)==="object"||typeof t=="function")?t:ee(r)}function he(r){return he=Object.setPrototypeOf?Object.getPrototypeOf:function(s){return s.__proto__||Object.getPrototypeOf(s)},he(r)}function ee(r){if(r===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return r}function Kr(r,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");r.prototype=Object.create(t&&t.prototype,{constructor:{value:r,writable:!0,configurable:!0}}),t&&fe(r,t)}function fe(r,t){return fe=Object.setPrototypeOf||function(n,c){return n.__proto__=c,n},fe(r,t)}function te(r,t,s){return t in r?Object.defineProperty(r,t,{value:s,enumerable:!0,configurable:!0,writable:!0}):r[t]=s,r}var Ye=(function(r){Kr(t,r);function t(){var s,n;Gr(this,t);for(var c=arguments.length,l=new Array(c),o=0;o<c;o++)l[o]=arguments[o];return n=Zr(this,(s=he(t)).call.apply(s,[this].concat(l))),te(ee(n),"state",{bootstrapped:!1}),te(ee(n),"_unsubscribe",void 0),te(ee(n),"handlePersistorState",function(){var d=n.props.persistor,i=d.getState(),m=i.bootstrapped;m&&(n.props.onBeforeLift?Promise.resolve(n.props.onBeforeLift()).finally(function(){return n.setState({bootstrapped:!0})}):n.setState({bootstrapped:!0}),n._unsubscribe&&n._unsubscribe())}),n}return qr(t,[{key:"componentDidMount",value:function(){this._unsubscribe=this.props.persistor.subscribe(this.handlePersistorState),this.handlePersistorState()}},{key:"componentWillUnmount",value:function(){this._unsubscribe&&this._unsubscribe()}},{key:"render",value:function(){return typeof this.props.children=="function"?this.props.children(this.state.bootstrapped):this.state.bootstrapped?this.props.children:this.props.loading}}]),t})(ct);te(Ye,"defaultProps",{children:null,loading:null});const Xr=X.Provider;X.Root;X.Trigger;const Qr=p.forwardRef(({className:r,sideOffset:t=4,...s},n)=>e(X.Portal,{children:e(X.Content,{ref:n,sideOffset:t,className:g("z-50 overflow-hidden rounded-md bg-primary px-3 py-1.5 text-xs text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",r),...s})}));Qr.displayName="TooltipContent";or();function Yr(){Vt();const r=J(o=>o.script.entries),t=J(o=>o.script.loadedScripts),s=J(o=>o.script.synced),[n,c]=y(!1);D(()=>{[{key:"dashboard-layout",path:"/",title:"Dashboard",element:e(hr,{}),redirect:"/dashboard",meta:{order:0},children:[{key:"dashboard-home",index:!0,path:"",title:"系统概览",icon:e(Pt,{className:"w-4 h-4"}),element:e(br,{})},{key:"dashboard-plugins",path:"/plugins",title:"插件管理",icon:e(E,{className:"w-4 h-4"}),element:e(yr,{}),meta:{order:2}},{key:"dashboard-plugin-detail",title:"插件详情",path:"/plugins/:name",element:e(zr,{}),meta:{hideInMenu:!0}},{key:"dashboard-bots",path:"/bots",title:"机器人",icon:e(Z,{className:"w-4 h-4"}),element:e(Jr,{}),meta:{order:3}},{key:"dashboard-logs",path:"/logs",title:"系统日志",icon:e(ge,{className:"w-4 h-4"}),element:e(Wr,{}),meta:{order:4}}]}].forEach(d=>{Bt(d)}),c(!0)},[]);const l=s&&(r.length===0||r.length===t.length);return!n||!l?e("div",{className:"flex items-center justify-center h-screen bg-background",children:a("div",{className:"text-center",children:[e("div",{className:"inline-block animate-spin rounded-full h-8 w-8 border-2 border-muted-foreground border-t-foreground"}),a("p",{className:"mt-3 text-sm text-muted-foreground",children:["加载中... (",t.length,"/",r.length,")"]})]})}):e(zt,{})}it(document.getElementById("root")).render(e(lt,{children:e(Xr,{children:e(Ye,{loading:null,persistor:Mt,children:e(lr,{store:Dt,children:e(Yr,{})})})})}));
|
|
7
|
+
${r.description||""}`,rows:3,className:"font-mono text-sm"})]})}function Vr({fieldName:r,field:t,value:s,onArrayItemChange:n,renderNestedField:c}){const l=Array.isArray(s)?s:[],i=t.list||[];return e("div",{className:"space-y-2",children:i.map((d,o)=>a("div",{className:"p-3 rounded-lg bg-muted/50 border space-y-2",children:[a(y,{variant:"secondary",className:"font-mono",children:["#",o+1]}),d.description&&e("p",{className:"text-xs text-muted-foreground",children:d.description}),e("div",{className:"mt-1",children:c(`${r}[${o}]`,d,l[o],m=>{n?.(r,o,m)})})]},o))})}function Br({fieldName:r,field:t,renderField:s}){const n=t.dict||t.properties||{};return a("div",{className:"rounded-lg border-2 bg-muted/30 overflow-hidden",children:[a("div",{className:"px-4 py-2 bg-muted border-b flex items-center gap-2",children:[e(z,{className:"w-4 h-4 text-muted-foreground"}),e("span",{className:"text-xs font-semibold text-muted-foreground",children:"对象"})]}),e("div",{className:"p-3 space-y-2",children:Object.entries(n).map(([c,l],i)=>a("div",{children:[a("div",{className:"p-3 rounded-md bg-background border space-y-1",children:[a("div",{className:"flex items-center gap-1",children:[e("span",{className:"text-sm font-semibold",children:l.key||c}),l.required&&e("span",{className:"text-destructive font-bold",children:"*"})]}),l.description&&e("p",{className:"text-xs text-muted-foreground",children:l.description}),e("div",{className:"mt-1",children:s(c,l,r)})]}),i<Object.entries(n).length-1&&e(q,{className:"my-2"})]},c))})]})}function Ur({field:r,value:t,onChange:s}){return a("div",{className:"p-3 rounded-lg bg-muted/50 border space-y-2",children:[a("p",{className:"flex items-center gap-1 text-xs font-semibold text-muted-foreground",children:[e(Ue,{className:"w-3 h-3"})," 键值对编辑"]}),e(U,{value:typeof t=="object"?JSON.stringify(t,null,2):t||"{}",onChange:n=>{try{s(JSON.parse(n.target.value))}catch{}},placeholder:r.description||"请输入 JSON 格式",rows:6,className:"font-mono text-sm"}),a("p",{className:"flex items-center gap-1 text-xs text-muted-foreground",children:[e(ne,{className:"w-3 h-3"})," 键值对格式: ","{",'"key": "value"',"}"]})]})}function Jr({field:r,value:t,onChange:s}){const n=r.list||[];if(n.length===0)return e(_,{value:t||"",onChange:l=>s(l.target.value),placeholder:r.description||"请输入值"});const c=n.map(l=>l.default||l.type);return a("div",{className:"p-3 rounded-lg bg-muted/50 border space-y-2",children:[a("p",{className:"flex items-center gap-1 text-xs font-semibold text-muted-foreground",children:[e(kt,{className:"w-3 h-3"})," 联合类型"]}),a(je,{value:t?.toString()||"",onValueChange:s,children:[e(le,{children:e(Ie,{placeholder:"请选择"})}),e(oe,{children:c.map((l,i)=>e(J,{value:String(l),children:String(l)},i))})]})]})}function Wr({fieldName:r,field:t,value:s,onChange:n,renderNestedField:c}){const l=t.list||[];return a("div",{className:"rounded-lg border-2 bg-muted/30 overflow-hidden",children:[a("div",{className:"px-4 py-2 bg-muted border-b flex items-center gap-2",children:[e(we,{className:"w-4 h-4 text-muted-foreground"}),e("span",{className:"text-xs font-semibold text-muted-foreground",children:"交叉类型"})]}),e("div",{className:"p-3 space-y-2",children:l.map((i,d)=>a("div",{className:"p-3 rounded-md bg-background border space-y-1",children:[i.description&&e("p",{className:"text-xs text-muted-foreground",children:i.description}),e("div",{className:"mt-1",children:c(`${r}[${d}]`,i,s,n)})]},d))})]})}function qr(r){const{field:t}=r;switch(t.type){case"string":return e(Or,{...r});case"number":case"integer":return e(Pr,{...r});case"boolean":return e(Er,{...r});case"percent":return e(Lr,{...r});case"date":return e(_r,{...r});case"regexp":return e($r,{...r});case"const":return e(Fr,{...r});case"any":return e(zr,{...r});case"list":return e(Dr,{...r});case"array":return e(Mr,{...r});case"tuple":return e(Vr,{...r});case"object":return e(Br,{...r});case"dict":return e(Ur,{...r});case"union":return e(Jr,{...r});case"intersect":return e(Wr,{...r});default:return e(U,{value:typeof r.value=="object"?JSON.stringify(r.value,null,2):r.value||"",onChange:s=>{try{r.onChange(JSON.parse(s.target.value))}catch{r.onChange(s.target.value)}},placeholder:t.description||"请输入 JSON 格式",rows:4,className:"font-mono text-xs"})}}function Ye({field:r,value:t,onChange:s}){switch(r.type){case"string":return e(_,{value:t||"",onChange:n=>s(n.target.value),placeholder:r.description||"请输入",className:"h-8 text-sm"});case"number":case"integer":return e(_,{type:"number",value:t?.toString()||"",onChange:n=>s(parseFloat(n.target.value)||0),placeholder:r.description||"请输入数字",min:r.min,max:r.max,className:"h-8 text-sm"});case"boolean":return a("div",{className:"flex items-center gap-2",children:[e(Re,{checked:t===!0,onCheckedChange:s}),e("span",{className:`text-sm ${t?"text-emerald-600 dark:text-emerald-400":"text-muted-foreground"}`,children:t?"已启用":"已禁用"})]});case"object":{const n=r.dict||r.properties||{};return e(w,{className:"p-2 space-y-2",children:Object.entries(n).map(([c,l])=>a("div",{className:"space-y-1",children:[e("span",{className:"text-xs font-semibold",children:c}),e(Ye,{fieldName:c,field:l,value:t?.[c],onChange:i=>s({...t,[c]:i})})]},c))})}default:return e(U,{value:typeof t=="object"?JSON.stringify(t,null,2):t||"",onChange:n=>{try{s(JSON.parse(n.target.value))}catch{s(n.target.value)}},rows:3,className:"font-mono text-xs"})}}const Hr=Y.Root,Qe=g.forwardRef(({className:r,...t},s)=>e(Y.Item,{ref:s,className:f("border-b",r),...t}));Qe.displayName="AccordionItem";const et=g.forwardRef(({className:r,children:t,...s},n)=>e(Y.Header,{className:"flex",children:a(Y.Trigger,{ref:n,className:f("flex flex-1 items-center justify-between py-4 text-sm font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180",r),...s,children:[t,e(Se,{className:"h-4 w-4 shrink-0 text-muted-foreground transition-transform duration-200"})]})}));et.displayName="AccordionTrigger";const tt=g.forwardRef(({className:r,children:t,...s},n)=>e(Y.Content,{ref:n,className:"overflow-hidden text-sm data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down",...s,children:e("div",{className:f("pb-4 pt-0",r),children:t})}));tt.displayName="AccordionContent";function Gr({pluginName:r,onSuccess:t}){const[s,n]=N({}),[c,l]=N(null),[i,d]=N(void 0),{config:o,schema:m,loading:u,error:S,connected:v,setConfig:C}=Bt(r);F(()=>{o&&n(o)},[o]);const R=async()=>{if(v)try{await C(s),l("配置已保存成功"),setTimeout(()=>{d(void 0),t?.(),l(null)},1500)}catch(p){console.error("保存配置失败:",p)}},j=(p,x)=>{n(b=>({...b,[p]:x}))},P=(p,x,b)=>{n(A=>({...A,[p]:{...A[p]||{},[x]:b}}))},$=(p,x,b)=>{n(A=>{const ie=Array.isArray(A[p])?[...A[p]]:[];return ie[x]=b,{...A,[p]:ie}})},D=(p,x,b)=>{const A=b?s[b]?.[p]??x.default:s[p]??x.default;return e(qr,{fieldName:p,field:x,value:A,onChange:b?G=>P(b,p,G):G=>j(p,G),parentPath:b,onNestedChange:P,onArrayItemChange:$,renderField:D,renderNestedField:(G,st,nt,ct)=>e(Ye,{fieldName:G,field:st,value:nt,onChange:ct})})},h=m?.properties||m?.dict||{};return!m||!h||Object.keys(h).length===0?null:e(w,{className:"mt-4",children:e(Hr,{type:"single",collapsible:!0,value:i,onValueChange:d,children:a(Qe,{value:"config",className:"border-none",children:[e(et,{className:"px-4 hover:no-underline",children:a("div",{className:"flex items-center gap-2",children:[e(ye,{className:"w-4 h-4"}),e("span",{className:"font-semibold",children:"插件配置"}),a(y,{variant:"secondary",children:[Object.keys(h).length," 项"]})]})}),a(tt,{className:"px-4 pb-4",children:[c&&a(V,{variant:"success",className:"mb-3",children:[e(Ct,{className:"h-4 w-4"}),e(B,{children:c})]}),S&&a(V,{variant:"destructive",className:"mb-3",children:[e(H,{className:"h-4 w-4"}),e(B,{children:S})]}),e("div",{className:"space-y-3",children:Object.entries(h).map(([p,x])=>{const b=x;return a("div",{className:"p-3 rounded-lg bg-muted/50 border space-y-2",children:[a("div",{className:"flex items-center gap-1",children:[e("span",{className:"text-sm font-semibold",children:b.key||p}),b.required&&e("span",{className:"text-destructive font-bold",children:"*"})]}),b.description&&e("p",{className:"text-xs text-muted-foreground",children:b.description}),e("div",{className:"mt-1",children:D(b.key||p,b)})]},p)})}),a("div",{className:"flex gap-2 justify-end mt-4 pt-3 border-t",children:[a(I,{variant:"outline",size:"sm",onClick:()=>d(void 0),disabled:u,children:[e(Rt,{className:"w-4 h-4 mr-1"})," 取消"]}),e(I,{size:"sm",onClick:R,disabled:u,children:u?a(ae,{children:[e(jt,{className:"w-4 h-4 mr-1 animate-spin"}),"保存中..."]}):a(ae,{children:[e(It,{className:"w-4 h-4 mr-1"}),"保存配置"]})})]})]})]})})})}const Kr={Terminal:Ve,Box:Me,Layers:we,Clock:xe,Brain:De,Wrench:ze,Database:se,Shield:Fe,Settings:ye,Plug:ve,Server:Ne};function _e(r){return Kr[r]||z}function Zr(){const{name:r}=Kt(),t=Ce(),[s,n]=N(null),[c,l]=N(!0),[i,d]=N(null);F(()=>{r&&o(r)},[r]);const o=async m=>{try{const u=await M(`/api/plugins/${encodeURIComponent(m)}`);if(!u.ok)throw new Error("API 请求失败");const S=await u.json();if(S.success)n(S.data),d(null);else throw new Error("数据格式错误")}catch(u){d(u.message)}finally{l(!1)}};return c?a("div",{className:"space-y-4",children:[e(T,{className:"h-8 w-24"}),a("div",{className:"flex items-center gap-3",children:[e(T,{className:"h-12 w-12 rounded-xl"}),a("div",{children:[e(T,{className:"h-6 w-48"}),e(T,{className:"h-4 w-64 mt-1"})]})]}),e("div",{className:"grid grid-cols-2 sm:grid-cols-3 md:grid-cols-6 gap-2",children:[...Array(6)].map((m,u)=>e(T,{className:"h-20"},u))})]}):i||!s?a("div",{children:[a(I,{variant:"ghost",onClick:()=>t("/plugins"),className:"mb-4",children:[e(Te,{className:"w-4 h-4 mr-1"})," 返回"]}),a(V,{variant:"destructive",children:[e(H,{className:"h-4 w-4"}),a(B,{children:["加载失败: ",i||"插件不存在"]})]})]}):a("div",{className:"space-y-4",children:[a(I,{variant:"ghost",size:"sm",onClick:()=>t("/plugins"),children:[e(Te,{className:"w-4 h-4 mr-1"})," 返回"]}),a("div",{className:"flex items-center gap-3",children:[e("div",{className:"flex items-center justify-center w-12 h-12 rounded-xl bg-secondary",children:e(z,{className:"w-6 h-6"})}),a("div",{children:[a("div",{className:"flex items-center gap-2",children:[e("h1",{className:"text-xl font-bold",children:s.name}),e(y,{variant:s.status==="active"?"success":"secondary",children:s.status==="active"?"运行中":"已停止"})]}),e("p",{className:"text-sm text-muted-foreground",children:s.description||"暂无描述"})]})]}),e(Gr,{pluginName:s.name,onSuccess:()=>{}}),e(q,{}),s.features.length>0&&a("div",{className:"grid grid-cols-2 sm:grid-cols-3 md:grid-cols-6 gap-2",children:[s.features.map(m=>{const u=_e(m.icon);return e(w,{children:a(k,{className:"flex flex-col items-center gap-1 p-3",children:[e(u,{className:"w-4 h-4 text-muted-foreground"}),e("span",{className:"text-2xl font-bold",children:m.count}),e("span",{className:"text-xs text-muted-foreground",children:m.desc})]})},m.name)}),s.contexts.length>0&&e(w,{children:a(k,{className:"flex flex-col items-center gap-1 p-3",children:[e(se,{className:"w-4 h-4 text-muted-foreground"}),e("span",{className:"text-2xl font-bold",children:s.contexts.length}),e("span",{className:"text-xs text-muted-foreground",children:"上下文"})]})})]}),a("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-3",children:[s.features.map(m=>{if(m.items.length===0)return null;const u=_e(m.icon);return a(w,{children:[e(E,{className:"pb-2",children:a("div",{className:"flex items-center gap-2",children:[e(u,{className:"w-4 h-4 text-muted-foreground"}),e(L,{className:"text-base",children:m.desc}),e(y,{variant:"secondary",children:m.count})]})}),e(k,{children:e("div",{className:"max-h-60 overflow-y-auto pr-1 space-y-2",children:m.items.map((S,v)=>e(Xr,{featureName:m.name,item:S},v))})})]},m.name)}),s.contexts.length>0&&a(w,{children:[e(E,{className:"pb-2",children:a("div",{className:"flex items-center gap-2",children:[e(se,{className:"w-4 h-4 text-muted-foreground"}),e(L,{className:"text-base",children:"上下文"}),e(y,{variant:"secondary",children:s.contexts.length})]})}),e(k,{children:e("div",{className:"max-h-60 overflow-y-auto pr-1 space-y-2",children:s.contexts.map((m,u)=>e("div",{className:"rounded-md bg-muted/50 p-2",children:e("code",{className:"text-sm",children:m.name})},u))})})]})]})]})}function Xr({featureName:r,item:t}){switch(r){case"command":return a("div",{className:"rounded-md bg-muted/50 p-3 space-y-1",children:[e("code",{className:"text-sm font-semibold",children:t.name}),t.desc?.map((s,n)=>e("p",{className:"text-xs text-muted-foreground",children:s},n)),t.usage&&t.usage.length>0&&a("div",{children:[e("span",{className:"text-xs font-semibold text-blue-600 dark:text-blue-400",children:"用法:"}),t.usage.map((s,n)=>e("code",{className:"block text-xs bg-muted rounded px-1 py-0.5 mt-0.5",children:s},n))]}),t.examples&&t.examples.length>0&&a("div",{children:[e("span",{className:"text-xs font-semibold text-emerald-600 dark:text-emerald-400",children:"示例:"}),t.examples.map((s,n)=>e("code",{className:"block text-xs bg-muted rounded px-1 py-0.5 mt-0.5",children:s},n))]})]});case"cron":return a("div",{className:"flex justify-between items-center rounded-md bg-muted/50 p-2",children:[e("code",{className:"text-sm",children:t.expression}),e(y,{variant:t.running?"success":"secondary",children:t.running?"运行中":"已停止"})]});case"tool":return a("div",{className:"rounded-md bg-muted/50 p-3 space-y-1",children:[e("code",{className:"text-sm font-semibold",children:t.name}),t.desc&&e("p",{className:"text-xs text-muted-foreground",children:t.desc}),t.platforms&&t.platforms.length>0&&e("div",{className:"flex gap-1 flex-wrap",children:t.platforms.map((s,n)=>e(y,{variant:"outline",className:"text-[10px]",children:s},n))})]});case"skill":return a("div",{className:"rounded-md bg-muted/50 p-3 space-y-1",children:[e("code",{className:"text-sm font-semibold",children:t.name}),t.desc&&e("p",{className:"text-xs text-muted-foreground",children:t.desc}),t.toolCount!=null&&a("span",{className:"text-xs text-muted-foreground",children:["工具: ",t.toolCount]})]});case"config":return a("div",{className:"flex justify-between items-center rounded-md bg-muted/50 p-2",children:[e("code",{className:"text-sm",children:t.name}),t.defaultValue!==void 0&&a("span",{className:"text-xs text-muted-foreground",children:["默认: ",JSON.stringify(t.defaultValue)]})]});case"permission":return e("div",{className:"rounded-md bg-muted/50 p-2",children:e("code",{className:"text-sm",children:t.name})});case"database":return e("div",{className:"rounded-md bg-muted/50 p-2",children:e("code",{className:"text-sm",children:t.name})});case"adapter":return a("div",{className:"rounded-md bg-muted/50 p-3 space-y-1",children:[a("div",{className:"flex items-center gap-2",children:[e(ve,{className:"w-3.5 h-3.5 text-muted-foreground"}),e("code",{className:"text-sm font-semibold",children:t.name})]}),a("div",{className:"flex gap-3 text-xs text-muted-foreground",children:[a("span",{children:["Bot: ",t.bots??0]}),a("span",{children:["在线: ",t.online??0]}),t.tools>0&&a("span",{children:["工具: ",t.tools]})]})]});case"service":return a("div",{className:"rounded-md bg-muted/50 p-2 flex items-center gap-2",children:[e(Ne,{className:"w-3.5 h-3.5 text-muted-foreground"}),e("code",{className:"text-sm",children:t.name}),t.desc&&t.desc!==t.name&&a("span",{className:"text-xs text-muted-foreground",children:["- ",t.desc]})]});default:return e("div",{className:"rounded-md bg-muted/50 p-2",children:e("code",{className:"text-sm",children:t.name||JSON.stringify(t)})})}}function Yr(){const[r,t]=N([]),[s,n]=N(!0),[c,l]=N(null);F(()=>{i();const d=setInterval(i,5e3);return()=>clearInterval(d)},[]);const i=async()=>{try{const d=await M("/api/bots");if(!d.ok)throw new Error("API 请求失败");const o=await d.json();if(o.success)t(o.data),l(null);else throw new Error("数据格式错误")}catch(d){l(d.message)}finally{n(!1)}};return s?a("div",{className:"space-y-6",children:[e(T,{className:"h-8 w-48"}),e("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4",children:[...Array(3)].map((d,o)=>e(T,{className:"h-48"},o))})]}):c?e("div",{className:"flex items-center justify-center h-full",children:a(V,{variant:"destructive",className:"max-w-md",children:[e(H,{className:"h-4 w-4"}),a(B,{children:["加载失败: ",c]})]})}):a("div",{className:"space-y-6",children:[a("div",{children:[e("h1",{className:"text-2xl font-bold tracking-tight",children:"机器人管理"}),a("div",{className:"flex items-center gap-2 mt-1",children:[a("span",{className:"text-sm text-muted-foreground",children:["共 ",r.length," 个机器人,"]}),e(y,{variant:"success",children:r.filter(d=>d.connected).length}),e("span",{className:"text-sm text-muted-foreground",children:"个在线"})]})]}),e(q,{}),e("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4",children:r.map((d,o)=>e(w,{children:a(k,{className:"p-5 space-y-4",children:[a("div",{className:"flex justify-between items-center",children:[a("div",{className:"flex items-center gap-2",children:[e("div",{className:`p-2 rounded-md ${d.connected?"bg-emerald-100 dark:bg-emerald-900/30":"bg-muted"}`,children:e(X,{className:`w-5 h-5 ${d.connected?"text-emerald-600 dark:text-emerald-400":"text-muted-foreground"}`})}),e("span",{className:"text-lg font-bold",children:d.name})]}),e("div",{className:"relative",children:e(y,{variant:d.connected?"success":"secondary",children:d.connected?a(ae,{children:[e(Tt,{className:"w-3 h-3 mr-1"}),"在线"]}):a(ae,{children:[e(At,{className:"w-3 h-3 mr-1"}),"离线"]})})})]}),a("div",{className:"flex items-center gap-2",children:[e("span",{className:"text-sm text-muted-foreground",children:"适配器:"}),e(y,{variant:"outline",children:d.adapter})]}),e(q,{}),a("div",{className:"space-y-2",children:[a("div",{className:"flex justify-between items-center p-2 rounded-md bg-muted/50",children:[a("div",{className:"flex items-center gap-2 text-sm",children:[e(he,{className:`w-4 h-4 ${d.status==="online"?"text-emerald-500":"text-muted-foreground"}`}),e("span",{className:"text-muted-foreground",children:"运行状态"})]}),e(y,{variant:d.status==="online"?"success":"secondary",children:d.status==="online"?"运行中":"已停止"})]}),a("div",{className:"flex justify-between items-center p-2 rounded-md bg-muted/50",children:[a("div",{className:"flex items-center gap-2 text-sm",children:[e(z,{className:"w-4 h-4 text-muted-foreground"}),e("span",{className:"text-muted-foreground",children:"适配器类型"})]}),e("span",{className:"text-sm font-medium",children:d.adapter})]}),a("div",{className:"flex justify-between items-center p-2 rounded-md bg-muted/50",children:[a("div",{className:"flex items-center gap-2 text-sm",children:[e(Ot,{className:"w-4 h-4 text-muted-foreground"}),e("span",{className:"text-muted-foreground",children:"连接状态"})]}),e("span",{className:`text-sm font-medium ${d.connected?"text-emerald-600 dark:text-emerald-400":"text-muted-foreground"}`,children:d.connected?"已连接":"未连接"})]})]})]})},`${d.adapter}-${d.name}-${o}`))}),r.length===0&&e(w,{children:a(k,{className:"flex flex-col items-center gap-4 py-12",children:[e(X,{className:"w-16 h-16 text-muted-foreground/30"}),a("div",{className:"text-center",children:[e("h3",{className:"text-lg font-semibold",children:"暂无机器人"}),e("p",{className:"text-sm text-muted-foreground",children:"请先配置并启动机器人"})]})]})})]})}const rt=g.forwardRef(({className:r,...t},s)=>e(Oe.Root,{ref:s,className:f("peer h-4 w-4 shrink-0 rounded-sm border border-primary shadow focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground",r),...t,children:e(Oe.Indicator,{className:f("flex items-center justify-center text-current"),children:e(Be,{className:"h-4 w-4"})})}));rt.displayName="Checkbox";function Qr(){const[r,t]=N([]),[s,n]=N(null),[c,l]=N(!0),[i,d]=N(null),[o,m]=N("all"),[u,S]=N(!0),v=it(null),[C,R]=N(0);F(()=>{j(),P();const h=setInterval(()=>{j(),P()},3e3);return()=>clearInterval(h)},[o]),F(()=>{u&&r.length>C&&v.current?.scrollIntoView({behavior:"smooth"}),R(r.length)},[r,u]);const j=async()=>{try{const h=o==="all"?"/api/logs?limit=100":`/api/logs?limit=100&level=${o}`,p=await M(h);if(!p.ok)throw new Error("API 请求失败");const x=await p.json();x.success&&Array.isArray(x.data)&&(t(x.data.reverse()),d(null))}catch(h){d(h.message)}finally{l(!1)}},P=async()=>{try{const h=await M("/api/logs/stats");if(!h.ok)return;const p=await h.json();p.success&&n(p.data)}catch(h){console.error("Failed to fetch stats:",h)}},$=async(h,p)=>{const x=h?`确定清理 ${h} 天前的日志吗?`:`确定只保留最近 ${p} 条日志吗?`;if(confirm(x))try{const b=await M("/api/logs/cleanup",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({days:h,maxRecords:p})});if(!b.ok)throw new Error("清理失败");const A=await b.json();A.success&&(alert(`成功清理 ${A.data.deletedCount} 条日志`),j(),P())}catch(b){alert(b.message)}},D=h=>{switch(h){case"info":return{border:"border-l-blue-500",badge:"default",icon:e(ne,{className:"w-3 h-3"})};case"warn":return{border:"border-l-amber-500",badge:"warning",icon:e(_t,{className:"w-3 h-3"})};case"error":return{border:"border-l-red-500",badge:"destructive",icon:e(Lt,{className:"w-3 h-3"})};default:return{border:"border-l-gray-500",badge:"secondary",icon:e(Et,{className:"w-3 h-3"})}}};return c?a("div",{className:"space-y-4",children:[e(T,{className:"h-8 w-48"}),e("div",{className:"grid grid-cols-2 sm:grid-cols-4 gap-3",children:[...Array(4)].map((h,p)=>e(T,{className:"h-20"},p))}),e(T,{className:"h-96"})]}):a("div",{className:"space-y-4",children:[a("div",{children:[e("h1",{className:"text-2xl font-bold tracking-tight",children:"系统日志"}),e("p",{className:"text-sm text-muted-foreground",children:"实时查看系统运行日志"})]}),s&&a("div",{className:"grid grid-cols-2 sm:grid-cols-4 gap-3",children:[e(w,{children:a(k,{className:"flex flex-col items-center gap-1 p-4",children:[e("span",{className:"text-2xl font-bold",children:s.total}),e("span",{className:"text-xs text-muted-foreground",children:"总日志数"})]})}),e(w,{children:a(k,{className:"flex flex-col items-center gap-1 p-4",children:[e("span",{className:"text-2xl font-bold text-blue-600 dark:text-blue-400",children:s.byLevel.info||0}),e("span",{className:"text-xs text-muted-foreground",children:"Info"})]})}),e(w,{children:a(k,{className:"flex flex-col items-center gap-1 p-4",children:[e("span",{className:"text-2xl font-bold text-amber-600 dark:text-amber-400",children:s.byLevel.warn||0}),e("span",{className:"text-xs text-muted-foreground",children:"Warn"})]})}),e(w,{children:a(k,{className:"flex flex-col items-center gap-1 p-4",children:[e("span",{className:"text-2xl font-bold text-red-600 dark:text-red-400",children:s.byLevel.error||0}),e("span",{className:"text-xs text-muted-foreground",children:"Error"})]})})]}),e(w,{children:a(k,{className:"flex justify-between items-center p-3 flex-wrap gap-3",children:[a("div",{className:"flex items-center gap-3 flex-wrap",children:[a(je,{value:o,onValueChange:m,children:[e(le,{className:"w-32",children:e(Ie,{placeholder:"所有级别"})}),a(oe,{children:[e(J,{value:"all",children:"所有级别"}),e(J,{value:"info",children:"Info"}),e(J,{value:"warn",children:"Warn"}),e(J,{value:"error",children:"Error"})]})]}),a("div",{className:"flex items-center gap-2",children:[e(rt,{id:"auto-scroll",checked:u,onCheckedChange:h=>S(h)}),e("label",{htmlFor:"auto-scroll",className:"text-sm cursor-pointer",children:"自动滚动"})]})]}),a("div",{className:"flex gap-2",children:[a(I,{variant:"outline",size:"sm",onClick:()=>$(7),children:[e(fe,{className:"w-3.5 h-3.5 mr-1"}),"清理7天前"]}),a(I,{variant:"outline",size:"sm",onClick:()=>$(void 0,5e3),children:[e(fe,{className:"w-3.5 h-3.5 mr-1"}),"保留5000条"]}),a(I,{variant:"outline",size:"sm",onClick:()=>j(),children:[e(Pt,{className:"w-3.5 h-3.5 mr-1"}),"刷新"]})]})]})}),e(w,{children:e(k,{className:"p-4",children:a("div",{className:"max-h-[600px] overflow-y-auto rounded-md bg-muted/30 p-2 space-y-1.5",children:[i?a(V,{variant:"destructive",children:[e(H,{className:"h-4 w-4"}),a(B,{children:["加载失败: ",i]})]}):r.length===0?a("div",{className:"flex flex-col items-center gap-3 py-12",children:[e(be,{className:"w-12 h-12 text-muted-foreground/30"}),e("span",{className:"text-sm text-muted-foreground",children:"暂无日志"})]}):r.map((h,p)=>{const x=D(h.level);return a("div",{className:f("p-3 rounded-md bg-background border-l-[3px]",x.border),children:[a("div",{className:"flex items-center gap-2 mb-1",children:[a(y,{variant:x.badge,className:"gap-1 text-[10px] px-1.5 py-0",children:[x.icon," ",h.level.toUpperCase()]}),e("span",{className:"text-[11px] text-muted-foreground",children:new Date(h.timestamp).toLocaleString()}),h.source&&e(y,{variant:"outline",className:"text-[10px] px-1.5 py-0",children:h.source})]}),e("p",{className:"text-sm font-mono whitespace-pre-wrap break-words",children:h.message})]},`${h.timestamp}-${p}`)}),e("div",{ref:v})]})})})]})}function ea({onSuccess:r}){const[t,s]=N(""),[n,c]=N(""),[l,i]=N(!1),d=$e(async()=>{const o=t.trim();if(!o){c("请输入 Token");return}i(!0),c("");try{const m=await fetch("/api/system/status",{headers:{Authorization:`Bearer ${o}`}});m.ok?(Nr(o),r()):m.status===401?c("Token 无效,请检查后重试"):c(`验证失败 (HTTP ${m.status})`)}catch{c("无法连接到服务器")}finally{i(!1)}},[t,r]);return e("div",{className:"flex items-center justify-center min-h-screen bg-background",children:a(w,{className:f("w-full max-w-md mx-4"),children:[a(E,{className:"text-center space-y-2",children:[e("div",{className:"flex items-center justify-center mx-auto w-12 h-12 rounded-xl bg-foreground text-background font-bold text-xl",children:"Z"}),e(L,{className:"text-xl",children:"Zhin.js 控制台"}),e(Z,{children:"请输入 API Token 以访问管理面板"})]}),e(k,{children:a("form",{onSubmit:o=>{o.preventDefault(),d()},className:"space-y-4",children:[a("div",{className:"space-y-2",children:[e(_,{type:"password",placeholder:"API Token",value:t,onChange:o=>{s(o.target.value),n&&c("")},autoFocus:!0}),n&&e("p",{className:"text-sm text-destructive",children:n})]}),e(I,{type:"submit",className:"w-full",disabled:l,children:l?"验证中...":"登录"}),a("p",{className:"text-xs text-center text-muted-foreground",children:["Token 位于 ",e("code",{className:"text-xs bg-muted px-1 rounded",children:".env"})," 文件的"," ",e("code",{className:"text-xs bg-muted px-1 rounded",children:"HTTP_TOKEN"})," 中"]})]})})]})})}function ee(r){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?ee=function(s){return typeof s}:ee=function(s){return s&&typeof Symbol=="function"&&s.constructor===Symbol&&s!==Symbol.prototype?"symbol":typeof s},ee(r)}function ta(r,t){if(!(r instanceof t))throw new TypeError("Cannot call a class as a function")}function ra(r,t){for(var s=0;s<t.length;s++){var n=t[s];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(r,n.key,n)}}function aa(r,t,s){return t&&ra(r.prototype,t),r}function sa(r,t){return t&&(ee(t)==="object"||typeof t=="function")?t:te(r)}function pe(r){return pe=Object.setPrototypeOf?Object.getPrototypeOf:function(s){return s.__proto__||Object.getPrototypeOf(s)},pe(r)}function te(r){if(r===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return r}function na(r,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");r.prototype=Object.create(t&&t.prototype,{constructor:{value:r,writable:!0,configurable:!0}}),t&&ge(r,t)}function ge(r,t){return ge=Object.setPrototypeOf||function(n,c){return n.__proto__=c,n},ge(r,t)}function re(r,t,s){return t in r?Object.defineProperty(r,t,{value:s,enumerable:!0,configurable:!0,writable:!0}):r[t]=s,r}var at=(function(r){na(t,r);function t(){var s,n;ta(this,t);for(var c=arguments.length,l=new Array(c),i=0;i<c;i++)l[i]=arguments[i];return n=sa(this,(s=pe(t)).call.apply(s,[this].concat(l))),re(te(n),"state",{bootstrapped:!1}),re(te(n),"_unsubscribe",void 0),re(te(n),"handlePersistorState",function(){var d=n.props.persistor,o=d.getState(),m=o.bootstrapped;m&&(n.props.onBeforeLift?Promise.resolve(n.props.onBeforeLift()).finally(function(){return n.setState({bootstrapped:!0})}):n.setState({bootstrapped:!0}),n._unsubscribe&&n._unsubscribe())}),n}return aa(t,[{key:"componentDidMount",value:function(){this._unsubscribe=this.props.persistor.subscribe(this.handlePersistorState),this.handlePersistorState()}},{key:"componentWillUnmount",value:function(){this._unsubscribe&&this._unsubscribe()}},{key:"render",value:function(){return typeof this.props.children=="function"?this.props.children(this.state.bootstrapped):this.state.bootstrapped?this.props.children:this.props.loading}}]),t})(dt);re(at,"defaultProps",{children:null,loading:null});const ca=Q.Provider;Q.Root;Q.Trigger;const la=g.forwardRef(({className:r,sideOffset:t=4,...s},n)=>e(Q.Portal,{children:e(Q.Content,{ref:n,sideOffset:t,className:f("z-50 overflow-hidden rounded-md bg-primary px-3 py-1.5 text-xs text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",r),...s})}));la.displayName="TooltipContent";fr();function oa(){const[r,t]=N(vr()),s=$e(()=>t(!0),[]);return F(()=>{const n=()=>t(!1);return window.addEventListener("zhin:auth-required",n),()=>window.removeEventListener("zhin:auth-required",n)},[]),r?e(at,{loading:null,persistor:Ut,children:e(ur,{store:Jt,children:e(ia,{})})}):e(ea,{onSuccess:s})}function ia(){Wt();const r=W(i=>i.script.entries),t=W(i=>i.script.loadedScripts),s=W(i=>i.script.synced),[n,c]=N(!1);F(()=>{[{key:"dashboard-layout",path:"/",title:"Dashboard",element:e(yr,{}),redirect:"/dashboard",meta:{order:0},children:[{key:"dashboard-home",index:!0,path:"",title:"系统概览",icon:e($t,{className:"w-4 h-4"}),element:e(Rr,{})},{key:"dashboard-plugins",path:"/plugins",title:"插件管理",icon:e(z,{className:"w-4 h-4"}),element:e(Tr,{}),meta:{order:2}},{key:"dashboard-plugin-detail",title:"插件详情",path:"/plugins/:name",element:e(Zr,{}),meta:{hideInMenu:!0}},{key:"dashboard-bots",path:"/bots",title:"机器人",icon:e(X,{className:"w-4 h-4"}),element:e(Yr,{}),meta:{order:3}},{key:"dashboard-logs",path:"/logs",title:"系统日志",icon:e(be,{className:"w-4 h-4"}),element:e(Qr,{}),meta:{order:4}}]}].forEach(d=>{qt(d)}),c(!0)},[]);const l=s&&(r.length===0||r.length===t.length);return!n||!l?e("div",{className:"flex items-center justify-center h-screen bg-background",children:a("div",{className:"text-center",children:[e("div",{className:"inline-block animate-spin rounded-full h-8 w-8 border-2 border-muted-foreground border-t-foreground"}),a("p",{className:"mt-3 text-sm text-muted-foreground",children:["加载中... (",t.length,"/",r.length,")"]})]})}):e(Ht,{})}ut(document.getElementById("root")).render(e(mt,{children:e(ca,{children:e(oa,{})})}));
|
package/dist/style.css
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
@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-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking: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-outline-style:solid;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-space-x-reverse: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-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-800:oklch(47.3% .137 46.201);--color-amber-900:oklch(41.4% .112 45.904);--color-amber-950:oklch(27.9% .077 45.635);--color-emerald-50:oklch(97.9% .021 166.113);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-200:oklch(90.5% .093 164.15);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-600:oklch(59.6% .145 163.225);--color-emerald-800:oklch(43.2% .095 166.913);--color-emerald-900:oklch(37.8% .077 168.94);--color-emerald-950:oklch(26.2% .051 172.552);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-gray-500:oklch(55.1% .027 264.364);--color-black:#000;--spacing:.25rem;--container-md:28rem;--container-lg:32rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--leading-relaxed:1.625;--radius-xl:.75rem;--ease-out:cubic-bezier(0,0,.2,1);--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%;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]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}:root{--background:0 0% 100%;--foreground:240 10% 3.9%;--card:0 0% 100%;--card-foreground:240 10% 3.9%;--popover:0 0% 100%;--popover-foreground:240 10% 3.9%;--primary:240 5.9% 10%;--primary-foreground:0 0% 98%;--secondary:240 4.8% 95.9%;--secondary-foreground:240 5.9% 10%;--muted:240 4.8% 95.9%;--muted-foreground:240 3.8% 46.1%;--accent:240 4.8% 95.9%;--accent-foreground:240 5.9% 10%;--destructive:0 84.2% 60.2%;--destructive-foreground:0 0% 98%;--border:240 5.9% 90%;--input:240 5.9% 90%;--ring:240 5.9% 10%;--radius:.5rem;--sidebar:0 0% 98%;--sidebar-foreground:240 5.3% 26.1%;--sidebar-primary:240 5.9% 10%;--sidebar-primary-foreground:0 0% 98%;--sidebar-accent:240 4.8% 95.9%;--sidebar-accent-foreground:240 5.9% 10%;--sidebar-border:220 13% 91%;--sidebar-ring:240 5.9% 10%}.dark{--background:240 10% 3.9%;--foreground:0 0% 98%;--card:240 10% 3.9%;--card-foreground:0 0% 98%;--popover:240 10% 3.9%;--popover-foreground:0 0% 98%;--primary:0 0% 98%;--primary-foreground:240 5.9% 10%;--secondary:240 3.7% 15.9%;--secondary-foreground:0 0% 98%;--muted:240 3.7% 15.9%;--muted-foreground:240 5% 64.9%;--accent:240 3.7% 15.9%;--accent-foreground:0 0% 98%;--destructive:0 62.8% 30.6%;--destructive-foreground:0 0% 98%;--border:240 3.7% 15.9%;--input:240 3.7% 15.9%;--ring:240 4.9% 83.9%;--sidebar:240 5.9% 10%;--sidebar-foreground:240 4.8% 95.9%;--sidebar-primary:0 0% 98%;--sidebar-primary-foreground:240 5.9% 10%;--sidebar-accent:240 3.7% 15.9%;--sidebar-accent-foreground:240 4.8% 95.9%;--sidebar-border:240 3.7% 15.9%;--sidebar-ring:240 4.9% 83.9%}*{border-color:hsl(var(--border));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}html{scroll-behavior:smooth}body{background-color:hsl(var(--background));color:hsl(var(--foreground));font-feature-settings:"cv02","cv03","cv04","cv11"}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing)*0)}.top-1\/2{top:50%}.top-4{top:calc(var(--spacing)*4)}.top-\[50\%\]{top:50%}.right-2{right:calc(var(--spacing)*2)}.right-4{right:calc(var(--spacing)*4)}.left-2{left:calc(var(--spacing)*2)}.left-3{left:calc(var(--spacing)*3)}.left-\[50\%\]{left:50%}.z-50{z-index:50}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.mx-6{margin-inline:calc(var(--spacing)*6)}.mx-auto{margin-inline:auto}.my-1{margin-block:calc(var(--spacing)*1)}.my-2{margin-block:calc(var(--spacing)*2)}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-6{margin-top:calc(var(--spacing)*6)}.mr-1{margin-right:calc(var(--spacing)*1)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.aspect-square{aspect-ratio:1}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-14{height:calc(var(--spacing)*14)}.h-16{height:calc(var(--spacing)*16)}.h-20{height:calc(var(--spacing)*20)}.h-32{height:calc(var(--spacing)*32)}.h-40{height:calc(var(--spacing)*40)}.h-48{height:calc(var(--spacing)*48)}.h-96{height:calc(var(--spacing)*96)}.h-\[1px\]{height:1px}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-60{max-height:calc(var(--spacing)*60)}.max-h-96{max-height:calc(var(--spacing)*96)}.max-h-\[600px\]{max-height:600px}.min-h-\[60px\]{min-height:60px}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-10{width:calc(var(--spacing)*10)}.w-12{width:calc(var(--spacing)*12)}.w-16{width:calc(var(--spacing)*16)}.w-20{width:calc(var(--spacing)*20)}.w-24{width:calc(var(--spacing)*24)}.w-32{width:calc(var(--spacing)*32)}.w-48{width:calc(var(--spacing)*48)}.w-64{width:calc(var(--spacing)*64)}.w-\[1px\]{width:1px}.w-full{width:100%}.max-w-7xl{max-width:var(--container-7xl)}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.min-w-9{min-width:calc(var(--spacing)*9)}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.flex-1{flex:1}.shrink-0{flex-shrink:0}.translate-x-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:1s linear infinite spin}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.appearance-none{appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-0\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}: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-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*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-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*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-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-l-\[3px\]{border-left-style:var(--tw-border-style);border-left-width:3px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-amber-200{border-color:var(--color-amber-200)}.border-destructive\/50{border-color:hsl(var(--destructive))}@supports (color:color-mix(in lab,red,red)){.border-destructive\/50{border-color:color-mix(in oklab,hsl(var(--destructive))50%,transparent)}}.border-emerald-200{border-color:var(--color-emerald-200)}.border-input{border-color:hsl(var(--input))}.border-muted-foreground{border-color:hsl(var(--muted-foreground))}.border-primary{border-color:hsl(var(--primary))}.border-transparent{border-color:#0000}.border-t-foreground{border-top-color:hsl(var(--foreground))}.border-t-transparent{border-top-color:#0000}.border-l-amber-500{border-left-color:var(--color-amber-500)}.border-l-blue-500{border-left-color:var(--color-blue-500)}.border-l-gray-500{border-left-color:var(--color-gray-500)}.border-l-red-500{border-left-color:var(--color-red-500)}.border-l-transparent{border-left-color:#0000}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-background,.bg-background\/95{background-color:hsl(var(--background))}@supports (color:color-mix(in lab,red,red)){.bg-background\/95{background-color:color-mix(in oklab,hsl(var(--background))95%,transparent)}}.bg-black\/80{background-color:#000c}@supports (color:color-mix(in lab,red,red)){.bg-black\/80{background-color:color-mix(in oklab,var(--color-black)80%,transparent)}}.bg-border{background-color:hsl(var(--border))}.bg-card{background-color:hsl(var(--card))}.bg-destructive{background-color:hsl(var(--destructive))}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-emerald-100{background-color:var(--color-emerald-100)}.bg-foreground{background-color:hsl(var(--foreground))}.bg-muted,.bg-muted\/30{background-color:hsl(var(--muted))}@supports (color:color-mix(in lab,red,red)){.bg-muted\/30{background-color:color-mix(in oklab,hsl(var(--muted))30%,transparent)}}.bg-muted\/50{background-color:hsl(var(--muted))}@supports (color:color-mix(in lab,red,red)){.bg-muted\/50{background-color:color-mix(in oklab,hsl(var(--muted))50%,transparent)}}.bg-popover{background-color:hsl(var(--popover))}.bg-primary,.bg-primary\/10{background-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.bg-primary\/10{background-color:color-mix(in oklab,hsl(var(--primary))10%,transparent)}}.bg-secondary,.bg-secondary\/50{background-color:hsl(var(--secondary))}@supports (color:color-mix(in lab,red,red)){.bg-secondary\/50{background-color:color-mix(in oklab,hsl(var(--secondary))50%,transparent)}}.bg-sidebar{background-color:hsl(var(--sidebar))}.bg-transparent{background-color:#0000}.p-1{padding:calc(var(--spacing)*1)}.p-1\.5{padding:calc(var(--spacing)*1.5)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-5{padding:calc(var(--spacing)*5)}.p-6{padding:calc(var(--spacing)*6)}.p-\[1px\]{padding:1px}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\.5{padding-inline:calc(var(--spacing)*1.5)}.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-8{padding-inline:calc(var(--spacing)*8)}.py-0{padding-block:calc(var(--spacing)*0)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-12{padding-block:calc(var(--spacing)*12)}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-3{padding-top:calc(var(--spacing)*3)}.pr-1{padding-right:calc(var(--spacing)*1)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-8{padding-right:calc(var(--spacing)*8)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-8{padding-left:calc(var(--spacing)*8)}.pl-9{padding-left:calc(var(--spacing)*9)}.text-center{text-align:center}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--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-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--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-none{--tw-leading:1;line-height:1}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.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-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.break-words{overflow-wrap:break-word}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-amber-800{color:var(--color-amber-800)}.text-background{color:hsl(var(--background))}.text-blue-600{color:var(--color-blue-600)}.text-card-foreground{color:hsl(var(--card-foreground))}.text-current{color:currentColor}.text-destructive{color:hsl(var(--destructive))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-emerald-500{color:var(--color-emerald-500)}.text-emerald-600{color:var(--color-emerald-600)}.text-emerald-800{color:var(--color-emerald-800)}.text-foreground{color:hsl(var(--foreground))}.text-muted-foreground,.text-muted-foreground\/30{color:hsl(var(--muted-foreground))}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/30{color:color-mix(in oklab,hsl(var(--muted-foreground))30%,transparent)}}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-red-600{color:var(--color-red-600)}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.underline-offset-4{text-underline-offset:4px}.accent-foreground{accent-color:hsl(var(--foreground))}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.shadow{--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)}.shadow-lg{--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)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px 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)}.shadow-sm{--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)}.ring{--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-0{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + 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-offset-background{--tw-ring-offset-color:hsl(var(--background))}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.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}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}@media(hover:hover){.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:text-foreground::file-selector-button{color:hsl(var(--foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}@media(hover:hover){.hover\:-translate-y-0\.5:hover{--tw-translate-y:calc(var(--spacing)*-.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive))}@supports (color:color-mix(in lab,red,red)){.hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab,hsl(var(--destructive))90%,transparent)}}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,hsl(var(--primary))90%,transparent)}}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary))}@supports (color:color-mix(in lab,red,red)){.hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab,hsl(var(--secondary))80%,transparent)}}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:no-underline:hover{text-decoration-line:none}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px 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)}}.focus\:bg-accent:focus{background-color:hsl(var(--accent))}.focus\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.focus\:ring-1:focus{--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)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + 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)}.focus\:ring-ring:focus{--tw-ring-color:hsl(var(--ring))}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:ring-1:focus-visible{--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)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + 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)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color:hsl(var(--ring))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:ring-offset-background:focus-visible{--tw-ring-offset-color:hsl(var(--background))}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:hsl(var(--background))}.data-\[state\=active\]\:text-foreground[data-state=active]{color:hsl(var(--foreground))}.data-\[state\=active\]\:shadow[data-state=active]{--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)}.data-\[state\=checked\]\:translate-x-4[data-state=checked]{--tw-translate-x:calc(var(--spacing)*4);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:hsl(var(--primary))}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:hsl(var(--primary-foreground))}.data-\[state\=closed\]\:animate-accordion-up[data-state=closed]{animation:.2s ease-out accordion-up}.data-\[state\=open\]\:animate-accordion-down[data-state=open]{animation:.2s ease-out accordion-down}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:hsl(var(--accent))}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:hsl(var(--muted-foreground))}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:hsl(var(--input))}@supports ((-webkit-backdrop-filter:var(--tw)) or (backdrop-filter:var(--tw))){.supports-\[backdrop-filter\]\:bg-background\/60{background-color:hsl(var(--background))}@supports (color:color-mix(in lab,red,red)){.supports-\[backdrop-filter\]\:bg-background\/60{background-color:color-mix(in oklab,hsl(var(--background))60%,transparent)}}}@media(min-width:40rem){.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}:where(.sm\:space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}.sm\:rounded-lg{border-radius:var(--radius)}.sm\:text-left{text-align:left}}@media(min-width:48rem){.md\:flex{display:flex}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}}@media(min-width:64rem){.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.dark\:border-amber-800:is(.dark *){border-color:var(--color-amber-800)}.dark\:border-destructive:is(.dark *){border-color:hsl(var(--destructive))}.dark\:border-emerald-800:is(.dark *){border-color:var(--color-emerald-800)}.dark\:bg-amber-900\/30:is(.dark *){background-color:#7b33064d}@supports (color:color-mix(in lab,red,red)){.dark\:bg-amber-900\/30:is(.dark *){background-color:color-mix(in oklab,var(--color-amber-900)30%,transparent)}}.dark\:bg-amber-950\/20:is(.dark *){background-color:#46190133}@supports (color:color-mix(in lab,red,red)){.dark\:bg-amber-950\/20:is(.dark *){background-color:color-mix(in oklab,var(--color-amber-950)20%,transparent)}}.dark\:bg-amber-950\/50:is(.dark *){background-color:#46190180}@supports (color:color-mix(in lab,red,red)){.dark\:bg-amber-950\/50:is(.dark *){background-color:color-mix(in oklab,var(--color-amber-950)50%,transparent)}}.dark\:bg-emerald-900\/30:is(.dark *){background-color:#004e3b4d}@supports (color:color-mix(in lab,red,red)){.dark\:bg-emerald-900\/30:is(.dark *){background-color:color-mix(in oklab,var(--color-emerald-900)30%,transparent)}}.dark\:bg-emerald-950\/50:is(.dark *){background-color:#002c2280}@supports (color:color-mix(in lab,red,red)){.dark\:bg-emerald-950\/50:is(.dark *){background-color:color-mix(in oklab,var(--color-emerald-950)50%,transparent)}}.dark\:text-amber-300:is(.dark *){color:var(--color-amber-300)}.dark\:text-amber-400:is(.dark *){color:var(--color-amber-400)}.dark\:text-blue-400:is(.dark *){color:var(--color-blue-400)}.dark\:text-emerald-400:is(.dark *){color:var(--color-emerald-400)}.dark\:text-red-400:is(.dark *){color:var(--color-red-400)}.\[\&_p\]\:leading-relaxed p{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&\>span\]\:line-clamp-1>span{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\]\:top-4>svg{top:calc(var(--spacing)*4)}.\[\&\>svg\]\:left-4>svg{left:calc(var(--spacing)*4)}.\[\&\>svg\]\:size-4>svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:text-amber-600>svg{color:var(--color-amber-600)}.\[\&\>svg\]\:text-destructive>svg{color:hsl(var(--destructive))}.\[\&\>svg\]\:text-emerald-600>svg{color:var(--color-emerald-600)}.\[\&\>svg\]\:text-foreground>svg{color:hsl(var(--foreground))}.dark\:\[\&\>svg\]\:text-amber-400:is(.dark *)>svg{color:var(--color-amber-400)}.dark\:\[\&\>svg\]\:text-emerald-400:is(.dark *)>svg{color:var(--color-emerald-400)}.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div{--tw-translate-y:-3px;translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&\>svg\~\*\]\:pl-7>svg~*{padding-left:calc(var(--spacing)*7)}.\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open]>svg{rotate:180deg}}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:hsl(var(--muted-foreground)/.3);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:hsl(var(--muted-foreground)/.5)}@keyframes slideDownAndFade{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}@keyframes slideUpAndFade{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@keyframes contentShow{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:scale(1)}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes pulse-soft{0%,to{opacity:1}50%{opacity:.5}}@keyframes spin{to{transform:rotate(360deg)}}:focus-visible{outline:2px solid hsl(var(--ring));outline-offset:2px;border-radius:calc(var(--radius) - 2px)}@media(prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.menu-item{border-radius:calc(var(--radius) + 2px);cursor:pointer;color:hsl(var(--muted-foreground));align-items:center;gap:.75rem;padding:.5rem .75rem;font-size:.875rem;text-decoration:none;transition:all .2s cubic-bezier(.4,0,.2,1);display:flex}.menu-item:hover:not(.active){background-color:hsl(var(--accent));color:hsl(var(--accent-foreground))}.menu-item.active{background-color:hsl(var(--primary));color:hsl(var(--primary-foreground))}.sandbox-container{gap:1rem;width:100%;max-width:100vw;height:calc(100vh - 42px - 3rem);padding:1rem;display:flex;position:relative;overflow:hidden}.channel-sidebar{flex-direction:column;flex-shrink:0;width:256px;transition:transform .2s cubic-bezier(.4,0,.2,1);display:flex}.chat-area{flex-direction:column;flex:1;gap:.75rem;min-width:0;height:100%;display:flex;overflow:hidden}.rich-text-editor{font-family:inherit;transition:border-color .2s cubic-bezier(.4,0,.2,1)}.rich-text-editor:focus{box-shadow:0 0 0 1px hsl(var(--ring));border-color:hsl(var(--ring))!important}.rich-text-editor:empty:before{content:attr(data-placeholder);color:hsl(var(--muted-foreground));pointer-events:none}.rich-text-editor .editor-face{vertical-align:middle;width:24px;height:24px;margin:0 2px;display:inline-block}.rich-text-editor .editor-image{border-radius:8px;max-width:200px;margin:4px 0;display:block}.rich-text-editor .editor-at{background-color:hsl(var(--accent));color:hsl(var(--accent-foreground));-webkit-user-select:none;user-select:none;cursor:pointer;border-radius:4px;align-items:center;margin:0 2px;padding:2px 6px;font-size:.9em;transition:background-color .2s;display:inline-flex}.rich-text-editor .editor-at:hover{background-color:hsl(var(--muted))}.rich-text-editor .editor-at-symbol{margin-right:2px;font-weight:600}.rich-text-editor .editor-at-name{font-weight:500}.rich-text-editor::-webkit-scrollbar{width:6px}.rich-text-editor::-webkit-scrollbar-thumb{background:hsl(var(--muted-foreground)/.3);border-radius:4px}.rich-text-editor::-webkit-scrollbar-thumb:hover{background:hsl(var(--muted-foreground)/.5)}.mobile-channel-toggle,.channel-overlay{display:none}@media print{*{box-shadow:none!important;transition:none!important;animation:none!important}.no-print{display:none}}@media(max-width:768px){.sandbox-container{flex-direction:column;gap:0;height:calc(100vh - 42px - 3rem);padding:0}.mobile-channel-toggle{background:hsl(var(--primary));color:hsl(var(--primary-foreground));border-radius:var(--radius);cursor:pointer;border:none;justify-content:center;align-items:center;gap:.5rem;margin:.5rem;padding:.75rem 1rem;font-size:.875rem;font-weight:500;display:flex}.channel-sidebar{z-index:1000;background:hsl(var(--background));width:280px;max-width:80vw;position:fixed;top:0;bottom:0;left:0;transform:translate(-100%);box-shadow:4px 0 16px #0000001a}.channel-sidebar.show{transform:translate(0)}.channel-overlay{z-index:999;background-color:#00000080;animation:.2s ease-out fadeIn;display:block;position:fixed;inset:0}.chat-area{flex:1;gap:.5rem;height:auto;padding:0 .5rem .5rem}}@media(min-width:768px)and (max-width:1024px){.sandbox-container{gap:.75rem;padding:.75rem}.channel-sidebar{width:200px}.chat-area{gap:.5rem}}@media(min-width:1400px){.sandbox-container{gap:1.5rem;padding:1.5rem}.channel-sidebar{width:280px}}@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}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@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-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-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@keyframes pulse{50%{opacity:.5}}@keyframes accordion-down{0%{height:0}to{height:var(--radix-accordion-content-height)}}@keyframes accordion-up{0%{height:var(--radix-accordion-content-height)}to{height:0}}
|
|
2
|
-
@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-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking: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-outline-style:solid;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-space-x-reverse: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-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-800:oklch(47.3% .137 46.201);--color-amber-900:oklch(41.4% .112 45.904);--color-amber-950:oklch(27.9% .077 45.635);--color-emerald-50:oklch(97.9% .021 166.113);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-200:oklch(90.5% .093 164.15);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-600:oklch(59.6% .145 163.225);--color-emerald-800:oklch(43.2% .095 166.913);--color-emerald-900:oklch(37.8% .077 168.94);--color-emerald-950:oklch(26.2% .051 172.552);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-gray-500:oklch(55.1% .027 264.364);--color-black:#000;--spacing:.25rem;--container-md:28rem;--container-lg:32rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--leading-relaxed:1.625;--radius-xl:.75rem;--ease-out:cubic-bezier(0,0,.2,1);--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%;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]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}:root{--background:0 0% 100%;--foreground:240 10% 3.9%;--card:0 0% 100%;--card-foreground:240 10% 3.9%;--popover:0 0% 100%;--popover-foreground:240 10% 3.9%;--primary:240 5.9% 10%;--primary-foreground:0 0% 98%;--secondary:240 4.8% 95.9%;--secondary-foreground:240 5.9% 10%;--muted:240 4.8% 95.9%;--muted-foreground:240 3.8% 46.1%;--accent:240 4.8% 95.9%;--accent-foreground:240 5.9% 10%;--destructive:0 84.2% 60.2%;--destructive-foreground:0 0% 98%;--border:240 5.9% 90%;--input:240 5.9% 90%;--ring:240 5.9% 10%;--radius:.5rem;--sidebar:0 0% 98%;--sidebar-foreground:240 5.3% 26.1%;--sidebar-primary:240 5.9% 10%;--sidebar-primary-foreground:0 0% 98%;--sidebar-accent:240 4.8% 95.9%;--sidebar-accent-foreground:240 5.9% 10%;--sidebar-border:220 13% 91%;--sidebar-ring:240 5.9% 10%}.dark{--background:240 10% 3.9%;--foreground:0 0% 98%;--card:240 10% 3.9%;--card-foreground:0 0% 98%;--popover:240 10% 3.9%;--popover-foreground:0 0% 98%;--primary:0 0% 98%;--primary-foreground:240 5.9% 10%;--secondary:240 3.7% 15.9%;--secondary-foreground:0 0% 98%;--muted:240 3.7% 15.9%;--muted-foreground:240 5% 64.9%;--accent:240 3.7% 15.9%;--accent-foreground:0 0% 98%;--destructive:0 62.8% 30.6%;--destructive-foreground:0 0% 98%;--border:240 3.7% 15.9%;--input:240 3.7% 15.9%;--ring:240 4.9% 83.9%;--sidebar:240 5.9% 10%;--sidebar-foreground:240 4.8% 95.9%;--sidebar-primary:0 0% 98%;--sidebar-primary-foreground:240 5.9% 10%;--sidebar-accent:240 3.7% 15.9%;--sidebar-accent-foreground:240 4.8% 95.9%;--sidebar-border:240 3.7% 15.9%;--sidebar-ring:240 4.9% 83.9%}*{border-color:hsl(var(--border));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}html{scroll-behavior:smooth}body{background-color:hsl(var(--background));color:hsl(var(--foreground));font-feature-settings:"cv02","cv03","cv04","cv11"}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing)*0)}.top-1\/2{top:50%}.top-4{top:calc(var(--spacing)*4)}.top-\[50\%\]{top:50%}.right-2{right:calc(var(--spacing)*2)}.right-4{right:calc(var(--spacing)*4)}.left-2{left:calc(var(--spacing)*2)}.left-3{left:calc(var(--spacing)*3)}.left-\[50\%\]{left:50%}.z-50{z-index:50}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.mx-6{margin-inline:calc(var(--spacing)*6)}.mx-auto{margin-inline:auto}.my-1{margin-block:calc(var(--spacing)*1)}.my-2{margin-block:calc(var(--spacing)*2)}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-6{margin-top:calc(var(--spacing)*6)}.mr-1{margin-right:calc(var(--spacing)*1)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.aspect-square{aspect-ratio:1}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-14{height:calc(var(--spacing)*14)}.h-16{height:calc(var(--spacing)*16)}.h-20{height:calc(var(--spacing)*20)}.h-32{height:calc(var(--spacing)*32)}.h-40{height:calc(var(--spacing)*40)}.h-48{height:calc(var(--spacing)*48)}.h-96{height:calc(var(--spacing)*96)}.h-\[1px\]{height:1px}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-60{max-height:calc(var(--spacing)*60)}.max-h-96{max-height:calc(var(--spacing)*96)}.max-h-\[600px\]{max-height:600px}.min-h-\[60px\]{min-height:60px}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-10{width:calc(var(--spacing)*10)}.w-12{width:calc(var(--spacing)*12)}.w-16{width:calc(var(--spacing)*16)}.w-20{width:calc(var(--spacing)*20)}.w-24{width:calc(var(--spacing)*24)}.w-32{width:calc(var(--spacing)*32)}.w-48{width:calc(var(--spacing)*48)}.w-64{width:calc(var(--spacing)*64)}.w-\[1px\]{width:1px}.w-full{width:100%}.max-w-7xl{max-width:var(--container-7xl)}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.min-w-9{min-width:calc(var(--spacing)*9)}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.flex-1{flex:1}.shrink-0{flex-shrink:0}.translate-x-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:1s linear infinite spin}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.appearance-none{appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-0\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}: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-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*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-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*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-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-l-\[3px\]{border-left-style:var(--tw-border-style);border-left-width:3px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-amber-200{border-color:var(--color-amber-200)}.border-destructive\/50{border-color:hsl(var(--destructive))}@supports (color:color-mix(in lab,red,red)){.border-destructive\/50{border-color:color-mix(in oklab,hsl(var(--destructive))50%,transparent)}}.border-emerald-200{border-color:var(--color-emerald-200)}.border-input{border-color:hsl(var(--input))}.border-muted-foreground{border-color:hsl(var(--muted-foreground))}.border-primary{border-color:hsl(var(--primary))}.border-transparent{border-color:#0000}.border-t-foreground{border-top-color:hsl(var(--foreground))}.border-t-transparent{border-top-color:#0000}.border-l-amber-500{border-left-color:var(--color-amber-500)}.border-l-blue-500{border-left-color:var(--color-blue-500)}.border-l-gray-500{border-left-color:var(--color-gray-500)}.border-l-red-500{border-left-color:var(--color-red-500)}.border-l-transparent{border-left-color:#0000}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-background,.bg-background\/95{background-color:hsl(var(--background))}@supports (color:color-mix(in lab,red,red)){.bg-background\/95{background-color:color-mix(in oklab,hsl(var(--background))95%,transparent)}}.bg-black\/80{background-color:#000c}@supports (color:color-mix(in lab,red,red)){.bg-black\/80{background-color:color-mix(in oklab,var(--color-black)80%,transparent)}}.bg-border{background-color:hsl(var(--border))}.bg-card{background-color:hsl(var(--card))}.bg-destructive{background-color:hsl(var(--destructive))}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-emerald-100{background-color:var(--color-emerald-100)}.bg-foreground{background-color:hsl(var(--foreground))}.bg-muted,.bg-muted\/30{background-color:hsl(var(--muted))}@supports (color:color-mix(in lab,red,red)){.bg-muted\/30{background-color:color-mix(in oklab,hsl(var(--muted))30%,transparent)}}.bg-muted\/50{background-color:hsl(var(--muted))}@supports (color:color-mix(in lab,red,red)){.bg-muted\/50{background-color:color-mix(in oklab,hsl(var(--muted))50%,transparent)}}.bg-popover{background-color:hsl(var(--popover))}.bg-primary,.bg-primary\/10{background-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.bg-primary\/10{background-color:color-mix(in oklab,hsl(var(--primary))10%,transparent)}}.bg-secondary,.bg-secondary\/50{background-color:hsl(var(--secondary))}@supports (color:color-mix(in lab,red,red)){.bg-secondary\/50{background-color:color-mix(in oklab,hsl(var(--secondary))50%,transparent)}}.bg-sidebar{background-color:hsl(var(--sidebar))}.bg-transparent{background-color:#0000}.p-1{padding:calc(var(--spacing)*1)}.p-1\.5{padding:calc(var(--spacing)*1.5)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-5{padding:calc(var(--spacing)*5)}.p-6{padding:calc(var(--spacing)*6)}.p-\[1px\]{padding:1px}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\.5{padding-inline:calc(var(--spacing)*1.5)}.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-8{padding-inline:calc(var(--spacing)*8)}.py-0{padding-block:calc(var(--spacing)*0)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-12{padding-block:calc(var(--spacing)*12)}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-3{padding-top:calc(var(--spacing)*3)}.pr-1{padding-right:calc(var(--spacing)*1)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-8{padding-right:calc(var(--spacing)*8)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-8{padding-left:calc(var(--spacing)*8)}.pl-9{padding-left:calc(var(--spacing)*9)}.text-center{text-align:center}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--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-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--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-none{--tw-leading:1;line-height:1}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.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-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.break-words{overflow-wrap:break-word}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-amber-800{color:var(--color-amber-800)}.text-background{color:hsl(var(--background))}.text-blue-600{color:var(--color-blue-600)}.text-card-foreground{color:hsl(var(--card-foreground))}.text-current{color:currentColor}.text-destructive{color:hsl(var(--destructive))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-emerald-500{color:var(--color-emerald-500)}.text-emerald-600{color:var(--color-emerald-600)}.text-emerald-800{color:var(--color-emerald-800)}.text-foreground{color:hsl(var(--foreground))}.text-muted-foreground,.text-muted-foreground\/30{color:hsl(var(--muted-foreground))}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/30{color:color-mix(in oklab,hsl(var(--muted-foreground))30%,transparent)}}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-red-600{color:var(--color-red-600)}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.underline-offset-4{text-underline-offset:4px}.accent-foreground{accent-color:hsl(var(--foreground))}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.shadow{--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)}.shadow-lg{--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)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px 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)}.shadow-sm{--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)}.ring{--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-0{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + 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-offset-background{--tw-ring-offset-color:hsl(var(--background))}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.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}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}@media(hover:hover){.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:text-foreground::file-selector-button{color:hsl(var(--foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}@media(hover:hover){.hover\:-translate-y-0\.5:hover{--tw-translate-y:calc(var(--spacing)*-.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive))}@supports (color:color-mix(in lab,red,red)){.hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab,hsl(var(--destructive))90%,transparent)}}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,hsl(var(--primary))90%,transparent)}}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary))}@supports (color:color-mix(in lab,red,red)){.hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab,hsl(var(--secondary))80%,transparent)}}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:no-underline:hover{text-decoration-line:none}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px 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)}}.focus\:bg-accent:focus{background-color:hsl(var(--accent))}.focus\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.focus\:ring-1:focus{--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)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + 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)}.focus\:ring-ring:focus{--tw-ring-color:hsl(var(--ring))}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:ring-1:focus-visible{--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)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + 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)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color:hsl(var(--ring))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:ring-offset-background:focus-visible{--tw-ring-offset-color:hsl(var(--background))}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:hsl(var(--background))}.data-\[state\=active\]\:text-foreground[data-state=active]{color:hsl(var(--foreground))}.data-\[state\=active\]\:shadow[data-state=active]{--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)}.data-\[state\=checked\]\:translate-x-4[data-state=checked]{--tw-translate-x:calc(var(--spacing)*4);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:hsl(var(--primary))}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:hsl(var(--primary-foreground))}.data-\[state\=closed\]\:animate-accordion-up[data-state=closed]{animation:.2s ease-out accordion-up}.data-\[state\=open\]\:animate-accordion-down[data-state=open]{animation:.2s ease-out accordion-down}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:hsl(var(--accent))}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:hsl(var(--muted-foreground))}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:hsl(var(--input))}@supports ((-webkit-backdrop-filter:var(--tw)) or (backdrop-filter:var(--tw))){.supports-\[backdrop-filter\]\:bg-background\/60{background-color:hsl(var(--background))}@supports (color:color-mix(in lab,red,red)){.supports-\[backdrop-filter\]\:bg-background\/60{background-color:color-mix(in oklab,hsl(var(--background))60%,transparent)}}}@media(min-width:40rem){.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}:where(.sm\:space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}.sm\:rounded-lg{border-radius:var(--radius)}.sm\:text-left{text-align:left}}@media(min-width:48rem){.md\:flex{display:flex}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}}@media(min-width:64rem){.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.dark\:border-amber-800:is(.dark *){border-color:var(--color-amber-800)}.dark\:border-destructive:is(.dark *){border-color:hsl(var(--destructive))}.dark\:border-emerald-800:is(.dark *){border-color:var(--color-emerald-800)}.dark\:bg-amber-900\/30:is(.dark *){background-color:#7b33064d}@supports (color:color-mix(in lab,red,red)){.dark\:bg-amber-900\/30:is(.dark *){background-color:color-mix(in oklab,var(--color-amber-900)30%,transparent)}}.dark\:bg-amber-950\/20:is(.dark *){background-color:#46190133}@supports (color:color-mix(in lab,red,red)){.dark\:bg-amber-950\/20:is(.dark *){background-color:color-mix(in oklab,var(--color-amber-950)20%,transparent)}}.dark\:bg-amber-950\/50:is(.dark *){background-color:#46190180}@supports (color:color-mix(in lab,red,red)){.dark\:bg-amber-950\/50:is(.dark *){background-color:color-mix(in oklab,var(--color-amber-950)50%,transparent)}}.dark\:bg-emerald-900\/30:is(.dark *){background-color:#004e3b4d}@supports (color:color-mix(in lab,red,red)){.dark\:bg-emerald-900\/30:is(.dark *){background-color:color-mix(in oklab,var(--color-emerald-900)30%,transparent)}}.dark\:bg-emerald-950\/50:is(.dark *){background-color:#002c2280}@supports (color:color-mix(in lab,red,red)){.dark\:bg-emerald-950\/50:is(.dark *){background-color:color-mix(in oklab,var(--color-emerald-950)50%,transparent)}}.dark\:text-amber-300:is(.dark *){color:var(--color-amber-300)}.dark\:text-amber-400:is(.dark *){color:var(--color-amber-400)}.dark\:text-blue-400:is(.dark *){color:var(--color-blue-400)}.dark\:text-emerald-400:is(.dark *){color:var(--color-emerald-400)}.dark\:text-red-400:is(.dark *){color:var(--color-red-400)}.\[\&_p\]\:leading-relaxed p{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&\>span\]\:line-clamp-1>span{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\]\:top-4>svg{top:calc(var(--spacing)*4)}.\[\&\>svg\]\:left-4>svg{left:calc(var(--spacing)*4)}.\[\&\>svg\]\:size-4>svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:text-amber-600>svg{color:var(--color-amber-600)}.\[\&\>svg\]\:text-destructive>svg{color:hsl(var(--destructive))}.\[\&\>svg\]\:text-emerald-600>svg{color:var(--color-emerald-600)}.\[\&\>svg\]\:text-foreground>svg{color:hsl(var(--foreground))}.dark\:\[\&\>svg\]\:text-amber-400:is(.dark *)>svg{color:var(--color-amber-400)}.dark\:\[\&\>svg\]\:text-emerald-400:is(.dark *)>svg{color:var(--color-emerald-400)}.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div{--tw-translate-y:-3px;translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&\>svg\~\*\]\:pl-7>svg~*{padding-left:calc(var(--spacing)*7)}.\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open]>svg{rotate:180deg}}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:hsl(var(--muted-foreground)/.3);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:hsl(var(--muted-foreground)/.5)}@keyframes slideDownAndFade{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}@keyframes slideUpAndFade{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@keyframes contentShow{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:scale(1)}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes pulse-soft{0%,to{opacity:1}50%{opacity:.5}}@keyframes spin{to{transform:rotate(360deg)}}:focus-visible{outline:2px solid hsl(var(--ring));outline-offset:2px;border-radius:calc(var(--radius) - 2px)}@media(prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.menu-item{border-radius:calc(var(--radius) + 2px);cursor:pointer;color:hsl(var(--muted-foreground));align-items:center;gap:.75rem;padding:.5rem .75rem;font-size:.875rem;text-decoration:none;transition:all .2s cubic-bezier(.4,0,.2,1);display:flex}.menu-item:hover:not(.active){background-color:hsl(var(--accent));color:hsl(var(--accent-foreground))}.menu-item.active{background-color:hsl(var(--primary));color:hsl(var(--primary-foreground))}.sandbox-container{gap:1rem;width:100%;max-width:100vw;height:calc(100vh - 42px - 3rem);padding:1rem;display:flex;position:relative;overflow:hidden}.channel-sidebar{flex-direction:column;flex-shrink:0;width:256px;transition:transform .2s cubic-bezier(.4,0,.2,1);display:flex}.chat-area{flex-direction:column;flex:1;gap:.75rem;min-width:0;height:100%;display:flex;overflow:hidden}.rich-text-editor{font-family:inherit;transition:border-color .2s cubic-bezier(.4,0,.2,1)}.rich-text-editor:focus{box-shadow:0 0 0 1px hsl(var(--ring));border-color:hsl(var(--ring))!important}.rich-text-editor:empty:before{content:attr(data-placeholder);color:hsl(var(--muted-foreground));pointer-events:none}.rich-text-editor .editor-face{vertical-align:middle;width:24px;height:24px;margin:0 2px;display:inline-block}.rich-text-editor .editor-image{border-radius:8px;max-width:200px;margin:4px 0;display:block}.rich-text-editor .editor-at{background-color:hsl(var(--accent));color:hsl(var(--accent-foreground));-webkit-user-select:none;user-select:none;cursor:pointer;border-radius:4px;align-items:center;margin:0 2px;padding:2px 6px;font-size:.9em;transition:background-color .2s;display:inline-flex}.rich-text-editor .editor-at:hover{background-color:hsl(var(--muted))}.rich-text-editor .editor-at-symbol{margin-right:2px;font-weight:600}.rich-text-editor .editor-at-name{font-weight:500}.rich-text-editor::-webkit-scrollbar{width:6px}.rich-text-editor::-webkit-scrollbar-thumb{background:hsl(var(--muted-foreground)/.3);border-radius:4px}.rich-text-editor::-webkit-scrollbar-thumb:hover{background:hsl(var(--muted-foreground)/.5)}.mobile-channel-toggle,.channel-overlay{display:none}@media print{*{box-shadow:none!important;transition:none!important;animation:none!important}.no-print{display:none}}@media(max-width:768px){.sandbox-container{flex-direction:column;gap:0;height:calc(100vh - 42px - 3rem);padding:0}.mobile-channel-toggle{background:hsl(var(--primary));color:hsl(var(--primary-foreground));border-radius:var(--radius);cursor:pointer;border:none;justify-content:center;align-items:center;gap:.5rem;margin:.5rem;padding:.75rem 1rem;font-size:.875rem;font-weight:500;display:flex}.channel-sidebar{z-index:1000;background:hsl(var(--background));width:280px;max-width:80vw;position:fixed;top:0;bottom:0;left:0;transform:translate(-100%);box-shadow:4px 0 16px #0000001a}.channel-sidebar.show{transform:translate(0)}.channel-overlay{z-index:999;background-color:#00000080;animation:.2s ease-out fadeIn;display:block;position:fixed;inset:0}.chat-area{flex:1;gap:.5rem;height:auto;padding:0 .5rem .5rem}}@media(min-width:768px)and (max-width:1024px){.sandbox-container{gap:.75rem;padding:.75rem}.channel-sidebar{width:200px}.chat-area{gap:.5rem}}@media(min-width:1400px){.sandbox-container{gap:1.5rem;padding:1.5rem}.channel-sidebar{width:280px}}@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}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@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-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-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@keyframes pulse{50%{opacity:.5}}@keyframes accordion-down{0%{height:0}to{height:var(--radix-accordion-content-height)}}@keyframes accordion-up{0%{height:var(--radix-accordion-content-height)}to{height:0}}
|
|
1
|
+
@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-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking: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-outline-style:solid;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-space-x-reverse: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-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-800:oklch(47.3% .137 46.201);--color-amber-900:oklch(41.4% .112 45.904);--color-amber-950:oklch(27.9% .077 45.635);--color-emerald-50:oklch(97.9% .021 166.113);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-200:oklch(90.5% .093 164.15);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-600:oklch(59.6% .145 163.225);--color-emerald-800:oklch(43.2% .095 166.913);--color-emerald-900:oklch(37.8% .077 168.94);--color-emerald-950:oklch(26.2% .051 172.552);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-gray-500:oklch(55.1% .027 264.364);--color-black:#000;--spacing:.25rem;--container-md:28rem;--container-lg:32rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--leading-relaxed:1.625;--radius-xl:.75rem;--ease-out:cubic-bezier(0,0,.2,1);--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%;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]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}:root{--background:0 0% 100%;--foreground:240 10% 3.9%;--card:0 0% 100%;--card-foreground:240 10% 3.9%;--popover:0 0% 100%;--popover-foreground:240 10% 3.9%;--primary:240 5.9% 10%;--primary-foreground:0 0% 98%;--secondary:240 4.8% 95.9%;--secondary-foreground:240 5.9% 10%;--muted:240 4.8% 95.9%;--muted-foreground:240 3.8% 46.1%;--accent:240 4.8% 95.9%;--accent-foreground:240 5.9% 10%;--destructive:0 84.2% 60.2%;--destructive-foreground:0 0% 98%;--border:240 5.9% 90%;--input:240 5.9% 90%;--ring:240 5.9% 10%;--radius:.5rem;--sidebar:0 0% 98%;--sidebar-foreground:240 5.3% 26.1%;--sidebar-primary:240 5.9% 10%;--sidebar-primary-foreground:0 0% 98%;--sidebar-accent:240 4.8% 95.9%;--sidebar-accent-foreground:240 5.9% 10%;--sidebar-border:220 13% 91%;--sidebar-ring:240 5.9% 10%}.dark{--background:240 10% 3.9%;--foreground:0 0% 98%;--card:240 10% 3.9%;--card-foreground:0 0% 98%;--popover:240 10% 3.9%;--popover-foreground:0 0% 98%;--primary:0 0% 98%;--primary-foreground:240 5.9% 10%;--secondary:240 3.7% 15.9%;--secondary-foreground:0 0% 98%;--muted:240 3.7% 15.9%;--muted-foreground:240 5% 64.9%;--accent:240 3.7% 15.9%;--accent-foreground:0 0% 98%;--destructive:0 62.8% 30.6%;--destructive-foreground:0 0% 98%;--border:240 3.7% 15.9%;--input:240 3.7% 15.9%;--ring:240 4.9% 83.9%;--sidebar:240 5.9% 10%;--sidebar-foreground:240 4.8% 95.9%;--sidebar-primary:0 0% 98%;--sidebar-primary-foreground:240 5.9% 10%;--sidebar-accent:240 3.7% 15.9%;--sidebar-accent-foreground:240 4.8% 95.9%;--sidebar-border:240 3.7% 15.9%;--sidebar-ring:240 4.9% 83.9%}*{border-color:hsl(var(--border));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}html{scroll-behavior:smooth}body{background-color:hsl(var(--background));color:hsl(var(--foreground));font-feature-settings:"cv02","cv03","cv04","cv11"}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing)*0)}.top-1\/2{top:50%}.top-4{top:calc(var(--spacing)*4)}.top-\[50\%\]{top:50%}.right-2{right:calc(var(--spacing)*2)}.right-4{right:calc(var(--spacing)*4)}.left-2{left:calc(var(--spacing)*2)}.left-3{left:calc(var(--spacing)*3)}.left-\[50\%\]{left:50%}.z-50{z-index:50}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.mx-4{margin-inline:calc(var(--spacing)*4)}.mx-6{margin-inline:calc(var(--spacing)*6)}.mx-auto{margin-inline:auto}.my-1{margin-block:calc(var(--spacing)*1)}.my-2{margin-block:calc(var(--spacing)*2)}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-6{margin-top:calc(var(--spacing)*6)}.mr-1{margin-right:calc(var(--spacing)*1)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.aspect-square{aspect-ratio:1}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-14{height:calc(var(--spacing)*14)}.h-16{height:calc(var(--spacing)*16)}.h-20{height:calc(var(--spacing)*20)}.h-32{height:calc(var(--spacing)*32)}.h-40{height:calc(var(--spacing)*40)}.h-48{height:calc(var(--spacing)*48)}.h-96{height:calc(var(--spacing)*96)}.h-\[1px\]{height:1px}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-60{max-height:calc(var(--spacing)*60)}.max-h-96{max-height:calc(var(--spacing)*96)}.max-h-\[600px\]{max-height:600px}.min-h-\[60px\]{min-height:60px}.min-h-screen{min-height:100vh}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-10{width:calc(var(--spacing)*10)}.w-12{width:calc(var(--spacing)*12)}.w-16{width:calc(var(--spacing)*16)}.w-20{width:calc(var(--spacing)*20)}.w-24{width:calc(var(--spacing)*24)}.w-32{width:calc(var(--spacing)*32)}.w-48{width:calc(var(--spacing)*48)}.w-64{width:calc(var(--spacing)*64)}.w-\[1px\]{width:1px}.w-full{width:100%}.max-w-7xl{max-width:var(--container-7xl)}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.min-w-9{min-width:calc(var(--spacing)*9)}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.flex-1{flex:1}.shrink-0{flex-shrink:0}.translate-x-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:1s linear infinite spin}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.appearance-none{appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-0\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}: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-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*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-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*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-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-l-\[3px\]{border-left-style:var(--tw-border-style);border-left-width:3px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-amber-200{border-color:var(--color-amber-200)}.border-destructive\/50{border-color:hsl(var(--destructive))}@supports (color:color-mix(in lab,red,red)){.border-destructive\/50{border-color:color-mix(in oklab,hsl(var(--destructive))50%,transparent)}}.border-emerald-200{border-color:var(--color-emerald-200)}.border-input{border-color:hsl(var(--input))}.border-muted-foreground{border-color:hsl(var(--muted-foreground))}.border-primary{border-color:hsl(var(--primary))}.border-transparent{border-color:#0000}.border-t-foreground{border-top-color:hsl(var(--foreground))}.border-t-transparent{border-top-color:#0000}.border-l-amber-500{border-left-color:var(--color-amber-500)}.border-l-blue-500{border-left-color:var(--color-blue-500)}.border-l-gray-500{border-left-color:var(--color-gray-500)}.border-l-red-500{border-left-color:var(--color-red-500)}.border-l-transparent{border-left-color:#0000}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-background,.bg-background\/95{background-color:hsl(var(--background))}@supports (color:color-mix(in lab,red,red)){.bg-background\/95{background-color:color-mix(in oklab,hsl(var(--background))95%,transparent)}}.bg-black\/80{background-color:#000c}@supports (color:color-mix(in lab,red,red)){.bg-black\/80{background-color:color-mix(in oklab,var(--color-black)80%,transparent)}}.bg-border{background-color:hsl(var(--border))}.bg-card{background-color:hsl(var(--card))}.bg-destructive{background-color:hsl(var(--destructive))}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-emerald-100{background-color:var(--color-emerald-100)}.bg-foreground{background-color:hsl(var(--foreground))}.bg-muted,.bg-muted\/30{background-color:hsl(var(--muted))}@supports (color:color-mix(in lab,red,red)){.bg-muted\/30{background-color:color-mix(in oklab,hsl(var(--muted))30%,transparent)}}.bg-muted\/50{background-color:hsl(var(--muted))}@supports (color:color-mix(in lab,red,red)){.bg-muted\/50{background-color:color-mix(in oklab,hsl(var(--muted))50%,transparent)}}.bg-popover{background-color:hsl(var(--popover))}.bg-primary,.bg-primary\/10{background-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.bg-primary\/10{background-color:color-mix(in oklab,hsl(var(--primary))10%,transparent)}}.bg-secondary,.bg-secondary\/50{background-color:hsl(var(--secondary))}@supports (color:color-mix(in lab,red,red)){.bg-secondary\/50{background-color:color-mix(in oklab,hsl(var(--secondary))50%,transparent)}}.bg-sidebar{background-color:hsl(var(--sidebar))}.bg-transparent{background-color:#0000}.p-1{padding:calc(var(--spacing)*1)}.p-1\.5{padding:calc(var(--spacing)*1.5)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-5{padding:calc(var(--spacing)*5)}.p-6{padding:calc(var(--spacing)*6)}.p-\[1px\]{padding:1px}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\.5{padding-inline:calc(var(--spacing)*1.5)}.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-8{padding-inline:calc(var(--spacing)*8)}.py-0{padding-block:calc(var(--spacing)*0)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-12{padding-block:calc(var(--spacing)*12)}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-3{padding-top:calc(var(--spacing)*3)}.pr-1{padding-right:calc(var(--spacing)*1)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-8{padding-right:calc(var(--spacing)*8)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-8{padding-left:calc(var(--spacing)*8)}.pl-9{padding-left:calc(var(--spacing)*9)}.text-center{text-align:center}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--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-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--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-none{--tw-leading:1;line-height:1}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.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-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.break-words{overflow-wrap:break-word}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-amber-800{color:var(--color-amber-800)}.text-background{color:hsl(var(--background))}.text-blue-600{color:var(--color-blue-600)}.text-card-foreground{color:hsl(var(--card-foreground))}.text-current{color:currentColor}.text-destructive{color:hsl(var(--destructive))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-emerald-500{color:var(--color-emerald-500)}.text-emerald-600{color:var(--color-emerald-600)}.text-emerald-800{color:var(--color-emerald-800)}.text-foreground{color:hsl(var(--foreground))}.text-muted-foreground,.text-muted-foreground\/30{color:hsl(var(--muted-foreground))}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/30{color:color-mix(in oklab,hsl(var(--muted-foreground))30%,transparent)}}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-red-600{color:var(--color-red-600)}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.underline-offset-4{text-underline-offset:4px}.accent-foreground{accent-color:hsl(var(--foreground))}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.shadow{--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)}.shadow-lg{--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)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px 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)}.shadow-sm{--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)}.ring{--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-0{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + 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-offset-background{--tw-ring-offset-color:hsl(var(--background))}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.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}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}@media(hover:hover){.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:text-foreground::file-selector-button{color:hsl(var(--foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}@media(hover:hover){.hover\:-translate-y-0\.5:hover{--tw-translate-y:calc(var(--spacing)*-.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive))}@supports (color:color-mix(in lab,red,red)){.hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab,hsl(var(--destructive))90%,transparent)}}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,hsl(var(--primary))90%,transparent)}}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary))}@supports (color:color-mix(in lab,red,red)){.hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab,hsl(var(--secondary))80%,transparent)}}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:no-underline:hover{text-decoration-line:none}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px 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)}}.focus\:bg-accent:focus{background-color:hsl(var(--accent))}.focus\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.focus\:ring-1:focus{--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)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + 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)}.focus\:ring-ring:focus{--tw-ring-color:hsl(var(--ring))}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:ring-1:focus-visible{--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)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + 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)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color:hsl(var(--ring))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:ring-offset-background:focus-visible{--tw-ring-offset-color:hsl(var(--background))}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:hsl(var(--background))}.data-\[state\=active\]\:text-foreground[data-state=active]{color:hsl(var(--foreground))}.data-\[state\=active\]\:shadow[data-state=active]{--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)}.data-\[state\=checked\]\:translate-x-4[data-state=checked]{--tw-translate-x:calc(var(--spacing)*4);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:hsl(var(--primary))}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:hsl(var(--primary-foreground))}.data-\[state\=closed\]\:animate-accordion-up[data-state=closed]{animation:.2s ease-out accordion-up}.data-\[state\=open\]\:animate-accordion-down[data-state=open]{animation:.2s ease-out accordion-down}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:hsl(var(--accent))}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:hsl(var(--muted-foreground))}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:hsl(var(--input))}@supports ((-webkit-backdrop-filter:var(--tw)) or (backdrop-filter:var(--tw))){.supports-\[backdrop-filter\]\:bg-background\/60{background-color:hsl(var(--background))}@supports (color:color-mix(in lab,red,red)){.supports-\[backdrop-filter\]\:bg-background\/60{background-color:color-mix(in oklab,hsl(var(--background))60%,transparent)}}}@media(min-width:40rem){.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}:where(.sm\:space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}.sm\:rounded-lg{border-radius:var(--radius)}.sm\:text-left{text-align:left}}@media(min-width:48rem){.md\:flex{display:flex}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}}@media(min-width:64rem){.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.dark\:border-amber-800:is(.dark *){border-color:var(--color-amber-800)}.dark\:border-destructive:is(.dark *){border-color:hsl(var(--destructive))}.dark\:border-emerald-800:is(.dark *){border-color:var(--color-emerald-800)}.dark\:bg-amber-900\/30:is(.dark *){background-color:#7b33064d}@supports (color:color-mix(in lab,red,red)){.dark\:bg-amber-900\/30:is(.dark *){background-color:color-mix(in oklab,var(--color-amber-900)30%,transparent)}}.dark\:bg-amber-950\/20:is(.dark *){background-color:#46190133}@supports (color:color-mix(in lab,red,red)){.dark\:bg-amber-950\/20:is(.dark *){background-color:color-mix(in oklab,var(--color-amber-950)20%,transparent)}}.dark\:bg-amber-950\/50:is(.dark *){background-color:#46190180}@supports (color:color-mix(in lab,red,red)){.dark\:bg-amber-950\/50:is(.dark *){background-color:color-mix(in oklab,var(--color-amber-950)50%,transparent)}}.dark\:bg-emerald-900\/30:is(.dark *){background-color:#004e3b4d}@supports (color:color-mix(in lab,red,red)){.dark\:bg-emerald-900\/30:is(.dark *){background-color:color-mix(in oklab,var(--color-emerald-900)30%,transparent)}}.dark\:bg-emerald-950\/50:is(.dark *){background-color:#002c2280}@supports (color:color-mix(in lab,red,red)){.dark\:bg-emerald-950\/50:is(.dark *){background-color:color-mix(in oklab,var(--color-emerald-950)50%,transparent)}}.dark\:text-amber-300:is(.dark *){color:var(--color-amber-300)}.dark\:text-amber-400:is(.dark *){color:var(--color-amber-400)}.dark\:text-blue-400:is(.dark *){color:var(--color-blue-400)}.dark\:text-emerald-400:is(.dark *){color:var(--color-emerald-400)}.dark\:text-red-400:is(.dark *){color:var(--color-red-400)}.\[\&_p\]\:leading-relaxed p{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&\>span\]\:line-clamp-1>span{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\]\:top-4>svg{top:calc(var(--spacing)*4)}.\[\&\>svg\]\:left-4>svg{left:calc(var(--spacing)*4)}.\[\&\>svg\]\:size-4>svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:text-amber-600>svg{color:var(--color-amber-600)}.\[\&\>svg\]\:text-destructive>svg{color:hsl(var(--destructive))}.\[\&\>svg\]\:text-emerald-600>svg{color:var(--color-emerald-600)}.\[\&\>svg\]\:text-foreground>svg{color:hsl(var(--foreground))}.dark\:\[\&\>svg\]\:text-amber-400:is(.dark *)>svg{color:var(--color-amber-400)}.dark\:\[\&\>svg\]\:text-emerald-400:is(.dark *)>svg{color:var(--color-emerald-400)}.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div{--tw-translate-y:-3px;translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&\>svg\~\*\]\:pl-7>svg~*{padding-left:calc(var(--spacing)*7)}.\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open]>svg{rotate:180deg}}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:hsl(var(--muted-foreground)/.3);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:hsl(var(--muted-foreground)/.5)}@keyframes slideDownAndFade{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}@keyframes slideUpAndFade{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@keyframes contentShow{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:scale(1)}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes pulse-soft{0%,to{opacity:1}50%{opacity:.5}}@keyframes spin{to{transform:rotate(360deg)}}:focus-visible{outline:2px solid hsl(var(--ring));outline-offset:2px;border-radius:calc(var(--radius) - 2px)}@media(prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.menu-item{border-radius:calc(var(--radius) + 2px);cursor:pointer;color:hsl(var(--muted-foreground));align-items:center;gap:.75rem;padding:.5rem .75rem;font-size:.875rem;text-decoration:none;transition:all .2s cubic-bezier(.4,0,.2,1);display:flex}.menu-item:hover:not(.active){background-color:hsl(var(--accent));color:hsl(var(--accent-foreground))}.menu-item.active{background-color:hsl(var(--primary));color:hsl(var(--primary-foreground))}.sandbox-container{gap:1rem;width:100%;max-width:100vw;height:calc(100vh - 42px - 3rem);padding:1rem;display:flex;position:relative;overflow:hidden}.channel-sidebar{flex-direction:column;flex-shrink:0;width:256px;transition:transform .2s cubic-bezier(.4,0,.2,1);display:flex}.chat-area{flex-direction:column;flex:1;gap:.75rem;min-width:0;height:100%;display:flex;overflow:hidden}.rich-text-editor{font-family:inherit;transition:border-color .2s cubic-bezier(.4,0,.2,1)}.rich-text-editor:focus{box-shadow:0 0 0 1px hsl(var(--ring));border-color:hsl(var(--ring))!important}.rich-text-editor:empty:before{content:attr(data-placeholder);color:hsl(var(--muted-foreground));pointer-events:none}.rich-text-editor .editor-face{vertical-align:middle;width:24px;height:24px;margin:0 2px;display:inline-block}.rich-text-editor .editor-image{border-radius:8px;max-width:200px;margin:4px 0;display:block}.rich-text-editor .editor-at{background-color:hsl(var(--accent));color:hsl(var(--accent-foreground));-webkit-user-select:none;user-select:none;cursor:pointer;border-radius:4px;align-items:center;margin:0 2px;padding:2px 6px;font-size:.9em;transition:background-color .2s;display:inline-flex}.rich-text-editor .editor-at:hover{background-color:hsl(var(--muted))}.rich-text-editor .editor-at-symbol{margin-right:2px;font-weight:600}.rich-text-editor .editor-at-name{font-weight:500}.rich-text-editor::-webkit-scrollbar{width:6px}.rich-text-editor::-webkit-scrollbar-thumb{background:hsl(var(--muted-foreground)/.3);border-radius:4px}.rich-text-editor::-webkit-scrollbar-thumb:hover{background:hsl(var(--muted-foreground)/.5)}.mobile-channel-toggle,.channel-overlay{display:none}@media print{*{box-shadow:none!important;transition:none!important;animation:none!important}.no-print{display:none}}@media(max-width:768px){.sandbox-container{flex-direction:column;gap:0;height:calc(100vh - 42px - 3rem);padding:0}.mobile-channel-toggle{background:hsl(var(--primary));color:hsl(var(--primary-foreground));border-radius:var(--radius);cursor:pointer;border:none;justify-content:center;align-items:center;gap:.5rem;margin:.5rem;padding:.75rem 1rem;font-size:.875rem;font-weight:500;display:flex}.channel-sidebar{z-index:1000;background:hsl(var(--background));width:280px;max-width:80vw;position:fixed;top:0;bottom:0;left:0;transform:translate(-100%);box-shadow:4px 0 16px #0000001a}.channel-sidebar.show{transform:translate(0)}.channel-overlay{z-index:999;background-color:#00000080;animation:.2s ease-out fadeIn;display:block;position:fixed;inset:0}.chat-area{flex:1;gap:.5rem;height:auto;padding:0 .5rem .5rem}}@media(min-width:768px)and (max-width:1024px){.sandbox-container{gap:.75rem;padding:.75rem}.channel-sidebar{width:200px}.chat-area{gap:.5rem}}@media(min-width:1400px){.sandbox-container{gap:1.5rem;padding:1.5rem}.channel-sidebar{width:280px}}@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}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@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-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-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@keyframes pulse{50%{opacity:.5}}@keyframes accordion-down{0%{height:0}to{height:var(--radix-accordion-content-height)}}@keyframes accordion-up{0%{height:var(--radix-accordion-content-height)}to{height:0}}
|
|
2
|
+
@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-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking: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-outline-style:solid;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-space-x-reverse: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-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-800:oklch(47.3% .137 46.201);--color-amber-900:oklch(41.4% .112 45.904);--color-amber-950:oklch(27.9% .077 45.635);--color-emerald-50:oklch(97.9% .021 166.113);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-200:oklch(90.5% .093 164.15);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-600:oklch(59.6% .145 163.225);--color-emerald-800:oklch(43.2% .095 166.913);--color-emerald-900:oklch(37.8% .077 168.94);--color-emerald-950:oklch(26.2% .051 172.552);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-gray-500:oklch(55.1% .027 264.364);--color-black:#000;--spacing:.25rem;--container-md:28rem;--container-lg:32rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--leading-relaxed:1.625;--radius-xl:.75rem;--ease-out:cubic-bezier(0,0,.2,1);--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%;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]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}:root{--background:0 0% 100%;--foreground:240 10% 3.9%;--card:0 0% 100%;--card-foreground:240 10% 3.9%;--popover:0 0% 100%;--popover-foreground:240 10% 3.9%;--primary:240 5.9% 10%;--primary-foreground:0 0% 98%;--secondary:240 4.8% 95.9%;--secondary-foreground:240 5.9% 10%;--muted:240 4.8% 95.9%;--muted-foreground:240 3.8% 46.1%;--accent:240 4.8% 95.9%;--accent-foreground:240 5.9% 10%;--destructive:0 84.2% 60.2%;--destructive-foreground:0 0% 98%;--border:240 5.9% 90%;--input:240 5.9% 90%;--ring:240 5.9% 10%;--radius:.5rem;--sidebar:0 0% 98%;--sidebar-foreground:240 5.3% 26.1%;--sidebar-primary:240 5.9% 10%;--sidebar-primary-foreground:0 0% 98%;--sidebar-accent:240 4.8% 95.9%;--sidebar-accent-foreground:240 5.9% 10%;--sidebar-border:220 13% 91%;--sidebar-ring:240 5.9% 10%}.dark{--background:240 10% 3.9%;--foreground:0 0% 98%;--card:240 10% 3.9%;--card-foreground:0 0% 98%;--popover:240 10% 3.9%;--popover-foreground:0 0% 98%;--primary:0 0% 98%;--primary-foreground:240 5.9% 10%;--secondary:240 3.7% 15.9%;--secondary-foreground:0 0% 98%;--muted:240 3.7% 15.9%;--muted-foreground:240 5% 64.9%;--accent:240 3.7% 15.9%;--accent-foreground:0 0% 98%;--destructive:0 62.8% 30.6%;--destructive-foreground:0 0% 98%;--border:240 3.7% 15.9%;--input:240 3.7% 15.9%;--ring:240 4.9% 83.9%;--sidebar:240 5.9% 10%;--sidebar-foreground:240 4.8% 95.9%;--sidebar-primary:0 0% 98%;--sidebar-primary-foreground:240 5.9% 10%;--sidebar-accent:240 3.7% 15.9%;--sidebar-accent-foreground:240 4.8% 95.9%;--sidebar-border:240 3.7% 15.9%;--sidebar-ring:240 4.9% 83.9%}*{border-color:hsl(var(--border));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}html{scroll-behavior:smooth}body{background-color:hsl(var(--background));color:hsl(var(--foreground));font-feature-settings:"cv02","cv03","cv04","cv11"}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing)*0)}.top-1\/2{top:50%}.top-4{top:calc(var(--spacing)*4)}.top-\[50\%\]{top:50%}.right-2{right:calc(var(--spacing)*2)}.right-4{right:calc(var(--spacing)*4)}.left-2{left:calc(var(--spacing)*2)}.left-3{left:calc(var(--spacing)*3)}.left-\[50\%\]{left:50%}.z-50{z-index:50}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.mx-4{margin-inline:calc(var(--spacing)*4)}.mx-6{margin-inline:calc(var(--spacing)*6)}.mx-auto{margin-inline:auto}.my-1{margin-block:calc(var(--spacing)*1)}.my-2{margin-block:calc(var(--spacing)*2)}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-6{margin-top:calc(var(--spacing)*6)}.mr-1{margin-right:calc(var(--spacing)*1)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.aspect-square{aspect-ratio:1}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-14{height:calc(var(--spacing)*14)}.h-16{height:calc(var(--spacing)*16)}.h-20{height:calc(var(--spacing)*20)}.h-32{height:calc(var(--spacing)*32)}.h-40{height:calc(var(--spacing)*40)}.h-48{height:calc(var(--spacing)*48)}.h-96{height:calc(var(--spacing)*96)}.h-\[1px\]{height:1px}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-60{max-height:calc(var(--spacing)*60)}.max-h-96{max-height:calc(var(--spacing)*96)}.max-h-\[600px\]{max-height:600px}.min-h-\[60px\]{min-height:60px}.min-h-screen{min-height:100vh}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-10{width:calc(var(--spacing)*10)}.w-12{width:calc(var(--spacing)*12)}.w-16{width:calc(var(--spacing)*16)}.w-20{width:calc(var(--spacing)*20)}.w-24{width:calc(var(--spacing)*24)}.w-32{width:calc(var(--spacing)*32)}.w-48{width:calc(var(--spacing)*48)}.w-64{width:calc(var(--spacing)*64)}.w-\[1px\]{width:1px}.w-full{width:100%}.max-w-7xl{max-width:var(--container-7xl)}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.min-w-9{min-width:calc(var(--spacing)*9)}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.flex-1{flex:1}.shrink-0{flex-shrink:0}.translate-x-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:1s linear infinite spin}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.appearance-none{appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-0\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}: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-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*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-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*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-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-l-\[3px\]{border-left-style:var(--tw-border-style);border-left-width:3px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-amber-200{border-color:var(--color-amber-200)}.border-destructive\/50{border-color:hsl(var(--destructive))}@supports (color:color-mix(in lab,red,red)){.border-destructive\/50{border-color:color-mix(in oklab,hsl(var(--destructive))50%,transparent)}}.border-emerald-200{border-color:var(--color-emerald-200)}.border-input{border-color:hsl(var(--input))}.border-muted-foreground{border-color:hsl(var(--muted-foreground))}.border-primary{border-color:hsl(var(--primary))}.border-transparent{border-color:#0000}.border-t-foreground{border-top-color:hsl(var(--foreground))}.border-t-transparent{border-top-color:#0000}.border-l-amber-500{border-left-color:var(--color-amber-500)}.border-l-blue-500{border-left-color:var(--color-blue-500)}.border-l-gray-500{border-left-color:var(--color-gray-500)}.border-l-red-500{border-left-color:var(--color-red-500)}.border-l-transparent{border-left-color:#0000}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-background,.bg-background\/95{background-color:hsl(var(--background))}@supports (color:color-mix(in lab,red,red)){.bg-background\/95{background-color:color-mix(in oklab,hsl(var(--background))95%,transparent)}}.bg-black\/80{background-color:#000c}@supports (color:color-mix(in lab,red,red)){.bg-black\/80{background-color:color-mix(in oklab,var(--color-black)80%,transparent)}}.bg-border{background-color:hsl(var(--border))}.bg-card{background-color:hsl(var(--card))}.bg-destructive{background-color:hsl(var(--destructive))}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-emerald-100{background-color:var(--color-emerald-100)}.bg-foreground{background-color:hsl(var(--foreground))}.bg-muted,.bg-muted\/30{background-color:hsl(var(--muted))}@supports (color:color-mix(in lab,red,red)){.bg-muted\/30{background-color:color-mix(in oklab,hsl(var(--muted))30%,transparent)}}.bg-muted\/50{background-color:hsl(var(--muted))}@supports (color:color-mix(in lab,red,red)){.bg-muted\/50{background-color:color-mix(in oklab,hsl(var(--muted))50%,transparent)}}.bg-popover{background-color:hsl(var(--popover))}.bg-primary,.bg-primary\/10{background-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.bg-primary\/10{background-color:color-mix(in oklab,hsl(var(--primary))10%,transparent)}}.bg-secondary,.bg-secondary\/50{background-color:hsl(var(--secondary))}@supports (color:color-mix(in lab,red,red)){.bg-secondary\/50{background-color:color-mix(in oklab,hsl(var(--secondary))50%,transparent)}}.bg-sidebar{background-color:hsl(var(--sidebar))}.bg-transparent{background-color:#0000}.p-1{padding:calc(var(--spacing)*1)}.p-1\.5{padding:calc(var(--spacing)*1.5)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-5{padding:calc(var(--spacing)*5)}.p-6{padding:calc(var(--spacing)*6)}.p-\[1px\]{padding:1px}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\.5{padding-inline:calc(var(--spacing)*1.5)}.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-8{padding-inline:calc(var(--spacing)*8)}.py-0{padding-block:calc(var(--spacing)*0)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-12{padding-block:calc(var(--spacing)*12)}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-3{padding-top:calc(var(--spacing)*3)}.pr-1{padding-right:calc(var(--spacing)*1)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-8{padding-right:calc(var(--spacing)*8)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-8{padding-left:calc(var(--spacing)*8)}.pl-9{padding-left:calc(var(--spacing)*9)}.text-center{text-align:center}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--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-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--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-none{--tw-leading:1;line-height:1}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.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-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.break-words{overflow-wrap:break-word}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-amber-800{color:var(--color-amber-800)}.text-background{color:hsl(var(--background))}.text-blue-600{color:var(--color-blue-600)}.text-card-foreground{color:hsl(var(--card-foreground))}.text-current{color:currentColor}.text-destructive{color:hsl(var(--destructive))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-emerald-500{color:var(--color-emerald-500)}.text-emerald-600{color:var(--color-emerald-600)}.text-emerald-800{color:var(--color-emerald-800)}.text-foreground{color:hsl(var(--foreground))}.text-muted-foreground,.text-muted-foreground\/30{color:hsl(var(--muted-foreground))}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/30{color:color-mix(in oklab,hsl(var(--muted-foreground))30%,transparent)}}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-red-600{color:var(--color-red-600)}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.underline-offset-4{text-underline-offset:4px}.accent-foreground{accent-color:hsl(var(--foreground))}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.shadow{--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)}.shadow-lg{--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)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px 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)}.shadow-sm{--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)}.ring{--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-0{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + 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-offset-background{--tw-ring-offset-color:hsl(var(--background))}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.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}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}@media(hover:hover){.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:text-foreground::file-selector-button{color:hsl(var(--foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}@media(hover:hover){.hover\:-translate-y-0\.5:hover{--tw-translate-y:calc(var(--spacing)*-.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive))}@supports (color:color-mix(in lab,red,red)){.hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab,hsl(var(--destructive))90%,transparent)}}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,hsl(var(--primary))90%,transparent)}}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary))}@supports (color:color-mix(in lab,red,red)){.hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab,hsl(var(--secondary))80%,transparent)}}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:no-underline:hover{text-decoration-line:none}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px 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)}}.focus\:bg-accent:focus{background-color:hsl(var(--accent))}.focus\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.focus\:ring-1:focus{--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)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + 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)}.focus\:ring-ring:focus{--tw-ring-color:hsl(var(--ring))}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:ring-1:focus-visible{--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)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + 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)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color:hsl(var(--ring))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:ring-offset-background:focus-visible{--tw-ring-offset-color:hsl(var(--background))}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:hsl(var(--background))}.data-\[state\=active\]\:text-foreground[data-state=active]{color:hsl(var(--foreground))}.data-\[state\=active\]\:shadow[data-state=active]{--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)}.data-\[state\=checked\]\:translate-x-4[data-state=checked]{--tw-translate-x:calc(var(--spacing)*4);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:hsl(var(--primary))}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:hsl(var(--primary-foreground))}.data-\[state\=closed\]\:animate-accordion-up[data-state=closed]{animation:.2s ease-out accordion-up}.data-\[state\=open\]\:animate-accordion-down[data-state=open]{animation:.2s ease-out accordion-down}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:hsl(var(--accent))}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:hsl(var(--muted-foreground))}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:hsl(var(--input))}@supports ((-webkit-backdrop-filter:var(--tw)) or (backdrop-filter:var(--tw))){.supports-\[backdrop-filter\]\:bg-background\/60{background-color:hsl(var(--background))}@supports (color:color-mix(in lab,red,red)){.supports-\[backdrop-filter\]\:bg-background\/60{background-color:color-mix(in oklab,hsl(var(--background))60%,transparent)}}}@media(min-width:40rem){.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}:where(.sm\:space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}.sm\:rounded-lg{border-radius:var(--radius)}.sm\:text-left{text-align:left}}@media(min-width:48rem){.md\:flex{display:flex}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}}@media(min-width:64rem){.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.dark\:border-amber-800:is(.dark *){border-color:var(--color-amber-800)}.dark\:border-destructive:is(.dark *){border-color:hsl(var(--destructive))}.dark\:border-emerald-800:is(.dark *){border-color:var(--color-emerald-800)}.dark\:bg-amber-900\/30:is(.dark *){background-color:#7b33064d}@supports (color:color-mix(in lab,red,red)){.dark\:bg-amber-900\/30:is(.dark *){background-color:color-mix(in oklab,var(--color-amber-900)30%,transparent)}}.dark\:bg-amber-950\/20:is(.dark *){background-color:#46190133}@supports (color:color-mix(in lab,red,red)){.dark\:bg-amber-950\/20:is(.dark *){background-color:color-mix(in oklab,var(--color-amber-950)20%,transparent)}}.dark\:bg-amber-950\/50:is(.dark *){background-color:#46190180}@supports (color:color-mix(in lab,red,red)){.dark\:bg-amber-950\/50:is(.dark *){background-color:color-mix(in oklab,var(--color-amber-950)50%,transparent)}}.dark\:bg-emerald-900\/30:is(.dark *){background-color:#004e3b4d}@supports (color:color-mix(in lab,red,red)){.dark\:bg-emerald-900\/30:is(.dark *){background-color:color-mix(in oklab,var(--color-emerald-900)30%,transparent)}}.dark\:bg-emerald-950\/50:is(.dark *){background-color:#002c2280}@supports (color:color-mix(in lab,red,red)){.dark\:bg-emerald-950\/50:is(.dark *){background-color:color-mix(in oklab,var(--color-emerald-950)50%,transparent)}}.dark\:text-amber-300:is(.dark *){color:var(--color-amber-300)}.dark\:text-amber-400:is(.dark *){color:var(--color-amber-400)}.dark\:text-blue-400:is(.dark *){color:var(--color-blue-400)}.dark\:text-emerald-400:is(.dark *){color:var(--color-emerald-400)}.dark\:text-red-400:is(.dark *){color:var(--color-red-400)}.\[\&_p\]\:leading-relaxed p{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&\>span\]\:line-clamp-1>span{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\]\:top-4>svg{top:calc(var(--spacing)*4)}.\[\&\>svg\]\:left-4>svg{left:calc(var(--spacing)*4)}.\[\&\>svg\]\:size-4>svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:text-amber-600>svg{color:var(--color-amber-600)}.\[\&\>svg\]\:text-destructive>svg{color:hsl(var(--destructive))}.\[\&\>svg\]\:text-emerald-600>svg{color:var(--color-emerald-600)}.\[\&\>svg\]\:text-foreground>svg{color:hsl(var(--foreground))}.dark\:\[\&\>svg\]\:text-amber-400:is(.dark *)>svg{color:var(--color-amber-400)}.dark\:\[\&\>svg\]\:text-emerald-400:is(.dark *)>svg{color:var(--color-emerald-400)}.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div{--tw-translate-y:-3px;translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&\>svg\~\*\]\:pl-7>svg~*{padding-left:calc(var(--spacing)*7)}.\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open]>svg{rotate:180deg}}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:hsl(var(--muted-foreground)/.3);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:hsl(var(--muted-foreground)/.5)}@keyframes slideDownAndFade{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}@keyframes slideUpAndFade{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@keyframes contentShow{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:scale(1)}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes pulse-soft{0%,to{opacity:1}50%{opacity:.5}}@keyframes spin{to{transform:rotate(360deg)}}:focus-visible{outline:2px solid hsl(var(--ring));outline-offset:2px;border-radius:calc(var(--radius) - 2px)}@media(prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.menu-item{border-radius:calc(var(--radius) + 2px);cursor:pointer;color:hsl(var(--muted-foreground));align-items:center;gap:.75rem;padding:.5rem .75rem;font-size:.875rem;text-decoration:none;transition:all .2s cubic-bezier(.4,0,.2,1);display:flex}.menu-item:hover:not(.active){background-color:hsl(var(--accent));color:hsl(var(--accent-foreground))}.menu-item.active{background-color:hsl(var(--primary));color:hsl(var(--primary-foreground))}.sandbox-container{gap:1rem;width:100%;max-width:100vw;height:calc(100vh - 42px - 3rem);padding:1rem;display:flex;position:relative;overflow:hidden}.channel-sidebar{flex-direction:column;flex-shrink:0;width:256px;transition:transform .2s cubic-bezier(.4,0,.2,1);display:flex}.chat-area{flex-direction:column;flex:1;gap:.75rem;min-width:0;height:100%;display:flex;overflow:hidden}.rich-text-editor{font-family:inherit;transition:border-color .2s cubic-bezier(.4,0,.2,1)}.rich-text-editor:focus{box-shadow:0 0 0 1px hsl(var(--ring));border-color:hsl(var(--ring))!important}.rich-text-editor:empty:before{content:attr(data-placeholder);color:hsl(var(--muted-foreground));pointer-events:none}.rich-text-editor .editor-face{vertical-align:middle;width:24px;height:24px;margin:0 2px;display:inline-block}.rich-text-editor .editor-image{border-radius:8px;max-width:200px;margin:4px 0;display:block}.rich-text-editor .editor-at{background-color:hsl(var(--accent));color:hsl(var(--accent-foreground));-webkit-user-select:none;user-select:none;cursor:pointer;border-radius:4px;align-items:center;margin:0 2px;padding:2px 6px;font-size:.9em;transition:background-color .2s;display:inline-flex}.rich-text-editor .editor-at:hover{background-color:hsl(var(--muted))}.rich-text-editor .editor-at-symbol{margin-right:2px;font-weight:600}.rich-text-editor .editor-at-name{font-weight:500}.rich-text-editor::-webkit-scrollbar{width:6px}.rich-text-editor::-webkit-scrollbar-thumb{background:hsl(var(--muted-foreground)/.3);border-radius:4px}.rich-text-editor::-webkit-scrollbar-thumb:hover{background:hsl(var(--muted-foreground)/.5)}.mobile-channel-toggle,.channel-overlay{display:none}@media print{*{box-shadow:none!important;transition:none!important;animation:none!important}.no-print{display:none}}@media(max-width:768px){.sandbox-container{flex-direction:column;gap:0;height:calc(100vh - 42px - 3rem);padding:0}.mobile-channel-toggle{background:hsl(var(--primary));color:hsl(var(--primary-foreground));border-radius:var(--radius);cursor:pointer;border:none;justify-content:center;align-items:center;gap:.5rem;margin:.5rem;padding:.75rem 1rem;font-size:.875rem;font-weight:500;display:flex}.channel-sidebar{z-index:1000;background:hsl(var(--background));width:280px;max-width:80vw;position:fixed;top:0;bottom:0;left:0;transform:translate(-100%);box-shadow:4px 0 16px #0000001a}.channel-sidebar.show{transform:translate(0)}.channel-overlay{z-index:999;background-color:#00000080;animation:.2s ease-out fadeIn;display:block;position:fixed;inset:0}.chat-area{flex:1;gap:.5rem;height:auto;padding:0 .5rem .5rem}}@media(min-width:768px)and (max-width:1024px){.sandbox-container{gap:.75rem;padding:.75rem}.channel-sidebar{width:200px}.chat-area{gap:.5rem}}@media(min-width:1400px){.sandbox-container{gap:1.5rem;padding:1.5rem}.channel-sidebar{width:280px}}@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}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@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-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-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@keyframes pulse{50%{opacity:.5}}@keyframes accordion-down{0%{height:0}to{height:var(--radix-accordion-content-height)}}@keyframes accordion-up{0%{height:var(--radix-accordion-content-height)}to{height:0}}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zhin.js/console",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.32",
|
|
4
4
|
"description": "Web console service for Zhin.js with real-time monitoring",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./lib/index.js",
|
|
@@ -67,14 +67,14 @@
|
|
|
67
67
|
"tailwindcss": "latest",
|
|
68
68
|
"tsup": "^8.5.1",
|
|
69
69
|
"vite": "^7.0.6",
|
|
70
|
-
"zhin.js": "1.0.
|
|
70
|
+
"zhin.js": "1.0.36"
|
|
71
71
|
},
|
|
72
72
|
"peerDependencies": {
|
|
73
73
|
"@types/ws": "^8.18.1",
|
|
74
74
|
"@zhin.js/client": "^1.0.10",
|
|
75
|
-
"@zhin.js/core": "^1.0.
|
|
76
|
-
"@zhin.js/http": "^1.0.
|
|
77
|
-
"zhin.js": "1.0.
|
|
75
|
+
"@zhin.js/core": "^1.0.36",
|
|
76
|
+
"@zhin.js/http": "^1.0.29",
|
|
77
|
+
"zhin.js": "1.0.36"
|
|
78
78
|
},
|
|
79
79
|
"files": [
|
|
80
80
|
"lib",
|