diff --git a/.env.example b/.env.example index 21a74f820e..fafbb84563 100644 --- a/.env.example +++ b/.env.example @@ -263,6 +263,33 @@ WORLDMONITOR_VALID_KEYS= # Set up at: https://dashboard.convex.dev/ CONVEX_URL= +# Vite-exposed Convex URL for frontend entitlement service (VITE_ prefix required for client-side access) +VITE_CONVEX_URL= + + +# ------ Dodo Payments (Convex + Vercel) ------ + +# Dodo Payments API key (test mode or live mode) +# Canonical name: DODO_API_KEY (used by convex/lib/dodo.ts and billing actions) +# Get yours at: https://app.dodopayments.com/ -> Settings -> API Keys +DODO_API_KEY= + +# Dodo Payments webhook secret for signature verification +# NOTE: The @dodopayments/convex library reads DODO_PAYMENTS_WEBHOOK_SECRET internally. +# Set BOTH this value AND DODO_PAYMENTS_WEBHOOK_SECRET to the same secret. +# Get it at: https://app.dodopayments.com/ -> Developers -> Webhooks +DODO_WEBHOOK_SECRET= +DODO_PAYMENTS_WEBHOOK_SECRET= + +# Dodo Payments business ID +# Found at: https://app.dodopayments.com/ -> Settings +DODO_BUSINESS_ID= + +# Dodo Payments environment for client-side checkout overlay +# Values: "test_mode" (default) or "live_mode" +VITE_DODO_ENVIRONMENT=test_mode + + # ------ Auth (Clerk) ------ # Clerk publishable key (browser-side, safe to expose) @@ -273,7 +300,9 @@ VITE_CLERK_PUBLISHABLE_KEY= # Get from: Clerk Dashboard -> API Keys CLERK_SECRET_KEY= -# Clerk JWT issuer domain (for Convex auth config) +# Clerk JWT issuer domain — enables bearer token auth in the API gateway. +# When set, the gateway verifies Authorization: Bearer headers using +# Clerk's JWKS endpoint and extracts the userId for entitlement checks. # Format: https://your-clerk-app.clerk.accounts.dev CLERK_JWT_ISSUER_DOMAIN= diff --git a/convex/__tests__/checkout.test.ts b/convex/__tests__/checkout.test.ts new file mode 100644 index 0000000000..78417ff208 --- /dev/null +++ b/convex/__tests__/checkout.test.ts @@ -0,0 +1,214 @@ +import { convexTest } from "convex-test"; +import { expect, test, describe } from "vitest"; +import schema from "../schema"; +import { api, internal } from "../_generated/api"; + +const modules = import.meta.glob("../**/*.ts"); + +// --------------------------------------------------------------------------- +// Helpers +// --------------------------------------------------------------------------- + +const BASE_TIMESTAMP = new Date("2026-03-21T10:00:00Z").getTime(); +const TEST_USER_ID = "user_checkout_test_001"; +const TEST_CUSTOMER_ID = "cust_checkout_e2e"; + +/** + * Helper to call the seedProductPlans mutation and return plans list. + */ +async function seedAndListPlans(t: ReturnType) { + await t.mutation(api.payments.seedProductPlans.seedProductPlans, {}); + return t.query(api.payments.seedProductPlans.listProductPlans, {}); +} + +/** + * Helper to seed a customer record that maps dodoCustomerId to userId. + * This mirrors the production flow where checkout metadata or a prior + * subscription.active event populates the customers table. + */ +async function seedCustomer(t: ReturnType) { + await t.run(async (ctx) => { + await ctx.db.insert("customers", { + userId: TEST_USER_ID, + dodoCustomerId: TEST_CUSTOMER_ID, + email: "test@example.com", + createdAt: BASE_TIMESTAMP, + updatedAt: BASE_TIMESTAMP, + }); + }); +} + +/** + * Helper to simulate a subscription webhook event. + * Includes wm_user_id in metadata (matching production checkout flow). + */ +async function simulateSubscriptionWebhook( + t: ReturnType, + opts: { + webhookId: string; + subscriptionId: string; + productId: string; + customerId?: string; + previousBillingDate?: string; + nextBillingDate?: string; + timestamp?: number; + }, +) { + await t.mutation( + internal.payments.webhookMutations.processWebhookEvent, + { + webhookId: opts.webhookId, + eventType: "subscription.active", + rawPayload: { + type: "subscription.active", + data: { + subscription_id: opts.subscriptionId, + product_id: opts.productId, + customer: { + customer_id: opts.customerId ?? TEST_CUSTOMER_ID, + }, + previous_billing_date: + opts.previousBillingDate ?? new Date().toISOString(), + next_billing_date: + opts.nextBillingDate ?? + new Date(Date.now() + 30 * 24 * 60 * 60 * 1000).toISOString(), + metadata: { + wm_user_id: TEST_USER_ID, + }, + }, + }, + timestamp: opts.timestamp ?? BASE_TIMESTAMP, + }, + ); +} + +// --------------------------------------------------------------------------- +// E2E Contract Tests: Checkout -> Webhook -> Entitlements +// --------------------------------------------------------------------------- + +describe("E2E checkout-to-entitlement contract", () => { + test("product plans can be seeded and queried", async () => { + const t = convexTest(schema, modules); + + const plans = await seedAndListPlans(t); + + // Should have at least 5 plans: pro_monthly, pro_annual, api_starter, api_business, enterprise + expect(plans.length).toBeGreaterThanOrEqual(5); + + // Verify key plans exist + const proMonthly = plans.find((p) => p.planKey === "pro_monthly"); + expect(proMonthly).toBeDefined(); + expect(proMonthly!.displayName).toBe("Pro Monthly"); + + const proAnnual = plans.find((p) => p.planKey === "pro_annual"); + expect(proAnnual).toBeDefined(); + expect(proAnnual!.displayName).toBe("Pro Annual"); + + const apiStarter = plans.find((p) => p.planKey === "api_starter"); + expect(apiStarter).toBeDefined(); + + const apiBusiness = plans.find((p) => p.planKey === "api_business"); + expect(apiBusiness).toBeDefined(); + + const enterprise = plans.find((p) => p.planKey === "enterprise"); + expect(enterprise).toBeDefined(); + }); + + test("checkout -> subscription.active webhook -> entitlements granted for pro_monthly", async () => { + const t = convexTest(schema, modules); + + // Step 1: Seed product plans + customer mapping + const plans = await seedAndListPlans(t); + await seedCustomer(t); + const proMonthly = plans.find((p) => p.planKey === "pro_monthly"); + expect(proMonthly).toBeDefined(); + + // Step 2: Simulate subscription.active webhook (with wm_user_id metadata) + const futureDate = new Date(Date.now() + 30 * 24 * 60 * 60 * 1000); + await simulateSubscriptionWebhook(t, { + webhookId: "wh_checkout_e2e_001", + subscriptionId: "sub_checkout_e2e_001", + productId: proMonthly!.dodoProductId, + nextBillingDate: futureDate.toISOString(), + }); + + // Step 3: Query entitlements for the real user (not fallback) + const entitlements = await t.query( + api.entitlements.getEntitlementsForUser, + { userId: TEST_USER_ID }, + ); + + // Step 4: Assert pro_monthly entitlements + expect(entitlements.planKey).toBe("pro_monthly"); + expect(entitlements.features.tier).toBe(1); + expect(entitlements.features.apiAccess).toBe(false); + expect(entitlements.features.maxDashboards).toBe(10); + }); + + test("checkout -> subscription.active webhook -> entitlements granted for api_starter", async () => { + const t = convexTest(schema, modules); + + // Step 1: Seed product plans + customer mapping + const plans = await seedAndListPlans(t); + await seedCustomer(t); + const apiStarter = plans.find((p) => p.planKey === "api_starter"); + expect(apiStarter).toBeDefined(); + + // Step 2: Simulate subscription.active webhook + const futureDate = new Date(Date.now() + 30 * 24 * 60 * 60 * 1000); + await simulateSubscriptionWebhook(t, { + webhookId: "wh_checkout_e2e_002", + subscriptionId: "sub_checkout_e2e_002", + productId: apiStarter!.dodoProductId, + nextBillingDate: futureDate.toISOString(), + }); + + // Step 3: Query entitlements + const entitlements = await t.query( + api.entitlements.getEntitlementsForUser, + { userId: TEST_USER_ID }, + ); + + // Step 4: Assert api_starter entitlements + expect(entitlements.planKey).toBe("api_starter"); + expect(entitlements.features.tier).toBe(2); + expect(entitlements.features.apiAccess).toBe(true); + expect(entitlements.features.apiRateLimit).toBeGreaterThan(0); + expect(entitlements.features.apiRateLimit).toBe(60); + expect(entitlements.features.maxDashboards).toBe(25); + }); + + test("expired entitlements fall back to free tier", async () => { + const t = convexTest(schema, modules); + + // Step 1: Seed product plans + customer mapping + const plans = await seedAndListPlans(t); + await seedCustomer(t); + const proMonthly = plans.find((p) => p.planKey === "pro_monthly"); + expect(proMonthly).toBeDefined(); + + // Step 2: Simulate webhook with billing dates both in the past (expired) + const pastStart = new Date(Date.now() - 60 * 24 * 60 * 60 * 1000); // 60 days ago + const pastEnd = new Date(Date.now() - 1 * 24 * 60 * 60 * 1000); // 1 day ago + + await simulateSubscriptionWebhook(t, { + webhookId: "wh_checkout_e2e_003", + subscriptionId: "sub_checkout_e2e_003", + productId: proMonthly!.dodoProductId, + previousBillingDate: pastStart.toISOString(), + nextBillingDate: pastEnd.toISOString(), + }); + + // Step 3: Query entitlements -- should return free tier (expired) + const entitlements = await t.query( + api.entitlements.getEntitlementsForUser, + { userId: TEST_USER_ID }, + ); + + // Step 4: Assert free tier defaults + expect(entitlements.planKey).toBe("free"); + expect(entitlements.features.tier).toBe(0); + expect(entitlements.features.apiAccess).toBe(false); + expect(entitlements.validUntil).toBe(0); + }); +}); diff --git a/convex/__tests__/entitlements.test.ts b/convex/__tests__/entitlements.test.ts new file mode 100644 index 0000000000..20c65c60bf --- /dev/null +++ b/convex/__tests__/entitlements.test.ts @@ -0,0 +1,133 @@ +import { convexTest } from "convex-test"; +import { expect, test, describe } from "vitest"; +import schema from "../schema"; +import { api } from "../_generated/api"; +import { getFeaturesForPlan } from "../lib/entitlements"; + +const modules = import.meta.glob("../**/*.ts"); + +// --------------------------------------------------------------------------- +// Helpers +// --------------------------------------------------------------------------- + +const NOW = Date.now(); +const FUTURE = NOW + 86400000 * 30; // 30 days from now +const PAST = NOW - 86400000; // 1 day ago + +async function seedEntitlement( + t: ReturnType, + overrides: { + userId?: string; + planKey?: string; + validUntil?: number; + updatedAt?: number; + } = {}, +) { + const planKey = overrides.planKey ?? "pro_monthly"; + await t.run(async (ctx) => { + await ctx.db.insert("entitlements", { + userId: overrides.userId ?? "user-test", + planKey, + features: getFeaturesForPlan(planKey), + validUntil: overrides.validUntil ?? FUTURE, + updatedAt: overrides.updatedAt ?? NOW, + }); + }); +} + +// --------------------------------------------------------------------------- +// Tests +// --------------------------------------------------------------------------- + +describe("entitlement query", () => { + test("returns free-tier defaults for unknown userId", async () => { + const t = convexTest(schema, modules); + + const result = await t.query(api.entitlements.getEntitlementsForUser, { + userId: "user-nonexistent", + }); + + expect(result.planKey).toBe("free"); + expect(result.features.tier).toBe(0); + expect(result.features.apiAccess).toBe(false); + expect(result.validUntil).toBe(0); + }); + + test("returns active entitlements for subscribed user", async () => { + const t = convexTest(schema, modules); + + await seedEntitlement(t, { + userId: "user-pro", + planKey: "pro_monthly", + validUntil: FUTURE, + }); + + const result = await t.query(api.entitlements.getEntitlementsForUser, { + userId: "user-pro", + }); + + expect(result.planKey).toBe("pro_monthly"); + expect(result.features.tier).toBe(1); + expect(result.features.apiAccess).toBe(false); + }); + + test("returns free-tier for expired entitlements", async () => { + const t = convexTest(schema, modules); + + await seedEntitlement(t, { + userId: "user-expired", + planKey: "pro_monthly", + validUntil: PAST, + }); + + const result = await t.query(api.entitlements.getEntitlementsForUser, { + userId: "user-expired", + }); + + expect(result.planKey).toBe("free"); + expect(result.features.tier).toBe(0); + expect(result.features.apiAccess).toBe(false); + expect(result.validUntil).toBe(0); + }); + + test("returns correct tier for api_starter plan", async () => { + const t = convexTest(schema, modules); + + await seedEntitlement(t, { + userId: "user-api", + planKey: "api_starter", + validUntil: FUTURE, + }); + + const result = await t.query(api.entitlements.getEntitlementsForUser, { + userId: "user-api", + }); + + expect(result.features.tier).toBe(2); + expect(result.features.apiAccess).toBe(true); + }); + + test("returns correct tier for enterprise plan", async () => { + const t = convexTest(schema, modules); + + await seedEntitlement(t, { + userId: "user-enterprise", + planKey: "enterprise", + validUntil: FUTURE, + }); + + const result = await t.query(api.entitlements.getEntitlementsForUser, { + userId: "user-enterprise", + }); + + expect(result.features.tier).toBe(3); + expect(result.features.apiAccess).toBe(true); + expect(result.features.prioritySupport).toBe(true); + }); + + test("getFeaturesForPlan throws on unknown plan key", () => { + expect(() => getFeaturesForPlan("nonexistent_plan")).toThrow( + /Unknown planKey "nonexistent_plan"/, + ); + }); +}); diff --git a/convex/__tests__/webhook.test.ts b/convex/__tests__/webhook.test.ts new file mode 100644 index 0000000000..07116e90d6 --- /dev/null +++ b/convex/__tests__/webhook.test.ts @@ -0,0 +1,470 @@ +import { convexTest } from "convex-test"; +import { expect, test, describe } from "vitest"; +import schema from "../schema"; +import { internal } from "../_generated/api"; + +const modules = import.meta.glob("../**/*.ts"); + +// --------------------------------------------------------------------------- +// Payload helpers +// --------------------------------------------------------------------------- + +function makeSubscriptionPayload(overrides: Record = {}) { + return { + type: "subscription.active", + business_id: "biz_test", + timestamp: "2026-03-21T10:00:00Z", + data: { + payload_type: "Subscription", + subscription_id: "sub_test_001", + product_id: "pdt_test_pro", + status: "active", + customer: { + customer_id: "cust_test_001", + email: "test@example.com", + name: "Test User", + }, + metadata: { wm_user_id: "test-user-001" }, + previous_billing_date: "2026-03-21T00:00:00Z", + next_billing_date: "2026-04-21T00:00:00Z", + ...overrides, + }, + }; +} + +function makePaymentPayload( + eventType: "payment.succeeded" | "payment.failed", + overrides: Record = {}, +) { + return { + type: eventType, + business_id: "biz_test", + timestamp: "2026-03-21T10:00:00Z", + data: { + payload_type: "Payment", + payment_id: "pay_test_001", + subscription_id: "sub_test_001", + total_amount: 1999, + currency: "USD", + customer: { + customer_id: "cust_test_001", + email: "test@example.com", + name: "Test User", + }, + metadata: { wm_user_id: "test-user-001" }, + ...overrides, + }, + }; +} + +const BASE_TIMESTAMP = new Date("2026-03-21T10:00:00Z").getTime(); + +// --------------------------------------------------------------------------- +// Helper: seed a productPlans mapping +// --------------------------------------------------------------------------- + +async function seedProductPlan( + t: ReturnType, + dodoProductId: string, + planKey: string, + displayName: string, +) { + await t.run(async (ctx) => { + await ctx.db.insert("productPlans", { + dodoProductId, + planKey, + displayName, + isActive: true, + }); + }); +} + +// --------------------------------------------------------------------------- +// Helper: call processWebhookEvent +// --------------------------------------------------------------------------- + +async function processEvent( + t: ReturnType, + webhookId: string, + eventType: string, + rawPayload: Record, + timestamp: number, +) { + await t.mutation( + internal.payments.webhookMutations.processWebhookEvent, + { + webhookId, + eventType, + rawPayload, + timestamp, + }, + ); +} + +// --------------------------------------------------------------------------- +// Tests +// --------------------------------------------------------------------------- + +describe("webhook processWebhookEvent", () => { + test("subscription.active creates new subscription", async () => { + const t = convexTest(schema, modules); + + await seedProductPlan(t, "pdt_test_pro", "pro_monthly", "Pro Monthly"); + + const payload = makeSubscriptionPayload(); + await processEvent(t, "wh_001", "subscription.active", payload, BASE_TIMESTAMP); + + // Assert subscription record + const subs = await t.run(async (ctx) => { + return ctx.db.query("subscriptions").collect(); + }); + expect(subs).toHaveLength(1); + expect(subs[0].status).toBe("active"); + expect(subs[0].planKey).toBe("pro_monthly"); + expect(subs[0].dodoSubscriptionId).toBe("sub_test_001"); + expect(subs[0].currentPeriodStart).toBe( + new Date("2026-03-21T00:00:00Z").getTime(), + ); + expect(subs[0].currentPeriodEnd).toBe( + new Date("2026-04-21T00:00:00Z").getTime(), + ); + + // Assert entitlements record + const entitlements = await t.run(async (ctx) => { + return ctx.db.query("entitlements").collect(); + }); + expect(entitlements).toHaveLength(1); + expect(entitlements[0].planKey).toBe("pro_monthly"); + expect(entitlements[0].features).toMatchObject({ + maxDashboards: 10, + apiAccess: false, + }); + + // Assert webhookEvents record + const events = await t.run(async (ctx) => { + return ctx.db.query("webhookEvents").collect(); + }); + expect(events).toHaveLength(1); + expect(events[0].status).toBe("processed"); + expect(events[0].eventType).toBe("subscription.active"); + }); + + test("subscription.active reactivates existing cancelled subscription", async () => { + const t = convexTest(schema, modules); + + await seedProductPlan(t, "pdt_test_pro", "pro_monthly", "Pro Monthly"); + + // Seed a cancelled subscription manually + await t.run(async (ctx) => { + await ctx.db.insert("subscriptions", { + userId: "test-user-001", + dodoSubscriptionId: "sub_test_001", + dodoProductId: "pdt_test_pro", + planKey: "pro_monthly", + status: "cancelled", + currentPeriodStart: BASE_TIMESTAMP - 86400000, + currentPeriodEnd: BASE_TIMESTAMP, + cancelledAt: BASE_TIMESTAMP - 3600000, + rawPayload: {}, + updatedAt: BASE_TIMESTAMP - 86400000, + }); + }); + + const payload = makeSubscriptionPayload(); + await processEvent(t, "wh_002", "subscription.active", payload, BASE_TIMESTAMP); + + // Assert only 1 subscription (updated, not duplicated) + const subs = await t.run(async (ctx) => { + return ctx.db.query("subscriptions").collect(); + }); + expect(subs).toHaveLength(1); + expect(subs[0].status).toBe("active"); + }); + + test("subscription.renewed extends billing period", async () => { + const t = convexTest(schema, modules); + + await seedProductPlan(t, "pdt_test_pro", "pro_monthly", "Pro Monthly"); + + // Create active subscription via subscription.active event + const activatePayload = makeSubscriptionPayload(); + await processEvent( + t, + "wh_003", + "subscription.active", + activatePayload, + BASE_TIMESTAMP, + ); + + // Renew with new billing dates + const renewPayload = makeSubscriptionPayload({ + previous_billing_date: "2026-04-21T00:00:00Z", + next_billing_date: "2026-05-21T00:00:00Z", + }); + await processEvent( + t, + "wh_004", + "subscription.renewed", + renewPayload, + BASE_TIMESTAMP + 1000, + ); + + const subs = await t.run(async (ctx) => { + return ctx.db.query("subscriptions").collect(); + }); + expect(subs).toHaveLength(1); + expect(subs[0].currentPeriodStart).toBe( + new Date("2026-04-21T00:00:00Z").getTime(), + ); + expect(subs[0].currentPeriodEnd).toBe( + new Date("2026-05-21T00:00:00Z").getTime(), + ); + + // Assert entitlements validUntil extended + const entitlements = await t.run(async (ctx) => { + return ctx.db.query("entitlements").collect(); + }); + expect(entitlements).toHaveLength(1); + expect(entitlements[0].validUntil).toBe( + new Date("2026-05-21T00:00:00Z").getTime(), + ); + }); + + test("subscription.on_hold marks subscription at-risk without revoking entitlements", async () => { + const t = convexTest(schema, modules); + + await seedProductPlan(t, "pdt_test_pro", "pro_monthly", "Pro Monthly"); + + // Create active subscription + const activatePayload = makeSubscriptionPayload(); + await processEvent( + t, + "wh_005", + "subscription.active", + activatePayload, + BASE_TIMESTAMP, + ); + + // Put on hold + const onHoldPayload = makeSubscriptionPayload(); + await processEvent( + t, + "wh_006", + "subscription.on_hold", + onHoldPayload, + BASE_TIMESTAMP + 1000, + ); + + const subs = await t.run(async (ctx) => { + return ctx.db.query("subscriptions").collect(); + }); + expect(subs).toHaveLength(1); + expect(subs[0].status).toBe("on_hold"); + + // Entitlements still exist (NOT revoked) + const entitlements = await t.run(async (ctx) => { + return ctx.db.query("entitlements").collect(); + }); + expect(entitlements).toHaveLength(1); + expect(entitlements[0].planKey).toBe("pro_monthly"); + }); + + test("subscription.cancelled preserves entitlements until period end", async () => { + const t = convexTest(schema, modules); + + await seedProductPlan(t, "pdt_test_pro", "pro_monthly", "Pro Monthly"); + + // Create active subscription + const activatePayload = makeSubscriptionPayload(); + await processEvent( + t, + "wh_007", + "subscription.active", + activatePayload, + BASE_TIMESTAMP, + ); + + // Cancel + const cancelPayload = makeSubscriptionPayload({ + cancelled_at: "2026-03-25T10:00:00Z", + }); + await processEvent( + t, + "wh_008", + "subscription.cancelled", + cancelPayload, + BASE_TIMESTAMP + 1000, + ); + + const subs = await t.run(async (ctx) => { + return ctx.db.query("subscriptions").collect(); + }); + expect(subs).toHaveLength(1); + expect(subs[0].status).toBe("cancelled"); + expect(subs[0].cancelledAt).toBe( + new Date("2026-03-25T10:00:00Z").getTime(), + ); + + // Entitlements still exist with original validUntil (NOT revoked early) + const entitlements = await t.run(async (ctx) => { + return ctx.db.query("entitlements").collect(); + }); + expect(entitlements).toHaveLength(1); + expect(entitlements[0].validUntil).toBe( + new Date("2026-04-21T00:00:00Z").getTime(), + ); + }); + + test("subscription.plan_changed updates product and entitlements", async () => { + const t = convexTest(schema, modules); + + // Seed TWO product plans + await seedProductPlan(t, "pdt_test_pro", "pro_monthly", "Pro Monthly"); + await seedProductPlan(t, "pdt_test_api", "api_starter", "API Starter"); + + // Create active subscription with pro_monthly + const activatePayload = makeSubscriptionPayload(); + await processEvent( + t, + "wh_009", + "subscription.active", + activatePayload, + BASE_TIMESTAMP, + ); + + // Change plan to api_starter + const planChangePayload = makeSubscriptionPayload({ + product_id: "pdt_test_api", + }); + await processEvent( + t, + "wh_010", + "subscription.plan_changed", + planChangePayload, + BASE_TIMESTAMP + 1000, + ); + + const subs = await t.run(async (ctx) => { + return ctx.db.query("subscriptions").collect(); + }); + expect(subs).toHaveLength(1); + expect(subs[0].dodoProductId).toBe("pdt_test_api"); + expect(subs[0].planKey).toBe("api_starter"); + + // Entitlements should match api_starter features + const entitlements = await t.run(async (ctx) => { + return ctx.db.query("entitlements").collect(); + }); + expect(entitlements).toHaveLength(1); + expect(entitlements[0].planKey).toBe("api_starter"); + expect(entitlements[0].features).toMatchObject({ + apiAccess: true, + apiRateLimit: 60, + maxDashboards: 25, + }); + }); + + test("payment.succeeded creates audit record", async () => { + const t = convexTest(schema, modules); + + const payload = makePaymentPayload("payment.succeeded"); + await processEvent( + t, + "wh_011", + "payment.succeeded", + payload, + BASE_TIMESTAMP, + ); + + const paymentEvents = await t.run(async (ctx) => { + return ctx.db.query("paymentEvents").collect(); + }); + expect(paymentEvents).toHaveLength(1); + expect(paymentEvents[0].status).toBe("succeeded"); + expect(paymentEvents[0].amount).toBe(1999); + expect(paymentEvents[0].currency).toBe("USD"); + expect(paymentEvents[0].type).toBe("charge"); + }); + + test("payment.failed creates audit record", async () => { + const t = convexTest(schema, modules); + + const payload = makePaymentPayload("payment.failed"); + await processEvent( + t, + "wh_012", + "payment.failed", + payload, + BASE_TIMESTAMP, + ); + + const paymentEvents = await t.run(async (ctx) => { + return ctx.db.query("paymentEvents").collect(); + }); + expect(paymentEvents).toHaveLength(1); + expect(paymentEvents[0].status).toBe("failed"); + }); + + test("duplicate webhook-id is deduplicated", async () => { + const t = convexTest(schema, modules); + + await seedProductPlan(t, "pdt_test_pro", "pro_monthly", "Pro Monthly"); + + const payload = makeSubscriptionPayload(); + + // Call twice with the same webhookId + await processEvent(t, "wh_dup", "subscription.active", payload, BASE_TIMESTAMP); + await processEvent( + t, + "wh_dup", + "subscription.active", + payload, + BASE_TIMESTAMP + 1000, + ); + + // Only 1 webhookEvents record + const events = await t.run(async (ctx) => { + return ctx.db.query("webhookEvents").collect(); + }); + expect(events).toHaveLength(1); + + // Only 1 subscription record + const subs = await t.run(async (ctx) => { + return ctx.db.query("subscriptions").collect(); + }); + expect(subs).toHaveLength(1); + }); + + test("out-of-order events are rejected", async () => { + const t = convexTest(schema, modules); + + await seedProductPlan(t, "pdt_test_pro", "pro_monthly", "Pro Monthly"); + + // Create subscription with timestamp 1000 + const activatePayload = makeSubscriptionPayload(); + await processEvent( + t, + "wh_013", + "subscription.active", + activatePayload, + 1000, + ); + + // Try to put on_hold with timestamp 500 (older) + const onHoldPayload = makeSubscriptionPayload(); + await processEvent( + t, + "wh_014", + "subscription.on_hold", + onHoldPayload, + 500, + ); + + // Subscription status should still be "active" (older event ignored) + const subs = await t.run(async (ctx) => { + return ctx.db.query("subscriptions").collect(); + }); + expect(subs).toHaveLength(1); + expect(subs[0].status).toBe("active"); + }); +}); diff --git a/convex/_generated/api.d.ts b/convex/_generated/api.d.ts index 6cc6db9d56..010457f992 100644 --- a/convex/_generated/api.d.ts +++ b/convex/_generated/api.d.ts @@ -9,6 +9,19 @@ */ import type * as contactMessages from "../contactMessages.js"; +import type * as entitlements from "../entitlements.js"; +import type * as http from "../http.js"; +import type * as lib_auth from "../lib/auth.js"; +import type * as lib_dodo from "../lib/dodo.js"; +import type * as lib_entitlements from "../lib/entitlements.js"; +import type * as lib_env from "../lib/env.js"; +import type * as payments_billing from "../payments/billing.js"; +import type * as payments_cacheActions from "../payments/cacheActions.js"; +import type * as payments_checkout from "../payments/checkout.js"; +import type * as payments_seedProductPlans from "../payments/seedProductPlans.js"; +import type * as payments_subscriptionHelpers from "../payments/subscriptionHelpers.js"; +import type * as payments_webhookHandlers from "../payments/webhookHandlers.js"; +import type * as payments_webhookMutations from "../payments/webhookMutations.js"; import type * as registerInterest from "../registerInterest.js"; import type * as userPreferences from "../userPreferences.js"; import type * as notificationChannels from "../notificationChannels.js"; @@ -23,6 +36,19 @@ import type { declare const fullApi: ApiFromModules<{ contactMessages: typeof contactMessages; + entitlements: typeof entitlements; + http: typeof http; + "lib/auth": typeof lib_auth; + "lib/dodo": typeof lib_dodo; + "lib/entitlements": typeof lib_entitlements; + "lib/env": typeof lib_env; + "payments/billing": typeof payments_billing; + "payments/cacheActions": typeof payments_cacheActions; + "payments/checkout": typeof payments_checkout; + "payments/seedProductPlans": typeof payments_seedProductPlans; + "payments/subscriptionHelpers": typeof payments_subscriptionHelpers; + "payments/webhookHandlers": typeof payments_webhookHandlers; + "payments/webhookMutations": typeof payments_webhookMutations; registerInterest: typeof registerInterest; userPreferences: typeof userPreferences; notificationChannels: typeof notificationChannels; @@ -56,4 +82,78 @@ export declare const internal: FilterApi< FunctionReference >; -export declare const components: {}; +export declare const components: { + dodopayments: { + lib: { + checkout: FunctionReference< + "action", + "internal", + { + apiKey: string; + environment: "test_mode" | "live_mode"; + payload: { + allowed_payment_method_types?: Array; + billing_address?: { + city?: string; + country: string; + state?: string; + street?: string; + zipcode?: string; + }; + billing_currency?: string; + confirm?: boolean; + customer?: + | { email: string; name?: string; phone_number?: string } + | { customer_id: string }; + customization?: { + force_language?: string; + show_on_demand_tag?: boolean; + show_order_details?: boolean; + theme?: string; + }; + discount_code?: string; + feature_flags?: { + allow_currency_selection?: boolean; + allow_discount_code?: boolean; + allow_phone_number_collection?: boolean; + allow_tax_id?: boolean; + always_create_new_customer?: boolean; + }; + force_3ds?: boolean; + metadata?: Record; + product_cart: Array<{ + addons?: Array<{ addon_id: string; quantity: number }>; + amount?: number; + product_id: string; + quantity: number; + }>; + return_url?: string; + show_saved_payment_methods?: boolean; + subscription_data?: { + on_demand?: { + adaptive_currency_fees_inclusive?: boolean; + mandate_only: boolean; + product_currency?: string; + product_description?: string; + product_price?: number; + }; + trial_period_days?: number; + }; + }; + }, + { checkout_url: string } + >; + customerPortal: FunctionReference< + "action", + "internal", + { + apiKey: string; + dodoCustomerId: string; + environment: "test_mode" | "live_mode"; + send_email?: boolean; + }, + { portal_url: string } + >; + }; + }; +}; diff --git a/convex/convex.config.ts b/convex/convex.config.ts index 802c7d6bd1..861456afae 100644 --- a/convex/convex.config.ts +++ b/convex/convex.config.ts @@ -1,3 +1,8 @@ import { defineApp } from "convex/server"; +import dodopayments from "@dodopayments/convex/convex.config"; + const app = defineApp(); + +app.use(dodopayments); + export default app; diff --git a/convex/entitlements.ts b/convex/entitlements.ts new file mode 100644 index 0000000000..c77ab41d9c --- /dev/null +++ b/convex/entitlements.ts @@ -0,0 +1,50 @@ +/** + * Public entitlement queries for frontend subscriptions and gateway fallback. + * + * Returns the user's entitlements with free-tier defaults for unknown or + * expired users. Used by: + * - Frontend ConvexClient subscription for reactive panel gating + * - Gateway ConvexHttpClient as cache-miss fallback + */ + +import { query } from "./_generated/server"; +import { v } from "convex/values"; +import { getFeaturesForPlan } from "./lib/entitlements"; + +const FREE_TIER_DEFAULTS = { + planKey: "free" as const, + features: getFeaturesForPlan("free"), + validUntil: 0, +}; + +/** + * Returns the entitlements for a given userId. + * + * - No row found -> free-tier defaults + * - Row found but validUntil < now -> free-tier defaults (expired) + * - Row found and valid -> actual entitlements + */ +export const getEntitlementsForUser = query({ + args: { userId: v.string() }, + handler: async (ctx, args) => { + const entitlement = await ctx.db + .query("entitlements") + .withIndex("by_userId", (q) => q.eq("userId", args.userId)) + .unique(); + + if (!entitlement) { + return FREE_TIER_DEFAULTS; + } + + // Expired entitlements fall back to free tier (Pitfall 7 from research) + if (entitlement.validUntil < Date.now()) { + return FREE_TIER_DEFAULTS; + } + + return { + planKey: entitlement.planKey, + features: entitlement.features, + validUntil: entitlement.validUntil, + }; + }, +}); diff --git a/convex/http.ts b/convex/http.ts index 5be9edef2c..c0e72388d3 100644 --- a/convex/http.ts +++ b/convex/http.ts @@ -1,6 +1,7 @@ import { anyApi, httpRouter } from "convex/server"; import { httpAction } from "./_generated/server"; import { internal } from "./_generated/api"; +import { webhookHandler } from "./payments/webhookHandlers"; const TRUSTED = [ "https://worldmonitor.app", @@ -46,12 +47,20 @@ async function timingSafeEqualStrings(a: string, b: string): Promise { const aArr = new Uint8Array(sigA); const bArr = new Uint8Array(sigB); let diff = 0; - for (let i = 0; i < aArr.length; i++) diff |= aArr[i] ^ bArr[i]; + for (let i = 0; i < aArr.length; i++) diff |= (aArr[i] ?? 0) ^ (bArr[i] ?? 0); return diff === 0; } const http = httpRouter(); +// --- Dodo Payments webhook --- +http.route({ + path: "/dodopayments-webhook", + method: "POST", + handler: webhookHandler, +}); + +// --- User preferences --- http.route({ path: "/api/user-prefs", method: "OPTIONS", @@ -104,7 +113,7 @@ http.route({ try { const result = await ctx.runMutation( - anyApi.userPreferences.setPreferences, + anyApi.userPreferences!.setPreferences as any, { variant: body.variant, data: body.data, @@ -132,6 +141,7 @@ http.route({ }), }); +// --- Telegram pairing callback --- http.route({ path: "/api/telegram-pair-callback", method: "POST", @@ -173,7 +183,7 @@ http.route({ const match = text.match(/^\/start\s+([A-Za-z0-9_-]{40,50})$/); if (!match) return new Response("OK", { status: 200 }); - await ctx.runMutation(anyApi.notificationChannels.claimPairingToken, { + await ctx.runMutation(anyApi.notificationChannels!.claimPairingToken as any, { token: match[1], chatId, }); @@ -182,6 +192,7 @@ http.route({ }), }); +// --- Relay channels --- http.route({ path: "/relay/channels", method: "POST", diff --git a/convex/lib/auth.ts b/convex/lib/auth.ts new file mode 100644 index 0000000000..7c8ebbc173 --- /dev/null +++ b/convex/lib/auth.ts @@ -0,0 +1,49 @@ +import { QueryCtx, MutationCtx, ActionCtx } from "../_generated/server"; + +const DEV_USER_ID = "test-user-001"; + +/** + * True only when explicitly running `convex dev` (which sets CONVEX_IS_DEV). + * Never infer dev mode from missing env vars — that would make production + * behave like dev if CONVEX_CLOUD_URL happens to be unset. + */ +const isDev = process.env.CONVEX_IS_DEV === "true"; + +/** + * Returns the current user's ID, or null if unauthenticated. + * + * Resolution order: + * 1. Real auth identity from Clerk/Convex auth (ctx.auth.getUserIdentity) + * 2. Dev-only fallback to test-user-001 (only when CONVEX_IS_DEV=true) + * + * This is the sole entry point for resolving the current user — + * no Convex function should call auth APIs directly. + */ +export async function resolveUserId( + ctx: QueryCtx | MutationCtx | ActionCtx, +): Promise { + const identity = await ctx.auth.getUserIdentity(); + if (identity?.subject) { + return identity.subject; + } + + if (isDev) { + return DEV_USER_ID; + } + + return null; +} + +/** + * Returns the current user's ID or throws if unauthenticated. + * Use for mutations/actions that always require auth. + */ +export async function requireUserId( + ctx: QueryCtx | MutationCtx | ActionCtx, +): Promise { + const userId = await resolveUserId(ctx); + if (!userId) { + throw new Error("Authentication required"); + } + return userId; +} diff --git a/convex/lib/dodo.ts b/convex/lib/dodo.ts new file mode 100644 index 0000000000..5a6375f8fe --- /dev/null +++ b/convex/lib/dodo.ts @@ -0,0 +1,59 @@ +/** + * Shared DodoPayments configuration. + * + * Centralizes the DodoPayments component instance and API exports + * so that all Convex modules (checkout, billing, etc.) share the + * same config and API key handling. + * + * Config is read lazily (on first use) rather than at module scope, + * so missing env vars fail at the action boundary with a clear error + * instead of silently capturing empty values at import time. + * + * Canonical env var: DODO_API_KEY (set in Convex dashboard). + */ + +import { DodoPayments } from "@dodopayments/convex"; +import { components } from "../_generated/api"; + +let _instance: DodoPayments | null = null; + +function getDodoInstance(): DodoPayments { + if (_instance) return _instance; + + const apiKey = process.env.DODO_API_KEY; + if (!apiKey) { + throw new Error( + "[dodo] DODO_API_KEY is not set. " + + "Set it in the Convex dashboard environment variables.", + ); + } + + _instance = new DodoPayments(components.dodopayments, { + identify: async () => null, // Stub until real auth integration + apiKey, + environment: (process.env.DODO_PAYMENTS_ENVIRONMENT ?? "test_mode") as + | "test_mode" + | "live_mode", + }); + + return _instance; +} + +/** + * Lazily-initialized Dodo API accessors. + * Throws immediately if DODO_API_KEY is missing, so callers get a clear + * error at the action boundary rather than a cryptic SDK failure later. + */ +export function getDodoApi() { + return getDodoInstance().api(); +} + +/** Shorthand for checkout API. */ +export function checkout(...args: Parameters['checkout']>) { + return getDodoApi().checkout(...args); +} + +/** Shorthand for customer portal API. */ +export function customerPortal(...args: Parameters['customerPortal']>) { + return getDodoApi().customerPortal(...args); +} diff --git a/convex/lib/entitlements.ts b/convex/lib/entitlements.ts new file mode 100644 index 0000000000..2743393606 --- /dev/null +++ b/convex/lib/entitlements.ts @@ -0,0 +1,96 @@ +/** + * Plan-to-features configuration map. + * + * This is config, not code. To add a new plan, add an entry to PLAN_FEATURES. + * To add a new feature dimension, extend PlanFeatures and update each entry. + */ + +export type PlanFeatures = { + tier: number; // 0=free, 1=pro, 2=api, 3=enterprise — higher includes lower + maxDashboards: number; // -1 = unlimited + apiAccess: boolean; + apiRateLimit: number; // requests per minute, 0 = no access + prioritySupport: boolean; + exportFormats: string[]; +}; + +/** Free tier defaults -- used as fallback for unknown plan keys. */ +export const FREE_FEATURES: PlanFeatures = { + tier: 0, + maxDashboards: 3, + apiAccess: false, + apiRateLimit: 0, + prioritySupport: false, + exportFormats: ["csv"], +}; + +/** + * Maps plan keys to their entitled feature sets. + * + * Plan keys match the `planKey` field in the `productPlans` and + * `subscriptions` tables. + */ +export const PLAN_FEATURES: Record = { + free: FREE_FEATURES, + + pro_monthly: { + tier: 1, + maxDashboards: 10, + apiAccess: false, + apiRateLimit: 0, + prioritySupport: false, + exportFormats: ["csv", "pdf"], + }, + + pro_annual: { + tier: 1, + maxDashboards: 10, + apiAccess: false, + apiRateLimit: 0, + prioritySupport: false, + exportFormats: ["csv", "pdf"], + }, + + api_starter: { + tier: 2, + maxDashboards: 25, + apiAccess: true, + apiRateLimit: 60, + prioritySupport: false, + exportFormats: ["csv", "pdf", "json"], + }, + + api_business: { + tier: 2, + maxDashboards: 100, + apiAccess: true, + apiRateLimit: 300, + prioritySupport: true, + exportFormats: ["csv", "pdf", "json", "xlsx"], + }, + + enterprise: { + tier: 3, + maxDashboards: -1, + apiAccess: true, + apiRateLimit: 1000, + prioritySupport: true, + exportFormats: ["csv", "pdf", "json", "xlsx", "api-stream"], + }, +}; + +/** + * Returns the feature set for a given plan key. + * Throws on unrecognized keys so misconfigured products fail loudly + * instead of silently downgrading paid users to free tier. + */ +export function getFeaturesForPlan(planKey: string): PlanFeatures { + const features = PLAN_FEATURES[planKey]; + if (!features) { + throw new Error( + `[entitlements] Unknown planKey "${planKey}". ` + + `Add it to PLAN_FEATURES in convex/lib/entitlements.ts.`, + ); + } + return features; +} diff --git a/convex/lib/env.ts b/convex/lib/env.ts new file mode 100644 index 0000000000..3a3797300f --- /dev/null +++ b/convex/lib/env.ts @@ -0,0 +1,19 @@ +/** + * Read a required environment variable, throwing a clear error if missing. + * MUST be called inside function handlers, never at module scope. + * + * @example + * ```ts + * const apiKey = requireEnv("DODO_API_KEY"); + * ``` + */ +export function requireEnv(name: string): string { + const value = process.env[name]; + if (!value) { + throw new Error( + `Missing required environment variable: ${name}. ` + + `Set it in the Convex dashboard under Settings > Environment Variables.`, + ); + } + return value; +} diff --git a/convex/payments/billing.ts b/convex/payments/billing.ts new file mode 100644 index 0000000000..99110ee592 --- /dev/null +++ b/convex/payments/billing.ts @@ -0,0 +1,329 @@ +/** + * Billing queries and actions for subscription management. + * + * Provides: + * - getSubscriptionForUser: authenticated query for frontend status display + * - getCustomerByUserId: internal query for portal session creation + * - getActiveSubscription: internal query for plan change validation + * - getCustomerPortalUrl: authenticated action to create a Dodo Customer Portal session + * - changePlan: authenticated action to upgrade/downgrade subscription via Dodo SDK + */ + +import { v } from "convex/values"; +import { internalAction, mutation, query, internalQuery } from "../_generated/server"; +import { internal } from "../_generated/api"; +import { DodoPayments } from "dodopayments"; +import { resolveUserId, requireUserId } from "../lib/auth"; +import { getFeaturesForPlan } from "../lib/entitlements"; + +// --------------------------------------------------------------------------- +// Shared SDK config (for direct API calls, not the Convex component) +// --------------------------------------------------------------------------- + +function getDodoClient(): DodoPayments { + const apiKey = process.env.DODO_API_KEY ?? process.env.DODO_PAYMENTS_API_KEY; + if (!apiKey) { + throw new Error("[billing] DODO_API_KEY not set — cannot call Dodo API"); + } + const isLive = process.env.DODO_PAYMENTS_ENVIRONMENT === "live_mode"; + return new DodoPayments({ + bearerToken: apiKey, + ...(isLive ? {} : { environment: "test_mode" as const }), + }); +} + +// --------------------------------------------------------------------------- +// Queries +// --------------------------------------------------------------------------- + +/** + * Returns the most recent subscription for a given user, enriched with + * the plan's display name from the productPlans table. + * + * Used by the frontend billing UI to show current plan status. + */ +export const getSubscriptionForUser = query({ + args: { userId: v.string() }, + handler: async (ctx, args) => { + // Prefer auth identity when available; fall back to client-provided userId. + // This pattern matches entitlements.ts/getEntitlementsForUser — both accept + // userId as a public arg because the ConvexClient has no auth wired yet. + // Once Clerk JWT is wired into ConvexClient.setAuth(), switch to requireUserId(ctx). + const authedUserId = await resolveUserId(ctx); + const userId = authedUserId ?? args.userId; + + // Fetch all subscriptions for user and prefer active/on_hold over cancelled/expired. + // Avoids the bug where a cancelled sub created after an active one hides the active one. + const allSubs = await ctx.db + .query("subscriptions") + .withIndex("by_userId", (q) => q.eq("userId", userId)) + .take(10); + + if (allSubs.length === 0) return null; + + const priorityOrder = ["active", "on_hold", "cancelled", "expired"]; + allSubs.sort((a, b) => { + const pa = priorityOrder.indexOf(a.status); + const pb = priorityOrder.indexOf(b.status); + if (pa !== pb) return pa - pb; // active first + return b.updatedAt - a.updatedAt; // then most recently updated + }); + + // Safe: we checked length > 0 above + const subscription = allSubs[0]!; + + // Look up display name from productPlans + const productPlan = await ctx.db + .query("productPlans") + .withIndex("by_planKey", (q) => q.eq("planKey", subscription.planKey)) + .first(); + + return { + planKey: subscription.planKey, + displayName: productPlan?.displayName ?? subscription.planKey, + status: subscription.status, + currentPeriodEnd: subscription.currentPeriodEnd, + }; + }, +}); + +/** + * Internal query to retrieve a customer record by userId. + * Used by getCustomerPortalUrl to find the dodoCustomerId. + */ +export const getCustomerByUserId = internalQuery({ + args: { userId: v.string() }, + handler: async (ctx, args) => { + // Use .first() instead of .unique() — defensive against duplicate customer rows + return await ctx.db + .query("customers") + .withIndex("by_userId", (q) => q.eq("userId", args.userId)) + .first(); + }, +}); + +/** + * Internal query to retrieve the active subscription for a user. + * Returns null if no subscription or if the subscription is cancelled/expired. + */ +export const getActiveSubscription = internalQuery({ + args: { userId: v.string() }, + handler: async (ctx, args) => { + // Find an active subscription (not cancelled, expired, or on_hold). + // on_hold subs have failed payment — don't allow plan changes on them. + const allSubs = await ctx.db + .query("subscriptions") + .withIndex("by_userId", (q) => q.eq("userId", args.userId)) + .take(10); + + const activeSub = allSubs.find((s) => s.status === "active"); + return activeSub ?? null; + }, +}); + +// --------------------------------------------------------------------------- +// Actions +// --------------------------------------------------------------------------- + +/** + * Creates a Dodo Customer Portal session and returns the portal URL. + * + * Internal action — not callable from the browser directly. The frontend + * opens the fallback portal URL instead. Once Clerk auth is wired into + * the ConvexClient, this can be promoted to a public action with + * requireUserId(ctx) for auth gating. + */ +export const getCustomerPortalUrl = internalAction({ + args: { userId: v.string() }, + handler: async (ctx, args) => { + const userId = args.userId; + + const customer = await ctx.runQuery( + internal.payments.billing.getCustomerByUserId, + { userId }, + ); + + if (!customer || !customer.dodoCustomerId) { + throw new Error("No Dodo customer found for this user"); + } + + const client = getDodoClient(); + const session = await client.customers.customerPortal.create( + customer.dodoCustomerId, + { send_email: false }, + ); + + return { portal_url: session.link }; + }, +}); + +/** + * Changes the subscription plan for a user (upgrade or downgrade). + * + * Internal action — not callable from the browser directly. Plan changes + * are delegated to the Dodo Customer Portal UI for now. Once Clerk auth + * is wired into the ConvexClient, this can be promoted to a public action + * with requireUserId(ctx) for auth gating. + */ +export const changePlan = internalAction({ + args: { + userId: v.string(), + newProductId: v.string(), + prorationMode: v.union( + v.literal("prorated_immediately"), + v.literal("full_immediately"), + v.literal("difference_immediately"), + ), + }, + handler: async (ctx, args) => { + const userId = args.userId; + + const subscription = await ctx.runQuery( + internal.payments.billing.getActiveSubscription, + { userId }, + ); + + if (!subscription) { + throw new Error("No active subscription found"); + } + + const client = getDodoClient(); + await client.subscriptions.changePlan(subscription.dodoSubscriptionId, { + product_id: args.newProductId, + quantity: 1, + proration_billing_mode: args.prorationMode, + }); + + return { success: true }; + }, +}); + +// --------------------------------------------------------------------------- +// Subscription claim (anon ID → authenticated user migration) +// --------------------------------------------------------------------------- + +/** + * Claims subscription, entitlement, and customer records from an anonymous + * browser ID to the currently authenticated user. + * + * LIMITATION: Until Clerk auth is wired into the ConvexClient, anonymous + * purchases are keyed to a `crypto.randomUUID()` stored in localStorage + * (`wm-anon-id`). If the user clears storage, switches browsers, or later + * creates a real account, there is no automatic way to link the purchase. + * + * This mutation provides the migration path: once authenticated, the client + * calls claimSubscription(anonId) to reassign all payment records from the + * anonymous ID to the real user ID. + * + * @see https://github.com/koala73/worldmonitor/issues/2078 + */ +export const claimSubscription = mutation({ + args: { anonId: v.string() }, + handler: async (ctx, args) => { + const realUserId = await requireUserId(ctx); + + // Reassign subscriptions + const subs = await ctx.db + .query("subscriptions") + .withIndex("by_userId", (q) => q.eq("userId", args.anonId)) + .collect(); + for (const sub of subs) { + await ctx.db.patch(sub._id, { userId: realUserId }); + } + + // Reassign entitlements — compare by tier first, then validUntil + // Use .first() instead of .unique() to avoid throwing on duplicate rows + const entitlement = await ctx.db + .query("entitlements") + .withIndex("by_userId", (q) => q.eq("userId", args.anonId)) + .first(); + let winningPlanKey: string | null = null; + let winningFeatures: ReturnType | null = null; + let winningValidUntil: number | null = null; + if (entitlement) { + const existingEntitlement = await ctx.db + .query("entitlements") + .withIndex("by_userId", (q) => q.eq("userId", realUserId)) + .first(); + if (existingEntitlement) { + // Compare by tier first, break ties with validUntil + const anonTier = entitlement.features?.tier ?? 0; + const existingTier = existingEntitlement.features?.tier ?? 0; + const anonWins = + anonTier > existingTier || + (anonTier === existingTier && entitlement.validUntil > existingEntitlement.validUntil); + if (anonWins) { + winningPlanKey = entitlement.planKey; + winningFeatures = entitlement.features; + winningValidUntil = entitlement.validUntil; + await ctx.db.patch(existingEntitlement._id, { + planKey: entitlement.planKey, + features: entitlement.features, + validUntil: entitlement.validUntil, + updatedAt: Date.now(), + }); + } else { + winningPlanKey = existingEntitlement.planKey; + winningFeatures = existingEntitlement.features; + winningValidUntil = existingEntitlement.validUntil; + } + await ctx.db.delete(entitlement._id); + } else { + winningPlanKey = entitlement.planKey; + winningFeatures = entitlement.features; + winningValidUntil = entitlement.validUntil; + await ctx.db.patch(entitlement._id, { userId: realUserId }); + } + } + + // Reassign customer records + const customers = await ctx.db + .query("customers") + .withIndex("by_userId", (q) => q.eq("userId", args.anonId)) + .collect(); + for (const customer of customers) { + await ctx.db.patch(customer._id, { userId: realUserId }); + } + + // Reassign payment events + const payments = await ctx.db + .query("paymentEvents") + .withIndex("by_userId", (q) => q.eq("userId", args.anonId)) + .collect(); + for (const payment of payments) { + await ctx.db.patch(payment._id, { userId: realUserId }); + } + + // Sync Redis cache: clear stale anon entry + write real user's entitlement + if (process.env.UPSTASH_REDIS_REST_URL) { + // Delete the anon ID's stale Redis cache entry + await ctx.scheduler.runAfter( + 0, + internal.payments.cacheActions.deleteEntitlementCache, + { userId: args.anonId }, + ); + // Sync the real user's entitlement to Redis + if (winningPlanKey && winningFeatures && winningValidUntil) { + await ctx.scheduler.runAfter( + 0, + internal.payments.cacheActions.syncEntitlementCache, + { + userId: realUserId, + planKey: winningPlanKey, + features: winningFeatures, + validUntil: winningValidUntil, + }, + ); + } + } + + return { + claimed: { + subscriptions: subs.length, + entitlements: entitlement ? 1 : 0, + customers: customers.length, + payments: payments.length, + }, + }; + }, +}); diff --git a/convex/payments/cacheActions.ts b/convex/payments/cacheActions.ts new file mode 100644 index 0000000000..2fcb11efa8 --- /dev/null +++ b/convex/payments/cacheActions.ts @@ -0,0 +1,140 @@ +/** + * Internal actions for syncing entitlement data to Redis cache. + * + * Scheduled by upsertEntitlements() after every DB write to keep the + * Redis entitlement cache in sync with the Convex source of truth. + * + * Uses Upstash REST API directly (not the server/_shared/redis module) + * because Convex actions run in a different environment than Vercel. + */ + +import { internalAction } from "../_generated/server"; +import { v } from "convex/values"; + +// 15 min — short enough that subscription expiry is reflected promptly +const ENTITLEMENT_CACHE_TTL_SECONDS = 900; + +// Timeout for Redis requests (5 seconds) +const REDIS_FETCH_TIMEOUT_MS = 5000; + +/** + * Returns the environment-aware Redis key prefix for entitlements. + * Prevents live/test data from clobbering each other. + */ +function getEntitlementKey(userId: string): string { + const envPrefix = process.env.DODO_PAYMENTS_ENVIRONMENT === 'live_mode' ? 'live' : 'test'; + return `entitlements:${envPrefix}:${userId}`; +} + +/** + * Writes a user's entitlements to Redis via Upstash REST API. + * + * Uses key format: entitlements:{env}:{userId} (no deployment prefix) + * because entitlements are user-scoped, not deployment-scoped (Pitfall 2). + * + * Failures are logged but do not throw -- cache write failure should + * not break the webhook pipeline. + */ +export const syncEntitlementCache = internalAction({ + args: { + userId: v.string(), + planKey: v.string(), + features: v.object({ + tier: v.number(), + maxDashboards: v.number(), + apiAccess: v.boolean(), + apiRateLimit: v.number(), + prioritySupport: v.boolean(), + exportFormats: v.array(v.string()), + }), + validUntil: v.number(), + }, + handler: async (_ctx, args) => { + const url = process.env.UPSTASH_REDIS_REST_URL; + const token = process.env.UPSTASH_REDIS_REST_TOKEN; + + if (!url || !token) { + console.warn( + "[cacheActions] UPSTASH_REDIS_REST_URL or UPSTASH_REDIS_REST_TOKEN not set -- skipping cache sync", + ); + return; + } + + const key = getEntitlementKey(args.userId); + const value = JSON.stringify({ + planKey: args.planKey, + features: args.features, + validUntil: args.validUntil, + }); + + const controller = new AbortController(); + const timeout = setTimeout(() => controller.abort(), REDIS_FETCH_TIMEOUT_MS); + try { + const resp = await fetch( + `${url}/set/${encodeURIComponent(key)}/${encodeURIComponent(value)}/EX/${ENTITLEMENT_CACHE_TTL_SECONDS}`, + { + method: "POST", + headers: { Authorization: `Bearer ${token}` }, + signal: controller.signal, + }, + ); + + if (!resp.ok) { + console.warn( + `[cacheActions] Redis SET failed: HTTP ${resp.status} for user ${args.userId}`, + ); + } + } catch (err) { + console.warn( + "[cacheActions] Redis cache sync failed:", + err instanceof Error ? err.message : String(err), + ); + } finally { + clearTimeout(timeout); + } + }, +}); + +/** + * Deletes a user's entitlement cache entry from Redis. + * + * Used by claimSubscription to clear the stale anonymous ID cache entry + * after reassigning records to the real authenticated user. + */ +export const deleteEntitlementCache = internalAction({ + args: { userId: v.string() }, + handler: async (_ctx, args) => { + const url = process.env.UPSTASH_REDIS_REST_URL; + const token = process.env.UPSTASH_REDIS_REST_TOKEN; + + if (!url || !token) return; + + const key = getEntitlementKey(args.userId); + + const controller = new AbortController(); + const timeout = setTimeout(() => controller.abort(), REDIS_FETCH_TIMEOUT_MS); + try { + const resp = await fetch( + `${url}/del/${encodeURIComponent(key)}`, + { + method: "POST", + headers: { Authorization: `Bearer ${token}` }, + signal: controller.signal, + }, + ); + + if (!resp.ok) { + console.warn( + `[cacheActions] Redis DEL failed: HTTP ${resp.status} for key ${key}`, + ); + } + } catch (err) { + console.warn( + "[cacheActions] Redis cache delete failed:", + err instanceof Error ? err.message : String(err), + ); + } finally { + clearTimeout(timeout); + } + }, +}); diff --git a/convex/payments/checkout.ts b/convex/payments/checkout.ts new file mode 100644 index 0000000000..f2ef7ac264 --- /dev/null +++ b/convex/payments/checkout.ts @@ -0,0 +1,67 @@ +/** + * Public Convex action to create Dodo Payments checkout sessions. + * + * Wraps the DodoPayments component to securely create checkout URLs + * server-side, keeping the API key on the backend. Supports discount + * codes (PROMO-01) and affiliate referral tracking (PROMO-02). + * + * Authentication is required — the userId is always resolved from the + * server-side session. Client-supplied userId is not accepted. + */ + +import { v } from "convex/values"; +import { action } from "../_generated/server"; +import { checkout } from "../lib/dodo"; +import { resolveUserId } from "../lib/auth"; + +/** + * Create a Dodo Payments checkout session and return the checkout URL. + * + * Called from dashboard upgrade CTAs, pricing page checkout buttons, + * and E2E tests. The returned checkout_url can be used with the + * dodopayments-checkout overlay SDK or as a direct redirect target. + * + * Requires authentication — throws if no authenticated user is available. + */ +export const createCheckout = action({ + args: { + productId: v.string(), + returnUrl: v.optional(v.string()), + discountCode: v.optional(v.string()), + referralCode: v.optional(v.string()), + }, + handler: async (ctx, args) => { + // Auth: require authenticated session — no client-provided userId fallback + const authedUserId = await resolveUserId(ctx); + if (!authedUserId) { + throw new Error("Authentication required to create a checkout session"); + } + const userId = authedUserId; + + // Build metadata: userId for webhook identity bridge + affiliate tracking (PROMO-02) + const metadata: Record = {}; + metadata.wm_user_id = userId; + if (args.referralCode) { + metadata.affonso_referral = args.referralCode; + } + + const result = await checkout(ctx, { + payload: { + product_cart: [{ product_id: args.productId, quantity: 1 }], + return_url: + args.returnUrl ?? + `${process.env.SITE_URL ?? "https://worldmonitor.app"}`, + ...(args.discountCode ? { discount_code: args.discountCode } : {}), + ...(Object.keys(metadata).length > 0 ? { metadata } : {}), + feature_flags: { + allow_discount_code: true, // PROMO-01: Always show discount input + }, + customization: { + theme: "dark", + }, + }, + }); + + return result; + }, +}); diff --git a/convex/payments/seedProductPlans.ts b/convex/payments/seedProductPlans.ts new file mode 100644 index 0000000000..cfb6aad007 --- /dev/null +++ b/convex/payments/seedProductPlans.ts @@ -0,0 +1,97 @@ +// Seed mutation for Dodo product-to-plan mappings. +// +// Run this mutation after creating products in the Dodo dashboard. +// Replace REPLACE_WITH_DODO_ID with actual product IDs from the dashboard. +// +// Usage: +// npx convex run payments/seedProductPlans:seedProductPlans +// npx convex run payments/seedProductPlans:listProductPlans + +import { internalMutation, query } from "../_generated/server"; + +const PRODUCT_PLANS = [ + { + dodoProductId: "pdt_0NaysSFAQ0y30nJOJMBpg", + planKey: "pro_monthly", + displayName: "Pro Monthly", + isActive: true, + }, + { + dodoProductId: "pdt_0NaysWqJBx3laiCzDbQfr", + planKey: "pro_annual", + displayName: "Pro Annual", + isActive: true, + }, + { + dodoProductId: "pdt_0NaysZwxCyk9Satf1jbqU", + planKey: "api_starter", + displayName: "API Starter", + isActive: true, + }, + { + dodoProductId: "pdt_0NaysdZLwkMAPEVJQja5G", + planKey: "api_business", + displayName: "API Business", + isActive: true, + }, + { + dodoProductId: "pdt_0NaysgHSQTTqGjJdLtuWP", + planKey: "enterprise", + displayName: "Enterprise", + isActive: true, + }, +] as const; + +/** + * Upsert 5 product-to-plan mappings into the productPlans table. + * Idempotent: running twice will update existing records rather than + * creating duplicates, thanks to the by_planKey index lookup. + */ +export const seedProductPlans = internalMutation({ + args: {}, + handler: async (ctx) => { + let created = 0; + let updated = 0; + + for (const plan of PRODUCT_PLANS) { + const existing = await ctx.db + .query("productPlans") + .withIndex("by_planKey", (q) => q.eq("planKey", plan.planKey)) + .first(); + + if (existing) { + await ctx.db.patch(existing._id, { + dodoProductId: plan.dodoProductId, + displayName: plan.displayName, + isActive: plan.isActive, + }); + updated++; + } else { + await ctx.db.insert("productPlans", { + dodoProductId: plan.dodoProductId, + planKey: plan.planKey, + displayName: plan.displayName, + isActive: plan.isActive, + }); + created++; + } + } + + return { created, updated }; + }, +}); + +/** + * List all active product plans, sorted by planKey. + * Useful for verifying the seed worked and for later phases + * that need to map Dodo products to internal plan keys. + */ +export const listProductPlans = query({ + args: {}, + handler: async (ctx) => { + const plans = await ctx.db.query("productPlans").collect(); + return plans + .filter((p) => p.isActive) + .sort((a, b) => a.planKey.localeCompare(b.planKey)); + }, +}); diff --git a/convex/payments/subscriptionHelpers.ts b/convex/payments/subscriptionHelpers.ts new file mode 100644 index 0000000000..06f2648e82 --- /dev/null +++ b/convex/payments/subscriptionHelpers.ts @@ -0,0 +1,616 @@ +/** + * Subscription lifecycle handlers and entitlement upsert. + * + * These functions are called from processWebhookEvent (Plan 03) with + * MutationCtx. They transform Dodo webhook payloads into subscription + * records and entitlements. + */ + +import { MutationCtx } from "../_generated/server"; +import { internal } from "../_generated/api"; +import { getFeaturesForPlan } from "../lib/entitlements"; + +// --------------------------------------------------------------------------- +// Types for webhook payload data (narrowed from `any`) +// --------------------------------------------------------------------------- + +interface DodoCustomer { + customer_id?: string; + email?: string; +} + +interface DodoSubscriptionData { + subscription_id: string; + product_id: string; + customer?: DodoCustomer; + previous_billing_date?: string | number | Date; + next_billing_date?: string | number | Date; + cancelled_at?: string | number | Date; + metadata?: Record; +} + +interface DodoPaymentData { + payment_id: string; + customer?: DodoCustomer; + total_amount?: number; + amount?: number; + currency?: string; + subscription_id?: string; + metadata?: Record; +} + +// --------------------------------------------------------------------------- +// Helpers +// --------------------------------------------------------------------------- + +/** + * Returns true if `incomingTimestamp` is newer than `existingUpdatedAt`. + * Used to reject out-of-order webhook events (Pitfall 7 from research). + */ +export function isNewerEvent( + existingUpdatedAt: number, + incomingTimestamp: number, +): boolean { + return incomingTimestamp > existingUpdatedAt; +} + +/** + * Creates or updates the entitlements record for a given user. + * Only one entitlement row exists per userId (upsert semantics). + */ +export async function upsertEntitlements( + ctx: MutationCtx, + userId: string, + planKey: string, + validUntil: number, + updatedAt: number, +): Promise { + const existing = await ctx.db + .query("entitlements") + .withIndex("by_userId", (q) => q.eq("userId", userId)) + .unique(); + + const features = getFeaturesForPlan(planKey); + + if (existing) { + await ctx.db.patch(existing._id, { + planKey, + features, + validUntil, + updatedAt, + }); + } else { + await ctx.db.insert("entitlements", { + userId, + planKey, + features, + validUntil, + updatedAt, + }); + } + + // Schedule Redis cache sync only when Redis is configured. + // Skipped in test environments (no UPSTASH_REDIS_REST_URL) to avoid + // convex-test "Write outside of transaction" errors from scheduled functions. + if (process.env.UPSTASH_REDIS_REST_URL) { + await ctx.scheduler.runAfter( + 0, + internal.payments.cacheActions.syncEntitlementCache, + { userId, planKey, features, validUntil }, + ); + } +} + +// --------------------------------------------------------------------------- +// Internal resolution helpers +// --------------------------------------------------------------------------- + +const FALLBACK_USER_ID = "test-user-001"; + +/** + * True only when explicitly running `convex dev` (which sets CONVEX_IS_DEV). + * Never infer dev mode from missing env vars — that would make production + * behave like dev if CONVEX_CLOUD_URL happens to be unset. + */ +const isDevDeployment = process.env.CONVEX_IS_DEV === "true"; + +// Log dev mode warning at module load time (once) instead of per-call +if (isDevDeployment) { + console.warn("[subscriptionHelpers] WARNING: Running in dev mode — webhook userId resolution will use fallback for unmapped customers"); +} + +/** + * Resolves a Dodo product ID to a plan key via the productPlans table. + * Throws if the product ID is not mapped — the webhook will be retried + * and the operator should add the missing product mapping. + */ +async function resolvePlanKey( + ctx: MutationCtx, + dodoProductId: string, +): Promise { + const mapping = await ctx.db + .query("productPlans") + .withIndex("by_dodoProductId", (q) => q.eq("dodoProductId", dodoProductId)) + .unique(); + if (!mapping) { + throw new Error( + `[subscriptionHelpers] No productPlans mapping for dodoProductId="${dodoProductId}". ` + + `Add this product to the seed data and run seedProductPlans.`, + ); + } + return mapping.planKey; +} + +/** + * Resolves a user identity from webhook data using multiple sources: + * 1. Checkout metadata (wm_user_id) — most reliable, set during checkout + * 2. Customer table lookup by dodoCustomerId + * 3. Dev-only fallback to test-user-001 + * + * Fails closed in production when no identity can be resolved. + */ +async function resolveUserId( + ctx: MutationCtx, + dodoCustomerId: string, + metadata?: Record, +): Promise { + // 1. Checkout metadata — the identity bridge set during createCheckout + if (metadata?.wm_user_id) { + return metadata.wm_user_id; + } + + // 2. Customer table lookup + if (dodoCustomerId) { + const customer = await ctx.db + .query("customers") + .withIndex("by_dodoCustomerId", (q) => + q.eq("dodoCustomerId", dodoCustomerId), + ) + .first(); + if (customer?.userId) { + return customer.userId; + } + } + + // 3. Dev-only fallback + if (isDevDeployment) { + console.warn( + `[subscriptionHelpers] No user identity found for customer="${dodoCustomerId}" — using dev fallback "${FALLBACK_USER_ID}"`, + ); + return FALLBACK_USER_ID; + } + + throw new Error( + `[subscriptionHelpers] Cannot resolve userId for dodoCustomerId="${dodoCustomerId}" ` + + `and no wm_user_id in checkout metadata. Webhook will retry.`, + ); +} + +/** + * Safely converts a Dodo date value to epoch milliseconds. + * Dodo may send strings or Date-like objects (Pitfall 5 from research). + * + * Warns on missing/invalid values to surface data issues instead of + * silently defaulting. Falls back to the provided fallback (typically + * eventTimestamp) or Date.now() if no fallback is given. + */ +function toEpochMs(value: unknown, fieldName?: string, fallback?: number): number { + if (typeof value === "number") return value; + if (typeof value === "string" || value instanceof Date) { + const ms = new Date(value).getTime(); + if (!Number.isNaN(ms)) return ms; + } + const fb = fallback ?? Date.now(); + console.warn( + `[subscriptionHelpers] toEpochMs: missing or invalid ${fieldName ?? "date"} value (${String(value)}) — falling back to ${fallback !== undefined ? "eventTimestamp" : "Date.now()"}`, + ); + return fb; +} + +// --------------------------------------------------------------------------- +// Subscription event handlers +// --------------------------------------------------------------------------- + +/** + * Handles `subscription.active` -- a new subscription has been activated. + * + * Creates or updates the subscription record and upserts entitlements. + */ +export async function handleSubscriptionActive( + ctx: MutationCtx, + data: DodoSubscriptionData, + eventTimestamp: number, +): Promise { + const planKey = await resolvePlanKey(ctx, data.product_id); + const userId = await resolveUserId( + ctx, + data.customer?.customer_id ?? "", + data.metadata, + ); + + const currentPeriodStart = toEpochMs(data.previous_billing_date, "previous_billing_date", eventTimestamp); + const currentPeriodEnd = toEpochMs(data.next_billing_date, "next_billing_date", eventTimestamp); + + const existing = await ctx.db + .query("subscriptions") + .withIndex("by_dodoSubscriptionId", (q) => + q.eq("dodoSubscriptionId", data.subscription_id), + ) + .unique(); + + if (existing) { + if (!isNewerEvent(existing.updatedAt, eventTimestamp)) return; + await ctx.db.patch(existing._id, { + status: "active", + dodoProductId: data.product_id, + planKey, + currentPeriodStart, + currentPeriodEnd, + rawPayload: data, + updatedAt: eventTimestamp, + }); + } else { + await ctx.db.insert("subscriptions", { + userId, + dodoSubscriptionId: data.subscription_id, + dodoProductId: data.product_id, + planKey, + status: "active", + currentPeriodStart, + currentPeriodEnd, + rawPayload: data, + updatedAt: eventTimestamp, + }); + } + + await upsertEntitlements(ctx, userId, planKey, currentPeriodEnd, eventTimestamp); + + // Upsert customer record so portal session creation can find dodoCustomerId + const dodoCustomerId = data.customer?.customer_id; + const email = data.customer?.email ?? ""; + + if (dodoCustomerId) { + const existingCustomer = await ctx.db + .query("customers") + .withIndex("by_dodoCustomerId", (q) => + q.eq("dodoCustomerId", dodoCustomerId), + ) + .first(); + + if (existingCustomer) { + await ctx.db.patch(existingCustomer._id, { + userId, + email, + updatedAt: eventTimestamp, + }); + } else { + await ctx.db.insert("customers", { + userId, + dodoCustomerId, + email, + createdAt: eventTimestamp, + updatedAt: eventTimestamp, + }); + } + } +} + +/** + * Handles `subscription.renewed` -- a recurring payment succeeded and the + * subscription period has been extended. + */ +export async function handleSubscriptionRenewed( + ctx: MutationCtx, + data: DodoSubscriptionData, + eventTimestamp: number, +): Promise { + const existing = await ctx.db + .query("subscriptions") + .withIndex("by_dodoSubscriptionId", (q) => + q.eq("dodoSubscriptionId", data.subscription_id), + ) + .unique(); + + if (!existing) { + console.warn( + `[subscriptionHelpers] Renewal for unknown subscription ${data.subscription_id} -- skipping`, + ); + return; + } + + if (!isNewerEvent(existing.updatedAt, eventTimestamp)) return; + + const currentPeriodStart = toEpochMs(data.previous_billing_date, "previous_billing_date", eventTimestamp); + const currentPeriodEnd = toEpochMs(data.next_billing_date, "next_billing_date", eventTimestamp); + + await ctx.db.patch(existing._id, { + status: "active", + currentPeriodStart, + currentPeriodEnd, + rawPayload: data, + updatedAt: eventTimestamp, + }); + + // Resolve userId from subscription record + await upsertEntitlements( + ctx, + existing.userId, + existing.planKey, + currentPeriodEnd, + eventTimestamp, + ); +} + +/** + * Handles `subscription.on_hold` -- payment failed, subscription paused. + * + * Entitlements remain valid until `currentPeriodEnd` (no immediate revocation). + */ +export async function handleSubscriptionOnHold( + ctx: MutationCtx, + data: DodoSubscriptionData, + eventTimestamp: number, +): Promise { + const existing = await ctx.db + .query("subscriptions") + .withIndex("by_dodoSubscriptionId", (q) => + q.eq("dodoSubscriptionId", data.subscription_id), + ) + .unique(); + + if (!existing) { + console.warn( + `[subscriptionHelpers] on_hold for unknown subscription ${data.subscription_id} -- skipping`, + ); + return; + } + + if (!isNewerEvent(existing.updatedAt, eventTimestamp)) return; + + await ctx.db.patch(existing._id, { + status: "on_hold", + rawPayload: data, + updatedAt: eventTimestamp, + }); + + console.warn( + `[subscriptionHelpers] Subscription ${data.subscription_id} on hold -- payment failure`, + ); + // Do NOT revoke entitlements -- they remain valid until currentPeriodEnd +} + +/** + * Handles `subscription.cancelled` -- user cancelled or admin cancelled. + * + * Entitlements remain valid until `currentPeriodEnd` (no immediate revocation). + */ +export async function handleSubscriptionCancelled( + ctx: MutationCtx, + data: DodoSubscriptionData, + eventTimestamp: number, +): Promise { + const existing = await ctx.db + .query("subscriptions") + .withIndex("by_dodoSubscriptionId", (q) => + q.eq("dodoSubscriptionId", data.subscription_id), + ) + .unique(); + + if (!existing) { + console.warn( + `[subscriptionHelpers] Cancellation for unknown subscription ${data.subscription_id} -- skipping`, + ); + return; + } + + if (!isNewerEvent(existing.updatedAt, eventTimestamp)) return; + + const cancelledAt = data.cancelled_at + ? toEpochMs(data.cancelled_at, "cancelled_at", eventTimestamp) + : eventTimestamp; + + await ctx.db.patch(existing._id, { + status: "cancelled", + cancelledAt, + rawPayload: data, + updatedAt: eventTimestamp, + }); + + // Do NOT revoke entitlements immediately -- valid until currentPeriodEnd +} + +/** + * Handles `subscription.plan_changed` -- upgrade or downgrade. + * + * Updates subscription plan and recomputes entitlements with new features. + */ +export async function handleSubscriptionPlanChanged( + ctx: MutationCtx, + data: DodoSubscriptionData, + eventTimestamp: number, +): Promise { + const existing = await ctx.db + .query("subscriptions") + .withIndex("by_dodoSubscriptionId", (q) => + q.eq("dodoSubscriptionId", data.subscription_id), + ) + .unique(); + + if (!existing) { + console.warn( + `[subscriptionHelpers] Plan change for unknown subscription ${data.subscription_id} -- skipping`, + ); + return; + } + + if (!isNewerEvent(existing.updatedAt, eventTimestamp)) return; + + const newPlanKey = await resolvePlanKey(ctx, data.product_id); + + await ctx.db.patch(existing._id, { + dodoProductId: data.product_id, + planKey: newPlanKey, + rawPayload: data, + updatedAt: eventTimestamp, + }); + + await upsertEntitlements( + ctx, + existing.userId, + newPlanKey, + existing.currentPeriodEnd, + eventTimestamp, + ); +} + +/** + * Handles `subscription.expired` -- subscription has permanently expired + * (e.g., max payment retries exceeded). + * + * Revokes entitlements by setting validUntil to now, and marks subscription expired. + */ +export async function handleSubscriptionExpired( + ctx: MutationCtx, + data: DodoSubscriptionData, + eventTimestamp: number, +): Promise { + const existing = await ctx.db + .query("subscriptions") + .withIndex("by_dodoSubscriptionId", (q) => + q.eq("dodoSubscriptionId", data.subscription_id), + ) + .unique(); + + if (!existing) { + console.warn( + `[subscriptionHelpers] Expiration for unknown subscription ${data.subscription_id} -- skipping`, + ); + return; + } + + if (!isNewerEvent(existing.updatedAt, eventTimestamp)) return; + + await ctx.db.patch(existing._id, { + status: "expired", + rawPayload: data, + updatedAt: eventTimestamp, + }); + + // Revoke entitlements by downgrading to free tier + await upsertEntitlements(ctx, existing.userId, "free", eventTimestamp, eventTimestamp); +} + +/** + * Handles `payment.succeeded` and `payment.failed` events. + * + * Records a payment event row. Does not alter subscription state -- + * that is handled by the subscription event handlers. + */ +export async function handlePaymentEvent( + ctx: MutationCtx, + data: DodoPaymentData, + eventType: string, + eventTimestamp: number, +): Promise { + const userId = await resolveUserId( + ctx, + data.customer?.customer_id ?? "", + data.metadata, + ); + + await ctx.db.insert("paymentEvents", { + userId, + dodoPaymentId: data.payment_id, + type: "charge", + amount: data.total_amount ?? data.amount ?? 0, + currency: data.currency ?? "USD", + status: eventType === "payment.succeeded" ? "succeeded" : "failed", + dodoSubscriptionId: data.subscription_id ?? undefined, + rawPayload: data, + occurredAt: eventTimestamp, + }); +} + +/** + * Handles `refund.succeeded` and `refund.failed` events. + * + * Records a payment event row with type "refund" for audit trail. + */ +export async function handleRefundEvent( + ctx: MutationCtx, + data: DodoPaymentData, + eventType: string, + eventTimestamp: number, +): Promise { + const userId = await resolveUserId( + ctx, + data.customer?.customer_id ?? "", + data.metadata, + ); + + await ctx.db.insert("paymentEvents", { + userId, + dodoPaymentId: data.payment_id, + type: "refund", + amount: data.total_amount ?? data.amount ?? 0, + currency: data.currency ?? "USD", + status: eventType === "refund.succeeded" ? "succeeded" : "failed", + dodoSubscriptionId: data.subscription_id ?? undefined, + rawPayload: data, + occurredAt: eventTimestamp, + }); +} + +/** + * Handles dispute events (opened, won, lost, closed). + * + * Records a payment event for audit trail. On dispute.lost, + * logs a warning since entitlement revocation may be needed. + */ +export async function handleDisputeEvent( + ctx: MutationCtx, + data: DodoPaymentData, + eventType: string, + eventTimestamp: number, +): Promise { + const userId = await resolveUserId( + ctx, + data.customer?.customer_id ?? "", + data.metadata, + ); + + const status = eventType.replace("dispute.", ""); + + await ctx.db.insert("paymentEvents", { + userId, + dodoPaymentId: data.payment_id, + type: "charge", // disputes are related to charges + amount: data.total_amount ?? data.amount ?? 0, + currency: data.currency ?? "USD", + status: `dispute_${status}`, + dodoSubscriptionId: data.subscription_id ?? undefined, + rawPayload: data, + occurredAt: eventTimestamp, + }); + + if (eventType === "dispute.lost") { + console.warn( + `[subscriptionHelpers] Dispute LOST for user ${userId}, payment ${data.payment_id} — revoking entitlements`, + ); + + // Revoke entitlements: find the subscription (if any) and downgrade to free tier + if (data.subscription_id) { + const sub = await ctx.db + .query("subscriptions") + .withIndex("by_dodoSubscriptionId", (q) => q.eq("dodoSubscriptionId", data.subscription_id!)) + .unique(); + if (sub) { + await ctx.db.patch(sub._id, { status: "expired", updatedAt: eventTimestamp }); + await upsertEntitlements(ctx, userId, "free", eventTimestamp, eventTimestamp); + } + } else { + // No subscription_id — revoke based on userId directly + await upsertEntitlements(ctx, userId, "free", eventTimestamp, eventTimestamp); + } + } +} diff --git a/convex/payments/webhookHandlers.ts b/convex/payments/webhookHandlers.ts new file mode 100644 index 0000000000..bd611094cd --- /dev/null +++ b/convex/payments/webhookHandlers.ts @@ -0,0 +1,79 @@ +import { httpAction } from "../_generated/server"; +import { internal } from "../_generated/api"; +import { requireEnv } from "../lib/env"; +import { verifyWebhookPayload } from "@dodopayments/core"; + +/** + * Custom webhook HTTP action for Dodo Payments. + * + * Why custom instead of createDodoWebhookHandler: + * - We need access to webhook-id header for idempotency (library doesn't expose it) + * - We want 401 for invalid signatures (library returns 400) + * - We control error handling and dispatch flow + * + * Signature verification uses @dodopayments/core's verifyWebhookPayload + * which wraps Standard Webhooks (Svix) protocol with HMAC SHA256. + */ +export const webhookHandler = httpAction(async (ctx, request) => { + // 1. Read webhook secret from environment + const webhookKey = requireEnv("DODO_PAYMENTS_WEBHOOK_SECRET"); + + // 2. Extract required Standard Webhooks headers + const webhookId = request.headers.get("webhook-id"); + const webhookTimestamp = request.headers.get("webhook-timestamp"); + const webhookSignature = request.headers.get("webhook-signature"); + + if (!webhookId || !webhookTimestamp || !webhookSignature) { + return new Response("Missing required webhook headers", { status: 400 }); + } + + // 3. Read raw body for signature verification + const body = await request.text(); + + // 4. Verify signature using @dodopayments/core + let payload; + try { + payload = await verifyWebhookPayload({ + webhookKey, + headers: { + "webhook-id": webhookId, + "webhook-timestamp": webhookTimestamp, + "webhook-signature": webhookSignature, + }, + body, + }); + } catch (error) { + console.error("Webhook signature verification failed:", error); + return new Response("Invalid webhook signature", { status: 401 }); + } + + // 5. Dispatch to internal mutation for idempotent processing. + // Uses the validated payload directly (not a second JSON.parse) to avoid divergence. + // On handler failure the mutation throws, rolling back partial writes. + // We catch and return 500 so Dodo retries. + try { + const eventTimestamp = payload.timestamp + ? payload.timestamp.getTime() + : Date.now(); + + if (!payload.timestamp) { + console.warn("[webhook] Missing payload.timestamp — falling back to Date.now(). Out-of-order detection may be unreliable."); + } + + await ctx.runMutation( + internal.payments.webhookMutations.processWebhookEvent, + { + webhookId, + eventType: payload.type, + rawPayload: payload, + timestamp: eventTimestamp, + }, + ); + } catch (error) { + console.error("Webhook processing failed:", error); + return new Response("Internal processing error", { status: 500 }); + } + + // 6. Return 200 on success (synchronous processing complete) + return new Response(null, { status: 200 }); +}); diff --git a/convex/payments/webhookMutations.ts b/convex/payments/webhookMutations.ts new file mode 100644 index 0000000000..fb352b5d53 --- /dev/null +++ b/convex/payments/webhookMutations.ts @@ -0,0 +1,105 @@ +import { internalMutation } from "../_generated/server"; +import { v } from "convex/values"; +import { + handleSubscriptionActive, + handleSubscriptionRenewed, + handleSubscriptionOnHold, + handleSubscriptionCancelled, + handleSubscriptionPlanChanged, + handleSubscriptionExpired, + handlePaymentEvent, + handleRefundEvent, + handleDisputeEvent, +} from "./subscriptionHelpers"; + +/** + * Idempotent webhook event processor. + * + * Receives parsed webhook data from the HTTP action handler, + * deduplicates by webhook-id, records the event, and dispatches + * to event-type-specific handlers from subscriptionHelpers. + * + * On handler failure, the error is returned (not thrown) so Convex + * rolls back the transaction. The HTTP handler uses the returned + * error to send a 500 response, which triggers Dodo's retry mechanism. + */ +export const processWebhookEvent = internalMutation({ + args: { + webhookId: v.string(), + eventType: v.string(), + rawPayload: v.any(), + timestamp: v.number(), + }, + handler: async (ctx, args) => { + // 1. Idempotency check: skip only if already successfully processed. + // Failed events are deleted so the retry can re-process cleanly. + const existing = await ctx.db + .query("webhookEvents") + .withIndex("by_webhookId", (q) => q.eq("webhookId", args.webhookId)) + .first(); + + if (existing) { + if (existing.status === "processed") { + console.warn(`[webhook] Duplicate webhook ${args.webhookId}, already processed — skipping`); + return; + } + // Previously failed — delete the stale record so we can retry cleanly + console.warn(`[webhook] Retrying previously failed webhook ${args.webhookId}`); + await ctx.db.delete(existing._id); + } + + // 2. Dispatch to event-type-specific handlers. + // Errors propagate (throw) so Convex rolls back the entire transaction, + // preventing partial writes (e.g., subscription without entitlements). + // The HTTP handler catches thrown errors and returns 500 to trigger retries. + const data = args.rawPayload.data; + + switch (args.eventType) { + case "subscription.active": + await handleSubscriptionActive(ctx, data, args.timestamp); + break; + case "subscription.renewed": + await handleSubscriptionRenewed(ctx, data, args.timestamp); + break; + case "subscription.on_hold": + await handleSubscriptionOnHold(ctx, data, args.timestamp); + break; + case "subscription.cancelled": + await handleSubscriptionCancelled(ctx, data, args.timestamp); + break; + case "subscription.plan_changed": + await handleSubscriptionPlanChanged(ctx, data, args.timestamp); + break; + case "subscription.expired": + await handleSubscriptionExpired(ctx, data, args.timestamp); + break; + case "payment.succeeded": + case "payment.failed": + await handlePaymentEvent(ctx, data, args.eventType, args.timestamp); + break; + case "refund.succeeded": + case "refund.failed": + await handleRefundEvent(ctx, data, args.eventType, args.timestamp); + break; + case "dispute.opened": + case "dispute.won": + case "dispute.lost": + case "dispute.closed": + await handleDisputeEvent(ctx, data, args.eventType, args.timestamp); + break; + default: + console.warn(`[webhook] Unhandled event type: ${args.eventType}`); + } + + // 3. Record the event AFTER successful processing. + // If the handler threw, we never reach here — the transaction rolls back + // and Dodo retries. Only successful events are recorded for idempotency. + await ctx.db.insert("webhookEvents", { + webhookId: args.webhookId, + eventType: args.eventType, + rawPayload: args.rawPayload, + processedAt: Date.now(), + status: "processed", + }); + }, +}); diff --git a/convex/schema.ts b/convex/schema.ts index ab93fe411e..c331c1623d 100644 --- a/convex/schema.ts +++ b/convex/schema.ts @@ -2,6 +2,14 @@ import { defineSchema, defineTable } from "convex/server"; import { v } from "convex/values"; import { channelTypeValidator, sensitivityValidator } from "./constants"; +// Subscription status enum — maps Dodo statuses to our internal set +const subscriptionStatus = v.union( + v.literal("active"), + v.literal("on_hold"), + v.literal("cancelled"), + v.literal("expired"), +); + export default defineSchema({ userPreferences: defineTable({ userId: v.string(), @@ -74,6 +82,7 @@ export default defineSchema({ }) .index("by_normalized_email", ["normalizedEmail"]) .index("by_referral_code", ["referralCode"]), + contactMessages: defineTable({ name: v.string(), email: v.string(), @@ -83,8 +92,88 @@ export default defineSchema({ source: v.string(), receivedAt: v.number(), }), + counters: defineTable({ name: v.string(), value: v.number(), }).index("by_name", ["name"]), + + // --- Payment tables (Dodo Payments integration) --- + + subscriptions: defineTable({ + userId: v.string(), + dodoSubscriptionId: v.string(), + dodoProductId: v.string(), + planKey: v.string(), + status: subscriptionStatus, + currentPeriodStart: v.number(), + currentPeriodEnd: v.number(), + cancelledAt: v.optional(v.number()), + // v.any(): Dodo webhook payload — intentionally untyped (external schema) + rawPayload: v.any(), + updatedAt: v.number(), + }) + .index("by_userId", ["userId"]) + .index("by_dodoSubscriptionId", ["dodoSubscriptionId"]) + .index("by_status", ["status"]), + + entitlements: defineTable({ + userId: v.string(), + planKey: v.string(), + features: v.object({ + tier: v.number(), + maxDashboards: v.number(), + apiAccess: v.boolean(), + apiRateLimit: v.number(), + prioritySupport: v.boolean(), + exportFormats: v.array(v.string()), + }), + validUntil: v.number(), + updatedAt: v.number(), + }).index("by_userId", ["userId"]), + + customers: defineTable({ + userId: v.string(), + dodoCustomerId: v.optional(v.string()), + email: v.string(), + createdAt: v.number(), + updatedAt: v.number(), + }) + .index("by_userId", ["userId"]) + .index("by_dodoCustomerId", ["dodoCustomerId"]), + + webhookEvents: defineTable({ + webhookId: v.string(), + eventType: v.string(), + // v.any(): Dodo webhook payload — intentionally untyped (external schema) + rawPayload: v.any(), + processedAt: v.number(), + status: v.literal("processed"), + }) + .index("by_webhookId", ["webhookId"]) + .index("by_eventType", ["eventType"]), + + paymentEvents: defineTable({ + userId: v.string(), + dodoPaymentId: v.string(), + type: v.union(v.literal("charge"), v.literal("refund")), + amount: v.number(), + currency: v.string(), + status: v.string(), + dodoSubscriptionId: v.optional(v.string()), + // v.any(): Dodo webhook payload — intentionally untyped (external schema) + rawPayload: v.any(), + occurredAt: v.number(), + }) + .index("by_userId", ["userId"]) + .index("by_dodoPaymentId", ["dodoPaymentId"]), + + productPlans: defineTable({ + dodoProductId: v.string(), + planKey: v.string(), + displayName: v.string(), + isActive: v.boolean(), + }) + .index("by_dodoProductId", ["dodoProductId"]) + .index("by_planKey", ["planKey"]), }); diff --git a/convex/tsconfig.json b/convex/tsconfig.json index 217b4c2d8b..3e2d731017 100644 --- a/convex/tsconfig.json +++ b/convex/tsconfig.json @@ -10,5 +10,5 @@ "outDir": "./_generated" }, "include": ["./**/*.ts"], - "exclude": ["./_generated"] + "exclude": ["./_generated", "./__tests__"] } diff --git a/index.html b/index.html index fd41d9ad5c..070983b083 100644 --- a/index.html +++ b/index.html @@ -3,7 +3,7 @@ - + diff --git a/package-lock.json b/package-lock.json index 00d27fd9ee..4534499829 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,6 +18,7 @@ "@deck.gl/geo-layers": "^9.2.6", "@deck.gl/layers": "^9.2.6", "@deck.gl/mapbox": "^9.2.6", + "@dodopayments/convex": "^0.2.8", "@protomaps/basemaps": "^5.7.1", "@sentry/browser": "^10.39.0", "@upstash/ratelimit": "^2.0.8", @@ -28,13 +29,14 @@ "convex": "^1.32.0", "d3": "^7.9.0", "deck.gl": "^9.2.6", + "dodopayments-checkout": "^1.8.0", "dompurify": "^3.1.7", "fast-xml-parser": "^5.3.7", "globe.gl": "^2.45.0", "hls.js": "^1.6.15", "i18next": "^25.8.10", "i18next-browser-languagedetector": "^8.2.1", - "jose": "^6.0.11", + "jose": "^6.2.2", "maplibre-gl": "^5.16.0", "marked": "^17.0.3", "onnxruntime-web": "^1.23.2", @@ -51,6 +53,7 @@ "devDependencies": { "@biomejs/biome": "^2.4.7", "@bufbuild/buf": "^1.66.0", + "@edge-runtime/vm": "^5.0.0", "@playwright/test": "^1.52.0", "@tauri-apps/cli": "^2.10.0", "@types/canvas-confetti": "^1.9.0", @@ -64,6 +67,7 @@ "@types/three": "^0.183.1", "@types/topojson-client": "^3.1.5", "@types/topojson-specification": "^1.0.5", + "convex-test": "^0.0.43", "cross-env": "^10.1.0", "esbuild": "^0.27.3", "h3-js": "^4.4.0", @@ -71,7 +75,8 @@ "tsx": "^4.21.0", "typescript": "^5.7.2", "vite": "^6.0.7", - "vite-plugin-pwa": "^1.2.0" + "vite-plugin-pwa": "^1.2.0", + "vitest": "^4.1.0" } }, "node_modules/@adraffy/ens-normalize": { @@ -3672,6 +3677,31 @@ "dev": true, "license": "Apache-2.0" }, + "node_modules/@dodopayments/convex": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@dodopayments/convex/-/convex-0.2.9.tgz", + "integrity": "sha512-Npy5va1dno7oOGS7Swu5Rk1EJBk4X2QSz3V3oiE6wXVI97BOuan9q3JTcIgXQ+LXP9PmVOk2ozuaLMM66B6kKw==", + "dependencies": { + "@dodopayments/core": "^0.3.10" + }, + "peerDependencies": { + "convex": "^1.26.0", + "zod": "^3.25.0 || ^4.0.0" + } + }, + "node_modules/@dodopayments/core": { + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/@dodopayments/core/-/core-0.3.10.tgz", + "integrity": "sha512-IX8at0Y8J7M6VzOAnAgEdtyStMsKEonDpb8Elteg3759FHj8Zd2004o5izy3H3dFv5psIghEBYJBOUQsJgdtKw==", + "license": "Apache-2.0", + "dependencies": { + "dodopayments": "^2.23.2", + "standardwebhooks": "^1.0.0" + }, + "peerDependencies": { + "zod": "^3.25.0 || ^4.0.0" + } + }, "node_modules/@dxup/nuxt": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/@dxup/nuxt/-/nuxt-0.3.2.tgz", @@ -3693,6 +3723,29 @@ "license": "MIT", "peer": true }, + "node_modules/@edge-runtime/primitives": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@edge-runtime/primitives/-/primitives-6.0.0.tgz", + "integrity": "sha512-FqoxaBT+prPBHBwE1WXS1ocnu/VLTQyZ6NMUBAdbP7N2hsFTTxMC/jMu2D/8GAlMQfxeuppcPuCUk/HO3fpIvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@edge-runtime/vm": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@edge-runtime/vm/-/vm-5.0.0.tgz", + "integrity": "sha512-NKBGBSIKUG584qrS1tyxVpX/AKJKQw5HgjYEnPLC0QsTw79JrGn+qUr8CXFb955Iy7GUdiiUv1rJ6JBGvaKb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@edge-runtime/primitives": "6.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/@emnapi/core": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.8.1.tgz", @@ -4474,6 +4527,33 @@ "node": ">=18" } }, + "node_modules/@iframe-resizer/core": { + "version": "5.5.9", + "resolved": "https://registry.npmjs.org/@iframe-resizer/core/-/core-5.5.9.tgz", + "integrity": "sha512-HacDQx81pgHlmY48tRogcX02TOXfvjllJzI+xfVYmvEXhxoViyi9yEobhNQEt8Mq6NmrH1vHhz6FRfQ9uBTsjQ==", + "license": "GPL-3.0", + "dependencies": { + "auto-console-group": "1.3.0" + }, + "funding": { + "type": "individual", + "url": "https://iframe-resizer.com/pricing/" + } + }, + "node_modules/@iframe-resizer/parent": { + "version": "5.5.9", + "resolved": "https://registry.npmjs.org/@iframe-resizer/parent/-/parent-5.5.9.tgz", + "integrity": "sha512-DfNb9KlOf7WyCNOM2xWPGxJfWtqA/gg7sjHvqvD4k6cfpntPXrKfCd3WdOPNKA980urGkhOdM9Ye0unV2gnYYw==", + "license": "GPL-3.0", + "dependencies": { + "@iframe-resizer/core": "5.5.9", + "auto-console-group": "1.3.0" + }, + "funding": { + "type": "individual", + "url": "https://iframe-resizer.com/pricing/" + } + }, "node_modules/@interactjs/types": { "version": "1.10.27", "resolved": "https://registry.npmjs.org/@interactjs/types/-/types-1.10.27.tgz", @@ -9861,6 +9941,19 @@ "license": "CC0-1.0", "peer": true }, + "node_modules/@stablelib/base64": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/base64/-/base64-1.0.1.tgz", + "integrity": "sha512-1bnPQqSxSuc3Ii6MhBysoWCg58j97aUjuCSZrGSmDxNqtytIi0k8utUenAwTZN4V5mXXYGsVUI9zeBqy+jBOSQ==", + "license": "MIT" + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "dev": true, + "license": "MIT" + }, "node_modules/@stripe/stripe-js": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/@stripe/stripe-js/-/stripe-js-5.6.0.tgz", @@ -10296,6 +10389,17 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/chai": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" + } + }, "node_modules/@types/connect": { "version": "3.4.38", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", @@ -10602,6 +10706,13 @@ "@types/ms": "*" } }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/dompurify": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/@types/dompurify/-/dompurify-3.0.5.tgz", @@ -11307,6 +11418,149 @@ "vue": "^3.0.0" } }, + "node_modules/@vitest/expect": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.2.tgz", + "integrity": "sha512-gbu+7B0YgUJ2nkdsRJrFFW6X7NTP44WlhiclHniUhxADQJH5Szt9mZ9hWnJPJ8YwOK5zUOSSlSvyzRf0u1DSBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.1.0", + "@types/chai": "^5.2.2", + "@vitest/spy": "4.1.2", + "@vitest/utils": "4.1.2", + "chai": "^6.2.2", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.2.tgz", + "integrity": "sha512-Ize4iQtEALHDttPRCmN+FKqOl2vxTiNUhzobQFFt/BM1lRUTG7zRCLOykG/6Vo4E4hnUdfVLo5/eqKPukcWW7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "4.1.2", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.21" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/mocker/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/@vitest/mocker/node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/@vitest/pretty-format": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.2.tgz", + "integrity": "sha512-dwQga8aejqeuB+TvXCMzSQemvV9hNEtDDpgUKDzOmNQayl2OG241PSWeJwKRH3CiC+sESrmoFd49rfnq7T4RnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.2.tgz", + "integrity": "sha512-Gr+FQan34CdiYAwpGJmQG8PgkyFVmARK8/xSijia3eTFgVfpcpztWLuP6FttGNfPLJhaZVP/euvujeNYar36OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "4.1.2", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.2.tgz", + "integrity": "sha512-g7yfUmxYS4mNxk31qbOYsSt2F4m1E02LFqO53Xpzg3zKMhLAPZAjjfyl9e6z7HrW6LvUdTwAQR3HHfLjpko16A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.1.2", + "@vitest/utils": "4.1.2", + "magic-string": "^0.30.21", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot/node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/@vitest/spy": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.2.tgz", + "integrity": "sha512-DU4fBnbVCJGNBwVA6xSToNXrkZNSiw59H8tcuUspVMsBDBST4nfvsPsEHDHGtWRRnqBERBQu7TrTKskmjqTXKA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.2.tgz", + "integrity": "sha512-xw2/TiX82lQHA06cgbqRKFb5lCAy3axQ4H4SoUFhUsg+wztiet+co86IAMDtF6Vm1hc7J6j09oh/rgDn+JdKIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.1.2", + "convert-source-map": "^2.0.0", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, "node_modules/@volar/language-core": { "version": "2.4.28", "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.28.tgz", @@ -12413,6 +12667,16 @@ "license": "MIT", "peer": true }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, "node_modules/ast-kit": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/ast-kit/-/ast-kit-2.2.0.tgz", @@ -12489,6 +12753,12 @@ "node": ">= 4.0.0" } }, + "node_modules/auto-console-group": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/auto-console-group/-/auto-console-group-1.3.0.tgz", + "integrity": "sha512-W/G5jy1ZPeVYPyqOVGND7EjbzrsLgRD3s+1QegXfJ7bYlphFxjqG60rviFXWw0d2YCj0Clc7hU5/nTqrBEhBIw==", + "license": "MIT" + }, "node_modules/autoprefixer": { "version": "10.4.27", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.27.tgz", @@ -13384,6 +13654,16 @@ "colorbrewer": "1.5.6" } }, + "node_modules/chai": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", + "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/chalk": { "version": "5.6.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", @@ -13999,6 +14279,16 @@ } } }, + "node_modules/convex-test": { + "version": "0.0.43", + "resolved": "https://registry.npmjs.org/convex-test/-/convex-test-0.0.43.tgz", + "integrity": "sha512-pOJlaSohlnyNYsAnYcfKkUS4pETYGCjfwOzZIOeYPafAu5HYV0a0XNbzSCFjbWtqDMzZKpezMuRF1VlXJtg75A==", + "dev": true, + "license": "Apache-2.0", + "peerDependencies": { + "convex": "^1.32.0" + } + }, "node_modules/convex/node_modules/@esbuild/aix-ppc64": { "version": "0.27.0", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.0.tgz", @@ -16010,6 +16300,30 @@ "integrity": "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==", "license": "MIT" }, + "node_modules/dodopayments": { + "version": "2.25.1", + "resolved": "https://registry.npmjs.org/dodopayments/-/dodopayments-2.25.1.tgz", + "integrity": "sha512-NuIQ83Y0fQttHSCfESFcors0BLW7nR6JmK+IadeczWLu0QvI9sZaIa2pHTR/SQFY7JrqqVq4tV80Jhy7UpfSRg==", + "license": "Apache-2.0", + "dependencies": { + "standardwebhooks": "^1.0.0" + }, + "bin": { + "dodopayments": "bin/cli" + } + }, + "node_modules/dodopayments-checkout": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/dodopayments-checkout/-/dodopayments-checkout-1.8.0.tgz", + "integrity": "sha512-KvQfzGpSPzV0GITSBHvSmDQehGhx6R8XtpuLgvt0RuyxrvumDBboE9/5Iv1sd98cVXeeSl3B6OeVIo4IQmXDdQ==", + "license": "Apache-2.0", + "dependencies": { + "@iframe-resizer/parent": "^5.5.7" + }, + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/dom-serializer": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", @@ -16370,8 +16684,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/es-object-atoms": { "version": "1.1.1", @@ -16723,6 +17036,16 @@ "node": ">=6" } }, + "node_modules/expect-type": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", + "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/exponential-backoff": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.3.tgz", @@ -16803,6 +17126,12 @@ "url": "https://github.com/sponsors/antfu" } }, + "node_modules/fast-sha256": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-sha256/-/fast-sha256-1.3.0.tgz", + "integrity": "sha512-n11RGP/lrWEFI/bWdygLxhI+pVeo1ZYIVwvvPkW7azl/rOy+F3HYRZ2K5zeE9mmkhQppyv9sQFx0JM9UabnpPQ==", + "license": "Unlicense" + }, "node_modules/fast-stable-stringify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz", @@ -22103,8 +22432,7 @@ "https://github.com/sponsors/sxzz", "https://opencollective.com/debug" ], - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/ofetch": { "version": "1.5.1", @@ -22700,8 +23028,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/pbf": { "version": "3.3.0", @@ -25121,6 +25448,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, "node_modules/signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", @@ -25390,6 +25724,13 @@ "node": ">=8" } }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, "node_modules/stackframe": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", @@ -25427,6 +25768,16 @@ "license": "MIT", "peer": true }, + "node_modules/standardwebhooks": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/standardwebhooks/-/standardwebhooks-1.0.0.tgz", + "integrity": "sha512-BbHGOQK9olHPMvQNHWul6MYlrRTAOKn03rOe4A8O3CLWhNf4YHBqq2HJKKC+sfqpxiBY52pNeesD6jIiLDz8jg==", + "license": "MIT", + "dependencies": { + "@stablelib/base64": "^1.0.0", + "fast-sha256": "^1.3.0" + } + }, "node_modules/statuses": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", @@ -26374,6 +26725,13 @@ "license": "MIT", "peer": true }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, "node_modules/tinyclip": { "version": "0.1.12", "resolved": "https://registry.npmjs.org/tinyclip/-/tinyclip-0.1.12.tgz", @@ -26395,7 +26753,6 @@ "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.2.tgz", "integrity": "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==", "license": "MIT", - "peer": true, "engines": { "node": ">=18" } @@ -26422,6 +26779,16 @@ "integrity": "sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g==", "license": "ISC" }, + "node_modules/tinyrainbow": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz", + "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -28429,6 +28796,105 @@ "@esbuild/win32-x64": "0.25.12" } }, + "node_modules/vitest": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.2.tgz", + "integrity": "sha512-xjR1dMTVHlFLh98JE3i/f/WePqJsah4A0FK9cc8Ehp9Udk0AZk6ccpIZhh1qJ/yxVWRZ+Q54ocnD8TXmkhspGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/expect": "4.1.2", + "@vitest/mocker": "4.1.2", + "@vitest/pretty-format": "4.1.2", + "@vitest/runner": "4.1.2", + "@vitest/snapshot": "4.1.2", + "@vitest/spy": "4.1.2", + "@vitest/utils": "4.1.2", + "es-module-lexer": "^2.0.0", + "expect-type": "^1.3.0", + "magic-string": "^0.30.21", + "obug": "^2.1.1", + "pathe": "^2.0.3", + "picomatch": "^4.0.3", + "std-env": "^4.0.0-rc.1", + "tinybench": "^2.9.0", + "tinyexec": "^1.0.2", + "tinyglobby": "^0.2.15", + "tinyrainbow": "^3.1.0", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@opentelemetry/api": "^1.9.0", + "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", + "@vitest/browser-playwright": "4.1.2", + "@vitest/browser-preview": "4.1.2", + "@vitest/browser-webdriverio": "4.1.2", + "@vitest/ui": "4.1.2", + "happy-dom": "*", + "jsdom": "*", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@opentelemetry/api": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser-playwright": { + "optional": true + }, + "@vitest/browser-preview": { + "optional": true + }, + "@vitest/browser-webdriverio": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + }, + "vite": { + "optional": false + } + } + }, + "node_modules/vitest/node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/vitest/node_modules/std-env": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.0.0.tgz", + "integrity": "sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==", + "dev": true, + "license": "MIT" + }, "node_modules/vlq": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/vlq/-/vlq-1.0.1.tgz", @@ -28696,6 +29162,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/workbox-background-sync": { "version": "7.4.0", "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-7.4.0.tgz", @@ -29454,6 +29937,16 @@ "safe-buffer": "~5.2.0" } }, + "node_modules/zod": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", + "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, "node_modules/zstd-codec": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/zstd-codec/-/zstd-codec-0.1.5.tgz", diff --git a/package.json b/package.json index 42286dd884..a2c6782b2d 100644 --- a/package.json +++ b/package.json @@ -60,11 +60,14 @@ "desktop:package:macos:tech:sign": "node scripts/desktop-package.mjs --os macos --variant tech --sign", "desktop:package:windows:full:sign": "node scripts/desktop-package.mjs --os windows --variant full --sign", "desktop:package:windows:tech:sign": "node scripts/desktop-package.mjs --os windows --variant tech --sign", - "desktop:package": "node scripts/desktop-package.mjs" + "desktop:package": "node scripts/desktop-package.mjs", + "test:convex": "vitest run --config vitest.config.mts", + "test:convex:watch": "vitest --config vitest.config.mts" }, "devDependencies": { "@biomejs/biome": "^2.4.7", "@bufbuild/buf": "^1.66.0", + "@edge-runtime/vm": "^5.0.0", "@playwright/test": "^1.52.0", "@tauri-apps/cli": "^2.10.0", "@types/canvas-confetti": "^1.9.0", @@ -78,6 +81,7 @@ "@types/three": "^0.183.1", "@types/topojson-client": "^3.1.5", "@types/topojson-specification": "^1.0.5", + "convex-test": "^0.0.43", "cross-env": "^10.1.0", "esbuild": "^0.27.3", "h3-js": "^4.4.0", @@ -85,7 +89,8 @@ "tsx": "^4.21.0", "typescript": "^5.7.2", "vite": "^6.0.7", - "vite-plugin-pwa": "^1.2.0" + "vite-plugin-pwa": "^1.2.0", + "vitest": "^4.1.0" }, "dependencies": { "@anthropic-ai/sdk": "^0.79.0", @@ -96,6 +101,7 @@ "@deck.gl/geo-layers": "^9.2.6", "@deck.gl/layers": "^9.2.6", "@deck.gl/mapbox": "^9.2.6", + "@dodopayments/convex": "^0.2.8", "@protomaps/basemaps": "^5.7.1", "@sentry/browser": "^10.39.0", "@upstash/ratelimit": "^2.0.8", @@ -106,13 +112,14 @@ "convex": "^1.32.0", "d3": "^7.9.0", "deck.gl": "^9.2.6", + "dodopayments-checkout": "^1.8.0", "dompurify": "^3.1.7", "fast-xml-parser": "^5.3.7", "globe.gl": "^2.45.0", "hls.js": "^1.6.15", - "jose": "^6.0.11", "i18next": "^25.8.10", "i18next-browser-languagedetector": "^8.2.1", + "jose": "^6.2.2", "maplibre-gl": "^5.16.0", "marked": "^17.0.3", "onnxruntime-web": "^1.23.2", diff --git a/pro-test/package-lock.json b/pro-test/package-lock.json index 1e88d50cc7..08c45b473a 100644 --- a/pro-test/package-lock.json +++ b/pro-test/package-lock.json @@ -10,6 +10,7 @@ "dependencies": { "@tailwindcss/vite": "^4.1.14", "@vitejs/plugin-react": "^5.0.4", + "hls.js": "^1.6.15", "i18next": "^25.8.14", "i18next-browser-languagedetector": "^8.2.1", "lucide-react": "^0.546.0", @@ -1661,6 +1662,12 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "license": "ISC" }, + "node_modules/hls.js": { + "version": "1.6.15", + "resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.6.15.tgz", + "integrity": "sha512-E3a5VwgXimGHwpRGV+WxRTKeSp2DW5DI5MWv34ulL3t5UNmyJWCQ1KmLEHbYzcfThfXG8amBL+fCYPneGHC4VA==", + "license": "Apache-2.0" + }, "node_modules/i18next": { "version": "25.8.14", "resolved": "https://registry.npmjs.org/i18next/-/i18next-25.8.14.tgz", diff --git a/pro-test/package.json b/pro-test/package.json index 00a7b71038..c809193b32 100644 --- a/pro-test/package.json +++ b/pro-test/package.json @@ -12,6 +12,7 @@ "dependencies": { "@tailwindcss/vite": "^4.1.14", "@vitejs/plugin-react": "^5.0.4", + "hls.js": "^1.6.15", "i18next": "^25.8.14", "i18next-browser-languagedetector": "^8.2.1", "lucide-react": "^0.546.0", diff --git a/pro-test/src/App.tsx b/pro-test/src/App.tsx index ee97d52594..4e6daed34f 100644 --- a/pro-test/src/App.tsx +++ b/pro-test/src/App.tsx @@ -12,6 +12,7 @@ import { Landmark, Fuel } from 'lucide-react'; import { t } from './i18n'; +import { PricingSection } from './components/PricingSection'; import dashboardFallback from './assets/worldmonitor-7-mar-2026.jpg'; import wiredLogo from './assets/wired-logo.svg'; @@ -177,7 +178,7 @@ const Navbar = () => ( {t('nav.api')} {t('nav.enterprise')} - + {t('nav.reserveAccess')} @@ -353,7 +354,7 @@ const TwoPathSplit = () => ( ))} - + {t('twoPath.proCta')} @@ -1190,6 +1191,7 @@ export default function App() { + diff --git a/pro-test/src/components/PricingSection.tsx b/pro-test/src/components/PricingSection.tsx new file mode 100644 index 0000000000..718c1792aa --- /dev/null +++ b/pro-test/src/components/PricingSection.tsx @@ -0,0 +1,296 @@ +import { useState } from 'react'; +import { motion } from 'motion/react'; +import { Check, ArrowRight, Zap } from 'lucide-react'; + +interface Tier { + name: string; + description: string; + features: string[]; + highlighted?: boolean; + // Pricing variants + price?: number | null; + period?: string; + monthlyPrice?: number; + annualPrice?: number | null; + // CTA variants + cta?: string; + href?: string; + monthlyProductId?: string; + annualProductId?: string; +} + +const TIERS: Tier[] = [ + { + name: "Free", + price: 0, + period: "forever", + description: "Get started with the essentials", + features: [ + "Core dashboard panels", + "Global news feed", + "Earthquake & weather alerts", + "Basic map view", + ], + cta: "Get Started", + href: "https://worldmonitor.app", + highlighted: false, + }, + { + name: "Pro", + monthlyPrice: 19, + annualPrice: 190, + description: "Full intelligence dashboard", + features: [ + "Everything in Free", + "AI stock analysis & backtesting", + "Daily market briefs", + "Military & geopolitical tracking", + "Custom widget builder", + "MCP data connectors", + "Priority data refresh", + ], + monthlyProductId: "pdt_0NaysSFAQ0y30nJOJMBpg", + annualProductId: "pdt_0NaysWqJBx3laiCzDbQfr", + highlighted: true, + }, + { + name: "API", + monthlyPrice: 49, + annualPrice: null, + description: "Programmatic access to intelligence data", + features: [ + "REST API access", + "Real-time data streams", + "10,000 requests/day", + "Webhook notifications", + "Custom data exports", + ], + monthlyProductId: "pdt_0NaysZwxCyk9Satf1jbqU", + highlighted: false, + }, + { + name: "Enterprise", + price: null, + description: "Custom solutions for organizations", + features: [ + "Everything in Pro + API", + "Unlimited API requests", + "Dedicated support", + "Custom integrations", + "SLA guarantee", + "On-premise option", + ], + cta: "Contact Sales", + href: "mailto:enterprise@worldmonitor.app", + highlighted: false, + }, +]; + +const CHECKOUT_DOMAIN = import.meta.env.VITE_DODO_ENVIRONMENT === 'live_mode' + ? 'https://checkout.dodopayments.com' + : 'https://test.checkout.dodopayments.com'; + +function buildCheckoutUrl(productId: string, refCode?: string): string { + let url = `${CHECKOUT_DOMAIN}/buy/${productId}?quantity=1`; + if (refCode) { + url += `&referral_code=${encodeURIComponent(refCode)}`; + } + return url; +} + +function formatPrice(tier: Tier, billing: 'monthly' | 'annual'): { amount: string; suffix: string } { + // Free tier + if (tier.price === 0) { + return { amount: "$0", suffix: "forever" }; + } + // Enterprise / custom + if (tier.price === null && tier.monthlyPrice === undefined) { + return { amount: "Custom", suffix: "tailored to you" }; + } + // API tier (monthly only) + if (tier.annualPrice === null && tier.monthlyPrice !== undefined) { + return { amount: `$${tier.monthlyPrice}`, suffix: "/mo" }; + } + // Pro tier with toggle + if (billing === 'annual' && tier.annualPrice != null) { + return { amount: `$${tier.annualPrice}`, suffix: "/yr" }; + } + return { amount: `$${tier.monthlyPrice}`, suffix: "/mo" }; +} + +function getCtaProps(tier: Tier, billing: 'monthly' | 'annual', refCode?: string): { label: string; href: string; external: boolean } { + // Free tier + if (tier.cta && tier.href && tier.price === 0) { + return { label: tier.cta, href: tier.href, external: true }; + } + // Enterprise + if (tier.cta && tier.href && tier.price === null) { + return { label: tier.cta, href: tier.href, external: true }; + } + // Pro tier + if (tier.monthlyProductId && tier.annualProductId) { + const productId = billing === 'annual' ? tier.annualProductId : tier.monthlyProductId; + return { + label: "Get Started", + href: buildCheckoutUrl(productId, refCode), + external: true, + }; + } + // API tier + if (tier.monthlyProductId) { + return { + label: "Get Started", + href: buildCheckoutUrl(tier.monthlyProductId, refCode), + external: true, + }; + } + return { label: "Learn More", href: "#", external: false }; +} + +export function PricingSection({ refCode }: { refCode?: string }) { + const [billing, setBilling] = useState<'monthly' | 'annual'>('monthly'); + + return ( +
+
+ {/* Header */} +
+ + Choose Your Plan + + + From real-time monitoring to full intelligence infrastructure. + Pick the tier that fits your mission. + + + {/* Billing toggle */} + + + + +
+ + {/* Tier cards grid */} +
+ {TIERS.map((tier, i) => { + const price = formatPrice(tier, billing); + const cta = getCtaProps(tier, billing, refCode); + + return ( + + {/* Most Popular badge */} + {tier.highlighted && ( +
+
+ )} + + {/* Tier name */} +

+ {tier.name} +

+ + {/* Description */} +

{tier.description}

+ + {/* Price */} +
+ {price.amount} + /{price.suffix} +
+ + {/* Features */} +
    + {tier.features.map((feature, fi) => ( +
  • +
  • + ))} +
+ + {/* CTA button */} + + {cta.label} +
+ ); + })} +
+ + {/* Discount code note */} +

+ Have a promo code? Enter it during checkout. +

+
+
+ ); +} diff --git a/public/pro/assets/index-CE0ARBnG.css b/public/pro/assets/index-CE0ARBnG.css new file mode 100644 index 0000000000..04aa6113ef --- /dev/null +++ b/public/pro/assets/index-CE0ARBnG.css @@ -0,0 +1 @@ +@import"https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;700&family=Space+Grotesk:wght@500;700&display=swap";/*! tailwindcss v4.2.1 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}@layer theme{:root,:host{--font-sans:"Inter", ui-sans-serif, system-ui, sans-serif;--font-mono:"JetBrains Mono", ui-monospace, SFMono-Regular, monospace;--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-green-300:oklch(87.1% .15 154.449);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-emerald-300:oklch(84.5% .143 164.978);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-800:oklch(27.8% .033 256.848);--color-zinc-900:oklch(21% .006 285.885);--color-black:#000;--spacing:.25rem;--container-md:28rem;--container-xl:36rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--container-5xl:64rem;--container-6xl:72rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--text-5xl:3rem;--text-5xl--line-height:1;--text-6xl:3.75rem;--text-6xl--line-height:1;--text-8xl:6rem;--text-8xl--line-height:1;--font-weight-light:300;--font-weight-medium:500;--font-weight-bold:700;--tracking-tighter:-.05em;--tracking-tight:-.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-lg:.5rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--font-display:"Space Grotesk", "Inter", sans-serif;--color-wm-bg:#050505;--color-wm-card:#111;--color-wm-border:#222;--color-wm-green:#4ade80;--color-wm-blue:#60a5fa;--color-wm-text:#f3f4f6;--color-wm-muted:#9ca3af}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.-top-3{top:calc(var(--spacing) * -3)}.top-0{top:calc(var(--spacing) * 0)}.top-24{top:calc(var(--spacing) * 24)}.right-0{right:calc(var(--spacing) * 0)}.bottom-4{bottom:calc(var(--spacing) * 4)}.left-0{left:calc(var(--spacing) * 0)}.left-1\/2{left:50%}.z-10{z-index:10}.z-50{z-index:50}.order-1{order:1}.order-2{order:2}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.-mx-6{margin-inline:calc(var(--spacing) * -6)}.mx-3{margin-inline:calc(var(--spacing) * 3)}.mx-auto{margin-inline:auto}.my-4{margin-block:calc(var(--spacing) * 4)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-8{margin-top:calc(var(--spacing) * 8)}.mt-10{margin-top:calc(var(--spacing) * 10)}.mt-12{margin-top:calc(var(--spacing) * 12)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.mb-10{margin-bottom:calc(var(--spacing) * 10)}.mb-12{margin-bottom:calc(var(--spacing) * 12)}.mb-16{margin-bottom:calc(var(--spacing) * 16)}.ml-1{margin-left:calc(var(--spacing) * 1)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-auto{margin-left:auto}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.aspect-\[16\/9\]{aspect-ratio:16/9}.h-0{height:calc(var(--spacing) * 0)}.h-1{height:calc(var(--spacing) * 1)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-8{height:calc(var(--spacing) * 8)}.h-10{height:calc(var(--spacing) * 10)}.h-16{height:calc(var(--spacing) * 16)}.h-28{height:calc(var(--spacing) * 28)}.h-40{height:calc(var(--spacing) * 40)}.h-full{height:100%}.min-h-screen{min-height:100vh}.w-0{width:calc(var(--spacing) * 0)}.w-3{width:calc(var(--spacing) * 3)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-8{width:calc(var(--spacing) * 8)}.w-10{width:calc(var(--spacing) * 10)}.w-64{width:calc(var(--spacing) * 64)}.w-full{width:100%}.max-w-2{max-width:calc(var(--spacing) * 2)}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-5xl{max-width:var(--container-5xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-7xl{max-width:var(--container-7xl)}.max-w-md{max-width:var(--container-md)}.max-w-xl{max-width:var(--container-xl)}.flex-1{flex:1}.shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.cursor-pointer{cursor:pointer}.resize-none{resize:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-8{gap:calc(var(--spacing) * 8)}.gap-16{gap:calc(var(--spacing) * 16)}.gap-\[3px\]{gap:3px}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-none{border-radius:0}.rounded-sm{border-radius:var(--radius-sm)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-x-0{border-inline-style:var(--tw-border-style);border-inline-width:0}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-0{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-\[\#35373b\]{border-color:#35373b}.border-blue-500{border-color:var(--color-blue-500)}.border-orange-500{border-color:var(--color-orange-500)}.border-wm-border{border-color:var(--color-wm-border)}.border-wm-border\/50{border-color:#22222280}@supports (color:color-mix(in lab,red,red)){.border-wm-border\/50{border-color:color-mix(in oklab,var(--color-wm-border) 50%,transparent)}}.border-wm-green{border-color:var(--color-wm-green)}.border-wm-green\/30{border-color:#4ade804d}@supports (color:color-mix(in lab,red,red)){.border-wm-green\/30{border-color:color-mix(in oklab,var(--color-wm-green) 30%,transparent)}}.border-yellow-500{border-color:var(--color-yellow-500)}.bg-\[\#0a0a0a\]{background-color:#0a0a0a}.bg-\[\#1a1d21\]{background-color:#1a1d21}.bg-\[\#020202\]{background-color:#020202}.bg-\[\#060606\]{background-color:#060606}.bg-\[\#222529\]{background-color:#222529}.bg-black{background-color:var(--color-black)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-green-500{background-color:var(--color-green-500)}.bg-green-500\/70{background-color:#00c758b3}@supports (color:color-mix(in lab,red,red)){.bg-green-500\/70{background-color:color-mix(in oklab,var(--color-green-500) 70%,transparent)}}.bg-red-500{background-color:var(--color-red-500)}.bg-red-500\/70{background-color:#fb2c36b3}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/70{background-color:color-mix(in oklab,var(--color-red-500) 70%,transparent)}}.bg-wm-bg{background-color:var(--color-wm-bg)}.bg-wm-bg\/20{background-color:#05050533}@supports (color:color-mix(in lab,red,red)){.bg-wm-bg\/20{background-color:color-mix(in oklab,var(--color-wm-bg) 20%,transparent)}}.bg-wm-card{background-color:var(--color-wm-card)}.bg-wm-card\/20{background-color:#1113}@supports (color:color-mix(in lab,red,red)){.bg-wm-card\/20{background-color:color-mix(in oklab,var(--color-wm-card) 20%,transparent)}}.bg-wm-card\/30{background-color:#1111114d}@supports (color:color-mix(in lab,red,red)){.bg-wm-card\/30{background-color:color-mix(in oklab,var(--color-wm-card) 30%,transparent)}}.bg-wm-card\/50{background-color:#11111180}@supports (color:color-mix(in lab,red,red)){.bg-wm-card\/50{background-color:color-mix(in oklab,var(--color-wm-card) 50%,transparent)}}.bg-wm-green{background-color:var(--color-wm-green)}.bg-wm-green\/5{background-color:#4ade800d}@supports (color:color-mix(in lab,red,red)){.bg-wm-green\/5{background-color:color-mix(in oklab,var(--color-wm-green) 5%,transparent)}}.bg-wm-green\/8{background-color:#4ade8014}@supports (color:color-mix(in lab,red,red)){.bg-wm-green\/8{background-color:color-mix(in oklab,var(--color-wm-green) 8%,transparent)}}.bg-wm-green\/10{background-color:#4ade801a}@supports (color:color-mix(in lab,red,red)){.bg-wm-green\/10{background-color:color-mix(in oklab,var(--color-wm-green) 10%,transparent)}}.bg-wm-green\/20{background-color:#4ade8033}@supports (color:color-mix(in lab,red,red)){.bg-wm-green\/20{background-color:color-mix(in oklab,var(--color-wm-green) 20%,transparent)}}.bg-wm-muted\/20{background-color:#9ca3af33}@supports (color:color-mix(in lab,red,red)){.bg-wm-muted\/20{background-color:color-mix(in oklab,var(--color-wm-muted) 20%,transparent)}}.bg-yellow-500{background-color:var(--color-yellow-500)}.bg-yellow-500\/70{background-color:#edb200b3}@supports (color:color-mix(in lab,red,red)){.bg-yellow-500\/70{background-color:color-mix(in oklab,var(--color-yellow-500) 70%,transparent)}}.bg-zinc-900{background-color:var(--color-zinc-900)}.bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-\[radial-gradient\(circle_at_50\%_20\%\,rgba\(74\,222\,128\,0\.08\)_0\%\,transparent_50\%\)\]{background-image:radial-gradient(circle at 50% 20%,#4ade8014,#0000 50%)}.from-wm-bg\/80{--tw-gradient-from:#050505cc}@supports (color:color-mix(in lab,red,red)){.from-wm-bg\/80{--tw-gradient-from:color-mix(in oklab, var(--color-wm-bg) 80%, transparent)}}.from-wm-bg\/80{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-wm-green{--tw-gradient-from:var(--color-wm-green);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.via-transparent{--tw-gradient-via:transparent;--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.to-emerald-300{--tw-gradient-to:var(--color-emerald-300);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-transparent{--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.object-cover{object-fit:cover}.p-1{padding:calc(var(--spacing) * 1)}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-8{padding-inline:calc(var(--spacing) * 8)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-16{padding-block:calc(var(--spacing) * 16)}.py-24{padding-block:calc(var(--spacing) * 24)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-8{padding-top:calc(var(--spacing) * 8)}.pt-24{padding-top:calc(var(--spacing) * 24)}.pt-28{padding-top:calc(var(--spacing) * 28)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-6{padding-bottom:calc(var(--spacing) * 6)}.pb-12{padding-bottom:calc(var(--spacing) * 12)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-4{padding-left:calc(var(--spacing) * 4)}.text-center{text-align:center}.font-display{font-family:var(--font-display)}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.leading-\[0\.95\]{--tw-leading:.95;line-height:.95}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.tracking-\[2px\]{--tw-tracking:2px;letter-spacing:2px}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-tighter{--tw-tracking:var(--tracking-tighter);letter-spacing:var(--tracking-tighter)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.text-blue-400{color:var(--color-blue-400)}.text-gray-200{color:var(--color-gray-200)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-orange-400{color:var(--color-orange-400)}.text-red-400{color:var(--color-red-400)}.text-transparent{color:#0000}.text-wm-bg{color:var(--color-wm-bg)}.text-wm-blue{color:var(--color-wm-blue)}.text-wm-border{color:var(--color-wm-border)}.text-wm-border\/50{color:#22222280}@supports (color:color-mix(in lab,red,red)){.text-wm-border\/50{color:color-mix(in oklab,var(--color-wm-border) 50%,transparent)}}.text-wm-green{color:var(--color-wm-green)}.text-wm-muted{color:var(--color-wm-muted)}.text-wm-muted\/40{color:#9ca3af66}@supports (color:color-mix(in lab,red,red)){.text-wm-muted\/40{color:color-mix(in oklab,var(--color-wm-muted) 40%,transparent)}}.text-wm-text{color:var(--color-wm-text)}.text-yellow-400{color:var(--color-yellow-400)}.uppercase{text-transform:uppercase}.italic{font-style:italic}.opacity-0{opacity:0}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-wm-green\/5{--tw-shadow-color:#4ade800d}@supports (color:color-mix(in lab,red,red)){.shadow-wm-green\/5{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-wm-green) 5%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-wm-green\/10{--tw-shadow-color:#4ade801a}@supports (color:color-mix(in lab,red,red)){.shadow-wm-green\/10{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-wm-green) 10%, transparent) var(--tw-shadow-alpha), transparent)}}.blur-\[80px\]{--tw-blur:blur(80px);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,)}.brightness-0{--tw-brightness:brightness(0%);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,)}.invert{--tw-invert:invert(100%);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,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.select-all{-webkit-user-select:all;user-select:all}.group-open\:rotate-180:is(:where(.group):is([open],:popover-open,:open) *){rotate:180deg}.selection\:bg-wm-green\/30 ::selection{background-color:#4ade804d}@supports (color:color-mix(in lab,red,red)){.selection\:bg-wm-green\/30 ::selection{background-color:color-mix(in oklab,var(--color-wm-green) 30%,transparent)}}.selection\:bg-wm-green\/30::selection{background-color:#4ade804d}@supports (color:color-mix(in lab,red,red)){.selection\:bg-wm-green\/30::selection{background-color:color-mix(in oklab,var(--color-wm-green) 30%,transparent)}}.selection\:text-wm-green ::selection{color:var(--color-wm-green)}.selection\:text-wm-green::selection{color:var(--color-wm-green)}@media(hover:hover){.hover\:border-wm-green\/30:hover{border-color:#4ade804d}@supports (color:color-mix(in lab,red,red)){.hover\:border-wm-green\/30:hover{border-color:color-mix(in oklab,var(--color-wm-green) 30%,transparent)}}.hover\:border-wm-text:hover{border-color:var(--color-wm-text)}.hover\:bg-green-400:hover{background-color:var(--color-green-400)}.hover\:bg-wm-card\/50:hover{background-color:#11111180}@supports (color:color-mix(in lab,red,red)){.hover\:bg-wm-card\/50:hover{background-color:color-mix(in oklab,var(--color-wm-card) 50%,transparent)}}.hover\:text-green-300:hover{color:var(--color-green-300)}.hover\:text-wm-green:hover{color:var(--color-wm-green)}.hover\:text-wm-text:hover{color:var(--color-wm-text)}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-100:hover{opacity:1}}.focus\:border-wm-green:focus{border-color:var(--color-wm-green)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}@media(min-width:40rem){.sm\:flex-row{flex-direction:row}}@media(min-width:48rem){.md\:mx-5{margin-inline:calc(var(--spacing) * 5)}.md\:my-8{margin-block:calc(var(--spacing) * 8)}.md\:mt-0{margin-top:calc(var(--spacing) * 0)}.md\:mb-0{margin-bottom:calc(var(--spacing) * 0)}.md\:block{display:block}.md\:flex{display:flex}.md\:hidden{display:none}.md\:h-44{height:calc(var(--spacing) * 44)}.md\:h-56{height:calc(var(--spacing) * 56)}.md\:w-96{width:calc(var(--spacing) * 96)}.md\:max-w-3{max-width:calc(var(--spacing) * 3)}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:gap-1{gap:calc(var(--spacing) * 1)}.md\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.md\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.md\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.md\:text-8xl{font-size:var(--text-8xl);line-height:var(--tw-leading,var(--text-8xl--line-height))}.md\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}}@media(min-width:64rem){.lg\:order-1{order:1}.lg\:order-2{order:2}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.\[\&_summary\:\:-webkit-details-marker\]\:hidden summary::-webkit-details-marker{display:none}}body{background-color:var(--color-wm-bg);color:var(--color-wm-text);font-family:var(--font-sans);-webkit-font-smoothing:antialiased}.glass-panel{-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border:1px solid var(--color-wm-border);background:#111111b3}.data-grid{background:var(--color-wm-border);border:1px solid var(--color-wm-border);grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:1px;display:grid}.data-cell{background:var(--color-wm-bg);padding:1.5rem}.text-glow{text-shadow:0 0 20px #4ade804d}.border-glow{box-shadow:0 0 20px #4ade801a}.marquee-track{animation:45s linear infinite marquee;display:flex}@keyframes marquee{0%{transform:translate(0)}to{transform:translate(-50%)}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false} diff --git a/public/pro/assets/index-DCXuit2z.js b/public/pro/assets/index-DCXuit2z.js new file mode 100644 index 0000000000..0bc35f1ea1 --- /dev/null +++ b/public/pro/assets/index-DCXuit2z.js @@ -0,0 +1,234 @@ +(function(){const a=document.createElement("link").relList;if(a&&a.supports&&a.supports("modulepreload"))return;for(const u of document.querySelectorAll('link[rel="modulepreload"]'))r(u);new MutationObserver(u=>{for(const f of u)if(f.type==="childList")for(const d of f.addedNodes)d.tagName==="LINK"&&d.rel==="modulepreload"&&r(d)}).observe(document,{childList:!0,subtree:!0});function l(u){const f={};return u.integrity&&(f.integrity=u.integrity),u.referrerPolicy&&(f.referrerPolicy=u.referrerPolicy),u.crossOrigin==="use-credentials"?f.credentials="include":u.crossOrigin==="anonymous"?f.credentials="omit":f.credentials="same-origin",f}function r(u){if(u.ep)return;u.ep=!0;const f=l(u);fetch(u.href,f)}})();var Qu={exports:{}},xs={};/** + * @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 Ep;function F1(){if(Ep)return xs;Ep=1;var i=Symbol.for("react.transitional.element"),a=Symbol.for("react.fragment");function l(r,u,f){var d=null;if(f!==void 0&&(d=""+f),u.key!==void 0&&(d=""+u.key),"key"in u){f={};for(var h in u)h!=="key"&&(f[h]=u[h])}else f=u;return u=f.ref,{$$typeof:i,type:r,key:d,ref:u!==void 0?u:null,props:f}}return xs.Fragment=a,xs.jsx=l,xs.jsxs=l,xs}var Dp;function Q1(){return Dp||(Dp=1,Qu.exports=F1()),Qu.exports}var m=Q1(),Zu={exports:{}},re={};/** + * @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 Mp;function Z1(){if(Mp)return re;Mp=1;var i=Symbol.for("react.transitional.element"),a=Symbol.for("react.portal"),l=Symbol.for("react.fragment"),r=Symbol.for("react.strict_mode"),u=Symbol.for("react.profiler"),f=Symbol.for("react.consumer"),d=Symbol.for("react.context"),h=Symbol.for("react.forward_ref"),y=Symbol.for("react.suspense"),p=Symbol.for("react.memo"),x=Symbol.for("react.lazy"),b=Symbol.for("react.activity"),w=Symbol.iterator;function j(A){return A===null||typeof A!="object"?null:(A=w&&A[w]||A["@@iterator"],typeof A=="function"?A:null)}var N={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},V=Object.assign,B={};function q(A,L,P){this.props=A,this.context=L,this.refs=B,this.updater=P||N}q.prototype.isReactComponent={},q.prototype.setState=function(A,L){if(typeof A!="object"&&typeof A!="function"&&A!=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,A,L,"setState")},q.prototype.forceUpdate=function(A){this.updater.enqueueForceUpdate(this,A,"forceUpdate")};function Y(){}Y.prototype=q.prototype;function H(A,L,P){this.props=A,this.context=L,this.refs=B,this.updater=P||N}var K=H.prototype=new Y;K.constructor=H,V(K,q.prototype),K.isPureReactComponent=!0;var X=Array.isArray;function ae(){}var Q={H:null,A:null,T:null,S:null},I=Object.prototype.hasOwnProperty;function ce(A,L,P){var Z=P.ref;return{$$typeof:i,type:A,key:L,ref:Z!==void 0?Z:null,props:P}}function ye(A,L){return ce(A.type,L,A.props)}function ot(A){return typeof A=="object"&&A!==null&&A.$$typeof===i}function Ve(A){var L={"=":"=0",":":"=2"};return"$"+A.replace(/[=:]/g,function(P){return L[P]})}var He=/\/+/g;function ze(A,L){return typeof A=="object"&&A!==null&&A.key!=null?Ve(""+A.key):L.toString(36)}function tt(A){switch(A.status){case"fulfilled":return A.value;case"rejected":throw A.reason;default:switch(typeof A.status=="string"?A.then(ae,ae):(A.status="pending",A.then(function(L){A.status==="pending"&&(A.status="fulfilled",A.value=L)},function(L){A.status==="pending"&&(A.status="rejected",A.reason=L)})),A.status){case"fulfilled":return A.value;case"rejected":throw A.reason}}throw A}function _(A,L,P,Z,le){var de=typeof A;(de==="undefined"||de==="boolean")&&(A=null);var Te=!1;if(A===null)Te=!0;else switch(de){case"bigint":case"string":case"number":Te=!0;break;case"object":switch(A.$$typeof){case i:case a:Te=!0;break;case x:return Te=A._init,_(Te(A._payload),L,P,Z,le)}}if(Te)return le=le(A),Te=Z===""?"."+ze(A,0):Z,X(le)?(P="",Te!=null&&(P=Te.replace(He,"$&/")+"/"),_(le,L,P,"",function(Ni){return Ni})):le!=null&&(ot(le)&&(le=ye(le,P+(le.key==null||A&&A.key===le.key?"":(""+le.key).replace(He,"$&/")+"/")+Te)),L.push(le)),1;Te=0;var ft=Z===""?".":Z+":";if(X(A))for(var qe=0;qe>>1,fe=_[ie];if(0>>1;ieu(P,F))Zu(le,P)?(_[ie]=le,_[Z]=F,ie=Z):(_[ie]=P,_[L]=F,ie=L);else if(Zu(le,F))_[ie]=le,_[Z]=F,ie=Z;else break e}}return G}function u(_,G){var F=_.sortIndex-G.sortIndex;return F!==0?F:_.id-G.id}if(i.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var f=performance;i.unstable_now=function(){return f.now()}}else{var d=Date,h=d.now();i.unstable_now=function(){return d.now()-h}}var y=[],p=[],x=1,b=null,w=3,j=!1,N=!1,V=!1,B=!1,q=typeof setTimeout=="function"?setTimeout:null,Y=typeof clearTimeout=="function"?clearTimeout:null,H=typeof setImmediate<"u"?setImmediate:null;function K(_){for(var G=l(p);G!==null;){if(G.callback===null)r(p);else if(G.startTime<=_)r(p),G.sortIndex=G.expirationTime,a(y,G);else break;G=l(p)}}function X(_){if(V=!1,K(_),!N)if(l(y)!==null)N=!0,ae||(ae=!0,Ve());else{var G=l(p);G!==null&&tt(X,G.startTime-_)}}var ae=!1,Q=-1,I=5,ce=-1;function ye(){return B?!0:!(i.unstable_now()-ce_&&ye());){var ie=b.callback;if(typeof ie=="function"){b.callback=null,w=b.priorityLevel;var fe=ie(b.expirationTime<=_);if(_=i.unstable_now(),typeof fe=="function"){b.callback=fe,K(_),G=!0;break t}b===l(y)&&r(y),K(_)}else r(y);b=l(y)}if(b!==null)G=!0;else{var A=l(p);A!==null&&tt(X,A.startTime-_),G=!1}}break e}finally{b=null,w=F,j=!1}G=void 0}}finally{G?Ve():ae=!1}}}var Ve;if(typeof H=="function")Ve=function(){H(ot)};else if(typeof MessageChannel<"u"){var He=new MessageChannel,ze=He.port2;He.port1.onmessage=ot,Ve=function(){ze.postMessage(null)}}else Ve=function(){q(ot,0)};function tt(_,G){Q=q(function(){_(i.unstable_now())},G)}i.unstable_IdlePriority=5,i.unstable_ImmediatePriority=1,i.unstable_LowPriority=4,i.unstable_NormalPriority=3,i.unstable_Profiling=null,i.unstable_UserBlockingPriority=2,i.unstable_cancelCallback=function(_){_.callback=null},i.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"):I=0<_?Math.floor(1e3/_):5},i.unstable_getCurrentPriorityLevel=function(){return w},i.unstable_next=function(_){switch(w){case 1:case 2:case 3:var G=3;break;default:G=w}var F=w;w=G;try{return _()}finally{w=F}},i.unstable_requestPaint=function(){B=!0},i.unstable_runWithPriority=function(_,G){switch(_){case 1:case 2:case 3:case 4:case 5:break;default:_=3}var F=w;w=_;try{return G()}finally{w=F}},i.unstable_scheduleCallback=function(_,G,F){var ie=i.unstable_now();switch(typeof F=="object"&&F!==null?(F=F.delay,F=typeof F=="number"&&0ie?(_.sortIndex=F,a(p,_),l(y)===null&&_===l(p)&&(V?(Y(Q),Q=-1):V=!0,tt(X,F-ie))):(_.sortIndex=fe,a(y,_),N||j||(N=!0,ae||(ae=!0,Ve()))),_},i.unstable_shouldYield=ye,i.unstable_wrapCallback=function(_){var G=w;return function(){var F=w;w=G;try{return _.apply(this,arguments)}finally{w=F}}}})(Wu)),Wu}var Rp;function $1(){return Rp||(Rp=1,$u.exports=J1()),$u.exports}var Iu={exports:{}},ut={};/** + * @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 _p;function W1(){if(_p)return ut;_p=1;var i=Xc();function a(y){var p="https://react.dev/errors/"+y;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(i)}catch(a){console.error(a)}}return i(),Iu.exports=W1(),Iu.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 Lp;function eb(){if(Lp)return vs;Lp=1;var i=$1(),a=Xc(),l=I1();function r(e){var t="https://react.dev/errors/"+e;if(1fe||(e.current=ie[fe],ie[fe]=null,fe--)}function P(e,t){fe++,ie[fe]=e.current,e.current=t}var Z=A(null),le=A(null),de=A(null),Te=A(null);function ft(e,t){switch(P(de,t),P(le,e),P(Z,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?Jm(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=Jm(t),e=$m(t,e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}L(Z),P(Z,e)}function qe(){L(Z),L(le),L(de)}function Ni(e){e.memoizedState!==null&&P(Te,e);var t=Z.current,n=$m(t,e.type);t!==n&&(P(le,e),P(Z,n))}function Bs(e){le.current===e&&(L(Z),L(le)),Te.current===e&&(L(Te),ms._currentValue=F)}var Mr,jf;function ta(e){if(Mr===void 0)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);Mr=t&&t[1]||"",jf=-1)":-1o||T[s]!==C[o]){var z=` +`+T[s].replace(" at new "," at ");return e.displayName&&z.includes("")&&(z=z.replace("",e.displayName)),z}while(1<=s&&0<=o);break}}}finally{Cr=!1,Error.prepareStackTrace=n}return(n=e?e.displayName||e.name:"")?ta(n):""}function Ax(e,t){switch(e.tag){case 26:case 27:case 5:return ta(e.type);case 16:return ta("Lazy");case 13:return e.child!==t&&t!==null?ta("Suspense Fallback"):ta("Suspense");case 19:return ta("SuspenseList");case 0:case 15:return Or(e.type,!1);case 11:return Or(e.type.render,!1);case 1:return Or(e.type,!0);case 31:return ta("Activity");default:return""}}function Ef(e){try{var t="",n=null;do t+=Ax(e,n),n=e,e=e.return;while(e);return t}catch(s){return` +Error generating stack: `+s.message+` +`+s.stack}}var Rr=Object.prototype.hasOwnProperty,_r=i.unstable_scheduleCallback,zr=i.unstable_cancelCallback,Nx=i.unstable_shouldYield,jx=i.unstable_requestPaint,wt=i.unstable_now,Ex=i.unstable_getCurrentPriorityLevel,Df=i.unstable_ImmediatePriority,Mf=i.unstable_UserBlockingPriority,Hs=i.unstable_NormalPriority,Dx=i.unstable_LowPriority,Cf=i.unstable_IdlePriority,Mx=i.log,Cx=i.unstable_setDisableYieldValue,ji=null,Tt=null;function Nn(e){if(typeof Mx=="function"&&Cx(e),Tt&&typeof Tt.setStrictMode=="function")try{Tt.setStrictMode(ji,e)}catch{}}var At=Math.clz32?Math.clz32:_x,Ox=Math.log,Rx=Math.LN2;function _x(e){return e>>>=0,e===0?32:31-(Ox(e)/Rx|0)|0}var qs=256,Gs=262144,Ys=4194304;function na(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&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 Ps(e,t,n){var s=e.pendingLanes;if(s===0)return 0;var o=0,c=e.suspendedLanes,g=e.pingedLanes;e=e.warmLanes;var v=s&134217727;return v!==0?(s=v&~c,s!==0?o=na(s):(g&=v,g!==0?o=na(g):n||(n=v&~e,n!==0&&(o=na(n))))):(v=s&~c,v!==0?o=na(v):g!==0?o=na(g):n||(n=s&~e,n!==0&&(o=na(n)))),o===0?0:t!==0&&t!==o&&(t&c)===0&&(c=o&-o,n=t&-t,c>=n||c===32&&(n&4194048)!==0)?t:o}function Ei(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function zx(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+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 t+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 Of(){var e=Ys;return Ys<<=1,(Ys&62914560)===0&&(Ys=4194304),e}function Lr(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function Di(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function Lx(e,t,n,s,o,c){var g=e.pendingLanes;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=n,e.entangledLanes&=n,e.errorRecoveryDisabledLanes&=n,e.shellSuspendCounter=0;var v=e.entanglements,T=e.expirationTimes,C=e.hiddenUpdates;for(n=g&~n;0"u")return null;try{return e.activeElement||e.body}catch{return e.body}}var qx=/[\n"\\]/g;function _t(e){return e.replace(qx,function(t){return"\\"+t.charCodeAt(0).toString(16)+" "})}function qr(e,t,n,s,o,c,g,v){e.name="",g!=null&&typeof g!="function"&&typeof g!="symbol"&&typeof g!="boolean"?e.type=g:e.removeAttribute("type"),t!=null?g==="number"?(t===0&&e.value===""||e.value!=t)&&(e.value=""+Rt(t)):e.value!==""+Rt(t)&&(e.value=""+Rt(t)):g!=="submit"&&g!=="reset"||e.removeAttribute("value"),t!=null?Gr(e,g,Rt(t)):n!=null?Gr(e,g,Rt(n)):s!=null&&e.removeAttribute("value"),o==null&&c!=null&&(e.defaultChecked=!!c),o!=null&&(e.checked=o&&typeof o!="function"&&typeof o!="symbol"),v!=null&&typeof v!="function"&&typeof v!="symbol"&&typeof v!="boolean"?e.name=""+Rt(v):e.removeAttribute("name")}function Pf(e,t,n,s,o,c,g,v){if(c!=null&&typeof c!="function"&&typeof c!="symbol"&&typeof c!="boolean"&&(e.type=c),t!=null||n!=null){if(!(c!=="submit"&&c!=="reset"||t!=null)){Hr(e);return}n=n!=null?""+Rt(n):"",t=t!=null?""+Rt(t):n,v||t===e.value||(e.value=t),e.defaultValue=t}s=s??o,s=typeof s!="function"&&typeof s!="symbol"&&!!s,e.checked=v?e.checked:!!s,e.defaultChecked=!!s,g!=null&&typeof g!="function"&&typeof g!="symbol"&&typeof g!="boolean"&&(e.name=g),Hr(e)}function Gr(e,t,n){t==="number"&&Fs(e.ownerDocument)===e||e.defaultValue===""+n||(e.defaultValue=""+n)}function Ra(e,t,n,s){if(e=e.options,t){t={};for(var o=0;o"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Fr=!1;if(on)try{var Ri={};Object.defineProperty(Ri,"passive",{get:function(){Fr=!0}}),window.addEventListener("test",Ri,Ri),window.removeEventListener("test",Ri,Ri)}catch{Fr=!1}var En=null,Qr=null,Zs=null;function $f(){if(Zs)return Zs;var e,t=Qr,n=t.length,s,o="value"in En?En.value:En.textContent,c=o.length;for(e=0;e=Li),ad=" ",id=!1;function sd(e,t){switch(e){case"keyup":return pv.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function ld(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Va=!1;function yv(e,t){switch(e){case"compositionend":return ld(t);case"keypress":return t.which!==32?null:(id=!0,ad);case"textInput":return e=t.data,e===ad&&id?null:e;default:return null}}function xv(e,t){if(Va)return e==="compositionend"||!Ir&&sd(e,t)?(e=$f(),Zs=Qr=En=null,Va=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=s}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=md(n)}}function gd(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?gd(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function yd(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=Fs(e.document);t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=Fs(e.document)}return t}function no(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}var jv=on&&"documentMode"in document&&11>=document.documentMode,ka=null,ao=null,Bi=null,io=!1;function xd(e,t,n){var s=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;io||ka==null||ka!==Fs(s)||(s=ka,"selectionStart"in s&&no(s)?s={start:s.selectionStart,end:s.selectionEnd}:(s=(s.ownerDocument&&s.ownerDocument.defaultView||window).getSelection(),s={anchorNode:s.anchorNode,anchorOffset:s.anchorOffset,focusNode:s.focusNode,focusOffset:s.focusOffset}),Bi&&Ui(Bi,s)||(Bi=s,s=Gl(ao,"onSelect"),0>=g,o-=g,$t=1<<32-At(t)+o|n<ue?(ge=W,W=null):ge=W.sibling;var Se=O(D,W,M[ue],k);if(Se===null){W===null&&(W=ge);break}e&&W&&Se.alternate===null&&t(D,W),E=c(Se,E,ue),be===null?ee=Se:be.sibling=Se,be=Se,W=ge}if(ue===M.length)return n(D,W),xe&&cn(D,ue),ee;if(W===null){for(;ueue?(ge=W,W=null):ge=W.sibling;var Zn=O(D,W,Se.value,k);if(Zn===null){W===null&&(W=ge);break}e&&W&&Zn.alternate===null&&t(D,W),E=c(Zn,E,ue),be===null?ee=Zn:be.sibling=Zn,be=Zn,W=ge}if(Se.done)return n(D,W),xe&&cn(D,ue),ee;if(W===null){for(;!Se.done;ue++,Se=M.next())Se=U(D,Se.value,k),Se!==null&&(E=c(Se,E,ue),be===null?ee=Se:be.sibling=Se,be=Se);return xe&&cn(D,ue),ee}for(W=s(W);!Se.done;ue++,Se=M.next())Se=R(W,D,ue,Se.value,k),Se!==null&&(e&&Se.alternate!==null&&W.delete(Se.key===null?ue:Se.key),E=c(Se,E,ue),be===null?ee=Se:be.sibling=Se,be=Se);return e&&W.forEach(function(X1){return t(D,X1)}),xe&&cn(D,ue),ee}function De(D,E,M,k){if(typeof M=="object"&&M!==null&&M.type===V&&M.key===null&&(M=M.props.children),typeof M=="object"&&M!==null){switch(M.$$typeof){case j:e:{for(var ee=M.key;E!==null;){if(E.key===ee){if(ee=M.type,ee===V){if(E.tag===7){n(D,E.sibling),k=o(E,M.props.children),k.return=D,D=k;break e}}else if(E.elementType===ee||typeof ee=="object"&&ee!==null&&ee.$$typeof===I&&ha(ee)===E.type){n(D,E.sibling),k=o(E,M.props),Ki(k,M),k.return=D,D=k;break e}n(D,E);break}else t(D,E);E=E.sibling}M.type===V?(k=oa(M.props.children,D.mode,k,M.key),k.return=D,D=k):(k=sl(M.type,M.key,M.props,null,D.mode,k),Ki(k,M),k.return=D,D=k)}return g(D);case N:e:{for(ee=M.key;E!==null;){if(E.key===ee)if(E.tag===4&&E.stateNode.containerInfo===M.containerInfo&&E.stateNode.implementation===M.implementation){n(D,E.sibling),k=o(E,M.children||[]),k.return=D,D=k;break e}else{n(D,E);break}else t(D,E);E=E.sibling}k=fo(M,D.mode,k),k.return=D,D=k}return g(D);case I:return M=ha(M),De(D,E,M,k)}if(tt(M))return J(D,E,M,k);if(Ve(M)){if(ee=Ve(M),typeof ee!="function")throw Error(r(150));return M=ee.call(M),ne(D,E,M,k)}if(typeof M.then=="function")return De(D,E,dl(M),k);if(M.$$typeof===H)return De(D,E,ol(D,M),k);hl(D,M)}return typeof M=="string"&&M!==""||typeof M=="number"||typeof M=="bigint"?(M=""+M,E!==null&&E.tag===6?(n(D,E.sibling),k=o(E,M),k.return=D,D=k):(n(D,E),k=co(M,D.mode,k),k.return=D,D=k),g(D)):n(D,E)}return function(D,E,M,k){try{Pi=0;var ee=De(D,E,M,k);return Qa=null,ee}catch(W){if(W===Fa||W===cl)throw W;var be=jt(29,W,null,D.mode);return be.lanes=k,be.return=D,be}finally{}}}var pa=qd(!0),Gd=qd(!1),Rn=!1;function Ao(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function No(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function _n(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function zn(e,t,n){var s=e.updateQueue;if(s===null)return null;if(s=s.shared,(we&2)!==0){var o=s.pending;return o===null?t.next=t:(t.next=o.next,o.next=t),s.pending=t,t=il(e),Nd(e,null,n),t}return al(e,s,t,n),il(e)}function Xi(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194048)!==0)){var s=t.lanes;s&=e.pendingLanes,n|=s,t.lanes=n,_f(e,n)}}function jo(e,t){var n=e.updateQueue,s=e.alternate;if(s!==null&&(s=s.updateQueue,n===s)){var o=null,c=null;if(n=n.firstBaseUpdate,n!==null){do{var g={lane:n.lane,tag:n.tag,payload:n.payload,callback:null,next:null};c===null?o=c=g:c=c.next=g,n=n.next}while(n!==null);c===null?o=c=t:c=c.next=t}else o=c=t;n={baseState:s.baseState,firstBaseUpdate:o,lastBaseUpdate:c,shared:s.shared,callbacks:s.callbacks},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}var Eo=!1;function Fi(){if(Eo){var e=Xa;if(e!==null)throw e}}function Qi(e,t,n,s){Eo=!1;var o=e.updateQueue;Rn=!1;var c=o.firstBaseUpdate,g=o.lastBaseUpdate,v=o.shared.pending;if(v!==null){o.shared.pending=null;var T=v,C=T.next;T.next=null,g===null?c=C:g.next=C,g=T;var z=e.alternate;z!==null&&(z=z.updateQueue,v=z.lastBaseUpdate,v!==g&&(v===null?z.firstBaseUpdate=C:v.next=C,z.lastBaseUpdate=T))}if(c!==null){var U=o.baseState;g=0,z=C=T=null,v=c;do{var O=v.lane&-536870913,R=O!==v.lane;if(R?(pe&O)===O:(s&O)===O){O!==0&&O===Ka&&(Eo=!0),z!==null&&(z=z.next={lane:0,tag:v.tag,payload:v.payload,callback:null,next:null});e:{var J=e,ne=v;O=t;var De=n;switch(ne.tag){case 1:if(J=ne.payload,typeof J=="function"){U=J.call(De,U,O);break e}U=J;break e;case 3:J.flags=J.flags&-65537|128;case 0:if(J=ne.payload,O=typeof J=="function"?J.call(De,U,O):J,O==null)break e;U=b({},U,O);break e;case 2:Rn=!0}}O=v.callback,O!==null&&(e.flags|=64,R&&(e.flags|=8192),R=o.callbacks,R===null?o.callbacks=[O]:R.push(O))}else R={lane:O,tag:v.tag,payload:v.payload,callback:v.callback,next:null},z===null?(C=z=R,T=U):z=z.next=R,g|=O;if(v=v.next,v===null){if(v=o.shared.pending,v===null)break;R=v,v=R.next,R.next=null,o.lastBaseUpdate=R,o.shared.pending=null}}while(!0);z===null&&(T=U),o.baseState=T,o.firstBaseUpdate=C,o.lastBaseUpdate=z,c===null&&(o.shared.lanes=0),Bn|=g,e.lanes=g,e.memoizedState=U}}function Yd(e,t){if(typeof e!="function")throw Error(r(191,e));e.call(t)}function Pd(e,t){var n=e.callbacks;if(n!==null)for(e.callbacks=null,e=0;ec?c:8;var g=_.T,v={};_.T=v,Xo(e,!1,t,n);try{var T=o(),C=_.S;if(C!==null&&C(v,T),T!==null&&typeof T=="object"&&typeof T.then=="function"){var z=Lv(T,s);$i(e,t,z,Ot(e))}else $i(e,t,s,Ot(e))}catch(U){$i(e,t,{then:function(){},status:"rejected",reason:U},Ot())}finally{G.p=c,g!==null&&v.types!==null&&(g.types=v.types),_.T=g}}function qv(){}function Po(e,t,n,s){if(e.tag!==5)throw Error(r(476));var o=wh(e).queue;Sh(e,o,t,F,n===null?qv:function(){return Th(e),n(s)})}function wh(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:F,baseState:F,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:mn,lastRenderedState:F},next:null};var n={};return t.next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:mn,lastRenderedState:n},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function Th(e){var t=wh(e);t.next===null&&(t=e.alternate.memoizedState),$i(e,t.next.queue,{},Ot())}function Ko(){return it(ms)}function Ah(){return Ye().memoizedState}function Nh(){return Ye().memoizedState}function Gv(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var n=Ot();e=_n(n);var s=zn(t,e,n);s!==null&&(St(s,t,n),Xi(s,t,n)),t={cache:bo()},e.payload=t;return}t=t.return}}function Yv(e,t,n){var s=Ot();n={lane:s,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null},Tl(e)?Eh(t,n):(n=oo(e,t,n,s),n!==null&&(St(n,e,s),Dh(n,t,s)))}function jh(e,t,n){var s=Ot();$i(e,t,n,s)}function $i(e,t,n,s){var o={lane:s,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null};if(Tl(e))Eh(t,o);else{var c=e.alternate;if(e.lanes===0&&(c===null||c.lanes===0)&&(c=t.lastRenderedReducer,c!==null))try{var g=t.lastRenderedState,v=c(g,n);if(o.hasEagerState=!0,o.eagerState=v,Nt(v,g))return al(e,t,o,0),Me===null&&nl(),!1}catch{}finally{}if(n=oo(e,t,o,s),n!==null)return St(n,e,s),Dh(n,t,s),!0}return!1}function Xo(e,t,n,s){if(s={lane:2,revertLane:Au(),gesture:null,action:s,hasEagerState:!1,eagerState:null,next:null},Tl(e)){if(t)throw Error(r(479))}else t=oo(e,n,s,2),t!==null&&St(t,e,2)}function Tl(e){var t=e.alternate;return e===oe||t!==null&&t===oe}function Eh(e,t){Ja=gl=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function Dh(e,t,n){if((n&4194048)!==0){var s=t.lanes;s&=e.pendingLanes,n|=s,t.lanes=n,_f(e,n)}}var Wi={readContext:it,use:vl,useCallback:ke,useContext:ke,useEffect:ke,useImperativeHandle:ke,useLayoutEffect:ke,useInsertionEffect:ke,useMemo:ke,useReducer:ke,useRef:ke,useState:ke,useDebugValue:ke,useDeferredValue:ke,useTransition:ke,useSyncExternalStore:ke,useId:ke,useHostTransitionStatus:ke,useFormState:ke,useActionState:ke,useOptimistic:ke,useMemoCache:ke,useCacheRefresh:ke};Wi.useEffectEvent=ke;var Mh={readContext:it,use:vl,useCallback:function(e,t){return dt().memoizedState=[e,t===void 0?null:t],e},useContext:it,useEffect:dh,useImperativeHandle:function(e,t,n){n=n!=null?n.concat([e]):null,Sl(4194308,4,gh.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Sl(4194308,4,e,t)},useInsertionEffect:function(e,t){Sl(4,2,e,t)},useMemo:function(e,t){var n=dt();t=t===void 0?null:t;var s=e();if(ga){Nn(!0);try{e()}finally{Nn(!1)}}return n.memoizedState=[s,t],s},useReducer:function(e,t,n){var s=dt();if(n!==void 0){var o=n(t);if(ga){Nn(!0);try{n(t)}finally{Nn(!1)}}}else o=t;return s.memoizedState=s.baseState=o,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:o},s.queue=e,e=e.dispatch=Yv.bind(null,oe,e),[s.memoizedState,e]},useRef:function(e){var t=dt();return e={current:e},t.memoizedState=e},useState:function(e){e=Bo(e);var t=e.queue,n=jh.bind(null,oe,t);return t.dispatch=n,[e.memoizedState,n]},useDebugValue:Go,useDeferredValue:function(e,t){var n=dt();return Yo(n,e,t)},useTransition:function(){var e=Bo(!1);return e=Sh.bind(null,oe,e.queue,!0,!1),dt().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,n){var s=oe,o=dt();if(xe){if(n===void 0)throw Error(r(407));n=n()}else{if(n=t(),Me===null)throw Error(r(349));(pe&127)!==0||Jd(s,t,n)}o.memoizedState=n;var c={value:n,getSnapshot:t};return o.queue=c,dh(Wd.bind(null,s,c,e),[e]),s.flags|=2048,Wa(9,{destroy:void 0},$d.bind(null,s,c,n,t),null),n},useId:function(){var e=dt(),t=Me.identifierPrefix;if(xe){var n=Wt,s=$t;n=(s&~(1<<32-At(s)-1)).toString(32)+n,t="_"+t+"R_"+n,n=yl++,0<\/script>",c=c.removeChild(c.firstChild);break;case"select":c=typeof s.is=="string"?g.createElement("select",{is:s.is}):g.createElement("select"),s.multiple?c.multiple=!0:s.size&&(c.size=s.size);break;default:c=typeof s.is=="string"?g.createElement(o,{is:s.is}):g.createElement(o)}}c[nt]=t,c[pt]=s;e:for(g=t.child;g!==null;){if(g.tag===5||g.tag===6)c.appendChild(g.stateNode);else if(g.tag!==4&&g.tag!==27&&g.child!==null){g.child.return=g,g=g.child;continue}if(g===t)break e;for(;g.sibling===null;){if(g.return===null||g.return===t)break e;g=g.return}g.sibling.return=g.return,g=g.sibling}t.stateNode=c;e:switch(lt(c,o,s),o){case"button":case"input":case"select":case"textarea":s=!!s.autoFocus;break e;case"img":s=!0;break e;default:s=!1}s&&gn(t)}}return Re(t),lu(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,n),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==s&&gn(t);else{if(typeof s!="string"&&t.stateNode===null)throw Error(r(166));if(e=de.current,Ya(t)){if(e=t.stateNode,n=t.memoizedProps,s=null,o=at,o!==null)switch(o.tag){case 27:case 5:s=o.memoizedProps}e[nt]=t,e=!!(e.nodeValue===n||s!==null&&s.suppressHydrationWarning===!0||Qm(e.nodeValue,n)),e||Cn(t,!0)}else e=Yl(e).createTextNode(s),e[nt]=t,t.stateNode=e}return Re(t),null;case 31:if(n=t.memoizedState,e===null||e.memoizedState!==null){if(s=Ya(t),n!==null){if(e===null){if(!s)throw Error(r(318));if(e=t.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(r(557));e[nt]=t}else ua(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;Re(t),e=!1}else n=go(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=n),e=!0;if(!e)return t.flags&256?(Dt(t),t):(Dt(t),null);if((t.flags&128)!==0)throw Error(r(558))}return Re(t),null;case 13:if(s=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(o=Ya(t),s!==null&&s.dehydrated!==null){if(e===null){if(!o)throw Error(r(318));if(o=t.memoizedState,o=o!==null?o.dehydrated:null,!o)throw Error(r(317));o[nt]=t}else ua(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;Re(t),o=!1}else o=go(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=o),o=!0;if(!o)return t.flags&256?(Dt(t),t):(Dt(t),null)}return Dt(t),(t.flags&128)!==0?(t.lanes=n,t):(n=s!==null,e=e!==null&&e.memoizedState!==null,n&&(s=t.child,o=null,s.alternate!==null&&s.alternate.memoizedState!==null&&s.alternate.memoizedState.cachePool!==null&&(o=s.alternate.memoizedState.cachePool.pool),c=null,s.memoizedState!==null&&s.memoizedState.cachePool!==null&&(c=s.memoizedState.cachePool.pool),c!==o&&(s.flags|=2048)),n!==e&&n&&(t.child.flags|=8192),Dl(t,t.updateQueue),Re(t),null);case 4:return qe(),e===null&&Du(t.stateNode.containerInfo),Re(t),null;case 10:return dn(t.type),Re(t),null;case 19:if(L(Ge),s=t.memoizedState,s===null)return Re(t),null;if(o=(t.flags&128)!==0,c=s.rendering,c===null)if(o)es(s,!1);else{if(Ue!==0||e!==null&&(e.flags&128)!==0)for(e=t.child;e!==null;){if(c=pl(e),c!==null){for(t.flags|=128,es(s,!1),e=c.updateQueue,t.updateQueue=e,Dl(t,e),t.subtreeFlags=0,e=n,n=t.child;n!==null;)jd(n,e),n=n.sibling;return P(Ge,Ge.current&1|2),xe&&cn(t,s.treeForkCount),t.child}e=e.sibling}s.tail!==null&&wt()>_l&&(t.flags|=128,o=!0,es(s,!1),t.lanes=4194304)}else{if(!o)if(e=pl(c),e!==null){if(t.flags|=128,o=!0,e=e.updateQueue,t.updateQueue=e,Dl(t,e),es(s,!0),s.tail===null&&s.tailMode==="hidden"&&!c.alternate&&!xe)return Re(t),null}else 2*wt()-s.renderingStartTime>_l&&n!==536870912&&(t.flags|=128,o=!0,es(s,!1),t.lanes=4194304);s.isBackwards?(c.sibling=t.child,t.child=c):(e=s.last,e!==null?e.sibling=c:t.child=c,s.last=c)}return s.tail!==null?(e=s.tail,s.rendering=e,s.tail=e.sibling,s.renderingStartTime=wt(),e.sibling=null,n=Ge.current,P(Ge,o?n&1|2:n&1),xe&&cn(t,s.treeForkCount),e):(Re(t),null);case 22:case 23:return Dt(t),Mo(),s=t.memoizedState!==null,e!==null?e.memoizedState!==null!==s&&(t.flags|=8192):s&&(t.flags|=8192),s?(n&536870912)!==0&&(t.flags&128)===0&&(Re(t),t.subtreeFlags&6&&(t.flags|=8192)):Re(t),n=t.updateQueue,n!==null&&Dl(t,n.retryQueue),n=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(n=e.memoizedState.cachePool.pool),s=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(s=t.memoizedState.cachePool.pool),s!==n&&(t.flags|=2048),e!==null&&L(da),null;case 24:return n=null,e!==null&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),dn(Ke),Re(t),null;case 25:return null;case 30:return null}throw Error(r(156,t.tag))}function Qv(e,t){switch(mo(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return dn(Ke),qe(),e=t.flags,(e&65536)!==0&&(e&128)===0?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return Bs(t),null;case 31:if(t.memoizedState!==null){if(Dt(t),t.alternate===null)throw Error(r(340));ua()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(Dt(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(r(340));ua()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return L(Ge),null;case 4:return qe(),null;case 10:return dn(t.type),null;case 22:case 23:return Dt(t),Mo(),e!==null&&L(da),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return dn(Ke),null;case 25:return null;default:return null}}function Ih(e,t){switch(mo(t),t.tag){case 3:dn(Ke),qe();break;case 26:case 27:case 5:Bs(t);break;case 4:qe();break;case 31:t.memoizedState!==null&&Dt(t);break;case 13:Dt(t);break;case 19:L(Ge);break;case 10:dn(t.type);break;case 22:case 23:Dt(t),Mo(),e!==null&&L(da);break;case 24:dn(Ke)}}function ts(e,t){try{var n=t.updateQueue,s=n!==null?n.lastEffect:null;if(s!==null){var o=s.next;n=o;do{if((n.tag&e)===e){s=void 0;var c=n.create,g=n.inst;s=c(),g.destroy=s}n=n.next}while(n!==o)}}catch(v){Ne(t,t.return,v)}}function kn(e,t,n){try{var s=t.updateQueue,o=s!==null?s.lastEffect:null;if(o!==null){var c=o.next;s=c;do{if((s.tag&e)===e){var g=s.inst,v=g.destroy;if(v!==void 0){g.destroy=void 0,o=t;var T=n,C=v;try{C()}catch(z){Ne(o,T,z)}}}s=s.next}while(s!==c)}}catch(z){Ne(t,t.return,z)}}function em(e){var t=e.updateQueue;if(t!==null){var n=e.stateNode;try{Pd(t,n)}catch(s){Ne(e,e.return,s)}}}function tm(e,t,n){n.props=ya(e.type,e.memoizedProps),n.state=e.memoizedState;try{n.componentWillUnmount()}catch(s){Ne(e,t,s)}}function ns(e,t){try{var n=e.ref;if(n!==null){switch(e.tag){case 26:case 27:case 5:var s=e.stateNode;break;case 30:s=e.stateNode;break;default:s=e.stateNode}typeof n=="function"?e.refCleanup=n(s):n.current=s}}catch(o){Ne(e,t,o)}}function It(e,t){var n=e.ref,s=e.refCleanup;if(n!==null)if(typeof s=="function")try{s()}catch(o){Ne(e,t,o)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof n=="function")try{n(null)}catch(o){Ne(e,t,o)}else n.current=null}function nm(e){var t=e.type,n=e.memoizedProps,s=e.stateNode;try{e:switch(t){case"button":case"input":case"select":case"textarea":n.autoFocus&&s.focus();break e;case"img":n.src?s.src=n.src:n.srcSet&&(s.srcset=n.srcSet)}}catch(o){Ne(e,e.return,o)}}function ru(e,t,n){try{var s=e.stateNode;g1(s,e.type,n,t),s[pt]=t}catch(o){Ne(e,e.return,o)}}function am(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&Pn(e.type)||e.tag===4}function ou(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||am(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&&Pn(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 uu(e,t,n){var s=e.tag;if(s===5||s===6)e=e.stateNode,t?(n.nodeType===9?n.body:n.nodeName==="HTML"?n.ownerDocument.body:n).insertBefore(e,t):(t=n.nodeType===9?n.body:n.nodeName==="HTML"?n.ownerDocument.body:n,t.appendChild(e),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=rn));else if(s!==4&&(s===27&&Pn(e.type)&&(n=e.stateNode,t=null),e=e.child,e!==null))for(uu(e,t,n),e=e.sibling;e!==null;)uu(e,t,n),e=e.sibling}function Ml(e,t,n){var s=e.tag;if(s===5||s===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(s!==4&&(s===27&&Pn(e.type)&&(n=e.stateNode),e=e.child,e!==null))for(Ml(e,t,n),e=e.sibling;e!==null;)Ml(e,t,n),e=e.sibling}function im(e){var t=e.stateNode,n=e.memoizedProps;try{for(var s=e.type,o=t.attributes;o.length;)t.removeAttributeNode(o[0]);lt(t,s,n),t[nt]=e,t[pt]=n}catch(c){Ne(e,e.return,c)}}var yn=!1,Qe=!1,cu=!1,sm=typeof WeakSet=="function"?WeakSet:Set,et=null;function Zv(e,t){if(e=e.containerInfo,Ou=Jl,e=yd(e),no(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var s=n.getSelection&&n.getSelection();if(s&&s.rangeCount!==0){n=s.anchorNode;var o=s.anchorOffset,c=s.focusNode;s=s.focusOffset;try{n.nodeType,c.nodeType}catch{n=null;break e}var g=0,v=-1,T=-1,C=0,z=0,U=e,O=null;t:for(;;){for(var R;U!==n||o!==0&&U.nodeType!==3||(v=g+o),U!==c||s!==0&&U.nodeType!==3||(T=g+s),U.nodeType===3&&(g+=U.nodeValue.length),(R=U.firstChild)!==null;)O=U,U=R;for(;;){if(U===e)break t;if(O===n&&++C===o&&(v=g),O===c&&++z===s&&(T=g),(R=U.nextSibling)!==null)break;U=O,O=U.parentNode}U=R}n=v===-1||T===-1?null:{start:v,end:T}}else n=null}n=n||{start:0,end:0}}else n=null;for(Ru={focusedElem:e,selectionRange:n},Jl=!1,et=t;et!==null;)if(t=et,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,et=e;else for(;et!==null;){switch(t=et,c=t.alternate,e=t.flags,t.tag){case 0:if((e&4)!==0&&(e=t.updateQueue,e=e!==null?e.events:null,e!==null))for(n=0;n title"))),lt(c,s,n),c[nt]=e,Ie(c),s=c;break e;case"link":var g=fp("link","href",o).get(s+(n.href||""));if(g){for(var v=0;vDe&&(g=De,De=ne,ne=g);var D=pd(v,ne),E=pd(v,De);if(D&&E&&(R.rangeCount!==1||R.anchorNode!==D.node||R.anchorOffset!==D.offset||R.focusNode!==E.node||R.focusOffset!==E.offset)){var M=U.createRange();M.setStart(D.node,D.offset),R.removeAllRanges(),ne>De?(R.addRange(M),R.extend(E.node,E.offset)):(M.setEnd(E.node,E.offset),R.addRange(M))}}}}for(U=[],R=v;R=R.parentNode;)R.nodeType===1&&U.push({element:R,left:R.scrollLeft,top:R.scrollTop});for(typeof v.focus=="function"&&v.focus(),v=0;vn?32:n,_.T=null,n=yu,yu=null;var c=qn,g=wn;if($e=0,ai=qn=null,wn=0,(we&6)!==0)throw Error(r(331));var v=we;if(we|=4,gm(c.current),hm(c,c.current,g,n),we=v,os(0,!1),Tt&&typeof Tt.onPostCommitFiberRoot=="function")try{Tt.onPostCommitFiberRoot(ji,c)}catch{}return!0}finally{G.p=o,_.T=s,zm(e,t)}}function Vm(e,t,n){t=Lt(n,t),t=Jo(e.stateNode,t,2),e=zn(e,t,2),e!==null&&(Di(e,2),en(e))}function Ne(e,t,n){if(e.tag===3)Vm(e,e,n);else for(;t!==null;){if(t.tag===3){Vm(t,e,n);break}else if(t.tag===1){var s=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof s.componentDidCatch=="function"&&(Hn===null||!Hn.has(s))){e=Lt(n,e),n=kh(2),s=zn(t,n,2),s!==null&&(Uh(n,s,t,e),Di(s,2),en(s));break}}t=t.return}}function Su(e,t,n){var s=e.pingCache;if(s===null){s=e.pingCache=new Wv;var o=new Set;s.set(t,o)}else o=s.get(t),o===void 0&&(o=new Set,s.set(t,o));o.has(n)||(hu=!0,o.add(n),e=a1.bind(null,e,t,n),t.then(e,e))}function a1(e,t,n){var s=e.pingCache;s!==null&&s.delete(t),e.pingedLanes|=e.suspendedLanes&n,e.warmLanes&=~n,Me===e&&(pe&n)===n&&(Ue===4||Ue===3&&(pe&62914560)===pe&&300>wt()-Rl?(we&2)===0&&ii(e,0):mu|=n,ni===pe&&(ni=0)),en(e)}function km(e,t){t===0&&(t=Of()),e=ra(e,t),e!==null&&(Di(e,t),en(e))}function i1(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),km(e,n)}function s1(e,t){var n=0;switch(e.tag){case 31:case 13:var s=e.stateNode,o=e.memoizedState;o!==null&&(n=o.retryLane);break;case 19:s=e.stateNode;break;case 22:s=e.stateNode._retryCache;break;default:throw Error(r(314))}s!==null&&s.delete(t),km(e,n)}function l1(e,t){return _r(e,t)}var Bl=null,li=null,wu=!1,Hl=!1,Tu=!1,Yn=0;function en(e){e!==li&&e.next===null&&(li===null?Bl=li=e:li=li.next=e),Hl=!0,wu||(wu=!0,o1())}function os(e,t){if(!Tu&&Hl){Tu=!0;do for(var n=!1,s=Bl;s!==null;){if(e!==0){var o=s.pendingLanes;if(o===0)var c=0;else{var g=s.suspendedLanes,v=s.pingedLanes;c=(1<<31-At(42|e)+1)-1,c&=o&~(g&~v),c=c&201326741?c&201326741|1:c?c|2:0}c!==0&&(n=!0,qm(s,c))}else c=pe,c=Ps(s,s===Me?c:0,s.cancelPendingCommit!==null||s.timeoutHandle!==-1),(c&3)===0||Ei(s,c)||(n=!0,qm(s,c));s=s.next}while(n);Tu=!1}}function r1(){Um()}function Um(){Hl=wu=!1;var e=0;Yn!==0&&x1()&&(e=Yn);for(var t=wt(),n=null,s=Bl;s!==null;){var o=s.next,c=Bm(s,t);c===0?(s.next=null,n===null?Bl=o:n.next=o,o===null&&(li=n)):(n=s,(e!==0||(c&3)!==0)&&(Hl=!0)),s=o}$e!==0&&$e!==5||os(e),Yn!==0&&(Yn=0)}function Bm(e,t){for(var n=e.suspendedLanes,s=e.pingedLanes,o=e.expirationTimes,c=e.pendingLanes&-62914561;0v)break;var z=T.transferSize,U=T.initiatorType;z&&Zm(U)&&(T=T.responseEnd,g+=z*(T"u"?null:document;function rp(e,t,n){var s=ri;if(s&&typeof t=="string"&&t){var o=_t(t);o='link[rel="'+e+'"][href="'+o+'"]',typeof n=="string"&&(o+='[crossorigin="'+n+'"]'),lp.has(o)||(lp.add(o),e={rel:e,crossOrigin:n,href:t},s.querySelector(o)===null&&(t=s.createElement("link"),lt(t,"link",e),Ie(t),s.head.appendChild(t)))}}function E1(e){Tn.D(e),rp("dns-prefetch",e,null)}function D1(e,t){Tn.C(e,t),rp("preconnect",e,t)}function M1(e,t,n){Tn.L(e,t,n);var s=ri;if(s&&e&&t){var o='link[rel="preload"][as="'+_t(t)+'"]';t==="image"&&n&&n.imageSrcSet?(o+='[imagesrcset="'+_t(n.imageSrcSet)+'"]',typeof n.imageSizes=="string"&&(o+='[imagesizes="'+_t(n.imageSizes)+'"]')):o+='[href="'+_t(e)+'"]';var c=o;switch(t){case"style":c=oi(e);break;case"script":c=ui(e)}qt.has(c)||(e=b({rel:"preload",href:t==="image"&&n&&n.imageSrcSet?void 0:e,as:t},n),qt.set(c,e),s.querySelector(o)!==null||t==="style"&&s.querySelector(ds(c))||t==="script"&&s.querySelector(hs(c))||(t=s.createElement("link"),lt(t,"link",e),Ie(t),s.head.appendChild(t)))}}function C1(e,t){Tn.m(e,t);var n=ri;if(n&&e){var s=t&&typeof t.as=="string"?t.as:"script",o='link[rel="modulepreload"][as="'+_t(s)+'"][href="'+_t(e)+'"]',c=o;switch(s){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":c=ui(e)}if(!qt.has(c)&&(e=b({rel:"modulepreload",href:e},t),qt.set(c,e),n.querySelector(o)===null)){switch(s){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(n.querySelector(hs(c)))return}s=n.createElement("link"),lt(s,"link",e),Ie(s),n.head.appendChild(s)}}}function O1(e,t,n){Tn.S(e,t,n);var s=ri;if(s&&e){var o=Ca(s).hoistableStyles,c=oi(e);t=t||"default";var g=o.get(c);if(!g){var v={loading:0,preload:null};if(g=s.querySelector(ds(c)))v.loading=5;else{e=b({rel:"stylesheet",href:e,"data-precedence":t},n),(n=qt.get(c))&&Bu(e,n);var T=g=s.createElement("link");Ie(T),lt(T,"link",e),T._p=new Promise(function(C,z){T.onload=C,T.onerror=z}),T.addEventListener("load",function(){v.loading|=1}),T.addEventListener("error",function(){v.loading|=2}),v.loading|=4,Kl(g,t,s)}g={type:"stylesheet",instance:g,count:1,state:v},o.set(c,g)}}}function R1(e,t){Tn.X(e,t);var n=ri;if(n&&e){var s=Ca(n).hoistableScripts,o=ui(e),c=s.get(o);c||(c=n.querySelector(hs(o)),c||(e=b({src:e,async:!0},t),(t=qt.get(o))&&Hu(e,t),c=n.createElement("script"),Ie(c),lt(c,"link",e),n.head.appendChild(c)),c={type:"script",instance:c,count:1,state:null},s.set(o,c))}}function _1(e,t){Tn.M(e,t);var n=ri;if(n&&e){var s=Ca(n).hoistableScripts,o=ui(e),c=s.get(o);c||(c=n.querySelector(hs(o)),c||(e=b({src:e,async:!0,type:"module"},t),(t=qt.get(o))&&Hu(e,t),c=n.createElement("script"),Ie(c),lt(c,"link",e),n.head.appendChild(c)),c={type:"script",instance:c,count:1,state:null},s.set(o,c))}}function op(e,t,n,s){var o=(o=de.current)?Pl(o):null;if(!o)throw Error(r(446));switch(e){case"meta":case"title":return null;case"style":return typeof n.precedence=="string"&&typeof n.href=="string"?(t=oi(n.href),n=Ca(o).hoistableStyles,s=n.get(t),s||(s={type:"style",instance:null,count:0,state:null},n.set(t,s)),s):{type:"void",instance:null,count:0,state:null};case"link":if(n.rel==="stylesheet"&&typeof n.href=="string"&&typeof n.precedence=="string"){e=oi(n.href);var c=Ca(o).hoistableStyles,g=c.get(e);if(g||(o=o.ownerDocument||o,g={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},c.set(e,g),(c=o.querySelector(ds(e)))&&!c._p&&(g.instance=c,g.state.loading=5),qt.has(e)||(n={rel:"preload",as:"style",href:n.href,crossOrigin:n.crossOrigin,integrity:n.integrity,media:n.media,hrefLang:n.hrefLang,referrerPolicy:n.referrerPolicy},qt.set(e,n),c||z1(o,e,n,g.state))),t&&s===null)throw Error(r(528,""));return g}if(t&&s!==null)throw Error(r(529,""));return null;case"script":return t=n.async,n=n.src,typeof n=="string"&&t&&typeof t!="function"&&typeof t!="symbol"?(t=ui(n),n=Ca(o).hoistableScripts,s=n.get(t),s||(s={type:"script",instance:null,count:0,state:null},n.set(t,s)),s):{type:"void",instance:null,count:0,state:null};default:throw Error(r(444,e))}}function oi(e){return'href="'+_t(e)+'"'}function ds(e){return'link[rel="stylesheet"]['+e+"]"}function up(e){return b({},e,{"data-precedence":e.precedence,precedence:null})}function z1(e,t,n,s){e.querySelector('link[rel="preload"][as="style"]['+t+"]")?s.loading=1:(t=e.createElement("link"),s.preload=t,t.addEventListener("load",function(){return s.loading|=1}),t.addEventListener("error",function(){return s.loading|=2}),lt(t,"link",n),Ie(t),e.head.appendChild(t))}function ui(e){return'[src="'+_t(e)+'"]'}function hs(e){return"script[async]"+e}function cp(e,t,n){if(t.count++,t.instance===null)switch(t.type){case"style":var s=e.querySelector('style[data-href~="'+_t(n.href)+'"]');if(s)return t.instance=s,Ie(s),s;var o=b({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return s=(e.ownerDocument||e).createElement("style"),Ie(s),lt(s,"style",o),Kl(s,n.precedence,e),t.instance=s;case"stylesheet":o=oi(n.href);var c=e.querySelector(ds(o));if(c)return t.state.loading|=4,t.instance=c,Ie(c),c;s=up(n),(o=qt.get(o))&&Bu(s,o),c=(e.ownerDocument||e).createElement("link"),Ie(c);var g=c;return g._p=new Promise(function(v,T){g.onload=v,g.onerror=T}),lt(c,"link",s),t.state.loading|=4,Kl(c,n.precedence,e),t.instance=c;case"script":return c=ui(n.src),(o=e.querySelector(hs(c)))?(t.instance=o,Ie(o),o):(s=n,(o=qt.get(c))&&(s=b({},n),Hu(s,o)),e=e.ownerDocument||e,o=e.createElement("script"),Ie(o),lt(o,"link",s),e.head.appendChild(o),t.instance=o);case"void":return null;default:throw Error(r(443,t.type))}else t.type==="stylesheet"&&(t.state.loading&4)===0&&(s=t.instance,t.state.loading|=4,Kl(s,n.precedence,e));return t.instance}function Kl(e,t,n){for(var s=n.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),o=s.length?s[s.length-1]:null,c=o,g=0;g title"):null)}function L1(e,t,n){if(n===1||t.itemProp!=null)return!1;switch(e){case"meta":case"title":return!0;case"style":if(typeof t.precedence!="string"||typeof t.href!="string"||t.href==="")break;return!0;case"link":if(typeof t.rel!="string"||typeof t.href!="string"||t.href===""||t.onLoad||t.onError)break;switch(t.rel){case"stylesheet":return e=t.disabled,typeof t.precedence=="string"&&e==null;default:return!0}case"script":if(t.async&&typeof t.async!="function"&&typeof t.async!="symbol"&&!t.onLoad&&!t.onError&&t.src&&typeof t.src=="string")return!0}return!1}function hp(e){return!(e.type==="stylesheet"&&(e.state.loading&3)===0)}function V1(e,t,n,s){if(n.type==="stylesheet"&&(typeof s.media!="string"||matchMedia(s.media).matches!==!1)&&(n.state.loading&4)===0){if(n.instance===null){var o=oi(s.href),c=t.querySelector(ds(o));if(c){t=c._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(e.count++,e=Fl.bind(e),t.then(e,e)),n.state.loading|=4,n.instance=c,Ie(c);return}c=t.ownerDocument||t,s=up(s),(o=qt.get(o))&&Bu(s,o),c=c.createElement("link"),Ie(c);var g=c;g._p=new Promise(function(v,T){g.onload=v,g.onerror=T}),lt(c,"link",s),n.instance=c}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(n,t),(t=n.state.preload)&&(n.state.loading&3)===0&&(e.count++,n=Fl.bind(e),t.addEventListener("load",n),t.addEventListener("error",n))}}var qu=0;function k1(e,t){return e.stylesheets&&e.count===0&&Zl(e,e.stylesheets),0qu?50:800)+t);return e.unsuspend=n,function(){e.unsuspend=null,clearTimeout(s),clearTimeout(o)}}:null}function Fl(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Zl(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var Ql=null;function Zl(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,Ql=new Map,t.forEach(U1,e),Ql=null,Fl.call(e))}function U1(e,t){if(!(t.state.loading&4)){var n=Ql.get(e);if(n)var s=n.get(null);else{n=new Map,Ql.set(e,n);for(var o=e.querySelectorAll("link[data-precedence],style[data-precedence]"),c=0;c"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(i)}catch(a){console.error(a)}}return i(),Ju.exports=eb(),Ju.exports}var nb=tb();const vy=te.createContext({});function ab(i){const a=te.useRef(null);return a.current===null&&(a.current=i()),a.current}const ib=typeof window<"u",sb=ib?te.useLayoutEffect:te.useEffect,Fc=te.createContext(null);function Qc(i,a){i.indexOf(a)===-1&&i.push(a)}function hr(i,a){const l=i.indexOf(a);l>-1&&i.splice(l,1)}const sn=(i,a,l)=>l>a?a:l{};const An={},by=i=>/^-?(?:\d+(?:\.\d+)?|\.\d+)$/u.test(i);function Sy(i){return typeof i=="object"&&i!==null}const wy=i=>/^0[^.\s]+$/u.test(i);function Ty(i){let a;return()=>(a===void 0&&(a=i()),a)}const Yt=i=>i,lb=(i,a)=>l=>a(i(l)),Ls=(...i)=>i.reduce(lb),Ms=(i,a,l)=>{const r=a-i;return r===0?1:(l-i)/r};class Jc{constructor(){this.subscriptions=[]}add(a){return Qc(this.subscriptions,a),()=>hr(this.subscriptions,a)}notify(a,l,r){const u=this.subscriptions.length;if(u)if(u===1)this.subscriptions[0](a,l,r);else for(let f=0;fi*1e3,Gt=i=>i/1e3;function Ay(i,a){return a?i*(1e3/a):0}const Ny=(i,a,l)=>(((1-3*l+3*a)*i+(3*l-6*a))*i+3*a)*i,rb=1e-7,ob=12;function ub(i,a,l,r,u){let f,d,h=0;do d=a+(l-a)/2,f=Ny(d,r,u)-i,f>0?l=d:a=d;while(Math.abs(f)>rb&&++hub(f,0,1,i,l);return f=>f===0||f===1?f:Ny(u(f),a,r)}const jy=i=>a=>a<=.5?i(2*a)/2:(2-i(2*(1-a)))/2,Ey=i=>a=>1-i(1-a),Dy=Vs(.33,1.53,.69,.99),$c=Ey(Dy),My=jy($c),Cy=i=>(i*=2)<1?.5*$c(i):.5*(2-Math.pow(2,-10*(i-1))),Wc=i=>1-Math.sin(Math.acos(i)),Oy=Ey(Wc),Ry=jy(Wc),cb=Vs(.42,0,1,1),fb=Vs(0,0,.58,1),_y=Vs(.42,0,.58,1),db=i=>Array.isArray(i)&&typeof i[0]!="number",zy=i=>Array.isArray(i)&&typeof i[0]=="number",hb={linear:Yt,easeIn:cb,easeInOut:_y,easeOut:fb,circIn:Wc,circInOut:Ry,circOut:Oy,backIn:$c,backInOut:My,backOut:Dy,anticipate:Cy},mb=i=>typeof i=="string",kp=i=>{if(zy(i)){Zc(i.length===4);const[a,l,r,u]=i;return Vs(a,l,r,u)}else if(mb(i))return hb[i];return i},ar=["setup","read","resolveKeyframes","preUpdate","update","preRender","render","postRender"];function pb(i,a){let l=new Set,r=new Set,u=!1,f=!1;const d=new WeakSet;let h={delta:0,timestamp:0,isProcessing:!1};function y(x){d.has(x)&&(p.schedule(x),i()),x(h)}const p={schedule:(x,b=!1,w=!1)=>{const N=w&&u?l:r;return b&&d.add(x),N.has(x)||N.add(x),x},cancel:x=>{r.delete(x),d.delete(x)},process:x=>{if(h=x,u){f=!0;return}u=!0,[l,r]=[r,l],l.forEach(y),l.clear(),u=!1,f&&(f=!1,p.process(x))}};return p}const gb=40;function Ly(i,a){let l=!1,r=!0;const u={delta:0,timestamp:0,isProcessing:!1},f=()=>l=!0,d=ar.reduce((H,K)=>(H[K]=pb(f),H),{}),{setup:h,read:y,resolveKeyframes:p,preUpdate:x,update:b,preRender:w,render:j,postRender:N}=d,V=()=>{const H=An.useManualTiming?u.timestamp:performance.now();l=!1,An.useManualTiming||(u.delta=r?1e3/60:Math.max(Math.min(H-u.timestamp,gb),1)),u.timestamp=H,u.isProcessing=!0,h.process(u),y.process(u),p.process(u),x.process(u),b.process(u),w.process(u),j.process(u),N.process(u),u.isProcessing=!1,l&&a&&(r=!1,i(V))},B=()=>{l=!0,r=!0,u.isProcessing||i(V)};return{schedule:ar.reduce((H,K)=>{const X=d[K];return H[K]=(ae,Q=!1,I=!1)=>(l||B(),X.schedule(ae,Q,I)),H},{}),cancel:H=>{for(let K=0;K(rr===void 0&&ht.set(rt.isProcessing||An.useManualTiming?rt.timestamp:performance.now()),rr),set:i=>{rr=i,queueMicrotask(yb)}},Vy=i=>a=>typeof a=="string"&&a.startsWith(i),ky=Vy("--"),xb=Vy("var(--"),Ic=i=>xb(i)?vb.test(i.split("/*")[0].trim()):!1,vb=/var\(--(?:[\w-]+\s*|[\w-]+\s*,(?:\s*[^)(\s]|\s*\((?:[^)(]|\([^)(]*\))*\))+\s*)\)$/iu;function Up(i){return typeof i!="string"?!1:i.split("/*")[0].includes("var(--")}const wi={test:i=>typeof i=="number",parse:parseFloat,transform:i=>i},Cs={...wi,transform:i=>sn(0,1,i)},ir={...wi,default:1},Ts=i=>Math.round(i*1e5)/1e5,ef=/-?(?:\d+(?:\.\d+)?|\.\d+)/gu;function bb(i){return i==null}const Sb=/^(?:#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\))$/iu,tf=(i,a)=>l=>!!(typeof l=="string"&&Sb.test(l)&&l.startsWith(i)||a&&!bb(l)&&Object.prototype.hasOwnProperty.call(l,a)),Uy=(i,a,l)=>r=>{if(typeof r!="string")return r;const[u,f,d,h]=r.match(ef);return{[i]:parseFloat(u),[a]:parseFloat(f),[l]:parseFloat(d),alpha:h!==void 0?parseFloat(h):1}},wb=i=>sn(0,255,i),tc={...wi,transform:i=>Math.round(wb(i))},Ta={test:tf("rgb","red"),parse:Uy("red","green","blue"),transform:({red:i,green:a,blue:l,alpha:r=1})=>"rgba("+tc.transform(i)+", "+tc.transform(a)+", "+tc.transform(l)+", "+Ts(Cs.transform(r))+")"};function Tb(i){let a="",l="",r="",u="";return i.length>5?(a=i.substring(1,3),l=i.substring(3,5),r=i.substring(5,7),u=i.substring(7,9)):(a=i.substring(1,2),l=i.substring(2,3),r=i.substring(3,4),u=i.substring(4,5),a+=a,l+=l,r+=r,u+=u),{red:parseInt(a,16),green:parseInt(l,16),blue:parseInt(r,16),alpha:u?parseInt(u,16)/255:1}}const bc={test:tf("#"),parse:Tb,transform:Ta.transform},ks=i=>({test:a=>typeof a=="string"&&a.endsWith(i)&&a.split(" ").length===1,parse:parseFloat,transform:a=>`${a}${i}`}),Jn=ks("deg"),an=ks("%"),$=ks("px"),Ab=ks("vh"),Nb=ks("vw"),Bp={...an,parse:i=>an.parse(i)/100,transform:i=>an.transform(i*100)},mi={test:tf("hsl","hue"),parse:Uy("hue","saturation","lightness"),transform:({hue:i,saturation:a,lightness:l,alpha:r=1})=>"hsla("+Math.round(i)+", "+an.transform(Ts(a))+", "+an.transform(Ts(l))+", "+Ts(Cs.transform(r))+")"},Je={test:i=>Ta.test(i)||bc.test(i)||mi.test(i),parse:i=>Ta.test(i)?Ta.parse(i):mi.test(i)?mi.parse(i):bc.parse(i),transform:i=>typeof i=="string"?i:i.hasOwnProperty("red")?Ta.transform(i):mi.transform(i),getAnimatableNone:i=>{const a=Je.parse(i);return a.alpha=0,Je.transform(a)}},jb=/(?:#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\))/giu;function Eb(i){var a,l;return isNaN(i)&&typeof i=="string"&&(((a=i.match(ef))==null?void 0:a.length)||0)+(((l=i.match(jb))==null?void 0:l.length)||0)>0}const By="number",Hy="color",Db="var",Mb="var(",Hp="${}",Cb=/var\s*\(\s*--(?:[\w-]+\s*|[\w-]+\s*,(?:\s*[^)(\s]|\s*\((?:[^)(]|\([^)(]*\))*\))+\s*)\)|#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\)|-?(?:\d+(?:\.\d+)?|\.\d+)/giu;function Os(i){const a=i.toString(),l=[],r={color:[],number:[],var:[]},u=[];let f=0;const h=a.replace(Cb,y=>(Je.test(y)?(r.color.push(f),u.push(Hy),l.push(Je.parse(y))):y.startsWith(Mb)?(r.var.push(f),u.push(Db),l.push(y)):(r.number.push(f),u.push(By),l.push(parseFloat(y))),++f,Hp)).split(Hp);return{values:l,split:h,indexes:r,types:u}}function qy(i){return Os(i).values}function Gy(i){const{split:a,types:l}=Os(i),r=a.length;return u=>{let f="";for(let d=0;dtypeof i=="number"?0:Je.test(i)?Je.getAnimatableNone(i):i;function Rb(i){const a=qy(i);return Gy(i)(a.map(Ob))}const Jt={test:Eb,parse:qy,createTransformer:Gy,getAnimatableNone:Rb};function nc(i,a,l){return l<0&&(l+=1),l>1&&(l-=1),l<1/6?i+(a-i)*6*l:l<1/2?a:l<2/3?i+(a-i)*(2/3-l)*6:i}function _b({hue:i,saturation:a,lightness:l,alpha:r}){i/=360,a/=100,l/=100;let u=0,f=0,d=0;if(!a)u=f=d=l;else{const h=l<.5?l*(1+a):l+a-l*a,y=2*l-h;u=nc(y,h,i+1/3),f=nc(y,h,i),d=nc(y,h,i-1/3)}return{red:Math.round(u*255),green:Math.round(f*255),blue:Math.round(d*255),alpha:r}}function mr(i,a){return l=>l>0?a:i}const Le=(i,a,l)=>i+(a-i)*l,ac=(i,a,l)=>{const r=i*i,u=l*(a*a-r)+r;return u<0?0:Math.sqrt(u)},zb=[bc,Ta,mi],Lb=i=>zb.find(a=>a.test(i));function qp(i){const a=Lb(i);if(!a)return!1;let l=a.parse(i);return a===mi&&(l=_b(l)),l}const Gp=(i,a)=>{const l=qp(i),r=qp(a);if(!l||!r)return mr(i,a);const u={...l};return f=>(u.red=ac(l.red,r.red,f),u.green=ac(l.green,r.green,f),u.blue=ac(l.blue,r.blue,f),u.alpha=Le(l.alpha,r.alpha,f),Ta.transform(u))},Sc=new Set(["none","hidden"]);function Vb(i,a){return Sc.has(i)?l=>l<=0?i:a:l=>l>=1?a:i}function kb(i,a){return l=>Le(i,a,l)}function nf(i){return typeof i=="number"?kb:typeof i=="string"?Ic(i)?mr:Je.test(i)?Gp:Hb:Array.isArray(i)?Yy:typeof i=="object"?Je.test(i)?Gp:Ub:mr}function Yy(i,a){const l=[...i],r=l.length,u=i.map((f,d)=>nf(f)(f,a[d]));return f=>{for(let d=0;d{for(const f in r)l[f]=r[f](u);return l}}function Bb(i,a){const l=[],r={color:0,var:0,number:0};for(let u=0;u{const l=Jt.createTransformer(a),r=Os(i),u=Os(a);return r.indexes.var.length===u.indexes.var.length&&r.indexes.color.length===u.indexes.color.length&&r.indexes.number.length>=u.indexes.number.length?Sc.has(i)&&!u.values.length||Sc.has(a)&&!r.values.length?Vb(i,a):Ls(Yy(Bb(r,u),u.values),l):mr(i,a)};function Py(i,a,l){return typeof i=="number"&&typeof a=="number"&&typeof l=="number"?Le(i,a,l):nf(i)(i,a)}const qb=i=>{const a=({timestamp:l})=>i(l);return{start:(l=!0)=>Ce.update(a,l),stop:()=>In(a),now:()=>rt.isProcessing?rt.timestamp:ht.now()}},Ky=(i,a,l=10)=>{let r="";const u=Math.max(Math.round(a/l),2);for(let f=0;f=pr?1/0:a}function Gb(i,a=100,l){const r=l({...i,keyframes:[0,a]}),u=Math.min(af(r),pr);return{type:"keyframes",ease:f=>r.next(u*f).value/a,duration:Gt(u)}}const Yb=5;function Xy(i,a,l){const r=Math.max(a-Yb,0);return Ay(l-i(r),a-r)}const Be={stiffness:100,damping:10,mass:1,velocity:0,duration:800,bounce:.3,visualDuration:.3,restSpeed:{granular:.01,default:2},restDelta:{granular:.005,default:.5},minDuration:.01,maxDuration:10,minDamping:.05,maxDamping:1},ic=.001;function Pb({duration:i=Be.duration,bounce:a=Be.bounce,velocity:l=Be.velocity,mass:r=Be.mass}){let u,f,d=1-a;d=sn(Be.minDamping,Be.maxDamping,d),i=sn(Be.minDuration,Be.maxDuration,Gt(i)),d<1?(u=p=>{const x=p*d,b=x*i,w=x-l,j=wc(p,d),N=Math.exp(-b);return ic-w/j*N},f=p=>{const b=p*d*i,w=b*l+l,j=Math.pow(d,2)*Math.pow(p,2)*i,N=Math.exp(-b),V=wc(Math.pow(p,2),d);return(-u(p)+ic>0?-1:1)*((w-j)*N)/V}):(u=p=>{const x=Math.exp(-p*i),b=(p-l)*i+1;return-ic+x*b},f=p=>{const x=Math.exp(-p*i),b=(l-p)*(i*i);return x*b});const h=5/i,y=Xb(u,f,h);if(i=Zt(i),isNaN(y))return{stiffness:Be.stiffness,damping:Be.damping,duration:i};{const p=Math.pow(y,2)*r;return{stiffness:p,damping:d*2*Math.sqrt(r*p),duration:i}}}const Kb=12;function Xb(i,a,l){let r=l;for(let u=1;ui[l]!==void 0)}function Zb(i){let a={velocity:Be.velocity,stiffness:Be.stiffness,damping:Be.damping,mass:Be.mass,isResolvedFromDuration:!1,...i};if(!Yp(i,Qb)&&Yp(i,Fb))if(a.velocity=0,i.visualDuration){const l=i.visualDuration,r=2*Math.PI/(l*1.2),u=r*r,f=2*sn(.05,1,1-(i.bounce||0))*Math.sqrt(u);a={...a,mass:Be.mass,stiffness:u,damping:f}}else{const l=Pb({...i,velocity:0});a={...a,...l,mass:Be.mass},a.isResolvedFromDuration=!0}return a}function gr(i=Be.visualDuration,a=Be.bounce){const l=typeof i!="object"?{visualDuration:i,keyframes:[0,1],bounce:a}:i;let{restSpeed:r,restDelta:u}=l;const f=l.keyframes[0],d=l.keyframes[l.keyframes.length-1],h={done:!1,value:f},{stiffness:y,damping:p,mass:x,duration:b,velocity:w,isResolvedFromDuration:j}=Zb({...l,velocity:-Gt(l.velocity||0)}),N=w||0,V=p/(2*Math.sqrt(y*x)),B=d-f,q=Gt(Math.sqrt(y/x)),Y=Math.abs(B)<5;r||(r=Y?Be.restSpeed.granular:Be.restSpeed.default),u||(u=Y?Be.restDelta.granular:Be.restDelta.default);let H;if(V<1){const X=wc(q,V);H=ae=>{const Q=Math.exp(-V*q*ae);return d-Q*((N+V*q*B)/X*Math.sin(X*ae)+B*Math.cos(X*ae))}}else if(V===1)H=X=>d-Math.exp(-q*X)*(B+(N+q*B)*X);else{const X=q*Math.sqrt(V*V-1);H=ae=>{const Q=Math.exp(-V*q*ae),I=Math.min(X*ae,300);return d-Q*((N+V*q*B)*Math.sinh(I)+X*B*Math.cosh(I))/X}}const K={calculatedDuration:j&&b||null,next:X=>{const ae=H(X);if(j)h.done=X>=b;else{let Q=X===0?N:0;V<1&&(Q=X===0?Zt(N):Xy(H,X,ae));const I=Math.abs(Q)<=r,ce=Math.abs(d-ae)<=u;h.done=I&&ce}return h.value=h.done?d:ae,h},toString:()=>{const X=Math.min(af(K),pr),ae=Ky(Q=>K.next(X*Q).value,X,30);return X+"ms "+ae},toTransition:()=>{}};return K}gr.applyToOptions=i=>{const a=Gb(i,100,gr);return i.ease=a.ease,i.duration=Zt(a.duration),i.type="keyframes",i};function Tc({keyframes:i,velocity:a=0,power:l=.8,timeConstant:r=325,bounceDamping:u=10,bounceStiffness:f=500,modifyTarget:d,min:h,max:y,restDelta:p=.5,restSpeed:x}){const b=i[0],w={done:!1,value:b},j=I=>h!==void 0&&Iy,N=I=>h===void 0?y:y===void 0||Math.abs(h-I)-V*Math.exp(-I/r),H=I=>q+Y(I),K=I=>{const ce=Y(I),ye=H(I);w.done=Math.abs(ce)<=p,w.value=w.done?q:ye};let X,ae;const Q=I=>{j(w.value)&&(X=I,ae=gr({keyframes:[w.value,N(w.value)],velocity:Xy(H,I,w.value),damping:u,stiffness:f,restDelta:p,restSpeed:x}))};return Q(0),{calculatedDuration:null,next:I=>{let ce=!1;return!ae&&X===void 0&&(ce=!0,K(I),Q(I)),X!==void 0&&I>=X?ae.next(I-X):(!ce&&K(I),w)}}}function Jb(i,a,l){const r=[],u=l||An.mix||Py,f=i.length-1;for(let d=0;da[0];if(f===2&&a[0]===a[1])return()=>a[1];const d=i[0]===i[1];i[0]>i[f-1]&&(i=[...i].reverse(),a=[...a].reverse());const h=Jb(a,r,u),y=h.length,p=x=>{if(d&&x1)for(;bp(sn(i[0],i[f-1],x)):p}function Wb(i,a){const l=i[i.length-1];for(let r=1;r<=a;r++){const u=Ms(0,a,r);i.push(Le(l,1,u))}}function Ib(i){const a=[0];return Wb(a,i.length-1),a}function e2(i,a){return i.map(l=>l*a)}function t2(i,a){return i.map(()=>a||_y).splice(0,i.length-1)}function As({duration:i=300,keyframes:a,times:l,ease:r="easeInOut"}){const u=db(r)?r.map(kp):kp(r),f={done:!1,value:a[0]},d=e2(l&&l.length===a.length?l:Ib(a),i),h=$b(d,a,{ease:Array.isArray(u)?u:t2(a,u)});return{calculatedDuration:i,next:y=>(f.value=h(y),f.done=y>=i,f)}}const n2=i=>i!==null;function sf(i,{repeat:a,repeatType:l="loop"},r,u=1){const f=i.filter(n2),h=u<0||a&&l!=="loop"&&a%2===1?0:f.length-1;return!h||r===void 0?f[h]:r}const a2={decay:Tc,inertia:Tc,tween:As,keyframes:As,spring:gr};function Fy(i){typeof i.type=="string"&&(i.type=a2[i.type])}class lf{constructor(){this.updateFinished()}get finished(){return this._finished}updateFinished(){this._finished=new Promise(a=>{this.resolve=a})}notifyFinished(){this.resolve()}then(a,l){return this.finished.then(a,l)}}const i2=i=>i/100;class rf extends lf{constructor(a){super(),this.state="idle",this.startTime=null,this.isStopped=!1,this.currentTime=0,this.holdTime=null,this.playbackSpeed=1,this.stop=()=>{var r,u;const{motionValue:l}=this.options;l&&l.updatedAt!==ht.now()&&this.tick(ht.now()),this.isStopped=!0,this.state!=="idle"&&(this.teardown(),(u=(r=this.options).onStop)==null||u.call(r))},this.options=a,this.initAnimation(),this.play(),a.autoplay===!1&&this.pause()}initAnimation(){const{options:a}=this;Fy(a);const{type:l=As,repeat:r=0,repeatDelay:u=0,repeatType:f,velocity:d=0}=a;let{keyframes:h}=a;const y=l||As;y!==As&&typeof h[0]!="number"&&(this.mixKeyframes=Ls(i2,Py(h[0],h[1])),h=[0,100]);const p=y({...a,keyframes:h});f==="mirror"&&(this.mirroredGenerator=y({...a,keyframes:[...h].reverse(),velocity:-d})),p.calculatedDuration===null&&(p.calculatedDuration=af(p));const{calculatedDuration:x}=p;this.calculatedDuration=x,this.resolvedDuration=x+u,this.totalDuration=this.resolvedDuration*(r+1)-u,this.generator=p}updateTime(a){const l=Math.round(a-this.startTime)*this.playbackSpeed;this.holdTime!==null?this.currentTime=this.holdTime:this.currentTime=l}tick(a,l=!1){const{generator:r,totalDuration:u,mixKeyframes:f,mirroredGenerator:d,resolvedDuration:h,calculatedDuration:y}=this;if(this.startTime===null)return r.next(0);const{delay:p=0,keyframes:x,repeat:b,repeatType:w,repeatDelay:j,type:N,onUpdate:V,finalKeyframe:B}=this.options;this.speed>0?this.startTime=Math.min(this.startTime,a):this.speed<0&&(this.startTime=Math.min(a-u/this.speed,this.startTime)),l?this.currentTime=a:this.updateTime(a);const q=this.currentTime-p*(this.playbackSpeed>=0?1:-1),Y=this.playbackSpeed>=0?q<0:q>u;this.currentTime=Math.max(q,0),this.state==="finished"&&this.holdTime===null&&(this.currentTime=u);let H=this.currentTime,K=r;if(b){const I=Math.min(this.currentTime,u)/h;let ce=Math.floor(I),ye=I%1;!ye&&I>=1&&(ye=1),ye===1&&ce--,ce=Math.min(ce,b+1),!!(ce%2)&&(w==="reverse"?(ye=1-ye,j&&(ye-=j/h)):w==="mirror"&&(K=d)),H=sn(0,1,ye)*h}const X=Y?{done:!1,value:x[0]}:K.next(H);f&&(X.value=f(X.value));let{done:ae}=X;!Y&&y!==null&&(ae=this.playbackSpeed>=0?this.currentTime>=u:this.currentTime<=0);const Q=this.holdTime===null&&(this.state==="finished"||this.state==="running"&&ae);return Q&&N!==Tc&&(X.value=sf(x,this.options,B,this.speed)),V&&V(X.value),Q&&this.finish(),X}then(a,l){return this.finished.then(a,l)}get duration(){return Gt(this.calculatedDuration)}get iterationDuration(){const{delay:a=0}=this.options||{};return this.duration+Gt(a)}get time(){return Gt(this.currentTime)}set time(a){var l;a=Zt(a),this.currentTime=a,this.startTime===null||this.holdTime!==null||this.playbackSpeed===0?this.holdTime=a:this.driver&&(this.startTime=this.driver.now()-a/this.playbackSpeed),(l=this.driver)==null||l.start(!1)}get speed(){return this.playbackSpeed}set speed(a){this.updateTime(ht.now());const l=this.playbackSpeed!==a;this.playbackSpeed=a,l&&(this.time=Gt(this.currentTime))}play(){var u,f;if(this.isStopped)return;const{driver:a=qb,startTime:l}=this.options;this.driver||(this.driver=a(d=>this.tick(d))),(f=(u=this.options).onPlay)==null||f.call(u);const r=this.driver.now();this.state==="finished"?(this.updateFinished(),this.startTime=r):this.holdTime!==null?this.startTime=r-this.holdTime:this.startTime||(this.startTime=l??r),this.state==="finished"&&this.speed<0&&(this.startTime+=this.calculatedDuration),this.holdTime=null,this.state="running",this.driver.start()}pause(){this.state="paused",this.updateTime(ht.now()),this.holdTime=this.currentTime}complete(){this.state!=="running"&&this.play(),this.state="finished",this.holdTime=null}finish(){var a,l;this.notifyFinished(),this.teardown(),this.state="finished",(l=(a=this.options).onComplete)==null||l.call(a)}cancel(){var a,l;this.holdTime=null,this.startTime=0,this.tick(0),this.teardown(),(l=(a=this.options).onCancel)==null||l.call(a)}teardown(){this.state="idle",this.stopDriver(),this.startTime=this.holdTime=null}stopDriver(){this.driver&&(this.driver.stop(),this.driver=void 0)}sample(a){return this.startTime=0,this.tick(a,!0)}attachTimeline(a){var l;return this.options.allowFlatten&&(this.options.type="keyframes",this.options.ease="linear",this.initAnimation()),(l=this.driver)==null||l.stop(),a.observe(this)}}function s2(i){for(let a=1;ai*180/Math.PI,Ac=i=>{const a=Aa(Math.atan2(i[1],i[0]));return Nc(a)},l2={x:4,y:5,translateX:4,translateY:5,scaleX:0,scaleY:3,scale:i=>(Math.abs(i[0])+Math.abs(i[3]))/2,rotate:Ac,rotateZ:Ac,skewX:i=>Aa(Math.atan(i[1])),skewY:i=>Aa(Math.atan(i[2])),skew:i=>(Math.abs(i[1])+Math.abs(i[2]))/2},Nc=i=>(i=i%360,i<0&&(i+=360),i),Pp=Ac,Kp=i=>Math.sqrt(i[0]*i[0]+i[1]*i[1]),Xp=i=>Math.sqrt(i[4]*i[4]+i[5]*i[5]),r2={x:12,y:13,z:14,translateX:12,translateY:13,translateZ:14,scaleX:Kp,scaleY:Xp,scale:i=>(Kp(i)+Xp(i))/2,rotateX:i=>Nc(Aa(Math.atan2(i[6],i[5]))),rotateY:i=>Nc(Aa(Math.atan2(-i[2],i[0]))),rotateZ:Pp,rotate:Pp,skewX:i=>Aa(Math.atan(i[4])),skewY:i=>Aa(Math.atan(i[1])),skew:i=>(Math.abs(i[1])+Math.abs(i[4]))/2};function jc(i){return i.includes("scale")?1:0}function Ec(i,a){if(!i||i==="none")return jc(a);const l=i.match(/^matrix3d\(([-\d.e\s,]+)\)$/u);let r,u;if(l)r=r2,u=l;else{const h=i.match(/^matrix\(([-\d.e\s,]+)\)$/u);r=l2,u=h}if(!u)return jc(a);const f=r[a],d=u[1].split(",").map(u2);return typeof f=="function"?f(d):d[f]}const o2=(i,a)=>{const{transform:l="none"}=getComputedStyle(i);return Ec(l,a)};function u2(i){return parseFloat(i.trim())}const Ti=["transformPerspective","x","y","z","translateX","translateY","translateZ","scale","scaleX","scaleY","rotate","rotateX","rotateY","rotateZ","skew","skewX","skewY"],Ai=new Set(Ti),Fp=i=>i===wi||i===$,c2=new Set(["x","y","z"]),f2=Ti.filter(i=>!c2.has(i));function d2(i){const a=[];return f2.forEach(l=>{const r=i.getValue(l);r!==void 0&&(a.push([l,r.get()]),r.set(l.startsWith("scale")?1:0))}),a}const Wn={width:({x:i},{paddingLeft:a="0",paddingRight:l="0"})=>i.max-i.min-parseFloat(a)-parseFloat(l),height:({y:i},{paddingTop:a="0",paddingBottom:l="0"})=>i.max-i.min-parseFloat(a)-parseFloat(l),top:(i,{top:a})=>parseFloat(a),left:(i,{left:a})=>parseFloat(a),bottom:({y:i},{top:a})=>parseFloat(a)+(i.max-i.min),right:({x:i},{left:a})=>parseFloat(a)+(i.max-i.min),x:(i,{transform:a})=>Ec(a,"x"),y:(i,{transform:a})=>Ec(a,"y")};Wn.translateX=Wn.x;Wn.translateY=Wn.y;const Na=new Set;let Dc=!1,Mc=!1,Cc=!1;function Qy(){if(Mc){const i=Array.from(Na).filter(r=>r.needsMeasurement),a=new Set(i.map(r=>r.element)),l=new Map;a.forEach(r=>{const u=d2(r);u.length&&(l.set(r,u),r.render())}),i.forEach(r=>r.measureInitialState()),a.forEach(r=>{r.render();const u=l.get(r);u&&u.forEach(([f,d])=>{var h;(h=r.getValue(f))==null||h.set(d)})}),i.forEach(r=>r.measureEndState()),i.forEach(r=>{r.suspendedScrollY!==void 0&&window.scrollTo(0,r.suspendedScrollY)})}Mc=!1,Dc=!1,Na.forEach(i=>i.complete(Cc)),Na.clear()}function Zy(){Na.forEach(i=>{i.readKeyframes(),i.needsMeasurement&&(Mc=!0)})}function h2(){Cc=!0,Zy(),Qy(),Cc=!1}class of{constructor(a,l,r,u,f,d=!1){this.state="pending",this.isAsync=!1,this.needsMeasurement=!1,this.unresolvedKeyframes=[...a],this.onComplete=l,this.name=r,this.motionValue=u,this.element=f,this.isAsync=d}scheduleResolve(){this.state="scheduled",this.isAsync?(Na.add(this),Dc||(Dc=!0,Ce.read(Zy),Ce.resolveKeyframes(Qy))):(this.readKeyframes(),this.complete())}readKeyframes(){const{unresolvedKeyframes:a,name:l,element:r,motionValue:u}=this;if(a[0]===null){const f=u==null?void 0:u.get(),d=a[a.length-1];if(f!==void 0)a[0]=f;else if(r&&l){const h=r.readValue(l,d);h!=null&&(a[0]=h)}a[0]===void 0&&(a[0]=d),u&&f===void 0&&u.set(a[0])}s2(a)}setFinalKeyframe(){}measureInitialState(){}renderEndStyles(){}measureEndState(){}complete(a=!1){this.state="complete",this.onComplete(this.unresolvedKeyframes,this.finalKeyframe,a),Na.delete(this)}cancel(){this.state==="scheduled"&&(Na.delete(this),this.state="pending")}resume(){this.state==="pending"&&this.scheduleResolve()}}const m2=i=>i.startsWith("--");function p2(i,a,l){m2(a)?i.style.setProperty(a,l):i.style[a]=l}const g2={};function Jy(i,a){const l=Ty(i);return()=>g2[a]??l()}const y2=Jy(()=>window.ScrollTimeline!==void 0,"scrollTimeline"),$y=Jy(()=>{try{document.createElement("div").animate({opacity:0},{easing:"linear(0, 1)"})}catch{return!1}return!0},"linearEasing"),ws=([i,a,l,r])=>`cubic-bezier(${i}, ${a}, ${l}, ${r})`,Qp={linear:"linear",ease:"ease",easeIn:"ease-in",easeOut:"ease-out",easeInOut:"ease-in-out",circIn:ws([0,.65,.55,1]),circOut:ws([.55,0,1,.45]),backIn:ws([.31,.01,.66,-.59]),backOut:ws([.33,1.53,.69,.99])};function Wy(i,a){if(i)return typeof i=="function"?$y()?Ky(i,a):"ease-out":zy(i)?ws(i):Array.isArray(i)?i.map(l=>Wy(l,a)||Qp.easeOut):Qp[i]}function x2(i,a,l,{delay:r=0,duration:u=300,repeat:f=0,repeatType:d="loop",ease:h="easeOut",times:y}={},p=void 0){const x={[a]:l};y&&(x.offset=y);const b=Wy(h,u);Array.isArray(b)&&(x.easing=b);const w={delay:r,duration:u,easing:Array.isArray(b)?"linear":b,fill:"both",iterations:f+1,direction:d==="reverse"?"alternate":"normal"};return p&&(w.pseudoElement=p),i.animate(x,w)}function Iy(i){return typeof i=="function"&&"applyToOptions"in i}function v2({type:i,...a}){return Iy(i)&&$y()?i.applyToOptions(a):(a.duration??(a.duration=300),a.ease??(a.ease="easeOut"),a)}class e0 extends lf{constructor(a){if(super(),this.finishedTime=null,this.isStopped=!1,this.manualStartTime=null,!a)return;const{element:l,name:r,keyframes:u,pseudoElement:f,allowFlatten:d=!1,finalKeyframe:h,onComplete:y}=a;this.isPseudoElement=!!f,this.allowFlatten=d,this.options=a,Zc(typeof a.type!="string");const p=v2(a);this.animation=x2(l,r,u,p,f),p.autoplay===!1&&this.animation.pause(),this.animation.onfinish=()=>{if(this.finishedTime=this.time,!f){const x=sf(u,this.options,h,this.speed);this.updateMotionValue&&this.updateMotionValue(x),p2(l,r,x),this.animation.cancel()}y==null||y(),this.notifyFinished()}}play(){this.isStopped||(this.manualStartTime=null,this.animation.play(),this.state==="finished"&&this.updateFinished())}pause(){this.animation.pause()}complete(){var a,l;(l=(a=this.animation).finish)==null||l.call(a)}cancel(){try{this.animation.cancel()}catch{}}stop(){if(this.isStopped)return;this.isStopped=!0;const{state:a}=this;a==="idle"||a==="finished"||(this.updateMotionValue?this.updateMotionValue():this.commitStyles(),this.isPseudoElement||this.cancel())}commitStyles(){var l,r,u;const a=(l=this.options)==null?void 0:l.element;!this.isPseudoElement&&(a!=null&&a.isConnected)&&((u=(r=this.animation).commitStyles)==null||u.call(r))}get duration(){var l,r;const a=((r=(l=this.animation.effect)==null?void 0:l.getComputedTiming)==null?void 0:r.call(l).duration)||0;return Gt(Number(a))}get iterationDuration(){const{delay:a=0}=this.options||{};return this.duration+Gt(a)}get time(){return Gt(Number(this.animation.currentTime)||0)}set time(a){this.manualStartTime=null,this.finishedTime=null,this.animation.currentTime=Zt(a)}get speed(){return this.animation.playbackRate}set speed(a){a<0&&(this.finishedTime=null),this.animation.playbackRate=a}get state(){return this.finishedTime!==null?"finished":this.animation.playState}get startTime(){return this.manualStartTime??Number(this.animation.startTime)}set startTime(a){this.manualStartTime=this.animation.startTime=a}attachTimeline({timeline:a,rangeStart:l,rangeEnd:r,observe:u}){var f;return this.allowFlatten&&((f=this.animation.effect)==null||f.updateTiming({easing:"linear"})),this.animation.onfinish=null,a&&y2()?(this.animation.timeline=a,l&&(this.animation.rangeStart=l),r&&(this.animation.rangeEnd=r),Yt):u(this)}}const t0={anticipate:Cy,backInOut:My,circInOut:Ry};function b2(i){return i in t0}function S2(i){typeof i.ease=="string"&&b2(i.ease)&&(i.ease=t0[i.ease])}const sc=10;class w2 extends e0{constructor(a){S2(a),Fy(a),super(a),a.startTime!==void 0&&(this.startTime=a.startTime),this.options=a}updateMotionValue(a){const{motionValue:l,onUpdate:r,onComplete:u,element:f,...d}=this.options;if(!l)return;if(a!==void 0){l.set(a);return}const h=new rf({...d,autoplay:!1}),y=Math.max(sc,ht.now()-this.startTime),p=sn(0,sc,y-sc);l.setWithVelocity(h.sample(Math.max(0,y-p)).value,h.sample(y).value,p),h.stop()}}const Zp=(i,a)=>a==="zIndex"?!1:!!(typeof i=="number"||Array.isArray(i)||typeof i=="string"&&(Jt.test(i)||i==="0")&&!i.startsWith("url("));function T2(i){const a=i[0];if(i.length===1)return!0;for(let l=0;lObject.hasOwnProperty.call(Element.prototype,"animate"));function E2(i){var x;const{motionValue:a,name:l,repeatDelay:r,repeatType:u,damping:f,type:d}=i;if(!(((x=a==null?void 0:a.owner)==null?void 0:x.current)instanceof HTMLElement))return!1;const{onUpdate:y,transformTemplate:p}=a.owner.getProps();return j2()&&l&&N2.has(l)&&(l!=="transform"||!p)&&!y&&!r&&u!=="mirror"&&f!==0&&d!=="inertia"}const D2=40;class M2 extends lf{constructor({autoplay:a=!0,delay:l=0,type:r="keyframes",repeat:u=0,repeatDelay:f=0,repeatType:d="loop",keyframes:h,name:y,motionValue:p,element:x,...b}){var N;super(),this.stop=()=>{var V,B;this._animation&&(this._animation.stop(),(V=this.stopTimeline)==null||V.call(this)),(B=this.keyframeResolver)==null||B.cancel()},this.createdAt=ht.now();const w={autoplay:a,delay:l,type:r,repeat:u,repeatDelay:f,repeatType:d,name:y,motionValue:p,element:x,...b},j=(x==null?void 0:x.KeyframeResolver)||of;this.keyframeResolver=new j(h,(V,B,q)=>this.onKeyframesResolved(V,B,w,!q),y,p,x),(N=this.keyframeResolver)==null||N.scheduleResolve()}onKeyframesResolved(a,l,r,u){var B,q;this.keyframeResolver=void 0;const{name:f,type:d,velocity:h,delay:y,isHandoff:p,onUpdate:x}=r;this.resolvedAt=ht.now(),A2(a,f,d,h)||((An.instantAnimations||!y)&&(x==null||x(sf(a,r,l))),a[0]=a[a.length-1],Oc(r),r.repeat=0);const w={startTime:u?this.resolvedAt?this.resolvedAt-this.createdAt>D2?this.resolvedAt:this.createdAt:this.createdAt:void 0,finalKeyframe:l,...r,keyframes:a},j=!p&&E2(w),N=(q=(B=w.motionValue)==null?void 0:B.owner)==null?void 0:q.current,V=j?new w2({...w,element:N}):new rf(w);V.finished.then(()=>{this.notifyFinished()}).catch(Yt),this.pendingTimeline&&(this.stopTimeline=V.attachTimeline(this.pendingTimeline),this.pendingTimeline=void 0),this._animation=V}get finished(){return this._animation?this.animation.finished:this._finished}then(a,l){return this.finished.finally(a).then(()=>{})}get animation(){var a;return this._animation||((a=this.keyframeResolver)==null||a.resume(),h2()),this._animation}get duration(){return this.animation.duration}get iterationDuration(){return this.animation.iterationDuration}get time(){return this.animation.time}set time(a){this.animation.time=a}get speed(){return this.animation.speed}get state(){return this.animation.state}set speed(a){this.animation.speed=a}get startTime(){return this.animation.startTime}attachTimeline(a){return this._animation?this.stopTimeline=this.animation.attachTimeline(a):this.pendingTimeline=a,()=>this.stop()}play(){this.animation.play()}pause(){this.animation.pause()}complete(){this.animation.complete()}cancel(){var a;this._animation&&this.animation.cancel(),(a=this.keyframeResolver)==null||a.cancel()}}function n0(i,a,l,r=0,u=1){const f=Array.from(i).sort((p,x)=>p.sortNodePosition(x)).indexOf(a),d=i.size,h=(d-1)*r;return typeof l=="function"?l(f,d):u===1?f*r:h-f*r}const C2=/^var\(--(?:([\w-]+)|([\w-]+), ?([a-zA-Z\d ()%#.,-]+))\)/u;function O2(i){const a=C2.exec(i);if(!a)return[,];const[,l,r,u]=a;return[`--${l??r}`,u]}function a0(i,a,l=1){const[r,u]=O2(i);if(!r)return;const f=window.getComputedStyle(a).getPropertyValue(r);if(f){const d=f.trim();return by(d)?parseFloat(d):d}return Ic(u)?a0(u,a,l+1):u}const R2={type:"spring",stiffness:500,damping:25,restSpeed:10},_2=i=>({type:"spring",stiffness:550,damping:i===0?2*Math.sqrt(550):30,restSpeed:10}),z2={type:"keyframes",duration:.8},L2={type:"keyframes",ease:[.25,.1,.35,1],duration:.3},V2=(i,{keyframes:a})=>a.length>2?z2:Ai.has(i)?i.startsWith("scale")?_2(a[1]):R2:L2,k2=i=>i!==null;function U2(i,{repeat:a,repeatType:l="loop"},r){const u=i.filter(k2),f=a&&l!=="loop"&&a%2===1?0:u.length-1;return u[f]}function i0(i,a){if(i!=null&&i.inherit&&a){const{inherit:l,...r}=i;return{...a,...r}}return i}function uf(i,a){const l=(i==null?void 0:i[a])??(i==null?void 0:i.default)??i;return l!==i?i0(l,i):l}function B2({when:i,delay:a,delayChildren:l,staggerChildren:r,staggerDirection:u,repeat:f,repeatType:d,repeatDelay:h,from:y,elapsed:p,...x}){return!!Object.keys(x).length}const cf=(i,a,l,r={},u,f)=>d=>{const h=uf(r,i)||{},y=h.delay||r.delay||0;let{elapsed:p=0}=r;p=p-Zt(y);const x={keyframes:Array.isArray(l)?l:[null,l],ease:"easeOut",velocity:a.getVelocity(),...h,delay:-p,onUpdate:w=>{a.set(w),h.onUpdate&&h.onUpdate(w)},onComplete:()=>{d(),h.onComplete&&h.onComplete()},name:i,motionValue:a,element:f?void 0:u};B2(h)||Object.assign(x,V2(i,x)),x.duration&&(x.duration=Zt(x.duration)),x.repeatDelay&&(x.repeatDelay=Zt(x.repeatDelay)),x.from!==void 0&&(x.keyframes[0]=x.from);let b=!1;if((x.type===!1||x.duration===0&&!x.repeatDelay)&&(Oc(x),x.delay===0&&(b=!0)),(An.instantAnimations||An.skipAnimations||u!=null&&u.shouldSkipAnimations)&&(b=!0,Oc(x),x.delay=0),x.allowFlatten=!h.type&&!h.ease,b&&!f&&a.get()!==void 0){const w=U2(x.keyframes,h);if(w!==void 0){Ce.update(()=>{x.onUpdate(w),x.onComplete()});return}}return h.isSync?new rf(x):new M2(x)};function Jp(i){const a=[{},{}];return i==null||i.values.forEach((l,r)=>{a[0][r]=l.get(),a[1][r]=l.getVelocity()}),a}function ff(i,a,l,r){if(typeof a=="function"){const[u,f]=Jp(r);a=a(l!==void 0?l:i.custom,u,f)}if(typeof a=="string"&&(a=i.variants&&i.variants[a]),typeof a=="function"){const[u,f]=Jp(r);a=a(l!==void 0?l:i.custom,u,f)}return a}function bi(i,a,l){const r=i.getProps();return ff(r,a,l!==void 0?l:r.custom,i)}const s0=new Set(["width","height","top","left","right","bottom",...Ti]),$p=30,H2=i=>!isNaN(parseFloat(i));class q2{constructor(a,l={}){this.canTrackVelocity=null,this.events={},this.updateAndNotify=r=>{var f;const u=ht.now();if(this.updatedAt!==u&&this.setPrevFrameValue(),this.prev=this.current,this.setCurrent(r),this.current!==this.prev&&((f=this.events.change)==null||f.notify(this.current),this.dependents))for(const d of this.dependents)d.dirty()},this.hasAnimated=!1,this.setCurrent(a),this.owner=l.owner}setCurrent(a){this.current=a,this.updatedAt=ht.now(),this.canTrackVelocity===null&&a!==void 0&&(this.canTrackVelocity=H2(this.current))}setPrevFrameValue(a=this.current){this.prevFrameValue=a,this.prevUpdatedAt=this.updatedAt}onChange(a){return this.on("change",a)}on(a,l){this.events[a]||(this.events[a]=new Jc);const r=this.events[a].add(l);return a==="change"?()=>{r(),Ce.read(()=>{this.events.change.getSize()||this.stop()})}:r}clearListeners(){for(const a in this.events)this.events[a].clear()}attach(a,l){this.passiveEffect=a,this.stopPassiveEffect=l}set(a){this.passiveEffect?this.passiveEffect(a,this.updateAndNotify):this.updateAndNotify(a)}setWithVelocity(a,l,r){this.set(l),this.prev=void 0,this.prevFrameValue=a,this.prevUpdatedAt=this.updatedAt-r}jump(a,l=!0){this.updateAndNotify(a),this.prev=a,this.prevUpdatedAt=this.prevFrameValue=void 0,l&&this.stop(),this.stopPassiveEffect&&this.stopPassiveEffect()}dirty(){var a;(a=this.events.change)==null||a.notify(this.current)}addDependent(a){this.dependents||(this.dependents=new Set),this.dependents.add(a)}removeDependent(a){this.dependents&&this.dependents.delete(a)}get(){return this.current}getPrevious(){return this.prev}getVelocity(){const a=ht.now();if(!this.canTrackVelocity||this.prevFrameValue===void 0||a-this.updatedAt>$p)return 0;const l=Math.min(this.updatedAt-this.prevUpdatedAt,$p);return Ay(parseFloat(this.current)-parseFloat(this.prevFrameValue),l)}start(a){return this.stop(),new Promise(l=>{this.hasAnimated=!0,this.animation=a(l),this.events.animationStart&&this.events.animationStart.notify()}).then(()=>{this.events.animationComplete&&this.events.animationComplete.notify(),this.clearAnimation()})}stop(){this.animation&&(this.animation.stop(),this.events.animationCancel&&this.events.animationCancel.notify()),this.clearAnimation()}isAnimating(){return!!this.animation}clearAnimation(){delete this.animation}destroy(){var a,l;(a=this.dependents)==null||a.clear(),(l=this.events.destroy)==null||l.notify(),this.clearListeners(),this.stop(),this.stopPassiveEffect&&this.stopPassiveEffect()}}function Si(i,a){return new q2(i,a)}const Rc=i=>Array.isArray(i);function G2(i,a,l){i.hasValue(a)?i.getValue(a).set(l):i.addValue(a,Si(l))}function Y2(i){return Rc(i)?i[i.length-1]||0:i}function P2(i,a){const l=bi(i,a);let{transitionEnd:r={},transition:u={},...f}=l||{};f={...f,...r};for(const d in f){const h=Y2(f[d]);G2(i,d,h)}}const ct=i=>!!(i&&i.getVelocity);function K2(i){return!!(ct(i)&&i.add)}function _c(i,a){const l=i.getValue("willChange");if(K2(l))return l.add(a);if(!l&&An.WillChange){const r=new An.WillChange("auto");i.addValue("willChange",r),r.add(a)}}function df(i){return i.replace(/([A-Z])/g,a=>`-${a.toLowerCase()}`)}const X2="framerAppearId",l0="data-"+df(X2);function r0(i){return i.props[l0]}function F2({protectedKeys:i,needsAnimating:a},l){const r=i.hasOwnProperty(l)&&a[l]!==!0;return a[l]=!1,r}function o0(i,a,{delay:l=0,transitionOverride:r,type:u}={}){let{transition:f,transitionEnd:d,...h}=a;const y=i.getDefaultTransition();f=f?i0(f,y):y;const p=f==null?void 0:f.reduceMotion;r&&(f=r);const x=[],b=u&&i.animationState&&i.animationState.getState()[u];for(const w in h){const j=i.getValue(w,i.latestValues[w]??null),N=h[w];if(N===void 0||b&&F2(b,w))continue;const V={delay:l,...uf(f||{},w)},B=j.get();if(B!==void 0&&!j.isAnimating&&!Array.isArray(N)&&N===B&&!V.velocity)continue;let q=!1;if(window.MotionHandoffAnimation){const K=r0(i);if(K){const X=window.MotionHandoffAnimation(K,w,Ce);X!==null&&(V.startTime=X,q=!0)}}_c(i,w);const Y=p??i.shouldReduceMotion;j.start(cf(w,j,N,Y&&s0.has(w)?{type:!1}:V,i,q));const H=j.animation;H&&x.push(H)}if(d){const w=()=>Ce.update(()=>{d&&P2(i,d)});x.length?Promise.all(x).then(w):w()}return x}function zc(i,a,l={}){var y;const r=bi(i,a,l.type==="exit"?(y=i.presenceContext)==null?void 0:y.custom:void 0);let{transition:u=i.getDefaultTransition()||{}}=r||{};l.transitionOverride&&(u=l.transitionOverride);const f=r?()=>Promise.all(o0(i,r,l)):()=>Promise.resolve(),d=i.variantChildren&&i.variantChildren.size?(p=0)=>{const{delayChildren:x=0,staggerChildren:b,staggerDirection:w}=u;return Q2(i,a,p,x,b,w,l)}:()=>Promise.resolve(),{when:h}=u;if(h){const[p,x]=h==="beforeChildren"?[f,d]:[d,f];return p().then(()=>x())}else return Promise.all([f(),d(l.delay)])}function Q2(i,a,l=0,r=0,u=0,f=1,d){const h=[];for(const y of i.variantChildren)y.notify("AnimationStart",a),h.push(zc(y,a,{...d,delay:l+(typeof r=="function"?0:r)+n0(i.variantChildren,y,r,u,f)}).then(()=>y.notify("AnimationComplete",a)));return Promise.all(h)}function Z2(i,a,l={}){i.notify("AnimationStart",a);let r;if(Array.isArray(a)){const u=a.map(f=>zc(i,f,l));r=Promise.all(u)}else if(typeof a=="string")r=zc(i,a,l);else{const u=typeof a=="function"?bi(i,a,l.custom):a;r=Promise.all(o0(i,u,l))}return r.then(()=>{i.notify("AnimationComplete",a)})}const J2={test:i=>i==="auto",parse:i=>i},u0=i=>a=>a.test(i),c0=[wi,$,an,Jn,Nb,Ab,J2],Wp=i=>c0.find(u0(i));function $2(i){return typeof i=="number"?i===0:i!==null?i==="none"||i==="0"||wy(i):!0}const W2=new Set(["brightness","contrast","saturate","opacity"]);function I2(i){const[a,l]=i.slice(0,-1).split("(");if(a==="drop-shadow")return i;const[r]=l.match(ef)||[];if(!r)return i;const u=l.replace(r,"");let f=W2.has(a)?1:0;return r!==l&&(f*=100),a+"("+f+u+")"}const eS=/\b([a-z-]*)\(.*?\)/gu,Lc={...Jt,getAnimatableNone:i=>{const a=i.match(eS);return a?a.map(I2).join(" "):i}},Vc={...Jt,getAnimatableNone:i=>{const a=Jt.parse(i);return Jt.createTransformer(i)(a.map(r=>typeof r=="number"?0:typeof r=="object"?{...r,alpha:1}:r))}},Ip={...wi,transform:Math.round},tS={rotate:Jn,rotateX:Jn,rotateY:Jn,rotateZ:Jn,scale:ir,scaleX:ir,scaleY:ir,scaleZ:ir,skew:Jn,skewX:Jn,skewY:Jn,distance:$,translateX:$,translateY:$,translateZ:$,x:$,y:$,z:$,perspective:$,transformPerspective:$,opacity:Cs,originX:Bp,originY:Bp,originZ:$},hf={borderWidth:$,borderTopWidth:$,borderRightWidth:$,borderBottomWidth:$,borderLeftWidth:$,borderRadius:$,borderTopLeftRadius:$,borderTopRightRadius:$,borderBottomRightRadius:$,borderBottomLeftRadius:$,width:$,maxWidth:$,height:$,maxHeight:$,top:$,right:$,bottom:$,left:$,inset:$,insetBlock:$,insetBlockStart:$,insetBlockEnd:$,insetInline:$,insetInlineStart:$,insetInlineEnd:$,padding:$,paddingTop:$,paddingRight:$,paddingBottom:$,paddingLeft:$,paddingBlock:$,paddingBlockStart:$,paddingBlockEnd:$,paddingInline:$,paddingInlineStart:$,paddingInlineEnd:$,margin:$,marginTop:$,marginRight:$,marginBottom:$,marginLeft:$,marginBlock:$,marginBlockStart:$,marginBlockEnd:$,marginInline:$,marginInlineStart:$,marginInlineEnd:$,fontSize:$,backgroundPositionX:$,backgroundPositionY:$,...tS,zIndex:Ip,fillOpacity:Cs,strokeOpacity:Cs,numOctaves:Ip},nS={...hf,color:Je,backgroundColor:Je,outlineColor:Je,fill:Je,stroke:Je,borderColor:Je,borderTopColor:Je,borderRightColor:Je,borderBottomColor:Je,borderLeftColor:Je,filter:Lc,WebkitFilter:Lc,mask:Vc,WebkitMask:Vc},f0=i=>nS[i],aS=new Set([Lc,Vc]);function d0(i,a){let l=f0(i);return aS.has(l)||(l=Jt),l.getAnimatableNone?l.getAnimatableNone(a):void 0}const iS=new Set(["auto","none","0"]);function sS(i,a,l){let r=0,u;for(;r{a.getValue(y).set(p)}),this.resolveNoneKeyframes()}}const rS=new Set(["opacity","clipPath","filter","transform"]);function h0(i,a,l){if(i==null)return[];if(i instanceof EventTarget)return[i];if(typeof i=="string"){let r=document;const u=(l==null?void 0:l[i])??r.querySelectorAll(i);return u?Array.from(u):[]}return Array.from(i).filter(r=>r!=null)}const m0=(i,a)=>a&&typeof i=="number"?a.transform(i):i;function oS(i){return Sy(i)&&"offsetHeight"in i}const{schedule:mf}=Ly(queueMicrotask,!1),Qt={x:!1,y:!1};function p0(){return Qt.x||Qt.y}function uS(i){return i==="x"||i==="y"?Qt[i]?null:(Qt[i]=!0,()=>{Qt[i]=!1}):Qt.x||Qt.y?null:(Qt.x=Qt.y=!0,()=>{Qt.x=Qt.y=!1})}function g0(i,a){const l=h0(i),r=new AbortController,u={passive:!0,...a,signal:r.signal};return[l,u,()=>r.abort()]}function cS(i){return!(i.pointerType==="touch"||p0())}function fS(i,a,l={}){const[r,u,f]=g0(i,l);return r.forEach(d=>{let h=!1,y=!1,p;const x=()=>{d.removeEventListener("pointerleave",N)},b=B=>{p&&(p(B),p=void 0),x()},w=B=>{h=!1,window.removeEventListener("pointerup",w),window.removeEventListener("pointercancel",w),y&&(y=!1,b(B))},j=()=>{h=!0,window.addEventListener("pointerup",w,u),window.addEventListener("pointercancel",w,u)},N=B=>{if(B.pointerType!=="touch"){if(h){y=!0;return}b(B)}},V=B=>{if(!cS(B))return;y=!1;const q=a(d,B);typeof q=="function"&&(p=q,d.addEventListener("pointerleave",N,u))};d.addEventListener("pointerenter",V,u),d.addEventListener("pointerdown",j,u)}),f}const y0=(i,a)=>a?i===a?!0:y0(i,a.parentElement):!1,pf=i=>i.pointerType==="mouse"?typeof i.button!="number"||i.button<=0:i.isPrimary!==!1,dS=new Set(["BUTTON","INPUT","SELECT","TEXTAREA","A"]);function hS(i){return dS.has(i.tagName)||i.isContentEditable===!0}const mS=new Set(["INPUT","SELECT","TEXTAREA"]);function pS(i){return mS.has(i.tagName)||i.isContentEditable===!0}const or=new WeakSet;function eg(i){return a=>{a.key==="Enter"&&i(a)}}function lc(i,a){i.dispatchEvent(new PointerEvent("pointer"+a,{isPrimary:!0,bubbles:!0}))}const gS=(i,a)=>{const l=i.currentTarget;if(!l)return;const r=eg(()=>{if(or.has(l))return;lc(l,"down");const u=eg(()=>{lc(l,"up")}),f=()=>lc(l,"cancel");l.addEventListener("keyup",u,a),l.addEventListener("blur",f,a)});l.addEventListener("keydown",r,a),l.addEventListener("blur",()=>l.removeEventListener("keydown",r),a)};function tg(i){return pf(i)&&!p0()}const ng=new WeakSet;function yS(i,a,l={}){const[r,u,f]=g0(i,l),d=h=>{const y=h.currentTarget;if(!tg(h)||ng.has(h))return;or.add(y),l.stopPropagation&&ng.add(h);const p=a(y,h),x=(j,N)=>{window.removeEventListener("pointerup",b),window.removeEventListener("pointercancel",w),or.has(y)&&or.delete(y),tg(j)&&typeof p=="function"&&p(j,{success:N})},b=j=>{x(j,y===window||y===document||l.useGlobalTarget||y0(y,j.target))},w=j=>{x(j,!1)};window.addEventListener("pointerup",b,u),window.addEventListener("pointercancel",w,u)};return r.forEach(h=>{(l.useGlobalTarget?window:h).addEventListener("pointerdown",d,u),oS(h)&&(h.addEventListener("focus",p=>gS(p,u)),!hS(h)&&!h.hasAttribute("tabindex")&&(h.tabIndex=0))}),f}function gf(i){return Sy(i)&&"ownerSVGElement"in i}const ur=new WeakMap;let $n;const x0=(i,a,l)=>(r,u)=>u&&u[0]?u[0][i+"Size"]:gf(r)&&"getBBox"in r?r.getBBox()[a]:r[l],xS=x0("inline","width","offsetWidth"),vS=x0("block","height","offsetHeight");function bS({target:i,borderBoxSize:a}){var l;(l=ur.get(i))==null||l.forEach(r=>{r(i,{get width(){return xS(i,a)},get height(){return vS(i,a)}})})}function SS(i){i.forEach(bS)}function wS(){typeof ResizeObserver>"u"||($n=new ResizeObserver(SS))}function TS(i,a){$n||wS();const l=h0(i);return l.forEach(r=>{let u=ur.get(r);u||(u=new Set,ur.set(r,u)),u.add(a),$n==null||$n.observe(r)}),()=>{l.forEach(r=>{const u=ur.get(r);u==null||u.delete(a),u!=null&&u.size||$n==null||$n.unobserve(r)})}}const cr=new Set;let pi;function AS(){pi=()=>{const i={get width(){return window.innerWidth},get height(){return window.innerHeight}};cr.forEach(a=>a(i))},window.addEventListener("resize",pi)}function NS(i){return cr.add(i),pi||AS(),()=>{cr.delete(i),!cr.size&&typeof pi=="function"&&(window.removeEventListener("resize",pi),pi=void 0)}}function ag(i,a){return typeof i=="function"?NS(i):TS(i,a)}function jS(i){return gf(i)&&i.tagName==="svg"}const ES=[...c0,Je,Jt],DS=i=>ES.find(u0(i)),ig=()=>({translate:0,scale:1,origin:0,originPoint:0}),gi=()=>({x:ig(),y:ig()}),sg=()=>({min:0,max:0}),We=()=>({x:sg(),y:sg()}),MS=new WeakMap;function Nr(i){return i!==null&&typeof i=="object"&&typeof i.start=="function"}function Rs(i){return typeof i=="string"||Array.isArray(i)}const yf=["animate","whileInView","whileFocus","whileHover","whileTap","whileDrag","exit"],xf=["initial",...yf];function jr(i){return Nr(i.animate)||xf.some(a=>Rs(i[a]))}function v0(i){return!!(jr(i)||i.variants)}function CS(i,a,l){for(const r in a){const u=a[r],f=l[r];if(ct(u))i.addValue(r,u);else if(ct(f))i.addValue(r,Si(u,{owner:i}));else if(f!==u)if(i.hasValue(r)){const d=i.getValue(r);d.liveStyle===!0?d.jump(u):d.hasAnimated||d.set(u)}else{const d=i.getStaticValue(r);i.addValue(r,Si(d!==void 0?d:u,{owner:i}))}}for(const r in l)a[r]===void 0&&i.removeValue(r);return a}const kc={current:null},b0={current:!1},OS=typeof window<"u";function RS(){if(b0.current=!0,!!OS)if(window.matchMedia){const i=window.matchMedia("(prefers-reduced-motion)"),a=()=>kc.current=i.matches;i.addEventListener("change",a),a()}else kc.current=!1}const lg=["AnimationStart","AnimationComplete","Update","BeforeLayoutMeasure","LayoutMeasure","LayoutAnimationStart","LayoutAnimationComplete"];let yr={};function S0(i){yr=i}function _S(){return yr}class zS{scrapeMotionValuesFromProps(a,l,r){return{}}constructor({parent:a,props:l,presenceContext:r,reducedMotionConfig:u,skipAnimations:f,blockInitialAnimation:d,visualState:h},y={}){this.current=null,this.children=new Set,this.isVariantNode=!1,this.isControllingVariants=!1,this.shouldReduceMotion=null,this.shouldSkipAnimations=!1,this.values=new Map,this.KeyframeResolver=of,this.features={},this.valueSubscriptions=new Map,this.prevMotionValues={},this.hasBeenMounted=!1,this.events={},this.propEventSubscriptions={},this.notifyUpdate=()=>this.notify("Update",this.latestValues),this.render=()=>{this.current&&(this.triggerBuild(),this.renderInstance(this.current,this.renderState,this.props.style,this.projection))},this.renderScheduledAt=0,this.scheduleRender=()=>{const j=ht.now();this.renderScheduledAtthis.bindToMotionValue(f,u)),this.reducedMotionConfig==="never"?this.shouldReduceMotion=!1:this.reducedMotionConfig==="always"?this.shouldReduceMotion=!0:(b0.current||RS(),this.shouldReduceMotion=kc.current),this.shouldSkipAnimations=this.skipAnimationsConfig??!1,(r=this.parent)==null||r.addChild(this),this.update(this.props,this.presenceContext),this.hasBeenMounted=!0}unmount(){var a;this.projection&&this.projection.unmount(),In(this.notifyUpdate),In(this.render),this.valueSubscriptions.forEach(l=>l()),this.valueSubscriptions.clear(),this.removeFromVariantTree&&this.removeFromVariantTree(),(a=this.parent)==null||a.removeChild(this);for(const l in this.events)this.events[l].clear();for(const l in this.features){const r=this.features[l];r&&(r.unmount(),r.isMounted=!1)}this.current=null}addChild(a){this.children.add(a),this.enteringChildren??(this.enteringChildren=new Set),this.enteringChildren.add(a)}removeChild(a){this.children.delete(a),this.enteringChildren&&this.enteringChildren.delete(a)}bindToMotionValue(a,l){if(this.valueSubscriptions.has(a)&&this.valueSubscriptions.get(a)(),l.accelerate&&rS.has(a)&&this.current instanceof HTMLElement){const{factory:d,keyframes:h,times:y,ease:p,duration:x}=l.accelerate,b=new e0({element:this.current,name:a,keyframes:h,times:y,ease:p,duration:Zt(x)}),w=d(b);this.valueSubscriptions.set(a,()=>{w(),b.cancel()});return}const r=Ai.has(a);r&&this.onBindTransform&&this.onBindTransform();const u=l.on("change",d=>{this.latestValues[a]=d,this.props.onUpdate&&Ce.preRender(this.notifyUpdate),r&&this.projection&&(this.projection.isTransformDirty=!0),this.scheduleRender()});let f;typeof window<"u"&&window.MotionCheckAppearSync&&(f=window.MotionCheckAppearSync(this,a,l)),this.valueSubscriptions.set(a,()=>{u(),f&&f(),l.owner&&l.stop()})}sortNodePosition(a){return!this.current||!this.sortInstanceNodePosition||this.type!==a.type?0:this.sortInstanceNodePosition(this.current,a.current)}updateFeatures(){let a="animation";for(a in yr){const l=yr[a];if(!l)continue;const{isEnabled:r,Feature:u}=l;if(!this.features[a]&&u&&r(this.props)&&(this.features[a]=new u(this)),this.features[a]){const f=this.features[a];f.isMounted?f.update():(f.mount(),f.isMounted=!0)}}}triggerBuild(){this.build(this.renderState,this.latestValues,this.props)}measureViewportBox(){return this.current?this.measureInstanceViewportBox(this.current,this.props):We()}getStaticValue(a){return this.latestValues[a]}setStaticValue(a,l){this.latestValues[a]=l}update(a,l){(a.transformTemplate||this.props.transformTemplate)&&this.scheduleRender(),this.prevProps=this.props,this.props=a,this.prevPresenceContext=this.presenceContext,this.presenceContext=l;for(let r=0;rl.variantChildren.delete(a)}addValue(a,l){const r=this.values.get(a);l!==r&&(r&&this.removeValue(a),this.bindToMotionValue(a,l),this.values.set(a,l),this.latestValues[a]=l.get())}removeValue(a){this.values.delete(a);const l=this.valueSubscriptions.get(a);l&&(l(),this.valueSubscriptions.delete(a)),delete this.latestValues[a],this.removeValueFromRenderState(a,this.renderState)}hasValue(a){return this.values.has(a)}getValue(a,l){if(this.props.values&&this.props.values[a])return this.props.values[a];let r=this.values.get(a);return r===void 0&&l!==void 0&&(r=Si(l===null?void 0:l,{owner:this}),this.addValue(a,r)),r}readValue(a,l){let r=this.latestValues[a]!==void 0||!this.current?this.latestValues[a]:this.getBaseTargetFromProps(this.props,a)??this.readValueFromInstance(this.current,a,this.options);return r!=null&&(typeof r=="string"&&(by(r)||wy(r))?r=parseFloat(r):!DS(r)&&Jt.test(l)&&(r=d0(a,l)),this.setBaseTarget(a,ct(r)?r.get():r)),ct(r)?r.get():r}setBaseTarget(a,l){this.baseTarget[a]=l}getBaseTarget(a){var f;const{initial:l}=this.props;let r;if(typeof l=="string"||typeof l=="object"){const d=ff(this.props,l,(f=this.presenceContext)==null?void 0:f.custom);d&&(r=d[a])}if(l&&r!==void 0)return r;const u=this.getBaseTargetFromProps(this.props,a);return u!==void 0&&!ct(u)?u:this.initialValues[a]!==void 0&&r===void 0?void 0:this.baseTarget[a]}on(a,l){return this.events[a]||(this.events[a]=new Jc),this.events[a].add(l)}notify(a,...l){this.events[a]&&this.events[a].notify(...l)}scheduleRenderMicrotask(){mf.render(this.render)}}class w0 extends zS{constructor(){super(...arguments),this.KeyframeResolver=lS}sortInstanceNodePosition(a,l){return a.compareDocumentPosition(l)&2?1:-1}getBaseTargetFromProps(a,l){const r=a.style;return r?r[l]:void 0}removeValueFromRenderState(a,{vars:l,style:r}){delete l[a],delete r[a]}handleChildMotionValue(){this.childSubscription&&(this.childSubscription(),delete this.childSubscription);const{children:a}=this.props;ct(a)&&(this.childSubscription=a.on("change",l=>{this.current&&(this.current.textContent=`${l}`)}))}}class ea{constructor(a){this.isMounted=!1,this.node=a}update(){}}function T0({top:i,left:a,right:l,bottom:r}){return{x:{min:a,max:l},y:{min:i,max:r}}}function LS({x:i,y:a}){return{top:a.min,right:i.max,bottom:a.max,left:i.min}}function VS(i,a){if(!a)return i;const l=a({x:i.left,y:i.top}),r=a({x:i.right,y:i.bottom});return{top:l.y,left:l.x,bottom:r.y,right:r.x}}function rc(i){return i===void 0||i===1}function Uc({scale:i,scaleX:a,scaleY:l}){return!rc(i)||!rc(a)||!rc(l)}function wa(i){return Uc(i)||A0(i)||i.z||i.rotate||i.rotateX||i.rotateY||i.skewX||i.skewY}function A0(i){return rg(i.x)||rg(i.y)}function rg(i){return i&&i!=="0%"}function xr(i,a,l){const r=i-l,u=a*r;return l+u}function og(i,a,l,r,u){return u!==void 0&&(i=xr(i,u,r)),xr(i,l,r)+a}function Bc(i,a=0,l=1,r,u){i.min=og(i.min,a,l,r,u),i.max=og(i.max,a,l,r,u)}function N0(i,{x:a,y:l}){Bc(i.x,a.translate,a.scale,a.originPoint),Bc(i.y,l.translate,l.scale,l.originPoint)}const ug=.999999999999,cg=1.0000000000001;function kS(i,a,l,r=!1){const u=l.length;if(!u)return;a.x=a.y=1;let f,d;for(let h=0;hug&&(a.x=1),a.yug&&(a.y=1)}function yi(i,a){i.min=i.min+a,i.max=i.max+a}function fg(i,a,l,r,u=.5){const f=Le(i.min,i.max,u);Bc(i,a,l,f,r)}function dg(i,a){return typeof i=="string"?parseFloat(i)/100*(a.max-a.min):i}function xi(i,a){fg(i.x,dg(a.x,i.x),a.scaleX,a.scale,a.originX),fg(i.y,dg(a.y,i.y),a.scaleY,a.scale,a.originY)}function j0(i,a){return T0(VS(i.getBoundingClientRect(),a))}function US(i,a,l){const r=j0(i,l),{scroll:u}=a;return u&&(yi(r.x,u.offset.x),yi(r.y,u.offset.y)),r}const BS={x:"translateX",y:"translateY",z:"translateZ",transformPerspective:"perspective"},HS=Ti.length;function qS(i,a,l){let r="",u=!0;for(let f=0;f{if(!a.target)return i;if(typeof i=="string")if($.test(i))i=parseFloat(i);else return i;const l=hg(i,a.target.x),r=hg(i,a.target.y);return`${l}% ${r}%`}},GS={correct:(i,{treeScale:a,projectionDelta:l})=>{const r=i,u=Jt.parse(i);if(u.length>5)return r;const f=Jt.createTransformer(i),d=typeof u[0]!="number"?1:0,h=l.x.scale*a.x,y=l.y.scale*a.y;u[0+d]/=h,u[1+d]/=y;const p=Le(h,y,.5);return typeof u[2+d]=="number"&&(u[2+d]/=p),typeof u[3+d]=="number"&&(u[3+d]/=p),f(u)}},Hc={borderRadius:{...bs,applyTo:["borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius"]},borderTopLeftRadius:bs,borderTopRightRadius:bs,borderBottomLeftRadius:bs,borderBottomRightRadius:bs,boxShadow:GS};function D0(i,{layout:a,layoutId:l}){return Ai.has(i)||i.startsWith("origin")||(a||l!==void 0)&&(!!Hc[i]||i==="opacity")}function bf(i,a,l){var d;const r=i.style,u=a==null?void 0:a.style,f={};if(!r)return f;for(const h in r)(ct(r[h])||u&&ct(u[h])||D0(h,i)||((d=l==null?void 0:l.getValue(h))==null?void 0:d.liveStyle)!==void 0)&&(f[h]=r[h]);return f}function YS(i){return window.getComputedStyle(i)}class PS extends w0{constructor(){super(...arguments),this.type="html",this.renderInstance=E0}readValueFromInstance(a,l){var r;if(Ai.has(l))return(r=this.projection)!=null&&r.isProjecting?jc(l):o2(a,l);{const u=YS(a),f=(ky(l)?u.getPropertyValue(l):u[l])||0;return typeof f=="string"?f.trim():f}}measureInstanceViewportBox(a,{transformPagePoint:l}){return j0(a,l)}build(a,l,r){vf(a,l,r.transformTemplate)}scrapeMotionValuesFromProps(a,l,r){return bf(a,l,r)}}const KS={offset:"stroke-dashoffset",array:"stroke-dasharray"},XS={offset:"strokeDashoffset",array:"strokeDasharray"};function FS(i,a,l=1,r=0,u=!0){i.pathLength=1;const f=u?KS:XS;i[f.offset]=`${-r}`,i[f.array]=`${a} ${l}`}const QS=["offsetDistance","offsetPath","offsetRotate","offsetAnchor"];function M0(i,{attrX:a,attrY:l,attrScale:r,pathLength:u,pathSpacing:f=1,pathOffset:d=0,...h},y,p,x){if(vf(i,h,p),y){i.style.viewBox&&(i.attrs.viewBox=i.style.viewBox);return}i.attrs=i.style,i.style={};const{attrs:b,style:w}=i;b.transform&&(w.transform=b.transform,delete b.transform),(w.transform||b.transformOrigin)&&(w.transformOrigin=b.transformOrigin??"50% 50%",delete b.transformOrigin),w.transform&&(w.transformBox=(x==null?void 0:x.transformBox)??"fill-box",delete b.transformBox);for(const j of QS)b[j]!==void 0&&(w[j]=b[j],delete b[j]);a!==void 0&&(b.x=a),l!==void 0&&(b.y=l),r!==void 0&&(b.scale=r),u!==void 0&&FS(b,u,f,d,!1)}const C0=new Set(["baseFrequency","diffuseConstant","kernelMatrix","kernelUnitLength","keySplines","keyTimes","limitingConeAngle","markerHeight","markerWidth","numOctaves","targetX","targetY","surfaceScale","specularConstant","specularExponent","stdDeviation","tableValues","viewBox","gradientTransform","pathLength","startOffset","textLength","lengthAdjust"]),O0=i=>typeof i=="string"&&i.toLowerCase()==="svg";function ZS(i,a,l,r){E0(i,a,void 0,r);for(const u in a.attrs)i.setAttribute(C0.has(u)?u:df(u),a.attrs[u])}function R0(i,a,l){const r=bf(i,a,l);for(const u in i)if(ct(i[u])||ct(a[u])){const f=Ti.indexOf(u)!==-1?"attr"+u.charAt(0).toUpperCase()+u.substring(1):u;r[f]=i[u]}return r}class JS extends w0{constructor(){super(...arguments),this.type="svg",this.isSVGTag=!1,this.measureInstanceViewportBox=We}getBaseTargetFromProps(a,l){return a[l]}readValueFromInstance(a,l){if(Ai.has(l)){const r=f0(l);return r&&r.default||0}return l=C0.has(l)?l:df(l),a.getAttribute(l)}scrapeMotionValuesFromProps(a,l,r){return R0(a,l,r)}build(a,l,r){M0(a,l,this.isSVGTag,r.transformTemplate,r.style)}renderInstance(a,l,r,u){ZS(a,l,r,u)}mount(a){this.isSVGTag=O0(a.tagName),super.mount(a)}}const $S=xf.length;function _0(i){if(!i)return;if(!i.isControllingVariants){const l=i.parent?_0(i.parent)||{}:{};return i.props.initial!==void 0&&(l.initial=i.props.initial),l}const a={};for(let l=0;l<$S;l++){const r=xf[l],u=i.props[r];(Rs(u)||u===!1)&&(a[r]=u)}return a}function z0(i,a){if(!Array.isArray(a))return!1;const l=a.length;if(l!==i.length)return!1;for(let r=0;rPromise.all(a.map(({animation:l,options:r})=>Z2(i,l,r)))}function tw(i){let a=ew(i),l=mg(),r=!0,u=!1;const f=p=>(x,b)=>{var j;const w=bi(i,b,p==="exit"?(j=i.presenceContext)==null?void 0:j.custom:void 0);if(w){const{transition:N,transitionEnd:V,...B}=w;x={...x,...B,...V}}return x};function d(p){a=p(i)}function h(p){const{props:x}=i,b=_0(i.parent)||{},w=[],j=new Set;let N={},V=1/0;for(let q=0;qV&&X,ye=!1;const ot=Array.isArray(K)?K:[K];let Ve=ot.reduce(f(Y),{});ae===!1&&(Ve={});const{prevResolvedValues:He={}}=H,ze={...He,...Ve},tt=F=>{ce=!0,j.has(F)&&(ye=!0,j.delete(F)),H.needsAnimating[F]=!0;const ie=i.getValue(F);ie&&(ie.liveStyle=!1)};for(const F in ze){const ie=Ve[F],fe=He[F];if(N.hasOwnProperty(F))continue;let A=!1;Rc(ie)&&Rc(fe)?A=!z0(ie,fe):A=ie!==fe,A?ie!=null?tt(F):j.add(F):ie!==void 0&&j.has(F)?tt(F):H.protectedKeys[F]=!0}H.prevProp=K,H.prevResolvedValues=Ve,H.isActive&&(N={...N,...Ve}),(r||u)&&i.blockInitialAnimation&&(ce=!1);const _=Q&&I;ce&&(!_||ye)&&w.push(...ot.map(F=>{const ie={type:Y};if(typeof F=="string"&&(r||u)&&!_&&i.manuallyAnimateOnMount&&i.parent){const{parent:fe}=i,A=bi(fe,F);if(fe.enteringChildren&&A){const{delayChildren:L}=A.transition||{};ie.delay=n0(fe.enteringChildren,i,L)}}return{animation:F,options:ie}}))}if(j.size){const q={};if(typeof x.initial!="boolean"){const Y=bi(i,Array.isArray(x.initial)?x.initial[0]:x.initial);Y&&Y.transition&&(q.transition=Y.transition)}j.forEach(Y=>{const H=i.getBaseTarget(Y),K=i.getValue(Y);K&&(K.liveStyle=!0),q[Y]=H??null}),w.push({animation:q})}let B=!!w.length;return r&&(x.initial===!1||x.initial===x.animate)&&!i.manuallyAnimateOnMount&&(B=!1),r=!1,u=!1,B?a(w):Promise.resolve()}function y(p,x){var w;if(l[p].isActive===x)return Promise.resolve();(w=i.variantChildren)==null||w.forEach(j=>{var N;return(N=j.animationState)==null?void 0:N.setActive(p,x)}),l[p].isActive=x;const b=h(p);for(const j in l)l[j].protectedKeys={};return b}return{animateChanges:h,setActive:y,setAnimateFunction:d,getState:()=>l,reset:()=>{l=mg(),u=!0}}}function nw(i,a){return typeof a=="string"?a!==i:Array.isArray(a)?!z0(a,i):!1}function ba(i=!1){return{isActive:i,protectedKeys:{},needsAnimating:{},prevResolvedValues:{}}}function mg(){return{animate:ba(!0),whileInView:ba(),whileHover:ba(),whileTap:ba(),whileDrag:ba(),whileFocus:ba(),exit:ba()}}function pg(i,a){i.min=a.min,i.max=a.max}function Ft(i,a){pg(i.x,a.x),pg(i.y,a.y)}function gg(i,a){i.translate=a.translate,i.scale=a.scale,i.originPoint=a.originPoint,i.origin=a.origin}const L0=1e-4,aw=1-L0,iw=1+L0,V0=.01,sw=0-V0,lw=0+V0;function mt(i){return i.max-i.min}function rw(i,a,l){return Math.abs(i-a)<=l}function yg(i,a,l,r=.5){i.origin=r,i.originPoint=Le(a.min,a.max,i.origin),i.scale=mt(l)/mt(a),i.translate=Le(l.min,l.max,i.origin)-i.originPoint,(i.scale>=aw&&i.scale<=iw||isNaN(i.scale))&&(i.scale=1),(i.translate>=sw&&i.translate<=lw||isNaN(i.translate))&&(i.translate=0)}function Ns(i,a,l,r){yg(i.x,a.x,l.x,r?r.originX:void 0),yg(i.y,a.y,l.y,r?r.originY:void 0)}function xg(i,a,l){i.min=l.min+a.min,i.max=i.min+mt(a)}function ow(i,a,l){xg(i.x,a.x,l.x),xg(i.y,a.y,l.y)}function vg(i,a,l){i.min=a.min-l.min,i.max=i.min+mt(a)}function vr(i,a,l){vg(i.x,a.x,l.x),vg(i.y,a.y,l.y)}function bg(i,a,l,r,u){return i-=a,i=xr(i,1/l,r),u!==void 0&&(i=xr(i,1/u,r)),i}function uw(i,a=0,l=1,r=.5,u,f=i,d=i){if(an.test(a)&&(a=parseFloat(a),a=Le(d.min,d.max,a/100)-d.min),typeof a!="number")return;let h=Le(f.min,f.max,r);i===f&&(h-=a),i.min=bg(i.min,a,l,h,u),i.max=bg(i.max,a,l,h,u)}function Sg(i,a,[l,r,u],f,d){uw(i,a[l],a[r],a[u],a.scale,f,d)}const cw=["x","scaleX","originX"],fw=["y","scaleY","originY"];function wg(i,a,l,r){Sg(i.x,a,cw,l?l.x:void 0,r?r.x:void 0),Sg(i.y,a,fw,l?l.y:void 0,r?r.y:void 0)}function Tg(i){return i.translate===0&&i.scale===1}function k0(i){return Tg(i.x)&&Tg(i.y)}function Ag(i,a){return i.min===a.min&&i.max===a.max}function dw(i,a){return Ag(i.x,a.x)&&Ag(i.y,a.y)}function Ng(i,a){return Math.round(i.min)===Math.round(a.min)&&Math.round(i.max)===Math.round(a.max)}function U0(i,a){return Ng(i.x,a.x)&&Ng(i.y,a.y)}function jg(i){return mt(i.x)/mt(i.y)}function Eg(i,a){return i.translate===a.translate&&i.scale===a.scale&&i.originPoint===a.originPoint}function tn(i){return[i("x"),i("y")]}function hw(i,a,l){let r="";const u=i.x.translate/a.x,f=i.y.translate/a.y,d=(l==null?void 0:l.z)||0;if((u||f||d)&&(r=`translate3d(${u}px, ${f}px, ${d}px) `),(a.x!==1||a.y!==1)&&(r+=`scale(${1/a.x}, ${1/a.y}) `),l){const{transformPerspective:p,rotate:x,rotateX:b,rotateY:w,skewX:j,skewY:N}=l;p&&(r=`perspective(${p}px) ${r}`),x&&(r+=`rotate(${x}deg) `),b&&(r+=`rotateX(${b}deg) `),w&&(r+=`rotateY(${w}deg) `),j&&(r+=`skewX(${j}deg) `),N&&(r+=`skewY(${N}deg) `)}const h=i.x.scale*a.x,y=i.y.scale*a.y;return(h!==1||y!==1)&&(r+=`scale(${h}, ${y})`),r||"none"}const B0=["TopLeft","TopRight","BottomLeft","BottomRight"],mw=B0.length,Dg=i=>typeof i=="string"?parseFloat(i):i,Mg=i=>typeof i=="number"||$.test(i);function pw(i,a,l,r,u,f){u?(i.opacity=Le(0,l.opacity??1,gw(r)),i.opacityExit=Le(a.opacity??1,0,yw(r))):f&&(i.opacity=Le(a.opacity??1,l.opacity??1,r));for(let d=0;dra?1:l(Ms(i,a,r))}function xw(i,a,l){const r=ct(i)?i:Si(i);return r.start(cf("",r,a,l)),r.animation}function _s(i,a,l,r={passive:!0}){return i.addEventListener(a,l,r),()=>i.removeEventListener(a,l)}const vw=(i,a)=>i.depth-a.depth;class bw{constructor(){this.children=[],this.isDirty=!1}add(a){Qc(this.children,a),this.isDirty=!0}remove(a){hr(this.children,a),this.isDirty=!0}forEach(a){this.isDirty&&this.children.sort(vw),this.isDirty=!1,this.children.forEach(a)}}function Sw(i,a){const l=ht.now(),r=({timestamp:u})=>{const f=u-l;f>=a&&(In(r),i(f-a))};return Ce.setup(r,!0),()=>In(r)}function fr(i){return ct(i)?i.get():i}class ww{constructor(){this.members=[]}add(a){Qc(this.members,a);for(let l=this.members.length-1;l>=0;l--){const r=this.members[l];if(r===a||r===this.lead||r===this.prevLead)continue;const u=r.instance;(!u||u.isConnected===!1)&&!r.snapshot&&(hr(this.members,r),r.unmount())}a.scheduleRender()}remove(a){if(hr(this.members,a),a===this.prevLead&&(this.prevLead=void 0),a===this.lead){const l=this.members[this.members.length-1];l&&this.promote(l)}}relegate(a){var l;for(let r=this.members.indexOf(a)-1;r>=0;r--){const u=this.members[r];if(u.isPresent!==!1&&((l=u.instance)==null?void 0:l.isConnected)!==!1)return this.promote(u),!0}return!1}promote(a,l){var u;const r=this.lead;if(a!==r&&(this.prevLead=r,this.lead=a,a.show(),r)){r.updateSnapshot(),a.scheduleRender();const{layoutDependency:f}=r.options,{layoutDependency:d}=a.options;(f===void 0||f!==d)&&(a.resumeFrom=r,l&&(r.preserveOpacity=!0),r.snapshot&&(a.snapshot=r.snapshot,a.snapshot.latestValues=r.animationValues||r.latestValues),(u=a.root)!=null&&u.isUpdating&&(a.isLayoutDirty=!0)),a.options.crossfade===!1&&r.hide()}}exitAnimationComplete(){this.members.forEach(a=>{var l,r,u,f,d;(r=(l=a.options).onExitComplete)==null||r.call(l),(d=(u=a.resumingFrom)==null?void 0:(f=u.options).onExitComplete)==null||d.call(f)})}scheduleRender(){this.members.forEach(a=>a.instance&&a.scheduleRender(!1))}removeLeadSnapshot(){var a;(a=this.lead)!=null&&a.snapshot&&(this.lead.snapshot=void 0)}}const dr={hasAnimatedSinceResize:!0,hasEverUpdated:!1},oc=["","X","Y","Z"],Tw=1e3;let Aw=0;function uc(i,a,l,r){const{latestValues:u}=a;u[i]&&(l[i]=u[i],a.setStaticValue(i,0),r&&(r[i]=0))}function q0(i){if(i.hasCheckedOptimisedAppear=!0,i.root===i)return;const{visualElement:a}=i.options;if(!a)return;const l=r0(a);if(window.MotionHasOptimisedAnimation(l,"transform")){const{layout:u,layoutId:f}=i.options;window.MotionCancelOptimisedAnimation(l,"transform",Ce,!(u||f))}const{parent:r}=i;r&&!r.hasCheckedOptimisedAppear&&q0(r)}function G0({attachResizeListener:i,defaultParent:a,measureScroll:l,checkIsScrollRoot:r,resetTransform:u}){return class{constructor(d={},h=a==null?void 0:a()){this.id=Aw++,this.animationId=0,this.animationCommitId=0,this.children=new Set,this.options={},this.isTreeAnimating=!1,this.isAnimationBlocked=!1,this.isLayoutDirty=!1,this.isProjectionDirty=!1,this.isSharedProjectionDirty=!1,this.isTransformDirty=!1,this.updateManuallyBlocked=!1,this.updateBlockedByResize=!1,this.isUpdating=!1,this.isSVG=!1,this.needsReset=!1,this.shouldResetTransform=!1,this.hasCheckedOptimisedAppear=!1,this.treeScale={x:1,y:1},this.eventHandlers=new Map,this.hasTreeAnimated=!1,this.layoutVersion=0,this.updateScheduled=!1,this.scheduleUpdate=()=>this.update(),this.projectionUpdateScheduled=!1,this.checkUpdateFailed=()=>{this.isUpdating&&(this.isUpdating=!1,this.clearAllSnapshots())},this.updateProjection=()=>{this.projectionUpdateScheduled=!1,this.nodes.forEach(Ew),this.nodes.forEach(Ow),this.nodes.forEach(Rw),this.nodes.forEach(Dw)},this.resolvedRelativeTargetAt=0,this.linkedParentVersion=0,this.hasProjected=!1,this.isVisible=!0,this.animationProgress=0,this.sharedNodes=new Map,this.latestValues=d,this.root=h?h.root||h:this,this.path=h?[...h.path,h]:[],this.parent=h,this.depth=h?h.depth+1:0;for(let y=0;ythis.root.updateBlockedByResize=!1;Ce.read(()=>{b=window.innerWidth}),i(d,()=>{const j=window.innerWidth;j!==b&&(b=j,this.root.updateBlockedByResize=!0,x&&x(),x=Sw(w,250),dr.hasAnimatedSinceResize&&(dr.hasAnimatedSinceResize=!1,this.nodes.forEach(_g)))})}h&&this.root.registerSharedNode(h,this),this.options.animate!==!1&&p&&(h||y)&&this.addEventListener("didUpdate",({delta:x,hasLayoutChanged:b,hasRelativeLayoutChanged:w,layout:j})=>{if(this.isTreeAnimationBlocked()){this.target=void 0,this.relativeTarget=void 0;return}const N=this.options.transition||p.getDefaultTransition()||kw,{onLayoutAnimationStart:V,onLayoutAnimationComplete:B}=p.getProps(),q=!this.targetLayout||!U0(this.targetLayout,j),Y=!b&&w;if(this.options.layoutRoot||this.resumeFrom||Y||b&&(q||!this.currentAnimation)){this.resumeFrom&&(this.resumingFrom=this.resumeFrom,this.resumingFrom.resumingFrom=void 0);const H={...uf(N,"layout"),onPlay:V,onComplete:B};(p.shouldReduceMotion||this.options.layoutRoot)&&(H.delay=0,H.type=!1),this.startAnimation(H),this.setAnimationOrigin(x,Y)}else b||_g(this),this.isLead()&&this.options.onExitComplete&&this.options.onExitComplete();this.targetLayout=j})}unmount(){this.options.layoutId&&this.willUpdate(),this.root.nodes.remove(this);const d=this.getStack();d&&d.remove(this),this.parent&&this.parent.children.delete(this),this.instance=void 0,this.eventHandlers.clear(),In(this.updateProjection)}blockUpdate(){this.updateManuallyBlocked=!0}unblockUpdate(){this.updateManuallyBlocked=!1}isUpdateBlocked(){return this.updateManuallyBlocked||this.updateBlockedByResize}isTreeAnimationBlocked(){return this.isAnimationBlocked||this.parent&&this.parent.isTreeAnimationBlocked()||!1}startUpdate(){this.isUpdateBlocked()||(this.isUpdating=!0,this.nodes&&this.nodes.forEach(_w),this.animationId++)}getTransformTemplate(){const{visualElement:d}=this.options;return d&&d.getProps().transformTemplate}willUpdate(d=!0){if(this.root.hasTreeAnimated=!0,this.root.isUpdateBlocked()){this.options.onExitComplete&&this.options.onExitComplete();return}if(window.MotionCancelOptimisedAnimation&&!this.hasCheckedOptimisedAppear&&q0(this),!this.root.isUpdating&&this.root.startUpdate(),this.isLayoutDirty)return;this.isLayoutDirty=!0;for(let x=0;x{this.isLayoutDirty?this.root.didUpdate():this.root.checkUpdateFailed()})}updateSnapshot(){this.snapshot||!this.instance||(this.snapshot=this.measure(),this.snapshot&&!mt(this.snapshot.measuredBox.x)&&!mt(this.snapshot.measuredBox.y)&&(this.snapshot=void 0))}updateLayout(){if(!this.instance||(this.updateScroll(),!(this.options.alwaysMeasureLayout&&this.isLead())&&!this.isLayoutDirty))return;if(this.resumeFrom&&!this.resumeFrom.instance)for(let y=0;y{const X=K/1e3;zg(b.x,d.x,X),zg(b.y,d.y,X),this.setTargetDelta(b),this.relativeTarget&&this.relativeTargetOrigin&&this.layout&&this.relativeParent&&this.relativeParent.layout&&(vr(w,this.layout.layoutBox,this.relativeParent.layout.layoutBox),Lw(this.relativeTarget,this.relativeTargetOrigin,w,X),H&&dw(this.relativeTarget,H)&&(this.isProjectionDirty=!1),H||(H=We()),Ft(H,this.relativeTarget)),V&&(this.animationValues=x,pw(x,p,this.latestValues,X,Y,q)),this.root.scheduleUpdateProjection(),this.scheduleRender(),this.animationProgress=X},this.mixTargetDelta(this.options.layoutRoot?1e3:0)}startAnimation(d){var h,y,p;this.notifyListeners("animationStart"),(h=this.currentAnimation)==null||h.stop(),(p=(y=this.resumingFrom)==null?void 0:y.currentAnimation)==null||p.stop(),this.pendingAnimation&&(In(this.pendingAnimation),this.pendingAnimation=void 0),this.pendingAnimation=Ce.update(()=>{dr.hasAnimatedSinceResize=!0,this.motionValue||(this.motionValue=Si(0)),this.motionValue.jump(0,!1),this.currentAnimation=xw(this.motionValue,[0,1e3],{...d,velocity:0,isSync:!0,onUpdate:x=>{this.mixTargetDelta(x),d.onUpdate&&d.onUpdate(x)},onStop:()=>{},onComplete:()=>{d.onComplete&&d.onComplete(),this.completeAnimation()}}),this.resumingFrom&&(this.resumingFrom.currentAnimation=this.currentAnimation),this.pendingAnimation=void 0})}completeAnimation(){this.resumingFrom&&(this.resumingFrom.currentAnimation=void 0,this.resumingFrom.preserveOpacity=void 0);const d=this.getStack();d&&d.exitAnimationComplete(),this.resumingFrom=this.currentAnimation=this.animationValues=void 0,this.notifyListeners("animationComplete")}finishAnimation(){this.currentAnimation&&(this.mixTargetDelta&&this.mixTargetDelta(Tw),this.currentAnimation.stop()),this.completeAnimation()}applyTransformsToTarget(){const d=this.getLead();let{targetWithTransforms:h,target:y,layout:p,latestValues:x}=d;if(!(!h||!y||!p)){if(this!==d&&this.layout&&p&&Y0(this.options.animationType,this.layout.layoutBox,p.layoutBox)){y=this.target||We();const b=mt(this.layout.layoutBox.x);y.x.min=d.target.x.min,y.x.max=y.x.min+b;const w=mt(this.layout.layoutBox.y);y.y.min=d.target.y.min,y.y.max=y.y.min+w}Ft(h,y),xi(h,x),Ns(this.projectionDeltaWithTransform,this.layoutCorrected,h,x)}}registerSharedNode(d,h){this.sharedNodes.has(d)||this.sharedNodes.set(d,new ww),this.sharedNodes.get(d).add(h);const p=h.options.initialPromotionConfig;h.promote({transition:p?p.transition:void 0,preserveFollowOpacity:p&&p.shouldPreserveFollowOpacity?p.shouldPreserveFollowOpacity(h):void 0})}isLead(){const d=this.getStack();return d?d.lead===this:!0}getLead(){var h;const{layoutId:d}=this.options;return d?((h=this.getStack())==null?void 0:h.lead)||this:this}getPrevLead(){var h;const{layoutId:d}=this.options;return d?(h=this.getStack())==null?void 0:h.prevLead:void 0}getStack(){const{layoutId:d}=this.options;if(d)return this.root.sharedNodes.get(d)}promote({needsReset:d,transition:h,preserveFollowOpacity:y}={}){const p=this.getStack();p&&p.promote(this,y),d&&(this.projectionDelta=void 0,this.needsReset=!0),h&&this.setOptions({transition:h})}relegate(){const d=this.getStack();return d?d.relegate(this):!1}resetSkewAndRotation(){const{visualElement:d}=this.options;if(!d)return;let h=!1;const{latestValues:y}=d;if((y.z||y.rotate||y.rotateX||y.rotateY||y.rotateZ||y.skewX||y.skewY)&&(h=!0),!h)return;const p={};y.z&&uc("z",d,p,this.animationValues);for(let x=0;x{var h;return(h=d.currentAnimation)==null?void 0:h.stop()}),this.root.nodes.forEach(Og),this.root.sharedNodes.clear()}}}function Nw(i){i.updateLayout()}function jw(i){var l;const a=((l=i.resumeFrom)==null?void 0:l.snapshot)||i.snapshot;if(i.isLead()&&i.layout&&a&&i.hasListeners("didUpdate")){const{layoutBox:r,measuredBox:u}=i.layout,{animationType:f}=i.options,d=a.source!==i.layout.source;f==="size"?tn(b=>{const w=d?a.measuredBox[b]:a.layoutBox[b],j=mt(w);w.min=r[b].min,w.max=w.min+j}):Y0(f,a.layoutBox,r)&&tn(b=>{const w=d?a.measuredBox[b]:a.layoutBox[b],j=mt(r[b]);w.max=w.min+j,i.relativeTarget&&!i.currentAnimation&&(i.isProjectionDirty=!0,i.relativeTarget[b].max=i.relativeTarget[b].min+j)});const h=gi();Ns(h,r,a.layoutBox);const y=gi();d?Ns(y,i.applyTransform(u,!0),a.measuredBox):Ns(y,r,a.layoutBox);const p=!k0(h);let x=!1;if(!i.resumeFrom){const b=i.getClosestProjectingParent();if(b&&!b.resumeFrom){const{snapshot:w,layout:j}=b;if(w&&j){const N=We();vr(N,a.layoutBox,w.layoutBox);const V=We();vr(V,r,j.layoutBox),U0(N,V)||(x=!0),b.options.layoutRoot&&(i.relativeTarget=V,i.relativeTargetOrigin=N,i.relativeParent=b)}}}i.notifyListeners("didUpdate",{layout:r,snapshot:a,delta:y,layoutDelta:h,hasLayoutChanged:p,hasRelativeLayoutChanged:x})}else if(i.isLead()){const{onExitComplete:r}=i.options;r&&r()}i.options.transition=void 0}function Ew(i){i.parent&&(i.isProjecting()||(i.isProjectionDirty=i.parent.isProjectionDirty),i.isSharedProjectionDirty||(i.isSharedProjectionDirty=!!(i.isProjectionDirty||i.parent.isProjectionDirty||i.parent.isSharedProjectionDirty)),i.isTransformDirty||(i.isTransformDirty=i.parent.isTransformDirty))}function Dw(i){i.isProjectionDirty=i.isSharedProjectionDirty=i.isTransformDirty=!1}function Mw(i){i.clearSnapshot()}function Og(i){i.clearMeasurements()}function Rg(i){i.isLayoutDirty=!1}function Cw(i){const{visualElement:a}=i.options;a&&a.getProps().onBeforeLayoutMeasure&&a.notify("BeforeLayoutMeasure"),i.resetTransform()}function _g(i){i.finishAnimation(),i.targetDelta=i.relativeTarget=i.target=void 0,i.isProjectionDirty=!0}function Ow(i){i.resolveTargetDelta()}function Rw(i){i.calcProjection()}function _w(i){i.resetSkewAndRotation()}function zw(i){i.removeLeadSnapshot()}function zg(i,a,l){i.translate=Le(a.translate,0,l),i.scale=Le(a.scale,1,l),i.origin=a.origin,i.originPoint=a.originPoint}function Lg(i,a,l,r){i.min=Le(a.min,l.min,r),i.max=Le(a.max,l.max,r)}function Lw(i,a,l,r){Lg(i.x,a.x,l.x,r),Lg(i.y,a.y,l.y,r)}function Vw(i){return i.animationValues&&i.animationValues.opacityExit!==void 0}const kw={duration:.45,ease:[.4,0,.1,1]},Vg=i=>typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().includes(i),kg=Vg("applewebkit/")&&!Vg("chrome/")?Math.round:Yt;function Ug(i){i.min=kg(i.min),i.max=kg(i.max)}function Uw(i){Ug(i.x),Ug(i.y)}function Y0(i,a,l){return i==="position"||i==="preserve-aspect"&&!rw(jg(a),jg(l),.2)}function Bw(i){var a;return i!==i.root&&((a=i.scroll)==null?void 0:a.wasRoot)}const Hw=G0({attachResizeListener:(i,a)=>_s(i,"resize",a),measureScroll:()=>{var i,a;return{x:document.documentElement.scrollLeft||((i=document.body)==null?void 0:i.scrollLeft)||0,y:document.documentElement.scrollTop||((a=document.body)==null?void 0:a.scrollTop)||0}},checkIsScrollRoot:()=>!0}),cc={current:void 0},P0=G0({measureScroll:i=>({x:i.scrollLeft,y:i.scrollTop}),defaultParent:()=>{if(!cc.current){const i=new Hw({});i.mount(window),i.setOptions({layoutScroll:!0}),cc.current=i}return cc.current},resetTransform:(i,a)=>{i.style.transform=a!==void 0?a:"none"},checkIsScrollRoot:i=>window.getComputedStyle(i).position==="fixed"}),K0=te.createContext({transformPagePoint:i=>i,isStatic:!1,reducedMotion:"never"});function qw(i=!0){const a=te.useContext(Fc);if(a===null)return[!0,null];const{isPresent:l,onExitComplete:r,register:u}=a,f=te.useId();te.useEffect(()=>{if(i)return u(f)},[i]);const d=te.useCallback(()=>i&&r&&r(f),[f,r,i]);return!l&&r?[!1,d]:[!0]}const X0=te.createContext({strict:!1}),Bg={animation:["animate","variants","whileHover","whileTap","exit","whileInView","whileFocus","whileDrag"],exit:["exit"],drag:["drag","dragControls"],focus:["whileFocus"],hover:["whileHover","onHoverStart","onHoverEnd"],tap:["whileTap","onTap","onTapStart","onTapCancel"],pan:["onPan","onPanStart","onPanSessionStart","onPanEnd"],inView:["whileInView","onViewportEnter","onViewportLeave"],layout:["layout","layoutId"]};let Hg=!1;function Gw(){if(Hg)return;const i={};for(const a in Bg)i[a]={isEnabled:l=>Bg[a].some(r=>!!l[r])};S0(i),Hg=!0}function F0(){return Gw(),_S()}function Yw(i){const a=F0();for(const l in i)a[l]={...a[l],...i[l]};S0(a)}const Pw=new Set(["animate","exit","variants","initial","style","values","variants","transition","transformTemplate","custom","inherit","onBeforeLayoutMeasure","onAnimationStart","onAnimationComplete","onUpdate","onDragStart","onDrag","onDragEnd","onMeasureDragConstraints","onDirectionLock","onDragTransitionEnd","_dragX","_dragY","onHoverStart","onHoverEnd","onViewportEnter","onViewportLeave","globalTapTarget","propagate","ignoreStrict","viewport"]);function br(i){return i.startsWith("while")||i.startsWith("drag")&&i!=="draggable"||i.startsWith("layout")||i.startsWith("onTap")||i.startsWith("onPan")||i.startsWith("onLayout")||Pw.has(i)}let Q0=i=>!br(i);function Kw(i){typeof i=="function"&&(Q0=a=>a.startsWith("on")?!br(a):i(a))}try{Kw(require("@emotion/is-prop-valid").default)}catch{}function Xw(i,a,l){const r={};for(const u in i)u==="values"&&typeof i.values=="object"||(Q0(u)||l===!0&&br(u)||!a&&!br(u)||i.draggable&&u.startsWith("onDrag"))&&(r[u]=i[u]);return r}const Er=te.createContext({});function Fw(i,a){if(jr(i)){const{initial:l,animate:r}=i;return{initial:l===!1||Rs(l)?l:void 0,animate:Rs(r)?r:void 0}}return i.inherit!==!1?a:{}}function Qw(i){const{initial:a,animate:l}=Fw(i,te.useContext(Er));return te.useMemo(()=>({initial:a,animate:l}),[qg(a),qg(l)])}function qg(i){return Array.isArray(i)?i.join(" "):i}const Sf=()=>({style:{},transform:{},transformOrigin:{},vars:{}});function Z0(i,a,l){for(const r in a)!ct(a[r])&&!D0(r,l)&&(i[r]=a[r])}function Zw({transformTemplate:i},a){return te.useMemo(()=>{const l=Sf();return vf(l,a,i),Object.assign({},l.vars,l.style)},[a])}function Jw(i,a){const l=i.style||{},r={};return Z0(r,l,i),Object.assign(r,Zw(i,a)),r}function $w(i,a){const l={},r=Jw(i,a);return i.drag&&i.dragListener!==!1&&(l.draggable=!1,r.userSelect=r.WebkitUserSelect=r.WebkitTouchCallout="none",r.touchAction=i.drag===!0?"none":`pan-${i.drag==="x"?"y":"x"}`),i.tabIndex===void 0&&(i.onTap||i.onTapStart||i.whileTap)&&(l.tabIndex=0),l.style=r,l}const J0=()=>({...Sf(),attrs:{}});function Ww(i,a,l,r){const u=te.useMemo(()=>{const f=J0();return M0(f,a,O0(r),i.transformTemplate,i.style),{...f.attrs,style:{...f.style}}},[a]);if(i.style){const f={};Z0(f,i.style,i),u.style={...f,...u.style}}return u}const Iw=["animate","circle","defs","desc","ellipse","g","image","line","filter","marker","mask","metadata","path","pattern","polygon","polyline","rect","stop","switch","symbol","svg","text","tspan","use","view"];function wf(i){return typeof i!="string"||i.includes("-")?!1:!!(Iw.indexOf(i)>-1||/[A-Z]/u.test(i))}function eT(i,a,l,{latestValues:r},u,f=!1,d){const y=(d??wf(i)?Ww:$w)(a,r,u,i),p=Xw(a,typeof i=="string",f),x=i!==te.Fragment?{...p,...y,ref:l}:{},{children:b}=a,w=te.useMemo(()=>ct(b)?b.get():b,[b]);return te.createElement(i,{...x,children:w})}function tT({scrapeMotionValuesFromProps:i,createRenderState:a},l,r,u){return{latestValues:nT(l,r,u,i),renderState:a()}}function nT(i,a,l,r){const u={},f=r(i,{});for(const w in f)u[w]=fr(f[w]);let{initial:d,animate:h}=i;const y=jr(i),p=v0(i);a&&p&&!y&&i.inherit!==!1&&(d===void 0&&(d=a.initial),h===void 0&&(h=a.animate));let x=l?l.initial===!1:!1;x=x||d===!1;const b=x?h:d;if(b&&typeof b!="boolean"&&!Nr(b)){const w=Array.isArray(b)?b:[b];for(let j=0;j(a,l)=>{const r=te.useContext(Er),u=te.useContext(Fc),f=()=>tT(i,a,r,u);return l?f():ab(f)},aT=$0({scrapeMotionValuesFromProps:bf,createRenderState:Sf}),iT=$0({scrapeMotionValuesFromProps:R0,createRenderState:J0}),sT=Symbol.for("motionComponentSymbol");function lT(i,a,l){const r=te.useRef(l);te.useInsertionEffect(()=>{r.current=l});const u=te.useRef(null);return te.useCallback(f=>{var h;f&&((h=i.onMount)==null||h.call(i,f));const d=r.current;if(typeof d=="function")if(f){const y=d(f);typeof y=="function"&&(u.current=y)}else u.current?(u.current(),u.current=null):d(f);else d&&(d.current=f);a&&(f?a.mount(f):a.unmount())},[a])}const W0=te.createContext({});function hi(i){return i&&typeof i=="object"&&Object.prototype.hasOwnProperty.call(i,"current")}function rT(i,a,l,r,u,f){var H,K;const{visualElement:d}=te.useContext(Er),h=te.useContext(X0),y=te.useContext(Fc),p=te.useContext(K0),x=p.reducedMotion,b=p.skipAnimations,w=te.useRef(null),j=te.useRef(!1);r=r||h.renderer,!w.current&&r&&(w.current=r(i,{visualState:a,parent:d,props:l,presenceContext:y,blockInitialAnimation:y?y.initial===!1:!1,reducedMotionConfig:x,skipAnimations:b,isSVG:f}),j.current&&w.current&&(w.current.manuallyAnimateOnMount=!0));const N=w.current,V=te.useContext(W0);N&&!N.projection&&u&&(N.type==="html"||N.type==="svg")&&oT(w.current,l,u,V);const B=te.useRef(!1);te.useInsertionEffect(()=>{N&&B.current&&N.update(l,y)});const q=l[l0],Y=te.useRef(!!q&&typeof window<"u"&&!((H=window.MotionHandoffIsComplete)!=null&&H.call(window,q))&&((K=window.MotionHasOptimisedAnimation)==null?void 0:K.call(window,q)));return sb(()=>{j.current=!0,N&&(B.current=!0,window.MotionIsMounted=!0,N.updateFeatures(),N.scheduleRenderMicrotask(),Y.current&&N.animationState&&N.animationState.animateChanges())}),te.useEffect(()=>{N&&(!Y.current&&N.animationState&&N.animationState.animateChanges(),Y.current&&(queueMicrotask(()=>{var X;(X=window.MotionHandoffMarkAsComplete)==null||X.call(window,q)}),Y.current=!1),N.enteringChildren=void 0)}),N}function oT(i,a,l,r){const{layoutId:u,layout:f,drag:d,dragConstraints:h,layoutScroll:y,layoutRoot:p,layoutCrossfade:x}=a;i.projection=new l(i.latestValues,a["data-framer-portal-id"]?void 0:I0(i.parent)),i.projection.setOptions({layoutId:u,layout:f,alwaysMeasureLayout:!!d||h&&hi(h),visualElement:i,animationType:typeof f=="string"?f:"both",initialPromotionConfig:r,crossfade:x,layoutScroll:y,layoutRoot:p})}function I0(i){if(i)return i.options.allowProjection!==!1?i.projection:I0(i.parent)}function fc(i,{forwardMotionProps:a=!1,type:l}={},r,u){r&&Yw(r);const f=l?l==="svg":wf(i),d=f?iT:aT;function h(p,x){let b;const w={...te.useContext(K0),...p,layoutId:uT(p)},{isStatic:j}=w,N=Qw(p),V=d(p,j);if(!j&&typeof window<"u"){cT();const B=fT(w);b=B.MeasureLayout,N.visualElement=rT(i,V,w,u,B.ProjectionNode,f)}return m.jsxs(Er.Provider,{value:N,children:[b&&N.visualElement?m.jsx(b,{visualElement:N.visualElement,...w}):null,eT(i,p,lT(V,N.visualElement,x),V,j,a,f)]})}h.displayName=`motion.${typeof i=="string"?i:`create(${i.displayName??i.name??""})`}`;const y=te.forwardRef(h);return y[sT]=i,y}function uT({layoutId:i}){const a=te.useContext(vy).id;return a&&i!==void 0?a+"-"+i:i}function cT(i,a){te.useContext(X0).strict}function fT(i){const a=F0(),{drag:l,layout:r}=a;if(!l&&!r)return{};const u={...l,...r};return{MeasureLayout:l!=null&&l.isEnabled(i)||r!=null&&r.isEnabled(i)?u.MeasureLayout:void 0,ProjectionNode:u.ProjectionNode}}function dT(i,a){if(typeof Proxy>"u")return fc;const l=new Map,r=(f,d)=>fc(f,d,i,a),u=(f,d)=>r(f,d);return new Proxy(u,{get:(f,d)=>d==="create"?r:(l.has(d)||l.set(d,fc(d,void 0,i,a)),l.get(d))})}const hT=(i,a)=>a.isSVG??wf(i)?new JS(a):new PS(a,{allowProjection:i!==te.Fragment});class mT extends ea{constructor(a){super(a),a.animationState||(a.animationState=tw(a))}updateAnimationControlsSubscription(){const{animate:a}=this.node.getProps();Nr(a)&&(this.unmountControls=a.subscribe(this.node))}mount(){this.updateAnimationControlsSubscription()}update(){const{animate:a}=this.node.getProps(),{animate:l}=this.node.prevProps||{};a!==l&&this.updateAnimationControlsSubscription()}unmount(){var a;this.node.animationState.reset(),(a=this.unmountControls)==null||a.call(this)}}let pT=0;class gT extends ea{constructor(){super(...arguments),this.id=pT++}update(){if(!this.node.presenceContext)return;const{isPresent:a,onExitComplete:l}=this.node.presenceContext,{isPresent:r}=this.node.prevPresenceContext||{};if(!this.node.animationState||a===r)return;const u=this.node.animationState.setActive("exit",!a);l&&!a&&u.then(()=>{l(this.id)})}mount(){const{register:a,onExitComplete:l}=this.node.presenceContext||{};l&&l(this.id),a&&(this.unmount=a(this.id))}unmount(){}}const yT={animation:{Feature:mT},exit:{Feature:gT}};function Us(i){return{point:{x:i.pageX,y:i.pageY}}}const xT=i=>a=>pf(a)&&i(a,Us(a));function js(i,a,l,r){return _s(i,a,xT(l),r)}const ex=({current:i})=>i?i.ownerDocument.defaultView:null,Gg=(i,a)=>Math.abs(i-a);function vT(i,a){const l=Gg(i.x,a.x),r=Gg(i.y,a.y);return Math.sqrt(l**2+r**2)}const Yg=new Set(["auto","scroll"]);class tx{constructor(a,l,{transformPagePoint:r,contextWindow:u=window,dragSnapToOrigin:f=!1,distanceThreshold:d=3,element:h}={}){if(this.startEvent=null,this.lastMoveEvent=null,this.lastMoveEventInfo=null,this.handlers={},this.contextWindow=window,this.scrollPositions=new Map,this.removeScrollListeners=null,this.onElementScroll=j=>{this.handleScroll(j.target)},this.onWindowScroll=()=>{this.handleScroll(window)},this.updatePoint=()=>{if(!(this.lastMoveEvent&&this.lastMoveEventInfo))return;const j=hc(this.lastMoveEventInfo,this.history),N=this.startEvent!==null,V=vT(j.offset,{x:0,y:0})>=this.distanceThreshold;if(!N&&!V)return;const{point:B}=j,{timestamp:q}=rt;this.history.push({...B,timestamp:q});const{onStart:Y,onMove:H}=this.handlers;N||(Y&&Y(this.lastMoveEvent,j),this.startEvent=this.lastMoveEvent),H&&H(this.lastMoveEvent,j)},this.handlePointerMove=(j,N)=>{this.lastMoveEvent=j,this.lastMoveEventInfo=dc(N,this.transformPagePoint),Ce.update(this.updatePoint,!0)},this.handlePointerUp=(j,N)=>{this.end();const{onEnd:V,onSessionEnd:B,resumeAnimation:q}=this.handlers;if((this.dragSnapToOrigin||!this.startEvent)&&q&&q(),!(this.lastMoveEvent&&this.lastMoveEventInfo))return;const Y=hc(j.type==="pointercancel"?this.lastMoveEventInfo:dc(N,this.transformPagePoint),this.history);this.startEvent&&V&&V(j,Y),B&&B(j,Y)},!pf(a))return;this.dragSnapToOrigin=f,this.handlers=l,this.transformPagePoint=r,this.distanceThreshold=d,this.contextWindow=u||window;const y=Us(a),p=dc(y,this.transformPagePoint),{point:x}=p,{timestamp:b}=rt;this.history=[{...x,timestamp:b}];const{onSessionStart:w}=l;w&&w(a,hc(p,this.history)),this.removeListeners=Ls(js(this.contextWindow,"pointermove",this.handlePointerMove),js(this.contextWindow,"pointerup",this.handlePointerUp),js(this.contextWindow,"pointercancel",this.handlePointerUp)),h&&this.startScrollTracking(h)}startScrollTracking(a){let l=a.parentElement;for(;l;){const r=getComputedStyle(l);(Yg.has(r.overflowX)||Yg.has(r.overflowY))&&this.scrollPositions.set(l,{x:l.scrollLeft,y:l.scrollTop}),l=l.parentElement}this.scrollPositions.set(window,{x:window.scrollX,y:window.scrollY}),window.addEventListener("scroll",this.onElementScroll,{capture:!0}),window.addEventListener("scroll",this.onWindowScroll),this.removeScrollListeners=()=>{window.removeEventListener("scroll",this.onElementScroll,{capture:!0}),window.removeEventListener("scroll",this.onWindowScroll)}}handleScroll(a){const l=this.scrollPositions.get(a);if(!l)return;const r=a===window,u=r?{x:window.scrollX,y:window.scrollY}:{x:a.scrollLeft,y:a.scrollTop},f={x:u.x-l.x,y:u.y-l.y};f.x===0&&f.y===0||(r?this.lastMoveEventInfo&&(this.lastMoveEventInfo.point.x+=f.x,this.lastMoveEventInfo.point.y+=f.y):this.history.length>0&&(this.history[0].x-=f.x,this.history[0].y-=f.y),this.scrollPositions.set(a,u),Ce.update(this.updatePoint,!0))}updateHandlers(a){this.handlers=a}end(){this.removeListeners&&this.removeListeners(),this.removeScrollListeners&&this.removeScrollListeners(),this.scrollPositions.clear(),In(this.updatePoint)}}function dc(i,a){return a?{point:a(i.point)}:i}function Pg(i,a){return{x:i.x-a.x,y:i.y-a.y}}function hc({point:i},a){return{point:i,delta:Pg(i,nx(a)),offset:Pg(i,bT(a)),velocity:ST(a,.1)}}function bT(i){return i[0]}function nx(i){return i[i.length-1]}function ST(i,a){if(i.length<2)return{x:0,y:0};let l=i.length-1,r=null;const u=nx(i);for(;l>=0&&(r=i[l],!(u.timestamp-r.timestamp>Zt(a)));)l--;if(!r)return{x:0,y:0};r===i[0]&&i.length>2&&u.timestamp-r.timestamp>Zt(a)*2&&(r=i[1]);const f=Gt(u.timestamp-r.timestamp);if(f===0)return{x:0,y:0};const d={x:(u.x-r.x)/f,y:(u.y-r.y)/f};return d.x===1/0&&(d.x=0),d.y===1/0&&(d.y=0),d}function wT(i,{min:a,max:l},r){return a!==void 0&&il&&(i=r?Le(l,i,r.max):Math.min(i,l)),i}function Kg(i,a,l){return{min:a!==void 0?i.min+a:void 0,max:l!==void 0?i.max+l-(i.max-i.min):void 0}}function TT(i,{top:a,left:l,bottom:r,right:u}){return{x:Kg(i.x,l,u),y:Kg(i.y,a,r)}}function Xg(i,a){let l=a.min-i.min,r=a.max-i.max;return a.max-a.minr?l=Ms(a.min,a.max-r,i.min):r>u&&(l=Ms(i.min,i.max-u,a.min)),sn(0,1,l)}function jT(i,a){const l={};return a.min!==void 0&&(l.min=a.min-i.min),a.max!==void 0&&(l.max=a.max-i.min),l}const qc=.35;function ET(i=qc){return i===!1?i=0:i===!0&&(i=qc),{x:Fg(i,"left","right"),y:Fg(i,"top","bottom")}}function Fg(i,a,l){return{min:Qg(i,a),max:Qg(i,l)}}function Qg(i,a){return typeof i=="number"?i:i[a]||0}const DT=new WeakMap;class MT{constructor(a){this.openDragLock=null,this.isDragging=!1,this.currentDirection=null,this.originPoint={x:0,y:0},this.constraints=!1,this.hasMutatedConstraints=!1,this.elastic=We(),this.latestPointerEvent=null,this.latestPanInfo=null,this.visualElement=a}start(a,{snapToCursor:l=!1,distanceThreshold:r}={}){const{presenceContext:u}=this.visualElement;if(u&&u.isPresent===!1)return;const f=b=>{l&&this.snapToCursor(Us(b).point),this.stopAnimation()},d=(b,w)=>{const{drag:j,dragPropagation:N,onDragStart:V}=this.getProps();if(j&&!N&&(this.openDragLock&&this.openDragLock(),this.openDragLock=uS(j),!this.openDragLock))return;this.latestPointerEvent=b,this.latestPanInfo=w,this.isDragging=!0,this.currentDirection=null,this.resolveConstraints(),this.visualElement.projection&&(this.visualElement.projection.isAnimationBlocked=!0,this.visualElement.projection.target=void 0),tn(q=>{let Y=this.getAxisMotionValue(q).get()||0;if(an.test(Y)){const{projection:H}=this.visualElement;if(H&&H.layout){const K=H.layout.layoutBox[q];K&&(Y=mt(K)*(parseFloat(Y)/100))}}this.originPoint[q]=Y}),V&&Ce.update(()=>V(b,w),!1,!0),_c(this.visualElement,"transform");const{animationState:B}=this.visualElement;B&&B.setActive("whileDrag",!0)},h=(b,w)=>{this.latestPointerEvent=b,this.latestPanInfo=w;const{dragPropagation:j,dragDirectionLock:N,onDirectionLock:V,onDrag:B}=this.getProps();if(!j&&!this.openDragLock)return;const{offset:q}=w;if(N&&this.currentDirection===null){this.currentDirection=OT(q),this.currentDirection!==null&&V&&V(this.currentDirection);return}this.updateAxis("x",w.point,q),this.updateAxis("y",w.point,q),this.visualElement.render(),B&&Ce.update(()=>B(b,w),!1,!0)},y=(b,w)=>{this.latestPointerEvent=b,this.latestPanInfo=w,this.stop(b,w),this.latestPointerEvent=null,this.latestPanInfo=null},p=()=>{const{dragSnapToOrigin:b}=this.getProps();(b||this.constraints)&&this.startAnimation({x:0,y:0})},{dragSnapToOrigin:x}=this.getProps();this.panSession=new tx(a,{onSessionStart:f,onStart:d,onMove:h,onSessionEnd:y,resumeAnimation:p},{transformPagePoint:this.visualElement.getTransformPagePoint(),dragSnapToOrigin:x,distanceThreshold:r,contextWindow:ex(this.visualElement),element:this.visualElement.current})}stop(a,l){const r=a||this.latestPointerEvent,u=l||this.latestPanInfo,f=this.isDragging;if(this.cancel(),!f||!u||!r)return;const{velocity:d}=u;this.startAnimation(d);const{onDragEnd:h}=this.getProps();h&&Ce.postRender(()=>h(r,u))}cancel(){this.isDragging=!1;const{projection:a,animationState:l}=this.visualElement;a&&(a.isAnimationBlocked=!1),this.endPanSession();const{dragPropagation:r}=this.getProps();!r&&this.openDragLock&&(this.openDragLock(),this.openDragLock=null),l&&l.setActive("whileDrag",!1)}endPanSession(){this.panSession&&this.panSession.end(),this.panSession=void 0}updateAxis(a,l,r){const{drag:u}=this.getProps();if(!r||!sr(a,u,this.currentDirection))return;const f=this.getAxisMotionValue(a);let d=this.originPoint[a]+r[a];this.constraints&&this.constraints[a]&&(d=wT(d,this.constraints[a],this.elastic[a])),f.set(d)}resolveConstraints(){var f;const{dragConstraints:a,dragElastic:l}=this.getProps(),r=this.visualElement.projection&&!this.visualElement.projection.layout?this.visualElement.projection.measure(!1):(f=this.visualElement.projection)==null?void 0:f.layout,u=this.constraints;a&&hi(a)?this.constraints||(this.constraints=this.resolveRefConstraints()):a&&r?this.constraints=TT(r.layoutBox,a):this.constraints=!1,this.elastic=ET(l),u!==this.constraints&&!hi(a)&&r&&this.constraints&&!this.hasMutatedConstraints&&tn(d=>{this.constraints!==!1&&this.getAxisMotionValue(d)&&(this.constraints[d]=jT(r.layoutBox[d],this.constraints[d]))})}resolveRefConstraints(){const{dragConstraints:a,onMeasureDragConstraints:l}=this.getProps();if(!a||!hi(a))return!1;const r=a.current,{projection:u}=this.visualElement;if(!u||!u.layout)return!1;const f=US(r,u.root,this.visualElement.getTransformPagePoint());let d=AT(u.layout.layoutBox,f);if(l){const h=l(LS(d));this.hasMutatedConstraints=!!h,h&&(d=T0(h))}return d}startAnimation(a){const{drag:l,dragMomentum:r,dragElastic:u,dragTransition:f,dragSnapToOrigin:d,onDragTransitionEnd:h}=this.getProps(),y=this.constraints||{},p=tn(x=>{if(!sr(x,l,this.currentDirection))return;let b=y&&y[x]||{};d&&(b={min:0,max:0});const w=u?200:1e6,j=u?40:1e7,N={type:"inertia",velocity:r?a[x]:0,bounceStiffness:w,bounceDamping:j,timeConstant:750,restDelta:1,restSpeed:10,...f,...b};return this.startAxisValueAnimation(x,N)});return Promise.all(p).then(h)}startAxisValueAnimation(a,l){const r=this.getAxisMotionValue(a);return _c(this.visualElement,a),r.start(cf(a,r,0,l,this.visualElement,!1))}stopAnimation(){tn(a=>this.getAxisMotionValue(a).stop())}getAxisMotionValue(a){const l=`_drag${a.toUpperCase()}`,r=this.visualElement.getProps(),u=r[l];return u||this.visualElement.getValue(a,(r.initial?r.initial[a]:void 0)||0)}snapToCursor(a){tn(l=>{const{drag:r}=this.getProps();if(!sr(l,r,this.currentDirection))return;const{projection:u}=this.visualElement,f=this.getAxisMotionValue(l);if(u&&u.layout){const{min:d,max:h}=u.layout.layoutBox[l],y=f.get()||0;f.set(a[l]-Le(d,h,.5)+y)}})}scalePositionWithinConstraints(){if(!this.visualElement.current)return;const{drag:a,dragConstraints:l}=this.getProps(),{projection:r}=this.visualElement;if(!hi(l)||!r||!this.constraints)return;this.stopAnimation();const u={x:0,y:0};tn(d=>{const h=this.getAxisMotionValue(d);if(h&&this.constraints!==!1){const y=h.get();u[d]=NT({min:y,max:y},this.constraints[d])}});const{transformTemplate:f}=this.visualElement.getProps();this.visualElement.current.style.transform=f?f({},""):"none",r.root&&r.root.updateScroll(),r.updateLayout(),this.constraints=!1,this.resolveConstraints(),tn(d=>{if(!sr(d,a,null))return;const h=this.getAxisMotionValue(d),{min:y,max:p}=this.constraints[d];h.set(Le(y,p,u[d]))}),this.visualElement.render()}addListeners(){if(!this.visualElement.current)return;DT.set(this.visualElement,this);const a=this.visualElement.current,l=js(a,"pointerdown",p=>{const{drag:x,dragListener:b=!0}=this.getProps(),w=p.target,j=w!==a&&pS(w);x&&b&&!j&&this.start(p)});let r;const u=()=>{const{dragConstraints:p}=this.getProps();hi(p)&&p.current&&(this.constraints=this.resolveRefConstraints(),r||(r=CT(a,p.current,()=>this.scalePositionWithinConstraints())))},{projection:f}=this.visualElement,d=f.addEventListener("measure",u);f&&!f.layout&&(f.root&&f.root.updateScroll(),f.updateLayout()),Ce.read(u);const h=_s(window,"resize",()=>this.scalePositionWithinConstraints()),y=f.addEventListener("didUpdate",(({delta:p,hasLayoutChanged:x})=>{this.isDragging&&x&&(tn(b=>{const w=this.getAxisMotionValue(b);w&&(this.originPoint[b]+=p[b].translate,w.set(w.get()+p[b].translate))}),this.visualElement.render())}));return()=>{h(),l(),d(),y&&y(),r&&r()}}getProps(){const a=this.visualElement.getProps(),{drag:l=!1,dragDirectionLock:r=!1,dragPropagation:u=!1,dragConstraints:f=!1,dragElastic:d=qc,dragMomentum:h=!0}=a;return{...a,drag:l,dragDirectionLock:r,dragPropagation:u,dragConstraints:f,dragElastic:d,dragMomentum:h}}}function Zg(i){let a=!0;return()=>{if(a){a=!1;return}i()}}function CT(i,a,l){const r=ag(i,Zg(l)),u=ag(a,Zg(l));return()=>{r(),u()}}function sr(i,a,l){return(a===!0||a===i)&&(l===null||l===i)}function OT(i,a=10){let l=null;return Math.abs(i.y)>a?l="y":Math.abs(i.x)>a&&(l="x"),l}class RT extends ea{constructor(a){super(a),this.removeGroupControls=Yt,this.removeListeners=Yt,this.controls=new MT(a)}mount(){const{dragControls:a}=this.node.getProps();a&&(this.removeGroupControls=a.subscribe(this.controls)),this.removeListeners=this.controls.addListeners()||Yt}update(){const{dragControls:a}=this.node.getProps(),{dragControls:l}=this.node.prevProps||{};a!==l&&(this.removeGroupControls(),a&&(this.removeGroupControls=a.subscribe(this.controls)))}unmount(){this.removeGroupControls(),this.removeListeners(),this.controls.isDragging||this.controls.endPanSession()}}const mc=i=>(a,l)=>{i&&Ce.update(()=>i(a,l),!1,!0)};class _T extends ea{constructor(){super(...arguments),this.removePointerDownListener=Yt}onPointerDown(a){this.session=new tx(a,this.createPanHandlers(),{transformPagePoint:this.node.getTransformPagePoint(),contextWindow:ex(this.node)})}createPanHandlers(){const{onPanSessionStart:a,onPanStart:l,onPan:r,onPanEnd:u}=this.node.getProps();return{onSessionStart:mc(a),onStart:mc(l),onMove:mc(r),onEnd:(f,d)=>{delete this.session,u&&Ce.postRender(()=>u(f,d))}}}mount(){this.removePointerDownListener=js(this.node.current,"pointerdown",a=>this.onPointerDown(a))}update(){this.session&&this.session.updateHandlers(this.createPanHandlers())}unmount(){this.removePointerDownListener(),this.session&&this.session.end()}}let pc=!1;class zT extends te.Component{componentDidMount(){const{visualElement:a,layoutGroup:l,switchLayoutGroup:r,layoutId:u}=this.props,{projection:f}=a;f&&(l.group&&l.group.add(f),r&&r.register&&u&&r.register(f),pc&&f.root.didUpdate(),f.addEventListener("animationComplete",()=>{this.safeToRemove()}),f.setOptions({...f.options,layoutDependency:this.props.layoutDependency,onExitComplete:()=>this.safeToRemove()})),dr.hasEverUpdated=!0}getSnapshotBeforeUpdate(a){const{layoutDependency:l,visualElement:r,drag:u,isPresent:f}=this.props,{projection:d}=r;return d&&(d.isPresent=f,a.layoutDependency!==l&&d.setOptions({...d.options,layoutDependency:l}),pc=!0,u||a.layoutDependency!==l||l===void 0||a.isPresent!==f?d.willUpdate():this.safeToRemove(),a.isPresent!==f&&(f?d.promote():d.relegate()||Ce.postRender(()=>{const h=d.getStack();(!h||!h.members.length)&&this.safeToRemove()}))),null}componentDidUpdate(){const{projection:a}=this.props.visualElement;a&&(a.root.didUpdate(),mf.postRender(()=>{!a.currentAnimation&&a.isLead()&&this.safeToRemove()}))}componentWillUnmount(){const{visualElement:a,layoutGroup:l,switchLayoutGroup:r}=this.props,{projection:u}=a;pc=!0,u&&(u.scheduleCheckAfterUnmount(),l&&l.group&&l.group.remove(u),r&&r.deregister&&r.deregister(u))}safeToRemove(){const{safeToRemove:a}=this.props;a&&a()}render(){return null}}function ax(i){const[a,l]=qw(),r=te.useContext(vy);return m.jsx(zT,{...i,layoutGroup:r,switchLayoutGroup:te.useContext(W0),isPresent:a,safeToRemove:l})}const LT={pan:{Feature:_T},drag:{Feature:RT,ProjectionNode:P0,MeasureLayout:ax}};function Jg(i,a,l){const{props:r}=i;i.animationState&&r.whileHover&&i.animationState.setActive("whileHover",l==="Start");const u="onHover"+l,f=r[u];f&&Ce.postRender(()=>f(a,Us(a)))}class VT extends ea{mount(){const{current:a}=this.node;a&&(this.unmount=fS(a,(l,r)=>(Jg(this.node,r,"Start"),u=>Jg(this.node,u,"End"))))}unmount(){}}class kT extends ea{constructor(){super(...arguments),this.isActive=!1}onFocus(){let a=!1;try{a=this.node.current.matches(":focus-visible")}catch{a=!0}!a||!this.node.animationState||(this.node.animationState.setActive("whileFocus",!0),this.isActive=!0)}onBlur(){!this.isActive||!this.node.animationState||(this.node.animationState.setActive("whileFocus",!1),this.isActive=!1)}mount(){this.unmount=Ls(_s(this.node.current,"focus",()=>this.onFocus()),_s(this.node.current,"blur",()=>this.onBlur()))}unmount(){}}function $g(i,a,l){const{props:r}=i;if(i.current instanceof HTMLButtonElement&&i.current.disabled)return;i.animationState&&r.whileTap&&i.animationState.setActive("whileTap",l==="Start");const u="onTap"+(l==="End"?"":l),f=r[u];f&&Ce.postRender(()=>f(a,Us(a)))}class UT extends ea{mount(){const{current:a}=this.node;if(!a)return;const{globalTapTarget:l,propagate:r}=this.node.props;this.unmount=yS(a,(u,f)=>($g(this.node,f,"Start"),(d,{success:h})=>$g(this.node,d,h?"End":"Cancel")),{useGlobalTarget:l,stopPropagation:(r==null?void 0:r.tap)===!1})}unmount(){}}const Gc=new WeakMap,gc=new WeakMap,BT=i=>{const a=Gc.get(i.target);a&&a(i)},HT=i=>{i.forEach(BT)};function qT({root:i,...a}){const l=i||document;gc.has(l)||gc.set(l,{});const r=gc.get(l),u=JSON.stringify(a);return r[u]||(r[u]=new IntersectionObserver(HT,{root:i,...a})),r[u]}function GT(i,a,l){const r=qT(a);return Gc.set(i,l),r.observe(i),()=>{Gc.delete(i),r.unobserve(i)}}const YT={some:0,all:1};class PT extends ea{constructor(){super(...arguments),this.hasEnteredView=!1,this.isInView=!1}startObserver(){this.unmount();const{viewport:a={}}=this.node.getProps(),{root:l,margin:r,amount:u="some",once:f}=a,d={root:l?l.current:void 0,rootMargin:r,threshold:typeof u=="number"?u:YT[u]},h=y=>{const{isIntersecting:p}=y;if(this.isInView===p||(this.isInView=p,f&&!p&&this.hasEnteredView))return;p&&(this.hasEnteredView=!0),this.node.animationState&&this.node.animationState.setActive("whileInView",p);const{onViewportEnter:x,onViewportLeave:b}=this.node.getProps(),w=p?x:b;w&&w(y)};return GT(this.node.current,d,h)}mount(){this.startObserver()}update(){if(typeof IntersectionObserver>"u")return;const{props:a,prevProps:l}=this.node;["amount","margin","root"].some(KT(a,l))&&this.startObserver()}unmount(){}}function KT({viewport:i={}},{viewport:a={}}={}){return l=>i[l]!==a[l]}const XT={inView:{Feature:PT},tap:{Feature:UT},focus:{Feature:kT},hover:{Feature:VT}},FT={layout:{ProjectionNode:P0,MeasureLayout:ax}},QT={...yT,...XT,...LT,...FT},vi=dT(QT,hT);/** + * @license lucide-react v0.546.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ZT=i=>i.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),JT=i=>i.replace(/^([A-Z])|[\s-_]+(\w)/g,(a,l,r)=>r?r.toUpperCase():l.toLowerCase()),Wg=i=>{const a=JT(i);return a.charAt(0).toUpperCase()+a.slice(1)},ix=(...i)=>i.filter((a,l,r)=>!!a&&a.trim()!==""&&r.indexOf(a)===l).join(" ").trim(),$T=i=>{for(const a in i)if(a.startsWith("aria-")||a==="role"||a==="title")return!0};/** + * @license lucide-react v0.546.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */var WT={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/** + * @license lucide-react v0.546.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const IT=te.forwardRef(({color:i="currentColor",size:a=24,strokeWidth:l=2,absoluteStrokeWidth:r,className:u="",children:f,iconNode:d,...h},y)=>te.createElement("svg",{ref:y,...WT,width:a,height:a,stroke:i,strokeWidth:r?Number(l)*24/Number(a):l,className:ix("lucide",u),...!f&&!$T(h)&&{"aria-hidden":"true"},...h},[...d.map(([p,x])=>te.createElement(p,x)),...Array.isArray(f)?f:[f]]));/** + * @license lucide-react v0.546.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ve=(i,a)=>{const l=te.forwardRef(({className:r,...u},f)=>te.createElement(IT,{ref:f,iconNode:a,className:ix(`lucide-${ZT(Wg(i))}`,`lucide-${i}`,r),...u}));return l.displayName=Wg(i),l};/** + * @license lucide-react v0.546.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const eA=[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]],tA=ve("activity",eA);/** + * @license lucide-react v0.546.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const nA=[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]],ja=ve("arrow-right",nA);/** + * @license lucide-react v0.546.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const aA=[["path",{d:"M10 12h4",key:"a56b0p"}],["path",{d:"M10 8h4",key:"1sr2af"}],["path",{d:"M14 21v-3a2 2 0 0 0-4 0v3",key:"1rgiei"}],["path",{d:"M6 10H4a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-2",key:"secmi2"}],["path",{d:"M6 21V5a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v16",key:"16ra0t"}]],iA=ve("building-2",aA);/** + * @license lucide-react v0.546.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const sA=[["path",{d:"M3 3v16a2 2 0 0 0 2 2h16",key:"c24i48"}],["path",{d:"M18 17V9",key:"2bz60n"}],["path",{d:"M13 17V5",key:"1frdt8"}],["path",{d:"M8 17v-3",key:"17ska0"}]],Tf=ve("chart-column",sA);/** + * @license lucide-react v0.546.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const lA=[["path",{d:"M3 3v16a2 2 0 0 0 2 2h16",key:"c24i48"}],["path",{d:"m19 9-5 5-4-4-3 3",key:"2osh9i"}]],rA=ve("chart-line",lA);/** + * @license lucide-react v0.546.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const oA=[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]],Yc=ve("check",oA);/** + * @license lucide-react v0.546.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const uA=[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]],cA=ve("chevron-down",uA);/** + * @license lucide-react v0.546.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const fA=[["path",{d:"M12 6v6l4 2",key:"mmk7yg"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]],dA=ve("clock",fA);/** + * @license lucide-react v0.546.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const hA=[["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M17 20v2",key:"1rnc9c"}],["path",{d:"M17 2v2",key:"11trls"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M2 17h2",key:"7oei6x"}],["path",{d:"M2 7h2",key:"asdhe0"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"M20 17h2",key:"1fpfkl"}],["path",{d:"M20 7h2",key:"1o8tra"}],["path",{d:"M7 20v2",key:"4gnj0m"}],["path",{d:"M7 2v2",key:"1i4yhu"}],["rect",{x:"4",y:"4",width:"16",height:"16",rx:"2",key:"1vbyd7"}],["rect",{x:"8",y:"8",width:"8",height:"8",rx:"1",key:"z9xiuo"}]],sx=ve("cpu",hA);/** + * @license lucide-react v0.546.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const mA=[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5",key:"1wlel7"}],["path",{d:"M3 12A9 3 0 0 0 21 12",key:"mv7ke4"}]],pA=ve("database",mA);/** + * @license lucide-react v0.546.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const gA=[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]],lx=ve("external-link",gA);/** + * @license lucide-react v0.546.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const yA=[["path",{d:"M14 13h2a2 2 0 0 1 2 2v2a2 2 0 0 0 4 0v-6.998a2 2 0 0 0-.59-1.42L18 5",key:"1wtuz0"}],["path",{d:"M14 21V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v16",key:"e09ifn"}],["path",{d:"M2 21h13",key:"1x0fut"}],["path",{d:"M3 9h11",key:"1p7c0w"}]],xA=ve("fuel",yA);/** + * @license lucide-react v0.546.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const vA=[["path",{d:"M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z",key:"sc7q7i"}]],bA=ve("funnel",vA);/** + * @license lucide-react v0.546.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const SA=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20",key:"13o1zl"}],["path",{d:"M2 12h20",key:"9i4pu4"}]],Sr=ve("globe",SA);/** + * @license lucide-react v0.546.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const wA=[["path",{d:"m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4",key:"g0fldk"}],["path",{d:"m21 2-9.6 9.6",key:"1j0ho8"}],["circle",{cx:"7.5",cy:"15.5",r:"5.5",key:"yqb3hr"}]],TA=ve("key",wA);/** + * @license lucide-react v0.546.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const AA=[["path",{d:"M10 18v-7",key:"wt116b"}],["path",{d:"M11.12 2.198a2 2 0 0 1 1.76.006l7.866 3.847c.476.233.31.949-.22.949H3.474c-.53 0-.695-.716-.22-.949z",key:"1m329m"}],["path",{d:"M14 18v-7",key:"vav6t3"}],["path",{d:"M18 18v-7",key:"aexdmj"}],["path",{d:"M3 22h18",key:"8prr45"}],["path",{d:"M6 18v-7",key:"1ivflk"}]],NA=ve("landmark",AA);/** + * @license lucide-react v0.546.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const jA=[["path",{d:"M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z",key:"zw3jo"}],["path",{d:"M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12",key:"1wduqc"}],["path",{d:"M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17",key:"kqbvx6"}]],rx=ve("layers",jA);/** + * @license lucide-react v0.546.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const EA=[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2",key:"1w4ew1"}],["path",{d:"M7 11V7a5 5 0 0 1 10 0v4",key:"fwvmzm"}]],DA=ve("lock",EA);/** + * @license lucide-react v0.546.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const MA=[["path",{d:"m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7",key:"132q7q"}],["rect",{x:"2",y:"4",width:"20",height:"16",rx:"2",key:"izxlao"}]],CA=ve("mail",MA);/** + * @license lucide-react v0.546.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const OA=[["path",{d:"M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719",key:"1sd12s"}]],RA=ve("message-circle",OA);/** + * @license lucide-react v0.546.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const _A=[["path",{d:"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z",key:"18887p"}]],zA=ve("message-square",_A);/** + * @license lucide-react v0.546.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const LA=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M3 9h18",key:"1pudct"}]],ox=ve("panel-top",LA);/** + * @license lucide-react v0.546.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const VA=[["path",{d:"M12 22v-5",key:"1ega77"}],["path",{d:"M9 8V2",key:"14iosj"}],["path",{d:"M15 8V2",key:"18g5xt"}],["path",{d:"M18 8v5a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V8Z",key:"osxo6l"}]],ux=ve("plug",VA);/** + * @license lucide-react v0.546.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const kA=[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]],UA=ve("search",kA);/** + * @license lucide-react v0.546.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const BA=[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",key:"1ffxy3"}],["path",{d:"m21.854 2.147-10.94 10.939",key:"12cjpa"}]],HA=ve("send",BA);/** + * @license lucide-react v0.546.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const qA=[["rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2",key:"ngkwjq"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2",key:"iecqi9"}],["line",{x1:"6",x2:"6.01",y1:"6",y2:"6",key:"16zg32"}],["line",{x1:"6",x2:"6.01",y1:"18",y2:"18",key:"nzw8ys"}]],GA=ve("server",qA);/** + * @license lucide-react v0.546.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const YA=[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"M12 8v4",key:"1got3b"}],["path",{d:"M12 16h.01",key:"1drbdi"}]],Af=ve("shield-alert",YA);/** + * @license lucide-react v0.546.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const PA=[["path",{d:"M10 5H3",key:"1qgfaw"}],["path",{d:"M12 19H3",key:"yhmn1j"}],["path",{d:"M14 3v4",key:"1sua03"}],["path",{d:"M16 17v4",key:"1q0r14"}],["path",{d:"M21 12h-9",key:"1o4lsq"}],["path",{d:"M21 19h-5",key:"1rlt1p"}],["path",{d:"M21 5h-7",key:"1oszz2"}],["path",{d:"M8 10v4",key:"tgpxqk"}],["path",{d:"M8 12H3",key:"a7s4jb"}]],KA=ve("sliders-horizontal",PA);/** + * @license lucide-react v0.546.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const XA=[["path",{d:"m10.065 12.493-6.18 1.318a.934.934 0 0 1-1.108-.702l-.537-2.15a1.07 1.07 0 0 1 .691-1.265l13.504-4.44",key:"k4qptu"}],["path",{d:"m13.56 11.747 4.332-.924",key:"19l80z"}],["path",{d:"m16 21-3.105-6.21",key:"7oh9d"}],["path",{d:"M16.485 5.94a2 2 0 0 1 1.455-2.425l1.09-.272a1 1 0 0 1 1.212.727l1.515 6.06a1 1 0 0 1-.727 1.213l-1.09.272a2 2 0 0 1-2.425-1.455z",key:"m7xp4m"}],["path",{d:"m6.158 8.633 1.114 4.456",key:"74o979"}],["path",{d:"m8 21 3.105-6.21",key:"1fvxut"}],["circle",{cx:"12",cy:"13",r:"2",key:"1c1ljs"}]],cx=ve("telescope",XA);/** + * @license lucide-react v0.546.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const FA=[["path",{d:"M12 19h8",key:"baeox8"}],["path",{d:"m4 17 6-6-6-6",key:"1yngyt"}]],QA=ve("terminal",FA);/** + * @license lucide-react v0.546.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ZA=[["path",{d:"M16 7h6v6",key:"box55l"}],["path",{d:"m22 7-8.5 8.5-5-5L2 17",key:"1t1m79"}]],fx=ve("trending-up",ZA);/** + * @license lucide-react v0.546.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const JA=[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["path",{d:"M16 3.128a4 4 0 0 1 0 7.744",key:"16gr8j"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}]],$A=ve("users",JA);/** + * @license lucide-react v0.546.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const WA=[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]],IA=ve("zap",WA),e5="modulepreload",t5=function(i){return"/pro/"+i},Ig={},Ze=function(a,l,r){let u=Promise.resolve();if(l&&l.length>0){let d=function(p){return Promise.all(p.map(x=>Promise.resolve(x).then(b=>({status:"fulfilled",value:b}),b=>({status:"rejected",reason:b}))))};document.getElementsByTagName("link");const h=document.querySelector("meta[property=csp-nonce]"),y=(h==null?void 0:h.nonce)||(h==null?void 0:h.getAttribute("nonce"));u=d(l.map(p=>{if(p=t5(p),p in Ig)return;Ig[p]=!0;const x=p.endsWith(".css"),b=x?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${p}"]${b}`))return;const w=document.createElement("link");if(w.rel=x?"stylesheet":e5,x||(w.as="script"),w.crossOrigin="",w.href=p,y&&w.setAttribute("nonce",y),document.head.appendChild(w),x)return new Promise((j,N)=>{w.addEventListener("load",j),w.addEventListener("error",()=>N(new Error(`Unable to preload CSS for ${p}`)))})}))}function f(d){const h=new Event("vite:preloadError",{cancelable:!0});if(h.payload=d,window.dispatchEvent(h),!h.defaultPrevented)throw d}return u.then(d=>{for(const h of d||[])h.status==="rejected"&&f(h.reason);return a().catch(f)})},se=i=>typeof i=="string",Ss=()=>{let i,a;const l=new Promise((r,u)=>{i=r,a=u});return l.resolve=i,l.reject=a,l},ey=i=>i==null?"":""+i,n5=(i,a,l)=>{i.forEach(r=>{a[r]&&(l[r]=a[r])})},a5=/###/g,ty=i=>i&&i.indexOf("###")>-1?i.replace(a5,"."):i,ny=i=>!i||se(i),Es=(i,a,l)=>{const r=se(a)?a.split("."):a;let u=0;for(;u{const{obj:r,k:u}=Es(i,a,Object);if(r!==void 0||a.length===1){r[u]=l;return}let f=a[a.length-1],d=a.slice(0,a.length-1),h=Es(i,d,Object);for(;h.obj===void 0&&d.length;)f=`${d[d.length-1]}.${f}`,d=d.slice(0,d.length-1),h=Es(i,d,Object),h!=null&&h.obj&&typeof h.obj[`${h.k}.${f}`]<"u"&&(h.obj=void 0);h.obj[`${h.k}.${f}`]=l},i5=(i,a,l,r)=>{const{obj:u,k:f}=Es(i,a,Object);u[f]=u[f]||[],u[f].push(l)},wr=(i,a)=>{const{obj:l,k:r}=Es(i,a);if(l&&Object.prototype.hasOwnProperty.call(l,r))return l[r]},s5=(i,a,l)=>{const r=wr(i,l);return r!==void 0?r:wr(a,l)},dx=(i,a,l)=>{for(const r in a)r!=="__proto__"&&r!=="constructor"&&(r in i?se(i[r])||i[r]instanceof String||se(a[r])||a[r]instanceof String?l&&(i[r]=a[r]):dx(i[r],a[r],l):i[r]=a[r]);return i},Sa=i=>i.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&");var l5={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};const r5=i=>se(i)?i.replace(/[&<>"'\/]/g,a=>l5[a]):i;class o5{constructor(a){this.capacity=a,this.regExpMap=new Map,this.regExpQueue=[]}getRegExp(a){const l=this.regExpMap.get(a);if(l!==void 0)return l;const r=new RegExp(a);return this.regExpQueue.length===this.capacity&&this.regExpMap.delete(this.regExpQueue.shift()),this.regExpMap.set(a,r),this.regExpQueue.push(a),r}}const u5=[" ",",","?","!",";"],c5=new o5(20),f5=(i,a,l)=>{a=a||"",l=l||"";const r=u5.filter(d=>a.indexOf(d)<0&&l.indexOf(d)<0);if(r.length===0)return!0;const u=c5.getRegExp(`(${r.map(d=>d==="?"?"\\?":d).join("|")})`);let f=!u.test(i);if(!f){const d=i.indexOf(l);d>0&&!u.test(i.substring(0,d))&&(f=!0)}return f},Pc=(i,a,l=".")=>{if(!i)return;if(i[a])return Object.prototype.hasOwnProperty.call(i,a)?i[a]:void 0;const r=a.split(l);let u=i;for(let f=0;f-1&&yi==null?void 0:i.replace(/_/g,"-"),d5={type:"logger",log(i){this.output("log",i)},warn(i){this.output("warn",i)},error(i){this.output("error",i)},output(i,a){var l,r;(r=(l=console==null?void 0:console[i])==null?void 0:l.apply)==null||r.call(l,console,a)}};class Tr{constructor(a,l={}){this.init(a,l)}init(a,l={}){this.prefix=l.prefix||"i18next:",this.logger=a||d5,this.options=l,this.debug=l.debug}log(...a){return this.forward(a,"log","",!0)}warn(...a){return this.forward(a,"warn","",!0)}error(...a){return this.forward(a,"error","")}deprecate(...a){return this.forward(a,"warn","WARNING DEPRECATED: ",!0)}forward(a,l,r,u){return u&&!this.debug?null:(se(a[0])&&(a[0]=`${r}${this.prefix} ${a[0]}`),this.logger[l](a))}create(a){return new Tr(this.logger,{prefix:`${this.prefix}:${a}:`,...this.options})}clone(a){return a=a||this.options,a.prefix=a.prefix||this.prefix,new Tr(this.logger,a)}}var nn=new Tr;class Dr{constructor(){this.observers={}}on(a,l){return a.split(" ").forEach(r=>{this.observers[r]||(this.observers[r]=new Map);const u=this.observers[r].get(l)||0;this.observers[r].set(l,u+1)}),this}off(a,l){if(this.observers[a]){if(!l){delete this.observers[a];return}this.observers[a].delete(l)}}emit(a,...l){this.observers[a]&&Array.from(this.observers[a].entries()).forEach(([u,f])=>{for(let d=0;d{for(let d=0;d-1&&this.options.ns.splice(l,1)}getResource(a,l,r,u={}){var p,x;const f=u.keySeparator!==void 0?u.keySeparator:this.options.keySeparator,d=u.ignoreJSONStructure!==void 0?u.ignoreJSONStructure:this.options.ignoreJSONStructure;let h;a.indexOf(".")>-1?h=a.split("."):(h=[a,l],r&&(Array.isArray(r)?h.push(...r):se(r)&&f?h.push(...r.split(f)):h.push(r)));const y=wr(this.data,h);return!y&&!l&&!r&&a.indexOf(".")>-1&&(a=h[0],l=h[1],r=h.slice(2).join(".")),y||!d||!se(r)?y:Pc((x=(p=this.data)==null?void 0:p[a])==null?void 0:x[l],r,f)}addResource(a,l,r,u,f={silent:!1}){const d=f.keySeparator!==void 0?f.keySeparator:this.options.keySeparator;let h=[a,l];r&&(h=h.concat(d?r.split(d):r)),a.indexOf(".")>-1&&(h=a.split("."),u=l,l=h[1]),this.addNamespaces(l),ay(this.data,h,u),f.silent||this.emit("added",a,l,r,u)}addResources(a,l,r,u={silent:!1}){for(const f in r)(se(r[f])||Array.isArray(r[f]))&&this.addResource(a,l,f,r[f],{silent:!0});u.silent||this.emit("added",a,l,r)}addResourceBundle(a,l,r,u,f,d={silent:!1,skipCopy:!1}){let h=[a,l];a.indexOf(".")>-1&&(h=a.split("."),u=r,r=l,l=h[1]),this.addNamespaces(l);let y=wr(this.data,h)||{};d.skipCopy||(r=JSON.parse(JSON.stringify(r))),u?dx(y,r,f):y={...y,...r},ay(this.data,h,y),d.silent||this.emit("added",a,l,r)}removeResourceBundle(a,l){this.hasResourceBundle(a,l)&&delete this.data[a][l],this.removeNamespaces(l),this.emit("removed",a,l)}hasResourceBundle(a,l){return this.getResource(a,l)!==void 0}getResourceBundle(a,l){return l||(l=this.options.defaultNS),this.getResource(a,l)}getDataByLanguage(a){return this.data[a]}hasLanguageSomeTranslations(a){const l=this.getDataByLanguage(a);return!!(l&&Object.keys(l)||[]).find(u=>l[u]&&Object.keys(l[u]).length>0)}toJSON(){return this.data}}var hx={processors:{},addPostProcessor(i){this.processors[i.name]=i},handle(i,a,l,r,u){return i.forEach(f=>{var d;a=((d=this.processors[f])==null?void 0:d.process(a,l,r,u))??a}),a}};const mx=Symbol("i18next/PATH_KEY");function h5(){const i=[],a=Object.create(null);let l;return a.get=(r,u)=>{var f;return(f=l==null?void 0:l.revoke)==null||f.call(l),u===mx?i:(i.push(u),l=Proxy.revocable(r,a),l.proxy)},Proxy.revocable(Object.create(null),a).proxy}function Kc(i,a){const{[mx]:l}=i(h5());return l.join((a==null?void 0:a.keySeparator)??".")}const sy={},yc=i=>!se(i)&&typeof i!="boolean"&&typeof i!="number";class Ar extends Dr{constructor(a,l={}){super(),n5(["resourceStore","languageUtils","pluralResolver","interpolator","backendConnector","i18nFormat","utils"],a,this),this.options=l,this.options.keySeparator===void 0&&(this.options.keySeparator="."),this.logger=nn.create("translator")}changeLanguage(a){a&&(this.language=a)}exists(a,l={interpolation:{}}){const r={...l};if(a==null)return!1;const u=this.resolve(a,r);if((u==null?void 0:u.res)===void 0)return!1;const f=yc(u.res);return!(r.returnObjects===!1&&f)}extractFromKey(a,l){let r=l.nsSeparator!==void 0?l.nsSeparator:this.options.nsSeparator;r===void 0&&(r=":");const u=l.keySeparator!==void 0?l.keySeparator:this.options.keySeparator;let f=l.ns||this.options.defaultNS||[];const d=r&&a.indexOf(r)>-1,h=!this.options.userDefinedKeySeparator&&!l.keySeparator&&!this.options.userDefinedNsSeparator&&!l.nsSeparator&&!f5(a,r,u);if(d&&!h){const y=a.match(this.interpolator.nestingRegexp);if(y&&y.length>0)return{key:a,namespaces:se(f)?[f]:f};const p=a.split(r);(r!==u||r===u&&this.options.ns.indexOf(p[0])>-1)&&(f=p.shift()),a=p.join(u)}return{key:a,namespaces:se(f)?[f]:f}}translate(a,l,r){let u=typeof l=="object"?{...l}:l;if(typeof u!="object"&&this.options.overloadTranslationOptionHandler&&(u=this.options.overloadTranslationOptionHandler(arguments)),typeof u=="object"&&(u={...u}),u||(u={}),a==null)return"";typeof a=="function"&&(a=Kc(a,{...this.options,...u})),Array.isArray(a)||(a=[String(a)]);const f=u.returnDetails!==void 0?u.returnDetails:this.options.returnDetails,d=u.keySeparator!==void 0?u.keySeparator:this.options.keySeparator,{key:h,namespaces:y}=this.extractFromKey(a[a.length-1],u),p=y[y.length-1];let x=u.nsSeparator!==void 0?u.nsSeparator:this.options.nsSeparator;x===void 0&&(x=":");const b=u.lng||this.language,w=u.appendNamespaceToCIMode||this.options.appendNamespaceToCIMode;if((b==null?void 0:b.toLowerCase())==="cimode")return w?f?{res:`${p}${x}${h}`,usedKey:h,exactUsedKey:h,usedLng:b,usedNS:p,usedParams:this.getUsedParamsDetails(u)}:`${p}${x}${h}`:f?{res:h,usedKey:h,exactUsedKey:h,usedLng:b,usedNS:p,usedParams:this.getUsedParamsDetails(u)}:h;const j=this.resolve(a,u);let N=j==null?void 0:j.res;const V=(j==null?void 0:j.usedKey)||h,B=(j==null?void 0:j.exactUsedKey)||h,q=["[object Number]","[object Function]","[object RegExp]"],Y=u.joinArrays!==void 0?u.joinArrays:this.options.joinArrays,H=!this.i18nFormat||this.i18nFormat.handleAsObject,K=u.count!==void 0&&!se(u.count),X=Ar.hasDefaultValue(u),ae=K?this.pluralResolver.getSuffix(b,u.count,u):"",Q=u.ordinal&&K?this.pluralResolver.getSuffix(b,u.count,{ordinal:!1}):"",I=K&&!u.ordinal&&u.count===0,ce=I&&u[`defaultValue${this.options.pluralSeparator}zero`]||u[`defaultValue${ae}`]||u[`defaultValue${Q}`]||u.defaultValue;let ye=N;H&&!N&&X&&(ye=ce);const ot=yc(ye),Ve=Object.prototype.toString.apply(ye);if(H&&ye&&ot&&q.indexOf(Ve)<0&&!(se(Y)&&Array.isArray(ye))){if(!u.returnObjects&&!this.options.returnObjects){this.options.returnedObjectHandler||this.logger.warn("accessing an object - but returnObjects options is not enabled!");const He=this.options.returnedObjectHandler?this.options.returnedObjectHandler(V,ye,{...u,ns:y}):`key '${h} (${this.language})' returned an object instead of string.`;return f?(j.res=He,j.usedParams=this.getUsedParamsDetails(u),j):He}if(d){const He=Array.isArray(ye),ze=He?[]:{},tt=He?B:V;for(const _ in ye)if(Object.prototype.hasOwnProperty.call(ye,_)){const G=`${tt}${d}${_}`;X&&!N?ze[_]=this.translate(G,{...u,defaultValue:yc(ce)?ce[_]:void 0,joinArrays:!1,ns:y}):ze[_]=this.translate(G,{...u,joinArrays:!1,ns:y}),ze[_]===G&&(ze[_]=ye[_])}N=ze}}else if(H&&se(Y)&&Array.isArray(N))N=N.join(Y),N&&(N=this.extendTranslation(N,a,u,r));else{let He=!1,ze=!1;!this.isValidLookup(N)&&X&&(He=!0,N=ce),this.isValidLookup(N)||(ze=!0,N=h);const _=(u.missingKeyNoValueFallbackToKey||this.options.missingKeyNoValueFallbackToKey)&&ze?void 0:N,G=X&&ce!==N&&this.options.updateMissing;if(ze||He||G){if(this.logger.log(G?"updateKey":"missingKey",b,p,h,G?ce:N),d){const A=this.resolve(h,{...u,keySeparator:!1});A&&A.res&&this.logger.warn("Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.")}let F=[];const ie=this.languageUtils.getFallbackCodes(this.options.fallbackLng,u.lng||this.language);if(this.options.saveMissingTo==="fallback"&&ie&&ie[0])for(let A=0;A{var le;const Z=X&&P!==N?P:_;this.options.missingKeyHandler?this.options.missingKeyHandler(A,p,L,Z,G,u):(le=this.backendConnector)!=null&&le.saveMissing&&this.backendConnector.saveMissing(A,p,L,Z,G,u),this.emit("missingKey",A,p,L,N)};this.options.saveMissing&&(this.options.saveMissingPlurals&&K?F.forEach(A=>{const L=this.pluralResolver.getSuffixes(A,u);I&&u[`defaultValue${this.options.pluralSeparator}zero`]&&L.indexOf(`${this.options.pluralSeparator}zero`)<0&&L.push(`${this.options.pluralSeparator}zero`),L.forEach(P=>{fe([A],h+P,u[`defaultValue${P}`]||ce)})}):fe(F,h,ce))}N=this.extendTranslation(N,a,u,j,r),ze&&N===h&&this.options.appendNamespaceToMissingKey&&(N=`${p}${x}${h}`),(ze||He)&&this.options.parseMissingKeyHandler&&(N=this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey?`${p}${x}${h}`:h,He?N:void 0,u))}return f?(j.res=N,j.usedParams=this.getUsedParamsDetails(u),j):N}extendTranslation(a,l,r,u,f){var y,p;if((y=this.i18nFormat)!=null&&y.parse)a=this.i18nFormat.parse(a,{...this.options.interpolation.defaultVariables,...r},r.lng||this.language||u.usedLng,u.usedNS,u.usedKey,{resolved:u});else if(!r.skipInterpolation){r.interpolation&&this.interpolator.init({...r,interpolation:{...this.options.interpolation,...r.interpolation}});const x=se(a)&&(((p=r==null?void 0:r.interpolation)==null?void 0:p.skipOnVariables)!==void 0?r.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables);let b;if(x){const j=a.match(this.interpolator.nestingRegexp);b=j&&j.length}let w=r.replace&&!se(r.replace)?r.replace:r;if(this.options.interpolation.defaultVariables&&(w={...this.options.interpolation.defaultVariables,...w}),a=this.interpolator.interpolate(a,w,r.lng||this.language||u.usedLng,r),x){const j=a.match(this.interpolator.nestingRegexp),N=j&&j.length;b(f==null?void 0:f[0])===j[0]&&!r.context?(this.logger.warn(`It seems you are nesting recursively key: ${j[0]} in key: ${l[0]}`),null):this.translate(...j,l),r)),r.interpolation&&this.interpolator.reset()}const d=r.postProcess||this.options.postProcess,h=se(d)?[d]:d;return a!=null&&(h!=null&&h.length)&&r.applyPostProcessor!==!1&&(a=hx.handle(h,a,l,this.options&&this.options.postProcessPassResolved?{i18nResolved:{...u,usedParams:this.getUsedParamsDetails(r)},...r}:r,this)),a}resolve(a,l={}){let r,u,f,d,h;return se(a)&&(a=[a]),a.forEach(y=>{if(this.isValidLookup(r))return;const p=this.extractFromKey(y,l),x=p.key;u=x;let b=p.namespaces;this.options.fallbackNS&&(b=b.concat(this.options.fallbackNS));const w=l.count!==void 0&&!se(l.count),j=w&&!l.ordinal&&l.count===0,N=l.context!==void 0&&(se(l.context)||typeof l.context=="number")&&l.context!=="",V=l.lngs?l.lngs:this.languageUtils.toResolveHierarchy(l.lng||this.language,l.fallbackLng);b.forEach(B=>{var q,Y;this.isValidLookup(r)||(h=B,!sy[`${V[0]}-${B}`]&&((q=this.utils)!=null&&q.hasLoadedNamespace)&&!((Y=this.utils)!=null&&Y.hasLoadedNamespace(h))&&(sy[`${V[0]}-${B}`]=!0,this.logger.warn(`key "${u}" for languages "${V.join(", ")}" won't get resolved as namespace "${h}" was not yet loaded`,"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!")),V.forEach(H=>{var ae;if(this.isValidLookup(r))return;d=H;const K=[x];if((ae=this.i18nFormat)!=null&&ae.addLookupKeys)this.i18nFormat.addLookupKeys(K,x,H,B,l);else{let Q;w&&(Q=this.pluralResolver.getSuffix(H,l.count,l));const I=`${this.options.pluralSeparator}zero`,ce=`${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;if(w&&(l.ordinal&&Q.indexOf(ce)===0&&K.push(x+Q.replace(ce,this.options.pluralSeparator)),K.push(x+Q),j&&K.push(x+I)),N){const ye=`${x}${this.options.contextSeparator||"_"}${l.context}`;K.push(ye),w&&(l.ordinal&&Q.indexOf(ce)===0&&K.push(ye+Q.replace(ce,this.options.pluralSeparator)),K.push(ye+Q),j&&K.push(ye+I))}}let X;for(;X=K.pop();)this.isValidLookup(r)||(f=X,r=this.getResource(H,B,X,l))}))})}),{res:r,usedKey:u,exactUsedKey:f,usedLng:d,usedNS:h}}isValidLookup(a){return a!==void 0&&!(!this.options.returnNull&&a===null)&&!(!this.options.returnEmptyString&&a==="")}getResource(a,l,r,u={}){var f;return(f=this.i18nFormat)!=null&&f.getResource?this.i18nFormat.getResource(a,l,r,u):this.resourceStore.getResource(a,l,r,u)}getUsedParamsDetails(a={}){const l=["defaultValue","ordinal","context","replace","lng","lngs","fallbackLng","ns","keySeparator","nsSeparator","returnObjects","returnDetails","joinArrays","postProcess","interpolation"],r=a.replace&&!se(a.replace);let u=r?a.replace:a;if(r&&typeof a.count<"u"&&(u.count=a.count),this.options.interpolation.defaultVariables&&(u={...this.options.interpolation.defaultVariables,...u}),!r){u={...u};for(const f of l)delete u[f]}return u}static hasDefaultValue(a){const l="defaultValue";for(const r in a)if(Object.prototype.hasOwnProperty.call(a,r)&&l===r.substring(0,l.length)&&a[r]!==void 0)return!0;return!1}}class ly{constructor(a){this.options=a,this.supportedLngs=this.options.supportedLngs||!1,this.logger=nn.create("languageUtils")}getScriptPartFromCode(a){if(a=zs(a),!a||a.indexOf("-")<0)return null;const l=a.split("-");return l.length===2||(l.pop(),l[l.length-1].toLowerCase()==="x")?null:this.formatLanguageCode(l.join("-"))}getLanguagePartFromCode(a){if(a=zs(a),!a||a.indexOf("-")<0)return a;const l=a.split("-");return this.formatLanguageCode(l[0])}formatLanguageCode(a){if(se(a)&&a.indexOf("-")>-1){let l;try{l=Intl.getCanonicalLocales(a)[0]}catch{}return l&&this.options.lowerCaseLng&&(l=l.toLowerCase()),l||(this.options.lowerCaseLng?a.toLowerCase():a)}return this.options.cleanCode||this.options.lowerCaseLng?a.toLowerCase():a}isSupportedCode(a){return(this.options.load==="languageOnly"||this.options.nonExplicitSupportedLngs)&&(a=this.getLanguagePartFromCode(a)),!this.supportedLngs||!this.supportedLngs.length||this.supportedLngs.indexOf(a)>-1}getBestMatchFromCodes(a){if(!a)return null;let l;return a.forEach(r=>{if(l)return;const u=this.formatLanguageCode(r);(!this.options.supportedLngs||this.isSupportedCode(u))&&(l=u)}),!l&&this.options.supportedLngs&&a.forEach(r=>{if(l)return;const u=this.getScriptPartFromCode(r);if(this.isSupportedCode(u))return l=u;const f=this.getLanguagePartFromCode(r);if(this.isSupportedCode(f))return l=f;l=this.options.supportedLngs.find(d=>{if(d===f)return d;if(!(d.indexOf("-")<0&&f.indexOf("-")<0)&&(d.indexOf("-")>0&&f.indexOf("-")<0&&d.substring(0,d.indexOf("-"))===f||d.indexOf(f)===0&&f.length>1))return d})}),l||(l=this.getFallbackCodes(this.options.fallbackLng)[0]),l}getFallbackCodes(a,l){if(!a)return[];if(typeof a=="function"&&(a=a(l)),se(a)&&(a=[a]),Array.isArray(a))return a;if(!l)return a.default||[];let r=a[l];return r||(r=a[this.getScriptPartFromCode(l)]),r||(r=a[this.formatLanguageCode(l)]),r||(r=a[this.getLanguagePartFromCode(l)]),r||(r=a.default),r||[]}toResolveHierarchy(a,l){const r=this.getFallbackCodes((l===!1?[]:l)||this.options.fallbackLng||[],a),u=[],f=d=>{d&&(this.isSupportedCode(d)?u.push(d):this.logger.warn(`rejecting language code not found in supportedLngs: ${d}`))};return se(a)&&(a.indexOf("-")>-1||a.indexOf("_")>-1)?(this.options.load!=="languageOnly"&&f(this.formatLanguageCode(a)),this.options.load!=="languageOnly"&&this.options.load!=="currentOnly"&&f(this.getScriptPartFromCode(a)),this.options.load!=="currentOnly"&&f(this.getLanguagePartFromCode(a))):se(a)&&f(this.formatLanguageCode(a)),r.forEach(d=>{u.indexOf(d)<0&&f(this.formatLanguageCode(d))}),u}}const ry={zero:0,one:1,two:2,few:3,many:4,other:5},oy={select:i=>i===1?"one":"other",resolvedOptions:()=>({pluralCategories:["one","other"]})};class m5{constructor(a,l={}){this.languageUtils=a,this.options=l,this.logger=nn.create("pluralResolver"),this.pluralRulesCache={}}clearCache(){this.pluralRulesCache={}}getRule(a,l={}){const r=zs(a==="dev"?"en":a),u=l.ordinal?"ordinal":"cardinal",f=JSON.stringify({cleanedCode:r,type:u});if(f in this.pluralRulesCache)return this.pluralRulesCache[f];let d;try{d=new Intl.PluralRules(r,{type:u})}catch{if(typeof Intl>"u")return this.logger.error("No Intl support, please use an Intl polyfill!"),oy;if(!a.match(/-|_/))return oy;const y=this.languageUtils.getLanguagePartFromCode(a);d=this.getRule(y,l)}return this.pluralRulesCache[f]=d,d}needsPlural(a,l={}){let r=this.getRule(a,l);return r||(r=this.getRule("dev",l)),(r==null?void 0:r.resolvedOptions().pluralCategories.length)>1}getPluralFormsOfKey(a,l,r={}){return this.getSuffixes(a,r).map(u=>`${l}${u}`)}getSuffixes(a,l={}){let r=this.getRule(a,l);return r||(r=this.getRule("dev",l)),r?r.resolvedOptions().pluralCategories.sort((u,f)=>ry[u]-ry[f]).map(u=>`${this.options.prepend}${l.ordinal?`ordinal${this.options.prepend}`:""}${u}`):[]}getSuffix(a,l,r={}){const u=this.getRule(a,r);return u?`${this.options.prepend}${r.ordinal?`ordinal${this.options.prepend}`:""}${u.select(l)}`:(this.logger.warn(`no plural rule found for: ${a}`),this.getSuffix("dev",l,r))}}const uy=(i,a,l,r=".",u=!0)=>{let f=s5(i,a,l);return!f&&u&&se(l)&&(f=Pc(i,l,r),f===void 0&&(f=Pc(a,l,r))),f},xc=i=>i.replace(/\$/g,"$$$$");class cy{constructor(a={}){var l;this.logger=nn.create("interpolator"),this.options=a,this.format=((l=a==null?void 0:a.interpolation)==null?void 0:l.format)||(r=>r),this.init(a)}init(a={}){a.interpolation||(a.interpolation={escapeValue:!0});const{escape:l,escapeValue:r,useRawValueToEscape:u,prefix:f,prefixEscaped:d,suffix:h,suffixEscaped:y,formatSeparator:p,unescapeSuffix:x,unescapePrefix:b,nestingPrefix:w,nestingPrefixEscaped:j,nestingSuffix:N,nestingSuffixEscaped:V,nestingOptionsSeparator:B,maxReplaces:q,alwaysFormat:Y}=a.interpolation;this.escape=l!==void 0?l:r5,this.escapeValue=r!==void 0?r:!0,this.useRawValueToEscape=u!==void 0?u:!1,this.prefix=f?Sa(f):d||"{{",this.suffix=h?Sa(h):y||"}}",this.formatSeparator=p||",",this.unescapePrefix=x?"":b||"-",this.unescapeSuffix=this.unescapePrefix?"":x||"",this.nestingPrefix=w?Sa(w):j||Sa("$t("),this.nestingSuffix=N?Sa(N):V||Sa(")"),this.nestingOptionsSeparator=B||",",this.maxReplaces=q||1e3,this.alwaysFormat=Y!==void 0?Y:!1,this.resetRegExp()}reset(){this.options&&this.init(this.options)}resetRegExp(){const a=(l,r)=>(l==null?void 0:l.source)===r?(l.lastIndex=0,l):new RegExp(r,"g");this.regexp=a(this.regexp,`${this.prefix}(.+?)${this.suffix}`),this.regexpUnescape=a(this.regexpUnescape,`${this.prefix}${this.unescapePrefix}(.+?)${this.unescapeSuffix}${this.suffix}`),this.nestingRegexp=a(this.nestingRegexp,`${this.nestingPrefix}((?:[^()"']+|"[^"]*"|'[^']*'|\\((?:[^()]|"[^"]*"|'[^']*')*\\))*?)${this.nestingSuffix}`)}interpolate(a,l,r,u){var j;let f,d,h;const y=this.options&&this.options.interpolation&&this.options.interpolation.defaultVariables||{},p=N=>{if(N.indexOf(this.formatSeparator)<0){const Y=uy(l,y,N,this.options.keySeparator,this.options.ignoreJSONStructure);return this.alwaysFormat?this.format(Y,void 0,r,{...u,...l,interpolationkey:N}):Y}const V=N.split(this.formatSeparator),B=V.shift().trim(),q=V.join(this.formatSeparator).trim();return this.format(uy(l,y,B,this.options.keySeparator,this.options.ignoreJSONStructure),q,r,{...u,...l,interpolationkey:B})};this.resetRegExp();const x=(u==null?void 0:u.missingInterpolationHandler)||this.options.missingInterpolationHandler,b=((j=u==null?void 0:u.interpolation)==null?void 0:j.skipOnVariables)!==void 0?u.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables;return[{regex:this.regexpUnescape,safeValue:N=>xc(N)},{regex:this.regexp,safeValue:N=>this.escapeValue?xc(this.escape(N)):xc(N)}].forEach(N=>{for(h=0;f=N.regex.exec(a);){const V=f[1].trim();if(d=p(V),d===void 0)if(typeof x=="function"){const q=x(a,f,u);d=se(q)?q:""}else if(u&&Object.prototype.hasOwnProperty.call(u,V))d="";else if(b){d=f[0];continue}else this.logger.warn(`missed to pass in variable ${V} for interpolating ${a}`),d="";else!se(d)&&!this.useRawValueToEscape&&(d=ey(d));const B=N.safeValue(d);if(a=a.replace(f[0],B),b?(N.regex.lastIndex+=d.length,N.regex.lastIndex-=f[0].length):N.regex.lastIndex=0,h++,h>=this.maxReplaces)break}}),a}nest(a,l,r={}){let u,f,d;const h=(y,p)=>{const x=this.nestingOptionsSeparator;if(y.indexOf(x)<0)return y;const b=y.split(new RegExp(`${Sa(x)}[ ]*{`));let w=`{${b[1]}`;y=b[0],w=this.interpolate(w,d);const j=w.match(/'/g),N=w.match(/"/g);(((j==null?void 0:j.length)??0)%2===0&&!N||((N==null?void 0:N.length)??0)%2!==0)&&(w=w.replace(/'/g,'"'));try{d=JSON.parse(w),p&&(d={...p,...d})}catch(V){return this.logger.warn(`failed parsing options string in nesting for key ${y}`,V),`${y}${x}${w}`}return d.defaultValue&&d.defaultValue.indexOf(this.prefix)>-1&&delete d.defaultValue,y};for(;u=this.nestingRegexp.exec(a);){let y=[];d={...r},d=d.replace&&!se(d.replace)?d.replace:d,d.applyPostProcessor=!1,delete d.defaultValue;const p=/{.*}/.test(u[1])?u[1].lastIndexOf("}")+1:u[1].indexOf(this.formatSeparator);if(p!==-1&&(y=u[1].slice(p).split(this.formatSeparator).map(x=>x.trim()).filter(Boolean),u[1]=u[1].slice(0,p)),f=l(h.call(this,u[1].trim(),d),d),f&&u[0]===a&&!se(f))return f;se(f)||(f=ey(f)),f||(this.logger.warn(`missed to resolve ${u[1]} for nesting ${a}`),f=""),y.length&&(f=y.reduce((x,b)=>this.format(x,b,r.lng,{...r,interpolationkey:u[1].trim()}),f.trim())),a=a.replace(u[0],f),this.regexp.lastIndex=0}return a}}const p5=i=>{let a=i.toLowerCase().trim();const l={};if(i.indexOf("(")>-1){const r=i.split("(");a=r[0].toLowerCase().trim();const u=r[1].substring(0,r[1].length-1);a==="currency"&&u.indexOf(":")<0?l.currency||(l.currency=u.trim()):a==="relativetime"&&u.indexOf(":")<0?l.range||(l.range=u.trim()):u.split(";").forEach(d=>{if(d){const[h,...y]=d.split(":"),p=y.join(":").trim().replace(/^'+|'+$/g,""),x=h.trim();l[x]||(l[x]=p),p==="false"&&(l[x]=!1),p==="true"&&(l[x]=!0),isNaN(p)||(l[x]=parseInt(p,10))}})}return{formatName:a,formatOptions:l}},fy=i=>{const a={};return(l,r,u)=>{let f=u;u&&u.interpolationkey&&u.formatParams&&u.formatParams[u.interpolationkey]&&u[u.interpolationkey]&&(f={...f,[u.interpolationkey]:void 0});const d=r+JSON.stringify(f);let h=a[d];return h||(h=i(zs(r),u),a[d]=h),h(l)}},g5=i=>(a,l,r)=>i(zs(l),r)(a);class y5{constructor(a={}){this.logger=nn.create("formatter"),this.options=a,this.init(a)}init(a,l={interpolation:{}}){this.formatSeparator=l.interpolation.formatSeparator||",";const r=l.cacheInBuiltFormats?fy:g5;this.formats={number:r((u,f)=>{const d=new Intl.NumberFormat(u,{...f});return h=>d.format(h)}),currency:r((u,f)=>{const d=new Intl.NumberFormat(u,{...f,style:"currency"});return h=>d.format(h)}),datetime:r((u,f)=>{const d=new Intl.DateTimeFormat(u,{...f});return h=>d.format(h)}),relativetime:r((u,f)=>{const d=new Intl.RelativeTimeFormat(u,{...f});return h=>d.format(h,f.range||"day")}),list:r((u,f)=>{const d=new Intl.ListFormat(u,{...f});return h=>d.format(h)})}}add(a,l){this.formats[a.toLowerCase().trim()]=l}addCached(a,l){this.formats[a.toLowerCase().trim()]=fy(l)}format(a,l,r,u={}){const f=l.split(this.formatSeparator);if(f.length>1&&f[0].indexOf("(")>1&&f[0].indexOf(")")<0&&f.find(h=>h.indexOf(")")>-1)){const h=f.findIndex(y=>y.indexOf(")")>-1);f[0]=[f[0],...f.splice(1,h)].join(this.formatSeparator)}return f.reduce((h,y)=>{var b;const{formatName:p,formatOptions:x}=p5(y);if(this.formats[p]){let w=h;try{const j=((b=u==null?void 0:u.formatParams)==null?void 0:b[u.interpolationkey])||{},N=j.locale||j.lng||u.locale||u.lng||r;w=this.formats[p](h,N,{...x,...u,...j})}catch(j){this.logger.warn(j)}return w}else this.logger.warn(`there was no format function for ${p}`);return h},a)}}const x5=(i,a)=>{i.pending[a]!==void 0&&(delete i.pending[a],i.pendingCount--)};class v5 extends Dr{constructor(a,l,r,u={}){var f,d;super(),this.backend=a,this.store=l,this.services=r,this.languageUtils=r.languageUtils,this.options=u,this.logger=nn.create("backendConnector"),this.waitingReads=[],this.maxParallelReads=u.maxParallelReads||10,this.readingCalls=0,this.maxRetries=u.maxRetries>=0?u.maxRetries:5,this.retryTimeout=u.retryTimeout>=1?u.retryTimeout:350,this.state={},this.queue=[],(d=(f=this.backend)==null?void 0:f.init)==null||d.call(f,r,u.backend,u)}queueLoad(a,l,r,u){const f={},d={},h={},y={};return a.forEach(p=>{let x=!0;l.forEach(b=>{const w=`${p}|${b}`;!r.reload&&this.store.hasResourceBundle(p,b)?this.state[w]=2:this.state[w]<0||(this.state[w]===1?d[w]===void 0&&(d[w]=!0):(this.state[w]=1,x=!1,d[w]===void 0&&(d[w]=!0),f[w]===void 0&&(f[w]=!0),y[b]===void 0&&(y[b]=!0)))}),x||(h[p]=!0)}),(Object.keys(f).length||Object.keys(d).length)&&this.queue.push({pending:d,pendingCount:Object.keys(d).length,loaded:{},errors:[],callback:u}),{toLoad:Object.keys(f),pending:Object.keys(d),toLoadLanguages:Object.keys(h),toLoadNamespaces:Object.keys(y)}}loaded(a,l,r){const u=a.split("|"),f=u[0],d=u[1];l&&this.emit("failedLoading",f,d,l),!l&&r&&this.store.addResourceBundle(f,d,r,void 0,void 0,{skipCopy:!0}),this.state[a]=l?-1:2,l&&r&&(this.state[a]=0);const h={};this.queue.forEach(y=>{i5(y.loaded,[f],d),x5(y,a),l&&y.errors.push(l),y.pendingCount===0&&!y.done&&(Object.keys(y.loaded).forEach(p=>{h[p]||(h[p]={});const x=y.loaded[p];x.length&&x.forEach(b=>{h[p][b]===void 0&&(h[p][b]=!0)})}),y.done=!0,y.errors.length?y.callback(y.errors):y.callback())}),this.emit("loaded",h),this.queue=this.queue.filter(y=>!y.done)}read(a,l,r,u=0,f=this.retryTimeout,d){if(!a.length)return d(null,{});if(this.readingCalls>=this.maxParallelReads){this.waitingReads.push({lng:a,ns:l,fcName:r,tried:u,wait:f,callback:d});return}this.readingCalls++;const h=(p,x)=>{if(this.readingCalls--,this.waitingReads.length>0){const b=this.waitingReads.shift();this.read(b.lng,b.ns,b.fcName,b.tried,b.wait,b.callback)}if(p&&x&&u{this.read.call(this,a,l,r,u+1,f*2,d)},f);return}d(p,x)},y=this.backend[r].bind(this.backend);if(y.length===2){try{const p=y(a,l);p&&typeof p.then=="function"?p.then(x=>h(null,x)).catch(h):h(null,p)}catch(p){h(p)}return}return y(a,l,h)}prepareLoading(a,l,r={},u){if(!this.backend)return this.logger.warn("No backend was added via i18next.use. Will not load resources."),u&&u();se(a)&&(a=this.languageUtils.toResolveHierarchy(a)),se(l)&&(l=[l]);const f=this.queueLoad(a,l,r,u);if(!f.toLoad.length)return f.pending.length||u(),null;f.toLoad.forEach(d=>{this.loadOne(d)})}load(a,l,r){this.prepareLoading(a,l,{},r)}reload(a,l,r){this.prepareLoading(a,l,{reload:!0},r)}loadOne(a,l=""){const r=a.split("|"),u=r[0],f=r[1];this.read(u,f,"read",void 0,void 0,(d,h)=>{d&&this.logger.warn(`${l}loading namespace ${f} for language ${u} failed`,d),!d&&h&&this.logger.log(`${l}loaded namespace ${f} for language ${u}`,h),this.loaded(a,d,h)})}saveMissing(a,l,r,u,f,d={},h=()=>{}){var y,p,x,b,w;if((p=(y=this.services)==null?void 0:y.utils)!=null&&p.hasLoadedNamespace&&!((b=(x=this.services)==null?void 0:x.utils)!=null&&b.hasLoadedNamespace(l))){this.logger.warn(`did not save key "${r}" as the namespace "${l}" was not yet loaded`,"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!");return}if(!(r==null||r==="")){if((w=this.backend)!=null&&w.create){const j={...d,isUpdate:f},N=this.backend.create.bind(this.backend);if(N.length<6)try{let V;N.length===5?V=N(a,l,r,u,j):V=N(a,l,r,u),V&&typeof V.then=="function"?V.then(B=>h(null,B)).catch(h):h(null,V)}catch(V){h(V)}else N(a,l,r,u,h,j)}!a||!a[0]||this.store.addResource(a[0],l,r,u)}}}const vc=()=>({debug:!1,initAsync:!0,ns:["translation"],defaultNS:["translation"],fallbackLng:["dev"],fallbackNS:!1,supportedLngs:!1,nonExplicitSupportedLngs:!1,load:"all",preload:!1,simplifyPluralSuffix:!0,keySeparator:".",nsSeparator:":",pluralSeparator:"_",contextSeparator:"_",partialBundledLanguages:!1,saveMissing:!1,updateMissing:!1,saveMissingTo:"fallback",saveMissingPlurals:!0,missingKeyHandler:!1,missingInterpolationHandler:!1,postProcess:!1,postProcessPassResolved:!1,returnNull:!1,returnEmptyString:!0,returnObjects:!1,joinArrays:!1,returnedObjectHandler:!1,parseMissingKeyHandler:!1,appendNamespaceToMissingKey:!1,appendNamespaceToCIMode:!1,overloadTranslationOptionHandler:i=>{let a={};if(typeof i[1]=="object"&&(a=i[1]),se(i[1])&&(a.defaultValue=i[1]),se(i[2])&&(a.tDescription=i[2]),typeof i[2]=="object"||typeof i[3]=="object"){const l=i[3]||i[2];Object.keys(l).forEach(r=>{a[r]=l[r]})}return a},interpolation:{escapeValue:!0,format:i=>i,prefix:"{{",suffix:"}}",formatSeparator:",",unescapePrefix:"-",nestingPrefix:"$t(",nestingSuffix:")",nestingOptionsSeparator:",",maxReplaces:1e3,skipOnVariables:!0},cacheInBuiltFormats:!0}),dy=i=>{var a,l;return se(i.ns)&&(i.ns=[i.ns]),se(i.fallbackLng)&&(i.fallbackLng=[i.fallbackLng]),se(i.fallbackNS)&&(i.fallbackNS=[i.fallbackNS]),((l=(a=i.supportedLngs)==null?void 0:a.indexOf)==null?void 0:l.call(a,"cimode"))<0&&(i.supportedLngs=i.supportedLngs.concat(["cimode"])),typeof i.initImmediate=="boolean"&&(i.initAsync=i.initImmediate),i},lr=()=>{},b5=i=>{Object.getOwnPropertyNames(Object.getPrototypeOf(i)).forEach(l=>{typeof i[l]=="function"&&(i[l]=i[l].bind(i))})},px="__i18next_supportNoticeShown",S5=()=>typeof globalThis<"u"&&!!globalThis[px],w5=()=>{typeof globalThis<"u"&&(globalThis[px]=!0)},T5=i=>{var a,l,r,u,f,d,h,y,p,x,b,w,j;return!!(((r=(l=(a=i==null?void 0:i.modules)==null?void 0:a.backend)==null?void 0:l.name)==null?void 0:r.indexOf("Locize"))>0||((h=(d=(f=(u=i==null?void 0:i.modules)==null?void 0:u.backend)==null?void 0:f.constructor)==null?void 0:d.name)==null?void 0:h.indexOf("Locize"))>0||(p=(y=i==null?void 0:i.options)==null?void 0:y.backend)!=null&&p.backends&&i.options.backend.backends.some(N=>{var V,B,q;return((V=N==null?void 0:N.name)==null?void 0:V.indexOf("Locize"))>0||((q=(B=N==null?void 0:N.constructor)==null?void 0:B.name)==null?void 0:q.indexOf("Locize"))>0})||(b=(x=i==null?void 0:i.options)==null?void 0:x.backend)!=null&&b.projectId||(j=(w=i==null?void 0:i.options)==null?void 0:w.backend)!=null&&j.backendOptions&&i.options.backend.backendOptions.some(N=>N==null?void 0:N.projectId))};class Ds extends Dr{constructor(a={},l){if(super(),this.options=dy(a),this.services={},this.logger=nn,this.modules={external:[]},b5(this),l&&!this.isInitialized&&!a.isClone){if(!this.options.initAsync)return this.init(a,l),this;setTimeout(()=>{this.init(a,l)},0)}}init(a={},l){this.isInitializing=!0,typeof a=="function"&&(l=a,a={}),a.defaultNS==null&&a.ns&&(se(a.ns)?a.defaultNS=a.ns:a.ns.indexOf("translation")<0&&(a.defaultNS=a.ns[0]));const r=vc();this.options={...r,...this.options,...dy(a)},this.options.interpolation={...r.interpolation,...this.options.interpolation},a.keySeparator!==void 0&&(this.options.userDefinedKeySeparator=a.keySeparator),a.nsSeparator!==void 0&&(this.options.userDefinedNsSeparator=a.nsSeparator),typeof this.options.overloadTranslationOptionHandler!="function"&&(this.options.overloadTranslationOptionHandler=r.overloadTranslationOptionHandler),this.options.showSupportNotice!==!1&&!T5(this)&&!S5()&&(typeof console<"u"&&typeof console.info<"u"&&console.info("🌐 i18next is maintained with support from Locize — consider powering your project with managed localization (AI, CDN, integrations): https://locize.com 💙"),w5());const u=p=>p?typeof p=="function"?new p:p:null;if(!this.options.isClone){this.modules.logger?nn.init(u(this.modules.logger),this.options):nn.init(null,this.options);let p;this.modules.formatter?p=this.modules.formatter:p=y5;const x=new ly(this.options);this.store=new iy(this.options.resources,this.options);const b=this.services;b.logger=nn,b.resourceStore=this.store,b.languageUtils=x,b.pluralResolver=new m5(x,{prepend:this.options.pluralSeparator,simplifyPluralSuffix:this.options.simplifyPluralSuffix}),this.options.interpolation.format&&this.options.interpolation.format!==r.interpolation.format&&this.logger.deprecate("init: you are still using the legacy format function, please use the new approach: https://www.i18next.com/translation-function/formatting"),p&&(!this.options.interpolation.format||this.options.interpolation.format===r.interpolation.format)&&(b.formatter=u(p),b.formatter.init&&b.formatter.init(b,this.options),this.options.interpolation.format=b.formatter.format.bind(b.formatter)),b.interpolator=new cy(this.options),b.utils={hasLoadedNamespace:this.hasLoadedNamespace.bind(this)},b.backendConnector=new v5(u(this.modules.backend),b.resourceStore,b,this.options),b.backendConnector.on("*",(j,...N)=>{this.emit(j,...N)}),this.modules.languageDetector&&(b.languageDetector=u(this.modules.languageDetector),b.languageDetector.init&&b.languageDetector.init(b,this.options.detection,this.options)),this.modules.i18nFormat&&(b.i18nFormat=u(this.modules.i18nFormat),b.i18nFormat.init&&b.i18nFormat.init(this)),this.translator=new Ar(this.services,this.options),this.translator.on("*",(j,...N)=>{this.emit(j,...N)}),this.modules.external.forEach(j=>{j.init&&j.init(this)})}if(this.format=this.options.interpolation.format,l||(l=lr),this.options.fallbackLng&&!this.services.languageDetector&&!this.options.lng){const p=this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);p.length>0&&p[0]!=="dev"&&(this.options.lng=p[0])}!this.services.languageDetector&&!this.options.lng&&this.logger.warn("init: no languageDetector is used and no lng is defined"),["getResource","hasResourceBundle","getResourceBundle","getDataByLanguage"].forEach(p=>{this[p]=(...x)=>this.store[p](...x)}),["addResource","addResources","addResourceBundle","removeResourceBundle"].forEach(p=>{this[p]=(...x)=>(this.store[p](...x),this)});const h=Ss(),y=()=>{const p=(x,b)=>{this.isInitializing=!1,this.isInitialized&&!this.initializedStoreOnce&&this.logger.warn("init: i18next is already initialized. You should call init just once!"),this.isInitialized=!0,this.options.isClone||this.logger.log("initialized",this.options),this.emit("initialized",this.options),h.resolve(b),l(x,b)};if(this.languages&&!this.isInitialized)return p(null,this.t.bind(this));this.changeLanguage(this.options.lng,p)};return this.options.resources||!this.options.initAsync?y():setTimeout(y,0),h}loadResources(a,l=lr){var f,d;let r=l;const u=se(a)?a:this.language;if(typeof a=="function"&&(r=a),!this.options.resources||this.options.partialBundledLanguages){if((u==null?void 0:u.toLowerCase())==="cimode"&&(!this.options.preload||this.options.preload.length===0))return r();const h=[],y=p=>{if(!p||p==="cimode")return;this.services.languageUtils.toResolveHierarchy(p).forEach(b=>{b!=="cimode"&&h.indexOf(b)<0&&h.push(b)})};u?y(u):this.services.languageUtils.getFallbackCodes(this.options.fallbackLng).forEach(x=>y(x)),(d=(f=this.options.preload)==null?void 0:f.forEach)==null||d.call(f,p=>y(p)),this.services.backendConnector.load(h,this.options.ns,p=>{!p&&!this.resolvedLanguage&&this.language&&this.setResolvedLanguage(this.language),r(p)})}else r(null)}reloadResources(a,l,r){const u=Ss();return typeof a=="function"&&(r=a,a=void 0),typeof l=="function"&&(r=l,l=void 0),a||(a=this.languages),l||(l=this.options.ns),r||(r=lr),this.services.backendConnector.reload(a,l,f=>{u.resolve(),r(f)}),u}use(a){if(!a)throw new Error("You are passing an undefined module! Please check the object you are passing to i18next.use()");if(!a.type)throw new Error("You are passing a wrong module! Please check the object you are passing to i18next.use()");return a.type==="backend"&&(this.modules.backend=a),(a.type==="logger"||a.log&&a.warn&&a.error)&&(this.modules.logger=a),a.type==="languageDetector"&&(this.modules.languageDetector=a),a.type==="i18nFormat"&&(this.modules.i18nFormat=a),a.type==="postProcessor"&&hx.addPostProcessor(a),a.type==="formatter"&&(this.modules.formatter=a),a.type==="3rdParty"&&this.modules.external.push(a),this}setResolvedLanguage(a){if(!(!a||!this.languages)&&!(["cimode","dev"].indexOf(a)>-1)){for(let l=0;l-1)&&this.store.hasLanguageSomeTranslations(r)){this.resolvedLanguage=r;break}}!this.resolvedLanguage&&this.languages.indexOf(a)<0&&this.store.hasLanguageSomeTranslations(a)&&(this.resolvedLanguage=a,this.languages.unshift(a))}}changeLanguage(a,l){this.isLanguageChangingTo=a;const r=Ss();this.emit("languageChanging",a);const u=h=>{this.language=h,this.languages=this.services.languageUtils.toResolveHierarchy(h),this.resolvedLanguage=void 0,this.setResolvedLanguage(h)},f=(h,y)=>{y?this.isLanguageChangingTo===a&&(u(y),this.translator.changeLanguage(y),this.isLanguageChangingTo=void 0,this.emit("languageChanged",y),this.logger.log("languageChanged",y)):this.isLanguageChangingTo=void 0,r.resolve((...p)=>this.t(...p)),l&&l(h,(...p)=>this.t(...p))},d=h=>{var x,b;!a&&!h&&this.services.languageDetector&&(h=[]);const y=se(h)?h:h&&h[0],p=this.store.hasLanguageSomeTranslations(y)?y:this.services.languageUtils.getBestMatchFromCodes(se(h)?[h]:h);p&&(this.language||u(p),this.translator.language||this.translator.changeLanguage(p),(b=(x=this.services.languageDetector)==null?void 0:x.cacheUserLanguage)==null||b.call(x,p)),this.loadResources(p,w=>{f(w,p)})};return!a&&this.services.languageDetector&&!this.services.languageDetector.async?d(this.services.languageDetector.detect()):!a&&this.services.languageDetector&&this.services.languageDetector.async?this.services.languageDetector.detect.length===0?this.services.languageDetector.detect().then(d):this.services.languageDetector.detect(d):d(a),r}getFixedT(a,l,r){const u=(f,d,...h)=>{let y;typeof d!="object"?y=this.options.overloadTranslationOptionHandler([f,d].concat(h)):y={...d},y.lng=y.lng||u.lng,y.lngs=y.lngs||u.lngs,y.ns=y.ns||u.ns,y.keyPrefix!==""&&(y.keyPrefix=y.keyPrefix||r||u.keyPrefix);const p=this.options.keySeparator||".";let x;return y.keyPrefix&&Array.isArray(f)?x=f.map(b=>(typeof b=="function"&&(b=Kc(b,{...this.options,...d})),`${y.keyPrefix}${p}${b}`)):(typeof f=="function"&&(f=Kc(f,{...this.options,...d})),x=y.keyPrefix?`${y.keyPrefix}${p}${f}`:f),this.t(x,y)};return se(a)?u.lng=a:u.lngs=a,u.ns=l,u.keyPrefix=r,u}t(...a){var l;return(l=this.translator)==null?void 0:l.translate(...a)}exists(...a){var l;return(l=this.translator)==null?void 0:l.exists(...a)}setDefaultNamespace(a){this.options.defaultNS=a}hasLoadedNamespace(a,l={}){if(!this.isInitialized)return this.logger.warn("hasLoadedNamespace: i18next was not initialized",this.languages),!1;if(!this.languages||!this.languages.length)return this.logger.warn("hasLoadedNamespace: i18n.languages were undefined or empty",this.languages),!1;const r=l.lng||this.resolvedLanguage||this.languages[0],u=this.options?this.options.fallbackLng:!1,f=this.languages[this.languages.length-1];if(r.toLowerCase()==="cimode")return!0;const d=(h,y)=>{const p=this.services.backendConnector.state[`${h}|${y}`];return p===-1||p===0||p===2};if(l.precheck){const h=l.precheck(this,d);if(h!==void 0)return h}return!!(this.hasResourceBundle(r,a)||!this.services.backendConnector.backend||this.options.resources&&!this.options.partialBundledLanguages||d(r,a)&&(!u||d(f,a)))}loadNamespaces(a,l){const r=Ss();return this.options.ns?(se(a)&&(a=[a]),a.forEach(u=>{this.options.ns.indexOf(u)<0&&this.options.ns.push(u)}),this.loadResources(u=>{r.resolve(),l&&l(u)}),r):(l&&l(),Promise.resolve())}loadLanguages(a,l){const r=Ss();se(a)&&(a=[a]);const u=this.options.preload||[],f=a.filter(d=>u.indexOf(d)<0&&this.services.languageUtils.isSupportedCode(d));return f.length?(this.options.preload=u.concat(f),this.loadResources(d=>{r.resolve(),l&&l(d)}),r):(l&&l(),Promise.resolve())}dir(a){var u,f;if(a||(a=this.resolvedLanguage||(((u=this.languages)==null?void 0:u.length)>0?this.languages[0]:this.language)),!a)return"rtl";try{const d=new Intl.Locale(a);if(d&&d.getTextInfo){const h=d.getTextInfo();if(h&&h.direction)return h.direction}}catch{}const l=["ar","shu","sqr","ssh","xaa","yhd","yud","aao","abh","abv","acm","acq","acw","acx","acy","adf","ads","aeb","aec","afb","ajp","apc","apd","arb","arq","ars","ary","arz","auz","avl","ayh","ayl","ayn","ayp","bbz","pga","he","iw","ps","pbt","pbu","pst","prp","prd","ug","ur","ydd","yds","yih","ji","yi","hbo","men","xmn","fa","jpr","peo","pes","prs","dv","sam","ckb"],r=((f=this.services)==null?void 0:f.languageUtils)||new ly(vc());return a.toLowerCase().indexOf("-latn")>1?"ltr":l.indexOf(r.getLanguagePartFromCode(a))>-1||a.toLowerCase().indexOf("-arab")>1?"rtl":"ltr"}static createInstance(a={},l){const r=new Ds(a,l);return r.createInstance=Ds.createInstance,r}cloneInstance(a={},l=lr){const r=a.forkResourceStore;r&&delete a.forkResourceStore;const u={...this.options,...a,isClone:!0},f=new Ds(u);if((a.debug!==void 0||a.prefix!==void 0)&&(f.logger=f.logger.clone(a)),["store","services","language"].forEach(h=>{f[h]=this[h]}),f.services={...this.services},f.services.utils={hasLoadedNamespace:f.hasLoadedNamespace.bind(f)},r){const h=Object.keys(this.store.data).reduce((y,p)=>(y[p]={...this.store.data[p]},y[p]=Object.keys(y[p]).reduce((x,b)=>(x[b]={...y[p][b]},x),y[p]),y),{});f.store=new iy(h,u),f.services.resourceStore=f.store}if(a.interpolation){const y={...vc().interpolation,...this.options.interpolation,...a.interpolation},p={...u,interpolation:y};f.services.interpolator=new cy(p)}return f.translator=new Ar(f.services,u),f.translator.on("*",(h,...y)=>{f.emit(h,...y)}),f.init(u,l),f.translator.options=u,f.translator.backendConnector.services.utils={hasLoadedNamespace:f.hasLoadedNamespace.bind(f)},f}toJSON(){return{options:this.options,store:this.store,language:this.language,languages:this.languages,resolvedLanguage:this.resolvedLanguage}}}const Pe=Ds.createInstance();Pe.createInstance;Pe.dir;Pe.init;Pe.loadResources;Pe.reloadResources;Pe.use;Pe.changeLanguage;Pe.getFixedT;Pe.t;Pe.exists;Pe.setDefaultNamespace;Pe.hasLoadedNamespace;Pe.loadNamespaces;Pe.loadLanguages;const{slice:A5,forEach:N5}=[];function j5(i){return N5.call(A5.call(arguments,1),a=>{if(a)for(const l in a)i[l]===void 0&&(i[l]=a[l])}),i}function E5(i){return typeof i!="string"?!1:[/<\s*script.*?>/i,/<\s*\/\s*script\s*>/i,/<\s*img.*?on\w+\s*=/i,/<\s*\w+\s*on\w+\s*=.*?>/i,/javascript\s*:/i,/vbscript\s*:/i,/expression\s*\(/i,/eval\s*\(/i,/alert\s*\(/i,/document\.cookie/i,/document\.write\s*\(/i,/window\.location/i,/innerHTML/i].some(l=>l.test(i))}const hy=/^[\u0009\u0020-\u007e\u0080-\u00ff]+$/,D5=function(i,a){const r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{path:"/"},u=encodeURIComponent(a);let f=`${i}=${u}`;if(r.maxAge>0){const d=r.maxAge-0;if(Number.isNaN(d))throw new Error("maxAge should be a Number");f+=`; Max-Age=${Math.floor(d)}`}if(r.domain){if(!hy.test(r.domain))throw new TypeError("option domain is invalid");f+=`; Domain=${r.domain}`}if(r.path){if(!hy.test(r.path))throw new TypeError("option path is invalid");f+=`; Path=${r.path}`}if(r.expires){if(typeof r.expires.toUTCString!="function")throw new TypeError("option expires is invalid");f+=`; Expires=${r.expires.toUTCString()}`}if(r.httpOnly&&(f+="; HttpOnly"),r.secure&&(f+="; Secure"),r.sameSite)switch(typeof r.sameSite=="string"?r.sameSite.toLowerCase():r.sameSite){case!0:f+="; SameSite=Strict";break;case"lax":f+="; SameSite=Lax";break;case"strict":f+="; SameSite=Strict";break;case"none":f+="; SameSite=None";break;default:throw new TypeError("option sameSite is invalid")}return r.partitioned&&(f+="; Partitioned"),f},my={create(i,a,l,r){let u=arguments.length>4&&arguments[4]!==void 0?arguments[4]:{path:"/",sameSite:"strict"};l&&(u.expires=new Date,u.expires.setTime(u.expires.getTime()+l*60*1e3)),r&&(u.domain=r),document.cookie=D5(i,a,u)},read(i){const a=`${i}=`,l=document.cookie.split(";");for(let r=0;r-1&&(u=window.location.hash.substring(window.location.hash.indexOf("?")));const d=u.substring(1).split("&");for(let h=0;h0&&d[h].substring(0,y)===a&&(l=d[h].substring(y+1))}}return l}},O5={name:"hash",lookup(i){var u;let{lookupHash:a,lookupFromHashIndex:l}=i,r;if(typeof window<"u"){const{hash:f}=window.location;if(f&&f.length>2){const d=f.substring(1);if(a){const h=d.split("&");for(let y=0;y0&&h[y].substring(0,p)===a&&(r=h[y].substring(p+1))}}if(r)return r;if(!r&&l>-1){const h=f.match(/\/([a-zA-Z-]*)/g);return Array.isArray(h)?(u=h[typeof l=="number"?l:0])==null?void 0:u.replace("/",""):void 0}}}return r}};let fi=null;const py=()=>{if(fi!==null)return fi;try{if(fi=typeof window<"u"&&window.localStorage!==null,!fi)return!1;const i="i18next.translate.boo";window.localStorage.setItem(i,"foo"),window.localStorage.removeItem(i)}catch{fi=!1}return fi};var R5={name:"localStorage",lookup(i){let{lookupLocalStorage:a}=i;if(a&&py())return window.localStorage.getItem(a)||void 0},cacheUserLanguage(i,a){let{lookupLocalStorage:l}=a;l&&py()&&window.localStorage.setItem(l,i)}};let di=null;const gy=()=>{if(di!==null)return di;try{if(di=typeof window<"u"&&window.sessionStorage!==null,!di)return!1;const i="i18next.translate.boo";window.sessionStorage.setItem(i,"foo"),window.sessionStorage.removeItem(i)}catch{di=!1}return di};var _5={name:"sessionStorage",lookup(i){let{lookupSessionStorage:a}=i;if(a&&gy())return window.sessionStorage.getItem(a)||void 0},cacheUserLanguage(i,a){let{lookupSessionStorage:l}=a;l&&gy()&&window.sessionStorage.setItem(l,i)}},z5={name:"navigator",lookup(i){const a=[];if(typeof navigator<"u"){const{languages:l,userLanguage:r,language:u}=navigator;if(l)for(let f=0;f0?a:void 0}},L5={name:"htmlTag",lookup(i){let{htmlTag:a}=i,l;const r=a||(typeof document<"u"?document.documentElement:null);return r&&typeof r.getAttribute=="function"&&(l=r.getAttribute("lang")),l}},V5={name:"path",lookup(i){var u;let{lookupFromPathIndex:a}=i;if(typeof window>"u")return;const l=window.location.pathname.match(/\/([a-zA-Z-]*)/g);return Array.isArray(l)?(u=l[typeof a=="number"?a:0])==null?void 0:u.replace("/",""):void 0}},k5={name:"subdomain",lookup(i){var u,f;let{lookupFromSubdomainIndex:a}=i;const l=typeof a=="number"?a+1:1,r=typeof window<"u"&&((f=(u=window.location)==null?void 0:u.hostname)==null?void 0:f.match(/^(\w{2,5})\.(([a-z0-9-]{1,63}\.[a-z]{2,6})|localhost)/i));if(r)return r[l]}};let gx=!1;try{document.cookie,gx=!0}catch{}const yx=["querystring","cookie","localStorage","sessionStorage","navigator","htmlTag"];gx||yx.splice(1,1);const U5=()=>({order:yx,lookupQuerystring:"lng",lookupCookie:"i18next",lookupLocalStorage:"i18nextLng",lookupSessionStorage:"i18nextLng",caches:["localStorage"],excludeCacheFor:["cimode"],convertDetectedLanguage:i=>i});class xx{constructor(a){let l=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.type="languageDetector",this.detectors={},this.init(a,l)}init(){let a=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{languageUtils:{}},l=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};this.services=a,this.options=j5(l,this.options||{},U5()),typeof this.options.convertDetectedLanguage=="string"&&this.options.convertDetectedLanguage.indexOf("15897")>-1&&(this.options.convertDetectedLanguage=u=>u.replace("-","_")),this.options.lookupFromUrlIndex&&(this.options.lookupFromPathIndex=this.options.lookupFromUrlIndex),this.i18nOptions=r,this.addDetector(M5),this.addDetector(C5),this.addDetector(R5),this.addDetector(_5),this.addDetector(z5),this.addDetector(L5),this.addDetector(V5),this.addDetector(k5),this.addDetector(O5)}addDetector(a){return this.detectors[a.name]=a,this}detect(){let a=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.options.order,l=[];return a.forEach(r=>{if(this.detectors[r]){let u=this.detectors[r].lookup(this.options);u&&typeof u=="string"&&(u=[u]),u&&(l=l.concat(u))}}),l=l.filter(r=>r!=null&&!E5(r)).map(r=>this.options.convertDetectedLanguage(r)),this.services&&this.services.languageUtils&&this.services.languageUtils.getBestMatchFromCodes?l:l.length>0?l[0]:null}cacheUserLanguage(a){let l=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.options.caches;l&&(this.options.excludeCacheFor&&this.options.excludeCacheFor.indexOf(a)>-1||l.forEach(r=>{this.detectors[r]&&this.detectors[r].cacheUserLanguage(a,this.options)}))}}xx.type="languageDetector";const B5={free:"Free",pro:"Pro",api:"API",enterprise:"Enterprise",reserveAccess:"Reserve Your Early Access"},H5={noiseWord:"Noise",signalWord:"Signal",valueProps:"AI-powered equity research, geopolitical analysis, and macro intelligence — correlated in real time.",reserveEarlyAccess:"Reserve Your Early Access",launchingDate:"Launching March 2026",tryFreeDashboard:"Try the free dashboard",emailPlaceholder:"Enter your email",emailAriaLabel:"Email address for waitlist"},q5={asFeaturedIn:"As featured in"},G5={proTitle:"World Monitor Pro",proDesc:"For investors, analysts, and professionals who need stock monitoring, geopolitical analysis, and daily AI briefings.",proF1:"Equity research — global stock analysis, financials, analyst targets, valuation metrics",proF2:"Geopolitical analysis — Grand Chessboard framework, Prisoners of Geography models",proF3:"Economy analytics — GDP, inflation, interest rates, growth cycles",proF4:"AI morning briefs & flash alerts delivered to Slack, Telegram, WhatsApp, Email",proF5:"Central bank & monetary policy tracking",proF6:"Global risk monitoring & scenario analysis",proF7:"Near-real-time data (<60s refresh), 22 services, 1 key",proF8:"Saved watchlists, custom views & configurable alert rules",proF9:"Premium map layers, longer history & desktop app workflows",proCta:"Reserve Your Early Access",entTitle:"World Monitor Enterprise",entDesc:"For teams that need shared monitoring, API access, deployment options, TV apps, and direct support.",entF1:"Everything in Pro, plus:",entF2:"Live-edge + satellite imagery & SAR",entF3:"AI agents with investor personas & MCP",entF4:"50,000+ infrastructure assets mapped",entF5:"100+ data connectors (Splunk, Snowflake, Sentinel...)",entF6:"REST API + webhooks + bulk export",entF7:"Team workspaces with SSO/MFA/RBAC",entF8:"White-label & embeddable panels",entF9:"Android TV app for SOC walls & trading floors",entF10:"Cloud, on-prem, or air-gapped deployment",entF11:"Dedicated onboarding & support",entCta:"Talk to Sales"},Y5={title:"Why upgrade",noiseTitle:"Less noise",noiseDesc:"Filter events, feeds, layers, and live sources around the places and signals you care about.",fasterTitle:"Market intelligence",fasterDesc:"Equity research, analyst targets, and macro analytics — correlated with geopolitical signals that move markets.",controlTitle:"More control",controlDesc:"Save watchlists, custom views, and alert setups for the events you follow most.",deeperTitle:"Deeper analysis",deeperDesc:"Grand Chessboard frameworks, Prisoners of Geography models, central bank tracking, and scenario analysis."},P5={windowTitle:"worldmonitor.app — Live Dashboard",openFullScreen:"Open full screen",tryLiveDashboard:"Try the Live Dashboard",iframeTitle:"World Monitor — Live Intelligence Dashboard",description:"3D WebGL globe · 45+ interactive map layers · Real-time market, macro, geopolitical, energy, and infrastructure data"},K5={uniqueVisitors:"Unique visitors",peakDailyUsers:"Peak daily users",countriesReached:"Countries reached",liveDataSources:"Live data sources",quote:"Markets, monetary policy, geopolitics, energy — everything moves together now. I needed something that showed me how these forces connect in real time, not just the headlines but the underlying drivers.",ceo:"CEO of",asToldTo:"as told to"},X5={title:"Built for people who need signal fast",investorsTitle:"Investors & portfolio managers",investorsDesc:"Track global equities, analyst targets, valuation metrics, and macro indicators alongside geopolitical risk signals.",tradersTitle:"Energy & commodities traders",tradersDesc:"Track vessel movements, cargo inference, supply chain disruptions, and market-moving geopolitical signals.",researchersTitle:"Researchers & analysts",researchersDesc:"Equity research, economy analytics, and geopolitical frameworks for deeper analysis and reporting.",journalistsTitle:"Journalists & media",journalistsDesc:"Follow fast-moving developments across markets and regions without stitching sources together manually.",govTitle:"Government & institutions",govDesc:"Macro policy tracking, central bank monitoring, and situational awareness across geopolitical and infrastructure signals.",teamsTitle:"Teams & organizations",teamsDesc:"Move from individual use to shared workflows, API access, TV apps, and managed deployments."},F5={title:"What World Monitor Tracks",subtitle:"22 service domains ingested simultaneously. Markets, macro, geopolitics, energy, infrastructure — everything normalized and rendered on a WebGL globe.",markets:"Financial Markets & Equities",marketsDesc:"Global stock analysis, commodities, crypto, ETF flows, analyst targets, and FRED macro data",economy:"Economy & Central Banks",economyDesc:"GDP, inflation, interest rates, growth cycles, and monetary policy tracking across major economies",geopolitical:"Geopolitical Analysis",geopoliticalDesc:"ACLED & UCDP events with escalation scoring, risk frameworks, and trend analysis",maritime:"Maritime & Trade",maritimeDesc:"Ship movements, vessel detection, port activity, and cargo inference",aviation:"Aviation Tracking",aviationDesc:"ADS-B transponder tracking of global flight patterns",infra:"Critical Infrastructure",infraDesc:"Nuclear sites, power grids, pipelines, refineries — 50K+ mapped assets",fire:"Satellite Fire Detection",fireDesc:"NASA FIRMS near-real-time fire and hotspot data",cables:"Submarine Cables",cablesDesc:"Undersea cable routes and landing stations",internet:"Internet & GPS",internetDesc:"Outage detection, BGP anomalies, GPS jamming zones",cyber:"Cyber Threats",cyberDesc:"Ransomware feeds, BGP hijacks, DDoS detection",gdelt:"GDELT & News",gdeltDesc:"435+ RSS feeds, AI-scored GDELT events, live broadcasts",seismology:"Seismology & Natural",seismologyDesc:"USGS earthquakes, volcanic activity, severe weather"},Q5={free:"Free",freeTagline:"See everything",freeDesc:"The open-source dashboard",freeF1:"5-15 min refresh",freeF2:"435+ feeds, 45 map layers",freeF3:"BYOK for AI",freeF4:"Free forever",openDashboard:"Open Dashboard",pro:"Pro",proTagline:"Markets, macro & geopolitics",proDesc:"Your AI analyst",proF1:"Equity research & stock analysis",proF2:"+ daily briefs, economy analytics",proF3:"AI included, 1 key",proF4:"Early access pricing",enterprise:"Enterprise",enterpriseTagline:"Act before anyone else",enterpriseDesc:"The intelligence platform",entF1:"Live-edge + satellite imagery",entF2:"+ AI agents, 50K+ infra, SAR",entF3:"Custom AI, investor personas",entF4:"Contact us",contactSales:"Contact Sales"},Z5={proTier:"PRO TIER",title:"Your AI Analyst That Never Sleeps",subtitle:"The free dashboard shows you the world. Pro tells you what it means — stocks, macro trends, geopolitical risk, and the connections between them.",equityResearch:"Equity Research",equityResearchDesc:"Global stock analysis with financials visualization, analyst price targets, and valuation metrics. Track what moves markets.",geopoliticalAnalysis:"Geopolitical Analysis",geopoliticalAnalysisDesc:"Grand Chessboard strategic framework, Prisoners of Geography models, and central bank & monetary policy tracking.",economyAnalytics:"Economy Analytics",economyAnalyticsDesc:"GDP, inflation, interest rates, and growth cycles. Macro data correlated with market signals and geopolitical events.",riskMonitoring:"Risk Monitoring & Scenarios",riskMonitoringDesc:"Global risk scoring, scenario analysis, and geopolitical risk assessment. Convergence detection across market and political signals.",orbitalSurveillance:"Orbital Surveillance Analysis",orbitalSurveillanceDesc:"Overhead pass predictions, revisit frequency analysis, and imaging window alerts. Know when intelligence satellites are watching your areas of interest.",morningBriefs:"Daily Briefs & Flash Alerts",morningBriefsDesc:"AI-synthesized overnight developments ranked by your focus areas. Market-moving events and geopolitical shifts pushed in real-time.",oneKey:"22 Services, 1 Key",oneKeyDesc:"Finnhub, FRED, ACLED, UCDP, NASA FIRMS, AISStream, OpenSky, and more — all active, no separate registrations.",deliveryLabel:"Choose how intelligence finds you"},J5={morningBrief:"Morning Brief",markets:"Markets",marketsText:"S&P 500 futures -1.2% pre-market. Fed Chair testimony at 10am EST — rate-sensitive sectors under pressure. Analyst consensus shifting on Q2 earnings.",elevated:"Macro",elevatedText:"ECB holds rates at 3.75%. Euro area GDP revised up to 1.1%. Central bank divergence widening — USD/EUR at 3-month high.",watch:"Geopolitical",watchText:"Brent +2.3% on Hormuz AIS anomaly. 4 dark ships in 6h. Commodity supply chain risk elevated — energy sector correlations spiking."},$5={apiTier:"API TIER",title:"Programmatic Intelligence",subtitle:"For developers, analysts, and teams building on World Monitor data. Separate from Pro — use both or either.",restApi:"REST API across all 22 service domains",authenticated:"Authenticated per-key, rate-limited per tier",structured:"Structured JSON with cache headers and OpenAPI 3.1 docs",starter:"Starter",starterReqs:"1,000 req/day",starterWebhooks:"5 webhook rules",business:"Business",businessReqs:"50,000 req/day",businessWebhooks:"Unlimited webhooks + SLA",feedData:"Feed data into your dashboards, automate alerting via Zapier/n8n/Make, build custom scoring models on CII/risk data."},W5={enterpriseTier:"ENTERPRISE TIER",title:"Intelligence Infrastructure",subtitle:"For governments, institutions, trading desks, and organizations that need the full platform with maximum security, AI agents, TV apps, and data depth.",security:"Government-Grade Security",securityDesc:"Air-gapped deployment, on-premises Docker, dedicated cloud tenant, SOC 2 Type II path, SSO/MFA, and full audit trail.",aiAgents:"AI Agents & MCP",aiAgentsDesc:"Autonomous intelligence agents with investor personas. Connect World Monitor as a tool to Claude, GPT, or custom LLMs via MCP.",dataLayers:"Expanded Data Layers",dataLayersDesc:"Tens of thousands of infrastructure assets mapped globally. Satellite imagery integration with change detection and SAR.",connectors:"100+ Data Connectors",connectorsDesc:"PostgreSQL, Snowflake, Splunk, Sentinel, Jira, Slack, Teams, and more. Export to PDF, PowerPoint, CSV, GeoJSON.",whiteLabel:"White-Label, TV & Embeddable",whiteLabelDesc:"Your brand, your domain, your desktop app. Android TV app for SOC walls and trading floors. Embeddable iframe panels.",financial:"Financial Intelligence",financialDesc:"Earnings calendar, energy grid data, enhanced commodity tracking with cargo inference, sanctions screening with AIS correlation.",commodity:"Commodity Trading",commodityDesc:"Vessel tracking + cargo inference + supply chain graph. Know before the market moves.",government:"Government & Institutions",governmentDesc:"Air-gapped, AI agents, full situational awareness, MCP. No data leaves your network.",risk:"Risk Consultancies",riskDesc:"Scenario simulation, investor personas, branded PDF/PowerPoint reports on demand.",soc:"SOCs & CERT",socDesc:"Cyber threat layer, SIEM integration, BGP anomaly monitoring, ransomware feeds.",talkToSales:"Talk to Sales",contactFormTitle:"Talk to our team",contactFormSubtitle:"Tell us about your organization and we'll get back to you within one business day.",namePlaceholder:"Your name",emailPlaceholder:"Work email",orgPlaceholder:"Company *",phonePlaceholder:"Phone number *",messagePlaceholder:"What are you looking for?",workEmailRequired:"Please use your work email address",submitContact:"Send Message",contactSending:"Sending...",contactSent:"Message sent. We'll be in touch.",contactFailed:"Failed to send. Please email enterprise@worldmonitor.app"},I5={title:"Compare Tiers",feature:"Feature",freeHeader:"Free ($0)",proHeader:"Pro (Early Access)",apiHeader:"API (Coming Soon)",entHeader:"Enterprise (Contact)",dataRefresh:"Data refresh",dashboard:"Dashboard",ai:"AI",briefsAlerts:"Briefs & alerts",delivery:"Delivery",apiRow:"API",infraLayers:"Infrastructure layers",satellite:"Orbital Surveillance",connectorsRow:"Connectors",deployment:"Deployment",securityRow:"Security",f5_15min:"5-15 min",fLt60s:"<60 seconds",fPerRequest:"Per-request",fLiveEdge:"Live-edge",f50panels:"50+ panels",fWhiteLabel:"White-label",fBYOK:"BYOK",fIncluded:"Included",fAgentsPersonas:"Agents + personas",fDailyFlash:"Daily + flash",fTeamDist:"Team distribution",fSlackTgWa:"Slack/TG/WA/Email",fWebhook:"Webhook",fSiemMcp:"+ SIEM/MCP",fRestWebhook:"REST + webhook",fMcpBulk:"+ MCP + bulk",f45:"45",fTensOfThousands:"+ tens of thousands",fLiveTracking:"Live tracking",fPassAlerts:"Pass alerts + analysis",fImagerySar:"Imagery + SAR",f100plus:"100+",fCloud:"Cloud",fCloudOnPrem:"Cloud/on-prem/air-gap",fStandard:"Standard",fKeyAuth:"Key auth",fSsoMfa:"SSO/MFA/RBAC/audit",noteBelow:"The core platform remains free. Paid plans unlock equity research, macro analytics, AI briefings, and organizational use."},e3={title:"Frequently Asked Questions",q1:"Is World Monitor still free?",a1:"Yes. The core platform remains free. Pro adds equity research, macro analytics, and AI briefings. Enterprise adds team deployments and TV apps.",q2:"Why pay for Pro?",a2:"Pro is for investors, analysts, and professionals who want stock monitoring, geopolitical analysis, economy analytics, and AI-powered daily briefings — all under one key.",q3:"Who is Enterprise for?",a3:"Enterprise is for teams that need shared use, APIs, integrations, deployment options, and direct support.",q4:"Can I start with Pro and upgrade later?",a4:"Yes. Pro works for serious individuals. Enterprise is there when team and deployment needs grow.",q5:"Is this only for conflict monitoring?",a5:"No. World Monitor is primarily a global intelligence platform covering stock markets, macroeconomics, geopolitical analysis, energy, infrastructure, and more. Conflict tracking is one of many capabilities — not the focus.",q6:"Why keep the core platform free?",a6:"Because public access matters. Paid plans fund deeper workflows for serious users and organizations.",q7:"Can I still use my own API keys?",a7:"Yes. Bring-your-own-keys always works. Pro simply means you don't have to register for 20+ separate services.",q8:"What's MCP?",a8:"Model Context Protocol lets AI agents (Claude, GPT, or custom LLMs) use World Monitor as a tool — querying all 22 services, reading map state, and triggering analysis. Enterprise only."},t3={title:"Start with Pro. Scale to Enterprise.",subtitle:"Keep using World Monitor for free, or upgrade for equity research, macro analytics, and AI briefings. If your organization needs team access, TV apps, or API support, talk to us.",getPro:"Reserve Your Early Access",talkToSales:"Talk to Sales"},n3={beFirstInLine:"Be first in line.",lookingForEnterprise:"Looking for Enterprise?",contactUs:"Contact us",wiredArticle:"WIRED Article"},a3={submitting:"Submitting...",joinWaitlist:"Reserve Your Early Access",tooManyRequests:"Too many requests",failedTryAgain:"Failed — try again"},i3={alreadyOnList:"You're already on the list.",shareHint:"Share your link to move up the line. Each friend who joins bumps you closer to the front.",copied:"Copied!",shareOnX:"Share on X",linkedin:"LinkedIn",whatsapp:"WhatsApp",telegram:"Telegram",shareText:"I just joined the World Monitor Pro waitlist — stock monitoring, geopolitical analysis, and AI daily briefings in one platform. Join me:",joinWaitlistShare:"Join the World Monitor Pro waitlist:",youreIn:"You're in!",invitedBanner:"You've been invited — join the waitlist"},vx={nav:B5,hero:H5,wired:q5,twoPath:G5,whyUpgrade:Y5,livePreview:P5,socialProof:K5,audience:X5,dataCoverage:F5,tiers:Q5,proShowcase:Z5,slackMock:J5,apiSection:$5,enterpriseShowcase:W5,pricingTable:I5,faq:e3,finalCta:t3,footer:n3,form:a3,referral:i3},bx=["en","ar","bg","cs","de","el","es","fr","it","ja","ko","nl","pl","pt","ro","ru","sv","th","tr","vi","zh"],s3=new Set(bx),yy=new Set(["en"]),l3=new Set(["ar"]),r3=Object.assign({"./locales/ar.json":()=>Ze(()=>import("./ar-BHa0nEOe.js"),[]).then(i=>i.default),"./locales/bg.json":()=>Ze(()=>import("./bg-Ci69To5a.js"),[]).then(i=>i.default),"./locales/cs.json":()=>Ze(()=>import("./cs-CqKhwIlR.js"),[]).then(i=>i.default),"./locales/de.json":()=>Ze(()=>import("./de-B71p-f-t.js"),[]).then(i=>i.default),"./locales/el.json":()=>Ze(()=>import("./el-DJwjBufy.js"),[]).then(i=>i.default),"./locales/es.json":()=>Ze(()=>import("./es-aR_qLKIk.js"),[]).then(i=>i.default),"./locales/fr.json":()=>Ze(()=>import("./fr-BrtwTv_R.js"),[]).then(i=>i.default),"./locales/it.json":()=>Ze(()=>import("./it-DHbGtQXZ.js"),[]).then(i=>i.default),"./locales/ja.json":()=>Ze(()=>import("./ja-D8-35S3Y.js"),[]).then(i=>i.default),"./locales/ko.json":()=>Ze(()=>import("./ko-otMG-p7A.js"),[]).then(i=>i.default),"./locales/nl.json":()=>Ze(()=>import("./nl-B3DRC8p4.js"),[]).then(i=>i.default),"./locales/pl.json":()=>Ze(()=>import("./pl-DqoCbf3Z.js"),[]).then(i=>i.default),"./locales/pt.json":()=>Ze(()=>import("./pt-CqDblfWm.js"),[]).then(i=>i.default),"./locales/ro.json":()=>Ze(()=>import("./ro-DaIMP80d.js"),[]).then(i=>i.default),"./locales/ru.json":()=>Ze(()=>import("./ru-DN0TfVz-.js"),[]).then(i=>i.default),"./locales/sv.json":()=>Ze(()=>import("./sv-B8YGwHj7.js"),[]).then(i=>i.default),"./locales/th.json":()=>Ze(()=>import("./th-Dx5iTAoX.js"),[]).then(i=>i.default),"./locales/tr.json":()=>Ze(()=>import("./tr-DqKzKEKV.js"),[]).then(i=>i.default),"./locales/vi.json":()=>Ze(()=>import("./vi-ByRwBJoF.js"),[]).then(i=>i.default),"./locales/zh.json":()=>Ze(()=>import("./zh-Cf0ddDO-.js"),[]).then(i=>i.default)});function o3(i){var l;const a=((l=(i||"en").split("-")[0])==null?void 0:l.toLowerCase())||"en";return s3.has(a)?a:"en"}async function u3(i){const a=o3(i);if(yy.has(a))return a;const l=r3[`./locales/${a}.json`],r=l?await l():vx;return Pe.addResourceBundle(a,"translation",r,!0,!0),yy.add(a),a}async function c3(){if(Pe.isInitialized)return;await Pe.use(xx).init({resources:{en:{translation:vx}},supportedLngs:[...bx],nonExplicitSupportedLngs:!0,fallbackLng:"en",interpolation:{escapeValue:!1},detection:{order:["querystring","localStorage","navigator"],lookupQuerystring:"lang",caches:["localStorage"]}});const i=await u3(Pe.language||"en");i!=="en"&&await Pe.changeLanguage(i);const a=(Pe.language||i).split("-")[0]||"en";document.documentElement.setAttribute("lang",a==="zh"?"zh-CN":a),l3.has(a)&&document.documentElement.setAttribute("dir","rtl")}function S(i,a){return Pe.t(i,a)}const f3=[{name:"Free",price:0,period:"forever",description:"Get started with the essentials",features:["Core dashboard panels","Global news feed","Earthquake & weather alerts","Basic map view"],cta:"Get Started",href:"https://worldmonitor.app",highlighted:!1},{name:"Pro",monthlyPrice:19,annualPrice:190,description:"Full intelligence dashboard",features:["Everything in Free","AI stock analysis & backtesting","Daily market briefs","Military & geopolitical tracking","Custom widget builder","MCP data connectors","Priority data refresh"],monthlyProductId:"pdt_0NaysSFAQ0y30nJOJMBpg",annualProductId:"pdt_0NaysWqJBx3laiCzDbQfr",highlighted:!0},{name:"API",monthlyPrice:49,annualPrice:null,description:"Programmatic access to intelligence data",features:["REST API access","Real-time data streams","10,000 requests/day","Webhook notifications","Custom data exports"],monthlyProductId:"pdt_0NaysZwxCyk9Satf1jbqU",highlighted:!1},{name:"Enterprise",price:null,description:"Custom solutions for organizations",features:["Everything in Pro + API","Unlimited API requests","Dedicated support","Custom integrations","SLA guarantee","On-premise option"],cta:"Contact Sales",href:"mailto:enterprise@worldmonitor.app",highlighted:!1}];function xy(i,a){let l=`https://checkout.dodopayments.com/buy/${i}?quantity=1`;return a&&(l+=`&referral_code=${encodeURIComponent(a)}`),l}function d3(i,a){return i.price===0?{amount:"$0",suffix:"forever"}:i.price===null&&i.monthlyPrice===void 0?{amount:"Custom",suffix:"tailored to you"}:i.annualPrice===null&&i.monthlyPrice!==void 0?{amount:`$${i.monthlyPrice}`,suffix:"/mo"}:a==="annual"&&i.annualPrice!=null?{amount:`$${i.annualPrice}`,suffix:"/yr"}:{amount:`$${i.monthlyPrice}`,suffix:"/mo"}}function h3(i,a,l){if(i.cta&&i.href&&i.price===0)return{label:i.cta,href:i.href,external:!0};if(i.cta&&i.href&&i.price===null)return{label:i.cta,href:i.href,external:!0};if(i.monthlyProductId&&i.annualProductId){const r=a==="annual"?i.annualProductId:i.monthlyProductId;return{label:"Get Started",href:xy(r,l),external:!0}}return i.monthlyProductId?{label:"Get Started",href:xy(i.monthlyProductId,l),external:!0}:{label:"Learn More",href:"#",external:!1}}function m3({refCode:i}){const[a,l]=te.useState("monthly");return m.jsx("section",{id:"pricing",className:"py-24 px-6 border-t border-wm-border bg-[#060606]",children:m.jsxs("div",{className:"max-w-7xl mx-auto",children:[m.jsxs("div",{className:"text-center mb-16",children:[m.jsx(vi.h2,{className:"text-3xl md:text-5xl font-display font-bold mb-4",initial:{opacity:0,y:20},whileInView:{opacity:1,y:0},viewport:{once:!0},transition:{duration:.5},children:"Choose Your Plan"}),m.jsx(vi.p,{className:"text-wm-muted max-w-xl mx-auto mb-8",initial:{opacity:0,y:10},whileInView:{opacity:1,y:0},viewport:{once:!0},transition:{duration:.5,delay:.1},children:"From real-time monitoring to full intelligence infrastructure. Pick the tier that fits your mission."}),m.jsxs(vi.div,{className:"inline-flex items-center gap-3 bg-wm-card border border-wm-border rounded-sm p-1",initial:{opacity:0,y:10},whileInView:{opacity:1,y:0},viewport:{once:!0},transition:{duration:.5,delay:.2},children:[m.jsx("button",{onClick:()=>l("monthly"),className:`px-4 py-2 rounded-sm font-mono text-xs uppercase tracking-wider transition-colors ${a==="monthly"?"bg-wm-green text-wm-bg font-bold":"text-wm-muted hover:text-wm-text"}`,children:"Monthly"}),m.jsxs("button",{onClick:()=>l("annual"),className:`px-4 py-2 rounded-sm font-mono text-xs uppercase tracking-wider transition-colors flex items-center gap-2 ${a==="annual"?"bg-wm-green text-wm-bg font-bold":"text-wm-muted hover:text-wm-text"}`,children:["Annual",m.jsx("span",{className:`text-[10px] px-1.5 py-0.5 rounded-sm ${a==="annual"?"bg-wm-bg/20 text-wm-bg":"bg-wm-green/10 text-wm-green"}`,children:"Save 17%"})]})]})]}),m.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6",children:f3.map((r,u)=>{const f=d3(r,a),d=h3(r,a,i);return m.jsxs(vi.div,{className:`relative bg-zinc-900 rounded-lg p-6 flex flex-col ${r.highlighted?"border-2 border-wm-green shadow-lg shadow-wm-green/10":"border border-wm-border"}`,initial:{opacity:0,y:30},whileInView:{opacity:1,y:0},viewport:{once:!0},transition:{duration:.5,delay:u*.1},children:[r.highlighted&&m.jsxs("div",{className:"absolute -top-3 left-1/2 -translate-x-1/2 inline-flex items-center gap-1 bg-wm-green text-wm-bg px-3 py-1 rounded-full text-xs font-mono font-bold uppercase tracking-wider",children:[m.jsx(IA,{className:"w-3 h-3","aria-hidden":"true"}),"Most Popular"]}),m.jsx("h3",{className:`font-display text-lg font-bold mb-1 ${r.highlighted?"text-wm-green":"text-wm-text"}`,children:r.name}),m.jsx("p",{className:"text-xs text-wm-muted mb-4",children:r.description}),m.jsxs("div",{className:"mb-6",children:[m.jsx("span",{className:"text-4xl font-display font-bold",children:f.amount}),m.jsxs("span",{className:"text-sm text-wm-muted ml-1",children:["/",f.suffix]})]}),m.jsx("ul",{className:"space-y-3 mb-8 flex-1",children:r.features.map((h,y)=>m.jsxs("li",{className:"flex items-start gap-2 text-sm",children:[m.jsx(Yc,{className:`w-4 h-4 shrink-0 mt-0.5 ${r.highlighted?"text-wm-green":"text-wm-muted"}`,"aria-hidden":"true"}),m.jsx("span",{className:"text-wm-muted",children:h})]},y))}),m.jsxs("a",{href:d.href,target:d.external?"_blank":void 0,rel:d.external?"noreferrer":void 0,className:`block text-center py-3 rounded-sm font-mono text-xs uppercase tracking-wider font-bold transition-colors ${r.highlighted?"bg-wm-green text-wm-bg hover:bg-green-400":"border border-wm-border text-wm-muted hover:text-wm-text hover:border-wm-text"}`,children:[d.label," ",m.jsx(ja,{className:"w-3.5 h-3.5 inline-block ml-1","aria-hidden":"true"})]})]},r.name)})}),m.jsx("p",{className:"text-center text-xs text-wm-muted font-mono mt-8",children:"Have a promo code? Enter it during checkout."})]})})}const p3="/pro/assets/worldmonitor-7-mar-2026-CtI5YvxO.jpg",g3="data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0.11%2010.99%20124.78%2024.98'%3e%3cpath%20d='M105.375%2014.875v17.25h8.5c2.375%200%203.75-.375%204.75-1.25%201.25-1.125%201.875-3.125%201.875-7.375s-.625-6.25-1.875-7.375c-1-.875-2.375-1.25-4.75-1.25zM117%2023.5c0%203.75-.25%204.625-1%205.125-.5.375-1.125.5-2.375.5h-4.75V17.75h4.75c1.25%200%201.875%200%202.375.5.75.625%201%201.5%201%205.25zm7.875%2012.438H99.937V11h24.938zM79.563%2017.75v-2.875h14.75v5.5h-3.126V17.75h-6v4.125h4.75v2.75h-4.75v4.625h6.126v-3h3.124v5.875H79.564V29.25h2.374v-11.5zM66.188%2027.625c0%201.875.124%203.25.374%204.375h3.376c-.126-.875-.25-2.5-.25-4.625-.126-2.5-.876-2.875-2.626-3.25%202-.375%202.876-1.25%202.876-4.375%200-2.5-.376-3.5-1.126-4.125-.5-.5-1.374-.75-2.75-.75h-10.5v17.25h3.5v-6.75h4.876c1%200%201.374.125%201.75.375s.5.625.5%201.875zm-7.126-5v-4.75h5.626c.75%200%201%20.125%201.124.25.25.25.5.625.5%202.125s-.25%202-.5%202.25c-.124.125-.374.25-1.124.25zm15.876%2013.313h-25V11h24.937v24.938zM43.438%2029.25v2.875H31.562V29.25h4.25v-11.5h-4.25v-2.875h11.875v2.875h-4.25v11.5zM23.375%2014.875h-3.25L17.75%2028.5%2015%2015.875c-.125-.875-.5-1-1.25-1H12c-.75%200-1.125.25-1.25%201L8%2028.5%205.625%2014.875h-3.5L5.5%2031.25c.125.75.375.875%201.25.875h2.375c.75%200%201-.125%201.25-.875L13%2019.375l2.625%2011.875c.125.75.375.875%201.25.875h2.25c.75%200%201.125-.125%201.25-.875zm1.75%2021.063h-25V11h24.938v24.938z'%3e%3c/path%3e%3c/svg%3e",Sx="https://api.worldmonitor.app/api",y3="0x4AAAAAACnaYgHIyxclu8Tj",x3="https://worldmonitor.app/pro";function v3(){if(!window.turnstile)return 0;let i=0;return document.querySelectorAll(".cf-turnstile:not([data-rendered])").forEach(a=>{const l=window.turnstile.render(a,{sitekey:y3,size:"flexible",callback:r=>{a.dataset.token=r},"expired-callback":()=>{delete a.dataset.token},"error-callback":()=>{delete a.dataset.token}});a.dataset.rendered="true",a.dataset.widgetId=String(l),i++}),i}function Nf(){return new URLSearchParams(window.location.search).get("ref")||void 0}function b3(i){return String(i??"").replace(/[&<>"']/g,a=>({"&":"&","<":"<",">":">",'"':""","'":"'"})[a]||a)}function S3(i,a){if(a.referralCode==null&&a.status==null){const x=i.querySelector('button[type="submit"]');x&&(x.textContent=S("form.joinWaitlist"),x.disabled=!1);return}const l=b3(a.referralCode),r=`${x3}?ref=${l}`,u=encodeURIComponent(S("referral.shareText")),f=encodeURIComponent(r),d=(x,b,w)=>{const j=document.createElement(x);return j.className=b,w&&(j.textContent=w),j},h=d("div","text-center"),y=a.status==="already_registered",p=S("referral.shareHint");if(y?h.appendChild(d("p","text-lg font-display font-bold text-wm-green mb-2",S("referral.alreadyOnList"))):h.appendChild(d("p","text-lg font-display font-bold text-wm-green mb-2",S("referral.youreIn"))),h.appendChild(d("p","text-sm text-wm-muted mb-4",p)),l){const x=d("div","bg-wm-card border border-wm-border px-4 py-3 mb-4 font-mono text-xs text-wm-green break-all select-all cursor-pointer",r);x.addEventListener("click",()=>{navigator.clipboard.writeText(r).then(()=>{x.textContent=S("referral.copied"),setTimeout(()=>{x.textContent=r},2e3)})}),h.appendChild(x);const b=d("div","flex gap-3 justify-center flex-wrap"),w=[{label:S("referral.shareOnX"),href:`https://x.com/intent/tweet?text=${u}&url=${f}`},{label:S("referral.linkedin"),href:`https://www.linkedin.com/sharing/share-offsite/?url=${f}`},{label:S("referral.whatsapp"),href:`https://wa.me/?text=${u}%20${f}`},{label:S("referral.telegram"),href:`https://t.me/share/url?url=${f}&text=${encodeURIComponent(S("referral.joinWaitlistShare"))}`}];for(const j of w){const N=d("a","bg-wm-card border border-wm-border px-4 py-2 text-xs font-mono text-wm-muted hover:text-wm-text hover:border-wm-text transition-colors",j.label);N.href=j.href,N.target="_blank",N.rel="noreferrer",b.appendChild(N)}h.appendChild(b)}i.replaceWith(h)}async function wx(i,a){var y;const l=a.querySelector('button[type="submit"]'),r=l.textContent;l.disabled=!0,l.textContent=S("form.submitting");const u=((y=a.querySelector('input[name="website"]'))==null?void 0:y.value)||"",f=a.querySelector(".cf-turnstile"),d=(f==null?void 0:f.dataset.token)||"",h=Nf();try{const p=await fetch(`${Sx}/register-interest`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:i,source:"pro-waitlist",website:u,turnstileToken:d,referredBy:h})}),x=await p.json();if(!p.ok)throw new Error(x.error||"Registration failed");S3(a,{referralCode:x.referralCode,position:x.position,status:x.status})}catch(p){l.textContent=p.message==="Too many requests"?S("form.tooManyRequests"):S("form.failedTryAgain"),l.disabled=!1,f!=null&&f.dataset.widgetId&&window.turnstile&&(window.turnstile.reset(f.dataset.widgetId),delete f.dataset.token),setTimeout(()=>{l.textContent=r},3e3)}}const w3=()=>m.jsx("svg",{viewBox:"0 0 24 24",className:"w-5 h-5",fill:"currentColor","aria-hidden":"true",children:m.jsx("path",{d:"M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zM6.313 15.165a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zM8.834 6.313a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zM18.956 8.834a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zM17.688 8.834a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312zM15.165 18.956a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zM15.165 17.688a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313z"})}),Tx=()=>m.jsxs("a",{href:"https://worldmonitor.app",className:"flex items-center gap-2 hover:opacity-80 transition-opacity","aria-label":"World Monitor — Home",children:[m.jsxs("div",{className:"relative w-8 h-8 rounded-full bg-wm-card border border-wm-border flex items-center justify-center overflow-hidden",children:[m.jsx(Sr,{className:"w-5 h-5 text-wm-blue opacity-50 absolute","aria-hidden":"true"}),m.jsx(tA,{className:"w-6 h-6 text-wm-green absolute z-10","aria-hidden":"true"})]}),m.jsxs("div",{className:"flex flex-col",children:[m.jsx("span",{className:"font-display font-bold text-sm leading-none tracking-tight",children:"WORLD MONITOR"}),m.jsx("span",{className:"text-[9px] text-wm-muted font-mono uppercase tracking-widest leading-none mt-1",children:"by Someone.ceo"})]})]}),T3=()=>m.jsx("nav",{className:"fixed top-0 left-0 right-0 z-50 glass-panel border-b-0 border-x-0 rounded-none","aria-label":"Main navigation",children:m.jsxs("div",{className:"max-w-7xl mx-auto px-6 h-16 flex items-center justify-between",children:[m.jsx(Tx,{}),m.jsxs("div",{className:"hidden md:flex items-center gap-8 text-sm font-mono text-wm-muted",children:[m.jsx("a",{href:"#tiers",className:"hover:text-wm-text transition-colors",children:S("nav.free")}),m.jsx("a",{href:"#pro",className:"hover:text-wm-green transition-colors",children:S("nav.pro")}),m.jsx("a",{href:"#api",className:"hover:text-wm-text transition-colors",children:S("nav.api")}),m.jsx("a",{href:"#enterprise",className:"hover:text-wm-text transition-colors",children:S("nav.enterprise")})]}),m.jsx("a",{href:"#pricing",className:"bg-wm-green text-wm-bg px-4 py-2 rounded-sm font-mono text-xs uppercase tracking-wider font-bold hover:bg-green-400 transition-colors",children:S("nav.reserveAccess")})]})}),A3=()=>m.jsxs("a",{href:"https://www.wired.me/story/the-music-streaming-ceo-who-built-a-global-war-map",target:"_blank",rel:"noreferrer",className:"inline-flex items-center gap-2 px-3 py-1.5 rounded-full border border-wm-border bg-wm-card/50 text-wm-muted text-xs font-mono hover:border-wm-green/30 hover:text-wm-text transition-colors",children:[S("wired.asFeaturedIn")," ",m.jsx("span",{className:"text-wm-text font-bold",children:"WIRED"})," ",m.jsx(lx,{className:"w-3 h-3","aria-hidden":"true"})]}),N3=()=>m.jsxs("div",{className:"relative my-4 md:my-8 -mx-6",children:[m.jsx("div",{className:"absolute inset-0 flex items-center justify-center pointer-events-none",children:m.jsx("div",{className:"w-64 h-40 md:w-96 md:h-56 bg-wm-green/8 rounded-full blur-[80px]"})}),m.jsx("div",{className:"flex items-end justify-center gap-[3px] md:gap-1 h-28 md:h-44 relative px-4","aria-hidden":"true",children:Array.from({length:60}).map((r,u)=>{const f=Math.abs(u-30),d=f<=8,h=d?1-f/8:0,y=60+h*110,p=Math.max(8,35-f*.8);return m.jsx(vi.div,{className:`flex-1 max-w-2 md:max-w-3 rounded-sm ${d?"bg-wm-green":"bg-wm-muted/20"}`,style:d?{boxShadow:`0 0 ${6+h*12}px rgba(74,222,128,${h*.5})`}:void 0,initial:{height:d?y*.3:p*.5,opacity:d?.4:.08},animate:d?{height:[y*.5,y,y*.65,y*.9],opacity:[.6+h*.3,1,.75+h*.2,.95]}:{height:[p,p*.3,p*.7,p*.15,p*.5],opacity:[.2,.06,.15,.04,.12]},transition:{duration:d?2.5+h*.5:1+Math.random()*.6,repeat:1/0,repeatType:"reverse",delay:d?f*.07:Math.random()*.6,ease:"easeInOut"}},u)})})]}),j3=()=>m.jsxs("section",{className:"pt-28 pb-12 px-6 relative overflow-hidden",children:[m.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(circle_at_50%_20%,rgba(74,222,128,0.08)_0%,transparent_50%)] pointer-events-none"}),m.jsx("div",{className:"max-w-4xl mx-auto text-center relative z-10",children:m.jsxs(vi.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.6},children:[m.jsx("div",{className:"mb-4",children:m.jsx(A3,{})}),m.jsxs("h1",{className:"text-6xl md:text-8xl font-display font-bold tracking-tighter leading-[0.95]",children:[m.jsx("span",{className:"text-wm-muted/40",children:S("hero.noiseWord")}),m.jsx("span",{className:"mx-3 md:mx-5 text-wm-border/50",children:"→"}),m.jsx("span",{className:"text-transparent bg-clip-text bg-gradient-to-r from-wm-green to-emerald-300 text-glow",children:S("hero.signalWord")})]}),m.jsx(N3,{}),m.jsx("p",{className:"text-lg md:text-xl text-wm-muted max-w-xl mx-auto font-light leading-relaxed",children:S("hero.valueProps")}),Nf()&&m.jsxs("div",{className:"inline-flex items-center gap-2 px-4 py-2 mt-4 rounded-sm border border-wm-green/30 bg-wm-green/5 text-sm font-mono text-wm-green",children:[m.jsx($A,{className:"w-4 h-4","aria-hidden":"true"}),S("referral.invitedBanner")]}),m.jsxs("form",{className:"flex flex-col gap-3 max-w-md mx-auto mt-8",onSubmit:i=>{i.preventDefault();const a=i.currentTarget,l=new FormData(a).get("email");wx(l,a)},children:[m.jsx("input",{type:"text",name:"website",autoComplete:"off",tabIndex:-1,"aria-hidden":"true",className:"absolute opacity-0 h-0 w-0 pointer-events-none"}),m.jsxs("div",{className:"flex flex-col sm:flex-row gap-3",children:[m.jsx("input",{type:"email",name:"email",placeholder:S("hero.emailPlaceholder"),className:"flex-1 bg-wm-card border border-wm-border rounded-sm px-4 py-3 text-sm focus:outline-none focus:border-wm-green transition-colors font-mono",required:!0,"aria-label":S("hero.emailAriaLabel")}),m.jsxs("button",{type:"submit",className:"bg-wm-green text-wm-bg px-6 py-3 rounded-sm font-mono text-sm uppercase tracking-wider font-bold hover:bg-green-400 transition-colors flex items-center justify-center gap-2 whitespace-nowrap",children:[S("hero.reserveEarlyAccess")," ",m.jsx(ja,{className:"w-4 h-4","aria-hidden":"true"})]})]}),m.jsx("div",{className:"cf-turnstile mx-auto"})]}),m.jsxs("div",{className:"flex items-center justify-center gap-4 mt-4",children:[m.jsx("p",{className:"text-xs text-wm-muted font-mono",children:S("hero.launchingDate")}),m.jsx("span",{className:"text-wm-border",children:"|"}),m.jsxs("a",{href:"https://worldmonitor.app",className:"text-xs text-wm-green font-mono hover:text-green-300 transition-colors flex items-center gap-1",children:[S("hero.tryFreeDashboard")," ",m.jsx(ja,{className:"w-3 h-3","aria-hidden":"true"})]})]})]})})]}),E3=()=>m.jsx("section",{className:"border-y border-wm-border bg-wm-card/30 py-16 px-6",children:m.jsxs("div",{className:"max-w-5xl mx-auto",children:[m.jsx("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-8 text-center mb-12",children:[{value:"2M+",label:S("socialProof.uniqueVisitors")},{value:"421K",label:S("socialProof.peakDailyUsers")},{value:"190+",label:S("socialProof.countriesReached")},{value:"435+",label:S("socialProof.liveDataSources")}].map((i,a)=>m.jsxs("div",{children:[m.jsx("p",{className:"text-3xl md:text-4xl font-display font-bold text-wm-green",children:i.value}),m.jsx("p",{className:"text-xs font-mono text-wm-muted uppercase tracking-widest mt-1",children:i.label})]},a))}),m.jsxs("blockquote",{className:"max-w-3xl mx-auto text-center",children:[m.jsxs("p",{className:"text-lg md:text-xl text-wm-muted italic leading-relaxed",children:['"',S("socialProof.quote"),'"']}),m.jsx("footer",{className:"mt-6 flex items-center justify-center gap-3",children:m.jsx("a",{href:"https://www.wired.me/story/the-music-streaming-ceo-who-built-a-global-war-map",target:"_blank",rel:"noreferrer",className:"inline-flex items-center gap-2 text-wm-muted hover:text-wm-text transition-colors",children:m.jsx("img",{src:g3,alt:"WIRED",className:"h-5 brightness-0 invert opacity-60 hover:opacity-100 transition-opacity"})})})]})]})}),D3=()=>m.jsxs("section",{className:"py-24 px-6 max-w-5xl mx-auto",id:"tiers",children:[m.jsx("h2",{className:"sr-only",children:"Plans"}),m.jsxs("div",{className:"grid md:grid-cols-2 gap-8",children:[m.jsxs("div",{className:"bg-wm-card border border-wm-green p-8 relative border-glow",children:[m.jsx("div",{className:"absolute top-0 left-0 w-full h-1 bg-wm-green"}),m.jsx("h3",{className:"font-display text-2xl font-bold mb-2",children:S("twoPath.proTitle")}),m.jsx("p",{className:"text-sm text-wm-muted mb-6",children:S("twoPath.proDesc")}),m.jsx("ul",{className:"space-y-3 mb-8",children:[S("twoPath.proF1"),S("twoPath.proF2"),S("twoPath.proF3"),S("twoPath.proF4"),S("twoPath.proF5"),S("twoPath.proF6"),S("twoPath.proF7"),S("twoPath.proF8"),S("twoPath.proF9")].map((i,a)=>m.jsxs("li",{className:"flex items-start gap-3 text-sm",children:[m.jsx(Yc,{className:"w-4 h-4 shrink-0 mt-0.5 text-wm-green","aria-hidden":"true"}),m.jsx("span",{className:"text-wm-muted",children:i})]},a))}),m.jsx("a",{href:"#pricing",className:"block text-center py-2.5 rounded-sm font-mono text-xs uppercase tracking-wider font-bold bg-wm-green text-wm-bg hover:bg-green-400 transition-colors",children:S("twoPath.proCta")})]}),m.jsxs("div",{className:"bg-wm-card border border-wm-border p-8",children:[m.jsx("h3",{className:"font-display text-2xl font-bold mb-2",children:S("twoPath.entTitle")}),m.jsx("p",{className:"text-sm text-wm-muted mb-6",children:S("twoPath.entDesc")}),m.jsxs("ul",{className:"space-y-3 mb-8",children:[m.jsx("li",{className:"text-xs font-mono text-wm-green uppercase tracking-wider mb-1",children:S("twoPath.entF1")}),[S("twoPath.entF2"),S("twoPath.entF3"),S("twoPath.entF4"),S("twoPath.entF5"),S("twoPath.entF6"),S("twoPath.entF7"),S("twoPath.entF8"),S("twoPath.entF9"),S("twoPath.entF10"),S("twoPath.entF11")].map((i,a)=>m.jsxs("li",{className:"flex items-start gap-3 text-sm",children:[m.jsx(Yc,{className:"w-4 h-4 shrink-0 mt-0.5 text-wm-muted","aria-hidden":"true"}),m.jsx("span",{className:"text-wm-muted",children:i})]},a))]}),m.jsx("a",{href:"#enterprise",className:"block text-center py-2.5 rounded-sm font-mono text-xs uppercase tracking-wider font-bold border border-wm-border text-wm-muted hover:text-wm-text hover:border-wm-text transition-colors",children:S("twoPath.entCta")})]})]})]}),M3=()=>{const i=[{icon:m.jsx(bA,{className:"w-6 h-6","aria-hidden":"true"}),title:S("whyUpgrade.noiseTitle"),desc:S("whyUpgrade.noiseDesc")},{icon:m.jsx(fx,{className:"w-6 h-6","aria-hidden":"true"}),title:S("whyUpgrade.fasterTitle"),desc:S("whyUpgrade.fasterDesc")},{icon:m.jsx(KA,{className:"w-6 h-6","aria-hidden":"true"}),title:S("whyUpgrade.controlTitle"),desc:S("whyUpgrade.controlDesc")},{icon:m.jsx(cx,{className:"w-6 h-6","aria-hidden":"true"}),title:S("whyUpgrade.deeperTitle"),desc:S("whyUpgrade.deeperDesc")}];return m.jsx("section",{className:"py-24 px-6 border-t border-wm-border bg-wm-card/20",children:m.jsxs("div",{className:"max-w-5xl mx-auto",children:[m.jsx("h2",{className:"text-3xl md:text-5xl font-display font-bold mb-16 text-center",children:S("whyUpgrade.title")}),m.jsx("div",{className:"grid md:grid-cols-2 gap-8",children:i.map((a,l)=>m.jsxs("div",{className:"flex gap-5",children:[m.jsx("div",{className:"text-wm-green shrink-0 mt-1",children:a.icon}),m.jsxs("div",{children:[m.jsx("h3",{className:"font-bold text-lg mb-2",children:a.title}),m.jsx("p",{className:"text-sm text-wm-muted leading-relaxed",children:a.desc})]})]},l))})]})})},C3=()=>m.jsx("section",{className:"px-6 py-16",children:m.jsxs("div",{className:"max-w-6xl mx-auto",children:[m.jsxs("div",{className:"relative rounded-lg overflow-hidden border border-wm-border shadow-2xl shadow-wm-green/5",children:[m.jsxs("div",{className:"bg-wm-card px-4 py-2 border-b border-wm-border flex items-center gap-3",children:[m.jsxs("div",{className:"flex gap-1.5",children:[m.jsx("div",{className:"w-3 h-3 rounded-full bg-red-500/70"}),m.jsx("div",{className:"w-3 h-3 rounded-full bg-yellow-500/70"}),m.jsx("div",{className:"w-3 h-3 rounded-full bg-green-500/70"})]}),m.jsx("span",{className:"font-mono text-xs text-wm-muted ml-2",children:S("livePreview.windowTitle")}),m.jsxs("a",{href:"https://worldmonitor.app",target:"_blank",rel:"noreferrer",className:"ml-auto text-xs text-wm-green font-mono hover:text-green-300 transition-colors flex items-center gap-1",children:[S("livePreview.openFullScreen")," ",m.jsx(lx,{className:"w-3 h-3","aria-hidden":"true"})]})]}),m.jsxs("div",{className:"relative aspect-[16/9] bg-black",children:[m.jsx("img",{src:p3,alt:"World Monitor Dashboard",className:"absolute inset-0 w-full h-full object-cover"}),m.jsx("iframe",{src:"https://worldmonitor.app?alert=false",title:S("livePreview.iframeTitle"),className:"relative w-full h-full border-0",loading:"lazy",sandbox:"allow-scripts allow-same-origin allow-popups allow-popups-to-escape-sandbox"}),m.jsx("div",{className:"absolute inset-0 pointer-events-none bg-gradient-to-t from-wm-bg/80 via-transparent to-transparent"}),m.jsx("div",{className:"absolute bottom-4 left-0 right-0 text-center pointer-events-auto",children:m.jsxs("a",{href:"https://worldmonitor.app",target:"_blank",rel:"noreferrer",className:"inline-flex items-center gap-2 bg-wm-green text-wm-bg px-6 py-3 rounded-sm font-mono text-sm uppercase tracking-wider font-bold hover:bg-green-400 transition-colors",children:[S("livePreview.tryLiveDashboard")," ",m.jsx(ja,{className:"w-4 h-4","aria-hidden":"true"})]})})]})]}),m.jsx("p",{className:"text-center text-xs text-wm-muted font-mono mt-4",children:S("livePreview.description")})]})}),O3=()=>{const a=["Finnhub","FRED","Bloomberg","CNBC","Nikkei","CoinGecko","Polymarket","Reuters","ACLED","UCDP","GDELT","NASA FIRMS","USGS","OpenSky","AISStream","Cloudflare Radar","BGPStream","GPSJam","NOAA","Copernicus","IAEA","Al Jazeera","Sky News","Euronews","DW News","France 24","OilPrice","Rigzone","Maritime Executive","Hellenic Shipping News","Defense One","Jane's","The War Zone","TechCrunch","Ars Technica","The Verge","Wired","Krebs on Security","BleepingComputer","The Record"].join(" · ");return m.jsx("section",{className:"border-y border-wm-border bg-wm-card/20 overflow-hidden py-4","aria-label":"Data sources",children:m.jsxs("div",{className:"marquee-track whitespace-nowrap font-mono text-xs text-wm-muted uppercase tracking-widest",children:[m.jsxs("span",{className:"inline-block px-4",children:[a," · "]}),m.jsxs("span",{className:"inline-block px-4",children:[a," · "]})]})})},R3=()=>m.jsx("section",{className:"py-24 px-6 border-t border-wm-border bg-wm-card/30",id:"pro",children:m.jsxs("div",{className:"max-w-7xl mx-auto grid lg:grid-cols-2 gap-16 items-start",children:[m.jsxs("div",{children:[m.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full border border-wm-green/30 bg-wm-green/10 text-wm-green text-xs font-mono mb-6",children:S("proShowcase.proTier")}),m.jsx("h2",{className:"text-3xl md:text-5xl font-display font-bold mb-6",children:S("proShowcase.title")}),m.jsx("p",{className:"text-wm-muted mb-8",children:S("proShowcase.subtitle")}),m.jsxs("div",{className:"space-y-6",children:[m.jsxs("div",{className:"flex gap-4",children:[m.jsx(fx,{className:"w-6 h-6 text-wm-green shrink-0","aria-hidden":"true"}),m.jsxs("div",{children:[m.jsx("h3",{className:"font-bold mb-1",children:S("proShowcase.equityResearch")}),m.jsx("p",{className:"text-sm text-wm-muted",children:S("proShowcase.equityResearchDesc")})]})]}),m.jsxs("div",{className:"flex gap-4",children:[m.jsx(Sr,{className:"w-6 h-6 text-wm-green shrink-0","aria-hidden":"true"}),m.jsxs("div",{children:[m.jsx("h3",{className:"font-bold mb-1",children:S("proShowcase.geopoliticalAnalysis")}),m.jsx("p",{className:"text-sm text-wm-muted",children:S("proShowcase.geopoliticalAnalysisDesc")})]})]}),m.jsxs("div",{className:"flex gap-4",children:[m.jsx(Tf,{className:"w-6 h-6 text-wm-green shrink-0","aria-hidden":"true"}),m.jsxs("div",{children:[m.jsx("h3",{className:"font-bold mb-1",children:S("proShowcase.economyAnalytics")}),m.jsx("p",{className:"text-sm text-wm-muted",children:S("proShowcase.economyAnalyticsDesc")})]})]}),m.jsxs("div",{className:"flex gap-4",children:[m.jsx(Af,{className:"w-6 h-6 text-wm-green shrink-0","aria-hidden":"true"}),m.jsxs("div",{children:[m.jsx("h3",{className:"font-bold mb-1",children:S("proShowcase.riskMonitoring")}),m.jsx("p",{className:"text-sm text-wm-muted",children:S("proShowcase.riskMonitoringDesc")})]})]}),m.jsxs("div",{className:"flex gap-4",children:[m.jsx(cx,{className:"w-6 h-6 text-wm-green shrink-0","aria-hidden":"true"}),m.jsxs("div",{children:[m.jsx("h4",{className:"font-bold mb-1",children:S("proShowcase.orbitalSurveillance")}),m.jsx("p",{className:"text-sm text-wm-muted",children:S("proShowcase.orbitalSurveillanceDesc")})]})]}),m.jsxs("div",{className:"flex gap-4",children:[m.jsx(dA,{className:"w-6 h-6 text-wm-green shrink-0","aria-hidden":"true"}),m.jsxs("div",{children:[m.jsx("h3",{className:"font-bold mb-1",children:S("proShowcase.morningBriefs")}),m.jsx("p",{className:"text-sm text-wm-muted",children:S("proShowcase.morningBriefsDesc")})]})]}),m.jsxs("div",{className:"flex gap-4",children:[m.jsx(TA,{className:"w-6 h-6 text-wm-green shrink-0","aria-hidden":"true"}),m.jsxs("div",{children:[m.jsx("h3",{className:"font-bold mb-1",children:S("proShowcase.oneKey")}),m.jsx("p",{className:"text-sm text-wm-muted",children:S("proShowcase.oneKeyDesc")})]})]})]}),m.jsxs("div",{className:"mt-10 pt-8 border-t border-wm-border",children:[m.jsx("p",{className:"font-mono text-xs text-wm-muted uppercase tracking-widest mb-4",children:S("proShowcase.deliveryLabel")}),m.jsx("div",{className:"flex gap-6",children:[{icon:m.jsx(w3,{}),label:"Slack"},{icon:m.jsx(HA,{className:"w-5 h-5","aria-hidden":"true"}),label:"Telegram"},{icon:m.jsx(RA,{className:"w-5 h-5","aria-hidden":"true"}),label:"WhatsApp"},{icon:m.jsx(CA,{className:"w-5 h-5","aria-hidden":"true"}),label:"Email"},{icon:m.jsx(zA,{className:"w-5 h-5","aria-hidden":"true"}),label:"Discord"}].map((i,a)=>m.jsxs("div",{className:"flex flex-col items-center gap-1.5 text-wm-muted hover:text-wm-text transition-colors cursor-pointer",children:[i.icon,m.jsx("span",{className:"text-[10px] font-mono",children:i.label})]},a))})]})]}),m.jsxs("div",{className:"bg-[#1a1d21] rounded-lg border border-[#35373b] overflow-hidden shadow-2xl sticky top-24",children:[m.jsxs("div",{className:"bg-[#222529] px-4 py-3 border-b border-[#35373b] flex items-center gap-3",children:[m.jsx("div",{className:"w-3 h-3 rounded-full bg-red-500"}),m.jsx("div",{className:"w-3 h-3 rounded-full bg-yellow-500"}),m.jsx("div",{className:"w-3 h-3 rounded-full bg-green-500"}),m.jsx("span",{className:"ml-2 font-mono text-xs text-gray-400",children:"#world-monitor-alerts"})]}),m.jsx("div",{className:"p-6 space-y-6 font-sans text-sm",children:m.jsxs("div",{className:"flex gap-4",children:[m.jsx("div",{className:"w-10 h-10 rounded bg-wm-green/20 flex items-center justify-center shrink-0",children:m.jsx(Sr,{className:"w-6 h-6 text-wm-green","aria-hidden":"true"})}),m.jsxs("div",{children:[m.jsxs("div",{className:"flex items-baseline gap-2 mb-1",children:[m.jsx("span",{className:"font-bold text-gray-200",children:"World Monitor"}),m.jsx("span",{className:"text-xs text-gray-500 bg-gray-800 px-1 rounded",children:"APP"}),m.jsx("span",{className:"text-xs text-gray-500",children:"8:00 AM"})]}),m.jsxs("p",{className:"text-gray-300 font-bold mb-3",children:[S("slackMock.morningBrief")," · Mar 6"]}),m.jsxs("div",{className:"space-y-3",children:[m.jsxs("div",{className:"pl-3 border-l-2 border-blue-500",children:[m.jsx("span",{className:"text-blue-400 font-bold text-xs uppercase tracking-wider",children:S("slackMock.markets")}),m.jsx("p",{className:"text-gray-300 mt-1",children:S("slackMock.marketsText")})]}),m.jsxs("div",{className:"pl-3 border-l-2 border-orange-500",children:[m.jsx("span",{className:"text-orange-400 font-bold text-xs uppercase tracking-wider",children:S("slackMock.elevated")}),m.jsx("p",{className:"text-gray-300 mt-1",children:S("slackMock.elevatedText")})]}),m.jsxs("div",{className:"pl-3 border-l-2 border-yellow-500",children:[m.jsx("span",{className:"text-yellow-400 font-bold text-xs uppercase tracking-wider",children:S("slackMock.watch")}),m.jsx("p",{className:"text-gray-300 mt-1",children:S("slackMock.watchText")})]})]})]})]})})]})]})}),_3=()=>{const i=[{icon:m.jsx(rA,{className:"w-6 h-6","aria-hidden":"true"}),title:S("audience.investorsTitle"),desc:S("audience.investorsDesc")},{icon:m.jsx(xA,{className:"w-6 h-6","aria-hidden":"true"}),title:S("audience.tradersTitle"),desc:S("audience.tradersDesc")},{icon:m.jsx(UA,{className:"w-6 h-6","aria-hidden":"true"}),title:S("audience.researchersTitle"),desc:S("audience.researchersDesc")},{icon:m.jsx(Sr,{className:"w-6 h-6","aria-hidden":"true"}),title:S("audience.journalistsTitle"),desc:S("audience.journalistsDesc")},{icon:m.jsx(NA,{className:"w-6 h-6","aria-hidden":"true"}),title:S("audience.govTitle"),desc:S("audience.govDesc")},{icon:m.jsx(iA,{className:"w-6 h-6","aria-hidden":"true"}),title:S("audience.teamsTitle"),desc:S("audience.teamsDesc")}];return m.jsx("section",{className:"py-24 px-6",children:m.jsxs("div",{className:"max-w-5xl mx-auto",children:[m.jsx("h2",{className:"text-3xl md:text-5xl font-display font-bold mb-16 text-center",children:S("audience.title")}),m.jsx("div",{className:"grid md:grid-cols-3 gap-6",children:i.map((a,l)=>m.jsxs("div",{className:"bg-wm-card border border-wm-border p-6 hover:border-wm-green/30 transition-colors",children:[m.jsx("div",{className:"text-wm-green mb-4",children:a.icon}),m.jsx("h3",{className:"font-bold mb-2",children:a.title}),m.jsx("p",{className:"text-sm text-wm-muted",children:a.desc})]},l))})]})})},z3=()=>m.jsx("section",{className:"py-24 px-6 border-y border-wm-border bg-[#0a0a0a]",id:"api",children:m.jsxs("div",{className:"max-w-7xl mx-auto grid lg:grid-cols-2 gap-16 items-center",children:[m.jsx("div",{className:"order-2 lg:order-1",children:m.jsxs("div",{className:"bg-black border border-wm-border rounded-lg overflow-hidden font-mono text-sm",children:[m.jsxs("div",{className:"bg-wm-card px-4 py-2 border-b border-wm-border flex items-center gap-2",children:[m.jsx(QA,{className:"w-4 h-4 text-wm-muted","aria-hidden":"true"}),m.jsx("span",{className:"text-wm-muted text-xs",children:"api.worldmonitor.app"})]}),m.jsx("div",{className:"p-6 text-gray-300 overflow-x-auto",children:m.jsx("pre",{children:m.jsxs("code",{children:[m.jsx("span",{className:"text-wm-blue",children:"curl"})," \\",m.jsx("br",{}),m.jsx("span",{className:"text-wm-green",children:'"https://api.worldmonitor.app/v1/intelligence/convergence?region=MENA&time_window=6h"'})," \\",m.jsx("br",{}),"-H ",m.jsx("span",{className:"text-wm-green",children:'"Authorization: Bearer wm_live_xxx"'}),m.jsx("br",{}),m.jsx("br",{}),m.jsx("span",{className:"text-wm-muted",children:"{"}),m.jsx("br",{}),m.jsx("span",{className:"text-wm-blue",children:'"status"'}),": ",m.jsx("span",{className:"text-wm-green",children:'"success"'}),",",m.jsx("br",{}),m.jsx("span",{className:"text-wm-blue",children:'"data"'}),": ",m.jsx("span",{className:"text-wm-muted",children:"["}),m.jsx("br",{}),m.jsx("span",{className:"text-wm-muted",children:"{"}),m.jsx("br",{}),m.jsx("span",{className:"text-wm-blue",children:'"type"'}),": ",m.jsx("span",{className:"text-wm-green",children:'"multi_signal_convergence"'}),",",m.jsx("br",{}),m.jsx("span",{className:"text-wm-blue",children:'"signals"'}),": ",m.jsx("span",{className:"text-wm-muted",children:'["military_flights", "ais_dark_ships", "oref_sirens"]'}),",",m.jsx("br",{}),m.jsx("span",{className:"text-wm-blue",children:'"confidence"'}),": ",m.jsx("span",{className:"text-orange-400",children:"0.92"}),",",m.jsx("br",{}),m.jsx("span",{className:"text-wm-blue",children:'"location"'}),": ",m.jsx("span",{className:"text-wm-muted",children:"{"})," ",m.jsx("span",{className:"text-wm-blue",children:'"lat"'}),": ",m.jsx("span",{className:"text-orange-400",children:"34.05"}),", ",m.jsx("span",{className:"text-wm-blue",children:'"lng"'}),": ",m.jsx("span",{className:"text-orange-400",children:"35.12"})," ",m.jsx("span",{className:"text-wm-muted",children:"}"}),m.jsx("br",{}),m.jsx("span",{className:"text-wm-muted",children:"}"}),m.jsx("br",{}),m.jsx("span",{className:"text-wm-muted",children:"]"}),m.jsx("br",{}),m.jsx("span",{className:"text-wm-muted",children:"}"})]})})})]})}),m.jsxs("div",{className:"order-1 lg:order-2",children:[m.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full border border-wm-border bg-wm-card text-wm-muted text-xs font-mono mb-6",children:S("apiSection.apiTier")}),m.jsx("h2",{className:"text-3xl md:text-5xl font-display font-bold mb-6",children:S("apiSection.title")}),m.jsx("p",{className:"text-wm-muted mb-8",children:S("apiSection.subtitle")}),m.jsxs("ul",{className:"space-y-4 mb-8",children:[m.jsxs("li",{className:"flex items-start gap-3",children:[m.jsx(GA,{className:"w-5 h-5 text-wm-muted shrink-0","aria-hidden":"true"}),m.jsx("span",{className:"text-sm",children:S("apiSection.restApi")})]}),m.jsxs("li",{className:"flex items-start gap-3",children:[m.jsx(DA,{className:"w-5 h-5 text-wm-muted shrink-0","aria-hidden":"true"}),m.jsx("span",{className:"text-sm",children:S("apiSection.authenticated")})]}),m.jsxs("li",{className:"flex items-start gap-3",children:[m.jsx(pA,{className:"w-5 h-5 text-wm-muted shrink-0","aria-hidden":"true"}),m.jsx("span",{className:"text-sm",children:S("apiSection.structured")})]})]}),m.jsxs("div",{className:"grid grid-cols-2 gap-4 mb-8 p-4 bg-wm-card border border-wm-border rounded-sm",children:[m.jsxs("div",{children:[m.jsx("p",{className:"font-mono text-xs text-wm-muted uppercase tracking-widest mb-2",children:S("apiSection.starter")}),m.jsx("p",{className:"text-sm font-bold",children:S("apiSection.starterReqs")}),m.jsx("p",{className:"text-xs text-wm-muted",children:S("apiSection.starterWebhooks")})]}),m.jsxs("div",{children:[m.jsx("p",{className:"font-mono text-xs text-wm-muted uppercase tracking-widest mb-2",children:S("apiSection.business")}),m.jsx("p",{className:"text-sm font-bold",children:S("apiSection.businessReqs")}),m.jsx("p",{className:"text-xs text-wm-muted",children:S("apiSection.businessWebhooks")})]})]}),m.jsx("p",{className:"text-sm text-wm-muted border-l-2 border-wm-border pl-4",children:S("apiSection.feedData")})]})]})}),L3=()=>m.jsx("section",{className:"py-24 px-6",id:"enterprise",children:m.jsxs("div",{className:"max-w-7xl mx-auto",children:[m.jsxs("div",{className:"text-center mb-16",children:[m.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full border border-wm-border bg-wm-card text-wm-muted text-xs font-mono mb-6",children:S("enterpriseShowcase.enterpriseTier")}),m.jsx("h2",{className:"text-3xl md:text-5xl font-display font-bold mb-6",children:S("enterpriseShowcase.title")}),m.jsx("p",{className:"text-wm-muted max-w-2xl mx-auto",children:S("enterpriseShowcase.subtitle")})]}),m.jsxs("div",{className:"grid md:grid-cols-3 gap-6 mb-6",children:[m.jsxs("div",{className:"bg-wm-card border border-wm-border p-6",children:[m.jsx(Af,{className:"w-8 h-8 text-wm-muted mb-4","aria-hidden":"true"}),m.jsx("h3",{className:"font-bold mb-2",children:S("enterpriseShowcase.security")}),m.jsx("p",{className:"text-sm text-wm-muted",children:S("enterpriseShowcase.securityDesc")})]}),m.jsxs("div",{className:"bg-wm-card border border-wm-border p-6",children:[m.jsx(sx,{className:"w-8 h-8 text-wm-muted mb-4","aria-hidden":"true"}),m.jsx("h3",{className:"font-bold mb-2",children:S("enterpriseShowcase.aiAgents")}),m.jsx("p",{className:"text-sm text-wm-muted",children:S("enterpriseShowcase.aiAgentsDesc")})]}),m.jsxs("div",{className:"bg-wm-card border border-wm-border p-6",children:[m.jsx(rx,{className:"w-8 h-8 text-wm-muted mb-4","aria-hidden":"true"}),m.jsx("h3",{className:"font-bold mb-2",children:S("enterpriseShowcase.dataLayers")}),m.jsx("p",{className:"text-sm text-wm-muted",children:S("enterpriseShowcase.dataLayersDesc")})]})]}),m.jsxs("div",{className:"grid md:grid-cols-3 gap-6 mb-12",children:[m.jsxs("div",{className:"bg-wm-card border border-wm-border p-6",children:[m.jsx(ux,{className:"w-8 h-8 text-wm-muted mb-4","aria-hidden":"true"}),m.jsx("h3",{className:"font-bold mb-2",children:S("enterpriseShowcase.connectors")}),m.jsx("p",{className:"text-sm text-wm-muted",children:S("enterpriseShowcase.connectorsDesc")})]}),m.jsxs("div",{className:"bg-wm-card border border-wm-border p-6",children:[m.jsx(ox,{className:"w-8 h-8 text-wm-muted mb-4","aria-hidden":"true"}),m.jsx("h3",{className:"font-bold mb-2",children:S("enterpriseShowcase.whiteLabel")}),m.jsx("p",{className:"text-sm text-wm-muted",children:S("enterpriseShowcase.whiteLabelDesc")})]}),m.jsxs("div",{className:"bg-wm-card border border-wm-border p-6",children:[m.jsx(Tf,{className:"w-8 h-8 text-wm-muted mb-4","aria-hidden":"true"}),m.jsx("h3",{className:"font-bold mb-2",children:S("enterpriseShowcase.financial")}),m.jsx("p",{className:"text-sm text-wm-muted",children:S("enterpriseShowcase.financialDesc")})]})]}),m.jsxs("div",{className:"data-grid mb-12",children:[m.jsxs("div",{className:"data-cell",children:[m.jsx("h4",{className:"font-mono text-xs text-wm-muted uppercase tracking-widest mb-2",children:S("enterpriseShowcase.commodity")}),m.jsx("p",{className:"text-sm",children:S("enterpriseShowcase.commodityDesc")})]}),m.jsxs("div",{className:"data-cell",children:[m.jsx("h4",{className:"font-mono text-xs text-wm-muted uppercase tracking-widest mb-2",children:S("enterpriseShowcase.government")}),m.jsx("p",{className:"text-sm",children:S("enterpriseShowcase.governmentDesc")})]}),m.jsxs("div",{className:"data-cell",children:[m.jsx("h4",{className:"font-mono text-xs text-wm-muted uppercase tracking-widest mb-2",children:S("enterpriseShowcase.risk")}),m.jsx("p",{className:"text-sm",children:S("enterpriseShowcase.riskDesc")})]}),m.jsxs("div",{className:"data-cell",children:[m.jsx("h4",{className:"font-mono text-xs text-wm-muted uppercase tracking-widest mb-2",children:S("enterpriseShowcase.soc")}),m.jsx("p",{className:"text-sm",children:S("enterpriseShowcase.socDesc")})]})]}),m.jsx("div",{className:"text-center mt-12",children:m.jsxs("a",{href:"#enterprise-contact","aria-label":"Talk to sales about Enterprise plans",className:"inline-flex items-center gap-2 bg-wm-green text-wm-bg px-8 py-3 rounded-sm font-mono text-sm uppercase tracking-wider font-bold hover:bg-green-400 transition-colors",children:[S("enterpriseShowcase.talkToSales")," ",m.jsx(ja,{className:"w-4 h-4","aria-hidden":"true"})]})})]})}),V3=()=>{const i=[{feature:S("pricingTable.dataRefresh"),free:S("pricingTable.f5_15min"),pro:S("pricingTable.fLt60s"),api:S("pricingTable.fPerRequest"),ent:S("pricingTable.fLiveEdge")},{feature:S("pricingTable.dashboard"),free:S("pricingTable.f50panels"),pro:S("pricingTable.f50panels"),api:"—",ent:S("pricingTable.fWhiteLabel")},{feature:S("pricingTable.ai"),free:S("pricingTable.fBYOK"),pro:S("pricingTable.fIncluded"),api:"—",ent:S("pricingTable.fAgentsPersonas")},{feature:S("pricingTable.briefsAlerts"),free:"—",pro:S("pricingTable.fDailyFlash"),api:"—",ent:S("pricingTable.fTeamDist")},{feature:S("pricingTable.delivery"),free:"—",pro:S("pricingTable.fSlackTgWa"),api:S("pricingTable.fWebhook"),ent:S("pricingTable.fSiemMcp")},{feature:S("pricingTable.apiRow"),free:"—",pro:"—",api:S("pricingTable.fRestWebhook"),ent:S("pricingTable.fMcpBulk")},{feature:S("pricingTable.infraLayers"),free:S("pricingTable.f45"),pro:S("pricingTable.f45"),api:"—",ent:S("pricingTable.fTensOfThousands")},{feature:S("pricingTable.satellite"),free:S("pricingTable.fLiveTracking"),pro:S("pricingTable.fPassAlerts"),api:"—",ent:S("pricingTable.fImagerySar")},{feature:S("pricingTable.connectorsRow"),free:"—",pro:"—",api:"—",ent:S("pricingTable.f100plus")},{feature:S("pricingTable.deployment"),free:S("pricingTable.fCloud"),pro:S("pricingTable.fCloud"),api:S("pricingTable.fCloud"),ent:S("pricingTable.fCloudOnPrem")},{feature:S("pricingTable.securityRow"),free:S("pricingTable.fStandard"),pro:S("pricingTable.fStandard"),api:S("pricingTable.fKeyAuth"),ent:S("pricingTable.fSsoMfa")}];return m.jsxs("section",{className:"py-24 px-6 max-w-7xl mx-auto",children:[m.jsx("div",{className:"text-center mb-16",children:m.jsx("h2",{className:"text-3xl md:text-5xl font-display font-bold mb-6",children:S("pricingTable.title")})}),m.jsxs("div",{className:"hidden md:block",children:[m.jsxs("div",{className:"grid grid-cols-5 gap-4 mb-4 pb-4 border-b border-wm-border font-mono text-xs uppercase tracking-widest text-wm-muted",children:[m.jsx("div",{children:S("pricingTable.feature")}),m.jsx("div",{children:S("pricingTable.freeHeader")}),m.jsx("div",{className:"text-wm-green",children:S("pricingTable.proHeader")}),m.jsx("div",{children:S("pricingTable.apiHeader")}),m.jsx("div",{children:S("pricingTable.entHeader")})]}),i.map((a,l)=>m.jsxs("div",{className:"grid grid-cols-5 gap-4 py-4 border-b border-wm-border/50 text-sm hover:bg-wm-card/50 transition-colors",children:[m.jsx("div",{className:"font-medium",children:a.feature}),m.jsx("div",{className:"text-wm-muted",children:a.free}),m.jsx("div",{className:"text-wm-green",children:a.pro}),m.jsx("div",{className:"text-wm-muted",children:a.api}),m.jsx("div",{className:"text-wm-muted",children:a.ent})]},l))]}),m.jsx("div",{className:"md:hidden space-y-4",children:i.map((a,l)=>m.jsxs("div",{className:"bg-wm-card border border-wm-border p-4 rounded-sm",children:[m.jsx("p",{className:"font-medium text-sm mb-3",children:a.feature}),m.jsxs("div",{className:"grid grid-cols-2 gap-2 text-xs",children:[m.jsxs("div",{children:[m.jsxs("span",{className:"text-wm-muted",children:[S("tiers.free"),":"]})," ",a.free]}),m.jsxs("div",{children:[m.jsxs("span",{className:"text-wm-green",children:[S("tiers.pro"),":"]})," ",m.jsx("span",{className:"text-wm-green",children:a.pro})]}),m.jsxs("div",{children:[m.jsxs("span",{className:"text-wm-muted",children:[S("nav.api"),":"]})," ",a.api]}),m.jsxs("div",{children:[m.jsxs("span",{className:"text-wm-muted",children:[S("tiers.enterprise"),":"]})," ",a.ent]})]})]},l))}),m.jsx("p",{className:"text-center text-sm text-wm-muted mt-8",children:S("pricingTable.noteBelow")})]})},k3=()=>{const i=[{q:S("faq.q1"),a:S("faq.a1"),open:!0},{q:S("faq.q2"),a:S("faq.a2")},{q:S("faq.q3"),a:S("faq.a3")},{q:S("faq.q4"),a:S("faq.a4")},{q:S("faq.q5"),a:S("faq.a5")},{q:S("faq.q6"),a:S("faq.a6")},{q:S("faq.q7"),a:S("faq.a7")},{q:S("faq.q8"),a:S("faq.a8")}];return m.jsxs("section",{className:"py-24 px-6 max-w-3xl mx-auto",children:[m.jsx("h2",{className:"text-3xl font-display font-bold mb-12 text-center",children:S("faq.title")}),m.jsx("div",{className:"space-y-4",children:i.map((a,l)=>m.jsxs("details",{open:a.open,className:"group bg-wm-card border border-wm-border rounded-sm [&_summary::-webkit-details-marker]:hidden",children:[m.jsxs("summary",{className:"flex items-center justify-between p-6 cursor-pointer font-medium",children:[a.q,m.jsx(cA,{className:"w-5 h-5 text-wm-muted group-open:rotate-180 transition-transform","aria-hidden":"true"})]}),m.jsx("div",{className:"px-6 pb-6 text-wm-muted text-sm border-t border-wm-border pt-4 mt-2",children:a.a})]},l))})]})},U3=()=>m.jsxs("footer",{className:"border-t border-wm-border bg-[#020202] pt-24 pb-12 px-6 text-center",id:"waitlist",children:[m.jsxs("div",{className:"max-w-2xl mx-auto mb-16",children:[m.jsx("h2",{className:"text-4xl font-display font-bold mb-4",children:S("finalCta.title")}),m.jsx("p",{className:"text-wm-muted mb-8",children:S("finalCta.subtitle")}),m.jsxs("form",{className:"flex flex-col gap-3 max-w-md mx-auto mb-6",onSubmit:i=>{i.preventDefault();const a=i.currentTarget,l=new FormData(a).get("email");wx(l,a)},children:[m.jsx("input",{type:"text",name:"website",autoComplete:"off",tabIndex:-1,"aria-hidden":"true",className:"absolute opacity-0 h-0 w-0 pointer-events-none"}),m.jsxs("div",{className:"flex flex-col sm:flex-row gap-3",children:[m.jsx("input",{type:"email",name:"email",placeholder:S("hero.emailPlaceholder"),className:"flex-1 bg-wm-card border border-wm-border rounded-sm px-4 py-3 text-sm focus:outline-none focus:border-wm-green transition-colors font-mono",required:!0,"aria-label":S("hero.emailAriaLabel")}),m.jsx("button",{type:"submit",className:"bg-wm-green text-wm-bg px-6 py-3 rounded-sm font-mono text-sm uppercase tracking-wider font-bold hover:bg-green-400 transition-colors whitespace-nowrap",children:S("finalCta.getPro")})]}),m.jsx("div",{className:"cf-turnstile mx-auto"})]}),m.jsxs("a",{href:"#enterprise-contact",className:"inline-flex items-center gap-2 text-sm text-wm-muted hover:text-wm-text transition-colors font-mono",children:[S("finalCta.talkToSales")," ",m.jsx(ja,{className:"w-3 h-3","aria-hidden":"true"})]})]}),m.jsxs("div",{className:"flex flex-col md:flex-row items-center justify-between max-w-7xl mx-auto pt-8 border-t border-wm-border/50 text-xs text-wm-muted font-mono",children:[m.jsxs("div",{className:"flex items-center gap-3 mb-4 md:mb-0",children:[m.jsx("img",{src:"/favico/favicon-32x32.png",alt:"",width:"28",height:"28",className:"rounded-full"}),m.jsxs("div",{className:"flex flex-col",children:[m.jsx("span",{className:"font-display font-bold text-sm leading-none tracking-tight text-wm-text",children:"WORLD MONITOR"}),m.jsx("span",{className:"text-[9px] uppercase tracking-[2px] opacity-60 mt-0.5",children:"by Someone.ceo"})]})]}),m.jsxs("div",{className:"flex items-center gap-6",children:[m.jsx("a",{href:"/",className:"hover:text-wm-text transition-colors",children:"Dashboard"}),m.jsx("a",{href:"https://www.worldmonitor.app/blog/",className:"hover:text-wm-text transition-colors",children:"Blog"}),m.jsx("a",{href:"https://www.worldmonitor.app/docs",className:"hover:text-wm-text transition-colors",children:"Docs"}),m.jsx("a",{href:"https://status.worldmonitor.app/",target:"_blank",rel:"noreferrer",className:"hover:text-wm-text transition-colors",children:"Status"}),m.jsx("a",{href:"https://github.com/koala73/worldmonitor",target:"_blank",rel:"noreferrer",className:"hover:text-wm-text transition-colors",children:"GitHub"}),m.jsx("a",{href:"https://discord.gg/re63kWKxaz",target:"_blank",rel:"noreferrer",className:"hover:text-wm-text transition-colors",children:"Discord"}),m.jsx("a",{href:"https://x.com/worldmonitorai",target:"_blank",rel:"noreferrer",className:"hover:text-wm-text transition-colors",children:"X"})]}),m.jsxs("span",{className:"text-[10px] opacity-40 mt-4 md:mt-0",children:["© ",new Date().getFullYear()," WorldMonitor"]})]})]}),B3=()=>m.jsxs("div",{className:"min-h-screen selection:bg-wm-green/30 selection:text-wm-green",children:[m.jsx("nav",{className:"fixed top-0 left-0 right-0 z-50 glass-panel border-b-0 border-x-0 rounded-none","aria-label":"Main navigation",children:m.jsxs("div",{className:"max-w-7xl mx-auto px-6 h-16 flex items-center justify-between",children:[m.jsx("a",{href:"#",onClick:i=>{i.preventDefault(),window.location.hash=""},children:m.jsx(Tx,{})}),m.jsxs("div",{className:"hidden md:flex items-center gap-8 text-sm font-mono text-wm-muted",children:[m.jsx("a",{href:"#",onClick:i=>{i.preventDefault(),window.location.hash=""},className:"hover:text-wm-text transition-colors",children:S("nav.pro")}),m.jsx("a",{href:"#enterprise",onClick:i=>{var a;i.preventDefault(),(a=document.getElementById("features"))==null||a.scrollIntoView({behavior:"smooth"})},className:"hover:text-wm-text transition-colors",children:S("nav.enterprise")}),m.jsx("a",{href:"#enterprise-contact",onClick:i=>{var a;i.preventDefault(),(a=document.getElementById("contact"))==null||a.scrollIntoView({behavior:"smooth"})},className:"hover:text-wm-green transition-colors",children:S("enterpriseShowcase.talkToSales")})]}),m.jsx("a",{href:"#enterprise-contact",onClick:i=>{var a;i.preventDefault(),(a=document.getElementById("contact"))==null||a.scrollIntoView({behavior:"smooth"})},className:"bg-wm-green text-wm-bg px-4 py-2 rounded-sm font-mono text-xs uppercase tracking-wider font-bold hover:bg-green-400 transition-colors",children:S("enterpriseShowcase.talkToSales")})]})}),m.jsxs("main",{className:"pt-24",children:[m.jsx("section",{className:"py-24 px-6 text-center",children:m.jsxs("div",{className:"max-w-4xl mx-auto",children:[m.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full border border-wm-border bg-wm-card text-wm-muted text-xs font-mono mb-6",children:S("enterpriseShowcase.enterpriseTier")}),m.jsx("h2",{className:"text-4xl md:text-6xl font-display font-bold mb-6",children:S("enterpriseShowcase.title")}),m.jsx("p",{className:"text-lg text-wm-muted max-w-2xl mx-auto mb-10",children:S("enterpriseShowcase.subtitle")}),m.jsxs("a",{href:"#enterprise-contact",onClick:i=>{var a;i.preventDefault(),(a=document.getElementById("contact"))==null||a.scrollIntoView({behavior:"smooth"})},className:"inline-flex items-center gap-2 bg-wm-green text-wm-bg px-8 py-3 rounded-sm font-mono text-sm uppercase tracking-wider font-bold hover:bg-green-400 transition-colors",children:[S("enterpriseShowcase.talkToSales")," ",m.jsx(ja,{className:"w-4 h-4","aria-hidden":"true"})]})]})}),m.jsx("section",{className:"py-24 px-6",id:"features",children:m.jsxs("div",{className:"max-w-7xl mx-auto",children:[m.jsx("h2",{className:"sr-only",children:"Enterprise Features"}),m.jsxs("div",{className:"grid md:grid-cols-3 gap-6 mb-6",children:[m.jsxs("div",{className:"bg-wm-card border border-wm-border p-6",children:[m.jsx(Af,{className:"w-8 h-8 text-wm-muted mb-4","aria-hidden":"true"}),m.jsx("h3",{className:"font-bold mb-2",children:S("enterpriseShowcase.security")}),m.jsx("p",{className:"text-sm text-wm-muted",children:S("enterpriseShowcase.securityDesc")})]}),m.jsxs("div",{className:"bg-wm-card border border-wm-border p-6",children:[m.jsx(sx,{className:"w-8 h-8 text-wm-muted mb-4","aria-hidden":"true"}),m.jsx("h3",{className:"font-bold mb-2",children:S("enterpriseShowcase.aiAgents")}),m.jsx("p",{className:"text-sm text-wm-muted",children:S("enterpriseShowcase.aiAgentsDesc")})]}),m.jsxs("div",{className:"bg-wm-card border border-wm-border p-6",children:[m.jsx(rx,{className:"w-8 h-8 text-wm-muted mb-4","aria-hidden":"true"}),m.jsx("h3",{className:"font-bold mb-2",children:S("enterpriseShowcase.dataLayers")}),m.jsx("p",{className:"text-sm text-wm-muted",children:S("enterpriseShowcase.dataLayersDesc")})]})]}),m.jsxs("div",{className:"grid md:grid-cols-3 gap-6 mb-12",children:[m.jsxs("div",{className:"bg-wm-card border border-wm-border p-6",children:[m.jsx(ux,{className:"w-8 h-8 text-wm-muted mb-4","aria-hidden":"true"}),m.jsx("h3",{className:"font-bold mb-2",children:S("enterpriseShowcase.connectors")}),m.jsx("p",{className:"text-sm text-wm-muted",children:S("enterpriseShowcase.connectorsDesc")})]}),m.jsxs("div",{className:"bg-wm-card border border-wm-border p-6",children:[m.jsx(ox,{className:"w-8 h-8 text-wm-muted mb-4","aria-hidden":"true"}),m.jsx("h3",{className:"font-bold mb-2",children:S("enterpriseShowcase.whiteLabel")}),m.jsx("p",{className:"text-sm text-wm-muted",children:S("enterpriseShowcase.whiteLabelDesc")})]}),m.jsxs("div",{className:"bg-wm-card border border-wm-border p-6",children:[m.jsx(Tf,{className:"w-8 h-8 text-wm-muted mb-4","aria-hidden":"true"}),m.jsx("h3",{className:"font-bold mb-2",children:S("enterpriseShowcase.financial")}),m.jsx("p",{className:"text-sm text-wm-muted",children:S("enterpriseShowcase.financialDesc")})]})]})]})}),m.jsx("section",{className:"py-24 px-6 border-t border-wm-border",children:m.jsxs("div",{className:"max-w-7xl mx-auto",children:[m.jsx("h2",{className:"text-3xl font-display font-bold mb-12 text-center",children:S("enterpriseShowcase.title")}),m.jsxs("div",{className:"data-grid",children:[m.jsxs("div",{className:"data-cell",children:[m.jsx("h3",{className:"font-mono text-xs text-wm-muted uppercase tracking-widest mb-2",children:S("enterpriseShowcase.commodity")}),m.jsx("p",{className:"text-sm",children:S("enterpriseShowcase.commodityDesc")})]}),m.jsxs("div",{className:"data-cell",children:[m.jsx("h3",{className:"font-mono text-xs text-wm-muted uppercase tracking-widest mb-2",children:S("enterpriseShowcase.government")}),m.jsx("p",{className:"text-sm",children:S("enterpriseShowcase.governmentDesc")})]}),m.jsxs("div",{className:"data-cell",children:[m.jsx("h3",{className:"font-mono text-xs text-wm-muted uppercase tracking-widest mb-2",children:S("enterpriseShowcase.risk")}),m.jsx("p",{className:"text-sm",children:S("enterpriseShowcase.riskDesc")})]}),m.jsxs("div",{className:"data-cell",children:[m.jsx("h3",{className:"font-mono text-xs text-wm-muted uppercase tracking-widest mb-2",children:S("enterpriseShowcase.soc")}),m.jsx("p",{className:"text-sm",children:S("enterpriseShowcase.socDesc")})]})]})]})}),m.jsx("section",{className:"py-24 px-6 border-t border-wm-border",id:"contact",children:m.jsxs("div",{className:"max-w-xl mx-auto",children:[m.jsx("h2",{className:"font-display text-3xl font-bold mb-2 text-center",children:S("enterpriseShowcase.contactFormTitle")}),m.jsx("p",{className:"text-sm text-wm-muted mb-10 text-center",children:S("enterpriseShowcase.contactFormSubtitle")}),m.jsxs("form",{className:"space-y-4",onSubmit:async i=>{var y;i.preventDefault();const a=i.currentTarget,l=a.querySelector('button[type="submit"]'),r=l.textContent;l.disabled=!0,l.textContent=S("enterpriseShowcase.contactSending");const u=new FormData(a),f=((y=a.querySelector('input[name="website"]'))==null?void 0:y.value)||"",d=a.querySelector(".cf-turnstile"),h=(d==null?void 0:d.dataset.token)||"";try{const p=await fetch(`${Sx}/contact`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:u.get("email"),name:u.get("name"),organization:u.get("organization"),phone:u.get("phone"),message:u.get("message"),source:"enterprise-contact",website:f,turnstileToken:h})}),x=a.querySelector("[data-form-error]");if(!p.ok){const b=await p.json().catch(()=>({}));if(p.status===422&&x){x.textContent=b.error||S("enterpriseShowcase.workEmailRequired"),x.classList.remove("hidden"),l.textContent=r,l.disabled=!1;return}throw new Error}x&&x.classList.add("hidden"),l.textContent=S("enterpriseShowcase.contactSent"),l.className=l.className.replace("bg-wm-green","bg-wm-card border border-wm-green text-wm-green")}catch{l.textContent=S("enterpriseShowcase.contactFailed"),l.disabled=!1,d!=null&&d.dataset.widgetId&&window.turnstile&&(window.turnstile.reset(d.dataset.widgetId),delete d.dataset.token),setTimeout(()=>{l.textContent=r},4e3)}},children:[m.jsx("input",{type:"text",name:"website",autoComplete:"off",tabIndex:-1,"aria-hidden":"true",className:"absolute opacity-0 h-0 w-0 pointer-events-none"}),m.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[m.jsx("input",{type:"text",name:"name",placeholder:S("enterpriseShowcase.namePlaceholder"),required:!0,className:"bg-wm-bg border border-wm-border rounded-sm px-4 py-3 text-sm focus:outline-none focus:border-wm-green transition-colors font-mono"}),m.jsx("input",{type:"email",name:"email",placeholder:S("enterpriseShowcase.emailPlaceholder"),required:!0,className:"bg-wm-bg border border-wm-border rounded-sm px-4 py-3 text-sm focus:outline-none focus:border-wm-green transition-colors font-mono"})]}),m.jsx("span",{"data-form-error":!0,className:"hidden text-red-400 text-xs font-mono block"}),m.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[m.jsx("input",{type:"text",name:"organization",placeholder:S("enterpriseShowcase.orgPlaceholder"),required:!0,className:"bg-wm-bg border border-wm-border rounded-sm px-4 py-3 text-sm focus:outline-none focus:border-wm-green transition-colors font-mono"}),m.jsx("input",{type:"tel",name:"phone",placeholder:S("enterpriseShowcase.phonePlaceholder"),required:!0,className:"bg-wm-bg border border-wm-border rounded-sm px-4 py-3 text-sm focus:outline-none focus:border-wm-green transition-colors font-mono"})]}),m.jsx("textarea",{name:"message",placeholder:S("enterpriseShowcase.messagePlaceholder"),rows:4,className:"w-full bg-wm-bg border border-wm-border rounded-sm px-4 py-3 text-sm focus:outline-none focus:border-wm-green transition-colors font-mono resize-none"}),m.jsx("div",{className:"cf-turnstile mx-auto"}),m.jsx("button",{type:"submit",className:"w-full bg-wm-green text-wm-bg py-3 rounded-sm font-mono text-sm uppercase tracking-wider font-bold hover:bg-green-400 transition-colors",children:S("enterpriseShowcase.submitContact")})]})]})})]}),m.jsx("footer",{className:"border-t border-wm-border bg-[#020202] py-8 px-6 text-center",children:m.jsxs("div",{className:"flex flex-col md:flex-row items-center justify-between max-w-7xl mx-auto text-xs text-wm-muted font-mono",children:[m.jsxs("div",{className:"flex items-center gap-3 mb-4 md:mb-0",children:[m.jsx("img",{src:"/favico/favicon-32x32.png",alt:"",width:"28",height:"28",className:"rounded-full"}),m.jsxs("div",{className:"flex flex-col",children:[m.jsx("span",{className:"font-display font-bold text-sm leading-none tracking-tight text-wm-text",children:"WORLD MONITOR"}),m.jsx("span",{className:"text-[9px] uppercase tracking-[2px] opacity-60 mt-0.5",children:"by Someone.ceo"})]})]}),m.jsxs("div",{className:"flex items-center gap-6",children:[m.jsx("a",{href:"/",className:"hover:text-wm-text transition-colors",children:"Dashboard"}),m.jsx("a",{href:"https://www.worldmonitor.app/blog/",className:"hover:text-wm-text transition-colors",children:"Blog"}),m.jsx("a",{href:"https://www.worldmonitor.app/docs",className:"hover:text-wm-text transition-colors",children:"Docs"}),m.jsx("a",{href:"https://status.worldmonitor.app/",target:"_blank",rel:"noreferrer",className:"hover:text-wm-text transition-colors",children:"Status"}),m.jsx("a",{href:"https://github.com/koala73/worldmonitor",target:"_blank",rel:"noreferrer",className:"hover:text-wm-text transition-colors",children:"GitHub"}),m.jsx("a",{href:"https://discord.gg/re63kWKxaz",target:"_blank",rel:"noreferrer",className:"hover:text-wm-text transition-colors",children:"Discord"}),m.jsx("a",{href:"https://x.com/worldmonitorai",target:"_blank",rel:"noreferrer",className:"hover:text-wm-text transition-colors",children:"X"})]}),m.jsxs("span",{className:"text-[10px] opacity-40 mt-4 md:mt-0",children:["© ",new Date().getFullYear()," WorldMonitor"]})]})})]});function H3(){const[i,a]=te.useState(()=>window.location.hash.startsWith("#enterprise")?"enterprise":"home");return te.useEffect(()=>{const l=()=>{const r=window.location.hash,u=r.startsWith("#enterprise")?"enterprise":"home",f=i==="enterprise";a(u),u==="enterprise"&&!f&&window.scrollTo(0,0),r==="#enterprise-contact"&&setTimeout(()=>{var d;(d=document.getElementById("contact"))==null||d.scrollIntoView({behavior:"smooth"})},f?0:100)};return window.addEventListener("hashchange",l),()=>window.removeEventListener("hashchange",l)},[i]),te.useEffect(()=>{i==="enterprise"&&window.location.hash==="#enterprise-contact"&&setTimeout(()=>{var l;(l=document.getElementById("contact"))==null||l.scrollIntoView({behavior:"smooth"})},100)},[]),i==="enterprise"?m.jsx(B3,{}):m.jsxs("div",{className:"min-h-screen selection:bg-wm-green/30 selection:text-wm-green",children:[m.jsx(T3,{}),m.jsxs("main",{children:[m.jsx(j3,{}),m.jsx(E3,{}),m.jsx(D3,{}),m.jsx(_3,{}),m.jsx(M3,{}),m.jsx(C3,{}),m.jsx(O3,{}),m.jsx(R3,{}),m.jsx(z3,{}),m.jsx(L3,{}),m.jsx(m3,{refCode:Nf()}),m.jsx(V3,{}),m.jsx(k3,{})]}),m.jsx(U3,{})]})}const q3='script[src^="https://challenges.cloudflare.com/turnstile/v0/api.js"]';c3().then(()=>{nb.createRoot(document.getElementById("root")).render(m.jsx(te.StrictMode,{children:m.jsx(H3,{})}));const i=()=>window.turnstile?v3()>0:!1,a=document.querySelector(q3);if(a==null||a.addEventListener("load",()=>{i()},{once:!0}),!i()){let l=0;const r=window.setInterval(()=>{(i()||++l>=20)&&window.clearInterval(r)},500)}window.addEventListener("hashchange",()=>{let l=0;const r=()=>{i()||++l>=10||setTimeout(r,200)};setTimeout(r,100)})}); diff --git a/public/pro/assets/index-DQXUpmjr.css b/public/pro/assets/index-DQXUpmjr.css deleted file mode 100644 index 2b5a43d423..0000000000 --- a/public/pro/assets/index-DQXUpmjr.css +++ /dev/null @@ -1 +0,0 @@ -@import"https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;700&family=Space+Grotesk:wght@500;700&display=swap";/*! tailwindcss v4.2.1 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-space-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}@layer theme{:root,:host{--font-sans:"Inter", ui-sans-serif, system-ui, sans-serif;--font-mono:"JetBrains Mono", ui-monospace, SFMono-Regular, monospace;--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-green-300:oklch(87.1% .15 154.449);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-emerald-300:oklch(84.5% .143 164.978);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-800:oklch(27.8% .033 256.848);--color-black:#000;--spacing:.25rem;--container-md:28rem;--container-xl:36rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--container-5xl:64rem;--container-6xl:72rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--text-5xl:3rem;--text-5xl--line-height:1;--text-6xl:3.75rem;--text-6xl--line-height:1;--text-8xl:6rem;--text-8xl--line-height:1;--font-weight-light:300;--font-weight-medium:500;--font-weight-bold:700;--tracking-tighter:-.05em;--tracking-tight:-.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-lg:.5rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--font-display:"Space Grotesk", "Inter", sans-serif;--color-wm-bg:#050505;--color-wm-card:#111;--color-wm-border:#222;--color-wm-green:#4ade80;--color-wm-blue:#60a5fa;--color-wm-text:#f3f4f6;--color-wm-muted:#9ca3af}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.top-0{top:calc(var(--spacing) * 0)}.top-24{top:calc(var(--spacing) * 24)}.right-0{right:calc(var(--spacing) * 0)}.bottom-4{bottom:calc(var(--spacing) * 4)}.left-0{left:calc(var(--spacing) * 0)}.z-10{z-index:10}.z-50{z-index:50}.order-1{order:1}.order-2{order:2}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.-mx-6{margin-inline:calc(var(--spacing) * -6)}.mx-3{margin-inline:calc(var(--spacing) * 3)}.mx-auto{margin-inline:auto}.my-4{margin-block:calc(var(--spacing) * 4)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-8{margin-top:calc(var(--spacing) * 8)}.mt-10{margin-top:calc(var(--spacing) * 10)}.mt-12{margin-top:calc(var(--spacing) * 12)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.mb-10{margin-bottom:calc(var(--spacing) * 10)}.mb-12{margin-bottom:calc(var(--spacing) * 12)}.mb-16{margin-bottom:calc(var(--spacing) * 16)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-auto{margin-left:auto}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.aspect-\[16\/9\]{aspect-ratio:16/9}.h-0{height:calc(var(--spacing) * 0)}.h-1{height:calc(var(--spacing) * 1)}.h-3{height:calc(var(--spacing) * 3)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-8{height:calc(var(--spacing) * 8)}.h-10{height:calc(var(--spacing) * 10)}.h-16{height:calc(var(--spacing) * 16)}.h-28{height:calc(var(--spacing) * 28)}.h-40{height:calc(var(--spacing) * 40)}.h-full{height:100%}.min-h-screen{min-height:100vh}.w-0{width:calc(var(--spacing) * 0)}.w-3{width:calc(var(--spacing) * 3)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-8{width:calc(var(--spacing) * 8)}.w-10{width:calc(var(--spacing) * 10)}.w-64{width:calc(var(--spacing) * 64)}.w-full{width:100%}.max-w-2{max-width:calc(var(--spacing) * 2)}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-5xl{max-width:var(--container-5xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-7xl{max-width:var(--container-7xl)}.max-w-md{max-width:var(--container-md)}.max-w-xl{max-width:var(--container-xl)}.flex-1{flex:1}.shrink-0{flex-shrink:0}.cursor-pointer{cursor:pointer}.resize-none{resize:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-8{gap:calc(var(--spacing) * 8)}.gap-16{gap:calc(var(--spacing) * 16)}.gap-\[3px\]{gap:3px}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-none{border-radius:0}.rounded-sm{border-radius:var(--radius-sm)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-x-0{border-inline-style:var(--tw-border-style);border-inline-width:0}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-0{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-\[\#35373b\]{border-color:#35373b}.border-blue-500{border-color:var(--color-blue-500)}.border-orange-500{border-color:var(--color-orange-500)}.border-wm-border{border-color:var(--color-wm-border)}.border-wm-border\/50{border-color:#22222280}@supports (color:color-mix(in lab,red,red)){.border-wm-border\/50{border-color:color-mix(in oklab,var(--color-wm-border) 50%,transparent)}}.border-wm-green{border-color:var(--color-wm-green)}.border-wm-green\/30{border-color:#4ade804d}@supports (color:color-mix(in lab,red,red)){.border-wm-green\/30{border-color:color-mix(in oklab,var(--color-wm-green) 30%,transparent)}}.border-yellow-500{border-color:var(--color-yellow-500)}.bg-\[\#0a0a0a\]{background-color:#0a0a0a}.bg-\[\#1a1d21\]{background-color:#1a1d21}.bg-\[\#020202\]{background-color:#020202}.bg-\[\#222529\]{background-color:#222529}.bg-black{background-color:var(--color-black)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-green-500{background-color:var(--color-green-500)}.bg-green-500\/70{background-color:#00c758b3}@supports (color:color-mix(in lab,red,red)){.bg-green-500\/70{background-color:color-mix(in oklab,var(--color-green-500) 70%,transparent)}}.bg-red-500{background-color:var(--color-red-500)}.bg-red-500\/70{background-color:#fb2c36b3}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/70{background-color:color-mix(in oklab,var(--color-red-500) 70%,transparent)}}.bg-wm-bg{background-color:var(--color-wm-bg)}.bg-wm-card{background-color:var(--color-wm-card)}.bg-wm-card\/20{background-color:#1113}@supports (color:color-mix(in lab,red,red)){.bg-wm-card\/20{background-color:color-mix(in oklab,var(--color-wm-card) 20%,transparent)}}.bg-wm-card\/30{background-color:#1111114d}@supports (color:color-mix(in lab,red,red)){.bg-wm-card\/30{background-color:color-mix(in oklab,var(--color-wm-card) 30%,transparent)}}.bg-wm-card\/50{background-color:#11111180}@supports (color:color-mix(in lab,red,red)){.bg-wm-card\/50{background-color:color-mix(in oklab,var(--color-wm-card) 50%,transparent)}}.bg-wm-green{background-color:var(--color-wm-green)}.bg-wm-green\/5{background-color:#4ade800d}@supports (color:color-mix(in lab,red,red)){.bg-wm-green\/5{background-color:color-mix(in oklab,var(--color-wm-green) 5%,transparent)}}.bg-wm-green\/8{background-color:#4ade8014}@supports (color:color-mix(in lab,red,red)){.bg-wm-green\/8{background-color:color-mix(in oklab,var(--color-wm-green) 8%,transparent)}}.bg-wm-green\/10{background-color:#4ade801a}@supports (color:color-mix(in lab,red,red)){.bg-wm-green\/10{background-color:color-mix(in oklab,var(--color-wm-green) 10%,transparent)}}.bg-wm-green\/20{background-color:#4ade8033}@supports (color:color-mix(in lab,red,red)){.bg-wm-green\/20{background-color:color-mix(in oklab,var(--color-wm-green) 20%,transparent)}}.bg-wm-muted\/20{background-color:#9ca3af33}@supports (color:color-mix(in lab,red,red)){.bg-wm-muted\/20{background-color:color-mix(in oklab,var(--color-wm-muted) 20%,transparent)}}.bg-yellow-500{background-color:var(--color-yellow-500)}.bg-yellow-500\/70{background-color:#edb200b3}@supports (color:color-mix(in lab,red,red)){.bg-yellow-500\/70{background-color:color-mix(in oklab,var(--color-yellow-500) 70%,transparent)}}.bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-\[radial-gradient\(circle_at_50\%_20\%\,rgba\(74\,222\,128\,0\.08\)_0\%\,transparent_50\%\)\]{background-image:radial-gradient(circle at 50% 20%,#4ade8014,#0000 50%)}.from-wm-bg\/80{--tw-gradient-from:#050505cc}@supports (color:color-mix(in lab,red,red)){.from-wm-bg\/80{--tw-gradient-from:color-mix(in oklab, var(--color-wm-bg) 80%, transparent)}}.from-wm-bg\/80{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-wm-green{--tw-gradient-from:var(--color-wm-green);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.via-transparent{--tw-gradient-via:transparent;--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.to-emerald-300{--tw-gradient-to:var(--color-emerald-300);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-transparent{--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.object-cover{object-fit:cover}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-8{padding-inline:calc(var(--spacing) * 8)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-16{padding-block:calc(var(--spacing) * 16)}.py-24{padding-block:calc(var(--spacing) * 24)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-8{padding-top:calc(var(--spacing) * 8)}.pt-24{padding-top:calc(var(--spacing) * 24)}.pt-28{padding-top:calc(var(--spacing) * 28)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-6{padding-bottom:calc(var(--spacing) * 6)}.pb-12{padding-bottom:calc(var(--spacing) * 12)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-4{padding-left:calc(var(--spacing) * 4)}.text-center{text-align:center}.font-display{font-family:var(--font-display)}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.leading-\[0\.95\]{--tw-leading:.95;line-height:.95}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.tracking-\[2px\]{--tw-tracking:2px;letter-spacing:2px}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-tighter{--tw-tracking:var(--tracking-tighter);letter-spacing:var(--tracking-tighter)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.text-blue-400{color:var(--color-blue-400)}.text-gray-200{color:var(--color-gray-200)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-orange-400{color:var(--color-orange-400)}.text-red-400{color:var(--color-red-400)}.text-transparent{color:#0000}.text-wm-bg{color:var(--color-wm-bg)}.text-wm-blue{color:var(--color-wm-blue)}.text-wm-border{color:var(--color-wm-border)}.text-wm-border\/50{color:#22222280}@supports (color:color-mix(in lab,red,red)){.text-wm-border\/50{color:color-mix(in oklab,var(--color-wm-border) 50%,transparent)}}.text-wm-green{color:var(--color-wm-green)}.text-wm-muted{color:var(--color-wm-muted)}.text-wm-muted\/40{color:#9ca3af66}@supports (color:color-mix(in lab,red,red)){.text-wm-muted\/40{color:color-mix(in oklab,var(--color-wm-muted) 40%,transparent)}}.text-wm-text{color:var(--color-wm-text)}.text-yellow-400{color:var(--color-yellow-400)}.uppercase{text-transform:uppercase}.italic{font-style:italic}.opacity-0{opacity:0}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-wm-green\/5{--tw-shadow-color:#4ade800d}@supports (color:color-mix(in lab,red,red)){.shadow-wm-green\/5{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-wm-green) 5%, transparent) var(--tw-shadow-alpha), transparent)}}.blur-\[80px\]{--tw-blur:blur(80px);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,)}.brightness-0{--tw-brightness:brightness(0%);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,)}.invert{--tw-invert:invert(100%);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,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.select-all{-webkit-user-select:all;user-select:all}.group-open\:rotate-180:is(:where(.group):is([open],:popover-open,:open) *){rotate:180deg}.selection\:bg-wm-green\/30 ::selection{background-color:#4ade804d}@supports (color:color-mix(in lab,red,red)){.selection\:bg-wm-green\/30 ::selection{background-color:color-mix(in oklab,var(--color-wm-green) 30%,transparent)}}.selection\:bg-wm-green\/30::selection{background-color:#4ade804d}@supports (color:color-mix(in lab,red,red)){.selection\:bg-wm-green\/30::selection{background-color:color-mix(in oklab,var(--color-wm-green) 30%,transparent)}}.selection\:text-wm-green ::selection{color:var(--color-wm-green)}.selection\:text-wm-green::selection{color:var(--color-wm-green)}@media(hover:hover){.hover\:border-wm-green\/30:hover{border-color:#4ade804d}@supports (color:color-mix(in lab,red,red)){.hover\:border-wm-green\/30:hover{border-color:color-mix(in oklab,var(--color-wm-green) 30%,transparent)}}.hover\:border-wm-text:hover{border-color:var(--color-wm-text)}.hover\:bg-green-400:hover{background-color:var(--color-green-400)}.hover\:bg-wm-card\/50:hover{background-color:#11111180}@supports (color:color-mix(in lab,red,red)){.hover\:bg-wm-card\/50:hover{background-color:color-mix(in oklab,var(--color-wm-card) 50%,transparent)}}.hover\:text-green-300:hover{color:var(--color-green-300)}.hover\:text-wm-green:hover{color:var(--color-wm-green)}.hover\:text-wm-text:hover{color:var(--color-wm-text)}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-100:hover{opacity:1}}.focus\:border-wm-green:focus{border-color:var(--color-wm-green)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}@media(min-width:40rem){.sm\:flex-row{flex-direction:row}}@media(min-width:48rem){.md\:mx-5{margin-inline:calc(var(--spacing) * 5)}.md\:my-8{margin-block:calc(var(--spacing) * 8)}.md\:mt-0{margin-top:calc(var(--spacing) * 0)}.md\:mb-0{margin-bottom:calc(var(--spacing) * 0)}.md\:block{display:block}.md\:flex{display:flex}.md\:hidden{display:none}.md\:h-44{height:calc(var(--spacing) * 44)}.md\:h-56{height:calc(var(--spacing) * 56)}.md\:w-96{width:calc(var(--spacing) * 96)}.md\:max-w-3{max-width:calc(var(--spacing) * 3)}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:gap-1{gap:calc(var(--spacing) * 1)}.md\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.md\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.md\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.md\:text-8xl{font-size:var(--text-8xl);line-height:var(--tw-leading,var(--text-8xl--line-height))}.md\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}}@media(min-width:64rem){.lg\:order-1{order:1}.lg\:order-2{order:2}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}.\[\&_summary\:\:-webkit-details-marker\]\:hidden summary::-webkit-details-marker{display:none}}body{background-color:var(--color-wm-bg);color:var(--color-wm-text);font-family:var(--font-sans);-webkit-font-smoothing:antialiased}.glass-panel{-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border:1px solid var(--color-wm-border);background:#111111b3}.data-grid{background:var(--color-wm-border);border:1px solid var(--color-wm-border);grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:1px;display:grid}.data-cell{background:var(--color-wm-bg);padding:1.5rem}.text-glow{text-shadow:0 0 20px #4ade804d}.border-glow{box-shadow:0 0 20px #4ade801a}.marquee-track{animation:45s linear infinite marquee;display:flex}@keyframes marquee{0%{transform:translate(0)}to{transform:translate(-50%)}}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false} diff --git a/public/pro/assets/index-k66dEz6-.js b/public/pro/assets/index-k66dEz6-.js deleted file mode 100644 index 72fa449114..0000000000 --- a/public/pro/assets/index-k66dEz6-.js +++ /dev/null @@ -1,229 +0,0 @@ -(function(){const a=document.createElement("link").relList;if(a&&a.supports&&a.supports("modulepreload"))return;for(const u of document.querySelectorAll('link[rel="modulepreload"]'))r(u);new MutationObserver(u=>{for(const f of u)if(f.type==="childList")for(const d of f.addedNodes)d.tagName==="LINK"&&d.rel==="modulepreload"&&r(d)}).observe(document,{childList:!0,subtree:!0});function l(u){const f={};return u.integrity&&(f.integrity=u.integrity),u.referrerPolicy&&(f.referrerPolicy=u.referrerPolicy),u.crossOrigin==="use-credentials"?f.credentials="include":u.crossOrigin==="anonymous"?f.credentials="omit":f.credentials="same-origin",f}function r(u){if(u.ep)return;u.ep=!0;const f=l(u);fetch(u.href,f)}})();var Fu={exports:{}},ys={};/** - * @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 Ap;function P1(){if(Ap)return ys;Ap=1;var i=Symbol.for("react.transitional.element"),a=Symbol.for("react.fragment");function l(r,u,f){var d=null;if(f!==void 0&&(d=""+f),u.key!==void 0&&(d=""+u.key),"key"in u){f={};for(var h in u)h!=="key"&&(f[h]=u[h])}else f=u;return u=f.ref,{$$typeof:i,type:r,key:d,ref:u!==void 0?u:null,props:f}}return ys.Fragment=a,ys.jsx=l,ys.jsxs=l,ys}var Ep;function F1(){return Ep||(Ep=1,Fu.exports=P1()),Fu.exports}var m=F1(),Qu={exports:{}},re={};/** - * @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 jp;function Q1(){if(jp)return re;jp=1;var i=Symbol.for("react.transitional.element"),a=Symbol.for("react.portal"),l=Symbol.for("react.fragment"),r=Symbol.for("react.strict_mode"),u=Symbol.for("react.profiler"),f=Symbol.for("react.consumer"),d=Symbol.for("react.context"),h=Symbol.for("react.forward_ref"),y=Symbol.for("react.suspense"),p=Symbol.for("react.memo"),v=Symbol.for("react.lazy"),b=Symbol.for("react.activity"),w=Symbol.iterator;function j(A){return A===null||typeof A!="object"?null:(A=w&&A[w]||A["@@iterator"],typeof A=="function"?A:null)}var E={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},V=Object.assign,B={};function q(A,z,K){this.props=A,this.context=z,this.refs=B,this.updater=K||E}q.prototype.isReactComponent={},q.prototype.setState=function(A,z){if(typeof A!="object"&&typeof A!="function"&&A!=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,A,z,"setState")},q.prototype.forceUpdate=function(A){this.updater.enqueueForceUpdate(this,A,"forceUpdate")};function Y(){}Y.prototype=q.prototype;function H(A,z,K){this.props=A,this.context=z,this.refs=B,this.updater=K||E}var X=H.prototype=new Y;X.constructor=H,V(X,q.prototype),X.isPureReactComponent=!0;var P=Array.isArray;function ae(){}var Q={H:null,A:null,T:null,S:null},I=Object.prototype.hasOwnProperty;function ce(A,z,K){var Z=K.ref;return{$$typeof:i,type:A,key:z,ref:Z!==void 0?Z:null,props:K}}function ye(A,z){return ce(A.type,z,A.props)}function ot(A){return typeof A=="object"&&A!==null&&A.$$typeof===i}function Ve(A){var z={"=":"=0",":":"=2"};return"$"+A.replace(/[=:]/g,function(K){return z[K]})}var He=/\/+/g;function _e(A,z){return typeof A=="object"&&A!==null&&A.key!=null?Ve(""+A.key):z.toString(36)}function tt(A){switch(A.status){case"fulfilled":return A.value;case"rejected":throw A.reason;default:switch(typeof A.status=="string"?A.then(ae,ae):(A.status="pending",A.then(function(z){A.status==="pending"&&(A.status="fulfilled",A.value=z)},function(z){A.status==="pending"&&(A.status="rejected",A.reason=z)})),A.status){case"fulfilled":return A.value;case"rejected":throw A.reason}}throw A}function L(A,z,K,Z,le){var de=typeof A;(de==="undefined"||de==="boolean")&&(A=null);var Te=!1;if(A===null)Te=!0;else switch(de){case"bigint":case"string":case"number":Te=!0;break;case"object":switch(A.$$typeof){case i:case a:Te=!0;break;case v:return Te=A._init,L(Te(A._payload),z,K,Z,le)}}if(Te)return le=le(A),Te=Z===""?"."+_e(A,0):Z,P(le)?(K="",Te!=null&&(K=Te.replace(He,"$&/")+"/"),L(le,z,K,"",function(Ai){return Ai})):le!=null&&(ot(le)&&(le=ye(le,K+(le.key==null||A&&A.key===le.key?"":(""+le.key).replace(He,"$&/")+"/")+Te)),z.push(le)),1;Te=0;var ft=Z===""?".":Z+":";if(P(A))for(var qe=0;qe>>1,fe=L[ie];if(0>>1;ieu(K,F))Zu(le,K)?(L[ie]=le,L[Z]=F,ie=Z):(L[ie]=K,L[z]=F,ie=z);else if(Zu(le,F))L[ie]=le,L[Z]=F,ie=Z;else break e}}return G}function u(L,G){var F=L.sortIndex-G.sortIndex;return F!==0?F:L.id-G.id}if(i.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var f=performance;i.unstable_now=function(){return f.now()}}else{var d=Date,h=d.now();i.unstable_now=function(){return d.now()-h}}var y=[],p=[],v=1,b=null,w=3,j=!1,E=!1,V=!1,B=!1,q=typeof setTimeout=="function"?setTimeout:null,Y=typeof clearTimeout=="function"?clearTimeout:null,H=typeof setImmediate<"u"?setImmediate:null;function X(L){for(var G=l(p);G!==null;){if(G.callback===null)r(p);else if(G.startTime<=L)r(p),G.sortIndex=G.expirationTime,a(y,G);else break;G=l(p)}}function P(L){if(V=!1,X(L),!E)if(l(y)!==null)E=!0,ae||(ae=!0,Ve());else{var G=l(p);G!==null&&tt(P,G.startTime-L)}}var ae=!1,Q=-1,I=5,ce=-1;function ye(){return B?!0:!(i.unstable_now()-ceL&&ye());){var ie=b.callback;if(typeof ie=="function"){b.callback=null,w=b.priorityLevel;var fe=ie(b.expirationTime<=L);if(L=i.unstable_now(),typeof fe=="function"){b.callback=fe,X(L),G=!0;break t}b===l(y)&&r(y),X(L)}else r(y);b=l(y)}if(b!==null)G=!0;else{var A=l(p);A!==null&&tt(P,A.startTime-L),G=!1}}break e}finally{b=null,w=F,j=!1}G=void 0}}finally{G?Ve():ae=!1}}}var Ve;if(typeof H=="function")Ve=function(){H(ot)};else if(typeof MessageChannel<"u"){var He=new MessageChannel,_e=He.port2;He.port1.onmessage=ot,Ve=function(){_e.postMessage(null)}}else Ve=function(){q(ot,0)};function tt(L,G){Q=q(function(){L(i.unstable_now())},G)}i.unstable_IdlePriority=5,i.unstable_ImmediatePriority=1,i.unstable_LowPriority=4,i.unstable_NormalPriority=3,i.unstable_Profiling=null,i.unstable_UserBlockingPriority=2,i.unstable_cancelCallback=function(L){L.callback=null},i.unstable_forceFrameRate=function(L){0>L||125ie?(L.sortIndex=F,a(p,L),l(y)===null&&L===l(p)&&(V?(Y(Q),Q=-1):V=!0,tt(P,F-ie))):(L.sortIndex=fe,a(y,L),E||j||(E=!0,ae||(ae=!0,Ve()))),L},i.unstable_shouldYield=ye,i.unstable_wrapCallback=function(L){var G=w;return function(){var F=w;w=G;try{return L.apply(this,arguments)}finally{w=F}}}})($u)),$u}var Mp;function J1(){return Mp||(Mp=1,Ju.exports=Z1()),Ju.exports}var Wu={exports:{}},ut={};/** - * @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 Cp;function $1(){if(Cp)return ut;Cp=1;var i=Kc();function a(y){var p="https://react.dev/errors/"+y;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(i)}catch(a){console.error(a)}}return i(),Wu.exports=$1(),Wu.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 Rp;function I1(){if(Rp)return vs;Rp=1;var i=J1(),a=Kc(),l=W1();function r(e){var t="https://react.dev/errors/"+e;if(1fe||(e.current=ie[fe],ie[fe]=null,fe--)}function K(e,t){fe++,ie[fe]=e.current,e.current=t}var Z=A(null),le=A(null),de=A(null),Te=A(null);function ft(e,t){switch(K(de,t),K(le,e),K(Z,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?Fm(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=Fm(t),e=Qm(t,e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}z(Z),K(Z,e)}function qe(){z(Z),z(le),z(de)}function Ai(e){e.memoizedState!==null&&K(Te,e);var t=Z.current,n=Qm(t,e.type);t!==n&&(K(le,e),K(Z,n))}function Us(e){le.current===e&&(z(Z),z(le)),Te.current===e&&(z(Te),hs._currentValue=F)}var Dr,Tf;function ta(e){if(Dr===void 0)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);Dr=t&&t[1]||"",Tf=-1)":-1o||T[s]!==C[o]){var _=` -`+T[s].replace(" at new "," at ");return e.displayName&&_.includes("")&&(_=_.replace("",e.displayName)),_}while(1<=s&&0<=o);break}}}finally{Mr=!1,Error.prepareStackTrace=n}return(n=e?e.displayName||e.name:"")?ta(n):""}function Tv(e,t){switch(e.tag){case 26:case 27:case 5:return ta(e.type);case 16:return ta("Lazy");case 13:return e.child!==t&&t!==null?ta("Suspense Fallback"):ta("Suspense");case 19:return ta("SuspenseList");case 0:case 15:return Cr(e.type,!1);case 11:return Cr(e.type.render,!1);case 1:return Cr(e.type,!0);case 31:return ta("Activity");default:return""}}function Af(e){try{var t="",n=null;do t+=Tv(e,n),n=e,e=e.return;while(e);return t}catch(s){return` -Error generating stack: `+s.message+` -`+s.stack}}var Or=Object.prototype.hasOwnProperty,Rr=i.unstable_scheduleCallback,Lr=i.unstable_cancelCallback,Av=i.unstable_shouldYield,Ev=i.unstable_requestPaint,wt=i.unstable_now,jv=i.unstable_getCurrentPriorityLevel,Ef=i.unstable_ImmediatePriority,jf=i.unstable_UserBlockingPriority,Bs=i.unstable_NormalPriority,Nv=i.unstable_LowPriority,Nf=i.unstable_IdlePriority,Dv=i.log,Mv=i.unstable_setDisableYieldValue,Ei=null,Tt=null;function En(e){if(typeof Dv=="function"&&Mv(e),Tt&&typeof Tt.setStrictMode=="function")try{Tt.setStrictMode(Ei,e)}catch{}}var At=Math.clz32?Math.clz32:Rv,Cv=Math.log,Ov=Math.LN2;function Rv(e){return e>>>=0,e===0?32:31-(Cv(e)/Ov|0)|0}var Hs=256,qs=262144,Gs=4194304;function na(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&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 Ys(e,t,n){var s=e.pendingLanes;if(s===0)return 0;var o=0,c=e.suspendedLanes,g=e.pingedLanes;e=e.warmLanes;var x=s&134217727;return x!==0?(s=x&~c,s!==0?o=na(s):(g&=x,g!==0?o=na(g):n||(n=x&~e,n!==0&&(o=na(n))))):(x=s&~c,x!==0?o=na(x):g!==0?o=na(g):n||(n=s&~e,n!==0&&(o=na(n)))),o===0?0:t!==0&&t!==o&&(t&c)===0&&(c=o&-o,n=t&-t,c>=n||c===32&&(n&4194048)!==0)?t:o}function ji(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function Lv(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+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 t+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 Df(){var e=Gs;return Gs<<=1,(Gs&62914560)===0&&(Gs=4194304),e}function _r(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function Ni(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function _v(e,t,n,s,o,c){var g=e.pendingLanes;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=n,e.entangledLanes&=n,e.errorRecoveryDisabledLanes&=n,e.shellSuspendCounter=0;var x=e.entanglements,T=e.expirationTimes,C=e.hiddenUpdates;for(n=g&~n;0"u")return null;try{return e.activeElement||e.body}catch{return e.body}}var Hv=/[\n"\\]/g;function Lt(e){return e.replace(Hv,function(t){return"\\"+t.charCodeAt(0).toString(16)+" "})}function Hr(e,t,n,s,o,c,g,x){e.name="",g!=null&&typeof g!="function"&&typeof g!="symbol"&&typeof g!="boolean"?e.type=g:e.removeAttribute("type"),t!=null?g==="number"?(t===0&&e.value===""||e.value!=t)&&(e.value=""+Rt(t)):e.value!==""+Rt(t)&&(e.value=""+Rt(t)):g!=="submit"&&g!=="reset"||e.removeAttribute("value"),t!=null?qr(e,g,Rt(t)):n!=null?qr(e,g,Rt(n)):s!=null&&e.removeAttribute("value"),o==null&&c!=null&&(e.defaultChecked=!!c),o!=null&&(e.checked=o&&typeof o!="function"&&typeof o!="symbol"),x!=null&&typeof x!="function"&&typeof x!="symbol"&&typeof x!="boolean"?e.name=""+Rt(x):e.removeAttribute("name")}function qf(e,t,n,s,o,c,g,x){if(c!=null&&typeof c!="function"&&typeof c!="symbol"&&typeof c!="boolean"&&(e.type=c),t!=null||n!=null){if(!(c!=="submit"&&c!=="reset"||t!=null)){Br(e);return}n=n!=null?""+Rt(n):"",t=t!=null?""+Rt(t):n,x||t===e.value||(e.value=t),e.defaultValue=t}s=s??o,s=typeof s!="function"&&typeof s!="symbol"&&!!s,e.checked=x?e.checked:!!s,e.defaultChecked=!!s,g!=null&&typeof g!="function"&&typeof g!="symbol"&&typeof g!="boolean"&&(e.name=g),Br(e)}function qr(e,t,n){t==="number"&&Ps(e.ownerDocument)===e||e.defaultValue===""+n||(e.defaultValue=""+n)}function Oa(e,t,n,s){if(e=e.options,t){t={};for(var o=0;o"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Pr=!1;if(on)try{var Oi={};Object.defineProperty(Oi,"passive",{get:function(){Pr=!0}}),window.addEventListener("test",Oi,Oi),window.removeEventListener("test",Oi,Oi)}catch{Pr=!1}var Nn=null,Fr=null,Qs=null;function Qf(){if(Qs)return Qs;var e,t=Fr,n=t.length,s,o="value"in Nn?Nn.value:Nn.textContent,c=o.length;for(e=0;e=_i),ed=" ",td=!1;function nd(e,t){switch(e){case"keyup":return mx.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function ad(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var za=!1;function gx(e,t){switch(e){case"compositionend":return ad(t);case"keypress":return t.which!==32?null:(td=!0,ed);case"textInput":return e=t.data,e===ed&&td?null:e;default:return null}}function yx(e,t){if(za)return e==="compositionend"||!Wr&&nd(e,t)?(e=Qf(),Qs=Fr=Nn=null,za=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=s}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=fd(n)}}function hd(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?hd(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function md(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=Ps(e.document);t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=Ps(e.document)}return t}function to(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}var Ex=on&&"documentMode"in document&&11>=document.documentMode,Va=null,no=null,Ui=null,ao=!1;function pd(e,t,n){var s=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;ao||Va==null||Va!==Ps(s)||(s=Va,"selectionStart"in s&&to(s)?s={start:s.selectionStart,end:s.selectionEnd}:(s=(s.ownerDocument&&s.ownerDocument.defaultView||window).getSelection(),s={anchorNode:s.anchorNode,anchorOffset:s.anchorOffset,focusNode:s.focusNode,focusOffset:s.focusOffset}),Ui&&ki(Ui,s)||(Ui=s,s=ql(no,"onSelect"),0>=g,o-=g,$t=1<<32-At(t)+o|n<ue?(ge=W,W=null):ge=W.sibling;var be=O(D,W,M[ue],k);if(be===null){W===null&&(W=ge);break}e&&W&&be.alternate===null&&t(D,W),N=c(be,N,ue),xe===null?ee=be:xe.sibling=be,xe=be,W=ge}if(ue===M.length)return n(D,W),ve&&cn(D,ue),ee;if(W===null){for(;ueue?(ge=W,W=null):ge=W.sibling;var Zn=O(D,W,be.value,k);if(Zn===null){W===null&&(W=ge);break}e&&W&&Zn.alternate===null&&t(D,W),N=c(Zn,N,ue),xe===null?ee=Zn:xe.sibling=Zn,xe=Zn,W=ge}if(be.done)return n(D,W),ve&&cn(D,ue),ee;if(W===null){for(;!be.done;ue++,be=M.next())be=U(D,be.value,k),be!==null&&(N=c(be,N,ue),xe===null?ee=be:xe.sibling=be,xe=be);return ve&&cn(D,ue),ee}for(W=s(W);!be.done;ue++,be=M.next())be=R(W,D,ue,be.value,k),be!==null&&(e&&be.alternate!==null&&W.delete(be.key===null?ue:be.key),N=c(be,N,ue),xe===null?ee=be:xe.sibling=be,xe=be);return e&&W.forEach(function(X1){return t(D,X1)}),ve&&cn(D,ue),ee}function De(D,N,M,k){if(typeof M=="object"&&M!==null&&M.type===V&&M.key===null&&(M=M.props.children),typeof M=="object"&&M!==null){switch(M.$$typeof){case j:e:{for(var ee=M.key;N!==null;){if(N.key===ee){if(ee=M.type,ee===V){if(N.tag===7){n(D,N.sibling),k=o(N,M.props.children),k.return=D,D=k;break e}}else if(N.elementType===ee||typeof ee=="object"&&ee!==null&&ee.$$typeof===I&&ha(ee)===N.type){n(D,N.sibling),k=o(N,M.props),Ki(k,M),k.return=D,D=k;break e}n(D,N);break}else t(D,N);N=N.sibling}M.type===V?(k=oa(M.props.children,D.mode,k,M.key),k.return=D,D=k):(k=il(M.type,M.key,M.props,null,D.mode,k),Ki(k,M),k.return=D,D=k)}return g(D);case E:e:{for(ee=M.key;N!==null;){if(N.key===ee)if(N.tag===4&&N.stateNode.containerInfo===M.containerInfo&&N.stateNode.implementation===M.implementation){n(D,N.sibling),k=o(N,M.children||[]),k.return=D,D=k;break e}else{n(D,N);break}else t(D,N);N=N.sibling}k=co(M,D.mode,k),k.return=D,D=k}return g(D);case I:return M=ha(M),De(D,N,M,k)}if(tt(M))return J(D,N,M,k);if(Ve(M)){if(ee=Ve(M),typeof ee!="function")throw Error(r(150));return M=ee.call(M),ne(D,N,M,k)}if(typeof M.then=="function")return De(D,N,fl(M),k);if(M.$$typeof===H)return De(D,N,rl(D,M),k);dl(D,M)}return typeof M=="string"&&M!==""||typeof M=="number"||typeof M=="bigint"?(M=""+M,N!==null&&N.tag===6?(n(D,N.sibling),k=o(N,M),k.return=D,D=k):(n(D,N),k=uo(M,D.mode,k),k.return=D,D=k),g(D)):n(D,N)}return function(D,N,M,k){try{Yi=0;var ee=De(D,N,M,k);return Fa=null,ee}catch(W){if(W===Pa||W===ul)throw W;var xe=jt(29,W,null,D.mode);return xe.lanes=k,xe.return=D,xe}finally{}}}var pa=Ud(!0),Bd=Ud(!1),Rn=!1;function To(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Ao(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function Ln(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function _n(e,t,n){var s=e.updateQueue;if(s===null)return null;if(s=s.shared,(we&2)!==0){var o=s.pending;return o===null?t.next=t:(t.next=o.next,o.next=t),s.pending=t,t=al(e),wd(e,null,n),t}return nl(e,s,t,n),al(e)}function Xi(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194048)!==0)){var s=t.lanes;s&=e.pendingLanes,n|=s,t.lanes=n,Cf(e,n)}}function Eo(e,t){var n=e.updateQueue,s=e.alternate;if(s!==null&&(s=s.updateQueue,n===s)){var o=null,c=null;if(n=n.firstBaseUpdate,n!==null){do{var g={lane:n.lane,tag:n.tag,payload:n.payload,callback:null,next:null};c===null?o=c=g:c=c.next=g,n=n.next}while(n!==null);c===null?o=c=t:c=c.next=t}else o=c=t;n={baseState:s.baseState,firstBaseUpdate:o,lastBaseUpdate:c,shared:s.shared,callbacks:s.callbacks},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}var jo=!1;function Pi(){if(jo){var e=Xa;if(e!==null)throw e}}function Fi(e,t,n,s){jo=!1;var o=e.updateQueue;Rn=!1;var c=o.firstBaseUpdate,g=o.lastBaseUpdate,x=o.shared.pending;if(x!==null){o.shared.pending=null;var T=x,C=T.next;T.next=null,g===null?c=C:g.next=C,g=T;var _=e.alternate;_!==null&&(_=_.updateQueue,x=_.lastBaseUpdate,x!==g&&(x===null?_.firstBaseUpdate=C:x.next=C,_.lastBaseUpdate=T))}if(c!==null){var U=o.baseState;g=0,_=C=T=null,x=c;do{var O=x.lane&-536870913,R=O!==x.lane;if(R?(pe&O)===O:(s&O)===O){O!==0&&O===Ka&&(jo=!0),_!==null&&(_=_.next={lane:0,tag:x.tag,payload:x.payload,callback:null,next:null});e:{var J=e,ne=x;O=t;var De=n;switch(ne.tag){case 1:if(J=ne.payload,typeof J=="function"){U=J.call(De,U,O);break e}U=J;break e;case 3:J.flags=J.flags&-65537|128;case 0:if(J=ne.payload,O=typeof J=="function"?J.call(De,U,O):J,O==null)break e;U=b({},U,O);break e;case 2:Rn=!0}}O=x.callback,O!==null&&(e.flags|=64,R&&(e.flags|=8192),R=o.callbacks,R===null?o.callbacks=[O]:R.push(O))}else R={lane:O,tag:x.tag,payload:x.payload,callback:x.callback,next:null},_===null?(C=_=R,T=U):_=_.next=R,g|=O;if(x=x.next,x===null){if(x=o.shared.pending,x===null)break;R=x,x=R.next,R.next=null,o.lastBaseUpdate=R,o.shared.pending=null}}while(!0);_===null&&(T=U),o.baseState=T,o.firstBaseUpdate=C,o.lastBaseUpdate=_,c===null&&(o.shared.lanes=0),Bn|=g,e.lanes=g,e.memoizedState=U}}function Hd(e,t){if(typeof e!="function")throw Error(r(191,e));e.call(t)}function qd(e,t){var n=e.callbacks;if(n!==null)for(e.callbacks=null,e=0;ec?c:8;var g=L.T,x={};L.T=x,Xo(e,!1,t,n);try{var T=o(),C=L.S;if(C!==null&&C(x,T),T!==null&&typeof T=="object"&&typeof T.then=="function"){var _=_x(T,s);Ji(e,t,_,Ot(e))}else Ji(e,t,s,Ot(e))}catch(U){Ji(e,t,{then:function(){},status:"rejected",reason:U},Ot())}finally{G.p=c,g!==null&&x.types!==null&&(g.types=x.types),L.T=g}}function Hx(){}function Yo(e,t,n,s){if(e.tag!==5)throw Error(r(476));var o=xh(e).queue;vh(e,o,t,F,n===null?Hx:function(){return bh(e),n(s)})}function xh(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:F,baseState:F,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:mn,lastRenderedState:F},next:null};var n={};return t.next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:mn,lastRenderedState:n},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function bh(e){var t=xh(e);t.next===null&&(t=e.alternate.memoizedState),Ji(e,t.next.queue,{},Ot())}function Ko(){return it(hs)}function Sh(){return Ye().memoizedState}function wh(){return Ye().memoizedState}function qx(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var n=Ot();e=Ln(n);var s=_n(t,e,n);s!==null&&(St(s,t,n),Xi(s,t,n)),t={cache:xo()},e.payload=t;return}t=t.return}}function Gx(e,t,n){var s=Ot();n={lane:s,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null},wl(e)?Ah(t,n):(n=ro(e,t,n,s),n!==null&&(St(n,e,s),Eh(n,t,s)))}function Th(e,t,n){var s=Ot();Ji(e,t,n,s)}function Ji(e,t,n,s){var o={lane:s,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null};if(wl(e))Ah(t,o);else{var c=e.alternate;if(e.lanes===0&&(c===null||c.lanes===0)&&(c=t.lastRenderedReducer,c!==null))try{var g=t.lastRenderedState,x=c(g,n);if(o.hasEagerState=!0,o.eagerState=x,Et(x,g))return nl(e,t,o,0),Me===null&&tl(),!1}catch{}finally{}if(n=ro(e,t,o,s),n!==null)return St(n,e,s),Eh(n,t,s),!0}return!1}function Xo(e,t,n,s){if(s={lane:2,revertLane:Tu(),gesture:null,action:s,hasEagerState:!1,eagerState:null,next:null},wl(e)){if(t)throw Error(r(479))}else t=ro(e,n,s,2),t!==null&&St(t,e,2)}function wl(e){var t=e.alternate;return e===oe||t!==null&&t===oe}function Ah(e,t){Za=pl=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function Eh(e,t,n){if((n&4194048)!==0){var s=t.lanes;s&=e.pendingLanes,n|=s,t.lanes=n,Cf(e,n)}}var $i={readContext:it,use:vl,useCallback:ke,useContext:ke,useEffect:ke,useImperativeHandle:ke,useLayoutEffect:ke,useInsertionEffect:ke,useMemo:ke,useReducer:ke,useRef:ke,useState:ke,useDebugValue:ke,useDeferredValue:ke,useTransition:ke,useSyncExternalStore:ke,useId:ke,useHostTransitionStatus:ke,useFormState:ke,useActionState:ke,useOptimistic:ke,useMemoCache:ke,useCacheRefresh:ke};$i.useEffectEvent=ke;var jh={readContext:it,use:vl,useCallback:function(e,t){return dt().memoizedState=[e,t===void 0?null:t],e},useContext:it,useEffect:uh,useImperativeHandle:function(e,t,n){n=n!=null?n.concat([e]):null,bl(4194308,4,hh.bind(null,t,e),n)},useLayoutEffect:function(e,t){return bl(4194308,4,e,t)},useInsertionEffect:function(e,t){bl(4,2,e,t)},useMemo:function(e,t){var n=dt();t=t===void 0?null:t;var s=e();if(ga){En(!0);try{e()}finally{En(!1)}}return n.memoizedState=[s,t],s},useReducer:function(e,t,n){var s=dt();if(n!==void 0){var o=n(t);if(ga){En(!0);try{n(t)}finally{En(!1)}}}else o=t;return s.memoizedState=s.baseState=o,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:o},s.queue=e,e=e.dispatch=Gx.bind(null,oe,e),[s.memoizedState,e]},useRef:function(e){var t=dt();return e={current:e},t.memoizedState=e},useState:function(e){e=Uo(e);var t=e.queue,n=Th.bind(null,oe,t);return t.dispatch=n,[e.memoizedState,n]},useDebugValue:qo,useDeferredValue:function(e,t){var n=dt();return Go(n,e,t)},useTransition:function(){var e=Uo(!1);return e=vh.bind(null,oe,e.queue,!0,!1),dt().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,n){var s=oe,o=dt();if(ve){if(n===void 0)throw Error(r(407));n=n()}else{if(n=t(),Me===null)throw Error(r(349));(pe&127)!==0||Fd(s,t,n)}o.memoizedState=n;var c={value:n,getSnapshot:t};return o.queue=c,uh(Zd.bind(null,s,c,e),[e]),s.flags|=2048,$a(9,{destroy:void 0},Qd.bind(null,s,c,n,t),null),n},useId:function(){var e=dt(),t=Me.identifierPrefix;if(ve){var n=Wt,s=$t;n=(s&~(1<<32-At(s)-1)).toString(32)+n,t="_"+t+"R_"+n,n=gl++,0<\/script>",c=c.removeChild(c.firstChild);break;case"select":c=typeof s.is=="string"?g.createElement("select",{is:s.is}):g.createElement("select"),s.multiple?c.multiple=!0:s.size&&(c.size=s.size);break;default:c=typeof s.is=="string"?g.createElement(o,{is:s.is}):g.createElement(o)}}c[nt]=t,c[pt]=s;e:for(g=t.child;g!==null;){if(g.tag===5||g.tag===6)c.appendChild(g.stateNode);else if(g.tag!==4&&g.tag!==27&&g.child!==null){g.child.return=g,g=g.child;continue}if(g===t)break e;for(;g.sibling===null;){if(g.return===null||g.return===t)break e;g=g.return}g.sibling.return=g.return,g=g.sibling}t.stateNode=c;e:switch(lt(c,o,s),o){case"button":case"input":case"select":case"textarea":s=!!s.autoFocus;break e;case"img":s=!0;break e;default:s=!1}s&&gn(t)}}return Re(t),su(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,n),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==s&&gn(t);else{if(typeof s!="string"&&t.stateNode===null)throw Error(r(166));if(e=de.current,Ga(t)){if(e=t.stateNode,n=t.memoizedProps,s=null,o=at,o!==null)switch(o.tag){case 27:case 5:s=o.memoizedProps}e[nt]=t,e=!!(e.nodeValue===n||s!==null&&s.suppressHydrationWarning===!0||Xm(e.nodeValue,n)),e||Cn(t,!0)}else e=Gl(e).createTextNode(s),e[nt]=t,t.stateNode=e}return Re(t),null;case 31:if(n=t.memoizedState,e===null||e.memoizedState!==null){if(s=Ga(t),n!==null){if(e===null){if(!s)throw Error(r(318));if(e=t.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(r(557));e[nt]=t}else ua(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;Re(t),e=!1}else n=po(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=n),e=!0;if(!e)return t.flags&256?(Dt(t),t):(Dt(t),null);if((t.flags&128)!==0)throw Error(r(558))}return Re(t),null;case 13:if(s=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(o=Ga(t),s!==null&&s.dehydrated!==null){if(e===null){if(!o)throw Error(r(318));if(o=t.memoizedState,o=o!==null?o.dehydrated:null,!o)throw Error(r(317));o[nt]=t}else ua(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;Re(t),o=!1}else o=po(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=o),o=!0;if(!o)return t.flags&256?(Dt(t),t):(Dt(t),null)}return Dt(t),(t.flags&128)!==0?(t.lanes=n,t):(n=s!==null,e=e!==null&&e.memoizedState!==null,n&&(s=t.child,o=null,s.alternate!==null&&s.alternate.memoizedState!==null&&s.alternate.memoizedState.cachePool!==null&&(o=s.alternate.memoizedState.cachePool.pool),c=null,s.memoizedState!==null&&s.memoizedState.cachePool!==null&&(c=s.memoizedState.cachePool.pool),c!==o&&(s.flags|=2048)),n!==e&&n&&(t.child.flags|=8192),Nl(t,t.updateQueue),Re(t),null);case 4:return qe(),e===null&&Nu(t.stateNode.containerInfo),Re(t),null;case 10:return dn(t.type),Re(t),null;case 19:if(z(Ge),s=t.memoizedState,s===null)return Re(t),null;if(o=(t.flags&128)!==0,c=s.rendering,c===null)if(o)Ii(s,!1);else{if(Ue!==0||e!==null&&(e.flags&128)!==0)for(e=t.child;e!==null;){if(c=ml(e),c!==null){for(t.flags|=128,Ii(s,!1),e=c.updateQueue,t.updateQueue=e,Nl(t,e),t.subtreeFlags=0,e=n,n=t.child;n!==null;)Td(n,e),n=n.sibling;return K(Ge,Ge.current&1|2),ve&&cn(t,s.treeForkCount),t.child}e=e.sibling}s.tail!==null&&wt()>Rl&&(t.flags|=128,o=!0,Ii(s,!1),t.lanes=4194304)}else{if(!o)if(e=ml(c),e!==null){if(t.flags|=128,o=!0,e=e.updateQueue,t.updateQueue=e,Nl(t,e),Ii(s,!0),s.tail===null&&s.tailMode==="hidden"&&!c.alternate&&!ve)return Re(t),null}else 2*wt()-s.renderingStartTime>Rl&&n!==536870912&&(t.flags|=128,o=!0,Ii(s,!1),t.lanes=4194304);s.isBackwards?(c.sibling=t.child,t.child=c):(e=s.last,e!==null?e.sibling=c:t.child=c,s.last=c)}return s.tail!==null?(e=s.tail,s.rendering=e,s.tail=e.sibling,s.renderingStartTime=wt(),e.sibling=null,n=Ge.current,K(Ge,o?n&1|2:n&1),ve&&cn(t,s.treeForkCount),e):(Re(t),null);case 22:case 23:return Dt(t),Do(),s=t.memoizedState!==null,e!==null?e.memoizedState!==null!==s&&(t.flags|=8192):s&&(t.flags|=8192),s?(n&536870912)!==0&&(t.flags&128)===0&&(Re(t),t.subtreeFlags&6&&(t.flags|=8192)):Re(t),n=t.updateQueue,n!==null&&Nl(t,n.retryQueue),n=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(n=e.memoizedState.cachePool.pool),s=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(s=t.memoizedState.cachePool.pool),s!==n&&(t.flags|=2048),e!==null&&z(da),null;case 24:return n=null,e!==null&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),dn(Xe),Re(t),null;case 25:return null;case 30:return null}throw Error(r(156,t.tag))}function Fx(e,t){switch(ho(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return dn(Xe),qe(),e=t.flags,(e&65536)!==0&&(e&128)===0?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return Us(t),null;case 31:if(t.memoizedState!==null){if(Dt(t),t.alternate===null)throw Error(r(340));ua()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(Dt(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(r(340));ua()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return z(Ge),null;case 4:return qe(),null;case 10:return dn(t.type),null;case 22:case 23:return Dt(t),Do(),e!==null&&z(da),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return dn(Xe),null;case 25:return null;default:return null}}function Jh(e,t){switch(ho(t),t.tag){case 3:dn(Xe),qe();break;case 26:case 27:case 5:Us(t);break;case 4:qe();break;case 31:t.memoizedState!==null&&Dt(t);break;case 13:Dt(t);break;case 19:z(Ge);break;case 10:dn(t.type);break;case 22:case 23:Dt(t),Do(),e!==null&&z(da);break;case 24:dn(Xe)}}function es(e,t){try{var n=t.updateQueue,s=n!==null?n.lastEffect:null;if(s!==null){var o=s.next;n=o;do{if((n.tag&e)===e){s=void 0;var c=n.create,g=n.inst;s=c(),g.destroy=s}n=n.next}while(n!==o)}}catch(x){Ee(t,t.return,x)}}function kn(e,t,n){try{var s=t.updateQueue,o=s!==null?s.lastEffect:null;if(o!==null){var c=o.next;s=c;do{if((s.tag&e)===e){var g=s.inst,x=g.destroy;if(x!==void 0){g.destroy=void 0,o=t;var T=n,C=x;try{C()}catch(_){Ee(o,T,_)}}}s=s.next}while(s!==c)}}catch(_){Ee(t,t.return,_)}}function $h(e){var t=e.updateQueue;if(t!==null){var n=e.stateNode;try{qd(t,n)}catch(s){Ee(e,e.return,s)}}}function Wh(e,t,n){n.props=ya(e.type,e.memoizedProps),n.state=e.memoizedState;try{n.componentWillUnmount()}catch(s){Ee(e,t,s)}}function ts(e,t){try{var n=e.ref;if(n!==null){switch(e.tag){case 26:case 27:case 5:var s=e.stateNode;break;case 30:s=e.stateNode;break;default:s=e.stateNode}typeof n=="function"?e.refCleanup=n(s):n.current=s}}catch(o){Ee(e,t,o)}}function It(e,t){var n=e.ref,s=e.refCleanup;if(n!==null)if(typeof s=="function")try{s()}catch(o){Ee(e,t,o)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof n=="function")try{n(null)}catch(o){Ee(e,t,o)}else n.current=null}function Ih(e){var t=e.type,n=e.memoizedProps,s=e.stateNode;try{e:switch(t){case"button":case"input":case"select":case"textarea":n.autoFocus&&s.focus();break e;case"img":n.src?s.src=n.src:n.srcSet&&(s.srcset=n.srcSet)}}catch(o){Ee(e,e.return,o)}}function lu(e,t,n){try{var s=e.stateNode;p1(s,e.type,n,t),s[pt]=t}catch(o){Ee(e,e.return,o)}}function em(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&Kn(e.type)||e.tag===4}function ru(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||em(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&&Kn(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 ou(e,t,n){var s=e.tag;if(s===5||s===6)e=e.stateNode,t?(n.nodeType===9?n.body:n.nodeName==="HTML"?n.ownerDocument.body:n).insertBefore(e,t):(t=n.nodeType===9?n.body:n.nodeName==="HTML"?n.ownerDocument.body:n,t.appendChild(e),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=rn));else if(s!==4&&(s===27&&Kn(e.type)&&(n=e.stateNode,t=null),e=e.child,e!==null))for(ou(e,t,n),e=e.sibling;e!==null;)ou(e,t,n),e=e.sibling}function Dl(e,t,n){var s=e.tag;if(s===5||s===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(s!==4&&(s===27&&Kn(e.type)&&(n=e.stateNode),e=e.child,e!==null))for(Dl(e,t,n),e=e.sibling;e!==null;)Dl(e,t,n),e=e.sibling}function tm(e){var t=e.stateNode,n=e.memoizedProps;try{for(var s=e.type,o=t.attributes;o.length;)t.removeAttributeNode(o[0]);lt(t,s,n),t[nt]=e,t[pt]=n}catch(c){Ee(e,e.return,c)}}var yn=!1,Qe=!1,uu=!1,nm=typeof WeakSet=="function"?WeakSet:Set,et=null;function Qx(e,t){if(e=e.containerInfo,Cu=Zl,e=md(e),to(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var s=n.getSelection&&n.getSelection();if(s&&s.rangeCount!==0){n=s.anchorNode;var o=s.anchorOffset,c=s.focusNode;s=s.focusOffset;try{n.nodeType,c.nodeType}catch{n=null;break e}var g=0,x=-1,T=-1,C=0,_=0,U=e,O=null;t:for(;;){for(var R;U!==n||o!==0&&U.nodeType!==3||(x=g+o),U!==c||s!==0&&U.nodeType!==3||(T=g+s),U.nodeType===3&&(g+=U.nodeValue.length),(R=U.firstChild)!==null;)O=U,U=R;for(;;){if(U===e)break t;if(O===n&&++C===o&&(x=g),O===c&&++_===s&&(T=g),(R=U.nextSibling)!==null)break;U=O,O=U.parentNode}U=R}n=x===-1||T===-1?null:{start:x,end:T}}else n=null}n=n||{start:0,end:0}}else n=null;for(Ou={focusedElem:e,selectionRange:n},Zl=!1,et=t;et!==null;)if(t=et,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,et=e;else for(;et!==null;){switch(t=et,c=t.alternate,e=t.flags,t.tag){case 0:if((e&4)!==0&&(e=t.updateQueue,e=e!==null?e.events:null,e!==null))for(n=0;n title"))),lt(c,s,n),c[nt]=e,Ie(c),s=c;break e;case"link":var g=op("link","href",o).get(s+(n.href||""));if(g){for(var x=0;xDe&&(g=De,De=ne,ne=g);var D=dd(x,ne),N=dd(x,De);if(D&&N&&(R.rangeCount!==1||R.anchorNode!==D.node||R.anchorOffset!==D.offset||R.focusNode!==N.node||R.focusOffset!==N.offset)){var M=U.createRange();M.setStart(D.node,D.offset),R.removeAllRanges(),ne>De?(R.addRange(M),R.extend(N.node,N.offset)):(M.setEnd(N.node,N.offset),R.addRange(M))}}}}for(U=[],R=x;R=R.parentNode;)R.nodeType===1&&U.push({element:R,left:R.scrollLeft,top:R.scrollTop});for(typeof x.focus=="function"&&x.focus(),x=0;xn?32:n,L.T=null,n=gu,gu=null;var c=qn,g=wn;if($e=0,ni=qn=null,wn=0,(we&6)!==0)throw Error(r(331));var x=we;if(we|=4,hm(c.current),cm(c,c.current,g,n),we=x,rs(0,!1),Tt&&typeof Tt.onPostCommitFiberRoot=="function")try{Tt.onPostCommitFiberRoot(Ei,c)}catch{}return!0}finally{G.p=o,L.T=s,Om(e,t)}}function Lm(e,t,n){t=zt(n,t),t=Zo(e.stateNode,t,2),e=_n(e,t,2),e!==null&&(Ni(e,2),en(e))}function Ee(e,t,n){if(e.tag===3)Lm(e,e,n);else for(;t!==null;){if(t.tag===3){Lm(t,e,n);break}else if(t.tag===1){var s=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof s.componentDidCatch=="function"&&(Hn===null||!Hn.has(s))){e=zt(n,e),n=_h(2),s=_n(t,n,2),s!==null&&(zh(n,s,t,e),Ni(s,2),en(s));break}}t=t.return}}function bu(e,t,n){var s=e.pingCache;if(s===null){s=e.pingCache=new $x;var o=new Set;s.set(t,o)}else o=s.get(t),o===void 0&&(o=new Set,s.set(t,o));o.has(n)||(du=!0,o.add(n),e=n1.bind(null,e,t,n),t.then(e,e))}function n1(e,t,n){var s=e.pingCache;s!==null&&s.delete(t),e.pingedLanes|=e.suspendedLanes&n,e.warmLanes&=~n,Me===e&&(pe&n)===n&&(Ue===4||Ue===3&&(pe&62914560)===pe&&300>wt()-Ol?(we&2)===0&&ai(e,0):hu|=n,ti===pe&&(ti=0)),en(e)}function _m(e,t){t===0&&(t=Df()),e=ra(e,t),e!==null&&(Ni(e,t),en(e))}function a1(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),_m(e,n)}function i1(e,t){var n=0;switch(e.tag){case 31:case 13:var s=e.stateNode,o=e.memoizedState;o!==null&&(n=o.retryLane);break;case 19:s=e.stateNode;break;case 22:s=e.stateNode._retryCache;break;default:throw Error(r(314))}s!==null&&s.delete(t),_m(e,n)}function s1(e,t){return Rr(e,t)}var Ul=null,si=null,Su=!1,Bl=!1,wu=!1,Yn=0;function en(e){e!==si&&e.next===null&&(si===null?Ul=si=e:si=si.next=e),Bl=!0,Su||(Su=!0,r1())}function rs(e,t){if(!wu&&Bl){wu=!0;do for(var n=!1,s=Ul;s!==null;){if(e!==0){var o=s.pendingLanes;if(o===0)var c=0;else{var g=s.suspendedLanes,x=s.pingedLanes;c=(1<<31-At(42|e)+1)-1,c&=o&~(g&~x),c=c&201326741?c&201326741|1:c?c|2:0}c!==0&&(n=!0,Um(s,c))}else c=pe,c=Ys(s,s===Me?c:0,s.cancelPendingCommit!==null||s.timeoutHandle!==-1),(c&3)===0||ji(s,c)||(n=!0,Um(s,c));s=s.next}while(n);wu=!1}}function l1(){zm()}function zm(){Bl=Su=!1;var e=0;Yn!==0&&y1()&&(e=Yn);for(var t=wt(),n=null,s=Ul;s!==null;){var o=s.next,c=Vm(s,t);c===0?(s.next=null,n===null?Ul=o:n.next=o,o===null&&(si=n)):(n=s,(e!==0||(c&3)!==0)&&(Bl=!0)),s=o}$e!==0&&$e!==5||rs(e),Yn!==0&&(Yn=0)}function Vm(e,t){for(var n=e.suspendedLanes,s=e.pingedLanes,o=e.expirationTimes,c=e.pendingLanes&-62914561;0x)break;var _=T.transferSize,U=T.initiatorType;_&&Pm(U)&&(T=T.responseEnd,g+=_*(T"u"?null:document;function ip(e,t,n){var s=li;if(s&&typeof t=="string"&&t){var o=Lt(t);o='link[rel="'+e+'"][href="'+o+'"]',typeof n=="string"&&(o+='[crossorigin="'+n+'"]'),ap.has(o)||(ap.add(o),e={rel:e,crossOrigin:n,href:t},s.querySelector(o)===null&&(t=s.createElement("link"),lt(t,"link",e),Ie(t),s.head.appendChild(t)))}}function j1(e){Tn.D(e),ip("dns-prefetch",e,null)}function N1(e,t){Tn.C(e,t),ip("preconnect",e,t)}function D1(e,t,n){Tn.L(e,t,n);var s=li;if(s&&e&&t){var o='link[rel="preload"][as="'+Lt(t)+'"]';t==="image"&&n&&n.imageSrcSet?(o+='[imagesrcset="'+Lt(n.imageSrcSet)+'"]',typeof n.imageSizes=="string"&&(o+='[imagesizes="'+Lt(n.imageSizes)+'"]')):o+='[href="'+Lt(e)+'"]';var c=o;switch(t){case"style":c=ri(e);break;case"script":c=oi(e)}qt.has(c)||(e=b({rel:"preload",href:t==="image"&&n&&n.imageSrcSet?void 0:e,as:t},n),qt.set(c,e),s.querySelector(o)!==null||t==="style"&&s.querySelector(fs(c))||t==="script"&&s.querySelector(ds(c))||(t=s.createElement("link"),lt(t,"link",e),Ie(t),s.head.appendChild(t)))}}function M1(e,t){Tn.m(e,t);var n=li;if(n&&e){var s=t&&typeof t.as=="string"?t.as:"script",o='link[rel="modulepreload"][as="'+Lt(s)+'"][href="'+Lt(e)+'"]',c=o;switch(s){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":c=oi(e)}if(!qt.has(c)&&(e=b({rel:"modulepreload",href:e},t),qt.set(c,e),n.querySelector(o)===null)){switch(s){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(n.querySelector(ds(c)))return}s=n.createElement("link"),lt(s,"link",e),Ie(s),n.head.appendChild(s)}}}function C1(e,t,n){Tn.S(e,t,n);var s=li;if(s&&e){var o=Ma(s).hoistableStyles,c=ri(e);t=t||"default";var g=o.get(c);if(!g){var x={loading:0,preload:null};if(g=s.querySelector(fs(c)))x.loading=5;else{e=b({rel:"stylesheet",href:e,"data-precedence":t},n),(n=qt.get(c))&&Uu(e,n);var T=g=s.createElement("link");Ie(T),lt(T,"link",e),T._p=new Promise(function(C,_){T.onload=C,T.onerror=_}),T.addEventListener("load",function(){x.loading|=1}),T.addEventListener("error",function(){x.loading|=2}),x.loading|=4,Kl(g,t,s)}g={type:"stylesheet",instance:g,count:1,state:x},o.set(c,g)}}}function O1(e,t){Tn.X(e,t);var n=li;if(n&&e){var s=Ma(n).hoistableScripts,o=oi(e),c=s.get(o);c||(c=n.querySelector(ds(o)),c||(e=b({src:e,async:!0},t),(t=qt.get(o))&&Bu(e,t),c=n.createElement("script"),Ie(c),lt(c,"link",e),n.head.appendChild(c)),c={type:"script",instance:c,count:1,state:null},s.set(o,c))}}function R1(e,t){Tn.M(e,t);var n=li;if(n&&e){var s=Ma(n).hoistableScripts,o=oi(e),c=s.get(o);c||(c=n.querySelector(ds(o)),c||(e=b({src:e,async:!0,type:"module"},t),(t=qt.get(o))&&Bu(e,t),c=n.createElement("script"),Ie(c),lt(c,"link",e),n.head.appendChild(c)),c={type:"script",instance:c,count:1,state:null},s.set(o,c))}}function sp(e,t,n,s){var o=(o=de.current)?Yl(o):null;if(!o)throw Error(r(446));switch(e){case"meta":case"title":return null;case"style":return typeof n.precedence=="string"&&typeof n.href=="string"?(t=ri(n.href),n=Ma(o).hoistableStyles,s=n.get(t),s||(s={type:"style",instance:null,count:0,state:null},n.set(t,s)),s):{type:"void",instance:null,count:0,state:null};case"link":if(n.rel==="stylesheet"&&typeof n.href=="string"&&typeof n.precedence=="string"){e=ri(n.href);var c=Ma(o).hoistableStyles,g=c.get(e);if(g||(o=o.ownerDocument||o,g={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},c.set(e,g),(c=o.querySelector(fs(e)))&&!c._p&&(g.instance=c,g.state.loading=5),qt.has(e)||(n={rel:"preload",as:"style",href:n.href,crossOrigin:n.crossOrigin,integrity:n.integrity,media:n.media,hrefLang:n.hrefLang,referrerPolicy:n.referrerPolicy},qt.set(e,n),c||L1(o,e,n,g.state))),t&&s===null)throw Error(r(528,""));return g}if(t&&s!==null)throw Error(r(529,""));return null;case"script":return t=n.async,n=n.src,typeof n=="string"&&t&&typeof t!="function"&&typeof t!="symbol"?(t=oi(n),n=Ma(o).hoistableScripts,s=n.get(t),s||(s={type:"script",instance:null,count:0,state:null},n.set(t,s)),s):{type:"void",instance:null,count:0,state:null};default:throw Error(r(444,e))}}function ri(e){return'href="'+Lt(e)+'"'}function fs(e){return'link[rel="stylesheet"]['+e+"]"}function lp(e){return b({},e,{"data-precedence":e.precedence,precedence:null})}function L1(e,t,n,s){e.querySelector('link[rel="preload"][as="style"]['+t+"]")?s.loading=1:(t=e.createElement("link"),s.preload=t,t.addEventListener("load",function(){return s.loading|=1}),t.addEventListener("error",function(){return s.loading|=2}),lt(t,"link",n),Ie(t),e.head.appendChild(t))}function oi(e){return'[src="'+Lt(e)+'"]'}function ds(e){return"script[async]"+e}function rp(e,t,n){if(t.count++,t.instance===null)switch(t.type){case"style":var s=e.querySelector('style[data-href~="'+Lt(n.href)+'"]');if(s)return t.instance=s,Ie(s),s;var o=b({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return s=(e.ownerDocument||e).createElement("style"),Ie(s),lt(s,"style",o),Kl(s,n.precedence,e),t.instance=s;case"stylesheet":o=ri(n.href);var c=e.querySelector(fs(o));if(c)return t.state.loading|=4,t.instance=c,Ie(c),c;s=lp(n),(o=qt.get(o))&&Uu(s,o),c=(e.ownerDocument||e).createElement("link"),Ie(c);var g=c;return g._p=new Promise(function(x,T){g.onload=x,g.onerror=T}),lt(c,"link",s),t.state.loading|=4,Kl(c,n.precedence,e),t.instance=c;case"script":return c=oi(n.src),(o=e.querySelector(ds(c)))?(t.instance=o,Ie(o),o):(s=n,(o=qt.get(c))&&(s=b({},n),Bu(s,o)),e=e.ownerDocument||e,o=e.createElement("script"),Ie(o),lt(o,"link",s),e.head.appendChild(o),t.instance=o);case"void":return null;default:throw Error(r(443,t.type))}else t.type==="stylesheet"&&(t.state.loading&4)===0&&(s=t.instance,t.state.loading|=4,Kl(s,n.precedence,e));return t.instance}function Kl(e,t,n){for(var s=n.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),o=s.length?s[s.length-1]:null,c=o,g=0;g title"):null)}function _1(e,t,n){if(n===1||t.itemProp!=null)return!1;switch(e){case"meta":case"title":return!0;case"style":if(typeof t.precedence!="string"||typeof t.href!="string"||t.href==="")break;return!0;case"link":if(typeof t.rel!="string"||typeof t.href!="string"||t.href===""||t.onLoad||t.onError)break;switch(t.rel){case"stylesheet":return e=t.disabled,typeof t.precedence=="string"&&e==null;default:return!0}case"script":if(t.async&&typeof t.async!="function"&&typeof t.async!="symbol"&&!t.onLoad&&!t.onError&&t.src&&typeof t.src=="string")return!0}return!1}function cp(e){return!(e.type==="stylesheet"&&(e.state.loading&3)===0)}function z1(e,t,n,s){if(n.type==="stylesheet"&&(typeof s.media!="string"||matchMedia(s.media).matches!==!1)&&(n.state.loading&4)===0){if(n.instance===null){var o=ri(s.href),c=t.querySelector(fs(o));if(c){t=c._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(e.count++,e=Pl.bind(e),t.then(e,e)),n.state.loading|=4,n.instance=c,Ie(c);return}c=t.ownerDocument||t,s=lp(s),(o=qt.get(o))&&Uu(s,o),c=c.createElement("link"),Ie(c);var g=c;g._p=new Promise(function(x,T){g.onload=x,g.onerror=T}),lt(c,"link",s),n.instance=c}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(n,t),(t=n.state.preload)&&(n.state.loading&3)===0&&(e.count++,n=Pl.bind(e),t.addEventListener("load",n),t.addEventListener("error",n))}}var Hu=0;function V1(e,t){return e.stylesheets&&e.count===0&&Ql(e,e.stylesheets),0Hu?50:800)+t);return e.unsuspend=n,function(){e.unsuspend=null,clearTimeout(s),clearTimeout(o)}}:null}function Pl(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Ql(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var Fl=null;function Ql(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,Fl=new Map,t.forEach(k1,e),Fl=null,Pl.call(e))}function k1(e,t){if(!(t.state.loading&4)){var n=Fl.get(e);if(n)var s=n.get(null);else{n=new Map,Fl.set(e,n);for(var o=e.querySelectorAll("link[data-precedence],style[data-precedence]"),c=0;c"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(i)}catch(a){console.error(a)}}return i(),Zu.exports=I1(),Zu.exports}var tb=eb();const gy=te.createContext({});function nb(i){const a=te.useRef(null);return a.current===null&&(a.current=i()),a.current}const ab=typeof window<"u",ib=ab?te.useLayoutEffect:te.useEffect,Xc=te.createContext(null);function Pc(i,a){i.indexOf(a)===-1&&i.push(a)}function dr(i,a){const l=i.indexOf(a);l>-1&&i.splice(l,1)}const sn=(i,a,l)=>l>a?a:l{};const An={},yy=i=>/^-?(?:\d+(?:\.\d+)?|\.\d+)$/u.test(i);function vy(i){return typeof i=="object"&&i!==null}const xy=i=>/^0[^.\s]+$/u.test(i);function by(i){let a;return()=>(a===void 0&&(a=i()),a)}const Yt=i=>i,sb=(i,a)=>l=>a(i(l)),_s=(...i)=>i.reduce(sb),Ds=(i,a,l)=>{const r=a-i;return r===0?1:(l-i)/r};class Qc{constructor(){this.subscriptions=[]}add(a){return Pc(this.subscriptions,a),()=>dr(this.subscriptions,a)}notify(a,l,r){const u=this.subscriptions.length;if(u)if(u===1)this.subscriptions[0](a,l,r);else for(let f=0;fi*1e3,Gt=i=>i/1e3;function Sy(i,a){return a?i*(1e3/a):0}const wy=(i,a,l)=>(((1-3*l+3*a)*i+(3*l-6*a))*i+3*a)*i,lb=1e-7,rb=12;function ob(i,a,l,r,u){let f,d,h=0;do d=a+(l-a)/2,f=wy(d,r,u)-i,f>0?l=d:a=d;while(Math.abs(f)>lb&&++hob(f,0,1,i,l);return f=>f===0||f===1?f:wy(u(f),a,r)}const Ty=i=>a=>a<=.5?i(2*a)/2:(2-i(2*(1-a)))/2,Ay=i=>a=>1-i(1-a),Ey=zs(.33,1.53,.69,.99),Zc=Ay(Ey),jy=Ty(Zc),Ny=i=>(i*=2)<1?.5*Zc(i):.5*(2-Math.pow(2,-10*(i-1))),Jc=i=>1-Math.sin(Math.acos(i)),Dy=Ay(Jc),My=Ty(Jc),ub=zs(.42,0,1,1),cb=zs(0,0,.58,1),Cy=zs(.42,0,.58,1),fb=i=>Array.isArray(i)&&typeof i[0]!="number",Oy=i=>Array.isArray(i)&&typeof i[0]=="number",db={linear:Yt,easeIn:ub,easeInOut:Cy,easeOut:cb,circIn:Jc,circInOut:My,circOut:Dy,backIn:Zc,backInOut:jy,backOut:Ey,anticipate:Ny},hb=i=>typeof i=="string",_p=i=>{if(Oy(i)){Fc(i.length===4);const[a,l,r,u]=i;return zs(a,l,r,u)}else if(hb(i))return db[i];return i},nr=["setup","read","resolveKeyframes","preUpdate","update","preRender","render","postRender"];function mb(i,a){let l=new Set,r=new Set,u=!1,f=!1;const d=new WeakSet;let h={delta:0,timestamp:0,isProcessing:!1};function y(v){d.has(v)&&(p.schedule(v),i()),v(h)}const p={schedule:(v,b=!1,w=!1)=>{const E=w&&u?l:r;return b&&d.add(v),E.has(v)||E.add(v),v},cancel:v=>{r.delete(v),d.delete(v)},process:v=>{if(h=v,u){f=!0;return}u=!0,[l,r]=[r,l],l.forEach(y),l.clear(),u=!1,f&&(f=!1,p.process(v))}};return p}const pb=40;function Ry(i,a){let l=!1,r=!0;const u={delta:0,timestamp:0,isProcessing:!1},f=()=>l=!0,d=nr.reduce((H,X)=>(H[X]=mb(f),H),{}),{setup:h,read:y,resolveKeyframes:p,preUpdate:v,update:b,preRender:w,render:j,postRender:E}=d,V=()=>{const H=An.useManualTiming?u.timestamp:performance.now();l=!1,An.useManualTiming||(u.delta=r?1e3/60:Math.max(Math.min(H-u.timestamp,pb),1)),u.timestamp=H,u.isProcessing=!0,h.process(u),y.process(u),p.process(u),v.process(u),b.process(u),w.process(u),j.process(u),E.process(u),u.isProcessing=!1,l&&a&&(r=!1,i(V))},B=()=>{l=!0,r=!0,u.isProcessing||i(V)};return{schedule:nr.reduce((H,X)=>{const P=d[X];return H[X]=(ae,Q=!1,I=!1)=>(l||B(),P.schedule(ae,Q,I)),H},{}),cancel:H=>{for(let X=0;X(lr===void 0&&ht.set(rt.isProcessing||An.useManualTiming?rt.timestamp:performance.now()),lr),set:i=>{lr=i,queueMicrotask(gb)}},Ly=i=>a=>typeof a=="string"&&a.startsWith(i),_y=Ly("--"),yb=Ly("var(--"),$c=i=>yb(i)?vb.test(i.split("/*")[0].trim()):!1,vb=/var\(--(?:[\w-]+\s*|[\w-]+\s*,(?:\s*[^)(\s]|\s*\((?:[^)(]|\([^)(]*\))*\))+\s*)\)$/iu;function zp(i){return typeof i!="string"?!1:i.split("/*")[0].includes("var(--")}const Si={test:i=>typeof i=="number",parse:parseFloat,transform:i=>i},Ms={...Si,transform:i=>sn(0,1,i)},ar={...Si,default:1},ws=i=>Math.round(i*1e5)/1e5,Wc=/-?(?:\d+(?:\.\d+)?|\.\d+)/gu;function xb(i){return i==null}const bb=/^(?:#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\))$/iu,Ic=(i,a)=>l=>!!(typeof l=="string"&&bb.test(l)&&l.startsWith(i)||a&&!xb(l)&&Object.prototype.hasOwnProperty.call(l,a)),zy=(i,a,l)=>r=>{if(typeof r!="string")return r;const[u,f,d,h]=r.match(Wc);return{[i]:parseFloat(u),[a]:parseFloat(f),[l]:parseFloat(d),alpha:h!==void 0?parseFloat(h):1}},Sb=i=>sn(0,255,i),ec={...Si,transform:i=>Math.round(Sb(i))},Ta={test:Ic("rgb","red"),parse:zy("red","green","blue"),transform:({red:i,green:a,blue:l,alpha:r=1})=>"rgba("+ec.transform(i)+", "+ec.transform(a)+", "+ec.transform(l)+", "+ws(Ms.transform(r))+")"};function wb(i){let a="",l="",r="",u="";return i.length>5?(a=i.substring(1,3),l=i.substring(3,5),r=i.substring(5,7),u=i.substring(7,9)):(a=i.substring(1,2),l=i.substring(2,3),r=i.substring(3,4),u=i.substring(4,5),a+=a,l+=l,r+=r,u+=u),{red:parseInt(a,16),green:parseInt(l,16),blue:parseInt(r,16),alpha:u?parseInt(u,16)/255:1}}const xc={test:Ic("#"),parse:wb,transform:Ta.transform},Vs=i=>({test:a=>typeof a=="string"&&a.endsWith(i)&&a.split(" ").length===1,parse:parseFloat,transform:a=>`${a}${i}`}),Jn=Vs("deg"),an=Vs("%"),$=Vs("px"),Tb=Vs("vh"),Ab=Vs("vw"),Vp={...an,parse:i=>an.parse(i)/100,transform:i=>an.transform(i*100)},hi={test:Ic("hsl","hue"),parse:zy("hue","saturation","lightness"),transform:({hue:i,saturation:a,lightness:l,alpha:r=1})=>"hsla("+Math.round(i)+", "+an.transform(ws(a))+", "+an.transform(ws(l))+", "+ws(Ms.transform(r))+")"},Je={test:i=>Ta.test(i)||xc.test(i)||hi.test(i),parse:i=>Ta.test(i)?Ta.parse(i):hi.test(i)?hi.parse(i):xc.parse(i),transform:i=>typeof i=="string"?i:i.hasOwnProperty("red")?Ta.transform(i):hi.transform(i),getAnimatableNone:i=>{const a=Je.parse(i);return a.alpha=0,Je.transform(a)}},Eb=/(?:#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\))/giu;function jb(i){var a,l;return isNaN(i)&&typeof i=="string"&&(((a=i.match(Wc))==null?void 0:a.length)||0)+(((l=i.match(Eb))==null?void 0:l.length)||0)>0}const Vy="number",ky="color",Nb="var",Db="var(",kp="${}",Mb=/var\s*\(\s*--(?:[\w-]+\s*|[\w-]+\s*,(?:\s*[^)(\s]|\s*\((?:[^)(]|\([^)(]*\))*\))+\s*)\)|#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\)|-?(?:\d+(?:\.\d+)?|\.\d+)/giu;function Cs(i){const a=i.toString(),l=[],r={color:[],number:[],var:[]},u=[];let f=0;const h=a.replace(Mb,y=>(Je.test(y)?(r.color.push(f),u.push(ky),l.push(Je.parse(y))):y.startsWith(Db)?(r.var.push(f),u.push(Nb),l.push(y)):(r.number.push(f),u.push(Vy),l.push(parseFloat(y))),++f,kp)).split(kp);return{values:l,split:h,indexes:r,types:u}}function Uy(i){return Cs(i).values}function By(i){const{split:a,types:l}=Cs(i),r=a.length;return u=>{let f="";for(let d=0;dtypeof i=="number"?0:Je.test(i)?Je.getAnimatableNone(i):i;function Ob(i){const a=Uy(i);return By(i)(a.map(Cb))}const Jt={test:jb,parse:Uy,createTransformer:By,getAnimatableNone:Ob};function tc(i,a,l){return l<0&&(l+=1),l>1&&(l-=1),l<1/6?i+(a-i)*6*l:l<1/2?a:l<2/3?i+(a-i)*(2/3-l)*6:i}function Rb({hue:i,saturation:a,lightness:l,alpha:r}){i/=360,a/=100,l/=100;let u=0,f=0,d=0;if(!a)u=f=d=l;else{const h=l<.5?l*(1+a):l+a-l*a,y=2*l-h;u=tc(y,h,i+1/3),f=tc(y,h,i),d=tc(y,h,i-1/3)}return{red:Math.round(u*255),green:Math.round(f*255),blue:Math.round(d*255),alpha:r}}function hr(i,a){return l=>l>0?a:i}const ze=(i,a,l)=>i+(a-i)*l,nc=(i,a,l)=>{const r=i*i,u=l*(a*a-r)+r;return u<0?0:Math.sqrt(u)},Lb=[xc,Ta,hi],_b=i=>Lb.find(a=>a.test(i));function Up(i){const a=_b(i);if(!a)return!1;let l=a.parse(i);return a===hi&&(l=Rb(l)),l}const Bp=(i,a)=>{const l=Up(i),r=Up(a);if(!l||!r)return hr(i,a);const u={...l};return f=>(u.red=nc(l.red,r.red,f),u.green=nc(l.green,r.green,f),u.blue=nc(l.blue,r.blue,f),u.alpha=ze(l.alpha,r.alpha,f),Ta.transform(u))},bc=new Set(["none","hidden"]);function zb(i,a){return bc.has(i)?l=>l<=0?i:a:l=>l>=1?a:i}function Vb(i,a){return l=>ze(i,a,l)}function ef(i){return typeof i=="number"?Vb:typeof i=="string"?$c(i)?hr:Je.test(i)?Bp:Bb:Array.isArray(i)?Hy:typeof i=="object"?Je.test(i)?Bp:kb:hr}function Hy(i,a){const l=[...i],r=l.length,u=i.map((f,d)=>ef(f)(f,a[d]));return f=>{for(let d=0;d{for(const f in r)l[f]=r[f](u);return l}}function Ub(i,a){const l=[],r={color:0,var:0,number:0};for(let u=0;u{const l=Jt.createTransformer(a),r=Cs(i),u=Cs(a);return r.indexes.var.length===u.indexes.var.length&&r.indexes.color.length===u.indexes.color.length&&r.indexes.number.length>=u.indexes.number.length?bc.has(i)&&!u.values.length||bc.has(a)&&!r.values.length?zb(i,a):_s(Hy(Ub(r,u),u.values),l):hr(i,a)};function qy(i,a,l){return typeof i=="number"&&typeof a=="number"&&typeof l=="number"?ze(i,a,l):ef(i)(i,a)}const Hb=i=>{const a=({timestamp:l})=>i(l);return{start:(l=!0)=>Ce.update(a,l),stop:()=>In(a),now:()=>rt.isProcessing?rt.timestamp:ht.now()}},Gy=(i,a,l=10)=>{let r="";const u=Math.max(Math.round(a/l),2);for(let f=0;f=mr?1/0:a}function qb(i,a=100,l){const r=l({...i,keyframes:[0,a]}),u=Math.min(tf(r),mr);return{type:"keyframes",ease:f=>r.next(u*f).value/a,duration:Gt(u)}}const Gb=5;function Yy(i,a,l){const r=Math.max(a-Gb,0);return Sy(l-i(r),a-r)}const Be={stiffness:100,damping:10,mass:1,velocity:0,duration:800,bounce:.3,visualDuration:.3,restSpeed:{granular:.01,default:2},restDelta:{granular:.005,default:.5},minDuration:.01,maxDuration:10,minDamping:.05,maxDamping:1},ac=.001;function Yb({duration:i=Be.duration,bounce:a=Be.bounce,velocity:l=Be.velocity,mass:r=Be.mass}){let u,f,d=1-a;d=sn(Be.minDamping,Be.maxDamping,d),i=sn(Be.minDuration,Be.maxDuration,Gt(i)),d<1?(u=p=>{const v=p*d,b=v*i,w=v-l,j=Sc(p,d),E=Math.exp(-b);return ac-w/j*E},f=p=>{const b=p*d*i,w=b*l+l,j=Math.pow(d,2)*Math.pow(p,2)*i,E=Math.exp(-b),V=Sc(Math.pow(p,2),d);return(-u(p)+ac>0?-1:1)*((w-j)*E)/V}):(u=p=>{const v=Math.exp(-p*i),b=(p-l)*i+1;return-ac+v*b},f=p=>{const v=Math.exp(-p*i),b=(l-p)*(i*i);return v*b});const h=5/i,y=Xb(u,f,h);if(i=Zt(i),isNaN(y))return{stiffness:Be.stiffness,damping:Be.damping,duration:i};{const p=Math.pow(y,2)*r;return{stiffness:p,damping:d*2*Math.sqrt(r*p),duration:i}}}const Kb=12;function Xb(i,a,l){let r=l;for(let u=1;ui[l]!==void 0)}function Qb(i){let a={velocity:Be.velocity,stiffness:Be.stiffness,damping:Be.damping,mass:Be.mass,isResolvedFromDuration:!1,...i};if(!Hp(i,Fb)&&Hp(i,Pb))if(a.velocity=0,i.visualDuration){const l=i.visualDuration,r=2*Math.PI/(l*1.2),u=r*r,f=2*sn(.05,1,1-(i.bounce||0))*Math.sqrt(u);a={...a,mass:Be.mass,stiffness:u,damping:f}}else{const l=Yb({...i,velocity:0});a={...a,...l,mass:Be.mass},a.isResolvedFromDuration=!0}return a}function pr(i=Be.visualDuration,a=Be.bounce){const l=typeof i!="object"?{visualDuration:i,keyframes:[0,1],bounce:a}:i;let{restSpeed:r,restDelta:u}=l;const f=l.keyframes[0],d=l.keyframes[l.keyframes.length-1],h={done:!1,value:f},{stiffness:y,damping:p,mass:v,duration:b,velocity:w,isResolvedFromDuration:j}=Qb({...l,velocity:-Gt(l.velocity||0)}),E=w||0,V=p/(2*Math.sqrt(y*v)),B=d-f,q=Gt(Math.sqrt(y/v)),Y=Math.abs(B)<5;r||(r=Y?Be.restSpeed.granular:Be.restSpeed.default),u||(u=Y?Be.restDelta.granular:Be.restDelta.default);let H;if(V<1){const P=Sc(q,V);H=ae=>{const Q=Math.exp(-V*q*ae);return d-Q*((E+V*q*B)/P*Math.sin(P*ae)+B*Math.cos(P*ae))}}else if(V===1)H=P=>d-Math.exp(-q*P)*(B+(E+q*B)*P);else{const P=q*Math.sqrt(V*V-1);H=ae=>{const Q=Math.exp(-V*q*ae),I=Math.min(P*ae,300);return d-Q*((E+V*q*B)*Math.sinh(I)+P*B*Math.cosh(I))/P}}const X={calculatedDuration:j&&b||null,next:P=>{const ae=H(P);if(j)h.done=P>=b;else{let Q=P===0?E:0;V<1&&(Q=P===0?Zt(E):Yy(H,P,ae));const I=Math.abs(Q)<=r,ce=Math.abs(d-ae)<=u;h.done=I&&ce}return h.value=h.done?d:ae,h},toString:()=>{const P=Math.min(tf(X),mr),ae=Gy(Q=>X.next(P*Q).value,P,30);return P+"ms "+ae},toTransition:()=>{}};return X}pr.applyToOptions=i=>{const a=qb(i,100,pr);return i.ease=a.ease,i.duration=Zt(a.duration),i.type="keyframes",i};function wc({keyframes:i,velocity:a=0,power:l=.8,timeConstant:r=325,bounceDamping:u=10,bounceStiffness:f=500,modifyTarget:d,min:h,max:y,restDelta:p=.5,restSpeed:v}){const b=i[0],w={done:!1,value:b},j=I=>h!==void 0&&Iy,E=I=>h===void 0?y:y===void 0||Math.abs(h-I)-V*Math.exp(-I/r),H=I=>q+Y(I),X=I=>{const ce=Y(I),ye=H(I);w.done=Math.abs(ce)<=p,w.value=w.done?q:ye};let P,ae;const Q=I=>{j(w.value)&&(P=I,ae=pr({keyframes:[w.value,E(w.value)],velocity:Yy(H,I,w.value),damping:u,stiffness:f,restDelta:p,restSpeed:v}))};return Q(0),{calculatedDuration:null,next:I=>{let ce=!1;return!ae&&P===void 0&&(ce=!0,X(I),Q(I)),P!==void 0&&I>=P?ae.next(I-P):(!ce&&X(I),w)}}}function Zb(i,a,l){const r=[],u=l||An.mix||qy,f=i.length-1;for(let d=0;da[0];if(f===2&&a[0]===a[1])return()=>a[1];const d=i[0]===i[1];i[0]>i[f-1]&&(i=[...i].reverse(),a=[...a].reverse());const h=Zb(a,r,u),y=h.length,p=v=>{if(d&&v1)for(;bp(sn(i[0],i[f-1],v)):p}function $b(i,a){const l=i[i.length-1];for(let r=1;r<=a;r++){const u=Ds(0,a,r);i.push(ze(l,1,u))}}function Wb(i){const a=[0];return $b(a,i.length-1),a}function Ib(i,a){return i.map(l=>l*a)}function e2(i,a){return i.map(()=>a||Cy).splice(0,i.length-1)}function Ts({duration:i=300,keyframes:a,times:l,ease:r="easeInOut"}){const u=fb(r)?r.map(_p):_p(r),f={done:!1,value:a[0]},d=Ib(l&&l.length===a.length?l:Wb(a),i),h=Jb(d,a,{ease:Array.isArray(u)?u:e2(a,u)});return{calculatedDuration:i,next:y=>(f.value=h(y),f.done=y>=i,f)}}const t2=i=>i!==null;function nf(i,{repeat:a,repeatType:l="loop"},r,u=1){const f=i.filter(t2),h=u<0||a&&l!=="loop"&&a%2===1?0:f.length-1;return!h||r===void 0?f[h]:r}const n2={decay:wc,inertia:wc,tween:Ts,keyframes:Ts,spring:pr};function Ky(i){typeof i.type=="string"&&(i.type=n2[i.type])}class af{constructor(){this.updateFinished()}get finished(){return this._finished}updateFinished(){this._finished=new Promise(a=>{this.resolve=a})}notifyFinished(){this.resolve()}then(a,l){return this.finished.then(a,l)}}const a2=i=>i/100;class sf extends af{constructor(a){super(),this.state="idle",this.startTime=null,this.isStopped=!1,this.currentTime=0,this.holdTime=null,this.playbackSpeed=1,this.stop=()=>{var r,u;const{motionValue:l}=this.options;l&&l.updatedAt!==ht.now()&&this.tick(ht.now()),this.isStopped=!0,this.state!=="idle"&&(this.teardown(),(u=(r=this.options).onStop)==null||u.call(r))},this.options=a,this.initAnimation(),this.play(),a.autoplay===!1&&this.pause()}initAnimation(){const{options:a}=this;Ky(a);const{type:l=Ts,repeat:r=0,repeatDelay:u=0,repeatType:f,velocity:d=0}=a;let{keyframes:h}=a;const y=l||Ts;y!==Ts&&typeof h[0]!="number"&&(this.mixKeyframes=_s(a2,qy(h[0],h[1])),h=[0,100]);const p=y({...a,keyframes:h});f==="mirror"&&(this.mirroredGenerator=y({...a,keyframes:[...h].reverse(),velocity:-d})),p.calculatedDuration===null&&(p.calculatedDuration=tf(p));const{calculatedDuration:v}=p;this.calculatedDuration=v,this.resolvedDuration=v+u,this.totalDuration=this.resolvedDuration*(r+1)-u,this.generator=p}updateTime(a){const l=Math.round(a-this.startTime)*this.playbackSpeed;this.holdTime!==null?this.currentTime=this.holdTime:this.currentTime=l}tick(a,l=!1){const{generator:r,totalDuration:u,mixKeyframes:f,mirroredGenerator:d,resolvedDuration:h,calculatedDuration:y}=this;if(this.startTime===null)return r.next(0);const{delay:p=0,keyframes:v,repeat:b,repeatType:w,repeatDelay:j,type:E,onUpdate:V,finalKeyframe:B}=this.options;this.speed>0?this.startTime=Math.min(this.startTime,a):this.speed<0&&(this.startTime=Math.min(a-u/this.speed,this.startTime)),l?this.currentTime=a:this.updateTime(a);const q=this.currentTime-p*(this.playbackSpeed>=0?1:-1),Y=this.playbackSpeed>=0?q<0:q>u;this.currentTime=Math.max(q,0),this.state==="finished"&&this.holdTime===null&&(this.currentTime=u);let H=this.currentTime,X=r;if(b){const I=Math.min(this.currentTime,u)/h;let ce=Math.floor(I),ye=I%1;!ye&&I>=1&&(ye=1),ye===1&&ce--,ce=Math.min(ce,b+1),!!(ce%2)&&(w==="reverse"?(ye=1-ye,j&&(ye-=j/h)):w==="mirror"&&(X=d)),H=sn(0,1,ye)*h}const P=Y?{done:!1,value:v[0]}:X.next(H);f&&(P.value=f(P.value));let{done:ae}=P;!Y&&y!==null&&(ae=this.playbackSpeed>=0?this.currentTime>=u:this.currentTime<=0);const Q=this.holdTime===null&&(this.state==="finished"||this.state==="running"&&ae);return Q&&E!==wc&&(P.value=nf(v,this.options,B,this.speed)),V&&V(P.value),Q&&this.finish(),P}then(a,l){return this.finished.then(a,l)}get duration(){return Gt(this.calculatedDuration)}get iterationDuration(){const{delay:a=0}=this.options||{};return this.duration+Gt(a)}get time(){return Gt(this.currentTime)}set time(a){var l;a=Zt(a),this.currentTime=a,this.startTime===null||this.holdTime!==null||this.playbackSpeed===0?this.holdTime=a:this.driver&&(this.startTime=this.driver.now()-a/this.playbackSpeed),(l=this.driver)==null||l.start(!1)}get speed(){return this.playbackSpeed}set speed(a){this.updateTime(ht.now());const l=this.playbackSpeed!==a;this.playbackSpeed=a,l&&(this.time=Gt(this.currentTime))}play(){var u,f;if(this.isStopped)return;const{driver:a=Hb,startTime:l}=this.options;this.driver||(this.driver=a(d=>this.tick(d))),(f=(u=this.options).onPlay)==null||f.call(u);const r=this.driver.now();this.state==="finished"?(this.updateFinished(),this.startTime=r):this.holdTime!==null?this.startTime=r-this.holdTime:this.startTime||(this.startTime=l??r),this.state==="finished"&&this.speed<0&&(this.startTime+=this.calculatedDuration),this.holdTime=null,this.state="running",this.driver.start()}pause(){this.state="paused",this.updateTime(ht.now()),this.holdTime=this.currentTime}complete(){this.state!=="running"&&this.play(),this.state="finished",this.holdTime=null}finish(){var a,l;this.notifyFinished(),this.teardown(),this.state="finished",(l=(a=this.options).onComplete)==null||l.call(a)}cancel(){var a,l;this.holdTime=null,this.startTime=0,this.tick(0),this.teardown(),(l=(a=this.options).onCancel)==null||l.call(a)}teardown(){this.state="idle",this.stopDriver(),this.startTime=this.holdTime=null}stopDriver(){this.driver&&(this.driver.stop(),this.driver=void 0)}sample(a){return this.startTime=0,this.tick(a,!0)}attachTimeline(a){var l;return this.options.allowFlatten&&(this.options.type="keyframes",this.options.ease="linear",this.initAnimation()),(l=this.driver)==null||l.stop(),a.observe(this)}}function i2(i){for(let a=1;ai*180/Math.PI,Tc=i=>{const a=Aa(Math.atan2(i[1],i[0]));return Ac(a)},s2={x:4,y:5,translateX:4,translateY:5,scaleX:0,scaleY:3,scale:i=>(Math.abs(i[0])+Math.abs(i[3]))/2,rotate:Tc,rotateZ:Tc,skewX:i=>Aa(Math.atan(i[1])),skewY:i=>Aa(Math.atan(i[2])),skew:i=>(Math.abs(i[1])+Math.abs(i[2]))/2},Ac=i=>(i=i%360,i<0&&(i+=360),i),qp=Tc,Gp=i=>Math.sqrt(i[0]*i[0]+i[1]*i[1]),Yp=i=>Math.sqrt(i[4]*i[4]+i[5]*i[5]),l2={x:12,y:13,z:14,translateX:12,translateY:13,translateZ:14,scaleX:Gp,scaleY:Yp,scale:i=>(Gp(i)+Yp(i))/2,rotateX:i=>Ac(Aa(Math.atan2(i[6],i[5]))),rotateY:i=>Ac(Aa(Math.atan2(-i[2],i[0]))),rotateZ:qp,rotate:qp,skewX:i=>Aa(Math.atan(i[4])),skewY:i=>Aa(Math.atan(i[1])),skew:i=>(Math.abs(i[1])+Math.abs(i[4]))/2};function Ec(i){return i.includes("scale")?1:0}function jc(i,a){if(!i||i==="none")return Ec(a);const l=i.match(/^matrix3d\(([-\d.e\s,]+)\)$/u);let r,u;if(l)r=l2,u=l;else{const h=i.match(/^matrix\(([-\d.e\s,]+)\)$/u);r=s2,u=h}if(!u)return Ec(a);const f=r[a],d=u[1].split(",").map(o2);return typeof f=="function"?f(d):d[f]}const r2=(i,a)=>{const{transform:l="none"}=getComputedStyle(i);return jc(l,a)};function o2(i){return parseFloat(i.trim())}const wi=["transformPerspective","x","y","z","translateX","translateY","translateZ","scale","scaleX","scaleY","rotate","rotateX","rotateY","rotateZ","skew","skewX","skewY"],Ti=new Set(wi),Kp=i=>i===Si||i===$,u2=new Set(["x","y","z"]),c2=wi.filter(i=>!u2.has(i));function f2(i){const a=[];return c2.forEach(l=>{const r=i.getValue(l);r!==void 0&&(a.push([l,r.get()]),r.set(l.startsWith("scale")?1:0))}),a}const Wn={width:({x:i},{paddingLeft:a="0",paddingRight:l="0"})=>i.max-i.min-parseFloat(a)-parseFloat(l),height:({y:i},{paddingTop:a="0",paddingBottom:l="0"})=>i.max-i.min-parseFloat(a)-parseFloat(l),top:(i,{top:a})=>parseFloat(a),left:(i,{left:a})=>parseFloat(a),bottom:({y:i},{top:a})=>parseFloat(a)+(i.max-i.min),right:({x:i},{left:a})=>parseFloat(a)+(i.max-i.min),x:(i,{transform:a})=>jc(a,"x"),y:(i,{transform:a})=>jc(a,"y")};Wn.translateX=Wn.x;Wn.translateY=Wn.y;const Ea=new Set;let Nc=!1,Dc=!1,Mc=!1;function Xy(){if(Dc){const i=Array.from(Ea).filter(r=>r.needsMeasurement),a=new Set(i.map(r=>r.element)),l=new Map;a.forEach(r=>{const u=f2(r);u.length&&(l.set(r,u),r.render())}),i.forEach(r=>r.measureInitialState()),a.forEach(r=>{r.render();const u=l.get(r);u&&u.forEach(([f,d])=>{var h;(h=r.getValue(f))==null||h.set(d)})}),i.forEach(r=>r.measureEndState()),i.forEach(r=>{r.suspendedScrollY!==void 0&&window.scrollTo(0,r.suspendedScrollY)})}Dc=!1,Nc=!1,Ea.forEach(i=>i.complete(Mc)),Ea.clear()}function Py(){Ea.forEach(i=>{i.readKeyframes(),i.needsMeasurement&&(Dc=!0)})}function d2(){Mc=!0,Py(),Xy(),Mc=!1}class lf{constructor(a,l,r,u,f,d=!1){this.state="pending",this.isAsync=!1,this.needsMeasurement=!1,this.unresolvedKeyframes=[...a],this.onComplete=l,this.name=r,this.motionValue=u,this.element=f,this.isAsync=d}scheduleResolve(){this.state="scheduled",this.isAsync?(Ea.add(this),Nc||(Nc=!0,Ce.read(Py),Ce.resolveKeyframes(Xy))):(this.readKeyframes(),this.complete())}readKeyframes(){const{unresolvedKeyframes:a,name:l,element:r,motionValue:u}=this;if(a[0]===null){const f=u==null?void 0:u.get(),d=a[a.length-1];if(f!==void 0)a[0]=f;else if(r&&l){const h=r.readValue(l,d);h!=null&&(a[0]=h)}a[0]===void 0&&(a[0]=d),u&&f===void 0&&u.set(a[0])}i2(a)}setFinalKeyframe(){}measureInitialState(){}renderEndStyles(){}measureEndState(){}complete(a=!1){this.state="complete",this.onComplete(this.unresolvedKeyframes,this.finalKeyframe,a),Ea.delete(this)}cancel(){this.state==="scheduled"&&(Ea.delete(this),this.state="pending")}resume(){this.state==="pending"&&this.scheduleResolve()}}const h2=i=>i.startsWith("--");function m2(i,a,l){h2(a)?i.style.setProperty(a,l):i.style[a]=l}const p2={};function Fy(i,a){const l=by(i);return()=>p2[a]??l()}const g2=Fy(()=>window.ScrollTimeline!==void 0,"scrollTimeline"),Qy=Fy(()=>{try{document.createElement("div").animate({opacity:0},{easing:"linear(0, 1)"})}catch{return!1}return!0},"linearEasing"),Ss=([i,a,l,r])=>`cubic-bezier(${i}, ${a}, ${l}, ${r})`,Xp={linear:"linear",ease:"ease",easeIn:"ease-in",easeOut:"ease-out",easeInOut:"ease-in-out",circIn:Ss([0,.65,.55,1]),circOut:Ss([.55,0,1,.45]),backIn:Ss([.31,.01,.66,-.59]),backOut:Ss([.33,1.53,.69,.99])};function Zy(i,a){if(i)return typeof i=="function"?Qy()?Gy(i,a):"ease-out":Oy(i)?Ss(i):Array.isArray(i)?i.map(l=>Zy(l,a)||Xp.easeOut):Xp[i]}function y2(i,a,l,{delay:r=0,duration:u=300,repeat:f=0,repeatType:d="loop",ease:h="easeOut",times:y}={},p=void 0){const v={[a]:l};y&&(v.offset=y);const b=Zy(h,u);Array.isArray(b)&&(v.easing=b);const w={delay:r,duration:u,easing:Array.isArray(b)?"linear":b,fill:"both",iterations:f+1,direction:d==="reverse"?"alternate":"normal"};return p&&(w.pseudoElement=p),i.animate(v,w)}function Jy(i){return typeof i=="function"&&"applyToOptions"in i}function v2({type:i,...a}){return Jy(i)&&Qy()?i.applyToOptions(a):(a.duration??(a.duration=300),a.ease??(a.ease="easeOut"),a)}class $y extends af{constructor(a){if(super(),this.finishedTime=null,this.isStopped=!1,this.manualStartTime=null,!a)return;const{element:l,name:r,keyframes:u,pseudoElement:f,allowFlatten:d=!1,finalKeyframe:h,onComplete:y}=a;this.isPseudoElement=!!f,this.allowFlatten=d,this.options=a,Fc(typeof a.type!="string");const p=v2(a);this.animation=y2(l,r,u,p,f),p.autoplay===!1&&this.animation.pause(),this.animation.onfinish=()=>{if(this.finishedTime=this.time,!f){const v=nf(u,this.options,h,this.speed);this.updateMotionValue&&this.updateMotionValue(v),m2(l,r,v),this.animation.cancel()}y==null||y(),this.notifyFinished()}}play(){this.isStopped||(this.manualStartTime=null,this.animation.play(),this.state==="finished"&&this.updateFinished())}pause(){this.animation.pause()}complete(){var a,l;(l=(a=this.animation).finish)==null||l.call(a)}cancel(){try{this.animation.cancel()}catch{}}stop(){if(this.isStopped)return;this.isStopped=!0;const{state:a}=this;a==="idle"||a==="finished"||(this.updateMotionValue?this.updateMotionValue():this.commitStyles(),this.isPseudoElement||this.cancel())}commitStyles(){var l,r,u;const a=(l=this.options)==null?void 0:l.element;!this.isPseudoElement&&(a!=null&&a.isConnected)&&((u=(r=this.animation).commitStyles)==null||u.call(r))}get duration(){var l,r;const a=((r=(l=this.animation.effect)==null?void 0:l.getComputedTiming)==null?void 0:r.call(l).duration)||0;return Gt(Number(a))}get iterationDuration(){const{delay:a=0}=this.options||{};return this.duration+Gt(a)}get time(){return Gt(Number(this.animation.currentTime)||0)}set time(a){this.manualStartTime=null,this.finishedTime=null,this.animation.currentTime=Zt(a)}get speed(){return this.animation.playbackRate}set speed(a){a<0&&(this.finishedTime=null),this.animation.playbackRate=a}get state(){return this.finishedTime!==null?"finished":this.animation.playState}get startTime(){return this.manualStartTime??Number(this.animation.startTime)}set startTime(a){this.manualStartTime=this.animation.startTime=a}attachTimeline({timeline:a,rangeStart:l,rangeEnd:r,observe:u}){var f;return this.allowFlatten&&((f=this.animation.effect)==null||f.updateTiming({easing:"linear"})),this.animation.onfinish=null,a&&g2()?(this.animation.timeline=a,l&&(this.animation.rangeStart=l),r&&(this.animation.rangeEnd=r),Yt):u(this)}}const Wy={anticipate:Ny,backInOut:jy,circInOut:My};function x2(i){return i in Wy}function b2(i){typeof i.ease=="string"&&x2(i.ease)&&(i.ease=Wy[i.ease])}const ic=10;class S2 extends $y{constructor(a){b2(a),Ky(a),super(a),a.startTime!==void 0&&(this.startTime=a.startTime),this.options=a}updateMotionValue(a){const{motionValue:l,onUpdate:r,onComplete:u,element:f,...d}=this.options;if(!l)return;if(a!==void 0){l.set(a);return}const h=new sf({...d,autoplay:!1}),y=Math.max(ic,ht.now()-this.startTime),p=sn(0,ic,y-ic);l.setWithVelocity(h.sample(Math.max(0,y-p)).value,h.sample(y).value,p),h.stop()}}const Pp=(i,a)=>a==="zIndex"?!1:!!(typeof i=="number"||Array.isArray(i)||typeof i=="string"&&(Jt.test(i)||i==="0")&&!i.startsWith("url("));function w2(i){const a=i[0];if(i.length===1)return!0;for(let l=0;lObject.hasOwnProperty.call(Element.prototype,"animate"));function j2(i){var v;const{motionValue:a,name:l,repeatDelay:r,repeatType:u,damping:f,type:d}=i;if(!(((v=a==null?void 0:a.owner)==null?void 0:v.current)instanceof HTMLElement))return!1;const{onUpdate:y,transformTemplate:p}=a.owner.getProps();return E2()&&l&&A2.has(l)&&(l!=="transform"||!p)&&!y&&!r&&u!=="mirror"&&f!==0&&d!=="inertia"}const N2=40;class D2 extends af{constructor({autoplay:a=!0,delay:l=0,type:r="keyframes",repeat:u=0,repeatDelay:f=0,repeatType:d="loop",keyframes:h,name:y,motionValue:p,element:v,...b}){var E;super(),this.stop=()=>{var V,B;this._animation&&(this._animation.stop(),(V=this.stopTimeline)==null||V.call(this)),(B=this.keyframeResolver)==null||B.cancel()},this.createdAt=ht.now();const w={autoplay:a,delay:l,type:r,repeat:u,repeatDelay:f,repeatType:d,name:y,motionValue:p,element:v,...b},j=(v==null?void 0:v.KeyframeResolver)||lf;this.keyframeResolver=new j(h,(V,B,q)=>this.onKeyframesResolved(V,B,w,!q),y,p,v),(E=this.keyframeResolver)==null||E.scheduleResolve()}onKeyframesResolved(a,l,r,u){var B,q;this.keyframeResolver=void 0;const{name:f,type:d,velocity:h,delay:y,isHandoff:p,onUpdate:v}=r;this.resolvedAt=ht.now(),T2(a,f,d,h)||((An.instantAnimations||!y)&&(v==null||v(nf(a,r,l))),a[0]=a[a.length-1],Cc(r),r.repeat=0);const w={startTime:u?this.resolvedAt?this.resolvedAt-this.createdAt>N2?this.resolvedAt:this.createdAt:this.createdAt:void 0,finalKeyframe:l,...r,keyframes:a},j=!p&&j2(w),E=(q=(B=w.motionValue)==null?void 0:B.owner)==null?void 0:q.current,V=j?new S2({...w,element:E}):new sf(w);V.finished.then(()=>{this.notifyFinished()}).catch(Yt),this.pendingTimeline&&(this.stopTimeline=V.attachTimeline(this.pendingTimeline),this.pendingTimeline=void 0),this._animation=V}get finished(){return this._animation?this.animation.finished:this._finished}then(a,l){return this.finished.finally(a).then(()=>{})}get animation(){var a;return this._animation||((a=this.keyframeResolver)==null||a.resume(),d2()),this._animation}get duration(){return this.animation.duration}get iterationDuration(){return this.animation.iterationDuration}get time(){return this.animation.time}set time(a){this.animation.time=a}get speed(){return this.animation.speed}get state(){return this.animation.state}set speed(a){this.animation.speed=a}get startTime(){return this.animation.startTime}attachTimeline(a){return this._animation?this.stopTimeline=this.animation.attachTimeline(a):this.pendingTimeline=a,()=>this.stop()}play(){this.animation.play()}pause(){this.animation.pause()}complete(){this.animation.complete()}cancel(){var a;this._animation&&this.animation.cancel(),(a=this.keyframeResolver)==null||a.cancel()}}function Iy(i,a,l,r=0,u=1){const f=Array.from(i).sort((p,v)=>p.sortNodePosition(v)).indexOf(a),d=i.size,h=(d-1)*r;return typeof l=="function"?l(f,d):u===1?f*r:h-f*r}const M2=/^var\(--(?:([\w-]+)|([\w-]+), ?([a-zA-Z\d ()%#.,-]+))\)/u;function C2(i){const a=M2.exec(i);if(!a)return[,];const[,l,r,u]=a;return[`--${l??r}`,u]}function e0(i,a,l=1){const[r,u]=C2(i);if(!r)return;const f=window.getComputedStyle(a).getPropertyValue(r);if(f){const d=f.trim();return yy(d)?parseFloat(d):d}return $c(u)?e0(u,a,l+1):u}const O2={type:"spring",stiffness:500,damping:25,restSpeed:10},R2=i=>({type:"spring",stiffness:550,damping:i===0?2*Math.sqrt(550):30,restSpeed:10}),L2={type:"keyframes",duration:.8},_2={type:"keyframes",ease:[.25,.1,.35,1],duration:.3},z2=(i,{keyframes:a})=>a.length>2?L2:Ti.has(i)?i.startsWith("scale")?R2(a[1]):O2:_2,V2=i=>i!==null;function k2(i,{repeat:a,repeatType:l="loop"},r){const u=i.filter(V2),f=a&&l!=="loop"&&a%2===1?0:u.length-1;return u[f]}function t0(i,a){if(i!=null&&i.inherit&&a){const{inherit:l,...r}=i;return{...a,...r}}return i}function rf(i,a){const l=(i==null?void 0:i[a])??(i==null?void 0:i.default)??i;return l!==i?t0(l,i):l}function U2({when:i,delay:a,delayChildren:l,staggerChildren:r,staggerDirection:u,repeat:f,repeatType:d,repeatDelay:h,from:y,elapsed:p,...v}){return!!Object.keys(v).length}const of=(i,a,l,r={},u,f)=>d=>{const h=rf(r,i)||{},y=h.delay||r.delay||0;let{elapsed:p=0}=r;p=p-Zt(y);const v={keyframes:Array.isArray(l)?l:[null,l],ease:"easeOut",velocity:a.getVelocity(),...h,delay:-p,onUpdate:w=>{a.set(w),h.onUpdate&&h.onUpdate(w)},onComplete:()=>{d(),h.onComplete&&h.onComplete()},name:i,motionValue:a,element:f?void 0:u};U2(h)||Object.assign(v,z2(i,v)),v.duration&&(v.duration=Zt(v.duration)),v.repeatDelay&&(v.repeatDelay=Zt(v.repeatDelay)),v.from!==void 0&&(v.keyframes[0]=v.from);let b=!1;if((v.type===!1||v.duration===0&&!v.repeatDelay)&&(Cc(v),v.delay===0&&(b=!0)),(An.instantAnimations||An.skipAnimations||u!=null&&u.shouldSkipAnimations)&&(b=!0,Cc(v),v.delay=0),v.allowFlatten=!h.type&&!h.ease,b&&!f&&a.get()!==void 0){const w=k2(v.keyframes,h);if(w!==void 0){Ce.update(()=>{v.onUpdate(w),v.onComplete()});return}}return h.isSync?new sf(v):new D2(v)};function Fp(i){const a=[{},{}];return i==null||i.values.forEach((l,r)=>{a[0][r]=l.get(),a[1][r]=l.getVelocity()}),a}function uf(i,a,l,r){if(typeof a=="function"){const[u,f]=Fp(r);a=a(l!==void 0?l:i.custom,u,f)}if(typeof a=="string"&&(a=i.variants&&i.variants[a]),typeof a=="function"){const[u,f]=Fp(r);a=a(l!==void 0?l:i.custom,u,f)}return a}function vi(i,a,l){const r=i.getProps();return uf(r,a,l!==void 0?l:r.custom,i)}const n0=new Set(["width","height","top","left","right","bottom",...wi]),Qp=30,B2=i=>!isNaN(parseFloat(i));class H2{constructor(a,l={}){this.canTrackVelocity=null,this.events={},this.updateAndNotify=r=>{var f;const u=ht.now();if(this.updatedAt!==u&&this.setPrevFrameValue(),this.prev=this.current,this.setCurrent(r),this.current!==this.prev&&((f=this.events.change)==null||f.notify(this.current),this.dependents))for(const d of this.dependents)d.dirty()},this.hasAnimated=!1,this.setCurrent(a),this.owner=l.owner}setCurrent(a){this.current=a,this.updatedAt=ht.now(),this.canTrackVelocity===null&&a!==void 0&&(this.canTrackVelocity=B2(this.current))}setPrevFrameValue(a=this.current){this.prevFrameValue=a,this.prevUpdatedAt=this.updatedAt}onChange(a){return this.on("change",a)}on(a,l){this.events[a]||(this.events[a]=new Qc);const r=this.events[a].add(l);return a==="change"?()=>{r(),Ce.read(()=>{this.events.change.getSize()||this.stop()})}:r}clearListeners(){for(const a in this.events)this.events[a].clear()}attach(a,l){this.passiveEffect=a,this.stopPassiveEffect=l}set(a){this.passiveEffect?this.passiveEffect(a,this.updateAndNotify):this.updateAndNotify(a)}setWithVelocity(a,l,r){this.set(l),this.prev=void 0,this.prevFrameValue=a,this.prevUpdatedAt=this.updatedAt-r}jump(a,l=!0){this.updateAndNotify(a),this.prev=a,this.prevUpdatedAt=this.prevFrameValue=void 0,l&&this.stop(),this.stopPassiveEffect&&this.stopPassiveEffect()}dirty(){var a;(a=this.events.change)==null||a.notify(this.current)}addDependent(a){this.dependents||(this.dependents=new Set),this.dependents.add(a)}removeDependent(a){this.dependents&&this.dependents.delete(a)}get(){return this.current}getPrevious(){return this.prev}getVelocity(){const a=ht.now();if(!this.canTrackVelocity||this.prevFrameValue===void 0||a-this.updatedAt>Qp)return 0;const l=Math.min(this.updatedAt-this.prevUpdatedAt,Qp);return Sy(parseFloat(this.current)-parseFloat(this.prevFrameValue),l)}start(a){return this.stop(),new Promise(l=>{this.hasAnimated=!0,this.animation=a(l),this.events.animationStart&&this.events.animationStart.notify()}).then(()=>{this.events.animationComplete&&this.events.animationComplete.notify(),this.clearAnimation()})}stop(){this.animation&&(this.animation.stop(),this.events.animationCancel&&this.events.animationCancel.notify()),this.clearAnimation()}isAnimating(){return!!this.animation}clearAnimation(){delete this.animation}destroy(){var a,l;(a=this.dependents)==null||a.clear(),(l=this.events.destroy)==null||l.notify(),this.clearListeners(),this.stop(),this.stopPassiveEffect&&this.stopPassiveEffect()}}function xi(i,a){return new H2(i,a)}const Oc=i=>Array.isArray(i);function q2(i,a,l){i.hasValue(a)?i.getValue(a).set(l):i.addValue(a,xi(l))}function G2(i){return Oc(i)?i[i.length-1]||0:i}function Y2(i,a){const l=vi(i,a);let{transitionEnd:r={},transition:u={},...f}=l||{};f={...f,...r};for(const d in f){const h=G2(f[d]);q2(i,d,h)}}const ct=i=>!!(i&&i.getVelocity);function K2(i){return!!(ct(i)&&i.add)}function Rc(i,a){const l=i.getValue("willChange");if(K2(l))return l.add(a);if(!l&&An.WillChange){const r=new An.WillChange("auto");i.addValue("willChange",r),r.add(a)}}function cf(i){return i.replace(/([A-Z])/g,a=>`-${a.toLowerCase()}`)}const X2="framerAppearId",a0="data-"+cf(X2);function i0(i){return i.props[a0]}function P2({protectedKeys:i,needsAnimating:a},l){const r=i.hasOwnProperty(l)&&a[l]!==!0;return a[l]=!1,r}function s0(i,a,{delay:l=0,transitionOverride:r,type:u}={}){let{transition:f,transitionEnd:d,...h}=a;const y=i.getDefaultTransition();f=f?t0(f,y):y;const p=f==null?void 0:f.reduceMotion;r&&(f=r);const v=[],b=u&&i.animationState&&i.animationState.getState()[u];for(const w in h){const j=i.getValue(w,i.latestValues[w]??null),E=h[w];if(E===void 0||b&&P2(b,w))continue;const V={delay:l,...rf(f||{},w)},B=j.get();if(B!==void 0&&!j.isAnimating&&!Array.isArray(E)&&E===B&&!V.velocity)continue;let q=!1;if(window.MotionHandoffAnimation){const X=i0(i);if(X){const P=window.MotionHandoffAnimation(X,w,Ce);P!==null&&(V.startTime=P,q=!0)}}Rc(i,w);const Y=p??i.shouldReduceMotion;j.start(of(w,j,E,Y&&n0.has(w)?{type:!1}:V,i,q));const H=j.animation;H&&v.push(H)}if(d){const w=()=>Ce.update(()=>{d&&Y2(i,d)});v.length?Promise.all(v).then(w):w()}return v}function Lc(i,a,l={}){var y;const r=vi(i,a,l.type==="exit"?(y=i.presenceContext)==null?void 0:y.custom:void 0);let{transition:u=i.getDefaultTransition()||{}}=r||{};l.transitionOverride&&(u=l.transitionOverride);const f=r?()=>Promise.all(s0(i,r,l)):()=>Promise.resolve(),d=i.variantChildren&&i.variantChildren.size?(p=0)=>{const{delayChildren:v=0,staggerChildren:b,staggerDirection:w}=u;return F2(i,a,p,v,b,w,l)}:()=>Promise.resolve(),{when:h}=u;if(h){const[p,v]=h==="beforeChildren"?[f,d]:[d,f];return p().then(()=>v())}else return Promise.all([f(),d(l.delay)])}function F2(i,a,l=0,r=0,u=0,f=1,d){const h=[];for(const y of i.variantChildren)y.notify("AnimationStart",a),h.push(Lc(y,a,{...d,delay:l+(typeof r=="function"?0:r)+Iy(i.variantChildren,y,r,u,f)}).then(()=>y.notify("AnimationComplete",a)));return Promise.all(h)}function Q2(i,a,l={}){i.notify("AnimationStart",a);let r;if(Array.isArray(a)){const u=a.map(f=>Lc(i,f,l));r=Promise.all(u)}else if(typeof a=="string")r=Lc(i,a,l);else{const u=typeof a=="function"?vi(i,a,l.custom):a;r=Promise.all(s0(i,u,l))}return r.then(()=>{i.notify("AnimationComplete",a)})}const Z2={test:i=>i==="auto",parse:i=>i},l0=i=>a=>a.test(i),r0=[Si,$,an,Jn,Ab,Tb,Z2],Zp=i=>r0.find(l0(i));function J2(i){return typeof i=="number"?i===0:i!==null?i==="none"||i==="0"||xy(i):!0}const $2=new Set(["brightness","contrast","saturate","opacity"]);function W2(i){const[a,l]=i.slice(0,-1).split("(");if(a==="drop-shadow")return i;const[r]=l.match(Wc)||[];if(!r)return i;const u=l.replace(r,"");let f=$2.has(a)?1:0;return r!==l&&(f*=100),a+"("+f+u+")"}const I2=/\b([a-z-]*)\(.*?\)/gu,_c={...Jt,getAnimatableNone:i=>{const a=i.match(I2);return a?a.map(W2).join(" "):i}},zc={...Jt,getAnimatableNone:i=>{const a=Jt.parse(i);return Jt.createTransformer(i)(a.map(r=>typeof r=="number"?0:typeof r=="object"?{...r,alpha:1}:r))}},Jp={...Si,transform:Math.round},eS={rotate:Jn,rotateX:Jn,rotateY:Jn,rotateZ:Jn,scale:ar,scaleX:ar,scaleY:ar,scaleZ:ar,skew:Jn,skewX:Jn,skewY:Jn,distance:$,translateX:$,translateY:$,translateZ:$,x:$,y:$,z:$,perspective:$,transformPerspective:$,opacity:Ms,originX:Vp,originY:Vp,originZ:$},ff={borderWidth:$,borderTopWidth:$,borderRightWidth:$,borderBottomWidth:$,borderLeftWidth:$,borderRadius:$,borderTopLeftRadius:$,borderTopRightRadius:$,borderBottomRightRadius:$,borderBottomLeftRadius:$,width:$,maxWidth:$,height:$,maxHeight:$,top:$,right:$,bottom:$,left:$,inset:$,insetBlock:$,insetBlockStart:$,insetBlockEnd:$,insetInline:$,insetInlineStart:$,insetInlineEnd:$,padding:$,paddingTop:$,paddingRight:$,paddingBottom:$,paddingLeft:$,paddingBlock:$,paddingBlockStart:$,paddingBlockEnd:$,paddingInline:$,paddingInlineStart:$,paddingInlineEnd:$,margin:$,marginTop:$,marginRight:$,marginBottom:$,marginLeft:$,marginBlock:$,marginBlockStart:$,marginBlockEnd:$,marginInline:$,marginInlineStart:$,marginInlineEnd:$,fontSize:$,backgroundPositionX:$,backgroundPositionY:$,...eS,zIndex:Jp,fillOpacity:Ms,strokeOpacity:Ms,numOctaves:Jp},tS={...ff,color:Je,backgroundColor:Je,outlineColor:Je,fill:Je,stroke:Je,borderColor:Je,borderTopColor:Je,borderRightColor:Je,borderBottomColor:Je,borderLeftColor:Je,filter:_c,WebkitFilter:_c,mask:zc,WebkitMask:zc},o0=i=>tS[i],nS=new Set([_c,zc]);function u0(i,a){let l=o0(i);return nS.has(l)||(l=Jt),l.getAnimatableNone?l.getAnimatableNone(a):void 0}const aS=new Set(["auto","none","0"]);function iS(i,a,l){let r=0,u;for(;r{a.getValue(y).set(p)}),this.resolveNoneKeyframes()}}const lS=new Set(["opacity","clipPath","filter","transform"]);function c0(i,a,l){if(i==null)return[];if(i instanceof EventTarget)return[i];if(typeof i=="string"){let r=document;const u=(l==null?void 0:l[i])??r.querySelectorAll(i);return u?Array.from(u):[]}return Array.from(i).filter(r=>r!=null)}const f0=(i,a)=>a&&typeof i=="number"?a.transform(i):i;function rS(i){return vy(i)&&"offsetHeight"in i}const{schedule:df}=Ry(queueMicrotask,!1),Qt={x:!1,y:!1};function d0(){return Qt.x||Qt.y}function oS(i){return i==="x"||i==="y"?Qt[i]?null:(Qt[i]=!0,()=>{Qt[i]=!1}):Qt.x||Qt.y?null:(Qt.x=Qt.y=!0,()=>{Qt.x=Qt.y=!1})}function h0(i,a){const l=c0(i),r=new AbortController,u={passive:!0,...a,signal:r.signal};return[l,u,()=>r.abort()]}function uS(i){return!(i.pointerType==="touch"||d0())}function cS(i,a,l={}){const[r,u,f]=h0(i,l);return r.forEach(d=>{let h=!1,y=!1,p;const v=()=>{d.removeEventListener("pointerleave",E)},b=B=>{p&&(p(B),p=void 0),v()},w=B=>{h=!1,window.removeEventListener("pointerup",w),window.removeEventListener("pointercancel",w),y&&(y=!1,b(B))},j=()=>{h=!0,window.addEventListener("pointerup",w,u),window.addEventListener("pointercancel",w,u)},E=B=>{if(B.pointerType!=="touch"){if(h){y=!0;return}b(B)}},V=B=>{if(!uS(B))return;y=!1;const q=a(d,B);typeof q=="function"&&(p=q,d.addEventListener("pointerleave",E,u))};d.addEventListener("pointerenter",V,u),d.addEventListener("pointerdown",j,u)}),f}const m0=(i,a)=>a?i===a?!0:m0(i,a.parentElement):!1,hf=i=>i.pointerType==="mouse"?typeof i.button!="number"||i.button<=0:i.isPrimary!==!1,fS=new Set(["BUTTON","INPUT","SELECT","TEXTAREA","A"]);function dS(i){return fS.has(i.tagName)||i.isContentEditable===!0}const hS=new Set(["INPUT","SELECT","TEXTAREA"]);function mS(i){return hS.has(i.tagName)||i.isContentEditable===!0}const rr=new WeakSet;function $p(i){return a=>{a.key==="Enter"&&i(a)}}function sc(i,a){i.dispatchEvent(new PointerEvent("pointer"+a,{isPrimary:!0,bubbles:!0}))}const pS=(i,a)=>{const l=i.currentTarget;if(!l)return;const r=$p(()=>{if(rr.has(l))return;sc(l,"down");const u=$p(()=>{sc(l,"up")}),f=()=>sc(l,"cancel");l.addEventListener("keyup",u,a),l.addEventListener("blur",f,a)});l.addEventListener("keydown",r,a),l.addEventListener("blur",()=>l.removeEventListener("keydown",r),a)};function Wp(i){return hf(i)&&!d0()}const Ip=new WeakSet;function gS(i,a,l={}){const[r,u,f]=h0(i,l),d=h=>{const y=h.currentTarget;if(!Wp(h)||Ip.has(h))return;rr.add(y),l.stopPropagation&&Ip.add(h);const p=a(y,h),v=(j,E)=>{window.removeEventListener("pointerup",b),window.removeEventListener("pointercancel",w),rr.has(y)&&rr.delete(y),Wp(j)&&typeof p=="function"&&p(j,{success:E})},b=j=>{v(j,y===window||y===document||l.useGlobalTarget||m0(y,j.target))},w=j=>{v(j,!1)};window.addEventListener("pointerup",b,u),window.addEventListener("pointercancel",w,u)};return r.forEach(h=>{(l.useGlobalTarget?window:h).addEventListener("pointerdown",d,u),rS(h)&&(h.addEventListener("focus",p=>pS(p,u)),!dS(h)&&!h.hasAttribute("tabindex")&&(h.tabIndex=0))}),f}function mf(i){return vy(i)&&"ownerSVGElement"in i}const or=new WeakMap;let $n;const p0=(i,a,l)=>(r,u)=>u&&u[0]?u[0][i+"Size"]:mf(r)&&"getBBox"in r?r.getBBox()[a]:r[l],yS=p0("inline","width","offsetWidth"),vS=p0("block","height","offsetHeight");function xS({target:i,borderBoxSize:a}){var l;(l=or.get(i))==null||l.forEach(r=>{r(i,{get width(){return yS(i,a)},get height(){return vS(i,a)}})})}function bS(i){i.forEach(xS)}function SS(){typeof ResizeObserver>"u"||($n=new ResizeObserver(bS))}function wS(i,a){$n||SS();const l=c0(i);return l.forEach(r=>{let u=or.get(r);u||(u=new Set,or.set(r,u)),u.add(a),$n==null||$n.observe(r)}),()=>{l.forEach(r=>{const u=or.get(r);u==null||u.delete(a),u!=null&&u.size||$n==null||$n.unobserve(r)})}}const ur=new Set;let mi;function TS(){mi=()=>{const i={get width(){return window.innerWidth},get height(){return window.innerHeight}};ur.forEach(a=>a(i))},window.addEventListener("resize",mi)}function AS(i){return ur.add(i),mi||TS(),()=>{ur.delete(i),!ur.size&&typeof mi=="function"&&(window.removeEventListener("resize",mi),mi=void 0)}}function eg(i,a){return typeof i=="function"?AS(i):wS(i,a)}function ES(i){return mf(i)&&i.tagName==="svg"}const jS=[...r0,Je,Jt],NS=i=>jS.find(l0(i)),tg=()=>({translate:0,scale:1,origin:0,originPoint:0}),pi=()=>({x:tg(),y:tg()}),ng=()=>({min:0,max:0}),We=()=>({x:ng(),y:ng()}),DS=new WeakMap;function Ar(i){return i!==null&&typeof i=="object"&&typeof i.start=="function"}function Os(i){return typeof i=="string"||Array.isArray(i)}const pf=["animate","whileInView","whileFocus","whileHover","whileTap","whileDrag","exit"],gf=["initial",...pf];function Er(i){return Ar(i.animate)||gf.some(a=>Os(i[a]))}function g0(i){return!!(Er(i)||i.variants)}function MS(i,a,l){for(const r in a){const u=a[r],f=l[r];if(ct(u))i.addValue(r,u);else if(ct(f))i.addValue(r,xi(u,{owner:i}));else if(f!==u)if(i.hasValue(r)){const d=i.getValue(r);d.liveStyle===!0?d.jump(u):d.hasAnimated||d.set(u)}else{const d=i.getStaticValue(r);i.addValue(r,xi(d!==void 0?d:u,{owner:i}))}}for(const r in l)a[r]===void 0&&i.removeValue(r);return a}const Vc={current:null},y0={current:!1},CS=typeof window<"u";function OS(){if(y0.current=!0,!!CS)if(window.matchMedia){const i=window.matchMedia("(prefers-reduced-motion)"),a=()=>Vc.current=i.matches;i.addEventListener("change",a),a()}else Vc.current=!1}const ag=["AnimationStart","AnimationComplete","Update","BeforeLayoutMeasure","LayoutMeasure","LayoutAnimationStart","LayoutAnimationComplete"];let gr={};function v0(i){gr=i}function RS(){return gr}class LS{scrapeMotionValuesFromProps(a,l,r){return{}}constructor({parent:a,props:l,presenceContext:r,reducedMotionConfig:u,skipAnimations:f,blockInitialAnimation:d,visualState:h},y={}){this.current=null,this.children=new Set,this.isVariantNode=!1,this.isControllingVariants=!1,this.shouldReduceMotion=null,this.shouldSkipAnimations=!1,this.values=new Map,this.KeyframeResolver=lf,this.features={},this.valueSubscriptions=new Map,this.prevMotionValues={},this.hasBeenMounted=!1,this.events={},this.propEventSubscriptions={},this.notifyUpdate=()=>this.notify("Update",this.latestValues),this.render=()=>{this.current&&(this.triggerBuild(),this.renderInstance(this.current,this.renderState,this.props.style,this.projection))},this.renderScheduledAt=0,this.scheduleRender=()=>{const j=ht.now();this.renderScheduledAtthis.bindToMotionValue(f,u)),this.reducedMotionConfig==="never"?this.shouldReduceMotion=!1:this.reducedMotionConfig==="always"?this.shouldReduceMotion=!0:(y0.current||OS(),this.shouldReduceMotion=Vc.current),this.shouldSkipAnimations=this.skipAnimationsConfig??!1,(r=this.parent)==null||r.addChild(this),this.update(this.props,this.presenceContext),this.hasBeenMounted=!0}unmount(){var a;this.projection&&this.projection.unmount(),In(this.notifyUpdate),In(this.render),this.valueSubscriptions.forEach(l=>l()),this.valueSubscriptions.clear(),this.removeFromVariantTree&&this.removeFromVariantTree(),(a=this.parent)==null||a.removeChild(this);for(const l in this.events)this.events[l].clear();for(const l in this.features){const r=this.features[l];r&&(r.unmount(),r.isMounted=!1)}this.current=null}addChild(a){this.children.add(a),this.enteringChildren??(this.enteringChildren=new Set),this.enteringChildren.add(a)}removeChild(a){this.children.delete(a),this.enteringChildren&&this.enteringChildren.delete(a)}bindToMotionValue(a,l){if(this.valueSubscriptions.has(a)&&this.valueSubscriptions.get(a)(),l.accelerate&&lS.has(a)&&this.current instanceof HTMLElement){const{factory:d,keyframes:h,times:y,ease:p,duration:v}=l.accelerate,b=new $y({element:this.current,name:a,keyframes:h,times:y,ease:p,duration:Zt(v)}),w=d(b);this.valueSubscriptions.set(a,()=>{w(),b.cancel()});return}const r=Ti.has(a);r&&this.onBindTransform&&this.onBindTransform();const u=l.on("change",d=>{this.latestValues[a]=d,this.props.onUpdate&&Ce.preRender(this.notifyUpdate),r&&this.projection&&(this.projection.isTransformDirty=!0),this.scheduleRender()});let f;typeof window<"u"&&window.MotionCheckAppearSync&&(f=window.MotionCheckAppearSync(this,a,l)),this.valueSubscriptions.set(a,()=>{u(),f&&f(),l.owner&&l.stop()})}sortNodePosition(a){return!this.current||!this.sortInstanceNodePosition||this.type!==a.type?0:this.sortInstanceNodePosition(this.current,a.current)}updateFeatures(){let a="animation";for(a in gr){const l=gr[a];if(!l)continue;const{isEnabled:r,Feature:u}=l;if(!this.features[a]&&u&&r(this.props)&&(this.features[a]=new u(this)),this.features[a]){const f=this.features[a];f.isMounted?f.update():(f.mount(),f.isMounted=!0)}}}triggerBuild(){this.build(this.renderState,this.latestValues,this.props)}measureViewportBox(){return this.current?this.measureInstanceViewportBox(this.current,this.props):We()}getStaticValue(a){return this.latestValues[a]}setStaticValue(a,l){this.latestValues[a]=l}update(a,l){(a.transformTemplate||this.props.transformTemplate)&&this.scheduleRender(),this.prevProps=this.props,this.props=a,this.prevPresenceContext=this.presenceContext,this.presenceContext=l;for(let r=0;rl.variantChildren.delete(a)}addValue(a,l){const r=this.values.get(a);l!==r&&(r&&this.removeValue(a),this.bindToMotionValue(a,l),this.values.set(a,l),this.latestValues[a]=l.get())}removeValue(a){this.values.delete(a);const l=this.valueSubscriptions.get(a);l&&(l(),this.valueSubscriptions.delete(a)),delete this.latestValues[a],this.removeValueFromRenderState(a,this.renderState)}hasValue(a){return this.values.has(a)}getValue(a,l){if(this.props.values&&this.props.values[a])return this.props.values[a];let r=this.values.get(a);return r===void 0&&l!==void 0&&(r=xi(l===null?void 0:l,{owner:this}),this.addValue(a,r)),r}readValue(a,l){let r=this.latestValues[a]!==void 0||!this.current?this.latestValues[a]:this.getBaseTargetFromProps(this.props,a)??this.readValueFromInstance(this.current,a,this.options);return r!=null&&(typeof r=="string"&&(yy(r)||xy(r))?r=parseFloat(r):!NS(r)&&Jt.test(l)&&(r=u0(a,l)),this.setBaseTarget(a,ct(r)?r.get():r)),ct(r)?r.get():r}setBaseTarget(a,l){this.baseTarget[a]=l}getBaseTarget(a){var f;const{initial:l}=this.props;let r;if(typeof l=="string"||typeof l=="object"){const d=uf(this.props,l,(f=this.presenceContext)==null?void 0:f.custom);d&&(r=d[a])}if(l&&r!==void 0)return r;const u=this.getBaseTargetFromProps(this.props,a);return u!==void 0&&!ct(u)?u:this.initialValues[a]!==void 0&&r===void 0?void 0:this.baseTarget[a]}on(a,l){return this.events[a]||(this.events[a]=new Qc),this.events[a].add(l)}notify(a,...l){this.events[a]&&this.events[a].notify(...l)}scheduleRenderMicrotask(){df.render(this.render)}}class x0 extends LS{constructor(){super(...arguments),this.KeyframeResolver=sS}sortInstanceNodePosition(a,l){return a.compareDocumentPosition(l)&2?1:-1}getBaseTargetFromProps(a,l){const r=a.style;return r?r[l]:void 0}removeValueFromRenderState(a,{vars:l,style:r}){delete l[a],delete r[a]}handleChildMotionValue(){this.childSubscription&&(this.childSubscription(),delete this.childSubscription);const{children:a}=this.props;ct(a)&&(this.childSubscription=a.on("change",l=>{this.current&&(this.current.textContent=`${l}`)}))}}class ea{constructor(a){this.isMounted=!1,this.node=a}update(){}}function b0({top:i,left:a,right:l,bottom:r}){return{x:{min:a,max:l},y:{min:i,max:r}}}function _S({x:i,y:a}){return{top:a.min,right:i.max,bottom:a.max,left:i.min}}function zS(i,a){if(!a)return i;const l=a({x:i.left,y:i.top}),r=a({x:i.right,y:i.bottom});return{top:l.y,left:l.x,bottom:r.y,right:r.x}}function lc(i){return i===void 0||i===1}function kc({scale:i,scaleX:a,scaleY:l}){return!lc(i)||!lc(a)||!lc(l)}function wa(i){return kc(i)||S0(i)||i.z||i.rotate||i.rotateX||i.rotateY||i.skewX||i.skewY}function S0(i){return ig(i.x)||ig(i.y)}function ig(i){return i&&i!=="0%"}function yr(i,a,l){const r=i-l,u=a*r;return l+u}function sg(i,a,l,r,u){return u!==void 0&&(i=yr(i,u,r)),yr(i,l,r)+a}function Uc(i,a=0,l=1,r,u){i.min=sg(i.min,a,l,r,u),i.max=sg(i.max,a,l,r,u)}function w0(i,{x:a,y:l}){Uc(i.x,a.translate,a.scale,a.originPoint),Uc(i.y,l.translate,l.scale,l.originPoint)}const lg=.999999999999,rg=1.0000000000001;function VS(i,a,l,r=!1){const u=l.length;if(!u)return;a.x=a.y=1;let f,d;for(let h=0;hlg&&(a.x=1),a.ylg&&(a.y=1)}function gi(i,a){i.min=i.min+a,i.max=i.max+a}function og(i,a,l,r,u=.5){const f=ze(i.min,i.max,u);Uc(i,a,l,f,r)}function ug(i,a){return typeof i=="string"?parseFloat(i)/100*(a.max-a.min):i}function yi(i,a){og(i.x,ug(a.x,i.x),a.scaleX,a.scale,a.originX),og(i.y,ug(a.y,i.y),a.scaleY,a.scale,a.originY)}function T0(i,a){return b0(zS(i.getBoundingClientRect(),a))}function kS(i,a,l){const r=T0(i,l),{scroll:u}=a;return u&&(gi(r.x,u.offset.x),gi(r.y,u.offset.y)),r}const US={x:"translateX",y:"translateY",z:"translateZ",transformPerspective:"perspective"},BS=wi.length;function HS(i,a,l){let r="",u=!0;for(let f=0;f{if(!a.target)return i;if(typeof i=="string")if($.test(i))i=parseFloat(i);else return i;const l=cg(i,a.target.x),r=cg(i,a.target.y);return`${l}% ${r}%`}},qS={correct:(i,{treeScale:a,projectionDelta:l})=>{const r=i,u=Jt.parse(i);if(u.length>5)return r;const f=Jt.createTransformer(i),d=typeof u[0]!="number"?1:0,h=l.x.scale*a.x,y=l.y.scale*a.y;u[0+d]/=h,u[1+d]/=y;const p=ze(h,y,.5);return typeof u[2+d]=="number"&&(u[2+d]/=p),typeof u[3+d]=="number"&&(u[3+d]/=p),f(u)}},Bc={borderRadius:{...xs,applyTo:["borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius"]},borderTopLeftRadius:xs,borderTopRightRadius:xs,borderBottomLeftRadius:xs,borderBottomRightRadius:xs,boxShadow:qS};function E0(i,{layout:a,layoutId:l}){return Ti.has(i)||i.startsWith("origin")||(a||l!==void 0)&&(!!Bc[i]||i==="opacity")}function vf(i,a,l){var d;const r=i.style,u=a==null?void 0:a.style,f={};if(!r)return f;for(const h in r)(ct(r[h])||u&&ct(u[h])||E0(h,i)||((d=l==null?void 0:l.getValue(h))==null?void 0:d.liveStyle)!==void 0)&&(f[h]=r[h]);return f}function GS(i){return window.getComputedStyle(i)}class YS extends x0{constructor(){super(...arguments),this.type="html",this.renderInstance=A0}readValueFromInstance(a,l){var r;if(Ti.has(l))return(r=this.projection)!=null&&r.isProjecting?Ec(l):r2(a,l);{const u=GS(a),f=(_y(l)?u.getPropertyValue(l):u[l])||0;return typeof f=="string"?f.trim():f}}measureInstanceViewportBox(a,{transformPagePoint:l}){return T0(a,l)}build(a,l,r){yf(a,l,r.transformTemplate)}scrapeMotionValuesFromProps(a,l,r){return vf(a,l,r)}}const KS={offset:"stroke-dashoffset",array:"stroke-dasharray"},XS={offset:"strokeDashoffset",array:"strokeDasharray"};function PS(i,a,l=1,r=0,u=!0){i.pathLength=1;const f=u?KS:XS;i[f.offset]=`${-r}`,i[f.array]=`${a} ${l}`}const FS=["offsetDistance","offsetPath","offsetRotate","offsetAnchor"];function j0(i,{attrX:a,attrY:l,attrScale:r,pathLength:u,pathSpacing:f=1,pathOffset:d=0,...h},y,p,v){if(yf(i,h,p),y){i.style.viewBox&&(i.attrs.viewBox=i.style.viewBox);return}i.attrs=i.style,i.style={};const{attrs:b,style:w}=i;b.transform&&(w.transform=b.transform,delete b.transform),(w.transform||b.transformOrigin)&&(w.transformOrigin=b.transformOrigin??"50% 50%",delete b.transformOrigin),w.transform&&(w.transformBox=(v==null?void 0:v.transformBox)??"fill-box",delete b.transformBox);for(const j of FS)b[j]!==void 0&&(w[j]=b[j],delete b[j]);a!==void 0&&(b.x=a),l!==void 0&&(b.y=l),r!==void 0&&(b.scale=r),u!==void 0&&PS(b,u,f,d,!1)}const N0=new Set(["baseFrequency","diffuseConstant","kernelMatrix","kernelUnitLength","keySplines","keyTimes","limitingConeAngle","markerHeight","markerWidth","numOctaves","targetX","targetY","surfaceScale","specularConstant","specularExponent","stdDeviation","tableValues","viewBox","gradientTransform","pathLength","startOffset","textLength","lengthAdjust"]),D0=i=>typeof i=="string"&&i.toLowerCase()==="svg";function QS(i,a,l,r){A0(i,a,void 0,r);for(const u in a.attrs)i.setAttribute(N0.has(u)?u:cf(u),a.attrs[u])}function M0(i,a,l){const r=vf(i,a,l);for(const u in i)if(ct(i[u])||ct(a[u])){const f=wi.indexOf(u)!==-1?"attr"+u.charAt(0).toUpperCase()+u.substring(1):u;r[f]=i[u]}return r}class ZS extends x0{constructor(){super(...arguments),this.type="svg",this.isSVGTag=!1,this.measureInstanceViewportBox=We}getBaseTargetFromProps(a,l){return a[l]}readValueFromInstance(a,l){if(Ti.has(l)){const r=o0(l);return r&&r.default||0}return l=N0.has(l)?l:cf(l),a.getAttribute(l)}scrapeMotionValuesFromProps(a,l,r){return M0(a,l,r)}build(a,l,r){j0(a,l,this.isSVGTag,r.transformTemplate,r.style)}renderInstance(a,l,r,u){QS(a,l,r,u)}mount(a){this.isSVGTag=D0(a.tagName),super.mount(a)}}const JS=gf.length;function C0(i){if(!i)return;if(!i.isControllingVariants){const l=i.parent?C0(i.parent)||{}:{};return i.props.initial!==void 0&&(l.initial=i.props.initial),l}const a={};for(let l=0;lPromise.all(a.map(({animation:l,options:r})=>Q2(i,l,r)))}function ew(i){let a=IS(i),l=fg(),r=!0,u=!1;const f=p=>(v,b)=>{var j;const w=vi(i,b,p==="exit"?(j=i.presenceContext)==null?void 0:j.custom:void 0);if(w){const{transition:E,transitionEnd:V,...B}=w;v={...v,...B,...V}}return v};function d(p){a=p(i)}function h(p){const{props:v}=i,b=C0(i.parent)||{},w=[],j=new Set;let E={},V=1/0;for(let q=0;qV&&P,ye=!1;const ot=Array.isArray(X)?X:[X];let Ve=ot.reduce(f(Y),{});ae===!1&&(Ve={});const{prevResolvedValues:He={}}=H,_e={...He,...Ve},tt=F=>{ce=!0,j.has(F)&&(ye=!0,j.delete(F)),H.needsAnimating[F]=!0;const ie=i.getValue(F);ie&&(ie.liveStyle=!1)};for(const F in _e){const ie=Ve[F],fe=He[F];if(E.hasOwnProperty(F))continue;let A=!1;Oc(ie)&&Oc(fe)?A=!O0(ie,fe):A=ie!==fe,A?ie!=null?tt(F):j.add(F):ie!==void 0&&j.has(F)?tt(F):H.protectedKeys[F]=!0}H.prevProp=X,H.prevResolvedValues=Ve,H.isActive&&(E={...E,...Ve}),(r||u)&&i.blockInitialAnimation&&(ce=!1);const L=Q&&I;ce&&(!L||ye)&&w.push(...ot.map(F=>{const ie={type:Y};if(typeof F=="string"&&(r||u)&&!L&&i.manuallyAnimateOnMount&&i.parent){const{parent:fe}=i,A=vi(fe,F);if(fe.enteringChildren&&A){const{delayChildren:z}=A.transition||{};ie.delay=Iy(fe.enteringChildren,i,z)}}return{animation:F,options:ie}}))}if(j.size){const q={};if(typeof v.initial!="boolean"){const Y=vi(i,Array.isArray(v.initial)?v.initial[0]:v.initial);Y&&Y.transition&&(q.transition=Y.transition)}j.forEach(Y=>{const H=i.getBaseTarget(Y),X=i.getValue(Y);X&&(X.liveStyle=!0),q[Y]=H??null}),w.push({animation:q})}let B=!!w.length;return r&&(v.initial===!1||v.initial===v.animate)&&!i.manuallyAnimateOnMount&&(B=!1),r=!1,u=!1,B?a(w):Promise.resolve()}function y(p,v){var w;if(l[p].isActive===v)return Promise.resolve();(w=i.variantChildren)==null||w.forEach(j=>{var E;return(E=j.animationState)==null?void 0:E.setActive(p,v)}),l[p].isActive=v;const b=h(p);for(const j in l)l[j].protectedKeys={};return b}return{animateChanges:h,setActive:y,setAnimateFunction:d,getState:()=>l,reset:()=>{l=fg(),u=!0}}}function tw(i,a){return typeof a=="string"?a!==i:Array.isArray(a)?!O0(a,i):!1}function ba(i=!1){return{isActive:i,protectedKeys:{},needsAnimating:{},prevResolvedValues:{}}}function fg(){return{animate:ba(!0),whileInView:ba(),whileHover:ba(),whileTap:ba(),whileDrag:ba(),whileFocus:ba(),exit:ba()}}function dg(i,a){i.min=a.min,i.max=a.max}function Ft(i,a){dg(i.x,a.x),dg(i.y,a.y)}function hg(i,a){i.translate=a.translate,i.scale=a.scale,i.originPoint=a.originPoint,i.origin=a.origin}const R0=1e-4,nw=1-R0,aw=1+R0,L0=.01,iw=0-L0,sw=0+L0;function mt(i){return i.max-i.min}function lw(i,a,l){return Math.abs(i-a)<=l}function mg(i,a,l,r=.5){i.origin=r,i.originPoint=ze(a.min,a.max,i.origin),i.scale=mt(l)/mt(a),i.translate=ze(l.min,l.max,i.origin)-i.originPoint,(i.scale>=nw&&i.scale<=aw||isNaN(i.scale))&&(i.scale=1),(i.translate>=iw&&i.translate<=sw||isNaN(i.translate))&&(i.translate=0)}function As(i,a,l,r){mg(i.x,a.x,l.x,r?r.originX:void 0),mg(i.y,a.y,l.y,r?r.originY:void 0)}function pg(i,a,l){i.min=l.min+a.min,i.max=i.min+mt(a)}function rw(i,a,l){pg(i.x,a.x,l.x),pg(i.y,a.y,l.y)}function gg(i,a,l){i.min=a.min-l.min,i.max=i.min+mt(a)}function vr(i,a,l){gg(i.x,a.x,l.x),gg(i.y,a.y,l.y)}function yg(i,a,l,r,u){return i-=a,i=yr(i,1/l,r),u!==void 0&&(i=yr(i,1/u,r)),i}function ow(i,a=0,l=1,r=.5,u,f=i,d=i){if(an.test(a)&&(a=parseFloat(a),a=ze(d.min,d.max,a/100)-d.min),typeof a!="number")return;let h=ze(f.min,f.max,r);i===f&&(h-=a),i.min=yg(i.min,a,l,h,u),i.max=yg(i.max,a,l,h,u)}function vg(i,a,[l,r,u],f,d){ow(i,a[l],a[r],a[u],a.scale,f,d)}const uw=["x","scaleX","originX"],cw=["y","scaleY","originY"];function xg(i,a,l,r){vg(i.x,a,uw,l?l.x:void 0,r?r.x:void 0),vg(i.y,a,cw,l?l.y:void 0,r?r.y:void 0)}function bg(i){return i.translate===0&&i.scale===1}function _0(i){return bg(i.x)&&bg(i.y)}function Sg(i,a){return i.min===a.min&&i.max===a.max}function fw(i,a){return Sg(i.x,a.x)&&Sg(i.y,a.y)}function wg(i,a){return Math.round(i.min)===Math.round(a.min)&&Math.round(i.max)===Math.round(a.max)}function z0(i,a){return wg(i.x,a.x)&&wg(i.y,a.y)}function Tg(i){return mt(i.x)/mt(i.y)}function Ag(i,a){return i.translate===a.translate&&i.scale===a.scale&&i.originPoint===a.originPoint}function tn(i){return[i("x"),i("y")]}function dw(i,a,l){let r="";const u=i.x.translate/a.x,f=i.y.translate/a.y,d=(l==null?void 0:l.z)||0;if((u||f||d)&&(r=`translate3d(${u}px, ${f}px, ${d}px) `),(a.x!==1||a.y!==1)&&(r+=`scale(${1/a.x}, ${1/a.y}) `),l){const{transformPerspective:p,rotate:v,rotateX:b,rotateY:w,skewX:j,skewY:E}=l;p&&(r=`perspective(${p}px) ${r}`),v&&(r+=`rotate(${v}deg) `),b&&(r+=`rotateX(${b}deg) `),w&&(r+=`rotateY(${w}deg) `),j&&(r+=`skewX(${j}deg) `),E&&(r+=`skewY(${E}deg) `)}const h=i.x.scale*a.x,y=i.y.scale*a.y;return(h!==1||y!==1)&&(r+=`scale(${h}, ${y})`),r||"none"}const V0=["TopLeft","TopRight","BottomLeft","BottomRight"],hw=V0.length,Eg=i=>typeof i=="string"?parseFloat(i):i,jg=i=>typeof i=="number"||$.test(i);function mw(i,a,l,r,u,f){u?(i.opacity=ze(0,l.opacity??1,pw(r)),i.opacityExit=ze(a.opacity??1,0,gw(r))):f&&(i.opacity=ze(a.opacity??1,l.opacity??1,r));for(let d=0;dra?1:l(Ds(i,a,r))}function yw(i,a,l){const r=ct(i)?i:xi(i);return r.start(of("",r,a,l)),r.animation}function Rs(i,a,l,r={passive:!0}){return i.addEventListener(a,l,r),()=>i.removeEventListener(a,l)}const vw=(i,a)=>i.depth-a.depth;class xw{constructor(){this.children=[],this.isDirty=!1}add(a){Pc(this.children,a),this.isDirty=!0}remove(a){dr(this.children,a),this.isDirty=!0}forEach(a){this.isDirty&&this.children.sort(vw),this.isDirty=!1,this.children.forEach(a)}}function bw(i,a){const l=ht.now(),r=({timestamp:u})=>{const f=u-l;f>=a&&(In(r),i(f-a))};return Ce.setup(r,!0),()=>In(r)}function cr(i){return ct(i)?i.get():i}class Sw{constructor(){this.members=[]}add(a){Pc(this.members,a);for(let l=this.members.length-1;l>=0;l--){const r=this.members[l];if(r===a||r===this.lead||r===this.prevLead)continue;const u=r.instance;(!u||u.isConnected===!1)&&!r.snapshot&&(dr(this.members,r),r.unmount())}a.scheduleRender()}remove(a){if(dr(this.members,a),a===this.prevLead&&(this.prevLead=void 0),a===this.lead){const l=this.members[this.members.length-1];l&&this.promote(l)}}relegate(a){var l;for(let r=this.members.indexOf(a)-1;r>=0;r--){const u=this.members[r];if(u.isPresent!==!1&&((l=u.instance)==null?void 0:l.isConnected)!==!1)return this.promote(u),!0}return!1}promote(a,l){var u;const r=this.lead;if(a!==r&&(this.prevLead=r,this.lead=a,a.show(),r)){r.updateSnapshot(),a.scheduleRender();const{layoutDependency:f}=r.options,{layoutDependency:d}=a.options;(f===void 0||f!==d)&&(a.resumeFrom=r,l&&(r.preserveOpacity=!0),r.snapshot&&(a.snapshot=r.snapshot,a.snapshot.latestValues=r.animationValues||r.latestValues),(u=a.root)!=null&&u.isUpdating&&(a.isLayoutDirty=!0)),a.options.crossfade===!1&&r.hide()}}exitAnimationComplete(){this.members.forEach(a=>{var l,r,u,f,d;(r=(l=a.options).onExitComplete)==null||r.call(l),(d=(u=a.resumingFrom)==null?void 0:(f=u.options).onExitComplete)==null||d.call(f)})}scheduleRender(){this.members.forEach(a=>a.instance&&a.scheduleRender(!1))}removeLeadSnapshot(){var a;(a=this.lead)!=null&&a.snapshot&&(this.lead.snapshot=void 0)}}const fr={hasAnimatedSinceResize:!0,hasEverUpdated:!1},rc=["","X","Y","Z"],ww=1e3;let Tw=0;function oc(i,a,l,r){const{latestValues:u}=a;u[i]&&(l[i]=u[i],a.setStaticValue(i,0),r&&(r[i]=0))}function U0(i){if(i.hasCheckedOptimisedAppear=!0,i.root===i)return;const{visualElement:a}=i.options;if(!a)return;const l=i0(a);if(window.MotionHasOptimisedAnimation(l,"transform")){const{layout:u,layoutId:f}=i.options;window.MotionCancelOptimisedAnimation(l,"transform",Ce,!(u||f))}const{parent:r}=i;r&&!r.hasCheckedOptimisedAppear&&U0(r)}function B0({attachResizeListener:i,defaultParent:a,measureScroll:l,checkIsScrollRoot:r,resetTransform:u}){return class{constructor(d={},h=a==null?void 0:a()){this.id=Tw++,this.animationId=0,this.animationCommitId=0,this.children=new Set,this.options={},this.isTreeAnimating=!1,this.isAnimationBlocked=!1,this.isLayoutDirty=!1,this.isProjectionDirty=!1,this.isSharedProjectionDirty=!1,this.isTransformDirty=!1,this.updateManuallyBlocked=!1,this.updateBlockedByResize=!1,this.isUpdating=!1,this.isSVG=!1,this.needsReset=!1,this.shouldResetTransform=!1,this.hasCheckedOptimisedAppear=!1,this.treeScale={x:1,y:1},this.eventHandlers=new Map,this.hasTreeAnimated=!1,this.layoutVersion=0,this.updateScheduled=!1,this.scheduleUpdate=()=>this.update(),this.projectionUpdateScheduled=!1,this.checkUpdateFailed=()=>{this.isUpdating&&(this.isUpdating=!1,this.clearAllSnapshots())},this.updateProjection=()=>{this.projectionUpdateScheduled=!1,this.nodes.forEach(jw),this.nodes.forEach(Cw),this.nodes.forEach(Ow),this.nodes.forEach(Nw)},this.resolvedRelativeTargetAt=0,this.linkedParentVersion=0,this.hasProjected=!1,this.isVisible=!0,this.animationProgress=0,this.sharedNodes=new Map,this.latestValues=d,this.root=h?h.root||h:this,this.path=h?[...h.path,h]:[],this.parent=h,this.depth=h?h.depth+1:0;for(let y=0;ythis.root.updateBlockedByResize=!1;Ce.read(()=>{b=window.innerWidth}),i(d,()=>{const j=window.innerWidth;j!==b&&(b=j,this.root.updateBlockedByResize=!0,v&&v(),v=bw(w,250),fr.hasAnimatedSinceResize&&(fr.hasAnimatedSinceResize=!1,this.nodes.forEach(Cg)))})}h&&this.root.registerSharedNode(h,this),this.options.animate!==!1&&p&&(h||y)&&this.addEventListener("didUpdate",({delta:v,hasLayoutChanged:b,hasRelativeLayoutChanged:w,layout:j})=>{if(this.isTreeAnimationBlocked()){this.target=void 0,this.relativeTarget=void 0;return}const E=this.options.transition||p.getDefaultTransition()||Vw,{onLayoutAnimationStart:V,onLayoutAnimationComplete:B}=p.getProps(),q=!this.targetLayout||!z0(this.targetLayout,j),Y=!b&&w;if(this.options.layoutRoot||this.resumeFrom||Y||b&&(q||!this.currentAnimation)){this.resumeFrom&&(this.resumingFrom=this.resumeFrom,this.resumingFrom.resumingFrom=void 0);const H={...rf(E,"layout"),onPlay:V,onComplete:B};(p.shouldReduceMotion||this.options.layoutRoot)&&(H.delay=0,H.type=!1),this.startAnimation(H),this.setAnimationOrigin(v,Y)}else b||Cg(this),this.isLead()&&this.options.onExitComplete&&this.options.onExitComplete();this.targetLayout=j})}unmount(){this.options.layoutId&&this.willUpdate(),this.root.nodes.remove(this);const d=this.getStack();d&&d.remove(this),this.parent&&this.parent.children.delete(this),this.instance=void 0,this.eventHandlers.clear(),In(this.updateProjection)}blockUpdate(){this.updateManuallyBlocked=!0}unblockUpdate(){this.updateManuallyBlocked=!1}isUpdateBlocked(){return this.updateManuallyBlocked||this.updateBlockedByResize}isTreeAnimationBlocked(){return this.isAnimationBlocked||this.parent&&this.parent.isTreeAnimationBlocked()||!1}startUpdate(){this.isUpdateBlocked()||(this.isUpdating=!0,this.nodes&&this.nodes.forEach(Rw),this.animationId++)}getTransformTemplate(){const{visualElement:d}=this.options;return d&&d.getProps().transformTemplate}willUpdate(d=!0){if(this.root.hasTreeAnimated=!0,this.root.isUpdateBlocked()){this.options.onExitComplete&&this.options.onExitComplete();return}if(window.MotionCancelOptimisedAnimation&&!this.hasCheckedOptimisedAppear&&U0(this),!this.root.isUpdating&&this.root.startUpdate(),this.isLayoutDirty)return;this.isLayoutDirty=!0;for(let v=0;v{this.isLayoutDirty?this.root.didUpdate():this.root.checkUpdateFailed()})}updateSnapshot(){this.snapshot||!this.instance||(this.snapshot=this.measure(),this.snapshot&&!mt(this.snapshot.measuredBox.x)&&!mt(this.snapshot.measuredBox.y)&&(this.snapshot=void 0))}updateLayout(){if(!this.instance||(this.updateScroll(),!(this.options.alwaysMeasureLayout&&this.isLead())&&!this.isLayoutDirty))return;if(this.resumeFrom&&!this.resumeFrom.instance)for(let y=0;y{const P=X/1e3;Og(b.x,d.x,P),Og(b.y,d.y,P),this.setTargetDelta(b),this.relativeTarget&&this.relativeTargetOrigin&&this.layout&&this.relativeParent&&this.relativeParent.layout&&(vr(w,this.layout.layoutBox,this.relativeParent.layout.layoutBox),_w(this.relativeTarget,this.relativeTargetOrigin,w,P),H&&fw(this.relativeTarget,H)&&(this.isProjectionDirty=!1),H||(H=We()),Ft(H,this.relativeTarget)),V&&(this.animationValues=v,mw(v,p,this.latestValues,P,Y,q)),this.root.scheduleUpdateProjection(),this.scheduleRender(),this.animationProgress=P},this.mixTargetDelta(this.options.layoutRoot?1e3:0)}startAnimation(d){var h,y,p;this.notifyListeners("animationStart"),(h=this.currentAnimation)==null||h.stop(),(p=(y=this.resumingFrom)==null?void 0:y.currentAnimation)==null||p.stop(),this.pendingAnimation&&(In(this.pendingAnimation),this.pendingAnimation=void 0),this.pendingAnimation=Ce.update(()=>{fr.hasAnimatedSinceResize=!0,this.motionValue||(this.motionValue=xi(0)),this.motionValue.jump(0,!1),this.currentAnimation=yw(this.motionValue,[0,1e3],{...d,velocity:0,isSync:!0,onUpdate:v=>{this.mixTargetDelta(v),d.onUpdate&&d.onUpdate(v)},onStop:()=>{},onComplete:()=>{d.onComplete&&d.onComplete(),this.completeAnimation()}}),this.resumingFrom&&(this.resumingFrom.currentAnimation=this.currentAnimation),this.pendingAnimation=void 0})}completeAnimation(){this.resumingFrom&&(this.resumingFrom.currentAnimation=void 0,this.resumingFrom.preserveOpacity=void 0);const d=this.getStack();d&&d.exitAnimationComplete(),this.resumingFrom=this.currentAnimation=this.animationValues=void 0,this.notifyListeners("animationComplete")}finishAnimation(){this.currentAnimation&&(this.mixTargetDelta&&this.mixTargetDelta(ww),this.currentAnimation.stop()),this.completeAnimation()}applyTransformsToTarget(){const d=this.getLead();let{targetWithTransforms:h,target:y,layout:p,latestValues:v}=d;if(!(!h||!y||!p)){if(this!==d&&this.layout&&p&&H0(this.options.animationType,this.layout.layoutBox,p.layoutBox)){y=this.target||We();const b=mt(this.layout.layoutBox.x);y.x.min=d.target.x.min,y.x.max=y.x.min+b;const w=mt(this.layout.layoutBox.y);y.y.min=d.target.y.min,y.y.max=y.y.min+w}Ft(h,y),yi(h,v),As(this.projectionDeltaWithTransform,this.layoutCorrected,h,v)}}registerSharedNode(d,h){this.sharedNodes.has(d)||this.sharedNodes.set(d,new Sw),this.sharedNodes.get(d).add(h);const p=h.options.initialPromotionConfig;h.promote({transition:p?p.transition:void 0,preserveFollowOpacity:p&&p.shouldPreserveFollowOpacity?p.shouldPreserveFollowOpacity(h):void 0})}isLead(){const d=this.getStack();return d?d.lead===this:!0}getLead(){var h;const{layoutId:d}=this.options;return d?((h=this.getStack())==null?void 0:h.lead)||this:this}getPrevLead(){var h;const{layoutId:d}=this.options;return d?(h=this.getStack())==null?void 0:h.prevLead:void 0}getStack(){const{layoutId:d}=this.options;if(d)return this.root.sharedNodes.get(d)}promote({needsReset:d,transition:h,preserveFollowOpacity:y}={}){const p=this.getStack();p&&p.promote(this,y),d&&(this.projectionDelta=void 0,this.needsReset=!0),h&&this.setOptions({transition:h})}relegate(){const d=this.getStack();return d?d.relegate(this):!1}resetSkewAndRotation(){const{visualElement:d}=this.options;if(!d)return;let h=!1;const{latestValues:y}=d;if((y.z||y.rotate||y.rotateX||y.rotateY||y.rotateZ||y.skewX||y.skewY)&&(h=!0),!h)return;const p={};y.z&&oc("z",d,p,this.animationValues);for(let v=0;v{var h;return(h=d.currentAnimation)==null?void 0:h.stop()}),this.root.nodes.forEach(Dg),this.root.sharedNodes.clear()}}}function Aw(i){i.updateLayout()}function Ew(i){var l;const a=((l=i.resumeFrom)==null?void 0:l.snapshot)||i.snapshot;if(i.isLead()&&i.layout&&a&&i.hasListeners("didUpdate")){const{layoutBox:r,measuredBox:u}=i.layout,{animationType:f}=i.options,d=a.source!==i.layout.source;f==="size"?tn(b=>{const w=d?a.measuredBox[b]:a.layoutBox[b],j=mt(w);w.min=r[b].min,w.max=w.min+j}):H0(f,a.layoutBox,r)&&tn(b=>{const w=d?a.measuredBox[b]:a.layoutBox[b],j=mt(r[b]);w.max=w.min+j,i.relativeTarget&&!i.currentAnimation&&(i.isProjectionDirty=!0,i.relativeTarget[b].max=i.relativeTarget[b].min+j)});const h=pi();As(h,r,a.layoutBox);const y=pi();d?As(y,i.applyTransform(u,!0),a.measuredBox):As(y,r,a.layoutBox);const p=!_0(h);let v=!1;if(!i.resumeFrom){const b=i.getClosestProjectingParent();if(b&&!b.resumeFrom){const{snapshot:w,layout:j}=b;if(w&&j){const E=We();vr(E,a.layoutBox,w.layoutBox);const V=We();vr(V,r,j.layoutBox),z0(E,V)||(v=!0),b.options.layoutRoot&&(i.relativeTarget=V,i.relativeTargetOrigin=E,i.relativeParent=b)}}}i.notifyListeners("didUpdate",{layout:r,snapshot:a,delta:y,layoutDelta:h,hasLayoutChanged:p,hasRelativeLayoutChanged:v})}else if(i.isLead()){const{onExitComplete:r}=i.options;r&&r()}i.options.transition=void 0}function jw(i){i.parent&&(i.isProjecting()||(i.isProjectionDirty=i.parent.isProjectionDirty),i.isSharedProjectionDirty||(i.isSharedProjectionDirty=!!(i.isProjectionDirty||i.parent.isProjectionDirty||i.parent.isSharedProjectionDirty)),i.isTransformDirty||(i.isTransformDirty=i.parent.isTransformDirty))}function Nw(i){i.isProjectionDirty=i.isSharedProjectionDirty=i.isTransformDirty=!1}function Dw(i){i.clearSnapshot()}function Dg(i){i.clearMeasurements()}function Mg(i){i.isLayoutDirty=!1}function Mw(i){const{visualElement:a}=i.options;a&&a.getProps().onBeforeLayoutMeasure&&a.notify("BeforeLayoutMeasure"),i.resetTransform()}function Cg(i){i.finishAnimation(),i.targetDelta=i.relativeTarget=i.target=void 0,i.isProjectionDirty=!0}function Cw(i){i.resolveTargetDelta()}function Ow(i){i.calcProjection()}function Rw(i){i.resetSkewAndRotation()}function Lw(i){i.removeLeadSnapshot()}function Og(i,a,l){i.translate=ze(a.translate,0,l),i.scale=ze(a.scale,1,l),i.origin=a.origin,i.originPoint=a.originPoint}function Rg(i,a,l,r){i.min=ze(a.min,l.min,r),i.max=ze(a.max,l.max,r)}function _w(i,a,l,r){Rg(i.x,a.x,l.x,r),Rg(i.y,a.y,l.y,r)}function zw(i){return i.animationValues&&i.animationValues.opacityExit!==void 0}const Vw={duration:.45,ease:[.4,0,.1,1]},Lg=i=>typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().includes(i),_g=Lg("applewebkit/")&&!Lg("chrome/")?Math.round:Yt;function zg(i){i.min=_g(i.min),i.max=_g(i.max)}function kw(i){zg(i.x),zg(i.y)}function H0(i,a,l){return i==="position"||i==="preserve-aspect"&&!lw(Tg(a),Tg(l),.2)}function Uw(i){var a;return i!==i.root&&((a=i.scroll)==null?void 0:a.wasRoot)}const Bw=B0({attachResizeListener:(i,a)=>Rs(i,"resize",a),measureScroll:()=>{var i,a;return{x:document.documentElement.scrollLeft||((i=document.body)==null?void 0:i.scrollLeft)||0,y:document.documentElement.scrollTop||((a=document.body)==null?void 0:a.scrollTop)||0}},checkIsScrollRoot:()=>!0}),uc={current:void 0},q0=B0({measureScroll:i=>({x:i.scrollLeft,y:i.scrollTop}),defaultParent:()=>{if(!uc.current){const i=new Bw({});i.mount(window),i.setOptions({layoutScroll:!0}),uc.current=i}return uc.current},resetTransform:(i,a)=>{i.style.transform=a!==void 0?a:"none"},checkIsScrollRoot:i=>window.getComputedStyle(i).position==="fixed"}),G0=te.createContext({transformPagePoint:i=>i,isStatic:!1,reducedMotion:"never"});function Hw(i=!0){const a=te.useContext(Xc);if(a===null)return[!0,null];const{isPresent:l,onExitComplete:r,register:u}=a,f=te.useId();te.useEffect(()=>{if(i)return u(f)},[i]);const d=te.useCallback(()=>i&&r&&r(f),[f,r,i]);return!l&&r?[!1,d]:[!0]}const Y0=te.createContext({strict:!1}),Vg={animation:["animate","variants","whileHover","whileTap","exit","whileInView","whileFocus","whileDrag"],exit:["exit"],drag:["drag","dragControls"],focus:["whileFocus"],hover:["whileHover","onHoverStart","onHoverEnd"],tap:["whileTap","onTap","onTapStart","onTapCancel"],pan:["onPan","onPanStart","onPanSessionStart","onPanEnd"],inView:["whileInView","onViewportEnter","onViewportLeave"],layout:["layout","layoutId"]};let kg=!1;function qw(){if(kg)return;const i={};for(const a in Vg)i[a]={isEnabled:l=>Vg[a].some(r=>!!l[r])};v0(i),kg=!0}function K0(){return qw(),RS()}function Gw(i){const a=K0();for(const l in i)a[l]={...a[l],...i[l]};v0(a)}const Yw=new Set(["animate","exit","variants","initial","style","values","variants","transition","transformTemplate","custom","inherit","onBeforeLayoutMeasure","onAnimationStart","onAnimationComplete","onUpdate","onDragStart","onDrag","onDragEnd","onMeasureDragConstraints","onDirectionLock","onDragTransitionEnd","_dragX","_dragY","onHoverStart","onHoverEnd","onViewportEnter","onViewportLeave","globalTapTarget","propagate","ignoreStrict","viewport"]);function xr(i){return i.startsWith("while")||i.startsWith("drag")&&i!=="draggable"||i.startsWith("layout")||i.startsWith("onTap")||i.startsWith("onPan")||i.startsWith("onLayout")||Yw.has(i)}let X0=i=>!xr(i);function Kw(i){typeof i=="function"&&(X0=a=>a.startsWith("on")?!xr(a):i(a))}try{Kw(require("@emotion/is-prop-valid").default)}catch{}function Xw(i,a,l){const r={};for(const u in i)u==="values"&&typeof i.values=="object"||(X0(u)||l===!0&&xr(u)||!a&&!xr(u)||i.draggable&&u.startsWith("onDrag"))&&(r[u]=i[u]);return r}const jr=te.createContext({});function Pw(i,a){if(Er(i)){const{initial:l,animate:r}=i;return{initial:l===!1||Os(l)?l:void 0,animate:Os(r)?r:void 0}}return i.inherit!==!1?a:{}}function Fw(i){const{initial:a,animate:l}=Pw(i,te.useContext(jr));return te.useMemo(()=>({initial:a,animate:l}),[Ug(a),Ug(l)])}function Ug(i){return Array.isArray(i)?i.join(" "):i}const xf=()=>({style:{},transform:{},transformOrigin:{},vars:{}});function P0(i,a,l){for(const r in a)!ct(a[r])&&!E0(r,l)&&(i[r]=a[r])}function Qw({transformTemplate:i},a){return te.useMemo(()=>{const l=xf();return yf(l,a,i),Object.assign({},l.vars,l.style)},[a])}function Zw(i,a){const l=i.style||{},r={};return P0(r,l,i),Object.assign(r,Qw(i,a)),r}function Jw(i,a){const l={},r=Zw(i,a);return i.drag&&i.dragListener!==!1&&(l.draggable=!1,r.userSelect=r.WebkitUserSelect=r.WebkitTouchCallout="none",r.touchAction=i.drag===!0?"none":`pan-${i.drag==="x"?"y":"x"}`),i.tabIndex===void 0&&(i.onTap||i.onTapStart||i.whileTap)&&(l.tabIndex=0),l.style=r,l}const F0=()=>({...xf(),attrs:{}});function $w(i,a,l,r){const u=te.useMemo(()=>{const f=F0();return j0(f,a,D0(r),i.transformTemplate,i.style),{...f.attrs,style:{...f.style}}},[a]);if(i.style){const f={};P0(f,i.style,i),u.style={...f,...u.style}}return u}const Ww=["animate","circle","defs","desc","ellipse","g","image","line","filter","marker","mask","metadata","path","pattern","polygon","polyline","rect","stop","switch","symbol","svg","text","tspan","use","view"];function bf(i){return typeof i!="string"||i.includes("-")?!1:!!(Ww.indexOf(i)>-1||/[A-Z]/u.test(i))}function Iw(i,a,l,{latestValues:r},u,f=!1,d){const y=(d??bf(i)?$w:Jw)(a,r,u,i),p=Xw(a,typeof i=="string",f),v=i!==te.Fragment?{...p,...y,ref:l}:{},{children:b}=a,w=te.useMemo(()=>ct(b)?b.get():b,[b]);return te.createElement(i,{...v,children:w})}function eT({scrapeMotionValuesFromProps:i,createRenderState:a},l,r,u){return{latestValues:tT(l,r,u,i),renderState:a()}}function tT(i,a,l,r){const u={},f=r(i,{});for(const w in f)u[w]=cr(f[w]);let{initial:d,animate:h}=i;const y=Er(i),p=g0(i);a&&p&&!y&&i.inherit!==!1&&(d===void 0&&(d=a.initial),h===void 0&&(h=a.animate));let v=l?l.initial===!1:!1;v=v||d===!1;const b=v?h:d;if(b&&typeof b!="boolean"&&!Ar(b)){const w=Array.isArray(b)?b:[b];for(let j=0;j(a,l)=>{const r=te.useContext(jr),u=te.useContext(Xc),f=()=>eT(i,a,r,u);return l?f():nb(f)},nT=Q0({scrapeMotionValuesFromProps:vf,createRenderState:xf}),aT=Q0({scrapeMotionValuesFromProps:M0,createRenderState:F0}),iT=Symbol.for("motionComponentSymbol");function sT(i,a,l){const r=te.useRef(l);te.useInsertionEffect(()=>{r.current=l});const u=te.useRef(null);return te.useCallback(f=>{var h;f&&((h=i.onMount)==null||h.call(i,f));const d=r.current;if(typeof d=="function")if(f){const y=d(f);typeof y=="function"&&(u.current=y)}else u.current?(u.current(),u.current=null):d(f);else d&&(d.current=f);a&&(f?a.mount(f):a.unmount())},[a])}const Z0=te.createContext({});function di(i){return i&&typeof i=="object"&&Object.prototype.hasOwnProperty.call(i,"current")}function lT(i,a,l,r,u,f){var H,X;const{visualElement:d}=te.useContext(jr),h=te.useContext(Y0),y=te.useContext(Xc),p=te.useContext(G0),v=p.reducedMotion,b=p.skipAnimations,w=te.useRef(null),j=te.useRef(!1);r=r||h.renderer,!w.current&&r&&(w.current=r(i,{visualState:a,parent:d,props:l,presenceContext:y,blockInitialAnimation:y?y.initial===!1:!1,reducedMotionConfig:v,skipAnimations:b,isSVG:f}),j.current&&w.current&&(w.current.manuallyAnimateOnMount=!0));const E=w.current,V=te.useContext(Z0);E&&!E.projection&&u&&(E.type==="html"||E.type==="svg")&&rT(w.current,l,u,V);const B=te.useRef(!1);te.useInsertionEffect(()=>{E&&B.current&&E.update(l,y)});const q=l[a0],Y=te.useRef(!!q&&typeof window<"u"&&!((H=window.MotionHandoffIsComplete)!=null&&H.call(window,q))&&((X=window.MotionHasOptimisedAnimation)==null?void 0:X.call(window,q)));return ib(()=>{j.current=!0,E&&(B.current=!0,window.MotionIsMounted=!0,E.updateFeatures(),E.scheduleRenderMicrotask(),Y.current&&E.animationState&&E.animationState.animateChanges())}),te.useEffect(()=>{E&&(!Y.current&&E.animationState&&E.animationState.animateChanges(),Y.current&&(queueMicrotask(()=>{var P;(P=window.MotionHandoffMarkAsComplete)==null||P.call(window,q)}),Y.current=!1),E.enteringChildren=void 0)}),E}function rT(i,a,l,r){const{layoutId:u,layout:f,drag:d,dragConstraints:h,layoutScroll:y,layoutRoot:p,layoutCrossfade:v}=a;i.projection=new l(i.latestValues,a["data-framer-portal-id"]?void 0:J0(i.parent)),i.projection.setOptions({layoutId:u,layout:f,alwaysMeasureLayout:!!d||h&&di(h),visualElement:i,animationType:typeof f=="string"?f:"both",initialPromotionConfig:r,crossfade:v,layoutScroll:y,layoutRoot:p})}function J0(i){if(i)return i.options.allowProjection!==!1?i.projection:J0(i.parent)}function cc(i,{forwardMotionProps:a=!1,type:l}={},r,u){r&&Gw(r);const f=l?l==="svg":bf(i),d=f?aT:nT;function h(p,v){let b;const w={...te.useContext(G0),...p,layoutId:oT(p)},{isStatic:j}=w,E=Fw(p),V=d(p,j);if(!j&&typeof window<"u"){uT();const B=cT(w);b=B.MeasureLayout,E.visualElement=lT(i,V,w,u,B.ProjectionNode,f)}return m.jsxs(jr.Provider,{value:E,children:[b&&E.visualElement?m.jsx(b,{visualElement:E.visualElement,...w}):null,Iw(i,p,sT(V,E.visualElement,v),V,j,a,f)]})}h.displayName=`motion.${typeof i=="string"?i:`create(${i.displayName??i.name??""})`}`;const y=te.forwardRef(h);return y[iT]=i,y}function oT({layoutId:i}){const a=te.useContext(gy).id;return a&&i!==void 0?a+"-"+i:i}function uT(i,a){te.useContext(Y0).strict}function cT(i){const a=K0(),{drag:l,layout:r}=a;if(!l&&!r)return{};const u={...l,...r};return{MeasureLayout:l!=null&&l.isEnabled(i)||r!=null&&r.isEnabled(i)?u.MeasureLayout:void 0,ProjectionNode:u.ProjectionNode}}function fT(i,a){if(typeof Proxy>"u")return cc;const l=new Map,r=(f,d)=>cc(f,d,i,a),u=(f,d)=>r(f,d);return new Proxy(u,{get:(f,d)=>d==="create"?r:(l.has(d)||l.set(d,cc(d,void 0,i,a)),l.get(d))})}const dT=(i,a)=>a.isSVG??bf(i)?new ZS(a):new YS(a,{allowProjection:i!==te.Fragment});class hT extends ea{constructor(a){super(a),a.animationState||(a.animationState=ew(a))}updateAnimationControlsSubscription(){const{animate:a}=this.node.getProps();Ar(a)&&(this.unmountControls=a.subscribe(this.node))}mount(){this.updateAnimationControlsSubscription()}update(){const{animate:a}=this.node.getProps(),{animate:l}=this.node.prevProps||{};a!==l&&this.updateAnimationControlsSubscription()}unmount(){var a;this.node.animationState.reset(),(a=this.unmountControls)==null||a.call(this)}}let mT=0;class pT extends ea{constructor(){super(...arguments),this.id=mT++}update(){if(!this.node.presenceContext)return;const{isPresent:a,onExitComplete:l}=this.node.presenceContext,{isPresent:r}=this.node.prevPresenceContext||{};if(!this.node.animationState||a===r)return;const u=this.node.animationState.setActive("exit",!a);l&&!a&&u.then(()=>{l(this.id)})}mount(){const{register:a,onExitComplete:l}=this.node.presenceContext||{};l&&l(this.id),a&&(this.unmount=a(this.id))}unmount(){}}const gT={animation:{Feature:hT},exit:{Feature:pT}};function ks(i){return{point:{x:i.pageX,y:i.pageY}}}const yT=i=>a=>hf(a)&&i(a,ks(a));function Es(i,a,l,r){return Rs(i,a,yT(l),r)}const $0=({current:i})=>i?i.ownerDocument.defaultView:null,Bg=(i,a)=>Math.abs(i-a);function vT(i,a){const l=Bg(i.x,a.x),r=Bg(i.y,a.y);return Math.sqrt(l**2+r**2)}const Hg=new Set(["auto","scroll"]);class W0{constructor(a,l,{transformPagePoint:r,contextWindow:u=window,dragSnapToOrigin:f=!1,distanceThreshold:d=3,element:h}={}){if(this.startEvent=null,this.lastMoveEvent=null,this.lastMoveEventInfo=null,this.handlers={},this.contextWindow=window,this.scrollPositions=new Map,this.removeScrollListeners=null,this.onElementScroll=j=>{this.handleScroll(j.target)},this.onWindowScroll=()=>{this.handleScroll(window)},this.updatePoint=()=>{if(!(this.lastMoveEvent&&this.lastMoveEventInfo))return;const j=dc(this.lastMoveEventInfo,this.history),E=this.startEvent!==null,V=vT(j.offset,{x:0,y:0})>=this.distanceThreshold;if(!E&&!V)return;const{point:B}=j,{timestamp:q}=rt;this.history.push({...B,timestamp:q});const{onStart:Y,onMove:H}=this.handlers;E||(Y&&Y(this.lastMoveEvent,j),this.startEvent=this.lastMoveEvent),H&&H(this.lastMoveEvent,j)},this.handlePointerMove=(j,E)=>{this.lastMoveEvent=j,this.lastMoveEventInfo=fc(E,this.transformPagePoint),Ce.update(this.updatePoint,!0)},this.handlePointerUp=(j,E)=>{this.end();const{onEnd:V,onSessionEnd:B,resumeAnimation:q}=this.handlers;if((this.dragSnapToOrigin||!this.startEvent)&&q&&q(),!(this.lastMoveEvent&&this.lastMoveEventInfo))return;const Y=dc(j.type==="pointercancel"?this.lastMoveEventInfo:fc(E,this.transformPagePoint),this.history);this.startEvent&&V&&V(j,Y),B&&B(j,Y)},!hf(a))return;this.dragSnapToOrigin=f,this.handlers=l,this.transformPagePoint=r,this.distanceThreshold=d,this.contextWindow=u||window;const y=ks(a),p=fc(y,this.transformPagePoint),{point:v}=p,{timestamp:b}=rt;this.history=[{...v,timestamp:b}];const{onSessionStart:w}=l;w&&w(a,dc(p,this.history)),this.removeListeners=_s(Es(this.contextWindow,"pointermove",this.handlePointerMove),Es(this.contextWindow,"pointerup",this.handlePointerUp),Es(this.contextWindow,"pointercancel",this.handlePointerUp)),h&&this.startScrollTracking(h)}startScrollTracking(a){let l=a.parentElement;for(;l;){const r=getComputedStyle(l);(Hg.has(r.overflowX)||Hg.has(r.overflowY))&&this.scrollPositions.set(l,{x:l.scrollLeft,y:l.scrollTop}),l=l.parentElement}this.scrollPositions.set(window,{x:window.scrollX,y:window.scrollY}),window.addEventListener("scroll",this.onElementScroll,{capture:!0}),window.addEventListener("scroll",this.onWindowScroll),this.removeScrollListeners=()=>{window.removeEventListener("scroll",this.onElementScroll,{capture:!0}),window.removeEventListener("scroll",this.onWindowScroll)}}handleScroll(a){const l=this.scrollPositions.get(a);if(!l)return;const r=a===window,u=r?{x:window.scrollX,y:window.scrollY}:{x:a.scrollLeft,y:a.scrollTop},f={x:u.x-l.x,y:u.y-l.y};f.x===0&&f.y===0||(r?this.lastMoveEventInfo&&(this.lastMoveEventInfo.point.x+=f.x,this.lastMoveEventInfo.point.y+=f.y):this.history.length>0&&(this.history[0].x-=f.x,this.history[0].y-=f.y),this.scrollPositions.set(a,u),Ce.update(this.updatePoint,!0))}updateHandlers(a){this.handlers=a}end(){this.removeListeners&&this.removeListeners(),this.removeScrollListeners&&this.removeScrollListeners(),this.scrollPositions.clear(),In(this.updatePoint)}}function fc(i,a){return a?{point:a(i.point)}:i}function qg(i,a){return{x:i.x-a.x,y:i.y-a.y}}function dc({point:i},a){return{point:i,delta:qg(i,I0(a)),offset:qg(i,xT(a)),velocity:bT(a,.1)}}function xT(i){return i[0]}function I0(i){return i[i.length-1]}function bT(i,a){if(i.length<2)return{x:0,y:0};let l=i.length-1,r=null;const u=I0(i);for(;l>=0&&(r=i[l],!(u.timestamp-r.timestamp>Zt(a)));)l--;if(!r)return{x:0,y:0};r===i[0]&&i.length>2&&u.timestamp-r.timestamp>Zt(a)*2&&(r=i[1]);const f=Gt(u.timestamp-r.timestamp);if(f===0)return{x:0,y:0};const d={x:(u.x-r.x)/f,y:(u.y-r.y)/f};return d.x===1/0&&(d.x=0),d.y===1/0&&(d.y=0),d}function ST(i,{min:a,max:l},r){return a!==void 0&&il&&(i=r?ze(l,i,r.max):Math.min(i,l)),i}function Gg(i,a,l){return{min:a!==void 0?i.min+a:void 0,max:l!==void 0?i.max+l-(i.max-i.min):void 0}}function wT(i,{top:a,left:l,bottom:r,right:u}){return{x:Gg(i.x,l,u),y:Gg(i.y,a,r)}}function Yg(i,a){let l=a.min-i.min,r=a.max-i.max;return a.max-a.minr?l=Ds(a.min,a.max-r,i.min):r>u&&(l=Ds(i.min,i.max-u,a.min)),sn(0,1,l)}function ET(i,a){const l={};return a.min!==void 0&&(l.min=a.min-i.min),a.max!==void 0&&(l.max=a.max-i.min),l}const Hc=.35;function jT(i=Hc){return i===!1?i=0:i===!0&&(i=Hc),{x:Kg(i,"left","right"),y:Kg(i,"top","bottom")}}function Kg(i,a,l){return{min:Xg(i,a),max:Xg(i,l)}}function Xg(i,a){return typeof i=="number"?i:i[a]||0}const NT=new WeakMap;class DT{constructor(a){this.openDragLock=null,this.isDragging=!1,this.currentDirection=null,this.originPoint={x:0,y:0},this.constraints=!1,this.hasMutatedConstraints=!1,this.elastic=We(),this.latestPointerEvent=null,this.latestPanInfo=null,this.visualElement=a}start(a,{snapToCursor:l=!1,distanceThreshold:r}={}){const{presenceContext:u}=this.visualElement;if(u&&u.isPresent===!1)return;const f=b=>{l&&this.snapToCursor(ks(b).point),this.stopAnimation()},d=(b,w)=>{const{drag:j,dragPropagation:E,onDragStart:V}=this.getProps();if(j&&!E&&(this.openDragLock&&this.openDragLock(),this.openDragLock=oS(j),!this.openDragLock))return;this.latestPointerEvent=b,this.latestPanInfo=w,this.isDragging=!0,this.currentDirection=null,this.resolveConstraints(),this.visualElement.projection&&(this.visualElement.projection.isAnimationBlocked=!0,this.visualElement.projection.target=void 0),tn(q=>{let Y=this.getAxisMotionValue(q).get()||0;if(an.test(Y)){const{projection:H}=this.visualElement;if(H&&H.layout){const X=H.layout.layoutBox[q];X&&(Y=mt(X)*(parseFloat(Y)/100))}}this.originPoint[q]=Y}),V&&Ce.update(()=>V(b,w),!1,!0),Rc(this.visualElement,"transform");const{animationState:B}=this.visualElement;B&&B.setActive("whileDrag",!0)},h=(b,w)=>{this.latestPointerEvent=b,this.latestPanInfo=w;const{dragPropagation:j,dragDirectionLock:E,onDirectionLock:V,onDrag:B}=this.getProps();if(!j&&!this.openDragLock)return;const{offset:q}=w;if(E&&this.currentDirection===null){this.currentDirection=CT(q),this.currentDirection!==null&&V&&V(this.currentDirection);return}this.updateAxis("x",w.point,q),this.updateAxis("y",w.point,q),this.visualElement.render(),B&&Ce.update(()=>B(b,w),!1,!0)},y=(b,w)=>{this.latestPointerEvent=b,this.latestPanInfo=w,this.stop(b,w),this.latestPointerEvent=null,this.latestPanInfo=null},p=()=>{const{dragSnapToOrigin:b}=this.getProps();(b||this.constraints)&&this.startAnimation({x:0,y:0})},{dragSnapToOrigin:v}=this.getProps();this.panSession=new W0(a,{onSessionStart:f,onStart:d,onMove:h,onSessionEnd:y,resumeAnimation:p},{transformPagePoint:this.visualElement.getTransformPagePoint(),dragSnapToOrigin:v,distanceThreshold:r,contextWindow:$0(this.visualElement),element:this.visualElement.current})}stop(a,l){const r=a||this.latestPointerEvent,u=l||this.latestPanInfo,f=this.isDragging;if(this.cancel(),!f||!u||!r)return;const{velocity:d}=u;this.startAnimation(d);const{onDragEnd:h}=this.getProps();h&&Ce.postRender(()=>h(r,u))}cancel(){this.isDragging=!1;const{projection:a,animationState:l}=this.visualElement;a&&(a.isAnimationBlocked=!1),this.endPanSession();const{dragPropagation:r}=this.getProps();!r&&this.openDragLock&&(this.openDragLock(),this.openDragLock=null),l&&l.setActive("whileDrag",!1)}endPanSession(){this.panSession&&this.panSession.end(),this.panSession=void 0}updateAxis(a,l,r){const{drag:u}=this.getProps();if(!r||!ir(a,u,this.currentDirection))return;const f=this.getAxisMotionValue(a);let d=this.originPoint[a]+r[a];this.constraints&&this.constraints[a]&&(d=ST(d,this.constraints[a],this.elastic[a])),f.set(d)}resolveConstraints(){var f;const{dragConstraints:a,dragElastic:l}=this.getProps(),r=this.visualElement.projection&&!this.visualElement.projection.layout?this.visualElement.projection.measure(!1):(f=this.visualElement.projection)==null?void 0:f.layout,u=this.constraints;a&&di(a)?this.constraints||(this.constraints=this.resolveRefConstraints()):a&&r?this.constraints=wT(r.layoutBox,a):this.constraints=!1,this.elastic=jT(l),u!==this.constraints&&!di(a)&&r&&this.constraints&&!this.hasMutatedConstraints&&tn(d=>{this.constraints!==!1&&this.getAxisMotionValue(d)&&(this.constraints[d]=ET(r.layoutBox[d],this.constraints[d]))})}resolveRefConstraints(){const{dragConstraints:a,onMeasureDragConstraints:l}=this.getProps();if(!a||!di(a))return!1;const r=a.current,{projection:u}=this.visualElement;if(!u||!u.layout)return!1;const f=kS(r,u.root,this.visualElement.getTransformPagePoint());let d=TT(u.layout.layoutBox,f);if(l){const h=l(_S(d));this.hasMutatedConstraints=!!h,h&&(d=b0(h))}return d}startAnimation(a){const{drag:l,dragMomentum:r,dragElastic:u,dragTransition:f,dragSnapToOrigin:d,onDragTransitionEnd:h}=this.getProps(),y=this.constraints||{},p=tn(v=>{if(!ir(v,l,this.currentDirection))return;let b=y&&y[v]||{};d&&(b={min:0,max:0});const w=u?200:1e6,j=u?40:1e7,E={type:"inertia",velocity:r?a[v]:0,bounceStiffness:w,bounceDamping:j,timeConstant:750,restDelta:1,restSpeed:10,...f,...b};return this.startAxisValueAnimation(v,E)});return Promise.all(p).then(h)}startAxisValueAnimation(a,l){const r=this.getAxisMotionValue(a);return Rc(this.visualElement,a),r.start(of(a,r,0,l,this.visualElement,!1))}stopAnimation(){tn(a=>this.getAxisMotionValue(a).stop())}getAxisMotionValue(a){const l=`_drag${a.toUpperCase()}`,r=this.visualElement.getProps(),u=r[l];return u||this.visualElement.getValue(a,(r.initial?r.initial[a]:void 0)||0)}snapToCursor(a){tn(l=>{const{drag:r}=this.getProps();if(!ir(l,r,this.currentDirection))return;const{projection:u}=this.visualElement,f=this.getAxisMotionValue(l);if(u&&u.layout){const{min:d,max:h}=u.layout.layoutBox[l],y=f.get()||0;f.set(a[l]-ze(d,h,.5)+y)}})}scalePositionWithinConstraints(){if(!this.visualElement.current)return;const{drag:a,dragConstraints:l}=this.getProps(),{projection:r}=this.visualElement;if(!di(l)||!r||!this.constraints)return;this.stopAnimation();const u={x:0,y:0};tn(d=>{const h=this.getAxisMotionValue(d);if(h&&this.constraints!==!1){const y=h.get();u[d]=AT({min:y,max:y},this.constraints[d])}});const{transformTemplate:f}=this.visualElement.getProps();this.visualElement.current.style.transform=f?f({},""):"none",r.root&&r.root.updateScroll(),r.updateLayout(),this.constraints=!1,this.resolveConstraints(),tn(d=>{if(!ir(d,a,null))return;const h=this.getAxisMotionValue(d),{min:y,max:p}=this.constraints[d];h.set(ze(y,p,u[d]))}),this.visualElement.render()}addListeners(){if(!this.visualElement.current)return;NT.set(this.visualElement,this);const a=this.visualElement.current,l=Es(a,"pointerdown",p=>{const{drag:v,dragListener:b=!0}=this.getProps(),w=p.target,j=w!==a&&mS(w);v&&b&&!j&&this.start(p)});let r;const u=()=>{const{dragConstraints:p}=this.getProps();di(p)&&p.current&&(this.constraints=this.resolveRefConstraints(),r||(r=MT(a,p.current,()=>this.scalePositionWithinConstraints())))},{projection:f}=this.visualElement,d=f.addEventListener("measure",u);f&&!f.layout&&(f.root&&f.root.updateScroll(),f.updateLayout()),Ce.read(u);const h=Rs(window,"resize",()=>this.scalePositionWithinConstraints()),y=f.addEventListener("didUpdate",(({delta:p,hasLayoutChanged:v})=>{this.isDragging&&v&&(tn(b=>{const w=this.getAxisMotionValue(b);w&&(this.originPoint[b]+=p[b].translate,w.set(w.get()+p[b].translate))}),this.visualElement.render())}));return()=>{h(),l(),d(),y&&y(),r&&r()}}getProps(){const a=this.visualElement.getProps(),{drag:l=!1,dragDirectionLock:r=!1,dragPropagation:u=!1,dragConstraints:f=!1,dragElastic:d=Hc,dragMomentum:h=!0}=a;return{...a,drag:l,dragDirectionLock:r,dragPropagation:u,dragConstraints:f,dragElastic:d,dragMomentum:h}}}function Pg(i){let a=!0;return()=>{if(a){a=!1;return}i()}}function MT(i,a,l){const r=eg(i,Pg(l)),u=eg(a,Pg(l));return()=>{r(),u()}}function ir(i,a,l){return(a===!0||a===i)&&(l===null||l===i)}function CT(i,a=10){let l=null;return Math.abs(i.y)>a?l="y":Math.abs(i.x)>a&&(l="x"),l}class OT extends ea{constructor(a){super(a),this.removeGroupControls=Yt,this.removeListeners=Yt,this.controls=new DT(a)}mount(){const{dragControls:a}=this.node.getProps();a&&(this.removeGroupControls=a.subscribe(this.controls)),this.removeListeners=this.controls.addListeners()||Yt}update(){const{dragControls:a}=this.node.getProps(),{dragControls:l}=this.node.prevProps||{};a!==l&&(this.removeGroupControls(),a&&(this.removeGroupControls=a.subscribe(this.controls)))}unmount(){this.removeGroupControls(),this.removeListeners(),this.controls.isDragging||this.controls.endPanSession()}}const hc=i=>(a,l)=>{i&&Ce.update(()=>i(a,l),!1,!0)};class RT extends ea{constructor(){super(...arguments),this.removePointerDownListener=Yt}onPointerDown(a){this.session=new W0(a,this.createPanHandlers(),{transformPagePoint:this.node.getTransformPagePoint(),contextWindow:$0(this.node)})}createPanHandlers(){const{onPanSessionStart:a,onPanStart:l,onPan:r,onPanEnd:u}=this.node.getProps();return{onSessionStart:hc(a),onStart:hc(l),onMove:hc(r),onEnd:(f,d)=>{delete this.session,u&&Ce.postRender(()=>u(f,d))}}}mount(){this.removePointerDownListener=Es(this.node.current,"pointerdown",a=>this.onPointerDown(a))}update(){this.session&&this.session.updateHandlers(this.createPanHandlers())}unmount(){this.removePointerDownListener(),this.session&&this.session.end()}}let mc=!1;class LT extends te.Component{componentDidMount(){const{visualElement:a,layoutGroup:l,switchLayoutGroup:r,layoutId:u}=this.props,{projection:f}=a;f&&(l.group&&l.group.add(f),r&&r.register&&u&&r.register(f),mc&&f.root.didUpdate(),f.addEventListener("animationComplete",()=>{this.safeToRemove()}),f.setOptions({...f.options,layoutDependency:this.props.layoutDependency,onExitComplete:()=>this.safeToRemove()})),fr.hasEverUpdated=!0}getSnapshotBeforeUpdate(a){const{layoutDependency:l,visualElement:r,drag:u,isPresent:f}=this.props,{projection:d}=r;return d&&(d.isPresent=f,a.layoutDependency!==l&&d.setOptions({...d.options,layoutDependency:l}),mc=!0,u||a.layoutDependency!==l||l===void 0||a.isPresent!==f?d.willUpdate():this.safeToRemove(),a.isPresent!==f&&(f?d.promote():d.relegate()||Ce.postRender(()=>{const h=d.getStack();(!h||!h.members.length)&&this.safeToRemove()}))),null}componentDidUpdate(){const{projection:a}=this.props.visualElement;a&&(a.root.didUpdate(),df.postRender(()=>{!a.currentAnimation&&a.isLead()&&this.safeToRemove()}))}componentWillUnmount(){const{visualElement:a,layoutGroup:l,switchLayoutGroup:r}=this.props,{projection:u}=a;mc=!0,u&&(u.scheduleCheckAfterUnmount(),l&&l.group&&l.group.remove(u),r&&r.deregister&&r.deregister(u))}safeToRemove(){const{safeToRemove:a}=this.props;a&&a()}render(){return null}}function ev(i){const[a,l]=Hw(),r=te.useContext(gy);return m.jsx(LT,{...i,layoutGroup:r,switchLayoutGroup:te.useContext(Z0),isPresent:a,safeToRemove:l})}const _T={pan:{Feature:RT},drag:{Feature:OT,ProjectionNode:q0,MeasureLayout:ev}};function Fg(i,a,l){const{props:r}=i;i.animationState&&r.whileHover&&i.animationState.setActive("whileHover",l==="Start");const u="onHover"+l,f=r[u];f&&Ce.postRender(()=>f(a,ks(a)))}class zT extends ea{mount(){const{current:a}=this.node;a&&(this.unmount=cS(a,(l,r)=>(Fg(this.node,r,"Start"),u=>Fg(this.node,u,"End"))))}unmount(){}}class VT extends ea{constructor(){super(...arguments),this.isActive=!1}onFocus(){let a=!1;try{a=this.node.current.matches(":focus-visible")}catch{a=!0}!a||!this.node.animationState||(this.node.animationState.setActive("whileFocus",!0),this.isActive=!0)}onBlur(){!this.isActive||!this.node.animationState||(this.node.animationState.setActive("whileFocus",!1),this.isActive=!1)}mount(){this.unmount=_s(Rs(this.node.current,"focus",()=>this.onFocus()),Rs(this.node.current,"blur",()=>this.onBlur()))}unmount(){}}function Qg(i,a,l){const{props:r}=i;if(i.current instanceof HTMLButtonElement&&i.current.disabled)return;i.animationState&&r.whileTap&&i.animationState.setActive("whileTap",l==="Start");const u="onTap"+(l==="End"?"":l),f=r[u];f&&Ce.postRender(()=>f(a,ks(a)))}class kT extends ea{mount(){const{current:a}=this.node;if(!a)return;const{globalTapTarget:l,propagate:r}=this.node.props;this.unmount=gS(a,(u,f)=>(Qg(this.node,f,"Start"),(d,{success:h})=>Qg(this.node,d,h?"End":"Cancel")),{useGlobalTarget:l,stopPropagation:(r==null?void 0:r.tap)===!1})}unmount(){}}const qc=new WeakMap,pc=new WeakMap,UT=i=>{const a=qc.get(i.target);a&&a(i)},BT=i=>{i.forEach(UT)};function HT({root:i,...a}){const l=i||document;pc.has(l)||pc.set(l,{});const r=pc.get(l),u=JSON.stringify(a);return r[u]||(r[u]=new IntersectionObserver(BT,{root:i,...a})),r[u]}function qT(i,a,l){const r=HT(a);return qc.set(i,l),r.observe(i),()=>{qc.delete(i),r.unobserve(i)}}const GT={some:0,all:1};class YT extends ea{constructor(){super(...arguments),this.hasEnteredView=!1,this.isInView=!1}startObserver(){this.unmount();const{viewport:a={}}=this.node.getProps(),{root:l,margin:r,amount:u="some",once:f}=a,d={root:l?l.current:void 0,rootMargin:r,threshold:typeof u=="number"?u:GT[u]},h=y=>{const{isIntersecting:p}=y;if(this.isInView===p||(this.isInView=p,f&&!p&&this.hasEnteredView))return;p&&(this.hasEnteredView=!0),this.node.animationState&&this.node.animationState.setActive("whileInView",p);const{onViewportEnter:v,onViewportLeave:b}=this.node.getProps(),w=p?v:b;w&&w(y)};return qT(this.node.current,d,h)}mount(){this.startObserver()}update(){if(typeof IntersectionObserver>"u")return;const{props:a,prevProps:l}=this.node;["amount","margin","root"].some(KT(a,l))&&this.startObserver()}unmount(){}}function KT({viewport:i={}},{viewport:a={}}={}){return l=>i[l]!==a[l]}const XT={inView:{Feature:YT},tap:{Feature:kT},focus:{Feature:VT},hover:{Feature:zT}},PT={layout:{ProjectionNode:q0,MeasureLayout:ev}},FT={...gT,...XT,..._T,...PT},tv=fT(FT,dT);/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const QT=i=>i.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),ZT=i=>i.replace(/^([A-Z])|[\s-_]+(\w)/g,(a,l,r)=>r?r.toUpperCase():l.toLowerCase()),Zg=i=>{const a=ZT(i);return a.charAt(0).toUpperCase()+a.slice(1)},nv=(...i)=>i.filter((a,l,r)=>!!a&&a.trim()!==""&&r.indexOf(a)===l).join(" ").trim(),JT=i=>{for(const a in i)if(a.startsWith("aria-")||a==="role"||a==="title")return!0};/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */var $T={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const WT=te.forwardRef(({color:i="currentColor",size:a=24,strokeWidth:l=2,absoluteStrokeWidth:r,className:u="",children:f,iconNode:d,...h},y)=>te.createElement("svg",{ref:y,...$T,width:a,height:a,stroke:i,strokeWidth:r?Number(l)*24/Number(a):l,className:nv("lucide",u),...!f&&!JT(h)&&{"aria-hidden":"true"},...h},[...d.map(([p,v])=>te.createElement(p,v)),...Array.isArray(f)?f:[f]]));/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Se=(i,a)=>{const l=te.forwardRef(({className:r,...u},f)=>te.createElement(WT,{ref:f,iconNode:a,className:nv(`lucide-${QT(Zg(i))}`,`lucide-${i}`,r),...u}));return l.displayName=Zg(i),l};/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const IT=[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]],eA=Se("activity",IT);/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const tA=[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]],bi=Se("arrow-right",tA);/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const nA=[["path",{d:"M10 12h4",key:"a56b0p"}],["path",{d:"M10 8h4",key:"1sr2af"}],["path",{d:"M14 21v-3a2 2 0 0 0-4 0v3",key:"1rgiei"}],["path",{d:"M6 10H4a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-2",key:"secmi2"}],["path",{d:"M6 21V5a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v16",key:"16ra0t"}]],aA=Se("building-2",nA);/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const iA=[["path",{d:"M3 3v16a2 2 0 0 0 2 2h16",key:"c24i48"}],["path",{d:"M18 17V9",key:"2bz60n"}],["path",{d:"M13 17V5",key:"1frdt8"}],["path",{d:"M8 17v-3",key:"17ska0"}]],Sf=Se("chart-column",iA);/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const sA=[["path",{d:"M3 3v16a2 2 0 0 0 2 2h16",key:"c24i48"}],["path",{d:"m19 9-5 5-4-4-3 3",key:"2osh9i"}]],lA=Se("chart-line",sA);/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const rA=[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]],Jg=Se("check",rA);/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const oA=[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]],uA=Se("chevron-down",oA);/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const cA=[["path",{d:"M12 6v6l4 2",key:"mmk7yg"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]],fA=Se("clock",cA);/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const dA=[["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M17 20v2",key:"1rnc9c"}],["path",{d:"M17 2v2",key:"11trls"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M2 17h2",key:"7oei6x"}],["path",{d:"M2 7h2",key:"asdhe0"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"M20 17h2",key:"1fpfkl"}],["path",{d:"M20 7h2",key:"1o8tra"}],["path",{d:"M7 20v2",key:"4gnj0m"}],["path",{d:"M7 2v2",key:"1i4yhu"}],["rect",{x:"4",y:"4",width:"16",height:"16",rx:"2",key:"1vbyd7"}],["rect",{x:"8",y:"8",width:"8",height:"8",rx:"1",key:"z9xiuo"}]],av=Se("cpu",dA);/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const hA=[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5",key:"1wlel7"}],["path",{d:"M3 12A9 3 0 0 0 21 12",key:"mv7ke4"}]],mA=Se("database",hA);/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const pA=[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]],iv=Se("external-link",pA);/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const gA=[["path",{d:"M14 13h2a2 2 0 0 1 2 2v2a2 2 0 0 0 4 0v-6.998a2 2 0 0 0-.59-1.42L18 5",key:"1wtuz0"}],["path",{d:"M14 21V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v16",key:"e09ifn"}],["path",{d:"M2 21h13",key:"1x0fut"}],["path",{d:"M3 9h11",key:"1p7c0w"}]],yA=Se("fuel",gA);/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const vA=[["path",{d:"M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z",key:"sc7q7i"}]],xA=Se("funnel",vA);/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const bA=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20",key:"13o1zl"}],["path",{d:"M2 12h20",key:"9i4pu4"}]],br=Se("globe",bA);/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const SA=[["path",{d:"m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4",key:"g0fldk"}],["path",{d:"m21 2-9.6 9.6",key:"1j0ho8"}],["circle",{cx:"7.5",cy:"15.5",r:"5.5",key:"yqb3hr"}]],wA=Se("key",SA);/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const TA=[["path",{d:"M10 18v-7",key:"wt116b"}],["path",{d:"M11.12 2.198a2 2 0 0 1 1.76.006l7.866 3.847c.476.233.31.949-.22.949H3.474c-.53 0-.695-.716-.22-.949z",key:"1m329m"}],["path",{d:"M14 18v-7",key:"vav6t3"}],["path",{d:"M18 18v-7",key:"aexdmj"}],["path",{d:"M3 22h18",key:"8prr45"}],["path",{d:"M6 18v-7",key:"1ivflk"}]],AA=Se("landmark",TA);/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const EA=[["path",{d:"M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z",key:"zw3jo"}],["path",{d:"M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12",key:"1wduqc"}],["path",{d:"M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17",key:"kqbvx6"}]],sv=Se("layers",EA);/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const jA=[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2",key:"1w4ew1"}],["path",{d:"M7 11V7a5 5 0 0 1 10 0v4",key:"fwvmzm"}]],NA=Se("lock",jA);/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const DA=[["path",{d:"m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7",key:"132q7q"}],["rect",{x:"2",y:"4",width:"20",height:"16",rx:"2",key:"izxlao"}]],MA=Se("mail",DA);/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const CA=[["path",{d:"M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719",key:"1sd12s"}]],OA=Se("message-circle",CA);/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const RA=[["path",{d:"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z",key:"18887p"}]],LA=Se("message-square",RA);/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const _A=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M3 9h18",key:"1pudct"}]],lv=Se("panel-top",_A);/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const zA=[["path",{d:"M12 22v-5",key:"1ega77"}],["path",{d:"M9 8V2",key:"14iosj"}],["path",{d:"M15 8V2",key:"18g5xt"}],["path",{d:"M18 8v5a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V8Z",key:"osxo6l"}]],rv=Se("plug",zA);/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const VA=[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]],kA=Se("search",VA);/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const UA=[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",key:"1ffxy3"}],["path",{d:"m21.854 2.147-10.94 10.939",key:"12cjpa"}]],BA=Se("send",UA);/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const HA=[["rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2",key:"ngkwjq"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2",key:"iecqi9"}],["line",{x1:"6",x2:"6.01",y1:"6",y2:"6",key:"16zg32"}],["line",{x1:"6",x2:"6.01",y1:"18",y2:"18",key:"nzw8ys"}]],qA=Se("server",HA);/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const GA=[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"M12 8v4",key:"1got3b"}],["path",{d:"M12 16h.01",key:"1drbdi"}]],wf=Se("shield-alert",GA);/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const YA=[["path",{d:"M10 5H3",key:"1qgfaw"}],["path",{d:"M12 19H3",key:"yhmn1j"}],["path",{d:"M14 3v4",key:"1sua03"}],["path",{d:"M16 17v4",key:"1q0r14"}],["path",{d:"M21 12h-9",key:"1o4lsq"}],["path",{d:"M21 19h-5",key:"1rlt1p"}],["path",{d:"M21 5h-7",key:"1oszz2"}],["path",{d:"M8 10v4",key:"tgpxqk"}],["path",{d:"M8 12H3",key:"a7s4jb"}]],KA=Se("sliders-horizontal",YA);/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const XA=[["path",{d:"m10.065 12.493-6.18 1.318a.934.934 0 0 1-1.108-.702l-.537-2.15a1.07 1.07 0 0 1 .691-1.265l13.504-4.44",key:"k4qptu"}],["path",{d:"m13.56 11.747 4.332-.924",key:"19l80z"}],["path",{d:"m16 21-3.105-6.21",key:"7oh9d"}],["path",{d:"M16.485 5.94a2 2 0 0 1 1.455-2.425l1.09-.272a1 1 0 0 1 1.212.727l1.515 6.06a1 1 0 0 1-.727 1.213l-1.09.272a2 2 0 0 1-2.425-1.455z",key:"m7xp4m"}],["path",{d:"m6.158 8.633 1.114 4.456",key:"74o979"}],["path",{d:"m8 21 3.105-6.21",key:"1fvxut"}],["circle",{cx:"12",cy:"13",r:"2",key:"1c1ljs"}]],ov=Se("telescope",XA);/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const PA=[["path",{d:"M12 19h8",key:"baeox8"}],["path",{d:"m4 17 6-6-6-6",key:"1yngyt"}]],FA=Se("terminal",PA);/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const QA=[["path",{d:"M16 7h6v6",key:"box55l"}],["path",{d:"m22 7-8.5 8.5-5-5L2 17",key:"1t1m79"}]],uv=Se("trending-up",QA);/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const ZA=[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["path",{d:"M16 3.128a4 4 0 0 1 0 7.744",key:"16gr8j"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}]],JA=Se("users",ZA),$A="modulepreload",WA=function(i){return"/pro/"+i},$g={},Ze=function(a,l,r){let u=Promise.resolve();if(l&&l.length>0){let d=function(p){return Promise.all(p.map(v=>Promise.resolve(v).then(b=>({status:"fulfilled",value:b}),b=>({status:"rejected",reason:b}))))};document.getElementsByTagName("link");const h=document.querySelector("meta[property=csp-nonce]"),y=(h==null?void 0:h.nonce)||(h==null?void 0:h.getAttribute("nonce"));u=d(l.map(p=>{if(p=WA(p),p in $g)return;$g[p]=!0;const v=p.endsWith(".css"),b=v?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${p}"]${b}`))return;const w=document.createElement("link");if(w.rel=v?"stylesheet":$A,v||(w.as="script"),w.crossOrigin="",w.href=p,y&&w.setAttribute("nonce",y),document.head.appendChild(w),v)return new Promise((j,E)=>{w.addEventListener("load",j),w.addEventListener("error",()=>E(new Error(`Unable to preload CSS for ${p}`)))})}))}function f(d){const h=new Event("vite:preloadError",{cancelable:!0});if(h.payload=d,window.dispatchEvent(h),!h.defaultPrevented)throw d}return u.then(d=>{for(const h of d||[])h.status==="rejected"&&f(h.reason);return a().catch(f)})},se=i=>typeof i=="string",bs=()=>{let i,a;const l=new Promise((r,u)=>{i=r,a=u});return l.resolve=i,l.reject=a,l},Wg=i=>i==null?"":""+i,IA=(i,a,l)=>{i.forEach(r=>{a[r]&&(l[r]=a[r])})},e5=/###/g,Ig=i=>i&&i.indexOf("###")>-1?i.replace(e5,"."):i,ey=i=>!i||se(i),js=(i,a,l)=>{const r=se(a)?a.split("."):a;let u=0;for(;u{const{obj:r,k:u}=js(i,a,Object);if(r!==void 0||a.length===1){r[u]=l;return}let f=a[a.length-1],d=a.slice(0,a.length-1),h=js(i,d,Object);for(;h.obj===void 0&&d.length;)f=`${d[d.length-1]}.${f}`,d=d.slice(0,d.length-1),h=js(i,d,Object),h!=null&&h.obj&&typeof h.obj[`${h.k}.${f}`]<"u"&&(h.obj=void 0);h.obj[`${h.k}.${f}`]=l},t5=(i,a,l,r)=>{const{obj:u,k:f}=js(i,a,Object);u[f]=u[f]||[],u[f].push(l)},Sr=(i,a)=>{const{obj:l,k:r}=js(i,a);if(l&&Object.prototype.hasOwnProperty.call(l,r))return l[r]},n5=(i,a,l)=>{const r=Sr(i,l);return r!==void 0?r:Sr(a,l)},cv=(i,a,l)=>{for(const r in a)r!=="__proto__"&&r!=="constructor"&&(r in i?se(i[r])||i[r]instanceof String||se(a[r])||a[r]instanceof String?l&&(i[r]=a[r]):cv(i[r],a[r],l):i[r]=a[r]);return i},Sa=i=>i.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&");var a5={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};const i5=i=>se(i)?i.replace(/[&<>"'\/]/g,a=>a5[a]):i;class s5{constructor(a){this.capacity=a,this.regExpMap=new Map,this.regExpQueue=[]}getRegExp(a){const l=this.regExpMap.get(a);if(l!==void 0)return l;const r=new RegExp(a);return this.regExpQueue.length===this.capacity&&this.regExpMap.delete(this.regExpQueue.shift()),this.regExpMap.set(a,r),this.regExpQueue.push(a),r}}const l5=[" ",",","?","!",";"],r5=new s5(20),o5=(i,a,l)=>{a=a||"",l=l||"";const r=l5.filter(d=>a.indexOf(d)<0&&l.indexOf(d)<0);if(r.length===0)return!0;const u=r5.getRegExp(`(${r.map(d=>d==="?"?"\\?":d).join("|")})`);let f=!u.test(i);if(!f){const d=i.indexOf(l);d>0&&!u.test(i.substring(0,d))&&(f=!0)}return f},Gc=(i,a,l=".")=>{if(!i)return;if(i[a])return Object.prototype.hasOwnProperty.call(i,a)?i[a]:void 0;const r=a.split(l);let u=i;for(let f=0;f-1&&yi==null?void 0:i.replace(/_/g,"-"),u5={type:"logger",log(i){this.output("log",i)},warn(i){this.output("warn",i)},error(i){this.output("error",i)},output(i,a){var l,r;(r=(l=console==null?void 0:console[i])==null?void 0:l.apply)==null||r.call(l,console,a)}};class wr{constructor(a,l={}){this.init(a,l)}init(a,l={}){this.prefix=l.prefix||"i18next:",this.logger=a||u5,this.options=l,this.debug=l.debug}log(...a){return this.forward(a,"log","",!0)}warn(...a){return this.forward(a,"warn","",!0)}error(...a){return this.forward(a,"error","")}deprecate(...a){return this.forward(a,"warn","WARNING DEPRECATED: ",!0)}forward(a,l,r,u){return u&&!this.debug?null:(se(a[0])&&(a[0]=`${r}${this.prefix} ${a[0]}`),this.logger[l](a))}create(a){return new wr(this.logger,{prefix:`${this.prefix}:${a}:`,...this.options})}clone(a){return a=a||this.options,a.prefix=a.prefix||this.prefix,new wr(this.logger,a)}}var nn=new wr;class Nr{constructor(){this.observers={}}on(a,l){return a.split(" ").forEach(r=>{this.observers[r]||(this.observers[r]=new Map);const u=this.observers[r].get(l)||0;this.observers[r].set(l,u+1)}),this}off(a,l){if(this.observers[a]){if(!l){delete this.observers[a];return}this.observers[a].delete(l)}}emit(a,...l){this.observers[a]&&Array.from(this.observers[a].entries()).forEach(([u,f])=>{for(let d=0;d{for(let d=0;d-1&&this.options.ns.splice(l,1)}getResource(a,l,r,u={}){var p,v;const f=u.keySeparator!==void 0?u.keySeparator:this.options.keySeparator,d=u.ignoreJSONStructure!==void 0?u.ignoreJSONStructure:this.options.ignoreJSONStructure;let h;a.indexOf(".")>-1?h=a.split("."):(h=[a,l],r&&(Array.isArray(r)?h.push(...r):se(r)&&f?h.push(...r.split(f)):h.push(r)));const y=Sr(this.data,h);return!y&&!l&&!r&&a.indexOf(".")>-1&&(a=h[0],l=h[1],r=h.slice(2).join(".")),y||!d||!se(r)?y:Gc((v=(p=this.data)==null?void 0:p[a])==null?void 0:v[l],r,f)}addResource(a,l,r,u,f={silent:!1}){const d=f.keySeparator!==void 0?f.keySeparator:this.options.keySeparator;let h=[a,l];r&&(h=h.concat(d?r.split(d):r)),a.indexOf(".")>-1&&(h=a.split("."),u=l,l=h[1]),this.addNamespaces(l),ty(this.data,h,u),f.silent||this.emit("added",a,l,r,u)}addResources(a,l,r,u={silent:!1}){for(const f in r)(se(r[f])||Array.isArray(r[f]))&&this.addResource(a,l,f,r[f],{silent:!0});u.silent||this.emit("added",a,l,r)}addResourceBundle(a,l,r,u,f,d={silent:!1,skipCopy:!1}){let h=[a,l];a.indexOf(".")>-1&&(h=a.split("."),u=r,r=l,l=h[1]),this.addNamespaces(l);let y=Sr(this.data,h)||{};d.skipCopy||(r=JSON.parse(JSON.stringify(r))),u?cv(y,r,f):y={...y,...r},ty(this.data,h,y),d.silent||this.emit("added",a,l,r)}removeResourceBundle(a,l){this.hasResourceBundle(a,l)&&delete this.data[a][l],this.removeNamespaces(l),this.emit("removed",a,l)}hasResourceBundle(a,l){return this.getResource(a,l)!==void 0}getResourceBundle(a,l){return l||(l=this.options.defaultNS),this.getResource(a,l)}getDataByLanguage(a){return this.data[a]}hasLanguageSomeTranslations(a){const l=this.getDataByLanguage(a);return!!(l&&Object.keys(l)||[]).find(u=>l[u]&&Object.keys(l[u]).length>0)}toJSON(){return this.data}}var fv={processors:{},addPostProcessor(i){this.processors[i.name]=i},handle(i,a,l,r,u){return i.forEach(f=>{var d;a=((d=this.processors[f])==null?void 0:d.process(a,l,r,u))??a}),a}};const dv=Symbol("i18next/PATH_KEY");function c5(){const i=[],a=Object.create(null);let l;return a.get=(r,u)=>{var f;return(f=l==null?void 0:l.revoke)==null||f.call(l),u===dv?i:(i.push(u),l=Proxy.revocable(r,a),l.proxy)},Proxy.revocable(Object.create(null),a).proxy}function Yc(i,a){const{[dv]:l}=i(c5());return l.join((a==null?void 0:a.keySeparator)??".")}const ay={},gc=i=>!se(i)&&typeof i!="boolean"&&typeof i!="number";class Tr extends Nr{constructor(a,l={}){super(),IA(["resourceStore","languageUtils","pluralResolver","interpolator","backendConnector","i18nFormat","utils"],a,this),this.options=l,this.options.keySeparator===void 0&&(this.options.keySeparator="."),this.logger=nn.create("translator")}changeLanguage(a){a&&(this.language=a)}exists(a,l={interpolation:{}}){const r={...l};if(a==null)return!1;const u=this.resolve(a,r);if((u==null?void 0:u.res)===void 0)return!1;const f=gc(u.res);return!(r.returnObjects===!1&&f)}extractFromKey(a,l){let r=l.nsSeparator!==void 0?l.nsSeparator:this.options.nsSeparator;r===void 0&&(r=":");const u=l.keySeparator!==void 0?l.keySeparator:this.options.keySeparator;let f=l.ns||this.options.defaultNS||[];const d=r&&a.indexOf(r)>-1,h=!this.options.userDefinedKeySeparator&&!l.keySeparator&&!this.options.userDefinedNsSeparator&&!l.nsSeparator&&!o5(a,r,u);if(d&&!h){const y=a.match(this.interpolator.nestingRegexp);if(y&&y.length>0)return{key:a,namespaces:se(f)?[f]:f};const p=a.split(r);(r!==u||r===u&&this.options.ns.indexOf(p[0])>-1)&&(f=p.shift()),a=p.join(u)}return{key:a,namespaces:se(f)?[f]:f}}translate(a,l,r){let u=typeof l=="object"?{...l}:l;if(typeof u!="object"&&this.options.overloadTranslationOptionHandler&&(u=this.options.overloadTranslationOptionHandler(arguments)),typeof u=="object"&&(u={...u}),u||(u={}),a==null)return"";typeof a=="function"&&(a=Yc(a,{...this.options,...u})),Array.isArray(a)||(a=[String(a)]);const f=u.returnDetails!==void 0?u.returnDetails:this.options.returnDetails,d=u.keySeparator!==void 0?u.keySeparator:this.options.keySeparator,{key:h,namespaces:y}=this.extractFromKey(a[a.length-1],u),p=y[y.length-1];let v=u.nsSeparator!==void 0?u.nsSeparator:this.options.nsSeparator;v===void 0&&(v=":");const b=u.lng||this.language,w=u.appendNamespaceToCIMode||this.options.appendNamespaceToCIMode;if((b==null?void 0:b.toLowerCase())==="cimode")return w?f?{res:`${p}${v}${h}`,usedKey:h,exactUsedKey:h,usedLng:b,usedNS:p,usedParams:this.getUsedParamsDetails(u)}:`${p}${v}${h}`:f?{res:h,usedKey:h,exactUsedKey:h,usedLng:b,usedNS:p,usedParams:this.getUsedParamsDetails(u)}:h;const j=this.resolve(a,u);let E=j==null?void 0:j.res;const V=(j==null?void 0:j.usedKey)||h,B=(j==null?void 0:j.exactUsedKey)||h,q=["[object Number]","[object Function]","[object RegExp]"],Y=u.joinArrays!==void 0?u.joinArrays:this.options.joinArrays,H=!this.i18nFormat||this.i18nFormat.handleAsObject,X=u.count!==void 0&&!se(u.count),P=Tr.hasDefaultValue(u),ae=X?this.pluralResolver.getSuffix(b,u.count,u):"",Q=u.ordinal&&X?this.pluralResolver.getSuffix(b,u.count,{ordinal:!1}):"",I=X&&!u.ordinal&&u.count===0,ce=I&&u[`defaultValue${this.options.pluralSeparator}zero`]||u[`defaultValue${ae}`]||u[`defaultValue${Q}`]||u.defaultValue;let ye=E;H&&!E&&P&&(ye=ce);const ot=gc(ye),Ve=Object.prototype.toString.apply(ye);if(H&&ye&&ot&&q.indexOf(Ve)<0&&!(se(Y)&&Array.isArray(ye))){if(!u.returnObjects&&!this.options.returnObjects){this.options.returnedObjectHandler||this.logger.warn("accessing an object - but returnObjects options is not enabled!");const He=this.options.returnedObjectHandler?this.options.returnedObjectHandler(V,ye,{...u,ns:y}):`key '${h} (${this.language})' returned an object instead of string.`;return f?(j.res=He,j.usedParams=this.getUsedParamsDetails(u),j):He}if(d){const He=Array.isArray(ye),_e=He?[]:{},tt=He?B:V;for(const L in ye)if(Object.prototype.hasOwnProperty.call(ye,L)){const G=`${tt}${d}${L}`;P&&!E?_e[L]=this.translate(G,{...u,defaultValue:gc(ce)?ce[L]:void 0,joinArrays:!1,ns:y}):_e[L]=this.translate(G,{...u,joinArrays:!1,ns:y}),_e[L]===G&&(_e[L]=ye[L])}E=_e}}else if(H&&se(Y)&&Array.isArray(E))E=E.join(Y),E&&(E=this.extendTranslation(E,a,u,r));else{let He=!1,_e=!1;!this.isValidLookup(E)&&P&&(He=!0,E=ce),this.isValidLookup(E)||(_e=!0,E=h);const L=(u.missingKeyNoValueFallbackToKey||this.options.missingKeyNoValueFallbackToKey)&&_e?void 0:E,G=P&&ce!==E&&this.options.updateMissing;if(_e||He||G){if(this.logger.log(G?"updateKey":"missingKey",b,p,h,G?ce:E),d){const A=this.resolve(h,{...u,keySeparator:!1});A&&A.res&&this.logger.warn("Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.")}let F=[];const ie=this.languageUtils.getFallbackCodes(this.options.fallbackLng,u.lng||this.language);if(this.options.saveMissingTo==="fallback"&&ie&&ie[0])for(let A=0;A{var le;const Z=P&&K!==E?K:L;this.options.missingKeyHandler?this.options.missingKeyHandler(A,p,z,Z,G,u):(le=this.backendConnector)!=null&&le.saveMissing&&this.backendConnector.saveMissing(A,p,z,Z,G,u),this.emit("missingKey",A,p,z,E)};this.options.saveMissing&&(this.options.saveMissingPlurals&&X?F.forEach(A=>{const z=this.pluralResolver.getSuffixes(A,u);I&&u[`defaultValue${this.options.pluralSeparator}zero`]&&z.indexOf(`${this.options.pluralSeparator}zero`)<0&&z.push(`${this.options.pluralSeparator}zero`),z.forEach(K=>{fe([A],h+K,u[`defaultValue${K}`]||ce)})}):fe(F,h,ce))}E=this.extendTranslation(E,a,u,j,r),_e&&E===h&&this.options.appendNamespaceToMissingKey&&(E=`${p}${v}${h}`),(_e||He)&&this.options.parseMissingKeyHandler&&(E=this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey?`${p}${v}${h}`:h,He?E:void 0,u))}return f?(j.res=E,j.usedParams=this.getUsedParamsDetails(u),j):E}extendTranslation(a,l,r,u,f){var y,p;if((y=this.i18nFormat)!=null&&y.parse)a=this.i18nFormat.parse(a,{...this.options.interpolation.defaultVariables,...r},r.lng||this.language||u.usedLng,u.usedNS,u.usedKey,{resolved:u});else if(!r.skipInterpolation){r.interpolation&&this.interpolator.init({...r,interpolation:{...this.options.interpolation,...r.interpolation}});const v=se(a)&&(((p=r==null?void 0:r.interpolation)==null?void 0:p.skipOnVariables)!==void 0?r.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables);let b;if(v){const j=a.match(this.interpolator.nestingRegexp);b=j&&j.length}let w=r.replace&&!se(r.replace)?r.replace:r;if(this.options.interpolation.defaultVariables&&(w={...this.options.interpolation.defaultVariables,...w}),a=this.interpolator.interpolate(a,w,r.lng||this.language||u.usedLng,r),v){const j=a.match(this.interpolator.nestingRegexp),E=j&&j.length;b(f==null?void 0:f[0])===j[0]&&!r.context?(this.logger.warn(`It seems you are nesting recursively key: ${j[0]} in key: ${l[0]}`),null):this.translate(...j,l),r)),r.interpolation&&this.interpolator.reset()}const d=r.postProcess||this.options.postProcess,h=se(d)?[d]:d;return a!=null&&(h!=null&&h.length)&&r.applyPostProcessor!==!1&&(a=fv.handle(h,a,l,this.options&&this.options.postProcessPassResolved?{i18nResolved:{...u,usedParams:this.getUsedParamsDetails(r)},...r}:r,this)),a}resolve(a,l={}){let r,u,f,d,h;return se(a)&&(a=[a]),a.forEach(y=>{if(this.isValidLookup(r))return;const p=this.extractFromKey(y,l),v=p.key;u=v;let b=p.namespaces;this.options.fallbackNS&&(b=b.concat(this.options.fallbackNS));const w=l.count!==void 0&&!se(l.count),j=w&&!l.ordinal&&l.count===0,E=l.context!==void 0&&(se(l.context)||typeof l.context=="number")&&l.context!=="",V=l.lngs?l.lngs:this.languageUtils.toResolveHierarchy(l.lng||this.language,l.fallbackLng);b.forEach(B=>{var q,Y;this.isValidLookup(r)||(h=B,!ay[`${V[0]}-${B}`]&&((q=this.utils)!=null&&q.hasLoadedNamespace)&&!((Y=this.utils)!=null&&Y.hasLoadedNamespace(h))&&(ay[`${V[0]}-${B}`]=!0,this.logger.warn(`key "${u}" for languages "${V.join(", ")}" won't get resolved as namespace "${h}" was not yet loaded`,"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!")),V.forEach(H=>{var ae;if(this.isValidLookup(r))return;d=H;const X=[v];if((ae=this.i18nFormat)!=null&&ae.addLookupKeys)this.i18nFormat.addLookupKeys(X,v,H,B,l);else{let Q;w&&(Q=this.pluralResolver.getSuffix(H,l.count,l));const I=`${this.options.pluralSeparator}zero`,ce=`${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;if(w&&(l.ordinal&&Q.indexOf(ce)===0&&X.push(v+Q.replace(ce,this.options.pluralSeparator)),X.push(v+Q),j&&X.push(v+I)),E){const ye=`${v}${this.options.contextSeparator||"_"}${l.context}`;X.push(ye),w&&(l.ordinal&&Q.indexOf(ce)===0&&X.push(ye+Q.replace(ce,this.options.pluralSeparator)),X.push(ye+Q),j&&X.push(ye+I))}}let P;for(;P=X.pop();)this.isValidLookup(r)||(f=P,r=this.getResource(H,B,P,l))}))})}),{res:r,usedKey:u,exactUsedKey:f,usedLng:d,usedNS:h}}isValidLookup(a){return a!==void 0&&!(!this.options.returnNull&&a===null)&&!(!this.options.returnEmptyString&&a==="")}getResource(a,l,r,u={}){var f;return(f=this.i18nFormat)!=null&&f.getResource?this.i18nFormat.getResource(a,l,r,u):this.resourceStore.getResource(a,l,r,u)}getUsedParamsDetails(a={}){const l=["defaultValue","ordinal","context","replace","lng","lngs","fallbackLng","ns","keySeparator","nsSeparator","returnObjects","returnDetails","joinArrays","postProcess","interpolation"],r=a.replace&&!se(a.replace);let u=r?a.replace:a;if(r&&typeof a.count<"u"&&(u.count=a.count),this.options.interpolation.defaultVariables&&(u={...this.options.interpolation.defaultVariables,...u}),!r){u={...u};for(const f of l)delete u[f]}return u}static hasDefaultValue(a){const l="defaultValue";for(const r in a)if(Object.prototype.hasOwnProperty.call(a,r)&&l===r.substring(0,l.length)&&a[r]!==void 0)return!0;return!1}}class iy{constructor(a){this.options=a,this.supportedLngs=this.options.supportedLngs||!1,this.logger=nn.create("languageUtils")}getScriptPartFromCode(a){if(a=Ls(a),!a||a.indexOf("-")<0)return null;const l=a.split("-");return l.length===2||(l.pop(),l[l.length-1].toLowerCase()==="x")?null:this.formatLanguageCode(l.join("-"))}getLanguagePartFromCode(a){if(a=Ls(a),!a||a.indexOf("-")<0)return a;const l=a.split("-");return this.formatLanguageCode(l[0])}formatLanguageCode(a){if(se(a)&&a.indexOf("-")>-1){let l;try{l=Intl.getCanonicalLocales(a)[0]}catch{}return l&&this.options.lowerCaseLng&&(l=l.toLowerCase()),l||(this.options.lowerCaseLng?a.toLowerCase():a)}return this.options.cleanCode||this.options.lowerCaseLng?a.toLowerCase():a}isSupportedCode(a){return(this.options.load==="languageOnly"||this.options.nonExplicitSupportedLngs)&&(a=this.getLanguagePartFromCode(a)),!this.supportedLngs||!this.supportedLngs.length||this.supportedLngs.indexOf(a)>-1}getBestMatchFromCodes(a){if(!a)return null;let l;return a.forEach(r=>{if(l)return;const u=this.formatLanguageCode(r);(!this.options.supportedLngs||this.isSupportedCode(u))&&(l=u)}),!l&&this.options.supportedLngs&&a.forEach(r=>{if(l)return;const u=this.getScriptPartFromCode(r);if(this.isSupportedCode(u))return l=u;const f=this.getLanguagePartFromCode(r);if(this.isSupportedCode(f))return l=f;l=this.options.supportedLngs.find(d=>{if(d===f)return d;if(!(d.indexOf("-")<0&&f.indexOf("-")<0)&&(d.indexOf("-")>0&&f.indexOf("-")<0&&d.substring(0,d.indexOf("-"))===f||d.indexOf(f)===0&&f.length>1))return d})}),l||(l=this.getFallbackCodes(this.options.fallbackLng)[0]),l}getFallbackCodes(a,l){if(!a)return[];if(typeof a=="function"&&(a=a(l)),se(a)&&(a=[a]),Array.isArray(a))return a;if(!l)return a.default||[];let r=a[l];return r||(r=a[this.getScriptPartFromCode(l)]),r||(r=a[this.formatLanguageCode(l)]),r||(r=a[this.getLanguagePartFromCode(l)]),r||(r=a.default),r||[]}toResolveHierarchy(a,l){const r=this.getFallbackCodes((l===!1?[]:l)||this.options.fallbackLng||[],a),u=[],f=d=>{d&&(this.isSupportedCode(d)?u.push(d):this.logger.warn(`rejecting language code not found in supportedLngs: ${d}`))};return se(a)&&(a.indexOf("-")>-1||a.indexOf("_")>-1)?(this.options.load!=="languageOnly"&&f(this.formatLanguageCode(a)),this.options.load!=="languageOnly"&&this.options.load!=="currentOnly"&&f(this.getScriptPartFromCode(a)),this.options.load!=="currentOnly"&&f(this.getLanguagePartFromCode(a))):se(a)&&f(this.formatLanguageCode(a)),r.forEach(d=>{u.indexOf(d)<0&&f(this.formatLanguageCode(d))}),u}}const sy={zero:0,one:1,two:2,few:3,many:4,other:5},ly={select:i=>i===1?"one":"other",resolvedOptions:()=>({pluralCategories:["one","other"]})};class f5{constructor(a,l={}){this.languageUtils=a,this.options=l,this.logger=nn.create("pluralResolver"),this.pluralRulesCache={}}clearCache(){this.pluralRulesCache={}}getRule(a,l={}){const r=Ls(a==="dev"?"en":a),u=l.ordinal?"ordinal":"cardinal",f=JSON.stringify({cleanedCode:r,type:u});if(f in this.pluralRulesCache)return this.pluralRulesCache[f];let d;try{d=new Intl.PluralRules(r,{type:u})}catch{if(typeof Intl>"u")return this.logger.error("No Intl support, please use an Intl polyfill!"),ly;if(!a.match(/-|_/))return ly;const y=this.languageUtils.getLanguagePartFromCode(a);d=this.getRule(y,l)}return this.pluralRulesCache[f]=d,d}needsPlural(a,l={}){let r=this.getRule(a,l);return r||(r=this.getRule("dev",l)),(r==null?void 0:r.resolvedOptions().pluralCategories.length)>1}getPluralFormsOfKey(a,l,r={}){return this.getSuffixes(a,r).map(u=>`${l}${u}`)}getSuffixes(a,l={}){let r=this.getRule(a,l);return r||(r=this.getRule("dev",l)),r?r.resolvedOptions().pluralCategories.sort((u,f)=>sy[u]-sy[f]).map(u=>`${this.options.prepend}${l.ordinal?`ordinal${this.options.prepend}`:""}${u}`):[]}getSuffix(a,l,r={}){const u=this.getRule(a,r);return u?`${this.options.prepend}${r.ordinal?`ordinal${this.options.prepend}`:""}${u.select(l)}`:(this.logger.warn(`no plural rule found for: ${a}`),this.getSuffix("dev",l,r))}}const ry=(i,a,l,r=".",u=!0)=>{let f=n5(i,a,l);return!f&&u&&se(l)&&(f=Gc(i,l,r),f===void 0&&(f=Gc(a,l,r))),f},yc=i=>i.replace(/\$/g,"$$$$");class oy{constructor(a={}){var l;this.logger=nn.create("interpolator"),this.options=a,this.format=((l=a==null?void 0:a.interpolation)==null?void 0:l.format)||(r=>r),this.init(a)}init(a={}){a.interpolation||(a.interpolation={escapeValue:!0});const{escape:l,escapeValue:r,useRawValueToEscape:u,prefix:f,prefixEscaped:d,suffix:h,suffixEscaped:y,formatSeparator:p,unescapeSuffix:v,unescapePrefix:b,nestingPrefix:w,nestingPrefixEscaped:j,nestingSuffix:E,nestingSuffixEscaped:V,nestingOptionsSeparator:B,maxReplaces:q,alwaysFormat:Y}=a.interpolation;this.escape=l!==void 0?l:i5,this.escapeValue=r!==void 0?r:!0,this.useRawValueToEscape=u!==void 0?u:!1,this.prefix=f?Sa(f):d||"{{",this.suffix=h?Sa(h):y||"}}",this.formatSeparator=p||",",this.unescapePrefix=v?"":b||"-",this.unescapeSuffix=this.unescapePrefix?"":v||"",this.nestingPrefix=w?Sa(w):j||Sa("$t("),this.nestingSuffix=E?Sa(E):V||Sa(")"),this.nestingOptionsSeparator=B||",",this.maxReplaces=q||1e3,this.alwaysFormat=Y!==void 0?Y:!1,this.resetRegExp()}reset(){this.options&&this.init(this.options)}resetRegExp(){const a=(l,r)=>(l==null?void 0:l.source)===r?(l.lastIndex=0,l):new RegExp(r,"g");this.regexp=a(this.regexp,`${this.prefix}(.+?)${this.suffix}`),this.regexpUnescape=a(this.regexpUnescape,`${this.prefix}${this.unescapePrefix}(.+?)${this.unescapeSuffix}${this.suffix}`),this.nestingRegexp=a(this.nestingRegexp,`${this.nestingPrefix}((?:[^()"']+|"[^"]*"|'[^']*'|\\((?:[^()]|"[^"]*"|'[^']*')*\\))*?)${this.nestingSuffix}`)}interpolate(a,l,r,u){var j;let f,d,h;const y=this.options&&this.options.interpolation&&this.options.interpolation.defaultVariables||{},p=E=>{if(E.indexOf(this.formatSeparator)<0){const Y=ry(l,y,E,this.options.keySeparator,this.options.ignoreJSONStructure);return this.alwaysFormat?this.format(Y,void 0,r,{...u,...l,interpolationkey:E}):Y}const V=E.split(this.formatSeparator),B=V.shift().trim(),q=V.join(this.formatSeparator).trim();return this.format(ry(l,y,B,this.options.keySeparator,this.options.ignoreJSONStructure),q,r,{...u,...l,interpolationkey:B})};this.resetRegExp();const v=(u==null?void 0:u.missingInterpolationHandler)||this.options.missingInterpolationHandler,b=((j=u==null?void 0:u.interpolation)==null?void 0:j.skipOnVariables)!==void 0?u.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables;return[{regex:this.regexpUnescape,safeValue:E=>yc(E)},{regex:this.regexp,safeValue:E=>this.escapeValue?yc(this.escape(E)):yc(E)}].forEach(E=>{for(h=0;f=E.regex.exec(a);){const V=f[1].trim();if(d=p(V),d===void 0)if(typeof v=="function"){const q=v(a,f,u);d=se(q)?q:""}else if(u&&Object.prototype.hasOwnProperty.call(u,V))d="";else if(b){d=f[0];continue}else this.logger.warn(`missed to pass in variable ${V} for interpolating ${a}`),d="";else!se(d)&&!this.useRawValueToEscape&&(d=Wg(d));const B=E.safeValue(d);if(a=a.replace(f[0],B),b?(E.regex.lastIndex+=d.length,E.regex.lastIndex-=f[0].length):E.regex.lastIndex=0,h++,h>=this.maxReplaces)break}}),a}nest(a,l,r={}){let u,f,d;const h=(y,p)=>{const v=this.nestingOptionsSeparator;if(y.indexOf(v)<0)return y;const b=y.split(new RegExp(`${Sa(v)}[ ]*{`));let w=`{${b[1]}`;y=b[0],w=this.interpolate(w,d);const j=w.match(/'/g),E=w.match(/"/g);(((j==null?void 0:j.length)??0)%2===0&&!E||((E==null?void 0:E.length)??0)%2!==0)&&(w=w.replace(/'/g,'"'));try{d=JSON.parse(w),p&&(d={...p,...d})}catch(V){return this.logger.warn(`failed parsing options string in nesting for key ${y}`,V),`${y}${v}${w}`}return d.defaultValue&&d.defaultValue.indexOf(this.prefix)>-1&&delete d.defaultValue,y};for(;u=this.nestingRegexp.exec(a);){let y=[];d={...r},d=d.replace&&!se(d.replace)?d.replace:d,d.applyPostProcessor=!1,delete d.defaultValue;const p=/{.*}/.test(u[1])?u[1].lastIndexOf("}")+1:u[1].indexOf(this.formatSeparator);if(p!==-1&&(y=u[1].slice(p).split(this.formatSeparator).map(v=>v.trim()).filter(Boolean),u[1]=u[1].slice(0,p)),f=l(h.call(this,u[1].trim(),d),d),f&&u[0]===a&&!se(f))return f;se(f)||(f=Wg(f)),f||(this.logger.warn(`missed to resolve ${u[1]} for nesting ${a}`),f=""),y.length&&(f=y.reduce((v,b)=>this.format(v,b,r.lng,{...r,interpolationkey:u[1].trim()}),f.trim())),a=a.replace(u[0],f),this.regexp.lastIndex=0}return a}}const d5=i=>{let a=i.toLowerCase().trim();const l={};if(i.indexOf("(")>-1){const r=i.split("(");a=r[0].toLowerCase().trim();const u=r[1].substring(0,r[1].length-1);a==="currency"&&u.indexOf(":")<0?l.currency||(l.currency=u.trim()):a==="relativetime"&&u.indexOf(":")<0?l.range||(l.range=u.trim()):u.split(";").forEach(d=>{if(d){const[h,...y]=d.split(":"),p=y.join(":").trim().replace(/^'+|'+$/g,""),v=h.trim();l[v]||(l[v]=p),p==="false"&&(l[v]=!1),p==="true"&&(l[v]=!0),isNaN(p)||(l[v]=parseInt(p,10))}})}return{formatName:a,formatOptions:l}},uy=i=>{const a={};return(l,r,u)=>{let f=u;u&&u.interpolationkey&&u.formatParams&&u.formatParams[u.interpolationkey]&&u[u.interpolationkey]&&(f={...f,[u.interpolationkey]:void 0});const d=r+JSON.stringify(f);let h=a[d];return h||(h=i(Ls(r),u),a[d]=h),h(l)}},h5=i=>(a,l,r)=>i(Ls(l),r)(a);class m5{constructor(a={}){this.logger=nn.create("formatter"),this.options=a,this.init(a)}init(a,l={interpolation:{}}){this.formatSeparator=l.interpolation.formatSeparator||",";const r=l.cacheInBuiltFormats?uy:h5;this.formats={number:r((u,f)=>{const d=new Intl.NumberFormat(u,{...f});return h=>d.format(h)}),currency:r((u,f)=>{const d=new Intl.NumberFormat(u,{...f,style:"currency"});return h=>d.format(h)}),datetime:r((u,f)=>{const d=new Intl.DateTimeFormat(u,{...f});return h=>d.format(h)}),relativetime:r((u,f)=>{const d=new Intl.RelativeTimeFormat(u,{...f});return h=>d.format(h,f.range||"day")}),list:r((u,f)=>{const d=new Intl.ListFormat(u,{...f});return h=>d.format(h)})}}add(a,l){this.formats[a.toLowerCase().trim()]=l}addCached(a,l){this.formats[a.toLowerCase().trim()]=uy(l)}format(a,l,r,u={}){const f=l.split(this.formatSeparator);if(f.length>1&&f[0].indexOf("(")>1&&f[0].indexOf(")")<0&&f.find(h=>h.indexOf(")")>-1)){const h=f.findIndex(y=>y.indexOf(")")>-1);f[0]=[f[0],...f.splice(1,h)].join(this.formatSeparator)}return f.reduce((h,y)=>{var b;const{formatName:p,formatOptions:v}=d5(y);if(this.formats[p]){let w=h;try{const j=((b=u==null?void 0:u.formatParams)==null?void 0:b[u.interpolationkey])||{},E=j.locale||j.lng||u.locale||u.lng||r;w=this.formats[p](h,E,{...v,...u,...j})}catch(j){this.logger.warn(j)}return w}else this.logger.warn(`there was no format function for ${p}`);return h},a)}}const p5=(i,a)=>{i.pending[a]!==void 0&&(delete i.pending[a],i.pendingCount--)};class g5 extends Nr{constructor(a,l,r,u={}){var f,d;super(),this.backend=a,this.store=l,this.services=r,this.languageUtils=r.languageUtils,this.options=u,this.logger=nn.create("backendConnector"),this.waitingReads=[],this.maxParallelReads=u.maxParallelReads||10,this.readingCalls=0,this.maxRetries=u.maxRetries>=0?u.maxRetries:5,this.retryTimeout=u.retryTimeout>=1?u.retryTimeout:350,this.state={},this.queue=[],(d=(f=this.backend)==null?void 0:f.init)==null||d.call(f,r,u.backend,u)}queueLoad(a,l,r,u){const f={},d={},h={},y={};return a.forEach(p=>{let v=!0;l.forEach(b=>{const w=`${p}|${b}`;!r.reload&&this.store.hasResourceBundle(p,b)?this.state[w]=2:this.state[w]<0||(this.state[w]===1?d[w]===void 0&&(d[w]=!0):(this.state[w]=1,v=!1,d[w]===void 0&&(d[w]=!0),f[w]===void 0&&(f[w]=!0),y[b]===void 0&&(y[b]=!0)))}),v||(h[p]=!0)}),(Object.keys(f).length||Object.keys(d).length)&&this.queue.push({pending:d,pendingCount:Object.keys(d).length,loaded:{},errors:[],callback:u}),{toLoad:Object.keys(f),pending:Object.keys(d),toLoadLanguages:Object.keys(h),toLoadNamespaces:Object.keys(y)}}loaded(a,l,r){const u=a.split("|"),f=u[0],d=u[1];l&&this.emit("failedLoading",f,d,l),!l&&r&&this.store.addResourceBundle(f,d,r,void 0,void 0,{skipCopy:!0}),this.state[a]=l?-1:2,l&&r&&(this.state[a]=0);const h={};this.queue.forEach(y=>{t5(y.loaded,[f],d),p5(y,a),l&&y.errors.push(l),y.pendingCount===0&&!y.done&&(Object.keys(y.loaded).forEach(p=>{h[p]||(h[p]={});const v=y.loaded[p];v.length&&v.forEach(b=>{h[p][b]===void 0&&(h[p][b]=!0)})}),y.done=!0,y.errors.length?y.callback(y.errors):y.callback())}),this.emit("loaded",h),this.queue=this.queue.filter(y=>!y.done)}read(a,l,r,u=0,f=this.retryTimeout,d){if(!a.length)return d(null,{});if(this.readingCalls>=this.maxParallelReads){this.waitingReads.push({lng:a,ns:l,fcName:r,tried:u,wait:f,callback:d});return}this.readingCalls++;const h=(p,v)=>{if(this.readingCalls--,this.waitingReads.length>0){const b=this.waitingReads.shift();this.read(b.lng,b.ns,b.fcName,b.tried,b.wait,b.callback)}if(p&&v&&u{this.read.call(this,a,l,r,u+1,f*2,d)},f);return}d(p,v)},y=this.backend[r].bind(this.backend);if(y.length===2){try{const p=y(a,l);p&&typeof p.then=="function"?p.then(v=>h(null,v)).catch(h):h(null,p)}catch(p){h(p)}return}return y(a,l,h)}prepareLoading(a,l,r={},u){if(!this.backend)return this.logger.warn("No backend was added via i18next.use. Will not load resources."),u&&u();se(a)&&(a=this.languageUtils.toResolveHierarchy(a)),se(l)&&(l=[l]);const f=this.queueLoad(a,l,r,u);if(!f.toLoad.length)return f.pending.length||u(),null;f.toLoad.forEach(d=>{this.loadOne(d)})}load(a,l,r){this.prepareLoading(a,l,{},r)}reload(a,l,r){this.prepareLoading(a,l,{reload:!0},r)}loadOne(a,l=""){const r=a.split("|"),u=r[0],f=r[1];this.read(u,f,"read",void 0,void 0,(d,h)=>{d&&this.logger.warn(`${l}loading namespace ${f} for language ${u} failed`,d),!d&&h&&this.logger.log(`${l}loaded namespace ${f} for language ${u}`,h),this.loaded(a,d,h)})}saveMissing(a,l,r,u,f,d={},h=()=>{}){var y,p,v,b,w;if((p=(y=this.services)==null?void 0:y.utils)!=null&&p.hasLoadedNamespace&&!((b=(v=this.services)==null?void 0:v.utils)!=null&&b.hasLoadedNamespace(l))){this.logger.warn(`did not save key "${r}" as the namespace "${l}" was not yet loaded`,"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!");return}if(!(r==null||r==="")){if((w=this.backend)!=null&&w.create){const j={...d,isUpdate:f},E=this.backend.create.bind(this.backend);if(E.length<6)try{let V;E.length===5?V=E(a,l,r,u,j):V=E(a,l,r,u),V&&typeof V.then=="function"?V.then(B=>h(null,B)).catch(h):h(null,V)}catch(V){h(V)}else E(a,l,r,u,h,j)}!a||!a[0]||this.store.addResource(a[0],l,r,u)}}}const vc=()=>({debug:!1,initAsync:!0,ns:["translation"],defaultNS:["translation"],fallbackLng:["dev"],fallbackNS:!1,supportedLngs:!1,nonExplicitSupportedLngs:!1,load:"all",preload:!1,simplifyPluralSuffix:!0,keySeparator:".",nsSeparator:":",pluralSeparator:"_",contextSeparator:"_",partialBundledLanguages:!1,saveMissing:!1,updateMissing:!1,saveMissingTo:"fallback",saveMissingPlurals:!0,missingKeyHandler:!1,missingInterpolationHandler:!1,postProcess:!1,postProcessPassResolved:!1,returnNull:!1,returnEmptyString:!0,returnObjects:!1,joinArrays:!1,returnedObjectHandler:!1,parseMissingKeyHandler:!1,appendNamespaceToMissingKey:!1,appendNamespaceToCIMode:!1,overloadTranslationOptionHandler:i=>{let a={};if(typeof i[1]=="object"&&(a=i[1]),se(i[1])&&(a.defaultValue=i[1]),se(i[2])&&(a.tDescription=i[2]),typeof i[2]=="object"||typeof i[3]=="object"){const l=i[3]||i[2];Object.keys(l).forEach(r=>{a[r]=l[r]})}return a},interpolation:{escapeValue:!0,format:i=>i,prefix:"{{",suffix:"}}",formatSeparator:",",unescapePrefix:"-",nestingPrefix:"$t(",nestingSuffix:")",nestingOptionsSeparator:",",maxReplaces:1e3,skipOnVariables:!0},cacheInBuiltFormats:!0}),cy=i=>{var a,l;return se(i.ns)&&(i.ns=[i.ns]),se(i.fallbackLng)&&(i.fallbackLng=[i.fallbackLng]),se(i.fallbackNS)&&(i.fallbackNS=[i.fallbackNS]),((l=(a=i.supportedLngs)==null?void 0:a.indexOf)==null?void 0:l.call(a,"cimode"))<0&&(i.supportedLngs=i.supportedLngs.concat(["cimode"])),typeof i.initImmediate=="boolean"&&(i.initAsync=i.initImmediate),i},sr=()=>{},y5=i=>{Object.getOwnPropertyNames(Object.getPrototypeOf(i)).forEach(l=>{typeof i[l]=="function"&&(i[l]=i[l].bind(i))})},hv="__i18next_supportNoticeShown",v5=()=>typeof globalThis<"u"&&!!globalThis[hv],x5=()=>{typeof globalThis<"u"&&(globalThis[hv]=!0)},b5=i=>{var a,l,r,u,f,d,h,y,p,v,b,w,j;return!!(((r=(l=(a=i==null?void 0:i.modules)==null?void 0:a.backend)==null?void 0:l.name)==null?void 0:r.indexOf("Locize"))>0||((h=(d=(f=(u=i==null?void 0:i.modules)==null?void 0:u.backend)==null?void 0:f.constructor)==null?void 0:d.name)==null?void 0:h.indexOf("Locize"))>0||(p=(y=i==null?void 0:i.options)==null?void 0:y.backend)!=null&&p.backends&&i.options.backend.backends.some(E=>{var V,B,q;return((V=E==null?void 0:E.name)==null?void 0:V.indexOf("Locize"))>0||((q=(B=E==null?void 0:E.constructor)==null?void 0:B.name)==null?void 0:q.indexOf("Locize"))>0})||(b=(v=i==null?void 0:i.options)==null?void 0:v.backend)!=null&&b.projectId||(j=(w=i==null?void 0:i.options)==null?void 0:w.backend)!=null&&j.backendOptions&&i.options.backend.backendOptions.some(E=>E==null?void 0:E.projectId))};class Ns extends Nr{constructor(a={},l){if(super(),this.options=cy(a),this.services={},this.logger=nn,this.modules={external:[]},y5(this),l&&!this.isInitialized&&!a.isClone){if(!this.options.initAsync)return this.init(a,l),this;setTimeout(()=>{this.init(a,l)},0)}}init(a={},l){this.isInitializing=!0,typeof a=="function"&&(l=a,a={}),a.defaultNS==null&&a.ns&&(se(a.ns)?a.defaultNS=a.ns:a.ns.indexOf("translation")<0&&(a.defaultNS=a.ns[0]));const r=vc();this.options={...r,...this.options,...cy(a)},this.options.interpolation={...r.interpolation,...this.options.interpolation},a.keySeparator!==void 0&&(this.options.userDefinedKeySeparator=a.keySeparator),a.nsSeparator!==void 0&&(this.options.userDefinedNsSeparator=a.nsSeparator),typeof this.options.overloadTranslationOptionHandler!="function"&&(this.options.overloadTranslationOptionHandler=r.overloadTranslationOptionHandler),this.options.showSupportNotice!==!1&&!b5(this)&&!v5()&&(typeof console<"u"&&typeof console.info<"u"&&console.info("🌐 i18next is maintained with support from Locize — consider powering your project with managed localization (AI, CDN, integrations): https://locize.com 💙"),x5());const u=p=>p?typeof p=="function"?new p:p:null;if(!this.options.isClone){this.modules.logger?nn.init(u(this.modules.logger),this.options):nn.init(null,this.options);let p;this.modules.formatter?p=this.modules.formatter:p=m5;const v=new iy(this.options);this.store=new ny(this.options.resources,this.options);const b=this.services;b.logger=nn,b.resourceStore=this.store,b.languageUtils=v,b.pluralResolver=new f5(v,{prepend:this.options.pluralSeparator,simplifyPluralSuffix:this.options.simplifyPluralSuffix}),this.options.interpolation.format&&this.options.interpolation.format!==r.interpolation.format&&this.logger.deprecate("init: you are still using the legacy format function, please use the new approach: https://www.i18next.com/translation-function/formatting"),p&&(!this.options.interpolation.format||this.options.interpolation.format===r.interpolation.format)&&(b.formatter=u(p),b.formatter.init&&b.formatter.init(b,this.options),this.options.interpolation.format=b.formatter.format.bind(b.formatter)),b.interpolator=new oy(this.options),b.utils={hasLoadedNamespace:this.hasLoadedNamespace.bind(this)},b.backendConnector=new g5(u(this.modules.backend),b.resourceStore,b,this.options),b.backendConnector.on("*",(j,...E)=>{this.emit(j,...E)}),this.modules.languageDetector&&(b.languageDetector=u(this.modules.languageDetector),b.languageDetector.init&&b.languageDetector.init(b,this.options.detection,this.options)),this.modules.i18nFormat&&(b.i18nFormat=u(this.modules.i18nFormat),b.i18nFormat.init&&b.i18nFormat.init(this)),this.translator=new Tr(this.services,this.options),this.translator.on("*",(j,...E)=>{this.emit(j,...E)}),this.modules.external.forEach(j=>{j.init&&j.init(this)})}if(this.format=this.options.interpolation.format,l||(l=sr),this.options.fallbackLng&&!this.services.languageDetector&&!this.options.lng){const p=this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);p.length>0&&p[0]!=="dev"&&(this.options.lng=p[0])}!this.services.languageDetector&&!this.options.lng&&this.logger.warn("init: no languageDetector is used and no lng is defined"),["getResource","hasResourceBundle","getResourceBundle","getDataByLanguage"].forEach(p=>{this[p]=(...v)=>this.store[p](...v)}),["addResource","addResources","addResourceBundle","removeResourceBundle"].forEach(p=>{this[p]=(...v)=>(this.store[p](...v),this)});const h=bs(),y=()=>{const p=(v,b)=>{this.isInitializing=!1,this.isInitialized&&!this.initializedStoreOnce&&this.logger.warn("init: i18next is already initialized. You should call init just once!"),this.isInitialized=!0,this.options.isClone||this.logger.log("initialized",this.options),this.emit("initialized",this.options),h.resolve(b),l(v,b)};if(this.languages&&!this.isInitialized)return p(null,this.t.bind(this));this.changeLanguage(this.options.lng,p)};return this.options.resources||!this.options.initAsync?y():setTimeout(y,0),h}loadResources(a,l=sr){var f,d;let r=l;const u=se(a)?a:this.language;if(typeof a=="function"&&(r=a),!this.options.resources||this.options.partialBundledLanguages){if((u==null?void 0:u.toLowerCase())==="cimode"&&(!this.options.preload||this.options.preload.length===0))return r();const h=[],y=p=>{if(!p||p==="cimode")return;this.services.languageUtils.toResolveHierarchy(p).forEach(b=>{b!=="cimode"&&h.indexOf(b)<0&&h.push(b)})};u?y(u):this.services.languageUtils.getFallbackCodes(this.options.fallbackLng).forEach(v=>y(v)),(d=(f=this.options.preload)==null?void 0:f.forEach)==null||d.call(f,p=>y(p)),this.services.backendConnector.load(h,this.options.ns,p=>{!p&&!this.resolvedLanguage&&this.language&&this.setResolvedLanguage(this.language),r(p)})}else r(null)}reloadResources(a,l,r){const u=bs();return typeof a=="function"&&(r=a,a=void 0),typeof l=="function"&&(r=l,l=void 0),a||(a=this.languages),l||(l=this.options.ns),r||(r=sr),this.services.backendConnector.reload(a,l,f=>{u.resolve(),r(f)}),u}use(a){if(!a)throw new Error("You are passing an undefined module! Please check the object you are passing to i18next.use()");if(!a.type)throw new Error("You are passing a wrong module! Please check the object you are passing to i18next.use()");return a.type==="backend"&&(this.modules.backend=a),(a.type==="logger"||a.log&&a.warn&&a.error)&&(this.modules.logger=a),a.type==="languageDetector"&&(this.modules.languageDetector=a),a.type==="i18nFormat"&&(this.modules.i18nFormat=a),a.type==="postProcessor"&&fv.addPostProcessor(a),a.type==="formatter"&&(this.modules.formatter=a),a.type==="3rdParty"&&this.modules.external.push(a),this}setResolvedLanguage(a){if(!(!a||!this.languages)&&!(["cimode","dev"].indexOf(a)>-1)){for(let l=0;l-1)&&this.store.hasLanguageSomeTranslations(r)){this.resolvedLanguage=r;break}}!this.resolvedLanguage&&this.languages.indexOf(a)<0&&this.store.hasLanguageSomeTranslations(a)&&(this.resolvedLanguage=a,this.languages.unshift(a))}}changeLanguage(a,l){this.isLanguageChangingTo=a;const r=bs();this.emit("languageChanging",a);const u=h=>{this.language=h,this.languages=this.services.languageUtils.toResolveHierarchy(h),this.resolvedLanguage=void 0,this.setResolvedLanguage(h)},f=(h,y)=>{y?this.isLanguageChangingTo===a&&(u(y),this.translator.changeLanguage(y),this.isLanguageChangingTo=void 0,this.emit("languageChanged",y),this.logger.log("languageChanged",y)):this.isLanguageChangingTo=void 0,r.resolve((...p)=>this.t(...p)),l&&l(h,(...p)=>this.t(...p))},d=h=>{var v,b;!a&&!h&&this.services.languageDetector&&(h=[]);const y=se(h)?h:h&&h[0],p=this.store.hasLanguageSomeTranslations(y)?y:this.services.languageUtils.getBestMatchFromCodes(se(h)?[h]:h);p&&(this.language||u(p),this.translator.language||this.translator.changeLanguage(p),(b=(v=this.services.languageDetector)==null?void 0:v.cacheUserLanguage)==null||b.call(v,p)),this.loadResources(p,w=>{f(w,p)})};return!a&&this.services.languageDetector&&!this.services.languageDetector.async?d(this.services.languageDetector.detect()):!a&&this.services.languageDetector&&this.services.languageDetector.async?this.services.languageDetector.detect.length===0?this.services.languageDetector.detect().then(d):this.services.languageDetector.detect(d):d(a),r}getFixedT(a,l,r){const u=(f,d,...h)=>{let y;typeof d!="object"?y=this.options.overloadTranslationOptionHandler([f,d].concat(h)):y={...d},y.lng=y.lng||u.lng,y.lngs=y.lngs||u.lngs,y.ns=y.ns||u.ns,y.keyPrefix!==""&&(y.keyPrefix=y.keyPrefix||r||u.keyPrefix);const p=this.options.keySeparator||".";let v;return y.keyPrefix&&Array.isArray(f)?v=f.map(b=>(typeof b=="function"&&(b=Yc(b,{...this.options,...d})),`${y.keyPrefix}${p}${b}`)):(typeof f=="function"&&(f=Yc(f,{...this.options,...d})),v=y.keyPrefix?`${y.keyPrefix}${p}${f}`:f),this.t(v,y)};return se(a)?u.lng=a:u.lngs=a,u.ns=l,u.keyPrefix=r,u}t(...a){var l;return(l=this.translator)==null?void 0:l.translate(...a)}exists(...a){var l;return(l=this.translator)==null?void 0:l.exists(...a)}setDefaultNamespace(a){this.options.defaultNS=a}hasLoadedNamespace(a,l={}){if(!this.isInitialized)return this.logger.warn("hasLoadedNamespace: i18next was not initialized",this.languages),!1;if(!this.languages||!this.languages.length)return this.logger.warn("hasLoadedNamespace: i18n.languages were undefined or empty",this.languages),!1;const r=l.lng||this.resolvedLanguage||this.languages[0],u=this.options?this.options.fallbackLng:!1,f=this.languages[this.languages.length-1];if(r.toLowerCase()==="cimode")return!0;const d=(h,y)=>{const p=this.services.backendConnector.state[`${h}|${y}`];return p===-1||p===0||p===2};if(l.precheck){const h=l.precheck(this,d);if(h!==void 0)return h}return!!(this.hasResourceBundle(r,a)||!this.services.backendConnector.backend||this.options.resources&&!this.options.partialBundledLanguages||d(r,a)&&(!u||d(f,a)))}loadNamespaces(a,l){const r=bs();return this.options.ns?(se(a)&&(a=[a]),a.forEach(u=>{this.options.ns.indexOf(u)<0&&this.options.ns.push(u)}),this.loadResources(u=>{r.resolve(),l&&l(u)}),r):(l&&l(),Promise.resolve())}loadLanguages(a,l){const r=bs();se(a)&&(a=[a]);const u=this.options.preload||[],f=a.filter(d=>u.indexOf(d)<0&&this.services.languageUtils.isSupportedCode(d));return f.length?(this.options.preload=u.concat(f),this.loadResources(d=>{r.resolve(),l&&l(d)}),r):(l&&l(),Promise.resolve())}dir(a){var u,f;if(a||(a=this.resolvedLanguage||(((u=this.languages)==null?void 0:u.length)>0?this.languages[0]:this.language)),!a)return"rtl";try{const d=new Intl.Locale(a);if(d&&d.getTextInfo){const h=d.getTextInfo();if(h&&h.direction)return h.direction}}catch{}const l=["ar","shu","sqr","ssh","xaa","yhd","yud","aao","abh","abv","acm","acq","acw","acx","acy","adf","ads","aeb","aec","afb","ajp","apc","apd","arb","arq","ars","ary","arz","auz","avl","ayh","ayl","ayn","ayp","bbz","pga","he","iw","ps","pbt","pbu","pst","prp","prd","ug","ur","ydd","yds","yih","ji","yi","hbo","men","xmn","fa","jpr","peo","pes","prs","dv","sam","ckb"],r=((f=this.services)==null?void 0:f.languageUtils)||new iy(vc());return a.toLowerCase().indexOf("-latn")>1?"ltr":l.indexOf(r.getLanguagePartFromCode(a))>-1||a.toLowerCase().indexOf("-arab")>1?"rtl":"ltr"}static createInstance(a={},l){const r=new Ns(a,l);return r.createInstance=Ns.createInstance,r}cloneInstance(a={},l=sr){const r=a.forkResourceStore;r&&delete a.forkResourceStore;const u={...this.options,...a,isClone:!0},f=new Ns(u);if((a.debug!==void 0||a.prefix!==void 0)&&(f.logger=f.logger.clone(a)),["store","services","language"].forEach(h=>{f[h]=this[h]}),f.services={...this.services},f.services.utils={hasLoadedNamespace:f.hasLoadedNamespace.bind(f)},r){const h=Object.keys(this.store.data).reduce((y,p)=>(y[p]={...this.store.data[p]},y[p]=Object.keys(y[p]).reduce((v,b)=>(v[b]={...y[p][b]},v),y[p]),y),{});f.store=new ny(h,u),f.services.resourceStore=f.store}if(a.interpolation){const y={...vc().interpolation,...this.options.interpolation,...a.interpolation},p={...u,interpolation:y};f.services.interpolator=new oy(p)}return f.translator=new Tr(f.services,u),f.translator.on("*",(h,...y)=>{f.emit(h,...y)}),f.init(u,l),f.translator.options=u,f.translator.backendConnector.services.utils={hasLoadedNamespace:f.hasLoadedNamespace.bind(f)},f}toJSON(){return{options:this.options,store:this.store,language:this.language,languages:this.languages,resolvedLanguage:this.resolvedLanguage}}}const Ke=Ns.createInstance();Ke.createInstance;Ke.dir;Ke.init;Ke.loadResources;Ke.reloadResources;Ke.use;Ke.changeLanguage;Ke.getFixedT;Ke.t;Ke.exists;Ke.setDefaultNamespace;Ke.hasLoadedNamespace;Ke.loadNamespaces;Ke.loadLanguages;const{slice:S5,forEach:w5}=[];function T5(i){return w5.call(S5.call(arguments,1),a=>{if(a)for(const l in a)i[l]===void 0&&(i[l]=a[l])}),i}function A5(i){return typeof i!="string"?!1:[/<\s*script.*?>/i,/<\s*\/\s*script\s*>/i,/<\s*img.*?on\w+\s*=/i,/<\s*\w+\s*on\w+\s*=.*?>/i,/javascript\s*:/i,/vbscript\s*:/i,/expression\s*\(/i,/eval\s*\(/i,/alert\s*\(/i,/document\.cookie/i,/document\.write\s*\(/i,/window\.location/i,/innerHTML/i].some(l=>l.test(i))}const fy=/^[\u0009\u0020-\u007e\u0080-\u00ff]+$/,E5=function(i,a){const r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{path:"/"},u=encodeURIComponent(a);let f=`${i}=${u}`;if(r.maxAge>0){const d=r.maxAge-0;if(Number.isNaN(d))throw new Error("maxAge should be a Number");f+=`; Max-Age=${Math.floor(d)}`}if(r.domain){if(!fy.test(r.domain))throw new TypeError("option domain is invalid");f+=`; Domain=${r.domain}`}if(r.path){if(!fy.test(r.path))throw new TypeError("option path is invalid");f+=`; Path=${r.path}`}if(r.expires){if(typeof r.expires.toUTCString!="function")throw new TypeError("option expires is invalid");f+=`; Expires=${r.expires.toUTCString()}`}if(r.httpOnly&&(f+="; HttpOnly"),r.secure&&(f+="; Secure"),r.sameSite)switch(typeof r.sameSite=="string"?r.sameSite.toLowerCase():r.sameSite){case!0:f+="; SameSite=Strict";break;case"lax":f+="; SameSite=Lax";break;case"strict":f+="; SameSite=Strict";break;case"none":f+="; SameSite=None";break;default:throw new TypeError("option sameSite is invalid")}return r.partitioned&&(f+="; Partitioned"),f},dy={create(i,a,l,r){let u=arguments.length>4&&arguments[4]!==void 0?arguments[4]:{path:"/",sameSite:"strict"};l&&(u.expires=new Date,u.expires.setTime(u.expires.getTime()+l*60*1e3)),r&&(u.domain=r),document.cookie=E5(i,a,u)},read(i){const a=`${i}=`,l=document.cookie.split(";");for(let r=0;r-1&&(u=window.location.hash.substring(window.location.hash.indexOf("?")));const d=u.substring(1).split("&");for(let h=0;h0&&d[h].substring(0,y)===a&&(l=d[h].substring(y+1))}}return l}},D5={name:"hash",lookup(i){var u;let{lookupHash:a,lookupFromHashIndex:l}=i,r;if(typeof window<"u"){const{hash:f}=window.location;if(f&&f.length>2){const d=f.substring(1);if(a){const h=d.split("&");for(let y=0;y0&&h[y].substring(0,p)===a&&(r=h[y].substring(p+1))}}if(r)return r;if(!r&&l>-1){const h=f.match(/\/([a-zA-Z-]*)/g);return Array.isArray(h)?(u=h[typeof l=="number"?l:0])==null?void 0:u.replace("/",""):void 0}}}return r}};let ci=null;const hy=()=>{if(ci!==null)return ci;try{if(ci=typeof window<"u"&&window.localStorage!==null,!ci)return!1;const i="i18next.translate.boo";window.localStorage.setItem(i,"foo"),window.localStorage.removeItem(i)}catch{ci=!1}return ci};var M5={name:"localStorage",lookup(i){let{lookupLocalStorage:a}=i;if(a&&hy())return window.localStorage.getItem(a)||void 0},cacheUserLanguage(i,a){let{lookupLocalStorage:l}=a;l&&hy()&&window.localStorage.setItem(l,i)}};let fi=null;const my=()=>{if(fi!==null)return fi;try{if(fi=typeof window<"u"&&window.sessionStorage!==null,!fi)return!1;const i="i18next.translate.boo";window.sessionStorage.setItem(i,"foo"),window.sessionStorage.removeItem(i)}catch{fi=!1}return fi};var C5={name:"sessionStorage",lookup(i){let{lookupSessionStorage:a}=i;if(a&&my())return window.sessionStorage.getItem(a)||void 0},cacheUserLanguage(i,a){let{lookupSessionStorage:l}=a;l&&my()&&window.sessionStorage.setItem(l,i)}},O5={name:"navigator",lookup(i){const a=[];if(typeof navigator<"u"){const{languages:l,userLanguage:r,language:u}=navigator;if(l)for(let f=0;f0?a:void 0}},R5={name:"htmlTag",lookup(i){let{htmlTag:a}=i,l;const r=a||(typeof document<"u"?document.documentElement:null);return r&&typeof r.getAttribute=="function"&&(l=r.getAttribute("lang")),l}},L5={name:"path",lookup(i){var u;let{lookupFromPathIndex:a}=i;if(typeof window>"u")return;const l=window.location.pathname.match(/\/([a-zA-Z-]*)/g);return Array.isArray(l)?(u=l[typeof a=="number"?a:0])==null?void 0:u.replace("/",""):void 0}},_5={name:"subdomain",lookup(i){var u,f;let{lookupFromSubdomainIndex:a}=i;const l=typeof a=="number"?a+1:1,r=typeof window<"u"&&((f=(u=window.location)==null?void 0:u.hostname)==null?void 0:f.match(/^(\w{2,5})\.(([a-z0-9-]{1,63}\.[a-z]{2,6})|localhost)/i));if(r)return r[l]}};let mv=!1;try{document.cookie,mv=!0}catch{}const pv=["querystring","cookie","localStorage","sessionStorage","navigator","htmlTag"];mv||pv.splice(1,1);const z5=()=>({order:pv,lookupQuerystring:"lng",lookupCookie:"i18next",lookupLocalStorage:"i18nextLng",lookupSessionStorage:"i18nextLng",caches:["localStorage"],excludeCacheFor:["cimode"],convertDetectedLanguage:i=>i});class gv{constructor(a){let l=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.type="languageDetector",this.detectors={},this.init(a,l)}init(){let a=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{languageUtils:{}},l=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};this.services=a,this.options=T5(l,this.options||{},z5()),typeof this.options.convertDetectedLanguage=="string"&&this.options.convertDetectedLanguage.indexOf("15897")>-1&&(this.options.convertDetectedLanguage=u=>u.replace("-","_")),this.options.lookupFromUrlIndex&&(this.options.lookupFromPathIndex=this.options.lookupFromUrlIndex),this.i18nOptions=r,this.addDetector(j5),this.addDetector(N5),this.addDetector(M5),this.addDetector(C5),this.addDetector(O5),this.addDetector(R5),this.addDetector(L5),this.addDetector(_5),this.addDetector(D5)}addDetector(a){return this.detectors[a.name]=a,this}detect(){let a=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.options.order,l=[];return a.forEach(r=>{if(this.detectors[r]){let u=this.detectors[r].lookup(this.options);u&&typeof u=="string"&&(u=[u]),u&&(l=l.concat(u))}}),l=l.filter(r=>r!=null&&!A5(r)).map(r=>this.options.convertDetectedLanguage(r)),this.services&&this.services.languageUtils&&this.services.languageUtils.getBestMatchFromCodes?l:l.length>0?l[0]:null}cacheUserLanguage(a){let l=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.options.caches;l&&(this.options.excludeCacheFor&&this.options.excludeCacheFor.indexOf(a)>-1||l.forEach(r=>{this.detectors[r]&&this.detectors[r].cacheUserLanguage(a,this.options)}))}}gv.type="languageDetector";const V5={free:"Free",pro:"Pro",api:"API",enterprise:"Enterprise",reserveAccess:"Reserve Your Early Access"},k5={noiseWord:"Noise",signalWord:"Signal",valueProps:"AI-powered equity research, geopolitical analysis, and macro intelligence — correlated in real time.",reserveEarlyAccess:"Reserve Your Early Access",launchingDate:"Launching March 2026",tryFreeDashboard:"Try the free dashboard",emailPlaceholder:"Enter your email",emailAriaLabel:"Email address for waitlist"},U5={asFeaturedIn:"As featured in"},B5={proTitle:"World Monitor Pro",proDesc:"For investors, analysts, and professionals who need stock monitoring, geopolitical analysis, and daily AI briefings.",proF1:"Equity research — global stock analysis, financials, analyst targets, valuation metrics",proF2:"Geopolitical analysis — Grand Chessboard framework, Prisoners of Geography models",proF3:"Economy analytics — GDP, inflation, interest rates, growth cycles",proF4:"AI morning briefs & flash alerts delivered to Slack, Telegram, WhatsApp, Email",proF5:"Central bank & monetary policy tracking",proF6:"Global risk monitoring & scenario analysis",proF7:"Near-real-time data (<60s refresh), 22 services, 1 key",proF8:"Saved watchlists, custom views & configurable alert rules",proF9:"Premium map layers, longer history & desktop app workflows",proCta:"Reserve Your Early Access",entTitle:"World Monitor Enterprise",entDesc:"For teams that need shared monitoring, API access, deployment options, TV apps, and direct support.",entF1:"Everything in Pro, plus:",entF2:"Live-edge + satellite imagery & SAR",entF3:"AI agents with investor personas & MCP",entF4:"50,000+ infrastructure assets mapped",entF5:"100+ data connectors (Splunk, Snowflake, Sentinel...)",entF6:"REST API + webhooks + bulk export",entF7:"Team workspaces with SSO/MFA/RBAC",entF8:"White-label & embeddable panels",entF9:"Android TV app for SOC walls & trading floors",entF10:"Cloud, on-prem, or air-gapped deployment",entF11:"Dedicated onboarding & support",entCta:"Talk to Sales"},H5={title:"Why upgrade",noiseTitle:"Less noise",noiseDesc:"Filter events, feeds, layers, and live sources around the places and signals you care about.",fasterTitle:"Market intelligence",fasterDesc:"Equity research, analyst targets, and macro analytics — correlated with geopolitical signals that move markets.",controlTitle:"More control",controlDesc:"Save watchlists, custom views, and alert setups for the events you follow most.",deeperTitle:"Deeper analysis",deeperDesc:"Grand Chessboard frameworks, Prisoners of Geography models, central bank tracking, and scenario analysis."},q5={windowTitle:"worldmonitor.app — Live Dashboard",openFullScreen:"Open full screen",tryLiveDashboard:"Try the Live Dashboard",iframeTitle:"World Monitor — Live Intelligence Dashboard",description:"3D WebGL globe · 45+ interactive map layers · Real-time market, macro, geopolitical, energy, and infrastructure data"},G5={uniqueVisitors:"Unique visitors",peakDailyUsers:"Peak daily users",countriesReached:"Countries reached",liveDataSources:"Live data sources",quote:"Markets, monetary policy, geopolitics, energy — everything moves together now. I needed something that showed me how these forces connect in real time, not just the headlines but the underlying drivers.",ceo:"CEO of",asToldTo:"as told to"},Y5={title:"Built for people who need signal fast",investorsTitle:"Investors & portfolio managers",investorsDesc:"Track global equities, analyst targets, valuation metrics, and macro indicators alongside geopolitical risk signals.",tradersTitle:"Energy & commodities traders",tradersDesc:"Track vessel movements, cargo inference, supply chain disruptions, and market-moving geopolitical signals.",researchersTitle:"Researchers & analysts",researchersDesc:"Equity research, economy analytics, and geopolitical frameworks for deeper analysis and reporting.",journalistsTitle:"Journalists & media",journalistsDesc:"Follow fast-moving developments across markets and regions without stitching sources together manually.",govTitle:"Government & institutions",govDesc:"Macro policy tracking, central bank monitoring, and situational awareness across geopolitical and infrastructure signals.",teamsTitle:"Teams & organizations",teamsDesc:"Move from individual use to shared workflows, API access, TV apps, and managed deployments."},K5={title:"What World Monitor Tracks",subtitle:"22 service domains ingested simultaneously. Markets, macro, geopolitics, energy, infrastructure — everything normalized and rendered on a WebGL globe.",markets:"Financial Markets & Equities",marketsDesc:"Global stock analysis, commodities, crypto, ETF flows, analyst targets, and FRED macro data",economy:"Economy & Central Banks",economyDesc:"GDP, inflation, interest rates, growth cycles, and monetary policy tracking across major economies",geopolitical:"Geopolitical Analysis",geopoliticalDesc:"ACLED & UCDP events with escalation scoring, risk frameworks, and trend analysis",maritime:"Maritime & Trade",maritimeDesc:"Ship movements, vessel detection, port activity, and cargo inference",aviation:"Aviation Tracking",aviationDesc:"ADS-B transponder tracking of global flight patterns",infra:"Critical Infrastructure",infraDesc:"Nuclear sites, power grids, pipelines, refineries — 50K+ mapped assets",fire:"Satellite Fire Detection",fireDesc:"NASA FIRMS near-real-time fire and hotspot data",cables:"Submarine Cables",cablesDesc:"Undersea cable routes and landing stations",internet:"Internet & GPS",internetDesc:"Outage detection, BGP anomalies, GPS jamming zones",cyber:"Cyber Threats",cyberDesc:"Ransomware feeds, BGP hijacks, DDoS detection",gdelt:"GDELT & News",gdeltDesc:"435+ RSS feeds, AI-scored GDELT events, live broadcasts",seismology:"Seismology & Natural",seismologyDesc:"USGS earthquakes, volcanic activity, severe weather"},X5={free:"Free",freeTagline:"See everything",freeDesc:"The open-source dashboard",freeF1:"5-15 min refresh",freeF2:"435+ feeds, 45 map layers",freeF3:"BYOK for AI",freeF4:"Free forever",openDashboard:"Open Dashboard",pro:"Pro",proTagline:"Markets, macro & geopolitics",proDesc:"Your AI analyst",proF1:"Equity research & stock analysis",proF2:"+ daily briefs, economy analytics",proF3:"AI included, 1 key",proF4:"Early access pricing",enterprise:"Enterprise",enterpriseTagline:"Act before anyone else",enterpriseDesc:"The intelligence platform",entF1:"Live-edge + satellite imagery",entF2:"+ AI agents, 50K+ infra, SAR",entF3:"Custom AI, investor personas",entF4:"Contact us",contactSales:"Contact Sales"},P5={proTier:"PRO TIER",title:"Your AI Analyst That Never Sleeps",subtitle:"The free dashboard shows you the world. Pro tells you what it means — stocks, macro trends, geopolitical risk, and the connections between them.",equityResearch:"Equity Research",equityResearchDesc:"Global stock analysis with financials visualization, analyst price targets, and valuation metrics. Track what moves markets.",geopoliticalAnalysis:"Geopolitical Analysis",geopoliticalAnalysisDesc:"Grand Chessboard strategic framework, Prisoners of Geography models, and central bank & monetary policy tracking.",economyAnalytics:"Economy Analytics",economyAnalyticsDesc:"GDP, inflation, interest rates, and growth cycles. Macro data correlated with market signals and geopolitical events.",riskMonitoring:"Risk Monitoring & Scenarios",riskMonitoringDesc:"Global risk scoring, scenario analysis, and geopolitical risk assessment. Convergence detection across market and political signals.",orbitalSurveillance:"Orbital Surveillance Analysis",orbitalSurveillanceDesc:"Overhead pass predictions, revisit frequency analysis, and imaging window alerts. Know when intelligence satellites are watching your areas of interest.",morningBriefs:"Daily Briefs & Flash Alerts",morningBriefsDesc:"AI-synthesized overnight developments ranked by your focus areas. Market-moving events and geopolitical shifts pushed in real-time.",oneKey:"22 Services, 1 Key",oneKeyDesc:"Finnhub, FRED, ACLED, UCDP, NASA FIRMS, AISStream, OpenSky, and more — all active, no separate registrations.",deliveryLabel:"Choose how intelligence finds you"},F5={morningBrief:"Morning Brief",markets:"Markets",marketsText:"S&P 500 futures -1.2% pre-market. Fed Chair testimony at 10am EST — rate-sensitive sectors under pressure. Analyst consensus shifting on Q2 earnings.",elevated:"Macro",elevatedText:"ECB holds rates at 3.75%. Euro area GDP revised up to 1.1%. Central bank divergence widening — USD/EUR at 3-month high.",watch:"Geopolitical",watchText:"Brent +2.3% on Hormuz AIS anomaly. 4 dark ships in 6h. Commodity supply chain risk elevated — energy sector correlations spiking."},Q5={apiTier:"API TIER",title:"Programmatic Intelligence",subtitle:"For developers, analysts, and teams building on World Monitor data. Separate from Pro — use both or either.",restApi:"REST API across all 22 service domains",authenticated:"Authenticated per-key, rate-limited per tier",structured:"Structured JSON with cache headers and OpenAPI 3.1 docs",starter:"Starter",starterReqs:"1,000 req/day",starterWebhooks:"5 webhook rules",business:"Business",businessReqs:"50,000 req/day",businessWebhooks:"Unlimited webhooks + SLA",feedData:"Feed data into your dashboards, automate alerting via Zapier/n8n/Make, build custom scoring models on CII/risk data."},Z5={enterpriseTier:"ENTERPRISE TIER",title:"Intelligence Infrastructure",subtitle:"For governments, institutions, trading desks, and organizations that need the full platform with maximum security, AI agents, TV apps, and data depth.",security:"Government-Grade Security",securityDesc:"Air-gapped deployment, on-premises Docker, dedicated cloud tenant, SOC 2 Type II path, SSO/MFA, and full audit trail.",aiAgents:"AI Agents & MCP",aiAgentsDesc:"Autonomous intelligence agents with investor personas. Connect World Monitor as a tool to Claude, GPT, or custom LLMs via MCP.",dataLayers:"Expanded Data Layers",dataLayersDesc:"Tens of thousands of infrastructure assets mapped globally. Satellite imagery integration with change detection and SAR.",connectors:"100+ Data Connectors",connectorsDesc:"PostgreSQL, Snowflake, Splunk, Sentinel, Jira, Slack, Teams, and more. Export to PDF, PowerPoint, CSV, GeoJSON.",whiteLabel:"White-Label, TV & Embeddable",whiteLabelDesc:"Your brand, your domain, your desktop app. Android TV app for SOC walls and trading floors. Embeddable iframe panels.",financial:"Financial Intelligence",financialDesc:"Earnings calendar, energy grid data, enhanced commodity tracking with cargo inference, sanctions screening with AIS correlation.",commodity:"Commodity Trading",commodityDesc:"Vessel tracking + cargo inference + supply chain graph. Know before the market moves.",government:"Government & Institutions",governmentDesc:"Air-gapped, AI agents, full situational awareness, MCP. No data leaves your network.",risk:"Risk Consultancies",riskDesc:"Scenario simulation, investor personas, branded PDF/PowerPoint reports on demand.",soc:"SOCs & CERT",socDesc:"Cyber threat layer, SIEM integration, BGP anomaly monitoring, ransomware feeds.",talkToSales:"Talk to Sales",contactFormTitle:"Talk to our team",contactFormSubtitle:"Tell us about your organization and we'll get back to you within one business day.",namePlaceholder:"Your name",emailPlaceholder:"Work email",orgPlaceholder:"Company *",phonePlaceholder:"Phone number *",messagePlaceholder:"What are you looking for?",workEmailRequired:"Please use your work email address",submitContact:"Send Message",contactSending:"Sending...",contactSent:"Message sent. We'll be in touch.",contactFailed:"Failed to send. Please email enterprise@worldmonitor.app"},J5={title:"Compare Tiers",feature:"Feature",freeHeader:"Free ($0)",proHeader:"Pro (Early Access)",apiHeader:"API (Coming Soon)",entHeader:"Enterprise (Contact)",dataRefresh:"Data refresh",dashboard:"Dashboard",ai:"AI",briefsAlerts:"Briefs & alerts",delivery:"Delivery",apiRow:"API",infraLayers:"Infrastructure layers",satellite:"Orbital Surveillance",connectorsRow:"Connectors",deployment:"Deployment",securityRow:"Security",f5_15min:"5-15 min",fLt60s:"<60 seconds",fPerRequest:"Per-request",fLiveEdge:"Live-edge",f50panels:"50+ panels",fWhiteLabel:"White-label",fBYOK:"BYOK",fIncluded:"Included",fAgentsPersonas:"Agents + personas",fDailyFlash:"Daily + flash",fTeamDist:"Team distribution",fSlackTgWa:"Slack/TG/WA/Email",fWebhook:"Webhook",fSiemMcp:"+ SIEM/MCP",fRestWebhook:"REST + webhook",fMcpBulk:"+ MCP + bulk",f45:"45",fTensOfThousands:"+ tens of thousands",fLiveTracking:"Live tracking",fPassAlerts:"Pass alerts + analysis",fImagerySar:"Imagery + SAR",f100plus:"100+",fCloud:"Cloud",fCloudOnPrem:"Cloud/on-prem/air-gap",fStandard:"Standard",fKeyAuth:"Key auth",fSsoMfa:"SSO/MFA/RBAC/audit",noteBelow:"The core platform remains free. Paid plans unlock equity research, macro analytics, AI briefings, and organizational use."},$5={title:"Frequently Asked Questions",q1:"Is World Monitor still free?",a1:"Yes. The core platform remains free. Pro adds equity research, macro analytics, and AI briefings. Enterprise adds team deployments and TV apps.",q2:"Why pay for Pro?",a2:"Pro is for investors, analysts, and professionals who want stock monitoring, geopolitical analysis, economy analytics, and AI-powered daily briefings — all under one key.",q3:"Who is Enterprise for?",a3:"Enterprise is for teams that need shared use, APIs, integrations, deployment options, and direct support.",q4:"Can I start with Pro and upgrade later?",a4:"Yes. Pro works for serious individuals. Enterprise is there when team and deployment needs grow.",q5:"Is this only for conflict monitoring?",a5:"No. World Monitor is primarily a global intelligence platform covering stock markets, macroeconomics, geopolitical analysis, energy, infrastructure, and more. Conflict tracking is one of many capabilities — not the focus.",q6:"Why keep the core platform free?",a6:"Because public access matters. Paid plans fund deeper workflows for serious users and organizations.",q7:"Can I still use my own API keys?",a7:"Yes. Bring-your-own-keys always works. Pro simply means you don't have to register for 20+ separate services.",q8:"What's MCP?",a8:"Model Context Protocol lets AI agents (Claude, GPT, or custom LLMs) use World Monitor as a tool — querying all 22 services, reading map state, and triggering analysis. Enterprise only."},W5={title:"Start with Pro. Scale to Enterprise.",subtitle:"Keep using World Monitor for free, or upgrade for equity research, macro analytics, and AI briefings. If your organization needs team access, TV apps, or API support, talk to us.",getPro:"Reserve Your Early Access",talkToSales:"Talk to Sales"},I5={beFirstInLine:"Be first in line.",lookingForEnterprise:"Looking for Enterprise?",contactUs:"Contact us",wiredArticle:"WIRED Article"},e3={submitting:"Submitting...",joinWaitlist:"Reserve Your Early Access",tooManyRequests:"Too many requests",failedTryAgain:"Failed — try again"},t3={alreadyOnList:"You're already on the list.",shareHint:"Share your link to move up the line. Each friend who joins bumps you closer to the front.",copied:"Copied!",shareOnX:"Share on X",linkedin:"LinkedIn",whatsapp:"WhatsApp",telegram:"Telegram",shareText:"I just joined the World Monitor Pro waitlist — stock monitoring, geopolitical analysis, and AI daily briefings in one platform. Join me:",joinWaitlistShare:"Join the World Monitor Pro waitlist:",youreIn:"You're in!",invitedBanner:"You've been invited — join the waitlist"},yv={nav:V5,hero:k5,wired:U5,twoPath:B5,whyUpgrade:H5,livePreview:q5,socialProof:G5,audience:Y5,dataCoverage:K5,tiers:X5,proShowcase:P5,slackMock:F5,apiSection:Q5,enterpriseShowcase:Z5,pricingTable:J5,faq:$5,finalCta:W5,footer:I5,form:e3,referral:t3},vv=["en","ar","bg","cs","de","el","es","fr","it","ja","ko","nl","pl","pt","ro","ru","sv","th","tr","vi","zh"],n3=new Set(vv),py=new Set(["en"]),a3=new Set(["ar"]),i3=Object.assign({"./locales/ar.json":()=>Ze(()=>import("./ar-BHa0nEOe.js"),[]).then(i=>i.default),"./locales/bg.json":()=>Ze(()=>import("./bg-Ci69To5a.js"),[]).then(i=>i.default),"./locales/cs.json":()=>Ze(()=>import("./cs-CqKhwIlR.js"),[]).then(i=>i.default),"./locales/de.json":()=>Ze(()=>import("./de-B71p-f-t.js"),[]).then(i=>i.default),"./locales/el.json":()=>Ze(()=>import("./el-DJwjBufy.js"),[]).then(i=>i.default),"./locales/es.json":()=>Ze(()=>import("./es-aR_qLKIk.js"),[]).then(i=>i.default),"./locales/fr.json":()=>Ze(()=>import("./fr-BrtwTv_R.js"),[]).then(i=>i.default),"./locales/it.json":()=>Ze(()=>import("./it-DHbGtQXZ.js"),[]).then(i=>i.default),"./locales/ja.json":()=>Ze(()=>import("./ja-D8-35S3Y.js"),[]).then(i=>i.default),"./locales/ko.json":()=>Ze(()=>import("./ko-otMG-p7A.js"),[]).then(i=>i.default),"./locales/nl.json":()=>Ze(()=>import("./nl-B3DRC8p4.js"),[]).then(i=>i.default),"./locales/pl.json":()=>Ze(()=>import("./pl-DqoCbf3Z.js"),[]).then(i=>i.default),"./locales/pt.json":()=>Ze(()=>import("./pt-CqDblfWm.js"),[]).then(i=>i.default),"./locales/ro.json":()=>Ze(()=>import("./ro-DaIMP80d.js"),[]).then(i=>i.default),"./locales/ru.json":()=>Ze(()=>import("./ru-DN0TfVz-.js"),[]).then(i=>i.default),"./locales/sv.json":()=>Ze(()=>import("./sv-B8YGwHj7.js"),[]).then(i=>i.default),"./locales/th.json":()=>Ze(()=>import("./th-Dx5iTAoX.js"),[]).then(i=>i.default),"./locales/tr.json":()=>Ze(()=>import("./tr-DqKzKEKV.js"),[]).then(i=>i.default),"./locales/vi.json":()=>Ze(()=>import("./vi-ByRwBJoF.js"),[]).then(i=>i.default),"./locales/zh.json":()=>Ze(()=>import("./zh-Cf0ddDO-.js"),[]).then(i=>i.default)});function s3(i){var l;const a=((l=(i||"en").split("-")[0])==null?void 0:l.toLowerCase())||"en";return n3.has(a)?a:"en"}async function l3(i){const a=s3(i);if(py.has(a))return a;const l=i3[`./locales/${a}.json`],r=l?await l():yv;return Ke.addResourceBundle(a,"translation",r,!0,!0),py.add(a),a}async function r3(){if(Ke.isInitialized)return;await Ke.use(gv).init({resources:{en:{translation:yv}},supportedLngs:[...vv],nonExplicitSupportedLngs:!0,fallbackLng:"en",interpolation:{escapeValue:!1},detection:{order:["querystring","localStorage","navigator"],lookupQuerystring:"lang",caches:["localStorage"]}});const i=await l3(Ke.language||"en");i!=="en"&&await Ke.changeLanguage(i);const a=(Ke.language||i).split("-")[0]||"en";document.documentElement.setAttribute("lang",a==="zh"?"zh-CN":a),a3.has(a)&&document.documentElement.setAttribute("dir","rtl")}function S(i,a){return Ke.t(i,a)}const o3="/pro/assets/worldmonitor-7-mar-2026-CtI5YvxO.jpg",u3="data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0.11%2010.99%20124.78%2024.98'%3e%3cpath%20d='M105.375%2014.875v17.25h8.5c2.375%200%203.75-.375%204.75-1.25%201.25-1.125%201.875-3.125%201.875-7.375s-.625-6.25-1.875-7.375c-1-.875-2.375-1.25-4.75-1.25zM117%2023.5c0%203.75-.25%204.625-1%205.125-.5.375-1.125.5-2.375.5h-4.75V17.75h4.75c1.25%200%201.875%200%202.375.5.75.625%201%201.5%201%205.25zm7.875%2012.438H99.937V11h24.938zM79.563%2017.75v-2.875h14.75v5.5h-3.126V17.75h-6v4.125h4.75v2.75h-4.75v4.625h6.126v-3h3.124v5.875H79.564V29.25h2.374v-11.5zM66.188%2027.625c0%201.875.124%203.25.374%204.375h3.376c-.126-.875-.25-2.5-.25-4.625-.126-2.5-.876-2.875-2.626-3.25%202-.375%202.876-1.25%202.876-4.375%200-2.5-.376-3.5-1.126-4.125-.5-.5-1.374-.75-2.75-.75h-10.5v17.25h3.5v-6.75h4.876c1%200%201.374.125%201.75.375s.5.625.5%201.875zm-7.126-5v-4.75h5.626c.75%200%201%20.125%201.124.25.25.25.5.625.5%202.125s-.25%202-.5%202.25c-.124.125-.374.25-1.124.25zm15.876%2013.313h-25V11h24.937v24.938zM43.438%2029.25v2.875H31.562V29.25h4.25v-11.5h-4.25v-2.875h11.875v2.875h-4.25v11.5zM23.375%2014.875h-3.25L17.75%2028.5%2015%2015.875c-.125-.875-.5-1-1.25-1H12c-.75%200-1.125.25-1.25%201L8%2028.5%205.625%2014.875h-3.5L5.5%2031.25c.125.75.375.875%201.25.875h2.375c.75%200%201-.125%201.25-.875L13%2019.375l2.625%2011.875c.125.75.375.875%201.25.875h2.25c.75%200%201.125-.125%201.25-.875zm1.75%2021.063h-25V11h24.938v24.938z'%3e%3c/path%3e%3c/svg%3e",xv="https://api.worldmonitor.app/api",c3="0x4AAAAAACnaYgHIyxclu8Tj",f3="https://worldmonitor.app/pro";function d3(){if(!window.turnstile)return 0;let i=0;return document.querySelectorAll(".cf-turnstile:not([data-rendered])").forEach(a=>{const l=window.turnstile.render(a,{sitekey:c3,size:"flexible",callback:r=>{a.dataset.token=r},"expired-callback":()=>{delete a.dataset.token},"error-callback":()=>{delete a.dataset.token}});a.dataset.rendered="true",a.dataset.widgetId=String(l),i++}),i}function bv(){return new URLSearchParams(window.location.search).get("ref")||void 0}function h3(i){return String(i??"").replace(/[&<>"']/g,a=>({"&":"&","<":"<",">":">",'"':""","'":"'"})[a]||a)}function m3(i,a){if(a.referralCode==null&&a.status==null){const v=i.querySelector('button[type="submit"]');v&&(v.textContent=S("form.joinWaitlist"),v.disabled=!1);return}const l=h3(a.referralCode),r=`${f3}?ref=${l}`,u=encodeURIComponent(S("referral.shareText")),f=encodeURIComponent(r),d=(v,b,w)=>{const j=document.createElement(v);return j.className=b,w&&(j.textContent=w),j},h=d("div","text-center"),y=a.status==="already_registered",p=S("referral.shareHint");if(y?h.appendChild(d("p","text-lg font-display font-bold text-wm-green mb-2",S("referral.alreadyOnList"))):h.appendChild(d("p","text-lg font-display font-bold text-wm-green mb-2",S("referral.youreIn"))),h.appendChild(d("p","text-sm text-wm-muted mb-4",p)),l){const v=d("div","bg-wm-card border border-wm-border px-4 py-3 mb-4 font-mono text-xs text-wm-green break-all select-all cursor-pointer",r);v.addEventListener("click",()=>{navigator.clipboard.writeText(r).then(()=>{v.textContent=S("referral.copied"),setTimeout(()=>{v.textContent=r},2e3)})}),h.appendChild(v);const b=d("div","flex gap-3 justify-center flex-wrap"),w=[{label:S("referral.shareOnX"),href:`https://x.com/intent/tweet?text=${u}&url=${f}`},{label:S("referral.linkedin"),href:`https://www.linkedin.com/sharing/share-offsite/?url=${f}`},{label:S("referral.whatsapp"),href:`https://wa.me/?text=${u}%20${f}`},{label:S("referral.telegram"),href:`https://t.me/share/url?url=${f}&text=${encodeURIComponent(S("referral.joinWaitlistShare"))}`}];for(const j of w){const E=d("a","bg-wm-card border border-wm-border px-4 py-2 text-xs font-mono text-wm-muted hover:text-wm-text hover:border-wm-text transition-colors",j.label);E.href=j.href,E.target="_blank",E.rel="noreferrer",b.appendChild(E)}h.appendChild(b)}i.replaceWith(h)}async function Sv(i,a){var y;const l=a.querySelector('button[type="submit"]'),r=l.textContent;l.disabled=!0,l.textContent=S("form.submitting");const u=((y=a.querySelector('input[name="website"]'))==null?void 0:y.value)||"",f=a.querySelector(".cf-turnstile"),d=(f==null?void 0:f.dataset.token)||"",h=bv();try{const p=await fetch(`${xv}/register-interest`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:i,source:"pro-waitlist",website:u,turnstileToken:d,referredBy:h})}),v=await p.json();if(!p.ok)throw new Error(v.error||"Registration failed");m3(a,{referralCode:v.referralCode,position:v.position,status:v.status})}catch(p){l.textContent=p.message==="Too many requests"?S("form.tooManyRequests"):S("form.failedTryAgain"),l.disabled=!1,f!=null&&f.dataset.widgetId&&window.turnstile&&(window.turnstile.reset(f.dataset.widgetId),delete f.dataset.token),setTimeout(()=>{l.textContent=r},3e3)}}const p3=()=>m.jsx("svg",{viewBox:"0 0 24 24",className:"w-5 h-5",fill:"currentColor","aria-hidden":"true",children:m.jsx("path",{d:"M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zM6.313 15.165a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zM8.834 6.313a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zM18.956 8.834a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zM17.688 8.834a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312zM15.165 18.956a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zM15.165 17.688a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313z"})}),wv=()=>m.jsxs("a",{href:"https://worldmonitor.app",className:"flex items-center gap-2 hover:opacity-80 transition-opacity","aria-label":"World Monitor — Home",children:[m.jsxs("div",{className:"relative w-8 h-8 rounded-full bg-wm-card border border-wm-border flex items-center justify-center overflow-hidden",children:[m.jsx(br,{className:"w-5 h-5 text-wm-blue opacity-50 absolute","aria-hidden":"true"}),m.jsx(eA,{className:"w-6 h-6 text-wm-green absolute z-10","aria-hidden":"true"})]}),m.jsxs("div",{className:"flex flex-col",children:[m.jsx("span",{className:"font-display font-bold text-sm leading-none tracking-tight",children:"WORLD MONITOR"}),m.jsx("span",{className:"text-[9px] text-wm-muted font-mono uppercase tracking-widest leading-none mt-1",children:"by Someone.ceo"})]})]}),g3=()=>m.jsx("nav",{className:"fixed top-0 left-0 right-0 z-50 glass-panel border-b-0 border-x-0 rounded-none","aria-label":"Main navigation",children:m.jsxs("div",{className:"max-w-7xl mx-auto px-6 h-16 flex items-center justify-between",children:[m.jsx(wv,{}),m.jsxs("div",{className:"hidden md:flex items-center gap-8 text-sm font-mono text-wm-muted",children:[m.jsx("a",{href:"#tiers",className:"hover:text-wm-text transition-colors",children:S("nav.free")}),m.jsx("a",{href:"#pro",className:"hover:text-wm-green transition-colors",children:S("nav.pro")}),m.jsx("a",{href:"#api",className:"hover:text-wm-text transition-colors",children:S("nav.api")}),m.jsx("a",{href:"#enterprise",className:"hover:text-wm-text transition-colors",children:S("nav.enterprise")})]}),m.jsx("a",{href:"#waitlist",className:"bg-wm-green text-wm-bg px-4 py-2 rounded-sm font-mono text-xs uppercase tracking-wider font-bold hover:bg-green-400 transition-colors",children:S("nav.reserveAccess")})]})}),y3=()=>m.jsxs("a",{href:"https://www.wired.me/story/the-music-streaming-ceo-who-built-a-global-war-map",target:"_blank",rel:"noreferrer",className:"inline-flex items-center gap-2 px-3 py-1.5 rounded-full border border-wm-border bg-wm-card/50 text-wm-muted text-xs font-mono hover:border-wm-green/30 hover:text-wm-text transition-colors",children:[S("wired.asFeaturedIn")," ",m.jsx("span",{className:"text-wm-text font-bold",children:"WIRED"})," ",m.jsx(iv,{className:"w-3 h-3","aria-hidden":"true"})]}),v3=()=>m.jsxs("div",{className:"relative my-4 md:my-8 -mx-6",children:[m.jsx("div",{className:"absolute inset-0 flex items-center justify-center pointer-events-none",children:m.jsx("div",{className:"w-64 h-40 md:w-96 md:h-56 bg-wm-green/8 rounded-full blur-[80px]"})}),m.jsx("div",{className:"flex items-end justify-center gap-[3px] md:gap-1 h-28 md:h-44 relative px-4","aria-hidden":"true",children:Array.from({length:60}).map((r,u)=>{const f=Math.abs(u-30),d=f<=8,h=d?1-f/8:0,y=60+h*110,p=Math.max(8,35-f*.8);return m.jsx(tv.div,{className:`flex-1 max-w-2 md:max-w-3 rounded-sm ${d?"bg-wm-green":"bg-wm-muted/20"}`,style:d?{boxShadow:`0 0 ${6+h*12}px rgba(74,222,128,${h*.5})`}:void 0,initial:{height:d?y*.3:p*.5,opacity:d?.4:.08},animate:d?{height:[y*.5,y,y*.65,y*.9],opacity:[.6+h*.3,1,.75+h*.2,.95]}:{height:[p,p*.3,p*.7,p*.15,p*.5],opacity:[.2,.06,.15,.04,.12]},transition:{duration:d?2.5+h*.5:1+Math.random()*.6,repeat:1/0,repeatType:"reverse",delay:d?f*.07:Math.random()*.6,ease:"easeInOut"}},u)})})]}),x3=()=>m.jsxs("section",{className:"pt-28 pb-12 px-6 relative overflow-hidden",children:[m.jsx("div",{className:"absolute inset-0 bg-[radial-gradient(circle_at_50%_20%,rgba(74,222,128,0.08)_0%,transparent_50%)] pointer-events-none"}),m.jsx("div",{className:"max-w-4xl mx-auto text-center relative z-10",children:m.jsxs(tv.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.6},children:[m.jsx("div",{className:"mb-4",children:m.jsx(y3,{})}),m.jsxs("h1",{className:"text-6xl md:text-8xl font-display font-bold tracking-tighter leading-[0.95]",children:[m.jsx("span",{className:"text-wm-muted/40",children:S("hero.noiseWord")}),m.jsx("span",{className:"mx-3 md:mx-5 text-wm-border/50",children:"→"}),m.jsx("span",{className:"text-transparent bg-clip-text bg-gradient-to-r from-wm-green to-emerald-300 text-glow",children:S("hero.signalWord")})]}),m.jsx(v3,{}),m.jsx("p",{className:"text-lg md:text-xl text-wm-muted max-w-xl mx-auto font-light leading-relaxed",children:S("hero.valueProps")}),bv()&&m.jsxs("div",{className:"inline-flex items-center gap-2 px-4 py-2 mt-4 rounded-sm border border-wm-green/30 bg-wm-green/5 text-sm font-mono text-wm-green",children:[m.jsx(JA,{className:"w-4 h-4","aria-hidden":"true"}),S("referral.invitedBanner")]}),m.jsxs("form",{className:"flex flex-col gap-3 max-w-md mx-auto mt-8",onSubmit:i=>{i.preventDefault();const a=i.currentTarget,l=new FormData(a).get("email");Sv(l,a)},children:[m.jsx("input",{type:"text",name:"website",autoComplete:"off",tabIndex:-1,"aria-hidden":"true",className:"absolute opacity-0 h-0 w-0 pointer-events-none"}),m.jsxs("div",{className:"flex flex-col sm:flex-row gap-3",children:[m.jsx("input",{type:"email",name:"email",placeholder:S("hero.emailPlaceholder"),className:"flex-1 bg-wm-card border border-wm-border rounded-sm px-4 py-3 text-sm focus:outline-none focus:border-wm-green transition-colors font-mono",required:!0,"aria-label":S("hero.emailAriaLabel")}),m.jsxs("button",{type:"submit",className:"bg-wm-green text-wm-bg px-6 py-3 rounded-sm font-mono text-sm uppercase tracking-wider font-bold hover:bg-green-400 transition-colors flex items-center justify-center gap-2 whitespace-nowrap",children:[S("hero.reserveEarlyAccess")," ",m.jsx(bi,{className:"w-4 h-4","aria-hidden":"true"})]})]}),m.jsx("div",{className:"cf-turnstile mx-auto"})]}),m.jsxs("div",{className:"flex items-center justify-center gap-4 mt-4",children:[m.jsx("p",{className:"text-xs text-wm-muted font-mono",children:S("hero.launchingDate")}),m.jsx("span",{className:"text-wm-border",children:"|"}),m.jsxs("a",{href:"https://worldmonitor.app",className:"text-xs text-wm-green font-mono hover:text-green-300 transition-colors flex items-center gap-1",children:[S("hero.tryFreeDashboard")," ",m.jsx(bi,{className:"w-3 h-3","aria-hidden":"true"})]})]})]})})]}),b3=()=>m.jsx("section",{className:"border-y border-wm-border bg-wm-card/30 py-16 px-6",children:m.jsxs("div",{className:"max-w-5xl mx-auto",children:[m.jsx("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-8 text-center mb-12",children:[{value:"2M+",label:S("socialProof.uniqueVisitors")},{value:"421K",label:S("socialProof.peakDailyUsers")},{value:"190+",label:S("socialProof.countriesReached")},{value:"435+",label:S("socialProof.liveDataSources")}].map((i,a)=>m.jsxs("div",{children:[m.jsx("p",{className:"text-3xl md:text-4xl font-display font-bold text-wm-green",children:i.value}),m.jsx("p",{className:"text-xs font-mono text-wm-muted uppercase tracking-widest mt-1",children:i.label})]},a))}),m.jsxs("blockquote",{className:"max-w-3xl mx-auto text-center",children:[m.jsxs("p",{className:"text-lg md:text-xl text-wm-muted italic leading-relaxed",children:['"',S("socialProof.quote"),'"']}),m.jsx("footer",{className:"mt-6 flex items-center justify-center gap-3",children:m.jsx("a",{href:"https://www.wired.me/story/the-music-streaming-ceo-who-built-a-global-war-map",target:"_blank",rel:"noreferrer",className:"inline-flex items-center gap-2 text-wm-muted hover:text-wm-text transition-colors",children:m.jsx("img",{src:u3,alt:"WIRED",className:"h-5 brightness-0 invert opacity-60 hover:opacity-100 transition-opacity"})})})]})]})}),S3=()=>m.jsxs("section",{className:"py-24 px-6 max-w-5xl mx-auto",id:"tiers",children:[m.jsx("h2",{className:"sr-only",children:"Plans"}),m.jsxs("div",{className:"grid md:grid-cols-2 gap-8",children:[m.jsxs("div",{className:"bg-wm-card border border-wm-green p-8 relative border-glow",children:[m.jsx("div",{className:"absolute top-0 left-0 w-full h-1 bg-wm-green"}),m.jsx("h3",{className:"font-display text-2xl font-bold mb-2",children:S("twoPath.proTitle")}),m.jsx("p",{className:"text-sm text-wm-muted mb-6",children:S("twoPath.proDesc")}),m.jsx("ul",{className:"space-y-3 mb-8",children:[S("twoPath.proF1"),S("twoPath.proF2"),S("twoPath.proF3"),S("twoPath.proF4"),S("twoPath.proF5"),S("twoPath.proF6"),S("twoPath.proF7"),S("twoPath.proF8"),S("twoPath.proF9")].map((i,a)=>m.jsxs("li",{className:"flex items-start gap-3 text-sm",children:[m.jsx(Jg,{className:"w-4 h-4 shrink-0 mt-0.5 text-wm-green","aria-hidden":"true"}),m.jsx("span",{className:"text-wm-muted",children:i})]},a))}),m.jsx("a",{href:"#waitlist",className:"block text-center py-2.5 rounded-sm font-mono text-xs uppercase tracking-wider font-bold bg-wm-green text-wm-bg hover:bg-green-400 transition-colors",children:S("twoPath.proCta")})]}),m.jsxs("div",{className:"bg-wm-card border border-wm-border p-8",children:[m.jsx("h3",{className:"font-display text-2xl font-bold mb-2",children:S("twoPath.entTitle")}),m.jsx("p",{className:"text-sm text-wm-muted mb-6",children:S("twoPath.entDesc")}),m.jsxs("ul",{className:"space-y-3 mb-8",children:[m.jsx("li",{className:"text-xs font-mono text-wm-green uppercase tracking-wider mb-1",children:S("twoPath.entF1")}),[S("twoPath.entF2"),S("twoPath.entF3"),S("twoPath.entF4"),S("twoPath.entF5"),S("twoPath.entF6"),S("twoPath.entF7"),S("twoPath.entF8"),S("twoPath.entF9"),S("twoPath.entF10"),S("twoPath.entF11")].map((i,a)=>m.jsxs("li",{className:"flex items-start gap-3 text-sm",children:[m.jsx(Jg,{className:"w-4 h-4 shrink-0 mt-0.5 text-wm-muted","aria-hidden":"true"}),m.jsx("span",{className:"text-wm-muted",children:i})]},a))]}),m.jsx("a",{href:"#enterprise",className:"block text-center py-2.5 rounded-sm font-mono text-xs uppercase tracking-wider font-bold border border-wm-border text-wm-muted hover:text-wm-text hover:border-wm-text transition-colors",children:S("twoPath.entCta")})]})]})]}),w3=()=>{const i=[{icon:m.jsx(xA,{className:"w-6 h-6","aria-hidden":"true"}),title:S("whyUpgrade.noiseTitle"),desc:S("whyUpgrade.noiseDesc")},{icon:m.jsx(uv,{className:"w-6 h-6","aria-hidden":"true"}),title:S("whyUpgrade.fasterTitle"),desc:S("whyUpgrade.fasterDesc")},{icon:m.jsx(KA,{className:"w-6 h-6","aria-hidden":"true"}),title:S("whyUpgrade.controlTitle"),desc:S("whyUpgrade.controlDesc")},{icon:m.jsx(ov,{className:"w-6 h-6","aria-hidden":"true"}),title:S("whyUpgrade.deeperTitle"),desc:S("whyUpgrade.deeperDesc")}];return m.jsx("section",{className:"py-24 px-6 border-t border-wm-border bg-wm-card/20",children:m.jsxs("div",{className:"max-w-5xl mx-auto",children:[m.jsx("h2",{className:"text-3xl md:text-5xl font-display font-bold mb-16 text-center",children:S("whyUpgrade.title")}),m.jsx("div",{className:"grid md:grid-cols-2 gap-8",children:i.map((a,l)=>m.jsxs("div",{className:"flex gap-5",children:[m.jsx("div",{className:"text-wm-green shrink-0 mt-1",children:a.icon}),m.jsxs("div",{children:[m.jsx("h3",{className:"font-bold text-lg mb-2",children:a.title}),m.jsx("p",{className:"text-sm text-wm-muted leading-relaxed",children:a.desc})]})]},l))})]})})},T3=()=>m.jsx("section",{className:"px-6 py-16",children:m.jsxs("div",{className:"max-w-6xl mx-auto",children:[m.jsxs("div",{className:"relative rounded-lg overflow-hidden border border-wm-border shadow-2xl shadow-wm-green/5",children:[m.jsxs("div",{className:"bg-wm-card px-4 py-2 border-b border-wm-border flex items-center gap-3",children:[m.jsxs("div",{className:"flex gap-1.5",children:[m.jsx("div",{className:"w-3 h-3 rounded-full bg-red-500/70"}),m.jsx("div",{className:"w-3 h-3 rounded-full bg-yellow-500/70"}),m.jsx("div",{className:"w-3 h-3 rounded-full bg-green-500/70"})]}),m.jsx("span",{className:"font-mono text-xs text-wm-muted ml-2",children:S("livePreview.windowTitle")}),m.jsxs("a",{href:"https://worldmonitor.app",target:"_blank",rel:"noreferrer",className:"ml-auto text-xs text-wm-green font-mono hover:text-green-300 transition-colors flex items-center gap-1",children:[S("livePreview.openFullScreen")," ",m.jsx(iv,{className:"w-3 h-3","aria-hidden":"true"})]})]}),m.jsxs("div",{className:"relative aspect-[16/9] bg-black",children:[m.jsx("img",{src:o3,alt:"World Monitor Dashboard",className:"absolute inset-0 w-full h-full object-cover"}),m.jsx("iframe",{src:"https://worldmonitor.app?alert=false",title:S("livePreview.iframeTitle"),className:"relative w-full h-full border-0",loading:"lazy",sandbox:"allow-scripts allow-same-origin allow-popups allow-popups-to-escape-sandbox"}),m.jsx("div",{className:"absolute inset-0 pointer-events-none bg-gradient-to-t from-wm-bg/80 via-transparent to-transparent"}),m.jsx("div",{className:"absolute bottom-4 left-0 right-0 text-center pointer-events-auto",children:m.jsxs("a",{href:"https://worldmonitor.app",target:"_blank",rel:"noreferrer",className:"inline-flex items-center gap-2 bg-wm-green text-wm-bg px-6 py-3 rounded-sm font-mono text-sm uppercase tracking-wider font-bold hover:bg-green-400 transition-colors",children:[S("livePreview.tryLiveDashboard")," ",m.jsx(bi,{className:"w-4 h-4","aria-hidden":"true"})]})})]})]}),m.jsx("p",{className:"text-center text-xs text-wm-muted font-mono mt-4",children:S("livePreview.description")})]})}),A3=()=>{const a=["Finnhub","FRED","Bloomberg","CNBC","Nikkei","CoinGecko","Polymarket","Reuters","ACLED","UCDP","GDELT","NASA FIRMS","USGS","OpenSky","AISStream","Cloudflare Radar","BGPStream","GPSJam","NOAA","Copernicus","IAEA","Al Jazeera","Sky News","Euronews","DW News","France 24","OilPrice","Rigzone","Maritime Executive","Hellenic Shipping News","Defense One","Jane's","The War Zone","TechCrunch","Ars Technica","The Verge","Wired","Krebs on Security","BleepingComputer","The Record"].join(" · ");return m.jsx("section",{className:"border-y border-wm-border bg-wm-card/20 overflow-hidden py-4","aria-label":"Data sources",children:m.jsxs("div",{className:"marquee-track whitespace-nowrap font-mono text-xs text-wm-muted uppercase tracking-widest",children:[m.jsxs("span",{className:"inline-block px-4",children:[a," · "]}),m.jsxs("span",{className:"inline-block px-4",children:[a," · "]})]})})},E3=()=>m.jsx("section",{className:"py-24 px-6 border-t border-wm-border bg-wm-card/30",id:"pro",children:m.jsxs("div",{className:"max-w-7xl mx-auto grid lg:grid-cols-2 gap-16 items-start",children:[m.jsxs("div",{children:[m.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full border border-wm-green/30 bg-wm-green/10 text-wm-green text-xs font-mono mb-6",children:S("proShowcase.proTier")}),m.jsx("h2",{className:"text-3xl md:text-5xl font-display font-bold mb-6",children:S("proShowcase.title")}),m.jsx("p",{className:"text-wm-muted mb-8",children:S("proShowcase.subtitle")}),m.jsxs("div",{className:"space-y-6",children:[m.jsxs("div",{className:"flex gap-4",children:[m.jsx(uv,{className:"w-6 h-6 text-wm-green shrink-0","aria-hidden":"true"}),m.jsxs("div",{children:[m.jsx("h3",{className:"font-bold mb-1",children:S("proShowcase.equityResearch")}),m.jsx("p",{className:"text-sm text-wm-muted",children:S("proShowcase.equityResearchDesc")})]})]}),m.jsxs("div",{className:"flex gap-4",children:[m.jsx(br,{className:"w-6 h-6 text-wm-green shrink-0","aria-hidden":"true"}),m.jsxs("div",{children:[m.jsx("h3",{className:"font-bold mb-1",children:S("proShowcase.geopoliticalAnalysis")}),m.jsx("p",{className:"text-sm text-wm-muted",children:S("proShowcase.geopoliticalAnalysisDesc")})]})]}),m.jsxs("div",{className:"flex gap-4",children:[m.jsx(Sf,{className:"w-6 h-6 text-wm-green shrink-0","aria-hidden":"true"}),m.jsxs("div",{children:[m.jsx("h3",{className:"font-bold mb-1",children:S("proShowcase.economyAnalytics")}),m.jsx("p",{className:"text-sm text-wm-muted",children:S("proShowcase.economyAnalyticsDesc")})]})]}),m.jsxs("div",{className:"flex gap-4",children:[m.jsx(wf,{className:"w-6 h-6 text-wm-green shrink-0","aria-hidden":"true"}),m.jsxs("div",{children:[m.jsx("h3",{className:"font-bold mb-1",children:S("proShowcase.riskMonitoring")}),m.jsx("p",{className:"text-sm text-wm-muted",children:S("proShowcase.riskMonitoringDesc")})]})]}),m.jsxs("div",{className:"flex gap-4",children:[m.jsx(ov,{className:"w-6 h-6 text-wm-green shrink-0","aria-hidden":"true"}),m.jsxs("div",{children:[m.jsx("h4",{className:"font-bold mb-1",children:S("proShowcase.orbitalSurveillance")}),m.jsx("p",{className:"text-sm text-wm-muted",children:S("proShowcase.orbitalSurveillanceDesc")})]})]}),m.jsxs("div",{className:"flex gap-4",children:[m.jsx(fA,{className:"w-6 h-6 text-wm-green shrink-0","aria-hidden":"true"}),m.jsxs("div",{children:[m.jsx("h3",{className:"font-bold mb-1",children:S("proShowcase.morningBriefs")}),m.jsx("p",{className:"text-sm text-wm-muted",children:S("proShowcase.morningBriefsDesc")})]})]}),m.jsxs("div",{className:"flex gap-4",children:[m.jsx(wA,{className:"w-6 h-6 text-wm-green shrink-0","aria-hidden":"true"}),m.jsxs("div",{children:[m.jsx("h3",{className:"font-bold mb-1",children:S("proShowcase.oneKey")}),m.jsx("p",{className:"text-sm text-wm-muted",children:S("proShowcase.oneKeyDesc")})]})]})]}),m.jsxs("div",{className:"mt-10 pt-8 border-t border-wm-border",children:[m.jsx("p",{className:"font-mono text-xs text-wm-muted uppercase tracking-widest mb-4",children:S("proShowcase.deliveryLabel")}),m.jsx("div",{className:"flex gap-6",children:[{icon:m.jsx(p3,{}),label:"Slack"},{icon:m.jsx(BA,{className:"w-5 h-5","aria-hidden":"true"}),label:"Telegram"},{icon:m.jsx(OA,{className:"w-5 h-5","aria-hidden":"true"}),label:"WhatsApp"},{icon:m.jsx(MA,{className:"w-5 h-5","aria-hidden":"true"}),label:"Email"},{icon:m.jsx(LA,{className:"w-5 h-5","aria-hidden":"true"}),label:"Discord"}].map((i,a)=>m.jsxs("div",{className:"flex flex-col items-center gap-1.5 text-wm-muted hover:text-wm-text transition-colors cursor-pointer",children:[i.icon,m.jsx("span",{className:"text-[10px] font-mono",children:i.label})]},a))})]})]}),m.jsxs("div",{className:"bg-[#1a1d21] rounded-lg border border-[#35373b] overflow-hidden shadow-2xl sticky top-24",children:[m.jsxs("div",{className:"bg-[#222529] px-4 py-3 border-b border-[#35373b] flex items-center gap-3",children:[m.jsx("div",{className:"w-3 h-3 rounded-full bg-red-500"}),m.jsx("div",{className:"w-3 h-3 rounded-full bg-yellow-500"}),m.jsx("div",{className:"w-3 h-3 rounded-full bg-green-500"}),m.jsx("span",{className:"ml-2 font-mono text-xs text-gray-400",children:"#world-monitor-alerts"})]}),m.jsx("div",{className:"p-6 space-y-6 font-sans text-sm",children:m.jsxs("div",{className:"flex gap-4",children:[m.jsx("div",{className:"w-10 h-10 rounded bg-wm-green/20 flex items-center justify-center shrink-0",children:m.jsx(br,{className:"w-6 h-6 text-wm-green","aria-hidden":"true"})}),m.jsxs("div",{children:[m.jsxs("div",{className:"flex items-baseline gap-2 mb-1",children:[m.jsx("span",{className:"font-bold text-gray-200",children:"World Monitor"}),m.jsx("span",{className:"text-xs text-gray-500 bg-gray-800 px-1 rounded",children:"APP"}),m.jsx("span",{className:"text-xs text-gray-500",children:"8:00 AM"})]}),m.jsxs("p",{className:"text-gray-300 font-bold mb-3",children:[S("slackMock.morningBrief")," · Mar 6"]}),m.jsxs("div",{className:"space-y-3",children:[m.jsxs("div",{className:"pl-3 border-l-2 border-blue-500",children:[m.jsx("span",{className:"text-blue-400 font-bold text-xs uppercase tracking-wider",children:S("slackMock.markets")}),m.jsx("p",{className:"text-gray-300 mt-1",children:S("slackMock.marketsText")})]}),m.jsxs("div",{className:"pl-3 border-l-2 border-orange-500",children:[m.jsx("span",{className:"text-orange-400 font-bold text-xs uppercase tracking-wider",children:S("slackMock.elevated")}),m.jsx("p",{className:"text-gray-300 mt-1",children:S("slackMock.elevatedText")})]}),m.jsxs("div",{className:"pl-3 border-l-2 border-yellow-500",children:[m.jsx("span",{className:"text-yellow-400 font-bold text-xs uppercase tracking-wider",children:S("slackMock.watch")}),m.jsx("p",{className:"text-gray-300 mt-1",children:S("slackMock.watchText")})]})]})]})]})})]})]})}),j3=()=>{const i=[{icon:m.jsx(lA,{className:"w-6 h-6","aria-hidden":"true"}),title:S("audience.investorsTitle"),desc:S("audience.investorsDesc")},{icon:m.jsx(yA,{className:"w-6 h-6","aria-hidden":"true"}),title:S("audience.tradersTitle"),desc:S("audience.tradersDesc")},{icon:m.jsx(kA,{className:"w-6 h-6","aria-hidden":"true"}),title:S("audience.researchersTitle"),desc:S("audience.researchersDesc")},{icon:m.jsx(br,{className:"w-6 h-6","aria-hidden":"true"}),title:S("audience.journalistsTitle"),desc:S("audience.journalistsDesc")},{icon:m.jsx(AA,{className:"w-6 h-6","aria-hidden":"true"}),title:S("audience.govTitle"),desc:S("audience.govDesc")},{icon:m.jsx(aA,{className:"w-6 h-6","aria-hidden":"true"}),title:S("audience.teamsTitle"),desc:S("audience.teamsDesc")}];return m.jsx("section",{className:"py-24 px-6",children:m.jsxs("div",{className:"max-w-5xl mx-auto",children:[m.jsx("h2",{className:"text-3xl md:text-5xl font-display font-bold mb-16 text-center",children:S("audience.title")}),m.jsx("div",{className:"grid md:grid-cols-3 gap-6",children:i.map((a,l)=>m.jsxs("div",{className:"bg-wm-card border border-wm-border p-6 hover:border-wm-green/30 transition-colors",children:[m.jsx("div",{className:"text-wm-green mb-4",children:a.icon}),m.jsx("h3",{className:"font-bold mb-2",children:a.title}),m.jsx("p",{className:"text-sm text-wm-muted",children:a.desc})]},l))})]})})},N3=()=>m.jsx("section",{className:"py-24 px-6 border-y border-wm-border bg-[#0a0a0a]",id:"api",children:m.jsxs("div",{className:"max-w-7xl mx-auto grid lg:grid-cols-2 gap-16 items-center",children:[m.jsx("div",{className:"order-2 lg:order-1",children:m.jsxs("div",{className:"bg-black border border-wm-border rounded-lg overflow-hidden font-mono text-sm",children:[m.jsxs("div",{className:"bg-wm-card px-4 py-2 border-b border-wm-border flex items-center gap-2",children:[m.jsx(FA,{className:"w-4 h-4 text-wm-muted","aria-hidden":"true"}),m.jsx("span",{className:"text-wm-muted text-xs",children:"api.worldmonitor.app"})]}),m.jsx("div",{className:"p-6 text-gray-300 overflow-x-auto",children:m.jsx("pre",{children:m.jsxs("code",{children:[m.jsx("span",{className:"text-wm-blue",children:"curl"})," \\",m.jsx("br",{}),m.jsx("span",{className:"text-wm-green",children:'"https://api.worldmonitor.app/v1/intelligence/convergence?region=MENA&time_window=6h"'})," \\",m.jsx("br",{}),"-H ",m.jsx("span",{className:"text-wm-green",children:'"Authorization: Bearer wm_live_xxx"'}),m.jsx("br",{}),m.jsx("br",{}),m.jsx("span",{className:"text-wm-muted",children:"{"}),m.jsx("br",{}),m.jsx("span",{className:"text-wm-blue",children:'"status"'}),": ",m.jsx("span",{className:"text-wm-green",children:'"success"'}),",",m.jsx("br",{}),m.jsx("span",{className:"text-wm-blue",children:'"data"'}),": ",m.jsx("span",{className:"text-wm-muted",children:"["}),m.jsx("br",{}),m.jsx("span",{className:"text-wm-muted",children:"{"}),m.jsx("br",{}),m.jsx("span",{className:"text-wm-blue",children:'"type"'}),": ",m.jsx("span",{className:"text-wm-green",children:'"multi_signal_convergence"'}),",",m.jsx("br",{}),m.jsx("span",{className:"text-wm-blue",children:'"signals"'}),": ",m.jsx("span",{className:"text-wm-muted",children:'["military_flights", "ais_dark_ships", "oref_sirens"]'}),",",m.jsx("br",{}),m.jsx("span",{className:"text-wm-blue",children:'"confidence"'}),": ",m.jsx("span",{className:"text-orange-400",children:"0.92"}),",",m.jsx("br",{}),m.jsx("span",{className:"text-wm-blue",children:'"location"'}),": ",m.jsx("span",{className:"text-wm-muted",children:"{"})," ",m.jsx("span",{className:"text-wm-blue",children:'"lat"'}),": ",m.jsx("span",{className:"text-orange-400",children:"34.05"}),", ",m.jsx("span",{className:"text-wm-blue",children:'"lng"'}),": ",m.jsx("span",{className:"text-orange-400",children:"35.12"})," ",m.jsx("span",{className:"text-wm-muted",children:"}"}),m.jsx("br",{}),m.jsx("span",{className:"text-wm-muted",children:"}"}),m.jsx("br",{}),m.jsx("span",{className:"text-wm-muted",children:"]"}),m.jsx("br",{}),m.jsx("span",{className:"text-wm-muted",children:"}"})]})})})]})}),m.jsxs("div",{className:"order-1 lg:order-2",children:[m.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full border border-wm-border bg-wm-card text-wm-muted text-xs font-mono mb-6",children:S("apiSection.apiTier")}),m.jsx("h2",{className:"text-3xl md:text-5xl font-display font-bold mb-6",children:S("apiSection.title")}),m.jsx("p",{className:"text-wm-muted mb-8",children:S("apiSection.subtitle")}),m.jsxs("ul",{className:"space-y-4 mb-8",children:[m.jsxs("li",{className:"flex items-start gap-3",children:[m.jsx(qA,{className:"w-5 h-5 text-wm-muted shrink-0","aria-hidden":"true"}),m.jsx("span",{className:"text-sm",children:S("apiSection.restApi")})]}),m.jsxs("li",{className:"flex items-start gap-3",children:[m.jsx(NA,{className:"w-5 h-5 text-wm-muted shrink-0","aria-hidden":"true"}),m.jsx("span",{className:"text-sm",children:S("apiSection.authenticated")})]}),m.jsxs("li",{className:"flex items-start gap-3",children:[m.jsx(mA,{className:"w-5 h-5 text-wm-muted shrink-0","aria-hidden":"true"}),m.jsx("span",{className:"text-sm",children:S("apiSection.structured")})]})]}),m.jsxs("div",{className:"grid grid-cols-2 gap-4 mb-8 p-4 bg-wm-card border border-wm-border rounded-sm",children:[m.jsxs("div",{children:[m.jsx("p",{className:"font-mono text-xs text-wm-muted uppercase tracking-widest mb-2",children:S("apiSection.starter")}),m.jsx("p",{className:"text-sm font-bold",children:S("apiSection.starterReqs")}),m.jsx("p",{className:"text-xs text-wm-muted",children:S("apiSection.starterWebhooks")})]}),m.jsxs("div",{children:[m.jsx("p",{className:"font-mono text-xs text-wm-muted uppercase tracking-widest mb-2",children:S("apiSection.business")}),m.jsx("p",{className:"text-sm font-bold",children:S("apiSection.businessReqs")}),m.jsx("p",{className:"text-xs text-wm-muted",children:S("apiSection.businessWebhooks")})]})]}),m.jsx("p",{className:"text-sm text-wm-muted border-l-2 border-wm-border pl-4",children:S("apiSection.feedData")})]})]})}),D3=()=>m.jsx("section",{className:"py-24 px-6",id:"enterprise",children:m.jsxs("div",{className:"max-w-7xl mx-auto",children:[m.jsxs("div",{className:"text-center mb-16",children:[m.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full border border-wm-border bg-wm-card text-wm-muted text-xs font-mono mb-6",children:S("enterpriseShowcase.enterpriseTier")}),m.jsx("h2",{className:"text-3xl md:text-5xl font-display font-bold mb-6",children:S("enterpriseShowcase.title")}),m.jsx("p",{className:"text-wm-muted max-w-2xl mx-auto",children:S("enterpriseShowcase.subtitle")})]}),m.jsxs("div",{className:"grid md:grid-cols-3 gap-6 mb-6",children:[m.jsxs("div",{className:"bg-wm-card border border-wm-border p-6",children:[m.jsx(wf,{className:"w-8 h-8 text-wm-muted mb-4","aria-hidden":"true"}),m.jsx("h3",{className:"font-bold mb-2",children:S("enterpriseShowcase.security")}),m.jsx("p",{className:"text-sm text-wm-muted",children:S("enterpriseShowcase.securityDesc")})]}),m.jsxs("div",{className:"bg-wm-card border border-wm-border p-6",children:[m.jsx(av,{className:"w-8 h-8 text-wm-muted mb-4","aria-hidden":"true"}),m.jsx("h3",{className:"font-bold mb-2",children:S("enterpriseShowcase.aiAgents")}),m.jsx("p",{className:"text-sm text-wm-muted",children:S("enterpriseShowcase.aiAgentsDesc")})]}),m.jsxs("div",{className:"bg-wm-card border border-wm-border p-6",children:[m.jsx(sv,{className:"w-8 h-8 text-wm-muted mb-4","aria-hidden":"true"}),m.jsx("h3",{className:"font-bold mb-2",children:S("enterpriseShowcase.dataLayers")}),m.jsx("p",{className:"text-sm text-wm-muted",children:S("enterpriseShowcase.dataLayersDesc")})]})]}),m.jsxs("div",{className:"grid md:grid-cols-3 gap-6 mb-12",children:[m.jsxs("div",{className:"bg-wm-card border border-wm-border p-6",children:[m.jsx(rv,{className:"w-8 h-8 text-wm-muted mb-4","aria-hidden":"true"}),m.jsx("h3",{className:"font-bold mb-2",children:S("enterpriseShowcase.connectors")}),m.jsx("p",{className:"text-sm text-wm-muted",children:S("enterpriseShowcase.connectorsDesc")})]}),m.jsxs("div",{className:"bg-wm-card border border-wm-border p-6",children:[m.jsx(lv,{className:"w-8 h-8 text-wm-muted mb-4","aria-hidden":"true"}),m.jsx("h3",{className:"font-bold mb-2",children:S("enterpriseShowcase.whiteLabel")}),m.jsx("p",{className:"text-sm text-wm-muted",children:S("enterpriseShowcase.whiteLabelDesc")})]}),m.jsxs("div",{className:"bg-wm-card border border-wm-border p-6",children:[m.jsx(Sf,{className:"w-8 h-8 text-wm-muted mb-4","aria-hidden":"true"}),m.jsx("h3",{className:"font-bold mb-2",children:S("enterpriseShowcase.financial")}),m.jsx("p",{className:"text-sm text-wm-muted",children:S("enterpriseShowcase.financialDesc")})]})]}),m.jsxs("div",{className:"data-grid mb-12",children:[m.jsxs("div",{className:"data-cell",children:[m.jsx("h4",{className:"font-mono text-xs text-wm-muted uppercase tracking-widest mb-2",children:S("enterpriseShowcase.commodity")}),m.jsx("p",{className:"text-sm",children:S("enterpriseShowcase.commodityDesc")})]}),m.jsxs("div",{className:"data-cell",children:[m.jsx("h4",{className:"font-mono text-xs text-wm-muted uppercase tracking-widest mb-2",children:S("enterpriseShowcase.government")}),m.jsx("p",{className:"text-sm",children:S("enterpriseShowcase.governmentDesc")})]}),m.jsxs("div",{className:"data-cell",children:[m.jsx("h4",{className:"font-mono text-xs text-wm-muted uppercase tracking-widest mb-2",children:S("enterpriseShowcase.risk")}),m.jsx("p",{className:"text-sm",children:S("enterpriseShowcase.riskDesc")})]}),m.jsxs("div",{className:"data-cell",children:[m.jsx("h4",{className:"font-mono text-xs text-wm-muted uppercase tracking-widest mb-2",children:S("enterpriseShowcase.soc")}),m.jsx("p",{className:"text-sm",children:S("enterpriseShowcase.socDesc")})]})]}),m.jsx("div",{className:"text-center mt-12",children:m.jsxs("a",{href:"#enterprise-contact","aria-label":"Talk to sales about Enterprise plans",className:"inline-flex items-center gap-2 bg-wm-green text-wm-bg px-8 py-3 rounded-sm font-mono text-sm uppercase tracking-wider font-bold hover:bg-green-400 transition-colors",children:[S("enterpriseShowcase.talkToSales")," ",m.jsx(bi,{className:"w-4 h-4","aria-hidden":"true"})]})})]})}),M3=()=>{const i=[{feature:S("pricingTable.dataRefresh"),free:S("pricingTable.f5_15min"),pro:S("pricingTable.fLt60s"),api:S("pricingTable.fPerRequest"),ent:S("pricingTable.fLiveEdge")},{feature:S("pricingTable.dashboard"),free:S("pricingTable.f50panels"),pro:S("pricingTable.f50panels"),api:"—",ent:S("pricingTable.fWhiteLabel")},{feature:S("pricingTable.ai"),free:S("pricingTable.fBYOK"),pro:S("pricingTable.fIncluded"),api:"—",ent:S("pricingTable.fAgentsPersonas")},{feature:S("pricingTable.briefsAlerts"),free:"—",pro:S("pricingTable.fDailyFlash"),api:"—",ent:S("pricingTable.fTeamDist")},{feature:S("pricingTable.delivery"),free:"—",pro:S("pricingTable.fSlackTgWa"),api:S("pricingTable.fWebhook"),ent:S("pricingTable.fSiemMcp")},{feature:S("pricingTable.apiRow"),free:"—",pro:"—",api:S("pricingTable.fRestWebhook"),ent:S("pricingTable.fMcpBulk")},{feature:S("pricingTable.infraLayers"),free:S("pricingTable.f45"),pro:S("pricingTable.f45"),api:"—",ent:S("pricingTable.fTensOfThousands")},{feature:S("pricingTable.satellite"),free:S("pricingTable.fLiveTracking"),pro:S("pricingTable.fPassAlerts"),api:"—",ent:S("pricingTable.fImagerySar")},{feature:S("pricingTable.connectorsRow"),free:"—",pro:"—",api:"—",ent:S("pricingTable.f100plus")},{feature:S("pricingTable.deployment"),free:S("pricingTable.fCloud"),pro:S("pricingTable.fCloud"),api:S("pricingTable.fCloud"),ent:S("pricingTable.fCloudOnPrem")},{feature:S("pricingTable.securityRow"),free:S("pricingTable.fStandard"),pro:S("pricingTable.fStandard"),api:S("pricingTable.fKeyAuth"),ent:S("pricingTable.fSsoMfa")}];return m.jsxs("section",{className:"py-24 px-6 max-w-7xl mx-auto",children:[m.jsx("div",{className:"text-center mb-16",children:m.jsx("h2",{className:"text-3xl md:text-5xl font-display font-bold mb-6",children:S("pricingTable.title")})}),m.jsxs("div",{className:"hidden md:block",children:[m.jsxs("div",{className:"grid grid-cols-5 gap-4 mb-4 pb-4 border-b border-wm-border font-mono text-xs uppercase tracking-widest text-wm-muted",children:[m.jsx("div",{children:S("pricingTable.feature")}),m.jsx("div",{children:S("pricingTable.freeHeader")}),m.jsx("div",{className:"text-wm-green",children:S("pricingTable.proHeader")}),m.jsx("div",{children:S("pricingTable.apiHeader")}),m.jsx("div",{children:S("pricingTable.entHeader")})]}),i.map((a,l)=>m.jsxs("div",{className:"grid grid-cols-5 gap-4 py-4 border-b border-wm-border/50 text-sm hover:bg-wm-card/50 transition-colors",children:[m.jsx("div",{className:"font-medium",children:a.feature}),m.jsx("div",{className:"text-wm-muted",children:a.free}),m.jsx("div",{className:"text-wm-green",children:a.pro}),m.jsx("div",{className:"text-wm-muted",children:a.api}),m.jsx("div",{className:"text-wm-muted",children:a.ent})]},l))]}),m.jsx("div",{className:"md:hidden space-y-4",children:i.map((a,l)=>m.jsxs("div",{className:"bg-wm-card border border-wm-border p-4 rounded-sm",children:[m.jsx("p",{className:"font-medium text-sm mb-3",children:a.feature}),m.jsxs("div",{className:"grid grid-cols-2 gap-2 text-xs",children:[m.jsxs("div",{children:[m.jsxs("span",{className:"text-wm-muted",children:[S("tiers.free"),":"]})," ",a.free]}),m.jsxs("div",{children:[m.jsxs("span",{className:"text-wm-green",children:[S("tiers.pro"),":"]})," ",m.jsx("span",{className:"text-wm-green",children:a.pro})]}),m.jsxs("div",{children:[m.jsxs("span",{className:"text-wm-muted",children:[S("nav.api"),":"]})," ",a.api]}),m.jsxs("div",{children:[m.jsxs("span",{className:"text-wm-muted",children:[S("tiers.enterprise"),":"]})," ",a.ent]})]})]},l))}),m.jsx("p",{className:"text-center text-sm text-wm-muted mt-8",children:S("pricingTable.noteBelow")})]})},C3=()=>{const i=[{q:S("faq.q1"),a:S("faq.a1"),open:!0},{q:S("faq.q2"),a:S("faq.a2")},{q:S("faq.q3"),a:S("faq.a3")},{q:S("faq.q4"),a:S("faq.a4")},{q:S("faq.q5"),a:S("faq.a5")},{q:S("faq.q6"),a:S("faq.a6")},{q:S("faq.q7"),a:S("faq.a7")},{q:S("faq.q8"),a:S("faq.a8")}];return m.jsxs("section",{className:"py-24 px-6 max-w-3xl mx-auto",children:[m.jsx("h2",{className:"text-3xl font-display font-bold mb-12 text-center",children:S("faq.title")}),m.jsx("div",{className:"space-y-4",children:i.map((a,l)=>m.jsxs("details",{open:a.open,className:"group bg-wm-card border border-wm-border rounded-sm [&_summary::-webkit-details-marker]:hidden",children:[m.jsxs("summary",{className:"flex items-center justify-between p-6 cursor-pointer font-medium",children:[a.q,m.jsx(uA,{className:"w-5 h-5 text-wm-muted group-open:rotate-180 transition-transform","aria-hidden":"true"})]}),m.jsx("div",{className:"px-6 pb-6 text-wm-muted text-sm border-t border-wm-border pt-4 mt-2",children:a.a})]},l))})]})},O3=()=>m.jsxs("footer",{className:"border-t border-wm-border bg-[#020202] pt-24 pb-12 px-6 text-center",id:"waitlist",children:[m.jsxs("div",{className:"max-w-2xl mx-auto mb-16",children:[m.jsx("h2",{className:"text-4xl font-display font-bold mb-4",children:S("finalCta.title")}),m.jsx("p",{className:"text-wm-muted mb-8",children:S("finalCta.subtitle")}),m.jsxs("form",{className:"flex flex-col gap-3 max-w-md mx-auto mb-6",onSubmit:i=>{i.preventDefault();const a=i.currentTarget,l=new FormData(a).get("email");Sv(l,a)},children:[m.jsx("input",{type:"text",name:"website",autoComplete:"off",tabIndex:-1,"aria-hidden":"true",className:"absolute opacity-0 h-0 w-0 pointer-events-none"}),m.jsxs("div",{className:"flex flex-col sm:flex-row gap-3",children:[m.jsx("input",{type:"email",name:"email",placeholder:S("hero.emailPlaceholder"),className:"flex-1 bg-wm-card border border-wm-border rounded-sm px-4 py-3 text-sm focus:outline-none focus:border-wm-green transition-colors font-mono",required:!0,"aria-label":S("hero.emailAriaLabel")}),m.jsx("button",{type:"submit",className:"bg-wm-green text-wm-bg px-6 py-3 rounded-sm font-mono text-sm uppercase tracking-wider font-bold hover:bg-green-400 transition-colors whitespace-nowrap",children:S("finalCta.getPro")})]}),m.jsx("div",{className:"cf-turnstile mx-auto"})]}),m.jsxs("a",{href:"#enterprise-contact",className:"inline-flex items-center gap-2 text-sm text-wm-muted hover:text-wm-text transition-colors font-mono",children:[S("finalCta.talkToSales")," ",m.jsx(bi,{className:"w-3 h-3","aria-hidden":"true"})]})]}),m.jsxs("div",{className:"flex flex-col md:flex-row items-center justify-between max-w-7xl mx-auto pt-8 border-t border-wm-border/50 text-xs text-wm-muted font-mono",children:[m.jsxs("div",{className:"flex items-center gap-3 mb-4 md:mb-0",children:[m.jsx("img",{src:"/favico/favicon-32x32.png",alt:"",width:"28",height:"28",className:"rounded-full"}),m.jsxs("div",{className:"flex flex-col",children:[m.jsx("span",{className:"font-display font-bold text-sm leading-none tracking-tight text-wm-text",children:"WORLD MONITOR"}),m.jsx("span",{className:"text-[9px] uppercase tracking-[2px] opacity-60 mt-0.5",children:"by Someone.ceo"})]})]}),m.jsxs("div",{className:"flex items-center gap-6",children:[m.jsx("a",{href:"/",className:"hover:text-wm-text transition-colors",children:"Dashboard"}),m.jsx("a",{href:"https://www.worldmonitor.app/blog/",className:"hover:text-wm-text transition-colors",children:"Blog"}),m.jsx("a",{href:"https://github.com/koala73/worldmonitor",target:"_blank",rel:"noreferrer",className:"hover:text-wm-text transition-colors",children:"GitHub"}),m.jsx("a",{href:"https://github.com/koala73/worldmonitor/discussions",target:"_blank",rel:"noreferrer",className:"hover:text-wm-text transition-colors",children:"Discussions"}),m.jsx("a",{href:"https://x.com/worldmonitorai",target:"_blank",rel:"noreferrer",className:"hover:text-wm-text transition-colors",children:"X"}),m.jsx("a",{href:"https://status.worldmonitor.app/",target:"_blank",rel:"noreferrer",className:"hover:text-wm-text transition-colors",children:"Status"})]}),m.jsxs("span",{className:"text-[10px] opacity-40 mt-4 md:mt-0",children:["© ",new Date().getFullYear()," WorldMonitor"]})]})]}),R3=()=>m.jsxs("div",{className:"min-h-screen selection:bg-wm-green/30 selection:text-wm-green",children:[m.jsx("nav",{className:"fixed top-0 left-0 right-0 z-50 glass-panel border-b-0 border-x-0 rounded-none","aria-label":"Main navigation",children:m.jsxs("div",{className:"max-w-7xl mx-auto px-6 h-16 flex items-center justify-between",children:[m.jsx("a",{href:"#",onClick:i=>{i.preventDefault(),window.location.hash=""},children:m.jsx(wv,{})}),m.jsxs("div",{className:"hidden md:flex items-center gap-8 text-sm font-mono text-wm-muted",children:[m.jsx("a",{href:"#",onClick:i=>{i.preventDefault(),window.location.hash=""},className:"hover:text-wm-text transition-colors",children:S("nav.pro")}),m.jsx("a",{href:"#enterprise",onClick:i=>{var a;i.preventDefault(),(a=document.getElementById("features"))==null||a.scrollIntoView({behavior:"smooth"})},className:"hover:text-wm-text transition-colors",children:S("nav.enterprise")}),m.jsx("a",{href:"#enterprise-contact",onClick:i=>{var a;i.preventDefault(),(a=document.getElementById("contact"))==null||a.scrollIntoView({behavior:"smooth"})},className:"hover:text-wm-green transition-colors",children:S("enterpriseShowcase.talkToSales")})]}),m.jsx("a",{href:"#enterprise-contact",onClick:i=>{var a;i.preventDefault(),(a=document.getElementById("contact"))==null||a.scrollIntoView({behavior:"smooth"})},className:"bg-wm-green text-wm-bg px-4 py-2 rounded-sm font-mono text-xs uppercase tracking-wider font-bold hover:bg-green-400 transition-colors",children:S("enterpriseShowcase.talkToSales")})]})}),m.jsxs("main",{className:"pt-24",children:[m.jsx("section",{className:"py-24 px-6 text-center",children:m.jsxs("div",{className:"max-w-4xl mx-auto",children:[m.jsx("div",{className:"inline-flex items-center gap-2 px-3 py-1 rounded-full border border-wm-border bg-wm-card text-wm-muted text-xs font-mono mb-6",children:S("enterpriseShowcase.enterpriseTier")}),m.jsx("h2",{className:"text-4xl md:text-6xl font-display font-bold mb-6",children:S("enterpriseShowcase.title")}),m.jsx("p",{className:"text-lg text-wm-muted max-w-2xl mx-auto mb-10",children:S("enterpriseShowcase.subtitle")}),m.jsxs("a",{href:"#enterprise-contact",onClick:i=>{var a;i.preventDefault(),(a=document.getElementById("contact"))==null||a.scrollIntoView({behavior:"smooth"})},className:"inline-flex items-center gap-2 bg-wm-green text-wm-bg px-8 py-3 rounded-sm font-mono text-sm uppercase tracking-wider font-bold hover:bg-green-400 transition-colors",children:[S("enterpriseShowcase.talkToSales")," ",m.jsx(bi,{className:"w-4 h-4","aria-hidden":"true"})]})]})}),m.jsx("section",{className:"py-24 px-6",id:"features",children:m.jsxs("div",{className:"max-w-7xl mx-auto",children:[m.jsx("h2",{className:"sr-only",children:"Enterprise Features"}),m.jsxs("div",{className:"grid md:grid-cols-3 gap-6 mb-6",children:[m.jsxs("div",{className:"bg-wm-card border border-wm-border p-6",children:[m.jsx(wf,{className:"w-8 h-8 text-wm-muted mb-4","aria-hidden":"true"}),m.jsx("h3",{className:"font-bold mb-2",children:S("enterpriseShowcase.security")}),m.jsx("p",{className:"text-sm text-wm-muted",children:S("enterpriseShowcase.securityDesc")})]}),m.jsxs("div",{className:"bg-wm-card border border-wm-border p-6",children:[m.jsx(av,{className:"w-8 h-8 text-wm-muted mb-4","aria-hidden":"true"}),m.jsx("h3",{className:"font-bold mb-2",children:S("enterpriseShowcase.aiAgents")}),m.jsx("p",{className:"text-sm text-wm-muted",children:S("enterpriseShowcase.aiAgentsDesc")})]}),m.jsxs("div",{className:"bg-wm-card border border-wm-border p-6",children:[m.jsx(sv,{className:"w-8 h-8 text-wm-muted mb-4","aria-hidden":"true"}),m.jsx("h3",{className:"font-bold mb-2",children:S("enterpriseShowcase.dataLayers")}),m.jsx("p",{className:"text-sm text-wm-muted",children:S("enterpriseShowcase.dataLayersDesc")})]})]}),m.jsxs("div",{className:"grid md:grid-cols-3 gap-6 mb-12",children:[m.jsxs("div",{className:"bg-wm-card border border-wm-border p-6",children:[m.jsx(rv,{className:"w-8 h-8 text-wm-muted mb-4","aria-hidden":"true"}),m.jsx("h3",{className:"font-bold mb-2",children:S("enterpriseShowcase.connectors")}),m.jsx("p",{className:"text-sm text-wm-muted",children:S("enterpriseShowcase.connectorsDesc")})]}),m.jsxs("div",{className:"bg-wm-card border border-wm-border p-6",children:[m.jsx(lv,{className:"w-8 h-8 text-wm-muted mb-4","aria-hidden":"true"}),m.jsx("h3",{className:"font-bold mb-2",children:S("enterpriseShowcase.whiteLabel")}),m.jsx("p",{className:"text-sm text-wm-muted",children:S("enterpriseShowcase.whiteLabelDesc")})]}),m.jsxs("div",{className:"bg-wm-card border border-wm-border p-6",children:[m.jsx(Sf,{className:"w-8 h-8 text-wm-muted mb-4","aria-hidden":"true"}),m.jsx("h3",{className:"font-bold mb-2",children:S("enterpriseShowcase.financial")}),m.jsx("p",{className:"text-sm text-wm-muted",children:S("enterpriseShowcase.financialDesc")})]})]})]})}),m.jsx("section",{className:"py-24 px-6 border-t border-wm-border",children:m.jsxs("div",{className:"max-w-7xl mx-auto",children:[m.jsx("h2",{className:"text-3xl font-display font-bold mb-12 text-center",children:S("enterpriseShowcase.title")}),m.jsxs("div",{className:"data-grid",children:[m.jsxs("div",{className:"data-cell",children:[m.jsx("h3",{className:"font-mono text-xs text-wm-muted uppercase tracking-widest mb-2",children:S("enterpriseShowcase.commodity")}),m.jsx("p",{className:"text-sm",children:S("enterpriseShowcase.commodityDesc")})]}),m.jsxs("div",{className:"data-cell",children:[m.jsx("h3",{className:"font-mono text-xs text-wm-muted uppercase tracking-widest mb-2",children:S("enterpriseShowcase.government")}),m.jsx("p",{className:"text-sm",children:S("enterpriseShowcase.governmentDesc")})]}),m.jsxs("div",{className:"data-cell",children:[m.jsx("h3",{className:"font-mono text-xs text-wm-muted uppercase tracking-widest mb-2",children:S("enterpriseShowcase.risk")}),m.jsx("p",{className:"text-sm",children:S("enterpriseShowcase.riskDesc")})]}),m.jsxs("div",{className:"data-cell",children:[m.jsx("h3",{className:"font-mono text-xs text-wm-muted uppercase tracking-widest mb-2",children:S("enterpriseShowcase.soc")}),m.jsx("p",{className:"text-sm",children:S("enterpriseShowcase.socDesc")})]})]})]})}),m.jsx("section",{className:"py-24 px-6 border-t border-wm-border",id:"contact",children:m.jsxs("div",{className:"max-w-xl mx-auto",children:[m.jsx("h2",{className:"font-display text-3xl font-bold mb-2 text-center",children:S("enterpriseShowcase.contactFormTitle")}),m.jsx("p",{className:"text-sm text-wm-muted mb-10 text-center",children:S("enterpriseShowcase.contactFormSubtitle")}),m.jsxs("form",{className:"space-y-4",onSubmit:async i=>{var y;i.preventDefault();const a=i.currentTarget,l=a.querySelector('button[type="submit"]'),r=l.textContent;l.disabled=!0,l.textContent=S("enterpriseShowcase.contactSending");const u=new FormData(a),f=((y=a.querySelector('input[name="website"]'))==null?void 0:y.value)||"",d=a.querySelector(".cf-turnstile"),h=(d==null?void 0:d.dataset.token)||"";try{const p=await fetch(`${xv}/contact`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:u.get("email"),name:u.get("name"),organization:u.get("organization"),phone:u.get("phone"),message:u.get("message"),source:"enterprise-contact",website:f,turnstileToken:h})}),v=a.querySelector("[data-form-error]");if(!p.ok){const b=await p.json().catch(()=>({}));if(p.status===422&&v){v.textContent=b.error||S("enterpriseShowcase.workEmailRequired"),v.classList.remove("hidden"),l.textContent=r,l.disabled=!1;return}throw new Error}v&&v.classList.add("hidden"),l.textContent=S("enterpriseShowcase.contactSent"),l.className=l.className.replace("bg-wm-green","bg-wm-card border border-wm-green text-wm-green")}catch{l.textContent=S("enterpriseShowcase.contactFailed"),l.disabled=!1,d!=null&&d.dataset.widgetId&&window.turnstile&&(window.turnstile.reset(d.dataset.widgetId),delete d.dataset.token),setTimeout(()=>{l.textContent=r},4e3)}},children:[m.jsx("input",{type:"text",name:"website",autoComplete:"off",tabIndex:-1,"aria-hidden":"true",className:"absolute opacity-0 h-0 w-0 pointer-events-none"}),m.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[m.jsx("input",{type:"text",name:"name",placeholder:S("enterpriseShowcase.namePlaceholder"),required:!0,className:"bg-wm-bg border border-wm-border rounded-sm px-4 py-3 text-sm focus:outline-none focus:border-wm-green transition-colors font-mono"}),m.jsx("input",{type:"email",name:"email",placeholder:S("enterpriseShowcase.emailPlaceholder"),required:!0,className:"bg-wm-bg border border-wm-border rounded-sm px-4 py-3 text-sm focus:outline-none focus:border-wm-green transition-colors font-mono"})]}),m.jsx("span",{"data-form-error":!0,className:"hidden text-red-400 text-xs font-mono block"}),m.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[m.jsx("input",{type:"text",name:"organization",placeholder:S("enterpriseShowcase.orgPlaceholder"),required:!0,className:"bg-wm-bg border border-wm-border rounded-sm px-4 py-3 text-sm focus:outline-none focus:border-wm-green transition-colors font-mono"}),m.jsx("input",{type:"tel",name:"phone",placeholder:S("enterpriseShowcase.phonePlaceholder"),required:!0,className:"bg-wm-bg border border-wm-border rounded-sm px-4 py-3 text-sm focus:outline-none focus:border-wm-green transition-colors font-mono"})]}),m.jsx("textarea",{name:"message",placeholder:S("enterpriseShowcase.messagePlaceholder"),rows:4,className:"w-full bg-wm-bg border border-wm-border rounded-sm px-4 py-3 text-sm focus:outline-none focus:border-wm-green transition-colors font-mono resize-none"}),m.jsx("div",{className:"cf-turnstile mx-auto"}),m.jsx("button",{type:"submit",className:"w-full bg-wm-green text-wm-bg py-3 rounded-sm font-mono text-sm uppercase tracking-wider font-bold hover:bg-green-400 transition-colors",children:S("enterpriseShowcase.submitContact")})]})]})})]}),m.jsx("footer",{className:"border-t border-wm-border bg-[#020202] py-8 px-6 text-center",children:m.jsxs("div",{className:"flex flex-col md:flex-row items-center justify-between max-w-7xl mx-auto text-xs text-wm-muted font-mono",children:[m.jsxs("div",{className:"flex items-center gap-3 mb-4 md:mb-0",children:[m.jsx("img",{src:"/favico/favicon-32x32.png",alt:"",width:"28",height:"28",className:"rounded-full"}),m.jsxs("div",{className:"flex flex-col",children:[m.jsx("span",{className:"font-display font-bold text-sm leading-none tracking-tight text-wm-text",children:"WORLD MONITOR"}),m.jsx("span",{className:"text-[9px] uppercase tracking-[2px] opacity-60 mt-0.5",children:"by Someone.ceo"})]})]}),m.jsxs("div",{className:"flex items-center gap-6",children:[m.jsx("a",{href:"/",className:"hover:text-wm-text transition-colors",children:"Dashboard"}),m.jsx("a",{href:"https://www.worldmonitor.app/blog/",className:"hover:text-wm-text transition-colors",children:"Blog"}),m.jsx("a",{href:"https://www.worldmonitor.app/docs",className:"hover:text-wm-text transition-colors",children:"Docs"}),m.jsx("a",{href:"https://github.com/koala73/worldmonitor",target:"_blank",rel:"noreferrer",className:"hover:text-wm-text transition-colors",children:"GitHub"}),m.jsx("a",{href:"https://github.com/koala73/worldmonitor/discussions",target:"_blank",rel:"noreferrer",className:"hover:text-wm-text transition-colors",children:"Discussions"}),m.jsx("a",{href:"https://x.com/worldmonitorai",target:"_blank",rel:"noreferrer",className:"hover:text-wm-text transition-colors",children:"X"}),m.jsx("a",{href:"https://status.worldmonitor.app/",target:"_blank",rel:"noreferrer",className:"hover:text-wm-text transition-colors",children:"Status"})]}),m.jsxs("span",{className:"text-[10px] opacity-40 mt-4 md:mt-0",children:["© ",new Date().getFullYear()," WorldMonitor"]})]})})]});function L3(){const[i,a]=te.useState(()=>window.location.hash.startsWith("#enterprise")?"enterprise":"home");return te.useEffect(()=>{const l=()=>{const r=window.location.hash,u=r.startsWith("#enterprise")?"enterprise":"home",f=i==="enterprise";a(u),u==="enterprise"&&!f&&window.scrollTo(0,0),r==="#enterprise-contact"&&setTimeout(()=>{var d;(d=document.getElementById("contact"))==null||d.scrollIntoView({behavior:"smooth"})},f?0:100)};return window.addEventListener("hashchange",l),()=>window.removeEventListener("hashchange",l)},[i]),te.useEffect(()=>{i==="enterprise"&&window.location.hash==="#enterprise-contact"&&setTimeout(()=>{var l;(l=document.getElementById("contact"))==null||l.scrollIntoView({behavior:"smooth"})},100)},[]),i==="enterprise"?m.jsx(R3,{}):m.jsxs("div",{className:"min-h-screen selection:bg-wm-green/30 selection:text-wm-green",children:[m.jsx(g3,{}),m.jsxs("main",{children:[m.jsx(x3,{}),m.jsx(b3,{}),m.jsx(S3,{}),m.jsx(j3,{}),m.jsx(w3,{}),m.jsx(T3,{}),m.jsx(A3,{}),m.jsx(E3,{}),m.jsx(N3,{}),m.jsx(D3,{}),m.jsx(M3,{}),m.jsx(C3,{})]}),m.jsx(O3,{})]})}const _3='script[src^="https://challenges.cloudflare.com/turnstile/v0/api.js"]';r3().then(()=>{tb.createRoot(document.getElementById("root")).render(m.jsx(te.StrictMode,{children:m.jsx(L3,{})}));const i=()=>window.turnstile?d3()>0:!1,a=document.querySelector(_3);if(a==null||a.addEventListener("load",()=>{i()},{once:!0}),!i()){let l=0;const r=window.setInterval(()=>{(i()||++l>=20)&&window.clearInterval(r)},500)}window.addEventListener("hashchange",()=>{let l=0;const r=()=>{i()||++l>=10||setTimeout(r,200)};setTimeout(r,100)})}); diff --git a/public/pro/index.html b/public/pro/index.html index 7d08e34199..cacd5eecef 100644 --- a/public/pro/index.html +++ b/public/pro/index.html @@ -117,78 +117,12 @@ ] } - - - + + -
-
-

undefined undefined

-

undefined

-

undefined

- -

Plans

-

World Monitor Pro

-

For investors, analysts, and professionals who need stock monitoring, geopolitical analysis, and daily AI briefings.

-

Equity research — global stock analysis, financials, analyst targets, valuation metrics

-

Geopolitical analysis — Grand Chessboard framework, Prisoners of Geography models

-

Economy analytics — GDP, inflation, interest rates, growth cycles

-

AI morning briefs & flash alerts delivered to Slack, Telegram, WhatsApp, Email

- -

World Monitor Enterprise

-

For teams that need shared monitoring, API access, deployment options, TV apps, and direct support.

- -

Why upgrade

-

Less noise

Filter events, feeds, layers, and live sources around the places and signals you care about.

-

Market intelligence

Equity research, analyst targets, and macro analytics — correlated with geopolitical signals that move markets.

-

More control

Save watchlists, custom views, and alert setups for the events you follow most.

-

Deeper analysis

Grand Chessboard frameworks, Prisoners of Geography models, central bank tracking, and scenario analysis.

- -

Your AI Analyst That Never Sleeps

-

The free dashboard shows you the world. Pro tells you what it means — stocks, macro trends, geopolitical risk, and the connections between them.

-

Equity Research

Global stock analysis with financials visualization, analyst price targets, and valuation metrics. Track what moves markets.

-

Geopolitical Analysis

Grand Chessboard strategic framework, Prisoners of Geography models, and central bank & monetary policy tracking.

-

Economy Analytics

GDP, inflation, interest rates, and growth cycles. Macro data correlated with market signals and geopolitical events.

-

Risk Monitoring & Scenarios

Global risk scoring, scenario analysis, and geopolitical risk assessment. Convergence detection across market and political signals.

-

Daily Briefs & Flash Alerts

AI-synthesized overnight developments ranked by your focus areas. Market-moving events and geopolitical shifts pushed in real-time.

-

22 Services, 1 Key

Finnhub, FRED, ACLED, UCDP, NASA FIRMS, AISStream, OpenSky, and more — all active, no separate registrations.

- -

Built for people who need signal fast

-

Investors & portfolio managers

Track global equities, analyst targets, valuation metrics, and macro indicators alongside geopolitical risk signals.

-

Energy & commodities traders

Track vessel movements, cargo inference, supply chain disruptions, and market-moving geopolitical signals.

-

Researchers & analysts

Equity research, economy analytics, and geopolitical frameworks for deeper analysis and reporting.

-

Journalists & media

Follow fast-moving developments across markets and regions without stitching sources together manually.

-

Government & institutions

Macro policy tracking, central bank monitoring, and situational awareness across geopolitical and infrastructure signals.

-

Teams & organizations

Move from individual use to shared workflows, API access, TV apps, and managed deployments.

- -

What World Monitor Tracks

-

22 service domains ingested simultaneously. Markets, macro, geopolitics, energy, infrastructure — everything normalized and rendered on a WebGL globe.

- -

Programmatic Intelligence

-

For developers, analysts, and teams building on World Monitor data. Separate from Pro — use both or either.

- -

Intelligence Infrastructure

-

For governments, institutions, trading desks, and organizations that need the full platform with maximum security, AI agents, TV apps, and data depth.

- -

Compare Tiers

- -

Frequently Asked Questions

-
-
Is World Monitor still free?
Yes. The core platform remains free. Pro adds equity research, macro analytics, and AI briefings. Enterprise adds team deployments and TV apps.
-
Why pay for Pro?
Pro is for investors, analysts, and professionals who want stock monitoring, geopolitical analysis, economy analytics, and AI-powered daily briefings — all under one key.
-
Who is Enterprise for?
Enterprise is for teams that need shared use, APIs, integrations, deployment options, and direct support.
-
Can I start with Pro and upgrade later?
Yes. Pro works for serious individuals. Enterprise is there when team and deployment needs grow.
-
Is this only for conflict monitoring?
No. World Monitor is primarily a global intelligence platform covering stock markets, macroeconomics, geopolitical analysis, energy, infrastructure, and more. Conflict tracking is one of many capabilities — not the focus.
-
Why keep the core platform free?
Because public access matters. Paid plans fund deeper workflows for serious users and organizations.
-
Can I still use my own API keys?
Yes. Bring-your-own-keys always works. Pro simply means you don't have to register for 20+ separate services.
-
What's MCP?
Model Context Protocol lets AI agents (Claude, GPT, or custom LLMs) use World Monitor as a tool — querying all 22 services, reading map state, and triggering analysis. Enterprise only.
-
- -

Start with Pro. Scale to Enterprise.

-

Keep using World Monitor for free, or upgrade for equity research, macro analytics, and AI briefings. If your organization needs team access, TV apps, or API support, talk to us.

-
+