diff --git a/app/src/App.tsx b/app/src/App.tsx index d016cc1..27d448a 100644 --- a/app/src/App.tsx +++ b/app/src/App.tsx @@ -9,6 +9,7 @@ const DashboardPage = lazy(() => import('@/pages/dashboard/DashboardPage').then( const GradesPage = lazy(() => import('@/pages/grades/GradesPage').then(m => ({ default: m.GradesPage }))); const TypesPage = lazy(() => import('@/pages/types/TypesPage').then(m => ({ default: m.TypesPage }))); const TaxonomyPage = lazy(() => import('@/pages/taxonomy/TaxonomyPage').then(m => ({ default: m.TaxonomyPage }))); +const AdminPage = lazy(() => import('@/pages/admin/AdminPage').then(m => ({ default: m.AdminPage }))); function PageLoading() { return
加载中…
; @@ -25,6 +26,7 @@ export default function App() { }>} /> }>} /> }>} /> + }>} /> } /> diff --git a/app/src/components/auth/LoginDialog.tsx b/app/src/components/auth/LoginDialog.tsx new file mode 100644 index 0000000..6e9ced1 --- /dev/null +++ b/app/src/components/auth/LoginDialog.tsx @@ -0,0 +1,69 @@ +import { useState } from 'react'; +import { useQueryClient } from '@tanstack/react-query'; +import { serverLogin, serverRegister } from '@/lib/api'; +import { Button, Dialog, Field, Input } from '@/components/ui'; + +export function LoginDialog({ open, onClose, defaultUrl }: { open: boolean; onClose: () => void; defaultUrl: string }) { + const qc = useQueryClient(); + const [mode, setMode] = useState<'login' | 'register'>('login'); + const [serverUrl, setServerUrl] = useState(defaultUrl); + const [username, setUsername] = useState(''); + const [password, setPassword] = useState(''); + const [invite, setInvite] = useState(''); + const [error, setError] = useState(''); + const [busy, setBusy] = useState(false); + + const submit = async () => { + if (!username.trim() || !password) { setError('请填写账号与密码'); return; } + let base = serverUrl.trim(); + if (base && !base.startsWith('http')) base = 'https://' + base; + setBusy(true); setError(''); + try { + if (mode === 'login') { + await serverLogin(username.trim(), password, base); + } else { + if (!invite.trim()) throw new Error('请填写邀请码'); + await serverRegister(username.trim(), password, invite.trim(), base); + } + void qc.invalidateQueries(); + onClose(); + window.location.reload(); // 触发侧边栏与同步引擎重启 + } catch (e) { + setError((e as Error).message); + } finally { setBusy(false); } + }; + + return ( + + + + + } + > +
+ + setServerUrl(e.target.value)} placeholder="https://footpr.linyux.cn" /> + + + setUsername(e.target.value)} placeholder="3-32 位字母数字-_" /> + + + setPassword(e.target.value)} placeholder="至少 8 位" /> + + {mode === 'register' && ( + + setInvite(e.target.value)} placeholder="邀请码" /> + + )} + {error &&
{error}
} +
+ +
+
+
+ ); +} diff --git a/app/src/components/layout/AppShell.tsx b/app/src/components/layout/AppShell.tsx index b3e0a67..bd3e411 100644 --- a/app/src/components/layout/AppShell.tsx +++ b/app/src/components/layout/AppShell.tsx @@ -4,10 +4,11 @@ import { Sidebar } from './Sidebar'; import { Header } from './Header'; import { ToastProvider } from '@/components/ui'; import { LoginPage } from '@/components/auth/LoginPage'; -import { isLocalMode } from '@/lib/api'; +import { getToken } from '@/lib/api'; +import { isTauriRef } from '@/lib/api'; export function AppShell() { - const [authed, setAuthed] = useState(() => isLocalMode()); + const [authed, setAuthed] = useState(() => isTauriRef() || !!getToken()); const [navOpen, setNavOpen] = useState(false); useEffect(() => { diff --git a/app/src/components/layout/Sidebar.tsx b/app/src/components/layout/Sidebar.tsx index c6433ef..6747977 100644 --- a/app/src/components/layout/Sidebar.tsx +++ b/app/src/components/layout/Sidebar.tsx @@ -1,7 +1,9 @@ +import { useState } from 'react'; import { NavLink } from 'react-router-dom'; import { useQuery } from '@tanstack/react-query'; -import { CalendarDays, Rows3, ChartColumn, GraduationCap, Shapes, SlidersHorizontal, ChevronsLeft } from 'lucide-react'; -import { appInfo, syncStatus } from '@/lib/api'; +import { CalendarDays, Rows3, ChartColumn, GraduationCap, Shapes, SlidersHorizontal, LogIn, ShieldCheck } from 'lucide-react'; +import { syncStatus, serverMe, clearToken, isTauriRef, getToken } from '@/lib/api'; +import { LoginDialog } from '@/components/auth/LoginDialog'; import { cn } from '@/lib/utils'; const NAV = [ @@ -17,6 +19,7 @@ const NAV = [ { section: '配置', items: [ + { to: '/admin', label: '管理', icon: ShieldCheck }, { to: '/types', label: '记录类型', icon: Shapes }, { to: '/taxonomy', label: '字典与维度', icon: SlidersHorizontal } ] @@ -33,9 +36,21 @@ function LogoMark() { ); } +function baseUrl() { + return isTauriRef() ? (localStorage.getItem('fp-server-url') || '') : ''; +} + export function Sidebar({ open, onClose }: { open: boolean; onClose: () => void }) { - const info = useQuery({ queryKey: ['app-info'], queryFn: appInfo, staleTime: Infinity }); + const isWeb = !isTauriRef(); const sync = useQuery({ queryKey: ['sync-status'], queryFn: syncStatus, refetchInterval: 15000 }); + const meQ = useQuery({ + queryKey: ['me'], + queryFn: () => serverMe(baseUrl()), + enabled: !!getToken(), + retry: 0 + }); + const me = meQ.data ?? null; + const [loginOpen, setLoginOpen] = useState(false); return ( ); } + +function ChevronsLeftSvg() { + return +} diff --git a/app/src/lib/api.ts b/app/src/lib/api.ts index ad47a44..d705876 100644 --- a/app/src/lib/api.ts +++ b/app/src/lib/api.ts @@ -5,6 +5,7 @@ import type { } from './types'; const isTauri = typeof window !== 'undefined' && '__TAURI_INTERNALS__' in window; +export function isTauriRef() { return isTauri; } const TOKEN_KEY = 'fp-token'; export function getToken() { return localStorage.getItem(TOKEN_KEY); } @@ -14,10 +15,10 @@ export const isLocalMode = () => isTauri || !getToken(); export interface ServerSession { token: string; user_id: string; device_id: string; device_name: string; } -export async function serverLogin(username: string, password: string): Promise { - const res = await fetch('/auth/login', { +export async function serverLogin(username: string, password: string, baseUrl = ''): Promise { + const res = await fetch(baseUrl + '/auth/login', { method: 'POST', headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ username, password, device_name: 'Web 浏览器' }) + body: JSON.stringify({ username, password, device_name: isTauri ? '桌面应用' : 'Web 浏览器' }) }); const json = await res.json(); if (!json.ok) throw new Error(json.error || '登录失败'); @@ -25,10 +26,10 @@ export async function serverLogin(username: string, password: string): Promise { - const res = await fetch('/auth/register', { +export async function serverRegister(username: string, password: string, invite_code: string, baseUrl = ''): Promise { + const res = await fetch(baseUrl + '/auth/register', { method: 'POST', headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ username, password, invite_code, device_name: 'Web 浏览器' }) + body: JSON.stringify({ username, password, invite_code, device_name: isTauri ? '桌面应用' : 'Web 浏览器' }) }); const json = await res.json(); if (!json.ok) throw new Error(json.error || '注册失败'); @@ -36,9 +37,9 @@ export async function serverRegister(username: string, password: string, invite_ return json.data; } -export interface MeInfo { user_id: string; username: string; device_id: string; } -export async function serverMe(): Promise { - const res = await fetch('/auth/me', { headers: { Authorization: 'Bearer ' + getToken() } }); +export interface MeInfo { user_id: string; username: string; is_admin?: boolean; device_id: string; } +export async function serverMe(baseUrl = ''): Promise { + const res = await fetch(baseUrl + '/auth/me', { headers: { Authorization: 'Bearer ' + getToken() } }); const json = await res.json(); if (!json.ok) throw new Error(json.error || '会话失效'); return json.data; @@ -125,3 +126,27 @@ export const viewList = () => call<{ items: SavedView[] }>('view_list'); export const viewUpsert = (p: { id?: number; name: string; filter: Record; sort?: Record; is_default?: boolean }) => call<{ item: SavedView }>('view_upsert', p); export const viewDelete = (id: number) => call<{ ok: true }>('view_delete', { id }); + +// ---- 管理端(is_admin) ---- +export async function adminListInvites(baseUrl = '') { + const res = await fetch(baseUrl + '/admin/invites', { headers: { Authorization: 'Bearer ' + getToken() } }); + return res.json(); +} +export async function adminCreateInvites(count: number, baseUrl = '') { + const res = await fetch(baseUrl + '/admin/invites/generate', { + method: 'POST', headers: { 'Content-Type': 'application/json', Authorization: 'Bearer ' + getToken() }, + body: JSON.stringify({ count }) + }); + return res.json(); +} +export async function adminRevokeInvite(id: number, baseUrl = '') { + const res = await fetch(baseUrl + '/admin/invites/revoke', { + method: 'POST', headers: { 'Content-Type': 'application/json', Authorization: 'Bearer ' + getToken() }, + body: JSON.stringify({ id }) + }); + return res.json(); +} +export async function adminListUsers(baseUrl = '') { + const res = await fetch(baseUrl + '/admin/users', { headers: { Authorization: 'Bearer ' + getToken() } }); + return res.json(); +} diff --git a/app/src/pages/admin/AdminPage.tsx b/app/src/pages/admin/AdminPage.tsx new file mode 100644 index 0000000..3bc76bd --- /dev/null +++ b/app/src/pages/admin/AdminPage.tsx @@ -0,0 +1,108 @@ +import { useState } from 'react'; +import { useQuery, useQueryClient, useMutation } from '@tanstack/react-query'; +import { Plus, Trash2, Users2, TicketCheck } from 'lucide-react'; +import { adminCreateInvites, adminListInvites, adminListUsers, adminRevokeInvite, getToken, isTauriRef } from '@/lib/api'; +import { Badge, Button, Card, CardBody, CardHeader, Empty } from '@/components/ui'; +import { fmtDateTime, fmtSize } from '@/lib/format'; + +function baseUrl() { + if (!isTauriRef()) return ''; + return localStorage.getItem('fp-server-url') || ''; +} + +export function AdminPage() { + const qc = useQueryClient(); + const [busy, setBusy] = useState(false); + const meQ = useQuery({ queryKey: ['me'], queryFn: () => serverMeSafe(), enabled: !!getToken() }); + + const usersQ = useQuery({ queryKey: ['admin-users'], queryFn: () => adminListUsers(baseUrl()), enabled: !!getToken() }); + const invitesQ = useQuery({ queryKey: ['admin-invites'], queryFn: () => adminListInvites(baseUrl()), enabled: !!getToken() }); + + const genMut = useMutation({ + mutationFn: (count: number) => adminCreateInvites(count, baseUrl()), + onSuccess: () => { void qc.invalidateQueries({ queryKey: ['admin-invites'] }); setBusy(false); }, + onError: () => setBusy(false) + }); + const revokeMut = useMutation({ + mutationFn: (id: number) => adminRevokeInvite(id, baseUrl()), + onSuccess: () => void qc.invalidateQueries({ queryKey: ['admin-invites'] }) + }); + + if (meQ.data && !meQ.data.is_admin) { + return ; + } + + const invites = invitesQ.data?.data?.invites ?? []; + const users = usersQ.data?.data?.users ?? []; + const totalInvites = invitesQ.data?.data?.total ?? 0; + + return ( +
+
+

管理

+ +
+ +
+ + { setBusy(true); genMut.mutate(5); }}> + 批量生成 5 个 + + } /> + + {invites.length ? ( +
+ {invites.map((i: any) => ( +
+ {i.code} + {i.valid ? 可用 : 已使用} + {i.used_by_name && 被 {i.used_by_name} 使用于 {fmtDateTime(i.used_at)}} + {!i.used_by && ( + + + {!i.valid && } + + )} +
+ ))} +
+ ) : ( + } title="暂无邀请码" description="生成后发给需要注册的用户。" /> + )} +
+
+ + + + + {users.length ? ( +
+ {users.map((u: any) => ( +
+ {u.username} + {u.is_admin && 管理员} + {u.devices} 设备 · {u.records} 记录 · {fmtSize(u.attachment_bytes)} +
+ ))} +
+ ) : ( + } title="暂无用户" /> + )} +
+
+
+ + {busy &&
生成中…
} +
+ ); +} + +async function serverMeSafe() { + const { serverMe } = await import('@/lib/api'); + try { return await serverMe(baseUrl()); } catch { return null; } +} diff --git a/sync-server/www/assets/AdminPage-CBfyyvpO.js b/sync-server/www/assets/AdminPage-CBfyyvpO.js new file mode 100644 index 0000000..7dcd075 --- /dev/null +++ b/sync-server/www/assets/AdminPage-CBfyyvpO.js @@ -0,0 +1,12 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-CAYqMwJw.js","assets/index-BthM1Vey.css"])))=>i.map(i=>d[i]); +import{c as M,u as E,r as I,e as d,Y as c,f as N,j as e,E as l,B as r,P as R,A as o,i as S,T as B,Z as F,_ as K,$ as P,a0 as L,a1 as U,a2 as A,a3 as D}from"./index-CAYqMwJw.js";import{C,a as q,b as z}from"./card-DipFCG5F.js";/** + * @license lucide-react v0.475.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const H=[["path",{d:"M2 9a3 3 0 0 1 0 6v2a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-2a3 3 0 0 1 0-6V7a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2Z",key:"qn84l0"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]],V=M("TicketCheck",H);/** + * @license lucide-react v0.475.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const W=[["path",{d:"M18 21a8 8 0 0 0-16 0",key:"3ypg7q"}],["circle",{cx:"10",cy:"8",r:"5",key:"o932ke"}],["path",{d:"M22 20c0-3.37-2-6.5-4-8a5 5 0 0 0-.45-8.3",key:"10s06x"}]],Z=M("UsersRound",W);function i(){return L()&&localStorage.getItem("fp-server-url")||""}function G(){var h,p,j,f,k,g,_,b;const a=E(),[n,t]=I.useState(!1),m=d({queryKey:["me"],queryFn:()=>$(),enabled:!!c()}),x=d({queryKey:["admin-users"],queryFn:()=>U(i()),enabled:!!c()}),u=d({queryKey:["admin-invites"],queryFn:()=>A(i()),enabled:!!c()}),T=N({mutationFn:s=>K(s,i()),onSuccess:()=>{a.invalidateQueries({queryKey:["admin-invites"]}),t(!1)},onError:()=>t(!1)}),w=N({mutationFn:s=>P(s,i()),onSuccess:()=>void a.invalidateQueries({queryKey:["admin-invites"]})});if(m.data&&!m.data.is_admin)return e.jsx(l,{title:"需要管理员账号",description:"当前登录账号不是管理员。"});const v=((p=(h=u.data)==null?void 0:h.data)==null?void 0:p.invites)??[],y=((f=(j=x.data)==null?void 0:j.data)==null?void 0:f.users)??[],Q=((g=(k=u.data)==null?void 0:k.data)==null?void 0:g.total)??0;return e.jsxs("div",{className:"mx-auto max-w-[1080px] px-6 py-5",children:[e.jsxs("div",{className:"mb-4 flex items-center justify-between",children:[e.jsx("h2",{className:"text-[15px] font-semibold text-ink-1",children:"管理"}),e.jsx(r,{variant:"secondary",onClick:()=>{a.invalidateQueries()},children:"刷新"})]}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-4",children:[e.jsxs(C,{children:[e.jsx(q,{title:"邀请码("+Q+")",extra:e.jsxs(r,{size:"sm",variant:"primary",disabled:n,onClick:()=>{t(!0),T.mutate(5)},children:[e.jsx(R,{size:13})," 批量生成 5 个"]})}),e.jsx(z,{className:"p-0",children:v.length?e.jsx("div",{className:"divide-y divide-line max-h-[420px] overflow-y-auto",children:v.map(s=>e.jsxs("div",{className:"flex items-center gap-2 px-4 py-2 text-[12.5px]",children:[e.jsx("code",{className:"num rounded-sm px-1.5 py-0.5 "+(s.valid?"bg-success-subtle text-success":"bg-surface-3 text-ink-3"),children:s.code}),s.valid?e.jsx(o,{color:"var(--success)",children:"可用"}):e.jsx(o,{color:"var(--text-3)",children:"已使用"}),s.used_by_name&&e.jsxs("span",{className:"text-ink-3 truncate",children:["被 ",s.used_by_name," 使用于 ",S(s.used_at)]}),!s.used_by&&e.jsxs("span",{className:"ml-auto flex gap-1",children:[e.jsx(r,{size:"sm",variant:"secondary",onClick:()=>{navigator.clipboard.writeText(s.code)},children:"复制"}),!s.valid&&e.jsx(r,{size:"icon-sm",variant:"ghost","aria-label":"作废",className:"text-ink-3",onClick:()=>w.mutate(s.id),children:e.jsx(B,{size:13})})]})]},s.id))}):e.jsx(l,{icon:e.jsx(V,{size:32,strokeWidth:1.5}),title:"暂无邀请码",description:"生成后发给需要注册的用户。"})})]}),e.jsxs(C,{children:[e.jsx(q,{title:"用户("+(((b=(_=x.data)==null?void 0:_.data)==null?void 0:b.total)??0)+")"}),e.jsx(z,{className:"p-0",children:y.length?e.jsx("div",{className:"divide-y divide-line max-h-[420px] overflow-y-auto",children:y.map(s=>e.jsxs("div",{className:"flex items-center gap-2 px-4 py-2 text-[12.5px]",children:[e.jsx("span",{className:"font-medium text-ink-1",children:s.username}),s.is_admin&&e.jsx(o,{color:"var(--brand-text)",children:"管理员"}),e.jsxs("span",{className:"num ml-auto text-ink-3",children:[s.devices," 设备 · ",s.records," 记录 · ",F(s.attachment_bytes)]})]},s.id))}):e.jsx(l,{icon:e.jsx(Z,{size:32,strokeWidth:1.5}),title:"暂无用户"})})]})]}),n&&e.jsx("div",{className:"mt-3 text-[12px] text-ink-3",children:"生成中…"})]})}async function $(){const{serverMe:a}=await D(async()=>{const{serverMe:n}=await import("./index-CAYqMwJw.js").then(t=>t.a4);return{serverMe:n}},__vite__mapDeps([0,1]));try{return await a(i())}catch{return null}}export{G as AdminPage}; diff --git a/sync-server/www/assets/DashboardPage-6WjCreWK.js b/sync-server/www/assets/DashboardPage-Cc-wrWjt.js similarity index 94% rename from sync-server/www/assets/DashboardPage-6WjCreWK.js rename to sync-server/www/assets/DashboardPage-Cc-wrWjt.js index 141941a..9f77641 100644 --- a/sync-server/www/assets/DashboardPage-6WjCreWK.js +++ b/sync-server/www/assets/DashboardPage-Cc-wrWjt.js @@ -1 +1 @@ -import{r as g,e as v,j as t,S as j,s as S}from"./index-BunBoxtn.js";import{C as c,a as d,b as x}from"./card-CgBa5fs5.js";import{u as N,i as u,a as m}from"./useChart-CwGNJ-9_.js";import{u as k,i as w,a as C,b as L,c as R,d as $,e as z,f as T}from"./echarts-BIWefrIc.js";k([w,C,L,R,$,z,T]);function q(){const[l,n]=g.useState(""),i=N(),e=v({queryKey:["stats",l||void 0],queryFn:()=>S(l?Number(l):void 0)}).data,p=u("2"),r=u("3"),h=m(()=>({grid:{left:34,right:12,top:14,bottom:24},tooltip:{trigger:"axis"},xAxis:{type:"category",data:(e==null?void 0:e.monthly.map(a=>a.ym.slice(2)))??[],axisLine:{lineStyle:{color:r}},axisTick:{show:!1},axisLabel:{color:r,fontSize:10}},yAxis:{type:"value",splitLine:{lineStyle:{color:"rgba(128,138,155,0.15)"}},axisLabel:{color:r,fontSize:10}},series:[{type:"bar",data:(e==null?void 0:e.monthly.map(a=>a.count))??[],barMaxWidth:18,itemStyle:{color:"#3056d3",borderRadius:[3,3,0,0]}}]}),[e,i]),b=m(()=>{const a=((e==null?void 0:e.by_type)??[]).filter(s=>s.count>0);return{tooltip:{trigger:"item"},legend:{orient:"vertical",right:4,top:"middle",textStyle:{color:p,fontSize:11},itemWidth:10,itemHeight:10},series:[{type:"pie",radius:["48%","72%"],center:["34%","50%"],label:{show:!1},data:a.map(s=>({name:s.label,value:s.count,itemStyle:{color:s.color||"#64748b"}}))}]}},[e,i]),y=m(()=>{const a=((e==null?void 0:e.by_level)??[]).filter(s=>s.count>0).slice().reverse();return{grid:{left:64,right:24,top:8,bottom:22},tooltip:{trigger:"axis"},xAxis:{type:"value",splitLine:{lineStyle:{color:"rgba(128,138,155,0.15)"}},axisLabel:{color:r,fontSize:10}},yAxis:{type:"category",data:a.map(s=>s.label),axisLine:{show:!1},axisTick:{show:!1},axisLabel:{color:p,fontSize:11}},series:[{type:"bar",data:a.map(s=>({value:s.count,itemStyle:{color:s.color||"#3056d3",borderRadius:[0,3,3,0]}})),barMaxWidth:14}]}},[e,i]),f=((e==null?void 0:e.metrics)??[]).slice(0,3);return t.jsxs("div",{className:"mx-auto max-w-[1080px] px-6 py-5",children:[t.jsxs("div",{className:"mb-4 flex flex-wrap items-center justify-between gap-3",children:[t.jsxs("div",{className:"flex flex-wrap gap-3",children:[t.jsx(o,{label:"总记录",value:(e==null?void 0:e.total)??0}),t.jsx(o,{label:l?l+" 年新增":"本年新增",value:(e==null?void 0:e.total_this_year)??0}),t.jsx(o,{label:"附件总数",value:(e==null?void 0:e.attachment_total)??0}),f.map(a=>t.jsx(o,{label:a.label,value:a.value,unit:a.unit??""},a.key))]}),t.jsx(j,{className:"w-[120px]",value:l,onChange:a=>n(a.target.value),options:[{value:"",label:"全部年份"},...((e==null?void 0:e.years)??[]).map(a=>({value:String(a),label:a+" 年"}))]})]}),!(e!=null&&e.metrics.length)&&t.jsx("div",{className:"mb-4 rounded-md border border-dashed border-line px-4 py-2 text-[12px] text-ink-3",children:"提示:在「统计」配置中注册指标(如志愿时长、读书本数),带单位的数值字段即可在此量化展示。"}),t.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-4",children:[t.jsxs(c,{children:[t.jsx(d,{title:"近 12 个月活跃度"}),t.jsx(x,{children:t.jsx("div",{ref:h,className:"h-[220px]"})})]}),t.jsxs(c,{children:[t.jsx(d,{title:"类型分布"}),t.jsx(x,{children:t.jsx("div",{ref:b,className:"h-[220px]"})})]}),t.jsxs(c,{className:"col-span-2",children:[t.jsx(d,{title:"级别分布"}),t.jsx(x,{children:t.jsx("div",{ref:y,className:"h-[200px]"})})]})]})]})}function o({label:l,value:n,unit:i}){return t.jsxs("div",{className:"min-w-[120px] rounded-lg border border-line bg-surface px-4 py-3 shadow-card",children:[t.jsx("div",{className:"text-[12px] text-ink-3",children:l}),t.jsxs("div",{className:"num mt-0.5 text-[22px] font-semibold leading-tight text-ink-1",children:[n,i&&t.jsx("span",{className:"ml-1 text-[12px] font-normal text-ink-3",children:i})]})]})}export{q as DashboardPage}; +import{r as g,e as v,j as t,S as j,s as S}from"./index-CAYqMwJw.js";import{C as c,a as d,b as x}from"./card-DipFCG5F.js";import{u as N,i as u,a as m}from"./useChart-sd-ke-zx.js";import{u as k,i as w,a as C,b as L,c as R,d as $,e as z,f as T}from"./echarts-BIWefrIc.js";k([w,C,L,R,$,z,T]);function q(){const[l,n]=g.useState(""),i=N(),e=v({queryKey:["stats",l||void 0],queryFn:()=>S(l?Number(l):void 0)}).data,p=u("2"),r=u("3"),h=m(()=>({grid:{left:34,right:12,top:14,bottom:24},tooltip:{trigger:"axis"},xAxis:{type:"category",data:(e==null?void 0:e.monthly.map(a=>a.ym.slice(2)))??[],axisLine:{lineStyle:{color:r}},axisTick:{show:!1},axisLabel:{color:r,fontSize:10}},yAxis:{type:"value",splitLine:{lineStyle:{color:"rgba(128,138,155,0.15)"}},axisLabel:{color:r,fontSize:10}},series:[{type:"bar",data:(e==null?void 0:e.monthly.map(a=>a.count))??[],barMaxWidth:18,itemStyle:{color:"#3056d3",borderRadius:[3,3,0,0]}}]}),[e,i]),b=m(()=>{const a=((e==null?void 0:e.by_type)??[]).filter(s=>s.count>0);return{tooltip:{trigger:"item"},legend:{orient:"vertical",right:4,top:"middle",textStyle:{color:p,fontSize:11},itemWidth:10,itemHeight:10},series:[{type:"pie",radius:["48%","72%"],center:["34%","50%"],label:{show:!1},data:a.map(s=>({name:s.label,value:s.count,itemStyle:{color:s.color||"#64748b"}}))}]}},[e,i]),y=m(()=>{const a=((e==null?void 0:e.by_level)??[]).filter(s=>s.count>0).slice().reverse();return{grid:{left:64,right:24,top:8,bottom:22},tooltip:{trigger:"axis"},xAxis:{type:"value",splitLine:{lineStyle:{color:"rgba(128,138,155,0.15)"}},axisLabel:{color:r,fontSize:10}},yAxis:{type:"category",data:a.map(s=>s.label),axisLine:{show:!1},axisTick:{show:!1},axisLabel:{color:p,fontSize:11}},series:[{type:"bar",data:a.map(s=>({value:s.count,itemStyle:{color:s.color||"#3056d3",borderRadius:[0,3,3,0]}})),barMaxWidth:14}]}},[e,i]),f=((e==null?void 0:e.metrics)??[]).slice(0,3);return t.jsxs("div",{className:"mx-auto max-w-[1080px] px-6 py-5",children:[t.jsxs("div",{className:"mb-4 flex flex-wrap items-center justify-between gap-3",children:[t.jsxs("div",{className:"flex flex-wrap gap-3",children:[t.jsx(o,{label:"总记录",value:(e==null?void 0:e.total)??0}),t.jsx(o,{label:l?l+" 年新增":"本年新增",value:(e==null?void 0:e.total_this_year)??0}),t.jsx(o,{label:"附件总数",value:(e==null?void 0:e.attachment_total)??0}),f.map(a=>t.jsx(o,{label:a.label,value:a.value,unit:a.unit??""},a.key))]}),t.jsx(j,{className:"w-[120px]",value:l,onChange:a=>n(a.target.value),options:[{value:"",label:"全部年份"},...((e==null?void 0:e.years)??[]).map(a=>({value:String(a),label:a+" 年"}))]})]}),!(e!=null&&e.metrics.length)&&t.jsx("div",{className:"mb-4 rounded-md border border-dashed border-line px-4 py-2 text-[12px] text-ink-3",children:"提示:在「统计」配置中注册指标(如志愿时长、读书本数),带单位的数值字段即可在此量化展示。"}),t.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-4",children:[t.jsxs(c,{children:[t.jsx(d,{title:"近 12 个月活跃度"}),t.jsx(x,{children:t.jsx("div",{ref:h,className:"h-[220px]"})})]}),t.jsxs(c,{children:[t.jsx(d,{title:"类型分布"}),t.jsx(x,{children:t.jsx("div",{ref:b,className:"h-[220px]"})})]}),t.jsxs(c,{className:"col-span-2",children:[t.jsx(d,{title:"级别分布"}),t.jsx(x,{children:t.jsx("div",{ref:y,className:"h-[200px]"})})]})]})]})}function o({label:l,value:n,unit:i}){return t.jsxs("div",{className:"min-w-[120px] rounded-lg border border-line bg-surface px-4 py-3 shadow-card",children:[t.jsx("div",{className:"text-[12px] text-ink-3",children:l}),t.jsxs("div",{className:"num mt-0.5 text-[22px] font-semibold leading-tight text-ink-1",children:[n,i&&t.jsx("span",{className:"ml-1 text-[12px] font-normal text-ink-3",children:i})]})]})}export{q as DashboardPage}; diff --git a/sync-server/www/assets/GradesPage-F7CyPrhz.js b/sync-server/www/assets/GradesPage-QAvA3AVI.js similarity index 99% rename from sync-server/www/assets/GradesPage-F7CyPrhz.js rename to sync-server/www/assets/GradesPage-QAvA3AVI.js index faf94ab..a771f19 100644 --- a/sync-server/www/assets/GradesPage-F7CyPrhz.js +++ b/sync-server/www/assets/GradesPage-QAvA3AVI.js @@ -1,4 +1,4 @@ -import{c as K,e as I,j as e,E as O,t as $,u as k,b as S,r as u,f as y,v as H,w as W,B as g,P as q,C as Q,x as J,y as T,z as U,A as N,k as G,T as E,I as j,D as Y,F as C,H as B,J as V}from"./index-BunBoxtn.js";import{C as f,a as z,b as _}from"./card-CgBa5fs5.js";import{u as X,i as M,a as L}from"./useChart-CwGNJ-9_.js";import{u as Z,i as ee,b as se,a as te,c as ae,d as re,e as ne,f as le}from"./echarts-BIWefrIc.js";/** +import{c as K,e as I,j as e,E as O,t as $,u as k,b as S,r as u,f as y,v as H,w as W,B as g,P as q,C as Q,x as J,y as T,z as U,A as N,k as G,T as E,I as j,D as Y,F as C,H as B,J as V}from"./index-CAYqMwJw.js";import{C as f,a as z,b as _}from"./card-DipFCG5F.js";import{u as X,i as M,a as L}from"./useChart-sd-ke-zx.js";import{u as Z,i as ee,b as se,a as te,c as ae,d as re,e as ne,f as le}from"./echarts-BIWefrIc.js";/** * @license lucide-react v0.475.0 - ISC * * This source code is licensed under the ISC license. diff --git a/sync-server/www/assets/RecordsPage-DRvqAGwI.js b/sync-server/www/assets/RecordsPage-BfGvP4ga.js similarity index 99% rename from sync-server/www/assets/RecordsPage-DRvqAGwI.js rename to sync-server/www/assets/RecordsPage-BfGvP4ga.js index ca38fd8..3e42104 100644 --- a/sync-server/www/assets/RecordsPage-DRvqAGwI.js +++ b/sync-server/www/assets/RecordsPage-BfGvP4ga.js @@ -1,4 +1,4 @@ -import{c as re,j as e,a as u,r as t,u as oe,b as ce,d as de,e as C,f as ue,I as xe,S as m,B as b,P as Y,g as pe,L as me,G as ve,R as he,h as je,i as ge,k as fe,T as ye,E as be,l as Ne,m as ke,C as Se,n as we,o as Ce,p as Ee,s as qe,q as _e}from"./index-BunBoxtn.js";/** +import{c as re,j as e,a as u,r as t,u as oe,b as ce,d as de,e as C,f as ue,I as xe,S as m,B as b,P as Y,g as pe,L as me,G as ve,R as he,h as je,i as ge,k as fe,T as ye,E as be,l as Ne,m as ke,C as Se,n as we,o as Ce,p as Ee,s as qe,q as _e}from"./index-CAYqMwJw.js";/** * @license lucide-react v0.475.0 - ISC * * This source code is licensed under the ISC license. diff --git a/sync-server/www/assets/TaxonomyPage-B15FwZVO.js b/sync-server/www/assets/TaxonomyPage-CwcRnHVH.js similarity index 97% rename from sync-server/www/assets/TaxonomyPage-B15FwZVO.js rename to sync-server/www/assets/TaxonomyPage-CwcRnHVH.js index 2f78d10..d973a5f 100644 --- a/sync-server/www/assets/TaxonomyPage-B15FwZVO.js +++ b/sync-server/www/assets/TaxonomyPage-CwcRnHVH.js @@ -1 +1 @@ -import{j as e,u as k,b as Q,e as q,r as g,f as h,Q as F,U as w,B as j,T as z,I as D,P as T,C as E,V as M,W as B,p as P,X as V}from"./index-BunBoxtn.js";import{C as K,a as S}from"./card-CgBa5fs5.js";const f=["#3056d3","#7c3aed","#0891b2","#16a34a","#d97706","#dc2626","#db2777","#64748b"];function H(){return e.jsxs("div",{className:"mx-auto max-w-[1080px] px-6 py-5",children:[e.jsx("p",{className:"mb-4 text-[12px] text-ink-3",children:"字典驱动录入表单中的下拉选项;维度是自定义的成长分类轴,一条记录可挂多个维度。"}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-4",children:[e.jsx(C,{kind:"level",title:"级别字典",description:"国际级、国家级、省市级等,可按学校口径增改"}),e.jsx(C,{kind:"role",title:"角色字典",description:"主导、核心、参加等参与角色"}),e.jsx(I,{})]})]})}function C({kind:r,title:m,description:N}){var v;const l=k(),o=Q(),n=(((v=q({queryKey:["taxonomy-all"],queryFn:()=>P()}).data)==null?void 0:v.items)??[]).filter(s=>s.kind===r).sort((s,x)=>s.sort-x.sort),[a,c]=g.useState(""),[u,d]=g.useState(null),t=h({mutationFn:F,onSuccess:()=>void l.invalidateQueries({queryKey:["taxonomy-all"]})}),i=h({mutationFn:s=>w(s),onSuccess:()=>{l.invalidateQueries({queryKey:["taxonomy-all"]}),o("success","已删除"),d(null)},onError:s=>{o("error",s.message),d(null)}});return e.jsxs(K,{children:[e.jsx(S,{title:m,extra:e.jsx("span",{className:"text-[11px] text-ink-3",children:N})}),e.jsxs("div",{className:"flex flex-col gap-1 p-3",children:[n.map((s,x)=>e.jsxs("div",{className:"flex items-center gap-2 rounded-md px-1 py-1 hover:bg-surface-2",children:[e.jsx("input",{type:"color",value:s.color??f[x%f.length],className:"size-5 cursor-pointer rounded border border-line bg-surface",onChange:y=>t.mutate({id:s.id,kind:r,value:s.value,color:y.target.value,sort:s.sort})}),e.jsx("input",{className:"h-7 flex-1 rounded border border-transparent bg-transparent px-1.5 text-[13px] text-ink-1 hover:border-line focus:border-brand focus:outline-none",value:s.value,onChange:()=>{},onBlur:y=>{const b=y.target.value.trim();b&&b!==s.value&&t.mutate({id:s.id,kind:r,value:b,color:s.color,sort:s.sort})},defaultValue:s.value},s.value),e.jsxs("span",{className:"num w-14 text-right text-[11px] text-ink-3",children:["#",s.sort]}),s.is_builtin?e.jsx("span",{className:"w-7 text-center text-[11px] text-ink-3",children:"内置"}):e.jsx(j,{variant:"ghost",size:"icon-sm","aria-label":"删除",onClick:()=>d({id:s.id,value:s.value}),children:e.jsx(z,{size:13})})]},s.id)),e.jsxs("div",{className:"mt-1 flex items-center gap-2 border-t border-line pt-2",children:[e.jsx(D,{className:"flex-1",placeholder:"新增条目,回车或点击按钮",value:a,onChange:s=>c(s.target.value),onKeyDown:s=>{var x;s.key==="Enter"&&a.trim()&&(t.mutate({kind:r,value:a.trim(),sort:(((x=n.at(-1))==null?void 0:x.sort)??0)+10}),c(""))}}),e.jsxs(j,{size:"sm",variant:"secondary",disabled:!a.trim(),onClick:()=>{var s;t.mutate({kind:r,value:a.trim(),sort:(((s=n.at(-1))==null?void 0:s.sort)??0)+10}),c("")},children:[e.jsx(T,{size:13})," 添加"]})]})]}),e.jsx(E,{open:!!u,title:"删除字典条目",content:u?"确定删除「"+u.value+"」吗?":"",onCancel:()=>d(null),onOk:()=>u&&i.mutate(u.id)})]})}function I(){var d;const r=k(),m=Q(),l=[...((d=q({queryKey:["dimensions"],queryFn:V}).data)==null?void 0:d.items)??[]].sort((t,i)=>t.sort-i.sort),[o,p]=g.useState(""),[n,a]=g.useState(null),c=h({mutationFn:M,onSuccess:()=>void r.invalidateQueries({queryKey:["dimensions"]})}),u=h({mutationFn:t=>B(t),onSuccess:()=>{r.invalidateQueries({queryKey:["dimensions"]}),m("success","已删除"),a(null)},onError:t=>{m("error",t.message),a(null)}});return e.jsxs(K,{children:[e.jsx(S,{title:"成长维度",extra:e.jsx("span",{className:"text-[11px] text-ink-3",children:"如:学业深造 / 职业发展 / 兴趣生活"})}),e.jsxs("div",{className:"flex flex-col gap-1 p-3",children:[l.map((t,i)=>e.jsxs("div",{className:"flex items-center gap-2 rounded-md px-1 py-1 hover:bg-surface-2",children:[e.jsx("span",{className:"size-3 rounded-full",style:{backgroundColor:t.color??f[i%f.length]}}),e.jsx("input",{className:"h-7 flex-1 rounded border border-transparent bg-transparent px-1.5 text-[13px] text-ink-1 hover:border-line focus:border-brand focus:outline-none",defaultValue:t.name,onBlur:v=>{const s=v.target.value.trim();s&&s!==t.name&&c.mutate({id:t.id,name:s,color:t.color,sort:t.sort})}},t.name),e.jsx(j,{variant:"ghost",size:"icon-sm","aria-label":"删除",onClick:()=>a({id:t.id,name:t.name}),children:e.jsx(z,{size:13})})]},t.id)),!l.length&&e.jsx("div",{className:"py-2 text-center text-[12px] text-ink-3",children:"尚未配置维度"}),e.jsxs("div",{className:"mt-1 flex items-center gap-2 border-t border-line pt-2",children:[e.jsx(D,{className:"flex-1",placeholder:"新增维度名称",value:o,onChange:t=>p(t.target.value),onKeyDown:t=>{var i;t.key==="Enter"&&o.trim()&&(c.mutate({name:o.trim(),sort:(((i=l.at(-1))==null?void 0:i.sort)??0)+10}),p(""))}}),e.jsxs(j,{size:"sm",variant:"secondary",disabled:!o.trim(),onClick:()=>{var t;c.mutate({name:o.trim(),sort:(((t=l.at(-1))==null?void 0:t.sort)??0)+10}),p("")},children:[e.jsx(T,{size:13})," 添加"]})]})]}),e.jsx(E,{open:!!n,title:"删除维度",content:n?"确定删除「"+n.name+"」吗?记录与该维度的关联将一并移除。":"",onCancel:()=>a(null),onOk:()=>n&&u.mutate(n.id)})]})}export{H as TaxonomyPage}; +import{j as e,u as k,b as Q,e as q,r as g,f as h,Q as F,U as w,B as j,T as z,I as D,P as T,C as E,V as M,W as B,p as P,X as V}from"./index-CAYqMwJw.js";import{C as K,a as S}from"./card-DipFCG5F.js";const f=["#3056d3","#7c3aed","#0891b2","#16a34a","#d97706","#dc2626","#db2777","#64748b"];function H(){return e.jsxs("div",{className:"mx-auto max-w-[1080px] px-6 py-5",children:[e.jsx("p",{className:"mb-4 text-[12px] text-ink-3",children:"字典驱动录入表单中的下拉选项;维度是自定义的成长分类轴,一条记录可挂多个维度。"}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-4",children:[e.jsx(C,{kind:"level",title:"级别字典",description:"国际级、国家级、省市级等,可按学校口径增改"}),e.jsx(C,{kind:"role",title:"角色字典",description:"主导、核心、参加等参与角色"}),e.jsx(I,{})]})]})}function C({kind:r,title:m,description:N}){var v;const l=k(),o=Q(),n=(((v=q({queryKey:["taxonomy-all"],queryFn:()=>P()}).data)==null?void 0:v.items)??[]).filter(s=>s.kind===r).sort((s,x)=>s.sort-x.sort),[a,c]=g.useState(""),[u,d]=g.useState(null),t=h({mutationFn:F,onSuccess:()=>void l.invalidateQueries({queryKey:["taxonomy-all"]})}),i=h({mutationFn:s=>w(s),onSuccess:()=>{l.invalidateQueries({queryKey:["taxonomy-all"]}),o("success","已删除"),d(null)},onError:s=>{o("error",s.message),d(null)}});return e.jsxs(K,{children:[e.jsx(S,{title:m,extra:e.jsx("span",{className:"text-[11px] text-ink-3",children:N})}),e.jsxs("div",{className:"flex flex-col gap-1 p-3",children:[n.map((s,x)=>e.jsxs("div",{className:"flex items-center gap-2 rounded-md px-1 py-1 hover:bg-surface-2",children:[e.jsx("input",{type:"color",value:s.color??f[x%f.length],className:"size-5 cursor-pointer rounded border border-line bg-surface",onChange:y=>t.mutate({id:s.id,kind:r,value:s.value,color:y.target.value,sort:s.sort})}),e.jsx("input",{className:"h-7 flex-1 rounded border border-transparent bg-transparent px-1.5 text-[13px] text-ink-1 hover:border-line focus:border-brand focus:outline-none",value:s.value,onChange:()=>{},onBlur:y=>{const b=y.target.value.trim();b&&b!==s.value&&t.mutate({id:s.id,kind:r,value:b,color:s.color,sort:s.sort})},defaultValue:s.value},s.value),e.jsxs("span",{className:"num w-14 text-right text-[11px] text-ink-3",children:["#",s.sort]}),s.is_builtin?e.jsx("span",{className:"w-7 text-center text-[11px] text-ink-3",children:"内置"}):e.jsx(j,{variant:"ghost",size:"icon-sm","aria-label":"删除",onClick:()=>d({id:s.id,value:s.value}),children:e.jsx(z,{size:13})})]},s.id)),e.jsxs("div",{className:"mt-1 flex items-center gap-2 border-t border-line pt-2",children:[e.jsx(D,{className:"flex-1",placeholder:"新增条目,回车或点击按钮",value:a,onChange:s=>c(s.target.value),onKeyDown:s=>{var x;s.key==="Enter"&&a.trim()&&(t.mutate({kind:r,value:a.trim(),sort:(((x=n.at(-1))==null?void 0:x.sort)??0)+10}),c(""))}}),e.jsxs(j,{size:"sm",variant:"secondary",disabled:!a.trim(),onClick:()=>{var s;t.mutate({kind:r,value:a.trim(),sort:(((s=n.at(-1))==null?void 0:s.sort)??0)+10}),c("")},children:[e.jsx(T,{size:13})," 添加"]})]})]}),e.jsx(E,{open:!!u,title:"删除字典条目",content:u?"确定删除「"+u.value+"」吗?":"",onCancel:()=>d(null),onOk:()=>u&&i.mutate(u.id)})]})}function I(){var d;const r=k(),m=Q(),l=[...((d=q({queryKey:["dimensions"],queryFn:V}).data)==null?void 0:d.items)??[]].sort((t,i)=>t.sort-i.sort),[o,p]=g.useState(""),[n,a]=g.useState(null),c=h({mutationFn:M,onSuccess:()=>void r.invalidateQueries({queryKey:["dimensions"]})}),u=h({mutationFn:t=>B(t),onSuccess:()=>{r.invalidateQueries({queryKey:["dimensions"]}),m("success","已删除"),a(null)},onError:t=>{m("error",t.message),a(null)}});return e.jsxs(K,{children:[e.jsx(S,{title:"成长维度",extra:e.jsx("span",{className:"text-[11px] text-ink-3",children:"如:学业深造 / 职业发展 / 兴趣生活"})}),e.jsxs("div",{className:"flex flex-col gap-1 p-3",children:[l.map((t,i)=>e.jsxs("div",{className:"flex items-center gap-2 rounded-md px-1 py-1 hover:bg-surface-2",children:[e.jsx("span",{className:"size-3 rounded-full",style:{backgroundColor:t.color??f[i%f.length]}}),e.jsx("input",{className:"h-7 flex-1 rounded border border-transparent bg-transparent px-1.5 text-[13px] text-ink-1 hover:border-line focus:border-brand focus:outline-none",defaultValue:t.name,onBlur:v=>{const s=v.target.value.trim();s&&s!==t.name&&c.mutate({id:t.id,name:s,color:t.color,sort:t.sort})}},t.name),e.jsx(j,{variant:"ghost",size:"icon-sm","aria-label":"删除",onClick:()=>a({id:t.id,name:t.name}),children:e.jsx(z,{size:13})})]},t.id)),!l.length&&e.jsx("div",{className:"py-2 text-center text-[12px] text-ink-3",children:"尚未配置维度"}),e.jsxs("div",{className:"mt-1 flex items-center gap-2 border-t border-line pt-2",children:[e.jsx(D,{className:"flex-1",placeholder:"新增维度名称",value:o,onChange:t=>p(t.target.value),onKeyDown:t=>{var i;t.key==="Enter"&&o.trim()&&(c.mutate({name:o.trim(),sort:(((i=l.at(-1))==null?void 0:i.sort)??0)+10}),p(""))}}),e.jsxs(j,{size:"sm",variant:"secondary",disabled:!o.trim(),onClick:()=>{var t;c.mutate({name:o.trim(),sort:(((t=l.at(-1))==null?void 0:t.sort)??0)+10}),p("")},children:[e.jsx(T,{size:13})," 添加"]})]})]}),e.jsx(E,{open:!!n,title:"删除维度",content:n?"确定删除「"+n.name+"」吗?记录与该维度的关联将一并移除。":"",onCancel:()=>a(null),onOk:()=>n&&u.mutate(n.id)})]})}export{H as TaxonomyPage}; diff --git a/sync-server/www/assets/TypesPage-CxfVqKEr.js b/sync-server/www/assets/TypesPage-k4XFWR3M.js similarity index 98% rename from sync-server/www/assets/TypesPage-CxfVqKEr.js rename to sync-server/www/assets/TypesPage-k4XFWR3M.js index 24a66af..9316263 100644 --- a/sync-server/www/assets/TypesPage-CxfVqKEr.js +++ b/sync-server/www/assets/TypesPage-k4XFWR3M.js @@ -1,4 +1,4 @@ -import{c as P,u as Q,b as z,e as B,r as i,f as T,j as e,B as p,P as F,K as q,A as E,k as D,T as I,C as K,M as L,D as G,F as r,I as j,N as H,S as R,O as W,o as J}from"./index-BunBoxtn.js";import{C as U}from"./card-CgBa5fs5.js";/** +import{c as P,u as Q,b as z,e as B,r as i,f as T,j as e,B as p,P as F,K as q,A as E,k as D,T as I,C as K,M as L,D as G,F as r,I as j,N as H,S as R,O as W,o as J}from"./index-CAYqMwJw.js";import{C as U}from"./card-DipFCG5F.js";/** * @license lucide-react v0.475.0 - ISC * * This source code is licensed under the ISC license. diff --git a/sync-server/www/assets/card-CgBa5fs5.js b/sync-server/www/assets/card-DipFCG5F.js similarity index 89% rename from sync-server/www/assets/card-CgBa5fs5.js rename to sync-server/www/assets/card-DipFCG5F.js index d1082b7..8ae4410 100644 --- a/sync-server/www/assets/card-CgBa5fs5.js +++ b/sync-server/www/assets/card-DipFCG5F.js @@ -1 +1 @@ -import{j as s,a}from"./index-BunBoxtn.js";function i({className:r,...e}){return s.jsx("div",{className:a("rounded-lg border border-line bg-surface shadow-card",r),...e})}function t({title:r,extra:e,className:n}){return s.jsxs("div",{className:a("flex min-h-11 flex-wrap items-center justify-between gap-2 border-b border-line px-4 py-1.5",n),children:[s.jsx("h3",{className:"text-[13px] font-semibold text-ink-1",children:r}),e&&s.jsx("div",{className:"flex flex-wrap items-center gap-2",children:e})]})}function c({className:r,...e}){return s.jsx("div",{className:a("p-4",r),...e})}export{i as C,t as a,c as b}; +import{j as s,a}from"./index-CAYqMwJw.js";function i({className:r,...e}){return s.jsx("div",{className:a("rounded-lg border border-line bg-surface shadow-card",r),...e})}function t({title:r,extra:e,className:n}){return s.jsxs("div",{className:a("flex min-h-11 flex-wrap items-center justify-between gap-2 border-b border-line px-4 py-1.5",n),children:[s.jsx("h3",{className:"text-[13px] font-semibold text-ink-1",children:r}),e&&s.jsx("div",{className:"flex flex-wrap items-center gap-2",children:e})]})}function c({className:r,...e}){return s.jsx("div",{className:a("p-4",r),...e})}export{i as C,t as a,c as b}; diff --git a/sync-server/www/assets/index-BMVMeOX_.css b/sync-server/www/assets/index-BMVMeOX_.css deleted file mode 100644 index 51a17b8..0000000 --- a/sync-server/www/assets/index-BMVMeOX_.css +++ /dev/null @@ -1 +0,0 @@ -/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--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-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--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}}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-black:#000;--color-white:#fff;--spacing:.25rem;--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--tracking-tight:-.025em;--leading-tight:1.25;--leading-relaxed:1.625;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings: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:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-0{inset-inline:0}.top-0{top:0}.top-1\/2{top:50%}.top-3{top:calc(var(--spacing) * 3)}.right-0{right:0}.right-2{right:calc(var(--spacing) * 2)}.right-5{right:calc(var(--spacing) * 5)}.bottom-0{bottom:0}.bottom-3{bottom:calc(var(--spacing) * 3)}.bottom-5{bottom:calc(var(--spacing) * 5)}.left-0{left:0}.left-2\.5{left:calc(var(--spacing) * 2.5)}.left-\[7px\]{left:7px}.z-10{z-index:10}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-\[60\]{z-index:60}.col-span-2{grid-column:span 2/span 2}.-mx-6{margin-inline:calc(var(--spacing) * -6)}.mx-auto{margin-inline:auto}.my-1{margin-block:var(--spacing)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mr-auto{margin-right:auto}.mb-0\.5{margin-bottom:calc(var(--spacing) * .5)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.ml-0\.5{margin-left:calc(var(--spacing) * .5)}.ml-1{margin-left:var(--spacing)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.aspect-square{aspect-ratio:1}.size-2{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.size-3{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-7{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-9{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-11{height:calc(var(--spacing) * 11)}.h-12{height:calc(var(--spacing) * 12)}.h-14{height:calc(var(--spacing) * 14)}.h-\[200px\]{height:200px}.h-\[220px\]{height:220px}.h-full{height:100%}.max-h-\[64vh\]{max-height:64vh}.max-h-\[calc\(100vh-260px\)\]{max-height:calc(100vh - 260px)}.min-h-0{min-height:0}.min-h-8{min-height:calc(var(--spacing) * 8)}.min-h-11{min-height:calc(var(--spacing) * 11)}.min-h-\[72px\]{min-height:72px}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-14{width:calc(var(--spacing) * 14)}.w-\[3px\]{width:3px}.w-\[32\%\]{width:32%}.w-\[52px\]{width:52px}.w-\[64px\]{width:64px}.w-\[72px\]{width:72px}.w-\[96px\]{width:96px}.w-\[100px\]{width:100px}.w-\[110px\]{width:110px}.w-\[120px\]{width:120px}.w-\[130px\]{width:130px}.w-\[160px\]{width:160px}.w-\[220px\]{width:220px}.w-\[224px\]{width:224px}.w-\[280px\]{width:280px}.w-full{width:100%}.w-px{width:1px}.max-w-\[220px\]{max-width:220px}.max-w-\[360px\]{max-width:360px}.max-w-\[380px\]{max-width:380px}.max-w-\[880px\]{max-width:880px}.max-w-\[1080px\]{max-width:1080px}.min-w-0{min-width:0}.min-w-\[80px\]{min-width:80px}.min-w-\[120px\]{min-width:120px}.min-w-\[128px\]{min-width:128px}.min-w-\[160px\]{min-width:160px}.flex-1{flex:1}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.scale-110{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-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)}.cursor-pointer{cursor:pointer}.resize-y{resize:vertical}.appearance-none{-webkit-appearance:none;-moz-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))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-\[1fr_120px_100px\]{grid-template-columns:1fr 120px 100px}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-3\.5{gap:calc(var(--spacing) * 3.5)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-x-4{column-gap:calc(var(--spacing) * 4)}.gap-y-1{row-gap:var(--spacing)}.gap-y-2{row-gap:calc(var(--spacing) * 2)}.gap-y-3\.5{row-gap:calc(var(--spacing) * 3.5)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-line>:not(:last-child)){border-color:var(--border)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:8px}.rounded-md{border-radius:6px}.rounded-sm{border-radius:4px}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.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-dashed{--tw-border-style:dashed;border-style:dashed}.border-brand,.border-brand\/30{border-color:var(--brand)}@supports (color:color-mix(in lab,red,red)){.border-brand\/30{border-color:color-mix(in oklab,var(--brand) 30%,transparent)}}.border-ink-1{border-color:var(--text-1)}.border-line{border-color:var(--border)}.border-transparent{border-color:#0000}.border-warning{border-color:var(--warning)}.bg-bg,.bg-bg\/90{background-color:var(--bg)}@supports (color:color-mix(in lab,red,red)){.bg-bg\/90{background-color:color-mix(in oklab,var(--bg) 90%,transparent)}}.bg-black\/45{background-color:#00000073}@supports (color:color-mix(in lab,red,red)){.bg-black\/45{background-color:color-mix(in oklab,var(--color-black) 45%,transparent)}}.bg-brand{background-color:var(--brand)}.bg-brand-subtle,.bg-brand-subtle\/40{background-color:var(--brand-subtle)}@supports (color:color-mix(in lab,red,red)){.bg-brand-subtle\/40{background-color:color-mix(in oklab,var(--brand-subtle) 40%,transparent)}}.bg-danger{background-color:var(--danger)}.bg-line{background-color:var(--border)}.bg-success-subtle{background-color:var(--success-subtle)}.bg-surface{background-color:var(--surface)}.bg-surface-2{background-color:var(--surface-2)}.bg-surface-3{background-color:var(--surface-3)}.bg-transparent{background-color:#0000}.bg-warning-subtle{background-color:var(--warning-subtle)}.bg-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-black\/60{--tw-gradient-from:#0009}@supports (color:color-mix(in lab,red,red)){.from-black\/60{--tw-gradient-from:color-mix(in oklab, var(--color-black) 60%, transparent)}}.from-black\/60{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-transparent{--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.object-cover{object-fit:cover}.p-0{padding:0}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-2\.5{padding:calc(var(--spacing) * 2.5)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.px-1{padding-inline:var(--spacing)}.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-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-3\.5{padding-block:calc(var(--spacing) * 3.5)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-10{padding-block:calc(var(--spacing) * 10)}.py-16{padding-block:calc(var(--spacing) * 16)}.py-px{padding-block:1px}.pt-0\.5{padding-top:calc(var(--spacing) * .5)}.pt-1{padding-top:var(--spacing)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-\[8vh\]{padding-top:8vh}.pr-7{padding-right:calc(var(--spacing) * 7)}.pb-1{padding-bottom:var(--spacing)}.pb-1\.5{padding-bottom:calc(var(--spacing) * 1.5)}.pb-5{padding-bottom:calc(var(--spacing) * 5)}.pl-2\.5{padding-left:calc(var(--spacing) * 2.5)}.pl-6{padding-left:calc(var(--spacing) * 6)}.pl-8{padding-left:calc(var(--spacing) * 8)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-middle{vertical-align:middle}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-\[10px\]{font-size:10px}.text-\[11\.5px\]{font-size:11.5px}.text-\[11px\]{font-size:11px}.text-\[12\.5px\]{font-size:12.5px}.text-\[12px\]{font-size:12px}.text-\[13\.5px\]{font-size:13.5px}.text-\[13px\]{font-size:13px}.text-\[14px\]{font-size:14px}.text-\[15px\]{font-size:15px}.text-\[16px\]{font-size:16px}.text-\[18px\]{font-size:18px}.text-\[22px\]{font-size:22px}.leading-\[18px\]{--tw-leading:18px;line-height:18px}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.2em\]{--tw-tracking:.2em;letter-spacing:.2em}.tracking-\[0\.18em\]{--tw-tracking:.18em;letter-spacing:.18em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-brand{color:var(--brand)}.text-brand-text{color:var(--brand-text)}.text-danger{color:var(--danger)}.text-ink-1{color:var(--text-1)}.text-ink-2{color:var(--text-2)}.text-ink-3{color:var(--text-3)}.text-success{color:var(--success)}.text-warning{color:var(--warning)}.text-white{color:var(--color-white)}.opacity-0{opacity:0}.shadow-card{--tw-shadow:0 1px 2px var(--tw-shadow-color,#1018280a), 0 1px 3px var(--tw-shadow-color,#1018280d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-pop{--tw-shadow:0 12px 32px var(--tw-shadow-color,#10182829), 0 2px 8px var(--tw-shadow-color,#10182814);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.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}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}@media(hover:hover){.group-hover\:scale-\[1\.04\]:is(:where(.group):hover *){scale:1.04}.group-hover\:text-brand-text:is(:where(.group):hover *){color:var(--brand-text)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.placeholder\:text-ink-3::placeholder{color:var(--text-3)}.focus-within\:border-brand:focus-within{border-color:var(--brand)}@media(hover:hover){.hover\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:border-line:hover{border-color:var(--border)}.hover\:border-line-strong:hover{border-color:var(--border-strong)}.hover\:bg-brand-hover:hover{background-color:var(--brand-hover)}.hover\:bg-danger-subtle:hover{background-color:var(--danger-subtle)}.hover\:bg-surface-2:hover{background-color:var(--surface-2)}.hover\:bg-surface-3:hover{background-color:var(--surface-3)}.hover\:text-brand-text:hover{color:var(--brand-text)}.hover\:text-danger:hover{color:var(--danger)}.hover\:text-ink-1:hover{color:var(--text-1)}.hover\:underline:hover{text-decoration-line:underline}.hover\:shadow-pop:hover{--tw-shadow:0 12px 32px var(--tw-shadow-color,#10182829), 0 2px 8px var(--tw-shadow-color,#10182814);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:brightness-110:hover{--tw-brightness:brightness(110%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.hover\:brightness-\[0\.97\]:hover{--tw-brightness:brightness(.97);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}}.focus\:border-brand:focus{border-color:var(--brand)}.focus\:outline-none:focus{--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-45:disabled{opacity:.45}.disabled\:opacity-50:disabled{opacity:.5}@media not all and (min-width:64rem){.max-lg\:fixed{position:fixed}.max-lg\:inset-y-0{inset-block:0}.max-lg\:left-0{left:0}.max-lg\:z-40{z-index:40}.max-lg\:-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.max-lg\:translate-x-0{--tw-translate-x:0px;translate:var(--tw-translate-x) var(--tw-translate-y)}.max-lg\: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))}}@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\:grid-cols-\[1fr_130px_120px_1fr_28px\]{grid-template-columns:1fr 130px 120px 1fr 28px}.sm\:grid-cols-\[200px_1fr\]{grid-template-columns:200px 1fr}}@media(min-width:64rem){.lg\:hidden{display:none}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}}:root{--bg:#f4f5f7;--surface:#fff;--surface-2:#f9fafb;--surface-3:#eff1f4;--border:#e5e8ec;--border-strong:#ccd3dc;--text-1:#15181d;--text-2:#454e5c;--text-3:#7e8798;--brand:#3056d3;--brand-hover:#2748b8;--brand-subtle:#eef2ff;--brand-text:#2748b8;--success:#15803d;--success-subtle:#ecfdf3;--warning:#b45309;--warning-subtle:#fffaeb;--danger:#dc2626;--danger-subtle:#fef3f2}.dark{--bg:#0e1013;--surface:#15181e;--surface-2:#1a1e25;--surface-3:#22272f;--border:#262c35;--border-strong:#3a424f;--text-1:#e8ebf1;--text-2:#a2abb9;--text-3:#6d7684;--brand:#7c93f5;--brand-hover:#94a8f8;--brand-subtle:#1c2340;--brand-text:#a3b4f8;--success:#4ade80;--success-subtle:#12251a;--warning:#fbbf24;--warning-subtle:#2a2213;--danger:#f87171;--danger-subtle:#2c1618}html,body,#root{height:100%}body{background:var(--bg);color:var(--text-1);letter-spacing:.005em;-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;font-family:system-ui,Segoe UI Variable Text,Segoe UI,Microsoft YaHei UI,Microsoft YaHei,PingFang SC,sans-serif;font-size:14px;line-height:1.55}h1,h2,h3{letter-spacing:-.01em;text-wrap:balance}.num{font-variant-numeric:tabular-nums;font-feature-settings:"tnum" 1}::selection{background:var(--brand)}@supports (color:color-mix(in lab,red,red)){::selection{background:color-mix(in srgb,var(--brand) 22%,transparent)}}*{scrollbar-width:thin;scrollbar-color:var(--border-strong) transparent}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-thumb{background:var(--border-strong);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--text-3)}::-webkit-scrollbar-track{background:0 0}:focus-visible{outline:2px solid var(--brand)}@supports (color:color-mix(in lab,red,red)){:focus-visible{outline:2px solid color-mix(in srgb,var(--brand) 55%,transparent)}}:focus-visible{outline-offset:1px}.animate-in{animation:.18s ease-out fp-fade-slide-in}@keyframes fp-fade-slide-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input[type=number]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}@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-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-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-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@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:"";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:"";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:"";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-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@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}@keyframes pulse{50%{opacity:.5}} diff --git a/sync-server/www/assets/index-BthM1Vey.css b/sync-server/www/assets/index-BthM1Vey.css new file mode 100644 index 0000000..5ac84e0 --- /dev/null +++ b/sync-server/www/assets/index-BthM1Vey.css @@ -0,0 +1 @@ +/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--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-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--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}}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-black:#000;--color-white:#fff;--spacing:.25rem;--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--tracking-tight:-.025em;--leading-tight:1.25;--leading-relaxed:1.625;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings: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:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-0{inset-inline:0}.top-0{top:0}.top-1\/2{top:50%}.top-3{top:calc(var(--spacing) * 3)}.right-0{right:0}.right-2{right:calc(var(--spacing) * 2)}.right-5{right:calc(var(--spacing) * 5)}.bottom-0{bottom:0}.bottom-3{bottom:calc(var(--spacing) * 3)}.bottom-5{bottom:calc(var(--spacing) * 5)}.left-0{left:0}.left-2\.5{left:calc(var(--spacing) * 2.5)}.left-\[7px\]{left:7px}.z-10{z-index:10}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-\[60\]{z-index:60}.col-span-2{grid-column:span 2/span 2}.-mx-6{margin-inline:calc(var(--spacing) * -6)}.mx-auto{margin-inline:auto}.my-1{margin-block:var(--spacing)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mr-1{margin-right:var(--spacing)}.mr-auto{margin-right:auto}.mb-0\.5{margin-bottom:calc(var(--spacing) * .5)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.ml-0\.5{margin-left:calc(var(--spacing) * .5)}.ml-1{margin-left:var(--spacing)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.aspect-square{aspect-ratio:1}.size-2{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.size-3{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-7{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-9{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-11{height:calc(var(--spacing) * 11)}.h-12{height:calc(var(--spacing) * 12)}.h-14{height:calc(var(--spacing) * 14)}.h-\[200px\]{height:200px}.h-\[220px\]{height:220px}.h-full{height:100%}.max-h-\[64vh\]{max-height:64vh}.max-h-\[420px\]{max-height:420px}.max-h-\[calc\(100vh-260px\)\]{max-height:calc(100vh - 260px)}.min-h-0{min-height:0}.min-h-8{min-height:calc(var(--spacing) * 8)}.min-h-11{min-height:calc(var(--spacing) * 11)}.min-h-\[72px\]{min-height:72px}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-14{width:calc(var(--spacing) * 14)}.w-\[3px\]{width:3px}.w-\[32\%\]{width:32%}.w-\[52px\]{width:52px}.w-\[64px\]{width:64px}.w-\[72px\]{width:72px}.w-\[96px\]{width:96px}.w-\[100px\]{width:100px}.w-\[110px\]{width:110px}.w-\[120px\]{width:120px}.w-\[130px\]{width:130px}.w-\[160px\]{width:160px}.w-\[220px\]{width:220px}.w-\[224px\]{width:224px}.w-\[280px\]{width:280px}.w-full{width:100%}.w-px{width:1px}.max-w-\[220px\]{max-width:220px}.max-w-\[360px\]{max-width:360px}.max-w-\[380px\]{max-width:380px}.max-w-\[880px\]{max-width:880px}.max-w-\[1080px\]{max-width:1080px}.min-w-0{min-width:0}.min-w-\[80px\]{min-width:80px}.min-w-\[120px\]{min-width:120px}.min-w-\[128px\]{min-width:128px}.min-w-\[160px\]{min-width:160px}.flex-1{flex:1}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.scale-110{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-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)}.cursor-pointer{cursor:pointer}.resize-y{resize:vertical}.appearance-none{-webkit-appearance:none;-moz-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))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-\[1fr_120px_100px\]{grid-template-columns:1fr 120px 100px}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-3\.5{gap:calc(var(--spacing) * 3.5)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-x-4{column-gap:calc(var(--spacing) * 4)}.gap-y-1{row-gap:var(--spacing)}.gap-y-2{row-gap:calc(var(--spacing) * 2)}.gap-y-3\.5{row-gap:calc(var(--spacing) * 3.5)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-line>:not(:last-child)){border-color:var(--border)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:8px}.rounded-md{border-radius:6px}.rounded-sm{border-radius:4px}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.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-dashed{--tw-border-style:dashed;border-style:dashed}.border-brand,.border-brand\/30{border-color:var(--brand)}@supports (color:color-mix(in lab,red,red)){.border-brand\/30{border-color:color-mix(in oklab,var(--brand) 30%,transparent)}}.border-ink-1{border-color:var(--text-1)}.border-line{border-color:var(--border)}.border-transparent{border-color:#0000}.border-warning{border-color:var(--warning)}.bg-bg,.bg-bg\/90{background-color:var(--bg)}@supports (color:color-mix(in lab,red,red)){.bg-bg\/90{background-color:color-mix(in oklab,var(--bg) 90%,transparent)}}.bg-black\/45{background-color:#00000073}@supports (color:color-mix(in lab,red,red)){.bg-black\/45{background-color:color-mix(in oklab,var(--color-black) 45%,transparent)}}.bg-brand{background-color:var(--brand)}.bg-brand-subtle,.bg-brand-subtle\/40{background-color:var(--brand-subtle)}@supports (color:color-mix(in lab,red,red)){.bg-brand-subtle\/40{background-color:color-mix(in oklab,var(--brand-subtle) 40%,transparent)}}.bg-danger{background-color:var(--danger)}.bg-line{background-color:var(--border)}.bg-success-subtle{background-color:var(--success-subtle)}.bg-surface{background-color:var(--surface)}.bg-surface-2{background-color:var(--surface-2)}.bg-surface-3{background-color:var(--surface-3)}.bg-transparent{background-color:#0000}.bg-warning-subtle{background-color:var(--warning-subtle)}.bg-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-black\/60{--tw-gradient-from:#0009}@supports (color:color-mix(in lab,red,red)){.from-black\/60{--tw-gradient-from:color-mix(in oklab, var(--color-black) 60%, transparent)}}.from-black\/60{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-transparent{--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.object-cover{object-fit:cover}.p-0{padding:0}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-2\.5{padding:calc(var(--spacing) * 2.5)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.px-1{padding-inline:var(--spacing)}.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-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-3\.5{padding-block:calc(var(--spacing) * 3.5)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-10{padding-block:calc(var(--spacing) * 10)}.py-16{padding-block:calc(var(--spacing) * 16)}.py-px{padding-block:1px}.pt-0\.5{padding-top:calc(var(--spacing) * .5)}.pt-1{padding-top:var(--spacing)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-\[8vh\]{padding-top:8vh}.pr-7{padding-right:calc(var(--spacing) * 7)}.pb-1{padding-bottom:var(--spacing)}.pb-1\.5{padding-bottom:calc(var(--spacing) * 1.5)}.pb-5{padding-bottom:calc(var(--spacing) * 5)}.pl-2\.5{padding-left:calc(var(--spacing) * 2.5)}.pl-6{padding-left:calc(var(--spacing) * 6)}.pl-8{padding-left:calc(var(--spacing) * 8)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-middle{vertical-align:middle}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-\[10px\]{font-size:10px}.text-\[11\.5px\]{font-size:11.5px}.text-\[11px\]{font-size:11px}.text-\[12\.5px\]{font-size:12.5px}.text-\[12px\]{font-size:12px}.text-\[13\.5px\]{font-size:13.5px}.text-\[13px\]{font-size:13px}.text-\[14px\]{font-size:14px}.text-\[15px\]{font-size:15px}.text-\[16px\]{font-size:16px}.text-\[18px\]{font-size:18px}.text-\[22px\]{font-size:22px}.leading-\[18px\]{--tw-leading:18px;line-height:18px}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.2em\]{--tw-tracking:.2em;letter-spacing:.2em}.tracking-\[0\.18em\]{--tw-tracking:.18em;letter-spacing:.18em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-brand{color:var(--brand)}.text-brand-text{color:var(--brand-text)}.text-danger{color:var(--danger)}.text-ink-1{color:var(--text-1)}.text-ink-2{color:var(--text-2)}.text-ink-3{color:var(--text-3)}.text-success{color:var(--success)}.text-warning{color:var(--warning)}.text-white{color:var(--color-white)}.underline{text-decoration-line:underline}.opacity-0{opacity:0}.shadow-card{--tw-shadow:0 1px 2px var(--tw-shadow-color,#1018280a), 0 1px 3px var(--tw-shadow-color,#1018280d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-pop{--tw-shadow:0 12px 32px var(--tw-shadow-color,#10182829), 0 2px 8px var(--tw-shadow-color,#10182814);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.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}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}@media(hover:hover){.group-hover\:scale-\[1\.04\]:is(:where(.group):hover *){scale:1.04}.group-hover\:text-brand-text:is(:where(.group):hover *){color:var(--brand-text)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.placeholder\:text-ink-3::placeholder{color:var(--text-3)}.focus-within\:border-brand:focus-within{border-color:var(--brand)}@media(hover:hover){.hover\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:border-line:hover{border-color:var(--border)}.hover\:border-line-strong:hover{border-color:var(--border-strong)}.hover\:bg-brand-hover:hover{background-color:var(--brand-hover)}.hover\:bg-danger-subtle:hover{background-color:var(--danger-subtle)}.hover\:bg-surface-2:hover{background-color:var(--surface-2)}.hover\:bg-surface-3:hover{background-color:var(--surface-3)}.hover\:text-brand-text:hover{color:var(--brand-text)}.hover\:text-danger:hover{color:var(--danger)}.hover\:text-ink-1:hover{color:var(--text-1)}.hover\:underline:hover{text-decoration-line:underline}.hover\:shadow-pop:hover{--tw-shadow:0 12px 32px var(--tw-shadow-color,#10182829), 0 2px 8px var(--tw-shadow-color,#10182814);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:brightness-110:hover{--tw-brightness:brightness(110%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.hover\:brightness-\[0\.97\]:hover{--tw-brightness:brightness(.97);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}}.focus\:border-brand:focus{border-color:var(--brand)}.focus\:outline-none:focus{--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-45:disabled{opacity:.45}.disabled\:opacity-50:disabled{opacity:.5}@media not all and (min-width:64rem){.max-lg\:fixed{position:fixed}.max-lg\:inset-y-0{inset-block:0}.max-lg\:left-0{left:0}.max-lg\:z-40{z-index:40}.max-lg\:-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.max-lg\:translate-x-0{--tw-translate-x:0px;translate:var(--tw-translate-x) var(--tw-translate-y)}.max-lg\: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))}}@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\:grid-cols-\[1fr_130px_120px_1fr_28px\]{grid-template-columns:1fr 130px 120px 1fr 28px}.sm\:grid-cols-\[200px_1fr\]{grid-template-columns:200px 1fr}}@media(min-width:64rem){.lg\:hidden{display:none}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}}:root{--bg:#f4f5f7;--surface:#fff;--surface-2:#f9fafb;--surface-3:#eff1f4;--border:#e5e8ec;--border-strong:#ccd3dc;--text-1:#15181d;--text-2:#454e5c;--text-3:#7e8798;--brand:#3056d3;--brand-hover:#2748b8;--brand-subtle:#eef2ff;--brand-text:#2748b8;--success:#15803d;--success-subtle:#ecfdf3;--warning:#b45309;--warning-subtle:#fffaeb;--danger:#dc2626;--danger-subtle:#fef3f2}.dark{--bg:#0e1013;--surface:#15181e;--surface-2:#1a1e25;--surface-3:#22272f;--border:#262c35;--border-strong:#3a424f;--text-1:#e8ebf1;--text-2:#a2abb9;--text-3:#6d7684;--brand:#7c93f5;--brand-hover:#94a8f8;--brand-subtle:#1c2340;--brand-text:#a3b4f8;--success:#4ade80;--success-subtle:#12251a;--warning:#fbbf24;--warning-subtle:#2a2213;--danger:#f87171;--danger-subtle:#2c1618}html,body,#root{height:100%}body{background:var(--bg);color:var(--text-1);letter-spacing:.005em;-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;font-family:system-ui,Segoe UI Variable Text,Segoe UI,Microsoft YaHei UI,Microsoft YaHei,PingFang SC,sans-serif;font-size:14px;line-height:1.55}h1,h2,h3{letter-spacing:-.01em;text-wrap:balance}.num{font-variant-numeric:tabular-nums;font-feature-settings:"tnum" 1}::selection{background:var(--brand)}@supports (color:color-mix(in lab,red,red)){::selection{background:color-mix(in srgb,var(--brand) 22%,transparent)}}*{scrollbar-width:thin;scrollbar-color:var(--border-strong) transparent}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-thumb{background:var(--border-strong);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--text-3)}::-webkit-scrollbar-track{background:0 0}:focus-visible{outline:2px solid var(--brand)}@supports (color:color-mix(in lab,red,red)){:focus-visible{outline:2px solid color-mix(in srgb,var(--brand) 55%,transparent)}}:focus-visible{outline-offset:1px}.animate-in{animation:.18s ease-out fp-fade-slide-in}@keyframes fp-fade-slide-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input[type=number]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}@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-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-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-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@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:"";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:"";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:"";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-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@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}@keyframes pulse{50%{opacity:.5}} diff --git a/sync-server/www/assets/index-BunBoxtn.js b/sync-server/www/assets/index-BunBoxtn.js deleted file mode 100644 index a63f611..0000000 --- a/sync-server/www/assets/index-BunBoxtn.js +++ /dev/null @@ -1,296 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/DashboardPage-6WjCreWK.js","assets/card-CgBa5fs5.js","assets/useChart-CwGNJ-9_.js","assets/echarts-BIWefrIc.js","assets/GradesPage-F7CyPrhz.js","assets/TypesPage-CxfVqKEr.js","assets/TaxonomyPage-B15FwZVO.js"])))=>i.map(i=>d[i]); -var v0=n=>{throw TypeError(n)};var Bf=(n,r,s)=>r.has(n)||v0("Cannot "+s);var E=(n,r,s)=>(Bf(n,r,"read from private field"),s?s.call(n):r.get(n)),fe=(n,r,s)=>r.has(n)?v0("Cannot add the same private member more than once"):r instanceof WeakSet?r.add(n):r.set(n,s),W=(n,r,s,c)=>(Bf(n,r,"write to private field"),c?c.call(n,s):r.set(n,s),s),Ee=(n,r,s)=>(Bf(n,r,"access private method"),s);var Ls=(n,r,s,c)=>({set _(f){W(n,r,f,s)},get _(){return E(n,r,c)}});(function(){const r=document.createElement("link").relList;if(r&&r.supports&&r.supports("modulepreload"))return;for(const f of document.querySelectorAll('link[rel="modulepreload"]'))c(f);new MutationObserver(f=>{for(const h of f)if(h.type==="childList")for(const d of h.addedNodes)d.tagName==="LINK"&&d.rel==="modulepreload"&&c(d)}).observe(document,{childList:!0,subtree:!0});function s(f){const h={};return f.integrity&&(h.integrity=f.integrity),f.referrerPolicy&&(h.referrerPolicy=f.referrerPolicy),f.crossOrigin==="use-credentials"?h.credentials="include":f.crossOrigin==="anonymous"?h.credentials="omit":h.credentials="same-origin",h}function c(f){if(f.ep)return;f.ep=!0;const h=s(f);fetch(f.href,h)}})();function bg(n){return n&&n.__esModule&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n}var Qf={exports:{}},Zu={};/** - * @license React - * react-jsx-runtime.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var g0;function B2(){if(g0)return Zu;g0=1;var n=Symbol.for("react.transitional.element"),r=Symbol.for("react.fragment");function s(c,f,h){var d=null;if(h!==void 0&&(d=""+h),f.key!==void 0&&(d=""+f.key),"key"in f){h={};for(var v in f)v!=="key"&&(h[v]=f[v])}else h=f;return f=h.ref,{$$typeof:n,type:c,key:d,ref:f!==void 0?f:null,props:h}}return Zu.Fragment=r,Zu.jsx=s,Zu.jsxs=s,Zu}var p0;function Q2(){return p0||(p0=1,Qf.exports=B2()),Qf.exports}var y=Q2(),Gf={exports:{}},pe={};/** - * @license React - * react.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var b0;function G2(){if(b0)return pe;b0=1;var n=Symbol.for("react.transitional.element"),r=Symbol.for("react.portal"),s=Symbol.for("react.fragment"),c=Symbol.for("react.strict_mode"),f=Symbol.for("react.profiler"),h=Symbol.for("react.consumer"),d=Symbol.for("react.context"),v=Symbol.for("react.forward_ref"),b=Symbol.for("react.suspense"),g=Symbol.for("react.memo"),x=Symbol.for("react.lazy"),p=Symbol.for("react.activity"),z=Symbol.for("react.view_transition"),q=Symbol.iterator;function G(N){return N===null||typeof N!="object"?null:(N=q&&N[q]||N["@@iterator"],typeof N=="function"?N:null)}var L={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},U=Object.assign,Q={};function Y(N,B,te){this.props=N,this.context=B,this.refs=Q,this.updater=te||L}Y.prototype.isReactComponent={},Y.prototype.setState=function(N,B){if(typeof N!="object"&&typeof N!="function"&&N!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,N,B,"setState")},Y.prototype.forceUpdate=function(N){this.updater.enqueueForceUpdate(this,N,"forceUpdate")};function Z(){}Z.prototype=Y.prototype;function I(N,B,te){this.props=N,this.context=B,this.refs=Q,this.updater=te||L}var K=I.prototype=new Z;K.constructor=I,U(K,Y.prototype),K.isPureReactComponent=!0;var ce=Array.isArray;function X(){}var M={H:null,A:null,T:null,S:null},ae=Object.prototype.hasOwnProperty;function ge(N,B,te){var se=te.ref;return{$$typeof:n,type:N,key:B,ref:se!==void 0?se:null,props:te}}function P(N,B){return ge(N.type,B,N.props)}function he(N){return typeof N=="object"&&N!==null&&N.$$typeof===n}function Je(N){var B={"=":"=0",":":"=2"};return"$"+N.replace(/[=:]/g,function(te){return B[te]})}var D=/\/+/g;function ee(N,B){return typeof N=="object"&&N!==null&&N.key!=null?Je(""+N.key):B.toString(36)}function V(N){switch(N.status){case"fulfilled":return N.value;case"rejected":throw N.reason;default:switch(typeof N.status=="string"?N.then(X,X):(N.status="pending",N.then(function(B){N.status==="pending"&&(N.status="fulfilled",N.value=B)},function(B){N.status==="pending"&&(N.status="rejected",N.reason=B)})),N.status){case"fulfilled":return N.value;case"rejected":throw N.reason}}throw N}function $(N,B,te,se,ze){var me=typeof N;(me==="undefined"||me==="boolean")&&(N=null);var Ae=!1;if(N===null)Ae=!0;else switch(me){case"bigint":case"string":case"number":Ae=!0;break;case"object":switch(N.$$typeof){case n:case r:Ae=!0;break;case x:return Ae=N._init,$(Ae(N._payload),B,te,se,ze)}}if(Ae)return ze=ze(N),Ae=se===""?"."+ee(N,0):se,ce(ze)?(te="",Ae!=null&&(te=Ae.replace(D,"$&/")+"/"),$(ze,B,te,"",function(Qt){return Qt})):ze!=null&&(he(ze)&&(ze=P(ze,te+(ze.key==null||N&&N.key===ze.key?"":(""+ze.key).replace(D,"$&/")+"/")+Ae)),B.push(ze)),1;Ae=0;var ue=se===""?".":se+":";if(ce(N))for(var ye=0;ye>>1,J=V[Ue];if(0>>1;Uef(zl,de))Nf(B,zl)?(V[Ue]=B,V[N]=de,Ue=N):(V[Ue]=zl,V[al]=de,Ue=al);else if(Nf(B,de))V[Ue]=B,V[N]=de,Ue=N;else break e}}return $}function f(V,$){var de=V.sortIndex-$.sortIndex;return de!==0?de:V.id-$.id}if(n.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var h=performance;n.unstable_now=function(){return h.now()}}else{var d=Date,v=d.now();n.unstable_now=function(){return d.now()-v}}var b=[],g=[],x=1,p=null,z=3,q=!1,G=!1,L=!1,U=!1,Q=typeof setTimeout=="function"?setTimeout:null,Y=typeof clearTimeout=="function"?clearTimeout:null,Z=typeof setImmediate<"u"?setImmediate:null;function I(V){for(var $=s(g);$!==null;){if($.callback===null)c(g);else if($.startTime<=V)c(g),$.sortIndex=$.expirationTime,r(b,$);else break;$=s(g)}}function K(V){if(L=!1,I(V),!G)if(s(b)!==null)G=!0,ce||(ce=!0,he());else{var $=s(g);$!==null&&ee(K,$.startTime-V)}}var ce=!1,X=-1,M=5,ae=-1;function ge(){return U?!0:!(n.unstable_now()-aeV&&ge());){var Ue=p.callback;if(typeof Ue=="function"){p.callback=null,z=p.priorityLevel;var J=Ue(p.expirationTime<=V);if(V=n.unstable_now(),typeof J=="function"){p.callback=J,I(V),$=!0;break t}p===s(b)&&c(b),I(V)}else c(b);p=s(b)}if(p!==null)$=!0;else{var Dt=s(g);Dt!==null&&ee(K,Dt.startTime-V),$=!1}}break e}finally{p=null,z=de,q=!1}$=void 0}}finally{$?he():ce=!1}}}var he;if(typeof Z=="function")he=function(){Z(P)};else if(typeof MessageChannel<"u"){var Je=new MessageChannel,D=Je.port2;Je.port1.onmessage=P,he=function(){D.postMessage(null)}}else he=function(){Q(P,0)};function ee(V,$){X=Q(function(){V(n.unstable_now())},$)}n.unstable_IdlePriority=5,n.unstable_ImmediatePriority=1,n.unstable_LowPriority=4,n.unstable_NormalPriority=3,n.unstable_Profiling=null,n.unstable_UserBlockingPriority=2,n.unstable_cancelCallback=function(V){V.callback=null},n.unstable_forceFrameRate=function(V){0>V||125Ue?(V.sortIndex=de,r(g,V),s(b)===null&&V===s(g)&&(L?(Y(X),X=-1):L=!0,ee(K,de-Ue))):(V.sortIndex=J,r(b,V),G||q||(G=!0,ce||(ce=!0,he()))),V},n.unstable_shouldYield=ge,n.unstable_wrapCallback=function(V){var $=z;return function(){var de=z;z=$;try{return V.apply(this,arguments)}finally{z=de}}}})(Xf)),Xf}var E0;function X2(){return E0||(E0=1,Vf.exports=V2()),Vf.exports}var Kf={exports:{}},Et={};/** - * @license React - * react-dom.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var _0;function K2(){if(_0)return Et;_0=1;var n=Sd();function r(x){var p="https://react.dev/errors/"+x;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(r){console.error(r)}}return n(),Kf.exports=K2(),Kf.exports}/** - * @license React - * react-dom-client.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var N0;function Z2(){if(N0)return Ju;N0=1;var n=X2(),r=Sd(),s=xg();function c(e){var t="https://react.dev/errors/"+e;if(1Gn||(e.current=ma[Gn],ma[Gn]=null,Gn--)}function Xe(e,t){Gn++,ma[Gn]=e.current,e.current=t}var Rl=Ol(null),Ii=Ol(null),ya=Ol(null),cr=Ol(null);function or(e,t){switch(Xe(ya,t),Xe(Ii,e),Xe(Rl,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?Nv(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=Nv(t),e=Cv(t,e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}yt(Rl),Xe(Rl,e)}function Yn(){yt(Rl),yt(Ii),yt(ya)}function nc(e){var t=e.memoizedState;t!==null&&(wi._currentValue=t.memoizedState,Xe(cr,e)),t=Rl.current;var l=Cv(t,e.type);t!==l&&(Xe(Ii,e),Xe(Rl,l))}function fr(e){Ii.current===e&&(yt(Rl),yt(Ii)),cr.current===e&&(yt(cr),wi._currentValue=Qt)}var ic,Kd;function va(e){if(ic===void 0)try{throw Error()}catch(l){var t=l.stack.trim().match(/\n( *(at )?)/);ic=t&&t[1]||"",Kd=-1)":-1i||S[a]!==R[i]){var j=` -`+S[a].replace(" at new "," at ");return e.displayName&&j.includes("")&&(j=j.replace("",e.displayName)),j}while(1<=a&&0<=i);break}}}finally{uc=!1,Error.prepareStackTrace=l}return(l=e?e.displayName||e.name:"")?va(l):""}function Vp(e,t){switch(e.tag){case 26:case 27:case 5:return va(e.type);case 16:return va("Lazy");case 13:return e.child!==t&&t!==null?va("Suspense Fallback"):va("Suspense");case 19:return va("SuspenseList");case 0:case 15:return rc(e.type,!1);case 11:return rc(e.type.render,!1);case 1:return rc(e.type,!0);case 31:return va("Activity");case 30:return va("ViewTransition");default:return""}}function Zd(e){try{var t="",l=null;do t+=Vp(e,l),l=e,e=e.return;while(e);return t}catch(a){return` -Error generating stack: `+a.message+` -`+a.stack}}var sc=Object.prototype.hasOwnProperty,cc=n.unstable_scheduleCallback,oc=n.unstable_cancelCallback,Xp=n.unstable_shouldYield,Kp=n.unstable_requestPaint,Gt=n.unstable_now,Zp=n.unstable_getCurrentPriorityLevel,Jd=n.unstable_ImmediatePriority,Fd=n.unstable_UserBlockingPriority,dr=n.unstable_NormalPriority,Jp=n.unstable_LowPriority,$d=n.unstable_IdlePriority,Fp=n.log,$p=n.unstable_setDisableYieldValue,eu=null,Yt=null;function ga(e){if(typeof Fp=="function"&&$p(e),Yt&&typeof Yt.setStrictMode=="function")try{Yt.setStrictMode(eu,e)}catch{}}var Vt=Math.clz32?Math.clz32:Ip,Wp=Math.log,Pp=Math.LN2;function Ip(e){return e>>>=0,e===0?32:31-(Wp(e)/Pp|0)|0}var hr=256,mr=262144,yr=4194304;function tn(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&-e;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function vr(e,t,l){var a=e.pendingLanes;if(a===0)return 0;var i=0,u=e.suspendedLanes,o=e.pingedLanes;e=e.warmLanes;var m=a&134217727;return m!==0?(a=m&~u,a!==0?i=tn(a):(o&=m,o!==0?i=tn(o):l||(l=m&~e,l!==0&&(i=tn(l))))):(m=a&~u,m!==0?i=tn(m):o!==0?i=tn(o):l||(l=a&~e,l!==0&&(i=tn(l)))),i===0?0:t!==0&&t!==i&&(t&u)===0&&(u=i&-i,l=t&-t,u>=l||u===32&&(l&4194048)!==0)?t:i}function tu(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function Wd(e,t){(t&8)!==0&&(t|=t&32);var l=e.entangledLanes;if(l!==0)for(e=e.entanglements,l&=t;0l;l++)t.push(e);return t}function lu(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function t1(e,t,l,a,i,u){var o=e.pendingLanes;e.pendingLanes=l,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=l,e.entangledLanes&=l,e.errorRecoveryDisabledLanes&=l,e.shellSuspendCounter=0;var m=e.entanglements,S=e.expirationTimes,R=e.hiddenUpdates;for(l=o&~l;0"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Sc=!1;if(Fl)try{var uu={};Object.defineProperty(uu,"passive",{get:function(){Sc=!0}}),window.addEventListener("test",uu,uu),window.removeEventListener("test",uu,uu)}catch{Sc=!1}var pa=null,Ec=null,Er=null;function Sh(){if(Er)return Er;var e,t=Ec,l=t.length,a,i="value"in pa?pa.value:pa.textContent,u=i.length;for(e=0;e=cu),zh=" ",Oh=!1;function Rh(e,t){switch(e){case"keyup":return H1.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function wh(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Pn=!1;function L1(e,t){switch(e){case"compositionend":return wh(t);case"keypress":return t.which!==32?null:(Oh=!0,zh);case"textInput":return e=t.data,e===zh&&Oh?null:e;default:return null}}function B1(e,t){if(Pn)return e==="compositionend"||!zc&&Rh(e,t)?(e=Sh(),Er=Ec=pa=null,Pn=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function qh(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function Lh(e,t){var l=qh(e);e=0;for(var a;l;){if(l.nodeType===3){if(a=e+l.textContent.length,e<=t&&a>=t)return{node:l,offset:t-e};e=a}e:{for(;l;){if(l.nextSibling){l=l.nextSibling;break e}l=l.parentNode}l=void 0}l=qh(l)}}function Bh(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Bh(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Qh(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=wc(e.document);t instanceof e.HTMLIFrameElement;){try{var l=typeof t.contentWindow.location.href=="string"}catch{l=!1}if(l)e=t.contentWindow;else break;t=wc(e.document)}return t}function Ac(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}var J1=Fl&&"documentMode"in document&&11>=document.documentMode,In=null,jc=null,hu=null,Mc=!1;function Gh(e,t,l){var a=l.window===l?l.document:l.nodeType===9?l:l.ownerDocument;Mc||In==null||In!==wc(a)||(a=In,"selectionStart"in a&&Ac(a)?a={start:a.selectionStart,end:a.selectionEnd}:(a=(a.ownerDocument&&a.ownerDocument.defaultView||window).getSelection(),a={anchorNode:a.anchorNode,anchorOffset:a.anchorOffset,focusNode:a.focusNode,focusOffset:a.focusOffset}),hu&&du(hu,a)||(hu=a,a=zs(jc,"onSelect"),0>=o,i-=o,Al=1<<32-Vt(t)+i|l<ve?(ut=oe,oe=null):ut=oe.sibling;var je=C(O,oe,w[ve],k);if(je===null){oe===null&&(oe=ut);break}e&&oe&&je.alternate===null&&t(O,oe),_=u(je,_,ve),Re===null?le=je:Re.sibling=je,Re=je,oe=ut}if(ve===w.length)return l(O,oe),_e&&Il(O,ve),le;if(oe===null){for(;veve?(ut=oe,oe=null):ut=oe.sibling;var Ya=C(O,oe,je.value,k);if(Ya===null){oe===null&&(oe=ut);break}e&&oe&&Ya.alternate===null&&t(O,oe),_=u(Ya,_,ve),Re===null?le=Ya:Re.sibling=Ya,Re=Ya,oe=ut}if(je.done)return l(O,oe),_e&&Il(O,ve),le;if(oe===null){for(;!je.done;ve++,je=w.next())je=H(O,je.value,k),je!==null&&(_=u(je,_,ve),Re===null?le=je:Re.sibling=je,Re=je);return _e&&Il(O,ve),le}for(oe=a(oe);!je.done;ve++,je=w.next())je=A(oe,O,ve,je.value,k),je!==null&&(e&&(ut=je.alternate,ut!==null&&oe.delete(ut.key===null?ve:ut.key)),_=u(je,_,ve),Re===null?le=je:Re.sibling=je,Re=je);return e&&oe.forEach(function(L2){return t(O,L2)}),_e&&Il(O,ve),le}function Se(O,_,w,k){if(typeof w=="object"&&w!==null&&w.type===P&&w.key===null&&w.props.ref===void 0&&(w=w.props.children),typeof w=="object"&&w!==null){switch(w.$$typeof){case ae:e:{for(var le=w.key;_!==null;){if(_.key===le){if(le=w.type,le===P){if(_.tag===7){l(O,_.sibling),k=i(_,w.props.children),Ta(k,w),k.return=O,O=k;break e}}else if(_.elementType===le||typeof le=="object"&&le!==null&&le.$$typeof===J&&yn(le)===_.type){l(O,_.sibling),k=i(_,w.props),Ta(k,w),k.return=O,O=k;break e}l(O,_);break}else t(O,_);_=_.sibling}w.type===P?(k=sn(w.props.children,O.mode,k,w.key),Ta(k,w),k.return=O,O=k):(k=jr(w.type,w.key,w.props,null,O.mode,k),Ta(k,w),k.return=O,O=k)}return o(O);case ge:e:{for(le=w.key;_!==null;){if(_.key===le)if(_.tag===4&&_.stateNode.containerInfo===w.containerInfo&&_.stateNode.implementation===w.implementation){l(O,_.sibling),k=i(_,w.children||[]),k.return=O,O=k;break e}else{l(O,_);break}else t(O,_);_=_.sibling}k=Bc(w,O.mode,k),k.return=O,O=k}return o(O);case J:return w=yn(w),Se(O,_,w,k)}if(Ae(w))return F(O,_,w,k);if(se(w)){if(le=se(w),typeof le!="function")throw Error(c(150));return w=le.call(w),re(O,_,w,k)}if(typeof w.then=="function")return Se(O,_,Gr(w),k);if(w.$$typeof===ee)return Se(O,_,qr(O,w),k);Yr(O,w)}return typeof w=="string"&&w!==""||typeof w=="number"||typeof w=="bigint"?(w=""+w,_!==null&&_.tag===6?(l(O,_.sibling),k=i(_,w),k.return=O,O=k):(l(O,_),k=Lc(w,O.mode,k),k.return=O,O=k),o(O)):l(O,_)}return function(O,_,w,k){try{bu=0;var le=Se(O,_,w,k);return si=null,le}catch(oe){if(oe===ri||oe===Br)throw oe;var Re=kt(29,oe,null,O.mode);return Re.lanes=k,Re.return=O,Re}finally{}}}var gn=dm(!0),hm=dm(!1),Na=!1;function $c(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Wc(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function Ca(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function za(e,t,l){var a=e.updateQueue;if(a===null)return null;if(a=a.shared,(ke&2)!==0){var i=a.pending;return i===null?t.next=t:(t.next=i.next,i.next=t),a.pending=t,t=Ar(e),$h(e,null,l),t}return wr(e,a,t,l),Ar(e)}function xu(e,t,l){if(t=t.updateQueue,t!==null&&(t=t.shared,(l&4194048)!==0)){var a=t.lanes;a&=e.pendingLanes,l|=a,t.lanes=l,eh(e,l)}}function Pc(e,t){var l=e.updateQueue,a=e.alternate;if(a!==null&&(a=a.updateQueue,l===a)){var i=null,u=null;if(l=l.firstBaseUpdate,l!==null){do{var o={lane:l.lane,tag:l.tag,payload:l.payload,callback:null,next:null};u===null?i=u=o:u=u.next=o,l=l.next}while(l!==null);u===null?i=u=t:u=u.next=t}else i=u=t;l={baseState:a.baseState,firstBaseUpdate:i,lastBaseUpdate:u,shared:a.shared,callbacks:a.callbacks},e.updateQueue=l;return}e=l.lastBaseUpdate,e===null?l.firstBaseUpdate=t:e.next=t,l.lastBaseUpdate=t}var Ic=!1;function Su(){if(Ic){var e=ui;if(e!==null)throw e}}function Eu(e,t,l,a){Ic=!1;var i=e.updateQueue;Na=!1;var u=i.firstBaseUpdate,o=i.lastBaseUpdate,m=i.shared.pending;if(m!==null){i.shared.pending=null;var S=m,R=S.next;S.next=null,o===null?u=R:o.next=R,o=S;var j=e.alternate;j!==null&&(j=j.updateQueue,m=j.lastBaseUpdate,m!==o&&(m===null?j.firstBaseUpdate=R:m.next=R,j.lastBaseUpdate=S))}if(u!==null){var H=i.baseState;o=0,j=R=S=null,m=u;do{var C=m.lane&-536870913,A=C!==m.lane;if(A?(Oe&C)===C:(a&C)===C){C!==0&&C===hn&&(Ic=!0),j!==null&&(j=j.next={lane:0,tag:m.tag,payload:m.payload,callback:null,next:null});e:{var F=e,re=m;C=t;var Se=l;switch(re.tag){case 1:if(F=re.payload,typeof F=="function"){H=F.call(Se,H,C);break e}H=F;break e;case 3:F.flags=F.flags&-65537|128;case 0:if(F=re.payload,C=typeof F=="function"?F.call(Se,H,C):F,C==null)break e;H=X({},H,C);break e;case 2:Na=!0}}C=m.callback,C!==null&&(e.flags|=64,A&&(e.flags|=8192),A=i.callbacks,A===null?i.callbacks=[C]:A.push(C))}else A={lane:C,tag:m.tag,payload:m.payload,callback:m.callback,next:null},j===null?(R=j=A,S=H):j=j.next=A,o|=C;if(m=m.next,m===null){if(m=i.shared.pending,m===null)break;A=m,m=A.next,A.next=null,i.lastBaseUpdate=A,i.shared.pending=null}}while(!0);j===null&&(S=H),i.baseState=S,i.firstBaseUpdate=R,i.lastBaseUpdate=j,u===null&&(i.shared.lanes=0),Da|=o,e.lanes=o,e.memoizedState=H}}function mm(e,t){if(typeof e!="function")throw Error(c(191,e));e.call(t)}function ym(e,t){var l=e.callbacks;if(l!==null)for(e.callbacks=null,e=0;eu?u:8;var o=ue.T,m={};m.types=o!==null?o.types:null,ue.T=m,xo(e,!1,t,l);try{var S=i(),R=ue.S;if(R!==null&&R(m,S),S!==null&&typeof S=="object"&&typeof S.then=="function"){var j=ib(S,a);Cu(e,t,j,Wt(e))}else Cu(e,t,a,Wt(e))}catch(H){Cu(e,t,{then:function(){},status:"rejected",reason:H},Wt())}finally{ye.p=u,o!==null&&m.types!==null&&(o.types=m.types),ue.T=o}}function fb(){}function po(e,t,l,a){if(e.tag!==5)throw Error(c(476));var i=Zm(e).queue;Km(e,i,t,Qt,l===null?fb:function(){return Jm(e),l(a)})}function Zm(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:Qt,baseState:Qt,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:aa,lastRenderedState:Qt},next:null};var l={};return t.next={memoizedState:l,baseState:l,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:aa,lastRenderedState:l},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function Jm(e){var t=Zm(e);t.next===null&&(t=e.alternate.memoizedState),Cu(e,t.next.queue,{},Wt())}function bo(){return gt(wi)}function Fm(){return lt().memoizedState}function $m(){return lt().memoizedState}function db(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var l=Wt();e=Ca(l);var a=za(t,e,l);a!==null&&(Bt(a,t,l),xu(a,t,l)),t={cache:Kc()},e.payload=t;return}t=t.return}}function hb(e,t,l){var a=Wt();l={lane:a,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null},Ir(e)?Pm(t,l):(l=Hc(e,t,l,a),l!==null&&(Bt(l,e,a),Im(l,t,a)))}function Wm(e,t,l){var a=Wt();Cu(e,t,l,a)}function Cu(e,t,l,a){var i={lane:a,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null};if(Ir(e))Pm(t,i);else{var u=e.alternate;if(e.lanes===0&&(u===null||u.lanes===0)&&(u=t.lastRenderedReducer,u!==null))try{var o=t.lastRenderedState,m=u(o,l);if(i.hasEagerState=!0,i.eagerState=m,Kt(m,o))return wr(e,t,i,0),Ve===null&&Rr(),!1}catch{}finally{}if(l=Hc(e,t,i,a),l!==null)return Bt(l,e,a),Im(l,t,a),!0}return!1}function xo(e,t,l,a){if(a={lane:2,revertLane:ff(),gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null},Ir(e)){if(t)throw Error(c(479))}else t=Hc(e,l,a,2),t!==null&&Bt(t,e,2)}function Ir(e){var t=e.alternate;return e===xe||t!==null&&t===xe}function Pm(e,t){ci=Kr=!0;var l=e.pending;l===null?t.next=t:(t.next=l.next,l.next=t),e.pending=t}function Im(e,t,l){if((l&4194048)!==0){var a=t.lanes;a&=e.pendingLanes,l|=a,t.lanes=l,eh(e,l)}}var es={readContext:gt,use:Fr,useCallback:et,useContext:et,useEffect:et,useImperativeHandle:et,useLayoutEffect:et,useInsertionEffect:et,useMemo:et,useReducer:et,useRef:et,useState:et,useDebugValue:et,useDeferredValue:et,useTransition:et,useSyncExternalStore:et,useId:et,useHostTransitionStatus:et,useFormState:et,useActionState:et,useOptimistic:et,useMemoCache:et,useCacheRefresh:et,useEffectEvent:et},ey={readContext:gt,use:Fr,useCallback:function(e,t){return zt().memoizedState=[e,t===void 0?null:t],e},useContext:gt,useEffect:Hm,useImperativeHandle:function(e,t,l){l=l!=null?l.concat([e]):null,Wr(4194308,4,Qm.bind(null,t,e),l)},useLayoutEffect:function(e,t){return Wr(4194308,4,e,t)},useInsertionEffect:function(e,t){Wr(4,2,e,t)},useMemo:function(e,t){var l=zt();t=t===void 0?null:t;var a=e();if(pn){ga(!0);try{e()}finally{ga(!1)}}return l.memoizedState=[a,t],a},useReducer:function(e,t,l){var a=zt();if(l!==void 0){var i=l(t);if(pn){ga(!0);try{l(t)}finally{ga(!1)}}}else i=t;return a.memoizedState=a.baseState=i,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:i},a.queue=e,e=e.dispatch=hb.bind(null,xe,e),[a.memoizedState,e]},useRef:function(e){var t=zt();return e={current:e},t.memoizedState=e},useState:function(e){e=ho(e);var t=e.queue,l=Wm.bind(null,xe,t);return t.dispatch=l,[e.memoizedState,l]},useDebugValue:vo,useDeferredValue:function(e,t){var l=zt();return go(l,e,t)},useTransition:function(){var e=ho(!1);return e=Km.bind(null,xe,e.queue,!0,!1),zt().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,l){var a=xe,i=zt();if(_e){if(l===void 0)throw Error(c(407));l=l()}else{if(l=t(),Ve===null)throw Error(c(349));(Oe&127)!==0||Sm(a,t,l)}i.memoizedState=l;var u={value:l,getSnapshot:t};return i.queue=u,Hm(_m.bind(null,a,u,e),[e]),a.flags|=2048,fi(9,{destroy:void 0},Em.bind(null,a,u,l,t),null),l},useId:function(){var e=zt(),t=Ve.identifierPrefix;if(_e){var l=jl,a=Al;l=(a&~(1<<32-Vt(a)-1)).toString(32)+l,t="_"+t+"R_"+l,l=Zr++,0<\/script>",u=u.removeChild(u.firstChild);break;case"select":u=typeof a.is=="string"?o.createElement("select",{is:a.is}):o.createElement("select"),a.multiple?u.multiple=!0:a.size&&(u.size=a.size);break;default:u=typeof a.is=="string"?o.createElement(i,{is:a.is}):o.createElement(i)}}u[vt]=t,u[Ut]=a;e:for(o=t.child;o!==null;){if(o.tag===5||o.tag===6)u.appendChild(o.stateNode);else if(o.tag!==4&&o.tag!==27&&o.child!==null){o.child.return=o,o=o.child;continue}if(o===t)break e;for(;o.sibling===null;){if(o.return===null||o.return===t)break e;o=o.return}o.sibling.return=o.return,o=o.sibling}t.stateNode=u;e:switch(St(u,i,a),i){case"button":case"input":case"select":case"textarea":a=!!a.autoFocus;break e;case"img":a=!0;break e;default:a=!1}a&&ia(t)}}return Ze(t),t.subtreeFlags&=-33554433,Mo(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,l),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==a&&ia(t);else{if(typeof a!="string"&&t.stateNode===null)throw Error(c(166));if(e=ya.current,ii(t)){if(e=t.stateNode,l=t.memoizedProps,a=null,i=dt,i!==null)switch(i.tag){case 27:case 5:a=i.memoizedProps}e[vt]=t,e=!!(e.nodeValue===l||a!==null&&a.suppressHydrationWarning===!0||_v(e.nodeValue,l)),e||Ea(t,!0)}else e=Lu(e).createTextNode(a),e[vt]=t,t.stateNode=e}return Ze(t),null;case 31:if(l=t.memoizedState,e===null||e.memoizedState!==null){if(a=ii(t),l!==null){if(e===null){if(!a)throw Error(c(318));if(e=t.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(c(557));e[vt]=t}else cn(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;Ze(t),e=!1}else l=Yc(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=l),e=!0;if(!e)return t.flags&256?(Zt(t),t):(Zt(t),null);if((t.flags&128)!==0)throw Error(c(558))}return Ze(t),null;case 13:if(a=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(i=ii(t),a!==null&&a.dehydrated!==null){if(e===null){if(!i)throw Error(c(318));if(i=t.memoizedState,i=i!==null?i.dehydrated:null,!i)throw Error(c(317));i[vt]=t}else cn(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;Ze(t),i=!1}else i=Yc(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=i),i=!0;if(!i)return t.flags&256?(Zt(t),t):(Zt(t),null)}return Zt(t),(t.flags&128)!==0?(t.lanes=l,t):(l=a!==null,e=e!==null&&e.memoizedState!==null,l&&(a=t.child,i=null,a.alternate!==null&&a.alternate.memoizedState!==null&&a.alternate.memoizedState.cachePool!==null&&(i=a.alternate.memoizedState.cachePool.pool),u=null,a.memoizedState!==null&&a.memoizedState.cachePool!==null&&(u=a.memoizedState.cachePool.pool),u!==i&&(a.flags|=2048)),l!==e&&l&&(t.child.flags|=8192),us(t,t.updateQueue),Ze(t),null);case 4:return Yn(),e===null&&yf(t.stateNode.containerInfo),t.flags|=67108864,Ze(t),null;case 10:return ta(t.type),Ze(t),null;case 19:if(ao(t),a=t.memoizedState,a===null)return Ze(t),null;if(i=(t.flags&128)!==0,u=a.rendering,u===null)if(i)Ou(a,!1);else{if(tt!==0||e!==null&&(e.flags&128)!==0)for(e=t.child;e!==null;){if(u=Xr(e),u!==null){for(t.flags|=128,Ou(a,!1),e=u.updateQueue,t.updateQueue=e,us(t,e),t.subtreeFlags=0,e=l,l=t.child;l!==null;)Wh(l,e),l=l.sibling;return _u(t,bt.current&1|2),_e&&Il(t,a.treeForkCount),t.child}e=e.sibling}a.tail!==null&&Gt()>ps&&(t.flags|=128,i=!0,Ou(a,!1),t.lanes=4194304)}else{if(!i)if(e=Xr(u),e!==null){if(t.flags|=128,i=!0,e=e.updateQueue,t.updateQueue=e,us(t,e),Ou(a,!0),a.tail===null&&a.tailMode!=="collapsed"&&a.tailMode!=="visible"&&!u.alternate&&!_e)return Ze(t),null}else 2*Gt()-a.renderingStartTime>ps&&l!==536870912&&(t.flags|=128,i=!0,Ou(a,!1),t.lanes=4194304);a.isBackwards?(u.sibling=t.child,t.child=u):(e=a.last,e!==null?e.sibling=u:t.child=u,a.last=u)}if(a.tail!==null){e=a.tail;e:{for(l=e;l!==null;){if(l.alternate!==null){l=!1;break e}l=l.sibling}l=!0}return a.rendering=e,a.tail=e.sibling,a.renderingStartTime=Gt(),e.sibling=null,u=bt.current,u=i?u&1|2:u&1,a.tailMode==="visible"||a.tailMode==="collapsed"||!l||_e?_u(t,u):(l=u,Xe(pt,t),Xe(bt,l),_t===null&&(_t=t)),_e&&Il(t,a.treeForkCount),e}return Ze(t),null;case 22:case 23:return Zt(t),to(),a=t.memoizedState!==null,e!==null?e.memoizedState!==null!==a&&(t.flags|=8192):a&&(t.flags|=8192),a?(l&536870912)!==0&&(t.flags&128)===0&&(Ze(t),t.subtreeFlags&6&&(t.flags|=8192)):Ze(t),l=t.updateQueue,l!==null&&us(t,l.retryQueue),l=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(l=e.memoizedState.cachePool.pool),a=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(a=t.memoizedState.cachePool.pool),a!==l&&(t.flags|=2048),e!==null&&yt(mn),null;case 24:return l=null,e!==null&&(l=e.memoizedState.cache),t.memoizedState.cache!==l&&(t.flags|=2048),ta(at),Ze(t),null;case 25:return null;case 30:return t.flags|=33554432,Ze(t),null}throw Error(c(156,t.tag))}function xb(e,t){switch(Qc(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return ta(at),Yn(),e=t.flags,(e&65536)!==0&&(e&128)===0?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return fr(t),null;case 31:if(t.memoizedState!==null){if(Zt(t),t.alternate===null)throw Error(c(340));cn()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(Zt(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(c(340));cn()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return ao(t),e=t.flags,e&65536?(t.flags=e&-65537|128,e=t.memoizedState,e!==null&&(e.rendering=null,e.tail=null),t.flags|=4,t):null;case 4:return Yn(),null;case 10:return ta(t.type),null;case 22:case 23:return Zt(t),to(),e!==null&&yt(mn),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return ta(at),null;case 25:return null;default:return null}}function Ny(e,t){switch(Qc(t),t.tag){case 3:ta(at),Yn();break;case 26:case 27:case 5:fr(t);break;case 4:Yn();break;case 31:t.memoizedState!==null&&Zt(t);break;case 13:Zt(t);break;case 19:ao(t);break;case 10:ta(t.type);break;case 22:case 23:Zt(t),to(),e!==null&&yt(mn);break;case 24:ta(at)}}function Ru(e,t){try{var l=t.updateQueue,a=l!==null?l.lastEffect:null;if(a!==null){var i=a.next;l=i;do{if((l.tag&e)===e){a=void 0;var u=l.create,o=l.inst;a=u(),o.destroy=a}l=l.next}while(l!==i)}}catch(m){Be(t,t.return,m)}}function Aa(e,t,l){try{var a=t.updateQueue,i=a!==null?a.lastEffect:null;if(i!==null){var u=i.next;a=u;do{if((a.tag&e)===e){var o=a.inst,m=o.destroy;if(m!==void 0){o.destroy=void 0,i=t;var S=l,R=m;try{R()}catch(j){Be(i,S,j)}}}a=a.next}while(a!==u)}}catch(j){Be(t,t.return,j)}}function Cy(e){var t=e.updateQueue;if(t!==null){var l=e.stateNode;try{ym(t,l)}catch(a){Be(e,e.return,a)}}}function zy(e,t,l){l.props=bn(e.type,e.memoizedProps),l.state=e.memoizedState;try{l.componentWillUnmount()}catch(a){Be(e,t,a)}}function Ml(e,t){try{var l=e.ref;if(l!==null){switch(e.tag){case 26:case 27:case 5:var a=e.stateNode;break;case 30:var i=e.stateNode,u=$l(e.memoizedProps,i);(i.ref===null||i.ref.name!==u)&&(i.ref=Dv(u)),a=i.ref;break;case 7:if(e.stateNode===null){var o=new Pt(e);p(e.child,!1,o2,o,void 0,void 0),e.stateNode=o}a=e.stateNode;break;default:a=e.stateNode}typeof l=="function"?e.refCleanup=l(a):l.current=a}}catch(m){Be(e,t,m)}}function xt(e,t){var l=e.ref,a=e.refCleanup;if(l!==null)if(typeof a=="function")try{a()}catch(i){Be(e,t,i)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof l=="function")try{l(null)}catch(i){Be(e,t,i)}else l.current=null}function rs(e,t){if((e.tag===5||e.tag===27||e.tag===6)&&e.alternate===null&&t!==null)for(var l=0;l title"))),St(a,t,l),a[vt]=e,ft(a),t=a;break e;case"link":if(u=Wv("link","href",i).get(t+(l.href||""))){for(o=0;oSe&&(o=Se,Se=re,re=o);var O=Lh(m,re),_=Lh(m,Se);if(O&&_&&(A.rangeCount!==1||A.anchorNode!==O.node||A.anchorOffset!==O.offset||A.focusNode!==_.node||A.focusOffset!==_.offset)){var w=H.createRange();w.setStart(O.node,O.offset),A.removeAllRanges(),re>Se?(A.addRange(w),A.extend(_.node,_.offset)):(w.setEnd(_.node,_.offset),A.addRange(w))}}}}for(H=[],A=m;A=A.parentNode;)A.nodeType===1&&H.push({element:A,left:A.scrollLeft,top:A.scrollTop});for(typeof m.focus=="function"&&m.focus(),m=0;ml?32:l,ue.T=null,l=ef,ef=null;var u=xl,o=Ll;if(Pe=0,_n=xl=null,Ll=0,(ke&6)!==0)throw Error(c(331));var m=ke;if(ke|=4,$y(u.current),Zy(u,u.current,o,l),ke=m,ku(0,!1),Yt&&typeof Yt.onPostCommitFiberRoot=="function")try{Yt.onPostCommitFiberRoot(eu,u)}catch{}return!0}finally{ye.p=i,ue.T=a,fv(e,t)}}function dv(e,t,l){t=ul(l,t),t=_o(e.stateNode,t,2),e=za(e,t,2),e!==null&&(lu(e,2),Bl(e))}function Be(e,t,l){if(e.tag===3)dv(e,e,l);else for(;t!==null;){if(t.tag===3){dv(t,e,l);break}else if(t.tag===1){var a=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof a.componentDidCatch=="function"&&(Ua===null||!Ua.has(a))){e=ul(l,e),l=sy(2),a=za(t,l,2),a!==null&&(cy(l,a,t,e),lu(a,2),Bl(a));break}}t=t.return}}function sf(e,t,l){var a=e.pingCache;if(a===null){a=e.pingCache=new Tb;var i=new Set;a.set(t,i)}else i=a.get(t),i===void 0&&(i=new Set,a.set(t,i));i.has(l)||(Wo=!0,i.add(l),e=jb.bind(null,e,t,l),t.then(e,e))}function jb(e,t,l){var a=e.pingCache;a!==null&&a.delete(t),e.pingedLanes|=e.suspendedLanes&l,e.warmLanes&=~l,Ve===e&&(Oe&l)===l&&((tt===4||tt===3&&(Oe&62914560)===Oe&&300>Gt()-gs)&&(ke&2)===0?Ei(e,0):vs|=l,gi===Oe&&(gi=0)),Bl(e)}function hv(e,t){t===0&&(t=Pd()),e=rn(e,t),e!==null&&(lu(e,t),Bl(e))}function Mb(e){var t=e.memoizedState,l=0;t!==null&&(l=t.retryLane),hv(e,l)}function Db(e,t){var l=0;switch(e.tag){case 31:case 13:var a=e.stateNode,i=e.memoizedState;i!==null&&(l=i.retryLane);break;case 19:a=e.stateNode;break;case 22:a=e.stateNode._retryCache;break;default:throw Error(c(314))}a!==null&&a.delete(t),hv(e,l)}function Ub(e,t){return cc(e,t)}var Ti=null,Ni=null,cf=!1,Ns=!1,of=!1,Ha=0;function Bl(e){e!==Ni&&e.next===null&&(Ni===null?Ti=Ni=e:Ni=Ni.next=e),Ns=!0,cf||(cf=!0,Hb())}function ku(e,t){if(!of&&Ns){of=!0;do for(var l=!1,a=Ti;a!==null;){if(e!==0){var i=a.pendingLanes;if(i===0)var u=0;else{var o=a.suspendedLanes,m=a.pingedLanes;u=(1<<31-Vt(42|e)+1)-1,u&=i&~(o&~m),u=u&201326741?u&201326741|1:u?u|2:0}u!==0&&(l=!0,gv(a,u))}else u=Oe,u=vr(a,a===Ve?u:0,a.cancelPendingCommit!==null||a.timeoutHandle!==-1),(u&3)===0||tu(a,u)||(l=!0,gv(a,u));a=a.next}while(l);of=!1}}function kb(){mv()}function mv(){Ns=cf=!1;var e=0;Ha!==0&&Jb()&&(e=Ha);for(var t=Gt(),l=null,a=Ti;a!==null;){var i=a.next,u=yv(a,t);u===0?(a.next=null,l===null?Ti=i:l.next=i,i===null&&(Ni=l)):(l=a,(e!==0||(u&3)!==0)&&(Ns=!0)),a=i}Pe!==0&&Pe!==5||ku(e),Ha!==0&&(Ha=0)}function yv(e,t){for(var l=e.suspendedLanes,a=e.pingedLanes,i=e.expirationTimes,u=e.pendingLanes&-62914561;0m)break;var j=S.transferSize,H=S.initiatorType;j&&Tv(H)&&(S=S.responseEnd,o+=j*(Sws){re.length=F;break}w=new Promise(e2.bind(w)),re.push(w)}}}if(0"u"?null:document;function Zv(e,t,l){var a=zi;if(a&&typeof t=="string"&&t){var i=nl(t);i='link[rel="'+e+'"][href="'+i+'"]',typeof l=="string"&&(i+='[crossorigin="'+l+'"]'),Kv.has(i)||(Kv.add(i),e={rel:e,crossOrigin:l,href:t},a.querySelector(i)===null&&(t=a.createElement("link"),St(t,"link",e),ft(t),a.head.appendChild(t)))}}function b2(e){ra.D(e),Zv("dns-prefetch",e,null)}function x2(e,t){ra.C(e,t),Zv("preconnect",e,t)}function S2(e,t,l){ra.L(e,t,l);var a=zi;if(a&&e&&t){var i='link[rel="preload"][as="'+nl(t)+'"]';t==="image"&&l&&l.imageSrcSet?(i+='[imagesrcset="'+nl(l.imageSrcSet)+'"]',typeof l.imageSizes=="string"&&(i+='[imagesizes="'+nl(l.imageSizes)+'"]')):i+='[href="'+nl(e)+'"]';var u=i;switch(t){case"style":u=Oi(e);break;case"script":u=Ri(e)}if(!(dl.has(u)||(e=X({rel:"preload",href:t==="image"&&l&&l.imageSrcSet?void 0:e,as:t},l),dl.set(u,e),a.querySelector(i)!==null||t==="style"&&a.querySelector(Qu(u))||t==="script"&&a.querySelector(Gu(u))))){var o=a.createElement("link");St(o,"link",e),t==="style"&&(o[gr]=!0,o.onload=o.onerror=function(){uh(o)}),ft(o),a.head.appendChild(o)}}}function E2(e,t){ra.m(e,t);var l=zi;if(l&&e){var a=t&&typeof t.as=="string"?t.as:"script",i='link[rel="modulepreload"][as="'+nl(a)+'"][href="'+nl(e)+'"]',u=i;switch(a){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":u=Ri(e)}if(!dl.has(u)&&(e=X({rel:"modulepreload",href:e},t),dl.set(u,e),l.querySelector(i)===null)){switch(a){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(l.querySelector(Gu(u)))return}a=l.createElement("link"),St(a,"link",e),ft(a),l.head.appendChild(a)}}}function _2(e,t,l){ra.S(e,t,l);var a=zi;if(a&&e){var i=Kn(a).hoistableStyles,u=Oi(e);t=t||"default";var o=i.get(u);if(!o){var m={loading:0,preload:null};if(o=a.querySelector(Qu(u)))m.loading=5;else{e=X({rel:"stylesheet",href:e,"data-precedence":t},l),(l=dl.get(u))&&Af(e,l);var S=o=a.createElement("link");ft(S),St(S,"link",e),S._p=new Promise(function(R,j){S.onload=R,S.onerror=j}),S.addEventListener("load",function(){m.loading|=1}),S.addEventListener("error",function(){m.loading|=2}),m.loading|=4,Os(o,t,a)}o={type:"stylesheet",instance:o,count:1,state:m},i.set(u,o)}}}function T2(e,t){ra.X(e,t);var l=zi;if(l&&e){var a=Kn(l).hoistableScripts,i=Ri(e),u=a.get(i);u||(u=l.querySelector(Gu(i)),u||(e=X({src:e,async:!0},t),(t=dl.get(i))&&jf(e,t),u=l.createElement("script"),ft(u),St(u,"link",e),l.head.appendChild(u)),u={type:"script",instance:u,count:1,state:null},a.set(i,u))}}function N2(e,t){ra.M(e,t);var l=zi;if(l&&e){var a=Kn(l).hoistableScripts,i=Ri(e),u=a.get(i);u||(u=l.querySelector(Gu(i)),u||(e=X({src:e,async:!0,type:"module"},t),(t=dl.get(i))&&jf(e,t),u=l.createElement("script"),ft(u),St(u,"link",e),l.head.appendChild(u)),u={type:"script",instance:u,count:1,state:null},a.set(i,u))}}function Jv(e,t,l,a){var i=(i=ya.current)?Bu(i):null;if(!i)throw Error(c(446));switch(e){case"meta":case"title":return null;case"style":return typeof l.precedence=="string"&&typeof l.href=="string"?(l=Oi(l.href),t=Kn(i).hoistableStyles,a=t.get(l),a||(a={type:"style",instance:null,count:0,state:null},t.set(l,a)),a):{type:"void",instance:null,count:0,state:null};case"link":if(l.rel==="stylesheet"&&typeof l.href=="string"&&typeof l.precedence=="string"){e=Oi(l.href);var u=Kn(i).hoistableStyles,o=u.get(e);if(o||(i=i.ownerDocument||i,o={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},u.set(e,o),(u=i.querySelector(Qu(e)))?u._p||(o.instance=u,o.state.loading=5):(u=dl.get(e),u||(u={rel:"preload",as:"style",href:l.href,crossOrigin:l.crossOrigin,integrity:l.integrity,media:l.media,hrefLang:l.hrefLang,referrerPolicy:l.referrerPolicy},dl.set(e,u)),C2(i,e,u,o.state))),t&&a===null)throw Error(c(528,""));return o}if(t&&a!==null)throw Error(c(529,""));return null;case"script":return t=l.async,l=l.src,typeof l=="string"&&t&&typeof t!="function"&&typeof t!="symbol"?(l=Ri(l),t=Kn(i).hoistableScripts,a=t.get(l),a||(a={type:"script",instance:null,count:0,state:null},t.set(l,a)),a):{type:"void",instance:null,count:0,state:null};default:throw Error(c(444,e))}}function Oi(e){return'href="'+nl(e)+'"'}function Qu(e){return'link[rel="stylesheet"]['+e+"]"}function Fv(e){return X({},e,{"data-precedence":e.precedence,precedence:null})}function C2(e,t,l,a){if(t=e.querySelector('link[rel="preload"][as="style"]['+t+"]")){if(t[gr]!==!0){a.loading=1;return}}else t=e.createElement("link"),t[gr]=!0,t.onload=t.onerror=uh.bind(null,t),St(t,"link",l),ft(t),e.head.appendChild(t);a.preload=t,t.addEventListener("load",function(){return a.loading|=1}),t.addEventListener("error",function(){return a.loading|=2})}function Ri(e){return'[src="'+nl(e)+'"]'}function Gu(e){return"script[async]"+e}function $v(e,t,l){if(t.count++,t.instance===null)switch(t.type){case"style":var a=e.querySelector('style[data-href~="'+nl(l.href)+'"]');if(a)return t.instance=a,ft(a),a;var i=X({},l,{"data-href":l.href,"data-precedence":l.precedence,href:null,precedence:null});return a=(e.ownerDocument||e).createElement("style"),ft(a),St(a,"style",i),Os(a,l.precedence,e),t.instance=a;case"stylesheet":i=Oi(l.href);var u=e.querySelector(Qu(i));if(u)return t.state.loading|=4,t.instance=u,ft(u),u;a=Fv(l),(i=dl.get(i))&&Af(a,i),u=(e.ownerDocument||e).createElement("link"),ft(u);var o=u;return o._p=new Promise(function(m,S){o.onload=m,o.onerror=S}),St(u,"link",a),t.state.loading|=4,Os(u,l.precedence,e),t.instance=u;case"script":return u=Ri(l.src),(i=e.querySelector(Gu(u)))?(t.instance=i,ft(i),i):(a=l,(i=dl.get(u))&&(a=X({},l),jf(a,i)),e=e.ownerDocument||e,i=e.createElement("script"),ft(i),St(i,"link",a),e.head.appendChild(i),t.instance=i);case"void":return null;default:throw Error(c(443,t.type))}else t.type==="stylesheet"&&(t.state.loading&4)===0&&(a=t.instance,t.state.loading|=4,Os(a,l.precedence,e));return t.instance}function Os(e,t,l){for(var a=l.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),i=a.length?a[a.length-1]:null,u=i,o=0;o title"):null)}function z2(e,t,l){if(l===1||t.itemProp!=null)return!1;switch(e){case"meta":case"title":return!0;case"style":if(typeof t.precedence!="string"||typeof t.href!="string"||t.href==="")break;return!0;case"link":if(typeof t.rel!="string"||typeof t.href!="string"||t.href===""||t.onLoad||t.onError)break;switch(t.rel){case"stylesheet":return e=t.disabled,typeof t.precedence=="string"&&e==null;default:return!0}case"script":if(t.async&&typeof t.async!="function"&&typeof t.async!="symbol"&&!t.onLoad&&!t.onError&&t.src&&typeof t.src=="string")return!0}return!1}function Pv(e,t){return e==="img"&&t.src!=null&&t.src!==""&&t.onLoad==null&&t.loading!=="lazy"}function Iv(e){return!(e.type==="stylesheet"&&(e.state.loading&3)===0)}function e0(e){return(e.width||100)*(e.height||100)*(typeof devicePixelRatio=="number"?devicePixelRatio:1)*.25}function t0(e,t){typeof t.decode=="function"&&(e.imgCount++,t.complete||(e.imgBytes+=e0(t),e.suspenseyImages.push(t)),e=w2.bind(e),t.decode().then(e,e))}function O2(e,t,l,a){if(l.type==="stylesheet"&&(typeof a.media!="string"||matchMedia(a.media).matches!==!1)&&(l.state.loading&4)===0){if(l.instance===null){var i=Oi(a.href),u=t.querySelector(Qu(i));if(u){t=u._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(e.count++,e=Yu.bind(e),t.then(e,e)),l.state.loading|=4,l.instance=u,ft(u);return}u=t.ownerDocument||t,a=Fv(a),(i=dl.get(i))&&Af(a,i),u=u.createElement("link"),ft(u);var o=u;o._p=new Promise(function(m,S){o.onload=m,o.onerror=S}),St(u,"link",a),l.instance=u}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(l,t),(t=l.state.preload)&&(l.state.loading&3)===0&&(e.count++,l=Yu.bind(e),t.addEventListener("load",l),t.addEventListener("error",l))}}var ws=0;function R2(e,t){return e.stylesheets&&e.count===0&&js(e,e.stylesheets),0ws?50:800)+t);return e.unsuspend=l,function(){e.unsuspend=null,clearTimeout(a),clearTimeout(i)}}:null}function l0(e){if(e.count===0&&(e.imgCount===0||!e.waitingForImages)){if(e.stylesheets)js(e,e.stylesheets);else if(e.unsuspend){var t=e.unsuspend;e.unsuspend=null,t()}}}function Yu(){this.count--,l0(this)}function w2(){this.imgCount--,l0(this)}var As=null;function js(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,As=new Map,t.forEach(A2,e),As=null,Yu.call(e))}function A2(e,t){if(!(t.state.loading&4)){var l=As.get(e);if(l)var a=l.get(null);else{l=new Map,As.set(e,l);for(var i=e.querySelectorAll("link[data-precedence],style[data-precedence]"),u=0;u"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(r){console.error(r)}}return n(),Yf.exports=Z2(),Yf.exports}var F2=J2();const $2=bg(F2);/** - * react-router v7.18.4 - * - * Copyright (c) Remix Software Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE.md file in the root directory of this source tree. - * - * @license MIT - */var Ed=/^(?:[a-z][a-z0-9+.-]*:|[\\/]{2})/i,Sg=/^[\\/]{2}/;function W2(n,r){return r+n.replace(/\\/g,"/")}var z0="popstate";function O0(n){return typeof n=="object"&&n!=null&&"pathname"in n&&"search"in n&&"hash"in n&&"state"in n&&"key"in n}function P2(n={}){function r(f,h){let{pathname:d="/",search:v="",hash:b=""}=Ln(f.location.hash.substring(1));return!d.startsWith("/")&&!d.startsWith(".")&&(d="/"+d),Pf("",{pathname:d,search:v,hash:b},h.state&&h.state.usr||null,h.state&&h.state.key||"default")}function s(f,h){let d=f.document.querySelector("base"),v="";if(d&&d.getAttribute("href")){let b=f.location.href,g=b.indexOf("#");v=g===-1?b:b.slice(0,g)}return v+"#"+(typeof h=="string"?h:Hn(h))}function c(f,h){tl(f.pathname.charAt(0)==="/",`relative pathnames are not supported in hash history.push(${JSON.stringify(h)})`)}return ex(r,s,c,n)}function We(n,r){if(n===!1||n===null||typeof n>"u")throw new Error(r)}function tl(n,r){if(!n){typeof console<"u"&&console.warn(r);try{throw new Error(r)}catch{}}}function I2(){return Math.random().toString(36).substring(2,10)}function R0(n,r){return{usr:n.state,key:n.key,idx:r,masked:n.mask?{pathname:n.pathname,search:n.search,hash:n.hash}:void 0}}function Pf(n,r,s=null,c,f){return{pathname:typeof n=="string"?n:n.pathname,search:"",hash:"",...typeof r=="string"?Ln(r):r,state:s,key:r&&r.key||c||I2(),mask:f}}function Hn({pathname:n="/",search:r="",hash:s=""}){return r&&r!=="?"&&(n+=r.charAt(0)==="?"?r:"?"+r),s&&s!=="#"&&(n+=s.charAt(0)==="#"?s:"#"+s),n}function Ln(n){let r={};if(n){let s=n.indexOf("#");s>=0&&(r.hash=n.substring(s),n=n.substring(0,s));let c=n.indexOf("?");c>=0&&(r.search=n.substring(c),n=n.substring(0,c)),n&&(r.pathname=n)}return r}function ex(n,r,s,c={}){let{window:f=document.defaultView,v5Compat:h=!1}=c,d=f.history,v="POP",b=null,g=x();g==null&&(g=0,d.replaceState({...d.state,idx:g},""));function x(){return(d.state||{idx:null}).idx}function p(){v="POP";let U=x(),Q=U==null?null:U-g;g=U,b&&b({action:v,location:L.location,delta:Q})}function z(U,Q){v="PUSH";let Y=O0(U)?U:Pf(L.location,U,Q);s&&s(Y,U),g=x()+1;let Z=R0(Y,g),I=L.createHref(Y.mask||Y);try{d.pushState(Z,"",I)}catch(K){if(K instanceof DOMException&&K.name==="DataCloneError")throw K;f.location.assign(I)}h&&b&&b({action:v,location:L.location,delta:1})}function q(U,Q){v="REPLACE";let Y=O0(U)?U:Pf(L.location,U,Q);s&&s(Y,U),g=x();let Z=R0(Y,g),I=L.createHref(Y.mask||Y);d.replaceState(Z,"",I),h&&b&&b({action:v,location:L.location,delta:0})}function G(U){return tx(f,U)}let L={get action(){return v},get location(){return n(f,d)},listen(U){if(b)throw new Error("A history only accepts one active listener");return f.addEventListener(z0,p),b=U,()=>{f.removeEventListener(z0,p),b=null}},createHref(U){return r(f,U)},createURL:G,encodeLocation(U){let Q=G(U);return{pathname:Q.pathname,search:Q.search,hash:Q.hash}},push:z,replace:q,go(U){return d.go(U)}};return L}function tx(n,r,s=!1){let c="http://localhost";n&&(c=n.location.origin!=="null"?n.location.origin:n.location.href),We(c,"No window.location.(origin|href) available to create URL");let f=typeof r=="string"?r:Hn(r);return f=f.replace(/ $/,"%20"),!s&&Sg.test(f)&&(f=c+f),new URL(f,c)}function Eg(n,r,s="/"){return lx(n,r,s,!1)}function lx(n,r,s,c,f){let h=typeof r=="string"?Ln(r):r,d=ha(h.pathname||"/",s);if(d==null)return null;let v=ax(n),b=null,g=mx(d);for(let x=0;b==null&&x{let x={relativePath:g===void 0?d.path||"":g,caseSensitive:d.caseSensitive===!0,childrenIndex:v,route:d};if(x.relativePath.startsWith("/")){if(!x.relativePath.startsWith(c)&&b)return;We(x.relativePath.startsWith(c),`Absolute route path "${x.relativePath}" nested under path "${c}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),x.relativePath=x.relativePath.slice(c.length)}let p=Tl([c,x.relativePath]),z=s.concat(x);d.children&&d.children.length>0&&(We(d.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${p}".`),_g(d.children,r,z,p,b)),!(d.path==null&&!d.index)&&r.push({path:p,score:fx(p,d.index),routesMeta:z.map((q,G)=>{let[L,U]=Cg(q.relativePath,q.caseSensitive,G===z.length-1);return{...q,matcher:L,compiledParams:U}})})};return n.forEach((d,v)=>{var b;if(d.path===""||!((b=d.path)!=null&&b.includes("?")))h(d,v);else for(let g of Tg(d.path))h(d,v,!0,g)}),r}function Tg(n){let r=n.split("/");if(r.length===0)return[];let[s,...c]=r,f=s.endsWith("?"),h=s.replace(/\?$/,"");if(c.length===0)return f?[h,""]:[h];let d=Tg(c.join("/")),v=[];return v.push(...d.map(b=>b===""?h:[h,b].join("/"))),f&&v.push(...d),v.map(b=>n.startsWith("/")&&b===""?"/":b)}function nx(n){n.sort((r,s)=>r.score!==s.score?s.score-r.score:dx(r.routesMeta.map(c=>c.childrenIndex),s.routesMeta.map(c=>c.childrenIndex)))}var ix=/^:[\w-]+$/,ux=3,rx=2,sx=1,cx=10,ox=-2,w0=n=>n==="*";function fx(n,r){let s=n.split("/"),c=s.length;return s.some(w0)&&(c+=ox),r&&(c+=rx),s.filter(f=>!w0(f)).reduce((f,h)=>f+(ix.test(h)?ux:h===""?sx:cx),c)}function dx(n,r){return n.length===r.length&&n.slice(0,-1).every((c,f)=>c===r[f])?n[n.length-1]-r[r.length-1]:0}function hx(n,r,s=!1){let{routesMeta:c}=n,f={},h="/",d=[];for(let v=0;v{if(x==="*"){let G=v[z]||"";d=Zi(h.slice(0,h.length-G.length),1)}const q=v[z];return p&&!q?g[x]=void 0:g[x]=(q||"").replace(/%2F/g,"/"),g},{}),pathname:h,pathnameBase:d,pattern:n}}function Cg(n,r=!1,s=!0){tl(n==="*"||!n.endsWith("*")||n.endsWith("/*"),`Route path "${n}" will be treated as if it were "${n.replace(/\*$/,"/*")}" because the \`*\` character must always follow a \`/\` in the pattern. To get rid of this warning, please change the route path to "${n.replace(/\*$/,"/*")}".`);let c=[],f="^"+n.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(d,v,b,g,x)=>{if(c.push({paramName:v,isOptional:b!=null}),b){let p=x.charAt(g+d.length);return p&&p!=="/"?"/([^\\/]*)":"(?:/([^\\/]*))?"}return"/([^\\/]+)"}).replace(/\/([\w-]+)\?(\/|$)/g,"(/$1)?$2");return n.endsWith("*")?(c.push({paramName:"*"}),f+=n==="*"||n==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):s?f+="\\/*$":n!==""&&n!=="/"&&(f+="(?:(?=\\/|$))"),[new RegExp(f,r?void 0:"i"),c]}function mx(n){try{return n.split("/").map(r=>decodeURIComponent(r).replace(/\//g,"%2F")).join("/")}catch(r){return tl(!1,`The URL path "${n}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${r}).`),n}}function ha(n,r){if(r==="/")return n;if(!n.toLowerCase().startsWith(r.toLowerCase()))return null;let s=r.endsWith("/")?r.length-1:r.length,c=n.charAt(s);return c&&c!=="/"?null:n.slice(s)||"/"}function yx(n,r="/"){let{pathname:s,search:c="",hash:f=""}=typeof n=="string"?Ln(n):n,h;return s?(s=zg(s),s.startsWith("/")||s.startsWith("\\")?h=A0(s.substring(1),"/"):h=A0(s,r)):h=r,{pathname:h,search:px(c),hash:bx(f)}}function A0(n,r){let s=Zi(r).split("/");return n.split("/").forEach(f=>{f===".."?s.length>1&&s.pop():f!=="."&&s.push(f)}),s.length>1?s.join("/"):"/"}function Zf(n,r,s,c){return`Cannot include a '${n}' character in a manually specified \`to.${r}\` field [${JSON.stringify(c)}]. Please separate it out to the \`to.${s}\` field. Alternatively you may provide the full path as a string in and the router will parse it for you.`}function vx(n){return n.filter((r,s)=>s===0||r.route.path&&r.route.path.length>0)}function _d(n){let r=vx(n);return r.map((s,c)=>c===r.length-1?s.pathname:s.pathnameBase)}function $s(n,r,s,c=!1){let f;typeof n=="string"?f=Ln(n):(f={...n},We(!f.pathname||!f.pathname.includes("?"),Zf("?","pathname","search",f)),We(!f.pathname||!f.pathname.includes("#"),Zf("#","pathname","hash",f)),We(!f.search||!f.search.includes("#"),Zf("#","search","hash",f)));let h=n===""||f.pathname==="",d=h?"/":f.pathname,v;if(d==null)v=s;else{let p=r.length-1;if(!c&&d.startsWith("..")){let z=d.split("/");for(;z[0]==="..";)z.shift(),p-=1;f.pathname=z.join("/")}v=p>=0?r[p]:"/"}let b=yx(f,v),g=d&&d!=="/"&&d.endsWith("/"),x=(h||d===".")&&s.endsWith("/");return!b.pathname.endsWith("/")&&(g||x)&&(b.pathname+="/"),b}var zg=n=>n.replace(/[\\/]{2,}/g,"/"),Tl=n=>zg(n.join("/"));function Zi(n,r=0){let s=n.length;for(;s>r&&n.charCodeAt(s-1)===47;)s--;return s===n.length?n:n.slice(0,s)}var gx=n=>Zi(n).replace(/^\/*/,"/"),px=n=>!n||n==="?"?"":n.startsWith("?")?n:"?"+n,bx=n=>!n||n==="#"?"":n.startsWith("#")?n:"#"+n,xx=class{constructor(n,r,s,c=!1){this.status=n,this.statusText=r||"",this.internal=c,s instanceof Error?(this.data=s.toString(),this.error=s):this.data=s}};function Sx(n){return n!=null&&typeof n.status=="number"&&typeof n.statusText=="string"&&typeof n.internal=="boolean"&&"data"in n}function Ex(n){let r=n.map(s=>s.route.path).filter(Boolean);return Tl(r)||"/"}var Og=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function Rg(n,r){let s=n;if(typeof s!="string"||!Ed.test(s))return{absoluteURL:void 0,isExternal:!1,to:s};let c=s,f=!1;if(Og)try{let h=new URL(window.location.href),d=Sg.test(s)?new URL(W2(s,h.protocol)):new URL(s),v=ha(d.pathname,r);d.origin===h.origin&&v!=null?s=v+d.search+d.hash:f=!0}catch{tl(!1,` contains an invalid URL which will probably break when clicked - please update to a valid URL path.`)}return{absoluteURL:c,isExternal:f,to:s}}Object.getOwnPropertyNames(Object.prototype).sort().join("\0");var j0=new URL("http://localhost");function Td(n){if(n.createURL)return n.createURL("/");try{return new URL(n.createHref("/"),j0)}catch{return j0}}function Jf(n,r){return n.origin===r.origin&&(n.origin!=="null"||n.protocol===r.protocol&&n.host===r.host)}function _x(n,r){if(n.startsWith("//"))return!0;let s=r.protocol.toLowerCase();return n.toLowerCase().startsWith(s)?r.host===""||n.slice(s.length).startsWith("//"):!1}function Nd(n,r,s,c){let f=null;try{f=n==null?null:new URL(n,s)}catch{}let h=new URL(r,s),d=f!=null&&!Jf(f,s),v=!Jf(h,s);if(c==="reject"){if(d||v)throw new Error("External navigation is not allowed")}else if(v&&(f==null||!_x(n,f)||!Jf(f,h)))throw new Error("External navigation is not allowed")}var wg=["POST","PUT","PATCH","DELETE"];new Set(wg);var Tx=["GET",...wg];new Set(Tx);var Nx=["about:","blob:","chrome:","chrome-untrusted:","content:","data:","devtools:","file:","filesystem:","javascript:"];function Cx(n){try{return Nx.includes(new URL(n).protocol)}catch{return!1}}var $i=T.createContext(null);$i.displayName="DataRouter";var Ws=T.createContext(null);Ws.displayName="DataRouterState";var Ag=T.createContext(!1);function zx(){return T.useContext(Ag)}var jg=T.createContext({isTransitioning:!1});jg.displayName="ViewTransition";var Ox=T.createContext(new Map);Ox.displayName="Fetchers";var Rx=T.createContext(null);Rx.displayName="Await";var ll=T.createContext(null);ll.displayName="Navigation";var rr=T.createContext(null);rr.displayName="Location";var Cl=T.createContext({outlet:null,matches:[],isDataRoute:!1});Cl.displayName="Route";var Cd=T.createContext(null);Cd.displayName="RouteError";var Mg="REACT_ROUTER_ERROR",wx="REDIRECT",Ax="ROUTE_ERROR_RESPONSE";function jx(n){if(n.startsWith(`${Mg}:${wx}:{`))try{let r=JSON.parse(n.slice(28));if(typeof r=="object"&&r&&typeof r.status=="number"&&typeof r.statusText=="string"&&typeof r.location=="string"&&typeof r.reloadDocument=="boolean"&&typeof r.replace=="boolean")return r}catch{}}function Mx(n){if(n.startsWith(`${Mg}:${Ax}:{`))try{let r=JSON.parse(n.slice(40));if(typeof r=="object"&&r&&typeof r.status=="number"&&typeof r.statusText=="string")return new xx(r.status,r.statusText,r.data)}catch{}}function Dx(n,{relative:r}={}){We(Wi(),"useHref() may be used only in the context of a component.");let{basename:s,navigator:c}=T.useContext(ll),{hash:f,pathname:h,search:d}=sr(n,{relative:r}),v=h;return s!=="/"&&(v=h==="/"?s:Tl([s,h])),c.createHref({pathname:v,search:d,hash:f})}function Wi(){return T.useContext(rr)!=null}function yl(){return We(Wi(),"useLocation() may be used only in the context of a component."),T.useContext(rr).location}var Dg="You should call navigate() in a React.useEffect(), not when your component is first rendered.";function Ug(n){T.useContext(ll).static||T.useLayoutEffect(n)}function Ps(){let{isDataRoute:n}=T.useContext(Cl);return n?Fx():Ux()}function Ux(){We(Wi(),"useNavigate() may be used only in the context of a component.");let n=T.useContext($i),{basename:r,navigator:s}=T.useContext(ll),{matches:c}=T.useContext(Cl),{pathname:f}=yl(),h=JSON.stringify(_d(c)),d=T.useRef(!1);return Ug(()=>{d.current=!0}),T.useCallback((b,g={})=>{if(tl(d.current,Dg),!d.current)return;if(typeof b=="number"){s.go(b);return}let x=$s(b,JSON.parse(h),f,g.relative==="path");n==null&&r!=="/"&&(x.pathname=x.pathname==="/"?r:Tl([r,x.pathname])),Nd(typeof b=="string"?b:Hn(b),s.createHref(x),Td(s),"reject"),(g.replace?s.replace:s.push)(x,g.state,g)},[r,s,h,f,n])}var kx=T.createContext(null);function Hx(n){let r=T.useContext(Cl).outlet;return T.useMemo(()=>r&&T.createElement(kx.Provider,{value:n},r),[r,n])}function sr(n,{relative:r}={}){let{matches:s}=T.useContext(Cl),{pathname:c}=yl(),f=JSON.stringify(_d(s));return T.useMemo(()=>$s(n,JSON.parse(f),c,r==="path"),[n,f,c,r])}function qx(n,r){return kg(n,r)}function kg(n,r,s){var U;We(Wi(),"useRoutes() may be used only in the context of a component.");let{navigator:c}=T.useContext(ll),{matches:f}=T.useContext(Cl),h=f[f.length-1],d=h?h.params:{},v=h?h.pathname:"/",b=h?h.pathnameBase:"/",g=h&&h.route;{let Q=g&&g.path||"";qg(v,!g||Q.endsWith("*")||Q.endsWith("*?"),`You rendered descendant (or called \`useRoutes()\`) at "${v}" (under ) but the parent route path has no trailing "*". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render. - -Please change the parent to .`)}let x=yl(),p;if(r){let Q=typeof r=="string"?Ln(r):r;We(b==="/"||((U=Q.pathname)==null?void 0:U.startsWith(b)),`When overriding the location using \`\` or \`useRoutes(routes, location)\`, the location pathname must begin with the portion of the URL pathname that was matched by all parent routes. The current pathname base is "${b}" but pathname "${Q.pathname}" was given in the \`location\` prop.`),p=Q}else p=x;let z=p.pathname||"/",q=z;if(b!=="/"){let Q=b.replace(/^\//,"").split("/");q="/"+z.replace(/^\//,"").split("/").slice(Q.length).join("/")}let G=s&&s.state.matches.length?s.state.matches.map(Q=>Object.assign(Q,{route:s.manifest[Q.route.id]||Q.route})):Eg(n,{pathname:q});tl(g||G!=null,`No routes matched location "${p.pathname}${p.search}${p.hash}" `),tl(G==null||G[G.length-1].route.element!==void 0||G[G.length-1].route.Component!==void 0||G[G.length-1].route.lazy!==void 0,`Matched leaf route at location "${p.pathname}${p.search}${p.hash}" does not have an element or Component. This means it will render an with a null value by default resulting in an "empty" page.`);let L=Yx(G&&G.map(Q=>Object.assign({},Q,{params:Object.assign({},d,Q.params),pathname:Tl([b,c.encodeLocation?c.encodeLocation(Q.pathname.replace(/%/g,"%25").replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:Q.pathname]),pathnameBase:Q.pathnameBase==="/"?b:Tl([b,c.encodeLocation?c.encodeLocation(Q.pathnameBase.replace(/%/g,"%25").replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:Q.pathnameBase])})),f,s);return r&&L?T.createElement(rr.Provider,{value:{location:{pathname:"/",search:"",hash:"",state:null,key:"default",mask:void 0,...p},navigationType:"POP"}},L):L}function Lx(){let n=Jx(),r=Sx(n)?`${n.status} ${n.statusText}`:n instanceof Error?n.message:JSON.stringify(n),s=n instanceof Error?n.stack:null,c="rgba(200,200,200, 0.5)",f={padding:"0.5rem",backgroundColor:c},h={padding:"2px 4px",backgroundColor:c},d=null;return console.error("Error handled by React Router default ErrorBoundary:",n),d=T.createElement(T.Fragment,null,T.createElement("p",null,"💿 Hey developer 👋"),T.createElement("p",null,"You can provide a way better UX than this when your app throws errors by providing your own ",T.createElement("code",{style:h},"ErrorBoundary")," or"," ",T.createElement("code",{style:h},"errorElement")," prop on your route.")),T.createElement(T.Fragment,null,T.createElement("h2",null,"Unexpected Application Error!"),T.createElement("h3",{style:{fontStyle:"italic"}},r),s?T.createElement("pre",{style:f},s):null,d)}var Bx=T.createElement(Lx,null),Hg=class extends T.Component{constructor(n){super(n),this.state={location:n.location,revalidation:n.revalidation,error:n.error}}static getDerivedStateFromError(n){return{error:n}}static getDerivedStateFromProps(n,r){return r.location!==n.location||r.revalidation!=="idle"&&n.revalidation==="idle"?{error:n.error,location:n.location,revalidation:n.revalidation}:{error:n.error!==void 0?n.error:r.error,location:r.location,revalidation:n.revalidation||r.revalidation}}componentDidCatch(n,r){this.props.onError?this.props.onError(n,r):console.error("React Router caught the following error during render",n)}render(){let n=this.state.error;if(this.context&&typeof n=="object"&&n&&"digest"in n&&typeof n.digest=="string"){const s=Mx(n.digest);s&&(n=s)}let r=n!==void 0?T.createElement(Cl.Provider,{value:this.props.routeContext},T.createElement(Cd.Provider,{value:n,children:this.props.component})):this.props.children;return this.context?T.createElement(Qx,{error:n},r):r}};Hg.contextType=Ag;var Ff=new WeakMap;function Qx({children:n,error:r}){let{basename:s,navigator:c}=T.useContext(ll);if(typeof r=="object"&&r&&"digest"in r&&typeof r.digest=="string"){let f=jx(r.digest);if(f){let h=Ff.get(r);if(h)throw h;let d=Rg(f.location,s),v=d.absoluteURL||d.to;if(Nd(f.location,v,Td(c),"allow-explicit"),Cx(v))throw new Error("Invalid redirect location");if(Og&&!Ff.get(r))if(d.isExternal||f.reloadDocument)window.location.href=v;else{const b=Promise.resolve().then(()=>window.__reactRouterDataRouter.navigate(d.to,{replace:f.replace}));throw Ff.set(r,b),b}return T.createElement("meta",{httpEquiv:"refresh",content:`0;url=${v}`})}}return n}function Gx({routeContext:n,match:r,children:s}){let c=T.useContext($i);return c&&c.static&&c.staticContext&&(r.route.errorElement||r.route.ErrorBoundary)&&(c.staticContext._deepestRenderedBoundaryId=r.route.id),T.createElement(Cl.Provider,{value:n},s)}function Yx(n,r=[],s){let c=s==null?void 0:s.state;if(n==null){if(!c)return null;if(c.errors)n=c.matches;else if(r.length===0&&!c.initialized&&c.matches.length>0)n=c.matches;else return null}let f=n,h=c==null?void 0:c.errors;if(h!=null){let x=f.findIndex(p=>p.route.id&&(h==null?void 0:h[p.route.id])!==void 0);We(x>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(h).join(",")}`),f=f.slice(0,Math.min(f.length,x+1))}let d=!1,v=-1;if(s&&c){d=c.renderFallback;for(let x=0;x=0?f=f.slice(0,v+1):f=[f[0]];break}}}}let b=s==null?void 0:s.onError,g=c&&b?(x,p)=>{var z,q;b(x,{location:c.location,params:((q=(z=c.matches)==null?void 0:z[0])==null?void 0:q.params)??{},pattern:Ex(c.matches),errorInfo:p})}:void 0;return f.reduceRight((x,p,z)=>{let q,G=!1,L=null,U=null;c&&(q=h&&p.route.id?h[p.route.id]:void 0,L=p.route.errorElement||Bx,d&&(v<0&&z===0?(qg("route-fallback",!1,"No `HydrateFallback` element provided to render during initial hydration"),G=!0,U=null):v===z&&(G=!0,U=p.route.hydrateFallbackElement||null)));let Q=r.concat(f.slice(0,z+1)),Y=()=>{let Z;return q?Z=L:G?Z=U:p.route.Component?Z=T.createElement(p.route.Component,null):p.route.element?Z=p.route.element:Z=x,T.createElement(Gx,{match:p,routeContext:{outlet:x,matches:Q,isDataRoute:c!=null},children:Z})};return c&&(p.route.ErrorBoundary||p.route.errorElement||z===0)?T.createElement(Hg,{location:c.location,revalidation:c.revalidation,component:L,error:q,children:Y(),routeContext:{outlet:null,matches:Q,isDataRoute:!0},onError:g}):Y()},null)}function zd(n){return`${n} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function Vx(n){let r=T.useContext($i);return We(r,zd(n)),r}function Xx(n){let r=T.useContext(Ws);return We(r,zd(n)),r}function Kx(n){let r=T.useContext(Cl);return We(r,zd(n)),r}function Od(n){let r=Kx(n),s=r.matches[r.matches.length-1];return We(s.route.id,`${n} can only be used on routes that contain a unique "id"`),s.route.id}function Zx(){return Od("useRouteId")}function Jx(){var c;let n=T.useContext(Cd),r=Xx("useRouteError"),s=Od("useRouteError");return n!==void 0?n:(c=r.errors)==null?void 0:c[s]}function Fx(){let{router:n}=Vx("useNavigate"),r=Od("useNavigate"),s=T.useRef(!1);return Ug(()=>{s.current=!0}),T.useCallback(async(f,h={})=>{tl(s.current,Dg),s.current&&(typeof f=="number"?await n.navigate(f):await n.navigate(f,{fromRouteId:r,...h}))},[n,r])}var M0={};function qg(n,r,s){!r&&!M0[n]&&(M0[n]=!0,tl(!1,s))}T.memo($x);function $x({routes:n,manifest:r,future:s,state:c,isStatic:f,onError:h}){return kg(n,void 0,{manifest:r,state:c,isStatic:f,onError:h})}function D0({to:n,replace:r,state:s,relative:c}){We(Wi()," may be used only in the context of a component.");let{static:f,navigator:h}=T.useContext(ll);tl(!f," must not be used on the initial render in a . This is a no-op, but you should modify your code so the is only ever rendered in response to some user interaction or state change.");let{matches:d}=T.useContext(Cl),{pathname:v}=yl(),b=Ps(),g=$s(n,_d(d),v,c==="path");Nd(typeof n=="string"?n:Hn(n),h.createHref(g),Td(h),"reject");let x=JSON.stringify(g);return T.useEffect(()=>{b(JSON.parse(x),{replace:r,state:s,relative:c})},[b,x,c,r,s]),null}function Wx(n){return Hx(n.context)}function Gl(n){We(!1,"A is only ever to be used as the child of element, never rendered directly. Please wrap your in a .")}function Px({basename:n="/",children:r=null,location:s,navigationType:c="POP",navigator:f,static:h=!1,useTransitions:d}){We(!Wi(),"You cannot render a inside another . You should never have more than one in your app.");let v=n.replace(/^\/*/,"/"),b=T.useMemo(()=>({basename:v,navigator:f,static:h,useTransitions:d,future:{}}),[v,f,h,d]);typeof s=="string"&&(s=Ln(s));let{pathname:g="/",search:x="",hash:p="",state:z=null,key:q="default",mask:G}=s,L=T.useMemo(()=>{let U=ha(g,v);return U==null?null:{location:{pathname:U,search:x,hash:p,state:z,key:q,mask:G},navigationType:c}},[v,g,x,p,z,q,c,G]);return tl(L!=null,` is not able to match the URL "${g}${x}${p}" because it does not start with the basename, so the won't render anything.`),L==null?null:T.createElement(ll.Provider,{value:b},T.createElement(rr.Provider,{children:r,value:L}))}function Ix({children:n,location:r}){return qx(If(n),r)}function If(n,r=[]){let s=[];return T.Children.forEach(n,(c,f)=>{if(!T.isValidElement(c))return;let h=[...r,f];if(c.type===T.Fragment){s.push.apply(s,If(c.props.children,h));return}We(c.type===Gl,`[${typeof c.type=="string"?c.type:c.type.name}] is not a component. All component children of must be a or `),We(!c.props.index||!c.props.children,"An index route cannot have child routes.");let d={id:c.props.id||h.join("-"),caseSensitive:c.props.caseSensitive,element:c.props.element,Component:c.props.Component,index:c.props.index,path:c.props.path,middleware:c.props.middleware,loader:c.props.loader,action:c.props.action,hydrateFallbackElement:c.props.hydrateFallbackElement,HydrateFallback:c.props.HydrateFallback,errorElement:c.props.errorElement,ErrorBoundary:c.props.ErrorBoundary,hasErrorBoundary:c.props.hasErrorBoundary===!0||c.props.ErrorBoundary!=null||c.props.errorElement!=null,shouldRevalidate:c.props.shouldRevalidate,handle:c.props.handle,lazy:c.props.lazy};c.props.children&&(d.children=If(c.props.children,h)),s.push(d)}),s}var Vs="get",Xs="application/x-www-form-urlencoded";function Is(n){return typeof HTMLElement<"u"&&n instanceof HTMLElement}function eS(n){return Is(n)&&n.tagName.toLowerCase()==="button"}function tS(n){return Is(n)&&n.tagName.toLowerCase()==="form"}function lS(n){return Is(n)&&n.tagName.toLowerCase()==="input"}function aS(n){return!!(n.metaKey||n.altKey||n.ctrlKey||n.shiftKey)}function nS(n,r){return n.button===0&&(!r||r==="_self")&&!aS(n)}function ed(n=""){return new URLSearchParams(typeof n=="string"||Array.isArray(n)||n instanceof URLSearchParams?n:Object.keys(n).reduce((r,s)=>{let c=n[s];return r.concat(Array.isArray(c)?c.map(f=>[s,f]):[[s,c]])},[]))}function iS(n,r){let s=ed(n);return r&&r.forEach((c,f)=>{s.has(f)||r.getAll(f).forEach(h=>{s.append(f,h)})}),s}var Bs=null;function uS(){if(Bs===null)try{new FormData(document.createElement("form"),0),Bs=!1}catch{Bs=!0}return Bs}var rS=new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);function $f(n){return n!=null&&!rS.has(n)?(tl(!1,`"${n}" is not a valid \`encType\` for \`
\`/\`\` and will default to "${Xs}"`),null):n}function sS(n,r){let s,c,f,h,d;if(tS(n)){let v=n.getAttribute("action");c=v?ha(v,r):null,s=n.getAttribute("method")||Vs,f=$f(n.getAttribute("enctype"))||Xs,h=new FormData(n)}else if(eS(n)||lS(n)&&(n.type==="submit"||n.type==="image")){let v=n.form;if(v==null)throw new Error('Cannot submit a