From 6320296f0f0e60e6e28683e431b8298c166ab3a9 Mon Sep 17 00:00:00 2001 From: Char Date: Tue, 26 May 2026 20:11:22 +0100 Subject: [PATCH] updates --- API/server.js | 113 +++++- Commands/General/help.js | 2 +- Commands/General/ping.js | 6 +- Configs/api.yml | 26 +- Configs/messages.yml | 4 +- Configs/supportbot-ai.yml | 2 +- Configs/supportbot.yml | 28 +- Data/dashboard-users.json | 18 +- Data/supportbot.db | Bin 49152 -> 49152 bytes Events/interactionCreate.js | 1 + Structures/Client.js | 1 + Structures/DashboardAlerts.js | 229 +++++++++++ Structures/DashboardSetup.js | 421 +++++++++++++++++++++ Structures/GuildManager.js | 36 +- Structures/ModuleStatus.js | 17 +- public/dashboard/assets/index-B9Fqpx9K.js | 191 ++++++++++ public/dashboard/assets/index-DOri9ZTI.css | 1 + public/dashboard/assets/index-DUq0PrN_.css | 1 - public/dashboard/assets/index-WkaLPu9d.js | 187 --------- public/dashboard/index.html | 4 +- 20 files changed, 1048 insertions(+), 240 deletions(-) create mode 100644 Structures/DashboardAlerts.js create mode 100644 Structures/DashboardSetup.js create mode 100644 public/dashboard/assets/index-B9Fqpx9K.js create mode 100644 public/dashboard/assets/index-DOri9ZTI.css delete mode 100644 public/dashboard/assets/index-DUq0PrN_.css delete mode 100644 public/dashboard/assets/index-WkaLPu9d.js diff --git a/API/server.js b/API/server.js index 29b12aa..a0b9245 100644 --- a/API/server.js +++ b/API/server.js @@ -11,6 +11,7 @@ const configStore = require('../Structures/ConfigStore.js'); const { reloadBot, restartDiscordBot } = require('../Structures/BotReload.js'); const { LOG_TYPES, fetchLogs, getLogMeta } = require('../Structures/LogReader.js'); const { evaluateAllModules } = require('../Structures/ModuleStatus.js'); +const { evaluateDashboardAlerts } = require('../Structures/DashboardAlerts.js'); const { getBotInviteUrl } = require('../Structures/BotInvite.js'); const notificationStore = require('../Structures/NotificationStore.js'); const { @@ -70,6 +71,13 @@ const { const { withTimeout } = require('../Structures/asyncTimeout.js'); const transcriptTemplate = require('../Structures/TranscriptTemplate.js'); const transcriptStore = require('../Structures/TranscriptStore.js'); +const { refreshSlashCommands } = require('../Structures/BotReload.js'); +const { + isSetupComplete, + getSetupStatus, + validateSetupPayload, + applySetup, +} = require('../Structures/DashboardSetup.js'); const dashboardBranding = require('../Structures/DashboardBranding.js'); const { listCatalogAddons, @@ -147,10 +155,12 @@ class APIServer { botReady: Boolean(this.client?.user) && !this.client?.__restarting, botRestarting: Boolean(this.client?.__restarting), oauthEnabled: isOAuthConfigured(this.oauth), + setupComplete: isSetupComplete(), guild, }); }); + this.setupOnboardingRoutes(); this.setupAuthRoutes(); this.app.get('/transcripts/:id', (req, res) => { @@ -242,14 +252,83 @@ class APIServer { }); } + setupOnboardingRoutes() { + this.app.get('/api/setup/status', (req, res) => { + try { + res.json({ success: true, data: getSetupStatus(req) }); + } catch (err) { + res.status(500).json({ success: false, error: err.message }); + } + }); + + this.app.post('/api/setup/validate', async (req, res) => { + if (isSetupComplete()) { + return res.status(403).json({ + success: false, + error: 'Setup is already complete.', + }); + } + try { + const data = await validateSetupPayload(req.body || {}); + res.json({ success: true, data }); + } catch (err) { + res.status(500).json({ success: false, error: err.message }); + } + }); + + this.app.post('/api/setup/complete', async (req, res) => { + if (isSetupComplete()) { + return res.status(403).json({ + success: false, + error: 'Setup is already complete.', + }); + } + + try { + const body = req.body || {}; + const validation = await validateSetupPayload(body); + if (!validation.ok) { + return res.status(400).json({ + success: false, + error: 'Fix validation errors before saving.', + data: validation, + }); + } + + applySetup(body); + this.config = configStore.api?.API || configStore.api; + this.oauth = this.config.OAuth || {}; + bootstrapFromOAuth(this.oauth); + + let botRestart = { success: false, error: 'Bot client not available' }; + if (this.client) { + try { + botRestart = await restartDiscordBot(this.client); + } catch (restartErr) { + botRestart = { success: false, error: restartErr.message }; + } + } + + res.json({ + success: true, + message: 'Setup saved. Restart the server for changes to take effect, then sign in with Discord.', + data: { setupComplete: true, botRestart }, + }); + } catch (err) { + console.error('[API] Setup failed:', err); + res.status(400).json({ success: false, error: err.message }); + } + }); + } + setupAuthRoutes() { const secret = this.config.SecretKey; const oauth = this.oauth; const apiConfig = this.config; this.app.get('/api/auth/discord', (req, res) => { - if (!isOAuthConfigured(oauth)) { - return res.redirect('/login?error=oauth_not_configured'); + if (!isSetupComplete() || !isOAuthConfigured(oauth)) { + return res.redirect('/setup'); } const redirectUri = resolveOAuthRedirectUri(req, oauth, apiConfig); @@ -262,8 +341,8 @@ class APIServer { }); this.app.get('/api/auth/discord/callback', async (req, res) => { - if (!isOAuthConfigured(oauth)) { - return res.redirect('/login?error=oauth_not_configured'); + if (!isSetupComplete() || !isOAuthConfigured(oauth)) { + return res.redirect('/setup'); } const { code, state, error } = req.query; @@ -586,6 +665,29 @@ h1{font-size:1.25rem}a{color:#a78bfa} } }); + app.get('/alerts', p('overview'), async (req, res) => { + try { + const transcriptDir = path.join(__dirname, '../Data/Transcripts'); + let transcriptCount = 0; + if (fs.existsSync(transcriptDir)) { + transcriptCount = fs + .readdirSync(transcriptDir) + .filter((f) => f.endsWith('-transcript.html')).length; + } + + const data = await evaluateDashboardAlerts({ + client: this.client, + configStore, + transcriptCount, + }); + + res.json({ success: true, data }); + } catch (err) { + console.error('[API] Error fetching alerts:', err); + res.status(500).json({ success: false, error: err.message }); + } + }); + app.get('/guild/resources', (req, res, next) => { if (req.dashboardService) return next(); const canAny = CONFIG_FILES.some((f) => @@ -609,6 +711,9 @@ h1{font-size:1.25rem}a{color:#a78bfa} error: 'Bot is not connected.', }); } + if (req.query.refresh === '1') { + clearGuildResourcesCache(); + } const data = await fetchGuildResources(this.client); if (!data) { return res.status(400).json({ diff --git a/Commands/General/help.js b/Commands/General/help.js index eaf2a94..c475bb5 100644 --- a/Commands/General/help.js +++ b/Commands/General/help.js @@ -54,7 +54,7 @@ module.exports = new Command({ iconURL: interaction.user.displayAvatarURL(), }); - interaction.reply({ + await interaction.reply({ flags: Discord.MessageFlags.Ephemeral, embeds: [HelpEmbed1], }); diff --git a/Commands/General/ping.js b/Commands/General/ping.js index fd7d421..9d50536 100644 --- a/Commands/General/ping.js +++ b/Commands/General/ping.js @@ -17,15 +17,13 @@ module.exports = new Command({ permissions: cmdconfig.Ping.Permission, async run(interaction) { - let disableCommand = true; - const PingEmbed = new Discord.EmbedBuilder() .setDescription( - `:ping_pong: **Ping:** \`${interaction.client.ws.ping} ms\`` + `:ping_pong: **Ping:** \`${interaction.client.ws.ping} ms\``, ) .setColor(supportbot.Embed.Colours.General); - interaction.reply({ + await interaction.reply({ embeds: [PingEmbed], }); }, diff --git a/Configs/api.yml b/Configs/api.yml index 6fc136f..d6bb5e4 100644 --- a/Configs/api.yml +++ b/Configs/api.yml @@ -1,23 +1,29 @@ # ------------------------------- # API Server Configuration # ------------------------------- +# Copy to api.yml and fill in your values (api.yml is not committed with real secrets). API: Enabled: true - Port: 3000 # PORT NUMBER FOR YOUR BOT + Port: 3000 - # Used to sign dashboard login sessions (keep random; do not share) - SecretKey: "fuiesdfioewefioesfioiosnd" + SecretKey: "CHANGE_ME" + # Set to 1 when the dashboard is behind nginx, Cloudflare, Pterodactyl proxy, etc. + # so http/https is detected from X-Forwarded-Proto. + TrustProxy: false - # Discord OAuth2 — create an app at https://discord.com/developers/applications - # Add redirect URL exactly matching RedirectUri below (OAuth2 → Redirects) OAuth: Enabled: true - ClientId: "1289713673123922032" - ClientSecret: "KwSoar0SLeHXWl5oePGNTb9J5q5NVKAV" + ClientId: "DISCORD_CLIENT_ID" + ClientSecret: "DISCORD_CLIENT_SECRET" + # Canonical callback URL (host + path). Protocol (http/https) can follow the + # browser when UseRequestOrigin is true (default). RedirectUri: "http://localhost:3000/api/auth/discord/callback" - # Permanent owners (full access, manage users). Add more dashboard users in the Users page. + # Optional: register extra callback URLs in Discord and list them here. + # RedirectUris: + # - "https://bot.example.com/api/auth/discord/callback" + # UseRequestOrigin: true + # CookieSecure: false OwnerUserIds: - - "829112572816130058" - # Legacy alias for OwnerUserIds (optional) + - "YOUR_DISCORD_USER_ID" AllowedUserIds: [] diff --git a/Configs/messages.yml b/Configs/messages.yml index edee95a..35f70eb 100644 --- a/Configs/messages.yml +++ b/Configs/messages.yml @@ -38,7 +38,7 @@ Welcome: Embed: Colour: "#45b463" Title: "Welcome to ServerName" - Message: ":smile: %joined_user% has just landed!\n\n🔨 **Server Rules:** <#1202667199853232129>" + Message: ":smile: %joined_user% has just landed!\n\n🔨 **Server Rules:** <#CHANNEL_ID>" Icon: Mode: "USER" # USER | BOT | CUSTOM CustomURL: "https://example.com/custom.png" @@ -64,7 +64,7 @@ Welcome: Modern: Colour: "#45b463" Title: "**Welcome to ServerName**" - Body: ":smile: %joined_user% has just landed!\n\n🔨 **Server Rules:** <#1202667199853232129>" + Body: ":smile: %joined_user% has just landed!\n\n🔨 **Server Rules:** <#CHANNEL_ID>" Icon: Mode: "BOT" # USER | BOT | CUSTOM CustomURL: "https://example.com/custom-icon.png" diff --git a/Configs/supportbot-ai.yml b/Configs/supportbot-ai.yml index da9534a..6a2f371 100644 --- a/Configs/supportbot-ai.yml +++ b/Configs/supportbot-ai.yml @@ -35,7 +35,7 @@ Features: SuggestTickets: true # Should SupportBot AI suggest creating a ticket if the user needs more help? Channels: - AIChannel: "1469028791312715902" + AIChannel: "CHANNEL_ID" Embed: Color: "#45b463" diff --git a/Configs/supportbot.yml b/Configs/supportbot.yml index 4fe2310..35677c0 100644 --- a/Configs/supportbot.yml +++ b/Configs/supportbot.yml @@ -23,7 +23,7 @@ General: Token: "BOT_TOKEN" Addons: Enabled: true - GuildId: "1198017820093599856" + GuildId: "" # ------------------------- # Activity @@ -63,12 +63,12 @@ Embed: Roles: AutoRole: Enabled: true - Role: "1491881628065337404" + Role: "ROLE_ID" StaffMember: - Staff: "1198299671576195213" - Admin: "1198295676128329799" - Moderator: "1198299671576195213" + Staff: "ROLE_ID" + Admin: "ROLE_ID" + Moderator: "ROLE_ID" Mod: AllowSupportStaff: false @@ -150,16 +150,16 @@ Ticket: DMOnRemove: true # DM the user when they are removed from the ticket DMTranscript: true # DM the user a transcript of the ticket when it is closed - TicketHome: "1290752269880660079" + TicketHome: "CHANNEL_ID" # What is TicketHome? # - Channel where the Ticket creation panel is sent. # - Channel where ticket threads are made. (only if ticket threads is enabled above.) # For TicketType: channels - TicketChannelsCategory: "1505240336736452809" + TicketChannelsCategory: "CATEGORY_ID" TicketChannelsCategory2: "CATEGORY_ID" # This will be used if the first category has reached the max channel limit. - TicketArchiveCategory: "1505240336736452809" + TicketArchiveCategory: "CATEGORY_ID" # --- Channel: "ticket-" # The prefix for ticket channel names @@ -186,7 +186,7 @@ Ticket: ClaimTickets: Enabled: false - Channel: "1290752269880660079" + Channel: "CHANNEL_ID" # Channel where the ticket assignments are sent for staff to claim. ClaimAcceptTime: 120000 @@ -220,9 +220,9 @@ Ticket: - "Have you tried resolving the issue yourself?" Log: - TicketDataLog: "1290752269880660079" + TicketDataLog: "CHANNEL_ID" TickeDataTitle: "Ticket Data" - TicketBlacklistLog: "1290752269880660079" + TicketBlacklistLog: "CHANNEL_ID" AIMode: Enabled: false @@ -358,12 +358,12 @@ SelectMenus: # ------------------------- MessageDelete: - Channel: "1290752269880660079" + Channel: "CHANNEL_ID" Colour: "#d92525" MessageUpdate: - Channel: "1290752269880660079" + Channel: "CHANNEL_ID" Colour: "#f2a024" Translate: - TranslateLog: "1290752269880660079" + TranslateLog: "CHANNEL_ID" diff --git a/Data/dashboard-users.json b/Data/dashboard-users.json index 0b0f900..841e1de 100644 --- a/Data/dashboard-users.json +++ b/Data/dashboard-users.json @@ -3,14 +3,26 @@ "users": { "829112572816130058": { "id": "829112572816130058", - "username": "Char", + "username": "ch_ar.", "globalName": "Char", + "avatar": "823630e777efe85c7fe71402f00ab0c1", + "role": "owner", + "permissions": null, + "enabled": true, + "createdAt": 1779820911269, + "updatedAt": 1779822114501, + "createdBy": "system" + }, + "YOUR_DISCORD_USER_ID": { + "id": "YOUR_DISCORD_USER_ID", + "username": null, + "globalName": null, "avatar": null, "role": "owner", "permissions": null, "enabled": true, - "createdAt": 1778938759443, - "updatedAt": 1778939228361, + "createdAt": 1779822020405, + "updatedAt": 1779822020405, "createdBy": "system" } } diff --git a/Data/supportbot.db b/Data/supportbot.db index da99cc0f4b678afc8a2849b938b5b2876c1d0cb8..b3d2dc8f8847babf435d4f7b898d88704964b117 100644 GIT binary patch delta 105 zcmZo@U~Xt&o*>PrG*QNxQE6ksl6)a{ekBI}v;156=kmAm=kka0D{U4O;NdqmWM^eC zHfA+6H83+XHnA`@G&C@_FfcSWH!(D_G%zD?S!ze<3S IeUX3x05nDz%>V!Z delta 51 zcmZo@U~Xt&o*>PrI8nx#QE_9!l6(O+{!j+~v;156=kmAm=kkYc78G#g-yB-MN`R4V Hk$?dJfpZR$ diff --git a/Events/interactionCreate.js b/Events/interactionCreate.js index c05a948..379182b 100644 --- a/Events/interactionCreate.js +++ b/Events/interactionCreate.js @@ -65,6 +65,7 @@ module.exports = new Event("interactionCreate", async (client, interaction) => { "\u001b[37;1m", `${interaction.user.username} has executed ${command.name}`, ); + await command.run(interaction); } } catch (error) { diff --git a/Structures/Client.js b/Structures/Client.js index b90734a..9db0cbe 100644 --- a/Structures/Client.js +++ b/Structures/Client.js @@ -51,6 +51,7 @@ class Client extends Discord.Client { GatewayIntentBits.GuildMembers, GatewayIntentBits.GuildMessages, GatewayIntentBits.GuildMessageReactions, + GatewayIntentBits.GuildEmojisAndStickers, GatewayIntentBits.MessageContent, ], partials: [Partials.Message, Partials.Channel, Partials.Reaction], diff --git a/Structures/DashboardAlerts.js b/Structures/DashboardAlerts.js new file mode 100644 index 0000000..c37dc42 --- /dev/null +++ b/Structures/DashboardAlerts.js @@ -0,0 +1,229 @@ +/** + * Dashboard alert registry — server-side providers for actionable banners. + * + * Register a provider to surface new alerts anywhere in the dashboard: + * + * const { dashboardAlerts } = require("./DashboardAlerts.js"); + * dashboardAlerts.register("my-addon", (ctx) => { + * if (!ctx.configStore.myAddon?.Configured) { + * return [{ + * id: "my-addon:setup", + * severity: "warning", + * category: "my-addon", + * title: "My addon needs setup", + * message: "Finish configuration to enable this feature.", + * action: { label: "Configure", href: "/configs?file=my-addon" }, + * }]; + * } + * return []; + * }); + */ +const { evaluateGuildHealth } = require("./GuildManager.js"); +const { evaluateAllModules } = require("./ModuleStatus.js"); + +const SEVERITY_ORDER = { error: 0, warning: 1, info: 2 }; + +const MODULE_LINKS = { + tickets: { + title: "Ticket system", + href: "/configs?file=ticket-panel", + }, + supportbot: { + title: "Core bot settings", + href: "/configs?file=supportbot", + }, + transcripts: { + title: "Ticket transcripts", + href: "/transcripts", + }, + suggestions: { + title: "Suggestions", + href: "/configs?file=messages", + }, + ai: { + title: "AI assistant", + href: "/configs?file=supportbot-ai", + }, + commands: { + title: "Commands", + href: "/configs?file=commands", + }, +}; + +class DashboardAlertRegistry { + constructor() { + /** @type {Map DashboardAlert[] | Promise>} */ + this.providers = new Map(); + } + + /** + * @param {string} id Unique provider id (used for debugging / overrides) + * @param {(ctx: DashboardAlertContext) => DashboardAlert[] | Promise} fn + */ + register(id, fn) { + this.providers.set(id, fn); + return this; + } + + unregister(id) { + this.providers.delete(id); + } + + /** @param {DashboardAlertContext} ctx */ + async evaluate(ctx) { + const alerts = []; + for (const fn of this.providers.values()) { + const result = await fn(ctx); + if (Array.isArray(result) && result.length) { + alerts.push(...result); + } + } + return sortAlerts(alerts); + } +} + +function sortAlerts(alerts) { + return [...alerts].sort((a, b) => { + const sa = SEVERITY_ORDER[a.severity] ?? 9; + const sb = SEVERITY_ORDER[b.severity] ?? 9; + if (sa !== sb) return sa - sb; + return a.title.localeCompare(b.title); + }); +} + +function guildSeverity(status) { + if (status === "offline") return "error"; + return "warning"; +} + +function shouldSkipModuleAlert(moduleId, info) { + if (info.status === "done") return true; + if (moduleId === "ai" && info.subtitle === "AI is disabled in config") return true; + // Transcripts are automatic — empty archive is normal, not a setup step. + if (moduleId === "transcripts") return true; + // Partially configured modules are tracked on Overview — only banner when nothing is done yet. + if (info.status === "progress" && (info.passed ?? 0) > 0) return true; + return false; +} + +function moduleSeverity(moduleId, info) { + if (info.status === "todo") { + return moduleId === "tickets" || moduleId === "supportbot" ? "warning" : "info"; + } + return "info"; +} + +function evaluateGuildAlerts(ctx) { + const { client } = ctx; + if (!client?.user) { + return [ + { + id: "guild:offline", + severity: "error", + category: "guild", + title: "Bot offline", + message: "The bot is not connected to Discord. Check your token and restart the server.", + action: { label: "Bot config", href: "/configs?file=supportbot" }, + meta: { status: "offline" }, + }, + ]; + } + + const health = evaluateGuildHealth(client); + if (health.status === "ok") return []; + + return [ + { + id: "guild:health", + severity: guildSeverity(health.status), + category: "guild", + title: "Server setup required", + message: health.message, + action: { label: "Bot config", href: "/configs?file=supportbot" }, + meta: { + status: health.status, + configuredGuildId: health.configuredGuildId, + configuredGuild: health.configuredGuild, + extraGuilds: health.extraGuilds, + }, + }, + ]; +} + +function evaluateModuleAlerts(ctx) { + const { configStore, transcriptCount = 0 } = ctx; + const modules = evaluateAllModules(configStore, { transcriptCount }); + const alerts = []; + + for (const [moduleId, info] of Object.entries(modules)) { + if (shouldSkipModuleAlert(moduleId, info)) continue; + + const link = MODULE_LINKS[moduleId] || { + title: moduleId, + href: "/configs", + }; + + const progress = + info.total > 0 ? `${info.passed ?? 0} of ${info.total} checks complete` : null; + + alerts.push({ + id: `module:${moduleId}`, + severity: moduleSeverity(moduleId, info), + category: "modules", + title: + info.status === "todo" + ? `${link.title} — setup required` + : `${link.title} — in progress`, + message: info.subtitle, + action: { label: "Open module", href: link.href }, + meta: { + moduleId, + status: info.status, + passed: info.passed, + total: info.total, + progress, + }, + }); + } + + return alerts; +} + +const dashboardAlerts = new DashboardAlertRegistry(); +dashboardAlerts.register("guild", evaluateGuildAlerts); +dashboardAlerts.register("modules", evaluateModuleAlerts); + +/** + * @typedef {Object} DashboardAlertAction + * @property {string} label + * @property {string} href + */ + +/** + * @typedef {Object} DashboardAlert + * @property {string} id + * @property {"error"|"warning"|"info"} severity + * @property {string} category + * @property {string} title + * @property {string} message + * @property {DashboardAlertAction} [action] + * @property {Record} [meta] + */ + +/** + * @typedef {Object} DashboardAlertContext + * @property {import("discord.js").Client} [client] + * @property {import("./ConfigStore.js")} configStore + * @property {number} [transcriptCount] + */ + +async function evaluateDashboardAlerts(ctx) { + return dashboardAlerts.evaluate(ctx); +} + +module.exports = { + dashboardAlerts, + evaluateDashboardAlerts, + sortAlerts, + MODULE_LINKS, +}; diff --git a/Structures/DashboardSetup.js b/Structures/DashboardSetup.js new file mode 100644 index 0000000..311c84e --- /dev/null +++ b/Structures/DashboardSetup.js @@ -0,0 +1,421 @@ +const fs = require("fs"); +const path = require("path"); +const axios = require("axios"); +const YAML = require("yaml"); +const configStore = require("./ConfigStore.js"); +const { CALLBACK_PATH } = require("./DiscordOAuth.js"); + +const DISCORD_API = "https://discord.com/api/v10"; +const CONFIG_DIR = path.join(__dirname, "../Configs"); +const API_FILE = path.join(CONFIG_DIR, "api.yml"); +const SUPPORTBOT_FILE = path.join(CONFIG_DIR, "supportbot.yml"); + +const PLACEHOLDER_PATTERNS = [ + /DISCORD_CLIENT_ID/i, + /DISCORD_CLIENT_SECRET/i, + /YOUR_DISCORD_USER_ID/i, + /CHANGE_ME/i, + /BOT_TOKEN/i, + /PUT_RANDOM_STRING/i, +]; + +function isEmpty(value) { + if (value == null) return true; + if (typeof value === "boolean") return false; + if (typeof value === "number") return false; + return String(value).trim() === ""; +} + +function isPlaceholder(value) { + if (isEmpty(value)) return true; + const s = String(value).trim(); + return PLACEHOLDER_PATTERNS.some((p) => p.test(s)); +} + +function isDiscordSnowflake(value) { + return /^\d{17,20}$/.test(String(value).trim()); +} + +function isValidBotToken(value) { + if (isPlaceholder(value)) return false; + const s = String(value).trim(); + return s.length >= 50 && s.includes("."); +} + +function isValidSecretKey(value) { + if (isPlaceholder(value)) return false; + return String(value).trim().length >= 16; +} + +function readApiRoot() { + if (!fs.existsSync(API_FILE)) return null; + try { + const raw = YAML.parse(fs.readFileSync(API_FILE, "utf8")); + return raw?.API ?? raw ?? null; + } catch { + return null; + } +} + +function readSupportbotRoot() { + if (!fs.existsSync(SUPPORTBOT_FILE)) return {}; + try { + return YAML.parse(fs.readFileSync(SUPPORTBOT_FILE, "utf8")) || {}; + } catch { + return {}; + } +} + +function getOwnerIds(oauth) { + const ids = []; + for (const id of oauth?.OwnerUserIds || []) { + const s = String(id).trim(); + if (s) ids.push(s); + } + if (ids.length === 0) { + for (const id of oauth?.AllowedUserIds || []) { + const s = String(id).trim(); + if (s) ids.push(s); + } + } + return ids; +} + +function buildSteps(apiRoot, supportbot) { + const oauth = apiRoot?.OAuth || {}; + const token = supportbot?.General?.Token; + + return [ + { + id: "botToken", + title: "Bot token", + description: "From the Discord Developer Portal → your application → Bot → Reset Token.", + complete: isValidBotToken(token), + }, + { + id: "secretKey", + title: "Dashboard session secret", + description: "Random string used to sign login cookies. Keep it private.", + complete: isValidSecretKey(apiRoot?.SecretKey), + }, + { + id: "oauth", + title: "Discord OAuth app", + description: "Same application as your bot — Client ID and Client Secret from OAuth2.", + complete: + !isPlaceholder(oauth.ClientId) && + !isPlaceholder(oauth.ClientSecret) && + isDiscordSnowflake(oauth.ClientId), + }, + { + id: "redirectUri", + title: "OAuth redirect URL", + description: `Add this exact URL under OAuth2 → Redirects in the Discord portal.`, + complete: isValidRedirectUriConfigured(oauth.RedirectUri), + }, + { + id: "owners", + title: "Dashboard owners", + description: "Discord user IDs that can sign in and manage the dashboard (at least one).", + complete: getOwnerIds(oauth).length > 0 && getOwnerIds(oauth).every(isDiscordSnowflake), + }, + ]; +} + +function isValidRedirectUriConfigured(uri) { + if (isPlaceholder(uri)) return false; + try { + const u = new URL(String(uri).trim()); + if (!["http:", "https:"].includes(u.protocol)) return false; + return u.pathname.replace(/\/$/, "") === CALLBACK_PATH.replace(/\/$/, ""); + } catch { + return false; + } +} + +function isSetupComplete() { + const apiRoot = readApiRoot(); + if (!apiRoot?.Enabled) return false; + const oauth = apiRoot.OAuth || {}; + if (!oauth.Enabled) return false; + const steps = buildSteps(apiRoot, readSupportbotRoot()); + return steps.every((s) => s.complete); +} + +function getSetupStatus(req) { + const apiRoot = readApiRoot() || {}; + const steps = buildSteps(apiRoot, readSupportbotRoot()); + const complete = steps.every((s) => s.complete); + + let suggestedRedirectUri = null; + if (req) { + const proto = + req.get("x-forwarded-proto")?.split(",")[0]?.trim() || + req.protocol || + "http"; + const host = req.get("x-forwarded-host")?.split(",")[0]?.trim() || req.get("host"); + if (host) { + suggestedRedirectUri = `${proto}://${host}${CALLBACK_PATH}`; + } + } + if (!suggestedRedirectUri) { + suggestedRedirectUri = `http://localhost:${apiRoot.Port || 3000}${CALLBACK_PATH}`; + } + + return { + complete, + steps, + suggestedRedirectUri, + oauthCallbackPath: CALLBACK_PATH, + }; +} + +async function validateBotToken(token) { + const trimmed = String(token || "").trim(); + if (!isValidBotToken(trimmed)) { + return { ok: false, error: "Enter a valid bot token from the Discord Developer Portal." }; + } + + try { + const [userRes, appRes] = await Promise.all([ + axios.get(`${DISCORD_API}/users/@me`, { + headers: { Authorization: `Bot ${trimmed}` }, + timeout: 12_000, + }), + axios.get(`${DISCORD_API}/oauth2/applications/@me`, { + headers: { Authorization: `Bot ${trimmed}` }, + timeout: 12_000, + }), + ]); + + return { + ok: true, + bot: { + id: userRes.data.id, + username: userRes.data.username, + discriminator: userRes.data.discriminator, + }, + applicationId: String(appRes.data.id), + }; + } catch (err) { + const status = err.response?.status; + if (status === 401) { + return { ok: false, error: "Discord rejected this bot token (401 Unauthorized)." }; + } + return { + ok: false, + error: err.response?.data?.message || err.message || "Could not verify bot token.", + }; + } +} + +async function validateOAuthCredentials(clientId, clientSecret, botToken) { + const id = String(clientId || "").trim(); + const secret = String(clientSecret || "").trim(); + + if (!isDiscordSnowflake(id)) { + return { ok: false, error: "Client ID must be a numeric Discord application ID." }; + } + if (isPlaceholder(secret) || secret.length < 20) { + return { ok: false, error: "Enter the OAuth Client Secret from the Discord portal." }; + } + + if (botToken) { + const botCheck = await validateBotToken(botToken); + if (botCheck.ok && botCheck.applicationId && botCheck.applicationId !== id) { + return { + ok: false, + error: `Client ID does not match the bot application (${botCheck.applicationId}). Use the same app's credentials.`, + }; + } + } + + try { + await axios.post( + `${DISCORD_API}/oauth2/token`, + new URLSearchParams({ grant_type: "client_credentials", scope: "identify" }), + { + auth: { username: id, password: secret }, + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + timeout: 12_000, + }, + ); + return { ok: true, clientId: id }; + } catch (err) { + const status = err.response?.status; + if (botToken) { + const botCheck = await validateBotToken(botToken); + if (botCheck.ok && botCheck.applicationId === id) { + return { + ok: true, + clientId: id, + warning: + "Could not verify the client secret with Discord (token endpoint). ID matches your bot — double-check the secret in the portal.", + }; + } + } + if (status === 401 || status === 400) { + return { ok: false, error: "Invalid Client ID or Client Secret." }; + } + return { + ok: false, + error: err.response?.data?.error_description || err.message || "OAuth validation failed.", + }; + } +} + +function validateRedirectUri(uri) { + const trimmed = String(uri || "").trim(); + if (!isValidRedirectUriConfigured(trimmed)) { + return { + ok: false, + error: `Redirect URL must end with ${CALLBACK_PATH} and use http or https.`, + }; + } + return { ok: true, redirectUri: trimmed }; +} + +async function validateOwnerUserIds(ownerIds, botToken) { + const ids = (Array.isArray(ownerIds) ? ownerIds : [ownerIds]) + .map((id) => String(id).trim()) + .filter(Boolean); + + if (ids.length === 0) { + return { ok: false, error: "Add at least one Discord user ID." }; + } + + const invalid = ids.filter((id) => !isDiscordSnowflake(id)); + if (invalid.length) { + return { ok: false, error: `Invalid user ID: ${invalid[0]}` }; + } + + if (!botToken || !isValidBotToken(botToken)) { + return { ok: true, ownerUserIds: ids, warning: "User IDs format OK (bot token not verified yet)." }; + } + + const users = []; + try { + for (const id of ids) { + const res = await axios.get(`${DISCORD_API}/users/${id}`, { + headers: { Authorization: `Bot ${String(botToken).trim()}` }, + timeout: 12_000, + }); + users.push({ + id: res.data.id, + username: res.data.username, + globalName: res.data.global_name || null, + }); + } + return { ok: true, ownerUserIds: ids, users }; + } catch (err) { + if (err.response?.status === 404) { + return { ok: false, error: "One or more user IDs were not found. Check Developer Mode → Copy User ID." }; + } + if (err.response?.status === 403) { + return { + ok: false, + error: "Bot could not look up users. Ensure the bot is in a server with those users, or verify IDs manually.", + }; + } + return { ok: false, error: err.message || "Failed to verify owner user IDs." }; + } +} + +function validateSecretKey(secretKey) { + if (!isValidSecretKey(secretKey)) { + return { ok: false, error: "Use at least 16 characters (not CHANGE_ME)." }; + } + return { ok: true }; +} + +async function validateSetupPayload(payload) { + const results = {}; + + if (payload.botToken != null) { + results.botToken = await validateBotToken(payload.botToken); + } + if (payload.secretKey != null) { + results.secretKey = validateSecretKey(payload.secretKey); + } + if (payload.clientId != null && payload.clientSecret != null) { + results.oauth = await validateOAuthCredentials( + payload.clientId, + payload.clientSecret, + payload.botToken, + ); + } + if (payload.redirectUri != null) { + results.redirectUri = validateRedirectUri(payload.redirectUri); + } + if (payload.ownerUserIds != null) { + results.owners = await validateOwnerUserIds(payload.ownerUserIds, payload.botToken); + } + + const allOk = Object.values(results).every((r) => r?.ok); + return { ok: allOk, results }; +} + +function ensureApiFile() { + if (fs.existsSync(API_FILE)) return; + const example = path.join(CONFIG_DIR, "api.yml.example"); + if (fs.existsSync(example)) { + fs.copyFileSync(example, API_FILE); + configStore.reloadFile("api"); + } else { + throw new Error("Configs/api.yml is missing. Copy Configs/api.yml.example to api.yml."); + } +} + +function applySetup(payload) { + ensureApiFile(); + + const ownerIds = (Array.isArray(payload.ownerUserIds) + ? payload.ownerUserIds + : String(payload.ownerUserIds || "").split(/[\s,]+/) + ) + .map((id) => String(id).trim()) + .filter(Boolean); + + const apiDoc = YAML.parseDocument(fs.readFileSync(API_FILE, "utf8")); + if (!apiDoc.get("API")) apiDoc.set("API", {}); + + apiDoc.setIn(["API", "Enabled"], true); + apiDoc.setIn(["API", "SecretKey"], String(payload.secretKey).trim()); + if (payload.port != null && payload.port !== "") { + apiDoc.setIn(["API", "Port"], Number(payload.port) || 3000); + } + if (!apiDoc.getIn(["API", "OAuth"])) apiDoc.setIn(["API", "OAuth"], {}); + + apiDoc.setIn(["API", "OAuth", "Enabled"], true); + apiDoc.setIn(["API", "OAuth", "ClientId"], String(payload.clientId).trim()); + apiDoc.setIn(["API", "OAuth", "ClientSecret"], String(payload.clientSecret).trim()); + apiDoc.setIn(["API", "OAuth", "RedirectUri"], String(payload.redirectUri).trim()); + apiDoc.setIn(["API", "OAuth", "OwnerUserIds"], ownerIds); + apiDoc.setIn(["API", "OAuth", "AllowedUserIds"], []); + + fs.writeFileSync(API_FILE, apiDoc.toString()); + + const sbDoc = YAML.parseDocument(fs.readFileSync(SUPPORTBOT_FILE, "utf8")); + sbDoc.setIn(["General", "Token"], String(payload.botToken).trim()); + fs.writeFileSync(SUPPORTBOT_FILE, sbDoc.toString()); + + configStore.reloadFile("api"); + configStore.reloadFile("supportbot"); + + return { + ownerUserIds: ownerIds, + api: configStore.api?.API || configStore.api, + }; +} + +module.exports = { + isSetupComplete, + getSetupStatus, + validateBotToken, + validateOAuthCredentials, + validateRedirectUri, + validateOwnerUserIds, + validateSecretKey, + validateSetupPayload, + applySetup, +}; diff --git a/Structures/GuildManager.js b/Structures/GuildManager.js index 7e9726c..537117b 100644 --- a/Structures/GuildManager.js +++ b/Structures/GuildManager.js @@ -3,7 +3,9 @@ const configStore = require("./ConfigStore.js"); const { withTimeout } = require("./asyncTimeout.js"); const RESOURCES_CACHE_MS = 90 * 1000; -let resourcesCache = { guildId: null, data: null, at: 0 }; +/** Bump when resource payload shape changes (e.g. added emojis). */ +const RESOURCES_CACHE_VERSION = 2; +let resourcesCache = { guildId: null, data: null, at: 0, version: 0 }; let resourcesInflight = null; function getConfiguredGuildId() { @@ -160,12 +162,28 @@ function buildResourcesFromGuild(guild) { name: c.name, })); + const emojis = [...guild.emojis.cache.values()] + .sort((a, b) => a.name.localeCompare(b.name)) + .map((e) => { + const animated = Boolean(e.animated); + const ext = animated ? "gif" : "png"; + return { + id: e.id, + name: e.name, + animated, + url: + e.imageURL({ extension: ext, size: 64 }) || + `https://cdn.discordapp.com/emojis/${e.id}.${ext}?size=64`, + }; + }); + return { guildId: guild.id, guildName: guild.name, roles, channels, categories, + emojis, }; } @@ -189,6 +207,12 @@ async function fetchGuildResourcesFromDiscord(client, guildId) { } } + try { + await withTimeout(guild.emojis.fetch(), 12_000, "Discord emoji fetch timed out"); + } catch (err) { + console.warn("[Guild] Failed to fetch guild emojis:", err.message); + } + return buildResourcesFromGuild(guild); } @@ -199,6 +223,7 @@ async function fetchGuildResources(client, guildId) { const now = Date.now(); if ( resourcesCache.data && + resourcesCache.version === RESOURCES_CACHE_VERSION && resourcesCache.guildId === id && now - resourcesCache.at < RESOURCES_CACHE_MS ) { @@ -216,7 +241,12 @@ async function fetchGuildResources(client, guildId) { resourcesInflight = (async () => { const data = await fetchGuildResourcesFromDiscord(client, id); if (data) { - resourcesCache = { guildId: id, data, at: Date.now() }; + resourcesCache = { + guildId: id, + data, + at: Date.now(), + version: RESOURCES_CACHE_VERSION, + }; } return data; })(); @@ -229,7 +259,7 @@ async function fetchGuildResources(client, guildId) { } function clearGuildResourcesCache() { - resourcesCache = { guildId: null, data: null, at: 0 }; + resourcesCache = { guildId: null, data: null, at: 0, version: 0 }; resourcesInflight = null; } diff --git a/Structures/ModuleStatus.js b/Structures/ModuleStatus.js index aa79ef5..d809c93 100644 --- a/Structures/ModuleStatus.js +++ b/Structures/ModuleStatus.js @@ -122,11 +122,12 @@ function evaluateTranscripts(supportbot, transcriptCount) { const ticketReady = isConfiguredId(supportbot?.Ticket?.TicketHome); if (!ticketReady) { + // Ticket setup is tracked by the tickets module — avoid a misleading transcripts alert. return { - status: "todo", - subtitle: "Set up tickets first", + status: "done", + subtitle: "Available after ticket channels are configured", passed: 0, - total: 2, + total: 0, }; } @@ -134,16 +135,16 @@ function evaluateTranscripts(supportbot, transcriptCount) { return { status: "done", subtitle: `${transcriptCount} transcript${transcriptCount === 1 ? "" : "s"} saved`, - passed: 2, - total: 2, + passed: 1, + total: 1, }; } return { - status: "progress", - subtitle: "Close tickets to generate transcripts", + status: "done", + subtitle: "No transcripts yet — they are created when tickets close", passed: 1, - total: 2, + total: 1, }; } diff --git a/public/dashboard/assets/index-B9Fqpx9K.js b/public/dashboard/assets/index-B9Fqpx9K.js new file mode 100644 index 0000000..84bc883 --- /dev/null +++ b/public/dashboard/assets/index-B9Fqpx9K.js @@ -0,0 +1,191 @@ +var RN=Object.defineProperty;var AN=(e,n,a)=>n in e?RN(e,n,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[n]=a;var m1=(e,n,a)=>AN(e,typeof n!="symbol"?n+"":n,a);function _N(e,n){for(var a=0;ao[l]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const n=document.createElement("link").relList;if(n&&n.supports&&n.supports("modulepreload"))return;for(const l of document.querySelectorAll('link[rel="modulepreload"]'))o(l);new MutationObserver(l=>{for(const i of l)if(i.type==="childList")for(const d of i.addedNodes)d.tagName==="LINK"&&d.rel==="modulepreload"&&o(d)}).observe(document,{childList:!0,subtree:!0});function a(l){const i={};return l.integrity&&(i.integrity=l.integrity),l.referrerPolicy&&(i.referrerPolicy=l.referrerPolicy),l.crossOrigin==="use-credentials"?i.credentials="include":l.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function o(l){if(l.ep)return;l.ep=!0;const i=a(l);fetch(l.href,i)}})();function Xx(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Rm={exports:{}},Nl={};/** + * @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 p1;function MN(){if(p1)return Nl;p1=1;var e=Symbol.for("react.transitional.element"),n=Symbol.for("react.fragment");function a(o,l,i){var d=null;if(i!==void 0&&(d=""+i),l.key!==void 0&&(d=""+l.key),"key"in l){i={};for(var m in l)m!=="key"&&(i[m]=l[m])}else i=l;return l=i.ref,{$$typeof:e,type:o,key:d,ref:l!==void 0?l:null,props:i}}return Nl.Fragment=n,Nl.jsx=a,Nl.jsxs=a,Nl}var h1;function ON(){return h1||(h1=1,Rm.exports=MN()),Rm.exports}var c=ON(),Am={exports:{}},_e={};/** + * @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 g1;function DN(){if(g1)return _e;g1=1;var e=Symbol.for("react.transitional.element"),n=Symbol.for("react.portal"),a=Symbol.for("react.fragment"),o=Symbol.for("react.strict_mode"),l=Symbol.for("react.profiler"),i=Symbol.for("react.consumer"),d=Symbol.for("react.context"),m=Symbol.for("react.forward_ref"),h=Symbol.for("react.suspense"),p=Symbol.for("react.memo"),y=Symbol.for("react.lazy"),v=Symbol.for("react.activity"),x=Symbol.iterator;function S(_){return _===null||typeof _!="object"?null:(_=x&&_[x]||_["@@iterator"],typeof _=="function"?_:null)}var j={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},C=Object.assign,N={};function E(_,O,H){this.props=_,this.context=O,this.refs=N,this.updater=H||j}E.prototype.isReactComponent={},E.prototype.setState=function(_,O){if(typeof _!="object"&&typeof _!="function"&&_!=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,_,O,"setState")},E.prototype.forceUpdate=function(_){this.updater.enqueueForceUpdate(this,_,"forceUpdate")};function k(){}k.prototype=E.prototype;function A(_,O,H){this.props=_,this.context=O,this.refs=N,this.updater=H||j}var R=A.prototype=new k;R.constructor=A,C(R,E.prototype),R.isPureReactComponent=!0;var L=Array.isArray;function z(){}var B={H:null,A:null,T:null,S:null},U=Object.prototype.hasOwnProperty;function q(_,O,H){var I=H.ref;return{$$typeof:e,type:_,key:O,ref:I!==void 0?I:null,props:H}}function Z(_,O){return q(_.type,O,_.props)}function Q(_){return typeof _=="object"&&_!==null&&_.$$typeof===e}function fe(_){var O={"=":"=0",":":"=2"};return"$"+_.replace(/[=:]/g,function(H){return O[H]})}var de=/\/+/g;function ce(_,O){return typeof _=="object"&&_!==null&&_.key!=null?fe(""+_.key):O.toString(36)}function he(_){switch(_.status){case"fulfilled":return _.value;case"rejected":throw _.reason;default:switch(typeof _.status=="string"?_.then(z,z):(_.status="pending",_.then(function(O){_.status==="pending"&&(_.status="fulfilled",_.value=O)},function(O){_.status==="pending"&&(_.status="rejected",_.reason=O)})),_.status){case"fulfilled":return _.value;case"rejected":throw _.reason}}throw _}function M(_,O,H,I,V){var ne=typeof _;(ne==="undefined"||ne==="boolean")&&(_=null);var J=!1;if(_===null)J=!0;else switch(ne){case"bigint":case"string":case"number":J=!0;break;case"object":switch(_.$$typeof){case e:case n:J=!0;break;case y:return J=_._init,M(J(_._payload),O,H,I,V)}}if(J)return V=V(_),J=I===""?"."+ce(_,0):I,L(V)?(H="",J!=null&&(H=J.replace(de,"$&/")+"/"),M(V,O,H,"",function(G){return G})):V!=null&&(Q(V)&&(V=Z(V,H+(V.key==null||_&&_.key===V.key?"":(""+V.key).replace(de,"$&/")+"/")+J)),O.push(V)),1;J=0;var me=I===""?".":I+":";if(L(_))for(var pe=0;pe<_.length;pe++)I=_[pe],ne=me+ce(I,pe),J+=M(I,O,H,ne,V);else if(pe=S(_),typeof pe=="function")for(_=pe.call(_),pe=0;!(I=_.next()).done;)I=I.value,ne=me+ce(I,pe++),J+=M(I,O,H,ne,V);else if(ne==="object"){if(typeof _.then=="function")return M(he(_),O,H,I,V);throw O=String(_),Error("Objects are not valid as a React child (found: "+(O==="[object Object]"?"object with keys {"+Object.keys(_).join(", ")+"}":O)+"). If you meant to render a collection of children, use an array instead.")}return J}function K(_,O,H){if(_==null)return _;var I=[],V=0;return M(_,I,"","",function(ne){return O.call(H,ne,V++)}),I}function re(_){if(_._status===-1){var O=_._result;O=O(),O.then(function(H){(_._status===0||_._status===-1)&&(_._status=1,_._result=H)},function(H){(_._status===0||_._status===-1)&&(_._status=2,_._result=H)}),_._status===-1&&(_._status=0,_._result=O)}if(_._status===1)return _._result.default;throw _._result}var oe=typeof reportError=="function"?reportError:function(_){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var O=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof _=="object"&&_!==null&&typeof _.message=="string"?String(_.message):String(_),error:_});if(!window.dispatchEvent(O))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",_);return}console.error(_)},ee={map:K,forEach:function(_,O,H){K(_,function(){O.apply(this,arguments)},H)},count:function(_){var O=0;return K(_,function(){O++}),O},toArray:function(_){return K(_,function(O){return O})||[]},only:function(_){if(!Q(_))throw Error("React.Children.only expected to receive a single React element child.");return _}};return _e.Activity=v,_e.Children=ee,_e.Component=E,_e.Fragment=a,_e.Profiler=l,_e.PureComponent=A,_e.StrictMode=o,_e.Suspense=h,_e.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=B,_e.__COMPILER_RUNTIME={__proto__:null,c:function(_){return B.H.useMemoCache(_)}},_e.cache=function(_){return function(){return _.apply(null,arguments)}},_e.cacheSignal=function(){return null},_e.cloneElement=function(_,O,H){if(_==null)throw Error("The argument must be a React element, but you passed "+_+".");var I=C({},_.props),V=_.key;if(O!=null)for(ne in O.key!==void 0&&(V=""+O.key),O)!U.call(O,ne)||ne==="key"||ne==="__self"||ne==="__source"||ne==="ref"&&O.ref===void 0||(I[ne]=O[ne]);var ne=arguments.length-2;if(ne===1)I.children=H;else if(1>>1,ee=M[oe];if(0>>1;oe<_;){var O=2*(oe+1)-1,H=M[O],I=O+1,V=M[I];if(0>l(H,re))Il(V,H)?(M[oe]=V,M[I]=re,oe=I):(M[oe]=H,M[O]=re,oe=O);else if(Il(V,re))M[oe]=V,M[I]=re,oe=I;else break e}}return K}function l(M,K){var re=M.sortIndex-K.sortIndex;return re!==0?re:M.id-K.id}if(e.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var i=performance;e.unstable_now=function(){return i.now()}}else{var d=Date,m=d.now();e.unstable_now=function(){return d.now()-m}}var h=[],p=[],y=1,v=null,x=3,S=!1,j=!1,C=!1,N=!1,E=typeof setTimeout=="function"?setTimeout:null,k=typeof clearTimeout=="function"?clearTimeout:null,A=typeof setImmediate<"u"?setImmediate:null;function R(M){for(var K=a(p);K!==null;){if(K.callback===null)o(p);else if(K.startTime<=M)o(p),K.sortIndex=K.expirationTime,n(h,K);else break;K=a(p)}}function L(M){if(C=!1,R(M),!j)if(a(h)!==null)j=!0,z||(z=!0,fe());else{var K=a(p);K!==null&&he(L,K.startTime-M)}}var z=!1,B=-1,U=5,q=-1;function Z(){return N?!0:!(e.unstable_now()-qM&&Z());){var oe=v.callback;if(typeof oe=="function"){v.callback=null,x=v.priorityLevel;var ee=oe(v.expirationTime<=M);if(M=e.unstable_now(),typeof ee=="function"){v.callback=ee,R(M),K=!0;break t}v===a(h)&&o(h),R(M)}else o(h);v=a(h)}if(v!==null)K=!0;else{var _=a(p);_!==null&&he(L,_.startTime-M),K=!1}}break e}finally{v=null,x=re,S=!1}K=void 0}}finally{K?fe():z=!1}}}var fe;if(typeof A=="function")fe=function(){A(Q)};else if(typeof MessageChannel<"u"){var de=new MessageChannel,ce=de.port2;de.port1.onmessage=Q,fe=function(){ce.postMessage(null)}}else fe=function(){E(Q,0)};function he(M,K){B=E(function(){M(e.unstable_now())},K)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(M){M.callback=null},e.unstable_forceFrameRate=function(M){0>M||125oe?(M.sortIndex=re,n(p,M),a(h)===null&&M===a(p)&&(C?(k(B),B=-1):C=!0,he(L,re-oe))):(M.sortIndex=ee,n(h,M),j||S||(j=!0,z||(z=!0,fe()))),M},e.unstable_shouldYield=Z,e.unstable_wrapCallback=function(M){var K=x;return function(){var re=x;x=K;try{return M.apply(this,arguments)}finally{x=re}}}})(Om)),Om}var y1;function zN(){return y1||(y1=1,Mm.exports=LN()),Mm.exports}var Dm={exports:{}},Gt={};/** + * @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 x1;function PN(){if(x1)return Gt;x1=1;var e=Cu();function n(h){var p="https://react.dev/errors/"+h;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(n){console.error(n)}}return e(),Dm.exports=PN(),Dm.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 w1;function BN(){if(w1)return kl;w1=1;var e=zN(),n=Cu(),a=Zx();function o(t){var r="https://react.dev/errors/"+t;if(1ee||(t.current=oe[ee],oe[ee]=null,ee--)}function H(t,r){ee++,oe[ee]=t.current,t.current=r}var I=_(null),V=_(null),ne=_(null),J=_(null);function me(t,r){switch(H(ne,r),H(V,t),H(I,null),r.nodeType){case 9:case 11:t=(t=r.documentElement)&&(t=t.namespaceURI)?zy(t):0;break;default:if(t=r.tagName,r=r.namespaceURI)r=zy(r),t=Py(r,t);else switch(t){case"svg":t=1;break;case"math":t=2;break;default:t=0}}O(I),H(I,t)}function pe(){O(I),O(V),O(ne)}function G(t){t.memoizedState!==null&&H(J,t);var r=I.current,s=Py(r,t.type);r!==s&&(H(V,t),H(I,s))}function se(t){V.current===t&&(O(I),O(V)),J.current===t&&(O(J),wl._currentValue=re)}var ge,je;function Ae(t){if(ge===void 0)try{throw Error()}catch(s){var r=s.stack.trim().match(/\n( *(at )?)/);ge=r&&r[1]||"",je=-1)":-1g||D[u]!==Y[g]){var te=` +`+D[u].replace(" at new "," at ");return t.displayName&&te.includes("")&&(te=te.replace("",t.displayName)),te}while(1<=u&&0<=g);break}}}finally{Qe=!1,Error.prepareStackTrace=s}return(s=t?t.displayName||t.name:"")?Ae(s):""}function Tt(t,r){switch(t.tag){case 26:case 27:case 5:return Ae(t.type);case 16:return Ae("Lazy");case 13:return t.child!==r&&r!==null?Ae("Suspense Fallback"):Ae("Suspense");case 19:return Ae("SuspenseList");case 0:case 15:return ct(t.type,!1);case 11:return ct(t.type.render,!1);case 1:return ct(t.type,!0);case 31:return Ae("Activity");default:return""}}function Ca(t){try{var r="",s=null;do r+=Tt(t,s),s=t,t=t.return;while(t);return r}catch(u){return` +Error generating stack: `+u.message+` +`+u.stack}}var Rt=Object.prototype.hasOwnProperty,Os=e.unstable_scheduleCallback,Ds=e.unstable_cancelCallback,Yt=e.unstable_shouldYield,$r=e.unstable_requestPaint,Wt=e.unstable_now,gd=e.unstable_getCurrentPriorityLevel,ja=e.unstable_ImmediatePriority,xi=e.unstable_UserBlockingPriority,Ea=e.unstable_NormalPriority,Ls=e.unstable_LowPriority,dr=e.unstable_IdlePriority,Si=e.log,Ir=e.unstable_setDisableYieldValue,Na=null,qt=null;function $n(t){if(typeof Si=="function"&&Ir(t),qt&&typeof qt.setStrictMode=="function")try{qt.setStrictMode(Na,t)}catch{}}var Ht=Math.clz32?Math.clz32:Xn,vd=Math.log,zs=Math.LN2;function Xn(t){return t>>>=0,t===0?32:31-(vd(t)/zs|0)|0}var fo=256,mo=262144,ka=4194304;function Zn(t){var r=t&42;if(r!==0)return r;switch(t&-t){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 t&261888;case 262144:case 524288:case 1048576:case 2097152:return t&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return t&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return t}}function Te(t,r,s){var u=t.pendingLanes;if(u===0)return 0;var g=0,b=t.suspendedLanes,w=t.pingedLanes;t=t.warmLanes;var T=u&134217727;return T!==0?(u=T&~b,u!==0?g=Zn(u):(w&=T,w!==0?g=Zn(w):s||(s=T&~t,s!==0&&(g=Zn(s))))):(T=u&~b,T!==0?g=Zn(T):w!==0?g=Zn(w):s||(s=u&~t,s!==0&&(g=Zn(s)))),g===0?0:r!==0&&r!==g&&(r&b)===0&&(b=g&-g,s=r&-r,b>=s||b===32&&(s&4194048)!==0)?r:g}function ut(t,r){return(t.pendingLanes&~(t.suspendedLanes&~t.pingedLanes)&r)===0}function At(t,r){switch(t){case 1:case 2:case 4:case 8:case 64:return r+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return r+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Vt(){var t=ka;return ka<<=1,(ka&62914560)===0&&(ka=4194304),t}function Ur(t){for(var r=[],s=0;31>s;s++)r.push(t);return r}function mt(t,r){t.pendingLanes|=r,r!==268435456&&(t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0)}function Zt(t,r,s,u,g,b){var w=t.pendingLanes;t.pendingLanes=s,t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0,t.expiredLanes&=s,t.entangledLanes&=s,t.errorRecoveryDisabledLanes&=s,t.shellSuspendCounter=0;var T=t.entanglements,D=t.expirationTimes,Y=t.hiddenUpdates;for(s=w&~s;0"u")return null;try{return t.activeElement||t.body}catch{return t.body}}var C5=/[\n"\\]/g;function En(t){return t.replace(C5,function(r){return"\\"+r.charCodeAt(0).toString(16)+" "})}function wd(t,r,s,u,g,b,w,T){t.name="",w!=null&&typeof w!="function"&&typeof w!="symbol"&&typeof w!="boolean"?t.type=w:t.removeAttribute("type"),r!=null?w==="number"?(r===0&&t.value===""||t.value!=r)&&(t.value=""+jn(r)):t.value!==""+jn(r)&&(t.value=""+jn(r)):w!=="submit"&&w!=="reset"||t.removeAttribute("value"),r!=null?Cd(t,w,jn(r)):s!=null?Cd(t,w,jn(s)):u!=null&&t.removeAttribute("value"),g==null&&b!=null&&(t.defaultChecked=!!b),g!=null&&(t.checked=g&&typeof g!="function"&&typeof g!="symbol"),T!=null&&typeof T!="function"&&typeof T!="symbol"&&typeof T!="boolean"?t.name=""+jn(T):t.removeAttribute("name")}function Ag(t,r,s,u,g,b,w,T){if(b!=null&&typeof b!="function"&&typeof b!="symbol"&&typeof b!="boolean"&&(t.type=b),r!=null||s!=null){if(!(b!=="submit"&&b!=="reset"||r!=null)){Sd(t);return}s=s!=null?""+jn(s):"",r=r!=null?""+jn(r):s,T||r===t.value||(t.value=r),t.defaultValue=r}u=u??g,u=typeof u!="function"&&typeof u!="symbol"&&!!u,t.checked=T?t.checked:!!u,t.defaultChecked=!!u,w!=null&&typeof w!="function"&&typeof w!="symbol"&&typeof w!="boolean"&&(t.name=w),Sd(t)}function Cd(t,r,s){r==="number"&&ji(t.ownerDocument)===t||t.defaultValue===""+s||(t.defaultValue=""+s)}function xo(t,r,s,u){if(t=t.options,r){r={};for(var g=0;g"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Td=!1;if(pr)try{var Is={};Object.defineProperty(Is,"passive",{get:function(){Td=!0}}),window.addEventListener("test",Is,Is),window.removeEventListener("test",Is,Is)}catch{Td=!1}var Vr=null,Rd=null,Ni=null;function Pg(){if(Ni)return Ni;var t,r=Rd,s=r.length,u,g="value"in Vr?Vr.value:Vr.textContent,b=g.length;for(t=0;t=Vs),Vg=" ",Gg=!1;function Fg(t,r){switch(t){case"keyup":return Z5.indexOf(r.keyCode)!==-1;case"keydown":return r.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Yg(t){return t=t.detail,typeof t=="object"&&"data"in t?t.data:null}var jo=!1;function J5(t,r){switch(t){case"compositionend":return Yg(r);case"keypress":return r.which!==32?null:(Gg=!0,Vg);case"textInput":return t=r.data,t===Vg&&Gg?null:t;default:return null}}function eE(t,r){if(jo)return t==="compositionend"||!Dd&&Fg(t,r)?(t=Pg(),Ni=Rd=Vr=null,jo=!1,t):null;switch(t){case"paste":return null;case"keypress":if(!(r.ctrlKey||r.altKey||r.metaKey)||r.ctrlKey&&r.altKey){if(r.char&&1=r)return{node:s,offset:r-t};t=u}e:{for(;s;){if(s.nextSibling){s=s.nextSibling;break e}s=s.parentNode}s=void 0}s=ev(s)}}function nv(t,r){return t&&r?t===r?!0:t&&t.nodeType===3?!1:r&&r.nodeType===3?nv(t,r.parentNode):"contains"in t?t.contains(r):t.compareDocumentPosition?!!(t.compareDocumentPosition(r)&16):!1:!1}function rv(t){t=t!=null&&t.ownerDocument!=null&&t.ownerDocument.defaultView!=null?t.ownerDocument.defaultView:window;for(var r=ji(t.document);r instanceof t.HTMLIFrameElement;){try{var s=typeof r.contentWindow.location.href=="string"}catch{s=!1}if(s)t=r.contentWindow;else break;r=ji(t.document)}return r}function Pd(t){var r=t&&t.nodeName&&t.nodeName.toLowerCase();return r&&(r==="input"&&(t.type==="text"||t.type==="search"||t.type==="tel"||t.type==="url"||t.type==="password")||r==="textarea"||t.contentEditable==="true")}var iE=pr&&"documentMode"in document&&11>=document.documentMode,Eo=null,Bd=null,Ws=null,$d=!1;function av(t,r,s){var u=s.window===s?s.document:s.nodeType===9?s:s.ownerDocument;$d||Eo==null||Eo!==ji(u)||(u=Eo,"selectionStart"in u&&Pd(u)?u={start:u.selectionStart,end:u.selectionEnd}:(u=(u.ownerDocument&&u.ownerDocument.defaultView||window).getSelection(),u={anchorNode:u.anchorNode,anchorOffset:u.anchorOffset,focusNode:u.focusNode,focusOffset:u.focusOffset}),Ws&&Ys(Ws,u)||(Ws=u,u=yc(Bd,"onSelect"),0>=w,g-=w,Qn=1<<32-Ht(r)+g|s<Oe?($e=Ce,Ce=null):$e=Ce.sibling;var Ge=W($,Ce,F[Oe],ae);if(Ge===null){Ce===null&&(Ce=$e);break}t&&Ce&&Ge.alternate===null&&r($,Ce),P=b(Ge,P,Oe),Ve===null?Ee=Ge:Ve.sibling=Ge,Ve=Ge,Ce=$e}if(Oe===F.length)return s($,Ce),Ie&&gr($,Oe),Ee;if(Ce===null){for(;OeOe?($e=Ce,Ce=null):$e=Ce.sibling;var da=W($,Ce,Ge.value,ae);if(da===null){Ce===null&&(Ce=$e);break}t&&Ce&&da.alternate===null&&r($,Ce),P=b(da,P,Oe),Ve===null?Ee=da:Ve.sibling=da,Ve=da,Ce=$e}if(Ge.done)return s($,Ce),Ie&&gr($,Oe),Ee;if(Ce===null){for(;!Ge.done;Oe++,Ge=F.next())Ge=le($,Ge.value,ae),Ge!==null&&(P=b(Ge,P,Oe),Ve===null?Ee=Ge:Ve.sibling=Ge,Ve=Ge);return Ie&&gr($,Oe),Ee}for(Ce=u(Ce);!Ge.done;Oe++,Ge=F.next())Ge=X(Ce,$,Oe,Ge.value,ae),Ge!==null&&(t&&Ge.alternate!==null&&Ce.delete(Ge.key===null?Oe:Ge.key),P=b(Ge,P,Oe),Ve===null?Ee=Ge:Ve.sibling=Ge,Ve=Ge);return t&&Ce.forEach(function(TN){return r($,TN)}),Ie&&gr($,Oe),Ee}function tt($,P,F,ae){if(typeof F=="object"&&F!==null&&F.type===C&&F.key===null&&(F=F.props.children),typeof F=="object"&&F!==null){switch(F.$$typeof){case S:e:{for(var Ee=F.key;P!==null;){if(P.key===Ee){if(Ee=F.type,Ee===C){if(P.tag===7){s($,P.sibling),ae=g(P,F.props.children),ae.return=$,$=ae;break e}}else if(P.elementType===Ee||typeof Ee=="object"&&Ee!==null&&Ee.$$typeof===U&&$a(Ee)===P.type){s($,P.sibling),ae=g(P,F.props),Js(ae,F),ae.return=$,$=ae;break e}s($,P);break}else r($,P);P=P.sibling}F.type===C?(ae=Da(F.props.children,$.mode,ae,F.key),ae.return=$,$=ae):(ae=zi(F.type,F.key,F.props,null,$.mode,ae),Js(ae,F),ae.return=$,$=ae)}return w($);case j:e:{for(Ee=F.key;P!==null;){if(P.key===Ee)if(P.tag===4&&P.stateNode.containerInfo===F.containerInfo&&P.stateNode.implementation===F.implementation){s($,P.sibling),ae=g(P,F.children||[]),ae.return=$,$=ae;break e}else{s($,P);break}else r($,P);P=P.sibling}ae=Yd(F,$.mode,ae),ae.return=$,$=ae}return w($);case U:return F=$a(F),tt($,P,F,ae)}if(he(F))return we($,P,F,ae);if(fe(F)){if(Ee=fe(F),typeof Ee!="function")throw Error(o(150));return F=Ee.call(F),Ne($,P,F,ae)}if(typeof F.then=="function")return tt($,P,Vi(F),ae);if(F.$$typeof===A)return tt($,P,$i($,F),ae);Gi($,F)}return typeof F=="string"&&F!==""||typeof F=="number"||typeof F=="bigint"?(F=""+F,P!==null&&P.tag===6?(s($,P.sibling),ae=g(P,F),ae.return=$,$=ae):(s($,P),ae=Fd(F,$.mode,ae),ae.return=$,$=ae),w($)):s($,P)}return function($,P,F,ae){try{Qs=0;var Ee=tt($,P,F,ae);return zo=null,Ee}catch(Ce){if(Ce===Lo||Ce===Ui)throw Ce;var Ve=fn(29,Ce,null,$.mode);return Ve.lanes=ae,Ve.return=$,Ve}finally{}}}var Ua=kv(!0),Tv=kv(!1),qr=!1;function af(t){t.updateQueue={baseState:t.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function of(t,r){t=t.updateQueue,r.updateQueue===t&&(r.updateQueue={baseState:t.baseState,firstBaseUpdate:t.firstBaseUpdate,lastBaseUpdate:t.lastBaseUpdate,shared:t.shared,callbacks:null})}function Kr(t){return{lane:t,tag:0,payload:null,callback:null,next:null}}function Xr(t,r,s){var u=t.updateQueue;if(u===null)return null;if(u=u.shared,(Ye&2)!==0){var g=u.pending;return g===null?r.next=r:(r.next=g.next,g.next=r),u.pending=r,r=Li(t),dv(t,null,s),r}return Di(t,u,r,s),Li(t)}function el(t,r,s){if(r=r.updateQueue,r!==null&&(r=r.shared,(s&4194048)!==0)){var u=r.lanes;u&=t.pendingLanes,s|=u,r.lanes=s,Qt(t,s)}}function sf(t,r){var s=t.updateQueue,u=t.alternate;if(u!==null&&(u=u.updateQueue,s===u)){var g=null,b=null;if(s=s.firstBaseUpdate,s!==null){do{var w={lane:s.lane,tag:s.tag,payload:s.payload,callback:null,next:null};b===null?g=b=w:b=b.next=w,s=s.next}while(s!==null);b===null?g=b=r:b=b.next=r}else g=b=r;s={baseState:u.baseState,firstBaseUpdate:g,lastBaseUpdate:b,shared:u.shared,callbacks:u.callbacks},t.updateQueue=s;return}t=s.lastBaseUpdate,t===null?s.firstBaseUpdate=r:t.next=r,s.lastBaseUpdate=r}var lf=!1;function tl(){if(lf){var t=Do;if(t!==null)throw t}}function nl(t,r,s,u){lf=!1;var g=t.updateQueue;qr=!1;var b=g.firstBaseUpdate,w=g.lastBaseUpdate,T=g.shared.pending;if(T!==null){g.shared.pending=null;var D=T,Y=D.next;D.next=null,w===null?b=Y:w.next=Y,w=D;var te=t.alternate;te!==null&&(te=te.updateQueue,T=te.lastBaseUpdate,T!==w&&(T===null?te.firstBaseUpdate=Y:T.next=Y,te.lastBaseUpdate=D))}if(b!==null){var le=g.baseState;w=0,te=Y=D=null,T=b;do{var W=T.lane&-536870913,X=W!==T.lane;if(X?(Be&W)===W:(u&W)===W){W!==0&&W===Oo&&(lf=!0),te!==null&&(te=te.next={lane:0,tag:T.tag,payload:T.payload,callback:null,next:null});e:{var we=t,Ne=T;W=r;var tt=s;switch(Ne.tag){case 1:if(we=Ne.payload,typeof we=="function"){le=we.call(tt,le,W);break e}le=we;break e;case 3:we.flags=we.flags&-65537|128;case 0:if(we=Ne.payload,W=typeof we=="function"?we.call(tt,le,W):we,W==null)break e;le=v({},le,W);break e;case 2:qr=!0}}W=T.callback,W!==null&&(t.flags|=64,X&&(t.flags|=8192),X=g.callbacks,X===null?g.callbacks=[W]:X.push(W))}else X={lane:W,tag:T.tag,payload:T.payload,callback:T.callback,next:null},te===null?(Y=te=X,D=le):te=te.next=X,w|=W;if(T=T.next,T===null){if(T=g.shared.pending,T===null)break;X=T,T=X.next,X.next=null,g.lastBaseUpdate=X,g.shared.pending=null}}while(!0);te===null&&(D=le),g.baseState=D,g.firstBaseUpdate=Y,g.lastBaseUpdate=te,b===null&&(g.shared.lanes=0),ta|=w,t.lanes=w,t.memoizedState=le}}function Rv(t,r){if(typeof t!="function")throw Error(o(191,t));t.call(r)}function Av(t,r){var s=t.callbacks;if(s!==null)for(t.callbacks=null,t=0;tb?b:8;var w=M.T,T={};M.T=T,kf(t,!1,r,s);try{var D=g(),Y=M.S;if(Y!==null&&Y(T,D),D!==null&&typeof D=="object"&&typeof D.then=="function"){var te=vE(D,u);ol(t,r,te,vn(t))}else ol(t,r,u,vn(t))}catch(le){ol(t,r,{then:function(){},status:"rejected",reason:le},vn())}finally{K.p=b,w!==null&&T.types!==null&&(w.types=T.types),M.T=w}}function CE(){}function Ef(t,r,s,u){if(t.tag!==5)throw Error(o(476));var g=ib(t).queue;lb(t,g,r,re,s===null?CE:function(){return cb(t),s(u)})}function ib(t){var r=t.memoizedState;if(r!==null)return r;r={memoizedState:re,baseState:re,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:xr,lastRenderedState:re},next:null};var s={};return r.next={memoizedState:s,baseState:s,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:xr,lastRenderedState:s},next:null},t.memoizedState=r,t=t.alternate,t!==null&&(t.memoizedState=r),r}function cb(t){var r=ib(t);r.next===null&&(r=t.alternate.memoizedState),ol(t,r.next.queue,{},vn())}function Nf(){return Pt(wl)}function ub(){return bt().memoizedState}function db(){return bt().memoizedState}function jE(t){for(var r=t.return;r!==null;){switch(r.tag){case 24:case 3:var s=vn();t=Kr(s);var u=Xr(r,t,s);u!==null&&(sn(u,r,s),el(u,r,s)),r={cache:ef()},t.payload=r;return}r=r.return}}function EE(t,r,s){var u=vn();s={lane:u,revertLane:0,gesture:null,action:s,hasEagerState:!1,eagerState:null,next:null},ec(t)?mb(r,s):(s=Vd(t,r,s,u),s!==null&&(sn(s,t,u),pb(s,r,u)))}function fb(t,r,s){var u=vn();ol(t,r,s,u)}function ol(t,r,s,u){var g={lane:u,revertLane:0,gesture:null,action:s,hasEagerState:!1,eagerState:null,next:null};if(ec(t))mb(r,g);else{var b=t.alternate;if(t.lanes===0&&(b===null||b.lanes===0)&&(b=r.lastRenderedReducer,b!==null))try{var w=r.lastRenderedState,T=b(w,s);if(g.hasEagerState=!0,g.eagerState=T,dn(T,w))return Di(t,r,g,0),nt===null&&Oi(),!1}catch{}finally{}if(s=Vd(t,r,g,u),s!==null)return sn(s,t,u),pb(s,r,u),!0}return!1}function kf(t,r,s,u){if(u={lane:2,revertLane:om(),gesture:null,action:u,hasEagerState:!1,eagerState:null,next:null},ec(t)){if(r)throw Error(o(479))}else r=Vd(t,s,u,2),r!==null&&sn(r,t,2)}function ec(t){var r=t.alternate;return t===Me||r!==null&&r===Me}function mb(t,r){Bo=Wi=!0;var s=t.pending;s===null?r.next=r:(r.next=s.next,s.next=r),t.pending=r}function pb(t,r,s){if((s&4194048)!==0){var u=r.lanes;u&=t.pendingLanes,s|=u,r.lanes=s,Qt(t,s)}}var sl={readContext:Pt,use:Xi,useCallback:ht,useContext:ht,useEffect:ht,useImperativeHandle:ht,useLayoutEffect:ht,useInsertionEffect:ht,useMemo:ht,useReducer:ht,useRef:ht,useState:ht,useDebugValue:ht,useDeferredValue:ht,useTransition:ht,useSyncExternalStore:ht,useId:ht,useHostTransitionStatus:ht,useFormState:ht,useActionState:ht,useOptimistic:ht,useMemoCache:ht,useCacheRefresh:ht};sl.useEffectEvent=ht;var hb={readContext:Pt,use:Xi,useCallback:function(t,r){return Kt().memoizedState=[t,r===void 0?null:r],t},useContext:Pt,useEffect:Qv,useImperativeHandle:function(t,r,s){s=s!=null?s.concat([t]):null,Qi(4194308,4,nb.bind(null,r,t),s)},useLayoutEffect:function(t,r){return Qi(4194308,4,t,r)},useInsertionEffect:function(t,r){Qi(4,2,t,r)},useMemo:function(t,r){var s=Kt();r=r===void 0?null:r;var u=t();if(Ha){$n(!0);try{t()}finally{$n(!1)}}return s.memoizedState=[u,r],u},useReducer:function(t,r,s){var u=Kt();if(s!==void 0){var g=s(r);if(Ha){$n(!0);try{s(r)}finally{$n(!1)}}}else g=r;return u.memoizedState=u.baseState=g,t={pending:null,lanes:0,dispatch:null,lastRenderedReducer:t,lastRenderedState:g},u.queue=t,t=t.dispatch=EE.bind(null,Me,t),[u.memoizedState,t]},useRef:function(t){var r=Kt();return t={current:t},r.memoizedState=t},useState:function(t){t=xf(t);var r=t.queue,s=fb.bind(null,Me,r);return r.dispatch=s,[t.memoizedState,s]},useDebugValue:Cf,useDeferredValue:function(t,r){var s=Kt();return jf(s,t,r)},useTransition:function(){var t=xf(!1);return t=lb.bind(null,Me,t.queue,!0,!1),Kt().memoizedState=t,[!1,t]},useSyncExternalStore:function(t,r,s){var u=Me,g=Kt();if(Ie){if(s===void 0)throw Error(o(407));s=s()}else{if(s=r(),nt===null)throw Error(o(349));(Be&127)!==0||zv(u,r,s)}g.memoizedState=s;var b={value:s,getSnapshot:r};return g.queue=b,Qv(Bv.bind(null,u,b,t),[t]),u.flags|=2048,Io(9,{destroy:void 0},Pv.bind(null,u,b,s,r),null),s},useId:function(){var t=Kt(),r=nt.identifierPrefix;if(Ie){var s=Jn,u=Qn;s=(u&~(1<<32-Ht(u)-1)).toString(32)+s,r="_"+r+"R_"+s,s=qi++,0<\/script>",b=b.removeChild(b.firstChild);break;case"select":b=typeof u.is=="string"?w.createElement("select",{is:u.is}):w.createElement("select"),u.multiple?b.multiple=!0:u.size&&(b.size=u.size);break;default:b=typeof u.is=="string"?w.createElement(g,{is:u.is}):w.createElement(g)}}b[Lt]=r,b[en]=u;e:for(w=r.child;w!==null;){if(w.tag===5||w.tag===6)b.appendChild(w.stateNode);else if(w.tag!==4&&w.tag!==27&&w.child!==null){w.child.return=w,w=w.child;continue}if(w===r)break e;for(;w.sibling===null;){if(w.return===null||w.return===r)break e;w=w.return}w.sibling.return=w.return,w=w.sibling}r.stateNode=b;e:switch($t(b,g,u),g){case"button":case"input":case"select":case"textarea":u=!!u.autoFocus;break e;case"img":u=!0;break e;default:u=!1}u&&wr(r)}}return it(r),Uf(r,r.type,t===null?null:t.memoizedProps,r.pendingProps,s),null;case 6:if(t&&r.stateNode!=null)t.memoizedProps!==u&&wr(r);else{if(typeof u!="string"&&r.stateNode===null)throw Error(o(166));if(t=ne.current,_o(r)){if(t=r.stateNode,s=r.memoizedProps,u=null,g=zt,g!==null)switch(g.tag){case 27:case 5:u=g.memoizedProps}t[Lt]=r,t=!!(t.nodeValue===s||u!==null&&u.suppressHydrationWarning===!0||Dy(t.nodeValue,s)),t||Yr(r,!0)}else t=xc(t).createTextNode(u),t[Lt]=r,r.stateNode=t}return it(r),null;case 31:if(s=r.memoizedState,t===null||t.memoizedState!==null){if(u=_o(r),s!==null){if(t===null){if(!u)throw Error(o(318));if(t=r.memoizedState,t=t!==null?t.dehydrated:null,!t)throw Error(o(557));t[Lt]=r}else La(),(r.flags&128)===0&&(r.memoizedState=null),r.flags|=4;it(r),t=!1}else s=Xd(),t!==null&&t.memoizedState!==null&&(t.memoizedState.hydrationErrors=s),t=!0;if(!t)return r.flags&256?(pn(r),r):(pn(r),null);if((r.flags&128)!==0)throw Error(o(558))}return it(r),null;case 13:if(u=r.memoizedState,t===null||t.memoizedState!==null&&t.memoizedState.dehydrated!==null){if(g=_o(r),u!==null&&u.dehydrated!==null){if(t===null){if(!g)throw Error(o(318));if(g=r.memoizedState,g=g!==null?g.dehydrated:null,!g)throw Error(o(317));g[Lt]=r}else La(),(r.flags&128)===0&&(r.memoizedState=null),r.flags|=4;it(r),g=!1}else g=Xd(),t!==null&&t.memoizedState!==null&&(t.memoizedState.hydrationErrors=g),g=!0;if(!g)return r.flags&256?(pn(r),r):(pn(r),null)}return pn(r),(r.flags&128)!==0?(r.lanes=s,r):(s=u!==null,t=t!==null&&t.memoizedState!==null,s&&(u=r.child,g=null,u.alternate!==null&&u.alternate.memoizedState!==null&&u.alternate.memoizedState.cachePool!==null&&(g=u.alternate.memoizedState.cachePool.pool),b=null,u.memoizedState!==null&&u.memoizedState.cachePool!==null&&(b=u.memoizedState.cachePool.pool),b!==g&&(u.flags|=2048)),s!==t&&s&&(r.child.flags|=8192),oc(r,r.updateQueue),it(r),null);case 4:return pe(),t===null&&cm(r.stateNode.containerInfo),it(r),null;case 10:return br(r.type),it(r),null;case 19:if(O(vt),u=r.memoizedState,u===null)return it(r),null;if(g=(r.flags&128)!==0,b=u.rendering,b===null)if(g)il(u,!1);else{if(gt!==0||t!==null&&(t.flags&128)!==0)for(t=r.child;t!==null;){if(b=Yi(t),b!==null){for(r.flags|=128,il(u,!1),t=b.updateQueue,r.updateQueue=t,oc(r,t),r.subtreeFlags=0,t=s,s=r.child;s!==null;)fv(s,t),s=s.sibling;return H(vt,vt.current&1|2),Ie&&gr(r,u.treeForkCount),r.child}t=t.sibling}u.tail!==null&&Wt()>uc&&(r.flags|=128,g=!0,il(u,!1),r.lanes=4194304)}else{if(!g)if(t=Yi(b),t!==null){if(r.flags|=128,g=!0,t=t.updateQueue,r.updateQueue=t,oc(r,t),il(u,!0),u.tail===null&&u.tailMode==="hidden"&&!b.alternate&&!Ie)return it(r),null}else 2*Wt()-u.renderingStartTime>uc&&s!==536870912&&(r.flags|=128,g=!0,il(u,!1),r.lanes=4194304);u.isBackwards?(b.sibling=r.child,r.child=b):(t=u.last,t!==null?t.sibling=b:r.child=b,u.last=b)}return u.tail!==null?(t=u.tail,u.rendering=t,u.tail=t.sibling,u.renderingStartTime=Wt(),t.sibling=null,s=vt.current,H(vt,g?s&1|2:s&1),Ie&&gr(r,u.treeForkCount),t):(it(r),null);case 22:case 23:return pn(r),uf(),u=r.memoizedState!==null,t!==null?t.memoizedState!==null!==u&&(r.flags|=8192):u&&(r.flags|=8192),u?(s&536870912)!==0&&(r.flags&128)===0&&(it(r),r.subtreeFlags&6&&(r.flags|=8192)):it(r),s=r.updateQueue,s!==null&&oc(r,s.retryQueue),s=null,t!==null&&t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(s=t.memoizedState.cachePool.pool),u=null,r.memoizedState!==null&&r.memoizedState.cachePool!==null&&(u=r.memoizedState.cachePool.pool),u!==s&&(r.flags|=2048),t!==null&&O(Ba),null;case 24:return s=null,t!==null&&(s=t.memoizedState.cache),r.memoizedState.cache!==s&&(r.flags|=2048),br(yt),it(r),null;case 25:return null;case 30:return null}throw Error(o(156,r.tag))}function AE(t,r){switch(qd(r),r.tag){case 1:return t=r.flags,t&65536?(r.flags=t&-65537|128,r):null;case 3:return br(yt),pe(),t=r.flags,(t&65536)!==0&&(t&128)===0?(r.flags=t&-65537|128,r):null;case 26:case 27:case 5:return se(r),null;case 31:if(r.memoizedState!==null){if(pn(r),r.alternate===null)throw Error(o(340));La()}return t=r.flags,t&65536?(r.flags=t&-65537|128,r):null;case 13:if(pn(r),t=r.memoizedState,t!==null&&t.dehydrated!==null){if(r.alternate===null)throw Error(o(340));La()}return t=r.flags,t&65536?(r.flags=t&-65537|128,r):null;case 19:return O(vt),null;case 4:return pe(),null;case 10:return br(r.type),null;case 22:case 23:return pn(r),uf(),t!==null&&O(Ba),t=r.flags,t&65536?(r.flags=t&-65537|128,r):null;case 24:return br(yt),null;case 25:return null;default:return null}}function $b(t,r){switch(qd(r),r.tag){case 3:br(yt),pe();break;case 26:case 27:case 5:se(r);break;case 4:pe();break;case 31:r.memoizedState!==null&&pn(r);break;case 13:pn(r);break;case 19:O(vt);break;case 10:br(r.type);break;case 22:case 23:pn(r),uf(),t!==null&&O(Ba);break;case 24:br(yt)}}function cl(t,r){try{var s=r.updateQueue,u=s!==null?s.lastEffect:null;if(u!==null){var g=u.next;s=g;do{if((s.tag&t)===t){u=void 0;var b=s.create,w=s.inst;u=b(),w.destroy=u}s=s.next}while(s!==g)}}catch(T){Xe(r,r.return,T)}}function Jr(t,r,s){try{var u=r.updateQueue,g=u!==null?u.lastEffect:null;if(g!==null){var b=g.next;u=b;do{if((u.tag&t)===t){var w=u.inst,T=w.destroy;if(T!==void 0){w.destroy=void 0,g=r;var D=s,Y=T;try{Y()}catch(te){Xe(g,D,te)}}}u=u.next}while(u!==b)}}catch(te){Xe(r,r.return,te)}}function Ib(t){var r=t.updateQueue;if(r!==null){var s=t.stateNode;try{Av(r,s)}catch(u){Xe(t,t.return,u)}}}function Ub(t,r,s){s.props=Va(t.type,t.memoizedProps),s.state=t.memoizedState;try{s.componentWillUnmount()}catch(u){Xe(t,r,u)}}function ul(t,r){try{var s=t.ref;if(s!==null){switch(t.tag){case 26:case 27:case 5:var u=t.stateNode;break;case 30:u=t.stateNode;break;default:u=t.stateNode}typeof s=="function"?t.refCleanup=s(u):s.current=u}}catch(g){Xe(t,r,g)}}function er(t,r){var s=t.ref,u=t.refCleanup;if(s!==null)if(typeof u=="function")try{u()}catch(g){Xe(t,r,g)}finally{t.refCleanup=null,t=t.alternate,t!=null&&(t.refCleanup=null)}else if(typeof s=="function")try{s(null)}catch(g){Xe(t,r,g)}else s.current=null}function Hb(t){var r=t.type,s=t.memoizedProps,u=t.stateNode;try{e:switch(r){case"button":case"input":case"select":case"textarea":s.autoFocus&&u.focus();break e;case"img":s.src?u.src=s.src:s.srcSet&&(u.srcset=s.srcSet)}}catch(g){Xe(t,t.return,g)}}function Hf(t,r,s){try{var u=t.stateNode;QE(u,t.type,s,r),u[en]=r}catch(g){Xe(t,t.return,g)}}function Vb(t){return t.tag===5||t.tag===3||t.tag===26||t.tag===27&&sa(t.type)||t.tag===4}function Vf(t){e:for(;;){for(;t.sibling===null;){if(t.return===null||Vb(t.return))return null;t=t.return}for(t.sibling.return=t.return,t=t.sibling;t.tag!==5&&t.tag!==6&&t.tag!==18;){if(t.tag===27&&sa(t.type)||t.flags&2||t.child===null||t.tag===4)continue e;t.child.return=t,t=t.child}if(!(t.flags&2))return t.stateNode}}function Gf(t,r,s){var u=t.tag;if(u===5||u===6)t=t.stateNode,r?(s.nodeType===9?s.body:s.nodeName==="HTML"?s.ownerDocument.body:s).insertBefore(t,r):(r=s.nodeType===9?s.body:s.nodeName==="HTML"?s.ownerDocument.body:s,r.appendChild(t),s=s._reactRootContainer,s!=null||r.onclick!==null||(r.onclick=mr));else if(u!==4&&(u===27&&sa(t.type)&&(s=t.stateNode,r=null),t=t.child,t!==null))for(Gf(t,r,s),t=t.sibling;t!==null;)Gf(t,r,s),t=t.sibling}function sc(t,r,s){var u=t.tag;if(u===5||u===6)t=t.stateNode,r?s.insertBefore(t,r):s.appendChild(t);else if(u!==4&&(u===27&&sa(t.type)&&(s=t.stateNode),t=t.child,t!==null))for(sc(t,r,s),t=t.sibling;t!==null;)sc(t,r,s),t=t.sibling}function Gb(t){var r=t.stateNode,s=t.memoizedProps;try{for(var u=t.type,g=r.attributes;g.length;)r.removeAttributeNode(g[0]);$t(r,u,s),r[Lt]=t,r[en]=s}catch(b){Xe(t,t.return,b)}}var Cr=!1,wt=!1,Ff=!1,Fb=typeof WeakSet=="function"?WeakSet:Set,Mt=null;function _E(t,r){if(t=t.containerInfo,fm=kc,t=rv(t),Pd(t)){if("selectionStart"in t)var s={start:t.selectionStart,end:t.selectionEnd};else e:{s=(s=t.ownerDocument)&&s.defaultView||window;var u=s.getSelection&&s.getSelection();if(u&&u.rangeCount!==0){s=u.anchorNode;var g=u.anchorOffset,b=u.focusNode;u=u.focusOffset;try{s.nodeType,b.nodeType}catch{s=null;break e}var w=0,T=-1,D=-1,Y=0,te=0,le=t,W=null;t:for(;;){for(var X;le!==s||g!==0&&le.nodeType!==3||(T=w+g),le!==b||u!==0&&le.nodeType!==3||(D=w+u),le.nodeType===3&&(w+=le.nodeValue.length),(X=le.firstChild)!==null;)W=le,le=X;for(;;){if(le===t)break t;if(W===s&&++Y===g&&(T=w),W===b&&++te===u&&(D=w),(X=le.nextSibling)!==null)break;le=W,W=le.parentNode}le=X}s=T===-1||D===-1?null:{start:T,end:D}}else s=null}s=s||{start:0,end:0}}else s=null;for(mm={focusedElem:t,selectionRange:s},kc=!1,Mt=r;Mt!==null;)if(r=Mt,t=r.child,(r.subtreeFlags&1028)!==0&&t!==null)t.return=r,Mt=t;else for(;Mt!==null;){switch(r=Mt,b=r.alternate,t=r.flags,r.tag){case 0:if((t&4)!==0&&(t=r.updateQueue,t=t!==null?t.events:null,t!==null))for(s=0;s title"))),$t(b,u,s),b[Lt]=t,_t(b),u=b;break e;case"link":var w=Zy("link","href",g).get(u+(s.href||""));if(w){for(var T=0;Ttt&&(w=tt,tt=Ne,Ne=w);var $=tv(T,Ne),P=tv(T,tt);if($&&P&&(X.rangeCount!==1||X.anchorNode!==$.node||X.anchorOffset!==$.offset||X.focusNode!==P.node||X.focusOffset!==P.offset)){var F=le.createRange();F.setStart($.node,$.offset),X.removeAllRanges(),Ne>tt?(X.addRange(F),X.extend(P.node,P.offset)):(F.setEnd(P.node,P.offset),X.addRange(F))}}}}for(le=[],X=T;X=X.parentNode;)X.nodeType===1&&le.push({element:X,left:X.scrollLeft,top:X.scrollTop});for(typeof T.focus=="function"&&T.focus(),T=0;Ts?32:s,M.T=null,s=Qf,Qf=null;var b=ra,w=Tr;if(jt=0,Fo=ra=null,Tr=0,(Ye&6)!==0)throw Error(o(331));var T=Ye;if(Ye|=4,ny(b.current),Jb(b,b.current,w,s),Ye=T,gl(0,!1),qt&&typeof qt.onPostCommitFiberRoot=="function")try{qt.onPostCommitFiberRoot(Na,b)}catch{}return!0}finally{K.p=g,M.T=u,xy(t,r)}}function wy(t,r,s){r=kn(s,r),r=_f(t.stateNode,r,2),t=Xr(t,r,2),t!==null&&(mt(t,2),tr(t))}function Xe(t,r,s){if(t.tag===3)wy(t,t,s);else for(;r!==null;){if(r.tag===3){wy(r,t,s);break}else if(r.tag===1){var u=r.stateNode;if(typeof r.type.getDerivedStateFromError=="function"||typeof u.componentDidCatch=="function"&&(na===null||!na.has(u))){t=kn(s,t),s=Cb(2),u=Xr(r,s,2),u!==null&&(jb(s,u,r,t),mt(u,2),tr(u));break}}r=r.return}}function nm(t,r,s){var u=t.pingCache;if(u===null){u=t.pingCache=new DE;var g=new Set;u.set(r,g)}else g=u.get(r),g===void 0&&(g=new Set,u.set(r,g));g.has(s)||(qf=!0,g.add(s),t=$E.bind(null,t,r,s),r.then(t,t))}function $E(t,r,s){var u=t.pingCache;u!==null&&u.delete(r),t.pingedLanes|=t.suspendedLanes&s,t.warmLanes&=~s,nt===t&&(Be&s)===s&&(gt===4||gt===3&&(Be&62914560)===Be&&300>Wt()-cc?(Ye&2)===0&&Yo(t,0):Kf|=s,Go===Be&&(Go=0)),tr(t)}function Cy(t,r){r===0&&(r=Vt()),t=Oa(t,r),t!==null&&(mt(t,r),tr(t))}function IE(t){var r=t.memoizedState,s=0;r!==null&&(s=r.retryLane),Cy(t,s)}function UE(t,r){var s=0;switch(t.tag){case 31:case 13:var u=t.stateNode,g=t.memoizedState;g!==null&&(s=g.retryLane);break;case 19:u=t.stateNode;break;case 22:u=t.stateNode._retryCache;break;default:throw Error(o(314))}u!==null&&u.delete(r),Cy(t,s)}function HE(t,r){return Os(t,r)}var gc=null,qo=null,rm=!1,vc=!1,am=!1,oa=0;function tr(t){t!==qo&&t.next===null&&(qo===null?gc=qo=t:qo=qo.next=t),vc=!0,rm||(rm=!0,GE())}function gl(t,r){if(!am&&vc){am=!0;do for(var s=!1,u=gc;u!==null;){if(t!==0){var g=u.pendingLanes;if(g===0)var b=0;else{var w=u.suspendedLanes,T=u.pingedLanes;b=(1<<31-Ht(42|t)+1)-1,b&=g&~(w&~T),b=b&201326741?b&201326741|1:b?b|2:0}b!==0&&(s=!0,ky(u,b))}else b=Be,b=Te(u,u===nt?b:0,u.cancelPendingCommit!==null||u.timeoutHandle!==-1),(b&3)===0||ut(u,b)||(s=!0,ky(u,b));u=u.next}while(s);am=!1}}function VE(){jy()}function jy(){vc=rm=!1;var t=0;oa!==0&&eN()&&(t=oa);for(var r=Wt(),s=null,u=gc;u!==null;){var g=u.next,b=Ey(u,r);b===0?(u.next=null,s===null?gc=g:s.next=g,g===null&&(qo=s)):(s=u,(t!==0||(b&3)!==0)&&(vc=!0)),u=g}jt!==0&&jt!==5||gl(t),oa!==0&&(oa=0)}function Ey(t,r){for(var s=t.suspendedLanes,u=t.pingedLanes,g=t.expirationTimes,b=t.pendingLanes&-62914561;0T)break;var te=D.transferSize,le=D.initiatorType;te&&Ly(le)&&(D=D.responseEnd,w+=te*(D"u"?null:document;function Wy(t,r,s){var u=Ko;if(u&&typeof r=="string"&&r){var g=En(r);g='link[rel="'+t+'"][href="'+g+'"]',typeof s=="string"&&(g+='[crossorigin="'+s+'"]'),Yy.has(g)||(Yy.add(g),t={rel:t,crossOrigin:s,href:r},u.querySelector(g)===null&&(r=u.createElement("link"),$t(r,"link",t),_t(r),u.head.appendChild(r)))}}function cN(t){Rr.D(t),Wy("dns-prefetch",t,null)}function uN(t,r){Rr.C(t,r),Wy("preconnect",t,r)}function dN(t,r,s){Rr.L(t,r,s);var u=Ko;if(u&&t&&r){var g='link[rel="preload"][as="'+En(r)+'"]';r==="image"&&s&&s.imageSrcSet?(g+='[imagesrcset="'+En(s.imageSrcSet)+'"]',typeof s.imageSizes=="string"&&(g+='[imagesizes="'+En(s.imageSizes)+'"]')):g+='[href="'+En(t)+'"]';var b=g;switch(r){case"style":b=Xo(t);break;case"script":b=Zo(t)}On.has(b)||(t=v({rel:"preload",href:r==="image"&&s&&s.imageSrcSet?void 0:t,as:r},s),On.set(b,t),u.querySelector(g)!==null||r==="style"&&u.querySelector(xl(b))||r==="script"&&u.querySelector(Sl(b))||(r=u.createElement("link"),$t(r,"link",t),_t(r),u.head.appendChild(r)))}}function fN(t,r){Rr.m(t,r);var s=Ko;if(s&&t){var u=r&&typeof r.as=="string"?r.as:"script",g='link[rel="modulepreload"][as="'+En(u)+'"][href="'+En(t)+'"]',b=g;switch(u){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":b=Zo(t)}if(!On.has(b)&&(t=v({rel:"modulepreload",href:t},r),On.set(b,t),s.querySelector(g)===null)){switch(u){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(s.querySelector(Sl(b)))return}u=s.createElement("link"),$t(u,"link",t),_t(u),s.head.appendChild(u)}}}function mN(t,r,s){Rr.S(t,r,s);var u=Ko;if(u&&t){var g=bo(u).hoistableStyles,b=Xo(t);r=r||"default";var w=g.get(b);if(!w){var T={loading:0,preload:null};if(w=u.querySelector(xl(b)))T.loading=5;else{t=v({rel:"stylesheet",href:t,"data-precedence":r},s),(s=On.get(b))&&xm(t,s);var D=w=u.createElement("link");_t(D),$t(D,"link",t),D._p=new Promise(function(Y,te){D.onload=Y,D.onerror=te}),D.addEventListener("load",function(){T.loading|=1}),D.addEventListener("error",function(){T.loading|=2}),T.loading|=4,wc(w,r,u)}w={type:"stylesheet",instance:w,count:1,state:T},g.set(b,w)}}}function pN(t,r){Rr.X(t,r);var s=Ko;if(s&&t){var u=bo(s).hoistableScripts,g=Zo(t),b=u.get(g);b||(b=s.querySelector(Sl(g)),b||(t=v({src:t,async:!0},r),(r=On.get(g))&&Sm(t,r),b=s.createElement("script"),_t(b),$t(b,"link",t),s.head.appendChild(b)),b={type:"script",instance:b,count:1,state:null},u.set(g,b))}}function hN(t,r){Rr.M(t,r);var s=Ko;if(s&&t){var u=bo(s).hoistableScripts,g=Zo(t),b=u.get(g);b||(b=s.querySelector(Sl(g)),b||(t=v({src:t,async:!0,type:"module"},r),(r=On.get(g))&&Sm(t,r),b=s.createElement("script"),_t(b),$t(b,"link",t),s.head.appendChild(b)),b={type:"script",instance:b,count:1,state:null},u.set(g,b))}}function qy(t,r,s,u){var g=(g=ne.current)?Sc(g):null;if(!g)throw Error(o(446));switch(t){case"meta":case"title":return null;case"style":return typeof s.precedence=="string"&&typeof s.href=="string"?(r=Xo(s.href),s=bo(g).hoistableStyles,u=s.get(r),u||(u={type:"style",instance:null,count:0,state:null},s.set(r,u)),u):{type:"void",instance:null,count:0,state:null};case"link":if(s.rel==="stylesheet"&&typeof s.href=="string"&&typeof s.precedence=="string"){t=Xo(s.href);var b=bo(g).hoistableStyles,w=b.get(t);if(w||(g=g.ownerDocument||g,w={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},b.set(t,w),(b=g.querySelector(xl(t)))&&!b._p&&(w.instance=b,w.state.loading=5),On.has(t)||(s={rel:"preload",as:"style",href:s.href,crossOrigin:s.crossOrigin,integrity:s.integrity,media:s.media,hrefLang:s.hrefLang,referrerPolicy:s.referrerPolicy},On.set(t,s),b||gN(g,t,s,w.state))),r&&u===null)throw Error(o(528,""));return w}if(r&&u!==null)throw Error(o(529,""));return null;case"script":return r=s.async,s=s.src,typeof s=="string"&&r&&typeof r!="function"&&typeof r!="symbol"?(r=Zo(s),s=bo(g).hoistableScripts,u=s.get(r),u||(u={type:"script",instance:null,count:0,state:null},s.set(r,u)),u):{type:"void",instance:null,count:0,state:null};default:throw Error(o(444,t))}}function Xo(t){return'href="'+En(t)+'"'}function xl(t){return'link[rel="stylesheet"]['+t+"]"}function Ky(t){return v({},t,{"data-precedence":t.precedence,precedence:null})}function gN(t,r,s,u){t.querySelector('link[rel="preload"][as="style"]['+r+"]")?u.loading=1:(r=t.createElement("link"),u.preload=r,r.addEventListener("load",function(){return u.loading|=1}),r.addEventListener("error",function(){return u.loading|=2}),$t(r,"link",s),_t(r),t.head.appendChild(r))}function Zo(t){return'[src="'+En(t)+'"]'}function Sl(t){return"script[async]"+t}function Xy(t,r,s){if(r.count++,r.instance===null)switch(r.type){case"style":var u=t.querySelector('style[data-href~="'+En(s.href)+'"]');if(u)return r.instance=u,_t(u),u;var g=v({},s,{"data-href":s.href,"data-precedence":s.precedence,href:null,precedence:null});return u=(t.ownerDocument||t).createElement("style"),_t(u),$t(u,"style",g),wc(u,s.precedence,t),r.instance=u;case"stylesheet":g=Xo(s.href);var b=t.querySelector(xl(g));if(b)return r.state.loading|=4,r.instance=b,_t(b),b;u=Ky(s),(g=On.get(g))&&xm(u,g),b=(t.ownerDocument||t).createElement("link"),_t(b);var w=b;return w._p=new Promise(function(T,D){w.onload=T,w.onerror=D}),$t(b,"link",u),r.state.loading|=4,wc(b,s.precedence,t),r.instance=b;case"script":return b=Zo(s.src),(g=t.querySelector(Sl(b)))?(r.instance=g,_t(g),g):(u=s,(g=On.get(b))&&(u=v({},s),Sm(u,g)),t=t.ownerDocument||t,g=t.createElement("script"),_t(g),$t(g,"link",u),t.head.appendChild(g),r.instance=g);case"void":return null;default:throw Error(o(443,r.type))}else r.type==="stylesheet"&&(r.state.loading&4)===0&&(u=r.instance,r.state.loading|=4,wc(u,s.precedence,t));return r.instance}function wc(t,r,s){for(var u=s.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),g=u.length?u[u.length-1]:null,b=g,w=0;w title"):null)}function vN(t,r,s){if(s===1||r.itemProp!=null)return!1;switch(t){case"meta":case"title":return!0;case"style":if(typeof r.precedence!="string"||typeof r.href!="string"||r.href==="")break;return!0;case"link":if(typeof r.rel!="string"||typeof r.href!="string"||r.href===""||r.onLoad||r.onError)break;switch(r.rel){case"stylesheet":return t=r.disabled,typeof r.precedence=="string"&&t==null;default:return!0}case"script":if(r.async&&typeof r.async!="function"&&typeof r.async!="symbol"&&!r.onLoad&&!r.onError&&r.src&&typeof r.src=="string")return!0}return!1}function Jy(t){return!(t.type==="stylesheet"&&(t.state.loading&3)===0)}function bN(t,r,s,u){if(s.type==="stylesheet"&&(typeof u.media!="string"||matchMedia(u.media).matches!==!1)&&(s.state.loading&4)===0){if(s.instance===null){var g=Xo(u.href),b=r.querySelector(xl(g));if(b){r=b._p,r!==null&&typeof r=="object"&&typeof r.then=="function"&&(t.count++,t=jc.bind(t),r.then(t,t)),s.state.loading|=4,s.instance=b,_t(b);return}b=r.ownerDocument||r,u=Ky(u),(g=On.get(g))&&xm(u,g),b=b.createElement("link"),_t(b);var w=b;w._p=new Promise(function(T,D){w.onload=T,w.onerror=D}),$t(b,"link",u),s.instance=b}t.stylesheets===null&&(t.stylesheets=new Map),t.stylesheets.set(s,r),(r=s.state.preload)&&(s.state.loading&3)===0&&(t.count++,s=jc.bind(t),r.addEventListener("load",s),r.addEventListener("error",s))}}var wm=0;function yN(t,r){return t.stylesheets&&t.count===0&&Nc(t,t.stylesheets),0wm?50:800)+r);return t.unsuspend=s,function(){t.unsuspend=null,clearTimeout(u),clearTimeout(g)}}:null}function jc(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Nc(this,this.stylesheets);else if(this.unsuspend){var t=this.unsuspend;this.unsuspend=null,t()}}}var Ec=null;function Nc(t,r){t.stylesheets=null,t.unsuspend!==null&&(t.count++,Ec=new Map,r.forEach(xN,t),Ec=null,jc.call(t))}function xN(t,r){if(!(r.state.loading&4)){var s=Ec.get(t);if(s)var u=s.get(null);else{s=new Map,Ec.set(t,s);for(var g=t.querySelectorAll("link[data-precedence],style[data-precedence]"),b=0;b"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(n){console.error(n)}}return e(),_m.exports=BN(),_m.exports}var IN=$N();/** + * react-router v7.15.1 + * + * 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 j1="popstate";function E1(e){return typeof e=="object"&&e!=null&&"pathname"in e&&"search"in e&&"hash"in e&&"state"in e&&"key"in e}function UN(e={}){function n(o,l){var p;let i=(p=l.state)==null?void 0:p.masked,{pathname:d,search:m,hash:h}=i||o.location;return pp("",{pathname:d,search:m,hash:h},l.state&&l.state.usr||null,l.state&&l.state.key||"default",i?{pathname:o.location.pathname,search:o.location.search,hash:o.location.hash}:void 0)}function a(o,l){return typeof l=="string"?l:Il(l)}return VN(n,a,null,e)}function ft(e,n){if(e===!1||e===null||typeof e>"u")throw new Error(n)}function Pn(e,n){if(!e){typeof console<"u"&&console.warn(n);try{throw new Error(n)}catch{}}}function HN(){return Math.random().toString(36).substring(2,10)}function N1(e,n){return{usr:e.state,key:e.key,idx:n,masked:e.mask?{pathname:e.pathname,search:e.search,hash:e.hash}:void 0}}function pp(e,n,a=null,o,l){return{pathname:typeof e=="string"?e:e.pathname,search:"",hash:"",...typeof n=="string"?ws(n):n,state:a,key:n&&n.key||o||HN(),mask:l}}function Il({pathname:e="/",search:n="",hash:a=""}){return n&&n!=="?"&&(e+=n.charAt(0)==="?"?n:"?"+n),a&&a!=="#"&&(e+=a.charAt(0)==="#"?a:"#"+a),e}function ws(e){let n={};if(e){let a=e.indexOf("#");a>=0&&(n.hash=e.substring(a),e=e.substring(0,a));let o=e.indexOf("?");o>=0&&(n.search=e.substring(o),e=e.substring(0,o)),e&&(n.pathname=e)}return n}function VN(e,n,a,o={}){let{window:l=document.defaultView,v5Compat:i=!1}=o,d=l.history,m="POP",h=null,p=y();p==null&&(p=0,d.replaceState({...d.state,idx:p},""));function y(){return(d.state||{idx:null}).idx}function v(){m="POP";let N=y(),E=N==null?null:N-p;p=N,h&&h({action:m,location:C.location,delta:E})}function x(N,E){m="PUSH";let k=E1(N)?N:pp(C.location,N,E);p=y()+1;let A=N1(k,p),R=C.createHref(k.mask||k);try{d.pushState(A,"",R)}catch(L){if(L instanceof DOMException&&L.name==="DataCloneError")throw L;l.location.assign(R)}i&&h&&h({action:m,location:C.location,delta:1})}function S(N,E){m="REPLACE";let k=E1(N)?N:pp(C.location,N,E);p=y();let A=N1(k,p),R=C.createHref(k.mask||k);d.replaceState(A,"",R),i&&h&&h({action:m,location:C.location,delta:0})}function j(N){return GN(N)}let C={get action(){return m},get location(){return e(l,d)},listen(N){if(h)throw new Error("A history only accepts one active listener");return l.addEventListener(j1,v),h=N,()=>{l.removeEventListener(j1,v),h=null}},createHref(N){return n(l,N)},createURL:j,encodeLocation(N){let E=j(N);return{pathname:E.pathname,search:E.search,hash:E.hash}},push:x,replace:S,go(N){return d.go(N)}};return C}function GN(e,n=!1){let a="http://localhost";typeof window<"u"&&(a=window.location.origin!=="null"?window.location.origin:window.location.href),ft(a,"No window.location.(origin|href) available to create URL");let o=typeof e=="string"?e:Il(e);return o=o.replace(/ $/,"%20"),!n&&o.startsWith("//")&&(o=a+o),new URL(o,a)}function Qx(e,n,a="/"){return FN(e,n,a,!1)}function FN(e,n,a,o,l){let i=typeof n=="string"?ws(n):n,d=Or(i.pathname||"/",a);if(d==null)return null;let m=YN(e),h=null,p=a3(d);for(let y=0;h==null&&y{let y={relativePath:p===void 0?d.path||"":p,caseSensitive:d.caseSensitive===!0,childrenIndex:m,route:d};if(y.relativePath.startsWith("/")){if(!y.relativePath.startsWith(o)&&h)return;ft(y.relativePath.startsWith(o),`Absolute route path "${y.relativePath}" nested under path "${o}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),y.relativePath=y.relativePath.slice(o.length)}let v=Fn([o,y.relativePath]),x=a.concat(y);d.children&&d.children.length>0&&(ft(d.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${v}".`),Jx(d.children,n,x,v,h)),!(d.path==null&&!d.index)&&n.push({path:v,score:e3(v,d.index),routesMeta:x})};return e.forEach((d,m)=>{var h;if(d.path===""||!((h=d.path)!=null&&h.includes("?")))i(d,m);else for(let p of e0(d.path))i(d,m,!0,p)}),n}function e0(e){let n=e.split("/");if(n.length===0)return[];let[a,...o]=n,l=a.endsWith("?"),i=a.replace(/\?$/,"");if(o.length===0)return l?[i,""]:[i];let d=e0(o.join("/")),m=[];return m.push(...d.map(h=>h===""?i:[i,h].join("/"))),l&&m.push(...d),m.map(h=>e.startsWith("/")&&h===""?"/":h)}function WN(e){e.sort((n,a)=>n.score!==a.score?a.score-n.score:t3(n.routesMeta.map(o=>o.childrenIndex),a.routesMeta.map(o=>o.childrenIndex)))}var qN=/^:[\w-]+$/,KN=3,XN=2,ZN=1,QN=10,JN=-2,k1=e=>e==="*";function e3(e,n){let a=e.split("/"),o=a.length;return a.some(k1)&&(o+=JN),n&&(o+=XN),a.filter(l=>!k1(l)).reduce((l,i)=>l+(qN.test(i)?KN:i===""?ZN:QN),o)}function t3(e,n){return e.length===n.length&&e.slice(0,-1).every((o,l)=>o===n[l])?e[e.length-1]-n[n.length-1]:0}function n3(e,n,a=!1){let{routesMeta:o}=e,l={},i="/",d=[];for(let m=0;m{if(y==="*"){let j=m[x]||"";d=i.slice(0,i.length-j.length).replace(/(.)\/+$/,"$1")}const S=m[x];return v&&!S?p[y]=void 0:p[y]=(S||"").replace(/%2F/g,"/"),p},{}),pathname:i,pathnameBase:d,pattern:e}}function r3(e,n=!1,a=!0){Pn(e==="*"||!e.endsWith("*")||e.endsWith("/*"),`Route path "${e}" will be treated as if it were "${e.replace(/\*$/,"/*")}" because the \`*\` character must always follow a \`/\` in the pattern. To get rid of this warning, please change the route path to "${e.replace(/\*$/,"/*")}".`);let o=[],l="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(d,m,h,p,y)=>{if(o.push({paramName:m,isOptional:h!=null}),h){let v=y.charAt(p+d.length);return v&&v!=="/"?"/([^\\/]*)":"(?:/([^\\/]*))?"}return"/([^\\/]+)"}).replace(/\/([\w-]+)\?(\/|$)/g,"(/$1)?$2");return e.endsWith("*")?(o.push({paramName:"*"}),l+=e==="*"||e==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):a?l+="\\/*$":e!==""&&e!=="/"&&(l+="(?:(?=\\/|$))"),[new RegExp(l,n?void 0:"i"),o]}function a3(e){try{return e.split("/").map(n=>decodeURIComponent(n).replace(/\//g,"%2F")).join("/")}catch(n){return Pn(!1,`The URL path "${e}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${n}).`),e}}function Or(e,n){if(n==="/")return e;if(!e.toLowerCase().startsWith(n.toLowerCase()))return null;let a=n.endsWith("/")?n.length-1:n.length,o=e.charAt(a);return o&&o!=="/"?null:e.slice(a)||"/"}var o3=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i;function s3(e,n="/"){let{pathname:a,search:o="",hash:l=""}=typeof e=="string"?ws(e):e,i;return a?(a=t0(a),a.startsWith("/")?i=T1(a.substring(1),"/"):i=T1(a,n)):i=n,{pathname:i,search:c3(o),hash:u3(l)}}function T1(e,n){let a=ou(n).split("/");return e.split("/").forEach(l=>{l===".."?a.length>1&&a.pop():l!=="."&&a.push(l)}),a.length>1?a.join("/"):"/"}function Lm(e,n,a,o){return`Cannot include a '${e}' character in a manually specified \`to.${n}\` field [${JSON.stringify(o)}]. Please separate it out to the \`to.${a}\` field. Alternatively you may provide the full path as a string in and the router will parse it for you.`}function l3(e){return e.filter((n,a)=>a===0||n.route.path&&n.route.path.length>0)}function rh(e){let n=l3(e);return n.map((a,o)=>o===n.length-1?a.pathname:a.pathnameBase)}function ju(e,n,a,o=!1){let l;typeof e=="string"?l=ws(e):(l={...e},ft(!l.pathname||!l.pathname.includes("?"),Lm("?","pathname","search",l)),ft(!l.pathname||!l.pathname.includes("#"),Lm("#","pathname","hash",l)),ft(!l.search||!l.search.includes("#"),Lm("#","search","hash",l)));let i=e===""||l.pathname==="",d=i?"/":l.pathname,m;if(d==null)m=a;else{let v=n.length-1;if(!o&&d.startsWith("..")){let x=d.split("/");for(;x[0]==="..";)x.shift(),v-=1;l.pathname=x.join("/")}m=v>=0?n[v]:"/"}let h=s3(l,m),p=d&&d!=="/"&&d.endsWith("/"),y=(i||d===".")&&a.endsWith("/");return!h.pathname.endsWith("/")&&(p||y)&&(h.pathname+="/"),h}var t0=e=>e.replace(/\/\/+/g,"/"),Fn=e=>t0(e.join("/")),ou=e=>e.replace(/\/+$/,""),i3=e=>ou(e).replace(/^\/*/,"/"),c3=e=>!e||e==="?"?"":e.startsWith("?")?e:"?"+e,u3=e=>!e||e==="#"?"":e.startsWith("#")?e:"#"+e,d3=class{constructor(e,n,a,o=!1){this.status=e,this.statusText=n||"",this.internal=o,a instanceof Error?(this.data=a.toString(),this.error=a):this.data=a}};function f3(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.internal=="boolean"&&"data"in e}function m3(e){let n=e.map(a=>a.route.path).filter(Boolean);return Fn(n)||"/"}var n0=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function r0(e,n){let a=e;if(typeof a!="string"||!o3.test(a))return{absoluteURL:void 0,isExternal:!1,to:a};let o=a,l=!1;if(n0)try{let i=new URL(window.location.href),d=a.startsWith("//")?new URL(i.protocol+a):new URL(a),m=Or(d.pathname,n);d.origin===i.origin&&m!=null?a=m+d.search+d.hash:l=!0}catch{Pn(!1,` contains an invalid URL which will probably break when clicked - please update to a valid URL path.`)}return{absoluteURL:o,isExternal:l,to:a}}Object.getOwnPropertyNames(Object.prototype).sort().join("\0");var a0=["POST","PUT","PATCH","DELETE"];new Set(a0);var p3=["GET",...a0];new Set(p3);var Cs=f.createContext(null);Cs.displayName="DataRouter";var Eu=f.createContext(null);Eu.displayName="DataRouterState";var o0=f.createContext(!1);function h3(){return f.useContext(o0)}var s0=f.createContext({isTransitioning:!1});s0.displayName="ViewTransition";var g3=f.createContext(new Map);g3.displayName="Fetchers";var v3=f.createContext(null);v3.displayName="Await";var xn=f.createContext(null);xn.displayName="Navigation";var Zl=f.createContext(null);Zl.displayName="Location";var qn=f.createContext({outlet:null,matches:[],isDataRoute:!1});qn.displayName="Route";var ah=f.createContext(null);ah.displayName="RouteError";var l0="REACT_ROUTER_ERROR",b3="REDIRECT",y3="ROUTE_ERROR_RESPONSE";function x3(e){if(e.startsWith(`${l0}:${b3}:{`))try{let n=JSON.parse(e.slice(28));if(typeof n=="object"&&n&&typeof n.status=="number"&&typeof n.statusText=="string"&&typeof n.location=="string"&&typeof n.reloadDocument=="boolean"&&typeof n.replace=="boolean")return n}catch{}}function S3(e){if(e.startsWith(`${l0}:${y3}:{`))try{let n=JSON.parse(e.slice(40));if(typeof n=="object"&&n&&typeof n.status=="number"&&typeof n.statusText=="string")return new d3(n.status,n.statusText,n.data)}catch{}}function w3(e,{relative:n}={}){ft(js(),"useHref() may be used only in the context of a component.");let{basename:a,navigator:o}=f.useContext(xn),{hash:l,pathname:i,search:d}=Ql(e,{relative:n}),m=i;return a!=="/"&&(m=i==="/"?a:Fn([a,i])),o.createHref({pathname:m,search:d,hash:l})}function js(){return f.useContext(Zl)!=null}function Sn(){return ft(js(),"useLocation() may be used only in the context of a component."),f.useContext(Zl).location}var i0="You should call navigate() in a React.useEffect(), not when your component is first rendered.";function c0(e){f.useContext(xn).static||f.useLayoutEffect(e)}function oo(){let{isDataRoute:e}=f.useContext(qn);return e?P3():C3()}function C3(){ft(js(),"useNavigate() may be used only in the context of a component.");let e=f.useContext(Cs),{basename:n,navigator:a}=f.useContext(xn),{matches:o}=f.useContext(qn),{pathname:l}=Sn(),i=JSON.stringify(rh(o)),d=f.useRef(!1);return c0(()=>{d.current=!0}),f.useCallback((h,p={})=>{if(Pn(d.current,i0),!d.current)return;if(typeof h=="number"){a.go(h);return}let y=ju(h,JSON.parse(i),l,p.relative==="path");e==null&&n!=="/"&&(y.pathname=y.pathname==="/"?n:Fn([n,y.pathname])),(p.replace?a.replace:a.push)(y,p.state,p)},[n,a,i,l,e])}var j3=f.createContext(null);function E3(e){let n=f.useContext(qn).outlet;return f.useMemo(()=>n&&f.createElement(j3.Provider,{value:e},n),[n,e])}function Ql(e,{relative:n}={}){let{matches:a}=f.useContext(qn),{pathname:o}=Sn(),l=JSON.stringify(rh(a));return f.useMemo(()=>ju(e,JSON.parse(l),o,n==="path"),[e,l,o,n])}function N3(e,n){return u0(e,n)}function u0(e,n,a){var N;ft(js(),"useRoutes() may be used only in the context of a component.");let{navigator:o}=f.useContext(xn),{matches:l}=f.useContext(qn),i=l[l.length-1],d=i?i.params:{},m=i?i.pathname:"/",h=i?i.pathnameBase:"/",p=i&&i.route;{let E=p&&p.path||"";f0(m,!p||E.endsWith("*")||E.endsWith("*?"),`You rendered descendant (or called \`useRoutes()\`) at "${m}" (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 y=Sn(),v;if(n){let E=typeof n=="string"?ws(n):n;ft(h==="/"||((N=E.pathname)==null?void 0:N.startsWith(h)),`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 "${h}" but pathname "${E.pathname}" was given in the \`location\` prop.`),v=E}else v=y;let x=v.pathname||"/",S=x;if(h!=="/"){let E=h.replace(/^\//,"").split("/");S="/"+x.replace(/^\//,"").split("/").slice(E.length).join("/")}let j=a&&a.state.matches.length?a.state.matches.map(E=>Object.assign(E,{route:a.manifest[E.route.id]||E.route})):Qx(e,{pathname:S});Pn(p||j!=null,`No routes matched location "${v.pathname}${v.search}${v.hash}" `),Pn(j==null||j[j.length-1].route.element!==void 0||j[j.length-1].route.Component!==void 0||j[j.length-1].route.lazy!==void 0,`Matched leaf route at location "${v.pathname}${v.search}${v.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 C=_3(j&&j.map(E=>Object.assign({},E,{params:Object.assign({},d,E.params),pathname:Fn([h,o.encodeLocation?o.encodeLocation(E.pathname.replace(/%/g,"%25").replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:E.pathname]),pathnameBase:E.pathnameBase==="/"?h:Fn([h,o.encodeLocation?o.encodeLocation(E.pathnameBase.replace(/%/g,"%25").replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:E.pathnameBase])})),l,a);return n&&C?f.createElement(Zl.Provider,{value:{location:{pathname:"/",search:"",hash:"",state:null,key:"default",mask:void 0,...v},navigationType:"POP"}},C):C}function k3(){let e=z3(),n=f3(e)?`${e.status} ${e.statusText}`:e instanceof Error?e.message:JSON.stringify(e),a=e instanceof Error?e.stack:null,o="rgba(200,200,200, 0.5)",l={padding:"0.5rem",backgroundColor:o},i={padding:"2px 4px",backgroundColor:o},d=null;return console.error("Error handled by React Router default ErrorBoundary:",e),d=f.createElement(f.Fragment,null,f.createElement("p",null,"💿 Hey developer 👋"),f.createElement("p",null,"You can provide a way better UX than this when your app throws errors by providing your own ",f.createElement("code",{style:i},"ErrorBoundary")," or"," ",f.createElement("code",{style:i},"errorElement")," prop on your route.")),f.createElement(f.Fragment,null,f.createElement("h2",null,"Unexpected Application Error!"),f.createElement("h3",{style:{fontStyle:"italic"}},n),a?f.createElement("pre",{style:l},a):null,d)}var T3=f.createElement(k3,null),d0=class extends f.Component{constructor(e){super(e),this.state={location:e.location,revalidation:e.revalidation,error:e.error}}static getDerivedStateFromError(e){return{error:e}}static getDerivedStateFromProps(e,n){return n.location!==e.location||n.revalidation!=="idle"&&e.revalidation==="idle"?{error:e.error,location:e.location,revalidation:e.revalidation}:{error:e.error!==void 0?e.error:n.error,location:n.location,revalidation:e.revalidation||n.revalidation}}componentDidCatch(e,n){this.props.onError?this.props.onError(e,n):console.error("React Router caught the following error during render",e)}render(){let e=this.state.error;if(this.context&&typeof e=="object"&&e&&"digest"in e&&typeof e.digest=="string"){const a=S3(e.digest);a&&(e=a)}let n=e!==void 0?f.createElement(qn.Provider,{value:this.props.routeContext},f.createElement(ah.Provider,{value:e,children:this.props.component})):this.props.children;return this.context?f.createElement(R3,{error:e},n):n}};d0.contextType=o0;var zm=new WeakMap;function R3({children:e,error:n}){let{basename:a}=f.useContext(xn);if(typeof n=="object"&&n&&"digest"in n&&typeof n.digest=="string"){let o=x3(n.digest);if(o){let l=zm.get(n);if(l)throw l;let i=r0(o.location,a);if(n0&&!zm.get(n))if(i.isExternal||o.reloadDocument)window.location.href=i.absoluteURL||i.to;else{const d=Promise.resolve().then(()=>window.__reactRouterDataRouter.navigate(i.to,{replace:o.replace}));throw zm.set(n,d),d}return f.createElement("meta",{httpEquiv:"refresh",content:`0;url=${i.absoluteURL||i.to}`})}}return e}function A3({routeContext:e,match:n,children:a}){let o=f.useContext(Cs);return o&&o.static&&o.staticContext&&(n.route.errorElement||n.route.ErrorBoundary)&&(o.staticContext._deepestRenderedBoundaryId=n.route.id),f.createElement(qn.Provider,{value:e},a)}function _3(e,n=[],a){let o=a==null?void 0:a.state;if(e==null){if(!o)return null;if(o.errors)e=o.matches;else if(n.length===0&&!o.initialized&&o.matches.length>0)e=o.matches;else return null}let l=e,i=o==null?void 0:o.errors;if(i!=null){let y=l.findIndex(v=>v.route.id&&(i==null?void 0:i[v.route.id])!==void 0);ft(y>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(i).join(",")}`),l=l.slice(0,Math.min(l.length,y+1))}let d=!1,m=-1;if(a&&o){d=o.renderFallback;for(let y=0;y=0?l=l.slice(0,m+1):l=[l[0]];break}}}}let h=a==null?void 0:a.onError,p=o&&h?(y,v)=>{var x,S;h(y,{location:o.location,params:((S=(x=o.matches)==null?void 0:x[0])==null?void 0:S.params)??{},pattern:m3(o.matches),errorInfo:v})}:void 0;return l.reduceRight((y,v,x)=>{let S,j=!1,C=null,N=null;o&&(S=i&&v.route.id?i[v.route.id]:void 0,C=v.route.errorElement||T3,d&&(m<0&&x===0?(f0("route-fallback",!1,"No `HydrateFallback` element provided to render during initial hydration"),j=!0,N=null):m===x&&(j=!0,N=v.route.hydrateFallbackElement||null)));let E=n.concat(l.slice(0,x+1)),k=()=>{let A;return S?A=C:j?A=N:v.route.Component?A=f.createElement(v.route.Component,null):v.route.element?A=v.route.element:A=y,f.createElement(A3,{match:v,routeContext:{outlet:y,matches:E,isDataRoute:o!=null},children:A})};return o&&(v.route.ErrorBoundary||v.route.errorElement||x===0)?f.createElement(d0,{location:o.location,revalidation:o.revalidation,component:C,error:S,children:k(),routeContext:{outlet:null,matches:E,isDataRoute:!0},onError:p}):k()},null)}function oh(e){return`${e} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function M3(e){let n=f.useContext(Cs);return ft(n,oh(e)),n}function O3(e){let n=f.useContext(Eu);return ft(n,oh(e)),n}function D3(e){let n=f.useContext(qn);return ft(n,oh(e)),n}function sh(e){let n=D3(e),a=n.matches[n.matches.length-1];return ft(a.route.id,`${e} can only be used on routes that contain a unique "id"`),a.route.id}function L3(){return sh("useRouteId")}function z3(){var o;let e=f.useContext(ah),n=O3("useRouteError"),a=sh("useRouteError");return e!==void 0?e:(o=n.errors)==null?void 0:o[a]}function P3(){let{router:e}=M3("useNavigate"),n=sh("useNavigate"),a=f.useRef(!1);return c0(()=>{a.current=!0}),f.useCallback(async(l,i={})=>{Pn(a.current,i0),a.current&&(typeof l=="number"?await e.navigate(l):await e.navigate(l,{fromRouteId:n,...i}))},[e,n])}var R1={};function f0(e,n,a){!n&&!R1[e]&&(R1[e]=!0,Pn(!1,a))}f.memo(B3);function B3({routes:e,manifest:n,future:a,state:o,isStatic:l,onError:i}){return u0(e,void 0,{manifest:n,state:o,isStatic:l,onError:i})}function Mr({to:e,replace:n,state:a,relative:o}){ft(js()," may be used only in the context of a component.");let{static:l}=f.useContext(xn);Pn(!l," 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:i}=f.useContext(qn),{pathname:d}=Sn(),m=oo(),h=ju(e,rh(i),d,o==="path"),p=JSON.stringify(h);return f.useEffect(()=>{m(JSON.parse(p),{replace:n,state:a,relative:o})},[m,p,o,n,a]),null}function $3(e){return E3(e.context)}function ln(e){ft(!1,"A is only ever to be used as the child of element, never rendered directly. Please wrap your in a .")}function I3({basename:e="/",children:n=null,location:a,navigationType:o="POP",navigator:l,static:i=!1,useTransitions:d}){ft(!js(),"You cannot render a inside another . You should never have more than one in your app.");let m=e.replace(/^\/*/,"/"),h=f.useMemo(()=>({basename:m,navigator:l,static:i,useTransitions:d,future:{}}),[m,l,i,d]);typeof a=="string"&&(a=ws(a));let{pathname:p="/",search:y="",hash:v="",state:x=null,key:S="default",mask:j}=a,C=f.useMemo(()=>{let N=Or(p,m);return N==null?null:{location:{pathname:N,search:y,hash:v,state:x,key:S,mask:j},navigationType:o}},[m,p,y,v,x,S,o,j]);return Pn(C!=null,` is not able to match the URL "${p}${y}${v}" because it does not start with the basename, so the won't render anything.`),C==null?null:f.createElement(xn.Provider,{value:h},f.createElement(Zl.Provider,{children:n,value:C}))}function A1({children:e,location:n}){return N3(hp(e),n)}function hp(e,n=[]){let a=[];return f.Children.forEach(e,(o,l)=>{if(!f.isValidElement(o))return;let i=[...n,l];if(o.type===f.Fragment){a.push.apply(a,hp(o.props.children,i));return}ft(o.type===ln,`[${typeof o.type=="string"?o.type:o.type.name}] is not a component. All component children of must be a or `),ft(!o.props.index||!o.props.children,"An index route cannot have child routes.");let d={id:o.props.id||i.join("-"),caseSensitive:o.props.caseSensitive,element:o.props.element,Component:o.props.Component,index:o.props.index,path:o.props.path,middleware:o.props.middleware,loader:o.props.loader,action:o.props.action,hydrateFallbackElement:o.props.hydrateFallbackElement,HydrateFallback:o.props.HydrateFallback,errorElement:o.props.errorElement,ErrorBoundary:o.props.ErrorBoundary,hasErrorBoundary:o.props.hasErrorBoundary===!0||o.props.ErrorBoundary!=null||o.props.errorElement!=null,shouldRevalidate:o.props.shouldRevalidate,handle:o.props.handle,lazy:o.props.lazy};o.props.children&&(d.children=hp(o.props.children,i)),a.push(d)}),a}var qc="get",Kc="application/x-www-form-urlencoded";function Nu(e){return typeof HTMLElement<"u"&&e instanceof HTMLElement}function U3(e){return Nu(e)&&e.tagName.toLowerCase()==="button"}function H3(e){return Nu(e)&&e.tagName.toLowerCase()==="form"}function V3(e){return Nu(e)&&e.tagName.toLowerCase()==="input"}function G3(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function F3(e,n){return e.button===0&&(!n||n==="_self")&&!G3(e)}function gp(e=""){return new URLSearchParams(typeof e=="string"||Array.isArray(e)||e instanceof URLSearchParams?e:Object.keys(e).reduce((n,a)=>{let o=e[a];return n.concat(Array.isArray(o)?o.map(l=>[a,l]):[[a,o]])},[]))}function Y3(e,n){let a=gp(e);return n&&n.forEach((o,l)=>{a.has(l)||n.getAll(l).forEach(i=>{a.append(l,i)})}),a}var Dc=null;function W3(){if(Dc===null)try{new FormData(document.createElement("form"),0),Dc=!1}catch{Dc=!0}return Dc}var q3=new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);function Pm(e){return e!=null&&!q3.has(e)?(Pn(!1,`"${e}" is not a valid \`encType\` for \`
\`/\`\` and will default to "${Kc}"`),null):e}function K3(e,n){let a,o,l,i,d;if(H3(e)){let m=e.getAttribute("action");o=m?Or(m,n):null,a=e.getAttribute("method")||qc,l=Pm(e.getAttribute("enctype"))||Kc,i=new FormData(e)}else if(U3(e)||V3(e)&&(e.type==="submit"||e.type==="image")){let m=e.form;if(m==null)throw new Error('Cannot submit a `,L=>`${R}-${L.id}`)}const N=x`
${n.i18n.searchDescription}
${n.i18n.skinToneDescription}
${S(n.skinTones,(k,A)=>x`
${k}
`,k=>k)}
${S(n.currentEmojisWithCategories,(k,A)=>x`
${j(k.emojis,n.searchMode,"emo")}
`,k=>k.category)}
`,E=(k,A)=>{for(const R of e.querySelectorAll(`[${k}]`))A(R,R.getAttribute(k))};if(h){e.appendChild(N);for(const k of["click","focusout","input","keydown","keyup"])E(`data-on-${k}`,(A,R)=>{A.addEventListener(k,o[R])});E("data-ref",(k,A)=>{i[A]=k}),d.addEventListener("abort",()=>{e.removeChild(N)})}E("data-action",(k,A)=>{let R=m.get(A);R||m.set(A,R=new WeakSet),R.has(k)||(R.add(k),l[A](k))})}const wu=typeof queueMicrotask=="function"?queueMicrotask:e=>Promise.resolve().then(e);function Ez(e){let n=!1,a;const o=new Map,l=new Set;let i;const d=()=>{if(n)return;const p=[...l];l.clear();try{for(const y of p)y()}finally{i=!1,l.size&&(i=!0,wu(d))}},m=new Proxy({},{get(p,y){if(a){let v=o.get(y);v||(v=new Set,o.set(y,v)),v.add(a)}return p[y]},set(p,y,v){if(p[y]!==v){p[y]=v;const x=o.get(y);if(x){for(const S of x)l.add(S);i||(i=!0,wu(d))}}return!0}}),h=p=>{const y=()=>{const v=a;a=y;try{return p()}finally{a=v}};return y()};return e.addEventListener("abort",()=>{n=!0}),{state:m,createEffect:h}}function fp(e,n,a){if(e.length!==n.length)return!1;for(let o=0;o{l.disconnect()})),l.observe(e)}}const mp=[],{assign:Yc}=Object;function kz(e,n){const a={},o=new AbortController,l=o.signal,{state:i,createEffect:d}=Ez(l),m=new Map;Yc(i,{skinToneEmoji:void 0,i18n:void 0,database:void 0,customEmoji:void 0,customCategorySorting:void 0,emojiVersion:void 0}),Yc(i,n),Yc(i,{initialLoad:!0,currentEmojis:[],currentEmojisWithCategories:[],rawSearchText:"",searchText:"",searchMode:!1,activeSearchItem:-1,message:void 0,skinTonePickerExpanded:!1,skinTonePickerExpandedAfterAnimation:!1,currentSkinTone:0,activeSkinTone:0,skinToneButtonText:void 0,pickerStyle:void 0,skinToneButtonLabel:"",skinTones:[],currentFavorites:[],defaultFavoriteEmojis:void 0,numColumns:YL,isRtl:!1,currentGroupIndex:0,groups:lp,databaseLoaded:!1,activeSearchItemId:void 0}),d(()=>{i.currentGroup!==i.groups[i.currentGroupIndex]&&(i.currentGroup=i.groups[i.currentGroupIndex])});const h=G=>{e.getElementById(G).focus()},p=G=>e.getElementById(`emo-${G.id}`),y=(G,se)=>{a.rootElement.dispatchEvent(new CustomEvent(G,{detail:se,bubbles:!0,composed:!0}))},v=(G,se)=>G.id===se.id,x=(G,se)=>{const{category:ge,emojis:je}=G,{category:Ae,emojis:Qe}=se;return ge!==Ae?!1:fp(je,Qe,v)},S=G=>{fp(i.currentEmojis,G,v)||(i.currentEmojis=G)},j=G=>{i.searchMode!==G&&(i.searchMode=G)},C=G=>{fp(i.currentEmojisWithCategories,G,x)||(i.currentEmojisWithCategories=G)},N=(G,se)=>se&&G.skins&&G.skins[se]||G.unicode,A={labelWithSkin:(G,se)=>cz([G.name||N(G,se),G.annotation,...G.shortcodes||mp].filter(Boolean)).join(", "),titleForEmoji:G=>G.annotation||(G.shortcodes||mp).join(", "),unicodeWithSkin:N},R={onClickSkinToneButton:V,onEmojiClick:O,onNavClick:re,onNavKeydown:oe,onSearchKeydown:K,onSkinToneOptionsClick:I,onSkinToneOptionsFocusOut:me,onSkinToneOptionsKeydown:ne,onSkinToneOptionsKeyup:J,onSearchInput:pe},L={calculateEmojiGridStyle:U,updateOnIntersection:q};let z=!0;d(()=>{jz(e,i,A,R,L,a,l,m,z),z=!1}),i.emojiVersion||cp().then(G=>{G||(i.message=i.i18n.emojiUnsupportedMessage)}),d(()=>{async function G(){let se=!1;const ge=setTimeout(()=>{se=!0,i.message=i.i18n.loadingMessage},GL);try{await i.database.ready(),i.databaseLoaded=!0}catch(je){console.error(je),i.message=i.i18n.networkErrorMessage}finally{clearTimeout(ge),se&&(se=!1,i.message="")}}i.database&&G()}),d(()=>{i.pickerStyle=` + --num-groups: ${i.groups.length}; + --indicator-opacity: ${i.searchMode?0:1}; + --num-skintones: ${Mx};`}),d(()=>{i.customEmoji&&i.database&&B()}),d(()=>{i.customEmoji&&i.customEmoji.length?i.groups!==Zp&&(i.groups=Zp):i.groups!==lp&&(i.currentGroupIndex&&i.currentGroupIndex--,i.groups=lp)}),d(()=>{async function G(){i.databaseLoaded&&(i.currentSkinTone=await i.database.getPreferredSkinTone())}G()}),d(()=>{i.skinTones=Array(Mx).fill().map((G,se)=>rz(i.skinToneEmoji,se))}),d(()=>{i.skinToneButtonText=i.skinTones[i.currentSkinTone]}),d(()=>{i.skinToneButtonLabel=i.i18n.skinToneLabel.replace("{skinTone}",i.i18n.skinTones[i.currentSkinTone])}),d(()=>{async function G(){const{database:se}=i,ge=(await Promise.all(WL.map(je=>se.getEmojiByUnicodeOrName(je)))).filter(Boolean);i.defaultFavoriteEmojis=ge}i.databaseLoaded&&G()});function B(){const{customEmoji:G,database:se}=i,ge=G||mp;se.customEmoji!==ge&&(se.customEmoji=ge)}d(()=>{async function G(){B();const{database:se,defaultFavoriteEmojis:ge,numColumns:je}=i,Ae=await se.getTopFavoriteEmoji(je),Qe=await ce(c5([...Ae,...ge],ct=>ct.unicode||ct.name).slice(0,je));i.currentFavorites=Qe}i.databaseLoaded&&i.defaultFavoriteEmojis&&G()});function U(G){sz(G,l,()=>{{const se=getComputedStyle(a.rootElement),ge=parseInt(se.getPropertyValue("--num-columns"),10),je=se.getPropertyValue("direction")==="rtl";i.numColumns=ge,i.isRtl=je}})}function q(G){Nz(G,l,se=>{for(const{target:ge,isIntersecting:je}of se)ge.classList.toggle("onscreen",je)})}d(()=>{async function G(){const{searchText:se,currentGroup:ge,databaseLoaded:je,customEmoji:Ae}=i;if(!je)i.currentEmojis=[],i.searchMode=!1;else if(se.length>=HL){const Qe=await M(se);i.searchText===se&&(S(Qe),j(!0))}else{const{id:Qe}=ge;if(Qe!==-1||Ae&&Ae.length){const ct=await he(Qe);i.currentGroup.id===Qe&&(S(ct),j(!1))}}}G()});const Z=()=>{tu(()=>uz(a.tabpanelElement))};d(()=>{const{currentEmojis:G,emojiVersion:se}=i,ge=G.filter(je=>je.unicode).filter(je=>Ox(je)&&!Qp.has(je.unicode));if(!se&&ge.length)S(G),tu(()=>Q(ge));else{const je=se?G:G.filter(fe);S(je),Z()}});function Q(G){iz(G,a.baselineEmoji,p)?Z():i.currentEmojis=[...i.currentEmojis]}function fe(G){return!G.unicode||!Ox(G)||Qp.get(G.unicode)}async function de(G){const se=i.emojiVersion||await cp();return G.filter(({version:ge})=>!ge||ge<=se)}async function ce(G){return az(G,i.emojiVersion||await cp())}async function he(G){const se=G===-1?i.customEmoji:await i.database.getEmojiByGroup(G);return ce(await de(se))}async function M(G){return ce(await de(await i.database.getEmojiBySearchQuery(G)))}d(()=>{}),d(()=>{function G(){const{searchMode:ge,currentEmojis:je}=i;if(ge)return[{category:"",emojis:je}];const Ae=new Map;for(const Qe of je){const ct=Qe.category||"";let Tt=Ae.get(ct);Tt||(Tt=[],Ae.set(ct,Tt)),Tt.push(Qe)}return[...Ae.entries()].map(([Qe,ct])=>({category:Qe,emojis:ct})).sort((Qe,ct)=>i.customCategorySorting(Qe.category,ct.category))}const se=G();C(se)}),d(()=>{i.activeSearchItemId=i.activeSearchItem!==-1&&i.currentEmojis[i.activeSearchItem].id}),d(()=>{const{rawSearchText:G}=i;l5(()=>{i.searchText=(G||"").trim(),i.activeSearchItem=-1})});function K(G){if(!i.searchMode||!i.currentEmojis.length)return;const se=ge=>{rr(G),i.activeSearchItem=up(ge,i.activeSearchItem,i.currentEmojis)};switch(G.key){case"ArrowDown":return se(!1);case"ArrowUp":return se(!0);case"Enter":if(i.activeSearchItem===-1)i.activeSearchItem=0;else return rr(G),_(i.currentEmojis[i.activeSearchItem].id)}}function re(G){const{target:se}=G,ge=se.closest(".nav-button");if(!ge)return;const je=parseInt(ge.dataset.groupId,10);a.searchElement.value="",i.rawSearchText="",i.searchText="",i.activeSearchItem=-1,i.currentGroupIndex=i.groups.findIndex(Ae=>Ae.id===je)}function oe(G){const{target:se,key:ge}=G,je=Ae=>{Ae&&(rr(G),Ae.focus())};switch(ge){case"ArrowLeft":return je(se.previousElementSibling);case"ArrowRight":return je(se.nextElementSibling);case"Home":return je(se.parentElement.firstElementChild);case"End":return je(se.parentElement.lastElementChild)}}async function ee(G){const se=await i.database.getEmojiByUnicodeOrName(G),ge=[...i.currentEmojis,...i.currentFavorites].find(Ae=>Ae.id===G),je=ge.unicode&&N(ge,i.currentSkinTone);return await i.database.incrementFavoriteEmojiCount(G),{emoji:se,skinTone:i.currentSkinTone,...je&&{unicode:je},...ge.name&&{name:ge.name}}}async function _(G){const se=ee(G);y("emoji-click-sync",se),y("emoji-click",await se)}function O(G){const{target:se}=G;if(!se.classList.contains("emoji"))return;rr(G);const ge=se.id.substring(4);_(ge)}function H(G){i.currentSkinTone=G,i.skinTonePickerExpanded=!1,h("skintone-button"),y("skin-tone-change",{skinTone:G}),i.database.setPreferredSkinTone(G)}function I(G){const{target:{id:se}}=G,ge=se&&se.match(/^skintone-(\d)/);if(!ge)return;rr(G);const je=parseInt(ge[1],10);H(je)}function V(G){i.skinTonePickerExpanded=!i.skinTonePickerExpanded,i.activeSkinTone=i.currentSkinTone,i.skinTonePickerExpanded&&(rr(G),tu(()=>h("skintone-list")))}d(()=>{i.skinTonePickerExpanded?a.skinToneDropdown.addEventListener("transitionend",()=>{i.skinTonePickerExpandedAfterAnimation=!0},{once:!0}):i.skinTonePickerExpandedAfterAnimation=!1});function ne(G){if(!i.skinTonePickerExpanded)return;const se=async ge=>{rr(G),i.activeSkinTone=ge};switch(G.key){case"ArrowUp":return se(up(!0,i.activeSkinTone,i.skinTones));case"ArrowDown":return se(up(!1,i.activeSkinTone,i.skinTones));case"Home":return se(0);case"End":return se(i.skinTones.length-1);case"Enter":return rr(G),H(i.activeSkinTone);case"Escape":return rr(G),i.skinTonePickerExpanded=!1,h("skintone-button")}}function J(G){if(i.skinTonePickerExpanded)switch(G.key){case" ":return rr(G),H(i.activeSkinTone)}}async function me(G){const{relatedTarget:se}=G;(!se||se.id!=="skintone-list")&&(i.skinTonePickerExpanded=!1)}function pe(G){i.rawSearchText=G.target.value}return{$set(G){Yc(i,G)},$destroy(){o.abort()}}}const Tz="https://cdn.jsdelivr.net/npm/emoji-picker-element-data@^1/en/emojibase/data.json",Rz="en";var Az={categoriesLabel:"Categories",emojiUnsupportedMessage:"Your browser does not support color emoji.",favoritesLabel:"Favorites",loadingMessage:"Loading…",networkErrorMessage:"Could not load emoji.",regionLabel:"Emoji picker",searchDescription:"When search results are available, press up or down to select and enter to choose.",searchLabel:"Search",searchResultsLabel:"Search results",skinToneDescription:"When expanded, press up or down to select and enter to choose.",skinToneLabel:"Choose a skin tone (currently {skinTone})",skinTonesLabel:"Skin tones",skinTones:["Default","Light","Medium-Light","Medium","Medium-Dark","Dark"],categories:{custom:"Custom","smileys-emotion":"Smileys and emoticons","people-body":"People and body","animals-nature":"Animals and nature","food-drink":"Food and drink","travel-places":"Travel and places",activities:"Activities",objects:"Objects",symbols:"Symbols",flags:"Flags"}},_z=':host{--emoji-size:1.375rem;--emoji-padding:0.5rem;--category-emoji-size:var(--emoji-size);--category-emoji-padding:var(--emoji-padding);--indicator-height:3px;--input-border-radius:0.5rem;--input-border-size:1px;--input-font-size:1rem;--input-line-height:1.5;--input-padding:0.25rem;--num-columns:8;--outline-size:2px;--border-size:1px;--border-radius:0;--skintone-border-radius:1rem;--category-font-size:1rem;display:flex;width:min-content;height:400px}:host,:host(.light){color-scheme:light;--background:#fff;--border-color:#e0e0e0;--indicator-color:#385ac1;--input-border-color:#999;--input-font-color:#111;--input-placeholder-color:#999;--outline-color:#999;--category-font-color:#111;--button-active-background:#e6e6e6;--button-hover-background:#d9d9d9}:host(.dark){color-scheme:dark;--background:#222;--border-color:#444;--indicator-color:#5373ec;--input-border-color:#ccc;--input-font-color:#efefef;--input-placeholder-color:#ccc;--outline-color:#fff;--category-font-color:#efefef;--button-active-background:#555555;--button-hover-background:#484848}@media (prefers-color-scheme:dark){:host{color-scheme:dark;--background:#222;--border-color:#444;--indicator-color:#5373ec;--input-border-color:#ccc;--input-font-color:#efefef;--input-placeholder-color:#ccc;--outline-color:#fff;--category-font-color:#efefef;--button-active-background:#555555;--button-hover-background:#484848}}:host([hidden]){display:none}button{margin:0;padding:0;border:0;background:0 0;box-shadow:none;-webkit-tap-highlight-color:transparent}button::-moz-focus-inner{border:0}input{padding:0;margin:0;line-height:1.15;font-family:inherit}input[type=search]{-webkit-appearance:none}:focus{outline:var(--outline-color) solid var(--outline-size);outline-offset:calc(-1*var(--outline-size))}:host([data-js-focus-visible]) :focus:not([data-focus-visible-added]){outline:0}:focus:not(:focus-visible){outline:0}.hide-focus{outline:0}*{box-sizing:border-box}.picker{contain:content;display:flex;flex-direction:column;background:var(--background);border:var(--border-size) solid var(--border-color);border-radius:var(--border-radius);width:100%;height:100%;overflow:hidden;--total-emoji-size:calc(var(--emoji-size) + (2 * var(--emoji-padding)));--total-category-emoji-size:calc(var(--category-emoji-size) + (2 * var(--category-emoji-padding)))}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.hidden{opacity:0;pointer-events:none}.abs-pos{position:absolute;left:0;top:0}.gone{display:none!important}.skintone-button-wrapper,.skintone-list{background:var(--background);z-index:3}.skintone-button-wrapper.expanded{z-index:1}.skintone-list{position:absolute;inset-inline-end:0;top:0;z-index:2;overflow:visible;border-bottom:var(--border-size) solid var(--border-color);border-radius:0 0 var(--skintone-border-radius) var(--skintone-border-radius);will-change:transform;transition:transform .2s ease-in-out;transform-origin:center 0}@media (prefers-reduced-motion:reduce){.skintone-list{transition-duration:.001s}}@supports not (inset-inline-end:0){.skintone-list{right:0}}.skintone-list.no-animate{transition:none}.tabpanel{overflow-y:auto;scrollbar-gutter:stable;-webkit-overflow-scrolling:touch;will-change:transform;min-height:0;flex:1;contain:content}.emoji-menu{display:grid;grid-template-columns:repeat(var(--num-columns),var(--total-emoji-size));justify-content:space-around;align-items:flex-start;width:100%}.emoji-menu.visibility-auto{content-visibility:auto;contain-intrinsic-size:calc(var(--num-columns)*var(--total-emoji-size)) calc(var(--num-rows)*var(--total-emoji-size))}.category{padding:var(--emoji-padding);font-size:var(--category-font-size);color:var(--category-font-color)}.emoji,button.emoji{font-size:var(--emoji-size);display:flex;align-items:center;justify-content:center;border-radius:100%;height:var(--total-emoji-size);width:var(--total-emoji-size);line-height:1;overflow:hidden;font-family:var(--emoji-font-family);cursor:pointer}@media (hover:hover) and (pointer:fine){.emoji:hover,button.emoji:hover{background:var(--button-hover-background)}}.emoji.active,.emoji:active,button.emoji.active,button.emoji:active{background:var(--button-active-background)}.onscreen .custom-emoji::after{content:"";width:var(--emoji-size);height:var(--emoji-size);background-repeat:no-repeat;background-position:center center;background-size:contain;background-image:var(--custom-emoji-background)}.nav,.nav-button{align-items:center}.nav{display:grid;justify-content:space-between;contain:content}.nav-button{display:flex;justify-content:center}.nav-emoji{font-size:var(--category-emoji-size);width:var(--total-category-emoji-size);height:var(--total-category-emoji-size)}.indicator-wrapper{display:flex;border-bottom:1px solid var(--border-color)}.indicator{width:calc(100%/var(--num-groups));height:var(--indicator-height);opacity:var(--indicator-opacity);background-color:var(--indicator-color);will-change:transform,opacity;transition:opacity .1s linear,transform .25s ease-in-out}@media (prefers-reduced-motion:reduce){.indicator{will-change:opacity;transition:opacity .1s linear}}.pad-top,input.search{background:var(--background);width:100%}.pad-top{height:var(--emoji-padding);z-index:3}.search-row{display:flex;align-items:center;position:relative;padding-inline-start:var(--emoji-padding);padding-bottom:var(--emoji-padding)}.search-wrapper{flex:1;min-width:0}input.search{padding:var(--input-padding);border-radius:var(--input-border-radius);border:var(--input-border-size) solid var(--input-border-color);color:var(--input-font-color);font-size:var(--input-font-size);line-height:var(--input-line-height)}input.search::placeholder{color:var(--input-placeholder-color)}.favorites{overflow-y:auto;scrollbar-gutter:stable;display:flex;flex-direction:row;border-top:var(--border-size) solid var(--border-color);contain:content}.message{padding:var(--emoji-padding)}';const u5=["customEmoji","customCategorySorting","database","dataSource","i18n","locale","skinToneEmoji","emojiVersion"],Mz=`:host{--emoji-font-family:${i5}}`;class bg extends HTMLElement{constructor(n){super(),this.attachShadow({mode:"open"});const a=document.createElement("style");a.textContent=_z+Mz,this.shadowRoot.appendChild(a),this._ctx={locale:Rz,dataSource:Tz,skinToneEmoji:FL,customCategorySorting:qL,customEmoji:null,i18n:Az,emojiVersion:null,...n};for(const o of u5)o!=="database"&&Object.prototype.hasOwnProperty.call(this,o)&&(this._ctx[o]=this[o],delete this[o]);this._dbFlush()}connectedCallback(){Ix(this),this._cmp||(this._cmp=kz(this.shadowRoot,this._ctx))}disconnectedCallback(){Ix(this),wu(()=>{if(!this.isConnected&&this._cmp){this._cmp.$destroy(),this._cmp=void 0;const{database:n}=this._ctx;n.close().catch(a=>console.error(a))}})}static get observedAttributes(){return["locale","data-source","skin-tone-emoji","emoji-version"]}attributeChangedCallback(n,a,o){this._set(n.replace(/-([a-z])/g,(l,i)=>i.toUpperCase()),n==="emoji-version"?parseFloat(o):o)}_set(n,a){this._ctx[n]=a,this._cmp&&this._cmp.$set({[n]:a}),["locale","dataSource"].includes(n)&&this._dbFlush()}_dbCreate(){const{locale:n,dataSource:a,database:o}=this._ctx;(!o||o.locale!==n||o.dataSource!==a)&&this._set("database",new UL({locale:n,dataSource:a}))}_dbFlush(){wu(()=>this._dbCreate())}}const d5={};for(const e of u5)d5[e]={get(){return e==="database"&&this._dbCreate(),this._ctx[e]},set(n){if(e==="database")throw new Error("database is read-only");this._set(e,n)}};Object.defineProperties(bg.prototype,d5);function Ix(e){e instanceof bg||Object.setPrototypeOf(e,customElements.get(e.tagName.toLowerCase()).prototype)}customElements.get("emoji-picker")||customElements.define("emoji-picker",bg);function Oz({onPick:e}){const n=f.useRef(null);return f.useEffect(()=>{const a=n.current;if(!a)return;const o=document.createElement("emoji-picker");o.className="unicode-emoji-picker-el",o.setAttribute("data-theme","dark");const l=i=>{var h;const d=i.detail,m=(d==null?void 0:d.unicode)??((h=d==null?void 0:d.emoji)==null?void 0:h.unicode);m&&e(m)};return o.addEventListener("emoji-click",l),a.appendChild(o),()=>{o.removeEventListener("emoji-click",l),o.remove()}},[e]),c.jsx("div",{ref:n,className:"unicode-emoji-panel-host overflow-hidden rounded-lg border border-border/50"})}const Dz=/^<(a?):([^:>]+):(\d{17,20})>$/;function nu(e,n,a=!1){return`${a?"`}function f5(e){const n=String(e??"").trim();if(!n)return{kind:"empty",value:""};const a=n.match(Dz);return a?{kind:"custom",value:n,animated:a[1]==="a",name:a[2],id:a[3]}:{kind:"unicode",value:n}}function m5(e,n=!1){return`https://cdn.discordapp.com/emojis/${e}.${n?"gif":"png"}?size=64`}function Lz(e,n=[]){const a=f5(e);if(a.kind==="custom"&&a.id&&!a.name){const o=n.find(l=>l.id===a.id);if(o)return{kind:"custom",value:nu(o.name,o.id,o.animated),name:o.name,id:o.id,animated:o.animated}}if(a.kind==="custom"&&a.id){const o=n.find(l=>l.id===a.id);if(o&&a.value!==nu(o.name,o.id,o.animated))return{kind:"custom",value:nu(o.name,o.id,o.animated),name:o.name,id:o.id,animated:o.animated}}return a}function zz({value:e,guildEmojis:n,size:a="md"}){const o=Lz(e,n),l=a==="lg"?"size-10":"size-7",i=a==="lg"?"text-3xl":"text-2xl";return o.kind==="empty"?c.jsx("span",{className:"text-sm text-muted-foreground",children:"No emoji selected"}):o.kind==="custom"&&o.id?c.jsxs("span",{className:"inline-flex items-center gap-3",children:[c.jsx("img",{src:m5(o.id,o.animated),alt:o.name??"custom emoji",className:ie(l,"shrink-0 rounded-md"),loading:"lazy"}),c.jsxs("span",{className:"flex flex-col items-start gap-0.5",children:[c.jsxs("span",{className:"text-sm font-medium",children:[":",o.name,":"]}),c.jsx("span",{className:"font-mono text-xs text-muted-foreground",children:o.value})]})]}):c.jsx("span",{className:ie(i,"leading-none"),title:o.value,children:o.value})}function Pz({id:e,label:n,description:a,value:o,onChange:l,readOnly:i}){const[d,m]=f.useState(!1),[h,p]=f.useState("server"),[y,v]=f.useState(null),[x,S]=f.useState(""),[j,C]=f.useState(!1),[N,E]=f.useState(""),k=f.useCallback(async(Z=!1)=>{C(!0),S("");try{const Q=await ke.getGuildResources(Z);Q.data?(v(Q.data),Array.isArray(Q.data.emojis)||S("Server response is missing emojis. Restart the bot after updating.")):S("No guild data returned.")}catch(Q){S(Q instanceof Error?Q.message:"Could not load server emojis")}finally{C(!1)}},[]);f.useEffect(()=>{d&&k(!0)},[d,k]);const A=f.useMemo(()=>Array.isArray(y==null?void 0:y.emojis)?y.emojis:[],[y]),R=f.useMemo(()=>{const Z=N.trim().toLowerCase();return Z?A.filter(Q=>Q.name.toLowerCase().includes(Z)):A},[A,N]),L=String(o??""),z=f5(L);function B(Z){l(Z),m(!1)}function U(Z){l(nu(Z.name,Z.id,Z.animated)),m(!1)}function q(){l("")}return c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:e,children:n}),a?c.jsx("p",{className:"text-xs text-muted-foreground",children:a}):null,c.jsxs("div",{className:"flex flex-col gap-3 rounded-xl border border-border bg-card p-3 sm:flex-row sm:items-center sm:justify-between",children:[c.jsx("div",{className:"min-w-0 flex-1",children:c.jsx(zz,{value:o,guildEmojis:A,size:"lg"})}),c.jsxs("div",{className:"flex shrink-0 gap-2",children:[c.jsx(be,{type:"button",variant:"secondary",size:"sm",disabled:i,onClick:()=>m(!0),children:"Choose emoji"}),L?c.jsx(be,{type:"button",variant:"ghost",size:"sm",disabled:i,onClick:q,children:"Clear"}):null]})]}),c.jsx($w,{open:d,onOpenChange:m,children:c.jsxs(Zh,{className:"max-h-[min(90vh,720px)] max-w-lg gap-0 overflow-hidden p-0 sm:max-w-xl",children:[c.jsxs(Qh,{className:"space-y-1 border-b border-border px-5 py-4",children:[c.jsx(Jh,{children:"Choose emoji"}),c.jsxs(eg,{children:["Server emojis save as"," ",c.jsx("code",{className:"rounded bg-muted px-1 text-xs",children:"<:name:id>"}),". Standard emojis save as Unicode characters."]})]}),c.jsxs(Yj,{value:h,onValueChange:Z=>p(Z),className:"flex min-h-0 flex-1 flex-col",children:[c.jsxs(fg,{className:"mx-5 mt-3 grid h-9 w-auto grid-cols-2",children:[c.jsx(Ka,{value:"server",children:"Server"}),c.jsx(Ka,{value:"unicode",children:"All emojis"})]}),c.jsxs(Wp,{value:"server",className:"mt-0 flex-1 px-5 pb-4 pt-3",children:[c.jsxs("div",{className:"relative mb-3",children:[c.jsx(ye,{icon:_u,size:16,className:"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground"}),c.jsx(rt,{placeholder:"Search by name…",value:N,onChange:Z=>E(Z.target.value),className:"h-9 border-border bg-secondary/30 pl-9"})]}),y?c.jsxs("p",{className:"mb-2 text-xs text-muted-foreground",children:[y.guildName," · ",A.length," custom emoji",A.length===1?"":"s"]}):null,c.jsx(hi,{className:"h-[min(50vh,320px)] rounded-lg border border-border/50 bg-secondary/20",children:j?c.jsx("div",{className:"grid grid-cols-6 gap-2 p-3 sm:grid-cols-8",children:Array.from({length:24}).map((Z,Q)=>c.jsx(Fe,{className:"aspect-square rounded-lg"},Q))}):x?c.jsxs("div",{className:"space-y-3 p-4 text-center",children:[c.jsx("p",{className:"text-sm text-destructive",children:x}),c.jsx(be,{type:"button",variant:"outline",size:"sm",onClick:()=>void k(!0),children:"Retry"})]}):R.length===0?c.jsx("p",{className:"p-6 text-center text-sm text-muted-foreground",children:A.length===0?"No custom emojis in this server, or the bot needs the Guild Emojis intent (restart after update).":"No emojis match your search."}):c.jsx("div",{className:"grid grid-cols-6 gap-1.5 p-2 sm:grid-cols-8",children:R.map(Z=>{const Q=z.kind==="custom"&&z.id===Z.id;return c.jsx("button",{type:"button",title:`:${Z.name}:`,className:ie("flex aspect-square items-center justify-center rounded-lg border border-transparent bg-background/50 transition-colors hover:border-primary/30 hover:bg-accent",Q&&"border-primary/50 bg-primary/15 ring-2 ring-primary/30"),onClick:()=>U(Z),children:c.jsx("img",{src:Z.url??m5(Z.id,Z.animated),alt:Z.name,className:"size-8 object-contain",loading:"lazy"})},Z.id)})})})]}),c.jsx(Wp,{value:"unicode",className:"mt-0 px-5 pb-4 pt-3",children:c.jsx(Oz,{onPick:B})})]})]})}),c.jsx(rt,{value:L,disabled:i,onChange:Z=>l(Z.target.value),placeholder:"Unicode or <:name:id>",className:"border-border bg-secondary/30 font-mono text-xs"})]})}const Ux="BOT_TOKEN",Bz="MODEL_API_KEY";function yg({field:e,value:n,onChange:a,readOnly:o}){const l=e.path.replace(/\./g,"-");if(e.type==="googleFont")return c.jsx(UD,{field:e,value:n,onChange:a,readOnly:o});if(e.type==="boolean")return c.jsxs("div",{className:"flex items-center justify-between gap-4 rounded-lg border border-border bg-secondary/20 px-3 py-2.5",children:[c.jsxs("div",{children:[c.jsx(Ze,{htmlFor:l,className:"font-medium",children:e.label}),e.description?c.jsx("p",{className:"text-xs text-muted-foreground",children:e.description}):null]}),c.jsx(Dn,{id:l,checked:!!n,disabled:o,onCheckedChange:a})]});if(e.type==="stringList")return c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{children:e.label}),e.description?c.jsx("p",{className:"text-xs text-muted-foreground",children:e.description}):null,c.jsx(BD,{value:Array.isArray(n)?n:[],onChange:a})]});if(e.type==="select"&&e.options)return c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:l,children:e.label}),c.jsxs(ud,{value:String(n??""),disabled:o,onValueChange:a,children:[c.jsx(gi,{id:l,className:"border-border bg-secondary/30",children:c.jsx(dd,{placeholder:"Select…"})}),c.jsx(vi,{children:e.options.map(d=>c.jsx(no,{value:d.value,children:d.label},d.value))})]})]});if(e.type==="color"){const d=lr(String(n??"#000000"));return c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:l,children:e.label}),e.description?c.jsx("p",{className:"text-xs text-muted-foreground",children:e.description}):null,c.jsxs("div",{className:"flex gap-2",children:[c.jsx(cg,{value:d,onChange:a}),c.jsx(rt,{id:l,value:d,disabled:o,onChange:m=>a(m.target.value),onBlur:m=>a(lr(m.target.value,d)),className:"border-border bg-secondary/30 font-mono uppercase",placeholder:"#000000",maxLength:7})]})]})}if(e.type==="emoji")return c.jsx(Pz,{id:l,label:e.label,description:e.description,value:n,onChange:a,readOnly:o});if(e.type==="discordChannel"||e.type==="discordRole"||e.type==="discordCategory"){const d=e.type==="discordRole"?"role":e.type==="discordCategory"?"category":"channel";return c.jsx(HD,{id:l,label:e.label,description:e.description,kind:d,value:n,onChange:a,readOnly:o})}if(e.type==="secret"){const d=n===Ux||n===Bz||!n?"":"••••••••••••";return c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:l,children:e.label}),e.description?c.jsx("p",{className:"text-xs text-muted-foreground",children:e.description}):null,c.jsx(rt,{id:l,type:"password",value:d,disabled:o,placeholder:e.placeholder??"Unchanged if empty",onChange:m=>{const h=m.target.value;a(h||(e.placeholder??Ux))},className:"border-border bg-secondary/30"})]})}const i="border-border bg-secondary/30";return e.type==="textarea"?c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:l,children:e.label}),c.jsx(sd,{id:l,value:String(n??""),disabled:o,onChange:d=>a(d.target.value),className:`min-h-[88px] ${i}`})]}):c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:l,children:e.label}),e.description?c.jsx("p",{className:"text-xs text-muted-foreground",children:e.description}):null,c.jsx(rt,{id:l,type:e.type==="number"?"number":"text",value:n==null?"":String(n),disabled:o,onChange:d=>a(e.type==="number"?Number(d.target.value):d.target.value),placeholder:e.placeholder??(e.type==="discordId"?"Discord snowflake ID":void 0),className:i})]})}const We=f.forwardRef(({className:e,...n},a)=>c.jsx("div",{ref:a,className:ie("rounded-xl border border-border bg-card text-card-foreground shadow-none",e),...n}));We.displayName="Card";const at=f.forwardRef(({className:e,...n},a)=>c.jsx("div",{ref:a,className:ie("flex flex-col space-y-1.5 p-6",e),...n}));at.displayName="CardHeader";const ot=f.forwardRef(({className:e,...n},a)=>c.jsx("div",{ref:a,className:ie("font-semibold leading-none tracking-tight",e),...n}));ot.displayName="CardTitle";const Nt=f.forwardRef(({className:e,...n},a)=>c.jsx("div",{ref:a,className:ie("text-sm text-muted-foreground",e),...n}));Nt.displayName="CardDescription";const qe=f.forwardRef(({className:e,...n},a)=>c.jsx("div",{ref:a,className:ie("p-6 pt-0",e),...n}));qe.displayName="CardContent";const p5=f.forwardRef(({className:e,...n},a)=>c.jsx("div",{ref:a,className:ie("flex items-center p-6 pt-0",e),...n}));p5.displayName="CardFooter";function Hx(e){return e.replace(/_/g," ").replace(/([a-z])([A-Z])/g,"$1 $2").replace(/\b\w/g,n=>n.toUpperCase())}function $z(e,n){if(typeof n=="boolean")return"boolean";if(typeof n=="number")return"number";if(Array.isArray(n))return"stringList";if(typeof n=="string"){const a=e.toLowerCase();return/emoji/.test(a)?"emoji":/guild.?id|guild_id/.test(a)?"discordId":/category/.test(a)?"discordCategory":/channel|forum/.test(a)?"discordChannel":/role|staff|admin|moderator/.test(a)?"discordRole":n.length>100?"textarea":"text"}return"text"}function xg(e,n=""){const a=[];for(const[o,l]of Object.entries(e)){const i=n?`${n}.${o}`:o;if(Array.isArray(l)){if(l.length>0&&typeof l[0]=="object"&&l[0]!==null&&!Array.isArray(l[0]))continue;a.push({path:i,label:Hx(o),type:"stringList"});continue}if(l&&typeof l=="object"&&Object.keys(l).length>0){a.push(...xg(l,i));continue}a.push({path:i,label:Hx(o),type:$z(o,l)})}return a}function Iz(e){const n=xg(e);return n.length===0?[{title:"Configuration",fields:[]}]:[{title:"Settings",description:"Values from this addon’s config file.",fields:n}]}function ao(e,n){const a=n.split(".");let o=e;for(const l of a){if(o==null||typeof o!="object")return;o=o[l]}return o}function Xl(e,n,a){const o=n.split("."),l=structuredClone(e);let i=l;for(let d=0;d"u")return;let n=document.head||document.getElementsByTagName("head")[0],a=document.createElement("style");a.type="text/css",n.appendChild(a),a.styleSheet?a.styleSheet.cssText=e:a.appendChild(document.createTextNode(e))}const Hz=e=>{switch(e){case"success":return Fz;case"info":return Wz;case"warning":return Yz;case"error":return qz;default:return null}},Vz=Array(12).fill(0),Gz=({visible:e,className:n})=>ue.createElement("div",{className:["sonner-loading-wrapper",n].filter(Boolean).join(" "),"data-visible":e},ue.createElement("div",{className:"sonner-spinner"},Vz.map((a,o)=>ue.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${o}`})))),Fz=ue.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},ue.createElement("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z",clipRule:"evenodd"})),Yz=ue.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",height:"20",width:"20"},ue.createElement("path",{fillRule:"evenodd",d:"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z",clipRule:"evenodd"})),Wz=ue.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},ue.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z",clipRule:"evenodd"})),qz=ue.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},ue.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z",clipRule:"evenodd"})),Kz=ue.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"},ue.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),ue.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"})),Xz=()=>{const[e,n]=ue.useState(document.hidden);return ue.useEffect(()=>{const a=()=>{n(document.hidden)};return document.addEventListener("visibilitychange",a),()=>window.removeEventListener("visibilitychange",a)},[]),e};let Jp=1;class Zz{constructor(){this.subscribe=n=>(this.subscribers.push(n),()=>{const a=this.subscribers.indexOf(n);this.subscribers.splice(a,1)}),this.publish=n=>{this.subscribers.forEach(a=>a(n))},this.addToast=n=>{this.publish(n),this.toasts=[...this.toasts,n]},this.create=n=>{var a;const{message:o,...l}=n,i=typeof(n==null?void 0:n.id)=="number"||((a=n.id)==null?void 0:a.length)>0?n.id:Jp++,d=this.toasts.find(h=>h.id===i),m=n.dismissible===void 0?!0:n.dismissible;return this.dismissedToasts.has(i)&&this.dismissedToasts.delete(i),d?this.toasts=this.toasts.map(h=>h.id===i?(this.publish({...h,...n,id:i,title:o}),{...h,...n,id:i,dismissible:m,title:o}):h):this.addToast({title:o,...l,dismissible:m,id:i}),i},this.dismiss=n=>(n?(this.dismissedToasts.add(n),requestAnimationFrame(()=>this.subscribers.forEach(a=>a({id:n,dismiss:!0})))):this.toasts.forEach(a=>{this.subscribers.forEach(o=>o({id:a.id,dismiss:!0}))}),n),this.message=(n,a)=>this.create({...a,message:n}),this.error=(n,a)=>this.create({...a,message:n,type:"error"}),this.success=(n,a)=>this.create({...a,type:"success",message:n}),this.info=(n,a)=>this.create({...a,type:"info",message:n}),this.warning=(n,a)=>this.create({...a,type:"warning",message:n}),this.loading=(n,a)=>this.create({...a,type:"loading",message:n}),this.promise=(n,a)=>{if(!a)return;let o;a.loading!==void 0&&(o=this.create({...a,promise:n,type:"loading",message:a.loading,description:typeof a.description!="function"?a.description:void 0}));const l=Promise.resolve(n instanceof Function?n():n);let i=o!==void 0,d;const m=l.then(async p=>{if(d=["resolve",p],ue.isValidElement(p))i=!1,this.create({id:o,type:"default",message:p});else if(Jz(p)&&!p.ok){i=!1;const v=typeof a.error=="function"?await a.error(`HTTP error! status: ${p.status}`):a.error,x=typeof a.description=="function"?await a.description(`HTTP error! status: ${p.status}`):a.description,j=typeof v=="object"&&!ue.isValidElement(v)?v:{message:v};this.create({id:o,type:"error",description:x,...j})}else if(p instanceof Error){i=!1;const v=typeof a.error=="function"?await a.error(p):a.error,x=typeof a.description=="function"?await a.description(p):a.description,j=typeof v=="object"&&!ue.isValidElement(v)?v:{message:v};this.create({id:o,type:"error",description:x,...j})}else if(a.success!==void 0){i=!1;const v=typeof a.success=="function"?await a.success(p):a.success,x=typeof a.description=="function"?await a.description(p):a.description,j=typeof v=="object"&&!ue.isValidElement(v)?v:{message:v};this.create({id:o,type:"success",description:x,...j})}}).catch(async p=>{if(d=["reject",p],a.error!==void 0){i=!1;const y=typeof a.error=="function"?await a.error(p):a.error,v=typeof a.description=="function"?await a.description(p):a.description,S=typeof y=="object"&&!ue.isValidElement(y)?y:{message:y};this.create({id:o,type:"error",description:v,...S})}}).finally(()=>{i&&(this.dismiss(o),o=void 0),a.finally==null||a.finally.call(a)}),h=()=>new Promise((p,y)=>m.then(()=>d[0]==="reject"?y(d[1]):p(d[1])).catch(y));return typeof o!="string"&&typeof o!="number"?{unwrap:h}:Object.assign(o,{unwrap:h})},this.custom=(n,a)=>{const o=(a==null?void 0:a.id)||Jp++;return this.create({jsx:n(o),id:o,...a}),o},this.getActiveToasts=()=>this.toasts.filter(n=>!this.dismissedToasts.has(n.id)),this.subscribers=[],this.toasts=[],this.dismissedToasts=new Set}}const cn=new Zz,Qz=(e,n)=>{const a=(n==null?void 0:n.id)||Jp++;return cn.addToast({title:e,...n,id:a}),a},Jz=e=>e&&typeof e=="object"&&"ok"in e&&typeof e.ok=="boolean"&&"status"in e&&typeof e.status=="number",eP=Qz,tP=()=>cn.toasts,nP=()=>cn.getActiveToasts(),rs=Object.assign(eP,{success:cn.success,info:cn.info,warning:cn.warning,error:cn.error,custom:cn.custom,message:cn.message,promise:cn.promise,dismiss:cn.dismiss,loading:cn.loading},{getHistory:tP,getToasts:nP});Uz("[data-sonner-toaster][dir=ltr],html[dir=ltr]{--toast-icon-margin-start:-3px;--toast-icon-margin-end:4px;--toast-svg-margin-start:-1px;--toast-svg-margin-end:0px;--toast-button-margin-start:auto;--toast-button-margin-end:0;--toast-close-button-start:0;--toast-close-button-end:unset;--toast-close-button-transform:translate(-35%, -35%)}[data-sonner-toaster][dir=rtl],html[dir=rtl]{--toast-icon-margin-start:4px;--toast-icon-margin-end:-3px;--toast-svg-margin-start:0px;--toast-svg-margin-end:-1px;--toast-button-margin-start:0;--toast-button-margin-end:auto;--toast-close-button-start:unset;--toast-close-button-end:0;--toast-close-button-transform:translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1:hsl(0, 0%, 99%);--gray2:hsl(0, 0%, 97.3%);--gray3:hsl(0, 0%, 95.1%);--gray4:hsl(0, 0%, 93%);--gray5:hsl(0, 0%, 90.9%);--gray6:hsl(0, 0%, 88.7%);--gray7:hsl(0, 0%, 85.8%);--gray8:hsl(0, 0%, 78%);--gray9:hsl(0, 0%, 56.1%);--gray10:hsl(0, 0%, 52.3%);--gray11:hsl(0, 0%, 43.5%);--gray12:hsl(0, 0%, 9%);--border-radius:8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:0;z-index:999999999;transition:transform .4s ease}@media (hover:none) and (pointer:coarse){[data-sonner-toaster][data-lifted=true]{transform:none}}[data-sonner-toaster][data-x-position=right]{right:var(--offset-right)}[data-sonner-toaster][data-x-position=left]{left:var(--offset-left)}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translateX(-50%)}[data-sonner-toaster][data-y-position=top]{top:var(--offset-top)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--offset-bottom)}[data-sonner-toast]{--y:translateY(100%);--lift-amount:calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:0;overflow-wrap:anywhere}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px rgba(0,0,0,.1);width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-y-position=top]{top:0;--y:translateY(-100%);--lift:1;--lift-amount:calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y:translateY(100%);--lift:-1;--lift-amount:calc(var(--lift) * var(--gap))}[data-sonner-toast][data-styled=true] [data-description]{font-weight:400;line-height:1.4;color:#3f3f3f}[data-rich-colors=true][data-sonner-toast][data-styled=true] [data-description]{color:inherit}[data-sonner-toaster][data-sonner-theme=dark] [data-description]{color:#e8e8e8}[data-sonner-toast][data-styled=true] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast][data-styled=true] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast][data-styled=true] [data-icon]>*{flex-shrink:0}[data-sonner-toast][data-styled=true] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast][data-styled=true] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;font-weight:500;cursor:pointer;outline:0;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}[data-sonner-toast][data-styled=true] [data-button]:focus-visible{box-shadow:0 0 0 2px rgba(0,0,0,.4)}[data-sonner-toast][data-styled=true] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast][data-styled=true] [data-cancel]{color:var(--normal-text);background:rgba(0,0,0,.08)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-styled=true] [data-cancel]{background:rgba(255,255,255,.3)}[data-sonner-toast][data-styled=true] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;color:var(--gray12);background:var(--normal-bg);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast][data-styled=true] [data-close-button]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-styled=true] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast][data-styled=true]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]::before{content:'';position:absolute;left:-100%;right:-100%;height:100%;z-index:-1}[data-sonner-toast][data-y-position=top][data-swiping=true]::before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]::before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]::before{content:'';position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast][data-expanded=true]::after{content:'';position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y:translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale:var(--toasts-before) * 0.05 + 1;--y:translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-x-position=right]{right:0}[data-sonner-toast][data-x-position=left]{left:0}[data-sonner-toast][data-expanded=false][data-front=false][data-styled=true]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y:translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{--y:translateY(40%);opacity:0;transition:transform .5s,opacity .2s}[data-sonner-toast][data-removed=true][data-front=false]::before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount-y,0)) translateX(var(--swipe-amount-x,0));transition:none}[data-sonner-toast][data-swiped=true]{user-select:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:forwards}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=left]{animation-name:swipe-out-left}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=right]{animation-name:swipe-out-right}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=up]{animation-name:swipe-out-up}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=down]{animation-name:swipe-out-down}@keyframes swipe-out-left{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) - 100%));opacity:0}}@keyframes swipe-out-right{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) + 100%));opacity:0}}@keyframes swipe-out-up{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) - 100%));opacity:0}}@keyframes swipe-out-down{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) + 100%));opacity:0}}@media (max-width:600px){[data-sonner-toaster]{position:fixed;right:var(--mobile-offset-right);left:var(--mobile-offset-left);width:100%}[data-sonner-toaster][dir=rtl]{left:calc(var(--mobile-offset-left) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset-left) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset-left)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--mobile-offset-bottom)}[data-sonner-toaster][data-y-position=top]{top:var(--mobile-offset-top)}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset-left);right:var(--mobile-offset-right);transform:none}}[data-sonner-toaster][data-sonner-theme=light]{--normal-bg:#fff;--normal-border:var(--gray4);--normal-text:var(--gray12);--success-bg:hsl(143, 85%, 96%);--success-border:hsl(145, 92%, 87%);--success-text:hsl(140, 100%, 27%);--info-bg:hsl(208, 100%, 97%);--info-border:hsl(221, 91%, 93%);--info-text:hsl(210, 92%, 45%);--warning-bg:hsl(49, 100%, 97%);--warning-border:hsl(49, 91%, 84%);--warning-text:hsl(31, 92%, 45%);--error-bg:hsl(359, 100%, 97%);--error-border:hsl(359, 100%, 94%);--error-text:hsl(360, 100%, 45%)}[data-sonner-toaster][data-sonner-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg:#000;--normal-border:hsl(0, 0%, 20%);--normal-text:var(--gray1)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg:#fff;--normal-border:var(--gray3);--normal-text:var(--gray12)}[data-sonner-toaster][data-sonner-theme=dark]{--normal-bg:#000;--normal-bg-hover:hsl(0, 0%, 12%);--normal-border:hsl(0, 0%, 20%);--normal-border-hover:hsl(0, 0%, 25%);--normal-text:var(--gray1);--success-bg:hsl(150, 100%, 6%);--success-border:hsl(147, 100%, 12%);--success-text:hsl(150, 86%, 65%);--info-bg:hsl(215, 100%, 6%);--info-border:hsl(223, 43%, 17%);--info-text:hsl(216, 87%, 65%);--warning-bg:hsl(64, 100%, 6%);--warning-border:hsl(60, 100%, 9%);--warning-text:hsl(46, 87%, 65%);--error-bg:hsl(358, 76%, 10%);--error-border:hsl(357, 89%, 16%);--error-text:hsl(358, 100%, 81%)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-text)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]:hover{background:var(--normal-bg-hover);border-color:var(--normal-border-hover)}[data-rich-colors=true][data-sonner-toast][data-type=success]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size:16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:first-child{animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}100%{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}100%{opacity:.15}}@media (prefers-reduced-motion){.sonner-loading-bar,[data-sonner-toast],[data-sonner-toast]>*{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}");function Wc(e){return e.label!==void 0}const rP=3,aP="24px",oP="16px",Vx=4e3,sP=356,lP=14,iP=45,cP=200;function ar(...e){return e.filter(Boolean).join(" ")}function uP(e){const[n,a]=e.split("-"),o=[];return n&&o.push(n),a&&o.push(a),o}const dP=e=>{var n,a,o,l,i,d,m,h,p;const{invert:y,toast:v,unstyled:x,interacting:S,setHeights:j,visibleToasts:C,heights:N,index:E,toasts:k,expanded:A,removeToast:R,defaultRichColors:L,closeButton:z,style:B,cancelButtonStyle:U,actionButtonStyle:q,className:Z="",descriptionClassName:Q="",duration:fe,position:de,gap:ce,expandByDefault:he,classNames:M,icons:K,closeButtonAriaLabel:re="Close toast"}=e,[oe,ee]=ue.useState(null),[_,O]=ue.useState(null),[H,I]=ue.useState(!1),[V,ne]=ue.useState(!1),[J,me]=ue.useState(!1),[pe,G]=ue.useState(!1),[se,ge]=ue.useState(!1),[je,Ae]=ue.useState(0),[Qe,ct]=ue.useState(0),Tt=ue.useRef(v.duration||fe||Vx),Ca=ue.useRef(null),Rt=ue.useRef(null),Os=E===0,Ds=E+1<=C,Yt=v.type,$r=v.dismissible!==!1,Wt=v.className||"",gd=v.descriptionClassName||"",ja=ue.useMemo(()=>N.findIndex(Te=>Te.toastId===v.id)||0,[N,v.id]),xi=ue.useMemo(()=>{var Te;return(Te=v.closeButton)!=null?Te:z},[v.closeButton,z]),Ea=ue.useMemo(()=>v.duration||fe||Vx,[v.duration,fe]),Ls=ue.useRef(0),dr=ue.useRef(0),Si=ue.useRef(0),Ir=ue.useRef(null),[Na,qt]=de.split("-"),$n=ue.useMemo(()=>N.reduce((Te,ut,At)=>At>=ja?Te:Te+ut.height,0),[N,ja]),Ht=Xz(),vd=v.invert||y,zs=Yt==="loading";dr.current=ue.useMemo(()=>ja*ce+$n,[ja,$n]),ue.useEffect(()=>{Tt.current=Ea},[Ea]),ue.useEffect(()=>{I(!0)},[]),ue.useEffect(()=>{const Te=Rt.current;if(Te){const ut=Te.getBoundingClientRect().height;return ct(ut),j(At=>[{toastId:v.id,height:ut,position:v.position},...At]),()=>j(At=>At.filter(Vt=>Vt.toastId!==v.id))}},[j,v.id]),ue.useLayoutEffect(()=>{if(!H)return;const Te=Rt.current,ut=Te.style.height;Te.style.height="auto";const At=Te.getBoundingClientRect().height;Te.style.height=ut,ct(At),j(Vt=>Vt.find(mt=>mt.toastId===v.id)?Vt.map(mt=>mt.toastId===v.id?{...mt,height:At}:mt):[{toastId:v.id,height:At,position:v.position},...Vt])},[H,v.title,v.description,j,v.id,v.jsx,v.action,v.cancel]);const Xn=ue.useCallback(()=>{ne(!0),Ae(dr.current),j(Te=>Te.filter(ut=>ut.toastId!==v.id)),setTimeout(()=>{R(v)},cP)},[v,R,j,dr]);ue.useEffect(()=>{if(v.promise&&Yt==="loading"||v.duration===1/0||v.type==="loading")return;let Te;return A||S||Ht?(()=>{if(Si.current{Tt.current!==1/0&&(Ls.current=new Date().getTime(),Te=setTimeout(()=>{v.onAutoClose==null||v.onAutoClose.call(v,v),Xn()},Tt.current))})(),()=>clearTimeout(Te)},[A,S,v,Yt,Ht,Xn]),ue.useEffect(()=>{v.delete&&(Xn(),v.onDismiss==null||v.onDismiss.call(v,v))},[Xn,v.delete]);function fo(){var Te;if(K!=null&&K.loading){var ut;return ue.createElement("div",{className:ar(M==null?void 0:M.loader,v==null||(ut=v.classNames)==null?void 0:ut.loader,"sonner-loader"),"data-visible":Yt==="loading"},K.loading)}return ue.createElement(Gz,{className:ar(M==null?void 0:M.loader,v==null||(Te=v.classNames)==null?void 0:Te.loader),visible:Yt==="loading"})}const mo=v.icon||(K==null?void 0:K[Yt])||Hz(Yt);var ka,Zn;return ue.createElement("li",{tabIndex:0,ref:Rt,className:ar(Z,Wt,M==null?void 0:M.toast,v==null||(n=v.classNames)==null?void 0:n.toast,M==null?void 0:M.default,M==null?void 0:M[Yt],v==null||(a=v.classNames)==null?void 0:a[Yt]),"data-sonner-toast":"","data-rich-colors":(ka=v.richColors)!=null?ka:L,"data-styled":!(v.jsx||v.unstyled||x),"data-mounted":H,"data-promise":!!v.promise,"data-swiped":se,"data-removed":V,"data-visible":Ds,"data-y-position":Na,"data-x-position":qt,"data-index":E,"data-front":Os,"data-swiping":J,"data-dismissible":$r,"data-type":Yt,"data-invert":vd,"data-swipe-out":pe,"data-swipe-direction":_,"data-expanded":!!(A||he&&H),"data-testid":v.testId,style:{"--index":E,"--toasts-before":E,"--z-index":k.length-E,"--offset":`${V?je:dr.current}px`,"--initial-height":he?"auto":`${Qe}px`,...B,...v.style},onDragEnd:()=>{me(!1),ee(null),Ir.current=null},onPointerDown:Te=>{Te.button!==2&&(zs||!$r||(Ca.current=new Date,Ae(dr.current),Te.target.setPointerCapture(Te.pointerId),Te.target.tagName!=="BUTTON"&&(me(!0),Ir.current={x:Te.clientX,y:Te.clientY})))},onPointerUp:()=>{var Te,ut,At;if(pe||!$r)return;Ir.current=null;const Vt=Number(((Te=Rt.current)==null?void 0:Te.style.getPropertyValue("--swipe-amount-x").replace("px",""))||0),Ur=Number(((ut=Rt.current)==null?void 0:ut.style.getPropertyValue("--swipe-amount-y").replace("px",""))||0),mt=new Date().getTime()-((At=Ca.current)==null?void 0:At.getTime()),Zt=oe==="x"?Vt:Ur,Ta=Math.abs(Zt)/mt;if(Math.abs(Zt)>=iP||Ta>.11){Ae(dr.current),v.onDismiss==null||v.onDismiss.call(v,v),O(oe==="x"?Vt>0?"right":"left":Ur>0?"down":"up"),Xn(),G(!0);return}else{var Qt,Jt;(Qt=Rt.current)==null||Qt.style.setProperty("--swipe-amount-x","0px"),(Jt=Rt.current)==null||Jt.style.setProperty("--swipe-amount-y","0px")}ge(!1),me(!1),ee(null)},onPointerMove:Te=>{var ut,At,Vt;if(!Ir.current||!$r||((ut=window.getSelection())==null?void 0:ut.toString().length)>0)return;const mt=Te.clientY-Ir.current.y,Zt=Te.clientX-Ir.current.x;var Ta;const Qt=(Ta=e.swipeDirections)!=null?Ta:uP(de);!oe&&(Math.abs(Zt)>1||Math.abs(mt)>1)&&ee(Math.abs(Zt)>Math.abs(mt)?"x":"y");let Jt={x:0,y:0};const po=In=>1/(1.5+Math.abs(In)/20);if(oe==="y"){if(Qt.includes("top")||Qt.includes("bottom"))if(Qt.includes("top")&&mt<0||Qt.includes("bottom")&&mt>0)Jt.y=mt;else{const In=mt*po(mt);Jt.y=Math.abs(In)0)Jt.x=Zt;else{const In=Zt*po(Zt);Jt.x=Math.abs(In)0||Math.abs(Jt.y)>0)&&ge(!0),(At=Rt.current)==null||At.style.setProperty("--swipe-amount-x",`${Jt.x}px`),(Vt=Rt.current)==null||Vt.style.setProperty("--swipe-amount-y",`${Jt.y}px`)}},xi&&!v.jsx&&Yt!=="loading"?ue.createElement("button",{"aria-label":re,"data-disabled":zs,"data-close-button":!0,onClick:zs||!$r?()=>{}:()=>{Xn(),v.onDismiss==null||v.onDismiss.call(v,v)},className:ar(M==null?void 0:M.closeButton,v==null||(o=v.classNames)==null?void 0:o.closeButton)},(Zn=K==null?void 0:K.close)!=null?Zn:Kz):null,(Yt||v.icon||v.promise)&&v.icon!==null&&((K==null?void 0:K[Yt])!==null||v.icon)?ue.createElement("div",{"data-icon":"",className:ar(M==null?void 0:M.icon,v==null||(l=v.classNames)==null?void 0:l.icon)},v.promise||v.type==="loading"&&!v.icon?v.icon||fo():null,v.type!=="loading"?mo:null):null,ue.createElement("div",{"data-content":"",className:ar(M==null?void 0:M.content,v==null||(i=v.classNames)==null?void 0:i.content)},ue.createElement("div",{"data-title":"",className:ar(M==null?void 0:M.title,v==null||(d=v.classNames)==null?void 0:d.title)},v.jsx?v.jsx:typeof v.title=="function"?v.title():v.title),v.description?ue.createElement("div",{"data-description":"",className:ar(Q,gd,M==null?void 0:M.description,v==null||(m=v.classNames)==null?void 0:m.description)},typeof v.description=="function"?v.description():v.description):null),ue.isValidElement(v.cancel)?v.cancel:v.cancel&&Wc(v.cancel)?ue.createElement("button",{"data-button":!0,"data-cancel":!0,style:v.cancelButtonStyle||U,onClick:Te=>{Wc(v.cancel)&&$r&&(v.cancel.onClick==null||v.cancel.onClick.call(v.cancel,Te),Xn())},className:ar(M==null?void 0:M.cancelButton,v==null||(h=v.classNames)==null?void 0:h.cancelButton)},v.cancel.label):null,ue.isValidElement(v.action)?v.action:v.action&&Wc(v.action)?ue.createElement("button",{"data-button":!0,"data-action":!0,style:v.actionButtonStyle||q,onClick:Te=>{Wc(v.action)&&(v.action.onClick==null||v.action.onClick.call(v.action,Te),!Te.defaultPrevented&&Xn())},className:ar(M==null?void 0:M.actionButton,v==null||(p=v.classNames)==null?void 0:p.actionButton)},v.action.label):null)};function Gx(){if(typeof window>"u"||typeof document>"u")return"ltr";const e=document.documentElement.getAttribute("dir");return e==="auto"||!e?window.getComputedStyle(document.documentElement).direction:e}function fP(e,n){const a={};return[e,n].forEach((o,l)=>{const i=l===1,d=i?"--mobile-offset":"--offset",m=i?oP:aP;function h(p){["top","right","bottom","left"].forEach(y=>{a[`${d}-${y}`]=typeof p=="number"?`${p}px`:p})}typeof o=="number"||typeof o=="string"?h(o):typeof o=="object"?["top","right","bottom","left"].forEach(p=>{o[p]===void 0?a[`${d}-${p}`]=m:a[`${d}-${p}`]=typeof o[p]=="number"?`${o[p]}px`:o[p]}):h(m)}),a}const mP=ue.forwardRef(function(n,a){const{id:o,invert:l,position:i="bottom-right",hotkey:d=["altKey","KeyT"],expand:m,closeButton:h,className:p,offset:y,mobileOffset:v,theme:x="light",richColors:S,duration:j,style:C,visibleToasts:N=rP,toastOptions:E,dir:k=Gx(),gap:A=lP,icons:R,containerAriaLabel:L="Notifications"}=n,[z,B]=ue.useState([]),U=ue.useMemo(()=>o?z.filter(H=>H.toasterId===o):z.filter(H=>!H.toasterId),[z,o]),q=ue.useMemo(()=>Array.from(new Set([i].concat(U.filter(H=>H.position).map(H=>H.position)))),[U,i]),[Z,Q]=ue.useState([]),[fe,de]=ue.useState(!1),[ce,he]=ue.useState(!1),[M,K]=ue.useState(x!=="system"?x:typeof window<"u"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),re=ue.useRef(null),oe=d.join("+").replace(/Key/g,"").replace(/Digit/g,""),ee=ue.useRef(null),_=ue.useRef(!1),O=ue.useCallback(H=>{B(I=>{var V;return(V=I.find(ne=>ne.id===H.id))!=null&&V.delete||cn.dismiss(H.id),I.filter(({id:ne})=>ne!==H.id)})},[]);return ue.useEffect(()=>cn.subscribe(H=>{if(H.dismiss){requestAnimationFrame(()=>{B(I=>I.map(V=>V.id===H.id?{...V,delete:!0}:V))});return}setTimeout(()=>{g0.flushSync(()=>{B(I=>{const V=I.findIndex(ne=>ne.id===H.id);return V!==-1?[...I.slice(0,V),{...I[V],...H},...I.slice(V+1)]:[H,...I]})})})}),[z]),ue.useEffect(()=>{if(x!=="system"){K(x);return}if(x==="system"&&(window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?K("dark"):K("light")),typeof window>"u")return;const H=window.matchMedia("(prefers-color-scheme: dark)");try{H.addEventListener("change",({matches:I})=>{K(I?"dark":"light")})}catch{H.addListener(({matches:V})=>{try{K(V?"dark":"light")}catch(ne){console.error(ne)}})}},[x]),ue.useEffect(()=>{z.length<=1&&de(!1)},[z]),ue.useEffect(()=>{const H=I=>{var V;if(d.every(me=>I[me]||I.code===me)){var J;de(!0),(J=re.current)==null||J.focus()}I.code==="Escape"&&(document.activeElement===re.current||(V=re.current)!=null&&V.contains(document.activeElement))&&de(!1)};return document.addEventListener("keydown",H),()=>document.removeEventListener("keydown",H)},[d]),ue.useEffect(()=>{if(re.current)return()=>{ee.current&&(ee.current.focus({preventScroll:!0}),ee.current=null,_.current=!1)}},[re.current]),ue.createElement("section",{ref:a,"aria-label":`${L} ${oe}`,tabIndex:-1,"aria-live":"polite","aria-relevant":"additions text","aria-atomic":"false",suppressHydrationWarning:!0},q.map((H,I)=>{var V;const[ne,J]=H.split("-");return U.length?ue.createElement("ol",{key:H,dir:k==="auto"?Gx():k,tabIndex:-1,ref:re,className:p,"data-sonner-toaster":!0,"data-sonner-theme":M,"data-y-position":ne,"data-x-position":J,style:{"--front-toast-height":`${((V=Z[0])==null?void 0:V.height)||0}px`,"--width":`${sP}px`,"--gap":`${A}px`,...C,...fP(y,v)},onBlur:me=>{_.current&&!me.currentTarget.contains(me.relatedTarget)&&(_.current=!1,ee.current&&(ee.current.focus({preventScroll:!0}),ee.current=null))},onFocus:me=>{me.target instanceof HTMLElement&&me.target.dataset.dismissible==="false"||_.current||(_.current=!0,ee.current=me.relatedTarget)},onMouseEnter:()=>de(!0),onMouseMove:()=>de(!0),onMouseLeave:()=>{ce||de(!1)},onDragEnd:()=>de(!1),onPointerDown:me=>{me.target instanceof HTMLElement&&me.target.dataset.dismissible==="false"||he(!0)},onPointerUp:()=>he(!1)},U.filter(me=>!me.position&&I===0||me.position===H).map((me,pe)=>{var G,se;return ue.createElement(dP,{key:me.id,icons:R,index:pe,toast:me,defaultRichColors:S,duration:(G=E==null?void 0:E.duration)!=null?G:j,className:E==null?void 0:E.className,descriptionClassName:E==null?void 0:E.descriptionClassName,invert:l,visibleToasts:N,closeButton:(se=E==null?void 0:E.closeButton)!=null?se:h,interacting:ce,position:H,style:E==null?void 0:E.style,unstyled:E==null?void 0:E.unstyled,classNames:E==null?void 0:E.classNames,cancelButtonStyle:E==null?void 0:E.cancelButtonStyle,actionButtonStyle:E==null?void 0:E.actionButtonStyle,closeButtonAriaLabel:E==null?void 0:E.closeButtonAriaLabel,removeToast:O,toasts:U.filter(ge=>ge.position==me.position),heights:Z.filter(ge=>ge.position==me.position),setHeights:Q,expandByDefault:m,gap:A,expanded:fe,swipeDirections:n.swipeDirections})})):null}))});async function ru(e){const n=rs.loading("Saving changes…");try{const a=await e();if(rs.success("Changes saved",{id:n}),a.botRestart){const o=rs.loading("Restarting bot…");a.botRestart.success?rs.success("Bot started",{id:o}):rs.error(a.botRestart.error??"Could not start bot",{id:o})}return a}catch(a){throw rs.error(a instanceof Error?a.message:"Save failed",{id:n}),a}}function pP({filename:e}){const{canEditConfig:n}=Ft(),a=!n("supportbot"),[o,l]=f.useState(null),[i,d]=f.useState(null),[m,h]=f.useState(!0),[p,y]=f.useState(!1),[v,x]=f.useState(""),[S,j]=f.useState(""),C=f.useCallback(async()=>{h(!0),x(""),j("");try{const L=(await ke.getAddonConfigJson(e)).data??{};l(L),d(structuredClone(L))}catch(R){x(R instanceof Error?R.message:"Failed to load config")}finally{h(!1)}},[e]);f.useEffect(()=>{C()},[C]);const N=o?Iz(o):null;function E(R,L){l(z=>z&&Xl(z,R,L))}async function k(){if(!(a||!o)){y(!0),x(""),j("");try{const R=await ru(()=>ke.saveAddonConfig(e,o));j(R.message||"Saved."),await C()}catch(R){x(R instanceof Error?R.message:"Save failed")}finally{y(!1)}}}if(m)return c.jsxs("div",{className:"space-y-4",children:[c.jsx(Fe,{className:"h-24 w-full rounded-xl"}),c.jsx(Fe,{className:"h-48 w-full rounded-xl"})]});if(!o||!N)return c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:v||"Failed to load"})});const A=i&&JSON.stringify(o)!==JSON.stringify(i);return c.jsxs("div",{className:"space-y-4",children:[c.jsxs("div",{className:"flex flex-wrap items-center justify-end gap-2",children:[A?c.jsx("span",{className:"text-xs text-amber-500",children:"Unsaved changes"}):null,c.jsx(be,{variant:"outline",size:"sm",onClick:C,disabled:m||p,children:"Reload"}),a?c.jsx("span",{className:"text-xs text-muted-foreground",children:"View only"}):c.jsxs(be,{size:"sm",onClick:k,disabled:p||!A,children:[c.jsx(ye,{icon:Au,size:16,className:"mr-1.5"}),p?"Saving…":"Save"]})]}),v?c.jsxs(Ue,{variant:"destructive",children:[c.jsx(ye,{icon:mh,size:18}),c.jsx(He,{children:v})]}):null,S?c.jsx(Ue,{className:"border-primary/30 bg-primary/10 text-primary",children:c.jsx(He,{children:S})}):null,N.map(R=>c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{className:"pb-3",children:[c.jsx(ot,{className:"text-base",children:R.title}),R.description?c.jsx(Nt,{children:R.description}):null]}),c.jsx(qe,{className:"grid gap-4 sm:grid-cols-2",children:R.fields.map(L=>c.jsx("div",{className:L.type==="textarea"||L.type==="stringList"?"sm:col-span-2":"",children:c.jsx(yg,{field:L,value:ao(o,L.path),readOnly:a,onChange:z=>E(L.path,z)})},L.path))})]},R.title))]})}function hP(e){return e.replace(/_/g," ").replace(/([a-z])([A-Z])/g,"$1 $2").replace(/\b\w/g,n=>n.toUpperCase())}function gP(e,n){const a=new Set(e.flatMap(d=>d.fields.map(m=>m.path))),o=xg(n).filter(d=>!a.has(d.path));if(o.length===0)return e;const l=new Map;for(const d of o){const m=d.path.split(".")[0]??"Other",h=l.get(m)??[];h.push(d),l.set(m,h)}const i=[...l.entries()].sort(([d],[m])=>d.localeCompare(m)).map(([d,m])=>({title:hP(d),description:"These options exist in your config file but are not in the main editor sections.",fields:m.sort((h,p)=>h.path.localeCompare(p.path))}));return[...e,...i]}function vP(e){return e!==null&&typeof e=="object"&&"Command"in e}function bP(e){return Object.entries(e).filter(([,n])=>vP(n)).map(([n,a])=>({key:n,...a}))}function yP({data:e,onChange:n}){const a=bP(e);function o(l,i){const d=e[l];n({...e,[l]:{...d,...i}})}return a.length===0?c.jsx("p",{className:"text-sm text-muted-foreground",children:"No commands found in this config."}):c.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:a.map(l=>c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{className:"flex flex-row items-center gap-2 space-y-0 pb-2",children:[c.jsx("div",{className:"flex size-9 items-center justify-center rounded-lg bg-primary/15 text-primary",children:c.jsx(ye,{icon:ms,size:18})}),c.jsx(ot,{className:"text-base",children:l.key})]}),c.jsxs(qe,{className:"space-y-3",children:[c.jsxs("div",{className:"flex items-center justify-between",children:[c.jsx(Ze,{htmlFor:`${l.key}-enabled`,children:"Enabled"}),c.jsx(Dn,{id:`${l.key}-enabled`,checked:l.Enabled!==!1,onCheckedChange:i=>o(l.key,{Enabled:i})})]}),c.jsxs("div",{className:"space-y-1.5",children:[c.jsx(Ze,{children:"Slash command"}),c.jsx(rt,{value:l.Command??"",onChange:i=>o(l.key,{Command:i.target.value}),className:"border-border bg-secondary/30 font-mono"})]}),c.jsxs("div",{className:"space-y-1.5",children:[c.jsx(Ze,{children:"Description"}),c.jsx(rt,{value:l.Description??"",onChange:i=>o(l.key,{Description:i.target.value}),className:"border-border bg-secondary/30"})]})]})]},l.key))})}function xP(e,n){let a=structuredClone(n);if(e==="supportbot"){const o=ao(a,"General.Token");o&&o!=="BOT_TOKEN"&&(a=Xl(a,"General.Token","BOT_TOKEN"))}if(e==="supportbot-ai"){const o=ao(a,"General.Model_API_Key");o&&o!=="MODEL_API_KEY"&&(a=Xl(a,"General.Model_API_Key","MODEL_API_KEY"))}return a}function SP(e,n,a,o){const l={};for(const i of n)for(const d of i.fields){const m=ao(a,d.path),h=ao(o,d.path);d.type==="secret"&&(m==="BOT_TOKEN"||m==="MODEL_API_KEY"||m===""||m===void 0)||JSON.stringify(m)!==JSON.stringify(h)&&(l[`${e}:${d.path}`]=m)}return l}function wP({configFile:e}){const{canEditConfig:n}=Ft(),a=!n(e),[o,l]=f.useState(null),[i,d]=f.useState(null),[m,h]=f.useState(!0),[p,y]=f.useState(!1),[v,x]=f.useState(""),[S,j]=f.useState(""),[C,N]=f.useState("visual"),[E,k]=f.useState(""),[A,R]=f.useState(""),L=V7(e),z=f.useMemo(()=>!L||L==="commands"||!o?L:gP(L,o),[L,o]),B=f.useCallback(async()=>{h(!0),x(""),j("");try{const he=(await ke.getConfigJson(e)).data??{},M=xP(e,he);l(M),d(M);const re=(await ke.getConfigRaw(e)).data??"",oe=D4(re,e);k(oe),R(oe)}catch(ce){x(ce instanceof Error?ce.message:"Failed to load config")}finally{h(!1)}},[e]);f.useEffect(()=>{B()},[B]);function U(ce,he){l(M=>M&&Xl(M,ce,he))}async function q(){if(!(a||E===A)){y(!0),x(""),j("");try{const ce=await ru(()=>ke.saveConfigRaw(e,E));j(ce.message||"Config saved."),await B()}catch(ce){x(ce instanceof Error?ce.message:"Save failed")}finally{y(!1)}}}async function Z(){if(!(a||!o||!i)){if(C==="yaml"){await q();return}y(!0),x(""),j("");try{if(L==="commands"){const ce={};for(const M of Object.keys(o))JSON.stringify(o[M])!==JSON.stringify(i[M])&&(ce[`${e}:${M}`]=o[M]);if(Object.keys(ce).length===0){j("No changes to save.");return}const he=await ru(()=>ke.updateConfigFields(ce));j(he.message||"")}else if(z&&z!=="commands"){const ce=SP(e,z,o,i);if(Object.keys(ce).length===0){j("No changes to save.");return}const he=await ru(()=>ke.updateConfigFields(ce));j(he.message||"")}await B()}catch(ce){x(ce instanceof Error?ce.message:"Save failed")}finally{y(!1)}}}if(L===null)return c.jsx(Ue,{children:c.jsx(He,{children:"No visual editor available for this file."})});if(m)return c.jsxs("div",{className:"space-y-4",children:[c.jsx(Fe,{className:"h-24 w-full rounded-xl"}),c.jsx(Fe,{className:"h-48 w-full rounded-xl"})]});if(!o)return c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:v||"Failed to load"})});const Q=i&&JSON.stringify(o)!==JSON.stringify(i),de=C==="yaml"?E!==A:Q;return c.jsxs("div",{className:"space-y-4",children:[c.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[c.jsxs("div",{className:"flex rounded-lg border border-border p-0.5",children:[c.jsx(be,{type:"button",variant:C==="visual"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>N("visual"),children:"Visual"}),c.jsx(be,{type:"button",variant:C==="yaml"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>N("yaml"),children:"YAML"})]}),c.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[de?c.jsx("span",{className:"text-xs text-amber-500",children:"Unsaved changes"}):null,c.jsx(be,{variant:"outline",size:"sm",onClick:B,disabled:m||p,children:"Reload"}),a?c.jsx("span",{className:"text-xs text-muted-foreground",children:"View only"}):c.jsxs(be,{size:"sm",onClick:Z,disabled:p||!de,children:[c.jsx(ye,{icon:Au,size:16,className:"mr-1.5"}),p?"Saving…":"Save"]})]})]}),v?c.jsxs(Ue,{variant:"destructive",children:[c.jsx(ye,{icon:mh,size:18}),c.jsx(He,{children:v})]}):null,S?c.jsx(Ue,{className:"border-primary/30 bg-primary/10 text-primary",children:c.jsx(He,{children:S})}):null,C==="yaml"?c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{className:"pb-3",children:[c.jsx(ot,{className:"text-base",children:"Raw YAML"}),c.jsx(Nt,{children:"Edit the full file. Use this for nested lists (e.g. welcome buttons) or any option not in Visual mode."})]}),c.jsx(qe,{children:c.jsx(sd,{value:E,disabled:a,onChange:ce=>k(ce.target.value),className:"min-h-[min(520px,60vh)] font-mono text-xs leading-relaxed",spellCheck:!1})})]}):L==="commands"?c.jsx(yP,{data:o,onChange:ce=>l(ce)}):z&&z!=="commands"?z.map(ce=>c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{className:"pb-3",children:[c.jsx(ot,{className:"text-base",children:ce.title}),ce.description?c.jsx(Nt,{children:ce.description}):null]}),c.jsx(qe,{className:"grid gap-4 sm:grid-cols-2",children:ce.fields.map(he=>c.jsx("div",{className:he.type==="textarea"||he.type==="stringList"?"sm:col-span-2":"",children:c.jsx(yg,{field:he,value:ao(o,he.path),readOnly:a,onChange:M=>U(he.path,M)})},he.path))})]},ce.title)):null]})}const CP=ke.listConfigs(),jP={supportbot:"Bot config","ticket-panel":"Ticket system",commands:"Commands",messages:"Messages","supportbot-ai":"AI assistant"};function EP(){var R,L;const{permissions:e,canViewConfig:n}=Ft(),{files:a}=R0(),[o,l]=dh(),i=o.get("file"),d=n("supportbot"),m=f.useMemo(()=>CP.filter(z=>n(z)),[n]),h=f.useMemo(()=>d?a:[],[d,a]),p=f.useMemo(()=>[...m,...h.map(z=>is(z))],[m,h]),y=p[0]??"",[v,x]=f.useState(()=>i&&p.includes(i)?i:y);if(f.useEffect(()=>{i&&p.includes(i)?x(i):p.includes(v)||(x(y),y&&l({file:y}))},[i,p,v,y,l]),p.length===0)return c.jsx(Mr,{to:Sh(e),replace:!0});function S(z){x(z),l({file:z})}const j=V4(v),C=(j==null?void 0:j.type)==="addon",N=C?j.file:null,E=C?A0(N):jP[v]??"Configuration",k=C?!!((R=e==null?void 0:e.configs.supportbot)!=null&&R.edit):e?!!((L=e.configs[v])!=null&&L.edit):!1,A=C?N:`${v}.yml`;return c.jsxs("div",{className:"space-y-6",children:[c.jsxs("div",{children:[c.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:E}),c.jsx("p",{className:"text-muted-foreground",children:k?`Edit ${A} — changes apply to the running bot without restarting the dashboard.`:`Viewing ${A} — you do not have permission to save changes.`})]}),c.jsxs("div",{className:"grid gap-4 lg:grid-cols-[220px_1fr]",children:[c.jsxs(We,{className:"h-fit border-border bg-card",children:[c.jsx(at,{className:"pb-2",children:c.jsx(ot,{className:"text-sm font-medium text-muted-foreground",children:"Configuration files"})}),c.jsx(qe,{className:"p-0",children:c.jsx(hi,{className:"h-[min(400px,50vh)]",children:c.jsxs("ul",{className:"space-y-3 p-2",children:[m.length>0?c.jsxs("li",{children:[c.jsx("p",{className:"px-3 pb-1 text-[10px] font-semibold uppercase tracking-widest text-muted-foreground/80",children:"Core"}),c.jsx("ul",{className:"space-y-0.5",children:m.map(z=>c.jsx("li",{children:c.jsxs("button",{type:"button",onClick:()=>S(z),className:ie("w-full rounded-lg px-3 py-2.5 text-left text-sm transition-colors",z===v?"bg-primary/15 font-medium text-primary":"text-muted-foreground hover:bg-secondary hover:text-foreground"),children:[z,".yml"]})},z))})]}):null,h.length>0?c.jsxs("li",{children:[c.jsx("p",{className:"px-3 pb-1 text-[10px] font-semibold uppercase tracking-widest text-muted-foreground/80",children:"Addons"}),c.jsx("ul",{className:"space-y-0.5",children:h.map(z=>{const B=is(z);return c.jsx("li",{children:c.jsx("button",{type:"button",onClick:()=>S(B),className:ie("w-full rounded-lg px-3 py-2.5 text-left text-sm transition-colors",B===v?"bg-primary/15 font-medium text-primary":"text-muted-foreground hover:bg-secondary hover:text-foreground"),children:z})},z)})})]}):null]})})})]}),c.jsx("div",{className:"min-w-0",children:C&&N?c.jsx(pP,{filename:N},N):c.jsx(wP,{configFile:v},v)})]})]})}const NP={oauth_not_configured:"Discord OAuth is not configured. Complete setup at /setup first.",not_allowed:"Your Discord account is not allowed. Ask an owner to add you under Users, or add your ID to OwnerUserIds in Configs/api.yml.",invalid_state:"Login session expired. Please try again.",missing_code:"Discord did not return an authorization code. Please try again.",oauth_failed:"Could not complete Discord sign-in. Check your OAuth settings.",access_denied:"You cancelled Discord sign-in."};function kP(e){return e?NP[e]||"Sign-in failed. Please try again.":""}function TP(){const{branding:e}=Ou(),{isAuthenticated:n,loading:a,loginWithDiscord:o}=Ft(),[l]=dh(),i=f.useMemo(()=>kP(l.get("error")),[l]);return!a&&n?c.jsx(Mr,{to:"/",replace:!0}):c.jsx("div",{className:"flex min-h-svh items-center justify-center bg-background p-4",children:c.jsxs(We,{className:"w-full max-w-md border-border bg-card",children:[c.jsx(at,{className:"space-y-4",children:c.jsxs("div",{className:"flex items-center gap-3",children:[e.hasFavicon&&e.faviconUrl?c.jsx("img",{src:`${e.faviconUrl}${e.updatedAt?`?v=${e.updatedAt}`:""}`,alt:"",className:"size-11 rounded-xl object-contain"}):c.jsx("div",{className:"flex size-11 items-center justify-center rounded-xl bg-primary text-primary-foreground",children:c.jsx(ye,{icon:ku,size:22})}),c.jsxs("div",{children:[c.jsx(ot,{className:"text-xl",children:e.title}),c.jsx(Nt,{children:"Sign in to your dashboard"})]})]})}),c.jsxs(qe,{className:"space-y-4",children:[c.jsxs("p",{className:"text-sm text-muted-foreground",children:["Sign in with Discord. Your application credentials and allowed user IDs are configured in"," ",c.jsx("code",{className:"rounded-md bg-secondary px-1.5 py-0.5 text-xs text-foreground",children:"Configs/api.yml"}),"."]}),i?c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:i})}):null,c.jsx(be,{type:"button",className:"w-full",disabled:a,onClick:o,children:a?"Checking session…":"Continue with Discord"})]})]})})}const fs=[{id:"botToken",title:"Bot token",subtitle:"Connect your Discord bot",icon:ku},{id:"secretKey",title:"Session secret",subtitle:"Secure dashboard logins",icon:M4},{id:"oauth",title:"Discord OAuth",subtitle:"Sign in with Discord",icon:N4},{id:"redirectUri",title:"Redirect URL",subtitle:"OAuth callback address",icon:gh},{id:"owners",title:"Dashboard owners",subtitle:"Who can access this panel",icon:yh}];function RP(e){return e==="oauth"?"oauth":e==="owners"?"owners":e}function AP({brandingTitle:e,faviconUrl:n,faviconVersion:a,hasFavicon:o,children:l}){return c.jsx("div",{className:"min-h-svh bg-background",children:c.jsxs("div",{className:"mx-auto flex min-h-svh max-w-6xl flex-col px-4 py-6 md:px-8 md:py-10",children:[c.jsxs("header",{className:"mb-8 flex items-center gap-4",children:[o&&n?c.jsx("img",{src:`${n}${a?`?v=${a}`:""}`,alt:"",className:"size-12 rounded-2xl border border-border object-contain"}):c.jsx("div",{className:"flex size-12 items-center justify-center rounded-2xl border border-border bg-primary text-primary-foreground",children:c.jsx(ye,{icon:ku,size:24})}),c.jsxs("div",{children:[c.jsx("p",{className:"text-xs font-medium uppercase tracking-wider text-muted-foreground",children:"First-time setup"}),c.jsx("h1",{className:"text-2xl font-semibold tracking-tight md:text-3xl",children:e})]})]}),l]})})}function _P({currentIndex:e,validation:n}){const a=(e+1)/fs.length*100;return c.jsxs("div",{className:"space-y-6",children:[c.jsxs("div",{className:"space-y-2",children:[c.jsxs("div",{className:"flex items-center justify-between text-xs text-muted-foreground",children:[c.jsxs("span",{children:["Step ",e+1," of ",fs.length]}),c.jsxs("span",{children:[Math.round(a),"%"]})]}),c.jsx("div",{className:"h-2 overflow-hidden rounded-full bg-secondary",children:c.jsx("div",{className:"h-full rounded-full bg-primary transition-all duration-300 ease-out",style:{width:`${a}%`}})})]}),c.jsx("nav",{className:"hidden space-y-1 md:block","aria-label":"Setup steps",children:fs.map((o,l)=>{var p;const i=RP(o.id),d=(p=n[i])==null?void 0:p.ok,m=l===e,h=lc.jsxs("li",{className:"flex items-center gap-2",children:[c.jsx(ye,{icon:Tu,size:14}),o.globalName||o.username,c.jsx("span",{className:"font-mono text-xs opacity-80",children:o.id})]},o.id))}):null,!e.bot&&!((a=e.users)!=null&&a.length)?c.jsx("p",{children:e.warning||"Verified successfully."}):null]})}):c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:e.error})}):null}function OP({values:e,setValues:n,validation:a,validating:o,onValidate:l}){return c.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[c.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["Open the"," ",c.jsx("a",{href:"https://discord.com/developers/applications",target:"_blank",rel:"noreferrer",className:"font-medium text-primary hover:underline",children:"Discord Developer Portal"}),", select your application, go to ",c.jsx("strong",{children:"Bot"}),", and reset or copy the token."]}),c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:"botToken",children:"Bot token"}),c.jsx(rt,{id:"botToken",type:"password",autoComplete:"off",value:e.botToken,onChange:i=>n({...e,botToken:i.target.value}),placeholder:"MTI…",className:"h-11 font-mono text-sm"})]}),c.jsx(yi,{result:a.botToken}),c.jsx("div",{className:"mt-auto",children:c.jsx(be,{type:"button",variant:"secondary",disabled:o||!e.botToken,onClick:l,children:o?"Checking with Discord…":"Verify bot token"})})]})}function DP({values:e,setValues:n,validation:a,validating:o,onValidate:l,onGenerate:i}){return c.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[c.jsx("p",{className:"text-sm leading-relaxed text-muted-foreground",children:"This random string signs your login cookies. Store it like a password — do not commit it to public repos."}),c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:"secretKey",children:"Session secret"}),c.jsx(rt,{id:"secretKey",type:"password",autoComplete:"off",value:e.secretKey,onChange:d=>n({...e,secretKey:d.target.value}),className:"h-11 font-mono text-sm"})]}),c.jsx(yi,{result:a.secretKey}),c.jsxs("div",{className:"mt-auto flex flex-wrap gap-2",children:[c.jsx(be,{type:"button",variant:"outline",onClick:i,children:"Generate secure secret"}),c.jsx(be,{type:"button",variant:"secondary",disabled:o||!e.secretKey,onClick:l,children:o?"Checking…":"Validate"})]})]})}function LP({values:e,setValues:n,validation:a,validating:o,onValidate:l}){return c.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[c.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["Use the ",c.jsx("strong",{children:"same application"})," as your bot. Under OAuth2, copy the Client ID and Client Secret."]}),c.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[c.jsxs("div",{className:"space-y-2 sm:col-span-2",children:[c.jsx(Ze,{htmlFor:"clientId",children:"Client ID"}),c.jsx(rt,{id:"clientId",value:e.clientId,onChange:i=>n({...e,clientId:i.target.value}),className:"h-11 font-mono text-sm"})]}),c.jsxs("div",{className:"space-y-2 sm:col-span-2",children:[c.jsx(Ze,{htmlFor:"clientSecret",children:"Client Secret"}),c.jsx(rt,{id:"clientSecret",type:"password",autoComplete:"off",value:e.clientSecret,onChange:i=>n({...e,clientSecret:i.target.value}),className:"h-11 font-mono text-sm"})]})]}),c.jsx(yi,{result:a.oauth}),c.jsx("div",{className:"mt-auto",children:c.jsx(be,{type:"button",variant:"secondary",disabled:o||!e.clientId||!e.clientSecret,onClick:l,children:o?"Checking with Discord…":"Verify OAuth credentials"})})]})}function zP({values:e,setValues:n,validation:a}){async function o(){if(e.redirectUri)try{await navigator.clipboard.writeText(e.redirectUri)}catch{}}return c.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[c.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["Add this exact URL under ",c.jsx("strong",{children:"OAuth2 → Redirects"})," in the Developer Portal. It must match character-for-character."]}),c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:"redirectUri",children:"Redirect URI"}),c.jsxs("div",{className:"flex gap-2",children:[c.jsx(rt,{id:"redirectUri",value:e.redirectUri,onChange:l=>n({...e,redirectUri:l.target.value}),className:"h-11 flex-1 font-mono text-xs"}),c.jsx(be,{type:"button",variant:"outline",size:"icon",className:"size-11 shrink-0",onClick:()=>void o(),title:"Copy URL",children:c.jsx(ye,{icon:x0,size:18})})]})]}),a.redirectUri&&!a.redirectUri.ok?c.jsx(yi,{result:a.redirectUri}):c.jsx(Ue,{className:"border-border bg-secondary",children:c.jsx(He,{className:"text-sm text-muted-foreground",children:"We pre-filled this from your current dashboard URL. If you access the panel from a different domain later, update this and add the new URL in Discord too."})})]})}function PP({values:e,setValues:n,validation:a,validating:o,onValidate:l}){return c.jsxs("div",{className:"flex flex-1 flex-col gap-5",children:[c.jsxs("p",{className:"text-sm leading-relaxed text-muted-foreground",children:["Enable ",c.jsx("strong",{children:"Developer Mode"})," in Discord (Settings → Advanced), then right-click your profile and ",c.jsx("strong",{children:"Copy User ID"}),". Add one ID per line."]}),c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:"owners",children:"Owner user IDs"}),c.jsx(sd,{id:"owners",value:e.ownerUserIds,onChange:i=>n({...e,ownerUserIds:i.target.value}),placeholder:`829112572816130058 +987654321098765432`,className:"min-h-[120px] font-mono text-sm"})]}),c.jsx(yi,{result:a.owners}),c.jsx("div",{className:"mt-auto",children:c.jsx(be,{type:"button",variant:"secondary",disabled:o||!e.ownerUserIds.trim(),onClick:l,children:o?"Checking with Discord…":"Verify owner IDs"})})]})}function BP({onContinue:e}){return c.jsx("div",{className:"mx-auto flex w-full max-w-lg flex-1 flex-col justify-center py-8",children:c.jsxs("div",{className:"rounded-2xl border border-border bg-card px-6 py-10 text-center md:px-10",children:[c.jsx("div",{className:"mx-auto mb-6 flex size-16 items-center justify-center rounded-2xl bg-primary/10 text-primary",children:c.jsx(ye,{icon:Tu,size:40})}),c.jsx("h2",{className:"text-2xl font-semibold tracking-tight",children:"Setup complete"}),c.jsxs("p",{className:"mx-auto mt-3 max-w-sm text-sm leading-relaxed text-muted-foreground",children:["Your configuration has been saved. Restart the server for changes to take effect — stop the running process, then start it again (for example"," ",c.jsx("code",{className:"rounded-md bg-muted px-1.5 py-0.5 font-mono text-xs",children:"npm start"}),")."]}),c.jsx(Ue,{className:"mt-6 text-left",children:c.jsx(He,{children:"After restarting, sign in with Discord to open the dashboard."})}),c.jsx(be,{type:"button",size:"lg",className:"mt-8 min-w-[220px]",onClick:e,children:"Continue to sign in"})]})})}function $P({currentIndex:e,validating:n,saving:a,onBack:o,onNext:l,onFinish:i}){const d=e===fs.length-1;return c.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[c.jsxs(be,{type:"button",variant:"ghost",disabled:e===0||a,onClick:o,children:[c.jsx(ye,{icon:b0,size:18,className:"mr-1"}),"Back"]}),c.jsx("div",{className:"flex flex-1 justify-end gap-2",children:d?c.jsx(be,{type:"button",size:"lg",disabled:a||n,onClick:i,className:"min-w-[200px]",children:a?"Saving…":"Finish setup"}):c.jsxs(be,{type:"button",size:"lg",disabled:n||a,onClick:l,children:["Continue",c.jsx(ye,{icon:ph,size:18,className:"ml-1"})]})})]})}function IP(){const e=crypto.randomUUID().replace(/-/g,""),n=crypto.randomUUID().replace(/-/g,"");return e+n}function UP(e){return e.split(/[\s,]+/).map(n=>n.trim()).filter(Boolean)}function Fx(e){return e==="oauth"?"oauth":e==="owners"?"owners":e}function HP(){const e=oo(),{branding:n}=Ou(),{loading:a,error:o,refresh:l,status:i}=yC(),[d,m]=f.useState(0),[h,p]=f.useState({botToken:"",secretKey:"",clientId:"",clientSecret:"",redirectUri:"",ownerUserIds:""}),[y,v]=f.useState({}),[x,S]=f.useState(!1),[j,C]=f.useState(!1),[N,E]=f.useState(""),[k,A]=f.useState(!1),R=fs[d];f.useEffect(()=>{i!=null&&i.suggestedRedirectUri&&!h.redirectUri&&p(Q=>({...Q,redirectUri:i.suggestedRedirectUri}))},[i==null?void 0:i.suggestedRedirectUri,h.redirectUri]);const L=f.useMemo(()=>({botToken:h.botToken,secretKey:h.secretKey,clientId:h.clientId,clientSecret:h.clientSecret,redirectUri:h.redirectUri,ownerUserIds:UP(h.ownerUserIds)}),[h]);async function z(){S(!0),E("");try{const Q=await ke.validateSetup(L);return v(fe=>{var de;return{...fe,...(de=Q.data)==null?void 0:de.results}}),Q.data}catch(Q){return E(Q instanceof Error?Q.message:"Validation failed"),null}finally{S(!1)}}async function B(){var de,ce;const Q=Fx(R.id),fe=await z();return!!((ce=(de=fe==null?void 0:fe.results)==null?void 0:de[Q])!=null&&ce.ok)}async function U(){const Q=Fx(R.id),fe=y[Q];!(fe!=null&&fe.ok)&&!await B()||m(de=>Math.min(de+1,fs.length-1))}async function q(){C(!0),E("");try{const Q=await z();if(!(Q!=null&&Q.ok)){E("Fix the steps marked with errors before finishing.");return}await ke.completeSetup(L),A(!0)}catch(Q){E(Q instanceof Error?Q.message:"Could not save setup")}finally{C(!1)}}function Z(){const Q={values:h,setValues:p,validation:y,validating:x};switch(R.id){case"botToken":return c.jsx(OP,{...Q,onValidate:()=>void B()});case"secretKey":return c.jsx(DP,{...Q,onGenerate:()=>p(fe=>({...fe,secretKey:IP()})),onValidate:()=>void B()});case"oauth":return c.jsx(LP,{...Q,onValidate:()=>void B()});case"redirectUri":return c.jsx(zP,{values:h,setValues:p,validation:y});case"owners":return c.jsx(PP,{...Q,onValidate:()=>void B()})}}return a?c.jsx("div",{className:"min-h-svh bg-background px-4 py-10",children:c.jsxs("div",{className:"mx-auto max-w-6xl space-y-8",children:[c.jsx(Fe,{className:"h-14 w-64"}),c.jsxs("div",{className:"grid gap-8 lg:grid-cols-[280px_1fr]",children:[c.jsx(Fe,{className:"hidden h-80 lg:block"}),c.jsx(Fe,{className:"h-[520px] rounded-2xl"})]})]})}):c.jsxs(AP,{brandingTitle:n.title,faviconUrl:n.faviconUrl,faviconVersion:n.updatedAt,hasFavicon:n.hasFavicon,children:[o?c.jsx(Ue,{variant:"destructive",className:"mb-6",children:c.jsx(He,{children:o})}):null,N?c.jsx(Ue,{variant:"destructive",className:"mb-6",children:c.jsx(He,{children:N})}):null,k?c.jsx(BP,{onContinue:async()=>{await l(),e("/login",{replace:!0})}}):c.jsxs("div",{className:"grid flex-1 gap-8 lg:grid-cols-[minmax(0,280px)_1fr]",children:[c.jsx(_P,{currentIndex:d,validation:y}),c.jsx(MP,{step:R,footer:c.jsx($P,{currentIndex:d,validating:x,saving:j,onBack:()=>m(Q=>Math.max(0,Q-1)),onNext:()=>void U(),onFinish:()=>void q()}),children:Z()})]})]})}const VP={todo:"bg-rose-500/15 text-rose-400",progress:"bg-amber-500/15 text-amber-400",done:"bg-emerald-500/15 text-emerald-400"};function GP({title:e,icon:n,href:a,badge:o="Configured",status:l="done"}){return c.jsxs(kt,{to:a,className:ie("flex items-center gap-3 rounded-2xl border border-border bg-card p-4 transition-colors","hover:border-primary hover:bg-secondary"),children:[c.jsx("div",{className:"flex size-11 shrink-0 items-center justify-center rounded-full bg-secondary text-primary",children:c.jsx(ye,{icon:n,size:20})}),c.jsxs("div",{className:"min-w-0 flex-1",children:[c.jsx("p",{className:"truncate font-semibold",children:e}),c.jsx("span",{className:ie("mt-1 inline-flex rounded-md px-2 py-0.5 text-[10px] font-semibold",VP[l]),children:o})]})]})}function FP({percent:e,size:n=128,className:a,trackClassName:o="stroke-white/20",strokeClassName:l="stroke-white"}){const d=2*Math.PI*42,m=Math.min(100,Math.max(0,e)),h=d-m/100*d;return c.jsxs("div",{className:ie("relative inline-flex",a),children:[c.jsxs("svg",{width:n,height:n,viewBox:"0 0 100 100",className:"-rotate-90","aria-hidden":!0,children:[c.jsx("circle",{cx:"50",cy:"50",r:42,fill:"none",strokeWidth:"9",className:o}),c.jsx("circle",{cx:"50",cy:"50",r:42,fill:"none",strokeWidth:"9",strokeLinecap:"round",strokeDasharray:d,strokeDashoffset:h,className:l})]}),c.jsxs("div",{className:"absolute inset-0 flex flex-col items-center justify-center text-center",children:[c.jsxs("span",{className:"text-2xl font-bold tabular-nums leading-none",children:[Math.round(m),"%"]}),c.jsx("span",{className:"mt-0.5 text-[10px] font-medium uppercase tracking-wide opacity-80",children:"Complete"})]})]})}const YP={todo:{dot:"bg-rose-500",badge:"bg-rose-500/15 text-rose-400",label:"Needs setup"},progress:{dot:"bg-amber-400",badge:"bg-amber-500/15 text-amber-400",label:"In progress"},done:{dot:"bg-sky-400",badge:"bg-sky-500/15 text-sky-400",label:"Active"}};function WP({title:e,subtitle:n,icon:a,href:o,status:l,meta:i="Open in dashboard"}){const d=YP[l];return c.jsxs(kt,{to:o,className:ie("group flex min-w-[280px] flex-1 flex-col gap-4 rounded-2xl border border-border bg-card p-4 transition-colors","hover:border-primary hover:bg-secondary","sm:min-w-[300px] lg:min-w-0"),children:[c.jsxs("div",{className:"flex items-start justify-between gap-2",children:[c.jsx("span",{className:ie("mt-1.5 size-2 shrink-0 rounded-full",d.dot)}),c.jsx("span",{className:"text-xs text-muted-foreground",children:n})]}),c.jsxs("div",{children:[c.jsx("h3",{className:"font-semibold leading-snug tracking-tight",children:e}),c.jsx("span",{className:ie("mt-2 inline-flex rounded-md px-2 py-0.5 text-[11px] font-semibold",d.badge),children:d.label})]}),c.jsxs("div",{className:"mt-auto flex items-center justify-between border-t border-border pt-3",children:[c.jsxs("div",{className:"flex items-center gap-2",children:[c.jsx("div",{className:"flex size-8 items-center justify-center rounded-lg bg-secondary text-primary",children:c.jsx(ye,{icon:a,size:16})}),c.jsx("span",{className:"text-xs text-muted-foreground",children:i})]}),c.jsxs("div",{className:"flex items-center gap-3 text-muted-foreground",children:[c.jsx(ye,{icon:gh,size:14,className:"opacity-60"}),c.jsx(ye,{icon:Xa,size:14,className:"opacity-60 group-hover:text-primary"}),c.jsx(ye,{icon:ph,size:14,className:"text-primary opacity-0 transition-opacity group-hover:opacity-100"})]})]})]})}function qP({stats:e}){const n=[{id:"ping",label:"Gateway latency",detail:`${e.bot.ping}ms`,badge:e.bot.ping<200?"Good":"High",badgeClass:e.bot.ping<200?"bg-emerald-500/15 text-emerald-400":"bg-amber-500/15 text-amber-400"},{id:"uptime",label:"Bot uptime",detail:j0(e.bot.uptime),badge:"Live",badgeClass:"bg-primary/20 text-primary"},{id:"ram",label:"Memory usage",detail:`${e.hosting.ram_used} / ${e.hosting.ram_total}`,badge:`${e.hosting.ram_percent}%`,badgeClass:"bg-sky-500/15 text-sky-400"}];return c.jsxs("aside",{className:"hidden w-[min(100%,320px)] shrink-0 space-y-4 xl:block",children:[c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{className:"flex flex-row items-center justify-between space-y-0 pb-3",children:[c.jsxs(ot,{className:"text-sm font-semibold",children:["Connected servers (",e.servers,")"]}),c.jsx(be,{variant:"ghost",size:"icon",className:"size-7 text-muted-foreground",children:c.jsx("span",{className:"text-lg leading-none",children:"+"})})]}),c.jsxs(qe,{className:"pt-0",children:[c.jsxs("div",{className:"flex -space-x-2",children:[Array.from({length:Math.min(6,e.servers)}).map((a,o)=>c.jsxs(gs,{className:"size-9 border-2 border-card ring-0",children:[c.jsx(vs,{src:e.bot.avatar,alt:""}),c.jsx(bs,{className:"bg-primary/25 text-[10px] text-primary",children:String(o+1)})]},o)),e.servers>6?c.jsxs("div",{className:"flex size-9 items-center justify-center rounded-full border-2 border-card bg-secondary text-xs font-medium text-muted-foreground",children:["+",e.servers-6]}):null]}),c.jsxs("p",{className:"mt-3 text-xs text-muted-foreground",children:[e.users.toLocaleString()," members across your guilds"]})]})]}),c.jsx(We,{className:"overflow-hidden border-border bg-secondary",children:c.jsx(qe,{className:"p-5",children:c.jsxs("div",{className:"space-y-3",children:[c.jsx("div",{className:"flex size-10 items-center justify-center rounded-xl bg-primary text-primary-foreground",children:c.jsx(ye,{icon:_4,size:22})}),c.jsxs("div",{children:[c.jsx("p",{className:"font-semibold",children:"Keep SupportBot up to date"}),c.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:"Check for releases and install updates from settings."})]}),c.jsx(be,{asChild:!0,size:"sm",className:"w-full",children:c.jsxs(kt,{to:"/settings",children:[c.jsx(ye,{icon:Ru,size:16,className:"mr-2"}),"Open settings"]})})]})})}),c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[c.jsx(ot,{className:"text-sm font-semibold",children:"System activity"}),c.jsx(be,{variant:"ghost",size:"icon",className:"size-7 text-muted-foreground",children:c.jsx("span",{className:"text-base leading-none",children:"⋯"})})]}),c.jsxs(qe,{className:"space-y-1 p-0 pb-2",children:[n.map(a=>c.jsxs("div",{className:"flex items-center gap-3 px-4 py-2.5 transition-colors hover:bg-secondary/40",children:[c.jsxs(gs,{className:"size-9",children:[c.jsx(vs,{src:e.bot.avatar,alt:e.bot.username}),c.jsx(bs,{className:"bg-secondary text-xs",children:"SB"})]}),c.jsxs("div",{className:"min-w-0 flex-1",children:[c.jsx("p",{className:"truncate text-sm font-medium",children:a.label}),c.jsx("p",{className:"truncate text-xs text-muted-foreground",children:a.detail})]}),c.jsx("span",{className:`shrink-0 rounded-full px-2 py-0.5 text-[10px] font-semibold ${a.badgeClass}`,children:a.badge})]},a.id)),c.jsx(be,{asChild:!0,variant:"ghost",className:"mx-2 mt-1 w-[calc(100%-1rem)] justify-between text-xs text-muted-foreground",children:c.jsxs(kt,{to:"/system",children:["All system details",c.jsx(ye,{icon:ph,size:14})]})})]})]}),c.jsx(We,{className:"border-border bg-card",children:c.jsxs(qe,{className:"flex items-center gap-3 p-4",children:[c.jsx("div",{className:"flex size-9 items-center justify-center rounded-lg bg-secondary text-primary",children:c.jsx(ye,{icon:Xa,size:18})}),c.jsxs("div",{className:"min-w-0 flex-1",children:[c.jsxs("p",{className:"text-sm font-medium",children:["v",e.bot.version]}),c.jsxs("p",{className:"text-xs text-muted-foreground",children:["CPU ",e.hosting.cpu_load]})]})]})})]})}const h5={todo:"Needs setup",progress:"In progress",done:"Active"};function eh(e,n,a="Configure module"){const o=n==null?void 0:n[e];return o||{status:"todo",subtitle:a}}function KP(){return c.jsxs("div",{className:"flex gap-6",children:[c.jsxs("div",{className:"min-w-0 flex-1 space-y-6",children:[c.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[c.jsx(Fe,{className:"h-44 rounded-2xl"}),c.jsx(Fe,{className:"h-44 rounded-2xl"})]}),c.jsx(Fe,{className:"h-8 w-48"}),c.jsx("div",{className:"flex gap-4 overflow-hidden",children:Array.from({length:3}).map((e,n)=>c.jsx(Fe,{className:"h-40 min-w-[280px] rounded-2xl"},n))}),c.jsx(Fe,{className:"h-8 w-56"}),c.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:Array.from({length:4}).map((e,n)=>c.jsx(Fe,{className:"h-20 rounded-2xl"},n))})]}),c.jsx(Fe,{className:"hidden h-[520px] w-80 shrink-0 rounded-2xl xl:block"})]})}function XP(){const{stats:e,loading:n,error:a}=Du(),[o,l]=f.useState("all"),i=f.useMemo(()=>{if(!e)return 0;const y=e.tickets.total||0;return y===0?100:Math.round(e.tickets.closed/y*100)},[e]),d=f.useMemo(()=>o==="open"||o==="closed"?ls.filter(y=>y.category==="tickets"):o==="all"?ls:ls.filter(y=>y.category===o),[o]);if(n)return c.jsx(KP,{});if(a||!e)return c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:a||"No stats available"})});const m=e.tickets.open,h=e.tickets.closed,p=e.tickets.total;return c.jsxs("div",{className:"flex flex-col gap-6 xl:flex-row xl:items-start",children:[c.jsxs("div",{className:"min-w-0 flex-1 space-y-6",children:[c.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[c.jsx(We,{className:"overflow-hidden border-border bg-card",children:c.jsxs(qe,{className:"flex flex-col gap-4 p-5 sm:flex-row sm:items-center sm:justify-between sm:p-6",children:[c.jsxs("div",{className:"space-y-3",children:[c.jsxs("p",{className:"text-lg font-semibold leading-snug",children:["You have"," ",c.jsx("span",{className:"text-primary",children:m})," open ticket",m===1?"":"s"]}),c.jsx("p",{className:"max-w-xs text-sm text-muted-foreground",children:"Review transcripts or tune your ticket panel so new requests are handled smoothly."}),c.jsx(be,{asChild:!0,size:"sm",className:"rounded-lg px-5",children:c.jsx(kt,{to:"/transcripts",children:"Review"})})]}),c.jsxs("div",{className:"relative mx-auto flex size-28 shrink-0 items-end justify-center sm:mx-0 sm:size-32","aria-hidden":!0,children:[c.jsx("div",{className:"absolute inset-0 rounded-2xl bg-secondary"}),c.jsx("span",{className:"relative text-6xl",children:"🎫"})]})]})}),c.jsx(We,{className:"overflow-hidden border-border bg-primary text-primary-foreground",children:c.jsxs(qe,{className:"flex flex-col gap-4 p-5 sm:flex-row sm:items-center sm:justify-between sm:p-6",children:[c.jsxs("div",{className:"space-y-3",children:[c.jsx("p",{className:"text-sm font-medium text-white/80",children:"Ticket summary"}),c.jsxs("ul",{className:"space-y-1.5 text-sm",children:[c.jsxs("li",{className:"flex items-center gap-2",children:[c.jsx("span",{className:"size-1.5 rounded-full bg-white/70"}),c.jsxs("span",{className:"text-white/90",children:[p," total"]})]}),c.jsxs("li",{className:"flex items-center gap-2",children:[c.jsx("span",{className:"size-1.5 rounded-full bg-white/70"}),c.jsxs("span",{className:"text-white/90",children:[h," closed"]})]}),c.jsxs("li",{className:"flex items-center gap-2",children:[c.jsx("span",{className:"size-1.5 rounded-full bg-white/70"}),c.jsxs("span",{className:"text-white/90",children:[m," open"]})]})]})]}),c.jsx(FP,{percent:i,size:120})]})})]}),c.jsxs("section",{className:"space-y-4",children:[c.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[c.jsx("h2",{className:"text-xl font-bold tracking-tight",children:"Module overview"}),c.jsx(Yj,{value:o,onValueChange:y=>l(y),children:c.jsxs(fg,{className:"h-auto flex-wrap rounded-xl bg-secondary/60 p-1",children:[c.jsx(Ka,{value:"all",className:"rounded-lg text-xs data-[state=active]:bg-background data-[state=active]:shadow-sm",children:"All"}),c.jsx(Ka,{value:"open",className:"rounded-lg text-xs data-[state=active]:bg-background",children:"Open"}),c.jsx(Ka,{value:"closed",className:"rounded-lg text-xs data-[state=active]:bg-background",children:"Closed"}),G7.filter(y=>y.id!=="all").map(y=>c.jsx(Ka,{value:y.id,className:"rounded-lg text-xs data-[state=active]:bg-background",children:y.label},y.id))]})})]}),c.jsx("div",{className:"-mx-1 flex gap-4 overflow-x-auto px-1 pb-2 lg:grid lg:grid-cols-3 lg:overflow-visible",children:(o==="open"?[{id:"open-queue",title:"Open ticket queue",subtitle:`${m} waiting`,icon:Mu,href:"/transcripts",status:"todo",meta:"View transcripts"}]:o==="closed"?[{id:"closed-archive",title:"Closed tickets",subtitle:`${h} resolved`,icon:Tu,href:"/transcripts",status:"done",meta:"Browse archive"}]:d.map(y=>{const v=eh(y.id,e.modules,y.description);return{id:y.id,title:y.title,subtitle:v.subtitle,icon:y.icon,href:y.href,status:v.status,meta:v.status==="done"?"View settings":"Configure"}})).map(y=>c.jsx(WP,{title:y.title,subtitle:y.subtitle,icon:y.icon,href:y.href,status:y.status,meta:y.meta},y.id))})]}),c.jsxs("section",{className:"space-y-4",children:[c.jsxs("div",{className:"flex items-center justify-between",children:[c.jsx("h2",{className:"text-xl font-bold tracking-tight",children:"Active modules"}),c.jsx(kt,{to:"/configs",className:"text-sm font-medium text-primary hover:underline",children:"See all"})]}),c.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:ls.slice(0,4).map(y=>{const v=eh(y.id,e.modules);return c.jsx(GP,{title:y.title,icon:y.icon,href:y.href,badge:h5[v.status],status:v.status},y.id)})})]})]}),c.jsx(qP,{stats:e})]})}function ZP(){const{permissions:e}=Ft();return Ln(e,"overview")?c.jsx(XP,{}):c.jsx(Mr,{to:Sh(e),replace:!0})}function as({permission:e,children:n}){const{loading:a,isAuthenticated:o,permissions:l}=Ft();return a?c.jsx("div",{className:"flex flex-1 items-center justify-center py-16 text-sm text-muted-foreground",children:"Loading…"}):o?Ln(l,e)?c.jsx(c.Fragment,{children:n}):c.jsx(Mr,{to:Sh(l),replace:!0}):c.jsx(Mr,{to:"/login",replace:!0})}const Sg="supportbot-dashboard-accent",$l="#8b5cf6",QP=["--primary","--ring","--chart-1","--sidebar-primary","--sidebar-ring","--accent","--accent-foreground","--sidebar-accent","--sidebar-accent-foreground"];function JP(e){const n=lr(e,$l),a=parseInt(n.slice(1,3),16)/255,o=parseInt(n.slice(3,5),16)/255,l=parseInt(n.slice(5,7),16)/255,i=Math.max(a,o,l),d=Math.min(a,o,l),m=(i+d)/2;let h=0,p=0;if(i!==d){const y=i-d;switch(p=m>.5?y/(2-i-d):y/(i+d),i){case a:h=((o-l)/y+(o{const o=new FileReader;o.onload=()=>n(String(o.result)),o.onerror=()=>a(new Error("Could not read file")),o.readAsDataURL(e)})}function aB({canEdit:e}){const{branding:n,setBrandingLocal:a}=Ou(),o=f.useRef(null),[l,i]=f.useState(n.title),[d,m]=f.useState(n.pageTitle),[h,p]=f.useState(!1),[y,v]=f.useState(!1),[x,S]=f.useState("");f.useEffect(()=>{i(n.title),m(n.pageTitle)},[n.title,n.pageTitle]);const j=n.hasFavicon&&n.faviconUrl?`${n.faviconUrl}${n.updatedAt?`?v=${n.updatedAt}`:""}`:null;async function C(){if(e){p(!0),S("");try{const R=await ke.updateBranding({title:l,pageTitle:d});R.data&&a(R.data),S(R.message||"Branding saved.")}catch(R){S(R instanceof Error?R.message:"Save failed")}finally{p(!1)}}}async function N(R){if(!(!e||!R)){v(!0),S("");try{const L=await rB(R),z=await ke.uploadBrandingFavicon(L);z.data&&a(z.data),S(z.message||"Favicon uploaded.")}catch(L){S(L instanceof Error?L.message:"Upload failed")}finally{v(!1),o.current&&(o.current.value="")}}}async function E(){if(e){v(!0),S("");try{const R=await ke.removeBrandingFavicon();R.data&&a(R.data),S(R.message||"Favicon removed.")}catch(R){S(R instanceof Error?R.message:"Remove failed")}finally{v(!1)}}}async function k(){if(e){p(!0),S("");try{const R=await ke.resetBranding();R.data&&a(R.data),S(R.message||"Reset to defaults.")}catch(R){S(R instanceof Error?R.message:"Reset failed")}finally{p(!1)}}}const A=l.trim()!==n.title||d.trim()!==n.pageTitle;return c.jsxs("div",{className:"space-y-4 border-t border-border pt-4",children:[c.jsxs("div",{children:[c.jsx("p",{className:"text-sm font-medium",children:"Branding"}),c.jsx("p",{className:"text-xs text-muted-foreground",children:"Sidebar title, browser tab title, and favicon — saved on the server for everyone using this dashboard."})]}),c.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:"brand-title",children:"Sidebar title"}),c.jsx(rt,{id:"brand-title",value:l,disabled:!e,maxLength:64,onChange:R=>i(R.target.value),className:"border-border bg-secondary/30",placeholder:"SupportBot"})]}),c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:"brand-page-title",children:"Browser tab title"}),c.jsx(rt,{id:"brand-page-title",value:d,disabled:!e,maxLength:80,onChange:R=>m(R.target.value),className:"border-border bg-secondary/30",placeholder:"SupportBot Dashboard"})]})]}),c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{children:"Favicon"}),c.jsx("p",{className:"text-xs text-muted-foreground",children:"PNG, ICO, SVG, JPEG, or WebP — max 512 KB. Shown in the browser tab and beside the sidebar title."}),c.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[c.jsx("div",{className:"flex size-14 items-center justify-center overflow-hidden rounded-lg border border-border bg-secondary/30",children:j?c.jsx("img",{src:j,alt:"Favicon preview",className:"size-full object-contain p-1"}):c.jsx(ye,{icon:j4,size:22,className:"text-muted-foreground"})}),c.jsx("input",{ref:o,type:"file",accept:"image/png,image/jpeg,image/x-icon,image/vnd.microsoft.icon,image/svg+xml,image/webp,.ico",className:"hidden",disabled:!e||y,onChange:R=>{var L;return void N(((L=R.target.files)==null?void 0:L[0])??null)}}),e?c.jsxs(c.Fragment,{children:[c.jsx(be,{type:"button",variant:"outline",size:"sm",disabled:y,onClick:()=>{var R;return(R=o.current)==null?void 0:R.click()},children:y?"Uploading…":"Upload favicon"}),n.hasFavicon?c.jsx(be,{type:"button",variant:"outline",size:"sm",disabled:y,onClick:()=>void E(),children:"Remove"}):null]}):c.jsx("span",{className:"text-xs text-muted-foreground",children:"View only"})]})]}),e?c.jsxs("div",{className:"flex flex-wrap gap-2",children:[c.jsx(be,{type:"button",size:"sm",disabled:h||!A,onClick:()=>void C(),children:h?"Saving…":"Save titles"}),c.jsx(be,{type:"button",variant:"outline",size:"sm",disabled:h||y,onClick:()=>void k(),children:"Reset branding"})]}):null,x?c.jsx("p",{className:"text-xs text-muted-foreground",children:x}):null]})}function oB(){const{hasPermission:e}=Ft(),n=e("settings.update"),[a,o]=f.useState(null),[l,i]=f.useState(!0),[d,m]=f.useState(!1),[h,p]=f.useState(""),[y,v]=f.useState(""),[x,S]=f.useState(()=>v5()??$l),[j,C]=f.useState(""),N=f.useCallback(async()=>{i(!0),p("");try{const k=await ke.checkForUpdates();k.data&&o(k.data)}catch(k){p(k instanceof Error?k.message:"Could not check for updates")}finally{i(!1)}},[]);f.useEffect(()=>{N()},[N]);async function E(){if(a!=null&&a.updateAvailable){m(!0),p(""),v("");try{const k=await ke.runUpdate(a.latest);v(k.message||"Update installed. Restart your server (stop and run npm start again) to finish applying changes."),await N()}catch(k){p(k instanceof Error?k.message:"Update failed")}finally{m(!1)}}}return c.jsxs("div",{className:"space-y-6",children:[c.jsxs("div",{children:[c.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Settings"}),c.jsx("p",{className:"text-muted-foreground",children:"Application updates and maintenance — config files are edited under each module in the sidebar."})]}),c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{children:[c.jsx(ot,{className:"text-lg",children:"Dashboard appearance"}),c.jsx(Nt,{children:"Customise branding for all users, and pick an accent colour for this browser only."})]}),c.jsxs(qe,{className:"space-y-4",children:[c.jsx(aB,{canEdit:n}),c.jsxs("div",{className:"border-t border-border pt-4",children:[c.jsx("p",{className:"mb-3 text-sm font-medium",children:"Accent colour"}),c.jsx("p",{className:"mb-4 text-xs text-muted-foreground",children:"Buttons, links, and highlights — saved in this browser only."}),c.jsxs("div",{className:"flex flex-wrap items-end gap-4",children:[c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:"accent-colour",children:"Accent colour"}),c.jsxs("div",{className:"flex items-center gap-2",children:[c.jsx(cg,{value:x,onChange:k=>{S(k),Yx(k),C("Accent updated.")}}),c.jsx(rt,{id:"accent-colour",value:x,onChange:k=>S(k.target.value),onBlur:()=>{const k=lr(x,$l);S(k),Yx(k),C("Accent updated.")},className:"w-32 border-border bg-secondary/30 font-mono uppercase",maxLength:7})]})]}),c.jsx(be,{type:"button",variant:"outline",onClick:()=>{tB(),S($l),C("Reset to default purple.")},children:"Reset to default"})]}),c.jsxs("div",{className:"flex flex-wrap gap-2 text-sm",children:[c.jsx("span",{className:"rounded-md bg-primary px-3 py-1.5 font-medium text-primary-foreground",children:"Primary button"}),c.jsx("span",{className:"rounded-md bg-primary/15 px-3 py-1.5 text-primary",children:"Highlight"}),c.jsx("span",{className:"rounded-md bg-accent px-3 py-1.5 text-accent-foreground",children:"Accent surface"})]}),j?c.jsx("p",{className:"text-xs text-muted-foreground",children:j}):null]})]})]}),c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{children:[c.jsx(ot,{className:"text-lg",children:"Software updates"}),c.jsxs(Nt,{children:["Checks"," ",c.jsx("a",{href:"https://github.com/C-h-a-r/SupportBot-Dashboard",target:"_blank",rel:"noreferrer",className:"text-primary underline-offset-4 hover:underline",children:"SupportBot-Dashboard"})," ","on the release branch."]})]}),c.jsxs(qe,{className:"space-y-4",children:[l?c.jsx(Fe,{className:"h-24 w-full"}):a?c.jsxs("div",{className:"space-y-3 rounded-lg border border-border bg-secondary/20 p-4",children:[c.jsxs("div",{className:"flex flex-wrap gap-x-6 gap-y-2 text-sm",children:[c.jsxs("p",{children:[c.jsx("span",{className:"text-muted-foreground",children:"Installed: "}),c.jsxs("span",{className:"font-mono font-medium",children:["v",a.current]})]}),c.jsxs("p",{children:[c.jsx("span",{className:"text-muted-foreground",children:"Latest: "}),c.jsxs("span",{className:"font-mono font-medium",children:["v",a.latest]})]})]}),a.updateAvailable?c.jsx("p",{className:"text-sm text-amber-500",children:"A newer version is available. Update downloads bot files while keeping your Configs and Data."}):c.jsx("p",{className:"text-sm text-emerald-500",children:"You are on the latest release."})]}):null,h?c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:h})}):null,y?c.jsx(Ue,{children:c.jsx(He,{children:y})}):null,c.jsxs("div",{className:"flex flex-wrap gap-2",children:[c.jsxs(be,{type:"button",variant:"outline",onClick:N,disabled:l||d,children:[c.jsx(ye,{icon:Jl,size:16,className:"mr-2"}),"Check again"]}),a!=null&&a.updateAvailable&&n?c.jsxs(be,{type:"button",onClick:E,disabled:d,children:[d?c.jsx(ye,{icon:w0,size:16,className:"mr-2 animate-spin"}):c.jsx(ye,{icon:Ru,size:16,className:"mr-2"}),d?"Installing…":"Update now"]}):null,a!=null&&a.updateAvailable&&!n?c.jsx("p",{className:"text-xs text-muted-foreground",children:"You can check for updates but cannot install them with your role."}):null]})]})]})]})}function pt({label:e,value:n,mono:a=!1}){return c.jsxs("div",{className:"flex flex-col gap-1 border-b border-border py-3 last:border-0 sm:flex-row sm:items-center sm:justify-between",children:[c.jsx("dt",{className:"text-sm text-muted-foreground",children:e}),c.jsx("dd",{className:`text-sm font-medium text-foreground ${a?"font-mono text-xs sm:text-sm":""}`,children:n})]})}const sB={ok:"Healthy",missing_config:"Guild ID not set",not_in_guild:"Not in configured server",extra_guilds:"Extra servers joined",offline:"Bot offline"};function lB(e){return e==="ok"?"text-emerald-500":e==="offline"?"text-destructive":"text-amber-500"}function iB(){var S;const{stats:e,loading:n,error:a,refresh:o}=Du(),[l,i]=f.useState(null),[d,m]=f.useState(null),[h,p]=f.useState(!1),y=f.useCallback(async()=>{const[j,C]=await Promise.all([ke.getGuildStatus().catch(()=>null),ke.health().catch(()=>null)]);j!=null&&j.data&&i(j.data),C!=null&&C.success&&m({dashboard:C.dashboard,botReady:C.botReady,oauthEnabled:C.oauthEnabled,setupComplete:C.setupComplete})},[]);f.useEffect(()=>{y()},[y]);async function v(){p(!0);try{await Promise.all([o(),y()])}finally{p(!1)}}if(n&&!e)return c.jsxs("div",{className:"space-y-6",children:[c.jsx(Fe,{className:"h-10 w-64"}),c.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[c.jsx(Fe,{className:"h-56 rounded-2xl"}),c.jsx(Fe,{className:"h-56 rounded-2xl"})]})]});if(a||!e)return c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:a||"Could not load system details."})});const x=e.bot.ping<200;return c.jsxs("div",{className:"space-y-6",children:[c.jsxs("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between",children:[c.jsxs("div",{className:"space-y-2",children:[c.jsx(be,{asChild:!0,variant:"ghost",size:"sm",className:"-ml-2 h-8 px-2 text-muted-foreground",children:c.jsxs(kt,{to:"/",children:[c.jsx(ye,{icon:b0,size:16,className:"mr-1.5"}),"Back to dashboard"]})}),c.jsxs("div",{children:[c.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"System details"}),c.jsx("p",{className:"text-muted-foreground",children:"Live bot, host, and dashboard status — refreshed every 30 seconds."})]})]}),c.jsxs(be,{type:"button",variant:"outline",disabled:h,onClick:()=>void v(),children:[c.jsx(ye,{icon:Jl,size:16,className:"mr-2"}),h?"Refreshing…":"Refresh now"]})]}),c.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{children:[c.jsx(ot,{className:"text-lg",children:"Discord bot"}),c.jsx(Nt,{children:"Connection and identity"})]}),c.jsxs(qe,{children:[c.jsxs("div",{className:"mb-4 flex items-center gap-3",children:[c.jsxs(gs,{className:"size-12",children:[c.jsx(vs,{src:e.bot.avatar,alt:e.bot.username}),c.jsx(bs,{children:"SB"})]}),c.jsxs("div",{children:[c.jsx("p",{className:"font-semibold",children:e.bot.username}),c.jsx("p",{className:"font-mono text-xs text-muted-foreground",children:e.bot.id})]})]}),c.jsxs("dl",{children:[c.jsx(pt,{label:"Version",value:`v${e.bot.version}`,mono:!0}),c.jsx(pt,{label:"Gateway latency",value:c.jsxs("span",{className:x?"text-emerald-500":"text-amber-500",children:[e.bot.ping," ms"]})}),c.jsx(pt,{label:"Process uptime",value:j0(e.bot.uptime)}),c.jsx(pt,{label:"Connected servers",value:e.servers.toLocaleString()}),c.jsx(pt,{label:"Members tracked",value:e.users.toLocaleString()}),e.bot.inviteUrl?c.jsx(pt,{label:"Invite link",value:c.jsx("a",{href:e.bot.inviteUrl,target:"_blank",rel:"noreferrer",className:"text-primary underline-offset-4 hover:underline",children:"Open in Discord"})}):null]})]})]}),c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{children:[c.jsx(ot,{className:"text-lg",children:"Host machine"}),c.jsx(Nt,{children:"Server resources running this instance"})]}),c.jsx(qe,{children:c.jsxs("dl",{children:[c.jsx(pt,{label:"Memory used",value:`${e.hosting.ram_used} / ${e.hosting.ram_total}`}),c.jsx(pt,{label:"Memory usage",value:c.jsxs("span",{className:e.hosting.ram_percent>85?"text-amber-500":"text-foreground",children:[e.hosting.ram_percent,"%"]})}),c.jsx(pt,{label:"CPU load (1 min avg)",value:e.hosting.cpu_load,mono:!0}),c.jsx(pt,{label:"Host uptime",value:e.hosting.uptime})]})})]}),c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{children:[c.jsx(ot,{className:"text-lg",children:"Tickets"}),c.jsx(Nt,{children:"Database snapshot"})]}),c.jsx(qe,{children:c.jsxs("dl",{children:[c.jsx(pt,{label:"Total tickets",value:e.tickets.total}),c.jsx(pt,{label:"Open",value:c.jsx("span",{className:"text-primary",children:e.tickets.open})}),c.jsx(pt,{label:"Closed",value:e.tickets.closed}),c.jsx(pt,{label:"Transcripts",value:c.jsx(kt,{to:"/transcripts",className:"text-primary underline-offset-4 hover:underline",children:"Browse archive"})})]})})]}),c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{children:[c.jsx(ot,{className:"text-lg",children:"Guild health"}),c.jsx(Nt,{children:"Configured server and membership"})]}),c.jsx(qe,{children:l?c.jsxs("dl",{children:[c.jsx(pt,{label:"Status",value:c.jsx("span",{className:lB(l.status),children:sB[l.status]})}),c.jsx(pt,{label:"Configured guild ID",value:l.configuredGuildId||"Not set",mono:!0}),l.configuredGuild?c.jsx(pt,{label:"Configured server",value:`${l.configuredGuild.name} (${((S=l.configuredGuild.memberCount)==null?void 0:S.toLocaleString())??"?"} members)`}):null,l.message?c.jsx("div",{className:"mt-3 rounded-lg border border-border bg-secondary/30 px-3 py-2 text-sm text-muted-foreground",children:l.message}):null,l.extraGuilds.length>0?c.jsxs("div",{className:"mt-3 space-y-2",children:[c.jsx("p",{className:"text-xs font-medium uppercase tracking-wide text-muted-foreground",children:"Extra servers"}),c.jsx("ul",{className:"space-y-1 text-sm",children:l.extraGuilds.map(j=>c.jsxs("li",{className:"font-mono text-xs",children:[j.name," · ",j.id]},j.id))})]}):null]}):c.jsx(Fe,{className:"h-24 w-full"})})]})]}),c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{children:[c.jsx(ot,{className:"text-lg",children:"Dashboard services"}),c.jsx(Nt,{children:"API and authentication"})]}),c.jsx(qe,{children:d?c.jsxs("dl",{className:"max-w-xl",children:[c.jsx(pt,{label:"Dashboard UI",value:d.dashboard?"Available":"Missing build"}),c.jsx(pt,{label:"Bot connection",value:d.botReady?"Online":"Starting or offline"}),c.jsx(pt,{label:"Discord OAuth",value:d.oauthEnabled?"Configured":"Not configured"}),c.jsx(pt,{label:"Initial setup",value:d.setupComplete?"Complete":"Incomplete"}),c.jsx(pt,{label:"Software updates",value:c.jsx(kt,{to:"/settings",className:"text-primary underline-offset-4 hover:underline",children:"Open settings"})}),c.jsx(pt,{label:"Logs",value:c.jsx(kt,{to:"/logs",className:"text-primary underline-offset-4 hover:underline",children:"View log files"})})]}):c.jsx(Fe,{className:"h-32 w-full max-w-xl"})})]}),e.modules?c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{children:[c.jsx(ot,{className:"text-lg",children:"Module setup status"}),c.jsx(Nt,{children:"Which features are configured and active"})]}),c.jsx(qe,{children:c.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:ls.map(j=>{const C=eh(j.id,e.modules);return c.jsxs(kt,{to:j.href,className:"flex items-start justify-between gap-3 rounded-xl border border-border bg-secondary/20 px-4 py-3 transition-colors hover:bg-secondary/40",children:[c.jsxs("div",{className:"min-w-0",children:[c.jsx("p",{className:"text-sm font-medium",children:j.title}),c.jsx("p",{className:"mt-0.5 truncate text-xs text-muted-foreground",children:C.subtitle})]}),c.jsx("span",{className:"shrink-0 rounded-full bg-secondary px-2 py-0.5 text-[10px] font-semibold uppercase tracking-wide text-muted-foreground",children:h5[C.status]})]},j.id)})})})]}):null]})}function cB(e){if(!e)return"—";const n=new Date(e);return Number.isNaN(n.getTime())?e:n.toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit",second:"2-digit"})}const uB=[{id:"all",label:"All"},{id:"Output",label:"Output"},{id:"Warn",label:"Warn"},{id:"Error",label:"Error"}],dB=["Output","Warn","Error"],fB={Output:"text-foreground/90",Warn:"text-amber-400",Error:"text-rose-400"},mB={Output:"bg-muted text-muted-foreground",Warn:"bg-amber-500/15 text-amber-400",Error:"bg-rose-500/15 text-rose-400"},Wx=2e3,pB=2e3;function th(e,n){return`${e.type}-${e.timestamp??"na"}-${n}-${e.message.slice(0,32)}`}function hB(e,n,a){const o=a?[]:e,l=new Set(o.map((m,h)=>th(m,h))),i=[];for(let m=0;mWx?d.slice(d.length-Wx):d}function gB(){const[e,n]=f.useState([]),[a,o]=f.useState(!0),[l,i]=f.useState(""),[d,m]=f.useState(!1),[h,p]=f.useState(!0),[y,v]=f.useState("all"),[x,S]=f.useState(""),[j,C]=f.useState(!0),[N,E]=f.useState(""),k=f.useRef(null),A=f.useRef(null),R=f.useRef(d);R.current=d;const L=f.useMemo(()=>y==="all"?dB:[y],[y]),z=f.useCallback(async q=>{var fe,de;const Z=await ke.getLogs({types:L,cursor:q?void 0:k.current??void 0,tail:q?500:0}),Q=((fe=Z.data)==null?void 0:fe.entries)??[];return k.current=((de=Z.data)==null?void 0:de.cursor)??{},n(ce=>hB(ce,Q,q)),Q.length},[L]),B=f.useCallback(async()=>{var q;o(!0),i(""),k.current=null;try{const fe=(((q=(await ke.getLogsMeta()).data)==null?void 0:q.files)??[]).filter(de=>de.file).map(de=>`${de.type}: ${de.file}`).join(" · ");E(fe||"No log files yet — output appears when the bot runs."),await z(!0),C(!0)}catch(Z){i(Z instanceof Error?Z.message:"Failed to load logs"),C(!1)}finally{o(!1)}},[z]);f.useEffect(()=>{B()},[B]),f.useEffect(()=>{if(d||a)return;const q=window.setInterval(async()=>{if(!R.current)try{await z(!1),C(!0),i("")}catch(Z){C(!1),i(Z instanceof Error?Z.message:"Live update failed")}},pB);return()=>window.clearInterval(q)},[d,a,z]),f.useEffect(()=>{if(!h||d)return;const q=A.current;q&&(q.scrollTop=q.scrollHeight)},[e,h,d]);const U=f.useMemo(()=>e.filter(q=>{var Q;if(y!=="all"&&q.type!==y)return!1;if(!x.trim())return!0;const Z=x.toLowerCase();return q.message.toLowerCase().includes(Z)||(((Q=q.timestamp)==null?void 0:Q.toLowerCase().includes(Z))??!1)}),[e,y,x]);return c.jsxs("div",{className:"flex h-[calc(100svh-8rem)] min-h-[480px] flex-col gap-4",children:[c.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-end sm:justify-between",children:[c.jsxs("div",{children:[c.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Logs"}),c.jsx("p",{className:"text-muted-foreground",children:"Live bot output — updates every 2 seconds"}),N?c.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:N}):null]}),c.jsxs("div",{className:"flex items-center gap-2",children:[c.jsx("span",{className:ie("size-2 rounded-full",j&&!d?"animate-pulse bg-emerald-500":"bg-muted-foreground")}),c.jsx("span",{className:"text-xs text-muted-foreground",children:d?"Paused":j?"Live":"Disconnected"})]})]}),l?c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:l})}):null,c.jsxs(We,{className:"flex min-h-0 flex-1 flex-col border-border bg-card",children:[c.jsxs(at,{className:"shrink-0 space-y-4 border-b border-border pb-4",children:[c.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[c.jsxs(ot,{className:"text-base font-medium",children:["Console",a?null:c.jsxs("span",{className:"ml-2 text-xs font-normal text-muted-foreground",children:[U.length," line",U.length===1?"":"s"]})]}),c.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[c.jsxs("div",{className:"flex items-center gap-2 rounded-lg border border-border px-2 py-1",children:[c.jsx(Dn,{id:"auto-scroll",checked:h,onCheckedChange:p}),c.jsx(Ze,{htmlFor:"auto-scroll",className:"text-xs font-normal",children:"Auto-scroll"})]}),c.jsxs(be,{type:"button",variant:"outline",size:"sm",onClick:()=>m(q=>!q),children:[c.jsx(ye,{icon:d?A4:R4,size:16,className:"mr-1.5"}),d?"Resume":"Pause"]}),c.jsxs(be,{type:"button",variant:"outline",size:"sm",onClick:()=>{n([]),B()},disabled:a,children:[c.jsx(ye,{icon:Jl,size:16,className:"mr-1.5"}),"Refresh"]})]})]}),c.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center",children:[c.jsx("div",{className:"flex flex-wrap gap-1 rounded-xl bg-secondary/50 p-1",children:uB.map(q=>c.jsx(be,{type:"button",variant:y===q.id?"secondary":"ghost",size:"sm",className:"h-8 rounded-lg text-xs",onClick:()=>v(q.id),children:q.label},q.id))}),c.jsxs("div",{className:"relative flex-1 sm:max-w-xs",children:[c.jsx(ye,{icon:_u,size:16,className:"absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground"}),c.jsx(rt,{placeholder:"Filter lines…",value:x,onChange:q=>S(q.target.value),className:"h-9 pl-9"})]})]})]}),c.jsx(qe,{className:"min-h-0 flex-1 p-0",children:a?c.jsx("div",{className:"space-y-2 p-4",children:Array.from({length:8}).map((q,Z)=>c.jsx(Fe,{className:"h-4 w-full"},Z))}):c.jsx("div",{ref:A,className:"h-full max-h-[calc(100svh-18rem)] overflow-y-auto bg-[#0d0d12] p-4 font-mono text-[13px] leading-relaxed",children:U.length===0?c.jsx("p",{className:"text-muted-foreground",children:"No log lines yet. Start the bot and activity will appear here (also written to the Logs folder on disk)."}):c.jsx("ul",{className:"space-y-1",children:U.map((q,Z)=>c.jsxs("li",{className:"flex gap-2 rounded px-1 py-0.5 hover:bg-white/[0.03]",children:[c.jsx("span",{className:"shrink-0 tabular-nums text-muted-foreground",children:cB(q.timestamp)}),c.jsx("span",{className:ie("shrink-0 rounded px-1.5 py-0 text-[10px] font-semibold uppercase",mB[q.type]),children:q.type}),c.jsx("span",{className:ie("min-w-0 flex-1 whitespace-pre-wrap break-words",fB[q.type]),children:q.message||" "})]},th(q,Z)))})})})]})]})}const vB=[{title:"Colors",description:"Theme colors used across the transcript page.",fields:[{path:"Theme.Background",label:"Page background",type:"color"},{path:"Theme.Panel",label:"Panel background",type:"color"},{path:"Theme.PanelSecondary",label:"Secondary panel",type:"color"},{path:"Theme.Border",label:"Borders",type:"color"},{path:"Theme.Text",label:"Main text",type:"color"},{path:"Theme.Muted",label:"Muted text",type:"color"},{path:"Theme.Accent",label:"Accent",type:"color"},{path:"Theme.Link",label:"Links",type:"color"},{path:"Theme.AttachmentLink",label:"Attachment links",type:"color"},{path:"Theme.CodeBackground",label:"Code blocks",type:"color"}]},{title:"Typography",fields:[{path:"Typography.FontFamily",label:"Font family",type:"googleFont",description:"Google Fonts are loaded automatically in saved transcripts."}]},{title:"Header",fields:[{path:"Header.Title",label:"Title",type:"text"},{path:"Header.Subtitle",label:"Subtitle",type:"textarea",description:"Placeholders: {{ticketName}} {{ticketId}} {{messageCount}} {{reason}}. Use **text** for bold."},{path:"Header.Badge",label:"Badge label",type:"text"},{path:"Header.ShowMetaCards",label:"Show info cards",type:"boolean"}]},{title:"Info card labels",fields:[{path:"Meta.ChannelLabel",label:"Channel label",type:"text"},{path:"Meta.TicketIdLabel",label:"Ticket ID label",type:"text"},{path:"Meta.MessageCountLabel",label:"Message count label",type:"text"},{path:"Meta.CloseReasonLabel",label:"Close reason label",type:"text"},{path:"Meta.DefaultCloseReason",label:"Default close reason",type:"text"}]},{title:"Messages section",fields:[{path:"Messages.SectionTitle",label:"Section heading",type:"text"},{path:"Messages.EmptyState",label:"Empty state text",type:"text"}]},{title:"Advanced CSS",description:"Optional extra CSS appended to the transcript stylesheet.",fields:[{path:"Advanced.CustomCss",label:"Custom CSS",type:"textarea",description:"Example: .badge { font-size: 1rem; }"}]}],bB=450;function yB(e,n){return n&&e!=="viewer"}function xB(){const{user:e,hasPermission:n}=Ft(),a=!yB(e==null?void 0:e.role,n("transcripts")),[o,l]=f.useState(null),[i,d]=f.useState(null),[m,h]=f.useState(!0),[p,y]=f.useState(!1),[v,x]=f.useState(""),[S,j]=f.useState(""),[C,N]=f.useState(""),[E,k]=f.useState(!1),A=f.useRef(null),R=f.useCallback(async()=>{var q;h(!0),x(""),j("");try{const Q=(await ke.getTranscriptTemplate()).data??null;if(Q){const fe={...Q,Typography:{...Q.Typography,FontFamily:Mj((q=Q.Typography)==null?void 0:q.FontFamily)}};l(fe),d(structuredClone(fe))}}catch(Z){x(Z instanceof Error?Z.message:"Failed to load template")}finally{h(!1)}},[]);f.useEffect(()=>{R()},[R]);const L=f.useCallback(async q=>{k(!0);try{const Z=await ke.previewTranscriptTemplate(q);N(Z)}catch{N("

Preview failed to load.

")}finally{k(!1)}},[]);f.useEffect(()=>{if(o)return A.current&&clearTimeout(A.current),A.current=setTimeout(()=>{L(o)},bB),()=>{A.current&&clearTimeout(A.current)}},[o,L]);function z(q,Z){l(Q=>Q&&Xl(Q,q,Z))}async function B(){if(!(a||!o)){y(!0),x(""),j("");try{const q=await ke.saveTranscriptTemplate(o);j(q.message||"Saved."),d(structuredClone(o))}catch(q){x(q instanceof Error?q.message:"Save failed")}finally{y(!1)}}}const U=o&&i&&JSON.stringify(o)!==JSON.stringify(i);return m?c.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[c.jsx(Fe,{className:"h-96 rounded-xl"}),c.jsx(Fe,{className:"h-96 rounded-xl"})]}):o?c.jsxs("div",{className:"space-y-4",children:[c.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[c.jsx("p",{className:"text-sm text-muted-foreground",children:"Customize how new ticket transcripts look. Existing saved transcripts are not changed."}),c.jsxs("div",{className:"flex items-center gap-2",children:[U?c.jsx("span",{className:"text-xs text-amber-500",children:"Unsaved changes"}):null,a?c.jsx("span",{className:"text-xs text-muted-foreground",children:"View only"}):c.jsxs(be,{size:"sm",onClick:B,disabled:p||!U,children:[c.jsx(ye,{icon:Au,size:16,className:"mr-1.5"}),p?"Saving…":"Save appearance"]})]})]}),v?c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:v})}):null,S?c.jsx(Ue,{className:"border-primary/30 bg-primary/10 text-primary",children:c.jsx(He,{children:S})}):null,c.jsxs("div",{className:"grid min-h-0 gap-4 xl:grid-cols-[minmax(320px,420px)_1fr]",children:[c.jsx(SB,{data:o,readOnly:a,onPatch:z}),c.jsxs(We,{className:"flex min-h-[520px] flex-col overflow-hidden border-border bg-card",children:[c.jsxs(at,{className:"pb-2",children:[c.jsx(ot,{className:"text-base",children:"Live preview"}),c.jsxs(Nt,{children:["Sample ticket with your current settings",E?" · updating…":""]})]}),c.jsx(qe,{className:"min-h-0 flex-1 p-4 pt-0",children:c.jsx("iframe",{title:"Transcript template preview",srcDoc:C,className:ie("h-[min(640px,calc(100svh-14rem))] w-full rounded-lg border border-border bg-background",E&&"opacity-60"),sandbox:"allow-same-origin"})})]})]})]}):c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:v||"Failed to load template"})})}function SB({data:e,readOnly:n,onPatch:a}){return c.jsx("div",{className:"max-h-[min(720px,calc(100svh-12rem))] space-y-4 overflow-y-auto pr-1",children:vB.map(o=>c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{className:"pb-3",children:[c.jsx(ot,{className:"text-base",children:o.title}),o.description?c.jsx(Nt,{children:o.description}):null]}),c.jsx(qe,{className:"grid gap-4 sm:grid-cols-2",children:o.fields.map(l=>c.jsx("div",{className:l.type==="textarea"?"sm:col-span-2":"",children:c.jsx(yg,{field:l,value:ao(e,l.path),readOnly:n,onChange:i=>a(l.path,i)})},l.path))})]},o.title))})}function wB(e,n){return n&&e!=="viewer"}function CB(){const{user:e,hasPermission:n}=Ft(),a=!wB(e==null?void 0:e.role,n("transcripts")),[o,l]=f.useState(null),[i,d]=f.useState(!0),[m,h]=f.useState(!1),[p,y]=f.useState(!1),[v,x]=f.useState(""),[S,j]=f.useState(""),C=f.useCallback(async()=>{var k,A,R;d(!0),x(""),j("");try{const z=(await ke.getTranscriptSettings()).data;z&&l({autoDelete:{enabled:!!((k=z.autoDelete)!=null&&k.enabled),afterDays:((A=z.autoDelete)==null?void 0:A.afterDays)??30},publicAccess:{enabled:!!((R=z.publicAccess)!=null&&R.enabled)}})}catch(L){x(L instanceof Error?L.message:"Failed to load settings")}finally{d(!1)}},[]);f.useEffect(()=>{C()},[C]);async function N(){if(!(!o||a)){h(!0),x(""),j("");try{const k=await ke.updateTranscriptSettings(o);k.data&&l({autoDelete:{enabled:k.data.autoDelete.enabled,afterDays:k.data.autoDelete.afterDays},publicAccess:{enabled:k.data.publicAccess.enabled}}),j(k.message??"Settings saved.")}catch(k){x(k instanceof Error?k.message:"Failed to save settings")}finally{h(!1)}}}async function E(){var k,A;if(!a){y(!0),x(""),j("");try{const R=await ke.purgeTranscripts();j(R.message??((k=R.data)!=null&&k.skipped?"Auto-delete is disabled.":`Removed ${((A=R.data)==null?void 0:A.deleted)??0} transcript(s).`))}catch(R){x(R instanceof Error?R.message:"Purge failed")}finally{y(!1)}}}return i?c.jsxs("div",{className:"space-y-4",children:[c.jsx(Fe,{className:"h-40 w-full rounded-xl"}),c.jsx(Fe,{className:"h-40 w-full rounded-xl"})]}):o?c.jsxs("div",{className:"mx-auto max-w-2xl space-y-4",children:[a?c.jsx(Ue,{children:c.jsx(He,{children:"You have view-only access. An admin or editor can change these settings."})}):null,v?c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:v})}):null,S?c.jsx(Ue,{children:c.jsx(He,{children:S})}):null,c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{children:[c.jsx(ot,{className:"text-base",children:"Auto-delete"}),c.jsx(Nt,{children:"Remove transcript files automatically after they reach a certain age. The server checks hourly and whenever you open the library."})]}),c.jsxs(qe,{className:"space-y-4",children:[c.jsxs("label",{className:"flex cursor-pointer items-start gap-3",children:[c.jsx("input",{type:"checkbox",className:"mt-1 size-4 rounded border-border accent-primary",checked:o.autoDelete.enabled,disabled:a,onChange:k=>l(A=>A&&{...A,autoDelete:{...A.autoDelete,enabled:k.target.checked}})}),c.jsxs("span",{className:"text-sm",children:[c.jsx("span",{className:"font-medium",children:"Enable auto-delete"}),c.jsx("span",{className:"mt-0.5 block text-muted-foreground",children:"Deletes HTML files in Data/Transcripts based on last modified time."})]})]}),c.jsxs("div",{className:"space-y-2",children:[c.jsx("label",{className:"text-sm font-medium",htmlFor:"transcript-after-days",children:"Delete after (days)"}),c.jsx(rt,{id:"transcript-after-days",type:"number",min:1,max:3650,disabled:a||!o.autoDelete.enabled,value:o.autoDelete.afterDays,onChange:k=>l(A=>A&&{...A,autoDelete:{...A.autoDelete,afterDays:Math.min(3650,Math.max(1,parseInt(k.target.value,10)||1))}}),className:"max-w-[8rem]"})]}),c.jsxs(be,{type:"button",variant:"outline",size:"sm",disabled:a||p,onClick:()=>void E(),children:[c.jsx(ye,{icon:Jl,size:16,className:ie(p&&"animate-spin")}),"Run cleanup now"]})]})]}),c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{children:[c.jsx(ot,{className:"text-base",children:"Public transcripts"}),c.jsxs(Nt,{children:["When enabled, anyone with the link can view a transcript at"," ",c.jsx("code",{className:"rounded bg-muted px-1 py-0.5 text-xs",children:typeof window<"u"?`${window.location.origin}/transcripts/:id`:"/transcripts/:id"})," ","without signing in. Channel IDs are numeric but not secret—only enable if you are comfortable sharing links."]})]}),c.jsx(qe,{children:c.jsxs("label",{className:"flex cursor-pointer items-start gap-3",children:[c.jsx("input",{type:"checkbox",className:"mt-1 size-4 rounded border-border accent-primary",checked:o.publicAccess.enabled,disabled:a,onChange:k=>l(A=>A&&{...A,publicAccess:{enabled:k.target.checked}})}),c.jsxs("span",{className:"text-sm",children:[c.jsx("span",{className:"font-medium",children:"Allow public transcript URLs"}),c.jsx("span",{className:"mt-0.5 block text-muted-foreground",children:"Dashboard preview and download still require login."})]})]})})]}),a?null:c.jsxs(be,{type:"button",disabled:m,onClick:()=>void N(),children:[c.jsx(ye,{icon:Au,size:16}),m?"Saving…":"Save settings"]})]}):c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:"Could not load transcript settings."})})}function jB(e,n){return n&&e!=="viewer"}function qx(e){return e==null?"":e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function Kx(e){const n=new Date(e);return Number.isNaN(n.getTime())?e:n.toLocaleString(void 0,{dateStyle:"medium",timeStyle:"short"})}function EB(){var H;const{user:e,hasPermission:n}=Ft(),a=jB(e==null?void 0:e.role,n("transcripts")),[o,l]=f.useState("browse"),[i,d]=f.useState([]),[m,h]=f.useState(null),[p,y]=f.useState(!0),[v,x]=f.useState(""),[S,j]=f.useState(""),[C,N]=f.useState(""),[E,k]=f.useState(0),[A,R]=f.useState(!1),[L,z]=f.useState(!1),[B,U]=f.useState(!1),[q,Z]=f.useState(!1),Q=f.useCallback(async()=>{y(!0),j("");try{const V=(await ke.listTranscripts()).data??[];d(V),h(ne=>{var J;return ne&&V.some(me=>me.id===ne)?ne:((J=V[0])==null?void 0:J.id)??null})}catch(I){j(I instanceof Error?I.message:"Failed to load transcripts")}finally{y(!1)}},[]);f.useEffect(()=>{Q()},[Q]),f.useEffect(()=>{o==="browse"&&ke.getTranscriptSettings().then(I=>{var V,ne;U(!!((ne=(V=I.data)==null?void 0:V.publicAccess)!=null&&ne.enabled))}).catch(()=>U(!1))},[o]);const fe=f.useMemo(()=>{if(!C.trim())return i;const I=C.toLowerCase();return i.filter(V=>V.id.includes(I)||V.filename.toLowerCase().includes(I)||V.ticketName&&V.ticketName.toLowerCase().includes(I))},[i,C]),de=f.useMemo(()=>i.find(I=>I.id===m)??null,[i,m]),ce=m?`/api/system/transcripts/${encodeURIComponent(m)}/view`:null,he=m?`/api/system/transcripts/${encodeURIComponent(m)}/download`:null,M=m&&B?`${window.location.origin}/transcripts/${encodeURIComponent(m)}`:null;function K(I){x(""),h(I),k(V=>V+1)}function re(){ce&&window.open(ce,"_blank","noopener,noreferrer")}function oe(){M&&window.open(M,"_blank","noopener,noreferrer")}async function ee(){if(M)try{await navigator.clipboard.writeText(M),Z(!0),window.setTimeout(()=>Z(!1),2e3)}catch{x("Could not copy link to clipboard.")}}async function _(){var V;if(!m||!a)return;const I=((V=de==null?void 0:de.ticketName)==null?void 0:V.trim())||`channel ${m}`;if(window.confirm(`Delete the transcript for ${I}? This cannot be undone.`)){z(!0),x("");try{await ke.deleteTranscript(m),await Q()}catch(ne){x(ne instanceof Error?ne.message:"Failed to delete transcript")}finally{z(!1)}}}async function O(){if(!(!he||!de)){R(!0),x("");try{const I=await fetch(he,{credentials:"include"});if(!I.ok){const me=await I.json().catch(()=>({}));throw new Error(me.error||`Download failed (${I.status})`)}const V=await I.blob(),ne=URL.createObjectURL(V),J=document.createElement("a");J.href=ne,J.download=de.filename,J.click(),URL.revokeObjectURL(ne)}catch(I){x(I instanceof Error?I.message:"Failed to download transcript")}finally{R(!1)}}}return c.jsxs("div",{className:"flex min-h-0 flex-1 flex-col gap-4",children:[c.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[c.jsxs("div",{children:[c.jsx("h1",{className:"text-2xl font-semibold tracking-tight",children:"Transcripts"}),c.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:"Browse saved transcripts or customize how new ones look when tickets close."})]}),c.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[c.jsxs("div",{className:"flex rounded-lg border border-border p-0.5",children:[c.jsx(be,{type:"button",variant:o==="browse"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>l("browse"),children:"Library"}),c.jsx(be,{type:"button",variant:o==="appearance"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>l("appearance"),children:"Appearance"}),c.jsx(be,{type:"button",variant:o==="settings"?"secondary":"ghost",size:"sm",className:"h-8",onClick:()=>l("settings"),children:"Settings"})]}),o==="browse"?c.jsxs(be,{variant:"outline",size:"sm",onClick:()=>Q(),disabled:p,children:[c.jsx(ye,{icon:Jl,size:16,className:ie(p&&"animate-spin")}),"Refresh"]}):null]})]}),o==="appearance"?c.jsx(xB,{}):o==="settings"?c.jsx(CB,{}):c.jsxs(c.Fragment,{children:[S?c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:S})}):null,c.jsxs("div",{className:"grid min-h-0 flex-1 gap-4 lg:grid-cols-[minmax(240px,320px)_1fr]",children:[c.jsxs(We,{className:"flex min-h-[420px] flex-col border-border bg-card",children:[c.jsxs(at,{className:"space-y-3 pb-3",children:[c.jsxs(ot,{className:"text-base font-medium",children:["Saved transcripts",!p&&i.length>0?c.jsxs("span",{className:"ml-2 font-normal text-muted-foreground",children:["(",i.length,")"]}):null]}),c.jsxs("div",{className:"relative",children:[c.jsx(ye,{icon:_u,size:16,className:"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground"}),c.jsx(rt,{placeholder:"Search by ticket name or channel ID…",value:C,onChange:I=>N(I.target.value),className:"pl-9"})]})]}),c.jsx(qe,{className:"min-h-0 flex-1 p-0 pb-4",children:c.jsx(hi,{className:"h-[min(520px,calc(100svh-16rem))] px-4",children:p?c.jsx("div",{className:"space-y-2",children:Array.from({length:6}).map((I,V)=>c.jsx(Fe,{className:"h-16 w-full rounded-lg"},V))}):fe.length===0?c.jsxs("div",{className:"flex flex-col items-center justify-center gap-2 py-12 text-center text-sm text-muted-foreground",children:[c.jsx(ye,{icon:Ul,size:32,className:"opacity-40"}),c.jsx("p",{children:i.length===0?"No transcripts yet. They appear when tickets are closed.":"No transcripts match your search."})]}):c.jsx("ul",{className:"space-y-1.5",children:fe.map(I=>{var J;const V=I.id===m,ne=((J=I.ticketName)==null?void 0:J.trim())||`Channel ${I.id}`;return c.jsx("li",{children:c.jsxs("button",{type:"button",onClick:()=>K(I.id),className:ie("w-full rounded-lg border px-3 py-2.5 text-left transition-colors",V?"border-primary/50 bg-primary/10":"border-transparent bg-secondary/30 hover:bg-secondary/50"),children:[c.jsx("p",{className:"truncate text-sm font-medium",children:ne}),c.jsxs("p",{className:"mt-0.5 text-xs text-muted-foreground",children:[Kx(I.createdAt),I.size!=null?` · ${qx(I.size)}`:""]})]})},I.id)})})})})]}),c.jsxs(We,{className:"flex min-h-[420px] flex-col overflow-hidden border-border bg-card",children:[c.jsxs(at,{className:"flex flex-row flex-wrap items-center justify-between gap-2 space-y-0 pb-3",children:[c.jsxs("div",{className:"min-w-0",children:[c.jsx(ot,{className:"truncate text-base font-medium",children:de?((H=de.ticketName)==null?void 0:H.trim())||`Channel ${de.id}`:"Preview"}),de?c.jsxs("p",{className:"mt-0.5 truncate text-xs text-muted-foreground",children:[Kx(de.createdAt),de.size!=null?` · ${qx(de.size)}`:""]}):null]}),c.jsxs("div",{className:"flex shrink-0 flex-wrap gap-2",children:[M?c.jsxs(c.Fragment,{children:[c.jsxs(be,{variant:"outline",size:"sm",onClick:()=>void ee(),children:[c.jsx(ye,{icon:x0,size:16}),q?"Copied":"Copy link"]}),c.jsxs(be,{variant:"outline",size:"sm",onClick:oe,children:[c.jsx(ye,{icon:gh,size:16}),"Public page"]})]}):null,c.jsxs(be,{variant:"outline",size:"sm",disabled:!ce,onClick:re,children:[c.jsx(ye,{icon:S4,size:16}),"Open tab"]}),c.jsxs(be,{variant:"outline",size:"sm",disabled:!he||A,onClick:()=>void O(),children:[c.jsx(ye,{icon:Ru,size:16}),A?"Saving…":"Download"]}),a?c.jsxs(be,{variant:"outline",size:"sm",disabled:!m||L,className:"text-destructive hover:text-destructive",onClick:()=>void _(),children:[c.jsx(ye,{icon:hh,size:16}),L?"Deleting…":"Delete"]}):null]})]}),c.jsxs(qe,{className:"flex min-h-0 flex-1 flex-col gap-2 p-4 pt-0",children:[v?c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:v})}):null,de&&ce?c.jsx("iframe",{title:`Transcript ${de.id}`,src:ce,className:"min-h-[min(560px,calc(100svh-18rem))] w-full flex-1 rounded-lg border border-border bg-background",sandbox:"allow-same-origin"},E):c.jsxs("div",{className:"flex flex-1 flex-col items-center justify-center gap-2 rounded-lg border border-dashed border-border py-16 text-center text-sm text-muted-foreground",children:[c.jsx(ye,{icon:Ul,size:40,className:"opacity-30"}),c.jsx("p",{children:"Select a transcript from the list to preview it here."})]})]})]})]})]})]})}const NB=["admin","moderator","editor","viewer","custom"];function kB(){return{mode:"add",id:"",username:"",globalName:"",role:"viewer",enabled:!0,permissions:Hl("viewer"),yamlOwner:!1}}function TB({permissions:e,onChange:n,disabled:a}){const o=l=>n({...e,...l});return c.jsxs("div",{className:"space-y-6",children:[c.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[[["Dashboard overview","overview"],["Logs","logs"],["Transcripts","transcripts"]].map(([l,i])=>c.jsxs("label",{className:"flex items-center justify-between gap-3 rounded-lg border border-border px-3 py-2",children:[c.jsx("span",{className:"text-sm",children:l}),c.jsx(Dn,{checked:e[i],disabled:a,onCheckedChange:d=>o({[i]:d})})]},i)),c.jsxs("label",{className:"flex items-center justify-between gap-3 rounded-lg border border-border px-3 py-2",children:[c.jsx("span",{className:"text-sm",children:"Settings — view"}),c.jsx(Dn,{checked:e.settings.view,disabled:a,onCheckedChange:l=>o({settings:{...e.settings,view:l}})})]}),c.jsxs("label",{className:"flex items-center justify-between gap-3 rounded-lg border border-border px-3 py-2",children:[c.jsx("span",{className:"text-sm",children:"Settings — install updates"}),c.jsx(Dn,{checked:e.settings.update,disabled:a,onCheckedChange:l=>o({settings:{...e.settings,update:l}})})]}),c.jsxs("label",{className:"flex items-center justify-between gap-3 rounded-lg border border-border px-3 py-2",children:[c.jsx("span",{className:"text-sm",children:"Users — view"}),c.jsx(Dn,{checked:e.users.view,disabled:a,onCheckedChange:l=>o({users:{...e.users,view:l}})})]}),c.jsxs("label",{className:"flex items-center justify-between gap-3 rounded-lg border border-border px-3 py-2",children:[c.jsx("span",{className:"text-sm",children:"Users — manage"}),c.jsx(Dn,{checked:e.users.manage,disabled:a,onCheckedChange:l=>o({users:{...e.users,manage:l}})})]})]}),c.jsxs("div",{className:"space-y-3",children:[c.jsx("p",{className:"text-sm font-medium",children:"Configuration files"}),c.jsx("div",{className:"space-y-2",children:xh.map(l=>c.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3 rounded-lg border border-border px-3 py-2",children:[c.jsx("span",{className:"text-sm",children:z4[l]}),c.jsxs("div",{className:"flex items-center gap-4",children:[c.jsxs("label",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:["View",c.jsx(Dn,{checked:e.configs[l].view,disabled:a,onCheckedChange:i=>n({...e,configs:{...e.configs,[l]:{...e.configs[l],view:i}}})})]}),c.jsxs("label",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:["Edit",c.jsx(Dn,{checked:e.configs[l].edit,disabled:a,onCheckedChange:i=>n({...e,configs:{...e.configs,[l]:{...e.configs[l],edit:i,view:i?!0:e.configs[l].view}}})})]})]})]},l))})]})]})}function RB(e){return e.permissions.users.manage?"Full + user management":e.permissions.settings.update?"Configs + settings updates":Object.values(e.permissions.configs).some(n=>n.edit)?"Can edit configs":"View only"}function AB(){const{user:e,hasPermission:n}=Ft(),a=n("users.manage"),[o,l]=f.useState([]),[i,d]=f.useState(!0),[m,h]=f.useState(""),[p,y]=f.useState(null),[v,x]=f.useState(!1),S=f.useCallback(async()=>{d(!0),h("");try{const R=await ke.listDashboardUsers();R.data&&l(R.data.users)}catch(R){h(R instanceof Error?R.message:"Failed to load users")}finally{d(!1)}},[]);f.useEffect(()=>{S()},[S]);const j=f.useMemo(()=>[...o].sort((R,L)=>R.yamlOwner!==L.yamlOwner?R.yamlOwner?-1:1:(R.username||R.id).localeCompare(L.username||L.id)),[o]);function C(){y(kB())}function N(R){y({mode:"edit",id:R.id,username:R.username||"",globalName:R.globalName||"",role:R.yamlOwner?"owner":R.role,enabled:R.enabled,permissions:R.role==="custom"?R.permissions:Hl(R.role),yamlOwner:R.yamlOwner})}function E(R){p&&y({...p,role:R,permissions:Hl(R,p.permissions)})}async function k(){if(!(!p||!a)){x(!0),h("");try{p.mode==="add"?await ke.addDashboardUser({id:p.id.trim(),role:p.role,username:p.username||void 0,globalName:p.globalName||void 0,enabled:p.enabled,permissions:p.role==="custom"?p.permissions:void 0}):await ke.updateDashboardUser(p.id,{role:p.yamlOwner?void 0:p.role,enabled:p.enabled,username:p.username||void 0,globalName:p.globalName||void 0,permissions:p.role==="custom"?p.permissions:void 0}),y(null),await S()}catch(R){h(R instanceof Error?R.message:"Could not save user")}finally{x(!1)}}}async function A(R){if(a&&window.confirm("Remove this user from the dashboard?")){h("");try{await ke.removeDashboardUser(R),await S()}catch(L){h(L instanceof Error?L.message:"Could not remove user")}}}return c.jsxs("div",{className:"space-y-6",children:[c.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-4",children:[c.jsxs("div",{children:[c.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Users"}),c.jsxs("p",{className:"text-muted-foreground",children:["Control who can sign in and what they can view or edit. Owners in"," ",c.jsx("code",{className:"rounded bg-primary/10 px-1 text-xs text-primary",children:"api.yml"})," ","always have full access."]})]}),a?c.jsxs(be,{onClick:C,children:[c.jsx(ye,{icon:x4,size:16,className:"mr-2"}),"Add user"]}):null]}),m?c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:m})}):null,c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{children:[c.jsx(ot,{className:"text-base",children:"Dashboard access"}),c.jsxs(Nt,{children:[j.length," user",j.length===1?"":"s",a?" — use edit to change permissions":""]})]}),c.jsx(qe,{children:i?c.jsx("p",{className:"text-sm text-muted-foreground",children:"Loading users…"}):c.jsx("div",{className:"divide-y divide-border/60",children:j.map(R=>c.jsxs("div",{className:"flex flex-wrap items-center gap-4 py-4 first:pt-0 last:pb-0",children:[c.jsxs("div",{className:"flex min-w-[200px] flex-1 items-center gap-3",children:[c.jsxs(gs,{className:"size-9",children:[c.jsx(vs,{src:R.avatar,alt:R.username}),c.jsx(bs,{children:(R.username||R.id).slice(0,2).toUpperCase()})]}),c.jsxs("div",{className:"min-w-0",children:[c.jsxs("p",{className:"truncate font-medium",children:[E0(R),R.id===(e==null?void 0:e.id)?" (you)":""]}),c.jsx("p",{className:"truncate text-xs text-muted-foreground",children:R.id})]})]}),c.jsx(Ll,{variant:"secondary",children:M1[R.yamlOwner?"owner":R.role]}),c.jsx("p",{className:"max-w-[200px] text-xs text-muted-foreground",children:RB(R)}),R.enabled?c.jsx(Ll,{className:"bg-emerald-500/15 text-emerald-400 hover:bg-emerald-500/15",children:"Active"}):c.jsx(Ll,{variant:"outline",children:"Disabled"}),a?c.jsxs("div",{className:"ml-auto flex gap-1",children:[c.jsx(be,{variant:"ghost",size:"icon",onClick:()=>N(R),"aria-label":"Edit user",children:c.jsx(ye,{icon:C4,size:16})}),R.yamlOwner?null:c.jsx(be,{variant:"ghost",size:"icon",className:"text-destructive",onClick:()=>A(R.id),"aria-label":"Remove user",children:c.jsx(ye,{icon:hh,size:16})})]}):null]},R.id))})})]}),c.jsx($w,{open:!!p,onOpenChange:R=>!R&&y(null),children:c.jsxs(Zh,{className:"max-h-[90vh] max-w-lg overflow-y-auto",children:[c.jsxs(Qh,{children:[c.jsx(Jh,{children:(p==null?void 0:p.mode)==="add"?"Add dashboard user":"Edit user"}),c.jsx(eg,{children:p!=null&&p.yamlOwner?"This user is an owner in api.yml. Role and removal are managed in the config file.":L4[(p==null?void 0:p.role)??"viewer"]})]}),p?c.jsxs("div",{className:"space-y-4",children:[p.mode==="add"?c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{htmlFor:"discord-id",children:"Discord user ID"}),c.jsx(rt,{id:"discord-id",value:p.id,onChange:R=>y({...p,id:R.target.value}),placeholder:"829112572816130058"})]}):null,c.jsxs("div",{className:"grid gap-3 sm:grid-cols-2",children:[c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{children:"Display name (optional)"}),c.jsx(rt,{value:p.globalName,onChange:R=>y({...p,globalName:R.target.value})})]}),c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{children:"Username (optional)"}),c.jsx(rt,{value:p.username,onChange:R=>y({...p,username:R.target.value})})]})]}),c.jsxs("div",{className:"space-y-2",children:[c.jsx(Ze,{children:"Role"}),c.jsxs(ud,{value:p.role,disabled:p.yamlOwner,onValueChange:R=>E(R),children:[c.jsx(gi,{children:c.jsx(dd,{})}),c.jsx(vi,{children:p.yamlOwner?c.jsx(no,{value:"owner",children:"Owner"}):NB.map(R=>c.jsx(no,{value:R,children:M1[R]},R))})]})]}),c.jsxs("label",{className:"flex items-center justify-between rounded-lg border border-border px-3 py-2",children:[c.jsx("span",{className:"text-sm",children:"Account enabled"}),c.jsx(Dn,{checked:p.enabled,disabled:p.yamlOwner,onCheckedChange:R=>y({...p,enabled:R})})]}),p.role==="custom"&&!p.yamlOwner?c.jsx(TB,{permissions:p.permissions,onChange:R=>y({...p,permissions:R})}):null]}):null,c.jsxs(Uw,{children:[c.jsx(be,{variant:"outline",onClick:()=>y(null),children:"Cancel"}),c.jsx(be,{disabled:v||!a||(p==null?void 0:p.mode)==="add"&&!/^\d{17,20}$/.test(p.id.trim()),onClick:()=>void k(),children:v?"Saving…":"Save"})]})]})})]})}function _B(){const{hasPermission:e}=Ft(),n=e("settings.update"),a=oo(),[o,l]=f.useState([]),[i,d]=f.useState(""),[m,h]=f.useState(!0),[p,y]=f.useState(""),[v,x]=f.useState(""),[S,j]=f.useState(null),C=f.useCallback(async()=>{h(!0),y("");try{const E=await ke.getAddonsCatalog();E.data&&(l(E.data.addons),d(E.data.repository))}catch(E){y(E instanceof Error?E.message:"Failed to load addons")}finally{h(!1)}},[]);f.useEffect(()=>{C()},[C]);async function N(E){if(n){j(E.id),x(""),y("");try{const k=await ke.installAddon(E.id);x(k.message||`${E.name} installed.`),await C();const A=E.configFiles[0];A&&a(`/configs?file=${is(A)}`)}catch(k){y(k instanceof Error?k.message:"Install failed")}finally{j(null)}}}return c.jsxs("div",{className:"space-y-6",children:[c.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-4",children:[c.jsxs("div",{children:[c.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Addons"}),c.jsxs("p",{className:"text-muted-foreground",children:["Install community addons from"," ",c.jsx("a",{href:i||"https://github.com/Emerald-Services/Addons",target:"_blank",rel:"noreferrer",className:"text-primary underline-offset-4 hover:underline",children:"Emerald-Services/Addons"}),". Enable addons under"," ",c.jsx(kt,{to:"/configs?file=supportbot",className:"text-primary underline-offset-4 hover:underline",children:"Bot config → General → Addons"}),". Installed addon configs appear in the left sidebar under"," ",c.jsx("strong",{className:"font-medium text-foreground",children:"Addons"}),"."]})]}),c.jsxs(be,{variant:"outline",size:"sm",onClick:C,disabled:m,children:[c.jsx(ye,{icon:w0,size:16,className:ie("mr-1.5",m&&"animate-spin")}),"Refresh"]})]}),p?c.jsx(Ue,{variant:"destructive",children:c.jsx(He,{children:p})}):null,v?c.jsx(Ue,{className:"border-primary/30 bg-primary/10 text-primary",children:c.jsx(He,{children:v})}):null,c.jsxs("section",{className:"space-y-4",children:[c.jsx("h2",{className:"text-sm font-semibold uppercase tracking-widest text-muted-foreground",children:"Marketplace"}),m?c.jsxs("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3",children:[c.jsx(Fe,{className:"h-40 rounded-xl"}),c.jsx(Fe,{className:"h-40 rounded-xl"}),c.jsx(Fe,{className:"h-40 rounded-xl"})]}):c.jsx("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3",children:o.map(E=>c.jsxs(We,{className:"border-border bg-card",children:[c.jsxs(at,{className:"pb-2",children:[c.jsxs("div",{className:"flex items-start justify-between gap-2",children:[c.jsxs(ot,{className:"flex items-center gap-2 text-lg",children:[c.jsx(ye,{icon:bh,size:20,className:"text-primary"}),E.name]}),E.installed?c.jsxs(Ll,{variant:"secondary",className:"shrink-0 gap-1",children:[c.jsx(ye,{icon:O4,size:14}),"Installed"]}):null]}),c.jsx(Nt,{children:E.description})]}),c.jsxs(qe,{className:"space-y-2 text-xs text-muted-foreground",children:[c.jsxs("p",{children:[E.jsFiles.length," command file",E.jsFiles.length===1?"":"s",":"," ",c.jsx("span",{className:"font-mono",children:E.jsFiles.join(", ")})]}),E.configFiles.length>0?c.jsxs("p",{children:["Config:"," ",E.configFiles.map((k,A)=>c.jsxs("span",{children:[A>0?", ":null,c.jsx(kt,{to:`/configs?file=${is(k)}`,className:"font-mono text-primary hover:underline",children:k})]},k))]}):null]}),c.jsxs(p5,{className:"flex flex-wrap gap-2",children:[c.jsx(be,{variant:"outline",size:"sm",asChild:!0,children:c.jsx("a",{href:E.repositoryUrl,target:"_blank",rel:"noreferrer",children:"View on GitHub"})}),E.installed&&E.configFiles[0]?c.jsx(be,{size:"sm",variant:"secondary",asChild:!0,children:c.jsx(kt,{to:`/configs?file=${is(E.configFiles[0])}`,children:"Edit config"})}):null,E.installed?c.jsx(be,{size:"sm",disabled:!0,variant:"secondary",children:"Installed"}):c.jsxs(be,{size:"sm",disabled:!n||S===E.id,onClick:()=>N(E),children:[c.jsx(ye,{icon:Ru,size:14,className:"mr-1"}),S===E.id?"Installing…":"Install"]})]})]},E.id))})]})]})}function MB({children:e}){const{isAuthenticated:n,loading:a}=Ft();return a?c.jsx("div",{className:"flex min-h-svh items-center justify-center bg-background text-sm text-muted-foreground",children:"Loading…"}):n?c.jsx(c.Fragment,{children:e}):c.jsx(Mr,{to:"/login",replace:!0})}function OB(){const{complete:e,loading:n}=yC(),a=Sn();return n?c.jsx("div",{className:"flex min-h-svh items-center justify-center bg-background text-sm text-muted-foreground",children:"Loading…"}):e?a.pathname==="/setup"?c.jsx(Mr,{to:"/login",replace:!0}):c.jsxs(A1,{children:[c.jsx(ln,{path:"/login",element:c.jsx(TP,{})}),c.jsxs(ln,{element:c.jsx(MB,{children:c.jsx(XM,{})}),children:[c.jsx(ln,{index:!0,element:c.jsx(ZP,{})}),c.jsx(ln,{path:"system",element:c.jsx(as,{permission:"overview",children:c.jsx(iB,{})})}),c.jsx(ln,{path:"settings",element:c.jsx(as,{permission:"settings.view",children:c.jsx(oB,{})})}),c.jsx(ln,{path:"configs",element:c.jsx(EP,{})}),c.jsx(ln,{path:"logs",element:c.jsx(as,{permission:"logs",children:c.jsx(gB,{})})}),c.jsx(ln,{path:"transcripts",element:c.jsx(as,{permission:"transcripts",children:c.jsx(EB,{})})}),c.jsx(ln,{path:"users",element:c.jsx(as,{permission:"users.view",children:c.jsx(AB,{})})}),c.jsx(ln,{path:"addons",element:c.jsx(as,{permission:"settings.view",children:c.jsx(_B,{})})})]}),c.jsx(ln,{path:"*",element:c.jsx(Mr,{to:"/",replace:!0})})]}):c.jsxs(A1,{children:[c.jsx(ln,{path:"/setup",element:c.jsx(HP,{})}),c.jsx(ln,{path:"*",element:c.jsx(Mr,{to:"/setup",replace:!0})})]})}function DB({...e}){return c.jsx(mP,{theme:"dark",position:"bottom-right",richColors:!0,closeButton:!0,style:{fontFamily:'"Poppins", system-ui, sans-serif'},toastOptions:{classNames:{toast:"group toast group-[.toaster]:bg-card group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg",description:"group-[.toast]:text-muted-foreground"}},...e})}nB();IN.createRoot(document.getElementById("root")).render(c.jsx(f.StrictMode,{children:c.jsx(d4,{children:c.jsx(xw,{children:c.jsx(U4,{children:c.jsx(ZM,{children:c.jsxs(I4,{children:[c.jsx(OB,{}),c.jsx(DB,{})]})})})})})})); diff --git a/public/dashboard/assets/index-DOri9ZTI.css b/public/dashboard/assets/index-DOri9ZTI.css new file mode 100644 index 0000000..66b8ed4 --- /dev/null +++ b/public/dashboard/assets/index-DOri9ZTI.css @@ -0,0 +1 @@ +*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Poppins,system-ui,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background: 240 10% 4%;--foreground: 0 0% 98%;--card: 240 7% 11%;--card-foreground: 0 0% 98%;--popover: 240 8% 10%;--popover-foreground: 0 0% 98%;--primary: 263 70% 58%;--primary-foreground: 0 0% 100%;--secondary: 240 6% 14%;--secondary-foreground: 0 0% 90%;--muted: 240 6% 14%;--muted-foreground: 240 5% 55%;--accent: 263 45% 18%;--accent-foreground: 263 80% 78%;--destructive: 0 72% 55%;--destructive-foreground: 0 0% 100%;--border: 240 6% 18%;--input: 240 6% 14%;--ring: 263 70% 58%;--radius: .75rem;--chart-1: 263 70% 58%;--chart-2: 199 89% 48%;--chart-3: 38 92% 50%;--chart-4: 280 65% 60%;--chart-5: 0 72% 55%;--sidebar-background: 240 10% 5%;--sidebar-foreground: 240 5% 90%;--sidebar-primary: 263 70% 58%;--sidebar-primary-foreground: 0 0% 100%;--sidebar-accent: 263 40% 14%;--sidebar-accent-foreground: 263 75% 82%;--sidebar-border: 240 6% 14%;--sidebar-ring: 263 70% 58%;--scrollbar-size: 6px;--scrollbar-thumb: 240 4% 32%;--scrollbar-thumb-hover: 240 4% 44%}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));font-family:Poppins,system-ui,sans-serif;color:hsl(var(--foreground));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}html{color-scheme:dark}html,body,*{scrollbar-width:thin;scrollbar-color:hsl(var(--scrollbar-thumb)) transparent}*::-webkit-scrollbar{width:var(--scrollbar-size);height:var(--scrollbar-size)}*::-webkit-scrollbar-button{display:none;width:0;height:0}*::-webkit-scrollbar-track{background:transparent}*::-webkit-scrollbar-thumb{background-color:hsl(var(--scrollbar-thumb));border-radius:9999px;border:2px solid transparent;background-clip:content-box}*::-webkit-scrollbar-thumb:hover{background-color:hsl(var(--scrollbar-thumb-hover))}*::-webkit-scrollbar-thumb:active{background-color:hsl(var(--scrollbar-thumb-hover))}*::-webkit-scrollbar-corner{background:transparent}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-0{left:0;right:0}.inset-y-0{top:0;bottom:0}.-right-0\.5{right:-.125rem}.-top-0\.5{top:-.125rem}.bottom-0{bottom:0}.left-0{left:0}.left-2{left:.5rem}.left-3{left:.75rem}.left-\[50\%\]{left:50%}.right-0{right:0}.right-1{right:.25rem}.right-2{right:.5rem}.right-3{right:.75rem}.right-4{right:1rem}.top-0{top:0}.top-1\.5{top:.375rem}.top-1\/2{top:50%}.top-3\.5{top:.875rem}.top-4{top:1rem}.top-\[50\%\]{top:50%}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.m-0{margin:0}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-3\.5{margin-left:.875rem;margin-right:.875rem}.mx-5{margin-left:1.25rem;margin-right:1.25rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:.25rem;margin-bottom:.25rem}.-ml-1{margin-left:-.25rem}.-ml-2{margin-left:-.5rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-1\.5{margin-right:.375rem}.mr-2{margin-right:.5rem}.mt-0{margin-top:0}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-auto{margin-top:auto}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.line-clamp-3{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3}.block{display:block}.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}.hidden{display:none}.aspect-square{aspect-ratio:1 / 1}.size-1\.5{width:.375rem;height:.375rem}.size-10{width:2.5rem;height:2.5rem}.size-11{width:2.75rem;height:2.75rem}.size-12{width:3rem;height:3rem}.size-14{width:3.5rem;height:3.5rem}.size-16{width:4rem;height:4rem}.size-2{width:.5rem;height:.5rem}.size-28{width:7rem;height:7rem}.size-36{width:9rem;height:9rem}.size-4{width:1rem;height:1rem}.size-7{width:1.75rem;height:1.75rem}.size-8{width:2rem;height:2rem}.size-9{width:2.25rem;height:2.25rem}.size-full{width:100%;height:100%}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-20{height:5rem}.h-24{height:6rem}.h-3\.5{height:.875rem}.h-32{height:8rem}.h-4{height:1rem}.h-40{height:10rem}.h-44{height:11rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-56{height:14rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-80{height:20rem}.h-9{height:2.25rem}.h-96{height:24rem}.h-\[1px\]{height:1px}.h-\[520px\]{height:520px}.h-\[calc\(100svh-8rem\)\]{height:calc(100svh - 8rem)}.h-\[min\(400px\,50vh\)\]{height:min(400px,50vh)}.h-\[min\(50vh\,320px\)\]{height:min(50vh,320px)}.h-\[min\(520px\,calc\(100svh-16rem\)\)\]{height:min(520px,calc(100svh - 16rem))}.h-\[min\(640px\,calc\(100svh-14rem\)\)\]{height:min(640px,calc(100svh - 14rem))}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-fit{height:-moz-fit-content;height:fit-content}.h-full{height:100%}.h-px{height:1px}.h-svh{height:100svh}.max-h-64{max-height:16rem}.max-h-\[--radix-select-content-available-height\]{max-height:var(--radix-select-content-available-height)}.max-h-\[300px\]{max-height:300px}.max-h-\[90vh\]{max-height:90vh}.max-h-\[calc\(100svh-18rem\)\]{max-height:calc(100svh - 18rem)}.max-h-\[min\(320px\,50vh\)\]{max-height:min(320px,50vh)}.max-h-\[min\(360px\,50vh\)\]{max-height:min(360px,50vh)}.max-h-\[min\(720px\,calc\(100svh-12rem\)\)\]{max-height:min(720px,calc(100svh - 12rem))}.max-h-\[min\(90vh\,720px\)\]{max-height:min(90vh,720px)}.max-h-\[var\(--radix-dropdown-menu-content-available-height\)\]{max-height:var(--radix-dropdown-menu-content-available-height)}.min-h-0{min-height:0px}.min-h-\[120px\]{min-height:120px}.min-h-\[420px\]{min-height:420px}.min-h-\[480px\]{min-height:480px}.min-h-\[520px\]{min-height:520px}.min-h-\[60px\]{min-height:60px}.min-h-\[88px\]{min-height:88px}.min-h-\[min\(520px\,60vh\)\]{min-height:min(520px,60vh)}.min-h-\[min\(520px\,70vh\)\]{min-height:min(520px,70vh)}.min-h-\[min\(560px\,calc\(100svh-18rem\)\)\]{min-height:min(560px,calc(100svh - 18rem))}.min-h-svh{min-height:100svh}.w-10{width:2.5rem}.w-2{width:.5rem}.w-3\.5{width:.875rem}.w-3\/4{width:75%}.w-32{width:8rem}.w-4{width:1rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-56{width:14rem}.w-64{width:16rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-80{width:20rem}.w-9{width:2.25rem}.w-\[--radix-dropdown-menu-trigger-width\]{width:var(--radix-dropdown-menu-trigger-width)}.w-\[--sidebar-width\]{width:var(--sidebar-width)}.w-\[1px\]{width:1px}.w-\[calc\(100\%-1rem\)\]{width:calc(100% - 1rem)}.w-\[min\(100\%\,320px\)\]{width:min(100%,320px)}.w-auto{width:auto}.w-full{width:100%}.min-w-0{min-width:0px}.min-w-4{min-width:1rem}.min-w-5{min-width:1.25rem}.min-w-\[200px\]{min-width:200px}.min-w-\[220px\]{min-width:220px}.min-w-\[280px\]{min-width:280px}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.max-w-2xl{max-width:42rem}.max-w-6xl{max-width:72rem}.max-w-\[--skeleton-width\]{max-width:var(--skeleton-width)}.max-w-\[100px\]{max-width:100px}.max-w-\[200px\]{max-width:200px}.max-w-\[8rem\]{max-width:8rem}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.origin-\[--radix-dropdown-menu-content-transform-origin\]{transform-origin:var(--radix-dropdown-menu-content-transform-origin)}.origin-\[--radix-popover-content-transform-origin\]{transform-origin:var(--radix-popover-content-transform-origin)}.origin-\[--radix-select-content-transform-origin\]{transform-origin:var(--radix-select-content-transform-origin)}.origin-\[--radix-tooltip-content-transform-origin\]{transform-origin:var(--radix-tooltip-content-transform-origin)}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-px{--tw-translate-x: -1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-\[-50\%\]{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-px{--tw-translate-x: 1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-\[-50\%\]{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rotate-90{--tw-rotate: -90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize{resize:both}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.place-content-center{place-content:center}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0{gap:0px}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.gap-y-2{row-gap:.5rem}.-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(-.5rem * var(--tw-space-x-reverse));margin-left:calc(-.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(0px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px * var(--tw-space-y-reverse))}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-border\/60>:not([hidden])~:not([hidden]){border-color:hsl(var(--border) / .6)}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-amber-500\/40{border-color:#f59e0b66}.border-border{border-color:hsl(var(--border))}.border-border\/40{border-color:hsl(var(--border) / .4)}.border-border\/50{border-color:hsl(var(--border) / .5)}.border-card{border-color:hsl(var(--card))}.border-destructive\/40{border-color:hsl(var(--destructive) / .4)}.border-destructive\/50{border-color:hsl(var(--destructive) / .5)}.border-emerald-500\/30{border-color:#10b9814d}.border-input{border-color:hsl(var(--input))}.border-primary{border-color:hsl(var(--primary))}.border-primary\/30{border-color:hsl(var(--primary) / .3)}.border-primary\/50{border-color:hsl(var(--primary) / .5)}.border-sidebar-border{border-color:hsl(var(--sidebar-border))}.border-sky-500\/40{border-color:#0ea5e966}.border-transparent{border-color:transparent}.border-l-transparent{border-left-color:transparent}.border-t-transparent{border-top-color:transparent}.bg-\[\#0d0d12\]{--tw-bg-opacity: 1;background-color:rgb(13 13 18 / var(--tw-bg-opacity, 1))}.bg-\[hsl\(240_4\%_32\%\)\]{--tw-bg-opacity: 1;background-color:hsl(240 4% 32% / var(--tw-bg-opacity, 1))}.bg-accent{background-color:hsl(var(--accent))}.bg-amber-400{--tw-bg-opacity: 1;background-color:rgb(251 191 36 / var(--tw-bg-opacity, 1))}.bg-amber-500{--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.bg-amber-500\/10{background-color:#f59e0b1a}.bg-amber-500\/15{background-color:#f59e0b26}.bg-background{background-color:hsl(var(--background))}.bg-background\/40{background-color:hsl(var(--background) / .4)}.bg-background\/50{background-color:hsl(var(--background) / .5)}.bg-black\/80{background-color:#000c}.bg-border{background-color:hsl(var(--border))}.bg-card{background-color:hsl(var(--card))}.bg-destructive{background-color:hsl(var(--destructive))}.bg-destructive\/10{background-color:hsl(var(--destructive) / .1)}.bg-emerald-500{--tw-bg-opacity: 1;background-color:rgb(16 185 129 / var(--tw-bg-opacity, 1))}.bg-emerald-500\/10{background-color:#10b9811a}.bg-emerald-500\/15{background-color:#10b98126}.bg-muted{background-color:hsl(var(--muted))}.bg-muted-foreground{background-color:hsl(var(--muted-foreground))}.bg-popover{background-color:hsl(var(--popover))}.bg-primary{background-color:hsl(var(--primary))}.bg-primary\/10{background-color:hsl(var(--primary) / .1)}.bg-primary\/15{background-color:hsl(var(--primary) / .15)}.bg-primary\/20{background-color:hsl(var(--primary) / .2)}.bg-primary\/25{background-color:hsl(var(--primary) / .25)}.bg-primary\/5{background-color:hsl(var(--primary) / .05)}.bg-rose-500{--tw-bg-opacity: 1;background-color:rgb(244 63 94 / var(--tw-bg-opacity, 1))}.bg-rose-500\/15{background-color:#f43f5e26}.bg-secondary{background-color:hsl(var(--secondary))}.bg-secondary\/20{background-color:hsl(var(--secondary) / .2)}.bg-secondary\/30{background-color:hsl(var(--secondary) / .3)}.bg-secondary\/40{background-color:hsl(var(--secondary) / .4)}.bg-secondary\/50{background-color:hsl(var(--secondary) / .5)}.bg-secondary\/60{background-color:hsl(var(--secondary) / .6)}.bg-sidebar{background-color:hsl(var(--sidebar-background))}.bg-sidebar-accent{background-color:hsl(var(--sidebar-accent))}.bg-sidebar-border{background-color:hsl(var(--sidebar-border))}.bg-sky-400{--tw-bg-opacity: 1;background-color:rgb(56 189 248 / var(--tw-bg-opacity, 1))}.bg-sky-500\/10{background-color:#0ea5e91a}.bg-sky-500\/15{background-color:#0ea5e926}.bg-transparent{background-color:transparent}.bg-white\/70{background-color:#ffffffb3}.fill-current{fill:currentColor}.stroke-white{stroke:#fff}.stroke-white\/20{stroke:#fff3}.object-contain{-o-object-fit:contain;object-fit:contain}.p-0{padding:0}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-px{padding:1px}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-0{padding-top:0;padding-bottom:0}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-1{padding-bottom:.25rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pl-2{padding-left:.5rem}.pl-8{padding-left:2rem}.pl-9{padding-left:2.25rem}.pr-1{padding-right:.25rem}.pr-2{padding-right:.5rem}.pr-8{padding-right:2rem}.pt-0{padding-top:0}.pt-0\.5{padding-top:.125rem}.pt-1{padding-top:.25rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.text-left{text-align:left}.text-center{text-align:center}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-6xl{font-size:3.75rem;line-height:1}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.tracking-widest{letter-spacing:.1em}.text-accent-foreground{color:hsl(var(--accent-foreground))}.text-amber-200{--tw-text-opacity: 1;color:rgb(253 230 138 / var(--tw-text-opacity, 1))}.text-amber-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-card-foreground{color:hsl(var(--card-foreground))}.text-current{color:currentColor}.text-destructive{color:hsl(var(--destructive))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-emerald-400{--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.text-emerald-500{--tw-text-opacity: 1;color:rgb(16 185 129 / var(--tw-text-opacity, 1))}.text-emerald-600{--tw-text-opacity: 1;color:rgb(5 150 105 / var(--tw-text-opacity, 1))}.text-emerald-600\/80{color:#059669cc}.text-foreground{color:hsl(var(--foreground))}.text-foreground\/90{color:hsl(var(--foreground) / .9)}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-muted-foreground\/80{color:hsl(var(--muted-foreground) / .8)}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-rose-400{--tw-text-opacity: 1;color:rgb(251 113 133 / var(--tw-text-opacity, 1))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-sidebar-foreground{color:hsl(var(--sidebar-foreground))}.text-sidebar-foreground\/70{color:hsl(var(--sidebar-foreground) / .7)}.text-sky-100{--tw-text-opacity: 1;color:rgb(224 242 254 / var(--tw-text-opacity, 1))}.text-sky-400{--tw-text-opacity: 1;color:rgb(56 189 248 / var(--tw-text-opacity, 1))}.text-white\/80{color:#fffc}.text-white\/90{color:#ffffffe6}.underline-offset-4{text-underline-offset:4px}.accent-primary{accent-color:hsl(var(--primary))}.opacity-0{opacity:0}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow: 0 0 0 1px hsl(var(--sidebar-border));--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-none{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-black\/20{--tw-shadow-color: rgb(0 0 0 / .2);--tw-shadow: var(--tw-shadow-colored)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring-0{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-2{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-primary\/30{--tw-ring-color: hsl(var(--primary) / .3)}.ring-sidebar-ring{--tw-ring-color: hsl(var(--sidebar-ring))}.ring-offset-background{--tw-ring-offset-color: hsl(var(--background))}.blur{--tw-blur: blur(8px);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)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[margin\,opacity\]{transition-property:margin,opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\]{transition-property:width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{transition-timing-function:linear}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}@keyframes enter{0%{opacity:var(--tw-enter-opacity, 1);transform:translate3d(var(--tw-enter-translate-x, 0),var(--tw-enter-translate-y, 0),0) scale3d(var(--tw-enter-scale, 1),var(--tw-enter-scale, 1),var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity, 1);transform:translate3d(var(--tw-exit-translate-x, 0),var(--tw-exit-translate-y, 0),0) scale3d(var(--tw-exit-scale, 1),var(--tw-exit-scale, 1),var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))}}.animate-in{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.fade-in-0{--tw-enter-opacity: 0}.zoom-in-95{--tw-enter-scale: .95}.duration-200{animation-duration:.2s}.duration-300{animation-duration:.3s}.ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{animation-timing-function:linear}.ease-out{animation-timing-function:cubic-bezier(0,0,.2,1)}.running{animation-play-state:running}.\!paused{animation-play-state:paused!important}.paused{animation-play-state:paused}.color-picker-swatch.react-colorful{width:220px;height:140px}.color-picker-swatch .react-colorful__saturation{border-radius:calc(var(--radius) - 2px) calc(var(--radius) - 2px) 0 0}.color-picker-swatch .react-colorful__hue{height:12px;border-radius:0 0 calc(var(--radius) - 2px) calc(var(--radius) - 2px);margin-top:10px}.color-picker-swatch .react-colorful__pointer{width:16px;height:16px}.unicode-emoji-panel-host emoji-picker.unicode-emoji-picker-el{width:100%;height:min(50vh,380px);--background: hsl(var(--card));--border-color: hsl(var(--border));--button-active-background: hsl(var(--primary) / .25);--button-hover-background: hsl(var(--accent));--input-border-color: hsl(var(--border));--input-font-color: hsl(var(--foreground));--input-placeholder-color: hsl(var(--muted-foreground));--outline-color: hsl(var(--ring));--category-font-color: hsl(var(--muted-foreground));--indicator-color: hsl(var(--primary))}.file\:border-0::file-selector-button{border-width:0px}.file\:bg-transparent::file-selector-button{background-color:transparent}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\:font-medium::file-selector-button{font-weight:500}.file\:text-foreground::file-selector-button{color:hsl(var(--foreground))}.placeholder\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);top:-.5rem;right:-.5rem;bottom:-.5rem;left:-.5rem}.after\:inset-y-0:after{content:var(--tw-content);top:0;bottom:0}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.first\:pt-0:first-child{padding-top:0}.last\:border-0:last-child{border-width:0px}.last\:pb-0:last-child{padding-bottom:0}.hover\:border-primary:hover{border-color:hsl(var(--primary))}.hover\:border-primary\/30:hover{border-color:hsl(var(--primary) / .3)}.hover\:bg-\[hsl\(240_4\%_44\%\)\]:hover{--tw-bg-opacity: 1;background-color:hsl(240 4% 44% / var(--tw-bg-opacity, 1))}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-destructive\/10:hover{background-color:hsl(var(--destructive) / .1)}.hover\:bg-destructive\/80:hover{background-color:hsl(var(--destructive) / .8)}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}.hover\:bg-emerald-500\/15:hover{background-color:#10b98126}.hover\:bg-primary\/80:hover{background-color:hsl(var(--primary) / .8)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:bg-secondary:hover{background-color:hsl(var(--secondary))}.hover\:bg-secondary\/40:hover{background-color:hsl(var(--secondary) / .4)}.hover\:bg-secondary\/50:hover{background-color:hsl(var(--secondary) / .5)}.hover\:bg-secondary\/60:hover{background-color:hsl(var(--secondary) / .6)}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary) / .8)}.hover\:bg-sidebar-accent:hover{background-color:hsl(var(--sidebar-accent))}.hover\:bg-white\/\[0\.03\]:hover{background-color:#ffffff08}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:text-destructive:hover{color:hsl(var(--destructive))}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.hover\:text-sidebar-accent-foreground:hover{color:hsl(var(--sidebar-accent-foreground))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow: 0 0 0 1px hsl(var(--sidebar-accent));--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:after\:bg-sidebar-border:hover:after{content:var(--tw-content);background-color:hsl(var(--sidebar-border))}.focus\:bg-accent:focus{background-color:hsl(var(--accent))}.focus\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-1:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-ring:focus{--tw-ring-color: hsl(var(--ring))}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-1:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color: hsl(var(--ring))}.focus-visible\:ring-sidebar-ring:focus-visible{--tw-ring-color: hsl(var(--sidebar-ring))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width: 2px}.focus-visible\:ring-offset-background:focus-visible{--tw-ring-offset-color: hsl(var(--background))}.active\:bg-sidebar-accent:active{background-color:hsl(var(--sidebar-accent))}.active\:text-sidebar-accent-foreground:active{color:hsl(var(--sidebar-accent-foreground))}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.group\/menu-item:focus-within .group-focus-within\/menu-item\:opacity-100{opacity:1}.group:hover .group-hover\:text-primary{color:hsl(var(--primary))}.group\/menu-item:hover .group-hover\/menu-item\:opacity-100,.group:hover .group-hover\:opacity-100{opacity:1}.group.toaster .group-\[\.toaster\]\:border-border{border-color:hsl(var(--border))}.group.toaster .group-\[\.toaster\]\:bg-card{background-color:hsl(var(--card))}.group.toast .group-\[\.toast\]\:text-muted-foreground{color:hsl(var(--muted-foreground))}.group.toaster .group-\[\.toaster\]\:text-foreground{color:hsl(var(--foreground))}.group.toaster .group-\[\.toaster\]\:shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.peer\/menu-button:hover~.peer-hover\/menu-button\:text-sidebar-accent-foreground{color:hsl(var(--sidebar-accent-foreground))}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:opacity-70{opacity:.7}.has-\[\[data-variant\=inset\]\]\:bg-sidebar:has([data-variant=inset]){background-color:hsl(var(--sidebar-background))}.group\/menu-item:has([data-sidebar=menu-action]) .group-has-\[\[data-sidebar\=menu-action\]\]\/menu-item\:pr-8{padding-right:2rem}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-selected\:bg-accent[aria-selected=true]{background-color:hsl(var(--accent))}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true],.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=checked\]\:translate-x-4[data-state=checked]{--tw-translate-x: 1rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[active\=true\]\:bg-sidebar-accent[data-active=true]{background-color:hsl(var(--sidebar-accent))}.data-\[selected\=true\]\:bg-accent[data-selected=true]{background-color:hsl(var(--accent))}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:hsl(var(--background))}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:hsl(var(--primary))}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:hsl(var(--accent))}.data-\[state\=open\]\:bg-secondary[data-state=open]{background-color:hsl(var(--secondary))}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:hsl(var(--input))}.data-\[active\=true\]\:font-medium[data-active=true]{font-weight:500}.data-\[active\=true\]\:text-sidebar-accent-foreground[data-active=true]{color:hsl(var(--sidebar-accent-foreground))}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:hsl(var(--muted-foreground))}.data-\[selected\=true\]\:text-accent-foreground[data-selected=true]{color:hsl(var(--accent-foreground))}.data-\[state\=active\]\:text-foreground[data-state=active]{color:hsl(var(--foreground))}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:hsl(var(--primary-foreground))}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:hsl(var(--muted-foreground))}.data-\[disabled\=true\]\:opacity-50[data-disabled=true],.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=active\]\:shadow[data-state=active]{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.data-\[state\=active\]\:shadow-sm[data-state=active]{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.data-\[state\=closed\]\:duration-300[data-state=closed]{transition-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{transition-duration:.5s}.data-\[state\=open\]\:animate-in[data-state=open]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity: initial;--tw-exit-scale: initial;--tw-exit-rotate: initial;--tw-exit-translate-x: initial;--tw-exit-translate-y: initial}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity: 0}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity: 0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale: .95}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale: .95}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y: -.5rem}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x: .5rem}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x: -.5rem}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y: .5rem}.data-\[state\=closed\]\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y: 100%}.data-\[state\=closed\]\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x: -100%}.data-\[state\=closed\]\:slide-out-to-left-1\/2[data-state=closed]{--tw-exit-translate-x: -50%}.data-\[state\=closed\]\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x: 100%}.data-\[state\=closed\]\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y: -100%}.data-\[state\=closed\]\:slide-out-to-top-\[48\%\][data-state=closed]{--tw-exit-translate-y: -48%}.data-\[state\=open\]\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y: 100%}.data-\[state\=open\]\:slide-in-from-left[data-state=open]{--tw-enter-translate-x: -100%}.data-\[state\=open\]\:slide-in-from-left-1\/2[data-state=open]{--tw-enter-translate-x: -50%}.data-\[state\=open\]\:slide-in-from-right[data-state=open]{--tw-enter-translate-x: 100%}.data-\[state\=open\]\:slide-in-from-top[data-state=open]{--tw-enter-translate-y: -100%}.data-\[state\=open\]\:slide-in-from-top-\[48\%\][data-state=open]{--tw-enter-translate-y: -48%}.data-\[state\=closed\]\:duration-300[data-state=closed]{animation-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{animation-duration:.5s}.data-\[state\=open\]\:hover\:bg-sidebar-accent:hover[data-state=open]{background-color:hsl(var(--sidebar-accent))}.data-\[state\=open\]\:hover\:text-sidebar-accent-foreground:hover[data-state=open]{color:hsl(var(--sidebar-accent-foreground))}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]{left:calc(var(--sidebar-width) * -1)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]{right:calc(var(--sidebar-width) * -1)}.group[data-side=left] .group-data-\[side\=left\]\:-right-4{right:-1rem}.group[data-side=right] .group-data-\[side\=right\]\:left-0{left:0}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:-mt-8{margin-top:-2rem}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:hidden{display:none}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!size-8{width:2rem!important;height:2rem!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[--sidebar-width-icon\]{width:var(--sidebar-width-icon)}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)\)\]{width:calc(var(--sidebar-width-icon) + 1rem)}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)_\+2px\)\]{width:calc(var(--sidebar-width-icon) + 1rem + 2px)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:w-0{width:0px}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-side=right] .group-data-\[side\=right\]\:rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:overflow-hidden{overflow:hidden}.group[data-variant=floating] .group-data-\[variant\=floating\]\:rounded-lg{border-radius:var(--radius)}.group[data-variant=floating] .group-data-\[variant\=floating\]\:border{border-width:1px}.group[data-side=left] .group-data-\[side\=left\]\:border-r{border-right-width:1px}.group[data-side=right] .group-data-\[side\=right\]\:border-l{border-left-width:1px}.group[data-variant=floating] .group-data-\[variant\=floating\]\:border-sidebar-border{border-color:hsl(var(--sidebar-border))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!p-0{padding:0!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!p-2{padding:.5rem!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:opacity-0{opacity:0}.group[data-variant=floating] .group-data-\[variant\=floating\]\:shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:after\:left-full:after{content:var(--tw-content);left:100%}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:hover\:bg-sidebar:hover{background-color:hsl(var(--sidebar-background))}.peer\/menu-button[data-size=default]~.peer-data-\[size\=default\]\/menu-button\:top-1\.5{top:.375rem}.peer\/menu-button[data-size=lg]~.peer-data-\[size\=lg\]\/menu-button\:top-2\.5{top:.625rem}.peer\/menu-button[data-size=sm]~.peer-data-\[size\=sm\]\/menu-button\:top-1{top:.25rem}.peer\/menu-button[data-active=true]~.peer-data-\[active\=true\]\/menu-button\:text-sidebar-accent-foreground{color:hsl(var(--sidebar-accent-foreground))}.dark\:border-destructive:is(.dark *){border-color:hsl(var(--destructive))}.dark\:text-emerald-400:is(.dark *){--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.dark\:text-emerald-400\/80:is(.dark *){color:#34d399cc}@media(min-width:640px){.sm\:col-span-2{grid-column:span 2 / span 2}.sm\:mx-0{margin-left:0;margin-right:0}.sm\:inline{display:inline}.sm\:flex{display:flex}.sm\:inline-flex{display:inline-flex}.sm\:size-32{width:8rem;height:8rem}.sm\:min-w-\[300px\]{min-width:300px}.sm\:max-w-sm{max-width:24rem}.sm\:max-w-xl{max-width:36rem}.sm\:max-w-xs{max-width:20rem}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-start{align-items:flex-start}.sm\:items-end{align-items:flex-end}.sm\:items-center{align-items:center}.sm\:justify-end{justify-content:flex-end}.sm\:justify-between{justify-content:space-between}.sm\:space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.sm\:rounded-lg{border-radius:var(--radius)}.sm\:p-6{padding:1.5rem}.sm\:text-left{text-align:left}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}}@media(min-width:768px){.md\:block{display:block}.md\:flex{display:flex}.md\:hidden{display:none}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:justify-between{justify-content:space-between}.md\:p-6{padding:1.5rem}.md\:p-8{padding:2rem}.md\:px-10{padding-left:2.5rem;padding-right:2.5rem}.md\:px-6{padding-left:1.5rem;padding-right:1.5rem}.md\:px-8{padding-left:2rem;padding-right:2rem}.md\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.md\:text-3xl{font-size:1.875rem;line-height:2.25rem}.md\:text-base{font-size:1rem;line-height:1.5rem}.md\:text-sm{font-size:.875rem;line-height:1.25rem}.md\:opacity-0{opacity:0}.after\:md\:hidden:after{content:var(--tw-content);display:none}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:m-2{margin:.5rem}.peer[data-state=collapsed][data-variant=inset]~.md\:peer-data-\[state\=collapsed\]\:peer-data-\[variant\=inset\]\:ml-2{margin-left:.5rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:ml-0{margin-left:0}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:rounded-xl{border-radius:.75rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}}@media(min-width:1024px){.lg\:block{display:block}.lg\:grid{display:grid}.lg\:min-w-0{min-width:0px}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-\[220px_1fr\]{grid-template-columns:220px 1fr}.lg\:grid-cols-\[280px_1fr\]{grid-template-columns:280px 1fr}.lg\:grid-cols-\[minmax\(0\,280px\)_1fr\]{grid-template-columns:minmax(0,280px) 1fr}.lg\:grid-cols-\[minmax\(240px\,320px\)_1fr\]{grid-template-columns:minmax(240px,320px) 1fr}.lg\:overflow-visible{overflow:visible}.lg\:p-8{padding:2rem}}@media(min-width:1280px){.xl\:block{display:block}.xl\:grid-cols-\[minmax\(320px\,420px\)_1fr\]{grid-template-columns:minmax(320px,420px) 1fr}.xl\:flex-row{flex-direction:row}.xl\:items-start{align-items:flex-start}}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>span\:last-child\]\:truncate>span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.\[\&\>span\]\:line-clamp-1>span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div{--tw-translate-y: -3px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\]\:left-4>svg{left:1rem}.\[\&\>svg\]\:top-4>svg{top:1rem}.\[\&\>svg\]\:size-4>svg{width:1rem;height:1rem}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:text-destructive>svg{color:hsl(var(--destructive))}.\[\&\>svg\]\:text-foreground>svg{color:hsl(var(--foreground))}.\[\&\>svg\]\:text-sidebar-accent-foreground>svg{color:hsl(var(--sidebar-accent-foreground))}.\[\&\>svg\~\*\]\:pl-7>svg~*{padding-left:1.75rem}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-top:.375rem;padding-bottom:.375rem}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:.75rem;line-height:1rem}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{font-weight:500}.\[\&_\[cmdk-group-heading\]\]\:text-muted-foreground [cmdk-group-heading]{color:hsl(var(--muted-foreground))}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:0}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:1.25rem}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:1.25rem}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:3rem}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-top:.75rem;padding-bottom:.75rem}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:1.25rem}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:1.25rem}.\[\&_p\]\:leading-relaxed p{line-height:1.625}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:1rem;height:1rem}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:-.5rem}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=left] .\[\[data-side\=left\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:-.5rem}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=right] .\[\[data-side\=right\]_\&\]\:cursor-e-resize{cursor:e-resize} diff --git a/public/dashboard/assets/index-DUq0PrN_.css b/public/dashboard/assets/index-DUq0PrN_.css deleted file mode 100644 index c747189..0000000 --- a/public/dashboard/assets/index-DUq0PrN_.css +++ /dev/null @@ -1 +0,0 @@ -*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Poppins,system-ui,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background: 240 10% 4%;--foreground: 0 0% 98%;--card: 240 8% 8%;--card-foreground: 0 0% 98%;--popover: 240 8% 10%;--popover-foreground: 0 0% 98%;--primary: 263 70% 58%;--primary-foreground: 0 0% 100%;--secondary: 240 6% 14%;--secondary-foreground: 0 0% 90%;--muted: 240 6% 14%;--muted-foreground: 240 5% 55%;--accent: 263 45% 18%;--accent-foreground: 263 80% 78%;--destructive: 0 72% 55%;--destructive-foreground: 0 0% 100%;--border: 240 6% 16%;--input: 240 6% 14%;--ring: 263 70% 58%;--radius: .75rem;--chart-1: 263 70% 58%;--chart-2: 199 89% 48%;--chart-3: 38 92% 50%;--chart-4: 280 65% 60%;--chart-5: 0 72% 55%;--sidebar-background: 240 10% 5%;--sidebar-foreground: 240 5% 90%;--sidebar-primary: 263 70% 58%;--sidebar-primary-foreground: 0 0% 100%;--sidebar-accent: 263 40% 14%;--sidebar-accent-foreground: 263 75% 82%;--sidebar-border: 240 6% 14%;--sidebar-ring: 263 70% 58%;--scrollbar-size: 6px;--scrollbar-thumb: 240 4% 32%;--scrollbar-thumb-hover: 240 4% 44%}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));font-family:Poppins,system-ui,sans-serif;color:hsl(var(--foreground));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}html{color-scheme:dark}html,body,*{scrollbar-width:thin;scrollbar-color:hsl(var(--scrollbar-thumb)) transparent}*::-webkit-scrollbar{width:var(--scrollbar-size);height:var(--scrollbar-size)}*::-webkit-scrollbar-button{display:none;width:0;height:0}*::-webkit-scrollbar-track{background:transparent}*::-webkit-scrollbar-thumb{background-color:hsl(var(--scrollbar-thumb));border-radius:9999px;border:2px solid transparent;background-clip:content-box}*::-webkit-scrollbar-thumb:hover{background-color:hsl(var(--scrollbar-thumb-hover))}*::-webkit-scrollbar-thumb:active{background-color:hsl(var(--scrollbar-thumb-hover))}*::-webkit-scrollbar-corner{background:transparent}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{top:0;right:0;bottom:0;left:0}.inset-2{top:.5rem;right:.5rem;bottom:.5rem;left:.5rem}.inset-x-0{left:0;right:0}.inset-y-0{top:0;bottom:0}.-right-0\.5{right:-.125rem}.-right-4{right:-1rem}.-right-8{right:-2rem}.-top-0\.5{top:-.125rem}.-top-4{top:-1rem}.-top-8{top:-2rem}.bottom-0{bottom:0}.left-0{left:0}.left-2{left:.5rem}.left-3{left:.75rem}.left-\[50\%\]{left:50%}.right-0{right:0}.right-1{right:.25rem}.right-12{right:3rem}.right-2{right:.5rem}.right-3{right:.75rem}.right-4{right:1rem}.top-0{top:0}.top-1\.5{top:.375rem}.top-1\/2{top:50%}.top-3\.5{top:.875rem}.top-4{top:1rem}.top-\[50\%\]{top:50%}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.m-0{margin:0}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-3\.5{margin-left:.875rem;margin-right:.875rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:.25rem;margin-bottom:.25rem}.-ml-1{margin-left:-.25rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.ml-2{margin-left:.5rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-1\.5{margin-right:.375rem}.mr-2{margin-right:.5rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-auto{margin-top:auto}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.line-clamp-3{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3}.block{display:block}.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}.hidden{display:none}.aspect-square{aspect-ratio:1 / 1}.size-1\.5{width:.375rem;height:.375rem}.size-10{width:2.5rem;height:2.5rem}.size-11{width:2.75rem;height:2.75rem}.size-14{width:3.5rem;height:3.5rem}.size-2{width:.5rem;height:.5rem}.size-24{width:6rem;height:6rem}.size-28{width:7rem;height:7rem}.size-32{width:8rem;height:8rem}.size-36{width:9rem;height:9rem}.size-4{width:1rem;height:1rem}.size-48{width:12rem;height:12rem}.size-7{width:1.75rem;height:1.75rem}.size-8{width:2rem;height:2rem}.size-9{width:2.25rem;height:2.25rem}.size-full{width:100%;height:100%}.h-10{height:2.5rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-20{height:5rem}.h-24{height:6rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-40{height:10rem}.h-44{height:11rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-96{height:24rem}.h-\[1px\]{height:1px}.h-\[520px\]{height:520px}.h-\[calc\(100svh-8rem\)\]{height:calc(100svh - 8rem)}.h-\[min\(400px\,50vh\)\]{height:min(400px,50vh)}.h-\[min\(520px\,calc\(100svh-16rem\)\)\]{height:min(520px,calc(100svh - 16rem))}.h-\[min\(640px\,calc\(100svh-14rem\)\)\]{height:min(640px,calc(100svh - 14rem))}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-fit{height:-moz-fit-content;height:fit-content}.h-full{height:100%}.h-px{height:1px}.h-svh{height:100svh}.max-h-64{max-height:16rem}.max-h-\[--radix-select-content-available-height\]{max-height:var(--radix-select-content-available-height)}.max-h-\[300px\]{max-height:300px}.max-h-\[90vh\]{max-height:90vh}.max-h-\[calc\(100svh-18rem\)\]{max-height:calc(100svh - 18rem)}.max-h-\[min\(320px\,50vh\)\]{max-height:min(320px,50vh)}.max-h-\[min\(360px\,50vh\)\]{max-height:min(360px,50vh)}.max-h-\[min\(720px\,calc\(100svh-12rem\)\)\]{max-height:min(720px,calc(100svh - 12rem))}.max-h-\[var\(--radix-dropdown-menu-content-available-height\)\]{max-height:var(--radix-dropdown-menu-content-available-height)}.min-h-0{min-height:0px}.min-h-\[420px\]{min-height:420px}.min-h-\[480px\]{min-height:480px}.min-h-\[520px\]{min-height:520px}.min-h-\[60px\]{min-height:60px}.min-h-\[88px\]{min-height:88px}.min-h-\[min\(520px\,60vh\)\]{min-height:min(520px,60vh)}.min-h-\[min\(560px\,calc\(100svh-18rem\)\)\]{min-height:min(560px,calc(100svh - 18rem))}.min-h-svh{min-height:100svh}.w-10{width:2.5rem}.w-2{width:.5rem}.w-3\.5{width:.875rem}.w-3\/4{width:75%}.w-32{width:8rem}.w-4{width:1rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-56{width:14rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-80{width:20rem}.w-9{width:2.25rem}.w-\[--radix-dropdown-menu-trigger-width\]{width:var(--radix-dropdown-menu-trigger-width)}.w-\[--sidebar-width\]{width:var(--sidebar-width)}.w-\[1px\]{width:1px}.w-\[calc\(100\%-1rem\)\]{width:calc(100% - 1rem)}.w-\[min\(100\%\,320px\)\]{width:min(100%,320px)}.w-auto{width:auto}.w-full{width:100%}.min-w-0{min-width:0px}.min-w-4{min-width:1rem}.min-w-5{min-width:1.25rem}.min-w-\[200px\]{min-width:200px}.min-w-\[280px\]{min-width:280px}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.max-w-2xl{max-width:42rem}.max-w-\[--skeleton-width\]{max-width:var(--skeleton-width)}.max-w-\[100px\]{max-width:100px}.max-w-\[200px\]{max-width:200px}.max-w-\[8rem\]{max-width:8rem}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-sm{max-width:24rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.origin-\[--radix-dropdown-menu-content-transform-origin\]{transform-origin:var(--radix-dropdown-menu-content-transform-origin)}.origin-\[--radix-popover-content-transform-origin\]{transform-origin:var(--radix-popover-content-transform-origin)}.origin-\[--radix-select-content-transform-origin\]{transform-origin:var(--radix-select-content-transform-origin)}.origin-\[--radix-tooltip-content-transform-origin\]{transform-origin:var(--radix-tooltip-content-transform-origin)}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-px{--tw-translate-x: -1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-\[-50\%\]{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-px{--tw-translate-x: 1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-\[-50\%\]{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rotate-90{--tw-rotate: -90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize{resize:both}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.place-content-center{place-content:center}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.gap-y-2{row-gap:.5rem}.-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(-.5rem * var(--tw-space-x-reverse));margin-left:calc(-.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(0px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px * var(--tw-space-y-reverse))}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-border\/60>:not([hidden])~:not([hidden]){border-color:hsl(var(--border) / .6)}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-amber-500\/40{border-color:#f59e0b66}.border-border{border-color:hsl(var(--border))}.border-border\/40{border-color:hsl(var(--border) / .4)}.border-border\/50{border-color:hsl(var(--border) / .5)}.border-border\/60{border-color:hsl(var(--border) / .6)}.border-border\/80{border-color:hsl(var(--border) / .8)}.border-card{border-color:hsl(var(--card))}.border-destructive\/50{border-color:hsl(var(--destructive) / .5)}.border-input{border-color:hsl(var(--input))}.border-primary{border-color:hsl(var(--primary))}.border-primary\/20{border-color:hsl(var(--primary) / .2)}.border-primary\/25{border-color:hsl(var(--primary) / .25)}.border-primary\/30{border-color:hsl(var(--primary) / .3)}.border-primary\/50{border-color:hsl(var(--primary) / .5)}.border-sidebar-border{border-color:hsl(var(--sidebar-border))}.border-transparent{border-color:transparent}.border-white\/10{border-color:#ffffff1a}.border-l-transparent{border-left-color:transparent}.border-t-transparent{border-top-color:transparent}.bg-\[\#0d0d12\]{--tw-bg-opacity: 1;background-color:rgb(13 13 18 / var(--tw-bg-opacity, 1))}.bg-\[hsl\(240_4\%_32\%\)\]{--tw-bg-opacity: 1;background-color:hsl(240 4% 32% / var(--tw-bg-opacity, 1))}.bg-accent{background-color:hsl(var(--accent))}.bg-amber-400{--tw-bg-opacity: 1;background-color:rgb(251 191 36 / var(--tw-bg-opacity, 1))}.bg-amber-500{--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.bg-amber-500\/10{background-color:#f59e0b1a}.bg-amber-500\/15{background-color:#f59e0b26}.bg-background{background-color:hsl(var(--background))}.bg-background\/40{background-color:hsl(var(--background) / .4)}.bg-black\/20{background-color:#0003}.bg-black\/80{background-color:#000c}.bg-border{background-color:hsl(var(--border))}.bg-card{background-color:hsl(var(--card))}.bg-card\/40{background-color:hsl(var(--card) / .4)}.bg-card\/50{background-color:hsl(var(--card) / .5)}.bg-card\/80{background-color:hsl(var(--card) / .8)}.bg-card\/90{background-color:hsl(var(--card) / .9)}.bg-card\/95{background-color:hsl(var(--card) / .95)}.bg-destructive{background-color:hsl(var(--destructive))}.bg-emerald-500{--tw-bg-opacity: 1;background-color:rgb(16 185 129 / var(--tw-bg-opacity, 1))}.bg-emerald-500\/15{background-color:#10b98126}.bg-muted{background-color:hsl(var(--muted))}.bg-muted-foreground{background-color:hsl(var(--muted-foreground))}.bg-popover{background-color:hsl(var(--popover))}.bg-primary{background-color:hsl(var(--primary))}.bg-primary\/10{background-color:hsl(var(--primary) / .1)}.bg-primary\/15{background-color:hsl(var(--primary) / .15)}.bg-primary\/20{background-color:hsl(var(--primary) / .2)}.bg-primary\/25{background-color:hsl(var(--primary) / .25)}.bg-primary\/30{background-color:hsl(var(--primary) / .3)}.bg-primary\/5{background-color:hsl(var(--primary) / .05)}.bg-rose-500{--tw-bg-opacity: 1;background-color:rgb(244 63 94 / var(--tw-bg-opacity, 1))}.bg-rose-500\/15{background-color:#f43f5e26}.bg-secondary{background-color:hsl(var(--secondary))}.bg-secondary\/20{background-color:hsl(var(--secondary) / .2)}.bg-secondary\/30{background-color:hsl(var(--secondary) / .3)}.bg-secondary\/40{background-color:hsl(var(--secondary) / .4)}.bg-secondary\/50{background-color:hsl(var(--secondary) / .5)}.bg-secondary\/60{background-color:hsl(var(--secondary) / .6)}.bg-sidebar{background-color:hsl(var(--sidebar-background))}.bg-sidebar-accent{background-color:hsl(var(--sidebar-accent))}.bg-sidebar-border{background-color:hsl(var(--sidebar-border))}.bg-sky-400{--tw-bg-opacity: 1;background-color:rgb(56 189 248 / var(--tw-bg-opacity, 1))}.bg-sky-500\/15{background-color:#0ea5e926}.bg-transparent{background-color:transparent}.bg-white\/10{background-color:#ffffff1a}.bg-white\/70{background-color:#ffffffb3}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-gradient-to-t{background-image:linear-gradient(to top,var(--tw-gradient-stops))}.from-primary{--tw-gradient-from: hsl(var(--primary)) var(--tw-gradient-from-position);--tw-gradient-to: hsl(var(--primary) / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-primary\/20{--tw-gradient-from: hsl(var(--primary) / .2) var(--tw-gradient-from-position);--tw-gradient-to: hsl(var(--primary) / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-primary\/25{--tw-gradient-from: hsl(var(--primary) / .25) var(--tw-gradient-from-position);--tw-gradient-to: hsl(var(--primary) / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-primary\/30{--tw-gradient-from: hsl(var(--primary) / .3) var(--tw-gradient-from-position);--tw-gradient-to: hsl(var(--primary) / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-primary\/40{--tw-gradient-from: hsl(var(--primary) / .4) var(--tw-gradient-from-position);--tw-gradient-to: hsl(var(--primary) / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.via-primary\/10{--tw-gradient-to: hsl(var(--primary) / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), hsl(var(--primary) / .1) var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-primary\/90{--tw-gradient-to: hsl(var(--primary) / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), hsl(var(--primary) / .9) var(--tw-gradient-via-position), var(--tw-gradient-to)}.to-card{--tw-gradient-to: hsl(var(--card)) var(--tw-gradient-to-position)}.to-primary\/5{--tw-gradient-to: hsl(var(--primary) / .05) var(--tw-gradient-to-position)}.to-primary\/75{--tw-gradient-to: hsl(var(--primary) / .75) var(--tw-gradient-to-position)}.to-transparent{--tw-gradient-to: transparent var(--tw-gradient-to-position)}.fill-current{fill:currentColor}.stroke-white{stroke:#fff}.stroke-white\/20{stroke:#fff3}.object-contain{-o-object-fit:contain;object-fit:contain}.p-0{padding:0}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-px{padding:1px}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-8{padding-left:2rem;padding-right:2rem}.py-0{padding-top:0;padding-bottom:0}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-1{padding-bottom:.25rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pl-2{padding-left:.5rem}.pl-8{padding-left:2rem}.pl-9{padding-left:2.25rem}.pr-1{padding-right:.25rem}.pr-2{padding-right:.5rem}.pr-8{padding-right:2rem}.pt-0{padding-top:0}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.text-left{text-align:left}.text-center{text-align:center}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-6xl{font-size:3.75rem;line-height:1}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-widest{letter-spacing:.1em}.text-accent-foreground{color:hsl(var(--accent-foreground))}.text-amber-200{--tw-text-opacity: 1;color:rgb(253 230 138 / var(--tw-text-opacity, 1))}.text-amber-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-card-foreground{color:hsl(var(--card-foreground))}.text-current{color:currentColor}.text-destructive{color:hsl(var(--destructive))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-emerald-400{--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.text-emerald-500{--tw-text-opacity: 1;color:rgb(16 185 129 / var(--tw-text-opacity, 1))}.text-foreground{color:hsl(var(--foreground))}.text-foreground\/90{color:hsl(var(--foreground) / .9)}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-muted-foreground\/80{color:hsl(var(--muted-foreground) / .8)}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-rose-400{--tw-text-opacity: 1;color:rgb(251 113 133 / var(--tw-text-opacity, 1))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-sidebar-foreground{color:hsl(var(--sidebar-foreground))}.text-sidebar-foreground\/70{color:hsl(var(--sidebar-foreground) / .7)}.text-sky-400{--tw-text-opacity: 1;color:rgb(56 189 248 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-white\/70{color:#ffffffb3}.text-white\/80{color:#fffc}.text-white\/90{color:#ffffffe6}.underline-offset-4{text-underline-offset:4px}.accent-primary{accent-color:hsl(var(--primary))}.opacity-0{opacity:0}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow: 0 0 0 1px hsl(var(--sidebar-border));--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-none{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-black\/20{--tw-shadow-color: rgb(0 0 0 / .2);--tw-shadow: var(--tw-shadow-colored)}.shadow-primary\/10{--tw-shadow-color: hsl(var(--primary) / .1);--tw-shadow: var(--tw-shadow-colored)}.shadow-primary\/20{--tw-shadow-color: hsl(var(--primary) / .2);--tw-shadow: var(--tw-shadow-colored)}.shadow-primary\/25{--tw-shadow-color: hsl(var(--primary) / .25);--tw-shadow: var(--tw-shadow-colored)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring-0{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-2{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-primary\/20{--tw-ring-color: hsl(var(--primary) / .2)}.ring-sidebar-ring{--tw-ring-color: hsl(var(--sidebar-ring))}.ring-offset-background{--tw-ring-offset-color: hsl(var(--background))}.blur{--tw-blur: blur(8px);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)}.blur-2xl{--tw-blur: blur(40px);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)}.blur-3xl{--tw-blur: blur(64px);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)}.drop-shadow-lg{--tw-drop-shadow: drop-shadow(0 10px 8px rgb(0 0 0 / .04)) drop-shadow(0 4px 3px rgb(0 0 0 / .1));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)}.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)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-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{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[margin\,opacity\]{transition-property:margin,opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\]{transition-property:width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{transition-timing-function:linear}@keyframes enter{0%{opacity:var(--tw-enter-opacity, 1);transform:translate3d(var(--tw-enter-translate-x, 0),var(--tw-enter-translate-y, 0),0) scale3d(var(--tw-enter-scale, 1),var(--tw-enter-scale, 1),var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity, 1);transform:translate3d(var(--tw-exit-translate-x, 0),var(--tw-exit-translate-y, 0),0) scale3d(var(--tw-exit-scale, 1),var(--tw-exit-scale, 1),var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))}}.animate-in{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.fade-in-0{--tw-enter-opacity: 0}.zoom-in-95{--tw-enter-scale: .95}.duration-200{animation-duration:.2s}.ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{animation-timing-function:linear}.running{animation-play-state:running}.\!paused{animation-play-state:paused!important}.paused{animation-play-state:paused}.dashboard-glow{background:radial-gradient(ellipse 70% 45% at 0% 0%,hsl(var(--primary) / .18),transparent 55%),radial-gradient(ellipse 50% 35% at 100% 0%,hsl(var(--primary) / .08),transparent 50%),hsl(var(--background))}.promo-gradient{background:linear-gradient(105deg,hsl(var(--accent) / .95),hsl(var(--sidebar-accent) / .9) 45%,hsl(var(--background)))}.overview-card-glow{box-shadow:0 0 0 1px hsl(var(--primary) / .08),0 12px 40px -12px hsl(var(--primary) / .25)}.color-picker-swatch.react-colorful{width:220px;height:140px}.color-picker-swatch .react-colorful__saturation{border-radius:calc(var(--radius) - 2px) calc(var(--radius) - 2px) 0 0}.color-picker-swatch .react-colorful__hue{height:12px;border-radius:0 0 calc(var(--radius) - 2px) calc(var(--radius) - 2px);margin-top:10px}.color-picker-swatch .react-colorful__pointer{width:16px;height:16px}.file\:border-0::file-selector-button{border-width:0px}.file\:bg-transparent::file-selector-button{background-color:transparent}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\:font-medium::file-selector-button{font-weight:500}.file\:text-foreground::file-selector-button{color:hsl(var(--foreground))}.placeholder\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);top:-.5rem;right:-.5rem;bottom:-.5rem;left:-.5rem}.after\:inset-y-0:after{content:var(--tw-content);top:0;bottom:0}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.first\:pt-0:first-child{padding-top:0}.last\:border-0:last-child{border-width:0px}.last\:pb-0:last-child{padding-bottom:0}.hover\:border-primary\/25:hover{border-color:hsl(var(--primary) / .25)}.hover\:border-primary\/30:hover{border-color:hsl(var(--primary) / .3)}.hover\:bg-\[hsl\(240_4\%_44\%\)\]:hover{--tw-bg-opacity: 1;background-color:hsl(240 4% 44% / var(--tw-bg-opacity, 1))}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-card:hover{background-color:hsl(var(--card))}.hover\:bg-card\/90:hover{background-color:hsl(var(--card) / .9)}.hover\:bg-destructive\/10:hover{background-color:hsl(var(--destructive) / .1)}.hover\:bg-destructive\/80:hover{background-color:hsl(var(--destructive) / .8)}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}.hover\:bg-emerald-500\/15:hover{background-color:#10b98126}.hover\:bg-primary\/80:hover{background-color:hsl(var(--primary) / .8)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:bg-secondary:hover{background-color:hsl(var(--secondary))}.hover\:bg-secondary\/40:hover{background-color:hsl(var(--secondary) / .4)}.hover\:bg-secondary\/50:hover{background-color:hsl(var(--secondary) / .5)}.hover\:bg-secondary\/60:hover{background-color:hsl(var(--secondary) / .6)}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary) / .8)}.hover\:bg-sidebar-accent:hover{background-color:hsl(var(--sidebar-accent))}.hover\:bg-white\/20:hover{background-color:#fff3}.hover\:bg-white\/\[0\.03\]:hover{background-color:#ffffff08}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:text-destructive:hover{color:hsl(var(--destructive))}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.hover\:text-sidebar-accent-foreground:hover{color:hsl(var(--sidebar-accent-foreground))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow: 0 0 0 1px hsl(var(--sidebar-accent));--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:shadow-lg:hover{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:shadow-md:hover{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:shadow-sm:hover{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:shadow-primary\/5:hover{--tw-shadow-color: hsl(var(--primary) / .05);--tw-shadow: var(--tw-shadow-colored)}.hover\:after\:bg-sidebar-border:hover:after{content:var(--tw-content);background-color:hsl(var(--sidebar-border))}.focus\:bg-accent:focus{background-color:hsl(var(--accent))}.focus\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-1:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-ring:focus{--tw-ring-color: hsl(var(--ring))}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-1:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color: hsl(var(--ring))}.focus-visible\:ring-sidebar-ring:focus-visible{--tw-ring-color: hsl(var(--sidebar-ring))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width: 2px}.focus-visible\:ring-offset-background:focus-visible{--tw-ring-offset-color: hsl(var(--background))}.active\:bg-sidebar-accent:active{background-color:hsl(var(--sidebar-accent))}.active\:text-sidebar-accent-foreground:active{color:hsl(var(--sidebar-accent-foreground))}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.group\/menu-item:focus-within .group-focus-within\/menu-item\:opacity-100{opacity:1}.group:hover .group-hover\:text-primary{color:hsl(var(--primary))}.group\/menu-item:hover .group-hover\/menu-item\:opacity-100,.group:hover .group-hover\:opacity-100{opacity:1}.group.toaster .group-\[\.toaster\]\:border-border{border-color:hsl(var(--border))}.group.toaster .group-\[\.toaster\]\:bg-card{background-color:hsl(var(--card))}.group.toast .group-\[\.toast\]\:text-muted-foreground{color:hsl(var(--muted-foreground))}.group.toaster .group-\[\.toaster\]\:text-foreground{color:hsl(var(--foreground))}.group.toaster .group-\[\.toaster\]\:shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.peer\/menu-button:hover~.peer-hover\/menu-button\:text-sidebar-accent-foreground{color:hsl(var(--sidebar-accent-foreground))}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:opacity-70{opacity:.7}.has-\[\[data-variant\=inset\]\]\:bg-sidebar:has([data-variant=inset]){background-color:hsl(var(--sidebar-background))}.group\/menu-item:has([data-sidebar=menu-action]) .group-has-\[\[data-sidebar\=menu-action\]\]\/menu-item\:pr-8{padding-right:2rem}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-selected\:bg-accent[aria-selected=true]{background-color:hsl(var(--accent))}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true],.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=checked\]\:translate-x-4[data-state=checked]{--tw-translate-x: 1rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[active\=true\]\:bg-sidebar-accent[data-active=true]{background-color:hsl(var(--sidebar-accent))}.data-\[selected\=true\]\:bg-accent[data-selected=true]{background-color:hsl(var(--accent))}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:hsl(var(--background))}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:hsl(var(--primary))}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:hsl(var(--accent))}.data-\[state\=open\]\:bg-secondary[data-state=open]{background-color:hsl(var(--secondary))}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:hsl(var(--input))}.data-\[active\=true\]\:font-medium[data-active=true]{font-weight:500}.data-\[active\=true\]\:text-sidebar-accent-foreground[data-active=true]{color:hsl(var(--sidebar-accent-foreground))}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:hsl(var(--muted-foreground))}.data-\[selected\=true\]\:text-accent-foreground[data-selected=true]{color:hsl(var(--accent-foreground))}.data-\[state\=active\]\:text-foreground[data-state=active]{color:hsl(var(--foreground))}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:hsl(var(--primary-foreground))}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:hsl(var(--muted-foreground))}.data-\[disabled\=true\]\:opacity-50[data-disabled=true],.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=active\]\:shadow[data-state=active]{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.data-\[state\=active\]\:shadow-sm[data-state=active]{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.data-\[state\=closed\]\:duration-300[data-state=closed]{transition-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{transition-duration:.5s}.data-\[state\=open\]\:animate-in[data-state=open]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity: initial;--tw-exit-scale: initial;--tw-exit-rotate: initial;--tw-exit-translate-x: initial;--tw-exit-translate-y: initial}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity: 0}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity: 0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale: .95}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale: .95}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y: -.5rem}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x: .5rem}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x: -.5rem}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y: .5rem}.data-\[state\=closed\]\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y: 100%}.data-\[state\=closed\]\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x: -100%}.data-\[state\=closed\]\:slide-out-to-left-1\/2[data-state=closed]{--tw-exit-translate-x: -50%}.data-\[state\=closed\]\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x: 100%}.data-\[state\=closed\]\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y: -100%}.data-\[state\=closed\]\:slide-out-to-top-\[48\%\][data-state=closed]{--tw-exit-translate-y: -48%}.data-\[state\=open\]\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y: 100%}.data-\[state\=open\]\:slide-in-from-left[data-state=open]{--tw-enter-translate-x: -100%}.data-\[state\=open\]\:slide-in-from-left-1\/2[data-state=open]{--tw-enter-translate-x: -50%}.data-\[state\=open\]\:slide-in-from-right[data-state=open]{--tw-enter-translate-x: 100%}.data-\[state\=open\]\:slide-in-from-top[data-state=open]{--tw-enter-translate-y: -100%}.data-\[state\=open\]\:slide-in-from-top-\[48\%\][data-state=open]{--tw-enter-translate-y: -48%}.data-\[state\=closed\]\:duration-300[data-state=closed]{animation-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{animation-duration:.5s}.data-\[state\=open\]\:hover\:bg-sidebar-accent:hover[data-state=open]{background-color:hsl(var(--sidebar-accent))}.data-\[state\=open\]\:hover\:text-sidebar-accent-foreground:hover[data-state=open]{color:hsl(var(--sidebar-accent-foreground))}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]{left:calc(var(--sidebar-width) * -1)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]{right:calc(var(--sidebar-width) * -1)}.group[data-side=left] .group-data-\[side\=left\]\:-right-4{right:-1rem}.group[data-side=right] .group-data-\[side\=right\]\:left-0{left:0}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:-mt-8{margin-top:-2rem}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:hidden{display:none}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!size-8{width:2rem!important;height:2rem!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[--sidebar-width-icon\]{width:var(--sidebar-width-icon)}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)\)\]{width:calc(var(--sidebar-width-icon) + 1rem)}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)_\+2px\)\]{width:calc(var(--sidebar-width-icon) + 1rem + 2px)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:w-0{width:0px}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-side=right] .group-data-\[side\=right\]\:rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:overflow-hidden{overflow:hidden}.group[data-variant=floating] .group-data-\[variant\=floating\]\:rounded-lg{border-radius:var(--radius)}.group[data-variant=floating] .group-data-\[variant\=floating\]\:border{border-width:1px}.group[data-side=left] .group-data-\[side\=left\]\:border-r{border-right-width:1px}.group[data-side=right] .group-data-\[side\=right\]\:border-l{border-left-width:1px}.group[data-variant=floating] .group-data-\[variant\=floating\]\:border-sidebar-border{border-color:hsl(var(--sidebar-border))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!p-0{padding:0!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!p-2{padding:.5rem!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:opacity-0{opacity:0}.group[data-variant=floating] .group-data-\[variant\=floating\]\:shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:after\:left-full:after{content:var(--tw-content);left:100%}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:hover\:bg-sidebar:hover{background-color:hsl(var(--sidebar-background))}.peer\/menu-button[data-size=default]~.peer-data-\[size\=default\]\/menu-button\:top-1\.5{top:.375rem}.peer\/menu-button[data-size=lg]~.peer-data-\[size\=lg\]\/menu-button\:top-2\.5{top:.625rem}.peer\/menu-button[data-size=sm]~.peer-data-\[size\=sm\]\/menu-button\:top-1{top:.25rem}.peer\/menu-button[data-active=true]~.peer-data-\[active\=true\]\/menu-button\:text-sidebar-accent-foreground{color:hsl(var(--sidebar-accent-foreground))}.dark\:border-destructive:is(.dark *){border-color:hsl(var(--destructive))}@media(min-width:640px){.sm\:col-span-2{grid-column:span 2 / span 2}.sm\:mx-0{margin-left:0;margin-right:0}.sm\:inline{display:inline}.sm\:flex{display:flex}.sm\:inline-flex{display:inline-flex}.sm\:size-32{width:8rem;height:8rem}.sm\:min-w-\[300px\]{min-width:300px}.sm\:max-w-sm{max-width:24rem}.sm\:max-w-xs{max-width:20rem}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-end{align-items:flex-end}.sm\:items-center{align-items:center}.sm\:justify-end{justify-content:flex-end}.sm\:justify-between{justify-content:space-between}.sm\:space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.sm\:rounded-lg{border-radius:var(--radius)}.sm\:p-6{padding:1.5rem}.sm\:text-left{text-align:left}}@media(min-width:768px){.md\:block{display:block}.md\:flex{display:flex}.md\:hidden{display:none}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:justify-between{justify-content:space-between}.md\:p-6{padding:1.5rem}.md\:p-8{padding:2rem}.md\:px-6{padding-left:1.5rem;padding-right:1.5rem}.md\:text-3xl{font-size:1.875rem;line-height:2.25rem}.md\:text-base{font-size:1rem;line-height:1.5rem}.md\:text-sm{font-size:.875rem;line-height:1.25rem}.md\:opacity-0{opacity:0}.after\:md\:hidden:after{content:var(--tw-content);display:none}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:m-2{margin:.5rem}.peer[data-state=collapsed][data-variant=inset]~.md\:peer-data-\[state\=collapsed\]\:peer-data-\[variant\=inset\]\:ml-2{margin-left:.5rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:ml-0{margin-left:0}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:rounded-xl{border-radius:.75rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}}@media(min-width:1024px){.lg\:block{display:block}.lg\:grid{display:grid}.lg\:min-w-0{min-width:0px}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-\[220px_1fr\]{grid-template-columns:220px 1fr}.lg\:grid-cols-\[minmax\(240px\,320px\)_1fr\]{grid-template-columns:minmax(240px,320px) 1fr}.lg\:overflow-visible{overflow:visible}.lg\:p-8{padding:2rem}}@media(min-width:1280px){.xl\:block{display:block}.xl\:grid-cols-\[minmax\(320px\,420px\)_1fr\]{grid-template-columns:minmax(320px,420px) 1fr}.xl\:flex-row{flex-direction:row}.xl\:items-start{align-items:flex-start}}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>span\:last-child\]\:truncate>span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.\[\&\>span\]\:line-clamp-1>span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div{--tw-translate-y: -3px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\]\:left-4>svg{left:1rem}.\[\&\>svg\]\:top-4>svg{top:1rem}.\[\&\>svg\]\:size-4>svg{width:1rem;height:1rem}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:text-destructive>svg{color:hsl(var(--destructive))}.\[\&\>svg\]\:text-foreground>svg{color:hsl(var(--foreground))}.\[\&\>svg\]\:text-sidebar-accent-foreground>svg{color:hsl(var(--sidebar-accent-foreground))}.\[\&\>svg\~\*\]\:pl-7>svg~*{padding-left:1.75rem}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-top:.375rem;padding-bottom:.375rem}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:.75rem;line-height:1rem}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{font-weight:500}.\[\&_\[cmdk-group-heading\]\]\:text-muted-foreground [cmdk-group-heading]{color:hsl(var(--muted-foreground))}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:0}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:1.25rem}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:1.25rem}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:3rem}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-top:.75rem;padding-bottom:.75rem}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:1.25rem}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:1.25rem}.\[\&_p\]\:leading-relaxed p{line-height:1.625}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:1rem;height:1rem}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:-.5rem}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=left] .\[\[data-side\=left\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:-.5rem}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=right] .\[\[data-side\=right\]_\&\]\:cursor-e-resize{cursor:e-resize} diff --git a/public/dashboard/assets/index-WkaLPu9d.js b/public/dashboard/assets/index-WkaLPu9d.js deleted file mode 100644 index 1123e53..0000000 --- a/public/dashboard/assets/index-WkaLPu9d.js +++ /dev/null @@ -1,187 +0,0 @@ -function XE(t,r){for(var a=0;ao[s]})}}}return Object.freeze(Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}))}(function(){const r=document.createElement("link").relList;if(r&&r.supports&&r.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))o(s);new MutationObserver(s=>{for(const c of s)if(c.type==="childList")for(const f of c.addedNodes)f.tagName==="LINK"&&f.rel==="modulepreload"&&o(f)}).observe(document,{childList:!0,subtree:!0});function a(s){const c={};return s.integrity&&(c.integrity=s.integrity),s.referrerPolicy&&(c.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?c.credentials="include":s.crossOrigin==="anonymous"?c.credentials="omit":c.credentials="same-origin",c}function o(s){if(s.ep)return;s.ep=!0;const c=a(s);fetch(s.href,c)}})();function zb(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var tm={exports:{}},us={};/** - * @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 p1;function KE(){if(p1)return us;p1=1;var t=Symbol.for("react.transitional.element"),r=Symbol.for("react.fragment");function a(o,s,c){var f=null;if(c!==void 0&&(f=""+c),s.key!==void 0&&(f=""+s.key),"key"in s){c={};for(var m in s)m!=="key"&&(c[m]=s[m])}else c=s;return s=c.ref,{$$typeof:t,type:o,key:f,ref:s!==void 0?s:null,props:c}}return us.Fragment=r,us.jsx=a,us.jsxs=a,us}var h1;function ZE(){return h1||(h1=1,tm.exports=KE()),tm.exports}var u=ZE(),nm={exports:{}},je={};/** - * @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 g1;function QE(){if(g1)return je;g1=1;var t=Symbol.for("react.transitional.element"),r=Symbol.for("react.portal"),a=Symbol.for("react.fragment"),o=Symbol.for("react.strict_mode"),s=Symbol.for("react.profiler"),c=Symbol.for("react.consumer"),f=Symbol.for("react.context"),m=Symbol.for("react.forward_ref"),g=Symbol.for("react.suspense"),h=Symbol.for("react.memo"),b=Symbol.for("react.lazy"),v=Symbol.for("react.activity"),x=Symbol.iterator;function C(M){return M===null||typeof M!="object"?null:(M=x&&M[x]||M["@@iterator"],typeof M=="function"?M:null)}var E={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},w=Object.assign,j={};function N(M,D,H){this.props=M,this.context=D,this.refs=j,this.updater=H||E}N.prototype.isReactComponent={},N.prototype.setState=function(M,D){if(typeof M!="object"&&typeof M!="function"&&M!=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,M,D,"setState")},N.prototype.forceUpdate=function(M){this.updater.enqueueForceUpdate(this,M,"forceUpdate")};function A(){}A.prototype=N.prototype;function k(M,D,H){this.props=M,this.context=D,this.refs=j,this.updater=H||E}var T=k.prototype=new A;T.constructor=k,w(T,N.prototype),T.isPureReactComponent=!0;var z=Array.isArray;function P(){}var B={H:null,A:null,T:null,S:null},V=Object.prototype.hasOwnProperty;function W(M,D,H){var U=H.ref;return{$$typeof:t,type:M,key:D,ref:U!==void 0?U:null,props:H}}function oe(M,D){return W(M.type,D,M.props)}function ie(M){return typeof M=="object"&&M!==null&&M.$$typeof===t}function me(M){var D={"=":"=0",":":"=2"};return"$"+M.replace(/[=:]/g,function(H){return D[H]})}var de=/\/+/g;function se(M,D){return typeof M=="object"&&M!==null&&M.key!=null?me(""+M.key):D.toString(36)}function fe(M){switch(M.status){case"fulfilled":return M.value;case"rejected":throw M.reason;default:switch(typeof M.status=="string"?M.then(P,P):(M.status="pending",M.then(function(D){M.status==="pending"&&(M.status="fulfilled",M.value=D)},function(D){M.status==="pending"&&(M.status="rejected",M.reason=D)})),M.status){case"fulfilled":return M.value;case"rejected":throw M.reason}}throw M}function _(M,D,H,U,I){var J=typeof M;(J==="undefined"||J==="boolean")&&(M=null);var K=!1;if(M===null)K=!0;else switch(J){case"bigint":case"string":case"number":K=!0;break;case"object":switch(M.$$typeof){case t:case r:K=!0;break;case b:return K=M._init,_(K(M._payload),D,H,U,I)}}if(K)return I=I(M),K=U===""?"."+se(M,0):U,z(I)?(H="",K!=null&&(H=K.replace(de,"$&/")+"/"),_(I,D,H,"",function(we){return we})):I!=null&&(ie(I)&&(I=oe(I,H+(I.key==null||M&&M.key===I.key?"":(""+I.key).replace(de,"$&/")+"/")+K)),D.push(I)),1;K=0;var ce=U===""?".":U+":";if(z(M))for(var ue=0;ue>>1,Q=_[ne];if(0>>1;nes(H,ee))Us(I,H)?(_[ne]=I,_[U]=ee,ne=U):(_[ne]=H,_[D]=ee,ne=D);else if(Us(I,ee))_[ne]=I,_[U]=ee,ne=U;else break e}}return q}function s(_,q){var ee=_.sortIndex-q.sortIndex;return ee!==0?ee:_.id-q.id}if(t.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var c=performance;t.unstable_now=function(){return c.now()}}else{var f=Date,m=f.now();t.unstable_now=function(){return f.now()-m}}var g=[],h=[],b=1,v=null,x=3,C=!1,E=!1,w=!1,j=!1,N=typeof setTimeout=="function"?setTimeout:null,A=typeof clearTimeout=="function"?clearTimeout:null,k=typeof setImmediate<"u"?setImmediate:null;function T(_){for(var q=a(h);q!==null;){if(q.callback===null)o(h);else if(q.startTime<=_)o(h),q.sortIndex=q.expirationTime,r(g,q);else break;q=a(h)}}function z(_){if(w=!1,T(_),!E)if(a(g)!==null)E=!0,P||(P=!0,me());else{var q=a(h);q!==null&&fe(z,q.startTime-_)}}var P=!1,B=-1,V=5,W=-1;function oe(){return j?!0:!(t.unstable_now()-W_&&oe());){var ne=v.callback;if(typeof ne=="function"){v.callback=null,x=v.priorityLevel;var Q=ne(v.expirationTime<=_);if(_=t.unstable_now(),typeof Q=="function"){v.callback=Q,T(_),q=!0;break t}v===a(g)&&o(g),T(_)}else o(g);v=a(g)}if(v!==null)q=!0;else{var M=a(h);M!==null&&fe(z,M.startTime-_),q=!1}}break e}finally{v=null,x=ee,C=!1}q=void 0}}finally{q?me():P=!1}}}var me;if(typeof k=="function")me=function(){k(ie)};else if(typeof MessageChannel<"u"){var de=new MessageChannel,se=de.port2;de.port1.onmessage=ie,me=function(){se.postMessage(null)}}else me=function(){N(ie,0)};function fe(_,q){B=N(function(){_(t.unstable_now())},q)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(_){_.callback=null},t.unstable_forceFrameRate=function(_){0>_||125<_?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):V=0<_?Math.floor(1e3/_):5},t.unstable_getCurrentPriorityLevel=function(){return x},t.unstable_next=function(_){switch(x){case 1:case 2:case 3:var q=3;break;default:q=x}var ee=x;x=q;try{return _()}finally{x=ee}},t.unstable_requestPaint=function(){j=!0},t.unstable_runWithPriority=function(_,q){switch(_){case 1:case 2:case 3:case 4:case 5:break;default:_=3}var ee=x;x=_;try{return q()}finally{x=ee}},t.unstable_scheduleCallback=function(_,q,ee){var ne=t.unstable_now();switch(typeof ee=="object"&&ee!==null?(ee=ee.delay,ee=typeof ee=="number"&&0ne?(_.sortIndex=ee,r(h,_),a(g)===null&&_===a(h)&&(w?(A(B),B=-1):w=!0,fe(z,ee-ne))):(_.sortIndex=Q,r(g,_),E||C||(E=!0,P||(P=!0,me()))),_},t.unstable_shouldYield=oe,t.unstable_wrapCallback=function(_){var q=x;return function(){var ee=x;x=q;try{return _.apply(this,arguments)}finally{x=ee}}}})(om)),om}var b1;function e3(){return b1||(b1=1,am.exports=JE()),am.exports}var lm={exports:{}},Bt={};/** - * @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 x1;function t3(){if(x1)return Bt;x1=1;var t=Jc();function r(g){var h="https://react.dev/errors/"+g;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(t)}catch(r){console.error(r)}}return t(),lm.exports=t3(),lm.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 C1;function n3(){if(C1)return ds;C1=1;var t=e3(),r=Jc(),a=Pb();function o(e){var n="https://react.dev/errors/"+e;if(1Q||(e.current=ne[Q],ne[Q]=null,Q--)}function H(e,n){Q++,ne[Q]=e.current,e.current=n}var U=M(null),I=M(null),J=M(null),K=M(null);function ce(e,n){switch(H(J,n),H(I,e),H(U,null),n.nodeType){case 9:case 11:e=(e=n.documentElement)&&(e=e.namespaceURI)?Py(e):0;break;default:if(e=n.tagName,n=n.namespaceURI)n=Py(n),e=By(n,e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}D(U),H(U,e)}function ue(){D(U),D(I),D(J)}function we(e){e.memoizedState!==null&&H(K,e);var n=U.current,l=By(n,e.type);n!==l&&(H(I,e),H(U,l))}function Re(e){I.current===e&&(D(U),D(I)),K.current===e&&(D(K),ls._currentValue=ee)}var Ne,st;function We(e){if(Ne===void 0)try{throw Error()}catch(l){var n=l.stack.trim().match(/\n( *(at )?)/);Ne=n&&n[1]||"",st=-1)":-1p||O[i]!==Y[p]){var Z=` -`+O[i].replace(" at new "," at ");return e.displayName&&Z.includes("")&&(Z=Z.replace("",e.displayName)),Z}while(1<=i&&0<=p);break}}}finally{zn=!1,Error.prepareStackTrace=l}return(l=e?e.displayName||e.name:"")?We(l):""}function rn(e,n){switch(e.tag){case 26:case 27:case 5:return We(e.type);case 16:return We("Lazy");case 13:return e.child!==n&&n!==null?We("Suspense Fallback"):We("Suspense");case 19:return We("SuspenseList");case 0:case 15:return bn(e.type,!1);case 11:return bn(e.type.render,!1);case 1:return bn(e.type,!0);case 31:return We("Activity");default:return""}}function ba(e){try{var n="",l=null;do n+=rn(e,l),l=e,e=e.return;while(e);return n}catch(i){return` -Error generating stack: `+i.message+` -`+i.stack}}var wt=Object.prototype.hasOwnProperty,vl=t.unstable_scheduleCallback,yl=t.unstable_cancelCallback,Ut=t.unstable_shouldYield,Lr=t.unstable_requestPaint,Ht=t.unstable_now,Iu=t.unstable_getCurrentPriorityLevel,xa=t.unstable_ImmediatePriority,ai=t.unstable_UserBlockingPriority,Sa=t.unstable_NormalPriority,bl=t.unstable_LowPriority,cr=t.unstable_IdlePriority,oi=t.log,zr=t.unstable_setDisableYieldValue,Ca=null,It=null;function Pn(e){if(typeof oi=="function"&&zr(e),It&&typeof It.setStrictMode=="function")try{It.setStrictMode(Ca,e)}catch{}}var zt=Math.clz32?Math.clz32:Xn,Vu=Math.log,xl=Math.LN2;function Xn(e){return e>>>=0,e===0?32:31-(Vu(e)/xl|0)|0}var ro=256,ao=262144,wa=4194304;function Kn(e){var n=e&42;if(n!==0)return n;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&261888;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 Ee(e,n,l){var i=e.pendingLanes;if(i===0)return 0;var p=0,y=e.suspendedLanes,S=e.pingedLanes;e=e.warmLanes;var R=i&134217727;return R!==0?(i=R&~y,i!==0?p=Kn(i):(S&=R,S!==0?p=Kn(S):l||(l=R&~e,l!==0&&(p=Kn(l))))):(R=i&~y,R!==0?p=Kn(R):S!==0?p=Kn(S):l||(l=i&~e,l!==0&&(p=Kn(l)))),p===0?0:n!==0&&n!==p&&(n&y)===0&&(y=p&-p,l=n&-n,y>=l||y===32&&(l&4194048)!==0)?n:p}function et(e,n){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&n)===0}function Et(e,n){switch(e){case 1:case 2:case 4:case 8:case 64:return n+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return n+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Pt(){var e=wa;return wa<<=1,(wa&62914560)===0&&(wa=4194304),e}function Pr(e){for(var n=[],l=0;31>l;l++)n.push(e);return n}function ot(e,n){e.pendingLanes|=n,n!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function Yt(e,n,l,i,p,y){var S=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 R=e.entanglements,O=e.expirationTimes,Y=e.hiddenUpdates;for(l=S&~l;0"u")return null;try{return e.activeElement||e.body}catch{return e.body}}var Vw=/[\n"\\]/g;function Sn(e){return e.replace(Vw,function(n){return"\\"+n.charCodeAt(0).toString(16)+" "})}function qu(e,n,l,i,p,y,S,R){e.name="",S!=null&&typeof S!="function"&&typeof S!="symbol"&&typeof S!="boolean"?e.type=S:e.removeAttribute("type"),n!=null?S==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+xn(n)):e.value!==""+xn(n)&&(e.value=""+xn(n)):S!=="submit"&&S!=="reset"||e.removeAttribute("value"),n!=null?Xu(e,S,xn(n)):l!=null?Xu(e,S,xn(l)):i!=null&&e.removeAttribute("value"),p==null&&y!=null&&(e.defaultChecked=!!y),p!=null&&(e.checked=p&&typeof p!="function"&&typeof p!="symbol"),R!=null&&typeof R!="function"&&typeof R!="symbol"&&typeof R!="boolean"?e.name=""+xn(R):e.removeAttribute("name")}function Mh(e,n,l,i,p,y,S,R){if(y!=null&&typeof y!="function"&&typeof y!="symbol"&&typeof y!="boolean"&&(e.type=y),n!=null||l!=null){if(!(y!=="submit"&&y!=="reset"||n!=null)){Wu(e);return}l=l!=null?""+xn(l):"",n=n!=null?""+xn(n):l,R||n===e.value||(e.value=n),e.defaultValue=n}i=i??p,i=typeof i!="function"&&typeof i!="symbol"&&!!i,e.checked=R?e.checked:!!i,e.defaultChecked=!!i,S!=null&&typeof S!="function"&&typeof S!="symbol"&&typeof S!="boolean"&&(e.name=S),Wu(e)}function Xu(e,n,l){n==="number"&&ii(e.ownerDocument)===e||e.defaultValue===""+l||(e.defaultValue=""+l)}function fo(e,n,l,i){if(e=e.options,n){n={};for(var p=0;p"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),ed=!1;if(fr)try{var El={};Object.defineProperty(El,"passive",{get:function(){ed=!0}}),window.addEventListener("test",El,El),window.removeEventListener("test",El,El)}catch{ed=!1}var $r=null,td=null,ui=null;function Bh(){if(ui)return ui;var e,n=td,l=n.length,i,p="value"in $r?$r.value:$r.textContent,y=p.length;for(e=0;e=Rl),Gh=" ",Yh=!1;function Fh(e,n){switch(e){case"keyup":return v5.indexOf(n.keyCode)!==-1;case"keydown":return n.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 go=!1;function b5(e,n){switch(e){case"compositionend":return Wh(n);case"keypress":return n.which!==32?null:(Yh=!0,Gh);case"textInput":return e=n.data,e===Gh&&Yh?null:e;default:return null}}function x5(e,n){if(go)return e==="compositionend"||!ld&&Fh(e,n)?(e=Bh(),ui=td=$r=null,go=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(n.ctrlKey||n.altKey||n.metaKey)||n.ctrlKey&&n.altKey){if(n.char&&1=n)return{node:l,offset:n-e};e=i}e:{for(;l;){if(l.nextSibling){l=l.nextSibling;break e}l=l.parentNode}l=void 0}l=tg(l)}}function rg(e,n){return e&&n?e===n?!0:e&&e.nodeType===3?!1:n&&n.nodeType===3?rg(e,n.parentNode):"contains"in e?e.contains(n):e.compareDocumentPosition?!!(e.compareDocumentPosition(n)&16):!1:!1}function ag(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var n=ii(e.document);n instanceof e.HTMLIFrameElement;){try{var l=typeof n.contentWindow.location.href=="string"}catch{l=!1}if(l)e=n.contentWindow;else break;n=ii(e.document)}return n}function cd(e){var n=e&&e.nodeName&&e.nodeName.toLowerCase();return n&&(n==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||n==="textarea"||e.contentEditable==="true")}var T5=fr&&"documentMode"in document&&11>=document.documentMode,vo=null,ud=null,Ml=null,dd=!1;function og(e,n,l){var i=l.window===l?l.document:l.nodeType===9?l:l.ownerDocument;dd||vo==null||vo!==ii(i)||(i=vo,"selectionStart"in i&&cd(i)?i={start:i.selectionStart,end:i.selectionEnd}:(i=(i.ownerDocument&&i.ownerDocument.defaultView||window).getSelection(),i={anchorNode:i.anchorNode,anchorOffset:i.anchorOffset,focusNode:i.focusNode,focusOffset:i.focusOffset}),Ml&&kl(Ml,i)||(Ml=i,i=rc(ud,"onSelect"),0>=S,p-=S,Zn=1<<32-zt(n)+p|l<Me?(Pe=ye,ye=null):Pe=ye.sibling;var Ue=F($,ye,G[Me],te);if(Ue===null){ye===null&&(ye=Pe);break}e&&ye&&Ue.alternate===null&&n($,ye),L=y(Ue,L,Me),$e===null?Se=Ue:$e.sibling=Ue,$e=Ue,ye=Pe}if(Me===G.length)return l($,ye),Be&&pr($,Me),Se;if(ye===null){for(;MeMe?(Pe=ye,ye=null):Pe=ye.sibling;var sa=F($,ye,Ue.value,te);if(sa===null){ye===null&&(ye=Pe);break}e&&ye&&sa.alternate===null&&n($,ye),L=y(sa,L,Me),$e===null?Se=sa:$e.sibling=sa,$e=sa,ye=Pe}if(Ue.done)return l($,ye),Be&&pr($,Me),Se;if(ye===null){for(;!Ue.done;Me++,Ue=G.next())Ue=re($,Ue.value,te),Ue!==null&&(L=y(Ue,L,Me),$e===null?Se=Ue:$e.sibling=Ue,$e=Ue);return Be&&pr($,Me),Se}for(ye=i(ye);!Ue.done;Me++,Ue=G.next())Ue=X(ye,$,Me,Ue.value,te),Ue!==null&&(e&&Ue.alternate!==null&&ye.delete(Ue.key===null?Me:Ue.key),L=y(Ue,L,Me),$e===null?Se=Ue:$e.sibling=Ue,$e=Ue);return e&&ye.forEach(function(qE){return n($,qE)}),Be&&pr($,Me),Se}function Fe($,L,G,te){if(typeof G=="object"&&G!==null&&G.type===w&&G.key===null&&(G=G.props.children),typeof G=="object"&&G!==null){switch(G.$$typeof){case C:e:{for(var Se=G.key;L!==null;){if(L.key===Se){if(Se=G.type,Se===w){if(L.tag===7){l($,L.sibling),te=p(L,G.props.children),te.return=$,$=te;break e}}else if(L.elementType===Se||typeof Se=="object"&&Se!==null&&Se.$$typeof===V&&La(Se)===L.type){l($,L.sibling),te=p(L,G.props),Pl(te,G),te.return=$,$=te;break e}l($,L);break}else n($,L);L=L.sibling}G.type===w?(te=ka(G.props.children,$.mode,te,G.key),te.return=$,$=te):(te=xi(G.type,G.key,G.props,null,$.mode,te),Pl(te,G),te.return=$,$=te)}return S($);case E:e:{for(Se=G.key;L!==null;){if(L.key===Se)if(L.tag===4&&L.stateNode.containerInfo===G.containerInfo&&L.stateNode.implementation===G.implementation){l($,L.sibling),te=p(L,G.children||[]),te.return=$,$=te;break e}else{l($,L);break}else n($,L);L=L.sibling}te=yd(G,$.mode,te),te.return=$,$=te}return S($);case V:return G=La(G),Fe($,L,G,te)}if(fe(G))return ve($,L,G,te);if(me(G)){if(Se=me(G),typeof Se!="function")throw Error(o(150));return G=Se.call(G),Ce($,L,G,te)}if(typeof G.then=="function")return Fe($,L,Ri(G),te);if(G.$$typeof===k)return Fe($,L,wi($,G),te);Ti($,G)}return typeof G=="string"&&G!==""||typeof G=="number"||typeof G=="bigint"?(G=""+G,L!==null&&L.tag===6?(l($,L.sibling),te=p(L,G),te.return=$,$=te):(l($,L),te=vd(G,$.mode,te),te.return=$,$=te),S($)):l($,L)}return function($,L,G,te){try{zl=0;var Se=Fe($,L,G,te);return To=null,Se}catch(ye){if(ye===Ro||ye===Ni)throw ye;var $e=on(29,ye,null,$.mode);return $e.lanes=te,$e.return=$,$e}finally{}}}var Pa=Tg(!0),Ag=Tg(!1),Gr=!1;function kd(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Md(e,n){e=e.updateQueue,n.updateQueue===e&&(n.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function Yr(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function Fr(e,n,l){var i=e.updateQueue;if(i===null)return null;if(i=i.shared,(He&2)!==0){var p=i.pending;return p===null?n.next=n:(n.next=p.next,p.next=n),i.pending=n,n=bi(e),fg(e,null,l),n}return yi(e,i,n,l),bi(e)}function Bl(e,n,l){if(n=n.updateQueue,n!==null&&(n=n.shared,(l&4194048)!==0)){var i=n.lanes;i&=e.pendingLanes,l|=i,n.lanes=l,Ft(e,l)}}function _d(e,n){var l=e.updateQueue,i=e.alternate;if(i!==null&&(i=i.updateQueue,l===i)){var p=null,y=null;if(l=l.firstBaseUpdate,l!==null){do{var S={lane:l.lane,tag:l.tag,payload:l.payload,callback:null,next:null};y===null?p=y=S:y=y.next=S,l=l.next}while(l!==null);y===null?p=y=n:y=y.next=n}else p=y=n;l={baseState:i.baseState,firstBaseUpdate:p,lastBaseUpdate:y,shared:i.shared,callbacks:i.callbacks},e.updateQueue=l;return}e=l.lastBaseUpdate,e===null?l.firstBaseUpdate=n:e.next=n,l.lastBaseUpdate=n}var Od=!1;function $l(){if(Od){var e=jo;if(e!==null)throw e}}function Ul(e,n,l,i){Od=!1;var p=e.updateQueue;Gr=!1;var y=p.firstBaseUpdate,S=p.lastBaseUpdate,R=p.shared.pending;if(R!==null){p.shared.pending=null;var O=R,Y=O.next;O.next=null,S===null?y=Y:S.next=Y,S=O;var Z=e.alternate;Z!==null&&(Z=Z.updateQueue,R=Z.lastBaseUpdate,R!==S&&(R===null?Z.firstBaseUpdate=Y:R.next=Y,Z.lastBaseUpdate=O))}if(y!==null){var re=p.baseState;S=0,Z=Y=O=null,R=y;do{var F=R.lane&-536870913,X=F!==R.lane;if(X?(ze&F)===F:(i&F)===F){F!==0&&F===No&&(Od=!0),Z!==null&&(Z=Z.next={lane:0,tag:R.tag,payload:R.payload,callback:null,next:null});e:{var ve=e,Ce=R;F=n;var Fe=l;switch(Ce.tag){case 1:if(ve=Ce.payload,typeof ve=="function"){re=ve.call(Fe,re,F);break e}re=ve;break e;case 3:ve.flags=ve.flags&-65537|128;case 0:if(ve=Ce.payload,F=typeof ve=="function"?ve.call(Fe,re,F):ve,F==null)break e;re=v({},re,F);break e;case 2:Gr=!0}}F=R.callback,F!==null&&(e.flags|=64,X&&(e.flags|=8192),X=p.callbacks,X===null?p.callbacks=[F]:X.push(F))}else X={lane:F,tag:R.tag,payload:R.payload,callback:R.callback,next:null},Z===null?(Y=Z=X,O=re):Z=Z.next=X,S|=F;if(R=R.next,R===null){if(R=p.shared.pending,R===null)break;X=R,R=X.next,X.next=null,p.lastBaseUpdate=X,p.shared.pending=null}}while(!0);Z===null&&(O=re),p.baseState=O,p.firstBaseUpdate=Y,p.lastBaseUpdate=Z,y===null&&(p.shared.lanes=0),Zr|=S,e.lanes=S,e.memoizedState=re}}function kg(e,n){if(typeof e!="function")throw Error(o(191,e));e.call(n)}function Mg(e,n){var l=e.callbacks;if(l!==null)for(e.callbacks=null,e=0;ey?y:8;var S=_.T,R={};_.T=R,Qd(e,!1,n,l);try{var O=p(),Y=_.S;if(Y!==null&&Y(R,O),O!==null&&typeof O=="object"&&typeof O.then=="function"){var Z=P5(O,i);Vl(e,n,Z,dn(e))}else Vl(e,n,i,dn(e))}catch(re){Vl(e,n,{then:function(){},status:"rejected",reason:re},dn())}finally{q.p=y,S!==null&&R.types!==null&&(S.types=R.types),_.T=S}}function V5(){}function Kd(e,n,l,i){if(e.tag!==5)throw Error(o(476));var p=cv(e).queue;iv(e,p,n,ee,l===null?V5:function(){return uv(e),l(i)})}function cv(e){var n=e.memoizedState;if(n!==null)return n;n={memoizedState:ee,baseState:ee,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:yr,lastRenderedState:ee},next:null};var l={};return n.next={memoizedState:l,baseState:l,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:yr,lastRenderedState:l},next:null},e.memoizedState=n,e=e.alternate,e!==null&&(e.memoizedState=n),n}function uv(e){var n=cv(e);n.next===null&&(n=e.alternate.memoizedState),Vl(e,n.next.queue,{},dn())}function Zd(){return Mt(ls)}function dv(){return ft().memoizedState}function fv(){return ft().memoizedState}function G5(e){for(var n=e.return;n!==null;){switch(n.tag){case 24:case 3:var l=dn();e=Yr(l);var i=Fr(n,e,l);i!==null&&(en(i,n,l),Bl(i,n,l)),n={cache:jd()},e.payload=n;return}n=n.return}}function Y5(e,n,l){var i=dn();l={lane:i,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null},Bi(e)?pv(n,l):(l=hd(e,n,l,i),l!==null&&(en(l,e,i),hv(l,n,i)))}function mv(e,n,l){var i=dn();Vl(e,n,l,i)}function Vl(e,n,l,i){var p={lane:i,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null};if(Bi(e))pv(n,p);else{var y=e.alternate;if(e.lanes===0&&(y===null||y.lanes===0)&&(y=n.lastRenderedReducer,y!==null))try{var S=n.lastRenderedState,R=y(S,l);if(p.hasEagerState=!0,p.eagerState=R,an(R,S))return yi(e,n,p,0),qe===null&&vi(),!1}catch{}finally{}if(l=hd(e,n,p,i),l!==null)return en(l,e,i),hv(l,n,i),!0}return!1}function Qd(e,n,l,i){if(i={lane:2,revertLane:Mf(),gesture:null,action:i,hasEagerState:!1,eagerState:null,next:null},Bi(e)){if(n)throw Error(o(479))}else n=hd(e,l,i,2),n!==null&&en(n,e,2)}function Bi(e){var n=e.alternate;return e===Te||n!==null&&n===Te}function pv(e,n){ko=Mi=!0;var l=e.pending;l===null?n.next=n:(n.next=l.next,l.next=n),e.pending=n}function hv(e,n,l){if((l&4194048)!==0){var i=n.lanes;i&=e.pendingLanes,l|=i,n.lanes=l,Ft(e,l)}}var Gl={readContext:Mt,use:Di,useCallback:it,useContext:it,useEffect:it,useImperativeHandle:it,useLayoutEffect:it,useInsertionEffect:it,useMemo:it,useReducer:it,useRef:it,useState:it,useDebugValue:it,useDeferredValue:it,useTransition:it,useSyncExternalStore:it,useId:it,useHostTransitionStatus:it,useFormState:it,useActionState:it,useOptimistic:it,useMemoCache:it,useCacheRefresh:it};Gl.useEffectEvent=it;var gv={readContext:Mt,use:Di,useCallback:function(e,n){return Vt().memoizedState=[e,n===void 0?null:n],e},useContext:Mt,useEffect:Jg,useImperativeHandle:function(e,n,l){l=l!=null?l.concat([e]):null,zi(4194308,4,rv.bind(null,n,e),l)},useLayoutEffect:function(e,n){return zi(4194308,4,e,n)},useInsertionEffect:function(e,n){zi(4,2,e,n)},useMemo:function(e,n){var l=Vt();n=n===void 0?null:n;var i=e();if(Ba){Pn(!0);try{e()}finally{Pn(!1)}}return l.memoizedState=[i,n],i},useReducer:function(e,n,l){var i=Vt();if(l!==void 0){var p=l(n);if(Ba){Pn(!0);try{l(n)}finally{Pn(!1)}}}else p=n;return i.memoizedState=i.baseState=p,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:p},i.queue=e,e=e.dispatch=Y5.bind(null,Te,e),[i.memoizedState,e]},useRef:function(e){var n=Vt();return e={current:e},n.memoizedState=e},useState:function(e){e=Yd(e);var n=e.queue,l=mv.bind(null,Te,n);return n.dispatch=l,[e.memoizedState,l]},useDebugValue:qd,useDeferredValue:function(e,n){var l=Vt();return Xd(l,e,n)},useTransition:function(){var e=Yd(!1);return e=iv.bind(null,Te,e.queue,!0,!1),Vt().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,n,l){var i=Te,p=Vt();if(Be){if(l===void 0)throw Error(o(407));l=l()}else{if(l=n(),qe===null)throw Error(o(349));(ze&127)!==0||Pg(i,n,l)}p.memoizedState=l;var y={value:l,getSnapshot:n};return p.queue=y,Jg($g.bind(null,i,y,e),[e]),i.flags|=2048,_o(9,{destroy:void 0},Bg.bind(null,i,y,l,n),null),l},useId:function(){var e=Vt(),n=qe.identifierPrefix;if(Be){var l=Qn,i=Zn;l=(i&~(1<<32-zt(i)-1)).toString(32)+l,n="_"+n+"R_"+l,l=_i++,0<\/script>",y=y.removeChild(y.firstChild);break;case"select":y=typeof i.is=="string"?S.createElement("select",{is:i.is}):S.createElement("select"),i.multiple?y.multiple=!0:i.size&&(y.size=i.size);break;default:y=typeof i.is=="string"?S.createElement(p,{is:i.is}):S.createElement(p)}}y[At]=n,y[qt]=i;e:for(S=n.child;S!==null;){if(S.tag===5||S.tag===6)y.appendChild(S.stateNode);else if(S.tag!==4&&S.tag!==27&&S.child!==null){S.child.return=S,S=S.child;continue}if(S===n)break e;for(;S.sibling===null;){if(S.return===null||S.return===n)break e;S=S.return}S.sibling.return=S.return,S=S.sibling}n.stateNode=y;e:switch(Ot(y,p,i),p){case"button":case"input":case"select":case"textarea":i=!!i.autoFocus;break e;case"img":i=!0;break e;default:i=!1}i&&xr(n)}}return Je(n),mf(n,n.type,e===null?null:e.memoizedProps,n.pendingProps,l),null;case 6:if(e&&n.stateNode!=null)e.memoizedProps!==i&&xr(n);else{if(typeof i!="string"&&n.stateNode===null)throw Error(o(166));if(e=J.current,wo(n)){if(e=n.stateNode,l=n.memoizedProps,i=null,p=kt,p!==null)switch(p.tag){case 27:case 5:i=p.memoizedProps}e[At]=n,e=!!(e.nodeValue===l||i!==null&&i.suppressHydrationWarning===!0||Ly(e.nodeValue,l)),e||Ir(n,!0)}else e=ac(e).createTextNode(i),e[At]=n,n.stateNode=e}return Je(n),null;case 31:if(l=n.memoizedState,e===null||e.memoizedState!==null){if(i=wo(n),l!==null){if(e===null){if(!i)throw Error(o(318));if(e=n.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(o(557));e[At]=n}else Ma(),(n.flags&128)===0&&(n.memoizedState=null),n.flags|=4;Je(n),e=!1}else l=Cd(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=l),e=!0;if(!e)return n.flags&256?(sn(n),n):(sn(n),null);if((n.flags&128)!==0)throw Error(o(558))}return Je(n),null;case 13:if(i=n.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(p=wo(n),i!==null&&i.dehydrated!==null){if(e===null){if(!p)throw Error(o(318));if(p=n.memoizedState,p=p!==null?p.dehydrated:null,!p)throw Error(o(317));p[At]=n}else Ma(),(n.flags&128)===0&&(n.memoizedState=null),n.flags|=4;Je(n),p=!1}else p=Cd(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=p),p=!0;if(!p)return n.flags&256?(sn(n),n):(sn(n),null)}return sn(n),(n.flags&128)!==0?(n.lanes=l,n):(l=i!==null,e=e!==null&&e.memoizedState!==null,l&&(i=n.child,p=null,i.alternate!==null&&i.alternate.memoizedState!==null&&i.alternate.memoizedState.cachePool!==null&&(p=i.alternate.memoizedState.cachePool.pool),y=null,i.memoizedState!==null&&i.memoizedState.cachePool!==null&&(y=i.memoizedState.cachePool.pool),y!==p&&(i.flags|=2048)),l!==e&&l&&(n.child.flags|=8192),Vi(n,n.updateQueue),Je(n),null);case 4:return ue(),e===null&&Lf(n.stateNode.containerInfo),Je(n),null;case 10:return gr(n.type),Je(n),null;case 19:if(D(dt),i=n.memoizedState,i===null)return Je(n),null;if(p=(n.flags&128)!==0,y=i.rendering,y===null)if(p)Fl(i,!1);else{if(ct!==0||e!==null&&(e.flags&128)!==0)for(e=n.child;e!==null;){if(y=ki(e),y!==null){for(n.flags|=128,Fl(i,!1),e=y.updateQueue,n.updateQueue=e,Vi(n,e),n.subtreeFlags=0,e=l,l=n.child;l!==null;)mg(l,e),l=l.sibling;return H(dt,dt.current&1|2),Be&&pr(n,i.treeForkCount),n.child}e=e.sibling}i.tail!==null&&Ht()>qi&&(n.flags|=128,p=!0,Fl(i,!1),n.lanes=4194304)}else{if(!p)if(e=ki(y),e!==null){if(n.flags|=128,p=!0,e=e.updateQueue,n.updateQueue=e,Vi(n,e),Fl(i,!0),i.tail===null&&i.tailMode==="hidden"&&!y.alternate&&!Be)return Je(n),null}else 2*Ht()-i.renderingStartTime>qi&&l!==536870912&&(n.flags|=128,p=!0,Fl(i,!1),n.lanes=4194304);i.isBackwards?(y.sibling=n.child,n.child=y):(e=i.last,e!==null?e.sibling=y:n.child=y,i.last=y)}return i.tail!==null?(e=i.tail,i.rendering=e,i.tail=e.sibling,i.renderingStartTime=Ht(),e.sibling=null,l=dt.current,H(dt,p?l&1|2:l&1),Be&&pr(n,i.treeForkCount),e):(Je(n),null);case 22:case 23:return sn(n),Ld(),i=n.memoizedState!==null,e!==null?e.memoizedState!==null!==i&&(n.flags|=8192):i&&(n.flags|=8192),i?(l&536870912)!==0&&(n.flags&128)===0&&(Je(n),n.subtreeFlags&6&&(n.flags|=8192)):Je(n),l=n.updateQueue,l!==null&&Vi(n,l.retryQueue),l=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(l=e.memoizedState.cachePool.pool),i=null,n.memoizedState!==null&&n.memoizedState.cachePool!==null&&(i=n.memoizedState.cachePool.pool),i!==l&&(n.flags|=2048),e!==null&&D(Da),null;case 24:return l=null,e!==null&&(l=e.memoizedState.cache),n.memoizedState.cache!==l&&(n.flags|=2048),gr(mt),Je(n),null;case 25:return null;case 30:return null}throw Error(o(156,n.tag))}function K5(e,n){switch(xd(n),n.tag){case 1:return e=n.flags,e&65536?(n.flags=e&-65537|128,n):null;case 3:return gr(mt),ue(),e=n.flags,(e&65536)!==0&&(e&128)===0?(n.flags=e&-65537|128,n):null;case 26:case 27:case 5:return Re(n),null;case 31:if(n.memoizedState!==null){if(sn(n),n.alternate===null)throw Error(o(340));Ma()}return e=n.flags,e&65536?(n.flags=e&-65537|128,n):null;case 13:if(sn(n),e=n.memoizedState,e!==null&&e.dehydrated!==null){if(n.alternate===null)throw Error(o(340));Ma()}return e=n.flags,e&65536?(n.flags=e&-65537|128,n):null;case 19:return D(dt),null;case 4:return ue(),null;case 10:return gr(n.type),null;case 22:case 23:return sn(n),Ld(),e!==null&&D(Da),e=n.flags,e&65536?(n.flags=e&-65537|128,n):null;case 24:return gr(mt),null;case 25:return null;default:return null}}function Uv(e,n){switch(xd(n),n.tag){case 3:gr(mt),ue();break;case 26:case 27:case 5:Re(n);break;case 4:ue();break;case 31:n.memoizedState!==null&&sn(n);break;case 13:sn(n);break;case 19:D(dt);break;case 10:gr(n.type);break;case 22:case 23:sn(n),Ld(),e!==null&&D(Da);break;case 24:gr(mt)}}function Wl(e,n){try{var l=n.updateQueue,i=l!==null?l.lastEffect:null;if(i!==null){var p=i.next;l=p;do{if((l.tag&e)===e){i=void 0;var y=l.create,S=l.inst;i=y(),S.destroy=i}l=l.next}while(l!==p)}}catch(R){Ve(n,n.return,R)}}function Xr(e,n,l){try{var i=n.updateQueue,p=i!==null?i.lastEffect:null;if(p!==null){var y=p.next;i=y;do{if((i.tag&e)===e){var S=i.inst,R=S.destroy;if(R!==void 0){S.destroy=void 0,p=n;var O=l,Y=R;try{Y()}catch(Z){Ve(p,O,Z)}}}i=i.next}while(i!==y)}}catch(Z){Ve(n,n.return,Z)}}function Hv(e){var n=e.updateQueue;if(n!==null){var l=e.stateNode;try{Mg(n,l)}catch(i){Ve(e,e.return,i)}}}function Iv(e,n,l){l.props=$a(e.type,e.memoizedProps),l.state=e.memoizedState;try{l.componentWillUnmount()}catch(i){Ve(e,n,i)}}function ql(e,n){try{var l=e.ref;if(l!==null){switch(e.tag){case 26:case 27:case 5:var i=e.stateNode;break;case 30:i=e.stateNode;break;default:i=e.stateNode}typeof l=="function"?e.refCleanup=l(i):l.current=i}}catch(p){Ve(e,n,p)}}function Jn(e,n){var l=e.ref,i=e.refCleanup;if(l!==null)if(typeof i=="function")try{i()}catch(p){Ve(e,n,p)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof l=="function")try{l(null)}catch(p){Ve(e,n,p)}else l.current=null}function Vv(e){var n=e.type,l=e.memoizedProps,i=e.stateNode;try{e:switch(n){case"button":case"input":case"select":case"textarea":l.autoFocus&&i.focus();break e;case"img":l.src?i.src=l.src:l.srcSet&&(i.srcset=l.srcSet)}}catch(p){Ve(e,e.return,p)}}function pf(e,n,l){try{var i=e.stateNode;yE(i,e.type,l,n),i[qt]=n}catch(p){Ve(e,e.return,p)}}function Gv(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&na(e.type)||e.tag===4}function hf(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||Gv(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.tag===27&&na(e.type)||e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function gf(e,n,l){var i=e.tag;if(i===5||i===6)e=e.stateNode,n?(l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l).insertBefore(e,n):(n=l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l,n.appendChild(e),l=l._reactRootContainer,l!=null||n.onclick!==null||(n.onclick=dr));else if(i!==4&&(i===27&&na(e.type)&&(l=e.stateNode,n=null),e=e.child,e!==null))for(gf(e,n,l),e=e.sibling;e!==null;)gf(e,n,l),e=e.sibling}function Gi(e,n,l){var i=e.tag;if(i===5||i===6)e=e.stateNode,n?l.insertBefore(e,n):l.appendChild(e);else if(i!==4&&(i===27&&na(e.type)&&(l=e.stateNode),e=e.child,e!==null))for(Gi(e,n,l),e=e.sibling;e!==null;)Gi(e,n,l),e=e.sibling}function Yv(e){var n=e.stateNode,l=e.memoizedProps;try{for(var i=e.type,p=n.attributes;p.length;)n.removeAttributeNode(p[0]);Ot(n,i,l),n[At]=e,n[qt]=l}catch(y){Ve(e,e.return,y)}}var Sr=!1,gt=!1,vf=!1,Fv=typeof WeakSet=="function"?WeakSet:Set,jt=null;function Z5(e,n){if(e=e.containerInfo,Bf=dc,e=ag(e),cd(e)){if("selectionStart"in e)var l={start:e.selectionStart,end:e.selectionEnd};else e:{l=(l=e.ownerDocument)&&l.defaultView||window;var i=l.getSelection&&l.getSelection();if(i&&i.rangeCount!==0){l=i.anchorNode;var p=i.anchorOffset,y=i.focusNode;i=i.focusOffset;try{l.nodeType,y.nodeType}catch{l=null;break e}var S=0,R=-1,O=-1,Y=0,Z=0,re=e,F=null;t:for(;;){for(var X;re!==l||p!==0&&re.nodeType!==3||(R=S+p),re!==y||i!==0&&re.nodeType!==3||(O=S+i),re.nodeType===3&&(S+=re.nodeValue.length),(X=re.firstChild)!==null;)F=re,re=X;for(;;){if(re===e)break t;if(F===l&&++Y===p&&(R=S),F===y&&++Z===i&&(O=S),(X=re.nextSibling)!==null)break;re=F,F=re.parentNode}re=X}l=R===-1||O===-1?null:{start:R,end:O}}else l=null}l=l||{start:0,end:0}}else l=null;for($f={focusedElem:e,selectionRange:l},dc=!1,jt=n;jt!==null;)if(n=jt,e=n.child,(n.subtreeFlags&1028)!==0&&e!==null)e.return=n,jt=e;else for(;jt!==null;){switch(n=jt,y=n.alternate,e=n.flags,n.tag){case 0:if((e&4)!==0&&(e=n.updateQueue,e=e!==null?e.events:null,e!==null))for(l=0;l title"))),Ot(y,i,l),y[At]=e,Nt(y),i=y;break e;case"link":var S=Qy("link","href",p).get(i+(l.href||""));if(S){for(var R=0;RFe&&(S=Fe,Fe=Ce,Ce=S);var $=ng(R,Ce),L=ng(R,Fe);if($&&L&&(X.rangeCount!==1||X.anchorNode!==$.node||X.anchorOffset!==$.offset||X.focusNode!==L.node||X.focusOffset!==L.offset)){var G=re.createRange();G.setStart($.node,$.offset),X.removeAllRanges(),Ce>Fe?(X.addRange(G),X.extend(L.node,L.offset)):(G.setEnd(L.node,L.offset),X.addRange(G))}}}}for(re=[],X=R;X=X.parentNode;)X.nodeType===1&&re.push({element:X,left:X.scrollLeft,top:X.scrollTop});for(typeof R.focus=="function"&&R.focus(),R=0;Rl?32:l,_.T=null,l=Ef,Ef=null;var y=Jr,S=jr;if(St=0,Po=Jr=null,jr=0,(He&6)!==0)throw Error(o(331));var R=He;if(He|=4,ry(y.current),ey(y,y.current,S,l),He=R,es(0,!1),It&&typeof It.onPostCommitFiberRoot=="function")try{It.onPostCommitFiberRoot(Ca,y)}catch{}return!0}finally{q.p=p,_.T=i,Sy(e,n)}}function wy(e,n,l){n=wn(l,n),n=nf(e.stateNode,n,2),e=Fr(e,n,2),e!==null&&(ot(e,2),er(e))}function Ve(e,n,l){if(e.tag===3)wy(e,e,l);else for(;n!==null;){if(n.tag===3){wy(n,e,l);break}else if(n.tag===1){var i=n.stateNode;if(typeof n.type.getDerivedStateFromError=="function"||typeof i.componentDidCatch=="function"&&(Qr===null||!Qr.has(i))){e=wn(l,e),l=Ev(2),i=Fr(n,l,2),i!==null&&(Nv(l,i,n,e),ot(i,2),er(i));break}}n=n.return}}function Tf(e,n,l){var i=e.pingCache;if(i===null){i=e.pingCache=new eE;var p=new Set;i.set(n,p)}else p=i.get(n),p===void 0&&(p=new Set,i.set(n,p));p.has(l)||(xf=!0,p.add(l),e=oE.bind(null,e,n,l),n.then(e,e))}function oE(e,n,l){var i=e.pingCache;i!==null&&i.delete(n),e.pingedLanes|=e.suspendedLanes&l,e.warmLanes&=~l,qe===e&&(ze&l)===l&&(ct===4||ct===3&&(ze&62914560)===ze&&300>Ht()-Wi?(He&2)===0&&Bo(e,0):Sf|=l,zo===ze&&(zo=0)),er(e)}function Ey(e,n){n===0&&(n=Pt()),e=Aa(e,n),e!==null&&(ot(e,n),er(e))}function lE(e){var n=e.memoizedState,l=0;n!==null&&(l=n.retryLane),Ey(e,l)}function sE(e,n){var l=0;switch(e.tag){case 31:case 13:var i=e.stateNode,p=e.memoizedState;p!==null&&(l=p.retryLane);break;case 19:i=e.stateNode;break;case 22:i=e.stateNode._retryCache;break;default:throw Error(o(314))}i!==null&&i.delete(n),Ey(e,l)}function iE(e,n){return vl(e,n)}var ec=null,Uo=null,Af=!1,tc=!1,kf=!1,ta=0;function er(e){e!==Uo&&e.next===null&&(Uo===null?ec=Uo=e:Uo=Uo.next=e),tc=!0,Af||(Af=!0,uE())}function es(e,n){if(!kf&&tc){kf=!0;do for(var l=!1,i=ec;i!==null;){if(e!==0){var p=i.pendingLanes;if(p===0)var y=0;else{var S=i.suspendedLanes,R=i.pingedLanes;y=(1<<31-zt(42|e)+1)-1,y&=p&~(S&~R),y=y&201326741?y&201326741|1:y?y|2:0}y!==0&&(l=!0,Ty(i,y))}else y=ze,y=Ee(i,i===qe?y:0,i.cancelPendingCommit!==null||i.timeoutHandle!==-1),(y&3)===0||et(i,y)||(l=!0,Ty(i,y));i=i.next}while(l);kf=!1}}function cE(){Ny()}function Ny(){tc=Af=!1;var e=0;ta!==0&&xE()&&(e=ta);for(var n=Ht(),l=null,i=ec;i!==null;){var p=i.next,y=jy(i,n);y===0?(i.next=null,l===null?ec=p:l.next=p,p===null&&(Uo=l)):(l=i,(e!==0||(y&3)!==0)&&(tc=!0)),i=p}St!==0&&St!==5||es(e),ta!==0&&(ta=0)}function jy(e,n){for(var l=e.suspendedLanes,i=e.pingedLanes,p=e.expirationTimes,y=e.pendingLanes&-62914561;0R)break;var Z=O.transferSize,re=O.initiatorType;Z&&zy(re)&&(O=O.responseEnd,S+=Z*(O"u"?null:document;function qy(e,n,l){var i=Ho;if(i&&typeof n=="string"&&n){var p=Sn(n);p='link[rel="'+e+'"][href="'+p+'"]',typeof l=="string"&&(p+='[crossorigin="'+l+'"]'),Wy.has(p)||(Wy.add(p),e={rel:e,crossOrigin:l,href:n},i.querySelector(p)===null&&(n=i.createElement("link"),Ot(n,"link",e),Nt(n),i.head.appendChild(n)))}}function AE(e){Rr.D(e),qy("dns-prefetch",e,null)}function kE(e,n){Rr.C(e,n),qy("preconnect",e,n)}function ME(e,n,l){Rr.L(e,n,l);var i=Ho;if(i&&e&&n){var p='link[rel="preload"][as="'+Sn(n)+'"]';n==="image"&&l&&l.imageSrcSet?(p+='[imagesrcset="'+Sn(l.imageSrcSet)+'"]',typeof l.imageSizes=="string"&&(p+='[imagesizes="'+Sn(l.imageSizes)+'"]')):p+='[href="'+Sn(e)+'"]';var y=p;switch(n){case"style":y=Io(e);break;case"script":y=Vo(e)}An.has(y)||(e=v({rel:"preload",href:n==="image"&&l&&l.imageSrcSet?void 0:e,as:n},l),An.set(y,e),i.querySelector(p)!==null||n==="style"&&i.querySelector(as(y))||n==="script"&&i.querySelector(os(y))||(n=i.createElement("link"),Ot(n,"link",e),Nt(n),i.head.appendChild(n)))}}function _E(e,n){Rr.m(e,n);var l=Ho;if(l&&e){var i=n&&typeof n.as=="string"?n.as:"script",p='link[rel="modulepreload"][as="'+Sn(i)+'"][href="'+Sn(e)+'"]',y=p;switch(i){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":y=Vo(e)}if(!An.has(y)&&(e=v({rel:"modulepreload",href:e},n),An.set(y,e),l.querySelector(p)===null)){switch(i){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(l.querySelector(os(y)))return}i=l.createElement("link"),Ot(i,"link",e),Nt(i),l.head.appendChild(i)}}}function OE(e,n,l){Rr.S(e,n,l);var i=Ho;if(i&&e){var p=co(i).hoistableStyles,y=Io(e);n=n||"default";var S=p.get(y);if(!S){var R={loading:0,preload:null};if(S=i.querySelector(as(y)))R.loading=5;else{e=v({rel:"stylesheet",href:e,"data-precedence":n},l),(l=An.get(y))&&Ff(e,l);var O=S=i.createElement("link");Nt(O),Ot(O,"link",e),O._p=new Promise(function(Y,Z){O.onload=Y,O.onerror=Z}),O.addEventListener("load",function(){R.loading|=1}),O.addEventListener("error",function(){R.loading|=2}),R.loading|=4,lc(S,n,i)}S={type:"stylesheet",instance:S,count:1,state:R},p.set(y,S)}}}function DE(e,n){Rr.X(e,n);var l=Ho;if(l&&e){var i=co(l).hoistableScripts,p=Vo(e),y=i.get(p);y||(y=l.querySelector(os(p)),y||(e=v({src:e,async:!0},n),(n=An.get(p))&&Wf(e,n),y=l.createElement("script"),Nt(y),Ot(y,"link",e),l.head.appendChild(y)),y={type:"script",instance:y,count:1,state:null},i.set(p,y))}}function LE(e,n){Rr.M(e,n);var l=Ho;if(l&&e){var i=co(l).hoistableScripts,p=Vo(e),y=i.get(p);y||(y=l.querySelector(os(p)),y||(e=v({src:e,async:!0,type:"module"},n),(n=An.get(p))&&Wf(e,n),y=l.createElement("script"),Nt(y),Ot(y,"link",e),l.head.appendChild(y)),y={type:"script",instance:y,count:1,state:null},i.set(p,y))}}function Xy(e,n,l,i){var p=(p=J.current)?oc(p):null;if(!p)throw Error(o(446));switch(e){case"meta":case"title":return null;case"style":return typeof l.precedence=="string"&&typeof l.href=="string"?(n=Io(l.href),l=co(p).hoistableStyles,i=l.get(n),i||(i={type:"style",instance:null,count:0,state:null},l.set(n,i)),i):{type:"void",instance:null,count:0,state:null};case"link":if(l.rel==="stylesheet"&&typeof l.href=="string"&&typeof l.precedence=="string"){e=Io(l.href);var y=co(p).hoistableStyles,S=y.get(e);if(S||(p=p.ownerDocument||p,S={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},y.set(e,S),(y=p.querySelector(as(e)))&&!y._p&&(S.instance=y,S.state.loading=5),An.has(e)||(l={rel:"preload",as:"style",href:l.href,crossOrigin:l.crossOrigin,integrity:l.integrity,media:l.media,hrefLang:l.hrefLang,referrerPolicy:l.referrerPolicy},An.set(e,l),y||zE(p,e,l,S.state))),n&&i===null)throw Error(o(528,""));return S}if(n&&i!==null)throw Error(o(529,""));return null;case"script":return n=l.async,l=l.src,typeof l=="string"&&n&&typeof n!="function"&&typeof n!="symbol"?(n=Vo(l),l=co(p).hoistableScripts,i=l.get(n),i||(i={type:"script",instance:null,count:0,state:null},l.set(n,i)),i):{type:"void",instance:null,count:0,state:null};default:throw Error(o(444,e))}}function Io(e){return'href="'+Sn(e)+'"'}function as(e){return'link[rel="stylesheet"]['+e+"]"}function Ky(e){return v({},e,{"data-precedence":e.precedence,precedence:null})}function zE(e,n,l,i){e.querySelector('link[rel="preload"][as="style"]['+n+"]")?i.loading=1:(n=e.createElement("link"),i.preload=n,n.addEventListener("load",function(){return i.loading|=1}),n.addEventListener("error",function(){return i.loading|=2}),Ot(n,"link",l),Nt(n),e.head.appendChild(n))}function Vo(e){return'[src="'+Sn(e)+'"]'}function os(e){return"script[async]"+e}function Zy(e,n,l){if(n.count++,n.instance===null)switch(n.type){case"style":var i=e.querySelector('style[data-href~="'+Sn(l.href)+'"]');if(i)return n.instance=i,Nt(i),i;var p=v({},l,{"data-href":l.href,"data-precedence":l.precedence,href:null,precedence:null});return i=(e.ownerDocument||e).createElement("style"),Nt(i),Ot(i,"style",p),lc(i,l.precedence,e),n.instance=i;case"stylesheet":p=Io(l.href);var y=e.querySelector(as(p));if(y)return n.state.loading|=4,n.instance=y,Nt(y),y;i=Ky(l),(p=An.get(p))&&Ff(i,p),y=(e.ownerDocument||e).createElement("link"),Nt(y);var S=y;return S._p=new Promise(function(R,O){S.onload=R,S.onerror=O}),Ot(y,"link",i),n.state.loading|=4,lc(y,l.precedence,e),n.instance=y;case"script":return y=Vo(l.src),(p=e.querySelector(os(y)))?(n.instance=p,Nt(p),p):(i=l,(p=An.get(y))&&(i=v({},l),Wf(i,p)),e=e.ownerDocument||e,p=e.createElement("script"),Nt(p),Ot(p,"link",i),e.head.appendChild(p),n.instance=p);case"void":return null;default:throw Error(o(443,n.type))}else n.type==="stylesheet"&&(n.state.loading&4)===0&&(i=n.instance,n.state.loading|=4,lc(i,l.precedence,e));return n.instance}function lc(e,n,l){for(var i=l.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),p=i.length?i[i.length-1]:null,y=p,S=0;S title"):null)}function PE(e,n,l){if(l===1||n.itemProp!=null)return!1;switch(e){case"meta":case"title":return!0;case"style":if(typeof n.precedence!="string"||typeof n.href!="string"||n.href==="")break;return!0;case"link":if(typeof n.rel!="string"||typeof n.href!="string"||n.href===""||n.onLoad||n.onError)break;switch(n.rel){case"stylesheet":return e=n.disabled,typeof n.precedence=="string"&&e==null;default:return!0}case"script":if(n.async&&typeof n.async!="function"&&typeof n.async!="symbol"&&!n.onLoad&&!n.onError&&n.src&&typeof n.src=="string")return!0}return!1}function e1(e){return!(e.type==="stylesheet"&&(e.state.loading&3)===0)}function BE(e,n,l,i){if(l.type==="stylesheet"&&(typeof i.media!="string"||matchMedia(i.media).matches!==!1)&&(l.state.loading&4)===0){if(l.instance===null){var p=Io(i.href),y=n.querySelector(as(p));if(y){n=y._p,n!==null&&typeof n=="object"&&typeof n.then=="function"&&(e.count++,e=ic.bind(e),n.then(e,e)),l.state.loading|=4,l.instance=y,Nt(y);return}y=n.ownerDocument||n,i=Ky(i),(p=An.get(p))&&Ff(i,p),y=y.createElement("link"),Nt(y);var S=y;S._p=new Promise(function(R,O){S.onload=R,S.onerror=O}),Ot(y,"link",i),l.instance=y}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(l,n),(n=l.state.preload)&&(l.state.loading&3)===0&&(e.count++,l=ic.bind(e),n.addEventListener("load",l),n.addEventListener("error",l))}}var qf=0;function $E(e,n){return e.stylesheets&&e.count===0&&uc(e,e.stylesheets),0qf?50:800)+n);return e.unsuspend=l,function(){e.unsuspend=null,clearTimeout(i),clearTimeout(p)}}:null}function ic(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)uc(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var cc=null;function uc(e,n){e.stylesheets=null,e.unsuspend!==null&&(e.count++,cc=new Map,n.forEach(UE,e),cc=null,ic.call(e))}function UE(e,n){if(!(n.state.loading&4)){var l=cc.get(e);if(l)var i=l.get(null);else{l=new Map,cc.set(e,l);for(var p=e.querySelectorAll("link[data-precedence],style[data-precedence]"),y=0;y"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(t)}catch(r){console.error(r)}}return t(),rm.exports=n3(),rm.exports}var a3=r3();/** - * react-router v7.15.1 - * - * 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 E1="popstate";function N1(t){return typeof t=="object"&&t!=null&&"pathname"in t&&"search"in t&&"hash"in t&&"state"in t&&"key"in t}function o3(t={}){function r(o,s){var h;let c=(h=s.state)==null?void 0:h.masked,{pathname:f,search:m,hash:g}=c||o.location;return _m("",{pathname:f,search:m,hash:g},s.state&&s.state.usr||null,s.state&&s.state.key||"default",c?{pathname:o.location.pathname,search:o.location.search,hash:o.location.hash}:void 0)}function a(o,s){return typeof s=="string"?s:Es(s)}return s3(r,a,null,t)}function at(t,r){if(t===!1||t===null||typeof t>"u")throw new Error(r)}function On(t,r){if(!t){typeof console<"u"&&console.warn(r);try{throw new Error(r)}catch{}}}function l3(){return Math.random().toString(36).substring(2,10)}function j1(t,r){return{usr:t.state,key:t.key,idx:r,masked:t.mask?{pathname:t.pathname,search:t.search,hash:t.hash}:void 0}}function _m(t,r,a=null,o,s){return{pathname:typeof t=="string"?t:t.pathname,search:"",hash:"",...typeof r=="string"?ll(r):r,state:a,key:r&&r.key||o||l3(),mask:s}}function Es({pathname:t="/",search:r="",hash:a=""}){return r&&r!=="?"&&(t+=r.charAt(0)==="?"?r:"?"+r),a&&a!=="#"&&(t+=a.charAt(0)==="#"?a:"#"+a),t}function ll(t){let r={};if(t){let a=t.indexOf("#");a>=0&&(r.hash=t.substring(a),t=t.substring(0,a));let o=t.indexOf("?");o>=0&&(r.search=t.substring(o),t=t.substring(0,o)),t&&(r.pathname=t)}return r}function s3(t,r,a,o={}){let{window:s=document.defaultView,v5Compat:c=!1}=o,f=s.history,m="POP",g=null,h=b();h==null&&(h=0,f.replaceState({...f.state,idx:h},""));function b(){return(f.state||{idx:null}).idx}function v(){m="POP";let j=b(),N=j==null?null:j-h;h=j,g&&g({action:m,location:w.location,delta:N})}function x(j,N){m="PUSH";let A=N1(j)?j:_m(w.location,j,N);h=b()+1;let k=j1(A,h),T=w.createHref(A.mask||A);try{f.pushState(k,"",T)}catch(z){if(z instanceof DOMException&&z.name==="DataCloneError")throw z;s.location.assign(T)}c&&g&&g({action:m,location:w.location,delta:1})}function C(j,N){m="REPLACE";let A=N1(j)?j:_m(w.location,j,N);h=b();let k=j1(A,h),T=w.createHref(A.mask||A);f.replaceState(k,"",T),c&&g&&g({action:m,location:w.location,delta:0})}function E(j){return i3(j)}let w={get action(){return m},get location(){return t(s,f)},listen(j){if(g)throw new Error("A history only accepts one active listener");return s.addEventListener(E1,v),g=j,()=>{s.removeEventListener(E1,v),g=null}},createHref(j){return r(s,j)},createURL:E,encodeLocation(j){let N=E(j);return{pathname:N.pathname,search:N.search,hash:N.hash}},push:x,replace:C,go(j){return f.go(j)}};return w}function i3(t,r=!1){let a="http://localhost";typeof window<"u"&&(a=window.location.origin!=="null"?window.location.origin:window.location.href),at(a,"No window.location.(origin|href) available to create URL");let o=typeof t=="string"?t:Es(t);return o=o.replace(/ $/,"%20"),!r&&o.startsWith("//")&&(o=a+o),new URL(o,a)}function Bb(t,r,a="/"){return c3(t,r,a,!1)}function c3(t,r,a,o,s){let c=typeof r=="string"?ll(r):r,f=kr(c.pathname||"/",a);if(f==null)return null;let m=u3(t),g=null,h=C3(f);for(let b=0;g==null&&b{let b={relativePath:h===void 0?f.path||"":h,caseSensitive:f.caseSensitive===!0,childrenIndex:m,route:f};if(b.relativePath.startsWith("/")){if(!b.relativePath.startsWith(o)&&g)return;at(b.relativePath.startsWith(o),`Absolute route path "${b.relativePath}" nested under path "${o}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),b.relativePath=b.relativePath.slice(o.length)}let v=Gn([o,b.relativePath]),x=a.concat(b);f.children&&f.children.length>0&&(at(f.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${v}".`),$b(f.children,r,x,v,g)),!(f.path==null&&!f.index)&&r.push({path:v,score:y3(v,f.index),routesMeta:x})};return t.forEach((f,m)=>{var g;if(f.path===""||!((g=f.path)!=null&&g.includes("?")))c(f,m);else for(let h of Ub(f.path))c(f,m,!0,h)}),r}function Ub(t){let r=t.split("/");if(r.length===0)return[];let[a,...o]=r,s=a.endsWith("?"),c=a.replace(/\?$/,"");if(o.length===0)return s?[c,""]:[c];let f=Ub(o.join("/")),m=[];return m.push(...f.map(g=>g===""?c:[c,g].join("/"))),s&&m.push(...f),m.map(g=>t.startsWith("/")&&g===""?"/":g)}function d3(t){t.sort((r,a)=>r.score!==a.score?a.score-r.score:b3(r.routesMeta.map(o=>o.childrenIndex),a.routesMeta.map(o=>o.childrenIndex)))}var f3=/^:[\w-]+$/,m3=3,p3=2,h3=1,g3=10,v3=-2,R1=t=>t==="*";function y3(t,r){let a=t.split("/"),o=a.length;return a.some(R1)&&(o+=v3),r&&(o+=p3),a.filter(s=>!R1(s)).reduce((s,c)=>s+(f3.test(c)?m3:c===""?h3:g3),o)}function b3(t,r){return t.length===r.length&&t.slice(0,-1).every((o,s)=>o===r[s])?t[t.length-1]-r[r.length-1]:0}function x3(t,r,a=!1){let{routesMeta:o}=t,s={},c="/",f=[];for(let m=0;m{if(b==="*"){let E=m[x]||"";f=c.slice(0,c.length-E.length).replace(/(.)\/+$/,"$1")}const C=m[x];return v&&!C?h[b]=void 0:h[b]=(C||"").replace(/%2F/g,"/"),h},{}),pathname:c,pathnameBase:f,pattern:t}}function S3(t,r=!1,a=!0){On(t==="*"||!t.endsWith("*")||t.endsWith("/*"),`Route path "${t}" will be treated as if it were "${t.replace(/\*$/,"/*")}" because the \`*\` character must always follow a \`/\` in the pattern. To get rid of this warning, please change the route path to "${t.replace(/\*$/,"/*")}".`);let o=[],s="^"+t.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(f,m,g,h,b)=>{if(o.push({paramName:m,isOptional:g!=null}),g){let v=b.charAt(h+f.length);return v&&v!=="/"?"/([^\\/]*)":"(?:/([^\\/]*))?"}return"/([^\\/]+)"}).replace(/\/([\w-]+)\?(\/|$)/g,"(/$1)?$2");return t.endsWith("*")?(o.push({paramName:"*"}),s+=t==="*"||t==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):a?s+="\\/*$":t!==""&&t!=="/"&&(s+="(?:(?=\\/|$))"),[new RegExp(s,r?void 0:"i"),o]}function C3(t){try{return t.split("/").map(r=>decodeURIComponent(r).replace(/\//g,"%2F")).join("/")}catch(r){return On(!1,`The URL path "${t}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${r}).`),t}}function kr(t,r){if(r==="/")return t;if(!t.toLowerCase().startsWith(r.toLowerCase()))return null;let a=r.endsWith("/")?r.length-1:r.length,o=t.charAt(a);return o&&o!=="/"?null:t.slice(a)||"/"}var w3=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i;function E3(t,r="/"){let{pathname:a,search:o="",hash:s=""}=typeof t=="string"?ll(t):t,c;return a?(a=Hb(a),a.startsWith("/")?c=T1(a.substring(1),"/"):c=T1(a,r)):c=r,{pathname:c,search:R3(o),hash:T3(s)}}function T1(t,r){let a=Pc(r).split("/");return t.split("/").forEach(s=>{s===".."?a.length>1&&a.pop():s!=="."&&a.push(s)}),a.length>1?a.join("/"):"/"}function sm(t,r,a,o){return`Cannot include a '${t}' character in a manually specified \`to.${r}\` field [${JSON.stringify(o)}]. Please separate it out to the \`to.${a}\` field. Alternatively you may provide the full path as a string in and the router will parse it for you.`}function N3(t){return t.filter((r,a)=>a===0||r.route.path&&r.route.path.length>0)}function pp(t){let r=N3(t);return r.map((a,o)=>o===r.length-1?a.pathname:a.pathnameBase)}function eu(t,r,a,o=!1){let s;typeof t=="string"?s=ll(t):(s={...t},at(!s.pathname||!s.pathname.includes("?"),sm("?","pathname","search",s)),at(!s.pathname||!s.pathname.includes("#"),sm("#","pathname","hash",s)),at(!s.search||!s.search.includes("#"),sm("#","search","hash",s)));let c=t===""||s.pathname==="",f=c?"/":s.pathname,m;if(f==null)m=a;else{let v=r.length-1;if(!o&&f.startsWith("..")){let x=f.split("/");for(;x[0]==="..";)x.shift(),v-=1;s.pathname=x.join("/")}m=v>=0?r[v]:"/"}let g=E3(s,m),h=f&&f!=="/"&&f.endsWith("/"),b=(c||f===".")&&a.endsWith("/");return!g.pathname.endsWith("/")&&(h||b)&&(g.pathname+="/"),g}var Hb=t=>t.replace(/\/\/+/g,"/"),Gn=t=>Hb(t.join("/")),Pc=t=>t.replace(/\/+$/,""),j3=t=>Pc(t).replace(/^\/*/,"/"),R3=t=>!t||t==="?"?"":t.startsWith("?")?t:"?"+t,T3=t=>!t||t==="#"?"":t.startsWith("#")?t:"#"+t,A3=class{constructor(t,r,a,o=!1){this.status=t,this.statusText=r||"",this.internal=o,a instanceof Error?(this.data=a.toString(),this.error=a):this.data=a}};function k3(t){return t!=null&&typeof t.status=="number"&&typeof t.statusText=="string"&&typeof t.internal=="boolean"&&"data"in t}function M3(t){let r=t.map(a=>a.route.path).filter(Boolean);return Gn(r)||"/"}var Ib=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function Vb(t,r){let a=t;if(typeof a!="string"||!w3.test(a))return{absoluteURL:void 0,isExternal:!1,to:a};let o=a,s=!1;if(Ib)try{let c=new URL(window.location.href),f=a.startsWith("//")?new URL(c.protocol+a):new URL(a),m=kr(f.pathname,r);f.origin===c.origin&&m!=null?a=m+f.search+f.hash:s=!0}catch{On(!1,` contains an invalid URL which will probably break when clicked - please update to a valid URL path.`)}return{absoluteURL:o,isExternal:s,to:a}}Object.getOwnPropertyNames(Object.prototype).sort().join("\0");var Gb=["POST","PUT","PATCH","DELETE"];new Set(Gb);var _3=["GET",...Gb];new Set(_3);var sl=d.createContext(null);sl.displayName="DataRouter";var tu=d.createContext(null);tu.displayName="DataRouterState";var Yb=d.createContext(!1);function O3(){return d.useContext(Yb)}var Fb=d.createContext({isTransitioning:!1});Fb.displayName="ViewTransition";var D3=d.createContext(new Map);D3.displayName="Fetchers";var L3=d.createContext(null);L3.displayName="Await";var gn=d.createContext(null);gn.displayName="Navigation";var Bs=d.createContext(null);Bs.displayName="Location";var Wn=d.createContext({outlet:null,matches:[],isDataRoute:!1});Wn.displayName="Route";var hp=d.createContext(null);hp.displayName="RouteError";var Wb="REACT_ROUTER_ERROR",z3="REDIRECT",P3="ROUTE_ERROR_RESPONSE";function B3(t){if(t.startsWith(`${Wb}:${z3}:{`))try{let r=JSON.parse(t.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 $3(t){if(t.startsWith(`${Wb}:${P3}:{`))try{let r=JSON.parse(t.slice(40));if(typeof r=="object"&&r&&typeof r.status=="number"&&typeof r.statusText=="string")return new A3(r.status,r.statusText,r.data)}catch{}}function U3(t,{relative:r}={}){at(il(),"useHref() may be used only in the context of a component.");let{basename:a,navigator:o}=d.useContext(gn),{hash:s,pathname:c,search:f}=$s(t,{relative:r}),m=c;return a!=="/"&&(m=c==="/"?a:Gn([a,c])),o.createHref({pathname:m,search:f,hash:s})}function il(){return d.useContext(Bs)!=null}function Dn(){return at(il(),"useLocation() may be used only in the context of a component."),d.useContext(Bs).location}var qb="You should call navigate() in a React.useEffect(), not when your component is first rendered.";function Xb(t){d.useContext(gn).static||d.useLayoutEffect(t)}function cl(){let{isDataRoute:t}=d.useContext(Wn);return t?t4():H3()}function H3(){at(il(),"useNavigate() may be used only in the context of a component.");let t=d.useContext(sl),{basename:r,navigator:a}=d.useContext(gn),{matches:o}=d.useContext(Wn),{pathname:s}=Dn(),c=JSON.stringify(pp(o)),f=d.useRef(!1);return Xb(()=>{f.current=!0}),d.useCallback((g,h={})=>{if(On(f.current,qb),!f.current)return;if(typeof g=="number"){a.go(g);return}let b=eu(g,JSON.parse(c),s,h.relative==="path");t==null&&r!=="/"&&(b.pathname=b.pathname==="/"?r:Gn([r,b.pathname])),(h.replace?a.replace:a.push)(b,h.state,h)},[r,a,c,s,t])}var I3=d.createContext(null);function V3(t){let r=d.useContext(Wn).outlet;return d.useMemo(()=>r&&d.createElement(I3.Provider,{value:t},r),[r,t])}function $s(t,{relative:r}={}){let{matches:a}=d.useContext(Wn),{pathname:o}=Dn(),s=JSON.stringify(pp(a));return d.useMemo(()=>eu(t,JSON.parse(s),o,r==="path"),[t,s,o,r])}function G3(t,r){return Kb(t,r)}function Kb(t,r,a){var j;at(il(),"useRoutes() may be used only in the context of a component.");let{navigator:o}=d.useContext(gn),{matches:s}=d.useContext(Wn),c=s[s.length-1],f=c?c.params:{},m=c?c.pathname:"/",g=c?c.pathnameBase:"/",h=c&&c.route;{let N=h&&h.path||"";Qb(m,!h||N.endsWith("*")||N.endsWith("*?"),`You rendered descendant (or called \`useRoutes()\`) at "${m}" (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 b=Dn(),v;if(r){let N=typeof r=="string"?ll(r):r;at(g==="/"||((j=N.pathname)==null?void 0:j.startsWith(g)),`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 "${g}" but pathname "${N.pathname}" was given in the \`location\` prop.`),v=N}else v=b;let x=v.pathname||"/",C=x;if(g!=="/"){let N=g.replace(/^\//,"").split("/");C="/"+x.replace(/^\//,"").split("/").slice(N.length).join("/")}let E=a&&a.state.matches.length?a.state.matches.map(N=>Object.assign(N,{route:a.manifest[N.route.id]||N.route})):Bb(t,{pathname:C});On(h||E!=null,`No routes matched location "${v.pathname}${v.search}${v.hash}" `),On(E==null||E[E.length-1].route.element!==void 0||E[E.length-1].route.Component!==void 0||E[E.length-1].route.lazy!==void 0,`Matched leaf route at location "${v.pathname}${v.search}${v.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 w=X3(E&&E.map(N=>Object.assign({},N,{params:Object.assign({},f,N.params),pathname:Gn([g,o.encodeLocation?o.encodeLocation(N.pathname.replace(/%/g,"%25").replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:N.pathname]),pathnameBase:N.pathnameBase==="/"?g:Gn([g,o.encodeLocation?o.encodeLocation(N.pathnameBase.replace(/%/g,"%25").replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:N.pathnameBase])})),s,a);return r&&w?d.createElement(Bs.Provider,{value:{location:{pathname:"/",search:"",hash:"",state:null,key:"default",mask:void 0,...v},navigationType:"POP"}},w):w}function Y3(){let t=e4(),r=k3(t)?`${t.status} ${t.statusText}`:t instanceof Error?t.message:JSON.stringify(t),a=t instanceof Error?t.stack:null,o="rgba(200,200,200, 0.5)",s={padding:"0.5rem",backgroundColor:o},c={padding:"2px 4px",backgroundColor:o},f=null;return console.error("Error handled by React Router default ErrorBoundary:",t),f=d.createElement(d.Fragment,null,d.createElement("p",null,"💿 Hey developer 👋"),d.createElement("p",null,"You can provide a way better UX than this when your app throws errors by providing your own ",d.createElement("code",{style:c},"ErrorBoundary")," or"," ",d.createElement("code",{style:c},"errorElement")," prop on your route.")),d.createElement(d.Fragment,null,d.createElement("h2",null,"Unexpected Application Error!"),d.createElement("h3",{style:{fontStyle:"italic"}},r),a?d.createElement("pre",{style:s},a):null,f)}var F3=d.createElement(Y3,null),Zb=class extends d.Component{constructor(t){super(t),this.state={location:t.location,revalidation:t.revalidation,error:t.error}}static getDerivedStateFromError(t){return{error:t}}static getDerivedStateFromProps(t,r){return r.location!==t.location||r.revalidation!=="idle"&&t.revalidation==="idle"?{error:t.error,location:t.location,revalidation:t.revalidation}:{error:t.error!==void 0?t.error:r.error,location:r.location,revalidation:t.revalidation||r.revalidation}}componentDidCatch(t,r){this.props.onError?this.props.onError(t,r):console.error("React Router caught the following error during render",t)}render(){let t=this.state.error;if(this.context&&typeof t=="object"&&t&&"digest"in t&&typeof t.digest=="string"){const a=$3(t.digest);a&&(t=a)}let r=t!==void 0?d.createElement(Wn.Provider,{value:this.props.routeContext},d.createElement(hp.Provider,{value:t,children:this.props.component})):this.props.children;return this.context?d.createElement(W3,{error:t},r):r}};Zb.contextType=Yb;var im=new WeakMap;function W3({children:t,error:r}){let{basename:a}=d.useContext(gn);if(typeof r=="object"&&r&&"digest"in r&&typeof r.digest=="string"){let o=B3(r.digest);if(o){let s=im.get(r);if(s)throw s;let c=Vb(o.location,a);if(Ib&&!im.get(r))if(c.isExternal||o.reloadDocument)window.location.href=c.absoluteURL||c.to;else{const f=Promise.resolve().then(()=>window.__reactRouterDataRouter.navigate(c.to,{replace:o.replace}));throw im.set(r,f),f}return d.createElement("meta",{httpEquiv:"refresh",content:`0;url=${c.absoluteURL||c.to}`})}}return t}function q3({routeContext:t,match:r,children:a}){let o=d.useContext(sl);return o&&o.static&&o.staticContext&&(r.route.errorElement||r.route.ErrorBoundary)&&(o.staticContext._deepestRenderedBoundaryId=r.route.id),d.createElement(Wn.Provider,{value:t},a)}function X3(t,r=[],a){let o=a==null?void 0:a.state;if(t==null){if(!o)return null;if(o.errors)t=o.matches;else if(r.length===0&&!o.initialized&&o.matches.length>0)t=o.matches;else return null}let s=t,c=o==null?void 0:o.errors;if(c!=null){let b=s.findIndex(v=>v.route.id&&(c==null?void 0:c[v.route.id])!==void 0);at(b>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(c).join(",")}`),s=s.slice(0,Math.min(s.length,b+1))}let f=!1,m=-1;if(a&&o){f=o.renderFallback;for(let b=0;b=0?s=s.slice(0,m+1):s=[s[0]];break}}}}let g=a==null?void 0:a.onError,h=o&&g?(b,v)=>{var x,C;g(b,{location:o.location,params:((C=(x=o.matches)==null?void 0:x[0])==null?void 0:C.params)??{},pattern:M3(o.matches),errorInfo:v})}:void 0;return s.reduceRight((b,v,x)=>{let C,E=!1,w=null,j=null;o&&(C=c&&v.route.id?c[v.route.id]:void 0,w=v.route.errorElement||F3,f&&(m<0&&x===0?(Qb("route-fallback",!1,"No `HydrateFallback` element provided to render during initial hydration"),E=!0,j=null):m===x&&(E=!0,j=v.route.hydrateFallbackElement||null)));let N=r.concat(s.slice(0,x+1)),A=()=>{let k;return C?k=w:E?k=j:v.route.Component?k=d.createElement(v.route.Component,null):v.route.element?k=v.route.element:k=b,d.createElement(q3,{match:v,routeContext:{outlet:b,matches:N,isDataRoute:o!=null},children:k})};return o&&(v.route.ErrorBoundary||v.route.errorElement||x===0)?d.createElement(Zb,{location:o.location,revalidation:o.revalidation,component:w,error:C,children:A(),routeContext:{outlet:null,matches:N,isDataRoute:!0},onError:h}):A()},null)}function gp(t){return`${t} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function K3(t){let r=d.useContext(sl);return at(r,gp(t)),r}function Z3(t){let r=d.useContext(tu);return at(r,gp(t)),r}function Q3(t){let r=d.useContext(Wn);return at(r,gp(t)),r}function vp(t){let r=Q3(t),a=r.matches[r.matches.length-1];return at(a.route.id,`${t} can only be used on routes that contain a unique "id"`),a.route.id}function J3(){return vp("useRouteId")}function e4(){var o;let t=d.useContext(hp),r=Z3("useRouteError"),a=vp("useRouteError");return t!==void 0?t:(o=r.errors)==null?void 0:o[a]}function t4(){let{router:t}=K3("useNavigate"),r=vp("useNavigate"),a=d.useRef(!1);return Xb(()=>{a.current=!0}),d.useCallback(async(s,c={})=>{On(a.current,qb),a.current&&(typeof s=="number"?await t.navigate(s):await t.navigate(s,{fromRouteId:r,...c}))},[t,r])}var A1={};function Qb(t,r,a){!r&&!A1[t]&&(A1[t]=!0,On(!1,a))}d.memo(n4);function n4({routes:t,manifest:r,future:a,state:o,isStatic:s,onError:c}){return Kb(t,void 0,{manifest:r,state:o,isStatic:s,onError:c})}function Ga({to:t,replace:r,state:a,relative:o}){at(il()," may be used only in the context of a component.");let{static:s}=d.useContext(gn);On(!s," 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:c}=d.useContext(Wn),{pathname:f}=Dn(),m=cl(),g=eu(t,pp(c),f,o==="path"),h=JSON.stringify(g);return d.useEffect(()=>{m(JSON.parse(h),{replace:r,state:a,relative:o})},[m,h,o,r,a]),null}function r4(t){return V3(t.context)}function In(t){at(!1,"A is only ever to be used as the child of element, never rendered directly. Please wrap your in a .")}function a4({basename:t="/",children:r=null,location:a,navigationType:o="POP",navigator:s,static:c=!1,useTransitions:f}){at(!il(),"You cannot render a inside another . You should never have more than one in your app.");let m=t.replace(/^\/*/,"/"),g=d.useMemo(()=>({basename:m,navigator:s,static:c,useTransitions:f,future:{}}),[m,s,c,f]);typeof a=="string"&&(a=ll(a));let{pathname:h="/",search:b="",hash:v="",state:x=null,key:C="default",mask:E}=a,w=d.useMemo(()=>{let j=kr(h,m);return j==null?null:{location:{pathname:j,search:b,hash:v,state:x,key:C,mask:E},navigationType:o}},[m,h,b,v,x,C,o,E]);return On(w!=null,` is not able to match the URL "${h}${b}${v}" because it does not start with the basename, so the won't render anything.`),w==null?null:d.createElement(gn.Provider,{value:g},d.createElement(Bs.Provider,{children:r,value:w}))}function o4({children:t,location:r}){return G3(Om(t),r)}function Om(t,r=[]){let a=[];return d.Children.forEach(t,(o,s)=>{if(!d.isValidElement(o))return;let c=[...r,s];if(o.type===d.Fragment){a.push.apply(a,Om(o.props.children,c));return}at(o.type===In,`[${typeof o.type=="string"?o.type:o.type.name}] is not a component. All component children of must be a or `),at(!o.props.index||!o.props.children,"An index route cannot have child routes.");let f={id:o.props.id||c.join("-"),caseSensitive:o.props.caseSensitive,element:o.props.element,Component:o.props.Component,index:o.props.index,path:o.props.path,middleware:o.props.middleware,loader:o.props.loader,action:o.props.action,hydrateFallbackElement:o.props.hydrateFallbackElement,HydrateFallback:o.props.HydrateFallback,errorElement:o.props.errorElement,ErrorBoundary:o.props.ErrorBoundary,hasErrorBoundary:o.props.hasErrorBoundary===!0||o.props.ErrorBoundary!=null||o.props.errorElement!=null,shouldRevalidate:o.props.shouldRevalidate,handle:o.props.handle,lazy:o.props.lazy};o.props.children&&(f.children=Om(o.props.children,c)),a.push(f)}),a}var Ac="get",kc="application/x-www-form-urlencoded";function nu(t){return typeof HTMLElement<"u"&&t instanceof HTMLElement}function l4(t){return nu(t)&&t.tagName.toLowerCase()==="button"}function s4(t){return nu(t)&&t.tagName.toLowerCase()==="form"}function i4(t){return nu(t)&&t.tagName.toLowerCase()==="input"}function c4(t){return!!(t.metaKey||t.altKey||t.ctrlKey||t.shiftKey)}function u4(t,r){return t.button===0&&(!r||r==="_self")&&!c4(t)}function Dm(t=""){return new URLSearchParams(typeof t=="string"||Array.isArray(t)||t instanceof URLSearchParams?t:Object.keys(t).reduce((r,a)=>{let o=t[a];return r.concat(Array.isArray(o)?o.map(s=>[a,s]):[[a,o]])},[]))}function d4(t,r){let a=Dm(t);return r&&r.forEach((o,s)=>{a.has(s)||r.getAll(s).forEach(c=>{a.append(s,c)})}),a}var yc=null;function f4(){if(yc===null)try{new FormData(document.createElement("form"),0),yc=!1}catch{yc=!0}return yc}var m4=new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);function cm(t){return t!=null&&!m4.has(t)?(On(!1,`"${t}" is not a valid \`encType\` for \`\`/\`\` and will default to "${kc}"`),null):t}function p4(t,r){let a,o,s,c,f;if(s4(t)){let m=t.getAttribute("action");o=m?kr(m,r):null,a=t.getAttribute("method")||Ac,s=cm(t.getAttribute("enctype"))||kc,c=new FormData(t)}else if(l4(t)||i4(t)&&(t.type==="submit"||t.type==="image")){let m=t.form;if(m==null)throw new Error('Cannot submit a